ZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk5Y2JhZgotLS0gL2Rldi9udWxsCisrKyBiL01ha2VmaWxlCkBAIC0wLDAgKzEsMTc4IEBACisjCisjICAgIENvcHlyaWdodCAoYykgMjAxMC0yMDExIE5lc3QsIEluYy4KKyMgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgICAgVGhpcyBkb2N1bWVudCBpcyB0aGUgcHJvcGVydHkgb2YgTmVzdC4gSXQgaXMgY29uc2lkZXJlZAorIyAgICBjb25maWRlbnRpYWwgYW5kIHByb3ByaWV0YXJ5IGluZm9ybWF0aW9uLgorIworIyAgICBUaGlzIGRvY3VtZW50IG1heSBub3QgYmUgcmVwcm9kdWNlZCBvciB0cmFuc21pdHRlZCBpbiBhbnkgZm9ybSwKKyMgICAgaW4gd2hvbGUgb3IgaW4gcGFydCwgd2l0aG91dCB0aGUgZXhwcmVzcyB3cml0dGVuIHBlcm1pc3Npb24gb2YKKyMgICAgTmVzdC4KKyMKKyMgICAgRGVzY3JpcHRpb246CisjICAgICAgVGhpcyBmaWxlIGlzIHRoZSBtYWtlZmlsZSBmb3IgdGhlIEF2YWhpIFplcm9Db25mIChha2EgQm9uam91cikKKyMgICAgICBtdWx0aWNhc3QgRE5TIChtRE5TKSBTZXJ2aWNlIERpc2NvdmVyeSAoU0QpIHNvZnR3YXJlLgorIworCitCdWlsZENvbmZpZ1NwZWNpYWxpemVkCTo9IE5vCitCdWlsZFByb2R1Y3RTcGVjaWFsaXplZAk6PSBObworCitpbmNsdWRlIHByZS5tYWsKKworUGFja2FnZU5hbWUJCTo9IGF2YWhpCisKK1BhY2thZ2VFeHRlbnNpb24JOj0gdGFyLmd6CitQYWNrYWdlU2VwYXJhdG9yCTo9IC0KKworUGFja2FnZVBhdGNoQXJncwk6PSAtcDEKKworUGFja2FnZUFyY2hpdmUJCTo9ICQoUGFja2FnZU5hbWUpLiQoUGFja2FnZUV4dGVuc2lvbikKK1BhY2thZ2VTb3VyY2VEaXIJOj0gJChQYWNrYWdlTmFtZSkkKFBhY2thZ2VTZXBhcmF0b3IpJChQYWNrYWdlVmVyc2lvbikvCisKK1BhY2thZ2VCdWlsZE1ha2VmaWxlCT0gJChjYWxsIEdlbmVyYXRlQnVpbGRQYXRocyxNYWtlZmlsZSkKKworQ2xlYW5QYXRocwkJKz0gJChQYWNrYWdlTGljZW5zZUZpbGUpCisKK0RidXNEaXIJCQk6PSBzdy90cHMvZGJ1cworRGJ1c0luY0RpcgkJOj0gJChjYWxsIEdlbmVyYXRlUmVzdWx0UGF0aHMsJChEYnVzRGlyKSx1c3IvaW5jbHVkZS9kYnVzLTEuMCkKK0RidXNBcmNoSW5jRGlyCQk6PSAkKGNhbGwgR2VuZXJhdGVSZXN1bHRQYXRocywkKERidXNEaXIpLHVzci9saWIvZGJ1cy0xLjAvaW5jbHVkZSkKK0RidXNMaWJEaXIJCTo9ICQoY2FsbCBHZW5lcmF0ZVJlc3VsdFBhdGhzLCQoRGJ1c0RpciksdXNyL2xpYikKKworRXhwYXREaXIJCTo9IHN3L3Rwcy9leHBhdAorRXhwYXRJbmNEaXIJCT0gJChjYWxsIEdlbmVyYXRlUmVzdWx0UGF0aHMsJChFeHBhdERpciksdXNyL2luY2x1ZGUpCitFeHBhdExpYkRpcgkJPSAkKGNhbGwgR2VuZXJhdGVSZXN1bHRQYXRocywkKEV4cGF0RGlyKSx1c3IvbGliKQorCitMaWJDYXBEaXIJCTo9IHN3L3Rwcy9saWJjYXAKK0xpYkNhcEluY0RpcgkJPSAkKGNhbGwgR2VuZXJhdGVSZXN1bHRQYXRocywkKExpYkNhcERpciksdXNyL2luY2x1ZGUpCitMaWJDYXBMaWJEaXIJCT0gJChjYWxsIEdlbmVyYXRlUmVzdWx0UGF0aHMsJChMaWJDYXBEaXIpLGxpYikKKworTGliRGFlbW9uRGlyCQk6PSBzdy90cHMvbGliZGFlbW9uCitMaWJEYWVtb25JbmNEaXIJCT0gJChjYWxsIEdlbmVyYXRlUmVzdWx0UGF0aHMsJChMaWJEYWVtb25EaXIpLHVzci9pbmNsdWRlKQorTGliRGFlbW9uTGliRGlyCQk9ICQoY2FsbCBHZW5lcmF0ZVJlc3VsdFBhdGhzLCQoTGliRGFlbW9uRGlyKSx1c3IvbGliKQorCithbGw6ICQoUGFja2FnZURlZmF1bHRHb2FsKQorCisjIEdlbmVyYXRlIHRoZSBwYWNrYWdlIGxpY2Vuc2UgY29udGVudHMuCisKKyQoUGFja2FnZVNvdXJjZURpcikvTElDRU5TRTogc291cmNlCisKKyQoUGFja2FnZUxpY2Vuc2VGaWxlKTogJChQYWNrYWdlU291cmNlRGlyKS9MSUNFTlNFCisJJChjb3B5LXJlc3VsdCkKKworIyBFeHRyYWN0IHRoZSBzb3VyY2UgZnJvbSB0aGUgYXJjaGl2ZSBhbmQgYXBwbHkgcGF0Y2hlcywgaWYgYW55LgorCiskKFBhY2thZ2VTb3VyY2VEaXIpOiAkKFBhY2thZ2VBcmNoaXZlKSAkKFBhY2thZ2VQYXRjaFBhdGhzKQorCSQoZXhwYW5kLWFuZC1wYXRjaC1wYWNrYWdlKQorCisjIFByZXBhcmUgdGhlIHNvdXJjZXMuCisKKy5QSE9OWTogc291cmNlCitzb3VyY2U6IHwgJChQYWNrYWdlU291cmNlRGlyKQorCisjIFBhdGNoIHRoZSBzb3VyY2VzLCBpZiBuZWNlc3NhcnkuCisKKy5QSE9OWTogcGF0Y2gKK3BhdGNoOiBzb3VyY2UKKworIyBHZW5lcmF0ZSB0aGUgcGFja2FnZSBidWlsZCBtYWtlZmlsZS4KKworJChQYWNrYWdlQnVpbGRNYWtlZmlsZSk6IHwgJChQYWNrYWdlU291cmNlRGlyKSAkKEJ1aWxkRGlyZWN0b3J5KQorCSQoVmVyYm9zZSljZCAkKEJ1aWxkRGlyZWN0b3J5KSAmJiBcCisJJChDVVJESVIpLyQoUGFja2FnZVNvdXJjZURpcikvY29uZmlndXJlIFwKKwlDQz0iJChDQykiIENYWD0iJChDWFgpIiBBUj0kKEFSKSBSQU5MSUI9JChSQU5MSUIpIFNUUklQPSQoU1RSSVApIFwKKwlJTlNUQUxMPSIkKElOU1RBTEwpICQoSU5TVEFMTEZMQUdTKSIgXAorCUNQUEZMQUdTPSItSSQoRXhwYXRJbmNEaXIpIC1JJChMaWJDYXBJbmNEaXIpIiBcCisJTERGTEFHUz0iLUwkKEV4cGF0TGliRGlyKSAtTCQoTGliQ2FwTGliRGlyKSIgXAorCURCVVNfQ0ZMQUdTPSItSSQoRGJ1c0luY0RpcikgLUkkKERidXNBcmNoSW5jRGlyKSIgXAorCURCVVNfTElCUz0iLUwkKERidXNMaWJEaXIpIC1sZGJ1cy0xIiBcCisJREJVU19WRVJTSU9OPSQoc2hlbGwgY2F0ICQoQnVpbGRSb290KS8kKERidXNEaXIpL2RidXMudmVyc2lvbikgXAorCUxJQkRBRU1PTl9DRkxBR1M9Ii1JJChMaWJEYWVtb25JbmNEaXIpIiBcCisJTElCREFFTU9OX0xJQlM9Ii1MJChMaWJEYWVtb25MaWJEaXIpIC1sZGFlbW9uIiBcCisJLS1idWlsZD0kKEhvc3RUdXBsZSkgXAorCS0taG9zdD0kKFRhcmdldFR1cGxlKSBcCisJLS1kaXNhYmxlLWF1dG9pcGQgXAorCS0tZGlzYWJsZS1nZGJtIFwKKwktLWRpc2FibGUtZ2xpYiBcCisJLS1kaXNhYmxlLWdvYmplY3QgXAorCS0tZGlzYWJsZS1ndGsgXAorCS0tZGlzYWJsZS1ndGszIFwKKwktLWRpc2FibGUtbWFucGFnZXMgXAorCS0tZGlzYWJsZS1tb25vIFwKKwktLWRpc2FibGUtbW9ub2RvYyBcCisJLS1kaXNhYmxlLXB5dGhvbiBcCisJLS1kaXNhYmxlLXF0MyBcCisJLS1kaXNhYmxlLXF0NCBcCisJLS1lbmFibGUtZGJ1cyBcCisJLS1lbmFibGUtbGliZGFlbW9uIFwKKwktLXdpdGgtZGlzdHJvPW5vbmUgXAorCS0td2l0aC14bWw9ZXhwYXQgXAorCS0tcHJlZml4PS91c3IgXAorCS0tc3lzY29uZmRpcj0vZXRjIFwKKwktLWxvY2Fsc3RhdGVkaXI9L3ZhciBcCisJLS1kaXNhYmxlLXN0YXRpYworCisjIENvbmZpZ3VyZSB0aGUgc291cmNlIGZvciBidWlsZGluZy4KKyMKKyMgQXZhaGkgdXNlcyBhbmQsIGluIGZhY3QsIHJlcXVpcmVzIHBrZy1jb25maWcgdG8gc2V0LXVwIExERkxBR1MgYW5kCisjIENGTEFHUyBmb3IgTElCREFFTU9OIGV2ZW4gdGhvdWdoIHRoZXNlIGFyZSBleHBsaWNpdGx5IHByb3ZpZGVkIG9uCisjIHRoZSBjb25maWd1cmUgY29tbWFuZCBsaW5lIGFib3ZlIGFzIHByZXNjcmliZWQgaW4gdGhlICJob3cgdG8KKyMgY29uZmlndXJlIFdJVEhPVVQgcGtnLWNvbmZpZyIgaW5zdHJ1Y3Rpb25zLgorIworIyBVbmZvcnR1bmF0ZWx5LCBzb21lIHNpdGUgTGludXggc3lzdGVtcyBhcmUgcXVpdGUgb2xkIGFuZCBoYXZlIGEKKyMgdmVyc2lvbiBvZiBwa2ctY29uZmlnIHRoYXQgYXZhaGkgcmVmdXNlcyB0byB3b3JrIHdpdGguCisjIENvbnNlcXVlbnRseSwgd2UgcGxhY2UgJChIb3N0QmluRGlyKSBmaXJzdCBpbiB0aGUgcGF0aCB0byBlbnN1cmUKKyMgdGhhdCB0aGUgcHJvamVjdC1sb2NhbCB2ZXJzaW9uIG9mIHBrZy1jb25maWcgaXMgZGV0ZWN0ZWQgYW5kIHVzZWQKKyMgcmF0aGVyIHRoYW4gYSBob3N0LSBvciBzaXRlLWxvY2FsIHZlcnNpb24uCisKK2NvbmZpZ3VyZTogUEFUSCA6PSAkKEhvc3RCaW5EaXIpOiQoUEFUSCkKKworLlBIT05ZOiBjb25maWd1cmUKK2NvbmZpZ3VyZTogc291cmNlICQoUGFja2FnZUJ1aWxkTWFrZWZpbGUpCisKKyMgQnVpbGQgdGhlIHNvdXJjZS4KKyMKKyMgV2UgaGF2ZSB0byB1bnNldCBNQUtFRkxBR1Mgc2luY2UgdGhleSBjb25mdXNlIHRoZSBwYWNrYWdlIGJ1aWxkIG90aGVyd2lzZS4KKworLlBIT05ZOiBidWlsZAorYnVpbGQ6IGNvbmZpZ3VyZQorCSQoVmVyYm9zZSl1bnNldCBNQUtFRkxBR1MgJiYgXAorCSQoTUFLRSkgJChKT0JTRkxBRykgLUMgJChCdWlsZERpcmVjdG9yeSkgYWxsCisKKyMgU3RhZ2UgdGhlIGJ1aWxkIHRvIGEgdGVtcG9yYXJ5IGluc3RhbGxhdGlvbiBhcmVhLgorIworIyBXZSBoYXZlIHRvIHVuc2V0IE1BS0VGTEFHUyBzaW5jZSB0aGV5IGNvbmZ1c2UgdGhlIHBhY2thZ2UgYnVpbGQgb3RoZXJ3aXNlLgorIworIyBXZSBleHBsaWN0bHkgcmVtb3ZlICdsaWJhdmFoaS1jb3JlLmxhJyBhbmQgJ2xpYmF2YWhpLWNvbW1vbi5sYScKKyMgYmVjYXVzZSBzb21lIHBhY2thZ2VzIHRoYXQgZGVwZW5kIG9uIHRoZXNlIGxpYnJhcmllcyB1c2UgbGlidG9vbC4gSWYKKyMgbGlidG9vbCBmaW5kcyBhICcqLmxhJyBmaWxlIGZvciBhIGxpYnJhcnksIGl0IHVzZXMgdGhlIHZhbHVlIG9mCisjICdsaWJkaXI9PGRpcj4nIGl0IGZpbmRzLiBJbiBvdXIgY2FzZSwgc2luY2UgJy0tcHJlZml4PS91c3InIHRoaXMKKyMgdmFsdWUgaXMgJy91c3IvbGliJy4gSXQgdGhlbiByZXNvbHZlcyAnLWxhdmFoaS1jb3JlJyBvcgorIyAnLWxhdmFoaS1jb21tb24nIHRvICcvdXNyL2xpYi9saWJhdmFoaS1jb3JlLnNvJyBhbmQKKyMgJy91c3IvbGliL2xpYmF2YWhpLWNvbW1vbi5zbycsIHJlc3BlY3RpdmVseS4gSW4gYSBjcm9zcy1jb21waWxhdGlvbgorIyBlbnZpcm9ubWVudCwgdGhpcyBpcyBsaWtlbHkgdG8gYmUgbmVpdGhlciB0aGUgcmlnaHQgYXJjaGl0ZWN0dXJlIG5vcgorIyB0aGUgcmlnaHQgdmVyc2lvbiB0byBsaW5rIGFnYWluc3QuIEluIHNob3J0LCB3ZSBsb3NlLgorIworIyBXZSBjb3VsZCBhbHNvIGhhbmRsZSB0aGlzIGJ5IHJlbW92aW5nIERFU1RESVIgYW5kIHNldHRpbmcgdGhlIHByZWZpeAorIyB0byAkKFJlc3VsdERpcmVjdG9yeSk7IGhvd2V2ZXIsIHRoYXQgcmVzdWx0cyBpbiBsaWJ0b29sIGhhcmQtY29kaW5nCisjICQoUmVzdWx0RGlyZWN0b3J5KSBhcyB0aGUgUlBBVEggaW4gdGhlIGxpbmtlZCBleGVjdXRhYmxlcyB3aGljaCBpcworIyBOT1Qgd2hhdCB3ZSB3YW50IGVpdGhlci4gV2UgbG9zZSBhZ2Fpbi4KKyMKKyMgQnkgcmVtb3ZpbmcgdGhlICcqLmxhJyBmaWxlLCB3ZSB3aW4gYnkgZW5zdXJpbmcgbmVpdGhlciBhIG1pc2RpcmVjdGVkCisjIGxpbmsgbm9yIGFuIFJQQVRILgorCisuUEhPTlk6IHN0YWdlCitzdGFnZTogYnVpbGQgfCAkKFJlc3VsdERpcmVjdG9yeSkKKwkkKFZlcmJvc2UpdW5zZXQgTUFLRUZMQUdTICYmIFwKKwkkKE1BS0UpICQoSk9CU0ZMQUcpIC1DICQoQnVpbGREaXJlY3RvcnkpIERFU1RESVI9JChSZXN1bHREaXJlY3RvcnkpIGluc3RhbGwKKwkkKFZlcmJvc2UpJChSTSkgJChSTUZMQUdTKSAkKGNhbGwgR2VuZXJhdGVSZXN1bHRQYXRocywsdXNyL2xpYi9saWJhdmFoaS1jb21tb24ubGEgdXNyL2xpYi9saWJhdmFoaS1jb3JlLmxhIHVzci9saWIvbGliYXZhaGktY2xpZW50LmxhKQorCisKK2NsZWFuOgorCSQoVmVyYm9zZSkkKFJNKSAkKFJNRkxBR1MpIC1yICQoUGFja2FnZVNvdXJjZURpcikKKwkkKFZlcmJvc2UpJChSTSkgJChSTUZMQUdTKSAtciAkKEJ1aWxkRGlyZWN0b3J5KQorCSQoVmVyYm9zZSkkKFJNKSAkKFJNRkxBR1MpIC1yICQoUmVzdWx0RGlyZWN0b3J5KQorCitpbmNsdWRlIHBvc3QubWFrCisKKworCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvQUJPVVQtTkxTIGIvYXZhaGktMC42LjMxL0FCT1VULU5MUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWRlMWI2Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL0FCT1VULU5MUwpAQCAtMCwwICsxLDEyODIgQEAKKzEgTm90ZXMgb24gdGhlIEZyZWUgVHJhbnNsYXRpb24gUHJvamVjdAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK0ZyZWUgc29mdHdhcmUgaXMgZ29pbmcgaW50ZXJuYXRpb25hbCEgIFRoZSBGcmVlIFRyYW5zbGF0aW9uIFByb2plY3QgaXMKK2Egd2F5IHRvIGdldCBtYWludGFpbmVycyBvZiBmcmVlIHNvZnR3YXJlLCB0cmFuc2xhdG9ycywgYW5kIHVzZXJzIGFsbAordG9nZXRoZXIsIHNvIHRoYXQgZnJlZSBzb2Z0d2FyZSB3aWxsIGdyYWR1YWxseSBiZWNvbWUgYWJsZSB0byBzcGVhayBtYW55CitsYW5ndWFnZXMuICBBIGZldyBwYWNrYWdlcyBhbHJlYWR5IHByb3ZpZGUgdHJhbnNsYXRpb25zIGZvciB0aGVpcgorbWVzc2FnZXMuCisKKyAgIElmIHlvdSBmb3VuZCB0aGlzIGBBQk9VVC1OTFMnIGZpbGUgaW5zaWRlIGEgZGlzdHJpYnV0aW9uLCB5b3UgbWF5Cithc3N1bWUgdGhhdCB0aGUgZGlzdHJpYnV0ZWQgcGFja2FnZSBkb2VzIHVzZSBHTlUgYGdldHRleHQnIGludGVybmFsbHksCitpdHNlbGYgYXZhaWxhYmxlIGF0IHlvdXIgbmVhcmVzdCBHTlUgYXJjaGl2ZSBzaXRlLiAgQnV0IHlvdSBkbyBfbm90XworbmVlZCB0byBpbnN0YWxsIEdOVSBgZ2V0dGV4dCcgcHJpb3IgdG8gY29uZmlndXJpbmcsIGluc3RhbGxpbmcgb3IgdXNpbmcKK3RoaXMgcGFja2FnZSB3aXRoIG1lc3NhZ2VzIHRyYW5zbGF0ZWQuCisKKyAgIEluc3RhbGxlcnMgd2lsbCBmaW5kIGhlcmUgc29tZSB1c2VmdWwgaGludHMuICBUaGVzZSBub3RlcyBhbHNvCitleHBsYWluIGhvdyB1c2VycyBzaG91bGQgcHJvY2VlZCBmb3IgZ2V0dGluZyB0aGUgcHJvZ3JhbXMgdG8gdXNlIHRoZQorYXZhaWxhYmxlIHRyYW5zbGF0aW9ucy4gIFRoZXkgdGVsbCBob3cgcGVvcGxlIHdhbnRpbmcgdG8gY29udHJpYnV0ZSBhbmQKK3dvcmsgb24gdHJhbnNsYXRpb25zIGNhbiBjb250YWN0IHRoZSBhcHByb3ByaWF0ZSB0ZWFtLgorCisxLjEgSU5TVEFMTCBNYXR0ZXJzCis9PT09PT09PT09PT09PT09PT09CisKK1NvbWUgcGFja2FnZXMgYXJlICJsb2NhbGl6YWJsZSIgd2hlbiBwcm9wZXJseSBpbnN0YWxsZWQ7IHRoZSBwcm9ncmFtcwordGhleSBjb250YWluIGNhbiBiZSBtYWRlIHRvIHNwZWFrIHlvdXIgb3duIG5hdGl2ZSBsYW5ndWFnZS4gIE1vc3Qgc3VjaAorcGFja2FnZXMgdXNlIEdOVSBgZ2V0dGV4dCcuICBPdGhlciBwYWNrYWdlcyBoYXZlIHRoZWlyIG93biB3YXlzIHRvCitpbnRlcm5hdGlvbmFsaXphdGlvbiwgcHJlZGF0aW5nIEdOVSBgZ2V0dGV4dCcuCisKKyAgIEJ5IGRlZmF1bHQsIHRoaXMgcGFja2FnZSB3aWxsIGJlIGluc3RhbGxlZCB0byBhbGxvdyB0cmFuc2xhdGlvbiBvZgorbWVzc2FnZXMuICBJdCB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHdoZXRoZXIgdGhlIHN5c3RlbSBhbHJlYWR5Citwcm92aWRlcyB0aGUgR05VIGBnZXR0ZXh0JyBmdW5jdGlvbnMuICBJbnN0YWxsZXJzIG1heSB1c2Ugc3BlY2lhbAorb3B0aW9ucyBhdCBjb25maWd1cmF0aW9uIHRpbWUgZm9yIGNoYW5naW5nIHRoZSBkZWZhdWx0IGJlaGF2aW91ci4gIFRoZQorY29tbWFuZDoKKworICAgICAuL2NvbmZpZ3VyZSAtLWRpc2FibGUtbmxzCisKK3dpbGwgX3RvdGFsbHlfIGRpc2FibGUgdHJhbnNsYXRpb24gb2YgbWVzc2FnZXMuCisKKyAgIFdoZW4geW91IGFscmVhZHkgaGF2ZSBHTlUgYGdldHRleHQnIGluc3RhbGxlZCBvbiB5b3VyIHN5c3RlbSBhbmQgcnVuCitjb25maWd1cmUgd2l0aG91dCBhbiBvcHRpb24gZm9yIHlvdXIgbmV3IHBhY2thZ2UsIGBjb25maWd1cmUnIHdpbGwKK3Byb2JhYmx5IGRldGVjdCB0aGUgcHJldmlvdXNseSBidWlsdCBhbmQgaW5zdGFsbGVkIGBsaWJpbnRsJyBsaWJyYXJ5CithbmQgd2lsbCBkZWNpZGUgdG8gdXNlIGl0LiAgSWYgbm90LCB5b3UgbWF5IGhhdmUgdG8gdG8gdXNlIHRoZQorYC0td2l0aC1saWJpbnRsLXByZWZpeCcgb3B0aW9uIHRvIHRlbGwgYGNvbmZpZ3VyZScgd2hlcmUgdG8gbG9vayBmb3IgaXQuCisKKyAgIEludGVybmF0aW9uYWxpemVkIHBhY2thZ2VzIHVzdWFsbHkgaGF2ZSBtYW55IGBwby9MTC5wbycgZmlsZXMsIHdoZXJlCitMTCBnaXZlcyBhbiBJU08gNjM5IHR3by1sZXR0ZXIgY29kZSBpZGVudGlmeWluZyB0aGUgbGFuZ3VhZ2UuICBVbmxlc3MKK3RyYW5zbGF0aW9ucyBoYXZlIGJlZW4gZm9yYmlkZGVuIGF0IGBjb25maWd1cmUnIHRpbWUgYnkgdXNpbmcgdGhlCitgLS1kaXNhYmxlLW5scycgc3dpdGNoLCBhbGwgYXZhaWxhYmxlIHRyYW5zbGF0aW9ucyBhcmUgaW5zdGFsbGVkCit0b2dldGhlciB3aXRoIHRoZSBwYWNrYWdlLiAgSG93ZXZlciwgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGBMSU5HVUFTJworbWF5IGJlIHNldCwgcHJpb3IgdG8gY29uZmlndXJhdGlvbiwgdG8gbGltaXQgdGhlIGluc3RhbGxlZCBzZXQuCitgTElOR1VBUycgc2hvdWxkIHRoZW4gY29udGFpbiBhIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIHR3by1sZXR0ZXIKK2NvZGVzLCBzdGF0aW5nIHdoaWNoIGxhbmd1YWdlcyBhcmUgYWxsb3dlZC4KKworMS4yIFVzaW5nIFRoaXMgUGFja2FnZQorPT09PT09PT09PT09PT09PT09PT09PQorCitBcyBhIHVzZXIsIGlmIHlvdXIgbGFuZ3VhZ2UgaGFzIGJlZW4gaW5zdGFsbGVkIGZvciB0aGlzIHBhY2thZ2UsIHlvdQorb25seSBoYXZlIHRvIHNldCB0aGUgYExBTkcnIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHRoZSBhcHByb3ByaWF0ZQorYExMX0NDJyBjb21iaW5hdGlvbi4gIElmIHlvdSBoYXBwZW4gdG8gaGF2ZSB0aGUgYExDX0FMTCcgb3Igc29tZSBvdGhlcgorYExDX3h4eCcgZW52aXJvbm1lbnQgdmFyaWFibGVzIHNldCwgeW91IHNob3VsZCB1bnNldCB0aGVtIGJlZm9yZQorc2V0dGluZyBgTEFORycsIG90aGVyd2lzZSB0aGUgc2V0dGluZyBvZiBgTEFORycgd2lsbCBub3QgaGF2ZSB0aGUKK2Rlc2lyZWQgZWZmZWN0LiAgSGVyZSBgTEwnIGlzIGFuIElTTyA2MzkgdHdvLWxldHRlciBsYW5ndWFnZSBjb2RlLCBhbmQKK2BDQycgaXMgYW4gSVNPIDMxNjYgdHdvLWxldHRlciBjb3VudHJ5IGNvZGUuICBGb3IgZXhhbXBsZSwgbGV0J3MKK3N1cHBvc2UgdGhhdCB5b3Ugc3BlYWsgR2VybWFuIGFuZCBsaXZlIGluIEdlcm1hbnkuICBBdCB0aGUgc2hlbGwKK3Byb21wdCwgbWVyZWx5IGV4ZWN1dGUgYHNldGVudiBMQU5HIGRlX0RFJyAoaW4gYGNzaCcpLAorYGV4cG9ydCBMQU5HOyBMQU5HPWRlX0RFJyAoaW4gYHNoJykgb3IgYGV4cG9ydCBMQU5HPWRlX0RFJyAoaW4gYGJhc2gnKS4KK1RoaXMgY2FuIGJlIGRvbmUgZnJvbSB5b3VyIGAubG9naW4nIG9yIGAucHJvZmlsZScgZmlsZSwgb25jZSBhbmQgZm9yCithbGwuCisKKyAgIFlvdSBtaWdodCB0aGluayB0aGF0IHRoZSBjb3VudHJ5IGNvZGUgc3BlY2lmaWNhdGlvbiBpcyByZWR1bmRhbnQuCitCdXQgaW4gZmFjdCwgc29tZSBsYW5ndWFnZXMgaGF2ZSBkaWFsZWN0cyBpbiBkaWZmZXJlbnQgY291bnRyaWVzLiAgRm9yCitleGFtcGxlLCBgZGVfQVQnIGlzIHVzZWQgZm9yIEF1c3RyaWEsIGFuZCBgcHRfQlInIGZvciBCcmF6aWwuICBUaGUKK2NvdW50cnkgY29kZSBzZXJ2ZXMgdG8gZGlzdGluZ3Vpc2ggdGhlIGRpYWxlY3RzLgorCisgICBUaGUgbG9jYWxlIG5hbWluZyBjb252ZW50aW9uIG9mIGBMTF9DQycsIHdpdGggYExMJyBkZW5vdGluZyB0aGUKK2xhbmd1YWdlIGFuZCBgQ0MnIGRlbm90aW5nIHRoZSBjb3VudHJ5LCBpcyB0aGUgb25lIHVzZSBvbiBzeXN0ZW1zIGJhc2VkCitvbiBHTlUgbGliYy4gIE9uIG90aGVyIHN5c3RlbXMsIHNvbWUgdmFyaWF0aW9ucyBvZiB0aGlzIHNjaGVtZSBhcmUKK3VzZWQsIHN1Y2ggYXMgYExMJyBvciBgTExfQ0MuRU5DT0RJTkcnLiAgWW91IGNhbiBnZXQgdGhlIGxpc3Qgb2YKK2xvY2FsZXMgc3VwcG9ydGVkIGJ5IHlvdXIgc3lzdGVtIGZvciB5b3VyIGxhbmd1YWdlIGJ5IHJ1bm5pbmcgdGhlCitjb21tYW5kIGBsb2NhbGUgLWEgfCBncmVwICdeTEwnJy4KKworICAgTm90IGFsbCBwcm9ncmFtcyBoYXZlIHRyYW5zbGF0aW9ucyBmb3IgYWxsIGxhbmd1YWdlcy4gIEJ5IGRlZmF1bHQsIGFuCitFbmdsaXNoIG1lc3NhZ2UgaXMgc2hvd24gaW4gcGxhY2Ugb2YgYSBub25leGlzdGVudCB0cmFuc2xhdGlvbi4gIElmIHlvdQordW5kZXJzdGFuZCBvdGhlciBsYW5ndWFnZXMsIHlvdSBjYW4gc2V0IHVwIGEgcHJpb3JpdHkgbGlzdCBvZiBsYW5ndWFnZXMuCitUaGlzIGlzIGRvbmUgdGhyb3VnaCBhIGRpZmZlcmVudCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgY2FsbGVkCitgTEFOR1VBR0UnLiAgR05VIGBnZXR0ZXh0JyBnaXZlcyBwcmVmZXJlbmNlIHRvIGBMQU5HVUFHRScgb3ZlciBgTEFORycKK2ZvciB0aGUgcHVycG9zZSBvZiBtZXNzYWdlIGhhbmRsaW5nLCBidXQgeW91IHN0aWxsIG5lZWQgdG8gaGF2ZSBgTEFORycKK3NldCB0byB0aGUgcHJpbWFyeSBsYW5ndWFnZTsgdGhpcyBpcyByZXF1aXJlZCBieSBvdGhlciBwYXJ0cyBvZiB0aGUKK3N5c3RlbSBsaWJyYXJpZXMuICBGb3IgZXhhbXBsZSwgc29tZSBTd2VkaXNoIHVzZXJzIHdobyB3b3VsZCByYXRoZXIKK3JlYWQgdHJhbnNsYXRpb25zIGluIEdlcm1hbiB0aGFuIEVuZ2xpc2ggZm9yIHdoZW4gU3dlZGlzaCBpcyBub3QKK2F2YWlsYWJsZSwgc2V0IGBMQU5HVUFHRScgdG8gYHN2OmRlJyB3aGlsZSBsZWF2aW5nIGBMQU5HJyB0byBgc3ZfU0UnLgorCisgICBTcGVjaWFsIGFkdmljZSBmb3IgTm9yd2VnaWFuIHVzZXJzOiBUaGUgbGFuZ3VhZ2UgY29kZSBmb3IgTm9yd2VnaWFuCitib2ttYSpsIGNoYW5nZWQgZnJvbSBgbm8nIHRvIGBuYicgcmVjZW50bHkgKGluIDIwMDMpLiAgRHVyaW5nIHRoZQordHJhbnNpdGlvbiBwZXJpb2QsIHdoaWxlIHNvbWUgbWVzc2FnZSBjYXRhbG9ncyBmb3IgdGhpcyBsYW5ndWFnZSBhcmUKK2luc3RhbGxlZCB1bmRlciBgbmInIGFuZCBzb21lIG9sZGVyIG9uZXMgdW5kZXIgYG5vJywgaXQncyByZWNvbW1lbmRlZAorZm9yIE5vcndlZ2lhbiB1c2VycyB0byBzZXQgYExBTkdVQUdFJyB0byBgbmI6bm8nIHNvIHRoYXQgYm90aCBuZXdlciBhbmQKK29sZGVyIHRyYW5zbGF0aW9ucyBhcmUgdXNlZC4KKworICAgSW4gdGhlIGBMQU5HVUFHRScgZW52aXJvbm1lbnQgdmFyaWFibGUsIGJ1dCBub3QgaW4gdGhlIGBMQU5HJworZW52aXJvbm1lbnQgdmFyaWFibGUsIGBMTF9DQycgY29tYmluYXRpb25zIGNhbiBiZSBhYmJyZXZpYXRlZCBhcyBgTEwnCit0byBkZW5vdGUgdGhlIGxhbmd1YWdlJ3MgbWFpbiBkaWFsZWN0LiAgRm9yIGV4YW1wbGUsIGBkZScgaXMgZXF1aXZhbGVudAordG8gYGRlX0RFJyAoR2VybWFuIGFzIHNwb2tlbiBpbiBHZXJtYW55KSwgYW5kIGBwdCcgdG8gYHB0X1BUJworKFBvcnR1Z3Vlc2UgYXMgc3Bva2VuIGluIFBvcnR1Z2FsKSBpbiB0aGlzIGNvbnRleHQuCisKKzEuMyBUcmFuc2xhdGluZyBUZWFtcworPT09PT09PT09PT09PT09PT09PT09CisKK0ZvciB0aGUgRnJlZSBUcmFuc2xhdGlvbiBQcm9qZWN0IHRvIGJlIGEgc3VjY2Vzcywgd2UgbmVlZCBpbnRlcmVzdGVkCitwZW9wbGUgd2hvIGxpa2UgdGhlaXIgb3duIGxhbmd1YWdlIGFuZCB3cml0ZSBpdCB3ZWxsLCBhbmQgd2hvIGFyZSBhbHNvCithYmxlIHRvIHN5bmVyZ2l6ZSB3aXRoIG90aGVyIHRyYW5zbGF0b3JzIHNwZWFraW5nIHRoZSBzYW1lIGxhbmd1YWdlLgorRWFjaCB0cmFuc2xhdGlvbiB0ZWFtIGhhcyBpdHMgb3duIG1haWxpbmcgbGlzdC4gIFRoZSB1cC10by1kYXRlIGxpc3Qgb2YKK3RlYW1zIGNhbiBiZSBmb3VuZCBhdCB0aGUgRnJlZSBUcmFuc2xhdGlvbiBQcm9qZWN0J3MgaG9tZXBhZ2UsCitgaHR0cDovL3RyYW5zbGF0aW9ucHJvamVjdC5vcmcvJywgaW4gdGhlICJUZWFtcyIgYXJlYS4KKworICAgSWYgeW91J2QgbGlrZSB0byB2b2x1bnRlZXIgdG8gX3dvcmtfIGF0IHRyYW5zbGF0aW5nIG1lc3NhZ2VzLCB5b3UKK3Nob3VsZCBiZWNvbWUgYSBtZW1iZXIgb2YgdGhlIHRyYW5zbGF0aW5nIHRlYW0gZm9yIHlvdXIgb3duIGxhbmd1YWdlLgorVGhlIHN1YnNjcmliaW5nIGFkZHJlc3MgaXMgX25vdF8gdGhlIHNhbWUgYXMgdGhlIGxpc3QgaXRzZWxmLCBpdCBoYXMKK2AtcmVxdWVzdCcgYXBwZW5kZWQuICBGb3IgZXhhbXBsZSwgc3BlYWtlcnMgb2YgU3dlZGlzaCBjYW4gc2VuZCBhCittZXNzYWdlIHRvIGBzdi1yZXF1ZXN0QGxpLm9yZycsIGhhdmluZyB0aGlzIG1lc3NhZ2UgYm9keToKKworICAgICBzdWJzY3JpYmUKKworICAgS2VlcCBpbiBtaW5kIHRoYXQgdGVhbSBtZW1iZXJzIGFyZSBleHBlY3RlZCB0byBwYXJ0aWNpcGF0ZQorX2FjdGl2ZWx5XyBpbiB0cmFuc2xhdGlvbnMsIG9yIGF0IHNvbHZpbmcgdHJhbnNsYXRpb25hbCBkaWZmaWN1bHRpZXMsCityYXRoZXIgdGhhbiBtZXJlbHkgbHVya2luZyBhcm91bmQuICBJZiB5b3VyIHRlYW0gZG9lcyBub3QgZXhpc3QgeWV0IGFuZAoreW91IHdhbnQgdG8gc3RhcnQgb25lLCBvciBpZiB5b3UgYXJlIHVuc3VyZSBhYm91dCB3aGF0IHRvIGRvIG9yIGhvdyB0bworZ2V0IHN0YXJ0ZWQsIHBsZWFzZSB3cml0ZSB0byBgY29vcmRpbmF0b3JAdHJhbnNsYXRpb25wcm9qZWN0Lm9yZycgdG8KK3JlYWNoIHRoZSBjb29yZGluYXRvciBmb3IgYWxsIHRyYW5zbGF0b3IgdGVhbXMuCisKKyAgIFRoZSBFbmdsaXNoIHRlYW0gaXMgc3BlY2lhbC4gIEl0IHdvcmtzIGF0IGltcHJvdmluZyBhbmQgdW5pZm9ybWl6aW5nCit0aGUgdGVybWlub2xvZ3kgaW4gdXNlLiAgUHJvdmVuIGxpbmd1aXN0aWMgc2tpbGxzIGFyZSBwcmFpc2VkIG1vcmUgdGhhbgorcHJvZ3JhbW1pbmcgc2tpbGxzLCBoZXJlLgorCisxLjQgQXZhaWxhYmxlIFBhY2thZ2VzCis9PT09PT09PT09PT09PT09PT09PT09CisKK0xhbmd1YWdlcyBhcmUgbm90IGVxdWFsbHkgc3VwcG9ydGVkIGluIGFsbCBwYWNrYWdlcy4gIFRoZSBmb2xsb3dpbmcKK21hdHJpeCBzaG93cyB0aGUgY3VycmVudCBzdGF0ZSBvZiBpbnRlcm5hdGlvbmFsaXphdGlvbiwgYXMgb2YgSnVuZQorMjAxMC4gIFRoZSBtYXRyaXggc2hvd3MsIGluIHJlZ2FyZCBvZiBlYWNoIHBhY2thZ2UsIGZvciB3aGljaCBsYW5ndWFnZXMKK1BPIGZpbGVzIGhhdmUgYmVlbiBzdWJtaXR0ZWQgdG8gdHJhbnNsYXRpb24gY29vcmRpbmF0aW9uLCB3aXRoIGEKK3RyYW5zbGF0aW9uIHBlcmNlbnRhZ2Ugb2YgYXQgbGVhc3QgNTAlLgorCisgICAgIFJlYWR5IFBPIGZpbGVzICAgICAgIGFmIGFtIGFuIGFyIGFzIGFzdCBheiBiZSBiZUBsYXRpbiBiZyBibl9JTiBicyBjYQorICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICBhMnBzICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgW10gfAorICAgICBhZWdpcyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBhbnQtcGhvbmUgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBhbnViaXMgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBhc3BlbGwgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorICAgICBiYXNoICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBiZmQgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBiaWJzaGVsZiAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBiaW51dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBiaXNvbiAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBiaXNvbi1ydW50aW1lICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBibHVlei1waW4gICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBib21ib25vLWR2ZCAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBidXp6dGFyZCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBjZmxvdyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBjbGlzcCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBjb3JldXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gfAorICAgICBjcGlvICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBjcHBpICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBjcHBsaWIgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorICAgICBjcnlwdHNldHVwICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBkZmFyYyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBkaWFsb2cgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gfAorICAgICBkaWNvICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBkaWZmdXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorICAgICBkaW5rICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBkb29kbGUgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBlMmZzcHJvZ3MgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorICAgICBlbnNjcmlwdCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorICAgICBleGlmICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBmZXRjaG1haWwgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorICAgICBmaW5kdXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgfAorICAgICBmbGV4ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorICAgICBmcmVlZGluayAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnYXMgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnYXdrICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorICAgICBnY2FsICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorICAgICBnY2MgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnZXR0ZXh0LWV4YW1wbGVzICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gfAorICAgICBnZXR0ZXh0LXJ1bnRpbWUgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gfAorICAgICBnZXR0ZXh0LXRvb2xzICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gfAorICAgICBnaXAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgfAorICAgICBnamF5ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnbGl2ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgfAorICAgICBnbHVuYXJjbG9jayAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgfAorICAgICBnbnViaWZmICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnbnVjYXNoICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorICAgICBnbnVlZHUgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnbnVsaWIgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnbnVuZXQgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnbnVuZXQtZ3RrICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnbnV0bHMgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnb2xkICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtYWVyaWFsICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtYmVhbSAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtYmx1ZXRvb3RoICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtY2FsZW5kYXIgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtY2xvY2sgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtY29uZiAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtY29udGFjdHMgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtZWRpdCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtZmlsZW1hbmFnZXIgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtZ28gICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtbG9naW4gICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtb3duZXJpbmZvICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtcGFja2FnZSAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtc2tldGNoYm9vayAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtc3UgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtdGFza21hbmFnZXIgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtdGltZXNoZWV0ICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtdG9kYXkgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtdG9kbyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGhvdG8yICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncHJvZiAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgfAorICAgICBncHNkcml2ZSAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncmFtYWRvaXIgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncmVwICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncnViICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorICAgICBnc2FzbCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnc3MgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnc3QtcGx1Z2lucy1iYWQgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgfAorICAgICBnc3QtcGx1Z2lucy1iYXNlICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgfAorICAgICBnc3QtcGx1Z2lucy1nb29kICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgfAorICAgICBnc3QtcGx1Z2lucy11Z2x5ICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgfAorICAgICBnc3RyZWFtZXIgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gfAorICAgICBndGljayAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBndGthbSAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBndGtvcnBoYW4gICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgfAorICAgICBndGtzcGVsbCAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBndXRlbnByaW50ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBoZWxsbyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgfAorICAgICBoZWxwMm1hbiAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBoeWxhZmF4ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBpZHV0aWxzICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBpbmRlbnQgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gfAorICAgICBpc29fMTU5MjQgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBpc29fMzE2NiAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICAgW10gIFtdICAgW10gW10gfAorICAgICBpc29fMzE2Nl8yICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBpc29fNDIxNyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBpc29fNjM5ICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICAgICAgIFtdICAgICAgICAgfAorICAgICBpc29fNjM5XzMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBqd2hvaXMgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBrYmQgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBrZXl0b3VjaCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorICAgICBrZXl0b3VjaC1lZGl0b3IgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBrZXl0b3VjaC1rZXlib2EuLi4gfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorICAgICBrbGF2YXJvICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsYXRyaW5lICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsZCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgfAorICAgICBsZWFmcGFkICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gfAorICAgICBsaWJjICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gfAorICAgICBsaWJleGlmICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsaWJleHRyYWN0b3IgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsaWJnbnV0bHMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsaWJncGV3aWRnZXQgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsaWJncGctZXJyb3IgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsaWJncGhvdG8yICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsaWJncGhvdG8yX3BvcnQgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsaWJnc2FzbCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsaWJpY29udiAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgfAorICAgICBsaWJpZG4gICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsaWZlbGluZXMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsaWZlcmVhICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gfAorICAgICBsaWx5cG9uZCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsaW5rZHIgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsb3Jkc2F3YXIgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBscHJuZyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBseW54ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorICAgICBtNCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBtYWlsZnJvbWQgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBtYWlsdXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBtYWtlICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBtYW4tZGIgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBtYW4tZGItbWFucGFnZXMgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBtaW5pY29tICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBta2lzb2ZzICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBteXNlcnZlciAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBuYW5vICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gfAorICAgICBvcGNvZGVzICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBwYXJ0ZWQgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBwaWVzICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBwb3B0ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBwc21pc2MgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBwc3BwICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorICAgICBwd2R1dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICByYWRpdXMgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorICAgICByZWNvZGUgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgW10gfAorICAgICByb3NlZ2FyZGVuICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBycG0gICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBydXNoICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBzYXJnICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBzY3JlZW0gICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBzY3JvbGxrZWVwZXIgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgW10gfAorICAgICBzZWQgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorICAgICBzaGFydXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gfAorICAgICBzaGlzaGkgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBza2VuY2lsICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBzb2xmZWdlICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBzb2xmZWdlLW1hbnVhbCAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBzb3VuZHRyYWNrZXIgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBzcCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBzeXNzdGF0ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB0YXIgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgfAorICAgICB0ZXhpbmZvICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB0aW4gICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB1bmljb2RlLWhhbi10cmEuLi4gfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB1bmljb2RlLXRyYW5zbGEuLi4gfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB1dGlsLWxpbnV4LW5nICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorICAgICB2aWNlICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB2bW0gICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB2b3JiaXMtdG9vbHMgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB3YXN0ZXNlZGdlICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB3ZGlmZiAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB3Z2V0ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgW10gfAorICAgICB3eXNsaWotcG8gICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB4Y2hhdCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgW10gICAgICAgICAgW10gICAgICAgICAgW10gfAorICAgICB4ZGctdXNlci1kaXJzICAgICAgfCBbXSAgICBbXSAgICBbXSBbXSAgICAgW10gICAgW10gICAgW10gIFtdICAgICAgW10gfAorICAgICB4a2V5Ym9hcmQtY29uZmlnICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gfAorICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgICAgICBhZiBhbSBhbiBhciBhcyBhc3QgYXogYmUgYmVAbGF0aW4gYmcgYm5fSU4gYnMgY2EKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDYgIDAgIDEgIDIgIDMgMTkgICAxIDEwICAgICAzICAgIDI4ICAgMyAgICAxIDM4CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY3JoIGNzIGRhICBkZSAgZWwgZW4gZW5fR0IgZW5fWkEgZW8gZXMgZXQgZXUgZmEKKyAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICBhMnBzICAgICAgICAgICAgICAgfCAgICAgW10gW10gIFtdICBbXSAgICAgW10gICAgICAgICAgICBbXSBbXSAgICAgICB8CisgICAgIGFlZ2lzICAgICAgICAgICAgICB8ICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIHwKKyAgICAgYW50LXBob25lICAgICAgICAgIHwgICAgICAgIFtdICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBhbnViaXMgICAgICAgICAgICAgfCAgICAgICAgW10gIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGFzcGVsbCAgICAgICAgICAgICB8ICAgICBbXSBbXSAgW10gICAgICAgICBbXSAgICAgICAgICAgIFtdICAgICAgICAgIHwKKyAgICAgYmFzaCAgICAgICAgICAgICAgIHwgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgfAorICAgICBiZmQgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGJpYnNoZWxmICAgICAgICAgICB8ICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIHwKKyAgICAgYmludXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorICAgICBiaXNvbiAgICAgICAgICAgICAgfCAgICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGJpc29uLXJ1bnRpbWUgICAgICB8ICAgICAgICBbXSAgW10gIFtdICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIHwKKyAgICAgYmx1ZXotcGluICAgICAgICAgIHwgICAgIFtdIFtdICBbXSAgW10gICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgfAorICAgICBib21ib25vLWR2ZCAgICAgICAgfCAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGJ1enp0YXJkICAgICAgICAgICB8ICAgICBbXSBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgY2Zsb3cgICAgICAgICAgICAgIHwgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBjbGlzcCAgICAgICAgICAgICAgfCAgICAgICAgW10gIFtdICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGNvcmV1dGlscyAgICAgICAgICB8ICAgICBbXSBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIHwKKyAgICAgY3BpbyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBjcHBpICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGNwcGxpYiAgICAgICAgICAgICB8ICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIHwKKyAgICAgY3J5cHRzZXR1cCAgICAgICAgIHwgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBkZmFyYyAgICAgICAgICAgICAgfCAgICAgICAgW10gIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGRpYWxvZyAgICAgICAgICAgICB8ICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgIFtdIFtdICAgIFtdICAgIHwKKyAgICAgZGljbyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBkaWZmdXRpbHMgICAgICAgICAgfCAgICAgW10gW10gIFtdICBbXSAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICB8CisgICAgIGRpbmsgICAgICAgICAgICAgICB8ICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIHwKKyAgICAgZG9vZGxlICAgICAgICAgICAgIHwgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBlMmZzcHJvZ3MgICAgICAgICAgfCAgICAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGVuc2NyaXB0ICAgICAgICAgICB8ICAgICAgICBbXSAgW10gICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZXhpZiAgICAgICAgICAgICAgIHwgICAgICgpIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBmZXRjaG1haWwgICAgICAgICAgfCAgICAgW10gW10gICgpICBbXSAgICAgW10gICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGZpbmR1dGlscyAgICAgICAgICB8ICAgICBbXSBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZmxleCAgICAgICAgICAgICAgIHwgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorICAgICBmcmVlZGluayAgICAgICAgICAgfCAgICAgICAgW10gIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGdhcyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIHwKKyAgICAgZ2F3ayAgICAgICAgICAgICAgIHwgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorICAgICBnY2FsICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGdjYyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIHwKKyAgICAgZ2V0dGV4dC1leGFtcGxlcyAgIHwgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgfAorICAgICBnZXR0ZXh0LXJ1bnRpbWUgICAgfCAgICAgICAgW10gIFtdICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICB8CisgICAgIGdldHRleHQtdG9vbHMgICAgICB8ICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgIHwKKyAgICAgZ2lwICAgICAgICAgICAgICAgIHwgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgfAorICAgICBnamF5ICAgICAgICAgICAgICAgfCAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdsaXYgICAgICAgICAgICAgICB8ICAgICBbXSBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ2x1bmFyY2xvY2sgICAgICAgIHwgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnbnViaWZmICAgICAgICAgICAgfCAgICAgICAgICAgICgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdudWNhc2ggICAgICAgICAgICB8ICAgICBbXSAgICAgKCkgICgpICAgICAoKSAgICAgICAgICAgICgpICAgICAgICAgIHwKKyAgICAgZ251ZWR1ICAgICAgICAgICAgIHwgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorICAgICBnbnVsaWIgICAgICAgICAgICAgfCAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGdudW5ldCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ251bmV0LWd0ayAgICAgICAgIHwgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnbnV0bHMgICAgICAgICAgICAgfCAgICAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdvbGQgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIHwKKyAgICAgZ3BlLWFlcmlhbCAgICAgICAgIHwgICAgIFtdIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorICAgICBncGUtYmVhbSAgICAgICAgICAgfCAgICAgW10gW10gIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGdwZS1ibHVldG9vdGggICAgICB8ICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3BlLWNhbGVuZGFyICAgICAgIHwgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtY2xvY2sgICAgICAgICAgfCAgICAgW10gW10gIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGdwZS1jb25mICAgICAgICAgICB8ICAgICBbXSBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3BlLWNvbnRhY3RzICAgICAgIHwgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorICAgICBncGUtZWRpdCAgICAgICAgICAgfCAgICAgICAgW10gIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdwZS1maWxlbWFuYWdlciAgICB8ICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIHwKKyAgICAgZ3BlLWdvICAgICAgICAgICAgIHwgICAgIFtdIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorICAgICBncGUtbG9naW4gICAgICAgICAgfCAgICAgICAgW10gIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdwZS1vd25lcmluZm8gICAgICB8ICAgICBbXSBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIHwKKyAgICAgZ3BlLXBhY2thZ2UgICAgICAgIHwgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorICAgICBncGUtc2tldGNoYm9vayAgICAgfCAgICAgW10gW10gIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGdwZS1zdSAgICAgICAgICAgICB8ICAgICBbXSBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIHwKKyAgICAgZ3BlLXRhc2ttYW5hZ2VyICAgIHwgICAgIFtdIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorICAgICBncGUtdGltZXNoZWV0ICAgICAgfCAgICAgW10gW10gIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGdwZS10b2RheSAgICAgICAgICB8ICAgICBbXSBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIHwKKyAgICAgZ3BlLXRvZG8gICAgICAgICAgIHwgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorICAgICBncGhvdG8yICAgICAgICAgICAgfCAgICAgW10gW10gICgpICAgICAgICAgW10gICAgICAgICAgICBbXSAgICBbXSAgICB8CisgICAgIGdwcm9mICAgICAgICAgICAgICB8ICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIHwKKyAgICAgZ3BzZHJpdmUgICAgICAgICAgIHwgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgfAorICAgICBncmFtYWRvaXIgICAgICAgICAgfCAgICAgICAgW10gIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICB8CisgICAgIGdyZXAgICAgICAgICAgICAgICB8ICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3J1YiAgICAgICAgICAgICAgIHwgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnc2FzbCAgICAgICAgICAgICAgfCAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdzcyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ3N0LXBsdWdpbnMtYmFkICAgIHwgICAgIFtdIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgfAorICAgICBnc3QtcGx1Z2lucy1iYXNlICAgfCAgICAgW10gW10gIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICB8CisgICAgIGdzdC1wbHVnaW5zLWdvb2QgICB8ICAgICBbXSBbXSAgW10gIFtdICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgIHwKKyAgICAgZ3N0LXBsdWdpbnMtdWdseSAgIHwgICAgIFtdIFtdICBbXSAgW10gICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgfAorICAgICBnc3RyZWFtZXIgICAgICAgICAgfCAgICAgW10gW10gIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICB8CisgICAgIGd0aWNrICAgICAgICAgICAgICB8ICAgICAgICBbXSAgKCkgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgIHwKKyAgICAgZ3RrYW0gICAgICAgICAgICAgIHwgICAgIFtdIFtdICAoKSAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgfAorICAgICBndGtvcnBoYW4gICAgICAgICAgfCAgICAgW10gW10gIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICB8CisgICAgIGd0a3NwZWxsICAgICAgICAgICB8ICAgICBbXSBbXSAgW10gIFtdICAgICAgICAgICAgICAgIFtdIFtdICAgIFtdICAgIHwKKyAgICAgZ3V0ZW5wcmludCAgICAgICAgIHwgICAgICAgIFtdICBbXSAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBoZWxsbyAgICAgICAgICAgICAgfCAgICAgICAgW10gIFtdICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICB8CisgICAgIGhlbHAybWFuICAgICAgICAgICB8ICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgaHlsYWZheCAgICAgICAgICAgIHwgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorICAgICBpZHV0aWxzICAgICAgICAgICAgfCAgICAgICAgW10gIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGluZGVudCAgICAgICAgICAgICB8ICAgICBbXSBbXSAgW10gICAgICAgICAgICAgICAgICAgIFtdIFtdIFtdIFtdICAgIHwKKyAgICAgaXNvXzE1OTI0ICAgICAgICAgIHwgICAgICAgIFtdICAgICAgKCkgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgfAorICAgICBpc29fMzE2NiAgICAgICAgICAgfCBbXSAgW10gW10gIFtdICAoKSAgICAgICAgICAgICAgICBbXSBbXSBbXSAoKSAgICB8CisgICAgIGlzb18zMTY2XzIgICAgICAgICB8ICAgICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgaXNvXzQyMTcgICAgICAgICAgIHwgICAgIFtdIFtdICBbXSAgKCkgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgfAorICAgICBpc29fNjM5ICAgICAgICAgICAgfCBbXSAgW10gW10gIFtdICAoKSAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICB8CisgICAgIGlzb182MzlfMyAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgandob2lzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorICAgICBrYmQgICAgICAgICAgICAgICAgfCAgICAgW10gW10gIFtdICBbXSAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGtleXRvdWNoICAgICAgICAgICB8ICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAga2V5dG91Y2gtZWRpdG9yICAgIHwgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBrZXl0b3VjaC1rZXlib2EuLi4gfCAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGtsYXZhcm8gICAgICAgICAgICB8ICAgICBbXSBbXSAgW10gICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgIHwKKyAgICAgbGF0cmluZSAgICAgICAgICAgIHwgICAgICAgIFtdICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsZCAgICAgICAgICAgICAgICAgfCAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGxlYWZwYWQgICAgICAgICAgICB8ICAgICBbXSBbXSAgW10gIFtdICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgIHwKKyAgICAgbGliYyAgICAgICAgICAgICAgIHwgICAgIFtdIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorICAgICBsaWJleGlmICAgICAgICAgICAgfCAgICAgICAgW10gIFtdICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxpYmV4dHJhY3RvciAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGliZ251dGxzICAgICAgICAgIHwgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsaWJncGV3aWRnZXQgICAgICAgfCAgICAgICAgW10gIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxpYmdwZy1lcnJvciAgICAgICB8ICAgICBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGliZ3Bob3RvMiAgICAgICAgIHwgICAgICAgIFtdICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsaWJncGhvdG8yX3BvcnQgICAgfCAgICAgICAgW10gICgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICB8CisgICAgIGxpYmdzYXNsICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGliaWNvbnYgICAgICAgICAgIHwgICAgIFtdIFtdICBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgfAorICAgICBsaWJpZG4gICAgICAgICAgICAgfCAgICAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICB8CisgICAgIGxpZmVsaW5lcyAgICAgICAgICB8ICAgICAgICBbXSAgKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGlmZXJlYSAgICAgICAgICAgIHwgICAgIFtdICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgfAorICAgICBsaWx5cG9uZCAgICAgICAgICAgfCAgICAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGxpbmtkciAgICAgICAgICAgICB8ICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIHwKKyAgICAgbG9yZHNhd2FyICAgICAgICAgIHwgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBscHJuZyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGx5bnggICAgICAgICAgICAgICB8ICAgICBbXSBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIHwKKyAgICAgbTQgICAgICAgICAgICAgICAgIHwgICAgIFtdIFtdICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBtYWlsZnJvbWQgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIG1haWx1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIHwKKyAgICAgbWFrZSAgICAgICAgICAgICAgIHwgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorICAgICBtYW4tZGIgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIG1hbi1kYi1tYW5wYWdlcyAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbWluaWNvbSAgICAgICAgICAgIHwgICAgIFtdIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorICAgICBta2lzb2ZzICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIG15c2VydmVyICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbmFubyAgICAgICAgICAgICAgIHwgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgfAorICAgICBvcGNvZGVzICAgICAgICAgICAgfCAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIHBhcnRlZCAgICAgICAgICAgICB8ICAgICBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgcGllcyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBwb3B0ICAgICAgICAgICAgICAgfCAgICAgW10gW10gIFtdICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICB8CisgICAgIHBzbWlzYyAgICAgICAgICAgICB8ICAgICBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIHwKKyAgICAgcHNwcCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorICAgICBwd2R1dGlscyAgICAgICAgICAgfCAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHJhZGl1cyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIHwKKyAgICAgcmVjb2RlICAgICAgICAgICAgIHwgICAgIFtdIFtdICBbXSAgW10gICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgfAorICAgICByb3NlZ2FyZGVuICAgICAgICAgfCAgICAgKCkgICAgICgpICAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgICAgICB8CisgICAgIHJwbSAgICAgICAgICAgICAgICB8ICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIHwKKyAgICAgcnVzaCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBzYXJnICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHNjcmVlbSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgc2Nyb2xsa2VlcGVyICAgICAgIHwgICAgIFtdIFtdICBbXSAgICAgICAgIFtdICAgICAgICAgICAgW10gICAgICAgICAgfAorICAgICBzZWQgICAgICAgICAgICAgICAgfCAgICAgW10gICAgIFtdICBbXSAgICAgICAgICAgICAgICBbXSBbXSBbXSAgICAgICB8CisgICAgIHNoYXJ1dGlscyAgICAgICAgICB8ICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgIHwKKyAgICAgc2hpc2hpICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBza2VuY2lsICAgICAgICAgICAgfCAgICAgICAgW10gICgpICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIHNvbGZlZ2UgICAgICAgICAgICB8ICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgIHwKKyAgICAgc29sZmVnZS1tYW51YWwgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgfAorICAgICBzb3VuZHRyYWNrZXIgICAgICAgfCAgICAgICAgW10gIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIHNwICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgc3lzc3RhdCAgICAgICAgICAgIHwgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgfAorICAgICB0YXIgICAgICAgICAgICAgICAgfCAgICAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICB8CisgICAgIHRleGluZm8gICAgICAgICAgICB8ICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgIHwKKyAgICAgdGluICAgICAgICAgICAgICAgIHwgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgfAorICAgICB1bmljb2RlLWhhbi10cmEuLi4gfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHVuaWNvZGUtdHJhbnNsYS4uLiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgdXRpbC1saW51eC1uZyAgICAgIHwgICAgIFtdIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorICAgICB2aWNlICAgICAgICAgICAgICAgfCAgICAgICAgKCkgICgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHZtbSAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgdm9yYmlzLXRvb2xzICAgICAgIHwgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgfAorICAgICB3YXN0ZXNlZGdlICAgICAgICAgfCAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHdkaWZmICAgICAgICAgICAgICB8ICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIHwKKyAgICAgd2dldCAgICAgICAgICAgICAgIHwgICAgIFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgfAorICAgICB3eXNsaWotcG8gICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHhjaGF0ICAgICAgICAgICAgICB8ICAgICBbXSAgICAgW10gIFtdICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgIHwKKyAgICAgeGRnLXVzZXItZGlycyAgICAgIHwgW10gIFtdIFtdICBbXSAgW10gICAgICAgICAgICAgICAgW10gW10gW10gW10gICAgfAorICAgICB4a2V5Ym9hcmQtY29uZmlnICAgfCBbXSAgW10gW10gIFtdICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY3JoIGNzIGRhICBkZSAgZWwgZW4gZW5fR0IgZW5fWkEgZW8gZXMgZXQgZXUgZmEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDUgIDY0IDEwNSAxMTcgMTggIDEgICA4ICAgICAwICAgMjggODkgMTggMTkgIDAKKworICAgICAgICAgICAgICAgICAgICAgICAgICBmaSAgZnIgIGdhIGdsIGd1IGhlIGhpIGhyIGh1IGh5IGlkICBpcyBpdCBqYSBrYSBrbgorICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgIGEycHMgICAgICAgICAgICAgICB8IFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIFtdICAgICAgIHwKKyAgICAgYWVnaXMgICAgICAgICAgICAgIHwgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorICAgICBhbnQtcGhvbmUgICAgICAgICAgfCAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGFudWJpcyAgICAgICAgICAgICB8IFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIFtdICAgICAgICAgIHwKKyAgICAgYXNwZWxsICAgICAgICAgICAgIHwgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgW10gICAgICAgICAgfAorICAgICBiYXNoICAgICAgICAgICAgICAgfCBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICB8CisgICAgIGJmZCAgICAgICAgICAgICAgICB8IFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIHwKKyAgICAgYmlic2hlbGYgICAgICAgICAgIHwgW10gIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgW10gICAgICAgICAgfAorICAgICBiaW51dGlscyAgICAgICAgICAgfCBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICB8CisgICAgIGJpc29uICAgICAgICAgICAgICB8IFtdICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIHwKKyAgICAgYmlzb24tcnVudGltZSAgICAgIHwgW10gIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgW10gW10gICAgICAgfAorICAgICBibHVlei1waW4gICAgICAgICAgfCBbXSAgW10gIFtdICAgICAgICAgICAgICAgIFtdIFtdIFtdICBbXSAgICBbXSAgICAgICB8CisgICAgIGJvbWJvbm8tZHZkICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgYnV6enRhcmQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgfAorICAgICBjZmxvdyAgICAgICAgICAgICAgfCBbXSAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICB8CisgICAgIGNsaXNwICAgICAgICAgICAgICB8ICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgY29yZXV0aWxzICAgICAgICAgIHwgICAgIFtdICBbXSAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgW10gICAgICAgICAgfAorICAgICBjcGlvICAgICAgICAgICAgICAgfCBbXSAgW10gIFtdICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICB8CisgICAgIGNwcGkgICAgICAgICAgICAgICB8IFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgY3BwbGliICAgICAgICAgICAgIHwgW10gIFtdICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgfAorICAgICBjcnlwdHNldHVwICAgICAgICAgfCAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICBbXSAgICAgICAgICB8CisgICAgIGRmYXJjICAgICAgICAgICAgICB8IFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIHwKKyAgICAgZGlhbG9nICAgICAgICAgICAgIHwgICAgIFtdICBbXSBbXSAgICAgICAgICAgICAgICAgICBbXSAgW10gW10gW10gICAgICAgfAorICAgICBkaWNvICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGRpZmZ1dGlscyAgICAgICAgICB8IFtdICBbXSAgW10gW10gICAgW10gICAgICAgW10gICAgW10gICAgIFtdIFtdICAgICAgIHwKKyAgICAgZGluayAgICAgICAgICAgICAgIHwgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBkb29kbGUgICAgICAgICAgICAgfCAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGUyZnNwcm9ncyAgICAgICAgICB8ICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIHwKKyAgICAgZW5zY3JpcHQgICAgICAgICAgIHwgICAgIFtdICBbXSAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgfAorICAgICBleGlmICAgICAgICAgICAgICAgfCBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgIFtdICBbXSBbXSBbXSAgICAgICB8CisgICAgIGZldGNobWFpbCAgICAgICAgICB8ICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIFtdIFtdICAgICAgIHwKKyAgICAgZmluZHV0aWxzICAgICAgICAgIHwgW10gIFtdICBbXSAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgW10gICAgICAgICAgfAorICAgICBmbGV4ICAgICAgICAgICAgICAgfCBbXSAgW10gIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGZyZWVkaW5rICAgICAgICAgICB8IFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIHwKKyAgICAgZ2FzICAgICAgICAgICAgICAgIHwgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgfAorICAgICBnYXdrICAgICAgICAgICAgICAgfCAgICAgW10gIFtdICAgICAgIFtdICAgICAgICAgICAgIFtdICAgICAoKSBbXSAgICAgICB8CisgICAgIGdjYWwgICAgICAgICAgICAgICB8ICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ2NjICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgfAorICAgICBnZXR0ZXh0LWV4YW1wbGVzICAgfCBbXSAgW10gIFtdICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICBbXSBbXSAgICAgICB8CisgICAgIGdldHRleHQtcnVudGltZSAgICB8IFtdICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgW10gICAgIFtdIFtdICAgICAgIHwKKyAgICAgZ2V0dGV4dC10b29scyAgICAgIHwgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgW10gW10gICAgICAgfAorICAgICBnaXAgICAgICAgICAgICAgICAgfCBbXSAgW10gIFtdIFtdICAgICAgICAgICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICB8CisgICAgIGdqYXkgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ2xpdiAgICAgICAgICAgICAgIHwgW10gICgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnbHVuYXJjbG9jayAgICAgICAgfCBbXSAgICAgIFtdICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgICAgICAgICB8CisgICAgIGdudWJpZmYgICAgICAgICAgICB8ICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICgpICAgICAgICAgIHwKKyAgICAgZ251Y2FzaCAgICAgICAgICAgIHwgKCkgICgpICAgICAgICAgICAoKSAgICAgICAoKSAgICAgICAgICAgKCkgW10gICAgICAgfAorICAgICBnbnVlZHUgICAgICAgICAgICAgfCAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGdudWxpYiAgICAgICAgICAgICB8IFtdICBbXSAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgIFtdIFtdICAgICAgIHwKKyAgICAgZ251bmV0ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnbnVuZXQtZ3RrICAgICAgICAgfCAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdudXRscyAgICAgICAgICAgICB8ICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIHwKKyAgICAgZ29sZCAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgfAorICAgICBncGUtYWVyaWFsICAgICAgICAgfCBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICB8CisgICAgIGdwZS1iZWFtICAgICAgICAgICB8IFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIFtdICAgICAgIHwKKyAgICAgZ3BlLWJsdWV0b290aCAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgW10gW10gICAgICAgfAorICAgICBncGUtY2FsZW5kYXIgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICB8CisgICAgIGdwZS1jbG9jayAgICAgICAgICB8IFtdICBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgIFtdICAgICAgIHwKKyAgICAgZ3BlLWNvbmYgICAgICAgICAgIHwgW10gIFtdICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgfAorICAgICBncGUtY29udGFjdHMgICAgICAgfCBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICB8CisgICAgIGdwZS1lZGl0ICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIFtdICAgICAgIHwKKyAgICAgZ3BlLWZpbGVtYW5hZ2VyICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgW10gICAgICAgfAorICAgICBncGUtZ28gICAgICAgICAgICAgfCBbXSAgW10gICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICBbXSAgICAgICB8CisgICAgIGdwZS1sb2dpbiAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIFtdICAgICAgIHwKKyAgICAgZ3BlLW93bmVyaW5mbyAgICAgIHwgW10gIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgW10gICAgICAgfAorICAgICBncGUtcGFja2FnZSAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICB8CisgICAgIGdwZS1za2V0Y2hib29rICAgICB8IFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIFtdICAgICAgIHwKKyAgICAgZ3BlLXN1ICAgICAgICAgICAgIHwgW10gIFtdICAgICBbXSAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgW10gICAgICAgfAorICAgICBncGUtdGFza21hbmFnZXIgICAgfCBbXSAgW10gICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICBbXSAgICAgICB8CisgICAgIGdwZS10aW1lc2hlZXQgICAgICB8IFtdICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIFtdICAgICAgIHwKKyAgICAgZ3BlLXRvZGF5ICAgICAgICAgIHwgW10gIFtdICBbXSBbXSAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgW10gICAgICAgfAorICAgICBncGUtdG9kbyAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICB8CisgICAgIGdwaG90bzIgICAgICAgICAgICB8IFtdICBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgIFtdIFtdICAgICAgIHwKKyAgICAgZ3Byb2YgICAgICAgICAgICAgIHwgW10gIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgfAorICAgICBncHNkcml2ZSAgICAgICAgICAgfCAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIFtdICAgICBbXSAgICAgICAgICB8CisgICAgIGdyYW1hZG9pciAgICAgICAgICB8ICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIHwKKyAgICAgZ3JlcCAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorICAgICBncnViICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICBbXSAgICAgICAgICB8CisgICAgIGdzYXNsICAgICAgICAgICAgICB8IFtdICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgW10gICAgIFtdICAgICAgICAgIHwKKyAgICAgZ3NzICAgICAgICAgICAgICAgIHwgW10gIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgW10gICAgICAgICAgfAorICAgICBnc3QtcGx1Z2lucy1iYWQgICAgfCBbXSAgW10gICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICBbXSBbXSAgICAgICB8CisgICAgIGdzdC1wbHVnaW5zLWJhc2UgICB8IFtdICBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgIFtdIFtdICAgICAgIHwKKyAgICAgZ3N0LXBsdWdpbnMtZ29vZCAgIHwgW10gIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgW10gW10gICAgICAgfAorICAgICBnc3QtcGx1Z2lucy11Z2x5ICAgfCBbXSAgW10gICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICBbXSBbXSAgICAgICB8CisgICAgIGdzdHJlYW1lciAgICAgICAgICB8IFtdICBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgIFtdICAgICAgICAgIHwKKyAgICAgZ3RpY2sgICAgICAgICAgICAgIHwgW10gIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgW10gICAgICAgICAgfAorICAgICBndGthbSAgICAgICAgICAgICAgfCAgICAgW10gICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICBbXSBbXSAgICAgICB8CisgICAgIGd0a29ycGhhbiAgICAgICAgICB8ICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIFtdICAgICAgICAgIHwKKyAgICAgZ3Rrc3BlbGwgICAgICAgICAgIHwgW10gIFtdICBbXSBbXSAgICAgICAgICAgICBbXSBbXSBbXSAgICAgW10gW10gICAgICAgfAorICAgICBndXRlbnByaW50ICAgICAgICAgfCBbXSAgW10gICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGhlbGxvICAgICAgICAgICAgICB8IFtdICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIHwKKyAgICAgaGVscDJtYW4gICAgICAgICAgIHwgW10gIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBoeWxhZmF4ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICB8CisgICAgIGlkdXRpbHMgICAgICAgICAgICB8IFtdICBbXSAgW10gICAgICAgICAgICAgICAgW10gICAgW10gICAgIFtdICAgICAgICAgIHwKKyAgICAgaW5kZW50ICAgICAgICAgICAgIHwgW10gIFtdICBbXSBbXSAgICAgICAgICAgICBbXSAgICBbXSAgICAgW10gW10gICAgICAgfAorICAgICBpc29fMTU5MjQgICAgICAgICAgfCBbXSAgKCkgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICBbXSAgICAgICAgICB8CisgICAgIGlzb18zMTY2ICAgICAgICAgICB8IFtdICAoKSAgW10gW10gW10gW10gW10gW10gW10gICAgW10gICAgIFtdIFtdICAgICAgIHwKKyAgICAgaXNvXzMxNjZfMiAgICAgICAgIHwgICAgICgpICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgW10gICAgICAgICAgfAorICAgICBpc29fNDIxNyAgICAgICAgICAgfCBbXSAgKCkgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICBbXSBbXSAgICAgICB8CisgICAgIGlzb182MzkgICAgICAgICAgICB8IFtdICAoKSAgW10gICAgW10gICAgICAgICAgW10gICAgW10gICAgIFtdIFtdICAgIFtdIHwKKyAgICAgaXNvXzYzOV8zICAgICAgICAgIHwgICAgICgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gfAorICAgICBqd2hvaXMgICAgICAgICAgICAgfCBbXSAgW10gICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICBbXSAgICAgICAgICB8CisgICAgIGtiZCAgICAgICAgICAgICAgICB8ICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIHwKKyAgICAga2V5dG91Y2ggICAgICAgICAgIHwgW10gIFtdICBbXSAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgW10gICAgICAgICAgfAorICAgICBrZXl0b3VjaC1lZGl0b3IgICAgfCBbXSAgICAgIFtdICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICBbXSAgICAgICAgICB8CisgICAgIGtleXRvdWNoLWtleWJvYS4uLiB8IFtdICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgW10gICAgIFtdICAgICAgICAgIHwKKyAgICAga2xhdmFybyAgICAgICAgICAgIHwgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsYXRyaW5lICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICBbXSAgICAgICAgICB8CisgICAgIGxkICAgICAgICAgICAgICAgICB8IFtdICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIHwKKyAgICAgbGVhZnBhZCAgICAgICAgICAgIHwgW10gIFtdICBbXSAgICAgICBbXSAgICAgICBbXSAgICBbXSAgICAgW10gKCkgICAgICAgfAorICAgICBsaWJjICAgICAgICAgICAgICAgfCBbXSAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICB8CisgICAgIGxpYmV4aWYgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIHwKKyAgICAgbGliZXh0cmFjdG9yICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsaWJnbnV0bHMgICAgICAgICAgfCAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGxpYmdwZXdpZGdldCAgICAgICB8IFtdICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIFtdICAgICAgIHwKKyAgICAgbGliZ3BnLWVycm9yICAgICAgIHwgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorICAgICBsaWJncGhvdG8yICAgICAgICAgfCAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICB8CisgICAgIGxpYmdwaG90bzJfcG9ydCAgICB8ICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgIHwKKyAgICAgbGliZ3Nhc2wgICAgICAgICAgIHwgW10gIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgW10gICAgICAgICAgfAorICAgICBsaWJpY29udiAgICAgICAgICAgfCBbXSAgW10gIFtdICAgICAgICAgICAgICAgICAgICAgIFtdICAgICBbXSBbXSAgICAgICB8CisgICAgIGxpYmlkbiAgICAgICAgICAgICB8IFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIFtdICAgICAgICAgIHwKKyAgICAgbGlmZWxpbmVzICAgICAgICAgIHwgICAgICgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsaWZlcmVhICAgICAgICAgICAgfCAgICAgW10gICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICBbXSBbXSAgICAgICB8CisgICAgIGxpbHlwb25kICAgICAgICAgICB8IFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGlua2RyICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICAgICAgW10gICAgICAgICAgfAorICAgICBsb3Jkc2F3YXIgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxwcm5nICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIHwKKyAgICAgbHlueCAgICAgICAgICAgICAgIHwgICAgIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgW10gW10gICAgICAgfAorICAgICBtNCAgICAgICAgICAgICAgICAgfCBbXSAgW10gIFtdIFtdICAgICAgICAgICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICB8CisgICAgIG1haWxmcm9tZCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbWFpbHV0aWxzICAgICAgICAgIHwgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgfAorICAgICBtYWtlICAgICAgICAgICAgICAgfCBbXSAgW10gIFtdIFtdICAgIFtdICAgIFtdICAgICAgIFtdICAgICBbXSBbXSAgICAgICB8CisgICAgIG1hbi1kYiAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIFtdICAgICAgICAgIHwKKyAgICAgbWFuLWRiLW1hbnBhZ2VzICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgfAorICAgICBtaW5pY29tICAgICAgICAgICAgfCBbXSAgW10gICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICBbXSAgICAgICB8CisgICAgIG1raXNvZnMgICAgICAgICAgICB8IFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIFtdICAgICAgICAgIHwKKyAgICAgbXlzZXJ2ZXIgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBuYW5vICAgICAgICAgICAgICAgfCBbXSAgW10gIFtdIFtdICAgICAgICAgICAgIFtdICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIG9wY29kZXMgICAgICAgICAgICB8IFtdICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIHwKKyAgICAgcGFydGVkICAgICAgICAgICAgIHwgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgW10gW10gICAgICAgfAorICAgICBwaWVzICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHBvcHQgICAgICAgICAgICAgICB8IFtdICBbXSAgW10gW10gICAgICAgICAgICAgW10gICAgW10gIFtdIFtdIFtdICAgICAgIHwKKyAgICAgcHNtaXNjICAgICAgICAgICAgIHwgW10gIFtdICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgfAorICAgICBwc3BwICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHB3ZHV0aWxzICAgICAgICAgICB8ICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIHwKKyAgICAgcmFkaXVzICAgICAgICAgICAgIHwgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgfAorICAgICByZWNvZGUgICAgICAgICAgICAgfCBbXSAgW10gIFtdIFtdICAgIFtdICAgICAgIFtdICAgIFtdICAgICBbXSAgICAgICAgICB8CisgICAgIHJvc2VnYXJkZW4gICAgICAgICB8ICgpICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICgpICgpICAgICAgIHwKKyAgICAgcnBtICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgfAorICAgICBydXNoICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHNhcmcgICAgICAgICAgICAgICB8ICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgc2NyZWVtICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgfAorICAgICBzY3JvbGxrZWVwZXIgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICBbXSAgICAgICAgICB8CisgICAgIHNlZCAgICAgICAgICAgICAgICB8IFtdICBbXSAgW10gW10gICAgICAgICAgICAgW10gICAgW10gICAgIFtdIFtdICAgICAgIHwKKyAgICAgc2hhcnV0aWxzICAgICAgICAgIHwgW10gIFtdICBbXSAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgW10gW10gICAgICAgfAorICAgICBzaGlzaGkgICAgICAgICAgICAgfCAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHNrZW5jaWwgICAgICAgICAgICB8ICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgc29sZmVnZSAgICAgICAgICAgIHwgW10gIFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorICAgICBzb2xmZWdlLW1hbnVhbCAgICAgfCAgICAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHNvdW5kdHJhY2tlciAgICAgICB8ICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIHwKKyAgICAgc3AgICAgICAgICAgICAgICAgIHwgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgfAorICAgICBzeXNzdGF0ICAgICAgICAgICAgfCBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICBbXSBbXSAgICAgICB8CisgICAgIHRhciAgICAgICAgICAgICAgICB8IFtdICBbXSAgW10gICAgICAgICAgICAgICAgW10gICAgW10gICAgIFtdIFtdICAgICAgIHwKKyAgICAgdGV4aW5mbyAgICAgICAgICAgIHwgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgW10gW10gICAgICAgfAorICAgICB0aW4gICAgICAgICAgICAgICAgfCAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHVuaWNvZGUtaGFuLXRyYS4uLiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgdW5pY29kZS10cmFuc2xhLi4uIHwgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB1dGlsLWxpbnV4LW5nICAgICAgfCBbXSAgW10gICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICBbXSBbXSAgICAgICB8CisgICAgIHZpY2UgICAgICAgICAgICAgICB8ICAgICAoKSAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICgpICAgICAgICAgIHwKKyAgICAgdm1tICAgICAgICAgICAgICAgIHwgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB2b3JiaXMtdG9vbHMgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICB8CisgICAgIHdhc3Rlc2VkZ2UgICAgICAgICB8ICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgICAgICAgIHwKKyAgICAgd2RpZmYgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB3Z2V0ICAgICAgICAgICAgICAgfCBbXSAgW10gIFtdICAgICAgICAgICAgIFtdIFtdICAgIFtdICAgICBbXSBbXSAgICAgICB8CisgICAgIHd5c2xpai1wbyAgICAgICAgICB8IFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIHwKKyAgICAgeGNoYXQgICAgICAgICAgICAgIHwgW10gIFtdICAgICAgICBbXSAgICBbXSAgICBbXSAgICBbXSAgICAgW10gW10gICAgW10gfAorICAgICB4ZGctdXNlci1kaXJzICAgICAgfCBbXSAgW10gIFtdIFtdIFtdIFtdIFtdICAgIFtdICAgIFtdICBbXSBbXSBbXSAgICBbXSB8CisgICAgIHhrZXlib2FyZC1jb25maWcgICB8IFtdICBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgIFtdICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgICAgICBmaSAgZnIgIGdhIGdsIGd1IGhlIGhpIGhyIGh1IGh5IGlkICBpcyBpdCBqYSBrYSBrbgorICAgICAgICAgICAgICAgICAgICAgICAgICAxMDUgMTIxIDUzIDIwICA0ICA4ICAzICA1IDUzICAyIDEyMCAgNSA4NCA2NyAgMCAgNAorCisgICAgICAgICAgICAgICAgICAgICAgICAgIGtvIGt1IGt5IGxnIGx0IGx2IG1rIG1sIG1uIG1yIG1zIG10IG5iIG5kcyBuZQorICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICBhMnBzICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgfAorICAgICBhZWdpcyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBhbnQtcGhvbmUgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBhbnViaXMgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgfAorICAgICBhc3BlbGwgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgfAorICAgICBiYXNoICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBiZmQgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBiaWJzaGVsZiAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgfAorICAgICBiaW51dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBiaXNvbiAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgfAorICAgICBiaXNvbi1ydW50aW1lICAgICAgfCAgICAgICBbXSAgICBbXSBbXSAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgfAorICAgICBibHVlei1waW4gICAgICAgICAgfCAgICBbXSBbXSAgICBbXSBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgfAorICAgICBib21ib25vLWR2ZCAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBidXp6dGFyZCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBjZmxvdyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBjbGlzcCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBjb3JldXRpbHMgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBjcGlvICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBjcHBpICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBjcHBsaWIgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBjcnlwdHNldHVwICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBkZmFyYyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBkaWFsb2cgICAgICAgICAgICAgfCAgICBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgfAorICAgICBkaWNvICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBkaWZmdXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgfAorICAgICBkaW5rICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBkb29kbGUgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBlMmZzcHJvZ3MgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBlbnNjcmlwdCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBleGlmICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBmZXRjaG1haWwgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBmaW5kdXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBmbGV4ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBmcmVlZGluayAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgfAorICAgICBnYXMgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnYXdrICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnY2FsICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnY2MgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnZXR0ZXh0LWV4YW1wbGVzICAgfCAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgfAorICAgICBnZXR0ZXh0LXJ1bnRpbWUgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnZXR0ZXh0LXRvb2xzICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnaXAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgfAorICAgICBnamF5ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnbGl2ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnbHVuYXJjbG9jayAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnbnViaWZmICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnbnVjYXNoICAgICAgICAgICAgfCAoKSAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgKCkgfAorICAgICBnbnVlZHUgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnbnVsaWIgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnbnVuZXQgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnbnVuZXQtZ3RrICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnbnV0bHMgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgfAorICAgICBnb2xkICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtYWVyaWFsICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtYmVhbSAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtYmx1ZXRvb3RoICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgfAorICAgICBncGUtY2FsZW5kYXIgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtY2xvY2sgICAgICAgICAgfCBbXSAgICBbXSAgICAgICBbXSAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgfAorICAgICBncGUtY29uZiAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtY29udGFjdHMgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtZWRpdCAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtZmlsZW1hbmFnZXIgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtZ28gICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgfAorICAgICBncGUtbG9naW4gICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtb3duZXJpbmZvICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgfAorICAgICBncGUtcGFja2FnZSAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtc2tldGNoYm9vayAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtc3UgICAgICAgICAgICAgfCBbXSAgICBbXSAgICAgICBbXSAgICAgICAgICAgICBbXSBbXSBbXSAgICAgICAgfAorICAgICBncGUtdGFza21hbmFnZXIgICAgfCBbXSBbXSBbXSAgICAgICBbXSAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgfAorICAgICBncGUtdGltZXNoZWV0ICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgfAorICAgICBncGUtdG9kYXkgICAgICAgICAgfCAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgfAorICAgICBncGUtdG9kbyAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgfAorICAgICBncGhvdG8yICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncHJvZiAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgfAorICAgICBncHNkcml2ZSAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncmFtYWRvaXIgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncmVwICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncnViICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnc2FzbCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnc3MgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnc3QtcGx1Z2lucy1iYWQgICAgfCAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgfAorICAgICBnc3QtcGx1Z2lucy1iYXNlICAgfCAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnc3QtcGx1Z2lucy1nb29kICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgfAorICAgICBnc3QtcGx1Z2lucy11Z2x5ICAgfCAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICBbXSBbXSBbXSAgICAgICAgfAorICAgICBnc3RyZWFtZXIgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBndGljayAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBndGthbSAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgfAorICAgICBndGtvcnBoYW4gICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgfAorICAgICBndGtzcGVsbCAgICAgICAgICAgfCAgICAgICBbXSAgICBbXSBbXSAgICAgICBbXSAgICBbXSAgICBbXSBbXSAgICAgfAorICAgICBndXRlbnByaW50ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBoZWxsbyAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgfAorICAgICBoZWxwMm1hbiAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBoeWxhZmF4ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBpZHV0aWxzICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBpbmRlbnQgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBpc29fMTU5MjQgICAgICAgICAgfCAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBpc29fMzE2NiAgICAgICAgICAgfCBbXSBbXSAgICAgICAoKSBbXSBbXSBbXSAgICBbXSAgICAgICBbXSAgICAgICAgfAorICAgICBpc29fMzE2Nl8yICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBpc29fNDIxNyAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgfAorICAgICBpc29fNjM5ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICAgICAgICAgfAorICAgICBpc29fNjM5XzMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgfAorICAgICBqd2hvaXMgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBrYmQgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBrZXl0b3VjaCAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBrZXl0b3VjaC1lZGl0b3IgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBrZXl0b3VjaC1rZXlib2EuLi4gfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBrbGF2YXJvICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgfAorICAgICBsYXRyaW5lICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsZCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsZWFmcGFkICAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsaWJjICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsaWJleGlmICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsaWJleHRyYWN0b3IgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsaWJnbnV0bHMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgfAorICAgICBsaWJncGV3aWRnZXQgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgfAorICAgICBsaWJncGctZXJyb3IgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsaWJncGhvdG8yICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsaWJncGhvdG8yX3BvcnQgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsaWJnc2FzbCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsaWJpY29udiAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsaWJpZG4gICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsaWZlbGluZXMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsaWZlcmVhICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsaWx5cG9uZCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsaW5rZHIgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsb3Jkc2F3YXIgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBscHJuZyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBseW54ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBtNCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBtYWlsZnJvbWQgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBtYWlsdXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBtYWtlICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBtYW4tZGIgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBtYW4tZGItbWFucGFnZXMgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBtaW5pY29tICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgfAorICAgICBta2lzb2ZzICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBteXNlcnZlciAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBuYW5vICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgfAorICAgICBvcGNvZGVzICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBwYXJ0ZWQgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBwaWVzICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBwb3B0ICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgfAorICAgICBwc21pc2MgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBwc3BwICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBwd2R1dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICByYWRpdXMgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICByZWNvZGUgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICByb3NlZ2FyZGVuICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBycG0gICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBydXNoICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBzYXJnICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBzY3JlZW0gICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBzY3JvbGxrZWVwZXIgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgW10gfAorICAgICBzZWQgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBzaGFydXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBzaGlzaGkgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBza2VuY2lsICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBzb2xmZWdlICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgfAorICAgICBzb2xmZWdlLW1hbnVhbCAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBzb3VuZHRyYWNrZXIgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBzcCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBzeXNzdGF0ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB0YXIgICAgICAgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB0ZXhpbmZvICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgfAorICAgICB0aW4gICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB1bmljb2RlLWhhbi10cmEuLi4gfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB1bmljb2RlLXRyYW5zbGEuLi4gfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB1dGlsLWxpbnV4LW5nICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB2aWNlICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB2bW0gICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB2b3JiaXMtdG9vbHMgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB3YXN0ZXNlZGdlICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB3ZGlmZiAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB3Z2V0ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB3eXNsaWotcG8gICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB4Y2hhdCAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB4ZGctdXNlci1kaXJzICAgICAgfCBbXSBbXSAgICAgICBbXSBbXSBbXSAgICAgICBbXSAgICAgICBbXSBbXSAgICAgfAorICAgICB4a2V5Ym9hcmQtY29uZmlnICAgfCBbXSAgICBbXSAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgICAgICBrbyBrdSBreSBsZyBsdCBsdiBtayBtbCBtbiBtciBtcyBtdCBuYiBuZHMgbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMjAgIDUgMTAgIDEgMTMgNDggIDQgIDIgIDIgIDQgMjQgMTAgMjAgIDMgICAxCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmwgIG5uIG9yIHBhIHBsICBwcyBwdCBwdF9CUiBybyBydSBydyBzayBzbCBzcSBzcgorICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgYTJwcyAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgIFtdICAgICBbXSAgW10gICBbXSBbXSAgICAgICBbXSAgICBbXSB8CisgICAgIGFlZ2lzICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBhbnQtcGhvbmUgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgIFtdICAgICAgICAgICAgICAgICAgIHwKKyAgICAgYW51YmlzICAgICAgICAgICAgIHwgW10gICAgICAgICAgIFtdICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIGFzcGVsbCAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgW10gW10gICAgICAgfAorICAgICBiYXNoICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIHwKKyAgICAgYmZkICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIGJpYnNoZWxmICAgICAgICAgICB8IFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBiaW51dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgIHwKKyAgICAgYmlzb24gICAgICAgICAgICAgIHwgW10gICAgICAgICAgIFtdICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIGJpc29uLXJ1bnRpbWUgICAgICB8IFtdICAgICAgICAgICBbXSAgICAgW10gIFtdICAgW10gW10gICAgICAgW10gICAgICAgfAorICAgICBibHVlei1waW4gICAgICAgICAgfCBbXSAgICAgICAgICAgW10gICAgICAgICBbXSAgIFtdIFtdICAgIFtdIFtdICAgIFtdIHwKKyAgICAgYm9tYm9uby1kdmQgICAgICAgIHwgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICB8CisgICAgIGJ1enp0YXJkICAgICAgICAgICB8IFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBjZmxvdyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgY2xpc3AgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIGNvcmV1dGlscyAgICAgICAgICB8IFtdICAgICAgICAgICBbXSAgICAgW10gIFtdICAgICAgW10gICAgICAgW10gICAgICAgfAorICAgICBjcGlvICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgY3BwaSAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGNwcGxpYiAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBjcnlwdHNldHVwICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZGZhcmMgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGRpYWxvZyAgICAgICAgICAgICB8IFtdICAgICAgICAgICBbXSAgICAgICAgIFtdICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBkaWNvICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZGlmZnV0aWxzICAgICAgICAgIHwgW10gICAgICAgICAgIFtdICAgICAgICAgW10gICBbXSBbXSAgICAgICAgICAgICBbXSB8CisgICAgIGRpbmsgICAgICAgICAgICAgICB8ICgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBkb29kbGUgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIHwKKyAgICAgZTJmc3Byb2dzICAgICAgICAgIHwgW10gICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGVuc2NyaXB0ICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgIFtdICAgW10gW10gICAgICAgW10gICAgICAgfAorICAgICBleGlmICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgW10gICAgICAgICAgICAgIFtdICgpICAgIFtdICAgICAgICAgIHwKKyAgICAgZmV0Y2htYWlsICAgICAgICAgIHwgW10gICAgICAgICAgIFtdICAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICB8CisgICAgIGZpbmR1dGlscyAgICAgICAgICB8IFtdICAgICAgICAgICBbXSAgICAgW10gICAgICAgICAgW10gICAgICAgW10gICAgICAgfAorICAgICBmbGV4ICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgW10gICAgICAgICBbXSAgIFtdIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgZnJlZWRpbmsgICAgICAgICAgIHwgW10gICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdhcyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnYXdrICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgW10gICAgICAgICBbXSAgIFtdICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ2NhbCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdjYyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorICAgICBnZXR0ZXh0LWV4YW1wbGVzICAgfCBbXSAgICAgICAgICAgW10gICAgIFtdICAgICAgIFtdIFtdICAgIFtdIFtdICAgIFtdIHwKKyAgICAgZ2V0dGV4dC1ydW50aW1lICAgIHwgW10gIFtdICAgICAgIFtdICAgICBbXSAgICAgICBbXSBbXSAgICBbXSBbXSAgICBbXSB8CisgICAgIGdldHRleHQtdG9vbHMgICAgICB8ICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgW10gW10gICAgW10gW10gICAgW10gfAorICAgICBnaXAgICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgIFtdIHwKKyAgICAgZ2pheSAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdsaXYgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICBbXSAgICAgICAgIFtdICAgW10gW10gICAgW10gICAgICAgICAgfAorICAgICBnbHVuYXJjbG9jayAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICBbXSAgIFtdICAgICAgIFtdICAgICAgIFtdIHwKKyAgICAgZ251YmlmZiAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICB8CisgICAgIGdudWNhc2ggICAgICAgICAgICB8IFtdICAgICAgICAgICAoKSAgICAgICAgICgpICAgICAgKCkgICAgICAgICAgICAgICAgfAorICAgICBnbnVlZHUgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ251bGliICAgICAgICAgICAgIHwgW10gICAgICAgICAgIFtdICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICB8CisgICAgIGdudW5ldCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBnbnVuZXQtZ3RrICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgZ251dGxzICAgICAgICAgICAgIHwgW10gICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdvbGQgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtYWVyaWFsICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgIFtdICBbXSAgIFtdIFtdICAgICAgIFtdICAgIFtdIHwKKyAgICAgZ3BlLWJlYW0gICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICBbXSAgW10gICBbXSBbXSAgICAgICBbXSAgICBbXSB8CisgICAgIGdwZS1ibHVldG9vdGggICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBncGUtY2FsZW5kYXIgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgIFtdICAgICAgIFtdICAgIFtdIHwKKyAgICAgZ3BlLWNsb2NrICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICBbXSAgW10gICBbXSBbXSAgICBbXSBbXSAgICBbXSB8CisgICAgIGdwZS1jb25mICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgW10gIFtdICAgW10gW10gICAgW10gW10gICAgICAgfAorICAgICBncGUtY29udGFjdHMgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgIFtdIFtdICAgICAgIFtdICAgIFtdIHwKKyAgICAgZ3BlLWVkaXQgICAgICAgICAgIHwgW10gICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICB8CisgICAgIGdwZS1maWxlbWFuYWdlciAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgfAorICAgICBncGUtZ28gICAgICAgICAgICAgfCBbXSAgICAgICAgICAgW10gICAgICAgICBbXSAgIFtdIFtdICAgIFtdIFtdICAgIFtdIHwKKyAgICAgZ3BlLWxvZ2luICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGdwZS1vd25lcmluZm8gICAgICB8IFtdICAgICAgICAgICAgICAgICAgW10gIFtdICAgW10gW10gICAgW10gW10gICAgW10gfAorICAgICBncGUtcGFja2FnZSAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIHwKKyAgICAgZ3BlLXNrZXRjaGJvb2sgICAgIHwgW10gICAgICAgICAgICAgICAgICBbXSAgW10gICBbXSBbXSAgICAgICBbXSAgICBbXSB8CisgICAgIGdwZS1zdSAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgW10gIFtdICAgW10gW10gICAgW10gW10gICAgW10gfAorICAgICBncGUtdGFza21hbmFnZXIgICAgfCBbXSAgICAgICAgICAgICAgICAgIFtdICBbXSAgIFtdIFtdICAgIFtdIFtdICAgIFtdIHwKKyAgICAgZ3BlLXRpbWVzaGVldCAgICAgIHwgW10gICAgICAgICAgICAgICAgICBbXSAgW10gICBbXSBbXSAgICBbXSBbXSAgICBbXSB8CisgICAgIGdwZS10b2RheSAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgW10gIFtdICAgW10gW10gICAgW10gW10gICAgW10gfAorICAgICBncGUtdG9kbyAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgIFtdICAgICAgIFtdICAgIFtdIHwKKyAgICAgZ3Bob3RvMiAgICAgICAgICAgIHwgW10gICAgICAgIFtdIFtdICAgICAgICAgW10gICBbXSBbXSAgICBbXSAgICAgICBbXSB8CisgICAgIGdwcm9mICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgIFtdICAgW10gICAgICAgICAgICAgICAgICAgfAorICAgICBncHNkcml2ZSAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgZ3JhbWFkb2lyICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGdyZXAgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgfAorICAgICBncnViICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgZ3Nhc2wgICAgICAgICAgICAgIHwgW10gICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSB8CisgICAgIGdzcyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgfAorICAgICBnc3QtcGx1Z2lucy1iYWQgICAgfCBbXSAgICAgICAgICAgW10gICAgICAgICBbXSAgICAgIFtdICAgIFtdICAgIFtdICAgIHwKKyAgICAgZ3N0LXBsdWdpbnMtYmFzZSAgIHwgW10gICAgICAgICAgIFtdICAgICAgICAgW10gICAgICBbXSAgICBbXSAgICAgICAgICB8CisgICAgIGdzdC1wbHVnaW5zLWdvb2QgICB8IFtdICAgICAgICAgICBbXSAgICAgICAgIFtdICAgICAgW10gICAgW10gICAgICAgICAgfAorICAgICBnc3QtcGx1Z2lucy11Z2x5ICAgfCBbXSAgICAgICAgICAgW10gICAgICAgICBbXSAgICAgIFtdICAgIFtdIFtdICAgICAgIHwKKyAgICAgZ3N0cmVhbWVyICAgICAgICAgIHwgW10gICAgICAgICAgIFtdICAgICAgICAgW10gICAgICBbXSAgICBbXSAgICAgICAgICB8CisgICAgIGd0aWNrICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgfAorICAgICBndGthbSAgICAgICAgICAgICAgfCBbXSAgICAgICAgW10gW10gICAgICAgICBbXSAgICAgIFtdICAgIFtdICAgICAgICAgIHwKKyAgICAgZ3Rrb3JwaGFuICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGd0a3NwZWxsICAgICAgICAgICB8IFtdICAgICAgICAgICBbXSAgICAgW10gIFtdICAgW10gW10gICAgW10gW10gW10gW10gfAorICAgICBndXRlbnByaW50ICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgaGVsbG8gICAgICAgICAgICAgIHwgW10gICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICB8CisgICAgIGhlbHAybWFuICAgICAgICAgICB8ICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBoeWxhZmF4ICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgaWR1dGlscyAgICAgICAgICAgIHwgW10gICAgICAgICAgIFtdICAgICAgICAgW10gICBbXSBbXSAgICAgICAgICAgICAgICB8CisgICAgIGluZGVudCAgICAgICAgICAgICB8IFtdICAgICAgICAgICBbXSAgICAgICAgIFtdICAgW10gW10gICAgW10gICAgICAgW10gfAorICAgICBpc29fMTU5MjQgICAgICAgICAgfCBbXSAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICAgIHwKKyAgICAgaXNvXzMxNjYgICAgICAgICAgIHwgW10gIFtdIFtdIFtdIFtdICAgICAoKSAgW10gICBbXSBbXSBbXSBbXSBbXSBbXSBbXSB8CisgICAgIGlzb18zMTY2XzIgICAgICAgICB8IFtdICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgfAorICAgICBpc29fNDIxNyAgICAgICAgICAgfCBbXSAgW10gICAgICAgW10gICAgIFtdICAgICAgICAgIFtdIFtdICAgIFtdICAgIFtdIHwKKyAgICAgaXNvXzYzOSAgICAgICAgICAgIHwgW10gICAgIFtdIFtdIFtdICAgICAgICAgICAgICAgICBbXSBbXSBbXSBbXSAgICBbXSB8CisgICAgIGlzb182MzlfMyAgICAgICAgICB8ICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBqd2hvaXMgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgW10gICAgICAgICBbXSAgIFtdICAgICAgICAgICAgICAgICAgIHwKKyAgICAga2JkICAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgIFtdICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CisgICAgIGtleXRvdWNoICAgICAgICAgICB8IFtdICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAorICAgICBrZXl0b3VjaC1lZGl0b3IgICAgfCBbXSAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIHwKKyAgICAga2V5dG91Y2gta2V5Ym9hLi4uIHwgW10gICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGtsYXZhcm8gICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsYXRyaW5lICAgICAgICAgICAgfCAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgbGQgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxlYWZwYWQgICAgICAgICAgICB8IFtdICBbXSAgICAgICBbXSAgICAgW10gIFtdICAgICAgW10gICAgW10gW10gICAgW10gfAorICAgICBsaWJjICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgIHwKKyAgICAgbGliZXhpZiAgICAgICAgICAgIHwgW10gICAgICAgICAgIFtdICAgICAgICAgKCkgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIGxpYmV4dHJhY3RvciAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsaWJnbnV0bHMgICAgICAgICAgfCBbXSAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGliZ3Bld2lkZ2V0ICAgICAgIHwgW10gICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICB8CisgICAgIGxpYmdwZy1lcnJvciAgICAgICB8ICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAorICAgICBsaWJncGhvdG8yICAgICAgICAgfCBbXSAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbGliZ3Bob3RvMl9wb3J0ICAgIHwgW10gICAgICAgICAgIFtdICAgICAgICAgW10gICAgICBbXSAgICBbXSAgICAgICAgICB8CisgICAgIGxpYmdzYXNsICAgICAgICAgICB8IFtdICAgICAgICAgICBbXSAgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgW10gfAorICAgICBsaWJpY29udiAgICAgICAgICAgfCBbXSAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgIFtdIHwKKyAgICAgbGliaWRuICAgICAgICAgICAgIHwgW10gICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxpZmVsaW5lcyAgICAgICAgICB8IFtdICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBsaWZlcmVhICAgICAgICAgICAgfCBbXSAgICAgICAgICAgW10gICAgIFtdICBbXSAgIFtdICgpICAgICgpICAgIFtdICAgIHwKKyAgICAgbGlseXBvbmQgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGxpbmtkciAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBsb3Jkc2F3YXIgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgbHBybmcgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIGx5bnggICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBtNCAgICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgW10gICAgICAgICBbXSAgIFtdIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgbWFpbGZyb21kICAgICAgICAgIHwgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIG1haWx1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBtYWtlICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgW10gICAgICAgICBbXSAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgbWFuLWRiICAgICAgICAgICAgIHwgW10gICAgICAgICAgIFtdICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIG1hbi1kYi1tYW5wYWdlcyAgICB8IFtdICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBtaW5pY29tICAgICAgICAgICAgfCAgICAgICAgICAgICAgW10gICAgICAgICBbXSAgIFtdIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgbWtpc29mcyAgICAgICAgICAgIHwgW10gICAgICAgICAgIFtdICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIG15c2VydmVyICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBuYW5vICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgW10gICAgICAgICBbXSAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgb3Bjb2RlcyAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CisgICAgIHBhcnRlZCAgICAgICAgICAgICB8IFtdICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgfAorICAgICBwaWVzICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgcG9wdCAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgIFtdICAgICBbXSAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgIHBzbWlzYyAgICAgICAgICAgICB8IFtdICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBwc3BwICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgcHdkdXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHJhZGl1cyAgICAgICAgICAgICB8IFtdICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICByZWNvZGUgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgW10gICAgIFtdICBbXSAgIFtdIFtdICAgIFtdIFtdICAgICAgIHwKKyAgICAgcm9zZWdhcmRlbiAgICAgICAgIHwgICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICB8CisgICAgIHJwbSAgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBydXNoICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgc2FyZyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHNjcmVlbSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBzY3JvbGxrZWVwZXIgICAgICAgfCBbXSAgW10gICAgICAgW10gICAgICAgICAgICAgIFtdIFtdICAgIFtdICAgIFtdIFtdIHwKKyAgICAgc2VkICAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgIFtdICAgICBbXSAgW10gICBbXSBbXSAgICBbXSBbXSAgICBbXSB8CisgICAgIHNoYXJ1dGlscyAgICAgICAgICB8IFtdICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgW10gfAorICAgICBzaGlzaGkgICAgICAgICAgICAgfCAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgc2tlbmNpbCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHNvbGZlZ2UgICAgICAgICAgICB8IFtdICAgICAgICAgICBbXSAgICAgICAgIFtdICAgICAgW10gICAgICAgICAgICAgICAgfAorICAgICBzb2xmZWdlLW1hbnVhbCAgICAgfCBbXSAgICAgICAgICAgW10gICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgc291bmR0cmFja2VyICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisgICAgIHNwICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICBzeXNzdGF0ICAgICAgICAgICAgfCBbXSAgICAgICAgICAgW10gICAgICAgICBbXSAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgdGFyICAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgIFtdICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICB8CisgICAgIHRleGluZm8gICAgICAgICAgICB8IFtdICAgICAgICAgICBbXSAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgfAorICAgICB0aW4gICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKKyAgICAgdW5pY29kZS1oYW4tdHJhLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHVuaWNvZGUtdHJhbnNsYS4uLiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB1dGlsLWxpbnV4LW5nICAgICAgfCBbXSAgICAgICAgICAgW10gICAgICAgICBbXSAgICAgIFtdICAgICAgIFtdICAgICAgIHwKKyAgICAgdmljZSAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHZtbSAgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB2b3JiaXMtdG9vbHMgICAgICAgfCBbXSAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgd2FzdGVzZWRnZSAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHdkaWZmICAgICAgICAgICAgICB8IFtdICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICB3Z2V0ICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgW10gICAgIFtdICBbXSAgICAgIFtdICAgIFtdIFtdICAgICAgIHwKKyAgICAgd3lzbGlqLXBvICAgICAgICAgIHwgW10gIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgIHhjaGF0ICAgICAgICAgICAgICB8IFtdICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICAgW10gICAgW10gW10gW10gW10gfAorICAgICB4ZGctdXNlci1kaXJzICAgICAgfCBbXSAgW10gW10gW10gW10gIFtdIFtdICBbXSAgIFtdIFtdICAgIFtdIFtdIFtdIFtdIHwKKyAgICAgeGtleWJvYXJkLWNvbmZpZyAgIHwgW10gICAgICAgICAgIFtdICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgICAgICBubCAgbm4gb3IgcGEgcGwgIHBzIHB0IHB0X0JSIHJvIHJ1IHJ3IHNrIHNsIHNxIHNyCisgICAgICAgICAgICAgICAgICAgICAgICAgIDEzNSAxMCAgNCAgNyAxMDUgIDEgMjkgIDYyICAgNDcgOTEgIDMgNTQgNDYgIDkgMzcKKworICAgICAgICAgICAgICAgICAgICAgICAgICBzdiAgc3cgdGEgdGUgdGcgdGggdHIgdWsgdmkgIHdhIHpoX0NOIHpoX0hLIHpoX1RXCisgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICBhMnBzICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgW10gW10gW10gW10gICAgICAgICAgICAgICAgICAgICAgIHwgMjcKKyAgICAgYWVnaXMgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICB8ICA5CisgICAgIGFudC1waG9uZSAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgIFtdICAgICAgICAgICAgICAgfCAgOQorICAgICBhbnViaXMgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgW10gW10gW10gICAgICAgICAgICAgICAgICAgICAgIHwgMTUKKyAgICAgYXNwZWxsICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICBbXSAgICAgICAgICAgICAgICAgICB8IDIwCisgICAgIGJhc2ggICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgfCAxMgorICAgICBiZmQgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIHwgIDYKKyAgICAgYmlic2hlbGYgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgW10gICAgICAgICAgICAgICB8IDE2CisgICAgIGJpbnV0aWxzICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgfCAgOAorICAgICBiaXNvbiAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIHwgMTIKKyAgICAgYmlzb24tcnVudGltZSAgICAgIHwgW10gICAgICAgICAgICAgIFtdICAgIFtdIFtdICAgICAgW10gICAgICAgICAgW10gICB8IDI5CisgICAgIGJsdWV6LXBpbiAgICAgICAgICB8IFtdICAgICAgICAgICAgICBbXSBbXSBbXSBbXSAgW10gIFtdICAgICAgICAgIFtdICAgfCAzNworICAgICBib21ib25vLWR2ZCAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIHwgIDQKKyAgICAgYnV6enRhcmQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICB8ICA3CisgICAgIGNmbG93ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgIFtdICAgICAgICAgICAgICAgfCAgOQorICAgICBjbGlzcCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTAKKyAgICAgY29yZXV0aWxzICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgW10gICAgICAgICAgICAgICB8IDIyCisgICAgIGNwaW8gICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICBbXSBbXSBbXSAgICAgIFtdICAgICAgICAgIFtdICAgfCAxMworICAgICBjcHBpICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgIHwgIDUKKyAgICAgY3BwbGliICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgIFtdIFtdIFtdICAgICAgW10gICAgICAgICAgW10gICB8IDE0CisgICAgIGNyeXB0c2V0dXAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgfCAgNworICAgICBkZmFyYyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIHwgIDkKKyAgICAgZGlhbG9nICAgICAgICAgICAgIHwgW10gIFtdICAgICAgICAgIFtdICAgICAgIFtdICBbXSAgW10gICAgICAgICAgW10gICB8IDMwCisgICAgIGRpY28gICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMgorICAgICBkaWZmdXRpbHMgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgW10gW10gW10gICAgICBbXSAgICAgICAgICBbXSAgIHwgMzAKKyAgICAgZGluayAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA0CisgICAgIGRvb2RsZSAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgfCAgNworICAgICBlMmZzcHJvZ3MgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgICAgIHwgMTEKKyAgICAgZW5zY3JpcHQgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgIFtdIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICB8IDE3CisgICAgIGV4aWYgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgIFtdICAgICAgICAgICAgICAgfCAxNgorICAgICBmZXRjaG1haWwgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICBbXSAgICAgICAgICAgICAgIHwgMTcKKyAgICAgZmluZHV0aWxzICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgIFtdIFtdIFtdICAgICAgW10gICAgICAgICAgICAgICB8IDIwCisgICAgIGZsZXggICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICAgICAgICAgIFtdICAgfCAxNQorICAgICBmcmVlZGluayAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIHwgMTAKKyAgICAgZ2FzICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA0CisgICAgIGdhd2sgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgIFtdICAgICAgICAgICAgICAgfCAxOAorICAgICBnY2FsICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUKKyAgICAgZ2NjICAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgW10gICAgICAgICAgICAgICB8ICA3CisgICAgIGdldHRleHQtZXhhbXBsZXMgICB8IFtdICAgICAgICAgICAgICAgICBbXSBbXSBbXSAgICAgIFtdICAgIFtdICAgIFtdICAgfCAzNAorICAgICBnZXR0ZXh0LXJ1bnRpbWUgICAgfCBbXSAgICAgICAgICAgICAgICAgW10gW10gW10gICAgICBbXSAgICBbXSAgICBbXSAgIHwgMjkKKyAgICAgZ2V0dGV4dC10b29scyAgICAgIHwgW10gICAgICAgICAgICAgICAgIFtdIFtdIFtdICAgICAgW10gICAgICAgICAgW10gICB8IDIyCisgICAgIGdpcCAgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgIFtdICAgICAgICAgIFtdICAgfCAyMgorICAgICBnamF5ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIHwgIDMKKyAgICAgZ2xpdiAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICB8IDE0CisgICAgIGdsdW5hcmNsb2NrICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgW10gIFtdICAgICAgICAgIFtdICAgfCAxOQorICAgICBnbnViaWZmICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIHwgIDQKKyAgICAgZ251Y2FzaCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICgpIFtdICgpICAgICAgW10gICAgICAgICAgKCkgICB8IDEwCisgICAgIGdudWVkdSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgIFtdICAgfCAgNworICAgICBnbnVsaWIgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICBbXSAgICAgICAgICAgICAgIHwgMTYKKyAgICAgZ251bmV0ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICB8ICAxCisgICAgIGdudW5ldC1ndGsgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgfCAgNQorICAgICBnbnV0bHMgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICBbXSAgICAgICAgICAgICAgIHwgMTAKKyAgICAgZ29sZCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICB8ICA0CisgICAgIGdwZS1hZXJpYWwgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgIFtdICAgICAgICAgICAgICAgfCAxOAorICAgICBncGUtYmVhbSAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICBbXSAgICAgICAgICAgICAgIHwgMTkKKyAgICAgZ3BlLWJsdWV0b290aCAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgW10gICAgICAgICAgICAgICB8IDEzCisgICAgIGdwZS1jYWxlbmRhciAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgW10gIFtdICAgICAgICAgICAgICAgfCAxMgorICAgICBncGUtY2xvY2sgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgW10gICAgW10gIFtdICBbXSAgICAgICAgICAgICAgIHwgMjgKKyAgICAgZ3BlLWNvbmYgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICBbXSAgW10gICAgICAgICAgICAgICB8IDIwCisgICAgIGdwZS1jb250YWN0cyAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgIFtdICAgICAgICAgICAgICAgfCAxNworICAgICBncGUtZWRpdCAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICBbXSAgICAgICAgICAgICAgIHwgMTIKKyAgICAgZ3BlLWZpbGVtYW5hZ2VyICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICBbXSAgW10gICAgICAgICAgICAgICB8IDE2CisgICAgIGdwZS1nbyAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICBbXSAgICBbXSAgW10gIFtdICAgICAgICAgICAgICAgfCAyNQorICAgICBncGUtbG9naW4gICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICBbXSAgICAgICAgICAgICAgIHwgMTEKKyAgICAgZ3BlLW93bmVyaW5mbyAgICAgIHwgW10gICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgW10gICAgICAgICAgW10gICB8IDI1CisgICAgIGdwZS1wYWNrYWdlICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgIFtdICAgICAgICAgICAgICAgfCAxMworICAgICBncGUtc2tldGNoYm9vayAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICBbXSAgICAgICAgICAgICAgIHwgMjAKKyAgICAgZ3BlLXN1ICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgIFtdICAgIFtdICBbXSAgW10gICAgICAgICAgICAgICB8IDMwCisgICAgIGdwZS10YXNrbWFuYWdlciAgICB8IFtdICAgICAgICAgICAgICAgICBbXSAgICBbXSAgW10gIFtdICAgICAgICAgICAgICAgfCAyOQorICAgICBncGUtdGltZXNoZWV0ICAgICAgfCBbXSAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICBbXSAgICAgICAgICBbXSAgIHwgMjUKKyAgICAgZ3BlLXRvZGF5ICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgIFtdICAgIFtdICBbXSAgW10gICAgICAgICAgW10gICB8IDMwCisgICAgIGdwZS10b2RvICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgW10gIFtdICAgICAgICAgICAgICAgfCAxNworICAgICBncGhvdG8yICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICBbXSAgICAgICAgICBbXSAgIHwgMjQKKyAgICAgZ3Byb2YgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICB8IDE1CisgICAgIGdwc2RyaXZlICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgIFtdICAgICAgICAgICAgICAgfCAxMQorICAgICBncmFtYWRvaXIgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICBbXSAgICAgICAgICAgICAgIHwgMTEKKyAgICAgZ3JlcCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICAgW10gICAgICAgICAgICAgICB8IDEwCisgICAgIGdydWIgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgIFtdICAgICAgICAgICAgICAgfCAxNAorICAgICBnc2FzbCAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICBbXSAgICAgICAgICBbXSAgIHwgMTQKKyAgICAgZ3NzICAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgW10gICAgICAgICAgICAgICB8IDExCisgICAgIGdzdC1wbHVnaW5zLWJhZCAgICB8IFtdICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgIFtdICAgICAgICAgICAgICAgfCAyNgorICAgICBnc3QtcGx1Z2lucy1iYXNlICAgfCBbXSAgICAgICAgICAgICAgICAgW10gW10gW10gICAgICBbXSAgICAgICAgICAgICAgIHwgMjQKKyAgICAgZ3N0LXBsdWdpbnMtZ29vZCAgIHwgW10gICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgW10gICAgICAgICAgICAgICB8IDI0CisgICAgIGdzdC1wbHVnaW5zLXVnbHkgICB8IFtdICAgICAgICAgICAgICAgICBbXSBbXSBbXSAgICAgIFtdICAgICAgICAgICAgICAgfCAyOQorICAgICBnc3RyZWFtZXIgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICBbXSAgICAgICAgICAgICAgIHwgMjIKKyAgICAgZ3RpY2sgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgW10gICAgICAgICAgICAgICB8IDEzCisgICAgIGd0a2FtICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgIFtdICAgICAgICAgICAgICAgfCAyMAorICAgICBndGtvcnBoYW4gICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICBbXSAgICAgICAgICAgICAgIHwgMTQKKyAgICAgZ3Rrc3BlbGwgICAgICAgICAgIHwgW10gICAgICAgICAgICAgIFtdIFtdIFtdIFtdICBbXSAgW10gICAgW10gICAgW10gICB8IDQ1CisgICAgIGd1dGVucHJpbnQgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMAorICAgICBoZWxsbyAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgW10gW10gICAgW10gICAgICBbXSAgICAgICAgICBbXSAgIHwgMjEKKyAgICAgaGVscDJtYW4gICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICB8ICA3CisgICAgIGh5bGFmYXggICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgfCAgNQorICAgICBpZHV0aWxzICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICBbXSAgICAgICAgICAgICAgIHwgMTcKKyAgICAgaW5kZW50ICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgIFtdIFtdIFtdICAgICAgW10gICAgICAgICAgW10gICB8IDMwCisgICAgIGlzb18xNTkyNCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAoKSAgICBbXSAoKSAgICAgIFtdICAgICAgICAgIFtdICAgfCAxNgorICAgICBpc29fMzE2NiAgICAgICAgICAgfCBbXSAgICAgICAgW10gICAgKCkgW10gW10gKCkgIFtdICBbXSAgICBbXSAgICAoKSAgIHwgNTMKKyAgICAgaXNvXzMxNjZfMiAgICAgICAgIHwgICAgICAgICAgICAgICAgICgpICAgIFtdICgpICAgICAgW10gICAgICAgICAgICAgICB8ICA5CisgICAgIGlzb180MjE3ICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAoKSBbXSBbXSAoKSAgICAgIFtdICAgIFtdICAgICAgICAgfCAyNgorICAgICBpc29fNjM5ICAgICAgICAgICAgfCBbXSAgICAgW10gW10gICAgKCkgICAgW10gKCkgIFtdICBbXSAgICBbXSAgICBbXSAgIHwgMzgKKyAgICAgaXNvXzYzOV8zICAgICAgICAgIHwgICAgICAgIFtdICAgICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgICAgICAgICB8ICA4CisgICAgIGp3aG9pcyAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgIFtdICAgICAgICAgIFtdICAgfCAxNgorICAgICBrYmQgICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgW10gW10gW10gICAgICBbXSAgICAgICAgICAgICAgIHwgMTUKKyAgICAga2V5dG91Y2ggICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgW10gICAgICAgICAgICAgICB8IDE2CisgICAgIGtleXRvdWNoLWVkaXRvciAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgIFtdICAgICAgICAgICAgICAgfCAxNAorICAgICBrZXl0b3VjaC1rZXlib2EuLi4gfCBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICBbXSAgICAgICAgICAgICAgIHwgMTQKKyAgICAga2xhdmFybyAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICB8IDExCisgICAgIGxhdHJpbmUgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgIFtdICAgICAgICAgICAgICAgfCAxMAorICAgICBsZCAgICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICBbXSAgIHwgMTEKKyAgICAgbGVhZnBhZCAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgIFtdIFtdIFtdICAgICAgW10gICAgICAgICAgW10gICB8IDMzCisgICAgIGxpYmMgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgIFtdICAgICAgICAgIFtdICAgfCAyMQorICAgICBsaWJleGlmICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAoKSAgICAgICAgICAgICAgIHwgIDcKKyAgICAgbGliZXh0cmFjdG9yICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICB8ICAxCisgICAgIGxpYmdudXRscyAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgIFtdICAgICAgICAgICAgICAgfCAgOQorICAgICBsaWJncGV3aWRnZXQgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICBbXSAgICAgICAgICAgICAgIHwgMTQKKyAgICAgbGliZ3BnLWVycm9yICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgW10gICAgICAgICAgICAgICB8ICA5CisgICAgIGxpYmdwaG90bzIgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgfCAgOAorICAgICBsaWJncGhvdG8yX3BvcnQgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICBbXSAgIHwgMTQKKyAgICAgbGliZ3Nhc2wgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgW10gICAgICAgICAgICAgICB8IDEzCisgICAgIGxpYmljb252ICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgW10gIFtdICAgICAgICAgICAgICAgfCAyMQorICAgICBsaWJpZG4gICAgICAgICAgICAgfCAoKSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICBbXSAgICAgICAgICAgICAgIHwgMTEKKyAgICAgbGlmZWxpbmVzICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA0CisgICAgIGxpZmVyZWEgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgfCAyMQorICAgICBsaWx5cG9uZCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIHwgIDcKKyAgICAgbGlua2RyICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgW10gICAgICAgICAgW10gICB8IDE3CisgICAgIGxvcmRzYXdhciAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMQorICAgICBscHJuZyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIHwgIDMKKyAgICAgbHlueCAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgIFtdIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICB8IDE3CisgICAgIG00ICAgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgIFtdICAgICAgICAgIFtdICAgfCAxOQorICAgICBtYWlsZnJvbWQgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgIHwgIDMKKyAgICAgbWFpbHV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICB8ICA1CisgICAgIG1ha2UgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgIFtdICAgICAgICAgICAgICAgfCAyMQorICAgICBtYW4tZGIgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICBbXSAgICAgICAgICAgICAgIHwgIDgKKyAgICAgbWFuLWRiLW1hbnBhZ2VzICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA0CisgICAgIG1pbmljb20gICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgfCAxNgorICAgICBta2lzb2ZzICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICBbXSAgICAgICAgICAgICAgIHwgIDkKKyAgICAgbXlzZXJ2ZXIgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAwCisgICAgIG5hbm8gICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgIFtdICAgICAgICAgIFtdICAgfCAyMQorICAgICBvcGNvZGVzICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgICAgIHwgMTEKKyAgICAgcGFydGVkICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgIFtdIFtdIFtdICAgICAgICAgICAgICAgICAgW10gICB8IDE1CisgICAgIHBpZXMgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgfCAgMworICAgICBwb3B0ICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgW10gW10gICAgW10gICAgICBbXSAgICAgICAgICBbXSAgIHwgMjcKKyAgICAgcHNtaXNjICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICB8IDExCisgICAgIHBzcHAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNAorICAgICBwd2R1dGlscyAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIHwgIDYKKyAgICAgcmFkaXVzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICB8ICA5CisgICAgIHJlY29kZSAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgIFtdICAgICAgICAgICAgICAgfCAyOAorICAgICByb3NlZ2FyZGVuICAgICAgICAgfCAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDAKKyAgICAgcnBtICAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgW10gICB8IDExCisgICAgIHJ1c2ggICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgfCAgNAorICAgICBzYXJnICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEKKyAgICAgc2NyZWVtICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICB8ICAzCisgICAgIHNjcm9sbGtlZXBlciAgICAgICB8IFtdICAgICAgICAgICAgICAgICBbXSBbXSBbXSAgICAgICAgICAgICAgICAgIFtdICAgfCAyNworICAgICBzZWQgICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICBbXSAgICAgICAgICBbXSAgIHwgMzAKKyAgICAgc2hhcnV0aWxzICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgW10gICAgICAgICAgW10gICB8IDIyCisgICAgIHNoaXNoaSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgfCAgMworICAgICBza2VuY2lsICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIHwgIDcKKyAgICAgc29sZmVnZSAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgW10gICAgICAgICAgICAgICB8IDE2CisgICAgIHNvbGZlZ2UtbWFudWFsICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgOAorICAgICBzb3VuZHRyYWNrZXIgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgICAgIHwgIDkKKyAgICAgc3AgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzCisgICAgIHN5c3N0YXQgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgIFtdICAgICAgICAgICAgICAgfCAxNQorICAgICB0YXIgICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgW10gW10gW10gICAgICBbXSAgICAgICAgICBbXSAgIHwgMjMKKyAgICAgdGV4aW5mbyAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgIFtdIFtdIFtdICAgICAgW10gICAgICAgICAgICAgICB8IDE3CisgICAgIHRpbiAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNAorICAgICB1bmljb2RlLWhhbi10cmEuLi4gfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDAKKyAgICAgdW5pY29kZS10cmFuc2xhLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyCisgICAgIHV0aWwtbGludXgtbmcgICAgICB8IFtdICAgICAgICAgICAgICAgICBbXSBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgfCAyMAorICAgICB2aWNlICAgICAgICAgICAgICAgfCAoKSAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEKKyAgICAgdm1tICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICB8ICA0CisgICAgIHZvcmJpcy10b29scyAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgfCAgNgorICAgICB3YXN0ZXNlZGdlICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIKKyAgICAgd2RpZmYgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICB8ICA3CisgICAgIHdnZXQgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgIFtdICAgICAgICAgIFtdICAgfCAyNgorICAgICB3eXNsaWotcG8gICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgIHwgIDgKKyAgICAgeGNoYXQgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgIFtdICAgIFtdIFtdICAgICAgW10gICAgICAgICAgW10gICB8IDM2CisgICAgIHhkZy11c2VyLWRpcnMgICAgICB8IFtdICAgICBbXSBbXSAgICBbXSBbXSBbXSBbXSAgICAgIFtdICAgIFtdICAgIFtdICAgfCA2MworICAgICB4a2V5Ym9hcmQtY29uZmlnICAgfCBbXSAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgIHwgMjIKKyAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgODUgdGVhbXMgICAgICAgICAgIHN2ICBzdyB0YSB0ZSB0ZyB0aCB0ciB1ayB2aSAgd2EgemhfQ04gemhfSEsgemhfVFcKKyAgICAgIDE3OCBkb21haW5zICAgICAgICAgMTE5ICAxICAzICAzICAwIDEwIDY1IDUxIDE1NSAxNyAgOTggICAgIDcgICAgNDEgICAgMjYxOAorCisgICBTb21lIGNvdW50ZXJzIGluIHRoZSBwcmVjZWRpbmcgbWF0cml4IGFyZSBoaWdoZXIgdGhhbiB0aGUgbnVtYmVyIG9mCit2aXNpYmxlIGJsb2NrcyBsZXQgdXMgZXhwZWN0LiAgVGhpcyBpcyBiZWNhdXNlIGEgZmV3IGV4dHJhIFBPIGZpbGVzIGFyZQordXNlZCBmb3IgaW1wbGVtZW50aW5nIHJlZ2lvbmFsIHZhcmlhbnRzIG9mIGxhbmd1YWdlcywgb3IgbGFuZ3VhZ2UKK2RpYWxlY3RzLgorCisgICBGb3IgYSBQTyBmaWxlIGluIHRoZSBtYXRyaXggYWJvdmUgdG8gYmUgZWZmZWN0aXZlLCB0aGUgcGFja2FnZSB0bword2hpY2ggaXQgYXBwbGllcyBzaG91bGQgYWxzbyBoYXZlIGJlZW4gaW50ZXJuYXRpb25hbGl6ZWQgYW5kCitkaXN0cmlidXRlZCBhcyBzdWNoIGJ5IGl0cyBtYWludGFpbmVyLiAgVGhlcmUgbWlnaHQgYmUgYW4gb2JzZXJ2YWJsZQorbGFnIGJldHdlZW4gdGhlIG1lcmUgZXhpc3RlbmNlIGEgUE8gZmlsZSBhbmQgaXRzIHdpZGUgYXZhaWxhYmlsaXR5IGluIGEKK2Rpc3RyaWJ1dGlvbi4KKworICAgSWYgSnVuZSAyMDEwIHNlZW1zIHRvIGJlIG9sZCwgeW91IG1heSBmZXRjaCBhIG1vcmUgcmVjZW50IGNvcHkgb2YKK3RoaXMgYEFCT1VULU5MUycgZmlsZSBvbiBtb3N0IEdOVSBhcmNoaXZlIHNpdGVzLiAgVGhlIG1vc3QgdXAtdG8tZGF0ZQorbWF0cml4IHdpdGggZnVsbCBwZXJjZW50YWdlIGRldGFpbHMgY2FuIGJlIGZvdW5kIGF0CitgaHR0cDovL3RyYW5zbGF0aW9ucHJvamVjdC5vcmcvZXh0cmEvbWF0cml4Lmh0bWwnLgorCisxLjUgVXNpbmcgYGdldHRleHQnIGluIG5ldyBwYWNrYWdlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworSWYgeW91IGFyZSB3cml0aW5nIGEgZnJlZWx5IGF2YWlsYWJsZSBwcm9ncmFtIGFuZCB3YW50IHRvCitpbnRlcm5hdGlvbmFsaXplIGl0IHlvdSBhcmUgd2VsY29tZSB0byB1c2UgR05VIGBnZXR0ZXh0JyBpbiB5b3VyCitwYWNrYWdlLiAgT2YgY291cnNlIHlvdSBoYXZlIHRvIHJlc3BlY3QgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCitMaWNlbnNlIHdoaWNoIGNvdmVycyB0aGUgdXNlIG9mIHRoZSBHTlUgYGdldHRleHQnIGxpYnJhcnkuICBUaGlzIG1lYW5zCitpbiBwYXJ0aWN1bGFyIHRoYXQgZXZlbiBub24tZnJlZSBwcm9ncmFtcyBjYW4gdXNlIGBsaWJpbnRsJyBhcyBhIHNoYXJlZAorbGlicmFyeSwgd2hlcmVhcyBvbmx5IGZyZWUgc29mdHdhcmUgY2FuIHVzZSBgbGliaW50bCcgYXMgYSBzdGF0aWMKK2xpYnJhcnkgb3IgdXNlIG1vZGlmaWVkIHZlcnNpb25zIG9mIGBsaWJpbnRsJy4KKworICAgT25jZSB0aGUgc291cmNlcyBhcmUgY2hhbmdlZCBhcHByb3ByaWF0ZWx5IGFuZCB0aGUgc2V0dXAgY2FuIGhhbmRsZQordGhlIHVzZSBvZiBgZ2V0dGV4dCcgdGhlIG9ubHkgdGhpbmcgbWlzc2luZyBhcmUgdGhlIHRyYW5zbGF0aW9ucy4gIFRoZQorRnJlZSBUcmFuc2xhdGlvbiBQcm9qZWN0IGlzIGFsc28gYXZhaWxhYmxlIGZvciBwYWNrYWdlcyB3aGljaCBhcmUgbm90CitkZXZlbG9wZWQgaW5zaWRlIHRoZSBHTlUgcHJvamVjdC4gIFRoZXJlZm9yZSB0aGUgaW5mb3JtYXRpb24gZ2l2ZW4gYWJvdmUKK2FwcGxpZXMgYWxzbyBmb3IgZXZlcnkgb3RoZXIgRnJlZSBTb2Z0d2FyZSBQcm9qZWN0LiAgQ29udGFjdAorYGNvb3JkaW5hdG9yQHRyYW5zbGF0aW9ucHJvamVjdC5vcmcnIHRvIG1ha2UgdGhlIGAucG90JyBmaWxlcyBhdmFpbGFibGUKK3RvIHRoZSB0cmFuc2xhdGlvbiB0ZWFtcy4KKwpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL0NoYW5nZUxvZyBiL2F2YWhpLTAuNi4zMS9DaGFuZ2VMb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM0OTFjMwotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9DaGFuZ2VMb2cKQEAgLTAsMCArMSw1IEBACisyMDEwLTEwLTA0ICBnZXR0ZXh0aXplICA8YnVnLWdudS1nZXR0ZXh0QGdudS5vcmc+CisKKwkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkIGNvbmZpZy5ycGF0aC4KKwkqIGNvbmZpZ3VyZS5hYyAoQUNfQ09ORklHX0ZJTEVTKTogQWRkIHBvL01ha2VmaWxlLmluLgorCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvTElDRU5TRSBiL2F2YWhpLTAuNi4zMS9MSUNFTlNFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkMmQ3ODAKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvTElDRU5TRQpAQCAtMCwwICsxLDUxMCBAQAorCisgICAgICAgICAgICAgICAgICBHTlUgTEVTU0VSIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjEsIEZlYnJ1YXJ5IDE5OTkKKworIENvcHlyaWdodCAoQykgMTk5MSwgMTk5OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKwk1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCitbVGhpcyBpcyB0aGUgZmlyc3QgcmVsZWFzZWQgdmVyc2lvbiBvZiB0aGUgTGVzc2VyIEdQTC4gIEl0IGFsc28gY291bnRzCisgYXMgdGhlIHN1Y2Nlc3NvciBvZiB0aGUgR05VIExpYnJhcnkgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwgaGVuY2UKKyB0aGUgdmVyc2lvbiBudW1iZXIgMi4xLl0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByZWFtYmxlCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2VzIGFyZSBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UKK2ZyZWUgc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4KKworICBUaGlzIGxpY2Vuc2UsIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXBwbGllcyB0byBzb21lCitzcGVjaWFsbHkgZGVzaWduYXRlZCBzb2Z0d2FyZSBwYWNrYWdlcy0tdHlwaWNhbGx5IGxpYnJhcmllcy0tb2YgdGhlCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIG90aGVyIGF1dGhvcnMgd2hvIGRlY2lkZSB0byB1c2UgaXQuICBZb3UKK2NhbiB1c2UgaXQgdG9vLCBidXQgd2Ugc3VnZ2VzdCB5b3UgZmlyc3QgdGhpbmsgY2FyZWZ1bGx5IGFib3V0IHdoZXRoZXIKK3RoaXMgbGljZW5zZSBvciB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyB0aGUgYmV0dGVyCitzdHJhdGVneSB0byB1c2UgaW4gYW55IHBhcnRpY3VsYXIgY2FzZSwgYmFzZWQgb24gdGhlIGV4cGxhbmF0aW9ucworYmVsb3cuCisKKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20gb2YgdXNlLAorbm90IHByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdAoreW91IGhhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZQorZm9yIHRoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCk7IHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldAoraXQgaWYgeW91IHdhbnQgaXQ7IHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIGFuZCB1c2UgcGllY2VzIG9mCitpdCBpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGFyZSBpbmZvcm1lZCB0aGF0IHlvdSBjYW4gZG8KK3RoZXNlIHRoaW5ncy4KKworICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCitkaXN0cmlidXRvcnMgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZXNlCityaWdodHMuICBUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IKK3lvdSBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIGxpYnJhcnkgb3IgaWYgeW91IG1vZGlmeSBpdC4KKworICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBsaWJyYXJ5LCB3aGV0aGVyIGdyYXRpcworb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQgd2UgZ2F2ZQoreW91LiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlIHNvdXJjZQorY29kZS4gIElmIHlvdSBsaW5rIG90aGVyIGNvZGUgd2l0aCB0aGUgbGlicmFyeSwgeW91IG11c3QgcHJvdmlkZQorY29tcGxldGUgb2JqZWN0IGZpbGVzIHRvIHRoZSByZWNpcGllbnRzLCBzbyB0aGF0IHRoZXkgY2FuIHJlbGluayB0aGVtCit3aXRoIHRoZSBsaWJyYXJ5IGFmdGVyIG1ha2luZyBjaGFuZ2VzIHRvIHRoZSBsaWJyYXJ5IGFuZCByZWNvbXBpbGluZworaXQuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpciByaWdodHMuCisKKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIGEgdHdvLXN0ZXAgbWV0aG9kOiAoMSkgd2UgY29weXJpZ2h0IHRoZQorbGlicmFyeSwgYW5kICgyKSB3ZSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlLCB3aGljaCBnaXZlcyB5b3UgbGVnYWwKK3Blcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBsaWJyYXJ5LgorCisgIFRvIHByb3RlY3QgZWFjaCBkaXN0cmlidXRvciwgd2Ugd2FudCB0byBtYWtlIGl0IHZlcnkgY2xlYXIgdGhhdAordGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoZSBmcmVlIGxpYnJhcnkuICBBbHNvLCBpZiB0aGUgbGlicmFyeSBpcworbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHRoZSByZWNpcGllbnRzIHNob3VsZCBrbm93Cit0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwgdmVyc2lvbiwgc28gdGhhdCB0aGUgb3JpZ2luYWwKK2F1dGhvcidzIHJlcHV0YXRpb24gd2lsbCBub3QgYmUgYWZmZWN0ZWQgYnkgcHJvYmxlbXMgdGhhdCBtaWdodCBiZQoraW50cm9kdWNlZCBieSBvdGhlcnMuCisMCisgIEZpbmFsbHksIHNvZnR3YXJlIHBhdGVudHMgcG9zZSBhIGNvbnN0YW50IHRocmVhdCB0byB0aGUgZXhpc3RlbmNlIG9mCithbnkgZnJlZSBwcm9ncmFtLiAgV2Ugd2lzaCB0byBtYWtlIHN1cmUgdGhhdCBhIGNvbXBhbnkgY2Fubm90CitlZmZlY3RpdmVseSByZXN0cmljdCB0aGUgdXNlcnMgb2YgYSBmcmVlIHByb2dyYW0gYnkgb2J0YWluaW5nIGEKK3Jlc3RyaWN0aXZlIGxpY2Vuc2UgZnJvbSBhIHBhdGVudCBob2xkZXIuICBUaGVyZWZvcmUsIHdlIGluc2lzdCB0aGF0CithbnkgcGF0ZW50IGxpY2Vuc2Ugb2J0YWluZWQgZm9yIGEgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSBtdXN0IGJlCitjb25zaXN0ZW50IHdpdGggdGhlIGZ1bGwgZnJlZWRvbSBvZiB1c2Ugc3BlY2lmaWVkIGluIHRoaXMgbGljZW5zZS4KKworICBNb3N0IEdOVSBzb2Z0d2FyZSwgaW5jbHVkaW5nIHNvbWUgbGlicmFyaWVzLCBpcyBjb3ZlcmVkIGJ5IHRoZQorb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGxpY2Vuc2UsIHRoZSBHTlUgTGVzc2VyCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIGNlcnRhaW4gZGVzaWduYXRlZCBsaWJyYXJpZXMsIGFuZAoraXMgcXVpdGUgZGlmZmVyZW50IGZyb20gdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBXZSB1c2UKK3RoaXMgbGljZW5zZSBmb3IgY2VydGFpbiBsaWJyYXJpZXMgaW4gb3JkZXIgdG8gcGVybWl0IGxpbmtpbmcgdGhvc2UKK2xpYnJhcmllcyBpbnRvIG5vbi1mcmVlIHByb2dyYW1zLgorCisgIFdoZW4gYSBwcm9ncmFtIGlzIGxpbmtlZCB3aXRoIGEgbGlicmFyeSwgd2hldGhlciBzdGF0aWNhbGx5IG9yIHVzaW5nCithIHNoYXJlZCBsaWJyYXJ5LCB0aGUgY29tYmluYXRpb24gb2YgdGhlIHR3byBpcyBsZWdhbGx5IHNwZWFraW5nIGEKK2NvbWJpbmVkIHdvcmssIGEgZGVyaXZhdGl2ZSBvZiB0aGUgb3JpZ2luYWwgbGlicmFyeS4gIFRoZSBvcmRpbmFyeQorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB0aGVyZWZvcmUgcGVybWl0cyBzdWNoIGxpbmtpbmcgb25seSBpZiB0aGUKK2VudGlyZSBjb21iaW5hdGlvbiBmaXRzIGl0cyBjcml0ZXJpYSBvZiBmcmVlZG9tLiAgVGhlIExlc3NlciBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSBwZXJtaXRzIG1vcmUgbGF4IGNyaXRlcmlhIGZvciBsaW5raW5nIG90aGVyIGNvZGUgd2l0aAordGhlIGxpYnJhcnkuCisKKyAgV2UgY2FsbCB0aGlzIGxpY2Vuc2UgdGhlICJMZXNzZXIiIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYmVjYXVzZSBpdAorZG9lcyBMZXNzIHRvIHByb3RlY3QgdGhlIHVzZXIncyBmcmVlZG9tIHRoYW4gdGhlIG9yZGluYXJ5IEdlbmVyYWwKK1B1YmxpYyBMaWNlbnNlLiAgSXQgYWxzbyBwcm92aWRlcyBvdGhlciBmcmVlIHNvZnR3YXJlIGRldmVsb3BlcnMgTGVzcworb2YgYW4gYWR2YW50YWdlIG92ZXIgY29tcGV0aW5nIG5vbi1mcmVlIHByb2dyYW1zLiAgVGhlc2UgZGlzYWR2YW50YWdlcworYXJlIHRoZSByZWFzb24gd2UgdXNlIHRoZSBvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtYW55CitsaWJyYXJpZXMuICBIb3dldmVyLCB0aGUgTGVzc2VyIGxpY2Vuc2UgcHJvdmlkZXMgYWR2YW50YWdlcyBpbiBjZXJ0YWluCitzcGVjaWFsIGNpcmN1bXN0YW5jZXMuCisKKyAgRm9yIGV4YW1wbGUsIG9uIHJhcmUgb2NjYXNpb25zLCB0aGVyZSBtYXkgYmUgYSBzcGVjaWFsIG5lZWQgdG8KK2VuY291cmFnZSB0aGUgd2lkZXN0IHBvc3NpYmxlIHVzZSBvZiBhIGNlcnRhaW4gbGlicmFyeSwgc28gdGhhdCBpdAorYmVjb21lcyBhIGRlLWZhY3RvIHN0YW5kYXJkLiAgVG8gYWNoaWV2ZSB0aGlzLCBub24tZnJlZSBwcm9ncmFtcyBtdXN0CitiZSBhbGxvd2VkIHRvIHVzZSB0aGUgbGlicmFyeS4gIEEgbW9yZSBmcmVxdWVudCBjYXNlIGlzIHRoYXQgYSBmcmVlCitsaWJyYXJ5IGRvZXMgdGhlIHNhbWUgam9iIGFzIHdpZGVseSB1c2VkIG5vbi1mcmVlIGxpYnJhcmllcy4gIEluIHRoaXMKK2Nhc2UsIHRoZXJlIGlzIGxpdHRsZSB0byBnYWluIGJ5IGxpbWl0aW5nIHRoZSBmcmVlIGxpYnJhcnkgdG8gZnJlZQorc29mdHdhcmUgb25seSwgc28gd2UgdXNlIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKworICBJbiBvdGhlciBjYXNlcywgcGVybWlzc2lvbiB0byB1c2UgYSBwYXJ0aWN1bGFyIGxpYnJhcnkgaW4gbm9uLWZyZWUKK3Byb2dyYW1zIGVuYWJsZXMgYSBncmVhdGVyIG51bWJlciBvZiBwZW9wbGUgdG8gdXNlIGEgbGFyZ2UgYm9keSBvZgorZnJlZSBzb2Z0d2FyZS4gIEZvciBleGFtcGxlLCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgR05VIEMgTGlicmFyeSBpbgorbm9uLWZyZWUgcHJvZ3JhbXMgZW5hYmxlcyBtYW55IG1vcmUgcGVvcGxlIHRvIHVzZSB0aGUgd2hvbGUgR05VCitvcGVyYXRpbmcgc3lzdGVtLCBhcyB3ZWxsIGFzIGl0cyB2YXJpYW50LCB0aGUgR05VL0xpbnV4IG9wZXJhdGluZworc3lzdGVtLgorCisgIEFsdGhvdWdoIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBMZXNzIHByb3RlY3RpdmUgb2YgdGhlCit1c2VycycgZnJlZWRvbSwgaXQgZG9lcyBlbnN1cmUgdGhhdCB0aGUgdXNlciBvZiBhIHByb2dyYW0gdGhhdCBpcworbGlua2VkIHdpdGggdGhlIExpYnJhcnkgaGFzIHRoZSBmcmVlZG9tIGFuZCB0aGUgd2hlcmV3aXRoYWwgdG8gcnVuCit0aGF0IHByb2dyYW0gdXNpbmcgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBMaWJyYXJ5LgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LiAgUGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEKKyJ3b3JrIGJhc2VkIG9uIHRoZSBsaWJyYXJ5IiBhbmQgYSAid29yayB0aGF0IHVzZXMgdGhlIGxpYnJhcnkiLiAgVGhlCitmb3JtZXIgY29udGFpbnMgY29kZSBkZXJpdmVkIGZyb20gdGhlIGxpYnJhcnksIHdoZXJlYXMgdGhlIGxhdHRlciBtdXN0CitiZSBjb21iaW5lZCB3aXRoIHRoZSBsaWJyYXJ5IGluIG9yZGVyIHRvIHJ1bi4KKwwKKyAgICAgICAgICAgICAgICAgIEdOVSBMRVNTRVIgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMC4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCBhcHBsaWVzIHRvIGFueSBzb2Z0d2FyZSBsaWJyYXJ5IG9yIG90aGVyCitwcm9ncmFtIHdoaWNoIGNvbnRhaW5zIGEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBvcgorb3RoZXIgYXV0aG9yaXplZCBwYXJ0eSBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZgordGhpcyBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoYWxzbyBjYWxsZWQgInRoaXMgTGljZW5zZSIpLgorRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKKyAgQSAibGlicmFyeSIgbWVhbnMgYSBjb2xsZWN0aW9uIG9mIHNvZnR3YXJlIGZ1bmN0aW9ucyBhbmQvb3IgZGF0YQorcHJlcGFyZWQgc28gYXMgdG8gYmUgY29udmVuaWVudGx5IGxpbmtlZCB3aXRoIGFwcGxpY2F0aW9uIHByb2dyYW1zCisod2hpY2ggdXNlIHNvbWUgb2YgdGhvc2UgZnVuY3Rpb25zIGFuZCBkYXRhKSB0byBmb3JtIGV4ZWN1dGFibGVzLgorCisgIFRoZSAiTGlicmFyeSIsIGJlbG93LCByZWZlcnMgdG8gYW55IHN1Y2ggc29mdHdhcmUgbGlicmFyeSBvciB3b3JrCit3aGljaCBoYXMgYmVlbiBkaXN0cmlidXRlZCB1bmRlciB0aGVzZSB0ZXJtcy4gIEEgIndvcmsgYmFzZWQgb24gdGhlCitMaWJyYXJ5IiBtZWFucyBlaXRoZXIgdGhlIExpYnJhcnkgb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlcgorY29weXJpZ2h0IGxhdzogdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBMaWJyYXJ5IG9yIGEKK3BvcnRpb24gb2YgaXQsIGVpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQKK3N0cmFpZ2h0Zm9yd2FyZGx5IGludG8gYW5vdGhlciBsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMKK2luY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbiB0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pCisKKyAgIlNvdXJjZSBjb2RlIiBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGEgbGlicmFyeSwgY29tcGxldGUgc291cmNlIGNvZGUgbWVhbnMKK2FsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkCitpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wKK2NvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGxpYnJhcnkuCisKKyAgQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKK3J1bm5pbmcgYSBwcm9ncmFtIHVzaW5nIHRoZSBMaWJyYXJ5IGlzIG5vdCByZXN0cmljdGVkLCBhbmQgb3V0cHV0IGZyb20KK3N1Y2ggYSBwcm9ncmFtIGlzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQKK29uIHRoZSBMaWJyYXJ5IChpbmRlcGVuZGVudCBvZiB0aGUgdXNlIG9mIHRoZSBMaWJyYXJ5IGluIGEgdG9vbCBmb3IKK3dyaXRpbmcgaXQpLiAgV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBMaWJyYXJ5IGRvZXMKK2FuZCB3aGF0IHRoZSBwcm9ncmFtIHRoYXQgdXNlcyB0aGUgTGlicmFyeSBkb2VzLgorCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIExpYnJhcnkncworY29tcGxldGUgc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQKK3lvdSBjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuCithcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdAorYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkKK3dhcnJhbnR5OyBhbmQgZGlzdHJpYnV0ZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlCitMaWJyYXJ5LgorCisgIFlvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksCithbmQgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhCitmZWUuCisMCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIExpYnJhcnkgb3IgYW55IHBvcnRpb24KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFRoZSBtb2RpZmllZCB3b3JrIG11c3QgaXRzZWxmIGJlIGEgc29mdHdhcmUgbGlicmFyeS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIHRoZSBmaWxlcyBtb2RpZmllZCB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKKyAgICBjKSBZb3UgbXVzdCBjYXVzZSB0aGUgd2hvbGUgb2YgdGhlIHdvcmsgdG8gYmUgbGljZW5zZWQgYXQgbm8KKyAgICBjaGFyZ2UgdG8gYWxsIHRoaXJkIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgIGQpIElmIGEgZmFjaWxpdHkgaW4gdGhlIG1vZGlmaWVkIExpYnJhcnkgcmVmZXJzIHRvIGEgZnVuY3Rpb24gb3IgYQorICAgIHRhYmxlIG9mIGRhdGEgdG8gYmUgc3VwcGxpZWQgYnkgYW4gYXBwbGljYXRpb24gcHJvZ3JhbSB0aGF0IHVzZXMKKyAgICB0aGUgZmFjaWxpdHksIG90aGVyIHRoYW4gYXMgYW4gYXJndW1lbnQgcGFzc2VkIHdoZW4gdGhlIGZhY2lsaXR5CisgICAgaXMgaW52b2tlZCwgdGhlbiB5b3UgbXVzdCBtYWtlIGEgZ29vZCBmYWl0aCBlZmZvcnQgdG8gZW5zdXJlIHRoYXQsCisgICAgaW4gdGhlIGV2ZW50IGFuIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBseSBzdWNoIGZ1bmN0aW9uIG9yCisgICAgdGFibGUsIHRoZSBmYWNpbGl0eSBzdGlsbCBvcGVyYXRlcywgYW5kIHBlcmZvcm1zIHdoYXRldmVyIHBhcnQgb2YKKyAgICBpdHMgcHVycG9zZSByZW1haW5zIG1lYW5pbmdmdWwuCisKKyAgICAoRm9yIGV4YW1wbGUsIGEgZnVuY3Rpb24gaW4gYSBsaWJyYXJ5IHRvIGNvbXB1dGUgc3F1YXJlIHJvb3RzIGhhcworICAgIGEgcHVycG9zZSB0aGF0IGlzIGVudGlyZWx5IHdlbGwtZGVmaW5lZCBpbmRlcGVuZGVudCBvZiB0aGUKKyAgICBhcHBsaWNhdGlvbi4gIFRoZXJlZm9yZSwgU3Vic2VjdGlvbiAyZCByZXF1aXJlcyB0aGF0IGFueQorICAgIGFwcGxpY2F0aW9uLXN1cHBsaWVkIGZ1bmN0aW9uIG9yIHRhYmxlIHVzZWQgYnkgdGhpcyBmdW5jdGlvbiBtdXN0CisgICAgYmUgb3B0aW9uYWw6IGlmIHRoZSBhcHBsaWNhdGlvbiBkb2VzIG5vdCBzdXBwbHkgaXQsIHRoZSBzcXVhcmUKKyAgICByb290IGZ1bmN0aW9uIG11c3Qgc3RpbGwgY29tcHV0ZSBzcXVhcmUgcm9vdHMuKQorCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBMaWJyYXJ5LAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIExpYnJhcnksIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlCitpdC4KKworVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0Cit5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgTGlicmFyeS4KKworSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgTGlicmFyeQord2l0aCB0aGUgTGlicmFyeSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkpIG9uIGEgdm9sdW1lIG9mCithIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcgordGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICAzLiBZb3UgbWF5IG9wdCB0byBhcHBseSB0aGUgdGVybXMgb2YgdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZSB0byBhIGdpdmVuIGNvcHkgb2YgdGhlIExpYnJhcnkuICBUbyBkbwordGhpcywgeW91IG11c3QgYWx0ZXIgYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlLCBzbwordGhhdCB0aGV5IHJlZmVyIHRvIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLAoraW5zdGVhZCBvZiB0byB0aGlzIExpY2Vuc2UuICAoSWYgYSBuZXdlciB2ZXJzaW9uIHRoYW4gdmVyc2lvbiAyIG9mIHRoZQorb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaGFzIGFwcGVhcmVkLCB0aGVuIHlvdSBjYW4gc3BlY2lmeQordGhhdCB2ZXJzaW9uIGluc3RlYWQgaWYgeW91IHdpc2guKSAgRG8gbm90IG1ha2UgYW55IG90aGVyIGNoYW5nZSBpbgordGhlc2Ugbm90aWNlcy4KKwwKKyAgT25jZSB0aGlzIGNoYW5nZSBpcyBtYWRlIGluIGEgZ2l2ZW4gY29weSwgaXQgaXMgaXJyZXZlcnNpYmxlIGZvcgordGhhdCBjb3B5LCBzbyB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBhbGwKK3N1YnNlcXVlbnQgY29waWVzIGFuZCBkZXJpdmF0aXZlIHdvcmtzIG1hZGUgZnJvbSB0aGF0IGNvcHkuCisKKyAgVGhpcyBvcHRpb24gaXMgdXNlZnVsIHdoZW4geW91IHdpc2ggdG8gY29weSBwYXJ0IG9mIHRoZSBjb2RlIG9mCit0aGUgTGlicmFyeSBpbnRvIGEgcHJvZ3JhbSB0aGF0IGlzIG5vdCBhIGxpYnJhcnkuCisKKyAgNC4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhIHBvcnRpb24gb3IKK2Rlcml2YXRpdmUgb2YgaXQsIHVuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtCit1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhY2NvbXBhbnkKK2l0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSwgd2hpY2gKK211c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYQorbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLgorCisgIElmIGRpc3RyaWJ1dGlvbiBvZiBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5Citmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZQorc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBzYXRpc2ZpZXMgdGhlIHJlcXVpcmVtZW50IHRvCitkaXN0cmlidXRlIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Citjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorCisgIDUuIEEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIG5vIGRlcml2YXRpdmUgb2YgYW55IHBvcnRpb24gb2YgdGhlCitMaWJyYXJ5LCBidXQgaXMgZGVzaWduZWQgdG8gd29yayB3aXRoIHRoZSBMaWJyYXJ5IGJ5IGJlaW5nIGNvbXBpbGVkIG9yCitsaW5rZWQgd2l0aCBpdCwgaXMgY2FsbGVkIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5Ii4gIFN1Y2ggYQord29yaywgaW4gaXNvbGF0aW9uLCBpcyBub3QgYSBkZXJpdmF0aXZlIHdvcmsgb2YgdGhlIExpYnJhcnksIGFuZAordGhlcmVmb3JlIGZhbGxzIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICBIb3dldmVyLCBsaW5raW5nIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB3aXRoIHRoZSBMaWJyYXJ5CitjcmVhdGVzIGFuIGV4ZWN1dGFibGUgdGhhdCBpcyBhIGRlcml2YXRpdmUgb2YgdGhlIExpYnJhcnkgKGJlY2F1c2UgaXQKK2NvbnRhaW5zIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5KSwgcmF0aGVyIHRoYW4gYSAid29yayB0aGF0IHVzZXMgdGhlCitsaWJyYXJ5Ii4gIFRoZSBleGVjdXRhYmxlIGlzIHRoZXJlZm9yZSBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZS4KK1NlY3Rpb24gNiBzdGF0ZXMgdGVybXMgZm9yIGRpc3RyaWJ1dGlvbiBvZiBzdWNoIGV4ZWN1dGFibGVzLgorCisgIFdoZW4gYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHVzZXMgbWF0ZXJpYWwgZnJvbSBhIGhlYWRlciBmaWxlCit0aGF0IGlzIHBhcnQgb2YgdGhlIExpYnJhcnksIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgbWF5IGJlIGEKK2Rlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSBldmVuIHRob3VnaCB0aGUgc291cmNlIGNvZGUgaXMgbm90LgorV2hldGhlciB0aGlzIGlzIHRydWUgaXMgZXNwZWNpYWxseSBzaWduaWZpY2FudCBpZiB0aGUgd29yayBjYW4gYmUKK2xpbmtlZCB3aXRob3V0IHRoZSBMaWJyYXJ5LCBvciBpZiB0aGUgd29yayBpcyBpdHNlbGYgYSBsaWJyYXJ5LiAgVGhlCit0aHJlc2hvbGQgZm9yIHRoaXMgdG8gYmUgdHJ1ZSBpcyBub3QgcHJlY2lzZWx5IGRlZmluZWQgYnkgbGF3LgorCisgIElmIHN1Y2ggYW4gb2JqZWN0IGZpbGUgdXNlcyBvbmx5IG51bWVyaWNhbCBwYXJhbWV0ZXJzLCBkYXRhCitzdHJ1Y3R1cmUgbGF5b3V0cyBhbmQgYWNjZXNzb3JzLCBhbmQgc21hbGwgbWFjcm9zIGFuZCBzbWFsbCBpbmxpbmUKK2Z1bmN0aW9ucyAodGVuIGxpbmVzIG9yIGxlc3MgaW4gbGVuZ3RoKSwgdGhlbiB0aGUgdXNlIG9mIHRoZSBvYmplY3QKK2ZpbGUgaXMgdW5yZXN0cmljdGVkLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgaXMgbGVnYWxseSBhIGRlcml2YXRpdmUKK3dvcmsuICAoRXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGlzIG9iamVjdCBjb2RlIHBsdXMgcG9ydGlvbnMgb2YgdGhlCitMaWJyYXJ5IHdpbGwgc3RpbGwgZmFsbCB1bmRlciBTZWN0aW9uIDYuKQorCisgIE90aGVyd2lzZSwgaWYgdGhlIHdvcmsgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5LCB5b3UgbWF5CitkaXN0cmlidXRlIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gNi4KK0FueSBleGVjdXRhYmxlcyBjb250YWluaW5nIHRoYXQgd29yayBhbHNvIGZhbGwgdW5kZXIgU2VjdGlvbiA2LAord2hldGhlciBvciBub3QgdGhleSBhcmUgbGlua2VkIGRpcmVjdGx5IHdpdGggdGhlIExpYnJhcnkgaXRzZWxmLgorDAorICA2LiBBcyBhbiBleGNlcHRpb24gdG8gdGhlIFNlY3Rpb25zIGFib3ZlLCB5b3UgbWF5IGFsc28gY29tYmluZSBvcgorbGluayBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgd2l0aCB0aGUgTGlicmFyeSB0byBwcm9kdWNlIGEKK3dvcmsgY29udGFpbmluZyBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeSwgYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCit1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgcHJvdmlkZWQgdGhhdCB0aGUgdGVybXMgcGVybWl0Cittb2RpZmljYXRpb24gb2YgdGhlIHdvcmsgZm9yIHRoZSBjdXN0b21lcidzIG93biB1c2UgYW5kIHJldmVyc2UKK2VuZ2luZWVyaW5nIGZvciBkZWJ1Z2dpbmcgc3VjaCBtb2RpZmljYXRpb25zLgorCisgIFlvdSBtdXN0IGdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIGVhY2ggY29weSBvZiB0aGUgd29yayB0aGF0IHRoZQorTGlicmFyeSBpcyB1c2VkIGluIGl0IGFuZCB0aGF0IHRoZSBMaWJyYXJ5IGFuZCBpdHMgdXNlIGFyZSBjb3ZlcmVkIGJ5Cit0aGlzIExpY2Vuc2UuICBZb3UgbXVzdCBzdXBwbHkgYSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gIElmIHRoZSB3b3JrCitkdXJpbmcgZXhlY3V0aW9uIGRpc3BsYXlzIGNvcHlyaWdodCBub3RpY2VzLCB5b3UgbXVzdCBpbmNsdWRlIHRoZQorY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIExpYnJhcnkgYW1vbmcgdGhlbSwgYXMgd2VsbCBhcyBhIHJlZmVyZW5jZQorZGlyZWN0aW5nIHRoZSB1c2VyIHRvIHRoZSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gIEFsc28sIHlvdSBtdXN0IGRvIG9uZQorb2YgdGhlc2UgdGhpbmdzOgorCisgICAgYSkgQWNjb21wYW55IHRoZSB3b3JrIHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcKKyAgICBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlIGZvciB0aGUgTGlicmFyeSBpbmNsdWRpbmcgd2hhdGV2ZXIKKyAgICBjaGFuZ2VzIHdlcmUgdXNlZCBpbiB0aGUgd29yayAod2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlcgorICAgIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUpOyBhbmQsIGlmIHRoZSB3b3JrIGlzIGFuIGV4ZWN1dGFibGUgbGlua2VkCisgICAgd2l0aCB0aGUgTGlicmFyeSwgd2l0aCB0aGUgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSAid29yayB0aGF0CisgICAgdXNlcyB0aGUgTGlicmFyeSIsIGFzIG9iamVjdCBjb2RlIGFuZC9vciBzb3VyY2UgY29kZSwgc28gdGhhdCB0aGUKKyAgICB1c2VyIGNhbiBtb2RpZnkgdGhlIExpYnJhcnkgYW5kIHRoZW4gcmVsaW5rIHRvIHByb2R1Y2UgYSBtb2RpZmllZAorICAgIGV4ZWN1dGFibGUgY29udGFpbmluZyB0aGUgbW9kaWZpZWQgTGlicmFyeS4gIChJdCBpcyB1bmRlcnN0b29kCisgICAgdGhhdCB0aGUgdXNlciB3aG8gY2hhbmdlcyB0aGUgY29udGVudHMgb2YgZGVmaW5pdGlvbnMgZmlsZXMgaW4gdGhlCisgICAgTGlicmFyeSB3aWxsIG5vdCBuZWNlc3NhcmlseSBiZSBhYmxlIHRvIHJlY29tcGlsZSB0aGUgYXBwbGljYXRpb24KKyAgICB0byB1c2UgdGhlIG1vZGlmaWVkIGRlZmluaXRpb25zLikKKworICAgIGIpIFVzZSBhIHN1aXRhYmxlIHNoYXJlZCBsaWJyYXJ5IG1lY2hhbmlzbSBmb3IgbGlua2luZyB3aXRoIHRoZQorICAgIExpYnJhcnkuICBBIHN1aXRhYmxlIG1lY2hhbmlzbSBpcyBvbmUgdGhhdCAoMSkgdXNlcyBhdCBydW4gdGltZSBhCisgICAgY29weSBvZiB0aGUgbGlicmFyeSBhbHJlYWR5IHByZXNlbnQgb24gdGhlIHVzZXIncyBjb21wdXRlciBzeXN0ZW0sCisgICAgcmF0aGVyIHRoYW4gY29weWluZyBsaWJyYXJ5IGZ1bmN0aW9ucyBpbnRvIHRoZSBleGVjdXRhYmxlLCBhbmQgKDIpCisgICAgd2lsbCBvcGVyYXRlIHByb3Blcmx5IHdpdGggYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCBpZgorICAgIHRoZSB1c2VyIGluc3RhbGxzIG9uZSwgYXMgbG9uZyBhcyB0aGUgbW9kaWZpZWQgdmVyc2lvbiBpcworICAgIGludGVyZmFjZS1jb21wYXRpYmxlIHdpdGggdGhlIHZlcnNpb24gdGhhdCB0aGUgd29yayB3YXMgbWFkZSB3aXRoLgorCisgICAgYykgQWNjb21wYW55IHRoZSB3b3JrIHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QKKyAgICB0aHJlZSB5ZWFycywgdG8gZ2l2ZSB0aGUgc2FtZSB1c2VyIHRoZSBtYXRlcmlhbHMgc3BlY2lmaWVkIGluCisgICAgU3Vic2VjdGlvbiA2YSwgYWJvdmUsIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4gdGhlIGNvc3Qgb2YKKyAgICBwZXJmb3JtaW5nIHRoaXMgZGlzdHJpYnV0aW9uLgorCisgICAgZCkgSWYgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkKKyAgICBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgb2ZmZXIgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUgYWJvdmUKKyAgICBzcGVjaWZpZWQgbWF0ZXJpYWxzIGZyb20gdGhlIHNhbWUgcGxhY2UuCisKKyAgICBlKSBWZXJpZnkgdGhhdCB0aGUgdXNlciBoYXMgYWxyZWFkeSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlc2UKKyAgICBtYXRlcmlhbHMgb3IgdGhhdCB5b3UgaGF2ZSBhbHJlYWR5IHNlbnQgdGhpcyB1c2VyIGEgY29weS4KKworICBGb3IgYW4gZXhlY3V0YWJsZSwgdGhlIHJlcXVpcmVkIGZvcm0gb2YgdGhlICJ3b3JrIHRoYXQgdXNlcyB0aGUKK0xpYnJhcnkiIG11c3QgaW5jbHVkZSBhbnkgZGF0YSBhbmQgdXRpbGl0eSBwcm9ncmFtcyBuZWVkZWQgZm9yCityZXByb2R1Y2luZyB0aGUgZXhlY3V0YWJsZSBmcm9tIGl0LiAgSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwKK3RoZSBtYXRlcmlhbHMgdG8gYmUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IGlzCitub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkgZm9ybSkgd2l0aCB0aGUgbWFqb3IKK2NvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gb24KK3doaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudCBpdHNlbGYgYWNjb21wYW5pZXMKK3RoZSBleGVjdXRhYmxlLgorCisgIEl0IG1heSBoYXBwZW4gdGhhdCB0aGlzIHJlcXVpcmVtZW50IGNvbnRyYWRpY3RzIHRoZSBsaWNlbnNlCityZXN0cmljdGlvbnMgb2Ygb3RoZXIgcHJvcHJpZXRhcnkgbGlicmFyaWVzIHRoYXQgZG8gbm90IG5vcm1hbGx5CithY2NvbXBhbnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0uICBTdWNoIGEgY29udHJhZGljdGlvbiBtZWFucyB5b3UgY2Fubm90Cit1c2UgYm90aCB0aGVtIGFuZCB0aGUgTGlicmFyeSB0b2dldGhlciBpbiBhbiBleGVjdXRhYmxlIHRoYXQgeW91CitkaXN0cmlidXRlLgorDAorICA3LiBZb3UgbWF5IHBsYWNlIGxpYnJhcnkgZmFjaWxpdGllcyB0aGF0IGFyZSBhIHdvcmsgYmFzZWQgb24gdGhlCitMaWJyYXJ5IHNpZGUtYnktc2lkZSBpbiBhIHNpbmdsZSBsaWJyYXJ5IHRvZ2V0aGVyIHdpdGggb3RoZXIgbGlicmFyeQorZmFjaWxpdGllcyBub3QgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHN1Y2ggYSBjb21iaW5lZAorbGlicmFyeSwgcHJvdmlkZWQgdGhhdCB0aGUgc2VwYXJhdGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGJhc2VkIG9uCit0aGUgTGlicmFyeSBhbmQgb2YgdGhlIG90aGVyIGxpYnJhcnkgZmFjaWxpdGllcyBpcyBvdGhlcndpc2UKK3Blcm1pdHRlZCwgYW5kIHByb3ZpZGVkIHRoYXQgeW91IGRvIHRoZXNlIHR3byB0aGluZ3M6CisKKyAgICBhKSBBY2NvbXBhbnkgdGhlIGNvbWJpbmVkIGxpYnJhcnkgd2l0aCBhIGNvcHkgb2YgdGhlIHNhbWUgd29yaworICAgIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCB1bmNvbWJpbmVkIHdpdGggYW55IG90aGVyIGxpYnJhcnkKKyAgICBmYWNpbGl0aWVzLiAgVGhpcyBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAgICBTZWN0aW9ucyBhYm92ZS4KKworICAgIGIpIEdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIHRoZSBjb21iaW5lZCBsaWJyYXJ5IG9mIHRoZSBmYWN0CisgICAgdGhhdCBwYXJ0IG9mIGl0IGlzIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGV4cGxhaW5pbmcKKyAgICB3aGVyZSB0byBmaW5kIHRoZSBhY2NvbXBhbnlpbmcgdW5jb21iaW5lZCBmb3JtIG9mIHRoZSBzYW1lIHdvcmsuCisKKyAgOC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBsaW5rIHdpdGgsIG9yIGRpc3RyaWJ1dGUKK3RoZSBMaWJyYXJ5IGV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55CithdHRlbXB0IG90aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGxpbmsgd2l0aCwgb3IKK2Rpc3RyaWJ1dGUgdGhlIExpYnJhcnkgaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91cgorcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLAorb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlciB0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcwordGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2ggcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisgIDkuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKK2Rpc3RyaWJ1dGUgdGhlIExpYnJhcnkgb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgTGlicmFyeSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitMaWJyYXJ5KSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwordGhlIExpYnJhcnkgb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKyAgMTAuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK0xpYnJhcnkpLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlLCBsaW5rIHdpdGggb3IgbW9kaWZ5IHRoZSBMaWJyYXJ5CitzdWJqZWN0IHRvIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCityZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCitZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB3aXRoCit0aGlzIExpY2Vuc2UuCisMCisgIDExLiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CitpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIExpYnJhcnkgYnkKK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgordGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgTGlicmFyeS4KKworSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCithbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCithcHBseSwgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKK2NpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMTIuIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgTGlicmFyeSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgTGlicmFyeSB1bmRlciB0aGlzIExpY2Vuc2UKK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZyB0aG9zZQorY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZworY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCit0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICAxMy4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcKK3ZlcnNpb25zIG9mIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4KK1N1Y2ggbmV3IHZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwKK2J1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKworRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgTGlicmFyeQorc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kCisiYW55IGxhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kCitjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIExpYnJhcnkgZG9lcyBub3Qgc3BlY2lmeSBhCitsaWNlbnNlIHZlcnNpb24gbnVtYmVyLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKwwKKyAgMTQuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBMaWJyYXJ5IGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGluY29tcGF0aWJsZSB3aXRoIHRoZXNlLAord3JpdGUgdG8gdGhlIGF1dGhvciB0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMKK2NvcHlyaWdodGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMgbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyCitkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzIG9mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzCitvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kIG9mIHByb21vdGluZyB0aGUgc2hhcmluZworYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5PIFdBUlJBTlRZCisKKyAgMTUuIEJFQ0FVU0UgVEhFIExJQlJBUlkgSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PCitXQVJSQU5UWSBGT1IgVEhFIExJQlJBUlksIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLgorRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IKK09USEVSIFBBUlRJRVMgUFJPVklERSBUSEUgTElCUkFSWSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCitLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFCitMSUJSQVJZIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRSBMSUJSQVJZIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRQorVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDE2LiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOCitXUklUSU5HIFdJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWQorQU5EL09SIFJFRElTVFJJQlVURSBUSEUgTElCUkFSWSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UKK0ZPUiBEQU1BR0VTLCBJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IKK0NPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFCitMSUJSQVJZIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HCitSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkgWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQQorRkFJTFVSRSBPRiBUSEUgTElCUkFSWSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFNPRlRXQVJFKSwgRVZFTiBJRgorU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorREFNQUdFUy4KKworICAgICAgICAgICAgICAgICAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisMCisgICAgICAgICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBMaWJyYXJpZXMKKworICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBsaWJyYXJ5LCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0Citwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgd2UgcmVjb21tZW5kIG1ha2luZyBpdCBmcmVlIHNvZnR3YXJlIHRoYXQKK2V2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZS4gIFlvdSBjYW4gZG8gc28gYnkgcGVybWl0dGluZworcmVkaXN0cmlidXRpb24gdW5kZXIgdGhlc2UgdGVybXMgKG9yLCBhbHRlcm5hdGl2ZWx5LCB1bmRlciB0aGUgdGVybXMKK29mIHRoZSBvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlKS4KKworICBUbyBhcHBseSB0aGVzZSB0ZXJtcywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgbGlicmFyeS4KK0l0IGlzIHNhZmVzdCB0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0CitlZmZlY3RpdmVseSBjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQKK2hhdmUgYXQgbGVhc3QgdGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbAorbm90aWNlIGlzIGZvdW5kLgorCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgbGlicmFyeSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IKK3lvdXIgc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgbGlicmFyeSwKK2lmIG5lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZQorICBsaWJyYXJ5IGBGcm9iJyAoYSBsaWJyYXJ5IGZvciB0d2Vha2luZyBrbm9icykgd3JpdHRlbiBieSBKYW1lcworICBSYW5kb20gSGFja2VyLgorCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk5MAorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGF0J3MgYWxsIHRoZXJlIGlzIHRvIGl0IQorCisKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9NYWtlZmlsZS5hbSBiL2F2YWhpLTAuNi4zMS9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjM0ZDY5Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMjQzIEBACisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorIworIyBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworIyBVU0EuCisKK0FDTE9DQUxfQU1GTEFHUyA9IC1JIGNvbW1vbgorCitpbmNsdWRlICQoc3JjZGlyKS9jb21tb24vZG94eWdlbi5taworCitFWFRSQV9ESVNUID0gXAorCWF1dG9nZW4uc2ggXAorCWJvb3RzdHJhcC5zaCBcCisJTElDRU5TRSBcCisJJChEWF9DT05GSUcpIFwKKwlkb2NzL0lOU1RBTEwgXAorCWRvY3MvVE9ETyBcCisJZG9jcy9ORVdTIFwKKwlkb2NzL1JFQURNRSBcCisJZG9jcy9EQlVTLUFQSSBcCisJZG9jcy9BVVRIT1JTIFwKKwlkb2NzL0hBQ0tJTkcgXAorCWRvY3MvQVBJLUNIQU5HRVMtMC42IFwKKwlkb2NzL0NPTVBBVC1MQVlFUlMgXAorCWRvY3MvTUFMTE9DIFwKKwlkb2NzL292ZXJ2aWV3LmRpYSBcCisJZG9jcy9zZXJ2ZXItc3RhdGVzLmRpYSBcCisJZG9jcy9hdmFoaS1wb2xsLmRpYSBcCisJYXZhaGktY29yZS5wYy5pbiBcCisJYXZhaGktY2xpZW50LnBjLmluIFwKKwlhdmFoaS1nbGliLnBjLmluIFwKKwlhdmFoaS1nb2JqZWN0LnBjLmluIFwKKwlhdmFoaS1xdDMucGMuaW4gXAorCWF2YWhpLXF0NC5wYy5pbiBcCisJYXZhaGktc2hhcnAucGMuaW4gXAorCWF2YWhpLXVpLXNoYXJwLnBjLmluIFwKKwlhdmFoaS1jb21wYXQtbGliZG5zX3NkLnBjLmluIFwKKwlhdmFoaS1jb21wYXQtaG93bC5wYy5pbiBcCisJYXZhaGktdWkucGMuaW4gXAorCWF2YWhpLXVpLWd0azMucGMuaW4gXAorCWRveHlnZW5fdG9fZGV2aGVscC54c2wgXAorICAgICAgICBjb21tb24vaW50cm9zcGVjdGlvbi5tNAorCitTVUJESVJTID0gXAorCWNvbW1vbiBcCisJYXZhaGktY29tbW9uIFwKKwlhdmFoaS1jb3JlIFwKKwlhdmFoaS1xdCBcCisJYXZhaGktY2xpZW50IFwKKwlhdmFoaS1nbGliIFwKKwlhdmFoaS1nb2JqZWN0IFwKKwlhdmFoaS1kaXNjb3Zlci1zdGFuZGFsb25lIFwKKwlhdmFoaS1kYWVtb24gXAorCWF2YWhpLXNoYXJwIFwKKwlpbml0c2NyaXB0IFwKKwlhdmFoaS1kbnNjb25mZCBcCisJYXZhaGktdXRpbHMgXAorCWF2YWhpLXB5dGhvbiBcCisJZXhhbXBsZXMgXAorCW1hbiBcCisJdGVzdHMgXAorCXNlcnZpY2UtdHlwZS1kYXRhYmFzZSBcCisJYXZhaGktY29tcGF0LWxpYmRuc19zZCBcCisJYXZhaGktY29tcGF0LWhvd2wgXAorCWF2YWhpLWF1dG9pcGQgXAorCWF2YWhpLXVpIFwKKwlhdmFoaS11aS1zaGFycCBcCisJcG8KKworRFhfSU5QVVQgPSBcCisJJChzcmNkaXIpL2F2YWhpLWNvbW1vbi9hZGRyZXNzLmggXAorCSQoc3JjZGlyKS9hdmFoaS1jb21tb24vbWFsbG9jLmggXAorCSQoc3JjZGlyKS9hdmFoaS1jb21tb24vc3RybHN0LmggXAorCSQoc3JjZGlyKS9hdmFoaS1jb21tb24vYWx0ZXJuYXRpdmUuaCBcCisJJChzcmNkaXIpL2F2YWhpLWNvbW1vbi9kZWZzLmggXAorCSQoc3JjZGlyKS9hdmFoaS1jb21tb24vZXJyb3IuaCBcCisJJChzcmNkaXIpL2F2YWhpLWNvbW1vbi9kb21haW4uaCBcCisJJChzcmNkaXIpL2F2YWhpLWNvbW1vbi93YXRjaC5oIFwKKwkkKHNyY2RpcikvYXZhaGktY29tbW9uL3NpbXBsZS13YXRjaC5oIFwKKwkkKHNyY2RpcikvYXZhaGktY29tbW9uL3RocmVhZC13YXRjaC5oCisKK0RYX0VYQU1QTEVfUEFUSCA9ICQoc3JjZGlyKS9leGFtcGxlcworRFhfRVhBTVBMRV9QQVRURVJOUyA9ICouYworCitpZiBIQVZFX1FUMworRFhfSU5QVVQgKz0gXAorCSQoc3JjZGlyKS9hdmFoaS1xdC9xdC13YXRjaC5oCitlbHNlCitpZiBIQVZFX1FUNAorRFhfSU5QVVQgKz0gXAorCSQoc3JjZGlyKS9hdmFoaS1xdC9xdC13YXRjaC5oCitlbmRpZgorZW5kaWYKKworaWYgSEFWRV9HTElCCitEWF9JTlBVVCArPSBcCisJJChzcmNkaXIpL2F2YWhpLWdsaWIvZ2xpYi13YXRjaC5oIFwKKwkkKHNyY2RpcikvYXZhaGktZ2xpYi9nbGliLW1hbGxvYy5oCisKK2lmIEhBVkVfR09CSkVDVAoraWYgSEFWRV9EQlVTCitEWF9JTlBVVCArPSBcCisJJChzcmNkaXIpL2F2YWhpLWdvYmplY3QvZ2EtY2xpZW50LmggXAorCSQoc3JjZGlyKS9hdmFoaS1nb2JqZWN0L2dhLWVudHJ5LWdyb3VwLmggXAorCSQoc3JjZGlyKS9hdmFoaS1nb2JqZWN0L2dhLWVudW1zLmggXAorCSQoc3JjZGlyKS9hdmFoaS1nb2JqZWN0L2dhLWVycm9yLmggXAorCSQoc3JjZGlyKS9hdmFoaS1nb2JqZWN0L2dhLXJlY29yZC1icm93c2VyLmggXAorCSQoc3JjZGlyKS9hdmFoaS1nb2JqZWN0L2dhLXNlcnZpY2UtYnJvd3Nlci5oIFwKKwkkKHNyY2RpcikvYXZhaGktZ29iamVjdC9nYS1zZXJ2aWNlLXJlc29sdmVyLmgKK2VuZGlmCitlbmRpZgorZW5kaWYKKworaWYgSEFWRV9EQlVTCitEWF9JTlBVVCArPSBcCisJJChzcmNkaXIpL2F2YWhpLWNsaWVudC9jbGllbnQuaCBcCisJJChzcmNkaXIpL2F2YWhpLWNsaWVudC9sb29rdXAuaCBcCisJJChzcmNkaXIpL2F2YWhpLWNsaWVudC9wdWJsaXNoLmgKK2VuZGlmCisKK2lmIEhBVkVfREJVUworaWYgSEFWRV9HVEsKK0RYX0lOUFVUICs9IFwKKwkkKHNyY2RpcikvYXZhaGktdWkvYXZhaGktdWkuaAorZW5kaWYKK2VuZGlmCisKK2lmIEVOQUJMRV9DT1JFX0RPQ1MKK0RYX0lOUFVUICs9IFwKKwkkKHNyY2RpcikvYXZhaGktY29yZS9jb3JlLmggXAorCSQoc3JjZGlyKS9hdmFoaS1jb3JlL2xvb2t1cC5oIFwKKwkkKHNyY2RpcikvYXZhaGktY29yZS9wdWJsaXNoLmggXAorCSQoc3JjZGlyKS9hdmFoaS1jb3JlL3JyLmggXAorCSQoc3JjZGlyKS9hdmFoaS1jb3JlL2xvZy5oCitlbmRpZgorCitpZiBIQVZFX0dUSworRFhfSU5QVVQgKz0gXAorCSQoc3JjZGlyKS9hdmFoaS11aS9hdmFoaS11aS5oCitlbmRpZgorCitwa2djb25maWdkaXIgPSAkKGxpYmRpcikvcGtnY29uZmlnCisKKyUucGM6ICUucGMuaW4KKwkkKEFNX1ZfR0VOKXNlZCAtZSAncyxAcHJlZml4XEAsJChwcmVmaXgpLGcnIFwKKwkgICAgLWUgJ3MsQGxpYmRpclxALCQobGliZGlyKSxnJyBcCisJICAgIC1lICdzLEBIT1dMX0NPTVBBVF9WRVJTSU9OXEAsJChIT1dMX0NPTVBBVF9WRVJTSU9OKSxnJyBcCisJICAgIC1lICdzLEBQQUNLQUdFX1ZFUlNJT05cQCwkKFBBQ0tBR0VfVkVSU0lPTiksZycgJDwgPiAkQAorCitwa2djb25maWdfREFUQSA9IGF2YWhpLWNvcmUucGMKK0NMRUFORklMRVMgPSBhdmFoaS1jb3JlLnBjCisKK2lmIEhBVkVfREJVUworcGtnY29uZmlnX0RBVEEgKz0gYXZhaGktY2xpZW50LnBjCitDTEVBTkZJTEVTICs9IGF2YWhpLWNsaWVudC5wYworCitpZiBFTkFCTEVfQ09NUEFUX0hPV0wKK3BrZ2NvbmZpZ19EQVRBICs9IGF2YWhpLWNvbXBhdC1ob3dsLnBjCitDTEVBTkZJTEVTICs9IGF2YWhpLWNvbXBhdC1ob3dsLnBjCitlbmRpZgorCitpZiBFTkFCTEVfQ09NUEFUX0xJQkROU19TRAorcGtnY29uZmlnX0RBVEEgKz0gYXZhaGktY29tcGF0LWxpYmRuc19zZC5wYworQ0xFQU5GSUxFUyArPSBhdmFoaS1jb21wYXQtbGliZG5zX3NkLnBjCitlbmRpZgorCitpZiBIQVZFX01PTk8KK3BrZ2NvbmZpZ19EQVRBICs9IGF2YWhpLXNoYXJwLnBjIGF2YWhpLXVpLXNoYXJwLnBjCitDTEVBTkZJTEVTICs9IGF2YWhpLXNoYXJwLnBjIGF2YWhpLXVpLXNoYXJwLnBjCitlbmRpZgorCitlbmRpZgorCitpZiBIQVZFX0dMSUIKK3BrZ2NvbmZpZ19EQVRBICs9IGF2YWhpLWdsaWIucGMKK0NMRUFORklMRVMgKz0gYXZhaGktZ2xpYi5wYworCitpZiBIQVZFX0dPQkpFQ1QKK3BrZ2NvbmZpZ19EQVRBICs9IGF2YWhpLWdvYmplY3QucGMKK0NMRUFORklMRVMgKz0gYXZhaGktZ29iamVjdC5wYworZW5kaWYKK2VuZGlmCisKK2lmIEhBVkVfR1RLCitpZiBIQVZFX0RCVVMKK3BrZ2NvbmZpZ19EQVRBICs9IGF2YWhpLXVpLnBjCitDTEVBTkZJTEVTICs9IGF2YWhpLXVpLnBjCitlbmRpZgorZW5kaWYKKworaWYgSEFWRV9HVEszCitpZiBIQVZFX0RCVVMKK3BrZ2NvbmZpZ19EQVRBICs9IGF2YWhpLXVpLWd0azMucGMKK0NMRUFORklMRVMgKz0gYXZhaGktdWktZ3RrMy5wYworZW5kaWYKK2VuZGlmCisKK2lmIEhBVkVfUVQzCitwa2djb25maWdfREFUQSArPSBhdmFoaS1xdDMucGMKK0NMRUFORklMRVMgKz0gYXZhaGktcXQzLnBjCitlbmRpZgorCitpZiBIQVZFX1FUNAorcGtnY29uZmlnX0RBVEEgKz0gYXZhaGktcXQ0LnBjCitDTEVBTkZJTEVTICs9IGF2YWhpLXF0NC5wYworZW5kaWYKKworQ0xFQU5GSUxFUyArPSBhdmFoaS5kZXZoZWxwCisKK2F2YWhpLmRldmhlbHA6IGRveHlnZW4tcnVuCisJeHNsdHByb2MgLW8gJEAgZG94eWdlbl90b19kZXZoZWxwLnhzbCBkb3h5Z2VuL3htbC9pbmRleC54bWwKKworTU9TVExZQ0xFQU5GSUxFUyA9ICQoRFhfQ0xFQU5GSUxFUykKKworRElTVENIRUNLX0NPTkZJR1VSRV9GTEFHUyA9IFwKKwktLWRpc2FibGUtbW9ub2RvYyBcCisJLS1lbmFibGUtaW50cm9zcGVjdGlvbiBcCisJLS13aXRoLXN5c3RlbWRzeXN0ZW11bml0ZGlyPSQkZGNfaW5zdGFsbF9iYXNlLyQoc3lzdGVtZHN5c3RlbXVuaXRkaXIpCisKK2hvbWVwYWdlOgorCSQoTUFLRSkgLUMgbWFuCisJc2NwIGF2YWhpLWRhZW1vbi8qLnhtbCBhdmFoaS1kYWVtb24vaW50cm9zcGVjdC5kdGQgYXZhaGktZGFlbW9uL2ludHJvc3BlY3QueHNsXAorCSAgICBtYW4vKi54bWwgbWFuL3htbHRvbWFuLmR0ZCBtYW4veG1sdG9tYW4ueHNsIFwKKwkgICAgdGFuZ286d3d3L2F2YWhpLm9yZy90cmVlL2Rvd25sb2FkLworCXNjcCBhdmFoaS0kKFBBQ0tBR0VfVkVSU0lPTikudGFyLmd6IHRhbmdvOnd3dy9hdmFoaS5vcmcvdHJlZS9kb3dubG9hZC8KKwlybSAtcmYgZG94eWdlbgorCSQoTUFLRSkgZG94eWdlbi1ydW4KKwlzc2ggdGFuZ28gcm0gLXJmIHd3dy9hdmFoaS5vcmcvdHJlZS9kb3dubG9hZC9kb3h5Z2VuCisJc2NwIC1yIGRveHlnZW4vaHRtbCB0YW5nbzp3d3cvYXZhaGkub3JnL3RyZWUvZG93bmxvYWQvZG94eWdlbgorCitESVNUQ0xFQU5GSUxFUyA9IFwKKwlwby8uaW50bHRvb2wtbWVyZ2UtY2FjaGUKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9NYWtlZmlsZS5pbiBiL2F2YWhpLTAuNi4zMS9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGM3MWM5Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMTIyOCBAQAorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xMS4zIGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorIworIyBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworIyBVU0EuCisKKyMgQ29weXJpZ2h0IChDKSAyMDA0IE9yZW4gQmVuLUtpa2kKKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIHRoZSBBdXRvbWFrZSBtYWNybyBmaWxlcy4KKworIyBHZW5lcmF0ZSBhdXRvbWF0aWMgZG9jdW1lbnRhdGlvbiB1c2luZyBEb3h5Z2VuLiBHb2FscyBhbmQgdmFyaWFibGVzIHZhbHVlcworIyBhcmUgY29udHJvbGxlZCBieSB0aGUgdmFyaW91cyBEWF9DT05EXz8/PyBjb25kaXRpb25hbHMgc2V0IGJ5IGF1dG9jb25mLgorIworIyBUaGUgcHJvdmlkZWQgZ29hbHMgYXJlOgorIyBkb3h5Z2VuLWRvYzogR2VuZXJhdGUgYWxsIGRveHlnZW4gZG9jdW1lbnRhdGlvbi4KKyMgZG94eWdlbi1ydW46IFJ1biBkb3h5Z2VuLCB3aGljaCB3aWxsIGdlbmVyYXRlIHNvbWUgb2YgdGhlIGRvY3VtZW50YXRpb24KKyMgICAgICAgICAgICAgIChIVE1MLCBDSE0sIENISSwgTUFOLCBSVEYsIFhNTCkgYnV0IHdpbGwgbm90IGRvIHRoZSBwb3N0CisjICAgICAgICAgICAgICBwcm9jZXNzaW5nIHJlcXVpcmVkIGZvciB0aGUgcmVzdCBvZiBpdCAoUFMsIFBERiwgYW5kIHNvbWUgTUFOKS4KKyMgZG94eWdlbi1tYW46IFJlbmFtZSBzb21lIGRveHlnZW4gZ2VuZXJhdGVkIG1hbiBwYWdlcy4KKyMgZG94eWdlbi1wczogR2VuZXJhdGUgZG94eWdlbiBQb3N0U2NyaXB0IGRvY3VtZW50YXRpb24uCisjIGRveHlnZW4tcGRmOiBHZW5lcmF0ZSBkb3h5Z2VuIFBERiBkb2N1bWVudGF0aW9uLgorIworIyBOb3RlIHRoYXQgYnkgZGVmYXVsdCB0aGVzZSBhcmUgbm90IGludGVncmF0ZWQgaW50byB0aGUgYXV0b21ha2UgZ29hbHMuIElmCisjIGRveHlnZW4gaXMgdXNlZCB0byBnZW5lcmF0ZSBtYW4gcGFnZXMsIHlvdSBjYW4gYWNoaWV2ZSB0aGlzIGludGVncmF0aW9uIGJ5CisjIHNldHRpbmcgbWFuM19NQU5TIHRvIHRoZSBsaXN0IG9mIG1hbiBwYWdlcyBnZW5lcmF0ZWQgYW5kIHRoZW4gYWRkaW5nIHRoZQorIyBkZXBlbmRlbmN5OgorIworIyAgICQobWFuM19NQU5TKTogZG94eWdlbi1kb2MKKyMKKyMgVGhpcyB3aWxsIGNhdXNlIG1ha2UgdG8gcnVuIGRveHlnZW4gYW5kIGdlbmVyYXRlIGFsbCB0aGUgZG9jdW1lbnRhdGlvbi4KKyMKKyMgVGhlIGZvbGxvd2luZyB2YXJpYWJsZSBpcyBpbnRlbmRlZCBmb3IgdXNlIGluIE1ha2VmaWxlLmFtOgorIworIyBEWF9DTEVBTkZJTEVTID0gZXZlcnl0aGluZyB0byBjbGVhbi4KKyMKKyMgVGhpcyBpcyB1c3VhbGx5IGFkZGVkIHRvIE1PU1RMWUNMRUFORklMRVMuCisKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK0RJU1RfQ09NTU9OID0gUkVBRE1FICQoYW1fX2NvbmZpZ3VyZV9kZXBzKSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gXAorCSQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHNyY2RpcikvY29tbW9uL2RveHlnZW4ubWsgXAorCSQoc3JjZGlyKS9jb25maWcuaC5pbiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSBBQk9VVC1OTFMgXAorCUNoYW5nZUxvZyBjb21waWxlIGNvbmZpZy5ndWVzcyBjb25maWcucnBhdGggY29uZmlnLnN1YiBkZXBjb21wIFwKKwlpbnN0YWxsLXNoIGx0bWFpbi5zaCBtaXNzaW5nIHB5LWNvbXBpbGUKK0BIQVZFX1FUM19UUlVFQGFtX19hcHBlbmRfMSA9IFwKK0BIQVZFX1FUM19UUlVFQAkkKHNyY2RpcikvYXZhaGktcXQvcXQtd2F0Y2guaAorCitASEFWRV9RVDNfRkFMU0VAQEhBVkVfUVQ0X1RSVUVAYW1fX2FwcGVuZF8yID0gXAorQEhBVkVfUVQzX0ZBTFNFQEBIQVZFX1FUNF9UUlVFQAkkKHNyY2RpcikvYXZhaGktcXQvcXQtd2F0Y2guaAorCitASEFWRV9HTElCX1RSVUVAYW1fX2FwcGVuZF8zID0gXAorQEhBVkVfR0xJQl9UUlVFQAkkKHNyY2RpcikvYXZhaGktZ2xpYi9nbGliLXdhdGNoLmggXAorQEhBVkVfR0xJQl9UUlVFQAkkKHNyY2RpcikvYXZhaGktZ2xpYi9nbGliLW1hbGxvYy5oCisKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HTElCX1RSVUVAQEhBVkVfR09CSkVDVF9UUlVFQGFtX19hcHBlbmRfNCA9IFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HTElCX1RSVUVAQEhBVkVfR09CSkVDVF9UUlVFQAkkKHNyY2RpcikvYXZhaGktZ29iamVjdC9nYS1jbGllbnQuaCBcCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dPQkpFQ1RfVFJVRUAJJChzcmNkaXIpL2F2YWhpLWdvYmplY3QvZ2EtZW50cnktZ3JvdXAuaCBcCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dPQkpFQ1RfVFJVRUAJJChzcmNkaXIpL2F2YWhpLWdvYmplY3QvZ2EtZW51bXMuaCBcCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dPQkpFQ1RfVFJVRUAJJChzcmNkaXIpL2F2YWhpLWdvYmplY3QvZ2EtZXJyb3IuaCBcCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dPQkpFQ1RfVFJVRUAJJChzcmNkaXIpL2F2YWhpLWdvYmplY3QvZ2EtcmVjb3JkLWJyb3dzZXIuaCBcCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dPQkpFQ1RfVFJVRUAJJChzcmNkaXIpL2F2YWhpLWdvYmplY3QvZ2Etc2VydmljZS1icm93c2VyLmggXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dMSUJfVFJVRUBASEFWRV9HT0JKRUNUX1RSVUVACSQoc3JjZGlyKS9hdmFoaS1nb2JqZWN0L2dhLXNlcnZpY2UtcmVzb2x2ZXIuaAorCitASEFWRV9EQlVTX1RSVUVAYW1fX2FwcGVuZF81ID0gXAorQEhBVkVfREJVU19UUlVFQAkkKHNyY2RpcikvYXZhaGktY2xpZW50L2NsaWVudC5oIFwKK0BIQVZFX0RCVVNfVFJVRUAJJChzcmNkaXIpL2F2YWhpLWNsaWVudC9sb29rdXAuaCBcCitASEFWRV9EQlVTX1RSVUVACSQoc3JjZGlyKS9hdmFoaS1jbGllbnQvcHVibGlzaC5oCisKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HVEtfVFJVRUBhbV9fYXBwZW5kXzYgPSBcCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR1RLX1RSVUVACSQoc3JjZGlyKS9hdmFoaS11aS9hdmFoaS11aS5oCisKK0BFTkFCTEVfQ09SRV9ET0NTX1RSVUVAYW1fX2FwcGVuZF83ID0gXAorQEVOQUJMRV9DT1JFX0RPQ1NfVFJVRUAJJChzcmNkaXIpL2F2YWhpLWNvcmUvY29yZS5oIFwKK0BFTkFCTEVfQ09SRV9ET0NTX1RSVUVACSQoc3JjZGlyKS9hdmFoaS1jb3JlL2xvb2t1cC5oIFwKK0BFTkFCTEVfQ09SRV9ET0NTX1RSVUVACSQoc3JjZGlyKS9hdmFoaS1jb3JlL3B1Ymxpc2guaCBcCitARU5BQkxFX0NPUkVfRE9DU19UUlVFQAkkKHNyY2RpcikvYXZhaGktY29yZS9yci5oIFwKK0BFTkFCTEVfQ09SRV9ET0NTX1RSVUVACSQoc3JjZGlyKS9hdmFoaS1jb3JlL2xvZy5oCisKK0BIQVZFX0dUS19UUlVFQGFtX19hcHBlbmRfOCA9IFwKK0BIQVZFX0dUS19UUlVFQAkkKHNyY2RpcikvYXZhaGktdWkvYXZhaGktdWkuaAorCitASEFWRV9EQlVTX1RSVUVAYW1fX2FwcGVuZF85ID0gYXZhaGktY2xpZW50LnBjCitASEFWRV9EQlVTX1RSVUVAYW1fX2FwcGVuZF8xMCA9IGF2YWhpLWNsaWVudC5wYworQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUBhbV9fYXBwZW5kXzExID0gYXZhaGktY29tcGF0LWhvd2wucGMKK0BFTkFCTEVfQ09NUEFUX0hPV0xfVFJVRUBASEFWRV9EQlVTX1RSVUVAYW1fX2FwcGVuZF8xMiA9IGF2YWhpLWNvbXBhdC1ob3dsLnBjCitARU5BQkxFX0NPTVBBVF9MSUJETlNfU0RfVFJVRUBASEFWRV9EQlVTX1RSVUVAYW1fX2FwcGVuZF8xMyA9IGF2YWhpLWNvbXBhdC1saWJkbnNfc2QucGMKK0BFTkFCTEVfQ09NUEFUX0xJQkROU19TRF9UUlVFQEBIQVZFX0RCVVNfVFJVRUBhbV9fYXBwZW5kXzE0ID0gYXZhaGktY29tcGF0LWxpYmRuc19zZC5wYworQEhBVkVfREJVU19UUlVFQEBIQVZFX01PTk9fVFJVRUBhbV9fYXBwZW5kXzE1ID0gYXZhaGktc2hhcnAucGMgYXZhaGktdWktc2hhcnAucGMKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9NT05PX1RSVUVAYW1fX2FwcGVuZF8xNiA9IGF2YWhpLXNoYXJwLnBjIGF2YWhpLXVpLXNoYXJwLnBjCitASEFWRV9HTElCX1RSVUVAYW1fX2FwcGVuZF8xNyA9IGF2YWhpLWdsaWIucGMKK0BIQVZFX0dMSUJfVFJVRUBhbV9fYXBwZW5kXzE4ID0gYXZhaGktZ2xpYi5wYworQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dPQkpFQ1RfVFJVRUBhbV9fYXBwZW5kXzE5ID0gYXZhaGktZ29iamVjdC5wYworQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dPQkpFQ1RfVFJVRUBhbV9fYXBwZW5kXzIwID0gYXZhaGktZ29iamVjdC5wYworQEhBVkVfREJVU19UUlVFQEBIQVZFX0dUS19UUlVFQGFtX19hcHBlbmRfMjEgPSBhdmFoaS11aS5wYworQEhBVkVfREJVU19UUlVFQEBIQVZFX0dUS19UUlVFQGFtX19hcHBlbmRfMjIgPSBhdmFoaS11aS5wYworQEhBVkVfREJVU19UUlVFQEBIQVZFX0dUSzNfVFJVRUBhbV9fYXBwZW5kXzIzID0gYXZhaGktdWktZ3RrMy5wYworQEhBVkVfREJVU19UUlVFQEBIQVZFX0dUSzNfVFJVRUBhbV9fYXBwZW5kXzI0ID0gYXZhaGktdWktZ3RrMy5wYworQEhBVkVfUVQzX1RSVUVAYW1fX2FwcGVuZF8yNSA9IGF2YWhpLXF0My5wYworQEhBVkVfUVQzX1RSVUVAYW1fX2FwcGVuZF8yNiA9IGF2YWhpLXF0My5wYworQEhBVkVfUVQ0X1RSVUVAYW1fX2FwcGVuZF8yNyA9IGF2YWhpLXF0NC5wYworQEhBVkVfUVQ0X1RSVUVAYW1fX2FwcGVuZF8yOCA9IGF2YWhpLXF0NC5wYworc3ViZGlyID0gLgorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL2FjeF9wdGhyZWFkLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9nY2Nfc3RhY2tfcHJvdGVjdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vZ2NjX3Zpc2liaWxpdHkubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2ludGx0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9pbnRyb3NwZWN0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9sdG9wdGlvbnMubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2x0c3VnYXIubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2x0dmVyc2lvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHR+b2Jzb2xldGUubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL25scy5tNCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9weXRob24ubTQgXAorCSQodG9wX3NyY2RpcikvYWNpbmNsdWRlLm00ICQodG9wX3NyY2RpcikvY29tbW9uL2RveHlnZW4ubTQgXAorCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCithbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQoQUNMT0NBTF9NNCkKK2FtX19DT05GSUdfRElTVENMRUFOX0ZJTEVTID0gY29uZmlnLnN0YXR1cyBjb25maWcuY2FjaGUgY29uZmlnLmxvZyBcCisgY29uZmlndXJlLmxpbmVubyBjb25maWcuc3RhdHVzLmxpbmVubworbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSBjb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CitBTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKK2FtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKK2FtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgIiAkQDsKK0FNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKK2FtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCithbV9fdl9hdF8wID0gQAorU09VUkNFUyA9CitESVNUX1NPVVJDRVMgPQorUkVDVVJTSVZFX1RBUkdFVFMgPSBhbGwtcmVjdXJzaXZlIGNoZWNrLXJlY3Vyc2l2ZSBkdmktcmVjdXJzaXZlIFwKKwlodG1sLXJlY3Vyc2l2ZSBpbmZvLXJlY3Vyc2l2ZSBpbnN0YWxsLWRhdGEtcmVjdXJzaXZlIFwKKwlpbnN0YWxsLWR2aS1yZWN1cnNpdmUgaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1odG1sLXJlY3Vyc2l2ZSBpbnN0YWxsLWluZm8tcmVjdXJzaXZlIFwKKwlpbnN0YWxsLXBkZi1yZWN1cnNpdmUgaW5zdGFsbC1wcy1yZWN1cnNpdmUgaW5zdGFsbC1yZWN1cnNpdmUgXAorCWluc3RhbGxjaGVjay1yZWN1cnNpdmUgaW5zdGFsbGRpcnMtcmVjdXJzaXZlIHBkZi1yZWN1cnNpdmUgXAorCXBzLXJlY3Vyc2l2ZSB1bmluc3RhbGwtcmVjdXJzaXZlCithbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKK2FtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCisgICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKKyAgICAqKSBmPSQkcDs7IFwKKyAgZXNhYzsKK2FtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKK2FtX19pbnN0YWxsX21heCA9IDQwCithbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAorICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCithbV9fbm9iYXNlX3N0cmlwID0gXAorICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKK2FtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKKyAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKKyAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMvIC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKKyAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAorICAgIGlmICgrK25bJCQyXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIFwKKyAgICAgIHsgcHJpbnQgJCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKKyAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCithbV9fYmFzZV9saXN0ID0gXAorICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnIHwgXAorICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCithbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyID0geyBcCisgIHRlc3QgLXogIiQkZmlsZXMiIFwKKyAgICB8fCB7IHRlc3QgISAtZCAiJCRkaXIiICYmIHRlc3QgISAtZiAiJCRkaXIiICYmIHRlc3QgISAtciAiJCRkaXIiOyB9IFwKKyAgICB8fCB7IGVjaG8gIiAoIGNkICckJGRpcicgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCisgICAgICAgICAkKGFtX19jZCkgIiQkZGlyIiAmJiBybSAtZiAkJGZpbGVzOyB9OyBcCisgIH0KK2FtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChwa2djb25maWdkaXIpIgorREFUQSA9ICQocGtnY29uZmlnX0RBVEEpCitSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUyA9IG1vc3RseWNsZWFuLXJlY3Vyc2l2ZSBjbGVhbi1yZWN1cnNpdmUJXAorICBkaXN0Y2xlYW4tcmVjdXJzaXZlIG1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlCitBTV9SRUNVUlNJVkVfVEFSR0VUUyA9ICQoUkVDVVJTSVZFX1RBUkdFVFM6LXJlY3Vyc2l2ZT0pIFwKKwkkKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTOi1yZWN1cnNpdmU9KSB0YWdzIFRBR1MgY3RhZ3MgQ1RBR1MgXAorCWRpc3RkaXIgZGlzdCBkaXN0LWFsbCBkaXN0Y2hlY2sKK0VUQUdTID0gZXRhZ3MKK0NUQUdTID0gY3RhZ3MKK0RJU1RfU1VCRElSUyA9ICQoU1VCRElSUykKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitkaXN0ZGlyID0gJChQQUNLQUdFKS0kKFZFUlNJT04pCit0b3BfZGlzdGRpciA9ICQoZGlzdGRpcikKK2FtX19yZW1vdmVfZGlzdGRpciA9IFwKKyAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKSI7IHRoZW4gXAorICAgIGZpbmQgIiQoZGlzdGRpcikiIC10eXBlIGQgISAtcGVybSAtMjAwIC1leGVjIGNobW9kIHUrdyB7fSAnOycgXAorICAgICAgJiYgcm0gLXJmICIkKGRpc3RkaXIpIiBcCisgICAgICB8fCB7IHNsZWVwIDUgJiYgcm0gLXJmICIkKGRpc3RkaXIpIjsgfTsgXAorICBlbHNlIDo7IGZpCithbV9fcmVsYXRpdml6ZSA9IFwKKyAgZGlyMD1gcHdkYDsgXAorICBzZWRfZmlyc3Q9J3MsXlwoW14vXSpcKS8uKiQkLFwxLCc7IFwKKyAgc2VkX3Jlc3Q9J3MsXlteL10qLyosLCc7IFwKKyAgc2VkX2xhc3Q9J3MsXi4qL1woW14vXSpcKSQkLFwxLCc7IFwKKyAgc2VkX2J1dGxhc3Q9J3MsLypbXi9dKiQkLCwnOyBcCisgIHdoaWxlIHRlc3QgLW4gIiQkZGlyMSI7IGRvIFwKKyAgICBmaXJzdD1gZWNobyAiJCRkaXIxIiB8IHNlZCAtZSAiJCRzZWRfZmlyc3QiYDsgXAorICAgIGlmIHRlc3QgIiQkZmlyc3QiICE9ICIuIjsgdGhlbiBcCisgICAgICBpZiB0ZXN0ICIkJGZpcnN0IiA9ICIuLiI7IHRoZW4gXAorICAgICAgICBkaXIyPWBlY2hvICIkJGRpcjAiIHwgc2VkIC1lICIkJHNlZF9sYXN0ImAvIiQkZGlyMiI7IFwKKyAgICAgICAgZGlyMD1gZWNobyAiJCRkaXIwIiB8IHNlZCAtZSAiJCRzZWRfYnV0bGFzdCJgOyBcCisgICAgICBlbHNlIFwKKyAgICAgICAgZmlyc3QyPWBlY2hvICIkJGRpcjIiIHwgc2VkIC1lICIkJHNlZF9maXJzdCJgOyBcCisgICAgICAgIGlmIHRlc3QgIiQkZmlyc3QyIiA9ICIkJGZpcnN0IjsgdGhlbiBcCisgICAgICAgICAgZGlyMj1gZWNobyAiJCRkaXIyIiB8IHNlZCAtZSAiJCRzZWRfcmVzdCJgOyBcCisgICAgICAgIGVsc2UgXAorICAgICAgICAgIGRpcjI9Ii4uLyQkZGlyMiI7IFwKKyAgICAgICAgZmk7IFwKKyAgICAgICAgZGlyMD0iJCRkaXIwIi8iJCRmaXJzdCI7IFwKKyAgICAgIGZpOyBcCisgICAgZmk7IFwKKyAgICBkaXIxPWBlY2hvICIkJGRpcjEiIHwgc2VkIC1lICIkJHNlZF9yZXN0ImA7IFwKKyAgZG9uZTsgXAorICByZWxkaXI9IiQkZGlyMiIKK0RJU1RfQVJDSElWRVMgPSAkKGRpc3RkaXIpLnRhci5negorR1pJUF9FTlYgPSAtLWJlc3QKK2Rpc3R1bmluc3RhbGxjaGVja19saXN0ZmlsZXMgPSBmaW5kIC4gLXR5cGUgZiAtcHJpbnQKK2FtX19kaXN0dW5pbnN0YWxsY2hlY2tfbGlzdGZpbGVzID0gJChkaXN0dW5pbnN0YWxsY2hlY2tfbGlzdGZpbGVzKSBcCisgIHwgc2VkICdzfF5cLi98JChwcmVmaXgpL3wnIHwgZ3JlcCAtdiAnJChpbmZvZGlyKS9kaXIkJCcKK2Rpc3RjbGVhbmNoZWNrX2xpc3RmaWxlcyA9IGZpbmQgLiAtdHlwZSBmIC1wcmludAorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQUxMX0xJTkdVQVMgPSBAQUxMX0xJTkdVQVNACitBTVRBUiA9IEBBTVRBUkAKK0FNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAorQVIgPSBAQVJACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVZBSElfQVVUT0lQRF9HUk9VUCA9IEBBVkFISV9BVVRPSVBEX0dST1VQQAorQVZBSElfQVVUT0lQRF9VU0VSID0gQEFWQUhJX0FVVE9JUERfVVNFUkAKK0FWQUhJX0dST1VQID0gQEFWQUhJX0dST1VQQAorQVZBSElfUFJJVl9BQ0NFU1NfR1JPVVAgPSBAQVZBSElfUFJJVl9BQ0NFU1NfR1JPVVBACitBVkFISV9VU0VSID0gQEFWQUhJX1VTRVJACitBV0sgPSBAQVdLQAorQ0FUQUxPR1MgPSBAQ0FUQUxPR1NACitDQVRPQkpFWFQgPSBAQ0FUT0JKRVhUQAorQ0MgPSBAQ0NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREFUQURJUk5BTUUgPSBAREFUQURJUk5BTUVACitEQlVTX0NGTEFHUyA9IEBEQlVTX0NGTEFHU0AKK0RCVVNfTElCUyA9IEBEQlVTX0xJQlNACitEQlVTX1NZU1RFTV9CVVNfREVGQVVMVF9BRERSRVNTID0gQERCVVNfU1lTVEVNX0JVU19ERUZBVUxUX0FERFJFU1NACitEQlVTX1NZU19ESVIgPSBAREJVU19TWVNfRElSQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RMTFRPT0wgPSBARExMVE9PTEAKK0RPWFlHRU5fUEFQRVJfU0laRSA9IEBET1hZR0VOX1BBUEVSX1NJWkVACitEU1lNVVRJTCA9IEBEU1lNVVRJTEAKK0RVTVBCSU4gPSBARFVNUEJJTkAKK0RYX0NPTkZJRyA9IEBEWF9DT05GSUdACitEWF9ET0NESVIgPSBARFhfRE9DRElSQAorRFhfRE9UID0gQERYX0RPVEAKK0RYX0RPWFlHRU4gPSBARFhfRE9YWUdFTkAKK0RYX0RWSVBTID0gQERYX0RWSVBTQAorRFhfRUdSRVAgPSBARFhfRUdSRVBACitEWF9FTlYgPSBARFhfRU5WQAorRFhfRkxBR19jaGkgPSBARFhfRkxBR19jaGlACitEWF9GTEFHX2NobSA9IEBEWF9GTEFHX2NobUAKK0RYX0ZMQUdfZG9jID0gQERYX0ZMQUdfZG9jQAorRFhfRkxBR19kb3QgPSBARFhfRkxBR19kb3RACitEWF9GTEFHX2h0bWwgPSBARFhfRkxBR19odG1sQAorRFhfRkxBR19tYW4gPSBARFhfRkxBR19tYW5ACitEWF9GTEFHX3BkZiA9IEBEWF9GTEFHX3BkZkAKK0RYX0ZMQUdfcHMgPSBARFhfRkxBR19wc0AKK0RYX0ZMQUdfcnRmID0gQERYX0ZMQUdfcnRmQAorRFhfRkxBR194bWwgPSBARFhfRkxBR194bWxACitEWF9ISEMgPSBARFhfSEhDQAorRFhfTEFURVggPSBARFhfTEFURVhACitEWF9NQUtFSU5ERVggPSBARFhfTUFLRUlOREVYQAorRFhfUERGTEFURVggPSBARFhfUERGTEFURVhACitEWF9QRVJMID0gQERYX1BFUkxACitEWF9QUk9KRUNUID0gQERYX1BST0pFQ1RACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VYRUVYVCA9IEBFWEVFWFRACitGR1JFUCA9IEBGR1JFUEAKK0dBQ1VUSUwgPSBAR0FDVVRJTEAKK0dFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACitHTElCMjBfQ0ZMQUdTID0gQEdMSUIyMF9DRkxBR1NACitHTElCMjBfTElCUyA9IEBHTElCMjBfTElCU0AKK0dNT0ZJTEVTID0gQEdNT0ZJTEVTQAorR01TR0ZNVCA9IEBHTVNHRk1UQAorR09CSkVDVF9DRkxBR1MgPSBAR09CSkVDVF9DRkxBR1NACitHT0JKRUNUX0xJQlMgPSBAR09CSkVDVF9MSUJTQAorR1JFUCA9IEBHUkVQQAorR1RLMjBfQ0ZMQUdTID0gQEdUSzIwX0NGTEFHU0AKK0dUSzIwX0xJQlMgPSBAR1RLMjBfTElCU0AKK0dUSzMwX0NGTEFHUyA9IEBHVEszMF9DRkxBR1NACitHVEszMF9MSUJTID0gQEdUSzMwX0xJQlNACitIT1dMX0NPTVBBVF9WRVJTSU9OID0gQEhPV0xfQ09NUEFUX1ZFUlNJT05ACitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lOU1RPQkpFWFQgPSBASU5TVE9CSkVYVEAKK0lOVExMSUJTID0gQElOVExMSUJTQAorSU5UTFRPT0xfRVhUUkFDVCA9IEBJTlRMVE9PTF9FWFRSQUNUQAorSU5UTFRPT0xfTUVSR0UgPSBASU5UTFRPT0xfTUVSR0VACitJTlRMVE9PTF9QRVJMID0gQElOVExUT09MX1BFUkxACitJTlRMVE9PTF9VUERBVEUgPSBASU5UTFRPT0xfVVBEQVRFQAorSU5UUk9TUEVDVElPTl9DRkxBR1MgPSBASU5UUk9TUEVDVElPTl9DRkxBR1NACitJTlRST1NQRUNUSU9OX0NPTVBJTEVSID0gQElOVFJPU1BFQ1RJT05fQ09NUElMRVJACitJTlRST1NQRUNUSU9OX0dFTkVSQVRFID0gQElOVFJPU1BFQ1RJT05fR0VORVJBVEVACitJTlRST1NQRUNUSU9OX0dJUkRJUiA9IEBJTlRST1NQRUNUSU9OX0dJUkRJUkAKK0lOVFJPU1BFQ1RJT05fTElCUyA9IEBJTlRST1NQRUNUSU9OX0xJQlNACitJTlRST1NQRUNUSU9OX01BS0VGSUxFID0gQElOVFJPU1BFQ1RJT05fTUFLRUZJTEVACitJTlRST1NQRUNUSU9OX1NDQU5ORVIgPSBASU5UUk9TUEVDVElPTl9TQ0FOTkVSQAorSU5UUk9TUEVDVElPTl9UWVBFTElCRElSID0gQElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUkAKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCQVZBSElfQ0xJRU5UX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DTElFTlRfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfQ09NTU9OX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DT01NT05fVkVSU0lPTl9JTkZPQAorTElCQVZBSElfQ09NUEFUX0hPV0xfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NPTVBBVF9IT1dMX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPTVBBVF9MSUJETlNfU0RfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NPTVBBVF9MSUJETlNfU0RfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfQ09SRV9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ09SRV9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9HTElCX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9HTElCX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0dPQkpFQ1RfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0dPQkpFQ1RfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfUVQzX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9RVDNfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfUVQ0X1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9RVDRfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfVUlfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX1VJX1ZFUlNJT05fSU5GT0AKK0xJQkRBRU1PTl9DRkxBR1MgPSBATElCREFFTU9OX0NGTEFHU0AKK0xJQkRBRU1PTl9MSUJTID0gQExJQkRBRU1PTl9MSUJTQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAorTUNTID0gQE1DU0AKK01EQVNTRU1CTEVSID0gQE1EQVNTRU1CTEVSQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTUtJTlNUQUxMRElSUyA9IEBNS0lOU1RBTExESVJTQAorTU9DX1FUMyA9IEBNT0NfUVQzQAorTU9DX1FUNCA9IEBNT0NfUVQ0QAorTU9OT0RPQ0VSID0gQE1PTk9ET0NFUkAKK01PTk9ET0NfQ0ZMQUdTID0gQE1PTk9ET0NfQ0ZMQUdTQAorTU9OT0RPQ19ESVIgPSBATU9OT0RPQ19ESVJACitNT05PRE9DX0xJQlMgPSBATU9OT0RPQ19MSUJTQAorTVNHRk1UID0gQE1TR0ZNVEAKK01TR0ZNVF9PUFRTID0gQE1TR0ZNVF9PUFRTQAorTVNHTUVSR0UgPSBATVNHTUVSR0VACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitPQkpEVU1QID0gQE9CSkRVTVBACitPQkpFWFQgPSBAT0JKRVhUQAorT1RPT0wgPSBAT1RPT0xACitPVE9PTDY0ID0gQE9UT09MNjRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK1BLR19DT05GSUdfTElCRElSID0gQFBLR19DT05GSUdfTElCRElSQAorUEtHX0NPTkZJR19QQVRIID0gQFBLR19DT05GSUdfUEFUSEAKK1BPRklMRVMgPSBAUE9GSUxFU0AKK1BPU1VCID0gQFBPU1VCQAorUE9fSU5fREFUQURJUl9GQUxTRSA9IEBQT19JTl9EQVRBRElSX0ZBTFNFQAorUE9fSU5fREFUQURJUl9UUlVFID0gQFBPX0lOX0RBVEFESVJfVFJVRUAKK1BUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKK1BUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAorUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKK1BZVEhPTiA9IEBQWVRIT05ACitQWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAorUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKK1BZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKK1BZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAorUVQzX0NGTEFHUyA9IEBRVDNfQ0ZMQUdTQAorUVQzX0xJQlMgPSBAUVQzX0xJQlNACitRVDRfQ0ZMQUdTID0gQFFUNF9DRkxBR1NACitRVDRfTElCUyA9IEBRVDRfTElCU0AKK1JBTkxJQiA9IEBSQU5MSUJACitTRUQgPSBAU0VEQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NUT1cgPSBAU1RPV0AKK1NUUklQID0gQFNUUklQQAorVVNFX05MUyA9IEBVU0VfTkxTQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorVklTSUJJTElUWV9ISURERU5fQ0ZMQUdTID0gQFZJU0lCSUxJVFlfSElEREVOX0NGTEFHU0AKK1hHRVRURVhUID0gQFhHRVRURVhUQAorWE1MX0NGTEFHUyA9IEBYTUxfQ0ZMQUdTQAorWE1MX0xJQlMgPSBAWE1MX0xJQlNACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9BUiA9IEBhY19jdF9BUkAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKK2FjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK2FjeF9wdGhyZWFkX2NvbmZpZyA9IEBhY3hfcHRocmVhZF9jb25maWdACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2F2YWhpX3J1bnRpbWVfZGlyID0gQGF2YWhpX3J1bnRpbWVfZGlyQAorYXZhaGlfc29ja2V0ID0gQGF2YWhpX3NvY2tldEAKK2F2YWhpbG9jYWxlZGlyID0gQGF2YWhpbG9jYWxlZGlyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitoYXZlX3BrZ19jb25maWcgPSBAaGF2ZV9wa2dfY29uZmlnQAoraGF2ZV94bWx0b21hbiA9IEBoYXZlX3htbHRvbWFuQAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2ludGVyZmFjZXNkaXIgPSBAaW50ZXJmYWNlc2RpckAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAorcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3B5ZXhlY2RpciA9IEBweWV4ZWNkaXJACitweXRob25kaXIgPSBAcHl0aG9uZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzcmNkaXIgPSBAc3JjZGlyQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAorc3lzdGVtZHN5c3RlbXVuaXRkaXIgPSBAc3lzdGVtZHN5c3RlbXVuaXRkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK0FDTE9DQUxfQU1GTEFHUyA9IC1JIGNvbW1vbgorQERYX0NPTkRfZG9jX1RSVUVAQERYX0NPTkRfaHRtbF9UUlVFQERYX0NMRUFOX0hUTUwgPSBARFhfRE9DRElSQC9odG1sCitARFhfQ09ORF9jaG1fVFJVRUBARFhfQ09ORF9kb2NfVFJVRUBEWF9DTEVBTl9DSE0gPSBARFhfRE9DRElSQC9jaG0KK0BEWF9DT05EX2NoaV9UUlVFQEBEWF9DT05EX2NobV9UUlVFQEBEWF9DT05EX2RvY19UUlVFQERYX0NMRUFOX0NISSA9IEBEWF9ET0NESVJAL0BQQUNLQUdFQC5jaGkKK0BEWF9DT05EX2RvY19UUlVFQEBEWF9DT05EX21hbl9UUlVFQERYX0NMRUFOX01BTiA9IEBEWF9ET0NESVJAL21hbgorQERYX0NPTkRfZG9jX1RSVUVAQERYX0NPTkRfcnRmX1RSVUVARFhfQ0xFQU5fUlRGID0gQERYX0RPQ0RJUkAvcnRmCitARFhfQ09ORF9kb2NfVFJVRUBARFhfQ09ORF94bWxfVFJVRUBEWF9DTEVBTl9YTUwgPSBARFhfRE9DRElSQC94bWwKK0BEWF9DT05EX2RvY19UUlVFQEBEWF9DT05EX3BzX1RSVUVARFhfQ0xFQU5fUFMgPSBARFhfRE9DRElSQC9AUEFDS0FHRUAucHMKK0BEWF9DT05EX2RvY19UUlVFQEBEWF9DT05EX3BzX1RSVUVARFhfUFNfR09BTCA9IGRveHlnZW4tcHMKK0BEWF9DT05EX2RvY19UUlVFQEBEWF9DT05EX3BkZl9UUlVFQERYX0NMRUFOX1BERiA9IEBEWF9ET0NESVJAL0BQQUNLQUdFQC5wZGYKK0BEWF9DT05EX2RvY19UUlVFQEBEWF9DT05EX3BkZl9UUlVFQERYX1BERl9HT0FMID0gZG94eWdlbi1wZGYKK0BEWF9DT05EX2RvY19UUlVFQEBEWF9DT05EX2xhdGV4X1RSVUVARFhfQ0xFQU5fTEFURVggPSBARFhfRE9DRElSQC9sYXRleAorQERYX0NPTkRfZG9jX1RSVUVARFhfQ0xFQU5GSUxFUyA9IFwKK0BEWF9DT05EX2RvY19UUlVFQCAgICBARFhfRE9DRElSQC9AUEFDS0FHRUAudGFnIFwKK0BEWF9DT05EX2RvY19UUlVFQCAgICAtciBcCitARFhfQ09ORF9kb2NfVFJVRUAgICAgJChEWF9DTEVBTl9IVE1MKSBcCitARFhfQ09ORF9kb2NfVFJVRUAgICAgJChEWF9DTEVBTl9DSE0pIFwKK0BEWF9DT05EX2RvY19UUlVFQCAgICAkKERYX0NMRUFOX0NISSkgXAorQERYX0NPTkRfZG9jX1RSVUVAICAgICQoRFhfQ0xFQU5fTUFOKSBcCitARFhfQ09ORF9kb2NfVFJVRUAgICAgJChEWF9DTEVBTl9SVEYpIFwKK0BEWF9DT05EX2RvY19UUlVFQCAgICAkKERYX0NMRUFOX1hNTCkgXAorQERYX0NPTkRfZG9jX1RSVUVAICAgICQoRFhfQ0xFQU5fUFMpIFwKK0BEWF9DT05EX2RvY19UUlVFQCAgICAkKERYX0NMRUFOX1BERikgXAorQERYX0NPTkRfZG9jX1RSVUVAICAgICQoRFhfQ0xFQU5fTEFURVgpCisKK0VYVFJBX0RJU1QgPSBcCisJYXV0b2dlbi5zaCBcCisJYm9vdHN0cmFwLnNoIFwKKwlMSUNFTlNFIFwKKwkkKERYX0NPTkZJRykgXAorCWRvY3MvSU5TVEFMTCBcCisJZG9jcy9UT0RPIFwKKwlkb2NzL05FV1MgXAorCWRvY3MvUkVBRE1FIFwKKwlkb2NzL0RCVVMtQVBJIFwKKwlkb2NzL0FVVEhPUlMgXAorCWRvY3MvSEFDS0lORyBcCisJZG9jcy9BUEktQ0hBTkdFUy0wLjYgXAorCWRvY3MvQ09NUEFULUxBWUVSUyBcCisJZG9jcy9NQUxMT0MgXAorCWRvY3Mvb3ZlcnZpZXcuZGlhIFwKKwlkb2NzL3NlcnZlci1zdGF0ZXMuZGlhIFwKKwlkb2NzL2F2YWhpLXBvbGwuZGlhIFwKKwlhdmFoaS1jb3JlLnBjLmluIFwKKwlhdmFoaS1jbGllbnQucGMuaW4gXAorCWF2YWhpLWdsaWIucGMuaW4gXAorCWF2YWhpLWdvYmplY3QucGMuaW4gXAorCWF2YWhpLXF0My5wYy5pbiBcCisJYXZhaGktcXQ0LnBjLmluIFwKKwlhdmFoaS1zaGFycC5wYy5pbiBcCisJYXZhaGktdWktc2hhcnAucGMuaW4gXAorCWF2YWhpLWNvbXBhdC1saWJkbnNfc2QucGMuaW4gXAorCWF2YWhpLWNvbXBhdC1ob3dsLnBjLmluIFwKKwlhdmFoaS11aS5wYy5pbiBcCisJYXZhaGktdWktZ3RrMy5wYy5pbiBcCisJZG94eWdlbl90b19kZXZoZWxwLnhzbCBcCisgICAgICAgIGNvbW1vbi9pbnRyb3NwZWN0aW9uLm00CisKK1NVQkRJUlMgPSBcCisJY29tbW9uIFwKKwlhdmFoaS1jb21tb24gXAorCWF2YWhpLWNvcmUgXAorCWF2YWhpLXF0IFwKKwlhdmFoaS1jbGllbnQgXAorCWF2YWhpLWdsaWIgXAorCWF2YWhpLWdvYmplY3QgXAorCWF2YWhpLWRpc2NvdmVyLXN0YW5kYWxvbmUgXAorCWF2YWhpLWRhZW1vbiBcCisJYXZhaGktc2hhcnAgXAorCWluaXRzY3JpcHQgXAorCWF2YWhpLWRuc2NvbmZkIFwKKwlhdmFoaS11dGlscyBcCisJYXZhaGktcHl0aG9uIFwKKwlleGFtcGxlcyBcCisJbWFuIFwKKwl0ZXN0cyBcCisJc2VydmljZS10eXBlLWRhdGFiYXNlIFwKKwlhdmFoaS1jb21wYXQtbGliZG5zX3NkIFwKKwlhdmFoaS1jb21wYXQtaG93bCBcCisJYXZhaGktYXV0b2lwZCBcCisJYXZhaGktdWkgXAorCWF2YWhpLXVpLXNoYXJwIFwKKwlwbworCitEWF9JTlBVVCA9ICQoc3JjZGlyKS9hdmFoaS1jb21tb24vYWRkcmVzcy5oIFwKKwkkKHNyY2RpcikvYXZhaGktY29tbW9uL21hbGxvYy5oIFwKKwkkKHNyY2RpcikvYXZhaGktY29tbW9uL3N0cmxzdC5oIFwKKwkkKHNyY2RpcikvYXZhaGktY29tbW9uL2FsdGVybmF0aXZlLmggXAorCSQoc3JjZGlyKS9hdmFoaS1jb21tb24vZGVmcy5oICQoc3JjZGlyKS9hdmFoaS1jb21tb24vZXJyb3IuaCBcCisJJChzcmNkaXIpL2F2YWhpLWNvbW1vbi9kb21haW4uaCAkKHNyY2RpcikvYXZhaGktY29tbW9uL3dhdGNoLmggXAorCSQoc3JjZGlyKS9hdmFoaS1jb21tb24vc2ltcGxlLXdhdGNoLmggXAorCSQoc3JjZGlyKS9hdmFoaS1jb21tb24vdGhyZWFkLXdhdGNoLmggJChhbV9fYXBwZW5kXzEpIFwKKwkkKGFtX19hcHBlbmRfMikgJChhbV9fYXBwZW5kXzMpICQoYW1fX2FwcGVuZF80KSBcCisJJChhbV9fYXBwZW5kXzUpICQoYW1fX2FwcGVuZF82KSAkKGFtX19hcHBlbmRfNykgXAorCSQoYW1fX2FwcGVuZF84KQorRFhfRVhBTVBMRV9QQVRIID0gJChzcmNkaXIpL2V4YW1wbGVzCitEWF9FWEFNUExFX1BBVFRFUk5TID0gKi5jCitwa2djb25maWdkaXIgPSAkKGxpYmRpcikvcGtnY29uZmlnCitwa2djb25maWdfREFUQSA9IGF2YWhpLWNvcmUucGMgJChhbV9fYXBwZW5kXzkpICQoYW1fX2FwcGVuZF8xMSkgXAorCSQoYW1fX2FwcGVuZF8xMykgJChhbV9fYXBwZW5kXzE1KSAkKGFtX19hcHBlbmRfMTcpIFwKKwkkKGFtX19hcHBlbmRfMTkpICQoYW1fX2FwcGVuZF8yMSkgJChhbV9fYXBwZW5kXzIzKSBcCisJJChhbV9fYXBwZW5kXzI1KSAkKGFtX19hcHBlbmRfMjcpCitDTEVBTkZJTEVTID0gYXZhaGktY29yZS5wYyAkKGFtX19hcHBlbmRfMTApICQoYW1fX2FwcGVuZF8xMikgXAorCSQoYW1fX2FwcGVuZF8xNCkgJChhbV9fYXBwZW5kXzE2KSAkKGFtX19hcHBlbmRfMTgpIFwKKwkkKGFtX19hcHBlbmRfMjApICQoYW1fX2FwcGVuZF8yMikgJChhbV9fYXBwZW5kXzI0KSBcCisJJChhbV9fYXBwZW5kXzI2KSAkKGFtX19hcHBlbmRfMjgpIGF2YWhpLmRldmhlbHAKK01PU1RMWUNMRUFORklMRVMgPSAkKERYX0NMRUFORklMRVMpCitESVNUQ0hFQ0tfQ09ORklHVVJFX0ZMQUdTID0gXAorCS0tZGlzYWJsZS1tb25vZG9jIFwKKwktLWVuYWJsZS1pbnRyb3NwZWN0aW9uIFwKKwktLXdpdGgtc3lzdGVtZHN5c3RlbXVuaXRkaXI9JCRkY19pbnN0YWxsX2Jhc2UvJChzeXN0ZW1kc3lzdGVtdW5pdGRpcikKKworRElTVENMRUFORklMRVMgPSBcCisJcG8vLmludGx0b29sLW1lcmdlLWNhY2hlCisKK2FsbDogY29uZmlnLmgKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbGwtcmVjdXJzaXZlCisKKy5TVUZGSVhFUzoKK2FtLS1yZWZyZXNoOiBNYWtlZmlsZQorCUA6CiskKHNyY2RpcikvTWFrZWZpbGUuaW46ICAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL2NvbW1vbi9kb3h5Z2VuLm1rICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgIGVjaG8gJyBjZCAkKHNyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduJzsgXAorCSAgICAgICQoYW1fX2NkKSAkKHNyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduIFwKKwkJJiYgZXhpdCAwOyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gTWFrZWZpbGUnOyBcCisJJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1mb3JlaWduIE1ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgZWNobyAnICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyc7IFwKKwkgICAgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CiskKHNyY2RpcikvY29tbW9uL2RveHlnZW4ubWs6CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCSQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAtLXJlY2hlY2sKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6ICAkKGFtX19jb25maWd1cmVfZGVwcykKKwkkKGFtX19jZCkgJChzcmNkaXIpICYmICQoQVVUT0NPTkYpCiskKEFDTE9DQUxfTTQpOiAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCSQoYW1fX2NkKSAkKHNyY2RpcikgJiYgJChBQ0xPQ0FMKSAkKEFDTE9DQUxfQU1GTEFHUykKKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CisKK2NvbmZpZy5oOiBzdGFtcC1oMQorCUBpZiB0ZXN0ICEgLWYgJEA7IHRoZW4gcm0gLWYgc3RhbXAtaDE7IGVsc2UgOjsgZmkKKwlAaWYgdGVzdCAhIC1mICRAOyB0aGVuICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHN0YW1wLWgxOyBlbHNlIDo7IGZpCisKK3N0YW1wLWgxOiAkKHNyY2RpcikvY29uZmlnLmguaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAcm0gLWYgc3RhbXAtaDEKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzIGNvbmZpZy5oCiskKHNyY2RpcikvY29uZmlnLmguaW46ICAkKGFtX19jb25maWd1cmVfZGVwcykgCisJKCQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmICQoQVVUT0hFQURFUikpCisJcm0gLWYgc3RhbXAtaDEKKwl0b3VjaCAkQAorCitkaXN0Y2xlYW4taGRyOgorCS1ybSAtZiBjb25maWcuaCBzdGFtcC1oMQorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworCitkaXN0Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgbGlidG9vbCBjb25maWcubHQKK2luc3RhbGwtcGtnY29uZmlnREFUQTogJChwa2djb25maWdfREFUQSkKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwl0ZXN0IC16ICIkKHBrZ2NvbmZpZ2RpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKHBrZ2NvbmZpZ2RpcikiCisJQGxpc3Q9JyQocGtnY29uZmlnX0RBVEEpJzsgdGVzdCAtbiAiJChwa2djb25maWdkaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKKwkgIGVjaG8gIiQkZCQkcCI7IFwKKwlkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKKwl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCisJICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgJyQoREVTVERJUikkKHBrZ2NvbmZpZ2RpciknIjsgXAorCSAgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgIiQoREVTVERJUikkKHBrZ2NvbmZpZ2RpcikiIHx8IGV4aXQgJCQ/OyBcCisJZG9uZQorCit1bmluc3RhbGwtcGtnY29uZmlnREFUQToKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKHBrZ2NvbmZpZ19EQVRBKSc7IHRlc3QgLW4gIiQocGtnY29uZmlnZGlyKSIgfHwgbGlzdD07IFwKKwlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IHNlZCAtZSAnc3xeLiovfHwnYDsgXAorCWRpcj0nJChERVNURElSKSQocGtnY29uZmlnZGlyKSc7ICQoYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpcikKKworIyBUaGlzIGRpcmVjdG9yeSdzIHN1YmRpcmVjdG9yaWVzIGFyZSBtb3N0bHkgaW5kZXBlbmRlbnQ7IHlvdSBjYW4gY2QKKyMgaW50byB0aGVtIGFuZCBydW4gYG1ha2UnIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCB0aGlzIE1ha2VmaWxlLgorIyBUbyBjaGFuZ2UgdGhlIHZhbHVlcyBvZiBgbWFrZScgdmFyaWFibGVzOiBpbnN0ZWFkIG9mIGVkaXRpbmcgTWFrZWZpbGVzLAorIyAoMSkgaWYgdGhlIHZhcmlhYmxlIGlzIHNldCBpbiBgY29uZmlnLnN0YXR1cycsIGVkaXQgYGNvbmZpZy5zdGF0dXMnCisjICAgICAod2hpY2ggd2lsbCBjYXVzZSB0aGUgTWFrZWZpbGVzIHRvIGJlIHJlZ2VuZXJhdGVkIHdoZW4geW91IHJ1biBgbWFrZScpOworIyAoMikgb3RoZXJ3aXNlLCBwYXNzIHRoZSBkZXNpcmVkIHZhbHVlcyBvbiB0aGUgYG1ha2UnIGNvbW1hbmQgbGluZS4KKyQoUkVDVVJTSVZFX1RBUkdFVFMpOgorCUBmYWlsPSBmYWlsY29tPSdleGl0IDEnOyBcCisJZm9yIGYgaW4geCAkJE1BS0VGTEFHUzsgZG8gXAorCSAgY2FzZSAkJGYgaW4gXAorCSAgICAqPSogfCAtLVsha10qKTs7IFwKKwkgICAgKmsqKSBmYWlsY29tPSdmYWlsPXllcyc7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWRvdF9zZWVuPW5vOyBcCisJdGFyZ2V0PWBlY2hvICRAIHwgc2VkIHMvLXJlY3Vyc2l2ZS8vYDsgXAorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgZWNobyAiTWFraW5nICQkdGFyZ2V0IGluICQkc3ViZGlyIjsgXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIFwKKwkgICAgZG90X3NlZW49eWVzOyBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQtYW0iOyBcCisJICBlbHNlIFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKKwkgIGZpOyBcCisJICAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCisJICB8fCBldmFsICQkZmFpbGNvbTsgXAorCWRvbmU7IFwKKwlpZiB0ZXN0ICIkJGRvdF9zZWVuIiA9ICJubyI7IHRoZW4gXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgIiQkdGFyZ2V0LWFtIiB8fCBleGl0IDE7IFwKKwlmaTsgdGVzdCAteiAiJCRmYWlsIgorCiskKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTKToKKwlAZmFpbD0gZmFpbGNvbT0nZXhpdCAxJzsgXAorCWZvciBmIGluIHggJCRNQUtFRkxBR1M7IGRvIFwKKwkgIGNhc2UgJCRmIGluIFwKKwkgICAgKj0qIHwgLS1bIWtdKik7OyBcCisJICAgICprKikgZmFpbGNvbT0nZmFpbD15ZXMnOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwlkb3Rfc2Vlbj1ubzsgXAorCWNhc2UgIiRAIiBpbiBcCisJICBkaXN0Y2xlYW4tKiB8IG1haW50YWluZXItY2xlYW4tKikgbGlzdD0nJChESVNUX1NVQkRJUlMpJyA7OyBcCisJICAqKSBsaXN0PSckKFNVQkRJUlMpJyA7OyBcCisJZXNhYzsgXAorCXJldj0nJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgcmV2PSIkJHN1YmRpciAkJHJldiI7IFwKKwkgIGZpOyBcCisJZG9uZTsgXAorCXJldj0iJCRyZXYgLiI7IFwKKwl0YXJnZXQ9YGVjaG8gJEAgfCBzZWQgcy8tcmVjdXJzaXZlLy9gOyBcCisJZm9yIHN1YmRpciBpbiAkJHJldjsgZG8gXAorCSAgZWNobyAiTWFraW5nICQkdGFyZ2V0IGluICQkc3ViZGlyIjsgXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldC1hbSI7IFwKKwkgIGVsc2UgXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0IjsgXAorCSAgZmk7IFwKKwkgICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRsb2NhbF90YXJnZXQpIFwKKwkgIHx8IGV2YWwgJCRmYWlsY29tOyBcCisJZG9uZSAmJiB0ZXN0IC16ICIkJGZhaWwiCit0YWdzLXJlY3Vyc2l2ZToKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB0YWdzKTsgXAorCWRvbmUKK2N0YWdzLXJlY3Vyc2l2ZToKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBjdGFncyk7IFwKKwlkb25lCisKK0lEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJbWtpZCAtZklEICQkdW5pcXVlCit0YWdzOiBUQUdTCisKK1RBR1M6IHRhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSBjb25maWcuaC5pbiAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXNldCB4OyBcCisJaGVyZT1gcHdkYDsgXAorCWlmICgkKEVUQUdTKSAtLWV0YWdzLWluY2x1ZGUgLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAorCSAgaW5jbHVkZV9vcHRpb249LS1ldGFncy1pbmNsdWRlOyBcCisJICBlbXB0eV9maXg9LjsgXAorCWVsc2UgXAorCSAgaW5jbHVkZV9vcHRpb249LS1pbmNsdWRlOyBcCisJICBlbXB0eV9maXg9OyBcCisJZmk7IFwKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCisJICAgIHRlc3QgISAtZiAkJHN1YmRpci9UQUdTIHx8IFwKKwkgICAgICBzZXQgIiQkQCIgIiQkaW5jbHVkZV9vcHRpb249JCRoZXJlLyQkc3ViZGlyL1RBR1MiOyBcCisJICBmaTsgXAorCWRvbmU7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgY29uZmlnLmguaW4gJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlzaGlmdDsgXAorCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisJICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCisJICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAorCSAgZWxzZSBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAkJHVuaXF1ZTsgXAorCSAgZmk7IFwKKwlmaQorY3RhZ3M6IENUQUdTCitDVEFHUzogY3RhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSBjb25maWcuaC5pbiAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSBjb25maWcuaC5pbiAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAorCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorCSAgICAgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKKworZGlzdGRpcjogJChESVNURklMRVMpCisJJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCisJdGVzdCAtZCAiJChkaXN0ZGlyKSIgfHwgbWtkaXIgIiQoZGlzdGRpcikiCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCisJQGxpc3Q9JyQoRElTVF9TVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAorCSAgICB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCisJICAgIHx8ICQoTUtESVJfUCkgIiQoZGlzdGRpcikvJCRzdWJkaXIiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKKwlAbGlzdD0nJChESVNUX1NVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCisJICAgIGRpcjE9JCRzdWJkaXI7IGRpcjI9IiQoZGlzdGRpcikvJCRzdWJkaXIiOyBcCisJICAgICQoYW1fX3JlbGF0aXZpemUpOyBcCisJICAgIG5ld19kaXN0ZGlyPSQkcmVsZGlyOyBcCisJICAgIGRpcjE9JCRzdWJkaXI7IGRpcjI9IiQodG9wX2Rpc3RkaXIpIjsgXAorCSAgICAkKGFtX19yZWxhdGl2aXplKTsgXAorCSAgICBuZXdfdG9wX2Rpc3RkaXI9JCRyZWxkaXI7IFwKKwkgICAgZWNobyAiIChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB0b3BfZGlzdGRpcj0iJCRuZXdfdG9wX2Rpc3RkaXIiIGRpc3RkaXI9IiQkbmV3X2Rpc3RkaXIiIFxcIjsgXAorCSAgICBlY2hvICIgICAgIGFtX19yZW1vdmVfZGlzdGRpcj06IGFtX19za2lwX2xlbmd0aF9jaGVjaz06IGFtX19za2lwX21vZGVfZml4PTogZGlzdGRpcikiOyBcCisJICAgICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgXAorCSAgICAgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIFwKKwkgICAgICAgIHRvcF9kaXN0ZGlyPSIkJG5ld190b3BfZGlzdGRpciIgXAorCSAgICAgICAgZGlzdGRpcj0iJCRuZXdfZGlzdGRpciIgXAorCQlhbV9fcmVtb3ZlX2Rpc3RkaXI9OiBcCisJCWFtX19za2lwX2xlbmd0aF9jaGVjaz06IFwKKwkJYW1fX3NraXBfbW9kZV9maXg9OiBcCisJICAgICAgICBkaXN0ZGlyKSBcCisJICAgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKKwktdGVzdCAtbiAiJChhbV9fc2tpcF9tb2RlX2ZpeCkiIFwKKwl8fCBmaW5kICIkKGRpc3RkaXIpIiAtdHlwZSBkICEgLXBlcm0gLTc1NSBcCisJCS1leGVjIGNobW9kIHUrcnd4LGdvK3J4IHt9IFw7IC1vIFwKKwkgICEgLXR5cGUgZCAhIC1wZXJtIC00NDQgLWxpbmtzIDEgLWV4ZWMgY2htb2QgYStyIHt9IFw7IC1vIFwKKwkgICEgLXR5cGUgZCAhIC1wZXJtIC00MDAgLWV4ZWMgY2htb2QgYStyIHt9IFw7IC1vIFwKKwkgICEgLXR5cGUgZCAhIC1wZXJtIC00NDQgLWV4ZWMgJChpbnN0YWxsX3NoKSAtYyAtbSBhK3Ige30ge30gXDsgXAorCXx8IGNobW9kIC1SIGErciAiJChkaXN0ZGlyKSIKK2Rpc3QtZ3ppcDogZGlzdGRpcgorCXRhcmRpcj0kKGRpc3RkaXIpICYmICQoYW1fX3RhcikgfCBHWklQPSQoR1pJUF9FTlYpIGd6aXAgLWMgPiQoZGlzdGRpcikudGFyLmd6CisJJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCisKK2Rpc3QtYnppcDI6IGRpc3RkaXIKKwl0YXJkaXI9JChkaXN0ZGlyKSAmJiAkKGFtX190YXIpIHwgQlpJUDI9JCR7QlpJUDItLTl9IGJ6aXAyIC1jID4kKGRpc3RkaXIpLnRhci5iejIKKwkkKGFtX19yZW1vdmVfZGlzdGRpcikKKworZGlzdC1semlwOiBkaXN0ZGlyCisJdGFyZGlyPSQoZGlzdGRpcikgJiYgJChhbV9fdGFyKSB8IGx6aXAgLWMgJCR7TFpJUF9PUFQtLTl9ID4kKGRpc3RkaXIpLnRhci5segorCSQoYW1fX3JlbW92ZV9kaXN0ZGlyKQorCitkaXN0LWx6bWE6IGRpc3RkaXIKKwl0YXJkaXI9JChkaXN0ZGlyKSAmJiAkKGFtX190YXIpIHwgbHptYSAtOSAtYyA+JChkaXN0ZGlyKS50YXIubHptYQorCSQoYW1fX3JlbW92ZV9kaXN0ZGlyKQorCitkaXN0LXh6OiBkaXN0ZGlyCisJdGFyZGlyPSQoZGlzdGRpcikgJiYgJChhbV9fdGFyKSB8IFhaX09QVD0kJHtYWl9PUFQtLWV9IHh6IC1jID4kKGRpc3RkaXIpLnRhci54egorCSQoYW1fX3JlbW92ZV9kaXN0ZGlyKQorCitkaXN0LXRhclo6IGRpc3RkaXIKKwl0YXJkaXI9JChkaXN0ZGlyKSAmJiAkKGFtX190YXIpIHwgY29tcHJlc3MgLWMgPiQoZGlzdGRpcikudGFyLloKKwkkKGFtX19yZW1vdmVfZGlzdGRpcikKKworZGlzdC1zaGFyOiBkaXN0ZGlyCisJc2hhciAkKGRpc3RkaXIpIHwgR1pJUD0kKEdaSVBfRU5WKSBnemlwIC1jID4kKGRpc3RkaXIpLnNoYXIuZ3oKKwkkKGFtX19yZW1vdmVfZGlzdGRpcikKKworZGlzdC16aXA6IGRpc3RkaXIKKwktcm0gLWYgJChkaXN0ZGlyKS56aXAKKwl6aXAgLXJxICQoZGlzdGRpcikuemlwICQoZGlzdGRpcikKKwkkKGFtX19yZW1vdmVfZGlzdGRpcikKKworZGlzdCBkaXN0LWFsbDogZGlzdGRpcgorCXRhcmRpcj0kKGRpc3RkaXIpICYmICQoYW1fX3RhcikgfCBHWklQPSQoR1pJUF9FTlYpIGd6aXAgLWMgPiQoZGlzdGRpcikudGFyLmd6CisJJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCisKKyMgVGhpcyB0YXJnZXQgdW50YXJzIHRoZSBkaXN0IGZpbGUgYW5kIHRyaWVzIGEgVlBBVEggY29uZmlndXJhdGlvbi4gIFRoZW4KKyMgaXQgZ3VhcmFudGVlcyB0aGF0IHRoZSBkaXN0cmlidXRpb24gaXMgc2VsZi1jb250YWluZWQgYnkgbWFraW5nIGFub3RoZXIKKyMgdGFyZmlsZS4KK2Rpc3RjaGVjazogZGlzdAorCWNhc2UgJyQoRElTVF9BUkNISVZFUyknIGluIFwKKwkqLnRhci5neiopIFwKKwkgIEdaSVA9JChHWklQX0VOVikgZ3ppcCAtZGMgJChkaXN0ZGlyKS50YXIuZ3ogfCAkKGFtX191bnRhcikgOztcCisJKi50YXIuYnoyKikgXAorCSAgYnppcDIgLWRjICQoZGlzdGRpcikudGFyLmJ6MiB8ICQoYW1fX3VudGFyKSA7O1wKKwkqLnRhci5sem1hKikgXAorCSAgbHptYSAtZGMgJChkaXN0ZGlyKS50YXIubHptYSB8ICQoYW1fX3VudGFyKSA7O1wKKwkqLnRhci5seiopIFwKKwkgIGx6aXAgLWRjICQoZGlzdGRpcikudGFyLmx6IHwgJChhbV9fdW50YXIpIDs7XAorCSoudGFyLnh6KikgXAorCSAgeHogLWRjICQoZGlzdGRpcikudGFyLnh6IHwgJChhbV9fdW50YXIpIDs7XAorCSoudGFyLloqKSBcCisJICB1bmNvbXByZXNzIC1jICQoZGlzdGRpcikudGFyLlogfCAkKGFtX191bnRhcikgOztcCisJKi5zaGFyLmd6KikgXAorCSAgR1pJUD0kKEdaSVBfRU5WKSBnemlwIC1kYyAkKGRpc3RkaXIpLnNoYXIuZ3ogfCB1bnNoYXIgOztcCisJKi56aXAqKSBcCisJICB1bnppcCAkKGRpc3RkaXIpLnppcCA7O1wKKwllc2FjCisJY2htb2QgLVIgYS13ICQoZGlzdGRpcik7IGNobW9kIGErdyAkKGRpc3RkaXIpCisJbWtkaXIgJChkaXN0ZGlyKS9fYnVpbGQKKwlta2RpciAkKGRpc3RkaXIpL19pbnN0CisJY2htb2QgYS13ICQoZGlzdGRpcikKKwl0ZXN0IC1kICQoZGlzdGRpcikvX2J1aWxkIHx8IGV4aXQgMDsgXAorCWRjX2luc3RhbGxfYmFzZT1gJChhbV9fY2QpICQoZGlzdGRpcikvX2luc3QgJiYgcHdkIHwgc2VkIC1lICdzLF5bXjpcXC9dOltcXC9dLC8sJ2AgXAorCSAgJiYgZGNfZGVzdGRpcj0iJCR7VE1QRElSLS90bXB9L2FtLWRjLSQkJCQvIiBcCisJICAmJiBhbV9fY3dkPWBwd2RgIFwKKwkgICYmICQoYW1fX2NkKSAkKGRpc3RkaXIpL19idWlsZCBcCisJICAmJiAuLi9jb25maWd1cmUgLS1zcmNkaXI9Li4gLS1wcmVmaXg9IiQkZGNfaW5zdGFsbF9iYXNlIiBcCisJICAgICQoQU1fRElTVENIRUNLX0NPTkZJR1VSRV9GTEFHUykgXAorCSAgICAkKERJU1RDSEVDS19DT05GSUdVUkVfRkxBR1MpIFwKKwkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIFwKKwkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGR2aSBcCisJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBjaGVjayBcCisJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsIFwKKwkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGxjaGVjayBcCisJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB1bmluc3RhbGwgXAorCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgZGlzdHVuaW5zdGFsbGNoZWNrX2Rpcj0iJCRkY19pbnN0YWxsX2Jhc2UiIFwKKwkgICAgICAgIGRpc3R1bmluc3RhbGxjaGVjayBcCisJICAmJiBjaG1vZCAtUiBhLXcgIiQkZGNfaW5zdGFsbF9iYXNlIiBcCisJICAmJiAoeyBcCisJICAgICAgIChjZCAuLi8uLiAmJiB1bWFzayAwNzcgJiYgbWtkaXIgIiQkZGNfZGVzdGRpciIpIFwKKwkgICAgICAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgREVTVERJUj0iJCRkY19kZXN0ZGlyIiBpbnN0YWxsIFwKKwkgICAgICAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgREVTVERJUj0iJCRkY19kZXN0ZGlyIiB1bmluc3RhbGwgXAorCSAgICAgICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBERVNURElSPSIkJGRjX2Rlc3RkaXIiIFwKKwkgICAgICAgICAgICBkaXN0dW5pbnN0YWxsY2hlY2tfZGlyPSIkJGRjX2Rlc3RkaXIiIGRpc3R1bmluc3RhbGxjaGVjazsgXAorCSAgICAgIH0gfHwgeyBybSAtcmYgIiQkZGNfZGVzdGRpciI7IGV4aXQgMTsgfSkgXAorCSAgJiYgcm0gLXJmICIkJGRjX2Rlc3RkaXIiIFwKKwkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGRpc3QgXAorCSAgJiYgcm0gLXJmICQoRElTVF9BUkNISVZFUykgXAorCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgZGlzdGNsZWFuY2hlY2sgXAorCSAgJiYgY2QgIiQkYW1fX2N3ZCIgXAorCSAgfHwgZXhpdCAxCisJJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCisJQChlY2hvICIkKGRpc3RkaXIpIGFyY2hpdmVzIHJlYWR5IGZvciBkaXN0cmlidXRpb246ICI7IFwKKwkgIGxpc3Q9JyQoRElTVF9BUkNISVZFUyknOyBmb3IgaSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRpOyBkb25lKSB8IFwKKwkgIHNlZCAtZSAxaCAtZSAxcy8uLz0vZyAtZSAxcCAtZSAxeCAtZSAnJCRwJyAtZSAnJCR4JworZGlzdHVuaW5zdGFsbGNoZWNrOgorCUB0ZXN0IC1uICckKGRpc3R1bmluc3RhbGxjaGVja19kaXIpJyB8fCB7IFwKKwkgIGVjaG8gJ0VSUk9SOiB0cnlpbmcgdG8gcnVuICRAIHdpdGggYW4gZW1wdHknIFwKKwkgICAgICAgJyQkKGRpc3R1bmluc3RhbGxjaGVja19kaXIpJyA+JjI7IFwKKwkgIGV4aXQgMTsgXAorCX07IFwKKwkkKGFtX19jZCkgJyQoZGlzdHVuaW5zdGFsbGNoZWNrX2RpciknIHx8IHsgXAorCSAgZWNobyAnRVJST1I6IGNhbm5vdCBjaGRpciBpbnRvICQoZGlzdHVuaW5zdGFsbGNoZWNrX2RpciknID4mMjsgXAorCSAgZXhpdCAxOyBcCisJfTsgXAorCXRlc3QgYCQoYW1fX2Rpc3R1bmluc3RhbGxjaGVja19saXN0ZmlsZXMpIHwgd2MgLWxgIC1lcSAwIFwKKwkgICB8fCB7IGVjaG8gIkVSUk9SOiBmaWxlcyBsZWZ0IGFmdGVyIHVuaW5zdGFsbDoiIDsgXAorCSAgICAgICAgaWYgdGVzdCAtbiAiJChERVNURElSKSI7IHRoZW4gXAorCSAgICAgICAgICBlY2hvICIgIChjaGVjayBERVNURElSIHN1cHBvcnQpIjsgXAorCSAgICAgICAgZmkgOyBcCisJICAgICAgICAkKGRpc3R1bmluc3RhbGxjaGVja19saXN0ZmlsZXMpIDsgXAorCSAgICAgICAgZXhpdCAxOyB9ID4mMgorZGlzdGNsZWFuY2hlY2s6IGRpc3RjbGVhbgorCUBpZiB0ZXN0ICckKHNyY2RpciknID0gLiA7IHRoZW4gXAorCSAgZWNobyAiRVJST1I6IGRpc3RjbGVhbmNoZWNrIGNhbiBvbmx5IHJ1biBmcm9tIGEgVlBBVEggYnVpbGQiIDsgXAorCSAgZXhpdCAxIDsgXAorCWZpCisJQHRlc3QgYCQoZGlzdGNsZWFuY2hlY2tfbGlzdGZpbGVzKSB8IHdjIC1sYCAtZXEgMCBcCisJICB8fCB7IGVjaG8gIkVSUk9SOiBmaWxlcyBsZWZ0IGluIGJ1aWxkIGRpcmVjdG9yeSBhZnRlciBkaXN0Y2xlYW46IiA7IFwKKwkgICAgICAgJChkaXN0Y2xlYW5jaGVja19saXN0ZmlsZXMpIDsgXAorCSAgICAgICBleGl0IDE7IH0gPiYyCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stcmVjdXJzaXZlCithbGwtYW06IE1ha2VmaWxlICQoREFUQSkgY29uZmlnLmgKK2luc3RhbGxkaXJzOiBpbnN0YWxsZGlycy1yZWN1cnNpdmUKK2luc3RhbGxkaXJzLWFtOgorCWZvciBkaXIgaW4gIiQoREVTVERJUikkKHBrZ2NvbmZpZ2RpcikiOyBkbyBcCisJICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCisJZG9uZQoraW5zdGFsbDogaW5zdGFsbC1yZWN1cnNpdmUKK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtcmVjdXJzaXZlCit1bmluc3RhbGw6IHVuaW5zdGFsbC1yZWN1cnNpdmUKKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stcmVjdXJzaXZlCitpbnN0YWxsLXN0cmlwOgorCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgICAgICBpbnN0YWxsOyBcCisJZWxzZSBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKKwlmaQorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChNT1NUTFlDTEVBTkZJTEVTKSIgfHwgcm0gLWYgJChNT1NUTFlDTEVBTkZJTEVTKQorCitjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENMRUFORklMRVMpIiB8fCBybSAtZiAkKENMRUFORklMRVMpCisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQorCS10ZXN0IC16ICIkKERJU1RDTEVBTkZJTEVTKSIgfHwgcm0gLWYgJChESVNUQ0xFQU5GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tcmVjdXJzaXZlCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tcmVjdXJzaXZlCisJLXJtIC1mICQoYW1fX0NPTkZJR19ESVNUQ0xFQU5fRklMRVMpCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1oZHIgXAorCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzCisKK2R2aTogZHZpLXJlY3Vyc2l2ZQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtcmVjdXJzaXZlCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tcmVjdXJzaXZlCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1wa2djb25maWdEQVRBCisKK2luc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1yZWN1cnNpdmUKKworaW5zdGFsbC1kdmktYW06CisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtcmVjdXJzaXZlCisKK2luc3RhbGwtaHRtbC1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tcmVjdXJzaXZlCisKK2luc3RhbGwtaW5mby1hbToKKworaW5zdGFsbC1tYW46CisKK2luc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1yZWN1cnNpdmUKKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtcmVjdXJzaXZlCisKK2luc3RhbGwtcHMtYW06CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUKKwktcm0gLWYgJChhbV9fQ09ORklHX0RJU1RDTEVBTl9GSUxFUykKKwktcm0gLXJmICQodG9wX3NyY2RpcikvYXV0b200dGUuY2FjaGUKKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLXJlY3Vyc2l2ZQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLXJlY3Vyc2l2ZQorCitwZGYtYW06CisKK3BzOiBwcy1yZWN1cnNpdmUKKworcHMtYW06CisKK3VuaW5zdGFsbC1hbTogdW5pbnN0YWxsLXBrZ2NvbmZpZ0RBVEEKKworLk1BS0U6ICQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpICQoUkVDVVJTSVZFX1RBUkdFVFMpIGFsbCBcCisJY3RhZ3MtcmVjdXJzaXZlIGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcCB0YWdzLXJlY3Vyc2l2ZQorCisuUEhPTlk6ICQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpICQoUkVDVVJTSVZFX1RBUkdFVFMpIENUQUdTIEdUQUdTIFwKKwlhbGwgYWxsLWFtIGFtLS1yZWZyZXNoIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAorCWNsZWFuLWxpYnRvb2wgY3RhZ3MgY3RhZ3MtcmVjdXJzaXZlIGRpc3QgZGlzdC1hbGwgZGlzdC1iemlwMiBcCisJZGlzdC1nemlwIGRpc3QtbHppcCBkaXN0LWx6bWEgZGlzdC1zaGFyIGRpc3QtdGFyWiBkaXN0LXh6IFwKKwlkaXN0LXppcCBkaXN0Y2hlY2sgZGlzdGNsZWFuIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1oZHIgXAorCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RjbGVhbmNoZWNrIGRpc3RkaXIgXAorCWRpc3R1bmluc3RhbGxjaGVjayBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gXAorCWluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIFwKKwlpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBcCisJaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gXAorCWluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIGluc3RhbGwtcGtnY29uZmlnREFUQSBpbnN0YWxsLXBzIFwKKwlpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBcCisJaW5zdGFsbGRpcnMgaW5zdGFsbGRpcnMtYW0gbWFpbnRhaW5lci1jbGVhbiBcCisJbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHRhZ3MtcmVjdXJzaXZlIFwKKwl1bmluc3RhbGwgdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1wa2djb25maWdEQVRBCisKKworQERYX0NPTkRfZG9jX1RSVUVAQERYX0NPTkRfcHNfVFJVRUBkb3h5Z2VuLXBzOiBARFhfRE9DRElSQC9AUEFDS0FHRUAucHMKKworQERYX0NPTkRfZG9jX1RSVUVAQERYX0NPTkRfcHNfVFJVRUBARFhfRE9DRElSQC9AUEFDS0FHRUAucHM6IEBEWF9ET0NESVJAL0BQQUNLQUdFQC50YWcKK0BEWF9DT05EX2RvY19UUlVFQEBEWF9DT05EX3BzX1RSVUVACWNkIEBEWF9ET0NESVJAL2xhdGV4OyBcCitARFhfQ09ORF9kb2NfVFJVRUBARFhfQ09ORF9wc19UUlVFQAlybSAtZiAqLmF1eCAqLnRvYyAqLmlkeCAqLmluZCAqLmlsZyAqLmxvZyAqLm91dDsgXAorQERYX0NPTkRfZG9jX1RSVUVAQERYX0NPTkRfcHNfVFJVRUAJJChEWF9MQVRFWCkgcmVmbWFuLnRleDsgXAorQERYX0NPTkRfZG9jX1RSVUVAQERYX0NPTkRfcHNfVFJVRUAJJChNQUtFSU5ERVhfUEFUSCkgcmVmbWFuLmlkeDsgXAorQERYX0NPTkRfZG9jX1RSVUVAQERYX0NPTkRfcHNfVFJVRUAJJChEWF9MQVRFWCkgcmVmbWFuLnRleDsgXAorQERYX0NPTkRfZG9jX1RSVUVAQERYX0NPTkRfcHNfVFJVRUAJY291bnRkb3duPTU7IFwKK0BEWF9DT05EX2RvY19UUlVFQEBEWF9DT05EX3BzX1RSVUVACXdoaWxlICQoRFhfRUdSRVApICdSZXJ1biAoTGFUZVh8dG8gZ2V0IGNyb3NzLXJlZmVyZW5jZXMgcmlnaHQpJyBcCitARFhfQ09ORF9kb2NfVFJVRUBARFhfQ09ORF9wc19UUlVFQAkgICAgICAgICAgICAgICAgICByZWZtYW4ubG9nID4gL2Rldi9udWxsIDI+JjEgXAorQERYX0NPTkRfZG9jX1RSVUVAQERYX0NPTkRfcHNfVFJVRUAJICAgJiYgdGVzdCAkJGNvdW50ZG93biAtZ3QgMDsgZG8gXAorQERYX0NPTkRfZG9jX1RSVUVAQERYX0NPTkRfcHNfVFJVRUAJICAgICQoRFhfTEFURVgpIHJlZm1hbi50ZXg7IFwKK0BEWF9DT05EX2RvY19UUlVFQEBEWF9DT05EX3BzX1RSVUVACSAgICBjb3VudGRvd249YGV4cHIgJCRjb3VudGRvd24gLSAxYDsgXAorQERYX0NPTkRfZG9jX1RSVUVAQERYX0NPTkRfcHNfVFJVRUAJZG9uZTsgXAorQERYX0NPTkRfZG9jX1RSVUVAQERYX0NPTkRfcHNfVFJVRUAJJChEWF9EVklQUykgLW8gLi4vQFBBQ0tBR0VALnBzIHJlZm1hbi5kdmkKKworQERYX0NPTkRfZG9jX1RSVUVAQERYX0NPTkRfcGRmX1RSVUVAZG94eWdlbi1wZGY6IEBEWF9ET0NESVJAL0BQQUNLQUdFQC5wZGYKKworQERYX0NPTkRfZG9jX1RSVUVAQERYX0NPTkRfcGRmX1RSVUVAQERYX0RPQ0RJUkAvQFBBQ0tBR0VALnBkZjogQERYX0RPQ0RJUkAvQFBBQ0tBR0VALnRhZworQERYX0NPTkRfZG9jX1RSVUVAQERYX0NPTkRfcGRmX1RSVUVACWNkIEBEWF9ET0NESVJAL2xhdGV4OyBcCitARFhfQ09ORF9kb2NfVFJVRUBARFhfQ09ORF9wZGZfVFJVRUAJcm0gLWYgKi5hdXggKi50b2MgKi5pZHggKi5pbmQgKi5pbGcgKi5sb2cgKi5vdXQ7IFwKK0BEWF9DT05EX2RvY19UUlVFQEBEWF9DT05EX3BkZl9UUlVFQAkkKERYX1BERkxBVEVYKSByZWZtYW4udGV4OyBcCitARFhfQ09ORF9kb2NfVFJVRUBARFhfQ09ORF9wZGZfVFJVRUAJJChEWF9NQUtFSU5ERVgpIHJlZm1hbi5pZHg7IFwKK0BEWF9DT05EX2RvY19UUlVFQEBEWF9DT05EX3BkZl9UUlVFQAkkKERYX1BERkxBVEVYKSByZWZtYW4udGV4OyBcCitARFhfQ09ORF9kb2NfVFJVRUBARFhfQ09ORF9wZGZfVFJVRUAJY291bnRkb3duPTU7IFwKK0BEWF9DT05EX2RvY19UUlVFQEBEWF9DT05EX3BkZl9UUlVFQAl3aGlsZSAkKERYX0VHUkVQKSAnUmVydW4gKExhVGVYfHRvIGdldCBjcm9zcy1yZWZlcmVuY2VzIHJpZ2h0KScgXAorQERYX0NPTkRfZG9jX1RSVUVAQERYX0NPTkRfcGRmX1RSVUVACSAgICAgICAgICAgICAgICAgIHJlZm1hbi5sb2cgPiAvZGV2L251bGwgMj4mMSBcCitARFhfQ09ORF9kb2NfVFJVRUBARFhfQ09ORF9wZGZfVFJVRUAJICAgJiYgdGVzdCAkJGNvdW50ZG93biAtZ3QgMDsgZG8gXAorQERYX0NPTkRfZG9jX1RSVUVAQERYX0NPTkRfcGRmX1RSVUVACSAgICAkKERYX1BERkxBVEVYKSByZWZtYW4udGV4OyBcCitARFhfQ09ORF9kb2NfVFJVRUBARFhfQ09ORF9wZGZfVFJVRUAJICAgIGNvdW50ZG93bj1gZXhwciAkJGNvdW50ZG93biAtIDFgOyBcCitARFhfQ09ORF9kb2NfVFJVRUBARFhfQ09ORF9wZGZfVFJVRUAJZG9uZTsgXAorQERYX0NPTkRfZG9jX1RSVUVAQERYX0NPTkRfcGRmX1RSVUVACW12IHJlZm1hbi5wZGYgLi4vQFBBQ0tBR0VALnBkZgorCitARFhfQ09ORF9kb2NfVFJVRUAuUEhPTlk6IGRveHlnZW4tcnVuIGRveHlnZW4tZG9jICQoRFhfUFNfR09BTCkgJChEWF9QREZfR09BTCkKKworQERYX0NPTkRfZG9jX1RSVUVALklOVEVSTUVESUFURTogZG94eWdlbi1ydW4gJChEWF9QU19HT0FMKSAkKERYX1BERl9HT0FMKQorCitARFhfQ09ORF9kb2NfVFJVRUBkb3h5Z2VuLXJ1bjogQERYX0RPQ0RJUkAvQFBBQ0tBR0VALnRhZworCitARFhfQ09ORF9kb2NfVFJVRUBkb3h5Z2VuLWRvYzogZG94eWdlbi1ydW4gJChEWF9QU19HT0FMKSAkKERYX1BERl9HT0FMKQorCitARFhfQ09ORF9kb2NfVFJVRUBARFhfRE9DRElSQC9AUEFDS0FHRUAudGFnOiAkKERYX0NPTkZJRykgJChwa2dpbmNsdWRlX0hFQURFUlMpICQoRFhfSU5QVVQpICQoRFhfRVhBTVBMRV9QQVRIKS8kKERYX0VYQU1QTEVfUEFUVEVSTlMpCitARFhfQ09ORF9kb2NfVFJVRUAJcm0gLXJmIEBEWF9ET0NESVJACitARFhfQ09ORF9kb2NfVFJVRUAJSU5QVVQ9JyQoRFhfSU5QVVQpJyBFWEFNUExFX1BBVEg9JyQoRFhfRVhBTVBMRV9QQVRIKScgRVhBTVBMRV9QQVRURVJOUz0nJChEWF9FWEFNUExFX1BBVFRFUk5TKScgXAorQERYX0NPTkRfZG9jX1RSVUVACSQoRFhfRU5WKSAkKERYX0RPWFlHRU4pICQoc3JjZGlyKS8kKERYX0NPTkZJRykKKworJS5wYzogJS5wYy5pbgorCSQoQU1fVl9HRU4pc2VkIC1lICdzLEBwcmVmaXhcQCwkKHByZWZpeCksZycgXAorCSAgICAtZSAncyxAbGliZGlyXEAsJChsaWJkaXIpLGcnIFwKKwkgICAgLWUgJ3MsQEhPV0xfQ09NUEFUX1ZFUlNJT05cQCwkKEhPV0xfQ09NUEFUX1ZFUlNJT04pLGcnIFwKKwkgICAgLWUgJ3MsQFBBQ0tBR0VfVkVSU0lPTlxALCQoUEFDS0FHRV9WRVJTSU9OKSxnJyAkPCA+ICRACisKK2F2YWhpLmRldmhlbHA6IGRveHlnZW4tcnVuCisJeHNsdHByb2MgLW8gJEAgZG94eWdlbl90b19kZXZoZWxwLnhzbCBkb3h5Z2VuL3htbC9pbmRleC54bWwKKworaG9tZXBhZ2U6CisJJChNQUtFKSAtQyBtYW4KKwlzY3AgYXZhaGktZGFlbW9uLyoueG1sIGF2YWhpLWRhZW1vbi9pbnRyb3NwZWN0LmR0ZCBhdmFoaS1kYWVtb24vaW50cm9zcGVjdC54c2xcCisJICAgIG1hbi8qLnhtbCBtYW4veG1sdG9tYW4uZHRkIG1hbi94bWx0b21hbi54c2wgXAorCSAgICB0YW5nbzp3d3cvYXZhaGkub3JnL3RyZWUvZG93bmxvYWQvCisJc2NwIGF2YWhpLSQoUEFDS0FHRV9WRVJTSU9OKS50YXIuZ3ogdGFuZ286d3d3L2F2YWhpLm9yZy90cmVlL2Rvd25sb2FkLworCXJtIC1yZiBkb3h5Z2VuCisJJChNQUtFKSBkb3h5Z2VuLXJ1bgorCXNzaCB0YW5nbyBybSAtcmYgd3d3L2F2YWhpLm9yZy90cmVlL2Rvd25sb2FkL2RveHlnZW4KKwlzY3AgLXIgZG94eWdlbi9odG1sIHRhbmdvOnd3dy9hdmFoaS5vcmcvdHJlZS9kb3dubG9hZC9kb3h5Z2VuCisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9SRUFETUUgYi9hdmFoaS0wLjYuMzEvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMjg3NGMKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvUkVBRE1FCkBAIC0wLDAgKzEsMzQgQEAKK0FWQUhJIFNFUlZJQ0UgRElTQ09WRVJZIFNVSVRFCisKK1dFQiBTSVRFOgorCWh0dHA6Ly9hdmFoaS5vcmcvCisKK0dJVDoKKwlnaXQ6Ly9naXQuMHBvaW50ZXIuZGUvYXZhaGkuZ2l0CisKK0dJVFdFQjoKKwlodHRwOi8vZ2l0LjBwb2ludGVyLmRlLz9wPWF2YWhpLmdpdDthPXN1bW1hcnkKKworTUFJTElORyBMSVNUOgorCWh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9hdmFoaQorCitHSVQgQ09NTUlUUyBNQUlMSU5HIExJU1Q6CisJaHR0cHM6Ly90YW5nby4wcG9pbnRlci5kZS9tYWlsbWFuL2xpc3RpbmZvL2F2YWhpLWNvbW1pdHMKKworVFJBQyBUSUNLRVQgQ0hBTkdFUyBNQUlMSU5HIExJU1Q6CisJaHR0cHM6Ly90YW5nby4wcG9pbnRlci5kZS9tYWlsbWFuL2xpc3RpbmZvL2F2YWhpLXRpY2tldHMKKworSVJDOgorCSNhdmFoaSBvbiBpcmMuZnJlZW5vZGUub3JnCisKK0NJQToKKwlodHRwOi8vY2lhLm5hdmkuY3gvc3RhdHMvcHJvamVjdC9hdmFoaQorCitGUkVTSE1FQVQ6CisJaHR0cDovL2ZyZXNobWVhdC5uZXQvcHJvamVjdHMvYXZhaGkvCisKK09ITE9IOgorCWh0dHA6Ly93d3cub2hsb2gubmV0L3Byb2plY3RzL2F2YWhpLworCitBVVRIT1JTOgorCVNldmVyYWwKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hY2luY2x1ZGUubTQgYi9hdmFoaS0wLjYuMzEvYWNpbmNsdWRlLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkMDc5OTkKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYWNpbmNsdWRlLm00CkBAIC0wLDAgKzEgQEAKK3NpbmNsdWRlKGNvbW1vbi9kb3h5Z2VuLm00KQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hY2xvY2FsLm00IGIvYXZhaGktMC42LjMxL2FjbG9jYWwubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJjMTA5MwotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hY2xvY2FsLm00CkBAIC0wLDAgKzEsMTg5MyBAQAorIyBnZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBhY2xvY2FsIDEuMTEuMyAtKi0gQXV0b2NvbmYgLSotCisKKyMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LAorIyAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyMgSW5jLgorIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCittNF9pZm5kZWYoW0FDX0FVVE9DT05GX1ZFUlNJT05dLAorICBbbTRfY29weShbbTRfUEFDS0FHRV9WRVJTSU9OXSwgW0FDX0FVVE9DT05GX1ZFUlNJT05dKV0pZG5sCittNF9pZihtNF9kZWZuKFtBQ19BVVRPQ09ORl9WRVJTSU9OXSksIFsyLjY4XSwsCitbbTRfd2FybmluZyhbdGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgZm9yIGF1dG9jb25mIDIuNjguCitZb3UgaGF2ZSBhbm90aGVyIHZlcnNpb24gb2YgYXV0b2NvbmYuICBJdCBtYXkgd29yaywgYnV0IGlzIG5vdCBndWFyYW50ZWVkIHRvLgorSWYgeW91IGhhdmUgcHJvYmxlbXMsIHlvdSBtYXkgbmVlZCB0byByZWdlbmVyYXRlIHRoZSBidWlsZCBzeXN0ZW0gZW50aXJlbHkuCitUbyBkbyBzbywgdXNlIHRoZSBwcm9jZWR1cmUgZG9jdW1lbnRlZCBieSB0aGUgcGFja2FnZSwgdHlwaWNhbGx5IGBhdXRvcmVjb25mJy5dKV0pCisKKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMjAwMS0yMDAzLDIwMDQgUmVkIEhhdCwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisjIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisjIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisjCisjIFRoaXMgZmlsZSBjYW4gYmUgY29waWVkIGFuZCB1c2VkIGZyZWVseSB3aXRob3V0IHJlc3RyaWN0aW9ucy4gIEl0IGNhbgorIyBiZSB1c2VkIGluIHByb2plY3RzIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIHVuZGVyIHRoZSBHTlUgUHVibGljIExpY2Vuc2UKKyMgYnV0IHdoaWNoIHN0aWxsIHdhbnQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgR05VIGdldHRleHQgZnVuY3Rpb25hbGl0eS4KKyMKKyMgTWFjcm8gdG8gYWRkIGZvciB1c2luZyBHTlUgZ2V0dGV4dC4KKyMgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDE5OTUsIDE5OTYKKyMKKyMgTW9kaWZpZWQgdG8gbmV2ZXIgdXNlIGluY2x1ZGVkIGxpYmludGwuIAorIyBPd2VuIFRheWxvciA8b3RheWxvckByZWRoYXQuY29tPiwgMTIvMTUvMTk5OAorIworIyBNYWpvciByZXdvcmsgdG8gcmVtb3ZlIHVudXNlZCBjb2RlCisjIE93ZW4gVGF5bG9yIDxvdGF5bG9yQHJlZGhhdC5jb20+LCAxMi8xMS8yMDAyCisjCisjIEFkZGVkIGJldHRlciBoYW5kbGluZyBvZiBBTExfTElOR1VBUyBmcm9tIEdOVSBnZXR0ZXh0IHZlcnNpb24gCisjIHdyaXR0ZW4gYnkgQnJ1bm8gSGFpYmxlLCBPd2VuIFRheWxvciA8b3RheWxvci5yZWRoYXQuY29tPiA1LzMwLzMwMDIKKyMKKyMgTW9kaWZpZWQgdG8gcmVxdWlyZSBuZ2V0dGV4dAorIyBNYXR0aGlhcyBDbGFzZW4gPG1jbGFzZW5AcmVkaGF0LmNvbT4gMDgvMDYvMjAwNAorIworIyBXZSBuZWVkIHRoaXMgaGVyZSBhcyB3ZWxsLCBzaW5jZSBzb21lb25lIG1pZ2h0IHVzZSBhdXRvY29uZi0yLjV4CisjIHRvIGNvbmZpZ3VyZSBHTGliIHRoZW4gYW4gb2xkZXIgdmVyc2lvbiB0byBjb25maWd1cmUgYSBwYWNrYWdlCisjIHVzaW5nIEFNX0dMSUJfR05VX0dFVFRFWFQKK0FDX1BSRVJFUSgyLjUzKQorCitkbmwKK2RubCBXZSBnbyB0byBncmVhdCBsZW5ndGhzIHRvIG1ha2Ugc3VyZSB0aGF0IGFjbG9jYWwgd29uJ3QgCitkbmwgdHJ5IHRvIHB1bGwgaW4gdGhlIGluc3RhbGxlZCB2ZXJzaW9uIG9mIHRoZXNlIG1hY3JvcworZG5sIHdoZW4gcnVubmluZyBhY2xvY2FsIGluIHRoZSBnbGliIGRpcmVjdG9yeS4KK2RubAorbTRfY29weShbQUNfREVGVU5dLFtnbGliX0RFRlVOXSkKK200X2NvcHkoW0FDX1JFUVVJUkVdLFtnbGliX1JFUVVJUkVdKQorZG5sCitkbmwgQXQgdGhlIGVuZCwgaWYgd2UncmUgbm90IHdpdGhpbiBnbGliLCB3ZSdsbCBkZWZpbmUgdGhlIHB1YmxpYworZG5sIGRlZmluaXRpb25zIGluIHRlcm1zIG9mIG91ciBwcml2YXRlIGRlZmluaXRpb25zLgorZG5sCisKKyMgR0xJQl9MQ19NRVNTQUdFUworIy0tLS0tLS0tLS0tLS0tLS0tLS0tCitnbGliX0RFRlVOKFtHTElCX0xDX01FU1NBR0VTXSwKKyAgW0FDX0NIRUNLX0hFQURFUlMoW2xvY2FsZS5oXSkKKyAgICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfbG9jYWxlX2ggPSB5ZXM7IHRoZW4KKyAgICBBQ19DQUNIRV9DSEVDSyhbZm9yIExDX01FU1NBR0VTXSwgYW1fY3ZfdmFsX0xDX01FU1NBR0VTLAorICAgICAgW0FDX1RSWV9MSU5LKFsjaW5jbHVkZSA8bG9jYWxlLmg+XSwgW3JldHVybiBMQ19NRVNTQUdFU10sCisgICAgICAgYW1fY3ZfdmFsX0xDX01FU1NBR0VTPXllcywgYW1fY3ZfdmFsX0xDX01FU1NBR0VTPW5vKV0pCisgICAgaWYgdGVzdCAkYW1fY3ZfdmFsX0xDX01FU1NBR0VTID0geWVzOyB0aGVuCisgICAgICBBQ19ERUZJTkUoSEFWRV9MQ19NRVNTQUdFUywgMSwKKyAgICAgICAgW0RlZmluZSBpZiB5b3VyIDxsb2NhbGUuaD4gZmlsZSBkZWZpbmVzIExDX01FU1NBR0VTLl0pCisgICAgZmkKKyAgZmldKQorCisjIEdMSUJfUEFUSF9QUk9HX1dJVEhfVEVTVAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBHTElCX1BBVEhfUFJPR19XSVRIX1RFU1QoVkFSSUFCTEUsIFBST0ctVE8tQ0hFQ0stRk9SLAorZG5sICAgVEVTVC1QRVJGT1JNRUQtT04tRk9VTkRfUFJPR1JBTSBbLCBWQUxVRS1JRi1OT1QtRk9VTkQgWywgUEFUSF1dKQorZ2xpYl9ERUZVTihbR0xJQl9QQVRIX1BST0dfV0lUSF9URVNUXSwKK1sjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiQyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkMjsgYWNfd29yZD1bJF0yCitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciAkYWNfd29yZF0pCitBQ19DQUNIRV9WQUwoYWNfY3ZfcGF0aF8kMSwKK1tjYXNlICJbJF0kMSIgaW4KKyAgLyopCisgIGFjX2N2X3BhdGhfJDE9IlskXSQxIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgSUZTPSIke0lGUz0gCX0iOyBhY19zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9OiIKKyAgZm9yIGFjX2RpciBpbiBpZmVsc2UoWyQ1XSwgLCAkUEFUSCwgWyQ1XSk7IGRvCisgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICBpZiB0ZXN0IC1mICRhY19kaXIvJGFjX3dvcmQ7IHRoZW4KKyAgICAgIGlmIFskM107IHRoZW4KKwlhY19jdl9wYXRoXyQxPSIkYWNfZGlyLyRhY193b3JkIgorCWJyZWFrCisgICAgICBmaQorICAgIGZpCisgIGRvbmUKKyAgSUZTPSIkYWNfc2F2ZV9pZnMiCitkbmwgSWYgbm8gNHRoIGFyZyBpcyBnaXZlbiwgbGVhdmUgdGhlIGNhY2hlIHZhcmlhYmxlIHVuc2V0LAorZG5sIHNvIEFDX1BBVEhfUFJPR1Mgd2lsbCBrZWVwIGxvb2tpbmcuCitpZmVsc2UoWyQ0XSwgLCAsIFsgIHRlc3QgLXogIlskXWFjX2N2X3BhdGhfJDEiICYmIGFjX2N2X3BhdGhfJDE9IiQ0IgorXSlkbmwKKyAgOzsKK2VzYWNdKWRubAorJDE9IiRhY19jdl9wYXRoXyQxIgoraWYgdGVzdCBpZmVsc2UoWyQ0XSwgLCBbLW4gIlskXSQxIl0sIFsiWyRdJDEiICE9ICIkNCJdKTsgdGhlbgorICBBQ19NU0dfUkVTVUxUKFskXSQxKQorZWxzZQorICBBQ19NU0dfUkVTVUxUKG5vKQorZmkKK0FDX1NVQlNUKCQxKWRubAorXSkKKworIyBHTElCX1dJVEhfTkxTCisjLS0tLS0tLS0tLS0tLS0tLS0KK2dsaWJfREVGVU4oW0dMSUJfV0lUSF9OTFNdLAorICBkbmwgTkxTIGlzIG9ibGlnYXRvcnkKKyAgW1VTRV9OTFM9eWVzCisgICAgQUNfU1VCU1QoVVNFX05MUykKKworICAgIGd0X2N2X2hhdmVfZ2V0dGV4dD1ubworCisgICAgQ0FUT0JKRVhUPU5PTkUKKyAgICBYR0VUVEVYVD06CisgICAgSU5UTExJQlM9CisKKyAgICBBQ19DSEVDS19IRUFERVIobGliaW50bC5oLAorICAgICBbZ3RfY3ZfZnVuY19kZ2V0dGV4dF9saWJpbnRsPSJubyIKKyAgICAgIGxpYmludGxfZXh0cmFfbGlicz0iIgorCisgICAgICAjCisgICAgICAjIEZpcnN0IGNoZWNrIGluIGxpYmMKKyAgICAgICMKKyAgICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgbmdldHRleHQgaW4gbGliY10sIGd0X2N2X2Z1bmNfbmdldHRleHRfbGliYywKKyAgICAgICAgW0FDX1RSWV9MSU5LKFsKKyNpbmNsdWRlIDxsaWJpbnRsLmg+CitdLAorICAgICAgICAgW3JldHVybiAhbmdldHRleHQgKCIiLCIiLCAxKV0sCisJICBndF9jdl9mdW5jX25nZXR0ZXh0X2xpYmM9eWVzLAorICAgICAgICAgIGd0X2N2X2Z1bmNfbmdldHRleHRfbGliYz1ubykKKyAgICAgICAgXSkKKyAgCisgICAgICBpZiB0ZXN0ICIkZ3RfY3ZfZnVuY19uZ2V0dGV4dF9saWJjIiA9ICJ5ZXMiIDsgdGhlbgorCSAgICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgZGdldHRleHQgaW4gbGliY10sIGd0X2N2X2Z1bmNfZGdldHRleHRfbGliYywKKyAgICAgICAgCVtBQ19UUllfTElOSyhbCisjaW5jbHVkZSA8bGliaW50bC5oPgorXSwKKwkgICAgICAgICAgW3JldHVybiAhZGdldHRleHQgKCIiLCIiKV0sCisJCSAgZ3RfY3ZfZnVuY19kZ2V0dGV4dF9saWJjPXllcywKKwkgICAgICAgICAgZ3RfY3ZfZnVuY19kZ2V0dGV4dF9saWJjPW5vKQorICAgICAgICAJXSkKKyAgICAgIGZpCisgIAorICAgICAgaWYgdGVzdCAiJGd0X2N2X2Z1bmNfbmdldHRleHRfbGliYyIgPSAieWVzIiA7IHRoZW4KKyAgICAgICAgQUNfQ0hFQ0tfRlVOQ1MoYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQpCisgICAgICBmaQorCisgICAgICAjCisgICAgICAjIElmIHdlIGRvbid0IGhhdmUgZXZlcnl0aGluZyB3ZSB3YW50LCBjaGVjayBpbiBsaWJpbnRsCisgICAgICAjCisgICAgICBpZiB0ZXN0ICIkZ3RfY3ZfZnVuY19kZ2V0dGV4dF9saWJjIiAhPSAieWVzIiBcCisJIHx8IHRlc3QgIiRndF9jdl9mdW5jX25nZXR0ZXh0X2xpYmMiICE9ICJ5ZXMiIFwKKyAgICAgICAgIHx8IHRlc3QgIiRhY19jdl9mdW5jX2JpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IiAhPSAieWVzIiA7IHRoZW4KKyAgICAgICAgCisgICAgICAgIEFDX0NIRUNLX0xJQihpbnRsLCBiaW5kdGV4dGRvbWFpbiwKKwkgICAgW0FDX0NIRUNLX0xJQihpbnRsLCBuZ2V0dGV4dCwKKwkJICAgIFtBQ19DSEVDS19MSUIoaW50bCwgZGdldHRleHQsCisJCQkgICAgICAgICAgZ3RfY3ZfZnVuY19kZ2V0dGV4dF9saWJpbnRsPXllcyldKV0pCisKKwlpZiB0ZXN0ICIkZ3RfY3ZfZnVuY19kZ2V0dGV4dF9saWJpbnRsIiAhPSAieWVzIiA7IHRoZW4KKwkgIEFDX01TR19DSEVDS0lORyhbaWYgLWxpY29udiBpcyBuZWVkZWQgdG8gdXNlIGdldHRleHRdKQorCSAgQUNfTVNHX1JFU1VMVChbXSkKKyAgCSAgQUNfQ0hFQ0tfTElCKGludGwsIG5nZXR0ZXh0LAorICAgICAgICAgIAlbQUNfQ0hFQ0tfTElCKGludGwsIGRjZ2V0dGV4dCwKKwkJICAgICAgIFtndF9jdl9mdW5jX2RnZXR0ZXh0X2xpYmludGw9eWVzCisJCQlsaWJpbnRsX2V4dHJhX2xpYnM9LWxpY29udl0sCisJCQk6LC1saWNvbnYpXSwKKwkJOiwtbGljb252KQorICAgICAgICBmaQorCisgICAgICAgICMKKyAgICAgICAgIyBJZiB3ZSBmb3VuZCBsaWJpbnRsLCB0aGVuIGNoZWNrIGluIGl0IGZvciBiaW5kX3RleHRkb21haW5fY29kZXNldCgpOworICAgICAgICAjIHdlJ2xsIHByZWZlciBsaWJjIGlmIG5laXRoZXIgaGF2ZSBiaW5kX3RleHRkb21haW5fY29kZXNldCgpLAorICAgICAgICAjIGFuZCBib3RoIGhhdmUgZGdldHRleHQgYW5kIG5nZXR0ZXh0CisgICAgICAgICMKKyAgICAgICAgaWYgdGVzdCAiJGd0X2N2X2Z1bmNfZGdldHRleHRfbGliaW50bCIgPSAieWVzIiA7IHRoZW4KKyAgICAgICAgICBnbGliX3NhdmVfTElCUz0iJExJQlMiCisgICAgICAgICAgTElCUz0iJExJQlMgLWxpbnRsICRsaWJpbnRsX2V4dHJhX2xpYnMiCisgICAgICAgICAgdW5zZXQgYWNfY3ZfZnVuY19iaW5kX3RleHRkb21haW5fY29kZXNldAorICAgICAgICAgIEFDX0NIRUNLX0ZVTkNTKGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0KQorICAgICAgICAgIExJQlM9IiRnbGliX3NhdmVfTElCUyIKKworICAgICAgICAgIGlmIHRlc3QgIiRhY19jdl9mdW5jX2JpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IiA9ICJ5ZXMiIDsgdGhlbgorICAgICAgICAgICAgZ3RfY3ZfZnVuY19kZ2V0dGV4dF9saWJjPW5vCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgaWYgdGVzdCAiJGd0X2N2X2Z1bmNfZGdldHRleHRfbGliYyIgPSAieWVzIiBcCisJCSYmIHRlc3QgIiRndF9jdl9mdW5jX25nZXR0ZXh0X2xpYmMiID0gInllcyI7IHRoZW4KKyAgICAgICAgICAgICAgZ3RfY3ZfZnVuY19kZ2V0dGV4dF9saWJpbnRsPW5vCisgICAgICAgICAgICBmaQorICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0ICIkZ3RfY3ZfZnVuY19kZ2V0dGV4dF9saWJjIiA9ICJ5ZXMiIFwKKwl8fCB0ZXN0ICIkZ3RfY3ZfZnVuY19kZ2V0dGV4dF9saWJpbnRsIiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgIGd0X2N2X2hhdmVfZ2V0dGV4dD15ZXMKKyAgICAgIGZpCisgIAorICAgICAgaWYgdGVzdCAiJGd0X2N2X2Z1bmNfZGdldHRleHRfbGliaW50bCIgPSAieWVzIjsgdGhlbgorICAgICAgICBJTlRMTElCUz0iLWxpbnRsICRsaWJpbnRsX2V4dHJhX2xpYnMiCisgICAgICBmaQorICAKKyAgICAgIGlmIHRlc3QgIiRndF9jdl9oYXZlX2dldHRleHQiID0gInllcyI7IHRoZW4KKwlBQ19ERUZJTkUoSEFWRV9HRVRURVhULDEsCisJICBbRGVmaW5lIGlmIHRoZSBHTlUgZ2V0dGV4dCgpIGZ1bmN0aW9uIGlzIGFscmVhZHkgcHJlc2VudCBvciBwcmVpbnN0YWxsZWQuXSkKKwlHTElCX1BBVEhfUFJPR19XSVRIX1RFU1QoTVNHRk1ULCBtc2dmbXQsCisJICBbdGVzdCAteiAiYCRhY19kaXIvJGFjX3dvcmQgLWggMj4mMSB8IGdyZXAgJ2R2ICdgIl0sIG5vKWRubAorCWlmIHRlc3QgIiRNU0dGTVQiICE9ICJubyI7IHRoZW4KKyAgICAgICAgICBnbGliX3NhdmVfTElCUz0iJExJQlMiCisgICAgICAgICAgTElCUz0iJExJQlMgJElOVExMSUJTIgorCSAgQUNfQ0hFQ0tfRlVOQ1MoZGNnZXR0ZXh0KQorCSAgTVNHRk1UX09QVFM9CisJICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIG1zZ2ZtdCBhY2NlcHRzIC1jXSkKKwkgIEdMSUJfUlVOX1BST0coWyRNU0dGTVQgLWMgLW8gL2Rldi9udWxsXSxbCittc2dpZCAiIgorbXNnc3RyICIiCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiUHJvamVjdC1JZC1WZXJzaW9uOiB0ZXN0IDEuMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDctMDItMTUgMTI6MDErMDEwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogdGVzdCA8Zm9vQGJhci54eD5cbiIKKyJMYW5ndWFnZS1UZWFtOiBDIDxMTEBsaS5vcmc+XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCitdLCBbTVNHRk1UX09QVFM9LWM7IEFDX01TR19SRVNVTFQoW3llc10pXSwgW0FDX01TR19SRVNVTFQoW25vXSldKQorCSAgQUNfU1VCU1QoTVNHRk1UX09QVFMpCisJICBBQ19QQVRIX1BST0coR01TR0ZNVCwgZ21zZ2ZtdCwgJE1TR0ZNVCkKKwkgIEdMSUJfUEFUSF9QUk9HX1dJVEhfVEVTVChYR0VUVEVYVCwgeGdldHRleHQsCisJICAgIFt0ZXN0IC16ICJgJGFjX2Rpci8kYWNfd29yZCAtaCAyPiYxIHwgZ3JlcCAnKEhFTFApJ2AiXSwgOikKKwkgIEFDX1RSWV9MSU5LKCwgW2V4dGVybiBpbnQgX25sX21zZ19jYXRfY250cjsKKwkJCSByZXR1cm4gX25sX21zZ19jYXRfY250cl0sCisJICAgIFtDQVRPQkpFWFQ9LmdtbyAKKyAgICAgICAgICAgICBEQVRBRElSTkFNRT1zaGFyZV0sCisJICAgIFtjYXNlICRob3N0IGluCisJICAgICotKi1zb2xhcmlzKikKKwkgICAgZG5sIE9uIFNvbGFyaXMsIGlmIGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IGlzIGluIGxpYmMsCisJICAgIGRubCBHTlUgZm9ybWF0IG1lc3NhZ2UgY2F0YWxvZyBpcyBhbHdheXMgc3VwcG9ydGVkLAorICAgICAgICAgICAgZG5sIHNpbmNlIGJvdGggYXJlIGFkZGVkIHRvIHRoZSBsaWJjIGFsbCB0b2dldGhlci4KKwkgICAgZG5sIEhlbmNlLCB3ZSdkIGxpa2UgdG8gZ28gd2l0aCBEQVRBRElSTkFNRT1zaGFyZSBhbmQKKwkgICAgZG5sIGFuZCBDQVRPQkpFWFQ9LmdtbyBpbiB0aGlzIGNhc2UuCisgICAgICAgICAgICBBQ19DSEVDS19GVU5DKGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0LAorCSAgICAgIFtDQVRPQkpFWFQ9LmdtbyAKKyAgICAgICAgICAgICAgIERBVEFESVJOQU1FPXNoYXJlXSwKKwkgICAgICBbQ0FUT0JKRVhUPS5tbworICAgICAgICAgICAgICAgREFUQURJUk5BTUU9bGliXSkKKwkgICAgOzsKKwkgICAgKi0qLW9wZW5ic2QqKQorCSAgICBDQVRPQkpFWFQ9Lm1vCisgICAgICAgICAgICBEQVRBRElSTkFNRT1zaGFyZQorCSAgICA7OworCSAgICAqKQorCSAgICBDQVRPQkpFWFQ9Lm1vCisgICAgICAgICAgICBEQVRBRElSTkFNRT1saWIKKwkgICAgOzsKKwkgICAgZXNhY10pCisgICAgICAgICAgTElCUz0iJGdsaWJfc2F2ZV9MSUJTIgorCSAgSU5TVE9CSkVYVD0ubW8KKwllbHNlCisJICBndF9jdl9oYXZlX2dldHRleHQ9bm8KKwlmaQorICAgICAgZmkKKyAgICBdKQorCisgICAgaWYgdGVzdCAiJGd0X2N2X2hhdmVfZ2V0dGV4dCIgPSAieWVzIiA7IHRoZW4KKyAgICAgIEFDX0RFRklORShFTkFCTEVfTkxTLCAxLAorICAgICAgICBbYWx3YXlzIGRlZmluZWQgdG8gaW5kaWNhdGUgdGhhdCBpMThuIGlzIGVuYWJsZWRdKQorICAgIGZpCisKKyAgICBkbmwgVGVzdCB3aGV0aGVyIHdlIHJlYWxseSBmb3VuZCBHTlUgeGdldHRleHQuCisgICAgaWYgdGVzdCAiJFhHRVRURVhUIiAhPSAiOiI7IHRoZW4KKyAgICAgIGRubCBJZiBpdCBpcyBub3QgR05VIHhnZXR0ZXh0IHdlIGRlZmluZSBpdCBhcyA6IHNvIHRoYXQgdGhlCisgICAgICBkbmwgTWFrZWZpbGVzIHN0aWxsIGNhbiB3b3JrLgorICAgICAgaWYgJFhHRVRURVhUIC0tb21pdC1oZWFkZXIgL2Rldi9udWxsIDI+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICA6IDsKKyAgICAgIGVsc2UKKyAgICAgICAgQUNfTVNHX1JFU1VMVCgKKwkgIFtmb3VuZCB4Z2V0dGV4dCBwcm9ncmFtIGlzIG5vdCBHTlUgeGdldHRleHQ7IGlnbm9yZSBpdF0pCisgICAgICAgIFhHRVRURVhUPSI6IgorICAgICAgZmkKKyAgICBmaQorCisgICAgIyBXZSBuZWVkIHRvIHByb2Nlc3MgdGhlIHBvLyBkaXJlY3RvcnkuCisgICAgUE9TVUI9cG8KKworICAgIEFDX09VVFBVVF9DT01NQU5EUygKKyAgICAgIFtjYXNlICIkQ09ORklHX0ZJTEVTIiBpbiAqcG8vTWFrZWZpbGUuaW4qKQorICAgICAgICBzZWQgLWUgIi9QT1RGSUxFUyA9L3IgcG8vUE9URklMRVMiIHBvL01ha2VmaWxlLmluID4gcG8vTWFrZWZpbGUKKyAgICAgIGVzYWNdKQorCisgICAgZG5sIFRoZXNlIHJ1bGVzIGFyZSBzb2xlbHkgZm9yIHRoZSBkaXN0cmlidXRpb24gZ29hbC4gIFdoaWxlIGRvaW5nIHRoaXMKKyAgICBkbmwgd2Ugb25seSBoYXZlIHRvIGtlZXAgZXhhY3RseSBvbmUgbGlzdCBvZiB0aGUgYXZhaWxhYmxlIGNhdGFsb2dzCisgICAgZG5sIGluIGNvbmZpZ3VyZS5hYy4KKyAgICBmb3IgbGFuZyBpbiAkQUxMX0xJTkdVQVM7IGRvCisgICAgICBHTU9GSUxFUz0iJEdNT0ZJTEVTICRsYW5nLmdtbyIKKyAgICAgIFBPRklMRVM9IiRQT0ZJTEVTICRsYW5nLnBvIgorICAgIGRvbmUKKworICAgIGRubCBNYWtlIGFsbCB2YXJpYWJsZXMgd2UgdXNlIGtub3duIHRvIGF1dG9jb25mLgorICAgIEFDX1NVQlNUKENBVEFMT0dTKQorICAgIEFDX1NVQlNUKENBVE9CSkVYVCkKKyAgICBBQ19TVUJTVChEQVRBRElSTkFNRSkKKyAgICBBQ19TVUJTVChHTU9GSUxFUykKKyAgICBBQ19TVUJTVChJTlNUT0JKRVhUKQorICAgIEFDX1NVQlNUKElOVExMSUJTKQorICAgIEFDX1NVQlNUKFBPX0lOX0RBVEFESVJfVFJVRSkKKyAgICBBQ19TVUJTVChQT19JTl9EQVRBRElSX0ZBTFNFKQorICAgIEFDX1NVQlNUKFBPRklMRVMpCisgICAgQUNfU1VCU1QoUE9TVUIpCisgIF0pCisKKyMgQU1fR0xJQl9HTlVfR0VUVEVYVAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tCisjIERvIGNoZWNrcyBuZWNlc3NhcnkgZm9yIHVzZSBvZiBnZXR0ZXh0LiBJZiBhIHN1aXRhYmxlIGltcGxlbWVudGF0aW9uIAorIyBvZiBnZXR0ZXh0IGlzIGZvdW5kIGluIGVpdGhlciBpbiBsaWJpbnRsIG9yIGluIHRoZSBDIGxpYnJhcnksCisjIGl0IHdpbGwgc2V0IElOVExMSUJTIHRvIHRoZSBsaWJyYXJpZXMgbmVlZGVkIGZvciB1c2Ugb2YgZ2V0dGV4dAorIyBhbmQgQUNfREVGSU5FKCkgSEFWRV9HRVRURVhUIGFuZCBFTkFCTEVfTkxTLiAoVGhlIHNoZWxsIHZhcmlhYmxlCisjIGd0X2N2X2hhdmVfZ2V0dGV4dCB3aWxsIGJlIHNldCB0byAieWVzIi4pIEl0IHdpbGwgYWxzbyBjYWxsIEFDX1NVQlNUKCkKKyMgb24gdmFyaW91cyB2YXJpYWJsZXMgbmVlZGVkIGJ5IHRoZSBNYWtlZmlsZS5pbi5pbiBpbnN0YWxsZWQgYnkgCisjIGdsaWItZ2V0dGV4dGl6ZS4KK2RubAorZ2xpYl9ERUZVTihbR0xJQl9HTlVfR0VUVEVYVF0sCisgIFtBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKKyAgIEFDX1JFUVVJUkUoW0FDX0hFQURFUl9TVERDXSlkbmwKKyAgIAorICAgR0xJQl9MQ19NRVNTQUdFUworICAgR0xJQl9XSVRIX05MUworCisgICBpZiB0ZXN0ICIkZ3RfY3ZfaGF2ZV9nZXR0ZXh0IiA9ICJ5ZXMiOyB0aGVuCisgICAgIGlmIHRlc3QgIngkQUxMX0xJTkdVQVMiID0gIngiOyB0aGVuCisgICAgICAgTElOR1VBUz0KKyAgICAgZWxzZQorICAgICAgIEFDX01TR19DSEVDS0lORyhmb3IgY2F0YWxvZ3MgdG8gYmUgaW5zdGFsbGVkKQorICAgICAgIE5FV19MSU5HVUFTPQorICAgICAgIGZvciBwcmVzZW50bGFuZyBpbiAkQUxMX0xJTkdVQVM7IGRvCisgICAgICAgICB1c2VpdD1ubworICAgICAgICAgaWYgdGVzdCAiJVVOU0VUJSIgIT0gIiR7TElOR1VBUy0lVU5TRVQlfSI7IHRoZW4KKyAgICAgICAgICAgZGVzaXJlZGxhbmd1YWdlcz0iJExJTkdVQVMiCisgICAgICAgICBlbHNlCisgICAgICAgICAgIGRlc2lyZWRsYW5ndWFnZXM9IiRBTExfTElOR1VBUyIKKyAgICAgICAgIGZpCisgICAgICAgICBmb3IgZGVzaXJlZGxhbmcgaW4gJGRlc2lyZWRsYW5ndWFnZXM7IGRvCisgCSAgICMgVXNlIHRoZSBwcmVzZW50bGFuZyBjYXRhbG9nIGlmIGRlc2lyZWRsYW5nIGlzCisgICAgICAgICAgICMgICBhLiBlcXVhbCB0byBwcmVzZW50bGFuZywgb3IKKyAgICAgICAgICAgIyAgIGIuIGEgdmFyaWFudCBvZiBwcmVzZW50bGFuZyAoYmVjYXVzZSBpbiB0aGlzIGNhc2UsCisgICAgICAgICAgICMgICAgICBwcmVzZW50bGFuZyBjYW4gYmUgdXNlZCBhcyBhIGZhbGxiYWNrIGZvciBtZXNzYWdlcworICAgICAgICAgICAjICAgICAgd2hpY2ggYXJlIG5vdCB0cmFuc2xhdGVkIGluIHRoZSBkZXNpcmVkbGFuZyBjYXRhbG9nKS4KKyAgICAgICAgICAgY2FzZSAiJGRlc2lyZWRsYW5nIiBpbgorICAgICAgICAgICAgICIkcHJlc2VudGxhbmciKikgdXNlaXQ9eWVzOzsKKyAgICAgICAgICAgZXNhYworICAgICAgICAgZG9uZQorICAgICAgICAgaWYgdGVzdCAkdXNlaXQgPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgTkVXX0xJTkdVQVM9IiRORVdfTElOR1VBUyAkcHJlc2VudGxhbmciCisgICAgICAgICBmaQorICAgICAgIGRvbmUKKyAgICAgICBMSU5HVUFTPSRORVdfTElOR1VBUworICAgICAgIEFDX01TR19SRVNVTFQoJExJTkdVQVMpCisgICAgIGZpCisKKyAgICAgZG5sIENvbnN0cnVjdCBsaXN0IG9mIG5hbWVzIG9mIGNhdGFsb2cgZmlsZXMgdG8gYmUgY29uc3RydWN0ZWQuCisgICAgIGlmIHRlc3QgLW4gIiRMSU5HVUFTIjsgdGhlbgorICAgICAgIGZvciBsYW5nIGluICRMSU5HVUFTOyBkbyBDQVRBTE9HUz0iJENBVEFMT0dTICRsYW5nJENBVE9CSkVYVCI7IGRvbmUKKyAgICAgZmkKKyAgIGZpCisKKyAgIGRubCBJZiB0aGUgQUNfQ09ORklHX0FVWF9ESVIgbWFjcm8gZm9yIGF1dG9jb25mIGlzIHVzZWQgd2UgcG9zc2libHkKKyAgIGRubCBmaW5kIHRoZSBta2luc3RhbGxkaXJzIHNjcmlwdCBpbiBhbm90aGVyIHN1YmRpciBidXQgKCR0b3Bfc3JjZGlyKS4KKyAgIGRubCBUcnkgdG8gbG9jYXRlIGlzLgorICAgTUtJTlNUQUxMRElSUz0KKyAgIGlmIHRlc3QgLW4gIiRhY19hdXhfZGlyIjsgdGhlbgorICAgICBNS0lOU1RBTExESVJTPSIkYWNfYXV4X2Rpci9ta2luc3RhbGxkaXJzIgorICAgZmkKKyAgIGlmIHRlc3QgLXogIiRNS0lOU1RBTExESVJTIjsgdGhlbgorICAgICBNS0lOU1RBTExESVJTPSJcJCh0b3Bfc3JjZGlyKS9ta2luc3RhbGxkaXJzIgorICAgZmkKKyAgIEFDX1NVQlNUKE1LSU5TVEFMTERJUlMpCisKKyAgIGRubCBHZW5lcmF0ZSBsaXN0IG9mIGZpbGVzIHRvIGJlIHByb2Nlc3NlZCBieSB4Z2V0dGV4dCB3aGljaCB3aWxsCisgICBkbmwgYmUgaW5jbHVkZWQgaW4gcG8vTWFrZWZpbGUuCisgICB0ZXN0IC1kIHBvIHx8IG1rZGlyIHBvCisgICBpZiB0ZXN0ICJ4JHNyY2RpciIgIT0gInguIjsgdGhlbgorICAgICBpZiB0ZXN0ICJ4YGVjaG8gJHNyY2RpciB8IHNlZCAnc0AvLipAQCdgIiA9ICJ4IjsgdGhlbgorICAgICAgIHBvc3JjcHJlZml4PSIkc3JjZGlyLyIKKyAgICAgZWxzZQorICAgICAgIHBvc3JjcHJlZml4PSIuLi8kc3JjZGlyLyIKKyAgICAgZmkKKyAgIGVsc2UKKyAgICAgcG9zcmNwcmVmaXg9Ii4uLyIKKyAgIGZpCisgICBybSAtZiBwby9QT1RGSUxFUworICAgc2VkIC1lICIvXiMvZCIgLWUgIi9eXCQvZCIgLWUgInMsLiosCSRwb3NyY3ByZWZpeCYgXFxcXCwiIC1lICJcJHMvXCguKlwpIFxcXFwvXDEvIiBcCisJPCAkc3JjZGlyL3BvL1BPVEZJTEVTLmluID4gcG8vUE9URklMRVMKKyAgXSkKKworIyBBTV9HTElCX0RFRklORV9MT0NBTEVESVIoVkFSSUFCTEUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVmaW5lIFZBUklBQkxFIHRvIHRoZSBsb2NhdGlvbiB3aGVyZSBjYXRhbG9nIGZpbGVzIHdpbGwKKyMgYmUgaW5zdGFsbGVkIGJ5IHBvL01ha2VmaWxlLgorZ2xpYl9ERUZVTihbR0xJQl9ERUZJTkVfTE9DQUxFRElSXSwKK1tnbGliX1JFUVVJUkUoW0dMSUJfR05VX0dFVFRFWFRdKWRubAorZ2xpYl9zYXZlX3ByZWZpeD0iJHByZWZpeCIKK2dsaWJfc2F2ZV9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgorZ2xpYl9zYXZlX2RhdGFyb290ZGlyPSIkZGF0YXJvb3RkaXIiCit0ZXN0ICJ4JHByZWZpeCIgPSB4Tk9ORSAmJiBwcmVmaXg9JGFjX2RlZmF1bHRfcHJlZml4Cit0ZXN0ICJ4JGV4ZWNfcHJlZml4IiA9IHhOT05FICYmIGV4ZWNfcHJlZml4PSRwcmVmaXgKK2RhdGFyb290ZGlyPWBldmFsIGVjaG8gIiR7ZGF0YXJvb3RkaXJ9ImAKK2lmIHRlc3QgIngkQ0FUT0JKRVhUIiA9ICJ4Lm1vIiA7IHRoZW4KKyAgbG9jYWxlZGlyPWBldmFsIGVjaG8gIiR7bGliZGlyfS9sb2NhbGUiYAorZWxzZQorICBsb2NhbGVkaXI9YGV2YWwgZWNobyAiJHtkYXRhZGlyfS9sb2NhbGUiYAorZmkKK3ByZWZpeD0iJGdsaWJfc2F2ZV9wcmVmaXgiCitleGVjX3ByZWZpeD0iJGdsaWJfc2F2ZV9leGVjX3ByZWZpeCIKK2RhdGFyb290ZGlyPSIkZ2xpYl9zYXZlX2RhdGFyb290ZGlyIgorQUNfREVGSU5FX1VOUVVPVEVEKCQxLCAiJGxvY2FsZWRpciIsCisgIFtEZWZpbmUgdGhlIGxvY2F0aW9uIHdoZXJlIHRoZSBjYXRhbG9ncyB3aWxsIGJlIGluc3RhbGxlZF0pCitdKQorCitkbmwKK2RubCBOb3cgdGhlIGRlZmluaXRpb25zIHRoYXQgYWNsb2NhbCB3aWxsIGZpbmQKK2RubAoraWZkZWYoZ2xpYl9jb25maWd1cmVfYWMsW10sWworQUNfREVGVU4oW0FNX0dMSUJfR05VX0dFVFRFWFRdLFtHTElCX0dOVV9HRVRURVhUKCRAKV0pCitBQ19ERUZVTihbQU1fR0xJQl9ERUZJTkVfTE9DQUxFRElSXSxbR0xJQl9ERUZJTkVfTE9DQUxFRElSKCRAKV0pCitdKWRubAorCisjIEdMSUJfUlVOX1BST0coUFJPR1JBTSwgVEVTVC1GSUxFLCBbQUNUSU9OLUlGLVBBU1NdLCBbQUNUSU9OLUlGLUZBSUxdKQorIyAKKyMgQ3JlYXRlIGEgdGVtcG9yYXJ5IGZpbGUgd2l0aCBURVNULUZJTEUgYXMgaXRzIGNvbnRlbnRzIGFuZCBwYXNzIHRoZQorIyBmaWxlIG5hbWUgdG8gUFJPR1JBTS4gIFBlcmZvcm0gQUNUSU9OLUlGLVBBU1MgaWYgUFJPR1JBTSBleGl0cyB3aXRoCisjIDAgYW5kIHBlcmZvcm0gQUNUSU9OLUlGLUZBSUwgZm9yIGFueSBvdGhlciBleGl0IHN0YXR1cy4KK0FDX0RFRlVOKFtHTElCX1JVTl9QUk9HXSwKK1tjYXQgPmNvbmZ0ZXN0LmZvbyA8PF9BQ0VPRgorJDIKK19BQ0VPRgoraWYgQUNfUlVOX0xPRyhbJDEgY29uZnRlc3QuZm9vXSk7IHRoZW4KKyAgbTRfaWZ2YWwoWyQzXSwgWyQzXSwgWzpdKQorbTRfaWZ2YWxuKFskNF0sIFtlbHNlICQ0XSlkbmwKK2VjaG8gIiRhc19tZTogZmFpbGVkIGlucHV0IHdhczoiID4mQVNfTUVTU0FHRV9MT0dfRkQKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuZm9vID4mQVNfTUVTU0FHRV9MT0dfRkQKK2ZpXSkKKworCisjIHBrZy5tNCAtIE1hY3JvcyB0byBsb2NhdGUgYW5kIHV0aWxpc2UgcGtnLWNvbmZpZy4gICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisjIHNlcmlhbCAxIChwa2ctY29uZmlnLTAuMjQpCisjIAorIyBDb3B5cmlnaHQgwqkgMjAwNCBTY290dCBKYW1lcyBSZW1uYW50IDxzY290dEBuZXRzcGxpdC5jb20+LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorIworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKKyMgUEtHX1BST0dfUEtHX0NPTkZJRyhbTUlOLVZFUlNJT05dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbUEtHX1BST0dfUEtHX0NPTkZJR10sCitbbTRfcGF0dGVybl9mb3JiaWQoW15fP1BLR19bQS1aX10rJF0pCittNF9wYXR0ZXJuX2FsbG93KFteUEtHX0NPTkZJRyhfUEFUSCk/JF0pCitBQ19BUkdfVkFSKFtQS0dfQ09ORklHXSwgW3BhdGggdG8gcGtnLWNvbmZpZyB1dGlsaXR5XSkKK0FDX0FSR19WQVIoW1BLR19DT05GSUdfUEFUSF0sIFtkaXJlY3RvcmllcyB0byBhZGQgdG8gcGtnLWNvbmZpZydzIHNlYXJjaCBwYXRoXSkKK0FDX0FSR19WQVIoW1BLR19DT05GSUdfTElCRElSXSwgW3BhdGggb3ZlcnJpZGluZyBwa2ctY29uZmlnJ3MgYnVpbHQtaW4gc2VhcmNoIHBhdGhdKQorCitpZiB0ZXN0ICJ4JGFjX2N2X2Vudl9QS0dfQ09ORklHX3NldCIgIT0gInhzZXQiOyB0aGVuCisJQUNfUEFUSF9UT09MKFtQS0dfQ09ORklHXSwgW3BrZy1jb25maWddKQorZmkKK2lmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgorCV9wa2dfbWluX3ZlcnNpb249bTRfZGVmYXVsdChbJDFdLCBbMC45LjBdKQorCUFDX01TR19DSEVDS0lORyhbcGtnLWNvbmZpZyBpcyBhdCBsZWFzdCB2ZXJzaW9uICRfcGtnX21pbl92ZXJzaW9uXSkKKwlpZiAkUEtHX0NPTkZJRyAtLWF0bGVhc3QtcGtnY29uZmlnLXZlcnNpb24gJF9wa2dfbWluX3ZlcnNpb247IHRoZW4KKwkJQUNfTVNHX1JFU1VMVChbeWVzXSkKKwllbHNlCisJCUFDX01TR19SRVNVTFQoW25vXSkKKwkJUEtHX0NPTkZJRz0iIgorCWZpCitmaVtdZG5sCitdKSMgUEtHX1BST0dfUEtHX0NPTkZJRworCisjIFBLR19DSEVDS19FWElTVFMoTU9EVUxFUywgW0FDVElPTi1JRi1GT1VORF0sIFtBQ1RJT04tSUYtTk9ULUZPVU5EXSkKKyMKKyMgQ2hlY2sgdG8gc2VlIHdoZXRoZXIgYSBwYXJ0aWN1bGFyIHNldCBvZiBtb2R1bGVzIGV4aXN0cy4gIFNpbWlsYXIKKyMgdG8gUEtHX0NIRUNLX01PRFVMRVMoKSwgYnV0IGRvZXMgbm90IHNldCB2YXJpYWJsZXMgb3IgcHJpbnQgZXJyb3JzLgorIworIyBQbGVhc2UgcmVtZW1iZXIgdGhhdCBtNCBleHBhbmRzIEFDX1JFUVVJUkUoW1BLR19QUk9HX1BLR19DT05GSUddKQorIyBvbmx5IGF0IHRoZSBmaXJzdCBvY2N1cmVuY2UgaW4gY29uZmlndXJlLmFjLCBzbyBpZiB0aGUgZmlyc3QgcGxhY2UKKyMgaXQncyBjYWxsZWQgbWlnaHQgYmUgc2tpcHBlZCAoc3VjaCBhcyBpZiBpdCBpcyB3aXRoaW4gYW4gImlmIiwgeW91CisjIGhhdmUgdG8gY2FsbCBQS0dfQ0hFQ0tfRVhJU1RTIG1hbnVhbGx5CisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbUEtHX0NIRUNLX0VYSVNUU10sCitbQUNfUkVRVUlSRShbUEtHX1BST0dfUEtHX0NPTkZJR10pZG5sCitpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgXAorICAgIEFDX1JVTl9MT0coWyRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICIkMSJdKTsgdGhlbgorICBtNF9kZWZhdWx0KFskMl0sIFs6XSkKK200X2lmdmFsbihbJDNdLCBbZWxzZQorICAkM10pZG5sCitmaV0pCisKKyMgX1BLR19DT05GSUcoW1ZBUklBQkxFXSwgW0NPTU1BTkRdLCBbTU9EVUxFU10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtfUEtHX0NPTkZJR10sCitbaWYgdGVzdCAtbiAiJCQxIjsgdGhlbgorICAgIHBrZ19jdl9bXSQxPSIkJDEiCisgZWxpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KKyAgICBQS0dfQ0hFQ0tfRVhJU1RTKFskM10sCisgICAgICAgICAgICAgICAgICAgICBbcGtnX2N2X1tdJDE9YCRQS0dfQ09ORklHIC0tW10kMiAiJDMiIDI+L2Rldi9udWxsYF0sCisJCSAgICAgW3BrZ19mYWlsZWQ9eWVzXSkKKyBlbHNlCisgICAgcGtnX2ZhaWxlZD11bnRyaWVkCitmaVtdZG5sCitdKSMgX1BLR19DT05GSUcKKworIyBfUEtHX1NIT1JUX0VSUk9SU19TVVBQT1JURUQKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtfUEtHX1NIT1JUX0VSUk9SU19TVVBQT1JURURdLAorW0FDX1JFUVVJUkUoW1BLR19QUk9HX1BLR19DT05GSUddKQoraWYgJFBLR19DT05GSUcgLS1hdGxlYXN0LXBrZ2NvbmZpZy12ZXJzaW9uIDAuMjA7IHRoZW4KKyAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPXllcworZWxzZQorICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9bm8KK2ZpW11kbmwKK10pIyBfUEtHX1NIT1JUX0VSUk9SU19TVVBQT1JURUQKKworCisjIFBLR19DSEVDS19NT0RVTEVTKFZBUklBQkxFLVBSRUZJWCwgTU9EVUxFUywgW0FDVElPTi1JRi1GT1VORF0sCisjIFtBQ1RJT04tSUYtTk9ULUZPVU5EXSkKKyMKKyMKKyMgTm90ZSB0aGF0IGlmIHRoZXJlIGlzIGEgcG9zc2liaWxpdHkgdGhlIGZpcnN0IGNhbGwgdG8KKyMgUEtHX0NIRUNLX01PRFVMRVMgbWlnaHQgbm90IGhhcHBlbiwgeW91IHNob3VsZCBiZSBzdXJlIHRvIGluY2x1ZGUgYW4KKyMgZXhwbGljaXQgY2FsbCB0byBQS0dfUFJPR19QS0dfQ09ORklHIGluIHlvdXIgY29uZmlndXJlLmFjCisjCisjCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbUEtHX0NIRUNLX01PRFVMRVNdLAorW0FDX1JFUVVJUkUoW1BLR19QUk9HX1BLR19DT05GSUddKWRubAorQUNfQVJHX1ZBUihbJDFdW19DRkxBR1NdLCBbQyBjb21waWxlciBmbGFncyBmb3IgJDEsIG92ZXJyaWRpbmcgcGtnLWNvbmZpZ10pZG5sCitBQ19BUkdfVkFSKFskMV1bX0xJQlNdLCBbbGlua2VyIGZsYWdzIGZvciAkMSwgb3ZlcnJpZGluZyBwa2ctY29uZmlnXSlkbmwKKworcGtnX2ZhaWxlZD1ubworQUNfTVNHX0NIRUNLSU5HKFtmb3IgJDFdKQorCitfUEtHX0NPTkZJRyhbJDFdW19DRkxBR1NdLCBbY2ZsYWdzXSwgWyQyXSkKK19QS0dfQ09ORklHKFskMV1bX0xJQlNdLCBbbGlic10sIFskMl0pCisKK200X2RlZmluZShbX1BLR19URVhUXSwgW0FsdGVybmF0aXZlbHksIHlvdSBtYXkgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgJDFbXV9DRkxBR1MKK2FuZCAkMVtdX0xJQlMgdG8gYXZvaWQgdGhlIG5lZWQgdG8gY2FsbCBwa2ctY29uZmlnLgorU2VlIHRoZSBwa2ctY29uZmlnIG1hbiBwYWdlIGZvciBtb3JlIGRldGFpbHMuXSkKKworaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHllczsgdGhlbgorICAgCUFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgICAgX1BLR19TSE9SVF9FUlJPUlNfU1VQUE9SVEVECisgICAgICAgIGlmIHRlc3QgJF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZCA9IHllczsgdGhlbgorCSAgICAgICAgJDFbXV9QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLXNob3J0LWVycm9ycyAtLXByaW50LWVycm9ycyAiJDIiIDI+JjFgCisgICAgICAgIGVsc2UgCisJICAgICAgICAkMVtdX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tcHJpbnQtZXJyb3JzICIkMiIgMj4mMWAKKyAgICAgICAgZmkKKwkjIFB1dCB0aGUgbmFzdHkgZXJyb3IgbWVzc2FnZSBpbiBjb25maWcubG9nIHdoZXJlIGl0IGJlbG9uZ3MKKwllY2hvICIkJDFbXV9QS0dfRVJST1JTIiA+JkFTX01FU1NBR0VfTE9HX0ZECisKKwltNF9kZWZhdWx0KFskNF0sIFtBQ19NU0dfRVJST1IoCitbUGFja2FnZSByZXF1aXJlbWVudHMgKCQyKSB3ZXJlIG5vdCBtZXQ6CisKKyQkMV9QS0dfRVJST1JTCisKK0NvbnNpZGVyIGFkanVzdGluZyB0aGUgUEtHX0NPTkZJR19QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlIGlmIHlvdQoraW5zdGFsbGVkIHNvZnR3YXJlIGluIGEgbm9uLXN0YW5kYXJkIHByZWZpeC4KKworX1BLR19URVhUXSkKKyAgICAgICAgXSkKK2VsaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHVudHJpZWQ7IHRoZW4KKyAgICAgCUFDX01TR19SRVNVTFQoW25vXSkKKwltNF9kZWZhdWx0KFskNF0sIFtBQ19NU0dfRkFJTFVSRSgKK1tUaGUgcGtnLWNvbmZpZyBzY3JpcHQgY291bGQgbm90IGJlIGZvdW5kIG9yIGlzIHRvbyBvbGQuICBNYWtlIHN1cmUgaXQKK2lzIGluIHlvdXIgUEFUSCBvciBzZXQgdGhlIFBLR19DT05GSUcgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIGZ1bGwKK3BhdGggdG8gcGtnLWNvbmZpZy4KKworX1BLR19URVhUCisKK1RvIGdldCBwa2ctY29uZmlnLCBzZWUgPGh0dHA6Ly9wa2ctY29uZmlnLmZyZWVkZXNrdG9wLm9yZy8+Ll0pCisgICAgICAgIF0pCitlbHNlCisJJDFbXV9DRkxBR1M9JHBrZ19jdl9bXSQxW11fQ0ZMQUdTCisJJDFbXV9MSUJTPSRwa2dfY3ZfW10kMVtdX0xJQlMKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKwkkMworZmlbXWRubAorXSkjIFBLR19DSEVDS19NT0RVTEVTCisKKyMgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzLCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDExIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDEKKworIyBBTV9BVVRPTUFLRV9WRVJTSU9OKFZFUlNJT04pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQXV0b21ha2UgWC5ZIHRyYWNlcyB0aGlzIG1hY3JvIHRvIGVuc3VyZSBhY2xvY2FsLm00IGhhcyBiZWVuCisjIGdlbmVyYXRlZCBmcm9tIHRoZSBtNCBmaWxlcyBhY2NvbXBhbnlpbmcgQXV0b21ha2UgWC5ZLgorIyAoVGhpcyBwcml2YXRlIG1hY3JvIHNob3VsZCBub3QgYmUgY2FsbGVkIG91dHNpZGUgdGhpcyBmaWxlLikKK0FDX0RFRlVOKFtBTV9BVVRPTUFLRV9WRVJTSU9OXSwKK1thbV9fYXBpX3ZlcnNpb249JzEuMTEnCitkbmwgU29tZSB1c2VycyBmaW5kIEFNX0FVVE9NQUtFX1ZFUlNJT04gYW5kIG1pc3Rha2UgaXQgZm9yIGEgd2F5IHRvCitkbmwgcmVxdWlyZSBzb21lIG1pbmltdW0gdmVyc2lvbi4gIFBvaW50IHRoZW0gdG8gdGhlIHJpZ2h0IG1hY3JvLgorbTRfaWYoWyQxXSwgWzEuMTEuM10sIFtdLAorICAgICAgW0FDX0ZBVEFMKFtEbyBub3QgY2FsbCAkMCwgdXNlIEFNX0lOSVRfQVVUT01BS0UoWyQxXSkuXSldKWRubAorXSkKKworIyBfQU1fQVVUT0NPTkZfVkVSU0lPTihWRVJTSU9OKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBhY2xvY2FsIHRyYWNlcyB0aGlzIG1hY3JvIHRvIGZpbmQgdGhlIEF1dG9jb25mIHZlcnNpb24uCisjIFRoaXMgaXMgYSBwcml2YXRlIG1hY3JvIHRvby4gIFVzaW5nIG00X2RlZmluZSBzaW1wbGlmaWVzCisjIHRoZSBsb2dpYyBpbiBhY2xvY2FsLCB3aGljaCBjYW4gc2ltcGx5IGlnbm9yZSB0aGlzIGRlZmluaXRpb24uCittNF9kZWZpbmUoW19BTV9BVVRPQ09ORl9WRVJTSU9OXSwgW10pCisKKyMgQU1fU0VUX0NVUlJFTlRfQVVUT01BS0VfVkVSU0lPTgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENhbGwgQU1fQVVUT01BS0VfVkVSU0lPTiBhbmQgQU1fQVVUT01BS0VfVkVSU0lPTiBzbyB0aGV5IGNhbiBiZSB0cmFjZWQuCisjIFRoaXMgZnVuY3Rpb24gaXMgQUNfUkVRVUlSRWQgYnkgQU1fSU5JVF9BVVRPTUFLRS4KK0FDX0RFRlVOKFtBTV9TRVRfQ1VSUkVOVF9BVVRPTUFLRV9WRVJTSU9OXSwKK1tBTV9BVVRPTUFLRV9WRVJTSU9OKFsxLjExLjNdKWRubAorbTRfaWZuZGVmKFtBQ19BVVRPQ09ORl9WRVJTSU9OXSwKKyAgW200X2NvcHkoW200X1BBQ0tBR0VfVkVSU0lPTl0sIFtBQ19BVVRPQ09ORl9WRVJTSU9OXSldKWRubAorX0FNX0FVVE9DT05GX1ZFUlNJT04obTRfZGVmbihbQUNfQVVUT0NPTkZfVkVSU0lPTl0pKV0pCisKKyMgQU1fQVVYX0RJUl9FWFBBTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDMsIDIwMDUsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgMQorCisjIEZvciBwcm9qZWN0cyB1c2luZyBBQ19DT05GSUdfQVVYX0RJUihbZm9vXSksIEF1dG9jb25mIHNldHMKKyMgJGFjX2F1eF9kaXIgdG8gYCRzcmNkaXIvZm9vJy4gIEluIG90aGVyIHByb2plY3RzLCBpdCBpcyBzZXQgdG8KKyMgYCRzcmNkaXInLCBgJHNyY2Rpci8uLicsIG9yIGAkc3JjZGlyLy4uLy4uJy4KKyMKKyMgT2YgY291cnNlLCBBdXRvbWFrZSBtdXN0IGhvbm9yIHRoaXMgdmFyaWFibGUgd2hlbmV2ZXIgaXQgY2FsbHMgYQorIyB0b29sIGZyb20gdGhlIGF1eGlsaWFyeSBkaXJlY3RvcnkuICBUaGUgcHJvYmxlbSBpcyB0aGF0ICRzcmNkaXIgKGFuZAorIyB0aGVyZWZvcmUgJGFjX2F1eF9kaXIgYXMgd2VsbCkgY2FuIGJlIGVpdGhlciBhYnNvbHV0ZSBvciByZWxhdGl2ZSwKKyMgZGVwZW5kaW5nIG9uIGhvdyBjb25maWd1cmUgaXMgcnVuLiAgVGhpcyBpcyBwcmV0dHkgYW5ub3lpbmcsIHNpbmNlCisjIGl0IG1ha2VzICRhY19hdXhfZGlyIHF1aXRlIHVudXNhYmxlIGluIHN1YmRpcmVjdG9yaWVzOiBpbiB0aGUgdG9wCisjIHNvdXJjZSBkaXJlY3RvcnksIGFueSBmb3JtIHdpbGwgd29yayBmaW5lLCBidXQgaW4gc3ViZGlyZWN0b3JpZXMgYQorIyByZWxhdGl2ZSBwYXRoIG5lZWRzIHRvIGJlIGFkanVzdGVkIGZpcnN0LgorIworIyAkYWNfYXV4X2Rpci9taXNzaW5nCisjICAgIGZhaWxzIHdoZW4gY2FsbGVkIGZyb20gYSBzdWJkaXJlY3RvcnkgaWYgJGFjX2F1eF9kaXIgaXMgcmVsYXRpdmUKKyMgJHRvcF9zcmNkaXIvJGFjX2F1eF9kaXIvbWlzc2luZworIyAgICBmYWlscyBpZiAkYWNfYXV4X2RpciBpcyBhYnNvbHV0ZSwKKyMgICAgZmFpbHMgd2hlbiBjYWxsZWQgZnJvbSBhIHN1YmRpcmVjdG9yeSBpbiBhIFZQQVRIIGJ1aWxkIHdpdGgKKyMgICAgICAgICAgYSByZWxhdGl2ZSAkYWNfYXV4X2RpcgorIworIyBUaGUgcmVhc29uIG9mIHRoZSBsYXR0ZXIgZmFpbHVyZSBpcyB0aGF0ICR0b3Bfc3JjZGlyIGFuZCAkYWNfYXV4X2RpcgorIyBhcmUgYm90aCBwcmVmaXhlZCBieSAkc3JjZGlyLiAgSW4gYW4gaW4tc291cmNlIGJ1aWxkIHRoaXMgaXMgdXN1YWxseQorIyBoYXJtbGVzcyBiZWNhdXNlICRzcmNkaXIgaXMgYC4nLCBidXQgdGhpbmdzIHdpbGwgYnJva2Ugd2hlbiB5b3UKKyMgc3RhcnQgYSBWUEFUSCBidWlsZCBvciB1c2UgYW4gYWJzb2x1dGUgJHNyY2Rpci4KKyMKKyMgU28gd2UgY291bGQgdXNlIHNvbWV0aGluZyBzaW1pbGFyIHRvICR0b3Bfc3JjZGlyLyRhY19hdXhfZGlyL21pc3NpbmcsCisjIGlmZiB3ZSBzdHJpcCB0aGUgbGVhZGluZyAkc3JjZGlyIGZyb20gJGFjX2F1eF9kaXIuICBUaGF0IHdvdWxkIGJlOgorIyAgIGFtX2F1eF9kaXI9J1wkKHRvcF9zcmNkaXIpLydgZXhwciAiJGFjX2F1eF9kaXIiIDogIiRzcmNkaXIvLypcKC4qXCkiYAorIyBhbmQgdGhlbiB3ZSB3b3VsZCBkZWZpbmUgJE1JU1NJTkcgYXMKKyMgICBNSVNTSU5HPSJcJHtTSEVMTH0gJGFtX2F1eF9kaXIvbWlzc2luZyIKKyMgVGhpcyB3aWxsIHdvcmsgYXMgbG9uZyBhcyBNSVNTSU5HIGlzIG5vdCBjYWxsZWQgZnJvbSBjb25maWd1cmUsIGJlY2F1c2UKKyMgdW5mb3J0dW5hdGVseSAkKHRvcF9zcmNkaXIpIGhhcyBubyBtZWFuaW5nIGluIGNvbmZpZ3VyZS4KKyMgSG93ZXZlciB0aGVyZSBhcmUgb3RoZXIgdmFyaWFibGVzLCBsaWtlIENDLCB3aGljaCBhcmUgb2Z0ZW4gdXNlZCBpbgorIyBjb25maWd1cmUsIGFuZCBjb3VsZCB0aGVyZWZvcmUgbm90IHVzZSB0aGlzICJmaXhlZCIgJGFjX2F1eF9kaXIuCisjCisjIEFub3RoZXIgc29sdXRpb24sIHVzZWQgaGVyZSwgaXMgdG8gYWx3YXlzIGV4cGFuZCAkYWNfYXV4X2RpciB0byBhbgorIyBhYnNvbHV0ZSBQQVRILiAgVGhlIGRyYXdiYWNrIGlzIHRoYXQgdXNpbmcgYWJzb2x1dGUgcGF0aHMgcHJldmVudCBhCisjIGNvbmZpZ3VyZWQgdHJlZSB0byBiZSBtb3ZlZCB3aXRob3V0IHJlY29uZmlndXJhdGlvbi4KKworQUNfREVGVU4oW0FNX0FVWF9ESVJfRVhQQU5EXSwKK1tkbmwgUmVseSBvbiBhdXRvY29uZiB0byBzZXQgdXAgQ0RQQVRIIHByb3Blcmx5LgorQUNfUFJFUkVRKFsyLjUwXSlkbmwKKyMgZXhwYW5kICRhY19hdXhfZGlyIHRvIGFuIGFic29sdXRlIHBhdGgKK2FtX2F1eF9kaXI9YGNkICRhY19hdXhfZGlyICYmIHB3ZGAKK10pCisKKyMgQU1fQ09ORElUSU9OQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgKEMpIDE5OTcsIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDgKKyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgOQorCisjIEFNX0NPTkRJVElPTkFMKE5BTUUsIFNIRUxMLUNPTkRJVElPTikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBEZWZpbmUgYSBjb25kaXRpb25hbC4KK0FDX0RFRlVOKFtBTV9DT05ESVRJT05BTF0sCitbQUNfUFJFUkVRKDIuNTIpZG5sCisgaWZlbHNlKFskMV0sIFtUUlVFXSwgIFtBQ19GQVRBTChbJDA6IGludmFsaWQgY29uZGl0aW9uOiAkMV0pXSwKKwlbJDFdLCBbRkFMU0VdLCBbQUNfRkFUQUwoWyQwOiBpbnZhbGlkIGNvbmRpdGlvbjogJDFdKV0pZG5sCitBQ19TVUJTVChbJDFfVFJVRV0pZG5sCitBQ19TVUJTVChbJDFfRkFMU0VdKWRubAorX0FNX1NVQlNUX05PVE1BS0UoWyQxX1RSVUVdKWRubAorX0FNX1NVQlNUX05PVE1BS0UoWyQxX0ZBTFNFXSlkbmwKK200X2RlZmluZShbX0FNX0NPTkRfVkFMVUVfJDFdLCBbJDJdKWRubAoraWYgJDI7IHRoZW4KKyAgJDFfVFJVRT0KKyAgJDFfRkFMU0U9JyMnCitlbHNlCisgICQxX1RSVUU9JyMnCisgICQxX0ZBTFNFPQorZmkKK0FDX0NPTkZJR19DT01NQU5EU19QUkUoCitbaWYgdGVzdCAteiAiJHskMV9UUlVFfSIgJiYgdGVzdCAteiAiJHskMV9GQUxTRX0iOyB0aGVuCisgIEFDX01TR19FUlJPUihbW2NvbmRpdGlvbmFsICIkMSIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS5dXSkKK2ZpXSldKQorCisjIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOSwKKyMgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCAxMgorCisjIFRoZXJlIGFyZSBhIGZldyBkaXJ0eSBoYWNrcyBiZWxvdyB0byBhdm9pZCBsZXR0aW5nIGBBQ19QUk9HX0NDJyBiZQorIyB3cml0dGVuIGluIGNsZWFyLCBpbiB3aGljaCBjYXNlIGF1dG9tYWtlLCB3aGVuIHJlYWRpbmcgYWNsb2NhbC5tNCwKKyMgd2lsbCB0aGluayBpdCBzZWVzIGEgKnVzZSosIGFuZCB0aGVyZWZvcmUgd2lsbCB0cmlnZ2VyIGFsbCBpdCdzCisjIEMgc3VwcG9ydCBtYWNoaW5lcnkuICBBbHNvIG5vdGUgdGhhdCBpdCBtZWFucyB0aGF0IGF1dG9zY2FuLCBzZWVpbmcKKyMgQ0MgZXRjLiBpbiB0aGUgTWFrZWZpbGUsIHdpbGwgYXNrIGZvciBhbiBBQ19QUk9HX0NDIHVzZS4uLgorCisKKyMgX0FNX0RFUEVOREVOQ0lFUyhOQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNlZSBob3cgdGhlIGNvbXBpbGVyIGltcGxlbWVudHMgZGVwZW5kZW5jeSBjaGVja2luZy4KKyMgTkFNRSBpcyAiQ0MiLCAiQ1hYIiwgIkdDSiIsIG9yICJPQkpDIi4KKyMgV2UgdHJ5IGEgZmV3IHRlY2huaXF1ZXMgYW5kIHVzZSB0aGF0IHRvIHNldCBhIHNpbmdsZSBjYWNoZSB2YXJpYWJsZS4KKyMKKyMgV2UgZG9uJ3QgQUNfUkVRVUlSRSB0aGUgY29ycmVzcG9uZGluZyBBQ19QUk9HX0NDIHNpbmNlIHRoZSBsYXR0ZXIgd2FzCisjIG1vZGlmaWVkIHRvIGludm9rZSBfQU1fREVQRU5ERU5DSUVTKENDKTsgd2Ugd291bGQgaGF2ZSBhIGNpcmN1bGFyCisjIGRlcGVuZGVuY3ksIGFuZCBnaXZlbiB0aGF0IHRoZSB1c2VyIGlzIG5vdCBleHBlY3RlZCB0byBydW4gdGhpcyBtYWNybywKKyMganVzdCByZWx5IG9uIEFDX1BST0dfQ0MuCitBQ19ERUZVTihbX0FNX0RFUEVOREVOQ0lFU10sCitbQUNfUkVRVUlSRShbQU1fU0VUX0RFUERJUl0pZG5sCitBQ19SRVFVSVJFKFtBTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EU10pZG5sCitBQ19SRVFVSVJFKFtBTV9NQUtFX0lOQ0xVREVdKWRubAorQUNfUkVRVUlSRShbQU1fREVQX1RSQUNLXSlkbmwKKworaWZlbHNlKFskMV0sIENDLCAgIFtkZXBjYz0iJENDIiAgIGFtX2NvbXBpbGVyX2xpc3Q9XSwKKyAgICAgICBbJDFdLCBDWFgsICBbZGVwY2M9IiRDWFgiICBhbV9jb21waWxlcl9saXN0PV0sCisgICAgICAgWyQxXSwgT0JKQywgW2RlcGNjPSIkT0JKQyIgYW1fY29tcGlsZXJfbGlzdD0nZ2NjMyBnY2MnXSwKKyAgICAgICBbJDFdLCBVUEMsICBbZGVwY2M9IiRVUEMiICBhbV9jb21waWxlcl9saXN0PV0sCisgICAgICAgWyQxXSwgR0NKLCAgW2RlcGNjPSIkR0NKIiAgYW1fY29tcGlsZXJfbGlzdD0nZ2NjMyBnY2MnXSwKKyAgICAgICAgICAgICAgICAgICBbZGVwY2M9IiQkMSIgICBhbV9jb21waWxlcl9saXN0PV0pCisKK0FDX0NBQ0hFX0NIRUNLKFtkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjY10sCisgICAgICAgICAgICAgICBbYW1fY3ZfJDFfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGVdLAorW2lmIHRlc3QgLXogIiRBTURFUF9UUlVFIiAmJiB0ZXN0IC1mICIkYW1fZGVwY29tcCI7IHRoZW4KKyAgIyBXZSBtYWtlIGEgc3ViZGlyIGFuZCBkbyB0aGUgdGVzdHMgdGhlcmUuICBPdGhlcndpc2Ugd2UgY2FuIGVuZCB1cAorICAjIG1ha2luZyBib2d1cyBmaWxlcyB0aGF0IHdlIGRvbid0IGtub3cgYWJvdXQgYW5kIG5ldmVyIHJlbW92ZS4gIEZvcgorICAjIGluc3RhbmNlIGl0IHdhcyByZXBvcnRlZCB0aGF0IG9uIEhQLVVYIHRoZSBnY2MgdGVzdCB3aWxsIGVuZCB1cAorICAjIG1ha2luZyBhIGR1bW15IGZpbGUgbmFtZWQgYEQnIC0tIGJlY2F1c2UgYC1NRCcgbWVhbnMgYHB1dCB0aGUgb3V0cHV0CisgICMgaW4gRCcuCisgIHJtIC1yZiBjb25mdGVzdC5kaXIKKyAgbWtkaXIgY29uZnRlc3QuZGlyCisgICMgQ29weSBkZXBjb21wIHRvIHN1YmRpciBiZWNhdXNlIG90aGVyd2lzZSB3ZSB3b24ndCBmaW5kIGl0IGlmIHdlJ3JlCisgICMgdXNpbmcgYSByZWxhdGl2ZSBkaXJlY3RvcnkuCisgIGNwICIkYW1fZGVwY29tcCIgY29uZnRlc3QuZGlyCisgIGNkIGNvbmZ0ZXN0LmRpcgorICAjIFdlIHdpbGwgYnVpbGQgb2JqZWN0cyBhbmQgZGVwZW5kZW5jaWVzIGluIGEgc3ViZGlyZWN0b3J5IGJlY2F1c2UKKyAgIyBpdCBoZWxwcyB0byBkZXRlY3QgaW5hcHBsaWNhYmxlIGRlcGVuZGVuY3kgbW9kZXMuICBGb3IgaW5zdGFuY2UKKyAgIyBib3RoIFRydTY0J3MgY2MgYW5kIElDQyBzdXBwb3J0IC1NRCB0byBvdXRwdXQgZGVwZW5kZW5jaWVzIGFzIGEKKyAgIyBzaWRlIGVmZmVjdCBvZiBjb21waWxhdGlvbiwgYnV0IElDQyB3aWxsIHB1dCB0aGUgZGVwZW5kZW5jaWVzIGluCisgICMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHdoaWxlIFRydTY0IHdpbGwgcHV0IHRoZW0gaW4gdGhlIG9iamVjdAorICAjIGRpcmVjdG9yeS4KKyAgbWtkaXIgc3ViCisKKyAgYW1fY3ZfJDFfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9bm9uZQorICBpZiB0ZXN0ICIkYW1fY29tcGlsZXJfbGlzdCIgPSAiIjsgdGhlbgorICAgICBhbV9jb21waWxlcl9saXN0PWBzZWQgLW4gWydzL14jKlwoW2EtekEtWjAtOV0qXCkpJC9cMS9wJ10gPCAuL2RlcGNvbXBgCisgIGZpCisgIGFtX191bml2ZXJzYWw9ZmFsc2UKKyAgbTRfY2FzZShbJDFdLCBbQ0NdLAorICAgIFtjYXNlICIgJGRlcGNjICIgaW4gIygKKyAgICAgKlwgLWFyY2hcICpcIC1hcmNoXCAqKSBhbV9fdW5pdmVyc2FsPXRydWUgOzsKKyAgICAgZXNhY10sCisgICAgW0NYWF0sCisgICAgW2Nhc2UgIiAkZGVwY2MgIiBpbiAjKAorICAgICAqXCAtYXJjaFwgKlwgLWFyY2hcICopIGFtX191bml2ZXJzYWw9dHJ1ZSA7OworICAgICBlc2FjXSkKKworICBmb3IgZGVwbW9kZSBpbiAkYW1fY29tcGlsZXJfbGlzdDsgZG8KKyAgICAjIFNldHVwIGEgc291cmNlIHdpdGggbWFueSBkZXBlbmRlbmNpZXMsIGJlY2F1c2Ugc29tZSBjb21waWxlcnMKKyAgICAjIGxpa2UgdG8gd3JhcCBsYXJnZSBkZXBlbmRlbmN5IGxpc3RzIG9uIGNvbHVtbiA4MCAod2l0aCBcKSwgYW5kCisgICAgIyB3ZSBzaG91bGQgbm90IGNob29zZSBhIGRlcGNvbXAgbW9kZSB3aGljaCBpcyBjb25mdXNlZCBieSB0aGlzLgorICAgICMKKyAgICAjIFdlIG5lZWQgdG8gcmVjcmVhdGUgdGhlc2UgZmlsZXMgZm9yIGVhY2ggdGVzdCwgYXMgdGhlIGNvbXBpbGVyIG1heQorICAgICMgb3ZlcndyaXRlIHNvbWUgb2YgdGhlbSB3aGVuIHRlc3Rpbmcgd2l0aCBvYnNjdXJlIGNvbW1hbmQgbGluZXMuCisgICAgIyBUaGlzIGhhcHBlbnMgYXQgbGVhc3Qgd2l0aCB0aGUgQUlYIEMgY29tcGlsZXIuCisgICAgOiA+IHN1Yi9jb25mdGVzdC5jCisgICAgZm9yIGkgaW4gMSAyIDMgNCA1IDY7IGRvCisgICAgICBlY2hvICcjaW5jbHVkZSAiY29uZnRzdCckaScuaCInID4+IHN1Yi9jb25mdGVzdC5jCisgICAgICAjIFVzaW5nIGA6ID4gc3ViL2NvbmZ0c3QkaS5oJyBjcmVhdGVzIG9ubHkgc3ViL2NvbmZ0c3QxLmggd2l0aAorICAgICAgIyBTb2xhcmlzIDgncyB7L3Vzcix9L2Jpbi9zaC4KKyAgICAgIHRvdWNoIHN1Yi9jb25mdHN0JGkuaAorICAgIGRvbmUKKyAgICBlY2hvICIke2FtX19pbmNsdWRlfSAke2FtX19xdW90ZX1zdWIvY29uZnRlc3QuUG8ke2FtX19xdW90ZX0iID4gY29uZm1mCisKKyAgICAjIFdlIGNoZWNrIHdpdGggYC1jJyBhbmQgYC1vJyBmb3IgdGhlIHNha2Ugb2YgdGhlICJkYXNobXN0ZG91dCIKKyAgICAjIG1vZGUuICBJdCB0dXJucyBvdXQgdGhhdCB0aGUgU3VuUHJvIEMrKyBjb21waWxlciBkb2VzIG5vdCBwcm9wZXJseQorICAgICMgaGFuZGxlIGAtTSAtbycsIGFuZCB3ZSBuZWVkIHRvIGRldGVjdCB0aGlzLiAgQWxzbywgc29tZSBJbnRlbAorICAgICMgdmVyc2lvbnMgaGFkIHRyb3VibGUgd2l0aCBvdXRwdXQgaW4gc3ViZGlycworICAgIGFtX19vYmo9c3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99CisgICAgYW1fX21pbnVzX29iaj0iLW8gJGFtX19vYmoiCisgICAgY2FzZSAkZGVwbW9kZSBpbgorICAgIGdjYykKKyAgICAgICMgVGhpcyBkZXBtb2RlIGNhdXNlcyBhIGNvbXBpbGVyIHJhY2UgaW4gdW5pdmVyc2FsIG1vZGUuCisgICAgICB0ZXN0ICIkYW1fX3VuaXZlcnNhbCIgPSBmYWxzZSB8fCBjb250aW51ZQorICAgICAgOzsKKyAgICBub3NpZGVlZmZlY3QpCisgICAgICAjIGFmdGVyIHRoaXMgdGFnLCBtZWNoYW5pc21zIGFyZSBub3QgYnkgc2lkZS1lZmZlY3QsIHNvIHRoZXknbGwKKyAgICAgICMgb25seSBiZSB1c2VkIHdoZW4gZXhwbGljaXRseSByZXF1ZXN0ZWQKKyAgICAgIGlmIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciID0geHllczsgdGhlbgorCWNvbnRpbnVlCisgICAgICBlbHNlCisJYnJlYWsKKyAgICAgIGZpCisgICAgICA7OworICAgIG1zdmM3IHwgbXN2Yzdtc3lzIHwgbXN2aXN1YWxjcHAgfCBtc3ZjbXN5cykKKyAgICAgICMgVGhpcyBjb21waWxlciB3b24ndCBncm9rIGAtYyAtbycsIGJ1dCBhbHNvLCB0aGUgbWludXNvIHRlc3QgaGFzCisgICAgICAjIG5vdCBydW4geWV0LiAgVGhlc2UgZGVwbW9kZXMgYXJlIGxhdGUgZW5vdWdoIGluIHRoZSBnYW1lLCBhbmQKKyAgICAgICMgc28gd2VhayB0aGF0IHRoZWlyIGZ1bmN0aW9uaW5nIHNob3VsZCBub3QgYmUgaW1wYWN0ZWQuCisgICAgICBhbV9fb2JqPWNvbmZ0ZXN0LiR7T0JKRVhULW99CisgICAgICBhbV9fbWludXNfb2JqPQorICAgICAgOzsKKyAgICBub25lKSBicmVhayA7OworICAgIGVzYWMKKyAgICBpZiBkZXBtb2RlPSRkZXBtb2RlIFwKKyAgICAgICBzb3VyY2U9c3ViL2NvbmZ0ZXN0LmMgb2JqZWN0PSRhbV9fb2JqIFwKKyAgICAgICBkZXBmaWxlPXN1Yi9jb25mdGVzdC5QbyB0bXBkZXBmaWxlPXN1Yi9jb25mdGVzdC5UUG8gXAorICAgICAgICRTSEVMTCAuL2RlcGNvbXAgJGRlcGNjIC1jICRhbV9fbWludXNfb2JqIHN1Yi9jb25mdGVzdC5jIFwKKyAgICAgICAgID4vZGV2L251bGwgMj5jb25mdGVzdC5lcnIgJiYKKyAgICAgICBncmVwIHN1Yi9jb25mdHN0MS5oIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgZ3JlcCBzdWIvY29uZnRzdDYuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorICAgICAgIGdyZXAgJGFtX19vYmogc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKKyAgICAgICAke01BS0UtbWFrZX0gLXMgLWYgY29uZm1mID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgICMgaWNjIGRvZXNuJ3QgY2hva2Ugb24gdW5rbm93biBvcHRpb25zLCBpdCB3aWxsIGp1c3QgaXNzdWUgd2FybmluZ3MKKyAgICAgICMgb3IgcmVtYXJrcyAoZXZlbiB3aXRoIC1XZXJyb3IpLiAgU28gd2UgZ3JlcCBzdGRlcnIgZm9yIGFueSBtZXNzYWdlCisgICAgICAjIHRoYXQgc2F5cyBhbiBvcHRpb24gd2FzIGlnbm9yZWQgb3Igbm90IHN1cHBvcnRlZC4KKyAgICAgICMgV2hlbiBnaXZlbiAtTVAsIGljYyA3LjAgYW5kIDcuMSBjb21wbGFpbiB0aHVzbHk6CisgICAgICAjICAgaWNjOiBDb21tYW5kIGxpbmUgd2FybmluZzogaWdub3Jpbmcgb3B0aW9uICctTSc7IG5vIGFyZ3VtZW50IHJlcXVpcmVkCisgICAgICAjIFRoZSBkaWFnbm9zaXMgY2hhbmdlZCBpbiBpY2MgOC4wOgorICAgICAgIyAgIGljYzogQ29tbWFuZCBsaW5lIHJlbWFyazogb3B0aW9uICctTVAnIG5vdCBzdXBwb3J0ZWQKKyAgICAgIGlmIChncmVwICdpZ25vcmluZyBvcHRpb24nIGNvbmZ0ZXN0LmVyciB8fAorICAgICAgICAgIGdyZXAgJ25vdCBzdXBwb3J0ZWQnIGNvbmZ0ZXN0LmVycikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDo7IGVsc2UKKyAgICAgICAgYW1fY3ZfJDFfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9JGRlcG1vZGUKKyAgICAgICAgYnJlYWsKKyAgICAgIGZpCisgICAgZmkKKyAgZG9uZQorCisgIGNkIC4uCisgIHJtIC1yZiBjb25mdGVzdC5kaXIKK2Vsc2UKKyAgYW1fY3ZfJDFfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9bm9uZQorZmkKK10pCitBQ19TVUJTVChbJDFERVBNT0RFXSwgW2RlcG1vZGU9JGFtX2N2XyQxX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlXSkKK0FNX0NPTkRJVElPTkFMKFthbV9fZmFzdGRlcCQxXSwgWworICB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiAhPSB4bm8gXAorICAmJiB0ZXN0ICIkYW1fY3ZfJDFfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID0gZ2NjM10pCitdKQorCisKKyMgQU1fU0VUX0RFUERJUgorIyAtLS0tLS0tLS0tLS0tCisjIENob29zZSBhIGRpcmVjdG9yeSBuYW1lIGZvciBkZXBlbmRlbmN5IGZpbGVzLgorIyBUaGlzIG1hY3JvIGlzIEFDX1JFUVVJUkVkIGluIF9BTV9ERVBFTkRFTkNJRVMKK0FDX0RFRlVOKFtBTV9TRVRfREVQRElSXSwKK1tBQ19SRVFVSVJFKFtBTV9TRVRfTEVBRElOR19ET1RdKWRubAorQUNfU1VCU1QoW0RFUERJUl0sIFsiJHthbV9fbGVhZGluZ19kb3R9ZGVwcyJdKWRubAorXSkKKworCisjIEFNX0RFUF9UUkFDSworIyAtLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtBTV9ERVBfVFJBQ0tdLAorW0FDX0FSR19FTkFCTEUoZGVwZW5kZW5jeS10cmFja2luZywKK1sgIC0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nICBzcGVlZHMgdXAgb25lLXRpbWUgYnVpbGQKKyAgLS1lbmFibGUtZGVwZW5kZW5jeS10cmFja2luZyAgIGRvIG5vdCByZWplY3Qgc2xvdyBkZXBlbmRlbmN5IGV4dHJhY3RvcnNdKQoraWYgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgIT0geG5vOyB0aGVuCisgIGFtX2RlcGNvbXA9IiRhY19hdXhfZGlyL2RlcGNvbXAiCisgIEFNREVQQkFDS1NMQVNIPSdcJworICBhbV9fbm9kZXA9J19ubycKK2ZpCitBTV9DT05ESVRJT05BTChbQU1ERVBdLCBbdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgIT0geG5vXSkKK0FDX1NVQlNUKFtBTURFUEJBQ0tTTEFTSF0pZG5sCitfQU1fU1VCU1RfTk9UTUFLRShbQU1ERVBCQUNLU0xBU0hdKWRubAorQUNfU1VCU1QoW2FtX19ub2RlcF0pZG5sCitfQU1fU1VCU1RfTk9UTUFLRShbYW1fX25vZGVwXSlkbmwKK10pCisKKyMgR2VuZXJhdGUgY29kZSB0byBzZXQgdXAgZGVwZW5kZW5jeSB0cmFja2luZy4gICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDgKKyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworI3NlcmlhbCA1CisKKyMgX0FNX09VVFBVVF9ERVBFTkRFTkNZX0NPTU1BTkRTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW19BTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EU10sCitbeworICAjIEF1dG9jb25mIDIuNjIgcXVvdGVzIC0tZmlsZSBhcmd1bWVudHMgZm9yIGV2YWwsIGJ1dCBub3Qgd2hlbiBmaWxlcworICAjIGFyZSBsaXN0ZWQgd2l0aG91dCAtLWZpbGUuICBMZXQncyBwbGF5IHNhZmUgYW5kIG9ubHkgZW5hYmxlIHRoZSBldmFsCisgICMgaWYgd2UgZGV0ZWN0IHRoZSBxdW90aW5nLgorICBjYXNlICRDT05GSUdfRklMRVMgaW4KKyAgKlwnKikgZXZhbCBzZXQgeCAiJENPTkZJR19GSUxFUyIgOzsKKyAgKikgICBzZXQgeCAkQ09ORklHX0ZJTEVTIDs7CisgIGVzYWMKKyAgc2hpZnQKKyAgZm9yIG1mCisgIGRvCisgICAgIyBTdHJpcCBNRiBzbyB3ZSBlbmQgdXAgd2l0aCB0aGUgbmFtZSBvZiB0aGUgZmlsZS4KKyAgICBtZj1gZWNobyAiJG1mIiB8IHNlZCAtZSAncy86LiokLy8nYAorICAgICMgQ2hlY2sgd2hldGhlciB0aGlzIGlzIGFuIEF1dG9tYWtlIGdlbmVyYXRlZCBNYWtlZmlsZSBvciBub3QuCisgICAgIyBXZSB1c2VkIHRvIG1hdGNoIG9ubHkgdGhlIGZpbGVzIG5hbWVkIGBNYWtlZmlsZS5pbicsIGJ1dAorICAgICMgc29tZSBwZW9wbGUgcmVuYW1lIHRoZW07IHNvIGluc3RlYWQgd2UgbG9vayBhdCB0aGUgZmlsZSBjb250ZW50LgorICAgICMgR3JlcCdpbmcgdGhlIGZpcnN0IGxpbmUgaXMgbm90IGVub3VnaDogc29tZSBwZW9wbGUgcG9zdC1wcm9jZXNzCisgICAgIyBlYWNoIE1ha2VmaWxlLmluIGFuZCBhZGQgYSBuZXcgbGluZSBvbiB0b3Agb2YgZWFjaCBmaWxlIHRvIHNheSBzby4KKyAgICAjIEdyZXAnaW5nIHRoZSB3aG9sZSBmaWxlIGlzIG5vdCBnb29kIGVpdGhlcjogQUlYIGdyZXAgaGFzIGEgbGluZQorICAgICMgbGltaXQgb2YgMjA0OCwgYnV0IGFsbCBzZWQncyB3ZSBrbm93IGhhdmUgdW5kZXJzdGFuZCBhdCBsZWFzdCA0MDAwLgorICAgIGlmIHNlZCAtbiAncyxeIy4qZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlLiosWCxwJyAiJG1mIiB8IGdyZXAgWCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgIGRpcnBhcnQ9YEFTX0RJUk5BTUUoIiRtZiIpYAorICAgIGVsc2UKKyAgICAgIGNvbnRpbnVlCisgICAgZmkKKyAgICAjIEV4dHJhY3QgdGhlIGRlZmluaXRpb24gb2YgREVQRElSLCBhbV9faW5jbHVkZSwgYW5kIGFtX19xdW90ZQorICAgICMgZnJvbSB0aGUgTWFrZWZpbGUgd2l0aG91dCBydW5uaW5nIGBtYWtlJy4KKyAgICBERVBESVI9YHNlZCAtbiAncy9eREVQRElSID0gLy9wJyA8ICIkbWYiYAorICAgIHRlc3QgLXogIiRERVBESVIiICYmIGNvbnRpbnVlCisgICAgYW1fX2luY2x1ZGU9YHNlZCAtbiAncy9eYW1fX2luY2x1ZGUgPSAvL3AnIDwgIiRtZiJgCisgICAgdGVzdCAteiAiYW1fX2luY2x1ZGUiICYmIGNvbnRpbnVlCisgICAgYW1fX3F1b3RlPWBzZWQgLW4gJ3MvXmFtX19xdW90ZSA9IC8vcCcgPCAiJG1mImAKKyAgICAjIFdoZW4gdXNpbmcgYW5zaTJrbnIsIFUgbWF5IGJlIGVtcHR5IG9yIGFuIHVuZGVyc2NvcmU7IGV4cGFuZCBpdAorICAgIFU9YHNlZCAtbiAncy9eVSA9IC8vcCcgPCAiJG1mImAKKyAgICAjIEZpbmQgYWxsIGRlcGVuZGVuY3kgb3V0cHV0IGZpbGVzLCB0aGV5IGFyZSBpbmNsdWRlZCBmaWxlcyB3aXRoCisgICAgIyAkKERFUERJUikgaW4gdGhlaXIgbmFtZXMuICBXZSBpbnZva2Ugc2VkIHR3aWNlIGJlY2F1c2UgaXQgaXMgdGhlCisgICAgIyBzaW1wbGVzdCBhcHByb2FjaCB0byBjaGFuZ2luZyAkKERFUERJUikgdG8gaXRzIGFjdHVhbCB2YWx1ZSBpbiB0aGUKKyAgICAjIGV4cGFuc2lvbi4KKyAgICBmb3IgZmlsZSBpbiBgc2VkIC1uICIKKyAgICAgIHMvXiRhbV9faW5jbHVkZSAkYW1fX3F1b3RlXCguKihERVBESVIpLipcKSRhbV9fcXVvdGUiJyQvXDEvcCcgPCIkbWYiIHwgXAorCSBzZWQgLWUgJ3MvXCQoREVQRElSKS8nIiRERVBESVIiJy9nJyAtZSAncy9cJFUvJyIkVSInL2cnYDsgZG8KKyAgICAgICMgTWFrZSBzdXJlIHRoZSBkaXJlY3RvcnkgZXhpc3RzLgorICAgICAgdGVzdCAtZiAiJGRpcnBhcnQvJGZpbGUiICYmIGNvbnRpbnVlCisgICAgICBmZGlyPWBBU19ESVJOQU1FKFsiJGZpbGUiXSlgCisgICAgICBBU19NS0RJUl9QKFskZGlycGFydC8kZmRpcl0pCisgICAgICAjIGVjaG8gImNyZWF0aW5nICRkaXJwYXJ0LyRmaWxlIgorICAgICAgZWNobyAnIyBkdW1teScgPiAiJGRpcnBhcnQvJGZpbGUiCisgICAgZG9uZQorICBkb25lCit9CitdKSMgX0FNX09VVFBVVF9ERVBFTkRFTkNZX0NPTU1BTkRTCisKKworIyBBTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUaGlzIG1hY3JvIHNob3VsZCBvbmx5IGJlIGludm9rZWQgb25jZSAtLSB1c2UgdmlhIEFDX1JFUVVJUkUuCisjCisjIFRoaXMgY29kZSBpcyBvbmx5IHJlcXVpcmVkIHdoZW4gYXV0b21hdGljIGRlcGVuZGVuY3kgdHJhY2tpbmcKKyMgaXMgZW5hYmxlZC4gIEZJWE1FLiAgVGhpcyBjcmVhdGVzIGVhY2ggYC5QJyBmaWxlIHRoYXQgd2Ugd2lsbAorIyBuZWVkIGluIG9yZGVyIHRvIGJvb3RzdHJhcCB0aGUgZGVwZW5kZW5jeSBoYW5kbGluZyBjb2RlLgorQUNfREVGVU4oW0FNX09VVFBVVF9ERVBFTkRFTkNZX0NPTU1BTkRTXSwKK1tBQ19DT05GSUdfQ09NTUFORFMoW2RlcGZpbGVzXSwKKyAgICAgW3Rlc3QgeCIkQU1ERVBfVFJVRSIgIT0geCIiIHx8IF9BTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EU10sCisgICAgIFtBTURFUF9UUlVFPSIkQU1ERVBfVFJVRSIgYWNfYXV4X2Rpcj0iJGFjX2F1eF9kaXIiXSkKK10pCisKKyMgRG8gYWxsIHRoZSB3b3JrIGZvciBBdXRvbWFrZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsCisjIDIwMDUsIDIwMDYsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgMTYKKworIyBUaGlzIG1hY3JvIGFjdHVhbGx5IGRvZXMgdG9vIG11Y2guICBTb21lIGNoZWNrcyBhcmUgb25seSBuZWVkZWQgaWYKKyMgeW91ciBwYWNrYWdlIGRvZXMgY2VydGFpbiB0aGluZ3MuICBCdXQgdGhpcyBpc24ndCByZWFsbHkgYSBiaWcgZGVhbC4KKworIyBBTV9JTklUX0FVVE9NQUtFKFBBQ0tBR0UsIFZFUlNJT04sIFtOTy1ERUZJTkVdKQorIyBBTV9JTklUX0FVVE9NQUtFKFtPUFRJT05TXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGhlIGNhbGwgd2l0aCBQQUNLQUdFIGFuZCBWRVJTSU9OIGFyZ3VtZW50cyBpcyB0aGUgb2xkIHN0eWxlCisjIGNhbGwgKHByZSBhdXRvY29uZi0yLjUwKSwgd2hpY2ggaXMgYmVpbmcgcGhhc2VkIG91dC4gIFBBQ0tBR0UKKyMgYW5kIFZFUlNJT04gc2hvdWxkIG5vdyBiZSBwYXNzZWQgdG8gQUNfSU5JVCBhbmQgcmVtb3ZlZCBmcm9tCisjIHRoZSBjYWxsIHRvIEFNX0lOSVRfQVVUT01BS0UuCisjIFdlIHN1cHBvcnQgYm90aCBjYWxsIHN0eWxlcyBmb3IgdGhlIHRyYW5zaXRpb24uICBBZnRlcgorIyB0aGUgbmV4dCBBdXRvbWFrZSByZWxlYXNlLCBBdXRvY29uZiBjYW4gbWFrZSB0aGUgQUNfSU5JVAorIyBhcmd1bWVudHMgbWFuZGF0b3J5LCBhbmQgdGhlbiB3ZSBjYW4gZGVwZW5kIG9uIGEgbmV3IEF1dG9jb25mCisjIHJlbGVhc2UgYW5kIGRyb3AgdGhlIG9sZCBjYWxsIHN1cHBvcnQuCitBQ19ERUZVTihbQU1fSU5JVF9BVVRPTUFLRV0sCitbQUNfUFJFUkVRKFsyLjYyXSlkbmwKK2RubCBBdXRvY29uZiB3YW50cyB0byBkaXNhbGxvdyBBTV8gbmFtZXMuICBXZSBleHBsaWNpdGx5IGFsbG93CitkbmwgdGhlIG9uZXMgd2UgY2FyZSBhYm91dC4KK200X3BhdHRlcm5fYWxsb3coW15BTV9bQS1aXStGTEFHUyRdKWRubAorQUNfUkVRVUlSRShbQU1fU0VUX0NVUlJFTlRfQVVUT01BS0VfVkVSU0lPTl0pZG5sCitBQ19SRVFVSVJFKFtBQ19QUk9HX0lOU1RBTExdKWRubAoraWYgdGVzdCAiYGNkICRzcmNkaXIgJiYgcHdkYCIgIT0gImBwd2RgIjsgdGhlbgorICAjIFVzZSAtSSQoc3JjZGlyKSBvbmx5IHdoZW4gJChzcmNkaXIpICE9IC4sIHNvIHRoYXQgbWFrZSdzIG91dHB1dAorICAjIGlzIG5vdCBwb2xsdXRlZCB3aXRoIHJlcGVhdGVkICItSS4iCisgIEFDX1NVQlNUKFthbV9faXNyY10sIFsnIC1JJChzcmNkaXIpJ10pX0FNX1NVQlNUX05PVE1BS0UoW2FtX19pc3JjXSlkbmwKKyAgIyB0ZXN0IHRvIHNlZSBpZiBzcmNkaXIgYWxyZWFkeSBjb25maWd1cmVkCisgIGlmIHRlc3QgLWYgJHNyY2Rpci9jb25maWcuc3RhdHVzOyB0aGVuCisgICAgQUNfTVNHX0VSUk9SKFtzb3VyY2UgZGlyZWN0b3J5IGFscmVhZHkgY29uZmlndXJlZDsgcnVuICJtYWtlIGRpc3RjbGVhbiIgdGhlcmUgZmlyc3RdKQorICBmaQorZmkKKworIyB0ZXN0IHdoZXRoZXIgd2UgaGF2ZSBjeWdwYXRoCitpZiB0ZXN0IC16ICIkQ1lHUEFUSF9XIjsgdGhlbgorICBpZiAoY3lncGF0aCAtLXZlcnNpb24pID4vZGV2L251bGwgMj4vZGV2L251bGw7IHRoZW4KKyAgICBDWUdQQVRIX1c9J2N5Z3BhdGggLXcnCisgIGVsc2UKKyAgICBDWUdQQVRIX1c9ZWNobworICBmaQorZmkKK0FDX1NVQlNUKFtDWUdQQVRIX1ddKQorCisjIERlZmluZSB0aGUgaWRlbnRpdHkgb2YgdGhlIHBhY2thZ2UuCitkbmwgRGlzdGluZ3Vpc2ggYmV0d2VlbiBvbGQtc3R5bGUgYW5kIG5ldy1zdHlsZSBjYWxscy4KK200X2lmdmFsKFskMl0sCitbbTRfaWZ2YWwoWyQzXSwgW19BTV9TRVRfT1BUSU9OKFtuby1kZWZpbmVdKV0pZG5sCisgQUNfU1VCU1QoW1BBQ0tBR0VdLCBbJDFdKWRubAorIEFDX1NVQlNUKFtWRVJTSU9OXSwgWyQyXSldLAorW19BTV9TRVRfT1BUSU9OUyhbJDFdKWRubAorZG5sIERpYWdub3NlIG9sZC1zdHlsZSBBQ19JTklUIHdpdGggbmV3LXN0eWxlIEFNX0FVVE9NQUtFX0lOSVQuCittNF9pZihtNF9pZmRlZihbQUNfUEFDS0FHRV9OQU1FXSwgMSltNF9pZmRlZihbQUNfUEFDS0FHRV9WRVJTSU9OXSwgMSksIDExLCwKKyAgW200X2ZhdGFsKFtBQ19JTklUIHNob3VsZCBiZSBjYWxsZWQgd2l0aCBwYWNrYWdlIGFuZCB2ZXJzaW9uIGFyZ3VtZW50c10pXSlkbmwKKyBBQ19TVUJTVChbUEFDS0FHRV0sIFsnQUNfUEFDS0FHRV9UQVJOQU1FJ10pZG5sCisgQUNfU1VCU1QoW1ZFUlNJT05dLCBbJ0FDX1BBQ0tBR0VfVkVSU0lPTiddKV0pZG5sCisKK19BTV9JRl9PUFRJT04oW25vLWRlZmluZV0sLAorW0FDX0RFRklORV9VTlFVT1RFRChQQUNLQUdFLCAiJFBBQ0tBR0UiLCBbTmFtZSBvZiBwYWNrYWdlXSkKKyBBQ19ERUZJTkVfVU5RVU9URUQoVkVSU0lPTiwgIiRWRVJTSU9OIiwgW1ZlcnNpb24gbnVtYmVyIG9mIHBhY2thZ2VdKV0pZG5sCisKKyMgU29tZSB0b29scyBBdXRvbWFrZSBuZWVkcy4KK0FDX1JFUVVJUkUoW0FNX1NBTklUWV9DSEVDS10pZG5sCitBQ19SRVFVSVJFKFtBQ19BUkdfUFJPR1JBTV0pZG5sCitBTV9NSVNTSU5HX1BST0coQUNMT0NBTCwgYWNsb2NhbC0ke2FtX19hcGlfdmVyc2lvbn0pCitBTV9NSVNTSU5HX1BST0coQVVUT0NPTkYsIGF1dG9jb25mKQorQU1fTUlTU0lOR19QUk9HKEFVVE9NQUtFLCBhdXRvbWFrZS0ke2FtX19hcGlfdmVyc2lvbn0pCitBTV9NSVNTSU5HX1BST0coQVVUT0hFQURFUiwgYXV0b2hlYWRlcikKK0FNX01JU1NJTkdfUFJPRyhNQUtFSU5GTywgbWFrZWluZm8pCitBQ19SRVFVSVJFKFtBTV9QUk9HX0lOU1RBTExfU0hdKWRubAorQUNfUkVRVUlSRShbQU1fUFJPR19JTlNUQUxMX1NUUklQXSlkbmwKK0FDX1JFUVVJUkUoW0FNX1BST0dfTUtESVJfUF0pZG5sCisjIFdlIG5lZWQgYXdrIGZvciB0aGUgImNoZWNrIiB0YXJnZXQuICBUaGUgc3lzdGVtICJhd2siIGlzIGJhZCBvbgorIyBzb21lIHBsYXRmb3Jtcy4KK0FDX1JFUVVJUkUoW0FDX1BST0dfQVdLXSlkbmwKK0FDX1JFUVVJUkUoW0FDX1BST0dfTUFLRV9TRVRdKWRubAorQUNfUkVRVUlSRShbQU1fU0VUX0xFQURJTkdfRE9UXSlkbmwKK19BTV9JRl9PUFRJT04oW3Rhci11c3Rhcl0sIFtfQU1fUFJPR19UQVIoW3VzdGFyXSldLAorCSAgICAgIFtfQU1fSUZfT1BUSU9OKFt0YXItcGF4XSwgW19BTV9QUk9HX1RBUihbcGF4XSldLAorCQkJICAgICBbX0FNX1BST0dfVEFSKFt2N10pXSldKQorX0FNX0lGX09QVElPTihbbm8tZGVwZW5kZW5jaWVzXSwsCitbQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfQ0NdLAorCQkgIFtfQU1fREVQRU5ERU5DSUVTKENDKV0sCisJCSAgW2RlZmluZShbQUNfUFJPR19DQ10sCisJCQkgIGRlZm4oW0FDX1BST0dfQ0NdKVtfQU1fREVQRU5ERU5DSUVTKENDKV0pXSlkbmwKK0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0NYWF0sCisJCSAgW19BTV9ERVBFTkRFTkNJRVMoQ1hYKV0sCisJCSAgW2RlZmluZShbQUNfUFJPR19DWFhdLAorCQkJICBkZWZuKFtBQ19QUk9HX0NYWF0pW19BTV9ERVBFTkRFTkNJRVMoQ1hYKV0pXSlkbmwKK0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX09CSkNdLAorCQkgIFtfQU1fREVQRU5ERU5DSUVTKE9CSkMpXSwKKwkJICBbZGVmaW5lKFtBQ19QUk9HX09CSkNdLAorCQkJICBkZWZuKFtBQ19QUk9HX09CSkNdKVtfQU1fREVQRU5ERU5DSUVTKE9CSkMpXSldKWRubAorXSkKK19BTV9JRl9PUFRJT04oW3NpbGVudC1ydWxlc10sIFtBQ19SRVFVSVJFKFtBTV9TSUxFTlRfUlVMRVNdKV0pZG5sCitkbmwgVGhlIGBwYXJhbGxlbC10ZXN0cycgZHJpdmVyIG1heSBuZWVkIHRvIGtub3cgYWJvdXQgRVhFRVhULCBzbyBhZGQgdGhlCitkbmwgYGFtX19FWEVFWFQnIGNvbmRpdGlvbmFsIGlmIF9BTV9DT01QSUxFUl9FWEVFWFQgd2FzIHNlZW4uICBUaGlzIG1hY3JvCitkbmwgaXMgaG9va2VkIG9udG8gX0FDX0NPTVBJTEVSX0VYRUVYVCBlYXJseSwgc2VlIGJlbG93LgorQUNfQ09ORklHX0NPTU1BTkRTX1BSRShkbmwKK1ttNF9wcm92aWRlX2lmKFtfQU1fQ09NUElMRVJfRVhFRVhUXSwKKyAgW0FNX0NPTkRJVElPTkFMKFthbV9fRVhFRVhUXSwgW3Rlc3QgLW4gIiRFWEVFWFQiXSldKV0pZG5sCitdKQorCitkbmwgSG9vayBpbnRvIGBfQUNfQ09NUElMRVJfRVhFRVhUJyBlYXJseSB0byBsZWFybiBpdHMgZXhwYW5zaW9uLiAgRG8gbm90CitkbmwgYWRkIHRoZSBjb25kaXRpb25hbCByaWdodCBoZXJlLCBhcyBfQUNfQ09NUElMRVJfRVhFRVhUIG1heSBiZSBmdXJ0aGVyCitkbmwgbWFuZ2xlZCBieSBBdXRvY29uZiBhbmQgcnVuIGluIGEgc2hlbGwgY29uZGl0aW9uYWwgc3RhdGVtZW50LgorbTRfZGVmaW5lKFtfQUNfQ09NUElMRVJfRVhFRVhUXSwKK200X2RlZm4oW19BQ19DT01QSUxFUl9FWEVFWFRdKVttNF9wcm92aWRlKFtfQU1fQ09NUElMRVJfRVhFRVhUXSldKQorCisKKyMgV2hlbiBjb25maWcuc3RhdHVzIGdlbmVyYXRlcyBhIGhlYWRlciwgd2UgbXVzdCB1cGRhdGUgdGhlIHN0YW1wLWggZmlsZS4KKyMgVGhpcyBmaWxlIHJlc2lkZXMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBjb25maWcgaGVhZGVyCisjIHRoYXQgaXMgZ2VuZXJhdGVkLiAgVGhlIHN0YW1wIGZpbGVzIGFyZSBudW1iZXJlZCB0byBoYXZlIGRpZmZlcmVudCBuYW1lcy4KKworIyBBdXRvY29uZiBjYWxscyBfQUNfQU1fQ09ORklHX0hFQURFUl9IT09LICh3aGVuIGRlZmluZWQpIGluIHRoZQorIyBsb29wIHdoZXJlIGNvbmZpZy5zdGF0dXMgY3JlYXRlcyB0aGUgaGVhZGVycywgc28gd2UgY2FuIGdlbmVyYXRlCisjIG91ciBzdGFtcCBmaWxlcyB0aGVyZS4KK0FDX0RFRlVOKFtfQUNfQU1fQ09ORklHX0hFQURFUl9IT09LXSwKK1sjIENvbXB1dGUgJDEncyBpbmRleCBpbiAkY29uZmlnX2hlYWRlcnMuCitfYW1fYXJnPSQxCitfYW1fc3RhbXBfY291bnQ9MQorZm9yIF9hbV9oZWFkZXIgaW4gJGNvbmZpZ19oZWFkZXJzIDo7IGRvCisgIGNhc2UgJF9hbV9oZWFkZXIgaW4KKyAgICAkX2FtX2FyZyB8ICRfYW1fYXJnOiogKQorICAgICAgYnJlYWsgOzsKKyAgICAqICkKKyAgICAgIF9hbV9zdGFtcF9jb3VudD1gZXhwciAkX2FtX3N0YW1wX2NvdW50ICsgMWAgOzsKKyAgZXNhYworZG9uZQorZWNobyAidGltZXN0YW1wIGZvciAkX2FtX2FyZyIgPmBBU19ESVJOQU1FKFsiJF9hbV9hcmciXSlgL3N0YW1wLWhbXSRfYW1fc3RhbXBfY291bnRdKQorCisjIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMywgMjAwNSwgMjAwOCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisjIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCAxCisKKyMgQU1fUFJPR19JTlNUQUxMX1NICisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBEZWZpbmUgJGluc3RhbGxfc2guCitBQ19ERUZVTihbQU1fUFJPR19JTlNUQUxMX1NIXSwKK1tBQ19SRVFVSVJFKFtBTV9BVVhfRElSX0VYUEFORF0pZG5sCitpZiB0ZXN0IHgiJHtpbnN0YWxsX3NofSIgIT0geHNldDsgdGhlbgorICBjYXNlICRhbV9hdXhfZGlyIGluCisgICpcICogfCAqXAkqKQorICAgIGluc3RhbGxfc2g9Ilwke1NIRUxMfSAnJGFtX2F1eF9kaXIvaW5zdGFsbC1zaCciIDs7CisgICopCisgICAgaW5zdGFsbF9zaD0iXCR7U0hFTEx9ICRhbV9hdXhfZGlyL2luc3RhbGwtc2giCisgIGVzYWMKK2ZpCitBQ19TVUJTVChpbnN0YWxsX3NoKV0pCisKKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCAyCisKKyMgQ2hlY2sgd2hldGhlciB0aGUgdW5kZXJseWluZyBmaWxlLXN5c3RlbSBzdXBwb3J0cyBmaWxlbmFtZXMKKyMgd2l0aCBhIGxlYWRpbmcgZG90LiAgRm9yIGluc3RhbmNlIE1TLURPUyBkb2Vzbid0LgorQUNfREVGVU4oW0FNX1NFVF9MRUFESU5HX0RPVF0sCitbcm0gLXJmIC50c3QgMj4vZGV2L251bGwKK21rZGlyIC50c3QgMj4vZGV2L251bGwKK2lmIHRlc3QgLWQgLnRzdDsgdGhlbgorICBhbV9fbGVhZGluZ19kb3Q9LgorZWxzZQorICBhbV9fbGVhZGluZ19kb3Q9XworZmkKK3JtZGlyIC50c3QgMj4vZGV2L251bGwKK0FDX1NVQlNUKFthbV9fbGVhZGluZ19kb3RdKV0pCisKKyMgQ2hlY2sgdG8gc2VlIGhvdyAnbWFrZScgdHJlYXRzIGluY2x1ZGVzLgkgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisKKyMgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA1LCAyMDA5ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCA0CisKKyMgQU1fTUFLRV9JTkNMVURFKCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgdG8gc2VlIGhvdyBtYWtlIHRyZWF0cyBpbmNsdWRlcy4KK0FDX0RFRlVOKFtBTV9NQUtFX0lOQ0xVREVdLAorW2FtX21ha2U9JHtNQUtFLW1ha2V9CitjYXQgPiBjb25maW5jIDw8ICdFTkQnCithbV9fZG9pdDoKKwlAZWNobyB0aGlzIGlzIHRoZSBhbV9fZG9pdCB0YXJnZXQKKy5QSE9OWTogYW1fX2RvaXQKK0VORAorIyBJZiB3ZSBkb24ndCBmaW5kIGFuIGluY2x1ZGUgZGlyZWN0aXZlLCBqdXN0IGNvbW1lbnQgb3V0IHRoZSBjb2RlLgorQUNfTVNHX0NIRUNLSU5HKFtmb3Igc3R5bGUgb2YgaW5jbHVkZSB1c2VkIGJ5ICRhbV9tYWtlXSkKK2FtX19pbmNsdWRlPSIjIgorYW1fX3F1b3RlPQorX2FtX3Jlc3VsdD1ub25lCisjIEZpcnN0IHRyeSBHTlUgbWFrZSBzdHlsZSBpbmNsdWRlLgorZWNobyAiaW5jbHVkZSBjb25maW5jIiA+IGNvbmZtZgorIyBJZ25vcmUgYWxsIGtpbmRzIG9mIGFkZGl0aW9uYWwgb3V0cHV0IGZyb20gYG1ha2UnLgorY2FzZSBgJGFtX21ha2UgLXMgLWYgY29uZm1mIDI+IC9kZXYvbnVsbGAgaW4gIygKKyp0aGVcIGFtX19kb2l0XCB0YXJnZXQqKQorICBhbV9faW5jbHVkZT1pbmNsdWRlCisgIGFtX19xdW90ZT0KKyAgX2FtX3Jlc3VsdD1HTlUKKyAgOzsKK2VzYWMKKyMgTm93IHRyeSBCU0QgbWFrZSBzdHlsZSBpbmNsdWRlLgoraWYgdGVzdCAiJGFtX19pbmNsdWRlIiA9ICIjIjsgdGhlbgorICAgZWNobyAnLmluY2x1ZGUgImNvbmZpbmMiJyA+IGNvbmZtZgorICAgY2FzZSBgJGFtX21ha2UgLXMgLWYgY29uZm1mIDI+IC9kZXYvbnVsbGAgaW4gIygKKyAgICp0aGVcIGFtX19kb2l0XCB0YXJnZXQqKQorICAgICBhbV9faW5jbHVkZT0uaW5jbHVkZQorICAgICBhbV9fcXVvdGU9IlwiIgorICAgICBfYW1fcmVzdWx0PUJTRAorICAgICA7OworICAgZXNhYworZmkKK0FDX1NVQlNUKFthbV9faW5jbHVkZV0pCitBQ19TVUJTVChbYW1fX3F1b3RlXSkKK0FDX01TR19SRVNVTFQoWyRfYW1fcmVzdWx0XSkKK3JtIC1mIGNvbmZpbmMgY29uZm1mCitdKQorCisjIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwgMjAwOAorIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCA2CisKKyMgQU1fUFJPR19DQ19DX08KKyMgLS0tLS0tLS0tLS0tLS0KKyMgTGlrZSBBQ19QUk9HX0NDX0NfTywgYnV0IGNoYW5nZWQgZm9yIGF1dG9tYWtlLgorQUNfREVGVU4oW0FNX1BST0dfQ0NfQ19PXSwKK1tBQ19SRVFVSVJFKFtBQ19QUk9HX0NDX0NfT10pZG5sCitBQ19SRVFVSVJFKFtBTV9BVVhfRElSX0VYUEFORF0pZG5sCitBQ19SRVFVSVJFX0FVWF9GSUxFKFtjb21waWxlXSlkbmwKKyMgRklYTUU6IHdlIHJlbHkgb24gdGhlIGNhY2hlIHZhcmlhYmxlIG5hbWUgYmVjYXVzZQorIyB0aGVyZSBpcyBubyBvdGhlciB3YXkuCitzZXQgZHVtbXkgJENDCithbV9jYz1gZWNobyAkWzJdIHwgc2VkIFsncy9bXmEtekEtWjAtOV9dL18vZztzL15bMC05XS9fLyddYAorZXZhbCBhbV90PVwkYWNfY3ZfcHJvZ19jY18ke2FtX2NjfV9jX28KK2lmIHRlc3QgIiRhbV90IiAhPSB5ZXM7IHRoZW4KKyAgICMgTG9zaW5nIGNvbXBpbGVyLCBzbyBvdmVycmlkZSB3aXRoIHRoZSBzY3JpcHQuCisgICAjIEZJWE1FOiBJdCBpcyB3cm9uZyB0byByZXdyaXRlIENDLgorICAgIyBCdXQgaWYgd2UgZG9uJ3QgdGhlbiB3ZSBnZXQgaW50byB0cm91YmxlIG9mIG9uZSBzb3J0IG9yIGFub3RoZXIuCisgICAjIEEgbG9uZ2VyLXRlcm0gZml4IHdvdWxkIGJlIHRvIGhhdmUgYXV0b21ha2UgdXNlIGFtX19DQyBpbiB0aGlzIGNhc2UsCisgICAjIGFuZCB0aGVuIHdlIGNvdWxkIHNldCBhbV9fQ0M9IlwkKHRvcF9zcmNkaXIpL2NvbXBpbGUgXCQoQ0MpIgorICAgQ0M9IiRhbV9hdXhfZGlyL2NvbXBpbGUgJENDIgorZmkKK2RubCBNYWtlIHN1cmUgQUNfUFJPR19DQyBpcyBuZXZlciBjYWxsZWQgYWdhaW4sIG9yIGl0IHdpbGwgb3ZlcnJpZGUgb3VyCitkbmwgc2V0dGluZyBvZiBDQy4KK200X2RlZmluZShbQUNfUFJPR19DQ10sCisgICAgICAgICAgW200X2ZhdGFsKFtBQ19QUk9HX0NDIGNhbm5vdCBiZSBjYWxsZWQgYWZ0ZXIgQU1fUFJPR19DQ19DX09dKV0pCitdKQorCisjIEZha2UgdGhlIGV4aXN0ZW5jZSBvZiBwcm9ncmFtcyB0aGF0IEdOVSBtYWludGFpbmVycyB1c2UuICAtKi0gQXV0b2NvbmYgLSotCisKKyMgQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA4CisjIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDYKKworIyBBTV9NSVNTSU5HX1BST0coTkFNRSwgUFJPR1JBTSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQU1fTUlTU0lOR19QUk9HXSwKK1tBQ19SRVFVSVJFKFtBTV9NSVNTSU5HX0hBU19SVU5dKQorJDE9JHskMS0iJHthbV9taXNzaW5nX3J1bn0kMiJ9CitBQ19TVUJTVCgkMSldKQorCisKKyMgQU1fTUlTU0lOR19IQVNfUlVOCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBEZWZpbmUgTUlTU0lORyBpZiBub3QgZGVmaW5lZCBzbyBmYXIgYW5kIHRlc3QgaWYgaXQgc3VwcG9ydHMgLS1ydW4uCisjIElmIGl0IGRvZXMsIHNldCBhbV9taXNzaW5nX3J1biB0byB1c2UgaXQsIG90aGVyd2lzZSwgdG8gbm90aGluZy4KK0FDX0RFRlVOKFtBTV9NSVNTSU5HX0hBU19SVU5dLAorW0FDX1JFUVVJUkUoW0FNX0FVWF9ESVJfRVhQQU5EXSlkbmwKK0FDX1JFUVVJUkVfQVVYX0ZJTEUoW21pc3NpbmddKWRubAoraWYgdGVzdCB4IiR7TUlTU0lORytzZXR9IiAhPSB4c2V0OyB0aGVuCisgIGNhc2UgJGFtX2F1eF9kaXIgaW4KKyAgKlwgKiB8ICpcCSopCisgICAgTUlTU0lORz0iXCR7U0hFTEx9IFwiJGFtX2F1eF9kaXIvbWlzc2luZ1wiIiA7OworICAqKQorICAgIE1JU1NJTkc9Ilwke1NIRUxMfSAkYW1fYXV4X2Rpci9taXNzaW5nIiA7OworICBlc2FjCitmaQorIyBVc2UgZXZhbCB0byBleHBhbmQgJFNIRUxMCitpZiBldmFsICIkTUlTU0lORyAtLXJ1biB0cnVlIjsgdGhlbgorICBhbV9taXNzaW5nX3J1bj0iJE1JU1NJTkcgLS1ydW4gIgorZWxzZQorICBhbV9taXNzaW5nX3J1bj0KKyAgQUNfTVNHX1dBUk4oW2BtaXNzaW5nJyBzY3JpcHQgaXMgdG9vIG9sZCBvciBtaXNzaW5nXSkKK2ZpCitdKQorCisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisjIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCAxCisKKyMgQU1fUFJPR19NS0RJUl9QCisjIC0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayBmb3IgYG1rZGlyIC1wJy4KK0FDX0RFRlVOKFtBTV9QUk9HX01LRElSX1BdLAorW0FDX1BSRVJFUShbMi42MF0pZG5sCitBQ19SRVFVSVJFKFtBQ19QUk9HX01LRElSX1BdKWRubAorZG5sIEF1dG9tYWtlIDEuOCB0byAxLjkuNiB1c2VkIHRvIGRlZmluZSBta2Rpcl9wLiAgV2Ugbm93IHVzZSBNS0RJUl9QLAorZG5sIHdoaWxlIGtlZXBpbmcgYSBkZWZpbml0aW9uIG9mIG1rZGlyX3AgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCitkbmwgQE1LRElSX1BAIGlzIG1hZ2ljOiBBQ19PVVRQVVQgYWRqdXN0cyBpdHMgdmFsdWUgZm9yIGVhY2ggTWFrZWZpbGUuCitkbmwgSG93ZXZlciB3ZSBjYW5ub3QgZGVmaW5lIG1rZGlyX3AgYXMgJChNS0RJUl9QKSBmb3IgdGhlIHNha2Ugb2YKK2RubCBNYWtlZmlsZS5pbnMgdGhhdCBkbyBub3QgZGVmaW5lIE1LRElSX1AsIHNvIHdlIGRvIG91ciBvd24KK2RubCBhZGp1c3RtZW50IHVzaW5nIHRvcF9idWlsZGRpciAod2hpY2ggaXMgZGVmaW5lZCBtb3JlIG9mdGVuIHRoYW4KK2RubCBNS0RJUl9QKS4KK0FDX1NVQlNUKFtta2Rpcl9wXSwgWyIkTUtESVJfUCJdKWRubAorY2FzZSAkbWtkaXJfcCBpbgorICBbW1xcLyRdXSogfCA/OltbXFwvXV0qKSA7OworICAqLyopIG1rZGlyX3A9IlwkKHRvcF9idWlsZGRpcikvJG1rZGlyX3AiIDs7Citlc2FjCitdKQorCisjIEhlbHBlciBmdW5jdGlvbnMgZm9yIG9wdGlvbiBoYW5kbGluZy4gICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisKKyMgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA1LCAyMDA4LCAyMDEwIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDUKKworIyBfQU1fTUFOR0xFX09QVElPTihOQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW19BTV9NQU5HTEVfT1BUSU9OXSwKK1tbX0FNX09QVElPTl9dbTRfYnBhdHN1YnN0KCQxLCBbW15hLXpBLVowLTlfXV0sIFtfXSldKQorCisjIF9BTV9TRVRfT1BUSU9OKE5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNldCBvcHRpb24gTkFNRS4gIFByZXNlbnRseSB0aGF0IG9ubHkgbWVhbnMgZGVmaW5pbmcgYSBmbGFnIGZvciB0aGlzIG9wdGlvbi4KK0FDX0RFRlVOKFtfQU1fU0VUX09QVElPTl0sCitbbTRfZGVmaW5lKF9BTV9NQU5HTEVfT1BUSU9OKFskMV0pLCAxKV0pCisKKyMgX0FNX1NFVF9PUFRJT05TKE9QVElPTlMpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBPUFRJT05TIGlzIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgQXV0b21ha2Ugb3B0aW9ucy4KK0FDX0RFRlVOKFtfQU1fU0VUX09QVElPTlNdLAorW200X2ZvcmVhY2hfdyhbX0FNX09wdGlvbl0sIFskMV0sIFtfQU1fU0VUX09QVElPTihfQU1fT3B0aW9uKV0pXSkKKworIyBfQU1fSUZfT1BUSU9OKE9QVElPTiwgSUYtU0VULCBbSUYtTk9ULVNFVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXhlY3V0ZSBJRi1TRVQgaWYgT1BUSU9OIGlzIHNldCwgSUYtTk9ULVNFVCBvdGhlcndpc2UuCitBQ19ERUZVTihbX0FNX0lGX09QVElPTl0sCitbbTRfaWZzZXQoX0FNX01BTkdMRV9PUFRJT04oWyQxXSksIFskMl0sIFskM10pXSkKKworIyBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDgsIDIwMDksCisjIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgMgorCisjIEFNX1BBVEhfUFlUSE9OKFtNSU5JTVVNLVZFUlNJT05dLCBbQUNUSU9OLUlGLUZPVU5EXSwgW0FDVElPTi1JRi1OT1QtRk9VTkRdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQWRkcyBzdXBwb3J0IGZvciBkaXN0cmlidXRpbmcgUHl0aG9uIG1vZHVsZXMgYW5kIHBhY2thZ2VzLiAgVG8KKyMgaW5zdGFsbCBtb2R1bGVzLCBjb3B5IHRoZW0gdG8gJChweXRob25kaXIpLCB1c2luZyB0aGUgcHl0aG9uX1BZVEhPTgorIyBhdXRvbWFrZSB2YXJpYWJsZS4gIFRvIGluc3RhbGwgYSBwYWNrYWdlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUKKyMgYXV0b21ha2UgcGFja2FnZSwgaW5zdGFsbCB0byAkKHBrZ3B5dGhvbmRpciksIG9yIHVzZSB0aGUKKyMgcGtncHl0aG9uX1BZVEhPTiBhdXRvbWFrZSB2YXJpYWJsZS4KKyMKKyMgVGhlIHZhcmlhYmxlcyAkKHB5ZXhlY2RpcikgYW5kICQocGtncHlleGVjZGlyKSBhcmUgcHJvdmlkZWQgYXMKKyMgbG9jYXRpb25zIHRvIGluc3RhbGwgcHl0aG9uIGV4dGVuc2lvbiBtb2R1bGVzIChzaGFyZWQgbGlicmFyaWVzKS4KKyMgQW5vdGhlciBtYWNybyBpcyByZXF1aXJlZCB0byBmaW5kIHRoZSBhcHByb3ByaWF0ZSBmbGFncyB0byBjb21waWxlCisjIGV4dGVuc2lvbiBtb2R1bGVzLgorIworIyBJZiB5b3VyIHBhY2thZ2UgaXMgY29uZmlndXJlZCB3aXRoIGEgZGlmZmVyZW50IHByZWZpeCB0byBweXRob24sCisjIHVzZXJzIHdpbGwgaGF2ZSB0byBhZGQgdGhlIGluc3RhbGwgZGlyZWN0b3J5IHRvIHRoZSBQWVRIT05QQVRICisjIGVudmlyb25tZW50IHZhcmlhYmxlLCBvciBjcmVhdGUgYSAucHRoIGZpbGUgKHNlZSB0aGUgcHl0aG9uCisjIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMpLgorIworIyBJZiB0aGUgTUlOSU1VTS1WRVJTSU9OIGFyZ3VtZW50IGlzIHBhc3NlZCwgQU1fUEFUSF9QWVRIT04gd2lsbAorIyBjYXVzZSBhbiBlcnJvciBpZiB0aGUgdmVyc2lvbiBvZiBweXRob24gaW5zdGFsbGVkIG9uIHRoZSBzeXN0ZW0KKyMgZG9lc24ndCBtZWV0IHRoZSByZXF1aXJlbWVudC4gIE1JTklNVU0tVkVSU0lPTiBzaG91bGQgY29uc2lzdCBvZgorIyBudW1iZXJzIGFuZCBkb3RzIG9ubHkuCitBQ19ERUZVTihbQU1fUEFUSF9QWVRIT05dLAorIFsKKyAgZG5sIEZpbmQgYSBQeXRob24gaW50ZXJwcmV0ZXIuICBQeXRob24gdmVyc2lvbnMgcHJpb3IgdG8gMi4wIGFyZSBub3QKKyAgZG5sIHN1cHBvcnRlZC4gKDIuMCB3YXMgcmVsZWFzZWQgb24gT2N0b2JlciAxNiwgMjAwMCkuCisgIG00X2RlZmluZV9kZWZhdWx0KFtfQU1fUFlUSE9OX0lOVEVSUFJFVEVSX0xJU1RdLAorW3B5dGhvbiBweXRob24yIHB5dGhvbjMgcHl0aG9uMy4yIHB5dGhvbjMuMSBweXRob24zLjAgcHl0aG9uMi43IGRubAorIHB5dGhvbjIuNiBweXRob24yLjUgcHl0aG9uMi40IHB5dGhvbjIuMyBweXRob24yLjIgcHl0aG9uMi4xIHB5dGhvbjIuMF0pCisKKyAgQUNfQVJHX1ZBUihbUFlUSE9OXSwgW3RoZSBQeXRob24gaW50ZXJwcmV0ZXJdKQorCisgIG00X2lmKFskMV0sW10sWworICAgIGRubCBObyB2ZXJzaW9uIGNoZWNrIGlzIG5lZWRlZC4KKyAgICAjIEZpbmQgYW55IFB5dGhvbiBpbnRlcnByZXRlci4KKyAgICBpZiB0ZXN0IC16ICIkUFlUSE9OIjsgdGhlbgorICAgICAgQUNfUEFUSF9QUk9HUyhbUFlUSE9OXSwgX0FNX1BZVEhPTl9JTlRFUlBSRVRFUl9MSVNULCA6KQorICAgIGZpCisgICAgYW1fZGlzcGxheV9QWVRIT049cHl0aG9uCisgIF0sIFsKKyAgICBkbmwgQSB2ZXJzaW9uIGNoZWNrIGlzIG5lZWRlZC4KKyAgICBpZiB0ZXN0IC1uICIkUFlUSE9OIjsgdGhlbgorICAgICAgIyBJZiB0aGUgdXNlciBzZXQgJFBZVEhPTiwgdXNlIGl0IGFuZCBkb24ndCBzZWFyY2ggc29tZXRoaW5nIGVsc2UuCisgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgJFBZVEhPTiB2ZXJzaW9uID49ICQxXSkKKyAgICAgIEFNX1BZVEhPTl9DSEVDS19WRVJTSU9OKFskUFlUSE9OXSwgWyQxXSwKKwkJCSAgICAgIFtBQ19NU0dfUkVTVUxUKHllcyldLAorCQkJICAgICAgW0FDX01TR19FUlJPUih0b28gb2xkKV0pCisgICAgICBhbV9kaXNwbGF5X1BZVEhPTj0kUFlUSE9OCisgICAgZWxzZQorICAgICAgIyBPdGhlcndpc2UsIHRyeSBlYWNoIGludGVycHJldGVyIHVudGlsIHdlIGZpbmQgb25lIHRoYXQgc2F0aXNmaWVzCisgICAgICAjIFZFUlNJT04uCisgICAgICBBQ19DQUNIRV9DSEVDSyhbZm9yIGEgUHl0aG9uIGludGVycHJldGVyIHdpdGggdmVyc2lvbiA+PSAkMV0sCisJW2FtX2N2X3BhdGhsZXNzX1BZVEhPTl0sWworCWZvciBhbV9jdl9wYXRobGVzc19QWVRIT04gaW4gX0FNX1BZVEhPTl9JTlRFUlBSRVRFUl9MSVNUIG5vbmU7IGRvCisJICB0ZXN0ICIkYW1fY3ZfcGF0aGxlc3NfUFlUSE9OIiA9IG5vbmUgJiYgYnJlYWsKKwkgIEFNX1BZVEhPTl9DSEVDS19WRVJTSU9OKFskYW1fY3ZfcGF0aGxlc3NfUFlUSE9OXSwgWyQxXSwgW2JyZWFrXSkKKwlkb25lXSkKKyAgICAgICMgU2V0ICRQWVRIT04gdG8gdGhlIGFic29sdXRlIHBhdGggb2YgJGFtX2N2X3BhdGhsZXNzX1BZVEhPTi4KKyAgICAgIGlmIHRlc3QgIiRhbV9jdl9wYXRobGVzc19QWVRIT04iID0gbm9uZTsgdGhlbgorCVBZVEhPTj06CisgICAgICBlbHNlCisgICAgICAgIEFDX1BBVEhfUFJPRyhbUFlUSE9OXSwgWyRhbV9jdl9wYXRobGVzc19QWVRIT05dKQorICAgICAgZmkKKyAgICAgIGFtX2Rpc3BsYXlfUFlUSE9OPSRhbV9jdl9wYXRobGVzc19QWVRIT04KKyAgICBmaQorICBdKQorCisgIGlmIHRlc3QgIiRQWVRIT04iID0gOjsgdGhlbgorICBkbmwgUnVuIGFueSB1c2VyLXNwZWNpZmllZCBhY3Rpb24sIG9yIGFib3J0LgorICAgIG00X2RlZmF1bHQoWyQzXSwgW0FDX01TR19FUlJPUihbbm8gc3VpdGFibGUgUHl0aG9uIGludGVycHJldGVyIGZvdW5kXSldKQorICBlbHNlCisKKyAgZG5sIFF1ZXJ5IFB5dGhvbiBmb3IgaXRzIHZlcnNpb24gbnVtYmVyLiAgR2V0dGluZyBbOjNdIHNlZW1zIHRvIGJlCisgIGRubCB0aGUgYmVzdCB3YXkgdG8gZG8gdGhpczsgaXQncyB3aGF0ICJzaXRlLnB5IiBkb2VzIGluIHRoZSBzdGFuZGFyZAorICBkbmwgbGlicmFyeS4KKworICBBQ19DQUNIRV9DSEVDSyhbZm9yICRhbV9kaXNwbGF5X1BZVEhPTiB2ZXJzaW9uXSwgW2FtX2N2X3B5dGhvbl92ZXJzaW9uXSwKKyAgICBbYW1fY3ZfcHl0aG9uX3ZlcnNpb249YCRQWVRIT04gLWMgImltcG9ydCBzeXM7IHN5cy5zdGRvdXQud3JpdGUoc3lzLnZlcnNpb25bWzozXV0pImBdKQorICBBQ19TVUJTVChbUFlUSE9OX1ZFUlNJT05dLCBbJGFtX2N2X3B5dGhvbl92ZXJzaW9uXSkKKworICBkbmwgVXNlIHRoZSB2YWx1ZXMgb2YgJHByZWZpeCBhbmQgJGV4ZWNfcHJlZml4IGZvciB0aGUgY29ycmVzcG9uZGluZworICBkbmwgdmFsdWVzIG9mIFBZVEhPTl9QUkVGSVggYW5kIFBZVEhPTl9FWEVDX1BSRUZJWC4gIFRoZXNlIGFyZSBtYWRlCisgIGRubCBkaXN0aW5jdCB2YXJpYWJsZXMgc28gdGhleSBjYW4gYmUgb3ZlcnJpZGRlbiBpZiBuZWVkIGJlLiAgSG93ZXZlciwKKyAgZG5sIGdlbmVyYWwgY29uc2Vuc3VzIGlzIHRoYXQgeW91IHNob3VsZG4ndCBuZWVkIHRoaXMgYWJpbGl0eS4KKworICBBQ19TVUJTVChbUFlUSE9OX1BSRUZJWF0sIFsnJHtwcmVmaXh9J10pCisgIEFDX1NVQlNUKFtQWVRIT05fRVhFQ19QUkVGSVhdLCBbJyR7ZXhlY19wcmVmaXh9J10pCisKKyAgZG5sIEF0IHRpbWVzIChsaWtlIHdoZW4gYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcykgeW91IG1heSB3YW50CisgIGRubCB0byBrbm93IHdoaWNoIE9TIHBsYXRmb3JtIFB5dGhvbiB0aGlua3MgdGhpcyBpcy4KKworICBBQ19DQUNIRV9DSEVDSyhbZm9yICRhbV9kaXNwbGF5X1BZVEhPTiBwbGF0Zm9ybV0sIFthbV9jdl9weXRob25fcGxhdGZvcm1dLAorICAgIFthbV9jdl9weXRob25fcGxhdGZvcm09YCRQWVRIT04gLWMgImltcG9ydCBzeXM7IHN5cy5zdGRvdXQud3JpdGUoc3lzLnBsYXRmb3JtKSJgXSkKKyAgQUNfU1VCU1QoW1BZVEhPTl9QTEFURk9STV0sIFskYW1fY3ZfcHl0aG9uX3BsYXRmb3JtXSkKKworCisgIGRubCBTZXQgdXAgNCBkaXJlY3RvcmllczoKKworICBkbmwgcHl0aG9uZGlyIC0tIHdoZXJlIHRvIGluc3RhbGwgcHl0aG9uIHNjcmlwdHMuICBUaGlzIGlzIHRoZQorICBkbmwgICBzaXRlLXBhY2thZ2VzIGRpcmVjdG9yeSwgbm90IHRoZSBweXRob24gc3RhbmRhcmQgbGlicmFyeQorICBkbmwgICBkaXJlY3RvcnkgbGlrZSBpbiBwcmV2aW91cyBhdXRvbWFrZSBiZXRhcy4gIFRoaXMgYmVoYXZpb3IKKyAgZG5sICAgaXMgbW9yZSBjb25zaXN0ZW50IHdpdGggbGlzcGRpci5tNCBmb3IgZXhhbXBsZS4KKyAgZG5sIFF1ZXJ5IGRpc3R1dGlscyBmb3IgdGhpcyBkaXJlY3RvcnkuCisgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgJGFtX2Rpc3BsYXlfUFlUSE9OIHNjcmlwdCBkaXJlY3RvcnldLAorICAgIFthbV9jdl9weXRob25fcHl0aG9uZGlyXSwKKyAgICBbaWYgdGVzdCAieCRwcmVmaXgiID0geE5PTkUKKyAgICAgdGhlbgorICAgICAgIGFtX3B5X3ByZWZpeD0kYWNfZGVmYXVsdF9wcmVmaXgKKyAgICAgZWxzZQorICAgICAgIGFtX3B5X3ByZWZpeD0kcHJlZml4CisgICAgIGZpCisgICAgIGFtX2N2X3B5dGhvbl9weXRob25kaXI9YCRQWVRIT04gLWMgImltcG9ydCBzeXM7IGZyb20gZGlzdHV0aWxzIGltcG9ydCBzeXNjb25maWc7IHN5cy5zdGRvdXQud3JpdGUoc3lzY29uZmlnLmdldF9weXRob25fbGliKDAsMCxwcmVmaXg9JyRhbV9weV9wcmVmaXgnKSkiIDI+L2Rldi9udWxsYAorICAgICBjYXNlICRhbV9jdl9weXRob25fcHl0aG9uZGlyIGluCisgICAgICRhbV9weV9wcmVmaXgqKQorICAgICAgIGFtX19zdHJpcF9wcmVmaXg9YGVjaG8gIiRhbV9weV9wcmVmaXgiIHwgc2VkICdzfC58LnxnJ2AKKyAgICAgICBhbV9jdl9weXRob25fcHl0aG9uZGlyPWBlY2hvICIkYW1fY3ZfcHl0aG9uX3B5dGhvbmRpciIgfCBzZWQgInMsXiRhbV9fc3RyaXBfcHJlZml4LCRQWVRIT05fUFJFRklYLCJgCisgICAgICAgOzsKKyAgICAgKikKKyAgICAgICBjYXNlICRhbV9weV9wcmVmaXggaW4KKyAgICAgICAgIC91c3J8L1N5c3RlbSopIDs7CisgICAgICAgICAqKQorCSAgYW1fY3ZfcHl0aG9uX3B5dGhvbmRpcj0kUFlUSE9OX1BSRUZJWC9saWIvcHl0aG9uJFBZVEhPTl9WRVJTSU9OL3NpdGUtcGFja2FnZXMKKwkgIDs7CisgICAgICAgZXNhYworICAgICAgIDs7CisgICAgIGVzYWMKKyAgICBdKQorICBBQ19TVUJTVChbcHl0aG9uZGlyXSwgWyRhbV9jdl9weXRob25fcHl0aG9uZGlyXSkKKworICBkbmwgcGtncHl0aG9uZGlyIC0tICRQQUNLQUdFIGRpcmVjdG9yeSB1bmRlciBweXRob25kaXIuICBXYXMKKyAgZG5sICAgUFlUSE9OX1NJVEVfUEFDS0FHRSBpbiBwcmV2aW91cyBiZXRhcywgYnV0IHRoaXMgbmFtaW5nIGlzCisgIGRubCAgIG1vcmUgY29uc2lzdGVudCB3aXRoIHRoZSByZXN0IG9mIGF1dG9tYWtlLgorCisgIEFDX1NVQlNUKFtwa2dweXRob25kaXJdLCBbXCR7cHl0aG9uZGlyfS8kUEFDS0FHRV0pCisKKyAgZG5sIHB5ZXhlY2RpciAtLSBkaXJlY3RvcnkgZm9yIGluc3RhbGxpbmcgcHl0aG9uIGV4dGVuc2lvbiBtb2R1bGVzCisgIGRubCAgIChzaGFyZWQgbGlicmFyaWVzKQorICBkbmwgUXVlcnkgZGlzdHV0aWxzIGZvciB0aGlzIGRpcmVjdG9yeS4KKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciAkYW1fZGlzcGxheV9QWVRIT04gZXh0ZW5zaW9uIG1vZHVsZSBkaXJlY3RvcnldLAorICAgIFthbV9jdl9weXRob25fcHlleGVjZGlyXSwKKyAgICBbaWYgdGVzdCAieCRleGVjX3ByZWZpeCIgPSB4Tk9ORQorICAgICB0aGVuCisgICAgICAgYW1fcHlfZXhlY19wcmVmaXg9JGFtX3B5X3ByZWZpeAorICAgICBlbHNlCisgICAgICAgYW1fcHlfZXhlY19wcmVmaXg9JGV4ZWNfcHJlZml4CisgICAgIGZpCisgICAgIGFtX2N2X3B5dGhvbl9weWV4ZWNkaXI9YCRQWVRIT04gLWMgImltcG9ydCBzeXM7IGZyb20gZGlzdHV0aWxzIGltcG9ydCBzeXNjb25maWc7IHN5cy5zdGRvdXQud3JpdGUoc3lzY29uZmlnLmdldF9weXRob25fbGliKDEsMCxwcmVmaXg9JyRhbV9weV9leGVjX3ByZWZpeCcpKSIgMj4vZGV2L251bGxgCisgICAgIGNhc2UgJGFtX2N2X3B5dGhvbl9weWV4ZWNkaXIgaW4KKyAgICAgJGFtX3B5X2V4ZWNfcHJlZml4KikKKyAgICAgICBhbV9fc3RyaXBfcHJlZml4PWBlY2hvICIkYW1fcHlfZXhlY19wcmVmaXgiIHwgc2VkICdzfC58LnxnJ2AKKyAgICAgICBhbV9jdl9weXRob25fcHlleGVjZGlyPWBlY2hvICIkYW1fY3ZfcHl0aG9uX3B5ZXhlY2RpciIgfCBzZWQgInMsXiRhbV9fc3RyaXBfcHJlZml4LCRQWVRIT05fRVhFQ19QUkVGSVgsImAKKyAgICAgICA7OworICAgICAqKQorICAgICAgIGNhc2UgJGFtX3B5X2V4ZWNfcHJlZml4IGluCisgICAgICAgICAvdXNyfC9TeXN0ZW0qKSA7OworICAgICAgICAgKikKKwkgICBhbV9jdl9weXRob25fcHlleGVjZGlyPSRQWVRIT05fRVhFQ19QUkVGSVgvbGliL3B5dGhvbiRQWVRIT05fVkVSU0lPTi9zaXRlLXBhY2thZ2VzCisJICAgOzsKKyAgICAgICBlc2FjCisgICAgICAgOzsKKyAgICAgZXNhYworICAgIF0pCisgIEFDX1NVQlNUKFtweWV4ZWNkaXJdLCBbJGFtX2N2X3B5dGhvbl9weWV4ZWNkaXJdKQorCisgIGRubCBwa2dweWV4ZWNkaXIgLS0gJChweWV4ZWNkaXIpLyQoUEFDS0FHRSkKKworICBBQ19TVUJTVChbcGtncHlleGVjZGlyXSwgW1wke3B5ZXhlY2Rpcn0vJFBBQ0tBR0VdKQorCisgIGRubCBSdW4gYW55IHVzZXItc3BlY2lmaWVkIGFjdGlvbi4KKyAgJDIKKyAgZmkKKworXSkKKworCisjIEFNX1BZVEhPTl9DSEVDS19WRVJTSU9OKFBST0csIFZFUlNJT04sIFtBQ1RJT04tSUYtVFJVRV0sIFtBQ1RJT04tSUYtRkFMU0VdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUnVuIEFDVElPTi1JRi1UUlVFIGlmIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgUFJPRyBoYXMgdmVyc2lvbiA+PSBWRVJTSU9OLgorIyBSdW4gQUNUSU9OLUlGLUZBTFNFIG90aGVyd2lzZS4KKyMgVGhpcyB0ZXN0IHVzZXMgc3lzLmhleHZlcnNpb24gaW5zdGVhZCBvZiB0aGUgc3RyaW5nIGVxdWl2YWxlbnQgKGZpcnN0CisjIHdvcmQgb2Ygc3lzLnZlcnNpb24pLCBpbiBvcmRlciB0byBjb3BlIHdpdGggdmVyc2lvbnMgc3VjaCBhcyAyLjJjMS4KKyMgVGhpcyBzdXBwb3J0cyBQeXRob24gMi4wIG9yIGhpZ2hlci4gKDIuMCB3YXMgcmVsZWFzZWQgb24gT2N0b2JlciAxNiwgMjAwMCkuCitBQ19ERUZVTihbQU1fUFlUSE9OX0NIRUNLX1ZFUlNJT05dLAorIFtwcm9nPSJpbXBvcnQgc3lzCisjIHNwbGl0IHN0cmluZ3MgYnkgJy4nIGFuZCBjb252ZXJ0IHRvIG51bWVyaWMuICBBcHBlbmQgc29tZSB6ZXJvcworIyBiZWNhdXNlIHdlIG5lZWQgYXQgbGVhc3QgNCBkaWdpdHMgZm9yIHRoZSBoZXggY29udmVyc2lvbi4KKyMgbWFwIHJldHVybnMgYW4gaXRlcmF0b3IgaW4gUHl0aG9uIDMuMCBhbmQgYSBsaXN0IGluIDIueAorbWludmVyID0gbGlzdChtYXAoaW50LCAnJDInLnNwbGl0KCcuJykpKSArIFtbMCwgMCwgMF1dCittaW52ZXJoZXggPSAwCisjIHhyYW5nZSBpcyBub3QgcHJlc2VudCBpbiBQeXRob24gMy4wIGFuZCByYW5nZSByZXR1cm5zIGFuIGl0ZXJhdG9yCitmb3IgaSBpbiBsaXN0KHJhbmdlKDAsIDQpKTogbWludmVyaGV4ID0gKG1pbnZlcmhleCA8PCA4KSArIG1pbnZlcltbaV1dCitzeXMuZXhpdChzeXMuaGV4dmVyc2lvbiA8IG1pbnZlcmhleCkiCisgIEFTX0lGKFtBTV9SVU5fTE9HKFskMSAtYyAiJHByb2ciXSldLCBbJDNdLCBbJDRdKV0pCisKKyMgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAzLCAyMDA1LCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDEKKworIyBBTV9SVU5fTE9HKENPTU1BTkQpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUnVuIENPTU1BTkQsIHNhdmUgdGhlIGV4aXQgc3RhdHVzIGluIGFjX3N0YXR1cywgYW5kIGxvZyBpdC4KKyMgKFRoaXMgaGFzIGJlZW4gYWRhcHRlZCBmcm9tIEF1dG9jb25mJ3MgX0FDX1JVTl9MT0cgbWFjcm8uKQorQUNfREVGVU4oW0FNX1JVTl9MT0ddLAorW3sgZWNobyAiJGFzX21lOiRMSU5FTk86ICQxIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAoJDEpID4mQVNfTUVTU0FHRV9MT0dfRkQgMj4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgIGFjX3N0YXR1cz0kPworICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9XSkKKworIyBDaGVjayB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYnVpbGQgZW52aXJvbm1lbnQgaXMgc2FuZS4gICAgLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMjAwMCwgMjAwMSwgMjAwMywgMjAwNSwgMjAwOAorIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCA1CisKKyMgQU1fU0FOSVRZX0NIRUNLCisjIC0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0FNX1NBTklUWV9DSEVDS10sCitbQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIGJ1aWxkIGVudmlyb25tZW50IGlzIHNhbmVdKQorIyBKdXN0IGluIGNhc2UKK3NsZWVwIDEKK2VjaG8gdGltZXN0YW1wID4gY29uZnRlc3QuZmlsZQorIyBSZWplY3QgdW5zYWZlIGNoYXJhY3RlcnMgaW4gJHNyY2RpciBvciB0aGUgYWJzb2x1dGUgd29ya2luZyBkaXJlY3RvcnkKKyMgbmFtZS4gIEFjY2VwdCBzcGFjZSBhbmQgdGFiIG9ubHkgaW4gdGhlIGxhdHRlci4KK2FtX2xmPScKKycKK2Nhc2UgYHB3ZGAgaW4KKyAgKltbXFxcIlwjXCRcJlwnXGAkYW1fbGZdXSopCisgICAgQUNfTVNHX0VSUk9SKFt1bnNhZmUgYWJzb2x1dGUgd29ya2luZyBkaXJlY3RvcnkgbmFtZV0pOzsKK2VzYWMKK2Nhc2UgJHNyY2RpciBpbgorICAqW1tcXFwiXCNcJFwmXCdcYCRhbV9sZlwgXAldXSopCisgICAgQUNfTVNHX0VSUk9SKFt1bnNhZmUgc3JjZGlyIHZhbHVlOiBgJHNyY2RpciddKTs7Citlc2FjCisKKyMgRG8gYHNldCcgaW4gYSBzdWJzaGVsbCBzbyB3ZSBkb24ndCBjbG9iYmVyIHRoZSBjdXJyZW50IHNoZWxsJ3MKKyMgYXJndW1lbnRzLiAgTXVzdCB0cnkgLUwgZmlyc3QgaW4gY2FzZSBjb25maWd1cmUgaXMgYWN0dWFsbHkgYQorIyBzeW1saW5rOyBzb21lIHN5c3RlbXMgcGxheSB3ZWlyZCBnYW1lcyB3aXRoIHRoZSBtb2QgdGltZSBvZiBzeW1saW5rcworIyAoZWcgRnJlZUJTRCByZXR1cm5zIHRoZSBtb2QgdGltZSBvZiB0aGUgc3ltbGluaydzIGNvbnRhaW5pbmcKKyMgZGlyZWN0b3J5KS4KK2lmICgKKyAgIHNldCBYIGBscyAtTHQgIiRzcmNkaXIvY29uZmlndXJlIiBjb25mdGVzdC5maWxlIDI+IC9kZXYvbnVsbGAKKyAgIGlmIHRlc3QgIiRbKl0iID0gIlgiOyB0aGVuCisgICAgICAjIC1MIGRpZG4ndCB3b3JrLgorICAgICAgc2V0IFggYGxzIC10ICIkc3JjZGlyL2NvbmZpZ3VyZSIgY29uZnRlc3QuZmlsZWAKKyAgIGZpCisgICBybSAtZiBjb25mdGVzdC5maWxlCisgICBpZiB0ZXN0ICIkWypdIiAhPSAiWCAkc3JjZGlyL2NvbmZpZ3VyZSBjb25mdGVzdC5maWxlIiBcCisgICAgICAmJiB0ZXN0ICIkWypdIiAhPSAiWCBjb25mdGVzdC5maWxlICRzcmNkaXIvY29uZmlndXJlIjsgdGhlbgorCisgICAgICAjIElmIG5laXRoZXIgbWF0Y2hlZCwgdGhlbiB3ZSBoYXZlIGEgYnJva2VuIGxzLiAgVGhpcyBjYW4gaGFwcGVuCisgICAgICAjIGlmLCBmb3IgaW5zdGFuY2UsIENPTkZJR19TSEVMTCBpcyBiYXNoIGFuZCBpdCBpbmhlcml0cyBhCisgICAgICAjIGJyb2tlbiBscyBhbGlhcyBmcm9tIHRoZSBlbnZpcm9ubWVudC4gIFRoaXMgaGFzIGFjdHVhbGx5CisgICAgICAjIGhhcHBlbmVkLiAgU3VjaCBhIHN5c3RlbSBjb3VsZCBub3QgYmUgY29uc2lkZXJlZCAic2FuZSIuCisgICAgICBBQ19NU0dfRVJST1IoW2xzIC10IGFwcGVhcnMgdG8gZmFpbC4gIE1ha2Ugc3VyZSB0aGVyZSBpcyBub3QgYSBicm9rZW4KK2FsaWFzIGluIHlvdXIgZW52aXJvbm1lbnRdKQorICAgZmkKKworICAgdGVzdCAiJFsyXSIgPSBjb25mdGVzdC5maWxlCisgICApCit0aGVuCisgICAjIE9rLgorICAgOgorZWxzZQorICAgQUNfTVNHX0VSUk9SKFtuZXdseSBjcmVhdGVkIGZpbGUgaXMgb2xkZXIgdGhhbiBkaXN0cmlidXRlZCBmaWxlcyEKK0NoZWNrIHlvdXIgc3lzdGVtIGNsb2NrXSkKK2ZpCitBQ19NU0dfUkVTVUxUKHllcyldKQorCisjIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgMgorCisjIEFNX1NJTEVOVF9SVUxFUyhbREVGQVVMVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuYWJsZSBsZXNzIHZlcmJvc2UgYnVpbGQgcnVsZXM7IHdpdGggdGhlIGRlZmF1bHQgc2V0IHRvIERFRkFVTFQKKyMgKGB5ZXMnIGJlaW5nIGxlc3MgdmVyYm9zZSwgYG5vJyBvciBlbXB0eSBiZWluZyB2ZXJib3NlKS4KK0FDX0RFRlVOKFtBTV9TSUxFTlRfUlVMRVNdLAorW0FDX0FSR19FTkFCTEUoW3NpbGVudC1ydWxlc10sCitbICAtLWVuYWJsZS1zaWxlbnQtcnVsZXMgICAgICAgICAgbGVzcyB2ZXJib3NlIGJ1aWxkIG91dHB1dCAodW5kbzogYG1ha2UgVj0xJykKKyAgLS1kaXNhYmxlLXNpbGVudC1ydWxlcyAgICAgICAgIHZlcmJvc2UgYnVpbGQgb3V0cHV0ICh1bmRvOiBgbWFrZSBWPTAnKV0pCitjYXNlICRlbmFibGVfc2lsZW50X3J1bGVzIGluCit5ZXMpIEFNX0RFRkFVTFRfVkVSQk9TSVRZPTA7Oworbm8pICBBTV9ERUZBVUxUX1ZFUkJPU0lUWT0xOzsKKyopICAgQU1fREVGQVVMVF9WRVJCT1NJVFk9bTRfaWYoWyQxXSwgW3llc10sIFswXSwgWzFdKTs7Citlc2FjCitkbmwKK2RubCBBIGZldyBgbWFrZScgaW1wbGVtZW50YXRpb25zIChlLmcuLCBOb25TdG9wIE9TIGFuZCBOZXh0U3RlcCkKK2RubCBkbyBub3Qgc3VwcG9ydCBuZXN0ZWQgdmFyaWFibGUgZXhwYW5zaW9ucy4KK2RubCBTZWUgYXV0b21ha2UgYnVnIzk5MjggYW5kIGJ1ZyMxMDIzNy4KK2FtX21ha2U9JHtNQUtFLW1ha2V9CitBQ19DQUNIRV9DSEVDSyhbd2hldGhlciAkYW1fbWFrZSBzdXBwb3J0cyBuZXN0ZWQgdmFyaWFibGVzXSwKKyAgIFthbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlc10sCisgICBbaWYgQVNfRUNITyhbWydUUlVFPSQoQkFSJChWKSkKK0JBUjA9ZmFsc2UKK0JBUjE9dHJ1ZQorVj0xCithbV9fZG9pdDoKKwlAJChUUlVFKQorLlBIT05ZOiBhbV9fZG9pdCddXSkgfCAkYW1fbWFrZSAtZiAtID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlcz15ZXMKK2Vsc2UKKyAgYW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXM9bm8KK2ZpXSkKK2lmIHRlc3QgJGFtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzID0geWVzOyB0aGVuCisgIGRubCBVc2luZyBgJFYnIGluc3RlYWQgb2YgYCQoViknIGJyZWFrcyBJUklYIG1ha2UuCisgIEFNX1Y9JyQoViknCisgIEFNX0RFRkFVTFRfVj0nJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSknCitlbHNlCisgIEFNX1Y9JEFNX0RFRkFVTFRfVkVSQk9TSVRZCisgIEFNX0RFRkFVTFRfVj0kQU1fREVGQVVMVF9WRVJCT1NJVFkKK2ZpCitBQ19TVUJTVChbQU1fVl0pZG5sCitBTV9TVUJTVF9OT1RNQUtFKFtBTV9WXSlkbmwKK0FDX1NVQlNUKFtBTV9ERUZBVUxUX1ZdKWRubAorQU1fU1VCU1RfTk9UTUFLRShbQU1fREVGQVVMVF9WXSlkbmwKK0FDX1NVQlNUKFtBTV9ERUZBVUxUX1ZFUkJPU0lUWV0pZG5sCitBTV9CQUNLU0xBU0g9J1wnCitBQ19TVUJTVChbQU1fQkFDS1NMQVNIXSlkbmwKK19BTV9TVUJTVF9OT1RNQUtFKFtBTV9CQUNLU0xBU0hdKWRubAorXSkKKworIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDMsIDIwMDUsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgMQorCisjIEFNX1BST0dfSU5TVEFMTF9TVFJJUAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgT25lIGlzc3VlIHdpdGggdmVuZG9yIGBpbnN0YWxsJyAoZXZlbiBHTlUpIGlzIHRoYXQgeW91IGNhbid0CisjIHNwZWNpZnkgdGhlIHByb2dyYW0gdXNlZCB0byBzdHJpcCBiaW5hcmllcy4gIFRoaXMgaXMgZXNwZWNpYWxseQorIyBhbm5veWluZyBpbiBjcm9zcy1jb21waWxpbmcgZW52aXJvbm1lbnRzLCB3aGVyZSB0aGUgYnVpbGQncyBzdHJpcAorIyBpcyB1bmxpa2VseSB0byBoYW5kbGUgdGhlIGhvc3QncyBiaW5hcmllcy4KKyMgRm9ydHVuYXRlbHkgaW5zdGFsbC1zaCB3aWxsIGhvbm9yIGEgU1RSSVBQUk9HIHZhcmlhYmxlLCBzbyB3ZQorIyBhbHdheXMgdXNlIGluc3RhbGwtc2ggaW4gYG1ha2UgaW5zdGFsbC1zdHJpcCcsIGFuZCBpbml0aWFsaXplCisjIFNUUklQUFJPRyB3aXRoIHRoZSB2YWx1ZSBvZiB0aGUgU1RSSVAgdmFyaWFibGUgKHNldCBieSB0aGUgdXNlcikuCitBQ19ERUZVTihbQU1fUFJPR19JTlNUQUxMX1NUUklQXSwKK1tBQ19SRVFVSVJFKFtBTV9QUk9HX0lOU1RBTExfU0hdKWRubAorIyBJbnN0YWxsZWQgYmluYXJpZXMgYXJlIHVzdWFsbHkgc3RyaXBwZWQgdXNpbmcgYHN0cmlwJyB3aGVuIHRoZSB1c2VyCisjIHJ1biBgbWFrZSBpbnN0YWxsLXN0cmlwJy4gIEhvd2V2ZXIgYHN0cmlwJyBtaWdodCBub3QgYmUgdGhlIHJpZ2h0CisjIHRvb2wgdG8gdXNlIGluIGNyb3NzLWNvbXBpbGF0aW9uIGVudmlyb25tZW50cywgdGhlcmVmb3JlIEF1dG9tYWtlCisjIHdpbGwgaG9ub3IgdGhlIGBTVFJJUCcgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gb3ZlcnJ1bGUgdGhpcyBwcm9ncmFtLgorZG5sIERvbid0IHRlc3QgZm9yICRjcm9zc19jb21waWxpbmcgPSB5ZXMsIGJlY2F1c2UgaXQgbWlnaHQgYmUgYG1heWJlJy4KK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciICE9IG5vOyB0aGVuCisgIEFDX0NIRUNLX1RPT0woW1NUUklQXSwgW3N0cmlwXSwgOikKK2ZpCitJTlNUQUxMX1NUUklQX1BST0dSQU09IlwkKGluc3RhbGxfc2gpIC1jIC1zIgorQUNfU1VCU1QoW0lOU1RBTExfU1RSSVBfUFJPR1JBTV0pXSkKKworIyBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDgsIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgMworCisjIF9BTV9TVUJTVF9OT1RNQUtFKFZBUklBQkxFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJldmVudCBBdXRvbWFrZSBmcm9tIG91dHB1dHRpbmcgVkFSSUFCTEUgPSBAVkFSSUFCTEVAIGluIE1ha2VmaWxlLmluLgorIyBUaGlzIG1hY3JvIGlzIHRyYWNlZCBieSBBdXRvbWFrZS4KK0FDX0RFRlVOKFtfQU1fU1VCU1RfTk9UTUFLRV0pCisKKyMgQU1fU1VCU1RfTk9UTUFLRShWQVJJQUJMRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHVibGljIHNpc3RlciBvZiBfQU1fU1VCU1RfTk9UTUFLRS4KK0FDX0RFRlVOKFtBTV9TVUJTVF9OT1RNQUtFXSwgW19BTV9TVUJTVF9OT1RNQUtFKCRAKV0pCisKKyMgQ2hlY2sgaG93IHRvIGNyZWF0ZSBhIHRhcmJhbGwuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgMgorCisjIF9BTV9QUk9HX1RBUihGT1JNQVQpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIGhvdyB0byBjcmVhdGUgYSB0YXJiYWxsIGluIGZvcm1hdCBGT1JNQVQuCisjIEZPUk1BVCBzaG91bGQgYmUgb25lIG9mIGB2NycsIGB1c3RhcicsIG9yIGBwYXgnLgorIworIyBTdWJzdGl0dXRlIGEgdmFyaWFibGUgJChhbV9fdGFyKSB0aGF0IGlzIGEgY29tbWFuZAorIyB3cml0aW5nIHRvIHN0ZG91dCBhIEZPUk1BVC10YXJiYWxsIGNvbnRhaW5pbmcgdGhlIGRpcmVjdG9yeQorIyAkdGFyZGlyLgorIyAgICAgdGFyZGlyPWRpcmVjdG9yeSAmJiAkKGFtX190YXIpID4gcmVzdWx0LnRhcgorIworIyBTdWJzdGl0dXRlIGEgdmFyaWFibGUgJChhbV9fdW50YXIpIHRoYXQgZXh0cmFjdCBzdWNoCisjIGEgdGFyYmFsbCByZWFkIGZyb20gc3RkaW4uCisjICAgICAkKGFtX191bnRhcikgPCByZXN1bHQudGFyCitBQ19ERUZVTihbX0FNX1BST0dfVEFSXSwKK1sjIEFsd2F5cyBkZWZpbmUgQU1UQVIgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuICBZZXMsIGl0J3Mgc3RpbGwgdXNlZAorIyBpbiB0aGUgd2lsZCA6LSggIFdlIHNob3VsZCBmaW5kIGEgcHJvcGVyIHdheSB0byBkZXByZWNhdGUgaXQgLi4uCitBQ19TVUJTVChbQU1UQVJdLCBbJyQke1RBUi10YXJ9J10pCittNF9pZihbJDFdLCBbdjddLAorICAgICBbYW1fX3Rhcj0nJCR7VEFSLXRhcn0gY2hvZiAtICIkJHRhcmRpciInIGFtX191bnRhcj0nJCR7VEFSLXRhcn0geGYgLSddLAorICAgICBbbTRfY2FzZShbJDFdLCBbdXN0YXJdLCwgW3BheF0sLAorICAgICAgICAgICAgICBbbTRfZmF0YWwoW1Vua25vd24gdGFyIGZvcm1hdF0pXSkKK0FDX01TR19DSEVDS0lORyhbaG93IHRvIGNyZWF0ZSBhICQxIHRhciBhcmNoaXZlXSkKKyMgTG9vcCBvdmVyIGFsbCBrbm93biBtZXRob2RzIHRvIGNyZWF0ZSBhIHRhciBhcmNoaXZlIHVudGlsIG9uZSB3b3Jrcy4KK19hbV90b29scz0nZ251dGFyIG00X2lmKFskMV0sIFt1c3Rhcl0sIFtwbGFpbnRhcl0pIHBheCBjcGlvIG5vbmUnCitfYW1fdG9vbHM9JHthbV9jdl9wcm9nX3Rhcl8kMS0kX2FtX3Rvb2xzfQorIyBEbyBub3QgZm9sZCB0aGUgYWJvdmUgdHdvIGxpbmUgaW50byBvbmUsIGJlY2F1c2UgVHJ1NjQgc2ggYW5kCisjIFNvbGFyaXMgc2ggd2lsbCBub3QgZ3JvayBzcGFjZXMgaW4gdGhlIHJocyBvZiBgLScuCitmb3IgX2FtX3Rvb2wgaW4gJF9hbV90b29scworZG8KKyAgY2FzZSAkX2FtX3Rvb2wgaW4KKyAgZ251dGFyKQorICAgIGZvciBfYW1fdGFyIGluIHRhciBnbnV0YXIgZ3RhcjsKKyAgICBkbworICAgICAgQU1fUlVOX0xPRyhbJF9hbV90YXIgLS12ZXJzaW9uXSkgJiYgYnJlYWsKKyAgICBkb25lCisgICAgYW1fX3Rhcj0iJF9hbV90YXIgLS1mb3JtYXQ9bTRfaWYoWyQxXSwgW3BheF0sIFtwb3NpeF0sIFskMV0pIC1jaGYgLSAiJyIkJHRhcmRpciInCisgICAgYW1fX3Rhcl89IiRfYW1fdGFyIC0tZm9ybWF0PW00X2lmKFskMV0sIFtwYXhdLCBbcG9zaXhdLCBbJDFdKSAtY2hmIC0gIiciJHRhcmRpciInCisgICAgYW1fX3VudGFyPSIkX2FtX3RhciAteGYgLSIKKyAgICA7OworICBwbGFpbnRhcikKKyAgICAjIE11c3Qgc2tpcCBHTlUgdGFyOiBpZiBpdCBkb2VzIG5vdCBzdXBwb3J0IC0tZm9ybWF0PSBpdCBkb2Vzbid0IGNyZWF0ZQorICAgICMgdXN0YXIgdGFyYmFsbCBlaXRoZXIuCisgICAgKHRhciAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMSAmJiBjb250aW51ZQorICAgIGFtX190YXI9J3RhciBjaGYgLSAiJCR0YXJkaXIiJworICAgIGFtX190YXJfPSd0YXIgY2hmIC0gIiR0YXJkaXIiJworICAgIGFtX191bnRhcj0ndGFyIHhmIC0nCisgICAgOzsKKyAgcGF4KQorICAgIGFtX190YXI9J3BheCAtTCAteCAkMSAtdyAiJCR0YXJkaXIiJworICAgIGFtX190YXJfPSdwYXggLUwgLXggJDEgLXcgIiR0YXJkaXIiJworICAgIGFtX191bnRhcj0ncGF4IC1yJworICAgIDs7CisgIGNwaW8pCisgICAgYW1fX3Rhcj0nZmluZCAiJCR0YXJkaXIiIC1wcmludCB8IGNwaW8gLW8gLUggJDEgLUwnCisgICAgYW1fX3Rhcl89J2ZpbmQgIiR0YXJkaXIiIC1wcmludCB8IGNwaW8gLW8gLUggJDEgLUwnCisgICAgYW1fX3VudGFyPSdjcGlvIC1pIC1IICQxIC1kJworICAgIDs7CisgIG5vbmUpCisgICAgYW1fX3Rhcj1mYWxzZQorICAgIGFtX190YXJfPWZhbHNlCisgICAgYW1fX3VudGFyPWZhbHNlCisgICAgOzsKKyAgZXNhYworCisgICMgSWYgdGhlIHZhbHVlIHdhcyBjYWNoZWQsIHN0b3Agbm93LiAgV2UganVzdCB3YW50ZWQgdG8gaGF2ZSBhbV9fdGFyCisgICMgYW5kIGFtX191bnRhciBzZXQuCisgIHRlc3QgLW4gIiR7YW1fY3ZfcHJvZ190YXJfJDF9IiAmJiBicmVhaworCisgICMgdGFyL3VudGFyIGEgZHVtbXkgZGlyZWN0b3J5LCBhbmQgc3RvcCBpZiB0aGUgY29tbWFuZCB3b3JrcworICBybSAtcmYgY29uZnRlc3QuZGlyCisgIG1rZGlyIGNvbmZ0ZXN0LmRpcgorICBlY2hvIEdyZXBNZSA+IGNvbmZ0ZXN0LmRpci9maWxlCisgIEFNX1JVTl9MT0coW3RhcmRpcj1jb25mdGVzdC5kaXIgJiYgZXZhbCAkYW1fX3Rhcl8gPmNvbmZ0ZXN0LnRhcl0pCisgIHJtIC1yZiBjb25mdGVzdC5kaXIKKyAgaWYgdGVzdCAtcyBjb25mdGVzdC50YXI7IHRoZW4KKyAgICBBTV9SVU5fTE9HKFskYW1fX3VudGFyIDxjb25mdGVzdC50YXJdKQorICAgIGdyZXAgR3JlcE1lIGNvbmZ0ZXN0LmRpci9maWxlID4vZGV2L251bGwgMj4mMSAmJiBicmVhaworICBmaQorZG9uZQorcm0gLXJmIGNvbmZ0ZXN0LmRpcgorCitBQ19DQUNIRV9WQUwoW2FtX2N2X3Byb2dfdGFyXyQxXSwgW2FtX2N2X3Byb2dfdGFyXyQxPSRfYW1fdG9vbF0pCitBQ19NU0dfUkVTVUxUKFskYW1fY3ZfcHJvZ190YXJfJDFdKV0pCitBQ19TVUJTVChbYW1fX3Rhcl0pCitBQ19TVUJTVChbYW1fX3VudGFyXSkKK10pICMgX0FNX1BST0dfVEFSCisKK200X2luY2x1ZGUoW2NvbW1vbi9hY3hfcHRocmVhZC5tNF0pCittNF9pbmNsdWRlKFtjb21tb24vZ2NjX3N0YWNrX3Byb3RlY3QubTRdKQorbTRfaW5jbHVkZShbY29tbW9uL2djY192aXNpYmlsaXR5Lm00XSkKK200X2luY2x1ZGUoW2NvbW1vbi9pbnRsdG9vbC5tNF0pCittNF9pbmNsdWRlKFtjb21tb24vaW50cm9zcGVjdGlvbi5tNF0pCittNF9pbmNsdWRlKFtjb21tb24vbGlidG9vbC5tNF0pCittNF9pbmNsdWRlKFtjb21tb24vbHRvcHRpb25zLm00XSkKK200X2luY2x1ZGUoW2NvbW1vbi9sdHN1Z2FyLm00XSkKK200X2luY2x1ZGUoW2NvbW1vbi9sdHZlcnNpb24ubTRdKQorbTRfaW5jbHVkZShbY29tbW9uL2x0fm9ic29sZXRlLm00XSkKK200X2luY2x1ZGUoW2NvbW1vbi9ubHMubTRdKQorbTRfaW5jbHVkZShbY29tbW9uL3B5dGhvbi5tNF0pCittNF9pbmNsdWRlKFthY2luY2x1ZGUubTRdKQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F1dG9nZW4uc2ggYi9hdmFoaS0wLjYuMzEvYXV0b2dlbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yYzY4YTZjCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F1dG9nZW4uc2gKQEAgLTAsMCArMSw3NyBAQAorIyEvYmluL2Jhc2gKKworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKyMKKyMgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyMgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyMgVVNBLgorCitBTV9WRVJTSU9OPTEuMTEKK0FDX1ZFUlNJT049Mi42MworCitydW5fdmVyc2lvbmVkKCkgeworICAgIGxvY2FsIFAKKyAgICBsb2NhbCBWCisKKyAgICBWPSQoZWNobyAiJDIiIHwgc2VkIC1lICdzLFwuLCxnJykKKworICAgIGlmIFsgLWUgImB3aGljaCAkMSRWIDI+IC9kZXYvbnVsbGAiIF0gOyB0aGVuCisgICAgICAgIFA9IiQxJFYiCisgICAgZWxzZQorICAgICAgICBpZiBbIC1lICJgd2hpY2ggJDEtJDIgMj4gL2Rldi9udWxsYCIgXSA7IHRoZW4KKyAgICAgICAgICAgIFA9IiQxLSQyIgorICAgICAgICBlbHNlCisgICAgICAgICAgICBQPSIkMSIKKyAgICAgICAgZmkKKyAgICBmaQorCisgICAgc2hpZnQgMgorICAgICIkUCIgIiRAIgorfQorCitzZXQgLWV4CisKK2lmIFsgLWYgLmdpdC9ob29rcy9wcmUtY29tbWl0LnNhbXBsZSAtYSAhIC1mIC5naXQvaG9va3MvcHJlLWNvbW1pdCBdIDsgdGhlbgorICAgIGNwIC1wIC5naXQvaG9va3MvcHJlLWNvbW1pdC5zYW1wbGUgLmdpdC9ob29rcy9wcmUtY29tbWl0ICYmIFwKKyAgICBjaG1vZCAreCAuZ2l0L2hvb2tzL3ByZS1jb21taXQgJiYgXAorICAgIGVjaG8gIkFjdGl2YXRlZCBwcmUtY29tbWl0IGhvb2suIgorZmkKKworaWYgWyAieCQxIiA9ICJ4YW0iIF0gOyB0aGVuCisgICAgcnVuX3ZlcnNpb25lZCBhdXRvbWFrZSAiJEFNX1ZFUlNJT04iIC1hIC1jIC0tZm9yZWlnbgorICAgIC4vY29uZmlnLnN0YXR1cworZWxzZSAKKyAgICBybSAtcmYgYXV0b200dGUuY2FjaGUKKyAgICBybSAtZiBjb25maWcuY2FjaGUKKworICAgIHJtIC1mIE1ha2VmaWxlLmFtfiBjb25maWd1cmUuYWN+CisgICAgIyBFdmlsLCBldmlsLCBldmlsLCBldmlsIGhhY2sKKyAgICBzZWQgJ3MvcmVhZCBkdW1teS9cIy8nIGB3aGljaCBnZXR0ZXh0aXplYCB8IHNoIC1zIC0tIC0tY29weSAtLWZvcmNlCisgICAgdGVzdCAtZiBNYWtlZmlsZS5hbX4gJiYgbXYgTWFrZWZpbGUuYW1+IE1ha2VmaWxlLmFtCisgICAgdGVzdCAtZiBjb25maWd1cmUuYWN+ICYmIG12IGNvbmZpZ3VyZS5hY34gY29uZmlndXJlLmFjCisKKyAgICB0ZXN0ICJ4JExJQlRPT0xJWkUiID0gIngiICYmIExJQlRPT0xJWkU9bGlidG9vbGl6ZQorCisgICAgaW50bHRvb2xpemUgLS1jb3B5IC0tZm9yY2UgLS1hdXRvbWFrZQorICAgICIkTElCVE9PTElaRSIgLWMgLS1mb3JjZQorICAgIHJ1bl92ZXJzaW9uZWQgYWNsb2NhbCAiJEFNX1ZFUlNJT04iIC1JIGNvbW1vbgorICAgIHJ1bl92ZXJzaW9uZWQgYXV0b2NvbmYgIiRBQ19WRVJTSU9OIiAtV2FsbAorICAgIHJ1bl92ZXJzaW9uZWQgYXV0b2hlYWRlciAiJEFDX1ZFUlNJT04iCisgICAgcnVuX3ZlcnNpb25lZCBhdXRvbWFrZSAiJEFNX1ZFUlNJT04iIC1hIC1jIC0tZm9yZWlnbgorCisgICAgaWYgdGVzdCAieCROT0NPTkZJR1VSRSIgPSAieCI7IHRoZW4KKyAgICAgICAgLi9jb25maWd1cmUgIiRAIgorICAgICAgICBtYWtlIGNsZWFuCisgICAgZmkKK2ZpCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktYXV0b2lwZC9NYWtlZmlsZS5hbSBiL2F2YWhpLTAuNi4zMS9hdmFoaS1hdXRvaXBkL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2M2U5OTEKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktYXV0b2lwZC9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDk0IEBACisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorIworIyBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworIyBVU0EuCisKK2lmIEVOQUJMRV9BVVRPSVBECitpZiBIQVZFX0xJQkRBRU1PTgorCitwa2dzeXNjb25mZGlyPSQoc3lzY29uZmRpcikvYXZhaGkKKworQU1fQ0ZMQUdTPSBcCisJLUkkKHRvcF9zcmNkaXIpCisKKyMgVGhpcyBjb29sIGRlYnVnIHRyYXAgd29ya3Mgb24gaTM4Ni9nY2Mgb25seQorQU1fQ0ZMQUdTKz0nLURERUJVR19UUkFQPV9fYXNtX18oImludCAkJDMiKScgXAorCS1EQVZBSElfUlVOVElNRV9ESVI9XCIkKGF2YWhpX3J1bnRpbWVfZGlyKS9cIiBcCisJLURBVkFISV9JUENPTkZfU0NSSVBUPVwiJChwa2dzeXNjb25mZGlyKS9hdmFoaS1hdXRvaXBkLmFjdGlvblwiIFwKKwktREFWQUhJX0lQREFUQV9ESVI9XCIkKGxvY2Fsc3RhdGVkaXIpL2xpYi9hdmFoaS1hdXRvaXBkXCIKKworc2Jpbl9QUk9HUkFNUyA9IGF2YWhpLWF1dG9pcGQKKworYXZhaGlfYXV0b2lwZF9TT1VSQ0VTID0gXAorCW1haW4uYyBtYWluLmggXAorCSAuLi9hdmFoaS1kYWVtb24vc2V0cHJvY3RpdGxlLmMgIC4uL2F2YWhpLWRhZW1vbi9zZXRwcm9jdGl0bGUuaCBcCisJaWZhY2UuaAlcCisJLi4vYXZhaGktY29tbW9uL21hbGxvYy5oIC4uL2F2YWhpLWNvbW1vbi9tYWxsb2MuYyBcCisJLi4vYXZhaGktY29tbW9uL3RpbWV2YWwuaCAuLi9hdmFoaS1jb21tb24vdGltZXZhbC5jCisKK2F2YWhpX2F1dG9pcGRfQ0ZMQUdTID0gJChBTV9DRkxBR1MpICQoTElCREFFTU9OX0NGTEFHUykKK2F2YWhpX2F1dG9pcGRfTERBREQgPSAkKEFNX0xEQUREKSAkKExJQkRBRU1PTl9MSUJTKQorCitpZiBUQVJHRVRfRlJFRUJTRAorYXZhaGlfYXV0b2lwZF9TT1VSQ0VTICs9IGlmYWNlLWJzZC5jCithdmFoaV9hdXRvaXBkX0xEQUREICs9IC1scGNhcAorZWxzZQorYXZhaGlfYXV0b2lwZF9TT1VSQ0VTICs9IGlmYWNlLWxpbnV4LmMKK2VuZGlmCisKK25vZGlzdF9wa2dzeXNjb25mX1NDUklQVFMgPSBhdmFoaS1hdXRvaXBkLmFjdGlvbgorCitpZiBUQVJHRVRfRlJFRUJTRAorYXZhaGktYXV0b2lwZC5hY3Rpb246IGF2YWhpLWF1dG9pcGQuYWN0aW9uLmJzZAorCSQoQU1fVl9HRU4pY3AgJDwgJEAKK2Vsc2UKK2F2YWhpLWF1dG9pcGQuYWN0aW9uOiBhdmFoaS1hdXRvaXBkLmFjdGlvbi5saW51eAorCSQoQU1fVl9HRU4pY3AgJDwgJEAKK2VuZGlmCisKK2lmIFRBUkdFVF9ERUJJQU4KKworbm9pbnN0X1NDUklQVFMgPSBkaGNsaWVudC1lbnRlci1ob29rIGRoY2xpZW50LWV4aXQtaG9vaworCitkaGNsaWVudC1lbnRlci1ob29rOiBkaGNsaWVudC1lbnRlci1ob29rLmluCisJJChBTV9WX0dFTilzZWQgLWUgJ3MsQHNiaW5kaXJcQCwkKHNiaW5kaXIpLGcnICQ8ID4gJEAgJiYgXAorCWNobW9kICt4ICRACisKK2RoY2xpZW50LWV4aXQtaG9vazogZGhjbGllbnQtZXhpdC1ob29rLmluCisJJChBTV9WX0dFTilzZWQgLWUgJ3MsQHNiaW5kaXJcQCwkKHNiaW5kaXIpLGcnICQ8ID4gJEAgJiYgXAorCWNobW9kICt4ICRACisKK0JVSUxEID0gZGhjbGllbnQtZXhpdC1ob29rIGRoY2xpZW50LWVudGVyLWhvb2sKKworZGhjbGllbnRlbnRlcmRpciA9ICQoc3lzY29uZmRpcikvZGhjcC9kaGNsaWVudC1lbnRlci1ob29rcy5kCitkaGNsaWVudGV4aXRkaXIgPSAkKHN5c2NvbmZkaXIpL2RoY3AvZGhjbGllbnQtZXhpdC1ob29rcy5kCisKK2luc3RhbGwtZXhlYy1ob29rOiBkaGNsaWVudC1leGl0LWhvb2sgZGhjbGllbnQtZW50ZXItaG9vaworCSQobWtkaXJfcCkgJChERVNURElSKSQoZGhjbGllbnRlbnRlcmRpcikgJChERVNURElSKSQoZGhjbGllbnRleGl0ZGlyKQorCSQoSU5TVEFMTCkgZGhjbGllbnQtZW50ZXItaG9vayAkKERFU1RESVIpJChkaGNsaWVudGVudGVyZGlyKS9hdmFoaS1hdXRvaXBkCisJJChJTlNUQUxMKSBkaGNsaWVudC1leGl0LWhvb2sgJChERVNURElSKSQoZGhjbGllbnRleGl0ZGlyKS9hdmFoaS1hdXRvaXBkCisKK3VuaW5zdGFsbC1ob29rOgorCXJtIC1mICQoREVTVERJUikkKGRoY2xpZW50ZW50ZXJkaXIpL2F2YWhpLWF1dG9pcGQgJChERVNURElSKSQoZGhjbGllbnRleGl0ZGlyKS9hdmFoaS1hdXRvaXBkCisKK2VuZGlmCisKKworZW5kaWYKK2VuZGlmCisKK0VYVFJBX0RJU1QgPSBkaGNsaWVudC1lbnRlci1ob29rLmluIGRoY2xpZW50LWV4aXQtaG9vay5pbiBhdmFoaS1hdXRvaXBkLmFjdGlvbi5saW51eCBhdmFoaS1hdXRvaXBkLmFjdGlvbi5ic2QKKworQ0xFQU5GSUxFUyA9IGRoY2xpZW50LWVudGVyLWhvb2sgZGhjbGllbnQtZXhpdC1ob29rIGF2YWhpLWF1dG9pcGQuYWN0aW9uCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktYXV0b2lwZC9NYWtlZmlsZS5pbiBiL2F2YWhpLTAuNi4zMS9hdmFoaS1hdXRvaXBkL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3ZjhjYWEKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktYXV0b2lwZC9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDkxOSBAQAorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xMS4zIGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorIworIyBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworIyBVU0EuCisKKworVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorQEVOQUJMRV9BVVRPSVBEX1RSVUVAQEhBVkVfTElCREFFTU9OX1RSVUVAc2Jpbl9QUk9HUkFNUyA9IGF2YWhpLWF1dG9pcGQkKEVYRUVYVCkKK0BFTkFCTEVfQVVUT0lQRF9UUlVFQEBIQVZFX0xJQkRBRU1PTl9UUlVFQEBUQVJHRVRfRlJFRUJTRF9UUlVFQGFtX19hcHBlbmRfMSA9IGlmYWNlLWJzZC5jCitARU5BQkxFX0FVVE9JUERfVFJVRUBASEFWRV9MSUJEQUVNT05fVFJVRUBAVEFSR0VUX0ZSRUVCU0RfVFJVRUBhbV9fYXBwZW5kXzIgPSAtbHBjYXAKK0BFTkFCTEVfQVVUT0lQRF9UUlVFQEBIQVZFX0xJQkRBRU1PTl9UUlVFQEBUQVJHRVRfRlJFRUJTRF9GQUxTRUBhbV9fYXBwZW5kXzMgPSBpZmFjZS1saW51eC5jCitzdWJkaXIgPSBhdmFoaS1hdXRvaXBkCitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9hY3hfcHRocmVhZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vZ2NjX3N0YWNrX3Byb3RlY3QubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2djY192aXNpYmlsaXR5Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9pbnRsdG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vaW50cm9zcGVjdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbGlidG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHRvcHRpb25zLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9sdHN1Z2FyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9sdHZlcnNpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2x0fm9ic29sZXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9ubHMubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vcHl0aG9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2FjaW5jbHVkZS5tNCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9kb3h5Z2VuLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CithbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQoc2JpbmRpcikiICIkKERFU1RESVIpJChwa2dzeXNjb25mZGlyKSIKK1BST0dSQU1TID0gJChzYmluX1BST0dSQU1TKQorYW1fX2F2YWhpX2F1dG9pcGRfU09VUkNFU19ESVNUID0gbWFpbi5jIG1haW4uaCBcCisJLi4vYXZhaGktZGFlbW9uL3NldHByb2N0aXRsZS5jIC4uL2F2YWhpLWRhZW1vbi9zZXRwcm9jdGl0bGUuaCBcCisJaWZhY2UuaCAuLi9hdmFoaS1jb21tb24vbWFsbG9jLmggLi4vYXZhaGktY29tbW9uL21hbGxvYy5jIFwKKwkuLi9hdmFoaS1jb21tb24vdGltZXZhbC5oIC4uL2F2YWhpLWNvbW1vbi90aW1ldmFsLmMgXAorCWlmYWNlLWJzZC5jIGlmYWNlLWxpbnV4LmMKK0BFTkFCTEVfQVVUT0lQRF9UUlVFQEBIQVZFX0xJQkRBRU1PTl9UUlVFQEBUQVJHRVRfRlJFRUJTRF9UUlVFQGFtX19vYmplY3RzXzEgPSBhdmFoaV9hdXRvaXBkLWlmYWNlLWJzZC4kKE9CSkVYVCkKK0BFTkFCTEVfQVVUT0lQRF9UUlVFQEBIQVZFX0xJQkRBRU1PTl9UUlVFQEBUQVJHRVRfRlJFRUJTRF9GQUxTRUBhbV9fb2JqZWN0c18yID0gYXZhaGlfYXV0b2lwZC1pZmFjZS1saW51eC4kKE9CSkVYVCkKK0BFTkFCTEVfQVVUT0lQRF9UUlVFQEBIQVZFX0xJQkRBRU1PTl9UUlVFQGFtX2F2YWhpX2F1dG9pcGRfT0JKRUNUUyA9IGF2YWhpX2F1dG9pcGQtbWFpbi4kKE9CSkVYVCkgXAorQEVOQUJMRV9BVVRPSVBEX1RSVUVAQEhBVkVfTElCREFFTU9OX1RSVUVACWF2YWhpX2F1dG9pcGQtc2V0cHJvY3RpdGxlLiQoT0JKRVhUKSBcCitARU5BQkxFX0FVVE9JUERfVFJVRUBASEFWRV9MSUJEQUVNT05fVFJVRUAJYXZhaGlfYXV0b2lwZC1tYWxsb2MuJChPQkpFWFQpIFwKK0BFTkFCTEVfQVVUT0lQRF9UUlVFQEBIQVZFX0xJQkRBRU1PTl9UUlVFQAlhdmFoaV9hdXRvaXBkLXRpbWV2YWwuJChPQkpFWFQpIFwKK0BFTkFCTEVfQVVUT0lQRF9UUlVFQEBIQVZFX0xJQkRBRU1PTl9UUlVFQAkkKGFtX19vYmplY3RzXzEpIFwKK0BFTkFCTEVfQVVUT0lQRF9UUlVFQEBIQVZFX0xJQkRBRU1PTl9UUlVFQAkkKGFtX19vYmplY3RzXzIpCithdmFoaV9hdXRvaXBkX09CSkVDVFMgPSAkKGFtX2F2YWhpX2F1dG9pcGRfT0JKRUNUUykKK2FtX19ERVBFTkRFTkNJRVNfMSA9CitARU5BQkxFX0FVVE9JUERfVFJVRUBASEFWRV9MSUJEQUVNT05fVFJVRUBhdmFoaV9hdXRvaXBkX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCitARU5BQkxFX0FVVE9JUERfVFJVRUBASEFWRV9MSUJEQUVNT05fVFJVRUAJJChhbV9fREVQRU5ERU5DSUVTXzEpCitBTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCithbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfbHRfMCA9IC0tc2lsZW50CithdmFoaV9hdXRvaXBkX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKGF2YWhpX2F1dG9pcGRfQ0ZMQUdTKSBcCisJJChDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7CithbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAorICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCisgICAgKikgZj0kJHA7OyBcCisgIGVzYWM7CithbV9fc3RyaXBfZGlyID0gZj1gZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7CithbV9faW5zdGFsbF9tYXggPSA0MAorYW1fX25vYmFzZV9zdHJpcF9zZXR1cCA9IFwKKyAgc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYAorYW1fX25vYmFzZV9zdHJpcCA9IFwKKyAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkIC1lICJzfCQkc3JjZGlyc3RyaXAvfHwiCithbV9fbm9iYXNlX2xpc3QgPSAkKGFtX19ub2Jhc2Vfc3RyaXBfc2V0dXApOyBcCisgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCisgIHNlZCAic3wgJCRzcmNkaXJzdHJpcC98IHw7IicgLyAuKlwvLyFzLyAuKi8gLi87IHMsXCggLipcKS9bXi9dKiQkLFwxLCcgfCBcCisgICQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiIgfSB7IGZpbGVzWyQkMl0gPSBmaWxlc1skJDJdICIgIiAkJDE7IFwKKyAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCisgICAgICB7IHByaW50ICQkMiwgZmlsZXNbJCQyXTsgblskJDJdID0gMDsgZmlsZXNbJCQyXSA9ICIiIH0gfSBcCisgICAgRU5EIHsgZm9yIChkaXIgaW4gZmlsZXMpIHByaW50IGRpciwgZmlsZXNbZGlyXSB9JworYW1fX2Jhc2VfbGlzdCA9IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJyB8IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJworYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpciA9IHsgXAorICB0ZXN0IC16ICIkJGZpbGVzIiBcCisgICAgfHwgeyB0ZXN0ICEgLWQgIiQkZGlyIiAmJiB0ZXN0ICEgLWYgIiQkZGlyIiAmJiB0ZXN0ICEgLXIgIiQkZGlyIjsgfSBcCisgICAgfHwgeyBlY2hvICIgKCBjZCAnJCRkaXInICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAorICAgICAgICAgJChhbV9fY2QpICIkJGRpciIgJiYgcm0gLWYgJCRmaWxlczsgfTsgXAorICB9CitTQ1JJUFRTID0gJChub2Rpc3RfcGtnc3lzY29uZl9TQ1JJUFRTKSAkKG5vaW5zdF9TQ1JJUFRTKQorREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKK2RlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKK2FtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCithbV9fbXYgPSBtdiAtZgorQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCisJJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAorCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAorCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0FNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKK2FtX192X0NDXyA9ICQoYW1fX3ZfQ0NfQEFNX0RFRkFVTFRfVkApCithbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgIiAkQDsKK0FNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKK2FtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCithbV9fdl9hdF8wID0gQAorQ0NMRCA9ICQoQ0MpCitMSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCisJJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACitBTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQorYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfQEFNX0RFRkFVTFRfVkApCithbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAiICRAOworQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCithbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCithbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICIgJEA7CitTT1VSQ0VTID0gJChhdmFoaV9hdXRvaXBkX1NPVVJDRVMpCitESVNUX1NPVVJDRVMgPSAkKGFtX19hdmFoaV9hdXRvaXBkX1NPVVJDRVNfRElTVCkKK0VUQUdTID0gZXRhZ3MKK0NUQUdTID0gY3RhZ3MKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitBQ0xPQ0FMID0gQEFDTE9DQUxACitBTExfTElOR1VBUyA9IEBBTExfTElOR1VBU0AKK0FNVEFSID0gQEFNVEFSQAorQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACitBUiA9IEBBUkAKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBVkFISV9BVVRPSVBEX0dST1VQID0gQEFWQUhJX0FVVE9JUERfR1JPVVBACitBVkFISV9BVVRPSVBEX1VTRVIgPSBAQVZBSElfQVVUT0lQRF9VU0VSQAorQVZBSElfR1JPVVAgPSBAQVZBSElfR1JPVVBACitBVkFISV9QUklWX0FDQ0VTU19HUk9VUCA9IEBBVkFISV9QUklWX0FDQ0VTU19HUk9VUEAKK0FWQUhJX1VTRVIgPSBAQVZBSElfVVNFUkAKK0FXSyA9IEBBV0tACitDQVRBTE9HUyA9IEBDQVRBTE9HU0AKK0NBVE9CSkVYVCA9IEBDQVRPQkpFWFRACitDQyA9IEBDQ0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1hYID0gQENYWEAKK0NYWENQUCA9IEBDWFhDUFBACitDWFhERVBNT0RFID0gQENYWERFUE1PREVACitDWFhGTEFHUyA9IEBDWFhGTEFHU0AKK0NZR1BBVEhfVyA9IEBDWUdQQVRIX1dACitEQVRBRElSTkFNRSA9IEBEQVRBRElSTkFNRUAKK0RCVVNfQ0ZMQUdTID0gQERCVVNfQ0ZMQUdTQAorREJVU19MSUJTID0gQERCVVNfTElCU0AKK0RCVVNfU1lTVEVNX0JVU19ERUZBVUxUX0FERFJFU1MgPSBAREJVU19TWVNURU1fQlVTX0RFRkFVTFRfQUREUkVTU0AKK0RCVVNfU1lTX0RJUiA9IEBEQlVTX1NZU19ESVJACitERUZTID0gQERFRlNACitERVBESVIgPSBAREVQRElSQAorRExMVE9PTCA9IEBETExUT09MQAorRE9YWUdFTl9QQVBFUl9TSVpFID0gQERPWFlHRU5fUEFQRVJfU0laRUAKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRFhfQ09ORklHID0gQERYX0NPTkZJR0AKK0RYX0RPQ0RJUiA9IEBEWF9ET0NESVJACitEWF9ET1QgPSBARFhfRE9UQAorRFhfRE9YWUdFTiA9IEBEWF9ET1hZR0VOQAorRFhfRFZJUFMgPSBARFhfRFZJUFNACitEWF9FR1JFUCA9IEBEWF9FR1JFUEAKK0RYX0VOViA9IEBEWF9FTlZACitEWF9GTEFHX2NoaSA9IEBEWF9GTEFHX2NoaUAKK0RYX0ZMQUdfY2htID0gQERYX0ZMQUdfY2htQAorRFhfRkxBR19kb2MgPSBARFhfRkxBR19kb2NACitEWF9GTEFHX2RvdCA9IEBEWF9GTEFHX2RvdEAKK0RYX0ZMQUdfaHRtbCA9IEBEWF9GTEFHX2h0bWxACitEWF9GTEFHX21hbiA9IEBEWF9GTEFHX21hbkAKK0RYX0ZMQUdfcGRmID0gQERYX0ZMQUdfcGRmQAorRFhfRkxBR19wcyA9IEBEWF9GTEFHX3BzQAorRFhfRkxBR19ydGYgPSBARFhfRkxBR19ydGZACitEWF9GTEFHX3htbCA9IEBEWF9GTEFHX3htbEAKK0RYX0hIQyA9IEBEWF9ISENACitEWF9MQVRFWCA9IEBEWF9MQVRFWEAKK0RYX01BS0VJTkRFWCA9IEBEWF9NQUtFSU5ERVhACitEWF9QREZMQVRFWCA9IEBEWF9QREZMQVRFWEAKK0RYX1BFUkwgPSBARFhfUEVSTEAKK0RYX1BST0pFQ1QgPSBARFhfUFJPSkVDVEAKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRVhFRVhUID0gQEVYRUVYVEAKK0ZHUkVQID0gQEZHUkVQQAorR0FDVVRJTCA9IEBHQUNVVElMQAorR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKK0dMSUIyMF9DRkxBR1MgPSBAR0xJQjIwX0NGTEFHU0AKK0dMSUIyMF9MSUJTID0gQEdMSUIyMF9MSUJTQAorR01PRklMRVMgPSBAR01PRklMRVNACitHTVNHRk1UID0gQEdNU0dGTVRACitHT0JKRUNUX0NGTEFHUyA9IEBHT0JKRUNUX0NGTEFHU0AKK0dPQkpFQ1RfTElCUyA9IEBHT0JKRUNUX0xJQlNACitHUkVQID0gQEdSRVBACitHVEsyMF9DRkxBR1MgPSBAR1RLMjBfQ0ZMQUdTQAorR1RLMjBfTElCUyA9IEBHVEsyMF9MSUJTQAorR1RLMzBfQ0ZMQUdTID0gQEdUSzMwX0NGTEFHU0AKK0dUSzMwX0xJQlMgPSBAR1RLMzBfTElCU0AKK0hPV0xfQ09NUEFUX1ZFUlNJT04gPSBASE9XTF9DT01QQVRfVkVSU0lPTkAKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSU5TVE9CSkVYVCA9IEBJTlNUT0JKRVhUQAorSU5UTExJQlMgPSBASU5UTExJQlNACitJTlRMVE9PTF9FWFRSQUNUID0gQElOVExUT09MX0VYVFJBQ1RACitJTlRMVE9PTF9NRVJHRSA9IEBJTlRMVE9PTF9NRVJHRUAKK0lOVExUT09MX1BFUkwgPSBASU5UTFRPT0xfUEVSTEAKK0lOVExUT09MX1VQREFURSA9IEBJTlRMVE9PTF9VUERBVEVACitJTlRST1NQRUNUSU9OX0NGTEFHUyA9IEBJTlRST1NQRUNUSU9OX0NGTEFHU0AKK0lOVFJPU1BFQ1RJT05fQ09NUElMRVIgPSBASU5UUk9TUEVDVElPTl9DT01QSUxFUkAKK0lOVFJPU1BFQ1RJT05fR0VORVJBVEUgPSBASU5UUk9TUEVDVElPTl9HRU5FUkFURUAKK0lOVFJPU1BFQ1RJT05fR0lSRElSID0gQElOVFJPU1BFQ1RJT05fR0lSRElSQAorSU5UUk9TUEVDVElPTl9MSUJTID0gQElOVFJPU1BFQ1RJT05fTElCU0AKK0lOVFJPU1BFQ1RJT05fTUFLRUZJTEUgPSBASU5UUk9TUEVDVElPTl9NQUtFRklMRUAKK0lOVFJPU1BFQ1RJT05fU0NBTk5FUiA9IEBJTlRST1NQRUNUSU9OX1NDQU5ORVJACitJTlRST1NQRUNUSU9OX1RZUEVMSUJESVIgPSBASU5UUk9TUEVDVElPTl9UWVBFTElCRElSQAorTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMSUJBVkFISV9DTElFTlRfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NMSUVOVF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9DT01NT05fVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NPTU1PTl9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9DT01QQVRfSE9XTF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ09NUEFUX0hPV0xfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfQ09NUEFUX0xJQkROU19TRF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ09NUEFUX0xJQkROU19TRF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9DT1JFX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DT1JFX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0dMSUJfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0dMSUJfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfR09CSkVDVF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfR09CSkVDVF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9RVDNfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX1FUM19WRVJTSU9OX0lORk9ACitMSUJBVkFISV9RVDRfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX1FUNF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9VSV9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfVUlfVkVSU0lPTl9JTkZPQAorTElCREFFTU9OX0NGTEFHUyA9IEBMSUJEQUVNT05fQ0ZMQUdTQAorTElCREFFTU9OX0xJQlMgPSBATElCREFFTU9OX0xJQlNACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQExJQlNACitMSUJUT09MID0gQExJQlRPT0xACitMSVBPID0gQExJUE9ACitMTl9TID0gQExOX1NACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACitNQ1MgPSBATUNTQAorTURBU1NFTUJMRVIgPSBATURBU1NFTUJMRVJACitNS0RJUl9QID0gQE1LRElSX1BACitNS0lOU1RBTExESVJTID0gQE1LSU5TVEFMTERJUlNACitNT0NfUVQzID0gQE1PQ19RVDNACitNT0NfUVQ0ID0gQE1PQ19RVDRACitNT05PRE9DRVIgPSBATU9OT0RPQ0VSQAorTU9OT0RPQ19DRkxBR1MgPSBATU9OT0RPQ19DRkxBR1NACitNT05PRE9DX0RJUiA9IEBNT05PRE9DX0RJUkAKK01PTk9ET0NfTElCUyA9IEBNT05PRE9DX0xJQlNACitNU0dGTVQgPSBATVNHRk1UQAorTVNHRk1UX09QVFMgPSBATVNHRk1UX09QVFNACitNU0dNRVJHRSA9IEBNU0dNRVJHRUAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPVE9PTCA9IEBPVE9PTEAKK09UT09MNjQgPSBAT1RPT0w2NEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAorUEtHX0NPTkZJR19MSUJESVIgPSBAUEtHX0NPTkZJR19MSUJESVJACitQS0dfQ09ORklHX1BBVEggPSBAUEtHX0NPTkZJR19QQVRIQAorUE9GSUxFUyA9IEBQT0ZJTEVTQAorUE9TVUIgPSBAUE9TVUJACitQT19JTl9EQVRBRElSX0ZBTFNFID0gQFBPX0lOX0RBVEFESVJfRkFMU0VACitQT19JTl9EQVRBRElSX1RSVUUgPSBAUE9fSU5fREFUQURJUl9UUlVFQAorUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAorUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACitQVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAorUFlUSE9OID0gQFBZVEhPTkAKK1BZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACitQWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAorUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAorUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACitRVDNfQ0ZMQUdTID0gQFFUM19DRkxBR1NACitRVDNfTElCUyA9IEBRVDNfTElCU0AKK1FUNF9DRkxBR1MgPSBAUVQ0X0NGTEFHU0AKK1FUNF9MSUJTID0gQFFUNF9MSUJTQAorUkFOTElCID0gQFJBTkxJQkAKK1NFRCA9IEBTRURACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU1RPVyA9IEBTVE9XQAorU1RSSVAgPSBAU1RSSVBACitVU0VfTkxTID0gQFVTRV9OTFNACitWRVJTSU9OID0gQFZFUlNJT05ACitWSVNJQklMSVRZX0hJRERFTl9DRkxBR1MgPSBAVklTSUJJTElUWV9ISURERU5fQ0ZMQUdTQAorWEdFVFRFWFQgPSBAWEdFVFRFWFRACitYTUxfQ0ZMQUdTID0gQFhNTF9DRkxBR1NACitYTUxfTElCUyA9IEBYTUxfTElCU0AKK2Fic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACithYnNfc3JjZGlyID0gQGFic19zcmNkaXJACithYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACithYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKK2FjX2N0X0FSID0gQGFjX2N0X0FSQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9DWFggPSBAYWNfY3RfQ1hYQAorYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAorYWN4X3B0aHJlYWRfY29uZmlnID0gQGFjeF9wdGhyZWFkX2NvbmZpZ0AKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYXZhaGlfcnVudGltZV9kaXIgPSBAYXZhaGlfcnVudGltZV9kaXJACithdmFoaV9zb2NrZXQgPSBAYXZhaGlfc29ja2V0QAorYXZhaGlsb2NhbGVkaXIgPSBAYXZhaGlsb2NhbGVkaXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitidWlsZGRpciA9IEBidWlsZGRpckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZG9jZGlyID0gQGRvY2RpckAKK2R2aWRpciA9IEBkdmlkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2hhdmVfcGtnX2NvbmZpZyA9IEBoYXZlX3BrZ19jb25maWdACitoYXZlX3htbHRvbWFuID0gQGhhdmVfeG1sdG9tYW5ACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAoraW50ZXJmYWNlc2RpciA9IEBpbnRlcmZhY2VzZGlyQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3BrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACitwa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3BzZGlyID0gQHBzZGlyQAorcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKK3B5dGhvbmRpciA9IEBweXRob25kaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACitzeXN0ZW1kc3lzdGVtdW5pdGRpciA9IEBzeXN0ZW1kc3lzdGVtdW5pdGRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorQEVOQUJMRV9BVVRPSVBEX1RSVUVAQEhBVkVfTElCREFFTU9OX1RSVUVAcGtnc3lzY29uZmRpciA9ICQoc3lzY29uZmRpcikvYXZhaGkKKworIyBUaGlzIGNvb2wgZGVidWcgdHJhcCB3b3JrcyBvbiBpMzg2L2djYyBvbmx5CitARU5BQkxFX0FVVE9JUERfVFJVRUBASEFWRV9MSUJEQUVNT05fVFJVRUBBTV9DRkxBR1MgPSAtSSQodG9wX3NyY2RpcikgXAorQEVOQUJMRV9BVVRPSVBEX1RSVUVAQEhBVkVfTElCREFFTU9OX1RSVUVACSctRERFQlVHX1RSQVA9X19hc21fXygiaW50IFwKK0BFTkFCTEVfQVVUT0lQRF9UUlVFQEBIQVZFX0xJQkRBRU1PTl9UUlVFQAkkJDMiKScgXAorQEVOQUJMRV9BVVRPSVBEX1RSVUVAQEhBVkVfTElCREFFTU9OX1RSVUVACS1EQVZBSElfUlVOVElNRV9ESVI9XCIkKGF2YWhpX3J1bnRpbWVfZGlyKS9cIiBcCitARU5BQkxFX0FVVE9JUERfVFJVRUBASEFWRV9MSUJEQUVNT05fVFJVRUAJLURBVkFISV9JUENPTkZfU0NSSVBUPVwiJChwa2dzeXNjb25mZGlyKS9hdmFoaS1hdXRvaXBkLmFjdGlvblwiIFwKK0BFTkFCTEVfQVVUT0lQRF9UUlVFQEBIQVZFX0xJQkRBRU1PTl9UUlVFQAktREFWQUhJX0lQREFUQV9ESVI9XCIkKGxvY2Fsc3RhdGVkaXIpL2xpYi9hdmFoaS1hdXRvaXBkXCIKK0BFTkFCTEVfQVVUT0lQRF9UUlVFQEBIQVZFX0xJQkRBRU1PTl9UUlVFQGF2YWhpX2F1dG9pcGRfU09VUkNFUyA9ICBcCitARU5BQkxFX0FVVE9JUERfVFJVRUBASEFWRV9MSUJEQUVNT05fVFJVRUAJbWFpbi5jIG1haW4uaCBcCitARU5BQkxFX0FVVE9JUERfVFJVRUBASEFWRV9MSUJEQUVNT05fVFJVRUAJLi4vYXZhaGktZGFlbW9uL3NldHByb2N0aXRsZS5jIFwKK0BFTkFCTEVfQVVUT0lQRF9UUlVFQEBIQVZFX0xJQkRBRU1PTl9UUlVFQAkuLi9hdmFoaS1kYWVtb24vc2V0cHJvY3RpdGxlLmggXAorQEVOQUJMRV9BVVRPSVBEX1RSVUVAQEhBVkVfTElCREFFTU9OX1RSVUVACWlmYWNlLmggXAorQEVOQUJMRV9BVVRPSVBEX1RSVUVAQEhBVkVfTElCREFFTU9OX1RSVUVACS4uL2F2YWhpLWNvbW1vbi9tYWxsb2MuaCBcCitARU5BQkxFX0FVVE9JUERfVFJVRUBASEFWRV9MSUJEQUVNT05fVFJVRUAJLi4vYXZhaGktY29tbW9uL21hbGxvYy5jIFwKK0BFTkFCTEVfQVVUT0lQRF9UUlVFQEBIQVZFX0xJQkRBRU1PTl9UUlVFQAkuLi9hdmFoaS1jb21tb24vdGltZXZhbC5oIFwKK0BFTkFCTEVfQVVUT0lQRF9UUlVFQEBIQVZFX0xJQkRBRU1PTl9UUlVFQAkuLi9hdmFoaS1jb21tb24vdGltZXZhbC5jIFwKK0BFTkFCTEVfQVVUT0lQRF9UUlVFQEBIQVZFX0xJQkRBRU1PTl9UUlVFQAkkKGFtX19hcHBlbmRfMSkgXAorQEVOQUJMRV9BVVRPSVBEX1RSVUVAQEhBVkVfTElCREFFTU9OX1RSVUVACSQoYW1fX2FwcGVuZF8zKQorQEVOQUJMRV9BVVRPSVBEX1RSVUVAQEhBVkVfTElCREFFTU9OX1RSVUVAYXZhaGlfYXV0b2lwZF9DRkxBR1MgPSAkKEFNX0NGTEFHUykgJChMSUJEQUVNT05fQ0ZMQUdTKQorQEVOQUJMRV9BVVRPSVBEX1RSVUVAQEhBVkVfTElCREFFTU9OX1RSVUVAYXZhaGlfYXV0b2lwZF9MREFERCA9ICBcCitARU5BQkxFX0FVVE9JUERfVFJVRUBASEFWRV9MSUJEQUVNT05fVFJVRUAJJChBTV9MREFERCkgXAorQEVOQUJMRV9BVVRPSVBEX1RSVUVAQEhBVkVfTElCREFFTU9OX1RSVUVACSQoTElCREFFTU9OX0xJQlMpIFwKK0BFTkFCTEVfQVVUT0lQRF9UUlVFQEBIQVZFX0xJQkRBRU1PTl9UUlVFQAkkKGFtX19hcHBlbmRfMikKK0BFTkFCTEVfQVVUT0lQRF9UUlVFQEBIQVZFX0xJQkRBRU1PTl9UUlVFQG5vZGlzdF9wa2dzeXNjb25mX1NDUklQVFMgPSBhdmFoaS1hdXRvaXBkLmFjdGlvbgorQEVOQUJMRV9BVVRPSVBEX1RSVUVAQEhBVkVfTElCREFFTU9OX1RSVUVAQFRBUkdFVF9ERUJJQU5fVFJVRUBub2luc3RfU0NSSVBUUyA9IGRoY2xpZW50LWVudGVyLWhvb2sgZGhjbGllbnQtZXhpdC1ob29rCitARU5BQkxFX0FVVE9JUERfVFJVRUBASEFWRV9MSUJEQUVNT05fVFJVRUBAVEFSR0VUX0RFQklBTl9UUlVFQEJVSUxEID0gZGhjbGllbnQtZXhpdC1ob29rIGRoY2xpZW50LWVudGVyLWhvb2sKK0BFTkFCTEVfQVVUT0lQRF9UUlVFQEBIQVZFX0xJQkRBRU1PTl9UUlVFQEBUQVJHRVRfREVCSUFOX1RSVUVAZGhjbGllbnRlbnRlcmRpciA9ICQoc3lzY29uZmRpcikvZGhjcC9kaGNsaWVudC1lbnRlci1ob29rcy5kCitARU5BQkxFX0FVVE9JUERfVFJVRUBASEFWRV9MSUJEQUVNT05fVFJVRUBAVEFSR0VUX0RFQklBTl9UUlVFQGRoY2xpZW50ZXhpdGRpciA9ICQoc3lzY29uZmRpcikvZGhjcC9kaGNsaWVudC1leGl0LWhvb2tzLmQKK0VYVFJBX0RJU1QgPSBkaGNsaWVudC1lbnRlci1ob29rLmluIGRoY2xpZW50LWV4aXQtaG9vay5pbiBhdmFoaS1hdXRvaXBkLmFjdGlvbi5saW51eCBhdmFoaS1hdXRvaXBkLmFjdGlvbi5ic2QKK0NMRUFORklMRVMgPSBkaGNsaWVudC1lbnRlci1ob29rIGRoY2xpZW50LWV4aXQtaG9vayBhdmFoaS1hdXRvaXBkLmFjdGlvbgorYWxsOiBhbGwtYW0KKworLlNVRkZJWEVTOgorLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagorJChzcmNkaXIpL01ha2VmaWxlLmluOiAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gYXZhaGktYXV0b2lwZC9NYWtlZmlsZSc7IFwKKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gYXZhaGktYXV0b2lwZC9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CitpbnN0YWxsLXNiaW5QUk9HUkFNUzogJChzYmluX1BST0dSQU1TKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQoc2JpbmRpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKHNiaW5kaXIpIgorCUBsaXN0PSckKHNiaW5fUFJPR1JBTVMpJzsgdGVzdCAtbiAiJChzYmluZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAorCXNlZCAncy8kKEVYRUVYVCkkJC8vJyB8IFwKKwl3aGlsZSByZWFkIHAgcDE7IGRvIGlmIHRlc3QgLWYgJCRwIHx8IHRlc3QgLWYgJCRwMTsgXAorCSAgdGhlbiBlY2hvICIkJHAiOyBlY2hvICIkJHAiOyBlbHNlIDo7IGZpOyBcCisJZG9uZSB8IFwKKwlzZWQgLWUgJ3A7cywuKi8sLDtuO2gnIC1lICdzfC4qfC58JyBcCisJICAgIC1lICdwO3g7cywuKi8sLDtzLyQoRVhFRVhUKSQkLy87JCh0cmFuc2Zvcm0pO3MvJCQvJChFWEVFWFQpLycgfCBcCisJc2VkICdOO047TjtzLFxuLCAsZycgfCBcCisJJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIjsgZGlyc1siLiJdID0gMSB9IFwKKwkgIHsgZD0kJDM7IGlmIChkaXJzW2RdICE9IDEpIHsgcHJpbnQgImQiLCBkOyBkaXJzW2RdID0gMSB9IFwKKwkgICAgaWYgKCQkMiA9PSAkJDQpIGZpbGVzW2RdID0gZmlsZXNbZF0gIiAiICQkMTsgXAorCSAgICBlbHNlIHsgcHJpbnQgImYiLCAkJDMgIi8iICQkNCwgJCQxOyB9IH0gXAorCSAgRU5EIHsgZm9yIChkIGluIGZpbGVzKSBwcmludCAiZiIsIGQsIGZpbGVzW2RdIH0nIHwgXAorCXdoaWxlIHJlYWQgdHlwZSBkaXIgZmlsZXM7IGRvIFwKKwkgICAgaWYgdGVzdCAiJCRkaXIiID0gLjsgdGhlbiBkaXI9OyBlbHNlIGRpcj0vJCRkaXI7IGZpOyBcCisJICAgIHRlc3QgLXogIiQkZmlsZXMiIHx8IHsgXAorCSAgICBlY2hvICIgJChJTlNUQUxMX1BST0dSQU1fRU5WKSAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMX1BST0dSQU0pICQkZmlsZXMgJyQoREVTVERJUikkKHNiaW5kaXIpJCRkaXInIjsgXAorCSAgICAkKElOU1RBTExfUFJPR1JBTV9FTlYpICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTExfUFJPR1JBTSkgJCRmaWxlcyAiJChERVNURElSKSQoc2JpbmRpcikkJGRpciIgfHwgZXhpdCAkJD87IFwKKwkgICAgfSBcCisJOyBkb25lCisKK3VuaW5zdGFsbC1zYmluUFJPR1JBTVM6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChzYmluX1BST0dSQU1TKSc7IHRlc3QgLW4gIiQoc2JpbmRpcikiIHx8IGxpc3Q9OyBcCisJZmlsZXM9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IFwKKwkgIHNlZCAtZSAnaDtzLF4uKi8sLDtzLyQoRVhFRVhUKSQkLy87JCh0cmFuc2Zvcm0pJyBcCisJICAgICAgLWUgJ3MvJCQvJChFWEVFWFQpLycgYDsgXAorCXRlc3QgLW4gIiQkbGlzdCIgfHwgZXhpdCAwOyBcCisJZWNobyAiICggY2QgJyQoREVTVERJUikkKHNiaW5kaXIpJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKKwljZCAiJChERVNURElSKSQoc2JpbmRpcikiICYmIHJtIC1mICQkZmlsZXMKKworY2xlYW4tc2JpblBST0dSQU1TOgorCUBsaXN0PSckKHNiaW5fUFJPR1JBTVMpJzsgdGVzdCAtbiAiJCRsaXN0IiB8fCBleGl0IDA7IFwKKwllY2hvICIgcm0gLWYiICQkbGlzdDsgXAorCXJtIC1mICQkbGlzdCB8fCBleGl0ICQkPzsgXAorCXRlc3QgLW4gIiQoRVhFRVhUKSIgfHwgZXhpdCAwOyBcCisJbGlzdD1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkICdzLyQoRVhFRVhUKSQkLy8nYDsgXAorCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCisJcm0gLWYgJCRsaXN0CithdmFoaS1hdXRvaXBkJChFWEVFWFQpOiAkKGF2YWhpX2F1dG9pcGRfT0JKRUNUUykgJChhdmFoaV9hdXRvaXBkX0RFUEVOREVOQ0lFUykgJChFWFRSQV9hdmFoaV9hdXRvaXBkX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGF2YWhpLWF1dG9pcGQkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKGF2YWhpX2F1dG9pcGRfTElOSykgJChhdmFoaV9hdXRvaXBkX09CSkVDVFMpICQoYXZhaGlfYXV0b2lwZF9MREFERCkgJChMSUJTKQoraW5zdGFsbC1ub2Rpc3RfcGtnc3lzY29uZlNDUklQVFM6ICQobm9kaXN0X3BrZ3N5c2NvbmZfU0NSSVBUUykKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwl0ZXN0IC16ICIkKHBrZ3N5c2NvbmZkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChwa2dzeXNjb25mZGlyKSIKKwlAbGlzdD0nJChub2Rpc3RfcGtnc3lzY29uZl9TQ1JJUFRTKSc7IHRlc3QgLW4gIiQocGtnc3lzY29uZmRpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAorCSAgaWYgdGVzdCAtZiAiJCRkJCRwIjsgdGhlbiBlY2hvICIkJGQkJHAiOyBlY2hvICIkJHAiOyBlbHNlIDo7IGZpOyBcCisJZG9uZSB8IFwKKwlzZWQgLWUgJ3A7cywuKi8sLDtuJyBcCisJICAgIC1lICdoO3N8Lip8LnwnIFwKKwkgICAgLWUgJ3A7eDtzLC4qLywsOyQodHJhbnNmb3JtKScgfCBzZWQgJ047TjtOO3MsXG4sICxnJyB8IFwKKwkkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiOyBkaXJzWyIuIl0gPSAxOyB9IFwKKwkgIHsgZD0kJDM7IGlmIChkaXJzW2RdICE9IDEpIHsgcHJpbnQgImQiLCBkOyBkaXJzW2RdID0gMSB9IFwKKwkgICAgaWYgKCQkMiA9PSAkJDQpIHsgZmlsZXNbZF0gPSBmaWxlc1tkXSAiICIgJCQxOyBcCisJICAgICAgaWYgKCsrbltkXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIHsgXAorCQlwcmludCAiZiIsIGQsIGZpbGVzW2RdOyBuW2RdID0gMDsgZmlsZXNbZF0gPSAiIiB9IH0gXAorCSAgICBlbHNlIHsgcHJpbnQgImYiLCBkICIvIiAkJDQsICQkMSB9IH0gXAorCSAgRU5EIHsgZm9yIChkIGluIGZpbGVzKSBwcmludCAiZiIsIGQsIGZpbGVzW2RdIH0nIHwgXAorCXdoaWxlIHJlYWQgdHlwZSBkaXIgZmlsZXM7IGRvIFwKKwkgICAgIGlmIHRlc3QgIiQkZGlyIiA9IC47IHRoZW4gZGlyPTsgZWxzZSBkaXI9LyQkZGlyOyBmaTsgXAorCSAgICAgdGVzdCAteiAiJCRmaWxlcyIgfHwgeyBcCisJICAgICAgIGVjaG8gIiAkKElOU1RBTExfU0NSSVBUKSAkJGZpbGVzICckKERFU1RESVIpJChwa2dzeXNjb25mZGlyKSQkZGlyJyI7IFwKKwkgICAgICAgJChJTlNUQUxMX1NDUklQVCkgJCRmaWxlcyAiJChERVNURElSKSQocGtnc3lzY29uZmRpcikkJGRpciIgfHwgZXhpdCAkJD87IFwKKwkgICAgIH0gXAorCTsgZG9uZQorCit1bmluc3RhbGwtbm9kaXN0X3BrZ3N5c2NvbmZTQ1JJUFRTOgorCUAkKE5PUk1BTF9VTklOU1RBTEwpCisJQGxpc3Q9JyQobm9kaXN0X3BrZ3N5c2NvbmZfU0NSSVBUUyknOyB0ZXN0IC1uICIkKHBrZ3N5c2NvbmZkaXIpIiB8fCBleGl0IDA7IFwKKwlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgXAorCSAgICAgICBzZWQgLWUgJ3MsLiovLCw7JCh0cmFuc2Zvcm0pJ2A7IFwKKwlkaXI9JyQoREVTVERJUikkKHBrZ3N5c2NvbmZkaXIpJzsgJChhbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyKQorCittb3N0bHljbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLiQoT0JKRVhUKQorCitkaXN0Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi50YWIuYworCitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYXZhaGlfYXV0b2lwZC1pZmFjZS1ic2QuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2F2YWhpX2F1dG9pcGQtaWZhY2UtbGludXguUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2F2YWhpX2F1dG9pcGQtbWFpbi5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYXZhaGlfYXV0b2lwZC1tYWxsb2MuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2F2YWhpX2F1dG9pcGQtc2V0cHJvY3RpdGxlLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9hdmFoaV9hdXRvaXBkLXRpbWV2YWwuUG9AYW1fX3F1b3RlQAorCisuYy5vOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAkPAorCisuYy5vYmo6CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgYCQoQ1lHUEFUSF9XKSAnJDwnYAorCisuYy5sbzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKKworYXZhaGlfYXV0b2lwZC1tYWluLm86IG1haW4uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX2F1dG9pcGRfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGF2YWhpX2F1dG9pcGQtbWFpbi5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9hdmFoaV9hdXRvaXBkLW1haW4uVHBvIC1jIC1vIGF2YWhpX2F1dG9pcGQtbWFpbi5vIGB0ZXN0IC1mICdtYWluLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYG1haW4uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYXZhaGlfYXV0b2lwZC1tYWluLlRwbyAkKERFUERJUikvYXZhaGlfYXV0b2lwZC1tYWluLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nbWFpbi5jJyBvYmplY3Q9J2F2YWhpX2F1dG9pcGQtbWFpbi5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9hdXRvaXBkX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGF2YWhpX2F1dG9pcGQtbWFpbi5vIGB0ZXN0IC1mICdtYWluLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYG1haW4uYworCithdmFoaV9hdXRvaXBkLW1haW4ub2JqOiBtYWluLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9hdXRvaXBkX0NGTEFHUykgJChDRkxBR1MpIC1NVCBhdmFoaV9hdXRvaXBkLW1haW4ub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9hdmFoaV9hdXRvaXBkLW1haW4uVHBvIC1jIC1vIGF2YWhpX2F1dG9pcGQtbWFpbi5vYmogYGlmIHRlc3QgLWYgJ21haW4uYyc7IHRoZW4gJChDWUdQQVRIX1cpICdtYWluLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL21haW4uYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYXZhaGlfYXV0b2lwZC1tYWluLlRwbyAkKERFUERJUikvYXZhaGlfYXV0b2lwZC1tYWluLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nbWFpbi5jJyBvYmplY3Q9J2F2YWhpX2F1dG9pcGQtbWFpbi5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX2F1dG9pcGRfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYXZhaGlfYXV0b2lwZC1tYWluLm9iaiBgaWYgdGVzdCAtZiAnbWFpbi5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ21haW4uYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvbWFpbi5jJzsgZmlgCisKK2F2YWhpX2F1dG9pcGQtc2V0cHJvY3RpdGxlLm86IC4uL2F2YWhpLWRhZW1vbi9zZXRwcm9jdGl0bGUuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX2F1dG9pcGRfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGF2YWhpX2F1dG9pcGQtc2V0cHJvY3RpdGxlLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2F2YWhpX2F1dG9pcGQtc2V0cHJvY3RpdGxlLlRwbyAtYyAtbyBhdmFoaV9hdXRvaXBkLXNldHByb2N0aXRsZS5vIGB0ZXN0IC1mICcuLi9hdmFoaS1kYWVtb24vc2V0cHJvY3RpdGxlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYC4uL2F2YWhpLWRhZW1vbi9zZXRwcm9jdGl0bGUuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYXZhaGlfYXV0b2lwZC1zZXRwcm9jdGl0bGUuVHBvICQoREVQRElSKS9hdmFoaV9hdXRvaXBkLXNldHByb2N0aXRsZS5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9Jy4uL2F2YWhpLWRhZW1vbi9zZXRwcm9jdGl0bGUuYycgb2JqZWN0PSdhdmFoaV9hdXRvaXBkLXNldHByb2N0aXRsZS5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9hdXRvaXBkX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGF2YWhpX2F1dG9pcGQtc2V0cHJvY3RpdGxlLm8gYHRlc3QgLWYgJy4uL2F2YWhpLWRhZW1vbi9zZXRwcm9jdGl0bGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgLi4vYXZhaGktZGFlbW9uL3NldHByb2N0aXRsZS5jCisKK2F2YWhpX2F1dG9pcGQtc2V0cHJvY3RpdGxlLm9iajogLi4vYXZhaGktZGFlbW9uL3NldHByb2N0aXRsZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfYXV0b2lwZF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYXZhaGlfYXV0b2lwZC1zZXRwcm9jdGl0bGUub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9hdmFoaV9hdXRvaXBkLXNldHByb2N0aXRsZS5UcG8gLWMgLW8gYXZhaGlfYXV0b2lwZC1zZXRwcm9jdGl0bGUub2JqIGBpZiB0ZXN0IC1mICcuLi9hdmFoaS1kYWVtb24vc2V0cHJvY3RpdGxlLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnLi4vYXZhaGktZGFlbW9uL3NldHByb2N0aXRsZS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS8uLi9hdmFoaS1kYWVtb24vc2V0cHJvY3RpdGxlLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2F2YWhpX2F1dG9pcGQtc2V0cHJvY3RpdGxlLlRwbyAkKERFUERJUikvYXZhaGlfYXV0b2lwZC1zZXRwcm9jdGl0bGUuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPScuLi9hdmFoaS1kYWVtb24vc2V0cHJvY3RpdGxlLmMnIG9iamVjdD0nYXZhaGlfYXV0b2lwZC1zZXRwcm9jdGl0bGUub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9hdXRvaXBkX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGF2YWhpX2F1dG9pcGQtc2V0cHJvY3RpdGxlLm9iaiBgaWYgdGVzdCAtZiAnLi4vYXZhaGktZGFlbW9uL3NldHByb2N0aXRsZS5jJzsgdGhlbiAkKENZR1BBVEhfVykgJy4uL2F2YWhpLWRhZW1vbi9zZXRwcm9jdGl0bGUuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvLi4vYXZhaGktZGFlbW9uL3NldHByb2N0aXRsZS5jJzsgZmlgCisKK2F2YWhpX2F1dG9pcGQtbWFsbG9jLm86IC4uL2F2YWhpLWNvbW1vbi9tYWxsb2MuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX2F1dG9pcGRfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGF2YWhpX2F1dG9pcGQtbWFsbG9jLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2F2YWhpX2F1dG9pcGQtbWFsbG9jLlRwbyAtYyAtbyBhdmFoaV9hdXRvaXBkLW1hbGxvYy5vIGB0ZXN0IC1mICcuLi9hdmFoaS1jb21tb24vbWFsbG9jLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYC4uL2F2YWhpLWNvbW1vbi9tYWxsb2MuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYXZhaGlfYXV0b2lwZC1tYWxsb2MuVHBvICQoREVQRElSKS9hdmFoaV9hdXRvaXBkLW1hbGxvYy5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9Jy4uL2F2YWhpLWNvbW1vbi9tYWxsb2MuYycgb2JqZWN0PSdhdmFoaV9hdXRvaXBkLW1hbGxvYy5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9hdXRvaXBkX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGF2YWhpX2F1dG9pcGQtbWFsbG9jLm8gYHRlc3QgLWYgJy4uL2F2YWhpLWNvbW1vbi9tYWxsb2MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgLi4vYXZhaGktY29tbW9uL21hbGxvYy5jCisKK2F2YWhpX2F1dG9pcGQtbWFsbG9jLm9iajogLi4vYXZhaGktY29tbW9uL21hbGxvYy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfYXV0b2lwZF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYXZhaGlfYXV0b2lwZC1tYWxsb2Mub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9hdmFoaV9hdXRvaXBkLW1hbGxvYy5UcG8gLWMgLW8gYXZhaGlfYXV0b2lwZC1tYWxsb2Mub2JqIGBpZiB0ZXN0IC1mICcuLi9hdmFoaS1jb21tb24vbWFsbG9jLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnLi4vYXZhaGktY29tbW9uL21hbGxvYy5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS8uLi9hdmFoaS1jb21tb24vbWFsbG9jLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2F2YWhpX2F1dG9pcGQtbWFsbG9jLlRwbyAkKERFUERJUikvYXZhaGlfYXV0b2lwZC1tYWxsb2MuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPScuLi9hdmFoaS1jb21tb24vbWFsbG9jLmMnIG9iamVjdD0nYXZhaGlfYXV0b2lwZC1tYWxsb2Mub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9hdXRvaXBkX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGF2YWhpX2F1dG9pcGQtbWFsbG9jLm9iaiBgaWYgdGVzdCAtZiAnLi4vYXZhaGktY29tbW9uL21hbGxvYy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJy4uL2F2YWhpLWNvbW1vbi9tYWxsb2MuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvLi4vYXZhaGktY29tbW9uL21hbGxvYy5jJzsgZmlgCisKK2F2YWhpX2F1dG9pcGQtdGltZXZhbC5vOiAuLi9hdmFoaS1jb21tb24vdGltZXZhbC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfYXV0b2lwZF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYXZhaGlfYXV0b2lwZC10aW1ldmFsLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2F2YWhpX2F1dG9pcGQtdGltZXZhbC5UcG8gLWMgLW8gYXZhaGlfYXV0b2lwZC10aW1ldmFsLm8gYHRlc3QgLWYgJy4uL2F2YWhpLWNvbW1vbi90aW1ldmFsLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYC4uL2F2YWhpLWNvbW1vbi90aW1ldmFsLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2F2YWhpX2F1dG9pcGQtdGltZXZhbC5UcG8gJChERVBESVIpL2F2YWhpX2F1dG9pcGQtdGltZXZhbC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9Jy4uL2F2YWhpLWNvbW1vbi90aW1ldmFsLmMnIG9iamVjdD0nYXZhaGlfYXV0b2lwZC10aW1ldmFsLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX2F1dG9pcGRfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYXZhaGlfYXV0b2lwZC10aW1ldmFsLm8gYHRlc3QgLWYgJy4uL2F2YWhpLWNvbW1vbi90aW1ldmFsLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYC4uL2F2YWhpLWNvbW1vbi90aW1ldmFsLmMKKworYXZhaGlfYXV0b2lwZC10aW1ldmFsLm9iajogLi4vYXZhaGktY29tbW9uL3RpbWV2YWwuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX2F1dG9pcGRfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGF2YWhpX2F1dG9pcGQtdGltZXZhbC5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2F2YWhpX2F1dG9pcGQtdGltZXZhbC5UcG8gLWMgLW8gYXZhaGlfYXV0b2lwZC10aW1ldmFsLm9iaiBgaWYgdGVzdCAtZiAnLi4vYXZhaGktY29tbW9uL3RpbWV2YWwuYyc7IHRoZW4gJChDWUdQQVRIX1cpICcuLi9hdmFoaS1jb21tb24vdGltZXZhbC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS8uLi9hdmFoaS1jb21tb24vdGltZXZhbC5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9hdmFoaV9hdXRvaXBkLXRpbWV2YWwuVHBvICQoREVQRElSKS9hdmFoaV9hdXRvaXBkLXRpbWV2YWwuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPScuLi9hdmFoaS1jb21tb24vdGltZXZhbC5jJyBvYmplY3Q9J2F2YWhpX2F1dG9pcGQtdGltZXZhbC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX2F1dG9pcGRfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYXZhaGlfYXV0b2lwZC10aW1ldmFsLm9iaiBgaWYgdGVzdCAtZiAnLi4vYXZhaGktY29tbW9uL3RpbWV2YWwuYyc7IHRoZW4gJChDWUdQQVRIX1cpICcuLi9hdmFoaS1jb21tb24vdGltZXZhbC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS8uLi9hdmFoaS1jb21tb24vdGltZXZhbC5jJzsgZmlgCisKK2F2YWhpX2F1dG9pcGQtaWZhY2UtYnNkLm86IGlmYWNlLWJzZC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfYXV0b2lwZF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYXZhaGlfYXV0b2lwZC1pZmFjZS1ic2QubyAtTUQgLU1QIC1NRiAkKERFUERJUikvYXZhaGlfYXV0b2lwZC1pZmFjZS1ic2QuVHBvIC1jIC1vIGF2YWhpX2F1dG9pcGQtaWZhY2UtYnNkLm8gYHRlc3QgLWYgJ2lmYWNlLWJzZC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BpZmFjZS1ic2QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYXZhaGlfYXV0b2lwZC1pZmFjZS1ic2QuVHBvICQoREVQRElSKS9hdmFoaV9hdXRvaXBkLWlmYWNlLWJzZC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2lmYWNlLWJzZC5jJyBvYmplY3Q9J2F2YWhpX2F1dG9pcGQtaWZhY2UtYnNkLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX2F1dG9pcGRfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYXZhaGlfYXV0b2lwZC1pZmFjZS1ic2QubyBgdGVzdCAtZiAnaWZhY2UtYnNkLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGlmYWNlLWJzZC5jCisKK2F2YWhpX2F1dG9pcGQtaWZhY2UtYnNkLm9iajogaWZhY2UtYnNkLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9hdXRvaXBkX0NGTEFHUykgJChDRkxBR1MpIC1NVCBhdmFoaV9hdXRvaXBkLWlmYWNlLWJzZC5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2F2YWhpX2F1dG9pcGQtaWZhY2UtYnNkLlRwbyAtYyAtbyBhdmFoaV9hdXRvaXBkLWlmYWNlLWJzZC5vYmogYGlmIHRlc3QgLWYgJ2lmYWNlLWJzZC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2lmYWNlLWJzZC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9pZmFjZS1ic2QuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYXZhaGlfYXV0b2lwZC1pZmFjZS1ic2QuVHBvICQoREVQRElSKS9hdmFoaV9hdXRvaXBkLWlmYWNlLWJzZC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2lmYWNlLWJzZC5jJyBvYmplY3Q9J2F2YWhpX2F1dG9pcGQtaWZhY2UtYnNkLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfYXV0b2lwZF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhdmFoaV9hdXRvaXBkLWlmYWNlLWJzZC5vYmogYGlmIHRlc3QgLWYgJ2lmYWNlLWJzZC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2lmYWNlLWJzZC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9pZmFjZS1ic2QuYyc7IGZpYAorCithdmFoaV9hdXRvaXBkLWlmYWNlLWxpbnV4Lm86IGlmYWNlLWxpbnV4LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9hdXRvaXBkX0NGTEFHUykgJChDRkxBR1MpIC1NVCBhdmFoaV9hdXRvaXBkLWlmYWNlLWxpbnV4Lm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2F2YWhpX2F1dG9pcGQtaWZhY2UtbGludXguVHBvIC1jIC1vIGF2YWhpX2F1dG9pcGQtaWZhY2UtbGludXgubyBgdGVzdCAtZiAnaWZhY2UtbGludXguYycgfHwgZWNobyAnJChzcmNkaXIpLydgaWZhY2UtbGludXguYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYXZhaGlfYXV0b2lwZC1pZmFjZS1saW51eC5UcG8gJChERVBESVIpL2F2YWhpX2F1dG9pcGQtaWZhY2UtbGludXguUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdpZmFjZS1saW51eC5jJyBvYmplY3Q9J2F2YWhpX2F1dG9pcGQtaWZhY2UtbGludXgubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfYXV0b2lwZF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhdmFoaV9hdXRvaXBkLWlmYWNlLWxpbnV4Lm8gYHRlc3QgLWYgJ2lmYWNlLWxpbnV4LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGlmYWNlLWxpbnV4LmMKKworYXZhaGlfYXV0b2lwZC1pZmFjZS1saW51eC5vYmo6IGlmYWNlLWxpbnV4LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9hdXRvaXBkX0NGTEFHUykgJChDRkxBR1MpIC1NVCBhdmFoaV9hdXRvaXBkLWlmYWNlLWxpbnV4Lm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvYXZhaGlfYXV0b2lwZC1pZmFjZS1saW51eC5UcG8gLWMgLW8gYXZhaGlfYXV0b2lwZC1pZmFjZS1saW51eC5vYmogYGlmIHRlc3QgLWYgJ2lmYWNlLWxpbnV4LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnaWZhY2UtbGludXguYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvaWZhY2UtbGludXguYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYXZhaGlfYXV0b2lwZC1pZmFjZS1saW51eC5UcG8gJChERVBESVIpL2F2YWhpX2F1dG9pcGQtaWZhY2UtbGludXguUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdpZmFjZS1saW51eC5jJyBvYmplY3Q9J2F2YWhpX2F1dG9pcGQtaWZhY2UtbGludXgub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9hdXRvaXBkX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGF2YWhpX2F1dG9pcGQtaWZhY2UtbGludXgub2JqIGBpZiB0ZXN0IC1mICdpZmFjZS1saW51eC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2lmYWNlLWxpbnV4LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2lmYWNlLWxpbnV4LmMnOyBmaWAKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKKworSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlta2lkIC1mSUQgJCR1bmlxdWUKK3RhZ3M6IFRBR1MKKworVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlzZXQgeDsgXAorCWhlcmU9YHB3ZGA7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJc2hpZnQ7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKKwkgIGVsc2UgXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgJCR1bmlxdWU7IFwKKwkgIGZpOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAorCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorCSAgICAgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUgJChQUk9HUkFNUykgJChTQ1JJUFRTKQoraW5zdGFsbGRpcnM6CisJZm9yIGRpciBpbiAiJChERVNURElSKSQoc2JpbmRpcikiICIkKERFU1RESVIpJChwa2dzeXNjb25mZGlyKSI7IGRvIFwKKwkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKE1LRElSX1ApICIkJGRpciI7IFwKKwlkb25lCitpbnN0YWxsOiBpbnN0YWxsLWFtCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KK3VuaW5zdGFsbDogdW5pbnN0YWxsLWFtCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCitpbnN0YWxsLXN0cmlwOgorCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgICAgICBpbnN0YWxsOyBcCisJZWxzZSBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKKwlmaQorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDTEVBTkZJTEVTKSIgfHwgcm0gLWYgJChDTEVBTkZJTEVTKQorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitARU5BQkxFX0FVVE9JUERfRkFMU0VAaW5zdGFsbC1leGVjLWhvb2s6CitASEFWRV9MSUJEQUVNT05fRkFMU0VAaW5zdGFsbC1leGVjLWhvb2s6CitAVEFSR0VUX0RFQklBTl9GQUxTRUBpbnN0YWxsLWV4ZWMtaG9vazoKK0BFTkFCTEVfQVVUT0lQRF9GQUxTRUB1bmluc3RhbGwtaG9vazoKK0BIQVZFX0xJQkRBRU1PTl9GQUxTRUB1bmluc3RhbGwtaG9vazoKK0BUQVJHRVRfREVCSUFOX0ZBTFNFQHVuaW5zdGFsbC1ob29rOgorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tc2JpblBST0dSQU1TIFwKKwltb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi10YWdzCisKK2R2aTogZHZpLWFtCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1hbQorCitodG1sLWFtOgorCitpbmZvOiBpbmZvLWFtCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1ub2Rpc3RfcGtnc3lzY29uZlNDUklQVFMKKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCisKK2luc3RhbGwtZHZpLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06IGluc3RhbGwtc2JpblBST0dSQU1TCisJQCQoTk9STUFMX0lOU1RBTEwpCisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWhvb2sKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCisKK2luc3RhbGwtaHRtbC1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1pbmZvLWFtOgorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCisKK2luc3RhbGwtcGRmLWFtOgorCitpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCisKK2luc3RhbGwtcHMtYW06CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtYW0KKworcGRmLWFtOgorCitwczogcHMtYW0KKworcHMtYW06CisKK3VuaW5zdGFsbC1hbTogdW5pbnN0YWxsLW5vZGlzdF9wa2dzeXNjb25mU0NSSVBUUyBcCisJdW5pbnN0YWxsLXNiaW5QUk9HUkFNUworCUAkKE5PUk1BTF9JTlNUQUxMKQorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHVuaW5zdGFsbC1ob29rCisuTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1zdHJpcCB1bmluc3RhbGwtYW0KKworLlBIT05ZOiBDVEFHUyBHVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAorCWNsZWFuLWxpYnRvb2wgY2xlYW4tc2JpblBST0dSQU1TIGN0YWdzIGRpc3RjbGVhbiBcCisJZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgXAorCWRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIFwKKwlpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBcCisJaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWV4ZWMtaG9vayBcCisJaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIFwKKwlpbnN0YWxsLW1hbiBpbnN0YWxsLW5vZGlzdF9wa2dzeXNjb25mU0NSSVBUUyBpbnN0YWxsLXBkZiBcCisJaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIGluc3RhbGwtc2JpblBST0dSQU1TIFwKKwlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAorCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKKwltb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCisJcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gdW5pbnN0YWxsLWhvb2sgXAorCXVuaW5zdGFsbC1ub2Rpc3RfcGtnc3lzY29uZlNDUklQVFMgdW5pbnN0YWxsLXNiaW5QUk9HUkFNUworCisKK0BFTkFCTEVfQVVUT0lQRF9UUlVFQEBIQVZFX0xJQkRBRU1PTl9UUlVFQEBUQVJHRVRfRlJFRUJTRF9UUlVFQGF2YWhpLWF1dG9pcGQuYWN0aW9uOiBhdmFoaS1hdXRvaXBkLmFjdGlvbi5ic2QKK0BFTkFCTEVfQVVUT0lQRF9UUlVFQEBIQVZFX0xJQkRBRU1PTl9UUlVFQEBUQVJHRVRfRlJFRUJTRF9UUlVFQAkkKEFNX1ZfR0VOKWNwICQ8ICRACitARU5BQkxFX0FVVE9JUERfVFJVRUBASEFWRV9MSUJEQUVNT05fVFJVRUBAVEFSR0VUX0ZSRUVCU0RfRkFMU0VAYXZhaGktYXV0b2lwZC5hY3Rpb246IGF2YWhpLWF1dG9pcGQuYWN0aW9uLmxpbnV4CitARU5BQkxFX0FVVE9JUERfVFJVRUBASEFWRV9MSUJEQUVNT05fVFJVRUBAVEFSR0VUX0ZSRUVCU0RfRkFMU0VACSQoQU1fVl9HRU4pY3AgJDwgJEAKKworQEVOQUJMRV9BVVRPSVBEX1RSVUVAQEhBVkVfTElCREFFTU9OX1RSVUVAQFRBUkdFVF9ERUJJQU5fVFJVRUBkaGNsaWVudC1lbnRlci1ob29rOiBkaGNsaWVudC1lbnRlci1ob29rLmluCitARU5BQkxFX0FVVE9JUERfVFJVRUBASEFWRV9MSUJEQUVNT05fVFJVRUBAVEFSR0VUX0RFQklBTl9UUlVFQAkkKEFNX1ZfR0VOKXNlZCAtZSAncyxAc2JpbmRpclxALCQoc2JpbmRpciksZycgJDwgPiAkQCAmJiBcCitARU5BQkxFX0FVVE9JUERfVFJVRUBASEFWRV9MSUJEQUVNT05fVFJVRUBAVEFSR0VUX0RFQklBTl9UUlVFQAljaG1vZCAreCAkQAorCitARU5BQkxFX0FVVE9JUERfVFJVRUBASEFWRV9MSUJEQUVNT05fVFJVRUBAVEFSR0VUX0RFQklBTl9UUlVFQGRoY2xpZW50LWV4aXQtaG9vazogZGhjbGllbnQtZXhpdC1ob29rLmluCitARU5BQkxFX0FVVE9JUERfVFJVRUBASEFWRV9MSUJEQUVNT05fVFJVRUBAVEFSR0VUX0RFQklBTl9UUlVFQAkkKEFNX1ZfR0VOKXNlZCAtZSAncyxAc2JpbmRpclxALCQoc2JpbmRpciksZycgJDwgPiAkQCAmJiBcCitARU5BQkxFX0FVVE9JUERfVFJVRUBASEFWRV9MSUJEQUVNT05fVFJVRUBAVEFSR0VUX0RFQklBTl9UUlVFQAljaG1vZCAreCAkQAorCitARU5BQkxFX0FVVE9JUERfVFJVRUBASEFWRV9MSUJEQUVNT05fVFJVRUBAVEFSR0VUX0RFQklBTl9UUlVFQGluc3RhbGwtZXhlYy1ob29rOiBkaGNsaWVudC1leGl0LWhvb2sgZGhjbGllbnQtZW50ZXItaG9vaworQEVOQUJMRV9BVVRPSVBEX1RSVUVAQEhBVkVfTElCREFFTU9OX1RSVUVAQFRBUkdFVF9ERUJJQU5fVFJVRUAJJChta2Rpcl9wKSAkKERFU1RESVIpJChkaGNsaWVudGVudGVyZGlyKSAkKERFU1RESVIpJChkaGNsaWVudGV4aXRkaXIpCitARU5BQkxFX0FVVE9JUERfVFJVRUBASEFWRV9MSUJEQUVNT05fVFJVRUBAVEFSR0VUX0RFQklBTl9UUlVFQAkkKElOU1RBTEwpIGRoY2xpZW50LWVudGVyLWhvb2sgJChERVNURElSKSQoZGhjbGllbnRlbnRlcmRpcikvYXZhaGktYXV0b2lwZAorQEVOQUJMRV9BVVRPSVBEX1RSVUVAQEhBVkVfTElCREFFTU9OX1RSVUVAQFRBUkdFVF9ERUJJQU5fVFJVRUAJJChJTlNUQUxMKSBkaGNsaWVudC1leGl0LWhvb2sgJChERVNURElSKSQoZGhjbGllbnRleGl0ZGlyKS9hdmFoaS1hdXRvaXBkCisKK0BFTkFCTEVfQVVUT0lQRF9UUlVFQEBIQVZFX0xJQkRBRU1PTl9UUlVFQEBUQVJHRVRfREVCSUFOX1RSVUVAdW5pbnN0YWxsLWhvb2s6CitARU5BQkxFX0FVVE9JUERfVFJVRUBASEFWRV9MSUJEQUVNT05fVFJVRUBAVEFSR0VUX0RFQklBTl9UUlVFQAlybSAtZiAkKERFU1RESVIpJChkaGNsaWVudGVudGVyZGlyKS9hdmFoaS1hdXRvaXBkICQoREVTVERJUikkKGRoY2xpZW50ZXhpdGRpcikvYXZhaGktYXV0b2lwZAorCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktYXV0b2lwZC9hdmFoaS1hdXRvaXBkLmFjdGlvbi5ic2QgYi9hdmFoaS0wLjYuMzEvYXZhaGktYXV0b2lwZC9hdmFoaS1hdXRvaXBkLmFjdGlvbi5ic2QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDYwODRmYgotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1hdXRvaXBkL2F2YWhpLWF1dG9pcGQuYWN0aW9uLmJzZApAQCAtMCwwICsxLDQ4IEBACisjIS9iaW4vc2gKKworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKyMgCisjIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisjIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisjIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisjIFVTQS4KKworc2V0IC1lCisKKyMgQ29tbWFuZCBsaW5lIGFyZ3VtZW50czoKKyMgICAkMSBldmVudCB0aGF0IGhhcHBlbmVkOgorIyAgICAgICAgICBCSU5EOiAgICAgU3VjY2Vzc2Z1bGx5IGNsYWltZWQgYWRkcmVzcworIyAgICAgICAgICBDT05GTElDVDogQW4gSVAgYWRkcmVzcyBjb25mbGljdCBoYXBwZW5lZAorIyAgICAgICAgICBVTkJJTkQ6ICAgVGhlIElQIGFkZHJlc3MgaXMgbm8gbG9uZ2VyIG5lZWRlZAorIyAgICAgICAgICBTVE9QOiAgICAgVGhlIGRhZW1vbiBpcyB0ZXJtaW5hdGluZworIyAgICQyIGludGVyZmFjZSBuYW1lCisjICAgJDMgSVAgYWRkZHJlc3MKKworIyBXZSBoYXZlIHRoZSBCU0QgaWZjb25maWcgdG9vbAorCitjYXNlICIkMSIgaW4KK0JJTkQpCisgICAgaWZjb25maWcgIiQyIiAiJDMiLzE2CisgICAgOzsKKworQ09ORkxJQ1R8U1RPUHxVTkJJTkQpCisgICAgaWZjb25maWcgIiQyIiAiJDMiLzE2IGRlbGV0ZQorICAgIDs7CisKKyopCisgICAgZWNobyAiVW5rbm93biBldmVudCAkMSIgPiYyCisgICAgZXhpdCAxCisgICAgOzsKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktYXV0b2lwZC9hdmFoaS1hdXRvaXBkLmFjdGlvbi5saW51eCBiL2F2YWhpLTAuNi4zMS9hdmFoaS1hdXRvaXBkL2F2YWhpLWF1dG9pcGQuYWN0aW9uLmxpbnV4Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMyZGI5OTQKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktYXV0b2lwZC9hdmFoaS1hdXRvaXBkLmFjdGlvbi5saW51eApAQCAtMCwwICsxLDg3IEBACisjIS9iaW4vc2gKKworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKyMKKyMgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyMgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyMgVVNBLgorCitzZXQgLWUKKworIyBDb21tYW5kIGxpbmUgYXJndW1lbnRzOgorIyAgICQxIGV2ZW50IHRoYXQgaGFwcGVuZWQ6CisjICAgICAgICAgIEJJTkQ6ICAgICBTdWNjZXNzZnVsbHkgY2xhaW1lZCBhZGRyZXNzCisjICAgICAgICAgIENPTkZMSUNUOiBBbiBJUCBhZGRyZXNzIGNvbmZsaWN0IGhhcHBlbmVkCisjICAgICAgICAgIFVOQklORDogICBUaGUgSVAgYWRkcmVzcyBpcyBubyBsb25nZXIgbmVlZGVkCisjICAgICAgICAgIFNUT1A6ICAgICBUaGUgZGFlbW9uIGlzIHRlcm1pbmF0aW5nCisjICAgJDIgaW50ZXJmYWNlIG5hbWUKKyMgICAkMyBJUCBhZGRkcmVzcworCitQQVRIPSIkUEFUSDovdXNyL2JpbjovdXNyL3NiaW46L2Jpbjovc2JpbiIKKworIyBVc2UgYSBkaWZmZXJlbnQgbWV0cmljIGZvciBlYWNoIGludGVyZmFjZSwgc28gdGhhdCB3ZSBjYW4gc2V0CisjIGlkZW50aWNhbCByb3V0ZXMgdG8gbXVsdGlwbGUgaW50ZXJmYWNlcy4KKworTUVUUklDPSQoKDEwMDAgKyBgY2F0ICIvc3lzL2NsYXNzL25ldC8kMi9pZmluZGV4IiAyPi9kZXYvbnVsbCB8fCBlY2hvIDBgKSkKKworaWYgWyAteCAvYmluL2lwIC1vIC14IC9zYmluL2lwIF0gOyB0aGVuCisKKyAgICAjIFdlIGhhdmUgdGhlIExpbnV4IGlwIHRvb2wgZnJvbSB0aGUgaXByb3V0ZSBwYWNrYWdlCisKKyAgICBjYXNlICIkMSIgaW4KKyAgICAgICAgQklORCkKKyAgICAgICAgICAgIGlwIGFkZHIgYWRkICIkMyIvMTYgYnJkIDE2OS4yNTQuMjU1LjI1NSBsYWJlbCAiJDI6YXZhaGkiIHNjb3BlIGxpbmsgZGV2ICIkMiIKKyAgICAgICAgICAgIGlwIHJvdXRlIGFkZCBkZWZhdWx0IGRldiAiJDIiIG1ldHJpYyAiJE1FVFJJQyIgc2NvcGUgbGluayB8fDoKKyAgICAgICAgICAgIDs7CisKKyAgICAgICAgQ09ORkxJQ1R8VU5CSU5EfFNUT1ApCisgICAgICAgICAgICBpcCByb3V0ZSBkZWwgZGVmYXVsdCBkZXYgIiQyIiBtZXRyaWMgIiRNRVRSSUMiIHNjb3BlIGxpbmsgfHw6CisgICAgICAgICAgICBpcCBhZGRyIGRlbCAiJDMiLzE2IGJyZCAxNjkuMjU0LjI1NS4yNTUgbGFiZWwgIiQyOmF2YWhpIiBzY29wZSBsaW5rIGRldiAiJDIiCisgICAgICAgICAgICA7OworCisgICAgICAgICopCisgICAgICAgICAgICBlY2hvICJVbmtub3duIGV2ZW50ICQxIiA+JjIKKyAgICAgICAgICAgIGV4aXQgMQorICAgICAgICAgICAgOzsKKyAgICBlc2FjCisKK2VsaWYgWyAteCAvYmluL2lmY29uZmlnIC1vIC14IC9zYmluL2lmY29uZmlnIF0gOyB0aGVuCisKKyAgICAjIFdlIGhhdmUgdGhlIG9sZCBpZmNvbmZpZyB0b29sCisKKyAgICBjYXNlICIkMSIgaW4KKyAgICAgICAgQklORCkKKyAgICAgICAgICAgIGlmY29uZmlnICIkMjphdmFoaSIgaW5ldCAiJDMiIG5ldG1hc2sgMjU1LjI1NS4wLjAgYnJvYWRjYXN0IDE2OS4yNTQuMjU1LjI1NSB1cAorICAgICAgICAgICAgcm91dGUgYWRkIGRlZmF1bHQgZGV2ICIkMjphdmFoaSIgbWV0cmljICIkTUVUUklDIiB8fDoKKyAgICAgICAgICAgIDs7CisKKyAgICAgICAgQ09ORkxJQ1R8U1RPUHxVTkJJTkQpCisgICAgICAgICAgICByb3V0ZSBkZWwgZGVmYXVsdCBkZXYgIiQyOmF2YWhpIiBtZXRyaWMgIiRNRVRSSUMiIHx8OgorICAgICAgICAgICAgaWZjb25maWcgIiQyOmF2YWhpIiBkb3duCisgICAgICAgICAgICA7OworCisgICAgICAgICopCisgICAgICAgICAgICBlY2hvICJVbmtub3duIGV2ZW50ICQxIiA+JjIKKyAgICAgICAgICAgIGV4aXQgMQorICAgICAgICAgICAgOzsKKyAgICBlc2FjCisKK2Vsc2UKKworICAgIGVjaG8gIk5vIG5ldHdvcmsgY29uZmlndXJhdGlvbiB0b29sIGZvdW5kLiIgPiYyCisgICAgZXhpdCAxCisKK2ZpCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWF1dG9pcGQvZGhjbGllbnQtZW50ZXItaG9vay5pbiBiL2F2YWhpLTAuNi4zMS9hdmFoaS1hdXRvaXBkL2RoY2xpZW50LWVudGVyLWhvb2suaW4KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTc0Njg1NgotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1hdXRvaXBkL2RoY2xpZW50LWVudGVyLWhvb2suaW4KQEAgLTAsMCArMSwzMSBAQAorIyEvYmluL3NoCisKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisjIAorIyBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworIyBVU0EuCisKK2Nhc2UgIiRyZWFzb24iIGluCisgICAgTUVESVVNfEFSUENIRUNLfEFSUFNFTkR8TkJJKQorICAgICAgICA7OworCisgICAgUFJFSU5JVHxCT1VORHxSRU5FV3xSRUJJTkR8UkVCT09UfFNUT1B8UkVMRUFTRSkKKyAgICAgICAgQHNiaW5kaXJAL2F2YWhpLWF1dG9pcGQgLWsgJGludGVyZmFjZSAyPiAvZGV2L251bGwKKyAgICAgICAgOzsKKyAgICAKKyAgICBFWFBJUkV8RkFJTHxUSU1FT1VUKQorICAgICAgICAjIFN0YXJ0aW5nIGF2YWhpLWF1dG9pcGQgaXMgbGVmdCBmb3IgdGhlIGV4aXQgaG9vaworICAgICAgICA7OworZXNhYwpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWF1dG9pcGQvZGhjbGllbnQtZXhpdC1ob29rLmluIGIvYXZhaGktMC42LjMxL2F2YWhpLWF1dG9pcGQvZGhjbGllbnQtZXhpdC1ob29rLmluCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM3OWNiNDYKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktYXV0b2lwZC9kaGNsaWVudC1leGl0LWhvb2suaW4KQEAgLTAsMCArMSwzMSBAQAorIyEvYmluL3NoCisKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisjCisjIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisjIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisjIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisjIFVTQS4KKworY2FzZSAiJHJlYXNvbiIgaW4KKyAgICBNRURJVU18QVJQQ0hFQ0t8QVJQU0VORHxOQkkpCisgICAgICAgIDs7CisKKyAgICBQUkVJTklUfEJPVU5EfFJFTkVXfFJFQklORHxSRUJPT1R8U1RPUHxSRUxFQVNFKQorICAgICAgICAjIFN0b3BwaW5nIGF2YWhpLWF1dG9pcGQgaXMgbGVmdCBmb3IgdGhlIGVudGVyIGhvb2sKKyAgICAgICAgOzsKKworICAgIEVYUElSRXxGQUlMfFRJTUVPVVQpCisgICAgICAgIEBzYmluZGlyQC9hdmFoaS1hdXRvaXBkIC13RCAkaW50ZXJmYWNlIDI+IC9kZXYvbnVsbAorICAgICAgICA7OworZXNhYwpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWF1dG9pcGQvaWZhY2UtYnNkLmMgYi9hdmFoaS0wLjYuMzEvYXZhaGktYXV0b2lwZC9pZmFjZS1ic2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTEwODVjCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWF1dG9pcGQvaWZhY2UtYnNkLmMKQEAgLTAsMCArMSw0NDAgQEAKKy8qIHJjcyB0YWdzIGdvIGhlcmUgKi8KKy8qIE9yaWdpbmFsIGF1dGhvcjogQnJ1Y2UgTS4gU2ltcHNvbiA8Ym1zQEZyZWVCU0Qub3JnPiAqLworCisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CisKKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNpbmNsdWRlIDxuZXQvcm91dGUuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSA8bGliZGFlbW9uL2Rsb2cuaD4KKworI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9sbGlzdC5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9tYWxsb2MuaD4KKworI2luY2x1ZGUgImlmYWNlLmgiCisKKyNpZm5kZWYgSU5fTElOS0xPQ0FMCisjZGVmaW5lIElOX0xJTktMT0NBTChpKSAoKCh1X2ludDMyX3QpKGkpICYgKDB4ZmZmZjAwMDApKSA9PSAoMHhhOWZlMDAwMCkpCisjZW5kaWYKKworI2lmbmRlZiBlbGVtZW50c29mCisjZGVmaW5lIGVsZW1lbnRzb2YoYXJyYXkpICAgICAgIChzaXplb2YoYXJyYXkpL3NpemVvZihhcnJheVswXSkpCisjZW5kaWYKKworI2lmbmRlZiBzb19zZXRfbm9uYmxvY2sKKyNkZWZpbmUgc29fc2V0X25vbmJsb2NrKHMsIHZhbCkgXAorICAgICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgaW50IF9fZmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBfX2ZsYWdzID0gZmNudGwoKHMpLCBGX0dFVEZMKTsgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGlmIChfX2ZsYWdzID09IC0xKSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBpZiAodmFsICE9IDApICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgX19mbGFncyB8PSBPX05PTkJMT0NLOyAgICAgICAgICBcCisgICAgICAgICAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIF9fZmxhZ3MgJj0gfk9fTk9OQkxPQ0s7ICAgICAgICAgXAorICAgICAgICAgICAgICAgICh2b2lkKWZjbnRsKChzKSwgRl9TRVRGTCwgX19mbGFncyk7ICAgICBcCisgICAgICAgIH0gd2hpbGUgKDApCisjZW5kaWYKKworI2RlZmluZSBNQVhfUlRNU0dfU0laRSAyMDQ4CisKK3N0cnVjdCBydG1fZGlzcGluZm8geworICAgICAgICB1X2NoYXIgICAgICAgICAgKmRpX2J1ZjsKKyAgICAgICAgc3NpemVfdCAgICAgICAgICBkaV9idWZsZW47CisgICAgICAgIHNzaXplX3QgICAgICAgICAgZGlfbGVuOworfTsKKwordW5pb24gcnRtdW5pb24geworICAgICAgICBzdHJ1Y3QgcnRfbXNnaGRyICAgICAgICAgICAgICAgICBydG07CisgICAgICAgIHN0cnVjdCBpZl9tc2doZHIgICAgICAgICAgICAgICAgIGlmbTsKKyAgICAgICAgc3RydWN0IGlmYV9tc2doZHIgICAgICAgICAgICAgICAgaWZhbTsKKyAgICAgICAgc3RydWN0IGlmbWFfbXNnaGRyICAgICAgICAgICAgICAgaWZtYW07CisgICAgICAgIHN0cnVjdCBpZl9hbm5vdW5jZW1zZ2hkciAgICAgICAgIGlmYW47Cit9OwordHlwZWRlZiB1bmlvbiBydG11bmlvbiBydG11bmlvbl90OworCitzdHJ1Y3QgQWRkcmVzczsKK3R5cGVkZWYgc3RydWN0IEFkZHJlc3MgQWRkcmVzczsKKworc3RydWN0IEFkZHJlc3MgeworICAgICAgICBpbl9hZGRyX3QgICAgICAgYWRkcmVzczsKKyAgICAgICAgQVZBSElfTExJU1RfRklFTERTKEFkZHJlc3MsIGFkZHJlc3Nlcyk7Cit9OworCitzdGF0aWMgaW50IHJ0bV9kaXNwYXRjaCh2b2lkKTsKK3N0YXRpYyBpbnQgcnRtX2Rpc3BhdGNoX25ld2RlbGFkZHIoc3RydWN0IHJ0bV9kaXNwaW5mbyAqZGkpOworc3RhdGljIGludCBydG1fZGlzcGF0Y2hfaWZhbm5vdW5jZShzdHJ1Y3QgcnRtX2Rpc3BpbmZvICpkaSk7CitzdGF0aWMgc3RydWN0IHNvY2thZGRyICpuZXh0X3NhKHN0cnVjdCBzb2NrYWRkciAqc2EpOworCitzdGF0aWMgaW50IGZkID0gLTE7CitzdGF0aWMgaW50IGlmaW5kZXggPSAtMTsKK3N0YXRpYyBBVkFISV9MTElTVF9IRUFEKEFkZHJlc3MsIGFkZHJlc3NlcykgPSBOVUxMOworCitpbnQKK2lmYWNlX2luaXQoaW50IGlkeCkKK3sKKworICAgICAgICBmZCA9IHNvY2tldChQRl9ST1VURSwgU09DS19SQVcsIEFGX0lORVQpOworICAgICAgICBpZiAoZmQgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICBkYWVtb25fbG9nKExPR19FUlIsICJzb2NrZXQoUEZfUk9VVEUpOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuICgtMSk7CisgICAgICAgIH0KKworICAgICAgICBzb19zZXRfbm9uYmxvY2soZmQsIDEpOworCisgICAgICAgIGlmaW5kZXggPSBpZHg7CisKKyAgICAgICAgcmV0dXJuIChmZCk7Cit9CisKK2ludAoraWZhY2VfZ2V0X2luaXRpYWxfc3RhdGUoU3RhdGUgKnN0YXRlKQoreworICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgbWliWzZdOworICAgICAgICBjaGFyICAgICAgICAgICAgICAgICAgICAqYnVmOworICAgICAgICBzdHJ1Y3QgaWZfbXNnaGRyICAgICAgICAqaWZtOworICAgICAgICBzdHJ1Y3QgaWZhX21zZ2hkciAgICAgICAqaWZhbTsKKyAgICAgICAgY2hhciAgICAgICAgICAgICAgICAgICAgKmxpbTsKKyAgICAgICAgY2hhciAgICAgICAgICAgICAgICAgICAgKm5leHQ7CisgICAgICAgIHN0cnVjdCBzb2NrYWRkciAgICAgICAgICpzYTsKKyAgICAgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgIGxlbjsKKyAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgIG5hZGRyczsKKworICAgICAgICBhc3NlcnQoc3RhdGUgIT0gTlVMTCk7CisgICAgICAgIGFzc2VydChmZCAhPSAtMSk7CisKKyAgICAgICAgbmFkZHJzID0gMDsKKworICAgICAgICBtaWJbMF0gPSBDVExfTkVUOworICAgICAgICBtaWJbMV0gPSBQRl9ST1VURTsKKyAgICAgICAgbWliWzJdID0gMDsKKyAgICAgICAgbWliWzNdID0gMDsKKyAgICAgICAgbWliWzRdID0gTkVUX1JUX0lGTElTVDsKKyAgICAgICAgbWliWzVdID0gaWZpbmRleDsKKworICAgICAgICBpZiAoc3lzY3RsKG1pYiwgZWxlbWVudHNvZihtaWIpLCBOVUxMLCAmbGVuLCBOVUxMLCAwKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgZGFlbW9uX2xvZyhMT0dfRVJSLCAic3lzY3RsKE5FVF9SVF9JRkxJU1QpOiAlcyIsCisgICAgICAgICAgICAgICAgICAgIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuICgtMSk7CisgICAgICAgIH0KKworICAgICAgICBidWYgPSBtYWxsb2MobGVuKTsKKyAgICAgICAgaWYgKGJ1ZiA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgZGFlbW9uX2xvZyhMT0dfRVJSLCAibWFsbG9jKCVkKTogJXMiLCBsZW4sIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuICgtMSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3lzY3RsKG1pYiwgZWxlbWVudHNvZihtaWIpLCBidWYsICZsZW4sIE5VTEwsIDApICE9IDApIHsKKyAgICAgICAgICAgICAgICBkYWVtb25fbG9nKExPR19FUlIsICJzeXNjdGwoTkVUX1JUX0lGTElTVCk6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgICAgICBmcmVlKGJ1Zik7CisgICAgICAgICAgICAgICAgcmV0dXJuICgtMSk7CisgICAgICAgIH0KKworICAgICAgICBsaW0gPSBidWYgKyBsZW47CisgICAgICAgIGZvciAobmV4dCA9IGJ1ZjsgbmV4dCA8IGxpbTsgbmV4dCArPSBpZm0tPmlmbV9tc2dsZW4pIHsKKyAgICAgICAgICAgICAgICBpZm0gPSAoc3RydWN0IGlmX21zZ2hkciAqKW5leHQ7CisgICAgICAgICAgICAgICAgaWYgKGlmbS0+aWZtX3R5cGUgPT0gUlRNX05FV0FERFIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmYW0gPSAoc3RydWN0IGlmYV9tc2doZHIgKiluZXh0OworICAgICAgICAgICAgICAgICAgICAgICAgc2EgPSAoc3RydWN0IHNvY2thZGRyICopKGlmYW0gKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzYS0+c2FfZmFtaWx5ICE9IEFGX0lORVQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgKytuYWRkcnM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZyZWUoYnVmKTsKKworICAgICAgICAqc3RhdGUgPSAobmFkZHJzID4gMCkgPyBTVEFURV9TTEVFUElORyA6IFNUQVRFX1NUQVJUOworCisgICAgICAgIHJldHVybiAoMCk7Cit9CisKK2ludAoraWZhY2VfcHJvY2VzcyhFdmVudCAqZXZlbnQpCit7CisgICAgICAgIGludCByb3V0YWJsZTsKKworICAgICAgICBhc3NlcnQoZmQgIT0gLTEpOworCisgICAgICAgIHJvdXRhYmxlID0gISFhZGRyZXNzZXM7CisKKyAgICAgICAgaWYgKHJ0bV9kaXNwYXRjaCgpID09IC0xKQorICAgICAgICAgICAgICAgIHJldHVybiAoLTEpOworCisgICAgICAgIGlmIChyb3V0YWJsZSAmJiAhYWRkcmVzc2VzKQorICAgICAgICAgICAgICAgICpldmVudCA9IEVWRU5UX1JPVVRBQkxFX0FERFJfVU5DT05GSUdVUkVEOworICAgICAgICBlbHNlIGlmICghcm91dGFibGUgJiYgYWRkcmVzc2VzKQorICAgICAgICAgICAgICAgICpldmVudCA9IEVWRU5UX1JPVVRBQkxFX0FERFJfQ09ORklHVVJFRDsKKworICAgICAgICByZXR1cm4gKDApOworfQorCit2b2lkCitpZmFjZV9kb25lKHZvaWQpCit7CisgICAgICAgIEFkZHJlc3MgKmE7CisKKyAgICAgICAgaWYgKGZkICE9IC0xKSB7CisgICAgICAgICAgICAgICAgY2xvc2UoZmQpOworICAgICAgICAgICAgICAgIGZkID0gLTE7CisgICAgICAgIH0KKworICAgICAgICB3aGlsZSAoKGEgPSBhZGRyZXNzZXMpICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBBVkFISV9MTElTVF9SRU1PVkUoQWRkcmVzcywgYWRkcmVzc2VzLCBhZGRyZXNzZXMsIGEpOworICAgICAgICAgICAgICAgIGF2YWhpX2ZyZWUoYSk7CisgICAgICAgIH0KK30KKworLyoKKyAqIERpc3BhdGNoIGtlcm5lbCByb3V0aW5nIHNvY2tldCBtZXNzYWdlcy4KKyAqLworc3RhdGljIGludAorcnRtX2Rpc3BhdGNoKHZvaWQpCit7CisgICAgICAgIHN0cnVjdCBtc2doZHIgbWg7CisgICAgICAgIHN0cnVjdCBpb3ZlYyBpb3ZbMV07CisgICAgICAgIHN0cnVjdCBydF9tc2doZHIgKnJ0bTsKKyAgICAgICAgc3RydWN0IHJ0bV9kaXNwaW5mbyAqZGk7CisgICAgICAgIHNzaXplX3QgbGVuOworICAgICAgICBpbnQgcmV0dmFsOworCisgICAgICAgIGRpID0gbWFsbG9jKHNpemVvZigqZGkpKTsKKyAgICAgICAgaWYgKGRpID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBkYWVtb25fbG9nKExPR19FUlIsICJtYWxsb2MoJWQpOiAlcyIsIHNpemVvZigqZGkpLAorICAgICAgICAgICAgICAgICAgICBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgICAgIHJldHVybiAoLTEpOworICAgICAgICB9CisgICAgICAgIGRpLT5kaV9idWZsZW4gPSBNQVhfUlRNU0dfU0laRTsKKyAgICAgICAgZGktPmRpX2J1ZiA9IGNhbGxvYyhNQVhfUlRNU0dfU0laRSwgMSk7CisgICAgICAgIGlmIChkaS0+ZGlfYnVmID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBmcmVlKGRpKTsKKyAgICAgICAgICAgICAgICBkYWVtb25fbG9nKExPR19FUlIsICJjYWxsb2MoJWQpOiAlcyIsIE1BWF9SVE1TR19TSVpFLAorICAgICAgICAgICAgICAgICAgICBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgICAgIHJldHVybiAoLTEpOworICAgICAgICB9CisKKyAgICAgICAgbWVtc2V0KCZtaCwgMCwgc2l6ZW9mKG1oKSk7CisgICAgICAgIGlvdlswXS5pb3ZfYmFzZSA9IGRpLT5kaV9idWY7CisgICAgICAgIGlvdlswXS5pb3ZfbGVuID0gZGktPmRpX2J1ZmxlbjsKKyAgICAgICAgbWgubXNnX2lvdiA9IGlvdjsKKyAgICAgICAgbWgubXNnX2lvdmxlbiA9IDE7CisKKyAgICAgICAgcmV0dmFsID0gMDsKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgICAgIGxlbiA9IHJlY3Ztc2coZmQsICZtaCwgTVNHX0RPTlRXQUlUKTsKKyAgICAgICAgICAgICAgICBpZiAobGVuID09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJybm8gPT0gRVdPVUxEQkxPQ0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhZW1vbl9sb2coTE9HX0VSUiwgInJlY3Ztc2coKTogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gLTE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJ0bSA9ICh2b2lkICopZGktPmRpX2J1ZjsKKyAgICAgICAgICAgICAgICBpZiAocnRtLT5ydG1fdmVyc2lvbiAhPSBSVE1fVkVSU0lPTikgeworICAgICAgICAgICAgICAgICAgICAgICAgZGFlbW9uX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmtub3duIHJvdXRpbmcgc29ja2V0IG1lc3NhZ2UgKHZlcnNpb24gJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ0bS0+cnRtX3ZlcnNpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgLyogdGhpcyBpcyBub24tZmF0YWw7IGp1c3QgaWdub3JlIGl0IGZvciBub3cuICovCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHJ0bS0+cnRtX3R5cGUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFJUTV9ORVdBRERSOgorICAgICAgICAgICAgICAgIGNhc2UgUlRNX0RFTEFERFI6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSBydG1fZGlzcGF0Y2hfbmV3ZGVsYWRkcihkaSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFJUTV9JRkFOTk9VTkNFOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gcnRtX2Rpc3BhdGNoX2lmYW5ub3VuY2UoZGkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhZW1vbl9sb2coTE9HX0RFQlVHLCAiJXM6IHJ0bV90eXBlICVkIGlnbm9yZWQiLCBfX2Z1bmNfXywgcnRtLT5ydG1fdHlwZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIElmIHdlIGdvdCBhbiBlcnJvcjsgYXNzdW1lIG91ciBwb3NpdGlvbiBvbiB0aGUgY2FsbAorICAgICAgICAgICAgICAgICAqIHN0YWNrIGlzIGVuY2xvc2VkIGJ5IGEgbGV2ZWwtdHJpZ2dlcmVkIGV2ZW50IGxvb3AsCisgICAgICAgICAgICAgICAgICogYW5kIHNpZ25hbCB0aGUgZXJyb3IgY29uZGl0aW9uLgorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGlmIChyZXR2YWwgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGZyZWUoZGktPmRpX2J1Zik7CisgICAgICAgIGZyZWUoZGkpOworCisgICAgICAgIHJldHVybiAocmV0dmFsKTsKK30KKworLyogaGFuZGxlIGxpbmsgY29taW5nIG9yIGdvaW5nIGF3YXkgKi8KK3N0YXRpYyBpbnQKK3J0bV9kaXNwYXRjaF9pZmFubm91bmNlKHN0cnVjdCBydG1fZGlzcGluZm8gKmRpKQoreworICAgICAgICBydG11bmlvbl90ICpydG0gPSAodm9pZCAqKWRpLT5kaV9idWY7CisKKyAgICAgICAgYXNzZXJ0KHJ0bS0+cnRtLnJ0bV90eXBlID09IFJUTV9JRkFOTk9VTkNFKTsKKworICAgICAgICBkYWVtb25fbG9nKExPR19ERUJVRywgIiVzOiBJRkFOTk9VTkNFIGZvciBpZmluZGV4ICVkIiwKKyAgICAgICAgICAgIF9fZnVuY19fLCBydG0tPmlmYW4uaWZhbl9pbmRleCk7CisKKyAgICAgICAgc3dpdGNoIChydG0tPmlmYW4uaWZhbl93aGF0KSB7CisgICAgICAgIGNhc2UgSUZBTl9BUlJJVkFMOgorICAgICAgICAgICAgICAgIGlmIChydG0tPmlmYW4uaWZhbl9pbmRleCA9PSBpZmluZGV4KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkYWVtb25fbG9nKExPR19FUlIsCisiUlRNX0lGQU5OT1VOQ0UgSUZBTl9BUlJJVkFMLCBmb3IgaWZpbmRleCAlZCwgd2hpY2ggd2UgYWxyZWFkeSBtYW5hZ2UuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoLTEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJRkFOX0RFUEFSVFVSRToKKyAgICAgICAgICAgICAgICBpZiAocnRtLT5pZmFuLmlmYW5faW5kZXggPT0gaWZpbmRleCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGFlbW9uX2xvZyhMT0dfRVJSLCAiSW50ZXJmYWNlIHZhbmlzaGVkLiIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgtMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIC8qIGlnbm9yZSAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuICgwKTsKK30KKworc3RhdGljIHN0cnVjdCBzb2NrYWRkciAqCituZXh0X3NhKHN0cnVjdCBzb2NrYWRkciAqc2EpCit7CisgICAgICAgIHZvaWQgICAgICAgICAgICAqcDsKKyAgICAgICAgc2l6ZV90ICAgICAgICAgICBzYV9zaXplOworCisjaWZkZWYgU0FfU0laRQorICAgICAgICBzYV9zaXplID0gU0FfU0laRShzYSk7CisjZWxzZQorICAgICAgICAvKiBUaGlzIGlzIG5vdCBmb29scHJvb2YsIGtlcm5lbCBtYXkgcm91bmQuICovCisgICAgICAgIHNhX3NpemUgPSBzYS0+c2FfbGVuOworICAgICAgICBpZiAoc2Ffc2l6ZSA8IHNpemVvZih1X2xvbmcpKQorICAgICAgICAgICAgICAgIHNhX3NpemUgPSBzaXplb2YodV9sb25nKTsKKyNlbmRpZgorCisgICAgICAgIHAgPSAoKGNoYXIgKilzYSkgKyBzYV9zaXplOworCisgICAgICAgIHJldHVybiAoc3RydWN0IHNvY2thZGRyICopcDsKK30KKworLyogaGFuZGxlIGFkZHJlc3MgY29taW5nIG9yIGdvaW5nIGF3YXkgKi8KK3N0YXRpYyBpbnQKK3J0bV9kaXNwYXRjaF9uZXdkZWxhZGRyKHN0cnVjdCBydG1fZGlzcGluZm8gKmRpKQoreworICAgICAgICBBZGRyZXNzICAgICAgICAgICAgICAgICAqYXA7CisgICAgICAgIHN0cnVjdCBpZmFfbXNnaGRyICAgICAgICppZmFtOworICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgICAgICAgICAqc2E7CisgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAgICAgICpzaW47CisgICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgIGxpbmtfbG9jYWw7CisKKy8qIG1hY3JvIHRvIHNraXAgdG8gbmV4dCBSVEE7IGhhcyBzaWRlLWVmZmVjdHMgKi8KKyNkZWZpbmUgU0tJUFJUQShpZmFtc2dwLCBydGEsIHNhKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBpZiAoKGlmYW1zZ3ApLT5pZmFtX2FkZHJzICYgKHJ0YSkpICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIChzYSkgPSBuZXh0X3NhKChzYSkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSB3aGlsZSAoMCkKKworICAgICAgICBpZmFtID0gJigocnRtdW5pb25fdCAqKWRpLT5kaV9idWYpLT5pZmFtOworCisgICAgICAgIGFzc2VydChpZmFtLT5pZmFtX3R5cGUgPT0gUlRNX05FV0FERFIgfHwKKyAgICAgICAgICAgICAgIGlmYW0tPmlmYW1fdHlwZSA9PSBSVE1fREVMQUREUik7CisKKyAgICAgICAgZGFlbW9uX2xvZyhMT0dfREVCVUcsICIlczogJXMgZm9yIGlmYWNlICVkICglcykiLCBfX2Z1bmNfXywKKyAgICAgICAgICAgIGlmYW0tPmlmYW1fdHlwZSA9PSBSVE1fTkVXQUREUiA/ICJORVdBRERSIiA6ICJERUxBRERSIiwKKyAgICAgICAgICAgIGlmYW0tPmlmYW1faW5kZXgsIChpZmFtLT5pZmFtX2luZGV4ID09IGlmaW5kZXgpID8gIm91cnMiIDogIm5vdCBvdXJzIik7CisKKyAgICAgICAgaWYgKGlmYW0tPmlmYW1faW5kZXggIT0gaWZpbmRleCkKKyAgICAgICAgICAgICAgICByZXR1cm4gKDApOworCisgICAgICAgIGlmICghKGlmYW0tPmlmYW1fYWRkcnMgJiBSVEFfSUZBKSkgeworICAgICAgICAgICAgICAgIGRhZW1vbl9sb2coTE9HX0VSUiwgImlmYSBtc2cgaGFzIG5vIFJUQV9JRkEuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuICgwKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHNraXAgb3ZlciBydG1zZyBwYWRkaW5nIGNvcnJlY3RseSAqLworICAgICAgICBzYSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikoaWZhbSArIDEpOworICAgICAgICBTS0lQUlRBKGlmYW0sIFJUQV9EU1QsIHNhKTsKKyAgICAgICAgU0tJUFJUQShpZmFtLCBSVEFfR0FURVdBWSwgc2EpOworICAgICAgICBTS0lQUlRBKGlmYW0sIFJUQV9ORVRNQVNLLCBzYSk7CisgICAgICAgIFNLSVBSVEEoaWZhbSwgUlRBX0dFTk1BU0ssIHNhKTsKKyAgICAgICAgU0tJUFJUQShpZmFtLCBSVEFfSUZQLCBzYSk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogc2Egbm93IHBvaW50cyB0byBSVEFfSUZBIHNvY2thZGRyOyB3ZSBhcmUgb25seSBpbnRlcmVzdGVkCisgICAgICAgICAqIGluIHVwZGF0ZXMgZm9yIHJvdXRhYmxlIGFkZHJlc3Nlcy4KKyAgICAgICAgICovCisgICAgICAgIGlmIChzYS0+c2FfZmFtaWx5ICE9IEFGX0lORVQpIHsKKyAgICAgICAgICAgICAgICBkYWVtb25fbG9nKExPR19ERUJVRywgIiVzOiBSVEFfSUZBIGZhbWlseSBub3QgQUZfSU5FVCAoPSVkKSIsIF9fZnVuY19fLCBzYS0+c2FfZmFtaWx5KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKDApOworICAgICAgICB9CisKKyAgICAgICAgc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNhOworICAgICAgICBsaW5rX2xvY2FsID0gSU5fTElOS0xPQ0FMKG50b2hsKHNpbi0+c2luX2FkZHIuc19hZGRyKSk7CisKKyAgICAgICAgZGFlbW9uX2xvZyhMT0dfREVCVUcsICIlczogJXMgZm9yICVzICglcykiLCBfX2Z1bmNfXywKKyAgICAgICAgICAgIGlmYW0tPmlmYW1fdHlwZSA9PSBSVE1fTkVXQUREUiA/ICJORVdBRERSIiA6ICJERUxBRERSIiwKKyAgICAgICAgICAgIGluZXRfbnRvYShzaW4tPnNpbl9hZGRyKSwgbGlua19sb2NhbCA/ICJsaW5rIGxvY2FsIiA6ICJyb3V0YWJsZSIpOworCisgICAgICAgIGlmIChsaW5rX2xvY2FsKQorICAgICAgICAgICAgICAgIHJldHVybiAoMCk7CisKKyAgICAgICAgZm9yIChhcCA9IGFkZHJlc3NlczsgYXA7IGFwID0gYXAtPmFkZHJlc3Nlc19uZXh0KSB7CisgICAgICAgICAgICAgICAgaWYgKGFwLT5hZGRyZXNzID09IHNpbi0+c2luX2FkZHIuc19hZGRyKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlmYW0tPmlmYW1fdHlwZSA9PSBSVE1fREVMQUREUiAmJiBhcCAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgQVZBSElfTExJU1RfUkVNT1ZFKEFkZHJlc3MsIGFkZHJlc3NlcywgYWRkcmVzc2VzLCBhcCk7CisgICAgICAgICAgICAgICAgYXZhaGlfZnJlZShhcCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlmYW0tPmlmYW1fdHlwZSA9PSBSVE1fTkVXQUREUiAmJiBhcCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgYXAgPSBhdmFoaV9uZXcoQWRkcmVzcywgMSk7CisgICAgICAgICAgICAgICAgYXAtPmFkZHJlc3MgPSBzaW4tPnNpbl9hZGRyLnNfYWRkcjsKKyAgICAgICAgICAgICAgICBBVkFISV9MTElTVF9QUkVQRU5EKEFkZHJlc3MsIGFkZHJlc3NlcywgYWRkcmVzc2VzLCBhcCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gKDApOworI3VuZGVmIFNLSVBSVEEKK30KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1hdXRvaXBkL2lmYWNlLWxpbnV4LmMgYi9hdmFoaS0wLjYuMzEvYXZhaGktYXV0b2lwZC9pZmFjZS1saW51eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzZTllNDEKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktYXV0b2lwZC9pZmFjZS1saW51eC5jCkBAIC0wLDAgKzEsMzMyIEBACisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CisjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CisjaW5jbHVkZSA8bGludXgvaWYuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKworI2luY2x1ZGUgPGxpYmRhZW1vbi9kbG9nLmg+CisKKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vbGxpc3QuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vbWFsbG9jLmg+CisKKyNpZm5kZWYgSUZMQV9SVEEKKyNpbmNsdWRlIDxsaW51eC9pZl9hZGRyLmg+CisjZGVmaW5lIElGTEFfUlRBKHIpICAoKHN0cnVjdCBydGF0dHIqKSgoKGNoYXIqKShyKSkgKyBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IGlmaW5mb21zZykpKSkKKyNlbmRpZgorCisjaWZuZGVmIElGQV9SVEEKKyNpbmNsdWRlIDxsaW51eC9pZl9hZGRyLmg+CisjZGVmaW5lIElGQV9SVEEocikgICgoc3RydWN0IHJ0YXR0ciopKCgoY2hhciopKHIpKSArIE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgaWZhZGRybXNnKSkpKQorI2VuZGlmCisKKyNpbmNsdWRlICJpZmFjZS5oIgorCitzdGF0aWMgaW50IGZkID0gLTE7CitzdGF0aWMgaW50IGlmaW5kZXggPSAtMTsKKwordHlwZWRlZiBzdHJ1Y3QgQWRkcmVzcyBBZGRyZXNzOworCitzdHJ1Y3QgQWRkcmVzcyB7CisgICAgdWludDMyX3QgYWRkcmVzczsKKyAgICBBVkFISV9MTElTVF9GSUVMRFMoQWRkcmVzcywgYWRkcmVzc2VzKTsKK307CisKK0FWQUhJX0xMSVNUX0hFQUQoQWRkcmVzcywgYWRkcmVzc2VzKSA9IE5VTEw7CisKK2ludCBpZmFjZV9pbml0KGludCBpKSB7CisgICAgc3RydWN0IHNvY2thZGRyX25sIGFkZHI7CisgICAgaW50IG9uID0gMTsKKworICAgIGlmICgoZmQgPSBzb2NrZXQoUEZfTkVUTElOSywgU09DS19ER1JBTSwgTkVUTElOS19ST1VURSkpIDwgMCkgeworICAgICAgICBkYWVtb25fbG9nKExPR19FUlIsICJzb2NrZXQoUEZfTkVUTElOSyk6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIG1lbXNldCgmYWRkciwgMCwgc2l6ZW9mKGFkZHIpKTsKKyAgICBhZGRyLm5sX2ZhbWlseSA9IEFGX05FVExJTks7CisgICAgYWRkci5ubF9ncm91cHMgPSAgUlRNR1JQX0xJTkt8UlRNR1JQX0lQVjRfSUZBRERSOworICAgIGFkZHIubmxfcGlkID0gZ2V0cGlkKCk7CisKKyAgICBpZiAoYmluZChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSAmYWRkciwgc2l6ZW9mKGFkZHIpKSA8IDApIHsKKyAgICAgICAgZGFlbW9uX2xvZyhMT0dfRVJSLCAiYmluZCgpOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBpZiAoc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fUEFTU0NSRUQsICZvbiwgc2l6ZW9mKG9uKSkgPCAwKSB7CisgICAgICAgIGRhZW1vbl9sb2coTE9HX0VSUiwgIlNPX1BBU1NDUkVEOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBpZmluZGV4ID0gaTsKKworICAgIHJldHVybiBmZDsKKworZmFpbDoKKyAgICBpZiAoZmQgPj0gMCkgeworICAgICAgICBjbG9zZShmZCk7CisgICAgICAgIGZkID0gLTE7CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IHByb2Nlc3Nfbmxtc2coc3RydWN0IG5sbXNnaGRyICpuKSB7CisgICAgYXNzZXJ0KG4pOworCisgICAgaWYgKG4tPm5sbXNnX3R5cGUgPT0gUlRNX05FV0xJTksgfHwgbi0+bmxtc2dfdHlwZSA9PSBSVE1fREVMTElOSykgeworICAgICAgICAvKiBBIGxpbmsgYXBwZWFyZWQgb3Igd2FzIHJlbW92ZWQgKi8KKworICAgICAgICBzdHJ1Y3QgaWZpbmZvbXNnICppZmk7CisgICAgICAgIGlmaSA9IE5MTVNHX0RBVEEobik7CisKKyAgICAgICAgaWYgKGlmaS0+aWZpX2ZhbWlseSAhPSBBRl9VTlNQRUMgfHwgKGludCkgaWZpLT5pZmlfaW5kZXggIT0gaWZpbmRleCkKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIGlmIChuLT5ubG1zZ190eXBlID09IFJUTV9ERUxMSU5LKSB7CisgICAgICAgICAgICBkYWVtb25fbG9nKExPR19FUlIsICJJbnRlcmZhY2UgdmFuaXNoZWQuIik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBhc3NlcnQobi0+bmxtc2dfdHlwZSA9PSBSVE1fTkVXTElOSyk7CisKKyAgICAgICAgaWYgKChpZmktPmlmaV9mbGFncyAmIElGRl9MT09QQkFDSykgfHwKKyAgICAgICAgICAgIChpZmktPmlmaV9mbGFncyAmIElGRl9OT0FSUCkgfHwKKyAgICAgICAgICAgIGlmaS0+aWZpX3R5cGUgIT0gQVJQSFJEX0VUSEVSKSB7CisgICAgICAgICAgICBkYWVtb25fbG9nKExPR19FUlIsICJJbnRlcmZhY2Ugbm90IHN1aXRhYmxlLiIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICB9IGVsc2UgaWYgKG4tPm5sbXNnX3R5cGUgPT0gUlRNX05FV0FERFIgfHwgbi0+bmxtc2dfdHlwZSA9PSBSVE1fREVMQUREUikgeworCisgICAgICAgIC8qIEFuIGFkZHJlc3Mgd2FzIGFkZGVkIG9yIHJlbW92ZWQgKi8KKworICAgICAgICBzdHJ1Y3QgcnRhdHRyICphID0gTlVMTDsKKyAgICAgICAgc3RydWN0IGlmYWRkcm1zZyAqaWZhOworICAgICAgICBpbnQgbDsKKyAgICAgICAgdWludDMyX3QgYWRkcmVzcyA9IDA7CisgICAgICAgIEFkZHJlc3MgKmk7CisKKyAgICAgICAgaWZhID0gTkxNU0dfREFUQShuKTsKKworICAgICAgICBpZiAoaWZhLT5pZmFfZmFtaWx5ICE9IEFGX0lORVQgfHwgKGludCkgaWZhLT5pZmFfaW5kZXggIT0gaWZpbmRleCkKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIGwgPSBOTE1TR19QQVlMT0FEKG4sIHNpemVvZigqaWZhKSk7CisgICAgICAgIGEgPSBJRkxBX1JUQShpZmEpOworCisgICAgICAgIHdoaWxlKFJUQV9PSyhhLCBsKSkgeworCisgICAgICAgICAgICBzd2l0Y2goYS0+cnRhX3R5cGUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIElGQV9MT0NBTDoKKyAgICAgICAgICAgICAgICBjYXNlIElGQV9BRERSRVNTOgorICAgICAgICAgICAgICAgICAgICBhc3NlcnQoUlRBX1BBWUxPQUQoYSkgPT0gNCk7CisgICAgICAgICAgICAgICAgICAgIG1lbWNweSgmYWRkcmVzcywgUlRBX0RBVEEoYSksIHNpemVvZih1aW50MzJfdCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYSA9IFJUQV9ORVhUKGEsIGwpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFhZGRyZXNzIHx8IGlzX2xsX2FkZHJlc3MoYWRkcmVzcykpCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBmb3IgKGkgPSBhZGRyZXNzZXM7IGk7IGkgPSBpLT5hZGRyZXNzZXNfbmV4dCkKKyAgICAgICAgICAgIGlmIChpLT5hZGRyZXNzID09IGFkZHJlc3MpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKG4tPm5sbXNnX3R5cGUgPT0gUlRNX0RFTEFERFIgJiYgaSkgeworICAgICAgICAgICAgQVZBSElfTExJU1RfUkVNT1ZFKEFkZHJlc3MsIGFkZHJlc3NlcywgYWRkcmVzc2VzLCBpKTsKKyAgICAgICAgICAgIGF2YWhpX2ZyZWUoaSk7CisgICAgICAgIH0gaWYgKG4tPm5sbXNnX3R5cGUgPT0gUlRNX05FV0FERFIgJiYgIWkpIHsKKyAgICAgICAgICAgIGkgPSBhdmFoaV9uZXcoQWRkcmVzcywgMSk7CisgICAgICAgICAgICBpLT5hZGRyZXNzID0gYWRkcmVzczsKKyAgICAgICAgICAgIEFWQUhJX0xMSVNUX1BSRVBFTkQoQWRkcmVzcywgYWRkcmVzc2VzLCBhZGRyZXNzZXMsIGkpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJvY2Vzc19yZXNwb25zZShpbnQgd2FpdF9mb3JfZG9uZSwgdW5zaWduZWQgc2VxKSB7CisgICAgYXNzZXJ0KGZkID49IDApOworCisgICAgZG8geworICAgICAgICBzaXplX3QgYnl0ZXM7CisgICAgICAgIHNzaXplX3QgcjsKKyAgICAgICAgY2hhciByZXBseWJ1Zls4KjEwMjRdOworICAgICAgICBjaGFyIGNyZWRfbXNnW0NNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCB1Y3JlZCkpXTsKKyAgICAgICAgc3RydWN0IG1zZ2hkciBtc2doZHI7CisgICAgICAgIHN0cnVjdCBjbXNnaGRyICpjbXNnaGRyOworICAgICAgICBzdHJ1Y3QgdWNyZWQgKnVjcmVkOworICAgICAgICBzdHJ1Y3QgaW92ZWMgaW92OworICAgICAgICBzdHJ1Y3Qgbmxtc2doZHIgKnAgPSAoc3RydWN0IG5sbXNnaGRyICopIHJlcGx5YnVmOworCisgICAgICAgIG1lbXNldCgmaW92LCAwLCBzaXplb2YoaW92KSk7CisgICAgICAgIGlvdi5pb3ZfYmFzZSA9IHJlcGx5YnVmOworIAlpb3YuaW92X2xlbiA9IHNpemVvZihyZXBseWJ1Zik7CisKKyAgICAgICAgbWVtc2V0KCZtc2doZHIsIDAsIHNpemVvZihtc2doZHIpKTsKKyAgICAgICAgbXNnaGRyLm1zZ19uYW1lID0gKHZvaWQqKSBOVUxMOworICAgICAgICBtc2doZHIubXNnX25hbWVsZW4gPSAwOworICAgICAgICBtc2doZHIubXNnX2lvdiA9ICZpb3Y7CisgICAgICAgIG1zZ2hkci5tc2dfaW92bGVuID0gMTsKKyAgICAgICAgbXNnaGRyLm1zZ19jb250cm9sID0gY3JlZF9tc2c7CisgICAgICAgIG1zZ2hkci5tc2dfY29udHJvbGxlbiA9IHNpemVvZihjcmVkX21zZyk7CisgCW1zZ2hkci5tc2dfZmxhZ3MgPSAwOworCisgICAgICAgIGlmICgociA9IHJlY3Ztc2coZmQsICZtc2doZHIsIDApKSA8IDApIHsKKyAgICAgICAgICAgIGRhZW1vbl9sb2coTE9HX0VSUiwgInJlY3Ztc2coKSBmYWlsZWQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghKGNtc2doZHIgPSBDTVNHX0ZJUlNUSERSKCZtc2doZHIpKSB8fCBjbXNnaGRyLT5jbXNnX3R5cGUgIT0gU0NNX0NSRURFTlRJQUxTKSB7CisgICAgICAgICAgICBkYWVtb25fbG9nKExPR19XQVJOSU5HLCAiTm8gc2VuZGVyIGNyZWRlbnRpYWxzIHJlY2VpdmVkLCBpZ25vcmluZyBkYXRhLiIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgdWNyZWQgPSAoc3RydWN0IHVjcmVkKikgQ01TR19EQVRBKGNtc2doZHIpOworCisgICAgICAgIGlmICh1Y3JlZC0+dWlkICE9IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgYnl0ZXMgPSAoc2l6ZV90KSByOworCisgICAgICAgIGZvciAoOyBieXRlcyA+IDA7IHAgPSBOTE1TR19ORVhUKHAsIGJ5dGVzKSkgeworCisgICAgICAgICAgICBpZiAoIU5MTVNHX09LKHAsIGJ5dGVzKSB8fCBieXRlcyA8IHNpemVvZihzdHJ1Y3Qgbmxtc2doZHIpIHx8IGJ5dGVzIDwgcC0+bmxtc2dfbGVuKSB7CisgICAgICAgICAgICAgICAgZGFlbW9uX2xvZyhMT0dfRVJSLCAiTmV0bGluayBwYWNrZXQgdG9vIHNtYWxsLiIpOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHAtPm5sbXNnX3R5cGUgPT0gTkxNU0dfRE9ORSAmJiB3YWl0X2Zvcl9kb25lICYmIHAtPm5sbXNnX3NlcSA9PSBzZXEgJiYgKHBpZF90KSBwLT5ubG1zZ19waWQgPT0gZ2V0cGlkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgICAgIGlmIChwLT5ubG1zZ190eXBlID09IE5MTVNHX0VSUk9SKSB7CisgICAgICAgICAgICAgICAgc3RydWN0IG5sbXNnZXJyICplID0gKHN0cnVjdCBubG1zZ2VyciAqKSBOTE1TR19EQVRBIChwKTsKKworICAgICAgICAgICAgICAgIGlmIChlLT5lcnJvcikgeworICAgICAgICAgICAgICAgICAgICBkYWVtb25fbG9nKExPR19FUlIsICJOZXRsaW5rIGVycm9yOiAlcyIsIHN0cmVycm9yKC1lLT5lcnJvcikpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocHJvY2Vzc19ubG1zZyhwKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfSB3aGlsZSAod2FpdF9mb3JfZG9uZSk7CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IGlmYWNlX2dldF9pbml0aWFsX3N0YXRlKFN0YXRlICpzdGF0ZSkgeworICAgIHN0cnVjdCBubG1zZ2hkciAqbjsKKyAgICBzdHJ1Y3QgaWZpbmZvbXNnICppZmk7CisgICAgc3RydWN0IGlmYWRkcm1zZyAqaWZhOworICAgIHVpbnQ4X3QgcmVxWzEwMjRdOworICAgIGludCBzZXEgPSAwOworCisgICAgYXNzZXJ0KGZkID49IDApOworICAgIGFzc2VydChzdGF0ZSk7CisKKyAgICBtZW1zZXQoJnJlcSwgMCwgc2l6ZW9mKHJlcSkpOworICAgIG4gPSAoc3RydWN0IG5sbXNnaGRyKikgcmVxOworICAgIG4tPm5sbXNnX2xlbiA9IE5MTVNHX0xFTkdUSChzaXplb2YoKmlmaSkpOworICAgIG4tPm5sbXNnX3R5cGUgPSBSVE1fR0VUTElOSzsKKyAgICBuLT5ubG1zZ19zZXEgPSBzZXE7CisgICAgbi0+bmxtc2dfZmxhZ3MgPSBOTE1fRl9SRVFVRVNUfE5MTV9GX0RVTVA7CisgICAgbi0+bmxtc2dfcGlkID0gMDsKKworICAgIGlmaSA9IE5MTVNHX0RBVEEobik7CisgICAgaWZpLT5pZmlfZmFtaWx5ID0gQUZfVU5TUEVDOworICAgIGlmaS0+aWZpX2NoYW5nZSA9IC0xOworCisgICAgaWYgKHNlbmQoZmQsIG4sIG4tPm5sbXNnX2xlbiwgMCkgPCAwKSB7CisgICAgICAgIGRhZW1vbl9sb2coTE9HX0VSUiwgInNlbmQoKTogJXMiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKHByb2Nlc3NfcmVzcG9uc2UoMSwgMCkgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBuLT5ubG1zZ190eXBlID0gUlRNX0dFVEFERFI7CisgICAgbi0+bmxtc2dfbGVuID0gTkxNU0dfTEVOR1RIKHNpemVvZigqaWZhKSk7CisgICAgbi0+bmxtc2dfc2VxID0gKytzZXE7CisKKyAgICBpZmEgPSBOTE1TR19EQVRBKG4pOworICAgIGlmYS0+aWZhX2ZhbWlseSA9IEFGX0lORVQ7CisgICAgaWZhLT5pZmFfaW5kZXggPSBpZmluZGV4OworCisgICAgaWYgKHNlbmQoZmQsIG4sIG4tPm5sbXNnX2xlbiwgMCkgPCAwKSB7CisgICAgICAgIGRhZW1vbl9sb2coTE9HX0VSUiwgInNlbmQoKTogJXMiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKHByb2Nlc3NfcmVzcG9uc2UoMSwgc2VxKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgICpzdGF0ZSA9IGFkZHJlc3NlcyA/IFNUQVRFX1NMRUVQSU5HIDogU1RBVEVfU1RBUlQ7CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IGlmYWNlX3Byb2Nlc3MoRXZlbnQgKmV2ZW50KSB7CisgICAgaW50IGI7CisgICAgYXNzZXJ0KGZkID49IDApOworCisgICAgYiA9ICEhYWRkcmVzc2VzOworCisgICAgaWYgKHByb2Nlc3NfcmVzcG9uc2UoMCwgMCkgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAoYiAmJiAhYWRkcmVzc2VzKQorICAgICAgICAqZXZlbnQgPSBFVkVOVF9ST1VUQUJMRV9BRERSX1VOQ09ORklHVVJFRDsKKyAgICBlbHNlIGlmICghYiAmJiBhZGRyZXNzZXMpCisgICAgICAgICpldmVudCA9IEVWRU5UX1JPVVRBQkxFX0FERFJfQ09ORklHVVJFRDsKKworICAgIHJldHVybiAwOworfQorCit2b2lkIGlmYWNlX2RvbmUodm9pZCkgeworICAgIEFkZHJlc3MgKmE7CisKKyAgICBpZiAoZmQgPj0gMCkgeworICAgICAgICBjbG9zZShmZCk7CisgICAgICAgIGZkID0gLTE7CisgICAgfQorCisgICAgd2hpbGUgKChhID0gYWRkcmVzc2VzKSkgeworICAgICAgICBBVkFISV9MTElTVF9SRU1PVkUoQWRkcmVzcywgYWRkcmVzc2VzLCBhZGRyZXNzZXMsIGEpOworICAgICAgICBhdmFoaV9mcmVlKGEpOworICAgIH0KK30KKworCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktYXV0b2lwZC9pZmFjZS5oIGIvYXZhaGktMC42LjMxL2F2YWhpLWF1dG9pcGQvaWZhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWM5N2ZkCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWF1dG9pcGQvaWZhY2UuaApAQCAtMCwwICsxLDQ1IEBACisjaWZuZGVmIGZvb2F2YWhpaWZhY2VoZm9vCisjZGVmaW5lIGZvb2F2YWhpaWZhY2VoZm9vCisKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2luY2x1ZGUgPGludHR5cGVzLmg+CisKKyNpbmNsdWRlICJtYWluLmgiCisKKy8qIFN1YnNjcmliZSB0byBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gY2hhbmdlcy4gVGhlIG9ubHkgZXZlbnRzIHdlIGFyZQorICogaW50ZXJlc3RlZCBpbiBhcmUgd2hlbiByb3V0YWJsZSBhZGRyZXNzZXMgYXJlIHJlbW92ZWQvYWRkZWQgdG8gdGhlCisgKiBtb25pdG9yZWQgaW50ZXJmYWNlIGFuZCB3aGVuIG91ciBtb25pdG9yZWQgaW50ZXJmYWNlIGRpc2FwcGVhcnMuICovCisKKworLyogUmV0dXJuIGEgdmFsaWQgZmQgdGhhdCB3ZSBsaXN0ZW4gb24gZm9yIGV2ZW50cyAqLworaW50IGlmYWNlX2luaXQoaW50IGlmaW5kZXgpOworCisvKiBQcm9jZXNzIGV2ZW50cyAqLworaW50IGlmYWNlX3Byb2Nlc3MoRXZlbnQgKmV2ZW50KTsKK3ZvaWQgaWZhY2VfZG9uZSh2b2lkKTsKKworLyogRGVkdWNlIHRoZSBpbml0aWFsIHN0YXRlIG9mIG91ciBzdGF0ZSBtYWNoaW5lLiBJZiBhIHJvdXRhYmxlCisgKiBhZGRyZXNzIGlzIGNvbmZpZ3VyZWQgZm9yIHRoZSBpbnRlcmZhY2UsICpzdGF0ZSBzaG91bGQgYmUgc2V0IHRvCisgKiBTVEFURV9TTEVFUElORywgb3RoZXJ3aXNlIFNUQVRFX1NUQVJUICovCisKK2ludCBpZmFjZV9nZXRfaW5pdGlhbF9zdGF0ZShTdGF0ZSAqc3RhdGUpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1hdXRvaXBkL21haW4uYyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1hdXRvaXBkL21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWJkZGIyCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWF1dG9pcGQvbWFpbi5jCkBAIC0wLDAgKzEsMTcxNCBAQAorLyoqKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgICAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgICBVU0EuCisqKiovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisjaWZkZWYgX19GcmVlQlNEX18KKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CisjZW5kaWYKKworI2lmZGVmIF9fbGludXhfXworI2luY2x1ZGUgPG5ldHBhY2tldC9wYWNrZXQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPG5ldC9ldGhlcm5ldC5oPgorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2lmZGVmIF9fRnJlZUJTRF9fCisjaW5jbHVkZSA8bmV0L2lmX2RsLmg+CisjaW5jbHVkZSA8bmV0L3JvdXRlLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPGdldG9wdC5oPgorCisjaW5jbHVkZSA8Z3JwLmg+CisjaW5jbHVkZSA8cG9sbC5oPgorI2luY2x1ZGUgPHB3ZC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaWZuZGVmIF9fbGludXhfXworI2luY2x1ZGUgPHBjYXAuaD4KKworLyogT2xkIHZlcnNpb25zIG9mIFBDQVAgZGVmaW5lZCBpdCBhcyBEX0lOICovCisjaWZuZGVmIFBDQVBfRF9JTgorI2RlZmluZSBQQ0FQX0RfSU4gRF9JTgorI2VuZGlmCisKKyNlbmRpZgorCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL21hbGxvYy5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi90aW1ldmFsLmg+CisjaW5jbHVkZSA8YXZhaGktZGFlbW9uL3NldHByb2N0aXRsZS5oPgorCisjaW5jbHVkZSA8bGliZGFlbW9uL2Rmb3JrLmg+CisjaW5jbHVkZSA8bGliZGFlbW9uL2RzaWduYWwuaD4KKyNpbmNsdWRlIDxsaWJkYWVtb24vZGxvZy5oPgorI2luY2x1ZGUgPGxpYmRhZW1vbi9kcGlkLmg+CisjaW5jbHVkZSA8bGliZGFlbW9uL2RleGVjLmg+CisKKyNpbmNsdWRlICJtYWluLmgiCisjaW5jbHVkZSAiaWZhY2UuaCIKKworLyogQW4gaW1wbGVtZW50YXRpb24gb2YgUkZDIDM5MjcgKi8KKworLyogQ29uc3RhbnRzIGZyb20gdGhlIFJGQyAqLworI2RlZmluZSBQUk9CRV9XQUlUIDEKKyNkZWZpbmUgUFJPQkVfTlVNIDMKKyNkZWZpbmUgUFJPQkVfTUlOIDEKKyNkZWZpbmUgUFJPQkVfTUFYIDIKKyNkZWZpbmUgQU5OT1VOQ0VfV0FJVCAyCisjZGVmaW5lIEFOTk9VTkNFX05VTSAyCisjZGVmaW5lIEFOTk9VTkNFX0lOVEVSVkFMIDIKKyNkZWZpbmUgTUFYX0NPTkZMSUNUUyAxMAorI2RlZmluZSBSQVRFX0xJTUlUX0lOVEVSVkFMIDYwCisjZGVmaW5lIERFRkVORF9JTlRFUlZBTCAxMAorCisjZGVmaW5lIElQVjRMTF9ORVRXT1JLIDB4QTlGRTAwMDBMCisjZGVmaW5lIElQVjRMTF9ORVRNQVNLIDB4RkZGRjAwMDBMCisjZGVmaW5lIElQVjRMTF9IT1NUTUFTSyAweDAwMDBGRkZGTAorI2RlZmluZSBJUFY0TExfQlJPQURDQVNUIDB4QTlGRUZGRkZMCisKKyNkZWZpbmUgRVRIRVJfQUREUkxFTiA2CisjZGVmaW5lIEVUSEVSX0hEUl9TSVpFICgyKzIqRVRIRVJfQUREUkxFTikKKyNkZWZpbmUgQVJQX1BBQ0tFVF9TSVpFICg4KzQrNCsyKkVUSEVSX0FERFJMRU4pCisKK3R5cGVkZWYgZW51bSBBcnBPcGVyYXRpb24geworICAgIEFSUF9SRVFVRVNUID0gMSwKKyAgICBBUlBfUkVTUE9OU0UgPSAyCit9IEFycE9wZXJhdGlvbjsKKwordHlwZWRlZiBzdHJ1Y3QgQXJwUGFja2V0SW5mbyB7CisgICAgQXJwT3BlcmF0aW9uIG9wZXJhdGlvbjsKKworICAgIHVpbnQzMl90IHNlbmRlcl9pcF9hZGRyZXNzLCB0YXJnZXRfaXBfYWRkcmVzczsKKyAgICB1aW50OF90IHNlbmRlcl9od19hZGRyZXNzW0VUSEVSX0FERFJMRU5dLCB0YXJnZXRfaHdfYWRkcmVzc1tFVEhFUl9BRERSTEVOXTsKK30gQXJwUGFja2V0SW5mbzsKKwordHlwZWRlZiBzdHJ1Y3QgQXJwUGFja2V0IHsKKyAgICB1aW50OF90ICpldGhlcl9oZWFkZXI7CisgICAgdWludDhfdCAqZXRoZXJfcGF5bG9hZDsKK30gQXJwUGFja2V0OworCitzdGF0aWMgU3RhdGUgc3RhdGUgPSBTVEFURV9TVEFSVDsKK3N0YXRpYyBpbnQgbl9pdGVyYXRpb24gPSAwOworc3RhdGljIGludCBuX2NvbmZsaWN0ID0gMDsKKworc3RhdGljIGNoYXIgKmludGVyZmFjZV9uYW1lID0gTlVMTDsKK3N0YXRpYyBjaGFyICpwaWRfZmlsZV9uYW1lID0gTlVMTDsKK3N0YXRpYyB1aW50MzJfdCBzdGFydF9hZGRyZXNzID0gMDsKK3N0YXRpYyBjaGFyICphcmd2MCA9IE5VTEw7CitzdGF0aWMgaW50IGRhZW1vbml6ZSA9IDA7CitzdGF0aWMgaW50IHdhaXRfZm9yX2FkZHJlc3MgPSAwOworc3RhdGljIGludCB1c2Vfc3lzbG9nID0gMDsKK3N0YXRpYyBpbnQgZGVidWcgPSAwOworc3RhdGljIGludCBtb2RpZnlfcHJvY190aXRsZSA9IDE7CitzdGF0aWMgaW50IGZvcmNlX2JpbmQgPSAwOworI2lmZGVmIEhBVkVfQ0hST09UCitzdGF0aWMgaW50IG5vX2Nocm9vdCA9IDA7CisjZW5kaWYKK3N0YXRpYyBpbnQgbm9fZHJvcF9yb290ID0gMDsKK3N0YXRpYyBpbnQgd3JvdGVfcGlkX2ZpbGUgPSAwOworc3RhdGljIGNoYXIgKmFjdGlvbl9zY3JpcHQgPSBOVUxMOworCitzdGF0aWMgZW51bSB7CisgICAgREFFTU9OX1JVTiwKKyAgICBEQUVNT05fS0lMTCwKKyAgICBEQUVNT05fUkVGUkVTSCwKKyAgICBEQUVNT05fVkVSU0lPTiwKKyAgICBEQUVNT05fSEVMUCwKKyAgICBEQUVNT05fQ0hFQ0sKK30gY29tbWFuZCA9IERBRU1PTl9SVU47CisKK3R5cGVkZWYgZW51bSBDYWxsb3V0RXZlbnQgeworICAgIENBTExPVVRfQklORCwKKyAgICBDQUxMT1VUX0NPTkZMSUNULAorICAgIENBTExPVVRfVU5CSU5ELAorICAgIENBTExPVVRfU1RPUCwKKyAgICBDQUxMT1VUX01BWAorfSBDYWxsb3V0RXZlbnQ7CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgY2FsbG91dF9ldmVudF90YWJsZVtDQUxMT1VUX01BWF0gPSB7CisgICAgW0NBTExPVVRfQklORF0gPSAiQklORCIsCisgICAgW0NBTExPVVRfQ09ORkxJQ1RdID0gIkNPTkZMSUNUIiwKKyAgICBbQ0FMTE9VVF9VTkJJTkRdID0gIlVOQklORCIsCisgICAgW0NBTExPVVRfU1RPUF0gPSAiU1RPUCIKK307CisKK3R5cGVkZWYgc3RydWN0IENhbGxvdXRFdmVudEluZm8geworICAgIENhbGxvdXRFdmVudCBldmVudDsKKyAgICB1aW50MzJfdCBhZGRyZXNzOworICAgIGludCBpZmluZGV4OworfSBDYWxsb3V0RXZlbnRJbmZvOworCisjZGVmaW5lIFJBTkRPTV9ERVZJQ0UgIi9kZXYvdXJhbmRvbSIKKworI2RlZmluZSBERUJVRyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoZGVidWcpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgeDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCisKK3N0YXRpYyB2b2lkIGluaXRfcmFuZF9zZWVkKHZvaWQpIHsKKyAgICBpbnQgZmQ7CisgICAgdW5zaWduZWQgc2VlZCA9IDA7CisKKyAgICAvKiBUcnkgdG8gaW5pdGlhbGl6ZSBzZWVkIGZyb20gL2Rldi91cmFuZG9tLCB0byBtYWtlIGl0IGEgbGl0dGxlCisgICAgICogbGVzcyBwcmVkaWN0YWJsZSwgYW5kIHRvIG1ha2Ugc3VyZSB0aGF0IG11bHRpcGxlIG1hY2hpbmVzCisgICAgICogYm9vdGVkIGF0IHRoZSBzYW1lIHRpbWUgY2hvb3NlIGRpZmZlcmVudCByYW5kb20gc2VlZHMuICAqLworICAgIGlmICgoZmQgPSBvcGVuKFJBTkRPTV9ERVZJQ0UsIE9fUkRPTkxZKSkgPj0gMCkgeworICAgICAgICByZWFkKGZkLCAmc2VlZCwgc2l6ZW9mKHNlZWQpKTsKKyAgICAgICAgY2xvc2UoZmQpOworICAgIH0KKworICAgIC8qIElmIHRoZSBpbml0aWFsaXphdGlvbiBmYWlsZWQgYnkgc29tZSByZWFzb24sIHdlIGFkZCB0aGUgdGltZSB0byB0aGUgc2VlZCAqLworICAgIHNlZWQgXj0gKHVuc2lnbmVkKSB0aW1lKE5VTEwpOworCisgICAgc3JhbmQoc2VlZCk7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBwaWNrX2FkZHIodWludDMyX3Qgb2xkX2FkZHIpIHsKKyAgICB1aW50MzJfdCBhZGRyOworCisgICAgZG8geworICAgICAgICB1bnNpZ25lZCByID0gKHVuc2lnbmVkKSByYW5kKCk7CisKKyAgICAgICAgLyogUmVkdWNlIHRvIDE2IGJpdHMgKi8KKyAgICAgICAgd2hpbGUgKHIgPiAweEZGRkYpCisgICAgICAgICAgICByID0gKHIgPj4gMTYpIF4gKHIgJiAweEZGRkYpOworCisgICAgICAgIGFkZHIgPSBodG9ubChJUFY0TExfTkVUV09SSyB8ICh1aW50MzJfdCkgcik7CisKKyAgICB9IHdoaWxlIChhZGRyID09IG9sZF9hZGRyIHx8ICFpc19sbF9hZGRyZXNzKGFkZHIpKTsKKworICAgIHJldHVybiBhZGRyOworfQorCitzdGF0aWMgaW50IGxvYWRfYWRkcmVzcyhjb25zdCBjaGFyICpmbiwgdWludDMyX3QgKmFkZHIpIHsKKyAgICBGSUxFICpmOworICAgIHVuc2lnbmVkIGEsIGIsIGMsIGQ7CisKKyAgICBhc3NlcnQoZm4pOworICAgIGFzc2VydChhZGRyKTsKKworICAgIGlmICghKGYgPSBmb3BlbihmbiwgInIiKSkpIHsKKworICAgICAgICBpZiAoZXJybm8gPT0gRU5PRU5UKSB7CisgICAgICAgICAgICAqYWRkciA9IDA7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIGRhZW1vbl9sb2coTE9HX0VSUiwgImZvcGVuKCkgZmFpbGVkOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBpZiAoZnNjYW5mKGYsICIldS4ldS4ldS4ldVxuIiwgJmEsICZiLCAmYywgJmQpICE9IDQpIHsKKyAgICAgICAgZGFlbW9uX2xvZyhMT0dfRVJSLCAiUGFyc2UgZmFpbHVyZSIpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgZmNsb3NlKGYpOworCisgICAgKmFkZHIgPSBodG9ubCgoYSA8PCAyNCkgfCAoYiA8PCAxNikgfCAoYyA8PCA4KSB8IGQpOworICAgIHJldHVybiAwOworCitmYWlsOgorICAgIGlmIChmKQorICAgICAgICBmY2xvc2UoZik7CisKKyAgICByZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgc2F2ZV9hZGRyZXNzKGNvbnN0IGNoYXIgKmZuLCB1aW50MzJfdCBhZGRyKSB7CisgICAgRklMRSAqZjsKKyAgICBjaGFyIGJ1ZlszMl07CisgICAgbW9kZV90IHU7CisKKyAgICBhc3NlcnQoZm4pOworCisgICAgdSA9IHVtYXNrKDAwMzMpOworICAgIGlmICghKGYgPSBmb3BlbihmbiwgInciKSkpIHsKKyAgICAgICAgZGFlbW9uX2xvZyhMT0dfRVJSLCAiZm9wZW4oKSBmYWlsZWQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKyAgICB1bWFzayh1KTsKKworICAgIGZwcmludGYoZiwgIiVzXG4iLCBpbmV0X250b3AoQUZfSU5FVCwgJmFkZHIsIGJ1Ziwgc2l6ZW9mIChidWYpKSk7CisgICAgZmNsb3NlKGYpOworCisgICAgcmV0dXJuIDA7CisKK2ZhaWw6CisgICAgaWYgKGYpCisgICAgICAgIGZjbG9zZShmKTsKKworICAgIHVtYXNrKHUpOworCisgICAgcmV0dXJuIC0xOworfQorCisvKgorICogQWxsb2NhdGUgYSBidWZmZXIgd2l0aCB0d28gcG9pbnRlcnMgaW4gZnJvbnQsIG9uZSBvZiB3aGljaCBpcworICogZ3VhcmFudGVlZCB0byBwb2ludCBFVEhFUl9IRFJfU0laRSBieXRlcyBpbnRvIGl0LgorICovCitzdGF0aWMgQXJwUGFja2V0KiBwYWNrZXRfbmV3KHNpemVfdCBwYWNrZXRfbGVuKSB7CisgICAgQXJwUGFja2V0ICpwOworICAgIHVpbnQ4X3QgKmI7CisKKyAgICBhc3NlcnQocGFja2V0X2xlbiA+IDApOworCisjaWZkZWYgX19saW51eF9fCisgICAgYiA9IGF2YWhpX25ldzAodWludDhfdCwgc2l6ZW9mKHN0cnVjdCBBcnBQYWNrZXQpICsgcGFja2V0X2xlbik7CisgICAgcCA9IChBcnBQYWNrZXQqKSBiOworICAgIHAtPmV0aGVyX2hlYWRlciA9IE5VTEw7CisgICAgcC0+ZXRoZXJfcGF5bG9hZCA9IGIgKyBzaXplb2Yoc3RydWN0IEFycFBhY2tldCk7CisKKyNlbHNlCisgICAgYiA9IGF2YWhpX25ldzAodWludDhfdCwgc2l6ZW9mKHN0cnVjdCBBcnBQYWNrZXQpICsgRVRIRVJfSERSX1NJWkUgKyBwYWNrZXRfbGVuKTsKKyAgICBwID0gKEFycFBhY2tldCopIGI7CisgICAgcC0+ZXRoZXJfaGVhZGVyID0gYiArIHNpemVvZihzdHJ1Y3QgQXJwUGFja2V0KTsKKyAgICBwLT5ldGhlcl9wYXlsb2FkID0gYiArIHNpemVvZihzdHJ1Y3QgQXJwUGFja2V0KSArIEVUSEVSX0hEUl9TSVpFOworI2VuZGlmCisKKyAgICByZXR1cm4gcDsKK30KKworc3RhdGljIEFycFBhY2tldCogcGFja2V0X25ld193aXRoX2luZm8oY29uc3QgQXJwUGFja2V0SW5mbyAqaW5mbywgc2l6ZV90ICpwYWNrZXRfbGVuKSB7CisgICAgQXJwUGFja2V0ICpwID0gTlVMTDsKKyAgICB1aW50OF90ICpyOworCisgICAgYXNzZXJ0KGluZm8pOworICAgIGFzc2VydChpbmZvLT5vcGVyYXRpb24gPT0gQVJQX1JFUVVFU1QgfHwgaW5mby0+b3BlcmF0aW9uID09IEFSUF9SRVNQT05TRSk7CisgICAgYXNzZXJ0KHBhY2tldF9sZW4gIT0gTlVMTCk7CisKKyAgICAqcGFja2V0X2xlbiA9IEFSUF9QQUNLRVRfU0laRTsKKyAgICBwID0gcGFja2V0X25ldygqcGFja2V0X2xlbik7CisgICAgciA9IHAtPmV0aGVyX3BheWxvYWQ7CisKKyAgICByWzFdID0gMTsgLyogSFRZUEUgKi8KKyAgICByWzJdID0gODsgLyogUFRZUEUgKi8KKyAgICByWzRdID0gRVRIRVJfQUREUkxFTjsgLyogSExFTiAqLworICAgIHJbNV0gPSA0OyAvKiBQTEVOICovCisgICAgcls3XSA9ICh1aW50OF90KSBpbmZvLT5vcGVyYXRpb247CisKKyAgICBtZW1jcHkocis4LCBpbmZvLT5zZW5kZXJfaHdfYWRkcmVzcywgRVRIRVJfQUREUkxFTik7CisgICAgbWVtY3B5KHIrMTQsICZpbmZvLT5zZW5kZXJfaXBfYWRkcmVzcywgNCk7CisgICAgbWVtY3B5KHIrMTgsIGluZm8tPnRhcmdldF9od19hZGRyZXNzLCBFVEhFUl9BRERSTEVOKTsKKyAgICBtZW1jcHkocisyNCwgJmluZm8tPnRhcmdldF9pcF9hZGRyZXNzLCA0KTsKKworICAgIHJldHVybiBwOworfQorCitzdGF0aWMgQXJwUGFja2V0ICpwYWNrZXRfbmV3X3Byb2JlKHVpbnQzMl90IGlwX2FkZHJlc3MsIGNvbnN0IHVpbnQ4X3QqaHdfYWRkcmVzcywgc2l6ZV90ICpwYWNrZXRfbGVuKSB7CisgICAgQXJwUGFja2V0SW5mbyBpbmZvOworCisgICAgbWVtc2V0KCZpbmZvLCAwLCBzaXplb2YoaW5mbykpOworICAgIGluZm8ub3BlcmF0aW9uID0gQVJQX1JFUVVFU1Q7CisgICAgbWVtY3B5KGluZm8uc2VuZGVyX2h3X2FkZHJlc3MsIGh3X2FkZHJlc3MsIEVUSEVSX0FERFJMRU4pOworICAgIGluZm8udGFyZ2V0X2lwX2FkZHJlc3MgPSBpcF9hZGRyZXNzOworCisgICAgcmV0dXJuIHBhY2tldF9uZXdfd2l0aF9pbmZvKCZpbmZvLCBwYWNrZXRfbGVuKTsKK30KKworc3RhdGljIEFycFBhY2tldCAqcGFja2V0X25ld19hbm5vdW5jZW1lbnQodWludDMyX3QgaXBfYWRkcmVzcywgY29uc3QgdWludDhfdCogaHdfYWRkcmVzcywgc2l6ZV90ICpwYWNrZXRfbGVuKSB7CisgICAgQXJwUGFja2V0SW5mbyBpbmZvOworCisgICAgbWVtc2V0KCZpbmZvLCAwLCBzaXplb2YoaW5mbykpOworICAgIGluZm8ub3BlcmF0aW9uID0gQVJQX1JFUVVFU1Q7CisgICAgbWVtY3B5KGluZm8uc2VuZGVyX2h3X2FkZHJlc3MsIGh3X2FkZHJlc3MsIEVUSEVSX0FERFJMRU4pOworICAgIGluZm8udGFyZ2V0X2lwX2FkZHJlc3MgPSBpcF9hZGRyZXNzOworICAgIGluZm8uc2VuZGVyX2lwX2FkZHJlc3MgPSBpcF9hZGRyZXNzOworCisgICAgcmV0dXJuIHBhY2tldF9uZXdfd2l0aF9pbmZvKCZpbmZvLCBwYWNrZXRfbGVuKTsKK30KKworc3RhdGljIGludCBwYWNrZXRfcGFyc2UoY29uc3QgQXJwUGFja2V0ICpwYWNrZXQsIHNpemVfdCBwYWNrZXRfbGVuLCBBcnBQYWNrZXRJbmZvICppbmZvKSB7CisgICAgY29uc3QgdWludDhfdCAqcDsKKworICAgIGFzc2VydChwYWNrZXQpOworICAgIHAgPSAodWludDhfdCAqKXBhY2tldC0+ZXRoZXJfcGF5bG9hZDsKKyAgICBhc3NlcnQocCk7CisKKyAgICBpZiAocGFja2V0X2xlbiA8IEFSUF9QQUNLRVRfU0laRSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgLyogQ2hlY2sgSFRZUEUgYW5kIFBUWVBFICovCisgICAgaWYgKHBbMF0gIT0gMCB8fCBwWzFdICE9IDEgfHwgcFsyXSAhPSA4IHx8IHBbM10gIT0gMCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgLyogQ2hlY2sgSExFTiwgUExFTiwgT1BFUkFUSU9OICovCisgICAgaWYgKHBbNF0gIT0gRVRIRVJfQUREUkxFTiB8fCBwWzVdICE9IDQgfHwgcFs2XSAhPSAwIHx8IChwWzddICE9IDEgJiYgcFs3XSAhPSAyKSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaW5mby0+b3BlcmF0aW9uID0gcFs3XTsKKyAgICBtZW1jcHkoaW5mby0+c2VuZGVyX2h3X2FkZHJlc3MsIHArOCwgRVRIRVJfQUREUkxFTik7CisgICAgbWVtY3B5KCZpbmZvLT5zZW5kZXJfaXBfYWRkcmVzcywgcCsxNCwgNCk7CisgICAgbWVtY3B5KGluZm8tPnRhcmdldF9od19hZGRyZXNzLCBwKzE4LCBFVEhFUl9BRERSTEVOKTsKKyAgICBtZW1jcHkoJmluZm8tPnRhcmdldF9pcF9hZGRyZXNzLCBwKzI0LCA0KTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZXRfc3RhdGUoU3RhdGUgc3QsIGludCByZXNldF9jb3VudGVyLCB1aW50MzJfdCBhZGRyZXNzKSB7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHN0YXRlX3RhYmxlW10gPSB7CisgICAgICAgIFtTVEFURV9TVEFSVF0gPSAiU1RBUlQiLAorICAgICAgICBbU1RBVEVfV0FJVElOR19QUk9CRV0gPSAiV0FJVElOR19QUk9CRSIsCisgICAgICAgIFtTVEFURV9QUk9CSU5HXSA9ICJQUk9CSU5HIiwKKyAgICAgICAgW1NUQVRFX1dBSVRJTkdfQU5OT1VOQ0VdID0gIldBSVRJTkdfQU5OT1VOQ0UiLAorICAgICAgICBbU1RBVEVfQU5OT1VOQ0lOR10gPSAiQU5OT1VOQ0lORyIsCisgICAgICAgIFtTVEFURV9SVU5OSU5HXSA9ICJSVU5OSU5HIiwKKyAgICAgICAgW1NUQVRFX1NMRUVQSU5HXSA9ICJTTEVFUElORyIKKyAgICB9OworICAgIGNoYXIgYnVmWzY0XTsKKworICAgIGFzc2VydChzdCA8IFNUQVRFX01BWCk7CisKKyAgICBpZiAoc3QgPT0gc3RhdGUgJiYgIXJlc2V0X2NvdW50ZXIpIHsKKyAgICAgICAgbl9pdGVyYXRpb24rKzsKKyAgICAgICAgREVCVUcoZGFlbW9uX2xvZyhMT0dfREVCVUcsICJTdGF0ZSBpdGVyYXRpb24gJXMtJWkiLCBzdGF0ZV90YWJsZVtzdGF0ZV0sIG5faXRlcmF0aW9uKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgREVCVUcoZGFlbW9uX2xvZyhMT0dfREVCVUcsICJTdGF0ZSB0cmFuc2l0aW9uICVzLSVpIC0+ICVzLTAiLCBzdGF0ZV90YWJsZVtzdGF0ZV0sIG5faXRlcmF0aW9uLCBzdGF0ZV90YWJsZVtzdF0pKTsKKyAgICAgICAgc3RhdGUgPSBzdDsKKyAgICAgICAgbl9pdGVyYXRpb24gPSAwOworICAgIH0KKworICAgIGlmIChzdGF0ZSA9PSBTVEFURV9TTEVFUElORykKKyAgICAgICAgYXZhaGlfc2V0X3Byb2NfdGl0bGUoYXJndjAsICIlczogWyVzXSBzbGVlcGluZyIsIGFyZ3YwLCBpbnRlcmZhY2VfbmFtZSk7CisgICAgZWxzZSBpZiAoc3RhdGUgPT0gU1RBVEVfQU5OT1VOQ0lORykKKyAgICAgICAgYXZhaGlfc2V0X3Byb2NfdGl0bGUoYXJndjAsICIlczogWyVzXSBhbm5vdW5jaW5nICVzIiwgYXJndjAsIGludGVyZmFjZV9uYW1lLCBpbmV0X250b3AoQUZfSU5FVCwgJmFkZHJlc3MsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKTsKKyAgICBlbHNlIGlmIChzdGF0ZSA9PSBTVEFURV9SVU5OSU5HKQorICAgICAgICBhdmFoaV9zZXRfcHJvY190aXRsZShhcmd2MCwgIiVzOiBbJXNdIGJvdW5kICVzIiwgYXJndjAsIGludGVyZmFjZV9uYW1lLCBpbmV0X250b3AoQUZfSU5FVCwgJmFkZHJlc3MsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKTsKKyAgICBlbHNlCisgICAgICAgIGF2YWhpX3NldF9wcm9jX3RpdGxlKGFyZ3YwLCAiJXM6IFslc10gcHJvYmluZyAlcyIsIGFyZ3YwLCBpbnRlcmZhY2VfbmFtZSwgaW5ldF9udG9wKEFGX0lORVQsICZhZGRyZXNzLCBidWYsIHNpemVvZihidWYpKSk7Cit9CisKK3N0YXRpYyBpbnQgaW50ZXJmYWNlX3VwKGludCBpZmFjZSkgeworICAgIGludCBmZCA9IC0xOworICAgIHN0cnVjdCBpZnJlcSBpZnJlcTsKKworICAgIGlmICgoZmQgPSBzb2NrZXQoUEZfSU5FVCwgU09DS19ER1JBTSwgMCkpIDwgMCkgeworICAgICAgICBkYWVtb25fbG9nKExPR19FUlIsICJzb2NrZXQoKSBmYWlsZWQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIG1lbXNldCgmaWZyZXEsIDAsIHNpemVvZihpZnJlcSkpOworICAgIGlmICghaWZfaW5kZXh0b25hbWUoaWZhY2UsIGlmcmVxLmlmcl9uYW1lKSkgeworICAgICAgICBkYWVtb25fbG9nKExPR19FUlIsICJpZl9pbmRleHRvbmFtZSgpIGZhaWxlZDogJXMiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKGlvY3RsKGZkLCBTSU9DR0lGRkxBR1MsICZpZnJlcSkgPCAwKSB7CisgICAgICAgIGRhZW1vbl9sb2coTE9HX0VSUiwgIlNJT0NHSUZGTEFHUyBmYWlsZWQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGlmcmVxLmlmcl9mbGFncyB8PSBJRkZfVVA7CisKKyAgICBpZiAoaW9jdGwoZmQsIFNJT0NTSUZGTEFHUywgJmlmcmVxKSA8IDApIHsKKyAgICAgICAgZGFlbW9uX2xvZyhMT0dfRVJSLCAiU0lPQ1NJRkZMQUdTIGZhaWxlZDogJXMiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgY2xvc2UoZmQpOworCisgICAgcmV0dXJuIDA7CisKK2ZhaWw6CisgICAgaWYgKGZkID49IDApCisgICAgICAgIGNsb3NlKGZkKTsKKworICAgIHJldHVybiAtMTsKK30KKworI2lmZGVmIF9fbGludXhfXworCisvKiBMaW51eCAncGFja2V0IHNvY2tldCcgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gKi8KKworc3RhdGljIGludCBvcGVuX3NvY2tldChpbnQgaWZhY2UsIHVpbnQ4X3QgKmh3X2FkZHJlc3MpIHsKKyAgICBpbnQgZmQgPSAtMTsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfbGwgc2E7CisgICAgc29ja2xlbl90IHNhX2xlbjsKKworICAgIGlmIChpbnRlcmZhY2VfdXAoaWZhY2UpIDwgMCkKKyAgICAgICAgZ290byBmYWlsOworCisgICAgaWYgKChmZCA9IHNvY2tldChQRl9QQUNLRVQsIFNPQ0tfREdSQU0sIDApKSA8IDApIHsKKyAgICAgICAgZGFlbW9uX2xvZyhMT0dfRVJSLCAic29ja2V0KCkgZmFpbGVkOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBtZW1zZXQoJnNhLCAwLCBzaXplb2Yoc2EpKTsKKyAgICBzYS5zbGxfZmFtaWx5ID0gQUZfUEFDS0VUOworICAgIHNhLnNsbF9wcm90b2NvbCA9IGh0b25zKEVUSF9QX0FSUCk7CisgICAgc2Euc2xsX2lmaW5kZXggPSBpZmFjZTsKKworICAgIGlmIChiaW5kKGZkLCAoc3RydWN0IHNvY2thZGRyKikgJnNhLCBzaXplb2Yoc2EpKSA8IDApIHsKKyAgICAgICAgZGFlbW9uX2xvZyhMT0dfRVJSLCAiYmluZCgpIGZhaWxlZDogJXMiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgc2FfbGVuID0gc2l6ZW9mKHNhKTsKKyAgICBpZiAoZ2V0c29ja25hbWUoZmQsIChzdHJ1Y3Qgc29ja2FkZHIqKSAmc2EsICZzYV9sZW4pIDwgMCkgeworICAgICAgICBkYWVtb25fbG9nKExPR19FUlIsICJnZXRzb2NrbmFtZSgpIGZhaWxlZDogJXMiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKHNhLnNsbF9oYWxlbiAhPSBFVEhFUl9BRERSTEVOKSB7CisgICAgICAgIGRhZW1vbl9sb2coTE9HX0VSUiwgImdldHNvY2tuYW1lKCkgcmV0dXJuZWQgaW52YWxpZCBoYXJkd2FyZSBhZGRyZXNzLiIpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgbWVtY3B5KGh3X2FkZHJlc3MsIHNhLnNsbF9hZGRyLCBFVEhFUl9BRERSTEVOKTsKKworICAgIHJldHVybiBmZDsKKworZmFpbDoKKyAgICBpZiAoZmQgPj0gMCkKKyAgICAgICAgY2xvc2UoZmQpOworCisgICAgcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IHNlbmRfcGFja2V0KGludCBmZCwgaW50IGlmYWNlLCBBcnBQYWNrZXQgKnBhY2tldCwgc2l6ZV90IHBhY2tldF9sZW4pIHsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfbGwgc2E7CisKKyAgICBhc3NlcnQoZmQgPj0gMCk7CisgICAgYXNzZXJ0KHBhY2tldCk7CisgICAgYXNzZXJ0KHBhY2tldF9sZW4gPiAwKTsKKworICAgIG1lbXNldCgmc2EsIDAsIHNpemVvZihzYSkpOworICAgIHNhLnNsbF9mYW1pbHkgPSBBRl9QQUNLRVQ7CisgICAgc2Euc2xsX3Byb3RvY29sID0gaHRvbnMoRVRIX1BfQVJQKTsKKyAgICBzYS5zbGxfaWZpbmRleCA9IGlmYWNlOworICAgIHNhLnNsbF9oYWxlbiA9IEVUSEVSX0FERFJMRU47CisgICAgbWVtc2V0KHNhLnNsbF9hZGRyLCAweEZGLCBFVEhFUl9BRERSTEVOKTsKKworICAgIGlmIChzZW5kdG8oZmQsIHBhY2tldC0+ZXRoZXJfcGF5bG9hZCwgcGFja2V0X2xlbiwgMCwgKHN0cnVjdCBzb2NrYWRkciopICZzYSwgc2l6ZW9mKHNhKSkgPCAwKSB7CisgICAgICAgIGRhZW1vbl9sb2coTE9HX0VSUiwgInNlbmR0bygpIGZhaWxlZDogJXMiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVjdl9wYWNrZXQoaW50IGZkLCBBcnBQYWNrZXQgKipwYWNrZXQsIHNpemVfdCAqcGFja2V0X2xlbikgeworICAgIGludCBzOworICAgIHN0cnVjdCBzb2NrYWRkcl9sbCBzYTsKKyAgICBzb2NrbGVuX3Qgc2FfbGVuOworICAgIHNzaXplX3QgcjsKKworICAgIGFzc2VydChmZCA+PSAwKTsKKyAgICBhc3NlcnQocGFja2V0KTsKKyAgICBhc3NlcnQocGFja2V0X2xlbik7CisKKyAgICAqcGFja2V0ID0gTlVMTDsKKworICAgIGlmIChpb2N0bChmZCwgRklPTlJFQUQsICZzKSA8IDApIHsKKyAgICAgICAgZGFlbW9uX2xvZyhMT0dfRVJSLCAiRklPTlJFQUQgZmFpbGVkOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBpZiAocyA8PSAwKQorICAgICAgICBzID0gNDA5NjsKKworICAgICpwYWNrZXQgPSBwYWNrZXRfbmV3KHMpOworCisgICAgc2FfbGVuID0gc2l6ZW9mKHNhKTsKKyAgICBpZiAoKHIgPSByZWN2ZnJvbShmZCwgKCpwYWNrZXQpLT5ldGhlcl9wYXlsb2FkLCBzLCAwLCAoc3RydWN0IHNvY2thZGRyKikgJnNhLCAmc2FfbGVuKSkgPCAwKSB7CisgICAgICAgIGRhZW1vbl9sb2coTE9HX0VSUiwgInJlY3Zmcm9tKCkgZmFpbGVkOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICAqcGFja2V0X2xlbiA9IChzaXplX3QpIHI7CisKKyAgICByZXR1cm4gMDsKKworZmFpbDoKKyAgICBpZiAoKnBhY2tldCkgeworICAgICAgICBhdmFoaV9mcmVlKCpwYWNrZXQpOworICAgICAgICAqcGFja2V0ID0gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisKK3N0YXRpYyB2b2lkIGNsb3NlX3NvY2tldChpbnQgZmQpIHsKKyAgICBjbG9zZShmZCk7Cit9CisKKyNlbHNlIC8qICFfX2xpbnV4X18gKi8KKy8qIFBDQVAtYmFzZWQgaW1wbGVtZW50YXRpb24gKi8KKworc3RhdGljIHBjYXBfdCAqX19wcDsKK3N0YXRpYyBjaGFyIF9fcGNhcF9lcnJidWZbUENBUF9FUlJCVUZfU0laRV07CitzdGF0aWMgdWludDhfdCBfX2xsYWRkcltFVEhFUl9BRERSTEVOXTsKKworI2lmbmRlZiBlbGVtZW50c29mCisjZGVmaW5lIGVsZW1lbnRzb2YoYXJyYXkpICAgICAgIChzaXplb2YoYXJyYXkpL3NpemVvZihhcnJheVswXSkpCisjZW5kaWYKKworc3RhdGljIGludCBfX2dldF9ldGhlcl9hZGRyKGludCBpZmluZGV4LCB1X2NoYXIgKmxsYWRkcikgeworICAgIGludCBtaWJbNl07CisgICAgY2hhciAqYnVmOworICAgIHN0cnVjdCBpZl9tc2doZHIgKmlmbTsKKyAgICBjaGFyICpsaW07CisgICAgY2hhciAqbmV4dDsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfZGwgKnNkbDsKKyAgICBzaXplX3QgbGVuOworCisgICAgbWliWzBdID0gQ1RMX05FVDsKKyAgICBtaWJbMV0gPSBQRl9ST1VURTsKKyAgICBtaWJbMl0gPSAwOworICAgIG1pYlszXSA9IDA7CisgICAgbWliWzRdID0gTkVUX1JUX0lGTElTVDsKKyAgICBtaWJbNV0gPSBpZmluZGV4OworCisgICAgaWYgKHN5c2N0bChtaWIsIGVsZW1lbnRzb2YobWliKSwgTlVMTCwgJmxlbiwgTlVMTCwgMCkgIT0gMCkgeworICAgICAgICBkYWVtb25fbG9nKExPR19FUlIsICJzeXNjdGwoTkVUX1JUX0lGTElTVCk6ICVzIiwKKyAgICAgICAgICAgICAgICAgICBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgYnVmID0gYXZhaGlfbWFsbG9jKGxlbik7CisgICAgaWYgKHN5c2N0bChtaWIsIGVsZW1lbnRzb2YobWliKSwgYnVmLCAmbGVuLCBOVUxMLCAwKSAhPSAwKSB7CisgICAgICAgIGRhZW1vbl9sb2coTE9HX0VSUiwgInN5c2N0bChORVRfUlRfSUZMSVNUKTogJXMiLAorICAgICAgICAgICAgICAgICAgIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIGZyZWUoYnVmKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGxpbSA9IGJ1ZiArIGxlbjsKKyAgICBmb3IgKG5leHQgPSBidWY7IG5leHQgPCBsaW07IG5leHQgKz0gaWZtLT5pZm1fbXNnbGVuKSB7CisgICAgICAgIGlmbSA9IChzdHJ1Y3QgaWZfbXNnaGRyICopbmV4dDsKKyAgICAgICAgaWYgKGlmbS0+aWZtX3R5cGUgPT0gUlRNX0lGSU5GTykgeworICAgICAgICAgICAgc2RsID0gKHN0cnVjdCBzb2NrYWRkcl9kbCAqKShpZm0gKyAxKTsKKyAgICAgICAgICAgIG1lbWNweShsbGFkZHIsIExMQUREUihzZGwpLCBFVEhFUl9BRERSTEVOKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBhdmFoaV9mcmVlKGJ1Zik7CisKKyAgICByZXR1cm4gMDsKK30KKworI2RlZmluZSBQQ0FQX1RJTUVPVVQgNTAwIC8qIDAuNXMgKi8KKworc3RhdGljIGludCBvcGVuX3NvY2tldChpbnQgaWZhY2UsIHVpbnQ4X3QgKmh3X2FkZHJlc3MpIHsKKyAgICBzdHJ1Y3QgYnBmX3Byb2dyYW0gYnBmOworICAgIGNoYXIgKmZpbHRlcjsKKyAgICBjaGFyIGlmbmFtZVtJRk5BTVNJWl07CisgICAgcGNhcF90ICpwcDsKKyAgICBpbnQgZXJyOworICAgIGludCBmZDsKKworICAgIGFzc2VydChfX3BwID09IE5VTEwpOworCisgICAgaWYgKGludGVyZmFjZV91cChpZmFjZSkgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAoX19nZXRfZXRoZXJfYWRkcihpZmFjZSwgX19sbGFkZHIpID09IC0xKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAoaWZfaW5kZXh0b25hbWUoaWZhY2UsIGlmbmFtZSkgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgLyoKKyAgICAgKiBVc2luZyBhIHRpbWVvdXQgZm9yIEJQRiBpcyBmYWlybHkgcG9ydGFibGUgYWNyb3NzIEJTRHMuIE9uIG1vc3QKKyAgICAgKiBtb2Rlcm4gdmVyc2lvbnMsIHVzaW5nIHRoZSB0aW1lb3V0L25vbmJsb2NrL3BvbGwgbWV0aG9kIHJlc3VsdHMgaW4KKyAgICAgKiBmYWlybHkgc2FuZSBiZWhhdmlvciwgd2l0aCB0aGUgdGltZW91dCBvbmx5IGNvbWluZyBpbnRvIHBsYXkgZHVyaW5nCisgICAgICogdGhlIG5leHRfZXgoKSBjYWxsIGl0c2VsZiAoc28sIGZvciB1cywgdGhhdCdzIG9ubHkgd2hlbiB0aGVyZSdzCisgICAgICogZGF0YSkuIE9uIG9sZGVyIHZlcnNpb25zLCBpdCBtYXkgcmVzdWx0IGluIGEgUENBUF9USU1FT1VUIGJ1c3ktd2FpdAorICAgICAqIG9uIHNvbWUgdmVyc2lvbnMsIHRob3VnaCwgYXMgdGhlIHBvbGwoKSBtYXkgdGVybWluYXRlIGF0IHRoZQorICAgICAqIFBDQVBfVElNRU9VVCBpbnN0ZWFkIG9mIHRoZSBwb2xsKCkgdGltZW91dC4KKyAgICAgKi8KKyAgICBwcCA9IHBjYXBfb3Blbl9saXZlKGlmbmFtZSwgMTUwMCwgMCwgUENBUF9USU1FT1VULCBfX3BjYXBfZXJyYnVmKTsKKyAgICBpZiAocHAgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gKC0xKTsKKyAgICB9CisgICAgZXJyID0gcGNhcF9zZXRfZGF0YWxpbmsocHAsIERMVF9FTjEwTUIpOworICAgIGlmIChlcnIgPT0gLTEpIHsKKyAgICAgICAgZGFlbW9uX2xvZyhMT0dfRVJSLCAicGNhcF9zZXRfZGF0YWxpbms6ICVzIiwgcGNhcF9nZXRlcnIocHApKTsKKyAgICAgICAgcGNhcF9jbG9zZShwcCk7CisgICAgICAgIHJldHVybiAoLTEpOworICAgIH0KKyAgICBlcnIgPSBwY2FwX3NldGRpcmVjdGlvbihwcCwgUENBUF9EX0lOKTsKKyAgICBpZiAoZXJyID09IC0xKSB7CisgICAgICAgIGRhZW1vbl9sb2coTE9HX0VSUiwgInBjYXBfc2V0ZGlyZWN0aW9uOiAlcyIsIHBjYXBfZ2V0ZXJyKHBwKSk7CisgICAgICAgIHBjYXBfY2xvc2UocHApOworICAgICAgICByZXR1cm4gKC0xKTsKKyAgICB9CisKKyAgICBmZCA9IHBjYXBfZ2V0X3NlbGVjdGFibGVfZmQocHApOworICAgIGlmIChmZCA9PSAtMSkgeworICAgICAgICBwY2FwX2Nsb3NlKHBwKTsKKyAgICAgICAgcmV0dXJuICgtMSk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBVc2luZyBzZXRub25ibG9jayBpcyBhIHBvcnRhYmlsaXR5IHN0b3AtZ2FwLiBVc2luZyB0aGUgdGltZW91dCBpbgorICAgICAqIGNvbWJpbmF0aW9uIHdpdGggc2V0bm9uYmxvY2sgd2lsbCBlbnN1cmUgb24gbW9zdCBCU0RzIHRoYXQgdGhlCisgICAgICogbmV4dF9leCBjYWxsIHJldHVybnMgaW4gYSB0aW1lbHkgZmFzaGlvbi4KKyAgICAgKi8KKyAgICBlcnIgPSBwY2FwX3NldG5vbmJsb2NrKHBwLCAxLCBfX3BjYXBfZXJyYnVmKTsKKyAgICBpZiAoZXJyID09IC0xKSB7CisgICAgICAgIHBjYXBfY2xvc2UocHApOworICAgICAgICByZXR1cm4gKC0xKTsKKyAgICB9CisKKyAgICBmaWx0ZXIgPSBhdmFoaV9zdHJkdXBfcHJpbnRmKCJhcnAgYW5kIChldGhlciBkc3QgZmY6ZmY6ZmY6ZmY6ZmY6ZmYgb3IgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4KSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xsYWRkclswXSwgX19sbGFkZHJbMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xsYWRkclsyXSwgX19sbGFkZHJbM10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xsYWRkcls0XSwgX19sbGFkZHJbNV0pOworICAgIERFQlVHKGRhZW1vbl9sb2coTE9HX0RFQlVHLCAiVXNpbmcgcGNhcCBmaWx0ZXIgJyVzJyIsIGZpbHRlcikpOworCisgICAgZXJyID0gcGNhcF9jb21waWxlKHBwLCAmYnBmLCBmaWx0ZXIsIDEsIDApOworICAgIGF2YWhpX2ZyZWUoZmlsdGVyKTsKKyAgICBpZiAoZXJyID09IC0xKSB7CisgICAgICAgIGRhZW1vbl9sb2coTE9HX0VSUiwgInBjYXBfY29tcGlsZTogJXMiLCBwY2FwX2dldGVycihwcCkpOworICAgICAgICBwY2FwX2Nsb3NlKHBwKTsKKyAgICAgICAgcmV0dXJuICgtMSk7CisgICAgfQorICAgIGVyciA9IHBjYXBfc2V0ZmlsdGVyKHBwLCAmYnBmKTsKKyAgICBpZiAoZXJyID09IC0xKSB7CisgICAgICAgIGRhZW1vbl9sb2coTE9HX0VSUiwgInBjYXBfc2V0ZmlsdGVyOiAlcyIsIHBjYXBfZ2V0ZXJyKHBwKSk7CisgICAgICAgIHBjYXBfY2xvc2UocHApOworICAgICAgICByZXR1cm4gKC0xKTsKKyAgICB9CisgICAgcGNhcF9mcmVlY29kZSgmYnBmKTsKKworICAgIC8qIFN0YXNoIHBjYXAtc3BlY2lmaWMgY29udGV4dCBhd2F5LiAqLworICAgIG1lbWNweShod19hZGRyZXNzLCBfX2xsYWRkciwgRVRIRVJfQUREUkxFTik7CisgICAgX19wcCA9IHBwOworCisgICAgcmV0dXJuIChmZCk7Cit9CisKK3N0YXRpYyB2b2lkIGNsb3NlX3NvY2tldChpbnQgZmQgQVZBSElfR0NDX1VOVVNFRCkgeworICAgIGFzc2VydChfX3BwICE9IE5VTEwpOworICAgIHBjYXBfY2xvc2UoX19wcCk7CisgICAgX19wcCA9IE5VTEw7Cit9CisKKy8qCisgKiBXZSB0cmljayBhdmFoaSBpbnRvIGFsbG9jYXRpbmcgc2l6ZW9mKHBhY2tldCkgKyBzaXplb2YoZXRoZXJfaGVhZGVyKSwKKyAqIGFuZCBwcmVwZW5kIHRoZSByZXF1aXJlZCBldGhlcm5ldCBoZWFkZXIgaW5mb3JtYXRpb24gYmVmb3JlIHNlbmRpbmcuCisgKi8KK3N0YXRpYyBpbnQgc2VuZF9wYWNrZXQoaW50IGZkIEFWQUhJX0dDQ19VTlVTRUQsIGludCBpZmFjZSBBVkFISV9HQ0NfVU5VU0VELCBBcnBQYWNrZXQgKnBhY2tldCwgc2l6ZV90IHBhY2tldF9sZW4pIHsKKyAgICBzdHJ1Y3QgZXRoZXJfaGVhZGVyICplaDsKKworICAgIGFzc2VydChfX3BwICE9IE5VTEwpOworICAgIGFzc2VydChwYWNrZXQgIT0gTlVMTCk7CisKKyAgICBlaCA9IChzdHJ1Y3QgZXRoZXJfaGVhZGVyICopcGFja2V0LT5ldGhlcl9oZWFkZXI7CisgICAgbWVtc2V0KGVoLT5ldGhlcl9kaG9zdCwgMHhGRiwgRVRIRVJfQUREUkxFTik7CisgICAgbWVtY3B5KGVoLT5ldGhlcl9zaG9zdCwgX19sbGFkZHIsIEVUSEVSX0FERFJMRU4pOworICAgIGVoLT5ldGhlcl90eXBlID0gaHRvbnMoMHgwODA2KTsKKworICAgIHJldHVybiAocGNhcF9pbmplY3QoX19wcCwgKHZvaWQgKillaCwgcGFja2V0X2xlbiArIHNpemVvZigqZWgpKSk7Cit9CisKK3N0YXRpYyBpbnQgcmVjdl9wYWNrZXQoaW50IGZkIEFWQUhJX0dDQ19VTlVTRUQsIEFycFBhY2tldCAqKnBhY2tldCwgc2l6ZV90ICpwYWNrZXRfbGVuKSB7CisgICAgc3RydWN0IHBjYXBfcGt0aGRyICpwaDsKKyAgICB1X2NoYXIgKnBkOworICAgIEFycFBhY2tldCAqYXA7CisgICAgaW50IGVycjsKKyAgICBpbnQgcmV0dmFsOworCisgICAgYXNzZXJ0KF9fcHAgIT0gTlVMTCk7CisgICAgYXNzZXJ0KHBhY2tldCAhPSBOVUxMKTsKKyAgICBhc3NlcnQocGFja2V0X2xlbiAhPSBOVUxMKTsKKworICAgICpwYWNrZXQgPSBOVUxMOworICAgICpwYWNrZXRfbGVuID0gMDsKKyAgICByZXR2YWwgPSAtMTsKKworICAgIGVyciA9IHBjYXBfbmV4dF9leChfX3BwLCAmcGgsIChjb25zdCB1X2NoYXIgKiopJnBkKTsKKyAgICBpZiAoZXJyID09IDEgJiYgcGgtPmNhcGxlbiA8PSBwaC0+bGVuKSB7CisgICAgICAgIGFwID0gcGFja2V0X25ldyhwaC0+Y2FwbGVuKTsKKyAgICAgICAgbWVtY3B5KGFwLT5ldGhlcl9oZWFkZXIsIHBkLCBwaC0+Y2FwbGVuKTsKKyAgICAgICAgKnBhY2tldCA9IGFwOworICAgICAgICAqcGFja2V0X2xlbiA9IChwaC0+Y2FwbGVuIC0gc2l6ZW9mKHN0cnVjdCBldGhlcl9oZWFkZXIpKTsKKyAgICAgICAgcmV0dmFsID0gMDsKKyAgICB9IGVsc2UgaWYgKGVyciA+PSAwKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIGVyciA9PSAxOiBKdXN0IGRyb3AgYm9ndXMgcGFja2V0cyAoPjE1MDAgZm9yIGFuIGFycCBwYWNrZXQhPykKKyAgICAgICAgICogb24gdGhlIGZsb29yLgorICAgICAgICAgKgorICAgICAgICAgKiBlcnIgPT0gMDogV2UgbWlnaHQgaGF2ZSBoYWQgdHJhZmZpYyBvbiB0aGUgcGNhcCBmZCB0aGF0CisgICAgICAgICAqIGRpZG4ndCBtYXRjaCB0aGUgZmlsdGVyLCBpbiB3aGljaCBjYXNlIHdlJ2xsIGdldCAwIHBhY2tldHMuCisgICAgICAgICAqLworICAgICAgICByZXR2YWwgPSAwOworICAgIH0gZWxzZQorICAgICAgICBkYWVtb25fbG9nKExPR19FUlIsICJwY2FwX25leHRfZXgoJWQpOiAlcyIsCisgICAgICAgICAgICAgICAgICAgZXJyLCBwY2FwX2dldGVycihfX3BwKSk7CisKKyAgICByZXR1cm4gKHJldHZhbCk7Cit9CisjZW5kaWYgLyogX19saW51eF9fICovCisKK2ludCBpc19sbF9hZGRyZXNzKHVpbnQzMl90IGFkZHIpIHsKKyAgICByZXR1cm4KKyAgICAgICAgKChudG9obChhZGRyKSAmIElQVjRMTF9ORVRNQVNLKSA9PSBJUFY0TExfTkVUV09SSykgJiYKKyAgICAgICAgKChudG9obChhZGRyKSAmIDB4MDAwMEZGMDApICE9IDB4MDAwMCkgJiYKKyAgICAgICAgKChudG9obChhZGRyKSAmIDB4MDAwMEZGMDApICE9IDB4RkYwMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdGltZXZhbCAqZWxhcHNlX3RpbWUoc3RydWN0IHRpbWV2YWwgKnR2LCB1bnNpZ25lZCBtc2VjLCB1bnNpZ25lZCBqaXR0ZXIpIHsKKyAgICBhc3NlcnQodHYpOworCisgICAgZ2V0dGltZW9mZGF5KHR2LCBOVUxMKTsKKworICAgIGlmIChtc2VjKQorICAgICAgICBhdmFoaV90aW1ldmFsX2FkZCh0diwgKEF2YWhpVXNlYykgbXNlYyoxMDAwKTsKKworICAgIGlmIChqaXR0ZXIpCisgICAgICAgIGF2YWhpX3RpbWV2YWxfYWRkKHR2LCAoQXZhaGlVc2VjKSAoaml0dGVyKjEwMDAuMCpyYW5kKCkvKFJBTkRfTUFYKzEuMCkpKTsKKworICAgIHJldHVybiB0djsKK30KKworc3RhdGljIEZJTEUqIGZvcmtfZGlzcGF0Y2hlcih2b2lkKSB7CisgICAgRklMRSAqcmV0OworICAgIGludCBmZHNbMl07CisgICAgcGlkX3QgcGlkOworCisgICAgaWYgKHBpcGUoZmRzKSA8IDApIHsKKyAgICAgICAgZGFlbW9uX2xvZyhMT0dfRVJSLCAicGlwZSgpIGZhaWxlZDogJXMiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKChwaWQgPSBmb3JrKCkpIDwgMCkKKyAgICAgICAgZ290byBmYWlsOworICAgIGVsc2UgaWYgKHBpZCA9PSAwKSB7CisgICAgICAgIEZJTEUgKmYgPSBOVUxMOworICAgICAgICBpbnQgciA9IDE7CisKKyAgICAgICAgLyogUGxlYXNlIG5vdGUgdGhhdCB0aGUgc2lnbmFsIHBpcGUgaXMgbm90IGNsb3NlZCBhdCB0aGlzCisgICAgICAgICAqIHBvaW50LCBzaWduYWxzIHdpbGwgdGh1cyBiZSBkaXNwYXRjaGVkIGluIHRoZSBtYWluCisgICAgICAgICAqIHByb2Nlc3MuICovCisKKyAgICAgICAgZGFlbW9uX3JldHZhbF9kb25lKCk7CisKKyAgICAgICAgYXZhaGlfc2V0X3Byb2NfdGl0bGUoYXJndjAsICIlczogWyVzXSBjYWxsb3V0IGRpc3BhdGNoZXIiLCBhcmd2MCwgaW50ZXJmYWNlX25hbWUpOworCisgICAgICAgIGNsb3NlKGZkc1sxXSk7CisKKyAgICAgICAgaWYgKCEoZiA9IGZkb3BlbihmZHNbMF0sICJyIikpKSB7CisgICAgICAgICAgICBkYWVtb25fbG9nKExPR19FUlIsICJmZG9wZW4oKSBmYWlsZWQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgIGdvdG8gZGlzcGF0Y2hlcl9mYWlsOworICAgICAgICB9CisKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgQ2FsbG91dEV2ZW50SW5mbyBpbmZvOworICAgICAgICAgICAgY2hhciBuYW1lW0lGTkFNU0laXSwgYnVmWzY0XTsKKyAgICAgICAgICAgIGludCBrOworCisgICAgICAgICAgICBpZiAoZnJlYWQoJmluZm8sIHNpemVvZihpbmZvKSwgMSwgZikgIT0gMSkgeworICAgICAgICAgICAgICAgIGlmIChmZW9mKGYpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRhZW1vbl9sb2coTE9HX0VSUiwgImZyZWFkKCkgZmFpbGVkOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICAgICAgZ290byBkaXNwYXRjaGVyX2ZhaWw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGFzc2VydChpbmZvLmV2ZW50IDw9IENBTExPVVRfTUFYKTsKKworICAgICAgICAgICAgaWYgKCFpZl9pbmRleHRvbmFtZShpbmZvLmlmaW5kZXgsIG5hbWUpKSB7CisgICAgICAgICAgICAgICAgZGFlbW9uX2xvZyhMT0dfRVJSLCAiaWZfaW5kZXh0b25hbWUoKSBmYWlsZWQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGRhZW1vbl9leGVjKCIvIiwgJmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uX3NjcmlwdCwgYWN0aW9uX3NjcmlwdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsb3V0X2V2ZW50X3RhYmxlW2luZm8uZXZlbnRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5ldF9udG9wKEFGX0lORVQsICZpbmZvLmFkZHJlc3MsIGJ1Ziwgc2l6ZW9mKGJ1ZikpLCBOVUxMKSA8IDApIHsKKworICAgICAgICAgICAgICAgIGRhZW1vbl9sb2coTE9HX0VSUiwgIkZhaWxlZCB0byBydW4gc2NyaXB0OiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChrICE9IDApCisgICAgICAgICAgICAgICAgZGFlbW9uX2xvZyhMT0dfV0FSTklORywgIlNjcmlwdCBleGVjdXRpb24gZmFpbGVkIHdpdGggcmV0dXJuIHZhbHVlICVpIiwgayk7CisgICAgICAgIH0KKworICAgICAgICByID0gMDsKKworICAgIGRpc3BhdGNoZXJfZmFpbDoKKworICAgICAgICBpZiAoZikKKyAgICAgICAgICAgIGZjbG9zZShmKTsKKworI2lmZGVmIEhBVkVfQ0hST09UCisgICAgICAgIC8qIElmIHRoZSBtYWluIHByb2Nlc3MgaXMgdHJhcHBlZCBpbnNpZGUgYSBjaHJvb3QoKSB3ZSBoYXZlIHRvCisgICAgICAgICAqIHJlbW92ZSB0aGUgUElEIGZpbGUgZm9yIGl0ICovCisKKyAgICAgICAgaWYgKCFub19jaHJvb3QgJiYgd3JvdGVfcGlkX2ZpbGUpCisgICAgICAgICAgICBkYWVtb25fcGlkX2ZpbGVfcmVtb3ZlKCk7CisjZW5kaWYKKworICAgICAgICBfZXhpdChyKTsKKyAgICB9CisKKyAgICAvKiBwYXJlbnQgKi8KKworICAgIGNsb3NlKGZkc1swXSk7CisgICAgZmRzWzBdID0gLTE7CisKKyAgICBpZiAoIShyZXQgPSBmZG9wZW4oZmRzWzFdLCAidyIpKSkgeworICAgICAgICBkYWVtb25fbG9nKExPR19FUlIsICJmZG9wZW4oKSBmYWlsZWQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIHJldHVybiByZXQ7CisKK2ZhaWw6CisgICAgaWYgKGZkc1swXSA+PSAwKQorICAgICAgICBjbG9zZShmZHNbMF0pOworICAgIGlmIChmZHNbMV0gPj0gMCkKKyAgICAgICAgY2xvc2UoZmRzWzFdKTsKKworICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IGRvX2NhbGxvdXQoRklMRSAqZiwgQ2FsbG91dEV2ZW50IGV2ZW50LCBpbnQgaWZhY2UsIHVpbnQzMl90IGFkZHIpIHsKKyAgICBDYWxsb3V0RXZlbnRJbmZvIGluZm87CisgICAgY2hhciBidWZbNjRdLCBpZm5hbWVbSUZOQU1TSVpdOworCisgICAgZGFlbW9uX2xvZyhMT0dfSU5GTywgIkNhbGxvdXQgJXMsIGFkZHJlc3MgJXMgb24gaW50ZXJmYWNlICVzIiwKKyAgICAgICAgICAgICAgIGNhbGxvdXRfZXZlbnRfdGFibGVbZXZlbnRdLAorICAgICAgICAgICAgICAgaW5ldF9udG9wKEFGX0lORVQsICZhZGRyLCBidWYsIHNpemVvZihidWYpKSwKKyAgICAgICAgICAgICAgIGlmX2luZGV4dG9uYW1lKGlmYWNlLCBpZm5hbWUpKTsKKworICAgIGluZm8uZXZlbnQgPSBldmVudDsKKyAgICBpbmZvLmlmaW5kZXggPSBpZmFjZTsKKyAgICBpbmZvLmFkZHJlc3MgPSBhZGRyOworCisgICAgaWYgKGZ3cml0ZSgmaW5mbywgc2l6ZW9mKGluZm8pLCAxLCBmKSAhPSAxIHx8IGZmbHVzaChmKSAhPSAwKSB7CisgICAgICAgIGRhZW1vbl9sb2coTE9HX0VSUiwgIkZhaWxlZCB0byB3cml0ZSBjYWxsb3V0IGV2ZW50OiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworI2RlZmluZSBzZXRfZW52KGtleSwgdmFsdWUpIHB1dGVudihhdmFoaV9zdHJkdXBfcHJpbnRmKCIlcz0lcyIsIChrZXkpLCAodmFsdWUpKSkKKworc3RhdGljIGludCBkcm9wX3ByaXZzKHZvaWQpIHsKKyAgICBzdHJ1Y3QgcGFzc3dkICpwdzsKKyAgICBzdHJ1Y3QgZ3JvdXAgKiBncjsKKyAgICBpbnQgcjsKKyAgICBtb2RlX3QgdTsKKworICAgIHB3ID0gTlVMTDsKKyAgICBnciA9IE5VTEw7CisKKyAgICAvKiBHZXQgdXNlci9ncm91cCBJRCAqLworCisgICAgaWYgKCFub19kcm9wX3Jvb3QpIHsKKworICAgICAgICBpZiAoIShwdyA9IGdldHB3bmFtKEFWQUhJX0FVVE9JUERfVVNFUikpKSB7CisgICAgICAgICAgICBkYWVtb25fbG9nKExPR19FUlIsICJGYWlsZWQgdG8gZmluZCB1c2VyICciQVZBSElfQVVUT0lQRF9VU0VSIicuIik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIShnciA9IGdldGdybmFtKEFWQUhJX0FVVE9JUERfR1JPVVApKSkgeworICAgICAgICAgICAgZGFlbW9uX2xvZyhMT0dfRVJSLCAiRmFpbGVkIHRvIGZpbmQgZ3JvdXAgJyJBVkFISV9BVVRPSVBEX0dST1VQIicuIik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBkYWVtb25fbG9nKExPR19JTkZPLCAiRm91bmQgdXNlciAnIkFWQUhJX0FVVE9JUERfVVNFUiInIChVSUQgJWx1KSBhbmQgZ3JvdXAgJyJBVkFISV9BVVRPSVBEX0dST1VQIicgKEdJRCAlbHUpLiIsICh1bnNpZ25lZCBsb25nKSBwdy0+cHdfdWlkLCAodW5zaWduZWQgbG9uZykgZ3ItPmdyX2dpZCk7CisgICAgfQorCisgICAgLyogQ3JlYXRlIGRpcmVjdG9yeSAqLworICAgIHUgPSB1bWFzaygwMDAwKTsKKyAgICByID0gbWtkaXIoQVZBSElfSVBEQVRBX0RJUiwgMDc1NSk7CisgICAgdW1hc2sodSk7CisKKyAgICBpZiAociA8IDAgJiYgZXJybm8gIT0gRUVYSVNUKSB7CisgICAgICAgIGRhZW1vbl9sb2coTE9HX0VSUiwgIm1rZGlyKFwiIkFWQUhJX0lQREFUQV9ESVIiXCIpOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiBDb252ZXkgd29ya2luZyBkaXJlY3RvcnkgKi8KKworICAgIGlmICghbm9fZHJvcF9yb290KSB7CisgICAgICAgIHN0cnVjdCBzdGF0IHN0OworCisgICAgICAgIGNob3duKEFWQUhJX0lQREFUQV9ESVIsIHB3LT5wd191aWQsIGdyLT5ncl9naWQpOworCisgICAgICAgIGlmIChzdGF0KEFWQUhJX0lQREFUQV9ESVIsICZzdCkgPCAwKSB7CisgICAgICAgICAgICBkYWVtb25fbG9nKExPR19FUlIsICJzdGF0KCk6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFTX0lTRElSKHN0LnN0X21vZGUpIHx8IHN0LnN0X3VpZCAhPSBwdy0+cHdfdWlkIHx8IHN0LnN0X2dpZCAhPSBnci0+Z3JfZ2lkKSB7CisgICAgICAgICAgICBkYWVtb25fbG9nKExPR19FUlIsICJGYWlsZWQgdG8gY3JlYXRlIHJ1bnRpbWUgZGlyZWN0b3J5ICJBVkFISV9JUERBVEFfRElSIi4iKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KKworI2lmZGVmIEhBVkVfQ0hST09UCisKKyAgICBpZiAoIW5vX2Nocm9vdCkgeworICAgICAgICBpZiAoY2hyb290KEFWQUhJX0lQREFUQV9ESVIpIDwgMCkgeworICAgICAgICAgICAgZGFlbW9uX2xvZyhMT0dfRVJSLCAiRmFpbGVkIHRvIGNocm9vdCgpOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBkYWVtb25fbG9nKExPR19JTkZPLCAiU3VjY2Vzc2Z1bGx5IGNhbGxlZCBjaHJvb3QoKS4iKTsKKyAgICAgICAgY2hkaXIoIi8iKTsKKworICAgICAgICAvKiBTaW5jZSB3ZSBhcmUgbm93IHRyYXBwZWQgaW5zaWRlIGEgY2hyb290IHdlIGNhbm5vdCByZW1vdmUKKyAgICAgICAgICogdGhlIHBpZCBmaWxlIGFueW1vcmUsIHRoZSBoZWxwZXIgcHJvY2VzcyB3aWxsIGRvIHRoYXQgZm9yIHVzLiAqLworICAgICAgICB3cm90ZV9waWRfZmlsZSA9IDA7CisgICAgfQorCisjZW5kaWYKKworICAgIGlmICghbm9fZHJvcF9yb290KSB7CisKKyAgICAgICAgaWYgKGluaXRncm91cHMoQVZBSElfQVVUT0lQRF9VU0VSLCBnci0+Z3JfZ2lkKSAhPSAwKSB7CisgICAgICAgICAgICBkYWVtb25fbG9nKExPR19FUlIsICJGYWlsZWQgdG8gY2hhbmdlIGdyb3VwIGxpc3Q6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisjaWYgZGVmaW5lZChIQVZFX1NFVFJFU0dJRCkKKyAgICAgICAgciA9IHNldHJlc2dpZChnci0+Z3JfZ2lkLCBnci0+Z3JfZ2lkLCBnci0+Z3JfZ2lkKTsKKyNlbGlmIGRlZmluZWQoSEFWRV9TRVRFR0lEKQorICAgICAgICBpZiAoKHIgPSBzZXRnaWQoZ3ItPmdyX2dpZCkpID49IDApCisgICAgICAgICAgICByID0gc2V0ZWdpZChnci0+Z3JfZ2lkKTsKKyNlbGlmIGRlZmluZWQoSEFWRV9TRVRSRUdJRCkKKyAgICAgICAgciA9IHNldHJlZ2lkKGdyLT5ncl9naWQsIGdyLT5ncl9naWQpOworI2Vsc2UKKyNlcnJvciAiTm8gQVBJIHRvIGRyb3AgcHJpdmlsZWdlcyIKKyNlbmRpZgorCisgICAgICAgIGlmIChyIDwgMCkgeworICAgICAgICAgICAgZGFlbW9uX2xvZyhMT0dfRVJSLCAiRmFpbGVkIHRvIGNoYW5nZSBHSUQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisjaWYgZGVmaW5lZChIQVZFX1NFVFJFU1VJRCkKKyAgICAgICAgciA9IHNldHJlc3VpZChwdy0+cHdfdWlkLCBwdy0+cHdfdWlkLCBwdy0+cHdfdWlkKTsKKyNlbGlmIGRlZmluZWQoSEFWRV9TRVRFVUlEKQorICAgICAgICBpZiAoKHIgPSBzZXR1aWQocHctPnB3X3VpZCkpID49IDApCisgICAgICAgICAgICByID0gc2V0ZXVpZChwdy0+cHdfdWlkKTsKKyNlbGlmIGRlZmluZWQoSEFWRV9TRVRSRVVJRCkKKyAgICAgICAgciA9IHNldHJldWlkKHB3LT5wd191aWQsIHB3LT5wd191aWQpOworI2Vsc2UKKyNlcnJvciAiTm8gQVBJIHRvIGRyb3AgcHJpdmlsZWdlcyIKKyNlbmRpZgorCisgICAgICAgIGlmIChyIDwgMCkgeworICAgICAgICAgICAgZGFlbW9uX2xvZyhMT0dfRVJSLCAiRmFpbGVkIHRvIGNoYW5nZSBVSUQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIHNldF9lbnYoIlVTRVIiLCBwdy0+cHdfbmFtZSk7CisgICAgICAgIHNldF9lbnYoIkxPR05BTUUiLCBwdy0+cHdfbmFtZSk7CisgICAgICAgIHNldF9lbnYoIkhPTUUiLCBwdy0+cHdfZGlyKTsKKworICAgICAgICBkYWVtb25fbG9nKExPR19JTkZPLCAiU3VjY2Vzc2Z1bGx5IGRyb3BwZWQgcm9vdCBwcml2aWxlZ2VzLiIpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxvb3AoaW50IGlmYWNlLCB1aW50MzJfdCBhZGRyKSB7CisgICAgZW51bSB7CisgICAgICAgIEZEX0FSUCwKKyAgICAgICAgRkRfSUZBQ0UsCisgICAgICAgIEZEX1NJR05BTCwKKyAgICAgICAgRkRfTUFYCisgICAgfTsKKworICAgIGludCBmZCA9IC0xLCByZXQgPSAtMTsKKyAgICBzdHJ1Y3QgdGltZXZhbCBuZXh0X3dha2V1cDsKKyAgICBpbnQgbmV4dF93YWtldXBfdmFsaWQgPSAwOworICAgIGNoYXIgYnVmWzY0XTsKKyAgICBBcnBQYWNrZXQgKmluX3BhY2tldCA9IE5VTEw7CisgICAgc2l6ZV90IGluX3BhY2tldF9sZW4gPSAwOworICAgIEFycFBhY2tldCAqb3V0X3BhY2tldCA9IE5VTEw7CisgICAgc2l6ZV90IG91dF9wYWNrZXRfbGVuOworICAgIHVpbnQ4X3QgaHdfYWRkcmVzc1tFVEhFUl9BRERSTEVOXTsKKyAgICBzdHJ1Y3QgcG9sbGZkIHBvbGxmZHNbRkRfTUFYXTsKKyAgICBpbnQgaWZhY2VfZmQgPSAtMTsKKyAgICBFdmVudCBldmVudCA9IEVWRU5UX05VTEw7CisgICAgaW50IHJldHZhbF9zZW50ID0gIWRhZW1vbml6ZTsKKyAgICBTdGF0ZSBzdDsKKyAgICBGSUxFICpkaXNwYXRjaGVyID0gTlVMTDsKKyAgICBjaGFyICphZGRyZXNzX2ZuID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICpwOworCisgICAgZGFlbW9uX3NpZ25hbF9pbml0KFNJR0lOVCwgU0lHVEVSTSwgU0lHQ0hMRCwgU0lHSFVQLCAwKTsKKworICAgIGlmICghKGRpc3BhdGNoZXIgPSBmb3JrX2Rpc3BhdGNoZXIoKSkpCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIGlmICgoZmQgPSBvcGVuX3NvY2tldChpZmFjZSwgaHdfYWRkcmVzcykpIDwgMCkKKyAgICAgICAgZ290byBmYWlsOworCisgICAgaWYgKChpZmFjZV9mZCA9IGlmYWNlX2luaXQoaWZhY2UpKSA8IDApCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIGlmIChkcm9wX3ByaXZzKCkgPCAwKQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICBpZiAoZm9yY2VfYmluZCkKKyAgICAgICAgc3QgPSBTVEFURV9TVEFSVDsKKyAgICBlbHNlIGlmIChpZmFjZV9nZXRfaW5pdGlhbF9zdGF0ZSgmc3QpIDwgMCkKKyAgICAgICAgZ290byBmYWlsOworCisjaWZkZWYgSEFWRV9DSFJPT1QKKyAgICBpZiAoIW5vX2Nocm9vdCkKKyAgICAgICAgcCA9ICIiOworICAgIGVsc2UKKyNlbmRpZgorICAgICAgICBwID0gQVZBSElfSVBEQVRBX0RJUjsKKworICAgIGFkZHJlc3NfZm4gPSBhdmFoaV9zdHJkdXBfcHJpbnRmKAorICAgICAgICAgICAgIiVzLyUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4IiwgcCwKKyAgICAgICAgICAgIGh3X2FkZHJlc3NbMF0sIGh3X2FkZHJlc3NbMV0sCisgICAgICAgICAgICBod19hZGRyZXNzWzJdLCBod19hZGRyZXNzWzNdLAorICAgICAgICAgICAgaHdfYWRkcmVzc1s0XSwgaHdfYWRkcmVzc1s1XSk7CisKKyAgICBpZiAoIWFkZHIpCisgICAgICAgIGxvYWRfYWRkcmVzcyhhZGRyZXNzX2ZuLCAmYWRkcik7CisKKyAgICBpZiAoYWRkciAmJiAhaXNfbGxfYWRkcmVzcyhhZGRyKSkgeworICAgICAgICBkYWVtb25fbG9nKExPR19XQVJOSU5HLCAiUmVxdWVzdGVkIGFkZHJlc3MgJXMgaXMgbm90IGZyb20gSVB2NExMIHJhbmdlIDE2OS4yNTQvMTYgb3IgYSByZXNlcnZlZCBhZGRyZXNzLCBpZ25vcmluZy4iLCBpbmV0X250b3AoQUZfSU5FVCwgJmFkZHIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKTsKKyAgICAgICAgYWRkciA9IDA7CisgICAgfQorCisgICAgaWYgKCFhZGRyKSB7CisgICAgICAgIGludCBpOworICAgICAgICB1aW50MzJfdCBhID0gMTsKKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgRVRIRVJfQUREUkxFTjsgaSsrKQorICAgICAgICAgICAgYSArPSBod19hZGRyZXNzW2ldKmk7CisKKyAgICAgICAgYSA9IChhICUgMHhGRTAwKSArIDB4MDEwMDsKKworICAgICAgICBhZGRyID0gaHRvbmwoSVBWNExMX05FVFdPUksgfCAodWludDMyX3QpIGEpOworICAgIH0KKworICAgIGFzc2VydChpc19sbF9hZGRyZXNzKGFkZHIpKTsKKworICAgIHNldF9zdGF0ZShzdCwgMSwgYWRkcik7CisKKyAgICBkYWVtb25fbG9nKExPR19JTkZPLCAiU3RhcnRpbmcgd2l0aCBhZGRyZXNzICVzIiwgaW5ldF9udG9wKEFGX0lORVQsICZhZGRyLCBidWYsIHNpemVvZihidWYpKSk7CisKKyAgICBpZiAoc3RhdGUgPT0gU1RBVEVfU0xFRVBJTkcpCisgICAgICAgIGRhZW1vbl9sb2coTE9HX0lORk8sICJSb3V0YWJsZSBhZGRyZXNzIGFscmVhZHkgYXNzaWduZWQsIHNsZWVwaW5nLiIpOworCisgICAgaWYgKCFyZXR2YWxfc2VudCAmJiAoIXdhaXRfZm9yX2FkZHJlc3MgfHwgc3RhdGUgPT0gU1RBVEVfU0xFRVBJTkcpKSB7CisgICAgICAgIGRhZW1vbl9yZXR2YWxfc2VuZCgwKTsKKyAgICAgICAgcmV0dmFsX3NlbnQgPSAxOworICAgIH0KKworICAgIG1lbXNldChwb2xsZmRzLCAwLCBzaXplb2YocG9sbGZkcykpOworICAgIHBvbGxmZHNbRkRfQVJQXS5mZCA9IGZkOworICAgIHBvbGxmZHNbRkRfQVJQXS5ldmVudHMgPSBQT0xMSU47CisgICAgcG9sbGZkc1tGRF9JRkFDRV0uZmQgPSBpZmFjZV9mZDsKKyAgICBwb2xsZmRzW0ZEX0lGQUNFXS5ldmVudHMgPSBQT0xMSU47CisgICAgcG9sbGZkc1tGRF9TSUdOQUxdLmZkID0gZGFlbW9uX3NpZ25hbF9mZCgpOworICAgIHBvbGxmZHNbRkRfU0lHTkFMXS5ldmVudHMgPSBQT0xMSU47CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGludCByLCB0aW1lb3V0OworICAgICAgICBBdmFoaVVzZWMgdXNlYzsKKworICAgICAgICBpZiAoc3RhdGUgPT0gU1RBVEVfU1RBUlQpIHsKKworICAgICAgICAgICAgLyogRmlyc3QsIHdhaXQgYSByYW5kb20gdGltZSAqLworICAgICAgICAgICAgc2V0X3N0YXRlKFNUQVRFX1dBSVRJTkdfUFJPQkUsIDEsIGFkZHIpOworCisgICAgICAgICAgICBlbGFwc2VfdGltZSgmbmV4dF93YWtldXAsIDAsIFBST0JFX1dBSVQqMTAwMCk7CisgICAgICAgICAgICBuZXh0X3dha2V1cF92YWxpZCA9IDE7CisKKyAgICAgICAgfSBlbHNlIGlmICgoc3RhdGUgPT0gU1RBVEVfV0FJVElOR19QUk9CRSAmJiBldmVudCA9PSBFVkVOVF9USU1FT1VUKSB8fAorICAgICAgICAgICAgICAgICAgIChzdGF0ZSA9PSBTVEFURV9QUk9CSU5HICYmIGV2ZW50ID09IEVWRU5UX1RJTUVPVVQgJiYgbl9pdGVyYXRpb24gPCBQUk9CRV9OVU0tMikpIHsKKworICAgICAgICAgICAgLyogU2VuZCBhIHByb2JlICovCisgICAgICAgICAgICBvdXRfcGFja2V0ID0gcGFja2V0X25ld19wcm9iZShhZGRyLCBod19hZGRyZXNzLCAmb3V0X3BhY2tldF9sZW4pOworICAgICAgICAgICAgc2V0X3N0YXRlKFNUQVRFX1BST0JJTkcsIDAsIGFkZHIpOworCisgICAgICAgICAgICBlbGFwc2VfdGltZSgmbmV4dF93YWtldXAsIFBST0JFX01JTioxMDAwLCAoUFJPQkVfTUFYLVBST0JFX01JTikqMTAwMCk7CisgICAgICAgICAgICBuZXh0X3dha2V1cF92YWxpZCA9IDE7CisKKyAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSBTVEFURV9QUk9CSU5HICYmIGV2ZW50ID09IEVWRU5UX1RJTUVPVVQgJiYgbl9pdGVyYXRpb24gPj0gUFJPQkVfTlVNLTIpIHsKKworICAgICAgICAgICAgLyogU2VuZCB0aGUgbGFzdCBwcm9iZSAqLworICAgICAgICAgICAgb3V0X3BhY2tldCA9IHBhY2tldF9uZXdfcHJvYmUoYWRkciwgaHdfYWRkcmVzcywgJm91dF9wYWNrZXRfbGVuKTsKKyAgICAgICAgICAgIHNldF9zdGF0ZShTVEFURV9XQUlUSU5HX0FOTk9VTkNFLCAxLCBhZGRyKTsKKworICAgICAgICAgICAgZWxhcHNlX3RpbWUoJm5leHRfd2FrZXVwLCBBTk5PVU5DRV9XQUlUKjEwMDAsIDApOworICAgICAgICAgICAgbmV4dF93YWtldXBfdmFsaWQgPSAxOworCisgICAgICAgIH0gZWxzZSBpZiAoKHN0YXRlID09IFNUQVRFX1dBSVRJTkdfQU5OT1VOQ0UgJiYgZXZlbnQgPT0gRVZFTlRfVElNRU9VVCkgfHwKKyAgICAgICAgICAgICAgICAgICAoc3RhdGUgPT0gU1RBVEVfQU5OT1VOQ0lORyAmJiBldmVudCA9PSBFVkVOVF9USU1FT1VUICYmIG5faXRlcmF0aW9uIDwgQU5OT1VOQ0VfTlVNLTEpKSB7CisKKyAgICAgICAgICAgIC8qIFNlbmQgYW5ub3VuY2VtZW50IHBhY2tldCAqLworICAgICAgICAgICAgb3V0X3BhY2tldCA9IHBhY2tldF9uZXdfYW5ub3VuY2VtZW50KGFkZHIsIGh3X2FkZHJlc3MsICZvdXRfcGFja2V0X2xlbik7CisgICAgICAgICAgICBzZXRfc3RhdGUoU1RBVEVfQU5OT1VOQ0lORywgMCwgYWRkcik7CisKKyAgICAgICAgICAgIGVsYXBzZV90aW1lKCZuZXh0X3dha2V1cCwgQU5OT1VOQ0VfSU5URVJWQUwqMTAwMCwgMCk7CisgICAgICAgICAgICBuZXh0X3dha2V1cF92YWxpZCA9IDE7CisKKyAgICAgICAgICAgIGlmIChuX2l0ZXJhdGlvbiA9PSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKGRvX2NhbGxvdXQoZGlzcGF0Y2hlciwgQ0FMTE9VVF9CSU5ELCBpZmFjZSwgYWRkcikgPCAwKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisKKyAgICAgICAgICAgICAgICBuX2NvbmZsaWN0ID0gMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9IGVsc2UgaWYgKChzdGF0ZSA9PSBTVEFURV9BTk5PVU5DSU5HICYmIGV2ZW50ID09IEVWRU5UX1RJTUVPVVQgJiYgbl9pdGVyYXRpb24gPj0gQU5OT1VOQ0VfTlVNLTEpKSB7CisKKyAgICAgICAgICAgIGRhZW1vbl9sb2coTE9HX0lORk8sICJTdWNjZXNzZnVsbHkgY2xhaW1lZCBJUCBhZGRyZXNzICVzIiwgaW5ldF9udG9wKEFGX0lORVQsICZhZGRyLCBidWYsIHNpemVvZihidWYpKSk7CisgICAgICAgICAgICBzZXRfc3RhdGUoU1RBVEVfUlVOTklORywgMCwgYWRkcik7CisKKyAgICAgICAgICAgIG5leHRfd2FrZXVwX3ZhbGlkID0gMDsKKworICAgICAgICAgICAgc2F2ZV9hZGRyZXNzKGFkZHJlc3NfZm4sIGFkZHIpOworCisgICAgICAgICAgICBpZiAoIXJldHZhbF9zZW50KSB7CisgICAgICAgICAgICAgICAgZGFlbW9uX3JldHZhbF9zZW5kKDApOworICAgICAgICAgICAgICAgIHJldHZhbF9zZW50ID0gMTsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9IGVsc2UgaWYgKGV2ZW50ID09IEVWRU5UX1BBQ0tFVCkgeworICAgICAgICAgICAgQXJwUGFja2V0SW5mbyBpbmZvOworCisgICAgICAgICAgICBhc3NlcnQoaW5fcGFja2V0KTsKKworICAgICAgICAgICAgaWYgKHBhY2tldF9wYXJzZShpbl9wYWNrZXQsIGluX3BhY2tldF9sZW4sICZpbmZvKSA8IDApCisgICAgICAgICAgICAgICAgZGFlbW9uX2xvZyhMT0dfV0FSTklORywgIkZhaWxlZCB0byBwYXJzZSBpbmNvbWluZyBBUlAgcGFja2V0LiIpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaW50IGNvbmZsaWN0ID0gMDsKKworICAgICAgICAgICAgICAgIGlmIChpbmZvLnNlbmRlcl9pcF9hZGRyZXNzID09IGFkZHIpIHsKKworICAgICAgICAgICAgICAgICAgICBpZiAobWVtY21wKGh3X2FkZHJlc3MsIGluZm8uc2VuZGVyX2h3X2FkZHJlc3MsIEVUSEVSX0FERFJMRU4pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3JtYWwgY29uZmxpY3QgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZsaWN0ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhZW1vbl9sb2coTE9HX0lORk8sICJSZWNlaXZlZCBjb25mbGljdGluZyBub3JtYWwgQVJQIHBhY2tldC4iKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBkYWVtb25fbG9nKExPR19ERUJVRywgIlJlY2VpdmVkIEFSUCBwYWNrZXQgYmFjayBvbiBzb3VyY2UgaW50ZXJmYWNlLiBJZ25vcmluZy4iKTsKKworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT0gU1RBVEVfV0FJVElOR19QUk9CRSB8fCBzdGF0ZSA9PSBTVEFURV9QUk9CSU5HIHx8IHN0YXRlID09IFNUQVRFX1dBSVRJTkdfQU5OT1VOQ0UpIHsKKyAgICAgICAgICAgICAgICAgICAgLyogUHJvYmUgY29uZmxpY3QgKi8KKyAgICAgICAgICAgICAgICAgICAgY29uZmxpY3QgPSBpbmZvLnRhcmdldF9pcF9hZGRyZXNzID09IGFkZHIgJiYgbWVtY21wKGh3X2FkZHJlc3MsIGluZm8uc2VuZGVyX2h3X2FkZHJlc3MsIEVUSEVSX0FERFJMRU4pOworCisgICAgICAgICAgICAgICAgICAgIGlmIChjb25mbGljdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhZW1vbl9sb2coTE9HX0lORk8sICJSZWNlaXZlZCBjb25mbGljdGluZyBwcm9iZSBBUlAgcGFja2V0LiIpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChjb25mbGljdCkgeworCisgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PSBTVEFURV9SVU5OSU5HIHx8IHN0YXRlID09IFNUQVRFX0FOTk9VTkNJTkcpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG9fY2FsbG91dChkaXNwYXRjaGVyLCBDQUxMT1VUX0NPTkZMSUNULCBpZmFjZSwgYWRkcikgPCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKworICAgICAgICAgICAgICAgICAgICAvKiBQaWNrIGEgbmV3IGFkZHJlc3MgKi8KKyAgICAgICAgICAgICAgICAgICAgYWRkciA9IHBpY2tfYWRkcihhZGRyKTsKKworICAgICAgICAgICAgICAgICAgICBkYWVtb25fbG9nKExPR19JTkZPLCAiVHJ5aW5nIGFkZHJlc3MgJXMiLCBpbmV0X250b3AoQUZfSU5FVCwgJmFkZHIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKTsKKworICAgICAgICAgICAgICAgICAgICBuX2NvbmZsaWN0Kys7CisKKyAgICAgICAgICAgICAgICAgICAgc2V0X3N0YXRlKFNUQVRFX1dBSVRJTkdfUFJPQkUsIDEsIGFkZHIpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChuX2NvbmZsaWN0ID49IE1BWF9DT05GTElDVFMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhZW1vbl9sb2coTE9HX1dBUk5JTkcsICJHb3QgdG9vIG1hbnkgY29uZmxpY3RzLCByYXRlIGxpbWl0aW5nIG5ldyBwcm9iZXMuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBlbGFwc2VfdGltZSgmbmV4dF93YWtldXAsIFJBVEVfTElNSVRfSU5URVJWQUwqMTAwMCwgUFJPQkVfV0FJVCoxMDAwKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBlbGFwc2VfdGltZSgmbmV4dF93YWtldXAsIDAsIFBST0JFX1dBSVQqMTAwMCk7CisKKyAgICAgICAgICAgICAgICAgICAgbmV4dF93YWtldXBfdmFsaWQgPSAxOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBERUJVRyhkYWVtb25fbG9nKExPR19ERUJVRywgIklnbm9yaW5nIGlycmVsZXZhbnQgQVJQIHBhY2tldC4iKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfSBlbHNlIGlmIChldmVudCA9PSBFVkVOVF9ST1VUQUJMRV9BRERSX0NPTkZJR1VSRUQgJiYgIWZvcmNlX2JpbmQpIHsKKworICAgICAgICAgICAgZGFlbW9uX2xvZyhMT0dfSU5GTywgIkEgcm91dGFibGUgYWRkcmVzcyBoYXMgYmVlbiBjb25maWd1cmVkLiIpOworCisgICAgICAgICAgICBpZiAoc3RhdGUgPT0gU1RBVEVfUlVOTklORyB8fCBzdGF0ZSA9PSBTVEFURV9BTk5PVU5DSU5HKQorICAgICAgICAgICAgICAgIGlmIChkb19jYWxsb3V0KGRpc3BhdGNoZXIsIENBTExPVVRfVU5CSU5ELCBpZmFjZSwgYWRkcikgPCAwKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisKKyAgICAgICAgICAgIGlmICghcmV0dmFsX3NlbnQpIHsKKyAgICAgICAgICAgICAgICBkYWVtb25fcmV0dmFsX3NlbmQoMCk7CisgICAgICAgICAgICAgICAgcmV0dmFsX3NlbnQgPSAxOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzZXRfc3RhdGUoU1RBVEVfU0xFRVBJTkcsIDEsIGFkZHIpOworICAgICAgICAgICAgbmV4dF93YWtldXBfdmFsaWQgPSAwOworCisgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQgPT0gRVZFTlRfUk9VVEFCTEVfQUREUl9VTkNPTkZJR1VSRUQgJiYgc3RhdGUgPT0gU1RBVEVfU0xFRVBJTkcgJiYgIWZvcmNlX2JpbmQpIHsKKworICAgICAgICAgICAgZGFlbW9uX2xvZyhMT0dfSU5GTywgIk5vIGxvbmdlciBhIHJvdXRhYmxlIGFkZHJlc3MgY29uZmlndXJlZCwgcmVzdGFydGluZyBwcm9iZSBwcm9jZXNzLiIpOworCisgICAgICAgICAgICBzZXRfc3RhdGUoU1RBVEVfV0FJVElOR19QUk9CRSwgMSwgYWRkcik7CisKKyAgICAgICAgICAgIGVsYXBzZV90aW1lKCZuZXh0X3dha2V1cCwgMCwgUFJPQkVfV0FJVCoxMDAwKTsKKyAgICAgICAgICAgIG5leHRfd2FrZXVwX3ZhbGlkID0gMTsKKworICAgICAgICB9IGVsc2UgaWYgKGV2ZW50ID09IEVWRU5UX1JFRlJFU0hfUkVRVUVTVCAmJiBzdGF0ZSA9PSBTVEFURV9SVU5OSU5HKSB7CisKKyAgICAgICAgICAgIC8qIFRoZSB1c2VyIHJlcXVlc3RlZCBhIHJlYW5ub3VuY2luZyBvZiB0aGUgYWRkcmVzcyBieSBhIFNJR0hVUCAqLworICAgICAgICAgICAgZGFlbW9uX2xvZyhMT0dfSU5GTywgIlJlYW5ub3VuY2luZyBhZGRyZXNzLiIpOworCisgICAgICAgICAgICAvKiBTZW5kIGFubm91bmNlbWVudCBwYWNrZXQgKi8KKyAgICAgICAgICAgIG91dF9wYWNrZXQgPSBwYWNrZXRfbmV3X2Fubm91bmNlbWVudChhZGRyLCBod19hZGRyZXNzLCAmb3V0X3BhY2tldF9sZW4pOworICAgICAgICAgICAgc2V0X3N0YXRlKFNUQVRFX0FOTk9VTkNJTkcsIDEsIGFkZHIpOworCisgICAgICAgICAgICBlbGFwc2VfdGltZSgmbmV4dF93YWtldXAsIEFOTk9VTkNFX0lOVEVSVkFMKjEwMDAsIDApOworICAgICAgICAgICAgbmV4dF93YWtldXBfdmFsaWQgPSAxOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG91dF9wYWNrZXQpIHsKKyAgICAgICAgICAgIERFQlVHKGRhZW1vbl9sb2coTE9HX0RFQlVHLCAic2VuZGluZy4uLiIpKTsKKworICAgICAgICAgICAgaWYgKHNlbmRfcGFja2V0KGZkLCBpZmFjZSwgb3V0X3BhY2tldCwgb3V0X3BhY2tldF9sZW4pIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisKKyAgICAgICAgICAgIGF2YWhpX2ZyZWUob3V0X3BhY2tldCk7CisgICAgICAgICAgICBvdXRfcGFja2V0ID0gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpbl9wYWNrZXQpIHsKKyAgICAgICAgICAgIGF2YWhpX2ZyZWUoaW5fcGFja2V0KTsKKyAgICAgICAgICAgIGluX3BhY2tldCA9IE5VTEw7CisgICAgICAgIH0KKworICAgICAgICBldmVudCA9IEVWRU5UX05VTEw7CisgICAgICAgIHRpbWVvdXQgPSAtMTsKKworICAgICAgICBpZiAobmV4dF93YWtldXBfdmFsaWQpIHsKKyAgICAgICAgICAgIHVzZWMgPSBhdmFoaV9hZ2UoJm5leHRfd2FrZXVwKTsKKyAgICAgICAgICAgIHRpbWVvdXQgPSB1c2VjIDwgMCA/IChpbnQpICgtdXNlYy8xMDAwKSA6IDA7CisgICAgICAgIH0KKworICAgICAgICBERUJVRyhkYWVtb25fbG9nKExPR19ERUJVRywgInNsZWVwaW5nICVpbXMiLCB0aW1lb3V0KSk7CisKKyAgICAgICAgd2hpbGUgKChyID0gcG9sbChwb2xsZmRzLCBGRF9NQVgsIHRpbWVvdXQpKSA8IDAgJiYgZXJybm8gPT0gRUlOVFIpCisgICAgICAgICAgICA7CisKKyAgICAgICAgaWYgKHIgPCAwKSB7CisgICAgICAgICAgICBkYWVtb25fbG9nKExPR19FUlIsICJwb2xsKCkgZmFpbGVkOiAlcyIsIHN0cmVycm9yKHIpKTsKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfSBlbHNlIGlmIChyID09IDApIHsKKyAgICAgICAgICAgIGV2ZW50ID0gRVZFTlRfVElNRU9VVDsKKyAgICAgICAgICAgIG5leHRfd2FrZXVwX3ZhbGlkID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKworCisgICAgICAgICAgICBpZiAocG9sbGZkc1tGRF9BUlBdLnJldmVudHMpIHsKKworICAgICAgICAgICAgICAgIGlmIChwb2xsZmRzW0ZEX0FSUF0ucmV2ZW50cyA9PSBQT0xMRVJSKSB7CisgICAgICAgICAgICAgICAgICAgIC8qIFRoZSBpbnRlcmZhY2UgaXMgcHJvYmFibHkgZG93biwgbGV0J3MgcmVjcmVhdGUgb3VyIHNvY2tldCAqLworCisgICAgICAgICAgICAgICAgICAgIGNsb3NlX3NvY2tldChmZCk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKChmZCA9IG9wZW5fc29ja2V0KGlmYWNlLCBod19hZGRyZXNzKSkgPCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOworCisgICAgICAgICAgICAgICAgICAgIHBvbGxmZHNbRkRfQVJQXS5mZCA9IGZkOworCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKworICAgICAgICAgICAgICAgICAgICBhc3NlcnQocG9sbGZkc1tGRF9BUlBdLnJldmVudHMgPT0gUE9MTElOKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAocmVjdl9wYWNrZXQoZmQsICZpbl9wYWNrZXQsICZpbl9wYWNrZXRfbGVuKSA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluX3BhY2tldCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50ID0gRVZFTlRfUEFDS0VUOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGV2ZW50ID09IEVWRU5UX05VTEwgJiYKKyAgICAgICAgICAgICAgICBwb2xsZmRzW0ZEX0lGQUNFXS5yZXZlbnRzKSB7CisKKyAgICAgICAgICAgICAgICBhc3NlcnQocG9sbGZkc1tGRF9JRkFDRV0ucmV2ZW50cyA9PSBQT0xMSU4pOworCisgICAgICAgICAgICAgICAgaWYgKGlmYWNlX3Byb2Nlc3MoJmV2ZW50KSA8IDApCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGV2ZW50ID09IEVWRU5UX05VTEwgJiYKKyAgICAgICAgICAgICAgICBwb2xsZmRzW0ZEX1NJR05BTF0ucmV2ZW50cykgeworCisgICAgICAgICAgICAgICAgaW50IHNpZzsKKyAgICAgICAgICAgICAgICBhc3NlcnQocG9sbGZkc1tGRF9TSUdOQUxdLnJldmVudHMgPT0gUE9MTElOKTsKKworICAgICAgICAgICAgICAgIGlmICgoc2lnID0gZGFlbW9uX3NpZ25hbF9uZXh0KCkpIDw9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgZGFlbW9uX2xvZyhMT0dfRVJSLCAiZGFlbW9uX3NpZ25hbF9uZXh0KCkgZmFpbGVkIik7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBzd2l0Y2goc2lnKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgU0lHSU5UOgorICAgICAgICAgICAgICAgICAgICBjYXNlIFNJR1RFUk06CisgICAgICAgICAgICAgICAgICAgICAgICBkYWVtb25fbG9nKExPR19JTkZPLCAiR290ICVzLCBxdWl0dGluZy4iLCBzaWcgPT0gU0lHSU5UID8gIlNJR0lOVCIgOiAiU0lHVEVSTSIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKworICAgICAgICAgICAgICAgICAgICBjYXNlIFNJR0NITEQ6CisgICAgICAgICAgICAgICAgICAgICAgICB3YWl0cGlkKC0xLCBOVUxMLCBXTk9IQU5HKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgIGNhc2UgU0lHSFVQOgorICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQgPSBFVkVOVF9SRUZSRVNIX1JFUVVFU1Q7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldCA9IDA7CisKK2ZhaWw6CisKKyAgICBpZiAoc3RhdGUgPT0gU1RBVEVfUlVOTklORyB8fCBzdGF0ZSA9PSBTVEFURV9BTk5PVU5DSU5HKQorICAgICAgICBkb19jYWxsb3V0KGRpc3BhdGNoZXIsIENBTExPVVRfU1RPUCwgaWZhY2UsIGFkZHIpOworCisgICAgYXZhaGlfZnJlZShvdXRfcGFja2V0KTsKKyAgICBhdmFoaV9mcmVlKGluX3BhY2tldCk7CisKKyAgICBpZiAoZmQgPj0gMCkKKyAgICAgICAgY2xvc2Vfc29ja2V0KGZkKTsKKworICAgIGlmIChpZmFjZV9mZCA+PSAwKQorICAgICAgICBpZmFjZV9kb25lKCk7CisKKyAgICBpZiAoZGFlbW9uaXplICYmICFyZXR2YWxfc2VudCkKKyAgICAgICAgZGFlbW9uX3JldHZhbF9zZW5kKHJldCk7CisKKyAgICBpZiAoZGlzcGF0Y2hlcikKKyAgICAgICAgZmNsb3NlKGRpc3BhdGNoZXIpOworCisgICAgaWYgKGFkZHJlc3NfZm4pCisgICAgICAgIGF2YWhpX2ZyZWUoYWRkcmVzc19mbik7CisKKyAgICByZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyB2b2lkIGhlbHAoRklMRSAqZiwgY29uc3QgY2hhciAqYTApIHsKKyAgICBmcHJpbnRmKGYsCisgICAgICAgICAgICAiJXMgW29wdGlvbnNdIElOVEVSRkFDRVxuIgorICAgICAgICAgICAgIiAgICAtaCAtLWhlbHAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisgICAgICAgICAgICAiICAgIC1EIC0tZGFlbW9uaXplICAgICAgRGFlbW9uaXplIGFmdGVyIHN0YXJ0dXBcbiIKKyAgICAgICAgICAgICIgICAgLXMgLS1zeXNsb2cgICAgICAgICBXcml0ZSBsb2cgbWVzc2FnZXMgdG8gc3lzbG9nKDMpIGluc3RlYWQgb2YgU1RERVJSXG4iCisgICAgICAgICAgICAiICAgIC1rIC0ta2lsbCAgICAgICAgICAgS2lsbCBhIHJ1bm5pbmcgZGFlbW9uXG4iCisgICAgICAgICAgICAiICAgIC1yIC0tcmVmcmVzaCAgICAgICAgUmVxdWVzdCBhIHJ1bm5pbmcgZGFlbW9uIHJlZnJlc2ggaXRzIElQIGFkZHJlc3NcbiIKKyAgICAgICAgICAgICIgICAgLWMgLS1jaGVjayAgICAgICAgICBSZXR1cm4gMCBpZiBhIGRhZW1vbiBpcyBhbHJlYWR5IHJ1bm5pbmdcbiIKKyAgICAgICAgICAgICIgICAgLVYgLS12ZXJzaW9uICAgICAgICBTaG93IHZlcnNpb25cbiIKKyAgICAgICAgICAgICIgICAgLVMgLS1zdGFydD1BRERSRVNTICBTdGFydCB3aXRoIHRoaXMgYWRkcmVzcyBmcm9tIHRoZSBJUHY0TEwgcmFuZ2VcbiIKKyAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAxNjkuMjU0LjAuMC8xNlxuIgorICAgICAgICAgICAgIiAgICAtdCAtLXNjcmlwdD1zY3JpcHQgIEFjdGlvbiBzY3JpcHQgdG8gcnVuIChkZWZhdWx0cyB0b1xuIgorICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICJBVkFISV9JUENPTkZfU0NSSVBUIilcbiIKKyAgICAgICAgICAgICIgICAgLXcgLS13YWl0ICAgICAgICAgICBXYWl0IHVudGlsIGFuIGFkZHJlc3MgaGFzIGJlZW4gYWNxdWlyZWQgYmVmb3JlXG4iCisgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgZGFlbW9uaXppbmdcbiIKKyAgICAgICAgICAgICIgICAgICAgLS1mb3JjZS1iaW5kICAgICBBc3NpZ24gYW4gSVB2NExMIGFkZHJlc3MgZXZlbiBpZiBhIHJvdXRhYmxlIGFkZHJlc3NcbiIKKyAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICBpcyBhbHJlYWR5IGFzc2lnbmVkXG4iCisgICAgICAgICAgICAiICAgICAgIC0tbm8tZHJvcC1yb290ICAgRG9uJ3QgZHJvcCBwcml2aWxlZ2VzXG4iCisjaWZkZWYgSEFWRV9DSFJPT1QKKyAgICAgICAgICAgICIgICAgICAgLS1uby1jaHJvb3QgICAgICBEb24ndCBjaHJvb3QoKVxuIgorI2VuZGlmCisgICAgICAgICAgICAiICAgICAgIC0tbm8tcHJvYy10aXRsZSAgRG9uJ3QgbW9kaWZ5IHByb2Nlc3MgdGl0bGVcbiIKKyAgICAgICAgICAgICIgICAgICAgLS1kZWJ1ZyAgICAgICAgICBJbmNyZWFzZSB2ZXJib3NpdHlcbiIsCisgICAgICAgICAgICBhMCk7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfY29tbWFuZF9saW5lKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKKyAgICBpbnQgYzsKKworICAgIGVudW0geworICAgICAgICBPUFRJT05fTk9fUFJPQ19USVRMRSA9IDI1NiwKKyAgICAgICAgT1BUSU9OX0ZPUkNFX0JJTkQsCisgICAgICAgIE9QVElPTl9ERUJVRywKKyAgICAgICAgT1BUSU9OX05PX0RST1BfUk9PVCwKKyNpZmRlZiBIQVZFX0NIUk9PVAorICAgICAgICBPUFRJT05fTk9fQ0hST09UCisjZW5kaWYKKyAgICB9OworCisgICAgc3RhdGljIGNvbnN0IHN0cnVjdCBvcHRpb24gbG9uZ19vcHRpb25zW10gPSB7CisgICAgICAgIHsgImhlbHAiLCAgICAgICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgJ2gnIH0sCisgICAgICAgIHsgImRhZW1vbml6ZSIsICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgJ0QnIH0sCisgICAgICAgIHsgInN5c2xvZyIsICAgICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgJ3MnIH0sCisgICAgICAgIHsgImtpbGwiLCAgICAgICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgJ2snIH0sCisgICAgICAgIHsgInJlZnJlc2giLCAgICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgJ3InIH0sCisgICAgICAgIHsgImNoZWNrIiwgICAgICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgJ2MnIH0sCisgICAgICAgIHsgInZlcnNpb24iLCAgICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgJ1YnIH0sCisgICAgICAgIHsgInN0YXJ0IiwgICAgICAgICByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ1MnIH0sCisgICAgICAgIHsgInNjcmlwdCIsICAgICAgICByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ3QnIH0sCisgICAgICAgIHsgIndhaXQiLCAgICAgICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgJ3cnIH0sCisgICAgICAgIHsgImZvcmNlLWJpbmQiLCAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgT1BUSU9OX0ZPUkNFX0JJTkQgfSwKKyAgICAgICAgeyAibm8tZHJvcC1yb290IiwgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCBPUFRJT05fTk9fRFJPUF9ST09UIH0sCisjaWZkZWYgSEFWRV9DSFJPT1QKKyAgICAgICAgeyAibm8tY2hyb290IiwgICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCBPUFRJT05fTk9fQ0hST09UIH0sCisjZW5kaWYKKyAgICAgICAgeyAibm8tcHJvYy10aXRsZSIsIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCBPUFRJT05fTk9fUFJPQ19USVRMRSB9LAorICAgICAgICB7ICJkZWJ1ZyIsICAgICAgICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsIE9QVElPTl9ERUJVRyB9LAorICAgICAgICB7IE5VTEwsIDAsIE5VTEwsIDAgfQorICAgIH07CisKKyAgICB3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiaERza3JjVlM6dDp3IiwgbG9uZ19vcHRpb25zLCBOVUxMKSkgPj0gMCkgeworCisgICAgICAgIHN3aXRjaChjKSB7CisgICAgICAgICAgICBjYXNlICdzJzoKKyAgICAgICAgICAgICAgICB1c2Vfc3lzbG9nID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ2gnOgorICAgICAgICAgICAgICAgIGNvbW1hbmQgPSBEQUVNT05fSEVMUDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ0QnOgorICAgICAgICAgICAgICAgIGRhZW1vbml6ZSA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdrJzoKKyAgICAgICAgICAgICAgICBjb21tYW5kID0gREFFTU9OX0tJTEw7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdWJzoKKyAgICAgICAgICAgICAgICBjb21tYW5kID0gREFFTU9OX1ZFUlNJT047CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdyJzoKKyAgICAgICAgICAgICAgICBjb21tYW5kID0gREFFTU9OX1JFRlJFU0g7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdjJzoKKyAgICAgICAgICAgICAgICBjb21tYW5kID0gREFFTU9OX0NIRUNLOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnUyc6CisKKyAgICAgICAgICAgICAgICBpZiAoKHN0YXJ0X2FkZHJlc3MgPSBpbmV0X2FkZHIob3B0YXJnKSkgPT0gKHVpbnQzMl90KSAtMSkgeworICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBwYXJzZSBJUCBhZGRyZXNzICclcycuIiwgb3B0YXJnKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ3QnOgorICAgICAgICAgICAgICAgIGF2YWhpX2ZyZWUoYWN0aW9uX3NjcmlwdCk7CisgICAgICAgICAgICAgICAgYWN0aW9uX3NjcmlwdCA9IGF2YWhpX3N0cmR1cChvcHRhcmcpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAndyc6CisgICAgICAgICAgICAgICAgd2FpdF9mb3JfYWRkcmVzcyA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgT1BUSU9OX05PX1BST0NfVElUTEU6CisgICAgICAgICAgICAgICAgbW9kaWZ5X3Byb2NfdGl0bGUgPSAwOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIE9QVElPTl9ERUJVRzoKKyAgICAgICAgICAgICAgICBkZWJ1ZyA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgT1BUSU9OX0ZPUkNFX0JJTkQ6CisgICAgICAgICAgICAgICAgZm9yY2VfYmluZCA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgT1BUSU9OX05PX0RST1BfUk9PVDoKKyAgICAgICAgICAgICAgICBub19kcm9wX3Jvb3QgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworCisjaWZkZWYgSEFWRV9DSFJPT1QKKyAgICAgICAgICAgIGNhc2UgT1BUSU9OX05PX0NIUk9PVDoKKyAgICAgICAgICAgICAgICBub19jaHJvb3QgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGNvbW1hbmQgPT0gREFFTU9OX1JVTiB8fAorICAgICAgICBjb21tYW5kID09IERBRU1PTl9LSUxMIHx8CisgICAgICAgIGNvbW1hbmQgPT0gREFFTU9OX1JFRlJFU0ggfHwKKyAgICAgICAgY29tbWFuZCA9PSBEQUVNT05fQ0hFQ0spIHsKKworICAgICAgICBpZiAob3B0aW5kID49IGFyZ2MpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiTWlzc2luZyBpbnRlcmZhY2UgbmFtZS5cbiIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgaW50ZXJmYWNlX25hbWUgPSBhdmFoaV9zdHJkdXAoYXJndltvcHRpbmQrK10pOworICAgIH0KKworICAgIGlmIChvcHRpbmQgIT0gYXJnYykgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlRvbyBtYW55IGFyZ3VtZW50c1xuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoIWFjdGlvbl9zY3JpcHQpCisgICAgICAgIGFjdGlvbl9zY3JpcHQgPSBhdmFoaV9zdHJkdXAoQVZBSElfSVBDT05GX1NDUklQVCk7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIqIHBpZF9maWxlX3Byb2Modm9pZCkgeworICAgIHJldHVybiBwaWRfZmlsZV9uYW1lOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciphcmd2W10pIHsKKyAgICBpbnQgciA9IDE7CisgICAgY2hhciAqbG9nX2lkZW50ID0gTlVMTDsKKworICAgIHNpZ25hbChTSUdQSVBFLCBTSUdfSUdOKTsKKworICAgIGlmICgoYXJndjAgPSBzdHJyY2hyKGFyZ3ZbMF0sICcvJykpKQorICAgICAgICBhcmd2MCA9IGF2YWhpX3N0cmR1cChhcmd2MCArIDEpOworICAgIGVsc2UKKyAgICAgICAgYXJndjAgPSBhdmFoaV9zdHJkdXAoYXJndlswXSk7CisKKyAgICBkYWVtb25fbG9nX2lkZW50ID0gYXJndjA7CisKKyAgICBpZiAocGFyc2VfY29tbWFuZF9saW5lKGFyZ2MsIGFyZ3YpIDwgMCkKKyAgICAgICAgZ290byBmaW5pc2g7CisKKyAgICBpZiAobW9kaWZ5X3Byb2NfdGl0bGUpCisgICAgICAgIGF2YWhpX2luaXRfcHJvY190aXRsZShhcmdjLCBhcmd2KTsKKworICAgIGRhZW1vbl9sb2dfaWRlbnQgPSBsb2dfaWRlbnQgPSBhdmFoaV9zdHJkdXBfcHJpbnRmKCIlcyglcykiLCBhcmd2MCwgaW50ZXJmYWNlX25hbWUpOworICAgIGRhZW1vbl9waWRfZmlsZV9wcm9jID0gcGlkX2ZpbGVfcHJvYzsKKyAgICBwaWRfZmlsZV9uYW1lID0gYXZhaGlfc3RyZHVwX3ByaW50ZihBVkFISV9SVU5USU1FX0RJUiIvYXZhaGktYXV0b2lwZC4lcy5waWQiLCBpbnRlcmZhY2VfbmFtZSk7CisKKyAgICBpZiAoY29tbWFuZCA9PSBEQUVNT05fUlVOKSB7CisgICAgICAgIHBpZF90IHBpZDsKKyAgICAgICAgaW50IGlmaW5kZXg7CisKKyAgICAgICAgaW5pdF9yYW5kX3NlZWQoKTsKKworICAgICAgICBpZiAoKGlmaW5kZXggPSBpZl9uYW1ldG9pbmRleChpbnRlcmZhY2VfbmFtZSkpIDw9IDApIHsKKyAgICAgICAgICAgIGRhZW1vbl9sb2coTE9HX0VSUiwgIkZhaWxlZCB0byBnZXQgaW5kZXggZm9yIGludGVyZmFjZSBuYW1lICclcyc6ICVzIiwgaW50ZXJmYWNlX25hbWUsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICBnb3RvIGZpbmlzaDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChnZXR1aWQoKSAhPSAwKSB7CisgICAgICAgICAgICBkYWVtb25fbG9nKExPR19FUlIsICJUaGlzIHByb2dyYW0gaXMgaW50ZW5kZWQgdG8gYmUgcnVuIGFzIHJvb3QuIik7CisgICAgICAgICAgICBnb3RvIGZpbmlzaDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgocGlkID0gZGFlbW9uX3BpZF9maWxlX2lzX3J1bm5pbmcoKSkgPj0gMCkgeworICAgICAgICAgICAgZGFlbW9uX2xvZyhMT0dfRVJSLCAiRGFlbW9uIGFscmVhZHkgcnVubmluZyBvbiBQSUQgJXUiLCBwaWQpOworICAgICAgICAgICAgZ290byBmaW5pc2g7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZGFlbW9uaXplKSB7CisgICAgICAgICAgICBkYWVtb25fcmV0dmFsX2luaXQoKTsKKworICAgICAgICAgICAgaWYgKChwaWQgPSBkYWVtb25fZm9yaygpKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBmaW5pc2g7CisgICAgICAgICAgICBlbHNlIGlmIChwaWQgIT0gMCkgeworICAgICAgICAgICAgICAgIGludCByZXQ7CisgICAgICAgICAgICAgICAgLyoqIFBhcmVudCAqKi8KKworICAgICAgICAgICAgICAgIGlmICgocmV0ID0gZGFlbW9uX3JldHZhbF93YWl0KDIwKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIGRhZW1vbl9sb2coTE9HX0VSUiwgIkNvdWxkIG5vdCByZWNlaXZlIHJldHVybiB2YWx1ZSBmcm9tIGRhZW1vbiBwcm9jZXNzLiIpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGZpbmlzaDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByID0gcmV0OworICAgICAgICAgICAgICAgIGdvdG8gZmluaXNoOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBDaGlsZCAqLworICAgICAgICB9CisKKyAgICAgICAgaWYgKHVzZV9zeXNsb2cgfHwgZGFlbW9uaXplKQorICAgICAgICAgICAgZGFlbW9uX2xvZ191c2UgPSBEQUVNT05fTE9HX1NZU0xPRzsKKworICAgICAgICBjaGRpcigiLyIpOworCisgICAgICAgIGlmIChkYWVtb25fcGlkX2ZpbGVfY3JlYXRlKCkgPCAwKSB7CisgICAgICAgICAgICBkYWVtb25fbG9nKExPR19FUlIsICJGYWlsZWQgdG8gY3JlYXRlIFBJRCBmaWxlOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisKKyAgICAgICAgICAgIGlmIChkYWVtb25pemUpCisgICAgICAgICAgICAgICAgZGFlbW9uX3JldHZhbF9zZW5kKDEpOworICAgICAgICAgICAgZ290byBmaW5pc2g7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgd3JvdGVfcGlkX2ZpbGUgPSAxOworCisgICAgICAgIGF2YWhpX3NldF9wcm9jX3RpdGxlKGFyZ3YwLCAiJXM6IFslc10gc3RhcnRpbmcgdXAiLCBhcmd2MCwgaW50ZXJmYWNlX25hbWUpOworCisgICAgICAgIGlmIChsb29wKGlmaW5kZXgsIHN0YXJ0X2FkZHJlc3MpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZmluaXNoOworCisgICAgICAgIHIgPSAwOworICAgIH0gZWxzZSBpZiAoY29tbWFuZCA9PSBEQUVNT05fSEVMUCkgeworICAgICAgICBoZWxwKHN0ZG91dCwgYXJndjApOworCisgICAgICAgIHIgPSAwOworICAgIH0gZWxzZSBpZiAoY29tbWFuZCA9PSBEQUVNT05fVkVSU0lPTikgeworICAgICAgICBwcmludGYoIiVzICJQQUNLQUdFX1ZFUlNJT04iXG4iLCBhcmd2MCk7CisKKyAgICAgICAgciA9IDA7CisgICAgfSBlbHNlIGlmIChjb21tYW5kID09IERBRU1PTl9LSUxMKSB7CisgICAgICAgIGlmIChkYWVtb25fcGlkX2ZpbGVfa2lsbF93YWl0KFNJR1RFUk0sIDUpIDwgMCkgeworICAgICAgICAgICAgZGFlbW9uX2xvZyhMT0dfV0FSTklORywgIkZhaWxlZCB0byBraWxsIGRhZW1vbjogJXMiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgZ290byBmaW5pc2g7CisgICAgICAgIH0KKworICAgICAgICByID0gMDsKKyAgICB9IGVsc2UgaWYgKGNvbW1hbmQgPT0gREFFTU9OX1JFRlJFU0gpIHsKKyAgICAgICAgaWYgKGRhZW1vbl9waWRfZmlsZV9raWxsKFNJR0hVUCkgPCAwKSB7CisgICAgICAgICAgICBkYWVtb25fbG9nKExPR19XQVJOSU5HLCAiRmFpbGVkIHRvIGtpbGwgZGFlbW9uOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICBnb3RvIGZpbmlzaDsKKyAgICAgICAgfQorCisgICAgICAgIHIgPSAwOworICAgIH0gZWxzZSBpZiAoY29tbWFuZCA9PSBEQUVNT05fQ0hFQ0spCisgICAgICAgIHIgPSAoZGFlbW9uX3BpZF9maWxlX2lzX3J1bm5pbmcoKSA+PSAwKSA/IDAgOiAxOworCisKK2ZpbmlzaDoKKworICAgIGlmIChkYWVtb25pemUpCisgICAgICAgIGRhZW1vbl9yZXR2YWxfZG9uZSgpOworCisgICAgaWYgKHdyb3RlX3BpZF9maWxlKQorICAgICAgICBkYWVtb25fcGlkX2ZpbGVfcmVtb3ZlKCk7CisKKyAgICBhdmFoaV9mcmVlKGxvZ19pZGVudCk7CisgICAgYXZhaGlfZnJlZShwaWRfZmlsZV9uYW1lKTsKKyAgICBhdmFoaV9mcmVlKGFyZ3YwKTsKKyAgICBhdmFoaV9mcmVlKGludGVyZmFjZV9uYW1lKTsKKyAgICBhdmFoaV9mcmVlKGFjdGlvbl9zY3JpcHQpOworCisgICAgcmV0dXJuIHI7Cit9CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktYXV0b2lwZC9tYWluLmggYi9hdmFoaS0wLjYuMzEvYXZhaGktYXV0b2lwZC9tYWluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2MwMmRmNwotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1hdXRvaXBkL21haW4uaApAQCAtMCwwICsxLDQ1IEBACisjaWZuZGVmIGZvb2F2YWhpbWFpbmhmb28KKyNkZWZpbmUgZm9vYXZhaGltYWluaGZvbworCisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKK3R5cGVkZWYgZW51bSBFdmVudCB7CisgICAgRVZFTlRfTlVMTCwKKyAgICBFVkVOVF9QQUNLRVQsCisgICAgRVZFTlRfVElNRU9VVCwKKyAgICBFVkVOVF9ST1VUQUJMRV9BRERSX0NPTkZJR1VSRUQsCisgICAgRVZFTlRfUk9VVEFCTEVfQUREUl9VTkNPTkZJR1VSRUQsCisgICAgRVZFTlRfUkVGUkVTSF9SRVFVRVNUCit9IEV2ZW50OworCit0eXBlZGVmIGVudW0gU3RhdGUgeworICAgIFNUQVRFX1NUQVJULAorICAgIFNUQVRFX1dBSVRJTkdfUFJPQkUsCisgICAgU1RBVEVfUFJPQklORywKKyAgICBTVEFURV9XQUlUSU5HX0FOTk9VTkNFLAorICAgIFNUQVRFX0FOTk9VTkNJTkcsCisgICAgU1RBVEVfUlVOTklORywKKyAgICBTVEFURV9TTEVFUElORywKKyAgICBTVEFURV9NQVgKK30gU3RhdGU7CisKK2ludCBpc19sbF9hZGRyZXNzKHVpbnQzMl90IGFkZHIpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jbGllbnQucGMuaW4gYi9hdmFoaS0wLjYuMzEvYXZhaGktY2xpZW50LnBjLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1ZWU4ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY2xpZW50LnBjLmluCkBAIC0wLDAgKzEsMTAgQEAKK3ByZWZpeD1AcHJlZml4QAorZXhlY19wcmVmaXg9JHtwcmVmaXh9CitsaWJkaXI9QGxpYmRpckAKK2luY2x1ZGVkaXI9JHtwcmVmaXh9L2luY2x1ZGUKKworTmFtZTogYXZhaGktY2xpZW50CitEZXNjcmlwdGlvbjogQXZhaGkgTXVsdGljYXN0IEROUyBSZXNwb25kZXIgKENsaWVudCBTdXBwb3J0KQorVmVyc2lvbjogQFBBQ0tBR0VfVkVSU0lPTkAKK0xpYnM6IC1MJHtsaWJkaXJ9IC1sYXZhaGktY29tbW9uIC1sYXZhaGktY2xpZW50CitDZmxhZ3M6IC1EX1JFRU5UUkFOVCAtSSR7aW5jbHVkZWRpcn0KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jbGllbnQvTWFrZWZpbGUuYW0gYi9hdmFoaS0wLjYuMzEvYXZhaGktY2xpZW50L01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxMWIxMWQKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY2xpZW50L01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsODMgQEAKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisjCisjIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisjIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisjIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisjIFVTQS4KKworQU1fQ0ZMQUdTPS1JJCh0b3Bfc3JjZGlyKQorCisjIFRoaXMgY29vbCBkZWJ1ZyB0cmFwIHdvcmtzIG9uIGkzODYvZ2NjIG9ubHkKK0FNX0NGTEFHUys9Jy1EREVCVUdfVFJBUD1fX2FzbV9fKCJpbnQgJCQzIiknCisKK2lmIEhBVkVfREJVUworCithdmFoaV9jbGllbnRpbmNsdWRlZGlyPSQoaW5jbHVkZWRpcikvYXZhaGktY2xpZW50CithdmFoaV9jbGllbnRpbmNsdWRlX0hFQURFUlMgPSBjbGllbnQuaCBsb29rdXAuaCBwdWJsaXNoLmgKKworbm9pbnN0X0hFQURFUlMgPSBpbnRlcm5hbC5oCisKK2lmIEVOQUJMRV9URVNUUworCitub2luc3RfUFJPR1JBTVMgPSBcCisJY2xpZW50LXRlc3QgXAorCXNydi10ZXN0IFwKKwl4ZGctY29uZmlnLXRlc3QgXAorCXJyLXRlc3QgXAorCWNoZWNrLW5zcy10ZXN0CisKK2VuZGlmCisKK2xpYl9MVExJQlJBUklFUyA9IGxpYmF2YWhpLWNsaWVudC5sYQorCitsaWJhdmFoaV9jbGllbnRfbGFfU09VUkNFUyA9IFwKKwljbGllbnQuYyBjbGllbnQuaCBcCisJZW50cnlncm91cC5jIFwKKwlicm93c2VyLmMgXAorCXJlc29sdmVyLmMgXAorCXB1Ymxpc2guaCBsb29rdXAuaCBcCisJeGRnLWNvbmZpZy5jIHhkZy1jb25maWcuaCBcCisJY2hlY2stbnNzLmMgXAorCS4uL2F2YWhpLWNvbW1vbi9kYnVzLmMgLi4vYXZhaGktY29tbW9uL2RidXMuaCBcCisJLi4vYXZhaGktY29tbW9uL2RidXMtd2F0Y2gtZ2x1ZS5jIC4uL2F2YWhpLWNvbW1vbi9kYnVzLXdhdGNoLWdsdWUuaAorCitsaWJhdmFoaV9jbGllbnRfbGFfQ0ZMQUdTID0gJChBTV9DRkxBR1MpICQoREJVU19DRkxBR1MpIC1EREJVU19TWVNURU1fQlVTX0RFRkFVTFRfQUREUkVTUz1cIiQoREJVU19TWVNURU1fQlVTX0RFRkFVTFRfQUREUkVTUylcIgorbGliYXZhaGlfY2xpZW50X2xhX0xJQkFERCA9ICQoQU1fTERBREQpICQoREJVU19MSUJTKSAuLi9hdmFoaS1jb21tb24vbGliYXZhaGktY29tbW9uLmxhCitsaWJhdmFoaV9jbGllbnRfbGFfTERGTEFHUyA9ICQoQU1fTERGTEFHUykgIC12ZXJzaW9uLWluZm8gJChMSUJBVkFISV9DTElFTlRfVkVSU0lPTl9JTkZPKQorCitjbGllbnRfdGVzdF9TT1VSQ0VTID0gY2xpZW50LXRlc3QuYworY2xpZW50X3Rlc3RfQ0ZMQUdTID0gJChBTV9DRkxBR1MpCitjbGllbnRfdGVzdF9MREFERCA9ICQoQU1fTERBREQpIGxpYmF2YWhpLWNsaWVudC5sYSAuLi9hdmFoaS1jb21tb24vbGliYXZhaGktY29tbW9uLmxhCisKK3Nydl90ZXN0X1NPVVJDRVMgPSBzcnYtdGVzdC5jCitzcnZfdGVzdF9DRkxBR1MgPSAkKEFNX0NGTEFHUykKK3Nydl90ZXN0X0xEQUREID0gJChBTV9MREFERCkgbGliYXZhaGktY2xpZW50LmxhIC4uL2F2YWhpLWNvbW1vbi9saWJhdmFoaS1jb21tb24ubGEKKworcnJfdGVzdF9TT1VSQ0VTID0gcnItdGVzdC5jCitycl90ZXN0X0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKQorcnJfdGVzdF9MREFERCA9ICQoQU1fTERBREQpIGxpYmF2YWhpLWNsaWVudC5sYSAuLi9hdmFoaS1jb21tb24vbGliYXZhaGktY29tbW9uLmxhCisKK3hkZ19jb25maWdfdGVzdF9TT1VSQ0VTID0geGRnLWNvbmZpZy10ZXN0LmMgeGRnLWNvbmZpZy5jIHhkZy1jb25maWcuaAoreGRnX2NvbmZpZ190ZXN0X0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKQoreGRnX2NvbmZpZ190ZXN0X0xEQUREID0gJChBTV9MREFERCkKKworY2hlY2tfbnNzX3Rlc3RfU09VUkNFUyA9IGNoZWNrLW5zcy5jIGNoZWNrLW5zcy10ZXN0LmMgY2xpZW50LmgKK2NoZWNrX25zc190ZXN0X0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKQorY2hlY2tfbnNzX3Rlc3RfTERBREQgPSAkKEFNX0xEQUREKQorCitpZiBIQVZFX0RMT1BFTgorY2hlY2tfbnNzX3Rlc3RfTERBREQgKz0gLWxkbAorbGliYXZhaGlfY2xpZW50X2xhX0xJQkFERCArPSAtbGRsCitlbmRpZgorCitlbmRpZgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNsaWVudC9NYWtlZmlsZS5pbiBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jbGllbnQvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJlODM0MAotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jbGllbnQvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwxMDQxIEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjExLjMgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACisKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisjCisjIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisjIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisjIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisjIFVTQS4KKworCisKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK0BFTkFCTEVfVEVTVFNfVFJVRUBASEFWRV9EQlVTX1RSVUVAbm9pbnN0X1BST0dSQU1TID0gIFwKK0BFTkFCTEVfVEVTVFNfVFJVRUBASEFWRV9EQlVTX1RSVUVACWNsaWVudC10ZXN0JChFWEVFWFQpIFwKK0BFTkFCTEVfVEVTVFNfVFJVRUBASEFWRV9EQlVTX1RSVUVACXNydi10ZXN0JChFWEVFWFQpIFwKK0BFTkFCTEVfVEVTVFNfVFJVRUBASEFWRV9EQlVTX1RSVUVACXhkZy1jb25maWctdGVzdCQoRVhFRVhUKSBcCitARU5BQkxFX1RFU1RTX1RSVUVAQEhBVkVfREJVU19UUlVFQAlyci10ZXN0JChFWEVFWFQpIFwKK0BFTkFCTEVfVEVTVFNfVFJVRUBASEFWRV9EQlVTX1RSVUVACWNoZWNrLW5zcy10ZXN0JChFWEVFWFQpCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfRExPUEVOX1RSVUVAYW1fX2FwcGVuZF8xID0gLWxkbAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0RMT1BFTl9UUlVFQGFtX19hcHBlbmRfMiA9IC1sZGwKK3N1YmRpciA9IGF2YWhpLWNsaWVudAorRElTVF9DT01NT04gPSAkKGFtX19hdmFoaV9jbGllbnRpbmNsdWRlX0hFQURFUlNfRElTVCkgXAorCSQoYW1fX25vaW5zdF9IRUFERVJTX0RJU1QpICQoc3JjZGlyKS9NYWtlZmlsZS5hbSBcCisJJChzcmNkaXIpL01ha2VmaWxlLmluCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vYWN4X3B0aHJlYWQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2djY19zdGFja19wcm90ZWN0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9nY2NfdmlzaWJpbGl0eS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vaW50bHRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2ludHJvc3BlY3Rpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2x0b3B0aW9ucy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHR2ZXJzaW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbmxzLm00ICQodG9wX3NyY2RpcikvY29tbW9uL3B5dGhvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9hY2luY2x1ZGUubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vZG94eWdlbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7CithbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAorICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCisgICAgKikgZj0kJHA7OyBcCisgIGVzYWM7CithbV9fc3RyaXBfZGlyID0gZj1gZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7CithbV9faW5zdGFsbF9tYXggPSA0MAorYW1fX25vYmFzZV9zdHJpcF9zZXR1cCA9IFwKKyAgc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYAorYW1fX25vYmFzZV9zdHJpcCA9IFwKKyAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkIC1lICJzfCQkc3JjZGlyc3RyaXAvfHwiCithbV9fbm9iYXNlX2xpc3QgPSAkKGFtX19ub2Jhc2Vfc3RyaXBfc2V0dXApOyBcCisgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCisgIHNlZCAic3wgJCRzcmNkaXJzdHJpcC98IHw7IicgLyAuKlwvLyFzLyAuKi8gLi87IHMsXCggLipcKS9bXi9dKiQkLFwxLCcgfCBcCisgICQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiIgfSB7IGZpbGVzWyQkMl0gPSBmaWxlc1skJDJdICIgIiAkJDE7IFwKKyAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCisgICAgICB7IHByaW50ICQkMiwgZmlsZXNbJCQyXTsgblskJDJdID0gMDsgZmlsZXNbJCQyXSA9ICIiIH0gfSBcCisgICAgRU5EIHsgZm9yIChkaXIgaW4gZmlsZXMpIHByaW50IGRpciwgZmlsZXNbZGlyXSB9JworYW1fX2Jhc2VfbGlzdCA9IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJyB8IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJworYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpciA9IHsgXAorICB0ZXN0IC16ICIkJGZpbGVzIiBcCisgICAgfHwgeyB0ZXN0ICEgLWQgIiQkZGlyIiAmJiB0ZXN0ICEgLWYgIiQkZGlyIiAmJiB0ZXN0ICEgLXIgIiQkZGlyIjsgfSBcCisgICAgfHwgeyBlY2hvICIgKCBjZCAnJCRkaXInICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAorICAgICAgICAgJChhbV9fY2QpICIkJGRpciIgJiYgcm0gLWYgJCRmaWxlczsgfTsgXAorICB9CithbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQobGliZGlyKSIgXAorCSIkKERFU1RESVIpJChhdmFoaV9jbGllbnRpbmNsdWRlZGlyKSIKK0xUTElCUkFSSUVTID0gJChsaWJfTFRMSUJSQVJJRVMpCithbV9fREVQRU5ERU5DSUVTXzEgPQorQEhBVkVfREJVU19UUlVFQGxpYmF2YWhpX2NsaWVudF9sYV9ERVBFTkRFTkNJRVMgPSAgXAorQEhBVkVfREJVU19UUlVFQAkkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAorQEhBVkVfREJVU19UUlVFQAkuLi9hdmFoaS1jb21tb24vbGliYXZhaGktY29tbW9uLmxhIFwKK0BIQVZFX0RCVVNfVFJVRUAJJChhbV9fREVQRU5ERU5DSUVTXzEpCithbV9fbGliYXZhaGlfY2xpZW50X2xhX1NPVVJDRVNfRElTVCA9IGNsaWVudC5jIGNsaWVudC5oIGVudHJ5Z3JvdXAuYyBcCisJYnJvd3Nlci5jIHJlc29sdmVyLmMgcHVibGlzaC5oIGxvb2t1cC5oIHhkZy1jb25maWcuYyBcCisJeGRnLWNvbmZpZy5oIGNoZWNrLW5zcy5jIC4uL2F2YWhpLWNvbW1vbi9kYnVzLmMgXAorCS4uL2F2YWhpLWNvbW1vbi9kYnVzLmggLi4vYXZhaGktY29tbW9uL2RidXMtd2F0Y2gtZ2x1ZS5jIFwKKwkuLi9hdmFoaS1jb21tb24vZGJ1cy13YXRjaC1nbHVlLmgKK0BIQVZFX0RCVVNfVFJVRUBhbV9saWJhdmFoaV9jbGllbnRfbGFfT0JKRUNUUyA9ICBcCitASEFWRV9EQlVTX1RSVUVACWxpYmF2YWhpX2NsaWVudF9sYS1jbGllbnQubG8gXAorQEhBVkVfREJVU19UUlVFQAlsaWJhdmFoaV9jbGllbnRfbGEtZW50cnlncm91cC5sbyBcCitASEFWRV9EQlVTX1RSVUVACWxpYmF2YWhpX2NsaWVudF9sYS1icm93c2VyLmxvIFwKK0BIQVZFX0RCVVNfVFJVRUAJbGliYXZhaGlfY2xpZW50X2xhLXJlc29sdmVyLmxvIFwKK0BIQVZFX0RCVVNfVFJVRUAJbGliYXZhaGlfY2xpZW50X2xhLXhkZy1jb25maWcubG8gXAorQEhBVkVfREJVU19UUlVFQAlsaWJhdmFoaV9jbGllbnRfbGEtY2hlY2stbnNzLmxvIFwKK0BIQVZFX0RCVVNfVFJVRUAJbGliYXZhaGlfY2xpZW50X2xhLWRidXMubG8gXAorQEhBVkVfREJVU19UUlVFQAlsaWJhdmFoaV9jbGllbnRfbGEtZGJ1cy13YXRjaC1nbHVlLmxvCitsaWJhdmFoaV9jbGllbnRfbGFfT0JKRUNUUyA9ICQoYW1fbGliYXZhaGlfY2xpZW50X2xhX09CSkVDVFMpCitBTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCithbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfbHRfMCA9IC0tc2lsZW50CitsaWJhdmFoaV9jbGllbnRfbGFfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCisJJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpIFwKKwkkKGxpYmF2YWhpX2NsaWVudF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSBcCisJJChsaWJhdmFoaV9jbGllbnRfbGFfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorQEhBVkVfREJVU19UUlVFQGFtX2xpYmF2YWhpX2NsaWVudF9sYV9ycGF0aCA9IC1ycGF0aCAkKGxpYmRpcikKK1BST0dSQU1TID0gJChub2luc3RfUFJPR1JBTVMpCithbV9fY2hlY2tfbnNzX3Rlc3RfU09VUkNFU19ESVNUID0gY2hlY2stbnNzLmMgY2hlY2stbnNzLXRlc3QuYyBcCisJY2xpZW50LmgKK0BIQVZFX0RCVVNfVFJVRUBhbV9jaGVja19uc3NfdGVzdF9PQkpFQ1RTID0gIFwKK0BIQVZFX0RCVVNfVFJVRUAJY2hlY2tfbnNzX3Rlc3QtY2hlY2stbnNzLiQoT0JKRVhUKSBcCitASEFWRV9EQlVTX1RSVUVACWNoZWNrX25zc190ZXN0LWNoZWNrLW5zcy10ZXN0LiQoT0JKRVhUKQorY2hlY2tfbnNzX3Rlc3RfT0JKRUNUUyA9ICQoYW1fY2hlY2tfbnNzX3Rlc3RfT0JKRUNUUykKK0BIQVZFX0RCVVNfVFJVRUBjaGVja19uc3NfdGVzdF9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKK2NoZWNrX25zc190ZXN0X0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAorCSQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSBcCisJJChjaGVja19uc3NfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gXAorCSRACithbV9fY2xpZW50X3Rlc3RfU09VUkNFU19ESVNUID0gY2xpZW50LXRlc3QuYworQEhBVkVfREJVU19UUlVFQGFtX2NsaWVudF90ZXN0X09CSkVDVFMgPSAgXAorQEhBVkVfREJVU19UUlVFQAljbGllbnRfdGVzdC1jbGllbnQtdGVzdC4kKE9CSkVYVCkKK2NsaWVudF90ZXN0X09CSkVDVFMgPSAkKGFtX2NsaWVudF90ZXN0X09CSkVDVFMpCitASEFWRV9EQlVTX1RSVUVAY2xpZW50X3Rlc3RfREVQRU5ERU5DSUVTID0gbGliYXZhaGktY2xpZW50LmxhIFwKK0BIQVZFX0RCVVNfVFJVRUAJLi4vYXZhaGktY29tbW9uL2xpYmF2YWhpLWNvbW1vbi5sYQorY2xpZW50X3Rlc3RfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoY2xpZW50X3Rlc3RfQ0ZMQUdTKSBcCisJJChDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorYW1fX3JyX3Rlc3RfU09VUkNFU19ESVNUID0gcnItdGVzdC5jCitASEFWRV9EQlVTX1RSVUVAYW1fcnJfdGVzdF9PQkpFQ1RTID0gcnJfdGVzdC1yci10ZXN0LiQoT0JKRVhUKQorcnJfdGVzdF9PQkpFQ1RTID0gJChhbV9ycl90ZXN0X09CSkVDVFMpCitASEFWRV9EQlVTX1RSVUVAcnJfdGVzdF9ERVBFTkRFTkNJRVMgPSBsaWJhdmFoaS1jbGllbnQubGEgXAorQEhBVkVfREJVU19UUlVFQAkuLi9hdmFoaS1jb21tb24vbGliYXZhaGktY29tbW9uLmxhCitycl90ZXN0X0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKHJyX3Rlc3RfQ0ZMQUdTKSBcCisJJChDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorYW1fX3Nydl90ZXN0X1NPVVJDRVNfRElTVCA9IHNydi10ZXN0LmMKK0BIQVZFX0RCVVNfVFJVRUBhbV9zcnZfdGVzdF9PQkpFQ1RTID0gc3J2X3Rlc3Qtc3J2LXRlc3QuJChPQkpFWFQpCitzcnZfdGVzdF9PQkpFQ1RTID0gJChhbV9zcnZfdGVzdF9PQkpFQ1RTKQorQEhBVkVfREJVU19UUlVFQHNydl90ZXN0X0RFUEVOREVOQ0lFUyA9IGxpYmF2YWhpLWNsaWVudC5sYSBcCitASEFWRV9EQlVTX1RSVUVACS4uL2F2YWhpLWNvbW1vbi9saWJhdmFoaS1jb21tb24ubGEKK3Nydl90ZXN0X0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKHNydl90ZXN0X0NGTEFHUykgXAorCSQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKK2FtX194ZGdfY29uZmlnX3Rlc3RfU09VUkNFU19ESVNUID0geGRnLWNvbmZpZy10ZXN0LmMgeGRnLWNvbmZpZy5jIFwKKwl4ZGctY29uZmlnLmgKK0BIQVZFX0RCVVNfVFJVRUBhbV94ZGdfY29uZmlnX3Rlc3RfT0JKRUNUUyA9ICBcCitASEFWRV9EQlVTX1RSVUVACXhkZ19jb25maWdfdGVzdC14ZGctY29uZmlnLXRlc3QuJChPQkpFWFQpIFwKK0BIQVZFX0RCVVNfVFJVRUAJeGRnX2NvbmZpZ190ZXN0LXhkZy1jb25maWcuJChPQkpFWFQpCit4ZGdfY29uZmlnX3Rlc3RfT0JKRUNUUyA9ICQoYW1feGRnX2NvbmZpZ190ZXN0X09CSkVDVFMpCit4ZGdfY29uZmlnX3Rlc3RfREVQRU5ERU5DSUVTID0KK3hkZ19jb25maWdfdGVzdF9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKKwkkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgXAorCSQoeGRnX2NvbmZpZ190ZXN0X0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSBcCisJLW8gJEAKK0RFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpCitkZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCithbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcworYW1fX212ID0gbXYgLWYKK0NPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAorCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0xUQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpIFwKKwkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKKwkkKEFNX0NGTEFHUykgJChDRkxBR1MpCitBTV9WX0NDID0gJChhbV9fdl9DQ19AQU1fVkApCithbV9fdl9DQ18gPSAkKGFtX192X0NDX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICIgJEA7CitBTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCithbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfYXRfMCA9IEAKK0NDTEQgPSAkKENDKQorTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAorCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEX0BBTV9WQCkKK2FtX192X0NDTERfID0gJChhbV9fdl9DQ0xEX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfQ0NMRF8wID0gQGVjaG8gIiAgQ0NMRCAgIiAkQDsKK0FNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQorYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAiICRAOworU09VUkNFUyA9ICQobGliYXZhaGlfY2xpZW50X2xhX1NPVVJDRVMpICQoY2hlY2tfbnNzX3Rlc3RfU09VUkNFUykgXAorCSQoY2xpZW50X3Rlc3RfU09VUkNFUykgJChycl90ZXN0X1NPVVJDRVMpICQoc3J2X3Rlc3RfU09VUkNFUykgXAorCSQoeGRnX2NvbmZpZ190ZXN0X1NPVVJDRVMpCitESVNUX1NPVVJDRVMgPSAkKGFtX19saWJhdmFoaV9jbGllbnRfbGFfU09VUkNFU19ESVNUKSBcCisJJChhbV9fY2hlY2tfbnNzX3Rlc3RfU09VUkNFU19ESVNUKSBcCisJJChhbV9fY2xpZW50X3Rlc3RfU09VUkNFU19ESVNUKSAkKGFtX19ycl90ZXN0X1NPVVJDRVNfRElTVCkgXAorCSQoYW1fX3Nydl90ZXN0X1NPVVJDRVNfRElTVCkgXAorCSQoYW1fX3hkZ19jb25maWdfdGVzdF9TT1VSQ0VTX0RJU1QpCithbV9fYXZhaGlfY2xpZW50aW5jbHVkZV9IRUFERVJTX0RJU1QgPSBjbGllbnQuaCBsb29rdXAuaCBwdWJsaXNoLmgKK2FtX19ub2luc3RfSEVBREVSU19ESVNUID0gaW50ZXJuYWwuaAorSEVBREVSUyA9ICQoYXZhaGlfY2xpZW50aW5jbHVkZV9IRUFERVJTKSAkKG5vaW5zdF9IRUFERVJTKQorRVRBR1MgPSBldGFncworQ1RBR1MgPSBjdGFncworRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FMTF9MSU5HVUFTID0gQEFMTF9MSU5HVUFTQAorQU1UQVIgPSBAQU1UQVJACitBTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKK0FSID0gQEFSQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FWQUhJX0FVVE9JUERfR1JPVVAgPSBAQVZBSElfQVVUT0lQRF9HUk9VUEAKK0FWQUhJX0FVVE9JUERfVVNFUiA9IEBBVkFISV9BVVRPSVBEX1VTRVJACitBVkFISV9HUk9VUCA9IEBBVkFISV9HUk9VUEAKK0FWQUhJX1BSSVZfQUNDRVNTX0dST1VQID0gQEFWQUhJX1BSSVZfQUNDRVNTX0dST1VQQAorQVZBSElfVVNFUiA9IEBBVkFISV9VU0VSQAorQVdLID0gQEFXS0AKK0NBVEFMT0dTID0gQENBVEFMT0dTQAorQ0FUT0JKRVhUID0gQENBVE9CSkVYVEAKK0NDID0gQENDQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RBVEFESVJOQU1FID0gQERBVEFESVJOQU1FQAorREJVU19DRkxBR1MgPSBAREJVU19DRkxBR1NACitEQlVTX0xJQlMgPSBAREJVU19MSUJTQAorREJVU19TWVNURU1fQlVTX0RFRkFVTFRfQUREUkVTUyA9IEBEQlVTX1NZU1RFTV9CVVNfREVGQVVMVF9BRERSRVNTQAorREJVU19TWVNfRElSID0gQERCVVNfU1lTX0RJUkAKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitETExUT09MID0gQERMTFRPT0xACitET1hZR0VOX1BBUEVSX1NJWkUgPSBARE9YWUdFTl9QQVBFUl9TSVpFQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitEWF9DT05GSUcgPSBARFhfQ09ORklHQAorRFhfRE9DRElSID0gQERYX0RPQ0RJUkAKK0RYX0RPVCA9IEBEWF9ET1RACitEWF9ET1hZR0VOID0gQERYX0RPWFlHRU5ACitEWF9EVklQUyA9IEBEWF9EVklQU0AKK0RYX0VHUkVQID0gQERYX0VHUkVQQAorRFhfRU5WID0gQERYX0VOVkAKK0RYX0ZMQUdfY2hpID0gQERYX0ZMQUdfY2hpQAorRFhfRkxBR19jaG0gPSBARFhfRkxBR19jaG1ACitEWF9GTEFHX2RvYyA9IEBEWF9GTEFHX2RvY0AKK0RYX0ZMQUdfZG90ID0gQERYX0ZMQUdfZG90QAorRFhfRkxBR19odG1sID0gQERYX0ZMQUdfaHRtbEAKK0RYX0ZMQUdfbWFuID0gQERYX0ZMQUdfbWFuQAorRFhfRkxBR19wZGYgPSBARFhfRkxBR19wZGZACitEWF9GTEFHX3BzID0gQERYX0ZMQUdfcHNACitEWF9GTEFHX3J0ZiA9IEBEWF9GTEFHX3J0ZkAKK0RYX0ZMQUdfeG1sID0gQERYX0ZMQUdfeG1sQAorRFhfSEhDID0gQERYX0hIQ0AKK0RYX0xBVEVYID0gQERYX0xBVEVYQAorRFhfTUFLRUlOREVYID0gQERYX01BS0VJTkRFWEAKK0RYX1BERkxBVEVYID0gQERYX1BERkxBVEVYQAorRFhfUEVSTCA9IEBEWF9QRVJMQAorRFhfUFJPSkVDVCA9IEBEWF9QUk9KRUNUQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFWEVFWFQgPSBARVhFRVhUQAorRkdSRVAgPSBARkdSRVBACitHQUNVVElMID0gQEdBQ1VUSUxACitHRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAorR0xJQjIwX0NGTEFHUyA9IEBHTElCMjBfQ0ZMQUdTQAorR0xJQjIwX0xJQlMgPSBAR0xJQjIwX0xJQlNACitHTU9GSUxFUyA9IEBHTU9GSUxFU0AKK0dNU0dGTVQgPSBAR01TR0ZNVEAKK0dPQkpFQ1RfQ0ZMQUdTID0gQEdPQkpFQ1RfQ0ZMQUdTQAorR09CSkVDVF9MSUJTID0gQEdPQkpFQ1RfTElCU0AKK0dSRVAgPSBAR1JFUEAKK0dUSzIwX0NGTEFHUyA9IEBHVEsyMF9DRkxBR1NACitHVEsyMF9MSUJTID0gQEdUSzIwX0xJQlNACitHVEszMF9DRkxBR1MgPSBAR1RLMzBfQ0ZMQUdTQAorR1RLMzBfTElCUyA9IEBHVEszMF9MSUJTQAorSE9XTF9DT01QQVRfVkVSU0lPTiA9IEBIT1dMX0NPTVBBVF9WRVJTSU9OQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitJTlNUT0JKRVhUID0gQElOU1RPQkpFWFRACitJTlRMTElCUyA9IEBJTlRMTElCU0AKK0lOVExUT09MX0VYVFJBQ1QgPSBASU5UTFRPT0xfRVhUUkFDVEAKK0lOVExUT09MX01FUkdFID0gQElOVExUT09MX01FUkdFQAorSU5UTFRPT0xfUEVSTCA9IEBJTlRMVE9PTF9QRVJMQAorSU5UTFRPT0xfVVBEQVRFID0gQElOVExUT09MX1VQREFURUAKK0lOVFJPU1BFQ1RJT05fQ0ZMQUdTID0gQElOVFJPU1BFQ1RJT05fQ0ZMQUdTQAorSU5UUk9TUEVDVElPTl9DT01QSUxFUiA9IEBJTlRST1NQRUNUSU9OX0NPTVBJTEVSQAorSU5UUk9TUEVDVElPTl9HRU5FUkFURSA9IEBJTlRST1NQRUNUSU9OX0dFTkVSQVRFQAorSU5UUk9TUEVDVElPTl9HSVJESVIgPSBASU5UUk9TUEVDVElPTl9HSVJESVJACitJTlRST1NQRUNUSU9OX0xJQlMgPSBASU5UUk9TUEVDVElPTl9MSUJTQAorSU5UUk9TUEVDVElPTl9NQUtFRklMRSA9IEBJTlRST1NQRUNUSU9OX01BS0VGSUxFQAorSU5UUk9TUEVDVElPTl9TQ0FOTkVSID0gQElOVFJPU1BFQ1RJT05fU0NBTk5FUkAKK0lOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUiA9IEBJTlRST1NQRUNUSU9OX1RZUEVMSUJESVJACitMRCA9IEBMREAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQkFWQUhJX0NMSUVOVF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ0xJRU5UX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPTU1PTl9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ09NTU9OX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPTVBBVF9IT1dMX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DT01QQVRfSE9XTF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9DT01QQVRfTElCRE5TX1NEX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DT01QQVRfTElCRE5TX1NEX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPUkVfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NPUkVfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfR0xJQl9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfR0xJQl9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9HT0JKRUNUX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9HT0JKRUNUX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX1FUM19WRVJTSU9OX0lORk8gPSBATElCQVZBSElfUVQzX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX1FUNF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfUVQ0X1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX1VJX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9VSV9WRVJTSU9OX0lORk9ACitMSUJEQUVNT05fQ0ZMQUdTID0gQExJQkRBRU1PTl9DRkxBR1NACitMSUJEQUVNT05fTElCUyA9IEBMSUJEQUVNT05fTElCU0AKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKK0xOX1MgPSBATE5fU0AKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKK01DUyA9IEBNQ1NACitNREFTU0VNQkxFUiA9IEBNREFTU0VNQkxFUkAKK01LRElSX1AgPSBATUtESVJfUEAKK01LSU5TVEFMTERJUlMgPSBATUtJTlNUQUxMRElSU0AKK01PQ19RVDMgPSBATU9DX1FUM0AKK01PQ19RVDQgPSBATU9DX1FUNEAKK01PTk9ET0NFUiA9IEBNT05PRE9DRVJACitNT05PRE9DX0NGTEFHUyA9IEBNT05PRE9DX0NGTEFHU0AKK01PTk9ET0NfRElSID0gQE1PTk9ET0NfRElSQAorTU9OT0RPQ19MSUJTID0gQE1PTk9ET0NfTElCU0AKK01TR0ZNVCA9IEBNU0dGTVRACitNU0dGTVRfT1BUUyA9IEBNU0dGTVRfT1BUU0AKK01TR01FUkdFID0gQE1TR01FUkdFQAorTk0gPSBATk1ACitOTUVESVQgPSBATk1FRElUQAorT0JKRFVNUCA9IEBPQkpEVU1QQAorT0JKRVhUID0gQE9CSkVYVEAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQS0dfQ09ORklHX0xJQkRJUiA9IEBQS0dfQ09ORklHX0xJQkRJUkAKK1BLR19DT05GSUdfUEFUSCA9IEBQS0dfQ09ORklHX1BBVEhACitQT0ZJTEVTID0gQFBPRklMRVNACitQT1NVQiA9IEBQT1NVQkAKK1BPX0lOX0RBVEFESVJfRkFMU0UgPSBAUE9fSU5fREFUQURJUl9GQUxTRUAKK1BPX0lOX0RBVEFESVJfVFJVRSA9IEBQT19JTl9EQVRBRElSX1RSVUVACitQVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACitQVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKK1BUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACitQWVRIT04gPSBAUFlUSE9OQAorUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKK1BZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACitQWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACitQWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKK1FUM19DRkxBR1MgPSBAUVQzX0NGTEFHU0AKK1FUM19MSUJTID0gQFFUM19MSUJTQAorUVQ0X0NGTEFHUyA9IEBRVDRfQ0ZMQUdTQAorUVQ0X0xJQlMgPSBAUVQ0X0xJQlNACitSQU5MSUIgPSBAUkFOTElCQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTVE9XID0gQFNUT1dACitTVFJJUCA9IEBTVFJJUEAKK1VTRV9OTFMgPSBAVVNFX05MU0AKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1ZJU0lCSUxJVFlfSElEREVOX0NGTEFHUyA9IEBWSVNJQklMSVRZX0hJRERFTl9DRkxBR1NACitYR0VUVEVYVCA9IEBYR0VUVEVYVEAKK1hNTF9DRkxBR1MgPSBAWE1MX0NGTEFHU0AKK1hNTF9MSUJTID0gQFhNTF9MSUJTQAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorYWNfY3RfQVIgPSBAYWNfY3RfQVJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithY3hfcHRocmVhZF9jb25maWcgPSBAYWN4X3B0aHJlYWRfY29uZmlnQAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACithdmFoaV9ydW50aW1lX2RpciA9IEBhdmFoaV9ydW50aW1lX2RpckAKK2F2YWhpX3NvY2tldCA9IEBhdmFoaV9zb2NrZXRACithdmFoaWxvY2FsZWRpciA9IEBhdmFoaWxvY2FsZWRpckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraGF2ZV9wa2dfY29uZmlnID0gQGhhdmVfcGtnX2NvbmZpZ0AKK2hhdmVfeG1sdG9tYW4gPSBAaGF2ZV94bWx0b21hbkAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitpbnRlcmZhY2VzZGlyID0gQGludGVyZmFjZXNkaXJACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKK3BrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitweWV4ZWNkaXIgPSBAcHlleGVjZGlyQAorcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3N5c3RlbWRzeXN0ZW11bml0ZGlyID0gQHN5c3RlbWRzeXN0ZW11bml0ZGlyQAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK3RvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKK3RvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACisKKyMgVGhpcyBjb29sIGRlYnVnIHRyYXAgd29ya3Mgb24gaTM4Ni9nY2Mgb25seQorQU1fQ0ZMQUdTID0gLUkkKHRvcF9zcmNkaXIpICctRERFQlVHX1RSQVA9X19hc21fXygiaW50ICQkMyIpJworQEhBVkVfREJVU19UUlVFQGF2YWhpX2NsaWVudGluY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL2F2YWhpLWNsaWVudAorQEhBVkVfREJVU19UUlVFQGF2YWhpX2NsaWVudGluY2x1ZGVfSEVBREVSUyA9IGNsaWVudC5oIGxvb2t1cC5oIHB1Ymxpc2guaAorQEhBVkVfREJVU19UUlVFQG5vaW5zdF9IRUFERVJTID0gaW50ZXJuYWwuaAorQEhBVkVfREJVU19UUlVFQGxpYl9MVExJQlJBUklFUyA9IGxpYmF2YWhpLWNsaWVudC5sYQorQEhBVkVfREJVU19UUlVFQGxpYmF2YWhpX2NsaWVudF9sYV9TT1VSQ0VTID0gXAorQEhBVkVfREJVU19UUlVFQAljbGllbnQuYyBjbGllbnQuaCBcCitASEFWRV9EQlVTX1RSVUVACWVudHJ5Z3JvdXAuYyBcCitASEFWRV9EQlVTX1RSVUVACWJyb3dzZXIuYyBcCitASEFWRV9EQlVTX1RSVUVACXJlc29sdmVyLmMgXAorQEhBVkVfREJVU19UUlVFQAlwdWJsaXNoLmggbG9va3VwLmggXAorQEhBVkVfREJVU19UUlVFQAl4ZGctY29uZmlnLmMgeGRnLWNvbmZpZy5oIFwKK0BIQVZFX0RCVVNfVFJVRUAJY2hlY2stbnNzLmMgXAorQEhBVkVfREJVU19UUlVFQAkuLi9hdmFoaS1jb21tb24vZGJ1cy5jIC4uL2F2YWhpLWNvbW1vbi9kYnVzLmggXAorQEhBVkVfREJVU19UUlVFQAkuLi9hdmFoaS1jb21tb24vZGJ1cy13YXRjaC1nbHVlLmMgLi4vYXZhaGktY29tbW9uL2RidXMtd2F0Y2gtZ2x1ZS5oCisKK0BIQVZFX0RCVVNfVFJVRUBsaWJhdmFoaV9jbGllbnRfbGFfQ0ZMQUdTID0gJChBTV9DRkxBR1MpICQoREJVU19DRkxBR1MpIC1EREJVU19TWVNURU1fQlVTX0RFRkFVTFRfQUREUkVTUz1cIiQoREJVU19TWVNURU1fQlVTX0RFRkFVTFRfQUREUkVTUylcIgorQEhBVkVfREJVU19UUlVFQGxpYmF2YWhpX2NsaWVudF9sYV9MSUJBREQgPSAkKEFNX0xEQUREKSAkKERCVVNfTElCUykgXAorQEhBVkVfREJVU19UUlVFQAkuLi9hdmFoaS1jb21tb24vbGliYXZhaGktY29tbW9uLmxhIFwKK0BIQVZFX0RCVVNfVFJVRUAJJChhbV9fYXBwZW5kXzIpCitASEFWRV9EQlVTX1RSVUVAbGliYXZhaGlfY2xpZW50X2xhX0xERkxBR1MgPSAkKEFNX0xERkxBR1MpICAtdmVyc2lvbi1pbmZvICQoTElCQVZBSElfQ0xJRU5UX1ZFUlNJT05fSU5GTykKK0BIQVZFX0RCVVNfVFJVRUBjbGllbnRfdGVzdF9TT1VSQ0VTID0gY2xpZW50LXRlc3QuYworQEhBVkVfREJVU19UUlVFQGNsaWVudF90ZXN0X0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKQorQEhBVkVfREJVU19UUlVFQGNsaWVudF90ZXN0X0xEQUREID0gJChBTV9MREFERCkgbGliYXZhaGktY2xpZW50LmxhIC4uL2F2YWhpLWNvbW1vbi9saWJhdmFoaS1jb21tb24ubGEKK0BIQVZFX0RCVVNfVFJVRUBzcnZfdGVzdF9TT1VSQ0VTID0gc3J2LXRlc3QuYworQEhBVkVfREJVU19UUlVFQHNydl90ZXN0X0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKQorQEhBVkVfREJVU19UUlVFQHNydl90ZXN0X0xEQUREID0gJChBTV9MREFERCkgbGliYXZhaGktY2xpZW50LmxhIC4uL2F2YWhpLWNvbW1vbi9saWJhdmFoaS1jb21tb24ubGEKK0BIQVZFX0RCVVNfVFJVRUBycl90ZXN0X1NPVVJDRVMgPSByci10ZXN0LmMKK0BIQVZFX0RCVVNfVFJVRUBycl90ZXN0X0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKQorQEhBVkVfREJVU19UUlVFQHJyX3Rlc3RfTERBREQgPSAkKEFNX0xEQUREKSBsaWJhdmFoaS1jbGllbnQubGEgLi4vYXZhaGktY29tbW9uL2xpYmF2YWhpLWNvbW1vbi5sYQorQEhBVkVfREJVU19UUlVFQHhkZ19jb25maWdfdGVzdF9TT1VSQ0VTID0geGRnLWNvbmZpZy10ZXN0LmMgeGRnLWNvbmZpZy5jIHhkZy1jb25maWcuaAorQEhBVkVfREJVU19UUlVFQHhkZ19jb25maWdfdGVzdF9DRkxBR1MgPSAkKEFNX0NGTEFHUykKK0BIQVZFX0RCVVNfVFJVRUB4ZGdfY29uZmlnX3Rlc3RfTERBREQgPSAkKEFNX0xEQUREKQorQEhBVkVfREJVU19UUlVFQGNoZWNrX25zc190ZXN0X1NPVVJDRVMgPSBjaGVjay1uc3MuYyBjaGVjay1uc3MtdGVzdC5jIGNsaWVudC5oCitASEFWRV9EQlVTX1RSVUVAY2hlY2tfbnNzX3Rlc3RfQ0ZMQUdTID0gJChBTV9DRkxBR1MpCitASEFWRV9EQlVTX1RSVUVAY2hlY2tfbnNzX3Rlc3RfTERBREQgPSAkKEFNX0xEQUREKSAkKGFtX19hcHBlbmRfMSkKK2FsbDogYWxsLWFtCisKKy5TVUZGSVhFUzoKKy5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCisJICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduIGF2YWhpLWNsaWVudC9NYWtlZmlsZSc7IFwKKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gYXZhaGktY2xpZW50L01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKK2luc3RhbGwtbGliTFRMSUJSQVJJRVM6ICQobGliX0xUTElCUkFSSUVTKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQobGliZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQobGliZGlyKSIKKwlAbGlzdD0nJChsaWJfTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChsaWJkaXIpIiB8fCBsaXN0PTsgXAorCWxpc3QyPTsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICQkcDsgdGhlbiBcCisJICAgIGxpc3QyPSIkJGxpc3QyICQkcCI7IFwKKwkgIGVsc2UgOjsgZmk7IFwKKwlkb25lOyBcCisJdGVzdCAteiAiJCRsaXN0MiIgfHwgeyBcCisJICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgJyQoREVTVERJUikkKGxpYmRpciknIjsgXAorCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgIiQoREVTVERJUikkKGxpYmRpcikiOyBcCisJfQorCit1bmluc3RhbGwtbGliTFRMSUJSQVJJRVM6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChsaWJfTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChsaWJkaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgJChhbV9fc3RyaXBfZGlyKSBcCisJICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgJyQoREVTVERJUikkKGxpYmRpcikvJCRmJyI7IFwKKwkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICIkKERFU1RESVIpJChsaWJkaXIpLyQkZiI7IFwKKwlkb25lCisKK2NsZWFuLWxpYkxUTElCUkFSSUVTOgorCS10ZXN0IC16ICIkKGxpYl9MVExJQlJBUklFUykiIHx8IHJtIC1mICQobGliX0xUTElCUkFSSUVTKQorCUBsaXN0PSckKGxpYl9MVExJQlJBUklFUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGRpcj0iYGVjaG8gJCRwIHwgc2VkIC1lICdzfC9bXi9dKiQkfHwnYCI7IFwKKwkgIHRlc3QgIiQkZGlyIiAhPSAiJCRwIiB8fCBkaXI9LjsgXAorCSAgZWNobyAicm0gLWYgXCIkJHtkaXJ9L3NvX2xvY2F0aW9uc1wiIjsgXAorCSAgcm0gLWYgIiQke2Rpcn0vc29fbG9jYXRpb25zIjsgXAorCWRvbmUKK2xpYmF2YWhpLWNsaWVudC5sYTogJChsaWJhdmFoaV9jbGllbnRfbGFfT0JKRUNUUykgJChsaWJhdmFoaV9jbGllbnRfbGFfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYmF2YWhpX2NsaWVudF9sYV9ERVBFTkRFTkNJRVMpIAorCSQoQU1fVl9DQ0xEKSQobGliYXZhaGlfY2xpZW50X2xhX0xJTkspICQoYW1fbGliYXZhaGlfY2xpZW50X2xhX3JwYXRoKSAkKGxpYmF2YWhpX2NsaWVudF9sYV9PQkpFQ1RTKSAkKGxpYmF2YWhpX2NsaWVudF9sYV9MSUJBREQpICQoTElCUykKKworY2xlYW4tbm9pbnN0UFJPR1JBTVM6CisJQGxpc3Q9JyQobm9pbnN0X1BST0dSQU1TKSc7IHRlc3QgLW4gIiQkbGlzdCIgfHwgZXhpdCAwOyBcCisJZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKKwlybSAtZiAkJGxpc3QgfHwgZXhpdCAkJD87IFwKKwl0ZXN0IC1uICIkKEVYRUVYVCkiIHx8IGV4aXQgMDsgXAorCWxpc3Q9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAncy8kKEVYRUVYVCkkJC8vJ2A7IFwKKwllY2hvICIgcm0gLWYiICQkbGlzdDsgXAorCXJtIC1mICQkbGlzdAorY2hlY2stbnNzLXRlc3QkKEVYRUVYVCk6ICQoY2hlY2tfbnNzX3Rlc3RfT0JKRUNUUykgJChjaGVja19uc3NfdGVzdF9ERVBFTkRFTkNJRVMpICQoRVhUUkFfY2hlY2tfbnNzX3Rlc3RfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgY2hlY2stbnNzLXRlc3QkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKGNoZWNrX25zc190ZXN0X0xJTkspICQoY2hlY2tfbnNzX3Rlc3RfT0JKRUNUUykgJChjaGVja19uc3NfdGVzdF9MREFERCkgJChMSUJTKQorY2xpZW50LXRlc3QkKEVYRUVYVCk6ICQoY2xpZW50X3Rlc3RfT0JKRUNUUykgJChjbGllbnRfdGVzdF9ERVBFTkRFTkNJRVMpICQoRVhUUkFfY2xpZW50X3Rlc3RfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgY2xpZW50LXRlc3QkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKGNsaWVudF90ZXN0X0xJTkspICQoY2xpZW50X3Rlc3RfT0JKRUNUUykgJChjbGllbnRfdGVzdF9MREFERCkgJChMSUJTKQorcnItdGVzdCQoRVhFRVhUKTogJChycl90ZXN0X09CSkVDVFMpICQocnJfdGVzdF9ERVBFTkRFTkNJRVMpICQoRVhUUkFfcnJfdGVzdF9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiByci10ZXN0JChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChycl90ZXN0X0xJTkspICQocnJfdGVzdF9PQkpFQ1RTKSAkKHJyX3Rlc3RfTERBREQpICQoTElCUykKK3Nydi10ZXN0JChFWEVFWFQpOiAkKHNydl90ZXN0X09CSkVDVFMpICQoc3J2X3Rlc3RfREVQRU5ERU5DSUVTKSAkKEVYVFJBX3Nydl90ZXN0X0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIHNydi10ZXN0JChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChzcnZfdGVzdF9MSU5LKSAkKHNydl90ZXN0X09CSkVDVFMpICQoc3J2X3Rlc3RfTERBREQpICQoTElCUykKK3hkZy1jb25maWctdGVzdCQoRVhFRVhUKTogJCh4ZGdfY29uZmlnX3Rlc3RfT0JKRUNUUykgJCh4ZGdfY29uZmlnX3Rlc3RfREVQRU5ERU5DSUVTKSAkKEVYVFJBX3hkZ19jb25maWdfdGVzdF9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiB4ZGctY29uZmlnLXRlc3QkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKHhkZ19jb25maWdfdGVzdF9MSU5LKSAkKHhkZ19jb25maWdfdGVzdF9PQkpFQ1RTKSAkKHhkZ19jb25maWdfdGVzdF9MREFERCkgJChMSUJTKQorCittb3N0bHljbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLiQoT0JKRVhUKQorCitkaXN0Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi50YWIuYworCitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvY2hlY2tfbnNzX3Rlc3QtY2hlY2stbnNzLXRlc3QuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2NoZWNrX25zc190ZXN0LWNoZWNrLW5zcy5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvY2xpZW50X3Rlc3QtY2xpZW50LXRlc3QuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmF2YWhpX2NsaWVudF9sYS1icm93c2VyLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliYXZhaGlfY2xpZW50X2xhLWNoZWNrLW5zcy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmF2YWhpX2NsaWVudF9sYS1jbGllbnQuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJhdmFoaV9jbGllbnRfbGEtZGJ1cy13YXRjaC1nbHVlLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliYXZhaGlfY2xpZW50X2xhLWRidXMuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJhdmFoaV9jbGllbnRfbGEtZW50cnlncm91cC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmF2YWhpX2NsaWVudF9sYS1yZXNvbHZlci5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmF2YWhpX2NsaWVudF9sYS14ZGctY29uZmlnLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcnJfdGVzdC1yci10ZXN0LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zcnZfdGVzdC1zcnYtdGVzdC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikveGRnX2NvbmZpZ190ZXN0LXhkZy1jb25maWctdGVzdC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikveGRnX2NvbmZpZ190ZXN0LXhkZy1jb25maWcuUG9AYW1fX3F1b3RlQAorCisuYy5vOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAkPAorCisuYy5vYmo6CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgYCQoQ1lHUEFUSF9XKSAnJDwnYAorCisuYy5sbzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKKworbGliYXZhaGlfY2xpZW50X2xhLWNsaWVudC5sbzogY2xpZW50LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV9jbGllbnRfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmF2YWhpX2NsaWVudF9sYS1jbGllbnQubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmF2YWhpX2NsaWVudF9sYS1jbGllbnQuVHBvIC1jIC1vIGxpYmF2YWhpX2NsaWVudF9sYS1jbGllbnQubG8gYHRlc3QgLWYgJ2NsaWVudC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BjbGllbnQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliYXZhaGlfY2xpZW50X2xhLWNsaWVudC5UcG8gJChERVBESVIpL2xpYmF2YWhpX2NsaWVudF9sYS1jbGllbnQuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nY2xpZW50LmMnIG9iamVjdD0nbGliYXZhaGlfY2xpZW50X2xhLWNsaWVudC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmF2YWhpX2NsaWVudF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJhdmFoaV9jbGllbnRfbGEtY2xpZW50LmxvIGB0ZXN0IC1mICdjbGllbnQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgY2xpZW50LmMKKworbGliYXZhaGlfY2xpZW50X2xhLWVudHJ5Z3JvdXAubG86IGVudHJ5Z3JvdXAuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmF2YWhpX2NsaWVudF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliYXZhaGlfY2xpZW50X2xhLWVudHJ5Z3JvdXAubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmF2YWhpX2NsaWVudF9sYS1lbnRyeWdyb3VwLlRwbyAtYyAtbyBsaWJhdmFoaV9jbGllbnRfbGEtZW50cnlncm91cC5sbyBgdGVzdCAtZiAnZW50cnlncm91cC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BlbnRyeWdyb3VwLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmF2YWhpX2NsaWVudF9sYS1lbnRyeWdyb3VwLlRwbyAkKERFUERJUikvbGliYXZhaGlfY2xpZW50X2xhLWVudHJ5Z3JvdXAuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZW50cnlncm91cC5jJyBvYmplY3Q9J2xpYmF2YWhpX2NsaWVudF9sYS1lbnRyeWdyb3VwLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliYXZhaGlfY2xpZW50X2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmF2YWhpX2NsaWVudF9sYS1lbnRyeWdyb3VwLmxvIGB0ZXN0IC1mICdlbnRyeWdyb3VwLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVudHJ5Z3JvdXAuYworCitsaWJhdmFoaV9jbGllbnRfbGEtYnJvd3Nlci5sbzogYnJvd3Nlci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliYXZhaGlfY2xpZW50X2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJhdmFoaV9jbGllbnRfbGEtYnJvd3Nlci5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliYXZhaGlfY2xpZW50X2xhLWJyb3dzZXIuVHBvIC1jIC1vIGxpYmF2YWhpX2NsaWVudF9sYS1icm93c2VyLmxvIGB0ZXN0IC1mICdicm93c2VyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGJyb3dzZXIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliYXZhaGlfY2xpZW50X2xhLWJyb3dzZXIuVHBvICQoREVQRElSKS9saWJhdmFoaV9jbGllbnRfbGEtYnJvd3Nlci5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdicm93c2VyLmMnIG9iamVjdD0nbGliYXZhaGlfY2xpZW50X2xhLWJyb3dzZXIubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV9jbGllbnRfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliYXZhaGlfY2xpZW50X2xhLWJyb3dzZXIubG8gYHRlc3QgLWYgJ2Jyb3dzZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYnJvd3Nlci5jCisKK2xpYmF2YWhpX2NsaWVudF9sYS1yZXNvbHZlci5sbzogcmVzb2x2ZXIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmF2YWhpX2NsaWVudF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliYXZhaGlfY2xpZW50X2xhLXJlc29sdmVyLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJhdmFoaV9jbGllbnRfbGEtcmVzb2x2ZXIuVHBvIC1jIC1vIGxpYmF2YWhpX2NsaWVudF9sYS1yZXNvbHZlci5sbyBgdGVzdCAtZiAncmVzb2x2ZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgcmVzb2x2ZXIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliYXZhaGlfY2xpZW50X2xhLXJlc29sdmVyLlRwbyAkKERFUERJUikvbGliYXZhaGlfY2xpZW50X2xhLXJlc29sdmVyLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3Jlc29sdmVyLmMnIG9iamVjdD0nbGliYXZhaGlfY2xpZW50X2xhLXJlc29sdmVyLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliYXZhaGlfY2xpZW50X2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmF2YWhpX2NsaWVudF9sYS1yZXNvbHZlci5sbyBgdGVzdCAtZiAncmVzb2x2ZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgcmVzb2x2ZXIuYworCitsaWJhdmFoaV9jbGllbnRfbGEteGRnLWNvbmZpZy5sbzogeGRnLWNvbmZpZy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliYXZhaGlfY2xpZW50X2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJhdmFoaV9jbGllbnRfbGEteGRnLWNvbmZpZy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliYXZhaGlfY2xpZW50X2xhLXhkZy1jb25maWcuVHBvIC1jIC1vIGxpYmF2YWhpX2NsaWVudF9sYS14ZGctY29uZmlnLmxvIGB0ZXN0IC1mICd4ZGctY29uZmlnLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHhkZy1jb25maWcuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliYXZhaGlfY2xpZW50X2xhLXhkZy1jb25maWcuVHBvICQoREVQRElSKS9saWJhdmFoaV9jbGllbnRfbGEteGRnLWNvbmZpZy5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSd4ZGctY29uZmlnLmMnIG9iamVjdD0nbGliYXZhaGlfY2xpZW50X2xhLXhkZy1jb25maWcubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV9jbGllbnRfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliYXZhaGlfY2xpZW50X2xhLXhkZy1jb25maWcubG8gYHRlc3QgLWYgJ3hkZy1jb25maWcuYycgfHwgZWNobyAnJChzcmNkaXIpLydgeGRnLWNvbmZpZy5jCisKK2xpYmF2YWhpX2NsaWVudF9sYS1jaGVjay1uc3MubG86IGNoZWNrLW5zcy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliYXZhaGlfY2xpZW50X2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJhdmFoaV9jbGllbnRfbGEtY2hlY2stbnNzLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJhdmFoaV9jbGllbnRfbGEtY2hlY2stbnNzLlRwbyAtYyAtbyBsaWJhdmFoaV9jbGllbnRfbGEtY2hlY2stbnNzLmxvIGB0ZXN0IC1mICdjaGVjay1uc3MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgY2hlY2stbnNzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmF2YWhpX2NsaWVudF9sYS1jaGVjay1uc3MuVHBvICQoREVQRElSKS9saWJhdmFoaV9jbGllbnRfbGEtY2hlY2stbnNzLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2NoZWNrLW5zcy5jJyBvYmplY3Q9J2xpYmF2YWhpX2NsaWVudF9sYS1jaGVjay1uc3MubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV9jbGllbnRfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliYXZhaGlfY2xpZW50X2xhLWNoZWNrLW5zcy5sbyBgdGVzdCAtZiAnY2hlY2stbnNzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGNoZWNrLW5zcy5jCisKK2xpYmF2YWhpX2NsaWVudF9sYS1kYnVzLmxvOiAuLi9hdmFoaS1jb21tb24vZGJ1cy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliYXZhaGlfY2xpZW50X2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJhdmFoaV9jbGllbnRfbGEtZGJ1cy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliYXZhaGlfY2xpZW50X2xhLWRidXMuVHBvIC1jIC1vIGxpYmF2YWhpX2NsaWVudF9sYS1kYnVzLmxvIGB0ZXN0IC1mICcuLi9hdmFoaS1jb21tb24vZGJ1cy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2AuLi9hdmFoaS1jb21tb24vZGJ1cy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJhdmFoaV9jbGllbnRfbGEtZGJ1cy5UcG8gJChERVBESVIpL2xpYmF2YWhpX2NsaWVudF9sYS1kYnVzLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9Jy4uL2F2YWhpLWNvbW1vbi9kYnVzLmMnIG9iamVjdD0nbGliYXZhaGlfY2xpZW50X2xhLWRidXMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV9jbGllbnRfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliYXZhaGlfY2xpZW50X2xhLWRidXMubG8gYHRlc3QgLWYgJy4uL2F2YWhpLWNvbW1vbi9kYnVzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYC4uL2F2YWhpLWNvbW1vbi9kYnVzLmMKKworbGliYXZhaGlfY2xpZW50X2xhLWRidXMtd2F0Y2gtZ2x1ZS5sbzogLi4vYXZhaGktY29tbW9uL2RidXMtd2F0Y2gtZ2x1ZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliYXZhaGlfY2xpZW50X2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJhdmFoaV9jbGllbnRfbGEtZGJ1cy13YXRjaC1nbHVlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJhdmFoaV9jbGllbnRfbGEtZGJ1cy13YXRjaC1nbHVlLlRwbyAtYyAtbyBsaWJhdmFoaV9jbGllbnRfbGEtZGJ1cy13YXRjaC1nbHVlLmxvIGB0ZXN0IC1mICcuLi9hdmFoaS1jb21tb24vZGJ1cy13YXRjaC1nbHVlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYC4uL2F2YWhpLWNvbW1vbi9kYnVzLXdhdGNoLWdsdWUuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliYXZhaGlfY2xpZW50X2xhLWRidXMtd2F0Y2gtZ2x1ZS5UcG8gJChERVBESVIpL2xpYmF2YWhpX2NsaWVudF9sYS1kYnVzLXdhdGNoLWdsdWUuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nLi4vYXZhaGktY29tbW9uL2RidXMtd2F0Y2gtZ2x1ZS5jJyBvYmplY3Q9J2xpYmF2YWhpX2NsaWVudF9sYS1kYnVzLXdhdGNoLWdsdWUubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV9jbGllbnRfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliYXZhaGlfY2xpZW50X2xhLWRidXMtd2F0Y2gtZ2x1ZS5sbyBgdGVzdCAtZiAnLi4vYXZhaGktY29tbW9uL2RidXMtd2F0Y2gtZ2x1ZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2AuLi9hdmFoaS1jb21tb24vZGJ1cy13YXRjaC1nbHVlLmMKKworY2hlY2tfbnNzX3Rlc3QtY2hlY2stbnNzLm86IGNoZWNrLW5zcy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoY2hlY2tfbnNzX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGNoZWNrX25zc190ZXN0LWNoZWNrLW5zcy5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9jaGVja19uc3NfdGVzdC1jaGVjay1uc3MuVHBvIC1jIC1vIGNoZWNrX25zc190ZXN0LWNoZWNrLW5zcy5vIGB0ZXN0IC1mICdjaGVjay1uc3MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgY2hlY2stbnNzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2NoZWNrX25zc190ZXN0LWNoZWNrLW5zcy5UcG8gJChERVBESVIpL2NoZWNrX25zc190ZXN0LWNoZWNrLW5zcy5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2NoZWNrLW5zcy5jJyBvYmplY3Q9J2NoZWNrX25zc190ZXN0LWNoZWNrLW5zcy5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChjaGVja19uc3NfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBjaGVja19uc3NfdGVzdC1jaGVjay1uc3MubyBgdGVzdCAtZiAnY2hlY2stbnNzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGNoZWNrLW5zcy5jCisKK2NoZWNrX25zc190ZXN0LWNoZWNrLW5zcy5vYmo6IGNoZWNrLW5zcy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoY2hlY2tfbnNzX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGNoZWNrX25zc190ZXN0LWNoZWNrLW5zcy5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2NoZWNrX25zc190ZXN0LWNoZWNrLW5zcy5UcG8gLWMgLW8gY2hlY2tfbnNzX3Rlc3QtY2hlY2stbnNzLm9iaiBgaWYgdGVzdCAtZiAnY2hlY2stbnNzLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnY2hlY2stbnNzLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2NoZWNrLW5zcy5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9jaGVja19uc3NfdGVzdC1jaGVjay1uc3MuVHBvICQoREVQRElSKS9jaGVja19uc3NfdGVzdC1jaGVjay1uc3MuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdjaGVjay1uc3MuYycgb2JqZWN0PSdjaGVja19uc3NfdGVzdC1jaGVjay1uc3Mub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChjaGVja19uc3NfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBjaGVja19uc3NfdGVzdC1jaGVjay1uc3Mub2JqIGBpZiB0ZXN0IC1mICdjaGVjay1uc3MuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdjaGVjay1uc3MuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvY2hlY2stbnNzLmMnOyBmaWAKKworY2hlY2tfbnNzX3Rlc3QtY2hlY2stbnNzLXRlc3QubzogY2hlY2stbnNzLXRlc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGNoZWNrX25zc190ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBjaGVja19uc3NfdGVzdC1jaGVjay1uc3MtdGVzdC5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9jaGVja19uc3NfdGVzdC1jaGVjay1uc3MtdGVzdC5UcG8gLWMgLW8gY2hlY2tfbnNzX3Rlc3QtY2hlY2stbnNzLXRlc3QubyBgdGVzdCAtZiAnY2hlY2stbnNzLXRlc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgY2hlY2stbnNzLXRlc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvY2hlY2tfbnNzX3Rlc3QtY2hlY2stbnNzLXRlc3QuVHBvICQoREVQRElSKS9jaGVja19uc3NfdGVzdC1jaGVjay1uc3MtdGVzdC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2NoZWNrLW5zcy10ZXN0LmMnIG9iamVjdD0nY2hlY2tfbnNzX3Rlc3QtY2hlY2stbnNzLXRlc3QubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoY2hlY2tfbnNzX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gY2hlY2tfbnNzX3Rlc3QtY2hlY2stbnNzLXRlc3QubyBgdGVzdCAtZiAnY2hlY2stbnNzLXRlc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgY2hlY2stbnNzLXRlc3QuYworCitjaGVja19uc3NfdGVzdC1jaGVjay1uc3MtdGVzdC5vYmo6IGNoZWNrLW5zcy10ZXN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChjaGVja19uc3NfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgY2hlY2tfbnNzX3Rlc3QtY2hlY2stbnNzLXRlc3Qub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9jaGVja19uc3NfdGVzdC1jaGVjay1uc3MtdGVzdC5UcG8gLWMgLW8gY2hlY2tfbnNzX3Rlc3QtY2hlY2stbnNzLXRlc3Qub2JqIGBpZiB0ZXN0IC1mICdjaGVjay1uc3MtdGVzdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2NoZWNrLW5zcy10ZXN0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2NoZWNrLW5zcy10ZXN0LmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2NoZWNrX25zc190ZXN0LWNoZWNrLW5zcy10ZXN0LlRwbyAkKERFUERJUikvY2hlY2tfbnNzX3Rlc3QtY2hlY2stbnNzLXRlc3QuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdjaGVjay1uc3MtdGVzdC5jJyBvYmplY3Q9J2NoZWNrX25zc190ZXN0LWNoZWNrLW5zcy10ZXN0Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoY2hlY2tfbnNzX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gY2hlY2tfbnNzX3Rlc3QtY2hlY2stbnNzLXRlc3Qub2JqIGBpZiB0ZXN0IC1mICdjaGVjay1uc3MtdGVzdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2NoZWNrLW5zcy10ZXN0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2NoZWNrLW5zcy10ZXN0LmMnOyBmaWAKKworY2xpZW50X3Rlc3QtY2xpZW50LXRlc3QubzogY2xpZW50LXRlc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGNsaWVudF90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBjbGllbnRfdGVzdC1jbGllbnQtdGVzdC5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9jbGllbnRfdGVzdC1jbGllbnQtdGVzdC5UcG8gLWMgLW8gY2xpZW50X3Rlc3QtY2xpZW50LXRlc3QubyBgdGVzdCAtZiAnY2xpZW50LXRlc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgY2xpZW50LXRlc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvY2xpZW50X3Rlc3QtY2xpZW50LXRlc3QuVHBvICQoREVQRElSKS9jbGllbnRfdGVzdC1jbGllbnQtdGVzdC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2NsaWVudC10ZXN0LmMnIG9iamVjdD0nY2xpZW50X3Rlc3QtY2xpZW50LXRlc3QubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoY2xpZW50X3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gY2xpZW50X3Rlc3QtY2xpZW50LXRlc3QubyBgdGVzdCAtZiAnY2xpZW50LXRlc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgY2xpZW50LXRlc3QuYworCitjbGllbnRfdGVzdC1jbGllbnQtdGVzdC5vYmo6IGNsaWVudC10ZXN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChjbGllbnRfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgY2xpZW50X3Rlc3QtY2xpZW50LXRlc3Qub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9jbGllbnRfdGVzdC1jbGllbnQtdGVzdC5UcG8gLWMgLW8gY2xpZW50X3Rlc3QtY2xpZW50LXRlc3Qub2JqIGBpZiB0ZXN0IC1mICdjbGllbnQtdGVzdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2NsaWVudC10ZXN0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2NsaWVudC10ZXN0LmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2NsaWVudF90ZXN0LWNsaWVudC10ZXN0LlRwbyAkKERFUERJUikvY2xpZW50X3Rlc3QtY2xpZW50LXRlc3QuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdjbGllbnQtdGVzdC5jJyBvYmplY3Q9J2NsaWVudF90ZXN0LWNsaWVudC10ZXN0Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoY2xpZW50X3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gY2xpZW50X3Rlc3QtY2xpZW50LXRlc3Qub2JqIGBpZiB0ZXN0IC1mICdjbGllbnQtdGVzdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2NsaWVudC10ZXN0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2NsaWVudC10ZXN0LmMnOyBmaWAKKworcnJfdGVzdC1yci10ZXN0Lm86IHJyLXRlc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHJyX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHJyX3Rlc3QtcnItdGVzdC5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9ycl90ZXN0LXJyLXRlc3QuVHBvIC1jIC1vIHJyX3Rlc3QtcnItdGVzdC5vIGB0ZXN0IC1mICdyci10ZXN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHJyLXRlc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvcnJfdGVzdC1yci10ZXN0LlRwbyAkKERFUERJUikvcnJfdGVzdC1yci10ZXN0LlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ncnItdGVzdC5jJyBvYmplY3Q9J3JyX3Rlc3QtcnItdGVzdC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChycl90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHJyX3Rlc3QtcnItdGVzdC5vIGB0ZXN0IC1mICdyci10ZXN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHJyLXRlc3QuYworCitycl90ZXN0LXJyLXRlc3Qub2JqOiByci10ZXN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChycl90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBycl90ZXN0LXJyLXRlc3Qub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9ycl90ZXN0LXJyLXRlc3QuVHBvIC1jIC1vIHJyX3Rlc3QtcnItdGVzdC5vYmogYGlmIHRlc3QgLWYgJ3JyLXRlc3QuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdyci10ZXN0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3JyLXRlc3QuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvcnJfdGVzdC1yci10ZXN0LlRwbyAkKERFUERJUikvcnJfdGVzdC1yci10ZXN0LlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ncnItdGVzdC5jJyBvYmplY3Q9J3JyX3Rlc3QtcnItdGVzdC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHJyX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gcnJfdGVzdC1yci10ZXN0Lm9iaiBgaWYgdGVzdCAtZiAncnItdGVzdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3JyLXRlc3QuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvcnItdGVzdC5jJzsgZmlgCisKK3Nydl90ZXN0LXNydi10ZXN0Lm86IHNydi10ZXN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChzcnZfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgc3J2X3Rlc3Qtc3J2LXRlc3QubyAtTUQgLU1QIC1NRiAkKERFUERJUikvc3J2X3Rlc3Qtc3J2LXRlc3QuVHBvIC1jIC1vIHNydl90ZXN0LXNydi10ZXN0Lm8gYHRlc3QgLWYgJ3Nydi10ZXN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNydi10ZXN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3Nydl90ZXN0LXNydi10ZXN0LlRwbyAkKERFUERJUikvc3J2X3Rlc3Qtc3J2LXRlc3QuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdzcnYtdGVzdC5jJyBvYmplY3Q9J3Nydl90ZXN0LXNydi10ZXN0Lm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHNydl90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHNydl90ZXN0LXNydi10ZXN0Lm8gYHRlc3QgLWYgJ3Nydi10ZXN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNydi10ZXN0LmMKKworc3J2X3Rlc3Qtc3J2LXRlc3Qub2JqOiBzcnYtdGVzdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoc3J2X3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHNydl90ZXN0LXNydi10ZXN0Lm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvc3J2X3Rlc3Qtc3J2LXRlc3QuVHBvIC1jIC1vIHNydl90ZXN0LXNydi10ZXN0Lm9iaiBgaWYgdGVzdCAtZiAnc3J2LXRlc3QuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdzcnYtdGVzdC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9zcnYtdGVzdC5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9zcnZfdGVzdC1zcnYtdGVzdC5UcG8gJChERVBESVIpL3Nydl90ZXN0LXNydi10ZXN0LlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nc3J2LXRlc3QuYycgb2JqZWN0PSdzcnZfdGVzdC1zcnYtdGVzdC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHNydl90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHNydl90ZXN0LXNydi10ZXN0Lm9iaiBgaWYgdGVzdCAtZiAnc3J2LXRlc3QuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdzcnYtdGVzdC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9zcnYtdGVzdC5jJzsgZmlgCisKK3hkZ19jb25maWdfdGVzdC14ZGctY29uZmlnLXRlc3QubzogeGRnLWNvbmZpZy10ZXN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh4ZGdfY29uZmlnX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHhkZ19jb25maWdfdGVzdC14ZGctY29uZmlnLXRlc3QubyAtTUQgLU1QIC1NRiAkKERFUERJUikveGRnX2NvbmZpZ190ZXN0LXhkZy1jb25maWctdGVzdC5UcG8gLWMgLW8geGRnX2NvbmZpZ190ZXN0LXhkZy1jb25maWctdGVzdC5vIGB0ZXN0IC1mICd4ZGctY29uZmlnLXRlc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgeGRnLWNvbmZpZy10ZXN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3hkZ19jb25maWdfdGVzdC14ZGctY29uZmlnLXRlc3QuVHBvICQoREVQRElSKS94ZGdfY29uZmlnX3Rlc3QteGRnLWNvbmZpZy10ZXN0LlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0neGRnLWNvbmZpZy10ZXN0LmMnIG9iamVjdD0neGRnX2NvbmZpZ190ZXN0LXhkZy1jb25maWctdGVzdC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh4ZGdfY29uZmlnX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8geGRnX2NvbmZpZ190ZXN0LXhkZy1jb25maWctdGVzdC5vIGB0ZXN0IC1mICd4ZGctY29uZmlnLXRlc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgeGRnLWNvbmZpZy10ZXN0LmMKKworeGRnX2NvbmZpZ190ZXN0LXhkZy1jb25maWctdGVzdC5vYmo6IHhkZy1jb25maWctdGVzdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoeGRnX2NvbmZpZ190ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCB4ZGdfY29uZmlnX3Rlc3QteGRnLWNvbmZpZy10ZXN0Lm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikveGRnX2NvbmZpZ190ZXN0LXhkZy1jb25maWctdGVzdC5UcG8gLWMgLW8geGRnX2NvbmZpZ190ZXN0LXhkZy1jb25maWctdGVzdC5vYmogYGlmIHRlc3QgLWYgJ3hkZy1jb25maWctdGVzdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3hkZy1jb25maWctdGVzdC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS94ZGctY29uZmlnLXRlc3QuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikveGRnX2NvbmZpZ190ZXN0LXhkZy1jb25maWctdGVzdC5UcG8gJChERVBESVIpL3hkZ19jb25maWdfdGVzdC14ZGctY29uZmlnLXRlc3QuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSd4ZGctY29uZmlnLXRlc3QuYycgb2JqZWN0PSd4ZGdfY29uZmlnX3Rlc3QteGRnLWNvbmZpZy10ZXN0Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoeGRnX2NvbmZpZ190ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHhkZ19jb25maWdfdGVzdC14ZGctY29uZmlnLXRlc3Qub2JqIGBpZiB0ZXN0IC1mICd4ZGctY29uZmlnLXRlc3QuYyc7IHRoZW4gJChDWUdQQVRIX1cpICd4ZGctY29uZmlnLXRlc3QuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikveGRnLWNvbmZpZy10ZXN0LmMnOyBmaWAKKworeGRnX2NvbmZpZ190ZXN0LXhkZy1jb25maWcubzogeGRnLWNvbmZpZy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoeGRnX2NvbmZpZ190ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCB4ZGdfY29uZmlnX3Rlc3QteGRnLWNvbmZpZy5vIC1NRCAtTVAgLU1GICQoREVQRElSKS94ZGdfY29uZmlnX3Rlc3QteGRnLWNvbmZpZy5UcG8gLWMgLW8geGRnX2NvbmZpZ190ZXN0LXhkZy1jb25maWcubyBgdGVzdCAtZiAneGRnLWNvbmZpZy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B4ZGctY29uZmlnLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3hkZ19jb25maWdfdGVzdC14ZGctY29uZmlnLlRwbyAkKERFUERJUikveGRnX2NvbmZpZ190ZXN0LXhkZy1jb25maWcuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSd4ZGctY29uZmlnLmMnIG9iamVjdD0neGRnX2NvbmZpZ190ZXN0LXhkZy1jb25maWcubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoeGRnX2NvbmZpZ190ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHhkZ19jb25maWdfdGVzdC14ZGctY29uZmlnLm8gYHRlc3QgLWYgJ3hkZy1jb25maWcuYycgfHwgZWNobyAnJChzcmNkaXIpLydgeGRnLWNvbmZpZy5jCisKK3hkZ19jb25maWdfdGVzdC14ZGctY29uZmlnLm9iajogeGRnLWNvbmZpZy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoeGRnX2NvbmZpZ190ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCB4ZGdfY29uZmlnX3Rlc3QteGRnLWNvbmZpZy5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL3hkZ19jb25maWdfdGVzdC14ZGctY29uZmlnLlRwbyAtYyAtbyB4ZGdfY29uZmlnX3Rlc3QteGRnLWNvbmZpZy5vYmogYGlmIHRlc3QgLWYgJ3hkZy1jb25maWcuYyc7IHRoZW4gJChDWUdQQVRIX1cpICd4ZGctY29uZmlnLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3hkZy1jb25maWcuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikveGRnX2NvbmZpZ190ZXN0LXhkZy1jb25maWcuVHBvICQoREVQRElSKS94ZGdfY29uZmlnX3Rlc3QteGRnLWNvbmZpZy5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3hkZy1jb25maWcuYycgb2JqZWN0PSd4ZGdfY29uZmlnX3Rlc3QteGRnLWNvbmZpZy5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHhkZ19jb25maWdfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyB4ZGdfY29uZmlnX3Rlc3QteGRnLWNvbmZpZy5vYmogYGlmIHRlc3QgLWYgJ3hkZy1jb25maWcuYyc7IHRoZW4gJChDWUdQQVRIX1cpICd4ZGctY29uZmlnLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3hkZy1jb25maWcuYyc7IGZpYAorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworaW5zdGFsbC1hdmFoaV9jbGllbnRpbmNsdWRlSEVBREVSUzogJChhdmFoaV9jbGllbnRpbmNsdWRlX0hFQURFUlMpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJdGVzdCAteiAiJChhdmFoaV9jbGllbnRpbmNsdWRlZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQoYXZhaGlfY2xpZW50aW5jbHVkZWRpcikiCisJQGxpc3Q9JyQoYXZhaGlfY2xpZW50aW5jbHVkZV9IRUFERVJTKSc7IHRlc3QgLW4gIiQoYXZhaGlfY2xpZW50aW5jbHVkZWRpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAorCSAgZWNobyAiJCRkJCRwIjsgXAorCWRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAorCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKKwkgIGVjaG8gIiAkKElOU1RBTExfSEVBREVSKSAkJGZpbGVzICckKERFU1RESVIpJChhdmFoaV9jbGllbnRpbmNsdWRlZGlyKSciOyBcCisJICAkKElOU1RBTExfSEVBREVSKSAkJGZpbGVzICIkKERFU1RESVIpJChhdmFoaV9jbGllbnRpbmNsdWRlZGlyKSIgfHwgZXhpdCAkJD87IFwKKwlkb25lCisKK3VuaW5zdGFsbC1hdmFoaV9jbGllbnRpbmNsdWRlSEVBREVSUzoKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKGF2YWhpX2NsaWVudGluY2x1ZGVfSEVBREVSUyknOyB0ZXN0IC1uICIkKGF2YWhpX2NsaWVudGluY2x1ZGVkaXIpIiB8fCBsaXN0PTsgXAorCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgc2VkIC1lICdzfF4uKi98fCdgOyBcCisJZGlyPSckKERFU1RESVIpJChhdmFoaV9jbGllbnRpbmNsdWRlZGlyKSc7ICQoYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpcikKKworSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlta2lkIC1mSUQgJCR1bmlxdWUKK3RhZ3M6IFRBR1MKKworVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlzZXQgeDsgXAorCWhlcmU9YHB3ZGA7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJc2hpZnQ7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKKwkgIGVsc2UgXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgJCR1bmlxdWU7IFwKKwkgIGZpOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAorCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorCSAgICAgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUgJChMVExJQlJBUklFUykgJChQUk9HUkFNUykgJChIRUFERVJTKQoraW5zdGFsbGRpcnM6CisJZm9yIGRpciBpbiAiJChERVNURElSKSQobGliZGlyKSIgIiQoREVTVERJUikkKGF2YWhpX2NsaWVudGluY2x1ZGVkaXIpIjsgZG8gXAorCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAorCWRvbmUKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgICAgIGluc3RhbGw7IFwKKwllbHNlIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAorCWZpCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tYW0KKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGliTFRMSUJSQVJJRVMgY2xlYW4tbGlidG9vbCBcCisJY2xlYW4tbm9pbnN0UFJPR1JBTVMgbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKKwlkaXN0Y2xlYW4tdGFncworCitkdmk6IGR2aS1hbQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtYW0KKworaHRtbC1hbToKKworaW5mbzogaW5mby1hbQorCitpbmZvLWFtOgorCitpbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtYXZhaGlfY2xpZW50aW5jbHVkZUhFQURFUlMKKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCisKK2luc3RhbGwtZHZpLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06IGluc3RhbGwtbGliTFRMSUJSQVJJRVMKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtYXZhaGlfY2xpZW50aW5jbHVkZUhFQURFUlMgXAorCXVuaW5zdGFsbC1saWJMVExJQlJBUklFUworCisuTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisKKy5QSE9OWTogQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKKwljbGVhbi1saWJMVExJQlJBUklFUyBjbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdFBST0dSQU1TIGN0YWdzIFwKKwlkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIFwKKwlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gXAorCWluc3RhbGwtYXZhaGlfY2xpZW50aW5jbHVkZUhFQURFUlMgaW5zdGFsbC1kYXRhIFwKKwlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIFwKKwlpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gXAorCWluc3RhbGwtaW5mby1hbSBpbnN0YWxsLWxpYkxUTElCUkFSSUVTIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIFwKKwlpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBcCisJaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIFwKKwltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBcCisJbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAorCXRhZ3MgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSBcCisJdW5pbnN0YWxsLWF2YWhpX2NsaWVudGluY2x1ZGVIRUFERVJTIHVuaW5zdGFsbC1saWJMVExJQlJBUklFUworCisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jbGllbnQvYnJvd3Nlci5jIGIvYXZhaGktMC42LjMxL2F2YWhpLWNsaWVudC9icm93c2VyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk3OGQ5NAotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jbGllbnQvYnJvd3Nlci5jCkBAIC0wLDAgKzEsMTAyNSBAQAorLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSA8ZGJ1cy9kYnVzLmg+CisKKyNpbmNsdWRlIDxhdmFoaS1jbGllbnQvY2xpZW50Lmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2RidXMuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vbGxpc3QuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vZXJyb3IuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vbWFsbG9jLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2RvbWFpbi5oPgorCisjaW5jbHVkZSAiY2xpZW50LmgiCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJ4ZGctY29uZmlnLmgiCisKK3N0YXRpYyB2b2lkIHBhcnNlX2Vudmlyb25tZW50KEF2YWhpRG9tYWluQnJvd3NlciAqYikgeworICAgIGNoYXIgYnVmW0FWQUhJX0RPTUFJTl9OQU1FX01BWCozXSwgKmUsICp0LCAqcDsKKworICAgIGFzc2VydChiKTsKKworICAgIGlmICghKGUgPSBnZXRlbnYoIkFWQUhJX0JST1dTRV9ET01BSU5TIikpKQorICAgICAgICByZXR1cm47CisKKyAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMiLCBlKTsKKworICAgIGZvciAodCA9IHN0cnRva19yKGJ1ZiwgIjoiLCAmcCk7IHQ7IHQgPSBzdHJ0b2tfcihOVUxMLCAiOiIsICZwKSkgeworICAgICAgICBjaGFyIGRvbWFpbltBVkFISV9ET01BSU5fTkFNRV9NQVhdOworICAgICAgICBpZiAoYXZhaGlfbm9ybWFsaXplX25hbWUodCwgZG9tYWluLCBzaXplb2YoZG9tYWluKSkpCisgICAgICAgICAgICBiLT5zdGF0aWNfYnJvd3NlX2RvbWFpbnMgPSBhdmFoaV9zdHJpbmdfbGlzdF9hZGQoYi0+c3RhdGljX2Jyb3dzZV9kb21haW5zLCBkb21haW4pOworICAgIH0KK30KKworc3RhdGljIHZvaWQgcGFyc2VfZG9tYWluX2ZpbGUoQXZhaGlEb21haW5Ccm93c2VyICpiKSB7CisgICAgRklMRSAqZjsKKyAgICBjaGFyIGJ1ZltBVkFISV9ET01BSU5fTkFNRV9NQVhdOworCisgICAgYXNzZXJ0KGIpOworCisgICAgaWYgKCEoZiA9IGF2YWhpX3hkZ19jb25maWdfb3BlbigiYXZhaGkvYnJvd3NlLWRvbWFpbnMiKSkpCisgICAgICAgIHJldHVybjsKKworCisgICAgd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiktMSwgZikpIHsKKyAgICAgICAgY2hhciBkb21haW5bQVZBSElfRE9NQUlOX05BTUVfTUFYXTsKKyAgICAgICAgYnVmW3N0cmNzcG4oYnVmLCAiXG5cciIpXSA9IDA7CisKKyAgICAgICAgaWYgKGF2YWhpX25vcm1hbGl6ZV9uYW1lKGJ1ZiwgZG9tYWluLCBzaXplb2YoZG9tYWluKSkpCisgICAgICAgICAgICBiLT5zdGF0aWNfYnJvd3NlX2RvbWFpbnMgPSBhdmFoaV9zdHJpbmdfbGlzdF9hZGQoYi0+c3RhdGljX2Jyb3dzZV9kb21haW5zLCBkb21haW4pOworICAgIH0KK30KKworc3RhdGljIHZvaWQgZG9tYWluX2Jyb3dzZXJfcmVmKEF2YWhpRG9tYWluQnJvd3NlciAqZGIpIHsKKyAgICBhc3NlcnQoZGIpOworICAgIGFzc2VydChkYi0+cmVmID49IDEpOworICAgIGRiLT5yZWYrKzsKK30KKworc3RhdGljIHZvaWQgZGVmZXJfdGltZW91dF9jYWxsYmFjayhBdmFoaVRpbWVvdXQgKnQsIHZvaWQgKnVzZXJkYXRhKSB7CisgICAgQXZhaGlEb21haW5Ccm93c2VyICpkYiA9IHVzZXJkYXRhOworICAgIEF2YWhpU3RyaW5nTGlzdCAqbDsKKyAgICBhc3NlcnQodCk7CisKKyAgICBkYi0+Y2xpZW50LT5wb2xsX2FwaS0+dGltZW91dF9mcmVlKGRiLT5kZWZlcl90aW1lb3V0KTsKKyAgICBkYi0+ZGVmZXJfdGltZW91dCA9IE5VTEw7CisKKyAgICBkb21haW5fYnJvd3Nlcl9yZWYoZGIpOworCisgICAgZm9yIChsID0gZGItPnN0YXRpY19icm93c2VfZG9tYWluczsgbDsgbCA9IGwtPm5leHQpIHsKKworICAgICAgICBpZiAoZGItPnJlZiA8PSAxKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGItPmNhbGxiYWNrKGRiLCBBVkFISV9JRl9VTlNQRUMsIEFWQUhJX1BST1RPX1VOU1BFQywgQVZBSElfQlJPV1NFUl9ORVcsIChjaGFyKikgbC0+dGV4dCwgQVZBSElfTE9PS1VQX1JFU1VMVF9TVEFUSUMsIGRiLT51c2VyZGF0YSk7CisgICAgfQorCisgICAgYXZhaGlfZG9tYWluX2Jyb3dzZXJfZnJlZShkYik7Cit9CisKK0F2YWhpRG9tYWluQnJvd3NlciogYXZhaGlfZG9tYWluX2Jyb3dzZXJfbmV3KAorICAgIEF2YWhpQ2xpZW50ICpjbGllbnQsCisgICAgQXZhaGlJZkluZGV4IGludGVyZmFjZSwKKyAgICBBdmFoaVByb3RvY29sIHByb3RvY29sLAorICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwKKyAgICBBdmFoaURvbWFpbkJyb3dzZXJUeXBlIGJ0eXBlLAorICAgIEF2YWhpTG9va3VwRmxhZ3MgZmxhZ3MsCisgICAgQXZhaGlEb21haW5Ccm93c2VyQ2FsbGJhY2sgY2FsbGJhY2ssCisgICAgdm9pZCAqdXNlcmRhdGEpIHsKKworICAgIEF2YWhpRG9tYWluQnJvd3NlciAqZGIgPSBOVUxMOworICAgIERCdXNNZXNzYWdlICptZXNzYWdlID0gTlVMTCwgKnJlcGx5ID0gTlVMTDsKKyAgICBEQnVzRXJyb3IgZXJyb3I7CisgICAgY2hhciAqcGF0aDsKKyAgICBpbnQzMl90IGlfaW50ZXJmYWNlLCBpX3Byb3RvY29sLCBidDsKKyAgICB1aW50MzJfdCB1X2ZsYWdzOworCisgICAgYXNzZXJ0KGNsaWVudCk7CisgICAgYXNzZXJ0KGNhbGxiYWNrKTsKKworICAgIGRidXNfZXJyb3JfaW5pdCAoJmVycm9yKTsKKworICAgIGlmICghYXZhaGlfY2xpZW50X2lzX2Nvbm5lY3RlZChjbGllbnQpKSB7CisgICAgICAgIGF2YWhpX2NsaWVudF9zZXRfZXJybm8oY2xpZW50LCBBVkFISV9FUlJfQkFEX1NUQVRFKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGlmICghZG9tYWluKQorICAgICAgICBkb21haW4gPSAiIjsKKworICAgIGlmICghKGRiID0gYXZhaGlfbmV3IChBdmFoaURvbWFpbkJyb3dzZXIsIDEpKSkgeworICAgICAgICBhdmFoaV9jbGllbnRfc2V0X2Vycm5vKGNsaWVudCwgQVZBSElfRVJSX05PX01FTU9SWSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBkYi0+cmVmID0gMTsKKyAgICBkYi0+Y2xpZW50ID0gY2xpZW50OworICAgIGRiLT5jYWxsYmFjayA9IGNhbGxiYWNrOworICAgIGRiLT51c2VyZGF0YSA9IHVzZXJkYXRhOworICAgIGRiLT5wYXRoID0gTlVMTDsKKyAgICBkYi0+aW50ZXJmYWNlID0gaW50ZXJmYWNlOworICAgIGRiLT5wcm90b2NvbCA9IHByb3RvY29sOworICAgIGRiLT5zdGF0aWNfYnJvd3NlX2RvbWFpbnMgPSBOVUxMOworICAgIGRiLT5kZWZlcl90aW1lb3V0ID0gTlVMTDsKKworICAgIEFWQUhJX0xMSVNUX1BSRVBFTkQoQXZhaGlEb21haW5Ccm93c2VyLCBkb21haW5fYnJvd3NlcnMsIGNsaWVudC0+ZG9tYWluX2Jyb3dzZXJzLCBkYik7CisKKyAgICBpZiAoIShjbGllbnQtPmZsYWdzICYgQVZBSElfQ0xJRU5UX0lHTk9SRV9VU0VSX0NPTkZJRykpIHsKKyAgICAgICAgcGFyc2VfZW52aXJvbm1lbnQoZGIpOworICAgICAgICBwYXJzZV9kb21haW5fZmlsZShkYik7CisgICAgfQorCisgICAgZGItPnN0YXRpY19icm93c2VfZG9tYWlucyA9IGF2YWhpX3N0cmluZ19saXN0X3JldmVyc2UoZGItPnN0YXRpY19icm93c2VfZG9tYWlucyk7CisKKyAgICBpZiAoIShtZXNzYWdlID0gZGJ1c19tZXNzYWdlX25ld19tZXRob2RfY2FsbCAoQVZBSElfREJVU19OQU1FLCBBVkFISV9EQlVTX1BBVEhfU0VSVkVSLCBBVkFISV9EQlVTX0lOVEVSRkFDRV9TRVJWRVIsICJEb21haW5Ccm93c2VyTmV3IikpKSB7CisgICAgICAgIGF2YWhpX2NsaWVudF9zZXRfZXJybm8oY2xpZW50LCBBVkFISV9FUlJfTk9fTUVNT1JZKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGlfaW50ZXJmYWNlID0gKGludDMyX3QpIGludGVyZmFjZTsKKyAgICBpX3Byb3RvY29sID0gKGludDMyX3QpIHByb3RvY29sOworICAgIHVfZmxhZ3MgPSAodWludDMyX3QpIGZsYWdzOworICAgIGJ0ID0gYnR5cGU7CisKKyAgICBpZiAoIShkYnVzX21lc3NhZ2VfYXBwZW5kX2FyZ3MoCisgICAgICAgICAgICAgIG1lc3NhZ2UsCisgICAgICAgICAgICAgIERCVVNfVFlQRV9JTlQzMiwgJmlfaW50ZXJmYWNlLAorICAgICAgICAgICAgICBEQlVTX1RZUEVfSU5UMzIsICZpX3Byb3RvY29sLAorICAgICAgICAgICAgICBEQlVTX1RZUEVfU1RSSU5HLCAmZG9tYWluLAorICAgICAgICAgICAgICBEQlVTX1RZUEVfSU5UMzIsICZidCwKKyAgICAgICAgICAgICAgREJVU19UWVBFX1VJTlQzMiwgJnVfZmxhZ3MsCisgICAgICAgICAgICAgIERCVVNfVFlQRV9JTlZBTElEKSkpIHsKKyAgICAgICAgYXZhaGlfY2xpZW50X3NldF9lcnJubyhjbGllbnQsIEFWQUhJX0VSUl9OT19NRU1PUlkpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKCEocmVwbHkgPSBkYnVzX2Nvbm5lY3Rpb25fc2VuZF93aXRoX3JlcGx5X2FuZF9ibG9jayAoY2xpZW50LT5idXMsIG1lc3NhZ2UsIC0xLCAmZXJyb3IpKSB8fAorICAgICAgICBkYnVzX2Vycm9yX2lzX3NldCgmZXJyb3IpKSB7CisgICAgICAgIGF2YWhpX2NsaWVudF9zZXRfZXJybm8oY2xpZW50LCBBVkFISV9FUlJfREJVU19FUlJPUik7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBpZiAoIWRidXNfbWVzc2FnZV9nZXRfYXJncyAocmVwbHksICZlcnJvciwgREJVU19UWVBFX09CSkVDVF9QQVRILCAmcGF0aCwgREJVU19UWVBFX0lOVkFMSUQpIHx8CisgICAgICAgIGRidXNfZXJyb3JfaXNfc2V0KCZlcnJvcikgfHwKKyAgICAgICAgIXBhdGgpIHsKKyAgICAgICAgYXZhaGlfY2xpZW50X3NldF9lcnJubyhjbGllbnQsIEFWQUhJX0VSUl9EQlVTX0VSUk9SKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGlmICghKGRiLT5wYXRoID0gYXZhaGlfc3RyZHVwKHBhdGgpKSkgeworCisgICAgICAgIC8qIEZJWE1FOiBXZSBkb24ndCByZW1vdmUgdGhlIG9iamVjdCBvbiB0aGUgc2VydmVyIHNpZGUgKi8KKworICAgICAgICBhdmFoaV9jbGllbnRfc2V0X2Vycm5vKGNsaWVudCwgQVZBSElfRVJSX05PX01FTU9SWSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBpZiAoZGItPnN0YXRpY19icm93c2VfZG9tYWlucyAmJiBidHlwZSA9PSBBVkFISV9ET01BSU5fQlJPV1NFUl9CUk9XU0UpIHsKKyAgICAgICAgc3RydWN0IHRpbWV2YWwgdHYgPSB7IDAsIDAgfTsKKworICAgICAgICBpZiAoIShkYi0+ZGVmZXJfdGltZW91dCA9IGNsaWVudC0+cG9sbF9hcGktPnRpbWVvdXRfbmV3KGNsaWVudC0+cG9sbF9hcGksICZ0diwgZGVmZXJfdGltZW91dF9jYWxsYmFjaywgZGIpKSkgeworICAgICAgICAgICAgYXZhaGlfY2xpZW50X3NldF9lcnJubyhjbGllbnQsIEFWQUhJX0VSUl9OT19NRU1PUlkpOworICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CisgICAgfQorCisgICAgZGJ1c19tZXNzYWdlX3VucmVmKG1lc3NhZ2UpOworICAgIGRidXNfbWVzc2FnZV91bnJlZihyZXBseSk7CisKKyAgICByZXR1cm4gZGI7CisKK2ZhaWw6CisKKyAgICBpZiAoZGJ1c19lcnJvcl9pc19zZXQoJmVycm9yKSkgeworICAgICAgICBhdmFoaV9jbGllbnRfc2V0X2RidXNfZXJyb3IoY2xpZW50LCAmZXJyb3IpOworICAgICAgICBkYnVzX2Vycm9yX2ZyZWUoJmVycm9yKTsKKyAgICB9CisKKyAgICBpZiAoZGIpCisgICAgICAgIGF2YWhpX2RvbWFpbl9icm93c2VyX2ZyZWUoZGIpOworCisgICAgaWYgKG1lc3NhZ2UpCisgICAgICAgIGRidXNfbWVzc2FnZV91bnJlZihtZXNzYWdlKTsKKworICAgIGlmIChyZXBseSkKKyAgICAgICAgZGJ1c19tZXNzYWdlX3VucmVmKHJlcGx5KTsKKworICAgIHJldHVybiBOVUxMOworfQorCitBdmFoaUNsaWVudCogYXZhaGlfZG9tYWluX2Jyb3dzZXJfZ2V0X2NsaWVudCAoQXZhaGlEb21haW5Ccm93c2VyICpiKSB7CisgICAgYXNzZXJ0KGIpOworICAgIHJldHVybiBiLT5jbGllbnQ7Cit9CisKK2ludCBhdmFoaV9kb21haW5fYnJvd3Nlcl9mcmVlIChBdmFoaURvbWFpbkJyb3dzZXIgKmIpIHsKKyAgICBBdmFoaUNsaWVudCAqY2xpZW50OworICAgIGludCByID0gQVZBSElfT0s7CisKKyAgICBhc3NlcnQoYik7CisgICAgYXNzZXJ0KGItPnJlZiA+PSAxKTsKKworICAgIGlmICgtLShiLT5yZWYpID49IDEpCisgICAgICAgIHJldHVybiBBVkFISV9PSzsKKworICAgIGNsaWVudCA9IGItPmNsaWVudDsKKworICAgIGlmIChiLT5wYXRoICYmIGF2YWhpX2NsaWVudF9pc19jb25uZWN0ZWQoYi0+Y2xpZW50KSkKKyAgICAgICAgciA9IGF2YWhpX2NsaWVudF9zaW1wbGVfbWV0aG9kX2NhbGwoY2xpZW50LCBiLT5wYXRoLCBBVkFISV9EQlVTX0lOVEVSRkFDRV9ET01BSU5fQlJPV1NFUiwgIkZyZWUiKTsKKworICAgIEFWQUhJX0xMSVNUX1JFTU9WRShBdmFoaURvbWFpbkJyb3dzZXIsIGRvbWFpbl9icm93c2VycywgY2xpZW50LT5kb21haW5fYnJvd3NlcnMsIGIpOworCisgICAgaWYgKGItPmRlZmVyX3RpbWVvdXQpCisgICAgICAgIGItPmNsaWVudC0+cG9sbF9hcGktPnRpbWVvdXRfZnJlZShiLT5kZWZlcl90aW1lb3V0KTsKKworICAgIGF2YWhpX3N0cmluZ19saXN0X2ZyZWUoYi0+c3RhdGljX2Jyb3dzZV9kb21haW5zKTsKKyAgICBhdmFoaV9mcmVlKGItPnBhdGgpOworICAgIGF2YWhpX2ZyZWUoYik7CisKKyAgICByZXR1cm4gcjsKK30KKworREJ1c0hhbmRsZXJSZXN1bHQgYXZhaGlfZG9tYWluX2Jyb3dzZXJfZXZlbnQgKEF2YWhpQ2xpZW50ICpjbGllbnQsIEF2YWhpQnJvd3NlckV2ZW50IGV2ZW50LCBEQnVzTWVzc2FnZSAqbWVzc2FnZSkgeworICAgIEF2YWhpRG9tYWluQnJvd3NlciAqZGIgPSBOVUxMOworICAgIERCdXNFcnJvciBlcnJvcjsKKyAgICBjb25zdCBjaGFyICpwYXRoOworICAgIGNoYXIgKmRvbWFpbiA9IE5VTEw7CisgICAgaW50MzJfdCBpbnRlcmZhY2UsIHByb3RvY29sOworICAgIHVpbnQzMl90IGZsYWdzID0gMDsKKyAgICBBdmFoaVN0cmluZ0xpc3QgKmw7CisKKyAgICBhc3NlcnQoY2xpZW50KTsKKyAgICBhc3NlcnQobWVzc2FnZSk7CisKKyAgICBkYnVzX2Vycm9yX2luaXQgKCZlcnJvcik7CisKKyAgICBpZiAoIShwYXRoID0gZGJ1c19tZXNzYWdlX2dldF9wYXRoKG1lc3NhZ2UpKSkKKyAgICAgICAgZ290byBmYWlsOworCisgICAgZm9yIChkYiA9IGNsaWVudC0+ZG9tYWluX2Jyb3dzZXJzOyBkYjsgZGIgPSBkYi0+ZG9tYWluX2Jyb3dzZXJzX25leHQpCisgICAgICAgIGlmIChzdHJjbXAgKGRiLT5wYXRoLCBwYXRoKSA9PSAwKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICBpZiAoIWRiKQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICBpbnRlcmZhY2UgPSBkYi0+aW50ZXJmYWNlOworICAgIHByb3RvY29sID0gZGItPnByb3RvY29sOworCisgICAgc3dpdGNoIChldmVudCkgeworICAgICAgICBjYXNlIEFWQUhJX0JST1dTRVJfTkVXOgorICAgICAgICBjYXNlIEFWQUhJX0JST1dTRVJfUkVNT1ZFOgorCisgICAgICAgICAgICBpZiAoIWRidXNfbWVzc2FnZV9nZXRfYXJncygKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSwgJmVycm9yLAorICAgICAgICAgICAgICAgICAgICBEQlVTX1RZUEVfSU5UMzIsICZpbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgICAgIERCVVNfVFlQRV9JTlQzMiwgJnByb3RvY29sLAorICAgICAgICAgICAgICAgICAgICBEQlVTX1RZUEVfU1RSSU5HLCAmZG9tYWluLAorICAgICAgICAgICAgICAgICAgICBEQlVTX1RZUEVfVUlOVDMyLCAmZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgIERCVVNfVFlQRV9JTlZBTElEKSB8fAorICAgICAgICAgICAgICAgIGRidXNfZXJyb3JfaXNfc2V0ICgmZXJyb3IpKSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gcGFyc2UgYnJvd3NlciBldmVudC5cbiIpOworICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBVkFISV9CUk9XU0VSX0NBQ0hFX0VYSEFVU1RFRDoKKyAgICAgICAgY2FzZSBBVkFISV9CUk9XU0VSX0FMTF9GT1JfTk9XOgorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBVkFISV9CUk9XU0VSX0ZBSUxVUkU6IHsKKyAgICAgICAgICAgIGNoYXIgKmV0eHQ7CisKKyAgICAgICAgICAgIGlmICghZGJ1c19tZXNzYWdlX2dldF9hcmdzKAorICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLCAmZXJyb3IsCisgICAgICAgICAgICAgICAgICAgIERCVVNfVFlQRV9TVFJJTkcsICZldHh0LAorICAgICAgICAgICAgICAgICAgICBEQlVTX1RZUEVfSU5WQUxJRCkgfHwKKyAgICAgICAgICAgICAgICBkYnVzX2Vycm9yX2lzX3NldCAoJmVycm9yKSkgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIHBhcnNlIGJyb3dzZXIgZXZlbnQuXG4iKTsKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGF2YWhpX2NsaWVudF9zZXRfZXJybm8oZGItPmNsaWVudCwgYXZhaGlfZXJyb3JfZGJ1c190b19udW1iZXIoZXR4dCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZG9tYWluKQorICAgICAgICBmb3IgKGwgPSBkYi0+c3RhdGljX2Jyb3dzZV9kb21haW5zOyBsOyBsID0gbC0+bmV4dCkKKyAgICAgICAgICAgIGlmIChhdmFoaV9kb21haW5fZXF1YWwoKGNoYXIqKSBsLT50ZXh0LCBkb21haW4pKSB7CisgICAgICAgICAgICAgICAgLyogV2UgaGFkIHRoaXMgZW50cnkgYWxyZWFkeSBpbiB0aGUgc3RhdGljIGVudHJpZXMgKi8KKyAgICAgICAgICAgICAgICByZXR1cm4gREJVU19IQU5ETEVSX1JFU1VMVF9IQU5ETEVEOworICAgICAgICAgICAgfQorCisgICAgZGItPmNhbGxiYWNrKGRiLCAoQXZhaGlJZkluZGV4KSBpbnRlcmZhY2UsIChBdmFoaVByb3RvY29sKSBwcm90b2NvbCwgZXZlbnQsIGRvbWFpbiwgKEF2YWhpTG9va3VwUmVzdWx0RmxhZ3MpIGZsYWdzLCBkYi0+dXNlcmRhdGEpOworCisgICAgcmV0dXJuIERCVVNfSEFORExFUl9SRVNVTFRfSEFORExFRDsKKworZmFpbDoKKyAgICBkYnVzX2Vycm9yX2ZyZWUgKCZlcnJvcik7CisgICAgcmV0dXJuIERCVVNfSEFORExFUl9SRVNVTFRfTk9UX1lFVF9IQU5ETEVEOworfQorCisvKiBBdmFoaVNlcnZpY2VUeXBlQnJvd3NlciAqLworCitBdmFoaVNlcnZpY2VUeXBlQnJvd3NlciogYXZhaGlfc2VydmljZV90eXBlX2Jyb3dzZXJfbmV3KAorICAgIEF2YWhpQ2xpZW50ICpjbGllbnQsCisgICAgQXZhaGlJZkluZGV4IGludGVyZmFjZSwKKyAgICBBdmFoaVByb3RvY29sIHByb3RvY29sLAorICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwKKyAgICBBdmFoaUxvb2t1cEZsYWdzIGZsYWdzLAorICAgIEF2YWhpU2VydmljZVR5cGVCcm93c2VyQ2FsbGJhY2sgY2FsbGJhY2ssCisgICAgdm9pZCAqdXNlcmRhdGEpIHsKKworICAgIEF2YWhpU2VydmljZVR5cGVCcm93c2VyICpiID0gTlVMTDsKKyAgICBEQnVzTWVzc2FnZSAqbWVzc2FnZSA9IE5VTEwsICpyZXBseSA9IE5VTEw7CisgICAgREJ1c0Vycm9yIGVycm9yOworICAgIGNoYXIgKnBhdGg7CisgICAgaW50MzJfdCBpX2ludGVyZmFjZSwgaV9wcm90b2NvbDsKKyAgICB1aW50MzJfdCB1X2ZsYWdzOworCisgICAgYXNzZXJ0KGNsaWVudCk7CisgICAgYXNzZXJ0KGNhbGxiYWNrKTsKKworICAgIGRidXNfZXJyb3JfaW5pdCgmZXJyb3IpOworCisgICAgaWYgKCFhdmFoaV9jbGllbnRfaXNfY29ubmVjdGVkKGNsaWVudCkpIHsKKyAgICAgICAgYXZhaGlfY2xpZW50X3NldF9lcnJubyhjbGllbnQsIEFWQUhJX0VSUl9CQURfU1RBVEUpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKCFkb21haW4pCisgICAgICAgIGRvbWFpbiA9ICIiOworCisgICAgaWYgKCEoYiA9IGF2YWhpX25ldyhBdmFoaVNlcnZpY2VUeXBlQnJvd3NlciwgMSkpKSB7CisgICAgICAgIGF2YWhpX2NsaWVudF9zZXRfZXJybm8oY2xpZW50LCBBVkFISV9FUlJfTk9fTUVNT1JZKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGItPmNsaWVudCA9IGNsaWVudDsKKyAgICBiLT5jYWxsYmFjayA9IGNhbGxiYWNrOworICAgIGItPnVzZXJkYXRhID0gdXNlcmRhdGE7CisgICAgYi0+cGF0aCA9IE5VTEw7CisgICAgYi0+ZG9tYWluID0gTlVMTDsKKyAgICBiLT5pbnRlcmZhY2UgPSBpbnRlcmZhY2U7CisgICAgYi0+cHJvdG9jb2wgPSBwcm90b2NvbDsKKworICAgIEFWQUhJX0xMSVNUX1BSRVBFTkQoQXZhaGlTZXJ2aWNlVHlwZUJyb3dzZXIsIHNlcnZpY2VfdHlwZV9icm93c2VycywgY2xpZW50LT5zZXJ2aWNlX3R5cGVfYnJvd3NlcnMsIGIpOworCisgICAgaWYgKGRvbWFpblswXSkKKyAgICAgICAgaWYgKCEoYi0+ZG9tYWluID0gYXZhaGlfc3RyZHVwKGRvbWFpbikpKSB7CisgICAgICAgICAgICBhdmFoaV9jbGllbnRfc2V0X2Vycm5vKGNsaWVudCwgQVZBSElfRVJSX05PX01FTU9SWSk7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKworICAgIGlmICghKG1lc3NhZ2UgPSBkYnVzX21lc3NhZ2VfbmV3X21ldGhvZF9jYWxsIChBVkFISV9EQlVTX05BTUUsIEFWQUhJX0RCVVNfUEFUSF9TRVJWRVIsIEFWQUhJX0RCVVNfSU5URVJGQUNFX1NFUlZFUiwgIlNlcnZpY2VUeXBlQnJvd3Nlck5ldyIpKSkgeworICAgICAgICBhdmFoaV9jbGllbnRfc2V0X2Vycm5vKGNsaWVudCwgQVZBSElfRVJSX05PX01FTU9SWSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBpX2ludGVyZmFjZSA9IChpbnQzMl90KSBpbnRlcmZhY2U7CisgICAgaV9wcm90b2NvbCA9IChpbnQzMl90KSBwcm90b2NvbDsKKyAgICB1X2ZsYWdzID0gKHVpbnQzMl90KSBmbGFnczsKKworICAgIGlmICghZGJ1c19tZXNzYWdlX2FwcGVuZF9hcmdzKAorICAgICAgICAgICAgbWVzc2FnZSwKKyAgICAgICAgICAgIERCVVNfVFlQRV9JTlQzMiwgJmlfaW50ZXJmYWNlLAorICAgICAgICAgICAgREJVU19UWVBFX0lOVDMyLCAmaV9wcm90b2NvbCwKKyAgICAgICAgICAgIERCVVNfVFlQRV9TVFJJTkcsICZkb21haW4sCisgICAgICAgICAgICBEQlVTX1RZUEVfVUlOVDMyLCAmdV9mbGFncywKKyAgICAgICAgICAgIERCVVNfVFlQRV9JTlZBTElEKSkgeworICAgICAgICBhdmFoaV9jbGllbnRfc2V0X2Vycm5vKGNsaWVudCwgQVZBSElfRVJSX05PX01FTU9SWSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBpZiAoIShyZXBseSA9IGRidXNfY29ubmVjdGlvbl9zZW5kX3dpdGhfcmVwbHlfYW5kX2Jsb2NrIChjbGllbnQtPmJ1cywgbWVzc2FnZSwgLTEsICZlcnJvcikpIHx8CisgICAgICAgIGRidXNfZXJyb3JfaXNfc2V0KCZlcnJvcikpIHsKKyAgICAgICAgYXZhaGlfY2xpZW50X3NldF9lcnJubyhjbGllbnQsIEFWQUhJX0VSUl9EQlVTX0VSUk9SKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGlmICghZGJ1c19tZXNzYWdlX2dldF9hcmdzIChyZXBseSwgJmVycm9yLCBEQlVTX1RZUEVfT0JKRUNUX1BBVEgsICZwYXRoLCBEQlVTX1RZUEVfSU5WQUxJRCkgfHwKKyAgICAgICAgZGJ1c19lcnJvcl9pc19zZXQoJmVycm9yKSB8fAorICAgICAgICAhcGF0aCkgeworICAgICAgICBhdmFoaV9jbGllbnRfc2V0X2Vycm5vKGNsaWVudCwgQVZBSElfRVJSX0RCVVNfRVJST1IpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKCEoYi0+cGF0aCA9IGF2YWhpX3N0cmR1cChwYXRoKSkpIHsKKworICAgICAgICAvKiBGSVhNRTogV2UgZG9uJ3QgcmVtb3ZlIHRoZSBvYmplY3Qgb24gdGhlIHNlcnZlciBzaWRlICovCisKKyAgICAgICAgYXZhaGlfY2xpZW50X3NldF9lcnJubyhjbGllbnQsIEFWQUhJX0VSUl9OT19NRU1PUlkpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgZGJ1c19tZXNzYWdlX3VucmVmKG1lc3NhZ2UpOworICAgIGRidXNfbWVzc2FnZV91bnJlZihyZXBseSk7CisKKyAgICByZXR1cm4gYjsKKworZmFpbDoKKworICAgIGlmIChkYnVzX2Vycm9yX2lzX3NldCgmZXJyb3IpKSB7CisgICAgICAgIGF2YWhpX2NsaWVudF9zZXRfZGJ1c19lcnJvcihjbGllbnQsICZlcnJvcik7CisgICAgICAgIGRidXNfZXJyb3JfZnJlZSgmZXJyb3IpOworICAgIH0KKworICAgIGlmIChiKQorICAgICAgICBhdmFoaV9zZXJ2aWNlX3R5cGVfYnJvd3Nlcl9mcmVlKGIpOworCisgICAgaWYgKG1lc3NhZ2UpCisgICAgICAgIGRidXNfbWVzc2FnZV91bnJlZihtZXNzYWdlKTsKKworICAgIGlmIChyZXBseSkKKyAgICAgICAgZGJ1c19tZXNzYWdlX3VucmVmKHJlcGx5KTsKKworICAgIHJldHVybiBOVUxMOworfQorCitBdmFoaUNsaWVudCogYXZhaGlfc2VydmljZV90eXBlX2Jyb3dzZXJfZ2V0X2NsaWVudCAoQXZhaGlTZXJ2aWNlVHlwZUJyb3dzZXIgKmIpIHsKKyAgICBhc3NlcnQoYik7CisgICAgcmV0dXJuIGItPmNsaWVudDsKK30KKworaW50IGF2YWhpX3NlcnZpY2VfdHlwZV9icm93c2VyX2ZyZWUgKEF2YWhpU2VydmljZVR5cGVCcm93c2VyICpiKSB7CisgICAgQXZhaGlDbGllbnQgKmNsaWVudDsKKyAgICBpbnQgciA9IEFWQUhJX09LOworCisgICAgYXNzZXJ0KGIpOworICAgIGNsaWVudCA9IGItPmNsaWVudDsKKworICAgIGlmIChiLT5wYXRoICYmIGF2YWhpX2NsaWVudF9pc19jb25uZWN0ZWQoYi0+Y2xpZW50KSkKKyAgICAgICAgciA9IGF2YWhpX2NsaWVudF9zaW1wbGVfbWV0aG9kX2NhbGwoY2xpZW50LCBiLT5wYXRoLCBBVkFISV9EQlVTX0lOVEVSRkFDRV9TRVJWSUNFX1RZUEVfQlJPV1NFUiwgIkZyZWUiKTsKKworICAgIEFWQUhJX0xMSVNUX1JFTU9WRShBdmFoaVNlcnZpY2VUeXBlQnJvd3Nlciwgc2VydmljZV90eXBlX2Jyb3dzZXJzLCBiLT5jbGllbnQtPnNlcnZpY2VfdHlwZV9icm93c2VycywgYik7CisKKyAgICBhdmFoaV9mcmVlKGItPnBhdGgpOworICAgIGF2YWhpX2ZyZWUoYi0+ZG9tYWluKTsKKyAgICBhdmFoaV9mcmVlKGIpOworICAgIHJldHVybiByOworfQorCitEQnVzSGFuZGxlclJlc3VsdCBhdmFoaV9zZXJ2aWNlX3R5cGVfYnJvd3Nlcl9ldmVudCAoQXZhaGlDbGllbnQgKmNsaWVudCwgQXZhaGlCcm93c2VyRXZlbnQgZXZlbnQsIERCdXNNZXNzYWdlICptZXNzYWdlKSB7CisgICAgQXZhaGlTZXJ2aWNlVHlwZUJyb3dzZXIgKmIgPSBOVUxMOworICAgIERCdXNFcnJvciBlcnJvcjsKKyAgICBjb25zdCBjaGFyICpwYXRoOworICAgIGNoYXIgKmRvbWFpbiwgKnR5cGUgPSBOVUxMOworICAgIGludDMyX3QgaW50ZXJmYWNlLCBwcm90b2NvbDsKKyAgICB1aW50MzJfdCBmbGFncyA9IDA7CisKKyAgICBhc3NlcnQoY2xpZW50KTsKKyAgICBhc3NlcnQobWVzc2FnZSk7CisKKyAgICBkYnVzX2Vycm9yX2luaXQgKCZlcnJvcik7CisKKyAgICBpZiAoIShwYXRoID0gZGJ1c19tZXNzYWdlX2dldF9wYXRoKG1lc3NhZ2UpKSkKKyAgICAgICAgZ290byBmYWlsOworCisgICAgZm9yIChiID0gY2xpZW50LT5zZXJ2aWNlX3R5cGVfYnJvd3NlcnM7IGI7IGIgPSBiLT5zZXJ2aWNlX3R5cGVfYnJvd3NlcnNfbmV4dCkKKyAgICAgICAgaWYgKHN0cmNtcCAoYi0+cGF0aCwgcGF0aCkgPT0gMCkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgaWYgKCFiKQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICBkb21haW4gPSBiLT5kb21haW47CisgICAgaW50ZXJmYWNlID0gYi0+aW50ZXJmYWNlOworICAgIHByb3RvY29sID0gYi0+cHJvdG9jb2w7CisKKyAgICBzd2l0Y2ggKGV2ZW50KSB7CisgICAgICAgIGNhc2UgQVZBSElfQlJPV1NFUl9ORVc6CisgICAgICAgIGNhc2UgQVZBSElfQlJPV1NFUl9SRU1PVkU6CisgICAgICAgICAgICBpZiAoIWRidXNfbWVzc2FnZV9nZXRfYXJncygKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSwgJmVycm9yLAorICAgICAgICAgICAgICAgICAgICBEQlVTX1RZUEVfSU5UMzIsICZpbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgICAgIERCVVNfVFlQRV9JTlQzMiwgJnByb3RvY29sLAorICAgICAgICAgICAgICAgICAgICBEQlVTX1RZUEVfU1RSSU5HLCAmdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgREJVU19UWVBFX1NUUklORywgJmRvbWFpbiwKKyAgICAgICAgICAgICAgICAgICAgREJVU19UWVBFX1VJTlQzMiwgJmZsYWdzLAorICAgICAgICAgICAgICAgICAgICBEQlVTX1RZUEVfSU5WQUxJRCkgfHwKKyAgICAgICAgICAgICAgICBkYnVzX2Vycm9yX2lzX3NldCgmZXJyb3IpKSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gcGFyc2UgYnJvd3NlciBldmVudC5cbiIpOworICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQVZBSElfQlJPV1NFUl9DQUNIRV9FWEhBVVNURUQ6CisgICAgICAgIGNhc2UgQVZBSElfQlJPV1NFUl9BTExfRk9SX05PVzoKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQVZBSElfQlJPV1NFUl9GQUlMVVJFOiB7CisgICAgICAgICAgICBjaGFyICpldHh0OworCisgICAgICAgICAgICBpZiAoIWRidXNfbWVzc2FnZV9nZXRfYXJncygKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSwgJmVycm9yLAorICAgICAgICAgICAgICAgICAgICBEQlVTX1RZUEVfU1RSSU5HLCAmZXR4dCwKKyAgICAgICAgICAgICAgICAgICAgREJVU19UWVBFX0lOVkFMSUQpIHx8CisgICAgICAgICAgICAgICAgZGJ1c19lcnJvcl9pc19zZXQgKCZlcnJvcikpIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBwYXJzZSBicm93c2VyIGV2ZW50LlxuIik7CisgICAgICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBhdmFoaV9jbGllbnRfc2V0X2Vycm5vKGItPmNsaWVudCwgYXZhaGlfZXJyb3JfZGJ1c190b19udW1iZXIoZXR4dCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBiLT5jYWxsYmFjayhiLCAoQXZhaGlJZkluZGV4KSBpbnRlcmZhY2UsIChBdmFoaVByb3RvY29sKSBwcm90b2NvbCwgZXZlbnQsIHR5cGUsIGRvbWFpbiwgKEF2YWhpTG9va3VwUmVzdWx0RmxhZ3MpIGZsYWdzLCBiLT51c2VyZGF0YSk7CisKKyAgICByZXR1cm4gREJVU19IQU5ETEVSX1JFU1VMVF9IQU5ETEVEOworCitmYWlsOgorICAgIGRidXNfZXJyb3JfZnJlZSAoJmVycm9yKTsKKyAgICByZXR1cm4gREJVU19IQU5ETEVSX1JFU1VMVF9OT1RfWUVUX0hBTkRMRUQ7Cit9CisKKy8qIEF2YWhpU2VydmljZUJyb3dzZXIgKi8KKworQXZhaGlTZXJ2aWNlQnJvd3NlciogYXZhaGlfc2VydmljZV9icm93c2VyX25ldygKKyAgICBBdmFoaUNsaWVudCAqY2xpZW50LAorICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsCisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICBjb25zdCBjaGFyICp0eXBlLAorICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwKKyAgICBBdmFoaUxvb2t1cEZsYWdzIGZsYWdzLAorICAgIEF2YWhpU2VydmljZUJyb3dzZXJDYWxsYmFjayBjYWxsYmFjaywKKyAgICB2b2lkICp1c2VyZGF0YSkgeworCisgICAgQXZhaGlTZXJ2aWNlQnJvd3NlciAqYiA9IE5VTEw7CisgICAgREJ1c01lc3NhZ2UgKm1lc3NhZ2UgPSBOVUxMLCAqcmVwbHkgPSBOVUxMOworICAgIERCdXNFcnJvciBlcnJvcjsKKyAgICBjaGFyICpwYXRoOworICAgIGludDMyX3QgaV9wcm90b2NvbCwgaV9pbnRlcmZhY2U7CisgICAgdWludDMyX3QgdV9mbGFnczsKKworICAgIGFzc2VydChjbGllbnQpOworICAgIGFzc2VydCh0eXBlKTsKKyAgICBhc3NlcnQoY2FsbGJhY2spOworCisgICAgZGJ1c19lcnJvcl9pbml0KCZlcnJvcik7CisKKyAgICBpZiAoIWF2YWhpX2NsaWVudF9pc19jb25uZWN0ZWQoY2xpZW50KSkgeworICAgICAgICBhdmFoaV9jbGllbnRfc2V0X2Vycm5vKGNsaWVudCwgQVZBSElfRVJSX0JBRF9TVEFURSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBpZiAoIWRvbWFpbikKKyAgICAgICAgZG9tYWluID0gIiI7CisKKyAgICBpZiAoIShiID0gYXZhaGlfbmV3KEF2YWhpU2VydmljZUJyb3dzZXIsIDEpKSkgeworICAgICAgICBhdmFoaV9jbGllbnRfc2V0X2Vycm5vKGNsaWVudCwgQVZBSElfRVJSX05PX01FTU9SWSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBiLT5jbGllbnQgPSBjbGllbnQ7CisgICAgYi0+Y2FsbGJhY2sgPSBjYWxsYmFjazsKKyAgICBiLT51c2VyZGF0YSA9IHVzZXJkYXRhOworICAgIGItPnBhdGggPSBOVUxMOworICAgIGItPnR5cGUgPSBiLT5kb21haW4gPSBOVUxMOworICAgIGItPmludGVyZmFjZSA9IGludGVyZmFjZTsKKyAgICBiLT5wcm90b2NvbCA9IHByb3RvY29sOworCisgICAgQVZBSElfTExJU1RfUFJFUEVORChBdmFoaVNlcnZpY2VCcm93c2VyLCBzZXJ2aWNlX2Jyb3dzZXJzLCBjbGllbnQtPnNlcnZpY2VfYnJvd3NlcnMsIGIpOworCisgICAgaWYgKCEoYi0+dHlwZSA9IGF2YWhpX3N0cmR1cCh0eXBlKSkpIHsKKyAgICAgICAgYXZhaGlfY2xpZW50X3NldF9lcnJubyhjbGllbnQsIEFWQUhJX0VSUl9OT19NRU1PUlkpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKGRvbWFpbiAmJiBkb21haW5bMF0pCisgICAgICAgIGlmICghKGItPmRvbWFpbiA9IGF2YWhpX3N0cmR1cChkb21haW4pKSkgeworICAgICAgICAgICAgYXZhaGlfY2xpZW50X3NldF9lcnJubyhjbGllbnQsIEFWQUhJX0VSUl9OT19NRU1PUlkpOworICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CisKKyAgICBpZiAoIShtZXNzYWdlID0gZGJ1c19tZXNzYWdlX25ld19tZXRob2RfY2FsbCAoQVZBSElfREJVU19OQU1FLCBBVkFISV9EQlVTX1BBVEhfU0VSVkVSLCBBVkFISV9EQlVTX0lOVEVSRkFDRV9TRVJWRVIsICJTZXJ2aWNlQnJvd3Nlck5ldyIpKSkgeworICAgICAgICBhdmFoaV9jbGllbnRfc2V0X2Vycm5vKGNsaWVudCwgQVZBSElfRVJSX05PX01FTU9SWSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBpX2ludGVyZmFjZSA9IChpbnQzMl90KSBpbnRlcmZhY2U7CisgICAgaV9wcm90b2NvbCA9IChpbnQzMl90KSBwcm90b2NvbDsKKyAgICB1X2ZsYWdzID0gKHVpbnQzMl90KSBmbGFnczsKKworICAgIGlmICghZGJ1c19tZXNzYWdlX2FwcGVuZF9hcmdzKAorICAgICAgICAgICAgbWVzc2FnZSwKKyAgICAgICAgICAgIERCVVNfVFlQRV9JTlQzMiwgJmlfaW50ZXJmYWNlLAorICAgICAgICAgICAgREJVU19UWVBFX0lOVDMyLCAmaV9wcm90b2NvbCwKKyAgICAgICAgICAgIERCVVNfVFlQRV9TVFJJTkcsICZ0eXBlLAorICAgICAgICAgICAgREJVU19UWVBFX1NUUklORywgJmRvbWFpbiwKKyAgICAgICAgICAgIERCVVNfVFlQRV9VSU5UMzIsICZ1X2ZsYWdzLAorICAgICAgICAgICAgREJVU19UWVBFX0lOVkFMSUQpKSB7CisgICAgICAgIGF2YWhpX2NsaWVudF9zZXRfZXJybm8oY2xpZW50LCBBVkFISV9FUlJfTk9fTUVNT1JZKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGlmICghKHJlcGx5ID0gZGJ1c19jb25uZWN0aW9uX3NlbmRfd2l0aF9yZXBseV9hbmRfYmxvY2sgKGNsaWVudC0+YnVzLCBtZXNzYWdlLCAtMSwgJmVycm9yKSkgfHwKKyAgICAgICAgZGJ1c19lcnJvcl9pc19zZXQoJmVycm9yKSkgeworICAgICAgICBhdmFoaV9jbGllbnRfc2V0X2Vycm5vKGNsaWVudCwgQVZBSElfRVJSX0RCVVNfRVJST1IpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKCFkYnVzX21lc3NhZ2VfZ2V0X2FyZ3MgKHJlcGx5LCAmZXJyb3IsIERCVVNfVFlQRV9PQkpFQ1RfUEFUSCwgJnBhdGgsIERCVVNfVFlQRV9JTlZBTElEKSB8fAorICAgICAgICBkYnVzX2Vycm9yX2lzX3NldCgmZXJyb3IpIHx8CisgICAgICAgICFwYXRoKSB7CisgICAgICAgIGF2YWhpX2NsaWVudF9zZXRfZXJybm8oY2xpZW50LCBBVkFISV9FUlJfREJVU19FUlJPUik7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBpZiAoIShiLT5wYXRoID0gYXZhaGlfc3RyZHVwKHBhdGgpKSkgeworCisgICAgICAgIC8qIEZJWE1FOiBXZSBkb24ndCByZW1vdmUgdGhlIG9iamVjdCBvbiB0aGUgc2VydmVyIHNpZGUgKi8KKworICAgICAgICBhdmFoaV9jbGllbnRfc2V0X2Vycm5vKGNsaWVudCwgQVZBSElfRVJSX05PX01FTU9SWSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBkYnVzX21lc3NhZ2VfdW5yZWYobWVzc2FnZSk7CisgICAgZGJ1c19tZXNzYWdlX3VucmVmKHJlcGx5KTsKKworICAgIHJldHVybiBiOworCitmYWlsOgorICAgIGlmIChkYnVzX2Vycm9yX2lzX3NldCgmZXJyb3IpKSB7CisgICAgICAgIGF2YWhpX2NsaWVudF9zZXRfZGJ1c19lcnJvcihjbGllbnQsICZlcnJvcik7CisgICAgICAgIGRidXNfZXJyb3JfZnJlZSgmZXJyb3IpOworICAgIH0KKworICAgIGlmIChiKQorICAgICAgICBhdmFoaV9zZXJ2aWNlX2Jyb3dzZXJfZnJlZShiKTsKKworICAgIGlmIChtZXNzYWdlKQorICAgICAgICBkYnVzX21lc3NhZ2VfdW5yZWYobWVzc2FnZSk7CisKKyAgICBpZiAocmVwbHkpCisgICAgICAgIGRidXNfbWVzc2FnZV91bnJlZihyZXBseSk7CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworQXZhaGlDbGllbnQqIGF2YWhpX3NlcnZpY2VfYnJvd3Nlcl9nZXRfY2xpZW50IChBdmFoaVNlcnZpY2VCcm93c2VyICpiKSB7CisgICAgYXNzZXJ0KGIpOworICAgIHJldHVybiBiLT5jbGllbnQ7Cit9CisKK2ludCBhdmFoaV9zZXJ2aWNlX2Jyb3dzZXJfZnJlZSAoQXZhaGlTZXJ2aWNlQnJvd3NlciAqYikgeworICAgIEF2YWhpQ2xpZW50ICpjbGllbnQ7CisgICAgaW50IHIgPSBBVkFISV9PSzsKKworICAgIGFzc2VydChiKTsKKyAgICBjbGllbnQgPSBiLT5jbGllbnQ7CisKKyAgICBpZiAoYi0+cGF0aCAmJiBhdmFoaV9jbGllbnRfaXNfY29ubmVjdGVkKGItPmNsaWVudCkpCisgICAgICAgIHIgPSBhdmFoaV9jbGllbnRfc2ltcGxlX21ldGhvZF9jYWxsKGNsaWVudCwgYi0+cGF0aCwgQVZBSElfREJVU19JTlRFUkZBQ0VfU0VSVklDRV9CUk9XU0VSLCAiRnJlZSIpOworCisgICAgQVZBSElfTExJU1RfUkVNT1ZFKEF2YWhpU2VydmljZUJyb3dzZXIsIHNlcnZpY2VfYnJvd3NlcnMsIGItPmNsaWVudC0+c2VydmljZV9icm93c2VycywgYik7CisKKyAgICBhdmFoaV9mcmVlKGItPnBhdGgpOworICAgIGF2YWhpX2ZyZWUoYi0+dHlwZSk7CisgICAgYXZhaGlfZnJlZShiLT5kb21haW4pOworICAgIGF2YWhpX2ZyZWUoYik7CisgICAgcmV0dXJuIHI7Cit9CisKK0RCdXNIYW5kbGVyUmVzdWx0IGF2YWhpX3NlcnZpY2VfYnJvd3Nlcl9ldmVudChBdmFoaUNsaWVudCAqY2xpZW50LCBBdmFoaUJyb3dzZXJFdmVudCBldmVudCwgREJ1c01lc3NhZ2UgKm1lc3NhZ2UpIHsKKyAgICBBdmFoaVNlcnZpY2VCcm93c2VyICpiID0gTlVMTDsKKyAgICBEQnVzRXJyb3IgZXJyb3I7CisgICAgY29uc3QgY2hhciAqcGF0aDsKKyAgICBjaGFyICpuYW1lID0gTlVMTCwgKnR5cGUsICpkb21haW47CisgICAgaW50MzJfdCBpbnRlcmZhY2UsIHByb3RvY29sOworICAgIHVpbnQzMl90IGZsYWdzID0gMDsKKworICAgIGRidXNfZXJyb3JfaW5pdCAoJmVycm9yKTsKKworICAgIGlmICghKHBhdGggPSBkYnVzX21lc3NhZ2VfZ2V0X3BhdGgobWVzc2FnZSkpKQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICBmb3IgKGIgPSBjbGllbnQtPnNlcnZpY2VfYnJvd3NlcnM7IGI7IGIgPSBiLT5zZXJ2aWNlX2Jyb3dzZXJzX25leHQpCisgICAgICAgIGlmIChzdHJjbXAgKGItPnBhdGgsIHBhdGgpID09IDApCisgICAgICAgICAgICBicmVhazsKKworICAgIGlmICghYikKKyAgICAgICAgZ290byBmYWlsOworCisgICAgdHlwZSA9IGItPnR5cGU7CisgICAgZG9tYWluID0gYi0+ZG9tYWluOworICAgIGludGVyZmFjZSA9IGItPmludGVyZmFjZTsKKyAgICBwcm90b2NvbCA9IGItPnByb3RvY29sOworCisgICAgc3dpdGNoIChldmVudCkgeworICAgICAgICBjYXNlIEFWQUhJX0JST1dTRVJfTkVXOgorICAgICAgICBjYXNlIEFWQUhJX0JST1dTRVJfUkVNT1ZFOgorCisgICAgICAgICAgICBpZiAoIWRidXNfbWVzc2FnZV9nZXRfYXJncyAoCisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UsICZlcnJvciwKKyAgICAgICAgICAgICAgICAgICAgREJVU19UWVBFX0lOVDMyLCAmaW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICAgICBEQlVTX1RZUEVfSU5UMzIsICZwcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgREJVU19UWVBFX1NUUklORywgJm5hbWUsCisgICAgICAgICAgICAgICAgICAgIERCVVNfVFlQRV9TVFJJTkcsICZ0eXBlLAorICAgICAgICAgICAgICAgICAgICBEQlVTX1RZUEVfU1RSSU5HLCAmZG9tYWluLAorICAgICAgICAgICAgICAgICAgICBEQlVTX1RZUEVfVUlOVDMyLCAmZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgIERCVVNfVFlQRV9JTlZBTElEKSB8fAorICAgICAgICAgICAgICAgIGRidXNfZXJyb3JfaXNfc2V0KCZlcnJvcikpIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBwYXJzZSBicm93c2VyIGV2ZW50LlxuIik7CisgICAgICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBVkFISV9CUk9XU0VSX0NBQ0hFX0VYSEFVU1RFRDoKKyAgICAgICAgY2FzZSBBVkFISV9CUk9XU0VSX0FMTF9GT1JfTk9XOgorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBVkFISV9CUk9XU0VSX0ZBSUxVUkU6IHsKKyAgICAgICAgICAgIGNoYXIgKmV0eHQ7CisKKyAgICAgICAgICAgIGlmICghZGJ1c19tZXNzYWdlX2dldF9hcmdzKAorICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLCAmZXJyb3IsCisgICAgICAgICAgICAgICAgICAgIERCVVNfVFlQRV9TVFJJTkcsICZldHh0LAorICAgICAgICAgICAgICAgICAgICBEQlVTX1RZUEVfSU5WQUxJRCkgfHwKKyAgICAgICAgICAgICAgICBkYnVzX2Vycm9yX2lzX3NldCAoJmVycm9yKSkgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIHBhcnNlIGJyb3dzZXIgZXZlbnQuXG4iKTsKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGF2YWhpX2NsaWVudF9zZXRfZXJybm8oYi0+Y2xpZW50LCBhdmFoaV9lcnJvcl9kYnVzX3RvX251bWJlcihldHh0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGItPmNhbGxiYWNrKGIsIChBdmFoaUlmSW5kZXgpIGludGVyZmFjZSwgKEF2YWhpUHJvdG9jb2wpIHByb3RvY29sLCBldmVudCwgbmFtZSwgdHlwZSwgZG9tYWluLCAoQXZhaGlMb29rdXBSZXN1bHRGbGFncykgZmxhZ3MsIGItPnVzZXJkYXRhKTsKKworICAgIHJldHVybiBEQlVTX0hBTkRMRVJfUkVTVUxUX0hBTkRMRUQ7CisKK2ZhaWw6CisgICAgZGJ1c19lcnJvcl9mcmVlICgmZXJyb3IpOworICAgIHJldHVybiBEQlVTX0hBTkRMRVJfUkVTVUxUX05PVF9ZRVRfSEFORExFRDsKK30KKworLyogQXZhaGlSZWNvcmRCcm93c2VyICovCisKK0F2YWhpUmVjb3JkQnJvd3NlciogYXZhaGlfcmVjb3JkX2Jyb3dzZXJfbmV3KAorICAgIEF2YWhpQ2xpZW50ICpjbGllbnQsCisgICAgQXZhaGlJZkluZGV4IGludGVyZmFjZSwKKyAgICBBdmFoaVByb3RvY29sIHByb3RvY29sLAorICAgIGNvbnN0IGNoYXIgKm5hbWUsCisgICAgdWludDE2X3QgY2xhenosCisgICAgdWludDE2X3QgdHlwZSwKKyAgICBBdmFoaUxvb2t1cEZsYWdzIGZsYWdzLAorICAgIEF2YWhpUmVjb3JkQnJvd3NlckNhbGxiYWNrIGNhbGxiYWNrLAorICAgIHZvaWQgKnVzZXJkYXRhKSB7CisKKyAgICBBdmFoaVJlY29yZEJyb3dzZXIgKmIgPSBOVUxMOworICAgIERCdXNNZXNzYWdlICptZXNzYWdlID0gTlVMTCwgKnJlcGx5ID0gTlVMTDsKKyAgICBEQnVzRXJyb3IgZXJyb3I7CisgICAgY2hhciAqcGF0aDsKKyAgICBpbnQzMl90IGlfcHJvdG9jb2wsIGlfaW50ZXJmYWNlOworICAgIHVpbnQzMl90IHVfZmxhZ3M7CisKKyAgICBhc3NlcnQoY2xpZW50KTsKKyAgICBhc3NlcnQobmFtZSk7CisgICAgYXNzZXJ0KGNhbGxiYWNrKTsKKworICAgIGRidXNfZXJyb3JfaW5pdCgmZXJyb3IpOworCisgICAgaWYgKCFhdmFoaV9jbGllbnRfaXNfY29ubmVjdGVkKGNsaWVudCkpIHsKKyAgICAgICAgYXZhaGlfY2xpZW50X3NldF9lcnJubyhjbGllbnQsIEFWQUhJX0VSUl9CQURfU1RBVEUpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKCEoYiA9IGF2YWhpX25ldyhBdmFoaVJlY29yZEJyb3dzZXIsIDEpKSkgeworICAgICAgICBhdmFoaV9jbGllbnRfc2V0X2Vycm5vKGNsaWVudCwgQVZBSElfRVJSX05PX01FTU9SWSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBiLT5jbGllbnQgPSBjbGllbnQ7CisgICAgYi0+Y2FsbGJhY2sgPSBjYWxsYmFjazsKKyAgICBiLT51c2VyZGF0YSA9IHVzZXJkYXRhOworICAgIGItPnBhdGggPSBOVUxMOworICAgIGItPm5hbWUgPSBOVUxMOworICAgIGItPmNsYXp6ID0gY2xheno7CisgICAgYi0+dHlwZSA9IHR5cGU7CisgICAgYi0+aW50ZXJmYWNlID0gaW50ZXJmYWNlOworICAgIGItPnByb3RvY29sID0gcHJvdG9jb2w7CisKKyAgICBBVkFISV9MTElTVF9QUkVQRU5EKEF2YWhpUmVjb3JkQnJvd3NlciwgcmVjb3JkX2Jyb3dzZXJzLCBjbGllbnQtPnJlY29yZF9icm93c2VycywgYik7CisKKyAgICBpZiAoIShiLT5uYW1lID0gYXZhaGlfc3RyZHVwKG5hbWUpKSkgeworICAgICAgICBhdmFoaV9jbGllbnRfc2V0X2Vycm5vKGNsaWVudCwgQVZBSElfRVJSX05PX01FTU9SWSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBpZiAoIShtZXNzYWdlID0gZGJ1c19tZXNzYWdlX25ld19tZXRob2RfY2FsbChBVkFISV9EQlVTX05BTUUsIEFWQUhJX0RCVVNfUEFUSF9TRVJWRVIsIEFWQUhJX0RCVVNfSU5URVJGQUNFX1NFUlZFUiwgIlJlY29yZEJyb3dzZXJOZXciKSkpIHsKKyAgICAgICAgYXZhaGlfY2xpZW50X3NldF9lcnJubyhjbGllbnQsIEFWQUhJX0VSUl9OT19NRU1PUlkpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaV9pbnRlcmZhY2UgPSAoaW50MzJfdCkgaW50ZXJmYWNlOworICAgIGlfcHJvdG9jb2wgPSAoaW50MzJfdCkgcHJvdG9jb2w7CisgICAgdV9mbGFncyA9ICh1aW50MzJfdCkgZmxhZ3M7CisKKyAgICBpZiAoIWRidXNfbWVzc2FnZV9hcHBlbmRfYXJncygKKyAgICAgICAgICAgIG1lc3NhZ2UsCisgICAgICAgICAgICBEQlVTX1RZUEVfSU5UMzIsICZpX2ludGVyZmFjZSwKKyAgICAgICAgICAgIERCVVNfVFlQRV9JTlQzMiwgJmlfcHJvdG9jb2wsCisgICAgICAgICAgICBEQlVTX1RZUEVfU1RSSU5HLCAmbmFtZSwKKyAgICAgICAgICAgIERCVVNfVFlQRV9VSU5UMTYsICZjbGF6eiwKKyAgICAgICAgICAgIERCVVNfVFlQRV9VSU5UMTYsICZ0eXBlLAorICAgICAgICAgICAgREJVU19UWVBFX1VJTlQzMiwgJnVfZmxhZ3MsCisgICAgICAgICAgICBEQlVTX1RZUEVfSU5WQUxJRCkpIHsKKyAgICAgICAgYXZhaGlfY2xpZW50X3NldF9lcnJubyhjbGllbnQsIEFWQUhJX0VSUl9OT19NRU1PUlkpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKCEocmVwbHkgPSBkYnVzX2Nvbm5lY3Rpb25fc2VuZF93aXRoX3JlcGx5X2FuZF9ibG9jayAoY2xpZW50LT5idXMsIG1lc3NhZ2UsIC0xLCAmZXJyb3IpKSB8fAorICAgICAgICBkYnVzX2Vycm9yX2lzX3NldCgmZXJyb3IpKSB7CisgICAgICAgIGF2YWhpX2NsaWVudF9zZXRfZXJybm8oY2xpZW50LCBBVkFISV9FUlJfREJVU19FUlJPUik7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBpZiAoIWRidXNfbWVzc2FnZV9nZXRfYXJncyAocmVwbHksICZlcnJvciwgREJVU19UWVBFX09CSkVDVF9QQVRILCAmcGF0aCwgREJVU19UWVBFX0lOVkFMSUQpIHx8CisgICAgICAgIGRidXNfZXJyb3JfaXNfc2V0KCZlcnJvcikgfHwKKyAgICAgICAgIXBhdGgpIHsKKyAgICAgICAgYXZhaGlfY2xpZW50X3NldF9lcnJubyhjbGllbnQsIEFWQUhJX0VSUl9EQlVTX0VSUk9SKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGlmICghKGItPnBhdGggPSBhdmFoaV9zdHJkdXAocGF0aCkpKSB7CisKKyAgICAgICAgLyogRklYTUU6IFdlIGRvbid0IHJlbW92ZSB0aGUgb2JqZWN0IG9uIHRoZSBzZXJ2ZXIgc2lkZSAqLworCisgICAgICAgIGF2YWhpX2NsaWVudF9zZXRfZXJybm8oY2xpZW50LCBBVkFISV9FUlJfTk9fTUVNT1JZKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGRidXNfbWVzc2FnZV91bnJlZihtZXNzYWdlKTsKKyAgICBkYnVzX21lc3NhZ2VfdW5yZWYocmVwbHkpOworCisgICAgcmV0dXJuIGI7CisKK2ZhaWw6CisgICAgaWYgKGRidXNfZXJyb3JfaXNfc2V0KCZlcnJvcikpIHsKKyAgICAgICAgYXZhaGlfY2xpZW50X3NldF9kYnVzX2Vycm9yKGNsaWVudCwgJmVycm9yKTsKKyAgICAgICAgZGJ1c19lcnJvcl9mcmVlKCZlcnJvcik7CisgICAgfQorCisgICAgaWYgKGIpCisgICAgICAgIGF2YWhpX3JlY29yZF9icm93c2VyX2ZyZWUoYik7CisKKyAgICBpZiAobWVzc2FnZSkKKyAgICAgICAgZGJ1c19tZXNzYWdlX3VucmVmKG1lc3NhZ2UpOworCisgICAgaWYgKHJlcGx5KQorICAgICAgICBkYnVzX21lc3NhZ2VfdW5yZWYocmVwbHkpOworCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK0F2YWhpQ2xpZW50KiBhdmFoaV9yZWNvcmRfYnJvd3Nlcl9nZXRfY2xpZW50IChBdmFoaVJlY29yZEJyb3dzZXIgKmIpIHsKKyAgICBhc3NlcnQoYik7CisgICAgcmV0dXJuIGItPmNsaWVudDsKK30KKworaW50IGF2YWhpX3JlY29yZF9icm93c2VyX2ZyZWUgKEF2YWhpUmVjb3JkQnJvd3NlciAqYikgeworICAgIEF2YWhpQ2xpZW50ICpjbGllbnQ7CisgICAgaW50IHIgPSBBVkFISV9PSzsKKworICAgIGFzc2VydChiKTsKKyAgICBjbGllbnQgPSBiLT5jbGllbnQ7CisKKyAgICBpZiAoYi0+cGF0aCAmJiBhdmFoaV9jbGllbnRfaXNfY29ubmVjdGVkKGItPmNsaWVudCkpCisgICAgICAgIHIgPSBhdmFoaV9jbGllbnRfc2ltcGxlX21ldGhvZF9jYWxsKGNsaWVudCwgYi0+cGF0aCwgQVZBSElfREJVU19JTlRFUkZBQ0VfUkVDT1JEX0JST1dTRVIsICJGcmVlIik7CisKKyAgICBBVkFISV9MTElTVF9SRU1PVkUoQXZhaGlSZWNvcmRCcm93c2VyLCByZWNvcmRfYnJvd3NlcnMsIGItPmNsaWVudC0+cmVjb3JkX2Jyb3dzZXJzLCBiKTsKKworICAgIGF2YWhpX2ZyZWUoYi0+cGF0aCk7CisgICAgYXZhaGlfZnJlZShiLT5uYW1lKTsKKyAgICBhdmFoaV9mcmVlKGIpOworICAgIHJldHVybiByOworfQorCitEQnVzSGFuZGxlclJlc3VsdCBhdmFoaV9yZWNvcmRfYnJvd3Nlcl9ldmVudChBdmFoaUNsaWVudCAqY2xpZW50LCBBdmFoaUJyb3dzZXJFdmVudCBldmVudCwgREJ1c01lc3NhZ2UgKm1lc3NhZ2UpIHsKKyAgICBBdmFoaVJlY29yZEJyb3dzZXIgKmIgPSBOVUxMOworICAgIERCdXNFcnJvciBlcnJvcjsKKyAgICBjb25zdCBjaGFyICpwYXRoOworICAgIGNoYXIgKm5hbWU7CisgICAgaW50MzJfdCBpbnRlcmZhY2UsIHByb3RvY29sOworICAgIHVpbnQzMl90IGZsYWdzID0gMDsKKyAgICB1aW50MTZfdCBjbGF6eiwgdHlwZTsKKyAgICB2b2lkICpyZGF0YSA9IE5VTEw7CisgICAgaW50IHJkYXRhX3NpemUgPSAwOworCisgICAgZGJ1c19lcnJvcl9pbml0ICgmZXJyb3IpOworCisgICAgaWYgKCEocGF0aCA9IGRidXNfbWVzc2FnZV9nZXRfcGF0aChtZXNzYWdlKSkpCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIGZvciAoYiA9IGNsaWVudC0+cmVjb3JkX2Jyb3dzZXJzOyBiOyBiID0gYi0+cmVjb3JkX2Jyb3dzZXJzX25leHQpCisgICAgICAgIGlmIChzdHJjbXAgKGItPnBhdGgsIHBhdGgpID09IDApCisgICAgICAgICAgICBicmVhazsKKworICAgIGlmICghYikKKyAgICAgICAgZ290byBmYWlsOworCisgICAgaW50ZXJmYWNlID0gYi0+aW50ZXJmYWNlOworICAgIHByb3RvY29sID0gYi0+cHJvdG9jb2w7CisgICAgY2xhenogPSBiLT5jbGF6ejsKKyAgICB0eXBlID0gYi0+dHlwZTsKKyAgICBuYW1lID0gYi0+bmFtZTsKKworICAgIHN3aXRjaCAoZXZlbnQpIHsKKyAgICAgICAgY2FzZSBBVkFISV9CUk9XU0VSX05FVzoKKyAgICAgICAgY2FzZSBBVkFISV9CUk9XU0VSX1JFTU9WRTogeworICAgICAgICAgICAgREJ1c01lc3NhZ2VJdGVyIGl0ZXIsIHN1YjsKKyAgICAgICAgICAgIGludCBqOworCisgICAgICAgICAgICBpZiAoIWRidXNfbWVzc2FnZV9nZXRfYXJncyAoCisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UsICZlcnJvciwKKyAgICAgICAgICAgICAgICAgICAgREJVU19UWVBFX0lOVDMyLCAmaW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICAgICBEQlVTX1RZUEVfSU5UMzIsICZwcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgREJVU19UWVBFX1NUUklORywgJm5hbWUsCisgICAgICAgICAgICAgICAgICAgIERCVVNfVFlQRV9VSU5UMTYsICZjbGF6eiwKKyAgICAgICAgICAgICAgICAgICAgREJVU19UWVBFX1VJTlQxNiwgJnR5cGUsCisgICAgICAgICAgICAgICAgICAgIERCVVNfVFlQRV9JTlZBTElEKSB8fAorICAgICAgICAgICAgICAgIGRidXNfZXJyb3JfaXNfc2V0KCZlcnJvcikpIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBwYXJzZSBicm93c2VyIGV2ZW50LlxuIik7CisgICAgICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICAgICAgfQorCisKKyAgICAgICAgICAgIGRidXNfbWVzc2FnZV9pdGVyX2luaXQobWVzc2FnZSwgJml0ZXIpOworCisgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgNTsgaisrKQorICAgICAgICAgICAgICAgIGRidXNfbWVzc2FnZV9pdGVyX25leHQoJml0ZXIpOworCisgICAgICAgICAgICBpZiAoZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2FyZ190eXBlKCZpdGVyKSAhPSBEQlVTX1RZUEVfQVJSQVkgfHwKKyAgICAgICAgICAgICAgICBkYnVzX21lc3NhZ2VfaXRlcl9nZXRfZWxlbWVudF90eXBlKCZpdGVyKSAhPSBEQlVTX1RZUEVfQllURSkKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisKKyAgICAgICAgICAgIGRidXNfbWVzc2FnZV9pdGVyX3JlY3Vyc2UoJml0ZXIsICZzdWIpOworICAgICAgICAgICAgZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2ZpeGVkX2FycmF5KCZzdWIsICZyZGF0YSwgJnJkYXRhX3NpemUpOworCisgICAgICAgICAgICBkYnVzX21lc3NhZ2VfaXRlcl9uZXh0KCZpdGVyKTsKKworICAgICAgICAgICAgaWYgKGRidXNfbWVzc2FnZV9pdGVyX2dldF9hcmdfdHlwZSgmaXRlcikgIT0gREJVU19UWVBFX1VJTlQzMikKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisKKyAgICAgICAgICAgIGRidXNfbWVzc2FnZV9pdGVyX2dldF9iYXNpYygmaXRlciwgJmZsYWdzKTsKKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEFWQUhJX0JST1dTRVJfQ0FDSEVfRVhIQVVTVEVEOgorICAgICAgICBjYXNlIEFWQUhJX0JST1dTRVJfQUxMX0ZPUl9OT1c6CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFWQUhJX0JST1dTRVJfRkFJTFVSRTogeworICAgICAgICAgICAgY2hhciAqZXR4dDsKKworICAgICAgICAgICAgaWYgKCFkYnVzX21lc3NhZ2VfZ2V0X2FyZ3MoCisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UsICZlcnJvciwKKyAgICAgICAgICAgICAgICAgICAgREJVU19UWVBFX1NUUklORywgJmV0eHQsCisgICAgICAgICAgICAgICAgICAgIERCVVNfVFlQRV9JTlZBTElEKSB8fAorICAgICAgICAgICAgICAgIGRidXNfZXJyb3JfaXNfc2V0ICgmZXJyb3IpKSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gcGFyc2UgYnJvd3NlciBldmVudC5cbiIpOworICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYXZhaGlfY2xpZW50X3NldF9lcnJubyhiLT5jbGllbnQsIGF2YWhpX2Vycm9yX2RidXNfdG9fbnVtYmVyKGV0eHQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgYi0+Y2FsbGJhY2soYiwgKEF2YWhpSWZJbmRleCkgaW50ZXJmYWNlLCAoQXZhaGlQcm90b2NvbCkgcHJvdG9jb2wsIGV2ZW50LCBuYW1lLCBjbGF6eiwgdHlwZSwgcmRhdGEsIChzaXplX3QpIHJkYXRhX3NpemUsIChBdmFoaUxvb2t1cFJlc3VsdEZsYWdzKSBmbGFncywgYi0+dXNlcmRhdGEpOworCisgICAgcmV0dXJuIERCVVNfSEFORExFUl9SRVNVTFRfSEFORExFRDsKKworZmFpbDoKKyAgICBkYnVzX2Vycm9yX2ZyZWUgKCZlcnJvcik7CisgICAgcmV0dXJuIERCVVNfSEFORExFUl9SRVNVTFRfTk9UX1lFVF9IQU5ETEVEOworfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNsaWVudC9jaGVjay1uc3MtdGVzdC5jIGIvYXZhaGktMC42LjMxL2F2YWhpLWNsaWVudC9jaGVjay1uc3MtdGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMTU1MDAKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY2xpZW50L2NoZWNrLW5zcy10ZXN0LmMKQEAgLTAsMCArMSwzMSBAQAorLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSA8YXZhaGktY2xpZW50L2NsaWVudC5oPgorCitpbnQgbWFpbihBVkFISV9HQ0NfVU5VU0VEIGludCBhcmdjLCBBVkFISV9HQ0NfVU5VU0VEIGNoYXIgKmFyZ3ZbXSkgeworICAgIHByaW50ZigiTlNTIFN1cHBvcnQgYXZhaWxhYmxlOiAlc1xuIiwgYXZhaGlfbnNzX3N1cHBvcnQoKSA/ICJ5ZXMiIDogIm5vIik7CisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktY2xpZW50L2NoZWNrLW5zcy5jIGIvYXZhaGktMC42LjMxL2F2YWhpLWNsaWVudC9jaGVjay1uc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTI2NmM0Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNsaWVudC9jaGVjay1uc3MuYwpAQCAtMCwwICsxLDU1IEBACisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2lmZGVmIEhBVkVfRExPUEVOCisjaW5jbHVkZSA8ZGxmY24uaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSAiY2xpZW50LmgiCisKK2ludCBhdmFoaV9uc3Nfc3VwcG9ydCh2b2lkKSB7CisgICAgaW50IGIgPSAwOworCisjaWZkZWYgSEFWRV9ETE9QRU4KKyAgICBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGxpYnNbXSA9IHsKKyAgICAgICAgImxpYm5zc19tZG5zLnNvLjIiLAorICAgICAgICAibGlibnNzX21kbnM0LnNvLjIiLAorICAgICAgICAibGlibnNzX21kbnM2LnNvLjIiLAorICAgICAgICBOVUxMIH07CisKKyAgICBjb25zdCBjaGFyICogY29uc3QgKmw7CisKKyAgICBmb3IgKGwgPSBsaWJzOyAqbDsgbCsrKSB7CisgICAgICAgIHZvaWQgKmRsOworCisgICAgICAgIGlmICgoZGwgPSBkbG9wZW4oKmwsIFJUTERfTEFaWSkpKSB7CisgICAgICAgICAgICBiID0gMTsKKyAgICAgICAgICAgIGRsY2xvc2UoZGwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiBiOworfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNsaWVudC9jbGllbnQtdGVzdC5jIGIvYXZhaGktMC42LjMxL2F2YWhpLWNsaWVudC9jbGllbnQtdGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMDRhNmEKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY2xpZW50L2NsaWVudC10ZXN0LmMKQEAgLTAsMCArMSwzMjggQEAKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKworI2luY2x1ZGUgPGF2YWhpLWNsaWVudC9jbGllbnQuaD4KKyNpbmNsdWRlIDxhdmFoaS1jbGllbnQvbG9va3VwLmg+CisjaW5jbHVkZSA8YXZhaGktY2xpZW50L3B1Ymxpc2guaD4KKworI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9lcnJvci5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9zaW1wbGUtd2F0Y2guaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vbWFsbG9jLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL3RpbWV2YWwuaD4KKworc3RhdGljIGNvbnN0IEF2YWhpUG9sbCAqcG9sbF9hcGkgPSBOVUxMOworc3RhdGljIEF2YWhpU2ltcGxlUG9sbCAqc2ltcGxlX3BvbGwgPSBOVUxMOworCitzdGF0aWMgdm9pZCBhdmFoaV9jbGllbnRfY2FsbGJhY2sgKEF2YWhpQ2xpZW50ICpjLCBBdmFoaUNsaWVudFN0YXRlIHN0YXRlLCB2b2lkICp1c2VyZGF0YSkgeworICAgIHByaW50ZiAoIkNMSUVOVDogQ2FsbGJhY2sgb24gJXAsIHN0YXRlIC0+ICVkLCBkYXRhIC0+ICVzXG4iLCAodm9pZCopIGMsIHN0YXRlLCAoY2hhciopdXNlcmRhdGEpOworfQorCitzdGF0aWMgdm9pZCBhdmFoaV9lbnRyeV9ncm91cF9jYWxsYmFjayAoQXZhaGlFbnRyeUdyb3VwICpnLCBBdmFoaUVudHJ5R3JvdXBTdGF0ZSBzdGF0ZSwgdm9pZCAqdXNlcmRhdGEpIHsKKyAgICBwcmludGYgKCJFTlRSWS1HUk9VUDogQ2FsbGJhY2sgb24gJXAsIHN0YXRlIC0+ICVkLCBkYXRhIC0+ICVzXG4iLCAodm9pZCopIGcsIHN0YXRlLCAoY2hhciopdXNlcmRhdGEpOworfQorCitzdGF0aWMgdm9pZCBhdmFoaV9lbnRyeV9ncm91cDJfY2FsbGJhY2sgKEF2YWhpRW50cnlHcm91cCAqZywgQXZhaGlFbnRyeUdyb3VwU3RhdGUgc3RhdGUsIHZvaWQgKnVzZXJkYXRhKSB7CisgICAgcHJpbnRmICgiRU5UUlktR1JPVVAyOiBDYWxsYmFjayBvbiAlcCwgc3RhdGUgLT4gJWQsIGRhdGEgLT4gJXNcbiIsICh2b2lkKikgZywgc3RhdGUsIChjaGFyKil1c2VyZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIGF2YWhpX2RvbWFpbl9icm93c2VyX2NhbGxiYWNrKAorICAgIEF2YWhpRG9tYWluQnJvd3NlciAqYiwKKyAgICBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLAorICAgIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsCisgICAgQXZhaGlCcm93c2VyRXZlbnQgZXZlbnQsCisgICAgY29uc3QgY2hhciAqZG9tYWluLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgQXZhaGlMb29rdXBSZXN1bHRGbGFncyBmbGFncywKKyAgICB2b2lkICp1c2VyZGF0YSkgeworCisgICAgcHJpbnRmICgiRE9NQUlOLUJST1dTRVI6IENhbGxiYWNrIG9uICVwLCBpbnRlcmZhY2UgKCVkKSwgcHJvdG9jb2wgKCVkKSwgZXZlbnQgKCVkKSwgZG9tYWluICglcyksIGRhdGEgKCVzKVxuIiwgKHZvaWQqKSBiLCBpbnRlcmZhY2UsIHByb3RvY29sLCBldmVudCwgZG9tYWluID8gZG9tYWluIDogIk5VTEwiLCAoY2hhciopdXNlcmRhdGEpOworfQorCitzdGF0aWMgdm9pZCBhdmFoaV9zZXJ2aWNlX3Jlc29sdmVyX2NhbGxiYWNrKAorICAgIEF2YWhpU2VydmljZVJlc29sdmVyICpyLAorICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsCisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICBBdmFoaVJlc29sdmVyRXZlbnQgZXZlbnQsCisgICAgY29uc3QgY2hhciAqbmFtZSwKKyAgICBjb25zdCBjaGFyICp0eXBlLAorICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwKKyAgICBjb25zdCBjaGFyICpob3N0X25hbWUsCisgICAgY29uc3QgQXZhaGlBZGRyZXNzICphLAorICAgIHVpbnQxNl90IHBvcnQsCisgICAgQXZhaGlTdHJpbmdMaXN0ICp0eHQsCisgICAgQVZBSElfR0NDX1VOVVNFRCBBdmFoaUxvb2t1cFJlc3VsdEZsYWdzIGZsYWdzLAorICAgIHZvaWQgKnVzZXJkYXRhKSB7CisKKyAgICBjaGFyIGFkZHJbNjRdOworICAgIGNoYXIgKnR4dHI7CisgICAgaWYgKGV2ZW50ID09IEFWQUhJX1JFU09MVkVSX0ZBSUxVUkUpIHsKKyAgICAgICAgcHJpbnRmICgiU0VSVklDRS1SRVNPTFZFUjogU2VydmljZVJlc29sdmVyICVwIHRpbWVkIG91dCAoJXMgJXMpXG4iLCAodm9pZCopIHIsIG5hbWUsIHR5cGUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGF2YWhpX2FkZHJlc3Nfc25wcmludCAoYWRkciwgc2l6ZW9mIChhZGRyKSwgYSk7CisgICAgdHh0ciA9IGF2YWhpX3N0cmluZ19saXN0X3RvX3N0cmluZyAodHh0KTsKKyAgICBwcmludGYgKCJTRVJWSUNFLVJFU09MVkVSOiBDYWxsYmFjayBvbiBTZXJ2aWNlUmVzb2x2ZXIsIGludGVyZmFjZSAoJWQpLCBwcm90b2NvbCAoJWQpLCBldmVudCAoJWQpLCBuYW1lICglcyksIHR5cGUgKCVzKSwgZG9tYWluICglcyksIGhvc3RfbmFtZSAoJXMpLCBhZGRyZXNzICglcyksIHBvcnQgKCVkKSwgdHh0ZGF0YSAoJXMpLCBkYXRhKCVzKVxuIiwgaW50ZXJmYWNlLCBwcm90b2NvbCwgZXZlbnQsIG5hbWUsIHR5cGUsIGRvbWFpbiwgaG9zdF9uYW1lLCBhZGRyLCBwb3J0LCB0eHRyLCAoY2hhciopdXNlcmRhdGEpOworICAgIGF2YWhpX2ZyZWUodHh0cik7Cit9CisKK3N0YXRpYyB2b2lkIGF2YWhpX3NlcnZpY2VfYnJvd3Nlcl9jYWxsYmFjayAoCisgICAgQXZhaGlTZXJ2aWNlQnJvd3NlciAqYiwKKyAgICBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLAorICAgIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsCisgICAgQXZhaGlCcm93c2VyRXZlbnQgZXZlbnQsCisgICAgY29uc3QgY2hhciAqbmFtZSwKKyAgICBjb25zdCBjaGFyICp0eXBlLAorICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIEF2YWhpTG9va3VwUmVzdWx0RmxhZ3MgZmxhZ3MsCisgICAgdm9pZCAqdXNlcmRhdGEpIHsKKworICAgIEF2YWhpU2VydmljZVJlc29sdmVyICpzcjsKKworICAgIHByaW50ZiAoIlNFUlZJQ0UtQlJPV1NFUjogQ2FsbGJhY2sgb24gJXAsIGludGVyZmFjZSAoJWQpLCBwcm90b2NvbCAoJWQpLCBldmVudCAoJWQpLCBuYW1lICglcyksIHR5cGUgKCVzKSwgZG9tYWluICglcyksIGRhdGEgKCVzKVxuIiwgKHZvaWQqKSBiLCBpbnRlcmZhY2UsIHByb3RvY29sLCBldmVudCwgbmFtZSA/IG5hbWUgOiAiTlVMTCIsIHR5cGUsIGRvbWFpbiA/IGRvbWFpbiA6ICJOVUxMIiwgKGNoYXIqKXVzZXJkYXRhKTsKKworICAgIGlmIChiICYmIG5hbWUpCisgICAgeworICAgICAgICBzciA9IGF2YWhpX3NlcnZpY2VfcmVzb2x2ZXJfbmV3IChhdmFoaV9zZXJ2aWNlX2Jyb3dzZXJfZ2V0X2NsaWVudCAoYiksIGludGVyZmFjZSwgcHJvdG9jb2wsIG5hbWUsIHR5cGUsIGRvbWFpbiwgQVZBSElfUFJPVE9fVU5TUEVDLCAwLCBhdmFoaV9zZXJ2aWNlX3Jlc29sdmVyX2NhbGxiYWNrLCAoY2hhciopICJ4eFhYeHgiKTsKKyAgICAgICAgcHJpbnRmKCJOZXcgc2VydmljZSByZXNvbHZlciAlcFxuIiwgKHZvaWQqKSBzcik7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBhdmFoaV9zZXJ2aWNlX3R5cGVfYnJvd3Nlcl9jYWxsYmFjayAoCisgICAgQXZhaGlTZXJ2aWNlVHlwZUJyb3dzZXIgKmIsCisgICAgQXZhaGlJZkluZGV4IGludGVyZmFjZSwKKyAgICBBdmFoaVByb3RvY29sIHByb3RvY29sLAorICAgIEF2YWhpQnJvd3NlckV2ZW50IGV2ZW50LAorICAgIGNvbnN0IGNoYXIgKnR5cGUsCisgICAgY29uc3QgY2hhciAqZG9tYWluLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgQXZhaGlMb29rdXBSZXN1bHRGbGFncyBmbGFncywKKyAgICB2b2lkICp1c2VyZGF0YSkgeworCisgICAgcHJpbnRmICgiU0VSVklDRS1UWVBFLUJST1dTRVI6IENhbGxiYWNrIG9uICVwLCBpbnRlcmZhY2UgKCVkKSwgcHJvdG9jb2wgKCVkKSwgZXZlbnQgKCVkKSwgdHlwZSAoJXMpLCBkb21haW4gKCVzKSwgZGF0YSAoJXMpXG4iLCAodm9pZCopIGIsIGludGVyZmFjZSwgcHJvdG9jb2wsIGV2ZW50LCB0eXBlID8gdHlwZSA6ICJOVUxMIiwgZG9tYWluID8gZG9tYWluIDogIk5VTEwiLCAoY2hhciopdXNlcmRhdGEpOworfQorCitzdGF0aWMgdm9pZCBhdmFoaV9hZGRyZXNzX3Jlc29sdmVyX2NhbGxiYWNrICgKKyAgICBBVkFISV9HQ0NfVU5VU0VEIEF2YWhpQWRkcmVzc1Jlc29sdmVyICpyLAorICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsCisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICBBdmFoaVJlc29sdmVyRXZlbnQgZXZlbnQsCisgICAgY29uc3QgQXZhaGlBZGRyZXNzICphZGRyZXNzLAorICAgIGNvbnN0IGNoYXIgKm5hbWUsCisgICAgQVZBSElfR0NDX1VOVVNFRCBBdmFoaUxvb2t1cFJlc3VsdEZsYWdzIGZsYWdzLAorICAgIHZvaWQgKnVzZXJkYXRhKSB7CisKKyAgICBjaGFyIGFkZHJbNjRdOworICAgIGlmIChldmVudCA9PSBBVkFISV9SRVNPTFZFUl9GQUlMVVJFKSB7CisgICAgICAgIHByaW50ZiAoIkFERFJFU1MtUkVTT0xWRVI6IENhbGxiYWNrIG9uIEFkZHJlc3NSZXNvbHZlciwgdGltZWQgb3V0LlxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgYXZhaGlfYWRkcmVzc19zbnByaW50IChhZGRyLCBzaXplb2YgKGFkZHIpLCBhZGRyZXNzKTsKKyAgICBwcmludGYgKCJBRERSRVNTLVJFU09MVkVSOiBDYWxsYmFjayBvbiBBZGRyZXNzUmVzb2x2ZXIsIGludGVyZmFjZSAoJWQpLCBwcm90b2NvbCAoJWQpLCBldmVuICglZCksIGFkZHJlc3MgKCVzKSwgbmFtZSAoJXMpLCBkYXRhKCVzKVxuIiwgaW50ZXJmYWNlLCBwcm90b2NvbCwgZXZlbnQsIGFkZHIsIG5hbWUsIChjaGFyKikgdXNlcmRhdGEpOworfQorCitzdGF0aWMgdm9pZCBhdmFoaV9ob3N0X25hbWVfcmVzb2x2ZXJfY2FsbGJhY2sgKAorICAgIEF2YWhpSG9zdE5hbWVSZXNvbHZlciAqciwKKyAgICBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLAorICAgIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsCisgICAgQXZhaGlSZXNvbHZlckV2ZW50IGV2ZW50LAorICAgIGNvbnN0IGNoYXIgKm5hbWUsCisgICAgY29uc3QgQXZhaGlBZGRyZXNzICphLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgQXZhaGlMb29rdXBSZXN1bHRGbGFncyBmbGFncywKKyAgICB2b2lkICp1c2VyZGF0YSkgeworCisgICAgQXZhaGlDbGllbnQgKmNsaWVudDsKKyAgICBBdmFoaUFkZHJlc3NSZXNvbHZlciAqYXI7CisgICAgY2hhciBhZGRyWzY0XTsKKworICAgIGlmIChldmVudCA9PSBBVkFISV9SRVNPTFZFUl9GQUlMVVJFKSB7CisgICAgICAgIHByaW50ZiAoIkhPU1QtTkFNRS1SRVNPTFZFUjogQ2FsbGJhY2sgb24gSG9zdE5hbWVSZXNvbHZlciwgdGltZWQgb3V0LlxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2xpZW50ID0gYXZhaGlfaG9zdF9uYW1lX3Jlc29sdmVyX2dldF9jbGllbnQgKHIpOworYXIgPSBhdmFoaV9hZGRyZXNzX3Jlc29sdmVyX25ldyhjbGllbnQsIGludGVyZmFjZSwgcHJvdG9jb2wsIGEsIDAsIGF2YWhpX2FkZHJlc3NfcmVzb2x2ZXJfY2FsbGJhY2ssIChjaGFyKikgIm9tZ2hhaTZ1Iik7CisgICAgaWYgKGFyKQorICAgIHsKKyAgICAgICAgcHJpbnRmICgiU3VjY2VzZnVsbHkgY3JlYXRlZCBhZGRyZXNzIHJlc29sdmVyIG9iamVjdFxuIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHJpbnRmICgiRmFpbGVkIHRvIGNyZWF0ZSBBZGRyZXNzUmVzb2x2ZXJcbiIpOworICAgIH0KKyAgICBhdmFoaV9hZGRyZXNzX3NucHJpbnQgKGFkZHIsIHNpemVvZiAoYWRkciksIGEpOworICAgIHByaW50ZiAoIkhPU1QtTkFNRS1SRVNPTFZFUjogQ2FsbGJhY2sgb24gSG9zdE5hbWVSZXNvbHZlciwgaW50ZXJmYWNlICglZCksIHByb3RvY29sICglZCksIGV2ZW50ICglZCksIG5hbWUgKCVzKSwgYWRkcmVzcyAoJXMpLCBkYXRhICglcylcbiIsIGludGVyZmFjZSwgcHJvdG9jb2wsIGV2ZW50LCBuYW1lLCBhZGRyLCAoY2hhciopdXNlcmRhdGEpOworfQorc3RhdGljIHZvaWQgdGVzdF9mcmVlX2RvbWFpbl9icm93c2VyKEFWQUhJX0dDQ19VTlVTRUQgQXZhaGlUaW1lb3V0ICp0aW1lb3V0LCB2b2lkKiB1c2VyZGF0YSkKK3sKKyAgICBBdmFoaVNlcnZpY2VCcm93c2VyICpiID0gdXNlcmRhdGE7CisgICAgcHJpbnRmICgiRnJlZWluZyBkb21haW4gYnJvd3NlclxuIik7CisgICAgYXZhaGlfc2VydmljZV9icm93c2VyX2ZyZWUgKGIpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X2ZyZWVfZW50cnlfZ3JvdXAgKEFWQUhJX0dDQ19VTlVTRUQgQXZhaGlUaW1lb3V0ICp0aW1lb3V0LCB2b2lkKiB1c2VyZGF0YSkKK3sKKyAgICBBdmFoaUVudHJ5R3JvdXAgKmcgPSB1c2VyZGF0YTsKKyAgICBwcmludGYgKCJGcmVlaW5nIGVudHJ5IGdyb3VwXG4iKTsKKyAgICBhdmFoaV9lbnRyeV9ncm91cF9mcmVlIChnKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9lbnRyeV9ncm91cF9yZXNldCAoQVZBSElfR0NDX1VOVVNFRCBBdmFoaVRpbWVvdXQgKnRpbWVvdXQsIHZvaWQqIHVzZXJkYXRhKQoreworICAgIEF2YWhpRW50cnlHcm91cCAqZyA9IHVzZXJkYXRhOworCisgICAgcHJpbnRmICgiUmVzZXR0aW5nIGVudHJ5IGdyb3VwXG4iKTsKKyAgICBhdmFoaV9lbnRyeV9ncm91cF9yZXNldCAoZyk7CisKKyAgICBhdmFoaV9lbnRyeV9ncm91cF9hZGRfc2VydmljZSAoZywgQVZBSElfSUZfVU5TUEVDLCBBVkFISV9QUk9UT19VTlNQRUMsIDAsICJMYXRoaWF0J3MgU2l0ZSIsICJfaHR0cC5fdGNwIiwgTlVMTCwgTlVMTCwgODAsICJmb289YmFyMiIsIE5VTEwpOworCisgICAgYXZhaGlfZW50cnlfZ3JvdXBfY29tbWl0IChnKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9lbnRyeV9ncm91cF91cGRhdGUoQVZBSElfR0NDX1VOVVNFRCBBdmFoaVRpbWVvdXQgKnRpbWVvdXQsIHZvaWQqIHVzZXJkYXRhKSB7CisgICAgQXZhaGlFbnRyeUdyb3VwICpnID0gdXNlcmRhdGE7CisKKyAgICBwcmludGYgKCJVcGRhdGluZyBlbnRyeSBncm91cFxuIik7CisKKyAgICBhdmFoaV9lbnRyeV9ncm91cF91cGRhdGVfc2VydmljZV90eHQoZywgQVZBSElfSUZfVU5TUEVDLCBBVkFISV9QUk9UT19VTlNQRUMsIDAsICJMYXRoaWF0J3MgU2l0ZSIsICJfaHR0cC5fdGNwIiwgTlVMTCwgImZvbz1iYXIzIiwgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlcm1pbmF0ZShBVkFISV9HQ0NfVU5VU0VEIEF2YWhpVGltZW91dCAqdGltZW91dCwgQVZBSElfR0NDX1VOVVNFRCB2b2lkICp1c2VyZGF0YSkgeworCisgICAgYXZhaGlfc2ltcGxlX3BvbGxfcXVpdChzaW1wbGVfcG9sbCk7Cit9CisKK2ludCBtYWluIChBVkFISV9HQ0NfVU5VU0VEIGludCBhcmdjLCBBVkFISV9HQ0NfVU5VU0VEIGNoYXIgKmFyZ3ZbXSkgeworICAgIEF2YWhpQ2xpZW50ICphdmFoaTsKKyAgICBBdmFoaUVudHJ5R3JvdXAgKmdyb3VwLCAqZ3JvdXAyOworICAgIEF2YWhpRG9tYWluQnJvd3NlciAqZG9tYWluOworICAgIEF2YWhpU2VydmljZUJyb3dzZXIgKnNiOworICAgIEF2YWhpU2VydmljZVR5cGVCcm93c2VyICpzdDsKKyAgICBBdmFoaUhvc3ROYW1lUmVzb2x2ZXIgKmhucjsKKyAgICBBdmFoaUFkZHJlc3MgKmFhcjsKKyAgICBjb25zdCBjaGFyICpyZXQ7CisgICAgaW50IGVycm9yOworICAgIHVpbnQzMl90IGNvb2tpZTsKKyAgICBzdHJ1Y3QgdGltZXZhbCB0djsKKyAgICBBdmFoaUFkZHJlc3MgYTsKKworICAgIHNpbXBsZV9wb2xsID0gYXZhaGlfc2ltcGxlX3BvbGxfbmV3KCk7CisgICAgcG9sbF9hcGkgPSBhdmFoaV9zaW1wbGVfcG9sbF9nZXQoc2ltcGxlX3BvbGwpOworCisgICAgaWYgKCEoYXZhaGkgPSBhdmFoaV9jbGllbnRfbmV3KHBvbGxfYXBpLCAwLCBhdmFoaV9jbGllbnRfY2FsbGJhY2ssIChjaGFyKikgIm9tZ2hhaTJ1IiwgJmVycm9yKSkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDbGllbnQgZmFpbGVkOiAlc1xuIiwgYXZhaGlfc3RyZXJyb3IoZXJyb3IpKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIHByaW50ZigiU3RhdGU6ICVpXG4iLCBhdmFoaV9jbGllbnRfZ2V0X3N0YXRlKGF2YWhpKSk7CisKKyAgICByZXQgPSBhdmFoaV9jbGllbnRfZ2V0X3ZlcnNpb25fc3RyaW5nIChhdmFoaSk7CisgICAgcHJpbnRmKCJBdmFoaSBTZXJ2ZXIgVmVyc2lvbjogJXMgKEVycm9yIFJldHVybjogJXMpXG4iLCByZXQsIHJldCA/ICJPSyIgOiBhdmFoaV9zdHJlcnJvcihhdmFoaV9jbGllbnRfZXJybm8oYXZhaGkpKSk7CisKKyAgICByZXQgPSBhdmFoaV9jbGllbnRfZ2V0X2hvc3RfbmFtZSAoYXZhaGkpOworICAgIHByaW50ZigiSG9zdCBOYW1lOiAlcyAoRXJyb3IgUmV0dXJuOiAlcylcbiIsIHJldCwgcmV0ID8gIk9LIiA6IGF2YWhpX3N0cmVycm9yKGF2YWhpX2NsaWVudF9lcnJubyhhdmFoaSkpKTsKKworICAgIHJldCA9IGF2YWhpX2NsaWVudF9nZXRfZG9tYWluX25hbWUgKGF2YWhpKTsKKyAgICBwcmludGYoIkRvbWFpbiBOYW1lOiAlcyAoRXJyb3IgUmV0dXJuOiAlcylcbiIsIHJldCwgcmV0ID8gIk9LIiA6IGF2YWhpX3N0cmVycm9yKGF2YWhpX2NsaWVudF9lcnJubyhhdmFoaSkpKTsKKworICAgIHJldCA9IGF2YWhpX2NsaWVudF9nZXRfaG9zdF9uYW1lX2ZxZG4gKGF2YWhpKTsKKyAgICBwcmludGYoIkZRRE46ICVzIChFcnJvciBSZXR1cm46ICVzKVxuIiwgcmV0LCByZXQgPyAiT0siIDogYXZhaGlfc3RyZXJyb3IoYXZhaGlfY2xpZW50X2Vycm5vKGF2YWhpKSkpOworCisgICAgY29va2llID0gYXZhaGlfY2xpZW50X2dldF9sb2NhbF9zZXJ2aWNlX2Nvb2tpZShhdmFoaSk7CisgICAgcHJpbnRmKCJMb2NhbCBzZXJ2aWNlIGNvb2tpZTogJXUgKEVycm9yIFJldHVybjogJXMpXG4iLCBjb29raWUsIGNvb2tpZSAhPSBBVkFISV9TRVJWSUNFX0NPT0tJRV9JTlZBTElEID8gIk9LIiA6IGF2YWhpX3N0cmVycm9yKGF2YWhpX2NsaWVudF9lcnJubyhhdmFoaSkpKTsKKworICAgIGdyb3VwID0gYXZhaGlfZW50cnlfZ3JvdXBfbmV3KGF2YWhpLCBhdmFoaV9lbnRyeV9ncm91cF9jYWxsYmFjaywgKGNoYXIqKSAib21naGFpIik7CisgICAgcHJpbnRmKCJDcmVhdGluZyBlbnRyeSBncm91cDogJXNcbiIsIGdyb3VwID8gIk9LIiA6IGF2YWhpX3N0cmVycm9yKGF2YWhpX2NsaWVudF9lcnJubyAoYXZhaGkpKSk7CisKKyAgICBhc3NlcnQoZ3JvdXApOworCisgICAgcHJpbnRmKCJTdWNlc3NmdWxseSBjcmVhdGVkIGVudHJ5IGdyb3VwICVwXG4iLCAodm9pZCopIGdyb3VwKTsKKworICAgIHByaW50ZigiJXNcbiIsIGF2YWhpX3N0cmVycm9yKGF2YWhpX2VudHJ5X2dyb3VwX2FkZF9zZXJ2aWNlIChncm91cCwgQVZBSElfSUZfVU5TUEVDLCBBVkFISV9QUk9UT19VTlNQRUMsIDAsICJMYXRoaWF0J3MgU2l0ZSIsICJfaHR0cC5fdGNwIiwgTlVMTCwgTlVMTCwgODAsICJmb289YmFyIiwgTlVMTCkpKTsKKyAgICBwcmludGYoImFkZF9yZWNvcmQ6ICVkXG4iLCBhdmFoaV9lbnRyeV9ncm91cF9hZGRfcmVjb3JkIChncm91cCwgQVZBSElfSUZfVU5TUEVDLCBBVkFISV9QUk9UT19VTlNQRUMsIDAsICJUZXN0WCIsIDB4MDEsIDB4MTAsIDEyMCwgIlw1Ym9veWEiLCA2KSk7CisKKyAgICBhdmFoaV9lbnRyeV9ncm91cF9jb21taXQgKGdyb3VwKTsKKworICAgIGRvbWFpbiA9IGF2YWhpX2RvbWFpbl9icm93c2VyX25ldyAoYXZhaGksIEFWQUhJX0lGX1VOU1BFQywgQVZBSElfUFJPVE9fVU5TUEVDLCBOVUxMLCBBVkFISV9ET01BSU5fQlJPV1NFUl9CUk9XU0UsIDAsIGF2YWhpX2RvbWFpbl9icm93c2VyX2NhbGxiYWNrLCAoY2hhciopICJvbWdoYWkzdSIpOworCisgICAgaWYgKGRvbWFpbiA9PSBOVUxMKQorICAgICAgICBwcmludGYgKCJGYWlsZWQgdG8gY3JlYXRlIGRvbWFpbiBicm93c2VyIG9iamVjdFxuIik7CisgICAgZWxzZQorICAgICAgICBwcmludGYgKCJTdWNlc3NmdWxseSBjcmVhdGVkIGRvbWFpbiBicm93c2VyICVwXG4iLCAodm9pZCopIGRvbWFpbik7CisKKyAgICBzdCA9IGF2YWhpX3NlcnZpY2VfdHlwZV9icm93c2VyX25ldyAoYXZhaGksIEFWQUhJX0lGX1VOU1BFQywgQVZBSElfUFJPVE9fVU5TUEVDLCBOVUxMLCAwLCBhdmFoaV9zZXJ2aWNlX3R5cGVfYnJvd3Nlcl9jYWxsYmFjaywgKGNoYXIqKSAib21naGFpM3UiKTsKKyAgICBpZiAoc3QgPT0gTlVMTCkKKyAgICAgICAgcHJpbnRmICgiRmFpbGVkIHRvIGNyZWF0ZSBzZXJ2aWNlIHR5cGUgYnJvd3NlciBvYmplY3RcbiIpOworICAgIGVsc2UKKyAgICAgICAgcHJpbnRmICgiU3VjZXNzZnVsbHkgY3JlYXRlZCBzZXJ2aWNlIHR5cGUgYnJvd3NlciAlcFxuIiwgKHZvaWQqKSBzdCk7CisKKyAgICBzYiA9IGF2YWhpX3NlcnZpY2VfYnJvd3Nlcl9uZXcgKGF2YWhpLCBBVkFISV9JRl9VTlNQRUMsIEFWQUhJX1BST1RPX1VOU1BFQywgIl9odHRwLl90Y3AiLCBOVUxMLCAwLCBhdmFoaV9zZXJ2aWNlX2Jyb3dzZXJfY2FsbGJhY2ssIChjaGFyKikgIm9tZ2hhaTN1Iik7CisgICAgaWYgKHNiID09IE5VTEwpCisgICAgICAgIHByaW50ZiAoIkZhaWxlZCB0byBjcmVhdGUgc2VydmljZSBicm93c2VyIG9iamVjdFxuIik7CisgICAgZWxzZQorICAgICAgICBwcmludGYgKCJTdWNlc3NmdWxseSBjcmVhdGVkIHNlcnZpY2UgYnJvd3NlciAlcFxuIiwgKHZvaWQqKSBzYik7CisKKyAgICBobnIgPSBhdmFoaV9ob3N0X25hbWVfcmVzb2x2ZXJfbmV3IChhdmFoaSwgQVZBSElfSUZfVU5TUEVDLCBBVkFISV9QUk9UT19VTlNQRUMsICJlY3N0YXN5LmxvY2FsIiwgQVZBSElfUFJPVE9fVU5TUEVDLCAwLCBhdmFoaV9ob3N0X25hbWVfcmVzb2x2ZXJfY2FsbGJhY2ssIChjaGFyKikgIm9tZ2hhaTR1Iik7CisgICAgaWYgKGhuciA9PSBOVUxMKQorICAgICAgICBwcmludGYgKCJGYWlsZWQgdG8gY3JlYXRlIGhvc3RuYW1lIHJlc29sdmVyIG9iamVjdFxuIik7CisgICAgZWxzZQorICAgICAgICBwcmludGYgKCJTdWNjZXNzZnVsbHkgY3JlYXRlZCBob3N0bmFtZSByZXNvbHZlciBvYmplY3RcbiIpOworCisgICAgYWFyID0gYXZhaGlfYWRkcmVzc19wYXJzZSAoIjIyNC4wLjAuMjUxIiwgQVZBSElfUFJPVE9fVU5TUEVDLCAmYSk7CisgICAgaWYgKGFhciA9PSBOVUxMKSB7CisgICAgICAgIHByaW50ZiAoImZhaWxlZCB0byBjcmVhdGUgYWRkcmVzcyBvYmplY3RcbiIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGdyb3VwMiA9IGF2YWhpX2VudHJ5X2dyb3VwX25ldyAoYXZhaGksIGF2YWhpX2VudHJ5X2dyb3VwMl9jYWxsYmFjaywgKGNoYXIqKSAib21naGFpMjIyIik7CisgICAgICAgIGlmICgoZXJyb3IgPSBhdmFoaV9lbnRyeV9ncm91cF9hZGRfYWRkcmVzcyAoZ3JvdXAyLCBBVkFISV9JRl9VTlNQRUMsIEFWQUhJX1BST1RPX1VOU1BFQywgMCwgInRlc3QtbWRucy5sb2NhbC4iLCBhYXIpKSA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50ZiAoIioqKiBmYWlsZWQgdG8gYWRkIGFkZHJlc3MgdG8gZW50cnkgZ3JvdXA6ICVzXG4iLCBhdmFoaV9zdHJlcnJvciAoZXJyb3IpKTsKKyAgICAgICAgICAgIGF2YWhpX2VudHJ5X2dyb3VwX2ZyZWUgKGdyb3VwMik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwcmludGYgKCIqKiogc3VjY2VzcywgYWRkZWQgYWRkcmVzc1xuIik7CisgICAgICAgICAgICBhdmFoaV9lbnRyeV9ncm91cF9jb21taXQgKGdyb3VwMik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhdmFoaV9lbGFwc2VfdGltZSgmdHYsIDgwMDAsIDApOworICAgIHBvbGxfYXBpLT50aW1lb3V0X25ldyhwb2xsX2FwaSwgJnR2LCB0ZXN0X2VudHJ5X2dyb3VwX3Jlc2V0LCBncm91cCk7CisgICAgYXZhaGlfZWxhcHNlX3RpbWUoJnR2LCAxNTAwMCwgMCk7CisgICAgcG9sbF9hcGktPnRpbWVvdXRfbmV3KHBvbGxfYXBpLCAmdHYsIHRlc3RfZW50cnlfZ3JvdXBfdXBkYXRlLCBncm91cCk7CisgICAgYXZhaGlfZWxhcHNlX3RpbWUoJnR2LCAyMDAwMCwgMCk7CisgICAgcG9sbF9hcGktPnRpbWVvdXRfbmV3KHBvbGxfYXBpLCAmdHYsIHRlc3RfZnJlZV9lbnRyeV9ncm91cCwgZ3JvdXApOworICAgIGF2YWhpX2VsYXBzZV90aW1lKCZ0diwgMjUwMDAsIDApOworICAgIHBvbGxfYXBpLT50aW1lb3V0X25ldyhwb2xsX2FwaSwgJnR2LCB0ZXN0X2ZyZWVfZG9tYWluX2Jyb3dzZXIsIHNiKTsKKworICAgIGF2YWhpX2VsYXBzZV90aW1lKCZ0diwgMzAwMDAsIDApOworICAgIHBvbGxfYXBpLT50aW1lb3V0X25ldyhwb2xsX2FwaSwgJnR2LCB0ZXJtaW5hdGUsIE5VTEwpOworCisgICAgYXZhaGlfc2ltcGxlX3BvbGxfbG9vcChzaW1wbGVfcG9sbCk7CisKKyAgICBwcmludGYoInRlcm1pbmF0aW5nLi4uXG4iKTsKKworZmFpbDoKKworICAgIGlmIChhdmFoaSkKKyAgICAgICAgYXZhaGlfY2xpZW50X2ZyZWUgKGF2YWhpKTsKKworICAgIGlmIChzaW1wbGVfcG9sbCkKKyAgICAgICAgYXZhaGlfc2ltcGxlX3BvbGxfZnJlZShzaW1wbGVfcG9sbCk7CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jbGllbnQvY2xpZW50LmMgYi9hdmFoaS0wLjYuMzEvYXZhaGktY2xpZW50L2NsaWVudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwY2MzNWQKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY2xpZW50L2NsaWVudC5jCkBAIC0wLDAgKzEsOTU4IEBACisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxkYnVzL2RidXMuaD4KKworI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9kYnVzLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2xsaXN0Lmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2Vycm9yLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2RidXMuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vbWFsbG9jLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2RidXMtd2F0Y2gtZ2x1ZS5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9pMThuLmg+CisKKyNpbmNsdWRlICJjbGllbnQuaCIKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCisjZGVmaW5lIEFWQUhJX0NMSUVOVF9EQlVTX0FQSV9TVVBQT1JURUQgKCh1aW50MzJfdCkgMHgwMjAxKQorCitzdGF0aWMgaW50IGluaXRfc2VydmVyKEF2YWhpQ2xpZW50ICpjbGllbnQsIGludCAqcmV0X2Vycm9yKTsKKworaW50IGF2YWhpX2NsaWVudF9zZXRfZXJybm8gKEF2YWhpQ2xpZW50ICpjbGllbnQsIGludCBlcnJvcikgeworICAgIGFzc2VydChjbGllbnQpOworCisgICAgcmV0dXJuIGNsaWVudC0+ZXJyb3IgPSBlcnJvcjsKK30KKworaW50IGF2YWhpX2NsaWVudF9zZXRfZGJ1c19lcnJvcihBdmFoaUNsaWVudCAqY2xpZW50LCBEQnVzRXJyb3IgKmVycm9yKSB7CisgICAgYXNzZXJ0KGNsaWVudCk7CisgICAgYXNzZXJ0KGVycm9yKTsKKworICAgIHJldHVybiBhdmFoaV9jbGllbnRfc2V0X2Vycm5vKGNsaWVudCwgYXZhaGlfZXJyb3JfZGJ1c190b19udW1iZXIoZXJyb3ItPm5hbWUpKTsKK30KKworc3RhdGljIHZvaWQgY2xpZW50X3NldF9zdGF0ZShBdmFoaUNsaWVudCAqY2xpZW50LCBBdmFoaUNsaWVudFN0YXRlIHN0YXRlKSB7CisgICAgYXNzZXJ0KGNsaWVudCk7CisKKyAgICBpZiAoY2xpZW50LT5zdGF0ZSA9PSBzdGF0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY2xpZW50LT5zdGF0ZSA9IHN0YXRlOworCisgICAgc3dpdGNoIChjbGllbnQtPnN0YXRlKSB7CisgICAgICAgIGNhc2UgQVZBSElfQ0xJRU5UX0ZBSUxVUkU6CisgICAgICAgICAgICBpZiAoY2xpZW50LT5idXMpIHsKKyNpZmRlZiBIQVZFX0RCVVNfQ09OTkVDVElPTl9DTE9TRQorICAgICAgICAgICAgICAgIGRidXNfY29ubmVjdGlvbl9jbG9zZShjbGllbnQtPmJ1cyk7CisjZWxzZQorICAgICAgICAgICAgICAgIGRidXNfY29ubmVjdGlvbl9kaXNjb25uZWN0KGNsaWVudC0+YnVzKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGRidXNfY29ubmVjdGlvbl91bnJlZihjbGllbnQtPmJ1cyk7CisgICAgICAgICAgICAgICAgY2xpZW50LT5idXMgPSBOVUxMOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBGYWxsIHRocm91Z2ggKi8KKworICAgICAgICBjYXNlIEFWQUhJX0NMSUVOVF9TX0NPTExJU0lPTjoKKyAgICAgICAgY2FzZSBBVkFISV9DTElFTlRfU19SRUdJU1RFUklORzoKKworICAgICAgICAgICAgLyogQ2xlYXIgY2FjaGVkIHN0cmluZ3MgKi8KKyAgICAgICAgICAgIGF2YWhpX2ZyZWUoY2xpZW50LT5ob3N0X25hbWUpOworICAgICAgICAgICAgYXZhaGlfZnJlZShjbGllbnQtPmhvc3RfbmFtZV9mcWRuKTsKKyAgICAgICAgICAgIGF2YWhpX2ZyZWUoY2xpZW50LT5kb21haW5fbmFtZSk7CisKKyAgICAgICAgICAgIGNsaWVudC0+aG9zdF9uYW1lID0gIE5VTEw7CisgICAgICAgICAgICBjbGllbnQtPmhvc3RfbmFtZV9mcWRuID0gTlVMTDsKKyAgICAgICAgICAgIGNsaWVudC0+ZG9tYWluX25hbWUgPSBOVUxMOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBVkFISV9DTElFTlRfU19SVU5OSU5HOgorICAgICAgICBjYXNlIEFWQUhJX0NMSUVOVF9DT05ORUNUSU5HOgorICAgICAgICAgICAgYnJlYWs7CisKKyAgICB9CisKKyAgICBpZiAoY2xpZW50LT5jYWxsYmFjaykKKyAgICAgICAgY2xpZW50LT5jYWxsYmFjayAoY2xpZW50LCBzdGF0ZSwgY2xpZW50LT51c2VyZGF0YSk7Cit9CisKK3N0YXRpYyBEQnVzSGFuZGxlclJlc3VsdCBmaWx0ZXJfZnVuYyhEQnVzQ29ubmVjdGlvbiAqYnVzLCBEQnVzTWVzc2FnZSAqbWVzc2FnZSwgdm9pZCAqdXNlcmRhdGEpIHsKKyAgICBBdmFoaUNsaWVudCAqY2xpZW50ID0gdXNlcmRhdGE7CisgICAgREJ1c0Vycm9yIGVycm9yOworCisgICAgYXNzZXJ0KGJ1cyk7CisgICAgYXNzZXJ0KG1lc3NhZ2UpOworCisgICAgZGJ1c19lcnJvcl9pbml0KCZlcnJvcik7CisKKy8qICAgICBmcHJpbnRmKHN0ZGVyciwgImRidXM6IGludGVyZmFjZT0lcywgcGF0aD0lcywgbWVtYmVyPSVzXG4iLCAqLworLyogICAgICAgICAgICAgZGJ1c19tZXNzYWdlX2dldF9pbnRlcmZhY2UgKG1lc3NhZ2UpLCAqLworLyogICAgICAgICAgICAgZGJ1c19tZXNzYWdlX2dldF9wYXRoIChtZXNzYWdlKSwgKi8KKy8qICAgICAgICAgICAgIGRidXNfbWVzc2FnZV9nZXRfbWVtYmVyIChtZXNzYWdlKSk7ICovCisKKyAgICBpZiAoZGJ1c19tZXNzYWdlX2lzX3NpZ25hbChtZXNzYWdlLCBEQlVTX0lOVEVSRkFDRV9MT0NBTCwgIkRpc2Nvbm5lY3RlZCIpKSB7CisKKyAgICAgICAgLyogVGhlIERCVVMgc2VydmVyIGRpZWQgb3Iga2lja2VkIHVzICovCisgICAgICAgIGF2YWhpX2NsaWVudF9zZXRfZXJybm8oY2xpZW50LCBBVkFISV9FUlJfRElTQ09OTkVDVEVEKTsKKyAgICAgICAgZ290byBmYWlsOworCisgICAgfSBlbHNlIGlmIChkYnVzX21lc3NhZ2VfaXNfc2lnbmFsKG1lc3NhZ2UsIERCVVNfSU5URVJGQUNFX0RCVVMsICJOYW1lQWNxdWlyZWQiKSkgeworCisgICAgICAgIC8qIElnbm9yZSB0aGlzIG1lc3NhZ2UgKi8KKworICAgIH0gZWxzZSBpZiAoZGJ1c19tZXNzYWdlX2lzX3NpZ25hbChtZXNzYWdlLCBEQlVTX0lOVEVSRkFDRV9EQlVTLCAiTmFtZU93bmVyQ2hhbmdlZCIpKSB7CisgICAgICAgIGNoYXIgKm5hbWUsICpvbGQsICpuZXc7CisKKyAgICAgICAgaWYgKCFkYnVzX21lc3NhZ2VfZ2V0X2FyZ3MoCisgICAgICAgICAgICAgICAgICBtZXNzYWdlLCAmZXJyb3IsCisgICAgICAgICAgICAgICAgICBEQlVTX1RZUEVfU1RSSU5HLCAmbmFtZSwKKyAgICAgICAgICAgICAgICAgIERCVVNfVFlQRV9TVFJJTkcsICZvbGQsCisgICAgICAgICAgICAgICAgICBEQlVTX1RZUEVfU1RSSU5HLCAmbmV3LAorICAgICAgICAgICAgICAgICAgREJVU19UWVBFX0lOVkFMSUQpIHx8IGRidXNfZXJyb3JfaXNfc2V0KCZlcnJvcikpIHsKKworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJXQVJOSU5HOiBGYWlsZWQgdG8gcGFyc2UgTmFtZU93bmVyQ2hhbmdlZCBzaWduYWw6ICVzXG4iLCBlcnJvci5tZXNzYWdlKTsKKyAgICAgICAgICAgIGF2YWhpX2NsaWVudF9zZXRfZXJybm8oY2xpZW50LCBBVkFISV9FUlJfREJVU19FUlJPUik7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3RyY21wKG5hbWUsIEFWQUhJX0RCVVNfTkFNRSkgPT0gMCkgeworCisgICAgICAgICAgICBpZiAob2xkWzBdICYmCisgICAgICAgICAgICAgICAgYXZhaGlfY2xpZW50X2lzX2Nvbm5lY3RlZChjbGllbnQpKSB7CisKKyAgICAgICAgICAgICAgICAvKiBSZWdhcmRsZXNzIGlmIHRoZSBzZXJ2ZXIgbG9zdCBpdHMgbmFtZSBvcgorICAgICAgICAgICAgICAgICAqIGlmIHRoZSBuYW1lIHdhcyB0cmFuc2ZlcmVkOiBvdXIgc2VydmljZXMgYXJlIG5vIGxvbmdlcgorICAgICAgICAgICAgICAgICAqIGF2YWlsYWJsZSwgc28gd2UgZGlzY29ubmVjdCBvdXJzZWx2ZXMgKi8KKyAgICAgICAgICAgICAgICBhdmFoaV9jbGllbnRfc2V0X2Vycm5vKGNsaWVudCwgQVZBSElfRVJSX0RJU0NPTk5FQ1RFRCk7CisgICAgICAgICAgICAgICAgZ290byBmYWlsOworCisgICAgICAgICAgICB9IGVsc2UgaWYgKGNsaWVudC0+c3RhdGUgPT0gQVZBSElfQ0xJRU5UX0NPTk5FQ1RJTkcgJiYgKCFvbGQgfHwgKm9sZCA9PSAwKSkgeworICAgICAgICAgICAgICAgIGludCByZXQ7CisKKyAgICAgICAgICAgICAgICAvKiBTZXJ2ZXIgYXBwZWFyZWQgKi8KKworICAgICAgICAgICAgICAgIGlmICgocmV0ID0gaW5pdF9zZXJ2ZXIoY2xpZW50LCBOVUxMKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIGF2YWhpX2NsaWVudF9zZXRfZXJybm8oY2xpZW50LCByZXQpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICB9IGVsc2UgaWYgKCFhdmFoaV9jbGllbnRfaXNfY29ubmVjdGVkKGNsaWVudCkpIHsKKworICAgICAgICAvKiBJZ25vcmUgbWVzc2FnZXMgd2UgZ2V0IGluIHVuY29ubmVjdGVkIHN0YXRlICovCisKKyAgICB9IGVsc2UgaWYgKGRidXNfbWVzc2FnZV9pc19zaWduYWwgKG1lc3NhZ2UsIEFWQUhJX0RCVVNfSU5URVJGQUNFX1NFUlZFUiwgIlN0YXRlQ2hhbmdlZCIpKSB7CisgICAgICAgIGludDMyX3Qgc3RhdGU7CisgICAgICAgIGNoYXIgKmUgPSBOVUxMOworICAgICAgICBpbnQgYzsKKworICAgICAgICBpZiAoIWRidXNfbWVzc2FnZV9nZXRfYXJncygKKyAgICAgICAgICAgICAgICAgIG1lc3NhZ2UsICZlcnJvciwKKyAgICAgICAgICAgICAgICAgIERCVVNfVFlQRV9JTlQzMiwgJnN0YXRlLAorICAgICAgICAgICAgICAgICAgREJVU19UWVBFX1NUUklORywgJmUsCisgICAgICAgICAgICAgICAgICBEQlVTX1RZUEVfSU5WQUxJRCkgfHwgZGJ1c19lcnJvcl9pc19zZXQgKCZlcnJvcikpIHsKKworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJXQVJOSU5HOiBGYWlsZWQgdG8gcGFyc2UgU2VydmVyLlN0YXRlQ2hhbmdlZCBzaWduYWw6ICVzXG4iLCBlcnJvci5tZXNzYWdlKTsKKyAgICAgICAgICAgIGF2YWhpX2NsaWVudF9zZXRfZXJybm8oY2xpZW50LCBBVkFISV9FUlJfREJVU19FUlJPUik7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKGMgPSBhdmFoaV9lcnJvcl9kYnVzX3RvX251bWJlcihlKSkgIT0gQVZBSElfT0spCisgICAgICAgICAgICBhdmFoaV9jbGllbnRfc2V0X2Vycm5vKGNsaWVudCwgYyk7CisKKyAgICAgICAgY2xpZW50X3NldF9zdGF0ZShjbGllbnQsIChBdmFoaUNsaWVudFN0YXRlKSBzdGF0ZSk7CisKKyAgICB9IGVsc2UgaWYgKGRidXNfbWVzc2FnZV9pc19zaWduYWwgKG1lc3NhZ2UsIEFWQUhJX0RCVVNfSU5URVJGQUNFX0VOVFJZX0dST1VQLCAiU3RhdGVDaGFuZ2VkIikpIHsKKyAgICAgICAgY29uc3QgY2hhciAqcGF0aDsKKyAgICAgICAgQXZhaGlFbnRyeUdyb3VwICpnOworICAgICAgICBwYXRoID0gZGJ1c19tZXNzYWdlX2dldF9wYXRoKG1lc3NhZ2UpOworCisgICAgICAgIGZvciAoZyA9IGNsaWVudC0+Z3JvdXBzOyBnOyBnID0gZy0+Z3JvdXBzX25leHQpCisgICAgICAgICAgICBpZiAoc3RyY21wKGctPnBhdGgsIHBhdGgpID09IDApCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGcpIHsKKyAgICAgICAgICAgIGludDMyX3Qgc3RhdGU7CisgICAgICAgICAgICBjaGFyICplOworICAgICAgICAgICAgaW50IGM7CisKKyAgICAgICAgICAgIGlmICghZGJ1c19tZXNzYWdlX2dldF9hcmdzKAorICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UsICZlcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICBEQlVTX1RZUEVfSU5UMzIsICZzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICBEQlVTX1RZUEVfU1RSSU5HLCAmZSwKKyAgICAgICAgICAgICAgICAgICAgICBEQlVTX1RZUEVfSU5WQUxJRCkgfHwKKyAgICAgICAgICAgICAgICBkYnVzX2Vycm9yX2lzX3NldCgmZXJyb3IpKSB7CisKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIldBUk5JTkc6IEZhaWxlZCB0byBwYXJzZSBFbnRyeUdyb3VwLlN0YXRlQ2hhbmdlZCBzaWduYWw6ICVzXG4iLCBlcnJvci5tZXNzYWdlKTsKKyAgICAgICAgICAgICAgICBhdmFoaV9jbGllbnRfc2V0X2Vycm5vKGNsaWVudCwgQVZBSElfRVJSX0RCVVNfRVJST1IpOworICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKChjID0gYXZhaGlfZXJyb3JfZGJ1c190b19udW1iZXIoZSkpICE9IEFWQUhJX09LKQorICAgICAgICAgICAgICAgIGF2YWhpX2NsaWVudF9zZXRfZXJybm8oY2xpZW50LCBjKTsKKworICAgICAgICAgICAgYXZhaGlfZW50cnlfZ3JvdXBfc2V0X3N0YXRlKGcsIHN0YXRlKTsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIGlmIChkYnVzX21lc3NhZ2VfaXNfc2lnbmFsKG1lc3NhZ2UsIEFWQUhJX0RCVVNfSU5URVJGQUNFX0RPTUFJTl9CUk9XU0VSLCAiSXRlbU5ldyIpKQorICAgICAgICByZXR1cm4gYXZhaGlfZG9tYWluX2Jyb3dzZXJfZXZlbnQoY2xpZW50LCBBVkFISV9CUk9XU0VSX05FVywgbWVzc2FnZSk7CisgICAgZWxzZSBpZiAoZGJ1c19tZXNzYWdlX2lzX3NpZ25hbCAobWVzc2FnZSwgQVZBSElfREJVU19JTlRFUkZBQ0VfRE9NQUlOX0JST1dTRVIsICJJdGVtUmVtb3ZlIikpCisgICAgICAgIHJldHVybiBhdmFoaV9kb21haW5fYnJvd3Nlcl9ldmVudChjbGllbnQsIEFWQUhJX0JST1dTRVJfUkVNT1ZFLCBtZXNzYWdlKTsKKyAgICBlbHNlIGlmIChkYnVzX21lc3NhZ2VfaXNfc2lnbmFsIChtZXNzYWdlLCBBVkFISV9EQlVTX0lOVEVSRkFDRV9ET01BSU5fQlJPV1NFUiwgIkNhY2hlRXhoYXVzdGVkIikpCisgICAgICAgIHJldHVybiBhdmFoaV9kb21haW5fYnJvd3Nlcl9ldmVudChjbGllbnQsIEFWQUhJX0JST1dTRVJfQ0FDSEVfRVhIQVVTVEVELCBtZXNzYWdlKTsKKyAgICBlbHNlIGlmIChkYnVzX21lc3NhZ2VfaXNfc2lnbmFsIChtZXNzYWdlLCBBVkFISV9EQlVTX0lOVEVSRkFDRV9ET01BSU5fQlJPV1NFUiwgIkFsbEZvck5vdyIpKQorICAgICAgICByZXR1cm4gYXZhaGlfZG9tYWluX2Jyb3dzZXJfZXZlbnQoY2xpZW50LCBBVkFISV9CUk9XU0VSX0FMTF9GT1JfTk9XLCBtZXNzYWdlKTsKKyAgICBlbHNlIGlmIChkYnVzX21lc3NhZ2VfaXNfc2lnbmFsIChtZXNzYWdlLCBBVkFISV9EQlVTX0lOVEVSRkFDRV9ET01BSU5fQlJPV1NFUiwgIkZhaWx1cmUiKSkKKyAgICAgICAgcmV0dXJuIGF2YWhpX2RvbWFpbl9icm93c2VyX2V2ZW50KGNsaWVudCwgQVZBSElfQlJPV1NFUl9GQUlMVVJFLCBtZXNzYWdlKTsKKworICAgIGVsc2UgaWYgKGRidXNfbWVzc2FnZV9pc19zaWduYWwobWVzc2FnZSwgQVZBSElfREJVU19JTlRFUkZBQ0VfU0VSVklDRV9UWVBFX0JST1dTRVIsICJJdGVtTmV3IikpCisgICAgICAgIHJldHVybiBhdmFoaV9zZXJ2aWNlX3R5cGVfYnJvd3Nlcl9ldmVudCAoY2xpZW50LCBBVkFISV9CUk9XU0VSX05FVywgbWVzc2FnZSk7CisgICAgZWxzZSBpZiAoZGJ1c19tZXNzYWdlX2lzX3NpZ25hbChtZXNzYWdlLCBBVkFISV9EQlVTX0lOVEVSRkFDRV9TRVJWSUNFX1RZUEVfQlJPV1NFUiwgIkl0ZW1SZW1vdmUiKSkKKyAgICAgICAgcmV0dXJuIGF2YWhpX3NlcnZpY2VfdHlwZV9icm93c2VyX2V2ZW50IChjbGllbnQsIEFWQUhJX0JST1dTRVJfUkVNT1ZFLCBtZXNzYWdlKTsKKyAgICBlbHNlIGlmIChkYnVzX21lc3NhZ2VfaXNfc2lnbmFsKG1lc3NhZ2UsIEFWQUhJX0RCVVNfSU5URVJGQUNFX1NFUlZJQ0VfVFlQRV9CUk9XU0VSLCAiQ2FjaGVFeGhhdXN0ZWQiKSkKKyAgICAgICAgcmV0dXJuIGF2YWhpX3NlcnZpY2VfdHlwZV9icm93c2VyX2V2ZW50IChjbGllbnQsIEFWQUhJX0JST1dTRVJfQ0FDSEVfRVhIQVVTVEVELCBtZXNzYWdlKTsKKyAgICBlbHNlIGlmIChkYnVzX21lc3NhZ2VfaXNfc2lnbmFsKG1lc3NhZ2UsIEFWQUhJX0RCVVNfSU5URVJGQUNFX1NFUlZJQ0VfVFlQRV9CUk9XU0VSLCAiQWxsRm9yTm93IikpCisgICAgICAgIHJldHVybiBhdmFoaV9zZXJ2aWNlX3R5cGVfYnJvd3Nlcl9ldmVudCAoY2xpZW50LCBBVkFISV9CUk9XU0VSX0FMTF9GT1JfTk9XLCBtZXNzYWdlKTsKKyAgICBlbHNlIGlmIChkYnVzX21lc3NhZ2VfaXNfc2lnbmFsKG1lc3NhZ2UsIEFWQUhJX0RCVVNfSU5URVJGQUNFX1NFUlZJQ0VfVFlQRV9CUk9XU0VSLCAiRmFpbHVyZSIpKQorICAgICAgICByZXR1cm4gYXZhaGlfc2VydmljZV90eXBlX2Jyb3dzZXJfZXZlbnQgKGNsaWVudCwgQVZBSElfQlJPV1NFUl9GQUlMVVJFLCBtZXNzYWdlKTsKKworICAgIGVsc2UgaWYgKGRidXNfbWVzc2FnZV9pc19zaWduYWwobWVzc2FnZSwgQVZBSElfREJVU19JTlRFUkZBQ0VfU0VSVklDRV9CUk9XU0VSLCAiSXRlbU5ldyIpKQorICAgICAgICByZXR1cm4gYXZhaGlfc2VydmljZV9icm93c2VyX2V2ZW50IChjbGllbnQsIEFWQUhJX0JST1dTRVJfTkVXLCBtZXNzYWdlKTsKKyAgICBlbHNlIGlmIChkYnVzX21lc3NhZ2VfaXNfc2lnbmFsKG1lc3NhZ2UsIEFWQUhJX0RCVVNfSU5URVJGQUNFX1NFUlZJQ0VfQlJPV1NFUiwgIkl0ZW1SZW1vdmUiKSkKKyAgICAgICAgcmV0dXJuIGF2YWhpX3NlcnZpY2VfYnJvd3Nlcl9ldmVudCAoY2xpZW50LCBBVkFISV9CUk9XU0VSX1JFTU9WRSwgbWVzc2FnZSk7CisgICAgZWxzZSBpZiAoZGJ1c19tZXNzYWdlX2lzX3NpZ25hbChtZXNzYWdlLCBBVkFISV9EQlVTX0lOVEVSRkFDRV9TRVJWSUNFX0JST1dTRVIsICJDYWNoZUV4aGF1c3RlZCIpKQorICAgICAgICByZXR1cm4gYXZhaGlfc2VydmljZV9icm93c2VyX2V2ZW50IChjbGllbnQsIEFWQUhJX0JST1dTRVJfQ0FDSEVfRVhIQVVTVEVELCBtZXNzYWdlKTsKKyAgICBlbHNlIGlmIChkYnVzX21lc3NhZ2VfaXNfc2lnbmFsKG1lc3NhZ2UsIEFWQUhJX0RCVVNfSU5URVJGQUNFX1NFUlZJQ0VfQlJPV1NFUiwgIkFsbEZvck5vdyIpKQorICAgICAgICByZXR1cm4gYXZhaGlfc2VydmljZV9icm93c2VyX2V2ZW50IChjbGllbnQsIEFWQUhJX0JST1dTRVJfQUxMX0ZPUl9OT1csIG1lc3NhZ2UpOworICAgIGVsc2UgaWYgKGRidXNfbWVzc2FnZV9pc19zaWduYWwobWVzc2FnZSwgQVZBSElfREJVU19JTlRFUkZBQ0VfU0VSVklDRV9CUk9XU0VSLCAiRmFpbHVyZSIpKQorICAgICAgICByZXR1cm4gYXZhaGlfc2VydmljZV9icm93c2VyX2V2ZW50IChjbGllbnQsIEFWQUhJX0JST1dTRVJfRkFJTFVSRSwgbWVzc2FnZSk7CisKKyAgICBlbHNlIGlmIChkYnVzX21lc3NhZ2VfaXNfc2lnbmFsKG1lc3NhZ2UsIEFWQUhJX0RCVVNfSU5URVJGQUNFX1NFUlZJQ0VfUkVTT0xWRVIsICJGb3VuZCIpKQorICAgICAgICByZXR1cm4gYXZhaGlfc2VydmljZV9yZXNvbHZlcl9ldmVudCAoY2xpZW50LCBBVkFISV9SRVNPTFZFUl9GT1VORCwgbWVzc2FnZSk7CisgICAgZWxzZSBpZiAoZGJ1c19tZXNzYWdlX2lzX3NpZ25hbChtZXNzYWdlLCBBVkFISV9EQlVTX0lOVEVSRkFDRV9TRVJWSUNFX1JFU09MVkVSLCAiRmFpbHVyZSIpKQorICAgICAgICByZXR1cm4gYXZhaGlfc2VydmljZV9yZXNvbHZlcl9ldmVudCAoY2xpZW50LCBBVkFISV9SRVNPTFZFUl9GQUlMVVJFLCBtZXNzYWdlKTsKKworICAgIGVsc2UgaWYgKGRidXNfbWVzc2FnZV9pc19zaWduYWwobWVzc2FnZSwgQVZBSElfREJVU19JTlRFUkZBQ0VfSE9TVF9OQU1FX1JFU09MVkVSLCAiRm91bmQiKSkKKyAgICAgICAgcmV0dXJuIGF2YWhpX2hvc3RfbmFtZV9yZXNvbHZlcl9ldmVudCAoY2xpZW50LCBBVkFISV9SRVNPTFZFUl9GT1VORCwgbWVzc2FnZSk7CisgICAgZWxzZSBpZiAoZGJ1c19tZXNzYWdlX2lzX3NpZ25hbChtZXNzYWdlLCBBVkFISV9EQlVTX0lOVEVSRkFDRV9IT1NUX05BTUVfUkVTT0xWRVIsICJGYWlsdXJlIikpCisgICAgICAgIHJldHVybiBhdmFoaV9ob3N0X25hbWVfcmVzb2x2ZXJfZXZlbnQgKGNsaWVudCwgQVZBSElfUkVTT0xWRVJfRkFJTFVSRSwgbWVzc2FnZSk7CisKKyAgICBlbHNlIGlmIChkYnVzX21lc3NhZ2VfaXNfc2lnbmFsKG1lc3NhZ2UsIEFWQUhJX0RCVVNfSU5URVJGQUNFX0FERFJFU1NfUkVTT0xWRVIsICJGb3VuZCIpKQorICAgICAgICByZXR1cm4gYXZhaGlfYWRkcmVzc19yZXNvbHZlcl9ldmVudCAoY2xpZW50LCBBVkFISV9SRVNPTFZFUl9GT1VORCwgbWVzc2FnZSk7CisgICAgZWxzZSBpZiAoZGJ1c19tZXNzYWdlX2lzX3NpZ25hbChtZXNzYWdlLCBBVkFISV9EQlVTX0lOVEVSRkFDRV9BRERSRVNTX1JFU09MVkVSLCAiRmFpbHVyZSIpKQorICAgICAgICByZXR1cm4gYXZhaGlfYWRkcmVzc19yZXNvbHZlcl9ldmVudCAoY2xpZW50LCBBVkFISV9SRVNPTFZFUl9GQUlMVVJFLCBtZXNzYWdlKTsKKworICAgIGVsc2UgaWYgKGRidXNfbWVzc2FnZV9pc19zaWduYWwobWVzc2FnZSwgQVZBSElfREJVU19JTlRFUkZBQ0VfUkVDT1JEX0JST1dTRVIsICJJdGVtTmV3IikpCisgICAgICAgIHJldHVybiBhdmFoaV9yZWNvcmRfYnJvd3Nlcl9ldmVudCAoY2xpZW50LCBBVkFISV9CUk9XU0VSX05FVywgbWVzc2FnZSk7CisgICAgZWxzZSBpZiAoZGJ1c19tZXNzYWdlX2lzX3NpZ25hbChtZXNzYWdlLCBBVkFISV9EQlVTX0lOVEVSRkFDRV9SRUNPUkRfQlJPV1NFUiwgIkl0ZW1SZW1vdmUiKSkKKyAgICAgICAgcmV0dXJuIGF2YWhpX3JlY29yZF9icm93c2VyX2V2ZW50IChjbGllbnQsIEFWQUhJX0JST1dTRVJfUkVNT1ZFLCBtZXNzYWdlKTsKKyAgICBlbHNlIGlmIChkYnVzX21lc3NhZ2VfaXNfc2lnbmFsKG1lc3NhZ2UsIEFWQUhJX0RCVVNfSU5URVJGQUNFX1JFQ09SRF9CUk9XU0VSLCAiQ2FjaGVFeGhhdXN0ZWQiKSkKKyAgICAgICAgcmV0dXJuIGF2YWhpX3JlY29yZF9icm93c2VyX2V2ZW50IChjbGllbnQsIEFWQUhJX0JST1dTRVJfQ0FDSEVfRVhIQVVTVEVELCBtZXNzYWdlKTsKKyAgICBlbHNlIGlmIChkYnVzX21lc3NhZ2VfaXNfc2lnbmFsKG1lc3NhZ2UsIEFWQUhJX0RCVVNfSU5URVJGQUNFX1JFQ09SRF9CUk9XU0VSLCAiQWxsRm9yTm93IikpCisgICAgICAgIHJldHVybiBhdmFoaV9yZWNvcmRfYnJvd3Nlcl9ldmVudCAoY2xpZW50LCBBVkFISV9CUk9XU0VSX0FMTF9GT1JfTk9XLCBtZXNzYWdlKTsKKyAgICBlbHNlIGlmIChkYnVzX21lc3NhZ2VfaXNfc2lnbmFsKG1lc3NhZ2UsIEFWQUhJX0RCVVNfSU5URVJGQUNFX1JFQ09SRF9CUk9XU0VSLCAiRmFpbHVyZSIpKQorICAgICAgICByZXR1cm4gYXZhaGlfcmVjb3JkX2Jyb3dzZXJfZXZlbnQgKGNsaWVudCwgQVZBSElfQlJPV1NFUl9GQUlMVVJFLCBtZXNzYWdlKTsKKworICAgIGVsc2UgeworCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiV0FSTklORzogVW5oYW5kbGVkIG1lc3NhZ2U6IGludGVyZmFjZT0lcywgcGF0aD0lcywgbWVtYmVyPSVzXG4iLAorICAgICAgICAgICAgICAgZGJ1c19tZXNzYWdlX2dldF9pbnRlcmZhY2UobWVzc2FnZSksCisgICAgICAgICAgICAgICBkYnVzX21lc3NhZ2VfZ2V0X3BhdGgobWVzc2FnZSksCisgICAgICAgICAgICAgICBkYnVzX21lc3NhZ2VfZ2V0X21lbWJlcihtZXNzYWdlKSk7CisKKyAgICAgICAgcmV0dXJuIERCVVNfSEFORExFUl9SRVNVTFRfTk9UX1lFVF9IQU5ETEVEOworICAgIH0KKworICAgIHJldHVybiBEQlVTX0hBTkRMRVJfUkVTVUxUX0hBTkRMRUQ7CisKK2ZhaWw6CisKKyAgICBpZiAoZGJ1c19lcnJvcl9pc19zZXQoJmVycm9yKSkgeworICAgICAgICBhdmFoaV9jbGllbnRfc2V0X2Vycm5vKGNsaWVudCwgYXZhaGlfZXJyb3JfZGJ1c190b19udW1iZXIoZXJyb3IubmFtZSkpOworICAgICAgICBkYnVzX2Vycm9yX2ZyZWUoJmVycm9yKTsKKyAgICB9CisKKyAgICBjbGllbnRfc2V0X3N0YXRlKGNsaWVudCwgQVZBSElfQ0xJRU5UX0ZBSUxVUkUpOworCisgICAgcmV0dXJuIERCVVNfSEFORExFUl9SRVNVTFRfTk9UX1lFVF9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IGdldF9zZXJ2ZXJfc3RhdGUoQXZhaGlDbGllbnQgKmNsaWVudCwgaW50ICpyZXRfZXJyb3IpIHsKKyAgICBEQnVzTWVzc2FnZSAqbWVzc2FnZSA9IE5VTEwsICpyZXBseSA9IE5VTEw7CisgICAgREJ1c0Vycm9yIGVycm9yOworICAgIGludDMyX3Qgc3RhdGU7CisgICAgaW50IGUgPSBBVkFISV9FUlJfTk9fTUVNT1JZOworCisgICAgYXNzZXJ0KGNsaWVudCk7CisKKyAgICBkYnVzX2Vycm9yX2luaXQoJmVycm9yKTsKKworICAgIGlmICghKG1lc3NhZ2UgPSBkYnVzX21lc3NhZ2VfbmV3X21ldGhvZF9jYWxsKEFWQUhJX0RCVVNfTkFNRSwgQVZBSElfREJVU19QQVRIX1NFUlZFUiwgQVZBSElfREJVU19JTlRFUkZBQ0VfU0VSVkVSLCAiR2V0U3RhdGUiKSkpCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIHJlcGx5ID0gZGJ1c19jb25uZWN0aW9uX3NlbmRfd2l0aF9yZXBseV9hbmRfYmxvY2sgKGNsaWVudC0+YnVzLCBtZXNzYWdlLCAtMSwgJmVycm9yKTsKKworICAgIGlmICghcmVwbHkgfHwgZGJ1c19lcnJvcl9pc19zZXQgKCZlcnJvcikpCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIGlmICghZGJ1c19tZXNzYWdlX2dldF9hcmdzKHJlcGx5LCAmZXJyb3IsIERCVVNfVFlQRV9JTlQzMiwgJnN0YXRlLCBEQlVTX1RZUEVfSU5WQUxJRCkgfHwKKyAgICAgICAgZGJ1c19lcnJvcl9pc19zZXQgKCZlcnJvcikpCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIGNsaWVudF9zZXRfc3RhdGUoY2xpZW50LCAoQXZhaGlDbGllbnRTdGF0ZSkgc3RhdGUpOworCisgICAgZGJ1c19tZXNzYWdlX3VucmVmKG1lc3NhZ2UpOworICAgIGRidXNfbWVzc2FnZV91bnJlZihyZXBseSk7CisKKyAgICByZXR1cm4gQVZBSElfT0s7CisKK2ZhaWw6CisgICAgaWYgKGRidXNfZXJyb3JfaXNfc2V0KCZlcnJvcikpIHsKKyAgICAgICAgZSA9IGF2YWhpX2Vycm9yX2RidXNfdG9fbnVtYmVyIChlcnJvci5uYW1lKTsKKyAgICAgICAgZGJ1c19lcnJvcl9mcmVlKCZlcnJvcik7CisgICAgfQorCisgICAgaWYgKHJldF9lcnJvcikKKyAgICAgICAgKnJldF9lcnJvciA9IGU7CisKKyAgICBpZiAobWVzc2FnZSkKKyAgICAgICAgZGJ1c19tZXNzYWdlX3VucmVmKG1lc3NhZ2UpOworICAgIGlmIChyZXBseSkKKyAgICAgICAgZGJ1c19tZXNzYWdlX3VucmVmKHJlcGx5KTsKKworICAgIHJldHVybiBlOworfQorCitzdGF0aWMgaW50IGNoZWNrX3ZlcnNpb24oQXZhaGlDbGllbnQgKmNsaWVudCwgaW50ICpyZXRfZXJyb3IpIHsKKyAgICBEQnVzTWVzc2FnZSAqbWVzc2FnZSA9IE5VTEwsICpyZXBseSAgPSBOVUxMOworICAgIERCdXNFcnJvciBlcnJvcjsKKyAgICB1aW50MzJfdCB2ZXJzaW9uOworICAgIGludCBlID0gQVZBSElfRVJSX05PX01FTU9SWTsKKworICAgIGFzc2VydChjbGllbnQpOworCisgICAgZGJ1c19lcnJvcl9pbml0KCZlcnJvcik7CisKKyAgICBpZiAoIShtZXNzYWdlID0gZGJ1c19tZXNzYWdlX25ld19tZXRob2RfY2FsbChBVkFISV9EQlVTX05BTUUsIEFWQUhJX0RCVVNfUEFUSF9TRVJWRVIsIEFWQUhJX0RCVVNfSU5URVJGQUNFX1NFUlZFUiwgIkdldEFQSVZlcnNpb24iKSkpCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIHJlcGx5ID0gZGJ1c19jb25uZWN0aW9uX3NlbmRfd2l0aF9yZXBseV9hbmRfYmxvY2sgKGNsaWVudC0+YnVzLCBtZXNzYWdlLCAtMSwgJmVycm9yKTsKKworICAgIGlmICghcmVwbHkgfHwgZGJ1c19lcnJvcl9pc19zZXQgKCZlcnJvcikpIHsKKyAgICAgICAgY2hhciAqdmVyc2lvbl9zdHI7CisKKyAgICAgICAgaWYgKCFkYnVzX2Vycm9yX2lzX3NldCgmZXJyb3IpIHx8IHN0cmNtcChlcnJvci5uYW1lLCBEQlVTX0VSUk9SX1VOS05PV05fTUVUSE9EKSkKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKworICAgICAgICAvKiBJZiB0aGUgbWV0aG9kIEdldEFQSVZlcnNpb24gaXMgbm90IGtub3duLCB3ZSBsb29rIGlmCisgICAgICAgICAqIEdldFZlcnNpb25TdHJpbmcgbWF0Y2hlcyAiYXZhaGkgMC42IiB3aGljaCBpcyB0aGUgb25seQorICAgICAgICAgKiB2ZXJzaW9uIHdlIHN1cHBvcnQgd2hpY2ggZG9lc24ndCBoYXZlIEdldEFQSVZlcnNpb24oKSAuKi8KKworICAgICAgICBkYnVzX21lc3NhZ2VfdW5yZWYobWVzc2FnZSk7CisgICAgICAgIGlmIChyZXBseSkgZGJ1c19tZXNzYWdlX3VucmVmKHJlcGx5KTsKKyAgICAgICAgZGJ1c19lcnJvcl9mcmVlKCZlcnJvcik7CisKKyAgICAgICAgaWYgKCEobWVzc2FnZSA9IGRidXNfbWVzc2FnZV9uZXdfbWV0aG9kX2NhbGwoQVZBSElfREJVU19OQU1FLCBBVkFISV9EQlVTX1BBVEhfU0VSVkVSLCBBVkFISV9EQlVTX0lOVEVSRkFDRV9TRVJWRVIsICJHZXRWZXJzaW9uU3RyaW5nIikpKQorICAgICAgICAgICAgZ290byBmYWlsOworCisgICAgICAgIHJlcGx5ID0gZGJ1c19jb25uZWN0aW9uX3NlbmRfd2l0aF9yZXBseV9hbmRfYmxvY2sgKGNsaWVudC0+YnVzLCBtZXNzYWdlLCAtMSwgJmVycm9yKTsKKworICAgICAgICBpZiAoIXJlcGx5IHx8IGRidXNfZXJyb3JfaXNfc2V0ICgmZXJyb3IpKQorICAgICAgICAgICAgZ290byBmYWlsOworCisgICAgICAgIGlmICghZGJ1c19tZXNzYWdlX2dldF9hcmdzIChyZXBseSwgJmVycm9yLCBEQlVTX1RZUEVfU1RSSU5HLCAmdmVyc2lvbl9zdHIsIERCVVNfVFlQRV9JTlZBTElEKSB8fAorICAgICAgICAgICAgZGJ1c19lcnJvcl9pc19zZXQgKCZlcnJvcikpCisgICAgICAgICAgICBnb3RvIGZhaWw7CisKKyAgICAgICAgdmVyc2lvbiA9IHN0cmNtcCh2ZXJzaW9uX3N0ciwgImF2YWhpIDAuNiIpID09IDAgPyAweDAyMDEgOiAweDAwMDA7CisKKyAgICB9IGVsc2UgeworCisgICAgICAgIGlmICghZGJ1c19tZXNzYWdlX2dldF9hcmdzIChyZXBseSwgJmVycm9yLCBEQlVTX1RZUEVfVUlOVDMyLCAmdmVyc2lvbiwgREJVU19UWVBFX0lOVkFMSUQpIHx8CisgICAgICAgICAgICBkYnVzX2Vycm9yX2lzX3NldCgmZXJyb3IpKQorICAgICAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIC8qZnByaW50ZihzdGRlcnIsICJBUEkgVmVyc2lvbiAweCUwNHhcbiIsIHZlcnNpb24pOyovCisKKyAgICBpZiAoKHZlcnNpb24gJiAweEZGMDApICE9IChBVkFISV9DTElFTlRfREJVU19BUElfU1VQUE9SVEVEICYgMHhGRjAwKSB8fAorICAgICAgICAodmVyc2lvbiAmIDB4MDBGRikgPCAoQVZBSElfQ0xJRU5UX0RCVVNfQVBJX1NVUFBPUlRFRCAmIDB4MDBGRikpIHsKKyAgICAgICAgZSA9IEFWQUhJX0VSUl9WRVJTSU9OX01JU01BVENIOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgZGJ1c19tZXNzYWdlX3VucmVmKG1lc3NhZ2UpOworICAgIGRidXNfbWVzc2FnZV91bnJlZihyZXBseSk7CisKKyAgICByZXR1cm4gQVZBSElfT0s7CisKK2ZhaWw6CisgICAgaWYgKGRidXNfZXJyb3JfaXNfc2V0KCZlcnJvcikpIHsKKyAgICAgICAgZSA9IGF2YWhpX2Vycm9yX2RidXNfdG9fbnVtYmVyIChlcnJvci5uYW1lKTsKKyAgICAgICAgZGJ1c19lcnJvcl9mcmVlKCZlcnJvcik7CisgICAgfQorCisgICAgaWYgKHJldF9lcnJvcikKKyAgICAgICAgKnJldF9lcnJvciA9IGU7CisKKyAgICBpZiAobWVzc2FnZSkKKyAgICAgICAgZGJ1c19tZXNzYWdlX3VucmVmKG1lc3NhZ2UpOworICAgIGlmIChyZXBseSkKKyAgICAgICAgZGJ1c19tZXNzYWdlX3VucmVmKHJlcGx5KTsKKworICAgIHJldHVybiBlOworfQorCitzdGF0aWMgaW50IGluaXRfc2VydmVyKEF2YWhpQ2xpZW50ICpjbGllbnQsIGludCAqcmV0X2Vycm9yKSB7CisgICAgaW50IHI7CisKKyAgICBpZiAoKHIgPSBjaGVja192ZXJzaW9uKGNsaWVudCwgcmV0X2Vycm9yKSkgPCAwKQorICAgICAgICByZXR1cm4gcjsKKworICAgIGlmICgociA9IGdldF9zZXJ2ZXJfc3RhdGUoY2xpZW50LCByZXRfZXJyb3IpKSA8IDApCisgICAgICAgIHJldHVybiByOworCisgICAgcmV0dXJuIEFWQUhJX09LOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIGFjdHMgbGlrZSBkYnVzX2J1c19nZXQgYnV0IGNyZWF0ZXMgYSBwcml2YXRlCisgKiBjb25uZWN0aW9uIGluc3RlYWQuICAqLworc3RhdGljIERCdXNDb25uZWN0aW9uKiBhdmFoaV9kYnVzX2J1c19nZXQoREJ1c0Vycm9yICplcnJvcikgeworICAgIERCdXNDb25uZWN0aW9uICpjOworCisjaWZkZWYgSEFWRV9EQlVTX0JVU19HRVRfUFJJVkFURQorICAgIGlmICghKGMgPSBkYnVzX2J1c19nZXRfcHJpdmF0ZShEQlVTX0JVU19TWVNURU0sIGVycm9yKSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZGJ1c19jb25uZWN0aW9uX3NldF9leGl0X29uX2Rpc2Nvbm5lY3QoYywgRkFMU0UpOworI2Vsc2UKKyAgICBjb25zdCBjaGFyICphOworCisgICAgaWYgKCEoYSA9IGdldGVudigiREJVU19TWVNURU1fQlVTX0FERFJFU1MiKSkgfHwgISphKQorICAgICAgICBhID0gREJVU19TWVNURU1fQlVTX0RFRkFVTFRfQUREUkVTUzsKKworICAgIGlmICghKGMgPSBkYnVzX2Nvbm5lY3Rpb25fb3Blbl9wcml2YXRlKGEsIGVycm9yKSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZGJ1c19jb25uZWN0aW9uX3NldF9leGl0X29uX2Rpc2Nvbm5lY3QoYywgRkFMU0UpOworCisgICAgaWYgKCFkYnVzX2J1c19yZWdpc3RlcihjLCBlcnJvcikpIHsKKyNpZmRlZiBIQVZFX0RCVVNfQ09OTkVDVElPTl9DTE9TRQorICAgICAgICBkYnVzX2Nvbm5lY3Rpb25fY2xvc2UoYyk7CisjZWxzZQorICAgICAgICBkYnVzX2Nvbm5lY3Rpb25fZGlzY29ubmVjdChjKTsKKyNlbmRpZgorICAgICAgICBkYnVzX2Nvbm5lY3Rpb25fdW5yZWYoYyk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIGM7Cit9CisKK0F2YWhpQ2xpZW50ICphdmFoaV9jbGllbnRfbmV3KGNvbnN0IEF2YWhpUG9sbCAqcG9sbF9hcGksIEF2YWhpQ2xpZW50RmxhZ3MgZmxhZ3MsIEF2YWhpQ2xpZW50Q2FsbGJhY2sgY2FsbGJhY2ssIHZvaWQgKnVzZXJkYXRhLCBpbnQgKnJldF9lcnJvcikgeworICAgIEF2YWhpQ2xpZW50ICpjbGllbnQgPSBOVUxMOworICAgIERCdXNFcnJvciBlcnJvcjsKKyAgICBEQnVzTWVzc2FnZSAqbWVzc2FnZSA9IE5VTEwsICpyZXBseSA9IE5VTEw7CisKKyAgICBhdmFoaV9pbml0X2kxOG4oKTsKKworICAgIGRidXNfZXJyb3JfaW5pdCgmZXJyb3IpOworCisgICAgaWYgKCEoY2xpZW50ID0gYXZhaGlfbmV3KEF2YWhpQ2xpZW50LCAxKSkpIHsKKyAgICAgICAgaWYgKHJldF9lcnJvcikKKyAgICAgICAgICAgICpyZXRfZXJyb3IgPSBBVkFISV9FUlJfTk9fTUVNT1JZOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgY2xpZW50LT5wb2xsX2FwaSA9IHBvbGxfYXBpOworICAgIGNsaWVudC0+ZXJyb3IgPSBBVkFISV9PSzsKKyAgICBjbGllbnQtPmNhbGxiYWNrID0gY2FsbGJhY2s7CisgICAgY2xpZW50LT51c2VyZGF0YSA9IHVzZXJkYXRhOworICAgIGNsaWVudC0+c3RhdGUgPSAoQXZhaGlDbGllbnRTdGF0ZSkgLTE7CisgICAgY2xpZW50LT5mbGFncyA9IGZsYWdzOworCisgICAgY2xpZW50LT5ob3N0X25hbWUgPSBOVUxMOworICAgIGNsaWVudC0+aG9zdF9uYW1lX2ZxZG4gPSBOVUxMOworICAgIGNsaWVudC0+ZG9tYWluX25hbWUgPSBOVUxMOworICAgIGNsaWVudC0+dmVyc2lvbl9zdHJpbmcgPSBOVUxMOworICAgIGNsaWVudC0+bG9jYWxfc2VydmljZV9jb29raWVfdmFsaWQgPSAwOworCisgICAgQVZBSElfTExJU1RfSEVBRF9JTklUKEF2YWhpRW50cnlHcm91cCwgY2xpZW50LT5ncm91cHMpOworICAgIEFWQUhJX0xMSVNUX0hFQURfSU5JVChBdmFoaURvbWFpbkJyb3dzZXIsIGNsaWVudC0+ZG9tYWluX2Jyb3dzZXJzKTsKKyAgICBBVkFISV9MTElTVF9IRUFEX0lOSVQoQXZhaGlTZXJ2aWNlQnJvd3NlciwgY2xpZW50LT5zZXJ2aWNlX2Jyb3dzZXJzKTsKKyAgICBBVkFISV9MTElTVF9IRUFEX0lOSVQoQXZhaGlTZXJ2aWNlVHlwZUJyb3dzZXIsIGNsaWVudC0+c2VydmljZV90eXBlX2Jyb3dzZXJzKTsKKyAgICBBVkFISV9MTElTVF9IRUFEX0lOSVQoQXZhaGlTZXJ2aWNlUmVzb2x2ZXIsIGNsaWVudC0+c2VydmljZV9yZXNvbHZlcnMpOworICAgIEFWQUhJX0xMSVNUX0hFQURfSU5JVChBdmFoaUhvc3ROYW1lUmVzb2x2ZXIsIGNsaWVudC0+aG9zdF9uYW1lX3Jlc29sdmVycyk7CisgICAgQVZBSElfTExJU1RfSEVBRF9JTklUKEF2YWhpQWRkcmVzc1Jlc29sdmVyLCBjbGllbnQtPmFkZHJlc3NfcmVzb2x2ZXJzKTsKKyAgICBBVkFISV9MTElTVF9IRUFEX0lOSVQoQXZhaGlSZWNvcmRCcm93c2VyLCBjbGllbnQtPnJlY29yZF9icm93c2Vycyk7CisKKyAgICBpZiAoIShjbGllbnQtPmJ1cyA9IGF2YWhpX2RidXNfYnVzX2dldCgmZXJyb3IpKSB8fCBkYnVzX2Vycm9yX2lzX3NldCgmZXJyb3IpKSB7CisgICAgICAgIGlmIChyZXRfZXJyb3IpCisgICAgICAgICAgICAqcmV0X2Vycm9yID0gQVZBSElfRVJSX0RCVVNfRVJST1I7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBpZiAoYXZhaGlfZGJ1c19jb25uZWN0aW9uX2dsdWUoY2xpZW50LT5idXMsIHBvbGxfYXBpKSA8IDApIHsKKyAgICAgICAgaWYgKHJldF9lcnJvcikKKyAgICAgICAgICAgICpyZXRfZXJyb3IgPSBBVkFISV9FUlJfTk9fTUVNT1JZOyAvKiBOb3Qgb3B0aW1hbCAqLworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKCFkYnVzX2Nvbm5lY3Rpb25fYWRkX2ZpbHRlcihjbGllbnQtPmJ1cywgZmlsdGVyX2Z1bmMsIGNsaWVudCwgTlVMTCkpIHsKKyAgICAgICAgaWYgKHJldF9lcnJvcikKKyAgICAgICAgICAgICpyZXRfZXJyb3IgPSBBVkFISV9FUlJfTk9fTUVNT1JZOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgZGJ1c19idXNfYWRkX21hdGNoKAorICAgICAgICBjbGllbnQtPmJ1cywKKyAgICAgICAgInR5cGU9J3NpZ25hbCcsICIKKyAgICAgICAgImludGVyZmFjZT0nIiBBVkFISV9EQlVTX0lOVEVSRkFDRV9TRVJWRVIgIicsICIKKyAgICAgICAgInNlbmRlcj0nIiBBVkFISV9EQlVTX05BTUUgIicsICIKKyAgICAgICAgInBhdGg9JyIgQVZBSElfREJVU19QQVRIX1NFUlZFUiAiJyIsCisgICAgICAgICZlcnJvcik7CisKKyAgICBpZiAoZGJ1c19lcnJvcl9pc19zZXQoJmVycm9yKSkKKyAgICAgICAgZ290byBmYWlsOworCisgICAgZGJ1c19idXNfYWRkX21hdGNoICgKKyAgICAgICAgY2xpZW50LT5idXMsCisgICAgICAgICJ0eXBlPSdzaWduYWwnLCAiCisgICAgICAgICJpbnRlcmZhY2U9JyIgREJVU19JTlRFUkZBQ0VfREJVUyAiJywgIgorICAgICAgICAic2VuZGVyPSciIERCVVNfU0VSVklDRV9EQlVTICInLCAiCisgICAgICAgICJwYXRoPSciIERCVVNfUEFUSF9EQlVTICInIiwKKyAgICAgICAgJmVycm9yKTsKKworICAgIGlmIChkYnVzX2Vycm9yX2lzX3NldCgmZXJyb3IpKQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICBkYnVzX2J1c19hZGRfbWF0Y2goCisgICAgICAgIGNsaWVudC0+YnVzLAorICAgICAgICAidHlwZT0nc2lnbmFsJywgIgorICAgICAgICAiaW50ZXJmYWNlPSciIERCVVNfSU5URVJGQUNFX0xPQ0FMICInIiwKKyAgICAgICAgJmVycm9yKTsKKworICAgIGlmIChkYnVzX2Vycm9yX2lzX3NldCgmZXJyb3IpKQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICBpZiAoIShtZXNzYWdlID0gZGJ1c19tZXNzYWdlX25ld19tZXRob2RfY2FsbChBVkFISV9EQlVTX05BTUUsIEFWQUhJX0RCVVNfUEFUSF9TRVJWRVIsICJvcmcuZnJlZWRlc2t0b3AuREJ1cy5QZWVyIiwgIlBpbmciKSkpCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIHJlcGx5ID0gZGJ1c19jb25uZWN0aW9uX3NlbmRfd2l0aF9yZXBseV9hbmRfYmxvY2sgKGNsaWVudC0+YnVzLCBtZXNzYWdlLCAtMSwgJmVycm9yKTsKKworICAgIGlmICghcmVwbHkgfHwgZGJ1c19lcnJvcl9pc19zZXQgKCZlcnJvcikpIHsKKyAgICAgICAgLyogV2UgZnJlZSB0aGUgZXJyb3Igc28gaXRzIG5vdCBzZXQsIHRoYXQgd2F5IHRoZSBmYWlsIHRhcmdldAorICAgICAgICAgKiB3aWxsIHJldHVybiB0aGUgTk9fREFFTU9OIGVycm9yIHJhdGhlciB0aGFuIGEgREJVUyBlcnJvciAqLworICAgICAgICBkYnVzX2Vycm9yX2ZyZWUoJmVycm9yKTsKKworICAgICAgICBpZiAoIShmbGFncyAmIEFWQUhJX0NMSUVOVF9OT19GQUlMKSkgeworCisgICAgICAgICAgICBpZiAocmV0X2Vycm9yKQorICAgICAgICAgICAgICAgICpyZXRfZXJyb3IgPSBBVkFISV9FUlJfTk9fREFFTU9OOworCisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKworICAgICAgICAvKiBUaGUgdXNlciBkb2Vzbid0IHdhbnQgdGhpcyBjYWxsIHRvIGZhaWwgaWYgdGhlIGRhZW1vbiBpcyBub3QKKyAgICAgICAgICogYXZhaWxhYmxlLCBzbyBsZXQncyByZXR1cm4gc3VjY2VzZnVsbHkgKi8KKyAgICAgICAgY2xpZW50X3NldF9zdGF0ZShjbGllbnQsIEFWQUhJX0NMSUVOVF9DT05ORUNUSU5HKTsKKworICAgIH0gZWxzZSB7CisKKyAgICAgICAgaWYgKGluaXRfc2VydmVyKGNsaWVudCwgcmV0X2Vycm9yKSA8IDApCisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgZGJ1c19tZXNzYWdlX3VucmVmKG1lc3NhZ2UpOworCisgICAgaWYgKHJlcGx5KQorICAgICAgICBkYnVzX21lc3NhZ2VfdW5yZWYocmVwbHkpOworCisgICAgcmV0dXJuIGNsaWVudDsKKworZmFpbDoKKworICAgIGlmIChtZXNzYWdlKQorICAgICAgICBkYnVzX21lc3NhZ2VfdW5yZWYobWVzc2FnZSk7CisgICAgaWYgKHJlcGx5KQorICAgICAgICBkYnVzX21lc3NhZ2VfdW5yZWYocmVwbHkpOworCisgICAgaWYgKGNsaWVudCkKKyAgICAgICAgYXZhaGlfY2xpZW50X2ZyZWUoY2xpZW50KTsKKworICAgIGlmIChkYnVzX2Vycm9yX2lzX3NldCgmZXJyb3IpKSB7CisKKyAgICAgICAgaWYgKHJldF9lcnJvcikgeworICAgICAgICAgICAgaWYgKHN0cmNtcChlcnJvci5uYW1lLCBEQlVTX0VSUk9SX0ZJTEVfTk9UX0ZPVU5EKSA9PSAwKQorICAgICAgICAgICAgICAgIC8qIERCVVMgcmV0dXJucyB0aGlzIGVycm9yIHdoZW4gdGhlIERCVVMgZGFlbW9uIGlzIG5vdCBydW5uaW5nICovCisgICAgICAgICAgICAgICAgKnJldF9lcnJvciA9IEFWQUhJX0VSUl9OT19EQUVNT047CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgKnJldF9lcnJvciA9IGF2YWhpX2Vycm9yX2RidXNfdG9fbnVtYmVyKGVycm9yLm5hbWUpOworICAgICAgICB9CisKKyAgICAgICAgZGJ1c19lcnJvcl9mcmVlKCZlcnJvcik7CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgYXZhaGlfY2xpZW50X2ZyZWUoQXZhaGlDbGllbnQgKmNsaWVudCkgeworICAgIGFzc2VydChjbGllbnQpOworCisgICAgaWYgKGNsaWVudC0+YnVzKQorICAgICAgICAvKiBEaXNjb25uZWN0IGluIGFkdmFuY2UsIHNvIHRoYXQgdGhlIGZyZWUoKSBmdW5jdGlvbnMgd29uJ3QKKyAgICAgICAgICogaXNzdWUgbmVlZGxlc3Mgc2VydmVyIGNhbGxzICovCisjaWZkZWYgSEFWRV9EQlVTX0NPTk5FQ1RJT05fQ0xPU0UKKyAgICAgICAgZGJ1c19jb25uZWN0aW9uX2Nsb3NlKGNsaWVudC0+YnVzKTsKKyNlbHNlCisgICAgICAgIGRidXNfY29ubmVjdGlvbl9kaXNjb25uZWN0KGNsaWVudC0+YnVzKTsKKyNlbmRpZgorCisgICAgd2hpbGUgKGNsaWVudC0+Z3JvdXBzKQorICAgICAgICBhdmFoaV9lbnRyeV9ncm91cF9mcmVlKGNsaWVudC0+Z3JvdXBzKTsKKworICAgIHdoaWxlIChjbGllbnQtPmRvbWFpbl9icm93c2VycykKKyAgICAgICAgYXZhaGlfZG9tYWluX2Jyb3dzZXJfZnJlZShjbGllbnQtPmRvbWFpbl9icm93c2Vycyk7CisKKyAgICB3aGlsZSAoY2xpZW50LT5zZXJ2aWNlX2Jyb3dzZXJzKQorICAgICAgICBhdmFoaV9zZXJ2aWNlX2Jyb3dzZXJfZnJlZShjbGllbnQtPnNlcnZpY2VfYnJvd3NlcnMpOworCisgICAgd2hpbGUgKGNsaWVudC0+c2VydmljZV90eXBlX2Jyb3dzZXJzKQorICAgICAgICBhdmFoaV9zZXJ2aWNlX3R5cGVfYnJvd3Nlcl9mcmVlKGNsaWVudC0+c2VydmljZV90eXBlX2Jyb3dzZXJzKTsKKworICAgIHdoaWxlIChjbGllbnQtPnNlcnZpY2VfcmVzb2x2ZXJzKQorICAgICAgICBhdmFoaV9zZXJ2aWNlX3Jlc29sdmVyX2ZyZWUoY2xpZW50LT5zZXJ2aWNlX3Jlc29sdmVycyk7CisKKyAgICB3aGlsZSAoY2xpZW50LT5ob3N0X25hbWVfcmVzb2x2ZXJzKQorICAgICAgICBhdmFoaV9ob3N0X25hbWVfcmVzb2x2ZXJfZnJlZShjbGllbnQtPmhvc3RfbmFtZV9yZXNvbHZlcnMpOworCisgICAgd2hpbGUgKGNsaWVudC0+YWRkcmVzc19yZXNvbHZlcnMpCisgICAgICAgIGF2YWhpX2FkZHJlc3NfcmVzb2x2ZXJfZnJlZShjbGllbnQtPmFkZHJlc3NfcmVzb2x2ZXJzKTsKKworICAgIHdoaWxlIChjbGllbnQtPnJlY29yZF9icm93c2VycykKKyAgICAgICAgYXZhaGlfcmVjb3JkX2Jyb3dzZXJfZnJlZShjbGllbnQtPnJlY29yZF9icm93c2Vycyk7CisKKyAgICBpZiAoY2xpZW50LT5idXMpCisgICAgICAgIGRidXNfY29ubmVjdGlvbl91bnJlZihjbGllbnQtPmJ1cyk7CisKKyAgICBhdmFoaV9mcmVlKGNsaWVudC0+dmVyc2lvbl9zdHJpbmcpOworICAgIGF2YWhpX2ZyZWUoY2xpZW50LT5ob3N0X25hbWUpOworICAgIGF2YWhpX2ZyZWUoY2xpZW50LT5ob3N0X25hbWVfZnFkbik7CisgICAgYXZhaGlfZnJlZShjbGllbnQtPmRvbWFpbl9uYW1lKTsKKworICAgIGF2YWhpX2ZyZWUoY2xpZW50KTsKK30KKworc3RhdGljIGNoYXIqIGF2YWhpX2NsaWVudF9nZXRfc3RyaW5nX3JlcGx5X2FuZF9ibG9jayAoQXZhaGlDbGllbnQgKmNsaWVudCwgY29uc3QgY2hhciAqbWV0aG9kLCBjb25zdCBjaGFyICpwYXJhbSkgeworICAgIERCdXNNZXNzYWdlICptZXNzYWdlID0gTlVMTCwgKnJlcGx5ID0gTlVMTDsKKyAgICBEQnVzRXJyb3IgZXJyb3I7CisgICAgY2hhciAqcmV0LCAqbjsKKworICAgIGFzc2VydChjbGllbnQpOworICAgIGFzc2VydChtZXRob2QpOworCisgICAgZGJ1c19lcnJvcl9pbml0ICgmZXJyb3IpOworCisgICAgaWYgKCEobWVzc2FnZSA9IGRidXNfbWVzc2FnZV9uZXdfbWV0aG9kX2NhbGwgKEFWQUhJX0RCVVNfTkFNRSwgQVZBSElfREJVU19QQVRIX1NFUlZFUiwgQVZBSElfREJVU19JTlRFUkZBQ0VfU0VSVkVSLCBtZXRob2QpKSkgeworICAgICAgICBhdmFoaV9jbGllbnRfc2V0X2Vycm5vKGNsaWVudCwgQVZBSElfRVJSX05PX01FTU9SWSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBpZiAocGFyYW0pIHsKKyAgICAgICAgaWYgKCFkYnVzX21lc3NhZ2VfYXBwZW5kX2FyZ3MgKG1lc3NhZ2UsIERCVVNfVFlQRV9TVFJJTkcsICZwYXJhbSwgREJVU19UWVBFX0lOVkFMSUQpKSB7CisgICAgICAgICAgICBhdmFoaV9jbGllbnRfc2V0X2Vycm5vIChjbGllbnQsIEFWQUhJX0VSUl9OT19NRU1PUlkpOworICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CisgICAgfQorCisgICAgcmVwbHkgPSBkYnVzX2Nvbm5lY3Rpb25fc2VuZF93aXRoX3JlcGx5X2FuZF9ibG9jayAoY2xpZW50LT5idXMsIG1lc3NhZ2UsIC0xLCAmZXJyb3IpOworCisgICAgaWYgKCFyZXBseSB8fCBkYnVzX2Vycm9yX2lzX3NldCAoJmVycm9yKSkKKyAgICAgICAgZ290byBmYWlsOworCisgICAgaWYgKCFkYnVzX21lc3NhZ2VfZ2V0X2FyZ3MgKHJlcGx5LCAmZXJyb3IsIERCVVNfVFlQRV9TVFJJTkcsICZyZXQsIERCVVNfVFlQRV9JTlZBTElEKSB8fAorICAgICAgICBkYnVzX2Vycm9yX2lzX3NldCAoJmVycm9yKSkKKyAgICAgICAgZ290byBmYWlsOworCisgICAgaWYgKCEobiA9IGF2YWhpX3N0cmR1cChyZXQpKSkgeworICAgICAgICBhdmFoaV9jbGllbnRfc2V0X2Vycm5vKGNsaWVudCwgQVZBSElfRVJSX05PX01FTU9SWSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBkYnVzX21lc3NhZ2VfdW5yZWYobWVzc2FnZSk7CisgICAgZGJ1c19tZXNzYWdlX3VucmVmKHJlcGx5KTsKKworICAgIHJldHVybiBuOworCitmYWlsOgorCisgICAgaWYgKG1lc3NhZ2UpCisgICAgICAgIGRidXNfbWVzc2FnZV91bnJlZihtZXNzYWdlKTsKKyAgICBpZiAocmVwbHkpCisgICAgICAgIGRidXNfbWVzc2FnZV91bnJlZihyZXBseSk7CisKKyAgICBpZiAoZGJ1c19lcnJvcl9pc19zZXQoJmVycm9yKSkgeworICAgICAgICBhdmFoaV9jbGllbnRfc2V0X2RidXNfZXJyb3IoY2xpZW50LCAmZXJyb3IpOworICAgICAgICBkYnVzX2Vycm9yX2ZyZWUoJmVycm9yKTsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworY29uc3QgY2hhciogYXZhaGlfY2xpZW50X2dldF92ZXJzaW9uX3N0cmluZyhBdmFoaUNsaWVudCAqY2xpZW50KSB7CisgICAgYXNzZXJ0KGNsaWVudCk7CisKKyAgICBpZiAoIWF2YWhpX2NsaWVudF9pc19jb25uZWN0ZWQoY2xpZW50KSkgeworICAgICAgICBhdmFoaV9jbGllbnRfc2V0X2Vycm5vKGNsaWVudCwgQVZBSElfRVJSX0JBRF9TVEFURSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmICghY2xpZW50LT52ZXJzaW9uX3N0cmluZykKKyAgICAgICAgY2xpZW50LT52ZXJzaW9uX3N0cmluZyA9IGF2YWhpX2NsaWVudF9nZXRfc3RyaW5nX3JlcGx5X2FuZF9ibG9jayhjbGllbnQsICJHZXRWZXJzaW9uU3RyaW5nIiwgTlVMTCk7CisKKyAgICByZXR1cm4gY2xpZW50LT52ZXJzaW9uX3N0cmluZzsKK30KKworY29uc3QgY2hhciogYXZhaGlfY2xpZW50X2dldF9kb21haW5fbmFtZShBdmFoaUNsaWVudCAqY2xpZW50KSB7CisgICAgYXNzZXJ0KGNsaWVudCk7CisKKyAgICBpZiAoIWF2YWhpX2NsaWVudF9pc19jb25uZWN0ZWQoY2xpZW50KSkgeworICAgICAgICBhdmFoaV9jbGllbnRfc2V0X2Vycm5vKGNsaWVudCwgQVZBSElfRVJSX0JBRF9TVEFURSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmICghY2xpZW50LT5kb21haW5fbmFtZSkKKyAgICAgICAgY2xpZW50LT5kb21haW5fbmFtZSA9IGF2YWhpX2NsaWVudF9nZXRfc3RyaW5nX3JlcGx5X2FuZF9ibG9jayhjbGllbnQsICJHZXREb21haW5OYW1lIiwgTlVMTCk7CisKKyAgICByZXR1cm4gY2xpZW50LT5kb21haW5fbmFtZTsKK30KKworY29uc3QgY2hhciogYXZhaGlfY2xpZW50X2dldF9ob3N0X25hbWUoQXZhaGlDbGllbnQgKmNsaWVudCkgeworICAgIGFzc2VydChjbGllbnQpOworCisgICAgaWYgKCFhdmFoaV9jbGllbnRfaXNfY29ubmVjdGVkKGNsaWVudCkpIHsKKyAgICAgICAgYXZhaGlfY2xpZW50X3NldF9lcnJubyhjbGllbnQsIEFWQUhJX0VSUl9CQURfU1RBVEUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoIWNsaWVudC0+aG9zdF9uYW1lKQorICAgICAgICBjbGllbnQtPmhvc3RfbmFtZSA9IGF2YWhpX2NsaWVudF9nZXRfc3RyaW5nX3JlcGx5X2FuZF9ibG9jayhjbGllbnQsICJHZXRIb3N0TmFtZSIsIE5VTEwpOworCisgICAgcmV0dXJuIGNsaWVudC0+aG9zdF9uYW1lOworfQorCitjb25zdCBjaGFyKiBhdmFoaV9jbGllbnRfZ2V0X2hvc3RfbmFtZV9mcWRuIChBdmFoaUNsaWVudCAqY2xpZW50KSB7CisgICAgYXNzZXJ0KGNsaWVudCk7CisKKyAgICBpZiAoIWF2YWhpX2NsaWVudF9pc19jb25uZWN0ZWQoY2xpZW50KSkgeworICAgICAgICBhdmFoaV9jbGllbnRfc2V0X2Vycm5vKGNsaWVudCwgQVZBSElfRVJSX0JBRF9TVEFURSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmICghY2xpZW50LT5ob3N0X25hbWVfZnFkbikKKyAgICAgICAgY2xpZW50LT5ob3N0X25hbWVfZnFkbiA9IGF2YWhpX2NsaWVudF9nZXRfc3RyaW5nX3JlcGx5X2FuZF9ibG9jayhjbGllbnQsICJHZXRIb3N0TmFtZUZxZG4iLCBOVUxMKTsKKworICAgIHJldHVybiBjbGllbnQtPmhvc3RfbmFtZV9mcWRuOworfQorCitBdmFoaUNsaWVudFN0YXRlIGF2YWhpX2NsaWVudF9nZXRfc3RhdGUoQXZhaGlDbGllbnQgKmNsaWVudCkgeworICAgIGFzc2VydChjbGllbnQpOworCisgICAgcmV0dXJuIGNsaWVudC0+c3RhdGU7Cit9CisKK2ludCBhdmFoaV9jbGllbnRfZXJybm8oQXZhaGlDbGllbnQgKmNsaWVudCkgeworICAgIGFzc2VydChjbGllbnQpOworCisgICAgcmV0dXJuIGNsaWVudC0+ZXJyb3I7Cit9CisKKy8qIEp1c3QgZm9yIGludGVybmFsIHVzZSAqLworaW50IGF2YWhpX2NsaWVudF9zaW1wbGVfbWV0aG9kX2NhbGwoQXZhaGlDbGllbnQgKmNsaWVudCwgY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqaW50ZXJmYWNlLCBjb25zdCBjaGFyICptZXRob2QpIHsKKyAgICBEQnVzTWVzc2FnZSAqbWVzc2FnZSA9IE5VTEwsICpyZXBseSA9IE5VTEw7CisgICAgREJ1c0Vycm9yIGVycm9yOworICAgIGludCByID0gQVZBSElfT0s7CisKKyAgICBkYnVzX2Vycm9yX2luaXQoJmVycm9yKTsKKworICAgIGFzc2VydChjbGllbnQpOworICAgIGFzc2VydChwYXRoKTsKKyAgICBhc3NlcnQoaW50ZXJmYWNlKTsKKyAgICBhc3NlcnQobWV0aG9kKTsKKworICAgIGlmICghKG1lc3NhZ2UgPSBkYnVzX21lc3NhZ2VfbmV3X21ldGhvZF9jYWxsKEFWQUhJX0RCVVNfTkFNRSwgcGF0aCwgaW50ZXJmYWNlLCBtZXRob2QpKSkgeworICAgICAgICByID0gYXZhaGlfY2xpZW50X3NldF9lcnJubyhjbGllbnQsIEFWQUhJX0VSUl9OT19NRU1PUlkpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKCEocmVwbHkgPSBkYnVzX2Nvbm5lY3Rpb25fc2VuZF93aXRoX3JlcGx5X2FuZF9ibG9jayhjbGllbnQtPmJ1cywgbWVzc2FnZSwgLTEsICZlcnJvcikpIHx8CisgICAgICAgIGRidXNfZXJyb3JfaXNfc2V0ICgmZXJyb3IpKSB7CisgICAgICAgIHIgPSBhdmFoaV9jbGllbnRfc2V0X2Vycm5vKGNsaWVudCwgQVZBSElfRVJSX0RCVVNfRVJST1IpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKCFkYnVzX21lc3NhZ2VfZ2V0X2FyZ3MocmVwbHksICZlcnJvciwgREJVU19UWVBFX0lOVkFMSUQpIHx8CisgICAgICAgIGRidXNfZXJyb3JfaXNfc2V0ICgmZXJyb3IpKSB7CisgICAgICAgIHIgPSBhdmFoaV9jbGllbnRfc2V0X2Vycm5vKGNsaWVudCwgQVZBSElfRVJSX0RCVVNfRVJST1IpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgZGJ1c19tZXNzYWdlX3VucmVmKG1lc3NhZ2UpOworICAgIGRidXNfbWVzc2FnZV91bnJlZihyZXBseSk7CisKKyAgICByZXR1cm4gQVZBSElfT0s7CisKK2ZhaWw6CisgICAgaWYgKGRidXNfZXJyb3JfaXNfc2V0KCZlcnJvcikpIHsKKyAgICAgICAgciA9IGF2YWhpX2NsaWVudF9zZXRfZGJ1c19lcnJvcihjbGllbnQsICZlcnJvcik7CisgICAgICAgIGRidXNfZXJyb3JfZnJlZSgmZXJyb3IpOworICAgIH0KKworICAgIGlmIChtZXNzYWdlKQorICAgICAgICBkYnVzX21lc3NhZ2VfdW5yZWYobWVzc2FnZSk7CisKKyAgICBpZiAocmVwbHkpCisgICAgICAgIGRidXNfbWVzc2FnZV91bnJlZihyZXBseSk7CisKKyAgICByZXR1cm4gcjsKK30KKwordWludDMyX3QgYXZhaGlfY2xpZW50X2dldF9sb2NhbF9zZXJ2aWNlX2Nvb2tpZShBdmFoaUNsaWVudCAqY2xpZW50KSB7CisgICAgREJ1c01lc3NhZ2UgKm1lc3NhZ2UgPSBOVUxMLCAqcmVwbHkgPSBOVUxMOworICAgIERCdXNFcnJvciBlcnJvcjsKKyAgICBhc3NlcnQoY2xpZW50KTsKKworICAgIGlmICghYXZhaGlfY2xpZW50X2lzX2Nvbm5lY3RlZChjbGllbnQpKSB7CisgICAgICAgIGF2YWhpX2NsaWVudF9zZXRfZXJybm8oY2xpZW50LCBBVkFISV9FUlJfQkFEX1NUQVRFKTsKKyAgICAgICAgcmV0dXJuIEFWQUhJX1NFUlZJQ0VfQ09PS0lFX0lOVkFMSUQ7CisgICAgfQorCisgICAgaWYgKGNsaWVudC0+bG9jYWxfc2VydmljZV9jb29raWVfdmFsaWQpCisgICAgICAgIHJldHVybiBjbGllbnQtPmxvY2FsX3NlcnZpY2VfY29va2llOworCisgICAgZGJ1c19lcnJvcl9pbml0ICgmZXJyb3IpOworCisgICAgaWYgKCEobWVzc2FnZSA9IGRidXNfbWVzc2FnZV9uZXdfbWV0aG9kX2NhbGwoQVZBSElfREJVU19OQU1FLCBBVkFISV9EQlVTX1BBVEhfU0VSVkVSLCBBVkFISV9EQlVTX0lOVEVSRkFDRV9TRVJWRVIsICJHZXRMb2NhbFNlcnZpY2VDb29raWUiKSkpIHsKKyAgICAgICAgYXZhaGlfY2xpZW50X3NldF9lcnJubyhjbGllbnQsIEFWQUhJX0VSUl9OT19NRU1PUlkpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgcmVwbHkgPSBkYnVzX2Nvbm5lY3Rpb25fc2VuZF93aXRoX3JlcGx5X2FuZF9ibG9jayAoY2xpZW50LT5idXMsIG1lc3NhZ2UsIC0xLCAmZXJyb3IpOworCisgICAgaWYgKCFyZXBseSB8fCBkYnVzX2Vycm9yX2lzX3NldCAoJmVycm9yKSkKKyAgICAgICAgZ290byBmYWlsOworCisgICAgaWYgKCFkYnVzX21lc3NhZ2VfZ2V0X2FyZ3MgKHJlcGx5LCAmZXJyb3IsIERCVVNfVFlQRV9VSU5UMzIsICZjbGllbnQtPmxvY2FsX3NlcnZpY2VfY29va2llLCBEQlVTX1RZUEVfSU5WQUxJRCkgfHwKKyAgICAgICAgZGJ1c19lcnJvcl9pc19zZXQgKCZlcnJvcikpCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIGRidXNfbWVzc2FnZV91bnJlZihtZXNzYWdlKTsKKyAgICBkYnVzX21lc3NhZ2VfdW5yZWYocmVwbHkpOworCisgICAgY2xpZW50LT5sb2NhbF9zZXJ2aWNlX2Nvb2tpZV92YWxpZCA9IDE7CisgICAgcmV0dXJuIGNsaWVudC0+bG9jYWxfc2VydmljZV9jb29raWU7CisKK2ZhaWw6CisKKyAgICBpZiAobWVzc2FnZSkKKyAgICAgICAgZGJ1c19tZXNzYWdlX3VucmVmKG1lc3NhZ2UpOworICAgIGlmIChyZXBseSkKKyAgICAgICAgZGJ1c19tZXNzYWdlX3VucmVmKHJlcGx5KTsKKworICAgIGlmIChkYnVzX2Vycm9yX2lzX3NldCgmZXJyb3IpKSB7CisgICAgICAgIGF2YWhpX2NsaWVudF9zZXRfZGJ1c19lcnJvcihjbGllbnQsICZlcnJvcik7CisgICAgICAgIGRidXNfZXJyb3JfZnJlZSgmZXJyb3IpOworICAgIH0KKworICAgIHJldHVybiBBVkFISV9TRVJWSUNFX0NPT0tJRV9JTlZBTElEOworfQorCitpbnQgYXZhaGlfY2xpZW50X2lzX2Nvbm5lY3RlZChBdmFoaUNsaWVudCAqY2xpZW50KSB7CisgICAgYXNzZXJ0KGNsaWVudCk7CisKKyAgICByZXR1cm4KKyAgICAgICAgY2xpZW50LT5idXMgJiYKKyAgICAgICAgZGJ1c19jb25uZWN0aW9uX2dldF9pc19jb25uZWN0ZWQoY2xpZW50LT5idXMpICYmCisgICAgICAgIChjbGllbnQtPnN0YXRlID09IEFWQUhJX0NMSUVOVF9TX1JVTk5JTkcgfHwgY2xpZW50LT5zdGF0ZSA9PSBBVkFISV9DTElFTlRfU19SRUdJU1RFUklORyB8fCBjbGllbnQtPnN0YXRlID09IEFWQUhJX0NMSUVOVF9TX0NPTExJU0lPTik7Cit9CisKK2ludCBhdmFoaV9jbGllbnRfc2V0X2hvc3RfbmFtZShBdmFoaUNsaWVudCogY2xpZW50LCBjb25zdCBjaGFyICpuYW1lKSB7CisgICAgREJ1c01lc3NhZ2UgKm1lc3NhZ2UgPSBOVUxMLCAqcmVwbHkgPSBOVUxMOworICAgIERCdXNFcnJvciBlcnJvcjsKKworICAgIGFzc2VydChjbGllbnQpOworCisgICAgaWYgKCFhdmFoaV9jbGllbnRfaXNfY29ubmVjdGVkKGNsaWVudCkpCisgICAgICAgIHJldHVybiBhdmFoaV9jbGllbnRfc2V0X2Vycm5vKGNsaWVudCwgQVZBSElfRVJSX0JBRF9TVEFURSk7CisKKyAgICBkYnVzX2Vycm9yX2luaXQgKCZlcnJvcik7CisKKyAgICBpZiAoIShtZXNzYWdlID0gZGJ1c19tZXNzYWdlX25ld19tZXRob2RfY2FsbCAoQVZBSElfREJVU19OQU1FLCBBVkFISV9EQlVTX1BBVEhfU0VSVkVSLCBBVkFISV9EQlVTX0lOVEVSRkFDRV9TRVJWRVIsICJTZXRIb3N0TmFtZSIpKSkgeworICAgICAgICBhdmFoaV9jbGllbnRfc2V0X2Vycm5vKGNsaWVudCwgQVZBSElfRVJSX05PX01FTU9SWSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBpZiAoIWRidXNfbWVzc2FnZV9hcHBlbmRfYXJncyAobWVzc2FnZSwgREJVU19UWVBFX1NUUklORywgJm5hbWUsIERCVVNfVFlQRV9JTlZBTElEKSkgeworICAgICAgICBhdmFoaV9jbGllbnRfc2V0X2Vycm5vIChjbGllbnQsIEFWQUhJX0VSUl9OT19NRU1PUlkpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgcmVwbHkgPSBkYnVzX2Nvbm5lY3Rpb25fc2VuZF93aXRoX3JlcGx5X2FuZF9ibG9jayhjbGllbnQtPmJ1cywgbWVzc2FnZSwgLTEsICZlcnJvcik7CisKKyAgICBpZiAoIXJlcGx5IHx8IGRidXNfZXJyb3JfaXNfc2V0ICgmZXJyb3IpKQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICBpZiAoIWRidXNfbWVzc2FnZV9nZXRfYXJncyhyZXBseSwgJmVycm9yLCBEQlVTX1RZUEVfSU5WQUxJRCkgfHwKKyAgICAgICAgZGJ1c19lcnJvcl9pc19zZXQgKCZlcnJvcikpCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIGRidXNfbWVzc2FnZV91bnJlZihtZXNzYWdlKTsKKyAgICBkYnVzX21lc3NhZ2VfdW5yZWYocmVwbHkpOworCisgICAgYXZhaGlfZnJlZShjbGllbnQtPmhvc3RfbmFtZSk7CisgICAgY2xpZW50LT5ob3N0X25hbWUgPSBOVUxMOworICAgIGF2YWhpX2ZyZWUoY2xpZW50LT5ob3N0X25hbWVfZnFkbik7CisgICAgY2xpZW50LT5ob3N0X25hbWVfZnFkbiA9IE5VTEw7CisKKyAgICByZXR1cm4gMDsKKworZmFpbDoKKworICAgIGlmIChtZXNzYWdlKQorICAgICAgICBkYnVzX21lc3NhZ2VfdW5yZWYobWVzc2FnZSk7CisgICAgaWYgKHJlcGx5KQorICAgICAgICBkYnVzX21lc3NhZ2VfdW5yZWYocmVwbHkpOworCisgICAgaWYgKGRidXNfZXJyb3JfaXNfc2V0KCZlcnJvcikpIHsKKyAgICAgICAgYXZhaGlfY2xpZW50X3NldF9kYnVzX2Vycm9yKGNsaWVudCwgJmVycm9yKTsKKyAgICAgICAgZGJ1c19lcnJvcl9mcmVlKCZlcnJvcik7CisgICAgfQorCisgICAgcmV0dXJuIGNsaWVudC0+ZXJyb3I7Cit9CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktY2xpZW50L2NsaWVudC5oIGIvYXZhaGktMC42LjMxL2F2YWhpLWNsaWVudC9jbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDM5ZGE1Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNsaWVudC9jbGllbnQuaApAQCAtMCwwICsxLDExNyBAQAorI2lmbmRlZiBmb29jbGllbnRoZm9vCisjZGVmaW5lIGZvb2NsaWVudGhmb28KKworLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKworI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9jZGVjbC5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9hZGRyZXNzLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL3N0cmxzdC5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9kZWZzLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL3dhdGNoLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2djY21hY3JvLmg+CisKKy8qKiBcZmlsZSBjbGllbnQuaCBEZWZpbml0aW9ucyBhbmQgZnVuY3Rpb25zIGZvciB0aGUgY2xpZW50IEFQSSBvdmVyIEQtQnVzICovCisKK0FWQUhJX0NfREVDTF9CRUdJTgorCisvKiogQSBjb25uZWN0aW9uIGNvbnRleHQgKi8KK3R5cGVkZWYgc3RydWN0IEF2YWhpQ2xpZW50IEF2YWhpQ2xpZW50OworCisvKiogU3RhdGVzIG9mIGEgY2xpZW50IG9iamVjdCwgYSBzdXBlcnNldCBvZiBBdmFoaVNlcnZlclN0YXRlICovCit0eXBlZGVmIGVudW0geworICAgIEFWQUhJX0NMSUVOVF9TX1JFR0lTVEVSSU5HID0gQVZBSElfU0VSVkVSX1JFR0lTVEVSSU5HLCAgLyoqPCBTZXJ2ZXIgc3RhdGU6IFJFR0lTVEVSSU5HICovCisgICAgQVZBSElfQ0xJRU5UX1NfUlVOTklORyA9IEFWQUhJX1NFUlZFUl9SVU5OSU5HLCAgICAgICAgICAvKio8IFNlcnZlciBzdGF0ZTogUlVOTklORyAqLworICAgIEFWQUhJX0NMSUVOVF9TX0NPTExJU0lPTiA9IEFWQUhJX1NFUlZFUl9DT0xMSVNJT04sICAgICAgLyoqPCBTZXJ2ZXIgc3RhdGU6IENPTExJU0lPTiAqLworICAgIEFWQUhJX0NMSUVOVF9GQUlMVVJFID0gMTAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBTb21lIGtpbmQgb2YgZXJyb3IgaGFwcGVuZWQgb24gdGhlIGNsaWVudCBzaWRlICovCisgICAgQVZBSElfQ0xJRU5UX0NPTk5FQ1RJTkcgPSAxMDEgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFdlJ3JlIHN0aWxsIGNvbm5lY3RpbmcuIFRoaXMgc3RhdGUgaXMgb25seSBlbnRlcmVkIHdoZW4gQVZBSElfQ0xJRU5UX05PX0ZBSUwgaGFzIGJlZW4gcGFzc2VkIHRvIGF2YWhpX2NsaWVudF9uZXcoKSBhbmQgdGhlIGRhZW1vbiBpcyBub3QgeWV0IGF2YWlsYWJsZS4gKi8KK30gQXZhaGlDbGllbnRTdGF0ZTsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBBVkFISV9DTElFTlRfSUdOT1JFX1VTRVJfQ09ORklHID0gMSwgLyoqPCBEb24ndCByZWFkIHVzZXIgY29uZmlndXJhdGlvbiAqLworICAgIEFWQUhJX0NMSUVOVF9OT19GQUlMID0gMiAgICAgICAgLyoqPCBEb24ndCBmYWlsIGlmIHRoZSBkYWVtb24gaXMgbm90IGF2YWlsYWJsZSB3aGVuIGF2YWhpX2NsaWVudF9uZXcoKSBpcyBjYWxsZWQsIGluc3RlYWQgZW50ZXIgQVZBSElfQ0xJRU5UX0NPTk5FQ1RJTkcgc3RhdGUgYW5kIHdhaXQgZm9yIHRoZSBkYWVtb24gdG8gYXBwZWFyICovCit9IEF2YWhpQ2xpZW50RmxhZ3M7CisKKy8qKiBUaGUgZnVuY3Rpb24gcHJvdG90eXBlIGZvciB0aGUgY2FsbGJhY2sgb2YgYW4gQXZhaGlDbGllbnQgKi8KK3R5cGVkZWYgdm9pZCAoKkF2YWhpQ2xpZW50Q2FsbGJhY2spICgKKyAgICBBdmFoaUNsaWVudCAqcywKKyAgICBBdmFoaUNsaWVudFN0YXRlIHN0YXRlIC8qKjwgVGhlIG5ldyBzdGF0ZSBvZiB0aGUgY2xpZW50ICovLAorICAgIHZvaWQqIHVzZXJkYXRhIC8qKjwgVGhlIHVzZXIgZGF0YSB0aGF0IHdhcyBwYXNzZWQgdG8gYXZhaGlfY2xpZW50X25ldygpICovKTsKKworLyoqIEB7IFxuYW1lIENvbnN0cnVjdGlvbiBhbmQgZGVzdHJ1Y3Rpb24gKi8KKworLyoqIENyZWF0ZXMgYSBuZXcgY2xpZW50IGluc3RhbmNlICovCitBdmFoaUNsaWVudCogYXZhaGlfY2xpZW50X25ldyAoCisgICAgY29uc3QgQXZhaGlQb2xsICpwb2xsX2FwaSAvKio8IFRoZSBhYnN0cmFjdCBldmVudCBsb29wIEFQSSB0byB1c2UgKi8sCisgICAgQXZhaGlDbGllbnRGbGFncyBmbGFncyAvKio8IFNvbWUgZmxhZ3MgdG8gbW9kaWZ5IHRoZSBiZWhhdmlvdXIgb2YgIHRoZSBjbGllbnQgbGlicmFyeSAqLywKKyAgICBBdmFoaUNsaWVudENhbGxiYWNrIGNhbGxiYWNrIC8qKjwgQSBjYWxsYmFjayB0aGF0IGlzIGNhbGxlZCB3aGVuZXZlciB0aGUgc3RhdGUgb2YgdGhlIGNsaWVudCBjaGFuZ2VzLiBUaGlzIG1heSBiZSBOVUxMLiBQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciB0aGUgZmlyc3QgdGltZSBmcm9tIHdpdGhpbiB0aGUgYXZhaGlfY2xpZW50X25ldygpIGNvbnRleHQhIFRodXMsIGluIHRoZSBjYWxsYmFjayB5b3Ugc2hvdWxkIG5vdCBtYWtlIHVzZSBvZiBnbG9iYWwgdmFyaWFibGVzIHRoYXQgYXJlIGluaXRpYWxpemVkIG9ubHkgYWZ0ZXIgeW91ciBjYWxsIHRvIGF2YWhpX2NsaWVudF9uZXcoKS4gQSBjb21tb24gbWlzdGFrZSBpcyB0byBzdG9yZSB0aGUgQXZhaGlDbGllbnQgcG9pbnRlciByZXR1cm5lZCBieSBhdmFoaV9jbGllbnRfbmV3KCkgaW4gYSBnbG9iYWwgdmFyaWFibGUgYW5kIGFzc3VtZSB0aGF0IHRoaXMgZ2xvYmFsIHZhcmlhYmxlIGFscmVhZHkgY29udGFpbnMgdGhlIHZhbGlkIHBvaW50ZXIgd2hlbiB0aGUgY2FsbGJhY2sgaXMgY2FsbGVkIGZvciB0aGUgZmlyc3QgdGltZS4gQSB3b3JrLWFyb3VuZCBmb3IgdGhpcyBpcyB0byBhbHdheXMgdXNlIHRoZSBBdmFoaUNsaWVudCBwb2ludGVyIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaW5zdGVhZCBvZiB0aGUgZ2xvYmFsIHBvaW50ZXIuICAqLywKKyAgICB2b2lkICp1c2VyZGF0YSAvKio8IFNvbWUgYXJiaXRyYXJ5IHVzZXIgZGF0YSBwb2ludGVyIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uICovLAorICAgIGludCAqZXJyb3IgLyoqPCBJZiBjcmVhdGlvbiBvZiB0aGUgY2xpZW50IGZhaWxzLCB0aGlzIGludGVnZXIgd2lsbCBjb250YWluIHRoZSBlcnJvciBjYXVzZS4gTWF5IGJlIE5VTEwgaWYgeW91IGFyZW4ndCBpbnRlcmVzdGVkIGluIHRoZSByZWFzb24gd2h5IGF2YWhpX2NsaWVudF9uZXcoKSBmYWlsZWQuICovKTsKKworLyoqIEZyZWUgYSBjbGllbnQgaW5zdGFuY2UuIFRoaXMgd2lsbCBhdXRvbWF0aWNhbGx5IGZyZWUgYWxsCisgKiBhc3NvY2lhdGVkIGJyb3dzZXIsIHJlc29sdmUgYW5kIGVudHJ5IGdyb3VwIG9iamVjdHMuIEFsbCBwb2ludGVycworICogdG8gc3VjaCBvYmplY3RzIGJlY29tZSBpbnZhbGlkISAqLwordm9pZCBhdmFoaV9jbGllbnRfZnJlZShBdmFoaUNsaWVudCAqY2xpZW50KTsKKworLyoqIEB9ICovCisKKy8qKiBAeyBcbmFtZSBQcm9wZXJ0aWVzICovCisKKy8qKiBHZXQgdGhlIHZlcnNpb24gb2YgdGhlIHNlcnZlciAqLworY29uc3QgY2hhciogYXZhaGlfY2xpZW50X2dldF92ZXJzaW9uX3N0cmluZyAoQXZhaGlDbGllbnQqKTsKKworLyoqIEdldCBob3N0IG5hbWUgKi8KK2NvbnN0IGNoYXIqIGF2YWhpX2NsaWVudF9nZXRfaG9zdF9uYW1lIChBdmFoaUNsaWVudCopOworCisvKiogU2V0IGhvc3QgbmFtZS4gXHNpbmNlIDAuNi4xMyAqLworaW50IGF2YWhpX2NsaWVudF9zZXRfaG9zdF9uYW1lKEF2YWhpQ2xpZW50KiwgY29uc3QgY2hhciAqbmFtZSk7CisKKy8qKiBHZXQgZG9tYWluIG5hbWUgKi8KK2NvbnN0IGNoYXIqIGF2YWhpX2NsaWVudF9nZXRfZG9tYWluX25hbWUgKEF2YWhpQ2xpZW50Kik7CisKKy8qKiBHZXQgRlFETiBkb21haW4gbmFtZSAqLworY29uc3QgY2hhciogYXZhaGlfY2xpZW50X2dldF9ob3N0X25hbWVfZnFkbiAoQXZhaGlDbGllbnQqKTsKKworLyoqIEdldCBzdGF0ZSAqLworQXZhaGlDbGllbnRTdGF0ZSBhdmFoaV9jbGllbnRfZ2V0X3N0YXRlKEF2YWhpQ2xpZW50ICpjbGllbnQpOworCisvKiogQHsgXG5hbWUgRXJyb3IgSGFuZGxpbmcgKi8KKworLyoqIEdldCB0aGUgbGFzdCBlcnJvciBudW1iZXIuIFNlZSBhdmFoaV9zdHJlcnJvcigpIGZvciBjb252ZXJ0aW5nIHRoaXMgZXJyb3IgY29kZSBpbnRvIGEgaHVtYW4gcmVhZGFibGUgc3RyaW5nLiAqLworaW50IGF2YWhpX2NsaWVudF9lcnJubyAoQXZhaGlDbGllbnQqKTsKKworLyoqIEB9ICovCisKKy8qKiBcY29uZCBmdWxsZG9jcyAqLworLyoqIFJldHVybiB0aGUgbG9jYWwgc2VydmljZSBjb29raWUuIHJldHVybnMgQVZBSElfU0VSVklDRV9DT09LSUVfSU5WQUxJRCBvbiBmYWlsdXJlLiAqLwordWludDMyX3QgYXZhaGlfY2xpZW50X2dldF9sb2NhbF9zZXJ2aWNlX2Nvb2tpZShBdmFoaUNsaWVudCAqY2xpZW50KTsKKy8qKiBcZW5kY29uZCAqLworCisvKiogQHsgXG5hbWUgTGliYyBOU1MgU3VwcG9ydCAqLworCisvKiogUmV0dXJuIDEgaWYgZ2V0aG9zdGJ5bmFtZSgpIHN1cHBvcnRzIG1ETlMgbG9va3VwcywgMCBvdGhlcndpc2UuIFxzaW5jZSAwLjYuNSAqLworaW50IGF2YWhpX25zc19zdXBwb3J0KHZvaWQpOworCisvKiogQH0gKi8KKworQVZBSElfQ19ERUNMX0VORAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jbGllbnQvZW50cnlncm91cC5jIGIvYXZhaGktMC42LjMxL2F2YWhpLWNsaWVudC9lbnRyeWdyb3VwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgwOWQ2MAotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jbGllbnQvZW50cnlncm91cC5jCkBAIC0wLDAgKzEsODkwIEBACisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxkYnVzL2RidXMuaD4KKworI2luY2x1ZGUgPGF2YWhpLWNsaWVudC9jbGllbnQuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vZGJ1cy5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9sbGlzdC5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9lcnJvci5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9tYWxsb2MuaD4KKworI2luY2x1ZGUgImNsaWVudC5oIgorI2luY2x1ZGUgImludGVybmFsLmgiCisKK3ZvaWQgYXZhaGlfZW50cnlfZ3JvdXBfc2V0X3N0YXRlKEF2YWhpRW50cnlHcm91cCAqZ3JvdXAsIEF2YWhpRW50cnlHcm91cFN0YXRlIHN0YXRlKSB7CisgICAgYXNzZXJ0KGdyb3VwKTsKKworICAgIGlmIChncm91cC0+c3RhdGVfdmFsaWQgJiYgZ3JvdXAtPnN0YXRlID09IHN0YXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBncm91cC0+c3RhdGUgPSBzdGF0ZTsKKyAgICBncm91cC0+c3RhdGVfdmFsaWQgPSAxOworCisgICAgaWYgKGdyb3VwLT5jYWxsYmFjaykKKyAgICAgICAgZ3JvdXAtPmNhbGxiYWNrKGdyb3VwLCBzdGF0ZSwgZ3JvdXAtPnVzZXJkYXRhKTsKK30KKworc3RhdGljIGludCByZXRyaWV2ZV9zdGF0ZShBdmFoaUVudHJ5R3JvdXAgKmdyb3VwKSB7CisgICAgREJ1c01lc3NhZ2UgKm1lc3NhZ2UgPSBOVUxMLCAqcmVwbHkgPSBOVUxMOworICAgIERCdXNFcnJvciBlcnJvcjsKKyAgICBpbnQgciA9IEFWQUhJX09LOworICAgIGludDMyX3Qgc3RhdGU7CisgICAgQXZhaGlDbGllbnQgKmNsaWVudDsKKworICAgIGRidXNfZXJyb3JfaW5pdCgmZXJyb3IpOworCisgICAgYXNzZXJ0KGdyb3VwKTsKKyAgICBjbGllbnQgPSBncm91cC0+Y2xpZW50OworCisgICAgaWYgKCEobWVzc2FnZSA9IGRidXNfbWVzc2FnZV9uZXdfbWV0aG9kX2NhbGwoQVZBSElfREJVU19OQU1FLCBncm91cC0+cGF0aCwgQVZBSElfREJVU19JTlRFUkZBQ0VfRU5UUllfR1JPVVAsICJHZXRTdGF0ZSIpKSkgeworICAgICAgICByID0gYXZhaGlfY2xpZW50X3NldF9lcnJubyhjbGllbnQsIEFWQUhJX0VSUl9OT19NRU1PUlkpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKCEocmVwbHkgPSBkYnVzX2Nvbm5lY3Rpb25fc2VuZF93aXRoX3JlcGx5X2FuZF9ibG9jayhjbGllbnQtPmJ1cywgbWVzc2FnZSwgLTEsICZlcnJvcikpIHx8CisgICAgICAgIGRidXNfZXJyb3JfaXNfc2V0ICgmZXJyb3IpKSB7CisgICAgICAgIHIgPSBhdmFoaV9jbGllbnRfc2V0X2Vycm5vKGNsaWVudCwgQVZBSElfRVJSX0RCVVNfRVJST1IpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKCFkYnVzX21lc3NhZ2VfZ2V0X2FyZ3MocmVwbHksICZlcnJvciwgREJVU19UWVBFX0lOVDMyLCAmc3RhdGUsIERCVVNfVFlQRV9JTlZBTElEKSB8fAorICAgICAgICBkYnVzX2Vycm9yX2lzX3NldCAoJmVycm9yKSkgeworICAgICAgICByID0gYXZhaGlfY2xpZW50X3NldF9lcnJubyhjbGllbnQsIEFWQUhJX0VSUl9EQlVTX0VSUk9SKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGRidXNfbWVzc2FnZV91bnJlZihtZXNzYWdlKTsKKyAgICBkYnVzX21lc3NhZ2VfdW5yZWYocmVwbHkpOworCisgICAgcmV0dXJuIHN0YXRlOworCitmYWlsOgorICAgIGlmIChkYnVzX2Vycm9yX2lzX3NldCgmZXJyb3IpKSB7CisgICAgICAgIHIgPSBhdmFoaV9jbGllbnRfc2V0X2RidXNfZXJyb3IoY2xpZW50LCAmZXJyb3IpOworICAgICAgICBkYnVzX2Vycm9yX2ZyZWUoJmVycm9yKTsKKyAgICB9CisKKyAgICBpZiAobWVzc2FnZSkKKyAgICAgICAgZGJ1c19tZXNzYWdlX3VucmVmKG1lc3NhZ2UpOworCisgICAgaWYgKHJlcGx5KQorICAgICAgICBkYnVzX21lc3NhZ2VfdW5yZWYocmVwbHkpOworCisgICAgcmV0dXJuIHI7Cit9CisKK0F2YWhpRW50cnlHcm91cCogYXZhaGlfZW50cnlfZ3JvdXBfbmV3IChBdmFoaUNsaWVudCAqY2xpZW50LCBBdmFoaUVudHJ5R3JvdXBDYWxsYmFjayBjYWxsYmFjaywgdm9pZCAqdXNlcmRhdGEpIHsKKyAgICBBdmFoaUVudHJ5R3JvdXAgKmdyb3VwID0gTlVMTDsKKyAgICBEQnVzTWVzc2FnZSAqbWVzc2FnZSA9IE5VTEwsICpyZXBseSA9IE5VTEw7CisgICAgREJ1c0Vycm9yIGVycm9yOworICAgIGNoYXIgKnBhdGg7CisgICAgaW50IHN0YXRlOworCisgICAgYXNzZXJ0KGNsaWVudCk7CisKKyAgICBkYnVzX2Vycm9yX2luaXQgKCZlcnJvcik7CisKKyAgICBpZiAoIWF2YWhpX2NsaWVudF9pc19jb25uZWN0ZWQoY2xpZW50KSkgeworICAgICAgICBhdmFoaV9jbGllbnRfc2V0X2Vycm5vKGNsaWVudCwgQVZBSElfRVJSX0JBRF9TVEFURSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBpZiAoIShncm91cCA9IGF2YWhpX25ldyhBdmFoaUVudHJ5R3JvdXAsIDEpKSkgeworICAgICAgICBhdmFoaV9jbGllbnRfc2V0X2Vycm5vKGNsaWVudCwgQVZBSElfRVJSX05PX01FTU9SWSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBncm91cC0+Y2xpZW50ID0gY2xpZW50OworICAgIGdyb3VwLT5jYWxsYmFjayA9IGNhbGxiYWNrOworICAgIGdyb3VwLT51c2VyZGF0YSA9IHVzZXJkYXRhOworICAgIGdyb3VwLT5zdGF0ZV92YWxpZCA9IDA7CisgICAgZ3JvdXAtPnBhdGggPSBOVUxMOworICAgIEFWQUhJX0xMSVNUX1BSRVBFTkQoQXZhaGlFbnRyeUdyb3VwLCBncm91cHMsIGNsaWVudC0+Z3JvdXBzLCBncm91cCk7CisKKyAgICBpZiAoIShtZXNzYWdlID0gZGJ1c19tZXNzYWdlX25ld19tZXRob2RfY2FsbCgKKyAgICAgICAgICAgICAgQVZBSElfREJVU19OQU1FLAorICAgICAgICAgICAgICBBVkFISV9EQlVTX1BBVEhfU0VSVkVSLAorICAgICAgICAgICAgICBBVkFISV9EQlVTX0lOVEVSRkFDRV9TRVJWRVIsCisgICAgICAgICAgICAgICJFbnRyeUdyb3VwTmV3IikpKSB7CisgICAgICAgIGF2YWhpX2NsaWVudF9zZXRfZXJybm8oY2xpZW50LCBBVkFISV9FUlJfTk9fTUVNT1JZKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGlmICghKHJlcGx5ID0gZGJ1c19jb25uZWN0aW9uX3NlbmRfd2l0aF9yZXBseV9hbmRfYmxvY2sgKGNsaWVudC0+YnVzLCBtZXNzYWdlLCAtMSwgJmVycm9yKSkgfHwKKyAgICAgICAgZGJ1c19lcnJvcl9pc19zZXQgKCZlcnJvcikpIHsKKyAgICAgICAgYXZhaGlfY2xpZW50X3NldF9lcnJubyAoY2xpZW50LCBBVkFISV9FUlJfREJVU19FUlJPUik7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBpZiAoIWRidXNfbWVzc2FnZV9nZXRfYXJncyhyZXBseSwgJmVycm9yLCBEQlVTX1RZUEVfT0JKRUNUX1BBVEgsICZwYXRoLCBEQlVTX1RZUEVfSU5WQUxJRCkgfHwKKyAgICAgICAgZGJ1c19lcnJvcl9pc19zZXQgKCZlcnJvcikpIHsKKyAgICAgICAgYXZhaGlfY2xpZW50X3NldF9lcnJubyAoY2xpZW50LCBBVkFISV9FUlJfREJVU19FUlJPUik7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBpZiAoIShncm91cC0+cGF0aCA9IGF2YWhpX3N0cmR1cCAocGF0aCkpKSB7CisKKyAgICAgICAgLyogRklYTUU6IFdlIGRvbid0IHJlbW92ZSB0aGUgb2JqZWN0IG9uIHRoZSBzZXJ2ZXIgc2lkZSAqLworCisgICAgICAgIGF2YWhpX2NsaWVudF9zZXRfZXJybm8oY2xpZW50LCBBVkFISV9FUlJfTk9fTUVNT1JZKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGlmICgoc3RhdGUgPSByZXRyaWV2ZV9zdGF0ZShncm91cCkpIDwgMCkgeworICAgICAgICBhdmFoaV9jbGllbnRfc2V0X2Vycm5vKGNsaWVudCwgc3RhdGUpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgYXZhaGlfZW50cnlfZ3JvdXBfc2V0X3N0YXRlKGdyb3VwLCAoQXZhaGlFbnRyeUdyb3VwU3RhdGUpIHN0YXRlKTsKKworICAgIGRidXNfbWVzc2FnZV91bnJlZihtZXNzYWdlKTsKKyAgICBkYnVzX21lc3NhZ2VfdW5yZWYocmVwbHkpOworCisgICAgcmV0dXJuIGdyb3VwOworCitmYWlsOgorICAgIGlmIChkYnVzX2Vycm9yX2lzX3NldCgmZXJyb3IpKSB7CisgICAgICAgIGF2YWhpX2NsaWVudF9zZXRfZGJ1c19lcnJvcihjbGllbnQsICZlcnJvcik7CisgICAgICAgIGRidXNfZXJyb3JfZnJlZSgmZXJyb3IpOworICAgIH0KKworICAgIGlmIChncm91cCkKKyAgICAgICAgYXZhaGlfZW50cnlfZ3JvdXBfZnJlZShncm91cCk7CisKKyAgICBpZiAobWVzc2FnZSkKKyAgICAgICAgZGJ1c19tZXNzYWdlX3VucmVmKG1lc3NhZ2UpOworCisgICAgaWYgKHJlcGx5KQorICAgICAgICBkYnVzX21lc3NhZ2VfdW5yZWYocmVwbHkpOworCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgZW50cnlfZ3JvdXBfc2ltcGxlX21ldGhvZF9jYWxsKEF2YWhpRW50cnlHcm91cCAqZ3JvdXAsIGNvbnN0IGNoYXIgKm1ldGhvZCkgeworICAgIERCdXNNZXNzYWdlICptZXNzYWdlID0gTlVMTCwgKnJlcGx5ID0gTlVMTDsKKyAgICBEQnVzRXJyb3IgZXJyb3I7CisgICAgaW50IHIgPSBBVkFISV9PSzsKKyAgICBBdmFoaUNsaWVudCAqY2xpZW50OworCisgICAgZGJ1c19lcnJvcl9pbml0KCZlcnJvcik7CisKKyAgICBhc3NlcnQoZ3JvdXApOworICAgIGNsaWVudCA9IGdyb3VwLT5jbGllbnQ7CisKKyAgICBpZiAoIShtZXNzYWdlID0gZGJ1c19tZXNzYWdlX25ld19tZXRob2RfY2FsbChBVkFISV9EQlVTX05BTUUsIGdyb3VwLT5wYXRoLCBBVkFISV9EQlVTX0lOVEVSRkFDRV9FTlRSWV9HUk9VUCwgbWV0aG9kKSkpIHsKKyAgICAgICAgciA9IGF2YWhpX2NsaWVudF9zZXRfZXJybm8oY2xpZW50LCBBVkFISV9FUlJfTk9fTUVNT1JZKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGlmICghKHJlcGx5ID0gZGJ1c19jb25uZWN0aW9uX3NlbmRfd2l0aF9yZXBseV9hbmRfYmxvY2soY2xpZW50LT5idXMsIG1lc3NhZ2UsIC0xLCAmZXJyb3IpKSB8fAorICAgICAgICBkYnVzX2Vycm9yX2lzX3NldCAoJmVycm9yKSkgeworICAgICAgICByID0gYXZhaGlfY2xpZW50X3NldF9lcnJubyhjbGllbnQsIEFWQUhJX0VSUl9EQlVTX0VSUk9SKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGlmICghZGJ1c19tZXNzYWdlX2dldF9hcmdzKHJlcGx5LCAmZXJyb3IsIERCVVNfVFlQRV9JTlZBTElEKSB8fAorICAgICAgICBkYnVzX2Vycm9yX2lzX3NldCAoJmVycm9yKSkgeworICAgICAgICByID0gYXZhaGlfY2xpZW50X3NldF9lcnJubyhjbGllbnQsIEFWQUhJX0VSUl9EQlVTX0VSUk9SKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGRidXNfbWVzc2FnZV91bnJlZihtZXNzYWdlKTsKKyAgICBkYnVzX21lc3NhZ2VfdW5yZWYocmVwbHkpOworCisgICAgcmV0dXJuIEFWQUhJX09LOworCitmYWlsOgorICAgIGlmIChkYnVzX2Vycm9yX2lzX3NldCgmZXJyb3IpKSB7CisgICAgICAgIHIgPSBhdmFoaV9jbGllbnRfc2V0X2RidXNfZXJyb3IoY2xpZW50LCAmZXJyb3IpOworICAgICAgICBkYnVzX2Vycm9yX2ZyZWUoJmVycm9yKTsKKyAgICB9CisKKyAgICBpZiAobWVzc2FnZSkKKyAgICAgICAgZGJ1c19tZXNzYWdlX3VucmVmKG1lc3NhZ2UpOworCisgICAgaWYgKHJlcGx5KQorICAgICAgICBkYnVzX21lc3NhZ2VfdW5yZWYocmVwbHkpOworCisgICAgcmV0dXJuIHI7Cit9CisKK2ludCBhdmFoaV9lbnRyeV9ncm91cF9mcmVlKEF2YWhpRW50cnlHcm91cCAqZ3JvdXApIHsKKyAgICBBdmFoaUNsaWVudCAqY2xpZW50ID0gZ3JvdXAtPmNsaWVudDsKKyAgICBpbnQgciA9IEFWQUhJX09LOworCisgICAgYXNzZXJ0KGdyb3VwKTsKKworICAgIGlmIChncm91cC0+cGF0aCAmJiBhdmFoaV9jbGllbnRfaXNfY29ubmVjdGVkKGNsaWVudCkpCisgICAgICAgIHIgPSBlbnRyeV9ncm91cF9zaW1wbGVfbWV0aG9kX2NhbGwoZ3JvdXAsICJGcmVlIik7CisKKyAgICBBVkFISV9MTElTVF9SRU1PVkUoQXZhaGlFbnRyeUdyb3VwLCBncm91cHMsIGNsaWVudC0+Z3JvdXBzLCBncm91cCk7CisKKyAgICBhdmFoaV9mcmVlKGdyb3VwLT5wYXRoKTsKKyAgICBhdmFoaV9mcmVlKGdyb3VwKTsKKworICAgIHJldHVybiByOworfQorCitpbnQgYXZhaGlfZW50cnlfZ3JvdXBfY29tbWl0KEF2YWhpRW50cnlHcm91cCAqZ3JvdXApIHsKKyAgICBpbnQgcmV0OworICAgIGFzc2VydChncm91cCk7CisKKyAgICBpZiAoIWdyb3VwLT5wYXRoIHx8ICFhdmFoaV9jbGllbnRfaXNfY29ubmVjdGVkKGdyb3VwLT5jbGllbnQpKQorICAgICAgICByZXR1cm4gYXZhaGlfY2xpZW50X3NldF9lcnJubyhncm91cC0+Y2xpZW50LCBBVkFISV9FUlJfQkFEX1NUQVRFKTsKKworICAgIGlmICgocmV0ID0gZW50cnlfZ3JvdXBfc2ltcGxlX21ldGhvZF9jYWxsKGdyb3VwLCAiQ29tbWl0IikpIDwgMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIGdyb3VwLT5zdGF0ZV92YWxpZCA9IDA7CisgICAgcmV0dXJuIHJldDsKK30KKworaW50IGF2YWhpX2VudHJ5X2dyb3VwX3Jlc2V0KEF2YWhpRW50cnlHcm91cCAqZ3JvdXApIHsKKyAgICBpbnQgcmV0OworICAgIGFzc2VydChncm91cCk7CisKKyAgICBpZiAoIWdyb3VwLT5wYXRoIHx8ICFhdmFoaV9jbGllbnRfaXNfY29ubmVjdGVkKGdyb3VwLT5jbGllbnQpKQorICAgICAgICByZXR1cm4gYXZhaGlfY2xpZW50X3NldF9lcnJubyhncm91cC0+Y2xpZW50LCBBVkFISV9FUlJfQkFEX1NUQVRFKTsKKworICAgIGlmICgocmV0ID0gZW50cnlfZ3JvdXBfc2ltcGxlX21ldGhvZF9jYWxsKGdyb3VwLCAiUmVzZXQiKSkgPCAwKQorICAgICAgICByZXR1cm4gcmV0OworCisgICAgZ3JvdXAtPnN0YXRlX3ZhbGlkID0gMDsKKyAgICByZXR1cm4gcmV0OworfQorCitpbnQgYXZhaGlfZW50cnlfZ3JvdXBfZ2V0X3N0YXRlIChBdmFoaUVudHJ5R3JvdXAgKmdyb3VwKSB7CisgICAgYXNzZXJ0IChncm91cCk7CisKKyAgICBpZiAoZ3JvdXAtPnN0YXRlX3ZhbGlkKQorICAgICAgICByZXR1cm4gZ3JvdXAtPnN0YXRlOworCisgICAgcmV0dXJuIHJldHJpZXZlX3N0YXRlKGdyb3VwKTsKK30KKworQXZhaGlDbGllbnQqIGF2YWhpX2VudHJ5X2dyb3VwX2dldF9jbGllbnQgKEF2YWhpRW50cnlHcm91cCAqZ3JvdXApIHsKKyAgICBhc3NlcnQoZ3JvdXApOworCisgICAgcmV0dXJuIGdyb3VwLT5jbGllbnQ7Cit9CisKK2ludCBhdmFoaV9lbnRyeV9ncm91cF9pc19lbXB0eSAoQXZhaGlFbnRyeUdyb3VwICpncm91cCkgeworICAgIERCdXNNZXNzYWdlICptZXNzYWdlID0gTlVMTCwgKnJlcGx5ID0gTlVMTDsKKyAgICBEQnVzRXJyb3IgZXJyb3I7CisgICAgaW50IHIgPSBBVkFISV9PSzsKKyAgICBpbnQgYjsKKyAgICBBdmFoaUNsaWVudCAqY2xpZW50OworCisgICAgYXNzZXJ0KGdyb3VwKTsKKyAgICBjbGllbnQgPSBncm91cC0+Y2xpZW50OworCisgICAgaWYgKCFncm91cC0+cGF0aCB8fCAhYXZhaGlfY2xpZW50X2lzX2Nvbm5lY3RlZChncm91cC0+Y2xpZW50KSkKKyAgICAgICAgcmV0dXJuIGF2YWhpX2NsaWVudF9zZXRfZXJybm8oZ3JvdXAtPmNsaWVudCwgQVZBSElfRVJSX0JBRF9TVEFURSk7CisKKyAgICBkYnVzX2Vycm9yX2luaXQoJmVycm9yKTsKKworICAgIGlmICghKG1lc3NhZ2UgPSBkYnVzX21lc3NhZ2VfbmV3X21ldGhvZF9jYWxsKEFWQUhJX0RCVVNfTkFNRSwgZ3JvdXAtPnBhdGgsIEFWQUhJX0RCVVNfSU5URVJGQUNFX0VOVFJZX0dST1VQLCAiSXNFbXB0eSIpKSkgeworICAgICAgICByID0gYXZhaGlfY2xpZW50X3NldF9lcnJubyhjbGllbnQsIEFWQUhJX0VSUl9OT19NRU1PUlkpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKCEocmVwbHkgPSBkYnVzX2Nvbm5lY3Rpb25fc2VuZF93aXRoX3JlcGx5X2FuZF9ibG9jayhjbGllbnQtPmJ1cywgbWVzc2FnZSwgLTEsICZlcnJvcikpIHx8CisgICAgICAgIGRidXNfZXJyb3JfaXNfc2V0ICgmZXJyb3IpKSB7CisgICAgICAgIHIgPSBhdmFoaV9jbGllbnRfc2V0X2Vycm5vKGNsaWVudCwgQVZBSElfRVJSX0RCVVNfRVJST1IpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKCFkYnVzX21lc3NhZ2VfZ2V0X2FyZ3MocmVwbHksICZlcnJvciwgREJVU19UWVBFX0JPT0xFQU4sICZiLCBEQlVTX1RZUEVfSU5WQUxJRCkgfHwKKyAgICAgICAgZGJ1c19lcnJvcl9pc19zZXQgKCZlcnJvcikpIHsKKyAgICAgICAgciA9IGF2YWhpX2NsaWVudF9zZXRfZXJybm8oY2xpZW50LCBBVkFISV9FUlJfREJVU19FUlJPUik7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBkYnVzX21lc3NhZ2VfdW5yZWYobWVzc2FnZSk7CisgICAgZGJ1c19tZXNzYWdlX3VucmVmKHJlcGx5KTsKKworICAgIHJldHVybiAhIWI7CisKK2ZhaWw6CisgICAgaWYgKGRidXNfZXJyb3JfaXNfc2V0KCZlcnJvcikpIHsKKyAgICAgICAgciA9IGF2YWhpX2NsaWVudF9zZXRfZGJ1c19lcnJvcihjbGllbnQsICZlcnJvcik7CisgICAgICAgIGRidXNfZXJyb3JfZnJlZSgmZXJyb3IpOworICAgIH0KKworICAgIGlmIChtZXNzYWdlKQorICAgICAgICBkYnVzX21lc3NhZ2VfdW5yZWYobWVzc2FnZSk7CisKKyAgICBpZiAocmVwbHkpCisgICAgICAgIGRidXNfbWVzc2FnZV91bnJlZihyZXBseSk7CisKKyAgICByZXR1cm4gcjsKK30KKworc3RhdGljIGludCBhcHBlbmRfcmRhdGEoREJ1c01lc3NhZ2UgKm1lc3NhZ2UsIGNvbnN0IHZvaWQgKnJkYXRhLCBzaXplX3Qgc2l6ZSkgeworICAgIERCdXNNZXNzYWdlSXRlciBpdGVyLCBzdWI7CisKKyAgICBhc3NlcnQobWVzc2FnZSk7CisKKyAgICBkYnVzX21lc3NhZ2VfaXRlcl9pbml0X2FwcGVuZChtZXNzYWdlLCAmaXRlcik7CisKKyAgICBpZiAoIShkYnVzX21lc3NhZ2VfaXRlcl9vcGVuX2NvbnRhaW5lcigmaXRlciwgREJVU19UWVBFX0FSUkFZLCBEQlVTX1RZUEVfQllURV9BU19TVFJJTkcsICZzdWIpKSB8fAorICAgICAgICAhKGRidXNfbWVzc2FnZV9pdGVyX2FwcGVuZF9maXhlZF9hcnJheSgmc3ViLCBEQlVTX1RZUEVfQllURSwgJnJkYXRhLCBzaXplKSkgfHwKKyAgICAgICAgIShkYnVzX21lc3NhZ2VfaXRlcl9jbG9zZV9jb250YWluZXIoJml0ZXIsICZzdWIpKSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXBwZW5kX3N0cmluZ19saXN0KERCdXNNZXNzYWdlICptZXNzYWdlLCBBdmFoaVN0cmluZ0xpc3QgKnR4dCkgeworICAgIERCdXNNZXNzYWdlSXRlciBpdGVyLCBzdWI7CisgICAgaW50IHIgPSAtMTsKKyAgICBBdmFoaVN0cmluZ0xpc3QgKnA7CisKKyAgICBhc3NlcnQobWVzc2FnZSk7CisKKyAgICBkYnVzX21lc3NhZ2VfaXRlcl9pbml0X2FwcGVuZChtZXNzYWdlLCAmaXRlcik7CisKKyAgICAvKiBSZXZlcnNlIHRoZSBzdHJpbmcgbGlzdCwgc28gdGhhdCB3ZSBjYW4gcGFzcyBpdCBpbi1vcmRlciB0byB0aGUgc2VydmVyICovCisgICAgdHh0ID0gYXZhaGlfc3RyaW5nX2xpc3RfcmV2ZXJzZSh0eHQpOworCisgICAgaWYgKCFkYnVzX21lc3NhZ2VfaXRlcl9vcGVuX2NvbnRhaW5lcigmaXRlciwgREJVU19UWVBFX0FSUkFZLCAiYXkiLCAmc3ViKSkKKyAgICAgICAgZ290byBmYWlsOworCisgICAgLyogQXNzZW1ibGUgdGhlIEF2YWhpU3RyaW5nTGlzdCBpbnRvIGFuIEFycmF5IG9mIEFycmF5IG9mIEJ5dGVzIHRvIHNlbmQgb3ZlciBkYnVzICovCisgICAgZm9yIChwID0gdHh0OyBwICE9IE5VTEw7IHAgPSBwLT5uZXh0KSB7CisgICAgICAgIERCdXNNZXNzYWdlSXRlciBzdWIyOworICAgICAgICBjb25zdCB1aW50OF90ICpkYXRhID0gcC0+dGV4dDsKKworICAgICAgICBpZiAoIShkYnVzX21lc3NhZ2VfaXRlcl9vcGVuX2NvbnRhaW5lcigmc3ViLCBEQlVTX1RZUEVfQVJSQVksICJ5IiwgJnN1YjIpKSB8fAorICAgICAgICAgICAgIShkYnVzX21lc3NhZ2VfaXRlcl9hcHBlbmRfZml4ZWRfYXJyYXkoJnN1YjIsIERCVVNfVFlQRV9CWVRFLCAmZGF0YSwgcC0+c2l6ZSkpIHx8CisgICAgICAgICAgICAhKGRidXNfbWVzc2FnZV9pdGVyX2Nsb3NlX2NvbnRhaW5lcigmc3ViLCAmc3ViMikpKQorICAgICAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGlmICghZGJ1c19tZXNzYWdlX2l0ZXJfY2xvc2VfY29udGFpbmVyKCZpdGVyLCAmc3ViKSkKKyAgICAgICAgZ290byBmYWlsOworCisgICAgciA9IDA7CisKK2ZhaWw6CisKKyAgICAvKiBSZXZlcnNlIHRoZSBzdHJpbmcgbGlzdCB0byB0aGUgb3JpZ2luYWwgc3RhdGUgKi8KKyAgICB0eHQgPSBhdmFoaV9zdHJpbmdfbGlzdF9yZXZlcnNlKHR4dCk7CisKKyAgICByZXR1cm4gcjsKK30KKworaW50IGF2YWhpX2VudHJ5X2dyb3VwX2FkZF9zZXJ2aWNlX3N0cmxzdCgKKyAgICBBdmFoaUVudHJ5R3JvdXAgKmdyb3VwLAorICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsCisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICBBdmFoaVB1Ymxpc2hGbGFncyBmbGFncywKKyAgICBjb25zdCBjaGFyICpuYW1lLAorICAgIGNvbnN0IGNoYXIgKnR5cGUsCisgICAgY29uc3QgY2hhciAqZG9tYWluLAorICAgIGNvbnN0IGNoYXIgKmhvc3QsCisgICAgdWludDE2X3QgcG9ydCwKKyAgICBBdmFoaVN0cmluZ0xpc3QgKnR4dCkgeworCisgICAgREJ1c01lc3NhZ2UgKm1lc3NhZ2UgPSBOVUxMLCAqcmVwbHkgPSBOVUxMOworICAgIGludCByID0gQVZBSElfT0s7CisgICAgREJ1c0Vycm9yIGVycm9yOworICAgIEF2YWhpQ2xpZW50ICpjbGllbnQ7CisgICAgaW50MzJfdCBpX2ludGVyZmFjZSwgaV9wcm90b2NvbDsKKyAgICB1aW50MzJfdCB1X2ZsYWdzOworCisgICAgYXNzZXJ0KGdyb3VwKTsKKyAgICBhc3NlcnQobmFtZSk7CisgICAgYXNzZXJ0KHR5cGUpOworCisgICAgY2xpZW50ID0gZ3JvdXAtPmNsaWVudDsKKworICAgIGlmICghZ3JvdXAtPnBhdGggfHwgIWF2YWhpX2NsaWVudF9pc19jb25uZWN0ZWQoZ3JvdXAtPmNsaWVudCkpCisgICAgICAgIHJldHVybiBhdmFoaV9jbGllbnRfc2V0X2Vycm5vKGdyb3VwLT5jbGllbnQsIEFWQUhJX0VSUl9CQURfU1RBVEUpOworCisgICAgaWYgKCFkb21haW4pCisgICAgICAgIGRvbWFpbiA9ICIiOworCisgICAgaWYgKCFob3N0KQorICAgICAgICBob3N0ID0gIiI7CisKKyAgICBkYnVzX2Vycm9yX2luaXQoJmVycm9yKTsKKworICAgIGlmICghKG1lc3NhZ2UgPSBkYnVzX21lc3NhZ2VfbmV3X21ldGhvZF9jYWxsIChBVkFISV9EQlVTX05BTUUsIGdyb3VwLT5wYXRoLCBBVkFISV9EQlVTX0lOVEVSRkFDRV9FTlRSWV9HUk9VUCwgIkFkZFNlcnZpY2UiKSkpIHsKKyAgICAgICAgciA9IGF2YWhpX2NsaWVudF9zZXRfZXJybm8oY2xpZW50LCBBVkFISV9FUlJfTk9fTUVNT1JZKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGlfaW50ZXJmYWNlID0gKGludDMyX3QpIGludGVyZmFjZTsKKyAgICBpX3Byb3RvY29sID0gKGludDMyX3QpIHByb3RvY29sOworICAgIHVfZmxhZ3MgPSAodWludDMyX3QpIGZsYWdzOworCisgICAgaWYgKCFkYnVzX21lc3NhZ2VfYXBwZW5kX2FyZ3MoCisgICAgICAgICAgICBtZXNzYWdlLAorICAgICAgICAgICAgREJVU19UWVBFX0lOVDMyLCAmaV9pbnRlcmZhY2UsCisgICAgICAgICAgICBEQlVTX1RZUEVfSU5UMzIsICZpX3Byb3RvY29sLAorICAgICAgICAgICAgREJVU19UWVBFX1VJTlQzMiwgJnVfZmxhZ3MsCisgICAgICAgICAgICBEQlVTX1RZUEVfU1RSSU5HLCAmbmFtZSwKKyAgICAgICAgICAgIERCVVNfVFlQRV9TVFJJTkcsICZ0eXBlLAorICAgICAgICAgICAgREJVU19UWVBFX1NUUklORywgJmRvbWFpbiwKKyAgICAgICAgICAgIERCVVNfVFlQRV9TVFJJTkcsICZob3N0LAorICAgICAgICAgICAgREJVU19UWVBFX1VJTlQxNiwgJnBvcnQsCisgICAgICAgICAgICBEQlVTX1RZUEVfSU5WQUxJRCkgfHwKKyAgICAgICAgYXBwZW5kX3N0cmluZ19saXN0KG1lc3NhZ2UsIHR4dCkgPCAwKSB7CisgICAgICAgIHIgPSBhdmFoaV9jbGllbnRfc2V0X2Vycm5vKGdyb3VwLT5jbGllbnQsIEFWQUhJX0VSUl9OT19NRU1PUlkpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKCEocmVwbHkgPSBkYnVzX2Nvbm5lY3Rpb25fc2VuZF93aXRoX3JlcGx5X2FuZF9ibG9jayhjbGllbnQtPmJ1cywgbWVzc2FnZSwgLTEsICZlcnJvcikpIHx8CisgICAgICAgIGRidXNfZXJyb3JfaXNfc2V0ICgmZXJyb3IpKSB7CisgICAgICAgIHIgPSBhdmFoaV9jbGllbnRfc2V0X2Vycm5vKGNsaWVudCwgQVZBSElfRVJSX0RCVVNfRVJST1IpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKCFkYnVzX21lc3NhZ2VfZ2V0X2FyZ3MocmVwbHksICZlcnJvciwgREJVU19UWVBFX0lOVkFMSUQpIHx8CisgICAgICAgIGRidXNfZXJyb3JfaXNfc2V0ICgmZXJyb3IpKSB7CisgICAgICAgIHIgPSBhdmFoaV9jbGllbnRfc2V0X2Vycm5vKGNsaWVudCwgQVZBSElfRVJSX0RCVVNfRVJST1IpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgZGJ1c19tZXNzYWdlX3VucmVmKG1lc3NhZ2UpOworICAgIGRidXNfbWVzc2FnZV91bnJlZihyZXBseSk7CisKKyAgICByZXR1cm4gQVZBSElfT0s7CisKK2ZhaWw6CisKKyAgICBpZiAoZGJ1c19lcnJvcl9pc19zZXQoJmVycm9yKSkgeworICAgICAgICByID0gYXZhaGlfY2xpZW50X3NldF9kYnVzX2Vycm9yKGNsaWVudCwgJmVycm9yKTsKKyAgICAgICAgZGJ1c19lcnJvcl9mcmVlKCZlcnJvcik7CisgICAgfQorCisgICAgaWYgKG1lc3NhZ2UpCisgICAgICAgIGRidXNfbWVzc2FnZV91bnJlZihtZXNzYWdlKTsKKworICAgIGlmIChyZXBseSkKKyAgICAgICAgZGJ1c19tZXNzYWdlX3VucmVmKHJlcGx5KTsKKworICAgIHJldHVybiByOworfQorCitpbnQgYXZhaGlfZW50cnlfZ3JvdXBfYWRkX3NlcnZpY2UoCisgICAgQXZhaGlFbnRyeUdyb3VwICpncm91cCwKKyAgICBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLAorICAgIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsCisgICAgQXZhaGlQdWJsaXNoRmxhZ3MgZmxhZ3MsCisgICAgY29uc3QgY2hhciAqbmFtZSwKKyAgICBjb25zdCBjaGFyICp0eXBlLAorICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwKKyAgICBjb25zdCBjaGFyICpob3N0LAorICAgIHVpbnQxNl90IHBvcnQsCisgICAgLi4uKSB7CisKKyAgICB2YV9saXN0IHZhOworICAgIGludCByOworICAgIEF2YWhpU3RyaW5nTGlzdCAqdHh0OworCisgICAgYXNzZXJ0KGdyb3VwKTsKKworICAgIHZhX3N0YXJ0KHZhLCBwb3J0KTsKKyAgICB0eHQgPSBhdmFoaV9zdHJpbmdfbGlzdF9uZXdfdmEodmEpOworICAgIHIgPSBhdmFoaV9lbnRyeV9ncm91cF9hZGRfc2VydmljZV9zdHJsc3QoZ3JvdXAsIGludGVyZmFjZSwgcHJvdG9jb2wsIGZsYWdzLCBuYW1lLCB0eXBlLCBkb21haW4sIGhvc3QsIHBvcnQsIHR4dCk7CisgICAgYXZhaGlfc3RyaW5nX2xpc3RfZnJlZSh0eHQpOworICAgIHZhX2VuZCh2YSk7CisgICAgcmV0dXJuIHI7Cit9CisKK2ludCBhdmFoaV9lbnRyeV9ncm91cF9hZGRfc2VydmljZV9zdWJ0eXBlKAorICAgIEF2YWhpRW50cnlHcm91cCAqZ3JvdXAsCisgICAgQXZhaGlJZkluZGV4IGludGVyZmFjZSwKKyAgICBBdmFoaVByb3RvY29sIHByb3RvY29sLAorICAgIEF2YWhpUHVibGlzaEZsYWdzIGZsYWdzLAorICAgIGNvbnN0IGNoYXIgKm5hbWUsCisgICAgY29uc3QgY2hhciAqdHlwZSwKKyAgICBjb25zdCBjaGFyICpkb21haW4sCisgICAgY29uc3QgY2hhciAqc3VidHlwZSkgeworCisgICAgREJ1c01lc3NhZ2UgKm1lc3NhZ2UgPSBOVUxMLCAqcmVwbHkgPSBOVUxMOworICAgIGludCByID0gQVZBSElfT0s7CisgICAgREJ1c0Vycm9yIGVycm9yOworICAgIEF2YWhpQ2xpZW50ICpjbGllbnQ7CisgICAgaW50MzJfdCBpX2ludGVyZmFjZSwgaV9wcm90b2NvbDsKKyAgICB1aW50MzJfdCB1X2ZsYWdzOworCisgICAgYXNzZXJ0KGdyb3VwKTsKKyAgICBhc3NlcnQobmFtZSk7CisgICAgYXNzZXJ0KHR5cGUpOworICAgIGFzc2VydChzdWJ0eXBlKTsKKworICAgIGNsaWVudCA9IGdyb3VwLT5jbGllbnQ7CisKKyAgICBpZiAoIWdyb3VwLT5wYXRoIHx8ICFhdmFoaV9jbGllbnRfaXNfY29ubmVjdGVkKGdyb3VwLT5jbGllbnQpKQorICAgICAgICByZXR1cm4gYXZhaGlfY2xpZW50X3NldF9lcnJubyhncm91cC0+Y2xpZW50LCBBVkFISV9FUlJfQkFEX1NUQVRFKTsKKworICAgIGlmICghZG9tYWluKQorICAgICAgICBkb21haW4gPSAiIjsKKworICAgIGRidXNfZXJyb3JfaW5pdCgmZXJyb3IpOworCisgICAgaWYgKCEobWVzc2FnZSA9IGRidXNfbWVzc2FnZV9uZXdfbWV0aG9kX2NhbGwgKEFWQUhJX0RCVVNfTkFNRSwgZ3JvdXAtPnBhdGgsIEFWQUhJX0RCVVNfSU5URVJGQUNFX0VOVFJZX0dST1VQLCAiQWRkU2VydmljZVN1YnR5cGUiKSkpIHsKKyAgICAgICAgciA9IGF2YWhpX2NsaWVudF9zZXRfZXJybm8oY2xpZW50LCBBVkFISV9FUlJfTk9fTUVNT1JZKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGlfaW50ZXJmYWNlID0gKGludDMyX3QpIGludGVyZmFjZTsKKyAgICBpX3Byb3RvY29sID0gKGludDMyX3QpIHByb3RvY29sOworICAgIHVfZmxhZ3MgPSAodWludDMyX3QpIGZsYWdzOworCisgICAgaWYgKCFkYnVzX21lc3NhZ2VfYXBwZW5kX2FyZ3MoCisgICAgICAgICAgICBtZXNzYWdlLAorICAgICAgICAgICAgREJVU19UWVBFX0lOVDMyLCAmaV9pbnRlcmZhY2UsCisgICAgICAgICAgICBEQlVTX1RZUEVfSU5UMzIsICZpX3Byb3RvY29sLAorICAgICAgICAgICAgREJVU19UWVBFX1VJTlQzMiwgJnVfZmxhZ3MsCisgICAgICAgICAgICBEQlVTX1RZUEVfU1RSSU5HLCAmbmFtZSwKKyAgICAgICAgICAgIERCVVNfVFlQRV9TVFJJTkcsICZ0eXBlLAorICAgICAgICAgICAgREJVU19UWVBFX1NUUklORywgJmRvbWFpbiwKKyAgICAgICAgICAgIERCVVNfVFlQRV9TVFJJTkcsICZzdWJ0eXBlLAorICAgICAgICAgICAgREJVU19UWVBFX0lOVkFMSUQpKSB7CisgICAgICAgIHIgPSBhdmFoaV9jbGllbnRfc2V0X2Vycm5vKGdyb3VwLT5jbGllbnQsIEFWQUhJX0VSUl9OT19NRU1PUlkpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKCEocmVwbHkgPSBkYnVzX2Nvbm5lY3Rpb25fc2VuZF93aXRoX3JlcGx5X2FuZF9ibG9jayhjbGllbnQtPmJ1cywgbWVzc2FnZSwgLTEsICZlcnJvcikpIHx8CisgICAgICAgIGRidXNfZXJyb3JfaXNfc2V0ICgmZXJyb3IpKSB7CisgICAgICAgIHIgPSBhdmFoaV9jbGllbnRfc2V0X2Vycm5vKGNsaWVudCwgQVZBSElfRVJSX0RCVVNfRVJST1IpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKCFkYnVzX21lc3NhZ2VfZ2V0X2FyZ3MocmVwbHksICZlcnJvciwgREJVU19UWVBFX0lOVkFMSUQpIHx8CisgICAgICAgIGRidXNfZXJyb3JfaXNfc2V0ICgmZXJyb3IpKSB7CisgICAgICAgIHIgPSBhdmFoaV9jbGllbnRfc2V0X2Vycm5vKGNsaWVudCwgQVZBSElfRVJSX0RCVVNfRVJST1IpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgZGJ1c19tZXNzYWdlX3VucmVmKG1lc3NhZ2UpOworICAgIGRidXNfbWVzc2FnZV91bnJlZihyZXBseSk7CisKKyAgICByZXR1cm4gQVZBSElfT0s7CisKK2ZhaWw6CisKKyAgICBpZiAoZGJ1c19lcnJvcl9pc19zZXQoJmVycm9yKSkgeworICAgICAgICByID0gYXZhaGlfY2xpZW50X3NldF9kYnVzX2Vycm9yKGNsaWVudCwgJmVycm9yKTsKKyAgICAgICAgZGJ1c19lcnJvcl9mcmVlKCZlcnJvcik7CisgICAgfQorCisgICAgaWYgKG1lc3NhZ2UpCisgICAgICAgIGRidXNfbWVzc2FnZV91bnJlZihtZXNzYWdlKTsKKworICAgIGlmIChyZXBseSkKKyAgICAgICAgZGJ1c19tZXNzYWdlX3VucmVmKHJlcGx5KTsKKworICAgIHJldHVybiByOworCit9CisKK2ludCBhdmFoaV9lbnRyeV9ncm91cF91cGRhdGVfc2VydmljZV90eHQoCisgICAgQXZhaGlFbnRyeUdyb3VwICpncm91cCwKKyAgICBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLAorICAgIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsCisgICAgQXZhaGlQdWJsaXNoRmxhZ3MgZmxhZ3MsCisgICAgY29uc3QgY2hhciAqbmFtZSwKKyAgICBjb25zdCBjaGFyICp0eXBlLAorICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwKKyAgICAuLi4pIHsKKworICAgIHZhX2xpc3QgdmE7CisgICAgaW50IHI7CisgICAgQXZhaGlTdHJpbmdMaXN0ICp0eHQ7CisKKyAgICB2YV9zdGFydCh2YSwgZG9tYWluKTsKKyAgICB0eHQgPSBhdmFoaV9zdHJpbmdfbGlzdF9uZXdfdmEodmEpOworICAgIHIgPSBhdmFoaV9lbnRyeV9ncm91cF91cGRhdGVfc2VydmljZV90eHRfc3RybHN0KGdyb3VwLCBpbnRlcmZhY2UsIHByb3RvY29sLCBmbGFncywgbmFtZSwgdHlwZSwgZG9tYWluLCB0eHQpOworICAgIGF2YWhpX3N0cmluZ19saXN0X2ZyZWUodHh0KTsKKyAgICB2YV9lbmQodmEpOworICAgIHJldHVybiByOworfQorCitpbnQgYXZhaGlfZW50cnlfZ3JvdXBfdXBkYXRlX3NlcnZpY2VfdHh0X3N0cmxzdCgKKyAgICBBdmFoaUVudHJ5R3JvdXAgKmdyb3VwLAorICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsCisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICBBdmFoaVB1Ymxpc2hGbGFncyBmbGFncywKKyAgICBjb25zdCBjaGFyICpuYW1lLAorICAgIGNvbnN0IGNoYXIgKnR5cGUsCisgICAgY29uc3QgY2hhciAqZG9tYWluLAorICAgIEF2YWhpU3RyaW5nTGlzdCAqdHh0KSB7CisKKyAgICBEQnVzTWVzc2FnZSAqbWVzc2FnZSA9IE5VTEwsICpyZXBseSA9IE5VTEw7CisgICAgaW50IHIgPSBBVkFISV9PSzsKKyAgICBEQnVzRXJyb3IgZXJyb3I7CisgICAgQXZhaGlDbGllbnQgKmNsaWVudDsKKyAgICBpbnQzMl90IGlfaW50ZXJmYWNlLCBpX3Byb3RvY29sOworICAgIHVpbnQzMl90IHVfZmxhZ3M7CisKKyAgICBhc3NlcnQoZ3JvdXApOworICAgIGFzc2VydChuYW1lKTsKKyAgICBhc3NlcnQodHlwZSk7CisKKyAgICBjbGllbnQgPSBncm91cC0+Y2xpZW50OworCisgICAgaWYgKCFncm91cC0+cGF0aCB8fCAhYXZhaGlfY2xpZW50X2lzX2Nvbm5lY3RlZChncm91cC0+Y2xpZW50KSkKKyAgICAgICAgcmV0dXJuIGF2YWhpX2NsaWVudF9zZXRfZXJybm8oZ3JvdXAtPmNsaWVudCwgQVZBSElfRVJSX0JBRF9TVEFURSk7CisKKyAgICBpZiAoIWRvbWFpbikKKyAgICAgICAgZG9tYWluID0gIiI7CisKKyAgICBkYnVzX2Vycm9yX2luaXQoJmVycm9yKTsKKworICAgIGlmICghKG1lc3NhZ2UgPSBkYnVzX21lc3NhZ2VfbmV3X21ldGhvZF9jYWxsIChBVkFISV9EQlVTX05BTUUsIGdyb3VwLT5wYXRoLCBBVkFISV9EQlVTX0lOVEVSRkFDRV9FTlRSWV9HUk9VUCwgIlVwZGF0ZVNlcnZpY2VUeHQiKSkpIHsKKyAgICAgICAgciA9IGF2YWhpX2NsaWVudF9zZXRfZXJybm8oY2xpZW50LCBBVkFISV9FUlJfTk9fTUVNT1JZKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGlfaW50ZXJmYWNlID0gKGludDMyX3QpIGludGVyZmFjZTsKKyAgICBpX3Byb3RvY29sID0gKGludDMyX3QpIHByb3RvY29sOworICAgIHVfZmxhZ3MgPSAodWludDMyX3QpIGZsYWdzOworCisgICAgaWYgKCFkYnVzX21lc3NhZ2VfYXBwZW5kX2FyZ3MoCisgICAgICAgICAgICBtZXNzYWdlLAorICAgICAgICAgICAgREJVU19UWVBFX0lOVDMyLCAmaV9pbnRlcmZhY2UsCisgICAgICAgICAgICBEQlVTX1RZUEVfSU5UMzIsICZpX3Byb3RvY29sLAorICAgICAgICAgICAgREJVU19UWVBFX1VJTlQzMiwgJnVfZmxhZ3MsCisgICAgICAgICAgICBEQlVTX1RZUEVfU1RSSU5HLCAmbmFtZSwKKyAgICAgICAgICAgIERCVVNfVFlQRV9TVFJJTkcsICZ0eXBlLAorICAgICAgICAgICAgREJVU19UWVBFX1NUUklORywgJmRvbWFpbiwKKyAgICAgICAgICAgIERCVVNfVFlQRV9JTlZBTElEKSB8fAorICAgICAgICBhcHBlbmRfc3RyaW5nX2xpc3QobWVzc2FnZSwgdHh0KSA8IDApIHsKKyAgICAgICAgciA9IGF2YWhpX2NsaWVudF9zZXRfZXJybm8oZ3JvdXAtPmNsaWVudCwgQVZBSElfRVJSX05PX01FTU9SWSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBpZiAoIShyZXBseSA9IGRidXNfY29ubmVjdGlvbl9zZW5kX3dpdGhfcmVwbHlfYW5kX2Jsb2NrKGNsaWVudC0+YnVzLCBtZXNzYWdlLCAtMSwgJmVycm9yKSkgfHwKKyAgICAgICAgZGJ1c19lcnJvcl9pc19zZXQgKCZlcnJvcikpIHsKKyAgICAgICAgciA9IGF2YWhpX2NsaWVudF9zZXRfZXJybm8oY2xpZW50LCBBVkFISV9FUlJfREJVU19FUlJPUik7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBpZiAoIWRidXNfbWVzc2FnZV9nZXRfYXJncyhyZXBseSwgJmVycm9yLCBEQlVTX1RZUEVfSU5WQUxJRCkgfHwKKyAgICAgICAgZGJ1c19lcnJvcl9pc19zZXQgKCZlcnJvcikpIHsKKyAgICAgICAgciA9IGF2YWhpX2NsaWVudF9zZXRfZXJybm8oY2xpZW50LCBBVkFISV9FUlJfREJVU19FUlJPUik7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBkYnVzX21lc3NhZ2VfdW5yZWYobWVzc2FnZSk7CisgICAgZGJ1c19tZXNzYWdlX3VucmVmKHJlcGx5KTsKKworICAgIHJldHVybiBBVkFISV9PSzsKKworZmFpbDoKKworICAgIGlmIChkYnVzX2Vycm9yX2lzX3NldCgmZXJyb3IpKSB7CisgICAgICAgIHIgPSBhdmFoaV9jbGllbnRfc2V0X2RidXNfZXJyb3IoY2xpZW50LCAmZXJyb3IpOworICAgICAgICBkYnVzX2Vycm9yX2ZyZWUoJmVycm9yKTsKKyAgICB9CisKKyAgICBpZiAobWVzc2FnZSkKKyAgICAgICAgZGJ1c19tZXNzYWdlX3VucmVmKG1lc3NhZ2UpOworCisgICAgaWYgKHJlcGx5KQorICAgICAgICBkYnVzX21lc3NhZ2VfdW5yZWYocmVwbHkpOworCisgICAgcmV0dXJuIHI7Cit9CisKKy8qKiBBZGQgYSBob3N0L2FkZHJlc3MgcGFpciAqLworaW50IGF2YWhpX2VudHJ5X2dyb3VwX2FkZF9hZGRyZXNzKAorICAgIEF2YWhpRW50cnlHcm91cCAqZ3JvdXAsCisgICAgQXZhaGlJZkluZGV4IGludGVyZmFjZSwKKyAgICBBdmFoaVByb3RvY29sIHByb3RvY29sLAorICAgIEF2YWhpUHVibGlzaEZsYWdzIGZsYWdzLAorICAgIGNvbnN0IGNoYXIgKm5hbWUsCisgICAgY29uc3QgQXZhaGlBZGRyZXNzICphKSB7CisKKyAgICBEQnVzTWVzc2FnZSAqbWVzc2FnZSA9IE5VTEwsICpyZXBseSA9IE5VTEw7CisgICAgaW50IHIgPSBBVkFISV9PSzsKKyAgICBEQnVzRXJyb3IgZXJyb3I7CisgICAgQXZhaGlDbGllbnQgKmNsaWVudDsKKyAgICBpbnQzMl90IGlfaW50ZXJmYWNlLCBpX3Byb3RvY29sOworICAgIHVpbnQzMl90IHVfZmxhZ3M7CisgICAgY2hhciBzX2FkZHJlc3NbQVZBSElfQUREUkVTU19TVFJfTUFYXTsKKyAgICBjaGFyICpwX2FkZHJlc3MgPSBzX2FkZHJlc3M7CisKKyAgICBhc3NlcnQobmFtZSk7CisKKyAgICBjbGllbnQgPSBncm91cC0+Y2xpZW50OworCisgICAgaWYgKCFncm91cC0+cGF0aCB8fCAhYXZhaGlfY2xpZW50X2lzX2Nvbm5lY3RlZChncm91cC0+Y2xpZW50KSkKKyAgICAgICAgcmV0dXJuIGF2YWhpX2NsaWVudF9zZXRfZXJybm8oZ3JvdXAtPmNsaWVudCwgQVZBSElfRVJSX0JBRF9TVEFURSk7CisKKyAgICBkYnVzX2Vycm9yX2luaXQoJmVycm9yKTsKKworICAgIGlmICghKG1lc3NhZ2UgPSBkYnVzX21lc3NhZ2VfbmV3X21ldGhvZF9jYWxsIChBVkFISV9EQlVTX05BTUUsIGdyb3VwLT5wYXRoLCBBVkFISV9EQlVTX0lOVEVSRkFDRV9FTlRSWV9HUk9VUCwgIkFkZEFkZHJlc3MiKSkpIHsKKyAgICAgICAgciA9IGF2YWhpX2NsaWVudF9zZXRfZXJybm8oY2xpZW50LCBBVkFISV9FUlJfTk9fTUVNT1JZKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGlfaW50ZXJmYWNlID0gKGludDMyX3QpIGludGVyZmFjZTsKKyAgICBpX3Byb3RvY29sID0gKGludDMyX3QpIHByb3RvY29sOworICAgIHVfZmxhZ3MgPSAodWludDMyX3QpIGZsYWdzOworCisgICAgaWYgKCFhdmFoaV9hZGRyZXNzX3NucHJpbnQgKHNfYWRkcmVzcywgc2l6ZW9mIChzX2FkZHJlc3MpLCBhKSkKKyAgICB7CisgICAgICAgIHIgPSBhdmFoaV9jbGllbnRfc2V0X2Vycm5vKGNsaWVudCwgQVZBSElfRVJSX0lOVkFMSURfQUREUkVTUyk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBpZiAoIWRidXNfbWVzc2FnZV9hcHBlbmRfYXJncygKKyAgICAgICAgICAgIG1lc3NhZ2UsCisgICAgICAgICAgICBEQlVTX1RZUEVfSU5UMzIsICZpX2ludGVyZmFjZSwKKyAgICAgICAgICAgIERCVVNfVFlQRV9JTlQzMiwgJmlfcHJvdG9jb2wsCisgICAgICAgICAgICBEQlVTX1RZUEVfVUlOVDMyLCAmdV9mbGFncywKKyAgICAgICAgICAgIERCVVNfVFlQRV9TVFJJTkcsICZuYW1lLAorICAgICAgICAgICAgREJVU19UWVBFX1NUUklORywgJnBfYWRkcmVzcywKKyAgICAgICAgICAgIERCVVNfVFlQRV9JTlZBTElEKSkgeworICAgICAgICByID0gYXZhaGlfY2xpZW50X3NldF9lcnJubyhncm91cC0+Y2xpZW50LCBBVkFISV9FUlJfTk9fTUVNT1JZKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGlmICghKHJlcGx5ID0gZGJ1c19jb25uZWN0aW9uX3NlbmRfd2l0aF9yZXBseV9hbmRfYmxvY2soY2xpZW50LT5idXMsIG1lc3NhZ2UsIC0xLCAmZXJyb3IpKSB8fAorICAgICAgICBkYnVzX2Vycm9yX2lzX3NldCAoJmVycm9yKSkgeworICAgICAgICByID0gYXZhaGlfY2xpZW50X3NldF9lcnJubyhjbGllbnQsIEFWQUhJX0VSUl9EQlVTX0VSUk9SKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGlmICghZGJ1c19tZXNzYWdlX2dldF9hcmdzKHJlcGx5LCAmZXJyb3IsIERCVVNfVFlQRV9JTlZBTElEKSB8fAorICAgICAgICBkYnVzX2Vycm9yX2lzX3NldCAoJmVycm9yKSkgeworICAgICAgICByID0gYXZhaGlfY2xpZW50X3NldF9lcnJubyhjbGllbnQsIEFWQUhJX0VSUl9EQlVTX0VSUk9SKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGRidXNfbWVzc2FnZV91bnJlZihtZXNzYWdlKTsKKyAgICBkYnVzX21lc3NhZ2VfdW5yZWYocmVwbHkpOworCisgICAgcmV0dXJuIEFWQUhJX09LOworCitmYWlsOgorCisgICAgaWYgKGRidXNfZXJyb3JfaXNfc2V0KCZlcnJvcikpIHsKKyAgICAgICAgciA9IGF2YWhpX2NsaWVudF9zZXRfZGJ1c19lcnJvcihjbGllbnQsICZlcnJvcik7CisgICAgICAgIGRidXNfZXJyb3JfZnJlZSgmZXJyb3IpOworICAgIH0KKworICAgIGlmIChtZXNzYWdlKQorICAgICAgICBkYnVzX21lc3NhZ2VfdW5yZWYobWVzc2FnZSk7CisKKyAgICBpZiAocmVwbHkpCisgICAgICAgIGRidXNfbWVzc2FnZV91bnJlZihyZXBseSk7CisKKyAgICByZXR1cm4gcjsKK30KKworLyoqIEFkZCBhbiBhcmJpdHJhcnkgcmVjb3JkICovCitpbnQgYXZhaGlfZW50cnlfZ3JvdXBfYWRkX3JlY29yZCgKKyAgICBBdmFoaUVudHJ5R3JvdXAgKmdyb3VwLAorICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsCisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICBBdmFoaVB1Ymxpc2hGbGFncyBmbGFncywKKyAgICBjb25zdCBjaGFyICpuYW1lLAorICAgIHVpbnQxNl90IGNsYXp6LAorICAgIHVpbnQxNl90IHR5cGUsCisgICAgdWludDMyX3QgdHRsLAorICAgIGNvbnN0IHZvaWQgKnJkYXRhLAorICAgIHNpemVfdCBzaXplKSB7CisKKyAgICBEQnVzTWVzc2FnZSAqbWVzc2FnZSA9IE5VTEwsICpyZXBseSA9IE5VTEw7CisgICAgaW50IHIgPSBBVkFISV9PSzsKKyAgICBEQnVzRXJyb3IgZXJyb3I7CisgICAgQXZhaGlDbGllbnQgKmNsaWVudDsKKyAgICBpbnQzMl90IGlfaW50ZXJmYWNlLCBpX3Byb3RvY29sOworICAgIHVpbnQzMl90IHVfZmxhZ3M7CisKKyAgICBhc3NlcnQobmFtZSk7CisKKyAgICBjbGllbnQgPSBncm91cC0+Y2xpZW50OworCisgICAgaWYgKCFncm91cC0+cGF0aCB8fCAhYXZhaGlfY2xpZW50X2lzX2Nvbm5lY3RlZChncm91cC0+Y2xpZW50KSkKKyAgICAgICAgcmV0dXJuIGF2YWhpX2NsaWVudF9zZXRfZXJybm8oZ3JvdXAtPmNsaWVudCwgQVZBSElfRVJSX0JBRF9TVEFURSk7CisKKyAgICBkYnVzX2Vycm9yX2luaXQoJmVycm9yKTsKKworICAgIGlmICghKG1lc3NhZ2UgPSBkYnVzX21lc3NhZ2VfbmV3X21ldGhvZF9jYWxsIChBVkFISV9EQlVTX05BTUUsIGdyb3VwLT5wYXRoLCBBVkFISV9EQlVTX0lOVEVSRkFDRV9FTlRSWV9HUk9VUCwgIkFkZFJlY29yZCIpKSkgeworICAgICAgICByID0gYXZhaGlfY2xpZW50X3NldF9lcnJubyhjbGllbnQsIEFWQUhJX0VSUl9OT19NRU1PUlkpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaV9pbnRlcmZhY2UgPSAoaW50MzJfdCkgaW50ZXJmYWNlOworICAgIGlfcHJvdG9jb2wgPSAoaW50MzJfdCkgcHJvdG9jb2w7CisgICAgdV9mbGFncyA9ICh1aW50MzJfdCkgZmxhZ3M7CisKKyAgICBpZiAoIWRidXNfbWVzc2FnZV9hcHBlbmRfYXJncygKKyAgICAgICAgICAgIG1lc3NhZ2UsCisgICAgICAgICAgICBEQlVTX1RZUEVfSU5UMzIsICZpX2ludGVyZmFjZSwKKyAgICAgICAgICAgIERCVVNfVFlQRV9JTlQzMiwgJmlfcHJvdG9jb2wsCisgICAgICAgICAgICBEQlVTX1RZUEVfVUlOVDMyLCAmdV9mbGFncywKKyAgICAgICAgICAgIERCVVNfVFlQRV9TVFJJTkcsICZuYW1lLAorICAgICAgICAgICAgREJVU19UWVBFX1VJTlQxNiwgJmNsYXp6LAorICAgICAgICAgICAgREJVU19UWVBFX1VJTlQxNiwgJnR5cGUsCisgICAgICAgICAgICBEQlVTX1RZUEVfVUlOVDMyLCAmdHRsLAorICAgICAgICAgICAgREJVU19UWVBFX0lOVkFMSUQpIHx8IGFwcGVuZF9yZGF0YShtZXNzYWdlLCByZGF0YSwgc2l6ZSkgPCAwKSB7CisgICAgICAgIHIgPSBhdmFoaV9jbGllbnRfc2V0X2Vycm5vKGdyb3VwLT5jbGllbnQsIEFWQUhJX0VSUl9OT19NRU1PUlkpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKCEocmVwbHkgPSBkYnVzX2Nvbm5lY3Rpb25fc2VuZF93aXRoX3JlcGx5X2FuZF9ibG9jayhjbGllbnQtPmJ1cywgbWVzc2FnZSwgLTEsICZlcnJvcikpIHx8CisgICAgICAgIGRidXNfZXJyb3JfaXNfc2V0ICgmZXJyb3IpKSB7CisgICAgICAgIHIgPSBhdmFoaV9jbGllbnRfc2V0X2Vycm5vKGNsaWVudCwgQVZBSElfRVJSX0RCVVNfRVJST1IpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKCFkYnVzX21lc3NhZ2VfZ2V0X2FyZ3MocmVwbHksICZlcnJvciwgREJVU19UWVBFX0lOVkFMSUQpIHx8CisgICAgICAgIGRidXNfZXJyb3JfaXNfc2V0ICgmZXJyb3IpKSB7CisgICAgICAgIHIgPSBhdmFoaV9jbGllbnRfc2V0X2Vycm5vKGNsaWVudCwgQVZBSElfRVJSX0RCVVNfRVJST1IpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgZGJ1c19tZXNzYWdlX3VucmVmKG1lc3NhZ2UpOworICAgIGRidXNfbWVzc2FnZV91bnJlZihyZXBseSk7CisKKyAgICByZXR1cm4gQVZBSElfT0s7CisKK2ZhaWw6CisKKyAgICBpZiAoZGJ1c19lcnJvcl9pc19zZXQoJmVycm9yKSkgeworICAgICAgICByID0gYXZhaGlfY2xpZW50X3NldF9kYnVzX2Vycm9yKGNsaWVudCwgJmVycm9yKTsKKyAgICAgICAgZGJ1c19lcnJvcl9mcmVlKCZlcnJvcik7CisgICAgfQorCisgICAgaWYgKG1lc3NhZ2UpCisgICAgICAgIGRidXNfbWVzc2FnZV91bnJlZihtZXNzYWdlKTsKKworICAgIGlmIChyZXBseSkKKyAgICAgICAgZGJ1c19tZXNzYWdlX3VucmVmKHJlcGx5KTsKKworICAgIHJldHVybiByOworfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNsaWVudC9pbnRlcm5hbC5oIGIvYXZhaGktMC42LjMxL2F2YWhpLWNsaWVudC9pbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ZjNiZWIKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY2xpZW50L2ludGVybmFsLmgKQEAgLTAsMCArMSwxNzIgQEAKKyNpZm5kZWYgZm9vaW50ZXJuYWxoZm9vCisjZGVmaW5lIGZvb2ludGVybmFsaGZvbworCisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpbmNsdWRlIDxkYnVzL2RidXMuaD4KKworI2luY2x1ZGUgImNsaWVudC5oIgorI2luY2x1ZGUgImxvb2t1cC5oIgorI2luY2x1ZGUgInB1Ymxpc2guaCIKKworc3RydWN0IEF2YWhpQ2xpZW50IHsKKyAgICBjb25zdCBBdmFoaVBvbGwgKnBvbGxfYXBpOworICAgIERCdXNDb25uZWN0aW9uICpidXM7CisgICAgaW50IGVycm9yOworICAgIEF2YWhpQ2xpZW50U3RhdGUgc3RhdGU7CisgICAgQXZhaGlDbGllbnRGbGFncyBmbGFnczsKKworICAgIC8qIENhY2hlIGZvciBzb21lIHNlbGRvbSBjaGFuZ2luZyBzZXJ2ZXIgZGF0YSAqLworICAgIGNoYXIgKnZlcnNpb25fc3RyaW5nLCAqaG9zdF9uYW1lLCAqaG9zdF9uYW1lX2ZxZG4sICpkb21haW5fbmFtZTsKKyAgICB1aW50MzJfdCBsb2NhbF9zZXJ2aWNlX2Nvb2tpZTsKKyAgICBpbnQgbG9jYWxfc2VydmljZV9jb29raWVfdmFsaWQ7CisKKyAgICBBdmFoaUNsaWVudENhbGxiYWNrIGNhbGxiYWNrOworICAgIHZvaWQgKnVzZXJkYXRhOworCisgICAgQVZBSElfTExJU1RfSEVBRChBdmFoaUVudHJ5R3JvdXAsIGdyb3Vwcyk7CisgICAgQVZBSElfTExJU1RfSEVBRChBdmFoaURvbWFpbkJyb3dzZXIsIGRvbWFpbl9icm93c2Vycyk7CisgICAgQVZBSElfTExJU1RfSEVBRChBdmFoaVNlcnZpY2VCcm93c2VyLCBzZXJ2aWNlX2Jyb3dzZXJzKTsKKyAgICBBVkFISV9MTElTVF9IRUFEKEF2YWhpU2VydmljZVR5cGVCcm93c2VyLCBzZXJ2aWNlX3R5cGVfYnJvd3NlcnMpOworICAgIEFWQUhJX0xMSVNUX0hFQUQoQXZhaGlTZXJ2aWNlUmVzb2x2ZXIsIHNlcnZpY2VfcmVzb2x2ZXJzKTsKKyAgICBBVkFISV9MTElTVF9IRUFEKEF2YWhpSG9zdE5hbWVSZXNvbHZlciwgaG9zdF9uYW1lX3Jlc29sdmVycyk7CisgICAgQVZBSElfTExJU1RfSEVBRChBdmFoaUFkZHJlc3NSZXNvbHZlciwgYWRkcmVzc19yZXNvbHZlcnMpOworICAgIEFWQUhJX0xMSVNUX0hFQUQoQXZhaGlSZWNvcmRCcm93c2VyLCByZWNvcmRfYnJvd3NlcnMpOworfTsKKworc3RydWN0IEF2YWhpRW50cnlHcm91cCB7CisgICAgY2hhciAqcGF0aDsKKyAgICBBdmFoaUVudHJ5R3JvdXBTdGF0ZSBzdGF0ZTsKKyAgICBpbnQgc3RhdGVfdmFsaWQ7CisgICAgQXZhaGlDbGllbnQgKmNsaWVudDsKKyAgICBBdmFoaUVudHJ5R3JvdXBDYWxsYmFjayBjYWxsYmFjazsKKyAgICB2b2lkICp1c2VyZGF0YTsKKyAgICBBVkFISV9MTElTVF9GSUVMRFMoQXZhaGlFbnRyeUdyb3VwLCBncm91cHMpOworfTsKKworc3RydWN0IEF2YWhpRG9tYWluQnJvd3NlciB7CisgICAgaW50IHJlZjsKKworICAgIGNoYXIgKnBhdGg7CisgICAgQXZhaGlDbGllbnQgKmNsaWVudDsKKyAgICBBdmFoaURvbWFpbkJyb3dzZXJDYWxsYmFjayBjYWxsYmFjazsKKyAgICB2b2lkICp1c2VyZGF0YTsKKyAgICBBVkFISV9MTElTVF9GSUVMRFMoQXZhaGlEb21haW5Ccm93c2VyLCBkb21haW5fYnJvd3NlcnMpOworCisgICAgQXZhaGlJZkluZGV4IGludGVyZmFjZTsKKyAgICBBdmFoaVByb3RvY29sIHByb3RvY29sOworCisgICAgQXZhaGlUaW1lb3V0ICpkZWZlcl90aW1lb3V0OworCisgICAgQXZhaGlTdHJpbmdMaXN0ICpzdGF0aWNfYnJvd3NlX2RvbWFpbnM7Cit9OworCitzdHJ1Y3QgQXZhaGlTZXJ2aWNlQnJvd3NlciB7CisgICAgY2hhciAqcGF0aDsKKyAgICBBdmFoaUNsaWVudCAqY2xpZW50OworICAgIEF2YWhpU2VydmljZUJyb3dzZXJDYWxsYmFjayBjYWxsYmFjazsKKyAgICB2b2lkICp1c2VyZGF0YTsKKyAgICBBVkFISV9MTElTVF9GSUVMRFMoQXZhaGlTZXJ2aWNlQnJvd3Nlciwgc2VydmljZV9icm93c2Vycyk7CisKKyAgICBjaGFyICp0eXBlLCAqZG9tYWluOworICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2U7CisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbDsKK307CisKK3N0cnVjdCBBdmFoaVNlcnZpY2VUeXBlQnJvd3NlciB7CisgICAgY2hhciAqcGF0aDsKKyAgICBBdmFoaUNsaWVudCAqY2xpZW50OworICAgIEF2YWhpU2VydmljZVR5cGVCcm93c2VyQ2FsbGJhY2sgY2FsbGJhY2s7CisgICAgdm9pZCAqdXNlcmRhdGE7CisgICAgQVZBSElfTExJU1RfRklFTERTKEF2YWhpU2VydmljZVR5cGVCcm93c2VyLCBzZXJ2aWNlX3R5cGVfYnJvd3NlcnMpOworCisgICAgY2hhciAqZG9tYWluOworICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2U7CisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbDsKK307CisKK3N0cnVjdCBBdmFoaVNlcnZpY2VSZXNvbHZlciB7CisgICAgY2hhciAqcGF0aDsKKyAgICBBdmFoaUNsaWVudCAqY2xpZW50OworICAgIEF2YWhpU2VydmljZVJlc29sdmVyQ2FsbGJhY2sgY2FsbGJhY2s7CisgICAgdm9pZCAqdXNlcmRhdGE7CisgICAgQVZBSElfTExJU1RfRklFTERTKEF2YWhpU2VydmljZVJlc29sdmVyLCBzZXJ2aWNlX3Jlc29sdmVycyk7CisKKyAgICBjaGFyICpuYW1lLCAqdHlwZSwgKmRvbWFpbjsKKyAgICBBdmFoaUlmSW5kZXggaW50ZXJmYWNlOworICAgIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2w7Cit9OworCitzdHJ1Y3QgQXZhaGlIb3N0TmFtZVJlc29sdmVyIHsKKyAgICBjaGFyICpwYXRoOworICAgIEF2YWhpQ2xpZW50ICpjbGllbnQ7CisgICAgQXZhaGlIb3N0TmFtZVJlc29sdmVyQ2FsbGJhY2sgY2FsbGJhY2s7CisgICAgdm9pZCAqdXNlcmRhdGE7CisgICAgQVZBSElfTExJU1RfRklFTERTKEF2YWhpSG9zdE5hbWVSZXNvbHZlciwgaG9zdF9uYW1lX3Jlc29sdmVycyk7CisKKyAgICBjaGFyICpob3N0X25hbWU7CisgICAgQXZhaGlJZkluZGV4IGludGVyZmFjZTsKKyAgICBBdmFoaVByb3RvY29sIHByb3RvY29sOworfTsKKworc3RydWN0IEF2YWhpQWRkcmVzc1Jlc29sdmVyIHsKKyAgICBjaGFyICpwYXRoOworICAgIEF2YWhpQ2xpZW50ICpjbGllbnQ7CisgICAgQXZhaGlBZGRyZXNzUmVzb2x2ZXJDYWxsYmFjayBjYWxsYmFjazsKKyAgICB2b2lkICp1c2VyZGF0YTsKKyAgICBBVkFISV9MTElTVF9GSUVMRFMoQXZhaGlBZGRyZXNzUmVzb2x2ZXIsIGFkZHJlc3NfcmVzb2x2ZXJzKTsKKworICAgIEF2YWhpQWRkcmVzcyBhZGRyZXNzOworICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2U7CisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbDsKK307CisKK3N0cnVjdCBBdmFoaVJlY29yZEJyb3dzZXIgeworICAgIGNoYXIgKnBhdGg7CisgICAgQXZhaGlDbGllbnQgKmNsaWVudDsKKyAgICBBdmFoaVJlY29yZEJyb3dzZXJDYWxsYmFjayBjYWxsYmFjazsKKyAgICB2b2lkICp1c2VyZGF0YTsKKyAgICBBVkFISV9MTElTVF9GSUVMRFMoQXZhaGlSZWNvcmRCcm93c2VyLCByZWNvcmRfYnJvd3NlcnMpOworCisgICAgY2hhciAqbmFtZTsKKyAgICB1aW50MTZfdCBjbGF6eiwgdHlwZTsKKyAgICBBdmFoaUlmSW5kZXggaW50ZXJmYWNlOworICAgIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2w7Cit9OworCitpbnQgYXZhaGlfY2xpZW50X3NldF9lcnJubyAoQXZhaGlDbGllbnQgKmNsaWVudCwgaW50IGVycm9yKTsKK2ludCBhdmFoaV9jbGllbnRfc2V0X2RidXNfZXJyb3IoQXZhaGlDbGllbnQgKmNsaWVudCwgREJ1c0Vycm9yICplcnJvcik7CisKK3ZvaWQgYXZhaGlfZW50cnlfZ3JvdXBfc2V0X3N0YXRlKEF2YWhpRW50cnlHcm91cCAqZ3JvdXAsIEF2YWhpRW50cnlHcm91cFN0YXRlIHN0YXRlKTsKKworREJ1c0hhbmRsZXJSZXN1bHQgYXZhaGlfZG9tYWluX2Jyb3dzZXJfZXZlbnQgKEF2YWhpQ2xpZW50ICpjbGllbnQsIEF2YWhpQnJvd3NlckV2ZW50IGV2ZW50LCBEQnVzTWVzc2FnZSAqbWVzc2FnZSk7CitEQnVzSGFuZGxlclJlc3VsdCBhdmFoaV9zZXJ2aWNlX3R5cGVfYnJvd3Nlcl9ldmVudCAoQXZhaGlDbGllbnQgKmNsaWVudCwgQXZhaGlCcm93c2VyRXZlbnQgZXZlbnQsIERCdXNNZXNzYWdlICptZXNzYWdlKTsKK0RCdXNIYW5kbGVyUmVzdWx0IGF2YWhpX3NlcnZpY2VfYnJvd3Nlcl9ldmVudCAoQXZhaGlDbGllbnQgKmNsaWVudCwgQXZhaGlCcm93c2VyRXZlbnQgZXZlbnQsIERCdXNNZXNzYWdlICptZXNzYWdlKTsKK0RCdXNIYW5kbGVyUmVzdWx0IGF2YWhpX3JlY29yZF9icm93c2VyX2V2ZW50KEF2YWhpQ2xpZW50ICpjbGllbnQsIEF2YWhpQnJvd3NlckV2ZW50IGV2ZW50LCBEQnVzTWVzc2FnZSAqbWVzc2FnZSk7CisKK0RCdXNIYW5kbGVyUmVzdWx0IGF2YWhpX3NlcnZpY2VfcmVzb2x2ZXJfZXZlbnQgKEF2YWhpQ2xpZW50ICpjbGllbnQsIEF2YWhpUmVzb2x2ZXJFdmVudCBldmVudCwgREJ1c01lc3NhZ2UgKm1lc3NhZ2UpOworREJ1c0hhbmRsZXJSZXN1bHQgYXZhaGlfaG9zdF9uYW1lX3Jlc29sdmVyX2V2ZW50IChBdmFoaUNsaWVudCAqY2xpZW50LCBBdmFoaVJlc29sdmVyRXZlbnQgZXZlbnQsIERCdXNNZXNzYWdlICptZXNzYWdlKTsKK0RCdXNIYW5kbGVyUmVzdWx0IGF2YWhpX2FkZHJlc3NfcmVzb2x2ZXJfZXZlbnQgKEF2YWhpQ2xpZW50ICpjbGllbnQsIEF2YWhpUmVzb2x2ZXJFdmVudCBldmVudCwgREJ1c01lc3NhZ2UgKm1lc3NhZ2UpOworCitpbnQgYXZhaGlfY2xpZW50X3NpbXBsZV9tZXRob2RfY2FsbChBdmFoaUNsaWVudCAqY2xpZW50LCBjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICppbnRlcmZhY2UsIGNvbnN0IGNoYXIgKm1ldGhvZCk7CisKK2ludCBhdmFoaV9jbGllbnRfaXNfY29ubmVjdGVkKEF2YWhpQ2xpZW50ICpjbGllbnQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jbGllbnQvbG9va3VwLmggYi9hdmFoaS0wLjYuMzEvYXZhaGktY2xpZW50L2xvb2t1cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNDA3ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY2xpZW50L2xvb2t1cC5oCkBAIC0wLDAgKzEsMzE0IEBACisjaWZuZGVmIGZvb2NsaWVudGxvb2t1cGhmb28KKyNkZWZpbmUgZm9vY2xpZW50bG9va3VwaGZvbworCisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2NkZWNsLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2FkZHJlc3MuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vc3RybHN0Lmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2RlZnMuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vd2F0Y2guaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vZ2NjbWFjcm8uaD4KKworI2luY2x1ZGUgPGF2YWhpLWNsaWVudC9jbGllbnQuaD4KKworLyoqIFxmaWxlIGF2YWhpLWNsaWVudC9sb29rdXAuaCBMb29rdXAgQ2xpZW50IEFQSSAqLworCisvKiogXGV4YW1wbGUgY2xpZW50LWJyb3dzZS1zZXJ2aWNlcy5jIEV4YW1wbGUgaG93IHRvIGJyb3dzZSBmb3IgRE5TLVNECisgKiBzZXJ2aWNlcyB1c2luZyB0aGUgY2xpZW50IGludGVyZmFjZSB0byBhdmFoaS1kYWVtb24uICovCisKK0FWQUhJX0NfREVDTF9CRUdJTgorCisvKiogQHsgXG5hbWUgRG9tYWluIEJyb3dzZXIgKi8KKworLyoqIEEgZG9tYWluIGJyb3dzZXIgb2JqZWN0ICovCit0eXBlZGVmIHN0cnVjdCBBdmFoaURvbWFpbkJyb3dzZXIgQXZhaGlEb21haW5Ccm93c2VyOworCisvKiogVGhlIGZ1bmN0aW9uIHByb3RvdHlwZSBmb3IgdGhlIGNhbGxiYWNrIG9mIGFuIEF2YWhpRG9tYWluQnJvd3NlciAqLwordHlwZWRlZiB2b2lkICgqQXZhaGlEb21haW5Ccm93c2VyQ2FsbGJhY2spICgKKyAgICBBdmFoaURvbWFpbkJyb3dzZXIgKmIsCisgICAgQXZhaGlJZkluZGV4IGludGVyZmFjZSwKKyAgICBBdmFoaVByb3RvY29sIHByb3RvY29sLAorICAgIEF2YWhpQnJvd3NlckV2ZW50IGV2ZW50LAorICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwKKyAgICBBdmFoaUxvb2t1cFJlc3VsdEZsYWdzIGZsYWdzLAorICAgIHZvaWQgKnVzZXJkYXRhKTsKKworLyoqIEJyb3dzZSBmb3IgZG9tYWlucyBvbiB0aGUgbG9jYWwgbmV0d29yayAqLworQXZhaGlEb21haW5Ccm93c2VyKiBhdmFoaV9kb21haW5fYnJvd3Nlcl9uZXcgKAorICAgIEF2YWhpQ2xpZW50ICpjbGllbnQsCisgICAgQXZhaGlJZkluZGV4IGludGVyZmFjZSwKKyAgICBBdmFoaVByb3RvY29sIHByb3RvY29sLAorICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwKKyAgICBBdmFoaURvbWFpbkJyb3dzZXJUeXBlIGJ0eXBlLAorICAgIEF2YWhpTG9va3VwRmxhZ3MgZmxhZ3MsCisgICAgQXZhaGlEb21haW5Ccm93c2VyQ2FsbGJhY2sgY2FsbGJhY2ssCisgICAgdm9pZCAqdXNlcmRhdGEpOworCisvKiogR2V0IHRoZSBwYXJlbnQgY2xpZW50IG9mIGFuIEF2YWhpRG9tYWluQnJvd3NlciBvYmplY3QgKi8KK0F2YWhpQ2xpZW50KiBhdmFoaV9kb21haW5fYnJvd3Nlcl9nZXRfY2xpZW50IChBdmFoaURvbWFpbkJyb3dzZXIgKik7CisKKy8qKiBDbGVhbnMgdXAgYW5kIGZyZWVzIGFuIEF2YWhpRG9tYWluQnJvd3NlciBvYmplY3QgKi8KK2ludCBhdmFoaV9kb21haW5fYnJvd3Nlcl9mcmVlIChBdmFoaURvbWFpbkJyb3dzZXIgKik7CisKKy8qKiBAfSAqLworCisvKiogQHsgXG5hbWUgU2VydmljZSBCcm93c2VyICovCisKKy8qKiBBIHNlcnZpY2UgYnJvd3NlciBvYmplY3QgKi8KK3R5cGVkZWYgc3RydWN0IEF2YWhpU2VydmljZUJyb3dzZXIgQXZhaGlTZXJ2aWNlQnJvd3NlcjsKKworLyoqIFRoZSBmdW5jdGlvbiBwcm90b3R5cGUgZm9yIHRoZSBjYWxsYmFjayBvZiBhbiBBdmFoaVNlcnZpY2VCcm93c2VyICovCit0eXBlZGVmIHZvaWQgKCpBdmFoaVNlcnZpY2VCcm93c2VyQ2FsbGJhY2spICgKKyAgICBBdmFoaVNlcnZpY2VCcm93c2VyICpiLAorICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsCisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICBBdmFoaUJyb3dzZXJFdmVudCBldmVudCwKKyAgICBjb25zdCBjaGFyICpuYW1lLAorICAgIGNvbnN0IGNoYXIgKnR5cGUsCisgICAgY29uc3QgY2hhciAqZG9tYWluLAorICAgIEF2YWhpTG9va3VwUmVzdWx0RmxhZ3MgZmxhZ3MsCisgICAgdm9pZCAqdXNlcmRhdGEpOworCisvKiogQnJvd3NlIGZvciBzZXJ2aWNlcyBvZiBhIHR5cGUgb24gdGhlIG5ldHdvcmsuIEluIG1vc3QgY2FzZXMgeW91CisgKiBwcm9iYWJseSB3YW50IHRvIHBhc3MgQVZBSElfSUZfVU5TUEVDIGFuZCBBVkFISV9QUk9UT19VTlNQRUQgaW4KKyAqIGludGVyZmFjZSwgcmVzcC4gcHJvdG9jb2wgdG8gYnJvd3NlIG9uIGFsbCBsb2NhbCBuZXR3b3Jrcy4gVGhlCisgKiBzcGVjaWZpZWQgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgYSBuZXcgc2VydmljZSBhcHBlYXJzCisgKiBvciBpcyByZW1vdmVkIGZyb20gdGhlIG5ldHdvcmsuIFBsZWFzZSBub3RlIHRoYXQgZXZlbnRzIG1heSBiZQorICogY29sbGFwc2VkIHRvIG1pbmltaXplIHRyYWZmaWMgKGkuZS4gYSBSRU1PVkVEIGZvbGxvd2VkIGJ5IGEgTkVXIGZvcgorICogdGhlIHNhbWUgc2VydmljZSBkYXRhIGlzIGRyb3BwZWQgYmVjYXVzZSByZWR1bmRhbnQpLiBJZiB5b3Ugd2FudCB0bworICogc3Vic2NyaWJlIHRvIHNlcnZpY2UgZGF0YSBjaGFuZ2VzLCB5b3Ugc2hvdWxkIHVzZQorICogYXZhaGlfc2VydmljZV9yZXNvbHZlcl9uZXcoKSBhbmQga2VlcCBpdCBvcGVuLCBpbiB3aGljaCBjYXNlIHlvdQorICogd2lsbCBiZSBub3RpZmllZCB2aWEgQVZBSElfUkVTT0xWRV9GT1VORCBldmVyeXRpbWUgdGhlIHNlcnZpY2UgZGF0YQorICogY2hhbmdlcy4gKi8KK0F2YWhpU2VydmljZUJyb3dzZXIqIGF2YWhpX3NlcnZpY2VfYnJvd3Nlcl9uZXcgKAorICAgIEF2YWhpQ2xpZW50ICpjbGllbnQsCisgICAgQXZhaGlJZkluZGV4IGludGVyZmFjZSwgICAgIC8qKjwgSW4gbW9zdCBjYXNlcyBwYXNzIEFWQUhJX0lGX1VOU1BFQyBoZXJlICovCisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwgICAgIC8qKjwgSW4gbW9zdCBjYXNlcyBwYXNzIEFWQUhJX1BST1RPX1VOU1BFQyBoZXJlICovCisgICAgY29uc3QgY2hhciAqdHlwZSwgICAgICAgICAgIC8qKjwgQSBzZXJ2aWNlIHR5cGUgc3VjaCBhcyAiX2h0dHAuX3RjcCIgKi8KKyAgICBjb25zdCBjaGFyICpkb21haW4sICAgICAgICAgLyoqPCBBIGRvbWFpbiB0byBicm93c2UgaW4uIEluIG1vc3QgY2FzZXMgeW91IHdhbnQgdG8gcGFzcyBOVUxMIGhlcmUgZm9yIHRoZSBkZWZhdWx0IGRvbWFpbiAodXN1YWxseSAiLmxvY2FsIikgKi8KKyAgICBBdmFoaUxvb2t1cEZsYWdzIGZsYWdzLAorICAgIEF2YWhpU2VydmljZUJyb3dzZXJDYWxsYmFjayBjYWxsYmFjaywKKyAgICB2b2lkICp1c2VyZGF0YSk7CisKKy8qKiBHZXQgdGhlIHBhcmVudCBjbGllbnQgb2YgYW4gQXZhaGlTZXJ2aWNlQnJvd3NlciBvYmplY3QgKi8KK0F2YWhpQ2xpZW50KiBhdmFoaV9zZXJ2aWNlX2Jyb3dzZXJfZ2V0X2NsaWVudCAoQXZhaGlTZXJ2aWNlQnJvd3NlciAqKTsKKworLyoqIENsZWFucyB1cCBhbmQgZnJlZXMgYW4gQXZhaGlTZXJ2aWNlQnJvd3NlciBvYmplY3QgKi8KK2ludCBhdmFoaV9zZXJ2aWNlX2Jyb3dzZXJfZnJlZSAoQXZhaGlTZXJ2aWNlQnJvd3NlciAqKTsKKworLyoqIEB9ICovCisKKy8qKiBcY29uZCBmdWxsZG9jcyAqLworLyoqIEEgc2VydmljZSB0eXBlIGJyb3dzZXIgb2JqZWN0ICovCit0eXBlZGVmIHN0cnVjdCBBdmFoaVNlcnZpY2VUeXBlQnJvd3NlciBBdmFoaVNlcnZpY2VUeXBlQnJvd3NlcjsKKworLyoqIFRoZSBmdW5jdGlvbiBwcm90b3R5cGUgZm9yIHRoZSBjYWxsYmFjayBvZiBhbiBBdmFoaVNlcnZpY2VUeXBlQnJvd3NlciAqLwordHlwZWRlZiB2b2lkICgqQXZhaGlTZXJ2aWNlVHlwZUJyb3dzZXJDYWxsYmFjaykgKAorICAgIEF2YWhpU2VydmljZVR5cGVCcm93c2VyICpiLAorICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsCisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICBBdmFoaUJyb3dzZXJFdmVudCBldmVudCwKKyAgICBjb25zdCBjaGFyICp0eXBlLAorICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwKKyAgICBBdmFoaUxvb2t1cFJlc3VsdEZsYWdzIGZsYWdzLAorICAgIHZvaWQgKnVzZXJkYXRhKTsKKworLyoqIEJyb3dzZSBmb3Igc2VydmljZSB0eXBlcyBvbiB0aGUgbG9jYWwgbmV0d29yayAqLworQXZhaGlTZXJ2aWNlVHlwZUJyb3dzZXIqIGF2YWhpX3NlcnZpY2VfdHlwZV9icm93c2VyX25ldyAoCisgICAgQXZhaGlDbGllbnQgKmNsaWVudCwKKyAgICBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLAorICAgIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsCisgICAgY29uc3QgY2hhciAqZG9tYWluLAorICAgIEF2YWhpTG9va3VwRmxhZ3MgZmxhZ3MsCisgICAgQXZhaGlTZXJ2aWNlVHlwZUJyb3dzZXJDYWxsYmFjayBjYWxsYmFjaywKKyAgICB2b2lkICp1c2VyZGF0YSk7CisKKy8qKiBHZXQgdGhlIHBhcmVudCBjbGllbnQgb2YgYW4gQXZhaGlTZXJ2aWNlVHlwZUJyb3dzZXIgb2JqZWN0ICovCitBdmFoaUNsaWVudCogYXZhaGlfc2VydmljZV90eXBlX2Jyb3dzZXJfZ2V0X2NsaWVudCAoQXZhaGlTZXJ2aWNlVHlwZUJyb3dzZXIgKik7CisKKy8qKiBDbGVhbnMgdXAgYW5kIGZyZWVzIGFuIEF2YWhpU2VydmljZVR5cGVCcm93c2VyIG9iamVjdCAqLworaW50IGF2YWhpX3NlcnZpY2VfdHlwZV9icm93c2VyX2ZyZWUgKEF2YWhpU2VydmljZVR5cGVCcm93c2VyICopOworCisvKiogXGVuZGNvbmQgKi8KKworLyoqIEB7IFxuYW1lIFNlcnZpY2UgUmVzb2x2ZXIgKi8KKworLyoqIEEgc2VydmljZSByZXNvbHZlciBvYmplY3QgKi8KK3R5cGVkZWYgc3RydWN0IEF2YWhpU2VydmljZVJlc29sdmVyIEF2YWhpU2VydmljZVJlc29sdmVyOworCisvKiogVGhlIGZ1bmN0aW9uIHByb3RvdHlwZSBmb3IgdGhlIGNhbGxiYWNrIG9mIGFuIEF2YWhpU2VydmljZVJlc29sdmVyICovCit0eXBlZGVmIHZvaWQgKCpBdmFoaVNlcnZpY2VSZXNvbHZlckNhbGxiYWNrKSAoCisgICAgQXZhaGlTZXJ2aWNlUmVzb2x2ZXIgKnIsCisgICAgQXZhaGlJZkluZGV4IGludGVyZmFjZSwKKyAgICBBdmFoaVByb3RvY29sIHByb3RvY29sLAorICAgIEF2YWhpUmVzb2x2ZXJFdmVudCBldmVudCwKKyAgICBjb25zdCBjaGFyICpuYW1lLAorICAgIGNvbnN0IGNoYXIgKnR5cGUsCisgICAgY29uc3QgY2hhciAqZG9tYWluLAorICAgIGNvbnN0IGNoYXIgKmhvc3RfbmFtZSwKKyAgICBjb25zdCBBdmFoaUFkZHJlc3MgKmEsCisgICAgdWludDE2X3QgcG9ydCwKKyAgICBBdmFoaVN0cmluZ0xpc3QgKnR4dCwKKyAgICBBdmFoaUxvb2t1cFJlc3VsdEZsYWdzIGZsYWdzLAorICAgIHZvaWQgKnVzZXJkYXRhKTsKKworLyoqIENyZWF0ZSBhIG5ldyBzZXJ2aWNlIHJlc29sdmVyIG9iamVjdC4gUGxlYXNlIG1ha2Ugc3VyZSB0byBwYXNzIGFsbAorICogdGhlIHNlcnZpY2UgZGF0YSB5b3UgcmVjZWl2ZWQgdmlhIGF2YWhpX3NlcnZpY2VfYnJvd3Nlcl9uZXcoKSdzCisgKiBjYWxsYmFjayBmdW5jdGlvbiwgZXNwZWNpYWxseSBpbnRlcmZhY2UgYW5kIHByb3RvY29sLiBUaGUgcHJvdG9jb2wKKyAqIGFyZ3VtZW50IHNwZWNpZmllcyB0aGUgcHJvdG9jb2wgKElQdjQgb3IgSVB2NikgdG8gdXNlIGFzIHRyYW5zcG9ydAorICogZm9yIHRoZSBxdWVyaWVzIHdoaWNoIGFyZSBzZW50IG91dCBieSB0aGlzIHJlc29sdmVyLiBUaGUKKyAqIGFwcm90b2NvbCBhcmd1bWVudCBzcGVjaWZpZXMgdGhlIGFkcmVzcyBmYW1pbHkgKElQdjQgb3IgSVB2Nikgb2YKKyAqIHRoZSBhZGRyZXNzIG9mIHRoZSBzZXJ2aWNlIHdlIGFyZSBsb29raW5nIGZvci4gR2VuZXJhbGx5LCBvbgorICogInByb3RvY29sIiB5b3Ugc2hvdWxkIG9ubHkgcGFzcyB3aGF0IHdhcyBzdXBwbGllZCB0byB5b3UgYXMKKyAqIHBhcmFtZXRlciB0byB5b3VyIEF2YWhpU2VydmljZUJyb3dzZXJDYWxsYmFjay4gSW4gImFwcm90b2NvbCIgeW91CisgKiBzaG91bGQgcGFzcyB3aGF0IHlvdXIgYXBwbGljYXRpb24gY29kZSBjYW4gZGVhbCB3aXRoIHdoZW4KKyAqIGNvbm5lY3RpbmcgdG8gdGhlIHNlcnZpY2UuIE9yLCBtb3JlIHRlY2huaWNhbGx5IHNwZWFraW5nOiBwcm90b2NvbAorICogc3BlY2lmaWVzIGlmIHRoZSBtRE5TIHF1ZXJpZXMgc2hvdWxkIGJlIHNlbnQgYXMgVURQL0lQdjQKKyAqIHJlc3AuIFVEUC9JUHY2IHBhY2tldHMuIGFwcm90b2NvbCBzcGVjaWZpZXMgd2hldGhlciB0aGUgcXVlcnkgaXMgZm9yIGEgQQorICogcmVzcC4gQUFBQSByZXNvdXJjZSByZWNvcmQuICovCitBdmFoaVNlcnZpY2VSZXNvbHZlciAqIGF2YWhpX3NlcnZpY2VfcmVzb2x2ZXJfbmV3KAorICAgIEF2YWhpQ2xpZW50ICpjbGllbnQsCisgICAgQXZhaGlJZkluZGV4IGludGVyZmFjZSwgICAvKio8IFBhc3MgdGhlIGludGVyZmFjZSBhcmd1bWVudCB5b3UgcmVjZWl2ZWQgaW4gQXZhaGlTZXJ2aWNlQnJvd3NlckNhbGxiYWNrIGhlcmUuICovCisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwgICAvKio8IFBhc3MgdGhlIHByb3RvY29sIGFyZ3VtZW50IHlvdSByZWNlaXZlZCBpbiBBdmFoaVNlcnZpY2VCcm93c2VyQ2FsbGJhY2sgaGVyZS4gKi8KKyAgICBjb25zdCBjaGFyICpuYW1lLCAgICAgICAgIC8qKjwgUGFzcyB0aGUgbmFtZSBhcmd1bWVudCB5b3UgcmVjZWl2ZWQgaW4gQXZhaGlTZXJ2aWNlQnJvd3NlckNhbGxiYWNrIGhlcmUuICovCisgICAgY29uc3QgY2hhciAqdHlwZSwgICAgICAgICAvKio8IFBhc3MgdGhlIHR5cGUgYXJndW1lbnQgeW91IHJlY2VpdmVkIGluIEF2YWhpU2VydmljZUJyb3dzZXJDYWxsYmFjayBoZXJlLiAqLworICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwgICAgICAgLyoqPCBQYXNzIHRoZSBkb21haW4gYXJndW1lbnQgeW91IHJlY2VpdmVkIGluIEF2YWhpU2VydmljZUJyb3dzZXJDYWxsYmFjayBoZXJlLiAqLworICAgIEF2YWhpUHJvdG9jb2wgYXByb3RvY29sLCAgLyoqPCBUaGUgZGVzaXJlZCBhZGRyZXNzIGZhbWlseSBvZiB0aGUgc2VydmljZSBhZGRyZXNzIHRvIHJlc29sdmUuIEFWQUhJX1BST1RPX1VOU1BFQyBpZiB5b3VyIGFwcGxpY2F0aW9uIGNhbiBkZWFsIHdpdGggYm90aCBJUHY0IGFuZCBJUHY2ICovCisgICAgQXZhaGlMb29rdXBGbGFncyBmbGFncywKKyAgICBBdmFoaVNlcnZpY2VSZXNvbHZlckNhbGxiYWNrIGNhbGxiYWNrLAorICAgIHZvaWQgKnVzZXJkYXRhKTsKKworLyoqIEdldCB0aGUgcGFyZW50IGNsaWVudCBvZiBhbiBBdmFoaVNlcnZpY2VSZXNvbHZlciBvYmplY3QgKi8KK0F2YWhpQ2xpZW50KiBhdmFoaV9zZXJ2aWNlX3Jlc29sdmVyX2dldF9jbGllbnQgKEF2YWhpU2VydmljZVJlc29sdmVyICopOworCisvKiogRnJlZSBhIHNlcnZpY2UgcmVzb2x2ZXIgb2JqZWN0ICovCitpbnQgYXZhaGlfc2VydmljZV9yZXNvbHZlcl9mcmVlKEF2YWhpU2VydmljZVJlc29sdmVyICpyKTsKKworLyoqIEB9ICovCisKKy8qKiBcY29uZCBmdWxsZG9jcyAqLworLyoqIEEgc2VydmljZSByZXNvbHZlciBvYmplY3QgKi8KK3R5cGVkZWYgc3RydWN0IEF2YWhpSG9zdE5hbWVSZXNvbHZlciBBdmFoaUhvc3ROYW1lUmVzb2x2ZXI7CisKKy8qKiBUaGUgZnVuY3Rpb24gcHJvdG90eXBlIGZvciB0aGUgY2FsbGJhY2sgb2YgYW4gQXZhaGlIb3N0TmFtZVJlc29sdmVyICovCit0eXBlZGVmIHZvaWQgKCpBdmFoaUhvc3ROYW1lUmVzb2x2ZXJDYWxsYmFjaykgKAorICAgIEF2YWhpSG9zdE5hbWVSZXNvbHZlciAqciwKKyAgICBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLAorICAgIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsCisgICAgQXZhaGlSZXNvbHZlckV2ZW50IGV2ZW50LAorICAgIGNvbnN0IGNoYXIgKm5hbWUsCisgICAgY29uc3QgQXZhaGlBZGRyZXNzICphLAorICAgIEF2YWhpTG9va3VwUmVzdWx0RmxhZ3MgZmxhZ3MsCisgICAgdm9pZCAqdXNlcmRhdGEpOworCisvKiogQ3JlYXRlIGEgbmV3IGhvc3RuYW1lIHJlc29sdmVyIG9iamVjdCAqLworQXZhaGlIb3N0TmFtZVJlc29sdmVyICogYXZhaGlfaG9zdF9uYW1lX3Jlc29sdmVyX25ldygKKyAgICBBdmFoaUNsaWVudCAqY2xpZW50LAorICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsCisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICBjb25zdCBjaGFyICpuYW1lLAorICAgIEF2YWhpUHJvdG9jb2wgYXByb3RvY29sLAorICAgIEF2YWhpTG9va3VwRmxhZ3MgZmxhZ3MsCisgICAgQXZhaGlIb3N0TmFtZVJlc29sdmVyQ2FsbGJhY2sgY2FsbGJhY2ssCisgICAgdm9pZCAqdXNlcmRhdGEpOworCisvKiogR2V0IHRoZSBwYXJlbnQgY2xpZW50IG9mIGFuIEF2YWhpSG9zdE5hbWVSZXNvbHZlciBvYmplY3QgKi8KK0F2YWhpQ2xpZW50KiBhdmFoaV9ob3N0X25hbWVfcmVzb2x2ZXJfZ2V0X2NsaWVudCAoQXZhaGlIb3N0TmFtZVJlc29sdmVyICopOworCisvKiogRnJlZSBhIGhvc3RuYW1lIHJlc29sdmVyIG9iamVjdCAqLworaW50IGF2YWhpX2hvc3RfbmFtZV9yZXNvbHZlcl9mcmVlKEF2YWhpSG9zdE5hbWVSZXNvbHZlciAqcik7CisKKy8qKiBBbiBhZGRyZXNzIHJlc29sdmVyIG9iamVjdCAqLwordHlwZWRlZiBzdHJ1Y3QgQXZhaGlBZGRyZXNzUmVzb2x2ZXIgQXZhaGlBZGRyZXNzUmVzb2x2ZXI7CisKKy8qKiBUaGUgZnVuY3Rpb24gcHJvdG90eXBlIGZvciB0aGUgY2FsbGJhY2sgb2YgYW4gQXZhaGlBZGRyZXNzUmVzb2x2ZXIgKi8KK3R5cGVkZWYgdm9pZCAoKkF2YWhpQWRkcmVzc1Jlc29sdmVyQ2FsbGJhY2spICgKKyAgICBBdmFoaUFkZHJlc3NSZXNvbHZlciAqciwKKyAgICBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLAorICAgIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsCisgICAgQXZhaGlSZXNvbHZlckV2ZW50IGV2ZW50LAorICAgIGNvbnN0IEF2YWhpQWRkcmVzcyAqYSwKKyAgICBjb25zdCBjaGFyICpuYW1lLAorICAgIEF2YWhpTG9va3VwUmVzdWx0RmxhZ3MgZmxhZ3MsCisgICAgdm9pZCAqdXNlcmRhdGEpOworCisvKiogQ3JlYXRlIGEgbmV3IGFkZHJlc3MgcmVzb2x2ZXIgb2JqZWN0IGZyb20gYW4gQXZhaGlBZGRyZXNzIG9iamVjdCAqLworQXZhaGlBZGRyZXNzUmVzb2x2ZXIqIGF2YWhpX2FkZHJlc3NfcmVzb2x2ZXJfbmV3KAorICAgIEF2YWhpQ2xpZW50ICpjbGllbnQsCisgICAgQXZhaGlJZkluZGV4IGludGVyZmFjZSwKKyAgICBBdmFoaVByb3RvY29sIHByb3RvY29sLAorICAgIGNvbnN0IEF2YWhpQWRkcmVzcyAqYSwKKyAgICBBdmFoaUxvb2t1cEZsYWdzIGZsYWdzLAorICAgIEF2YWhpQWRkcmVzc1Jlc29sdmVyQ2FsbGJhY2sgY2FsbGJhY2ssCisgICAgdm9pZCAqdXNlcmRhdGEpOworCisvKiogR2V0IHRoZSBwYXJlbnQgY2xpZW50IG9mIGFuIEF2YWhpQWRkcmVzc1Jlc29sdmVyIG9iamVjdCAqLworQXZhaGlDbGllbnQqIGF2YWhpX2FkZHJlc3NfcmVzb2x2ZXJfZ2V0X2NsaWVudCAoQXZhaGlBZGRyZXNzUmVzb2x2ZXIgKik7CisKKy8qKiBGcmVlIGEgQXZhaGlBZGRyZXNzUmVzb2x2ZXIgcmVzb2x2ZXIgb2JqZWN0ICovCitpbnQgYXZhaGlfYWRkcmVzc19yZXNvbHZlcl9mcmVlKEF2YWhpQWRkcmVzc1Jlc29sdmVyICpyKTsKKworLyoqIFxlbmRjb25kICovCisKKy8qKiBAeyBcbmFtZSBSZWNvcmQgQnJvd3NlciAqLworCisvKiogQSByZWNvcmQgYnJvd3NlciBvYmplY3QgKi8KK3R5cGVkZWYgc3RydWN0IEF2YWhpUmVjb3JkQnJvd3NlciBBdmFoaVJlY29yZEJyb3dzZXI7CisKKy8qKiBUaGUgZnVuY3Rpb24gcHJvdG90eXBlIGZvciB0aGUgY2FsbGJhY2sgb2YgYW4gQXZhaGlSZWNvcmRCcm93c2VyICovCit0eXBlZGVmIHZvaWQgKCpBdmFoaVJlY29yZEJyb3dzZXJDYWxsYmFjaykgKAorICAgIEF2YWhpUmVjb3JkQnJvd3NlciAqYiwKKyAgICBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLAorICAgIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsCisgICAgQXZhaGlCcm93c2VyRXZlbnQgZXZlbnQsCisgICAgY29uc3QgY2hhciAqbmFtZSwKKyAgICB1aW50MTZfdCBjbGF6eiwKKyAgICB1aW50MTZfdCB0eXBlLAorICAgIGNvbnN0IHZvaWQgKnJkYXRhLAorICAgIHNpemVfdCBzaXplLAorICAgIEF2YWhpTG9va3VwUmVzdWx0RmxhZ3MgZmxhZ3MsCisgICAgdm9pZCAqdXNlcmRhdGEpOworCisvKiogQnJvd3NlIGZvciByZWNvcmRzIG9mIGEgdHlwZSBvbiB0aGUgbG9jYWwgbmV0d29yayAqLworQXZhaGlSZWNvcmRCcm93c2VyKiBhdmFoaV9yZWNvcmRfYnJvd3Nlcl9uZXcoCisgICAgQXZhaGlDbGllbnQgKmNsaWVudCwKKyAgICBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLAorICAgIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsCisgICAgY29uc3QgY2hhciAqbmFtZSwKKyAgICB1aW50MTZfdCBjbGF6eiwKKyAgICB1aW50MTZfdCB0eXBlLAorICAgIEF2YWhpTG9va3VwRmxhZ3MgZmxhZ3MsCisgICAgQXZhaGlSZWNvcmRCcm93c2VyQ2FsbGJhY2sgY2FsbGJhY2ssCisgICAgdm9pZCAqdXNlcmRhdGEpOworCisvKiogR2V0IHRoZSBwYXJlbnQgY2xpZW50IG9mIGFuIEF2YWhpUmVjb3JkQnJvd3NlciBvYmplY3QgKi8KK0F2YWhpQ2xpZW50KiBhdmFoaV9yZWNvcmRfYnJvd3Nlcl9nZXRfY2xpZW50KEF2YWhpUmVjb3JkQnJvd3NlciAqKTsKKworLyoqIENsZWFucyB1cCBhbmQgZnJlZXMgYW4gQXZhaGlSZWNvcmRCcm93c2VyIG9iamVjdCAqLworaW50IGF2YWhpX3JlY29yZF9icm93c2VyX2ZyZWUoQXZhaGlSZWNvcmRCcm93c2VyICopOworCisvKiogQH0gKi8KKworQVZBSElfQ19ERUNMX0VORAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jbGllbnQvcHVibGlzaC5oIGIvYXZhaGktMC42LjMxL2F2YWhpLWNsaWVudC9wdWJsaXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE3MzFmMgotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jbGllbnQvcHVibGlzaC5oCkBAIC0wLDAgKzEsMTcyIEBACisjaWZuZGVmIGZvb2NsaWVudHB1Ymxpc2hoZm9vCisjZGVmaW5lIGZvb2NsaWVudHB1Ymxpc2hoZm9vCisKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2luY2x1ZGUgPGludHR5cGVzLmg+CisKKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vY2RlY2wuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vYWRkcmVzcy5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9zdHJsc3QuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vZGVmcy5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi93YXRjaC5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9nY2NtYWNyby5oPgorCisjaW5jbHVkZSA8YXZhaGktY2xpZW50L2NsaWVudC5oPgorCisvKiogXGZpbGUgYXZhaGktY2xpZW50L3B1Ymxpc2guaCBQdWJsaXNoaW5nIENsaWVudCBBUEkgKi8KKworLyoqIFxleGFtcGxlIGNsaWVudC1wdWJsaXNoLXNlcnZpY2UuYyBFeGFtcGxlIGhvdyB0byByZWdpc3RlciBhIEROUy1TRAorICogc2VydmljZSB1c2luZyB0aGUgY2xpZW50IGludGVyZmFjZSB0byBhdmFoaS1kYWVtb24uIEl0IGJlaGF2ZXMgbGlrZSBhIG5ldHdvcmsKKyAqIHByaW50ZXIgcmVnaXN0ZXJpbmcgYm90aCBhbiBJUFAgYW5kIGEgQlNEIExQUiBzZXJ2aWNlLiAqLworCitBVkFISV9DX0RFQ0xfQkVHSU4KKworLyoqIEFuIGVudHJ5IGdyb3VwIG9iamVjdCAqLwordHlwZWRlZiBzdHJ1Y3QgQXZhaGlFbnRyeUdyb3VwIEF2YWhpRW50cnlHcm91cDsKKworLyoqIFRoZSBmdW5jdGlvbiBwcm90b3R5cGUgZm9yIHRoZSBjYWxsYmFjayBvZiBhbiBBdmFoaUVudHJ5R3JvdXAgKi8KK3R5cGVkZWYgdm9pZCAoKkF2YWhpRW50cnlHcm91cENhbGxiYWNrKSAoCisgICAgQXZhaGlFbnRyeUdyb3VwICpnLAorICAgIEF2YWhpRW50cnlHcm91cFN0YXRlIHN0YXRlIC8qKjwgVGhlIG5ldyBzdGF0ZSBvZiB0aGUgZW50cnkgZ3JvdXAgKi8sCisgICAgdm9pZCogdXNlcmRhdGEgLyogVGhlIGFyYml0cmFyeSB1c2VyIGRhdGEgcG9pbnRlciBvcmlnaW5hbGx5IHBhc3NlZCB0byBhdmFoaV9lbnRyeV9ncm91cF9uZXcoKSovKTsKKworLyoqIEB7IFxuYW1lIENvbnN0cnVjdGlvbiBhbmQgZGVzdHJ1Y3Rpb24gKi8KKworLyoqIENyZWF0ZSBhIG5ldyBBdmFoaUVudHJ5R3JvdXAgb2JqZWN0ICovCitBdmFoaUVudHJ5R3JvdXAqIGF2YWhpX2VudHJ5X2dyb3VwX25ldygKKyAgICBBdmFoaUNsaWVudCogYywKKyAgICBBdmFoaUVudHJ5R3JvdXBDYWxsYmFjayBjYWxsYmFjayAvKio8IFRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW5ldmVyIHRoZSBzdGF0ZSBvZiB0aGlzIGVudHJ5IGdyb3VwIGNoYW5nZXMuIE1heSBub3QgYmUgTlVMTC4gUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmb3IgdGhlIGZpcnN0IHRpbWUgZnJvbSB3aXRoaW4gdGhlIGF2YWhpX2VudHJ5X2dyb3VwX25ldygpIGNvbnRleHQhIFRodXMsIGluIHRoZSBjYWxsYmFjayB5b3Ugc2hvdWxkIG5vdCBtYWtlIHVzZSBvZiBnbG9iYWwgdmFyaWFibGVzIHRoYXQgYXJlIGluaXRpYWxpemVkIG9ubHkgYWZ0ZXIgeW91ciBjYWxsIHRvIGF2YWhpX2VudHJ5X2dyb3VwX25ldygpLiBBIGNvbW1vbiBtaXN0YWtlIGlzIHRvIHN0b3JlIHRoZSBBdmFoaUVudHJ5R3JvdXAgcG9pbnRlciByZXR1cm5lZCBieSBhdmFoaV9lbnRyeV9ncm91cF9uZXcoKSBpbiBhIGdsb2JhbCB2YXJpYWJsZSBhbmQgYXNzdW1lIHRoYXQgdGhpcyBnbG9iYWwgdmFyaWFibGUgYWxyZWFkeSBjb250YWlucyB0aGUgdmFsaWQgcG9pbnRlciB3aGVuIHRoZSBjYWxsYmFjayBpcyBjYWxsZWQgZm9yIHRoZSBmaXJzdCB0aW1lLiBBIHdvcmstYXJvdW5kIGZvciB0aGlzIGlzIHRvIGFsd2F5cyB1c2UgdGhlIEF2YWhpRW50cnlHcm91cCBwb2ludGVyIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaW5zdGVhZCBvZiB0aGUgZ2xvYmFsIHBvaW50ZXIuICovLAorICAgIHZvaWQgKnVzZXJkYXRhIC8qKjwgVGhpcyBhcmJpdHJhcnkgdXNlciBkYXRhIHBvaW50ZXIgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0b24gKi8pOworCisvKiogQ2xlYW4gdXAgYW5kIGZyZWUgYW4gQXZhaGlFbnRyeUdyb3VwIG9iamVjdCAqLworaW50IGF2YWhpX2VudHJ5X2dyb3VwX2ZyZWUgKEF2YWhpRW50cnlHcm91cCAqKTsKKworLyoqIEB9ICovCisKKy8qKiBAeyBcbmFtZSBTdGF0ZSAqLworCisvKiogQ29tbWl0IGFuIEF2YWhpRW50cnlHcm91cC4gVGhlIGVudHJpZXMgaW4gdGhlIGVudHJ5IGdyb3VwIGFyZSBub3cgcmVnaXN0ZXJlZCBvbiB0aGUgbmV0d29yay4gQ29tbWl0aW5nIGVtcHR5IGVudHJ5IGdyb3VwcyBpcyBjb25zaWRlcmVkIGFuIGVycm9yLiAqLworaW50IGF2YWhpX2VudHJ5X2dyb3VwX2NvbW1pdCAoQXZhaGlFbnRyeUdyb3VwKik7CisKKy8qKiBSZXNldCBhbiBBdmFoaUVudHJ5R3JvdXAuIFRoaXMgdGFrZXMgZWZmZWN0IGltbWVkaWF0ZWx5LiAqLworaW50IGF2YWhpX2VudHJ5X2dyb3VwX3Jlc2V0IChBdmFoaUVudHJ5R3JvdXAqKTsKKworLyoqIEdldCBhbiBBdmFoaUVudHJ5R3JvdXAncyBzdGF0ZSAqLworaW50IGF2YWhpX2VudHJ5X2dyb3VwX2dldF9zdGF0ZSAoQXZhaGlFbnRyeUdyb3VwKik7CisKKy8qKiBDaGVjayBpZiBhbiBBdmFoaUVudHJ5R3JvdXAgaXMgZW1wdHkgKi8KK2ludCBhdmFoaV9lbnRyeV9ncm91cF9pc19lbXB0eSAoQXZhaGlFbnRyeUdyb3VwKik7CisKKy8qKiBHZXQgYW4gQXZhaGlFbnRyeUdyb3VwJ3Mgb3duaW5nIGNsaWVudCBpbnN0YW5jZSAqLworQXZhaGlDbGllbnQqIGF2YWhpX2VudHJ5X2dyb3VwX2dldF9jbGllbnQgKEF2YWhpRW50cnlHcm91cCopOworCisvKiogQH0gKi8KKworLyoqIEB7IFxuYW1lIEFkZGluZyBhbmQgdXBkYXRpbmcgZW50cmllcyAqLworCisvKiogQWRkIGEgc2VydmljZS4gVGFrZXMgYSB2YXJpYWJsZSBOVUxMIHRlcm1pbmF0ZWQgbGlzdCBvZiBUWFQgcmVjb3JkIHN0cmluZ3MgYXMgbGFzdCBhcmd1bWVudHMuIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBzZXJ2aWNlIGlzIG5vdCBhbm5vdW5jZWQgb24gdGhlIG5ldHdvcmsgYmVmb3JlIGF2YWhpX2VudHJ5X2dyb3VwX2NvbW1pdCgpIGlzIGNhbGxlZC4gKi8KK2ludCBhdmFoaV9lbnRyeV9ncm91cF9hZGRfc2VydmljZSgKKyAgICBBdmFoaUVudHJ5R3JvdXAgKmdyb3VwLAorICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UgLyoqPCBUaGUgaW50ZXJmYWNlIHRoaXMgc2VydmljZSBzaGFsbCBiZSBhbm5vdW5jZWQgb24uIFdlIHJlY29tbWVuZCB0byBwYXNzIEFWQUhJX0lGX1VOU1BFQyBoZXJlLCB0byBhbm5vdW5jZSBvbiBhbGwgaW50ZXJmYWNlcy4gKi8sCisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCAvKio8IFRoZSBwcm90b2NvbCB0aGlzIHNlcnZpY2Ugc2hhbGwgYmUgYW5ub3VuY2VkIHdpdGgsIGkuZS4gTUROUyBvdmVyIElQVjQgb3IgTUROUyBvdmVyIElQVjYuIFdlIHJlY29tbWVuZCB0byBwYXNzIEFWQUhJX1BST1RPX1VOU1BFQyBoZXJlLCB0byBhbm5vdW5jZSB0aGlzIHNlcnZpY2Ugb24gYWxsIHByb3RvY29scyB0aGUgZGFlbW9uIHN1cHBvcnRzLiAqLywKKyAgICBBdmFoaVB1Ymxpc2hGbGFncyBmbGFncyAvKio8IFVzdWFsbHkgMCwgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGRvICovLAorICAgIGNvbnN0IGNoYXIgKm5hbWUgICAgICAgIC8qKjwgVGhlIG5hbWUgZm9yIHRoZSBuZXcgc2VydmljZS4gTXVzdCBiZSB2YWxpZCBzZXJ2aWNlIG5hbWUuIGkuZS4gYSBzdHJpbmcgc2hvcnRlciB0aGFuIDYzIGNoYXJhY3RlcnMgYW5kIHZhbGlkIFVURi04LiBNYXkgbm90IGJlIE5VTEwuICovLAorICAgIGNvbnN0IGNoYXIgKnR5cGUgICAgICAgIC8qKjwgVGhlIHNlcnZpY2UgdHlwZSBmb3IgdGhlIG5ldyBzZXJ2aWNlLCBzdWNoIGFzIF9odHRwLl90Y3AuIE1heSBub3QgYmUgTlVMTC4gKi8sCisgICAgY29uc3QgY2hhciAqZG9tYWluICAgICAgLyoqPCBUaGUgZG9tYWluIHRvIHJlZ2lzdGVyIHRoaXMgZG9tYWluIGluLiBXZSByZWNvbW1lbmQgdG8gcGFzcyBOVUxMIGhlcmUsIHRvIGxldCB0aGUgZGFlbW9uIGRlY2lkZSAqLywKKyAgICBjb25zdCBjaGFyICpob3N0ICAgICAgICAvKio8IFRoZSBob3N0IHRoaXMgc2VydmljZXMgaXMgcmVzaWRpbmcgb24uIFdlIHJlY29tbWVuZCB0byBwYXNzIE5VTEwgaGVyZSwgdGhlIGRhZW1vbiB3aWxsIHRoYW4gYXV0b21hdGljYWxseSBpbnNlcnQgdGhlIGxvY2FsIGhvc3QgbmFtZSBpbiB0aGF0IGNhc2UgKi8sCisgICAgdWludDE2X3QgcG9ydCAgICAgICAgICAgLyoqPCBUaGUgSVAgcG9ydCBudW1iZXIgb2YgdGhpcyBzZXJ2aWNlICovLAorICAgIC4uLikgQVZBSElfR0NDX1NFTlRJTkVMOworCisvKiogQWRkIGEgc2VydmljZSwgdGFrZXMgYW4gQXZhaGlTdHJpbmdMaXN0IGZvciBUWFQgcmVjb3Jkcy4gQXJndW1lbnRzIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBhcyBmb3IgYXZhaGlfZW50cnlfZ3JvdXBfYWRkX3NlcnZpY2UoKS4gKi8KK2ludCBhdmFoaV9lbnRyeV9ncm91cF9hZGRfc2VydmljZV9zdHJsc3QoCisgICAgQXZhaGlFbnRyeUdyb3VwICpncm91cCwKKyAgICBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLAorICAgIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsCisgICAgQXZhaGlQdWJsaXNoRmxhZ3MgZmxhZ3MsCisgICAgY29uc3QgY2hhciAqbmFtZSwKKyAgICBjb25zdCBjaGFyICp0eXBlLAorICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwKKyAgICBjb25zdCBjaGFyICpob3N0LAorICAgIHVpbnQxNl90IHBvcnQsCisgICAgQXZhaGlTdHJpbmdMaXN0ICp0eHQgLyoqPCBUaGUgVFhUIGRhdGEgZm9yIHRoaXMgc2VydmljZS4gWW91IG1heSBmcmVlIHRoaXMgb2JqZWN0IGFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgaXQgaXMgbm90IHJlZmVyZW5jZWQgYW55IGZ1cnRoZXIgKi8pOworCisvKiogQWRkIGEgc3VidHlwZSBmb3IgYSBzZXJ2aWNlLiBUaGUgc2VydmljZSBzaG91bGQgYWxyZWFkeSBiZSBleGlzdGVudCBpbiB0aGUgZW50cnkgZ3JvdXAuIFlvdSBtYXkgYWRkIGFzIG1hbnkgc3VidHlwZXMgZm9yIGEgc2VydmljZSBhcyB5b3Ugd2lzaC4gKi8KK2ludCBhdmFoaV9lbnRyeV9ncm91cF9hZGRfc2VydmljZV9zdWJ0eXBlKAorICAgIEF2YWhpRW50cnlHcm91cCAqZ3JvdXAsCisgICAgQXZhaGlJZkluZGV4IGludGVyZmFjZSAvKio8IFRoZSBpbnRlcmZhY2UgdGhpcyBzdWJ0eXBlIHNoYWxsIGJlIGFubm91bmNlZCBvbi4gVGhpcyBzaG91bGQgbWF0Y2ggdGhlIHZhbHVlIHBhc3NlZCBmb3IgdGhlIG9yaWdpbmFsIGF2YWhpX2VudHJ5X2dyb3VwX2FkZF9zZXJ2aWNlKCkgY2FsbC4gKi8sCisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCAvKio8IFRoZSBwcm90b2NvbCB0aGlzIHN1YnR5cGUgc2hhbGwgYmUgYW5ub3VuY2VkIHdpdGguIFRoaXMgc2hvdWxkIG1hdGNoIHRoZSB2YWx1ZSBwYXNzZWQgZm9yIHRoZSBvcmlnaW5hbCBhdmFoaV9lbnRyeV9ncm91cF9hZGRfc2VydmljZSgpIGNhbGwuICovLAorICAgIEF2YWhpUHVibGlzaEZsYWdzIGZsYWdzICAvKio8IE9ubHkgIT0gMCBpZiB5b3UgcmVhbGx5IGtub3cgd2hhdCB5b3UgZG8gKi8sCisgICAgY29uc3QgY2hhciAqbmFtZSAgICAgICAgIC8qKjwgVGhlIG5hbWUgb2YgdGhlIHNlcnZpY2UsIGFzIHBhc3NlZCB0byBhdmFoaV9lbnRyeV9ncm91cF9hZGRfc2VydmljZSgpLiBNYXkgbm90IGJlIE5VTEwuICovLAorICAgIGNvbnN0IGNoYXIgKnR5cGUgICAgICAgICAvKio8IFRoZSB0eXBlIG9mIHRoZSBzZXJ2aWNlLCBhcyBwYXNzZWQgdG8gYXZhaGlfZW50cnlfZ3JvdXBfYWRkX3NlcnZpY2UoKS4gTWF5IG5vdCBiZSBOVUxMLiAqLywKKyAgICBjb25zdCBjaGFyICpkb21haW4gICAgICAgLyoqPCBUaGUgZG9tYWluIHRoaXMgc2VydmljZSByZXNpZGVzIGlzLCBhcyBwYXNzZWQgdG8gYXZhaGlfZW50cnlfZ3JvdXBfYWRkX3NlcnZpY2UoKS4gTWF5IGJlIE5VTEwuICovLAorICAgIGNvbnN0IGNoYXIgKnN1YnR5cGUgLyoqPCBUaGUgbmV3IHN1YnR5cGUgdG8gcmVnaXN0ZXIgZm9yIHRoZSBzcGVjaWZpZWQgc2VydmljZS4gTWF5IG5vdCBiZSBOVUxMLiAqLyk7CisKKy8qKiBVcGRhdGUgYSBUWFQgcmVjb3JkIGZvciBhbiBleGlzdGluZyBzZXJ2aWNlLiBUaGUgc2VydmljZSBzaG91bGQgYWxyZWFkeSBiZSBleGlzdGVudCBpbiB0aGUgZW50cnkgZ3JvdXAuICovCitpbnQgYXZhaGlfZW50cnlfZ3JvdXBfdXBkYXRlX3NlcnZpY2VfdHh0KAorICAgIEF2YWhpRW50cnlHcm91cCAqZywKKyAgICBBdmFoaUlmSW5kZXggaW50ZXJmYWNlICAgLyoqPCBUaGUgaW50ZXJmYWNlIHRoaXMgc2VydmljZSBpcyBhbm5vdW5jZWQgb24uIFRoaXMgc2hvdWxkIG1hdGNoIHRoZSB2YWx1ZSBwYXNzZWQgdG8gdGhlIG9yaWdpbmFsIGF2YWhpX2VudHJ5X2dyb3VwX2FkZF9zZXJ2aWNlKCkgY2FsbC4gKi8sCisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCAgIC8qKjwgVGhlIHByb3RvY29sIHRoaXMgc2VydmljZSBpcyBhbm5vdW5jZWQgd2l0aC4gVGhpcyBzaG91bGQgbWF0Y2ggdGhlIHZhbHVlIHBhc3NlZCB0byB0aGUgb3JpZ2luYWwgYXZhaGlfZW50cnlfZ3JvdXBfYWRkX3NlcnZpY2UoKSBjYWxsLiAqLywKKyAgICBBdmFoaVB1Ymxpc2hGbGFncyBmbGFncyAgLyoqPCBPbmx5ICE9IDAgaWYgeW91IHJlYWxseSBrbm93IHdoYXQgeW91IGRvICovLAorICAgIGNvbnN0IGNoYXIgKm5hbWUgICAgICAgICAvKio8IFRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlLCBhcyBwYXNzZWQgdG8gYXZhaGlfZW50cnlfZ3JvdXBfYWRkX3NlcnZpY2UoKS4gTWF5IG5vdCBiZSBOVUxMLiAqLywKKyAgICBjb25zdCBjaGFyICp0eXBlICAgICAgICAgLyoqPCBUaGUgdHlwZSBvZiB0aGUgc2VydmljZSwgYXMgcGFzc2VkIHRvIGF2YWhpX2VudHJ5X2dyb3VwX2FkZF9zZXJ2aWNlKCkuIE1heSBub3QgYmUgTlVMTC4gKi8sCisgICAgY29uc3QgY2hhciAqZG9tYWluICAgICAgIC8qKjwgVGhlIGRvbWFpbiB0aGlzIHNlcnZpY2UgcmVzaWRlcyBpcywgYXMgcGFzc2VkIHRvIGF2YWhpX2VudHJ5X2dyb3VwX2FkZF9zZXJ2aWNlKCkuIE1heSBiZSBOVUxMLiAqLywKKyAgICAuLi4pIEFWQUhJX0dDQ19TRU5USU5FTDsKKworLyoqIFVwZGF0ZSBhIFRYVCByZWNvcmQgZm9yIGFuIGV4aXN0aW5nIHNlcnZpY2UuIFNpbWlsYXIgdG8gYXZhaGlfZW50cnlfZ3JvdXBfdXBkYXRlX3NlcnZpY2VfdHh0KCkgYnV0IHRha2VzIGFuIEF2YWhpU3RyaW5nTGlzdCBmb3IgdGhlIFRYVCBzdHJpbmdzLCBpbnN0ZWFkIG9mIGEgTlVMTCB0ZXJtaW5hdGVkIGxpc3Qgb2YgYXJndW1lbnRzLiAqLworaW50IGF2YWhpX2VudHJ5X2dyb3VwX3VwZGF0ZV9zZXJ2aWNlX3R4dF9zdHJsc3QoCisgICAgQXZhaGlFbnRyeUdyb3VwICpnLAorICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsCisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICBBdmFoaVB1Ymxpc2hGbGFncyBmbGFncywKKyAgICBjb25zdCBjaGFyICpuYW1lLAorICAgIGNvbnN0IGNoYXIgKnR5cGUsCisgICAgY29uc3QgY2hhciAqZG9tYWluLAorICAgIEF2YWhpU3RyaW5nTGlzdCAqc3RybHN0KTsKKworLyoqIFxjb25kIGZ1bGxkb2NzICovCisvKiogQWRkIGEgaG9zdC9hZGRyZXNzIHBhaXIgKi8KK2ludCBhdmFoaV9lbnRyeV9ncm91cF9hZGRfYWRkcmVzcygKKyAgICBBdmFoaUVudHJ5R3JvdXAgKmdyb3VwLAorICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsCisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICBBdmFoaVB1Ymxpc2hGbGFncyBmbGFncywKKyAgICBjb25zdCBjaGFyICpuYW1lIC8qKjwgVGhlIEZEUU4gb2YgdGhlIG5ldyBob3N0bmFtZSB0byByZWdpc3RlciAqLywKKyAgICBjb25zdCBBdmFoaUFkZHJlc3MgKmEgLyoqPCBUaGUgYWRkcmVzcyB0aGlzIGhvc3QgbmFtZSBzaGFsbCBtYXAgdG8gKi8pOworLyoqIFxlbmRjb25kICovCisKKy8qKiBBZGQgYW4gYXJiaXRyYXJ5IHJlY29yZC4gSSBob3BlIHlvdSBrbm93IHdoYXQgeW91IGRvLiAqLworaW50IGF2YWhpX2VudHJ5X2dyb3VwX2FkZF9yZWNvcmQoCisgICAgQXZhaGlFbnRyeUdyb3VwICpncm91cCwKKyAgICBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLAorICAgIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsCisgICAgQXZhaGlQdWJsaXNoRmxhZ3MgZmxhZ3MsCisgICAgY29uc3QgY2hhciAqbmFtZSwKKyAgICB1aW50MTZfdCBjbGF6eiwKKyAgICB1aW50MTZfdCB0eXBlLAorICAgIHVpbnQzMl90IHR0bCwKKyAgICBjb25zdCB2b2lkICpyZGF0YSwKKyAgICBzaXplX3Qgc2l6ZSk7CisKKy8qKiBAfSAqLworCitBVkFISV9DX0RFQ0xfRU5ECisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNsaWVudC9yZXNvbHZlci5jIGIvYXZhaGktMC42LjMxL2F2YWhpLWNsaWVudC9yZXNvbHZlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlZTE1ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY2xpZW50L3Jlc29sdmVyLmMKQEAgLTAsMCArMSw3NzggQEAKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPGRidXMvZGJ1cy5oPgorCisjaW5jbHVkZSA8YXZhaGktY2xpZW50L2NsaWVudC5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9kYnVzLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2xsaXN0Lmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2Vycm9yLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL21hbGxvYy5oPgorCisjaW5jbHVkZSAiY2xpZW50LmgiCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKworLyogQXZhaGlTZXJ2aWNlUmVzb2x2ZXIgaW1wbGVtZW50YXRpb24gKi8KKworREJ1c0hhbmRsZXJSZXN1bHQgYXZhaGlfc2VydmljZV9yZXNvbHZlcl9ldmVudCAoQXZhaGlDbGllbnQgKmNsaWVudCwgQXZhaGlSZXNvbHZlckV2ZW50IGV2ZW50LCBEQnVzTWVzc2FnZSAqbWVzc2FnZSkgeworICAgIEF2YWhpU2VydmljZVJlc29sdmVyICpyID0gTlVMTDsKKyAgICBEQnVzRXJyb3IgZXJyb3I7CisgICAgY29uc3QgY2hhciAqcGF0aDsKKyAgICBBdmFoaVN0cmluZ0xpc3QgKnN0cmxzdCA9IE5VTEw7CisKKyAgICBhc3NlcnQoY2xpZW50KTsKKyAgICBhc3NlcnQobWVzc2FnZSk7CisKKyAgICBkYnVzX2Vycm9yX2luaXQgKCZlcnJvcik7CisKKyAgICBpZiAoIShwYXRoID0gZGJ1c19tZXNzYWdlX2dldF9wYXRoKG1lc3NhZ2UpKSkKKyAgICAgICAgZ290byBmYWlsOworCisgICAgZm9yIChyID0gY2xpZW50LT5zZXJ2aWNlX3Jlc29sdmVyczsgcjsgciA9IHItPnNlcnZpY2VfcmVzb2x2ZXJzX25leHQpCisgICAgICAgIGlmIChzdHJjbXAgKHItPnBhdGgsIHBhdGgpID09IDApCisgICAgICAgICAgICBicmVhazsKKworICAgIGlmICghcikKKyAgICAgICAgZ290byBmYWlsOworCisgICAgc3dpdGNoIChldmVudCkgeworICAgICAgICBjYXNlIEFWQUhJX1JFU09MVkVSX0ZPVU5EOiB7CisgICAgICAgICAgICBpbnQgajsKKyAgICAgICAgICAgIGludDMyX3QgaW50ZXJmYWNlLCBwcm90b2NvbCwgYXByb3RvY29sOworICAgICAgICAgICAgdWludDMyX3QgZmxhZ3M7CisgICAgICAgICAgICBjaGFyICpuYW1lLCAqdHlwZSwgKmRvbWFpbiwgKmhvc3QsICphZGRyZXNzOworICAgICAgICAgICAgdWludDE2X3QgcG9ydDsKKyAgICAgICAgICAgIERCdXNNZXNzYWdlSXRlciBpdGVyLCBzdWI7CisgICAgICAgICAgICBBdmFoaUFkZHJlc3MgYTsKKworICAgICAgICAgICAgaWYgKCFkYnVzX21lc3NhZ2VfZ2V0X2FyZ3MoCisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UsICZlcnJvciwKKyAgICAgICAgICAgICAgICAgICAgREJVU19UWVBFX0lOVDMyLCAmaW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICAgICBEQlVTX1RZUEVfSU5UMzIsICZwcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgREJVU19UWVBFX1NUUklORywgJm5hbWUsCisgICAgICAgICAgICAgICAgICAgIERCVVNfVFlQRV9TVFJJTkcsICZ0eXBlLAorICAgICAgICAgICAgICAgICAgICBEQlVTX1RZUEVfU1RSSU5HLCAmZG9tYWluLAorICAgICAgICAgICAgICAgICAgICBEQlVTX1RZUEVfU1RSSU5HLCAmaG9zdCwKKyAgICAgICAgICAgICAgICAgICAgREJVU19UWVBFX0lOVDMyLCAmYXByb3RvY29sLAorICAgICAgICAgICAgICAgICAgICBEQlVTX1RZUEVfU1RSSU5HLCAmYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgREJVU19UWVBFX1VJTlQxNiwgJnBvcnQsCisgICAgICAgICAgICAgICAgICAgIERCVVNfVFlQRV9JTlZBTElEKSB8fAorICAgICAgICAgICAgICAgIGRidXNfZXJyb3JfaXNfc2V0ICgmZXJyb3IpKSB7CisKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBwYXJzZSByZXNvbHZlciBldmVudC5cbiIpOworICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGJ1c19tZXNzYWdlX2l0ZXJfaW5pdChtZXNzYWdlLCAmaXRlcik7CisKKyAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCA5OyBqKyspCisgICAgICAgICAgICAgICAgZGJ1c19tZXNzYWdlX2l0ZXJfbmV4dCgmaXRlcik7CisKKyAgICAgICAgICAgIGlmIChkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYXJnX3R5cGUoJml0ZXIpICE9IERCVVNfVFlQRV9BUlJBWSB8fAorICAgICAgICAgICAgICAgIGRidXNfbWVzc2FnZV9pdGVyX2dldF9lbGVtZW50X3R5cGUoJml0ZXIpICE9IERCVVNfVFlQRV9BUlJBWSkgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IgcGFyc2luZyBzZXJ2aWNlIHJlc29sdmluZyBtZXNzYWdlXG4iKTsKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN0cmxzdCA9IE5VTEw7CisgICAgICAgICAgICBkYnVzX21lc3NhZ2VfaXRlcl9yZWN1cnNlKCZpdGVyLCAmc3ViKTsKKworICAgICAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgICAgIERCdXNNZXNzYWdlSXRlciBzdWIyOworICAgICAgICAgICAgICAgIGludCBhdDsKKyAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICprOworICAgICAgICAgICAgICAgIGludCBuOworCisgICAgICAgICAgICAgICAgaWYgKChhdCA9IGRidXNfbWVzc2FnZV9pdGVyX2dldF9hcmdfdHlwZSgmc3ViKSkgPT0gREJVU19UWVBFX0lOVkFMSUQpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgYXNzZXJ0KGF0ID09IERCVVNfVFlQRV9BUlJBWSk7CisKKyAgICAgICAgICAgICAgICBpZiAoZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2VsZW1lbnRfdHlwZSgmc3ViKSAhPSBEQlVTX1RZUEVfQllURSkgeworICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yIHBhcnNpbmcgc2VydmljZSByZXNvbHZpbmcgbWVzc2FnZVxuIik7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBkYnVzX21lc3NhZ2VfaXRlcl9yZWN1cnNlKCZzdWIsICZzdWIyKTsKKworICAgICAgICAgICAgICAgIGsgPSBOVUxMOyBuID0gMDsKKyAgICAgICAgICAgICAgICBkYnVzX21lc3NhZ2VfaXRlcl9nZXRfZml4ZWRfYXJyYXkoJnN1YjIsICZrLCAmbik7CisgICAgICAgICAgICAgICAgaWYgKGsgJiYgbiA+IDApCisgICAgICAgICAgICAgICAgICAgIHN0cmxzdCA9IGF2YWhpX3N0cmluZ19saXN0X2FkZF9hcmJpdHJhcnkoc3RybHN0LCBrLCBuKTsKKworICAgICAgICAgICAgICAgIGRidXNfbWVzc2FnZV9pdGVyX25leHQoJnN1Yik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRidXNfbWVzc2FnZV9pdGVyX25leHQoJml0ZXIpOworCisgICAgICAgICAgICBpZiAoZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2FyZ190eXBlKCZpdGVyKSAhPSBEQlVTX1RZUEVfVUlOVDMyKSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gcGFyc2UgcmVzb2x2ZXIgZXZlbnQuXG4iKTsKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRidXNfbWVzc2FnZV9pdGVyX2dldF9iYXNpYygmaXRlciwgJmZsYWdzKTsKKworICAgICAgICAgICAgYXNzZXJ0KGFkZHJlc3MpOworCisgICAgICAgICAgICBpZiAoYWRkcmVzc1swXSA9PSAwKQorICAgICAgICAgICAgICAgIGFkZHJlc3MgPSBOVUxMOworCSAgICBlbHNlCisgICAgICAgICAgICAJYXZhaGlfYWRkcmVzc19wYXJzZShhZGRyZXNzLCAoQXZhaGlQcm90b2NvbCkgYXByb3RvY29sLCAmYSk7CisKKyAgICAgICAgICAgIHItPmNhbGxiYWNrKHIsIChBdmFoaUlmSW5kZXgpIGludGVyZmFjZSwgKEF2YWhpUHJvdG9jb2wpIHByb3RvY29sLCBBVkFISV9SRVNPTFZFUl9GT1VORCwgbmFtZSwgdHlwZSwgZG9tYWluLCBob3N0LCBhZGRyZXNzID8gJmEgOiBOVUxMLCBwb3J0LCBzdHJsc3QsIChBdmFoaUxvb2t1cFJlc3VsdEZsYWdzKSBmbGFncywgci0+dXNlcmRhdGEpOworCisgICAgICAgICAgICBhdmFoaV9zdHJpbmdfbGlzdF9mcmVlKHN0cmxzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgQVZBSElfUkVTT0xWRVJfRkFJTFVSRTogeworICAgICAgICAgICAgY2hhciAqZXR4dDsKKworICAgICAgICAgICAgaWYgKCFkYnVzX21lc3NhZ2VfZ2V0X2FyZ3MoCisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UsICZlcnJvciwKKyAgICAgICAgICAgICAgICAgICAgREJVU19UWVBFX1NUUklORywgJmV0eHQsCisgICAgICAgICAgICAgICAgICAgIERCVVNfVFlQRV9JTlZBTElEKSB8fAorICAgICAgICAgICAgICAgIGRidXNfZXJyb3JfaXNfc2V0ICgmZXJyb3IpKSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gcGFyc2UgcmVzb2x2ZXIgZXZlbnQuXG4iKTsKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGF2YWhpX2NsaWVudF9zZXRfZXJybm8oci0+Y2xpZW50LCBhdmFoaV9lcnJvcl9kYnVzX3RvX251bWJlcihldHh0KSk7CisgICAgICAgICAgICByLT5jYWxsYmFjayhyLCByLT5pbnRlcmZhY2UsIHItPnByb3RvY29sLCBldmVudCwgci0+bmFtZSwgci0+dHlwZSwgci0+ZG9tYWluLCBOVUxMLCBOVUxMLCAwLCBOVUxMLCAwLCByLT51c2VyZGF0YSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBEQlVTX0hBTkRMRVJfUkVTVUxUX0hBTkRMRUQ7CisKKworZmFpbDoKKyAgICBkYnVzX2Vycm9yX2ZyZWUgKCZlcnJvcik7CisgICAgYXZhaGlfc3RyaW5nX2xpc3RfZnJlZShzdHJsc3QpOworICAgIHJldHVybiBEQlVTX0hBTkRMRVJfUkVTVUxUX05PVF9ZRVRfSEFORExFRDsKK30KKworQXZhaGlTZXJ2aWNlUmVzb2x2ZXIgKiBhdmFoaV9zZXJ2aWNlX3Jlc29sdmVyX25ldygKKyAgICBBdmFoaUNsaWVudCAqY2xpZW50LAorICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsCisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICBjb25zdCBjaGFyICpuYW1lLAorICAgIGNvbnN0IGNoYXIgKnR5cGUsCisgICAgY29uc3QgY2hhciAqZG9tYWluLAorICAgIEF2YWhpUHJvdG9jb2wgYXByb3RvY29sLAorICAgIEF2YWhpTG9va3VwRmxhZ3MgZmxhZ3MsCisgICAgQXZhaGlTZXJ2aWNlUmVzb2x2ZXJDYWxsYmFjayBjYWxsYmFjaywKKyAgICB2b2lkICp1c2VyZGF0YSkgeworCisgICAgREJ1c0Vycm9yIGVycm9yOworICAgIEF2YWhpU2VydmljZVJlc29sdmVyICpyID0gTlVMTDsKKyAgICBEQnVzTWVzc2FnZSAqbWVzc2FnZSA9IE5VTEwsICpyZXBseSA9IE5VTEw7CisgICAgaW50MzJfdCBpX2ludGVyZmFjZSwgaV9wcm90b2NvbCwgaV9hcHJvdG9jb2w7CisgICAgdWludDMyX3QgdV9mbGFnczsKKyAgICBjaGFyICpwYXRoOworCisgICAgYXNzZXJ0KGNsaWVudCk7CisgICAgYXNzZXJ0KHR5cGUpOworCisgICAgaWYgKCFkb21haW4pCisgICAgICAgIGRvbWFpbiA9ICIiOworCisgICAgaWYgKCFuYW1lKQorICAgICAgICBuYW1lID0gIiI7CisKKyAgICBkYnVzX2Vycm9yX2luaXQgKCZlcnJvcik7CisKKyAgICBpZiAoIWF2YWhpX2NsaWVudF9pc19jb25uZWN0ZWQoY2xpZW50KSkgeworICAgICAgICBhdmFoaV9jbGllbnRfc2V0X2Vycm5vKGNsaWVudCwgQVZBSElfRVJSX0JBRF9TVEFURSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBpZiAoIShyID0gYXZhaGlfbmV3KEF2YWhpU2VydmljZVJlc29sdmVyLCAxKSkpIHsKKyAgICAgICAgYXZhaGlfY2xpZW50X3NldF9lcnJubyhjbGllbnQsIEFWQUhJX0VSUl9OT19NRU1PUlkpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgci0+Y2xpZW50ID0gY2xpZW50OworICAgIHItPmNhbGxiYWNrID0gY2FsbGJhY2s7CisgICAgci0+dXNlcmRhdGEgPSB1c2VyZGF0YTsKKyAgICByLT5wYXRoID0gTlVMTDsKKyAgICByLT5uYW1lID0gci0+dHlwZSA9IHItPmRvbWFpbiA9IE5VTEw7CisgICAgci0+aW50ZXJmYWNlID0gaW50ZXJmYWNlOworICAgIHItPnByb3RvY29sID0gcHJvdG9jb2w7CisKKyAgICBBVkFISV9MTElTVF9QUkVQRU5EKEF2YWhpU2VydmljZVJlc29sdmVyLCBzZXJ2aWNlX3Jlc29sdmVycywgY2xpZW50LT5zZXJ2aWNlX3Jlc29sdmVycywgcik7CisKKyAgICBpZiAobmFtZSAmJiBuYW1lWzBdKQorICAgICAgICBpZiAoIShyLT5uYW1lID0gYXZhaGlfc3RyZHVwKG5hbWUpKSkgeworICAgICAgICAgICAgYXZhaGlfY2xpZW50X3NldF9lcnJubyhjbGllbnQsIEFWQUhJX0VSUl9OT19NRU1PUlkpOworICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CisKKyAgICBpZiAoIShyLT50eXBlID0gYXZhaGlfc3RyZHVwKHR5cGUpKSkgeworICAgICAgICBhdmFoaV9jbGllbnRfc2V0X2Vycm5vKGNsaWVudCwgQVZBSElfRVJSX05PX01FTU9SWSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBpZiAoZG9tYWluICYmIGRvbWFpblswXSkKKyAgICAgICAgaWYgKCEoci0+ZG9tYWluID0gYXZhaGlfc3RyZHVwKGRvbWFpbikpKSB7CisgICAgICAgICAgICBhdmFoaV9jbGllbnRfc2V0X2Vycm5vKGNsaWVudCwgQVZBSElfRVJSX05PX01FTU9SWSk7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKworCisgICAgaWYgKCEobWVzc2FnZSA9IGRidXNfbWVzc2FnZV9uZXdfbWV0aG9kX2NhbGwoQVZBSElfREJVU19OQU1FLCBBVkFISV9EQlVTX1BBVEhfU0VSVkVSLCBBVkFISV9EQlVTX0lOVEVSRkFDRV9TRVJWRVIsICJTZXJ2aWNlUmVzb2x2ZXJOZXciKSkpIHsKKyAgICAgICAgYXZhaGlfY2xpZW50X3NldF9lcnJubyhjbGllbnQsIEFWQUhJX0VSUl9OT19NRU1PUlkpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaV9pbnRlcmZhY2UgPSAoaW50MzJfdCkgaW50ZXJmYWNlOworICAgIGlfcHJvdG9jb2wgPSAoaW50MzJfdCkgcHJvdG9jb2w7CisgICAgaV9hcHJvdG9jb2wgPSAoaW50MzJfdCkgYXByb3RvY29sOworICAgIHVfZmxhZ3MgPSAodWludDMyX3QpIGZsYWdzOworCisgICAgaWYgKCEoZGJ1c19tZXNzYWdlX2FwcGVuZF9hcmdzKAorICAgICAgICAgICAgICBtZXNzYWdlLAorICAgICAgICAgICAgICBEQlVTX1RZUEVfSU5UMzIsICZpX2ludGVyZmFjZSwKKyAgICAgICAgICAgICAgREJVU19UWVBFX0lOVDMyLCAmaV9wcm90b2NvbCwKKyAgICAgICAgICAgICAgREJVU19UWVBFX1NUUklORywgJm5hbWUsCisgICAgICAgICAgICAgIERCVVNfVFlQRV9TVFJJTkcsICZ0eXBlLAorICAgICAgICAgICAgICBEQlVTX1RZUEVfU1RSSU5HLCAmZG9tYWluLAorICAgICAgICAgICAgICBEQlVTX1RZUEVfSU5UMzIsICZpX2Fwcm90b2NvbCwKKyAgICAgICAgICAgICAgREJVU19UWVBFX1VJTlQzMiwgJnVfZmxhZ3MsCisgICAgICAgICAgICAgIERCVVNfVFlQRV9JTlZBTElEKSkpIHsKKyAgICAgICAgYXZhaGlfY2xpZW50X3NldF9lcnJubyhjbGllbnQsIEFWQUhJX0VSUl9OT19NRU1PUlkpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKCEocmVwbHkgPSBkYnVzX2Nvbm5lY3Rpb25fc2VuZF93aXRoX3JlcGx5X2FuZF9ibG9jayhjbGllbnQtPmJ1cywgbWVzc2FnZSwgLTEsICZlcnJvcikpIHx8CisgICAgICAgIGRidXNfZXJyb3JfaXNfc2V0KCZlcnJvcikpIHsKKyAgICAgICAgYXZhaGlfY2xpZW50X3NldF9lcnJubyhjbGllbnQsIEFWQUhJX0VSUl9EQlVTX0VSUk9SKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGlmICghZGJ1c19tZXNzYWdlX2dldF9hcmdzIChyZXBseSwgJmVycm9yLCBEQlVTX1RZUEVfT0JKRUNUX1BBVEgsICZwYXRoLCBEQlVTX1RZUEVfSU5WQUxJRCkgfHwKKyAgICAgICAgZGJ1c19lcnJvcl9pc19zZXQoJmVycm9yKSB8fAorICAgICAgICAhcGF0aCkgeworICAgICAgICBhdmFoaV9jbGllbnRfc2V0X2Vycm5vKGNsaWVudCwgQVZBSElfRVJSX0RCVVNfRVJST1IpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKCEoci0+cGF0aCA9IGF2YWhpX3N0cmR1cChwYXRoKSkpIHsKKworICAgICAgICAvKiBGSVhNRTogV2UgZG9uJ3QgcmVtb3ZlIHRoZSBvYmplY3Qgb24gdGhlIHNlcnZlciBzaWRlICovCisKKyAgICAgICAgYXZhaGlfY2xpZW50X3NldF9lcnJubyhjbGllbnQsIEFWQUhJX0VSUl9OT19NRU1PUlkpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisKKyAgICBkYnVzX21lc3NhZ2VfdW5yZWYobWVzc2FnZSk7CisgICAgZGJ1c19tZXNzYWdlX3VucmVmKHJlcGx5KTsKKworICAgIHJldHVybiByOworCitmYWlsOgorCisgICAgaWYgKGRidXNfZXJyb3JfaXNfc2V0KCZlcnJvcikpIHsKKyAgICAgICAgYXZhaGlfY2xpZW50X3NldF9kYnVzX2Vycm9yKGNsaWVudCwgJmVycm9yKTsKKyAgICAgICAgZGJ1c19lcnJvcl9mcmVlKCZlcnJvcik7CisgICAgfQorCisgICAgaWYgKHIpCisgICAgICAgIGF2YWhpX3NlcnZpY2VfcmVzb2x2ZXJfZnJlZShyKTsKKworICAgIGlmIChtZXNzYWdlKQorICAgICAgICBkYnVzX21lc3NhZ2VfdW5yZWYobWVzc2FnZSk7CisKKyAgICBpZiAocmVwbHkpCisgICAgICAgIGRidXNfbWVzc2FnZV91bnJlZihyZXBseSk7CisKKyAgICByZXR1cm4gTlVMTDsKKworfQorCitBdmFoaUNsaWVudCogYXZhaGlfc2VydmljZV9yZXNvbHZlcl9nZXRfY2xpZW50IChBdmFoaVNlcnZpY2VSZXNvbHZlciAqcikgeworICAgIGFzc2VydCAocik7CisKKyAgICByZXR1cm4gci0+Y2xpZW50OworfQorCitpbnQgYXZhaGlfc2VydmljZV9yZXNvbHZlcl9mcmVlKEF2YWhpU2VydmljZVJlc29sdmVyICpyKSB7CisgICAgQXZhaGlDbGllbnQgKmNsaWVudDsKKyAgICBpbnQgcmV0ID0gQVZBSElfT0s7CisKKyAgICBhc3NlcnQocik7CisgICAgY2xpZW50ID0gci0+Y2xpZW50OworCisgICAgaWYgKHItPnBhdGggJiYgYXZhaGlfY2xpZW50X2lzX2Nvbm5lY3RlZChjbGllbnQpKQorICAgICAgICByZXQgPSBhdmFoaV9jbGllbnRfc2ltcGxlX21ldGhvZF9jYWxsKGNsaWVudCwgci0+cGF0aCwgQVZBSElfREJVU19JTlRFUkZBQ0VfU0VSVklDRV9SRVNPTFZFUiwgIkZyZWUiKTsKKworICAgIEFWQUhJX0xMSVNUX1JFTU9WRShBdmFoaVNlcnZpY2VSZXNvbHZlciwgc2VydmljZV9yZXNvbHZlcnMsIGNsaWVudC0+c2VydmljZV9yZXNvbHZlcnMsIHIpOworCisgICAgYXZhaGlfZnJlZShyLT5wYXRoKTsKKyAgICBhdmFoaV9mcmVlKHItPm5hbWUpOworICAgIGF2YWhpX2ZyZWUoci0+dHlwZSk7CisgICAgYXZhaGlfZnJlZShyLT5kb21haW4pOworICAgIGF2YWhpX2ZyZWUocik7CisKKyAgICByZXR1cm4gcmV0OworfQorCisvKiBBdmFoaUhvc3ROYW1lUmVzb2x2ZXIgaW1wbGVtZW50YXRpb24gKi8KKworREJ1c0hhbmRsZXJSZXN1bHQgYXZhaGlfaG9zdF9uYW1lX3Jlc29sdmVyX2V2ZW50IChBdmFoaUNsaWVudCAqY2xpZW50LCBBdmFoaVJlc29sdmVyRXZlbnQgZXZlbnQsIERCdXNNZXNzYWdlICptZXNzYWdlKSB7CisgICAgQXZhaGlIb3N0TmFtZVJlc29sdmVyICpyID0gTlVMTDsKKyAgICBEQnVzRXJyb3IgZXJyb3I7CisgICAgY29uc3QgY2hhciAqcGF0aDsKKworICAgIGFzc2VydChjbGllbnQpOworICAgIGFzc2VydChtZXNzYWdlKTsKKworICAgIGRidXNfZXJyb3JfaW5pdCAoJmVycm9yKTsKKworICAgIGlmICghKHBhdGggPSBkYnVzX21lc3NhZ2VfZ2V0X3BhdGgobWVzc2FnZSkpKQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICBmb3IgKHIgPSBjbGllbnQtPmhvc3RfbmFtZV9yZXNvbHZlcnM7IHI7IHIgPSByLT5ob3N0X25hbWVfcmVzb2x2ZXJzX25leHQpCisgICAgICAgIGlmIChzdHJjbXAgKHItPnBhdGgsIHBhdGgpID09IDApCisgICAgICAgICAgICBicmVhazsKKworICAgIGlmICghcikKKyAgICAgICAgZ290byBmYWlsOworCisgICAgc3dpdGNoIChldmVudCkgeworICAgICAgICBjYXNlIEFWQUhJX1JFU09MVkVSX0ZPVU5EOiB7CisgICAgICAgICAgICBpbnQzMl90IGludGVyZmFjZSwgcHJvdG9jb2wsIGFwcm90b2NvbDsKKyAgICAgICAgICAgIHVpbnQzMl90IGZsYWdzOworICAgICAgICAgICAgY2hhciAqbmFtZSwgKmFkZHJlc3M7CisgICAgICAgICAgICBBdmFoaUFkZHJlc3MgYTsKKworICAgICAgICAgICAgaWYgKCFkYnVzX21lc3NhZ2VfZ2V0X2FyZ3MoCisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UsICZlcnJvciwKKyAgICAgICAgICAgICAgICAgICAgREJVU19UWVBFX0lOVDMyLCAmaW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICAgICBEQlVTX1RZUEVfSU5UMzIsICZwcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgREJVU19UWVBFX1NUUklORywgJm5hbWUsCisgICAgICAgICAgICAgICAgICAgIERCVVNfVFlQRV9JTlQzMiwgJmFwcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgREJVU19UWVBFX1NUUklORywgJmFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgIERCVVNfVFlQRV9VSU5UMzIsICZmbGFncywKKyAgICAgICAgICAgICAgICAgICAgREJVU19UWVBFX0lOVkFMSUQpIHx8CisgICAgICAgICAgICAgICAgZGJ1c19lcnJvcl9pc19zZXQgKCZlcnJvcikpIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBwYXJzZSByZXNvbHZlciBldmVudC5cbiIpOworICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYXNzZXJ0KGFkZHJlc3MpOworICAgICAgICAgICAgaWYgKCFhdmFoaV9hZGRyZXNzX3BhcnNlKGFkZHJlc3MsIChBdmFoaVByb3RvY29sKSBhcHJvdG9jb2wsICZhKSkgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIHBhcnNlIGFkZHJlc3NcbiIpOworICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgci0+Y2FsbGJhY2sociwgKEF2YWhpSWZJbmRleCkgaW50ZXJmYWNlLCAoQXZhaGlQcm90b2NvbCkgcHJvdG9jb2wsIEFWQUhJX1JFU09MVkVSX0ZPVU5ELCBuYW1lLCAmYSwgKEF2YWhpTG9va3VwUmVzdWx0RmxhZ3MpIGZsYWdzLCByLT51c2VyZGF0YSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgQVZBSElfUkVTT0xWRVJfRkFJTFVSRTogeworICAgICAgICAgICAgY2hhciAqZXR4dDsKKworICAgICAgICAgICAgaWYgKCFkYnVzX21lc3NhZ2VfZ2V0X2FyZ3MoCisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UsICZlcnJvciwKKyAgICAgICAgICAgICAgICAgICAgREJVU19UWVBFX1NUUklORywgJmV0eHQsCisgICAgICAgICAgICAgICAgICAgIERCVVNfVFlQRV9JTlZBTElEKSB8fAorICAgICAgICAgICAgICAgIGRidXNfZXJyb3JfaXNfc2V0ICgmZXJyb3IpKSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gcGFyc2UgcmVzb2x2ZXIgZXZlbnQuXG4iKTsKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGF2YWhpX2NsaWVudF9zZXRfZXJybm8oci0+Y2xpZW50LCBhdmFoaV9lcnJvcl9kYnVzX3RvX251bWJlcihldHh0KSk7CisgICAgICAgICAgICByLT5jYWxsYmFjayhyLCByLT5pbnRlcmZhY2UsIHItPnByb3RvY29sLCBldmVudCwgci0+aG9zdF9uYW1lLCBOVUxMLCAwLCByLT51c2VyZGF0YSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBEQlVTX0hBTkRMRVJfUkVTVUxUX0hBTkRMRUQ7CisKK2ZhaWw6CisgICAgZGJ1c19lcnJvcl9mcmVlICgmZXJyb3IpOworICAgIHJldHVybiBEQlVTX0hBTkRMRVJfUkVTVUxUX05PVF9ZRVRfSEFORExFRDsKK30KKworCitBdmFoaUhvc3ROYW1lUmVzb2x2ZXIgKiBhdmFoaV9ob3N0X25hbWVfcmVzb2x2ZXJfbmV3KAorICAgIEF2YWhpQ2xpZW50ICpjbGllbnQsCisgICAgQXZhaGlJZkluZGV4IGludGVyZmFjZSwKKyAgICBBdmFoaVByb3RvY29sIHByb3RvY29sLAorICAgIGNvbnN0IGNoYXIgKm5hbWUsCisgICAgQXZhaGlQcm90b2NvbCBhcHJvdG9jb2wsCisgICAgQXZhaGlMb29rdXBGbGFncyBmbGFncywKKyAgICBBdmFoaUhvc3ROYW1lUmVzb2x2ZXJDYWxsYmFjayBjYWxsYmFjaywKKyAgICB2b2lkICp1c2VyZGF0YSkgeworCisgICAgREJ1c0Vycm9yIGVycm9yOworICAgIEF2YWhpSG9zdE5hbWVSZXNvbHZlciAqciA9IE5VTEw7CisgICAgREJ1c01lc3NhZ2UgKm1lc3NhZ2UgPSBOVUxMLCAqcmVwbHkgPSBOVUxMOworICAgIGludDMyX3QgaV9pbnRlcmZhY2UsIGlfcHJvdG9jb2wsIGlfYXByb3RvY29sOworICAgIHVpbnQzMl90IHVfZmxhZ3M7CisgICAgY2hhciAqcGF0aDsKKworICAgIGFzc2VydChjbGllbnQpOworICAgIGFzc2VydChuYW1lKTsKKworICAgIGRidXNfZXJyb3JfaW5pdCAoJmVycm9yKTsKKworICAgIGlmICghYXZhaGlfY2xpZW50X2lzX2Nvbm5lY3RlZChjbGllbnQpKSB7CisgICAgICAgIGF2YWhpX2NsaWVudF9zZXRfZXJybm8oY2xpZW50LCBBVkFISV9FUlJfQkFEX1NUQVRFKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGlmICghKHIgPSBhdmFoaV9uZXcoQXZhaGlIb3N0TmFtZVJlc29sdmVyLCAxKSkpIHsKKyAgICAgICAgYXZhaGlfY2xpZW50X3NldF9lcnJubyhjbGllbnQsIEFWQUhJX0VSUl9OT19NRU1PUlkpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgci0+Y2xpZW50ID0gY2xpZW50OworICAgIHItPmNhbGxiYWNrID0gY2FsbGJhY2s7CisgICAgci0+dXNlcmRhdGEgPSB1c2VyZGF0YTsKKyAgICByLT5wYXRoID0gTlVMTDsKKyAgICByLT5pbnRlcmZhY2UgPSBpbnRlcmZhY2U7CisgICAgci0+cHJvdG9jb2wgPSBwcm90b2NvbDsKKyAgICByLT5ob3N0X25hbWUgPSBOVUxMOworCisgICAgQVZBSElfTExJU1RfUFJFUEVORChBdmFoaUhvc3ROYW1lUmVzb2x2ZXIsIGhvc3RfbmFtZV9yZXNvbHZlcnMsIGNsaWVudC0+aG9zdF9uYW1lX3Jlc29sdmVycywgcik7CisKKyAgICBpZiAoIShyLT5ob3N0X25hbWUgPSBhdmFoaV9zdHJkdXAobmFtZSkpKSB7CisgICAgICAgIGF2YWhpX2NsaWVudF9zZXRfZXJybm8oY2xpZW50LCBBVkFISV9FUlJfTk9fTUVNT1JZKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGlmICghKG1lc3NhZ2UgPSBkYnVzX21lc3NhZ2VfbmV3X21ldGhvZF9jYWxsKEFWQUhJX0RCVVNfTkFNRSwgQVZBSElfREJVU19QQVRIX1NFUlZFUiwgQVZBSElfREJVU19JTlRFUkZBQ0VfU0VSVkVSLCAiSG9zdE5hbWVSZXNvbHZlck5ldyIpKSkgeworICAgICAgICBhdmFoaV9jbGllbnRfc2V0X2Vycm5vKGNsaWVudCwgQVZBSElfRVJSX05PX01FTU9SWSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBpX2ludGVyZmFjZSA9IChpbnQzMl90KSBpbnRlcmZhY2U7CisgICAgaV9wcm90b2NvbCA9IChpbnQzMl90KSBwcm90b2NvbDsKKyAgICBpX2Fwcm90b2NvbCA9IChpbnQzMl90KSBhcHJvdG9jb2w7CisgICAgdV9mbGFncyA9ICh1aW50MzJfdCkgZmxhZ3M7CisKKyAgICBpZiAoIShkYnVzX21lc3NhZ2VfYXBwZW5kX2FyZ3MoCisgICAgICAgICAgICAgIG1lc3NhZ2UsCisgICAgICAgICAgICAgIERCVVNfVFlQRV9JTlQzMiwgJmlfaW50ZXJmYWNlLAorICAgICAgICAgICAgICBEQlVTX1RZUEVfSU5UMzIsICZpX3Byb3RvY29sLAorICAgICAgICAgICAgICBEQlVTX1RZUEVfU1RSSU5HLCAmbmFtZSwKKyAgICAgICAgICAgICAgREJVU19UWVBFX0lOVDMyLCAmaV9hcHJvdG9jb2wsCisgICAgICAgICAgICAgIERCVVNfVFlQRV9VSU5UMzIsICZ1X2ZsYWdzLAorICAgICAgICAgICAgICBEQlVTX1RZUEVfSU5WQUxJRCkpKSB7CisgICAgICAgIGF2YWhpX2NsaWVudF9zZXRfZXJybm8oY2xpZW50LCBBVkFISV9FUlJfTk9fTUVNT1JZKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGlmICghKHJlcGx5ID0gZGJ1c19jb25uZWN0aW9uX3NlbmRfd2l0aF9yZXBseV9hbmRfYmxvY2soY2xpZW50LT5idXMsIG1lc3NhZ2UsIC0xLCAmZXJyb3IpKSB8fAorICAgICAgICBkYnVzX2Vycm9yX2lzX3NldCgmZXJyb3IpKSB7CisgICAgICAgIGF2YWhpX2NsaWVudF9zZXRfZXJybm8oY2xpZW50LCBBVkFISV9FUlJfREJVU19FUlJPUik7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBpZiAoIWRidXNfbWVzc2FnZV9nZXRfYXJncyAocmVwbHksICZlcnJvciwgREJVU19UWVBFX09CSkVDVF9QQVRILCAmcGF0aCwgREJVU19UWVBFX0lOVkFMSUQpIHx8CisgICAgICAgIGRidXNfZXJyb3JfaXNfc2V0KCZlcnJvcikgfHwKKyAgICAgICAgIXBhdGgpIHsKKyAgICAgICAgYXZhaGlfY2xpZW50X3NldF9lcnJubyhjbGllbnQsIEFWQUhJX0VSUl9EQlVTX0VSUk9SKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGlmICghKHItPnBhdGggPSBhdmFoaV9zdHJkdXAocGF0aCkpKSB7CisKKyAgICAgICAgLyogRklYTUU6IFdlIGRvbid0IHJlbW92ZSB0aGUgb2JqZWN0IG9uIHRoZSBzZXJ2ZXIgc2lkZSAqLworCisgICAgICAgIGF2YWhpX2NsaWVudF9zZXRfZXJybm8oY2xpZW50LCBBVkFISV9FUlJfTk9fTUVNT1JZKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGRidXNfbWVzc2FnZV91bnJlZihtZXNzYWdlKTsKKyAgICBkYnVzX21lc3NhZ2VfdW5yZWYocmVwbHkpOworCisgICAgcmV0dXJuIHI7CisKK2ZhaWw6CisKKyAgICBpZiAoZGJ1c19lcnJvcl9pc19zZXQoJmVycm9yKSkgeworICAgICAgICBhdmFoaV9jbGllbnRfc2V0X2RidXNfZXJyb3IoY2xpZW50LCAmZXJyb3IpOworICAgICAgICBkYnVzX2Vycm9yX2ZyZWUoJmVycm9yKTsKKyAgICB9CisKKyAgICBpZiAocikKKyAgICAgICAgYXZhaGlfaG9zdF9uYW1lX3Jlc29sdmVyX2ZyZWUocik7CisKKyAgICBpZiAobWVzc2FnZSkKKyAgICAgICAgZGJ1c19tZXNzYWdlX3VucmVmKG1lc3NhZ2UpOworCisgICAgaWYgKHJlcGx5KQorICAgICAgICBkYnVzX21lc3NhZ2VfdW5yZWYocmVwbHkpOworCisgICAgcmV0dXJuIE5VTEw7CisKK30KKworaW50IGF2YWhpX2hvc3RfbmFtZV9yZXNvbHZlcl9mcmVlKEF2YWhpSG9zdE5hbWVSZXNvbHZlciAqcikgeworICAgIGludCByZXQgPSBBVkFISV9PSzsKKyAgICBBdmFoaUNsaWVudCAqY2xpZW50OworCisgICAgYXNzZXJ0KHIpOworICAgIGNsaWVudCA9IHItPmNsaWVudDsKKworICAgIGlmIChyLT5wYXRoICYmIGF2YWhpX2NsaWVudF9pc19jb25uZWN0ZWQoY2xpZW50KSkKKyAgICAgICAgcmV0ID0gYXZhaGlfY2xpZW50X3NpbXBsZV9tZXRob2RfY2FsbChjbGllbnQsIHItPnBhdGgsIEFWQUhJX0RCVVNfSU5URVJGQUNFX0hPU1RfTkFNRV9SRVNPTFZFUiwgIkZyZWUiKTsKKworICAgIEFWQUhJX0xMSVNUX1JFTU9WRShBdmFoaUhvc3ROYW1lUmVzb2x2ZXIsIGhvc3RfbmFtZV9yZXNvbHZlcnMsIGNsaWVudC0+aG9zdF9uYW1lX3Jlc29sdmVycywgcik7CisKKyAgICBhdmFoaV9mcmVlKHItPnBhdGgpOworICAgIGF2YWhpX2ZyZWUoci0+aG9zdF9uYW1lKTsKKyAgICBhdmFoaV9mcmVlKHIpOworCisgICAgcmV0dXJuIHJldDsKK30KKworQXZhaGlDbGllbnQqIGF2YWhpX2hvc3RfbmFtZV9yZXNvbHZlcl9nZXRfY2xpZW50IChBdmFoaUhvc3ROYW1lUmVzb2x2ZXIgKnIpIHsKKyAgICBhc3NlcnQgKHIpOworCisgICAgcmV0dXJuIHItPmNsaWVudDsKK30KKworLyogQXZhaGlBZGRyZXNzUmVzb2x2ZXIgaW1wbGVtZW50YXRpb24gKi8KKworREJ1c0hhbmRsZXJSZXN1bHQgYXZhaGlfYWRkcmVzc19yZXNvbHZlcl9ldmVudCAoQXZhaGlDbGllbnQgKmNsaWVudCwgQXZhaGlSZXNvbHZlckV2ZW50IGV2ZW50LCBEQnVzTWVzc2FnZSAqbWVzc2FnZSkgeworICAgIEF2YWhpQWRkcmVzc1Jlc29sdmVyICpyID0gTlVMTDsKKyAgICBEQnVzRXJyb3IgZXJyb3I7CisgICAgY29uc3QgY2hhciAqcGF0aDsKKworICAgIGFzc2VydChjbGllbnQpOworICAgIGFzc2VydChtZXNzYWdlKTsKKworICAgIGRidXNfZXJyb3JfaW5pdCAoJmVycm9yKTsKKworICAgIGlmICghKHBhdGggPSBkYnVzX21lc3NhZ2VfZ2V0X3BhdGgobWVzc2FnZSkpKQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICBmb3IgKHIgPSBjbGllbnQtPmFkZHJlc3NfcmVzb2x2ZXJzOyByOyByID0gci0+YWRkcmVzc19yZXNvbHZlcnNfbmV4dCkKKyAgICAgICAgaWYgKHN0cmNtcCAoci0+cGF0aCwgcGF0aCkgPT0gMCkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgaWYgKCFyKQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICBzd2l0Y2ggKGV2ZW50KSB7CisgICAgICAgIGNhc2UgQVZBSElfUkVTT0xWRVJfRk9VTkQ6IHsKKyAgICAgICAgICAgIGludDMyX3QgaW50ZXJmYWNlLCBwcm90b2NvbCwgYXByb3RvY29sOworICAgICAgICAgICAgdWludDMyX3QgZmxhZ3M7CisgICAgICAgICAgICBjaGFyICpuYW1lLCAqYWRkcmVzczsKKyAgICAgICAgICAgIEF2YWhpQWRkcmVzcyBhOworCisgICAgICAgICAgICBpZiAoIWRidXNfbWVzc2FnZV9nZXRfYXJncygKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSwgJmVycm9yLAorICAgICAgICAgICAgICAgICAgICBEQlVTX1RZUEVfSU5UMzIsICZpbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgICAgIERCVVNfVFlQRV9JTlQzMiwgJnByb3RvY29sLAorICAgICAgICAgICAgICAgICAgICBEQlVTX1RZUEVfSU5UMzIsICZhcHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgIERCVVNfVFlQRV9TVFJJTkcsICZhZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICBEQlVTX1RZUEVfU1RSSU5HLCAmbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgREJVU19UWVBFX1VJTlQzMiwgJmZsYWdzLAorICAgICAgICAgICAgICAgICAgICBEQlVTX1RZUEVfSU5WQUxJRCkgfHwKKyAgICAgICAgICAgICAgICBkYnVzX2Vycm9yX2lzX3NldCAoJmVycm9yKSkgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIHBhcnNlIHJlc29sdmVyIGV2ZW50LlxuIik7CisgICAgICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBhc3NlcnQoYWRkcmVzcyk7CisgICAgICAgICAgICBpZiAoIWF2YWhpX2FkZHJlc3NfcGFyc2UoYWRkcmVzcywgKEF2YWhpUHJvdG9jb2wpIGFwcm90b2NvbCwgJmEpKSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gcGFyc2UgYWRkcmVzc1xuIik7CisgICAgICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByLT5jYWxsYmFjayhyLCAoQXZhaGlJZkluZGV4KSBpbnRlcmZhY2UsIChBdmFoaVByb3RvY29sKSBwcm90b2NvbCwgQVZBSElfUkVTT0xWRVJfRk9VTkQsICZhLCBuYW1lLCAoQXZhaGlMb29rdXBSZXN1bHRGbGFncykgZmxhZ3MsIHItPnVzZXJkYXRhKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBBVkFISV9SRVNPTFZFUl9GQUlMVVJFOiB7CisgICAgICAgICAgICBjaGFyICpldHh0OworCisgICAgICAgICAgICBpZiAoIWRidXNfbWVzc2FnZV9nZXRfYXJncygKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSwgJmVycm9yLAorICAgICAgICAgICAgICAgICAgICBEQlVTX1RZUEVfU1RSSU5HLCAmZXR4dCwKKyAgICAgICAgICAgICAgICAgICAgREJVU19UWVBFX0lOVkFMSUQpIHx8CisgICAgICAgICAgICAgICAgZGJ1c19lcnJvcl9pc19zZXQgKCZlcnJvcikpIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBwYXJzZSByZXNvbHZlciBldmVudC5cbiIpOworICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYXZhaGlfY2xpZW50X3NldF9lcnJubyhyLT5jbGllbnQsIGF2YWhpX2Vycm9yX2RidXNfdG9fbnVtYmVyKGV0eHQpKTsKKyAgICAgICAgICAgIHItPmNhbGxiYWNrKHIsIHItPmludGVyZmFjZSwgci0+cHJvdG9jb2wsIGV2ZW50LCAmci0+YWRkcmVzcywgTlVMTCwgMCwgci0+dXNlcmRhdGEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gREJVU19IQU5ETEVSX1JFU1VMVF9IQU5ETEVEOworCitmYWlsOgorICAgIGRidXNfZXJyb3JfZnJlZSAoJmVycm9yKTsKKyAgICByZXR1cm4gREJVU19IQU5ETEVSX1JFU1VMVF9OT1RfWUVUX0hBTkRMRUQ7Cit9CisKK0F2YWhpQWRkcmVzc1Jlc29sdmVyICogYXZhaGlfYWRkcmVzc19yZXNvbHZlcl9uZXcoCisgICAgQXZhaGlDbGllbnQgKmNsaWVudCwKKyAgICBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLAorICAgIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsCisgICAgY29uc3QgQXZhaGlBZGRyZXNzICphLAorICAgIEF2YWhpTG9va3VwRmxhZ3MgZmxhZ3MsCisgICAgQXZhaGlBZGRyZXNzUmVzb2x2ZXJDYWxsYmFjayBjYWxsYmFjaywKKyAgICB2b2lkICp1c2VyZGF0YSkgeworCisgICAgREJ1c0Vycm9yIGVycm9yOworICAgIEF2YWhpQWRkcmVzc1Jlc29sdmVyICpyID0gTlVMTDsKKyAgICBEQnVzTWVzc2FnZSAqbWVzc2FnZSA9IE5VTEwsICpyZXBseSA9IE5VTEw7CisgICAgaW50MzJfdCBpX2ludGVyZmFjZSwgaV9wcm90b2NvbDsKKyAgICB1aW50MzJfdCB1X2ZsYWdzOworICAgIGNoYXIgKnBhdGg7CisgICAgY2hhciBhZGRyW0FWQUhJX0FERFJFU1NfU1RSX01BWF0sICphZGRyZXNzID0gYWRkcjsKKworICAgIGFzc2VydChjbGllbnQpOworICAgIGFzc2VydChhKTsKKworICAgIGRidXNfZXJyb3JfaW5pdCAoJmVycm9yKTsKKworICAgIGlmICghYXZhaGlfYWRkcmVzc19zbnByaW50IChhZGRyLCBzaXplb2YoYWRkciksIGEpKSB7CisgICAgICAgIGF2YWhpX2NsaWVudF9zZXRfZXJybm8oY2xpZW50LCBBVkFISV9FUlJfSU5WQUxJRF9BRERSRVNTKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKCFhdmFoaV9jbGllbnRfaXNfY29ubmVjdGVkKGNsaWVudCkpIHsKKyAgICAgICAgYXZhaGlfY2xpZW50X3NldF9lcnJubyhjbGllbnQsIEFWQUhJX0VSUl9CQURfU1RBVEUpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKCEociA9IGF2YWhpX25ldyhBdmFoaUFkZHJlc3NSZXNvbHZlciwgMSkpKSB7CisgICAgICAgIGF2YWhpX2NsaWVudF9zZXRfZXJybm8oY2xpZW50LCBBVkFISV9FUlJfTk9fTUVNT1JZKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIHItPmNsaWVudCA9IGNsaWVudDsKKyAgICByLT5jYWxsYmFjayA9IGNhbGxiYWNrOworICAgIHItPnVzZXJkYXRhID0gdXNlcmRhdGE7CisgICAgci0+cGF0aCA9IE5VTEw7CisgICAgci0+aW50ZXJmYWNlID0gaW50ZXJmYWNlOworICAgIHItPnByb3RvY29sID0gcHJvdG9jb2w7CisgICAgci0+YWRkcmVzcyA9ICphOworCisgICAgQVZBSElfTExJU1RfUFJFUEVORChBdmFoaUFkZHJlc3NSZXNvbHZlciwgYWRkcmVzc19yZXNvbHZlcnMsIGNsaWVudC0+YWRkcmVzc19yZXNvbHZlcnMsIHIpOworCisgICAgaWYgKCEobWVzc2FnZSA9IGRidXNfbWVzc2FnZV9uZXdfbWV0aG9kX2NhbGwoQVZBSElfREJVU19OQU1FLCBBVkFISV9EQlVTX1BBVEhfU0VSVkVSLCBBVkFISV9EQlVTX0lOVEVSRkFDRV9TRVJWRVIsICJBZGRyZXNzUmVzb2x2ZXJOZXciKSkpIHsKKyAgICAgICAgYXZhaGlfY2xpZW50X3NldF9lcnJubyhjbGllbnQsIEFWQUhJX0VSUl9OT19NRU1PUlkpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaV9pbnRlcmZhY2UgPSAoaW50MzJfdCkgaW50ZXJmYWNlOworICAgIGlfcHJvdG9jb2wgPSAoaW50MzJfdCkgcHJvdG9jb2w7CisgICAgdV9mbGFncyA9ICh1aW50MzJfdCkgZmxhZ3M7CisKKyAgICBpZiAoIShkYnVzX21lc3NhZ2VfYXBwZW5kX2FyZ3MoCisgICAgICAgICAgICAgIG1lc3NhZ2UsCisgICAgICAgICAgICAgIERCVVNfVFlQRV9JTlQzMiwgJmlfaW50ZXJmYWNlLAorICAgICAgICAgICAgICBEQlVTX1RZUEVfSU5UMzIsICZpX3Byb3RvY29sLAorICAgICAgICAgICAgICBEQlVTX1RZUEVfU1RSSU5HLCAmYWRkcmVzcywKKyAgICAgICAgICAgICAgREJVU19UWVBFX1VJTlQzMiwgJnVfZmxhZ3MsCisgICAgICAgICAgICAgIERCVVNfVFlQRV9JTlZBTElEKSkpIHsKKyAgICAgICAgYXZhaGlfY2xpZW50X3NldF9lcnJubyhjbGllbnQsIEFWQUhJX0VSUl9OT19NRU1PUlkpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKCEocmVwbHkgPSBkYnVzX2Nvbm5lY3Rpb25fc2VuZF93aXRoX3JlcGx5X2FuZF9ibG9jayhjbGllbnQtPmJ1cywgbWVzc2FnZSwgLTEsICZlcnJvcikpIHx8CisgICAgICAgIGRidXNfZXJyb3JfaXNfc2V0KCZlcnJvcikpIHsKKyAgICAgICAgYXZhaGlfY2xpZW50X3NldF9lcnJubyhjbGllbnQsIEFWQUhJX0VSUl9EQlVTX0VSUk9SKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGlmICghZGJ1c19tZXNzYWdlX2dldF9hcmdzIChyZXBseSwgJmVycm9yLCBEQlVTX1RZUEVfT0JKRUNUX1BBVEgsICZwYXRoLCBEQlVTX1RZUEVfSU5WQUxJRCkgfHwKKyAgICAgICAgZGJ1c19lcnJvcl9pc19zZXQoJmVycm9yKSB8fAorICAgICAgICAhcGF0aCkgeworICAgICAgICBhdmFoaV9jbGllbnRfc2V0X2Vycm5vKGNsaWVudCwgQVZBSElfRVJSX0RCVVNfRVJST1IpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKCEoci0+cGF0aCA9IGF2YWhpX3N0cmR1cChwYXRoKSkpIHsKKworICAgICAgICAvKiBGSVhNRTogV2UgZG9uJ3QgcmVtb3ZlIHRoZSBvYmplY3Qgb24gdGhlIHNlcnZlciBzaWRlICovCisKKyAgICAgICAgYXZhaGlfY2xpZW50X3NldF9lcnJubyhjbGllbnQsIEFWQUhJX0VSUl9OT19NRU1PUlkpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgZGJ1c19tZXNzYWdlX3VucmVmKG1lc3NhZ2UpOworICAgIGRidXNfbWVzc2FnZV91bnJlZihyZXBseSk7CisKKyAgICByZXR1cm4gcjsKKworZmFpbDoKKworICAgIGlmIChkYnVzX2Vycm9yX2lzX3NldCgmZXJyb3IpKSB7CisgICAgICAgIGF2YWhpX2NsaWVudF9zZXRfZGJ1c19lcnJvcihjbGllbnQsICZlcnJvcik7CisgICAgICAgIGRidXNfZXJyb3JfZnJlZSgmZXJyb3IpOworICAgIH0KKworICAgIGlmIChyKQorICAgICAgICBhdmFoaV9hZGRyZXNzX3Jlc29sdmVyX2ZyZWUocik7CisKKyAgICBpZiAobWVzc2FnZSkKKyAgICAgICAgZGJ1c19tZXNzYWdlX3VucmVmKG1lc3NhZ2UpOworCisgICAgaWYgKHJlcGx5KQorICAgICAgICBkYnVzX21lc3NhZ2VfdW5yZWYocmVwbHkpOworCisgICAgcmV0dXJuIE5VTEw7CisKK30KKworQXZhaGlDbGllbnQqIGF2YWhpX2FkZHJlc3NfcmVzb2x2ZXJfZ2V0X2NsaWVudCAoQXZhaGlBZGRyZXNzUmVzb2x2ZXIgKnIpIHsKKyAgICBhc3NlcnQgKHIpOworCisgICAgcmV0dXJuIHItPmNsaWVudDsKK30KKworaW50IGF2YWhpX2FkZHJlc3NfcmVzb2x2ZXJfZnJlZShBdmFoaUFkZHJlc3NSZXNvbHZlciAqcikgeworICAgIEF2YWhpQ2xpZW50ICpjbGllbnQ7CisgICAgaW50IHJldCA9IEFWQUhJX09LOworCisgICAgYXNzZXJ0KHIpOworICAgIGNsaWVudCA9IHItPmNsaWVudDsKKworICAgIGlmIChyLT5wYXRoICYmIGF2YWhpX2NsaWVudF9pc19jb25uZWN0ZWQoY2xpZW50KSkKKyAgICAgICAgcmV0ID0gYXZhaGlfY2xpZW50X3NpbXBsZV9tZXRob2RfY2FsbChjbGllbnQsIHItPnBhdGgsIEFWQUhJX0RCVVNfSU5URVJGQUNFX0FERFJFU1NfUkVTT0xWRVIsICJGcmVlIik7CisKKyAgICBBVkFISV9MTElTVF9SRU1PVkUoQXZhaGlBZGRyZXNzUmVzb2x2ZXIsIGFkZHJlc3NfcmVzb2x2ZXJzLCBjbGllbnQtPmFkZHJlc3NfcmVzb2x2ZXJzLCByKTsKKworICAgIGF2YWhpX2ZyZWUoci0+cGF0aCk7CisgICAgYXZhaGlfZnJlZShyKTsKKworICAgIHJldHVybiByZXQ7Cit9CisKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jbGllbnQvcnItdGVzdC5jIGIvYXZhaGktMC42LjMxL2F2YWhpLWNsaWVudC9yci10ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQwMjU4NQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jbGllbnQvcnItdGVzdC5jCkBAIC0wLDAgKzEsMTExIEBACisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKyNpbmNsdWRlIDxhdmFoaS1jbGllbnQvY2xpZW50Lmg+CisjaW5jbHVkZSA8YXZhaGktY2xpZW50L2xvb2t1cC5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9lcnJvci5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9zaW1wbGUtd2F0Y2guaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vbWFsbG9jLmg+CisKK3N0YXRpYyB2b2lkIGhleGR1bXAoY29uc3Qgdm9pZCogcCwgc2l6ZV90IHNpemUpIHsKKyAgICBjb25zdCB1aW50OF90ICpjID0gcDsKKyAgICBhc3NlcnQocCk7CisKKyAgICBwcmludGYoIkR1bXBpbmcgJWx1IGJ5dGVzIGZyb20gJXA6XG4iLCAodW5zaWduZWQgbG9uZykgc2l6ZSwgcCk7CisKKyAgICB3aGlsZSAoc2l6ZSA+IDApIHsKKyAgICAgICAgdW5zaWduZWQgaTsKKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworICAgICAgICAgICAgaWYgKGkgPCBzaXplKQorICAgICAgICAgICAgICAgIHByaW50ZigiJTAyeCAiLCBjW2ldKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwcmludGYoIiAgICIpOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKyAgICAgICAgICAgIGlmIChpIDwgc2l6ZSkKKyAgICAgICAgICAgICAgICBwcmludGYoIiVjIiwgY1tpXSA+PSAzMiAmJiBjW2ldIDwgMTI3ID8gY1tpXSA6ICcuJyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcHJpbnRmKCIgIik7CisgICAgICAgIH0KKworICAgICAgICBwcmludGYoIlxuIik7CisKKyAgICAgICAgYyArPSAxNjsKKworICAgICAgICBpZiAoc2l6ZSA8PSAxNikKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIHNpemUgLT0gMTY7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBjYWxsYmFjaygKKyAgICBBVkFISV9HQ0NfVU5VU0VEIEF2YWhpUmVjb3JkQnJvd3NlciAqciwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsCisgICAgQVZBSElfR0NDX1VOVVNFRCBBdmFoaVByb3RvY29sIHByb3RvY29sLAorICAgIEF2YWhpQnJvd3NlckV2ZW50IGV2ZW50LAorICAgIGNvbnN0IGNoYXIgKm5hbWUsCisgICAgdWludDE2X3QgY2xhenosCisgICAgdWludDE2X3QgdHlwZSwKKyAgICBjb25zdCB2b2lkICpyZGF0YSwKKyAgICBzaXplX3QgcmRhdGFfc2l6ZSwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIEF2YWhpTG9va3VwUmVzdWx0RmxhZ3MgZmxhZ3MsCisgICAgQVZBSElfR0NDX1VOVVNFRCB2b2lkICp1c2VyZGF0YSkgeworCisgICAgZnByaW50ZihzdGRlcnIsICIlaSBuYW1lPSVzIGNsYXNzPSV1IHR5cGU9JXVcbiIsIGV2ZW50LCBuYW1lLCBjbGF6eiwgdHlwZSk7CisKKyAgICBpZiAocmRhdGEpCisgICAgICAgIGhleGR1bXAocmRhdGEsIHJkYXRhX3NpemUpOworfQorCitpbnQgbWFpbihBVkFISV9HQ0NfVU5VU0VEIGludCBhcmdjLCBBVkFISV9HQ0NfVU5VU0VEIGNoYXIgKmFyZ3ZbXSkgeworCisgICAgQXZhaGlTaW1wbGVQb2xsICpzaW1wbGVfcG9sbDsKKyAgICBjb25zdCBBdmFoaVBvbGwgKnBvbGxfYXBpOworICAgIEF2YWhpQ2xpZW50ICpjbGllbnQ7CisgICAgQXZhaGlSZWNvcmRCcm93c2VyICpyOworCisgICAgc2ltcGxlX3BvbGwgPSBhdmFoaV9zaW1wbGVfcG9sbF9uZXcoKTsKKyAgICBhc3NlcnQoc2ltcGxlX3BvbGwpOworCisgICAgcG9sbF9hcGkgPSBhdmFoaV9zaW1wbGVfcG9sbF9nZXQoc2ltcGxlX3BvbGwpOworICAgIGFzc2VydChwb2xsX2FwaSk7CisKKyAgICBjbGllbnQgPSBhdmFoaV9jbGllbnRfbmV3KHBvbGxfYXBpLCAwLCBOVUxMLCBOVUxMLCBOVUxMKTsKKyAgICBhc3NlcnQoY2xpZW50KTsKKworICAgIHIgPSBhdmFoaV9yZWNvcmRfYnJvd3Nlcl9uZXcoY2xpZW50LCBBVkFISV9JRl9VTlNQRUMsIEFWQUhJX1BST1RPX1VOU1BFQywgImVjc3Rhc3kubG9jYWwiLCBBVkFISV9ETlNfQ0xBU1NfSU4sIEFWQUhJX0ROU19UWVBFX0hJTkZPLCAwLCBjYWxsYmFjaywgc2ltcGxlX3BvbGwpOworICAgIGFzc2VydChyKTsKKworICAgIGF2YWhpX3NpbXBsZV9wb2xsX2xvb3Aoc2ltcGxlX3BvbGwpOworCisgICAgYXZhaGlfY2xpZW50X2ZyZWUoY2xpZW50KTsKKyAgICBhdmFoaV9zaW1wbGVfcG9sbF9mcmVlKHNpbXBsZV9wb2xsKTsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNsaWVudC9zcnYtdGVzdC5jIGIvYXZhaGktMC42LjMxL2F2YWhpLWNsaWVudC9zcnYtdGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MGJkNzcKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY2xpZW50L3Nydi10ZXN0LmMKQEAgLTAsMCArMSw3NiBAQAorLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorCisjaW5jbHVkZSA8YXZhaGktY2xpZW50L2NsaWVudC5oPgorI2luY2x1ZGUgPGF2YWhpLWNsaWVudC9sb29rdXAuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vZXJyb3IuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vc2ltcGxlLXdhdGNoLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL21hbGxvYy5oPgorCitzdGF0aWMgdm9pZCBjYWxsYmFjaygKKyAgICBBVkFISV9HQ0NfVU5VU0VEIEF2YWhpU2VydmljZVJlc29sdmVyICpyLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgQXZhaGlJZkluZGV4IGludGVyZmFjZSwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsCisgICAgQXZhaGlSZXNvbHZlckV2ZW50IGV2ZW50LAorICAgIGNvbnN0IGNoYXIgKm5hbWUsCisgICAgY29uc3QgY2hhciAqdHlwZSwKKyAgICBjb25zdCBjaGFyICpkb21haW4sCisgICAgY29uc3QgY2hhciAqaG9zdF9uYW1lLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgY29uc3QgQXZhaGlBZGRyZXNzICphLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgdWludDE2X3QgcG9ydCwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIEF2YWhpU3RyaW5nTGlzdCAqdHh0LAorICAgIEFWQUhJX0dDQ19VTlVTRUQgQXZhaGlMb29rdXBSZXN1bHRGbGFncyBmbGFncywKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHZvaWQgKnVzZXJkYXRhKSB7CisKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiVpIG5hbWU9JXMgdHlwZT0lcyBkb21haW49JXMgaG9zdD0lc1xuIiwgZXZlbnQsIG5hbWUsIHR5cGUsIGRvbWFpbiwgaG9zdF9uYW1lKTsKK30KKworaW50IG1haW4oQVZBSElfR0NDX1VOVVNFRCBpbnQgYXJnYywgQVZBSElfR0NDX1VOVVNFRCBjaGFyICphcmd2W10pIHsKKworICAgIEF2YWhpU2ltcGxlUG9sbCAqc2ltcGxlX3BvbGw7CisgICAgY29uc3QgQXZhaGlQb2xsICpwb2xsX2FwaTsKKyAgICBBdmFoaUNsaWVudCAqY2xpZW50OworICAgIEF2YWhpU2VydmljZVJlc29sdmVyICpyOworCisgICAgc2ltcGxlX3BvbGwgPSBhdmFoaV9zaW1wbGVfcG9sbF9uZXcoKTsKKyAgICBhc3NlcnQoc2ltcGxlX3BvbGwpOworCisgICAgcG9sbF9hcGkgPSBhdmFoaV9zaW1wbGVfcG9sbF9nZXQoc2ltcGxlX3BvbGwpOworICAgIGFzc2VydChwb2xsX2FwaSk7CisKKyAgICBjbGllbnQgPSBhdmFoaV9jbGllbnRfbmV3KHBvbGxfYXBpLCAwLCBOVUxMLCBOVUxMLCBOVUxMKTsKKyAgICBhc3NlcnQoY2xpZW50KTsKKworICAgIHIgPSBhdmFoaV9zZXJ2aWNlX3Jlc29sdmVyX25ldyhjbGllbnQsIEFWQUhJX0lGX1VOU1BFQywgQVZBSElfUFJPVE9fVU5TUEVDLCBOVUxMLCAiX2RvbWFpbi5fdWRwIiwgIjBwb2ludGVyLmRlIiwgQVZBSElfUFJPVE9fVU5TUEVDLCBBVkFISV9MT09LVVBfTk9fVFhULCBjYWxsYmFjaywgc2ltcGxlX3BvbGwpOworICAgIGFzc2VydChyKTsKKworICAgIGF2YWhpX3NpbXBsZV9wb2xsX2xvb3Aoc2ltcGxlX3BvbGwpOworCisgICAgYXZhaGlfY2xpZW50X2ZyZWUoY2xpZW50KTsKKyAgICBhdmFoaV9zaW1wbGVfcG9sbF9mcmVlKHNpbXBsZV9wb2xsKTsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNsaWVudC94ZGctY29uZmlnLXRlc3QuYyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jbGllbnQveGRnLWNvbmZpZy10ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdlZTYzZQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jbGllbnQveGRnLWNvbmZpZy10ZXN0LmMKQEAgLTAsMCArMSwzOCBAQAorLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vZ2NjbWFjcm8uaD4KKworI2luY2x1ZGUgInhkZy1jb25maWcuaCIKKworaW50IG1haW4oQVZBSElfR0NDX1VOVVNFRCBpbnQgYXJnYywgQVZBSElfR0NDX1VOVVNFRCBjaGFyICphcmd2W10pIHsKKworICAgIEZJTEUgKmY7CisKKyAgICBmID0gYXZhaGlfeGRnX2NvbmZpZ19vcGVuKCJmb28iKTsKKworICAgIGlmIChmKQorICAgICAgICBmY2xvc2UoZik7CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jbGllbnQveGRnLWNvbmZpZy5jIGIvYXZhaGktMC42LjMxL2F2YWhpLWNsaWVudC94ZGctY29uZmlnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM2NTAxNgotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jbGllbnQveGRnLWNvbmZpZy5jCkBAIC0wLDAgKzEsNjggQEAKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgInhkZy1jb25maWcuaCIKKworI2lmbmRlZiBQQVRIX01BWAorI2RlZmluZSBQQVRIX01BWCA0MDk2CisjZW5kaWYKKworRklMRSAqYXZhaGlfeGRnX2NvbmZpZ19vcGVuKGNvbnN0IGNoYXIgKmZpbGVuYW1lKSB7CisgICAgRklMRSAqZjsKKyAgICBjb25zdCBjaGFyICplLCAqZDsKKyAgICBjaGFyIGZuW1BBVEhfTUFYXSwgKnAgPSBOVUxMLCBidWZbMjA0OF0sICpzID0gTlVMTDsKKworICAgIGFzc2VydChmaWxlbmFtZSk7CisKKyAgICBpZiAoKGUgPSBnZXRlbnYoIlhER19DT05GSUdfSE9NRSIpKSAmJiAqZSkKKyAgICAgICAgc25wcmludGYocCA9IGZuLCBzaXplb2YoZm4pLCAiJXMvJXMiLCBlLCBmaWxlbmFtZSk7CisgICAgZWxzZSBpZiAoKGUgPSBnZXRlbnYoIkhPTUUiKSkgJiYgKmUpCisgICAgICAgIHNucHJpbnRmKHAgPSBmbiwgc2l6ZW9mKGZuKSwgIiVzLy5jb25maWcvJXMiLCBlLCBmaWxlbmFtZSk7CisKKyAgICBpZiAocCkgeworICAgICAgICBpZiAoKGYgPSBmb3BlbihwLCAiciIpKSkKKyAgICAgICAgICAgIHJldHVybiBmOworICAgICAgICBlbHNlIGlmIChlcnJubyAhPSBFTk9FTlQpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoIShkID0gZ2V0ZW52KCJYREdfQ09ORklHX0RJUlMiKSkgfHwgISpkKQorICAgICAgICBkID0gIi9ldGMveGRnIjsKKworICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcyIsIGQpOworCisgICAgZm9yIChlID0gc3RydG9rX3IoYnVmLCAiOiIsICZzKTsgZTsgZSA9IHN0cnRva19yKE5VTEwsICI6IiwgJnMpKSB7CisgICAgICAgIHNucHJpbnRmKGZuLCBzaXplb2YoZm4pLCAiJXMvJXMiLCBlLCBmaWxlbmFtZSk7CisKKyAgICAgICAgaWYgKChmID0gZm9wZW4oZm4sICJyIikpKQorICAgICAgICAgICAgcmV0dXJuIGY7CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktY2xpZW50L3hkZy1jb25maWcuaCBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jbGllbnQveGRnLWNvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjODU1YWIKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY2xpZW50L3hkZy1jb25maWcuaApAQCAtMCwwICsxLDI3IEBACisjaWZuZGVmIGZvb3hkZ2NvbmZpZ2hmb28KKyNkZWZpbmUgZm9veGRnY29uZmlnaGZvbworCisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCitGSUxFICphdmFoaV94ZGdfY29uZmlnX29wZW4oY29uc3QgY2hhciAqZmlsZW5hbWUpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21tb24vTWFrZWZpbGUuYW0gYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tbW9uL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5ZDA2MmYKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tbW9uL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMTI5IEBACisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorIworIyBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworIyBVU0EuCisKK0FNX0NGTEFHUz0tSSQodG9wX3NyY2RpcikKKworIyBUaGlzIGNvb2wgZGVidWcgdHJhcCB3b3JrcyBvbiBpMzg2L2djYyBvbmx5CitBTV9DRkxBR1MrPSctRERFQlVHX1RSQVA9X19hc21fXygiaW50ICQkMyIpJworCithdmFoaV9jb21tb25pbmNsdWRlZGlyPSQoaW5jbHVkZWRpcikvYXZhaGktY29tbW9uCisKK2F2YWhpX2NvbW1vbmluY2x1ZGVfSEVBREVSUyA9IFwKKwlzdHJsc3QuaCBcCisJYWRkcmVzcy5oIFwKKwlhbHRlcm5hdGl2ZS5oIFwKKwlkb21haW4uaCBcCisJY2RlY2wuaCBcCisJZGVmcy5oIFwKKwltYWxsb2MuaCBcCisJd2F0Y2guaCBcCisJdGltZXZhbC5oIFwKKwlzaW1wbGUtd2F0Y2guaCBcCisJdGhyZWFkLXdhdGNoLmggXAorCWdjY21hY3JvLmggXAorCWVycm9yLmggXAorCWxsaXN0LmggXAorCXJsaXN0LmgKKworaWYgRU5BQkxFX1RFU1RTCitub2luc3RfUFJPR1JBTVMgPSBcCisJc3RybHN0LXRlc3QgXAorCWRvbWFpbi10ZXN0IFwKKwlhbHRlcm5hdGl2ZS10ZXN0IFwKKwl0aW1ldmFsLXRlc3QgXAorCXdhdGNoLXRlc3QgXAorCXdhdGNoLXRlc3QtdGhyZWFkIFwKKwl1dGY4LXRlc3QKK2VuZGlmCisKK2xpYl9MVExJQlJBUklFUyA9IFwKKwlsaWJhdmFoaS1jb21tb24ubGEKKworbGliYXZhaGlfY29tbW9uX2xhX1NPVVJDRVMgPSBcCisJbWFsbG9jLmMgbWFsbG9jLmggXAorCWFkZHJlc3MuYyBhZGRyZXNzLmggXAorCWFsdGVybmF0aXZlLmMgYWx0ZXJuYXRpdmUuaCBcCisJZXJyb3IuYyBlcnJvci5oIFwKKwlzdHJsc3QuYyBzdHJsc3QuaCBcCisJZG9tYWluLmMgZG9tYWluLmggXAorCXRpbWV2YWwuYyB0aW1ldmFsLmggXAorCXNpbXBsZS13YXRjaC5jIHNpbXBsZS13YXRjaC5oIFwKKwl0aHJlYWQtd2F0Y2guYyB0aHJlYWQtd2F0Y2guaCBcCisJd2F0Y2guaCBnY2NtYWNyby5oIFwKKwlybGlzdC5oIHJsaXN0LmMgXAorCXV0ZjguYyB1dGY4LmggXAorCWkxOG4uYyBpMThuLmgKKworbGliYXZhaGlfY29tbW9uX2xhX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAkKFBUSFJFQURfQ0ZMQUdTKSAtREFWQUhJX0xPQ0FMRURJUj1cIiQoYXZhaGlsb2NhbGVkaXIpXCIKK2xpYmF2YWhpX2NvbW1vbl9sYV9MSUJBREQgPSAkKEFNX0xEQUREKSAkKFBUSFJFQURfQ0ZMQUdTKSAkKFBUSFJFQURfTElCUykgJChJTlRMTElCUykKK2xpYmF2YWhpX2NvbW1vbl9sYV9MREZMQUdTID0gJChBTV9MREZMQUdTKSAgLXZlcnNpb24taW5mbyAkKExJQkFWQUhJX0NPTU1PTl9WRVJTSU9OX0lORk8pCisKK3N0cmxzdF90ZXN0X1NPVVJDRVMgPSBcCisJc3RybHN0LmMgc3RybHN0LmggXAorCW1hbGxvYy5jIG1hbGxvYy5oIFwKKwlzdHJsc3QtdGVzdC5jCitzdHJsc3RfdGVzdF9DRkxBR1MgPSAkKEFNX0NGTEFHUykKKworYWx0ZXJuYXRpdmVfdGVzdF9TT1VSQ0VTID0gXAorCWFsdGVybmF0aXZlLmMgYWx0ZXJuYXRpdmUuaCBcCisJbWFsbG9jLmMgbWFsbG9jLmggXAorCWRvbWFpbi5jIGRvbWFpbi5oIFwKKwlhZGRyZXNzLmMgYWRkcmVzcy5oIFwKKwlhbHRlcm5hdGl2ZS10ZXN0LmMgXAorCXV0ZjguYyB1dGY4LmgKK2FsdGVybmF0aXZlX3Rlc3RfQ0ZMQUdTID0gJChBTV9DRkxBR1MpCisKK2RvbWFpbl90ZXN0X1NPVVJDRVMgPSBcCisJZG9tYWluLmMgZG9tYWluLmggXAorCW1hbGxvYy5jIG1hbGxvYy5oIFwKKwlhZGRyZXNzLmMgYWRkcmVzcy5oIFwKKwlkb21haW4tdGVzdC5jIFwKKwl1dGY4LmMgdXRmOC5oCitkb21haW5fdGVzdF9DRkxBR1MgPSAkKEFNX0NGTEFHUykKKword2F0Y2hfdGVzdF9TT1VSQ0VTID0gXAorCXRpbWV2YWwuYyB0aW1ldmFsLmggXAorCXNpbXBsZS13YXRjaC5jIHNpbXBsZS13YXRjaC5oIFwKKwl3YXRjaC5oIFwKKwltYWxsb2MuYyBtYWxsb2MuaCBcCisJd2F0Y2gtdGVzdC5jCit3YXRjaF90ZXN0X0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAkKFBUSFJFQURfQ0ZMQUdTKQord2F0Y2hfdGVzdF9MREFERCA9ICQoQU1fTERBREQpICQoUFRIUkVBRF9MSUJTKSAkKFBUSFJFQURfQ0ZMQUdTKQorCit3YXRjaF90ZXN0X3RocmVhZF9TT1VSQ0VTID0gJCh3YXRjaF90ZXN0X1NPVVJDRVMpIHRocmVhZC13YXRjaC5jIHRocmVhZC13YXRjaC5oCit3YXRjaF90ZXN0X3RocmVhZF9DRkxBR1MgPSAkKHdhdGNoX3Rlc3RfQ0ZMQUdTKSAtRFVTRV9USFJFQUQKK3dhdGNoX3Rlc3RfdGhyZWFkX0xEQUREID0gJCh3YXRjaF90ZXN0X0xEQUREKQorCit0aW1ldmFsX3Rlc3RfU09VUkNFUyA9IFwKKwl0aW1ldmFsLmMgdGltZXZhbC5oIFwKKwl0aW1ldmFsLXRlc3QuYwordGltZXZhbF90ZXN0X0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAkKFBUSFJFQURfQ0ZMQUdTKQordGltZXZhbF90ZXN0X0xEQUREID0gJChBTV9MREFERCkgJChQVEhSRUFEX0xJQlMpICQoUFRIUkVBRF9DRkxBR1MpCisKK3V0ZjhfdGVzdF9TT1VSQ0VTID0gXAorCXV0ZjgtdGVzdC5jIFwKKwl1dGY4LmMgdXRmOC5oCit1dGY4X3Rlc3RfQ0ZMQUdTID0gJChBTV9DRkxBR1MpCit1dGY4X3Rlc3RfTERBREQgPSAkKEFNX0xEQUREKQorCitpZiBIQVZFX0RCVVMKKworbm9pbnN0X0hFQURFUlMgPSBcCisJZGJ1cy5oIFwKKwlkYnVzLXdhdGNoLWdsdWUuaAorCitlbmRpZgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvbW1vbi9NYWtlZmlsZS5pbiBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21tb24vTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ4MGVlNAotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21tb24vTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwxNDM5IEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjExLjMgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACisKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisjCisjIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisjIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisjIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisjIFVTQS4KKworCisKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK0BFTkFCTEVfVEVTVFNfVFJVRUBub2luc3RfUFJPR1JBTVMgPSBzdHJsc3QtdGVzdCQoRVhFRVhUKSBcCitARU5BQkxFX1RFU1RTX1RSVUVACWRvbWFpbi10ZXN0JChFWEVFWFQpIFwKK0BFTkFCTEVfVEVTVFNfVFJVRUAJYWx0ZXJuYXRpdmUtdGVzdCQoRVhFRVhUKSBcCitARU5BQkxFX1RFU1RTX1RSVUVACXRpbWV2YWwtdGVzdCQoRVhFRVhUKSB3YXRjaC10ZXN0JChFWEVFWFQpIFwKK0BFTkFCTEVfVEVTVFNfVFJVRUAJd2F0Y2gtdGVzdC10aHJlYWQkKEVYRUVYVCkgXAorQEVOQUJMRV9URVNUU19UUlVFQAl1dGY4LXRlc3QkKEVYRUVYVCkKK3N1YmRpciA9IGF2YWhpLWNvbW1vbgorRElTVF9DT01NT04gPSAkKGFtX19ub2luc3RfSEVBREVSU19ESVNUKSBcCisJJChhdmFoaV9jb21tb25pbmNsdWRlX0hFQURFUlMpICQoc3JjZGlyKS9NYWtlZmlsZS5hbSBcCisJJChzcmNkaXIpL01ha2VmaWxlLmluCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vYWN4X3B0aHJlYWQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2djY19zdGFja19wcm90ZWN0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9nY2NfdmlzaWJpbGl0eS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vaW50bHRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2ludHJvc3BlY3Rpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2x0b3B0aW9ucy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHR2ZXJzaW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbmxzLm00ICQodG9wX3NyY2RpcikvY29tbW9uL3B5dGhvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9hY2luY2x1ZGUubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vZG94eWdlbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7CithbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAorICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCisgICAgKikgZj0kJHA7OyBcCisgIGVzYWM7CithbV9fc3RyaXBfZGlyID0gZj1gZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7CithbV9faW5zdGFsbF9tYXggPSA0MAorYW1fX25vYmFzZV9zdHJpcF9zZXR1cCA9IFwKKyAgc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYAorYW1fX25vYmFzZV9zdHJpcCA9IFwKKyAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkIC1lICJzfCQkc3JjZGlyc3RyaXAvfHwiCithbV9fbm9iYXNlX2xpc3QgPSAkKGFtX19ub2Jhc2Vfc3RyaXBfc2V0dXApOyBcCisgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCisgIHNlZCAic3wgJCRzcmNkaXJzdHJpcC98IHw7IicgLyAuKlwvLyFzLyAuKi8gLi87IHMsXCggLipcKS9bXi9dKiQkLFwxLCcgfCBcCisgICQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiIgfSB7IGZpbGVzWyQkMl0gPSBmaWxlc1skJDJdICIgIiAkJDE7IFwKKyAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCisgICAgICB7IHByaW50ICQkMiwgZmlsZXNbJCQyXTsgblskJDJdID0gMDsgZmlsZXNbJCQyXSA9ICIiIH0gfSBcCisgICAgRU5EIHsgZm9yIChkaXIgaW4gZmlsZXMpIHByaW50IGRpciwgZmlsZXNbZGlyXSB9JworYW1fX2Jhc2VfbGlzdCA9IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJyB8IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJworYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpciA9IHsgXAorICB0ZXN0IC16ICIkJGZpbGVzIiBcCisgICAgfHwgeyB0ZXN0ICEgLWQgIiQkZGlyIiAmJiB0ZXN0ICEgLWYgIiQkZGlyIiAmJiB0ZXN0ICEgLXIgIiQkZGlyIjsgfSBcCisgICAgfHwgeyBlY2hvICIgKCBjZCAnJCRkaXInICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAorICAgICAgICAgJChhbV9fY2QpICIkJGRpciIgJiYgcm0gLWYgJCRmaWxlczsgfTsgXAorICB9CithbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQobGliZGlyKSIgXAorCSIkKERFU1RESVIpJChhdmFoaV9jb21tb25pbmNsdWRlZGlyKSIKK0xUTElCUkFSSUVTID0gJChsaWJfTFRMSUJSQVJJRVMpCithbV9fREVQRU5ERU5DSUVTXzEgPQorbGliYXZhaGlfY29tbW9uX2xhX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCisJJChhbV9fREVQRU5ERU5DSUVTXzEpICQoYW1fX0RFUEVOREVOQ0lFU18xKQorYW1fbGliYXZhaGlfY29tbW9uX2xhX09CSkVDVFMgPSBsaWJhdmFoaV9jb21tb25fbGEtbWFsbG9jLmxvIFwKKwlsaWJhdmFoaV9jb21tb25fbGEtYWRkcmVzcy5sbyBcCisJbGliYXZhaGlfY29tbW9uX2xhLWFsdGVybmF0aXZlLmxvIGxpYmF2YWhpX2NvbW1vbl9sYS1lcnJvci5sbyBcCisJbGliYXZhaGlfY29tbW9uX2xhLXN0cmxzdC5sbyBsaWJhdmFoaV9jb21tb25fbGEtZG9tYWluLmxvIFwKKwlsaWJhdmFoaV9jb21tb25fbGEtdGltZXZhbC5sbyBcCisJbGliYXZhaGlfY29tbW9uX2xhLXNpbXBsZS13YXRjaC5sbyBcCisJbGliYXZhaGlfY29tbW9uX2xhLXRocmVhZC13YXRjaC5sbyBsaWJhdmFoaV9jb21tb25fbGEtcmxpc3QubG8gXAorCWxpYmF2YWhpX2NvbW1vbl9sYS11dGY4LmxvIGxpYmF2YWhpX2NvbW1vbl9sYS1pMThuLmxvCitsaWJhdmFoaV9jb21tb25fbGFfT0JKRUNUUyA9ICQoYW1fbGliYXZhaGlfY29tbW9uX2xhX09CSkVDVFMpCitBTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCithbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfbHRfMCA9IC0tc2lsZW50CitsaWJhdmFoaV9jb21tb25fbGFfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCisJJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpIFwKKwkkKGxpYmF2YWhpX2NvbW1vbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSBcCisJJChsaWJhdmFoaV9jb21tb25fbGFfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorUFJPR1JBTVMgPSAkKG5vaW5zdF9QUk9HUkFNUykKK2FtX2FsdGVybmF0aXZlX3Rlc3RfT0JKRUNUUyA9IGFsdGVybmF0aXZlX3Rlc3QtYWx0ZXJuYXRpdmUuJChPQkpFWFQpIFwKKwlhbHRlcm5hdGl2ZV90ZXN0LW1hbGxvYy4kKE9CSkVYVCkgXAorCWFsdGVybmF0aXZlX3Rlc3QtZG9tYWluLiQoT0JKRVhUKSBcCisJYWx0ZXJuYXRpdmVfdGVzdC1hZGRyZXNzLiQoT0JKRVhUKSBcCisJYWx0ZXJuYXRpdmVfdGVzdC1hbHRlcm5hdGl2ZS10ZXN0LiQoT0JKRVhUKSBcCisJYWx0ZXJuYXRpdmVfdGVzdC11dGY4LiQoT0JKRVhUKQorYWx0ZXJuYXRpdmVfdGVzdF9PQkpFQ1RTID0gJChhbV9hbHRlcm5hdGl2ZV90ZXN0X09CSkVDVFMpCithbHRlcm5hdGl2ZV90ZXN0X0xEQUREID0gJChMREFERCkKK2FsdGVybmF0aXZlX3Rlc3RfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCisJJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpIFwKKwkkKGFsdGVybmF0aXZlX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIFwKKwktbyAkQAorYW1fZG9tYWluX3Rlc3RfT0JKRUNUUyA9IGRvbWFpbl90ZXN0LWRvbWFpbi4kKE9CSkVYVCkgXAorCWRvbWFpbl90ZXN0LW1hbGxvYy4kKE9CSkVYVCkgZG9tYWluX3Rlc3QtYWRkcmVzcy4kKE9CSkVYVCkgXAorCWRvbWFpbl90ZXN0LWRvbWFpbi10ZXN0LiQoT0JKRVhUKSBkb21haW5fdGVzdC11dGY4LiQoT0JKRVhUKQorZG9tYWluX3Rlc3RfT0JKRUNUUyA9ICQoYW1fZG9tYWluX3Rlc3RfT0JKRUNUUykKK2RvbWFpbl90ZXN0X0xEQUREID0gJChMREFERCkKK2RvbWFpbl90ZXN0X0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKGRvbWFpbl90ZXN0X0NGTEFHUykgXAorCSQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKK2FtX3N0cmxzdF90ZXN0X09CSkVDVFMgPSBzdHJsc3RfdGVzdC1zdHJsc3QuJChPQkpFWFQpIFwKKwlzdHJsc3RfdGVzdC1tYWxsb2MuJChPQkpFWFQpIHN0cmxzdF90ZXN0LXN0cmxzdC10ZXN0LiQoT0JKRVhUKQorc3RybHN0X3Rlc3RfT0JKRUNUUyA9ICQoYW1fc3RybHN0X3Rlc3RfT0JKRUNUUykKK3N0cmxzdF90ZXN0X0xEQUREID0gJChMREFERCkKK3N0cmxzdF90ZXN0X0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKHN0cmxzdF90ZXN0X0NGTEFHUykgXAorCSQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKK2FtX3RpbWV2YWxfdGVzdF9PQkpFQ1RTID0gdGltZXZhbF90ZXN0LXRpbWV2YWwuJChPQkpFWFQpIFwKKwl0aW1ldmFsX3Rlc3QtdGltZXZhbC10ZXN0LiQoT0JKRVhUKQordGltZXZhbF90ZXN0X09CSkVDVFMgPSAkKGFtX3RpbWV2YWxfdGVzdF9PQkpFQ1RTKQordGltZXZhbF90ZXN0X0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCisJJChhbV9fREVQRU5ERU5DSUVTXzEpCit0aW1ldmFsX3Rlc3RfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQodGltZXZhbF90ZXN0X0NGTEFHUykgXAorCSQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKK2FtX3V0ZjhfdGVzdF9PQkpFQ1RTID0gdXRmOF90ZXN0LXV0ZjgtdGVzdC4kKE9CSkVYVCkgXAorCXV0ZjhfdGVzdC11dGY4LiQoT0JKRVhUKQordXRmOF90ZXN0X09CSkVDVFMgPSAkKGFtX3V0ZjhfdGVzdF9PQkpFQ1RTKQordXRmOF90ZXN0X0RFUEVOREVOQ0lFUyA9Cit1dGY4X3Rlc3RfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQodXRmOF90ZXN0X0NGTEFHUykgXAorCSQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKK2FtX3dhdGNoX3Rlc3RfT0JKRUNUUyA9IHdhdGNoX3Rlc3QtdGltZXZhbC4kKE9CSkVYVCkgXAorCXdhdGNoX3Rlc3Qtc2ltcGxlLXdhdGNoLiQoT0JKRVhUKSB3YXRjaF90ZXN0LW1hbGxvYy4kKE9CSkVYVCkgXAorCXdhdGNoX3Rlc3Qtd2F0Y2gtdGVzdC4kKE9CSkVYVCkKK3dhdGNoX3Rlc3RfT0JKRUNUUyA9ICQoYW1fd2F0Y2hfdGVzdF9PQkpFQ1RTKQord2F0Y2hfdGVzdF9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgJChhbV9fREVQRU5ERU5DSUVTXzEpCit3YXRjaF90ZXN0X0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKHdhdGNoX3Rlc3RfQ0ZMQUdTKSBcCisJJChDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorYW1fX29iamVjdHNfMSA9IHdhdGNoX3Rlc3RfdGhyZWFkLXRpbWV2YWwuJChPQkpFWFQpIFwKKwl3YXRjaF90ZXN0X3RocmVhZC1zaW1wbGUtd2F0Y2guJChPQkpFWFQpIFwKKwl3YXRjaF90ZXN0X3RocmVhZC1tYWxsb2MuJChPQkpFWFQpIFwKKwl3YXRjaF90ZXN0X3RocmVhZC13YXRjaC10ZXN0LiQoT0JKRVhUKQorYW1fd2F0Y2hfdGVzdF90aHJlYWRfT0JKRUNUUyA9ICQoYW1fX29iamVjdHNfMSkgXAorCXdhdGNoX3Rlc3RfdGhyZWFkLXRocmVhZC13YXRjaC4kKE9CSkVYVCkKK3dhdGNoX3Rlc3RfdGhyZWFkX09CSkVDVFMgPSAkKGFtX3dhdGNoX3Rlc3RfdGhyZWFkX09CSkVDVFMpCithbV9fREVQRU5ERU5DSUVTXzIgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgJChhbV9fREVQRU5ERU5DSUVTXzEpCit3YXRjaF90ZXN0X3RocmVhZF9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMikKK3dhdGNoX3Rlc3RfdGhyZWFkX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAorCSQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSBcCisJJCh3YXRjaF90ZXN0X3RocmVhZF9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgXAorCS1vICRACitERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQorZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAorYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKK2FtX19tdiA9IG12IC1mCitDT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKKwkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitMVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCisJJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCisJJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfQEFNX1ZAKQorYW1fX3ZfQ0NfID0gJChhbV9fdl9DQ19AQU1fREVGQVVMVF9WQCkKK2FtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAiICRAOworQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQorYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKK2FtX192X2F0XzAgPSBACitDQ0xEID0gJChDQykKK0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKKwkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKK0FNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF9AQU1fVkApCithbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF9AQU1fREVGQVVMVF9WQCkKK2FtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICIgJEA7CitBTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKK2FtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKK2FtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgIiAkQDsKK1NPVVJDRVMgPSAkKGxpYmF2YWhpX2NvbW1vbl9sYV9TT1VSQ0VTKSAkKGFsdGVybmF0aXZlX3Rlc3RfU09VUkNFUykgXAorCSQoZG9tYWluX3Rlc3RfU09VUkNFUykgJChzdHJsc3RfdGVzdF9TT1VSQ0VTKSBcCisJJCh0aW1ldmFsX3Rlc3RfU09VUkNFUykgJCh1dGY4X3Rlc3RfU09VUkNFUykgXAorCSQod2F0Y2hfdGVzdF9TT1VSQ0VTKSAkKHdhdGNoX3Rlc3RfdGhyZWFkX1NPVVJDRVMpCitESVNUX1NPVVJDRVMgPSAkKGxpYmF2YWhpX2NvbW1vbl9sYV9TT1VSQ0VTKSBcCisJJChhbHRlcm5hdGl2ZV90ZXN0X1NPVVJDRVMpICQoZG9tYWluX3Rlc3RfU09VUkNFUykgXAorCSQoc3RybHN0X3Rlc3RfU09VUkNFUykgJCh0aW1ldmFsX3Rlc3RfU09VUkNFUykgXAorCSQodXRmOF90ZXN0X1NPVVJDRVMpICQod2F0Y2hfdGVzdF9TT1VSQ0VTKSBcCisJJCh3YXRjaF90ZXN0X3RocmVhZF9TT1VSQ0VTKQorYW1fX25vaW5zdF9IRUFERVJTX0RJU1QgPSBkYnVzLmggZGJ1cy13YXRjaC1nbHVlLmgKK0hFQURFUlMgPSAkKGF2YWhpX2NvbW1vbmluY2x1ZGVfSEVBREVSUykgJChub2luc3RfSEVBREVSUykKK0VUQUdTID0gZXRhZ3MKK0NUQUdTID0gY3RhZ3MKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitBQ0xPQ0FMID0gQEFDTE9DQUxACitBTExfTElOR1VBUyA9IEBBTExfTElOR1VBU0AKK0FNVEFSID0gQEFNVEFSQAorQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACitBUiA9IEBBUkAKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBVkFISV9BVVRPSVBEX0dST1VQID0gQEFWQUhJX0FVVE9JUERfR1JPVVBACitBVkFISV9BVVRPSVBEX1VTRVIgPSBAQVZBSElfQVVUT0lQRF9VU0VSQAorQVZBSElfR1JPVVAgPSBAQVZBSElfR1JPVVBACitBVkFISV9QUklWX0FDQ0VTU19HUk9VUCA9IEBBVkFISV9QUklWX0FDQ0VTU19HUk9VUEAKK0FWQUhJX1VTRVIgPSBAQVZBSElfVVNFUkAKK0FXSyA9IEBBV0tACitDQVRBTE9HUyA9IEBDQVRBTE9HU0AKK0NBVE9CSkVYVCA9IEBDQVRPQkpFWFRACitDQyA9IEBDQ0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1hYID0gQENYWEAKK0NYWENQUCA9IEBDWFhDUFBACitDWFhERVBNT0RFID0gQENYWERFUE1PREVACitDWFhGTEFHUyA9IEBDWFhGTEFHU0AKK0NZR1BBVEhfVyA9IEBDWUdQQVRIX1dACitEQVRBRElSTkFNRSA9IEBEQVRBRElSTkFNRUAKK0RCVVNfQ0ZMQUdTID0gQERCVVNfQ0ZMQUdTQAorREJVU19MSUJTID0gQERCVVNfTElCU0AKK0RCVVNfU1lTVEVNX0JVU19ERUZBVUxUX0FERFJFU1MgPSBAREJVU19TWVNURU1fQlVTX0RFRkFVTFRfQUREUkVTU0AKK0RCVVNfU1lTX0RJUiA9IEBEQlVTX1NZU19ESVJACitERUZTID0gQERFRlNACitERVBESVIgPSBAREVQRElSQAorRExMVE9PTCA9IEBETExUT09MQAorRE9YWUdFTl9QQVBFUl9TSVpFID0gQERPWFlHRU5fUEFQRVJfU0laRUAKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRFhfQ09ORklHID0gQERYX0NPTkZJR0AKK0RYX0RPQ0RJUiA9IEBEWF9ET0NESVJACitEWF9ET1QgPSBARFhfRE9UQAorRFhfRE9YWUdFTiA9IEBEWF9ET1hZR0VOQAorRFhfRFZJUFMgPSBARFhfRFZJUFNACitEWF9FR1JFUCA9IEBEWF9FR1JFUEAKK0RYX0VOViA9IEBEWF9FTlZACitEWF9GTEFHX2NoaSA9IEBEWF9GTEFHX2NoaUAKK0RYX0ZMQUdfY2htID0gQERYX0ZMQUdfY2htQAorRFhfRkxBR19kb2MgPSBARFhfRkxBR19kb2NACitEWF9GTEFHX2RvdCA9IEBEWF9GTEFHX2RvdEAKK0RYX0ZMQUdfaHRtbCA9IEBEWF9GTEFHX2h0bWxACitEWF9GTEFHX21hbiA9IEBEWF9GTEFHX21hbkAKK0RYX0ZMQUdfcGRmID0gQERYX0ZMQUdfcGRmQAorRFhfRkxBR19wcyA9IEBEWF9GTEFHX3BzQAorRFhfRkxBR19ydGYgPSBARFhfRkxBR19ydGZACitEWF9GTEFHX3htbCA9IEBEWF9GTEFHX3htbEAKK0RYX0hIQyA9IEBEWF9ISENACitEWF9MQVRFWCA9IEBEWF9MQVRFWEAKK0RYX01BS0VJTkRFWCA9IEBEWF9NQUtFSU5ERVhACitEWF9QREZMQVRFWCA9IEBEWF9QREZMQVRFWEAKK0RYX1BFUkwgPSBARFhfUEVSTEAKK0RYX1BST0pFQ1QgPSBARFhfUFJPSkVDVEAKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRVhFRVhUID0gQEVYRUVYVEAKK0ZHUkVQID0gQEZHUkVQQAorR0FDVVRJTCA9IEBHQUNVVElMQAorR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKK0dMSUIyMF9DRkxBR1MgPSBAR0xJQjIwX0NGTEFHU0AKK0dMSUIyMF9MSUJTID0gQEdMSUIyMF9MSUJTQAorR01PRklMRVMgPSBAR01PRklMRVNACitHTVNHRk1UID0gQEdNU0dGTVRACitHT0JKRUNUX0NGTEFHUyA9IEBHT0JKRUNUX0NGTEFHU0AKK0dPQkpFQ1RfTElCUyA9IEBHT0JKRUNUX0xJQlNACitHUkVQID0gQEdSRVBACitHVEsyMF9DRkxBR1MgPSBAR1RLMjBfQ0ZMQUdTQAorR1RLMjBfTElCUyA9IEBHVEsyMF9MSUJTQAorR1RLMzBfQ0ZMQUdTID0gQEdUSzMwX0NGTEFHU0AKK0dUSzMwX0xJQlMgPSBAR1RLMzBfTElCU0AKK0hPV0xfQ09NUEFUX1ZFUlNJT04gPSBASE9XTF9DT01QQVRfVkVSU0lPTkAKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSU5TVE9CSkVYVCA9IEBJTlNUT0JKRVhUQAorSU5UTExJQlMgPSBASU5UTExJQlNACitJTlRMVE9PTF9FWFRSQUNUID0gQElOVExUT09MX0VYVFJBQ1RACitJTlRMVE9PTF9NRVJHRSA9IEBJTlRMVE9PTF9NRVJHRUAKK0lOVExUT09MX1BFUkwgPSBASU5UTFRPT0xfUEVSTEAKK0lOVExUT09MX1VQREFURSA9IEBJTlRMVE9PTF9VUERBVEVACitJTlRST1NQRUNUSU9OX0NGTEFHUyA9IEBJTlRST1NQRUNUSU9OX0NGTEFHU0AKK0lOVFJPU1BFQ1RJT05fQ09NUElMRVIgPSBASU5UUk9TUEVDVElPTl9DT01QSUxFUkAKK0lOVFJPU1BFQ1RJT05fR0VORVJBVEUgPSBASU5UUk9TUEVDVElPTl9HRU5FUkFURUAKK0lOVFJPU1BFQ1RJT05fR0lSRElSID0gQElOVFJPU1BFQ1RJT05fR0lSRElSQAorSU5UUk9TUEVDVElPTl9MSUJTID0gQElOVFJPU1BFQ1RJT05fTElCU0AKK0lOVFJPU1BFQ1RJT05fTUFLRUZJTEUgPSBASU5UUk9TUEVDVElPTl9NQUtFRklMRUAKK0lOVFJPU1BFQ1RJT05fU0NBTk5FUiA9IEBJTlRST1NQRUNUSU9OX1NDQU5ORVJACitJTlRST1NQRUNUSU9OX1RZUEVMSUJESVIgPSBASU5UUk9TUEVDVElPTl9UWVBFTElCRElSQAorTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMSUJBVkFISV9DTElFTlRfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NMSUVOVF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9DT01NT05fVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NPTU1PTl9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9DT01QQVRfSE9XTF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ09NUEFUX0hPV0xfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfQ09NUEFUX0xJQkROU19TRF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ09NUEFUX0xJQkROU19TRF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9DT1JFX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DT1JFX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0dMSUJfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0dMSUJfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfR09CSkVDVF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfR09CSkVDVF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9RVDNfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX1FUM19WRVJTSU9OX0lORk9ACitMSUJBVkFISV9RVDRfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX1FUNF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9VSV9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfVUlfVkVSU0lPTl9JTkZPQAorTElCREFFTU9OX0NGTEFHUyA9IEBMSUJEQUVNT05fQ0ZMQUdTQAorTElCREFFTU9OX0xJQlMgPSBATElCREFFTU9OX0xJQlNACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQExJQlNACitMSUJUT09MID0gQExJQlRPT0xACitMSVBPID0gQExJUE9ACitMTl9TID0gQExOX1NACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACitNQ1MgPSBATUNTQAorTURBU1NFTUJMRVIgPSBATURBU1NFTUJMRVJACitNS0RJUl9QID0gQE1LRElSX1BACitNS0lOU1RBTExESVJTID0gQE1LSU5TVEFMTERJUlNACitNT0NfUVQzID0gQE1PQ19RVDNACitNT0NfUVQ0ID0gQE1PQ19RVDRACitNT05PRE9DRVIgPSBATU9OT0RPQ0VSQAorTU9OT0RPQ19DRkxBR1MgPSBATU9OT0RPQ19DRkxBR1NACitNT05PRE9DX0RJUiA9IEBNT05PRE9DX0RJUkAKK01PTk9ET0NfTElCUyA9IEBNT05PRE9DX0xJQlNACitNU0dGTVQgPSBATVNHRk1UQAorTVNHRk1UX09QVFMgPSBATVNHRk1UX09QVFNACitNU0dNRVJHRSA9IEBNU0dNRVJHRUAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPVE9PTCA9IEBPVE9PTEAKK09UT09MNjQgPSBAT1RPT0w2NEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAorUEtHX0NPTkZJR19MSUJESVIgPSBAUEtHX0NPTkZJR19MSUJESVJACitQS0dfQ09ORklHX1BBVEggPSBAUEtHX0NPTkZJR19QQVRIQAorUE9GSUxFUyA9IEBQT0ZJTEVTQAorUE9TVUIgPSBAUE9TVUJACitQT19JTl9EQVRBRElSX0ZBTFNFID0gQFBPX0lOX0RBVEFESVJfRkFMU0VACitQT19JTl9EQVRBRElSX1RSVUUgPSBAUE9fSU5fREFUQURJUl9UUlVFQAorUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAorUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACitQVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAorUFlUSE9OID0gQFBZVEhPTkAKK1BZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACitQWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAorUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAorUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACitRVDNfQ0ZMQUdTID0gQFFUM19DRkxBR1NACitRVDNfTElCUyA9IEBRVDNfTElCU0AKK1FUNF9DRkxBR1MgPSBAUVQ0X0NGTEFHU0AKK1FUNF9MSUJTID0gQFFUNF9MSUJTQAorUkFOTElCID0gQFJBTkxJQkAKK1NFRCA9IEBTRURACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU1RPVyA9IEBTVE9XQAorU1RSSVAgPSBAU1RSSVBACitVU0VfTkxTID0gQFVTRV9OTFNACitWRVJTSU9OID0gQFZFUlNJT05ACitWSVNJQklMSVRZX0hJRERFTl9DRkxBR1MgPSBAVklTSUJJTElUWV9ISURERU5fQ0ZMQUdTQAorWEdFVFRFWFQgPSBAWEdFVFRFWFRACitYTUxfQ0ZMQUdTID0gQFhNTF9DRkxBR1NACitYTUxfTElCUyA9IEBYTUxfTElCU0AKK2Fic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACithYnNfc3JjZGlyID0gQGFic19zcmNkaXJACithYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACithYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKK2FjX2N0X0FSID0gQGFjX2N0X0FSQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9DWFggPSBAYWNfY3RfQ1hYQAorYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAorYWN4X3B0aHJlYWRfY29uZmlnID0gQGFjeF9wdGhyZWFkX2NvbmZpZ0AKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYXZhaGlfcnVudGltZV9kaXIgPSBAYXZhaGlfcnVudGltZV9kaXJACithdmFoaV9zb2NrZXQgPSBAYXZhaGlfc29ja2V0QAorYXZhaGlsb2NhbGVkaXIgPSBAYXZhaGlsb2NhbGVkaXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitidWlsZGRpciA9IEBidWlsZGRpckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZG9jZGlyID0gQGRvY2RpckAKK2R2aWRpciA9IEBkdmlkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2hhdmVfcGtnX2NvbmZpZyA9IEBoYXZlX3BrZ19jb25maWdACitoYXZlX3htbHRvbWFuID0gQGhhdmVfeG1sdG9tYW5ACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAoraW50ZXJmYWNlc2RpciA9IEBpbnRlcmZhY2VzZGlyQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3BrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACitwa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3BzZGlyID0gQHBzZGlyQAorcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKK3B5dGhvbmRpciA9IEBweXRob25kaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACitzeXN0ZW1kc3lzdGVtdW5pdGRpciA9IEBzeXN0ZW1kc3lzdGVtdW5pdGRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorCisjIFRoaXMgY29vbCBkZWJ1ZyB0cmFwIHdvcmtzIG9uIGkzODYvZ2NjIG9ubHkKK0FNX0NGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKSAnLURERUJVR19UUkFQPV9fYXNtX18oImludCAkJDMiKScKK2F2YWhpX2NvbW1vbmluY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL2F2YWhpLWNvbW1vbgorYXZhaGlfY29tbW9uaW5jbHVkZV9IRUFERVJTID0gXAorCXN0cmxzdC5oIFwKKwlhZGRyZXNzLmggXAorCWFsdGVybmF0aXZlLmggXAorCWRvbWFpbi5oIFwKKwljZGVjbC5oIFwKKwlkZWZzLmggXAorCW1hbGxvYy5oIFwKKwl3YXRjaC5oIFwKKwl0aW1ldmFsLmggXAorCXNpbXBsZS13YXRjaC5oIFwKKwl0aHJlYWQtd2F0Y2guaCBcCisJZ2NjbWFjcm8uaCBcCisJZXJyb3IuaCBcCisJbGxpc3QuaCBcCisJcmxpc3QuaAorCitsaWJfTFRMSUJSQVJJRVMgPSBcCisJbGliYXZhaGktY29tbW9uLmxhCisKK2xpYmF2YWhpX2NvbW1vbl9sYV9TT1VSQ0VTID0gXAorCW1hbGxvYy5jIG1hbGxvYy5oIFwKKwlhZGRyZXNzLmMgYWRkcmVzcy5oIFwKKwlhbHRlcm5hdGl2ZS5jIGFsdGVybmF0aXZlLmggXAorCWVycm9yLmMgZXJyb3IuaCBcCisJc3RybHN0LmMgc3RybHN0LmggXAorCWRvbWFpbi5jIGRvbWFpbi5oIFwKKwl0aW1ldmFsLmMgdGltZXZhbC5oIFwKKwlzaW1wbGUtd2F0Y2guYyBzaW1wbGUtd2F0Y2guaCBcCisJdGhyZWFkLXdhdGNoLmMgdGhyZWFkLXdhdGNoLmggXAorCXdhdGNoLmggZ2NjbWFjcm8uaCBcCisJcmxpc3QuaCBybGlzdC5jIFwKKwl1dGY4LmMgdXRmOC5oIFwKKwlpMThuLmMgaTE4bi5oCisKK2xpYmF2YWhpX2NvbW1vbl9sYV9DRkxBR1MgPSAkKEFNX0NGTEFHUykgJChQVEhSRUFEX0NGTEFHUykgLURBVkFISV9MT0NBTEVESVI9XCIkKGF2YWhpbG9jYWxlZGlyKVwiCitsaWJhdmFoaV9jb21tb25fbGFfTElCQUREID0gJChBTV9MREFERCkgJChQVEhSRUFEX0NGTEFHUykgJChQVEhSRUFEX0xJQlMpICQoSU5UTExJQlMpCitsaWJhdmFoaV9jb21tb25fbGFfTERGTEFHUyA9ICQoQU1fTERGTEFHUykgIC12ZXJzaW9uLWluZm8gJChMSUJBVkFISV9DT01NT05fVkVSU0lPTl9JTkZPKQorc3RybHN0X3Rlc3RfU09VUkNFUyA9IFwKKwlzdHJsc3QuYyBzdHJsc3QuaCBcCisJbWFsbG9jLmMgbWFsbG9jLmggXAorCXN0cmxzdC10ZXN0LmMKKworc3RybHN0X3Rlc3RfQ0ZMQUdTID0gJChBTV9DRkxBR1MpCithbHRlcm5hdGl2ZV90ZXN0X1NPVVJDRVMgPSBcCisJYWx0ZXJuYXRpdmUuYyBhbHRlcm5hdGl2ZS5oIFwKKwltYWxsb2MuYyBtYWxsb2MuaCBcCisJZG9tYWluLmMgZG9tYWluLmggXAorCWFkZHJlc3MuYyBhZGRyZXNzLmggXAorCWFsdGVybmF0aXZlLXRlc3QuYyBcCisJdXRmOC5jIHV0ZjguaAorCithbHRlcm5hdGl2ZV90ZXN0X0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKQorZG9tYWluX3Rlc3RfU09VUkNFUyA9IFwKKwlkb21haW4uYyBkb21haW4uaCBcCisJbWFsbG9jLmMgbWFsbG9jLmggXAorCWFkZHJlc3MuYyBhZGRyZXNzLmggXAorCWRvbWFpbi10ZXN0LmMgXAorCXV0ZjguYyB1dGY4LmgKKworZG9tYWluX3Rlc3RfQ0ZMQUdTID0gJChBTV9DRkxBR1MpCit3YXRjaF90ZXN0X1NPVVJDRVMgPSBcCisJdGltZXZhbC5jIHRpbWV2YWwuaCBcCisJc2ltcGxlLXdhdGNoLmMgc2ltcGxlLXdhdGNoLmggXAorCXdhdGNoLmggXAorCW1hbGxvYy5jIG1hbGxvYy5oIFwKKwl3YXRjaC10ZXN0LmMKKword2F0Y2hfdGVzdF9DRkxBR1MgPSAkKEFNX0NGTEFHUykgJChQVEhSRUFEX0NGTEFHUykKK3dhdGNoX3Rlc3RfTERBREQgPSAkKEFNX0xEQUREKSAkKFBUSFJFQURfTElCUykgJChQVEhSRUFEX0NGTEFHUykKK3dhdGNoX3Rlc3RfdGhyZWFkX1NPVVJDRVMgPSAkKHdhdGNoX3Rlc3RfU09VUkNFUykgdGhyZWFkLXdhdGNoLmMgdGhyZWFkLXdhdGNoLmgKK3dhdGNoX3Rlc3RfdGhyZWFkX0NGTEFHUyA9ICQod2F0Y2hfdGVzdF9DRkxBR1MpIC1EVVNFX1RIUkVBRAord2F0Y2hfdGVzdF90aHJlYWRfTERBREQgPSAkKHdhdGNoX3Rlc3RfTERBREQpCit0aW1ldmFsX3Rlc3RfU09VUkNFUyA9IFwKKwl0aW1ldmFsLmMgdGltZXZhbC5oIFwKKwl0aW1ldmFsLXRlc3QuYworCit0aW1ldmFsX3Rlc3RfQ0ZMQUdTID0gJChBTV9DRkxBR1MpICQoUFRIUkVBRF9DRkxBR1MpCit0aW1ldmFsX3Rlc3RfTERBREQgPSAkKEFNX0xEQUREKSAkKFBUSFJFQURfTElCUykgJChQVEhSRUFEX0NGTEFHUykKK3V0ZjhfdGVzdF9TT1VSQ0VTID0gXAorCXV0ZjgtdGVzdC5jIFwKKwl1dGY4LmMgdXRmOC5oCisKK3V0ZjhfdGVzdF9DRkxBR1MgPSAkKEFNX0NGTEFHUykKK3V0ZjhfdGVzdF9MREFERCA9ICQoQU1fTERBREQpCitASEFWRV9EQlVTX1RSVUVAbm9pbnN0X0hFQURFUlMgPSBcCitASEFWRV9EQlVTX1RSVUVACWRidXMuaCBcCitASEFWRV9EQlVTX1RSVUVACWRidXMtd2F0Y2gtZ2x1ZS5oCisKK2FsbDogYWxsLWFtCisKKy5TVUZGSVhFUzoKKy5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCisJICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduIGF2YWhpLWNvbW1vbi9NYWtlZmlsZSc7IFwKKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gYXZhaGktY29tbW9uL01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKK2luc3RhbGwtbGliTFRMSUJSQVJJRVM6ICQobGliX0xUTElCUkFSSUVTKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQobGliZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQobGliZGlyKSIKKwlAbGlzdD0nJChsaWJfTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChsaWJkaXIpIiB8fCBsaXN0PTsgXAorCWxpc3QyPTsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICQkcDsgdGhlbiBcCisJICAgIGxpc3QyPSIkJGxpc3QyICQkcCI7IFwKKwkgIGVsc2UgOjsgZmk7IFwKKwlkb25lOyBcCisJdGVzdCAteiAiJCRsaXN0MiIgfHwgeyBcCisJICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgJyQoREVTVERJUikkKGxpYmRpciknIjsgXAorCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgIiQoREVTVERJUikkKGxpYmRpcikiOyBcCisJfQorCit1bmluc3RhbGwtbGliTFRMSUJSQVJJRVM6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChsaWJfTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChsaWJkaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgJChhbV9fc3RyaXBfZGlyKSBcCisJICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgJyQoREVTVERJUikkKGxpYmRpcikvJCRmJyI7IFwKKwkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICIkKERFU1RESVIpJChsaWJkaXIpLyQkZiI7IFwKKwlkb25lCisKK2NsZWFuLWxpYkxUTElCUkFSSUVTOgorCS10ZXN0IC16ICIkKGxpYl9MVExJQlJBUklFUykiIHx8IHJtIC1mICQobGliX0xUTElCUkFSSUVTKQorCUBsaXN0PSckKGxpYl9MVExJQlJBUklFUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGRpcj0iYGVjaG8gJCRwIHwgc2VkIC1lICdzfC9bXi9dKiQkfHwnYCI7IFwKKwkgIHRlc3QgIiQkZGlyIiAhPSAiJCRwIiB8fCBkaXI9LjsgXAorCSAgZWNobyAicm0gLWYgXCIkJHtkaXJ9L3NvX2xvY2F0aW9uc1wiIjsgXAorCSAgcm0gLWYgIiQke2Rpcn0vc29fbG9jYXRpb25zIjsgXAorCWRvbmUKK2xpYmF2YWhpLWNvbW1vbi5sYTogJChsaWJhdmFoaV9jb21tb25fbGFfT0JKRUNUUykgJChsaWJhdmFoaV9jb21tb25fbGFfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYmF2YWhpX2NvbW1vbl9sYV9ERVBFTkRFTkNJRVMpIAorCSQoQU1fVl9DQ0xEKSQobGliYXZhaGlfY29tbW9uX2xhX0xJTkspIC1ycGF0aCAkKGxpYmRpcikgJChsaWJhdmFoaV9jb21tb25fbGFfT0JKRUNUUykgJChsaWJhdmFoaV9jb21tb25fbGFfTElCQUREKSAkKExJQlMpCisKK2NsZWFuLW5vaW5zdFBST0dSQU1TOgorCUBsaXN0PSckKG5vaW5zdF9QUk9HUkFNUyknOyB0ZXN0IC1uICIkJGxpc3QiIHx8IGV4aXQgMDsgXAorCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCisJcm0gLWYgJCRsaXN0IHx8IGV4aXQgJCQ/OyBcCisJdGVzdCAtbiAiJChFWEVFWFQpIiB8fCBleGl0IDA7IFwKKwlsaXN0PWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgJ3MvJChFWEVFWFQpJCQvLydgOyBcCisJZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKKwlybSAtZiAkJGxpc3QKK2FsdGVybmF0aXZlLXRlc3QkKEVYRUVYVCk6ICQoYWx0ZXJuYXRpdmVfdGVzdF9PQkpFQ1RTKSAkKGFsdGVybmF0aXZlX3Rlc3RfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2FsdGVybmF0aXZlX3Rlc3RfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgYWx0ZXJuYXRpdmUtdGVzdCQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQoYWx0ZXJuYXRpdmVfdGVzdF9MSU5LKSAkKGFsdGVybmF0aXZlX3Rlc3RfT0JKRUNUUykgJChhbHRlcm5hdGl2ZV90ZXN0X0xEQUREKSAkKExJQlMpCitkb21haW4tdGVzdCQoRVhFRVhUKTogJChkb21haW5fdGVzdF9PQkpFQ1RTKSAkKGRvbWFpbl90ZXN0X0RFUEVOREVOQ0lFUykgJChFWFRSQV9kb21haW5fdGVzdF9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBkb21haW4tdGVzdCQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQoZG9tYWluX3Rlc3RfTElOSykgJChkb21haW5fdGVzdF9PQkpFQ1RTKSAkKGRvbWFpbl90ZXN0X0xEQUREKSAkKExJQlMpCitzdHJsc3QtdGVzdCQoRVhFRVhUKTogJChzdHJsc3RfdGVzdF9PQkpFQ1RTKSAkKHN0cmxzdF90ZXN0X0RFUEVOREVOQ0lFUykgJChFWFRSQV9zdHJsc3RfdGVzdF9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBzdHJsc3QtdGVzdCQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQoc3RybHN0X3Rlc3RfTElOSykgJChzdHJsc3RfdGVzdF9PQkpFQ1RTKSAkKHN0cmxzdF90ZXN0X0xEQUREKSAkKExJQlMpCit0aW1ldmFsLXRlc3QkKEVYRUVYVCk6ICQodGltZXZhbF90ZXN0X09CSkVDVFMpICQodGltZXZhbF90ZXN0X0RFUEVOREVOQ0lFUykgJChFWFRSQV90aW1ldmFsX3Rlc3RfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgdGltZXZhbC10ZXN0JChFWEVFWFQpCisJJChBTV9WX0NDTEQpJCh0aW1ldmFsX3Rlc3RfTElOSykgJCh0aW1ldmFsX3Rlc3RfT0JKRUNUUykgJCh0aW1ldmFsX3Rlc3RfTERBREQpICQoTElCUykKK3V0ZjgtdGVzdCQoRVhFRVhUKTogJCh1dGY4X3Rlc3RfT0JKRUNUUykgJCh1dGY4X3Rlc3RfREVQRU5ERU5DSUVTKSAkKEVYVFJBX3V0ZjhfdGVzdF9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiB1dGY4LXRlc3QkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKHV0ZjhfdGVzdF9MSU5LKSAkKHV0ZjhfdGVzdF9PQkpFQ1RTKSAkKHV0ZjhfdGVzdF9MREFERCkgJChMSUJTKQord2F0Y2gtdGVzdCQoRVhFRVhUKTogJCh3YXRjaF90ZXN0X09CSkVDVFMpICQod2F0Y2hfdGVzdF9ERVBFTkRFTkNJRVMpICQoRVhUUkFfd2F0Y2hfdGVzdF9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiB3YXRjaC10ZXN0JChFWEVFWFQpCisJJChBTV9WX0NDTEQpJCh3YXRjaF90ZXN0X0xJTkspICQod2F0Y2hfdGVzdF9PQkpFQ1RTKSAkKHdhdGNoX3Rlc3RfTERBREQpICQoTElCUykKK3dhdGNoLXRlc3QtdGhyZWFkJChFWEVFWFQpOiAkKHdhdGNoX3Rlc3RfdGhyZWFkX09CSkVDVFMpICQod2F0Y2hfdGVzdF90aHJlYWRfREVQRU5ERU5DSUVTKSAkKEVYVFJBX3dhdGNoX3Rlc3RfdGhyZWFkX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIHdhdGNoLXRlc3QtdGhyZWFkJChFWEVFWFQpCisJJChBTV9WX0NDTEQpJCh3YXRjaF90ZXN0X3RocmVhZF9MSU5LKSAkKHdhdGNoX3Rlc3RfdGhyZWFkX09CSkVDVFMpICQod2F0Y2hfdGVzdF90aHJlYWRfTERBREQpICQoTElCUykKKworbW9zdGx5Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi4kKE9CSkVYVCkKKworZGlzdGNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICoudGFiLmMKKworQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2FsdGVybmF0aXZlX3Rlc3QtYWRkcmVzcy5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYWx0ZXJuYXRpdmVfdGVzdC1hbHRlcm5hdGl2ZS10ZXN0LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9hbHRlcm5hdGl2ZV90ZXN0LWFsdGVybmF0aXZlLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9hbHRlcm5hdGl2ZV90ZXN0LWRvbWFpbi5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYWx0ZXJuYXRpdmVfdGVzdC1tYWxsb2MuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2FsdGVybmF0aXZlX3Rlc3QtdXRmOC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZG9tYWluX3Rlc3QtYWRkcmVzcy5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZG9tYWluX3Rlc3QtZG9tYWluLXRlc3QuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2RvbWFpbl90ZXN0LWRvbWFpbi5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZG9tYWluX3Rlc3QtbWFsbG9jLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9kb21haW5fdGVzdC11dGY4LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJhdmFoaV9jb21tb25fbGEtYWRkcmVzcy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmF2YWhpX2NvbW1vbl9sYS1hbHRlcm5hdGl2ZS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmF2YWhpX2NvbW1vbl9sYS1kb21haW4uUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJhdmFoaV9jb21tb25fbGEtZXJyb3IuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJhdmFoaV9jb21tb25fbGEtaTE4bi5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmF2YWhpX2NvbW1vbl9sYS1tYWxsb2MuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJhdmFoaV9jb21tb25fbGEtcmxpc3QuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJhdmFoaV9jb21tb25fbGEtc2ltcGxlLXdhdGNoLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliYXZhaGlfY29tbW9uX2xhLXN0cmxzdC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmF2YWhpX2NvbW1vbl9sYS10aHJlYWQtd2F0Y2guUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJhdmFoaV9jb21tb25fbGEtdGltZXZhbC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmF2YWhpX2NvbW1vbl9sYS11dGY4LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc3RybHN0X3Rlc3QtbWFsbG9jLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zdHJsc3RfdGVzdC1zdHJsc3QtdGVzdC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc3RybHN0X3Rlc3Qtc3RybHN0LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS90aW1ldmFsX3Rlc3QtdGltZXZhbC10ZXN0LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS90aW1ldmFsX3Rlc3QtdGltZXZhbC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvdXRmOF90ZXN0LXV0ZjgtdGVzdC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvdXRmOF90ZXN0LXV0ZjguUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3dhdGNoX3Rlc3QtbWFsbG9jLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS93YXRjaF90ZXN0LXNpbXBsZS13YXRjaC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvd2F0Y2hfdGVzdC10aW1ldmFsLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS93YXRjaF90ZXN0LXdhdGNoLXRlc3QuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3dhdGNoX3Rlc3RfdGhyZWFkLW1hbGxvYy5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvd2F0Y2hfdGVzdF90aHJlYWQtc2ltcGxlLXdhdGNoLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS93YXRjaF90ZXN0X3RocmVhZC10aHJlYWQtd2F0Y2guUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3dhdGNoX3Rlc3RfdGhyZWFkLXRpbWV2YWwuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3dhdGNoX3Rlc3RfdGhyZWFkLXdhdGNoLXRlc3QuUG9AYW1fX3F1b3RlQAorCisuYy5vOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAkPAorCisuYy5vYmo6CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgYCQoQ1lHUEFUSF9XKSAnJDwnYAorCisuYy5sbzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKKworbGliYXZhaGlfY29tbW9uX2xhLW1hbGxvYy5sbzogbWFsbG9jLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV9jb21tb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmF2YWhpX2NvbW1vbl9sYS1tYWxsb2MubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmF2YWhpX2NvbW1vbl9sYS1tYWxsb2MuVHBvIC1jIC1vIGxpYmF2YWhpX2NvbW1vbl9sYS1tYWxsb2MubG8gYHRlc3QgLWYgJ21hbGxvYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BtYWxsb2MuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliYXZhaGlfY29tbW9uX2xhLW1hbGxvYy5UcG8gJChERVBESVIpL2xpYmF2YWhpX2NvbW1vbl9sYS1tYWxsb2MuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nbWFsbG9jLmMnIG9iamVjdD0nbGliYXZhaGlfY29tbW9uX2xhLW1hbGxvYy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmF2YWhpX2NvbW1vbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJhdmFoaV9jb21tb25fbGEtbWFsbG9jLmxvIGB0ZXN0IC1mICdtYWxsb2MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbWFsbG9jLmMKKworbGliYXZhaGlfY29tbW9uX2xhLWFkZHJlc3MubG86IGFkZHJlc3MuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmF2YWhpX2NvbW1vbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliYXZhaGlfY29tbW9uX2xhLWFkZHJlc3MubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmF2YWhpX2NvbW1vbl9sYS1hZGRyZXNzLlRwbyAtYyAtbyBsaWJhdmFoaV9jb21tb25fbGEtYWRkcmVzcy5sbyBgdGVzdCAtZiAnYWRkcmVzcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhZGRyZXNzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmF2YWhpX2NvbW1vbl9sYS1hZGRyZXNzLlRwbyAkKERFUERJUikvbGliYXZhaGlfY29tbW9uX2xhLWFkZHJlc3MuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYWRkcmVzcy5jJyBvYmplY3Q9J2xpYmF2YWhpX2NvbW1vbl9sYS1hZGRyZXNzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliYXZhaGlfY29tbW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmF2YWhpX2NvbW1vbl9sYS1hZGRyZXNzLmxvIGB0ZXN0IC1mICdhZGRyZXNzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFkZHJlc3MuYworCitsaWJhdmFoaV9jb21tb25fbGEtYWx0ZXJuYXRpdmUubG86IGFsdGVybmF0aXZlLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV9jb21tb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmF2YWhpX2NvbW1vbl9sYS1hbHRlcm5hdGl2ZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliYXZhaGlfY29tbW9uX2xhLWFsdGVybmF0aXZlLlRwbyAtYyAtbyBsaWJhdmFoaV9jb21tb25fbGEtYWx0ZXJuYXRpdmUubG8gYHRlc3QgLWYgJ2FsdGVybmF0aXZlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFsdGVybmF0aXZlLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmF2YWhpX2NvbW1vbl9sYS1hbHRlcm5hdGl2ZS5UcG8gJChERVBESVIpL2xpYmF2YWhpX2NvbW1vbl9sYS1hbHRlcm5hdGl2ZS5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhbHRlcm5hdGl2ZS5jJyBvYmplY3Q9J2xpYmF2YWhpX2NvbW1vbl9sYS1hbHRlcm5hdGl2ZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmF2YWhpX2NvbW1vbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJhdmFoaV9jb21tb25fbGEtYWx0ZXJuYXRpdmUubG8gYHRlc3QgLWYgJ2FsdGVybmF0aXZlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFsdGVybmF0aXZlLmMKKworbGliYXZhaGlfY29tbW9uX2xhLWVycm9yLmxvOiBlcnJvci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliYXZhaGlfY29tbW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJhdmFoaV9jb21tb25fbGEtZXJyb3IubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmF2YWhpX2NvbW1vbl9sYS1lcnJvci5UcG8gLWMgLW8gbGliYXZhaGlfY29tbW9uX2xhLWVycm9yLmxvIGB0ZXN0IC1mICdlcnJvci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BlcnJvci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJhdmFoaV9jb21tb25fbGEtZXJyb3IuVHBvICQoREVQRElSKS9saWJhdmFoaV9jb21tb25fbGEtZXJyb3IuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZXJyb3IuYycgb2JqZWN0PSdsaWJhdmFoaV9jb21tb25fbGEtZXJyb3IubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV9jb21tb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliYXZhaGlfY29tbW9uX2xhLWVycm9yLmxvIGB0ZXN0IC1mICdlcnJvci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BlcnJvci5jCisKK2xpYmF2YWhpX2NvbW1vbl9sYS1zdHJsc3QubG86IHN0cmxzdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliYXZhaGlfY29tbW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJhdmFoaV9jb21tb25fbGEtc3RybHN0LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJhdmFoaV9jb21tb25fbGEtc3RybHN0LlRwbyAtYyAtbyBsaWJhdmFoaV9jb21tb25fbGEtc3RybHN0LmxvIGB0ZXN0IC1mICdzdHJsc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3RybHN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmF2YWhpX2NvbW1vbl9sYS1zdHJsc3QuVHBvICQoREVQRElSKS9saWJhdmFoaV9jb21tb25fbGEtc3RybHN0LlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3N0cmxzdC5jJyBvYmplY3Q9J2xpYmF2YWhpX2NvbW1vbl9sYS1zdHJsc3QubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV9jb21tb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliYXZhaGlfY29tbW9uX2xhLXN0cmxzdC5sbyBgdGVzdCAtZiAnc3RybHN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHN0cmxzdC5jCisKK2xpYmF2YWhpX2NvbW1vbl9sYS1kb21haW4ubG86IGRvbWFpbi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliYXZhaGlfY29tbW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJhdmFoaV9jb21tb25fbGEtZG9tYWluLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJhdmFoaV9jb21tb25fbGEtZG9tYWluLlRwbyAtYyAtbyBsaWJhdmFoaV9jb21tb25fbGEtZG9tYWluLmxvIGB0ZXN0IC1mICdkb21haW4uYycgfHwgZWNobyAnJChzcmNkaXIpLydgZG9tYWluLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmF2YWhpX2NvbW1vbl9sYS1kb21haW4uVHBvICQoREVQRElSKS9saWJhdmFoaV9jb21tb25fbGEtZG9tYWluLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2RvbWFpbi5jJyBvYmplY3Q9J2xpYmF2YWhpX2NvbW1vbl9sYS1kb21haW4ubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV9jb21tb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliYXZhaGlfY29tbW9uX2xhLWRvbWFpbi5sbyBgdGVzdCAtZiAnZG9tYWluLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGRvbWFpbi5jCisKK2xpYmF2YWhpX2NvbW1vbl9sYS10aW1ldmFsLmxvOiB0aW1ldmFsLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV9jb21tb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmF2YWhpX2NvbW1vbl9sYS10aW1ldmFsLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJhdmFoaV9jb21tb25fbGEtdGltZXZhbC5UcG8gLWMgLW8gbGliYXZhaGlfY29tbW9uX2xhLXRpbWV2YWwubG8gYHRlc3QgLWYgJ3RpbWV2YWwuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdGltZXZhbC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJhdmFoaV9jb21tb25fbGEtdGltZXZhbC5UcG8gJChERVBESVIpL2xpYmF2YWhpX2NvbW1vbl9sYS10aW1ldmFsLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3RpbWV2YWwuYycgb2JqZWN0PSdsaWJhdmFoaV9jb21tb25fbGEtdGltZXZhbC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmF2YWhpX2NvbW1vbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJhdmFoaV9jb21tb25fbGEtdGltZXZhbC5sbyBgdGVzdCAtZiAndGltZXZhbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B0aW1ldmFsLmMKKworbGliYXZhaGlfY29tbW9uX2xhLXNpbXBsZS13YXRjaC5sbzogc2ltcGxlLXdhdGNoLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV9jb21tb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmF2YWhpX2NvbW1vbl9sYS1zaW1wbGUtd2F0Y2gubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmF2YWhpX2NvbW1vbl9sYS1zaW1wbGUtd2F0Y2guVHBvIC1jIC1vIGxpYmF2YWhpX2NvbW1vbl9sYS1zaW1wbGUtd2F0Y2gubG8gYHRlc3QgLWYgJ3NpbXBsZS13YXRjaC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzaW1wbGUtd2F0Y2guYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliYXZhaGlfY29tbW9uX2xhLXNpbXBsZS13YXRjaC5UcG8gJChERVBESVIpL2xpYmF2YWhpX2NvbW1vbl9sYS1zaW1wbGUtd2F0Y2guUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nc2ltcGxlLXdhdGNoLmMnIG9iamVjdD0nbGliYXZhaGlfY29tbW9uX2xhLXNpbXBsZS13YXRjaC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmF2YWhpX2NvbW1vbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJhdmFoaV9jb21tb25fbGEtc2ltcGxlLXdhdGNoLmxvIGB0ZXN0IC1mICdzaW1wbGUtd2F0Y2guYycgfHwgZWNobyAnJChzcmNkaXIpLydgc2ltcGxlLXdhdGNoLmMKKworbGliYXZhaGlfY29tbW9uX2xhLXRocmVhZC13YXRjaC5sbzogdGhyZWFkLXdhdGNoLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV9jb21tb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmF2YWhpX2NvbW1vbl9sYS10aHJlYWQtd2F0Y2gubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmF2YWhpX2NvbW1vbl9sYS10aHJlYWQtd2F0Y2guVHBvIC1jIC1vIGxpYmF2YWhpX2NvbW1vbl9sYS10aHJlYWQtd2F0Y2gubG8gYHRlc3QgLWYgJ3RocmVhZC13YXRjaC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B0aHJlYWQtd2F0Y2guYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliYXZhaGlfY29tbW9uX2xhLXRocmVhZC13YXRjaC5UcG8gJChERVBESVIpL2xpYmF2YWhpX2NvbW1vbl9sYS10aHJlYWQtd2F0Y2guUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ndGhyZWFkLXdhdGNoLmMnIG9iamVjdD0nbGliYXZhaGlfY29tbW9uX2xhLXRocmVhZC13YXRjaC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmF2YWhpX2NvbW1vbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJhdmFoaV9jb21tb25fbGEtdGhyZWFkLXdhdGNoLmxvIGB0ZXN0IC1mICd0aHJlYWQtd2F0Y2guYycgfHwgZWNobyAnJChzcmNkaXIpLydgdGhyZWFkLXdhdGNoLmMKKworbGliYXZhaGlfY29tbW9uX2xhLXJsaXN0LmxvOiBybGlzdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliYXZhaGlfY29tbW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJhdmFoaV9jb21tb25fbGEtcmxpc3QubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmF2YWhpX2NvbW1vbl9sYS1ybGlzdC5UcG8gLWMgLW8gbGliYXZhaGlfY29tbW9uX2xhLXJsaXN0LmxvIGB0ZXN0IC1mICdybGlzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BybGlzdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJhdmFoaV9jb21tb25fbGEtcmxpc3QuVHBvICQoREVQRElSKS9saWJhdmFoaV9jb21tb25fbGEtcmxpc3QuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ncmxpc3QuYycgb2JqZWN0PSdsaWJhdmFoaV9jb21tb25fbGEtcmxpc3QubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV9jb21tb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliYXZhaGlfY29tbW9uX2xhLXJsaXN0LmxvIGB0ZXN0IC1mICdybGlzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BybGlzdC5jCisKK2xpYmF2YWhpX2NvbW1vbl9sYS11dGY4LmxvOiB1dGY4LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV9jb21tb25fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmF2YWhpX2NvbW1vbl9sYS11dGY4LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJhdmFoaV9jb21tb25fbGEtdXRmOC5UcG8gLWMgLW8gbGliYXZhaGlfY29tbW9uX2xhLXV0ZjgubG8gYHRlc3QgLWYgJ3V0ZjguYycgfHwgZWNobyAnJChzcmNkaXIpLydgdXRmOC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJhdmFoaV9jb21tb25fbGEtdXRmOC5UcG8gJChERVBESVIpL2xpYmF2YWhpX2NvbW1vbl9sYS11dGY4LlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3V0ZjguYycgb2JqZWN0PSdsaWJhdmFoaV9jb21tb25fbGEtdXRmOC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmF2YWhpX2NvbW1vbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJhdmFoaV9jb21tb25fbGEtdXRmOC5sbyBgdGVzdCAtZiAndXRmOC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B1dGY4LmMKKworbGliYXZhaGlfY29tbW9uX2xhLWkxOG4ubG86IGkxOG4uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmF2YWhpX2NvbW1vbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliYXZhaGlfY29tbW9uX2xhLWkxOG4ubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmF2YWhpX2NvbW1vbl9sYS1pMThuLlRwbyAtYyAtbyBsaWJhdmFoaV9jb21tb25fbGEtaTE4bi5sbyBgdGVzdCAtZiAnaTE4bi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BpMThuLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmF2YWhpX2NvbW1vbl9sYS1pMThuLlRwbyAkKERFUERJUikvbGliYXZhaGlfY29tbW9uX2xhLWkxOG4uUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0naTE4bi5jJyBvYmplY3Q9J2xpYmF2YWhpX2NvbW1vbl9sYS1pMThuLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliYXZhaGlfY29tbW9uX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmF2YWhpX2NvbW1vbl9sYS1pMThuLmxvIGB0ZXN0IC1mICdpMThuLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGkxOG4uYworCithbHRlcm5hdGl2ZV90ZXN0LWFsdGVybmF0aXZlLm86IGFsdGVybmF0aXZlLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhbHRlcm5hdGl2ZV90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBhbHRlcm5hdGl2ZV90ZXN0LWFsdGVybmF0aXZlLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2FsdGVybmF0aXZlX3Rlc3QtYWx0ZXJuYXRpdmUuVHBvIC1jIC1vIGFsdGVybmF0aXZlX3Rlc3QtYWx0ZXJuYXRpdmUubyBgdGVzdCAtZiAnYWx0ZXJuYXRpdmUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYWx0ZXJuYXRpdmUuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYWx0ZXJuYXRpdmVfdGVzdC1hbHRlcm5hdGl2ZS5UcG8gJChERVBESVIpL2FsdGVybmF0aXZlX3Rlc3QtYWx0ZXJuYXRpdmUuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhbHRlcm5hdGl2ZS5jJyBvYmplY3Q9J2FsdGVybmF0aXZlX3Rlc3QtYWx0ZXJuYXRpdmUubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYWx0ZXJuYXRpdmVfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhbHRlcm5hdGl2ZV90ZXN0LWFsdGVybmF0aXZlLm8gYHRlc3QgLWYgJ2FsdGVybmF0aXZlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFsdGVybmF0aXZlLmMKKworYWx0ZXJuYXRpdmVfdGVzdC1hbHRlcm5hdGl2ZS5vYmo6IGFsdGVybmF0aXZlLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhbHRlcm5hdGl2ZV90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBhbHRlcm5hdGl2ZV90ZXN0LWFsdGVybmF0aXZlLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvYWx0ZXJuYXRpdmVfdGVzdC1hbHRlcm5hdGl2ZS5UcG8gLWMgLW8gYWx0ZXJuYXRpdmVfdGVzdC1hbHRlcm5hdGl2ZS5vYmogYGlmIHRlc3QgLWYgJ2FsdGVybmF0aXZlLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnYWx0ZXJuYXRpdmUuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvYWx0ZXJuYXRpdmUuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYWx0ZXJuYXRpdmVfdGVzdC1hbHRlcm5hdGl2ZS5UcG8gJChERVBESVIpL2FsdGVybmF0aXZlX3Rlc3QtYWx0ZXJuYXRpdmUuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhbHRlcm5hdGl2ZS5jJyBvYmplY3Q9J2FsdGVybmF0aXZlX3Rlc3QtYWx0ZXJuYXRpdmUub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhbHRlcm5hdGl2ZV90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGFsdGVybmF0aXZlX3Rlc3QtYWx0ZXJuYXRpdmUub2JqIGBpZiB0ZXN0IC1mICdhbHRlcm5hdGl2ZS5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2FsdGVybmF0aXZlLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2FsdGVybmF0aXZlLmMnOyBmaWAKKworYWx0ZXJuYXRpdmVfdGVzdC1tYWxsb2MubzogbWFsbG9jLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhbHRlcm5hdGl2ZV90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBhbHRlcm5hdGl2ZV90ZXN0LW1hbGxvYy5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9hbHRlcm5hdGl2ZV90ZXN0LW1hbGxvYy5UcG8gLWMgLW8gYWx0ZXJuYXRpdmVfdGVzdC1tYWxsb2MubyBgdGVzdCAtZiAnbWFsbG9jLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYG1hbGxvYy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9hbHRlcm5hdGl2ZV90ZXN0LW1hbGxvYy5UcG8gJChERVBESVIpL2FsdGVybmF0aXZlX3Rlc3QtbWFsbG9jLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nbWFsbG9jLmMnIG9iamVjdD0nYWx0ZXJuYXRpdmVfdGVzdC1tYWxsb2MubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYWx0ZXJuYXRpdmVfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhbHRlcm5hdGl2ZV90ZXN0LW1hbGxvYy5vIGB0ZXN0IC1mICdtYWxsb2MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbWFsbG9jLmMKKworYWx0ZXJuYXRpdmVfdGVzdC1tYWxsb2Mub2JqOiBtYWxsb2MuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGFsdGVybmF0aXZlX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGFsdGVybmF0aXZlX3Rlc3QtbWFsbG9jLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvYWx0ZXJuYXRpdmVfdGVzdC1tYWxsb2MuVHBvIC1jIC1vIGFsdGVybmF0aXZlX3Rlc3QtbWFsbG9jLm9iaiBgaWYgdGVzdCAtZiAnbWFsbG9jLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnbWFsbG9jLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL21hbGxvYy5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9hbHRlcm5hdGl2ZV90ZXN0LW1hbGxvYy5UcG8gJChERVBESVIpL2FsdGVybmF0aXZlX3Rlc3QtbWFsbG9jLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nbWFsbG9jLmMnIG9iamVjdD0nYWx0ZXJuYXRpdmVfdGVzdC1tYWxsb2Mub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhbHRlcm5hdGl2ZV90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGFsdGVybmF0aXZlX3Rlc3QtbWFsbG9jLm9iaiBgaWYgdGVzdCAtZiAnbWFsbG9jLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnbWFsbG9jLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL21hbGxvYy5jJzsgZmlgCisKK2FsdGVybmF0aXZlX3Rlc3QtZG9tYWluLm86IGRvbWFpbi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYWx0ZXJuYXRpdmVfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYWx0ZXJuYXRpdmVfdGVzdC1kb21haW4ubyAtTUQgLU1QIC1NRiAkKERFUERJUikvYWx0ZXJuYXRpdmVfdGVzdC1kb21haW4uVHBvIC1jIC1vIGFsdGVybmF0aXZlX3Rlc3QtZG9tYWluLm8gYHRlc3QgLWYgJ2RvbWFpbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bkb21haW4uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYWx0ZXJuYXRpdmVfdGVzdC1kb21haW4uVHBvICQoREVQRElSKS9hbHRlcm5hdGl2ZV90ZXN0LWRvbWFpbi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2RvbWFpbi5jJyBvYmplY3Q9J2FsdGVybmF0aXZlX3Rlc3QtZG9tYWluLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGFsdGVybmF0aXZlX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYWx0ZXJuYXRpdmVfdGVzdC1kb21haW4ubyBgdGVzdCAtZiAnZG9tYWluLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGRvbWFpbi5jCisKK2FsdGVybmF0aXZlX3Rlc3QtZG9tYWluLm9iajogZG9tYWluLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhbHRlcm5hdGl2ZV90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBhbHRlcm5hdGl2ZV90ZXN0LWRvbWFpbi5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2FsdGVybmF0aXZlX3Rlc3QtZG9tYWluLlRwbyAtYyAtbyBhbHRlcm5hdGl2ZV90ZXN0LWRvbWFpbi5vYmogYGlmIHRlc3QgLWYgJ2RvbWFpbi5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2RvbWFpbi5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9kb21haW4uYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYWx0ZXJuYXRpdmVfdGVzdC1kb21haW4uVHBvICQoREVQRElSKS9hbHRlcm5hdGl2ZV90ZXN0LWRvbWFpbi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2RvbWFpbi5jJyBvYmplY3Q9J2FsdGVybmF0aXZlX3Rlc3QtZG9tYWluLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYWx0ZXJuYXRpdmVfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhbHRlcm5hdGl2ZV90ZXN0LWRvbWFpbi5vYmogYGlmIHRlc3QgLWYgJ2RvbWFpbi5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2RvbWFpbi5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9kb21haW4uYyc7IGZpYAorCithbHRlcm5hdGl2ZV90ZXN0LWFkZHJlc3MubzogYWRkcmVzcy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYWx0ZXJuYXRpdmVfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYWx0ZXJuYXRpdmVfdGVzdC1hZGRyZXNzLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2FsdGVybmF0aXZlX3Rlc3QtYWRkcmVzcy5UcG8gLWMgLW8gYWx0ZXJuYXRpdmVfdGVzdC1hZGRyZXNzLm8gYHRlc3QgLWYgJ2FkZHJlc3MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYWRkcmVzcy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9hbHRlcm5hdGl2ZV90ZXN0LWFkZHJlc3MuVHBvICQoREVQRElSKS9hbHRlcm5hdGl2ZV90ZXN0LWFkZHJlc3MuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhZGRyZXNzLmMnIG9iamVjdD0nYWx0ZXJuYXRpdmVfdGVzdC1hZGRyZXNzLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGFsdGVybmF0aXZlX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYWx0ZXJuYXRpdmVfdGVzdC1hZGRyZXNzLm8gYHRlc3QgLWYgJ2FkZHJlc3MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYWRkcmVzcy5jCisKK2FsdGVybmF0aXZlX3Rlc3QtYWRkcmVzcy5vYmo6IGFkZHJlc3MuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGFsdGVybmF0aXZlX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGFsdGVybmF0aXZlX3Rlc3QtYWRkcmVzcy5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2FsdGVybmF0aXZlX3Rlc3QtYWRkcmVzcy5UcG8gLWMgLW8gYWx0ZXJuYXRpdmVfdGVzdC1hZGRyZXNzLm9iaiBgaWYgdGVzdCAtZiAnYWRkcmVzcy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2FkZHJlc3MuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvYWRkcmVzcy5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9hbHRlcm5hdGl2ZV90ZXN0LWFkZHJlc3MuVHBvICQoREVQRElSKS9hbHRlcm5hdGl2ZV90ZXN0LWFkZHJlc3MuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhZGRyZXNzLmMnIG9iamVjdD0nYWx0ZXJuYXRpdmVfdGVzdC1hZGRyZXNzLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYWx0ZXJuYXRpdmVfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhbHRlcm5hdGl2ZV90ZXN0LWFkZHJlc3Mub2JqIGBpZiB0ZXN0IC1mICdhZGRyZXNzLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnYWRkcmVzcy5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9hZGRyZXNzLmMnOyBmaWAKKworYWx0ZXJuYXRpdmVfdGVzdC1hbHRlcm5hdGl2ZS10ZXN0Lm86IGFsdGVybmF0aXZlLXRlc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGFsdGVybmF0aXZlX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGFsdGVybmF0aXZlX3Rlc3QtYWx0ZXJuYXRpdmUtdGVzdC5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9hbHRlcm5hdGl2ZV90ZXN0LWFsdGVybmF0aXZlLXRlc3QuVHBvIC1jIC1vIGFsdGVybmF0aXZlX3Rlc3QtYWx0ZXJuYXRpdmUtdGVzdC5vIGB0ZXN0IC1mICdhbHRlcm5hdGl2ZS10ZXN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFsdGVybmF0aXZlLXRlc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYWx0ZXJuYXRpdmVfdGVzdC1hbHRlcm5hdGl2ZS10ZXN0LlRwbyAkKERFUERJUikvYWx0ZXJuYXRpdmVfdGVzdC1hbHRlcm5hdGl2ZS10ZXN0LlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYWx0ZXJuYXRpdmUtdGVzdC5jJyBvYmplY3Q9J2FsdGVybmF0aXZlX3Rlc3QtYWx0ZXJuYXRpdmUtdGVzdC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhbHRlcm5hdGl2ZV90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGFsdGVybmF0aXZlX3Rlc3QtYWx0ZXJuYXRpdmUtdGVzdC5vIGB0ZXN0IC1mICdhbHRlcm5hdGl2ZS10ZXN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFsdGVybmF0aXZlLXRlc3QuYworCithbHRlcm5hdGl2ZV90ZXN0LWFsdGVybmF0aXZlLXRlc3Qub2JqOiBhbHRlcm5hdGl2ZS10ZXN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhbHRlcm5hdGl2ZV90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBhbHRlcm5hdGl2ZV90ZXN0LWFsdGVybmF0aXZlLXRlc3Qub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9hbHRlcm5hdGl2ZV90ZXN0LWFsdGVybmF0aXZlLXRlc3QuVHBvIC1jIC1vIGFsdGVybmF0aXZlX3Rlc3QtYWx0ZXJuYXRpdmUtdGVzdC5vYmogYGlmIHRlc3QgLWYgJ2FsdGVybmF0aXZlLXRlc3QuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdhbHRlcm5hdGl2ZS10ZXN0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2FsdGVybmF0aXZlLXRlc3QuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYWx0ZXJuYXRpdmVfdGVzdC1hbHRlcm5hdGl2ZS10ZXN0LlRwbyAkKERFUERJUikvYWx0ZXJuYXRpdmVfdGVzdC1hbHRlcm5hdGl2ZS10ZXN0LlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYWx0ZXJuYXRpdmUtdGVzdC5jJyBvYmplY3Q9J2FsdGVybmF0aXZlX3Rlc3QtYWx0ZXJuYXRpdmUtdGVzdC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGFsdGVybmF0aXZlX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYWx0ZXJuYXRpdmVfdGVzdC1hbHRlcm5hdGl2ZS10ZXN0Lm9iaiBgaWYgdGVzdCAtZiAnYWx0ZXJuYXRpdmUtdGVzdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2FsdGVybmF0aXZlLXRlc3QuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvYWx0ZXJuYXRpdmUtdGVzdC5jJzsgZmlgCisKK2FsdGVybmF0aXZlX3Rlc3QtdXRmOC5vOiB1dGY4LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhbHRlcm5hdGl2ZV90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBhbHRlcm5hdGl2ZV90ZXN0LXV0ZjgubyAtTUQgLU1QIC1NRiAkKERFUERJUikvYWx0ZXJuYXRpdmVfdGVzdC11dGY4LlRwbyAtYyAtbyBhbHRlcm5hdGl2ZV90ZXN0LXV0ZjgubyBgdGVzdCAtZiAndXRmOC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B1dGY4LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2FsdGVybmF0aXZlX3Rlc3QtdXRmOC5UcG8gJChERVBESVIpL2FsdGVybmF0aXZlX3Rlc3QtdXRmOC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3V0ZjguYycgb2JqZWN0PSdhbHRlcm5hdGl2ZV90ZXN0LXV0ZjgubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYWx0ZXJuYXRpdmVfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhbHRlcm5hdGl2ZV90ZXN0LXV0ZjgubyBgdGVzdCAtZiAndXRmOC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B1dGY4LmMKKworYWx0ZXJuYXRpdmVfdGVzdC11dGY4Lm9iajogdXRmOC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYWx0ZXJuYXRpdmVfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYWx0ZXJuYXRpdmVfdGVzdC11dGY4Lm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvYWx0ZXJuYXRpdmVfdGVzdC11dGY4LlRwbyAtYyAtbyBhbHRlcm5hdGl2ZV90ZXN0LXV0Zjgub2JqIGBpZiB0ZXN0IC1mICd1dGY4LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAndXRmOC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS91dGY4LmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2FsdGVybmF0aXZlX3Rlc3QtdXRmOC5UcG8gJChERVBESVIpL2FsdGVybmF0aXZlX3Rlc3QtdXRmOC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3V0ZjguYycgb2JqZWN0PSdhbHRlcm5hdGl2ZV90ZXN0LXV0Zjgub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhbHRlcm5hdGl2ZV90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGFsdGVybmF0aXZlX3Rlc3QtdXRmOC5vYmogYGlmIHRlc3QgLWYgJ3V0ZjguYyc7IHRoZW4gJChDWUdQQVRIX1cpICd1dGY4LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3V0ZjguYyc7IGZpYAorCitkb21haW5fdGVzdC1kb21haW4ubzogZG9tYWluLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChkb21haW5fdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZG9tYWluX3Rlc3QtZG9tYWluLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2RvbWFpbl90ZXN0LWRvbWFpbi5UcG8gLWMgLW8gZG9tYWluX3Rlc3QtZG9tYWluLm8gYHRlc3QgLWYgJ2RvbWFpbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bkb21haW4uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvZG9tYWluX3Rlc3QtZG9tYWluLlRwbyAkKERFUERJUikvZG9tYWluX3Rlc3QtZG9tYWluLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZG9tYWluLmMnIG9iamVjdD0nZG9tYWluX3Rlc3QtZG9tYWluLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGRvbWFpbl90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGRvbWFpbl90ZXN0LWRvbWFpbi5vIGB0ZXN0IC1mICdkb21haW4uYycgfHwgZWNobyAnJChzcmNkaXIpLydgZG9tYWluLmMKKworZG9tYWluX3Rlc3QtZG9tYWluLm9iajogZG9tYWluLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChkb21haW5fdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZG9tYWluX3Rlc3QtZG9tYWluLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvZG9tYWluX3Rlc3QtZG9tYWluLlRwbyAtYyAtbyBkb21haW5fdGVzdC1kb21haW4ub2JqIGBpZiB0ZXN0IC1mICdkb21haW4uYyc7IHRoZW4gJChDWUdQQVRIX1cpICdkb21haW4uYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZG9tYWluLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2RvbWFpbl90ZXN0LWRvbWFpbi5UcG8gJChERVBESVIpL2RvbWFpbl90ZXN0LWRvbWFpbi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2RvbWFpbi5jJyBvYmplY3Q9J2RvbWFpbl90ZXN0LWRvbWFpbi5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGRvbWFpbl90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGRvbWFpbl90ZXN0LWRvbWFpbi5vYmogYGlmIHRlc3QgLWYgJ2RvbWFpbi5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2RvbWFpbi5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9kb21haW4uYyc7IGZpYAorCitkb21haW5fdGVzdC1tYWxsb2MubzogbWFsbG9jLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChkb21haW5fdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZG9tYWluX3Rlc3QtbWFsbG9jLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2RvbWFpbl90ZXN0LW1hbGxvYy5UcG8gLWMgLW8gZG9tYWluX3Rlc3QtbWFsbG9jLm8gYHRlc3QgLWYgJ21hbGxvYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BtYWxsb2MuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvZG9tYWluX3Rlc3QtbWFsbG9jLlRwbyAkKERFUERJUikvZG9tYWluX3Rlc3QtbWFsbG9jLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nbWFsbG9jLmMnIG9iamVjdD0nZG9tYWluX3Rlc3QtbWFsbG9jLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGRvbWFpbl90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGRvbWFpbl90ZXN0LW1hbGxvYy5vIGB0ZXN0IC1mICdtYWxsb2MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbWFsbG9jLmMKKworZG9tYWluX3Rlc3QtbWFsbG9jLm9iajogbWFsbG9jLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChkb21haW5fdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZG9tYWluX3Rlc3QtbWFsbG9jLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvZG9tYWluX3Rlc3QtbWFsbG9jLlRwbyAtYyAtbyBkb21haW5fdGVzdC1tYWxsb2Mub2JqIGBpZiB0ZXN0IC1mICdtYWxsb2MuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdtYWxsb2MuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvbWFsbG9jLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2RvbWFpbl90ZXN0LW1hbGxvYy5UcG8gJChERVBESVIpL2RvbWFpbl90ZXN0LW1hbGxvYy5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J21hbGxvYy5jJyBvYmplY3Q9J2RvbWFpbl90ZXN0LW1hbGxvYy5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGRvbWFpbl90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGRvbWFpbl90ZXN0LW1hbGxvYy5vYmogYGlmIHRlc3QgLWYgJ21hbGxvYy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ21hbGxvYy5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9tYWxsb2MuYyc7IGZpYAorCitkb21haW5fdGVzdC1hZGRyZXNzLm86IGFkZHJlc3MuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGRvbWFpbl90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBkb21haW5fdGVzdC1hZGRyZXNzLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2RvbWFpbl90ZXN0LWFkZHJlc3MuVHBvIC1jIC1vIGRvbWFpbl90ZXN0LWFkZHJlc3MubyBgdGVzdCAtZiAnYWRkcmVzcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhZGRyZXNzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2RvbWFpbl90ZXN0LWFkZHJlc3MuVHBvICQoREVQRElSKS9kb21haW5fdGVzdC1hZGRyZXNzLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYWRkcmVzcy5jJyBvYmplY3Q9J2RvbWFpbl90ZXN0LWFkZHJlc3MubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZG9tYWluX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZG9tYWluX3Rlc3QtYWRkcmVzcy5vIGB0ZXN0IC1mICdhZGRyZXNzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFkZHJlc3MuYworCitkb21haW5fdGVzdC1hZGRyZXNzLm9iajogYWRkcmVzcy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZG9tYWluX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGRvbWFpbl90ZXN0LWFkZHJlc3Mub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9kb21haW5fdGVzdC1hZGRyZXNzLlRwbyAtYyAtbyBkb21haW5fdGVzdC1hZGRyZXNzLm9iaiBgaWYgdGVzdCAtZiAnYWRkcmVzcy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2FkZHJlc3MuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvYWRkcmVzcy5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9kb21haW5fdGVzdC1hZGRyZXNzLlRwbyAkKERFUERJUikvZG9tYWluX3Rlc3QtYWRkcmVzcy5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FkZHJlc3MuYycgb2JqZWN0PSdkb21haW5fdGVzdC1hZGRyZXNzLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZG9tYWluX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZG9tYWluX3Rlc3QtYWRkcmVzcy5vYmogYGlmIHRlc3QgLWYgJ2FkZHJlc3MuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdhZGRyZXNzLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2FkZHJlc3MuYyc7IGZpYAorCitkb21haW5fdGVzdC1kb21haW4tdGVzdC5vOiBkb21haW4tdGVzdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZG9tYWluX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGRvbWFpbl90ZXN0LWRvbWFpbi10ZXN0Lm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2RvbWFpbl90ZXN0LWRvbWFpbi10ZXN0LlRwbyAtYyAtbyBkb21haW5fdGVzdC1kb21haW4tdGVzdC5vIGB0ZXN0IC1mICdkb21haW4tdGVzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bkb21haW4tdGVzdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9kb21haW5fdGVzdC1kb21haW4tdGVzdC5UcG8gJChERVBESVIpL2RvbWFpbl90ZXN0LWRvbWFpbi10ZXN0LlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZG9tYWluLXRlc3QuYycgb2JqZWN0PSdkb21haW5fdGVzdC1kb21haW4tdGVzdC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChkb21haW5fdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBkb21haW5fdGVzdC1kb21haW4tdGVzdC5vIGB0ZXN0IC1mICdkb21haW4tdGVzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bkb21haW4tdGVzdC5jCisKK2RvbWFpbl90ZXN0LWRvbWFpbi10ZXN0Lm9iajogZG9tYWluLXRlc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGRvbWFpbl90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBkb21haW5fdGVzdC1kb21haW4tdGVzdC5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2RvbWFpbl90ZXN0LWRvbWFpbi10ZXN0LlRwbyAtYyAtbyBkb21haW5fdGVzdC1kb21haW4tdGVzdC5vYmogYGlmIHRlc3QgLWYgJ2RvbWFpbi10ZXN0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZG9tYWluLXRlc3QuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZG9tYWluLXRlc3QuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvZG9tYWluX3Rlc3QtZG9tYWluLXRlc3QuVHBvICQoREVQRElSKS9kb21haW5fdGVzdC1kb21haW4tdGVzdC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2RvbWFpbi10ZXN0LmMnIG9iamVjdD0nZG9tYWluX3Rlc3QtZG9tYWluLXRlc3Qub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChkb21haW5fdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBkb21haW5fdGVzdC1kb21haW4tdGVzdC5vYmogYGlmIHRlc3QgLWYgJ2RvbWFpbi10ZXN0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZG9tYWluLXRlc3QuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZG9tYWluLXRlc3QuYyc7IGZpYAorCitkb21haW5fdGVzdC11dGY4Lm86IHV0ZjguYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGRvbWFpbl90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBkb21haW5fdGVzdC11dGY4Lm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2RvbWFpbl90ZXN0LXV0ZjguVHBvIC1jIC1vIGRvbWFpbl90ZXN0LXV0ZjgubyBgdGVzdCAtZiAndXRmOC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B1dGY4LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2RvbWFpbl90ZXN0LXV0ZjguVHBvICQoREVQRElSKS9kb21haW5fdGVzdC11dGY4LlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ndXRmOC5jJyBvYmplY3Q9J2RvbWFpbl90ZXN0LXV0ZjgubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZG9tYWluX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZG9tYWluX3Rlc3QtdXRmOC5vIGB0ZXN0IC1mICd1dGY4LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHV0ZjguYworCitkb21haW5fdGVzdC11dGY4Lm9iajogdXRmOC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZG9tYWluX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGRvbWFpbl90ZXN0LXV0Zjgub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9kb21haW5fdGVzdC11dGY4LlRwbyAtYyAtbyBkb21haW5fdGVzdC11dGY4Lm9iaiBgaWYgdGVzdCAtZiAndXRmOC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3V0ZjguYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvdXRmOC5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9kb21haW5fdGVzdC11dGY4LlRwbyAkKERFUERJUikvZG9tYWluX3Rlc3QtdXRmOC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3V0ZjguYycgb2JqZWN0PSdkb21haW5fdGVzdC11dGY4Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZG9tYWluX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZG9tYWluX3Rlc3QtdXRmOC5vYmogYGlmIHRlc3QgLWYgJ3V0ZjguYyc7IHRoZW4gJChDWUdQQVRIX1cpICd1dGY4LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3V0ZjguYyc7IGZpYAorCitzdHJsc3RfdGVzdC1zdHJsc3Qubzogc3RybHN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChzdHJsc3RfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgc3RybHN0X3Rlc3Qtc3RybHN0Lm8gLU1EIC1NUCAtTUYgJChERVBESVIpL3N0cmxzdF90ZXN0LXN0cmxzdC5UcG8gLWMgLW8gc3RybHN0X3Rlc3Qtc3RybHN0Lm8gYHRlc3QgLWYgJ3N0cmxzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzdHJsc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvc3RybHN0X3Rlc3Qtc3RybHN0LlRwbyAkKERFUERJUikvc3RybHN0X3Rlc3Qtc3RybHN0LlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nc3RybHN0LmMnIG9iamVjdD0nc3RybHN0X3Rlc3Qtc3RybHN0Lm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHN0cmxzdF90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHN0cmxzdF90ZXN0LXN0cmxzdC5vIGB0ZXN0IC1mICdzdHJsc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3RybHN0LmMKKworc3RybHN0X3Rlc3Qtc3RybHN0Lm9iajogc3RybHN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChzdHJsc3RfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgc3RybHN0X3Rlc3Qtc3RybHN0Lm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvc3RybHN0X3Rlc3Qtc3RybHN0LlRwbyAtYyAtbyBzdHJsc3RfdGVzdC1zdHJsc3Qub2JqIGBpZiB0ZXN0IC1mICdzdHJsc3QuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdzdHJsc3QuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2Rpcikvc3RybHN0LmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3N0cmxzdF90ZXN0LXN0cmxzdC5UcG8gJChERVBESVIpL3N0cmxzdF90ZXN0LXN0cmxzdC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3N0cmxzdC5jJyBvYmplY3Q9J3N0cmxzdF90ZXN0LXN0cmxzdC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHN0cmxzdF90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHN0cmxzdF90ZXN0LXN0cmxzdC5vYmogYGlmIHRlc3QgLWYgJ3N0cmxzdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3N0cmxzdC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9zdHJsc3QuYyc7IGZpYAorCitzdHJsc3RfdGVzdC1tYWxsb2MubzogbWFsbG9jLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChzdHJsc3RfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgc3RybHN0X3Rlc3QtbWFsbG9jLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL3N0cmxzdF90ZXN0LW1hbGxvYy5UcG8gLWMgLW8gc3RybHN0X3Rlc3QtbWFsbG9jLm8gYHRlc3QgLWYgJ21hbGxvYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BtYWxsb2MuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvc3RybHN0X3Rlc3QtbWFsbG9jLlRwbyAkKERFUERJUikvc3RybHN0X3Rlc3QtbWFsbG9jLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nbWFsbG9jLmMnIG9iamVjdD0nc3RybHN0X3Rlc3QtbWFsbG9jLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHN0cmxzdF90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHN0cmxzdF90ZXN0LW1hbGxvYy5vIGB0ZXN0IC1mICdtYWxsb2MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbWFsbG9jLmMKKworc3RybHN0X3Rlc3QtbWFsbG9jLm9iajogbWFsbG9jLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChzdHJsc3RfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgc3RybHN0X3Rlc3QtbWFsbG9jLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvc3RybHN0X3Rlc3QtbWFsbG9jLlRwbyAtYyAtbyBzdHJsc3RfdGVzdC1tYWxsb2Mub2JqIGBpZiB0ZXN0IC1mICdtYWxsb2MuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdtYWxsb2MuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvbWFsbG9jLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3N0cmxzdF90ZXN0LW1hbGxvYy5UcG8gJChERVBESVIpL3N0cmxzdF90ZXN0LW1hbGxvYy5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J21hbGxvYy5jJyBvYmplY3Q9J3N0cmxzdF90ZXN0LW1hbGxvYy5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHN0cmxzdF90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHN0cmxzdF90ZXN0LW1hbGxvYy5vYmogYGlmIHRlc3QgLWYgJ21hbGxvYy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ21hbGxvYy5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9tYWxsb2MuYyc7IGZpYAorCitzdHJsc3RfdGVzdC1zdHJsc3QtdGVzdC5vOiBzdHJsc3QtdGVzdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoc3RybHN0X3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHN0cmxzdF90ZXN0LXN0cmxzdC10ZXN0Lm8gLU1EIC1NUCAtTUYgJChERVBESVIpL3N0cmxzdF90ZXN0LXN0cmxzdC10ZXN0LlRwbyAtYyAtbyBzdHJsc3RfdGVzdC1zdHJsc3QtdGVzdC5vIGB0ZXN0IC1mICdzdHJsc3QtdGVzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzdHJsc3QtdGVzdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9zdHJsc3RfdGVzdC1zdHJsc3QtdGVzdC5UcG8gJChERVBESVIpL3N0cmxzdF90ZXN0LXN0cmxzdC10ZXN0LlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nc3RybHN0LXRlc3QuYycgb2JqZWN0PSdzdHJsc3RfdGVzdC1zdHJsc3QtdGVzdC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChzdHJsc3RfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzdHJsc3RfdGVzdC1zdHJsc3QtdGVzdC5vIGB0ZXN0IC1mICdzdHJsc3QtdGVzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzdHJsc3QtdGVzdC5jCisKK3N0cmxzdF90ZXN0LXN0cmxzdC10ZXN0Lm9iajogc3RybHN0LXRlc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHN0cmxzdF90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBzdHJsc3RfdGVzdC1zdHJsc3QtdGVzdC5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL3N0cmxzdF90ZXN0LXN0cmxzdC10ZXN0LlRwbyAtYyAtbyBzdHJsc3RfdGVzdC1zdHJsc3QtdGVzdC5vYmogYGlmIHRlc3QgLWYgJ3N0cmxzdC10ZXN0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnc3RybHN0LXRlc3QuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2Rpcikvc3RybHN0LXRlc3QuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvc3RybHN0X3Rlc3Qtc3RybHN0LXRlc3QuVHBvICQoREVQRElSKS9zdHJsc3RfdGVzdC1zdHJsc3QtdGVzdC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3N0cmxzdC10ZXN0LmMnIG9iamVjdD0nc3RybHN0X3Rlc3Qtc3RybHN0LXRlc3Qub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChzdHJsc3RfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzdHJsc3RfdGVzdC1zdHJsc3QtdGVzdC5vYmogYGlmIHRlc3QgLWYgJ3N0cmxzdC10ZXN0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnc3RybHN0LXRlc3QuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2Rpcikvc3RybHN0LXRlc3QuYyc7IGZpYAorCit0aW1ldmFsX3Rlc3QtdGltZXZhbC5vOiB0aW1ldmFsLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh0aW1ldmFsX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHRpbWV2YWxfdGVzdC10aW1ldmFsLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL3RpbWV2YWxfdGVzdC10aW1ldmFsLlRwbyAtYyAtbyB0aW1ldmFsX3Rlc3QtdGltZXZhbC5vIGB0ZXN0IC1mICd0aW1ldmFsLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHRpbWV2YWwuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvdGltZXZhbF90ZXN0LXRpbWV2YWwuVHBvICQoREVQRElSKS90aW1ldmFsX3Rlc3QtdGltZXZhbC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3RpbWV2YWwuYycgb2JqZWN0PSd0aW1ldmFsX3Rlc3QtdGltZXZhbC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh0aW1ldmFsX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gdGltZXZhbF90ZXN0LXRpbWV2YWwubyBgdGVzdCAtZiAndGltZXZhbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B0aW1ldmFsLmMKKwordGltZXZhbF90ZXN0LXRpbWV2YWwub2JqOiB0aW1ldmFsLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh0aW1ldmFsX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHRpbWV2YWxfdGVzdC10aW1ldmFsLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvdGltZXZhbF90ZXN0LXRpbWV2YWwuVHBvIC1jIC1vIHRpbWV2YWxfdGVzdC10aW1ldmFsLm9iaiBgaWYgdGVzdCAtZiAndGltZXZhbC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3RpbWV2YWwuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvdGltZXZhbC5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS90aW1ldmFsX3Rlc3QtdGltZXZhbC5UcG8gJChERVBESVIpL3RpbWV2YWxfdGVzdC10aW1ldmFsLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ndGltZXZhbC5jJyBvYmplY3Q9J3RpbWV2YWxfdGVzdC10aW1ldmFsLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQodGltZXZhbF90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHRpbWV2YWxfdGVzdC10aW1ldmFsLm9iaiBgaWYgdGVzdCAtZiAndGltZXZhbC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3RpbWV2YWwuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvdGltZXZhbC5jJzsgZmlgCisKK3RpbWV2YWxfdGVzdC10aW1ldmFsLXRlc3QubzogdGltZXZhbC10ZXN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh0aW1ldmFsX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHRpbWV2YWxfdGVzdC10aW1ldmFsLXRlc3QubyAtTUQgLU1QIC1NRiAkKERFUERJUikvdGltZXZhbF90ZXN0LXRpbWV2YWwtdGVzdC5UcG8gLWMgLW8gdGltZXZhbF90ZXN0LXRpbWV2YWwtdGVzdC5vIGB0ZXN0IC1mICd0aW1ldmFsLXRlc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdGltZXZhbC10ZXN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3RpbWV2YWxfdGVzdC10aW1ldmFsLXRlc3QuVHBvICQoREVQRElSKS90aW1ldmFsX3Rlc3QtdGltZXZhbC10ZXN0LlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ndGltZXZhbC10ZXN0LmMnIG9iamVjdD0ndGltZXZhbF90ZXN0LXRpbWV2YWwtdGVzdC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh0aW1ldmFsX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gdGltZXZhbF90ZXN0LXRpbWV2YWwtdGVzdC5vIGB0ZXN0IC1mICd0aW1ldmFsLXRlc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdGltZXZhbC10ZXN0LmMKKwordGltZXZhbF90ZXN0LXRpbWV2YWwtdGVzdC5vYmo6IHRpbWV2YWwtdGVzdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQodGltZXZhbF90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCB0aW1ldmFsX3Rlc3QtdGltZXZhbC10ZXN0Lm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvdGltZXZhbF90ZXN0LXRpbWV2YWwtdGVzdC5UcG8gLWMgLW8gdGltZXZhbF90ZXN0LXRpbWV2YWwtdGVzdC5vYmogYGlmIHRlc3QgLWYgJ3RpbWV2YWwtdGVzdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3RpbWV2YWwtdGVzdC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS90aW1ldmFsLXRlc3QuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvdGltZXZhbF90ZXN0LXRpbWV2YWwtdGVzdC5UcG8gJChERVBESVIpL3RpbWV2YWxfdGVzdC10aW1ldmFsLXRlc3QuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSd0aW1ldmFsLXRlc3QuYycgb2JqZWN0PSd0aW1ldmFsX3Rlc3QtdGltZXZhbC10ZXN0Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQodGltZXZhbF90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHRpbWV2YWxfdGVzdC10aW1ldmFsLXRlc3Qub2JqIGBpZiB0ZXN0IC1mICd0aW1ldmFsLXRlc3QuYyc7IHRoZW4gJChDWUdQQVRIX1cpICd0aW1ldmFsLXRlc3QuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvdGltZXZhbC10ZXN0LmMnOyBmaWAKKwordXRmOF90ZXN0LXV0ZjgtdGVzdC5vOiB1dGY4LXRlc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHV0ZjhfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgdXRmOF90ZXN0LXV0ZjgtdGVzdC5vIC1NRCAtTVAgLU1GICQoREVQRElSKS91dGY4X3Rlc3QtdXRmOC10ZXN0LlRwbyAtYyAtbyB1dGY4X3Rlc3QtdXRmOC10ZXN0Lm8gYHRlc3QgLWYgJ3V0ZjgtdGVzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B1dGY4LXRlc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvdXRmOF90ZXN0LXV0ZjgtdGVzdC5UcG8gJChERVBESVIpL3V0ZjhfdGVzdC11dGY4LXRlc3QuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSd1dGY4LXRlc3QuYycgb2JqZWN0PSd1dGY4X3Rlc3QtdXRmOC10ZXN0Lm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHV0ZjhfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyB1dGY4X3Rlc3QtdXRmOC10ZXN0Lm8gYHRlc3QgLWYgJ3V0ZjgtdGVzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B1dGY4LXRlc3QuYworCit1dGY4X3Rlc3QtdXRmOC10ZXN0Lm9iajogdXRmOC10ZXN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh1dGY4X3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHV0ZjhfdGVzdC11dGY4LXRlc3Qub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS91dGY4X3Rlc3QtdXRmOC10ZXN0LlRwbyAtYyAtbyB1dGY4X3Rlc3QtdXRmOC10ZXN0Lm9iaiBgaWYgdGVzdCAtZiAndXRmOC10ZXN0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAndXRmOC10ZXN0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3V0ZjgtdGVzdC5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS91dGY4X3Rlc3QtdXRmOC10ZXN0LlRwbyAkKERFUERJUikvdXRmOF90ZXN0LXV0ZjgtdGVzdC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3V0ZjgtdGVzdC5jJyBvYmplY3Q9J3V0ZjhfdGVzdC11dGY4LXRlc3Qub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh1dGY4X3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gdXRmOF90ZXN0LXV0ZjgtdGVzdC5vYmogYGlmIHRlc3QgLWYgJ3V0ZjgtdGVzdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3V0ZjgtdGVzdC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS91dGY4LXRlc3QuYyc7IGZpYAorCit1dGY4X3Rlc3QtdXRmOC5vOiB1dGY4LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh1dGY4X3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHV0ZjhfdGVzdC11dGY4Lm8gLU1EIC1NUCAtTUYgJChERVBESVIpL3V0ZjhfdGVzdC11dGY4LlRwbyAtYyAtbyB1dGY4X3Rlc3QtdXRmOC5vIGB0ZXN0IC1mICd1dGY4LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHV0ZjguYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvdXRmOF90ZXN0LXV0ZjguVHBvICQoREVQRElSKS91dGY4X3Rlc3QtdXRmOC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3V0ZjguYycgb2JqZWN0PSd1dGY4X3Rlc3QtdXRmOC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh1dGY4X3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gdXRmOF90ZXN0LXV0ZjgubyBgdGVzdCAtZiAndXRmOC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B1dGY4LmMKKwordXRmOF90ZXN0LXV0Zjgub2JqOiB1dGY4LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh1dGY4X3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHV0ZjhfdGVzdC11dGY4Lm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvdXRmOF90ZXN0LXV0ZjguVHBvIC1jIC1vIHV0ZjhfdGVzdC11dGY4Lm9iaiBgaWYgdGVzdCAtZiAndXRmOC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3V0ZjguYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvdXRmOC5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS91dGY4X3Rlc3QtdXRmOC5UcG8gJChERVBESVIpL3V0ZjhfdGVzdC11dGY4LlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ndXRmOC5jJyBvYmplY3Q9J3V0ZjhfdGVzdC11dGY4Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQodXRmOF90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHV0ZjhfdGVzdC11dGY4Lm9iaiBgaWYgdGVzdCAtZiAndXRmOC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3V0ZjguYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvdXRmOC5jJzsgZmlgCisKK3dhdGNoX3Rlc3QtdGltZXZhbC5vOiB0aW1ldmFsLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh3YXRjaF90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCB3YXRjaF90ZXN0LXRpbWV2YWwubyAtTUQgLU1QIC1NRiAkKERFUERJUikvd2F0Y2hfdGVzdC10aW1ldmFsLlRwbyAtYyAtbyB3YXRjaF90ZXN0LXRpbWV2YWwubyBgdGVzdCAtZiAndGltZXZhbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B0aW1ldmFsLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3dhdGNoX3Rlc3QtdGltZXZhbC5UcG8gJChERVBESVIpL3dhdGNoX3Rlc3QtdGltZXZhbC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3RpbWV2YWwuYycgb2JqZWN0PSd3YXRjaF90ZXN0LXRpbWV2YWwubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQod2F0Y2hfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyB3YXRjaF90ZXN0LXRpbWV2YWwubyBgdGVzdCAtZiAndGltZXZhbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B0aW1ldmFsLmMKKword2F0Y2hfdGVzdC10aW1ldmFsLm9iajogdGltZXZhbC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQod2F0Y2hfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgd2F0Y2hfdGVzdC10aW1ldmFsLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvd2F0Y2hfdGVzdC10aW1ldmFsLlRwbyAtYyAtbyB3YXRjaF90ZXN0LXRpbWV2YWwub2JqIGBpZiB0ZXN0IC1mICd0aW1ldmFsLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAndGltZXZhbC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS90aW1ldmFsLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3dhdGNoX3Rlc3QtdGltZXZhbC5UcG8gJChERVBESVIpL3dhdGNoX3Rlc3QtdGltZXZhbC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3RpbWV2YWwuYycgb2JqZWN0PSd3YXRjaF90ZXN0LXRpbWV2YWwub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh3YXRjaF90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHdhdGNoX3Rlc3QtdGltZXZhbC5vYmogYGlmIHRlc3QgLWYgJ3RpbWV2YWwuYyc7IHRoZW4gJChDWUdQQVRIX1cpICd0aW1ldmFsLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3RpbWV2YWwuYyc7IGZpYAorCit3YXRjaF90ZXN0LXNpbXBsZS13YXRjaC5vOiBzaW1wbGUtd2F0Y2guYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHdhdGNoX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHdhdGNoX3Rlc3Qtc2ltcGxlLXdhdGNoLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL3dhdGNoX3Rlc3Qtc2ltcGxlLXdhdGNoLlRwbyAtYyAtbyB3YXRjaF90ZXN0LXNpbXBsZS13YXRjaC5vIGB0ZXN0IC1mICdzaW1wbGUtd2F0Y2guYycgfHwgZWNobyAnJChzcmNkaXIpLydgc2ltcGxlLXdhdGNoLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3dhdGNoX3Rlc3Qtc2ltcGxlLXdhdGNoLlRwbyAkKERFUERJUikvd2F0Y2hfdGVzdC1zaW1wbGUtd2F0Y2guUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdzaW1wbGUtd2F0Y2guYycgb2JqZWN0PSd3YXRjaF90ZXN0LXNpbXBsZS13YXRjaC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh3YXRjaF90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHdhdGNoX3Rlc3Qtc2ltcGxlLXdhdGNoLm8gYHRlc3QgLWYgJ3NpbXBsZS13YXRjaC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzaW1wbGUtd2F0Y2guYworCit3YXRjaF90ZXN0LXNpbXBsZS13YXRjaC5vYmo6IHNpbXBsZS13YXRjaC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQod2F0Y2hfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgd2F0Y2hfdGVzdC1zaW1wbGUtd2F0Y2gub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS93YXRjaF90ZXN0LXNpbXBsZS13YXRjaC5UcG8gLWMgLW8gd2F0Y2hfdGVzdC1zaW1wbGUtd2F0Y2gub2JqIGBpZiB0ZXN0IC1mICdzaW1wbGUtd2F0Y2guYyc7IHRoZW4gJChDWUdQQVRIX1cpICdzaW1wbGUtd2F0Y2guYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2Rpcikvc2ltcGxlLXdhdGNoLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3dhdGNoX3Rlc3Qtc2ltcGxlLXdhdGNoLlRwbyAkKERFUERJUikvd2F0Y2hfdGVzdC1zaW1wbGUtd2F0Y2guUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdzaW1wbGUtd2F0Y2guYycgb2JqZWN0PSd3YXRjaF90ZXN0LXNpbXBsZS13YXRjaC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHdhdGNoX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gd2F0Y2hfdGVzdC1zaW1wbGUtd2F0Y2gub2JqIGBpZiB0ZXN0IC1mICdzaW1wbGUtd2F0Y2guYyc7IHRoZW4gJChDWUdQQVRIX1cpICdzaW1wbGUtd2F0Y2guYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2Rpcikvc2ltcGxlLXdhdGNoLmMnOyBmaWAKKword2F0Y2hfdGVzdC1tYWxsb2MubzogbWFsbG9jLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh3YXRjaF90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCB3YXRjaF90ZXN0LW1hbGxvYy5vIC1NRCAtTVAgLU1GICQoREVQRElSKS93YXRjaF90ZXN0LW1hbGxvYy5UcG8gLWMgLW8gd2F0Y2hfdGVzdC1tYWxsb2MubyBgdGVzdCAtZiAnbWFsbG9jLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYG1hbGxvYy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS93YXRjaF90ZXN0LW1hbGxvYy5UcG8gJChERVBESVIpL3dhdGNoX3Rlc3QtbWFsbG9jLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nbWFsbG9jLmMnIG9iamVjdD0nd2F0Y2hfdGVzdC1tYWxsb2MubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQod2F0Y2hfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyB3YXRjaF90ZXN0LW1hbGxvYy5vIGB0ZXN0IC1mICdtYWxsb2MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbWFsbG9jLmMKKword2F0Y2hfdGVzdC1tYWxsb2Mub2JqOiBtYWxsb2MuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHdhdGNoX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHdhdGNoX3Rlc3QtbWFsbG9jLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvd2F0Y2hfdGVzdC1tYWxsb2MuVHBvIC1jIC1vIHdhdGNoX3Rlc3QtbWFsbG9jLm9iaiBgaWYgdGVzdCAtZiAnbWFsbG9jLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnbWFsbG9jLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL21hbGxvYy5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS93YXRjaF90ZXN0LW1hbGxvYy5UcG8gJChERVBESVIpL3dhdGNoX3Rlc3QtbWFsbG9jLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nbWFsbG9jLmMnIG9iamVjdD0nd2F0Y2hfdGVzdC1tYWxsb2Mub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh3YXRjaF90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHdhdGNoX3Rlc3QtbWFsbG9jLm9iaiBgaWYgdGVzdCAtZiAnbWFsbG9jLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnbWFsbG9jLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL21hbGxvYy5jJzsgZmlgCisKK3dhdGNoX3Rlc3Qtd2F0Y2gtdGVzdC5vOiB3YXRjaC10ZXN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh3YXRjaF90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCB3YXRjaF90ZXN0LXdhdGNoLXRlc3QubyAtTUQgLU1QIC1NRiAkKERFUERJUikvd2F0Y2hfdGVzdC13YXRjaC10ZXN0LlRwbyAtYyAtbyB3YXRjaF90ZXN0LXdhdGNoLXRlc3QubyBgdGVzdCAtZiAnd2F0Y2gtdGVzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B3YXRjaC10ZXN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3dhdGNoX3Rlc3Qtd2F0Y2gtdGVzdC5UcG8gJChERVBESVIpL3dhdGNoX3Rlc3Qtd2F0Y2gtdGVzdC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3dhdGNoLXRlc3QuYycgb2JqZWN0PSd3YXRjaF90ZXN0LXdhdGNoLXRlc3QubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQod2F0Y2hfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyB3YXRjaF90ZXN0LXdhdGNoLXRlc3QubyBgdGVzdCAtZiAnd2F0Y2gtdGVzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B3YXRjaC10ZXN0LmMKKword2F0Y2hfdGVzdC13YXRjaC10ZXN0Lm9iajogd2F0Y2gtdGVzdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQod2F0Y2hfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgd2F0Y2hfdGVzdC13YXRjaC10ZXN0Lm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvd2F0Y2hfdGVzdC13YXRjaC10ZXN0LlRwbyAtYyAtbyB3YXRjaF90ZXN0LXdhdGNoLXRlc3Qub2JqIGBpZiB0ZXN0IC1mICd3YXRjaC10ZXN0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnd2F0Y2gtdGVzdC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS93YXRjaC10ZXN0LmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3dhdGNoX3Rlc3Qtd2F0Y2gtdGVzdC5UcG8gJChERVBESVIpL3dhdGNoX3Rlc3Qtd2F0Y2gtdGVzdC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3dhdGNoLXRlc3QuYycgb2JqZWN0PSd3YXRjaF90ZXN0LXdhdGNoLXRlc3Qub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh3YXRjaF90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHdhdGNoX3Rlc3Qtd2F0Y2gtdGVzdC5vYmogYGlmIHRlc3QgLWYgJ3dhdGNoLXRlc3QuYyc7IHRoZW4gJChDWUdQQVRIX1cpICd3YXRjaC10ZXN0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3dhdGNoLXRlc3QuYyc7IGZpYAorCit3YXRjaF90ZXN0X3RocmVhZC10aW1ldmFsLm86IHRpbWV2YWwuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHdhdGNoX3Rlc3RfdGhyZWFkX0NGTEFHUykgJChDRkxBR1MpIC1NVCB3YXRjaF90ZXN0X3RocmVhZC10aW1ldmFsLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL3dhdGNoX3Rlc3RfdGhyZWFkLXRpbWV2YWwuVHBvIC1jIC1vIHdhdGNoX3Rlc3RfdGhyZWFkLXRpbWV2YWwubyBgdGVzdCAtZiAndGltZXZhbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B0aW1ldmFsLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3dhdGNoX3Rlc3RfdGhyZWFkLXRpbWV2YWwuVHBvICQoREVQRElSKS93YXRjaF90ZXN0X3RocmVhZC10aW1ldmFsLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ndGltZXZhbC5jJyBvYmplY3Q9J3dhdGNoX3Rlc3RfdGhyZWFkLXRpbWV2YWwubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQod2F0Y2hfdGVzdF90aHJlYWRfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gd2F0Y2hfdGVzdF90aHJlYWQtdGltZXZhbC5vIGB0ZXN0IC1mICd0aW1ldmFsLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHRpbWV2YWwuYworCit3YXRjaF90ZXN0X3RocmVhZC10aW1ldmFsLm9iajogdGltZXZhbC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQod2F0Y2hfdGVzdF90aHJlYWRfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHdhdGNoX3Rlc3RfdGhyZWFkLXRpbWV2YWwub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS93YXRjaF90ZXN0X3RocmVhZC10aW1ldmFsLlRwbyAtYyAtbyB3YXRjaF90ZXN0X3RocmVhZC10aW1ldmFsLm9iaiBgaWYgdGVzdCAtZiAndGltZXZhbC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3RpbWV2YWwuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvdGltZXZhbC5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS93YXRjaF90ZXN0X3RocmVhZC10aW1ldmFsLlRwbyAkKERFUERJUikvd2F0Y2hfdGVzdF90aHJlYWQtdGltZXZhbC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3RpbWV2YWwuYycgb2JqZWN0PSd3YXRjaF90ZXN0X3RocmVhZC10aW1ldmFsLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQod2F0Y2hfdGVzdF90aHJlYWRfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gd2F0Y2hfdGVzdF90aHJlYWQtdGltZXZhbC5vYmogYGlmIHRlc3QgLWYgJ3RpbWV2YWwuYyc7IHRoZW4gJChDWUdQQVRIX1cpICd0aW1ldmFsLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3RpbWV2YWwuYyc7IGZpYAorCit3YXRjaF90ZXN0X3RocmVhZC1zaW1wbGUtd2F0Y2gubzogc2ltcGxlLXdhdGNoLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh3YXRjaF90ZXN0X3RocmVhZF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgd2F0Y2hfdGVzdF90aHJlYWQtc2ltcGxlLXdhdGNoLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL3dhdGNoX3Rlc3RfdGhyZWFkLXNpbXBsZS13YXRjaC5UcG8gLWMgLW8gd2F0Y2hfdGVzdF90aHJlYWQtc2ltcGxlLXdhdGNoLm8gYHRlc3QgLWYgJ3NpbXBsZS13YXRjaC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzaW1wbGUtd2F0Y2guYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvd2F0Y2hfdGVzdF90aHJlYWQtc2ltcGxlLXdhdGNoLlRwbyAkKERFUERJUikvd2F0Y2hfdGVzdF90aHJlYWQtc2ltcGxlLXdhdGNoLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nc2ltcGxlLXdhdGNoLmMnIG9iamVjdD0nd2F0Y2hfdGVzdF90aHJlYWQtc2ltcGxlLXdhdGNoLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHdhdGNoX3Rlc3RfdGhyZWFkX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHdhdGNoX3Rlc3RfdGhyZWFkLXNpbXBsZS13YXRjaC5vIGB0ZXN0IC1mICdzaW1wbGUtd2F0Y2guYycgfHwgZWNobyAnJChzcmNkaXIpLydgc2ltcGxlLXdhdGNoLmMKKword2F0Y2hfdGVzdF90aHJlYWQtc2ltcGxlLXdhdGNoLm9iajogc2ltcGxlLXdhdGNoLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh3YXRjaF90ZXN0X3RocmVhZF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgd2F0Y2hfdGVzdF90aHJlYWQtc2ltcGxlLXdhdGNoLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvd2F0Y2hfdGVzdF90aHJlYWQtc2ltcGxlLXdhdGNoLlRwbyAtYyAtbyB3YXRjaF90ZXN0X3RocmVhZC1zaW1wbGUtd2F0Y2gub2JqIGBpZiB0ZXN0IC1mICdzaW1wbGUtd2F0Y2guYyc7IHRoZW4gJChDWUdQQVRIX1cpICdzaW1wbGUtd2F0Y2guYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2Rpcikvc2ltcGxlLXdhdGNoLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3dhdGNoX3Rlc3RfdGhyZWFkLXNpbXBsZS13YXRjaC5UcG8gJChERVBESVIpL3dhdGNoX3Rlc3RfdGhyZWFkLXNpbXBsZS13YXRjaC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3NpbXBsZS13YXRjaC5jJyBvYmplY3Q9J3dhdGNoX3Rlc3RfdGhyZWFkLXNpbXBsZS13YXRjaC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHdhdGNoX3Rlc3RfdGhyZWFkX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHdhdGNoX3Rlc3RfdGhyZWFkLXNpbXBsZS13YXRjaC5vYmogYGlmIHRlc3QgLWYgJ3NpbXBsZS13YXRjaC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3NpbXBsZS13YXRjaC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9zaW1wbGUtd2F0Y2guYyc7IGZpYAorCit3YXRjaF90ZXN0X3RocmVhZC1tYWxsb2MubzogbWFsbG9jLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh3YXRjaF90ZXN0X3RocmVhZF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgd2F0Y2hfdGVzdF90aHJlYWQtbWFsbG9jLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL3dhdGNoX3Rlc3RfdGhyZWFkLW1hbGxvYy5UcG8gLWMgLW8gd2F0Y2hfdGVzdF90aHJlYWQtbWFsbG9jLm8gYHRlc3QgLWYgJ21hbGxvYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BtYWxsb2MuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvd2F0Y2hfdGVzdF90aHJlYWQtbWFsbG9jLlRwbyAkKERFUERJUikvd2F0Y2hfdGVzdF90aHJlYWQtbWFsbG9jLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nbWFsbG9jLmMnIG9iamVjdD0nd2F0Y2hfdGVzdF90aHJlYWQtbWFsbG9jLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHdhdGNoX3Rlc3RfdGhyZWFkX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHdhdGNoX3Rlc3RfdGhyZWFkLW1hbGxvYy5vIGB0ZXN0IC1mICdtYWxsb2MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbWFsbG9jLmMKKword2F0Y2hfdGVzdF90aHJlYWQtbWFsbG9jLm9iajogbWFsbG9jLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh3YXRjaF90ZXN0X3RocmVhZF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgd2F0Y2hfdGVzdF90aHJlYWQtbWFsbG9jLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvd2F0Y2hfdGVzdF90aHJlYWQtbWFsbG9jLlRwbyAtYyAtbyB3YXRjaF90ZXN0X3RocmVhZC1tYWxsb2Mub2JqIGBpZiB0ZXN0IC1mICdtYWxsb2MuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdtYWxsb2MuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvbWFsbG9jLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3dhdGNoX3Rlc3RfdGhyZWFkLW1hbGxvYy5UcG8gJChERVBESVIpL3dhdGNoX3Rlc3RfdGhyZWFkLW1hbGxvYy5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J21hbGxvYy5jJyBvYmplY3Q9J3dhdGNoX3Rlc3RfdGhyZWFkLW1hbGxvYy5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHdhdGNoX3Rlc3RfdGhyZWFkX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHdhdGNoX3Rlc3RfdGhyZWFkLW1hbGxvYy5vYmogYGlmIHRlc3QgLWYgJ21hbGxvYy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ21hbGxvYy5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9tYWxsb2MuYyc7IGZpYAorCit3YXRjaF90ZXN0X3RocmVhZC13YXRjaC10ZXN0Lm86IHdhdGNoLXRlc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHdhdGNoX3Rlc3RfdGhyZWFkX0NGTEFHUykgJChDRkxBR1MpIC1NVCB3YXRjaF90ZXN0X3RocmVhZC13YXRjaC10ZXN0Lm8gLU1EIC1NUCAtTUYgJChERVBESVIpL3dhdGNoX3Rlc3RfdGhyZWFkLXdhdGNoLXRlc3QuVHBvIC1jIC1vIHdhdGNoX3Rlc3RfdGhyZWFkLXdhdGNoLXRlc3QubyBgdGVzdCAtZiAnd2F0Y2gtdGVzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B3YXRjaC10ZXN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3dhdGNoX3Rlc3RfdGhyZWFkLXdhdGNoLXRlc3QuVHBvICQoREVQRElSKS93YXRjaF90ZXN0X3RocmVhZC13YXRjaC10ZXN0LlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nd2F0Y2gtdGVzdC5jJyBvYmplY3Q9J3dhdGNoX3Rlc3RfdGhyZWFkLXdhdGNoLXRlc3QubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQod2F0Y2hfdGVzdF90aHJlYWRfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gd2F0Y2hfdGVzdF90aHJlYWQtd2F0Y2gtdGVzdC5vIGB0ZXN0IC1mICd3YXRjaC10ZXN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHdhdGNoLXRlc3QuYworCit3YXRjaF90ZXN0X3RocmVhZC13YXRjaC10ZXN0Lm9iajogd2F0Y2gtdGVzdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQod2F0Y2hfdGVzdF90aHJlYWRfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHdhdGNoX3Rlc3RfdGhyZWFkLXdhdGNoLXRlc3Qub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS93YXRjaF90ZXN0X3RocmVhZC13YXRjaC10ZXN0LlRwbyAtYyAtbyB3YXRjaF90ZXN0X3RocmVhZC13YXRjaC10ZXN0Lm9iaiBgaWYgdGVzdCAtZiAnd2F0Y2gtdGVzdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3dhdGNoLXRlc3QuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2Rpcikvd2F0Y2gtdGVzdC5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS93YXRjaF90ZXN0X3RocmVhZC13YXRjaC10ZXN0LlRwbyAkKERFUERJUikvd2F0Y2hfdGVzdF90aHJlYWQtd2F0Y2gtdGVzdC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3dhdGNoLXRlc3QuYycgb2JqZWN0PSd3YXRjaF90ZXN0X3RocmVhZC13YXRjaC10ZXN0Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQod2F0Y2hfdGVzdF90aHJlYWRfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gd2F0Y2hfdGVzdF90aHJlYWQtd2F0Y2gtdGVzdC5vYmogYGlmIHRlc3QgLWYgJ3dhdGNoLXRlc3QuYyc7IHRoZW4gJChDWUdQQVRIX1cpICd3YXRjaC10ZXN0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3dhdGNoLXRlc3QuYyc7IGZpYAorCit3YXRjaF90ZXN0X3RocmVhZC10aHJlYWQtd2F0Y2gubzogdGhyZWFkLXdhdGNoLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh3YXRjaF90ZXN0X3RocmVhZF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgd2F0Y2hfdGVzdF90aHJlYWQtdGhyZWFkLXdhdGNoLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL3dhdGNoX3Rlc3RfdGhyZWFkLXRocmVhZC13YXRjaC5UcG8gLWMgLW8gd2F0Y2hfdGVzdF90aHJlYWQtdGhyZWFkLXdhdGNoLm8gYHRlc3QgLWYgJ3RocmVhZC13YXRjaC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B0aHJlYWQtd2F0Y2guYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvd2F0Y2hfdGVzdF90aHJlYWQtdGhyZWFkLXdhdGNoLlRwbyAkKERFUERJUikvd2F0Y2hfdGVzdF90aHJlYWQtdGhyZWFkLXdhdGNoLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ndGhyZWFkLXdhdGNoLmMnIG9iamVjdD0nd2F0Y2hfdGVzdF90aHJlYWQtdGhyZWFkLXdhdGNoLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHdhdGNoX3Rlc3RfdGhyZWFkX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHdhdGNoX3Rlc3RfdGhyZWFkLXRocmVhZC13YXRjaC5vIGB0ZXN0IC1mICd0aHJlYWQtd2F0Y2guYycgfHwgZWNobyAnJChzcmNkaXIpLydgdGhyZWFkLXdhdGNoLmMKKword2F0Y2hfdGVzdF90aHJlYWQtdGhyZWFkLXdhdGNoLm9iajogdGhyZWFkLXdhdGNoLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh3YXRjaF90ZXN0X3RocmVhZF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgd2F0Y2hfdGVzdF90aHJlYWQtdGhyZWFkLXdhdGNoLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvd2F0Y2hfdGVzdF90aHJlYWQtdGhyZWFkLXdhdGNoLlRwbyAtYyAtbyB3YXRjaF90ZXN0X3RocmVhZC10aHJlYWQtd2F0Y2gub2JqIGBpZiB0ZXN0IC1mICd0aHJlYWQtd2F0Y2guYyc7IHRoZW4gJChDWUdQQVRIX1cpICd0aHJlYWQtd2F0Y2guYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvdGhyZWFkLXdhdGNoLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3dhdGNoX3Rlc3RfdGhyZWFkLXRocmVhZC13YXRjaC5UcG8gJChERVBESVIpL3dhdGNoX3Rlc3RfdGhyZWFkLXRocmVhZC13YXRjaC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3RocmVhZC13YXRjaC5jJyBvYmplY3Q9J3dhdGNoX3Rlc3RfdGhyZWFkLXRocmVhZC13YXRjaC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHdhdGNoX3Rlc3RfdGhyZWFkX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHdhdGNoX3Rlc3RfdGhyZWFkLXRocmVhZC13YXRjaC5vYmogYGlmIHRlc3QgLWYgJ3RocmVhZC13YXRjaC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3RocmVhZC13YXRjaC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS90aHJlYWQtd2F0Y2guYyc7IGZpYAorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworaW5zdGFsbC1hdmFoaV9jb21tb25pbmNsdWRlSEVBREVSUzogJChhdmFoaV9jb21tb25pbmNsdWRlX0hFQURFUlMpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJdGVzdCAteiAiJChhdmFoaV9jb21tb25pbmNsdWRlZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQoYXZhaGlfY29tbW9uaW5jbHVkZWRpcikiCisJQGxpc3Q9JyQoYXZhaGlfY29tbW9uaW5jbHVkZV9IRUFERVJTKSc7IHRlc3QgLW4gIiQoYXZhaGlfY29tbW9uaW5jbHVkZWRpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAorCSAgZWNobyAiJCRkJCRwIjsgXAorCWRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAorCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKKwkgIGVjaG8gIiAkKElOU1RBTExfSEVBREVSKSAkJGZpbGVzICckKERFU1RESVIpJChhdmFoaV9jb21tb25pbmNsdWRlZGlyKSciOyBcCisJICAkKElOU1RBTExfSEVBREVSKSAkJGZpbGVzICIkKERFU1RESVIpJChhdmFoaV9jb21tb25pbmNsdWRlZGlyKSIgfHwgZXhpdCAkJD87IFwKKwlkb25lCisKK3VuaW5zdGFsbC1hdmFoaV9jb21tb25pbmNsdWRlSEVBREVSUzoKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKGF2YWhpX2NvbW1vbmluY2x1ZGVfSEVBREVSUyknOyB0ZXN0IC1uICIkKGF2YWhpX2NvbW1vbmluY2x1ZGVkaXIpIiB8fCBsaXN0PTsgXAorCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgc2VkIC1lICdzfF4uKi98fCdgOyBcCisJZGlyPSckKERFU1RESVIpJChhdmFoaV9jb21tb25pbmNsdWRlZGlyKSc7ICQoYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpcikKKworSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlta2lkIC1mSUQgJCR1bmlxdWUKK3RhZ3M6IFRBR1MKKworVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlzZXQgeDsgXAorCWhlcmU9YHB3ZGA7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJc2hpZnQ7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKKwkgIGVsc2UgXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgJCR1bmlxdWU7IFwKKwkgIGZpOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAorCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorCSAgICAgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUgJChMVExJQlJBUklFUykgJChQUk9HUkFNUykgJChIRUFERVJTKQoraW5zdGFsbGRpcnM6CisJZm9yIGRpciBpbiAiJChERVNURElSKSQobGliZGlyKSIgIiQoREVTVERJUikkKGF2YWhpX2NvbW1vbmluY2x1ZGVkaXIpIjsgZG8gXAorCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAorCWRvbmUKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgICAgIGluc3RhbGw7IFwKKwllbHNlIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAorCWZpCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tYW0KKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGliTFRMSUJSQVJJRVMgY2xlYW4tbGlidG9vbCBcCisJY2xlYW4tbm9pbnN0UFJPR1JBTVMgbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKKwlkaXN0Y2xlYW4tdGFncworCitkdmk6IGR2aS1hbQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtYW0KKworaHRtbC1hbToKKworaW5mbzogaW5mby1hbQorCitpbmZvLWFtOgorCitpbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtYXZhaGlfY29tbW9uaW5jbHVkZUhFQURFUlMKKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCisKK2luc3RhbGwtZHZpLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06IGluc3RhbGwtbGliTFRMSUJSQVJJRVMKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtYXZhaGlfY29tbW9uaW5jbHVkZUhFQURFUlMgXAorCXVuaW5zdGFsbC1saWJMVExJQlJBUklFUworCisuTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisKKy5QSE9OWTogQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKKwljbGVhbi1saWJMVExJQlJBUklFUyBjbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdFBST0dSQU1TIGN0YWdzIFwKKwlkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIFwKKwlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gXAorCWluc3RhbGwtYXZhaGlfY29tbW9uaW5jbHVkZUhFQURFUlMgaW5zdGFsbC1kYXRhIFwKKwlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIFwKKwlpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gXAorCWluc3RhbGwtaW5mby1hbSBpbnN0YWxsLWxpYkxUTElCUkFSSUVTIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIFwKKwlpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBcCisJaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIFwKKwltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBcCisJbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAorCXRhZ3MgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSBcCisJdW5pbnN0YWxsLWF2YWhpX2NvbW1vbmluY2x1ZGVIRUFERVJTIHVuaW5zdGFsbC1saWJMVExJQlJBUklFUworCisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21tb24vYWRkcmVzcy5jIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbW1vbi9hZGRyZXNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThmNjE0OAotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21tb24vYWRkcmVzcy5jCkBAIC0wLDAgKzEsMTU1IEBACisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImFkZHJlc3MuaCIKKyNpbmNsdWRlICJtYWxsb2MuaCIKKworc3RhdGljIHNpemVfdCBhZGRyZXNzX2dldF9zaXplKGNvbnN0IEF2YWhpQWRkcmVzcyAqYSkgeworICAgIGFzc2VydChhKTsKKworICAgIGlmIChhLT5wcm90byA9PSBBVkFISV9QUk9UT19JTkVUKQorICAgICAgICByZXR1cm4gNDsKKyAgICBlbHNlIGlmIChhLT5wcm90byA9PSBBVkFISV9QUk9UT19JTkVUNikKKyAgICAgICAgcmV0dXJuIDE2OworCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBhdmFoaV9hZGRyZXNzX2NtcChjb25zdCBBdmFoaUFkZHJlc3MgKmEsIGNvbnN0IEF2YWhpQWRkcmVzcyAqYikgeworICAgIGFzc2VydChhKTsKKyAgICBhc3NlcnQoYik7CisKKyAgICBpZiAoYS0+cHJvdG8gIT0gYi0+cHJvdG8pCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHJldHVybiBtZW1jbXAoYS0+ZGF0YS5kYXRhLCBiLT5kYXRhLmRhdGEsIGFkZHJlc3NfZ2V0X3NpemUoYSkpOworfQorCitjaGFyICphdmFoaV9hZGRyZXNzX3NucHJpbnQoY2hhciAqcywgc2l6ZV90IGxlbmd0aCwgY29uc3QgQXZhaGlBZGRyZXNzICphKSB7CisgICAgYXNzZXJ0KHMpOworICAgIGFzc2VydChsZW5ndGgpOworICAgIGFzc2VydChhKTsKKworICAgIGlmICghKGluZXRfbnRvcChhdmFoaV9wcm90b190b19hZihhLT5wcm90byksIGEtPmRhdGEuZGF0YSwgcywgbGVuZ3RoKSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmV0dXJuIHM7Cit9CisKK2NoYXIqIGF2YWhpX3JldmVyc2VfbG9va3VwX25hbWUoY29uc3QgQXZhaGlBZGRyZXNzICphLCBjaGFyICpyZXRfcywgc2l6ZV90IGxlbmd0aCkgeworICAgIGFzc2VydChyZXRfcyk7CisgICAgYXNzZXJ0KGxlbmd0aCA+IDApOworICAgIGFzc2VydChhKTsKKworICAgIGlmIChhLT5wcm90byA9PSBBVkFISV9QUk9UT19JTkVUKSB7CisgICAgICAgIHVpbnQzMl90IG4gPSBudG9obChhLT5kYXRhLmlwdjQuYWRkcmVzcyk7CisgICAgICAgIHNucHJpbnRmKAorICAgICAgICAgICAgcmV0X3MsIGxlbmd0aCwKKyAgICAgICAgICAgICIldS4ldS4ldS4ldS5pbi1hZGRyLmFycGEiLAorICAgICAgICAgICAgbiAmIDB4RkYsIChuID4+IDgpICYgMHhGRiwgKG4gPj4gMTYpICYgMHhGRiwgbiA+PiAyNCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXNzZXJ0KGEtPnByb3RvID09IEFWQUhJX1BST1RPX0lORVQ2KTsKKworICAgICAgICBzbnByaW50ZigKKyAgICAgICAgICAgIHJldF9zLCBsZW5ndGgsCisgICAgICAgICAgICAiJXguJXguJXguJXguJXguJXguJXguJXguJXguJXguJXguJXguJXguJXguJXguJXguJXguJXguJXguJXguJXguJXguJXguJXguJXguJXguJXguJXguJXguJXguJXguJXguaXA2LmFycGEiLAorICAgICAgICAgICAgYS0+ZGF0YS5pcHY2LmFkZHJlc3NbMTVdICYgMHhGLCBhLT5kYXRhLmlwdjYuYWRkcmVzc1sxNV0gPj4gNCwKKyAgICAgICAgICAgIGEtPmRhdGEuaXB2Ni5hZGRyZXNzWzE0XSAmIDB4RiwgYS0+ZGF0YS5pcHY2LmFkZHJlc3NbMTRdID4+IDQsCisgICAgICAgICAgICBhLT5kYXRhLmlwdjYuYWRkcmVzc1sxM10gJiAweEYsIGEtPmRhdGEuaXB2Ni5hZGRyZXNzWzEzXSA+PiA0LAorICAgICAgICAgICAgYS0+ZGF0YS5pcHY2LmFkZHJlc3NbMTJdICYgMHhGLCBhLT5kYXRhLmlwdjYuYWRkcmVzc1sxMl0gPj4gNCwKKyAgICAgICAgICAgIGEtPmRhdGEuaXB2Ni5hZGRyZXNzWzExXSAmIDB4RiwgYS0+ZGF0YS5pcHY2LmFkZHJlc3NbMTFdID4+IDQsCisgICAgICAgICAgICBhLT5kYXRhLmlwdjYuYWRkcmVzc1sxMF0gJiAweEYsIGEtPmRhdGEuaXB2Ni5hZGRyZXNzWzEwXSA+PiA0LAorICAgICAgICAgICAgYS0+ZGF0YS5pcHY2LmFkZHJlc3NbIDldICYgMHhGLCBhLT5kYXRhLmlwdjYuYWRkcmVzc1sgOV0gPj4gNCwKKyAgICAgICAgICAgIGEtPmRhdGEuaXB2Ni5hZGRyZXNzWyA4XSAmIDB4RiwgYS0+ZGF0YS5pcHY2LmFkZHJlc3NbIDhdID4+IDQsCisgICAgICAgICAgICBhLT5kYXRhLmlwdjYuYWRkcmVzc1sgN10gJiAweEYsIGEtPmRhdGEuaXB2Ni5hZGRyZXNzWyA3XSA+PiA0LAorICAgICAgICAgICAgYS0+ZGF0YS5pcHY2LmFkZHJlc3NbIDZdICYgMHhGLCBhLT5kYXRhLmlwdjYuYWRkcmVzc1sgNl0gPj4gNCwKKyAgICAgICAgICAgIGEtPmRhdGEuaXB2Ni5hZGRyZXNzWyA1XSAmIDB4RiwgYS0+ZGF0YS5pcHY2LmFkZHJlc3NbIDVdID4+IDQsCisgICAgICAgICAgICBhLT5kYXRhLmlwdjYuYWRkcmVzc1sgNF0gJiAweEYsIGEtPmRhdGEuaXB2Ni5hZGRyZXNzWyA0XSA+PiA0LAorICAgICAgICAgICAgYS0+ZGF0YS5pcHY2LmFkZHJlc3NbIDNdICYgMHhGLCBhLT5kYXRhLmlwdjYuYWRkcmVzc1sgM10gPj4gNCwKKyAgICAgICAgICAgIGEtPmRhdGEuaXB2Ni5hZGRyZXNzWyAyXSAmIDB4RiwgYS0+ZGF0YS5pcHY2LmFkZHJlc3NbIDJdID4+IDQsCisgICAgICAgICAgICBhLT5kYXRhLmlwdjYuYWRkcmVzc1sgMV0gJiAweEYsIGEtPmRhdGEuaXB2Ni5hZGRyZXNzWyAxXSA+PiA0LAorICAgICAgICAgICAgYS0+ZGF0YS5pcHY2LmFkZHJlc3NbIDBdICYgMHhGLCBhLT5kYXRhLmlwdjYuYWRkcmVzc1sgMF0gPj4gNCk7CisgICAgfQorCisgICAgcmV0dXJuIHJldF9zOworfQorCitBdmFoaUFkZHJlc3MgKmF2YWhpX2FkZHJlc3NfcGFyc2UoY29uc3QgY2hhciAqcywgQXZhaGlQcm90b2NvbCBwcm90bywgQXZhaGlBZGRyZXNzICpyZXRfYWRkcikgeworICAgIGFzc2VydChyZXRfYWRkcik7CisgICAgYXNzZXJ0KHMpOworCisgICAgaWYgKHByb3RvID09IEFWQUhJX1BST1RPX1VOU1BFQykgeworICAgICAgICBpZiAoaW5ldF9wdG9uKEFGX0lORVQsIHMsIHJldF9hZGRyLT5kYXRhLmRhdGEpIDw9IDApIHsKKyAgICAgICAgICAgIGlmIChpbmV0X3B0b24oQUZfSU5FVDYsIHMsIHJldF9hZGRyLT5kYXRhLmRhdGEpIDw9IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0X2FkZHItPnByb3RvID0gQVZBSElfUFJPVE9fSU5FVDY7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmV0X2FkZHItPnByb3RvID0gQVZBSElfUFJPVE9fSU5FVDsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoaW5ldF9wdG9uKGF2YWhpX3Byb3RvX3RvX2FmKHByb3RvKSwgcywgcmV0X2FkZHItPmRhdGEuZGF0YSkgPD0gMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworCisgICAgICAgIHJldF9hZGRyLT5wcm90byA9IHByb3RvOworICAgIH0KKworICAgIHJldHVybiByZXRfYWRkcjsKK30KKworaW50IGF2YWhpX3Byb3RvX3RvX2FmKEF2YWhpUHJvdG9jb2wgcHJvdG8pIHsKKyAgICBpZiAocHJvdG8gPT0gQVZBSElfUFJPVE9fSU5FVCkKKyAgICAgICAgcmV0dXJuIEFGX0lORVQ7CisgICAgaWYgKHByb3RvID09IEFWQUhJX1BST1RPX0lORVQ2KQorICAgICAgICByZXR1cm4gQUZfSU5FVDY7CisKKyAgICBhc3NlcnQocHJvdG8gPT0gQVZBSElfUFJPVE9fVU5TUEVDKTsKKyAgICByZXR1cm4gQUZfVU5TUEVDOworfQorCitBdmFoaVByb3RvY29sIGF2YWhpX2FmX3RvX3Byb3RvKGludCBhZikgeworICAgIGlmIChhZiA9PSBBRl9JTkVUKQorICAgICAgICByZXR1cm4gQVZBSElfUFJPVE9fSU5FVDsKKyAgICBpZiAoYWYgPT0gQUZfSU5FVDYpCisgICAgICAgIHJldHVybiBBVkFISV9QUk9UT19JTkVUNjsKKworICAgIGFzc2VydChhZiA9PSBBRl9VTlNQRUMpOworICAgIHJldHVybiBBVkFISV9QUk9UT19VTlNQRUM7Cit9CisKK2NvbnN0IGNoYXIqIGF2YWhpX3Byb3RvX3RvX3N0cmluZyhBdmFoaVByb3RvY29sIHByb3RvKSB7CisgICAgaWYgKHByb3RvID09IEFWQUhJX1BST1RPX0lORVQpCisgICAgICAgIHJldHVybiAiSVB2NCI7CisgICAgaWYgKHByb3RvID09IEFWQUhJX1BST1RPX0lORVQ2KQorICAgICAgICByZXR1cm4gIklQdjYiOworCisgICAgYXNzZXJ0KHByb3RvID09IEFWQUhJX1BST1RPX1VOU1BFQyk7CisgICAgcmV0dXJuICJVTlNQRUMiOworfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvbW1vbi9hZGRyZXNzLmggYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tbW9uL2FkZHJlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTQxMDRmCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbW1vbi9hZGRyZXNzLmgKQEAgLTAsMCArMSwxMTkgQEAKKyNpZm5kZWYgZm9vYWRkcmVzc2hmb28KKyNkZWZpbmUgZm9vYWRkcmVzc2hmb28KKworLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisvKiogXGZpbGUgYWRkcmVzcy5oIERlZmluaXRpb25zIGFuZCBmdW5jdGlvbnMgdG8gbWFuaXB1bGF0ZSBJUCBhZGRyZXNzZXMuICovCisKKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2NkZWNsLmg+CisKK0FWQUhJX0NfREVDTF9CRUdJTgorCisvKiogUHJvdG9jb2wgZmFtaWx5IHNwZWNpZmljYXRpb24sIHRha2VzIHRoZSB2YWx1ZXMgQVZBSElfUFJPVE9fSU5FVCwgQVZBSElfUFJPVE9fSU5FVDYsIEFWQUhJX1BST1RPX1VOU1BFQyAqLwordHlwZWRlZiBpbnQgQXZhaGlQcm90b2NvbDsKKworLyoqIE51bWVyaWMgbmV0d29yayBpbnRlcmZhY2UgaW5kZXguIFRha2VzIE9TIGRlcGVuZGVudCB2YWx1ZXMgYW5kIHRoZSBzcGVjaWFsIGNvbnN0YW50IEFWQUhJX0lGX1VOU1BFQyAgKi8KK3R5cGVkZWYgaW50IEF2YWhpSWZJbmRleDsKKworLyoqIFZhbHVlcyBmb3IgQXZhaGlQcm90b2NvbCAqLworZW51bSB7CisgICAgQVZBSElfUFJPVE9fSU5FVCA9IDAsICAgICAvKio8IElQdjQgKi8KKyAgICBBVkFISV9QUk9UT19JTkVUNiA9IDEsICAgLyoqPCBJUHY2ICovCisgICAgQVZBSElfUFJPVE9fVU5TUEVDID0gLTEgIC8qKjwgVW5zcGVjaWZpZWQvYWxsIHByb3RvY29sKHMpICovCit9OworCisvKiogU3BlY2lhbCB2YWx1ZXMgZm9yIEF2YWhpSWZJbmRleCAqLworZW51bSB7CisgICAgQVZBSElfSUZfVU5TUEVDID0gLTEgICAgICAgLyoqPCBVbnNwZWNpZmllZC9hbGwgaW50ZXJmYWNlKHMpICovCit9OworCisvKiogTWF4aW11bSBzaXplIG9mIGFuIGFkZHJlc3MgaW4gc3RyaW5nIGZvcm0gKi8KKyNkZWZpbmUgQVZBSElfQUREUkVTU19TVFJfTUFYIDQwIC8qIElQdjYgTWF4ID0gNCo4ICsgNyArIDEgZm9yIE5VTCAqLworCisvKiogUmV0dXJuIFRSVUUgaWYgdGhlIHNwZWNpZmllZCBpbnRlcmZhY2UgaW5kZXggaXMgdmFsaWQgKi8KKyNkZWZpbmUgQVZBSElfSUZfVkFMSUQoaWZpbmRleCkgKCgoaWZpbmRleCkgPj0gMCkgfHwgKChpZmluZGV4KSA9PSBBVkFISV9JRl9VTlNQRUMpKQorCisvKiogUmV0dXJuIFRSVUUgaWYgdGhlIHNwZWNpZmllZCBwcm90b2NvbCBpcyB2YWxpZCAqLworI2RlZmluZSBBVkFISV9QUk9UT19WQUxJRChwcm90b2NvbCkgKCgocHJvdG9jb2wpID09IEFWQUhJX1BST1RPX0lORVQpIHx8ICgocHJvdG9jb2wpID09IEFWQUhJX1BST1RPX0lORVQ2KSB8fCAoKHByb3RvY29sKSA9PSBBVkFISV9QUk9UT19VTlNQRUMpKQorCisvKiogQW4gSVB2NCBhZGRyZXNzICovCit0eXBlZGVmIHN0cnVjdCBBdmFoaUlQdjRBZGRyZXNzIHsKKyAgICB1aW50MzJfdCBhZGRyZXNzOyAvKio8IEFkZHJlc3MgZGF0YSBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIuICovCit9IEF2YWhpSVB2NEFkZHJlc3M7CisKKy8qKiBBbiBJUHY2IGFkZHJlc3MgKi8KK3R5cGVkZWYgc3RydWN0IEF2YWhpSVB2NkFkZHJlc3MgeworICAgIHVpbnQ4X3QgYWRkcmVzc1sxNl07IC8qKjwgQWRkcmVzcyBkYXRhICovCit9IEF2YWhpSVB2NkFkZHJlc3M7CisKKy8qKiBQcm90b2NvbCAoYWRkcmVzcyBmYW1pbHkpIGluZGVwZW5kZW50IGFkZHJlc3Mgc3RydWN0dXJlICovCit0eXBlZGVmIHN0cnVjdCBBdmFoaUFkZHJlc3MgeworICAgIEF2YWhpUHJvdG9jb2wgcHJvdG87IC8qKjwgQWRkcmVzcyBmYW1pbHkgKi8KKworICAgIHVuaW9uIHsKKyAgICAgICAgQXZhaGlJUHY2QWRkcmVzcyBpcHY2OyAgLyoqPCBBZGRyZXNzIHdoZW4gSVB2NiAqLworICAgICAgICBBdmFoaUlQdjRBZGRyZXNzIGlwdjQ7ICAvKio8IEFkZHJlc3Mgd2hlbiBJUHY0ICovCisgICAgICAgIHVpbnQ4X3QgZGF0YVsxXTsgICAgICAgIC8qKjwgVHlwZS1pbmRlcGVuZGVudCBkYXRhIGZpZWxkICovCisgICAgfSBkYXRhOworfSBBdmFoaUFkZHJlc3M7CisKKy8qKiBAeyBcbmFtZSBDb21wYXJpc29uICovCisKKy8qKiBDb21wYXJlIHR3byBhZGRyZXNzZXMuIFJldHVybnMgMCB3aGVuIGVxdWFsLCBhIG5lZ2F0aXZlIHZhbHVlIHdoZW4gYSA8IGIsIGEgcG9zaXRpdmUgdmFsdWUgd2hlbiBhID4gYi4gKi8KK2ludCBhdmFoaV9hZGRyZXNzX2NtcChjb25zdCBBdmFoaUFkZHJlc3MgKmEsIGNvbnN0IEF2YWhpQWRkcmVzcyAqYik7CisKKy8qKiBAfSAqLworCisvKiogQHsgXG5hbWUgU3RyaW5nIGNvbnZlcnNpb24gKi8KKworLyoqIENvbnZlcnQgdGhlIHNwZWNpZmllZCBhZGRyZXNzICphIHRvIGEgaHVtYW4gcmVhZGFibGUgY2hhcmFjdGVyIHN0cmluZywgdXNlIEFWQUhJX0FERFJFU1NfU1RSX01BWCB0byBhbGxvY2F0ZSBhbiBhcnJheSBvZiB0aGUgcmlnaHQgc2l6ZSAqLworY2hhciAqYXZhaGlfYWRkcmVzc19zbnByaW50KGNoYXIgKnJldF9zLCBzaXplX3QgbGVuZ3RoLCBjb25zdCBBdmFoaUFkZHJlc3MgKmEpOworCisvKiogQ29udmVydCB0aGUgc3BlY2lmaWVkIGh1bWFuIHJlYWRhYmxlIGNoYXJhY3RlciBzdHJpbmcgdG8gYW4KKyAqIGFkZHJlc3Mgc3RydWN0dXJlLiBTZXQgYWYgdG8gQVZBSElfVU5TUEVDIGZvciBhdXRvbWF0aWMgYWRkcmVzcworICogZmFtaWx5IGRldGVjdGlvbi4gKi8KK0F2YWhpQWRkcmVzcyAqYXZhaGlfYWRkcmVzc19wYXJzZShjb25zdCBjaGFyICpzLCBBdmFoaVByb3RvY29sIGFmLCBBdmFoaUFkZHJlc3MgKnJldF9hZGRyKTsKKworLyoqIEB9ICovCisKKy8qKiBcY29uZCBmdWxsZG9jcyAqLworLyoqIEdlbmVyYXRlIHRoZSBETlMgcmV2ZXJzZSBsb29rdXAgbmFtZSBmb3IgYW4gSVB2NCBvciBJUHY2IGFkZHJlc3MuICovCitjaGFyKiBhdmFoaV9yZXZlcnNlX2xvb2t1cF9uYW1lKGNvbnN0IEF2YWhpQWRkcmVzcyAqYSwgY2hhciAqcmV0X3MsIHNpemVfdCBsZW5ndGgpOworLyoqIFxlbmRjb25kICovCisKKy8qKiBAeyBcbmFtZSBQcm90b2NvbC9hZGRyZXNzIGZhbWlseSBoYW5kbGluZyAqLworCisvKiogTWFwIEFWQUhJX1BST1RPX3h4eCBjb25zdGFudHMgdG8gVW5peCBBRl94eHggY29uc3RhbnRzICovCitpbnQgYXZhaGlfcHJvdG9fdG9fYWYoQXZhaGlQcm90b2NvbCBwcm90byk7CisKKy8qKiBNYXAgVW5peCBBRl94eHggY29uc3RhbnRzIHRvIEFWQUhJX1BST1RPX3h4eCBjb25zdGFudHMgKi8KK0F2YWhpUHJvdG9jb2wgYXZhaGlfYWZfdG9fcHJvdG8oaW50IGFmKTsKKworLyoqIFJldHVybiBhIHRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNwZWNpZmllZCBwcm90b2NvbCBudW1iZXIuIGkuZS4gIklQdjQiLCAiSVB2NiIgb3IgIlVOU1BFQyIgKi8KK2NvbnN0IGNoYXIqIGF2YWhpX3Byb3RvX3RvX3N0cmluZyhBdmFoaVByb3RvY29sIHByb3RvKTsKKworLyoqIEB9ICovCisKK0FWQUhJX0NfREVDTF9FTkQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktY29tbW9uL2FsdGVybmF0aXZlLXRlc3QuYyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21tb24vYWx0ZXJuYXRpdmUtdGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNTU0MzUKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tbW9uL2FsdGVybmF0aXZlLXRlc3QuYwpAQCAtMCwwICsxLDkwIEBACisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJhbHRlcm5hdGl2ZS5oIgorI2luY2x1ZGUgIm1hbGxvYy5oIgorI2luY2x1ZGUgImRvbWFpbi5oIgorCitpbnQgbWFpbihBVkFISV9HQ0NfVU5VU0VEIGludCBhcmdjLCBBVkFISV9HQ0NfVU5VU0VEIGNoYXIgKmFyZ3ZbXSkgeworICAgIGNvbnN0IGNoYXIqIGNvbnN0IHRlc3Rfc3RyaW5nc1tdID0geworICAgICAgICAiWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYIiwKKyAgICAgICAgIlhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFjDvMO8w7zDvMO8w7zDvCIsCisgICAgICAgICJndXJrZSIsCisgICAgICAgICItIiwKKyAgICAgICAgIiAjIiwKKyAgICAgICAgIjEiLAorICAgICAgICAiIzAiLAorICAgICAgICAiICMwIiwKKyAgICAgICAgIiAjMSIsCisgICAgICAgICIjLTEiLAorICAgICAgICAiICMtMSIsCisgICAgICAgICItMCIsCisgICAgICAgICItLTAiLAorICAgICAgICAiLTEiLAorICAgICAgICAiLS0xIiwKKyAgICAgICAgIi0yIiwKKyAgICAgICAgImd1cmtlMSIsCisgICAgICAgICJndXJrZTAiLAorICAgICAgICAiZ3Vya2UtMiIsCisgICAgICAgICJndXJrZSAjMCIsCisgICAgICAgICJndXJrZSAjMSIsCisgICAgICAgICJndXJrZSAjIiwKKyAgICAgICAgImd1cmtlIzEiLAorICAgICAgICAiZ3Vya2UtIiwKKyAgICAgICAgImd1cmtlLS0tIiwKKyAgICAgICAgImd1cmtlICMiLAorICAgICAgICAiZ3Vya2UgIyMjIiwKKyAgICAgICAgTlVMTAorICAgIH07CisKKyAgICBjaGFyICpyID0gTlVMTDsKKyAgICBpbnQgaSwgaiwgazsKKworICAgIGZvciAoayA9IDA7IHRlc3Rfc3RyaW5nc1trXTsgaysrKSB7CisKKyAgICAgICAgcHJpbnRmKCI+Pj4+PiVzPDw8PFxuIiwgdGVzdF9zdHJpbmdzW2tdKTsKKworICAgICAgICBmb3IgKGogPSAwOyBqIDwgMjsgaisrKSB7CisKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gMTAwOyBpKyspIHsKKyAgICAgICAgICAgICAgICBjaGFyICpuOworCisgICAgICAgICAgICAgICAgbiA9IGkgPT0gMCA/IGF2YWhpX3N0cmR1cCh0ZXN0X3N0cmluZ3Nba10pIDogKGogPyBhdmFoaV9hbHRlcm5hdGl2ZV9zZXJ2aWNlX25hbWUocikgOiBhdmFoaV9hbHRlcm5hdGl2ZV9ob3N0X25hbWUocikpOworICAgICAgICAgICAgICAgIGF2YWhpX2ZyZWUocik7CisgICAgICAgICAgICAgICAgciA9IG47CisKKyAgICAgICAgICAgICAgICBpZiAoaikKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGF2YWhpX2lzX3ZhbGlkX3NlcnZpY2VfbmFtZShuKSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBhc3NlcnQoYXZhaGlfaXNfdmFsaWRfaG9zdF9uYW1lKG4pKTsKKworICAgICAgICAgICAgICAgIHByaW50ZigiJXNcbiIsIHIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgYXZhaGlfZnJlZShyKTsKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21tb24vYWx0ZXJuYXRpdmUuYyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21tb24vYWx0ZXJuYXRpdmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2QzOWYwCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbW1vbi9hbHRlcm5hdGl2ZS5jCkBAIC0wLDAgKzEsMTgyIEBACisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKyNpbmNsdWRlICJhbHRlcm5hdGl2ZS5oIgorI2luY2x1ZGUgIm1hbGxvYy5oIgorI2luY2x1ZGUgImRvbWFpbi5oIgorI2luY2x1ZGUgInV0ZjguaCIKKworc3RhdGljIHZvaWQgZHJvcF9pbmNvbXBsZXRlX3V0ZjgoY2hhciAqYykgeworICAgIGNoYXIgKmU7CisKKyAgICBlID0gc3RyY2hyKGMsIDApIC0gMTsKKworICAgIHdoaWxlIChlID49IGMpIHsKKworICAgICAgICBpZiAoYXZhaGlfdXRmOF92YWxpZChjKSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGFzc2VydCgqZSAmIDEyOCk7CisgICAgICAgICplID0gMDsKKworICAgICAgICBlLS07CisgICAgfQorfQorCitjaGFyICphdmFoaV9hbHRlcm5hdGl2ZV9ob3N0X25hbWUoY29uc3QgY2hhciAqcykgeworICAgIGNvbnN0IGNoYXIgKmU7CisgICAgY2hhciAqcjsKKworICAgIGFzc2VydChzKTsKKworICAgIGlmICghYXZhaGlfaXNfdmFsaWRfaG9zdF9uYW1lKHMpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmICgoZSA9IHN0cnJjaHIocywgJy0nKSkpIHsKKyAgICAgICAgY29uc3QgY2hhciAqcDsKKworICAgICAgICBlKys7CisKKyAgICAgICAgZm9yIChwID0gZTsgKnA7IHArKykKKyAgICAgICAgICAgIGlmICghaXNkaWdpdCgqcCkpIHsKKyAgICAgICAgICAgICAgICBlID0gTlVMTDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICBpZiAoZSAmJiAoKmUgPT0gJzAnIHx8ICplID09IDApKQorICAgICAgICAgICAgZSA9IE5VTEw7CisgICAgfQorCisgICAgaWYgKGUpIHsKKyAgICAgICAgY2hhciAqYywgKm07CisgICAgICAgIHNpemVfdCBsOworICAgICAgICBpbnQgbjsKKworICAgICAgICBuID0gYXRvaShlKSsxOworICAgICAgICBpZiAoIShtID0gYXZhaGlfc3RyZHVwX3ByaW50ZigiJWkiLCBuKSkpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKworICAgICAgICBsID0gZS1zLTE7CisKKyAgICAgICAgaWYgKGwgPj0gQVZBSElfTEFCRUxfTUFYLTEtc3RybGVuKG0pLTEpCisgICAgICAgICAgICBsID0gQVZBSElfTEFCRUxfTUFYLTEtc3RybGVuKG0pLTE7CisKKyAgICAgICAgaWYgKCEoYyA9IGF2YWhpX3N0cm5kdXAocywgbCkpKSB7CisgICAgICAgICAgICBhdmFoaV9mcmVlKG0pOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKworICAgICAgICBkcm9wX2luY29tcGxldGVfdXRmOChjKTsKKworICAgICAgICByID0gYXZhaGlfc3RyZHVwX3ByaW50ZigiJXMtJXMiLCBjLCBtKTsKKyAgICAgICAgYXZhaGlfZnJlZShjKTsKKyAgICAgICAgYXZhaGlfZnJlZShtKTsKKworICAgIH0gZWxzZSB7CisgICAgICAgIGNoYXIgKmM7CisKKyAgICAgICAgaWYgKCEoYyA9IGF2YWhpX3N0cm5kdXAocywgQVZBSElfTEFCRUxfTUFYLTEtMikpKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAgICAgZHJvcF9pbmNvbXBsZXRlX3V0ZjgoYyk7CisKKyAgICAgICAgciA9IGF2YWhpX3N0cmR1cF9wcmludGYoIiVzLTIiLCBjKTsKKyAgICAgICAgYXZhaGlfZnJlZShjKTsKKyAgICB9CisKKyAgICBhc3NlcnQoYXZhaGlfaXNfdmFsaWRfaG9zdF9uYW1lKHIpKTsKKworICAgIHJldHVybiByOworfQorCitjaGFyICphdmFoaV9hbHRlcm5hdGl2ZV9zZXJ2aWNlX25hbWUoY29uc3QgY2hhciAqcykgeworICAgIGNvbnN0IGNoYXIgKmU7CisgICAgY2hhciAqcjsKKworICAgIGFzc2VydChzKTsKKworICAgIGlmICghYXZhaGlfaXNfdmFsaWRfc2VydmljZV9uYW1lKHMpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmICgoZSA9IHN0cnN0cihzLCAiICMiKSkpIHsKKyAgICAgICAgY29uc3QgY2hhciAqbiwgKnA7CisgICAgICAgIGUgKz0gMjsKKworICAgICAgICB3aGlsZSAoKG4gPSBzdHJzdHIoZSwgIiAjIikpKQorICAgICAgICAgICAgZSA9IG4gKyAyOworCisgICAgICAgIGZvciAocCA9IGU7ICpwOyBwKyspCisgICAgICAgICAgICBpZiAoIWlzZGlnaXQoKnApKSB7CisgICAgICAgICAgICAgICAgZSA9IE5VTEw7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgaWYgKGUgJiYgKCplID09ICcwJyB8fCAqZSA9PSAwKSkKKyAgICAgICAgICAgIGUgPSBOVUxMOworICAgIH0KKworICAgIGlmIChlKSB7CisgICAgICAgIGNoYXIgKmMsICptOworICAgICAgICBzaXplX3QgbDsKKyAgICAgICAgaW50IG47CisKKyAgICAgICAgbiA9IGF0b2koZSkrMTsKKyAgICAgICAgaWYgKCEobSA9IGF2YWhpX3N0cmR1cF9wcmludGYoIiVpIiwgbikpKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAgICAgbCA9IGUtcy0yOworCisgICAgICAgIGlmIChsID49IEFWQUhJX0xBQkVMX01BWC0xLXN0cmxlbihtKS0yKQorICAgICAgICAgICAgbCA9IEFWQUhJX0xBQkVMX01BWC0xLXN0cmxlbihtKS0yOworCisgICAgICAgIGlmICghKGMgPSBhdmFoaV9zdHJuZHVwKHMsIGwpKSkgeworICAgICAgICAgICAgYXZhaGlfZnJlZShtKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgZHJvcF9pbmNvbXBsZXRlX3V0ZjgoYyk7CisKKyAgICAgICAgciA9IGF2YWhpX3N0cmR1cF9wcmludGYoIiVzICMlcyIsIGMsIG0pOworICAgICAgICBhdmFoaV9mcmVlKGMpOworICAgICAgICBhdmFoaV9mcmVlKG0pOworICAgIH0gZWxzZSB7CisgICAgICAgIGNoYXIgKmM7CisKKyAgICAgICAgaWYgKCEoYyA9IGF2YWhpX3N0cm5kdXAocywgQVZBSElfTEFCRUxfTUFYLTEtMykpKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAgICAgZHJvcF9pbmNvbXBsZXRlX3V0ZjgoYyk7CisKKyAgICAgICAgciA9IGF2YWhpX3N0cmR1cF9wcmludGYoIiVzICMyIiwgYyk7CisgICAgICAgIGF2YWhpX2ZyZWUoYyk7CisgICAgfQorCisgICAgYXNzZXJ0KGF2YWhpX2lzX3ZhbGlkX3NlcnZpY2VfbmFtZShyKSk7CisKKyAgICByZXR1cm4gcjsKK30KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21tb24vYWx0ZXJuYXRpdmUuaCBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21tb24vYWx0ZXJuYXRpdmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjA0NGRlCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbW1vbi9hbHRlcm5hdGl2ZS5oCkBAIC0wLDAgKzEsNDMgQEAKKyNpZm5kZWYgZm9vYWx0ZXJuYXRpdmVoZm9vCisjZGVmaW5lIGZvb2FsdGVybmF0aXZlaGZvbworCisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKy8qKiBcZmlsZSBhbHRlcm5hdGl2ZS5oIEZ1bmN0aW9ucyB0byBmaW5kIGFsdGVybmF0aXZlIG5hbWVzIGZvciBob3N0cyBhbmQgc2VydmljZXMgaW4gdGhlIGNhc2Ugb2YgbmFtZSBjb2xsaXNpb24gKi8KKworI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9jZGVjbC5oPgorCitBVkFISV9DX0RFQ0xfQkVHSU4KKworLyoqIEZpbmQgYW4gYWx0ZXJuYXRpdmUgZm9yIHRoZSBzcGVjaWZpZWQgaG9zdCBuYW1lLiBJZiBjYWxsZWQgd2l0aCBhbgorICogb3JpZ2luYWwgaG9zdCBuYW1lLCAiLTIiIGlzIGFwcGVuZGVkLCBhZnRlcndhcmRzIHRoZSBudW1iZXIgaXMKKyAqIGluY3JlYXNlZCBvbiBlYWNoIGNhbGwuIChpLmUuICJmb28iIGJlY29tZXMgImZvby0yIiBiZWNvbWVzICJmb28tMyIKKyAqIGFuZCBzbyBvbi4pIGF2YWhpX2ZyZWUoKSB0aGUgcmVzdWx0LiAqLworY2hhciAqYXZhaGlfYWx0ZXJuYXRpdmVfaG9zdF9uYW1lKGNvbnN0IGNoYXIgKnMpOworCisvKiogRmluZCBhbiBhbHRlcm5hdGl2ZSBmb3IgdGhlIHNwZWNpZmllZCBzZXJ2aWNlIG5hbWUuIElmIGNhbGxlZCB3aXRoCisgKiBhbiBvcmlnaW5hbCBzZXJ2aWNlIG5hbWUsICIgIzIiIGlzIGFwcGVuZGVkLiBBZnRlcndhcmRzIHRoZSBudW1iZXIKKyAqIGlzIGluY3JlYXNlZCBvbiBlYWNoIGNhbGwgKGkuZS4gImZvbyIgYmVjb21lcyAiZm9vICMyIiBiZWNvbWVzICJmb28KKyAqICMzIiBhbmQgc28gb24uKSBhdmFoaV9mcmVlKCkgdGhlIHJlc3VsdC4gKi8KK2NoYXIgKmF2YWhpX2FsdGVybmF0aXZlX3NlcnZpY2VfbmFtZShjb25zdCBjaGFyICpzKTsKKworQVZBSElfQ19ERUNMX0VORAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21tb24vY2RlY2wuaCBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21tb24vY2RlY2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWY2YWJhCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbW1vbi9jZGVjbC5oCkBAIC0wLDAgKzEsMzggQEAKKyNpZm5kZWYgZm9vY2RlY2xoZm9vCisjZGVmaW5lIGZvb2NkZWNsaGZvbworCisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKy8qKiBcZmlsZSBjZGVjbC5oIEMrKyBjb21wYXRpYmlsaXR5ICovCisjaWZkZWYgX19jcGx1c3BsdXMKKy8qKiBJZiB1c2luZyBDKysgdGhpcyBtYWNybyBlbmFibGVzIEMgbW9kZSwgb3RoZXJ3aXNlIGRvZXMgbm90aGluZyAqLworI2RlZmluZSBBVkFISV9DX0RFQ0xfQkVHSU4gZXh0ZXJuICJDIiB7CisvKiogSWYgdXNpbmcgQysrIHRoaXMgbWFjcm8gc3dpdGNoZXMgYmFjayB0byBDKysgbW9kZSwgb3RoZXJ3aXNlIGRvZXMgbm90aGluZyAqLworI2RlZmluZSBBVkFISV9DX0RFQ0xfRU5EIH0KKworI2Vsc2UKKy8qKiBJZiB1c2luZyBDKysgdGhpcyBtYWNybyBlbmFibGVzIEMgbW9kZSwgb3RoZXJ3aXNlIGRvZXMgbm90aGluZyAqLworI2RlZmluZSBBVkFISV9DX0RFQ0xfQkVHSU4KKy8qKiBJZiB1c2luZyBDKysgdGhpcyBtYWNybyBzd2l0Y2hlcyBiYWNrIHRvIEMrKyBtb2RlLCBvdGhlcndpc2UgZG9lcyBub3RoaW5nICovCisjZGVmaW5lIEFWQUhJX0NfREVDTF9FTkQKKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvbW1vbi9kYnVzLXdhdGNoLWdsdWUuYyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21tb24vZGJ1cy13YXRjaC1nbHVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE4ZjU1NQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21tb24vZGJ1cy13YXRjaC1nbHVlLmMKQEAgLTAsMCArMSwzNTcgQEAKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgIm1hbGxvYy5oIgorI2luY2x1ZGUgInRpbWV2YWwuaCIKKyNpbmNsdWRlICJkYnVzLXdhdGNoLWdsdWUuaCIKKworc3RhdGljIEF2YWhpV2F0Y2hFdmVudCB0cmFuc2xhdGVfZGJ1c190b19hdmFoaSh1bnNpZ25lZCBpbnQgZikgeworICAgIEF2YWhpV2F0Y2hFdmVudCBlID0gMDsKKworICAgIGlmIChmICYgREJVU19XQVRDSF9SRUFEQUJMRSkKKyAgICAgICAgZSB8PSBBVkFISV9XQVRDSF9JTjsKKyAgICBpZiAoZiAmIERCVVNfV0FUQ0hfV1JJVEFCTEUpCisgICAgICAgIGUgfD0gQVZBSElfV0FUQ0hfT1VUOworICAgIGlmIChmICYgREJVU19XQVRDSF9FUlJPUikKKyAgICAgICAgZSB8PSBBVkFISV9XQVRDSF9FUlI7CisgICAgaWYgKGYgJiBEQlVTX1dBVENIX0hBTkdVUCkKKyAgICAgICAgZSB8PSBBVkFISV9XQVRDSF9IVVA7CisKKyAgICByZXR1cm4gZTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCB0cmFuc2xhdGVfYXZhaGlfdG9fZGJ1cyhBdmFoaVdhdGNoRXZlbnQgZSkgeworICAgIHVuc2lnbmVkIGludCBmID0gMDsKKworICAgIGlmIChlICYgQVZBSElfV0FUQ0hfSU4pCisgICAgICAgIGYgfD0gREJVU19XQVRDSF9SRUFEQUJMRTsKKyAgICBpZiAoZSAmIEFWQUhJX1dBVENIX09VVCkKKyAgICAgICAgZiB8PSBEQlVTX1dBVENIX1dSSVRBQkxFOworICAgIGlmIChlICYgQVZBSElfV0FUQ0hfRVJSKQorICAgICAgICBmIHw9IERCVVNfV0FUQ0hfRVJST1I7CisgICAgaWYgKGUgJiBBVkFISV9XQVRDSF9IVVApCisgICAgICAgIGYgfD0gREJVU19XQVRDSF9IQU5HVVA7CisKKyAgICByZXR1cm4gZjsKK30KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIERCdXNDb25uZWN0aW9uICpjb25uZWN0aW9uOworICAgIGNvbnN0IEF2YWhpUG9sbCAqcG9sbF9hcGk7CisgICAgQXZhaGlUaW1lb3V0ICpkaXNwYXRjaF90aW1lb3V0OworICAgIGludCByZWY7Cit9IENvbm5lY3Rpb25EYXRhOworCitzdGF0aWMgQ29ubmVjdGlvbkRhdGEgKmNvbm5lY3Rpb25fZGF0YV9yZWYoQ29ubmVjdGlvbkRhdGEgKmQpIHsKKyAgICBhc3NlcnQoZCk7CisgICAgYXNzZXJ0KGQtPnJlZiA+PSAxKTsKKworICAgIGQtPnJlZisrOworICAgIHJldHVybiBkOworfQorCitzdGF0aWMgdm9pZCBjb25uZWN0aW9uX2RhdGFfdW5yZWYoQ29ubmVjdGlvbkRhdGEgKmQpIHsKKyAgICBhc3NlcnQoZCk7CisgICAgYXNzZXJ0KGQtPnJlZiA+PSAxKTsKKworICAgIGlmICgtLWQtPnJlZiA8PSAwKSB7CisgICAgICAgIGQtPnBvbGxfYXBpLT50aW1lb3V0X2ZyZWUoZC0+ZGlzcGF0Y2hfdGltZW91dCk7CisgICAgICAgIGF2YWhpX2ZyZWUoZCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCByZXF1ZXN0X2Rpc3BhdGNoKENvbm5lY3Rpb25EYXRhICpkLCBpbnQgZW5hYmxlKSB7CisgICAgc3RhdGljIGNvbnN0IHN0cnVjdCB0aW1ldmFsIHR2ID0geyAwLCAwIH07CisgICAgYXNzZXJ0KGQpOworCisgICAgaWYgKGVuYWJsZSkgeworICAgICAgICBhc3NlcnQoZGJ1c19jb25uZWN0aW9uX2dldF9kaXNwYXRjaF9zdGF0dXMoZC0+Y29ubmVjdGlvbikgPT0gREJVU19ESVNQQVRDSF9EQVRBX1JFTUFJTlMpOworICAgICAgICBkLT5wb2xsX2FwaS0+dGltZW91dF91cGRhdGUoZC0+ZGlzcGF0Y2hfdGltZW91dCwgJnR2KTsKKyAgICB9IGVsc2UKKyAgICAgICAgZC0+cG9sbF9hcGktPnRpbWVvdXRfdXBkYXRlKGQtPmRpc3BhdGNoX3RpbWVvdXQsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCBkaXNwYXRjaF90aW1lb3V0X2NhbGxiYWNrKEF2YWhpVGltZW91dCAqdCwgdm9pZCAqdXNlcmRhdGEpIHsKKyAgICBDb25uZWN0aW9uRGF0YSAqZCA9IHVzZXJkYXRhOworICAgIGFzc2VydCh0KTsKKyAgICBhc3NlcnQoZCk7CisKKyAgICBjb25uZWN0aW9uX2RhdGFfcmVmKGQpOworICAgIGRidXNfY29ubmVjdGlvbl9yZWYoZC0+Y29ubmVjdGlvbik7CisKKyAgICBpZiAoZGJ1c19jb25uZWN0aW9uX2Rpc3BhdGNoKGQtPmNvbm5lY3Rpb24pID09IERCVVNfRElTUEFUQ0hfREFUQV9SRU1BSU5TKQorICAgICAgICAvKiBJZiB0aGVyZSdzIHN0aWxsIGRhdGEsIHJlcXVlc3QgdGhhdCB0aGlzIGhhbmRsZXIgaXMgY2FsbGVkIGFnYWluICovCisgICAgICAgIHJlcXVlc3RfZGlzcGF0Y2goZCwgMSk7CisgICAgZWxzZQorICAgICAgICByZXF1ZXN0X2Rpc3BhdGNoKGQsIDApOworCisgICAgZGJ1c19jb25uZWN0aW9uX3VucmVmKGQtPmNvbm5lY3Rpb24pOworICAgIGNvbm5lY3Rpb25fZGF0YV91bnJlZihkKTsKK30KKworc3RhdGljIHZvaWQgd2F0Y2hfY2FsbGJhY2soQXZhaGlXYXRjaCAqYXZhaGlfd2F0Y2gsIEFWQUhJX0dDQ19VTlVTRUQgaW50IGZkLCBBdmFoaVdhdGNoRXZlbnQgZXZlbnRzLCB2b2lkICp1c2VyZGF0YSkgeworICAgIERCdXNXYXRjaCAqZGJ1c193YXRjaCA9IHVzZXJkYXRhOworCisgICAgYXNzZXJ0KGF2YWhpX3dhdGNoKTsKKyAgICBhc3NlcnQoZGJ1c193YXRjaCk7CisKKyAgICBkYnVzX3dhdGNoX2hhbmRsZShkYnVzX3dhdGNoLCB0cmFuc2xhdGVfYXZhaGlfdG9fZGJ1cyhldmVudHMpKTsKKyAgICAvKiBJZ25vcmUgdGhlIHJldHVybiB2YWx1ZSAqLworfQorCitzdGF0aWMgZGJ1c19ib29sX3QgdXBkYXRlX3dhdGNoKGNvbnN0IEF2YWhpUG9sbCAqcG9sbF9hcGksIERCdXNXYXRjaCAqZGJ1c193YXRjaCkgeworICAgIEF2YWhpV2F0Y2ggKmF2YWhpX3dhdGNoOworICAgIGRidXNfYm9vbF90IGI7CisKKyAgICBhc3NlcnQoZGJ1c193YXRjaCk7CisKKyAgICBhdmFoaV93YXRjaCA9IGRidXNfd2F0Y2hfZ2V0X2RhdGEoZGJ1c193YXRjaCk7CisKKyAgICBiID0gZGJ1c193YXRjaF9nZXRfZW5hYmxlZChkYnVzX3dhdGNoKTsKKworICAgIGlmIChiICYmICFhdmFoaV93YXRjaCkgeworCisgICAgICAgIGlmICghKGF2YWhpX3dhdGNoID0gcG9sbF9hcGktPndhdGNoX25ldygKKyAgICAgICAgICAgICAgICAgIHBvbGxfYXBpLAorI2lmIChEQlVTX1ZFUlNJT05fTUFKT1IgPT0gMSAmJiBEQlVTX1ZFUlNJT05fTUlOT1IgPT0gMSAmJiBEQlVTX1ZFUlNJT05fTUlDUk8gPj0gMSkgfHwgKERCVVNfVkVSU0lPTl9NQUpPUiA9PSAxICYmIERCVVNfVkVSU0lPTl9NSU5PUiA+IDEpIHx8IChEQlVTX1ZFUlNJT05fTUFKT1IgPiAxKQorICAgICAgICAgICAgICAgICAgZGJ1c193YXRjaF9nZXRfdW5peF9mZChkYnVzX3dhdGNoKSwKKyNlbHNlCisgICAgICAgICAgICAgICAgICBkYnVzX3dhdGNoX2dldF9mZChkYnVzX3dhdGNoKSwKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlX2RidXNfdG9fYXZhaGkoZGJ1c193YXRjaF9nZXRfZmxhZ3MoZGJ1c193YXRjaCkpLAorICAgICAgICAgICAgICAgICAgd2F0Y2hfY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICBkYnVzX3dhdGNoKSkpCisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICAgICAgZGJ1c193YXRjaF9zZXRfZGF0YShkYnVzX3dhdGNoLCBhdmFoaV93YXRjaCwgTlVMTCk7CisKKyAgICB9IGVsc2UgaWYgKCFiICYmIGF2YWhpX3dhdGNoKSB7CisKKyAgICAgICAgcG9sbF9hcGktPndhdGNoX2ZyZWUoYXZhaGlfd2F0Y2gpOworICAgICAgICBkYnVzX3dhdGNoX3NldF9kYXRhKGRidXNfd2F0Y2gsIE5VTEwsIE5VTEwpOworCisgICAgfSBlbHNlIGlmIChhdmFoaV93YXRjaCkgeworCisgICAgICAgIC8qIFVwZGF0ZSBmbGFncyAqLworICAgICAgICBwb2xsX2FwaS0+d2F0Y2hfdXBkYXRlKGF2YWhpX3dhdGNoLCBkYnVzX3dhdGNoX2dldF9mbGFncyhkYnVzX3dhdGNoKSk7CisgICAgfQorCisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBkYnVzX2Jvb2xfdCBhZGRfd2F0Y2goREJ1c1dhdGNoICpkYnVzX3dhdGNoLCB2b2lkICp1c2VyZGF0YSkgeworICAgIENvbm5lY3Rpb25EYXRhICpkID0gdXNlcmRhdGE7CisKKyAgICBhc3NlcnQoZGJ1c193YXRjaCk7CisgICAgYXNzZXJ0KGQpOworCisgICAgcmV0dXJuIHVwZGF0ZV93YXRjaChkLT5wb2xsX2FwaSwgZGJ1c193YXRjaCk7Cit9CisKK3N0YXRpYyB2b2lkIHJlbW92ZV93YXRjaChEQnVzV2F0Y2ggKmRidXNfd2F0Y2gsIHZvaWQgKnVzZXJkYXRhKSB7CisgICAgQ29ubmVjdGlvbkRhdGEgKmQgPSB1c2VyZGF0YTsKKyAgICBBdmFoaVdhdGNoICphdmFoaV93YXRjaDsKKworICAgIGFzc2VydChkYnVzX3dhdGNoKTsKKyAgICBhc3NlcnQoZCk7CisKKyAgICBpZiAoKGF2YWhpX3dhdGNoID0gZGJ1c193YXRjaF9nZXRfZGF0YShkYnVzX3dhdGNoKSkpIHsKKyAgICAgICAgZC0+cG9sbF9hcGktPndhdGNoX2ZyZWUoYXZhaGlfd2F0Y2gpOworICAgICAgICBkYnVzX3dhdGNoX3NldF9kYXRhKGRidXNfd2F0Y2gsIE5VTEwsIE5VTEwpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2F0Y2hfdG9nZ2xlZChEQnVzV2F0Y2ggKmRidXNfd2F0Y2gsIHZvaWQgKnVzZXJkYXRhKSB7CisgICAgQ29ubmVjdGlvbkRhdGEgKmQgPSB1c2VyZGF0YTsKKworICAgIGFzc2VydChkYnVzX3dhdGNoKTsKKyAgICBhc3NlcnQoZCk7CisKKyAgICB1cGRhdGVfd2F0Y2goZC0+cG9sbF9hcGksIGRidXNfd2F0Y2gpOworfQorCit0eXBlZGVmIHN0cnVjdCBUaW1lb3V0RGF0YSB7CisgICAgY29uc3QgQXZhaGlQb2xsICpwb2xsX2FwaTsKKyAgICBBdmFoaVRpbWVvdXQgKmF2YWhpX3RpbWVvdXQ7CisgICAgREJ1c1RpbWVvdXQgKmRidXNfdGltZW91dDsKKyAgICBpbnQgcmVmOworfSBUaW1lb3V0RGF0YTsKKworc3RhdGljIFRpbWVvdXREYXRhKiB0aW1lb3V0X2RhdGFfcmVmKFRpbWVvdXREYXRhICp0KSB7CisgICAgYXNzZXJ0KHQpOworICAgIGFzc2VydCh0LT5yZWYgPj0gMSk7CisKKyAgICB0LT5yZWYrKzsKKyAgICByZXR1cm4gdDsKK30KKworc3RhdGljIHZvaWQgdGltZW91dF9kYXRhX3VucmVmKFRpbWVvdXREYXRhICp0KSB7CisgICAgYXNzZXJ0KHQpOworICAgIGFzc2VydCh0LT5yZWYgPj0gMSk7CisKKyAgICBpZiAoLS10LT5yZWYgPD0gMCkgeworICAgICAgICBpZiAodC0+YXZhaGlfdGltZW91dCkKKyAgICAgICAgICAgIHQtPnBvbGxfYXBpLT50aW1lb3V0X2ZyZWUodC0+YXZhaGlfdGltZW91dCk7CisKKyAgICAgICAgYXZhaGlfZnJlZSh0KTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV90aW1lb3V0KFRpbWVvdXREYXRhICp0aW1lb3V0KSB7CisgICAgYXNzZXJ0KHRpbWVvdXQpOworICAgIGFzc2VydCh0aW1lb3V0LT5yZWYgPj0gMSk7CisKKyAgICBpZiAoZGJ1c190aW1lb3V0X2dldF9lbmFibGVkKHRpbWVvdXQtPmRidXNfdGltZW91dCkpIHsKKyAgICAgICAgc3RydWN0IHRpbWV2YWwgdHY7CisgICAgICAgIGF2YWhpX2VsYXBzZV90aW1lKCZ0diwgZGJ1c190aW1lb3V0X2dldF9pbnRlcnZhbCh0aW1lb3V0LT5kYnVzX3RpbWVvdXQpLCAwKTsKKyAgICAgICAgdGltZW91dC0+cG9sbF9hcGktPnRpbWVvdXRfdXBkYXRlKHRpbWVvdXQtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFoaV90aW1lb3V0LCAmdHYpOworICAgIH0gZWxzZQorICAgICAgICB0aW1lb3V0LT5wb2xsX2FwaS0+dGltZW91dF91cGRhdGUodGltZW91dC0+YXZhaGlfdGltZW91dCwgTlVMTCk7CisKK30KKworc3RhdGljIHZvaWQgdGltZW91dF9jYWxsYmFjayhBdmFoaVRpbWVvdXQgKmF2YWhpX3RpbWVvdXQsIHZvaWQgKnVzZXJkYXRhKSB7CisgICAgVGltZW91dERhdGEgKnRpbWVvdXQgPSB1c2VyZGF0YTsKKworICAgIGFzc2VydChhdmFoaV90aW1lb3V0KTsKKyAgICBhc3NlcnQodGltZW91dCk7CisKKyAgICB0aW1lb3V0X2RhdGFfcmVmKHRpbWVvdXQpOworCisgICAgZGJ1c190aW1lb3V0X2hhbmRsZSh0aW1lb3V0LT5kYnVzX3RpbWVvdXQpOworICAgIC8qIElnbm9yZSB0aGUgcmV0dXJuIHZhbHVlICovCisKKyAgICBpZiAodGltZW91dC0+YXZhaGlfdGltZW91dCkKKyAgICAgICAgdXBkYXRlX3RpbWVvdXQodGltZW91dCk7CisKKyAgICB0aW1lb3V0X2RhdGFfdW5yZWYodGltZW91dCk7Cit9CisKK3N0YXRpYyBkYnVzX2Jvb2xfdCBhZGRfdGltZW91dChEQnVzVGltZW91dCAqZGJ1c190aW1lb3V0LCB2b2lkICp1c2VyZGF0YSkgeworICAgIFRpbWVvdXREYXRhICp0aW1lb3V0OworICAgIENvbm5lY3Rpb25EYXRhICpkID0gdXNlcmRhdGE7CisgICAgc3RydWN0IHRpbWV2YWwgdHY7CisgICAgZGJ1c19ib29sX3QgYjsKKworICAgIGFzc2VydChkYnVzX3RpbWVvdXQpOworICAgIGFzc2VydChkKTsKKworICAgIGlmICghKHRpbWVvdXQgPSBhdmFoaV9uZXcoVGltZW91dERhdGEsIDEpKSkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgdGltZW91dC0+ZGJ1c190aW1lb3V0ID0gZGJ1c190aW1lb3V0OworICAgIHRpbWVvdXQtPnBvbGxfYXBpID0gZC0+cG9sbF9hcGk7CisgICAgdGltZW91dC0+cmVmID0gMTsKKworICAgIGlmICgoYiA9IGRidXNfdGltZW91dF9nZXRfZW5hYmxlZChkYnVzX3RpbWVvdXQpKSkKKyAgICAgICAgYXZhaGlfZWxhcHNlX3RpbWUoJnR2LCBkYnVzX3RpbWVvdXRfZ2V0X2ludGVydmFsKGRidXNfdGltZW91dCksIDApOworCisgICAgaWYgKCEodGltZW91dC0+YXZhaGlfdGltZW91dCA9IGQtPnBvbGxfYXBpLT50aW1lb3V0X25ldygKKyAgICAgICAgICAgICAgZC0+cG9sbF9hcGksCisgICAgICAgICAgICAgIGIgPyAmdHYgOiBOVUxMLAorICAgICAgICAgICAgICB0aW1lb3V0X2NhbGxiYWNrLAorICAgICAgICAgICAgICB0aW1lb3V0KSkpIHsKKyAgICAgICAgYXZhaGlfZnJlZSh0aW1lb3V0KTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIGRidXNfdGltZW91dF9zZXRfZGF0YShkYnVzX3RpbWVvdXQsIHRpbWVvdXQsIChEQnVzRnJlZUZ1bmN0aW9uKSB0aW1lb3V0X2RhdGFfdW5yZWYpOworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZCByZW1vdmVfdGltZW91dChEQnVzVGltZW91dCAqZGJ1c190aW1lb3V0LCB2b2lkICp1c2VyZGF0YSkgeworICAgIENvbm5lY3Rpb25EYXRhICpkID0gdXNlcmRhdGE7CisgICAgVGltZW91dERhdGEgKnRpbWVvdXQ7CisKKyAgICBhc3NlcnQoZGJ1c190aW1lb3V0KTsKKyAgICBhc3NlcnQoZCk7CisKKyAgICB0aW1lb3V0ID0gZGJ1c190aW1lb3V0X2dldF9kYXRhKGRidXNfdGltZW91dCk7CisgICAgYXNzZXJ0KHRpbWVvdXQpOworCisgICAgZC0+cG9sbF9hcGktPnRpbWVvdXRfZnJlZSh0aW1lb3V0LT5hdmFoaV90aW1lb3V0KTsKKyAgICB0aW1lb3V0LT5hdmFoaV90aW1lb3V0ID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQgdGltZW91dF90b2dnbGVkKERCdXNUaW1lb3V0ICpkYnVzX3RpbWVvdXQsIEFWQUhJX0dDQ19VTlVTRUQgdm9pZCAqdXNlcmRhdGEpIHsKKyAgICBUaW1lb3V0RGF0YSAqdGltZW91dDsKKworICAgIGFzc2VydChkYnVzX3RpbWVvdXQpOworICAgIHRpbWVvdXQgPSBkYnVzX3RpbWVvdXRfZ2V0X2RhdGEoZGJ1c190aW1lb3V0KTsKKyAgICBhc3NlcnQodGltZW91dCk7CisKKyAgICB1cGRhdGVfdGltZW91dCh0aW1lb3V0KTsKK30KKworc3RhdGljIHZvaWQgZGlzcGF0Y2hfc3RhdHVzKEFWQUhJX0dDQ19VTlVTRUQgREJ1c0Nvbm5lY3Rpb24gKmNvbm5lY3Rpb24sIERCdXNEaXNwYXRjaFN0YXR1cyBuZXdfc3RhdHVzLCB2b2lkICp1c2VyZGF0YSkgeworICAgIENvbm5lY3Rpb25EYXRhICpkID0gdXNlcmRhdGE7CisKKyAgICBpZiAobmV3X3N0YXR1cyA9PSBEQlVTX0RJU1BBVENIX0RBVEFfUkVNQUlOUykKKyAgICAgICAgcmVxdWVzdF9kaXNwYXRjaChkLCAxKTsKKyB9CisKK2ludCBhdmFoaV9kYnVzX2Nvbm5lY3Rpb25fZ2x1ZShEQnVzQ29ubmVjdGlvbiAqYywgY29uc3QgQXZhaGlQb2xsICpwb2xsX2FwaSkgeworICAgIENvbm5lY3Rpb25EYXRhICpkID0gTlVMTDsKKworICAgIGFzc2VydChjKTsKKyAgICBhc3NlcnQocG9sbF9hcGkpOworCisgICAgaWYgKCEoZCA9IGF2YWhpX25ldyhDb25uZWN0aW9uRGF0YSwgMSkpKQorICAgICAgICBnb3RvIGZhaWw7OworCisgICAgZC0+cG9sbF9hcGkgPSBwb2xsX2FwaTsKKyAgICBkLT5jb25uZWN0aW9uID0gYzsKKyAgICBkLT5yZWYgPSAxOworCisgICAgaWYgKCEoZC0+ZGlzcGF0Y2hfdGltZW91dCA9IHBvbGxfYXBpLT50aW1lb3V0X25ldyhwb2xsX2FwaSwgTlVMTCwgZGlzcGF0Y2hfdGltZW91dF9jYWxsYmFjaywgZCkpKQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICBpZiAoIShkYnVzX2Nvbm5lY3Rpb25fc2V0X3dhdGNoX2Z1bmN0aW9ucyhjLCBhZGRfd2F0Y2gsIHJlbW92ZV93YXRjaCwgd2F0Y2hfdG9nZ2xlZCwgY29ubmVjdGlvbl9kYXRhX3JlZihkKSwgKERCdXNGcmVlRnVuY3Rpb24pY29ubmVjdGlvbl9kYXRhX3VucmVmKSkpCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIGlmICghKGRidXNfY29ubmVjdGlvbl9zZXRfdGltZW91dF9mdW5jdGlvbnMoYywgYWRkX3RpbWVvdXQsIHJlbW92ZV90aW1lb3V0LCB0aW1lb3V0X3RvZ2dsZWQsIGNvbm5lY3Rpb25fZGF0YV9yZWYoZCksIChEQnVzRnJlZUZ1bmN0aW9uKWNvbm5lY3Rpb25fZGF0YV91bnJlZikpKQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICBkYnVzX2Nvbm5lY3Rpb25fc2V0X2Rpc3BhdGNoX3N0YXR1c19mdW5jdGlvbihjLCBkaXNwYXRjaF9zdGF0dXMsIGNvbm5lY3Rpb25fZGF0YV9yZWYoZCksIChEQnVzRnJlZUZ1bmN0aW9uKWNvbm5lY3Rpb25fZGF0YV91bnJlZik7CisKKyAgICBpZiAoZGJ1c19jb25uZWN0aW9uX2dldF9kaXNwYXRjaF9zdGF0dXMoYykgPT0gREJVU19ESVNQQVRDSF9EQVRBX1JFTUFJTlMpCisgICAgICAgIHJlcXVlc3RfZGlzcGF0Y2goZCwgMSk7CisKKyAgICBjb25uZWN0aW9uX2RhdGFfdW5yZWYoZCk7CisKKyAgICByZXR1cm4gMDsKKworZmFpbDoKKworICAgIGlmIChkKSB7CisgICAgICAgIGQtPnBvbGxfYXBpLT50aW1lb3V0X2ZyZWUoZC0+ZGlzcGF0Y2hfdGltZW91dCk7CisKKyAgICAgICAgYXZhaGlfZnJlZShkKTsKKyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktY29tbW9uL2RidXMtd2F0Y2gtZ2x1ZS5oIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbW1vbi9kYnVzLXdhdGNoLWdsdWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzhlYTk3Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbW1vbi9kYnVzLXdhdGNoLWdsdWUuaApAQCAtMCwwICsxLDMzIEBACisjaWZuZGVmIGZvb2RidXN3YXRjaGdsdWVoZm9vCisjZGVmaW5lIGZvb2RidXN3YXRjaGdsdWVoZm9vCisKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2luY2x1ZGUgPGRidXMvZGJ1cy5oPgorCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL3dhdGNoLmg+CisKK0FWQUhJX0NfREVDTF9CRUdJTgorCitpbnQgYXZhaGlfZGJ1c19jb25uZWN0aW9uX2dsdWUoREJ1c0Nvbm5lY3Rpb24gKmMsIGNvbnN0IEF2YWhpUG9sbCAqcG9sbF9hcGkpOworCitBVkFISV9DX0RFQ0xfRU5ECisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvbW1vbi9kYnVzLmMgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tbW9uL2RidXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTljNzdjCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbW1vbi9kYnVzLmMKQEAgLTAsMCArMSwxMzggQEAKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vZXJyb3IuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vZGJ1cy5oPgorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHRhYmxlWy0gQVZBSElfRVJSX01BWF0gPSB7CisgICAgQVZBSElfREJVU19FUlJfT0ssCisgICAgQVZBSElfREJVU19FUlJfRkFJTFVSRSwKKyAgICBBVkFISV9EQlVTX0VSUl9CQURfU1RBVEUsCisgICAgQVZBSElfREJVU19FUlJfSU5WQUxJRF9IT1NUX05BTUUsCisgICAgQVZBSElfREJVU19FUlJfSU5WQUxJRF9ET01BSU5fTkFNRSwKKyAgICBBVkFISV9EQlVTX0VSUl9OT19ORVRXT1JLLAorICAgIEFWQUhJX0RCVVNfRVJSX0lOVkFMSURfVFRMLAorICAgIEFWQUhJX0RCVVNfRVJSX0lTX1BBVFRFUk4sCisgICAgQVZBSElfREJVU19FUlJfQ09MTElTSU9OLAorICAgIEFWQUhJX0RCVVNfRVJSX0lOVkFMSURfUkVDT1JELAorCisgICAgQVZBSElfREJVU19FUlJfSU5WQUxJRF9TRVJWSUNFX05BTUUsCisgICAgQVZBSElfREJVU19FUlJfSU5WQUxJRF9TRVJWSUNFX1RZUEUsCisgICAgQVZBSElfREJVU19FUlJfSU5WQUxJRF9QT1JULAorICAgIEFWQUhJX0RCVVNfRVJSX0lOVkFMSURfS0VZLAorICAgIEFWQUhJX0RCVVNfRVJSX0lOVkFMSURfQUREUkVTUywKKyAgICBBVkFISV9EQlVTX0VSUl9USU1FT1VULAorICAgIEFWQUhJX0RCVVNfRVJSX1RPT19NQU5ZX0NMSUVOVFMsCisgICAgQVZBSElfREJVU19FUlJfVE9PX01BTllfT0JKRUNUUywKKyAgICBBVkFISV9EQlVTX0VSUl9UT09fTUFOWV9FTlRSSUVTLAorICAgIEFWQUhJX0RCVVNfRVJSX09TLAorCisgICAgQVZBSElfREJVU19FUlJfQUNDRVNTX0RFTklFRCwKKyAgICBBVkFISV9EQlVTX0VSUl9JTlZBTElEX09QRVJBVElPTiwKKyAgICBBVkFISV9EQlVTX0VSUl9EQlVTX0VSUk9SLAorICAgIEFWQUhJX0RCVVNfRVJSX0RJU0NPTk5FQ1RFRCwKKyAgICBBVkFISV9EQlVTX0VSUl9OT19NRU1PUlksCisgICAgQVZBSElfREJVU19FUlJfSU5WQUxJRF9PQkpFQ1QsCisgICAgQVZBSElfREJVU19FUlJfTk9fREFFTU9OLAorICAgIEFWQUhJX0RCVVNfRVJSX0lOVkFMSURfSU5URVJGQUNFLAorICAgIEFWQUhJX0RCVVNfRVJSX0lOVkFMSURfUFJPVE9DT0wsCisgICAgQVZBSElfREJVU19FUlJfSU5WQUxJRF9GTEFHUywKKworICAgIEFWQUhJX0RCVVNfRVJSX05PVF9GT1VORCwKKyAgICBBVkFISV9EQlVTX0VSUl9JTlZBTElEX0NPTkZJRywKKyAgICBBVkFISV9EQlVTX0VSUl9WRVJTSU9OX01JU01BVENILAorICAgIEFWQUhJX0RCVVNfRVJSX0lOVkFMSURfU0VSVklDRV9TVUJUWVBFLAorICAgIEFWQUhJX0RCVVNfRVJSX0lOVkFMSURfUEFDS0VULAorICAgIEFWQUhJX0RCVVNfRVJSX0lOVkFMSURfRE5TX0VSUk9SLAorICAgIEFWQUhJX0RCVVNfRVJSX0ROU19GT1JNRVJSLAorICAgIEFWQUhJX0RCVVNfRVJSX0ROU19TRVJWRkFJTCwKKyAgICBBVkFISV9EQlVTX0VSUl9ETlNfTlhET01BSU4sCisgICAgQVZBSElfREJVU19FUlJfRE5TX05PVElNUCwKKworICAgIEFWQUhJX0RCVVNfRVJSX0ROU19SRUZVU0VELAorICAgIEFWQUhJX0RCVVNfRVJSX0ROU19ZWERPTUFJTiwKKyAgICBBVkFISV9EQlVTX0VSUl9ETlNfWVhSUlNFVCwKKyAgICBBVkFISV9EQlVTX0VSUl9ETlNfTlhSUlNFVCwKKyAgICBBVkFISV9EQlVTX0VSUl9ETlNfTk9UQVVUSCwKKyAgICBBVkFISV9EQlVTX0VSUl9ETlNfTk9UWk9ORSwKKyAgICBBVkFISV9EQlVTX0VSUl9JTlZBTElEX1JEQVRBLAorICAgIEFWQUhJX0RCVVNfRVJSX0lOVkFMSURfRE5TX0NMQVNTLAorICAgIEFWQUhJX0RCVVNfRVJSX0lOVkFMSURfRE5TX1RZUEUsCisgICAgQVZBSElfREJVU19FUlJfTk9UX1NVUFBPUlRFRCwKKworICAgIEFWQUhJX0RCVVNfRVJSX05PVF9QRVJNSVRURUQsCisgICAgQVZBSElfREJVU19FUlJfSU5WQUxJRF9BUkdVTUVOVCwKKyAgICBBVkFISV9EQlVTX0VSUl9JU19FTVBUWSwKKyAgICBBVkFISV9EQlVTX0VSUl9OT19DSEFOR0UKK307CisKK3N0cnVjdCBlcnJvcl9tYXAgeworICAgIGNvbnN0IGNoYXIgKmRidXNfZXJyb3I7CisgICAgaW50IGF2YWhpX2Vycm9yOworfTsKKworc3RhdGljIHN0cnVjdCBlcnJvcl9tYXAgZXJyb3JfbWFwW10gPSB7CisgICAgeyBEQlVTX0VSUk9SX0ZBSUxFRCwgICAgICAgICAgIEFWQUhJX0VSUl9GQUlMVVJFIH0sCisgICAgeyBEQlVTX0VSUk9SX05PX01FTU9SWSwgICAgICAgIEFWQUhJX0VSUl9OT19NRU1PUlkgfSwKKyAgICB7IERCVVNfRVJST1JfU0VSVklDRV9VTktOT1dOLCAgQVZBSElfRVJSX05PX0RBRU1PTiB9LAorICAgIHsgREJVU19FUlJPUl9CQURfQUREUkVTUywgICAgICBBVkFISV9FUlJfTk9fREFFTU9OIH0sCisgICAgeyBEQlVTX0VSUk9SX05PVF9TVVBQT1JURUQsICAgIEFWQUhJX0VSUl9OT1RfU1VQUE9SVEVEIH0sCisgICAgeyBEQlVTX0VSUk9SX0xJTUlUU19FWENFRURFRCwgIEFWQUhJX0VSUl9UT09fTUFOWV9PQkpFQ1RTIH0sCisgICAgeyBEQlVTX0VSUk9SX0FDQ0VTU19ERU5JRUQsICAgIEFWQUhJX0VSUl9BQ0NFU1NfREVOSUVEIH0sCisgICAgeyBEQlVTX0VSUk9SX0FVVEhfRkFJTEVELCAgICAgIEFWQUhJX0VSUl9BQ0NFU1NfREVOSUVEIH0sCisgICAgeyBEQlVTX0VSUk9SX05PX1NFUlZFUiwgICAgICAgIEFWQUhJX0VSUl9OT19EQUVNT04gfSwKKyAgICB7IERCVVNfRVJST1JfVElNRU9VVCwgICAgICAgICAgQVZBSElfRVJSX1RJTUVPVVQgfSwKKyAgICB7IERCVVNfRVJST1JfTk9fTkVUV09SSywgICAgICAgQVZBSElfRVJSX05PX05FVFdPUksgfSwKKyAgICB7IERCVVNfRVJST1JfRElTQ09OTkVDVEVELCAgICAgQVZBSElfRVJSX0RJU0NPTk5FQ1RFRCB9LAorICAgIHsgREJVU19FUlJPUl9JTlZBTElEX0FSR1MsICAgICBBVkFISV9FUlJfSU5WQUxJRF9BUkdVTUVOVCB9LAorICAgIHsgREJVU19FUlJPUl9USU1FRF9PVVQsICAgICAgICBBVkFISV9FUlJfVElNRU9VVCB9LAorICAgIHsgTlVMTCwgMCB9Cit9OworCitpbnQgYXZhaGlfZXJyb3JfZGJ1c190b19udW1iZXIoY29uc3QgY2hhciAqcykgeworICAgIGludCBlOworICAgIGNvbnN0IHN0cnVjdCBlcnJvcl9tYXAgKm07CisKKyAgICBhc3NlcnQocyk7CisKKyAgICBmb3IgKGUgPSAtMTsgZSA+IEFWQUhJX0VSUl9NQVg7IGUtLSkKKyAgICAgICAgaWYgKHN0cmNtcChzLCB0YWJsZVstZV0pID09IDApCisgICAgICAgICAgICByZXR1cm4gZTsKKworICAgIGZvciAobSA9IGVycm9yX21hcDsgbS0+ZGJ1c19lcnJvcjsgbSsrKQorICAgICAgICBpZiAoc3RyY21wKG0tPmRidXNfZXJyb3IsIHMpID09IDApCisgICAgICAgICAgICByZXR1cm4gbS0+YXZhaGlfZXJyb3I7CisKKyAgICByZXR1cm4gQVZBSElfRVJSX0RCVVNfRVJST1I7Cit9CisKK2NvbnN0IGNoYXIgKmF2YWhpX2Vycm9yX251bWJlcl90b19kYnVzKGludCBlcnJvcikgeworICAgIGFzc2VydChlcnJvciA+IEFWQUhJX0VSUl9NQVgpOworICAgIGFzc2VydChlcnJvciA8IDEpOworCisgICAgcmV0dXJuIHRhYmxlWy1lcnJvcl07Cit9CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktY29tbW9uL2RidXMuaCBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21tb24vZGJ1cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhM2U4YTIKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tbW9uL2RidXMuaApAQCAtMCwwICsxLDExOSBAQAorI2lmbmRlZiBmb29kYnVzaGZvbworI2RlZmluZSBmb29kYnVzaGZvbworCisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKy8qKiBcZmlsZSBkYnVzLmggU29tZSBkZWZpbml0aW9ucyBmb3IgdGhlIEQtQnVzIGludGVyZmFjZSAqLworCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2NkZWNsLmg+CisjaW5jbHVkZSA8ZGJ1cy9kYnVzLmg+CisKK0FWQUhJX0NfREVDTF9CRUdJTgorCisjZGVmaW5lIEFWQUhJX0RCVVNfTkFNRSAib3JnLmZyZWVkZXNrdG9wLkF2YWhpIgorI2RlZmluZSBBVkFISV9EQlVTX0lOVEVSRkFDRV9TRVJWRVIgQVZBSElfREJVU19OQU1FIi5TZXJ2ZXIiCisjZGVmaW5lIEFWQUhJX0RCVVNfUEFUSF9TRVJWRVIgIi8iCisjZGVmaW5lIEFWQUhJX0RCVVNfSU5URVJGQUNFX0VOVFJZX0dST1VQIEFWQUhJX0RCVVNfTkFNRSIuRW50cnlHcm91cCIKKyNkZWZpbmUgQVZBSElfREJVU19JTlRFUkZBQ0VfRE9NQUlOX0JST1dTRVIgQVZBSElfREJVU19OQU1FIi5Eb21haW5Ccm93c2VyIgorI2RlZmluZSBBVkFISV9EQlVTX0lOVEVSRkFDRV9TRVJWSUNFX1RZUEVfQlJPV1NFUiBBVkFISV9EQlVTX05BTUUiLlNlcnZpY2VUeXBlQnJvd3NlciIKKyNkZWZpbmUgQVZBSElfREJVU19JTlRFUkZBQ0VfU0VSVklDRV9CUk9XU0VSIEFWQUhJX0RCVVNfTkFNRSIuU2VydmljZUJyb3dzZXIiCisjZGVmaW5lIEFWQUhJX0RCVVNfSU5URVJGQUNFX0FERFJFU1NfUkVTT0xWRVIgQVZBSElfREJVU19OQU1FIi5BZGRyZXNzUmVzb2x2ZXIiCisjZGVmaW5lIEFWQUhJX0RCVVNfSU5URVJGQUNFX0hPU1RfTkFNRV9SRVNPTFZFUiBBVkFISV9EQlVTX05BTUUiLkhvc3ROYW1lUmVzb2x2ZXIiCisjZGVmaW5lIEFWQUhJX0RCVVNfSU5URVJGQUNFX1NFUlZJQ0VfUkVTT0xWRVIgQVZBSElfREJVU19OQU1FIi5TZXJ2aWNlUmVzb2x2ZXIiCisjZGVmaW5lIEFWQUhJX0RCVVNfSU5URVJGQUNFX1JFQ09SRF9CUk9XU0VSIEFWQUhJX0RCVVNfTkFNRSIuUmVjb3JkQnJvd3NlciIKKworLyoqIFRoZSBELUJ1cyBBUEkgdmVyc2lvbiBpZGVudGlmaWVyLiBUaGUgZmlyc3QgYnl0ZSBzcGVjaWZpZXMgdGhlIEFQSQorcmVsZWFzZSwgdGhlIHNlY29uZCBieXRlIHNwZWNpZmllcyB0aGUgcmV2aXNpb24uIElmIHRoZSByZXZpc2lvbgorbnVtYmVyIGlzIGluY3JlYXNlZCB0aGUgQVBJIGhhcyBiZWVuIGV4dGVuZGVkIGJ1dCBpcyBkb3dud2FyZHMKK2NvbXBhdGlibGUuIElmIHRoZSByZWxlYXNlIGNoYW5nZXMgY29tcGF0aWJpbGl0eSBpcyBsb3N0LgorCitBdmFoaSAwLjYgaW1wbGVtZW50cyBBUEkgdmVyc2lvbiAweDAyMDE7CitBdmFoaSAwLjYuMSBpbXBsZW1lbnRzIEFQSSB2ZXJzaW9uIDB4MDIwMiAqLworI2RlZmluZSBBVkFISV9EQlVTX0FQSV9WRVJTSU9OICgodWludDMyX3QpIDB4MDIwMykKKworI2RlZmluZSBBVkFISV9EQlVTX0VSUl9PSyAib3JnLmZyZWVkZXNrdG9wLkF2YWhpLlN1Y2Nlc3MiCisjZGVmaW5lIEFWQUhJX0RCVVNfRVJSX0ZBSUxVUkUgIm9yZy5mcmVlZGVza3RvcC5BdmFoaS5GYWlsdXJlIgorI2RlZmluZSBBVkFISV9EQlVTX0VSUl9CQURfU1RBVEUgIm9yZy5mcmVlZGVza3RvcC5BdmFoaS5CYWRTdGF0ZUVycm9yIgorI2RlZmluZSBBVkFISV9EQlVTX0VSUl9JTlZBTElEX0hPU1RfTkFNRSAib3JnLmZyZWVkZXNrdG9wLkF2YWhpLkludmFsaWRIb3N0TmFtZUVycm9yIgorI2RlZmluZSBBVkFISV9EQlVTX0VSUl9JTlZBTElEX0RPTUFJTl9OQU1FICJvcmcuZnJlZWRlc2t0b3AuQXZhaGkuSW52YWxpZERvbWFpbk5hbWVFcnJvciIKKyNkZWZpbmUgQVZBSElfREJVU19FUlJfTk9fTkVUV09SSyAib3JnLmZyZWVkZXNrdG9wLkF2YWhpLk5vTmV0d29ya0Vycm9yIgorI2RlZmluZSBBVkFISV9EQlVTX0VSUl9JTlZBTElEX1RUTCAib3JnLmZyZWVkZXNrdG9wLkF2YWhpLkludmFsaWRUVExFcnJvciIKKyNkZWZpbmUgQVZBSElfREJVU19FUlJfSVNfUEFUVEVSTiAib3JnLmZyZWVkZXNrdG9wLkF2YWhpLklzUGF0dGVybkVycm9yIgorI2RlZmluZSBBVkFISV9EQlVTX0VSUl9DT0xMSVNJT04gIm9yZy5mcmVlZGVza3RvcC5BdmFoaS5Db2xsaXNpb25FcnJvciIKKyNkZWZpbmUgQVZBSElfREJVU19FUlJfSU5WQUxJRF9SRUNPUkQgIm9yZy5mcmVlZGVza3RvcC5BdmFoaS5JbnZhbGlkUmVjb3JkRXJyb3IiCisKKyNkZWZpbmUgQVZBSElfREJVU19FUlJfSU5WQUxJRF9TRVJWSUNFX05BTUUgIm9yZy5mcmVlZGVza3RvcC5BdmFoaS5JbnZhbGlkU2VydmljZU5hbWVFcnJvciIKKyNkZWZpbmUgQVZBSElfREJVU19FUlJfSU5WQUxJRF9TRVJWSUNFX1RZUEUgIm9yZy5mcmVlZGVza3RvcC5BdmFoaS5JbnZhbGlkU2VydmljZVR5cGVFcnJvciIKKyNkZWZpbmUgQVZBSElfREJVU19FUlJfSU5WQUxJRF9QT1JUICJvcmcuZnJlZWRlc2t0b3AuQXZhaGkuSW52YWxpZFBvcnRFcnJvciIKKyNkZWZpbmUgQVZBSElfREJVU19FUlJfSU5WQUxJRF9LRVkgIm9yZy5mcmVlZGVza3RvcC5BdmFoaS5JbnZhbGlkS2V5RXJyb3IiCisjZGVmaW5lIEFWQUhJX0RCVVNfRVJSX0lOVkFMSURfQUREUkVTUyAib3JnLmZyZWVkZXNrdG9wLkF2YWhpLkludmFsaWRBZGRyZXNzRXJyb3IiCisjZGVmaW5lIEFWQUhJX0RCVVNfRVJSX1RJTUVPVVQgIm9yZy5mcmVlZGVza3RvcC5BdmFoaS5UaW1lb3V0RXJyb3IiCisjZGVmaW5lIEFWQUhJX0RCVVNfRVJSX1RPT19NQU5ZX0NMSUVOVFMgIm9yZy5mcmVlZGVza3RvcC5BdmFoaS5Ub29NYW55Q2xpZW50c0Vycm9yIgorI2RlZmluZSBBVkFISV9EQlVTX0VSUl9UT09fTUFOWV9PQkpFQ1RTICJvcmcuZnJlZWRlc2t0b3AuQXZhaGkuVG9vTWFueU9iamVjdHNFcnJvciIKKyNkZWZpbmUgQVZBSElfREJVU19FUlJfVE9PX01BTllfRU5UUklFUyAib3JnLmZyZWVkZXNrdG9wLkF2YWhpLlRvb01hbnlFbnRyaWVzRXJyb3IiCisjZGVmaW5lIEFWQUhJX0RCVVNfRVJSX09TICJvcmcuZnJlZWRlc2t0b3AuQXZhaGkuT1NFcnJvciIKKworI2RlZmluZSBBVkFISV9EQlVTX0VSUl9BQ0NFU1NfREVOSUVEIERCVVNfRVJST1JfQUNDRVNTX0RFTklFRAorI2RlZmluZSBBVkFISV9EQlVTX0VSUl9JTlZBTElEX09QRVJBVElPTiAib3JnLmZyZWVkZXNrdG9wLkF2YWhpLkludmFsaWRPcGVyYXRpb25FcnJvciIKKyNkZWZpbmUgQVZBSElfREJVU19FUlJfREJVU19FUlJPUiAib3JnLmZyZWVkZXNrdG9wLkF2YWhpLkRCdXNFcnJvciIKKyNkZWZpbmUgQVZBSElfREJVU19FUlJfRElTQ09OTkVDVEVEICJvcmcuZnJlZWRlc2t0b3AuQXZhaGkuRGlzY29ubmVjdGVkRXJyb3IiCisjZGVmaW5lIEFWQUhJX0RCVVNfRVJSX05PX01FTU9SWSAib3JnLmZyZWVkZXNrdG9wLkF2YWhpLk5vTWVtb3J5RXJyb3IiCisjZGVmaW5lIEFWQUhJX0RCVVNfRVJSX0lOVkFMSURfT0JKRUNUICJvcmcuZnJlZWRlc2t0b3AuQXZhaGkuSW52YWxpZE9iamVjdEVycm9yIgorI2RlZmluZSBBVkFISV9EQlVTX0VSUl9OT19EQUVNT04gIm9yZy5mcmVlZGVza3RvcC5BdmFoaS5Ob0RhZW1vbkVycm9yIgorI2RlZmluZSBBVkFISV9EQlVTX0VSUl9JTlZBTElEX0lOVEVSRkFDRSAib3JnLmZyZWVkZXNrdG9wLkF2YWhpLkludmFsaWRJbnRlcmZhY2VFcnJvciIKKyNkZWZpbmUgQVZBSElfREJVU19FUlJfSU5WQUxJRF9QUk9UT0NPTCAib3JnLmZyZWVkZXNrdG9wLkF2YWhpLkludmFsaWRJbnRlcmZhY2VQcm90b2NvbEVycm9yIgorI2RlZmluZSBBVkFISV9EQlVTX0VSUl9JTlZBTElEX0ZMQUdTICJvcmcuZnJlZWRlc2t0b3AuQXZhaGkuSW52YWxpZEZsYWdzRXJyb3IiCisKKyNkZWZpbmUgQVZBSElfREJVU19FUlJfTk9UX0ZPVU5EICJvcmcuZnJlZWRlc2t0b3AuQXZhaGkuTm90Rm91bmRFcnJvciIKKyNkZWZpbmUgQVZBSElfREJVU19FUlJfSU5WQUxJRF9DT05GSUcgIm9yZy5mcmVlZGVza3RvcC5BdmFoaS5JbnZhbGlkQ29uZmlndXJhdGlvbkVycm9yIgorI2RlZmluZSBBVkFISV9EQlVTX0VSUl9WRVJTSU9OX01JU01BVENIICJvcmcuZnJlZWRlc2t0b3AuQXZhaGkuVmVyc2lvbk1pc21hdGNoRXJyb3IiCisjZGVmaW5lIEFWQUhJX0RCVVNfRVJSX0lOVkFMSURfU0VSVklDRV9TVUJUWVBFICJvcmcuZnJlZWRlc2t0b3AuQXZhaGkuSW52YWxpZFNlcnZpY2VTdWJ0eXBlRXJyb3IiCisjZGVmaW5lIEFWQUhJX0RCVVNfRVJSX0lOVkFMSURfUEFDS0VUICJvcmcuZnJlZWRlc2t0b3AuQXZhaGkuSW52YWxpZFBhY2tldEVycm9yIgorI2RlZmluZSBBVkFISV9EQlVTX0VSUl9JTlZBTElEX0ROU19FUlJPUiAib3JnLmZyZWVkZXNrdG9wLkF2YWhpLkludmFsaWRETlNFcnJvckVycm9yIgorI2RlZmluZSBBVkFISV9EQlVTX0VSUl9ETlNfRk9STUVSUiAib3JnLmZyZWVkZXNrdG9wLkF2YWhpLkROU0ZPUk1FUlIiCisjZGVmaW5lIEFWQUhJX0RCVVNfRVJSX0ROU19TRVJWRkFJTCAib3JnLmZyZWVkZXNrdG9wLkF2YWhpLkROU1NFUlZGQUlMIgorI2RlZmluZSBBVkFISV9EQlVTX0VSUl9ETlNfTlhET01BSU4gIm9yZy5mcmVlZGVza3RvcC5BdmFoaS5ETlNOWERPTUFJTiIKKyNkZWZpbmUgQVZBSElfREJVU19FUlJfRE5TX05PVElNUCAib3JnLmZyZWVkZXNrdG9wLkF2YWhpLkROU05PVElNUCIKKworI2RlZmluZSBBVkFISV9EQlVTX0VSUl9ETlNfUkVGVVNFRCAib3JnLmZyZWVkZXNrdG9wLkF2YWhpLkROU1JFRlVTRUQiCisjZGVmaW5lIEFWQUhJX0RCVVNfRVJSX0ROU19ZWERPTUFJTiAib3JnLmZyZWVkZXNrdG9wLkF2YWhpLkROU1lYRE9NQUlOIgorI2RlZmluZSBBVkFISV9EQlVTX0VSUl9ETlNfWVhSUlNFVCAib3JnLmZyZWVkZXNrdG9wLkF2YWhpLkROU1lYUlJTRVQiCisjZGVmaW5lIEFWQUhJX0RCVVNfRVJSX0ROU19OWFJSU0VUICJvcmcuZnJlZWRlc2t0b3AuQXZhaGkuRE5TTlhSUlNFVCIKKyNkZWZpbmUgQVZBSElfREJVU19FUlJfRE5TX05PVEFVVEggIm9yZy5mcmVlZGVza3RvcC5BdmFoaS5ETlNOT1RBVVRIIgorI2RlZmluZSBBVkFISV9EQlVTX0VSUl9ETlNfTk9UWk9ORSAib3JnLmZyZWVkZXNrdG9wLkF2YWhpLkROU05PVFpPTkUiCisjZGVmaW5lIEFWQUhJX0RCVVNfRVJSX0lOVkFMSURfUkRBVEEgIm9yZy5mcmVlZGVza3RvcC5BdmFoaS5JbnZhbGlkUkRhdGFFcnJvciIKKyNkZWZpbmUgQVZBSElfREJVU19FUlJfSU5WQUxJRF9ETlNfQ0xBU1MgIm9yZy5mcmVlZGVza3RvcC5BdmFoaS5JbnZhbGlkRE5TQ2xhc3NFcnJvciIKKyNkZWZpbmUgQVZBSElfREJVU19FUlJfSU5WQUxJRF9ETlNfVFlQRSAib3JnLmZyZWVkZXNrdG9wLkF2YWhpLkludmFsaWRETlNUeXBlRXJyb3IiCisjZGVmaW5lIEFWQUhJX0RCVVNfRVJSX05PVF9TVVBQT1JURUQgIm9yZy5mcmVlZGVza3RvcC5BdmFoaS5Ob3RTdXBwb3J0ZWRFcnJvciIKKworI2RlZmluZSBBVkFISV9EQlVTX0VSUl9OT1RfUEVSTUlUVEVEICJvcmcuZnJlZWRlc2t0b3AuQXZhaGkuTm90UGVybWl0dGVkRXJyb3IiCisjZGVmaW5lIEFWQUhJX0RCVVNfRVJSX0lOVkFMSURfQVJHVU1FTlQgIm9yZy5mcmVlZGVza3RvcC5BdmFoaS5JbnZhbGlkQXJndW1lbnRFcnJvciIKKyNkZWZpbmUgQVZBSElfREJVU19FUlJfSVNfRU1QVFkgIm9yZy5mcmVlZGVza3RvcC5BdmFoaS5Jc0VtcHR5RXJyb3IiCisjZGVmaW5lIEFWQUhJX0RCVVNfRVJSX05PX0NIQU5HRSAib3JnLmZyZWVkZXNrdG9wLkF2YWhpLk5vQ2hhbmdlRXJyb3IiCisKKy8qKiBDb252ZXJ0IGEgREJ1cyBlcnJvciBzdHJpbmcgaW50byBhbiBBdmFoaSBlcnJvciBudW1iZXIgKi8KK2ludCBhdmFoaV9lcnJvcl9kYnVzX3RvX251bWJlcihjb25zdCBjaGFyICpzKTsKKworLyoqIENvbnZlcnQgYW4gQXZhaGkgZXJyb3IgbnVtYmVyIGludG8gYSBEQnVzIGVycm9yIHN0cmluZy4gIFJlc3VsdCBzaG91bGQgbm90IGJlIGZyZWVkICovCitjb25zdCBjaGFyICogYXZhaGlfZXJyb3JfbnVtYmVyX3RvX2RidXMoaW50IGVycm9yKTsKKworQVZBSElfQ19ERUNMX0VORAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21tb24vZGVmcy5oIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbW1vbi9kZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI3M2E5ZAotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21tb24vZGVmcy5oCkBAIC0wLDAgKzEsMzU2IEBACisjaWZuZGVmIGZvb2RlZnNoZm9vCisjZGVmaW5lIGZvb2RlZnNoZm9vCisKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworLyoqIFxmaWxlIGRlZnMuaCBTb21lIGNvbW1vbiBkZWZpbml0aW9ucyAqLworCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2NkZWNsLmg+CisKKy8qKiBcbWFpbnBhZ2UKKyAqCisgKiBcc2VjdGlvbiBjaG9vc2VfYXBpIENob29zaW5nIGFuIEFQSQorICoKKyAqIEF2YWhpIHByb3ZpZGVzIHRocmVlIHByb2dyYW1taW5nIEFQSXMgZm9yIGludGVncmF0aW9uIG9mCisgKiBtRE5TL0ROUy1TRCBmZWF0dXJlcyBpbnRvIHlvdXIgQyBwcm9nYW1zOgorICoKKyAqIFxsaSA8Yj5hdmFoaS1jb3JlPC9iPjogYW4gQVBJIGZvciBlbWJlZGRpbmcgYSBjb21wbGV0ZSBtRE5TL0ROUy1TRCBzdGFjaworICogaW50byB5b3VyIHNvZnR3YXJlLiBUaGlzIGlzIGludGVuZGVkIGZvciBkZXZlbG9wZXJzIG9mIGVtYmVkZGVkCisgKiBhcHBsaWFuY2VzIG9ubHkuIFdlIGRpc3N1YWRlIGZyb20gdXNpbmcgdGhpcyBBUEkgaW4gbm9ybWFsIGRlc2t0b3AKKyAqIGFwcGxpY2F0aW9ucyBzaW5jZSBpdCBpcyBub3QgYSBnb29kIGlkZWEgdG8gcnVuIG11bHRpcGxlIG1ETlMKKyAqIHN0YWNrcyBzaW11bHRhbmVvdXNseSBvbiB0aGUgc2FtZSBob3N0LgorICogXGxpIDxiPnRoZSBELUJ1cyBBUEk8L2I+OiBhbiBleHRlbnNpdmUgRC1CdXMgaW50ZXJmYWNlIGZvciBicm93c2luZyBhbmQKKyAqIHJlZ2lzdGVyaW5nIG1ETlMvRE5TLVNEIHNlcnZpY2VzIHVzaW5nIGF2YWhpLWRhZW1vbi4gV2UgcmVjb21tZW5kCisgKiB1c2luZyB0aGlzIEFQSSBmb3Igc29mdHdhcmUgd3JpdHRlbiBpbiBhbnkgbGFuZ3VhZ2Ugb3RoZXIgdGhhbgorICogQyAoZS5nLiBQeXRob24pLgorICogXGxpIDxiPmF2YWhpLWNsaWVudDwvYj46IGEgc2ltcGxpZnlpbmcgQyB3cmFwcGVyIGFyb3VuZCB0aGUgRC1CdXMgQVBJLiBXZQorICogcmVjb21tZW5kIHVzaW5nIHRoaXMgQVBJIGluIEMgb3IgQysrIHByb2dhbXMuIFRoZSBELUJ1cyBpbnRlcm5hbHMKKyAqIGFyZSBoaWRkZW4gY29tcGxldGVseS4KKyAqIFxsaSA8Yj5hdmFoaS1nb2JqZWN0PC9iPjogYW4gb2JqZWN0LW9yaWVudGVkIEMgd3JhcHBlciBiYXNlZCBvbgorICogR0xpYidzIEdPYmplY3QuIFdlIHJlY29tbWQgdXNpbmcgdGhpcyBBUEkgZm9yIEdOT01FL0d0ayBwcm9ncmFtcy4KKyAqCisgKiBBbGwgdGhyZWUgQVBJcyBhcmUgdmVyeSBzaW1pbGFyLCBob3dldmVyIGF2YWhpLWNvcmUgaXMgdGhlIG1vc3QgcG93ZXJmdWwuCisgKgorICogSW4gYWRkaXRpb24gdG8gdGhlIHRocmVlIEFQSXMgZGVzY3JpYmVkIGFib3ZlIEF2YWhpIHN1cHBvcnRzIHR3bworICogY29tcGF0aWJpbGl0eSBsaWJyYXJpZXM6CisgKgorICogXGxpIDxiPmF2YWhpLWNvbXBhdC1saWJkbnNfc2Q8L2I+OiB0aGUgb3JpZ2luYWwgQm9uam91ciBBUEkgYXMgZG9jdW1lbnRlZAorICogaW4gdGhlIGhlYWRlciBmaWxlICJkbnNfc2QuaCIgYnkgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiBcbGkgPGI+YXZhaGktY29tcGF0LWhvd2w8L2I+OiB0aGUgSE9XTCBBUEkgYXMgcmVsZWFzZWQgd2l0aCBIT1dMIDAuOS44IGJ5CisgKiBQb3JjaGRvZyBTb2Z0d2FyZS4KKyAqCisgKiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIGNvbXBhdGliaWxpdHkgbGF5ZXJzIGFyZSBpbmNvbXBsZXRlIGFuZAorICogZ2VuZXJhbGx5IGEgd2FzdGUgb2YgcmVzb3VyY2VzLiBXZSBzdHJvbmdseSBlbmNvdXJhZ2UgZXZlcnlvbmUgdG8KKyAqIHVzZSBvdXIgbmF0aXZlIEFQSXMgZm9yIG5ld2x5IHdyaXR0ZW4gcHJvZ3JhbXMgYW5kIHRvIHBvcnQgb2xkZXIKKyAqIHByb2dyYW1zIHRvIGF2YWhpLWNsaWVudCEKKyAqCisgKiBUaGUgbmF0aXZlIEFQSXMgKGF2YWhpLWNsaWVudCBhbmQgYXZhaGktY29yZSkgY2FuIGJlIGludGVncmF0ZWQKKyAqIGludG8gZXh0ZXJuYWwgZXZlbnQgbG9vcHMuIFdlIHByb3ZpZGUgYWRhcHRlcnMgZm9yIHRoZSBmb2xsb3dpbmcKKyAqIGV2ZW50IGxvb3AgaW1wbGVtZW50YXRpb25zOgorICoKKyAqIFxsaSA8Yj5hdmFoaS1nbGliPC9iPjogVGhlIEdMSUIgbWFpbiBsb29wIGFzIHVzZWQgYnkgR1RrKy9HTk9NRQorICoKKyAqIFxsaSA8Yj5hdmFoaS1xdDwvYj46IFRoZSBRdCBtYWluIGxvb3AgYXMgdXNlZCBieSBRdC9LREUKKyAqCisgKiBGaW5hbGx5LCB3ZSBwcm92aWRlIGEgaGlnaC1sZXZlbCBHdGsrIEdVSSBkaWFsb2cgY2FsbGVkCisgKiA8Yj5hdmFoaS11aTwvYj4gZm9yIHVzZXItZnJpZW5kbHkgYnJvd3NpbmcgZm9yIHNlcnZpY2VzLgorICoKKyAqIFRoZSBkb3h5Z2VuLWdlbmVyYXRlZCBBUEkgZG9jdW1lbnRhdGlvbiBjb3ZlcnMgYXZhaGktY2xpZW50CisgKiAoaW5jbHVkaW5nIGl0cyBhdXhpbGlhcnkgQVBJcyksIHRoZSBldmVudCBsb29wIGFkYXB0ZXJzIGFuZAorICogYXZhaGktdWkuIEZvciB0aGUgb3RoZXIgQVBJcyBwbGVhc2UgY29uc3VsdCB0aGUgb3JpZ2luYWwKKyAqIGRvY3VtZW50YXRpb24gKGZvciB0aGUgY29tcGF0aWJpbGl0eSBBUElzKSBvciB0aGUgaGVhZGVyIGZpbGVzLgorICoKKyAqIFBsZWFzZSBub3RlIHRoYXQgdGhlIGRveHlnZW4tZ2VuZXJhdGVkIEFQSSBkb2N1bWVudGF0aW9uIG9mIHRoZQorICogbmF0aXZlIEF2YWhpIEFQSSBpcyBub3QgY29tcGxldGUuIEEgZmV3IGRlZmluaXRpb25zIHRoYXQgYXJlIHBhcnQKKyAqIG9mIHRoZSBBdmFoaSBBUEkgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGlzIGRvY3VtZW50YXRpb24sIGVpdGhlcgorICogYmVjYXVzZSB0aGV5IGFyZSBvbmx5IHJlbGV2YW50IGluIGEgdmVyeSBmZXcgbG93LWxldmVsIGFwcGxpY2F0aW9ucworICogb3IgYmVjYXVzZSB0aGV5IGFyZSBjb25zaWRlcmVkIG9ic29sZXRlLiBQbGVhc2UgY29uc3VsdCB0aGUgQyBoZWFkZXIKKyAqIGZpbGVzIGZvciBhbGwgZGVmaW5pdGlvbnMgdGhhdCBhcmUgcGFydCBvZiB0aGUgQXZhaGkgQVBJLiBQbGVhc2UKKyAqIG5vdGUgdGhhdCB0aGVzZSBoaWRkZW4gZGVmaW5pdGlvbnMgYXJlIGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgQXZhaGkKKyAqIEFQSSBhbmQgd2lsbCBzdGF5IGF2YWlsYWJsZSBpbiB0aGUgQVBJIGluIHRoZSBmdXR1cmUuCisgKgorICogXHNlY3Rpb24gZXJyb3JfcmVwb3J0aW5nIEVycm9yIFJlcG9ydGluZworICoKKyAqIFNvbWUgbm90ZXMgb24gdGhlIEF2YWhpIGVycm9yIGhhbmRsaW5nOgorICoKKyAqIC0gRXJyb3IgY29kZXMgYXJlIG5lZ2F0aXZlIGludGVnZXJzIGFuZCBkZWZpbmVkIGFzIEFWQUhJX0VSUl94eAorICogLSBJZiBhIGZ1bmN0aW9uIHJldHVybnMgc29tZSBraW5kIG9mIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIHZhbHVlIG9uCisgKiBzdWNjZXNzLCBhIGZhaWx1cmUgaXMgaW5kaWNhdGVkIGJ5IHJldHVybmluZyB0aGUgZXJyb3IgY29kZQorICogZGlyZWN0bHkuCisgKiAtIElmIGEgZnVuY3Rpb24gcmV0dXJucyBhIHBvaW50ZXIgb2Ygc29tZSBraW5kIG9uIHN1Y2Nlc3MsIGEKKyAqIGZhaWx1cmUgaXMgaW5kaWNhdGVkIGJ5IHJldHVybmluZyBOVUxMCisgKiAtIFRoZSBsYXN0IGVycm9yIG51bWJlciBtYXkgYmUgcmV0cmlldmVkIGJ5IGNhbGxpbmcKKyAqIGF2YWhpX2NsaWVudF9lcnJubygpCisgKiAtIEp1c3QgbGlrZSB0aGUgbGliYyBlcnJubyB2YXJpYWJsZSB0aGUgQXZhaGkgZXJybm8gaXMgTk9UIHJlc2V0IHRvCisgKiBBVkFISV9PSyBpZiBhIGZ1bmN0aW9uIGNhbGwgc3VjY2VlZHMuCisgKiAtIFlvdSBtYXkgY29udmVydCBhIG51bWVyaWMgZXJyb3IgY29kZSBpbnRvIGEgaHVtYW4gcmVhZGFibGUgc3RyaW5nCisgKiB1c2luZyBhdmFoaV9zdHJlcnJvcigpCisgKiAtIFRoZSBjb25zdHJ1Y3RvciBmdW5jdGlvbiBhdmFoaV9jbGllbnRfbmV3KCkgcmV0dXJucyB0aGUgZXJyb3IKKyAqIGNvZGUgaW4gYSBjYWxsLWJ5LXJlZmVyZW5jZSBhcmd1bWVudAorICoKKyAqIFxzZWN0aW9uIGV2ZW50X2xvb3AgRXZlbnQgTG9vcCBBYnN0cmFjdGlvbgorICoKKyAqIEF2YWhpIHVzZXMgYSBzaW1wbGUgZXZlbnQgbG9vcCBhYnN0cmFjdGlvbiBsYXllci4gQSB0YWJsZSBBdmFoaVBvbGwKKyAqIHdoaWNoIGNvbnRhaW5zIGZ1bmN0aW9uIHBvaW50ZXJzIGZvciB1c2VyIGRlZmluZWQgdGltZW91dCBhbmQgSS9PCisgKiBjb25kaXRpb24gZXZlbnQgc291cmNlIGltcGxlbWVudGF0aW9ucyBuZWVkcyB0byBiZSBwYXNzZWQgdG8KKyAqIGF2YWhpX2NsaWVudF9uZXcoKS4gQW4gYWRhcHRlciBmb3IgdGhpcyBhYnN0cmFjdGlvbiBsYXllciBpcworICogYXZhaWxhYmxlIGZvciB0aGUgR0xpYiBtYWluIGxvb3AgaW4gdGhlIG9iamVjdCBBdmFoaUdMaWJQb2xsLiBBCisgKiBzaW1wbGUgc3RhbmQtYWxvbmUgaW1wbGVtZW50YXRpb24gaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSBuYW1lCisgKiBBdmFoaVNpbXBsZVBvbGwuIEFuIGFkcGF0ZXIgZm9yIHRoZSBRdCBtYWluIGxvb3AgaXMgYXZhaWxhYmxlIGZyb20KKyAqIGF2YWhpX3F0X3BvbGxfZ2V0KCkuCisgKgorICogXHNlY3Rpb24gZ29vZF9wdWJsaXNoIEhvdyB0byBSZWdpc3RlciBTZXJ2aWNlcworICoKKyAqIC0gU3Vic2NyaWJlIHRvIHNlcnZlciBzdGF0ZSBjaGFuZ2VzLiBQYXNzIGEgY2FsbGJhY2sgZnVuY3Rpb24KKyAqIHBvaW50ZXIgdG8gYXZhaGlfY2xpZW50X25ldygpLiBJdCB3aWxsIGJlIGNhbGxlZAorICogd2hlbmV2ZXIgdGhlIHNlcnZlciBzdGF0ZSBjaGFuZ2VzLgorICogLSBPbmx5IHJlZ2lzdGVyIHlvdXIgc2VydmljZXMgd2hlbiB0aGUgc2VydmVyIGlzIGluIHN0YXRlCisgKiBBVkFISV9TRVJWRVJfUlVOTklORy4gSWYgeW91IHJlZ2lzdGVyIHlvdXIgc2VydmljZXMgaW4gb3RoZXIgc2VydmVyCisgKiBzdGF0ZXMgdGhleSBtaWdodCBub3QgYmUgYWNjZXNzaWJsZSBzaW5jZSB0aGUgbG9jYWwgaG9zdCBuYW1lIG1pZ2h0IG5vdCBuZWNlc3NhcmlseQorICogYmUgZXN0YWJsaXNoZWQuCisgKiAtIFJlbW92ZSB5b3VyIHNlcnZpY2VzIHdoZW4gdGhlIHNlcnZlciBlbnRlcnMKKyAqIEFWQUhJX1NFUlZFUl9DT0xMSVNJT04gb3IgQVZBSElfU0VSVkVSX1JFR0lTVEVSSU5HIHN0YXRlLiBZb3VyCisgKiBzZXJ2aWNlcyBtYXkgbm90IGJlIHJlYWNoYWJsZSBhbnltb3JlIHNpbmNlIHRoZSBsb2NhbCBob3N0IG5hbWUgaXMKKyAqIG5vIGxvbmdlciBlc3RhYmxpc2hlZCBvciBpcyBjdXJyZW50bHkgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcKKyAqIGVzdGFibGlzaGVkLgorICogLSBXaGVuIHJlZ2lzdGVyaW5nIHNlcnZpY2VzLCB1c2UgdGhlIGZvbGxvd2luZyBhbGdvcml0aG06CisgKiAgIC0gQ3JlYXRlIGEgbmV3IGVudHJ5IGdyb3VwIChpLmUuIGF2YWhpX2VudHJ5X2dyb3VwX25ldygpKQorICogICAtIEFkZCB5b3VyIHNlcnZpY2UocykvYWRkaXRpb25hbCBSUnMvc3VidHlwZXMgKGUuZy4gYXZhaGlfZW50cnlfZ3JvdXBfYWRkX3NlcnZpY2UoKSkKKyAqICAgLSBDb21taXQgdGhlIGVudHJ5IGdyb3VwIChpLmUuIGF2YWhpX2VudHJ5X2dyb3VwX2NvbW1pdCgpKQorICogLSBTdWJzY3JpYmUgdG8gZW50cnkgZ3JvdXAgc3RhdGUgY2hhbmdlcy4KKyAqIC0gSWYgdGhlIGVudHJ5IGdyb3VwIGVudGVycyBBVkFISV9FTlRSWV9HUk9VUF9DT0xMSVNJT04gc3RhdGUgdGhlCisgKiBzZXJ2aWNlcyBvZiB0aGUgZW50cnkgZ3JvdXAgYXJlIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZCBmcm9tIHRoZQorICogc2VydmVyLiBZb3UgbWF5IGltbWVkaWF0ZWx5IGFkZCB5b3VyIHNlcnZpY2VzIGJhY2sgdG8gdGhlIGVudHJ5CisgKiBncm91cCAoYnV0IHdpdGggbmV3IG5hbWVzLCBwZXJoYXBzIHVzaW5nCisgKiBhdmFoaV9hbHRlcm5hdGl2ZV9zZXJ2aWNlX25hbWUoKSkgYW5kIGNvbW1pdCBhZ2Fpbi4gUGxlYXNlIGRvIG5vdAorICogZnJlZSB0aGUgZW50cnkgZ3JvdXAgYW5kIGNyZWF0ZSBhIG5ldyBvbmUuIFRoaXMgd291bGQgaW5oaWJpdCBzb21lCisgKiB0cmFmZmljIGxpbWl0aW5nIGFsZ29yaXRobXMgaW4gbUROUy4KKyAqIC0gV2hlbiB5b3UgbmVlZCB0byBtb2RpZnkgeW91ciBzZXJ2aWNlcyAoaS5lLiBjaGFuZ2UgdGhlIFRYVCBkYXRhCisgKiBvciB0aGUgcG9ydCBudW1iZXIpLCB1c2UgdGhlIEFWQUhJX1BVQkxJU0hfVVBEQVRFIGZsYWcuIFBsZWFzZSBkbworICogbm90IGZyZWUgdGhlIGVudHJ5IGdyb3VwIGFuZCBjcmVhdGUgYSBuZXcgb25lLiBUaGlzIHdvdWxkIGluaGliaXQKKyAqIHNvbWUgdHJhZmZpYyBsaW1pdGluZyBhbGdvcml0aG1zIGluIG1ETlMuIFdoZW4gY2hhbmdpbmcganVzdCB0aGUKKyAqIFRYVCBkYXRhIGF2YWhpX2VudHJ5X2dyb3VwX3VwZGF0ZV90eHQoKSBpcyBhIHNob3J0Y3V0IGZvcgorICogQVZBSElfUFVCTElTSF9VUERBVEUuIFBsZWFzZSBub3RlIHRoYXQgeW91IGNhbm5vdCB1c2UKKyAqIEFWQUhJX1BVQkxJU0hfVVBEQVRFIHdoZW4gY2hhbmdpbmcgdGhlIHNlcnZpY2UgbmFtZSEgUmVuYW1pbmcgYQorICogRE5TLVNEIHNlcnZpY2UgaXMgaWRlbnRpY2FsIHRvIGRlbGV0aW5nIGFuZCBjcmVhdGluZyBhIG5ldyBvbmUsIGFuZAorICogdGhhdCdzIGV4YWN0bHkgd2hhdCB5b3Ugc2hvdWxkIGRvIGluIHRoYXQgY2FzZS4gRmlyc3QgY2FsbAorICogYXZhaGlfZW50cnlfZ3JvdXBfcmVzZXQoKSB0byByZW1vdmUgaXQgYW5kIHRoZW4gcmVhZCBpdCBub3JtYWxseS4KKyAqCisgKiBcc2VjdGlvbiBnb29kX2Jyb3dzZSBIb3cgdG8gQnJvd3NlIGZvciBTZXJ2aWNlcworICoKKyAqIC0gRm9yIG5vcm1hbCBhcHBsaWNhdGlvbnMgeW91IG5lZWQgdG8gY2FsbCBhdmFoaV9zZXJ2aWNlX2Jyb3dzZXJfbmV3KCkKKyAqIGZvciB0aGUgc2VydmljZSB0eXBlIHlvdSB3YW50IHRvIGJyb3dzZSBmb3IuIFVzZQorICogYXZhaGlfc2VydmljZV9yZXNvbHZlcl9uZXcoKSB0byBhY3F1aXJlIHNlcnZpY2UgZGF0YSBmb3IgYSBzZXJ2aWNlCisgKiBuYW1lLgorICogLSBZb3UgY2FuIHVzZSBhdmFoaV9kb21haW5fYnJvd3Nlcl9uZXcoKSB0byBnZXQgYSBsaXN0IG9mIGFubm91bmNlZAorICogYnJvd3NpbmcgZG9tYWlucy4gUGxlYXNlIG5vdGUgdGhhdCBub3QgYWxsIGRvbWFpbnMgd2hpdGggc2VydmljZXMKKyAqIG9uIHRoZSBMQU4gYXJlIG1hbmRhdG9yaWx5IGFubm91bmNlZC4KKyAqIC0gVGhlcmUgaXMgbm8gbmVlZCB0byBzdWJzY3JpYmUgdG8gc2VydmVyIHN0YXRlIGNoYW5nZXMuCisgKgorICogXHNlY3Rpb24gZGFlbW9uX2RpZXMgSG93IHRvIFdyaXRlIGEgQ2xpZW50IFRoYXQgQ2FuIERlYWwgd2l0aCBEYWVtb24gUmVzdGFydHMKKyAqCisgKiBXaXRoIEF2YWhpIGl0IGlzIHBvc3NpYmxlIHRvIHdyaXRlIGNsaWVudCBhcHBsaWNhdGlvbnMgdGhhdCBjYW4KKyAqIGRlYWwgd2l0aCBBdmFoaSBkYWVtb24gcmVzdGFydHMuIFRvIGFjY29tcGxpc2ggdGhhdCBtYWtlIHN1cmUgdG8KKyAqIHBhc3MgQVZBSElfQ0xJRU5UX05PX0ZBSUwgdG8gYXZhaGlfY2xpZW50X25ldygpJ3MgZmxhZ3MKKyAqIHBhcmFtZXRlci4gVGhhdCB3YXkgYXZhaGlfY2xpZW50X25ldygpIHdpbGwgc3VjY2VlZCBldmVuIHdoZW4gdGhlCisgKiBkYWVtb24gaXMgbm90IHJ1bm5pbmcuIEluIHRoYXQgY2FzZSB0aGUgb2JqZWN0IHdpbGwgZW50ZXIKKyAqIEFWQUhJX0NMSUVOVF9DT05ORUNUSU5HIHN0YXRlLiBBcyBzb29uIGFzIHRoZSBkYWVtb24gYmVjb21lcworICogYXZhaWxhYmxlIHRoZSBvYmplY3Qgd2lsbCBlbnRlciBvbmUgb2YgdGhlIEFWQUhJX0NMSUVOVF9TX3h4eAorICogc3RhdGVzLiBNYWtlIHN1cmUgdG8gbm90IGNyZWF0ZSBicm93c2VycyBvciBlbnRyeSBncm91cHMgYmVmb3JlIHRoZQorICogY2xpZW50IG9iamVjdCBoYXMgZW50ZXJlZCBvbmUgb2YgdGhvc2Ugc3RhdGVzLiBBcyB1c3VhbCB5b3Ugd2lsbCBiZQorICogaW5mb3JtZWQgYWJvdXQgc3RhdGUgY2hhbmdlcyB3aXRoIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBzdXBwbGllZCB0bworICogYXZhaGlfY2xpZW50X25ldygpLiBJZiB0aGUgY2xpZW50IGlzIGZvcmNlZCB0byBkaXNjb25uZWN0IGZyb20gdGhlCisgKiBzZXJ2ZXIgaXQgd2lsbCBlbnRlciBBVkFISV9DTElFTlRfRkFJTFVSRSBzdGF0ZSB3aXRoCisgKiBhdmFoaV9jbGllbnRfZXJybm8oKSA9PSBBVkFISV9FUlJfRElTQ09OTkVDVEVELiBGcmVlIHRoZQorICogQXZhaGlDbGllbnQgb2JqZWN0IGluIHRoYXQgY2FzZSAoYW5kIGFsbCBpdHMgYXNzb2NpYXRlZCBvYmplY3RzCisgKiBzdWNoIGFzIGVudHJ5IGdyb3VwcyBhbmQgYnJvd3NlciBvYmplY3RzIHByaW9yIHRvIHRoYXQpIGFuZAorICogcmVjb25uZWN0IHRvIHRoZSBzZXJ2ZXIgYW5ldyAtIGFnYWluIHdpdGggcGFzc2luZworICogQVZBSElfQ0xJRU5UX05PX0ZBSUwgdG8gYXZhaGlfY2xpZW50X25ldygpLgorICoKKyAqIFdlIGVuY291cmFnZSBpbXBsZW1lbnRpbmcgdGhpcyBpbiBhbGwgc29mdHdhcmUgd2hlcmUgc2VydmljZQorICogZGlzY292ZXJ5IGlzIG5vdCBhbiBpbnRlZ3JhbCBwYXJ0IG9mIGFwcGxpY2F0aW9uLiBlLmcuIHVzZSBpdCBpbgorICogYWxsIGtpbmRzIG9mIGJhY2tncm91bmQgZGFlbW9ucywgYnV0IG5vdCBuZWNlc3NhcmlseSBpbiBzb2Z0d2FyZQorICogbGlrZSBpQ2hhdCBjb21wYXRpYmxlIElNIHNvZnR3YXJlLgorICoKKyAqIEZvciBub3cgQVZBSElfQ0xJRU5UX05PX0ZBSUwgY2Fubm90IGRlYWwgd2l0aCBELUJ1cyBkYWVtb24gcmVzdGFydHMuCisgKgorICogXHNlY3Rpb24gZG9tYWlucyBIb3cgdG8gRGVhbCBQcm9wZXJseSB3aXRoIEJyb3dzaW5nIERvbWFpbnMKKyAqCisgKiBEdWUgdG8gdGhlIGludHJvZHVjdGlvbiBvZiB3aWRlLWFyZWEgRE5TLVNEIHRoZSBjb3JyZWN0IGhhbmRsaW5nIG9mCisgKiBkb21haW5zIGJlY29tZXMgbW9yZSBpbXBvcnRhbnQgZm9yIEF2YWhpIGVuYWJsZWQgYXBwbGljYXRpb25zLiBBbGwKKyAqIGFwcGxpY2F0aW9ucyB0aGF0IG9mZmVyIHRoZSB1c2VyIGEgbGlzdCBvZiBzZXJ2aWNlcyBkaXNjb3ZlcmVkIHdpdGgKKyAqIEF2YWhpIHNob3VsZCBvZmZlciBzb21lIGtpbmQgb2YgZWRpdGFibGUgZHJvcCBkb3duIGJveCB3aGVyZSB0aGUKKyAqIHVzZXIgY2FuIGVpdGhlciBlbnRlciBoaXMgb3duIGRvbWFpbiBvciBzZWxlY3Qgb25lIG9mIHRob3NlIG9mZmVyZWQKKyAqIGJ5IEF2YWhpRG9tYWluQnJvd3Nlci4gVGhlIGRlZmF1bHQgZG9tYWluIHRvIGJyb3dzZSBzaG91bGQgYmUgdGhlCisgKiBvbmUgcmV0dXJuZWQgYnkgYXZhaGlfY2xpZW50X2dldF9kb21haW5fbmFtZSgpLiBUaGUgbGlzdCBvZiBkb21haW5zCisgKiByZXR1cm5lZCBieSBBdmFoaURvbWFpbkJyb3dzZXIgaXMgYXNzZW1ibGVkIGJ5IHRoZSBicm93c2luZyBkb21haW5zCisgKiBjb25maWd1cmVkIGluIHRoZSBkYWVtb24ncyBjb25maWd1cmF0aW9uIGZpbGUsIHRoZSBkb21haW5zCisgKiBhbm5vdW5jZWQgaW5zaWRlIHRoZSBkZWZhdWx0IGRvbWFpbiwgdGhlIGRvbWFpbnMgc2V0IHdpdGggdGhlCisgKiBlbnZpcm9ubWVudCB2YXJpYWJsZSAkQVZBSElfQlJPV1NFX0RPTUFJTlMgKGNvbG9uLXNlcGVyYXRlZCkgb24gdGhlCisgKiBjbGllbnQgc2lkZSBhbmQgdGhlIGRvbWFpbnMgc2V0IGluIHRoZSBYREcgY29uZmlndXJhdGlvbiBmaWxlCisgKiB+Ly5jb25maWcvYXZhaGkvYnJvd3NlLWRvbWFpbnMgb24gdGhlIGNsaWVudCBzaWRlIChzZXBlcmF0ZWQgYnkKKyAqIG5ld2xpbmVzKS4gRmlsZSBtYW5hZ2VycyBvZmZlcmluZyBzb21lIGtpbmQgb2YgIk5ldHdvcmsKKyAqIE5laWdoYm9yaG9vZCIgZm9sZGVyIHNob3VsZCBzaG93IHRoZSBlbnRyaWVzIG9mIHRoZSBkZWZhdWx0IGRvbWFpbgorICogcmlnaHQgaW5zaWRlIHRoYXQgYW5kIG9mZmVyIHN1YmZvbGRlcnMgZm9yIHRoZSBicm93c2luZyBkb21haW5zCisgKiByZXR1cm5lZCBieSBBdmFoaURvbWFpbkJyb3dzZXIuCisgKi8KKworQVZBSElfQ19ERUNMX0JFR0lOCisKKy8qKiBAeyBcbmFtZSBTdGF0ZXMgKi8KKworLyoqIFN0YXRlcyBvZiBhIHNlcnZlciBvYmplY3QgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgQVZBSElfU0VSVkVSX0lOVkFMSUQsICAgICAgICAgIC8qKjwgSW52YWxpZCBzdGF0ZSAoaW5pdGlhbCkgKi8KKyAgICBBVkFISV9TRVJWRVJfUkVHSVNURVJJTkcsICAgICAgLyoqPCBIb3N0IFJScyBhcmUgYmVpbmcgcmVnaXN0ZXJlZCAqLworICAgIEFWQUhJX1NFUlZFUl9SVU5OSU5HLCAgICAgICAgICAvKio8IEFsbCBob3N0IFJScyBoYXZlIGJlZW4gZXN0YWJsaXNoZWQgKi8KKyAgICBBVkFISV9TRVJWRVJfQ09MTElTSU9OLCAgICAgICAgLyoqPCBUaGVyZSBpcyBhIGNvbGxpc2lvbiB3aXRoIGEgaG9zdCBSUi4gQWxsIGhvc3QgUlJzIGhhdmUgYmVlbiB3aXRoZHJhd24sIHRoZSB1c2VyIHNob3VsZCBzZXQgYSBuZXcgaG9zdCBuYW1lIHZpYSBhdmFoaV9zZXJ2ZXJfc2V0X2hvc3RfbmFtZSgpICovCisgICAgQVZBSElfU0VSVkVSX0ZBSUxVUkUgICAgICAgICAgIC8qKjwgU29tZSBmYXRhbCBmYWlsdXJlIGhhcHBlbmVkLCB0aGUgc2VydmVyIGlzIHVuYWJsZSB0byBwcm9jZWVkICovCit9IEF2YWhpU2VydmVyU3RhdGU7CisKKy8qKiBTdGF0ZXMgb2YgYW4gZW50cnkgZ3JvdXAgb2JqZWN0ICovCit0eXBlZGVmIGVudW0geworICAgIEFWQUhJX0VOVFJZX0dST1VQX1VOQ09NTUlURUQsICAgIC8qKjwgVGhlIGdyb3VwIGhhcyBub3QgeWV0IGJlZW4gY29tbWl0ZWQsIHRoZSB1c2VyIG11c3Qgc3RpbGwgY2FsbCBhdmFoaV9lbnRyeV9ncm91cF9jb21taXQoKSAqLworICAgIEFWQUhJX0VOVFJZX0dST1VQX1JFR0lTVEVSSU5HLCAgIC8qKjwgVGhlIGVudHJpZXMgb2YgdGhlIGdyb3VwIGFyZSBjdXJyZW50bHkgYmVpbmcgcmVnaXN0ZXJlZCAqLworICAgIEFWQUhJX0VOVFJZX0dST1VQX0VTVEFCTElTSEVELCAgIC8qKjwgVGhlIGVudHJpZXMgaGF2ZSBzdWNjZXNzZnVsbHkgYmVlbiBlc3RhYmxpc2hlZCAqLworICAgIEFWQUhJX0VOVFJZX0dST1VQX0NPTExJU0lPTiwgICAgIC8qKjwgQSBuYW1lIGNvbGxpc2lvbiBmb3Igb25lIG9mIHRoZSBlbnRyaWVzIGluIHRoZSBncm91cCBoYXMgYmVlbiBkZXRlY3RlZCwgdGhlIGVudHJpZXMgaGF2ZSBiZWVuIHdpdGhkcmF3biAqLworICAgIEFWQUhJX0VOVFJZX0dST1VQX0ZBSUxVUkUgICAgICAgIC8qKjwgU29tZSBraW5kIG9mIGZhaWx1cmUgaGFwcGVuZWQsIHRoZSBlbnRyaWVzIGhhdmUgYmVlbiB3aXRoZHJhd24gKi8KK30gQXZhaGlFbnRyeUdyb3VwU3RhdGU7CisKKy8qKiBAfSAqLworCisvKiogQHsgXG5hbWUgRmxhZ3MgKi8KKworLyoqIFNvbWUgZmxhZ3MgZm9yIHB1Ymxpc2hpbmcgZnVuY3Rpb25zICovCit0eXBlZGVmIGVudW0geworICAgIEFWQUhJX1BVQkxJU0hfVU5JUVVFID0gMSwgICAgICAgICAgIC8qKjwgRm9yIHJhdyByZWNvcmRzOiBUaGUgUlJzZXQgaXMgaW50ZW5kZWQgdG8gYmUgdW5pcXVlICovCisgICAgQVZBSElfUFVCTElTSF9OT19QUk9CRSA9IDIsICAgICAgICAgLyoqPCBGb3IgcmF3IHJlY29yZHM6IFRob3VnaCB0aGUgUlJzZXQgaXMgaW50ZW5kZWQgdG8gYmUgdW5pcXVlIG5vIHByb2JlcyBzaGFsbCBiZSBzZW50ICovCisgICAgQVZBSElfUFVCTElTSF9OT19BTk5PVU5DRSA9IDQsICAgICAgLyoqPCBGb3IgcmF3IHJlY29yZHM6IERvIG5vdCBhbm5vdW5jZSB0aGlzIFJSIHRvIG90aGVyIGhvc3RzICovCisgICAgQVZBSElfUFVCTElTSF9BTExPV19NVUxUSVBMRSA9IDgsICAgLyoqPCBGb3IgcmF3IHJlY29yZHM6IEFsbG93IG11bHRpcGxlIGxvY2FsIHJlY29yZHMgb2YgdGhpcyB0eXBlLCBldmVuIGlmIHRoZXkgYXJlIGludGVuZGVkIHRvIGJlIHVuaXF1ZSAqLworLyoqIFxjb25kIGZ1bGxkb2NzICovCisgICAgQVZBSElfUFVCTElTSF9OT19SRVZFUlNFID0gMTYsICAgICAgLyoqPCBGb3IgYWRkcmVzcyByZWNvcmRzOiBkb24ndCBjcmVhdGUgYSByZXZlcnNlIChQVFIpIGVudHJ5ICovCisgICAgQVZBSElfUFVCTElTSF9OT19DT09LSUUgPSAzMiwgICAgICAgLyoqPCBGb3Igc2VydmljZSByZWNvcmRzOiBkbyBub3QgaW1wbGljaXRseSBhZGQgdGhlIGxvY2FsIHNlcnZpY2UgY29va2llIHRvIFRYVCBkYXRhICovCisvKiogXGVuZGNvbmQgKi8KKyAgICBBVkFISV9QVUJMSVNIX1VQREFURSA9IDY0LCAgICAgICAgICAvKio8IFVwZGF0ZSBleGlzdGluZyByZWNvcmRzIGluc3RlYWQgb2YgYWRkaW5nIG5ldyBvbmVzICovCisvKiogXGNvbmQgZnVsbGRvY3MgKi8KKyAgICBBVkFISV9QVUJMSVNIX1VTRV9XSURFX0FSRUEgPSAxMjgsICAvKio8IFJlZ2lzdGVyIHRoZSByZWNvcmQgdXNpbmcgd2lkZSBhcmVhIEROUyAoaS5lLiB1bmljYXN0IEROUyB1cGRhdGUpICovCisgICAgQVZBSElfUFVCTElTSF9VU0VfTVVMVElDQVNUID0gMjU2ICAgLyoqPCBSZWdpc3RlciB0aGUgcmVjb3JkIHVzaW5nIG11bHRpY2FzdCBETlMgKi8KKy8qKiBcZW5kY29uZCAqLworfSBBdmFoaVB1Ymxpc2hGbGFnczsKKworLyoqIFNvbWUgZmxhZ3MgZm9yIGxvb2t1cCBmdW5jdGlvbnMgKi8KK3R5cGVkZWYgZW51bSB7CisvKiogXGNvbmQgZnVsbGRvY3MgKi8KKyAgICBBVkFISV9MT09LVVBfVVNFX1dJREVfQVJFQSA9IDEsICAgIC8qKjwgRm9yY2UgbG9va3VwIHZpYSB3aWRlIGFyZWEgRE5TICovCisgICAgQVZBSElfTE9PS1VQX1VTRV9NVUxUSUNBU1QgPSAyLCAgICAvKio8IEZvcmNlIGxvb2t1cCB2aWEgbXVsdGljYXN0IEROUyAqLworLyoqIFxlbmRjb25kICovCisgICAgQVZBSElfTE9PS1VQX05PX1RYVCA9IDQsICAgICAgICAgICAvKio8IFdoZW4gZG9pbmcgc2VydmljZSByZXNvbHZpbmcsIGRvbid0IGxvb2t1cCBUWFQgcmVjb3JkICovCisgICAgQVZBSElfTE9PS1VQX05PX0FERFJFU1MgPSA4ICAgICAgICAvKio8IFdoZW4gZG9pbmcgc2VydmljZSByZXNvbHZpbmcsIGRvbid0IGxvb2t1cCBBL0FBQUEgcmVjb3JkICovCit9IEF2YWhpTG9va3VwRmxhZ3M7CisKKy8qKiBTb21lIGZsYWdzIGZvciBsb29rdXAgY2FsbGJhY2sgZnVuY3Rpb25zICovCit0eXBlZGVmIGVudW0geworICAgIEFWQUhJX0xPT0tVUF9SRVNVTFRfQ0FDSEVEID0gMSwgICAgICAgICAvKio8IFRoaXMgcmVzcG9uc2Ugb3JpZ2luYXRlcyBmcm9tIHRoZSBjYWNoZSAqLworICAgIEFWQUhJX0xPT0tVUF9SRVNVTFRfV0lERV9BUkVBID0gMiwgICAgICAvKio8IFRoaXMgcmVzcG9uc2Ugb3JpZ2luYXRlcyBmcm9tIHdpZGUgYXJlYSBETlMgKi8KKyAgICBBVkFISV9MT09LVVBfUkVTVUxUX01VTFRJQ0FTVCA9IDQsICAgICAgLyoqPCBUaGlzIHJlc3BvbnNlIG9yaWdpbmF0ZXMgZnJvbSBtdWx0aWNhc3QgRE5TICovCisgICAgQVZBSElfTE9PS1VQX1JFU1VMVF9MT0NBTCA9IDgsICAgICAgICAgIC8qKjwgVGhpcyByZWNvcmQvc2VydmljZSByZXNpZGVzIG9uIGFuZCB3YXMgYW5ub3VuY2VkIGJ5IHRoZSBsb2NhbCBob3N0LiBPbmx5IGF2YWlsYWJsZSBpbiBzZXJ2aWNlIGFuZCByZWNvcmQgYnJvd3NlcnMgYW5kIG9ubHkgb24gQVZBSElfQlJPV1NFUl9ORVcuICovCisgICAgQVZBSElfTE9PS1VQX1JFU1VMVF9PVVJfT1dOID0gMTYsICAgICAgIC8qKjwgVGhpcyBzZXJ2aWNlIGJlbG9uZ3MgdG8gdGhlIHNhbWUgbG9jYWwgY2xpZW50IGFzIHRoZSBicm93c2VyIG9iamVjdC4gT25seSBhdmFpbGFibGUgaW4gYXZhaGktY2xpZW50LCBhbmQgb25seSBmb3Igc2VydmljZSBicm93c2VycyBhbmQgb25seSBvbiBBVkFISV9CUk9XU0VSX05FVy4gKi8KKyAgICBBVkFISV9MT09LVVBfUkVTVUxUX1NUQVRJQyA9IDMyICAgICAgICAgLyoqPCBUaGUgcmV0dXJuZWQgZGF0YSBoYXMgYmVlbiBkZWZpbmVkIHN0YXRpY2FsbHkgYnkgc29tZSBjb25maWd1cmF0aW9uIG9wdGlvbiAqLworfSBBdmFoaUxvb2t1cFJlc3VsdEZsYWdzOworCisvKiogQH0gKi8KKworLyoqIEB7IFxuYW1lIEV2ZW50cyAqLworCisvKiogVHlwZSBvZiBjYWxsYmFjayBldmVudCB3aGVuIGJyb3dzaW5nICovCit0eXBlZGVmIGVudW0geworICAgIEFWQUhJX0JST1dTRVJfTkVXLCAgICAgICAgICAgICAgIC8qKjwgVGhlIG9iamVjdCBpcyBuZXcgb24gdGhlIG5ldHdvcmsgKi8KKyAgICBBVkFISV9CUk9XU0VSX1JFTU9WRSwgICAgICAgICAgICAvKio8IFRoZSBvYmplY3QgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBuZXR3b3JrICovCisgICAgQVZBSElfQlJPV1NFUl9DQUNIRV9FWEhBVVNURUQsICAgLyoqPCBPbmUtdGltZSBldmVudCwgdG8gbm90aWZ5IHRoZSB1c2VyIHRoYXQgYWxsIGVudHJpZXMgZnJvbSB0aGUgY2FjaGVzIGhhdmUgYmVlbiBzZW50ICovCisgICAgQVZBSElfQlJPV1NFUl9BTExfRk9SX05PVywgICAgICAgLyoqPCBPbmUtdGltZSBldmVudCwgdG8gbm90aWZ5IHRoZSB1c2VyIHRoYXQgbW9yZSByZWNvcmRzIHdpbGwgcHJvYmFibHkgbm90IHNob3cgdXAgaW4gdGhlIG5lYXIgZnV0dXJlLCBpLmUuIGFsbCBjYWNoZSBlbnRyaWVzIGhhdmUgYmVlbiByZWFkIGFuZCBhbGwgc3RhdGljIHNlcnZlcnMgYmVlbiBxdWVyaWVkICovCisgICAgQVZBSElfQlJPV1NFUl9GQUlMVVJFICAgICAgICAgICAgLyoqPCBCcm93c2luZyBmYWlsZWQgZHVlIHRvIHNvbWUgcmVhc29uIHdoaWNoIGNhbiBiZSByZXRyaWV2ZWQgdXNpbmcgYXZhaGlfc2VydmVyX2Vycm5vKCkvYXZhaGlfY2xpZW50X2Vycm5vKCkgKi8KK30gQXZhaGlCcm93c2VyRXZlbnQ7CisKKy8qKiBUeXBlIG9mIGNhbGxiYWNrIGV2ZW50IHdoZW4gcmVzb2x2aW5nICovCit0eXBlZGVmIGVudW0geworICAgIEFWQUhJX1JFU09MVkVSX0ZPVU5ELCAgICAgICAgICAvKio8IFJSIGZvdW5kLCByZXNvbHZpbmcgc3VjY2Vzc2Z1bCAqLworICAgIEFWQUhJX1JFU09MVkVSX0ZBSUxVUkUgICAgICAgICAvKio8IFJlc29sdmluZyBmYWlsZWQgZHVlIHRvIHNvbWUgcmVhc29uIHdoaWNoIGNhbiBiZSByZXRyaWV2ZWQgdXNpbmcgYXZhaGlfc2VydmVyX2Vycm5vKCkvYXZhaGlfY2xpZW50X2Vycm5vKCkgKi8KK30gQXZhaGlSZXNvbHZlckV2ZW50OworCisvKiogQH0gKi8KKworLyoqIEB7IFxuYW1lIE90aGVyIGRlZmluaXRpb25zICovCisKKy8qKiBUaGUgdHlwZSBvZiBkb21haW4gdG8gYnJvd3NlIGZvciAqLwordHlwZWRlZiBlbnVtIHsKKyAgICBBVkFISV9ET01BSU5fQlJPV1NFUl9CUk9XU0UsICAgICAgICAgICAgLyoqPCBCcm93c2UgZm9yIGEgbGlzdCBvZiBhdmFpbGFibGUgYnJvd3NpbmcgZG9tYWlucyAqLworICAgIEFWQUhJX0RPTUFJTl9CUk9XU0VSX0JST1dTRV9ERUZBVUxULCAgICAvKio8IEJyb3dzZSBmb3IgdGhlIGRlZmF1bHQgYnJvd3NpbmcgZG9tYWluICovCisgICAgQVZBSElfRE9NQUlOX0JST1dTRVJfUkVHSVNURVIsICAgICAgICAgIC8qKjwgQnJvd3NlIGZvciBhIGxpc3Qgb2YgYXZhaWxhYmxlIHJlZ2lzdGVyaW5nIGRvbWFpbnMgKi8KKyAgICBBVkFISV9ET01BSU5fQlJPV1NFUl9SRUdJU1RFUl9ERUZBVUxULCAgLyoqPCBCcm93c2UgZm9yIHRoZSBkZWZhdWx0IHJlZ2lzdGVyaW5nIGRvbWFpbiAqLworICAgIEFWQUhJX0RPTUFJTl9CUk9XU0VSX0JST1dTRV9MRUdBQ1ksICAgICAvKio8IExlZ2FjeSBicm93c2UgZG9tYWluIC0gc2VlIEROUy1TRCBzcGVjIGZvciBtb3JlIGluZm9ybWF0aW9uICovCisgICAgQVZBSElfRE9NQUlOX0JST1dTRVJfTUFYCit9IEF2YWhpRG9tYWluQnJvd3NlclR5cGU7CisKKy8qKiBAfSAqLworCisvKiogXGNvbmQgZnVsbGRvY3MgKi8KKy8qKiBGb3IgZXZlcnkgc2VydmljZSBhIHNwZWNpYWwgVFhUIGl0ZW0gaXMgaW1wbGljaXRseSBhZGRlZCwgd2hpY2gKKyAqIGNvbnRhaW5zIGEgcmFuZG9tIGNvb2tpZSB3aGljaCBpcyBwcml2YXRlIHRvIHRoZSBsb2NhbCBkYWVtb24uIFRoaXMKKyAqIGNhbiBiZSB1c2VkIGJ5IGNsaWVudHMgdG8gZGV0ZXJtaW5lIGlmIHR3byBzZXJ2aWNlcyBvbiB0d28KKyAqIGRpZmZlcmVudCBzdWJuZXRzIGFyZSBlZmZlY3RpdmVseSB0aGUgc2FtZS4gKi8KKyNkZWZpbmUgQVZBSElfU0VSVklDRV9DT09LSUUgIm9yZy5mcmVlZGVza3RvcC5BdmFoaS5jb29raWUiCisKKy8qKiBJbiBpbnZhbGlkIGNvb2tpZSBhcyBzcGVjaWFsIHZhbHVlICovCisjZGVmaW5lIEFWQUhJX1NFUlZJQ0VfQ09PS0lFX0lOVkFMSUQgKDApCisvKiogXGVuZGNvbmQgZnVsbGRvY3MgKi8KKworLyoqIEB7IFxuYW1lIEROUyBSUiBkZWZpbml0aW9ucyAqLworCisvKiogRE5TIHJlY29yZCB0eXBlcywgc2VlIFJGQyAxMDM1ICovCitlbnVtIHsKKyAgICBBVkFISV9ETlNfVFlQRV9BID0gMHgwMSwKKyAgICBBVkFISV9ETlNfVFlQRV9OUyA9IDB4MDIsCisgICAgQVZBSElfRE5TX1RZUEVfQ05BTUUgPSAweDA1LAorICAgIEFWQUhJX0ROU19UWVBFX1NPQSA9IDB4MDYsCisgICAgQVZBSElfRE5TX1RZUEVfUFRSID0gMHgwQywKKyAgICBBVkFISV9ETlNfVFlQRV9ISU5GTyA9IDB4MEQsCisgICAgQVZBSElfRE5TX1RZUEVfTVggPSAweDBGLAorICAgIEFWQUhJX0ROU19UWVBFX1RYVCA9IDB4MTAsCisgICAgQVZBSElfRE5TX1RZUEVfQUFBQSA9IDB4MUMsCisgICAgQVZBSElfRE5TX1RZUEVfU1JWID0gMHgyMQorfTsKKworLyoqIEROUyByZWNvcmQgY2xhc3Nlcywgc2VlIFJGQyAxMDM1ICovCitlbnVtIHsKKyAgICBBVkFISV9ETlNfQ0xBU1NfSU4gPSAweDAxICAgICAgICAgIC8qKjwgUHJvYmFibHkgdGhlIG9ubHkgY2xhc3Mgd2Ugd2lsbCBldmVyIHVzZSAqLworfTsKKworLyoqIEB9ICovCisKKy8qKiBUaGUgZGVmYXVsdCBUVEwgZm9yIFJScyB3aGljaCBjb250YWluIGEgaG9zdCBuYW1lIG9mIHNvbWUga2luZC4gKi8KKyNkZWZpbmUgQVZBSElfREVGQVVMVF9UVExfSE9TVF9OQU1FICgxMjApCisKKy8qKiBUaGUgZGVmYXVsdCBUVEwgZm9yIGFsbCBvdGhlciByZWNvcmRzLiAqLworI2RlZmluZSBBVkFISV9ERUZBVUxUX1RUTCAoNzUqNjApCisKK0FWQUhJX0NfREVDTF9FTkQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktY29tbW9uL2RvbWFpbi10ZXN0LmMgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tbW9uL2RvbWFpbi10ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y3NjNlYwotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21tb24vZG9tYWluLXRlc3QuYwpAQCAtMCwwICsxLDEyMyBAQAorLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorCisjaW5jbHVkZSAiZG9tYWluLmgiCisjaW5jbHVkZSAibWFsbG9jLmgiCisKK2ludCBtYWluKEFWQUhJX0dDQ19VTlVTRUQgaW50IGFyZ2MsIEFWQUhJX0dDQ19VTlVTRUQgY2hhciAqYXJndltdKSB7CisgICAgY2hhciAqczsKKyAgICBjaGFyIHRbMjU2XSwgclsyNTZdOworICAgIGNvbnN0IGNoYXIgKnA7CisgICAgc2l6ZV90IHNpemU7CisgICAgY2hhciBuYW1lWzY0XSwgdHlwZVtBVkFISV9ET01BSU5fTkFNRV9NQVhdLCBkb21haW5bQVZBSElfRE9NQUlOX05BTUVfTUFYXTsKKworICAgIHByaW50ZigiJXNcbiIsIHMgPSBhdmFoaV9ub3JtYWxpemVfbmFtZV9zdHJkdXAoImZvby5mb29cXDA0Ni4iKSk7CisgICAgYXZhaGlfZnJlZShzKTsKKworICAgIHByaW50ZigiJXNcbiIsIHMgPSBhdmFoaV9ub3JtYWxpemVfbmFtZV9zdHJkdXAoImZvby5mb29cXC5mb28uIikpOworICAgIGF2YWhpX2ZyZWUocyk7CisKKworICAgIHByaW50ZigiJXNcbiIsIHMgPSBhdmFoaV9ub3JtYWxpemVfbmFtZV9zdHJkdXAoImZvXFxcXG9cXC4uZiBvby4iKSk7CisgICAgYXZhaGlfZnJlZShzKTsKKworICAgIHByaW50ZigiJWlcbiIsIGF2YWhpX2RvbWFpbl9lcXVhbCgiXFwwNjVhYSBiYmJcXC5cXDA0NmNjLmNjXFxcXC5kZWUuZmZmLiIsICJBYWEgQkJCXFwuXFwuY2MuY2NcXFxcLmRlZS5mZmYiKSk7CisgICAgcHJpbnRmKCIlaVxuIiwgYXZhaGlfZG9tYWluX2VxdWFsKCJBIiwgImEiKSk7CisKKyAgICBwcmludGYoIiVpXG4iLCBhdmFoaV9kb21haW5fZXF1YWwoImEiLCAiYWFhIikpOworCisgICAgcHJpbnRmKCIldSA9ICV1XG4iLCBhdmFoaV9kb21haW5faGFzaCgiY2NjXFwwNjVhYS5hYVxcLmJcXFxcLiIpLCBhdmFoaV9kb21haW5faGFzaCgiY2NjQWFhLmFhXFwuYlxcXFwiKSk7CisKKworICAgIGF2YWhpX3NlcnZpY2VfbmFtZV9qb2luKHQsIHNpemVvZih0KSwgImZvby5mb28uZm9vIFxcLiIsICJfaHR0cC5fdGNwIiwgInRlc3QubG9jYWwiKTsKKyAgICBwcmludGYoIjwlcz5cbiIsIHQpOworCisgICAgYXZhaGlfc2VydmljZV9uYW1lX3NwbGl0KHQsIG5hbWUsIHNpemVvZihuYW1lKSwgdHlwZSwgc2l6ZW9mKHR5cGUpLCBkb21haW4sIHNpemVvZihkb21haW4pKTsKKyAgICBwcmludGYoIm5hbWU6IDwlcz47IHR5cGU6IDwlcz47IGRvbWFpbiA8JXM+XG4iLCBuYW1lLCB0eXBlLCBkb21haW4pOworCisgICAgYXZhaGlfc2VydmljZV9uYW1lX2pvaW4odCwgc2l6ZW9mKHQpLCBOVUxMLCAiX2h0dHAuX3RjcCIsICJvbmUudHdvXFwuIC5sb2NhbCIpOworICAgIHByaW50ZigiPCVzPlxuIiwgdCk7CisKKyAgICBhdmFoaV9zZXJ2aWNlX25hbWVfc3BsaXQodCwgTlVMTCwgMCwgdHlwZSwgc2l6ZW9mKHR5cGUpLCBkb21haW4sIHNpemVvZihkb21haW4pKTsKKyAgICBwcmludGYoIm5hbWU6IDw+OyB0eXBlOiA8JXM+OyBkb21haW4gPCVzPlxuIiwgdHlwZSwgZG9tYWluKTsKKworCisgICAgcCA9ICItLTotLS1cXFxcXFwxMjNcXDA2NV/k9vxcXDA2NFxcLlxcXFxzavb2ZGZoaC5zZGZqaHNramRmIjsKKyAgICBwcmludGYoInVuZXNjYXBlZDogPCVzPiwgcmVzdDogJXNcbiIsIGF2YWhpX3VuZXNjYXBlX2xhYmVsKCZwLCB0LCBzaXplb2YodCkpLCBwKTsKKworICAgIHNpemUgPSBzaXplb2Yocik7CisgICAgcyA9IHI7CisKKyAgICBwcmludGYoImVzY2FwZWQ6IDwlcz5cbiIsIGF2YWhpX2VzY2FwZV9sYWJlbCh0LCBzdHJsZW4odCksICZzLCAmc2l6ZSkpOworCisgICAgcCA9IHI7CisgICAgcHJpbnRmKCJ1bmVzY2FwZWQ6IDwlcz5cbiIsIGF2YWhpX3VuZXNjYXBlX2xhYmVsKCZwLCB0LCBzaXplb2YodCkpKTsKKworICAgIGFzc2VydChhdmFoaV9pc192YWxpZF9zZXJ2aWNlX3R5cGVfZ2VuZXJpYygiX2Zvby5fYmFyLl93YWxkbyIpKTsKKyAgICBhc3NlcnQoIWF2YWhpX2lzX3ZhbGlkX3NlcnZpY2VfdHlwZV9zdHJpY3QoIl9mb28uX2Jhci5fd2FsZG8iKSk7CisgICAgYXNzZXJ0KCFhdmFoaV9pc192YWxpZF9zZXJ2aWNlX3N1YnR5cGUoIl9mb28uX2Jhci5fd2FsZG8iKSk7CisKKyAgICBhc3NlcnQoYXZhaGlfaXNfdmFsaWRfc2VydmljZV90eXBlX2dlbmVyaWMoIl9mb28uX3RjcCIpKTsKKyAgICBhc3NlcnQoYXZhaGlfaXNfdmFsaWRfc2VydmljZV90eXBlX3N0cmljdCgiX2Zvby5fdGNwIikpOworICAgIGFzc2VydCghYXZhaGlfaXNfdmFsaWRfc2VydmljZV9zdWJ0eXBlKCJfZm9vLl90Y3AiKSk7CisKKyAgICBhc3NlcnQoIWF2YWhpX2lzX3ZhbGlkX3NlcnZpY2VfdHlwZV9nZW5lcmljKCJfZm9vLl9iYXIud2FsZG8iKSk7CisgICAgYXNzZXJ0KCFhdmFoaV9pc192YWxpZF9zZXJ2aWNlX3R5cGVfc3RyaWN0KCJfZm9vLl9iYXIud2FsZG8iKSk7CisgICAgYXNzZXJ0KCFhdmFoaV9pc192YWxpZF9zZXJ2aWNlX3N1YnR5cGUoIl9mb28uX2Jhci53YWxkbyIpKTsKKworICAgIGFzc2VydCghYXZhaGlfaXNfdmFsaWRfc2VydmljZV90eXBlX2dlbmVyaWMoIiIpKTsKKyAgICBhc3NlcnQoIWF2YWhpX2lzX3ZhbGlkX3NlcnZpY2VfdHlwZV9zdHJpY3QoIiIpKTsKKyAgICBhc3NlcnQoIWF2YWhpX2lzX3ZhbGlkX3NlcnZpY2Vfc3VidHlwZSgiIikpOworCisgICAgYXNzZXJ0KGF2YWhpX2lzX3ZhbGlkX3NlcnZpY2VfdHlwZV9nZW5lcmljKCJfZm9vLl9zdWIuX2Jhci5fdGNwIikpOworICAgIGFzc2VydCghYXZhaGlfaXNfdmFsaWRfc2VydmljZV90eXBlX3N0cmljdCgiX2Zvby5fc3ViLl9iYXIuX3RjcCIpKTsKKyAgICBhc3NlcnQoYXZhaGlfaXNfdmFsaWRfc2VydmljZV9zdWJ0eXBlKCJfZm9vLl9zdWIuX2Jhci5fdGNwIikpOworCisgICAgcHJpbnRmKCIlc1xuIiwgYXZhaGlfZ2V0X3R5cGVfZnJvbV9zdWJ0eXBlKCJfZm9vLl9zdWIuX2Jhci5fdGNwIikpOworCisgICAgYXNzZXJ0KCFhdmFoaV9pc192YWxpZF9ob3N0X25hbWUoInNmLm9vby4iKSk7CisgICAgYXNzZXJ0KGF2YWhpX2lzX3ZhbGlkX2hvc3RfbmFtZSgic2Zvb28uIikpOworICAgIGFzc2VydChhdmFoaV9pc192YWxpZF9ob3N0X25hbWUoInNmb29vIikpOworCisgICAgYXNzZXJ0KGF2YWhpX2lzX3ZhbGlkX2RvbWFpbl9uYW1lKCIuIikpOworICAgIGFzc2VydChhdmFoaV9pc192YWxpZF9kb21haW5fbmFtZSgiIikpOworCisgICAgYXNzZXJ0KGF2YWhpX25vcm1hbGl6ZV9uYW1lKCIuIiwgdCwgc2l6ZW9mKHQpKSk7CisgICAgYXNzZXJ0KGF2YWhpX25vcm1hbGl6ZV9uYW1lKCIiLCB0LCBzaXplb2YodCkpKTsKKworICAgIGFzc2VydCghYXZhaGlfaXNfdmFsaWRfZnFkbigiLiIpKTsKKyAgICBhc3NlcnQoIWF2YWhpX2lzX3ZhbGlkX2ZxZG4oIiIpKTsKKyAgICBhc3NlcnQoIWF2YWhpX2lzX3ZhbGlkX2ZxZG4oImZvbyIpKTsKKyAgICBhc3NlcnQoYXZhaGlfaXNfdmFsaWRfZnFkbigiZm9vLmJhciIpKTsKKyAgICBhc3NlcnQoYXZhaGlfaXNfdmFsaWRfZnFkbigiZm9vLmJhci4iKSk7CisgICAgYXNzZXJ0KGF2YWhpX2lzX3ZhbGlkX2ZxZG4oImdudXJ6LmZvby5iYXIuIikpOworICAgIGFzc2VydCghYXZhaGlfaXNfdmFsaWRfZnFkbigiMTkyLjE2OC41MC4xIikpOworICAgIGFzc2VydCghYXZhaGlfaXNfdmFsaWRfZnFkbigiOjoxIikpOworICAgIGFzc2VydCghYXZhaGlfaXNfdmFsaWRfZnFkbigiLjE5Mi4xNjguNTAuMS4iKSk7CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21tb24vZG9tYWluLmMgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tbW9uL2RvbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMWFiNjgKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tbW9uL2RvbWFpbi5jCkBAIC0wLDAgKzEsNjA5IEBACisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKyNpbmNsdWRlICJkb21haW4uaCIKKyNpbmNsdWRlICJtYWxsb2MuaCIKKyNpbmNsdWRlICJlcnJvci5oIgorI2luY2x1ZGUgImFkZHJlc3MuaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisKKy8qIFJlYWQgdGhlIGZpcnN0IGxhYmVsIGZyb20gc3RyaW5nICpuYW1lLCB1bmVzY2FwZSAiXCIgYW5kIHdyaXRlIGl0IHRvIGRlc3QgKi8KK2NoYXIgKmF2YWhpX3VuZXNjYXBlX2xhYmVsKGNvbnN0IGNoYXIgKipuYW1lLCBjaGFyICpkZXN0LCBzaXplX3Qgc2l6ZSkgeworICAgIHVuc2lnbmVkIGkgPSAwOworICAgIGNoYXIgKmQ7CisKKyAgICBhc3NlcnQoZGVzdCk7CisgICAgYXNzZXJ0KHNpemUgPiAwKTsKKyAgICBhc3NlcnQobmFtZSk7CisKKyAgICBkID0gZGVzdDsKKworICAgIGZvciAoOzspIHsKKyAgICAgICAgaWYgKGkgPj0gc2l6ZSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworCisgICAgICAgIGlmICgqKm5hbWUgPT0gJy4nKSB7CisgICAgICAgICAgICAoKm5hbWUpKys7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgqKm5hbWUgPT0gMCkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmICgqKm5hbWUgPT0gJ1xcJykgeworICAgICAgICAgICAgLyogRXNjYXBlZCBjaGFyYWN0ZXIgKi8KKworICAgICAgICAgICAgKCpuYW1lKSArKzsKKworICAgICAgICAgICAgaWYgKCoqbmFtZSA9PSAwKQorICAgICAgICAgICAgICAgIC8qIEVuZGluZyBOVUwgKi8KKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKworICAgICAgICAgICAgZWxzZSBpZiAoKipuYW1lID09ICdcXCcgfHwgKipuYW1lID09ICcuJykgeworICAgICAgICAgICAgICAgIC8qIEVzY2FwZWQgYmFja3NsYXNoIG9yIGRvdCAqLworICAgICAgICAgICAgICAgICooZCsrKSA9ICooKCpuYW1lKSArKyk7CisgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgfSBlbHNlIGlmIChpc2RpZ2l0KCoqbmFtZSkpIHsKKyAgICAgICAgICAgICAgICBpbnQgbjsKKworICAgICAgICAgICAgICAgIC8qIEVzY2FwZWQgbGl0ZXJhbCBBU0NJSSBjaGFyYWN0ZXIgKi8KKworICAgICAgICAgICAgICAgIGlmICghaXNkaWdpdCgqKCpuYW1lKzEpKSB8fCAhaXNkaWdpdCgqKCpuYW1lKzIpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAgICAgICAgICAgICBuID0gKCh1aW50OF90KSAoKipuYW1lIC0gJzAnKSAqIDEwMCkgKyAoKHVpbnQ4X3QpICgqKCpuYW1lKzEpIC0gJzAnKSAqIDEwKSArICgodWludDhfdCkgKCooKm5hbWUgKzIpIC0gJzAnKSk7CisKKyAgICAgICAgICAgICAgICBpZiAobiA+IDI1NSB8fCBuID09IDApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworCisgICAgICAgICAgICAgICAgKihkKyspID0gKGNoYXIpIG47CisgICAgICAgICAgICAgICAgaSsrOworCisgICAgICAgICAgICAgICAgKCpuYW1lKSArPSAzOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAgICAgfSBlbHNlIHsKKworICAgICAgICAgICAgLyogTm9ybWFsIGNoYXJhY3RlciAqLworCisgICAgICAgICAgICAqKGQrKykgPSAqKCgqbmFtZSkgKyspOworICAgICAgICAgICAgaSsrOworICAgICAgICB9CisgICAgfQorCisgICAgYXNzZXJ0KGkgPCBzaXplKTsKKworICAgICpkID0gMDsKKworICAgIGlmICghYXZhaGlfdXRmOF92YWxpZChkZXN0KSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gZGVzdDsKK30KKworLyogRXNjYXBlICJcIiBhbmQgIi4iLCBhcHBlbmQgXDAgKi8KK2NoYXIgKmF2YWhpX2VzY2FwZV9sYWJlbChjb25zdCBjaGFyKiBzcmMsIHNpemVfdCBzcmNfbGVuZ3RoLCBjaGFyICoqcmV0X25hbWUsIHNpemVfdCAqcmV0X3NpemUpIHsKKyAgICBjaGFyICpyOworCisgICAgYXNzZXJ0KHNyYyk7CisgICAgYXNzZXJ0KHJldF9uYW1lKTsKKyAgICBhc3NlcnQoKnJldF9uYW1lKTsKKyAgICBhc3NlcnQocmV0X3NpemUpOworICAgIGFzc2VydCgqcmV0X3NpemUgPiAwKTsKKworICAgIHIgPSAqcmV0X25hbWU7CisKKyAgICB3aGlsZSAoc3JjX2xlbmd0aCA+IDApIHsKKyAgICAgICAgaWYgKCpzcmMgPT0gJy4nIHx8ICpzcmMgPT0gJ1xcJykgeworCisgICAgICAgICAgICAvKiBEb3Qgb3IgYmFja3NsYXNoICovCisKKyAgICAgICAgICAgIGlmICgqcmV0X3NpemUgPCAzKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworCisgICAgICAgICAgICAqKCgqcmV0X25hbWUpICsrKSA9ICdcXCc7CisgICAgICAgICAgICAqKCgqcmV0X25hbWUpICsrKSA9ICpzcmM7CisgICAgICAgICAgICAoKnJldF9zaXplKSAtPSAyOworCisgICAgICAgIH0gZWxzZSBpZiAoCisgICAgICAgICAgICAqc3JjID09ICdfJyB8fAorICAgICAgICAgICAgKnNyYyA9PSAnLScgfHwKKyAgICAgICAgICAgICgqc3JjID49ICcwJyAmJiAqc3JjIDw9ICc5JykgfHwKKyAgICAgICAgICAgICgqc3JjID49ICdhJyAmJiAqc3JjIDw9ICd6JykgfHwKKyAgICAgICAgICAgICgqc3JjID49ICdBJyAmJiAqc3JjIDw9ICdaJykpIHsKKworICAgICAgICAgICAgLyogUHJvcGVyIGNoYXJhY3RlciAqLworCisgICAgICAgICAgICBpZiAoKnJldF9zaXplIDwgMikKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKworICAgICAgICAgICAgKigoKnJldF9uYW1lKSsrKSA9ICpzcmM7CisgICAgICAgICAgICAoKnJldF9zaXplKSAtLTsKKworICAgICAgICB9IGVsc2UgeworCisgICAgICAgICAgICAvKiBFdmVyeXRoaW5nIGVsc2UgKi8KKworICAgICAgICAgICAgaWYgKCpyZXRfc2l6ZSA8IDUpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAgICAgICAgICooKCpyZXRfbmFtZSkgKyspID0gJ1xcJzsKKyAgICAgICAgICAgICooKCpyZXRfbmFtZSkgKyspID0gJzAnICsgKGNoYXIpICAoKHVpbnQ4X3QpICpzcmMgLyAxMDApOworICAgICAgICAgICAgKigoKnJldF9uYW1lKSArKykgPSAnMCcgKyAoY2hhcikgKCgodWludDhfdCkgKnNyYyAvIDEwKSAlIDEwKTsKKyAgICAgICAgICAgICooKCpyZXRfbmFtZSkgKyspID0gJzAnICsgKGNoYXIpICAoKHVpbnQ4X3QpICpzcmMgJSAxMCk7CisKKyAgICAgICAgICAgICgqcmV0X3NpemUpIC09IDQ7CisgICAgICAgIH0KKworICAgICAgICBzcmNfbGVuZ3RoIC0tOworICAgICAgICBzcmMrKzsKKyAgICB9CisKKyAgICAqKnJldF9uYW1lID0gMDsKKworICAgIHJldHVybiByOworfQorCitjaGFyICphdmFoaV9ub3JtYWxpemVfbmFtZShjb25zdCBjaGFyICpzLCBjaGFyICpyZXRfcywgc2l6ZV90IHNpemUpIHsKKyAgICBpbnQgZW1wdHkgPSAxOworICAgIGNoYXIgKnI7CisKKyAgICBhc3NlcnQocyk7CisgICAgYXNzZXJ0KHJldF9zKTsKKyAgICBhc3NlcnQoc2l6ZSA+IDApOworCisgICAgciA9IHJldF9zOworICAgICpyZXRfcyA9IDA7CisKKyAgICB3aGlsZSAoKnMpIHsKKyAgICAgICAgY2hhciBsYWJlbFtBVkFISV9MQUJFTF9NQVhdOworCisgICAgICAgIGlmICghKGF2YWhpX3VuZXNjYXBlX2xhYmVsKCZzLCBsYWJlbCwgc2l6ZW9mKGxhYmVsKSkpKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAgICAgaWYgKGxhYmVsWzBdID09IDApIHsKKworICAgICAgICAgICAgaWYgKCpzID09IDAgJiYgZW1wdHkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldF9zOworCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghZW1wdHkpIHsKKyAgICAgICAgICAgIGlmIChzaXplIDwgMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKworICAgICAgICAgICAgKihyKyspID0gJy4nOworICAgICAgICAgICAgc2l6ZS0tOworCisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZW1wdHkgPSAwOworCisgICAgICAgIGF2YWhpX2VzY2FwZV9sYWJlbChsYWJlbCwgc3RybGVuKGxhYmVsKSwgJnIsICZzaXplKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0X3M7Cit9CisKK2NoYXIgKmF2YWhpX25vcm1hbGl6ZV9uYW1lX3N0cmR1cChjb25zdCBjaGFyICpzKSB7CisgICAgY2hhciB0W0FWQUhJX0RPTUFJTl9OQU1FX01BWF07CisgICAgYXNzZXJ0KHMpOworCisgICAgaWYgKCEoYXZhaGlfbm9ybWFsaXplX25hbWUocywgdCwgc2l6ZW9mKHQpKSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmV0dXJuIGF2YWhpX3N0cmR1cCh0KTsKK30KKworaW50IGF2YWhpX2RvbWFpbl9lcXVhbChjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiKSB7CisgICAgYXNzZXJ0KGEpOworICAgIGFzc2VydChiKTsKKworICAgIGlmIChhID09IGIpCisgICAgICAgIHJldHVybiAxOworCisgICAgZm9yICg7OykgeworICAgICAgICBjaGFyIGNhW0FWQUhJX0xBQkVMX01BWF0sIGNiW0FWQUhJX0xBQkVMX01BWF0sICpyOworCisgICAgICAgIHIgPSBhdmFoaV91bmVzY2FwZV9sYWJlbCgmYSwgY2EsIHNpemVvZihjYSkpOworICAgICAgICBhc3NlcnQocik7CisgICAgICAgIHIgPSBhdmFoaV91bmVzY2FwZV9sYWJlbCgmYiwgY2IsIHNpemVvZihjYikpOworICAgICAgICBhc3NlcnQocik7CisKKyAgICAgICAgaWYgKHN0cmNhc2VjbXAoY2EsIGNiKSkKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIGlmICghKmEgJiYgISpiKQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgcmV0dXJuIDE7Cit9CisKK2ludCBhdmFoaV9pc192YWxpZF9zZXJ2aWNlX3R5cGVfZ2VuZXJpYyhjb25zdCBjaGFyICp0KSB7CisgICAgYXNzZXJ0KHQpOworCisgICAgaWYgKHN0cmxlbih0KSA+PSBBVkFISV9ET01BSU5fTkFNRV9NQVggfHwgISp0KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGRvIHsKKyAgICAgICAgY2hhciBsYWJlbFtBVkFISV9MQUJFTF9NQVhdOworCisgICAgICAgIGlmICghKGF2YWhpX3VuZXNjYXBlX2xhYmVsKCZ0LCBsYWJlbCwgc2l6ZW9mKGxhYmVsKSkpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgaWYgKHN0cmxlbihsYWJlbCkgPD0gMiB8fCBsYWJlbFswXSAhPSAnXycpCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgIH0gd2hpbGUgKCp0KTsKKworICAgIHJldHVybiAxOworfQorCitpbnQgYXZhaGlfaXNfdmFsaWRfc2VydmljZV90eXBlX3N0cmljdChjb25zdCBjaGFyICp0KSB7CisgICAgY2hhciBsYWJlbFtBVkFISV9MQUJFTF9NQVhdOworICAgIGFzc2VydCh0KTsKKworICAgIGlmIChzdHJsZW4odCkgPj0gQVZBSElfRE9NQUlOX05BTUVfTUFYIHx8ICEqdCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvKiBBcHBsaWNhdGlvbiBuYW1lICovCisKKyAgICBpZiAoIShhdmFoaV91bmVzY2FwZV9sYWJlbCgmdCwgbGFiZWwsIHNpemVvZihsYWJlbCkpKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoc3RybGVuKGxhYmVsKSA8PSAyIHx8IGxhYmVsWzBdICE9ICdfJykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoISp0KQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8qIF90Y3Agb3IgX3VkcCBib2lsZXJwbGF0ZSAqLworCisgICAgaWYgKCEoYXZhaGlfdW5lc2NhcGVfbGFiZWwoJnQsIGxhYmVsLCBzaXplb2YobGFiZWwpKSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKHN0cmNhc2VjbXAobGFiZWwsICJfdGNwIikgJiYgc3RyY2FzZWNtcChsYWJlbCwgIl91ZHAiKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoKnQpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIDE7Cit9CisKK2NvbnN0IGNoYXIgKmF2YWhpX2dldF90eXBlX2Zyb21fc3VidHlwZShjb25zdCBjaGFyICp0KSB7CisgICAgY2hhciBsYWJlbFtBVkFISV9MQUJFTF9NQVhdOworICAgIGNvbnN0IGNoYXIgKnJldDsKKyAgICBhc3NlcnQodCk7CisKKyAgICBpZiAoc3RybGVuKHQpID49IEFWQUhJX0RPTUFJTl9OQU1FX01BWCB8fCAhKnQpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgLyogU3VidHlwZSBuYW1lICovCisKKyAgICBpZiAoIShhdmFoaV91bmVzY2FwZV9sYWJlbCgmdCwgbGFiZWwsIHNpemVvZihsYWJlbCkpKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoc3RybGVuKGxhYmVsKSA8PSAyIHx8IGxhYmVsWzBdICE9ICdfJykKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoISp0KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIC8qIFN0cmluZyAiX3N1YiIgKi8KKworICAgIGlmICghKGF2YWhpX3VuZXNjYXBlX2xhYmVsKCZ0LCBsYWJlbCwgc2l6ZW9mKGxhYmVsKSkpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChzdHJjYXNlY21wKGxhYmVsLCAiX3N1YiIpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmICghKnQpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmV0ID0gdDsKKworICAgIC8qIEFwcGxpY2F0aW9uIG5hbWUgKi8KKworICAgIGlmICghKGF2YWhpX3VuZXNjYXBlX2xhYmVsKCZ0LCBsYWJlbCwgc2l6ZW9mKGxhYmVsKSkpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChzdHJsZW4obGFiZWwpIDw9IDIgfHwgbGFiZWxbMF0gIT0gJ18nKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmICghKnQpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgLyogX3RjcCBvciBfdWRwIGJvaWxlcnBsYXRlICovCisKKyAgICBpZiAoIShhdmFoaV91bmVzY2FwZV9sYWJlbCgmdCwgbGFiZWwsIHNpemVvZihsYWJlbCkpKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoc3RyY2FzZWNtcChsYWJlbCwgIl90Y3AiKSAmJiBzdHJjYXNlY21wKGxhYmVsLCAiX3VkcCIpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmICgqdCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gcmV0OworfQorCitpbnQgYXZhaGlfaXNfdmFsaWRfc2VydmljZV9zdWJ0eXBlKGNvbnN0IGNoYXIgKnQpIHsKKyAgICBhc3NlcnQodCk7CisKKyAgICByZXR1cm4gISFhdmFoaV9nZXRfdHlwZV9mcm9tX3N1YnR5cGUodCk7Cit9CisKK2ludCBhdmFoaV9pc192YWxpZF9kb21haW5fbmFtZShjb25zdCBjaGFyICp0KSB7CisgICAgaW50IGlzX2ZpcnN0ID0gMTsKKyAgICBhc3NlcnQodCk7CisKKyAgICBpZiAoc3RybGVuKHQpID49IEFWQUhJX0RPTUFJTl9OQU1FX01BWCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBkbyB7CisgICAgICAgIGNoYXIgbGFiZWxbQVZBSElfTEFCRUxfTUFYXTsKKworICAgICAgICBpZiAoIShhdmFoaV91bmVzY2FwZV9sYWJlbCgmdCwgbGFiZWwsIHNpemVvZihsYWJlbCkpKSkKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIC8qIEV4cGxpY2l0bHkgYWxsb3cgdGhlIHJvb3QgZG9tYWluIG5hbWUgKi8KKyAgICAgICAgaWYgKGlzX2ZpcnN0ICYmIGxhYmVsWzBdID09IDAgJiYgKnQgPT0gMCkKKyAgICAgICAgICAgIHJldHVybiAxOworCisgICAgICAgIGlzX2ZpcnN0ID0gMDsKKworICAgICAgICBpZiAobGFiZWxbMF0gPT0gMCkKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgfSB3aGlsZSAoKnQpOworCisgICAgcmV0dXJuIDE7Cit9CisKK2ludCBhdmFoaV9pc192YWxpZF9zZXJ2aWNlX25hbWUoY29uc3QgY2hhciAqdCkgeworICAgIGFzc2VydCh0KTsKKworICAgIGlmIChzdHJsZW4odCkgPj0gQVZBSElfTEFCRUxfTUFYIHx8ICEqdCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gMTsKK30KKworaW50IGF2YWhpX2lzX3ZhbGlkX2hvc3RfbmFtZShjb25zdCBjaGFyICp0KSB7CisgICAgY2hhciBsYWJlbFtBVkFISV9MQUJFTF9NQVhdOworICAgIGFzc2VydCh0KTsKKworICAgIGlmIChzdHJsZW4odCkgPj0gQVZBSElfRE9NQUlOX05BTUVfTUFYIHx8ICEqdCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIShhdmFoaV91bmVzY2FwZV9sYWJlbCgmdCwgbGFiZWwsIHNpemVvZihsYWJlbCkpKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoc3RybGVuKGxhYmVsKSA8IDEpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKCp0KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiAxOworfQorCit1bnNpZ25lZCBhdmFoaV9kb21haW5faGFzaChjb25zdCBjaGFyICpzKSB7CisgICAgdW5zaWduZWQgaGFzaCA9IDA7CisKKyAgICB3aGlsZSAoKnMpIHsKKyAgICAgICAgY2hhciBjW0FWQUhJX0xBQkVMX01BWF0sICpwLCAqcjsKKworICAgICAgICByID0gYXZhaGlfdW5lc2NhcGVfbGFiZWwoJnMsIGMsIHNpemVvZihjKSk7CisgICAgICAgIGFzc2VydChyKTsKKworICAgICAgICBmb3IgKHAgPSBjOyAqcDsgcCsrKQorICAgICAgICAgICAgaGFzaCA9IDMxICogaGFzaCArIHRvbG93ZXIoKnApOworICAgIH0KKworICAgIHJldHVybiBoYXNoOworfQorCitpbnQgYXZhaGlfc2VydmljZV9uYW1lX2pvaW4oY2hhciAqcCwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnR5cGUsIGNvbnN0IGNoYXIgKmRvbWFpbikgeworICAgIGNoYXIgZXNjYXBlZF9uYW1lW0FWQUhJX0xBQkVMX01BWCo0XTsKKyAgICBjaGFyIG5vcm1hbGl6ZWRfdHlwZVtBVkFISV9ET01BSU5fTkFNRV9NQVhdOworICAgIGNoYXIgbm9ybWFsaXplZF9kb21haW5bQVZBSElfRE9NQUlOX05BTUVfTUFYXTsKKworICAgIGFzc2VydChwKTsKKworICAgIC8qIFZhbGlkaXR5IGNoZWNrcyAqLworCisgICAgaWYgKChuYW1lICYmICFhdmFoaV9pc192YWxpZF9zZXJ2aWNlX25hbWUobmFtZSkpKQorICAgICAgICByZXR1cm4gQVZBSElfRVJSX0lOVkFMSURfU0VSVklDRV9OQU1FOworCisgICAgaWYgKCFhdmFoaV9pc192YWxpZF9zZXJ2aWNlX3R5cGVfZ2VuZXJpYyh0eXBlKSkKKyAgICAgICAgcmV0dXJuIEFWQUhJX0VSUl9JTlZBTElEX1NFUlZJQ0VfVFlQRTsKKworICAgIGlmICghYXZhaGlfaXNfdmFsaWRfZG9tYWluX25hbWUoZG9tYWluKSkKKyAgICAgICAgcmV0dXJuIEFWQUhJX0VSUl9JTlZBTElEX0RPTUFJTl9OQU1FOworCisgICAgLyogUHJlcGFyYXRpb24gKi8KKworICAgIGlmIChuYW1lKSB7CisgICAgICAgIHNpemVfdCBsID0gc2l6ZW9mKGVzY2FwZWRfbmFtZSk7CisgICAgICAgIGNoYXIgKmUgPSBlc2NhcGVkX25hbWUsICpyOworICAgICAgICByID0gYXZhaGlfZXNjYXBlX2xhYmVsKG5hbWUsIHN0cmxlbihuYW1lKSwgJmUsICZsKTsKKyAgICAgICAgYXNzZXJ0KHIpOworICAgIH0KKworICAgIGlmICghKGF2YWhpX25vcm1hbGl6ZV9uYW1lKHR5cGUsIG5vcm1hbGl6ZWRfdHlwZSwgc2l6ZW9mKG5vcm1hbGl6ZWRfdHlwZSkpKSkKKyAgICAgICAgcmV0dXJuIEFWQUhJX0VSUl9JTlZBTElEX1NFUlZJQ0VfVFlQRTsKKworICAgIGlmICghKGF2YWhpX25vcm1hbGl6ZV9uYW1lKGRvbWFpbiwgbm9ybWFsaXplZF9kb21haW4sIHNpemVvZihub3JtYWxpemVkX2RvbWFpbikpKSkKKyAgICAgICAgcmV0dXJuIEFWQUhJX0VSUl9JTlZBTElEX0RPTUFJTl9OQU1FOworCisgICAgLyogQ29uY2F0ZW5hdGlvbiAqLworCisgICAgc25wcmludGYocCwgc2l6ZSwgIiVzJXMlcy4lcyIsIG5hbWUgPyBlc2NhcGVkX25hbWUgOiAiIiwgbmFtZSA/ICIuIiA6ICIiLCBub3JtYWxpemVkX3R5cGUsIG5vcm1hbGl6ZWRfZG9tYWluKTsKKworICAgIHJldHVybiBBVkFISV9PSzsKK30KKworI2lmbmRlZiBIQVZFX1NUUkxDUFkKKworc3RhdGljIHNpemVfdCBzdHJsY3B5KGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IG4pIHsKKyAgICBhc3NlcnQoZGVzdCk7CisgICAgYXNzZXJ0KHNyYyk7CisKKyAgICBpZiAobiA+IDApIHsKKyAgICAgICAgc3RybmNweShkZXN0LCBzcmMsIG4tMSk7CisgICAgICAgIGRlc3Rbbi0xXSA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0cmxlbihzcmMpOworfQorCisjZW5kaWYKKworaW50IGF2YWhpX3NlcnZpY2VfbmFtZV9zcGxpdChjb25zdCBjaGFyICpwLCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZV9zaXplLCBjaGFyICp0eXBlLCBzaXplX3QgdHlwZV9zaXplLCBjaGFyICpkb21haW4sIHNpemVfdCBkb21haW5fc2l6ZSkgeworICAgIGVudW0geworICAgICAgICBOQU1FLAorICAgICAgICBUWVBFLAorICAgICAgICBET01BSU4KKyAgICB9IHN0YXRlOworICAgIGludCB0eXBlX2VtcHR5ID0gMSwgZG9tYWluX2VtcHR5ID0gMTsKKworICAgIGFzc2VydChwKTsKKyAgICBhc3NlcnQodHlwZSk7CisgICAgYXNzZXJ0KHR5cGVfc2l6ZSA+IDApOworICAgIGFzc2VydChkb21haW4pOworICAgIGFzc2VydChkb21haW5fc2l6ZSA+IDApOworCisgICAgaWYgKG5hbWUpIHsKKyAgICAgICAgYXNzZXJ0KG5hbWVfc2l6ZSA+IDApOworICAgICAgICAqbmFtZSA9IDA7CisgICAgICAgIHN0YXRlID0gTkFNRTsKKyAgICB9IGVsc2UKKyAgICAgICAgc3RhdGUgPSBUWVBFOworCisgICAgKnR5cGUgPSAqZG9tYWluID0gMDsKKworICAgIHdoaWxlICgqcCkgeworICAgICAgICBjaGFyIGJ1Zls2NF07CisKKyAgICAgICAgaWYgKCEoYXZhaGlfdW5lc2NhcGVfbGFiZWwoJnAsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKworICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgICAgICAgICBjYXNlIE5BTUU6CisgICAgICAgICAgICAgICAgc3RybGNweShuYW1lLCBidWYsIG5hbWVfc2l6ZSk7CisgICAgICAgICAgICAgICAgc3RhdGUgPSBUWVBFOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFRZUEU6CisKKyAgICAgICAgICAgICAgICBpZiAoYnVmWzBdID09ICdfJykgeworCisgICAgICAgICAgICAgICAgICAgIGlmICghdHlwZV9lbXB0eSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0eXBlX3NpemUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFWQUhJX0VSUl9OT19NRU1PUlk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICoodHlwZSsrKSA9ICcuJzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVfc2l6ZSAtLTsKKworICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVfZW1wdHkgPSAwOworCisgICAgICAgICAgICAgICAgICAgIGlmICghKGF2YWhpX2VzY2FwZV9sYWJlbChidWYsIHN0cmxlbihidWYpLCAmdHlwZSwgJnR5cGVfc2l6ZSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFWQUhJX0VSUl9OT19NRU1PUlk7CisKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgc3RhdGUgPSBET01BSU47CisgICAgICAgICAgICAgICAgLyogZmFsbCB0aHJvdWdoICovCisKKyAgICAgICAgICAgIGNhc2UgRE9NQUlOOgorCisgICAgICAgICAgICAgICAgaWYgKCFkb21haW5fZW1wdHkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFkb21haW5fc2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBVkFISV9FUlJfTk9fTUVNT1JZOworCisgICAgICAgICAgICAgICAgICAgICooZG9tYWluKyspID0gJy4nOworICAgICAgICAgICAgICAgICAgICBkb21haW5fc2l6ZSAtLTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZG9tYWluX2VtcHR5ID0gMDsKKworICAgICAgICAgICAgICAgIGlmICghKGF2YWhpX2VzY2FwZV9sYWJlbChidWYsIHN0cmxlbihidWYpLCAmZG9tYWluLCAmZG9tYWluX3NpemUpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFWQUhJX0VSUl9OT19NRU1PUlk7CisKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQorCitpbnQgYXZhaGlfaXNfdmFsaWRfZnFkbihjb25zdCBjaGFyICp0KSB7CisgICAgY2hhciBsYWJlbFtBVkFISV9MQUJFTF9NQVhdOworICAgIGNoYXIgbm9ybWFsaXplZFtBVkFISV9ET01BSU5fTkFNRV9NQVhdOworICAgIGNvbnN0IGNoYXIgKmsgPSB0OworICAgIEF2YWhpQWRkcmVzcyBhOworICAgIGFzc2VydCh0KTsKKworICAgIGlmIChzdHJsZW4odCkgPj0gQVZBSElfRE9NQUlOX05BTUVfTUFYKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmICghYXZhaGlfaXNfdmFsaWRfZG9tYWluX25hbWUodCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgLyogQ2hlY2sgaWYgdGhlcmUgYXJlIGF0IGxlYXN0IHR3byBsYWJlbHMqLworICAgIGlmICghKGF2YWhpX3VuZXNjYXBlX2xhYmVsKCZrLCBsYWJlbCwgc2l6ZW9mKGxhYmVsKSkpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChsYWJlbFswXSA9PSAwIHx8ICFrKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmICghKGF2YWhpX3VuZXNjYXBlX2xhYmVsKCZrLCBsYWJlbCwgc2l6ZW9mKGxhYmVsKSkpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChsYWJlbFswXSA9PSAwIHx8ICFrKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8qIE1ha2Ugc3VyZSB0aGF0IHRoZSBuYW1lIGlzIG5vdCBhbiBJUCBhZGRyZXNzICovCisgICAgaWYgKCEoYXZhaGlfbm9ybWFsaXplX25hbWUodCwgbm9ybWFsaXplZCwgc2l6ZW9mKG5vcm1hbGl6ZWQpKSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGF2YWhpX2FkZHJlc3NfcGFyc2Uobm9ybWFsaXplZCwgQVZBSElfUFJPVE9fVU5TUEVDLCAmYSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIDE7Cit9CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktY29tbW9uL2RvbWFpbi5oIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbW1vbi9kb21haW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGRjZDBmCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbW1vbi9kb21haW4uaApAQCAtMCwwICsxLDEyOSBAQAorI2lmbmRlZiBmb29kb21haW5oZm9vCisjZGVmaW5lIGZvb2RvbWFpbmhmb28KKworLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisvKiogXGZpbGUgZG9tYWluLmggRG9tYWluIG5hbWUgaGFuZGxpbmcgZnVuY3Rpb25zICovCisKKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2NkZWNsLmg+CisKK0FWQUhJX0NfREVDTF9CRUdJTgorCisvKiogVGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgYSBmdWxseSBlc2NhcGVkIGRvbWFpbiBuYW1lIEMgc3RyaW5nLiBUaGlzCisgKiBpcyBjYWxjdWxhdGVkIGxpa2UgdGhpczogUkZDMTAzNCBtYW5kYXRlcyBtYXhpbXVtIGxlbmd0aCBvZiBGUUROcworICogaXMgMjU1LiBUaGUgbWF4aW11bSBsYWJlbCBsZW5ndGggaXMgNjMuIFRvIG1pbmltaXplIHRoZSBudW1iZXIgb2YKKyAqIChub24tZXNjYXBlZCkgZG90cywgd2UgY29tcHJpc2Ugb3VyIG1heGltdW0tbGVuZ3RoIGRvbWFpbiBuYW1lIG9mCisgKiBmb3VyIGxhYmVscyDhIDYzIGNoYXJhY3RlcnMgcGx1cyB0aHJlZSBpbm5lciBkb3RzLiBFc2NhcGluZyB0aGUKKyAqIGZvdXIgbGFiZWxzIHF1YWRydXBsZXMgdGhlaXIgbGVuZ3RoIGF0IG1heGltdW0uIEFuIGVzY2FwZWQgZG9tYWluCisgKiBuYW1lIGhhcyB0aGUgdGhlcmVmb3JlIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiA2Myo0KjQrMz0xMDExLiBBCisgKiB0cmFpbGluZyBOVUwgYW5kIHBlcmhhcHMgdHdvIHVubmVjZXNzYXJ5IGRvdHMgbGVhZGluZyBhbmQgdHJhaWxpbmcKKyAqIHRoZSBzdHJpbmcgYnJpbmdzIHVzIHRvIDEwMTQuICovCisjZGVmaW5lIEFWQUhJX0RPTUFJTl9OQU1FX01BWCAxMDE0CisKKy8qKiBNYXhpbXVtIHNpemUgb2YgYW4gdW5lc2NhcGVkIGxhYmVsICovCisjZGVmaW5lIEFWQUhJX0xBQkVMX01BWCA2NAorCisvKiogQHsgXG5hbWUgTm9ybWFsaXphdGlvbiAqLworCisvKiogTm9ybWFsaXplIGEgZG9tYWluIG5hbWUgaW50byBjYW5vbmljYWwgZm9ybS4gVGhpcyBkcm9wcyB0cmFpbGluZworICogZG90cyBhbmQgcmVtb3ZlcyB1c2VsZXNzIGJhY2tzbGFzaCBlc2NhcGVzLiAqLworY2hhciAqYXZhaGlfbm9ybWFsaXplX25hbWUoY29uc3QgY2hhciAqcywgY2hhciAqcmV0X3MsIHNpemVfdCBzaXplKTsKKworLyoqIE5vcm1hbGl6ZSBhIGRvbWFpbiBuYW1lIGludG8gY2Fub25pY2FsIGZvcm0uIFRoaXMgZHJvcHMgdHJhaWxpbmcKKyAqIGRvdHMgYW5kIHJlbW92ZXMgdXNlbGVzcyBiYWNrc2xhc2ggZXNjYXBlcy4gYXZhaGlfZnJlZSgpIHRoZQorICogcmVzdWx0ISAqLworY2hhciAqYXZhaGlfbm9ybWFsaXplX25hbWVfc3RyZHVwKGNvbnN0IGNoYXIgKnMpOworCisvKiogQH0gKi8KKworLyoqIEB7IFxuYW1lIENvbXBhcmlzb24gKi8KKworLyoqIFJldHVybiAxIHdoZW4gdGhlIHNwZWNpZmllZCBkb21haW4gbmFtZXMgYXJlIGVxdWFsLCAwIG90aGVyd2lzZSAqLworaW50IGF2YWhpX2RvbWFpbl9lcXVhbChjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiKTsKKworLyoqIFJldHVybiBzb21lIGtpbmQgb2YgaGFzaCB2YWx1ZSBmb3IgdGhlIGRvbWFpbiwgdXNlZnVsIGZvciB1c2luZyBkb21haW5zIGFzIGhhc2ggdGFibGUga2V5cy4gKi8KK3Vuc2lnbmVkIGF2YWhpX2RvbWFpbl9oYXNoKGNvbnN0IGNoYXIgKm5hbWUpOworCisvKiogQH0gKi8KKworLyoqIEB7IFxuYW1lIEVzY2FwaW5nICovCisKKy8qKiBSZWFkIHRoZSBmaXJzdCBsYWJlbCBmcm9tIHRoZSB0ZXh0dWFsIGRvbWFpbiBuYW1lICpuYW1lLCB1bmVzY2FwZQorICogaXQgYW5kIHdyaXRlIGl0IHRvIGRlc3QsICpuYW1lIGlzIGNoYW5nZWQgdG8gcG9pbnQgdG8gdGhlIG5leHQgbGFiZWwqLworY2hhciAqYXZhaGlfdW5lc2NhcGVfbGFiZWwoY29uc3QgY2hhciAqKm5hbWUsIGNoYXIgKmRlc3QsIHNpemVfdCBzaXplKTsKKworLyoqIEVzY2FwZSB0aGUgZG9tYWluIG5hbWUgaW4gKnNyYyBhbmQgd3JpdGUgaXQgdG8gKnJldF9uYW1lICovCitjaGFyICphdmFoaV9lc2NhcGVfbGFiZWwoY29uc3QgY2hhciogc3JjLCBzaXplX3Qgc3JjX2xlbmd0aCwgY2hhciAqKnJldF9uYW1lLCBzaXplX3QgKnJldF9zaXplKTsKKworLyoqIEB9ICovCisKKy8qKiBAeyBcbmFtZSBWYWxpZGl0eSBDaGVja3MgKi8KKworLyoqIFJldHVybiAxIHdoZW4gdGhlIHNwZWNpZmllZCBzdHJpbmcgY29udGFpbnMgYSB2YWxpZCBnZW5lcmljIEROUy1TRAorICogc2VydmljZSB0eXBlIChpLmUuIGEgc2VyaWVzIG9mIHdvcmRzIHN0YXJ0aW5nIHdpdGggIl8iKSwgMAorICogb3RoZXJ3aXNlICovCitpbnQgYXZhaGlfaXNfdmFsaWRfc2VydmljZV90eXBlX2dlbmVyaWMoY29uc3QgY2hhciAqdCk7CisKKy8qKiBSZXR1cm4gMSB3aGVuIHRoZSBzcGVjaWZpZWQgc3RyaW5nIGNvbnRhaW5zIGEgdmFsaWQgc3RyaWN0IEROUy1TRAorICogc2VydmljZSB0eXBlIChpLmUuIGNvbnNpc3Rpbmcgb2Ygb25seSB0d28gd29yZHMsIHRoZSBsYXR0ZXIgYmVpbmcKKyAqIGVpdGhlciBfdWRwIG9yIF90Y3ApLCAwIG90aGVyd2lzZSAqLworaW50IGF2YWhpX2lzX3ZhbGlkX3NlcnZpY2VfdHlwZV9zdHJpY3QoY29uc3QgY2hhciAqdCk7CisKKy8qKiBSZXR1cm4gMSB3aGVuIHRoZSBzcGVjaWZpZWQgc3RyaW5nIGNvbnRhaW5zIGEgdmFsaWQgRE5TLVNEIHNlcnZpY2UKKyAqIHN1YnR5cGUsIDAgb3RoZXJ3aXNlICovCitpbnQgYXZhaGlfaXNfdmFsaWRfc2VydmljZV9zdWJ0eXBlKGNvbnN0IGNoYXIgKnQpOworCisvKiogUmV0dXJuIDEgd2hlbiB0aGUgc3BlY2lmaWVkIHN0cmluZyBjb250YWlucyBhIHZhbGlkIGRvbWFpbiBuYW1lLCAwIG90aGVyd2lzZSAqLworaW50IGF2YWhpX2lzX3ZhbGlkX2RvbWFpbl9uYW1lKGNvbnN0IGNoYXIgKnQpOworCisvKiogUmV0dXJuIDEgd2hlbiB0aGUgc3BlY2lmaWVkIHN0cmluZyBjb250YWlucyBhIHZhbGlkIEROUy1TRCBzZXJ2aWNlIG5hbWUsIDAgb3RoZXJ3aXNlICovCitpbnQgYXZhaGlfaXNfdmFsaWRfc2VydmljZV9uYW1lKGNvbnN0IGNoYXIgKnQpOworCisvKiogUmV0dXJuIDEgd2hlbiB0aGUgc3BlY2lmaWVkIHN0cmluZyBjb250YWlucyBhIHZhbGlkIG5vbi1GUUROIGhvc3QgbmFtZSAoaS5lLiB3aXRob3V0IGRvdHMpLCAwIG90aGVyd2lzZSAqLworaW50IGF2YWhpX2lzX3ZhbGlkX2hvc3RfbmFtZShjb25zdCBjaGFyICp0KTsKKworLyoqIFJldHVybiAxIHdoZW4gdGhlIHNwZWNpZmllZCBzdHJpbmcgY29udGFpbnMgYSB2YWxpZCBGUUROIGhvc3QgbmFtZSAoaS5lLiB3aXRoIG1vcmUgdGhhbiBvbmUgbGFiZWwgYW5kIG5vbi1udW1lcmljYWwpLCAwIG90aGVyd2lzZS4gXHNpbmNlIDAuNi45ICovCitpbnQgYXZhaGlfaXNfdmFsaWRfZnFkbihjb25zdCBjaGFyICp0KTsKKworLyoqIEB9ICovCisKKy8qKiBAeyBcbmFtZSBETlMtU0Qgc2VydmljZSBuYW1lIGhhbmRsaW5nICovCisKKy8qKiBDb25zdHJ1Y3QgYSB2YWxpZCBjb21wbGV0ZSBETlMtU0Qgc2VydmljZSBuYW1lIGZyb20gYSBuYW1lLCBhIHR5cGUgYW5kIGEgZG9tYWluICovCitpbnQgYXZhaGlfc2VydmljZV9uYW1lX2pvaW4oY2hhciAqcCwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnR5cGUsIGNvbnN0IGNoYXIgKmRvbWFpbik7CisKKy8qKiBTcGxpdCBhIGZ1bGwgc2VydmljZSBuYW1lIGludG8gbmFtZSwgdHlwZSBhbmQgZG9tYWluICovCitpbnQgYXZhaGlfc2VydmljZV9uYW1lX3NwbGl0KGNvbnN0IGNoYXIgKnAsIGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX3NpemUsIGNoYXIgKnR5cGUsIHNpemVfdCB0eXBlX3NpemUsIGNoYXIgKmRvbWFpbiwgc2l6ZV90IGRvbWFpbl9zaXplKTsKKworLyoqIEB9ICovCisKKy8qKiBAeyBcbmFtZSBETlMtU0QgU3VidHlwZSBoYW5kbGluZyAqLworCisvKiogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgdHlwZSBzZWN0aW9uIG9mIGEgc3VidHlwZSBpLmUuIF9mb28uX3N1Yi5fYmFyLl90Y3AgPT4gX2Jhci5fdGNwICovCitjb25zdCBjaGFyICphdmFoaV9nZXRfdHlwZV9mcm9tX3N1YnR5cGUoY29uc3QgY2hhciAqdCk7CisKKy8qKiBAfSAqLworCitBVkFISV9DX0RFQ0xfRU5ECisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvbW1vbi9lcnJvci5jIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbW1vbi9lcnJvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwYjY2ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tbW9uL2Vycm9yLmMKQEAgLTAsMCArMSw5NyBAQAorLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorICoqKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiZXJyb3IuaCIKKyNpbmNsdWRlICJpMThuLmgiCisKK2NvbnN0IGNoYXIgKmF2YWhpX3N0cmVycm9yKGludCBlcnJvcikgeworCisgICAgY29uc3QgY2hhciAqIGNvbnN0IG1zZ1stIEFWQUhJX0VSUl9NQVhdID0geworICAgICAgICBOXygiT0siKSwKKyAgICAgICAgTl8oIk9wZXJhdGlvbiBmYWlsZWQiKSwKKyAgICAgICAgTl8oIkJhZCBzdGF0ZSIpLAorICAgICAgICBOXygiSW52YWxpZCBob3N0IG5hbWUiKSwKKyAgICAgICAgTl8oIkludmFsaWQgZG9tYWluIG5hbWUiKSwKKyAgICAgICAgTl8oIk5vIHN1aXRhYmxlIG5ldHdvcmsgcHJvdG9jb2wgYXZhaWxhYmxlIiksCisgICAgICAgIE5fKCJJbnZhbGlkIEROUyBUVEwiKSwKKyAgICAgICAgTl8oIlJlc291cmNlIHJlY29yZCBrZXkgaXMgcGF0dGVybiIpLAorICAgICAgICBOXygiTG9jYWwgbmFtZSBjb2xsaXNpb24iKSwKKyAgICAgICAgTl8oIkludmFsaWQgcmVjb3JkIiksCisKKyAgICAgICAgTl8oIkludmFsaWQgc2VydmljZSBuYW1lIiksCisgICAgICAgIE5fKCJJbnZhbGlkIHNlcnZpY2UgdHlwZSIpLAorICAgICAgICBOXygiSW52YWxpZCBwb3J0IG51bWJlciIpLAorICAgICAgICBOXygiSW52YWxpZCByZWNvcmQga2V5IiksCisgICAgICAgIE5fKCJJbnZhbGlkIGFkZHJlc3MiKSwKKyAgICAgICAgTl8oIlRpbWVvdXQgcmVhY2hlZCIpLAorICAgICAgICBOXygiVG9vIG1hbnkgY2xpZW50cyIpLAorICAgICAgICBOXygiVG9vIG1hbnkgb2JqZWN0cyIpLAorICAgICAgICBOXygiVG9vIG1hbnkgZW50cmllcyIpLAorICAgICAgICBOXygiT1MgRXJyb3IiKSwKKworICAgICAgICBOXygiQWNjZXNzIGRlbmllZCIpLAorICAgICAgICBOXygiSW52YWxpZCBvcGVyYXRpb24iKSwKKyAgICAgICAgTl8oIkFuIHVuZXhwZWN0ZWQgRC1CdXMgZXJyb3Igb2NjdXJlZCIpLAorICAgICAgICBOXygiRGFlbW9uIGNvbm5lY3Rpb24gZmFpbGVkIiksCisgICAgICAgIE5fKCJNZW1vcnkgZXhoYXVzdGVkIiksCisgICAgICAgIE5fKCJUaGUgb2JqZWN0IHBhc3NlZCBpbiB3YXMgbm90IHZhbGlkIiksCisgICAgICAgIE5fKCJEYWVtb24gbm90IHJ1bm5pbmciKSwKKyAgICAgICAgTl8oIkludmFsaWQgaW50ZXJmYWNlIGluZGV4IiksCisgICAgICAgIE5fKCJJbnZhbGlkIHByb3RvY29sIHNwZWNpZmljYXRpb24iKSwKKyAgICAgICAgTl8oIkludmFsaWQgZmxhZ3MiKSwKKworICAgICAgICBOXygiTm90IGZvdW5kIiksCisgICAgICAgIE5fKCJJbnZhbGlkIGNvbmZpZ3VyYXRpb24iKSwKKyAgICAgICAgTl8oIlZlcnNpb24gbWlzbWF0Y2giKSwKKyAgICAgICAgTl8oIkludmFsaWQgc2VydmljZSBzdWJ0eXBlIiksCisgICAgICAgIE5fKCJJbnZhbGlkIHBhY2tldCIpLAorICAgICAgICBOXygiSW52YWxpZCBETlMgcmV0dXJuIGNvZGUiKSwKKyAgICAgICAgTl8oIkROUyBmYWlsdXJlOiBGT1JNRVJSIiksCisgICAgICAgIE5fKCJETlMgZmFpbHVyZTogU0VSVkZBSUwiKSwKKyAgICAgICAgTl8oIkROUyBmYWlsdXJlOiBOWERPTUFJTiIpLAorICAgICAgICBOXygiRE5TIGZhaWx1cmU6IE5PVElNUCIpLAorCisgICAgICAgIE5fKCJETlMgZmFpbHVyZTogUkVGVVNFRCIpLAorICAgICAgICBOXygiRE5TIGZhaWx1cmU6IFlYRE9NQUlOIiksCisgICAgICAgIE5fKCJETlMgZmFpbHVyZTogWVhSUlNFVCIpLAorICAgICAgICBOXygiRE5TIGZhaWx1cmU6IE5YUlJTRVQiKSwKKyAgICAgICAgTl8oIkROUyBmYWlsdXJlOiBOT1RBVVRIIiksCisgICAgICAgIE5fKCJETlMgZmFpbHVyZTogTk9UWk9ORSIpLAorICAgICAgICBOXygiSW52YWxpZCBSREFUQSIpLAorICAgICAgICBOXygiSW52YWxpZCBETlMgdHlwZSIpLAorICAgICAgICBOXygiSW52YWxpZCBETlMgY2xhc3MiKSwKKyAgICAgICAgTl8oIk5vdCBzdXBwb3J0ZWQiKSwKKworICAgICAgICBOXygiTm90IHBlcm1pdHRlZCIpLAorICAgICAgICBOXygiSW52YWxpZCBhcmd1bWVudCIpLAorICAgICAgICBOXygiSXMgZW1wdHkiKSwKKyAgICAgICAgTl8oIlRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uIGlzIGludmFsaWQgYmVjYXVzZSByZWR1bmRhbnQiKQorICAgIH07CisKKyAgICBhdmFoaV9pbml0X2kxOG4oKTsKKworICAgIGlmICgtZXJyb3IgPCAwIHx8IC1lcnJvciA+PSAtQVZBSElfRVJSX01BWCkKKyAgICAgICAgcmV0dXJuIF8oIkludmFsaWQgRXJyb3IgQ29kZSIpOworCisgICAgcmV0dXJuIF8obXNnWy1lcnJvcl0pOworfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvbW1vbi9lcnJvci5oIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbW1vbi9lcnJvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5MmFhZjUKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tbW9uL2Vycm9yLmgKQEAgLTAsMCArMSwxMDcgQEAKKyNpZm5kZWYgZm9vZXJyb3JoZm9vCisjZGVmaW5lIGZvb2Vycm9yaGZvbworCisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKy8qKiBcZmlsZSBlcnJvci5oIEVycm9yIGNvZGVzIGFuZCBhdXhpbGlhcnkgZnVuY3Rpb25zICovCisKKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vY2RlY2wuaD4KKworQVZBSElfQ19ERUNMX0JFR0lOCisKKy8qKiBFcnJvciBjb2RlcyB1c2VkIGJ5IGF2YWhpICovCitlbnVtIHsKKyAgICBBVkFISV9PSyA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgT0sgKi8KKyAgICBBVkFISV9FUlJfRkFJTFVSRSA9IC0xLCAgICAgICAgICAgICAgICAgIC8qKjwgR2VuZXJpYyBlcnJvciBjb2RlICovCisgICAgQVZBSElfRVJSX0JBRF9TVEFURSA9IC0yLCAgICAgICAgICAgICAgICAvKio8IE9iamVjdCB3YXMgaW4gYSBiYWQgc3RhdGUgKi8KKyAgICBBVkFISV9FUlJfSU5WQUxJRF9IT1NUX05BTUUgPSAtMywgICAgICAgIC8qKjwgSW52YWxpZCBob3N0IG5hbWUgKi8KKyAgICBBVkFISV9FUlJfSU5WQUxJRF9ET01BSU5fTkFNRSA9IC00LCAgICAgIC8qKjwgSW52YWxpZCBkb21haW4gbmFtZSAqLworICAgIEFWQUhJX0VSUl9OT19ORVRXT1JLID0gLTUsICAgICAgICAgICAgICAgLyoqPCBObyBzdWl0YWJsZSBuZXR3b3JrIHByb3RvY29sIGF2YWlsYWJsZSAqLworICAgIEFWQUhJX0VSUl9JTlZBTElEX1RUTCA9IC02LCAgICAgICAgICAgICAgLyoqPCBJbnZhbGlkIEROUyBUVEwgKi8KKyAgICBBVkFISV9FUlJfSVNfUEFUVEVSTiA9IC03LCAgICAgICAgICAgICAgIC8qKjwgUlIga2V5IGlzIHBhdHRlcm4gKi8KKyAgICBBVkFISV9FUlJfQ09MTElTSU9OID0gLTgsICAgICAgICAgICAgICAgIC8qKjwgTmFtZSBjb2xsaXNpb24gKi8KKyAgICBBVkFISV9FUlJfSU5WQUxJRF9SRUNPUkQgPSAtOSwgICAgICAgICAgIC8qKjwgSW52YWxpZCBSUiAqLworCisgICAgQVZBSElfRVJSX0lOVkFMSURfU0VSVklDRV9OQU1FID0gLTEwLCAgICAvKio8IEludmFsaWQgc2VydmljZSBuYW1lICovCisgICAgQVZBSElfRVJSX0lOVkFMSURfU0VSVklDRV9UWVBFID0gLTExLCAgICAvKio8IEludmFsaWQgc2VydmljZSB0eXBlICovCisgICAgQVZBSElfRVJSX0lOVkFMSURfUE9SVCA9IC0xMiwgICAgICAgICAgICAvKio8IEludmFsaWQgcG9ydCBudW1iZXIgKi8KKyAgICBBVkFISV9FUlJfSU5WQUxJRF9LRVkgPSAtMTMsICAgICAgICAgICAgIC8qKjwgSW52YWxpZCBrZXkgKi8KKyAgICBBVkFISV9FUlJfSU5WQUxJRF9BRERSRVNTID0gLTE0LCAgICAgICAgIC8qKjwgSW52YWxpZCBhZGRyZXNzICovCisgICAgQVZBSElfRVJSX1RJTUVPVVQgPSAtMTUsICAgICAgICAgICAgICAgICAvKio8IFRpbWVvdXQgcmVhY2hlZCAqLworICAgIEFWQUhJX0VSUl9UT09fTUFOWV9DTElFTlRTID0gLTE2LCAgICAgICAgLyoqPCBUb28gbWFueSBjbGllbnRzICovCisgICAgQVZBSElfRVJSX1RPT19NQU5ZX09CSkVDVFMgPSAtMTcsICAgICAgICAvKio8IFRvbyBtYW55IG9iamVjdHMgKi8KKyAgICBBVkFISV9FUlJfVE9PX01BTllfRU5UUklFUyA9IC0xOCwgICAgICAgIC8qKjwgVG9vIG1hbnkgZW50cmllcyAqLworICAgIEFWQUhJX0VSUl9PUyA9IC0xOSwgICAgICAgICAgICAgICAgICAgICAgLyoqPCBPUyBlcnJvciAqLworCisgICAgQVZBSElfRVJSX0FDQ0VTU19ERU5JRUQgPSAtMjAsICAgICAgICAgICAvKio8IEFjY2VzcyBkZW5pZWQgKi8KKyAgICBBVkFISV9FUlJfSU5WQUxJRF9PUEVSQVRJT04gPSAtMjEsICAgICAgIC8qKjwgSW52YWxpZCBvcGVyYXRpb24gKi8KKyAgICBBVkFISV9FUlJfREJVU19FUlJPUiA9IC0yMiwgICAgICAgICAgICAgIC8qKjwgQW4gdW5leHBlY3RlZCBELUJ1cyBlcnJvciBvY2N1cmVkICovCisgICAgQVZBSElfRVJSX0RJU0NPTk5FQ1RFRCA9IC0yMywgICAgICAgICAgICAvKio8IERhZW1vbiBjb25uZWN0aW9uIGZhaWxlZCAqLworICAgIEFWQUhJX0VSUl9OT19NRU1PUlkgPSAtMjQsICAgICAgICAgICAgICAgLyoqPCBNZW1vcnkgZXhoYXVzdGVkICovCisgICAgQVZBSElfRVJSX0lOVkFMSURfT0JKRUNUID0gLTI1LCAgICAgICAgICAvKio8IFRoZSBvYmplY3QgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24gd2FzIGludmFsaWQgKi8KKyAgICBBVkFISV9FUlJfTk9fREFFTU9OID0gLTI2LCAgICAgICAgICAgICAgIC8qKjwgRGFlbW9uIG5vdCBydW5uaW5nICovCisgICAgQVZBSElfRVJSX0lOVkFMSURfSU5URVJGQUNFID0gLTI3LCAgICAgICAvKio8IEludmFsaWQgaW50ZXJmYWNlICovCisgICAgQVZBSElfRVJSX0lOVkFMSURfUFJPVE9DT0wgPSAtMjgsICAgICAgICAvKio8IEludmFsaWQgcHJvdG9jb2wgKi8KKyAgICBBVkFISV9FUlJfSU5WQUxJRF9GTEFHUyA9IC0yOSwgICAgICAgICAgIC8qKjwgSW52YWxpZCBmbGFncyAqLworCisgICAgQVZBSElfRVJSX05PVF9GT1VORCA9IC0zMCwgICAgICAgICAgICAgICAvKio8IE5vdCBmb3VuZCAqLworICAgIEFWQUhJX0VSUl9JTlZBTElEX0NPTkZJRyA9IC0zMSwgICAgICAgICAgLyoqPCBDb25maWd1cmF0aW9uIGVycm9yICovCisgICAgQVZBSElfRVJSX1ZFUlNJT05fTUlTTUFUQ0ggPSAtMzIsICAgICAgICAvKio8IFZlcnNvbiBtaXNtYXRjaCAqLworICAgIEFWQUhJX0VSUl9JTlZBTElEX1NFUlZJQ0VfU1VCVFlQRSA9IC0zMywgLyoqPCBJbnZhbGlkIHNlcnZpY2Ugc3VidHlwZSAqLworICAgIEFWQUhJX0VSUl9JTlZBTElEX1BBQ0tFVCA9IC0zNCwgICAgICAgICAgLyoqPCBJbnZhbGlkIHBhY2tldCAqLworICAgIEFWQUhJX0VSUl9JTlZBTElEX0ROU19FUlJPUiA9IC0zNSwgICAgICAgLyoqPCBJbnZsYWlkIEROUyByZXR1cm4gY29kZSAqLworICAgIEFWQUhJX0VSUl9ETlNfRk9STUVSUiA9IC0zNiwgICAgICAgICAgICAgLyoqPCBETlMgRXJyb3I6IEZvcm0gZXJyb3IgKi8KKyAgICBBVkFISV9FUlJfRE5TX1NFUlZGQUlMID0gLTM3LCAgICAgICAgICAgIC8qKjwgRE5TIEVycm9yOiBTZXJ2ZXIgRmFpbHVyZSAqLworICAgIEFWQUhJX0VSUl9ETlNfTlhET01BSU4gPSAtMzgsICAgICAgICAgICAgLyoqPCBETlMgRXJyb3I6IE5vIHN1Y2ggZG9tYWluICovCisgICAgQVZBSElfRVJSX0ROU19OT1RJTVAgPSAtMzksICAgICAgICAgICAgICAvKio8IEROUyBFcnJvcjogTm90IGltcGxlbWVudGVkICovCisKKyAgICBBVkFISV9FUlJfRE5TX1JFRlVTRUQgPSAtNDAsICAgICAgICAgICAgIC8qKjwgRE5TIEVycm9yOiBPcGVyYXRpb24gcmVmdXNlZCAqLworICAgIEFWQUhJX0VSUl9ETlNfWVhET01BSU4gPSAtNDEsCisgICAgQVZBSElfRVJSX0ROU19ZWFJSU0VUID0gLTQyLAorICAgIEFWQUhJX0VSUl9ETlNfTlhSUlNFVCA9IC00MywKKyAgICBBVkFISV9FUlJfRE5TX05PVEFVVEggPSAtNDQsICAgICAgICAgICAgIC8qKjwgRE5TIEVycm9yOiBOb3QgYXV0aG9yaXplZCAqLworICAgIEFWQUhJX0VSUl9ETlNfTk9UWk9ORSA9IC00NSwKKyAgICBBVkFISV9FUlJfSU5WQUxJRF9SREFUQSA9IC00NiwgICAgICAgICAgIC8qKjwgSW52YWxpZCBSREFUQSAqLworICAgIEFWQUhJX0VSUl9JTlZBTElEX0ROU19DTEFTUyA9IC00NywgICAgICAgLyoqPCBJbnZhbGlkIEROUyBjbGFzcyAqLworICAgIEFWQUhJX0VSUl9JTlZBTElEX0ROU19UWVBFID0gLTQ4LCAgICAgICAgLyoqPCBJbnZhbGlkIEROUyB0eXBlICovCisgICAgQVZBSElfRVJSX05PVF9TVVBQT1JURUQgPSAtNDksICAgICAgICAgICAvKio8IE5vdCBzdXBwb3J0ZWQgKi8KKworICAgIEFWQUhJX0VSUl9OT1RfUEVSTUlUVEVEID0gLTUwLCAgICAgICAgICAgLyoqPCBPcGVyYXRpb24gbm90IHBlcm1pdHRlZCAqLworICAgIEFWQUhJX0VSUl9JTlZBTElEX0FSR1VNRU5UID0gLTUxLCAgICAgICAgLyoqPCBJbnZhbGlkIGFyZ3VtZW50ICovCisgICAgQVZBSElfRVJSX0lTX0VNUFRZID0gLTUyLCAgICAgICAgICAgICAgICAvKio8IElzIGVtcHR5ICovCisgICAgQVZBSElfRVJSX05PX0NIQU5HRSA9IC01MywgICAgICAgICAgICAgICAvKio8IFRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uIGlzIGludmFsaWQgYmVjYXVzZSBpdCBpcyByZWR1bmRhbnQgKi8KKworICAgIC8qKioqCisgICAgICoqKiogICAgSUYgWU9VIEFERCBBIE5FVyBFUlJPUiBDT0RFIEhFUkUsIFBMRUFTRSBET04nVCBGT1JHRVQgVE8gQURECisgICAgICoqKiogICAgSVQgVE8gVEhFIFNUUklORyBBUlJBWSBJTiBhdmFoaV9zdHJlcnJvcigpIElOIGVycm9yLmMgQU5ECisgICAgICoqKiogICAgVE8gVEhFIEFSUkFZIElOIGRidXMuYyBBTkQgRklOQUxMWSBUTyBkYnVzLmghCisgICAgICoqKioKKyAgICAgKioqKiAgICBBbHNvIHJlbWVtYmVyIHRvIHVwZGF0ZSB0aGUgTUFYIHZhbHVlIGJlbG93LgorICAgICAqKioqLworCisgICAgQVZBSElfRVJSX01BWCA9IC01NAorfTsKKworLyoqIFJldHVybiBhIGh1bWFuIHJlYWRhYmxlIGVycm9yIHN0cmluZyBmb3IgdGhlIHNwZWNpZmllZCBlcnJvciBjb2RlICovCitjb25zdCBjaGFyICphdmFoaV9zdHJlcnJvcihpbnQgZXJyb3IpOworCitBVkFISV9DX0RFQ0xfRU5ECisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvbW1vbi9nY2NtYWNyby5oIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbW1vbi9nY2NtYWNyby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjOTcxMTEKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tbW9uL2djY21hY3JvLmgKQEAgLTAsMCArMSw3NCBAQAorI2lmbmRlZiBmb29nY2NtYWNyb2hmb28KKyNkZWZpbmUgZm9vZ2NjbWFjcm9oZm9vCisKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworLyoqIFxmaWxlIGdjY21hY3JvLmggRGVmaW5lcyBzb21lIG1hY3JvcyBmb3IgR0NDIGV4dGVuc2lvbnMgKi8KKworI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9jZGVjbC5oPgorCitBVkFISV9DX0RFQ0xfQkVHSU4KKworI2lmIGRlZmluZWQoX19HTlVDX18pICYmIChfX0dOVUNfXyA+PSA0KSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykKKyNkZWZpbmUgQVZBSElfR0NDX0FMTE9DX1NJWkUoeCkgX19hdHRyaWJ1dGVfXyAoKF9fYWxsb2Nfc2l6ZV9fKHgpKSkKKyNkZWZpbmUgQVZBSElfR0NDX0FMTE9DX1NJWkUyKHgseSkgX19hdHRyaWJ1dGVfXyAoKF9fYWxsb2Nfc2l6ZV9fKHgseSkpKQorI2Vsc2UKKy8qKiBNYWNybyBmb3IgdXNhZ2Ugb2YgR0NDJ3MgYWxsb2Nfc2l6ZSBhdHRyaWJ1dGUgKi8KKyNkZWZpbmUgQVZBSElfR0NDX0FMTE9DX1NJWkUoeCkKKyNkZWZpbmUgQVZBSElfR0NDX0FMTE9DX1NJWkUyKHgseSkKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKF9fR05VQ19fID49IDQpCisjZGVmaW5lIEFWQUhJX0dDQ19TRU5USU5FTCBfX2F0dHJpYnV0ZV9fICgoc2VudGluZWwpKQorI2Vsc2UKKy8qKiBNYWNybyBmb3IgdXNhZ2Ugb2YgR0NDJ3Mgc2VudGluZWwgY29tcGlsYXRpb24gd2FybmluZ3MgKi8KKyNkZWZpbmUgQVZBSElfR0NDX1NFTlRJTkVMCisjZW5kaWYKKworI2lmZGVmIF9fR05VQ19fCisjZGVmaW5lIEFWQUhJX0dDQ19QUklOVEZfQVRUUihhLGIpIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgYSwgYikpKQorI2Vsc2UKKy8qKiBNYWNybyBmb3IgdXNhZ2Ugb2YgR0NDJ3MgcHJpbnRmIGNvbXBpbGF0aW9uIHdhcm5pbmdzICovCisjZGVmaW5lIEFWQUhJX0dDQ19QUklOVEZfQVRUUihhLGIpCisjZW5kaWYKKworLyoqIFNhbWUgYXMgQVZBSElfR0NDX1BSSU5URl9BVFRSIGJ1dCBoYXJkIGNvZGVkIHRvIGFyZ3VtZW50cyAxIGFuZCAyICovCisjZGVmaW5lIEFWQUhJX0dDQ19QUklOVEZfQVRUUjEyIEFWQUhJX0dDQ19QUklOVEZfQVRUUigxLDIpCisKKy8qKiBTYW1lIGFzIEFWQUhJX0dDQ19QUklOVEZfQVRUUiBidXQgaGFyZCBjb2RlZCB0byBhcmd1bWVudHMgMiBhbmQgMyAqLworI2RlZmluZSBBVkFISV9HQ0NfUFJJTlRGX0FUVFIyMyBBVkFISV9HQ0NfUFJJTlRGX0FUVFIoMiwzKQorCisjaWZkZWYgX19HTlVDX18KKyNkZWZpbmUgQVZBSElfR0NDX05PUkVUVVJOIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSkKKyNlbHNlCisvKiogTWFjcm8gZm9yIG5vLXJldHVybiBmdW5jdGlvbnMgKi8KKyNkZWZpbmUgQVZBSElfR0NDX05PUkVUVVJOCisjZW5kaWYKKworI2lmZGVmIF9fR05VQ19fCisjZGVmaW5lIEFWQUhJX0dDQ19VTlVTRUQgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpCisjZWxzZQorLyoqIE1hY3JvIGZvciBub3QgdXNlZCBwYXJhbWV0ZXIgKi8KKyNkZWZpbmUgQVZBSElfR0NDX1VOVVNFRAorI2VuZGlmCisKK0FWQUhJX0NfREVDTF9FTkQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktY29tbW9uL2kxOG4uYyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21tb24vaTE4bi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxYzkzZTQKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tbW9uL2kxOG4uYwpAQCAtMCwwICsxLDM4IEBACisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisgKioqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJpMThuLmgiCisKK3ZvaWQgYXZhaGlfaW5pdF9pMThuKHZvaWQpIHsKKworICAgIC8qIE5vdCByZWFsbHkgdGhyZWFkIHNhZmUsIGJ1dCB0aGlzIGRvZXNuJ3QgbWF0dGVyIG11Y2ggc2luY2UKKyAgICAgKiBiaW5kdGV4dGRvbWFpbiBpcyBzdXBwb3NlZCB0byBiZSBpZGVtcG90ZW50IGFueXdheS4gKi8KKworICAgIHN0YXRpYyBpbnQgZG9uZSA9IDA7CisKKyAgICBpZiAoIWRvbmUpIHsKKyAgICAgICAgYmluZHRleHRkb21haW4oR0VUVEVYVF9QQUNLQUdFLCBBVkFISV9MT0NBTEVESVIpOworICAgICAgICBiaW5kX3RleHRkb21haW5fY29kZXNldChHRVRURVhUX1BBQ0tBR0UsICJVVEYtOCIpOworICAgICAgICBkb25lID0gMTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktY29tbW9uL2kxOG4uaCBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21tb24vaTE4bi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNjEzZTUKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tbW9uL2kxOG4uaApAQCAtMCwwICsxLDUzIEBACisjaWZuZGVmIGZvb2kxOG5oZm9vCisjZGVmaW5lIGZvb2kxOG5oZm9vCisKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2lmICFkZWZpbmVkKEdFVFRFWFRfUEFDS0FHRSkKKyNlcnJvciAiU29tZXRoaW5nIGlzIHZlcnkgd3JvbmcgaGVyZSwgY29uZmlnLmggbmVlZHMgdG8gYmUgaW5jbHVkZWQgZmlyc3QiCisjZW5kaWYKKworI2lmZGVmIEVOQUJMRV9OTFMKKworI2luY2x1ZGUgPGxpYmludGwuaD4KKworI2RlZmluZSBfKFN0cmluZykgZGdldHRleHQoR0VUVEVYVF9QQUNLQUdFLCBTdHJpbmcpCisjaWZkZWYgZ2V0dGV4dF9ub29wCisjZGVmaW5lIE5fKFN0cmluZykgZ2V0dGV4dF9ub29wKFN0cmluZykKKyNlbHNlCisjZGVmaW5lIE5fKFN0cmluZykgKFN0cmluZykKKyNlbmRpZgorCisjZWxzZSAvKiBOTFMgaXMgZGlzYWJsZWQgKi8KKworI2RlZmluZSBfKFN0cmluZykgKFN0cmluZykKKyNkZWZpbmUgTl8oU3RyaW5nKSAoU3RyaW5nKQorI2RlZmluZSB0ZXh0ZG9tYWluKFN0cmluZykgKFN0cmluZykKKyNkZWZpbmUgZ2V0dGV4dChTdHJpbmcpIChTdHJpbmcpCisjZGVmaW5lIGRnZXR0ZXh0KERvbWFpbixTdHJpbmcpIChTdHJpbmcpCisjZGVmaW5lIGRjZ2V0dGV4dChEb21haW4sU3RyaW5nLFR5cGUpIChTdHJpbmcpCisjZGVmaW5lIGJpbmR0ZXh0ZG9tYWluKERvbWFpbixEaXJlY3RvcnkpIChEb21haW4pCisjZGVmaW5lIGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0KERvbWFpbixDb2Rlc2V0KSAoQ29kZXNldCkKKworI2VuZGlmIC8qIEVOQUJMRV9OTFMgKi8KKwordm9pZCBhdmFoaV9pbml0X2kxOG4odm9pZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvbW1vbi9sbGlzdC5oIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbW1vbi9sbGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNzA1NmQKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tbW9uL2xsaXN0LmgKQEAgLTAsMCArMSw3NSBAQAorI2lmbmRlZiBmb29sbGlzdGZvbworI2RlZmluZSBmb29sbGlzdGZvbworCisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKy8qKiBcZmlsZSBsbGlzdC5oIEEgc2ltcGxlIG1hY3JvIGJhc2VkIGxpbmtlZCBsaXN0IGltcGxlbWVudGF0aW9uICovCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKworI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9jZGVjbC5oPgorCitBVkFISV9DX0RFQ0xfQkVHSU4KKworLyoqIFRoZSBoZWFkIG9mIHRoZSBsaW5rZWQgbGlzdC4gVXNlIHRoaXMgaW4gdGhlIHN0cnVjdHVyZSB0aGF0IHNoYWxsCisgKiBjb250YWluIHRoZSBoZWFkIG9mIHRoZSBsaW5rZWQgbGlzdCAqLworI2RlZmluZSBBVkFISV9MTElTVF9IRUFEKHQsbmFtZSkgdCAqbmFtZQorCisvKiogVGhlIHBvaW50ZXJzIGluIHRoZSBsaW5rZWQgbGlzdCdzIGl0ZW1zLiBVc2UgdGhpcyBpbiB0aGUgaXRlbSBzdHJ1Y3R1cmUgKi8KKyNkZWZpbmUgQVZBSElfTExJU1RfRklFTERTKHQsbmFtZSkgdCAqbmFtZSMjX25leHQsICpuYW1lIyNfcHJldgorCisvKiogSW5pdGlhbGl6ZSB0aGUgbGlzdCdzIGhlYWQgKi8KKyNkZWZpbmUgQVZBSElfTExJU1RfSEVBRF9JTklUKHQsaGVhZCkgZG8geyAoaGVhZCkgPSBOVUxMOyB9IHdoaWxlKDApCisKKy8qKiBJbml0aWFsaXplIGEgbGlzdCBpdGVtICovCisjZGVmaW5lIEFWQUhJX0xMSVNUX0lOSVQodCxuYW1lLGl0ZW0pIGRvIHsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgKl9pdGVtID0gKGl0ZW0pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KF9pdGVtKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pdGVtLT5uYW1lIyNfcHJldiA9IF9pdGVtLT5uYW1lIyNfbmV4dCA9IE5VTEw7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCisKKy8qKiBQcmVwZW5kIGFuIGl0ZW0gdG8gdGhlIGxpc3QgKi8KKyNkZWZpbmUgQVZBSElfTExJU1RfUFJFUEVORCh0LG5hbWUsaGVhZCxpdGVtKSBkbyB7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ICoqX2hlYWQgPSAmKGhlYWQpLCAqX2l0ZW0gPSAoaXRlbSk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoX2l0ZW0pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChfaXRlbS0+bmFtZSMjX25leHQgPSAqX2hlYWQpKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2l0ZW0tPm5hbWUjI19uZXh0LT5uYW1lIyNfcHJldiA9IF9pdGVtOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2l0ZW0tPm5hbWUjI19wcmV2ID0gTlVMTDsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpfaGVhZCA9IF9pdGVtOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoMCkKKworLyoqIFJlbW92ZSBhbiBpdGVtIGZyb20gdGhlIGxpc3QgKi8KKyNkZWZpbmUgQVZBSElfTExJU1RfUkVNT1ZFKHQsbmFtZSxoZWFkLGl0ZW0pIGRvIHsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCAqKl9oZWFkID0gJihoZWFkKSwgKl9pdGVtID0gKGl0ZW0pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoX2l0ZW0pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2l0ZW0tPm5hbWUjI19uZXh0KSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXRlbS0+bmFtZSMjX25leHQtPm5hbWUjI19wcmV2ID0gX2l0ZW0tPm5hbWUjI19wcmV2OyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2l0ZW0tPm5hbWUjI19wcmV2KSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXRlbS0+bmFtZSMjX3ByZXYtPm5hbWUjI19uZXh0ID0gX2l0ZW0tPm5hbWUjI19uZXh0OyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoKl9oZWFkID09IF9pdGVtKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKl9oZWFkID0gX2l0ZW0tPm5hbWUjI19uZXh0OyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pdGVtLT5uYW1lIyNfbmV4dCA9IF9pdGVtLT5uYW1lIyNfcHJldiA9IE5VTEw7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKKworQVZBSElfQ19ERUNMX0VORAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21tb24vbWFsbG9jLmMgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tbW9uL21hbGxvYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzYjEzYTkKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tbW9uL21hbGxvYy5jCkBAIC0wLDAgKzEsMjU3IEBACisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlICJtYWxsb2MuaCIKKworI2lmbmRlZiB2YV9jb3B5CisjaWZkZWYgX192YV9jb3B5CisjZGVmaW5lIHZhX2NvcHkoREVTVCxTUkMpIF9fdmFfY29weSgoREVTVCksKFNSQykpCisjZWxzZQorI2RlZmluZSB2YV9jb3B5KERFU1QsU1JDKSBtZW1jcHkoJihERVNUKSwgJihTUkMpLCBzaXplb2YodmFfbGlzdCkpCisjZW5kaWYKKyNlbmRpZgorCitzdGF0aWMgY29uc3QgQXZhaGlBbGxvY2F0b3IgKmFsbG9jYXRvciA9IE5VTEw7CisKK3N0YXRpYyB2b2lkIG9vbSh2b2lkKSBBVkFISV9HQ0NfTk9SRVRVUk47CisKK3N0YXRpYyB2b2lkIG9vbSh2b2lkKSB7CisKKyAgICBzdGF0aWMgY29uc3QgY2hhciBtc2dbXSA9ICJPdXQgb2YgbWVtb3J5LCBhYm9ydGluZyAuLi5cbiI7CisgICAgY29uc3QgY2hhciAqbiA9IG1zZzsKKworICAgIHdoaWxlIChzdHJsZW4obikgPiAwKSB7CisgICAgICAgIHNzaXplX3QgcjsKKworICAgICAgICBpZiAoKHIgPSB3cml0ZSgyLCBuLCBzdHJsZW4obikpKSA8IDApCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBuICs9IHI7CisgICAgfQorCisgICAgYWJvcnQoKTsKK30KKworLyogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBmb3IgYXZhaGlfbWFsbG9jKCkgKi8KK3N0YXRpYyB2b2lkKiB4bWFsbG9jKHNpemVfdCBzaXplKSB7CisgICAgdm9pZCAqcDsKKworICAgIGlmIChzaXplID09IDApCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKCEocCA9IG1hbGxvYyhzaXplKSkpCisgICAgICAgIG9vbSgpOworCisgICAgcmV0dXJuIHA7Cit9CisKKy8qIERlZmF1bHQgaW1wbGVtZW50YXRpb24gZm9yIGF2YWhpX3JlYWxsb2MoKSAqLworc3RhdGljIHZvaWQgKnhyZWFsbG9jKHZvaWQgKnAsIHNpemVfdCBzaXplKSB7CisKKyAgICBpZiAoc2l6ZSA9PSAwKSB7CisgICAgICAgIGZyZWUocCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmICghKHAgPSByZWFsbG9jKHAsIHNpemUpKSkKKyAgICAgICAgb29tKCk7CisKKyAgICByZXR1cm4gcDsKK30KKworLyogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBmb3IgYXZhaGlfY2FsbG9jKCkgKi8KK3N0YXRpYyB2b2lkICp4Y2FsbG9jKHNpemVfdCBubWVtYiwgc2l6ZV90IHNpemUpIHsKKyAgICB2b2lkICpwOworCisgICAgaWYgKHNpemUgPT0gMCB8fCBubWVtYiA9PSAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmICghKHAgPSBjYWxsb2Mobm1lbWIsIHNpemUpKSkKKyAgICAgICAgb29tKCk7CisKKyAgICByZXR1cm4gcDsKK30KKwordm9pZCAqYXZhaGlfbWFsbG9jKHNpemVfdCBzaXplKSB7CisKKyAgICBpZiAoc2l6ZSA8PSAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmICghYWxsb2NhdG9yKQorICAgICAgICByZXR1cm4geG1hbGxvYyhzaXplKTsKKworICAgIGFzc2VydChhbGxvY2F0b3ItPm1hbGxvYyk7CisgICAgcmV0dXJuIGFsbG9jYXRvci0+bWFsbG9jKHNpemUpOworfQorCit2b2lkICphdmFoaV9tYWxsb2MwKHNpemVfdCBzaXplKSB7CisgICAgdm9pZCAqcDsKKworICAgIGlmIChzaXplIDw9IDApCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKCFhbGxvY2F0b3IpCisgICAgICAgIHJldHVybiB4Y2FsbG9jKDEsIHNpemUpOworCisgICAgaWYgKGFsbG9jYXRvci0+Y2FsbG9jKQorICAgICAgICByZXR1cm4gYWxsb2NhdG9yLT5jYWxsb2MoMSwgc2l6ZSk7CisKKyAgICBhc3NlcnQoYWxsb2NhdG9yLT5tYWxsb2MpOworICAgIGlmICgocCA9IGFsbG9jYXRvci0+bWFsbG9jKHNpemUpKSkKKyAgICAgICAgbWVtc2V0KHAsIDAsIHNpemUpOworCisgICAgcmV0dXJuIHA7Cit9CisKK3ZvaWQgYXZhaGlfZnJlZSh2b2lkICpwKSB7CisKKyAgICBpZiAoIXApCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghYWxsb2NhdG9yKSB7CisgICAgICAgIGZyZWUocCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhc3NlcnQoYWxsb2NhdG9yLT5mcmVlKTsKKyAgICBhbGxvY2F0b3ItPmZyZWUocCk7Cit9CisKK3ZvaWQgKmF2YWhpX3JlYWxsb2Modm9pZCAqcCwgc2l6ZV90IHNpemUpIHsKKworICAgIGlmIChzaXplID09IDApIHsKKyAgICAgICAgYXZhaGlfZnJlZShwKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKCFhbGxvY2F0b3IpCisgICAgICAgIHJldHVybiB4cmVhbGxvYyhwLCBzaXplKTsKKworICAgIGFzc2VydChhbGxvY2F0b3ItPnJlYWxsb2MpOworICAgIHJldHVybiBhbGxvY2F0b3ItPnJlYWxsb2MocCwgc2l6ZSk7Cit9CisKK2NoYXIgKmF2YWhpX3N0cmR1cChjb25zdCBjaGFyICpzKSB7CisgICAgY2hhciAqcjsKKyAgICBzaXplX3Qgc2l6ZTsKKworICAgIGlmICghcykKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBzaXplID0gc3RybGVuKHMpOworICAgIGlmICghKHIgPSBhdmFoaV9tYWxsb2Moc2l6ZSsxKSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgbWVtY3B5KHIsIHMsIHNpemUrMSk7CisgICAgcmV0dXJuIHI7Cit9CisKK2NoYXIgKmF2YWhpX3N0cm5kdXAoY29uc3QgY2hhciAqcywgc2l6ZV90IG1heCkgeworICAgIGNoYXIgKnI7CisgICAgc2l6ZV90IHNpemU7CisgICAgY29uc3QgY2hhciAqcDsKKworICAgIGlmICghcykKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBmb3IgKHAgPSBzLCBzaXplID0gMDsKKyAgICAgICAgIHNpemUgPCBtYXggJiYgKnA7CisgICAgICAgICBwKyssIHNpemUrKyk7CisKKyAgICBpZiAoIShyID0gYXZhaGlfbmV3KGNoYXIsIHNpemUrMSkpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIG1lbWNweShyLCBzLCBzaXplKTsKKyAgICByW3NpemVdID0gMDsKKyAgICByZXR1cm4gcjsKK30KKworLyogQ2hhbmdlIHRoZSBhbGxvY2F0b3IgKi8KK3ZvaWQgYXZhaGlfc2V0X2FsbG9jYXRvcihjb25zdCBBdmFoaUFsbG9jYXRvciAqYSkgeworICAgIGFsbG9jYXRvciA9IGE7Cit9CisKK2NoYXIgKmF2YWhpX3N0cmR1cF92cHJpbnRmKGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCkgeworICAgIHNpemVfdCBsZW4gPSA4MDsKKyAgICBjaGFyICpidWY7CisKKyAgICBhc3NlcnQoZm10KTsKKworICAgIGlmICghKGJ1ZiA9IGF2YWhpX21hbGxvYyhsZW4pKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGludCBuOworICAgICAgICBjaGFyICpuYnVmOworICAgICAgICB2YV9saXN0IGFwMjsKKworICAgICAgICB2YV9jb3B5IChhcDIsIGFwKTsKKyAgICAgICAgbiA9IHZzbnByaW50ZihidWYsIGxlbiwgZm10LCBhcDIpOworICAgICAgICB2YV9lbmQgKGFwMik7CisKKyAgICAgICAgaWYgKG4gPj0gMCAmJiBuIDwgKGludCkgbGVuKQorICAgICAgICAgICAgcmV0dXJuIGJ1ZjsKKworICAgICAgICBpZiAobiA+PSAwKQorICAgICAgICAgICAgbGVuID0gbisxOworICAgICAgICBlbHNlCisgICAgICAgICAgICBsZW4gKj0gMjsKKworICAgICAgICBpZiAoIShuYnVmID0gYXZhaGlfcmVhbGxvYyhidWYsIGxlbikpKSB7CisgICAgICAgICAgICBhdmFoaV9mcmVlKGJ1Zik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIGJ1ZiA9IG5idWY7CisgICAgfQorfQorCitjaGFyICphdmFoaV9zdHJkdXBfcHJpbnRmKGNvbnN0IGNoYXIgKmZtdCwgLi4uICkgeworICAgIGNoYXIgKnM7CisgICAgdmFfbGlzdCBhcDsKKworICAgIGFzc2VydChmbXQpOworCisgICAgdmFfc3RhcnQoYXAsIGZtdCk7CisgICAgcyA9IGF2YWhpX3N0cmR1cF92cHJpbnRmKGZtdCwgYXApOworICAgIHZhX2VuZChhcCk7CisKKyAgICByZXR1cm4gczsKK30KKwordm9pZCAqYXZhaGlfbWVtZHVwKGNvbnN0IHZvaWQgKnMsIHNpemVfdCBsKSB7CisgICAgdm9pZCAqcDsKKyAgICBhc3NlcnQocyk7CisKKyAgICBpZiAoIShwID0gYXZhaGlfbWFsbG9jKGwpKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBtZW1jcHkocCwgcywgbCk7CisgICAgcmV0dXJuIHA7Cit9CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktY29tbW9uL21hbGxvYy5oIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbW1vbi9tYWxsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmFhYzNmCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbW1vbi9tYWxsb2MuaApAQCAtMCwwICsxLDk2IEBACisjaWZuZGVmIGZvb21hbGxvY2hmb28KKyNkZWZpbmUgZm9vbWFsbG9jaGZvbworCisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKy8qKiBcZmlsZSBtYWxsb2MuaCBNZW1vcnkgYWxsb2NhdGlvbiAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vY2RlY2wuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vZ2NjbWFjcm8uaD4KKworQVZBSElfQ19ERUNMX0JFR0lOCisKKy8qKiBBbGxvY2F0ZSBzb21lIG1lbW9yeSwganVzdCBsaWtlIHRoZSBsaWJjIG1hbGxvYygpICovCit2b2lkICphdmFoaV9tYWxsb2Moc2l6ZV90IHNpemUpIEFWQUhJX0dDQ19BTExPQ19TSVpFKDEpOworCisvKiogU2ltaWxhciB0byBhdmFoaV9tYWxsb2MoKSBidXQgc2V0IHRoZSBtZW1vcnkgdG8gemVybyAqLwordm9pZCAqYXZhaGlfbWFsbG9jMChzaXplX3Qgc2l6ZSkgQVZBSElfR0NDX0FMTE9DX1NJWkUoMSk7CisKKy8qKiBGcmVlIHNvbWUgbWVtb3J5ICovCit2b2lkIGF2YWhpX2ZyZWUodm9pZCAqcCk7CisKKy8qKiBTaW1pbGFyIHRvIGxpYmMncyByZWFsbG9jKCkgKi8KK3ZvaWQgKmF2YWhpX3JlYWxsb2Modm9pZCAqcCwgc2l6ZV90IHNpemUpIEFWQUhJX0dDQ19BTExPQ19TSVpFKDIpOworCisvKiogSW50ZXJuYWwgaGVscGVyIGZvciBhdmFoaV9uZXcoKSAqLworc3RhdGljIGlubGluZSB2b2lkKiBBVkFISV9HQ0NfQUxMT0NfU0laRTIoMSwyKSBhdmFoaV9uZXdfaW50ZXJuYWwodW5zaWduZWQgbiwgc2l6ZV90IGspIHsKKyAgICBhc3NlcnQobiA8IElOVF9NQVgvayk7CisgICAgcmV0dXJuIGF2YWhpX21hbGxvYyhuKmspOworfQorCisvKiogQWxsb2NhdGUgbiBuZXcgc3RydWN0dXJlcyBvZiB0aGUgc3BlY2lmaWVkIHR5cGUuICovCisjZGVmaW5lIGF2YWhpX25ldyh0eXBlLCBuKSAoKHR5cGUqKSBhdmFoaV9uZXdfaW50ZXJuYWwoKG4pLCBzaXplb2YodHlwZSkpKQorCisvKiogSW50ZXJuYWwgaGVscGVyIGZvciBhdmFoaV9uZXcwKCkgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCogQVZBSElfR0NDX0FMTE9DX1NJWkUyKDEsMikgYXZhaGlfbmV3MF9pbnRlcm5hbCh1bnNpZ25lZCBuLCBzaXplX3QgaykgeworICAgIGFzc2VydChuIDwgSU5UX01BWC9rKTsKKyAgICByZXR1cm4gYXZhaGlfbWFsbG9jMChuKmspOworfQorCisvKiogU2FtZSBhcyBhdmFoaV9uZXcoKSBidXQgc2V0IHRoZSBtZW1vcnkgdG8gemVybyAqLworI2RlZmluZSBhdmFoaV9uZXcwKHR5cGUsIG4pICgodHlwZSopIGF2YWhpX25ldzBfaW50ZXJuYWwoKG4pLCBzaXplb2YodHlwZSkpKQorCisvKiogSnVzdCBsaWtlIGxpYmMncyBzdHJkdXAoKSAqLworY2hhciAqYXZhaGlfc3RyZHVwKGNvbnN0IGNoYXIgKnMpOworCisvKiogSnVzdCBsaWtlIGxpYmMncyBzdHJuZHVwKCkgKi8KK2NoYXIgKmF2YWhpX3N0cm5kdXAoY29uc3QgY2hhciAqcywgc2l6ZV90IGwpOworCisvKiogRHVwbGljYXRlIHRoZSBnaXZlbiBtZW1vcnkgYmxvY2sgaW50byBhIG5ldyBvbmUgYWxsb2NhdGVkIHdpdGggYXZhaGlfbWFsbG9jKCkgKi8KK3ZvaWQgKmF2YWhpX21lbWR1cChjb25zdCB2b2lkICpzLCBzaXplX3QgbCkgQVZBSElfR0NDX0FMTE9DX1NJWkUoMik7CisKKy8qKiBXcmFwcyBhbGxvY2F0b3IgZnVuY3Rpb25zICovCit0eXBlZGVmIHN0cnVjdCBBdmFoaUFsbG9jYXRvciB7CisgICAgdm9pZCogKCptYWxsb2MpKHNpemVfdCBzaXplKSBBVkFISV9HQ0NfQUxMT0NfU0laRSgxKTsKKyAgICB2b2lkICgqZnJlZSkodm9pZCAqcCk7CisgICAgdm9pZCogKCpyZWFsbG9jKSh2b2lkICpwLCBzaXplX3Qgc2l6ZSkgQVZBSElfR0NDX0FMTE9DX1NJWkUoMik7CisgICAgdm9pZCogKCpjYWxsb2MpKHNpemVfdCBubWVtYiwgc2l6ZV90IHNpemUpIEFWQUhJX0dDQ19BTExPQ19TSVpFMigxLDIpOyAgIC8qKjwgTWF5IGJlIE5VTEwgKi8KK30gQXZhaGlBbGxvY2F0b3I7CisKKy8qKiBDaGFuZ2UgdGhlIGFsbG9jYXRvci4gTWF5IGJlIE5VTEwgdG8gcmV0dXJuIHRvIGRlZmF1bHQgKGxpYmMpCisgKiBhbGxvY2F0b3JzLiBUaGUgc3RydWN0dXJlIGlzIG5vdCBjb3BpZWQhICovCit2b2lkIGF2YWhpX3NldF9hbGxvY2F0b3IoY29uc3QgQXZhaGlBbGxvY2F0b3IgKmEpOworCisvKiogTGlrZSBzcHJpbnRmKCkgYnV0IHN0b3JlIHRoZSByZXN1bHQgaW4gYSBmcmVzaGx5IGFsbG9jYXRlZCBidWZmZXIuIEZyZWUgdGhpcyB3aXRoIGF2YWhpX2ZyZWUoKSAqLworY2hhciAqYXZhaGlfc3RyZHVwX3ByaW50Zihjb25zdCBjaGFyICpmbXQsIC4uLiApIEFWQUhJX0dDQ19QUklOVEZfQVRUUjEyOworCisvKiogXGNvbmQgZnVsbGRvY3MgKi8KKy8qKiBTYW1lIGFzIGF2YWhpX3N0cmR1cF9wcmludGYoKSBidXQgdGFrZSBhIHZhX2xpc3QgaW5zdGVhZCBvZiB2YXJhcmdzICovCitjaGFyICphdmFoaV9zdHJkdXBfdnByaW50Zihjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApOworLyoqIFxlbmRjb25kICovCisKK0FWQUhJX0NfREVDTF9FTkQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktY29tbW9uL3JsaXN0LmMgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tbW9uL3JsaXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdkY2IyNAotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21tb24vcmxpc3QuYwpAQCAtMCwwICsxLDYyIEBACisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSAicmxpc3QuaCIKKyNpbmNsdWRlICJtYWxsb2MuaCIKKworQXZhaGlSTGlzdCogYXZhaGlfcmxpc3RfcHJlcGVuZChBdmFoaVJMaXN0ICpyLCB2b2lkICpkYXRhKSB7CisgICAgQXZhaGlSTGlzdCAqbjsKKworICAgIGlmICghKG4gPSBhdmFoaV9uZXcoQXZhaGlSTGlzdCwgMSkpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIG4tPmRhdGEgPSBkYXRhOworCisgICAgQVZBSElfTExJU1RfUFJFUEVORChBdmFoaVJMaXN0LCBybGlzdCwgciwgbik7CisgICAgcmV0dXJuIHI7Cit9CisKK0F2YWhpUkxpc3QqIGF2YWhpX3JsaXN0X3JlbW92ZShBdmFoaVJMaXN0ICpyLCB2b2lkICpkYXRhKSB7CisgICAgQXZhaGlSTGlzdCAqbjsKKworICAgIGZvciAobiA9IHI7IG47IG4gPSBuLT5ybGlzdF9uZXh0KQorCisgICAgICAgIGlmIChuLT5kYXRhID09IGRhdGEpIHsKKyAgICAgICAgICAgIEFWQUhJX0xMSVNUX1JFTU9WRShBdmFoaVJMaXN0LCBybGlzdCwgciwgbik7CisgICAgICAgICAgICBhdmFoaV9mcmVlKG4pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgIHJldHVybiByOworfQorCitBdmFoaVJMaXN0KiBhdmFoaV9ybGlzdF9yZW1vdmVfYnlfbGluayhBdmFoaVJMaXN0ICpyLCBBdmFoaVJMaXN0ICpuKSB7CisgICAgYXNzZXJ0KG4pOworCisgICAgQVZBSElfTExJU1RfUkVNT1ZFKEF2YWhpUkxpc3QsIHJsaXN0LCByLCBuKTsKKyAgICBhdmFoaV9mcmVlKG4pOworCisgICAgcmV0dXJuIHI7Cit9CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktY29tbW9uL3JsaXN0LmggYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tbW9uL3JsaXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJjYzFkNQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21tb24vcmxpc3QuaApAQCAtMCwwICsxLDQ5IEBACisjaWZuZGVmIGZvb3JsaXN0Zm9vCisjZGVmaW5lIGZvb3JsaXN0Zm9vCisKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworLyoqIFxmaWxlIHJsaXN0LmggQSBzaW1wbGUgbGlua2VkIGxpc3QgaW1wbGVtZW50YXRpb24gKi8KKworI2luY2x1ZGUgImxsaXN0LmgiCisKK0FWQUhJX0NfREVDTF9CRUdJTgorCisvKiogQSBkb3VibHkgbGlua2VkIGxpc3QgdHlwZSAqLwordHlwZWRlZiBzdHJ1Y3QgQXZhaGlSTGlzdCBBdmFoaVJMaXN0OworCisvKiogQSBkb3VibHkgbGlua2VkIGxpc3QgdHlwZSAqLworc3RydWN0IEF2YWhpUkxpc3QgeworICAgIEFWQUhJX0xMSVNUX0ZJRUxEUyhBdmFoaVJMaXN0LCBybGlzdCk7CisgICAgdm9pZCAqZGF0YTsKK307CisKKy8qKiBQcmVwZW5kIGEgbmV3IGl0ZW0gdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdCBhbmQgcmV0dXJuIHRoZSBuZXcgYmVnaW5uaW5nICovCitBdmFoaVJMaXN0KiBhdmFoaV9ybGlzdF9wcmVwZW5kKEF2YWhpUkxpc3QgKnIsIHZvaWQgKmRhdGEpOworCisvKiogUmVtb3ZlIHRoZSBmaXJzdCBvY2N1cmVuY2Ugb2YgdGhlIHNwZWNpZmllZCBpdGVtIGZyb20gdGhlIGxpc3QgYW5kIHJldHVybiB0aGUgbmV3IGJlZ2lubmluZyAqLworQXZhaGlSTGlzdCogYXZhaGlfcmxpc3RfcmVtb3ZlKEF2YWhpUkxpc3QgKnIsIHZvaWQgKmRhdGEpOworCisvKiogUmVtb3ZlIHRoZSBzcGVjaWZpZWQgaXRlbSBmcm9tIHRoZSBsaXN0IGFuZCByZXR1cm4gdGhlIG5ldyBiZWdpbm5pbmcgKi8KK0F2YWhpUkxpc3QqIGF2YWhpX3JsaXN0X3JlbW92ZV9ieV9saW5rKEF2YWhpUkxpc3QgKnIsIEF2YWhpUkxpc3QgKm4pOworCitBVkFISV9DX0RFQ0xfRU5ECisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvbW1vbi9zaW1wbGUtd2F0Y2guYyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21tb24vc2ltcGxlLXdhdGNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRmMThkZAotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21tb24vc2ltcGxlLXdhdGNoLmMKQEAgLTAsMCArMSw2NDkgQEAKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3lzL3BvbGwuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImxsaXN0LmgiCisjaW5jbHVkZSAibWFsbG9jLmgiCisjaW5jbHVkZSAidGltZXZhbC5oIgorI2luY2x1ZGUgInNpbXBsZS13YXRjaC5oIgorCitzdHJ1Y3QgQXZhaGlXYXRjaCB7CisgICAgQXZhaGlTaW1wbGVQb2xsICpzaW1wbGVfcG9sbDsKKyAgICBpbnQgZGVhZDsKKworICAgIGludCBpZHg7CisgICAgc3RydWN0IHBvbGxmZCBwb2xsZmQ7CisKKyAgICBBdmFoaVdhdGNoQ2FsbGJhY2sgY2FsbGJhY2s7CisgICAgdm9pZCAqdXNlcmRhdGE7CisKKyAgICBBVkFISV9MTElTVF9GSUVMRFMoQXZhaGlXYXRjaCwgd2F0Y2hlcyk7Cit9OworCitzdHJ1Y3QgQXZhaGlUaW1lb3V0IHsKKyAgICBBdmFoaVNpbXBsZVBvbGwgKnNpbXBsZV9wb2xsOworICAgIGludCBkZWFkOworCisgICAgaW50IGVuYWJsZWQ7CisgICAgc3RydWN0IHRpbWV2YWwgZXhwaXJ5OworCisgICAgQXZhaGlUaW1lb3V0Q2FsbGJhY2sgY2FsbGJhY2s7CisgICAgdm9pZCAgKnVzZXJkYXRhOworCisgICAgQVZBSElfTExJU1RfRklFTERTKEF2YWhpVGltZW91dCwgdGltZW91dHMpOworfTsKKworc3RydWN0IEF2YWhpU2ltcGxlUG9sbCB7CisgICAgQXZhaGlQb2xsIGFwaTsKKyAgICBBdmFoaVBvbGxGdW5jIHBvbGxfZnVuYzsKKyAgICB2b2lkICpwb2xsX2Z1bmNfdXNlcmRhdGE7CisKKyAgICBzdHJ1Y3QgcG9sbGZkKiBwb2xsZmRzOworICAgIGludCBuX3BvbGxmZHMsIG1heF9wb2xsZmRzLCByZWJ1aWxkX3BvbGxmZHM7CisKKyAgICBpbnQgd2F0Y2hfcmVxX2NsZWFudXAsIHRpbWVvdXRfcmVxX2NsZWFudXA7CisgICAgaW50IHF1aXQ7CisgICAgaW50IGV2ZW50c192YWxpZDsKKworICAgIGludCBuX3dhdGNoZXM7CisgICAgQVZBSElfTExJU1RfSEVBRChBdmFoaVdhdGNoLCB3YXRjaGVzKTsKKyAgICBBVkFISV9MTElTVF9IRUFEKEF2YWhpVGltZW91dCwgdGltZW91dHMpOworCisgICAgaW50IHdha2V1cF9waXBlWzJdOworICAgIGludCB3YWtldXBfaXNzdWVkOworCisgICAgaW50IHByZXBhcmVkX3RpbWVvdXQ7CisKKyAgICBlbnVtIHsKKyAgICAgICAgU1RBVEVfSU5JVCwKKyAgICAgICAgU1RBVEVfUFJFUEFSSU5HLAorICAgICAgICBTVEFURV9QUkVQQVJFRCwKKyAgICAgICAgU1RBVEVfUlVOTklORywKKyAgICAgICAgU1RBVEVfUkFOLAorICAgICAgICBTVEFURV9ESVNQQVRDSElORywKKyAgICAgICAgU1RBVEVfRElTUEFUQ0hFRCwKKyAgICAgICAgU1RBVEVfUVVJVCwKKyAgICAgICAgU1RBVEVfRkFJTFVSRQorICAgIH0gc3RhdGU7Cit9OworCit2b2lkIGF2YWhpX3NpbXBsZV9wb2xsX3dha2V1cChBdmFoaVNpbXBsZVBvbGwgKnMpIHsKKyAgICBjaGFyIGMgPSAnVyc7CisgICAgYXNzZXJ0KHMpOworCisgICAgd3JpdGUocy0+d2FrZXVwX3BpcGVbMV0sICZjLCBzaXplb2YoYykpOworICAgIHMtPndha2V1cF9pc3N1ZWQgPSAxOworfQorCitzdGF0aWMgdm9pZCBjbGVhcl93YWtldXAoQXZhaGlTaW1wbGVQb2xsICpzKSB7CisgICAgY2hhciBjWzEwXTsgLyogUmVhZCB0ZW4gYXQgYSB0aW1lICovCisKKyAgICBpZiAoIXMtPndha2V1cF9pc3N1ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIHMtPndha2V1cF9pc3N1ZWQgPSAwOworCisgICAgZm9yKDs7KQorICAgICAgICBpZiAocmVhZChzLT53YWtldXBfcGlwZVswXSwgJmMsIHNpemVvZihjKSkgIT0gc2l6ZW9mKGMpKQorICAgICAgICAgICAgYnJlYWs7Cit9CisKK3N0YXRpYyBpbnQgc2V0X25vbmJsb2NrKGludCBmZCkgeworICAgIGludCBuOworCisgICAgYXNzZXJ0KGZkID49IDApOworCisgICAgaWYgKChuID0gZmNudGwoZmQsIEZfR0VURkwpKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGlmIChuICYgT19OT05CTE9DSykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gZmNudGwoZmQsIEZfU0VURkwsIG58T19OT05CTE9DSyk7Cit9CisKK3N0YXRpYyBBdmFoaVdhdGNoKiB3YXRjaF9uZXcoY29uc3QgQXZhaGlQb2xsICphcGksIGludCBmZCwgQXZhaGlXYXRjaEV2ZW50IGV2ZW50LCBBdmFoaVdhdGNoQ2FsbGJhY2sgY2FsbGJhY2ssIHZvaWQgKnVzZXJkYXRhKSB7CisgICAgQXZhaGlXYXRjaCAqdzsKKyAgICBBdmFoaVNpbXBsZVBvbGwgKnM7CisKKyAgICBhc3NlcnQoYXBpKTsKKyAgICBhc3NlcnQoZmQgPj0gMCk7CisgICAgYXNzZXJ0KGNhbGxiYWNrKTsKKworICAgIHMgPSBhcGktPnVzZXJkYXRhOworICAgIGFzc2VydChzKTsKKworICAgIGlmICghKHcgPSBhdmFoaV9uZXcoQXZhaGlXYXRjaCwgMSkpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIC8qIElmIHRoZXJlIGlzIGEgYmFja2dyb3VuZCB0aHJlYWQgcnVubmluZyB0aGUgcG9sbCgpIGZvciB1cywgdGVsbCBpdCB0byBleGl0IHRoZSBwb2xsKCkgKi8KKyAgICBhdmFoaV9zaW1wbGVfcG9sbF93YWtldXAocyk7CisKKyAgICB3LT5zaW1wbGVfcG9sbCA9IHM7CisgICAgdy0+ZGVhZCA9IDA7CisKKyAgICB3LT5wb2xsZmQuZmQgPSBmZDsKKyAgICB3LT5wb2xsZmQuZXZlbnRzID0gZXZlbnQ7CisgICAgdy0+cG9sbGZkLnJldmVudHMgPSAwOworCisgICAgdy0+Y2FsbGJhY2sgPSBjYWxsYmFjazsKKyAgICB3LT51c2VyZGF0YSA9IHVzZXJkYXRhOworCisgICAgdy0+aWR4ID0gLTE7CisgICAgcy0+cmVidWlsZF9wb2xsZmRzID0gMTsKKworICAgIEFWQUhJX0xMSVNUX1BSRVBFTkQoQXZhaGlXYXRjaCwgd2F0Y2hlcywgcy0+d2F0Y2hlcywgdyk7CisgICAgcy0+bl93YXRjaGVzKys7CisKKyAgICByZXR1cm4gdzsKK30KKworc3RhdGljIHZvaWQgd2F0Y2hfdXBkYXRlKEF2YWhpV2F0Y2ggKncsIEF2YWhpV2F0Y2hFdmVudCBldmVudHMpIHsKKyAgICBhc3NlcnQodyk7CisgICAgYXNzZXJ0KCF3LT5kZWFkKTsKKworICAgIC8qIElmIHRoZXJlIGlzIGEgYmFja2dyb3VuZCB0aHJlYWQgcnVubmluZyB0aGUgcG9sbCgpIGZvciB1cywgdGVsbCBpdCB0byBleGl0IHRoZSBwb2xsKCkgKi8KKyAgICBhdmFoaV9zaW1wbGVfcG9sbF93YWtldXAody0+c2ltcGxlX3BvbGwpOworCisgICAgdy0+cG9sbGZkLmV2ZW50cyA9IGV2ZW50czsKKworICAgIGlmICh3LT5pZHggIT0gLTEpIHsKKyAgICAgICAgYXNzZXJ0KHctPnNpbXBsZV9wb2xsKTsKKyAgICAgICAgdy0+c2ltcGxlX3BvbGwtPnBvbGxmZHNbdy0+aWR4XSA9IHctPnBvbGxmZDsKKyAgICB9IGVsc2UKKyAgICAgICAgdy0+c2ltcGxlX3BvbGwtPnJlYnVpbGRfcG9sbGZkcyA9IDE7Cit9CisKK3N0YXRpYyBBdmFoaVdhdGNoRXZlbnQgd2F0Y2hfZ2V0X2V2ZW50cyhBdmFoaVdhdGNoICp3KSB7CisgICAgYXNzZXJ0KHcpOworICAgIGFzc2VydCghdy0+ZGVhZCk7CisKKyAgICBpZiAody0+aWR4ICE9IC0xICYmIHctPnNpbXBsZV9wb2xsLT5ldmVudHNfdmFsaWQpCisgICAgICAgIHJldHVybiB3LT5zaW1wbGVfcG9sbC0+cG9sbGZkc1t3LT5pZHhdLnJldmVudHM7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX3BvbGxmZChBdmFoaVdhdGNoICp3KSB7CisgICAgYXNzZXJ0KHcpOworCisgICAgaWYgKHctPmlkeCA9PSAtMSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdy0+c2ltcGxlX3BvbGwtPnJlYnVpbGRfcG9sbGZkcyA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIHdhdGNoX2ZyZWUoQXZhaGlXYXRjaCAqdykgeworICAgIGFzc2VydCh3KTsKKworICAgIGFzc2VydCghdy0+ZGVhZCk7CisKKyAgICAvKiBJZiB0aGVyZSBpcyBhIGJhY2tncm91bmQgdGhyZWFkIHJ1bm5pbmcgdGhlIHBvbGwoKSBmb3IgdXMsIHRlbGwgaXQgdG8gZXhpdCB0aGUgcG9sbCgpICovCisgICAgYXZhaGlfc2ltcGxlX3BvbGxfd2FrZXVwKHctPnNpbXBsZV9wb2xsKTsKKworICAgIHJlbW92ZV9wb2xsZmQodyk7CisKKyAgICB3LT5kZWFkID0gMTsKKyAgICB3LT5zaW1wbGVfcG9sbC0+bl93YXRjaGVzIC0tOworICAgIHctPnNpbXBsZV9wb2xsLT53YXRjaF9yZXFfY2xlYW51cCA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIGRlc3Ryb3lfd2F0Y2goQXZhaGlXYXRjaCAqdykgeworICAgIGFzc2VydCh3KTsKKworICAgIHJlbW92ZV9wb2xsZmQodyk7CisgICAgQVZBSElfTExJU1RfUkVNT1ZFKEF2YWhpV2F0Y2gsIHdhdGNoZXMsIHctPnNpbXBsZV9wb2xsLT53YXRjaGVzLCB3KTsKKworICAgIGlmICghdy0+ZGVhZCkKKyAgICAgICAgdy0+c2ltcGxlX3BvbGwtPm5fd2F0Y2hlcyAtLTsKKworICAgIGF2YWhpX2ZyZWUodyk7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFudXBfd2F0Y2hlcyhBdmFoaVNpbXBsZVBvbGwgKnMsIGludCBhbGwpIHsKKyAgICBBdmFoaVdhdGNoICp3LCAqbmV4dDsKKyAgICBhc3NlcnQocyk7CisKKyAgICBmb3IgKHcgPSBzLT53YXRjaGVzOyB3OyB3ID0gbmV4dCkgeworICAgICAgICBuZXh0ID0gdy0+d2F0Y2hlc19uZXh0OworCisgICAgICAgIGlmIChhbGwgfHwgdy0+ZGVhZCkKKyAgICAgICAgICAgIGRlc3Ryb3lfd2F0Y2godyk7CisgICAgfQorCisgICAgcy0+dGltZW91dF9yZXFfY2xlYW51cCA9IDA7Cit9CisKK3N0YXRpYyBBdmFoaVRpbWVvdXQqIHRpbWVvdXRfbmV3KGNvbnN0IEF2YWhpUG9sbCAqYXBpLCBjb25zdCBzdHJ1Y3QgdGltZXZhbCAqdHYsIEF2YWhpVGltZW91dENhbGxiYWNrIGNhbGxiYWNrLCB2b2lkICp1c2VyZGF0YSkgeworICAgIEF2YWhpVGltZW91dCAqdDsKKyAgICBBdmFoaVNpbXBsZVBvbGwgKnM7CisKKyAgICBhc3NlcnQoYXBpKTsKKyAgICBhc3NlcnQoY2FsbGJhY2spOworCisgICAgcyA9IGFwaS0+dXNlcmRhdGE7CisgICAgYXNzZXJ0KHMpOworCisgICAgaWYgKCEodCA9IGF2YWhpX25ldyhBdmFoaVRpbWVvdXQsIDEpKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAvKiBJZiB0aGVyZSBpcyBhIGJhY2tncm91bmQgdGhyZWFkIHJ1bm5pbmcgdGhlIHBvbGwoKSBmb3IgdXMsIHRlbGwgaXQgdG8gZXhpdCB0aGUgcG9sbCgpICovCisgICAgYXZhaGlfc2ltcGxlX3BvbGxfd2FrZXVwKHMpOworCisgICAgdC0+c2ltcGxlX3BvbGwgPSBzOworICAgIHQtPmRlYWQgPSAwOworCisgICAgaWYgKCh0LT5lbmFibGVkID0gISF0dikpCisgICAgICAgIHQtPmV4cGlyeSA9ICp0djsKKworICAgIHQtPmNhbGxiYWNrID0gY2FsbGJhY2s7CisgICAgdC0+dXNlcmRhdGEgPSB1c2VyZGF0YTsKKworICAgIEFWQUhJX0xMSVNUX1BSRVBFTkQoQXZhaGlUaW1lb3V0LCB0aW1lb3V0cywgcy0+dGltZW91dHMsIHQpOworICAgIHJldHVybiB0OworfQorCitzdGF0aWMgdm9pZCB0aW1lb3V0X3VwZGF0ZShBdmFoaVRpbWVvdXQgKnQsIGNvbnN0IHN0cnVjdCB0aW1ldmFsICp0dikgeworICAgIGFzc2VydCh0KTsKKyAgICBhc3NlcnQoIXQtPmRlYWQpOworCisgICAgLyogSWYgdGhlcmUgaXMgYSBiYWNrZ3JvdW5kIHRocmVhZCBydW5uaW5nIHRoZSBwb2xsKCkgZm9yIHVzLCB0ZWxsIGl0IHRvIGV4aXQgdGhlIHBvbGwoKSAqLworICAgIGF2YWhpX3NpbXBsZV9wb2xsX3dha2V1cCh0LT5zaW1wbGVfcG9sbCk7CisKKyAgICBpZiAoKHQtPmVuYWJsZWQgPSAhIXR2KSkKKyAgICAgICAgdC0+ZXhwaXJ5ID0gKnR2OworfQorCitzdGF0aWMgdm9pZCB0aW1lb3V0X2ZyZWUoQXZhaGlUaW1lb3V0ICp0KSB7CisgICAgYXNzZXJ0KHQpOworICAgIGFzc2VydCghdC0+ZGVhZCk7CisKKyAgICAvKiBJZiB0aGVyZSBpcyBhIGJhY2tncm91bmQgdGhyZWFkIHJ1bm5pbmcgdGhlIHBvbGwoKSBmb3IgdXMsIHRlbGwgaXQgdG8gZXhpdCB0aGUgcG9sbCgpICovCisgICAgYXZhaGlfc2ltcGxlX3BvbGxfd2FrZXVwKHQtPnNpbXBsZV9wb2xsKTsKKworICAgIHQtPmRlYWQgPSAxOworICAgIHQtPnNpbXBsZV9wb2xsLT50aW1lb3V0X3JlcV9jbGVhbnVwID0gMTsKK30KKworCitzdGF0aWMgdm9pZCBkZXN0cm95X3RpbWVvdXQoQXZhaGlUaW1lb3V0ICp0KSB7CisgICAgYXNzZXJ0KHQpOworCisgICAgQVZBSElfTExJU1RfUkVNT1ZFKEF2YWhpVGltZW91dCwgdGltZW91dHMsIHQtPnNpbXBsZV9wb2xsLT50aW1lb3V0cywgdCk7CisKKyAgICBhdmFoaV9mcmVlKHQpOworfQorCitzdGF0aWMgdm9pZCBjbGVhbnVwX3RpbWVvdXRzKEF2YWhpU2ltcGxlUG9sbCAqcywgaW50IGFsbCkgeworICAgIEF2YWhpVGltZW91dCAqdCwgKm5leHQ7CisgICAgYXNzZXJ0KHMpOworCisgICAgZm9yICh0ID0gcy0+dGltZW91dHM7IHQ7IHQgPSBuZXh0KSB7CisgICAgICAgIG5leHQgPSB0LT50aW1lb3V0c19uZXh0OworCisgICAgICAgIGlmIChhbGwgfHwgdC0+ZGVhZCkKKyAgICAgICAgICAgIGRlc3Ryb3lfdGltZW91dCh0KTsKKyAgICB9CisKKyAgICBzLT50aW1lb3V0X3JlcV9jbGVhbnVwID0gMDsKK30KKworQXZhaGlTaW1wbGVQb2xsICphdmFoaV9zaW1wbGVfcG9sbF9uZXcodm9pZCkgeworICAgIEF2YWhpU2ltcGxlUG9sbCAqczsKKworICAgIGlmICghKHMgPSBhdmFoaV9uZXcoQXZhaGlTaW1wbGVQb2xsLCAxKSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKHBpcGUocy0+d2FrZXVwX3BpcGUpIDwgMCkgeworICAgICAgICBhdmFoaV9mcmVlKHMpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBzZXRfbm9uYmxvY2socy0+d2FrZXVwX3BpcGVbMF0pOworICAgIHNldF9ub25ibG9jayhzLT53YWtldXBfcGlwZVsxXSk7CisKKyAgICBzLT5hcGkudXNlcmRhdGEgPSBzOworCisgICAgcy0+YXBpLndhdGNoX25ldyA9IHdhdGNoX25ldzsKKyAgICBzLT5hcGkud2F0Y2hfZnJlZSA9IHdhdGNoX2ZyZWU7CisgICAgcy0+YXBpLndhdGNoX3VwZGF0ZSA9IHdhdGNoX3VwZGF0ZTsKKyAgICBzLT5hcGkud2F0Y2hfZ2V0X2V2ZW50cyA9IHdhdGNoX2dldF9ldmVudHM7CisKKyAgICBzLT5hcGkudGltZW91dF9uZXcgPSB0aW1lb3V0X25ldzsKKyAgICBzLT5hcGkudGltZW91dF9mcmVlID0gdGltZW91dF9mcmVlOworICAgIHMtPmFwaS50aW1lb3V0X3VwZGF0ZSA9IHRpbWVvdXRfdXBkYXRlOworCisgICAgcy0+cG9sbGZkcyA9IE5VTEw7CisgICAgcy0+bWF4X3BvbGxmZHMgPSBzLT5uX3BvbGxmZHMgPSAwOworICAgIHMtPnJlYnVpbGRfcG9sbGZkcyA9IDE7CisgICAgcy0+cXVpdCA9IDA7CisgICAgcy0+bl93YXRjaGVzID0gMDsKKyAgICBzLT5ldmVudHNfdmFsaWQgPSAwOworCisgICAgcy0+d2F0Y2hfcmVxX2NsZWFudXAgPSAwOworICAgIHMtPnRpbWVvdXRfcmVxX2NsZWFudXAgPSAwOworCisgICAgcy0+cHJlcGFyZWRfdGltZW91dCA9IDA7CisKKyAgICBzLT5zdGF0ZSA9IFNUQVRFX0lOSVQ7CisKKyAgICBzLT53YWtldXBfaXNzdWVkID0gMDsKKworICAgIGF2YWhpX3NpbXBsZV9wb2xsX3NldF9mdW5jKHMsIE5VTEwsIE5VTEwpOworCisgICAgQVZBSElfTExJU1RfSEVBRF9JTklUKEF2YWhpV2F0Y2gsIHMtPndhdGNoZXMpOworICAgIEFWQUhJX0xMSVNUX0hFQURfSU5JVChBdmFoaVRpbWVvdXQsIHMtPnRpbWVvdXRzKTsKKworICAgIHJldHVybiBzOworfQorCit2b2lkIGF2YWhpX3NpbXBsZV9wb2xsX2ZyZWUoQXZhaGlTaW1wbGVQb2xsICpzKSB7CisgICAgYXNzZXJ0KHMpOworCisgICAgY2xlYW51cF90aW1lb3V0cyhzLCAxKTsKKyAgICBjbGVhbnVwX3dhdGNoZXMocywgMSk7CisgICAgYXNzZXJ0KHMtPm5fd2F0Y2hlcyA9PSAwKTsKKworICAgIGF2YWhpX2ZyZWUocy0+cG9sbGZkcyk7CisKKyAgICBpZiAocy0+d2FrZXVwX3BpcGVbMF0gPj0gMCkKKyAgICAgICAgY2xvc2Uocy0+d2FrZXVwX3BpcGVbMF0pOworCisgICAgaWYgKHMtPndha2V1cF9waXBlWzFdID49IDApCisgICAgICAgIGNsb3NlKHMtPndha2V1cF9waXBlWzFdKTsKKworICAgIGF2YWhpX2ZyZWUocyk7Cit9CisKK3N0YXRpYyBpbnQgcmVidWlsZChBdmFoaVNpbXBsZVBvbGwgKnMpIHsKKyAgICBBdmFoaVdhdGNoICp3OworICAgIGludCBpZHg7CisKKyAgICBhc3NlcnQocyk7CisKKyAgICBpZiAocy0+bl93YXRjaGVzKzEgPiBzLT5tYXhfcG9sbGZkcykgeworICAgICAgICBzdHJ1Y3QgcG9sbGZkICpuOworCisgICAgICAgIHMtPm1heF9wb2xsZmRzID0gcy0+bl93YXRjaGVzICsgMTA7CisKKyAgICAgICAgaWYgKCEobiA9IGF2YWhpX3JlYWxsb2Mocy0+cG9sbGZkcywgc2l6ZW9mKHN0cnVjdCBwb2xsZmQpICogcy0+bWF4X3BvbGxmZHMpKSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKworICAgICAgICBzLT5wb2xsZmRzID0gbjsKKyAgICB9CisKKworICAgIHMtPnBvbGxmZHNbMF0uZmQgPSBzLT53YWtldXBfcGlwZVswXTsKKyAgICBzLT5wb2xsZmRzWzBdLmV2ZW50cyA9IFBPTExJTjsKKyAgICBzLT5wb2xsZmRzWzBdLnJldmVudHMgPSAwOworCisgICAgaWR4ID0gMTsKKworICAgIGZvciAodyA9IHMtPndhdGNoZXM7IHc7IHcgPSB3LT53YXRjaGVzX25leHQpIHsKKworICAgICAgICBpZih3LT5kZWFkKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgYXNzZXJ0KHctPmlkeCA8IHMtPm1heF9wb2xsZmRzKTsKKyAgICAgICAgcy0+cG9sbGZkc1t3LT5pZHggPSBpZHgrK10gPSB3LT5wb2xsZmQ7CisgICAgfQorCisgICAgcy0+bl9wb2xsZmRzID0gaWR4OworICAgIHMtPmV2ZW50c192YWxpZCA9IDA7CisgICAgcy0+cmVidWlsZF9wb2xsZmRzID0gMDsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgQXZhaGlUaW1lb3V0KiBmaW5kX25leHRfdGltZW91dChBdmFoaVNpbXBsZVBvbGwgKnMpIHsKKyAgICBBdmFoaVRpbWVvdXQgKnQsICpuID0gTlVMTDsKKyAgICBhc3NlcnQocyk7CisKKyAgICBmb3IgKHQgPSBzLT50aW1lb3V0czsgdDsgdCA9IHQtPnRpbWVvdXRzX25leHQpIHsKKworICAgICAgICBpZiAodC0+ZGVhZCB8fCAhdC0+ZW5hYmxlZCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICghbiB8fCBhdmFoaV90aW1ldmFsX2NvbXBhcmUoJnQtPmV4cGlyeSwgJm4tPmV4cGlyeSkgPCAwKQorICAgICAgICAgICAgbiA9IHQ7CisgICAgfQorCisgICAgcmV0dXJuIG47Cit9CisKK3N0YXRpYyB2b2lkIHRpbWVvdXRfY2FsbGJhY2soQXZhaGlUaW1lb3V0ICp0KSB7CisgICAgYXNzZXJ0KHQpOworICAgIGFzc2VydCghdC0+ZGVhZCk7CisgICAgYXNzZXJ0KHQtPmVuYWJsZWQpOworCisgICAgdC0+ZW5hYmxlZCA9IDA7CisgICAgdC0+Y2FsbGJhY2sodCwgdC0+dXNlcmRhdGEpOworfQorCitpbnQgYXZhaGlfc2ltcGxlX3BvbGxfcHJlcGFyZShBdmFoaVNpbXBsZVBvbGwgKnMsIGludCB0aW1lb3V0KSB7CisgICAgQXZhaGlUaW1lb3V0ICpuZXh0X3RpbWVvdXQ7CisKKyAgICBhc3NlcnQocyk7CisgICAgYXNzZXJ0KHMtPnN0YXRlID09IFNUQVRFX0lOSVQgfHwgcy0+c3RhdGUgPT0gU1RBVEVfRElTUEFUQ0hFRCB8fCBzLT5zdGF0ZSA9PSBTVEFURV9GQUlMVVJFKTsKKyAgICBzLT5zdGF0ZSA9IFNUQVRFX1BSRVBBUklORzsKKworICAgIC8qIENsZWFyIHBlbmRpbmcgd2FrZXVwIHJlcXVlc3RzICovCisgICAgY2xlYXJfd2FrZXVwKHMpOworCisgICAgLyogQ2xlYW51cCB0aGluZ3MgZmlyc3QgKi8KKyAgICBpZiAocy0+d2F0Y2hfcmVxX2NsZWFudXApCisgICAgICAgIGNsZWFudXBfd2F0Y2hlcyhzLCAwKTsKKworICAgIGlmIChzLT50aW1lb3V0X3JlcV9jbGVhbnVwKQorICAgICAgICBjbGVhbnVwX3RpbWVvdXRzKHMsIDApOworCisgICAgLyogQ2hlY2sgd2hldGhlciBhIHF1aXQgd2FzIHJlcXVlc3RlZCAqLworICAgIGlmIChzLT5xdWl0KSB7CisgICAgICAgIHMtPnN0YXRlID0gU1RBVEVfUVVJVDsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgLyogRG8gd2UgbmVlZCB0byByZWJ1aWxkIG91ciBhcnJheSBvZiBwb2xsZmRzPyAqLworICAgIGlmIChzLT5yZWJ1aWxkX3BvbGxmZHMpCisgICAgICAgIGlmIChyZWJ1aWxkKHMpIDwgMCkgeworICAgICAgICAgICAgcy0+c3RhdGUgPSBTVEFURV9GQUlMVVJFOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAvKiBDYWxjdWxhdGUgdGhlIHdha2V1cCB0aW1lICovCisgICAgaWYgKChuZXh0X3RpbWVvdXQgPSBmaW5kX25leHRfdGltZW91dChzKSkpIHsKKyAgICAgICAgc3RydWN0IHRpbWV2YWwgbm93OworICAgICAgICBpbnQgdDsKKyAgICAgICAgQXZhaGlVc2VjIHVzZWM7CisKKyAgICAgICAgaWYgKG5leHRfdGltZW91dC0+ZXhwaXJ5LnR2X3NlYyA9PSAwICYmCisgICAgICAgICAgICBuZXh0X3RpbWVvdXQtPmV4cGlyeS50dl91c2VjID09IDApIHsKKworICAgICAgICAgICAgLyogSnVzdCBhIHNob3J0Y3V0IHNvIHRoYXQgd2UgZG9uJ3QgbmVlZCB0byBjYWxsIGdldHRpbWVvZmRheSgpICovCisgICAgICAgICAgICB0aW1lb3V0ID0gMDsKKyAgICAgICAgICAgIGdvdG8gZmluaXNoOworICAgICAgICB9CisKKyAgICAgICAgZ2V0dGltZW9mZGF5KCZub3csIE5VTEwpOworICAgICAgICB1c2VjID0gYXZhaGlfdGltZXZhbF9kaWZmKCZuZXh0X3RpbWVvdXQtPmV4cGlyeSwgJm5vdyk7CisKKyAgICAgICAgaWYgKHVzZWMgPD0gMCkgeworICAgICAgICAgICAgLyogVGltZW91dCBlbGFwc2VkICovCisKKyAgICAgICAgICAgIHRpbWVvdXQgPSAwOworICAgICAgICAgICAgZ290byBmaW5pc2g7CisgICAgICAgIH0KKworICAgICAgICAvKiBDYWxjdWxhdGUgc2xlZXAgdGltZS4gV2UgYWRkIDFtcyBiZWNhdXNlIG90aGVyd2lzZSB3ZSdkCisgICAgICAgICAqIHdha2UgdXAgdG9vIGVhcmx5IG1vc3Qgb2YgdGhlIHRpbWUgKi8KKyAgICAgICAgdCA9IChpbnQpICh1c2VjIC8gMTAwMCkgKyAxOworCisgICAgICAgIGlmICh0aW1lb3V0IDwgMCB8fCB0aW1lb3V0ID4gdCkKKyAgICAgICAgICAgIHRpbWVvdXQgPSB0OworICAgIH0KKworZmluaXNoOgorICAgIHMtPnByZXBhcmVkX3RpbWVvdXQgPSB0aW1lb3V0OworICAgIHMtPnN0YXRlID0gU1RBVEVfUFJFUEFSRUQ7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBhdmFoaV9zaW1wbGVfcG9sbF9ydW4oQXZhaGlTaW1wbGVQb2xsICpzKSB7CisgICAgYXNzZXJ0KHMpOworICAgIGFzc2VydChzLT5zdGF0ZSA9PSBTVEFURV9QUkVQQVJFRCB8fCBzLT5zdGF0ZSA9PSBTVEFURV9GQUlMVVJFKTsKKworICAgIHMtPnN0YXRlID0gU1RBVEVfUlVOTklORzsKKworICAgIGZvciAoOzspIHsKKyAgICAgICAgZXJybm8gPSAwOworCisgICAgICAgIGlmIChzLT5wb2xsX2Z1bmMocy0+cG9sbGZkcywgcy0+bl9wb2xsZmRzLCBzLT5wcmVwYXJlZF90aW1lb3V0LCBzLT5wb2xsX2Z1bmNfdXNlcmRhdGEpIDwgMCkgeworCisgICAgICAgICAgICBpZiAoZXJybm8gPT0gRUlOVFIpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIHMtPnN0YXRlID0gU1RBVEVfRkFJTFVSRTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8qIFRoZSBwb2xsIGV2ZW50cyBhcmUgbm93IHZhbGlkIGFnYWluICovCisgICAgcy0+ZXZlbnRzX3ZhbGlkID0gMTsKKworICAgIC8qIFVwZGF0ZSBzdGF0ZSAqLworICAgIHMtPnN0YXRlID0gU1RBVEVfUkFOOworICAgIHJldHVybiAwOworfQorCitpbnQgYXZhaGlfc2ltcGxlX3BvbGxfZGlzcGF0Y2goQXZhaGlTaW1wbGVQb2xsICpzKSB7CisgICAgQXZhaGlUaW1lb3V0ICpuZXh0X3RpbWVvdXQ7CisgICAgQXZhaGlXYXRjaCAqdzsKKworICAgIGFzc2VydChzKTsKKyAgICBhc3NlcnQocy0+c3RhdGUgPT0gU1RBVEVfUkFOKTsKKyAgICBzLT5zdGF0ZSA9IFNUQVRFX0RJU1BBVENISU5HOworCisgICAgLyogV2UgZXhlY3V0ZSBvbmx5IG9uIGNhbGxiYWNrIGluIGV2ZXJ5IGl0ZXJhdGlvbiAqLworCisgICAgLyogQ2hlY2sgd2hldGhlciB0aGUgd2FrZXVwIHRpbWUgaGFzIGJlZW4gcmVhY2hlZCBub3cgKi8KKyAgICBpZiAoKG5leHRfdGltZW91dCA9IGZpbmRfbmV4dF90aW1lb3V0KHMpKSkgeworCisgICAgICAgIGlmIChuZXh0X3RpbWVvdXQtPmV4cGlyeS50dl9zZWMgPT0gMCAmJiBuZXh0X3RpbWVvdXQtPmV4cGlyeS50dl91c2VjID09IDApIHsKKworICAgICAgICAgICAgLyogSnVzdCBhIHNob3J0Y3V0IHNvIHRoYXQgd2UgZG9uJ3QgbmVlZCB0byBjYWxsIGdldHRpbWVvZmRheSgpICovCisgICAgICAgICAgICB0aW1lb3V0X2NhbGxiYWNrKG5leHRfdGltZW91dCk7CisgICAgICAgICAgICBnb3RvIGZpbmlzaDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhdmFoaV9hZ2UoJm5leHRfdGltZW91dC0+ZXhwaXJ5KSA+PSAwKSB7CisKKyAgICAgICAgICAgIC8qIFRpbWVvdXQgZWxhcHNlZCAqLworICAgICAgICAgICAgdGltZW91dF9jYWxsYmFjayhuZXh0X3RpbWVvdXQpOworICAgICAgICAgICAgZ290byBmaW5pc2g7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBMb29rIGZvciBzb21lIGtpbmQgb2YgSS9PIGV2ZW50ICovCisgICAgZm9yICh3ID0gcy0+d2F0Y2hlczsgdzsgdyA9IHctPndhdGNoZXNfbmV4dCkgeworCisgICAgICAgIGlmICh3LT5kZWFkKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgYXNzZXJ0KHctPmlkeCA+PSAwKTsKKyAgICAgICAgYXNzZXJ0KHctPmlkeCA8IHMtPm5fcG9sbGZkcyk7CisKKyAgICAgICAgaWYgKHMtPnBvbGxmZHNbdy0+aWR4XS5yZXZlbnRzICE9IDApIHsKKyAgICAgICAgICAgIHctPmNhbGxiYWNrKHcsIHctPnBvbGxmZC5mZCwgcy0+cG9sbGZkc1t3LT5pZHhdLnJldmVudHMsIHctPnVzZXJkYXRhKTsKKyAgICAgICAgICAgIGdvdG8gZmluaXNoOworICAgICAgICB9CisgICAgfQorCitmaW5pc2g6CisKKyAgICBzLT5zdGF0ZSA9IFNUQVRFX0RJU1BBVENIRUQ7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBhdmFoaV9zaW1wbGVfcG9sbF9pdGVyYXRlKEF2YWhpU2ltcGxlUG9sbCAqcywgaW50IHRpbWVvdXQpIHsKKyAgICBpbnQgcjsKKworICAgIGlmICgociA9IGF2YWhpX3NpbXBsZV9wb2xsX3ByZXBhcmUocywgdGltZW91dCkpICE9IDApCisgICAgICAgIHJldHVybiByOworCisgICAgaWYgKChyID0gYXZhaGlfc2ltcGxlX3BvbGxfcnVuKHMpKSAhPSAwKQorICAgICAgICByZXR1cm4gcjsKKworICAgIGlmICgociA9IGF2YWhpX3NpbXBsZV9wb2xsX2Rpc3BhdGNoKHMpKSAhPSAwKQorICAgICAgICByZXR1cm4gcjsKKworICAgIHJldHVybiAwOworfQorCit2b2lkIGF2YWhpX3NpbXBsZV9wb2xsX3F1aXQoQXZhaGlTaW1wbGVQb2xsICpzKSB7CisgICAgYXNzZXJ0KHMpOworCisgICAgcy0+cXVpdCA9IDE7CisKKyAgICAvKiBJZiB0aGVyZSBpcyBhIGJhY2tncm91bmQgdGhyZWFkIHJ1bm5pbmcgdGhlIHBvbGwoKSBmb3IgdXMsIHRlbGwgaXQgdG8gZXhpdCB0aGUgcG9sbCgpICovCisgICAgYXZhaGlfc2ltcGxlX3BvbGxfd2FrZXVwKHMpOworfQorCitjb25zdCBBdmFoaVBvbGwqIGF2YWhpX3NpbXBsZV9wb2xsX2dldChBdmFoaVNpbXBsZVBvbGwgKnMpIHsKKyAgICBhc3NlcnQocyk7CisKKyAgICByZXR1cm4gJnMtPmFwaTsKK30KKworc3RhdGljIGludCBzeXN0ZW1fcG9sbChzdHJ1Y3QgcG9sbGZkICp1ZmRzLCB1bnNpZ25lZCBpbnQgbmZkcywgaW50IHRpbWVvdXQsIEFWQUhJX0dDQ19VTlVTRUQgdm9pZCAqdXNlcmRhdGEpIHsKKyAgICByZXR1cm4gcG9sbCh1ZmRzLCBuZmRzLCB0aW1lb3V0KTsKK30KKwordm9pZCBhdmFoaV9zaW1wbGVfcG9sbF9zZXRfZnVuYyhBdmFoaVNpbXBsZVBvbGwgKnMsIEF2YWhpUG9sbEZ1bmMgZnVuYywgdm9pZCAqdXNlcmRhdGEpIHsKKyAgICBhc3NlcnQocyk7CisKKyAgICBzLT5wb2xsX2Z1bmMgPSBmdW5jID8gZnVuYyA6IHN5c3RlbV9wb2xsOworICAgIHMtPnBvbGxfZnVuY191c2VyZGF0YSA9IGZ1bmMgPyB1c2VyZGF0YSA6IE5VTEw7CisKKyAgICAvKiBJZiB0aGVyZSBpcyBhIGJhY2tncm91bmQgdGhyZWFkIHJ1bm5pbmcgdGhlIHBvbGwoKSBmb3IgdXMsIHRlbGwgaXQgdG8gZXhpdCB0aGUgcG9sbCgpICovCisgICAgYXZhaGlfc2ltcGxlX3BvbGxfd2FrZXVwKHMpOworfQorCitpbnQgYXZhaGlfc2ltcGxlX3BvbGxfbG9vcChBdmFoaVNpbXBsZVBvbGwgKnMpIHsKKyAgICBpbnQgcjsKKworICAgIGFzc2VydChzKTsKKworICAgIGZvciAoOzspCisgICAgICAgIGlmICgociA9IGF2YWhpX3NpbXBsZV9wb2xsX2l0ZXJhdGUocywgLTEpKSAhPSAwKQorICAgICAgICAgICAgaWYgKHIgPj0gMCB8fCBlcnJubyAhPSBFSU5UUikKKyAgICAgICAgICAgICAgICByZXR1cm4gcjsKK30KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21tb24vc2ltcGxlLXdhdGNoLmggYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tbW9uL3NpbXBsZS13YXRjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyYzE5MDUKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tbW9uL3NpbXBsZS13YXRjaC5oCkBAIC0wLDAgKzEsODUgQEAKKyNpZm5kZWYgZm9vc2ltcGxld2F0Y2hoZm9vCisjZGVmaW5lIGZvb3NpbXBsZXdhdGNoaGZvbworCisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKy8qKiBcZmlsZSBzaW1wbGUtd2F0Y2guaCBTaW1wbGUgcG9sbCgpIGJhc2VkIG1haW4gbG9vcCBpbXBsZW1lbnRhdGlvbiAqLworCisjaW5jbHVkZSA8c3lzL3BvbGwuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vY2RlY2wuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vd2F0Y2guaD4KKworQVZBSElfQ19ERUNMX0JFR0lOCisKKy8qKiBBIG1haW4gbG9vcCBvYmplY3QuIE1haW4gbG9vcHMgb2YgdGhpcyB0eXBlIGFyZW4ndCB2ZXJ5IGZsZXhpYmxlCisgKiBzaW5jZSB0aGV5IG9ubHkgc3VwcG9ydCBhIHNpbmdsZSB3YWtldXAgdHlwZS4gTmV2ZXJ0aGVsZXNzIGl0CisgKiBzaG91bGQgc3VmZmljZSBmb3Igc21hbGwgdGVzdCBhbmQgZXhhbXBsZSBhcHBsaWNhdGlvbnMuICAqLwordHlwZWRlZiBzdHJ1Y3QgQXZhaGlTaW1wbGVQb2xsIEF2YWhpU2ltcGxlUG9sbDsKKworLyoqIENyZWF0ZSBhIG5ldyBtYWluIGxvb3Agb2JqZWN0ICovCitBdmFoaVNpbXBsZVBvbGwgKmF2YWhpX3NpbXBsZV9wb2xsX25ldyh2b2lkKTsKKworLyoqIEZyZWUgYSBtYWluIGxvb3Agb2JqZWN0ICovCit2b2lkIGF2YWhpX3NpbXBsZV9wb2xsX2ZyZWUoQXZhaGlTaW1wbGVQb2xsICpzKTsKKworLyoqIFJldHVybiB0aGUgYWJzdHJhY3RlZCBwb2xsIEFQSSBvYmplY3QgZm9yIHRoaXMgbWFpbiBsb29wCisgKiBvYmplY3QuIFRoZSBpcyB3aWxsIHJldHVybiB0aGUgc2FtZSBwb2ludGVyIGVhY2ggdGltZSBpdCBpcworICogY2FsbGVkLiAqLworY29uc3QgQXZhaGlQb2xsKiBhdmFoaV9zaW1wbGVfcG9sbF9nZXQoQXZhaGlTaW1wbGVQb2xsICpzKTsKKworLyoqIFJ1biBhIHNpbmdsZSBtYWluIGxvb3AgaXRlcmF0aW9uIG9mIHRoaXMgbWFpbiBsb29wLiBJZiBzbGVlcF90aW1lCitpcyA8IDAgdGhpcyB3aWxsIGJsb2NrIHVudGlsIGFueSBvZiB0aGUgcmVnaXN0ZXJlZCBldmVudHMgaGFwcGVucywKK3RoZW4gaXQgd2lsbCBleGVjdXRlIHRoZSBhdHRhY2hlZCBjYWxsYmFjayBmdW5jdGlvbi4gSWYgc2xlZXBfdGltZSBpcworMCB0aGUgcm91dGluZSBqdXN0IGNoZWNrcyBpZiBhbnkgZXZlbnQgaXMgcGVuZGluZy4gSWYgeWVzIHRoZSBhdHRhY2hlZAorY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkLCBvdGhlcndpc2UgdGhlIGZ1bmN0aW9uIHJldHVybnMKK2ltbWVkaWF0ZWx5LiBJZiBzbGVlcF90aW1lID4gMCB0aGUgZnVuY3Rpb24gd2lsbCBibG9jayBmb3IgYXQgbW9zdCB0aGUKK3NwZWNpZmllZCB0aW1lIGluIG1zZWNzLiBSZXR1cm5zIC0xIG9uIGVycm9yLCAwIG9uIHN1Y2Nlc3MgYW5kIDEgaWYgYQorcXVpdCByZXF1ZXN0IGhhcyBiZWVuIHNjaGVkdWxlZC4gVXN1YWxseSB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQKK2luIGEgbG9vcCB1bnRpbCBpdCByZXR1cm5zIGEgbm9uLXplcm8gdmFsdWUqLworaW50IGF2YWhpX3NpbXBsZV9wb2xsX2l0ZXJhdGUoQXZhaGlTaW1wbGVQb2xsICpzLCBpbnQgc2xlZXBfdGltZSk7CisKKy8qKiBSZXF1ZXN0IHRoYXQgdGhlIG1haW4gbG9vcCBxdWl0cy4gSWYgdGhpcyBpcyBjYWxsZWQgdGhlIG5leHQKKyBjYWxsIHRvIGF2YWhpX3NpbXBsZV9wb2xsX2l0ZXJhdGUoKSB3aWxsIHJldHVybiAxICovCit2b2lkIGF2YWhpX3NpbXBsZV9wb2xsX3F1aXQoQXZhaGlTaW1wbGVQb2xsICpzKTsKKworLyoqIFByb3RvdHlwZSBmb3IgYSBwb2xsKCkgdHlwZSBmdW5jdGlvbiAqLwordHlwZWRlZiBpbnQgKCpBdmFoaVBvbGxGdW5jKShzdHJ1Y3QgcG9sbGZkICp1ZmRzLCB1bnNpZ25lZCBpbnQgbmZkcywgaW50IHRpbWVvdXQsIHZvaWQgKnVzZXJkYXRhKTsKKworLyoqIFJlcGxhY2UgdGhlIGludGVybmFsbHkgdXNlZCBwb2xsKCkgZnVuY3Rpb24uIEJ5IGRlZmF1bHQgdGhlIHN5c3RlbSdzIHBvbGwoKSB3aWxsIGJlIHVzZWQgKi8KK3ZvaWQgYXZhaGlfc2ltcGxlX3BvbGxfc2V0X2Z1bmMoQXZhaGlTaW1wbGVQb2xsICpzLCBBdmFoaVBvbGxGdW5jIGZ1bmMsIHZvaWQgKnVzZXJkYXRhKTsKKworLyoqIFRoZSBmaXJzdCBzdGFnZSBvZiBhdmFoaV9zaW1wbGVfcG9sbF9pdGVyYXRlKCksIHVzZSB0aGlzIGZ1bmN0aW9uIG9ubHkgaWYgeW91IGtub3cgd2hhdCB5b3UgZG8gKi8KK2ludCBhdmFoaV9zaW1wbGVfcG9sbF9wcmVwYXJlKEF2YWhpU2ltcGxlUG9sbCAqcywgaW50IHRpbWVvdXQpOworCisvKiogVGhlIHNlY29uZCBzdGFnZSBvZiBhdmFoaV9zaW1wbGVfcG9sbF9pdGVyYXRlKCksIHVzZSB0aGlzIGZ1bmN0aW9uIG9ubHkgaWYgeW91IGtub3cgd2hhdCB5b3UgZG8gKi8KK2ludCBhdmFoaV9zaW1wbGVfcG9sbF9ydW4oQXZhaGlTaW1wbGVQb2xsICpzKTsKKworLyoqIFRoZSB0aGlyZCBhbmQgZmluYWwgc3RhZ2Ugb2YgYXZhaGlfc2ltcGxlX3BvbGxfaXRlcmF0ZSgpLCB1c2UgdGhpcyBmdW5jdGlvbiBvbmx5IGlmIHlvdSBrbm93IHdoYXQgeW91IGRvICovCitpbnQgYXZhaGlfc2ltcGxlX3BvbGxfZGlzcGF0Y2goQXZhaGlTaW1wbGVQb2xsICpzKTsKKworLyoqIENhbGwgYXZhaGlfc2ltcGxlX3BvbGxfaXRlcmF0ZSgpIGluIGEgbG9vcCBhbmQgcmV0dXJuIGlmIGl0IHJldHVybnMgbm9uLXplcm8gKi8KK2ludCBhdmFoaV9zaW1wbGVfcG9sbF9sb29wKEF2YWhpU2ltcGxlUG9sbCAqcyk7CisKKy8qKiBXYWtldXAgdGhlIG1haW4gbG9vcC4gKGZvciB0aHJlYWRlZCBlbnZpcm9ubWVudHMpICovCit2b2lkIGF2YWhpX3NpbXBsZV9wb2xsX3dha2V1cChBdmFoaVNpbXBsZVBvbGwgKnMpOworCitBVkFISV9DX0RFQ0xfRU5ECisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvbW1vbi9zdHJsc3QtdGVzdC5jIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbW1vbi9zdHJsc3QtdGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5NDViMzcKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tbW9uL3N0cmxzdC10ZXN0LmMKQEAgLTAsMCArMSwxMjcgQEAKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKworI2luY2x1ZGUgInN0cmxzdC5oIgorI2luY2x1ZGUgIm1hbGxvYy5oIgorCitpbnQgbWFpbihBVkFISV9HQ0NfVU5VU0VEIGludCBhcmdjLCBBVkFISV9HQ0NfVU5VU0VEIGNoYXIgKmFyZ3ZbXSkgeworICAgIGNoYXIgKnQsICp2OworICAgIHVpbnQ4X3QgZGF0YVsxMDI0XTsKKyAgICBBdmFoaVN0cmluZ0xpc3QgKmEgPSBOVUxMLCAqYiwgKnA7CisgICAgc2l6ZV90IHNpemUsIG47CisgICAgaW50IHI7CisKKyAgICBhID0gYXZhaGlfc3RyaW5nX2xpc3RfbmV3KCJwcmVmaXgiLCAiYSIsICJiIiwgTlVMTCk7CisKKyAgICBhID0gYXZhaGlfc3RyaW5nX2xpc3RfYWRkKGEsICJzdGFydCIpOworICAgIGEgPSBhdmFoaV9zdHJpbmdfbGlzdF9hZGQoYSwgImZvbz05OSIpOworICAgIGEgPSBhdmFoaV9zdHJpbmdfbGlzdF9hZGQoYSwgImJhciIpOworICAgIGEgPSBhdmFoaV9zdHJpbmdfbGlzdF9hZGQoYSwgIiIpOworICAgIGEgPSBhdmFoaV9zdHJpbmdfbGlzdF9hZGQoYSwgIiIpOworICAgIGEgPSBhdmFoaV9zdHJpbmdfbGlzdF9hZGQoYSwgInF1dXgiKTsKKyAgICBhID0gYXZhaGlfc3RyaW5nX2xpc3RfYWRkKGEsICIiKTsKKyAgICBhID0gYXZhaGlfc3RyaW5nX2xpc3RfYWRkX2FyYml0cmFyeShhLCAoY29uc3QgdWludDhfdCopICJudWxsXDBudWxsIiwgOSk7CisgICAgYSA9IGF2YWhpX3N0cmluZ19saXN0X2FkZF9wcmludGYoYSwgInNldmVuPSVpICVjIiwgNywgJ3gnKTsKKyAgICBhID0gYXZhaGlfc3RyaW5nX2xpc3RfYWRkX3BhaXIoYSwgImJsdWJiIiwgImJsYWEiKTsKKyAgICBhID0gYXZhaGlfc3RyaW5nX2xpc3RfYWRkX3BhaXIoYSwgInV4a251cnoiLCBOVUxMKTsKKyAgICBhID0gYXZhaGlfc3RyaW5nX2xpc3RfYWRkX3BhaXJfYXJiaXRyYXJ5KGEsICJ1eGtudXJ6MiIsIChjb25zdCB1aW50OF90KikgImJsYWZhc2VsXDBvZXJrcyIsIDE0KTsKKworICAgIGEgPSBhdmFoaV9zdHJpbmdfbGlzdF9hZGQoYSwgImVuZCIpOworCisgICAgdCA9IGF2YWhpX3N0cmluZ19saXN0X3RvX3N0cmluZyhhKTsKKyAgICBwcmludGYoIi0tJXMtLVxuIiwgdCk7CisgICAgYXZhaGlfZnJlZSh0KTsKKworICAgIG4gPSBhdmFoaV9zdHJpbmdfbGlzdF9zZXJpYWxpemUoYSwgTlVMTCwgMCk7CisgICAgc2l6ZSA9IGF2YWhpX3N0cmluZ19saXN0X3NlcmlhbGl6ZShhLCBkYXRhLCBzaXplb2YoZGF0YSkpOworICAgIGFzc2VydChzaXplID09IG4pOworCisgICAgcHJpbnRmKCIlenVcbiIsIHNpemUpOworCisgICAgZm9yICh0ID0gKGNoYXIqKSBkYXRhLCBuID0gMDsgbiA8IHNpemU7IG4rKywgdCsrKSB7CisgICAgICAgIGlmICgqdCA8PSAzMikKKyAgICAgICAgICAgIHByaW50ZigiKCV1KSIsICp0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJpbnRmKCIlYyIsICp0KTsKKyAgICB9CisKKyAgICBwcmludGYoIlxuIik7CisKKyAgICBhc3NlcnQoYXZhaGlfc3RyaW5nX2xpc3RfcGFyc2UoZGF0YSwgc2l6ZSwgJmIpID09IDApOworCisgICAgcHJpbnRmKCJlcXVhbDogJWlcbiIsIGF2YWhpX3N0cmluZ19saXN0X2VxdWFsKGEsIGIpKTsKKworICAgIHQgPSBhdmFoaV9zdHJpbmdfbGlzdF90b19zdHJpbmcoYik7CisgICAgcHJpbnRmKCItLSVzLS1cbiIsIHQpOworICAgIGF2YWhpX2ZyZWUodCk7CisKKyAgICBhdmFoaV9zdHJpbmdfbGlzdF9mcmVlKGIpOworCisgICAgYiA9IGF2YWhpX3N0cmluZ19saXN0X2NvcHkoYSk7CisKKyAgICBhc3NlcnQoYXZhaGlfc3RyaW5nX2xpc3RfZXF1YWwoYSwgYikpOworCisgICAgdCA9IGF2YWhpX3N0cmluZ19saXN0X3RvX3N0cmluZyhiKTsKKyAgICBwcmludGYoIi0tJXMtLVxuIiwgdCk7CisgICAgYXZhaGlfZnJlZSh0KTsKKworICAgIHAgPSBhdmFoaV9zdHJpbmdfbGlzdF9maW5kKGEsICJzZXZlbiIpOworICAgIGFzc2VydChwKTsKKworICAgIHIgPSBhdmFoaV9zdHJpbmdfbGlzdF9nZXRfcGFpcihwLCAmdCwgJnYsIE5VTEwpOworICAgIGFzc2VydChyID49IDApOworICAgIGFzc2VydCh0KTsKKyAgICBhc3NlcnQodik7CisKKyAgICBwcmludGYoIjwlcz49PCVzPlxuIiwgdCwgdik7CisgICAgYXZhaGlfZnJlZSh0KTsKKyAgICBhdmFoaV9mcmVlKHYpOworCisgICAgcCA9IGF2YWhpX3N0cmluZ19saXN0X2ZpbmQoYSwgInF1dXgiKTsKKyAgICBhc3NlcnQocCk7CisKKyAgICByID0gYXZhaGlfc3RyaW5nX2xpc3RfZ2V0X3BhaXIocCwgJnQsICZ2LCBOVUxMKTsKKyAgICBhc3NlcnQociA+PSAwKTsKKyAgICBhc3NlcnQodCk7CisgICAgYXNzZXJ0KCF2KTsKKworICAgIHByaW50ZigiPCVzPj08JXM+XG4iLCB0LCB2KTsKKyAgICBhdmFoaV9mcmVlKHQpOworICAgIGF2YWhpX2ZyZWUodik7CisKKyAgICBhdmFoaV9zdHJpbmdfbGlzdF9mcmVlKGEpOworICAgIGF2YWhpX3N0cmluZ19saXN0X2ZyZWUoYik7CisKKyAgICBuID0gYXZhaGlfc3RyaW5nX2xpc3Rfc2VyaWFsaXplKE5VTEwsIE5VTEwsIDApOworICAgIHNpemUgPSBhdmFoaV9zdHJpbmdfbGlzdF9zZXJpYWxpemUoTlVMTCwgZGF0YSwgc2l6ZW9mKGRhdGEpKTsKKyAgICBhc3NlcnQoc2l6ZSA9PSAxKTsKKyAgICBhc3NlcnQoc2l6ZSA9PSBuKTsKKworICAgIGFzc2VydChhdmFoaV9zdHJpbmdfbGlzdF9wYXJzZShkYXRhLCBzaXplLCAmYSkgPT0gMCk7CisgICAgYXNzZXJ0KCFhKTsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvbW1vbi9zdHJsc3QuYyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21tb24vc3RybHN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg2MWNmOAotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21tb24vc3RybHN0LmMKQEAgLTAsMCArMSw1MDUgQEAKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2luY2x1ZGUgInN0cmxzdC5oIgorI2luY2x1ZGUgIm1hbGxvYy5oIgorI2luY2x1ZGUgImRlZnMuaCIKKworQXZhaGlTdHJpbmdMaXN0KmF2YWhpX3N0cmluZ19saXN0X2FkZF9hbm9ueW1vdXMoQXZhaGlTdHJpbmdMaXN0ICpsLCBzaXplX3Qgc2l6ZSkgeworICAgIEF2YWhpU3RyaW5nTGlzdCAqbjsKKworICAgIGlmICghKG4gPSBhdmFoaV9tYWxsb2Moc2l6ZW9mKEF2YWhpU3RyaW5nTGlzdCkgKyBzaXplKSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgbi0+bmV4dCA9IGw7CisgICAgbi0+c2l6ZSA9IHNpemU7CisKKyAgICAvKiBOVUwgdGVybWluYXRlIHN0cmluZ3MsIGp1c3QgdG8gbWFrZSBzdXJlICovCisgICAgbi0+dGV4dFtzaXplXSA9IDA7CisKKyAgICByZXR1cm4gbjsKK30KKworQXZhaGlTdHJpbmdMaXN0ICphdmFoaV9zdHJpbmdfbGlzdF9hZGRfYXJiaXRyYXJ5KEF2YWhpU3RyaW5nTGlzdCAqbCwgY29uc3QgdWludDhfdCp0ZXh0LCBzaXplX3Qgc2l6ZSkgeworICAgIEF2YWhpU3RyaW5nTGlzdCAqbjsKKworICAgIGFzc2VydChzaXplID09IDAgfHwgdGV4dCk7CisKKyAgICBpZiAoIShuID0gYXZhaGlfc3RyaW5nX2xpc3RfYWRkX2Fub255bW91cyhsLCBzaXplKSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKHNpemUgPiAwKQorICAgICAgICBtZW1jcHkobi0+dGV4dCwgdGV4dCwgc2l6ZSk7CisKKyAgICByZXR1cm4gbjsKK30KKworQXZhaGlTdHJpbmdMaXN0ICphdmFoaV9zdHJpbmdfbGlzdF9hZGQoQXZhaGlTdHJpbmdMaXN0ICpsLCBjb25zdCBjaGFyICp0ZXh0KSB7CisgICAgYXNzZXJ0KHRleHQpOworCisgICAgcmV0dXJuIGF2YWhpX3N0cmluZ19saXN0X2FkZF9hcmJpdHJhcnkobCwgKGNvbnN0IHVpbnQ4X3QqKSB0ZXh0LCBzdHJsZW4odGV4dCkpOworfQorCitpbnQgYXZhaGlfc3RyaW5nX2xpc3RfcGFyc2UoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUsIEF2YWhpU3RyaW5nTGlzdCAqKnJldCkgeworICAgIGNvbnN0IHVpbnQ4X3QgKmM7CisgICAgQXZhaGlTdHJpbmdMaXN0ICpyID0gTlVMTDsKKworICAgIGFzc2VydChkYXRhKTsKKyAgICBhc3NlcnQocmV0KTsKKworICAgIGMgPSBkYXRhOworICAgIHdoaWxlIChzaXplID4gMCkgeworICAgICAgICBzaXplX3QgazsKKworICAgICAgICBrID0gKihjKyspOworICAgICAgICBzaXplLS07CisKKyAgICAgICAgaWYgKGsgPiBzaXplKQorICAgICAgICAgICAgZ290byBmYWlsOyAvKiBPdmVyZmxvdyAqLworCisgICAgICAgIGlmIChrID4gMCkgeyAvKiBJZ25vcmUgZW1wdHkgc3RyaW5ncyAqLworICAgICAgICAgICAgQXZhaGlTdHJpbmdMaXN0ICpuOworCisgICAgICAgICAgICBpZiAoIShuID0gYXZhaGlfc3RyaW5nX2xpc3RfYWRkX2FyYml0cmFyeShyLCBjLCBrKSkpCisgICAgICAgICAgICAgICAgZ290byBmYWlsOyAvKiBPT00gKi8KKworICAgICAgICAgICAgciA9IG47CisgICAgICAgIH0KKworICAgICAgICBjICs9IGs7CisgICAgICAgIHNpemUgLT0gazsKKyAgICB9CisKKyAgICAqcmV0ID0gcjsKKworICAgIHJldHVybiAwOworCitmYWlsOgorICAgIGF2YWhpX3N0cmluZ19saXN0X2ZyZWUocik7CisgICAgcmV0dXJuIC0xOworfQorCit2b2lkIGF2YWhpX3N0cmluZ19saXN0X2ZyZWUoQXZhaGlTdHJpbmdMaXN0ICpsKSB7CisgICAgQXZhaGlTdHJpbmdMaXN0ICpuOworCisgICAgd2hpbGUgKGwpIHsKKyAgICAgICAgbiA9IGwtPm5leHQ7CisgICAgICAgIGF2YWhpX2ZyZWUobCk7CisgICAgICAgIGwgPSBuOworICAgIH0KK30KKworQXZhaGlTdHJpbmdMaXN0KiBhdmFoaV9zdHJpbmdfbGlzdF9yZXZlcnNlKEF2YWhpU3RyaW5nTGlzdCAqbCkgeworICAgIEF2YWhpU3RyaW5nTGlzdCAqciA9IE5VTEwsICpuOworCisgICAgd2hpbGUgKGwpIHsKKyAgICAgICAgbiA9IGwtPm5leHQ7CisgICAgICAgIGwtPm5leHQgPSByOworICAgICAgICByID0gbDsKKyAgICAgICAgbCA9IG47CisgICAgfQorCisgICAgcmV0dXJuIHI7Cit9CisKK2NoYXIqIGF2YWhpX3N0cmluZ19saXN0X3RvX3N0cmluZyhBdmFoaVN0cmluZ0xpc3QgKmwpIHsKKyAgICBBdmFoaVN0cmluZ0xpc3QgKm47CisgICAgc2l6ZV90IHMgPSAwOworICAgIGNoYXIgKnQsICplOworCisgICAgZm9yIChuID0gbDsgbjsgbiA9IG4tPm5leHQpIHsKKyAgICAgICAgaWYgKG4gIT0gbCkKKyAgICAgICAgICAgIHMgKys7CisKKyAgICAgICAgcyArPSBuLT5zaXplKzI7CisgICAgfQorCisgICAgaWYgKCEodCA9IGUgPSBhdmFoaV9uZXcoY2hhciwgcysxKSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgbCA9IGF2YWhpX3N0cmluZ19saXN0X3JldmVyc2UobCk7CisKKyAgICBmb3IgKG4gPSBsOyBuOyBuID0gbi0+bmV4dCkgeworICAgICAgICBpZiAobiAhPSBsKQorICAgICAgICAgICAgKihlKyspID0gJyAnOworCisgICAgICAgICooZSsrKSA9ICciJzsKKyAgICAgICAgc3RybmNweShlLCAoY2hhciopIG4tPnRleHQsIG4tPnNpemUpOworICAgICAgICBlW24tPnNpemVdID0gMDsKKyAgICAgICAgZSA9IHN0cmNocihlLCAwKTsKKyAgICAgICAgKihlKyspID0gJyInOworCisgICAgICAgIGFzc2VydChlKTsKKyAgICB9CisKKyAgICBsID0gYXZhaGlfc3RyaW5nX2xpc3RfcmV2ZXJzZShsKTsKKworICAgICplID0gMDsKKworICAgIHJldHVybiB0OworfQorCitzaXplX3QgYXZhaGlfc3RyaW5nX2xpc3Rfc2VyaWFsaXplKEF2YWhpU3RyaW5nTGlzdCAqbCwgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUpIHsKKyAgICBzaXplX3QgdXNlZCA9IDA7CisKKyAgICBpZiAoZGF0YSkgeworICAgICAgICBBdmFoaVN0cmluZ0xpc3QgKm47CisgICAgICAgIHVpbnQ4X3QgKmM7CisKKyAgICAgICAgbCA9IGF2YWhpX3N0cmluZ19saXN0X3JldmVyc2UobCk7CisgICAgICAgIGMgPSBkYXRhOworCisgICAgICAgIGZvciAobiA9IGw7IHNpemUgPiAxICYmIG47IG4gPSBuLT5uZXh0KSB7CisgICAgICAgICAgICBzaXplX3QgazsKKworICAgICAgICAgICAgaWYgKChrID0gbi0+c2l6ZSkgPT0gMCkKKyAgICAgICAgICAgICAgICAvKiBTa2lwIGVtcHR5IHN0cmluZ3MgKi8KKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKGsgPiAyNTUpCisgICAgICAgICAgICAgICAgLyogVHJ1bmNhdGUgc3RyaW5ncyBhdCAyNTUgY2hhcmFjdGVycyAqLworICAgICAgICAgICAgICAgIGsgPSAyNTU7CisKKyAgICAgICAgICAgIGlmIChrID4gc2l6ZS0xKQorICAgICAgICAgICAgICAgIC8qIE1ha2Ugc3VyZSB0aGlzIHN0cmluZyBmaXRzIGluICovCisgICAgICAgICAgICAgICAgayA9IHNpemUtMTsKKworICAgICAgICAgICAgKihjKyspID0gKHVpbnQ4X3QpIGs7CisgICAgICAgICAgICBtZW1jcHkoYywgbi0+dGV4dCwgayk7CisgICAgICAgICAgICBjICs9IGs7CisKKyAgICAgICAgICAgIHVzZWQgKz0gMSArIGs7CisgICAgICAgICAgICBzaXplIC09IDEgKyBrOworICAgICAgICB9CisKKyAgICAgICAgbCA9IGF2YWhpX3N0cmluZ19saXN0X3JldmVyc2UobCk7CisKKyAgICAgICAgaWYgKHVzZWQgPT0gMCAmJiBzaXplID4gMCkgeworCisgICAgICAgICAgICAvKiBFbXB0eSBsaXN0cyBhcmUgdHJlYXRlZCBzcGVjaWFsbHkuIFRvIGNvbXBseSB3aXRoCisgICAgICAgICAgICAgKiBzZWN0aW9uIDYuMSBvZiB0aGUgRE5TLVNEIHNwZWMsIHdlIHJldHVybiBhIHNpbmdsZQorICAgICAgICAgICAgICogZW1wdHkgc3RyaW5nIChpLmUuIGEgTlVMIGJ5dGUpKi8KKworICAgICAgICAgICAgKih1aW50OF90KikgZGF0YSA9IDA7CisgICAgICAgICAgICB1c2VkID0gMTsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIHsKKyAgICAgICAgQXZhaGlTdHJpbmdMaXN0ICpuOworCisgICAgICAgIGZvciAobiA9IGw7IG47IG4gPSBuLT5uZXh0KSB7CisgICAgICAgICAgICBzaXplX3QgazsKKworICAgICAgICAgICAgaWYgKChrID0gbi0+c2l6ZSkgPT0gMCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKGsgPiAyNTUpCisgICAgICAgICAgICAgICAgayA9IDI1NTsKKworICAgICAgICAgICAgdXNlZCArPSAxK2s7CisgICAgICAgIH0KKworICAgICAgICBpZiAodXNlZCA9PSAwKQorICAgICAgICAgICAgdXNlZCA9IDE7CisgICAgfQorCisgICAgcmV0dXJuIHVzZWQ7Cit9CisKK2ludCBhdmFoaV9zdHJpbmdfbGlzdF9lcXVhbChjb25zdCBBdmFoaVN0cmluZ0xpc3QgKmEsIGNvbnN0IEF2YWhpU3RyaW5nTGlzdCAqYikgeworCisgICAgZm9yICg7OykgeworICAgICAgICBpZiAoIWEgJiYgIWIpCisgICAgICAgICAgICByZXR1cm4gMTsKKworICAgICAgICBpZiAoIWEgfHwgIWIpCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBpZiAoYS0+c2l6ZSAhPSBiLT5zaXplKQorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgaWYgKGEtPnNpemUgIT0gMCAmJiBtZW1jbXAoYS0+dGV4dCwgYi0+dGV4dCwgYS0+c2l6ZSkgIT0gMCkKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIGEgPSBhLT5uZXh0OworICAgICAgICBiID0gYi0+bmV4dDsKKyAgICB9Cit9CisKK0F2YWhpU3RyaW5nTGlzdCAqYXZhaGlfc3RyaW5nX2xpc3RfYWRkX21hbnkoQXZhaGlTdHJpbmdMaXN0ICpyLCAuLi4pIHsKKyAgICB2YV9saXN0IHZhOworCisgICAgdmFfc3RhcnQodmEsIHIpOworICAgIHIgPSBhdmFoaV9zdHJpbmdfbGlzdF9hZGRfbWFueV92YShyLCB2YSk7CisgICAgdmFfZW5kKHZhKTsKKworICAgIHJldHVybiByOworfQorCitBdmFoaVN0cmluZ0xpc3QgKmF2YWhpX3N0cmluZ19saXN0X2FkZF9tYW55X3ZhKEF2YWhpU3RyaW5nTGlzdCAqciwgdmFfbGlzdCB2YSkgeworICAgIGNvbnN0IGNoYXIgKnR4dDsKKworICAgIHdoaWxlICgodHh0ID0gdmFfYXJnKHZhLCBjb25zdCBjaGFyKikpKQorICAgICAgICByID0gYXZhaGlfc3RyaW5nX2xpc3RfYWRkKHIsIHR4dCk7CisKKyAgICByZXR1cm4gcjsKK30KKworQXZhaGlTdHJpbmdMaXN0ICphdmFoaV9zdHJpbmdfbGlzdF9uZXcoY29uc3QgY2hhciAqdHh0LCAuLi4pIHsKKyAgICB2YV9saXN0IHZhOworICAgIEF2YWhpU3RyaW5nTGlzdCAqciA9IE5VTEw7CisKKyAgICBpZiAodHh0KSB7CisgICAgICAgIHIgPSBhdmFoaV9zdHJpbmdfbGlzdF9hZGQociwgdHh0KTsKKworICAgICAgICB2YV9zdGFydCh2YSwgdHh0KTsKKyAgICAgICAgciA9IGF2YWhpX3N0cmluZ19saXN0X2FkZF9tYW55X3ZhKHIsIHZhKTsKKyAgICAgICAgdmFfZW5kKHZhKTsKKyAgICB9CisKKyAgICByZXR1cm4gcjsKK30KKworQXZhaGlTdHJpbmdMaXN0ICphdmFoaV9zdHJpbmdfbGlzdF9uZXdfdmEodmFfbGlzdCB2YSkgeworICAgIHJldHVybiBhdmFoaV9zdHJpbmdfbGlzdF9hZGRfbWFueV92YShOVUxMLCB2YSk7Cit9CisKK0F2YWhpU3RyaW5nTGlzdCAqYXZhaGlfc3RyaW5nX2xpc3RfY29weShjb25zdCBBdmFoaVN0cmluZ0xpc3QgKmwpIHsKKyAgICBBdmFoaVN0cmluZ0xpc3QgKnIgPSBOVUxMOworCisgICAgZm9yICg7IGw7IGwgPSBsLT5uZXh0KQorICAgICAgICBpZiAoIShyID0gYXZhaGlfc3RyaW5nX2xpc3RfYWRkX2FyYml0cmFyeShyLCBsLT50ZXh0LCBsLT5zaXplKSkpIHsKKyAgICAgICAgICAgIGF2YWhpX3N0cmluZ19saXN0X2ZyZWUocik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgcmV0dXJuIGF2YWhpX3N0cmluZ19saXN0X3JldmVyc2Uocik7Cit9CisKK0F2YWhpU3RyaW5nTGlzdCAqYXZhaGlfc3RyaW5nX2xpc3RfbmV3X2Zyb21fYXJyYXkoY29uc3QgY2hhciAqYXJyYXlbXSwgaW50IGxlbmd0aCkgeworICAgIEF2YWhpU3RyaW5nTGlzdCAqciA9IE5VTEw7CisgICAgaW50IGk7CisKKyAgICBhc3NlcnQoYXJyYXkpOworCisgICAgZm9yIChpID0gMDsgbGVuZ3RoID49IDAgPyBpIDwgbGVuZ3RoIDogISFhcnJheVtpXTsgaSsrKQorICAgICAgICByID0gYXZhaGlfc3RyaW5nX2xpc3RfYWRkKHIsIGFycmF5W2ldKTsKKworICAgIHJldHVybiByOworfQorCit1bnNpZ25lZCBhdmFoaV9zdHJpbmdfbGlzdF9sZW5ndGgoY29uc3QgQXZhaGlTdHJpbmdMaXN0ICpsKSB7CisgICAgdW5zaWduZWQgbiA9IDA7CisKKyAgICBmb3IgKDsgbDsgbCA9IGwtPm5leHQpCisgICAgICAgIG4rKzsKKworICAgIHJldHVybiBuOworfQorCitBdmFoaVN0cmluZ0xpc3QgKmF2YWhpX3N0cmluZ19saXN0X2FkZF92cHJpbnRmKEF2YWhpU3RyaW5nTGlzdCAqbCwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IHZhKSB7CisgICAgc2l6ZV90IGxlbiA9IDgwOworICAgIEF2YWhpU3RyaW5nTGlzdCAqcjsKKworICAgIGFzc2VydChmb3JtYXQpOworCisgICAgaWYgKCEociA9IGF2YWhpX21hbGxvYyhzaXplb2YoQXZhaGlTdHJpbmdMaXN0KSArIGxlbikpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGZvciAoOzspIHsKKyAgICAgICAgaW50IG47CisgICAgICAgIEF2YWhpU3RyaW5nTGlzdCAqbnI7CisgICAgICAgIHZhX2xpc3QgdmEyOworCisgICAgICAgIHZhX2NvcHkodmEyLCB2YSk7CisgICAgICAgIG4gPSB2c25wcmludGYoKGNoYXIqKSByLT50ZXh0LCBsZW4sIGZvcm1hdCwgdmEyKTsKKyAgICAgICAgdmFfZW5kKHZhMik7CisKKyAgICAgICAgaWYgKG4gPj0gMCAmJiBuIDwgKGludCkgbGVuKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKG4gPj0gMCkKKyAgICAgICAgICAgIGxlbiA9IG4rMTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbGVuICo9IDI7CisKKyAgICAgICAgaWYgKCEobnIgPSBhdmFoaV9yZWFsbG9jKHIsIHNpemVvZihBdmFoaVN0cmluZ0xpc3QpICsgbGVuKSkpIHsKKyAgICAgICAgICAgIGF2YWhpX2ZyZWUocik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIHIgPSBucjsKKyAgICB9CisKKyAgICByLT5uZXh0ID0gbDsKKyAgICByLT5zaXplID0gc3RybGVuKChjaGFyKikgci0+dGV4dCk7CisKKyAgICByZXR1cm4gcjsKK30KKworQXZhaGlTdHJpbmdMaXN0ICphdmFoaV9zdHJpbmdfbGlzdF9hZGRfcHJpbnRmKEF2YWhpU3RyaW5nTGlzdCAqbCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pIHsKKyAgICB2YV9saXN0IHZhOworCisgICAgYXNzZXJ0KGZvcm1hdCk7CisKKyAgICB2YV9zdGFydCh2YSwgZm9ybWF0KTsKKyAgICBsICA9IGF2YWhpX3N0cmluZ19saXN0X2FkZF92cHJpbnRmKGwsIGZvcm1hdCwgdmEpOworICAgIHZhX2VuZCh2YSk7CisKKyAgICByZXR1cm4gbDsKK30KKworQXZhaGlTdHJpbmdMaXN0ICphdmFoaV9zdHJpbmdfbGlzdF9maW5kKEF2YWhpU3RyaW5nTGlzdCAqbCwgY29uc3QgY2hhciAqa2V5KSB7CisgICAgc2l6ZV90IG47CisKKyAgICBhc3NlcnQoa2V5KTsKKyAgICBuID0gc3RybGVuKGtleSk7CisKKyAgICBmb3IgKDsgbDsgbCA9IGwtPm5leHQpIHsKKyAgICAgICAgaWYgKHN0cmNhc2VjbXAoKGNoYXIqKSBsLT50ZXh0LCBrZXkpID09IDApCisgICAgICAgICAgICByZXR1cm4gbDsKKworICAgICAgICBpZiAoc3RybmNhc2VjbXAoKGNoYXIqKSBsLT50ZXh0LCBrZXksIG4pID09IDAgJiYgbC0+dGV4dFtuXSA9PSAnPScpCisgICAgICAgICAgICByZXR1cm4gbDsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworQXZhaGlTdHJpbmdMaXN0ICphdmFoaV9zdHJpbmdfbGlzdF9hZGRfcGFpcihBdmFoaVN0cmluZ0xpc3QgKmwsIGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUpIHsKKyAgICBhc3NlcnQoa2V5KTsKKworICAgIGlmICh2YWx1ZSkKKyAgICAgICAgcmV0dXJuIGF2YWhpX3N0cmluZ19saXN0X2FkZF9wcmludGYobCwgIiVzPSVzIiwga2V5LCB2YWx1ZSk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gYXZhaGlfc3RyaW5nX2xpc3RfYWRkKGwsIGtleSk7Cit9CisKK0F2YWhpU3RyaW5nTGlzdCAqYXZhaGlfc3RyaW5nX2xpc3RfYWRkX3BhaXJfYXJiaXRyYXJ5KEF2YWhpU3RyaW5nTGlzdCAqbCwgY29uc3QgY2hhciAqa2V5LCBjb25zdCB1aW50OF90ICp2YWx1ZSwgc2l6ZV90IHNpemUpIHsKKyAgICBzaXplX3QgbjsKKyAgICBhc3NlcnQoa2V5KTsKKworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiBhdmFoaV9zdHJpbmdfbGlzdF9hZGQobCwga2V5KTsKKworICAgIG4gPSBzdHJsZW4oa2V5KTsKKworICAgIGlmICghKGwgPSBhdmFoaV9zdHJpbmdfbGlzdF9hZGRfYW5vbnltb3VzKGwsIG4gKyAxICsgc2l6ZSkpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIG1lbWNweShsLT50ZXh0LCBrZXksIG4pOworICAgIGwtPnRleHRbbl0gPSAnPSc7CisgICAgbWVtY3B5KGwtPnRleHQgKyBuICsgMSwgdmFsdWUsIHNpemUpOworCisgICAgcmV0dXJuIGw7Cit9CisKK2ludCBhdmFoaV9zdHJpbmdfbGlzdF9nZXRfcGFpcihBdmFoaVN0cmluZ0xpc3QgKmwsIGNoYXIgKiprZXksIGNoYXIgKip2YWx1ZSwgc2l6ZV90ICpzaXplKSB7CisgICAgY2hhciAqZTsKKworICAgIGFzc2VydChsKTsKKworICAgIGlmICghKGUgPSBtZW1jaHIobC0+dGV4dCwgJz0nLCBsLT5zaXplKSkpIHsKKworICAgICAgICBpZiAoa2V5KQorICAgICAgICAgICAgaWYgKCEoKmtleSA9IGF2YWhpX3N0cmR1cCgoY2hhciopIGwtPnRleHQpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgKnZhbHVlID0gTlVMTDsKKworICAgICAgICBpZiAoc2l6ZSkKKyAgICAgICAgICAgICpzaXplID0gMDsKKworICAgIH0gZWxzZSB7CisgICAgICAgIHNpemVfdCBuOworCisgICAgICAgIGlmIChrZXkpCisgICAgICAgICAgICBpZiAoISgqa2V5ID0gYXZhaGlfc3RybmR1cCgoY2hhciopIGwtPnRleHQsIGUgLSAoY2hhciAqKSBsLT50ZXh0KSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAgIGUrKzsgLyogQWR2YW5jZSBhZnRlciAnPScgKi8KKworICAgICAgICBuID0gbC0+c2l6ZSAtIChlIC0gKGNoYXIqKSBsLT50ZXh0KTsKKworICAgICAgICBpZiAodmFsdWUpIHsKKworICAgICAgICAgICAgaWYgKCEoKnZhbHVlID0gYXZhaGlfbWVtZHVwKGUsIG4rMSkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGtleSkKKyAgICAgICAgICAgICAgICAgICAgYXZhaGlfZnJlZSgqa2V5KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICgqdmFsdWUpW25dID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaXplKQorICAgICAgICAgICAgKnNpemUgPSBuOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitBdmFoaVN0cmluZ0xpc3QgKmF2YWhpX3N0cmluZ19saXN0X2dldF9uZXh0KEF2YWhpU3RyaW5nTGlzdCAqbCkgeworICAgIGFzc2VydChsKTsKKyAgICByZXR1cm4gbC0+bmV4dDsKK30KKwordWludDhfdCAqYXZhaGlfc3RyaW5nX2xpc3RfZ2V0X3RleHQoQXZhaGlTdHJpbmdMaXN0ICpsKSB7CisgICAgYXNzZXJ0KGwpOworICAgIHJldHVybiBsLT50ZXh0OworfQorCitzaXplX3QgYXZhaGlfc3RyaW5nX2xpc3RfZ2V0X3NpemUoQXZhaGlTdHJpbmdMaXN0ICpsKSB7CisgICAgYXNzZXJ0KGwpOworICAgIHJldHVybiBsLT5zaXplOworfQorCit1aW50MzJfdCBhdmFoaV9zdHJpbmdfbGlzdF9nZXRfc2VydmljZV9jb29raWUoQXZhaGlTdHJpbmdMaXN0ICpsKSB7CisgICAgQXZhaGlTdHJpbmdMaXN0ICpmOworICAgIGNoYXIgKnZhbHVlID0gTlVMTCwgKmVuZCA9IE5VTEw7CisgICAgdWludDMyX3QgcmV0OworCisgICAgaWYgKCEoZiA9IGF2YWhpX3N0cmluZ19saXN0X2ZpbmQobCwgQVZBSElfU0VSVklDRV9DT09LSUUpKSkKKyAgICAgICAgcmV0dXJuIEFWQUhJX1NFUlZJQ0VfQ09PS0lFX0lOVkFMSUQ7CisKKyAgICBpZiAoYXZhaGlfc3RyaW5nX2xpc3RfZ2V0X3BhaXIoZiwgTlVMTCwgJnZhbHVlLCBOVUxMKSA8IDAgfHwgIXZhbHVlKQorICAgICAgICByZXR1cm4gQVZBSElfU0VSVklDRV9DT09LSUVfSU5WQUxJRDsKKworICAgIHJldCA9ICh1aW50MzJfdCkgc3RydG9sbCh2YWx1ZSwgJmVuZCwgMCk7CisKKyAgICBpZiAoKnZhbHVlICYmIGVuZCAmJiAqZW5kICE9IDApIHsKKyAgICAgICAgYXZhaGlfZnJlZSh2YWx1ZSk7CisgICAgICAgIHJldHVybiBBVkFISV9TRVJWSUNFX0NPT0tJRV9JTlZBTElEOworICAgIH0KKworICAgIGF2YWhpX2ZyZWUodmFsdWUpOworCisgICAgcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21tb24vc3RybHN0LmggYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tbW9uL3N0cmxzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0YWRjZWEKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tbW9uL3N0cmxzdC5oCkBAIC0wLDAgKzEsMTgwIEBACisjaWZuZGVmIGZvb3R4dGxpc3RoZm9vCisjZGVmaW5lIGZvb3R4dGxpc3RoZm9vCisKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworLyoqIFxmaWxlIHN0cmxzdC5oIEltcGxlbWVudGF0aW9uIG9mIGEgZGF0YSB0eXBlIHRvIHN0b3JlIGxpc3RzIG9mIHN0cmluZ3MgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGludHR5cGVzLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisKKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vY2RlY2wuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vZ2NjbWFjcm8uaD4KKworQVZBSElfQ19ERUNMX0JFR0lOCisKKy8qKiBMaW5rZWQgbGlzdCBvZiBzdHJpbmdzIHRoYXQgY2FuIGNvbnRhaW4gYW55IG51bWJlciBvZiBiaW5hcnkKKyAqIGNoYXJhY3RlcnMsIGluY2x1ZGluZyBOVUwgYnl0ZXMuIEFuIGVtcHR5IGxpc3QgaXMgY3JlYXRlZCBieQorICogYXNzaWduaW5nIGEgTlVMTCB0byBhIHBvaW50ZXIgdG8gQXZhaGlTdHJpbmdMaXN0LiBUaGUgc3RyaW5nIGxpc3QKKyAqIGlzIHN0b3JlZCBpbiByZXZlcnNlIG9yZGVyLCBzbyB0aGF0IGFwcGVuZGluZyB0byB0aGUgc3RyaW5nIGxpc3QgaXMKKyAqIGVmZmVjdGl2ZWx5IGEgcHJlcGVuZGluZyB0byB0aGUgbGlua2VkIGxpc3QuICBUaGlzIG9iamVjdCBpcyB1c2VkCisgKiBwcmltYXJpbHkgZm9yIHN0b3JpbmcgRE5TIFRYVCByZWNvcmQgZGF0YS4gKi8KK3R5cGVkZWYgc3RydWN0IEF2YWhpU3RyaW5nTGlzdCB7CisgICAgc3RydWN0IEF2YWhpU3RyaW5nTGlzdCAqbmV4dDsgLyoqPCBQb2ludGVyIHRvIHRoZSBuZXh0IGxpbmtlZCBsaXN0IGVsZW1lbnQgKi8KKyAgICBzaXplX3Qgc2l6ZTsgIC8qKjwgU2l6ZSBvZiB0ZXh0W10gKi8KKyAgICB1aW50OF90IHRleHRbMV07IC8qKjwgQ2hhcmFjdGVyIGRhdGEgKi8KK30gQXZhaGlTdHJpbmdMaXN0OworCisvKiogQHsgXG5hbWUgQ29uc3RydWN0aW9uIGFuZCBkZXN0cnVjdGlvbiAqLworCisvKiogQ3JlYXRlIGEgbmV3IHN0cmluZyBsaXN0IGJ5IHRha2luZyBhIHZhcmlhYmxlIGxpc3Qgb2YgTlVMCisgKiB0ZXJtaW5hdGVkIHN0cmluZ3MuIFRoZSBzdHJpbmdzIGFyZSBjb3BpZWQgdXNpbmcgZ19zdHJkdXAoKS4gVGhlCisgKiBhcmd1bWVudCBsaXN0IG11c3QgYmUgdGVybWluYXRlZCBieSBhIE5VTEwgcG9pbnRlci4gKi8KK0F2YWhpU3RyaW5nTGlzdCAqYXZhaGlfc3RyaW5nX2xpc3RfbmV3KGNvbnN0IGNoYXIgKnR4dCwgLi4uKSBBVkFISV9HQ0NfU0VOVElORUw7CisKKy8qKiBcY29uZCBmdWxsZG9jcyAqLworLyoqIFNhbWUgYXMgYXZhaGlfc3RyaW5nX2xpc3RfbmV3KCkgYnV0IHBhc3MgYSB2YV9saXN0IHN0cnVjdHVyZSAqLworQXZhaGlTdHJpbmdMaXN0ICphdmFoaV9zdHJpbmdfbGlzdF9uZXdfdmEodmFfbGlzdCB2YSk7CisvKiogXGVuZGNvbmQgKi8KKworLyoqIENyZWF0ZSBhIG5ldyBzdHJpbmcgbGlzdCBmcm9tIGEgc3RyaW5nIGFycmF5LiBUaGUgc3RyaW5ncyBhcmUKKyAqIGNvcGllZCB1c2luZyBnX3N0cmR1cCgpLiBsZW5ndGggc2hvdWxkIGNvbnRhaW4gdGhlIGxlbmd0aCBvZiB0aGUKKyAqIGFycmF5LCBvciAtMSBpZiB0aGUgYXJyYXkgaXMgTlVMTCB0ZXJtaW5hdGVkKi8KK0F2YWhpU3RyaW5nTGlzdCAqYXZhaGlfc3RyaW5nX2xpc3RfbmV3X2Zyb21fYXJyYXkoY29uc3QgY2hhciAqKmFycmF5LCBpbnQgbGVuZ3RoKTsKKworLyoqIEZyZWUgYSBzdHJpbmcgbGlzdCAqLwordm9pZCBhdmFoaV9zdHJpbmdfbGlzdF9mcmVlKEF2YWhpU3RyaW5nTGlzdCAqbCk7CisKKy8qKiBAfSAqLworCisvKiogQHsgXG5hbWUgQWRkaW5nIHN0cmluZ3MgKi8KKworLyoqIEFwcGVuZCBhIE5VTCB0ZXJtaW5hdGVkIHN0cmluZyB0byB0aGUgc3BlY2lmaWVkIHN0cmluZyBsaXN0LiBUaGUKKyAqIHBhc3NlZCBzdHJpbmcgaXMgY29waWVkIHVzaW5nIGdfc3RyZHVwKCkuIFJldHVybnMgdGhlIG5ldyBsaXN0CisgKiBzdGFydC4gKi8KK0F2YWhpU3RyaW5nTGlzdCAqYXZhaGlfc3RyaW5nX2xpc3RfYWRkKEF2YWhpU3RyaW5nTGlzdCAqbCwgY29uc3QgY2hhciAqdGV4dCk7CisKKy8qKiBBcHBlbmQgYSBuZXcgTlVMIHRlcm1pbmF0ZWQgZm9ybWF0dGVkIHN0cmluZyB0byB0aGUgc3BlY2lmaWVkIHN0cmluZyBsaXN0ICovCitBdmFoaVN0cmluZ0xpc3QgKmF2YWhpX3N0cmluZ19saXN0X2FkZF9wcmludGYoQXZhaGlTdHJpbmdMaXN0ICpsLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikgQVZBSElfR0NDX1BSSU5URl9BVFRSMjM7CisKKy8qKiBcY29uZCBmdWxsZG9jcyAqLworLyoqIEFwcGVuZCBhIG5ldyBOVUwgdGVybWluYXRlZCBmb3JtYXR0ZWQgc3RyaW5nIHRvIHRoZSBzcGVjaWZpZWQgc3RyaW5nIGxpc3QgKi8KK0F2YWhpU3RyaW5nTGlzdCAqYXZhaGlfc3RyaW5nX2xpc3RfYWRkX3ZwcmludGYoQXZhaGlTdHJpbmdMaXN0ICpsLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgdmEpOworLyoqIFxlbmRjb25kICovCisKKy8qKiBBcHBlbmQgYW4gYXJiaXRyYXJ5IGxlbmd0aCBieXRlIHN0cmluZyB0byB0aGUgbGlzdC4gUmV0dXJucyB0aGUKKyAqIG5ldyBsaXN0IHN0YXJ0LiAqLworQXZhaGlTdHJpbmdMaXN0ICphdmFoaV9zdHJpbmdfbGlzdF9hZGRfYXJiaXRyYXJ5KEF2YWhpU3RyaW5nTGlzdCAqbCwgY29uc3QgdWludDhfdCAqdGV4dCwgc2l6ZV90IHNpemUpOworCisvKiogQXBwZW5kIGEgbmV3IGVudHJ5IHRvIHRoZSBzdHJpbmcgbGlzdC4gVGhlIHN0cmluZyBpcyBub3QgZmlsbGVkCit3aXRoIGRhdGEuIFRoZSBjYWxsZXIgc2hvdWxkIGZpbGwgaW4gc3RyaW5nIGRhdGEgYWZ0ZXJ3YXJkcyBieSB3cml0aW5nCitpdCB0byBsLT50ZXh0LCB3aGVyZSBsIGlzIHRoZSBwb2ludGVyIHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24uIFRoaXMKK2Z1bmN0aW9uIGV4aXN0cyBzb2xlbHkgdG8gb3B0aW1pemUgYSBmZXcgb3BlcmF0aW9ucyB3aGVyZSBvdGhlcndpc2UKK3N1cGVyZmx1b3VzIHN0cmluZyBjb3B5aW5nIHdvdWxkIGJlIG5lY2Vzc2FyeS4gKi8KK0F2YWhpU3RyaW5nTGlzdCphdmFoaV9zdHJpbmdfbGlzdF9hZGRfYW5vbnltb3VzKEF2YWhpU3RyaW5nTGlzdCAqbCwgc2l6ZV90IHNpemUpOworCisvKiogU2FtZSBhcyBhdmFoaV9zdHJpbmdfbGlzdF9hZGQoKSwgYnV0IHRha2VzIGEgdmFyaWFibGUgbnVtYmVyIG9mCisgKiBOVUwgdGVybWluYXRlZCBzdHJpbmdzLiBUaGUgYXJndW1lbnQgbGlzdCBtdXN0IGJlIHRlcm1pbmF0ZWQgYnkgYQorICogTlVMTCBwb2ludGVyLiBSZXR1cm5zIHRoZSBuZXcgbGlzdCBzdGFydC4gKi8KK0F2YWhpU3RyaW5nTGlzdCAqYXZhaGlfc3RyaW5nX2xpc3RfYWRkX21hbnkoQXZhaGlTdHJpbmdMaXN0ICpyLCAuLi4pIEFWQUhJX0dDQ19TRU5USU5FTDsKKworLyoqIFxjb25kIGZ1bGxkb2NzICovCisvKiogU2FtZSBhcyBhdmFoaV9zdHJpbmdfbGlzdF9hZGRfbWFueSgpLCBidXQgdXNlIGEgdmFfbGlzdAorICogc3RydWN0dXJlLiBSZXR1cm5zIHRoZSBuZXcgbGlzdCBzdGFydC4gKi8KK0F2YWhpU3RyaW5nTGlzdCAqYXZhaGlfc3RyaW5nX2xpc3RfYWRkX21hbnlfdmEoQXZhaGlTdHJpbmdMaXN0ICpyLCB2YV9saXN0IHZhKTsKKy8qKiBcZW5kY29uZCAqLworCisvKiogQH0gKi8KKworLyoqIEB7IFxuYW1lIFN0cmluZyBsaXN0IG9wZXJhdGlvbnMgKi8KKworLyoqIENvbnZlcnQgdGhlIHN0cmluZyBsaXN0IG9iamVjdCB0byBhIHNpbmdsZSBjaGFyYWN0ZXIgc3RyaW5nLAorICogc2VwZXJhdGVkIGJ5IHNwYWNlcyBhbmQgZW5jbG9zZWQgaW4gIiIuIGF2YWhpX2ZyZWUoKSB0aGUgcmVzdWx0ISBUaGlzCisgKiBmdW5jdGlvbiBkb2Vzbid0IHdvcmsgd2VsbCB3aXRoIHN0cmluZ3MgdGhhdCBjb250YWluIE5VTCBieXRlcy4gKi8KK2NoYXIqIGF2YWhpX3N0cmluZ19saXN0X3RvX3N0cmluZyhBdmFoaVN0cmluZ0xpc3QgKmwpOworCisvKiogXGNvbmQgZnVsbGRvY3MgKi8KKy8qKiBTZXJpYWxpemUgdGhlIHN0cmluZyBsaXN0IG9iamVjdCBpbiBhIHdheSB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aAorICogdGhlIHN0b3Jpbmcgb2YgRE5TIFRYVCByZWNvcmRzLiBTdHJpbmdzIGxvbmdlciB0aGFuIDI1NSBieXRlcyBhcmUgdHJ1bmNhdGVkLiAqLworc2l6ZV90IGF2YWhpX3N0cmluZ19saXN0X3NlcmlhbGl6ZShBdmFoaVN0cmluZ0xpc3QgKmwsIHZvaWQgKiBkYXRhLCBzaXplX3Qgc2l6ZSk7CisKKy8qKiBJbnZlcnNlIG9mIGF2YWhpX3N0cmluZ19saXN0X3NlcmlhbGl6ZSgpICovCitpbnQgYXZhaGlfc3RyaW5nX2xpc3RfcGFyc2UoY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUsIEF2YWhpU3RyaW5nTGlzdCAqKnJldCk7CisvKiogXGVuZGNvbmQgKi8KKworLyoqIENvbXBhcmUgdG8gc3RyaW5nIGxpc3RzICovCitpbnQgYXZhaGlfc3RyaW5nX2xpc3RfZXF1YWwoY29uc3QgQXZhaGlTdHJpbmdMaXN0ICphLCBjb25zdCBBdmFoaVN0cmluZ0xpc3QgKmIpOworCisvKiogQ29weSBhIHN0cmluZyBsaXN0ICovCitBdmFoaVN0cmluZ0xpc3QgKmF2YWhpX3N0cmluZ19saXN0X2NvcHkoY29uc3QgQXZhaGlTdHJpbmdMaXN0ICpsKTsKKworLyoqIFJldmVyc2UgdGhlIHN0cmluZyBsaXN0LiAqLworQXZhaGlTdHJpbmdMaXN0KiBhdmFoaV9zdHJpbmdfbGlzdF9yZXZlcnNlKEF2YWhpU3RyaW5nTGlzdCAqbCk7CisKKy8qKiBSZXR1cm4gdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgc3RyaW5nIGxpc3QgKi8KK3Vuc2lnbmVkIGF2YWhpX3N0cmluZ19saXN0X2xlbmd0aChjb25zdCBBdmFoaVN0cmluZ0xpc3QgKmwpOworCisvKiogQH0gKi8KKworLyoqIEB7IFxuYW1lIEFjY2Vzc2luZyBpdGVtcyAqLworCisvKiogUmV0dXJucyB0aGUgbmV4dCBpdGVtIGluIHRoZSBzdHJpbmcgbGlzdCAqLworQXZhaGlTdHJpbmdMaXN0ICphdmFoaV9zdHJpbmdfbGlzdF9nZXRfbmV4dChBdmFoaVN0cmluZ0xpc3QgKmwpOworCisvKiogUmV0dXJucyB0aGUgdGV4dCBmb3IgdGhlIGN1cnJlbnQgaXRlbSAqLwordWludDhfdCAqYXZhaGlfc3RyaW5nX2xpc3RfZ2V0X3RleHQoQXZhaGlTdHJpbmdMaXN0ICpsKTsKKworLyoqIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIGN1cnJlbnQgdGV4dCAqLworc2l6ZV90IGF2YWhpX3N0cmluZ19saXN0X2dldF9zaXplKEF2YWhpU3RyaW5nTGlzdCAqbCk7CisKKy8qKiBAfSAqLworCisvKiogQHsgXG5hbWUgRE5TLVNEIFRYVCBwYWlyIGhhbmRsaW5nICovCisKKy8qKiBGaW5kIHRoZSBzdHJpbmcgbGlzdCBlbnRyeSBmb3IgdGhlIGdpdmVuIEROUy1TRCBUWFQga2V5ICovCitBdmFoaVN0cmluZ0xpc3QgKmF2YWhpX3N0cmluZ19saXN0X2ZpbmQoQXZhaGlTdHJpbmdMaXN0ICpsLCBjb25zdCBjaGFyICprZXkpOworCisvKiogUmV0dXJuIHRoZSBETlMtU0QgVFhUIGtleSBhbmQgdmFsdWUgZm9yIHRoZSBzcGVjaWZpZWQgc3RyaW5nIGxpc3QKKyAqIGl0ZW0uIElmIHNpemUgaXMgbm90IE5VTEwgaXQgd2lsbCBiZSBmaWxsZWQgd2l0aCB0aGUgbGVuZ3RoIG9mCisgKiB2YWx1ZS4gKGZvciBzdHJpbmdzIGNvbnRhaW5pbmcgTlVMIGJ5dGVzKS4gSWYgdGhlIGVudHJ5IGRvZXNuJ3QKKyAqIGNvbnRhaW4gYSB2YWx1ZSAqdmFsdWUgd2lsbCBiZSBzZXQgdG8gTlVMTC4gWW91IG5lZWQgdG8KKyAqIGF2YWhpX2ZyZWUoKSB0aGUgc3RyaW5ncyByZXR1cm5lZCBpbiAqa2V5IGFuZCAqdmFsdWUuICovCitpbnQgYXZhaGlfc3RyaW5nX2xpc3RfZ2V0X3BhaXIoQXZhaGlTdHJpbmdMaXN0ICpsLCBjaGFyICoqa2V5LCBjaGFyICoqdmFsdWUsIHNpemVfdCAqc2l6ZSk7CisKKy8qKiBBZGQgYSBuZXcgRE5TLVNEIFRYVCBrZXkgdmFsdWUgcGFpciB0byB0aGUgc3RyaW5nIGxpc3QuIHZhbHVlIG1heQorICogYmUgTlVMTCBpbiBjYXNlIHlvdSB3YW50IHRvIHNwZWNpZnkgYSBrZXkgd2l0aG91dCBhIHZhbHVlICovCitBdmFoaVN0cmluZ0xpc3QgKmF2YWhpX3N0cmluZ19saXN0X2FkZF9wYWlyKEF2YWhpU3RyaW5nTGlzdCAqbCwgY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSk7CisKKy8qKiBTYW1lIGFzIGF2YWhpX3N0cmluZ19saXN0X2FkZF9wYWlyKCkgYnV0IGFsbG93IHN0cmluZ3MgY29udGFpbmluZyBOVUwgYnl0ZXMgaW4gKnZhbHVlLiAqLworQXZhaGlTdHJpbmdMaXN0ICphdmFoaV9zdHJpbmdfbGlzdF9hZGRfcGFpcl9hcmJpdHJhcnkoQXZhaGlTdHJpbmdMaXN0ICpsLCBjb25zdCBjaGFyICprZXksIGNvbnN0IHVpbnQ4X3QgKnZhbHVlLCBzaXplX3Qgc2l6ZSk7CisKKy8qKiBAfSAqLworCisvKiogXGNvbmQgZnVsbGRvY3MgKi8KKy8qKiBUcnkgdG8gZmluZCBhIG1hZ2ljIHNlcnZpY2UgY29va2llIGluIHRoZSBzcGVjaWZpZWQgRE5TLVNEIHN0cmluZworICogbGlzdC4gT3IgcmV0dXJuIEFWQUhJX1NFUlZJQ0VfQ09PS0lFX0lOVkFMSUQgaWYgbm9uZSBpcyBmb3VuZC4gKi8KK3VpbnQzMl90IGF2YWhpX3N0cmluZ19saXN0X2dldF9zZXJ2aWNlX2Nvb2tpZShBdmFoaVN0cmluZ0xpc3QgKmwpOworLyoqIFxlbmRjb25kICovCisKK0FWQUhJX0NfREVDTF9FTkQKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21tb24vdGhyZWFkLXdhdGNoLmMgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tbW9uL3RocmVhZC13YXRjaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwY2FkZWIKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tbW9uL3RocmVhZC13YXRjaC5jCkBAIC0wLDAgKzEsMTg2IEBACisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN5cy9wb2xsLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorCisjaW5jbHVkZSAibGxpc3QuaCIKKyNpbmNsdWRlICJtYWxsb2MuaCIKKyNpbmNsdWRlICJ0aW1ldmFsLmgiCisjaW5jbHVkZSAic2ltcGxlLXdhdGNoLmgiCisjaW5jbHVkZSAidGhyZWFkLXdhdGNoLmgiCisKK3N0cnVjdCBBdmFoaVRocmVhZGVkUG9sbCB7CisgICAgQXZhaGlTaW1wbGVQb2xsICpzaW1wbGVfcG9sbDsKKyAgICBwdGhyZWFkX3QgdGhyZWFkX2lkOworICAgIHB0aHJlYWRfbXV0ZXhfdCBtdXRleDsKKyAgICBpbnQgdGhyZWFkX3J1bm5pbmc7CisgICAgaW50IHJldHZhbDsKK307CisKK3N0YXRpYyBpbnQgcG9sbF9mdW5jKHN0cnVjdCBwb2xsZmQgKnVmZHMsIHVuc2lnbmVkIGludCBuZmRzLCBpbnQgdGltZW91dCwgdm9pZCAqdXNlcmRhdGEpIHsKKyAgICBwdGhyZWFkX211dGV4X3QgKm11dGV4ID0gdXNlcmRhdGE7CisgICAgaW50IHI7CisKKyAgICAvKiBCZWZvcmUgZW50ZXJpbmcgcG9sbCgpIHdlIHVubG9jayB0aGUgbXV0ZXgsIHNvIHRoYXQKKyAgICAgKiBhdmFoaV9zaW1wbGVfcG9sbF9xdWl0KCkgY2FuIHN1Y2NlZWQgZnJvbSBhbm90aGVyIHRocmVhZC4gKi8KKworICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKG11dGV4KTsKKyAgICByID0gcG9sbCh1ZmRzLCBuZmRzLCB0aW1lb3V0KTsKKyAgICBwdGhyZWFkX211dGV4X2xvY2sobXV0ZXgpOworCisgICAgcmV0dXJuIHI7Cit9CisKK3N0YXRpYyB2b2lkKiB0aHJlYWQodm9pZCAqdXNlcmRhdGEpeworICAgIEF2YWhpVGhyZWFkZWRQb2xsICpwID0gdXNlcmRhdGE7CisgICAgc2lnc2V0X3QgbWFzazsKKworICAgIC8qIE1ha2Ugc3VyZSB0aGF0IHNpZ25hbHMgYXJlIGRlbGl2ZXJlZCB0byB0aGUgbWFpbiB0aHJlYWQgKi8KKyAgICBzaWdmaWxsc2V0KCZtYXNrKTsKKyAgICBwdGhyZWFkX3NpZ21hc2soU0lHX0JMT0NLLCAmbWFzaywgTlVMTCk7CisKKyAgICBwdGhyZWFkX211dGV4X2xvY2soJnAtPm11dGV4KTsKKyAgICBwLT5yZXR2YWwgPSBhdmFoaV9zaW1wbGVfcG9sbF9sb29wKHAtPnNpbXBsZV9wb2xsKTsKKyAgICBwdGhyZWFkX211dGV4X3VubG9jaygmcC0+bXV0ZXgpOworCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK0F2YWhpVGhyZWFkZWRQb2xsICphdmFoaV90aHJlYWRlZF9wb2xsX25ldyh2b2lkKSB7CisgICAgQXZhaGlUaHJlYWRlZFBvbGwgKnA7CisKKyAgICBpZiAoIShwID0gYXZhaGlfbmV3KEF2YWhpVGhyZWFkZWRQb2xsLCAxKSkpCisgICAgICAgIGdvdG8gZmFpbDsgLyogT09NICovCisKKyAgICBpZiAoIShwLT5zaW1wbGVfcG9sbCA9IGF2YWhpX3NpbXBsZV9wb2xsX25ldygpKSkKKyAgICAgICAgZ290byBmYWlsOworCisgICAgcHRocmVhZF9tdXRleF9pbml0KCZwLT5tdXRleCwgTlVMTCk7CisKKyAgICBhdmFoaV9zaW1wbGVfcG9sbF9zZXRfZnVuYyhwLT5zaW1wbGVfcG9sbCwgcG9sbF9mdW5jLCAmcC0+bXV0ZXgpOworCisgICAgcC0+dGhyZWFkX3J1bm5pbmcgPSAwOworCisgICAgcmV0dXJuIHA7CisKK2ZhaWw6CisgICAgaWYgKHApIHsKKyAgICAgICAgaWYgKHAtPnNpbXBsZV9wb2xsKSB7CisgICAgICAgICAgICBhdmFoaV9zaW1wbGVfcG9sbF9mcmVlKHAtPnNpbXBsZV9wb2xsKTsKKyAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmcC0+bXV0ZXgpOworICAgICAgICB9CisKKyAgICAgICAgYXZhaGlfZnJlZShwKTsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKwordm9pZCBhdmFoaV90aHJlYWRlZF9wb2xsX2ZyZWUoQXZhaGlUaHJlYWRlZFBvbGwgKnApIHsKKyAgICBhc3NlcnQocCk7CisKKyAgICAvKiBNYWtlIHN1cmUgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIG5vdCBjYWxsZWQgZnJvbSB0aGUgaGVscGVyIHRocmVhZCAqLworICAgIGFzc2VydCghcC0+dGhyZWFkX3J1bm5pbmcgfHwgIXB0aHJlYWRfZXF1YWwocHRocmVhZF9zZWxmKCksIHAtPnRocmVhZF9pZCkpOworCisgICAgaWYgKHAtPnRocmVhZF9ydW5uaW5nKQorICAgICAgICBhdmFoaV90aHJlYWRlZF9wb2xsX3N0b3AocCk7CisKKyAgICBpZiAocC0+c2ltcGxlX3BvbGwpCisgICAgICAgIGF2YWhpX3NpbXBsZV9wb2xsX2ZyZWUocC0+c2ltcGxlX3BvbGwpOworCisgICAgcHRocmVhZF9tdXRleF9kZXN0cm95KCZwLT5tdXRleCk7CisgICAgYXZhaGlfZnJlZShwKTsKK30KKworY29uc3QgQXZhaGlQb2xsKiBhdmFoaV90aHJlYWRlZF9wb2xsX2dldChBdmFoaVRocmVhZGVkUG9sbCAqcCkgeworICAgIGFzc2VydChwKTsKKworICAgIHJldHVybiBhdmFoaV9zaW1wbGVfcG9sbF9nZXQocC0+c2ltcGxlX3BvbGwpOworfQorCitpbnQgYXZhaGlfdGhyZWFkZWRfcG9sbF9zdGFydChBdmFoaVRocmVhZGVkUG9sbCAqcCkgeworICAgIGFzc2VydChwKTsKKworICAgIGFzc2VydCghcC0+dGhyZWFkX3J1bm5pbmcpOworCisgICAgaWYgKHB0aHJlYWRfY3JlYXRlKCZwLT50aHJlYWRfaWQsIE5VTEwsIHRocmVhZCwgcCkgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBwLT50aHJlYWRfcnVubmluZyA9IDE7CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IGF2YWhpX3RocmVhZGVkX3BvbGxfc3RvcChBdmFoaVRocmVhZGVkUG9sbCAqcCkgeworICAgIGFzc2VydChwKTsKKworICAgIGlmICghcC0+dGhyZWFkX3J1bm5pbmcpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIC8qIE1ha2Ugc3VyZSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgbm90IGNhbGxlZCBmcm9tIHRoZSBoZWxwZXIgdGhyZWFkICovCisgICAgYXNzZXJ0KCFwdGhyZWFkX2VxdWFsKHB0aHJlYWRfc2VsZigpLCBwLT50aHJlYWRfaWQpKTsKKworICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmcC0+bXV0ZXgpOworICAgIGF2YWhpX3NpbXBsZV9wb2xsX3F1aXQocC0+c2ltcGxlX3BvbGwpOworICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZwLT5tdXRleCk7CisKKyAgICBwdGhyZWFkX2pvaW4ocC0+dGhyZWFkX2lkLCBOVUxMKTsKKyAgICBwLT50aHJlYWRfcnVubmluZyA9IDA7CisKKyAgICByZXR1cm4gcC0+cmV0dmFsOworfQorCit2b2lkIGF2YWhpX3RocmVhZGVkX3BvbGxfcXVpdChBdmFoaVRocmVhZGVkUG9sbCAqcCkgeworICAgIGFzc2VydChwKTsKKworICAgIC8qIE1ha2Ugc3VyZSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdGhlIGhlbHBlciB0aHJlYWQgKi8KKyAgICBhc3NlcnQocHRocmVhZF9lcXVhbChwdGhyZWFkX3NlbGYoKSwgcC0+dGhyZWFkX2lkKSk7CisKKyAgICBhdmFoaV9zaW1wbGVfcG9sbF9xdWl0KHAtPnNpbXBsZV9wb2xsKTsKK30KKwordm9pZCBhdmFoaV90aHJlYWRlZF9wb2xsX2xvY2soQXZhaGlUaHJlYWRlZFBvbGwgKnApIHsKKyAgICBhc3NlcnQocCk7CisKKyAgICAvKiBNYWtlIHN1cmUgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIG5vdCBjYWxsZWQgZnJvbSB0aGUgaGVscGVyIHRocmVhZCAqLworICAgIGFzc2VydCghcC0+dGhyZWFkX3J1bm5pbmcgfHwgIXB0aHJlYWRfZXF1YWwocHRocmVhZF9zZWxmKCksIHAtPnRocmVhZF9pZCkpOworCisgICAgcHRocmVhZF9tdXRleF9sb2NrKCZwLT5tdXRleCk7Cit9CisKK3ZvaWQgYXZhaGlfdGhyZWFkZWRfcG9sbF91bmxvY2soQXZhaGlUaHJlYWRlZFBvbGwgKnApIHsKKyAgICBhc3NlcnQocCk7CisKKyAgICAvKiBNYWtlIHN1cmUgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIG5vdCBjYWxsZWQgZnJvbSB0aGUgaGVscGVyIHRocmVhZCAqLworICAgIGFzc2VydCghcC0+dGhyZWFkX3J1bm5pbmcgfHwgIXB0aHJlYWRfZXF1YWwocHRocmVhZF9zZWxmKCksIHAtPnRocmVhZF9pZCkpOworCisgICAgcHRocmVhZF9tdXRleF91bmxvY2soJnAtPm11dGV4KTsKK30KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21tb24vdGhyZWFkLXdhdGNoLmggYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tbW9uL3RocmVhZC13YXRjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlYzBjZjMKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tbW9uL3RocmVhZC13YXRjaC5oCkBAIC0wLDAgKzEsODAgQEAKKyNpZm5kZWYgZm9vdGhyZWFkZWR3YXRjaGhmb28KKyNkZWZpbmUgZm9vdGhyZWFkZWR3YXRjaGhmb28KKworLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisvKiogXGZpbGUgdGhyZWFkLXdhdGNoLmggVGhyZWFkZWQgcG9sbCgpIGJhc2VkIG1haW4gbG9vcCBpbXBsZW1lbnRhdGlvbiAqLworCisjaW5jbHVkZSA8c3lzL3BvbGwuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vY2RlY2wuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vd2F0Y2guaD4KKworQVZBSElfQ19ERUNMX0JFR0lOCisKKy8qKiBBIG1haW4gbG9vcCBvYmplY3QgdGhhdCBydW5zIGFuIEF2YWhpU2ltcGxlUG9sbCBpbiBpdHMgb3duIHRocmVhZC4gXHNpbmNlIDAuNi40ICovCit0eXBlZGVmIHN0cnVjdCBBdmFoaVRocmVhZGVkUG9sbCBBdmFoaVRocmVhZGVkUG9sbDsKKworLyoqIENyZWF0ZSBhIG5ldyBldmVudCBsb29wIG9iamVjdC4gVGhpcyB3aWxsIGFsbG9jYXRlIHRoZSBpbnRlcm5hbAorICogQXZhaGlTaW1wbGVQb2xsLCBidXQgd2lsbCBub3Qgc3RhcnQgdGhlIGhlbHBlciB0aHJlYWQuIFxzaW5jZSAwLjYuNCAqLworQXZhaGlUaHJlYWRlZFBvbGwgKmF2YWhpX3RocmVhZGVkX3BvbGxfbmV3KHZvaWQpOworCisvKiogRnJlZSBhbiBldmVudCBsb29wIG9iamVjdC4gVGhpcyB3aWxsIHN0b3AgdGhlIGFzc29jaWF0ZWQgZXZlbnQgbG9vcAorICogdGhyZWFkIChpZiBpdCBpcyBydW5uaW5nKS4gXHNpbmNlIDAuNi40ICovCit2b2lkIGF2YWhpX3RocmVhZGVkX3BvbGxfZnJlZShBdmFoaVRocmVhZGVkUG9sbCAqcCk7CisKKy8qKiBSZXR1cm4gdGhlIGFic3RyYWN0ZWQgcG9sbCBBUEkgb2JqZWN0IGZvciB0aGlzIGV2ZW50IGxvb3AKKyAqIG9iamVjdC4gVGhlIHdpbGwgcmV0dXJuIHRoZSBzYW1lIHBvaW50ZXIgZWFjaCB0aW1lIGl0IGlzCisgKiBjYWxsZWQuIFxzaW5jZSAwLjYuNCAqLworY29uc3QgQXZhaGlQb2xsKiBhdmFoaV90aHJlYWRlZF9wb2xsX2dldChBdmFoaVRocmVhZGVkUG9sbCAqcCk7CisKKy8qKiBTdGFydCB0aGUgZXZlbnQgbG9vcCBoZWxwZXIgdGhyZWFkLiBBZnRlciB0aGUgdGhyZWFkIGhhcyBzdGFydGVkCisgKiB5b3UgbXVzdCBtYWtlIHN1cmUgdG8gYWNjZXNzIHRoZSBldmVudCBsb29wIG9iamVjdAorICogKEF2YWhpVGhyZWFkZWRQb2xsLCBBdmFoaVBvbGwgYW5kIGFsbCBpdHMgYXNzb2NpYXRlZCBvYmplY3RzKQorICogc3luY2hyb25pemVkLCBpLmUuIHdpdGggcHJvcGVyIGxvY2tpbmcuIFlvdSBtYXkgd2FudCB0byB1c2UKKyAqIGF2YWhpX3RocmVhZGVkX3BvbGxfbG9jaygpL2F2YWhpX3RocmVhZGVkX3BvbGxfdW5sb2NrKCkgZm9yIHRoaXMsCisgKiB3aGljaCB3aWxsIGxvY2sgdGhlIHRoZSBlbnRpcmUgZXZlbnQgbG9vcC4gUGxlYXNlIG5vdGUgdGhhdCBldmVudAorICogbG9vcCBjYWxsYmFjayBmdW5jdGlvbnMgYXJlIGNhbGxlZCBmcm9tIHRoZSBldmVudCBsb29wIGhlbHBlciB0aHJlYWQKKyAqIHdpdGggdGhhdCBsb2NrIGhlbGQsIGkuZS4gYXZhaGlfdGhyZWFkZWRfcG9sbF9sb2NrKCkgY2FsbHMgYXJlIG5vdAorICogcmVxdWlyZWQgZnJvbSBldmVudCBjYWxsYmFja3MuIFxzaW5jZSAwLjYuNCAqLworaW50IGF2YWhpX3RocmVhZGVkX3BvbGxfc3RhcnQoQXZhaGlUaHJlYWRlZFBvbGwgKnApOworCisvKiogUmVxdWVzdCB0aGF0IHRoZSBldmVudCBsb29wIHF1aXRzIGFuZCB0aGUgYXNzb2NpYXRlZCB0aHJlYWQKKyBzdG9wcy4gQ2FsbCB0aGlzIGZyb20gb3V0c2lkZSB0aGUgaGVscGVyIHRocmVhZCBpZiB5b3Ugd2FudCB0byBzaHV0CisgaXQgZG93bi4gXHNpbmNlIDAuNi40ICovCitpbnQgYXZhaGlfdGhyZWFkZWRfcG9sbF9zdG9wKEF2YWhpVGhyZWFkZWRQb2xsICpwKTsKKworLyoqIFJlcXVlc3QgdGhhdCB0aGUgZXZlbnQgbG9vcCBxdWl0cyBhbmQgdGhlIGFzc29jaWF0ZWQgdGhyZWFkCisgc3RvcHMuIENhbGwgdGhpcyBmcm9tIGluc2lkZSB0aGUgaGVscGVyIHRocmVhZCBpZiB5b3Ugd2FudCB0byBzaHV0IGl0CisgZG93bi4gXHNpbmNlIDAuNi40ICAqLwordm9pZCBhdmFoaV90aHJlYWRlZF9wb2xsX3F1aXQoQXZhaGlUaHJlYWRlZFBvbGwgKnApOworCisvKiogTG9jayB0aGUgbWFpbiBsb29wIG9iamVjdC4gVXNlIHRoaXMgaWYgeW91IHdhbnQgdG8gYWNjZXNzIHRoZSBldmVudAorICogbG9vcCBvYmplY3RzIChzdWNoIGFzIGNyZWF0aW5nIGEgbmV3IGV2ZW50IHNvdXJjZSkgZnJvbSBhbnl0aGluZworICogZWxzZSBidXQgdGhlIGV2ZW50IGxvb3AgaGVscGVyIHRocmVhZCwgaS5lLiBmcm9tIGFueXRoaW5nIGVsc2UgYnV0IGV2ZW50CisgKiBsb29wIGNhbGxiYWNrcyBcc2luY2UgMC42LjQgICovCit2b2lkIGF2YWhpX3RocmVhZGVkX3BvbGxfbG9jayhBdmFoaVRocmVhZGVkUG9sbCAqcCk7CisKKy8qKiBVbmxvY2sgdGhlIGV2ZW50IGxvb3Agb2JqZWN0LCB1c2UgdGhpcyBhcyBjb3VudGVycGFydCB0bworICogYXZhaGlfdGhyZWFkZWRfcG9sbF9sb2NrKCkgXHNpbmNlIDAuNi40ICovCit2b2lkIGF2YWhpX3RocmVhZGVkX3BvbGxfdW5sb2NrKEF2YWhpVGhyZWFkZWRQb2xsICpwKTsKKworQVZBSElfQ19ERUNMX0VORAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21tb24vdGltZXZhbC10ZXN0LmMgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tbW9uL3RpbWV2YWwtdGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4N2MxODAKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tbW9uL3RpbWV2YWwtdGVzdC5jCkBAIC0wLDAgKzEsNDMgQEAKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImdjY21hY3JvLmgiCisjaW5jbHVkZSAidGltZXZhbC5oIgorCitpbnQgbWFpbihBVkFISV9HQ0NfVU5VU0VEIGludCBhcmdjLCBBVkFISV9HQ0NfVU5VU0VEIGNoYXIgKmFyZ3ZbXSkgeworCisgICAgc3RydWN0IHRpbWV2YWwgYSA9IHsgNSwgNSB9LCBiOworCisgICAgYiA9IGE7CisKKyAgICBwcmludGYoIiVsaS4lbGlcbiIsIGEudHZfc2VjLCBhLnR2X3VzZWMpOworICAgIGF2YWhpX3RpbWV2YWxfYWRkKCZhLCAtNTApOworCisgICAgcHJpbnRmKCIlbGkuJWxpXG4iLCBhLnR2X3NlYywgYS50dl91c2VjKTsKKworICAgIHByaW50ZigiJWxsaVxuIiwgKGxvbmcgbG9uZykgYXZhaGlfdGltZXZhbF9kaWZmKCZhLCAmYikpOworCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktY29tbW9uL3RpbWV2YWwuYyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21tb24vdGltZXZhbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkYjBmMDkKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tbW9uL3RpbWV2YWwuYwpAQCAtMCwwICsxLDEyMyBAQAorLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKyNpbmNsdWRlICJ0aW1ldmFsLmgiCisKK2ludCBhdmFoaV90aW1ldmFsX2NvbXBhcmUoY29uc3Qgc3RydWN0IHRpbWV2YWwgKmEsIGNvbnN0IHN0cnVjdCB0aW1ldmFsICpiKSB7CisgICAgYXNzZXJ0KGEpOworICAgIGFzc2VydChiKTsKKworICAgIGlmIChhLT50dl9zZWMgPCBiLT50dl9zZWMpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGlmIChhLT50dl9zZWMgPiBiLT50dl9zZWMpCisgICAgICAgIHJldHVybiAxOworCisgICAgaWYgKGEtPnR2X3VzZWMgPCBiLT50dl91c2VjKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAoYS0+dHZfdXNlYyA+IGItPnR2X3VzZWMpCisgICAgICAgIHJldHVybiAxOworCisgICAgcmV0dXJuIDA7Cit9CisKK0F2YWhpVXNlYyBhdmFoaV90aW1ldmFsX2RpZmYoY29uc3Qgc3RydWN0IHRpbWV2YWwgKmEsIGNvbnN0IHN0cnVjdCB0aW1ldmFsICpiKSB7CisgICAgYXNzZXJ0KGEpOworICAgIGFzc2VydChiKTsKKworICAgIGlmIChhdmFoaV90aW1ldmFsX2NvbXBhcmUoYSwgYikgPCAwKQorICAgICAgICByZXR1cm4gLSBhdmFoaV90aW1ldmFsX2RpZmYoYiwgYSk7CisKKyAgICByZXR1cm4gKChBdmFoaVVzZWMpIGEtPnR2X3NlYyAtIGItPnR2X3NlYykqMTAwMDAwMCArIGEtPnR2X3VzZWMgLSBiLT50dl91c2VjOworfQorCitzdHJ1Y3QgdGltZXZhbCogYXZhaGlfdGltZXZhbF9hZGQoc3RydWN0IHRpbWV2YWwgKmEsIEF2YWhpVXNlYyB1c2VjKSB7CisgICAgQXZhaGlVc2VjIHU7CisgICAgYXNzZXJ0KGEpOworCisgICAgdSA9IHVzZWMgKyBhLT50dl91c2VjOworCisgICAgaWYgKHUgPCAwKSB7CisgICAgICAgIGEtPnR2X3VzZWMgPSAobG9uZykgKDEwMDAwMDAgKyAodSAlIDEwMDAwMDApKTsKKyAgICAgICAgYS0+dHZfc2VjICs9IChsb25nKSAoLTEgKyAodSAvIDEwMDAwMDApKTsKKyAgICB9IGVsc2UgeworICAgICAgICBhLT50dl91c2VjID0gKGxvbmcpICh1ICUgMTAwMDAwMCk7CisgICAgICAgIGEtPnR2X3NlYyArPSAobG9uZykgKHUgLyAxMDAwMDAwKTsKKyAgICB9CisKKyAgICByZXR1cm4gYTsKK30KKworQXZhaGlVc2VjIGF2YWhpX2FnZShjb25zdCBzdHJ1Y3QgdGltZXZhbCAqYSkgeworICAgIHN0cnVjdCB0aW1ldmFsIG5vdzsKKworICAgIGFzc2VydChhKTsKKworICAgIGdldHRpbWVvZmRheSgmbm93LCBOVUxMKTsKKworICAgIHJldHVybiBhdmFoaV90aW1ldmFsX2RpZmYoJm5vdywgYSk7Cit9CisKK3N0cnVjdCB0aW1ldmFsICphdmFoaV9lbGFwc2VfdGltZShzdHJ1Y3QgdGltZXZhbCAqdHYsIHVuc2lnbmVkIG1zZWMsIHVuc2lnbmVkIGppdHRlcikgeworICAgIGFzc2VydCh0dik7CisKKyAgICBnZXR0aW1lb2ZkYXkodHYsIE5VTEwpOworCisgICAgaWYgKG1zZWMpCisgICAgICAgIGF2YWhpX3RpbWV2YWxfYWRkKHR2LCAoQXZhaGlVc2VjKSBtc2VjKjEwMDApOworCisgICAgaWYgKGppdHRlcikgeworICAgICAgICBzdGF0aWMgcHRocmVhZF9tdXRleF90IG11dGV4ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKKyAgICAgICAgc3RhdGljIGludCBsYXN0X3JhbmQ7CisgICAgICAgIHN0YXRpYyB0aW1lX3QgdGltZXN0YW1wID0gMDsKKworICAgICAgICB0aW1lX3Qgbm93OworICAgICAgICBpbnQgcjsKKworICAgICAgICBub3cgPSB0aW1lKE5VTEwpOworCisgICAgICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmbXV0ZXgpOworICAgICAgICBpZiAobm93ID49IHRpbWVzdGFtcCArIDEwKSB7CisgICAgICAgICAgICB0aW1lc3RhbXAgPSBub3c7CisgICAgICAgICAgICBsYXN0X3JhbmQgPSByYW5kKCk7CisgICAgICAgIH0KKworICAgICAgICByID0gbGFzdF9yYW5kOworCisgICAgICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZtdXRleCk7CisKKyAgICAgICAgLyogV2UgdXNlIHRoZSBzYW1lIGppdHRlciBmb3IgMTAgc2Vjb25kcy4gVGhhdCB3YXkgb3VyCisgICAgICAgICAqIHRpbWUgZXZlbnRzIGVsYXBzZSBpbiBidXJzdHMgd2hpY2ggaGFzIHRoZSBhZHZhbnRhZ2UgdGhhdAorICAgICAgICAgKiBwYWNrZXQgZGF0YSBjYW4gYmUgYWdncmVnYXRlZCBiZXR0ZXIgKi8KKworICAgICAgICBhdmFoaV90aW1ldmFsX2FkZCh0diwgKEF2YWhpVXNlYykgKGppdHRlcioxMDAwLjAqci8oUkFORF9NQVgrMS4wKSkpOworICAgIH0KKworICAgIHJldHVybiB0djsKK30KKwpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvbW1vbi90aW1ldmFsLmggYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tbW9uL3RpbWV2YWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDcwZjAxCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbW1vbi90aW1ldmFsLmgKQEAgLTAsMCArMSw1NCBAQAorI2lmbmRlZiBmb290aW1ldmFsaGZvbworI2RlZmluZSBmb290aW1ldmFsaGZvbworCisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKy8qKiBcZmlsZSB0aW1ldmFsLmggRnVuY3Rpb25zIHRvIGZhY2lsaXRhdGUgdGltZXZhbCBoYW5kbGluZyAqLworCisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2NkZWNsLmg+CisKK0FWQUhJX0NfREVDTF9CRUdJTgorCisvKiogQSBudW1lcmljIGRhdGEgdHlwZSBmb3Igc3RvcmluZyBtaWNyb3NlY29uZCB2YWx1ZXMuIChzaWduZWQgNjRiaXQgaW50ZWdlcikgKi8KK3R5cGVkZWYgaW50NjRfdCBBdmFoaVVzZWM7CisKKy8qKiBDb21wYXJlIHR3byB0aW1ldmFsIHN0cnVjdHVyZXMgYW5kIHJldHVybiBhIG5lZ2F0aXZlIHZhbHVlIHdoZW4gYSA8IGIsIDAgd2hlbiBhID09IGIgYW5kIGEgcG9zaXRpdmUgdmFsdWUgb3RoZXJ3aXNlICovCitpbnQgYXZhaGlfdGltZXZhbF9jb21wYXJlKGNvbnN0IHN0cnVjdCB0aW1ldmFsICphLCBjb25zdCBzdHJ1Y3QgdGltZXZhbCAqYik7CisKKy8qKiBDYWxjdWxhdGUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gdGltZXZhbCBzdHJ1Y3R1cmVzIGFzIG1pY3Jvc2Vjb25kIHZhbHVlICovCitBdmFoaVVzZWMgYXZhaGlfdGltZXZhbF9kaWZmKGNvbnN0IHN0cnVjdCB0aW1ldmFsICphLCBjb25zdCBzdHJ1Y3QgdGltZXZhbCAqYik7CisKKy8qKiBBZGQgYSBudW1iZXIgb2YgbWljcm9zZWNvbmRzIHRvIHRoZSBzcGVjaWZpZWQgdGltZXZhbCBzdHJ1Y3R1cmUgYW5kIHJldHVybiBpdC4gKmEgaXMgbW9kaWZpZWQuICovCitzdHJ1Y3QgdGltZXZhbCogYXZhaGlfdGltZXZhbF9hZGQoc3RydWN0IHRpbWV2YWwgKmEsIEF2YWhpVXNlYyB1c2VjKTsKKworLyoqIFJldHVybiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBjdXJyZW50IHRpbWUgYW5kICphLiBQb3NpdGl2ZSBpZiAqYSB3YXMgZWFybGllciAqLworQXZhaGlVc2VjIGF2YWhpX2FnZShjb25zdCBzdHJ1Y3QgdGltZXZhbCAqYSk7CisKKy8qKiBGaWxsICp0diB3aXRoIHRoZSBjdXJyZW50IHRpbWUgcGx1cyAibXMiIG1pbGxpc2Vjb25kcyBwbHVzIGFuCisgKiBleHRyYSBqaXR0ZXIgb2YgImoiIG1pbGxpc2Vjb25kcy4gUGFzcyAwIGZvciBqIGlmIHlvdSBkb24ndCB3YW50CisgKiB0aGUgaml0dGVyICovCitzdHJ1Y3QgdGltZXZhbCAqYXZhaGlfZWxhcHNlX3RpbWUoc3RydWN0IHRpbWV2YWwgKnR2LCB1bnNpZ25lZCBtcywgdW5zaWduZWQgaik7CisKK0FWQUhJX0NfREVDTF9FTkQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktY29tbW9uL3V0ZjgtdGVzdC5jIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbW1vbi91dGY4LXRlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTJlZDU4Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbW1vbi91dGY4LXRlc3QuYwpAQCAtMCwwICsxLDM3IEBACisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGFzc2VydC5oPgorCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2djY21hY3JvLmg+CisKKyNpbmNsdWRlICJ1dGY4LmgiCisKK2ludCBtYWluKEFWQUhJX0dDQ19VTlVTRUQgaW50IGFyZ2MsIEFWQUhJX0dDQ19VTlVTRUQgY2hhciAqYXJndltdKSB7CisKKyAgICBhc3NlcnQoYXZhaGlfdXRmOF92YWxpZCgiaGFsbG8iKSk7CisgICAgYXNzZXJ0KCFhdmFoaV91dGY4X3ZhbGlkKCL8eGtu/HJ6IikpOworICAgIGFzc2VydChhdmFoaV91dGY4X3ZhbGlkKCLDvHhrbsO8cnoiKSk7CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21tb24vdXRmOC5jIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbW1vbi91dGY4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIxMGJhMAotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21tb24vdXRmOC5jCkBAIC0wLDAgKzEsMTEwIEBACisvKiBUaGlzIGZpbGUgaXMgYmFzZWQgb24gdGhlIEdMSUIgdXRmOCB2YWxpZGF0aW9uIGZ1bmN0aW9ucy4gVGhlCisgKiBvcmlnaW5hbCBsaWNlbnNlIHRleHQgZm9sbG93cy4gKi8KKworLyogZ3V0ZjguYyAtIE9wZXJhdGlvbnMgb24gVVRGLTggc3RyaW5ncy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgVG9tIFRyb21leQorICogQ29weXJpZ2h0IChDKSAyMDAwIFJlZCBIYXQsIEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2luY2x1ZGUgInV0ZjguaCIKKworI2RlZmluZSBVTklDT0RFX1ZBTElEKENoYXIpICAgICAgICAgICAgICAgICAgIFwKKyAgICAoKENoYXIpIDwgMHgxMTAwMDAgJiYgICAgICAgICAgICAgICAgICAgICBcCisgICAgICgoKENoYXIpICYgMHhGRkZGRjgwMCkgIT0gMHhEODAwKSAmJiAgICAgXAorICAgICAoKENoYXIpIDwgMHhGREQwIHx8IChDaGFyKSA+IDB4RkRFRikgJiYgIFwKKyAgICAgKChDaGFyKSAmIDB4RkZGRSkgIT0gMHhGRkZFKQorCisKKyNkZWZpbmUgQ09OVElOVUFUSU9OX0NIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGlmICgoKihjb25zdCB1bnNpZ25lZCBjaGFyICopcCAmIDB4YzApICE9IDB4ODApIC8qIDEweHh4eHh4ICovIFwKKyAgICBnb3RvIGVycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHZhbCA8PD0gNjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB2YWwgfD0gKCooY29uc3QgdW5zaWduZWQgY2hhciAqKXApICYgMHgzZjsgICAgICAgICAgICAgICAgICAgICBcCisgfSB3aGlsZSgwKQorCisKK2NvbnN0IGNoYXIgKgorYXZhaGlfdXRmOF92YWxpZCAoY29uc3QgY2hhciAqc3RyKQorCit7CisgIHVuc2lnbmVkIHZhbCA9IDA7CisgIHVuc2lnbmVkIG1pbiA9IDA7CisgIGNvbnN0IGNoYXIgKnA7CisKKyAgZm9yIChwID0gc3RyOyAqcDsgcCsrKQorICAgIHsKKyAgICAgIGlmICgqKGNvbnN0IHVuc2lnbmVkIGNoYXIgKilwIDwgMTI4KQorCS8qIGRvbmUgKi87CisgICAgICBlbHNlCisJeworCSAgaWYgKCgqKGNvbnN0IHVuc2lnbmVkIGNoYXIgKilwICYgMHhlMCkgPT0gMHhjMCkgLyogMTEweHh4eHggKi8KKwkgICAgeworCSAgICAgIGlmICggKCgqKGNvbnN0IHVuc2lnbmVkIGNoYXIgKilwICYgMHgxZSkgPT0gMCkpCisJCWdvdG8gZXJyb3I7CisJICAgICAgcCsrOworCSAgICAgIGlmICggKCgqKGNvbnN0IHVuc2lnbmVkIGNoYXIgKilwICYgMHhjMCkgIT0gMHg4MCkpIC8qIDEweHh4eHh4ICovCisJCWdvdG8gZXJyb3I7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIGlmICgoKihjb25zdCB1bnNpZ25lZCBjaGFyICopcCAmIDB4ZjApID09IDB4ZTApIC8qIDExMTB4eHh4ICovCisJCXsKKwkJICBtaW4gPSAoMSA8PCAxMSk7CisJCSAgdmFsID0gKihjb25zdCB1bnNpZ25lZCBjaGFyICopcCAmIDB4MGY7CisJCSAgZ290byBUV09fUkVNQUlOSU5HOworCQl9CisJICAgICAgZWxzZSBpZiAoKCooY29uc3QgdW5zaWduZWQgY2hhciAqKXAgJiAweGY4KSA9PSAweGYwKSAvKiAxMTExMHh4eCAqLworCQl7CisJCSAgbWluID0gKDEgPDwgMTYpOworCQkgIHZhbCA9ICooY29uc3QgdW5zaWduZWQgY2hhciAqKXAgJiAweDA3OworCQl9CisJICAgICAgZWxzZQorCQlnb3RvIGVycm9yOworCisJICAgICAgcCsrOworCSAgICAgIENPTlRJTlVBVElPTl9DSEFSOworCSAgICBUV09fUkVNQUlOSU5HOgorCSAgICAgIHArKzsKKwkgICAgICBDT05USU5VQVRJT05fQ0hBUjsKKwkgICAgICBwKys7CisJICAgICAgQ09OVElOVUFUSU9OX0NIQVI7CisKKwkgICAgICBpZiAoICh2YWwgPCBtaW4pKQorCQlnb3RvIGVycm9yOworCisJICAgICAgaWYgKCAoIVVOSUNPREVfVkFMSUQodmFsKSkpCisJCWdvdG8gZXJyb3I7CisJICAgIH0KKworCSAgY29udGludWU7CisKKwllcnJvcjoKKwkgIHJldHVybiBOVUxMOworCX0KKyAgICB9CisKKyAgcmV0dXJuIHN0cjsKK30KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21tb24vdXRmOC5oIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbW1vbi91dGY4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMxY2U0YgotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21tb24vdXRmOC5oCkBAIC0wLDAgKzEsMzMgQEAKKyNpZm5kZWYgZm9vdXRmOGhmb28KKyNkZWZpbmUgZm9vdXRmOGhmb28KKworLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKworI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9jZGVjbC5oPgorCitBVkFISV9DX0RFQ0xfQkVHSU4KKworY29uc3QgY2hhciAqYXZhaGlfdXRmOF92YWxpZChjb25zdCBjaGFyICpzdHIpOworCitBVkFISV9DX0RFQ0xfRU5ECisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvbW1vbi93YXRjaC10ZXN0LmMgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tbW9uL3dhdGNoLXRlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzE3OGJhCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbW1vbi93YXRjaC10ZXN0LmMKQEAgLTAsMCArMSwxMTUgQEAKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAid2F0Y2guaCIKKyNpbmNsdWRlICJ0aW1ldmFsLmgiCisjaW5jbHVkZSAiZ2NjbWFjcm8uaCIKKworc3RhdGljIGNvbnN0IEF2YWhpUG9sbCAqYXBpID0gTlVMTDsKKworI2lmbmRlZiBVU0VfVEhSRUFECisjaW5jbHVkZSAic2ltcGxlLXdhdGNoLmgiCitzdGF0aWMgQXZhaGlTaW1wbGVQb2xsICpzaW1wbGVfcG9sbCA9IE5VTEw7CisjZWxzZQorI2luY2x1ZGUgInRocmVhZC13YXRjaC5oIgorc3RhdGljIEF2YWhpVGhyZWFkZWRQb2xsICp0aHJlYWRlZF9wb2xsID0gTlVMTDsKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBjYWxsYmFjayhBdmFoaVdhdGNoICp3LCBpbnQgZmQsIEF2YWhpV2F0Y2hFdmVudCBldmVudCwgQVZBSElfR0NDX1VOVVNFRCB2b2lkICp1c2VyZGF0YSkgeworCisgICAgaWYgKGV2ZW50ICYgQVZBSElfV0FUQ0hfSU4pIHsKKyAgICAgICAgc3NpemVfdCByOworICAgICAgICBjaGFyIGM7CisKKyAgICAgICAgaWYgKChyID0gcmVhZChmZCwgJmMsIDEpKSA8PSAwKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInJlYWQoKSBmYWlsZWQ6ICVzXG4iLCByIDwgMCA/IHN0cmVycm9yKGVycm5vKSA6ICJFT0YiKTsKKyAgICAgICAgICAgIGFwaS0+d2F0Y2hfZnJlZSh3KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHByaW50ZigiUmVhZDogJWNcbiIsIGMgPj0gMzIgJiYgYyA8IDEyNyA/IGMgOiAnLicpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2FrZXVwKEF2YWhpVGltZW91dCAqdCwgQVZBSElfR0NDX1VOVVNFRCB2b2lkICp1c2VyZGF0YSkgeworICAgIHN0YXRpYyBpbnQgaSA9IDA7CisgICAgc3RydWN0IHRpbWV2YWwgdHY7CisKKyAgICBwcmludGYoIldha2V1cCAjJWlcbiIsIGkrKyk7CisKKyAgICBpZiAoaSA+IDEwKSB7CisjaWZuZGVmIFVTRV9USFJFQUQKKyAgICAgICAgYXZhaGlfc2ltcGxlX3BvbGxfcXVpdChzaW1wbGVfcG9sbCk7CisjZWxzZQorICAgICAgICBhdmFoaV90aHJlYWRlZF9wb2xsX3F1aXQodGhyZWFkZWRfcG9sbCk7CisjZW5kaWYKKyAgICB9IGVsc2UgeworICAgICAgICBhdmFoaV9lbGFwc2VfdGltZSgmdHYsIDEwMDAsIDApOworICAgICAgICBhcGktPnRpbWVvdXRfdXBkYXRlKHQsICZ0dik7CisgICAgfQorfQorCitpbnQgbWFpbihBVkFISV9HQ0NfVU5VU0VEIGludCBhcmdjLCBBVkFISV9HQ0NfVU5VU0VEIGNoYXIgKmFyZ3ZbXSkgeworICAgIHN0cnVjdCB0aW1ldmFsIHR2OworCisjaWZuZGVmIFVTRV9USFJFQUQKKyAgICBzaW1wbGVfcG9sbCA9IGF2YWhpX3NpbXBsZV9wb2xsX25ldygpOworICAgIGFzc2VydChzaW1wbGVfcG9sbCk7CisgICAgYXBpID0gYXZhaGlfc2ltcGxlX3BvbGxfZ2V0KHNpbXBsZV9wb2xsKTsKKyAgICBhc3NlcnQoYXBpKTsKKyNlbHNlCisgICAgdGhyZWFkZWRfcG9sbCA9IGF2YWhpX3RocmVhZGVkX3BvbGxfbmV3KCk7CisgICAgYXNzZXJ0KHRocmVhZGVkX3BvbGwpOworICAgIGFwaSA9IGF2YWhpX3RocmVhZGVkX3BvbGxfZ2V0KHRocmVhZGVkX3BvbGwpOworICAgIGFzc2VydChhcGkpOworI2VuZGlmCisKKyAgICBhcGktPndhdGNoX25ldyhhcGksIDAsIEFWQUhJX1dBVENIX0lOLCBjYWxsYmFjaywgTlVMTCk7CisKKyAgICBhdmFoaV9lbGFwc2VfdGltZSgmdHYsIDEwMDAsIDApOworICAgIGFwaS0+dGltZW91dF9uZXcoYXBpLCAmdHYsIHdha2V1cCwgTlVMTCk7CisKKyNpZm5kZWYgVVNFX1RIUkVBRAorICAgIC8qIE91ciBtYWluIGxvb3AgKi8KKyAgICBhdmFoaV9zaW1wbGVfcG9sbF9sb29wKHNpbXBsZV9wb2xsKTsKKyAgICBhdmFoaV9zaW1wbGVfcG9sbF9mcmVlKHNpbXBsZV9wb2xsKTsKKworI2Vsc2UKKyAgICBhdmFoaV90aHJlYWRlZF9wb2xsX3N0YXJ0KHRocmVhZGVkX3BvbGwpOworCisgICAgZnByaW50ZihzdGRlcnIsICJOb3cgZG9pbmcgc29tZSBzdHVwaWQgc3R1ZmYgLi4uXG4iKTsKKyAgICBzbGVlcCgyMCk7CisgICAgZnByaW50ZihzdGRlcnIsICIuLi4gc3R1cGlkIHN0dWZmIGlzIGRvbmUuXG4iKTsKKworICAgIGF2YWhpX3RocmVhZGVkX3BvbGxfZnJlZSh0aHJlYWRlZF9wb2xsKTsKKworI2VuZGlmCisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21tb24vd2F0Y2guaCBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21tb24vd2F0Y2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmU2M2QzCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbW1vbi93YXRjaC5oCkBAIC0wLDAgKzEsOTcgQEAKKyNpZm5kZWYgZm9vd2F0Y2hoZm9vCisjZGVmaW5lIGZvb3dhdGNoaGZvbworCisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKy8qKiBcZmlsZSB3YXRjaC5oIFNpbXBsaXN0aWMgbWFpbiBsb29wIGFic3RyYWN0aW9uICovCisKKyNpbmNsdWRlIDxzeXMvcG9sbC5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisKKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vY2RlY2wuaD4KKworQVZBSElfQ19ERUNMX0JFR0lOCisKKy8qKiBBbiBJL08gd2F0Y2ggb2JqZWN0ICovCit0eXBlZGVmIHN0cnVjdCBBdmFoaVdhdGNoIEF2YWhpV2F0Y2g7CisKKy8qKiBBIHRpbWVvdXQgd2F0Y2ggb2JqZWN0ICovCit0eXBlZGVmIHN0cnVjdCBBdmFoaVRpbWVvdXQgQXZhaGlUaW1lb3V0OworCisvKiogQW4gZXZlbnQgcG9sbGluZyBhYnN0cmFjdGlvbiBvYmplY3QgKi8KK3R5cGVkZWYgc3RydWN0IEF2YWhpUG9sbCBBdmFoaVBvbGw7CisKKy8qKiBUeXBlIG9mIHdhdGNoIGV2ZW50cyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICBBVkFISV9XQVRDSF9JTiA9IFBPTExJTiwgICAgICAvKio8IElucHV0IGV2ZW50ICovCisgICAgQVZBSElfV0FUQ0hfT1VUID0gUE9MTE9VVCwgICAgLyoqPCBPdXRwdXQgZXZlbnQgKi8KKyAgICBBVkFISV9XQVRDSF9FUlIgPSBQT0xMRVJSLCAgICAvKio8IEVycm9yIGV2ZW50ICovCisgICAgQVZBSElfV0FUQ0hfSFVQID0gUE9MTEhVUCAgICAgLyoqPCBIYW5ndXAgZXZlbnQgKi8KK30gQXZhaGlXYXRjaEV2ZW50OworCisvKiogQ2FsbGVkIHdoZW5ldmVyIGFuIEkvTyBldmVudCBoYXBwZW5zICBvbiBhbiBJL08gd2F0Y2ggKi8KK3R5cGVkZWYgdm9pZCAoKkF2YWhpV2F0Y2hDYWxsYmFjaykoQXZhaGlXYXRjaCAqdywgaW50IGZkLCBBdmFoaVdhdGNoRXZlbnQgZXZlbnQsIHZvaWQgKnVzZXJkYXRhKTsKKworLyoqIENhbGxlZCB3aGVuIHRoZSB0aW1lb3V0IGlzIHJlYWNoZWQgKi8KK3R5cGVkZWYgdm9pZCAoKkF2YWhpVGltZW91dENhbGxiYWNrKShBdmFoaVRpbWVvdXQgKnQsIHZvaWQgKnVzZXJkYXRhKTsKKworLyoqIERlZmluZXMgYW4gYWJzdHJhY3RlZCBldmVudCBwb2xsaW5nIEFQSS4gVGhpcyBtYXkgYmUgdXNlZCB0bworIGNvbm5lY3QgQXZhaGkgdG8gb3RoZXIgbWFpbiBsb29wcy4gVGhpcyBpcyBsb29zZWx5IGJhc2VkIG9uIFVuaXgKKyBwb2xsKDIpLiBBIGNvbnN1bWVyIHdpbGwgY2FsbCB3YXRjaF9uZXcoKSBmb3IgYWxsIGZpbGUgZGVzY3JpcHRvcnMgaXQKKyB3YW50cyB0byBsaXN0ZW4gZm9yIGV2ZW50cyBvbi4gSW4gYWRkaXRpb24gaGUgY2FuIGNhbGwgdGltZW91dF9uZXcoKQorIHRvIGRlZmluZSB0aW1lIGJhc2VkIGV2ZW50cyAuKi8KK3N0cnVjdCBBdmFoaVBvbGwgeworCisgICAgLyoqIFNvbWUgYWJzdHJhY3QgdXNlciBkYXRhIHVzYWJsZSBieSB0aGUgcHJvdmlkZXIgb2YgdGhlIEFQSSAqLworICAgIHZvaWQqIHVzZXJkYXRhOworCisgICAgLyoqIENyZWF0ZSBhIG5ldyB3YXRjaCBmb3IgdGhlIHNwZWNpZmllZCBmaWxlIGRlc2NyaXB0b3IgYW5kIGZvcgorICAgICAqIHRoZSBzcGVjaWZpZWQgZXZlbnRzLiBUaGUgQVBJIHdpbGwgY2FsbCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24KKyAgICAgKiB3aGVuZXZlciBhbnkgb2YgdGhlIGV2ZW50cyBoYXBwZW5zLiAqLworICAgIEF2YWhpV2F0Y2gqICgqd2F0Y2hfbmV3KShjb25zdCBBdmFoaVBvbGwgKmFwaSwgaW50IGZkLCBBdmFoaVdhdGNoRXZlbnQgZXZlbnQsIEF2YWhpV2F0Y2hDYWxsYmFjayBjYWxsYmFjaywgdm9pZCAqdXNlcmRhdGEpOworCisgICAgLyoqIFVwZGF0ZSB0aGUgZXZlbnRzIHRvIHdhaXQgZm9yLiBJdCBpcyBzYWZlIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBmcm9tIGFuIEF2YWhpV2F0Y2hDYWxsYmFjayAqLworICAgIHZvaWQgKCp3YXRjaF91cGRhdGUpKEF2YWhpV2F0Y2ggKncsIEF2YWhpV2F0Y2hFdmVudCBldmVudCk7CisKKyAgICAvKiogUmV0dXJuIHRoZSBldmVudHMgdGhhdCBoYXBwZW5lZC4gSXQgaXMgc2FmZSB0byBjYWxsIHRoaXMgZnVuY3Rpb24gZnJvbSBhbiBBdmFoaVdhdGNoQ2FsbGJhY2sgICovCisgICAgQXZhaGlXYXRjaEV2ZW50ICgqd2F0Y2hfZ2V0X2V2ZW50cykoQXZhaGlXYXRjaCAqdyk7CisKKyAgICAvKiogRnJlZSBhIHdhdGNoLiBJdCBpcyBzYWZlIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBmcm9tIGFuIEF2YWhpV2F0Y2hDYWxsYmFjayAqLworICAgIHZvaWQgKCp3YXRjaF9mcmVlKShBdmFoaVdhdGNoICp3KTsKKworICAgIC8qKiBTZXQgYSB3YWtldXAgdGltZSBmb3IgdGhlIHBvbGxpbmcgbG9vcC4gVGhlIEFQSSB3aWxsIGNhbGwgdGhlCisgICAgY2FsbGJhY2sgZnVuY3Rpb24gd2hlbiB0aGUgYWJzb2x1dGUgdGltZSAqdHYgaXMgcmVhY2hlZC4gSWYgdHYgaXMKKyAgICBOVUxMLCB0aGUgdGltZW91dCBpcyBkaXNhYmxlZC4gQWZ0ZXIgdGhlIHRpbWVvdXQgZXhwaXJlZCB0aGUKKyAgICBjYWxsYmFjayBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBhbmQgdGhlIHRpbWVvdXQgaXMgZGlzYWJsZWQuIFlvdQorICAgIGNhbiByZWVuYWJsZSBpdCBieSBjYWxsaW5nIHRpbWVvdXRfdXBkYXRlKCkgICovCisgICAgQXZhaGlUaW1lb3V0KiAoKnRpbWVvdXRfbmV3KShjb25zdCBBdmFoaVBvbGwgKmFwaSwgY29uc3Qgc3RydWN0IHRpbWV2YWwgKnR2LCBBdmFoaVRpbWVvdXRDYWxsYmFjayBjYWxsYmFjaywgdm9pZCAqdXNlcmRhdGEpOworCisgICAgLyoqIFVwZGF0ZSB0aGUgYWJzb2x1dGUgZXhwaXJhdGlvbiB0aW1lIGZvciBhIHRpbWVvdXQsIElmIHR2IGlzCisgICAgICogTlVMTCwgdGhlIHRpbWVvdXQgaXMgZGlzYWJsZWQuIEl0IGlzIHNhZmUgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIGZyb20gYW4gQXZhaGlUaW1lb3V0Q2FsbGJhY2sgKi8KKyAgICB2b2lkICgqdGltZW91dF91cGRhdGUpKEF2YWhpVGltZW91dCAqLCBjb25zdCBzdHJ1Y3QgdGltZXZhbCAqdHYpOworCisgICAgLyoqIEZyZWUgYSB0aW1lb3V0LiBJdCBpcyBzYWZlIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBmcm9tIGFuIEF2YWhpVGltZW91dENhbGxiYWNrICovCisgICAgdm9pZCAoKnRpbWVvdXRfZnJlZSkoQXZhaGlUaW1lb3V0ICp0KTsKK307CisKK0FWQUhJX0NfREVDTF9FTkQKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtaG93bC5wYy5pbiBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtaG93bC5wYy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2NkMDJhCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbXBhdC1ob3dsLnBjLmluCkBAIC0wLDAgKzEsMTAgQEAKK3ByZWZpeD1AcHJlZml4QAorZXhlY19wcmVmaXg9JHtwcmVmaXh9CitsaWJkaXI9QGxpYmRpckAKK2luY2x1ZGVkaXI9JHtwcmVmaXh9L2luY2x1ZGUvYXZhaGktY29tcGF0LWhvd2wvCisKK05hbWU6IGF2YWhpLWNvbXBhdC1ob3dsCitEZXNjcmlwdGlvbjogQXZhaGkgTXVsdGljYXN0IEROUyBSZXNwb25kZXIgKEhPV0wgQ29tcGF0aWJpbGl0eSkKK1ZlcnNpb246IEBIT1dMX0NPTVBBVF9WRVJTSU9OQAorTGliczogLUwke2xpYmRpcn0gLWxob3dsCitDZmxhZ3M6IC1EX1JFRU5UUkFOVCAtSSR7aW5jbHVkZWRpcn0KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtaG93bC9NYWtlZmlsZS5hbSBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtaG93bC9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzY3MTQyCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbXBhdC1ob3dsL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMTA5IEBACisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorIworIyBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworIyBVU0EuCisKK0FNX0NGTEFHUz0tSSQodG9wX3NyY2RpcikKKworIyBUaGlzIGNvb2wgZGVidWcgdHJhcCB3b3JrcyBvbiBpMzg2L2djYyBvbmx5CitBTV9DRkxBR1MrPSctRERFQlVHX1RSQVA9X19hc21fXygiaW50ICQkMyIpJworCitTVUJESVJTID0gLiBzYW1wbGVzCisKK2lmIEhBVkVfREJVUworaWYgRU5BQkxFX0NPTVBBVF9IT1dMCisKK2F2YWhpX2NvbXBhdF9ob3dsZGlyPSQoaW5jbHVkZWRpcikvYXZhaGktY29tcGF0LWhvd2wKK2F2YWhpX2NvbXBhdF9ob3dsX3JlbmRlenZvdXNkaXI9JChhdmFoaV9jb21wYXRfaG93bGRpcikvcmVuZGV6dm91cworYXZhaGlfY29tcGF0X2hvd2xfY29yYnlkaXI9JChhdmFoaV9jb21wYXRfaG93bGRpcikvY29yYnkKK2F2YWhpX2NvbXBhdF9ob3dsX2Rpc2NvdmVyeWRpcj0kKGF2YWhpX2NvbXBhdF9ob3dsZGlyKS9kaXNjb3ZlcnkKK2F2YWhpX2NvbXBhdF9ob3dsX3NhbHRkaXI9JChhdmFoaV9jb21wYXRfaG93bGRpcikvc2FsdAorCithdmFoaV9jb21wYXRfaG93bF9IRUFERVJTID0gXAorCWluY2x1ZGUvaG93bC5oCisKK2F2YWhpX2NvbXBhdF9ob3dsX3JlbmRlenZvdXNfSEVBREVSUyA9IFwKKwlpbmNsdWRlL3JlbmRlenZvdXMvcmVuZGV6dm91cy5oIFwKKwlpbmNsdWRlL3JlbmRlenZvdXMvdGV4dF9yZWNvcmQuaAorCithdmFoaV9jb21wYXRfaG93bF9jb3JieV9IRUFERVJTID0gXAorCWluY2x1ZGUvY29yYnkvbWVzc2FnZS5oIFwKKwlpbmNsdWRlL2NvcmJ5L29iamVjdC5oIFwKKwlpbmNsdWRlL2NvcmJ5L29yYi5oIFwKKwlpbmNsdWRlL2NvcmJ5L2NvcmJ5LmggXAorCWluY2x1ZGUvY29yYnkvY2hhbm5lbC5oIFwKKwlpbmNsdWRlL2NvcmJ5L2J1ZmZlci5oCisKK2F2YWhpX2NvbXBhdF9ob3dsX2Rpc2NvdmVyeV9IRUFERVJTID0gXAorCWluY2x1ZGUvZGlzY292ZXJ5L2Rpc2NvdmVyeS5oIFwKKwlpbmNsdWRlL2Rpc2NvdmVyeS90ZXh0X3JlY29yZC5oCisKK2F2YWhpX2NvbXBhdF9ob3dsX3NhbHRfSEVBREVSUyA9IFwKKwlpbmNsdWRlL3NhbHQvc29ja2V0LmggXAorCWluY2x1ZGUvc2FsdC9hZGRyZXNzLmggXAorCWluY2x1ZGUvc2FsdC9wbGF0Zm9ybS5oIFwKKwlpbmNsdWRlL3NhbHQvc2lnbmFsLmggXAorCWluY2x1ZGUvc2FsdC9pbnRlcmZhY2UuaCBcCisJaW5jbHVkZS9zYWx0L3NhbHQuaCBcCisJaW5jbHVkZS9zYWx0L3RpbWUuaCBcCisJaW5jbHVkZS9zYWx0L2RlYnVnLmgKKworSE9XTEhFQURFUlMgPSBcCisJJChhdmFoaV9jb21wYXRfaG93bF9IRUFERVJTKSBcCisJJChhdmFoaV9jb21wYXRfaG93bF9yZW5kZXp2b3VzX0hFQURFUlMpIFwKKwkkKGF2YWhpX2NvbXBhdF9ob3dsX2NvcmJ5X0hFQURFUlMpIFwKKwkkKGF2YWhpX2NvbXBhdF9ob3dsX2Rpc2NvdmVyeV9IRUFERVJTKSBcCisJJChhdmFoaV9jb21wYXRfaG93bF9zYWx0X0hFQURFUlMpCisKK2xpYl9MVExJQlJBUklFUyA9IGxpYmhvd2wubGEKKworaWYgRU5BQkxFX1RFU1RTCitub2luc3RfUFJPR1JBTVMgPSBhZGRyZXNzLXRlc3QgdGV4dC10ZXN0IGJyb3dzZS1kb21haW4tdGVzdAorZW5kaWYKKworbGliaG93bF9sYV9TT1VSQ0VTID0gXAorCSQoSE9XTEhFQURFUlMpIFwKKwl3YXJuLmMgd2Fybi5oIFwKKwl1bnN1cHBvcnRlZC5jIFwKKwlhZGRyZXNzLmMgXAorCXRleHQuYyBcCisJY29tcGF0LmMKK2xpYmhvd2xfbGFfQ0ZMQUdTID0gJChBTV9DRkxBR1MpICQoUFRIUkVBRF9DRkxBR1MpIC1JICQoc3JjZGlyKS9pbmNsdWRlCitsaWJob3dsX2xhX0xERkxBR1MgPSAkKEFNX0xERkxBR1MpICAtdmVyc2lvbi1pbmZvICQoTElCQVZBSElfQ09NUEFUX0hPV0xfVkVSU0lPTl9JTkZPKSAkKFBUSFJFQURfTElCUykgJChQVEhSRUFEX0NGTEFHUykgLi4vYXZhaGktY29tbW9uL2xpYmF2YWhpLWNvbW1vbi5sYSAuLi9hdmFoaS1jbGllbnQvbGliYXZhaGktY2xpZW50LmxhCisKK2FkZHJlc3NfdGVzdF9TT1VSQ0VTID0gXAorCSQoSE9XTEhFQURFUlMpIFwKKwlhZGRyZXNzLmMgXAorCWFkZHJlc3MtdGVzdC5jIFwKKwl3YXJuLmMgd2Fybi5oCithZGRyZXNzX3Rlc3RfQ0ZMQUdTID0gJChBTV9DRkxBR1MpICQoUFRIUkVBRF9DRkxBR1MpIC1JICQoc3JjZGlyKS9pbmNsdWRlCithZGRyZXNzX3Rlc3RfTERBREQgPSAkKEFNX0xEQUREKSAkKFBUSFJFQURfTElCUykgJChQVEhSRUFEX0NGTEFHUykgLi4vYXZhaGktY29tbW9uL2xpYmF2YWhpLWNvbW1vbi5sYQorCit0ZXh0X3Rlc3RfU09VUkNFUyA9IFwKKwkkKEhPV0xIRUFERVJTKSBcCisJdGV4dC5jIFwKKwl0ZXh0LXRlc3QuYyBcCisJd2Fybi5jIHdhcm4uaAordGV4dF90ZXN0X0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAgJChQVEhSRUFEX0NGTEFHUykgLUkgJChzcmNkaXIpL2luY2x1ZGUKK3RleHRfdGVzdF9MREFERCA9ICQoQU1fTERBREQpICQoUFRIUkVBRF9MSUJTKSAkKFBUSFJFQURfQ0ZMQUdTKSAuLi9hdmFoaS1jb21tb24vbGliYXZhaGktY29tbW9uLmxhCisKK2Jyb3dzZV9kb21haW5fdGVzdF9TT1VSQ0VTID0gXAorCSQoSE9XTEhFQURFUlMpIFwKKwlicm93c2UtZG9tYWluLXRlc3QuYworYnJvd3NlX2RvbWFpbl90ZXN0X0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAkKFBUSFJFQURfQ0ZMQUdTKSAtSSAkKHNyY2RpcikvaW5jbHVkZQorYnJvd3NlX2RvbWFpbl90ZXN0X0xEQUREID0gJChBTV9MREFERCkgJChQVEhSRUFEX0xJQlMpICQoUFRIUkVBRF9DRkxBR1MpIGxpYmhvd2wubGEKKworZW5kaWYKK2VuZGlmCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktY29tcGF0LWhvd2wvTWFrZWZpbGUuaW4gYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tcGF0LWhvd2wvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY1OWZjMgotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtaG93bC9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDEzMzcgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEuMyBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKyMKKyMgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyMgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyMgVVNBLgorCisKKworVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBFTkFCTEVfVEVTVFNfVFJVRUBASEFWRV9EQlVTX1RSVUVAbm9pbnN0X1BST0dSQU1TID0gYWRkcmVzcy10ZXN0JChFWEVFWFQpIFwKK0BFTkFCTEVfQ09NUEFUX0hPV0xfVFJVRUBARU5BQkxFX1RFU1RTX1RSVUVAQEhBVkVfREJVU19UUlVFQAl0ZXh0LXRlc3QkKEVYRUVYVCkgXAorQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBFTkFCTEVfVEVTVFNfVFJVRUBASEFWRV9EQlVTX1RSVUVACWJyb3dzZS1kb21haW4tdGVzdCQoRVhFRVhUKQorc3ViZGlyID0gYXZhaGktY29tcGF0LWhvd2wKK0RJU1RfQ09NTU9OID0gJChhbV9fYXZhaGlfY29tcGF0X2hvd2xfSEVBREVSU19ESVNUKSBcCisJJChhbV9fYXZhaGlfY29tcGF0X2hvd2xfY29yYnlfSEVBREVSU19ESVNUKSBcCisJJChhbV9fYXZhaGlfY29tcGF0X2hvd2xfZGlzY292ZXJ5X0hFQURFUlNfRElTVCkgXAorCSQoYW1fX2F2YWhpX2NvbXBhdF9ob3dsX3JlbmRlenZvdXNfSEVBREVSU19ESVNUKSBcCisJJChhbV9fYXZhaGlfY29tcGF0X2hvd2xfc2FsdF9IRUFERVJTX0RJU1QpIFwKKwkkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vYWN4X3B0aHJlYWQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2djY19zdGFja19wcm90ZWN0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9nY2NfdmlzaWJpbGl0eS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vaW50bHRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2ludHJvc3BlY3Rpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2x0b3B0aW9ucy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHR2ZXJzaW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbmxzLm00ICQodG9wX3NyY2RpcikvY29tbW9uL3B5dGhvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9hY2luY2x1ZGUubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vZG94eWdlbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7CithbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAorICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCisgICAgKikgZj0kJHA7OyBcCisgIGVzYWM7CithbV9fc3RyaXBfZGlyID0gZj1gZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7CithbV9faW5zdGFsbF9tYXggPSA0MAorYW1fX25vYmFzZV9zdHJpcF9zZXR1cCA9IFwKKyAgc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYAorYW1fX25vYmFzZV9zdHJpcCA9IFwKKyAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkIC1lICJzfCQkc3JjZGlyc3RyaXAvfHwiCithbV9fbm9iYXNlX2xpc3QgPSAkKGFtX19ub2Jhc2Vfc3RyaXBfc2V0dXApOyBcCisgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCisgIHNlZCAic3wgJCRzcmNkaXJzdHJpcC98IHw7IicgLyAuKlwvLyFzLyAuKi8gLi87IHMsXCggLipcKS9bXi9dKiQkLFwxLCcgfCBcCisgICQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiIgfSB7IGZpbGVzWyQkMl0gPSBmaWxlc1skJDJdICIgIiAkJDE7IFwKKyAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCisgICAgICB7IHByaW50ICQkMiwgZmlsZXNbJCQyXTsgblskJDJdID0gMDsgZmlsZXNbJCQyXSA9ICIiIH0gfSBcCisgICAgRU5EIHsgZm9yIChkaXIgaW4gZmlsZXMpIHByaW50IGRpciwgZmlsZXNbZGlyXSB9JworYW1fX2Jhc2VfbGlzdCA9IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJyB8IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJworYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpciA9IHsgXAorICB0ZXN0IC16ICIkJGZpbGVzIiBcCisgICAgfHwgeyB0ZXN0ICEgLWQgIiQkZGlyIiAmJiB0ZXN0ICEgLWYgIiQkZGlyIiAmJiB0ZXN0ICEgLXIgIiQkZGlyIjsgfSBcCisgICAgfHwgeyBlY2hvICIgKCBjZCAnJCRkaXInICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAorICAgICAgICAgJChhbV9fY2QpICIkJGRpciIgJiYgcm0gLWYgJCRmaWxlczsgfTsgXAorICB9CithbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQobGliZGlyKSIgXAorCSIkKERFU1RESVIpJChhdmFoaV9jb21wYXRfaG93bGRpcikiIFwKKwkiJChERVNURElSKSQoYXZhaGlfY29tcGF0X2hvd2xfY29yYnlkaXIpIiBcCisJIiQoREVTVERJUikkKGF2YWhpX2NvbXBhdF9ob3dsX2Rpc2NvdmVyeWRpcikiIFwKKwkiJChERVNURElSKSQoYXZhaGlfY29tcGF0X2hvd2xfcmVuZGV6dm91c2RpcikiIFwKKwkiJChERVNURElSKSQoYXZhaGlfY29tcGF0X2hvd2xfc2FsdGRpcikiCitMVExJQlJBUklFUyA9ICQobGliX0xUTElCUkFSSUVTKQorbGliaG93bF9sYV9MSUJBREQgPQorYW1fX2xpYmhvd2xfbGFfU09VUkNFU19ESVNUID0gaW5jbHVkZS9ob3dsLmggXAorCWluY2x1ZGUvcmVuZGV6dm91cy9yZW5kZXp2b3VzLmggXAorCWluY2x1ZGUvcmVuZGV6dm91cy90ZXh0X3JlY29yZC5oIGluY2x1ZGUvY29yYnkvbWVzc2FnZS5oIFwKKwlpbmNsdWRlL2NvcmJ5L29iamVjdC5oIGluY2x1ZGUvY29yYnkvb3JiLmggXAorCWluY2x1ZGUvY29yYnkvY29yYnkuaCBpbmNsdWRlL2NvcmJ5L2NoYW5uZWwuaCBcCisJaW5jbHVkZS9jb3JieS9idWZmZXIuaCBpbmNsdWRlL2Rpc2NvdmVyeS9kaXNjb3ZlcnkuaCBcCisJaW5jbHVkZS9kaXNjb3ZlcnkvdGV4dF9yZWNvcmQuaCBpbmNsdWRlL3NhbHQvc29ja2V0LmggXAorCWluY2x1ZGUvc2FsdC9hZGRyZXNzLmggaW5jbHVkZS9zYWx0L3BsYXRmb3JtLmggXAorCWluY2x1ZGUvc2FsdC9zaWduYWwuaCBpbmNsdWRlL3NhbHQvaW50ZXJmYWNlLmggXAorCWluY2x1ZGUvc2FsdC9zYWx0LmggaW5jbHVkZS9zYWx0L3RpbWUuaCBpbmNsdWRlL3NhbHQvZGVidWcuaCBcCisJd2Fybi5jIHdhcm4uaCB1bnN1cHBvcnRlZC5jIGFkZHJlc3MuYyB0ZXh0LmMgY29tcGF0LmMKK2FtX19vYmplY3RzXzEgPQorQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUBhbV9fb2JqZWN0c18yID0gIFwKK0BFTkFCTEVfQ09NUEFUX0hPV0xfVFJVRUBASEFWRV9EQlVTX1RSVUVACSQoYW1fX29iamVjdHNfMSkgXAorQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUAJJChhbV9fb2JqZWN0c18xKSBcCitARU5BQkxFX0NPTVBBVF9IT1dMX1RSVUVAQEhBVkVfREJVU19UUlVFQAkkKGFtX19vYmplY3RzXzEpIFwKK0BFTkFCTEVfQ09NUEFUX0hPV0xfVFJVRUBASEFWRV9EQlVTX1RSVUVACSQoYW1fX29iamVjdHNfMSkgXAorQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUAJJChhbV9fb2JqZWN0c18xKQorQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUBhbV9saWJob3dsX2xhX09CSkVDVFMgPSAgXAorQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUAJJChhbV9fb2JqZWN0c18yKSBcCitARU5BQkxFX0NPTVBBVF9IT1dMX1RSVUVAQEhBVkVfREJVU19UUlVFQAlsaWJob3dsX2xhLXdhcm4ubG8gXAorQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUAJbGliaG93bF9sYS11bnN1cHBvcnRlZC5sbyBcCitARU5BQkxFX0NPTVBBVF9IT1dMX1RSVUVAQEhBVkVfREJVU19UUlVFQAlsaWJob3dsX2xhLWFkZHJlc3MubG8gXAorQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUAJbGliaG93bF9sYS10ZXh0LmxvIFwKK0BFTkFCTEVfQ09NUEFUX0hPV0xfVFJVRUBASEFWRV9EQlVTX1RSVUVACWxpYmhvd2xfbGEtY29tcGF0LmxvCitsaWJob3dsX2xhX09CSkVDVFMgPSAkKGFtX2xpYmhvd2xfbGFfT0JKRUNUUykKK0FNX1ZfbHQgPSAkKGFtX192X2x0X0BBTV9WQCkKK2FtX192X2x0XyA9ICQoYW1fX3ZfbHRfQEFNX0RFRkFVTFRfVkApCithbV9fdl9sdF8wID0gLS1zaWxlbnQKK2xpYmhvd2xfbGFfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQobGliaG93bF9sYV9DRkxBR1MpIFwKKwkkKENGTEFHUykgJChsaWJob3dsX2xhX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKK0BFTkFCTEVfQ09NUEFUX0hPV0xfVFJVRUBASEFWRV9EQlVTX1RSVUVAYW1fbGliaG93bF9sYV9ycGF0aCA9IC1ycGF0aCBcCitARU5BQkxFX0NPTVBBVF9IT1dMX1RSVUVAQEhBVkVfREJVU19UUlVFQAkkKGxpYmRpcikKK1BST0dSQU1TID0gJChub2luc3RfUFJPR1JBTVMpCithbV9fYWRkcmVzc190ZXN0X1NPVVJDRVNfRElTVCA9IGluY2x1ZGUvaG93bC5oIFwKKwlpbmNsdWRlL3JlbmRlenZvdXMvcmVuZGV6dm91cy5oIFwKKwlpbmNsdWRlL3JlbmRlenZvdXMvdGV4dF9yZWNvcmQuaCBpbmNsdWRlL2NvcmJ5L21lc3NhZ2UuaCBcCisJaW5jbHVkZS9jb3JieS9vYmplY3QuaCBpbmNsdWRlL2NvcmJ5L29yYi5oIFwKKwlpbmNsdWRlL2NvcmJ5L2NvcmJ5LmggaW5jbHVkZS9jb3JieS9jaGFubmVsLmggXAorCWluY2x1ZGUvY29yYnkvYnVmZmVyLmggaW5jbHVkZS9kaXNjb3ZlcnkvZGlzY292ZXJ5LmggXAorCWluY2x1ZGUvZGlzY292ZXJ5L3RleHRfcmVjb3JkLmggaW5jbHVkZS9zYWx0L3NvY2tldC5oIFwKKwlpbmNsdWRlL3NhbHQvYWRkcmVzcy5oIGluY2x1ZGUvc2FsdC9wbGF0Zm9ybS5oIFwKKwlpbmNsdWRlL3NhbHQvc2lnbmFsLmggaW5jbHVkZS9zYWx0L2ludGVyZmFjZS5oIFwKKwlpbmNsdWRlL3NhbHQvc2FsdC5oIGluY2x1ZGUvc2FsdC90aW1lLmggaW5jbHVkZS9zYWx0L2RlYnVnLmggXAorCWFkZHJlc3MuYyBhZGRyZXNzLXRlc3QuYyB3YXJuLmMgd2Fybi5oCitARU5BQkxFX0NPTVBBVF9IT1dMX1RSVUVAQEhBVkVfREJVU19UUlVFQGFtX2FkZHJlc3NfdGVzdF9PQkpFQ1RTID0gIFwKK0BFTkFCTEVfQ09NUEFUX0hPV0xfVFJVRUBASEFWRV9EQlVTX1RSVUVACSQoYW1fX29iamVjdHNfMikgXAorQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUAJYWRkcmVzc190ZXN0LWFkZHJlc3MuJChPQkpFWFQpIFwKK0BFTkFCTEVfQ09NUEFUX0hPV0xfVFJVRUBASEFWRV9EQlVTX1RSVUVACWFkZHJlc3NfdGVzdC1hZGRyZXNzLXRlc3QuJChPQkpFWFQpIFwKK0BFTkFCTEVfQ09NUEFUX0hPV0xfVFJVRUBASEFWRV9EQlVTX1RSVUVACWFkZHJlc3NfdGVzdC13YXJuLiQoT0JKRVhUKQorYWRkcmVzc190ZXN0X09CSkVDVFMgPSAkKGFtX2FkZHJlc3NfdGVzdF9PQkpFQ1RTKQorYW1fX0RFUEVOREVOQ0lFU18xID0KK0BFTkFCTEVfQ09NUEFUX0hPV0xfVFJVRUBASEFWRV9EQlVTX1RSVUVAYWRkcmVzc190ZXN0X0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCitARU5BQkxFX0NPTVBBVF9IT1dMX1RSVUVAQEhBVkVfREJVU19UUlVFQAkkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAorQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUAJLi4vYXZhaGktY29tbW9uL2xpYmF2YWhpLWNvbW1vbi5sYQorYWRkcmVzc190ZXN0X0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKGFkZHJlc3NfdGVzdF9DRkxBR1MpIFwKKwkkKENGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACithbV9fYnJvd3NlX2RvbWFpbl90ZXN0X1NPVVJDRVNfRElTVCA9IGluY2x1ZGUvaG93bC5oIFwKKwlpbmNsdWRlL3JlbmRlenZvdXMvcmVuZGV6dm91cy5oIFwKKwlpbmNsdWRlL3JlbmRlenZvdXMvdGV4dF9yZWNvcmQuaCBpbmNsdWRlL2NvcmJ5L21lc3NhZ2UuaCBcCisJaW5jbHVkZS9jb3JieS9vYmplY3QuaCBpbmNsdWRlL2NvcmJ5L29yYi5oIFwKKwlpbmNsdWRlL2NvcmJ5L2NvcmJ5LmggaW5jbHVkZS9jb3JieS9jaGFubmVsLmggXAorCWluY2x1ZGUvY29yYnkvYnVmZmVyLmggaW5jbHVkZS9kaXNjb3ZlcnkvZGlzY292ZXJ5LmggXAorCWluY2x1ZGUvZGlzY292ZXJ5L3RleHRfcmVjb3JkLmggaW5jbHVkZS9zYWx0L3NvY2tldC5oIFwKKwlpbmNsdWRlL3NhbHQvYWRkcmVzcy5oIGluY2x1ZGUvc2FsdC9wbGF0Zm9ybS5oIFwKKwlpbmNsdWRlL3NhbHQvc2lnbmFsLmggaW5jbHVkZS9zYWx0L2ludGVyZmFjZS5oIFwKKwlpbmNsdWRlL3NhbHQvc2FsdC5oIGluY2x1ZGUvc2FsdC90aW1lLmggaW5jbHVkZS9zYWx0L2RlYnVnLmggXAorCWJyb3dzZS1kb21haW4tdGVzdC5jCitARU5BQkxFX0NPTVBBVF9IT1dMX1RSVUVAQEhBVkVfREJVU19UUlVFQGFtX2Jyb3dzZV9kb21haW5fdGVzdF9PQkpFQ1RTID0gIFwKK0BFTkFCTEVfQ09NUEFUX0hPV0xfVFJVRUBASEFWRV9EQlVTX1RSVUVACSQoYW1fX29iamVjdHNfMikgXAorQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUAJYnJvd3NlX2RvbWFpbl90ZXN0LWJyb3dzZS1kb21haW4tdGVzdC4kKE9CSkVYVCkKK2Jyb3dzZV9kb21haW5fdGVzdF9PQkpFQ1RTID0gJChhbV9icm93c2VfZG9tYWluX3Rlc3RfT0JKRUNUUykKK0BFTkFCTEVfQ09NUEFUX0hPV0xfVFJVRUBASEFWRV9EQlVTX1RSVUVAYnJvd3NlX2RvbWFpbl90ZXN0X0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCitARU5BQkxFX0NPTVBBVF9IT1dMX1RSVUVAQEhBVkVfREJVU19UUlVFQAkkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAorQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUAJbGliaG93bC5sYQorYnJvd3NlX2RvbWFpbl90ZXN0X0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAorCSQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSBcCisJJChicm93c2VfZG9tYWluX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSBcCisJJChMREZMQUdTKSAtbyAkQAorYW1fX3RleHRfdGVzdF9TT1VSQ0VTX0RJU1QgPSBpbmNsdWRlL2hvd2wuaCBcCisJaW5jbHVkZS9yZW5kZXp2b3VzL3JlbmRlenZvdXMuaCBcCisJaW5jbHVkZS9yZW5kZXp2b3VzL3RleHRfcmVjb3JkLmggaW5jbHVkZS9jb3JieS9tZXNzYWdlLmggXAorCWluY2x1ZGUvY29yYnkvb2JqZWN0LmggaW5jbHVkZS9jb3JieS9vcmIuaCBcCisJaW5jbHVkZS9jb3JieS9jb3JieS5oIGluY2x1ZGUvY29yYnkvY2hhbm5lbC5oIFwKKwlpbmNsdWRlL2NvcmJ5L2J1ZmZlci5oIGluY2x1ZGUvZGlzY292ZXJ5L2Rpc2NvdmVyeS5oIFwKKwlpbmNsdWRlL2Rpc2NvdmVyeS90ZXh0X3JlY29yZC5oIGluY2x1ZGUvc2FsdC9zb2NrZXQuaCBcCisJaW5jbHVkZS9zYWx0L2FkZHJlc3MuaCBpbmNsdWRlL3NhbHQvcGxhdGZvcm0uaCBcCisJaW5jbHVkZS9zYWx0L3NpZ25hbC5oIGluY2x1ZGUvc2FsdC9pbnRlcmZhY2UuaCBcCisJaW5jbHVkZS9zYWx0L3NhbHQuaCBpbmNsdWRlL3NhbHQvdGltZS5oIGluY2x1ZGUvc2FsdC9kZWJ1Zy5oIFwKKwl0ZXh0LmMgdGV4dC10ZXN0LmMgd2Fybi5jIHdhcm4uaAorQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUBhbV90ZXh0X3Rlc3RfT0JKRUNUUyA9ICBcCitARU5BQkxFX0NPTVBBVF9IT1dMX1RSVUVAQEhBVkVfREJVU19UUlVFQAkkKGFtX19vYmplY3RzXzIpIFwKK0BFTkFCTEVfQ09NUEFUX0hPV0xfVFJVRUBASEFWRV9EQlVTX1RSVUVACXRleHRfdGVzdC10ZXh0LiQoT0JKRVhUKSBcCitARU5BQkxFX0NPTVBBVF9IT1dMX1RSVUVAQEhBVkVfREJVU19UUlVFQAl0ZXh0X3Rlc3QtdGV4dC10ZXN0LiQoT0JKRVhUKSBcCitARU5BQkxFX0NPTVBBVF9IT1dMX1RSVUVAQEhBVkVfREJVU19UUlVFQAl0ZXh0X3Rlc3Qtd2Fybi4kKE9CSkVYVCkKK3RleHRfdGVzdF9PQkpFQ1RTID0gJChhbV90ZXh0X3Rlc3RfT0JKRUNUUykKK0BFTkFCTEVfQ09NUEFUX0hPV0xfVFJVRUBASEFWRV9EQlVTX1RSVUVAdGV4dF90ZXN0X0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCitARU5BQkxFX0NPTVBBVF9IT1dMX1RSVUVAQEhBVkVfREJVU19UUlVFQAkkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAorQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUAJLi4vYXZhaGktY29tbW9uL2xpYmF2YWhpLWNvbW1vbi5sYQordGV4dF90ZXN0X0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKHRleHRfdGVzdF9DRkxBR1MpIFwKKwkkKENGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACitERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQorZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAorYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKK2FtX19tdiA9IG12IC1mCitDT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKKwkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitMVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCisJJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCisJJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfQEFNX1ZAKQorYW1fX3ZfQ0NfID0gJChhbV9fdl9DQ19AQU1fREVGQVVMVF9WQCkKK2FtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAiICRAOworQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQorYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKK2FtX192X2F0XzAgPSBACitDQ0xEID0gJChDQykKK0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKKwkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKK0FNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF9AQU1fVkApCithbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF9AQU1fREVGQVVMVF9WQCkKK2FtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICIgJEA7CitBTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKK2FtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKK2FtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgIiAkQDsKK1NPVVJDRVMgPSAkKGxpYmhvd2xfbGFfU09VUkNFUykgJChhZGRyZXNzX3Rlc3RfU09VUkNFUykgXAorCSQoYnJvd3NlX2RvbWFpbl90ZXN0X1NPVVJDRVMpICQodGV4dF90ZXN0X1NPVVJDRVMpCitESVNUX1NPVVJDRVMgPSAkKGFtX19saWJob3dsX2xhX1NPVVJDRVNfRElTVCkgXAorCSQoYW1fX2FkZHJlc3NfdGVzdF9TT1VSQ0VTX0RJU1QpIFwKKwkkKGFtX19icm93c2VfZG9tYWluX3Rlc3RfU09VUkNFU19ESVNUKSBcCisJJChhbV9fdGV4dF90ZXN0X1NPVVJDRVNfRElTVCkKK1JFQ1VSU0lWRV9UQVJHRVRTID0gYWxsLXJlY3Vyc2l2ZSBjaGVjay1yZWN1cnNpdmUgZHZpLXJlY3Vyc2l2ZSBcCisJaHRtbC1yZWN1cnNpdmUgaW5mby1yZWN1cnNpdmUgaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1kdmktcmVjdXJzaXZlIGluc3RhbGwtZXhlYy1yZWN1cnNpdmUgXAorCWluc3RhbGwtaHRtbC1yZWN1cnNpdmUgaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1wZGYtcmVjdXJzaXZlIGluc3RhbGwtcHMtcmVjdXJzaXZlIGluc3RhbGwtcmVjdXJzaXZlIFwKKwlpbnN0YWxsY2hlY2stcmVjdXJzaXZlIGluc3RhbGxkaXJzLXJlY3Vyc2l2ZSBwZGYtcmVjdXJzaXZlIFwKKwlwcy1yZWN1cnNpdmUgdW5pbnN0YWxsLXJlY3Vyc2l2ZQorYW1fX2F2YWhpX2NvbXBhdF9ob3dsX0hFQURFUlNfRElTVCA9IGluY2x1ZGUvaG93bC5oCithbV9fYXZhaGlfY29tcGF0X2hvd2xfY29yYnlfSEVBREVSU19ESVNUID0gaW5jbHVkZS9jb3JieS9tZXNzYWdlLmggXAorCWluY2x1ZGUvY29yYnkvb2JqZWN0LmggaW5jbHVkZS9jb3JieS9vcmIuaCBcCisJaW5jbHVkZS9jb3JieS9jb3JieS5oIGluY2x1ZGUvY29yYnkvY2hhbm5lbC5oIFwKKwlpbmNsdWRlL2NvcmJ5L2J1ZmZlci5oCithbV9fYXZhaGlfY29tcGF0X2hvd2xfZGlzY292ZXJ5X0hFQURFUlNfRElTVCA9ICBcCisJaW5jbHVkZS9kaXNjb3ZlcnkvZGlzY292ZXJ5LmggaW5jbHVkZS9kaXNjb3ZlcnkvdGV4dF9yZWNvcmQuaAorYW1fX2F2YWhpX2NvbXBhdF9ob3dsX3JlbmRlenZvdXNfSEVBREVSU19ESVNUID0gIFwKKwlpbmNsdWRlL3JlbmRlenZvdXMvcmVuZGV6dm91cy5oIFwKKwlpbmNsdWRlL3JlbmRlenZvdXMvdGV4dF9yZWNvcmQuaAorYW1fX2F2YWhpX2NvbXBhdF9ob3dsX3NhbHRfSEVBREVSU19ESVNUID0gaW5jbHVkZS9zYWx0L3NvY2tldC5oIFwKKwlpbmNsdWRlL3NhbHQvYWRkcmVzcy5oIGluY2x1ZGUvc2FsdC9wbGF0Zm9ybS5oIFwKKwlpbmNsdWRlL3NhbHQvc2lnbmFsLmggaW5jbHVkZS9zYWx0L2ludGVyZmFjZS5oIFwKKwlpbmNsdWRlL3NhbHQvc2FsdC5oIGluY2x1ZGUvc2FsdC90aW1lLmggaW5jbHVkZS9zYWx0L2RlYnVnLmgKK0hFQURFUlMgPSAkKGF2YWhpX2NvbXBhdF9ob3dsX0hFQURFUlMpIFwKKwkkKGF2YWhpX2NvbXBhdF9ob3dsX2NvcmJ5X0hFQURFUlMpIFwKKwkkKGF2YWhpX2NvbXBhdF9ob3dsX2Rpc2NvdmVyeV9IRUFERVJTKSBcCisJJChhdmFoaV9jb21wYXRfaG93bF9yZW5kZXp2b3VzX0hFQURFUlMpIFwKKwkkKGF2YWhpX2NvbXBhdF9ob3dsX3NhbHRfSEVBREVSUykKK1JFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTID0gbW9zdGx5Y2xlYW4tcmVjdXJzaXZlIGNsZWFuLXJlY3Vyc2l2ZQlcCisgIGRpc3RjbGVhbi1yZWN1cnNpdmUgbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUKK0FNX1JFQ1VSU0lWRV9UQVJHRVRTID0gJChSRUNVUlNJVkVfVEFSR0VUUzotcmVjdXJzaXZlPSkgXAorCSQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFM6LXJlY3Vyc2l2ZT0pIHRhZ3MgVEFHUyBjdGFncyBDVEFHUyBcCisJZGlzdGRpcgorRVRBR1MgPSBldGFncworQ1RBR1MgPSBjdGFncworRElTVF9TVUJESVJTID0gJChTVUJESVJTKQorRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK2FtX19yZWxhdGl2aXplID0gXAorICBkaXIwPWBwd2RgOyBcCisgIHNlZF9maXJzdD0ncyxeXChbXi9dKlwpLy4qJCQsXDEsJzsgXAorICBzZWRfcmVzdD0ncyxeW14vXSovKiwsJzsgXAorICBzZWRfbGFzdD0ncyxeLiovXChbXi9dKlwpJCQsXDEsJzsgXAorICBzZWRfYnV0bGFzdD0ncywvKlteL10qJCQsLCc7IFwKKyAgd2hpbGUgdGVzdCAtbiAiJCRkaXIxIjsgZG8gXAorICAgIGZpcnN0PWBlY2hvICIkJGRpcjEiIHwgc2VkIC1lICIkJHNlZF9maXJzdCJgOyBcCisgICAgaWYgdGVzdCAiJCRmaXJzdCIgIT0gIi4iOyB0aGVuIFwKKyAgICAgIGlmIHRlc3QgIiQkZmlyc3QiID0gIi4uIjsgdGhlbiBcCisgICAgICAgIGRpcjI9YGVjaG8gIiQkZGlyMCIgfCBzZWQgLWUgIiQkc2VkX2xhc3QiYC8iJCRkaXIyIjsgXAorICAgICAgICBkaXIwPWBlY2hvICIkJGRpcjAiIHwgc2VkIC1lICIkJHNlZF9idXRsYXN0ImA7IFwKKyAgICAgIGVsc2UgXAorICAgICAgICBmaXJzdDI9YGVjaG8gIiQkZGlyMiIgfCBzZWQgLWUgIiQkc2VkX2ZpcnN0ImA7IFwKKyAgICAgICAgaWYgdGVzdCAiJCRmaXJzdDIiID0gIiQkZmlyc3QiOyB0aGVuIFwKKyAgICAgICAgICBkaXIyPWBlY2hvICIkJGRpcjIiIHwgc2VkIC1lICIkJHNlZF9yZXN0ImA7IFwKKyAgICAgICAgZWxzZSBcCisgICAgICAgICAgZGlyMj0iLi4vJCRkaXIyIjsgXAorICAgICAgICBmaTsgXAorICAgICAgICBkaXIwPSIkJGRpcjAiLyIkJGZpcnN0IjsgXAorICAgICAgZmk7IFwKKyAgICBmaTsgXAorICAgIGRpcjE9YGVjaG8gIiQkZGlyMSIgfCBzZWQgLWUgIiQkc2VkX3Jlc3QiYDsgXAorICBkb25lOyBcCisgIHJlbGRpcj0iJCRkaXIyIgorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQUxMX0xJTkdVQVMgPSBAQUxMX0xJTkdVQVNACitBTVRBUiA9IEBBTVRBUkAKK0FNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAorQVIgPSBAQVJACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVZBSElfQVVUT0lQRF9HUk9VUCA9IEBBVkFISV9BVVRPSVBEX0dST1VQQAorQVZBSElfQVVUT0lQRF9VU0VSID0gQEFWQUhJX0FVVE9JUERfVVNFUkAKK0FWQUhJX0dST1VQID0gQEFWQUhJX0dST1VQQAorQVZBSElfUFJJVl9BQ0NFU1NfR1JPVVAgPSBAQVZBSElfUFJJVl9BQ0NFU1NfR1JPVVBACitBVkFISV9VU0VSID0gQEFWQUhJX1VTRVJACitBV0sgPSBAQVdLQAorQ0FUQUxPR1MgPSBAQ0FUQUxPR1NACitDQVRPQkpFWFQgPSBAQ0FUT0JKRVhUQAorQ0MgPSBAQ0NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREFUQURJUk5BTUUgPSBAREFUQURJUk5BTUVACitEQlVTX0NGTEFHUyA9IEBEQlVTX0NGTEFHU0AKK0RCVVNfTElCUyA9IEBEQlVTX0xJQlNACitEQlVTX1NZU1RFTV9CVVNfREVGQVVMVF9BRERSRVNTID0gQERCVVNfU1lTVEVNX0JVU19ERUZBVUxUX0FERFJFU1NACitEQlVTX1NZU19ESVIgPSBAREJVU19TWVNfRElSQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RMTFRPT0wgPSBARExMVE9PTEAKK0RPWFlHRU5fUEFQRVJfU0laRSA9IEBET1hZR0VOX1BBUEVSX1NJWkVACitEU1lNVVRJTCA9IEBEU1lNVVRJTEAKK0RVTVBCSU4gPSBARFVNUEJJTkAKK0RYX0NPTkZJRyA9IEBEWF9DT05GSUdACitEWF9ET0NESVIgPSBARFhfRE9DRElSQAorRFhfRE9UID0gQERYX0RPVEAKK0RYX0RPWFlHRU4gPSBARFhfRE9YWUdFTkAKK0RYX0RWSVBTID0gQERYX0RWSVBTQAorRFhfRUdSRVAgPSBARFhfRUdSRVBACitEWF9FTlYgPSBARFhfRU5WQAorRFhfRkxBR19jaGkgPSBARFhfRkxBR19jaGlACitEWF9GTEFHX2NobSA9IEBEWF9GTEFHX2NobUAKK0RYX0ZMQUdfZG9jID0gQERYX0ZMQUdfZG9jQAorRFhfRkxBR19kb3QgPSBARFhfRkxBR19kb3RACitEWF9GTEFHX2h0bWwgPSBARFhfRkxBR19odG1sQAorRFhfRkxBR19tYW4gPSBARFhfRkxBR19tYW5ACitEWF9GTEFHX3BkZiA9IEBEWF9GTEFHX3BkZkAKK0RYX0ZMQUdfcHMgPSBARFhfRkxBR19wc0AKK0RYX0ZMQUdfcnRmID0gQERYX0ZMQUdfcnRmQAorRFhfRkxBR194bWwgPSBARFhfRkxBR194bWxACitEWF9ISEMgPSBARFhfSEhDQAorRFhfTEFURVggPSBARFhfTEFURVhACitEWF9NQUtFSU5ERVggPSBARFhfTUFLRUlOREVYQAorRFhfUERGTEFURVggPSBARFhfUERGTEFURVhACitEWF9QRVJMID0gQERYX1BFUkxACitEWF9QUk9KRUNUID0gQERYX1BST0pFQ1RACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VYRUVYVCA9IEBFWEVFWFRACitGR1JFUCA9IEBGR1JFUEAKK0dBQ1VUSUwgPSBAR0FDVVRJTEAKK0dFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACitHTElCMjBfQ0ZMQUdTID0gQEdMSUIyMF9DRkxBR1NACitHTElCMjBfTElCUyA9IEBHTElCMjBfTElCU0AKK0dNT0ZJTEVTID0gQEdNT0ZJTEVTQAorR01TR0ZNVCA9IEBHTVNHRk1UQAorR09CSkVDVF9DRkxBR1MgPSBAR09CSkVDVF9DRkxBR1NACitHT0JKRUNUX0xJQlMgPSBAR09CSkVDVF9MSUJTQAorR1JFUCA9IEBHUkVQQAorR1RLMjBfQ0ZMQUdTID0gQEdUSzIwX0NGTEFHU0AKK0dUSzIwX0xJQlMgPSBAR1RLMjBfTElCU0AKK0dUSzMwX0NGTEFHUyA9IEBHVEszMF9DRkxBR1NACitHVEszMF9MSUJTID0gQEdUSzMwX0xJQlNACitIT1dMX0NPTVBBVF9WRVJTSU9OID0gQEhPV0xfQ09NUEFUX1ZFUlNJT05ACitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lOU1RPQkpFWFQgPSBASU5TVE9CSkVYVEAKK0lOVExMSUJTID0gQElOVExMSUJTQAorSU5UTFRPT0xfRVhUUkFDVCA9IEBJTlRMVE9PTF9FWFRSQUNUQAorSU5UTFRPT0xfTUVSR0UgPSBASU5UTFRPT0xfTUVSR0VACitJTlRMVE9PTF9QRVJMID0gQElOVExUT09MX1BFUkxACitJTlRMVE9PTF9VUERBVEUgPSBASU5UTFRPT0xfVVBEQVRFQAorSU5UUk9TUEVDVElPTl9DRkxBR1MgPSBASU5UUk9TUEVDVElPTl9DRkxBR1NACitJTlRST1NQRUNUSU9OX0NPTVBJTEVSID0gQElOVFJPU1BFQ1RJT05fQ09NUElMRVJACitJTlRST1NQRUNUSU9OX0dFTkVSQVRFID0gQElOVFJPU1BFQ1RJT05fR0VORVJBVEVACitJTlRST1NQRUNUSU9OX0dJUkRJUiA9IEBJTlRST1NQRUNUSU9OX0dJUkRJUkAKK0lOVFJPU1BFQ1RJT05fTElCUyA9IEBJTlRST1NQRUNUSU9OX0xJQlNACitJTlRST1NQRUNUSU9OX01BS0VGSUxFID0gQElOVFJPU1BFQ1RJT05fTUFLRUZJTEVACitJTlRST1NQRUNUSU9OX1NDQU5ORVIgPSBASU5UUk9TUEVDVElPTl9TQ0FOTkVSQAorSU5UUk9TUEVDVElPTl9UWVBFTElCRElSID0gQElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUkAKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCQVZBSElfQ0xJRU5UX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DTElFTlRfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfQ09NTU9OX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DT01NT05fVkVSU0lPTl9JTkZPQAorTElCQVZBSElfQ09NUEFUX0hPV0xfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NPTVBBVF9IT1dMX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPTVBBVF9MSUJETlNfU0RfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NPTVBBVF9MSUJETlNfU0RfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfQ09SRV9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ09SRV9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9HTElCX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9HTElCX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0dPQkpFQ1RfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0dPQkpFQ1RfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfUVQzX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9RVDNfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfUVQ0X1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9RVDRfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfVUlfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX1VJX1ZFUlNJT05fSU5GT0AKK0xJQkRBRU1PTl9DRkxBR1MgPSBATElCREFFTU9OX0NGTEFHU0AKK0xJQkRBRU1PTl9MSUJTID0gQExJQkRBRU1PTl9MSUJTQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAorTUNTID0gQE1DU0AKK01EQVNTRU1CTEVSID0gQE1EQVNTRU1CTEVSQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTUtJTlNUQUxMRElSUyA9IEBNS0lOU1RBTExESVJTQAorTU9DX1FUMyA9IEBNT0NfUVQzQAorTU9DX1FUNCA9IEBNT0NfUVQ0QAorTU9OT0RPQ0VSID0gQE1PTk9ET0NFUkAKK01PTk9ET0NfQ0ZMQUdTID0gQE1PTk9ET0NfQ0ZMQUdTQAorTU9OT0RPQ19ESVIgPSBATU9OT0RPQ19ESVJACitNT05PRE9DX0xJQlMgPSBATU9OT0RPQ19MSUJTQAorTVNHRk1UID0gQE1TR0ZNVEAKK01TR0ZNVF9PUFRTID0gQE1TR0ZNVF9PUFRTQAorTVNHTUVSR0UgPSBATVNHTUVSR0VACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitPQkpEVU1QID0gQE9CSkRVTVBACitPQkpFWFQgPSBAT0JKRVhUQAorT1RPT0wgPSBAT1RPT0xACitPVE9PTDY0ID0gQE9UT09MNjRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK1BLR19DT05GSUdfTElCRElSID0gQFBLR19DT05GSUdfTElCRElSQAorUEtHX0NPTkZJR19QQVRIID0gQFBLR19DT05GSUdfUEFUSEAKK1BPRklMRVMgPSBAUE9GSUxFU0AKK1BPU1VCID0gQFBPU1VCQAorUE9fSU5fREFUQURJUl9GQUxTRSA9IEBQT19JTl9EQVRBRElSX0ZBTFNFQAorUE9fSU5fREFUQURJUl9UUlVFID0gQFBPX0lOX0RBVEFESVJfVFJVRUAKK1BUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKK1BUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAorUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKK1BZVEhPTiA9IEBQWVRIT05ACitQWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAorUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKK1BZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKK1BZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAorUVQzX0NGTEFHUyA9IEBRVDNfQ0ZMQUdTQAorUVQzX0xJQlMgPSBAUVQzX0xJQlNACitRVDRfQ0ZMQUdTID0gQFFUNF9DRkxBR1NACitRVDRfTElCUyA9IEBRVDRfTElCU0AKK1JBTkxJQiA9IEBSQU5MSUJACitTRUQgPSBAU0VEQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NUT1cgPSBAU1RPV0AKK1NUUklQID0gQFNUUklQQAorVVNFX05MUyA9IEBVU0VfTkxTQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorVklTSUJJTElUWV9ISURERU5fQ0ZMQUdTID0gQFZJU0lCSUxJVFlfSElEREVOX0NGTEFHU0AKK1hHRVRURVhUID0gQFhHRVRURVhUQAorWE1MX0NGTEFHUyA9IEBYTUxfQ0ZMQUdTQAorWE1MX0xJQlMgPSBAWE1MX0xJQlNACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9BUiA9IEBhY19jdF9BUkAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKK2FjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK2FjeF9wdGhyZWFkX2NvbmZpZyA9IEBhY3hfcHRocmVhZF9jb25maWdACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2F2YWhpX3J1bnRpbWVfZGlyID0gQGF2YWhpX3J1bnRpbWVfZGlyQAorYXZhaGlfc29ja2V0ID0gQGF2YWhpX3NvY2tldEAKK2F2YWhpbG9jYWxlZGlyID0gQGF2YWhpbG9jYWxlZGlyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitoYXZlX3BrZ19jb25maWcgPSBAaGF2ZV9wa2dfY29uZmlnQAoraGF2ZV94bWx0b21hbiA9IEBoYXZlX3htbHRvbWFuQAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2ludGVyZmFjZXNkaXIgPSBAaW50ZXJmYWNlc2RpckAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAorcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3B5ZXhlY2RpciA9IEBweWV4ZWNkaXJACitweXRob25kaXIgPSBAcHl0aG9uZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzcmNkaXIgPSBAc3JjZGlyQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAorc3lzdGVtZHN5c3RlbXVuaXRkaXIgPSBAc3lzdGVtZHN5c3RlbXVuaXRkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKKworIyBUaGlzIGNvb2wgZGVidWcgdHJhcCB3b3JrcyBvbiBpMzg2L2djYyBvbmx5CitBTV9DRkxBR1MgPSAtSSQodG9wX3NyY2RpcikgJy1EREVCVUdfVFJBUD1fX2FzbV9fKCJpbnQgJCQzIiknCitTVUJESVJTID0gLiBzYW1wbGVzCitARU5BQkxFX0NPTVBBVF9IT1dMX1RSVUVAQEhBVkVfREJVU19UUlVFQGF2YWhpX2NvbXBhdF9ob3dsZGlyID0gJChpbmNsdWRlZGlyKS9hdmFoaS1jb21wYXQtaG93bAorQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUBhdmFoaV9jb21wYXRfaG93bF9yZW5kZXp2b3VzZGlyID0gJChhdmFoaV9jb21wYXRfaG93bGRpcikvcmVuZGV6dm91cworQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUBhdmFoaV9jb21wYXRfaG93bF9jb3JieWRpciA9ICQoYXZhaGlfY29tcGF0X2hvd2xkaXIpL2NvcmJ5CitARU5BQkxFX0NPTVBBVF9IT1dMX1RSVUVAQEhBVkVfREJVU19UUlVFQGF2YWhpX2NvbXBhdF9ob3dsX2Rpc2NvdmVyeWRpciA9ICQoYXZhaGlfY29tcGF0X2hvd2xkaXIpL2Rpc2NvdmVyeQorQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUBhdmFoaV9jb21wYXRfaG93bF9zYWx0ZGlyID0gJChhdmFoaV9jb21wYXRfaG93bGRpcikvc2FsdAorQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUBhdmFoaV9jb21wYXRfaG93bF9IRUFERVJTID0gXAorQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUAJaW5jbHVkZS9ob3dsLmgKKworQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUBhdmFoaV9jb21wYXRfaG93bF9yZW5kZXp2b3VzX0hFQURFUlMgPSBcCitARU5BQkxFX0NPTVBBVF9IT1dMX1RSVUVAQEhBVkVfREJVU19UUlVFQAlpbmNsdWRlL3JlbmRlenZvdXMvcmVuZGV6dm91cy5oIFwKK0BFTkFCTEVfQ09NUEFUX0hPV0xfVFJVRUBASEFWRV9EQlVTX1RSVUVACWluY2x1ZGUvcmVuZGV6dm91cy90ZXh0X3JlY29yZC5oCisKK0BFTkFCTEVfQ09NUEFUX0hPV0xfVFJVRUBASEFWRV9EQlVTX1RSVUVAYXZhaGlfY29tcGF0X2hvd2xfY29yYnlfSEVBREVSUyA9IFwKK0BFTkFCTEVfQ09NUEFUX0hPV0xfVFJVRUBASEFWRV9EQlVTX1RSVUVACWluY2x1ZGUvY29yYnkvbWVzc2FnZS5oIFwKK0BFTkFCTEVfQ09NUEFUX0hPV0xfVFJVRUBASEFWRV9EQlVTX1RSVUVACWluY2x1ZGUvY29yYnkvb2JqZWN0LmggXAorQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUAJaW5jbHVkZS9jb3JieS9vcmIuaCBcCitARU5BQkxFX0NPTVBBVF9IT1dMX1RSVUVAQEhBVkVfREJVU19UUlVFQAlpbmNsdWRlL2NvcmJ5L2NvcmJ5LmggXAorQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUAJaW5jbHVkZS9jb3JieS9jaGFubmVsLmggXAorQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUAJaW5jbHVkZS9jb3JieS9idWZmZXIuaAorCitARU5BQkxFX0NPTVBBVF9IT1dMX1RSVUVAQEhBVkVfREJVU19UUlVFQGF2YWhpX2NvbXBhdF9ob3dsX2Rpc2NvdmVyeV9IRUFERVJTID0gXAorQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUAJaW5jbHVkZS9kaXNjb3ZlcnkvZGlzY292ZXJ5LmggXAorQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUAJaW5jbHVkZS9kaXNjb3ZlcnkvdGV4dF9yZWNvcmQuaAorCitARU5BQkxFX0NPTVBBVF9IT1dMX1RSVUVAQEhBVkVfREJVU19UUlVFQGF2YWhpX2NvbXBhdF9ob3dsX3NhbHRfSEVBREVSUyA9IFwKK0BFTkFCTEVfQ09NUEFUX0hPV0xfVFJVRUBASEFWRV9EQlVTX1RSVUVACWluY2x1ZGUvc2FsdC9zb2NrZXQuaCBcCitARU5BQkxFX0NPTVBBVF9IT1dMX1RSVUVAQEhBVkVfREJVU19UUlVFQAlpbmNsdWRlL3NhbHQvYWRkcmVzcy5oIFwKK0BFTkFCTEVfQ09NUEFUX0hPV0xfVFJVRUBASEFWRV9EQlVTX1RSVUVACWluY2x1ZGUvc2FsdC9wbGF0Zm9ybS5oIFwKK0BFTkFCTEVfQ09NUEFUX0hPV0xfVFJVRUBASEFWRV9EQlVTX1RSVUVACWluY2x1ZGUvc2FsdC9zaWduYWwuaCBcCitARU5BQkxFX0NPTVBBVF9IT1dMX1RSVUVAQEhBVkVfREJVU19UUlVFQAlpbmNsdWRlL3NhbHQvaW50ZXJmYWNlLmggXAorQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUAJaW5jbHVkZS9zYWx0L3NhbHQuaCBcCitARU5BQkxFX0NPTVBBVF9IT1dMX1RSVUVAQEhBVkVfREJVU19UUlVFQAlpbmNsdWRlL3NhbHQvdGltZS5oIFwKK0BFTkFCTEVfQ09NUEFUX0hPV0xfVFJVRUBASEFWRV9EQlVTX1RSVUVACWluY2x1ZGUvc2FsdC9kZWJ1Zy5oCisKK0BFTkFCTEVfQ09NUEFUX0hPV0xfVFJVRUBASEFWRV9EQlVTX1RSVUVASE9XTEhFQURFUlMgPSBcCitARU5BQkxFX0NPTVBBVF9IT1dMX1RSVUVAQEhBVkVfREJVU19UUlVFQAkkKGF2YWhpX2NvbXBhdF9ob3dsX0hFQURFUlMpIFwKK0BFTkFCTEVfQ09NUEFUX0hPV0xfVFJVRUBASEFWRV9EQlVTX1RSVUVACSQoYXZhaGlfY29tcGF0X2hvd2xfcmVuZGV6dm91c19IRUFERVJTKSBcCitARU5BQkxFX0NPTVBBVF9IT1dMX1RSVUVAQEhBVkVfREJVU19UUlVFQAkkKGF2YWhpX2NvbXBhdF9ob3dsX2NvcmJ5X0hFQURFUlMpIFwKK0BFTkFCTEVfQ09NUEFUX0hPV0xfVFJVRUBASEFWRV9EQlVTX1RSVUVACSQoYXZhaGlfY29tcGF0X2hvd2xfZGlzY292ZXJ5X0hFQURFUlMpIFwKK0BFTkFCTEVfQ09NUEFUX0hPV0xfVFJVRUBASEFWRV9EQlVTX1RSVUVACSQoYXZhaGlfY29tcGF0X2hvd2xfc2FsdF9IRUFERVJTKQorCitARU5BQkxFX0NPTVBBVF9IT1dMX1RSVUVAQEhBVkVfREJVU19UUlVFQGxpYl9MVExJQlJBUklFUyA9IGxpYmhvd2wubGEKK0BFTkFCTEVfQ09NUEFUX0hPV0xfVFJVRUBASEFWRV9EQlVTX1RSVUVAbGliaG93bF9sYV9TT1VSQ0VTID0gXAorQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUAJJChIT1dMSEVBREVSUykgXAorQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUAJd2Fybi5jIHdhcm4uaCBcCitARU5BQkxFX0NPTVBBVF9IT1dMX1RSVUVAQEhBVkVfREJVU19UUlVFQAl1bnN1cHBvcnRlZC5jIFwKK0BFTkFCTEVfQ09NUEFUX0hPV0xfVFJVRUBASEFWRV9EQlVTX1RSVUVACWFkZHJlc3MuYyBcCitARU5BQkxFX0NPTVBBVF9IT1dMX1RSVUVAQEhBVkVfREJVU19UUlVFQAl0ZXh0LmMgXAorQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUAJY29tcGF0LmMKKworQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUBsaWJob3dsX2xhX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAkKFBUSFJFQURfQ0ZMQUdTKSAtSSAkKHNyY2RpcikvaW5jbHVkZQorQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUBsaWJob3dsX2xhX0xERkxBR1MgPSAkKEFNX0xERkxBR1MpICAtdmVyc2lvbi1pbmZvICQoTElCQVZBSElfQ09NUEFUX0hPV0xfVkVSU0lPTl9JTkZPKSAkKFBUSFJFQURfTElCUykgJChQVEhSRUFEX0NGTEFHUykgLi4vYXZhaGktY29tbW9uL2xpYmF2YWhpLWNvbW1vbi5sYSAuLi9hdmFoaS1jbGllbnQvbGliYXZhaGktY2xpZW50LmxhCitARU5BQkxFX0NPTVBBVF9IT1dMX1RSVUVAQEhBVkVfREJVU19UUlVFQGFkZHJlc3NfdGVzdF9TT1VSQ0VTID0gXAorQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUAJJChIT1dMSEVBREVSUykgXAorQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUAJYWRkcmVzcy5jIFwKK0BFTkFCTEVfQ09NUEFUX0hPV0xfVFJVRUBASEFWRV9EQlVTX1RSVUVACWFkZHJlc3MtdGVzdC5jIFwKK0BFTkFCTEVfQ09NUEFUX0hPV0xfVFJVRUBASEFWRV9EQlVTX1RSVUVACXdhcm4uYyB3YXJuLmgKKworQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUBhZGRyZXNzX3Rlc3RfQ0ZMQUdTID0gJChBTV9DRkxBR1MpICQoUFRIUkVBRF9DRkxBR1MpIC1JICQoc3JjZGlyKS9pbmNsdWRlCitARU5BQkxFX0NPTVBBVF9IT1dMX1RSVUVAQEhBVkVfREJVU19UUlVFQGFkZHJlc3NfdGVzdF9MREFERCA9ICQoQU1fTERBREQpICQoUFRIUkVBRF9MSUJTKSAkKFBUSFJFQURfQ0ZMQUdTKSAuLi9hdmFoaS1jb21tb24vbGliYXZhaGktY29tbW9uLmxhCitARU5BQkxFX0NPTVBBVF9IT1dMX1RSVUVAQEhBVkVfREJVU19UUlVFQHRleHRfdGVzdF9TT1VSQ0VTID0gXAorQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUAJJChIT1dMSEVBREVSUykgXAorQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUAJdGV4dC5jIFwKK0BFTkFCTEVfQ09NUEFUX0hPV0xfVFJVRUBASEFWRV9EQlVTX1RSVUVACXRleHQtdGVzdC5jIFwKK0BFTkFCTEVfQ09NUEFUX0hPV0xfVFJVRUBASEFWRV9EQlVTX1RSVUVACXdhcm4uYyB3YXJuLmgKKworQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUB0ZXh0X3Rlc3RfQ0ZMQUdTID0gJChBTV9DRkxBR1MpICAkKFBUSFJFQURfQ0ZMQUdTKSAtSSAkKHNyY2RpcikvaW5jbHVkZQorQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUB0ZXh0X3Rlc3RfTERBREQgPSAkKEFNX0xEQUREKSAkKFBUSFJFQURfTElCUykgJChQVEhSRUFEX0NGTEFHUykgLi4vYXZhaGktY29tbW9uL2xpYmF2YWhpLWNvbW1vbi5sYQorQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUBicm93c2VfZG9tYWluX3Rlc3RfU09VUkNFUyA9IFwKK0BFTkFCTEVfQ09NUEFUX0hPV0xfVFJVRUBASEFWRV9EQlVTX1RSVUVACSQoSE9XTEhFQURFUlMpIFwKK0BFTkFCTEVfQ09NUEFUX0hPV0xfVFJVRUBASEFWRV9EQlVTX1RSVUVACWJyb3dzZS1kb21haW4tdGVzdC5jCisKK0BFTkFCTEVfQ09NUEFUX0hPV0xfVFJVRUBASEFWRV9EQlVTX1RSVUVAYnJvd3NlX2RvbWFpbl90ZXN0X0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAkKFBUSFJFQURfQ0ZMQUdTKSAtSSAkKHNyY2RpcikvaW5jbHVkZQorQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUBicm93c2VfZG9tYWluX3Rlc3RfTERBREQgPSAkKEFNX0xEQUREKSAkKFBUSFJFQURfTElCUykgJChQVEhSRUFEX0NGTEFHUykgbGliaG93bC5sYQorYWxsOiBhbGwtcmVjdXJzaXZlCisKKy5TVUZGSVhFUzoKKy5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCisJICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduIGF2YWhpLWNvbXBhdC1ob3dsL01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiBhdmFoaS1jb21wYXQtaG93bC9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CitpbnN0YWxsLWxpYkxUTElCUkFSSUVTOiAkKGxpYl9MVExJQlJBUklFUykKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwl0ZXN0IC16ICIkKGxpYmRpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKGxpYmRpcikiCisJQGxpc3Q9JyQobGliX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQobGliZGlyKSIgfHwgbGlzdD07IFwKKwlsaXN0Mj07IGZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJHA7IHRoZW4gXAorCSAgICBsaXN0Mj0iJCRsaXN0MiAkJHAiOyBcCisJICBlbHNlIDo7IGZpOyBcCisJZG9uZTsgXAorCXRlc3QgLXogIiQkbGlzdDIiIHx8IHsgXAorCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICckKERFU1RESVIpJChsaWJkaXIpJyI7IFwKKwkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICIkKERFU1RESVIpJChsaWJkaXIpIjsgXAorCX0KKwordW5pbnN0YWxsLWxpYkxUTElCUkFSSUVTOgorCUAkKE5PUk1BTF9VTklOU1RBTEwpCisJQGxpc3Q9JyQobGliX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQobGliZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgICQoYW1fX3N0cmlwX2RpcikgXAorCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICckKERFU1RESVIpJChsaWJkaXIpLyQkZiciOyBcCisJICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAiJChERVNURElSKSQobGliZGlyKS8kJGYiOyBcCisJZG9uZQorCitjbGVhbi1saWJMVExJQlJBUklFUzoKKwktdGVzdCAteiAiJChsaWJfTFRMSUJSQVJJRVMpIiB8fCBybSAtZiAkKGxpYl9MVExJQlJBUklFUykKKwlAbGlzdD0nJChsaWJfTFRMSUJSQVJJRVMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBkaXI9ImBlY2hvICQkcCB8IHNlZCAtZSAnc3wvW14vXSokJHx8J2AiOyBcCisJICB0ZXN0ICIkJGRpciIgIT0gIiQkcCIgfHwgZGlyPS47IFwKKwkgIGVjaG8gInJtIC1mIFwiJCR7ZGlyfS9zb19sb2NhdGlvbnNcIiI7IFwKKwkgIHJtIC1mICIkJHtkaXJ9L3NvX2xvY2F0aW9ucyI7IFwKKwlkb25lCitsaWJob3dsLmxhOiAkKGxpYmhvd2xfbGFfT0JKRUNUUykgJChsaWJob3dsX2xhX0RFUEVOREVOQ0lFUykgJChFWFRSQV9saWJob3dsX2xhX0RFUEVOREVOQ0lFUykgCisJJChBTV9WX0NDTEQpJChsaWJob3dsX2xhX0xJTkspICQoYW1fbGliaG93bF9sYV9ycGF0aCkgJChsaWJob3dsX2xhX09CSkVDVFMpICQobGliaG93bF9sYV9MSUJBREQpICQoTElCUykKKworY2xlYW4tbm9pbnN0UFJPR1JBTVM6CisJQGxpc3Q9JyQobm9pbnN0X1BST0dSQU1TKSc7IHRlc3QgLW4gIiQkbGlzdCIgfHwgZXhpdCAwOyBcCisJZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKKwlybSAtZiAkJGxpc3QgfHwgZXhpdCAkJD87IFwKKwl0ZXN0IC1uICIkKEVYRUVYVCkiIHx8IGV4aXQgMDsgXAorCWxpc3Q9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAncy8kKEVYRUVYVCkkJC8vJ2A7IFwKKwllY2hvICIgcm0gLWYiICQkbGlzdDsgXAorCXJtIC1mICQkbGlzdAorYWRkcmVzcy10ZXN0JChFWEVFWFQpOiAkKGFkZHJlc3NfdGVzdF9PQkpFQ1RTKSAkKGFkZHJlc3NfdGVzdF9ERVBFTkRFTkNJRVMpICQoRVhUUkFfYWRkcmVzc190ZXN0X0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGFkZHJlc3MtdGVzdCQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQoYWRkcmVzc190ZXN0X0xJTkspICQoYWRkcmVzc190ZXN0X09CSkVDVFMpICQoYWRkcmVzc190ZXN0X0xEQUREKSAkKExJQlMpCiticm93c2UtZG9tYWluLXRlc3QkKEVYRUVYVCk6ICQoYnJvd3NlX2RvbWFpbl90ZXN0X09CSkVDVFMpICQoYnJvd3NlX2RvbWFpbl90ZXN0X0RFUEVOREVOQ0lFUykgJChFWFRSQV9icm93c2VfZG9tYWluX3Rlc3RfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgYnJvd3NlLWRvbWFpbi10ZXN0JChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChicm93c2VfZG9tYWluX3Rlc3RfTElOSykgJChicm93c2VfZG9tYWluX3Rlc3RfT0JKRUNUUykgJChicm93c2VfZG9tYWluX3Rlc3RfTERBREQpICQoTElCUykKK3RleHQtdGVzdCQoRVhFRVhUKTogJCh0ZXh0X3Rlc3RfT0JKRUNUUykgJCh0ZXh0X3Rlc3RfREVQRU5ERU5DSUVTKSAkKEVYVFJBX3RleHRfdGVzdF9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiB0ZXh0LXRlc3QkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKHRleHRfdGVzdF9MSU5LKSAkKHRleHRfdGVzdF9PQkpFQ1RTKSAkKHRleHRfdGVzdF9MREFERCkgJChMSUJTKQorCittb3N0bHljbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLiQoT0JKRVhUKQorCitkaXN0Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi50YWIuYworCitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYWRkcmVzc190ZXN0LWFkZHJlc3MtdGVzdC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYWRkcmVzc190ZXN0LWFkZHJlc3MuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2FkZHJlc3NfdGVzdC13YXJuLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9icm93c2VfZG9tYWluX3Rlc3QtYnJvd3NlLWRvbWFpbi10ZXN0LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJob3dsX2xhLWFkZHJlc3MuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJob3dsX2xhLWNvbXBhdC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmhvd2xfbGEtdGV4dC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmhvd2xfbGEtdW5zdXBwb3J0ZWQuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJob3dsX2xhLXdhcm4uUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS90ZXh0X3Rlc3QtdGV4dC10ZXN0LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS90ZXh0X3Rlc3QtdGV4dC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvdGV4dF90ZXN0LXdhcm4uUG9AYW1fX3F1b3RlQAorCisuYy5vOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAkPAorCisuYy5vYmo6CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgYCQoQ1lHUEFUSF9XKSAnJDwnYAorCisuYy5sbzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKKworbGliaG93bF9sYS13YXJuLmxvOiB3YXJuLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJob3dsX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJob3dsX2xhLXdhcm4ubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmhvd2xfbGEtd2Fybi5UcG8gLWMgLW8gbGliaG93bF9sYS13YXJuLmxvIGB0ZXN0IC1mICd3YXJuLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHdhcm4uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliaG93bF9sYS13YXJuLlRwbyAkKERFUERJUikvbGliaG93bF9sYS13YXJuLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3dhcm4uYycgb2JqZWN0PSdsaWJob3dsX2xhLXdhcm4ubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJob3dsX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmhvd2xfbGEtd2Fybi5sbyBgdGVzdCAtZiAnd2Fybi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B3YXJuLmMKKworbGliaG93bF9sYS11bnN1cHBvcnRlZC5sbzogdW5zdXBwb3J0ZWQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmhvd2xfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmhvd2xfbGEtdW5zdXBwb3J0ZWQubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmhvd2xfbGEtdW5zdXBwb3J0ZWQuVHBvIC1jIC1vIGxpYmhvd2xfbGEtdW5zdXBwb3J0ZWQubG8gYHRlc3QgLWYgJ3Vuc3VwcG9ydGVkLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHVuc3VwcG9ydGVkLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmhvd2xfbGEtdW5zdXBwb3J0ZWQuVHBvICQoREVQRElSKS9saWJob3dsX2xhLXVuc3VwcG9ydGVkLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3Vuc3VwcG9ydGVkLmMnIG9iamVjdD0nbGliaG93bF9sYS11bnN1cHBvcnRlZC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmhvd2xfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliaG93bF9sYS11bnN1cHBvcnRlZC5sbyBgdGVzdCAtZiAndW5zdXBwb3J0ZWQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdW5zdXBwb3J0ZWQuYworCitsaWJob3dsX2xhLWFkZHJlc3MubG86IGFkZHJlc3MuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmhvd2xfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmhvd2xfbGEtYWRkcmVzcy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliaG93bF9sYS1hZGRyZXNzLlRwbyAtYyAtbyBsaWJob3dsX2xhLWFkZHJlc3MubG8gYHRlc3QgLWYgJ2FkZHJlc3MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYWRkcmVzcy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJob3dsX2xhLWFkZHJlc3MuVHBvICQoREVQRElSKS9saWJob3dsX2xhLWFkZHJlc3MuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYWRkcmVzcy5jJyBvYmplY3Q9J2xpYmhvd2xfbGEtYWRkcmVzcy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmhvd2xfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliaG93bF9sYS1hZGRyZXNzLmxvIGB0ZXN0IC1mICdhZGRyZXNzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFkZHJlc3MuYworCitsaWJob3dsX2xhLXRleHQubG86IHRleHQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmhvd2xfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmhvd2xfbGEtdGV4dC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliaG93bF9sYS10ZXh0LlRwbyAtYyAtbyBsaWJob3dsX2xhLXRleHQubG8gYHRlc3QgLWYgJ3RleHQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdGV4dC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJob3dsX2xhLXRleHQuVHBvICQoREVQRElSKS9saWJob3dsX2xhLXRleHQuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ndGV4dC5jJyBvYmplY3Q9J2xpYmhvd2xfbGEtdGV4dC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmhvd2xfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliaG93bF9sYS10ZXh0LmxvIGB0ZXN0IC1mICd0ZXh0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHRleHQuYworCitsaWJob3dsX2xhLWNvbXBhdC5sbzogY29tcGF0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJob3dsX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJob3dsX2xhLWNvbXBhdC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliaG93bF9sYS1jb21wYXQuVHBvIC1jIC1vIGxpYmhvd2xfbGEtY29tcGF0LmxvIGB0ZXN0IC1mICdjb21wYXQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgY29tcGF0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmhvd2xfbGEtY29tcGF0LlRwbyAkKERFUERJUikvbGliaG93bF9sYS1jb21wYXQuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nY29tcGF0LmMnIG9iamVjdD0nbGliaG93bF9sYS1jb21wYXQubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJob3dsX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmhvd2xfbGEtY29tcGF0LmxvIGB0ZXN0IC1mICdjb21wYXQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgY29tcGF0LmMKKworYWRkcmVzc190ZXN0LWFkZHJlc3MubzogYWRkcmVzcy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYWRkcmVzc190ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBhZGRyZXNzX3Rlc3QtYWRkcmVzcy5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9hZGRyZXNzX3Rlc3QtYWRkcmVzcy5UcG8gLWMgLW8gYWRkcmVzc190ZXN0LWFkZHJlc3MubyBgdGVzdCAtZiAnYWRkcmVzcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhZGRyZXNzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2FkZHJlc3NfdGVzdC1hZGRyZXNzLlRwbyAkKERFUERJUikvYWRkcmVzc190ZXN0LWFkZHJlc3MuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhZGRyZXNzLmMnIG9iamVjdD0nYWRkcmVzc190ZXN0LWFkZHJlc3MubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYWRkcmVzc190ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGFkZHJlc3NfdGVzdC1hZGRyZXNzLm8gYHRlc3QgLWYgJ2FkZHJlc3MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYWRkcmVzcy5jCisKK2FkZHJlc3NfdGVzdC1hZGRyZXNzLm9iajogYWRkcmVzcy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYWRkcmVzc190ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBhZGRyZXNzX3Rlc3QtYWRkcmVzcy5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2FkZHJlc3NfdGVzdC1hZGRyZXNzLlRwbyAtYyAtbyBhZGRyZXNzX3Rlc3QtYWRkcmVzcy5vYmogYGlmIHRlc3QgLWYgJ2FkZHJlc3MuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdhZGRyZXNzLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2FkZHJlc3MuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYWRkcmVzc190ZXN0LWFkZHJlc3MuVHBvICQoREVQRElSKS9hZGRyZXNzX3Rlc3QtYWRkcmVzcy5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FkZHJlc3MuYycgb2JqZWN0PSdhZGRyZXNzX3Rlc3QtYWRkcmVzcy5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGFkZHJlc3NfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhZGRyZXNzX3Rlc3QtYWRkcmVzcy5vYmogYGlmIHRlc3QgLWYgJ2FkZHJlc3MuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdhZGRyZXNzLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2FkZHJlc3MuYyc7IGZpYAorCithZGRyZXNzX3Rlc3QtYWRkcmVzcy10ZXN0Lm86IGFkZHJlc3MtdGVzdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYWRkcmVzc190ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBhZGRyZXNzX3Rlc3QtYWRkcmVzcy10ZXN0Lm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2FkZHJlc3NfdGVzdC1hZGRyZXNzLXRlc3QuVHBvIC1jIC1vIGFkZHJlc3NfdGVzdC1hZGRyZXNzLXRlc3QubyBgdGVzdCAtZiAnYWRkcmVzcy10ZXN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFkZHJlc3MtdGVzdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9hZGRyZXNzX3Rlc3QtYWRkcmVzcy10ZXN0LlRwbyAkKERFUERJUikvYWRkcmVzc190ZXN0LWFkZHJlc3MtdGVzdC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FkZHJlc3MtdGVzdC5jJyBvYmplY3Q9J2FkZHJlc3NfdGVzdC1hZGRyZXNzLXRlc3QubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYWRkcmVzc190ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGFkZHJlc3NfdGVzdC1hZGRyZXNzLXRlc3QubyBgdGVzdCAtZiAnYWRkcmVzcy10ZXN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFkZHJlc3MtdGVzdC5jCisKK2FkZHJlc3NfdGVzdC1hZGRyZXNzLXRlc3Qub2JqOiBhZGRyZXNzLXRlc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGFkZHJlc3NfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYWRkcmVzc190ZXN0LWFkZHJlc3MtdGVzdC5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2FkZHJlc3NfdGVzdC1hZGRyZXNzLXRlc3QuVHBvIC1jIC1vIGFkZHJlc3NfdGVzdC1hZGRyZXNzLXRlc3Qub2JqIGBpZiB0ZXN0IC1mICdhZGRyZXNzLXRlc3QuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdhZGRyZXNzLXRlc3QuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvYWRkcmVzcy10ZXN0LmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2FkZHJlc3NfdGVzdC1hZGRyZXNzLXRlc3QuVHBvICQoREVQRElSKS9hZGRyZXNzX3Rlc3QtYWRkcmVzcy10ZXN0LlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYWRkcmVzcy10ZXN0LmMnIG9iamVjdD0nYWRkcmVzc190ZXN0LWFkZHJlc3MtdGVzdC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGFkZHJlc3NfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhZGRyZXNzX3Rlc3QtYWRkcmVzcy10ZXN0Lm9iaiBgaWYgdGVzdCAtZiAnYWRkcmVzcy10ZXN0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnYWRkcmVzcy10ZXN0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2FkZHJlc3MtdGVzdC5jJzsgZmlgCisKK2FkZHJlc3NfdGVzdC13YXJuLm86IHdhcm4uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGFkZHJlc3NfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYWRkcmVzc190ZXN0LXdhcm4ubyAtTUQgLU1QIC1NRiAkKERFUERJUikvYWRkcmVzc190ZXN0LXdhcm4uVHBvIC1jIC1vIGFkZHJlc3NfdGVzdC13YXJuLm8gYHRlc3QgLWYgJ3dhcm4uYycgfHwgZWNobyAnJChzcmNkaXIpLydgd2Fybi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9hZGRyZXNzX3Rlc3Qtd2Fybi5UcG8gJChERVBESVIpL2FkZHJlc3NfdGVzdC13YXJuLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nd2Fybi5jJyBvYmplY3Q9J2FkZHJlc3NfdGVzdC13YXJuLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGFkZHJlc3NfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhZGRyZXNzX3Rlc3Qtd2Fybi5vIGB0ZXN0IC1mICd3YXJuLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHdhcm4uYworCithZGRyZXNzX3Rlc3Qtd2Fybi5vYmo6IHdhcm4uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGFkZHJlc3NfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYWRkcmVzc190ZXN0LXdhcm4ub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9hZGRyZXNzX3Rlc3Qtd2Fybi5UcG8gLWMgLW8gYWRkcmVzc190ZXN0LXdhcm4ub2JqIGBpZiB0ZXN0IC1mICd3YXJuLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnd2Fybi5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS93YXJuLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2FkZHJlc3NfdGVzdC13YXJuLlRwbyAkKERFUERJUikvYWRkcmVzc190ZXN0LXdhcm4uUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSd3YXJuLmMnIG9iamVjdD0nYWRkcmVzc190ZXN0LXdhcm4ub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhZGRyZXNzX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYWRkcmVzc190ZXN0LXdhcm4ub2JqIGBpZiB0ZXN0IC1mICd3YXJuLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnd2Fybi5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS93YXJuLmMnOyBmaWAKKworYnJvd3NlX2RvbWFpbl90ZXN0LWJyb3dzZS1kb21haW4tdGVzdC5vOiBicm93c2UtZG9tYWluLXRlc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGJyb3dzZV9kb21haW5fdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYnJvd3NlX2RvbWFpbl90ZXN0LWJyb3dzZS1kb21haW4tdGVzdC5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9icm93c2VfZG9tYWluX3Rlc3QtYnJvd3NlLWRvbWFpbi10ZXN0LlRwbyAtYyAtbyBicm93c2VfZG9tYWluX3Rlc3QtYnJvd3NlLWRvbWFpbi10ZXN0Lm8gYHRlc3QgLWYgJ2Jyb3dzZS1kb21haW4tdGVzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bicm93c2UtZG9tYWluLXRlc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYnJvd3NlX2RvbWFpbl90ZXN0LWJyb3dzZS1kb21haW4tdGVzdC5UcG8gJChERVBESVIpL2Jyb3dzZV9kb21haW5fdGVzdC1icm93c2UtZG9tYWluLXRlc3QuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdicm93c2UtZG9tYWluLXRlc3QuYycgb2JqZWN0PSdicm93c2VfZG9tYWluX3Rlc3QtYnJvd3NlLWRvbWFpbi10ZXN0Lm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGJyb3dzZV9kb21haW5fdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBicm93c2VfZG9tYWluX3Rlc3QtYnJvd3NlLWRvbWFpbi10ZXN0Lm8gYHRlc3QgLWYgJ2Jyb3dzZS1kb21haW4tdGVzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bicm93c2UtZG9tYWluLXRlc3QuYworCiticm93c2VfZG9tYWluX3Rlc3QtYnJvd3NlLWRvbWFpbi10ZXN0Lm9iajogYnJvd3NlLWRvbWFpbi10ZXN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChicm93c2VfZG9tYWluX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGJyb3dzZV9kb21haW5fdGVzdC1icm93c2UtZG9tYWluLXRlc3Qub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9icm93c2VfZG9tYWluX3Rlc3QtYnJvd3NlLWRvbWFpbi10ZXN0LlRwbyAtYyAtbyBicm93c2VfZG9tYWluX3Rlc3QtYnJvd3NlLWRvbWFpbi10ZXN0Lm9iaiBgaWYgdGVzdCAtZiAnYnJvd3NlLWRvbWFpbi10ZXN0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnYnJvd3NlLWRvbWFpbi10ZXN0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2Jyb3dzZS1kb21haW4tdGVzdC5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9icm93c2VfZG9tYWluX3Rlc3QtYnJvd3NlLWRvbWFpbi10ZXN0LlRwbyAkKERFUERJUikvYnJvd3NlX2RvbWFpbl90ZXN0LWJyb3dzZS1kb21haW4tdGVzdC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2Jyb3dzZS1kb21haW4tdGVzdC5jJyBvYmplY3Q9J2Jyb3dzZV9kb21haW5fdGVzdC1icm93c2UtZG9tYWluLXRlc3Qub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChicm93c2VfZG9tYWluX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYnJvd3NlX2RvbWFpbl90ZXN0LWJyb3dzZS1kb21haW4tdGVzdC5vYmogYGlmIHRlc3QgLWYgJ2Jyb3dzZS1kb21haW4tdGVzdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2Jyb3dzZS1kb21haW4tdGVzdC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9icm93c2UtZG9tYWluLXRlc3QuYyc7IGZpYAorCit0ZXh0X3Rlc3QtdGV4dC5vOiB0ZXh0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh0ZXh0X3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHRleHRfdGVzdC10ZXh0Lm8gLU1EIC1NUCAtTUYgJChERVBESVIpL3RleHRfdGVzdC10ZXh0LlRwbyAtYyAtbyB0ZXh0X3Rlc3QtdGV4dC5vIGB0ZXN0IC1mICd0ZXh0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHRleHQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvdGV4dF90ZXN0LXRleHQuVHBvICQoREVQRElSKS90ZXh0X3Rlc3QtdGV4dC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3RleHQuYycgb2JqZWN0PSd0ZXh0X3Rlc3QtdGV4dC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh0ZXh0X3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gdGV4dF90ZXN0LXRleHQubyBgdGVzdCAtZiAndGV4dC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B0ZXh0LmMKKwordGV4dF90ZXN0LXRleHQub2JqOiB0ZXh0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh0ZXh0X3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHRleHRfdGVzdC10ZXh0Lm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvdGV4dF90ZXN0LXRleHQuVHBvIC1jIC1vIHRleHRfdGVzdC10ZXh0Lm9iaiBgaWYgdGVzdCAtZiAndGV4dC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3RleHQuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvdGV4dC5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS90ZXh0X3Rlc3QtdGV4dC5UcG8gJChERVBESVIpL3RleHRfdGVzdC10ZXh0LlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ndGV4dC5jJyBvYmplY3Q9J3RleHRfdGVzdC10ZXh0Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQodGV4dF90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHRleHRfdGVzdC10ZXh0Lm9iaiBgaWYgdGVzdCAtZiAndGV4dC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3RleHQuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvdGV4dC5jJzsgZmlgCisKK3RleHRfdGVzdC10ZXh0LXRlc3QubzogdGV4dC10ZXN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh0ZXh0X3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHRleHRfdGVzdC10ZXh0LXRlc3QubyAtTUQgLU1QIC1NRiAkKERFUERJUikvdGV4dF90ZXN0LXRleHQtdGVzdC5UcG8gLWMgLW8gdGV4dF90ZXN0LXRleHQtdGVzdC5vIGB0ZXN0IC1mICd0ZXh0LXRlc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdGV4dC10ZXN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3RleHRfdGVzdC10ZXh0LXRlc3QuVHBvICQoREVQRElSKS90ZXh0X3Rlc3QtdGV4dC10ZXN0LlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ndGV4dC10ZXN0LmMnIG9iamVjdD0ndGV4dF90ZXN0LXRleHQtdGVzdC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh0ZXh0X3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gdGV4dF90ZXN0LXRleHQtdGVzdC5vIGB0ZXN0IC1mICd0ZXh0LXRlc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdGV4dC10ZXN0LmMKKwordGV4dF90ZXN0LXRleHQtdGVzdC5vYmo6IHRleHQtdGVzdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQodGV4dF90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCB0ZXh0X3Rlc3QtdGV4dC10ZXN0Lm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvdGV4dF90ZXN0LXRleHQtdGVzdC5UcG8gLWMgLW8gdGV4dF90ZXN0LXRleHQtdGVzdC5vYmogYGlmIHRlc3QgLWYgJ3RleHQtdGVzdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3RleHQtdGVzdC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS90ZXh0LXRlc3QuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvdGV4dF90ZXN0LXRleHQtdGVzdC5UcG8gJChERVBESVIpL3RleHRfdGVzdC10ZXh0LXRlc3QuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSd0ZXh0LXRlc3QuYycgb2JqZWN0PSd0ZXh0X3Rlc3QtdGV4dC10ZXN0Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQodGV4dF90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHRleHRfdGVzdC10ZXh0LXRlc3Qub2JqIGBpZiB0ZXN0IC1mICd0ZXh0LXRlc3QuYyc7IHRoZW4gJChDWUdQQVRIX1cpICd0ZXh0LXRlc3QuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvdGV4dC10ZXN0LmMnOyBmaWAKKwordGV4dF90ZXN0LXdhcm4ubzogd2Fybi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQodGV4dF90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCB0ZXh0X3Rlc3Qtd2Fybi5vIC1NRCAtTVAgLU1GICQoREVQRElSKS90ZXh0X3Rlc3Qtd2Fybi5UcG8gLWMgLW8gdGV4dF90ZXN0LXdhcm4ubyBgdGVzdCAtZiAnd2Fybi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B3YXJuLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3RleHRfdGVzdC13YXJuLlRwbyAkKERFUERJUikvdGV4dF90ZXN0LXdhcm4uUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSd3YXJuLmMnIG9iamVjdD0ndGV4dF90ZXN0LXdhcm4ubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQodGV4dF90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHRleHRfdGVzdC13YXJuLm8gYHRlc3QgLWYgJ3dhcm4uYycgfHwgZWNobyAnJChzcmNkaXIpLydgd2Fybi5jCisKK3RleHRfdGVzdC13YXJuLm9iajogd2Fybi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQodGV4dF90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCB0ZXh0X3Rlc3Qtd2Fybi5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL3RleHRfdGVzdC13YXJuLlRwbyAtYyAtbyB0ZXh0X3Rlc3Qtd2Fybi5vYmogYGlmIHRlc3QgLWYgJ3dhcm4uYyc7IHRoZW4gJChDWUdQQVRIX1cpICd3YXJuLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3dhcm4uYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvdGV4dF90ZXN0LXdhcm4uVHBvICQoREVQRElSKS90ZXh0X3Rlc3Qtd2Fybi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3dhcm4uYycgb2JqZWN0PSd0ZXh0X3Rlc3Qtd2Fybi5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHRleHRfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyB0ZXh0X3Rlc3Qtd2Fybi5vYmogYGlmIHRlc3QgLWYgJ3dhcm4uYyc7IHRoZW4gJChDWUdQQVRIX1cpICd3YXJuLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3dhcm4uYyc7IGZpYAorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworaW5zdGFsbC1hdmFoaV9jb21wYXRfaG93bEhFQURFUlM6ICQoYXZhaGlfY29tcGF0X2hvd2xfSEVBREVSUykKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwl0ZXN0IC16ICIkKGF2YWhpX2NvbXBhdF9ob3dsZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQoYXZhaGlfY29tcGF0X2hvd2xkaXIpIgorCUBsaXN0PSckKGF2YWhpX2NvbXBhdF9ob3dsX0hFQURFUlMpJzsgdGVzdCAtbiAiJChhdmFoaV9jb21wYXRfaG93bGRpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAorCSAgZWNobyAiJCRkJCRwIjsgXAorCWRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAorCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKKwkgIGVjaG8gIiAkKElOU1RBTExfSEVBREVSKSAkJGZpbGVzICckKERFU1RESVIpJChhdmFoaV9jb21wYXRfaG93bGRpciknIjsgXAorCSAgJChJTlNUQUxMX0hFQURFUikgJCRmaWxlcyAiJChERVNURElSKSQoYXZhaGlfY29tcGF0X2hvd2xkaXIpIiB8fCBleGl0ICQkPzsgXAorCWRvbmUKKwordW5pbnN0YWxsLWF2YWhpX2NvbXBhdF9ob3dsSEVBREVSUzoKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKGF2YWhpX2NvbXBhdF9ob3dsX0hFQURFUlMpJzsgdGVzdCAtbiAiJChhdmFoaV9jb21wYXRfaG93bGRpcikiIHx8IGxpc3Q9OyBcCisJZmlsZXM9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7IFwKKwlkaXI9JyQoREVTVERJUikkKGF2YWhpX2NvbXBhdF9ob3dsZGlyKSc7ICQoYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpcikKK2luc3RhbGwtYXZhaGlfY29tcGF0X2hvd2xfY29yYnlIRUFERVJTOiAkKGF2YWhpX2NvbXBhdF9ob3dsX2NvcmJ5X0hFQURFUlMpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJdGVzdCAteiAiJChhdmFoaV9jb21wYXRfaG93bF9jb3JieWRpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKGF2YWhpX2NvbXBhdF9ob3dsX2NvcmJ5ZGlyKSIKKwlAbGlzdD0nJChhdmFoaV9jb21wYXRfaG93bF9jb3JieV9IRUFERVJTKSc7IHRlc3QgLW4gIiQoYXZhaGlfY29tcGF0X2hvd2xfY29yYnlkaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKKwkgIGVjaG8gIiQkZCQkcCI7IFwKKwlkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKKwl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCisJICBlY2hvICIgJChJTlNUQUxMX0hFQURFUikgJCRmaWxlcyAnJChERVNURElSKSQoYXZhaGlfY29tcGF0X2hvd2xfY29yYnlkaXIpJyI7IFwKKwkgICQoSU5TVEFMTF9IRUFERVIpICQkZmlsZXMgIiQoREVTVERJUikkKGF2YWhpX2NvbXBhdF9ob3dsX2NvcmJ5ZGlyKSIgfHwgZXhpdCAkJD87IFwKKwlkb25lCisKK3VuaW5zdGFsbC1hdmFoaV9jb21wYXRfaG93bF9jb3JieUhFQURFUlM6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChhdmFoaV9jb21wYXRfaG93bF9jb3JieV9IRUFERVJTKSc7IHRlc3QgLW4gIiQoYXZhaGlfY29tcGF0X2hvd2xfY29yYnlkaXIpIiB8fCBsaXN0PTsgXAorCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgc2VkIC1lICdzfF4uKi98fCdgOyBcCisJZGlyPSckKERFU1RESVIpJChhdmFoaV9jb21wYXRfaG93bF9jb3JieWRpciknOyAkKGFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIpCitpbnN0YWxsLWF2YWhpX2NvbXBhdF9ob3dsX2Rpc2NvdmVyeUhFQURFUlM6ICQoYXZhaGlfY29tcGF0X2hvd2xfZGlzY292ZXJ5X0hFQURFUlMpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJdGVzdCAteiAiJChhdmFoaV9jb21wYXRfaG93bF9kaXNjb3ZlcnlkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChhdmFoaV9jb21wYXRfaG93bF9kaXNjb3ZlcnlkaXIpIgorCUBsaXN0PSckKGF2YWhpX2NvbXBhdF9ob3dsX2Rpc2NvdmVyeV9IRUFERVJTKSc7IHRlc3QgLW4gIiQoYXZhaGlfY29tcGF0X2hvd2xfZGlzY292ZXJ5ZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICBlY2hvICIkJGQkJHAiOyBcCisJZG9uZSB8ICQoYW1fX2Jhc2VfbGlzdCkgfCBcCisJd2hpbGUgcmVhZCBmaWxlczsgZG8gXAorCSAgZWNobyAiICQoSU5TVEFMTF9IRUFERVIpICQkZmlsZXMgJyQoREVTVERJUikkKGF2YWhpX2NvbXBhdF9ob3dsX2Rpc2NvdmVyeWRpciknIjsgXAorCSAgJChJTlNUQUxMX0hFQURFUikgJCRmaWxlcyAiJChERVNURElSKSQoYXZhaGlfY29tcGF0X2hvd2xfZGlzY292ZXJ5ZGlyKSIgfHwgZXhpdCAkJD87IFwKKwlkb25lCisKK3VuaW5zdGFsbC1hdmFoaV9jb21wYXRfaG93bF9kaXNjb3ZlcnlIRUFERVJTOgorCUAkKE5PUk1BTF9VTklOU1RBTEwpCisJQGxpc3Q9JyQoYXZhaGlfY29tcGF0X2hvd2xfZGlzY292ZXJ5X0hFQURFUlMpJzsgdGVzdCAtbiAiJChhdmFoaV9jb21wYXRfaG93bF9kaXNjb3ZlcnlkaXIpIiB8fCBsaXN0PTsgXAorCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgc2VkIC1lICdzfF4uKi98fCdgOyBcCisJZGlyPSckKERFU1RESVIpJChhdmFoaV9jb21wYXRfaG93bF9kaXNjb3ZlcnlkaXIpJzsgJChhbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyKQoraW5zdGFsbC1hdmFoaV9jb21wYXRfaG93bF9yZW5kZXp2b3VzSEVBREVSUzogJChhdmFoaV9jb21wYXRfaG93bF9yZW5kZXp2b3VzX0hFQURFUlMpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJdGVzdCAteiAiJChhdmFoaV9jb21wYXRfaG93bF9yZW5kZXp2b3VzZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQoYXZhaGlfY29tcGF0X2hvd2xfcmVuZGV6dm91c2RpcikiCisJQGxpc3Q9JyQoYXZhaGlfY29tcGF0X2hvd2xfcmVuZGV6dm91c19IRUFERVJTKSc7IHRlc3QgLW4gIiQoYXZhaGlfY29tcGF0X2hvd2xfcmVuZGV6dm91c2RpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAorCSAgZWNobyAiJCRkJCRwIjsgXAorCWRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAorCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKKwkgIGVjaG8gIiAkKElOU1RBTExfSEVBREVSKSAkJGZpbGVzICckKERFU1RESVIpJChhdmFoaV9jb21wYXRfaG93bF9yZW5kZXp2b3VzZGlyKSciOyBcCisJICAkKElOU1RBTExfSEVBREVSKSAkJGZpbGVzICIkKERFU1RESVIpJChhdmFoaV9jb21wYXRfaG93bF9yZW5kZXp2b3VzZGlyKSIgfHwgZXhpdCAkJD87IFwKKwlkb25lCisKK3VuaW5zdGFsbC1hdmFoaV9jb21wYXRfaG93bF9yZW5kZXp2b3VzSEVBREVSUzoKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKGF2YWhpX2NvbXBhdF9ob3dsX3JlbmRlenZvdXNfSEVBREVSUyknOyB0ZXN0IC1uICIkKGF2YWhpX2NvbXBhdF9ob3dsX3JlbmRlenZvdXNkaXIpIiB8fCBsaXN0PTsgXAorCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgc2VkIC1lICdzfF4uKi98fCdgOyBcCisJZGlyPSckKERFU1RESVIpJChhdmFoaV9jb21wYXRfaG93bF9yZW5kZXp2b3VzZGlyKSc7ICQoYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpcikKK2luc3RhbGwtYXZhaGlfY29tcGF0X2hvd2xfc2FsdEhFQURFUlM6ICQoYXZhaGlfY29tcGF0X2hvd2xfc2FsdF9IRUFERVJTKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQoYXZhaGlfY29tcGF0X2hvd2xfc2FsdGRpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKGF2YWhpX2NvbXBhdF9ob3dsX3NhbHRkaXIpIgorCUBsaXN0PSckKGF2YWhpX2NvbXBhdF9ob3dsX3NhbHRfSEVBREVSUyknOyB0ZXN0IC1uICIkKGF2YWhpX2NvbXBhdF9ob3dsX3NhbHRkaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKKwkgIGVjaG8gIiQkZCQkcCI7IFwKKwlkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKKwl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCisJICBlY2hvICIgJChJTlNUQUxMX0hFQURFUikgJCRmaWxlcyAnJChERVNURElSKSQoYXZhaGlfY29tcGF0X2hvd2xfc2FsdGRpciknIjsgXAorCSAgJChJTlNUQUxMX0hFQURFUikgJCRmaWxlcyAiJChERVNURElSKSQoYXZhaGlfY29tcGF0X2hvd2xfc2FsdGRpcikiIHx8IGV4aXQgJCQ/OyBcCisJZG9uZQorCit1bmluc3RhbGwtYXZhaGlfY29tcGF0X2hvd2xfc2FsdEhFQURFUlM6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChhdmFoaV9jb21wYXRfaG93bF9zYWx0X0hFQURFUlMpJzsgdGVzdCAtbiAiJChhdmFoaV9jb21wYXRfaG93bF9zYWx0ZGlyKSIgfHwgbGlzdD07IFwKKwlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IHNlZCAtZSAnc3xeLiovfHwnYDsgXAorCWRpcj0nJChERVNURElSKSQoYXZhaGlfY29tcGF0X2hvd2xfc2FsdGRpciknOyAkKGFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIpCisKKyMgVGhpcyBkaXJlY3RvcnkncyBzdWJkaXJlY3RvcmllcyBhcmUgbW9zdGx5IGluZGVwZW5kZW50OyB5b3UgY2FuIGNkCisjIGludG8gdGhlbSBhbmQgcnVuIGBtYWtlJyB3aXRob3V0IGdvaW5nIHRocm91Z2ggdGhpcyBNYWtlZmlsZS4KKyMgVG8gY2hhbmdlIHRoZSB2YWx1ZXMgb2YgYG1ha2UnIHZhcmlhYmxlczogaW5zdGVhZCBvZiBlZGl0aW5nIE1ha2VmaWxlcywKKyMgKDEpIGlmIHRoZSB2YXJpYWJsZSBpcyBzZXQgaW4gYGNvbmZpZy5zdGF0dXMnLCBlZGl0IGBjb25maWcuc3RhdHVzJworIyAgICAgKHdoaWNoIHdpbGwgY2F1c2UgdGhlIE1ha2VmaWxlcyB0byBiZSByZWdlbmVyYXRlZCB3aGVuIHlvdSBydW4gYG1ha2UnKTsKKyMgKDIpIG90aGVyd2lzZSwgcGFzcyB0aGUgZGVzaXJlZCB2YWx1ZXMgb24gdGhlIGBtYWtlJyBjb21tYW5kIGxpbmUuCiskKFJFQ1VSU0lWRV9UQVJHRVRTKToKKwlAZmFpbD0gZmFpbGNvbT0nZXhpdCAxJzsgXAorCWZvciBmIGluIHggJCRNQUtFRkxBR1M7IGRvIFwKKwkgIGNhc2UgJCRmIGluIFwKKwkgICAgKj0qIHwgLS1bIWtdKik7OyBcCisJICAgICprKikgZmFpbGNvbT0nZmFpbD15ZXMnOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwlkb3Rfc2Vlbj1ubzsgXAorCXRhcmdldD1gZWNobyAkQCB8IHNlZCBzLy1yZWN1cnNpdmUvL2A7IFwKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGVjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCisJICAgIGRvdF9zZWVuPXllczsgXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0LWFtIjsgXAorCSAgZWxzZSBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCisJICBmaTsgXAorCSAgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkJGxvY2FsX3RhcmdldCkgXAorCSAgfHwgZXZhbCAkJGZhaWxjb207IFwKKwlkb25lOyBcCisJaWYgdGVzdCAiJCRkb3Rfc2VlbiIgPSAibm8iOyB0aGVuIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICIkJHRhcmdldC1hbSIgfHwgZXhpdCAxOyBcCisJZmk7IHRlc3QgLXogIiQkZmFpbCIKKworJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUyk6CisJQGZhaWw9IGZhaWxjb209J2V4aXQgMSc7IFwKKwlmb3IgZiBpbiB4ICQkTUFLRUZMQUdTOyBkbyBcCisJICBjYXNlICQkZiBpbiBcCisJICAgICo9KiB8IC0tWyFrXSopOzsgXAorCSAgICAqayopIGZhaWxjb209J2ZhaWw9eWVzJzs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZG90X3NlZW49bm87IFwKKwljYXNlICIkQCIgaW4gXAorCSAgZGlzdGNsZWFuLSogfCBtYWludGFpbmVyLWNsZWFuLSopIGxpc3Q9JyQoRElTVF9TVUJESVJTKScgOzsgXAorCSAgKikgbGlzdD0nJChTVUJESVJTKScgOzsgXAorCWVzYWM7IFwKKwlyZXY9Jyc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gOjsgZWxzZSBcCisJICAgIHJldj0iJCRzdWJkaXIgJCRyZXYiOyBcCisJICBmaTsgXAorCWRvbmU7IFwKKwlyZXY9IiQkcmV2IC4iOyBcCisJdGFyZ2V0PWBlY2hvICRAIHwgc2VkIHMvLXJlY3Vyc2l2ZS8vYDsgXAorCWZvciBzdWJkaXIgaW4gJCRyZXY7IGRvIFwKKwkgIGVjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQtYW0iOyBcCisJICBlbHNlIFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKKwkgIGZpOyBcCisJICAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCisJICB8fCBldmFsICQkZmFpbGNvbTsgXAorCWRvbmUgJiYgdGVzdCAteiAiJCRmYWlsIgordGFncy1yZWN1cnNpdmU6CisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICB0ZXN0ICIkJHN1YmRpciIgPSAuIHx8ICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgdGFncyk7IFwKKwlkb25lCitjdGFncy1yZWN1cnNpdmU6CisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICB0ZXN0ICIkJHN1YmRpciIgPSAuIHx8ICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY3RhZ3MpOyBcCisJZG9uZQorCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCW1raWQgLWZJRCAkJHVuaXF1ZQordGFnczogVEFHUworCitUQUdTOiB0YWdzLXJlY3Vyc2l2ZSAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJc2V0IHg7IFwKKwloZXJlPWBwd2RgOyBcCisJaWYgKCQoRVRBR1MpIC0tZXRhZ3MtaW5jbHVkZSAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCisJICBpbmNsdWRlX29wdGlvbj0tLWV0YWdzLWluY2x1ZGU7IFwKKwkgIGVtcHR5X2ZpeD0uOyBcCisJZWxzZSBcCisJICBpbmNsdWRlX29wdGlvbj0tLWluY2x1ZGU7IFwKKwkgIGVtcHR5X2ZpeD07IFwKKwlmaTsgXAorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgdGVzdCAhIC1mICQkc3ViZGlyL1RBR1MgfHwgXAorCSAgICAgIHNldCAiJCRAIiAiJCRpbmNsdWRlX29wdGlvbj0kJGhlcmUvJCRzdWJkaXIvVEFHUyI7IFwKKwkgIGZpOyBcCisJZG9uZTsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlzaGlmdDsgXAorCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisJICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCisJICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAorCSAgZWxzZSBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAkJHVuaXF1ZTsgXAorCSAgZmk7IFwKKwlmaQorY3RhZ3M6IENUQUdTCitDVEFHUzogY3RhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCisJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCisJICAgICAkJHVuaXF1ZQorCitHVEFHUzoKKwloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgorCitkaXN0Y2xlYW4tdGFnczoKKwktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKKwlAbGlzdD0nJChESVNUX1NVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCisJICAgIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRzdWJkaXIiIFwKKwkgICAgfHwgJChNS0RJUl9QKSAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorCUBsaXN0PSckKERJU1RfU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgZGlyMT0kJHN1YmRpcjsgZGlyMj0iJChkaXN0ZGlyKS8kJHN1YmRpciI7IFwKKwkgICAgJChhbV9fcmVsYXRpdml6ZSk7IFwKKwkgICAgbmV3X2Rpc3RkaXI9JCRyZWxkaXI7IFwKKwkgICAgZGlyMT0kJHN1YmRpcjsgZGlyMj0iJCh0b3BfZGlzdGRpcikiOyBcCisJICAgICQoYW1fX3JlbGF0aXZpemUpOyBcCisJICAgIG5ld190b3BfZGlzdGRpcj0kJHJlbGRpcjsgXAorCSAgICBlY2hvICIgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHRvcF9kaXN0ZGlyPSIkJG5ld190b3BfZGlzdGRpciIgZGlzdGRpcj0iJCRuZXdfZGlzdGRpciIgXFwiOyBcCisJICAgIGVjaG8gIiAgICAgYW1fX3JlbW92ZV9kaXN0ZGlyPTogYW1fX3NraXBfbGVuZ3RoX2NoZWNrPTogYW1fX3NraXBfbW9kZV9maXg9OiBkaXN0ZGlyKSI7IFwKKwkgICAgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiBcCisJICAgICAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgXAorCSAgICAgICAgdG9wX2Rpc3RkaXI9IiQkbmV3X3RvcF9kaXN0ZGlyIiBcCisJICAgICAgICBkaXN0ZGlyPSIkJG5ld19kaXN0ZGlyIiBcCisJCWFtX19yZW1vdmVfZGlzdGRpcj06IFwKKwkJYW1fX3NraXBfbGVuZ3RoX2NoZWNrPTogXAorCQlhbV9fc2tpcF9tb2RlX2ZpeD06IFwKKwkgICAgICAgIGRpc3RkaXIpIFwKKwkgICAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorY2hlY2stYW06IGFsbC1hbQorY2hlY2s6IGNoZWNrLXJlY3Vyc2l2ZQorYWxsLWFtOiBNYWtlZmlsZSAkKExUTElCUkFSSUVTKSAkKFBST0dSQU1TKSAkKEhFQURFUlMpCitpbnN0YWxsZGlyczogaW5zdGFsbGRpcnMtcmVjdXJzaXZlCitpbnN0YWxsZGlycy1hbToKKwlmb3IgZGlyIGluICIkKERFU1RESVIpJChsaWJkaXIpIiAiJChERVNURElSKSQoYXZhaGlfY29tcGF0X2hvd2xkaXIpIiAiJChERVNURElSKSQoYXZhaGlfY29tcGF0X2hvd2xfY29yYnlkaXIpIiAiJChERVNURElSKSQoYXZhaGlfY29tcGF0X2hvd2xfZGlzY292ZXJ5ZGlyKSIgIiQoREVTVERJUikkKGF2YWhpX2NvbXBhdF9ob3dsX3JlbmRlenZvdXNkaXIpIiAiJChERVNURElSKSQoYXZhaGlfY29tcGF0X2hvd2xfc2FsdGRpcikiOyBkbyBcCisJICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCisJZG9uZQoraW5zdGFsbDogaW5zdGFsbC1yZWN1cnNpdmUKK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtcmVjdXJzaXZlCit1bmluc3RhbGw6IHVuaW5zdGFsbC1yZWN1cnNpdmUKKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stcmVjdXJzaXZlCitpbnN0YWxsLXN0cmlwOgorCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgICAgICBpbnN0YWxsOyBcCisJZWxzZSBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKKwlmaQorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLXJlY3Vyc2l2ZQorCitjbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJMVExJQlJBUklFUyBjbGVhbi1saWJ0b29sIFwKKwljbGVhbi1ub2luc3RQUk9HUkFNUyBtb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1yZWN1cnNpdmUKKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKKwlkaXN0Y2xlYW4tdGFncworCitkdmk6IGR2aS1yZWN1cnNpdmUKKworZHZpLWFtOgorCitodG1sOiBodG1sLXJlY3Vyc2l2ZQorCitodG1sLWFtOgorCitpbmZvOiBpbmZvLXJlY3Vyc2l2ZQorCitpbmZvLWFtOgorCitpbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtYXZhaGlfY29tcGF0X2hvd2xIRUFERVJTIFwKKwlpbnN0YWxsLWF2YWhpX2NvbXBhdF9ob3dsX2NvcmJ5SEVBREVSUyBcCisJaW5zdGFsbC1hdmFoaV9jb21wYXRfaG93bF9kaXNjb3ZlcnlIRUFERVJTIFwKKwlpbnN0YWxsLWF2YWhpX2NvbXBhdF9ob3dsX3JlbmRlenZvdXNIRUFERVJTIFwKKwlpbnN0YWxsLWF2YWhpX2NvbXBhdF9ob3dsX3NhbHRIRUFERVJTCisKK2luc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1yZWN1cnNpdmUKKworaW5zdGFsbC1kdmktYW06CisKK2luc3RhbGwtZXhlYy1hbTogaW5zdGFsbC1saWJMVExJQlJBUklFUworCitpbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1yZWN1cnNpdmUKKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1yZWN1cnNpdmUKKworaW5zdGFsbC1pbmZvLWFtOgorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLXJlY3Vyc2l2ZQorCitpbnN0YWxsLXBkZi1hbToKKworaW5zdGFsbC1wczogaW5zdGFsbC1wcy1yZWN1cnNpdmUKKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLXJlY3Vyc2l2ZQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKKwltb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLXJlY3Vyc2l2ZQorCitwZGYtYW06CisKK3BzOiBwcy1yZWN1cnNpdmUKKworcHMtYW06CisKK3VuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWF2YWhpX2NvbXBhdF9ob3dsSEVBREVSUyBcCisJdW5pbnN0YWxsLWF2YWhpX2NvbXBhdF9ob3dsX2NvcmJ5SEVBREVSUyBcCisJdW5pbnN0YWxsLWF2YWhpX2NvbXBhdF9ob3dsX2Rpc2NvdmVyeUhFQURFUlMgXAorCXVuaW5zdGFsbC1hdmFoaV9jb21wYXRfaG93bF9yZW5kZXp2b3VzSEVBREVSUyBcCisJdW5pbnN0YWxsLWF2YWhpX2NvbXBhdF9ob3dsX3NhbHRIRUFERVJTIFwKKwl1bmluc3RhbGwtbGliTFRMSUJSQVJJRVMKKworLk1BS0U6ICQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpICQoUkVDVVJTSVZFX1RBUkdFVFMpIGN0YWdzLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwIHRhZ3MtcmVjdXJzaXZlCisKKy5QSE9OWTogJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUykgJChSRUNVUlNJVkVfVEFSR0VUUykgQ1RBR1MgR1RBR1MgXAorCWFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCisJY2xlYW4tbGliTFRMSUJSQVJJRVMgY2xlYW4tbGlidG9vbCBjbGVhbi1ub2luc3RQUk9HUkFNUyBjdGFncyBcCisJY3RhZ3MtcmVjdXJzaXZlIGRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAorCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBcCisJaW5zdGFsbC1hdmFoaV9jb21wYXRfaG93bEhFQURFUlMgXAorCWluc3RhbGwtYXZhaGlfY29tcGF0X2hvd2xfY29yYnlIRUFERVJTIFwKKwlpbnN0YWxsLWF2YWhpX2NvbXBhdF9ob3dsX2Rpc2NvdmVyeUhFQURFUlMgXAorCWluc3RhbGwtYXZhaGlfY29tcGF0X2hvd2xfcmVuZGV6dm91c0hFQURFUlMgXAorCWluc3RhbGwtYXZhaGlfY29tcGF0X2hvd2xfc2FsdEhFQURFUlMgaW5zdGFsbC1kYXRhIFwKKwlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIFwKKwlpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gXAorCWluc3RhbGwtaW5mby1hbSBpbnN0YWxsLWxpYkxUTElCUkFSSUVTIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIFwKKwlpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBcCisJaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBpbnN0YWxsZGlycy1hbSBcCisJbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAorCW1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIFwKKwlwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdGFncy1yZWN1cnNpdmUgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSBcCisJdW5pbnN0YWxsLWF2YWhpX2NvbXBhdF9ob3dsSEVBREVSUyBcCisJdW5pbnN0YWxsLWF2YWhpX2NvbXBhdF9ob3dsX2NvcmJ5SEVBREVSUyBcCisJdW5pbnN0YWxsLWF2YWhpX2NvbXBhdF9ob3dsX2Rpc2NvdmVyeUhFQURFUlMgXAorCXVuaW5zdGFsbC1hdmFoaV9jb21wYXRfaG93bF9yZW5kZXp2b3VzSEVBREVSUyBcCisJdW5pbnN0YWxsLWF2YWhpX2NvbXBhdF9ob3dsX3NhbHRIRUFERVJTIFwKKwl1bmluc3RhbGwtbGliTFRMSUJSQVJJRVMKKworCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktY29tcGF0LWhvd2wvYWRkcmVzcy10ZXN0LmMgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tcGF0LWhvd2wvYWRkcmVzcy10ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDllMTUyZgotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtaG93bC9hZGRyZXNzLXRlc3QuYwpAQCAtMCwwICsxLDUxIEBACisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vZ2NjbWFjcm8uaD4KKworI2luY2x1ZGUgImhvd2wuaCIKKworI2RlZmluZSBBU1NFUlRfU1dfT0tBWSh0KSB7IHN3X3Jlc3VsdCByOyByID0gKHQpOyBhc3NlcnQociA9PSBTV19PS0FZKTsgfQorI2RlZmluZSBBU1NFUlRfTk9UX05VTEwodCkgeyBjb25zdCB2b2lkKiByOyByID0gKHQpOyBhc3NlcnQocik7IH0KKworaW50IG1haW4oQVZBSElfR0NDX1VOVVNFRCBpbnQgYXJnYywgQVZBSElfR0NDX1VOVVNFRCBjaGFyICphcmd2W10pIHsKKyAgICBzd19pcHY0X2FkZHJlc3MgYTsKKyAgICBjaGFyIHRbMjU2XTsKKyAgICB1aW50OF90IGExLCBhMiwgYTMsIGE0OworCisgICAgQVNTRVJUX1NXX09LQVkoc3dfaXB2NF9hZGRyZXNzX2luaXRfZnJvbV9uYW1lKCZhLCAiaGVpc2UuZGUiKSk7CisgICAgQVNTRVJUX05PVF9OVUxMKHN3X2lwdjRfYWRkcmVzc19uYW1lKGEsIHQsIHNpemVvZih0KSkpOworICAgIHByaW50ZigiJXNcbiIsIHQpOworCisgICAgQVNTRVJUX1NXX09LQVkoc3dfaXB2NF9hZGRyZXNzX2luaXRfZnJvbV90aGlzX2hvc3QoJmEpKTsKKyAgICBBU1NFUlRfTk9UX05VTEwoc3dfaXB2NF9hZGRyZXNzX25hbWUoYSwgdCwgc2l6ZW9mKHQpKSk7CisgICAgcHJpbnRmKCIlc1xuIiwgdCk7CisKKyAgICBBU1NFUlRfU1dfT0tBWShzd19pcHY0X2FkZHJlc3NfZGVjb21wb3NlKGEsICZhMSwgJmEyLCAmYTMsICZhNCkpOworICAgIHByaW50ZigiJWkuJWkuJWkuJWlcbiIsIGExLCBhMiwgYTMsIGE0KTsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvbXBhdC1ob3dsL2FkZHJlc3MuYyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtaG93bC9hZGRyZXNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFiNmU2YgotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtaG93bC9hZGRyZXNzLmMKQEAgLTAsMCArMSwyMTIgQEAKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2djY21hY3JvLmg+CisKKyNpbmNsdWRlICJob3dsLmgiCisjaW5jbHVkZSAid2Fybi5oIgorCitzd19pcHY0X2FkZHJlc3Mgc3dfaXB2NF9hZGRyZXNzX2FueSh2b2lkKSB7CisgICAgc3dfaXB2NF9hZGRyZXNzIGE7CisKKyAgICBBVkFISV9XQVJOX0xJTktBR0U7CisKKyAgICBhLm1fYWRkciA9IGh0b25sKElOQUREUl9BTlkpOworICAgIHJldHVybiBhOworfQorCitzd19pcHY0X2FkZHJlc3Mgc3dfaXB2NF9hZGRyZXNzX2xvb3BiYWNrKHZvaWQpIHsKKyAgICBzd19pcHY0X2FkZHJlc3MgYTsKKworICAgIEFWQUhJX1dBUk5fTElOS0FHRTsKKworICAgIGEubV9hZGRyID0gaHRvbmwoSU5BRERSX0xPT1BCQUNLKTsKKyAgICByZXR1cm4gYTsKK30KKworc3dfcmVzdWx0IHN3X2lwdjRfYWRkcmVzc19pbml0KHN3X2lwdjRfYWRkcmVzcyAqIHNlbGYpIHsKKyAgICBhc3NlcnQoc2VsZik7CisKKyAgICBBVkFISV9XQVJOX0xJTktBR0U7CisKKyAgICBzZWxmLT5tX2FkZHIgPSBodG9ubChJTkFERFJfQU5ZKTsKKyAgICByZXR1cm4gU1dfT0tBWTsKK30KKworc3dfcmVzdWx0IHN3X2lwdjRfYWRkcmVzc19pbml0X2Zyb21fc2FkZHIoCisgICAgc3dfaXB2NF9hZGRyZXNzICpzZWxmLAorICAgIHN3X3NhZGRyIGFkZHIpIHsKKworICAgIGFzc2VydChzZWxmKTsKKworICAgIEFWQUhJX1dBUk5fTElOS0FHRTsKKworICAgIHNlbGYtPm1fYWRkciA9IGFkZHI7CisgICAgcmV0dXJuIFNXX09LQVk7Cit9CisKK3N3X3Jlc3VsdCBzd19pcHY0X2FkZHJlc3NfaW5pdF9mcm9tX25hbWUoCisgICAgc3dfaXB2NF9hZGRyZXNzICpzZWxmLAorICAgIHN3X2NvbnN0X3N0cmluZyBuYW1lKSB7CisKKyAgICBzdHJ1Y3QgaG9zdGVudCAqaGU7CisKKyAgICBhc3NlcnQoc2VsZik7CisgICAgYXNzZXJ0KG5hbWUpOworCisgICAgQVZBSElfV0FSTl9MSU5LQUdFOworCisgICAgaWYgKCEoaGUgPSBnZXRob3N0YnluYW1lKG5hbWUpKSkKKyAgICAgICAgcmV0dXJuIFNXX0VfVU5LTk9XTjsKKworICAgIHNlbGYtPm1fYWRkciA9ICoodWludDMyX3QqKSBoZS0+aF9hZGRyOworICAgIHJldHVybiBTV19PS0FZOworfQorCitzd19yZXN1bHQgc3dfaXB2NF9hZGRyZXNzX2luaXRfZnJvbV9hZGRyZXNzKAorICAgIHN3X2lwdjRfYWRkcmVzcyAqc2VsZiwKKyAgICBzd19pcHY0X2FkZHJlc3MgYWRkcikgeworCisgICAgYXNzZXJ0KHNlbGYpOworCisgICAgQVZBSElfV0FSTl9MSU5LQUdFOworCisgICAgc2VsZi0+bV9hZGRyID0gYWRkci5tX2FkZHI7CisgICAgcmV0dXJuIFNXX09LQVk7Cit9CisKK3N3X3Jlc3VsdCBzd19pcHY0X2FkZHJlc3NfaW5pdF9mcm9tX3RoaXNfaG9zdChzd19pcHY0X2FkZHJlc3MgKnNlbGYpIHsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2E7CisgICAgaW50IGZkOworICAgIHNvY2tsZW5fdCBsID0gc2l6ZW9mKHNhKTsKKworICAgIGFzc2VydChzZWxmKTsKKworICAgIEFWQUhJX1dBUk5fTElOS0FHRTsKKworICAgIC8qIFRoaXMgaXMgc28gZnVja2VkIHVwIC4uLiAqLworCisgICAgbWVtc2V0KCZzYSwgMCwgc2l6ZW9mKHNhKSk7CisgICAgc2Euc2luX2ZhbWlseSA9IEFGX0lORVQ7CisgICAgc2Euc2luX2FkZHIuc19hZGRyID0gaW5ldF9hZGRyKCIxOTIuMTY4LjEuMSIpOyAvKiBPdWNoICovCisgICAgc2Euc2luX3BvcnQgPSBodG9ucyg1NTU1KTsKKworICAgIGlmICgoZmQgPSBzb2NrZXQoUEZfSU5FVCwgU09DS19ER1JBTSwgMCkpIDwgMCB8fAorICAgICAgICBjb25uZWN0KGZkLCAoc3RydWN0IHNvY2thZGRyKikgJnNhLCBzaXplb2Yoc2EpKSA8IDAgfHwKKyAgICAgICAgZ2V0c29ja25hbWUoZmQsIChzdHJ1Y3Qgc29ja2FkZHIqKSAmc2EsICZsKSA8IDApIHsKKyAgICAgICAgaWYgKGZkID49IDApCisgICAgICAgICAgICBjbG9zZShmZCk7CisKKyAgICAgICAgcGVycm9yKCJmdWNrIik7CisgICAgICAgIHJldHVybiBTV19FX1VOS05PV047CisgICAgfQorCisgICAgYXNzZXJ0KGwgPT0gc2l6ZW9mKHNhKSk7CisgICAgY2xvc2UoZmQpOworCisgICAgc2VsZi0+bV9hZGRyID0gc2Euc2luX2FkZHIuc19hZGRyOworCisgICAgcmV0dXJuIFNXX09LQVk7Cit9CisKK3N3X3Jlc3VsdCBzd19pcHY0X2FkZHJlc3NfZmluYShBVkFISV9HQ0NfVU5VU0VEIHN3X2lwdjRfYWRkcmVzcyBzZWxmKSB7CisKKyAgICBBVkFISV9XQVJOX0xJTktBR0U7CisKKyAgICAvKiBUaGlzIGlzIHJpZGljdWxvdXMgLi4uICovCisKKyAgICByZXR1cm4gU1dfT0tBWTsKK30KKworc3dfYm9vbCBzd19pcHY0X2FkZHJlc3NfaXNfYW55KHN3X2lwdjRfYWRkcmVzcyBzZWxmKSB7CisgICAgQVZBSElfV0FSTl9MSU5LQUdFOworICAgIHJldHVybiBzZWxmLm1fYWRkciA9PSBodG9ubChJTkFERFJfQU5ZKTsKK30KKworc3dfc2FkZHIgc3dfaXB2NF9hZGRyZXNzX3NhZGRyKHN3X2lwdjRfYWRkcmVzcyBzZWxmKSB7CisgICAgQVZBSElfV0FSTl9MSU5LQUdFOworICAgIHJldHVybiBzZWxmLm1fYWRkcjsKK30KKworc3dfc3RyaW5nIHN3X2lwdjRfYWRkcmVzc19uYW1lKAorICAgIHN3X2lwdjRfYWRkcmVzcyBzZWxmLAorICAgIHN3X3N0cmluZyBuYW1lLAorICAgIHN3X3VpbnQzMiBsZW4pIHsKKworICAgIGFzc2VydChuYW1lKTsKKyAgICBhc3NlcnQobGVuID4gMCk7CisKKyAgICBBVkFISV9XQVJOX0xJTktBR0U7CisKKyAgICBpZiAobGVuIDwgSU5FVF9BRERSU1RSTEVOKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmICghKGluZXRfbnRvcChBRl9JTkVULCAmc2VsZi5tX2FkZHIsIG5hbWUsIGxlbikpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJldHVybiBuYW1lOworfQorCitzd19yZXN1bHQgc3dfaXB2NF9hZGRyZXNzX2RlY29tcG9zZSgKKyAgICBzd19pcHY0X2FkZHJlc3Mgc2VsZiwKKyAgICBzd191aW50OCAqIGExLAorICAgIHN3X3VpbnQ4ICogYTIsCisgICAgc3dfdWludDggKiBhMywKKyAgICBzd191aW50OCAqIGE0KSB7CisKKyAgICB1aW50MzJfdCBhOworCisgICAgQVZBSElfV0FSTl9MSU5LQUdFOworCisgICAgYSA9IG50b2hsKHNlbGYubV9hZGRyKTsKKworICAgIGFzc2VydChhMSk7CisgICAgYXNzZXJ0KGEyKTsKKyAgICBhc3NlcnQoYTMpOworICAgIGFzc2VydChhNCk7CisKKyAgICAqYTEgPSAodWludDhfdCkgKGEgPj4gMjQpOworICAgICphMiA9ICh1aW50OF90KSAoYSA+PiAxNik7CisgICAgKmEzID0gKHVpbnQ4X3QpIChhID4+IDgpOworICAgICphNCA9ICh1aW50OF90KSAoYSk7CisKKyAgICByZXR1cm4gU1dfT0tBWTsKK30KKworc3dfYm9vbCBzd19pcHY0X2FkZHJlc3NfZXF1YWxzKAorICAgIHN3X2lwdjRfYWRkcmVzcyBzZWxmLAorICAgIHN3X2lwdjRfYWRkcmVzcyBhZGRyKSB7CisKKyAgICBBVkFISV9XQVJOX0xJTktBR0U7CisKKyAgICByZXR1cm4gc2VsZi5tX2FkZHIgPT0gYWRkci5tX2FkZHI7Cit9CisKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtaG93bC9icm93c2UtZG9tYWluLXRlc3QuYyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtaG93bC9icm93c2UtZG9tYWluLXRlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWE0YTAxCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbXBhdC1ob3dsL2Jyb3dzZS1kb21haW4tdGVzdC5jCkBAIC0wLDAgKzEsNzQgQEAKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9nY2NtYWNyby5oPgorI2luY2x1ZGUgImhvd2wuaCIKKworI2RlZmluZSBBU1NFUlRfU1dfT0tBWSh0KSB7IHN3X3Jlc3VsdCBfcjsgX3IgPSAodCk7IGFzc2VydChfciA9PSBTV19PS0FZKTsgfQorI2RlZmluZSBBU1NFUlRfTk9UX05VTEwodCkgeyBjb25zdCB2b2lkKiBfcjsgciA9ICh0KTsgYXNzZXJ0KF9yKTsgfQorCitzdGF0aWMgc3dfcmVzdWx0IHJlcGx5KAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfZGlzY292ZXJ5IGRpc2NvdmVyeSwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2Rpc2NvdmVyeV9vaWQgb2lkLAorICAgIHN3X2Rpc2NvdmVyeV9icm93c2Vfc3RhdHVzIHN0YXR1cywKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X3VpbnQzMiBpbnRlcmZhY2VfaW5kZXgsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19jb25zdF9zdHJpbmcgbmFtZSwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2NvbnN0X3N0cmluZyB0eXBlLAorICAgIHN3X2NvbnN0X3N0cmluZyBkb21haW4sCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19vcGFxdWUgZXh0cmEpIHsKKworICAgIHN3aXRjaCAoc3RhdHVzKSB7CisgICAgICAgIGNhc2UgU1dfRElTQ09WRVJZX0JST1dTRV9BRERfRE9NQUlOOgorICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJuZXcgZG9tYWluICVzXG4iLCBkb21haW4pOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTV19ESVNDT1ZFUllfQlJPV1NFX1JFTU9WRV9ET01BSU46CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInJlbW92ZWQgZG9tYWluICVzXG4iLCBkb21haW4pOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTV19ESVNDT1ZFUllfQlJPV1NFX0lOVkFMSUQ6CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInNvbWUga2luZCBvZiBmYWlsdXJlIGhhcHBlbmVkOiAlc1xuIiwgZG9tYWluKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBhYm9ydCgpOworICAgIH0KKworICAgIHJldHVybiBTV19PS0FZOworfQorCitpbnQgbWFpbihBVkFISV9HQ0NfVU5VU0VEIGludCBhcmdjLCBBVkFISV9HQ0NfVU5VU0VEIGNoYXIgKmFyZ3ZbXSkgeworICAgIHN3X2Rpc2NvdmVyeSBkaXNjb3Zlcnk7CisgICAgc3dfZGlzY292ZXJ5X29pZCBvaWQ7CisKKyAgICBBU1NFUlRfU1dfT0tBWShzd19kaXNjb3ZlcnlfaW5pdCgmZGlzY292ZXJ5KSk7CisKKyAgICBBU1NFUlRfU1dfT0tBWShzd19kaXNjb3ZlcnlfYnJvd3NlX2RvbWFpbnMoZGlzY292ZXJ5LCAwLCByZXBseSwgTlVMTCwgJm9pZCkpOworCisgICAgQVNTRVJUX1NXX09LQVkoc3dfZGlzY292ZXJ5X3J1bihkaXNjb3ZlcnkpKTsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvbXBhdC1ob3dsL2NvbXBhdC5jIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbXBhdC1ob3dsL2NvbXBhdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliOGIxOGMKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tcGF0LWhvd2wvY29tcGF0LmMKQEAgLTAsMCArMSwxMTgyIEBACisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGFzc2VydC5oPgorCisjaW5jbHVkZSA8cHRocmVhZC5oPgorCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL3N0cmxzdC5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9tYWxsb2MuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vZG9tYWluLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL3NpbXBsZS13YXRjaC5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9lcnJvci5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9sbGlzdC5oPgorCisjaW5jbHVkZSA8YXZhaGktY2xpZW50L2NsaWVudC5oPgorI2luY2x1ZGUgPGF2YWhpLWNsaWVudC9wdWJsaXNoLmg+CisjaW5jbHVkZSA8YXZhaGktY2xpZW50L2xvb2t1cC5oPgorCisjaW5jbHVkZSAiaG93bC5oIgorI2luY2x1ZGUgIndhcm4uaCIKKworI2RlZmluZSBPSURfTUFYIDUwCisKK2VudW0geworICAgIENPTU1BTkRfUE9MTCA9ICdwJywKKyAgICBDT01NQU5EX1FVSVQgPSAncScsCisgICAgQ09NTUFORF9QT0xMX0RPTkUgPSAnUCcsCisgICAgQ09NTUFORF9QT0xMX0ZBSUxFRCA9ICdGJworfTsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBPSURfVU5VU0VEID0gMCwKKyAgICBPSURfU0VSVklDRV9CUk9XU0VSLAorICAgIE9JRF9TRVJWSUNFX1JFU09MVkVSLAorICAgIE9JRF9ET01BSU5fQlJPV1NFUiwKKyAgICBPSURfRU5UUllfR1JPVVAKK30gb2lkX3R5cGU7CisKK3R5cGVkZWYgc3RydWN0IHNlcnZpY2VfZGF0YSBzZXJ2aWNlX2RhdGE7CisKK3R5cGVkZWYgc3RydWN0IG9pZF9kYXRhIHsKKyAgICBvaWRfdHlwZSB0eXBlOworICAgIHN3X29wYXF1ZSBleHRyYTsKKyAgICBzd19kaXNjb3ZlcnkgZGlzY292ZXJ5OworICAgIHZvaWQgKm9iamVjdDsKKyAgICBzd19yZXN1bHQgKCpyZXBseSkodm9pZCk7CisgICAgc2VydmljZV9kYXRhICpzZXJ2aWNlX2RhdGE7Cit9IG9pZF9kYXRhOworCisKK3N0cnVjdCBzZXJ2aWNlX2RhdGEgeworICAgIGNoYXIgKm5hbWUsICpyZWd0eXBlLCAqZG9tYWluLCAqaG9zdDsKKyAgICB1aW50MTZfdCBwb3J0OworICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2U7CisgICAgQXZhaGlTdHJpbmdMaXN0ICp0eHQ7CisgICAgQVZBSElfTExJU1RfRklFTERTKHNlcnZpY2VfZGF0YSwgc2VydmljZXMpOworfTsKKworc3RydWN0IF9zd19kaXNjb3ZlcnkgeworICAgIGludCBuX3JlZjsKKyAgICBBdmFoaVNpbXBsZVBvbGwgKnNpbXBsZV9wb2xsOworICAgIEF2YWhpQ2xpZW50ICpjbGllbnQ7CisKKyAgICBvaWRfZGF0YSBvaWRfdGFibGVbT0lEX01BWF07CisgICAgc3dfZGlzY292ZXJ5X29pZCBvaWRfaW5kZXg7CisKKyAgICBpbnQgdGhyZWFkX2ZkLCBtYWluX2ZkOworCisgICAgcHRocmVhZF90IHRocmVhZDsKKyAgICBpbnQgdGhyZWFkX3J1bm5pbmc7CisKKyAgICBwdGhyZWFkX211dGV4X3QgbXV0ZXgsIHNhbHRfbXV0ZXg7CisKKyAgICBBVkFISV9MTElTVF9IRUFEKHNlcnZpY2VfZGF0YSwgc2VydmljZXMpOworfTsKKworI2RlZmluZSBBU1NFUlRfU1VDQ0VTUyhyKSB7IGludCBfX3JldCA9IChyKTsgYXNzZXJ0KF9fcmV0ID09IDApOyB9CisKKyNkZWZpbmUgT0lEX0dFVF9JTkRFWChkYXRhKSAoKHN3X2Rpc2NvdmVyeV9vaWQpICgoKGRhdGEpIC0gKChkYXRhKS0+ZGlzY292ZXJ5LT5vaWRfdGFibGUpKSkpCisKK3N0YXRpYyBzd19kaXNjb3ZlcnkgZGlzY292ZXJ5X3JlZihzd19kaXNjb3Zlcnkgc2VsZik7CitzdGF0aWMgdm9pZCBkaXNjb3ZlcnlfdW5yZWYoc3dfZGlzY292ZXJ5IHNlbGYpOworCitzdGF0aWMgY29uc3QgY2hhciAqYWRkX3RyYWlsaW5nX2RvdChjb25zdCBjaGFyICpzLCBjaGFyICpidWYsIHNpemVfdCBidWZfbGVuKSB7CisgICAgaWYgKCFzKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmICgqcyA9PSAwKQorICAgICAgICByZXR1cm4gczsKKworICAgIGlmIChzW3N0cmxlbihzKS0xXSA9PSAnLicpCisgICAgICAgIHJldHVybiBzOworCisgICAgc25wcmludGYoYnVmLCBidWZfbGVuLCAiJXMuIiwgcyk7CisgICAgcmV0dXJuIGJ1ZjsKK30KKworc3RhdGljIHN3X3Jlc3VsdCBtYXBfZXJyb3IoaW50IGVycm9yKSB7CisgICAgc3dpdGNoIChlcnJvcikgeworICAgICAgICBjYXNlIEFWQUhJX09LOgorICAgICAgICAgICAgcmV0dXJuIFNXX09LQVk7CisKKyAgICAgICAgY2FzZSBBVkFISV9FUlJfTk9fTUVNT1JZOgorICAgICAgICAgICAgcmV0dXJuIFNXX0VfTUVNOworICAgIH0KKworICAgIHJldHVybiBTV19FX1VOS05PV047Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9jb21tYW5kKGludCBmZCkgeworICAgIHNzaXplX3QgcjsKKyAgICBjaGFyIGNvbW1hbmQ7CisKKyAgICBhc3NlcnQoZmQgPj0gMCk7CisKKyAgICBpZiAoKHIgPSByZWFkKGZkLCAmY29tbWFuZCwgMSkpICE9IDEpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsIF9fRklMRV9fIjogcmVhZCgpIGZhaWxlZDogJXNcbiIsIHIgPCAwID8gc3RyZXJyb3IoZXJybm8pIDogIkVPRiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcmV0dXJuIGNvbW1hbmQ7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfY29tbWFuZChpbnQgZmQsIGNoYXIgcmVwbHkpIHsKKyAgICBhc3NlcnQoZmQgPj0gMCk7CisKKyAgICBpZiAod3JpdGUoZmQsICZyZXBseSwgMSkgIT0gMSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgX19GSUxFX18iOiB3cml0ZSgpIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwb2xsX2Z1bmMoc3RydWN0IHBvbGxmZCAqdWZkcywgdW5zaWduZWQgaW50IG5mZHMsIGludCB0aW1lb3V0LCB2b2lkICp1c2VyZGF0YSkgeworICAgIHN3X2Rpc2NvdmVyeSBzZWxmID0gdXNlcmRhdGE7CisgICAgaW50IHJldDsKKworICAgIGFzc2VydChzZWxmKTsKKworICAgIEFTU0VSVF9TVUNDRVNTKHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZzZWxmLT5tdXRleCkpOworICAgIHJldCA9IHBvbGwodWZkcywgbmZkcywgdGltZW91dCk7CisgICAgQVNTRVJUX1NVQ0NFU1MocHRocmVhZF9tdXRleF9sb2NrKCZzZWxmLT5tdXRleCkpOworCisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgKiB0aHJlYWRfZnVuYyh2b2lkICpkYXRhKSB7CisgICAgc3dfZGlzY292ZXJ5IHNlbGYgPSBkYXRhOworICAgIHNpZ3NldF90IG1hc2s7CisKKyAgICBzaWdmaWxsc2V0KCZtYXNrKTsKKyAgICBwdGhyZWFkX3NpZ21hc2soU0lHX0JMT0NLLCAmbWFzaywgTlVMTCk7CisKKyAgICBzZWxmLT50aHJlYWQgPSBwdGhyZWFkX3NlbGYoKTsKKyAgICBzZWxmLT50aHJlYWRfcnVubmluZyA9IDE7CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGNoYXIgY29tbWFuZDsKKworICAgICAgICBpZiAoKGNvbW1hbmQgPSByZWFkX2NvbW1hbmQoc2VsZi0+dGhyZWFkX2ZkKSkgPCAwKQorICAgICAgICAgICAgYnJlYWs7CisKKy8qICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb21tYW5kOiAlY1xuIiwgY29tbWFuZCk7ICovCisKKyAgICAgICAgc3dpdGNoIChjb21tYW5kKSB7CisKKyAgICAgICAgICAgIGNhc2UgQ09NTUFORF9QT0xMOiB7CisgICAgICAgICAgICAgICAgaW50IHJldDsKKworICAgICAgICAgICAgICAgIEFTU0VSVF9TVUNDRVNTKHB0aHJlYWRfbXV0ZXhfbG9jaygmc2VsZi0+bXV0ZXgpKTsKKworICAgICAgICAgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgICAgICAgICAgZXJybm8gPSAwOworCisgICAgICAgICAgICAgICAgICAgIGlmICgocmV0ID0gYXZhaGlfc2ltcGxlX3BvbGxfcnVuKHNlbGYtPnNpbXBsZV9wb2xsKSkgPCAwKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJubyA9PSBFSU5UUikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIF9fRklMRV9fIjogYXZhaGlfc2ltcGxlX3BvbGxfcnVuKCkgZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIEFTU0VSVF9TVUNDRVNTKHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZzZWxmLT5tdXRleCkpOworCisgICAgICAgICAgICAgICAgaWYgKHdyaXRlX2NvbW1hbmQoc2VsZi0+dGhyZWFkX2ZkLCByZXQgPCAwID8gQ09NTUFORF9QT0xMX0ZBSUxFRCA6IENPTU1BTkRfUE9MTF9ET05FKSA8IDApCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNhc2UgQ09NTUFORF9RVUlUOgorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBvaWRfYWxsb2Moc3dfZGlzY292ZXJ5IHNlbGYsIG9pZF90eXBlIHR5cGUpIHsKKyAgICBzd19kaXNjb3Zlcnlfb2lkIGk7CisgICAgYXNzZXJ0KHNlbGYpOworCisgICAgZm9yIChpID0gMDsgaSA8IE9JRF9NQVg7IGkrKykgeworCisgICAgICAgIHdoaWxlIChzZWxmLT5vaWRfaW5kZXggPj0gT0lEX01BWCkKKyAgICAgICAgICAgIHNlbGYtPm9pZF9pbmRleCAtPSBPSURfTUFYOworCisgICAgICAgIGlmIChzZWxmLT5vaWRfdGFibGVbc2VsZi0+b2lkX2luZGV4XS50eXBlID09IE9JRF9VTlVTRUQpIHsKKyAgICAgICAgICAgIHNlbGYtPm9pZF90YWJsZVtzZWxmLT5vaWRfaW5kZXhdLnR5cGUgPSB0eXBlOworICAgICAgICAgICAgc2VsZi0+b2lkX3RhYmxlW3NlbGYtPm9pZF9pbmRleF0uZGlzY292ZXJ5ID0gc2VsZjsKKworICAgICAgICAgICAgYXNzZXJ0KE9JRF9HRVRfSU5ERVgoJnNlbGYtPm9pZF90YWJsZVtzZWxmLT5vaWRfaW5kZXhdKSA9PSBzZWxmLT5vaWRfaW5kZXgpOworCisgICAgICAgICAgICByZXR1cm4gc2VsZi0+b2lkX2luZGV4ICsrOworICAgICAgICB9CisKKyAgICAgICAgc2VsZi0+b2lkX2luZGV4ICsrOworICAgIH0KKworICAgIC8qIE5vIGZyZWUgZW50cnkgZm91bmQgKi8KKworICAgIHJldHVybiAoc3dfZGlzY292ZXJ5X29pZCkgLTE7Cit9CisKK3N0YXRpYyB2b2lkIG9pZF9yZWxlYXNlKHN3X2Rpc2NvdmVyeSBzZWxmLCBzd19kaXNjb3Zlcnlfb2lkIG9pZCkgeworICAgIGFzc2VydChzZWxmKTsKKyAgICBhc3NlcnQob2lkIDwgT0lEX01BWCk7CisKKyAgICBhc3NlcnQoc2VsZi0+b2lkX3RhYmxlW29pZF0udHlwZSAhPSBPSURfVU5VU0VEKTsKKworICAgIHNlbGYtPm9pZF90YWJsZVtvaWRdLnR5cGUgPSBPSURfVU5VU0VEOworICAgIHNlbGYtPm9pZF90YWJsZVtvaWRdLmRpc2NvdmVyeSA9IE5VTEw7CisgICAgc2VsZi0+b2lkX3RhYmxlW29pZF0ucmVwbHkgPSBOVUxMOworICAgIHNlbGYtPm9pZF90YWJsZVtvaWRdLm9iamVjdCA9IE5VTEw7CisgICAgc2VsZi0+b2lkX3RhYmxlW29pZF0uZXh0cmEgPSBOVUxMOworICAgIHNlbGYtPm9pZF90YWJsZVtvaWRdLnNlcnZpY2VfZGF0YSA9IE5VTEw7Cit9CisKK3N0YXRpYyBvaWRfZGF0YSogb2lkX2dldChzd19kaXNjb3Zlcnkgc2VsZiwgc3dfZGlzY292ZXJ5X29pZCBvaWQpIHsKKyAgICBhc3NlcnQoc2VsZik7CisKKyAgICBpZiAob2lkID49IE9JRF9NQVgpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKHNlbGYtPm9pZF90YWJsZVtvaWRdLnR5cGUgPT0gT0lEX1VOVVNFRCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gJnNlbGYtPm9pZF90YWJsZVtvaWRdOworfQorCitzdGF0aWMgc2VydmljZV9kYXRhKiBzZXJ2aWNlX2RhdGFfbmV3KHN3X2Rpc2NvdmVyeSBzZWxmKSB7CisgICAgc2VydmljZV9kYXRhICpzZGF0YTsKKworICAgIGFzc2VydChzZWxmKTsKKworICAgIGlmICghKHNkYXRhID0gYXZhaGlfbmV3MChzZXJ2aWNlX2RhdGEsIDEpKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBBVkFISV9MTElTVF9QUkVQRU5EKHNlcnZpY2VfZGF0YSwgc2VydmljZXMsIHNlbGYtPnNlcnZpY2VzLCBzZGF0YSk7CisKKyAgICByZXR1cm4gc2RhdGE7CisKK30KKworc3RhdGljIHZvaWQgc2VydmljZV9kYXRhX2ZyZWUoc3dfZGlzY292ZXJ5IHNlbGYsIHNlcnZpY2VfZGF0YSogc2RhdGEpIHsKKyAgICBhc3NlcnQoc2VsZik7CisgICAgYXNzZXJ0KHNkYXRhKTsKKworICAgIEFWQUhJX0xMSVNUX1JFTU9WRShzZXJ2aWNlX2RhdGEsIHNlcnZpY2VzLCBzZWxmLT5zZXJ2aWNlcywgc2RhdGEpOworCisgICAgYXZhaGlfZnJlZShzZGF0YS0+bmFtZSk7CisgICAgYXZhaGlfZnJlZShzZGF0YS0+cmVndHlwZSk7CisgICAgYXZhaGlfZnJlZShzZGF0YS0+ZG9tYWluKTsKKyAgICBhdmFoaV9mcmVlKHNkYXRhLT5ob3N0KTsKKyAgICBhdmFoaV9zdHJpbmdfbGlzdF9mcmVlKHNkYXRhLT50eHQpOworICAgIGF2YWhpX2ZyZWUoc2RhdGEpOworfQorCitzdGF0aWMgdm9pZCByZWdfY2xpZW50X2NhbGxiYWNrKG9pZF9kYXRhICpkYXRhLCBBdmFoaUNsaWVudFN0YXRlIHN0YXRlKTsKKworc3RhdGljIHZvaWQgY2xpZW50X2NhbGxiYWNrKEF2YWhpQ2xpZW50ICpzLCBBdmFoaUNsaWVudFN0YXRlIHN0YXRlLCB2b2lkKiB1c2VyZGF0YSkgeworICAgIHN3X2Rpc2NvdmVyeSBzZWxmID0gdXNlcmRhdGE7CisgICAgc3dfZGlzY292ZXJ5X29pZCBvaWQ7CisKKyAgICBhc3NlcnQocyk7CisgICAgYXNzZXJ0KHNlbGYpOworCisgICAgZGlzY292ZXJ5X3JlZihzZWxmKTsKKworICAgIGZvciAob2lkID0gMDsgb2lkIDwgT0lEX01BWDsgb2lkKyspIHsKKworICAgICAgICBzd2l0Y2ggKHNlbGYtPm9pZF90YWJsZVtvaWRdLnR5cGUpIHsKKworICAgICAgICAgICAgY2FzZSBPSURfRU5UUllfR1JPVVA6CisgICAgICAgICAgICAgICAgcmVnX2NsaWVudF9jYWxsYmFjaygmc2VsZi0+b2lkX3RhYmxlW29pZF0sIHN0YXRlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBPSURfRE9NQUlOX0JST1dTRVI6CisgICAgICAgICAgICBjYXNlIE9JRF9TRVJWSUNFX0JST1dTRVI6CisgICAgICAgICAgICAgICAgKChzd19kaXNjb3ZlcnlfYnJvd3NlX3JlcGx5KSBzZWxmLT5vaWRfdGFibGVbb2lkXS5yZXBseSkoc2VsZiwgb2lkLCBTV19ESVNDT1ZFUllfQlJPV1NFX0lOVkFMSUQsIDAsIE5VTEwsIE5VTEwsIE5VTEwsIHNlbGYtPm9pZF90YWJsZVtvaWRdLmV4dHJhKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBPSURfU0VSVklDRV9SRVNPTFZFUjoKKyAgICAgICAgICAgIGNhc2UgT0lEX1VOVVNFRDoKKyAgICAgICAgICAgICAgICA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBkaXNjb3ZlcnlfdW5yZWYoc2VsZik7Cit9CisKK3N3X3Jlc3VsdCBzd19kaXNjb3ZlcnlfaW5pdChzd19kaXNjb3ZlcnkgKiBzZWxmKSB7CisgICAgaW50IGZkWzJdID0geyAtMSwgLTF9OworICAgIHN3X3Jlc3VsdCByZXN1bHQgPSBTV19FX1VOS05PV047CisgICAgcHRocmVhZF9tdXRleGF0dHJfdCBtdXRleF9hdHRyOworICAgIGludCBlcnJvcjsKKworICAgIGFzc2VydChzZWxmKTsKKworICAgIEFWQUhJX1dBUk5fTElOS0FHRTsKKworICAgICpzZWxmID0gTlVMTDsKKworICAgIGlmIChzb2NrZXRwYWlyKEFGX1VOSVgsIFNPQ0tfU1RSRUFNLCAwLCBmZCkgPCAwKQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICBpZiAoISgqc2VsZiA9IGF2YWhpX25ldyhzdHJ1Y3QgX3N3X2Rpc2NvdmVyeSwgMSkpKSB7CisgICAgICAgIHJlc3VsdCA9IFNXX0VfTUVNOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgKCpzZWxmKS0+bl9yZWYgPSAxOworICAgICgqc2VsZiktPnRocmVhZF9mZCA9IGZkWzBdOworICAgICgqc2VsZiktPm1haW5fZmQgPSBmZFsxXTsKKworICAgICgqc2VsZiktPmNsaWVudCA9IE5VTEw7CisgICAgKCpzZWxmKS0+c2ltcGxlX3BvbGwgPSBOVUxMOworCisgICAgbWVtc2V0KCgqc2VsZiktPm9pZF90YWJsZSwgMCwgc2l6ZW9mKCgqc2VsZiktPm9pZF90YWJsZSkpOworICAgICgqc2VsZiktPm9pZF9pbmRleCA9IDA7CisKKyAgICAoKnNlbGYpLT50aHJlYWRfcnVubmluZyA9IDA7CisKKyAgICBBVkFISV9MTElTVF9IRUFEX0lOSVQoc2VydmljZV9pbmZvLCAoKnNlbGYpLT5zZXJ2aWNlcyk7CisKKyAgICBBU1NFUlRfU1VDQ0VTUyhwdGhyZWFkX211dGV4YXR0cl9pbml0KCZtdXRleF9hdHRyKSk7CisgICAgcHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZSgmbXV0ZXhfYXR0ciwgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUpOworICAgIEFTU0VSVF9TVUNDRVNTKHB0aHJlYWRfbXV0ZXhfaW5pdCgmKCpzZWxmKS0+bXV0ZXgsICZtdXRleF9hdHRyKSk7CisgICAgQVNTRVJUX1NVQ0NFU1MocHRocmVhZF9tdXRleF9pbml0KCYoKnNlbGYpLT5zYWx0X211dGV4LCAmbXV0ZXhfYXR0cikpOworCisgICAgaWYgKCEoKCpzZWxmKS0+c2ltcGxlX3BvbGwgPSBhdmFoaV9zaW1wbGVfcG9sbF9uZXcoKSkpCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIGF2YWhpX3NpbXBsZV9wb2xsX3NldF9mdW5jKCgqc2VsZiktPnNpbXBsZV9wb2xsLCBwb2xsX2Z1bmMsICpzZWxmKTsKKworICAgIGlmICghKCgqc2VsZiktPmNsaWVudCA9IGF2YWhpX2NsaWVudF9uZXcoYXZhaGlfc2ltcGxlX3BvbGxfZ2V0KCgqc2VsZiktPnNpbXBsZV9wb2xsKSwgMCwgY2xpZW50X2NhbGxiYWNrLCAqc2VsZiwgJmVycm9yKSkpIHsKKyAgICAgICAgcmVzdWx0ID0gbWFwX2Vycm9yKGVycm9yKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIC8qIFN0YXJ0IHNpbXBsZSBwb2xsICovCisgICAgaWYgKGF2YWhpX3NpbXBsZV9wb2xsX3ByZXBhcmUoKCpzZWxmKS0+c2ltcGxlX3BvbGwsIC0xKSA8IDApCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIC8qIFF1ZXVlIGFuIGluaXRpYWwgUE9MTCBjb21tYW5kIGZvciB0aGUgdGhyZWFkICovCisgICAgaWYgKHdyaXRlX2NvbW1hbmQoKCpzZWxmKS0+bWFpbl9mZCwgQ09NTUFORF9QT0xMKSA8IDApCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIGlmIChwdGhyZWFkX2NyZWF0ZSgmKCpzZWxmKS0+dGhyZWFkLCBOVUxMLCB0aHJlYWRfZnVuYywgKnNlbGYpICE9IDApCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgICgqc2VsZiktPnRocmVhZF9ydW5uaW5nID0gMTsKKworICAgIHJldHVybiBTV19PS0FZOworCitmYWlsOgorCisgICAgaWYgKCpzZWxmKQorICAgICAgICBzd19kaXNjb3ZlcnlfZmluYSgqc2VsZik7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IHN0b3BfdGhyZWFkKHN3X2Rpc2NvdmVyeSBzZWxmKSB7CisgICAgYXNzZXJ0KHNlbGYpOworCisgICAgaWYgKCFzZWxmLT50aHJlYWRfcnVubmluZykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAod3JpdGVfY29tbWFuZChzZWxmLT5tYWluX2ZkLCBDT01NQU5EX1FVSVQpIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgYXZhaGlfc2ltcGxlX3BvbGxfd2FrZXVwKHNlbGYtPnNpbXBsZV9wb2xsKTsKKworICAgIEFTU0VSVF9TVUNDRVNTKHB0aHJlYWRfam9pbihzZWxmLT50aHJlYWQsIE5VTEwpKTsKKyAgICBzZWxmLT50aHJlYWRfcnVubmluZyA9IDA7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzd19kaXNjb3ZlcnkgZGlzY292ZXJ5X3JlZihzd19kaXNjb3Zlcnkgc2VsZikgeworICAgIGFzc2VydChzZWxmKTsKKyAgICBhc3NlcnQoc2VsZi0+bl9yZWYgPj0gMSk7CisKKyAgICBzZWxmLT5uX3JlZisrOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKK3N0YXRpYyB2b2lkIGRpc2NvdmVyeV91bnJlZihzd19kaXNjb3Zlcnkgc2VsZikgeworICAgIGFzc2VydChzZWxmKTsKKyAgICBhc3NlcnQoc2VsZi0+bl9yZWYgPj0gMSk7CisKKyAgICBpZiAoLS1zZWxmLT5uX3JlZiA+IDApCisgICAgICAgIHJldHVybjsKKworICAgIHN0b3BfdGhyZWFkKHNlbGYpOworCisgICAgaWYgKHNlbGYtPmNsaWVudCkKKyAgICAgICAgYXZhaGlfY2xpZW50X2ZyZWUoc2VsZi0+Y2xpZW50KTsKKworICAgIGlmIChzZWxmLT5zaW1wbGVfcG9sbCkKKyAgICAgICAgYXZhaGlfc2ltcGxlX3BvbGxfZnJlZShzZWxmLT5zaW1wbGVfcG9sbCk7CisKKyAgICBpZiAoc2VsZi0+dGhyZWFkX2ZkID49IDApCisgICAgICAgIGNsb3NlKHNlbGYtPnRocmVhZF9mZCk7CisKKyAgICBpZiAoc2VsZi0+bWFpbl9mZCA+PSAwKQorICAgICAgICBjbG9zZShzZWxmLT5tYWluX2ZkKTsKKworICAgIEFTU0VSVF9TVUNDRVNTKHB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmc2VsZi0+bXV0ZXgpKTsKKyAgICBBU1NFUlRfU1VDQ0VTUyhwdGhyZWFkX211dGV4X2Rlc3Ryb3koJnNlbGYtPnNhbHRfbXV0ZXgpKTsKKworICAgIHdoaWxlIChzZWxmLT5zZXJ2aWNlcykKKyAgICAgICAgc2VydmljZV9kYXRhX2ZyZWUoc2VsZiwgc2VsZi0+c2VydmljZXMpOworCisgICAgYXZhaGlfZnJlZShzZWxmKTsKK30KKworc3dfcmVzdWx0IHN3X2Rpc2NvdmVyeV9maW5hKHN3X2Rpc2NvdmVyeSBzZWxmKSB7CisgICAgYXNzZXJ0KHNlbGYpOworCisgICAgQVZBSElfV0FSTl9MSU5LQUdFOworCisgICAgc3RvcF90aHJlYWQoc2VsZik7CisgICAgZGlzY292ZXJ5X3VucmVmKHNlbGYpOworCisgICAgcmV0dXJuIFNXX09LQVk7Cit9CisKK3N3X3Jlc3VsdCBzd19kaXNjb3ZlcnlfcnVuKHN3X2Rpc2NvdmVyeSBzZWxmKSB7CisgICAgYXNzZXJ0KHNlbGYpOworCisgICAgQVZBSElfV0FSTl9MSU5LQUdFOworCisgICAgcmV0dXJuIHN3X3NhbHRfcnVuKChzd19zYWx0KSBzZWxmKTsKK30KKworc3dfcmVzdWx0IHN3X2Rpc2NvdmVyeV9zdG9wX3J1bihzd19kaXNjb3Zlcnkgc2VsZikgeworICAgIGFzc2VydChzZWxmKTsKKworICAgIEFWQUhJX1dBUk5fTElOS0FHRTsKKworICAgIHJldHVybiBzd19zYWx0X3N0b3BfcnVuKChzd19zYWx0KSBzZWxmKTsKK30KKworaW50IHN3X2Rpc2NvdmVyeV9zb2NrZXQoc3dfZGlzY292ZXJ5IHNlbGYpIHsKKyAgICBhc3NlcnQoc2VsZik7CisKKyAgICBBVkFISV9XQVJOX0xJTktBR0U7CisKKyAgICByZXR1cm4gc2VsZi0+bWFpbl9mZDsKK30KKworc3dfcmVzdWx0IHN3X2Rpc2NvdmVyeV9yZWFkX3NvY2tldChzd19kaXNjb3Zlcnkgc2VsZikgeworICAgIHN3X3Jlc3VsdCByZXN1bHQgPSBTV19FX1VOS05PV047CisKKyAgICBhc3NlcnQoc2VsZik7CisKKyAgICBkaXNjb3ZlcnlfcmVmKHNlbGYpOworCisgICAgQVNTRVJUX1NVQ0NFU1MocHRocmVhZF9tdXRleF9sb2NrKCZzZWxmLT5tdXRleCkpOworCisgICAgLyogQ2xlYW51cCBub3RpZmljYXRpb24gc29ja2V0ICovCisgICAgaWYgKHJlYWRfY29tbWFuZChzZWxmLT5tYWluX2ZkKSAhPSBDT01NQU5EX1BPTExfRE9ORSkKKyAgICAgICAgZ290byBmaW5pc2g7CisKKyAgICBpZiAoYXZhaGlfc2ltcGxlX3BvbGxfZGlzcGF0Y2goc2VsZi0+c2ltcGxlX3BvbGwpIDwgMCkKKyAgICAgICAgZ290byBmaW5pc2g7CisKKyAgICBpZiAoc2VsZi0+bl9yZWYgPiAxKSAvKiBQZXJoYXBzIHdlIHNob3VsZCBkaWUgKi8KKworICAgICAgICAvKiBEaXNwYXRjaCBldmVudHMgKi8KKyAgICAgICAgaWYgKGF2YWhpX3NpbXBsZV9wb2xsX3ByZXBhcmUoc2VsZi0+c2ltcGxlX3BvbGwsIC0xKSA8IDApCisgICAgICAgICAgICBnb3RvIGZpbmlzaDsKKworICAgIGlmIChzZWxmLT5uX3JlZiA+IDEpCisKKyAgICAgICAgLyogUmVxdWVzdCB0aGUgcG9sbCAqLworICAgICAgICBpZiAod3JpdGVfY29tbWFuZChzZWxmLT5tYWluX2ZkLCBDT01NQU5EX1BPTEwpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZmluaXNoOworCisgICAgcmVzdWx0ID0gU1dfT0tBWTsKKworZmluaXNoOgorCisgICAgQVNTRVJUX1NVQ0NFU1MocHRocmVhZF9tdXRleF91bmxvY2soJnNlbGYtPm11dGV4KSk7CisKKyAgICBkaXNjb3ZlcnlfdW5yZWYoc2VsZik7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzd19yZXN1bHQgc3dfZGlzY292ZXJ5X3NhbHQoc3dfZGlzY292ZXJ5IHNlbGYsIHN3X3NhbHQgKnNhbHQpIHsKKyAgICBhc3NlcnQoc2VsZik7CisgICAgYXNzZXJ0KHNhbHQpOworCisgICAgQVZBSElfV0FSTl9MSU5LQUdFOworCisgICAgKnNhbHQgPSAoc3dfc2FsdCkgc2VsZjsKKworICAgIHJldHVybiBTV19PS0FZOworfQorCitzd19yZXN1bHQgc3dfc2FsdF9zdGVwKHN3X3NhbHQgc2VsZiwgc3dfdWludDMyICogbXNlYykgeworICAgIHN0cnVjdCBwb2xsZmQgcDsKKyAgICBpbnQgcjsKKyAgICBzd19yZXN1bHQgcmVzdWx0OworCisgICAgQVZBSElfV0FSTl9MSU5LQUdFOworCisgICAgaWYgKCEoKHN3X2Rpc2NvdmVyeSkgc2VsZiktPnRocmVhZF9ydW5uaW5nKQorICAgICAgICByZXR1cm4gU1dfRV9VTktOT1dOOworCisgICAgbWVtc2V0KCZwLCAwLCBzaXplb2YocCkpOworICAgIHAuZmQgPSAoKHN3X2Rpc2NvdmVyeSkgc2VsZiktPm1haW5fZmQ7CisgICAgcC5ldmVudHMgPSBQT0xMSU47CisKKyAgICBpZiAoKHIgPSBwb2xsKCZwLCAxLCBtc2VjID8gKGludCkgKm1zZWMgOiAtMSkpIDwgMCkgeworCisgICAgICAgIC8qIERvbid0IHRyZWF0IEVJTlRSIGFzIGVycm9yICovCisgICAgICAgIGlmIChlcnJubyA9PSBFSU5UUikKKyAgICAgICAgICAgIHJldHVybiBTV19PS0FZOworCisgICAgICAgIHJldHVybiBTV19FX1VOS05PV047CisKKyAgICB9IGVsc2UgaWYgKHIgPT0gMCkgeworCisgICAgICAgIC8qIFRpbWVvb3V0ICovCisgICAgICAgIHJldHVybiBTV19PS0FZOworCisgICAgfSBlbHNlIHsKKyAgICAgICAgLyogU3VjY2VzcyAqLworCisgICAgICAgIGlmIChwLnJldmVudHMgIT0gUE9MTElOKQorICAgICAgICAgICAgcmV0dXJuIFNXX0VfVU5LTk9XTjsKKworICAgICAgICBpZiAoKHJlc3VsdCA9IHN3X2Rpc2NvdmVyeV9yZWFkX3NvY2tldCgoc3dfZGlzY292ZXJ5KSBzZWxmKSkgIT0gU1dfT0tBWSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgcmV0dXJuIFNXX09LQVk7Cit9CisKK3N3X3Jlc3VsdCBzd19zYWx0X3J1bihzd19zYWx0IHNlbGYpIHsKKyAgICBzd19yZXN1bHQgcmV0OworCisgICAgQVZBSElfV0FSTl9MSU5LQUdFOworCisgICAgYXNzZXJ0KHNlbGYpOworCisgICAgZm9yICg7OykKKyAgICAgICAgaWYgKChyZXQgPSBzd19zYWx0X3N0ZXAoc2VsZiwgTlVMTCkpICE9IFNXX09LQVkpCisgICAgICAgICAgICByZXR1cm4gcmV0OworfQorCitzd19yZXN1bHQgc3dfc2FsdF9zdG9wX3J1bihzd19zYWx0IHNlbGYpIHsKKyAgICBBVkFISV9XQVJOX0xJTktBR0U7CisKKyAgICBhc3NlcnQoc2VsZik7CisKKyAgICBpZiAoc3RvcF90aHJlYWQoKHN3X2Rpc2NvdmVyeSkgc2VsZikgPCAwKQorICAgICAgICByZXR1cm4gU1dfRV9VTktOT1dOOworCisgICAgcmV0dXJuIFNXX09LQVk7Cit9CisKK3N3X3Jlc3VsdCBzd19zYWx0X2xvY2soc3dfc2FsdCBzZWxmKSB7CisgICAgQVZBSElfV0FSTl9MSU5LQUdFOworCisgICAgYXNzZXJ0KHNlbGYpOworICAgIEFTU0VSVF9TVUNDRVNTKHB0aHJlYWRfbXV0ZXhfbG9jaygmKChzd19kaXNjb3ZlcnkpIHNlbGYpLT5zYWx0X211dGV4KSk7CisKKyAgICByZXR1cm4gU1dfT0tBWTsKK30KKworc3dfcmVzdWx0IHN3X3NhbHRfdW5sb2NrKHN3X3NhbHQgc2VsZikgeworICAgIGFzc2VydChzZWxmKTsKKworICAgIEFWQUhJX1dBUk5fTElOS0FHRTsKKworICAgIEFTU0VSVF9TVUNDRVNTKHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCYoKHN3X2Rpc2NvdmVyeSkgc2VsZiktPnNhbHRfbXV0ZXgpKTsKKworICAgIHJldHVybiBTV19PS0FZOworfQorCitzdGF0aWMgdm9pZCByZWdfcmVwb3J0X3N0YXR1cyhvaWRfZGF0YSAqZGF0YSwgc3dfZGlzY292ZXJ5X3B1Ymxpc2hfc3RhdHVzIHN0YXR1cykgeworICAgIHN3X2Rpc2NvdmVyeV9wdWJsaXNoX3JlcGx5IHJlcGx5OworCisgICAgYXNzZXJ0KGRhdGEpOworCisgICAgcmVwbHkgPSAoc3dfZGlzY292ZXJ5X3B1Ymxpc2hfcmVwbHkpIGRhdGEtPnJlcGx5OworCisgICAgcmVwbHkoZGF0YS0+ZGlzY292ZXJ5LAorICAgICAgICAgIE9JRF9HRVRfSU5ERVgoZGF0YSksCisgICAgICAgICAgc3RhdHVzLAorICAgICAgICAgIGRhdGEtPmV4dHJhKTsKK30KKworc3RhdGljIGludCByZWdfY3JlYXRlX3NlcnZpY2Uob2lkX2RhdGEgKmRhdGEpIHsKKyAgICBpbnQgcmV0OworICAgIGNvbnN0IGNoYXIgKnJlYWxfdHlwZTsKKworICAgIGFzc2VydChkYXRhKTsKKworICAgIHJlYWxfdHlwZSA9IGF2YWhpX2dldF90eXBlX2Zyb21fc3VidHlwZShkYXRhLT5zZXJ2aWNlX2RhdGEtPnJlZ3R5cGUpOworCisgICAgaWYgKChyZXQgPSBhdmFoaV9lbnRyeV9ncm91cF9hZGRfc2VydmljZV9zdHJsc3QoCisgICAgICAgICAgICAgZGF0YS0+b2JqZWN0LAorICAgICAgICAgICAgIGRhdGEtPnNlcnZpY2VfZGF0YS0+aW50ZXJmYWNlLAorICAgICAgICAgICAgIEFWQUhJX1BST1RPX0lORVQsCisgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICBkYXRhLT5zZXJ2aWNlX2RhdGEtPm5hbWUsCisgICAgICAgICAgICAgcmVhbF90eXBlID8gcmVhbF90eXBlIDogZGF0YS0+c2VydmljZV9kYXRhLT5yZWd0eXBlLAorICAgICAgICAgICAgIGRhdGEtPnNlcnZpY2VfZGF0YS0+ZG9tYWluLAorICAgICAgICAgICAgIGRhdGEtPnNlcnZpY2VfZGF0YS0+aG9zdCwKKyAgICAgICAgICAgICBkYXRhLT5zZXJ2aWNlX2RhdGEtPnBvcnQsCisgICAgICAgICAgICAgZGF0YS0+c2VydmljZV9kYXRhLT50eHQpKSA8IDApCisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICBpZiAocmVhbF90eXBlKSB7CisgICAgICAgIC8qIENyZWF0ZSBhIHN1YnR5cGUgZW50cnkgKi8KKworICAgICAgICBpZiAoYXZhaGlfZW50cnlfZ3JvdXBfYWRkX3NlcnZpY2Vfc3VidHlwZSgKKyAgICAgICAgICAgICAgICBkYXRhLT5vYmplY3QsCisgICAgICAgICAgICAgICAgZGF0YS0+c2VydmljZV9kYXRhLT5pbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgQVZBSElfUFJPVE9fSU5FVCwKKyAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgIGRhdGEtPnNlcnZpY2VfZGF0YS0+bmFtZSwKKyAgICAgICAgICAgICAgICByZWFsX3R5cGUsCisgICAgICAgICAgICAgICAgZGF0YS0+c2VydmljZV9kYXRhLT5kb21haW4sCisgICAgICAgICAgICAgICAgZGF0YS0+c2VydmljZV9kYXRhLT5yZWd0eXBlKSA8IDApCisgICAgICAgICAgICByZXR1cm4gcmV0OworCisgICAgfQorCisgICAgaWYgKChyZXQgPSBhdmFoaV9lbnRyeV9ncm91cF9jb21taXQoZGF0YS0+b2JqZWN0KSkgPCAwKQorICAgICAgICByZXR1cm4gcmV0OworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHJlZ19jbGllbnRfY2FsbGJhY2sob2lkX2RhdGEgKmRhdGEsIEF2YWhpQ2xpZW50U3RhdGUgc3RhdGUpIHsKKyAgICBhc3NlcnQoZGF0YSk7CisKKyAgICAvKiBXZSd2ZSBub3QgYmVlbiBzZXR1cCBjb21wbGV0ZWx5ICovCisgICAgaWYgKCFkYXRhLT5vYmplY3QpCisgICAgICAgIHJldHVybjsKKworICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICAgICAgY2FzZSBBVkFISV9DTElFTlRfRkFJTFVSRToKKyAgICAgICAgICAgIHJlZ19yZXBvcnRfc3RhdHVzKGRhdGEsIFNXX0RJU0NPVkVSWV9QVUJMSVNIX0lOVkFMSUQpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBVkFISV9DTElFTlRfU19SVU5OSU5HOiB7CisgICAgICAgICAgICBpbnQgcmV0OworCisgICAgICAgICAgICAvKiBSZWdpc3RlciB0aGUgc2VydmljZSAqLworICAgICAgICAgICAgaWYgKChyZXQgPSByZWdfY3JlYXRlX3NlcnZpY2UoZGF0YSkpIDwgMCkgeworICAgICAgICAgICAgICAgIHJlZ19yZXBvcnRfc3RhdHVzKGRhdGEsIFNXX0RJU0NPVkVSWV9QVUJMSVNIX0lOVkFMSUQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEFWQUhJX0NMSUVOVF9TX0NPTExJU0lPTjoKKyAgICAgICAgY2FzZSBBVkFISV9DTElFTlRfU19SRUdJU1RFUklORzoKKworICAgICAgICAgICAgLyogUmVtb3ZlIG91ciBlbnRyeSAqLworICAgICAgICAgICAgYXZhaGlfZW50cnlfZ3JvdXBfcmVzZXQoZGF0YS0+b2JqZWN0KTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQVZBSElfQ0xJRU5UX0NPTk5FQ1RJTkc6CisgICAgICAgICAgICAvKiBJZ25vcmUgKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworfQorCitzdGF0aWMgdm9pZCByZWdfZW50cnlfZ3JvdXBfY2FsbGJhY2soQXZhaGlFbnRyeUdyb3VwICpnLCBBdmFoaUVudHJ5R3JvdXBTdGF0ZSBzdGF0ZSwgdm9pZCAqdXNlcmRhdGEpIHsKKyAgICBvaWRfZGF0YSAqZGF0YSA9IHVzZXJkYXRhOworCisgICAgYXNzZXJ0KGcpOworICAgIGFzc2VydChkYXRhKTsKKworICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICAgICAgY2FzZSBBVkFISV9FTlRSWV9HUk9VUF9FU1RBQkxJU0hFRDoKKworICAgICAgICAgICAgcmVnX3JlcG9ydF9zdGF0dXMoZGF0YSwgU1dfRElTQ09WRVJZX1BVQkxJU0hfU1RBUlRFRCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFWQUhJX0VOVFJZX0dST1VQX0NPTExJU0lPTjoKKworICAgICAgICAgICAgcmVnX3JlcG9ydF9zdGF0dXMoZGF0YSwgU1dfRElTQ09WRVJZX1BVQkxJU0hfTkFNRV9DT0xMSVNJT04pOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBVkFISV9FTlRSWV9HUk9VUF9SRUdJU1RFUklORzoKKyAgICAgICAgY2FzZSBBVkFISV9FTlRSWV9HUk9VUF9VTkNPTU1JVEVEOgorICAgICAgICAgICAgLyogSWdub3JlICovCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFWQUhJX0VOVFJZX0dST1VQX0ZBSUxVUkU6CisgICAgICAgICAgICByZWdfcmVwb3J0X3N0YXR1cyhkYXRhLCBTV19ESVNDT1ZFUllfUFVCTElTSF9JTlZBTElEKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgfQorfQorCitzd19yZXN1bHQgc3dfZGlzY292ZXJ5X3B1Ymxpc2goCisgICAgc3dfZGlzY292ZXJ5IHNlbGYsCisgICAgc3dfdWludDMyIGludGVyZmFjZV9pbmRleCwKKyAgICBzd19jb25zdF9zdHJpbmcgbmFtZSwKKyAgICBzd19jb25zdF9zdHJpbmcgdHlwZSwKKyAgICBzd19jb25zdF9zdHJpbmcgZG9tYWluLAorICAgIHN3X2NvbnN0X3N0cmluZyBob3N0LAorICAgIHN3X3BvcnQgcG9ydCwKKyAgICBzd19vY3RldHMgdGV4dF9yZWNvcmQsCisgICAgc3dfdWludDMyIHRleHRfcmVjb3JkX2xlbiwKKyAgICBzd19kaXNjb3ZlcnlfcHVibGlzaF9yZXBseSByZXBseSwKKyAgICBzd19vcGFxdWUgZXh0cmEsCisgICAgc3dfZGlzY292ZXJ5X29pZCAqIG9pZCkgeworCisgICAgb2lkX2RhdGEgKmRhdGE7CisgICAgc3dfcmVzdWx0IHJlc3VsdCA9IFNXX0VfVU5LTk9XTjsKKyAgICBzZXJ2aWNlX2RhdGEgKnNkYXRhOworICAgIEF2YWhpU3RyaW5nTGlzdCAqdHh0ID0gTlVMTDsKKworICAgIGFzc2VydChzZWxmKTsKKyAgICBhc3NlcnQobmFtZSk7CisgICAgYXNzZXJ0KHR5cGUpOworICAgIGFzc2VydChyZXBseSk7CisgICAgYXNzZXJ0KG9pZCk7CisKKyAgICBBVkFISV9XQVJOX0xJTktBR0U7CisKKyAgICBpZiAodGV4dF9yZWNvcmQgJiYgdGV4dF9yZWNvcmRfbGVuID4gMCkKKyAgICAgICAgaWYgKGF2YWhpX3N0cmluZ19saXN0X3BhcnNlKHRleHRfcmVjb3JkLCB0ZXh0X3JlY29yZF9sZW4sICZ0eHQpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBTV19FX1VOS05PV047CisKKyAgICBpZiAoKCpvaWQgPSBvaWRfYWxsb2Moc2VsZiwgT0lEX0VOVFJZX0dST1VQKSkgPT0gKHN3X2Rpc2NvdmVyeV9vaWQpIC0xKSB7CisgICAgICAgIGF2YWhpX3N0cmluZ19saXN0X2ZyZWUodHh0KTsKKyAgICAgICAgcmV0dXJuIFNXX0VfVU5LTk9XTjsKKyAgICB9CisKKyAgICBpZiAoIShzZGF0YSA9IHNlcnZpY2VfZGF0YV9uZXcoc2VsZikpKSB7CisgICAgICAgIGF2YWhpX3N0cmluZ19saXN0X2ZyZWUodHh0KTsKKyAgICAgICAgb2lkX3JlbGVhc2Uoc2VsZiwgKm9pZCk7CisgICAgICAgIHJldHVybiBTV19FX01FTTsKKyAgICB9CisKKyAgICBkYXRhID0gb2lkX2dldChzZWxmLCAqb2lkKTsKKyAgICBhc3NlcnQoZGF0YSk7CisgICAgZGF0YS0+cmVwbHkgPSAoc3dfcmVzdWx0ICgqKSh2b2lkKSkgcmVwbHk7CisgICAgZGF0YS0+ZXh0cmEgPSBleHRyYTsKKyAgICBkYXRhLT5zZXJ2aWNlX2RhdGEgPSBzZGF0YTsKKworICAgIHNkYXRhLT5pbnRlcmZhY2UgPSBpbnRlcmZhY2VfaW5kZXggPT0gMCA/IEFWQUhJX0lGX1VOU1BFQyA6IChBdmFoaUlmSW5kZXgpIGludGVyZmFjZV9pbmRleDsKKyAgICBzZGF0YS0+bmFtZSA9IGF2YWhpX3N0cmR1cChuYW1lKTsKKyAgICBzZGF0YS0+cmVndHlwZSA9IHR5cGUgPyBhdmFoaV9ub3JtYWxpemVfbmFtZV9zdHJkdXAodHlwZSkgOiBOVUxMOworICAgIHNkYXRhLT5kb21haW4gPSBkb21haW4gPyBhdmFoaV9ub3JtYWxpemVfbmFtZV9zdHJkdXAoZG9tYWluKSA6IE5VTEw7CisgICAgc2RhdGEtPmhvc3QgPSBob3N0ID8gYXZhaGlfbm9ybWFsaXplX25hbWVfc3RyZHVwKGhvc3QpIDogTlVMTDsKKyAgICBzZGF0YS0+cG9ydCA9IHBvcnQ7CisgICAgc2RhdGEtPnR4dCA9IHR4dDsKKworICAgIC8qIFNvbWUgT09NIGNoZWNraW5nIHdvdWxkIGJlIGNvb2wgaGVyZSAqLworCisgICAgQVNTRVJUX1NVQ0NFU1MocHRocmVhZF9tdXRleF9sb2NrKCZzZWxmLT5tdXRleCkpOworCisgICAgaWYgKCEoZGF0YS0+b2JqZWN0ID0gYXZhaGlfZW50cnlfZ3JvdXBfbmV3KHNlbGYtPmNsaWVudCwgcmVnX2VudHJ5X2dyb3VwX2NhbGxiYWNrLCBkYXRhKSkpIHsKKyAgICAgICAgcmVzdWx0ID0gbWFwX2Vycm9yKGF2YWhpX2NsaWVudF9lcnJubyhzZWxmLT5jbGllbnQpKTsKKyAgICAgICAgZ290byBmaW5pc2g7CisgICAgfQorCisgICAgaWYgKGF2YWhpX2NsaWVudF9nZXRfc3RhdGUoc2VsZi0+Y2xpZW50KSA9PSBBVkFISV9DTElFTlRfU19SVU5OSU5HKSB7CisgICAgICAgIGludCBlcnJvcjsKKworICAgICAgICBpZiAoKGVycm9yID0gcmVnX2NyZWF0ZV9zZXJ2aWNlKGRhdGEpKSA8IDApIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG1hcF9lcnJvcihlcnJvcik7CisgICAgICAgICAgICBnb3RvIGZpbmlzaDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJlc3VsdCA9IFNXX09LQVk7CisKK2ZpbmlzaDoKKworICAgIEFTU0VSVF9TVUNDRVNTKHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZzZWxmLT5tdXRleCkpOworCisgICAgaWYgKHJlc3VsdCAhPSBTV19PS0FZKQorICAgICAgICBpZiAoKm9pZCAhPSAoc3dfZGlzY292ZXJ5X29pZCkgLTEpCisgICAgICAgICAgICBzd19kaXNjb3ZlcnlfY2FuY2VsKHNlbGYsICpvaWQpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgZG9tYWluX2Jyb3dzZXJfY2FsbGJhY2soCisgICAgQXZhaGlEb21haW5Ccm93c2VyICpiLAorICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsCisgICAgQVZBSElfR0NDX1VOVVNFRCBBdmFoaVByb3RvY29sIHByb3RvY29sLAorICAgIEF2YWhpQnJvd3NlckV2ZW50IGV2ZW50LAorICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIEF2YWhpTG9va3VwUmVzdWx0RmxhZ3MgZmxhZ3MsCisgICAgdm9pZCAqdXNlcmRhdGEpIHsKKworICAgIG9pZF9kYXRhKiBkYXRhID0gdXNlcmRhdGE7CisgICAgc3dfZGlzY292ZXJ5X2Jyb3dzZV9yZXBseSByZXBseTsKKyAgICBzdGF0aWMgY2hhciBkb21haW5fZml4ZWRbQVZBSElfRE9NQUlOX05BTUVfTUFYXTsKKworICAgIGFzc2VydChiKTsKKyAgICBhc3NlcnQoZGF0YSk7CisKKyAgICByZXBseSA9IChzd19kaXNjb3ZlcnlfYnJvd3NlX3JlcGx5KSBkYXRhLT5yZXBseTsKKworICAgIGRvbWFpbiAgPSBhZGRfdHJhaWxpbmdfZG90KGRvbWFpbiwgZG9tYWluX2ZpeGVkLCBzaXplb2YoZG9tYWluX2ZpeGVkKSk7CisKKyAgICBzd2l0Y2ggKGV2ZW50KSB7CisgICAgICAgIGNhc2UgQVZBSElfQlJPV1NFUl9ORVc6CisgICAgICAgICAgICByZXBseShkYXRhLT5kaXNjb3ZlcnksIE9JRF9HRVRfSU5ERVgoZGF0YSksIFNXX0RJU0NPVkVSWV9CUk9XU0VfQUREX0RPTUFJTiwgaW50ZXJmYWNlLCBOVUxMLCBOVUxMLCBkb21haW4sIGRhdGEtPmV4dHJhKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQVZBSElfQlJPV1NFUl9SRU1PVkU6CisgICAgICAgICAgICByZXBseShkYXRhLT5kaXNjb3ZlcnksIE9JRF9HRVRfSU5ERVgoZGF0YSksIFNXX0RJU0NPVkVSWV9CUk9XU0VfUkVNT1ZFX0RPTUFJTiwgaW50ZXJmYWNlLCBOVUxMLCBOVUxMLCBkb21haW4sIGRhdGEtPmV4dHJhKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQVZBSElfQlJPV1NFUl9GQUlMVVJFOgorICAgICAgICAgICAgcmVwbHkoZGF0YS0+ZGlzY292ZXJ5LCBPSURfR0VUX0lOREVYKGRhdGEpLCBTV19ESVNDT1ZFUllfQlJPV1NFX0lOVkFMSUQsIGludGVyZmFjZSwgTlVMTCwgTlVMTCwgZG9tYWluLCBkYXRhLT5leHRyYSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFWQUhJX0JST1dTRVJfQ0FDSEVfRVhIQVVTVEVEOgorICAgICAgICBjYXNlIEFWQUhJX0JST1dTRVJfQUxMX0ZPUl9OT1c6CisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N3X3Jlc3VsdCBzd19kaXNjb3ZlcnlfYnJvd3NlX2RvbWFpbnMoCisgICAgc3dfZGlzY292ZXJ5IHNlbGYsCisgICAgc3dfdWludDMyIGludGVyZmFjZV9pbmRleCwKKyAgICBzd19kaXNjb3ZlcnlfYnJvd3NlX3JlcGx5IHJlcGx5LAorICAgIHN3X29wYXF1ZSBleHRyYSwKKyAgICBzd19kaXNjb3Zlcnlfb2lkICogb2lkKSB7CisKKyAgICBvaWRfZGF0YSAqZGF0YTsKKyAgICBBdmFoaUlmSW5kZXggaWZpbmRleDsKKyAgICBzd19yZXN1bHQgcmVzdWx0ID0gU1dfRV9VTktOT1dOOworCisgICAgYXNzZXJ0KHNlbGYpOworICAgIGFzc2VydChyZXBseSk7CisgICAgYXNzZXJ0KG9pZCk7CisKKyAgICBBVkFISV9XQVJOX0xJTktBR0U7CisKKyAgICBpZiAoKCpvaWQgPSBvaWRfYWxsb2Moc2VsZiwgT0lEX0RPTUFJTl9CUk9XU0VSKSkgPT0gKHN3X2Rpc2NvdmVyeV9vaWQpIC0xKQorICAgICAgICByZXR1cm4gU1dfRV9VTktOT1dOOworCisgICAgZGF0YSA9IG9pZF9nZXQoc2VsZiwgKm9pZCk7CisgICAgYXNzZXJ0KGRhdGEpOworICAgIGRhdGEtPnJlcGx5ID0gKHN3X3Jlc3VsdCAoKikodm9pZCkpIHJlcGx5OworICAgIGRhdGEtPmV4dHJhID0gZXh0cmE7CisKKyAgICBpZmluZGV4ID0gaW50ZXJmYWNlX2luZGV4ID09IDAgPyBBVkFISV9JRl9VTlNQRUMgOiAoQXZhaGlJZkluZGV4KSBpbnRlcmZhY2VfaW5kZXg7CisKKyAgICBBU1NFUlRfU1VDQ0VTUyhwdGhyZWFkX211dGV4X2xvY2soJnNlbGYtPm11dGV4KSk7CisKKyAgICBpZiAoIShkYXRhLT5vYmplY3QgPSBhdmFoaV9kb21haW5fYnJvd3Nlcl9uZXcoc2VsZi0+Y2xpZW50LCBpZmluZGV4LCBBVkFISV9QUk9UT19JTkVULCBOVUxMLCBBVkFISV9ET01BSU5fQlJPV1NFUl9CUk9XU0UsIDAsIGRvbWFpbl9icm93c2VyX2NhbGxiYWNrLCBkYXRhKSkpIHsKKyAgICAgICAgcmVzdWx0ID0gbWFwX2Vycm9yKGF2YWhpX2NsaWVudF9lcnJubyhzZWxmLT5jbGllbnQpKTsKKyAgICAgICAgZ290byBmaW5pc2g7CisgICAgfQorCisgICAgcmVzdWx0ID0gU1dfT0tBWTsKKworZmluaXNoOgorCisgICAgQVNTRVJUX1NVQ0NFU1MocHRocmVhZF9tdXRleF91bmxvY2soJnNlbGYtPm11dGV4KSk7CisKKyAgICBpZiAocmVzdWx0ICE9IFNXX09LQVkpCisgICAgICAgIGlmICgqb2lkICE9IChzd19kaXNjb3Zlcnlfb2lkKSAtMSkKKyAgICAgICAgICAgIHN3X2Rpc2NvdmVyeV9jYW5jZWwoc2VsZiwgKm9pZCk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBzZXJ2aWNlX3Jlc29sdmVyX2NhbGxiYWNrKAorICAgIEF2YWhpU2VydmljZVJlc29sdmVyICpyLAorICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsCisgICAgQVZBSElfR0NDX1VOVVNFRCBBdmFoaVByb3RvY29sIHByb3RvY29sLAorICAgIEF2YWhpUmVzb2x2ZXJFdmVudCBldmVudCwKKyAgICBjb25zdCBjaGFyICpuYW1lLAorICAgIGNvbnN0IGNoYXIgKnR5cGUsCisgICAgY29uc3QgY2hhciAqZG9tYWluLAorICAgIGNvbnN0IGNoYXIgKmhvc3RfbmFtZSwKKyAgICBjb25zdCBBdmFoaUFkZHJlc3MgKmEsCisgICAgdWludDE2X3QgcG9ydCwKKyAgICBBdmFoaVN0cmluZ0xpc3QgKnR4dCwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIEF2YWhpTG9va3VwUmVzdWx0RmxhZ3MgZmxhZ3MsCisgICAgdm9pZCAqdXNlcmRhdGEpIHsKKworICAgIG9pZF9kYXRhKiBkYXRhID0gdXNlcmRhdGE7CisgICAgc3dfZGlzY292ZXJ5X3Jlc29sdmVfcmVwbHkgcmVwbHk7CisKKyAgICBhc3NlcnQocik7CisgICAgYXNzZXJ0KGRhdGEpOworCisgICAgcmVwbHkgPSAoc3dfZGlzY292ZXJ5X3Jlc29sdmVfcmVwbHkpIGRhdGEtPnJlcGx5OworCisgICAgc3dpdGNoIChldmVudCkgeworICAgICAgICBjYXNlIEFWQUhJX1JFU09MVkVSX0ZPVU5EOiB7CisKKyAgICAgICAgICAgIGNoYXIgaG9zdF9uYW1lX2ZpeGVkW0FWQUhJX0RPTUFJTl9OQU1FX01BWF07CisgICAgICAgICAgICB1aW50OF90ICpwID0gTlVMTDsKKyAgICAgICAgICAgIHNpemVfdCBsID0gMDsKKyAgICAgICAgICAgIHN3X2lwdjRfYWRkcmVzcyBhZGRyOworCisgICAgICAgICAgICBzd19pcHY0X2FkZHJlc3NfaW5pdF9mcm9tX3NhZGRyKCZhZGRyLCBhLT5kYXRhLmlwdjQuYWRkcmVzcyk7CisKKyAgICAgICAgICAgIGhvc3RfbmFtZSA9IGFkZF90cmFpbGluZ19kb3QoaG9zdF9uYW1lLCBob3N0X25hbWVfZml4ZWQsIHNpemVvZihob3N0X25hbWVfZml4ZWQpKTsKKworICAgICAgICAgICAgaWYgKChwID0gYXZhaGlfbmV3MCh1aW50OF90LCAobCA9IGF2YWhpX3N0cmluZ19saXN0X3NlcmlhbGl6ZSh0eHQsIE5VTEwsIDApKSsxKSkpCisgICAgICAgICAgICAgICAgYXZhaGlfc3RyaW5nX2xpc3Rfc2VyaWFsaXplKHR4dCwgcCwgbCk7CisKKyAgICAgICAgICAgIHJlcGx5KGRhdGEtPmRpc2NvdmVyeSwgT0lEX0dFVF9JTkRFWChkYXRhKSwgaW50ZXJmYWNlLCBuYW1lLCB0eXBlLCBkb21haW4sIGFkZHIsIHBvcnQsIHAsIGwsIGRhdGEtPmV4dHJhKTsKKworICAgICAgICAgICAgYXZhaGlfZnJlZShwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBBVkFISV9SRVNPTFZFUl9GQUlMVVJFOgorCisgICAgICAgICAgICAvKiBBcHBhcmVudGx5IHRoZXJlIGlzIG5vIHdheSBpbiBIT1dMIHRvIGluZm9ybSBhYm91dCBmYWlsZWQgcmVzb2x2aW5ncyAuLi4gKi8KKworICAgICAgICAgICAgYXZhaGlfd2FybigiQSBzZXJ2aWNlIGZhaWxlZCB0byByZXNvbHZlIGluIHRoZSBIT1dMIGNvbXBhdGlibGl0eSBsYXllciBvZiBBdmFoaSB3aGljaCBpcyB1c2VkIGJ5ICclcycuICIKKyAgICAgICAgICAgICAgICAgICAgICAgIlNpbmNlIHRoZSBIT1dMIEFQSSBkb2Vzbid0IG9mZmVyIGFueSBtZWFucyB0byBpbmZvcm0gdGhlIGFwcGxpY2F0aW9uIGFib3V0IHRoaXMsIHdlIGhhdmUgdG8gaWdub3JlIHRoZSBmYWlsdXJlLiAiCisgICAgICAgICAgICAgICAgICAgICAgICJQbGVhc2UgZml4IHlvdXIgYXBwbGljYXRpb24gdG8gdXNlIHRoZSBuYXRpdmUgQVBJIG9mIEF2YWhpISIsCisgICAgICAgICAgICAgICAgICAgICAgIGF2YWhpX2V4ZV9uYW1lKCkpOworCisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N3X3Jlc3VsdCBzd19kaXNjb3ZlcnlfcmVzb2x2ZSgKKyAgICBzd19kaXNjb3Zlcnkgc2VsZiwKKyAgICBzd191aW50MzIgaW50ZXJmYWNlX2luZGV4LAorICAgIHN3X2NvbnN0X3N0cmluZyBuYW1lLAorICAgIHN3X2NvbnN0X3N0cmluZyB0eXBlLAorICAgIHN3X2NvbnN0X3N0cmluZyBkb21haW4sCisgICAgc3dfZGlzY292ZXJ5X3Jlc29sdmVfcmVwbHkgcmVwbHksCisgICAgc3dfb3BhcXVlIGV4dHJhLAorICAgIHN3X2Rpc2NvdmVyeV9vaWQgKiBvaWQpIHsKKworICAgIG9pZF9kYXRhICpkYXRhOworICAgIEF2YWhpSWZJbmRleCBpZmluZGV4OworICAgIHN3X3Jlc3VsdCByZXN1bHQgPSBTV19FX1VOS05PV047CisKKyAgICBhc3NlcnQoc2VsZik7CisgICAgYXNzZXJ0KG5hbWUpOworICAgIGFzc2VydCh0eXBlKTsKKyAgICBhc3NlcnQocmVwbHkpOworICAgIGFzc2VydChvaWQpOworCisgICAgQVZBSElfV0FSTl9MSU5LQUdFOworCisgICAgaWYgKCgqb2lkID0gb2lkX2FsbG9jKHNlbGYsIE9JRF9TRVJWSUNFX1JFU09MVkVSKSkgPT0gKHN3X2Rpc2NvdmVyeV9vaWQpIC0xKQorICAgICAgICByZXR1cm4gU1dfRV9VTktOT1dOOworCisgICAgZGF0YSA9IG9pZF9nZXQoc2VsZiwgKm9pZCk7CisgICAgYXNzZXJ0KGRhdGEpOworICAgIGRhdGEtPnJlcGx5ID0gKHN3X3Jlc3VsdCAoKikodm9pZCkpIHJlcGx5OworICAgIGRhdGEtPmV4dHJhID0gZXh0cmE7CisKKyAgICBpZmluZGV4ID0gaW50ZXJmYWNlX2luZGV4ID09IDAgPyBBVkFISV9JRl9VTlNQRUMgOiAoQXZhaGlJZkluZGV4KSBpbnRlcmZhY2VfaW5kZXg7CisKKyAgICBBU1NFUlRfU1VDQ0VTUyhwdGhyZWFkX211dGV4X2xvY2soJnNlbGYtPm11dGV4KSk7CisKKyAgICBpZiAoIShkYXRhLT5vYmplY3QgPSBhdmFoaV9zZXJ2aWNlX3Jlc29sdmVyX25ldyhzZWxmLT5jbGllbnQsIGlmaW5kZXgsIEFWQUhJX1BST1RPX0lORVQsIG5hbWUsIHR5cGUsIGRvbWFpbiwgQVZBSElfUFJPVE9fSU5FVCwgMCwgc2VydmljZV9yZXNvbHZlcl9jYWxsYmFjaywgZGF0YSkpKSB7CisgICAgICAgIHJlc3VsdCA9IG1hcF9lcnJvcihhdmFoaV9jbGllbnRfZXJybm8oc2VsZi0+Y2xpZW50KSk7CisgICAgICAgIGdvdG8gZmluaXNoOworICAgIH0KKworICAgIHJlc3VsdCA9IFNXX09LQVk7CisKK2ZpbmlzaDoKKworICAgIEFTU0VSVF9TVUNDRVNTKHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZzZWxmLT5tdXRleCkpOworCisgICAgaWYgKHJlc3VsdCAhPSBTV19PS0FZKQorICAgICAgICBpZiAoKm9pZCAhPSAoc3dfZGlzY292ZXJ5X29pZCkgLTEpCisgICAgICAgICAgICBzd19kaXNjb3ZlcnlfY2FuY2VsKHNlbGYsICpvaWQpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgc2VydmljZV9icm93c2VyX2NhbGxiYWNrKAorICAgIEF2YWhpU2VydmljZUJyb3dzZXIgKmIsCisgICAgQXZhaGlJZkluZGV4IGludGVyZmFjZSwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsCisgICAgQXZhaGlCcm93c2VyRXZlbnQgZXZlbnQsCisgICAgY29uc3QgY2hhciAqbmFtZSwKKyAgICBjb25zdCBjaGFyICp0eXBlLAorICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIEF2YWhpTG9va3VwUmVzdWx0RmxhZ3MgZmxhZ3MsCisgICAgdm9pZCAqdXNlcmRhdGEpIHsKKworICAgIG9pZF9kYXRhKiBkYXRhID0gdXNlcmRhdGE7CisgICAgY2hhciB0eXBlX2ZpeGVkW0FWQUhJX0RPTUFJTl9OQU1FX01BWF0sIGRvbWFpbl9maXhlZFtBVkFISV9ET01BSU5fTkFNRV9NQVhdOworICAgIHN3X2Rpc2NvdmVyeV9icm93c2VfcmVwbHkgcmVwbHk7CisKKyAgICBhc3NlcnQoYik7CisgICAgYXNzZXJ0KGRhdGEpOworCisgICAgcmVwbHkgPSAoc3dfZGlzY292ZXJ5X2Jyb3dzZV9yZXBseSkgZGF0YS0+cmVwbHk7CisKKyAgICB0eXBlID0gYWRkX3RyYWlsaW5nX2RvdCh0eXBlLCB0eXBlX2ZpeGVkLCBzaXplb2YodHlwZV9maXhlZCkpOworICAgIGRvbWFpbiA9IGFkZF90cmFpbGluZ19kb3QoZG9tYWluLCBkb21haW5fZml4ZWQsIHNpemVvZihkb21haW5fZml4ZWQpKTsKKworICAgIHN3aXRjaCAoZXZlbnQpIHsKKyAgICAgICAgY2FzZSBBVkFISV9CUk9XU0VSX05FVzoKKyAgICAgICAgICAgIHJlcGx5KGRhdGEtPmRpc2NvdmVyeSwgT0lEX0dFVF9JTkRFWChkYXRhKSwgU1dfRElTQ09WRVJZX0JST1dTRV9BRERfU0VSVklDRSwgaW50ZXJmYWNlLCBuYW1lLCB0eXBlLCBkb21haW4sIGRhdGEtPmV4dHJhKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQVZBSElfQlJPV1NFUl9SRU1PVkU6CisgICAgICAgICAgICByZXBseShkYXRhLT5kaXNjb3ZlcnksIE9JRF9HRVRfSU5ERVgoZGF0YSksIFNXX0RJU0NPVkVSWV9CUk9XU0VfUkVNT1ZFX1NFUlZJQ0UsIGludGVyZmFjZSwgbmFtZSwgdHlwZSwgZG9tYWluLCBkYXRhLT5leHRyYSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFWQUhJX0JST1dTRVJfRkFJTFVSRToKKyAgICAgICAgICAgIHJlcGx5KGRhdGEtPmRpc2NvdmVyeSwgT0lEX0dFVF9JTkRFWChkYXRhKSwgU1dfRElTQ09WRVJZX0JST1dTRV9JTlZBTElELCBpbnRlcmZhY2UsIG5hbWUsIHR5cGUsIGRvbWFpbiwgZGF0YS0+ZXh0cmEpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBVkFISV9CUk9XU0VSX0NBQ0hFX0VYSEFVU1RFRDoKKyAgICAgICAgY2FzZSBBVkFISV9CUk9XU0VSX0FMTF9GT1JfTk9XOgorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzd19yZXN1bHQgc3dfZGlzY292ZXJ5X2Jyb3dzZSgKKyAgICBzd19kaXNjb3Zlcnkgc2VsZiwKKyAgICBzd191aW50MzIgaW50ZXJmYWNlX2luZGV4LAorICAgIHN3X2NvbnN0X3N0cmluZyB0eXBlLAorICAgIHN3X2NvbnN0X3N0cmluZyBkb21haW4sCisgICAgc3dfZGlzY292ZXJ5X2Jyb3dzZV9yZXBseSByZXBseSwKKyAgICBzd19vcGFxdWUgZXh0cmEsCisgICAgc3dfZGlzY292ZXJ5X29pZCAqIG9pZCkgeworCisgICAgb2lkX2RhdGEgKmRhdGE7CisgICAgQXZhaGlJZkluZGV4IGlmaW5kZXg7CisgICAgc3dfcmVzdWx0IHJlc3VsdCA9IFNXX0VfVU5LTk9XTjsKKworICAgIGFzc2VydChzZWxmKTsKKyAgICBhc3NlcnQodHlwZSk7CisgICAgYXNzZXJ0KHJlcGx5KTsKKyAgICBhc3NlcnQob2lkKTsKKworICAgIEFWQUhJX1dBUk5fTElOS0FHRTsKKworICAgIGlmICgoKm9pZCA9IG9pZF9hbGxvYyhzZWxmLCBPSURfU0VSVklDRV9CUk9XU0VSKSkgPT0gKHN3X2Rpc2NvdmVyeV9vaWQpIC0xKQorICAgICAgICByZXR1cm4gU1dfRV9VTktOT1dOOworCisgICAgZGF0YSA9IG9pZF9nZXQoc2VsZiwgKm9pZCk7CisgICAgYXNzZXJ0KGRhdGEpOworICAgIGRhdGEtPnJlcGx5ID0gKHN3X3Jlc3VsdCAoKikodm9pZCkpIHJlcGx5OworICAgIGRhdGEtPmV4dHJhID0gZXh0cmE7CisKKyAgICBpZmluZGV4ID0gaW50ZXJmYWNlX2luZGV4ID09IDAgPyBBVkFISV9JRl9VTlNQRUMgOiAoQXZhaGlJZkluZGV4KSBpbnRlcmZhY2VfaW5kZXg7CisKKyAgICBBU1NFUlRfU1VDQ0VTUyhwdGhyZWFkX211dGV4X2xvY2soJnNlbGYtPm11dGV4KSk7CisKKyAgICBpZiAoIShkYXRhLT5vYmplY3QgPSBhdmFoaV9zZXJ2aWNlX2Jyb3dzZXJfbmV3KHNlbGYtPmNsaWVudCwgaWZpbmRleCwgQVZBSElfUFJPVE9fSU5FVCwgdHlwZSwgZG9tYWluLCAwLCBzZXJ2aWNlX2Jyb3dzZXJfY2FsbGJhY2ssIGRhdGEpKSkgeworICAgICAgICByZXN1bHQgPSBtYXBfZXJyb3IoYXZhaGlfY2xpZW50X2Vycm5vKHNlbGYtPmNsaWVudCkpOworICAgICAgICBnb3RvIGZpbmlzaDsKKyAgICB9CisKKyAgICByZXN1bHQgPSBTV19PS0FZOworCitmaW5pc2g6CisKKyAgICBBU1NFUlRfU1VDQ0VTUyhwdGhyZWFkX211dGV4X3VubG9jaygmc2VsZi0+bXV0ZXgpKTsKKworICAgIGlmIChyZXN1bHQgIT0gU1dfT0tBWSkKKyAgICAgICAgaWYgKCpvaWQgIT0gKHN3X2Rpc2NvdmVyeV9vaWQpIC0xKQorICAgICAgICAgICAgc3dfZGlzY292ZXJ5X2NhbmNlbChzZWxmLCAqb2lkKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N3X3Jlc3VsdCBzd19kaXNjb3ZlcnlfY2FuY2VsKHN3X2Rpc2NvdmVyeSBzZWxmLCBzd19kaXNjb3Zlcnlfb2lkIG9pZCkgeworICAgIG9pZF9kYXRhICpkYXRhOworICAgIGFzc2VydChzZWxmKTsKKworICAgIEFWQUhJX1dBUk5fTElOS0FHRTsKKworICAgIGlmICghKGRhdGEgPSBvaWRfZ2V0KHNlbGYsIG9pZCkpKQorICAgICAgICByZXR1cm4gU1dfRV9VTktOT1dOOworCisgICAgaWYgKGRhdGEtPm9iamVjdCkgeworICAgICAgICBzd2l0Y2ggKGRhdGEtPnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgT0lEX1NFUlZJQ0VfQlJPV1NFUjoKKyAgICAgICAgICAgICAgICBhdmFoaV9zZXJ2aWNlX2Jyb3dzZXJfZnJlZShkYXRhLT5vYmplY3QpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIE9JRF9TRVJWSUNFX1JFU09MVkVSOgorICAgICAgICAgICAgICAgIGF2YWhpX3NlcnZpY2VfcmVzb2x2ZXJfZnJlZShkYXRhLT5vYmplY3QpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIE9JRF9ET01BSU5fQlJPV1NFUjoKKyAgICAgICAgICAgICAgICBhdmFoaV9kb21haW5fYnJvd3Nlcl9mcmVlKGRhdGEtPm9iamVjdCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgT0lEX0VOVFJZX0dST1VQOgorICAgICAgICAgICAgICAgIGF2YWhpX2VudHJ5X2dyb3VwX2ZyZWUoZGF0YS0+b2JqZWN0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBPSURfVU5VU0VEOgorICAgICAgICAgICAgOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGRhdGEtPnNlcnZpY2VfZGF0YSkgeworICAgICAgICBhc3NlcnQoZGF0YS0+dHlwZSA9PSBPSURfRU5UUllfR1JPVVApOworICAgICAgICBzZXJ2aWNlX2RhdGFfZnJlZShzZWxmLCBkYXRhLT5zZXJ2aWNlX2RhdGEpOworICAgIH0KKworICAgIG9pZF9yZWxlYXNlKHNlbGYsIG9pZCk7CisKKyAgICByZXR1cm4gU1dfT0tBWTsKK30KKworc3dfcmVzdWx0IHN3X2Rpc2NvdmVyeV9pbml0X3dpdGhfZmxhZ3MoCisgICAgc3dfZGlzY292ZXJ5ICogc2VsZiwKKyAgICBzd19kaXNjb3ZlcnlfaW5pdF9mbGFncyBmbGFncykgeworCisgICAgYXNzZXJ0KHNlbGYpOworCisgICAgQVZBSElfV0FSTl9MSU5LQUdFOworCisgICAgaWYgKGZsYWdzICE9IFNXX0RJU0NPVkVSWV9VU0VfU0hBUkVEX1NFUlZJQ0UpCisgICAgICAgIHJldHVybiBTV19FX05PX0lNUEw7CisKKyAgICByZXR1cm4gc3dfZGlzY292ZXJ5X2luaXQoc2VsZik7Cit9CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktY29tcGF0LWhvd2wvaW5jbHVkZS9jb3JieS9idWZmZXIuaCBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtaG93bC9pbmNsdWRlL2NvcmJ5L2J1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjNDQxNmUKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tcGF0LWhvd2wvaW5jbHVkZS9jb3JieS9idWZmZXIuaApAQCAtMCwwICsxLDMzMCBAQAorI2lmbmRlZiBfc3dfY29yYnlfYnVmZmVyX2gKKyNkZWZpbmUgX3N3X2NvcmJ5X2J1ZmZlcl9oCisKKy8qCisgKiBDb3B5cmlnaHQgMjAwMywgMjAwNCBQb3JjaGRvZyBTb2Z0d2FyZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKglSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICoJYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqCQkxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKgkJICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCQkyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKgkJICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICoJCSAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqCVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgUE9SQ0hET0cgU09GVFdBUkUgYGBBUyBJUycnIEFORCBBTlkKKyAqCUVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqCVdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqCUlOIE5PIEVWRU5UIFNIQUxMIFRIRSBIT1dMIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqCUlORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICoJQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqCURBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqCU9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UKKyAqCU9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICoJT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqCVRoZSB2aWV3cyBhbmQgY29uY2x1c2lvbnMgY29udGFpbmVkIGluIHRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbiBhcmUgdGhvc2UKKyAqCW9mIHRoZSBhdXRob3JzIGFuZCBzaG91bGQgbm90IGJlIGludGVycHJldGVkIGFzIHJlcHJlc2VudGluZyBvZmZpY2lhbCBwb2xpY2llcywKKyAqCWVpdGhlciBleHByZXNzZWQgb3IgaW1wbGllZCwgb2YgUG9yY2hkb2cgU29mdHdhcmUuCisgKi8KKworI2luY2x1ZGUgPHNhbHQvc2FsdC5oPgorI2luY2x1ZGUgPGNvcmJ5L2NvcmJ5Lmg+CisKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworCitzdHJ1Y3QJCQkJCQkJCQkJX3N3X2NvcmJ5X2J1ZmZlcjsKK3R5cGVkZWYgc3RydWN0IF9zd19jb3JieV9idWZmZXIJKglzd19jb3JieV9idWZmZXI7CitzdHJ1Y3QJCQkJCQkJCQkJX3N3X2NvcmJ5X29iamVjdDsKK3R5cGVkZWYgc3dfb3BhcXVlCQkJCQkJCXN3X2NvcmJ5X2J1ZmZlcl9kZWxlZ2F0ZTsKK3R5cGVkZWYgc3dfb3BhcXVlCQkJCQkJCXN3X2NvcmJ5X2J1ZmZlcl9vYnNlcnZlcjsKKworCit0eXBlZGVmIGVudW0gX3N3X2NvcmJ5X2J1ZmZlcl9wYWQKK3sKKwlTV19DT1JCWV9CVUZGRVJfUEFEX05PTkUsCisJU1dfQ09SQllfQlVGRkVSX1BBRF9BTElHTl8yLAorCVNXX0NPUkJZX0JVRkZFUl9QQURfQUxJR05fNCwKKwlTV19DT1JCWV9CVUZGRVJfUEFEX0FMSUdOXzgsCisJU1dfQ09SQllfQlVGRkVSX1BBRF9BTElHTl8xNiwKKwlTV19DT1JCWV9CVUZGRVJfUEFEX0FMSUdOXzMyCit9IHN3X2NvcmJ5X2J1ZmZlcl9wYWQ7CisKKwordHlwZWRlZiBzd19yZXN1bHQKKyhIT1dMX0FQSSogc3dfY29yYnlfYnVmZmVyX3dyaXR0ZW5fZnVuYykoCisJCQkJCQkJCXN3X2NvcmJ5X2J1ZmZlcl9vYnNlcnZlcglvYnNlcnZlciwKKwkJCQkJCQkJc3dfY29yYnlfYnVmZmVyCQkJCWJ1ZmZlciwKKwkJCQkJCQkJc3dfcmVzdWx0CQkJCQkJcmVzdWx0LAorCQkJCQkJCQlzd19zaXplX3QJCQkJCQlieXRlc1dyaXR0ZW4sCisJCQkJCQkJCXN3X29wYXF1ZV90CQkJCQkJZXh0cmEpOworCisKK3R5cGVkZWYgc3dfcmVzdWx0CisoSE9XTF9BUEkqIHN3X2NvcmJ5X2J1ZmZlcl9vdmVyZmxvd19mdW5jKSgKKwkJCQkJCQkJc3dfY29yYnlfYnVmZmVyX2RlbGVnYXRlCWRlbGVnYXRlLAorCQkJCQkJCQlzd19jb3JieV9idWZmZXIJCQkJYnVmZmVyLAorCQkJCQkJCQlzd191aW50OAkJCQkJCW9jdGV0LAorCQkJCQkJCQlzd191aW50OAkJCQkJKioJYmFzZSwKKwkJCQkJCQkJc3dfdWludDgJCQkJCSoqCWJwdHIsCisJCQkJCQkJCXN3X3VpbnQ4CQkJCQkqKgllcHRyLAorCQkJCQkJCQlzd191aW50OAkJCQkJKioJZW5kLAorCQkJCQkJCQlzd19vcGFxdWVfdAkJCQkJCWV4dHJhKTsKKworCit0eXBlZGVmIHN3X3Jlc3VsdAorKEhPV0xfQVBJKiBzd19jb3JieV9idWZmZXJfdW5kZXJmbG93X2Z1bmMpKAorCQkJCQkJCQlzd19jb3JieV9idWZmZXJfZGVsZWdhdGUJZGVsZWdhdGUsCisJCQkJCQkJCXN3X2NvcmJ5X2J1ZmZlcgkJCQlidWZmZXIsCisJCQkJCQkJCXN3X3VpbnQ4CQkJCQkqCW9jdGV0LAorCQkJCQkJCQlzd191aW50OAkJCQkJKioJYmFzZSwKKwkJCQkJCQkJc3dfdWludDgJCQkJCSoqCWJwdHIsCisJCQkJCQkJCXN3X3VpbnQ4CQkJCQkqKgllcHRyLAorCQkJCQkJCQlzd191aW50OAkJCQkJKioJZW5kLAorCQkJCQkJCQlzd19vcGFxdWVfdAkJCQkJCWV4dHJhKTsKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X2NvcmJ5X2J1ZmZlcl9pbml0KAorCQkJCXN3X2NvcmJ5X2J1ZmZlcgkqCXNlbGYpOworCisKK3N3X3Jlc3VsdCBIT1dMX0FQSQorc3dfY29yYnlfYnVmZmVyX2luaXRfd2l0aF9zaXplKAorCQkJCXN3X2NvcmJ5X2J1ZmZlcgkqCXNlbGYsCisJCQkJc3dfc2l6ZV90CQkJCXNpemUpOworCisKK3N3X3Jlc3VsdCBIT1dMX0FQSQorc3dfY29yYnlfYnVmZmVyX2luaXRfd2l0aF9kZWxlZ2F0ZSgKKwkJCQlzd19jb3JieV9idWZmZXIJCQkJCSoJc2VsZiwKKwkJCQlzd19jb3JieV9idWZmZXJfZGVsZWdhdGUJCQlkZWxlZ2F0ZSwKKwkJCQlzd19jb3JieV9idWZmZXJfb3ZlcmZsb3dfZnVuYwkJb3ZlcmZsb3csCisJCQkJc3dfY29yYnlfYnVmZmVyX3VuZGVyZmxvd19mdW5jCXVuZGVyZmxvdywKKwkJCQlzd19vcGFxdWVfdAkJCQkJCQkJZXh0cmEpOworCisKK3N3X3Jlc3VsdCBIT1dMX0FQSQorc3dfY29yYnlfYnVmZmVyX2luaXRfd2l0aF9zaXplX2FuZF9kZWxlZ2F0ZSgKKwkJCQlzd19jb3JieV9idWZmZXIJCQkJCSoJc2VsZiwKKwkJCQlzd19zaXplX3QJCQkJCQkJCXNpemUsCisJCQkJc3dfY29yYnlfYnVmZmVyX2RlbGVnYXRlCQkJZGVsZWdhdGUsCisJCQkJc3dfY29yYnlfYnVmZmVyX292ZXJmbG93X2Z1bmMJCW92ZXJmbG93LAorCQkJCXN3X2NvcmJ5X2J1ZmZlcl91bmRlcmZsb3dfZnVuYwl1bmRlcmZsb3csCisJCQkJc3dfb3BhcXVlX3QJCQkJCQkJCWV4dHJhKTsKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X2NvcmJ5X2J1ZmZlcl9maW5hKAorCQkJCXN3X2NvcmJ5X2J1ZmZlcglzZWxmKTsKKworCit2b2lkIEhPV0xfQVBJCitzd19jb3JieV9idWZmZXJfcmVzZXQoCisJCQkJc3dfY29yYnlfYnVmZmVyCXNlbGYpOworCisKK3N3X3Jlc3VsdCBIT1dMX0FQSQorc3dfY29yYnlfYnVmZmVyX3NldF9vY3RldHMoCisJCQkJc3dfY29yYnlfYnVmZmVyCXNlbGYsCisJCQkJc3dfb2N0ZXRzCQkJb2N0ZXRzLAorCQkJCXN3X3NpemVfdAkJCXNpemUpOworCisKK3N3X29jdGV0cyBIT1dMX0FQSQorc3dfY29yYnlfYnVmZmVyX29jdGV0cygKKwkJCQlzd19jb3JieV9idWZmZXIJc2VsZik7CisKKworc3dfc2l6ZV90IEhPV0xfQVBJCitzd19jb3JieV9idWZmZXJfYnl0ZXNfdXNlZCgKKwkJCQlzd19jb3JieV9idWZmZXIJc2VsZik7CisKKworc3dfc2l6ZV90IEhPV0xfQVBJCitzd19jb3JieV9idWZmZXJfc2l6ZSgKKwkJCQlzd19jb3JieV9idWZmZXIJc2VsZik7CisKKworc3dfcmVzdWx0IEhPV0xfQVBJCitzd19jb3JieV9idWZmZXJfcHV0X2ludDgoCisJCQkJc3dfY29yYnlfYnVmZmVyCXNlbGYsCisJCQkJc3dfaW50OAkJCXZhbCk7CisKKworc3dfcmVzdWx0IEhPV0xfQVBJCitzd19jb3JieV9idWZmZXJfcHV0X3VpbnQ4KAorCQkJCXN3X2NvcmJ5X2J1ZmZlcglzZWxmLAorCQkJCXN3X3VpbnQ4CQkJdmFsKTsKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X2NvcmJ5X2J1ZmZlcl9wdXRfaW50MTYoCisJCQkJc3dfY29yYnlfYnVmZmVyCXNlbGYsCisJCQkJc3dfaW50MTYJCQl2YWwpOworCisKK3N3X3Jlc3VsdCBIT1dMX0FQSQorc3dfY29yYnlfYnVmZmVyX3B1dF91aW50MTYoCisJCQkJc3dfY29yYnlfYnVmZmVyCXNlbGYsCisJCQkJc3dfdWludDE2CQkJdmFsKTsKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X2NvcmJ5X2J1ZmZlcl9wdXRfaW50MzIoCisJCQkJc3dfY29yYnlfYnVmZmVyCXNlbGYsCisJCQkJc3dfaW50MzIJCQl2YWwpOworCisKK3N3X3Jlc3VsdCBIT1dMX0FQSQorc3dfY29yYnlfYnVmZmVyX3B1dF91aW50MzIoCisJCQkJc3dfY29yYnlfYnVmZmVyCXNlbGYsCisJCQkJc3dfdWludDMyCQkJdmFsKTsKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X2NvcmJ5X2J1ZmZlcl9wdXRfb2N0ZXRzKAorCQkJCXN3X2NvcmJ5X2J1ZmZlcglzZWxmLAorCQkJCXN3X2NvbnN0X29jdGV0cwl2YWwsCisJCQkJc3dfc2l6ZV90CQkJc2l6ZSk7CisKKworc3dfcmVzdWx0IEhPV0xfQVBJCitzd19jb3JieV9idWZmZXJfcHV0X3NpemVkX29jdGV0cygKKwkJCQlzd19jb3JieV9idWZmZXIJc2VsZiwKKwkJCQlzd19jb25zdF9vY3RldHMJdmFsLAorCQkJCXN3X3VpbnQzMgkJCWxlbik7CisKKworc3dfcmVzdWx0IEhPV0xfQVBJCitzd19jb3JieV9idWZmZXJfcHV0X2NzdHJpbmcoCisJCQkJc3dfY29yYnlfYnVmZmVyCXNlbGYsCisJCQkJc3dfY29uc3Rfc3RyaW5nCXZhbCk7CisKKworc3dfcmVzdWx0IEhPV0xfQVBJCitzd19jb3JieV9idWZmZXJfcHV0X29iamVjdCgKKwkJCQlzd19jb3JieV9idWZmZXIJCQkJCQlzZWxmLAorCQkJCWNvbnN0IHN0cnVjdCBfc3dfY29yYnlfb2JqZWN0CSoJb2JqZWN0KTsKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X2NvcmJ5X2J1ZmZlcl9wdXRfcGFkKAorCQkJCXN3X2NvcmJ5X2J1ZmZlcgkJCQkJCXNlbGYsCisJCQkJc3dfY29yYnlfYnVmZmVyX3BhZAkJCQkJcGFkKTsKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X2NvcmJ5X2J1ZmZlcl9nZXRfaW50OCgKKwkJCQlzd19jb3JieV9idWZmZXIJc2VsZiwKKwkJCQlzd19pbnQ4CQkqCXZhbCk7CisKKworc3dfcmVzdWx0IEhPV0xfQVBJCitzd19jb3JieV9idWZmZXJfZ2V0X3VpbnQ4KAorCQkJCXN3X2NvcmJ5X2J1ZmZlcglzZWxmLAorCQkJCXN3X3VpbnQ4CQkqCXZhbCk7CisKKworc3dfcmVzdWx0IEhPV0xfQVBJCitzd19jb3JieV9idWZmZXJfZ2V0X2ludDE2KAorCQkJCXN3X2NvcmJ5X2J1ZmZlcglzZWxmLAorCQkJCXN3X2ludDE2CQkqCXZhbCwKKyAgICAgICAgICAgIHN3X3VpbnQ4CQkJZW5kaWFuKTsKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X2NvcmJ5X2J1ZmZlcl9nZXRfdWludDE2KAorCQkJCXN3X2NvcmJ5X2J1ZmZlcglzZWxmLAorCQkJCXN3X3VpbnQxNgkJKgl2YWwsCisgICAgICAgICAgICBzd191aW50OAkJCWVuZGlhbik7CisKKworc3dfcmVzdWx0IEhPV0xfQVBJCitzd19jb3JieV9idWZmZXJfZ2V0X2ludDMyKAorCQkJCXN3X2NvcmJ5X2J1ZmZlcglzZWxmLAorCQkJCXN3X2ludDMyCQkqCXZhbCwKKyAgICAgICAgICAgIHN3X3VpbnQ4CQkJZW5kaWFuKTsKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X2NvcmJ5X2J1ZmZlcl9nZXRfdWludDMyKAorCQkJCXN3X2NvcmJ5X2J1ZmZlcglzZWxmLAorCQkJCXN3X3VpbnQzMgkJKgl2YWwsCisgICAgICAgICAgICBzd191aW50OAkJCWVuZGlhbik7CisKKworc3dfcmVzdWx0IEhPV0xfQVBJCitzd19jb3JieV9idWZmZXJfZ2V0X29jdGV0cygKKwkJCQlzd19jb3JieV9idWZmZXIJc2VsZiwKKwkJCQlzd19vY3RldHMJCQlvY3RldHMsCisJCQkJc3dfc2l6ZV90CQkJc2l6ZSk7CisKKworc3dfcmVzdWx0IEhPV0xfQVBJCitzd19jb3JieV9idWZmZXJfYWxsb2NhdGVfYW5kX2dldF9zaXplZF9vY3RldHMoCisJCQkJc3dfY29yYnlfYnVmZmVyCXNlbGYsCisJCQkJc3dfb2N0ZXRzCQkqCXZhbCwKKwkJCQlzd191aW50MzIJCSoJc2l6ZSwKKyAgICAgICAgICAgIHN3X3VpbnQ4CQkJZW5kaWFuKTsKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X2NvcmJ5X2J1ZmZlcl9nZXRfemVyb2NvcHlfc2l6ZWRfb2N0ZXRzKAorCQkJCXN3X2NvcmJ5X2J1ZmZlcglzZWxmLAorCQkJCXN3X29jdGV0cwkJKgl2YWwsCisJCQkJc3dfdWludDMyCQkqCXNpemUsCisJCQkJc3dfdWludDgJCQllbmRpYW4pOworCisKK3N3X3Jlc3VsdCBIT1dMX0FQSQorc3dfY29yYnlfYnVmZmVyX2dldF9zaXplZF9vY3RldHMoCisJCQkJc3dfY29yYnlfYnVmZmVyCXNlbGYsCisJCQkJc3dfb2N0ZXRzCQkJdmFsLAorCQkJCXN3X3VpbnQzMgkJKglsZW4sCisgICAgICAgICAgICBzd191aW50OAkJCWVuZGlhbik7CisKKworc3dfcmVzdWx0IEhPV0xfQVBJCitzd19jb3JieV9idWZmZXJfYWxsb2NhdGVfYW5kX2dldF9jc3RyaW5nKAorCQkJCXN3X2NvcmJ5X2J1ZmZlcglzZWxmLAorCQkJCXN3X3N0cmluZwkJKgl2YWwsCisJCQkJc3dfdWludDMyCQkqCWxlbiwKKwkJCQlzd191aW50OAkJCWVuZGlhbik7CisKKworc3dfcmVzdWx0IEhPV0xfQVBJCitzd19jb3JieV9idWZmZXJfZ2V0X3plcm9jb3B5X2NzdHJpbmcoCisJCQkJc3dfY29yYnlfYnVmZmVyCXNlbGYsCisJCQkJc3dfc3RyaW5nCQkqCXZhbCwKKwkJCQlzd191aW50MzIJCSoJbGVuLAorCQkJCXN3X3VpbnQ4CQkJZW5kaWFuKTsKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X2NvcmJ5X2J1ZmZlcl9nZXRfY3N0cmluZygKKwkJCQlzd19jb3JieV9idWZmZXIJc2VsZiwKKwkJCQlzd19zdHJpbmcJCQl2YWwsCisJCQkJc3dfdWludDMyCQkqCWxlbiwKKwkJCQlzd191aW50OAkJCWVuZGlhbik7CisKKworc3dfcmVzdWx0IEhPV0xfQVBJCitzd19jb3JieV9idWZmZXJfZ2V0X29iamVjdCgKKwkJCQlzd19jb3JieV9idWZmZXIJCQkJc2VsZiwKKwkJCQlzdHJ1Y3QgX3N3X2NvcmJ5X29iamVjdAkqKglvYmplY3QsCisJCQkJc3dfdWludDgJCQkJCQllbmRpYW4pOworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktY29tcGF0LWhvd2wvaW5jbHVkZS9jb3JieS9jaGFubmVsLmggYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tcGF0LWhvd2wvaW5jbHVkZS9jb3JieS9jaGFubmVsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM5MWZiYgotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtaG93bC9pbmNsdWRlL2NvcmJ5L2NoYW5uZWwuaApAQCAtMCwwICsxLDE4NiBAQAorI2lmbmRlZiBfc3dfY29yYnlfY2hhbm5lbF9oCisjZGVmaW5lIF9zd19jb3JieV9jaGFubmVsX2gKKworLyoKKyAqIENvcHlyaWdodCAyMDAzLCAyMDA0IFBvcmNoZG9nIFNvZnR3YXJlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqCVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKglhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICoJCTEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqCQkgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoJCTIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqCQkgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKgkJICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICoJVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBQT1JDSERPRyBTT0ZUV0FSRSBgYEFTIElTJycgQU5EIEFOWQorICoJRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICoJV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICoJSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEhPV0wgUFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICoJSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKglCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICoJREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICoJT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRQorICoJT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKglPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoJVGhlIHZpZXdzIGFuZCBjb25jbHVzaW9ucyBjb250YWluZWQgaW4gdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uIGFyZSB0aG9zZQorICoJb2YgdGhlIGF1dGhvcnMgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgcmVwcmVzZW50aW5nIG9mZmljaWFsIHBvbGljaWVzLAorICoJZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBvZiBQb3JjaGRvZyBTb2Z0d2FyZS4KKyAqLworCisjaW5jbHVkZSA8c2FsdC9zYWx0Lmg+CisjaW5jbHVkZSA8c2FsdC9zb2NrZXQuaD4KKyNpbmNsdWRlIDxjb3JieS9jb3JieS5oPgorI2luY2x1ZGUgPGNvcmJ5L2J1ZmZlci5oPgorCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKK3N0cnVjdAkJCQkJCQkJCQkJCV9zd19jb3JieV9jaGFubmVsOwordHlwZWRlZiBzdHJ1Y3QgX3N3X2NvcmJ5X2NoYW5uZWwJCQkqCXN3X2NvcmJ5X2NoYW5uZWw7CitzdHJ1Y3QJCQkJCQkJCQkJCQlfc3dfY29yYnlfbWVzc2FnZTsKK3N0cnVjdAkJCQkJCQkJCQkJCV9zd19jb3JieV9wcm9maWxlOwordHlwZWRlZiBzdHJ1Y3QgX3N3X2NvcmJ5X3Byb2ZpbGUJCQkqCXN3X2NvcmJ5X3Byb2ZpbGU7Cit0eXBlZGVmIHN0cnVjdCBfc3dfY29yYnlfcHJvZmlsZSBjb25zdAkqCXN3X2NvbnN0X2NvcmJ5X3Byb2ZpbGU7CisKKwordHlwZWRlZiBlbnVtIF9zd19jb3JieV9yZXBseV9zdGF0dXMKK3sKKyAgIFNXX0NPUkJZX05PX0VYQ0VQVElPTgkJPQkwLAorICAgU1dfQ09SQllfU1lTVEVNX0VYQ0VQVElPTgk9CTEsCisgICBTV19DT1JCWV9VU0VSX0VYQ0VQVElPTgkJPQkyLAorICAgU1dfQ09SQllfTE9DQVRJT05fRk9SV0FSRAk9CTMKK30gc3dfY29yYnlfcmVwbHlfc3RhdHVzOworCisKK3R5cGVkZWYgc3dfcmVzdWx0CisoSE9XTF9BUEkgKnN3X2NvcmJ5X2NoYW5uZWxfd2lsbF9zZW5kX2Z1bmMpKAorCQkJCQkJc3dfY29yYnlfY2hhbm5lbAkJCWNoYW5uZWwsCisJCQkJCQlzd19vY3RldHMJCQkJCWJ5dGVzLAorCQkJCQkJc3dfc2l6ZV90CQkJCQlsZW4sCisJCQkJCQlzd19vcGFxdWVfdAkJCQkJZXh0cmEpOworCisKK3R5cGVkZWYgc3dfcmVzdWx0CisoSE9XTF9BUEkgKnN3X2NvcmJ5X2NoYW5uZWxfZGlkX3JlYWRfZnVuYykoCisJCQkJCQlzd19jb3JieV9jaGFubmVsCQkJY2hhbm5lbCwKKwkJCQkJCXN3X29jdGV0cwkJCQkJYnl0ZXMsCisJCQkJCQlzd19zaXplX3QJCQkJCWxlbiwKKwkJCQkJCXN3X29wYXF1ZV90CQkJCQlleHRyYSk7CisKKwordHlwZWRlZiB2b2lkCisoSE9XTF9BUEkgKnN3X2NvcmJ5X2NoYW5uZWxfY2xlYW51cF9mdW5jKSgKKwkJCQkJCXN3X2NvcmJ5X2NoYW5uZWwJCQljaGFubmVsKTsKKworCit0eXBlZGVmIHN0cnVjdCBfc3dfY29yYnlfY2hhbm5lbF9kZWxlZ2F0ZQoreworCXN3X29wYXF1ZV90CQkJCQkJCQltX2RlbGVnYXRlOworCXN3X2NvcmJ5X2NoYW5uZWxfd2lsbF9zZW5kX2Z1bmMJbV93aWxsX3NlbmRfZnVuYzsKKwlzd19jb3JieV9jaGFubmVsX2RpZF9yZWFkX2Z1bmMJbV9kaWRfcmVhZF9mdW5jOworCXN3X2NvcmJ5X2NoYW5uZWxfY2xlYW51cF9mdW5jCQltX2NsZWFudXBfZnVuYzsKKwlzd19vcGFxdWVfdAkJCQkJCQkJbV9leHRyYTsKK30gKiBzd19jb3JieV9jaGFubmVsX2RlbGVnYXRlOworCisKK3N3X3Jlc3VsdCBIT1dMX0FQSQorc3dfY29yYnlfY2hhbm5lbF9zdGFydF9yZXF1ZXN0KAorCQkJCQkJCXN3X2NvcmJ5X2NoYW5uZWwJCQkJc2VsZiwKKwkJCQkJCQlzd19jb25zdF9jb3JieV9wcm9maWxlCQlwcm9maWxlLAorCQkJCQkJCXN0cnVjdCBfc3dfY29yYnlfYnVmZmVyCSoqCWJ1ZmZlciwKKwkJCQkJCQlzd19jb25zdF9zdHJpbmcJCQkJb3AsCisJCQkJCQkJc3dfdWludDMyCQkJCQkJb3BsZW4sCisJCQkJCQkJc3dfYm9vbAkJCQkJCXJlcGx5X2V4cGVjdGVkKTsKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X2NvcmJ5X2NoYW5uZWxfc3RhcnRfcmVwbHkoCisJCQkJCQkJc3dfY29yYnlfY2hhbm5lbAkJCQlzZWxmLAorCQkJCQkJCXN0cnVjdCBfc3dfY29yYnlfYnVmZmVyCSoqCWJ1ZmZlciwKKwkJCQkJCQlzd191aW50MzIJCQkJCQlyZXF1ZXN0X2lkLAorCQkJCQkJCXN3X2NvcmJ5X3JlcGx5X3N0YXR1cwkJc3RhdHVzKTsKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X2NvcmJ5X2NoYW5uZWxfc2VuZCgKKwkJCQkJCQlzd19jb3JieV9jaGFubmVsCQkJCQlzZWxmLAorCQkJCQkJCXN0cnVjdCBfc3dfY29yYnlfYnVmZmVyCQkqCWJ1ZmZlciwKKwkJCQkJCQlzd19jb3JieV9idWZmZXJfb2JzZXJ2ZXIJCW9ic2VydmVyLAorCQkJCQkJCXN3X2NvcmJ5X2J1ZmZlcl93cml0dGVuX2Z1bmMJZnVuYywKKwkJCQkJCQlzd19vcGFxdWVfdAkJCQkJCQlleHRyYSk7CisKKworc3dfcmVzdWx0IEhPV0xfQVBJCitzd19jb3JieV9jaGFubmVsX3JlY3YoCisJCQkJCQkJc3dfY29yYnlfY2hhbm5lbAkJCQkJc2VsZiwKKwkJCQkJCQlzd19zYWx0CQkJCQkJCSoJc2FsdCwKKwkJCQkJCQlzdHJ1Y3QgX3N3X2NvcmJ5X21lc3NhZ2UJKioJbWVzc2FnZSwKKwkJCQkJCQlzd191aW50MzIJCQkJCQkqCXJlcXVlc3RfaWQsCisJCQkJCQkJc3dfc3RyaW5nCQkJCQkJKglvcCwKKwkJCQkJCQlzd191aW50MzIJCQkJCQkqCW9wX2xlbiwKKwkJCQkJCQlzdHJ1Y3QgX3N3X2NvcmJ5X2J1ZmZlcgkJKioJYnVmZmVyLAorCQkJCQkJCXN3X3VpbnQ4CQkJCQkJKgllbmRpYW4sCisJCQkJCQkJc3dfYm9vbAkJCQkJCQlibG9jayk7CisKKworc3dfcmVzdWx0IEhPV0xfQVBJCitzd19jb3JieV9jaGFubmVsX2xhc3RfcmVjdl9mcm9tKAorCQkJCQkJCXN3X2NvcmJ5X2NoYW5uZWwJCQkJCXNlbGYsCisJCQkJCQkJc3dfaXB2NF9hZGRyZXNzCQkJCSoJZnJvbSwKKwkJCQkJCQlzd19wb3J0CQkJCQkJKglmcm9tX3BvcnQpOworCisKK3N3X3Jlc3VsdCBIT1dMX0FQSQorc3dfY29yYnlfY2hhbm5lbF9mZigKKwkJCQkJCQlzd19jb3JieV9jaGFubmVsCQkJCQlzZWxmLAorCQkJCQkJCXN0cnVjdCBfc3dfY29yYnlfYnVmZmVyCQkqCWJ1ZmZlcik7CisKKworc3dfc29ja2V0IEhPV0xfQVBJCitzd19jb3JieV9jaGFubmVsX3NvY2tldCgKKwkJCQkJCQlzd19jb3JieV9jaGFubmVsCQkJCXNlbGYpOworCisKK3N3X3Jlc3VsdCBIT1dMX0FQSQorc3dfY29yYnlfY2hhbm5lbF9yZXRhaW4oCisJCQkJCQkJc3dfY29yYnlfY2hhbm5lbAkJCQlzZWxmKTsKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X2NvcmJ5X2NoYW5uZWxfc2V0X2RlbGVnYXRlKAorCQkJCQkJCXN3X2NvcmJ5X2NoYW5uZWwJCQkJc2VsZiwKKwkJCQkJCQlzd19jb3JieV9jaGFubmVsX2RlbGVnYXRlCWRlbGVnYXRlKTsKKworCitzd19jb3JieV9jaGFubmVsX2RlbGVnYXRlIEhPV0xfQVBJCitzd19jb3JieV9jaGFubmVsX2dldF9kZWxlZ2F0ZSgKKwkJCQkJCQlzd19jb3JieV9jaGFubmVsCQkJCXNlbGYpOworCisKK3ZvaWQgSE9XTF9BUEkKK3N3X2NvcmJ5X2NoYW5uZWxfc2V0X2FwcF9kYXRhKAorCQkJCQkJCXN3X2NvcmJ5X2NoYW5uZWwJCQkJc2VsZiwKKwkJCQkJCQlzd19vcGFxdWUJCQkJCQlhcHBfZGF0YSk7CisKKworc3dfb3BhcXVlIEhPV0xfQVBJCitzd19jb3JieV9jaGFubmVsX2dldF9hcHBfZGF0YSgKKwkJCQkJCQlzd19jb3JieV9jaGFubmVsCQkJCXNlbGYpOworCisKK3N3X3Jlc3VsdCBIT1dMX0FQSQorc3dfY29yYnlfY2hhbm5lbF9maW5hKAorCQkJCQkJCXN3X2NvcmJ5X2NoYW5uZWwJCQkJc2VsZik7CisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtaG93bC9pbmNsdWRlL2NvcmJ5L2NvcmJ5LmggYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tcGF0LWhvd2wvaW5jbHVkZS9jb3JieS9jb3JieS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlMDY5ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tcGF0LWhvd2wvaW5jbHVkZS9jb3JieS9jb3JieS5oCkBAIC0wLDAgKzEsNjggQEAKKyNpZm5kZWYgX2NvcmJ5X2NvcmJ5X2gKKyNkZWZpbmUgX2NvcmJ5X2NvcmJ5X2gKKworLyoKKyAqIENvcHlyaWdodCAyMDAzLCAyMDA0IFBvcmNoZG9nIFNvZnR3YXJlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqCVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKglhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICoJCTEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqCQkgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoJCTIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqCQkgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKgkJICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICoJVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBQT1JDSERPRyBTT0ZUV0FSRSBgYEFTIElTJycgQU5EIEFOWQorICoJRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICoJV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICoJSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEhPV0wgUFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICoJSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKglCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICoJREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICoJT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRQorICoJT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKglPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoJVGhlIHZpZXdzIGFuZCBjb25jbHVzaW9ucyBjb250YWluZWQgaW4gdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uIGFyZSB0aG9zZQorICoJb2YgdGhlIGF1dGhvcnMgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgcmVwcmVzZW50aW5nIG9mZmljaWFsIHBvbGljaWVzLAorICoJZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBvZiBQb3JjaGRvZyBTb2Z0d2FyZS4KKyAqLworCisjaW5jbHVkZSA8c2FsdC9wbGF0Zm9ybS5oPgorCisvKgorICogY29yYnkgbGltaXRzCisgKi8KKyNkZWZpbmUgU1dfQ09SQllfT0lEX0xFTgkJMzIKKworCisvKgorICogcHJvdG9jb2wgdGFncy4gIHRoZSBvbmx5IHN0YW5kYXJkIG9uZSBpcyBUQUdfSU5URVJORVRfSUlPUC4KKyAqIHRoZSBvdGhlcnMgYXJlIHByb3ByaWV0YXJ5IHBhbmRvcmEgY29yYnkgcHJvdG9jb2xzLgorICovCisjZGVmaW5lIFNXX1RBR19JTlRFUk5FVF9JT1AJMAorI2RlZmluZSBTV19UQUdfVUlPUAkJCQkyNTAKKyNkZWZpbmUgU1dfVEFHX01JT1AJCQkJMjUxCisjZGVmaW5lIFNXX01JT1BfQUREUgkJCQkiMjMxLjI1NS4yNTUuMjUwIgordHlwZWRlZiBzd191aW50MzIJCQkJc3dfY29yYnlfcHJvdG9jb2xfdGFnOworCisKKy8qCisgKiBlcnJvciBjb2RlcworICovCisjZGVmaW5lIFNXX0VfQ09SQllfQkFTRQkJCQkJMHg4MDAwMDUwMAorI2RlZmluZSBTV19FX0NPUkJZX1VOS05PV04JCQkJKFNXX0VfQ09SQllfQkFTRSArIDApCisjZGVmaW5lIFNXX0VfQ09SQllfQkFEX0NPTkZJRwkJCShTV19FX0NPUkJZX0JBU0UgKyAxKQorI2RlZmluZSBTV19FX0NPUkJZX05PX0lOVEVSRkFDRQkJKFNXX0VfQ09SQllfQkFTRSArIDIpCisjZGVmaW5lIFNXX0VfQ09SQllfQkFEX1VSTAkJCQkoU1dfRV9DT1JCWV9CQVNFICsgMykKKyNkZWZpbmUgU1dfRV9DT1JCWV9CQURfTkFNRQkJCShTV19FX0NPUkJZX0JBU0UgKyA0KQorI2RlZmluZSBTV19FX0NPUkJZX0JBRF9NRVNTQUdFCQkoU1dfRV9DT1JCWV9CQVNFICsgNSkKKyNkZWZpbmUgU1dfRV9DT1JCWV9CQURfVkVSU0lPTgkJKFNXX0VfQ09SQllfQkFTRSArIDYpCisjZGVmaW5lIFNXX0VfQ09SQllfQkFEX09JRAkJCQkoU1dfRV9DT1JCWV9CQVNFICsgNykKKyNkZWZpbmUgU1dfRV9DT1JCWV9CQURfT1BFUkFUSU9OCQkoU1dfRV9DT1JCWV9CQVNFICsgOCkKKyNkZWZpbmUgU1dfRV9DT1JCWV9NQVJTSEFMCQkJCShTV19FX0NPUkJZX0JBU0UgKyAxMCkKKyNkZWZpbmUgU1dfRV9DT1JCWV9PQkpFQ1RfTk9UX0VYSVNUCShTV19FX0NPUkJZX0JBU0UgKyAxMSkKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtaG93bC9pbmNsdWRlL2NvcmJ5L21lc3NhZ2UuaCBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtaG93bC9pbmNsdWRlL2NvcmJ5L21lc3NhZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDZjMzU4Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbXBhdC1ob3dsL2luY2x1ZGUvY29yYnkvbWVzc2FnZS5oCkBAIC0wLDAgKzEsNjAgQEAKKyNpZm5kZWYgX3N3X2NvcmJ5X21lc3NhZ2VfaAorI2RlZmluZSBfc3dfY29yYnlfbWVzc2FnZV9oCisKKy8qCisgKiBDb3B5cmlnaHQgMjAwMywgMjAwNCBQb3JjaGRvZyBTb2Z0d2FyZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKglSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICoJYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqCQkxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKgkJICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCQkyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKgkJICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICoJCSAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqCVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgUE9SQ0hET0cgU09GVFdBUkUgYGBBUyBJUycnIEFORCBBTlkKKyAqCUVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqCVdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqCUlOIE5PIEVWRU5UIFNIQUxMIFRIRSBIT1dMIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqCUlORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICoJQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqCURBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqCU9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UKKyAqCU9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICoJT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqCVRoZSB2aWV3cyBhbmQgY29uY2x1c2lvbnMgY29udGFpbmVkIGluIHRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbiBhcmUgdGhvc2UKKyAqCW9mIHRoZSBhdXRob3JzIGFuZCBzaG91bGQgbm90IGJlIGludGVycHJldGVkIGFzIHJlcHJlc2VudGluZyBvZmZpY2lhbCBwb2xpY2llcywKKyAqCWVpdGhlciBleHByZXNzZWQgb3IgaW1wbGllZCwgb2YgUG9yY2hkb2cgU29mdHdhcmUuCisgKi8KKworI2luY2x1ZGUgPGNvcmJ5L2NvcmJ5Lmg+CisKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworCitzdHJ1Y3QgCQkJCQkJCQkJCV9zd19jb3JieV9tZXNzYWdlOwordHlwZWRlZiBzdHJ1Y3QgX3N3X2NvcmJ5X21lc3NhZ2UJKglzd19jb3JieV9tZXNzYWdlOworCisKK3N3X3Jlc3VsdCBIT1dMX0FQSQorc3dfY29yYnlfbWVzc2FnZV9pbml0KAorCQkJCQlzd19jb3JieV9tZXNzYWdlCSoJc2VsZik7CisKKworc3dfcmVzdWx0IEhPV0xfQVBJCitzd19jb3JieV9tZXNzYWdlX2ZpbmEoCisJCQkJCXN3X2NvcmJ5X21lc3NhZ2UJc2VsZik7CisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtaG93bC9pbmNsdWRlL2NvcmJ5L29iamVjdC5oIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbXBhdC1ob3dsL2luY2x1ZGUvY29yYnkvb2JqZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNmZDUxNgotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtaG93bC9pbmNsdWRlL2NvcmJ5L29iamVjdC5oCkBAIC0wLDAgKzEsMTEzIEBACisjaWZuZGVmIF9jb3JieV9vYmplY3RfaAorI2RlZmluZSBfY29yYnlfb2JqZWN0X2gKKworLyoKKyAqIENvcHlyaWdodCAyMDAzLCAyMDA0IFBvcmNoZG9nIFNvZnR3YXJlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqCVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKglhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICoJCTEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqCQkgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoJCTIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqCQkgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKgkJICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICoJVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBQT1JDSERPRyBTT0ZUV0FSRSBgYEFTIElTJycgQU5EIEFOWQorICoJRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICoJV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICoJSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEhPV0wgUFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICoJSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKglCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICoJREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICoJT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRQorICoJT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKglPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoJVGhlIHZpZXdzIGFuZCBjb25jbHVzaW9ucyBjb250YWluZWQgaW4gdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uIGFyZSB0aG9zZQorICoJb2YgdGhlIGF1dGhvcnMgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgcmVwcmVzZW50aW5nIG9mZmljaWFsIHBvbGljaWVzLAorICoJZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBvZiBQb3JjaGRvZyBTb2Z0d2FyZS4KKyAqLworCisjaW5jbHVkZSA8c2FsdC9zYWx0Lmg+CisjaW5jbHVkZSA8Y29yYnkvbWVzc2FnZS5oPgorI2luY2x1ZGUgPGNvcmJ5L2NoYW5uZWwuaD4KKyNpbmNsdWRlIDxjb3JieS9idWZmZXIuaD4KKyNpbmNsdWRlIDxjb3JieS9jb3JieS5oPgorCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCitzdHJ1Y3QJCQkJCQkJCQkJX3N3X2NvcmJ5X29yYjsKK3N0cnVjdAkJCQkJCQkJCQlfc3dfY29yYnlfb2JqZWN0OwordHlwZWRlZiBzdHJ1Y3QgX3N3X2NvcmJ5X29iamVjdAkqCXN3X2NvcmJ5X29iamVjdDsKK3R5cGVkZWYgc3dfb3BhcXVlCQkJCQkJCXN3X2NvcmJ5X29iamVjdF9zZW5kX2NvbXBsZXRpb25faGFuZGxlcjsKK3R5cGVkZWYgdm9pZAorKEhPV0xfQVBJICpzd19jb3JieV9vYmplY3Rfc2VuZF9jb21wbGV0aW9uX2Z1bmMpKAorCQkJCQkJCQkJCQkJc3dfY29yYnlfb2JqZWN0CW9iamVjdCwKKwkJCQkJCQkJCQkJCXN3X2NvcmJ5X2J1ZmZlcglidWZmZXIsCisJCQkJCQkJCQkJCQlzd19yZXN1bHQJCQlyZXN1bHQpOworCisKKworc3dfcmVzdWx0IEhPV0xfQVBJCitzd19jb3JieV9vYmplY3RfaW5pdF9mcm9tX3VybCgKKwkJCQkJCQlzd19jb3JieV9vYmplY3QJCQkqCXNlbGYsCisJCQkJCQkJc3RydWN0IF9zd19jb3JieV9vcmIJCSoJb3JiLAorCQkJCQkJCXN3X2NvbnN0X3N0cmluZwkJCQl1cmwsCisJCQkJCQkJc3dfc29ja2V0X29wdGlvbnMJCQkJb3B0aW9ucywKKwkJCQkJCQlzd191aW50MzIJCQkJCQkJYnVmc2l6ZSk7CisKKworc3dfcmVzdWx0IEhPV0xfQVBJCitzd19jb3JieV9vYmplY3RfZmluYSgKKwkJCQkJCQlzd19jb3JieV9vYmplY3QJCXNlbGYpOworCisKK3N3X3Jlc3VsdCBIT1dMX0FQSQorc3dfY29yYnlfb2JqZWN0X3N0YXJ0X3JlcXVlc3QoCisJCQkJCQkJc3dfY29yYnlfb2JqZWN0IAkJc2VsZiwKKwkJCQkJCQlzd19jb25zdF9zdHJpbmcJCW9wLAorCQkJCQkJCXN3X3VpbnQzMgkJCQkJb3BfbGVuLAorCQkJCQkJCXN3X2Jvb2wJCQkJCXJlcGx5X2V4cGVjdGVkLAorCQkJCQkJCXN3X2NvcmJ5X2J1ZmZlcgkqCWJ1ZmZlcik7CisKKworc3dfcmVzdWx0IEhPV0xfQVBJCitzd19jb3JieV9vYmplY3Rfc2VuZCgKKwkJCQkJCQlzd19jb3JieV9vYmplY3QJCQkJCXNlbGYsCisJCQkJCQkJc3dfY29yYnlfYnVmZmVyCQkJCQlidWZmZXIsCisJCQkJCQkJc3dfY29yYnlfYnVmZmVyX29ic2VydmVyCQlvYnNlcnZlciwKKwkJCQkJCQlzd19jb3JieV9idWZmZXJfd3JpdHRlbl9mdW5jCWZ1bmMsCisJCQkJCQkJc3dfb3BhcXVlCQkJCQkJCWV4dHJhKTsKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X2NvcmJ5X29iamVjdF9yZWN2KAorCQkJCQkJCXN3X2NvcmJ5X29iamVjdAkJc2VsZiwKKwkJCQkJCQlzd19jb3JieV9tZXNzYWdlCSoJbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgIHN3X2NvcmJ5X2J1ZmZlcgkqCWJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgIHN3X3VpbnQ4CQkJCSoJZW5kaWFuLAorICAgICAgICAgICAgICAgICAgICAgc3dfYm9vbAkJCQkJYmxvY2spOworCisKK3N3X3Jlc3VsdCBIT1dMX0FQSQorc3dfY29yYnlfb2JqZWN0X2NoYW5uZWwoCisJCQkJCQkJc3dfY29yYnlfb2JqZWN0CQlzZWxmLAorCQkJCQkJCXN3X2NvcmJ5X2NoYW5uZWwJKgljaGFubmVsKTsKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X2NvcmJ5X29iamVjdF9zZXRfY2hhbm5lbCgKKwkJCQkJCQlzd19jb3JieV9vYmplY3QJCXNlbGYsCisJCQkJCQkJc3dfY29yYnlfY2hhbm5lbAkJY2hhbm5lbCk7CisKKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCit9CisjZW5kaWYKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtaG93bC9pbmNsdWRlL2NvcmJ5L29yYi5oIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbXBhdC1ob3dsL2luY2x1ZGUvY29yYnkvb3JiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZhZjU3OAotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtaG93bC9pbmNsdWRlL2NvcmJ5L29yYi5oCkBAIC0wLDAgKzEsMTk5IEBACisjaWZuZGVmIF9jb3JieV9vcmJfaAorI2RlZmluZSBfY29yYnlfb3JiX2gKKworLyoKKyAqIENvcHlyaWdodCAyMDAzLCAyMDA0IFBvcmNoZG9nIFNvZnR3YXJlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqCVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKglhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICoJCTEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqCQkgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoJCTIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqCQkgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKgkJICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICoJVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBQT1JDSERPRyBTT0ZUV0FSRSBgYEFTIElTJycgQU5EIEFOWQorICoJRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICoJV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICoJSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEhPV0wgUFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICoJSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKglCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICoJREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICoJT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRQorICoJT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKglPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoJVGhlIHZpZXdzIGFuZCBjb25jbHVzaW9ucyBjb250YWluZWQgaW4gdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uIGFyZSB0aG9zZQorICoJb2YgdGhlIGF1dGhvcnMgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgcmVwcmVzZW50aW5nIG9mZmljaWFsIHBvbGljaWVzLAorICoJZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBvZiBQb3JjaGRvZyBTb2Z0d2FyZS4KKyAqLworCisjaW5jbHVkZSA8c2FsdC9zYWx0Lmg+CisjaW5jbHVkZSA8c2FsdC9hZGRyZXNzLmg+CisjaW5jbHVkZSA8c2FsdC9zb2NrZXQuaD4KKyNpbmNsdWRlIDxjb3JieS9jb3JieS5oPgorCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKworc3RydWN0CQkJCQkJCQkJX3N3X2NvcmJ5X29yYjsKK3R5cGVkZWYgc3RydWN0IF9zd19jb3JieV9vcmIJKglzd19jb3JieV9vcmI7Cit0eXBlZGVmIHN3X29wYXF1ZQkJCQkJCXN3X2NvcmJ5X29yYl9vYnNlcnZlcjsKK3R5cGVkZWYgc3dfb3BhcXVlCQkJCQkJc3dfY29yYnlfc2VydmFudDsKK3N0cnVjdAkJCQkJCQkJCV9zd19jb3JieV9vYmplY3Q7CitzdHJ1Y3QJCQkJCQkJCQlfc3dfY29yYnlfY2hhbm5lbDsKK3N0cnVjdAkJCQkJCQkJCV9zd19jb3JieV9tZXNzYWdlOworc3RydWN0CQkJCQkJCQkJX3N3X2NvcmJ5X2J1ZmZlcjsKKwordHlwZWRlZiBzd19yZXN1bHQKKyhIT1dMX0FQSSAqc3dfY29yYnlfb3JiX2FjY2VwdF9jaGFubmVsX2Z1bmMpKAorCQkJCQkJCQlzd19jb3JieV9vcmIJCQkJCQlvcmIsCisJCQkJCQkJCXN0cnVjdCBfc3dfY29yYnlfY2hhbm5lbAkqCWNoYW5uZWwpOworCisKK3R5cGVkZWYgc3RydWN0IF9zd19jb3JieV9vcmJfZGVsZWdhdGUKK3sKKwlzd19vcGFxdWUJCQkJCQkJCW1fZGVsZWdhdGU7CisJc3dfY29yYnlfb3JiX2FjY2VwdF9jaGFubmVsX2Z1bmMJbV9hY2NlcHRfY2hhbm5lbF9mdW5jOworCXN3X29wYXF1ZQkJCQkJCQkJbV9leHRyYTsKK30gKiBzd19jb3JieV9vcmJfZGVsZWdhdGU7CisKKwordHlwZWRlZiBzdHJ1Y3QgX3N3X2NvcmJ5X29yYl9jb25maWcKK3sKKwlzd19zdHJpbmcJbV9uYW1lOworCXN3X3VpbnQzMgltX3RhZzsKKwlzd19zdHJpbmcJbV9ob3N0OworCXN3X3BvcnQJbV9wb3J0OworCXN3X3N0cmluZwltX29wdGlvbnM7Cit9IHN3X2NvcmJ5X29yYl9jb25maWc7CisKKwordHlwZWRlZiBzd19yZXN1bHQKKyhIT1dMX0FQSSAqc3dfY29yYnlfc2VydmFudF9jYikoCisJCQkJc3dfY29yYnlfc2VydmFudAkJCQkJc2VydmFudCwKKwkJCQlzd19zYWx0CQkJCQkJCQlzYWx0LAorCQkJCXN3X2NvcmJ5X29yYgkJCQkJCW9yYiwKKwkJCQlzdHJ1Y3QgX3N3X2NvcmJ5X2NoYW5uZWwJKgljaGFubmVsLAorCQkJCXN0cnVjdCBfc3dfY29yYnlfbWVzc2FnZQkqCW1lc3NhZ2UsCisJCQkJc3RydWN0IF9zd19jb3JieV9idWZmZXIJCSoJYnVmZmVyLAorCQkJCXN3X2NvbnN0X3N0cmluZwkJCQkJb3AsCisJCQkJc3dfdWludDMyCQkJCQkJCW9wX2xlbiwKKwkJCQlzd191aW50MzIJCQkJCQkJcmVxdWVzdF9pZCwKKwkJCQlzd191aW50OAkJCQkJCQllbmRpYW4pOworCisKK3R5cGVkZWYgc3dfcmVzdWx0CisoSE9XTF9BUEkgKnN3X2NvcmJ5X29yYl9vYnNlcnZlcl9mdW5jKSgKKwkJCQlzd19jb3JieV9vcmJfb2JzZXJ2ZXIJCQloYW5kbGVyLAorCQkJCXN3X3NhbHQJCQkJCQkJCXNhbHQsCisJCQkJc3dfY29yYnlfb3JiCQkJCQkJb3JiLAorCQkJCXN0cnVjdCBfc3dfY29yYnlfY2hhbm5lbAkqCWNoYW5uZWwsCisJCQkJc3dfb3BhcXVlX3QJCQkJCQkJZXh0cmEpOworCisKK3N3X3Jlc3VsdCBIT1dMX0FQSQorc3dfY29yYnlfb3JiX2luaXQoCisJCQkJc3dfY29yYnlfb3JiCQkJCQkJKglzZWxmLAorCQkJCXN3X3NhbHQJCQkJCQkJCQlzYWx0LAorCQkJCWNvbnN0IHN3X2NvcmJ5X29yYl9jb25maWcJCSoJY29uZmlnLAorICAgICAgICAgICAgc3dfY29yYnlfb3JiX29ic2VydmVyCQkJCW9ic2VydmVyLAorICAgICAgICAgICAgc3dfY29yYnlfb3JiX29ic2VydmVyX2Z1bmMJCQlmdW5jLAorICAgICAgICAgICAgc3dfb3BhcXVlX3QJCQkJCQkJCWV4dHJhKTsKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X2NvcmJ5X29yYl9maW5hKAorCQkJCXN3X2NvcmJ5X29yYglzZWxmKTsKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X2NvcmJ5X29yYl9yZWdpc3Rlcl9zZXJ2YW50KAorCQkJCXN3X2NvcmJ5X29yYgkJCQkJc2VsZiwKKwkJCQlzd19jb3JieV9zZXJ2YW50CQkJCXNlcnZhbnQsCisgICAgICAgICAgICBzd19jb3JieV9zZXJ2YW50X2NiCQkJY2IsCisJCQkJc3dfY29uc3Rfc3RyaW5nCQkJCW9pZCwKKwkJCQlzdHJ1Y3QgX3N3X2NvcmJ5X29iamVjdAkqKglvYmplY3QsCisJCQkJc3dfY29uc3Rfc3RyaW5nCQkJCXByb3RvY29sX25hbWUpOworCisKK3N3X3Jlc3VsdCBIT1dMX0FQSQorc3dfY29yYnlfb3JiX3VucmVnaXN0ZXJfc2VydmFudCgKKwkJCQlzd19jb3JieV9vcmIJCXNlbGYsCisJCQkJc3dfY29uc3Rfc3RyaW5nCW9pZCk7CisKKworc3dfcmVzdWx0IEhPV0xfQVBJCitzd19jb3JieV9vcmJfcmVnaXN0ZXJfYmlkaXJlY3Rpb25hbF9vYmplY3QoCisJCQkJc3dfY29yYnlfb3JiCQkJCQlzZWxmLAorCQkJCXN0cnVjdCBfc3dfY29yYnlfb2JqZWN0CSoJb2JqZWN0KTsKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X2NvcmJ5X29yYl9yZWdpc3Rlcl9jaGFubmVsKAorCQkJCXN3X2NvcmJ5X29yYgkJCQkJCXNlbGYsCisJCQkJc3RydWN0IF9zd19jb3JieV9jaGFubmVsCSoJY2hhbm5lbCk7CisKKworc3dfY29yYnlfb3JiX2RlbGVnYXRlIEhPV0xfQVBJCitzd19jb3JieV9vcmJfZ2V0X2RlbGVnYXRlKAorCQkJCXN3X2NvcmJ5X29yYgkJCQkJCXNlbGYpOworCisKK3N3X3Jlc3VsdCBIT1dMX0FQSQorc3dfY29yYnlfb3JiX3NldF9kZWxlZ2F0ZSgKKwkJCQlzd19jb3JieV9vcmIJCQkJCQlzZWxmLAorCQkJCXN3X2NvcmJ5X29yYl9kZWxlZ2F0ZQkJCWRlbGVnYXRlKTsKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X2NvcmJ5X29yYl9zZXRfb2JzZXJ2ZXIoCisJCQkJc3dfY29yYnlfb3JiCQkJCQkJc2VsZiwKKwkJCQlzd19jb3JieV9vcmJfb2JzZXJ2ZXIJCQlvYnNlcnZlciwKKwkJCQlzd19jb3JieV9vcmJfb2JzZXJ2ZXJfZnVuYwkJZnVuYywKKwkJCQlzd19vcGFxdWVfdAkJCQkJCQlleHRyYSk7CisKKworc3dfcmVzdWx0IEhPV0xfQVBJCitzd19jb3JieV9vcmJfcHJvdG9jb2xfdG9fYWRkcmVzcygKKwkJCQlzd19jb3JieV9vcmIJCXNlbGYsCisJCQkJc3dfY29uc3Rfc3RyaW5nCXRhZywKKwkJCQlzd19zdHJpbmcJCQlhZGRyLAorCQkJCXN3X3BvcnQJCSoJcG9ydCk7CisKKworc3dfcmVzdWx0IEhPV0xfQVBJCitzd19jb3JieV9vcmJfcHJvdG9jb2xfdG9fdXJsKAorCQkJCXN3X2NvcmJ5X29yYgkJc2VsZiwKKwkJCQlzd19jb25zdF9zdHJpbmcJdGFnLAorCQkJCXN3X2NvbnN0X3N0cmluZwluYW1lLAorCQkJCXN3X3N0cmluZwkJCXVybCwKKwkJCQlzd19zaXplX3QJCQl1cmxfbGVuKTsKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X2NvcmJ5X29yYl9yZWFkX2NoYW5uZWwoCisJCQkJc3dfY29yYnlfb3JiCQkJCQkJc2VsZiwKKwkJCQlzdHJ1Y3QgX3N3X2NvcmJ5X2NoYW5uZWwJKgljaGFubmVsKTsKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X2NvcmJ5X29yYl9kaXNwYXRjaF9tZXNzYWdlKAorCQkJCXN3X2NvcmJ5X29yYgkJCQkJCXNlbGYsCisJCQkJc3RydWN0IF9zd19jb3JieV9jaGFubmVsCSoJY2hhbm5lbCwKKwkJCQlzdHJ1Y3QgX3N3X2NvcmJ5X21lc3NhZ2UJKgltZXNzYWdlLAorCQkJCXN0cnVjdCBfc3dfY29yYnlfYnVmZmVyCQkqCWJ1ZmZlciwKKwkJCQlzd191aW50OAkJCQkJCQllbmRpYW4pOworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktY29tcGF0LWhvd2wvaW5jbHVkZS9kaXNjb3ZlcnkvZGlzY292ZXJ5LmggYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tcGF0LWhvd2wvaW5jbHVkZS9kaXNjb3ZlcnkvZGlzY292ZXJ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgyMzczZAotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtaG93bC9pbmNsdWRlL2Rpc2NvdmVyeS9kaXNjb3ZlcnkuaApAQCAtMCwwICsxLDMyNyBAQAorI2lmbmRlZiBfZGlzY292ZXJ5X2Rpc2NvdmVyeV9oCisjZGVmaW5lIF9kaXNjb3ZlcnlfZGlzY292ZXJ5X2gKKworLyoKKyAqIENvcHlyaWdodCAyMDAzLCAyMDA0IFBvcmNoZG9nIFNvZnR3YXJlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqCVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKglhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICoJCTEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqCQkgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoJCTIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqCQkgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKgkJICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICoJVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBQT1JDSERPRyBTT0ZUV0FSRSBgYEFTIElTJycgQU5EIEFOWQorICoJRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICoJV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICoJSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEhPV0wgUFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICoJSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKglCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICoJREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICoJT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRQorICoJT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKglPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoJVGhlIHZpZXdzIGFuZCBjb25jbHVzaW9ucyBjb250YWluZWQgaW4gdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uIGFyZSB0aG9zZQorICoJb2YgdGhlIGF1dGhvcnMgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgcmVwcmVzZW50aW5nIG9mZmljaWFsIHBvbGljaWVzLAorICoJZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBvZiBQb3JjaGRvZyBTb2Z0d2FyZS4KKyAqLworCisjaW5jbHVkZSA8c2FsdC9zYWx0Lmg+CisjaW5jbHVkZSA8c2FsdC9zb2NrZXQuaD4KKworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisKK3N0cnVjdAkJCQkJCQkJCV9zd19kaXNjb3Zlcnk7Cit0eXBlZGVmIHN0cnVjdCBfc3dfZGlzY292ZXJ5CSoJc3dfZGlzY292ZXJ5OworCisKKy8qCisgKiBrZWVwcyB0cmFjayBvZiBkaWZmZXJlbnQgZGlzY292ZXJ5IG9wZXJhdGlvbnMKKyAqLwordHlwZWRlZiBzd191aW50MzIJCQkJCQlzd19kaXNjb3Zlcnlfb2lkOworCisKKy8qCisgKiBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKKyAqLworI2RlZmluZSBzd19kaXNjb3ZlcnlfcHVibGlzaF9ob3N0X2lkCXN3X2Rpc2NvdmVyeV9vaWQKKyNkZWZpbmUgc3dfZGlzY292ZXJ5X3B1Ymxpc2hfaWQJCQlzd19kaXNjb3Zlcnlfb2lkCisjZGVmaW5lIHN3X2Rpc2NvdmVyeV9icm93c2VfaWQJCQlzd19kaXNjb3Zlcnlfb2lkCisjZGVmaW5lIHN3X2Rpc2NvdmVyeV9yZXNvbHZlX2lkCQkJc3dfZGlzY292ZXJ5X29pZAorCisKKy8qCisgKiBob3cgdG8gY29ubmVjdCB0byBzZXJ2ZXIKKyAqLwordHlwZWRlZiBlbnVtIF9zd19kaXNjb3ZlcnlfaW5pdF9mbGFncworeworCVNXX0RJU0NPVkVSWV9VU0VfU0hBUkVEX1NFUlZJQ0UJCT0JMHgxLAorCVNXX0RJU0NPVkVSWV9VU0VfUFJJVkFURV9TRVJWSUNFCQk9CTB4MiwKKwlTV19ESVNDT1ZFUllfU0tJUF9WRVJTSU9OX0NIRUNLCQk9CTB4NAorfSBzd19kaXNjb3ZlcnlfaW5pdF9mbGFnczsKKworCisvKgorICogc3RhdHVzIGZvciBhc3luY2hyb25vdXMgcmVnaXN0cmF0aW9uIGNhbGwKKyAqLwordHlwZWRlZiBlbnVtIF9zd19kaXNjb3ZlcnlfcHVibGlzaF9zdGF0dXMKK3sKKwlTV19ESVNDT1ZFUllfUFVCTElTSF9TVEFSVEVELAorCVNXX0RJU0NPVkVSWV9QVUJMSVNIX1NUT1BQRUQsCisJU1dfRElTQ09WRVJZX1BVQkxJU0hfTkFNRV9DT0xMSVNJT04sCisJU1dfRElTQ09WRVJZX1BVQkxJU0hfSU5WQUxJRAorfSBzd19kaXNjb3ZlcnlfcHVibGlzaF9zdGF0dXM7CisKKwordHlwZWRlZiBlbnVtIF9zd19kaXNjb3ZlcnlfYnJvd3NlX3N0YXR1cworeworCVNXX0RJU0NPVkVSWV9CUk9XU0VfSU5WQUxJRCwKKwlTV19ESVNDT1ZFUllfQlJPV1NFX1JFTEVBU0UsCisJU1dfRElTQ09WRVJZX0JST1dTRV9BRERfRE9NQUlOLAorCVNXX0RJU0NPVkVSWV9CUk9XU0VfQUREX0RFRkFVTFRfRE9NQUlOLAorCVNXX0RJU0NPVkVSWV9CUk9XU0VfUkVNT1ZFX0RPTUFJTiwKKwlTV19ESVNDT1ZFUllfQlJPV1NFX0FERF9TRVJWSUNFLAorCVNXX0RJU0NPVkVSWV9CUk9XU0VfUkVNT1ZFX1NFUlZJQ0UsCisJU1dfRElTQ09WRVJZX0JST1dTRV9SRVNPTFZFRAorfSBzd19kaXNjb3ZlcnlfYnJvd3NlX3N0YXR1czsKKworCit0eXBlZGVmIGVudW0gX3N3X2Rpc2NvdmVyeV9xdWVyeV9yZWNvcmRfc3RhdHVzCit7CisJU1dfRElTQ09WRVJZX1FVRVJZX1JFQ09SRF9BREQJCQk9CTB4MQorfSBzd19kaXNjb3ZlcnlfcXVlcnlfcmVjb3JkX3N0YXR1czsKKworCit0eXBlZGVmIHN3X3Jlc3VsdAorKEhPV0xfQVBJICpzd19kaXNjb3ZlcnlfcHVibGlzaF9yZXBseSkoCisJCQkJCQkJc3dfZGlzY292ZXJ5CQkJCQkJc2Vzc2lvbiwKKwkJCQkJCQlzd19kaXNjb3Zlcnlfb2lkCQkJCQlvaWQsCisJCQkJCQkJc3dfZGlzY292ZXJ5X3B1Ymxpc2hfc3RhdHVzCXN0YXR1cywKKwkJCQkJCQlzd19vcGFxdWUJCQkJCQkJZXh0cmEpOworCit0eXBlZGVmIHN3X3Jlc3VsdAorKEhPV0xfQVBJICpzd19kaXNjb3ZlcnlfYnJvd3NlX3JlcGx5KSgKKwkJCQkJCQlzd19kaXNjb3ZlcnkJCQkJCQlzZXNzaW9uLAorCQkJCQkJCXN3X2Rpc2NvdmVyeV9vaWQJCQkJCW9pZCwKKwkJCQkJCQlzd19kaXNjb3ZlcnlfYnJvd3NlX3N0YXR1cwkJc3RhdHVzLAorCQkJCQkJCXN3X3VpbnQzMgkJCQkJCQlpbnRlcmZhY2VfaW5kZXgsCisJCQkJCQkJc3dfY29uc3Rfc3RyaW5nCQkJCQluYW1lLAorCQkJCQkJCXN3X2NvbnN0X3N0cmluZwkJCQkJdHlwZSwKKwkJCQkJCQlzd19jb25zdF9zdHJpbmcJCQkJCWRvbWFpbiwKKwkJCQkJCQlzd19vcGFxdWUJCQkJCQkJZXh0cmEpOworCit0eXBlZGVmIHN3X3Jlc3VsdAorKEhPV0xfQVBJICpzd19kaXNjb3ZlcnlfcmVzb2x2ZV9yZXBseSkoCisJCQkJCQkJc3dfZGlzY292ZXJ5CQkJCQkJc2Vzc2lvbiwKKwkJCQkJCQlzd19kaXNjb3Zlcnlfb2lkCQkJCQlvaWQsCisJCQkJCQkJc3dfdWludDMyCQkJCQkJCWludGVyZmFjZV9pbmRleCwKKwkJCQkJCQlzd19jb25zdF9zdHJpbmcJCQkJCW5hbWUsCisJCQkJCQkJc3dfY29uc3Rfc3RyaW5nCQkJCQl0eXBlLAorCQkJCQkJCXN3X2NvbnN0X3N0cmluZwkJCQkJZG9tYWluLAorCQkJCQkJCXN3X2lwdjRfYWRkcmVzcwkJCQkJYWRkcmVzcywKKwkJCQkJCQlzd19wb3J0CQkJCQkJCQlwb3J0LAorCQkJCQkJCXN3X29jdGV0cwkJCQkJCQl0ZXh0X3JlY29yZCwKKwkJCQkJCQlzd191aW50MzIJCQkJCQkJdGV4dF9yZWNvcmRfbGVuLAorCQkJCQkJCXN3X29wYXF1ZQkJCQkJCQlleHRyYSk7CisKKwordHlwZWRlZiBzd19yZXN1bHQKKyhIT1dMX0FQSSAqc3dfZGlzY292ZXJ5X3F1ZXJ5X3JlY29yZF9yZXBseSkoCisJCQkJCQkJc3dfZGlzY292ZXJ5CQkJCQkJCQlzZXNzaW9uLAorCQkJCQkJCXN3X2Rpc2NvdmVyeV9vaWQJCQkJCQkJb2lkLAorCQkJCQkJCXN3X2Rpc2NvdmVyeV9xdWVyeV9yZWNvcmRfc3RhdHVzCQlzdGF0dXMsCisJCQkJCQkJc3dfdWludDMyCQkJCQkJCQkJaW50ZXJmYWNlX2luZGV4LAorCQkJCQkJCXN3X2NvbnN0X3N0cmluZwkJCQkJCQlmdWxsbmFtZSwKKwkJCQkJCQlzd191aW50MTYJCQkJCQkJCQlycnR5cGUsCisJCQkJCQkJc3dfdWludDE2CQkJCQkJCQkJcnJjbGFzcywKKwkJCQkJCQlzd191aW50MTYJCQkJCQkJCQlycmRhdGFsZW4sCisJCQkJCQkJc3dfY29uc3Rfb2N0ZXRzCQkJCQkJCXJyZGF0YSwKKwkJCQkJCQlzd191aW50MzIJCQkJCQkJCQl0dGwsCisJCQkJCQkJc3dfb3BhcXVlCQkJCQkJCQkJZXh0cmEpOworCisKKy8qCisgKiBBUEkgZm9yIHB1Ymxpc2hpbmcvYnJvd3NpbmcvcmVzb2x2aW5nIHNlcnZpY2VzCisgKi8KK3N3X3Jlc3VsdCBIT1dMX0FQSQorc3dfZGlzY292ZXJ5X2luaXQoCisJCQkJCXN3X2Rpc2NvdmVyeQkJCSoJc2VsZik7CisKKworc3dfcmVzdWx0IEhPV0xfQVBJCitzd19kaXNjb3ZlcnlfaW5pdF93aXRoX2ZsYWdzKAorCQkJCQlzd19kaXNjb3ZlcnkJCQkqCXNlbGYsCisJCQkJCXN3X2Rpc2NvdmVyeV9pbml0X2ZsYWdzCWZsYWdzKTsKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X2Rpc2NvdmVyeV9maW5hKAorCQkJCQlzd19kaXNjb3ZlcnkJCXNlbGYpOworCisKK3N3X3Jlc3VsdCBIT1dMX0FQSQorc3dfZGlzY292ZXJ5X3B1Ymxpc2hfaG9zdCgKKwkJCQkJc3dfZGlzY292ZXJ5CQkJCQkJc2VsZiwKKwkJCQkJc3dfdWludDMyCQkJCQkJCWludGVyZmFjZV9pbmRleCwKKwkJCQkJc3dfY29uc3Rfc3RyaW5nCQkJCQluYW1lLAorCQkJCQlzd19jb25zdF9zdHJpbmcJCQkJCWRvbWFpbiwKKwkJCQkJc3dfaXB2NF9hZGRyZXNzCQkJCQlhZGRyZXNzLAorCQkJCQlzd19kaXNjb3ZlcnlfcHVibGlzaF9yZXBseQkJcmVwbHksCisJCQkJCXN3X29wYXF1ZQkJCQkJCQlleHRyYSwKKwkJCQkJc3dfZGlzY292ZXJ5X29pZAkJCQkqCW9pZCk7CisKKworc3dfcmVzdWx0IEhPV0xfQVBJCitzd19kaXNjb3ZlcnlfcHVibGlzaCgKKwkJCQkJc3dfZGlzY292ZXJ5CQkJCQkJc2VsZiwKKwkJCQkJc3dfdWludDMyCQkJCQkJCWludGVyZmFjZV9pbmRleCwKKwkJCQkJc3dfY29uc3Rfc3RyaW5nCQkJCQluYW1lLAorCQkJCQlzd19jb25zdF9zdHJpbmcJCQkJCXR5cGUsCisJCQkJCXN3X2NvbnN0X3N0cmluZwkJCQkJZG9tYWluLAorCQkJCQlzd19jb25zdF9zdHJpbmcJCQkJCWhvc3QsCisJCQkJCXN3X3BvcnQJCQkJCQkJCXBvcnQsCisJCQkJCXN3X29jdGV0cwkJCQkJCQl0ZXh0X3JlY29yZCwKKwkJCQkJc3dfdWludDMyCQkJCQkJCXRleHRfcmVjb3JkX2xlbiwKKwkJCQkJc3dfZGlzY292ZXJ5X3B1Ymxpc2hfcmVwbHkJCXJlcGx5LAorCQkJCQlzd19vcGFxdWUJCQkJCQkJZXh0cmEsCisJCQkJCXN3X2Rpc2NvdmVyeV9vaWQJCQkJKglvaWQpOworCisKK3N3X3Jlc3VsdCBIT1dMX0FQSQorc3dfZGlzY292ZXJ5X3B1Ymxpc2hfdXBkYXRlKAorCQkJCQlzd19kaXNjb3ZlcnkJCQkJCQlzZWxmLAorCQkJCQlzd19kaXNjb3Zlcnlfb2lkCQkJCQlvaWQsCisJCQkJCXN3X29jdGV0cwkJCQkJCQl0ZXh0X3JlY29yZCwKKwkJCQkJc3dfdWludDMyCQkJCQkJCXRleHRfcmVjb3JkX2xlbik7CisKKworCisvKgorICogQVBJIGZvciBicm93c2luZyBkb21haW5zCisgKi8KK3N3X3Jlc3VsdCBIT1dMX0FQSQorc3dfZGlzY292ZXJ5X2Jyb3dzZV9kb21haW5zKAorCQkJCQlzd19kaXNjb3ZlcnkJCQkJCQlzZWxmLAorCQkJCQlzd191aW50MzIJCQkJCQkJaW50ZXJmYWNlX2luZGV4LAorCQkJCQlzd19kaXNjb3ZlcnlfYnJvd3NlX3JlcGx5CQlyZXBseSwKKwkJCQkJc3dfb3BhcXVlCQkJCQkJCWV4dHJhLAorCQkJCQlzd19kaXNjb3Zlcnlfb2lkCQkJCSoJb2lkKTsKKworCisKKy8qCisgKiBBUEkgZm9yIGJyb3dzaW5nIHNlcnZpY2VzCisgKi8KK3N3X3Jlc3VsdCBIT1dMX0FQSQorc3dfZGlzY292ZXJ5X2Jyb3dzZSgKKwkJCQkJc3dfZGlzY292ZXJ5CQkJCQkJc2VsZiwKKwkJCQkJc3dfdWludDMyCQkJCQkJCWludGVyZmFjZV9pbmRleCwKKwkJCQkJc3dfY29uc3Rfc3RyaW5nCQkJCQl0eXBlLAorCQkJCQlzd19jb25zdF9zdHJpbmcJCQkJCWRvbWFpbiwKKwkJCQkJc3dfZGlzY292ZXJ5X2Jyb3dzZV9yZXBseQkJcmVwbHksCisJCQkJCXN3X29wYXF1ZQkJCQkJCQlleHRyYSwKKwkJCQkJc3dfZGlzY292ZXJ5X29pZAkJCQkqCW9pZCk7CisKKworLyoKKyAqIEFQSSBmb3IgcmVzb2x2aW5nIHNlcnZpY2VzCisgKi8KK3N3X3Jlc3VsdCBIT1dMX0FQSQorc3dfZGlzY292ZXJ5X3Jlc29sdmUoCisJCQkJCXN3X2Rpc2NvdmVyeQkJCQkJCXNlbGYsCisJCQkJCXN3X3VpbnQzMgkJCQkJCQlpbnRlcmZhY2VfaW5kZXgsCisJCQkJCXN3X2NvbnN0X3N0cmluZwkJCQkJbmFtZSwKKwkJCQkJc3dfY29uc3Rfc3RyaW5nCQkJCQl0eXBlLAorCQkJCQlzd19jb25zdF9zdHJpbmcJCQkJCWRvbWFpbiwKKwkJCQkJc3dfZGlzY292ZXJ5X3Jlc29sdmVfcmVwbHkJCXJlcGx5LAorCQkJCQlzd19vcGFxdWUJCQkJCQkJZXh0cmEsCisJCQkJCXN3X2Rpc2NvdmVyeV9vaWQJCQkJKglvaWQpOworCisKK3N3X3Jlc3VsdCBIT1dMX0FQSQorc3dfZGlzY292ZXJ5X3F1ZXJ5X3JlY29yZCgKKwkJCQkJc3dfZGlzY292ZXJ5CQkJCQkJCQlzZWxmLAorCQkJCQlzd191aW50MzIJCQkJCQkJCQlpbnRlcmZhY2VfaW5kZXgsCisJCQkJCXN3X3VpbnQzMgkJCQkJCQkJCWZsYWdzLAorCQkJCQlzd19jb25zdF9zdHJpbmcJCQkJCQkJZnVsbG5hbWUsCisJCQkJCXN3X3VpbnQxNgkJCQkJCQkJCXJydHlwZSwKKwkJCQkJc3dfdWludDE2CQkJCQkJCQkJcnJjbGFzcywKKwkJCQkJc3dfZGlzY292ZXJ5X3F1ZXJ5X3JlY29yZF9yZXBseQkJcmVwbHksCisJCQkJCXN3X29wYXF1ZQkJCQkJCQkJCWV4dHJhLAorCQkJCQlzd19kaXNjb3Zlcnlfb2lkCQkJCQkJKglvaWQpOworCisKK3N3X3Jlc3VsdCBIT1dMX0FQSQorc3dfZGlzY292ZXJ5X2NhbmNlbCgKKwkJCQkJc3dfZGlzY292ZXJ5CQlzZWxmLAorCQkJCQlzd19kaXNjb3Zlcnlfb2lkCW9pZCk7CisKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogRXZlbnQgUHJvY2Vzc2luZyBBUElzCisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKworc3dfcmVzdWx0IEhPV0xfQVBJCitzd19kaXNjb3ZlcnlfcnVuKAorCQkJCQlzd19kaXNjb3ZlcnkJCQkJCQlzZWxmKTsKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X2Rpc2NvdmVyeV9zdG9wX3J1bigKKwkJCQkJc3dfZGlzY292ZXJ5CQkJCQkJc2VsZik7CisKKworaW50IEhPV0xfQVBJCitzd19kaXNjb3Zlcnlfc29ja2V0KAorCQkJCQlzd19kaXNjb3ZlcnkJCQkJCQlzZWxmKTsKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X2Rpc2NvdmVyeV9yZWFkX3NvY2tldCgKKwkJCQkJc3dfZGlzY292ZXJ5CQkJCQkJc2VsZik7CisKKworc3dfcmVzdWx0IEhPV0xfQVBJCitzd19kaXNjb3Zlcnlfc2FsdCgKKwkJCQkJc3dfZGlzY292ZXJ5CXNlbGYsCisJCQkJCXN3X3NhbHQJCSoJc2FsdCk7CisKKworLyoKKyAqIEVycm9yIGNvZGVzCisgKi8KKyNkZWZpbmUgU1dfRElTQ09WRVJZX0VfQkFTRQkJCQkJOTAwCisjZGVmaW5lIFNXX0RJU0NPVkVSWV9FX1VOS05PV04JCQkJKFNXX0RJU0NPVkVSWV9FX0JBU0UgKyAyKQorI2RlZmluZSBTV19ESVNDT1ZFUllfRV9OT19TVUNIX05BTUUJCQkoU1dfRElTQ09WRVJZX0VfQkFTRSArIDMpCisjZGVmaW5lIFNXX0RJU0NPVkVSWV9FX05PX01FTQkJCQkJKFNXX0RJU0NPVkVSWV9FX0JBU0UgKyA0KQorI2RlZmluZSBTV19ESVNDT1ZFUllfRV9CQURfUEFSQU0JCQkJKFNXX0RJU0NPVkVSWV9FX0JBU0UgKyA1KQorI2RlZmluZSBTV19ESVNDT1ZFUllfRV9CQURfUkVGRVJFTkNFCQkoU1dfRElTQ09WRVJZX0VfQkFTRSArIDYpCisjZGVmaW5lIFNXX0RJU0NPVkVSWV9FX0JBRF9TVEFURQkJCQkoU1dfRElTQ09WRVJZX0VfQkFTRSArIDcpCisjZGVmaW5lIFNXX0RJU0NPVkVSWV9FX0JBRF9GTEFHUwkJCQkoU1dfRElTQ09WRVJZX0VfQkFTRSArIDgpCisjZGVmaW5lIFNXX0RJU0NPVkVSWV9FX05PVF9TVVBQT1JURUQJCShTV19ESVNDT1ZFUllfRV9CQVNFICsgOSkKKyNkZWZpbmUgU1dfRElTQ09WRVJZX0VfTk9UX0lOSVRJQUxJWkVECQkoU1dfRElTQ09WRVJZX0VfQkFTRSArIDEwKQorI2RlZmluZSBTV19ESVNDT1ZFUllfRV9OT19DQUNIRQkJCQkoU1dfRElTQ09WRVJZX0VfQkFTRSArIDExKQorI2RlZmluZSBTV19ESVNDT1ZFUllfRV9BTFJFQURZX1JFR0lTVEVSRUQJKFNXX0RJU0NPVkVSWV9FX0JBU0UgKyAxMikKKyNkZWZpbmUgU1dfRElTQ09WRVJZX0VfTkFNRV9DT05GTElDVAkJKFNXX0RJU0NPVkVSWV9FX0JBU0UgKyAxMykKKyNkZWZpbmUgU1dfRElTQ09WRVJZX0VfSU5WQUxJRAkJCQkoU1dfRElTQ09WRVJZX0VfQkFTRSArIDE0KQorCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorfQorI2VuZGlmCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktY29tcGF0LWhvd2wvaW5jbHVkZS9kaXNjb3ZlcnkvdGV4dF9yZWNvcmQuaCBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtaG93bC9pbmNsdWRlL2Rpc2NvdmVyeS90ZXh0X3JlY29yZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1ZWU4MDIKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tcGF0LWhvd2wvaW5jbHVkZS9kaXNjb3ZlcnkvdGV4dF9yZWNvcmQuaApAQCAtMCwwICsxLDE0MyBAQAorI2lmbmRlZiBfZGlzY292ZXJ5X3RleHRfcmVjb3JkX2gKKyNkZWZpbmUgX2Rpc2NvdmVyeV90ZXh0X3JlY29yZF9oCisKKy8qCisgKiBDb3B5cmlnaHQgMjAwMywgMjAwNCBQb3JjaGRvZyBTb2Z0d2FyZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKglSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICoJYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqCQkxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKgkJICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCQkyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKgkJICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICoJCSAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqCVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgUE9SQ0hET0cgU09GVFdBUkUgYGBBUyBJUycnIEFORCBBTlkKKyAqCUVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqCVdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqCUlOIE5PIEVWRU5UIFNIQUxMIFRIRSBIT1dMIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqCUlORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICoJQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqCURBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqCU9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UKKyAqCU9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICoJT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqCVRoZSB2aWV3cyBhbmQgY29uY2x1c2lvbnMgY29udGFpbmVkIGluIHRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbiBhcmUgdGhvc2UKKyAqCW9mIHRoZSBhdXRob3JzIGFuZCBzaG91bGQgbm90IGJlIGludGVycHJldGVkIGFzIHJlcHJlc2VudGluZyBvZmZpY2lhbCBwb2xpY2llcywKKyAqCWVpdGhlciBleHByZXNzZWQgb3IgaW1wbGllZCwgb2YgUG9yY2hkb2cgU29mdHdhcmUuCisgKi8KKworI2luY2x1ZGUgPHNhbHQvc2FsdC5oPgorCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisjZGVmaW5lIFNXX1RFWFRfUkVDT1JEX01BWF9MRU4gMjU1CisKKworc3RydWN0CQkJCQkJCQkJCQkJCQkJX3N3X3RleHRfcmVjb3JkOwordHlwZWRlZiBzdHJ1Y3QgX3N3X3RleHRfcmVjb3JkCQkJCQkJKglzd190ZXh0X3JlY29yZDsKK3N0cnVjdAkJCQkJCQkJCQkJCQkJCV9zd190ZXh0X3JlY29yZF9pdGVyYXRvcjsKK3R5cGVkZWYgc3RydWN0IF9zd190ZXh0X3JlY29yZF9pdGVyYXRvcgkJCSoJc3dfdGV4dF9yZWNvcmRfaXRlcmF0b3I7CitzdHJ1Y3QJCQkJCQkJCQkJCQkJCQlfc3dfdGV4dF9yZWNvcmRfc3RyaW5nX2l0ZXJhdG9yOwordHlwZWRlZiBzdHJ1Y3QgX3N3X3RleHRfcmVjb3JkX3N0cmluZ19pdGVyYXRvcgkqCXN3X3RleHRfcmVjb3JkX3N0cmluZ19pdGVyYXRvcjsKKworCisvKgorICogVGV4dCByZWNvcmQgQVBJcworICovCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X3RleHRfcmVjb3JkX2luaXQoCisJCQkJc3dfdGV4dF9yZWNvcmQJKglzZWxmKTsKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X3RleHRfcmVjb3JkX2ZpbmEoCisJCQkJc3dfdGV4dF9yZWNvcmQJCXNlbGYpOworCisKK3N3X3Jlc3VsdCBIT1dMX0FQSQorc3dfdGV4dF9yZWNvcmRfYWRkX3N0cmluZygKKwkJCQlzd190ZXh0X3JlY29yZAkJc2VsZiwKKwkJCQlzd19jb25zdF9zdHJpbmcJc3RyaW5nKTsKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X3RleHRfcmVjb3JkX2FkZF9rZXlfYW5kX3N0cmluZ192YWx1ZSgKKwkJCQlzd190ZXh0X3JlY29yZAkJc2VsZiwKKwkJCQlzd19jb25zdF9zdHJpbmcJa2V5LAorCQkJCXN3X2NvbnN0X3N0cmluZwl2YWwpOworCisKK3N3X3Jlc3VsdCBIT1dMX0FQSQorc3dfdGV4dF9yZWNvcmRfYWRkX2tleV9hbmRfYmluYXJ5X3ZhbHVlKAorCQkJCXN3X3RleHRfcmVjb3JkCQlzZWxmLAorCQkJCXN3X2NvbnN0X3N0cmluZwlrZXksCisJCQkJc3dfb2N0ZXRzCQkJdmFsLAorCQkJCXN3X3VpbnQzMgkJCQlsZW4pOworCisKK3N3X29jdGV0cyBIT1dMX0FQSQorc3dfdGV4dF9yZWNvcmRfYnl0ZXMoCisJCQkJc3dfdGV4dF9yZWNvcmQJCXNlbGYpOworCisKK3N3X3VpbnQzMiBIT1dMX0FQSQorc3dfdGV4dF9yZWNvcmRfbGVuKAorCQkJCXN3X3RleHRfcmVjb3JkCQlzZWxmKTsKKworCisvKgorICogQVBJcyBmb3IgaXRlcmF0aW5nIHRocm91Z2ggcmF3IHRleHQgcmVjb3JkcworICovCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X3RleHRfcmVjb3JkX2l0ZXJhdG9yX2luaXQoCisJCQkJc3dfdGV4dF9yZWNvcmRfaXRlcmF0b3IJKglzZWxmLAorCQkJCXN3X29jdGV0cwkJCQkJCXRleHRfcmVjb3JkLAorCQkJCXN3X3VpbnQzMgkJCQkJCXRleHRfcmVjb3JkX2xlbik7CisKKworc3dfcmVzdWx0IEhPV0xfQVBJCitzd190ZXh0X3JlY29yZF9pdGVyYXRvcl9maW5hKAorCQkJCXN3X3RleHRfcmVjb3JkX2l0ZXJhdG9yCQlzZWxmKTsKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X3RleHRfcmVjb3JkX2l0ZXJhdG9yX25leHQoCisJCQkJc3dfdGV4dF9yZWNvcmRfaXRlcmF0b3IJCXNlbGYsCisJCQkJY2hhcgkJCQkJCQkJa2V5W1NXX1RFWFRfUkVDT1JEX01BWF9MRU5dLAorCQkJCXN3X3VpbnQ4CQkJCQkJCXZhbFtTV19URVhUX1JFQ09SRF9NQVhfTEVOXSwKKwkJCQlzd191aW50MzIJCQkJCSoJdmFsX2xlbik7CisKKworLyoKKyAqIEFQSXMgZm9yIGl0ZXJhdGluZyB0aHJvdWdoIHN0cmluZ2lmaWVkIHRleHQgcmVjb3JkcworICovCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X3RleHRfcmVjb3JkX3N0cmluZ19pdGVyYXRvcl9pbml0KAorCQkJCXN3X3RleHRfcmVjb3JkX3N0cmluZ19pdGVyYXRvcgkqCXNlbGYsCisJCQkJc3dfY29uc3Rfc3RyaW5nCQkJCQkJCXRleHRfcmVjb3JkX3N0cmluZyk7CisKKworc3dfcmVzdWx0IEhPV0xfQVBJCitzd190ZXh0X3JlY29yZF9zdHJpbmdfaXRlcmF0b3JfZmluYSgKKwkJCQlzd190ZXh0X3JlY29yZF9zdHJpbmdfaXRlcmF0b3IJc2VsZik7CisKKworc3dfcmVzdWx0IEhPV0xfQVBJCitzd190ZXh0X3JlY29yZF9zdHJpbmdfaXRlcmF0b3JfbmV4dCgKKwkJCQlzd190ZXh0X3JlY29yZF9zdHJpbmdfaXRlcmF0b3IJc2VsZiwKKwkJCQljaGFyCQkJCQkJCQkJCWtleVtTV19URVhUX1JFQ09SRF9NQVhfTEVOXSwKKwkJCQljaGFyCQkJCQkJCQkJCXZhbFtTV19URVhUX1JFQ09SRF9NQVhfTEVOXSk7CisKKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCit9CisjZW5kaWYKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtaG93bC9pbmNsdWRlL2hvd2wuaCBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtaG93bC9pbmNsdWRlL2hvd2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWM2ZDQzCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbXBhdC1ob3dsL2luY2x1ZGUvaG93bC5oCkBAIC0wLDAgKzEsNDQgQEAKKyNpZm5kZWYgX3N3X2hvd2xfaAorI2RlZmluZSBfc3dfaG93bF9oCisKKy8qCisgKiBDb3B5cmlnaHQgMjAwMywgMjAwNCBQb3JjaGRvZyBTb2Z0d2FyZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKglSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICoJYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqCQkxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKgkJICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCQkyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKgkJICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICoJCSAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqCVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgUE9SQ0hET0cgU09GVFdBUkUgYGBBUyBJUycnIEFORCBBTlkKKyAqCUVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqCVdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqCUlOIE5PIEVWRU5UIFNIQUxMIFRIRSBIT1dMIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqCUlORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICoJQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqCURBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqCU9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UKKyAqCU9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICoJT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqCVRoZSB2aWV3cyBhbmQgY29uY2x1c2lvbnMgY29udGFpbmVkIGluIHRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbiBhcmUgdGhvc2UKKyAqCW9mIHRoZSBhdXRob3JzIGFuZCBzaG91bGQgbm90IGJlIGludGVycHJldGVkIGFzIHJlcHJlc2VudGluZyBvZmZpY2lhbCBwb2xpY2llcywKKyAqCWVpdGhlciBleHByZXNzZWQgb3IgaW1wbGllZCwgb2YgUG9yY2hkb2cgU29mdHdhcmUuCisgKi8KKworI2luY2x1ZGUgPHNhbHQvc2FsdC5oPgorI2luY2x1ZGUgPHNhbHQvdGltZS5oPgorI2luY2x1ZGUgPHNhbHQvZGVidWcuaD4KKyNpbmNsdWRlIDxjb3JieS9vcmIuaD4KKyNpbmNsdWRlIDxjb3JieS9tZXNzYWdlLmg+CisjaW5jbHVkZSA8Y29yYnkvb2JqZWN0Lmg+CisjaW5jbHVkZSA8Y29yYnkvY2hhbm5lbC5oPgorI2luY2x1ZGUgPGNvcmJ5L2J1ZmZlci5oPgorI2luY2x1ZGUgPGRpc2NvdmVyeS9kaXNjb3ZlcnkuaD4KKyNpbmNsdWRlIDxkaXNjb3ZlcnkvdGV4dF9yZWNvcmQuaD4KKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtaG93bC9pbmNsdWRlL3JlbmRlenZvdXMvcmVuZGV6dm91cy5oIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbXBhdC1ob3dsL2luY2x1ZGUvcmVuZGV6dm91cy9yZW5kZXp2b3VzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJjODVlOAotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtaG93bC9pbmNsdWRlL3JlbmRlenZvdXMvcmVuZGV6dm91cy5oCkBAIC0wLDAgKzEsMTAxIEBACisjaWZuZGVmIF9yZW5kZXp2b3VzX3JlbmRlenZvdXNfaAorI2RlZmluZSBfcmVuZGV6dm91c19yZW5kZXp2b3VzX2gKKworLyoKKyAqIENvcHlyaWdodCAyMDAzLCAyMDA0IFBvcmNoZG9nIFNvZnR3YXJlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqCVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKglhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICoJCTEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqCQkgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoJCTIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqCQkgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKgkJICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICoJVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBQT1JDSERPRyBTT0ZUV0FSRSBgYEFTIElTJycgQU5EIEFOWQorICoJRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICoJV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICoJSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEhPV0wgUFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICoJSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKglCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICoJREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICoJT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRQorICoJT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKglPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoJVGhlIHZpZXdzIGFuZCBjb25jbHVzaW9ucyBjb250YWluZWQgaW4gdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uIGFyZSB0aG9zZQorICoJb2YgdGhlIGF1dGhvcnMgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgcmVwcmVzZW50aW5nIG9mZmljaWFsIHBvbGljaWVzLAorICoJZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBvZiBQb3JjaGRvZyBTb2Z0d2FyZS4KKyAqLworCisjaW5jbHVkZSA8ZGlzY292ZXJ5L2Rpc2NvdmVyeS5oPgorCisjZGVmaW5lIF9zd19yZW5kZXp2b3VzCQkJCQkJCV9zd19kaXNjb3ZlcnkKKyNkZWZpbmUgc3dfcmVuZGV6dm91cwkJCQkJCQlzd19kaXNjb3ZlcnkKKyNkZWZpbmUgc3dfcmVuZGV6dm91c19wdWJsaXNoX2RvbWFpbl9pZAlzd19kaXNjb3ZlcnlfcHVibGlzaF9kb21haW5faWQKKyNkZWZpbmUgc3dfcmVuZGV6dm91c19wdWJsaXNoX2hvc3RfaWQJCXN3X2Rpc2NvdmVyeV9wdWJsaXNoX2hvc3RfaWQKKyNkZWZpbmUgc3dfcmVuZGV6dm91c19wdWJsaXNoX2lkCQkJCXN3X2Rpc2NvdmVyeV9wdWJsaXNoX2lkCisjZGVmaW5lIHN3X3JlbmRlenZvdXNfYnJvd3NlX2lkCQkJCXN3X2Rpc2NvdmVyeV9icm93c2VfaWQKKyNkZWZpbmUgc3dfcmVuZGV6dm91c19yZXNvbHZlX2lkCQkJCXN3X2Rpc2NvdmVyeV9yZXNvbHZlX2lkCisjZGVmaW5lIHN3X3JlbmRlenZvdXNfcHVibGlzaF9zdGF0dXMJCXN3X2Rpc2NvdmVyeV9wdWJsaXNoX3N0YXR1cworI2RlZmluZSBTV19SRU5ERVpWT1VTX1BVQkxJU0hfU1RBUlRFRAkJU1dfRElTQ09WRVJZX1BVQkxJU0hfU1RBUlRFRAorI2RlZmluZSBTV19SRU5ERVpWT1VTX1BVQkxJU0hfU1RPUFBFRAkJU1dfRElTQ09WRVJZX1BVQkxJU0hfU1RPUFBFRAorI2RlZmluZSBTV19SRU5ERVpWT1VTX1BVQkxJU0hfTkFNRV9DT0xMSVNJT04JU1dfRElTQ09WRVJZX1BVQkxJU0hfTkFNRV9DT0xMSVNJT04KKyNkZWZpbmUgU1dfUkVOREVaVk9VU19QVUJMSVNIX0lOVkFMSUQJCVNXX0RJU0NPVkVSWV9QVUJMSVNIX0lOVkFMSUQKKyNkZWZpbmUgc3dfcmVuZGV6dm91c19icm93c2Vfc3RhdHVzCQkJc3dfZGlzY292ZXJ5X2Jyb3dzZV9zdGF0dXMKKyNkZWZpbmUgU1dfUkVOREVaVk9VU19CUk9XU0VfSU5WQUxJRAkJU1dfRElTQ09WRVJZX0JST1dTRV9JTlZBTElECisjZGVmaW5lIFNXX1JFTkRFWlZPVVNfQlJPV1NFX1JFTEVBU0UJCVNXX0RJU0NPVkVSWV9CUk9XU0VfUkVMRUFTRQorI2RlZmluZSBTV19SRU5ERVpWT1VTX0JST1dTRV9BRERfRE9NQUlOCVNXX0RJU0NPVkVSWV9CUk9XU0VfQUREX0RPTUFJTgorI2RlZmluZSBTV19SRU5ERVpWT1VTX0JST1dTRV9BRERfREVGQVVMVF9ET01BSU4JU1dfRElTQ09WRVJZX0JST1dTRV9BRERfREVGQVVMVF9ET01BSU4KKyNkZWZpbmUgU1dfUkVOREVaVk9VU19CUk9XU0VfUkVNT1ZFX0RPTUFJTglTV19ESVNDT1ZFUllfQlJPV1NFX1JFTU9WRV9ET01BSU4KKyNkZWZpbmUgU1dfUkVOREVaVk9VU19CUk9XU0VfQUREX1NFUlZJQ0UJCVNXX0RJU0NPVkVSWV9CUk9XU0VfQUREX1NFUlZJQ0UKKyNkZWZpbmUgU1dfUkVOREVaVk9VU19CUk9XU0VfUkVNT1ZFX1NFUlZJQ0UJU1dfRElTQ09WRVJZX0JST1dTRV9SRU1PVkVfU0VSVklDRQorI2RlZmluZSBTV19SRU5ERVpWT1VTX0JST1dTRV9SRVNPTFZFRAkJCVNXX0RJU0NPVkVSWV9CUk9XU0VfUkVTT0xWRUQKKyNkZWZpbmUgc3dfcmVuZGV6dm91c19wdWJsaXNoX2RvbWFpbl9oYW5kbGVyCXN3X2Rpc2NvdmVyeV9wdWJsaXNoX2RvbWFpbl9oYW5kbGVyCisjZGVmaW5lIHN3X3JlbmRlenZvdXNfcHVibGlzaF9kb21haW5fcmVwbHkJc3dfZGlzY292ZXJ5X3B1Ymxpc2hfZG9tYWluX3JlcGx5CisjZGVmaW5lIHN3X3JlbmRlenZvdXNfcHVibGlzaF9ob3N0X2hhbmRsZXIJc3dfZGlzY292ZXJ5X3B1Ymxpc2hfaG9zdF9oYW5kbGVyCisjZGVmaW5lIHN3X3JlbmRlenZvdXNfcHVibGlzaF9ob3N0X3JlcGx5CQlzd19kaXNjb3ZlcnlfcHVibGlzaF9ob3N0X3JlcGx5CisjZGVmaW5lIHN3X3JlbmRlenZvdXNfcHVibGlzaF9oYW5kbGVyCQkJc3dfZGlzY292ZXJ5X3B1Ymxpc2hfaGFuZGxlcgorI2RlZmluZSBzd19yZW5kZXp2b3VzX3B1Ymxpc2hfcmVwbHkJCQkJc3dfZGlzY292ZXJ5X3B1Ymxpc2hfcmVwbHkKKyNkZWZpbmUgc3dfcmVuZGV6dm91c19icm93c2VfaGFuZGxlcgkJCXN3X2Rpc2NvdmVyeV9icm93c2VfaGFuZGxlcgorI2RlZmluZSBzd19yZW5kZXp2b3VzX2Jyb3dzZV9yZXBseQkJCQlzd19kaXNjb3ZlcnlfYnJvd3NlX3JlcGx5CisjZGVmaW5lIHN3X3JlbmRlenZvdXNfcmVzb2x2ZV9oYW5kbGVyCQkJc3dfZGlzY292ZXJ5X3Jlc29sdmVfaGFuZGxlcgorI2RlZmluZSBzd19yZW5kZXp2b3VzX3Jlc29sdmVfcmVwbHkJCQkJc3dfZGlzY292ZXJ5X3Jlc29sdmVfcmVwbHkKKyNkZWZpbmUgc3dfcmVuZGV6dm91c19pbml0CQkJCQkJCXN3X2Rpc2NvdmVyeV9pbml0CisjZGVmaW5lIHN3X3JlbmRlenZvdXNfZmluYQkJCQkJCQlzd19kaXNjb3ZlcnlfZmluYQorI2RlZmluZSBzd19yZW5kZXp2b3VzX3B1Ymxpc2hfZG9tYWluCQkJc3dfZGlzY292ZXJ5X3B1Ymxpc2hfZG9tYWluCisjZGVmaW5lIHN3X3JlbmRlenZvdXNfc3RvcF9wdWJsaXNoX2RvbWFpbgkJc3dfZGlzY292ZXJ5X3N0b3BfcHVibGlzaF9kb21haW4KKyNkZWZpbmUgc3dfcmVuZGV6dm91c19wdWJsaXNoX2hvc3QJCQkJc3dfZGlzY292ZXJ5X3B1Ymxpc2hfaG9zdAorI2RlZmluZSBzd19yZW5kZXp2b3VzX3N0b3BfcHVibGlzaF9ob3N0CQlzd19kaXNjb3Zlcnlfc3RvcF9wdWJsaXNoX2hvc3QKKyNkZWZpbmUgc3dfcmVuZGV6dm91c19wdWJsaXNoCQkJCQkJc3dfZGlzY292ZXJ5X3B1Ymxpc2gKKyNkZWZpbmUgc3dfcmVuZGV6dm91c19wdWJsaXNoX3VwZGF0ZQkJCXN3X2Rpc2NvdmVyeV9wdWJsaXNoX3VwZGF0ZQorI2RlZmluZSBzd19yZW5kZXp2b3VzX3N0b3BfcHVibGlzaAkJCQlzd19kaXNjb3Zlcnlfc3RvcF9wdWJsaXNoCisjZGVmaW5lIHN3X3JlbmRlenZvdXNfYnJvd3NlX2RvbWFpbnMJCQlzd19kaXNjb3ZlcnlfYnJvd3NlX2RvbWFpbnMKKyNkZWZpbmUgc3dfcmVuZGV6dm91c19zdG9wX2Jyb3dzZV9kb21haW5zCQlzd19kaXNjb3Zlcnlfc3RvcF9icm93c2VfZG9tYWlucworI2RlZmluZSBzd19yZW5kZXp2b3VzX2Jyb3dzZV9zZXJ2aWNlcwkJCXN3X2Rpc2NvdmVyeV9icm93c2UKKyNkZWZpbmUgc3dfcmVuZGV6dm91c19zdG9wX2Jyb3dzZV9zZXJ2aWNlcwlzd19kaXNjb3Zlcnlfc3RvcF9icm93c2UKKyNkZWZpbmUgc3dfcmVuZGV6dm91c19yZXNvbHZlCQkJCQkJc3dfZGlzY292ZXJ5X3Jlc29sdmUKKyNkZWZpbmUgc3dfcmVuZGV6dm91c19zdG9wX3Jlc29sdmUJCQkJc3dfZGlzY292ZXJ5X3N0b3BfcmVzb2x2ZQorI2RlZmluZSBzd19yZW5kZXp2b3VzX3J1bgkJCQkJCQlzd19kaXNjb3ZlcnlfcnVuCisjZGVmaW5lIHN3X3JlbmRlenZvdXNfc3RvcF9ydW4JCQkJCXN3X2Rpc2NvdmVyeV9zdG9wX3J1bgorI2RlZmluZSBzd19yZW5kZXp2b3VzX3NvY2tldAkJCQkJCXN3X2Rpc2NvdmVyeV9zb2NrZXQKKyNkZWZpbmUgc3dfcmVuZGV6dm91c19yZWFkX3NvY2tldAkJCQlzd19kaXNjb3ZlcnlfcmVhZF9zb2NrZXQKKyNkZWZpbmUgc3dfcmVuZGV6dm91c19zYWx0CQkJCQkJCXN3X2Rpc2NvdmVyeV9zYWx0CisjZGVmaW5lIFNXX1JFTkRFWlZPVVNfRV9CQVNFCQkJCQkJU1dfRElTQ09WRVJZX0VfQkFTRQorI2RlZmluZSBTV19SRU5ERVpWT1VTX0VfVU5LTk9XTgkJCQkJU1dfRElTQ09WRVJZX0VfVU5LTk9XTgorI2RlZmluZSBTV19SRU5ERVpWT1VTX0VfTk9fU1VDSF9OQU1FCQkJU1dfRElTQ09WRVJZX0VfTk9fU1VDSF9OQU1FCisjZGVmaW5lIFNXX1JFTkRFWlZPVVNfRV9OT19NRU0JCQkJCVNXX0RJU0NPVkVSWV9FX05PX01FTQorI2RlZmluZSBTV19SRU5ERVpWT1VTX0VfQkFEX1BBUkFNCQkJCVNXX0RJU0NPVkVSWV9FX0JBRF9QQVJBTQorI2RlZmluZSBTV19SRU5ERVpWT1VTX0VfQkFEX1JFRkVSRU5DRQkJCVNXX0RJU0NPVkVSWV9FX0JBRF9SRUZFUkVOQ0UKKyNkZWZpbmUgU1dfUkVOREVaVk9VU19FX0JBRF9TVEFURQkJCQlTV19ESVNDT1ZFUllfRV9CQURfU1RBVEUKKyNkZWZpbmUgU1dfUkVOREVaVk9VU19FX0JBRF9GTEFHUwkJCQlTV19ESVNDT1ZFUllfRV9CQURfRkxBR1MKKyNkZWZpbmUgU1dfUkVOREVaVk9VU19FX05PVF9TVVBQT1JURUQJCQlTV19ESVNDT1ZFUllfRV9OT1RfU1VQUE9SVEVECisjZGVmaW5lIFNXX1JFTkRFWlZPVVNfRV9OT1RfSU5JVElBTElaRUQJCVNXX0RJU0NPVkVSWV9FX05PVF9JTklUSUFMSVpFRAorI2RlZmluZSBTV19SRU5ERVpWT1VTX0VfTk9fQ0FDSEUJCQkJCVNXX0RJU0NPVkVSWV9FX05PX0NBQ0hFCisjZGVmaW5lIFNXX1JFTkRFWlZPVVNfRV9BTFJFQURZX1JFR0lTVEVSRUQJU1dfRElTQ09WRVJZX0VfQUxSRUFEWV9SRUdJU1RFUkVECisjZGVmaW5lIFNXX1JFTkRFWlZPVVNfRV9OQU1FX0NPTkZMSUNUCQkJU1dfRElTQ09WRVJZX0VfTkFNRV9DT05GTElDVAorI2RlZmluZSBTV19SRU5ERVpWT1VTX0VfSU5WQUxJRAkJCQkJU1dfRElTQ09WRVJZX0VfSU5WQUxJRAorCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvbXBhdC1ob3dsL2luY2x1ZGUvcmVuZGV6dm91cy90ZXh0X3JlY29yZC5oIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbXBhdC1ob3dsL2luY2x1ZGUvcmVuZGV6dm91cy90ZXh0X3JlY29yZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMmJmYzIKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tcGF0LWhvd2wvaW5jbHVkZS9yZW5kZXp2b3VzL3RleHRfcmVjb3JkLmgKQEAgLTAsMCArMSwzNiBAQAorI2lmbmRlZiBfcmVuZGV6dm91c190ZXh0X3JlY29yZF9oCisjZGVmaW5lIF9yZW5kZXp2b3VzX3RleHRfcmVjb3JkX2gKKworLyoKKyAqIENvcHlyaWdodCAyMDAzLCAyMDA0IFBvcmNoZG9nIFNvZnR3YXJlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqCVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKglhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICoJCTEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqCQkgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoJCTIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqCQkgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKgkJICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICoJVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBQT1JDSERPRyBTT0ZUV0FSRSBgYEFTIElTJycgQU5EIEFOWQorICoJRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICoJV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICoJSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEhPV0wgUFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICoJSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKglCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICoJREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICoJT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRQorICoJT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKglPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoJVGhlIHZpZXdzIGFuZCBjb25jbHVzaW9ucyBjb250YWluZWQgaW4gdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uIGFyZSB0aG9zZQorICoJb2YgdGhlIGF1dGhvcnMgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgcmVwcmVzZW50aW5nIG9mZmljaWFsIHBvbGljaWVzLAorICoJZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBvZiBQb3JjaGRvZyBTb2Z0d2FyZS4KKyAqLworCisKKyNpbmNsdWRlIDxkaXNjb3ZlcnkvdGV4dF9yZWNvcmQuaD4KKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtaG93bC9pbmNsdWRlL3NhbHQvYWRkcmVzcy5oIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbXBhdC1ob3dsL2luY2x1ZGUvc2FsdC9hZGRyZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE4M2Y4ZAotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtaG93bC9pbmNsdWRlL3NhbHQvYWRkcmVzcy5oCkBAIC0wLDAgKzEsMTI4IEBACisjaWZuZGVmIF9zYWx0X2FkZHJlc3NfaAorI2RlZmluZSBfc2FsdF9hZGRyZXNzX2gKKworLyoKKyAqIENvcHlyaWdodCAyMDAzLCAyMDA0IFBvcmNoZG9nIFNvZnR3YXJlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqCVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKglhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICoJCTEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqCQkgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoJCTIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqCQkgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKgkJICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICoJVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBQT1JDSERPRyBTT0ZUV0FSRSBgYEFTIElTJycgQU5EIEFOWQorICoJRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICoJV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICoJSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEhPV0wgUFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICoJSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKglCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICoJREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICoJT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRQorICoJT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKglPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoJVGhlIHZpZXdzIGFuZCBjb25jbHVzaW9ucyBjb250YWluZWQgaW4gdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uIGFyZSB0aG9zZQorICoJb2YgdGhlIGF1dGhvcnMgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgcmVwcmVzZW50aW5nIG9mZmljaWFsIHBvbGljaWVzLAorICoJZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBvZiBQb3JjaGRvZyBTb2Z0d2FyZS4KKyAqLworCisKKyNpbmNsdWRlIDxzYWx0L3NhbHQuaD4KKworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisKK3R5cGVkZWYgc3RydWN0IF9zd19pcHY0X2FkZHJlc3MKK3sKKwlzd191aW50MzIJbV9hZGRyOworfSBzd19pcHY0X2FkZHJlc3M7CisKK3R5cGVkZWYgc3dfdWludDMyIHN3X3NhZGRyOworCisKK3N3X2lwdjRfYWRkcmVzcyBIT1dMX0FQSQorc3dfaXB2NF9hZGRyZXNzX2FueSh2b2lkKTsKKworCitzd19pcHY0X2FkZHJlc3MgSE9XTF9BUEkKK3N3X2lwdjRfYWRkcmVzc19sb29wYmFjayh2b2lkKTsKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X2lwdjRfYWRkcmVzc19pbml0KAorCQkJCXN3X2lwdjRfYWRkcmVzcwkqCXNlbGYpOworCisKK3N3X3Jlc3VsdCBIT1dMX0FQSQorc3dfaXB2NF9hZGRyZXNzX2luaXRfZnJvbV9zYWRkcigKKwkJCQlzd19pcHY0X2FkZHJlc3MJKglzZWxmLAorCQkJCXN3X3NhZGRyCQkJc2FkZHIpOworCisKK3N3X3Jlc3VsdCBIT1dMX0FQSQorc3dfaXB2NF9hZGRyZXNzX2luaXRfZnJvbV9uYW1lKAorCQkJCXN3X2lwdjRfYWRkcmVzcwkJKglzZWxmLAorCQkJCXN3X2NvbnN0X3N0cmluZwluYW1lKTsKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X2lwdjRfYWRkcmVzc19pbml0X2Zyb21fYWRkcmVzcygKKwkJCQlzd19pcHY0X2FkZHJlc3MJCSoJc2VsZiwKKwkJCQlzd19pcHY0X2FkZHJlc3MJCQlhZGRyKTsKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X2lwdjRfYWRkcmVzc19pbml0X2Zyb21fdGhpc19ob3N0KAorCQkJCXN3X2lwdjRfYWRkcmVzcwkJKglzZWxmKTsKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X2lwdjRfYWRkcmVzc19maW5hKAorCQkJCXN3X2lwdjRfYWRkcmVzcwlzZWxmKTsKKworCitzd19ib29sIEhPV0xfQVBJCitzd19pcHY0X2FkZHJlc3NfaXNfYW55KAorCQkJCXN3X2lwdjRfYWRkcmVzcwlzZWxmKTsKKworCitzd19zYWRkciBIT1dMX0FQSQorc3dfaXB2NF9hZGRyZXNzX3NhZGRyKAorCQkJCXN3X2lwdjRfYWRkcmVzcwlzZWxmKTsKKworCitzd19zdHJpbmcgSE9XTF9BUEkKK3N3X2lwdjRfYWRkcmVzc19uYW1lKAorCQkJCXN3X2lwdjRfYWRkcmVzcwlzZWxmLAorCQkJCXN3X3N0cmluZwkJCW5hbWUsCisJCQkJc3dfdWludDMyCQkJCWxlbik7CisKKworc3dfcmVzdWx0IEhPV0xfQVBJCitzd19pcHY0X2FkZHJlc3NfZGVjb21wb3NlKAorCQkJCXN3X2lwdjRfYWRkcmVzcwlzZWxmLAorCQkJCXN3X3VpbnQ4CQkJKglhMSwKKwkJCQlzd191aW50OAkJCSoJYTIsCisJCQkJc3dfdWludDgJCQkqCWEzLAorCQkJCXN3X3VpbnQ4CQkJKglhNCk7CisKKworc3dfYm9vbCBIT1dMX0FQSQorc3dfaXB2NF9hZGRyZXNzX2VxdWFscygKKwkJCQlzd19pcHY0X2FkZHJlc3MJc2VsZiwKKwkJCQlzd19pcHY0X2FkZHJlc3MJYWRkcik7CisKKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCit9CisjZW5kaWYKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtaG93bC9pbmNsdWRlL3NhbHQvZGVidWcuaCBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtaG93bC9pbmNsdWRlL3NhbHQvZGVidWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTM5NzdiCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbXBhdC1ob3dsL2luY2x1ZGUvc2FsdC9kZWJ1Zy5oCkBAIC0wLDAgKzEsMjMwIEBACisjaWZuZGVmIF9zYWx0X2RlYnVnX2gKKyNkZWZpbmUgX3NhbHRfZGVidWdfaAorCisvKgorICogQ29weXJpZ2h0IDIwMDMsIDIwMDQgUG9yY2hkb2cgU29mdHdhcmUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICoJUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqCWFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKgkJMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICoJCSAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgkJMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICoJCSAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqCQkgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKglUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFBPUkNIRE9HIFNPRlRXQVJFIGBgQVMgSVMnJyBBTkQgQU5ZCisgKglFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKglXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKglJTiBOTyBFVkVOVCBTSEFMTCBUSEUgSE9XTCBQUk9KRUNUIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKglJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqCUJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKglEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKglPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFCisgKglPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqCU9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKglUaGUgdmlld3MgYW5kIGNvbmNsdXNpb25zIGNvbnRhaW5lZCBpbiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24gYXJlIHRob3NlCisgKglvZiB0aGUgYXV0aG9ycyBhbmQgc2hvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCBhcyByZXByZXNlbnRpbmcgb2ZmaWNpYWwgcG9saWNpZXMsCisgKgllaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIG9mIFBvcmNoZG9nIFNvZnR3YXJlLgorICovCisKKyNpbmNsdWRlIDxzYWx0L3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworCisjZGVmaW5lIFNXX0xPR19XQVJOSU5HICAgICAxIDw8IDAKKyNkZWZpbmUgU1dfTE9HX0VSUk9SICAgICAgIDEgPDwgMQorI2RlZmluZSBTV19MT0dfTk9USUNFICAgICAgMSA8PCAyCisjZGVmaW5lIFNXX0xPR19WRVJCT1NFICAgICAxIDw8IDMKKyNkZWZpbmUgU1dfTE9HX09GRiAgICAgICAgIDB4MAorCisKKyNpZiAoZGVmaW5lZCggX19HTlVDX18pKQorCisjCWlmICgoX19HTlVDX18gPiAzKSB8fCAoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkpCisKKyMJCWRlZmluZSAgX19DOTlfVkFfQVJHU19fCTEKKworIwkJZGVmaW5lICBfX0dOVV9WQV9BUkdTX18JMAorCisjCWVsc2UKKworIwkJZGVmaW5lICBfX0M5OV9WQV9BUkdTX18JMAorCisjCQlkZWZpbmUgIF9fR05VX1ZBX0FSR1NfXwkxCisKKyMJZW5kaWYKKworI2Vsc2UKKworIwlkZWZpbmUgIF9fQzk5X1ZBX0FSR1NfXwkJMAorCisjCWRlZmluZSAgX19HTlVfVkFfQVJHU19fCQkwCisKKyNlbmRpZgorCisKKyMgaWYgKChfX0dOVUNfXyA+IDIpIHx8ICgoX19HTlVDX18gPT0gMikgJiYgKF9fR05VQ19NSU5PUl9fID49IDkpKSkKKworIwlkZWZpbmUJX19TV19GVU5DVElPTl9fCQkJX19mdW5jX18KKworI2VsaWYgKGRlZmluZWQoIF9fR05VQ19fKSkKKworIwlkZWZpbmUJX19TV19GVU5DVElPTl9fCQkJX19QUkVUVFlfRlVOQ1RJT05fXworCisjZWxpZiggZGVmaW5lZChfTVNDX1ZFUiApICYmICFkZWZpbmVkKF9XSU4zMl9XQ0UpKQorCisjCWRlZmluZQlfX1NXX0ZVTkNUSU9OX18JCQlfX0ZVTkNUSU9OX18KKworI2Vsc2UKKworIwlkZWZpbmUJX19TV19GVU5DVElPTl9fCQkJIiIKKworI2VuZGlmCisKKworI2RlZmluZSBzd19jaGVjayhleHByLCBsYWJlbCwgYWN0aW9uKQkJCVwKK2RvIAkJCQkJCQkJCQkJCQkJXAorewkJCQkJCQkJCQkJCQkJCVwKKwlpZiAoIShleHByKSkgCQkJCQkJCQkJCVwKKwl7CQkJCQkJCQkJCQkJCQlcCisJCXsJCQkJCQkJCQkJCQkJXAorCQkJYWN0aW9uOwkJCQkJCQkJCQlcCisJCX0JCQkJCQkJCQkJCQkJXAorCQlnb3RvIGxhYmVsOwkJCQkJCQkJCQlcCisJfQkJCQkJCQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKworCisjZGVmaW5lIHN3X2NoZWNrX2xvZyhleHByLCBsYWJlbCwgYWN0aW9uKQkJXAorZG8gCQkJCQkJCQkJCQkJCQlcCit7CQkJCQkJCQkJCQkJCQkJXAorCWlmICghKGV4cHIpKSAJCQkJCQkJCQkJXAorCXsJCQkJCQkJCQkJCQkJCVwKKwkJc3dfcHJpbnRfYXNzZXJ0KDAsIE5VTEwsIF9fRklMRV9fLCBfX1NXX0ZVTkNUSU9OX18sIF9fTElORV9fKTsJXAorCQl7CQkJCQkJCQkJCQkJCVwKKwkJCWFjdGlvbjsJCQkJCQkJCQkJXAorCQl9CQkJCQkJCQkJCQkJCVwKKwkJZ290byBsYWJlbDsJCQkJCQkJCQkJXAorCX0JCQkJCQkJCQkJCQkJCVwKK30gd2hpbGUgKDApCisKKworI2RlZmluZSBzd19jaGVja19va2F5KGNvZGUsIGxhYmVsKQkJCQlcCitkbyAJCQkJCQkJCQkJCQkJCVwKK3sJCQkJCQkJCQkJCQkJCQlcCisJaWYgKChpbnQpIGNvZGUgIT0gMCkgCQkJCQkJCVwKKwl7CQkJCQkJCQkJCQkJCQlcCisJCWdvdG8gbGFiZWw7CQkJCQkJCQkJCVwKKwl9CQkJCQkJCQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisKKyNkZWZpbmUgc3dfY2hlY2tfb2theV9sb2coY29kZSwgbGFiZWwpCQkJXAorZG8gCQkJCQkJCQkJCQkJCQlcCit7CQkJCQkJCQkJCQkJCQkJXAorCWlmICgoaW50KSBjb2RlICE9IDApIAkJCQkJCQlcCisJewkJCQkJCQkJCQkJCQkJXAorCQlzd19wcmludF9hc3NlcnQoKGludCkgY29kZSwgTlVMTCwgX19GSUxFX18sIF9fU1dfRlVOQ1RJT05fXywgX19MSU5FX18pOwlcCisJCWdvdG8gbGFiZWw7CQkJCQkJCQkJCVwKKwl9CQkJCQkJCQkJCQkJCQlcCit9IHdoaWxlICggMCApCisKKworI2RlZmluZSBzd190cmFuc2xhdGVfZXJyb3IoZXhwciwgZXJybm8pCQkoKGV4cHIpID8gMCA6IChlcnJubykpCisKKworI2lmIGRlZmluZWQoV0lOMzIpCisKKyMJZGVmaW5lIHN3X3NvY2tldF9lcnJubygpCQkoaW50KSBXU0FHZXRMYXN0RXJyb3IoKQorIwlkZWZpbmUgc3dfc2V0X3NvY2tldF9lcnJubyhYKQlXU0FTZXRMYXN0RXJyb3IoWCkKKyMJZGVmaW5lIHN3X3N5c3RlbV9lcnJubygpCQkoaW50KSBHZXRMYXN0RXJyb3IoKQorIwlkZWZpbmUgc3dfc2V0X3N5c3RlbV9lcnJubyhYKQlTZXRMYXN0RXJyb3IoWCkKKworI2Vsc2UKKworIwlkZWZpbmUgc3dfc29ja2V0X2Vycm5vKCkJCWVycm5vCisjCWRlZmluZSBzd19zZXRfc29ja2V0X2Vycm5vKFgpCWVycm5vID0gWAorIwlkZWZpbmUgc3dfc3lzdGVtX2Vycm5vKCkJCWVycm5vCisjCWRlZmluZSBzd19zZXRfc3lzdGVtX2Vycm5vKFgpCWVycm5vID0gWAorCisjZW5kaWYKKworCisjaWYgIWRlZmluZWQoTkRFQlVHKQorCisjCWRlZmluZSBzd19hc3NlcnQoWCkJCVwKKwkJCQkJCQkJCVwKKwlkbwkJCQkJCQkJXAorCXsJCQkJCQkJCVwKKwkJaWYgKCEoWCkpCQkJCVwKKwkJewkJCQkJCQlcCisJCQlzd19wcmludF9hc3NlcnQoIDAsICNYLCBfX0ZJTEVfXywgX19TV19GVU5DVElPTl9fLCBfX0xJTkVfXyk7IFwKKwkJfQkJCQkJCQlcCisJfSB3aGlsZSggMCApCisKKyNlbHNlCisKKyMJZGVmaW5lIHN3X2Fzc2VydChYKQorCisjZW5kaWYKKworCit2b2lkIEhPV0xfQVBJCitzd19wcmludF9hc3NlcnQoCisJCWludAkJCQkJY29kZSwKKwkJc3dfY29uc3Rfc3RyaW5nCWFzc2VydF9zdHJpbmcsCisJCXN3X2NvbnN0X3N0cmluZwlmaWxlLAorCQlzd19jb25zdF9zdHJpbmcJZnVuYywKKwkJaW50CQkJCQlsaW5lKTsKKworCisjaWYgIWRlZmluZWQoTkRFQlVHKQorCit2b2lkIEhPV0xfQVBJCitzd19wcmludF9kZWJ1ZygKKwkJaW50CQkJCQlsZXZlbCwKKwkJc3dfY29uc3Rfc3RyaW5nCWZvcm1hdCwKKwkJLi4uKTsKKworIwlpZiAoX19DOTlfVkFfQVJHU19fKQorCisjCQlkZWZpbmUgIHN3X2RlYnVnKC4uLikJCQlzd19wcmludF9kZWJ1ZyhfX1ZBX0FSR1NfXykKKworIwllbHNlCisKKyMJCWRlZmluZSAgc3dfZGVidWcJCQkJCXN3X3ByaW50X2RlYnVnCisKKyMJZW5kaWYKKworI2Vsc2UKKworIwlpZiAoX19DOTlfVkFfQVJHU19fKQorCisjCQlkZWZpbmUgIHN3X2RlYnVnKC4uLikKKworIwllbHNlCisKKyMJCWRlZmluZSAgc3dfZGVidWcJCQkJCXdoaWxlKCAwICkKKworIwllbmRpZgorCisjZW5kaWYKKworCisjZGVmaW5lIFNXX1VOVVNFRF9QQVJBTShYKQkodm9pZCkgKFgpCisKKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCit9CisjZW5kaWYKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtaG93bC9pbmNsdWRlL3NhbHQvaW50ZXJmYWNlLmggYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tcGF0LWhvd2wvaW5jbHVkZS9zYWx0L2ludGVyZmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0YjFiMWQKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tcGF0LWhvd2wvaW5jbHVkZS9zYWx0L2ludGVyZmFjZS5oCkBAIC0wLDAgKzEsMTE1IEBACisjaWZuZGVmIF9zd19pbnRlcmZhY2VfaAorI2RlZmluZSBfc3dfaW50ZXJmYWNlX2gKKworLyoKKyAqIENvcHlyaWdodCAyMDAzLCAyMDA0IFBvcmNoZG9nIFNvZnR3YXJlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqCVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKglhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICoJCTEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqCQkgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoJCTIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqCQkgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKgkJICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICoJVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBQT1JDSERPRyBTT0ZUV0FSRSBgYEFTIElTJycgQU5EIEFOWQorICoJRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICoJV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICoJSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEhPV0wgUFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICoJSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKglCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICoJREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICoJT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRQorICoJT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKglPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoJVGhlIHZpZXdzIGFuZCBjb25jbHVzaW9ucyBjb250YWluZWQgaW4gdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uIGFyZSB0aG9zZQorICoJb2YgdGhlIGF1dGhvcnMgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgcmVwcmVzZW50aW5nIG9mZmljaWFsIHBvbGljaWVzLAorICoJZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBvZiBQb3JjaGRvZyBTb2Z0d2FyZS4KKyAqLworCisjaW5jbHVkZSA8c2FsdC9hZGRyZXNzLmg+CisKK3N0cnVjdAkJCQkJCQkJCQkJX3N3X25ldHdvcmtfaW50ZXJmYWNlOwordHlwZWRlZiBzdHJ1Y3QgX3N3X25ldHdvcmtfaW50ZXJmYWNlICogc3dfbmV0d29ya19pbnRlcmZhY2U7CisKKwordHlwZWRlZiBlbnVtIF9zd19uZXR3b3JrX2ludGVyZmFjZV9zdGF0ZQoreworCVNXX05FVFdPUktfSU5URVJGQUNFX1JVTk5JTkcJCT0gMHgxLAorfSBzd19uZXR3b3JrX2ludGVyZmFjZV9zdGF0ZTsKKworCit0eXBlZGVmIHN0cnVjdCBfc3dfbWFjX2FkZHJlc3MKK3sKKwlzd191aW50OAltX2lkWzZdOworfSBzd19tYWNfYWRkcmVzczsKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X25ldHdvcmtfaW50ZXJmYWNlcygKKwkJCQlzd191aW50MzIJCQkJCSoJY291bnQsCisJCQkJc3dfbmV0d29ya19pbnRlcmZhY2UJKioJbmV0aWZzKTsKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X25ldHdvcmtfaW50ZXJmYWNlc19maW5hKAorCQkJCXN3X3VpbnQzMgkJCQkJCWNvdW50LAorCQkJCXN3X25ldHdvcmtfaW50ZXJmYWNlCSoJbmV0aWZzKTsKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X25ldHdvcmtfaW50ZXJmYWNlX2ZpbmEoCisJCQkJc3dfbmV0d29ya19pbnRlcmZhY2UJCW5ldGlmKTsKKworCitzd19yZXN1bHQgIEhPV0xfQVBJCitzd19uZXR3b3JrX2ludGVyZmFjZV9ieV9uYW1lKAorCQkJCXN3X3N0cmluZwkJCQkJbmFtZSwKKwkJCQlzd19uZXR3b3JrX2ludGVyZmFjZQkqCW5ldGlmKTsKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X25ldHdvcmtfaW50ZXJmYWNlX25hbWUoCisJCQkJc3dfbmV0d29ya19pbnRlcmZhY2UJCW5ldGlmLAorCQkJCXN3X3N0cmluZwkJCQkJbmFtZSwKKwkJCQlzd191aW50MzIJCQkJCQlsZW4pOworCisKK3N3X3Jlc3VsdCBIT1dMX0FQSQorc3dfbmV0d29ya19pbnRlcmZhY2VfbWFjX2FkZHJlc3MoCisJCQkJc3dfbmV0d29ya19pbnRlcmZhY2UJCW5ldGlmLAorCQkJCXN3X21hY19hZGRyZXNzCQkJKglhZGRyKTsKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X25ldHdvcmtfaW50ZXJmYWNlX2lwdjRfYWRkcmVzcygKKwkJCQlzd19uZXR3b3JrX2ludGVyZmFjZQkJbmV0aWYsCisJCQkJc3dfaXB2NF9hZGRyZXNzCQkqCWFkZHIpOworCisKK3N3X3Jlc3VsdCBIT1dMX0FQSQorc3dfbmV0d29ya19pbnRlcmZhY2Vfc2V0X2lwdjRfYWRkcmVzcygKKwkJCQlzd19uZXR3b3JrX2ludGVyZmFjZQkJbmV0aWYsCisJCQkJc3dfaXB2NF9hZGRyZXNzCQkJYWRkcik7CisKKworc3dfcmVzdWx0IEhPV0xfQVBJCitzd19uZXR3b3JrX2ludGVyZmFjZV9pbmRleCgKKwkJCQlzd19uZXR3b3JrX2ludGVyZmFjZQkJbmV0aWYsCisJCQkJc3dfdWludDMyCQkJCQkqCWluZGV4KTsKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X25ldHdvcmtfaW50ZXJmYWNlX2xpbmtlZCgKKwkJCQlzd19uZXR3b3JrX2ludGVyZmFjZQkJbmV0aWYsCisJCQkJc3dfYm9vbAkJCQkJKglsaW5rZWQpOworCisKK3N3X3Jlc3VsdCBIT1dMX0FQSQorc3dfbmV0d29ya19pbnRlcmZhY2VfdXAoCisJCQkJc3dfbmV0d29ya19pbnRlcmZhY2UJCW5ldGlmKTsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtaG93bC9pbmNsdWRlL3NhbHQvcGxhdGZvcm0uaCBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtaG93bC9pbmNsdWRlL3NhbHQvcGxhdGZvcm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmI5ZGNjCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbXBhdC1ob3dsL2luY2x1ZGUvc2FsdC9wbGF0Zm9ybS5oCkBAIC0wLDAgKzEsNDM4IEBACisjaWZuZGVmIF9zd19wbGF0Zm9ybV9oCisjZGVmaW5lIF9zd19wbGF0Zm9ybV9oCisKKy8qCisgKiBDb3B5cmlnaHQgMjAwMywgMjAwNCBQb3JjaGRvZyBTb2Z0d2FyZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqCVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKglhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICoJCTEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqCQkgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoJCTIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqCQkgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKgkJICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICoJVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBQT1JDSERPRyBTT0ZUV0FSRSBgYEFTIElTJycgQU5EIEFOWQorICoJRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICoJV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICoJSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEhPV0wgUFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICoJSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKglCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICoJREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICoJT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRQorICoJT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKglPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoJVGhlIHZpZXdzIGFuZCBjb25jbHVzaW9ucyBjb250YWluZWQgaW4gdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uIGFyZSB0aG9zZQorICoJb2YgdGhlIGF1dGhvcnMgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgcmVwcmVzZW50aW5nIG9mZmljaWFsIHBvbGljaWVzLAorICoJZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBvZiBQb3JjaGRvZyBTb2Z0d2FyZSwgSW5jLgorICovCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworCisjaWYgZGVmaW5lZChfX1ZYV09SS1NfXykKKworIwlkZWZpbmUgSE9XTF9BUEkKKyMJaW5jbHVkZSA8dnh3b3Jrcy5oPgorIwlpbmNsdWRlIDxzeXNMaWIuaD4KKworIwlkZWZpbmUgc3dfc25vb3plKFNFQ1MpCQl0YXNrRGVsYXkoc3lzQ2xrUmF0ZUdldCgpICogU0VDUykKKworI2VsaWYgZGVmaW5lZChXSU4zMikKKworIwlkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorIwlkZWZpbmUgSE9XTF9BUEkgX19zdGRjYWxsCisjCXByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDEyNykKKyMJaW5jbHVkZSA8d2luZG93cy5oPgorIwlpbmNsdWRlIDxzdGRsaWIuaD4KKwordHlwZWRlZiBzaWduZWQgY2hhcgkJCQlpbnQ4X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIJCQl1X2ludDhfdDsKK3R5cGVkZWYgc2lnbmVkIHNob3J0CQkJCWludDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CQkJdV9pbnQxNl90OwordHlwZWRlZiBzaWduZWQgbG9uZwkJCQlpbnQzMl90OwordHlwZWRlZiB1bnNpZ25lZCBsb25nCQkJdV9pbnQzMl90OwordHlwZWRlZiBfaW50NjQJCQkJCQlpbnQ2NF90OwordHlwZWRlZiBfaW50NjQJCQkJCQl1X2ludDY0X3Q7CisKKyMJZGVmaW5lIHN3X3Nub296ZShTRUNTKQkJU2xlZXAoU0VDUyAqIDEwMDApCisKKyNlbHNlCisKKyMJZGVmaW5lIEhPV0xfQVBJCisjCWlmIGRlZmluZWQoSE9XTF9LRVJORUwpCisjCQlpbmNsdWRlIDxob3dsX2NvbmZpZy5oPgorIwllbmRpZgorIwlpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyMJaW5jbHVkZSA8c3RkbGliLmg+CisjCWluY2x1ZGUgPHVuaXN0ZC5oPgorCisjCWRlZmluZSBzd19zbm9vemUoU0VDUykJCXNsZWVwKFNFQ1MpCisKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX3N1bikKKworIwlkZWZpbmUgdV9pbnQ4X3QJdWludDhfdAorIwlkZWZpbmUgdV9pbnQxNl90CXVpbnQxNl90CisjCWRlZmluZSB1X2ludDMyX3QJdWludDMyX3QKKyMJZGVmaW5lIHVfaW50NjRfdAl1aW50NjRfdAorCisjZW5kaWYKKwordHlwZWRlZiB2b2lkCQkJCSoJc3dfb3BhcXVlOwordHlwZWRlZiB2b2lkCQkJCSoJc3dfb3BhcXVlX3Q7Cit0eXBlZGVmIGludDhfdAkJCQkJc3dfaW50ODsKK3R5cGVkZWYgdV9pbnQ4X3QJCQkJc3dfdWludDg7Cit0eXBlZGVmIHVfaW50OF90CQkJCXN3X2Jvb2w7Cit0eXBlZGVmIGludDE2X3QJCQkJc3dfaW50MTY7Cit0eXBlZGVmIHVfaW50MTZfdAkJCQlzd191aW50MTY7Cit0eXBlZGVmIGludDMyX3QJCQkJc3dfaW50MzI7Cit0eXBlZGVmIHVfaW50MzJfdAkJCQlzd191aW50MzI7Cit0eXBlZGVmIGludDY0X3QJCQkJc3dfaW50NjQ7Cit0eXBlZGVmIHVfaW50NjRfdAkJCQlzd191aW50NjQ7Cit0eXBlZGVmIGNoYXIJCQkJKglzd19zdHJpbmc7Cit0eXBlZGVmIHN3X3VpbnQ4CQkJKglzd19vY3RldHM7CisjaWYgIWRlZmluZWQoX19WWFdPUktTX18pIHx8IGRlZmluZWQoX19jcGx1c3BsdXMpCit0eXBlZGVmIGNvbnN0IGNoYXIJCSoJc3dfY29uc3Rfc3RyaW5nOwordHlwZWRlZiBjb25zdCB1X2ludDhfdAkqCXN3X2NvbnN0X29jdGV0czsKKyNlbHNlCit0eXBlZGVmIGNoYXIJCQkJKglzd19jb25zdF9zdHJpbmc7Cit0eXBlZGVmIHVfaW50OF90CQkJKglzd19jb25zdF9vY3RldHM7CisjZW5kaWYKK3R5cGVkZWYgc2l6ZV90CQkJCQlzd19zaXplX3Q7Cit0eXBlZGVmIGludAkJCQkJCXN3X3Jlc3VsdDsKKworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogRW5kaWFuLW9zaXR5CisgKgorICogU1dfRU5ESUFOIGlzIDAgZm9yIGJpZyBlbmRpYW4gcGxhdGZvcm1zLCAxCisgKiBmb3IgbGl0dGxlIGVuZGlhbiBwbGF0Zm9ybXMuCisgKgorICogVGhlIG1hY3JvIFdPUkRTX0JJR0VORElBTiB3aWxsIGJlIGRlZmluZWQKKyAqIGJ5IGF1dG9jb25mLiAgSWYgeW91IGFyZSB1c2luZyBIb3dsIG9uCisgKiBhIHBsYXRmb3JtICB0aGF0IGRvZXNuJ3QgaGF2ZSBhdXRvY29uZiwgZGVmaW5lCisgKiBTV19FTkRJQU4gZGlyZWN0bHkKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2lmICFkZWZpbmVkKFNXX0VORElBTikKKworIwlpZiBkZWZpbmVkKFdPUkRTX0JJR0VORElBTikgJiYgV09SRFNfQklHRU5ESUFOID09IDEKKworIwkJZGVmaW5lIFNXX0VORElBTgkwCisKKyMJZWxzZQorCisjCQlkZWZpbmUgU1dfRU5ESUFOCTEKKworIwllbmRpZgorCisjZW5kaWYKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFN0cmluZ3MKKyAqCisgKiBUaGVzZSBtYWNyb3Mgc3VwcG9ydHMgY3Jvc3MgcGxhdGZvcm0gc3RyaW5nIGZ1bmN0aW9ucworICogZm9yIHRoZSBmb2xsb3dpbmcgT1NlcworICoKKyAqIFdpbjMyCisgKiAqTklYCisgKiBQYWxtT1MKKyAqIFZ4V29ya3MKKyAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpZiBkZWZpbmVkKFdJTjMyKQorCisjCWluY2x1ZGUgPHN0cmluZy5oPgorCisjCWRlZmluZSBzd19tZW1zZXQoQVJHMSwgQVJHMiwgQVJHMykJCW1lbXNldCgoY2hhciopIEFSRzEsIEFSRzIsIEFSRzMpCisjCWRlZmluZSBzd19tZW1jcHkoQVJHMSwgQVJHMiwgQVJHMykJCW1lbW1vdmUoKGNoYXIqKSBBUkcxLCAoY2hhciopIEFSRzIsIEFSRzMpCisjCWRlZmluZSBzd19tZW1jbXAoQVJHMSwgQVJHMiwgQVJHMykJCW1lbWNtcCgoY2hhciopIEFSRzEsIEFSRzIsIEFSRzMpCisjCWRlZmluZSBzd19zdHJjYXNlY21wKEFSRzEsIEFSRzIpCQkJc3RyaWNtcChBUkcxLCBBUkcyKQorIwlkZWZpbmUgc3dfc3RybmNhc2VjbXAoQVJHMSwgQVJHMikJCXN0cm5pY21wKEFSRzEsIEFSRzIpCisjCWRlZmluZSBzd19zdHJjYXQoQVJHMSwgQVJHMikJCQkJc3RyY2F0KEFSRzEsIEFSRzIpCisjCWRlZmluZSBzd19zdHJuY2F0KEFSRzEsIEFSRzIpCQkJCXN0cm5jYXQoQVJHMSwgQVJHMikKKyMJZGVmaW5lIHN3X3N0cmNocihBUkcxLCBBUkcyKQkJCQlzdHJjaHIoQVJHMSwgQVJHMikKKyMJZGVmaW5lIHN3X3N0cmNtcChBUkcxLCBBUkcyKQkJCQlzdHJjbXAoQVJHMSwgQVJHMikKKyMJZGVmaW5lIHN3X3N0cm5jbXAoQVJHMSwgQVJHMikJCQkJc3RybmNtcChBUkcxLCBBUkcyKQorIwlkZWZpbmUgc3dfc3RyY29sbChBUkcxLCBBUkcyKQkJCQlzdHJjb2xsKEFSRzEsIEFSRzIpCisjCWRlZmluZSBzd19zdHJjcHkoQVJHMSwgQVJHMikJCQkJKEFSRzIpID8gc3RyY3B5KEFSRzEsIEFSRzIpIDogc3RyY3B5KEFSRzEsICIiKQorIwlkZWZpbmUgc3dfc3RybmNweShBUkcxLCBBUkcyLCBOKQkJCShBUkcyKSA/IHN0cm5jcHkoQVJHMSwgQVJHMiwgTikgOiBzdHJjcHkoQVJHMSwgIiIpCisjCWRlZmluZSBzd19zdHJjc3BuKEFSRzEsIEFSRzIpCQkJCXN0cmNzcG4oQVJHMSwgQVJHMikKKyMJZGVmaW5lIHN3X3N0cmxlbihBUkcxKQkJCQkJCXN0cmxlbihBUkcxKQorIwlkZWZpbmUgc3dfc3Ryc3RyKEFSRzEsIEFSRzIpCQkJCXN0cnN0cihBUkcxLCBBUkcyKQorIwlkZWZpbmUgc3dfc3RydG9rX3IoQVJHMSwgQVJHMiwgQVJHMykJc3RydG9rX3IoQVJHMSwgQVJHMiwgQVJHMykKKworI2VsaWYgZGVmaW5lZChfX1ZYV09SS1NfXykKKworIwlpbmNsdWRlIDxzdHJpbmcuaD4KKworZXh0ZXJuIHN3X2ludDMyCitzd19zdHJjYXNlY21wKAorCQlzd19jb25zdF9zdHJpbmcJYXJnMSwKKwkJc3dfY29uc3Rfc3RyaW5nCWFyZzIpOworCitleHRlcm4gc3dfaW50MzIKK3N3X3N0cm5jYXNlY21wKAorCQlzd19jb25zdF9zdHJpbmcJYXJnMSwKKwkJc3dfY29uc3Rfc3RyaW5nCWFyZzIsCisJCXN3X2xlbgkJCQluKTsKKworZXh0ZXJuIHN3X3N0cmluZworc3dfc3RydG9rX3IoCisJCXN3X3N0cmluZwkJCWFyZzEsCisJCXN3X2NvbnN0X3N0cmluZwlhcmcyLAorCQlzd19zdHJpbmcJCSoJbGFzdHMpOworCisjCWRlZmluZSBzd19tZW1zZXQoQVJHMSwgQVJHMiwgQVJHMykJCW1lbXNldCgoY2hhciopIEFSRzEsIEFSRzIsIEFSRzMpCisjCWRlZmluZSBzd19tZW1jcHkoQVJHMSwgQVJHMiwgQVJHMykJCW1lbWNweSgoY2hhciopIEFSRzEsIChjaGFyKikgQVJHMiwgQVJHMykKKyMJZGVmaW5lIHN3X21lbWNtcChBUkcxLCBBUkcyLCBBUkczKQkJbWVtY21wKChjaGFyKikgQVJHMSwgQVJHMiwgQVJHMykKKyMJZGVmaW5lIHN3X3N0cmNhdChBUkcxLCBBUkcyKQkJCQlzdHJjYXQoQVJHMSwgQVJHMikKKyMJZGVmaW5lIHN3X3N0cm5jYXQoQVJHMSwgQVJHMikJCQkJc3RybmNhdChBUkcxLCBBUkcyKQorIwlkZWZpbmUgc3dfc3RyY2hyKEFSRzEsIEFSRzIpCQkJCXN0cmNocihBUkcxLCBBUkcyKQorIwlkZWZpbmUgc3dfc3RyY21wKEFSRzEsIEFSRzIpCQkJCXN0cmNtcChBUkcxLCBBUkcyKQorIwlkZWZpbmUgc3dfc3RybmNtcChBUkcxLCBBUkcyKQkJCQlzdHJuY21wKEFSRzEsIEFSRzIpCisjCWRlZmluZSBzd19zdHJjb2xsKEFSRzEsIEFSRzIpCQkJCXN0cmNvbGwoQVJHMSwgQVJHMikKKyMJZGVmaW5lIHN3X3N0cmNweShBUkcxLCBBUkcyKQkJCQlBUkcyID8gc3RyY3B5KEFSRzEsIEFSRzIpIDogc3RyY3B5KEFSRzEsICIiKQorIwlkZWZpbmUgc3dfc3RybmNweShBUkcxLCBBUkcyLCBOKQkJCUFSRzIgPyBzdHJuY3B5KEFSRzEsIEFSRzIsIE4pIDogc3RyY3B5KEFSRzEsICIiKQorIwlkZWZpbmUgc3dfc3RyY3NwbihBUkcxLCBBUkcyKQkJCQlzdHJjc3BuKEFSRzEsIEFSRzIpCisjCWRlZmluZSBzd19zdHJsZW4oQVJHMSkJCQkJCQlzdHJsZW4oQVJHMSkKKyMJZGVmaW5lIHN3X3N0cnN0cihBUkcxLCBBUkcyKQkJCQlzdHJzdHIoQVJHMSwgQVJHMikKKworI2VsaWYgZGVmaW5lZChfX1BBTE1PU19fKQorCisjCWluY2x1ZGUgPFN0cmluZ01nci5oPgorCisjCWRlZmluZSBzd19zdHJjYXNlY21wKEFSRzEsIEFSRzIpCQkJc3RyY2FzZWNtcChBUkcxLCBBUkcyKQorIwlkZWZpbmUgc3dfc3RybmNhc2VjbXAoQVJHMSwgQVJHMikJCXN0cm5jYXNlY21wKEFSRzEsIEFSRzIpCisjCWRlZmluZSBzd19zdHJjYXQoQVJHMSwgQVJHMikJCQkJU3RyQ2F0KEFSRzEsIEFSRzIpCisjCWRlZmluZSBzd19zdHJuY2F0KEFSRzEsIEFSRzIpCQkJCVN0ck5DYXQoQVJHMSwgQVJHMikKKyMJZGVmaW5lIHN3X3N0cmNocihBUkcxLCBBUkcyKQkJCQlTdHJDaHIoQVJHMSwgQVJHMikKKyMJZGVmaW5lIHN3X3N0cmNtcChBUkcxLCBBUkcyKQkJCQlTdHJDYW1wYXJlKEFSRzEsIEFSRzIpCisjCWRlZmluZSBzd19zdHJuY21wKEFSRzEsIEFSRzIpCQkJCVN0ck5Db21wYXJlKEFSRzEsIEFSRzIpCisjCWRlZmluZSBzd19zdHJjb2xsKEFSRzEsIEFSRzIpCQkJCXN0cmNvbGwoQVJHMSwgQVJHMikKKyMJZGVmaW5lIHN3X3N0cmNweShBUkcxLCBBUkcyKQkJCQlBUkcyID8gU3RyQ29weShBUkcxLCBBUkcyKSA6IFN0ckNvcHkoQVJHMSwgIiIpCisjCWRlZmluZSBzd19zdHJuY3B5KEFSRzEsIEFSRzIsIE4pCQkJQVJHMiA/IFN0ck5Db3B5KEFSRzEsIEFSRzIsIE4pIDogU3RyQ29weShBUkcxLCAiIikKKyMJZGVmaW5lIHN3X3N0cmNzcG4oQVJHMSwgQVJHMikJCQkJc3RyY3NwbihBUkcxLCBBUkcyKQorIwlkZWZpbmUgc3dfc3RybGVuKEFSRzEpCQkJCQkJU3RyTGVuKEFSRzEpCisjCWRlZmluZSBzd19zdHJzdHIoQVJHMSwgQVJHMikJCQkJc3Ryc3RyKEFSRzEsIEFSRzIpCisjCWRlZmluZSBzd19zdHJ0b2tfcihBUkcxLCBBUkcyLCBBUkczKQlzdHJ0b2tfcihBUkcxLCBBUkcyLCBBUkczKQorCisjZWxzZQorCisjCWluY2x1ZGUgPHN0cmluZy5oPgorCisjCWlmIGRlZmluZWQoX19MeW54X18pCisJCWNoYXIgKiBzdHJjaHIoY2hhciosIGludCk7CisjCWVuZGlmCisKKyMJZGVmaW5lIHN3X21lbXNldChBUkcxLCBBUkcyLCBBUkczKQkJbWVtc2V0KChjaGFyKikgQVJHMSwgQVJHMiwgQVJHMykKKyMJZGVmaW5lIHN3X21lbWNweShBUkcxLCBBUkcyLCBBUkczKQkJbWVtY3B5KChjaGFyKikgQVJHMSwgKGNoYXIqKSBBUkcyLCBBUkczKQorIwlkZWZpbmUgc3dfbWVtY21wKEFSRzEsIEFSRzIsIEFSRzMpCQltZW1jbXAoKGNoYXIqKSBBUkcxLCBBUkcyLCBBUkczKQorIwlkZWZpbmUgc3dfc3RyY2FzZWNtcChBUkcxLCBBUkcyKQkJCXN0cmNhc2VjbXAoQVJHMSwgQVJHMikKKyMJZGVmaW5lIHN3X3N0cm5jYXNlY21wKEFSRzEsIEFSRzIpCQlzdHJuY2FzZWNtcChBUkcxLCBBUkcyKQorIwlkZWZpbmUgc3dfc3RyY2F0KEFSRzEsIEFSRzIpCQkJCXN0cmNhdChBUkcxLCBBUkcyKQorIwlkZWZpbmUgc3dfc3RybmNhdChBUkcxLCBBUkcyKQkJCQlzdHJuY2F0KEFSRzEsIEFSRzIpCisjCWRlZmluZSBzd19zdHJjaHIoQVJHMSwgQVJHMikJCQkJc3RyY2hyKEFSRzEsIEFSRzIpCisjCWRlZmluZSBzd19zdHJjbXAoQVJHMSwgQVJHMikJCQkJc3RyY21wKEFSRzEsIEFSRzIpCisjCWRlZmluZSBzd19zdHJuY21wKEFSRzEsIEFSRzIpCQkJCXN0cm5jbXAoQVJHMSwgQVJHMikKKyMJZGVmaW5lIHN3X3N0cmNvbGwoQVJHMSwgQVJHMikJCQkJc3RyY29sbChBUkcxLCBBUkcyKQorIwlkZWZpbmUgc3dfc3RyY3B5KEFSRzEsIEFSRzIpCQkJCUFSRzIgPyBzdHJjcHkoQVJHMSwgQVJHMikgOiBzdHJjcHkoQVJHMSwgIiIpCisjCWRlZmluZSBzd19zdHJuY3B5KEFSRzEsIEFSRzIsIE4pCQkJQVJHMiA/IHN0cm5jcHkoQVJHMSwgQVJHMiwgTikgOiBzdHJjcHkoQVJHMSwgIiIpCisjCWRlZmluZSBzd19zdHJjc3BuKEFSRzEsIEFSRzIpCQkJCXN0cmNzcG4oQVJHMSwgQVJHMikKKyMJZGVmaW5lIHN3X3N0cmxlbihBUkcxKQkJCQkJCXN0cmxlbihBUkcxKQorIwlkZWZpbmUgc3dfc3Ryc3RyKEFSRzEsIEFSRzIpCQkJCXN0cnN0cihBUkcxLCBBUkcyKQorIwlkZWZpbmUgc3dfc3RydG9rX3IoQVJHMSwgQVJHMiwgQVJHMykJc3RydG9rX3IoQVJHMSwgQVJHMiwgQVJHMykKKworI2VuZGlmCisKKworc3dfc3RyaW5nCitzd19zdHJkdXAoCisJCXN3X2NvbnN0X3N0cmluZyBzdHIpOworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogTWVtb3J5CisgKgorICogVGhlc2UgbWFjcm9zIHN1cHBvcnQgY3Jvc3MgcGxhdGZvcm0gaGVhcCBmdW5jdGlvbnMuCisgKiBXaGVuIGNvbXBpbGluZyB3aXRoIERFQlVHLCBzb21lIGV4dHJhIGNoZWNraW5nIGlzCisgKiBkb25lIHdoaWNoIGNhbiBhaWQgaW4gdHJhY2tpbmcgZG93biBoZWFwIGNvcnJ1cHRpb24KKyAqIHByb2JsZW1zCisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaWYgZGVmaW5lZChOREVCVUcpCisKKyMJZGVmaW5lCXN3X21hbGxvYyhTSVpFKQkJbWFsbG9jKFNJWkUpCisjCWRlZmluZQlzd19yZWFsbG9jKE1FTSxTSVpFKQlyZWFsbG9jKE1FTSwgU0laRSkKKyMJZGVmaW5lCXN3X2ZyZWUoTUVNKQkJCWlmIChNRU0pIGZyZWUoTUVNKQorCisjZWxzZQorCisjCWRlZmluZQlzd19tYWxsb2MoU0laRSkJCV9zd19kZWJ1Z19tYWxsb2MoU0laRSwgX19TV19GVU5DVElPTl9fLCBfX0ZJTEVfXywgX19MSU5FX18pCisjCWRlZmluZQlzd19yZWFsbG9jKE1FTSxTSVpFKQlfc3dfZGVidWdfcmVhbGxvYyhNRU0sIFNJWkUsIF9fU1dfRlVOQ1RJT05fXywgX19GSUxFX18sIF9fTElORV9fKQorIwlkZWZpbmUJc3dfZnJlZShNRU0pCQkJaWYgKE1FTSkgX3N3X2RlYnVnX2ZyZWUoTUVNLCBfX1NXX0ZVTkNUSU9OX18sIF9fRklMRV9fLCBfX0xJTkVfXykKKworI2VuZGlmCisKKworc3dfb3BhcXVlIEhPV0xfQVBJCitfc3dfZGVidWdfbWFsbG9jKAorCQkJc3dfc2l6ZV90CQkJc2l6ZSwKKwkJCXN3X2NvbnN0X3N0cmluZwlmdW5jdGlvbiwKKwkJCXN3X2NvbnN0X3N0cmluZwlmaWxlLAorCQkJc3dfdWludDMyCQkJbGluZSk7CisKKworc3dfb3BhcXVlIEhPV0xfQVBJCitfc3dfZGVidWdfcmVhbGxvYygKKwkJCXN3X29wYXF1ZV90CQkJbWVtLAorCQkJc3dfc2l6ZV90CQkJc2l6ZSwKKwkJCXN3X2NvbnN0X3N0cmluZwlmdW5jdGlvbiwKKwkJCXN3X2NvbnN0X3N0cmluZwlmaWxlLAorCQkJc3dfdWludDMyCQkJbGluZSk7CisKKwordm9pZCBIT1dMX0FQSQorX3N3X2RlYnVnX2ZyZWUoCisJCQlzd19vcGFxdWVfdAkJCW1lbSwKKwkJCXN3X2NvbnN0X3N0cmluZwlmdW5jdGlvbiwKKwkJCXN3X2NvbnN0X3N0cmluZwlmaWxlLAorCQkJc3dfdWludDMyCQkJbGluZSk7CisKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFNvY2tldHMKKyAqCisgKiBUaGVzZSBtYWNyb3MgYW5kIEFQSXMgc3VwcG9ydCBjcm9zcyBwbGF0Zm9ybSBzb2NrZXQKKyAqIGNhbGxzLiAgSSBhbSByZWx5aW5nIG9uIEJTRCBBUElzLCBidXQgZXZlbiB3aXRoIHRob3NlCisgKiB0aGVyZSBhcmUgc3VidGxlIGFuZCBub3Qgc28gc3VidGxlIHBsYXRmb3JtIGRpZmZlcmVuY2VzCisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaWYgZGVmaW5lZChfX1ZYV09SS1NfXykKKworIwlpbmNsdWRlIDx2eHdvcmtzLmg+CisjCWluY2x1ZGUgPGhvc3RMaWIuaD4KKyMJaW5jbHVkZSA8c29ja0xpYi5oPgorIwlpbmNsdWRlIDxpb0xpYi5oPgorIwlpbmNsdWRlIDxpbmV0TGliLmg+CisKK3R5cGVkZWYgaW50CQkJCQkJCXN3X3NvY2tkZXNjX3Q7Cit0eXBlZGVmIHNvY2tsZW5fdAkJCQkJc3dfc29ja2xlbl90OworCisjZWxpZiBkZWZpbmVkKFdJTjMyKQorCisjCWluY2x1ZGUgPHdpbnNvY2syLmg+CisKK3R5cGVkZWYgU09DS0VUCQkJCQkJc3dfc29ja2Rlc2NfdDsKK3R5cGVkZWYgaW50CQkJCQkJCXN3X3NvY2tsZW5fdDsKKworIwlkZWZpbmUgU1dfRV9XT1VMREJMT0NLCQlXU0FFV09VTERCTE9DSworIwlkZWZpbmUgU1dfSU5WQUxJRF9TT0NLRVQJSU5WQUxJRF9TT0NLRVQKKyMJZGVmaW5lIFNXX1NPQ0tFVF9FUlJPUgkJU09DS0VUX0VSUk9SCisKKyMJZGVmaW5lIHN3X2Nsb3NlX3NvY2tldChYKQljbG9zZXNvY2tldChYKQorCisjZWxzZQorCisjCWlmIGRlZmluZWQoc3VuKQorCisjCQlpbmNsdWRlIDx1bmlzdGQuaD4KKworIwllbmRpZgorCisjCWluY2x1ZGUgPHN5cy90eXBlcy5oPgorIwlpbmNsdWRlIDxzaWduYWwuaD4KKworIwlpZiBkZWZpbmVkKF9fTHlueF9fKQorCisjCQlpbmNsdWRlIDxzb2NrZXQuaD4KKworIwllbHNlCisKKyMJCWluY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKworIwllbmRpZgorCisjCWluY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyMJaW5jbHVkZSA8bmV0aW5ldC90Y3AuaD4KKyMJaW5jbHVkZSA8bmV0ZGIuaD4KKyMJaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjCWluY2x1ZGUgPHN0ZGxpYi5oPgorIwlpbmNsdWRlIDx1bmlzdGQuaD4KKyMJaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjCWluY2x1ZGUgPHN0ZGlvLmg+CisjCWluY2x1ZGUgPGVycm5vLmg+CisKK3R5cGVkZWYgc3dfaW50MzIJCQkJCXN3X3NvY2tkZXNjX3Q7Cit0eXBlZGVmIHNvY2tsZW5fdAkJCQkJc3dfc29ja2xlbl90OworCisjCWRlZmluZSBTV19FX1dPVUxEQkxPQ0sJCUVXT1VMREJMT0NLCisjCWRlZmluZSBTV19JTlZBTElEX1NPQ0tFVAktMQorIwlkZWZpbmUgU1dfU09DS0VUX0VSUk9SCQktMQorCisjCWRlZmluZSBzd19jbG9zZV9zb2NrZXQoWCkJY2xvc2UoWCkKKworI2VuZGlmCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBzdHJlcnJvcigpCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIHByaW50IGEgc3RyaW5nIHJlcCBvZiBhIHN5c3RlbSBlcnJvcgorICogY29kZQorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworc3dfY29uc3Rfc3RyaW5nCitzd19zdHJlcnJvcigpOworCisKKy8qCisgKiBPYnNvbGV0ZSB0eXBlcyBhbmQgbWFjcm9zLgorICoKKyAqIFRoZXNlIGFyZSBoZXJlIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgYnV0IHdpbGwKKyAqIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZQorICovCisjZGVmaW5lIHN3X2NoYXIJc3dfaW50OAorI2RlZmluZSBzd191Y2hhcglzd191aW50OAorI2RlZmluZSBzd19vY3RldAlzd191aW50OAorI2RlZmluZSBzd19zaG9ydAlzd19pbnQxNgorI2RlZmluZSBzd191c2hvcnQJc3dfdWludDE2CisjZGVmaW5lIHN3X2xvbmcJc3dfaW50MzIKKyNkZWZpbmUgc3dfdWxvbmcJc3dfdWludDMyCisKKworI2RlZmluZSBTV19UUlkoRVhQUikgeyBzd19yZXN1bHQgcmVzdWx0OyBpZiAoKHJlc3VsdCA9IEVYUFIpICE9IFNXX09LQVkpIHJldHVybiByZXN1bHQ7IH0gKCh2b2lkKSAwKQorI2RlZmluZSBTV19UUllfR09UTyhFWFBSKSAgeyBpZiAoKHJlc3VsdCA9IEVYUFIpICE9IFNXX09LQVkpIGdvdG8gZXhpdDsgfSAoKHZvaWQpIDApCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtaG93bC9pbmNsdWRlL3NhbHQvc2FsdC5oIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbXBhdC1ob3dsL2luY2x1ZGUvc2FsdC9zYWx0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRiMjg5YgotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtaG93bC9pbmNsdWRlL3NhbHQvc2FsdC5oCkBAIC0wLDAgKzEsMjE1IEBACisjaWZuZGVmIF9zd19zYWx0X2gKKyNkZWZpbmUgX3N3X3NhbHRfaAorCisvKgorICogQ29weXJpZ2h0IDIwMDMsIDIwMDQgUG9yY2hkb2cgU29mdHdhcmUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKglSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICoJYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqCQkxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKgkJICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCQkyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKgkJICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICoJCSAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqCVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgUE9SQ0hET0cgU09GVFdBUkUgYGBBUyBJUycnIEFORCBBTlkKKyAqCUVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqCVdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqCUlOIE5PIEVWRU5UIFNIQUxMIFRIRSBIT1dMIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqCUlORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICoJQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqCURBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqCU9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UKKyAqCU9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICoJT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqCVRoZSB2aWV3cyBhbmQgY29uY2x1c2lvbnMgY29udGFpbmVkIGluIHRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbiBhcmUgdGhvc2UKKyAqCW9mIHRoZSBhdXRob3JzIGFuZCBzaG91bGQgbm90IGJlIGludGVycHJldGVkIGFzIHJlcHJlc2VudGluZyBvZmZpY2lhbCBwb2xpY2llcywKKyAqCWVpdGhlciBleHByZXNzZWQgb3IgaW1wbGllZCwgb2YgUG9yY2hkb2cgU29mdHdhcmUsIEluYy4KKyAqLworCisjaW5jbHVkZSA8c2FsdC9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPHNhbHQvdGltZS5oPgorCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKwordHlwZWRlZiBlbnVtIF9zd19zb2NrZXRfZXZlbnQKK3sKKwlTV19TT0NLRVRfUkVBRAkJPQkoMSA8PCAwKSwKKwlTV19TT0NLRVRfV1JJVEUJPQkoMSA8PCAxKSwKKwlTV19TT0NLRVRfT09CCQk9CSgxIDw8IDIpCit9IHN3X3NvY2tldF9ldmVudDsKKworCitzdHJ1Y3QJCQkJCQkJX3N3X3NhbHQ7Cit0eXBlZGVmIHN0cnVjdCBfc3dfc2FsdAkqCXN3X3NhbHQ7CitzdHJ1Y3QJCQkJCQkJX3N3X3NvY2tldDsKK3N0cnVjdAkJCQkJCQlfc3dfdGltZXI7CitzdHJ1Y3QJCQkJCQkJX3N3X25ldHdvcmtfaW50ZXJmYWNlOworc3RydWN0CQkJCQkJCV9zd19zaWduYWw7CisKK3R5cGVkZWYgc3dfb3BhcXVlCQkJCXN3X3NvY2tldF9oYW5kbGVyOwordHlwZWRlZiBzd19yZXN1bHQKKyhIT1dMX0FQSSAqc3dfc29ja2V0X2hhbmRsZXJfZnVuYykoCisJCQkJCQkJCQlzd19zb2NrZXRfaGFuZGxlcgkJaGFuZGxlciwKKwkJCQkJCQkJCXN3X3NhbHQJCQkJCXNhbHQsCisJCQkJCQkJCQlzdHJ1Y3QgX3N3X3NvY2tldAkqCXNvY2tldCwKKwkJCQkJCQkJCXN3X3NvY2tldF9ldmVudAkJZXZlbnRzLAorCQkJCQkJCQkJc3dfb3BhcXVlCQkJCWV4dHJhKTsKKworCit0eXBlZGVmIHN3X29wYXF1ZQkJCQlzd190aW1lcl9oYW5kbGVyOwordHlwZWRlZiBzd19yZXN1bHQKKyhIT1dMX0FQSSAqc3dfdGltZXJfaGFuZGxlcl9mdW5jKSgKKwkJCQkJCQkJCXN3X3RpbWVyX2hhbmRsZXIJCWhhbmRsZXIsCisJCQkJCQkJCQlzd19zYWx0CQkJCQlzYWx0LAorCQkJCQkJCQkJc3RydWN0IF9zd190aW1lcgkqCXRpbWVyLAorCQkJCQkJCQkJc3dfdGltZQkJCQkJdGltZW91dCwKKwkJCQkJCQkJCXN3X29wYXF1ZQkJCQlleHRyYSk7CisKK3R5cGVkZWYgc3dfb3BhcXVlCQkJCXN3X25ldHdvcmtfaW50ZXJmYWNlX2hhbmRsZXI7Cit0eXBlZGVmIHN3X3Jlc3VsdAorKEhPV0xfQVBJICpzd19uZXR3b3JrX2ludGVyZmFjZV9oYW5kbGVyX2Z1bmMpKAorCQkJCQkJCQkJc3dfbmV0d29ya19pbnRlcmZhY2VfaGFuZGxlcgkJaGFuZGxlciwKKwkJCQkJCQkJCXN3X3NhbHQJCQkJCQkJCQlzYWx0LAorCQkJCQkJCQkJc3RydWN0IF9zd19uZXR3b3JrX2ludGVyZmFjZQkqCW5ldGlmLAorCQkJCQkJCQkJc3dfb3BhcXVlCQkJCQkJCQlleHRyYSk7CisKK3R5cGVkZWYgc3dfb3BhcXVlCQkJCXN3X3NpZ25hbF9oYW5kbGVyOwordHlwZWRlZiBzd19yZXN1bHQKKyhIT1dMX0FQSSAqc3dfc2lnbmFsX2hhbmRsZXJfZnVuYykoCisJCQkJCQkJCQlzd19zaWduYWxfaGFuZGxlcgkJaGFuZGxlciwKKwkJCQkJCQkJCXN3X3NhbHQJCQkJCXNhbHQsCisJCQkJCQkJCQlzdHJ1Y3QgX3N3X3NpZ25hbAkqCXNpZ25hbCwKKwkJCQkJCQkJCXN3X29wYXF1ZQkJCQlleHRyYSk7CisKKworc3dfcmVzdWx0IEhPV0xfQVBJCitzd19zYWx0X2luaXQoCisJCQkJc3dfc2FsdAkJKglzZWxmLAorCQkJCWludAkJCQlhcmdjLAorCQkJCWNoYXIJCQkqKglhcmd2KTsKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X3NhbHRfZmluYSgKKwkJCQlzd19zYWx0CXNlbGYpOworCisKK3N3X3Jlc3VsdCBIT1dMX0FQSQorc3dfc2FsdF9yZWdpc3Rlcl9zb2NrZXQoCisJCQkJc3dfc2FsdAkJCQkJCXNlbGYsCisJCQkJc3RydWN0IF9zd19zb2NrZXQJCSoJc29ja2V0LAorCQkJCXN3X3NvY2tldF9ldmVudAkJCWV2ZW50cywKKwkJCQlzd19zb2NrZXRfaGFuZGxlcgkJCWhhbmRsZXIsCisJCQkJc3dfc29ja2V0X2hhbmRsZXJfZnVuYwlmdW5jLAorCQkJCXN3X29wYXF1ZQkJCQkJZXh0cmEpOworCisKK3N3X3Jlc3VsdCBIT1dMX0FQSQorc3dfc2FsdF91bnJlZ2lzdGVyX3NvY2tldCgKKwkJCQlzd19zYWx0CQkJCQkJc2VsZiwKKwkJCQlzdHJ1Y3QgX3N3X3NvY2tldAkJKglzb2NrZXQpOworCisKK3N3X3Jlc3VsdCBIT1dMX0FQSQorc3dfc2FsdF9yZWdpc3Rlcl90aW1lcigKKwkJCQlzd19zYWx0CQkJCQkJc2VsZiwKKwkJCQlzdHJ1Y3QgX3N3X3RpbWVyCQkqCXRpbWVyLAorCQkJCXN3X3RpbWUJCQkJCQl0aW1lb3V0LAorCQkJCXN3X3RpbWVyX2hhbmRsZXIJCQloYW5kbGVyLAorCQkJCXN3X3RpbWVyX2hhbmRsZXJfZnVuYwlmdW5jLAorCQkJCXN3X29wYXF1ZQkJCQkJZXh0cmEpOworCisKK3N3X3Jlc3VsdCBIT1dMX0FQSQorc3dfc2FsdF91bnJlZ2lzdGVyX3RpbWVyKAorCQkJCXN3X3NhbHQJCQkJCQlzZWxmLAorCQkJCXN0cnVjdCBfc3dfdGltZXIJCSoJdGltZXIpOworCisKK3N3X3Jlc3VsdCBIT1dMX0FQSQorc3dfc2FsdF9yZWdpc3Rlcl9uZXR3b3JrX2ludGVyZmFjZSgKKwkJCQlzd19zYWx0CQkJCQkJCQkJCXNlbGYsCisJCQkJc3RydWN0IF9zd19uZXR3b3JrX2ludGVyZmFjZQkJKgluZXRpZiwKKwkJCQlzd19uZXR3b3JrX2ludGVyZmFjZV9oYW5kbGVyCQkJaGFuZGxlciwKKwkJCQlzd19uZXR3b3JrX2ludGVyZmFjZV9oYW5kbGVyX2Z1bmMJZnVuYywKKwkJCQlzd19vcGFxdWUJCQkJCQkJCQlleHRyYSk7CisKKworc3dfcmVzdWx0IEhPV0xfQVBJCitzd19zYWx0X3VucmVnaXN0ZXJfbmV0d29ya19pbnRlcmZhY2VfaGFuZGxlcigKKwkJCQlzd19zYWx0CQkJCQkJc2VsZik7CisKKworc3dfcmVzdWx0IEhPV0xfQVBJCitzd19zYWx0X3JlZ2lzdGVyX3NpZ25hbCgKKwkJCQlzd19zYWx0CQkJCQkJc2VsZiwKKwkJCQlzdHJ1Y3QgX3N3X3NpZ25hbAkqCQlzaWduYWwsCisJCQkJc3dfc2lnbmFsX2hhbmRsZXIJCQloYW5kbGVyLAorCQkJCXN3X3NpZ25hbF9oYW5kbGVyX2Z1bmMJZnVuYywKKwkJCQlzd19vcGFxdWUJCQkJCWV4dHJhKTsKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X3NhbHRfdW5yZWdpc3Rlcl9zaWduYWwoCisJCQkJc3dfc2FsdAkJCQkJCXNlbGYsCisJCQkJc3RydWN0IF9zd19zaWduYWwJKgkJc2lnbmFsKTsKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X3NhbHRfbG9jaygKKwkJCQlzd19zYWx0CXNlbGYpOworCisKK3N3X3Jlc3VsdCBIT1dMX0FQSQorc3dfc2FsdF91bmxvY2soCisJCQkJc3dfc2FsdAlzZWxmKTsKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X3NhbHRfc3RlcCgKKwkJCQlzd19zYWx0CQlzZWxmLAorCQkJCXN3X3VpbnQzMgkqCW1zZWMpOworCisKK3N3X3Jlc3VsdCBIT1dMX0FQSQorc3dfc2FsdF9ydW4oCisJCQkJc3dfc2FsdAlzZWxmKTsKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X3NhbHRfc3RvcF9ydW4oCisJCQkJc3dfc2FsdAlzZWxmKTsKKworCisjZGVmaW5lIFNXX0ZBTFNFCQkwCisjZGVmaW5lIFNXX1RSVUUJCTEKKyNkZWZpbmUgU1dfT0tBWQkJMAorCisKKy8qCisgKiBlcnJvciBjb2RlcworICovCisjZGVmaW5lCVNXX0VfQ09SRV9CQVNFCQkJCQkweDgwMDAwMDAwCisjZGVmaW5lCVNXX0VfVU5LTk9XTgkJCQkJKFNXX0VfQ09SRV9CQVNFKSArIDEKKyNkZWZpbmUJU1dfRV9JTklUCQkJCQkJKFNXX0VfQ09SRV9CQVNFKSArIDIKKyNkZWZpbmUJU1dfRV9NRU0JCQkJCQkJKFNXX0VfQ09SRV9CQVNFKSArIDMKKyNkZWZpbmUJU1dfRV9FT0YJCQkJCQkJKFNXX0VfQ09SRV9CQVNFKSArIDQKKyNkZWZpbmUJU1dfRV9OT19JTVBMCQkJCQkoU1dfRV9DT1JFX0JBU0UpICsgNQorI2RlZmluZQlTV19FX0ZJTEVfTE9DS0VECQkJCShTV19FX0NPUkVfQkFTRSkgKyA2CisjZGVmaW5lCVNXX0VfUFJPVE9DT0xfTk9UX0ZPVU5ECQkoU1dfRV9DT1JFX0JBU0UpICsgNworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktY29tcGF0LWhvd2wvaW5jbHVkZS9zYWx0L3NpZ25hbC5oIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbXBhdC1ob3dsL2luY2x1ZGUvc2FsdC9zaWduYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzZlMDJmCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbXBhdC1ob3dsL2luY2x1ZGUvc2FsdC9zaWduYWwuaApAQCAtMCwwICsxLDYxIEBACisjaWZuZGVmIF9zYWx0X3NpZ25hbF9oCisjZGVmaW5lIF9zYWx0X3NpZ25hbF9oCisKKy8qCisgKiBDb3B5cmlnaHQgMjAwMywgMjAwNCBQb3JjaGRvZyBTb2Z0d2FyZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKglSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICoJYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqCQkxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKgkJICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCQkyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKgkJICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICoJCSAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqCVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgUE9SQ0hET0cgU09GVFdBUkUgYGBBUyBJUycnIEFORCBBTlkKKyAqCUVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqCVdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqCUlOIE5PIEVWRU5UIFNIQUxMIFRIRSBIT1dMIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqCUlORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICoJQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqCURBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqCU9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UKKyAqCU9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICoJT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqCVRoZSB2aWV3cyBhbmQgY29uY2x1c2lvbnMgY29udGFpbmVkIGluIHRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbiBhcmUgdGhvc2UKKyAqCW9mIHRoZSBhdXRob3JzIGFuZCBzaG91bGQgbm90IGJlIGludGVycHJldGVkIGFzIHJlcHJlc2VudGluZyBvZmZpY2lhbCBwb2xpY2llcywKKyAqCWVpdGhlciBleHByZXNzZWQgb3IgaW1wbGllZCwgb2YgUG9yY2hkb2cgU29mdHdhcmUuCisgKi8KKworI2luY2x1ZGUgPHNhbHQvcGxhdGZvcm0uaD4KKworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKyNlbmRpZgorCisKK3N0cnVjdAkJCQkJCQkJX3N3X3NpZ25hbDsKK3R5cGVkZWYgc3RydWN0IF9zd19zaWduYWwJKglzd19zaWduYWw7CisKKworc3dfcmVzdWx0IEhPV0xfQVBJCitzd19zaWduYWxfaW5pdCgKKwkJc3dfc2lnbmFsCSoJc2VsZiwKKwkJaW50CQkJCXNpZ25hbCk7CisKKworc3dfcmVzdWx0IEhPV0xfQVBJCitzd19zaWduYWxfZmluYSgKKwkJc3dfc2lnbmFsCQlzZWxmKTsKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvbXBhdC1ob3dsL2luY2x1ZGUvc2FsdC9zb2NrZXQuaCBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtaG93bC9pbmNsdWRlL3NhbHQvc29ja2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVhYTEwMgotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtaG93bC9pbmNsdWRlL3NhbHQvc29ja2V0LmgKQEAgLTAsMCArMSwyNjMgQEAKKyNpZm5kZWYgX3N3X3NvY2tldF9oCisjZGVmaW5lIF9zd19zb2NrZXRfaAorCisvKgorICogQ29weXJpZ2h0IDIwMDMsIDIwMDQgUG9yY2hkb2cgU29mdHdhcmUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICoJUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqCWFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKgkJMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICoJCSAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgkJMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICoJCSAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqCQkgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKglUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFBPUkNIRE9HIFNPRlRXQVJFIGBgQVMgSVMnJyBBTkQgQU5ZCisgKglFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKglXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKglJTiBOTyBFVkVOVCBTSEFMTCBUSEUgSE9XTCBQUk9KRUNUIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKglJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqCUJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKglEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKglPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFCisgKglPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqCU9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKglUaGUgdmlld3MgYW5kIGNvbmNsdXNpb25zIGNvbnRhaW5lZCBpbiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24gYXJlIHRob3NlCisgKglvZiB0aGUgYXV0aG9ycyBhbmQgc2hvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCBhcyByZXByZXNlbnRpbmcgb2ZmaWNpYWwgcG9saWNpZXMsCisgKgllaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIG9mIFBvcmNoZG9nIFNvZnR3YXJlLgorICovCisKKyNpbmNsdWRlIDxzYWx0L3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8c2FsdC9hZGRyZXNzLmg+CisKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworCitzdHJ1Y3QJCQkJCQkJCQkJCV9zd19zb2NrZXQ7Cit0eXBlZGVmIHN0cnVjdCBfc3dfc29ja2V0CQkJCSoJc3dfc29ja2V0Oworc3RydWN0CQkJCQkJCQkJCQlfc3dfc29ja2V0X29wdGlvbnM7Cit0eXBlZGVmIHN0cnVjdCBfc3dfc29ja2V0X29wdGlvbnMJKglzd19zb2NrZXRfb3B0aW9uczsKK3R5cGVkZWYgc3dfdWludDE2CQkJCQkJCXN3X3BvcnQ7CisKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X3RjcF9zb2NrZXRfaW5pdCgKKwkJCQlzd19zb2NrZXQJKglzZWxmKTsKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X3RjcF9zb2NrZXRfaW5pdF93aXRoX2Rlc2MoCisJCQkJc3dfc29ja2V0CSoJc2VsZiwKKwkJCQlzd19zb2NrZGVzY190CWRlc2MpOworCisKK3N3X3Jlc3VsdCBIT1dMX0FQSQorc3dfdWRwX3NvY2tldF9pbml0KAorCQkJCXN3X3NvY2tldAkqCXNlbGYpOworCisKK3N3X3Jlc3VsdCBIT1dMX0FQSQorc3dfbXVsdGljYXN0X3NvY2tldF9pbml0KAorCQkJCXN3X3NvY2tldAkqCXNlbGYpOworCisKK3N3X3Jlc3VsdCBIT1dMX0FQSQorc3dfc29ja2V0X2ZpbmEoCisJCQkJc3dfc29ja2V0CXNlbGYpOworCisKK3N3X3Jlc3VsdCBIT1dMX0FQSQorc3dfc29ja2V0X2JpbmQoCisJCQkJc3dfc29ja2V0CQkJc2VsZiwKKwkJCQlzd19pcHY0X2FkZHJlc3MJYWRkcmVzcywKKwkJCQlzd19wb3J0CQkJcG9ydCk7CisKKworc3dfcmVzdWx0IEhPV0xfQVBJCitzd19zb2NrZXRfam9pbl9tdWx0aWNhc3RfZ3JvdXAoCisJCQkJc3dfc29ja2V0CQkJc2VsZiwKKwkJCQlzd19pcHY0X2FkZHJlc3MJbG9jYWxfYWRkcmVzcywKKwkJCQlzd19pcHY0X2FkZHJlc3MJbXVsdGljYXN0X2FkZHJlc3MsCisJCQkJc3dfdWludDMyCQkJdHRsKTsKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X3NvY2tldF9sZWF2ZV9tdWx0aWNhc3RfZ3JvdXAoCisJCQkJc3dfc29ja2V0CXNlbGYpOworCisKK3N3X3Jlc3VsdCBIT1dMX0FQSQorc3dfc29ja2V0X2xpc3RlbigKKwkJCQlzd19zb2NrZXQJc2VsZiwKKwkJCQlpbnQJCQlxc2l6ZSk7CisKKworc3dfcmVzdWx0IEhPV0xfQVBJCitzd19zb2NrZXRfY29ubmVjdCgKKwkJCQlzd19zb2NrZXQJCQlzZWxmLAorCQkJCXN3X2lwdjRfYWRkcmVzcwlhZGRyZXNzLAorCQkJCXN3X3BvcnQJCQlwb3J0KTsKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X3NvY2tldF9hY2NlcHQoCisJCQkJc3dfc29ja2V0CQlzZWxmLAorCQkJCXN3X3NvY2tldAkqCXNvY2tldCk7CisKKworc3dfcmVzdWx0IEhPV0xfQVBJCitzd19zb2NrZXRfc2VuZCgKKwkJCQlzd19zb2NrZXQJCXNlbGYsCisJCQkJc3dfb2N0ZXRzCQlidWZmZXIsCisJCQkJc3dfc2l6ZV90CQlsZW4sCisJCQkJc3dfc2l6ZV90CSoJYnl0ZXNXcml0dGVuKTsKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X3NvY2tldF9zZW5kdG8oCisJCQkJc3dfc29ja2V0CQkJc2VsZiwKKwkJCQlzd19vY3RldHMJCQlidWZmZXIsCisJCQkJc3dfc2l6ZV90CQkJbGVuLAorCQkJCXN3X3NpemVfdAkJKglieXRlc1dyaXR0ZW4sCisJCQkJc3dfaXB2NF9hZGRyZXNzCXRvLAorCQkJCXN3X3BvcnQJCQlwb3J0KTsKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X3NvY2tldF9yZWN2KAorCQkJCXN3X3NvY2tldAkJc2VsZiwKKwkJCQlzd19vY3RldHMJCWJ1ZmZlciwKKwkJCQlzd19zaXplX3QJCW1heCwKKwkJCQlzd19zaXplX3QJKglsZW4pOworCisKK3N3X3Jlc3VsdCBIT1dMX0FQSQorc3dfc29ja2V0X3JlY3Zmcm9tKAorCQkJCXN3X3NvY2tldAkJCQlzZWxmLAorCQkJCXN3X29jdGV0cwkJCQlidWZmZXIsCisJCQkJc3dfc2l6ZV90CQkJCW1heCwKKwkJCQlzd19zaXplX3QJCQkqCWxlbiwKKwkJCQlzd19pcHY0X2FkZHJlc3MJKglmcm9tLAorCQkJCXN3X3BvcnQJCQkqCXBvcnQsCisJCQkJc3dfaXB2NF9hZGRyZXNzCSoJZGVzdCwKKwkJCQlzd191aW50MzIJCQkJKglpbnRlcmZhY2VfaW5kZXgpOworCisKK3N3X3Jlc3VsdCBIT1dMX0FQSQorc3dfc29ja2V0X3NldF9ibG9ja2luZ19tb2RlKAorCQkJCXN3X3NvY2tldAlzZWxmLAorCQkJCXN3X2Jvb2wJYmxvY2tpbmdfbW9kZSk7CisKKworc3dfcmVzdWx0IEhPV0xfQVBJCitzd19zb2NrZXRfc2V0X29wdGlvbnMoCisJCQkJc3dfc29ja2V0CQkJCXNlbGYsCisJCQkJc3dfc29ja2V0X29wdGlvbnMJCW9wdGlvbnMpOworCisKK3N3X2lwdjRfYWRkcmVzcyBIT1dMX0FQSQorc3dfc29ja2V0X2lwdjRfYWRkcmVzcygKKwkJCQlzd19zb2NrZXQJc2VsZik7CisKKworc3dfcG9ydCBIT1dMX0FQSQorc3dfc29ja2V0X3BvcnQoCisJCQkJc3dfc29ja2V0CXNlbGYpOworCisKK3N3X3NvY2tkZXNjX3QgSE9XTF9BUEkKK3N3X3NvY2tldF9kZXNjKAorCQkJCXN3X3NvY2tldAlzZWxmKTsKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X3NvY2tldF9jbG9zZSgKKwkJCQlzd19zb2NrZXQJc2VsZik7CisKKworc3dfcmVzdWx0IEhPV0xfQVBJCitzd19zb2NrZXRfb3B0aW9uc19pbml0KAorCQkJCXN3X3NvY2tldF9vcHRpb25zCSoJc2VsZik7CisKKworc3dfcmVzdWx0IEhPV0xfQVBJCitzd19zb2NrZXRfb3B0aW9uc19maW5hKAorCQkJCXN3X3NvY2tldF9vcHRpb25zCXNlbGYpOworCisKK3N3X3Jlc3VsdCBIT1dMX0FQSQorc3dfc29ja2V0X29wdGlvbnNfc2V0X2RlYnVnKAorCQkJCXN3X3NvY2tldF9vcHRpb25zCQlzZWxmLAorCQkJCXN3X2Jvb2wJCQkJCXZhbCk7CisKKworc3dfcmVzdWx0IEhPV0xfQVBJCitzd19zb2NrZXRfb3B0aW9uc19zZXRfbm9kZWxheSgKKwkJCQlzd19zb2NrZXRfb3B0aW9ucwkJc2VsZiwKKwkJCQlzd19ib29sCQkJCQl2YWwpOworCisKK3N3X3Jlc3VsdCBIT1dMX0FQSQorc3dfc29ja2V0X29wdGlvbnNfc2V0X2RvbnRyb3V0ZSgKKwkJCQlzd19zb2NrZXRfb3B0aW9ucwkJc2VsZiwKKwkJCQlzd19ib29sCQkJCQl2YWwpOworCisKK3N3X3Jlc3VsdCBIT1dMX0FQSQorc3dfc29ja2V0X29wdGlvbnNfc2V0X2tlZXBhbGl2ZSgKKwkJCQlzd19zb2NrZXRfb3B0aW9ucwkJc2VsZiwKKwkJCQlzd19ib29sCQkJCQl2YWwpOworCisKK3N3X3Jlc3VsdCBIT1dMX0FQSQorc3dfc29ja2V0X29wdGlvbnNfc2V0X2xpbmdlcigKKwkJCQlzd19zb2NrZXRfb3B0aW9ucwkJc2VsZiwKKwkJCQlzd19ib29sCQkJCQlvbm9mZiwKKwkJCQlzd191aW50MzIJCQkJCWxpbmdlcik7CisKKworc3dfcmVzdWx0IEhPV0xfQVBJCitzd19zb2NrZXRfb3B0aW9uc19zZXRfcmV1c2VhZGRyKAorCQkJCXN3X3NvY2tldF9vcHRpb25zCQlzZWxmLAorCQkJCXN3X2Jvb2wJCQkJCXZhbCk7CisKKworc3dfcmVzdWx0IEhPV0xfQVBJCitzd19zb2NrZXRfb3B0aW9uc19zZXRfcmN2YnVmKAorCQkJCXN3X3NvY2tldF9vcHRpb25zCQlzZWxmLAorCQkJCXN3X3VpbnQzMgkJCQkJdmFsKTsKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X3NvY2tldF9vcHRpb25zX3NldF9zbmRidWYoCisJCQkJc3dfc29ja2V0X29wdGlvbnMJCXNlbGYsCisJCQkJc3dfdWludDMyCQkJCQl2YWwpOworCisKK2ludAorc3dfc29ja2V0X2Vycm9yX2NvZGUodm9pZCk7CisKKworI2RlZmluZQlTV19FX1NPQ0tFVF9CQVNFCQkweDgwMDAwMjAwCisjZGVmaW5lCVNXX0VfU09DS0VUCQkJCShTV19FX1NPQ0tFVF9CQVNFKSArIDEKKyNkZWZpbmUJU1dfRV9CSU5ECQkJCShTV19FX1NPQ0tFVF9CQVNFKSArIDIKKyNkZWZpbmUJU1dfRV9HRVRTT0NLTkFNRQkJKFNXX0VfU09DS0VUX0JBU0UpICsgMworI2RlZmluZQlTV19FX0FERF9NRU1CRVJTSElQCShTV19FX1NPQ0tFVF9CQVNFKSArIDQKKyNkZWZpbmUJU1dfRV9NVUxUSUNBU1RfVFRMCShTV19FX1NPQ0tFVF9CQVNFKSArIDUKKyNkZWZpbmUJU1dfRV9OT0NPTk5FQ1RJT04JCShTV19FX1NPQ0tFVF9CQVNFKSArIDYKKyNkZWZpbmUJU1dfRV9JTlBST0dSRVNTCQkoU1dfRV9TT0NLRVRfQkFTRSkgKyA3CisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtaG93bC9pbmNsdWRlL3NhbHQvdGltZS5oIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbXBhdC1ob3dsL2luY2x1ZGUvc2FsdC90aW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc4OWIzYQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtaG93bC9pbmNsdWRlL3NhbHQvdGltZS5oCkBAIC0wLDAgKzEsMTAwIEBACisjaWZuZGVmIF9zYWx0X3RpbWVfaAorI2RlZmluZSBfc2FsdF90aW1lX2gKKworLyoKKyAqIENvcHlyaWdodCAyMDAzLCAyMDA0IFBvcmNoZG9nIFNvZnR3YXJlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqCVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKglhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICoJCTEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqCQkgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoJCTIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqCQkgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKgkJICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICoJVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBQT1JDSERPRyBTT0ZUV0FSRSBgYEFTIElTJycgQU5EIEFOWQorICoJRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICoJV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICoJSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEhPV0wgUFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICoJSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKglCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICoJREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICoJT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRQorICoJT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKglPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoJVGhlIHZpZXdzIGFuZCBjb25jbHVzaW9ucyBjb250YWluZWQgaW4gdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uIGFyZSB0aG9zZQorICoJb2YgdGhlIGF1dGhvcnMgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgcmVwcmVzZW50aW5nIG9mZmljaWFsIHBvbGljaWVzLAorICoJZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBvZiBQb3JjaGRvZyBTb2Z0d2FyZS4KKyAqLworCisjaW5jbHVkZSA8c2FsdC9wbGF0Zm9ybS5oPgorCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKworc3RydWN0CQkJCQkJCQlfc3dfdGltZXI7Cit0eXBlZGVmIHN0cnVjdCBfc3dfdGltZXIJKglzd190aW1lcjsKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X3RpbWVyX2luaXQoCisJCXN3X3RpbWVyCSoJc2VsZik7CisKKworc3dfcmVzdWx0IEhPV0xfQVBJCitzd190aW1lcl9maW5hKAorCQlzd190aW1lcglzZWxmKTsKKworCit0eXBlZGVmIHN0cnVjdCBfc3dfdGltZQoreworCXN3X3VpbnQzMgltX3NlY3M7CisJc3dfdWludDMyIG1fdXNlY3M7Cit9IHN3X3RpbWU7CisKKworc3dfcmVzdWx0IEhPV0xfQVBJCitzd190aW1lX2luaXQoCisJCXN3X3RpbWUJKglzZWxmKTsKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X3RpbWVfaW5pdF9ub3coCisJCXN3X3RpbWUJKglzZWxmKTsKKworCitzd19yZXN1bHQgSE9XTF9BUEkKK3N3X3RpbWVfZmluYSgKKwkJc3dfdGltZQlzZWxmKTsKKworCitzd190aW1lIEhPV0xfQVBJCitzd190aW1lX2FkZCgKKwkJc3dfdGltZQlzZWxmLAorCQlzd190aW1lCXkpOworCisKK3N3X3RpbWUgSE9XTF9BUEkKK3N3X3RpbWVfc3ViKAorCQlzd190aW1lCXNlbGYsCisJCXN3X3RpbWUJeSk7CisKKworc3dfaW50MzIgSE9XTF9BUEkKK3N3X3RpbWVfY21wKAorCQlzd190aW1lCXNlbGYsCisJCXN3X3RpbWUJeSk7CisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtaG93bC9zYW1wbGVzL01ha2VmaWxlLmFtIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbXBhdC1ob3dsL3NhbXBsZXMvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVmYTE5ZQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtaG93bC9zYW1wbGVzL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsNTEgQEAKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisjCisjIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisjIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisjIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisjIFVTQS4KKworQU1fQ0ZMQUdTPS1JJCh0b3Bfc3JjZGlyKSAtSSQodG9wX3NyY2RpcikvYXZhaGktY29tcGF0LWhvd2wvaW5jbHVkZQorCisjIFRoaXMgY29vbCBkZWJ1ZyB0cmFwIHdvcmtzIG9uIGkzODYvZ2NjIG9ubHkKK0FNX0NGTEFHUys9Jy1EREVCVUdfVFJBUD1fX2FzbV9fKCJpbnQgJCQzIiknCisKK2lmIEhBVkVfREJVUworaWYgRU5BQkxFX0NPTVBBVF9IT1dMCisKK2lmIEVOQUJMRV9URVNUUworbm9pbnN0X1BST0dSQU1TID0gYnJvd3NlIHJlc29sdmUgcHVibGlzaCBxdWVyeQorZW5kaWYKKworYnJvd3NlX1NPVVJDRVMgPSBcCisJYnJvd3NlLmMKK2Jyb3dzZV9DRkxBR1MgPSAkKEFNX0NGTEFHUykgJChQVEhSRUFEX0NGTEFHUykgLUkgJChzcmNkaXIpL2luY2x1ZGUKK2Jyb3dzZV9MREFERCA9ICQoQU1fTERBREQpIC4uL2xpYmhvd2wubGEKKworcmVzb2x2ZV9TT1VSQ0VTID0gXAorCXJlc29sdmUuYworcmVzb2x2ZV9DRkxBR1MgPSAkKEFNX0NGTEFHUykgJChQVEhSRUFEX0NGTEFHUykgLUkgJChzcmNkaXIpL2luY2x1ZGUKK3Jlc29sdmVfTERBREQgPSAkKEFNX0xEQUREKSAuLi9saWJob3dsLmxhCisKK3B1Ymxpc2hfU09VUkNFUyA9IFwKKwlwdWJsaXNoLmMKK3B1Ymxpc2hfQ0ZMQUdTID0gJChBTV9DRkxBR1MpICQoUFRIUkVBRF9DRkxBR1MpIC1JICQoc3JjZGlyKS9pbmNsdWRlCitwdWJsaXNoX0xEQUREID0gJChBTV9MREFERCkgLi4vbGliaG93bC5sYQorCitxdWVyeV9TT1VSQ0VTID0gXAorCXF1ZXJ5LmMKK3F1ZXJ5X0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAkKFBUSFJFQURfQ0ZMQUdTKSAtSSAkKHNyY2RpcikvaW5jbHVkZQorcXVlcnlfTERBREQgPSAkKEFNX0xEQUREKSAuLi9saWJob3dsLmxhCisKK2VuZGlmCitlbmRpZgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvbXBhdC1ob3dsL3NhbXBsZXMvTWFrZWZpbGUuaW4gYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tcGF0LWhvd2wvc2FtcGxlcy9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmIwMDljCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbXBhdC1ob3dsL3NhbXBsZXMvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw3NzIgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEuMyBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKyMKKyMgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyMgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyMgVVNBLgorCitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitARU5BQkxFX0NPTVBBVF9IT1dMX1RSVUVAQEVOQUJMRV9URVNUU19UUlVFQEBIQVZFX0RCVVNfVFJVRUBub2luc3RfUFJPR1JBTVMgPSBicm93c2UkKEVYRUVYVCkgXAorQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBFTkFCTEVfVEVTVFNfVFJVRUBASEFWRV9EQlVTX1RSVUVACXJlc29sdmUkKEVYRUVYVCkgXAorQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBFTkFCTEVfVEVTVFNfVFJVRUBASEFWRV9EQlVTX1RSVUVACXB1Ymxpc2gkKEVYRUVYVCkgXAorQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBFTkFCTEVfVEVTVFNfVFJVRUBASEFWRV9EQlVTX1RSVUVACXF1ZXJ5JChFWEVFWFQpCitzdWJkaXIgPSBhdmFoaS1jb21wYXQtaG93bC9zYW1wbGVzCitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9hY3hfcHRocmVhZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vZ2NjX3N0YWNrX3Byb3RlY3QubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2djY192aXNpYmlsaXR5Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9pbnRsdG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vaW50cm9zcGVjdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbGlidG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHRvcHRpb25zLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9sdHN1Z2FyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9sdHZlcnNpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2x0fm9ic29sZXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9ubHMubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vcHl0aG9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2FjaW5jbHVkZS5tNCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9kb3h5Z2VuLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CitQUk9HUkFNUyA9ICQobm9pbnN0X1BST0dSQU1TKQorYW1fX2Jyb3dzZV9TT1VSQ0VTX0RJU1QgPSBicm93c2UuYworQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUBhbV9icm93c2VfT0JKRUNUUyA9IGJyb3dzZS1icm93c2UuJChPQkpFWFQpCiticm93c2VfT0JKRUNUUyA9ICQoYW1fYnJvd3NlX09CSkVDVFMpCitARU5BQkxFX0NPTVBBVF9IT1dMX1RSVUVAQEhBVkVfREJVU19UUlVFQGJyb3dzZV9ERVBFTkRFTkNJRVMgPSAgXAorQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUAJLi4vbGliaG93bC5sYQorQU1fVl9sdCA9ICQoYW1fX3ZfbHRfQEFNX1ZAKQorYW1fX3ZfbHRfID0gJChhbV9fdl9sdF9AQU1fREVGQVVMVF9WQCkKK2FtX192X2x0XzAgPSAtLXNpbGVudAorYnJvd3NlX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKGJyb3dzZV9DRkxBR1MpICQoQ0ZMQUdTKSBcCisJJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACithbV9fcHVibGlzaF9TT1VSQ0VTX0RJU1QgPSBwdWJsaXNoLmMKK0BFTkFCTEVfQ09NUEFUX0hPV0xfVFJVRUBASEFWRV9EQlVTX1RSVUVAYW1fcHVibGlzaF9PQkpFQ1RTID0gcHVibGlzaC1wdWJsaXNoLiQoT0JKRVhUKQorcHVibGlzaF9PQkpFQ1RTID0gJChhbV9wdWJsaXNoX09CSkVDVFMpCitARU5BQkxFX0NPTVBBVF9IT1dMX1RSVUVAQEhBVkVfREJVU19UUlVFQHB1Ymxpc2hfREVQRU5ERU5DSUVTID0gIFwKK0BFTkFCTEVfQ09NUEFUX0hPV0xfVFJVRUBASEFWRV9EQlVTX1RSVUVACS4uL2xpYmhvd2wubGEKK3B1Ymxpc2hfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQocHVibGlzaF9DRkxBR1MpIFwKKwkkKENGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACithbV9fcXVlcnlfU09VUkNFU19ESVNUID0gcXVlcnkuYworQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUBhbV9xdWVyeV9PQkpFQ1RTID0gcXVlcnktcXVlcnkuJChPQkpFWFQpCitxdWVyeV9PQkpFQ1RTID0gJChhbV9xdWVyeV9PQkpFQ1RTKQorQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUBxdWVyeV9ERVBFTkRFTkNJRVMgPSAgXAorQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUAJLi4vbGliaG93bC5sYQorcXVlcnlfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQocXVlcnlfQ0ZMQUdTKSAkKENGTEFHUykgXAorCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorYW1fX3Jlc29sdmVfU09VUkNFU19ESVNUID0gcmVzb2x2ZS5jCitARU5BQkxFX0NPTVBBVF9IT1dMX1RSVUVAQEhBVkVfREJVU19UUlVFQGFtX3Jlc29sdmVfT0JKRUNUUyA9IHJlc29sdmUtcmVzb2x2ZS4kKE9CSkVYVCkKK3Jlc29sdmVfT0JKRUNUUyA9ICQoYW1fcmVzb2x2ZV9PQkpFQ1RTKQorQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUByZXNvbHZlX0RFUEVOREVOQ0lFUyA9ICBcCitARU5BQkxFX0NPTVBBVF9IT1dMX1RSVUVAQEhBVkVfREJVU19UUlVFQAkuLi9saWJob3dsLmxhCityZXNvbHZlX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKHJlc29sdmVfQ0ZMQUdTKSBcCisJJChDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKK2RlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKK2FtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCithbV9fbXYgPSBtdiAtZgorQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCisJJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAorCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAorCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0FNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKK2FtX192X0NDXyA9ICQoYW1fX3ZfQ0NfQEFNX0RFRkFVTFRfVkApCithbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgIiAkQDsKK0FNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKK2FtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCithbV9fdl9hdF8wID0gQAorQ0NMRCA9ICQoQ0MpCitMSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCisJJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACitBTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQorYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfQEFNX0RFRkFVTFRfVkApCithbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAiICRAOworQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCithbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCithbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICIgJEA7CitTT1VSQ0VTID0gJChicm93c2VfU09VUkNFUykgJChwdWJsaXNoX1NPVVJDRVMpICQocXVlcnlfU09VUkNFUykgXAorCSQocmVzb2x2ZV9TT1VSQ0VTKQorRElTVF9TT1VSQ0VTID0gJChhbV9fYnJvd3NlX1NPVVJDRVNfRElTVCkgJChhbV9fcHVibGlzaF9TT1VSQ0VTX0RJU1QpIFwKKwkkKGFtX19xdWVyeV9TT1VSQ0VTX0RJU1QpICQoYW1fX3Jlc29sdmVfU09VUkNFU19ESVNUKQorRVRBR1MgPSBldGFncworQ1RBR1MgPSBjdGFncworRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FMTF9MSU5HVUFTID0gQEFMTF9MSU5HVUFTQAorQU1UQVIgPSBAQU1UQVJACitBTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKK0FSID0gQEFSQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FWQUhJX0FVVE9JUERfR1JPVVAgPSBAQVZBSElfQVVUT0lQRF9HUk9VUEAKK0FWQUhJX0FVVE9JUERfVVNFUiA9IEBBVkFISV9BVVRPSVBEX1VTRVJACitBVkFISV9HUk9VUCA9IEBBVkFISV9HUk9VUEAKK0FWQUhJX1BSSVZfQUNDRVNTX0dST1VQID0gQEFWQUhJX1BSSVZfQUNDRVNTX0dST1VQQAorQVZBSElfVVNFUiA9IEBBVkFISV9VU0VSQAorQVdLID0gQEFXS0AKK0NBVEFMT0dTID0gQENBVEFMT0dTQAorQ0FUT0JKRVhUID0gQENBVE9CSkVYVEAKK0NDID0gQENDQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RBVEFESVJOQU1FID0gQERBVEFESVJOQU1FQAorREJVU19DRkxBR1MgPSBAREJVU19DRkxBR1NACitEQlVTX0xJQlMgPSBAREJVU19MSUJTQAorREJVU19TWVNURU1fQlVTX0RFRkFVTFRfQUREUkVTUyA9IEBEQlVTX1NZU1RFTV9CVVNfREVGQVVMVF9BRERSRVNTQAorREJVU19TWVNfRElSID0gQERCVVNfU1lTX0RJUkAKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitETExUT09MID0gQERMTFRPT0xACitET1hZR0VOX1BBUEVSX1NJWkUgPSBARE9YWUdFTl9QQVBFUl9TSVpFQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitEWF9DT05GSUcgPSBARFhfQ09ORklHQAorRFhfRE9DRElSID0gQERYX0RPQ0RJUkAKK0RYX0RPVCA9IEBEWF9ET1RACitEWF9ET1hZR0VOID0gQERYX0RPWFlHRU5ACitEWF9EVklQUyA9IEBEWF9EVklQU0AKK0RYX0VHUkVQID0gQERYX0VHUkVQQAorRFhfRU5WID0gQERYX0VOVkAKK0RYX0ZMQUdfY2hpID0gQERYX0ZMQUdfY2hpQAorRFhfRkxBR19jaG0gPSBARFhfRkxBR19jaG1ACitEWF9GTEFHX2RvYyA9IEBEWF9GTEFHX2RvY0AKK0RYX0ZMQUdfZG90ID0gQERYX0ZMQUdfZG90QAorRFhfRkxBR19odG1sID0gQERYX0ZMQUdfaHRtbEAKK0RYX0ZMQUdfbWFuID0gQERYX0ZMQUdfbWFuQAorRFhfRkxBR19wZGYgPSBARFhfRkxBR19wZGZACitEWF9GTEFHX3BzID0gQERYX0ZMQUdfcHNACitEWF9GTEFHX3J0ZiA9IEBEWF9GTEFHX3J0ZkAKK0RYX0ZMQUdfeG1sID0gQERYX0ZMQUdfeG1sQAorRFhfSEhDID0gQERYX0hIQ0AKK0RYX0xBVEVYID0gQERYX0xBVEVYQAorRFhfTUFLRUlOREVYID0gQERYX01BS0VJTkRFWEAKK0RYX1BERkxBVEVYID0gQERYX1BERkxBVEVYQAorRFhfUEVSTCA9IEBEWF9QRVJMQAorRFhfUFJPSkVDVCA9IEBEWF9QUk9KRUNUQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFWEVFWFQgPSBARVhFRVhUQAorRkdSRVAgPSBARkdSRVBACitHQUNVVElMID0gQEdBQ1VUSUxACitHRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAorR0xJQjIwX0NGTEFHUyA9IEBHTElCMjBfQ0ZMQUdTQAorR0xJQjIwX0xJQlMgPSBAR0xJQjIwX0xJQlNACitHTU9GSUxFUyA9IEBHTU9GSUxFU0AKK0dNU0dGTVQgPSBAR01TR0ZNVEAKK0dPQkpFQ1RfQ0ZMQUdTID0gQEdPQkpFQ1RfQ0ZMQUdTQAorR09CSkVDVF9MSUJTID0gQEdPQkpFQ1RfTElCU0AKK0dSRVAgPSBAR1JFUEAKK0dUSzIwX0NGTEFHUyA9IEBHVEsyMF9DRkxBR1NACitHVEsyMF9MSUJTID0gQEdUSzIwX0xJQlNACitHVEszMF9DRkxBR1MgPSBAR1RLMzBfQ0ZMQUdTQAorR1RLMzBfTElCUyA9IEBHVEszMF9MSUJTQAorSE9XTF9DT01QQVRfVkVSU0lPTiA9IEBIT1dMX0NPTVBBVF9WRVJTSU9OQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitJTlNUT0JKRVhUID0gQElOU1RPQkpFWFRACitJTlRMTElCUyA9IEBJTlRMTElCU0AKK0lOVExUT09MX0VYVFJBQ1QgPSBASU5UTFRPT0xfRVhUUkFDVEAKK0lOVExUT09MX01FUkdFID0gQElOVExUT09MX01FUkdFQAorSU5UTFRPT0xfUEVSTCA9IEBJTlRMVE9PTF9QRVJMQAorSU5UTFRPT0xfVVBEQVRFID0gQElOVExUT09MX1VQREFURUAKK0lOVFJPU1BFQ1RJT05fQ0ZMQUdTID0gQElOVFJPU1BFQ1RJT05fQ0ZMQUdTQAorSU5UUk9TUEVDVElPTl9DT01QSUxFUiA9IEBJTlRST1NQRUNUSU9OX0NPTVBJTEVSQAorSU5UUk9TUEVDVElPTl9HRU5FUkFURSA9IEBJTlRST1NQRUNUSU9OX0dFTkVSQVRFQAorSU5UUk9TUEVDVElPTl9HSVJESVIgPSBASU5UUk9TUEVDVElPTl9HSVJESVJACitJTlRST1NQRUNUSU9OX0xJQlMgPSBASU5UUk9TUEVDVElPTl9MSUJTQAorSU5UUk9TUEVDVElPTl9NQUtFRklMRSA9IEBJTlRST1NQRUNUSU9OX01BS0VGSUxFQAorSU5UUk9TUEVDVElPTl9TQ0FOTkVSID0gQElOVFJPU1BFQ1RJT05fU0NBTk5FUkAKK0lOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUiA9IEBJTlRST1NQRUNUSU9OX1RZUEVMSUJESVJACitMRCA9IEBMREAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQkFWQUhJX0NMSUVOVF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ0xJRU5UX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPTU1PTl9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ09NTU9OX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPTVBBVF9IT1dMX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DT01QQVRfSE9XTF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9DT01QQVRfTElCRE5TX1NEX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DT01QQVRfTElCRE5TX1NEX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPUkVfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NPUkVfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfR0xJQl9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfR0xJQl9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9HT0JKRUNUX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9HT0JKRUNUX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX1FUM19WRVJTSU9OX0lORk8gPSBATElCQVZBSElfUVQzX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX1FUNF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfUVQ0X1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX1VJX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9VSV9WRVJTSU9OX0lORk9ACitMSUJEQUVNT05fQ0ZMQUdTID0gQExJQkRBRU1PTl9DRkxBR1NACitMSUJEQUVNT05fTElCUyA9IEBMSUJEQUVNT05fTElCU0AKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKK0xOX1MgPSBATE5fU0AKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKK01DUyA9IEBNQ1NACitNREFTU0VNQkxFUiA9IEBNREFTU0VNQkxFUkAKK01LRElSX1AgPSBATUtESVJfUEAKK01LSU5TVEFMTERJUlMgPSBATUtJTlNUQUxMRElSU0AKK01PQ19RVDMgPSBATU9DX1FUM0AKK01PQ19RVDQgPSBATU9DX1FUNEAKK01PTk9ET0NFUiA9IEBNT05PRE9DRVJACitNT05PRE9DX0NGTEFHUyA9IEBNT05PRE9DX0NGTEFHU0AKK01PTk9ET0NfRElSID0gQE1PTk9ET0NfRElSQAorTU9OT0RPQ19MSUJTID0gQE1PTk9ET0NfTElCU0AKK01TR0ZNVCA9IEBNU0dGTVRACitNU0dGTVRfT1BUUyA9IEBNU0dGTVRfT1BUU0AKK01TR01FUkdFID0gQE1TR01FUkdFQAorTk0gPSBATk1ACitOTUVESVQgPSBATk1FRElUQAorT0JKRFVNUCA9IEBPQkpEVU1QQAorT0JKRVhUID0gQE9CSkVYVEAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQS0dfQ09ORklHX0xJQkRJUiA9IEBQS0dfQ09ORklHX0xJQkRJUkAKK1BLR19DT05GSUdfUEFUSCA9IEBQS0dfQ09ORklHX1BBVEhACitQT0ZJTEVTID0gQFBPRklMRVNACitQT1NVQiA9IEBQT1NVQkAKK1BPX0lOX0RBVEFESVJfRkFMU0UgPSBAUE9fSU5fREFUQURJUl9GQUxTRUAKK1BPX0lOX0RBVEFESVJfVFJVRSA9IEBQT19JTl9EQVRBRElSX1RSVUVACitQVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACitQVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKK1BUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACitQWVRIT04gPSBAUFlUSE9OQAorUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKK1BZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACitQWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACitQWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKK1FUM19DRkxBR1MgPSBAUVQzX0NGTEFHU0AKK1FUM19MSUJTID0gQFFUM19MSUJTQAorUVQ0X0NGTEFHUyA9IEBRVDRfQ0ZMQUdTQAorUVQ0X0xJQlMgPSBAUVQ0X0xJQlNACitSQU5MSUIgPSBAUkFOTElCQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTVE9XID0gQFNUT1dACitTVFJJUCA9IEBTVFJJUEAKK1VTRV9OTFMgPSBAVVNFX05MU0AKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1ZJU0lCSUxJVFlfSElEREVOX0NGTEFHUyA9IEBWSVNJQklMSVRZX0hJRERFTl9DRkxBR1NACitYR0VUVEVYVCA9IEBYR0VUVEVYVEAKK1hNTF9DRkxBR1MgPSBAWE1MX0NGTEFHU0AKK1hNTF9MSUJTID0gQFhNTF9MSUJTQAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorYWNfY3RfQVIgPSBAYWNfY3RfQVJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithY3hfcHRocmVhZF9jb25maWcgPSBAYWN4X3B0aHJlYWRfY29uZmlnQAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACithdmFoaV9ydW50aW1lX2RpciA9IEBhdmFoaV9ydW50aW1lX2RpckAKK2F2YWhpX3NvY2tldCA9IEBhdmFoaV9zb2NrZXRACithdmFoaWxvY2FsZWRpciA9IEBhdmFoaWxvY2FsZWRpckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraGF2ZV9wa2dfY29uZmlnID0gQGhhdmVfcGtnX2NvbmZpZ0AKK2hhdmVfeG1sdG9tYW4gPSBAaGF2ZV94bWx0b21hbkAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitpbnRlcmZhY2VzZGlyID0gQGludGVyZmFjZXNkaXJACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKK3BrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitweWV4ZWNkaXIgPSBAcHlleGVjZGlyQAorcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3N5c3RlbWRzeXN0ZW11bml0ZGlyID0gQHN5c3RlbWRzeXN0ZW11bml0ZGlyQAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK3RvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKK3RvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACisKKyMgVGhpcyBjb29sIGRlYnVnIHRyYXAgd29ya3Mgb24gaTM4Ni9nY2Mgb25seQorQU1fQ0ZMQUdTID0gLUkkKHRvcF9zcmNkaXIpIC1JJCh0b3Bfc3JjZGlyKS9hdmFoaS1jb21wYXQtaG93bC9pbmNsdWRlIFwKKwknLURERUJVR19UUkFQPV9fYXNtX18oImludCAkJDMiKScKK0BFTkFCTEVfQ09NUEFUX0hPV0xfVFJVRUBASEFWRV9EQlVTX1RSVUVAYnJvd3NlX1NPVVJDRVMgPSBcCitARU5BQkxFX0NPTVBBVF9IT1dMX1RSVUVAQEhBVkVfREJVU19UUlVFQAlicm93c2UuYworCitARU5BQkxFX0NPTVBBVF9IT1dMX1RSVUVAQEhBVkVfREJVU19UUlVFQGJyb3dzZV9DRkxBR1MgPSAkKEFNX0NGTEFHUykgJChQVEhSRUFEX0NGTEFHUykgLUkgJChzcmNkaXIpL2luY2x1ZGUKK0BFTkFCTEVfQ09NUEFUX0hPV0xfVFJVRUBASEFWRV9EQlVTX1RSVUVAYnJvd3NlX0xEQUREID0gJChBTV9MREFERCkgLi4vbGliaG93bC5sYQorQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUByZXNvbHZlX1NPVVJDRVMgPSBcCitARU5BQkxFX0NPTVBBVF9IT1dMX1RSVUVAQEhBVkVfREJVU19UUlVFQAlyZXNvbHZlLmMKKworQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUByZXNvbHZlX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAkKFBUSFJFQURfQ0ZMQUdTKSAtSSAkKHNyY2RpcikvaW5jbHVkZQorQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUByZXNvbHZlX0xEQUREID0gJChBTV9MREFERCkgLi4vbGliaG93bC5sYQorQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUBwdWJsaXNoX1NPVVJDRVMgPSBcCitARU5BQkxFX0NPTVBBVF9IT1dMX1RSVUVAQEhBVkVfREJVU19UUlVFQAlwdWJsaXNoLmMKKworQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUBwdWJsaXNoX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAkKFBUSFJFQURfQ0ZMQUdTKSAtSSAkKHNyY2RpcikvaW5jbHVkZQorQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUBwdWJsaXNoX0xEQUREID0gJChBTV9MREFERCkgLi4vbGliaG93bC5sYQorQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUBxdWVyeV9TT1VSQ0VTID0gXAorQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUAJcXVlcnkuYworCitARU5BQkxFX0NPTVBBVF9IT1dMX1RSVUVAQEhBVkVfREJVU19UUlVFQHF1ZXJ5X0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAkKFBUSFJFQURfQ0ZMQUdTKSAtSSAkKHNyY2RpcikvaW5jbHVkZQorQEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFQEBIQVZFX0RCVVNfVFJVRUBxdWVyeV9MREFERCA9ICQoQU1fTERBREQpIC4uL2xpYmhvd2wubGEKK2FsbDogYWxsLWFtCisKKy5TVUZGSVhFUzoKKy5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCisJICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduIGF2YWhpLWNvbXBhdC1ob3dsL3NhbXBsZXMvTWFrZWZpbGUnOyBcCisJJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1mb3JlaWduIGF2YWhpLWNvbXBhdC1ob3dsL3NhbXBsZXMvTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6ICAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6ICAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKGFtX19hY2xvY2FsX200X2RlcHMpOgorCitjbGVhbi1ub2luc3RQUk9HUkFNUzoKKwlAbGlzdD0nJChub2luc3RfUFJPR1JBTVMpJzsgdGVzdCAtbiAiJCRsaXN0IiB8fCBleGl0IDA7IFwKKwllY2hvICIgcm0gLWYiICQkbGlzdDsgXAorCXJtIC1mICQkbGlzdCB8fCBleGl0ICQkPzsgXAorCXRlc3QgLW4gIiQoRVhFRVhUKSIgfHwgZXhpdCAwOyBcCisJbGlzdD1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkICdzLyQoRVhFRVhUKSQkLy8nYDsgXAorCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCisJcm0gLWYgJCRsaXN0Citicm93c2UkKEVYRUVYVCk6ICQoYnJvd3NlX09CSkVDVFMpICQoYnJvd3NlX0RFUEVOREVOQ0lFUykgJChFWFRSQV9icm93c2VfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgYnJvd3NlJChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChicm93c2VfTElOSykgJChicm93c2VfT0JKRUNUUykgJChicm93c2VfTERBREQpICQoTElCUykKK3B1Ymxpc2gkKEVYRUVYVCk6ICQocHVibGlzaF9PQkpFQ1RTKSAkKHB1Ymxpc2hfREVQRU5ERU5DSUVTKSAkKEVYVFJBX3B1Ymxpc2hfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgcHVibGlzaCQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQocHVibGlzaF9MSU5LKSAkKHB1Ymxpc2hfT0JKRUNUUykgJChwdWJsaXNoX0xEQUREKSAkKExJQlMpCitxdWVyeSQoRVhFRVhUKTogJChxdWVyeV9PQkpFQ1RTKSAkKHF1ZXJ5X0RFUEVOREVOQ0lFUykgJChFWFRSQV9xdWVyeV9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBxdWVyeSQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQocXVlcnlfTElOSykgJChxdWVyeV9PQkpFQ1RTKSAkKHF1ZXJ5X0xEQUREKSAkKExJQlMpCityZXNvbHZlJChFWEVFWFQpOiAkKHJlc29sdmVfT0JKRUNUUykgJChyZXNvbHZlX0RFUEVOREVOQ0lFUykgJChFWFRSQV9yZXNvbHZlX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIHJlc29sdmUkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKHJlc29sdmVfTElOSykgJChyZXNvbHZlX09CSkVDVFMpICQocmVzb2x2ZV9MREFERCkgJChMSUJTKQorCittb3N0bHljbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLiQoT0JKRVhUKQorCitkaXN0Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi50YWIuYworCitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYnJvd3NlLWJyb3dzZS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcHVibGlzaC1wdWJsaXNoLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9xdWVyeS1xdWVyeS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcmVzb2x2ZS1yZXNvbHZlLlBvQGFtX19xdW90ZUAKKworLmMubzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgJDwKKworLmMub2JqOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIGAkKENZR1BBVEhfVykgJyQ8J2AKKworLmMubG86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8CisKK2Jyb3dzZS1icm93c2UubzogYnJvd3NlLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChicm93c2VfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGJyb3dzZS1icm93c2UubyAtTUQgLU1QIC1NRiAkKERFUERJUikvYnJvd3NlLWJyb3dzZS5UcG8gLWMgLW8gYnJvd3NlLWJyb3dzZS5vIGB0ZXN0IC1mICdicm93c2UuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYnJvd3NlLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2Jyb3dzZS1icm93c2UuVHBvICQoREVQRElSKS9icm93c2UtYnJvd3NlLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYnJvd3NlLmMnIG9iamVjdD0nYnJvd3NlLWJyb3dzZS5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChicm93c2VfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYnJvd3NlLWJyb3dzZS5vIGB0ZXN0IC1mICdicm93c2UuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYnJvd3NlLmMKKworYnJvd3NlLWJyb3dzZS5vYmo6IGJyb3dzZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYnJvd3NlX0NGTEFHUykgJChDRkxBR1MpIC1NVCBicm93c2UtYnJvd3NlLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvYnJvd3NlLWJyb3dzZS5UcG8gLWMgLW8gYnJvd3NlLWJyb3dzZS5vYmogYGlmIHRlc3QgLWYgJ2Jyb3dzZS5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2Jyb3dzZS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9icm93c2UuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYnJvd3NlLWJyb3dzZS5UcG8gJChERVBESVIpL2Jyb3dzZS1icm93c2UuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdicm93c2UuYycgb2JqZWN0PSdicm93c2UtYnJvd3NlLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYnJvd3NlX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGJyb3dzZS1icm93c2Uub2JqIGBpZiB0ZXN0IC1mICdicm93c2UuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdicm93c2UuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvYnJvd3NlLmMnOyBmaWAKKworcHVibGlzaC1wdWJsaXNoLm86IHB1Ymxpc2guYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHB1Ymxpc2hfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHB1Ymxpc2gtcHVibGlzaC5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9wdWJsaXNoLXB1Ymxpc2guVHBvIC1jIC1vIHB1Ymxpc2gtcHVibGlzaC5vIGB0ZXN0IC1mICdwdWJsaXNoLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHB1Ymxpc2guYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvcHVibGlzaC1wdWJsaXNoLlRwbyAkKERFUERJUikvcHVibGlzaC1wdWJsaXNoLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ncHVibGlzaC5jJyBvYmplY3Q9J3B1Ymxpc2gtcHVibGlzaC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChwdWJsaXNoX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHB1Ymxpc2gtcHVibGlzaC5vIGB0ZXN0IC1mICdwdWJsaXNoLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHB1Ymxpc2guYworCitwdWJsaXNoLXB1Ymxpc2gub2JqOiBwdWJsaXNoLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChwdWJsaXNoX0NGTEFHUykgJChDRkxBR1MpIC1NVCBwdWJsaXNoLXB1Ymxpc2gub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9wdWJsaXNoLXB1Ymxpc2guVHBvIC1jIC1vIHB1Ymxpc2gtcHVibGlzaC5vYmogYGlmIHRlc3QgLWYgJ3B1Ymxpc2guYyc7IHRoZW4gJChDWUdQQVRIX1cpICdwdWJsaXNoLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3B1Ymxpc2guYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvcHVibGlzaC1wdWJsaXNoLlRwbyAkKERFUERJUikvcHVibGlzaC1wdWJsaXNoLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ncHVibGlzaC5jJyBvYmplY3Q9J3B1Ymxpc2gtcHVibGlzaC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHB1Ymxpc2hfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gcHVibGlzaC1wdWJsaXNoLm9iaiBgaWYgdGVzdCAtZiAncHVibGlzaC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3B1Ymxpc2guYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvcHVibGlzaC5jJzsgZmlgCisKK3F1ZXJ5LXF1ZXJ5Lm86IHF1ZXJ5LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChxdWVyeV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgcXVlcnktcXVlcnkubyAtTUQgLU1QIC1NRiAkKERFUERJUikvcXVlcnktcXVlcnkuVHBvIC1jIC1vIHF1ZXJ5LXF1ZXJ5Lm8gYHRlc3QgLWYgJ3F1ZXJ5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHF1ZXJ5LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3F1ZXJ5LXF1ZXJ5LlRwbyAkKERFUERJUikvcXVlcnktcXVlcnkuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdxdWVyeS5jJyBvYmplY3Q9J3F1ZXJ5LXF1ZXJ5Lm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHF1ZXJ5X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHF1ZXJ5LXF1ZXJ5Lm8gYHRlc3QgLWYgJ3F1ZXJ5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHF1ZXJ5LmMKKworcXVlcnktcXVlcnkub2JqOiBxdWVyeS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocXVlcnlfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHF1ZXJ5LXF1ZXJ5Lm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvcXVlcnktcXVlcnkuVHBvIC1jIC1vIHF1ZXJ5LXF1ZXJ5Lm9iaiBgaWYgdGVzdCAtZiAncXVlcnkuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdxdWVyeS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9xdWVyeS5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9xdWVyeS1xdWVyeS5UcG8gJChERVBESVIpL3F1ZXJ5LXF1ZXJ5LlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ncXVlcnkuYycgb2JqZWN0PSdxdWVyeS1xdWVyeS5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHF1ZXJ5X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHF1ZXJ5LXF1ZXJ5Lm9iaiBgaWYgdGVzdCAtZiAncXVlcnkuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdxdWVyeS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9xdWVyeS5jJzsgZmlgCisKK3Jlc29sdmUtcmVzb2x2ZS5vOiByZXNvbHZlLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChyZXNvbHZlX0NGTEFHUykgJChDRkxBR1MpIC1NVCByZXNvbHZlLXJlc29sdmUubyAtTUQgLU1QIC1NRiAkKERFUERJUikvcmVzb2x2ZS1yZXNvbHZlLlRwbyAtYyAtbyByZXNvbHZlLXJlc29sdmUubyBgdGVzdCAtZiAncmVzb2x2ZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2ByZXNvbHZlLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3Jlc29sdmUtcmVzb2x2ZS5UcG8gJChERVBESVIpL3Jlc29sdmUtcmVzb2x2ZS5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3Jlc29sdmUuYycgb2JqZWN0PSdyZXNvbHZlLXJlc29sdmUubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocmVzb2x2ZV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyByZXNvbHZlLXJlc29sdmUubyBgdGVzdCAtZiAncmVzb2x2ZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2ByZXNvbHZlLmMKKworcmVzb2x2ZS1yZXNvbHZlLm9iajogcmVzb2x2ZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocmVzb2x2ZV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgcmVzb2x2ZS1yZXNvbHZlLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvcmVzb2x2ZS1yZXNvbHZlLlRwbyAtYyAtbyByZXNvbHZlLXJlc29sdmUub2JqIGBpZiB0ZXN0IC1mICdyZXNvbHZlLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAncmVzb2x2ZS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9yZXNvbHZlLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3Jlc29sdmUtcmVzb2x2ZS5UcG8gJChERVBESVIpL3Jlc29sdmUtcmVzb2x2ZS5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3Jlc29sdmUuYycgb2JqZWN0PSdyZXNvbHZlLXJlc29sdmUub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChyZXNvbHZlX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHJlc29sdmUtcmVzb2x2ZS5vYmogYGlmIHRlc3QgLWYgJ3Jlc29sdmUuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdyZXNvbHZlLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3Jlc29sdmUuYyc7IGZpYAorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCW1raWQgLWZJRCAkJHVuaXF1ZQordGFnczogVEFHUworCitUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXNldCB4OyBcCisJaGVyZT1gcHdkYDsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlzaGlmdDsgXAorCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisJICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCisJICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAorCSAgZWxzZSBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAkJHVuaXF1ZTsgXAorCSAgZmk7IFwKKwlmaQorY3RhZ3M6IENUQUdTCitDVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCisJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCisJICAgICAkJHVuaXF1ZQorCitHVEFHUzoKKwloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgorCitkaXN0Y2xlYW4tdGFnczoKKwktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1hbQorYWxsLWFtOiBNYWtlZmlsZSAkKFBST0dSQU1TKQoraW5zdGFsbGRpcnM6CitpbnN0YWxsOiBpbnN0YWxsLWFtCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KK3VuaW5zdGFsbDogdW5pbnN0YWxsLWFtCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCitpbnN0YWxsLXN0cmlwOgorCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgICAgICBpbnN0YWxsOyBcCisJZWxzZSBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKKwlmaQorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0UFJPR1JBTVMgXAorCW1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1kdmktYW06CisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOgorCisuTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisKKy5QSE9OWTogQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKKwljbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdFBST0dSQU1TIGN0YWdzIGRpc3RjbGVhbiBcCisJZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgXAorCWRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIFwKKwlpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBcCisJaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgXAorCWluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIFwKKwlpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAorCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCisJbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAorCW1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIFwKKwlwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbQorCisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtaG93bC9zYW1wbGVzL2Jyb3dzZS5jIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbXBhdC1ob3dsL3NhbXBsZXMvYnJvd3NlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU1YjFjZgotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtaG93bC9zYW1wbGVzL2Jyb3dzZS5jCkBAIC0wLDAgKzEsMTg0IEBACisvKgorICogQ29weXJpZ2h0IDIwMDMsIDIwMDQsIDIwMDQgUG9yY2hkb2cgU29mdHdhcmUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICoJUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqCWFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKgkJMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICoJCSAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgkJMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICoJCSAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqCQkgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKglUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFBPUkNIRE9HIFNPRlRXQVJFIGBgQVMgSVMnJyBBTkQgQU5ZCisgKglFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKglXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKglJTiBOTyBFVkVOVCBTSEFMTCBUSEUgSE9XTCBQUk9KRUNUIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKglJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqCUJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKglEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKglPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFCisgKglPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqCU9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKglUaGUgdmlld3MgYW5kIGNvbmNsdXNpb25zIGNvbnRhaW5lZCBpbiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24gYXJlIHRob3NlCisgKglvZiB0aGUgYXV0aG9ycyBhbmQgc2hvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCBhcyByZXByZXNlbnRpbmcgb2ZmaWNpYWwgcG9saWNpZXMsCisgKgllaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIG9mIFBvcmNoZG9nIFNvZnR3YXJlLgorICovCisKKyNpbmNsdWRlIDxob3dsLmg+CisjaW5jbHVkZSA8c2FsdC9kZWJ1Zy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKworc3RhdGljIHN3X3Jlc3VsdCBIT1dMX0FQSQorbXlfcmVzb2x2ZXIoCisJCQkJc3dfZGlzY292ZXJ5CQkJZGlzY292ZXJ5LAorCQkJCXN3X2Rpc2NvdmVyeV9vaWQJCW9pZCwKKwkJCQlzd191aW50MzIJCQkJaW50ZXJmYWNlX2luZGV4LAorCQkJCXN3X2NvbnN0X3N0cmluZwkJbmFtZSwKKwkJCQlzd19jb25zdF9zdHJpbmcJCXR5cGUsCisJCQkJc3dfY29uc3Rfc3RyaW5nCQlkb21haW4sCisJCQkJc3dfaXB2NF9hZGRyZXNzCQlhZGRyZXNzLAorCQkJCXN3X3BvcnQJCQkJCXBvcnQsCisJCQkJc3dfb2N0ZXRzCQkJCXRleHRfcmVjb3JkLAorCQkJCXN3X3VpbnQzMgkJCQl0ZXh0X3JlY29yZF9sZW4sCisJCQkJc3dfb3BhcXVlX3QJCQkJZXh0cmEpCit7CisJc3dfdGV4dF9yZWNvcmRfaXRlcmF0b3IJCQkJaXQ7CisJc3dfaW50OAkJCQkJCQkJCW5hbWVfYnVmWzE2XTsKKwlzd19pbnQ4CQkJCQkJCQkJa2V5W1NXX1RFWFRfUkVDT1JEX01BWF9MRU5dOworCXN3X2ludDgJCQkJCQkJCQlzdmFsW1NXX1RFWFRfUkVDT1JEX01BWF9MRU5dOworCXN3X3VpbnQ4CQkJCQkJCQkJb3ZhbFtTV19URVhUX1JFQ09SRF9NQVhfTEVOXTsKKwlzd191aW50MzIJCQkJCQkJCW92YWxfbGVuOworCXN3X3Jlc3VsdAkJCQkJCQkJZXJyID0gU1dfT0tBWTsKKworCXN3X2Rpc2NvdmVyeV9jYW5jZWwoZGlzY292ZXJ5LCBvaWQpOworCisJZnByaW50ZihzdGRlcnIsICJyZXNvbHZlIHJlcGx5OiAweCV4ICVzICVzICVzICVzICVkXG4iLCBpbnRlcmZhY2VfaW5kZXgsIG5hbWUsIHR5cGUsIGRvbWFpbiwgc3dfaXB2NF9hZGRyZXNzX25hbWUoYWRkcmVzcywgbmFtZV9idWYsIDE2KSwgcG9ydCk7CisKKwlpZiAoKHRleHRfcmVjb3JkX2xlbiA+IDApICYmICh0ZXh0X3JlY29yZCkgJiYgKCp0ZXh0X3JlY29yZCAhPSAnXDAnKSkKKwl7CisJCWVyciA9IHN3X3RleHRfcmVjb3JkX2l0ZXJhdG9yX2luaXQoJml0LCB0ZXh0X3JlY29yZCwgdGV4dF9yZWNvcmRfbGVuKTsKKwkJc3dfY2hlY2tfb2theShlcnIsIGV4aXQpOworCisJCXdoaWxlIChzd190ZXh0X3JlY29yZF9pdGVyYXRvcl9uZXh0KGl0LCBrZXksIG92YWwsICZvdmFsX2xlbikgPT0gU1dfT0tBWSkKKwkJeworCQkJZnByaW50ZihzdGRlcnIsICJUeHQ6IFslc109WyVzXSAtICglZCBieXRlcylcbiIsIGtleSwgb3ZhbCwgb3ZhbF9sZW4pOworCQl9CisKKwkJZXJyID0gc3dfdGV4dF9yZWNvcmRfaXRlcmF0b3JfZmluYShpdCk7CisJCXN3X2NoZWNrX29rYXkoZXJyLCBleGl0KTsKKwl9CisKK2V4aXQ6CisKKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyBzd19yZXN1bHQgSE9XTF9BUEkKK215X2Jyb3dzZXIoCisJCQkJc3dfZGlzY292ZXJ5CQkJCQkJZGlzY292ZXJ5LAorCQkJCXN3X2Rpc2NvdmVyeV9vaWQJCQkJCW9pZCwKKwkJCQlzd19kaXNjb3ZlcnlfYnJvd3NlX3N0YXR1cwkJc3RhdHVzLAorCQkJCXN3X3VpbnQzMgkJCQkJCQlpbnRlcmZhY2VfaW5kZXgsCisJCQkJc3dfY29uc3Rfc3RyaW5nCQkJCQluYW1lLAorCQkJCXN3X2NvbnN0X3N0cmluZwkJCQkJdHlwZSwKKwkJCQlzd19jb25zdF9zdHJpbmcJCQkJCWRvbWFpbiwKKwkJCQlzd19vcGFxdWVfdAkJCQkJCQlleHRyYSkKK3sKKwlzd19kaXNjb3ZlcnlfcmVzb2x2ZV9pZCByaWQ7CisKKwlzd2l0Y2ggKHN0YXR1cykKKwl7CisJCWNhc2UgU1dfRElTQ09WRVJZX0JST1dTRV9JTlZBTElEOgorCQl7CisJCQlmcHJpbnRmKHN0ZGVyciwgImJyb3dzZSByZXBseTogSW52YWxpZFxuIik7CisJCX0KKwkJYnJlYWs7CisKKwkJY2FzZSBTV19ESVNDT1ZFUllfQlJPV1NFX1JFTEVBU0U6CisJCXsKKwkJCWZwcmludGYoc3RkZXJyLCAiYnJvd3NlIHJlcGx5OiBSZWxlYXNlXG4iKTsKKwkJfQorCQlicmVhazsKKworCQljYXNlIFNXX0RJU0NPVkVSWV9CUk9XU0VfQUREX0RPTUFJTjoKKwkJeworCQkJZnByaW50ZihzdGRlcnIsICJicm93c2UgcmVwbHk6IEFkZCBEb21haW5cbiIpOworCQl9CisJCWJyZWFrOworCisJCWNhc2UgU1dfRElTQ09WRVJZX0JST1dTRV9BRERfREVGQVVMVF9ET01BSU46CisJCXsKKwkJCWZwcmludGYoc3RkZXJyLCAiYnJvd3NlIHJlcGx5OiBBZGQgRGVmYXVsdCBEb21haW5cbiIpOworCQl9CisJCWJyZWFrOworCisJCWNhc2UgU1dfRElTQ09WRVJZX0JST1dTRV9SRU1PVkVfRE9NQUlOOgorCQl7CisJCQlmcHJpbnRmKHN0ZGVyciwgImJyb3dzZSByZXBseTogUmVtb3ZlIERvbWFpblxuIik7CisJCX0KKwkJYnJlYWs7CisKKwkJY2FzZSBTV19ESVNDT1ZFUllfQlJPV1NFX0FERF9TRVJWSUNFOgorCQl7CisJCQlmcHJpbnRmKHN0ZGVyciwgImJyb3dzZSByZXBseTogQWRkIFNlcnZpY2UgMHgleCAlcyAlcyAlc1xuIiwgaW50ZXJmYWNlX2luZGV4LCBuYW1lLCB0eXBlLCBkb21haW4pOworCQkJaWYgKHN3X2Rpc2NvdmVyeV9yZXNvbHZlKGRpc2NvdmVyeSwgaW50ZXJmYWNlX2luZGV4LCBuYW1lLCB0eXBlLCBkb21haW4sIG15X3Jlc29sdmVyLCBOVUxMLCAmcmlkKSAhPSBTV19PS0FZKQorCQkJeworCQkJCWZwcmludGYoc3RkZXJyLCAicmVzb2x2ZSBmYWlsZWRcbiIpOworCQkJfQorCQl9CisJCWJyZWFrOworCisJCWNhc2UgU1dfRElTQ09WRVJZX0JST1dTRV9SRU1PVkVfU0VSVklDRToKKwkJeworCQkJZnByaW50ZihzdGRlcnIsICJicm93c2UgcmVwbHk6IFJlbW92ZSBTZXJ2aWNlXG4iKTsKKwkJCWZwcmludGYoc3RkZXJyLCAicmVtb3ZlIHNlcnZpY2U6IDB4JXggJXMgJXMgJXNcbiIsIGludGVyZmFjZV9pbmRleCwgbmFtZSwgdHlwZSwgZG9tYWluKTsKKwkJfQorCQlicmVhazsKKworCQljYXNlIFNXX0RJU0NPVkVSWV9CUk9XU0VfUkVTT0xWRUQ6CisJCXsKKwkJCWZwcmludGYoc3RkZXJyLCAiYnJvd3NlIHJlcGx5OiBSZXNvbHZlZFxuIik7CisJCX0KKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIFNXX09LQVk7Cit9CisKKworI2lmIGRlZmluZWQoV0lOMzIpCitpbnQgX19jZGVjbAorI2Vsc2UKK2ludAorI2VuZGlmCittYWluKAorCWludAkJYXJnYywKKwljaGFyCSoqCWFyZ3YpCit7CisJc3dfZGlzY292ZXJ5CQlkaXNjb3Zlcnk7CisJc3dfZGlzY292ZXJ5X29pZAlvaWQ7CisJc3dfcmVzdWx0CQkJZXJyOworCisJZXJyID0gc3dfZGlzY292ZXJ5X2luaXQoJmRpc2NvdmVyeSk7CisJc3dfY2hlY2tfb2theShlcnIsIGV4aXQpOworCisJaWYgKGFyZ2MgIT0gMikKKwl7CisJCWZwcmludGYoc3RkZXJyLCAidXNhZ2U6IG1ETlNCcm93c2UgPHR5cGU+XG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWVyciA9IHN3X2Rpc2NvdmVyeV9icm93c2UoZGlzY292ZXJ5LCAwLCBhcmd2WzFdLCBOVUxMLCBteV9icm93c2VyLCBOVUxMLCAmb2lkKTsKKwlzd19jaGVja19va2F5KGVyciwgZXhpdCk7CisKKwllcnIgPSBzd19kaXNjb3ZlcnlfcnVuKGRpc2NvdmVyeSk7CisJc3dfY2hlY2tfb2theShlcnIsIGV4aXQpOworCitleGl0OgorCisJcmV0dXJuIGVycjsKK30KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtaG93bC9zYW1wbGVzL3B1Ymxpc2guYyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtaG93bC9zYW1wbGVzL3B1Ymxpc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzFlNzg2Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbXBhdC1ob3dsL3NhbXBsZXMvcHVibGlzaC5jCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0IDIwMDMsIDIwMDQgUG9yY2hkb2cgU29mdHdhcmUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICoJUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqCWFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKgkJMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICoJCSAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgkJMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICoJCSAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqCQkgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKglUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFBPUkNIRE9HIFNPRlRXQVJFIGBgQVMgSVMnJyBBTkQgQU5ZCisgKglFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKglXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKglJTiBOTyBFVkVOVCBTSEFMTCBUSEUgSE9XTCBQUk9KRUNUIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKglJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqCUJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKglEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKglPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFCisgKglPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqCU9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKglUaGUgdmlld3MgYW5kIGNvbmNsdXNpb25zIGNvbnRhaW5lZCBpbiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24gYXJlIHRob3NlCisgKglvZiB0aGUgYXV0aG9ycyBhbmQgc2hvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCBhcyByZXByZXNlbnRpbmcgb2ZmaWNpYWwgcG9saWNpZXMsCisgKgllaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIG9mIFBvcmNoZG9nIFNvZnR3YXJlLgorICovCisKKyNpbmNsdWRlIDxob3dsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworCitzdGF0aWMgc3dfcmVzdWx0IEhPV0xfQVBJCitteV9zZXJ2aWNlX3JlcGx5KAorCQkJCXN3X2Rpc2NvdmVyeQkJCQkJCWRpc2NvdmVyeSwKKwkJCQlzd19kaXNjb3Zlcnlfb2lkCQkJCQlvaWQsCisJCQkJc3dfZGlzY292ZXJ5X3B1Ymxpc2hfc3RhdHVzCXN0YXR1cywKKwkJCQlzd19vcGFxdWUJCQkJCQkJZXh0cmEpCit7CisJc3RhdGljIHN3X3N0cmluZworCXN0YXR1c190ZXh0W10gPQorCXsKKwkJIlN0YXJ0ZWQiLAorCQkiU3RvcHBlZCIsCisJCSJOYW1lIENvbGxpc2lvbiIsCisJCSJJbnZhbGlkIgorCX07CisKKwlmcHJpbnRmKHN0ZGVyciwgInB1Ymxpc2ggcmVwbHk6ICVzXG4iLCBzdGF0dXNfdGV4dFtzdGF0dXNdKTsKKwlyZXR1cm4gU1dfT0tBWTsKK30KKworCisjaWYgZGVmaW5lZChXSU4zMikKK2ludCBfX2NkZWNsCisjZWxzZQoraW50CisjZW5kaWYKK21haW4oCisJaW50CQlhcmdjLAorCWNoYXIJKioJYXJndikKK3sKKwlzd19kaXNjb3ZlcnkJCQkJCWRpc2NvdmVyeTsKKwlzd190ZXh0X3JlY29yZAkJCQkJdGV4dF9yZWNvcmQ7CisJc3dfcmVzdWx0CQkJCQkJcmVzdWx0OworCXN3X2Rpc2NvdmVyeV9wdWJsaXNoX2lkCWlkOworCWludAkJCQkJCQkJaTsKKworCWlmIChzd19kaXNjb3ZlcnlfaW5pdCgmZGlzY292ZXJ5KSAhPSBTV19PS0FZKQorCXsKKwkJZnByaW50ZihzdGRlcnIsICJzd19kaXNjb3ZlcnlfaW5pdCgpIGZhaWxlZFxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoYXJnYyA8IDQpCisJeworCQlmcHJpbnRmKHN0ZGVyciwgInVzYWdlOiBtRE5TUHVibGlzaCA8bmFtZT4gPHR5cGU+IDxwb3J0PiBbc2VydmljZSB0ZXh0IDFdLi4uW3NlcnZpY2UgdGV4dCBuXVxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoc3dfdGV4dF9yZWNvcmRfaW5pdCgmdGV4dF9yZWNvcmQpICE9IFNXX09LQVkpCisJeworCQlmcHJpbnRmKHN0ZGVyciwgInN3X3RleHRfcmVjb3JkX2luaXQoKSBmYWlsZWRcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJZm9yIChpID0gNDsgaSA8IGFyZ2M7IGkrKykKKwl7CisJCWlmIChzd190ZXh0X3JlY29yZF9hZGRfc3RyaW5nKHRleHRfcmVjb3JkLCBhcmd2W2ldKSAhPSBTV19PS0FZKQorCQl7CisJCQlmcHJpbnRmKHN0ZGVyciwgInVuYWJsZSB0byBhZGQgc2VydmljZSB0ZXh0OiAlc1xuIiwgYXJndltpXSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlwcmludGYoIiVzICVzICVkXG4iLCBhcmd2WzFdLCBhcmd2WzJdLCBhdG9pKGFyZ3ZbM10pKTsKKworCWlmICgocmVzdWx0ID0gc3dfZGlzY292ZXJ5X3B1Ymxpc2goZGlzY292ZXJ5LCAwLCBhcmd2WzFdLCBhcmd2WzJdLCBOVUxMLCBOVUxMLCBhdG9pKGFyZ3ZbM10pLCBzd190ZXh0X3JlY29yZF9ieXRlcyh0ZXh0X3JlY29yZCksIHN3X3RleHRfcmVjb3JkX2xlbih0ZXh0X3JlY29yZCksIG15X3NlcnZpY2VfcmVwbHksIE5VTEwsICZpZCkpICE9IFNXX09LQVkpCisJeworCQlmcHJpbnRmKHN0ZGVyciwgInB1Ymxpc2ggZmFpbGVkOiAlZFxuIiwgcmVzdWx0KTsKKwkJc3dfdGV4dF9yZWNvcmRfZmluYSh0ZXh0X3JlY29yZCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlzd190ZXh0X3JlY29yZF9maW5hKHRleHRfcmVjb3JkKTsKKworCXN3X2Rpc2NvdmVyeV9ydW4oZGlzY292ZXJ5KTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvbXBhdC1ob3dsL3NhbXBsZXMvcXVlcnkuYyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtaG93bC9zYW1wbGVzL3F1ZXJ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFjMzBlYgotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtaG93bC9zYW1wbGVzL3F1ZXJ5LmMKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAzLCAyMDA0LCAyMDA0IFBvcmNoZG9nIFNvZnR3YXJlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqCVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgKglhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICoJCTEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqCQkgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoJCTIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqCQkgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKgkJICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICoJVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBQT1JDSERPRyBTT0ZUV0FSRSBgYEFTIElTJycgQU5EIEFOWQorICoJRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICoJV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICoJSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEhPV0wgUFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICoJSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKglCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICoJREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICoJT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRQorICoJT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKglPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoJVGhlIHZpZXdzIGFuZCBjb25jbHVzaW9ucyBjb250YWluZWQgaW4gdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uIGFyZSB0aG9zZQorICoJb2YgdGhlIGF1dGhvcnMgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgcmVwcmVzZW50aW5nIG9mZmljaWFsIHBvbGljaWVzLAorICoJZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBvZiBQb3JjaGRvZyBTb2Z0d2FyZS4KKyAqLworCisjaW5jbHVkZSA8aG93bC5oPgorI2luY2x1ZGUgPHNhbHQvZGVidWcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisKK3N0YXRpYyBzd19yZXN1bHQgSE9XTF9BUEkKK3F1ZXJ5X3JlY29yZF9yZXBseSgKKwkJCQlzd19kaXNjb3ZlcnkJCQkJCQkJCXNlc3Npb24sCisJCQkJc3dfZGlzY292ZXJ5X29pZAkJCQkJCQlvaWQsCisJCQkJc3dfZGlzY292ZXJ5X3F1ZXJ5X3JlY29yZF9zdGF0dXMJCXN0YXR1cywKKwkJCQlzd191aW50MzIJCQkJCQkJCQlpbnRlcmZhY2VfaW5kZXgsCisJCQkJc3dfY29uc3Rfc3RyaW5nCQkJCQkJCWZ1bGxuYW1lLAorCQkJCXN3X3VpbnQxNgkJCQkJCQkJCXJydHlwZSwKKwkJCQlzd191aW50MTYJCQkJCQkJCQlycmNsYXNzLAorCQkJCXN3X3VpbnQxNgkJCQkJCQkJCXJyZGF0YWxlbiwKKwkJCQlzd19jb25zdF9vY3RldHMJCQkJCQkJcnJkYXRhLAorCQkJCXN3X3VpbnQzMgkJCQkJCQkJCXR0bCwKKwkJCQlzd19vcGFxdWUJCQkJCQkJCQlleHRyYSkKK3sKKwlzd19pcHY0X2FkZHJlc3MgYWRkcmVzczsKKworCWZwcmludGYoc3RkZXJyLCAiaW50ZXJmYWNlIGluZGV4ID0gMHgleCwgZnVsbG5hbWUgaXMgJXNcbiIsIGludGVyZmFjZV9pbmRleCwgZnVsbG5hbWUpOworCisJaWYgKChycnR5cGUgPT0gMSkgJiYgKHJyY2xhc3MgPT0gMSkpCisJeworCQlzd19pcHY0X2FkZHJlc3MJYWRkcmVzczsKKwkJc3dfY2hhcgkJCQluYW1lWzE2XTsKKworCQlzd19pcHY0X2FkZHJlc3NfaW5pdF9mcm9tX3NhZGRyKCZhZGRyZXNzLCAqKHN3X3NhZGRyKikgcnJkYXRhKTsKKworCQlmcHJpbnRmKHN0ZGVyciwgImFkZHJlc3MgaXMgJXNcbiIsIHN3X2lwdjRfYWRkcmVzc19uYW1lKGFkZHJlc3MsIG5hbWUsIHNpemVvZihuYW1lKSkpOworCX0KKworCXJldHVybiBTV19PS0FZOworfQorCisKKworI2lmIGRlZmluZWQoV0lOMzIpCitpbnQgX19jZGVjbAorI2Vsc2UKK2ludAorI2VuZGlmCittYWluKAorCWludAkJYXJnYywKKwljaGFyCSoqCWFyZ3YpCit7CisJc3dfZGlzY292ZXJ5CQlkaXNjb3Zlcnk7CisJc3dfZGlzY292ZXJ5X29pZAlvaWQ7CisJc3dfcmVzdWx0CQkJZXJyOworCisJZXJyID0gc3dfZGlzY292ZXJ5X2luaXQoJmRpc2NvdmVyeSk7CisJc3dfY2hlY2tfb2theShlcnIsIGV4aXQpOworCisJaWYgKGFyZ2MgIT0gNCkKKwl7CisJCWZwcmludGYoc3RkZXJyLCAidXNhZ2U6IG1ETlNCcm93c2UgPG5hbWU+IDxycnR5cGU+IDxycmNsYXNzPlxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwllcnIgPSBzd19kaXNjb3ZlcnlfcXVlcnlfcmVjb3JkKGRpc2NvdmVyeSwgMCwgMCwgYXJndlsxXSwgYXRvaShhcmd2WzJdKSwgYXRvaShhcmd2WzNdKSwgcXVlcnlfcmVjb3JkX3JlcGx5LCBOVUxMLCAmb2lkKTsKKwlzd19jaGVja19va2F5KGVyciwgZXhpdCk7CisKKwllcnIgPSBzd19kaXNjb3ZlcnlfcnVuKGRpc2NvdmVyeSk7CisJc3dfY2hlY2tfb2theShlcnIsIGV4aXQpOworCitleGl0OgorCisJcmV0dXJuIGVycjsKK30KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtaG93bC9zYW1wbGVzL3Jlc29sdmUuYyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtaG93bC9zYW1wbGVzL3Jlc29sdmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzkwODQ5Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbXBhdC1ob3dsL3NhbXBsZXMvcmVzb2x2ZS5jCkBAIC0wLDAgKzEsMTExIEBACisvKgorICogQ29weXJpZ2h0IDIwMDMsIDIwMDQsIDIwMDQgUG9yY2hkb2cgU29mdHdhcmUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICoJUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqCWFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKgkJMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICoJCSAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgkJMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICoJCSAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqCQkgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKglUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFBPUkNIRE9HIFNPRlRXQVJFIGBgQVMgSVMnJyBBTkQgQU5ZCisgKglFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKglXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKglJTiBOTyBFVkVOVCBTSEFMTCBUSEUgSE9XTCBQUk9KRUNUIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKglJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqCUJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKglEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKglPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFCisgKglPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqCU9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKglUaGUgdmlld3MgYW5kIGNvbmNsdXNpb25zIGNvbnRhaW5lZCBpbiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24gYXJlIHRob3NlCisgKglvZiB0aGUgYXV0aG9ycyBhbmQgc2hvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCBhcyByZXByZXNlbnRpbmcgb2ZmaWNpYWwgcG9saWNpZXMsCisgKgllaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIG9mIFBvcmNoZG9nIFNvZnR3YXJlLgorICovCisKKyNpbmNsdWRlIDxob3dsLmg+CisjaW5jbHVkZSA8c2FsdC9kZWJ1Zy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKworc3RhdGljIHN3X3Jlc3VsdCBIT1dMX0FQSQorbXlfcmVzb2x2ZXIoCisJCQkJc3dfZGlzY292ZXJ5CQkJZGlzY292ZXJ5LAorCQkJCXN3X2Rpc2NvdmVyeV9vaWQJCW9pZCwKKwkJCQlzd191aW50MzIJCQkJaW50ZXJmYWNlX2luZGV4LAorCQkJCXN3X2NvbnN0X3N0cmluZwkJbmFtZSwKKwkJCQlzd19jb25zdF9zdHJpbmcJCXR5cGUsCisJCQkJc3dfY29uc3Rfc3RyaW5nCQlkb21haW4sCisJCQkJc3dfaXB2NF9hZGRyZXNzCQlhZGRyZXNzLAorCQkJCXN3X3BvcnQJCQkJCXBvcnQsCisJCQkJc3dfb2N0ZXRzCQkJCXRleHRfcmVjb3JkLAorCQkJCXN3X3VpbnQzMgkJCQl0ZXh0X3JlY29yZF9sZW4sCisJCQkJc3dfb3BhcXVlX3QJCQkJZXh0cmEpCit7CisJc3dfdGV4dF9yZWNvcmRfaXRlcmF0b3IJCQkJaXQ7CisJc3dfaW50OAkJCQkJCQkJCW5hbWVfYnVmWzE2XTsKKwlzd19pbnQ4CQkJCQkJCQkJa2V5W1NXX1RFWFRfUkVDT1JEX01BWF9MRU5dOworCXN3X2ludDgJCQkJCQkJCQlzdmFsW1NXX1RFWFRfUkVDT1JEX01BWF9MRU5dOworCXN3X3VpbnQ4CQkJCQkJCQkJb3ZhbFtTV19URVhUX1JFQ09SRF9NQVhfTEVOXTsKKwlzd191aW50MzIJCQkJCQkJCW92YWxfbGVuOworCXN3X3Jlc3VsdAkJCQkJCQkJZXJyID0gU1dfT0tBWTsKKworCXN3X2Rpc2NvdmVyeV9jYW5jZWwoZGlzY292ZXJ5LCBvaWQpOworCisJZnByaW50ZihzdGRlcnIsICJyZXNvbHZlIHJlcGx5OiAweCV4ICVzICVzICVzICVzICVkXG4iLCBpbnRlcmZhY2VfaW5kZXgsIG5hbWUsIHR5cGUsIGRvbWFpbiwgc3dfaXB2NF9hZGRyZXNzX25hbWUoYWRkcmVzcywgbmFtZV9idWYsIDE2KSwgcG9ydCk7CisKKwlpZiAoKHRleHRfcmVjb3JkX2xlbiA+IDApICYmICh0ZXh0X3JlY29yZCkgJiYgKCp0ZXh0X3JlY29yZCAhPSAnXDAnKSkKKwl7CisJCWVyciA9IHN3X3RleHRfcmVjb3JkX2l0ZXJhdG9yX2luaXQoJml0LCB0ZXh0X3JlY29yZCwgdGV4dF9yZWNvcmRfbGVuKTsKKwkJc3dfY2hlY2tfb2theShlcnIsIGV4aXQpOworCisJCXdoaWxlIChzd190ZXh0X3JlY29yZF9pdGVyYXRvcl9uZXh0KGl0LCBrZXksIG92YWwsICZvdmFsX2xlbikgPT0gU1dfT0tBWSkKKwkJeworCQkJZnByaW50ZihzdGRlcnIsICJrZXkgPSAlcywgZGF0YSBpcyAlZCBieXRlc1xuIiwga2V5LCBvdmFsX2xlbik7CisJCX0KKworCQllcnIgPSBzd190ZXh0X3JlY29yZF9pdGVyYXRvcl9maW5hKGl0KTsKKwkJc3dfY2hlY2tfb2theShlcnIsIGV4aXQpOworCX0KKworZXhpdDoKKworCXJldHVybiBlcnI7Cit9CisKKworI2lmIGRlZmluZWQoV0lOMzIpCitpbnQgX19jZGVjbAorI2Vsc2UKK2ludAorI2VuZGlmCittYWluKAorCWludAkJYXJnYywKKwljaGFyCSoqCWFyZ3YpCit7CisJc3dfZGlzY292ZXJ5CQlkaXNjb3Zlcnk7CisJc3dfZGlzY292ZXJ5X29pZAlvaWQ7CisJc3dfcmVzdWx0CQkJZXJyOworCisJZXJyID0gc3dfZGlzY292ZXJ5X2luaXQoJmRpc2NvdmVyeSk7CisJc3dfY2hlY2tfb2theShlcnIsIGV4aXQpOworCisJaWYgKGFyZ2MgIT0gMykKKwl7CisJCWZwcmludGYoc3RkZXJyLCAidXNhZ2U6IG1ETlNSZXNvbHZlIDxuYW1lPiA8dHlwZT5cbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJZXJyID0gc3dfZGlzY292ZXJ5X3Jlc29sdmUoZGlzY292ZXJ5LCAwLCBhcmd2WzFdLCBhcmd2WzJdLCAibG9jYWwuIiwgbXlfcmVzb2x2ZXIsIE5VTEwsICZvaWQpOworCXN3X2NoZWNrX29rYXkoZXJyLCBleGl0KTsKKworCWVyciA9IHN3X2Rpc2NvdmVyeV9ydW4oZGlzY292ZXJ5KTsKKwlzd19jaGVja19va2F5KGVyciwgZXhpdCk7CisKK2V4aXQ6CisKKwlyZXR1cm4gZXJyOworfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvbXBhdC1ob3dsL3RleHQtdGVzdC5jIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbXBhdC1ob3dsL3RleHQtdGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2ZmY1OGIKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tcGF0LWhvd2wvdGV4dC10ZXN0LmMKQEAgLTAsMCArMSw5NyBAQAorLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2djY21hY3JvLmg+CisjaW5jbHVkZSAiaG93bC5oIgorCisjZGVmaW5lIEFTU0VSVF9TV19PS0FZKHQpIHsgc3dfcmVzdWx0IF9yOyBfciA9ICh0KTsgYXNzZXJ0KF9yID09IFNXX09LQVkpOyB9CisjZGVmaW5lIEFTU0VSVF9OT1RfTlVMTCh0KSB7IGNvbnN0IHZvaWQqIF9yOyByID0gKHQpOyBhc3NlcnQoX3IpOyB9CisKK3N0YXRpYyB2b2lkIGhleGR1bXAoY29uc3Qgdm9pZCogcCwgc2l6ZV90IHNpemUpIHsKKyAgICBjb25zdCB1aW50OF90ICpjID0gcDsKKyAgICBhc3NlcnQocCk7CisKKyAgICBwcmludGYoIkR1bXBpbmcgJXp1IGJ5dGVzIGZyb20gJXA6XG4iLCBzaXplLCBwKTsKKworICAgIHdoaWxlIChzaXplID4gMCkgeworICAgICAgICB1bnNpZ25lZCBpOworCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisgICAgICAgICAgICBpZiAoaSA8IHNpemUpCisgICAgICAgICAgICAgICAgcHJpbnRmKCIlMDJ4ICIsIGNbaV0pOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHByaW50ZigiICAgIik7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworICAgICAgICAgICAgaWYgKGkgPCBzaXplKQorICAgICAgICAgICAgICAgIHByaW50ZigiJWMiLCBjW2ldID49IDMyICYmIGNbaV0gPCAxMjcgPyBjW2ldIDogJy4nKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwcmludGYoIiAiKTsKKyAgICAgICAgfQorCisgICAgICAgIHByaW50ZigiXG4iKTsKKworICAgICAgICBjICs9IDE2OworCisgICAgICAgIGlmIChzaXplIDw9IDE2KQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgc2l6ZSAtPSAxNjsKKyAgICB9Cit9CisKK2ludCBtYWluKEFWQUhJX0dDQ19VTlVTRUQgaW50IGFyZ2MsIEFWQUhJX0dDQ19VTlVTRUQgY2hhciAqYXJndltdKSB7CisgICAgc3dfdGV4dF9yZWNvcmQgcjsKKyAgICBzd190ZXh0X3JlY29yZF9pdGVyYXRvciBpdDsKKyAgICBjaGFyIGtleVsyNTVdOworICAgIHVpbnQ4X3QgdmFsWzI1NV07CisgICAgc3dfdWxvbmcgdmFsX2xlbjsKKworICAgIEFTU0VSVF9TV19PS0FZKHN3X3RleHRfcmVjb3JkX2luaXQoJnIpKTsKKyAgICBBU1NFUlRfU1dfT0tBWShzd190ZXh0X3JlY29yZF9hZGRfc3RyaW5nKHIsICJmb289YmFyIikpOworICAgIEFTU0VSVF9TV19PS0FZKHN3X3RleHRfcmVjb3JkX2FkZF9zdHJpbmcociwgIndhbGRvPWJheiIpKTsKKyAgICBBU1NFUlRfU1dfT0tBWShzd190ZXh0X3JlY29yZF9hZGRfa2V5X2FuZF9zdHJpbmdfdmFsdWUociwgInF1dXgiLCAibmltcGYiKSk7CisgICAgQVNTRVJUX1NXX09LQVkoc3dfdGV4dF9yZWNvcmRfYWRkX2tleV9hbmRfYmluYXJ5X3ZhbHVlKHIsICJxdXV4IiwgKHZvaWQqKSAiXDBcMFwwXDAiLCA0KSk7CisKKyAgICBoZXhkdW1wKHN3X3RleHRfcmVjb3JkX2J5dGVzKHIpLCBzd190ZXh0X3JlY29yZF9sZW4ocikpOworCisgICAgQVNTRVJUX1NXX09LQVkoc3dfdGV4dF9yZWNvcmRfaXRlcmF0b3JfaW5pdCgmaXQsIHN3X3RleHRfcmVjb3JkX2J5dGVzKHIpLCBzd190ZXh0X3JlY29yZF9sZW4ocikpKTsKKworICAgIHdoaWxlIChzd190ZXh0X3JlY29yZF9pdGVyYXRvcl9uZXh0KGl0LCBrZXksIHZhbCwgJnZhbF9sZW4pID09IFNXX09LQVkpIHsKKyAgICAgICAgcHJpbnRmKCJrZXk9JXNcbiIsIGtleSk7CisgICAgICAgIGhleGR1bXAodmFsLCB2YWxfbGVuKTsKKyAgICB9CisKKyAgICBBU1NFUlRfU1dfT0tBWShzd190ZXh0X3JlY29yZF9pdGVyYXRvcl9maW5hKGl0KSk7CisKKworCisKKyAgICBBU1NFUlRfU1dfT0tBWShzd190ZXh0X3JlY29yZF9maW5hKHIpKTsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvbXBhdC1ob3dsL3RleHQuYyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtaG93bC90ZXh0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VmNGRmMwotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtaG93bC90ZXh0LmMKQEAgLTAsMCArMSwyNTkgQEAKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vc3RybHN0Lmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL21hbGxvYy5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9kb21haW4uaD4KKworI2luY2x1ZGUgImhvd2wuaCIKKyNpbmNsdWRlICJ3YXJuLmgiCisKK3N0cnVjdCBfc3dfdGV4dF9yZWNvcmQgeworICAgIEF2YWhpU3RyaW5nTGlzdCAqc3RybHN0OworICAgIHVpbnQ4X3QgKmJ1ZmZlcjsKKyAgICBzaXplX3QgYnVmZmVyX3NpemU7CisgICAgaW50IGJ1ZmZlcl92YWxpZDsKK307CisKKyNpZm5kZWYgSEFWRV9TVFJMQ1BZCisKK3N0YXRpYyBzaXplX3Qgc3RybGNweShjaGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBuKSB7CisgICAgYXNzZXJ0KGRlc3QpOworICAgIGFzc2VydChzcmMpOworCisgICAgaWYgKG4gPiAwKSB7CisgICAgICAgIHN0cm5jcHkoZGVzdCwgc3JjLCBuLTEpOworICAgICAgICBkZXN0W24tMV0gPSAwOworICAgIH0KKworICAgIHJldHVybiBzdHJsZW4oc3JjKTsKK30KKworI2VuZGlmCisKK3N3X3Jlc3VsdCBzd190ZXh0X3JlY29yZF9pbml0KHN3X3RleHRfcmVjb3JkICpzZWxmKSB7CisgICAgYXNzZXJ0KHNlbGYpOworCisgICAgQVZBSElfV0FSTl9MSU5LQUdFOworCisgICAgaWYgKCEoKnNlbGYgPSBhdmFoaV9uZXcoc3RydWN0IF9zd190ZXh0X3JlY29yZCwgMSkpKSB7CisgICAgICAgICpzZWxmID0gTlVMTDsKKyAgICAgICAgcmV0dXJuIFNXX0VfVU5LTk9XTjsKKyAgICB9CisKKyAgICAoKnNlbGYpLT5zdHJsc3QgPSBOVUxMOworICAgICgqc2VsZiktPmJ1ZmZlciA9IE5VTEw7CisgICAgKCpzZWxmKS0+YnVmZmVyX3NpemUgPSAwOworICAgICgqc2VsZiktPmJ1ZmZlcl92YWxpZCA9IDA7CisKKyAgICByZXR1cm4gU1dfT0tBWTsKK30KKworc3dfcmVzdWx0IHN3X3RleHRfcmVjb3JkX2ZpbmEoc3dfdGV4dF9yZWNvcmQgc2VsZikgeworICAgIGFzc2VydChzZWxmKTsKKworICAgIEFWQUhJX1dBUk5fTElOS0FHRTsKKworICAgIGF2YWhpX3N0cmluZ19saXN0X2ZyZWUoc2VsZi0+c3RybHN0KTsKKyAgICBhdmFoaV9mcmVlKHNlbGYtPmJ1ZmZlcik7CisgICAgYXZhaGlfZnJlZShzZWxmKTsKKyAgICByZXR1cm4gU1dfT0tBWTsKK30KKworc3dfcmVzdWx0IHN3X3RleHRfcmVjb3JkX2FkZF9zdHJpbmcoCisgICAgc3dfdGV4dF9yZWNvcmQgc2VsZiwKKyAgICBzd19jb25zdF9zdHJpbmcgc3RyaW5nKSB7CisKKyAgICBBdmFoaVN0cmluZ0xpc3QgKm47CisKKyAgICBhc3NlcnQoc2VsZik7CisgICAgYXNzZXJ0KHN0cmluZyk7CisKKyAgICBBVkFISV9XQVJOX0xJTktBR0U7CisKKyAgICBpZiAoIShuID0gYXZhaGlfc3RyaW5nX2xpc3RfYWRkKHNlbGYtPnN0cmxzdCwgc3RyaW5nKSkpCisgICAgICAgIHJldHVybiBTV19FX1VOS05PV047CisKKyAgICBzZWxmLT5zdHJsc3QgPSBuOworICAgIHNlbGYtPmJ1ZmZlcl92YWxpZCA9IDA7CisgICAgcmV0dXJuIFNXX09LQVk7Cit9CisKK3N3X3Jlc3VsdCBzd190ZXh0X3JlY29yZF9hZGRfa2V5X2FuZF9zdHJpbmdfdmFsdWUoCisgICAgc3dfdGV4dF9yZWNvcmQgc2VsZiwKKyAgICBzd19jb25zdF9zdHJpbmcga2V5LAorICAgIHN3X2NvbnN0X3N0cmluZyB2YWwpIHsKKworICAgIEF2YWhpU3RyaW5nTGlzdCAqbjsKKworICAgIGFzc2VydChzZWxmKTsKKyAgICBhc3NlcnQoa2V5KTsKKworICAgIEFWQUhJX1dBUk5fTElOS0FHRTsKKworICAgIGlmICghKG4gPSBhdmFoaV9zdHJpbmdfbGlzdF9hZGRfcGFpcihzZWxmLT5zdHJsc3QsIGtleSwgdmFsKSkpCisgICAgICAgIHJldHVybiBTV19FX1VOS05PV047CisKKyAgICBzZWxmLT5zdHJsc3QgPSBuOworICAgIHNlbGYtPmJ1ZmZlcl92YWxpZCA9IDA7CisgICAgcmV0dXJuIFNXX09LQVk7Cit9CisKK3N3X3Jlc3VsdCBzd190ZXh0X3JlY29yZF9hZGRfa2V5X2FuZF9iaW5hcnlfdmFsdWUoCisgICAgc3dfdGV4dF9yZWNvcmQgc2VsZiwKKyAgICBzd19jb25zdF9zdHJpbmcga2V5LAorICAgIHN3X29jdGV0cyB2YWwsCisgICAgc3dfdWludDMyIGxlbikgeworCisgICAgQXZhaGlTdHJpbmdMaXN0ICpuOworCisgICAgYXNzZXJ0KHNlbGYpOworICAgIGFzc2VydChrZXkpOworICAgIGFzc2VydChsZW4gfHwgIXZhbCk7CisKKyAgICBBVkFISV9XQVJOX0xJTktBR0U7CisKKyAgICBpZiAoIShuID0gYXZhaGlfc3RyaW5nX2xpc3RfYWRkX3BhaXJfYXJiaXRyYXJ5KHNlbGYtPnN0cmxzdCwga2V5LCB2YWwsIGxlbikpKQorICAgICAgICByZXR1cm4gU1dfRV9VTktOT1dOOworCisgICAgc2VsZi0+c3RybHN0ID0gbjsKKyAgICBzZWxmLT5idWZmZXJfdmFsaWQgPSAwOworICAgIHJldHVybiBTV19PS0FZOworfQorCitzdGF0aWMgaW50IHJlYnVpbGQoc3dfdGV4dF9yZWNvcmQgc2VsZikgeworICAgIGFzc2VydChzZWxmKTsKKworICAgIGlmIChzZWxmLT5idWZmZXJfdmFsaWQpCisgICAgICAgIHJldHVybiAwOworCisgICAgc2VsZi0+YnVmZmVyX3NpemUgPSBhdmFoaV9zdHJpbmdfbGlzdF9zZXJpYWxpemUoc2VsZi0+c3RybHN0LCBOVUxMLCAwKTsKKworICAgIGlmICghKHNlbGYtPmJ1ZmZlciA9IGF2YWhpX3JlYWxsb2Moc2VsZi0+YnVmZmVyLCBzZWxmLT5idWZmZXJfc2l6ZSArIDEpKSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgYXZhaGlfc3RyaW5nX2xpc3Rfc2VyaWFsaXplKHNlbGYtPnN0cmxzdCwgc2VsZi0+YnVmZmVyLCBzZWxmLT5idWZmZXJfc2l6ZSk7CisgICAgc2VsZi0+YnVmZmVyX3ZhbGlkID0gMTsKKworICAgIHJldHVybiAwOworfQorCitzd19vY3RldHMgc3dfdGV4dF9yZWNvcmRfYnl0ZXMoc3dfdGV4dF9yZWNvcmQgc2VsZikgeworICAgIGFzc2VydChzZWxmKTsKKworICAgIEFWQUhJX1dBUk5fTElOS0FHRTsKKworICAgIGlmIChyZWJ1aWxkKHNlbGYpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gc2VsZi0+YnVmZmVyOworfQorCitzd191aW50MzIgc3dfdGV4dF9yZWNvcmRfbGVuKHN3X3RleHRfcmVjb3JkIHNlbGYpIHsKKyAgICBhc3NlcnQoc2VsZik7CisKKyAgICBBVkFISV9XQVJOX0xJTktBR0U7CisKKyAgICBpZiAocmVidWlsZChzZWxmKSA8IDApCisgICAgICAgIHJldHVybiAodWludDMyX3QpIC0xOworCisgICAgcmV0dXJuIHNlbGYtPmJ1ZmZlcl9zaXplOworfQorCitzdHJ1Y3QgX3N3X3RleHRfcmVjb3JkX2l0ZXJhdG9yIHsKKyAgICBBdmFoaVN0cmluZ0xpc3QgKnN0cmxzdCwgKmluZGV4OworCit9OworCitzd19yZXN1bHQgc3dfdGV4dF9yZWNvcmRfaXRlcmF0b3JfaW5pdCgKKyAgICBzd190ZXh0X3JlY29yZF9pdGVyYXRvciAqIHNlbGYsCisgICAgc3dfb2N0ZXRzIHRleHRfcmVjb3JkLAorICAgIHN3X3VpbnQzMiB0ZXh0X3JlY29yZF9sZW4pIHsKKworICAgIEF2YWhpU3RyaW5nTGlzdCAqdHh0OworICAgIGFzc2VydChzZWxmKTsKKworICAgIEFWQUhJX1dBUk5fTElOS0FHRTsKKworICAgIGlmICghKCpzZWxmID0gYXZhaGlfbmV3KHN0cnVjdCBfc3dfdGV4dF9yZWNvcmRfaXRlcmF0b3IsIDEpKSkgeworICAgICAgICAqc2VsZiA9IE5VTEw7CisgICAgICAgIHJldHVybiBTV19FX1VOS05PV047CisgICAgfQorCisgICAgaWYgKGF2YWhpX3N0cmluZ19saXN0X3BhcnNlKHRleHRfcmVjb3JkLCB0ZXh0X3JlY29yZF9sZW4sICZ0eHQpIDwgMCkgeworICAgICAgICBhdmFoaV9mcmVlKCpzZWxmKTsKKyAgICAgICAgKnNlbGYgPSBOVUxMOworICAgICAgICByZXR1cm4gU1dfRV9VTktOT1dOOworICAgIH0KKworICAgICgqc2VsZiktPmluZGV4ID0gKCpzZWxmKS0+c3RybHN0ID0gYXZhaGlfc3RyaW5nX2xpc3RfcmV2ZXJzZSh0eHQpOworCisgICAgcmV0dXJuIFNXX09LQVk7Cit9CisKK3N3X3Jlc3VsdCBzd190ZXh0X3JlY29yZF9pdGVyYXRvcl9maW5hKHN3X3RleHRfcmVjb3JkX2l0ZXJhdG9yIHNlbGYpIHsKKyAgICBhc3NlcnQoc2VsZik7CisKKyAgICBBVkFISV9XQVJOX0xJTktBR0U7CisKKyAgICBhdmFoaV9zdHJpbmdfbGlzdF9mcmVlKHNlbGYtPnN0cmxzdCk7CisgICAgYXZhaGlfZnJlZShzZWxmKTsKKworICAgIHJldHVybiBTV19PS0FZOworfQorCitzd19yZXN1bHQgc3dfdGV4dF9yZWNvcmRfaXRlcmF0b3JfbmV4dCgKKyAgICBzd190ZXh0X3JlY29yZF9pdGVyYXRvciBzZWxmLAorICAgIGNoYXIga2V5W1NXX1RFWFRfUkVDT1JEX01BWF9MRU5dLAorICAgIHN3X3VpbnQ4IHZhbFtTV19URVhUX1JFQ09SRF9NQVhfTEVOXSwKKyAgICBzd191aW50MzIgKiB2YWxfbGVuKSB7CisKKyAgICBjaGFyICpta2V5ID0gTlVMTCwgKm12YWx1ZSA9IE5VTEw7CisgICAgc2l6ZV90IG1zaXplID0gMDsKKworICAgIGFzc2VydChzZWxmKTsKKyAgICBhc3NlcnQoa2V5KTsKKworICAgIEFWQUhJX1dBUk5fTElOS0FHRTsKKworICAgIGlmICghc2VsZi0+aW5kZXgpCisgICAgICAgIHJldHVybiBTV19FX1VOS05PV047CisKKyAgICBpZiAoYXZhaGlfc3RyaW5nX2xpc3RfZ2V0X3BhaXIoc2VsZi0+aW5kZXgsICZta2V5LCAmbXZhbHVlLCAmbXNpemUpIDwgMCkKKyAgICAgICAgcmV0dXJuIFNXX0VfVU5LTk9XTjsKKworICAgIHN0cmxjcHkoa2V5LCBta2V5LCBTV19URVhUX1JFQ09SRF9NQVhfTEVOKTsKKyAgICBtZW1zZXQodmFsLCAwLCBTV19URVhUX1JFQ09SRF9NQVhfTEVOKTsKKyAgICBtZW1jcHkodmFsLCBtdmFsdWUsIG1zaXplKTsKKyAgICAqdmFsX2xlbiA9IG1zaXplOworCisgICAgYXZhaGlfZnJlZShta2V5KTsKKyAgICBhdmFoaV9mcmVlKG12YWx1ZSk7CisKKyAgICBzZWxmLT5pbmRleCA9IHNlbGYtPmluZGV4LT5uZXh0OworCisgICAgcmV0dXJuIFNXX09LQVk7Cit9CisKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtaG93bC91bnN1cHBvcnRlZC5jIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbXBhdC1ob3dsL3Vuc3VwcG9ydGVkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY0NDBhZgotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtaG93bC91bnN1cHBvcnRlZC5jCkBAIC0wLDAgKzEsMTAxOSBAQAorLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vZ2NjbWFjcm8uaD4KKworI2luY2x1ZGUgImhvd2wuaCIKKyNpbmNsdWRlICJ3YXJuLmgiCisKK0FWQUhJX0dDQ19OT1JFVFVSTgorc3dfc3RyaW5nIHN3X3N0cmR1cChBVkFISV9HQ0NfVU5VU0VEIHN3X2NvbnN0X3N0cmluZyBzdHIpIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEX0FCT1JUOworfQorCitBVkFISV9HQ0NfTk9SRVRVUk4KK3N3X29wYXF1ZSBfc3dfZGVidWdfbWFsbG9jKAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfc2l6ZV90IHNpemUsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19jb25zdF9zdHJpbmcgZnVuY3Rpb24sCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19jb25zdF9zdHJpbmcgZmlsZSwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X3VpbnQzMiBsaW5lKSB7CisgICAgQVZBSElfV0FSTl9VTlNVUFBPUlRFRF9BQk9SVDsKK30KKworQVZBSElfR0NDX05PUkVUVVJOCitzd19vcGFxdWUgX3N3X2RlYnVnX3JlYWxsb2MoCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19vcGFxdWVfdCBtZW0sCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19zaXplX3Qgc2l6ZSwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2NvbnN0X3N0cmluZyBmdW5jdGlvbiwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2NvbnN0X3N0cmluZyBmaWxlLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfdWludDMyIGxpbmUpIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEX0FCT1JUOworfQorCit2b2lkIF9zd19kZWJ1Z19mcmVlKAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfb3BhcXVlX3QgbWVtLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfY29uc3Rfc3RyaW5nIGZ1bmN0aW9uLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfY29uc3Rfc3RyaW5nIGZpbGUsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd191aW50MzIgbGluZSkgeworICAgIEFWQUhJX1dBUk5fVU5TVVBQT1JURUQ7Cit9CisKK0FWQUhJX0dDQ19OT1JFVFVSTgorc3dfY29uc3Rfc3RyaW5nIHN3X3N0cmVycm9yKC8qIGhvd2wgc3Vja3MgKi8pIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEX0FCT1JUOworfQorCitzd19yZXN1bHQgc3dfdGltZXJfaW5pdChBVkFISV9HQ0NfVU5VU0VEIHN3X3RpbWVyICogc2VsZikgeworICAgIEFWQUhJX1dBUk5fVU5TVVBQT1JURUQ7CisgICAgcmV0dXJuIFNXX0VfTk9fSU1QTDsKK30KKworc3dfcmVzdWx0IHN3X3RpbWVyX2ZpbmEoQVZBSElfR0NDX1VOVVNFRCBzd190aW1lciBzZWxmKSB7CisgICAgQVZBSElfV0FSTl9VTlNVUFBPUlRFRDsKKyAgICByZXR1cm4gU1dfRV9OT19JTVBMOworfQorCitzd19yZXN1bHQgc3dfdGltZV9pbml0KEFWQUhJX0dDQ19VTlVTRUQgc3dfdGltZSAqIHNlbGYpIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEOworICAgIHJldHVybiBTV19FX05PX0lNUEw7Cit9CisKK3N3X3Jlc3VsdCBzd190aW1lX2luaXRfbm93KEFWQUhJX0dDQ19VTlVTRUQgc3dfdGltZSAqIHNlbGYpIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEOworICAgIHJldHVybiBTV19FX05PX0lNUEw7Cit9CisKK3N3X3Jlc3VsdCBzd190aW1lX2ZpbmEoQVZBSElfR0NDX1VOVVNFRCBzd190aW1lIHNlbGYpIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEOworICAgIHJldHVybiBTV19FX05PX0lNUEw7Cit9CisKK0FWQUhJX0dDQ19OT1JFVFVSTgorc3dfdGltZSBzd190aW1lX2FkZCgKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X3RpbWUgc2VsZiwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X3RpbWUgeSkgeworICAgIEFWQUhJX1dBUk5fVU5TVVBQT1JURURfQUJPUlQ7Cit9CisKK0FWQUhJX0dDQ19OT1JFVFVSTgorc3dfdGltZSBzd190aW1lX3N1YigKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X3RpbWUgc2VsZiwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X3RpbWUgeSkgeworICAgIEFWQUhJX1dBUk5fVU5TVVBQT1JURURfQUJPUlQ7Cit9CisKK0FWQUhJX0dDQ19OT1JFVFVSTgorc3dfaW50MzIgc3dfdGltZV9jbXAoCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd190aW1lIHNlbGYsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd190aW1lIHkpIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEX0FCT1JUOworfQorCitzd19yZXN1bHQgc3dfc2FsdF9pbml0KAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfc2FsdCAqIHNlbGYsCisgICAgQVZBSElfR0NDX1VOVVNFRCBpbnQgYXJnYywKKyAgICBBVkFISV9HQ0NfVU5VU0VEIGNoYXIgKiogYXJndikgeworICAgIEFWQUhJX1dBUk5fVU5TVVBQT1JURUQ7CisgICAgcmV0dXJuIFNXX0VfTk9fSU1QTDsKK30KKworc3dfcmVzdWx0IHN3X3NhbHRfZmluYShBVkFISV9HQ0NfVU5VU0VEIHN3X3NhbHQgc2VsZikgeworICAgIEFWQUhJX1dBUk5fVU5TVVBQT1JURUQ7CisgICAgcmV0dXJuIFNXX0VfTk9fSU1QTDsKK30KKworc3dfcmVzdWx0IHN3X3NhbHRfcmVnaXN0ZXJfc29ja2V0KAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfc2FsdCBzZWxmLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3RydWN0IF9zd19zb2NrZXQgKiBfc29ja2V0LAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfc29ja2V0X2V2ZW50IGV2ZW50cywKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X3NvY2tldF9oYW5kbGVyIGhhbmRsZXIsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19zb2NrZXRfaGFuZGxlcl9mdW5jIGZ1bmMsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19vcGFxdWUgZXh0cmEpIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEOworICAgIHJldHVybiBTV19FX05PX0lNUEw7Cit9CisKK3N3X3Jlc3VsdCBzd19zYWx0X3VucmVnaXN0ZXJfc29ja2V0KAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfc2FsdCBzZWxmLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3RydWN0IF9zd19zb2NrZXQgKiBfc29ja2V0KSB7CisgICAgQVZBSElfV0FSTl9VTlNVUFBPUlRFRDsKKyAgICByZXR1cm4gU1dfRV9OT19JTVBMOworfQorCisKK3N3X3Jlc3VsdCBzd19zYWx0X3JlZ2lzdGVyX3RpbWVyKAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfc2FsdCBzZWxmLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3RydWN0IF9zd190aW1lciAqIHRpbWVyLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfdGltZSB0aW1lb3V0LAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfdGltZXJfaGFuZGxlciBoYW5kbGVyLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfdGltZXJfaGFuZGxlcl9mdW5jIGZ1bmMsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19vcGFxdWUgZXh0cmEpIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEOworICAgIHJldHVybiBTV19FX05PX0lNUEw7Cit9CisKK3N3X3Jlc3VsdCBzd19zYWx0X3VucmVnaXN0ZXJfdGltZXIoCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19zYWx0IHNlbGYsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzdHJ1Y3QgX3N3X3RpbWVyICogdGltZXIpIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEOworICAgIHJldHVybiBTV19FX05PX0lNUEw7Cit9CisKK3N3X3Jlc3VsdCBzd19zYWx0X3JlZ2lzdGVyX25ldHdvcmtfaW50ZXJmYWNlKAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfc2FsdCBzZWxmLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3RydWN0IF9zd19uZXR3b3JrX2ludGVyZmFjZSAqIG5ldGlmLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfbmV0d29ya19pbnRlcmZhY2VfaGFuZGxlciBoYW5kbGVyLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfbmV0d29ya19pbnRlcmZhY2VfaGFuZGxlcl9mdW5jIGZ1bmMsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19vcGFxdWUgZXh0cmEpIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEOworICAgIHJldHVybiBTV19FX05PX0lNUEw7Cit9CisKK3N3X3Jlc3VsdCBzd19zYWx0X3VucmVnaXN0ZXJfbmV0d29ya19pbnRlcmZhY2VfaGFuZGxlcihBVkFISV9HQ0NfVU5VU0VEIHN3X3NhbHQgc2VsZikgeworICAgIEFWQUhJX1dBUk5fVU5TVVBQT1JURUQ7CisgICAgcmV0dXJuIFNXX0VfTk9fSU1QTDsKK30KKworc3dfcmVzdWx0IHN3X3NhbHRfcmVnaXN0ZXJfc2lnbmFsKAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfc2FsdCBzZWxmLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3RydWN0IF9zd19zaWduYWwgKiBfc2lnbmFsLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfc2lnbmFsX2hhbmRsZXIgaGFuZGxlciwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X3NpZ25hbF9oYW5kbGVyX2Z1bmMgZnVuYywKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X29wYXF1ZSBleHRyYSkgeworCisgICAgQVZBSElfV0FSTl9VTlNVUFBPUlRFRDsKKyAgICByZXR1cm4gU1dfRV9OT19JTVBMOworfQorCitzd19yZXN1bHQgc3dfc2FsdF91bnJlZ2lzdGVyX3NpZ25hbCgKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X3NhbHQgc2VsZiwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN0cnVjdCBfc3dfc2lnbmFsICogX3NpZ25hbCkgeworCisgICAgQVZBSElfV0FSTl9VTlNVUFBPUlRFRDsKKyAgICByZXR1cm4gU1dfRV9OT19JTVBMOworfQorCit2b2lkIHN3X3ByaW50X2Fzc2VydCgKKyAgICBBVkFISV9HQ0NfVU5VU0VEIGludCBjb2RlLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfY29uc3Rfc3RyaW5nIGFzc2VydF9zdHJpbmcsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19jb25zdF9zdHJpbmcgZmlsZSwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2NvbnN0X3N0cmluZyBmdW5jLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgaW50IGxpbmUpIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEOworfQorCit2b2lkIHN3X3ByaW50X2RlYnVnKAorICAgIEFWQUhJX0dDQ19VTlVTRUQgaW50IGxldmVsLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfY29uc3Rfc3RyaW5nIGZvcm1hdCwKKyAgICAuLi4pIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEOworfQorCitzd19yZXN1bHQgc3dfdGNwX3NvY2tldF9pbml0KEFWQUhJX0dDQ19VTlVTRUQgc3dfc29ja2V0ICogc2VsZikgeworICAgIEFWQUhJX1dBUk5fVU5TVVBQT1JURUQ7CisgICAgcmV0dXJuIFNXX0VfTk9fSU1QTDsKK30KKworc3dfcmVzdWx0IHN3X3RjcF9zb2NrZXRfaW5pdF93aXRoX2Rlc2MoCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19zb2NrZXQgKiBzZWxmLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfc29ja2Rlc2NfdCBkZXNjKSB7CisgICAgQVZBSElfV0FSTl9VTlNVUFBPUlRFRDsKKyAgICByZXR1cm4gU1dfRV9OT19JTVBMOworfQorCitzd19yZXN1bHQgc3dfdWRwX3NvY2tldF9pbml0KEFWQUhJX0dDQ19VTlVTRUQgc3dfc29ja2V0ICogc2VsZikgeworICAgIEFWQUhJX1dBUk5fVU5TVVBQT1JURUQ7CisgICAgcmV0dXJuIFNXX0VfTk9fSU1QTDsKK30KKworc3dfcmVzdWx0IHN3X211bHRpY2FzdF9zb2NrZXRfaW5pdChBVkFISV9HQ0NfVU5VU0VEIHN3X3NvY2tldCAqIHNlbGYpIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEOworICAgIHJldHVybiBTV19FX05PX0lNUEw7Cit9CisKK3N3X3Jlc3VsdCBzd19zb2NrZXRfZmluYShBVkFISV9HQ0NfVU5VU0VEIHN3X3NvY2tldCBzZWxmKSB7CisgICAgQVZBSElfV0FSTl9VTlNVUFBPUlRFRDsKKyAgICByZXR1cm4gU1dfRV9OT19JTVBMOworfQorCitzd19yZXN1bHQgc3dfc29ja2V0X2JpbmQoCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19zb2NrZXQgc2VsZiwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2lwdjRfYWRkcmVzcyBhZGRyZXNzLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfcG9ydCBwb3J0KSB7CisgICAgQVZBSElfV0FSTl9VTlNVUFBPUlRFRDsKKyAgICByZXR1cm4gU1dfRV9OT19JTVBMOworfQorCitzd19yZXN1bHQgc3dfc29ja2V0X2pvaW5fbXVsdGljYXN0X2dyb3VwKAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfc29ja2V0IHNlbGYsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19pcHY0X2FkZHJlc3MgbG9jYWxfYWRkcmVzcywKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2lwdjRfYWRkcmVzcyBtdWx0aWNhc3RfYWRkcmVzcywKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X3VpbnQzMiB0dGwpIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEOworICAgIHJldHVybiBTV19FX05PX0lNUEw7Cit9CisKK3N3X3Jlc3VsdCBzd19zb2NrZXRfbGVhdmVfbXVsdGljYXN0X2dyb3VwKEFWQUhJX0dDQ19VTlVTRUQgc3dfc29ja2V0IHNlbGYpIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEOworICAgIHJldHVybiBTV19FX05PX0lNUEw7Cit9CisKK3N3X3Jlc3VsdCBzd19zb2NrZXRfbGlzdGVuKAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfc29ja2V0IHNlbGYsCisgICAgQVZBSElfR0NDX1VOVVNFRCBpbnQgcXNpemUpIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEOworICAgIHJldHVybiBTV19FX05PX0lNUEw7Cit9CisKK3N3X3Jlc3VsdCBzd19zb2NrZXRfY29ubmVjdCgKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X3NvY2tldCBzZWxmLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfaXB2NF9hZGRyZXNzIGFkZHJlc3MsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19wb3J0IHBvcnQpIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEOworICAgIHJldHVybiBTV19FX05PX0lNUEw7Cit9CisKK3N3X3Jlc3VsdCBzd19zb2NrZXRfYWNjZXB0KAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfc29ja2V0IHNlbGYsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19zb2NrZXQgKiBfc29ja2V0KSB7CisgICAgQVZBSElfV0FSTl9VTlNVUFBPUlRFRDsKKyAgICByZXR1cm4gU1dfRV9OT19JTVBMOworfQorCitzd19yZXN1bHQgc3dfc29ja2V0X3NlbmQoCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19zb2NrZXQgc2VsZiwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X29jdGV0cyBidWZmZXIsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19zaXplX3QgbGVuLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfc2l6ZV90ICogYnl0ZXNXcml0dGVuKSB7CisgICAgQVZBSElfV0FSTl9VTlNVUFBPUlRFRDsKKyAgICByZXR1cm4gU1dfRV9OT19JTVBMOworfQorCitzd19yZXN1bHQgc3dfc29ja2V0X3NlbmR0bygKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X3NvY2tldCBzZWxmLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfb2N0ZXRzIGJ1ZmZlciwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X3NpemVfdCBsZW4sCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19zaXplX3QgKiBieXRlc1dyaXR0ZW4sCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19pcHY0X2FkZHJlc3MgdG8sCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19wb3J0IHBvcnQpIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEOworICAgIHJldHVybiBTV19FX05PX0lNUEw7Cit9CisKK3N3X3Jlc3VsdCBzd19zb2NrZXRfcmVjdigKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X3NvY2tldCBzZWxmLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfb2N0ZXRzIGJ1ZmZlciwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X3NpemVfdCBtYXgsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19zaXplX3QgKiBsZW4pIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEOworICAgIHJldHVybiBTV19FX05PX0lNUEw7Cit9CisKK3N3X3Jlc3VsdCBzd19zb2NrZXRfcmVjdmZyb20oCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19zb2NrZXQgc2VsZiwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X29jdGV0cyBidWZmZXIsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19zaXplX3QgbWF4LAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfc2l6ZV90ICogbGVuLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfaXB2NF9hZGRyZXNzICogZnJvbSwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X3BvcnQgKiBwb3J0LAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfaXB2NF9hZGRyZXNzICogZGVzdCwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X3VpbnQzMiAqIGludGVyZmFjZV9pbmRleCkgeworICAgIEFWQUhJX1dBUk5fVU5TVVBQT1JURUQ7CisgICAgcmV0dXJuIFNXX0VfTk9fSU1QTDsKK30KKworc3dfcmVzdWx0IHN3X3NvY2tldF9zZXRfYmxvY2tpbmdfbW9kZSgKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X3NvY2tldCBzZWxmLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfYm9vbCBibG9ja2luZ19tb2RlKSB7CisgICAgQVZBSElfV0FSTl9VTlNVUFBPUlRFRDsKKyAgICByZXR1cm4gU1dfRV9OT19JTVBMOworfQorCitzd19yZXN1bHQgc3dfc29ja2V0X3NldF9vcHRpb25zKAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfc29ja2V0IHNlbGYsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19zb2NrZXRfb3B0aW9ucyBvcHRpb25zKSB7CisgICAgQVZBSElfV0FSTl9VTlNVUFBPUlRFRDsKKyAgICByZXR1cm4gU1dfRV9OT19JTVBMOworfQorCitBVkFISV9HQ0NfTk9SRVRVUk4KK3N3X2lwdjRfYWRkcmVzcyBzd19zb2NrZXRfaXB2NF9hZGRyZXNzKEFWQUhJX0dDQ19VTlVTRUQgc3dfc29ja2V0IHNlbGYpIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEX0FCT1JUOworfQorCitBVkFISV9HQ0NfTk9SRVRVUk4KK3N3X3BvcnQgc3dfc29ja2V0X3BvcnQoQVZBSElfR0NDX1VOVVNFRCBzd19zb2NrZXQgc2VsZikgeworICAgIEFWQUhJX1dBUk5fVU5TVVBQT1JURURfQUJPUlQ7Cit9CisKK0FWQUhJX0dDQ19OT1JFVFVSTgorc3dfc29ja2Rlc2NfdCBzd19zb2NrZXRfZGVzYyhBVkFISV9HQ0NfVU5VU0VEIHN3X3NvY2tldCBzZWxmKSB7CisgICAgQVZBSElfV0FSTl9VTlNVUFBPUlRFRF9BQk9SVDsKK30KKworc3dfcmVzdWx0IHN3X3NvY2tldF9jbG9zZShBVkFISV9HQ0NfVU5VU0VEIHN3X3NvY2tldCBzZWxmKSB7CisgICAgQVZBSElfV0FSTl9VTlNVUFBPUlRFRDsKKyAgICByZXR1cm4gU1dfRV9OT19JTVBMOworfQorCitzd19yZXN1bHQgc3dfc29ja2V0X29wdGlvbnNfaW5pdChBVkFISV9HQ0NfVU5VU0VEIHN3X3NvY2tldF9vcHRpb25zICogc2VsZikgeworICAgIEFWQUhJX1dBUk5fVU5TVVBQT1JURUQ7CisgICAgcmV0dXJuIFNXX0VfTk9fSU1QTDsKK30KKworc3dfcmVzdWx0IHN3X3NvY2tldF9vcHRpb25zX2ZpbmEoQVZBSElfR0NDX1VOVVNFRCBzd19zb2NrZXRfb3B0aW9ucyBzZWxmKSB7CisgICAgQVZBSElfV0FSTl9VTlNVUFBPUlRFRDsKKyAgICByZXR1cm4gU1dfRV9OT19JTVBMOworfQorCitzd19yZXN1bHQgc3dfc29ja2V0X29wdGlvbnNfc2V0X2RlYnVnKAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfc29ja2V0X29wdGlvbnMgc2VsZiwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2Jvb2wgdmFsKSB7CisgICAgQVZBSElfV0FSTl9VTlNVUFBPUlRFRDsKKyAgICByZXR1cm4gU1dfRV9OT19JTVBMOworfQorCitzd19yZXN1bHQgc3dfc29ja2V0X29wdGlvbnNfc2V0X25vZGVsYXkoCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19zb2NrZXRfb3B0aW9ucyBzZWxmLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfYm9vbCB2YWwpIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEOworICAgIHJldHVybiBTV19FX05PX0lNUEw7Cit9CisKK3N3X3Jlc3VsdCBzd19zb2NrZXRfb3B0aW9uc19zZXRfZG9udHJvdXRlKAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfc29ja2V0X29wdGlvbnMgc2VsZiwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2Jvb2wgdmFsKSB7CisgICAgQVZBSElfV0FSTl9VTlNVUFBPUlRFRDsKKyAgICByZXR1cm4gU1dfRV9OT19JTVBMOworfQorCitzd19yZXN1bHQgc3dfc29ja2V0X29wdGlvbnNfc2V0X2tlZXBhbGl2ZSgKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X3NvY2tldF9vcHRpb25zIHNlbGYsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19ib29sIHZhbCkgeworICAgIEFWQUhJX1dBUk5fVU5TVVBQT1JURUQ7CisgICAgcmV0dXJuIFNXX0VfTk9fSU1QTDsKK30KKworc3dfcmVzdWx0IHN3X3NvY2tldF9vcHRpb25zX3NldF9saW5nZXIoCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19zb2NrZXRfb3B0aW9ucyBzZWxmLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfYm9vbCBvbm9mZiwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X3VpbnQzMiBsaW5nZXIpIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEOworICAgIHJldHVybiBTV19FX05PX0lNUEw7Cit9CisKK3N3X3Jlc3VsdCBzd19zb2NrZXRfb3B0aW9uc19zZXRfcmV1c2VhZGRyKAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfc29ja2V0X29wdGlvbnMgc2VsZiwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2Jvb2wgdmFsKSB7CisgICAgQVZBSElfV0FSTl9VTlNVUFBPUlRFRDsKKyAgICByZXR1cm4gU1dfRV9OT19JTVBMOworfQorCitzd19yZXN1bHQgc3dfc29ja2V0X29wdGlvbnNfc2V0X3JjdmJ1ZigKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X3NvY2tldF9vcHRpb25zIHNlbGYsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd191aW50MzIgdmFsKSB7CisgICAgQVZBSElfV0FSTl9VTlNVUFBPUlRFRDsKKyAgICByZXR1cm4gU1dfRV9OT19JTVBMOworfQorCitzd19yZXN1bHQgc3dfc29ja2V0X29wdGlvbnNfc2V0X3NuZGJ1ZigKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X3NvY2tldF9vcHRpb25zIHNlbGYsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd191aW50MzIgdmFsKSB7CisgICAgQVZBSElfV0FSTl9VTlNVUFBPUlRFRDsKKyAgICByZXR1cm4gU1dfRV9OT19JTVBMOworfQorCitBVkFISV9HQ0NfTk9SRVRVUk4KK2ludCBzd19zb2NrZXRfZXJyb3JfY29kZSh2b2lkKSB7CisgICAgQVZBSElfV0FSTl9VTlNVUFBPUlRFRF9BQk9SVDsKK30KKworc3dfcmVzdWx0IHN3X2NvcmJ5X29yYl9pbml0KAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfY29yYnlfb3JiICogc2VsZiwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X3NhbHQgc2FsdCwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIGNvbnN0IHN3X2NvcmJ5X29yYl9jb25maWcgKiBjb25maWcsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19jb3JieV9vcmJfb2JzZXJ2ZXIgb2JzZXJ2ZXIsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19jb3JieV9vcmJfb2JzZXJ2ZXJfZnVuYyBmdW5jLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfb3BhcXVlX3QgZXh0cmEpIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEOworICAgIHJldHVybiBTV19FX05PX0lNUEw7Cit9CisKK3N3X3Jlc3VsdCBzd19jb3JieV9vcmJfZmluYShBVkFISV9HQ0NfVU5VU0VEIHN3X2NvcmJ5X29yYiBzZWxmKSB7CisgICAgQVZBSElfV0FSTl9VTlNVUFBPUlRFRDsKKyAgICByZXR1cm4gU1dfRV9OT19JTVBMOworfQorCitzd19yZXN1bHQgc3dfY29yYnlfb3JiX3JlZ2lzdGVyX3NlcnZhbnQoCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19jb3JieV9vcmIgc2VsZiwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2NvcmJ5X3NlcnZhbnQgc2VydmFudCwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2NvcmJ5X3NlcnZhbnRfY2IgY2IsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19jb25zdF9zdHJpbmcgb2lkLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3RydWN0IF9zd19jb3JieV9vYmplY3QgKiogb2JqZWN0LAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfY29uc3Rfc3RyaW5nIHByb3RvY29sX25hbWUpIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEOworICAgIHJldHVybiBTV19FX05PX0lNUEw7Cit9CisKK3N3X3Jlc3VsdCBzd19jb3JieV9vcmJfdW5yZWdpc3Rlcl9zZXJ2YW50KAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfY29yYnlfb3JiIHNlbGYsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19jb25zdF9zdHJpbmcgb2lkKSB7CisgICAgQVZBSElfV0FSTl9VTlNVUFBPUlRFRDsKKyAgICByZXR1cm4gU1dfRV9OT19JTVBMOworfQorCitzd19yZXN1bHQgc3dfY29yYnlfb3JiX3JlZ2lzdGVyX2JpZGlyZWN0aW9uYWxfb2JqZWN0KAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfY29yYnlfb3JiIHNlbGYsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzdHJ1Y3QgX3N3X2NvcmJ5X29iamVjdCAqIG9iamVjdCkgeworICAgIEFWQUhJX1dBUk5fVU5TVVBQT1JURUQ7CisgICAgcmV0dXJuIFNXX0VfTk9fSU1QTDsKK30KKworc3dfcmVzdWx0IHN3X2NvcmJ5X29yYl9yZWdpc3Rlcl9jaGFubmVsKAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfY29yYnlfb3JiIHNlbGYsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzdHJ1Y3QgX3N3X2NvcmJ5X2NoYW5uZWwgKiBjaGFubmVsKSB7CisgICAgQVZBSElfV0FSTl9VTlNVUFBPUlRFRDsKKyAgICByZXR1cm4gU1dfRV9OT19JTVBMOworfQorCitBVkFISV9HQ0NfTk9SRVRVUk4KK3N3X2NvcmJ5X29yYl9kZWxlZ2F0ZSBzd19jb3JieV9vcmJfZ2V0X2RlbGVnYXRlKEFWQUhJX0dDQ19VTlVTRUQgc3dfY29yYnlfb3JiIHNlbGYpIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEX0FCT1JUOworfQorCitzd19yZXN1bHQgc3dfY29yYnlfb3JiX3NldF9kZWxlZ2F0ZSgKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2NvcmJ5X29yYiBzZWxmLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfY29yYnlfb3JiX2RlbGVnYXRlIGRlbGVnYXRlKSB7CisgICAgQVZBSElfV0FSTl9VTlNVUFBPUlRFRDsKKyAgICByZXR1cm4gU1dfRV9OT19JTVBMOworfQorCitzd19yZXN1bHQgc3dfY29yYnlfb3JiX3NldF9vYnNlcnZlcigKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2NvcmJ5X29yYiBzZWxmLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfY29yYnlfb3JiX29ic2VydmVyIG9ic2VydmVyLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfY29yYnlfb3JiX29ic2VydmVyX2Z1bmMgZnVuYywKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X29wYXF1ZV90IGV4dHJhKSB7CisgICAgQVZBSElfV0FSTl9VTlNVUFBPUlRFRDsKKyAgICByZXR1cm4gU1dfRV9OT19JTVBMOworfQorCitzd19yZXN1bHQgc3dfY29yYnlfb3JiX3Byb3RvY29sX3RvX2FkZHJlc3MoCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19jb3JieV9vcmIgc2VsZiwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2NvbnN0X3N0cmluZyB0YWcsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19zdHJpbmcgYWRkciwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X3BvcnQgKiBwb3J0KSB7CisgICAgQVZBSElfV0FSTl9VTlNVUFBPUlRFRDsKKyAgICByZXR1cm4gU1dfRV9OT19JTVBMOworfQorCitzd19yZXN1bHQgc3dfY29yYnlfb3JiX3Byb3RvY29sX3RvX3VybCgKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2NvcmJ5X29yYiBzZWxmLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfY29uc3Rfc3RyaW5nIHRhZywKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2NvbnN0X3N0cmluZyBuYW1lLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfc3RyaW5nIHVybCwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X3NpemVfdCB1cmxfbGVuKSB7CisgICAgQVZBSElfV0FSTl9VTlNVUFBPUlRFRDsKKyAgICByZXR1cm4gU1dfRV9OT19JTVBMOworfQorCitzd19yZXN1bHQgc3dfY29yYnlfb3JiX3JlYWRfY2hhbm5lbCgKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2NvcmJ5X29yYiBzZWxmLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3RydWN0IF9zd19jb3JieV9jaGFubmVsICogY2hhbm5lbCkgeworICAgIEFWQUhJX1dBUk5fVU5TVVBQT1JURUQ7CisgICAgcmV0dXJuIFNXX0VfTk9fSU1QTDsKK30KKworc3dfcmVzdWx0IHN3X2NvcmJ5X29yYl9kaXNwYXRjaF9tZXNzYWdlKAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfY29yYnlfb3JiIHNlbGYsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzdHJ1Y3QgX3N3X2NvcmJ5X2NoYW5uZWwgKiBjaGFubmVsLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3RydWN0IF9zd19jb3JieV9tZXNzYWdlICogbWVzc2FnZSwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN0cnVjdCBfc3dfY29yYnlfYnVmZmVyICogYnVmZmVyLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfdWludDggZW5kaWFuKSB7CisgICAgQVZBSElfV0FSTl9VTlNVUFBPUlRFRDsKKyAgICByZXR1cm4gU1dfRV9OT19JTVBMOworfQorCitzd19yZXN1bHQgc3dfY29yYnlfbWVzc2FnZV9pbml0KEFWQUhJX0dDQ19VTlVTRUQgc3dfY29yYnlfbWVzc2FnZSAqIHNlbGYpIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEOworICAgIHJldHVybiBTV19FX05PX0lNUEw7Cit9CisKK3N3X3Jlc3VsdCBzd19jb3JieV9tZXNzYWdlX2ZpbmEoQVZBSElfR0NDX1VOVVNFRCBzd19jb3JieV9tZXNzYWdlIHNlbGYpIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEOworICAgIHJldHVybiBTV19FX05PX0lNUEw7Cit9CisKK3N3X3Jlc3VsdCBzd19jb3JieV9idWZmZXJfaW5pdChBVkFISV9HQ0NfVU5VU0VEIHN3X2NvcmJ5X2J1ZmZlciAqIHNlbGYpIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEOworICAgIHJldHVybiBTV19FX05PX0lNUEw7Cit9CisKK3N3X3Jlc3VsdCBzd19jb3JieV9idWZmZXJfaW5pdF93aXRoX3NpemUoCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19jb3JieV9idWZmZXIgKiBzZWxmLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfc2l6ZV90IHNpemUpIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEOworICAgIHJldHVybiBTV19FX05PX0lNUEw7Cit9CisKK3N3X3Jlc3VsdCBzd19jb3JieV9idWZmZXJfaW5pdF93aXRoX2RlbGVnYXRlKAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfY29yYnlfYnVmZmVyICogc2VsZiwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2NvcmJ5X2J1ZmZlcl9kZWxlZ2F0ZSBkZWxlZ2F0ZSwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2NvcmJ5X2J1ZmZlcl9vdmVyZmxvd19mdW5jIG92ZXJmbG93LAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfY29yYnlfYnVmZmVyX3VuZGVyZmxvd19mdW5jIHVuZGVyZmxvdywKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X29wYXF1ZV90IGV4dHJhKSB7CisgICAgQVZBSElfV0FSTl9VTlNVUFBPUlRFRDsKKyAgICByZXR1cm4gU1dfRV9OT19JTVBMOworfQorCitzd19yZXN1bHQgc3dfY29yYnlfYnVmZmVyX2luaXRfd2l0aF9zaXplX2FuZF9kZWxlZ2F0ZSgKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2NvcmJ5X2J1ZmZlciAqIHNlbGYsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19zaXplX3Qgc2l6ZSwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2NvcmJ5X2J1ZmZlcl9kZWxlZ2F0ZSBkZWxlZ2F0ZSwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2NvcmJ5X2J1ZmZlcl9vdmVyZmxvd19mdW5jIG92ZXJmbG93LAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfY29yYnlfYnVmZmVyX3VuZGVyZmxvd19mdW5jIHVuZGVyZmxvdywKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X29wYXF1ZV90IGV4dHJhKSB7CisgICAgQVZBSElfV0FSTl9VTlNVUFBPUlRFRDsKKyAgICByZXR1cm4gU1dfRV9OT19JTVBMOworfQorCitzd19yZXN1bHQgc3dfY29yYnlfYnVmZmVyX2ZpbmEoQVZBSElfR0NDX1VOVVNFRCBzd19jb3JieV9idWZmZXIgc2VsZikgeworICAgIEFWQUhJX1dBUk5fVU5TVVBQT1JURUQ7CisgICAgcmV0dXJuIFNXX0VfTk9fSU1QTDsKK30KKwordm9pZCBzd19jb3JieV9idWZmZXJfcmVzZXQoQVZBSElfR0NDX1VOVVNFRCBzd19jb3JieV9idWZmZXIgc2VsZikgeworICAgIEFWQUhJX1dBUk5fVU5TVVBQT1JURUQ7Cit9CisKK3N3X3Jlc3VsdCBzd19jb3JieV9idWZmZXJfc2V0X29jdGV0cygKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2NvcmJ5X2J1ZmZlciBzZWxmLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfb2N0ZXRzIG9jdGV0cywKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X3NpemVfdCBzaXplKSB7CisgICAgQVZBSElfV0FSTl9VTlNVUFBPUlRFRDsKKyAgICByZXR1cm4gU1dfRV9OT19JTVBMOworfQorCitzd19vY3RldHMgc3dfY29yYnlfYnVmZmVyX29jdGV0cyhBVkFISV9HQ0NfVU5VU0VEIHN3X2NvcmJ5X2J1ZmZlciBzZWxmKSB7CisgICAgQVZBSElfV0FSTl9VTlNVUFBPUlRFRDsKKyAgICByZXR1cm4gTlVMTDsKK30KKworc3dfc2l6ZV90IHN3X2NvcmJ5X2J1ZmZlcl9ieXRlc191c2VkKEFWQUhJX0dDQ19VTlVTRUQgc3dfY29yYnlfYnVmZmVyIHNlbGYpIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEOworICAgIHJldHVybiAwOworfQorCitzd19zaXplX3Qgc3dfY29yYnlfYnVmZmVyX3NpemUoQVZBSElfR0NDX1VOVVNFRCBzd19jb3JieV9idWZmZXIgc2VsZikgeworICAgIEFWQUhJX1dBUk5fVU5TVVBQT1JURUQ7CisgICAgcmV0dXJuIDA7Cit9CisKK3N3X3Jlc3VsdCBzd19jb3JieV9idWZmZXJfcHV0X2ludDgoCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19jb3JieV9idWZmZXIgc2VsZiwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2ludDggdmFsKSB7CisgICAgQVZBSElfV0FSTl9VTlNVUFBPUlRFRDsKKyAgICByZXR1cm4gU1dfRV9OT19JTVBMOworfQorCitzd19yZXN1bHQgc3dfY29yYnlfYnVmZmVyX3B1dF91aW50OCgKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2NvcmJ5X2J1ZmZlciBzZWxmLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfdWludDggdmFsKSB7CisgICAgQVZBSElfV0FSTl9VTlNVUFBPUlRFRDsKKyAgICByZXR1cm4gU1dfRV9OT19JTVBMOworfQorCitzd19yZXN1bHQgc3dfY29yYnlfYnVmZmVyX3B1dF9pbnQxNigKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2NvcmJ5X2J1ZmZlciBzZWxmLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfaW50MTYgdmFsKSB7CisgICAgQVZBSElfV0FSTl9VTlNVUFBPUlRFRDsKKyAgICByZXR1cm4gU1dfRV9OT19JTVBMOworfQorCitzd19yZXN1bHQgc3dfY29yYnlfYnVmZmVyX3B1dF91aW50MTYoCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19jb3JieV9idWZmZXIgc2VsZiwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X3VpbnQxNiB2YWwpIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEOworICAgIHJldHVybiBTV19FX05PX0lNUEw7Cit9CisKK3N3X3Jlc3VsdCBzd19jb3JieV9idWZmZXJfcHV0X2ludDMyKAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfY29yYnlfYnVmZmVyIHNlbGYsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19pbnQzMiB2YWwpIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEOworICAgIHJldHVybiBTV19FX05PX0lNUEw7Cit9CisKK3N3X3Jlc3VsdCBzd19jb3JieV9idWZmZXJfcHV0X3VpbnQzMigKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2NvcmJ5X2J1ZmZlciBzZWxmLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfdWludDMyIHZhbCkgeworICAgIEFWQUhJX1dBUk5fVU5TVVBQT1JURUQ7CisgICAgcmV0dXJuIFNXX0VfTk9fSU1QTDsKK30KKworc3dfcmVzdWx0IHN3X2NvcmJ5X2J1ZmZlcl9wdXRfb2N0ZXRzKAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfY29yYnlfYnVmZmVyIHNlbGYsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19jb25zdF9vY3RldHMgdmFsLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfc2l6ZV90IHNpemUpIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEOworICAgIHJldHVybiBTV19FX05PX0lNUEw7Cit9CisKK3N3X3Jlc3VsdCBzd19jb3JieV9idWZmZXJfcHV0X3NpemVkX29jdGV0cygKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2NvcmJ5X2J1ZmZlciBzZWxmLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfY29uc3Rfb2N0ZXRzIHZhbCwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X3VpbnQzMiBsZW4pIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEOworICAgIHJldHVybiBTV19FX05PX0lNUEw7Cit9CisKK3N3X3Jlc3VsdCBzd19jb3JieV9idWZmZXJfcHV0X2NzdHJpbmcoCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19jb3JieV9idWZmZXIgc2VsZiwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2NvbnN0X3N0cmluZyB2YWwpIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEOworICAgIHJldHVybiBTV19FX05PX0lNUEw7Cit9CisKK3N3X3Jlc3VsdCBzd19jb3JieV9idWZmZXJfcHV0X29iamVjdCgKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2NvcmJ5X2J1ZmZlciBzZWxmLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgY29uc3Qgc3RydWN0IF9zd19jb3JieV9vYmplY3QgKiBvYmplY3QpIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEOworICAgIHJldHVybiBTV19FX05PX0lNUEw7Cit9CisKK3N3X3Jlc3VsdCBzd19jb3JieV9idWZmZXJfcHV0X3BhZCgKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2NvcmJ5X2J1ZmZlciBzZWxmLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfY29yYnlfYnVmZmVyX3BhZCBwYWQpIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEOworICAgIHJldHVybiBTV19FX05PX0lNUEw7Cit9CisKK3N3X3Jlc3VsdCBzd19jb3JieV9idWZmZXJfZ2V0X2ludDgoCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19jb3JieV9idWZmZXIgc2VsZiwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2ludDggKiB2YWwpIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEOworICAgIHJldHVybiBTV19FX05PX0lNUEw7Cit9CisKK3N3X3Jlc3VsdCBzd19jb3JieV9idWZmZXJfZ2V0X3VpbnQ4KAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfY29yYnlfYnVmZmVyIHNlbGYsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd191aW50OCAqIHZhbCkgeworICAgIEFWQUhJX1dBUk5fVU5TVVBQT1JURUQ7CisgICAgcmV0dXJuIFNXX0VfTk9fSU1QTDsKK30KKworc3dfcmVzdWx0IHN3X2NvcmJ5X2J1ZmZlcl9nZXRfaW50MTYoCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19jb3JieV9idWZmZXIgc2VsZiwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2ludDE2ICogdmFsLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfdWludDggZW5kaWFuKSB7CisgICAgQVZBSElfV0FSTl9VTlNVUFBPUlRFRDsKKyAgICByZXR1cm4gU1dfRV9OT19JTVBMOworfQorCitzd19yZXN1bHQgc3dfY29yYnlfYnVmZmVyX2dldF91aW50MTYoCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19jb3JieV9idWZmZXIgc2VsZiwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X3VpbnQxNiAqIHZhbCwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X3VpbnQ4IGVuZGlhbikgeworICAgIEFWQUhJX1dBUk5fVU5TVVBQT1JURUQ7CisgICAgcmV0dXJuIFNXX0VfTk9fSU1QTDsKK30KKworc3dfcmVzdWx0IHN3X2NvcmJ5X2J1ZmZlcl9nZXRfaW50MzIoCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19jb3JieV9idWZmZXIgc2VsZiwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2ludDMyICogdmFsLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfdWludDggZW5kaWFuKSB7CisgICAgQVZBSElfV0FSTl9VTlNVUFBPUlRFRDsKKyAgICByZXR1cm4gU1dfRV9OT19JTVBMOworfQorCitzd19yZXN1bHQgc3dfY29yYnlfYnVmZmVyX2dldF91aW50MzIoCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19jb3JieV9idWZmZXIgc2VsZiwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X3VpbnQzMiAqIHZhbCwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X3VpbnQ4IGVuZGlhbikgeworICAgIEFWQUhJX1dBUk5fVU5TVVBQT1JURUQ7CisgICAgcmV0dXJuIFNXX0VfTk9fSU1QTDsKK30KKworc3dfcmVzdWx0IHN3X2NvcmJ5X2J1ZmZlcl9nZXRfb2N0ZXRzKAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfY29yYnlfYnVmZmVyIHNlbGYsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19vY3RldHMgb2N0ZXRzLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfc2l6ZV90IHNpemUpIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEOworICAgIHJldHVybiBTV19FX05PX0lNUEw7Cit9CisKK3N3X3Jlc3VsdCBzd19jb3JieV9idWZmZXJfYWxsb2NhdGVfYW5kX2dldF9zaXplZF9vY3RldHMoCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19jb3JieV9idWZmZXIgc2VsZiwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X29jdGV0cyAqIHZhbCwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X3VpbnQzMiAqIHNpemUsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd191aW50OCBlbmRpYW4pIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEOworICAgIHJldHVybiBTV19FX05PX0lNUEw7Cit9CisKK3N3X3Jlc3VsdCBzd19jb3JieV9idWZmZXJfZ2V0X3plcm9jb3B5X3NpemVkX29jdGV0cygKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2NvcmJ5X2J1ZmZlciBzZWxmLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfb2N0ZXRzICogdmFsLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfdWludDMyICogc2l6ZSwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X3VpbnQ4IGVuZGlhbikgeworICAgIEFWQUhJX1dBUk5fVU5TVVBQT1JURUQ7CisgICAgcmV0dXJuIFNXX0VfTk9fSU1QTDsKK30KKworc3dfcmVzdWx0IHN3X2NvcmJ5X2J1ZmZlcl9nZXRfc2l6ZWRfb2N0ZXRzKAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfY29yYnlfYnVmZmVyIHNlbGYsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19vY3RldHMgdmFsLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfdWludDMyICogbGVuLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfdWludDggZW5kaWFuKSB7CisgICAgQVZBSElfV0FSTl9VTlNVUFBPUlRFRDsKKyAgICByZXR1cm4gU1dfRV9OT19JTVBMOworfQorCitzd19yZXN1bHQgc3dfY29yYnlfYnVmZmVyX2FsbG9jYXRlX2FuZF9nZXRfY3N0cmluZygKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2NvcmJ5X2J1ZmZlciBzZWxmLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfc3RyaW5nICogdmFsLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfdWludDMyICogbGVuLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfdWludDggZW5kaWFuKSB7CisgICAgQVZBSElfV0FSTl9VTlNVUFBPUlRFRDsKKyAgICByZXR1cm4gU1dfRV9OT19JTVBMOworfQorCitzd19yZXN1bHQgc3dfY29yYnlfYnVmZmVyX2dldF96ZXJvY29weV9jc3RyaW5nKAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfY29yYnlfYnVmZmVyIHNlbGYsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19zdHJpbmcgKiB2YWwsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd191aW50MzIgKiBsZW4sCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd191aW50OCBlbmRpYW4pIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEOworICAgIHJldHVybiBTV19FX05PX0lNUEw7Cit9CisKK3N3X3Jlc3VsdCBzd19jb3JieV9idWZmZXJfZ2V0X2NzdHJpbmcoCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19jb3JieV9idWZmZXIgc2VsZiwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X3N0cmluZyB2YWwsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd191aW50MzIgKiBsZW4sCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd191aW50OCBlbmRpYW4pIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEOworICAgIHJldHVybiBTV19FX05PX0lNUEw7Cit9CisKK3N3X3Jlc3VsdCBzd19jb3JieV9idWZmZXJfZ2V0X29iamVjdCgKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2NvcmJ5X2J1ZmZlciBzZWxmLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3RydWN0IF9zd19jb3JieV9vYmplY3QgKiogb2JqZWN0LAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfdWludDggZW5kaWFuKSB7CisgICAgQVZBSElfV0FSTl9VTlNVUFBPUlRFRDsKKyAgICByZXR1cm4gU1dfRV9OT19JTVBMOworfQorCitzd19yZXN1bHQgc3dfY29yYnlfY2hhbm5lbF9zdGFydF9yZXF1ZXN0KAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfY29yYnlfY2hhbm5lbCBzZWxmLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfY29uc3RfY29yYnlfcHJvZmlsZSBwcm9maWxlLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3RydWN0IF9zd19jb3JieV9idWZmZXIgKiogYnVmZmVyLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfY29uc3Rfc3RyaW5nIG9wLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfdWludDMyIG9wbGVuLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfYm9vbCByZXBseV9leHBlY3RlZCkgeworICAgIEFWQUhJX1dBUk5fVU5TVVBQT1JURUQ7CisgICAgcmV0dXJuIFNXX0VfTk9fSU1QTDsKK30KKworc3dfcmVzdWx0IHN3X2NvcmJ5X2NoYW5uZWxfc3RhcnRfcmVwbHkoCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19jb3JieV9jaGFubmVsIHNlbGYsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzdHJ1Y3QgX3N3X2NvcmJ5X2J1ZmZlciAqKiBidWZmZXIsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd191aW50MzIgcmVxdWVzdF9pZCwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2NvcmJ5X3JlcGx5X3N0YXR1cyBzdGF0dXMpIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEOworICAgIHJldHVybiBTV19FX05PX0lNUEw7Cit9CisKK3N3X3Jlc3VsdCBzd19jb3JieV9jaGFubmVsX3NlbmQoCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19jb3JieV9jaGFubmVsIHNlbGYsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzdHJ1Y3QgX3N3X2NvcmJ5X2J1ZmZlciAqIGJ1ZmZlciwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2NvcmJ5X2J1ZmZlcl9vYnNlcnZlciBvYnNlcnZlciwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2NvcmJ5X2J1ZmZlcl93cml0dGVuX2Z1bmMgZnVuYywKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X29wYXF1ZV90IGV4dHJhKSB7CisgICAgQVZBSElfV0FSTl9VTlNVUFBPUlRFRDsKKyAgICByZXR1cm4gU1dfRV9OT19JTVBMOworfQorCitzd19yZXN1bHQgc3dfY29yYnlfY2hhbm5lbF9yZWN2KAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfY29yYnlfY2hhbm5lbCBzZWxmLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfc2FsdCAqIHNhbHQsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzdHJ1Y3QgX3N3X2NvcmJ5X21lc3NhZ2UgKiogbWVzc2FnZSwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X3VpbnQzMiAqIHJlcXVlc3RfaWQsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19zdHJpbmcgKiBvcCwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X3VpbnQzMiAqIG9wX2xlbiwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN0cnVjdCBfc3dfY29yYnlfYnVmZmVyICoqIGJ1ZmZlciwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X3VpbnQ4ICogZW5kaWFuLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfYm9vbCBibG9jaykgeworICAgIEFWQUhJX1dBUk5fVU5TVVBQT1JURUQ7CisgICAgcmV0dXJuIFNXX0VfTk9fSU1QTDsKK30KKworc3dfcmVzdWx0IHN3X2NvcmJ5X2NoYW5uZWxfbGFzdF9yZWN2X2Zyb20oCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19jb3JieV9jaGFubmVsIHNlbGYsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19pcHY0X2FkZHJlc3MgKiBmcm9tLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfcG9ydCAqIGZyb21fcG9ydCkgeworICAgIEFWQUhJX1dBUk5fVU5TVVBQT1JURUQ7CisgICAgcmV0dXJuIFNXX0VfTk9fSU1QTDsKK30KKworc3dfcmVzdWx0IHN3X2NvcmJ5X2NoYW5uZWxfZmYoCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19jb3JieV9jaGFubmVsIHNlbGYsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzdHJ1Y3QgX3N3X2NvcmJ5X2J1ZmZlciAqIGJ1ZmZlcikgeworICAgIEFWQUhJX1dBUk5fVU5TVVBQT1JURUQ7CisgICAgcmV0dXJuIFNXX0VfTk9fSU1QTDsKK30KKworQVZBSElfR0NDX05PUkVUVVJOCitzd19zb2NrZXQgc3dfY29yYnlfY2hhbm5lbF9zb2NrZXQoQVZBSElfR0NDX1VOVVNFRCBzd19jb3JieV9jaGFubmVsIHNlbGYpIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEX0FCT1JUOworfQorCitzd19yZXN1bHQgc3dfY29yYnlfY2hhbm5lbF9yZXRhaW4oQVZBSElfR0NDX1VOVVNFRCBzd19jb3JieV9jaGFubmVsIHNlbGYpIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEOworICAgIHJldHVybiBTV19FX05PX0lNUEw7Cit9CisKK3N3X3Jlc3VsdCBzd19jb3JieV9jaGFubmVsX3NldF9kZWxlZ2F0ZSgKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2NvcmJ5X2NoYW5uZWwgc2VsZiwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2NvcmJ5X2NoYW5uZWxfZGVsZWdhdGUgZGVsZWdhdGUpIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEOworICAgIHJldHVybiBTV19FX05PX0lNUEw7Cit9CisKK0FWQUhJX0dDQ19OT1JFVFVSTgorc3dfY29yYnlfY2hhbm5lbF9kZWxlZ2F0ZSBzd19jb3JieV9jaGFubmVsX2dldF9kZWxlZ2F0ZSgKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2NvcmJ5X2NoYW5uZWwgc2VsZikgeworICAgIEFWQUhJX1dBUk5fVU5TVVBQT1JURURfQUJPUlQ7Cit9CisKK3ZvaWQgc3dfY29yYnlfY2hhbm5lbF9zZXRfYXBwX2RhdGEoCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19jb3JieV9jaGFubmVsIHNlbGYsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19vcGFxdWUgYXBwX2RhdGEpIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEOworfQorCitBVkFISV9HQ0NfTk9SRVRVUk4KK3N3X29wYXF1ZSBzd19jb3JieV9jaGFubmVsX2dldF9hcHBfZGF0YShBVkFISV9HQ0NfVU5VU0VEIHN3X2NvcmJ5X2NoYW5uZWwgc2VsZikgeworICAgIEFWQUhJX1dBUk5fVU5TVVBQT1JURURfQUJPUlQ7Cit9CisKK3N3X3Jlc3VsdCBzd19jb3JieV9jaGFubmVsX2ZpbmEoQVZBSElfR0NDX1VOVVNFRCBzd19jb3JieV9jaGFubmVsIHNlbGYpIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEOworICAgIHJldHVybiBTV19FX05PX0lNUEw7Cit9CisKK3N3X3Jlc3VsdCBzd19jb3JieV9vYmplY3RfaW5pdF9mcm9tX3VybCgKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2NvcmJ5X29iamVjdCAqIHNlbGYsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzdHJ1Y3QgX3N3X2NvcmJ5X29yYiAqIG9yYiwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2NvbnN0X3N0cmluZyB1cmwsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19zb2NrZXRfb3B0aW9ucyBvcHRpb25zLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfdWludDMyIGJ1ZnNpemUpIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEOworICAgIHJldHVybiBTV19FX05PX0lNUEw7Cit9CisKK3N3X3Jlc3VsdCBzd19jb3JieV9vYmplY3RfZmluYSgKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2NvcmJ5X29iamVjdCBzZWxmKSB7CisgICAgQVZBSElfV0FSTl9VTlNVUFBPUlRFRDsKKyAgICByZXR1cm4gU1dfRV9OT19JTVBMOworfQorCitzd19yZXN1bHQgc3dfY29yYnlfb2JqZWN0X3N0YXJ0X3JlcXVlc3QoCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19jb3JieV9vYmplY3Qgc2VsZiwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2NvbnN0X3N0cmluZyBvcCwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X3VpbnQzMiBvcF9sZW4sCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19ib29sIHJlcGx5X2V4cGVjdGVkLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfY29yYnlfYnVmZmVyICogYnVmZmVyKSB7CisgICAgQVZBSElfV0FSTl9VTlNVUFBPUlRFRDsKKyAgICByZXR1cm4gU1dfRV9OT19JTVBMOworfQorCitzd19yZXN1bHQgc3dfY29yYnlfb2JqZWN0X3NlbmQoCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19jb3JieV9vYmplY3Qgc2VsZiwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2NvcmJ5X2J1ZmZlciBidWZmZXIsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19jb3JieV9idWZmZXJfb2JzZXJ2ZXIgb2JzZXJ2ZXIsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19jb3JieV9idWZmZXJfd3JpdHRlbl9mdW5jIGZ1bmMsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19vcGFxdWUgZXh0cmEpIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEOworICAgIHJldHVybiBTV19FX05PX0lNUEw7Cit9CisKK3N3X3Jlc3VsdCBzd19jb3JieV9vYmplY3RfcmVjdigKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2NvcmJ5X29iamVjdCBzZWxmLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfY29yYnlfbWVzc2FnZSAqIG1lc3NhZ2UsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19jb3JieV9idWZmZXIgKiBidWZmZXIsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd191aW50OCAqIGVuZGlhbiwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2Jvb2wgYmxvY2spIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEOworICAgIHJldHVybiBTV19FX05PX0lNUEw7Cit9CisKK3N3X3Jlc3VsdCBzd19jb3JieV9vYmplY3RfY2hhbm5lbCgKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2NvcmJ5X29iamVjdCBzZWxmLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfY29yYnlfY2hhbm5lbCAqIGNoYW5uZWwpIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEOworICAgIHJldHVybiBTV19FX05PX0lNUEw7Cit9CisKK3N3X3Jlc3VsdCBzd19jb3JieV9vYmplY3Rfc2V0X2NoYW5uZWwoCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19jb3JieV9vYmplY3Qgc2VsZiwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2NvcmJ5X2NoYW5uZWwgY2hhbm5lbCkgeworICAgIEFWQUhJX1dBUk5fVU5TVVBQT1JURUQ7CisgICAgcmV0dXJuIFNXX0VfTk9fSU1QTDsKK30KKworc3dfcmVzdWx0IHN3X2Rpc2NvdmVyeV9wdWJsaXNoX2hvc3QoCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19kaXNjb3Zlcnkgc2VsZiwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X3VpbnQzMiBpbnRlcmZhY2VfaW5kZXgsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19jb25zdF9zdHJpbmcgbmFtZSwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2NvbnN0X3N0cmluZyBkb21haW4sCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19pcHY0X2FkZHJlc3MgYWRkcmVzcywKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2Rpc2NvdmVyeV9wdWJsaXNoX3JlcGx5IHJlcGx5LAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfb3BhcXVlIGV4dHJhLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfZGlzY292ZXJ5X29pZCAqIG9pZCkgeworICAgIEFWQUhJX1dBUk5fVU5TVVBQT1JURUQ7CisgICAgcmV0dXJuIFNXX0VfTk9fSU1QTDsKK30KKworc3dfcmVzdWx0IHN3X2Rpc2NvdmVyeV9wdWJsaXNoX3VwZGF0ZSgKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2Rpc2NvdmVyeSBzZWxmLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfZGlzY292ZXJ5X29pZCBvaWQsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19vY3RldHMgdGV4dF9yZWNvcmQsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd191aW50MzIgdGV4dF9yZWNvcmRfbGVuKSB7CisgICAgQVZBSElfV0FSTl9VTlNVUFBPUlRFRDsKKyAgICByZXR1cm4gU1dfRV9OT19JTVBMOworfQorCitzd19yZXN1bHQgc3dfZGlzY292ZXJ5X3F1ZXJ5X3JlY29yZCgKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2Rpc2NvdmVyeSBzZWxmLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfdWludDMyIGludGVyZmFjZV9pbmRleCwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X3VpbnQzMiBmbGFncywKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2NvbnN0X3N0cmluZyBmdWxsbmFtZSwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X3VpbnQxNiBycnR5cGUsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd191aW50MTYgcnJjbGFzcywKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X2Rpc2NvdmVyeV9xdWVyeV9yZWNvcmRfcmVwbHkgcmVwbHksCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19vcGFxdWUgZXh0cmEsCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd19kaXNjb3Zlcnlfb2lkICogb2lkKSB7CisgICAgQVZBSElfV0FSTl9VTlNVUFBPUlRFRDsKKyAgICByZXR1cm4gU1dfRV9OT19JTVBMOworfQorCitzd19yZXN1bHQgc3dfdGV4dF9yZWNvcmRfc3RyaW5nX2l0ZXJhdG9yX2luaXQoCisgICAgQVZBSElfR0NDX1VOVVNFRCBzd190ZXh0X3JlY29yZF9zdHJpbmdfaXRlcmF0b3IgKiBzZWxmLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfY29uc3Rfc3RyaW5nIHRleHRfcmVjb3JkX3N0cmluZykgeworICAgIEFWQUhJX1dBUk5fVU5TVVBQT1JURUQ7CisgICAgcmV0dXJuIFNXX0VfTk9fSU1QTDsKK30KKworc3dfcmVzdWx0IHN3X3RleHRfcmVjb3JkX3N0cmluZ19pdGVyYXRvcl9maW5hKAorICAgIEFWQUhJX0dDQ19VTlVTRUQgc3dfdGV4dF9yZWNvcmRfc3RyaW5nX2l0ZXJhdG9yIHNlbGYpIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEOworICAgIHJldHVybiBTV19FX05PX0lNUEw7Cit9CisKK3N3X3Jlc3VsdCBzd190ZXh0X3JlY29yZF9zdHJpbmdfaXRlcmF0b3JfbmV4dCgKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHN3X3RleHRfcmVjb3JkX3N0cmluZ19pdGVyYXRvciBzZWxmLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgY2hhciBrZXlbMjU1XSwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIGNoYXIgdmFsWzI1NV0pIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEOworICAgIHJldHVybiBTV19FX05PX0lNUEw7Cit9CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktY29tcGF0LWhvd2wvd2Fybi5jIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbXBhdC1ob3dsL3dhcm4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzViYjU5Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbXBhdC1ob3dsL3dhcm4uYwpAQCAtMCwwICsxLDI5IEBACisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgIndhcm4uaCIKKworI2RlZmluZSBDT01QQVRfTEFZRVIgIkhPV0wiCisjZGVmaW5lIENHSV9TVUJTWVNURU0gImhvd2wiCisKKyNpbmNsdWRlICIuLi9hdmFoaS1jb21wYXQtbGliZG5zX3NkL3dhcm4uYyIKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtaG93bC93YXJuLmggYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tcGF0LWhvd2wvd2Fybi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0YmQwZWQKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tcGF0LWhvd2wvd2Fybi5oCkBAIC0wLDAgKzEsMzMgQEAKKyNpZm5kZWYgZm9vd2Fybmhob3dsZm9vCisjZGVmaW5lIGZvb3dhcm5oaG93bGZvbworCisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKy8qIFRvIGF2b2lkIHN5bWJvbCBuYW1lIGNsYXNoZXMgd2hlbiBhIHByb2Nlc3MgbGlua3MgdG8gYm90aCBvdXIKKyAqIGNvbXBhdGlibGl0eSBsYXllcnMsIHdlIG1vdmUgdGhlIHN5bWJvbHMgb3V0IG9mIHRoZSB3YXkgaGVyZSAqLworCisjZGVmaW5lIGF2YWhpX3dhcm5fdW5zdXBwb3J0ZWQgYXZhaGlfd2Fybl91bnN1cHBvcnRlZF9IT1dMCisjZGVmaW5lIGF2YWhpX3dhcm5fbGlua2FnZSBhdmFoaV93YXJuX2xpbmthZ2VfSE9XTAorI2RlZmluZSBhdmFoaV93YXJuIGF2YWhpX3dhcm5fSE9XTAorI2RlZmluZSBhdmFoaV9leGVfbmFtZSBhdmFoaV9leGVfbmFtZV9IT1dMCisKKyNpbmNsdWRlICIuLi9hdmFoaS1jb21wYXQtbGliZG5zX3NkL3dhcm4uaCIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktY29tcGF0LWxpYmRuc19zZC5wYy5pbiBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtbGliZG5zX3NkLnBjLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2MTk2MzIKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tcGF0LWxpYmRuc19zZC5wYy5pbgpAQCAtMCwwICsxLDEwIEBACitwcmVmaXg9QHByZWZpeEAKK2V4ZWNfcHJlZml4PSR7cHJlZml4fQorbGliZGlyPUBsaWJkaXJACitpbmNsdWRlZGlyPSR7cHJlZml4fS9pbmNsdWRlL2F2YWhpLWNvbXBhdC1saWJkbnNfc2QvCisKK05hbWU6IGF2YWhpLWNvbXBhdC1saWJkbnNfc2QKK0Rlc2NyaXB0aW9uOiBBdmFoaSBNdWx0aWNhc3QgRE5TIFJlc3BvbmRlciAobGliZG5zX3NkIENvbXBhdGliaWxpdHkpCitWZXJzaW9uOiBAUEFDS0FHRV9WRVJTSU9OQAorTGliczogLUwke2xpYmRpcn0gLWxkbnNfc2QKK0NmbGFnczogLURfUkVFTlRSQU5UIC1JJHtpbmNsdWRlZGlyfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvbXBhdC1saWJkbnNfc2QvTWFrZWZpbGUuYW0gYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tcGF0LWxpYmRuc19zZC9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTY2YmMwCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbXBhdC1saWJkbnNfc2QvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSw3MyBAQAorIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKyMKKyMgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyMgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyMgVVNBLgorCitBTV9DRkxBR1M9LUkkKHRvcF9zcmNkaXIpCisKKyMgVGhpcyBjb29sIGRlYnVnIHRyYXAgd29ya3Mgb24gaTM4Ni9nY2Mgb25seQorQU1fQ0ZMQUdTKz0nLURERUJVR19UUkFQPV9fYXNtX18oImludCAkJDMiKScKKworaWYgSEFWRV9EQlVTCitpZiBFTkFCTEVfQ09NUEFUX0xJQkROU19TRAorCithdmFoaV9jb21wYXRfbGliZG5zX3NkZGlyPSQoaW5jbHVkZWRpcikvYXZhaGktY29tcGF0LWxpYmRuc19zZAorCithdmFoaV9jb21wYXRfbGliZG5zX3NkX0hFQURFUlMgPSBkbnNfc2QuaAorCitsaWJfTFRMSUJSQVJJRVMgPSBsaWJkbnNfc2QubGEKKworaWYgRU5BQkxFX1RFU1RTCitub2luc3RfUFJPR1JBTVMgPSB0eHQtdGVzdCBudWxsLXRlc3QKK2VuZGlmCisKK2xpYmRuc19zZF9sYV9TT1VSQ0VTID0gXAorCWRuc19zZC5oIFwKKwljb21wYXQuYyBcCisJdHh0LmMgXAorCXVuc3VwcG9ydGVkLmMgXAorCXdhcm4uYyB3YXJuLmgKK2xpYmRuc19zZF9sYV9DRkxBR1MgPSAkKEFNX0NGTEFHUykgJChQVEhSRUFEX0NGTEFHUykKK2xpYmRuc19zZF9sYV9MREZMQUdTID0gJChBTV9MREZMQUdTKSAgLXZlcnNpb24taW5mbyAkKExJQkFWQUhJX0NPTVBBVF9MSUJETlNfU0RfVkVSU0lPTl9JTkZPKSAkKFBUSFJFQURfTElCUykgJChQVEhSRUFEX0NGTEFHUykgLi4vYXZhaGktY29tbW9uL2xpYmF2YWhpLWNvbW1vbi5sYSAuLi9hdmFoaS1jbGllbnQvbGliYXZhaGktY2xpZW50LmxhCisKK3R4dF90ZXN0X1NPVVJDRVMgPSBcCisJZG5zX3NkLmggXAorCXR4dC5jIFwKKwl0eHQtdGVzdC5jIFwKKwl3YXJuLmMgd2Fybi5oCit0eHRfdGVzdF9DRkxBR1MgPSAkKEFNX0NGTEFHUykgJChQVEhSRUFEX0NGTEFHUykKK3R4dF90ZXN0X0xEQUREID0gJChBTV9MREFERCkgJChQVEhSRUFEX0xJQlMpICQoUFRIUkVBRF9DRkxBR1MpIC4uL2F2YWhpLWNvbW1vbi9saWJhdmFoaS1jb21tb24ubGEKKworbnVsbF90ZXN0X1NPVVJDRVMgPSBcCisJZG5zX3NkLmggXAorCWNvbXBhdC5jIFwKKwludWxsLXRlc3QuYyBcCisJd2Fybi5jIHdhcm4uaAorbnVsbF90ZXN0X0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAkKFBUSFJFQURfQ0ZMQUdTKQorbnVsbF90ZXN0X0xEQUREID0gJChBTV9MREFERCkgJChQVEhSRUFEX0xJQlMpICQoUFRIUkVBRF9DRkxBR1MpIC4uL2F2YWhpLWNvbW1vbi9saWJhdmFoaS1jb21tb24ubGEgLi4vYXZhaGktY2xpZW50L2xpYmF2YWhpLWNsaWVudC5sYQorCisjIFlvdSBjYW4gdGVzdCB0aGUgY29tcGF0aWJpbGl0eSBsYXllciBieSBzdGlja2luZyBpbiBtRE5TUmVzcG9uZGVyJ3MKKyMgZG5zLXNkLmMgc291cmNlIGhlcmUsIG5hbWluZyBpdCAibGliZG5zX3NkLXRlc3QuYyIgYW5kIHJ1bm5pbmcgIm1ha2UKKyMgbGliZG5zX3NkLXRlc3QiIG1hbnVhbGx5LiBXZSBkbyBub3QgZGlzdHJpYnV0ZSB0aGF0IGZpbGUgZHVlIHRvCisjIGxpY2Vuc2luZyByZXN0cmljdGlvbnMuCisKK2xpYmRuc19zZC10ZXN0OiBsaWJkbnNfc2QtdGVzdC5jIGxpYmRuc19zZC5sYQorCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDQykgJChBTV9DRkxBR1MpICQoUFRIUkVBRF9DRkxBR1MpIC1vIGxpYmRuc19zZC10ZXN0Lm8gLWMgbGliZG5zX3NkLXRlc3QuYworCSQoTElCVE9PTCkgLS1tb2RlPWxpbmsgJChDQykgJChBTV9DRkxBR1MpICQoUFRIUkVBRF9DRkxBR1MpIC1vIGxpYmRuc19zZC10ZXN0IGxpYmRuc19zZC10ZXN0Lm8gJChQVEhSRUFEX0xJQlMpIC4uL2F2YWhpLWNvbW1vbi9saWJhdmFoaS1jb21tb24ubGEgbGliZG5zX3NkLmxhCisKK0NMRUFORklMRVMgPSBsaWJkbnNfc2QtdGVzdC5vIGxpYmRuc19zZC10ZXN0CisKK2VuZGlmCitlbmRpZgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvbXBhdC1saWJkbnNfc2QvTWFrZWZpbGUuaW4gYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tcGF0LWxpYmRuc19zZC9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDAyYzg4Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbXBhdC1saWJkbnNfc2QvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw5NDQgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEuMyBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKyMKKyMgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyMgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyMgVVNBLgorCisKKworVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorQEVOQUJMRV9DT01QQVRfTElCRE5TX1NEX1RSVUVAQEVOQUJMRV9URVNUU19UUlVFQEBIQVZFX0RCVVNfVFJVRUBub2luc3RfUFJPR1JBTVMgPSB0eHQtdGVzdCQoRVhFRVhUKSBcCitARU5BQkxFX0NPTVBBVF9MSUJETlNfU0RfVFJVRUBARU5BQkxFX1RFU1RTX1RSVUVAQEhBVkVfREJVU19UUlVFQAludWxsLXRlc3QkKEVYRUVYVCkKK3N1YmRpciA9IGF2YWhpLWNvbXBhdC1saWJkbnNfc2QKK0RJU1RfQ09NTU9OID0gJChhbV9fYXZhaGlfY29tcGF0X2xpYmRuc19zZF9IRUFERVJTX0RJU1QpIFwKKwkkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vYWN4X3B0aHJlYWQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2djY19zdGFja19wcm90ZWN0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9nY2NfdmlzaWJpbGl0eS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vaW50bHRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2ludHJvc3BlY3Rpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2x0b3B0aW9ucy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHR2ZXJzaW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbmxzLm00ICQodG9wX3NyY2RpcikvY29tbW9uL3B5dGhvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9hY2luY2x1ZGUubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vZG94eWdlbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7CithbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAorICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCisgICAgKikgZj0kJHA7OyBcCisgIGVzYWM7CithbV9fc3RyaXBfZGlyID0gZj1gZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7CithbV9faW5zdGFsbF9tYXggPSA0MAorYW1fX25vYmFzZV9zdHJpcF9zZXR1cCA9IFwKKyAgc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYAorYW1fX25vYmFzZV9zdHJpcCA9IFwKKyAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkIC1lICJzfCQkc3JjZGlyc3RyaXAvfHwiCithbV9fbm9iYXNlX2xpc3QgPSAkKGFtX19ub2Jhc2Vfc3RyaXBfc2V0dXApOyBcCisgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCisgIHNlZCAic3wgJCRzcmNkaXJzdHJpcC98IHw7IicgLyAuKlwvLyFzLyAuKi8gLi87IHMsXCggLipcKS9bXi9dKiQkLFwxLCcgfCBcCisgICQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiIgfSB7IGZpbGVzWyQkMl0gPSBmaWxlc1skJDJdICIgIiAkJDE7IFwKKyAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCisgICAgICB7IHByaW50ICQkMiwgZmlsZXNbJCQyXTsgblskJDJdID0gMDsgZmlsZXNbJCQyXSA9ICIiIH0gfSBcCisgICAgRU5EIHsgZm9yIChkaXIgaW4gZmlsZXMpIHByaW50IGRpciwgZmlsZXNbZGlyXSB9JworYW1fX2Jhc2VfbGlzdCA9IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJyB8IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJworYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpciA9IHsgXAorICB0ZXN0IC16ICIkJGZpbGVzIiBcCisgICAgfHwgeyB0ZXN0ICEgLWQgIiQkZGlyIiAmJiB0ZXN0ICEgLWYgIiQkZGlyIiAmJiB0ZXN0ICEgLXIgIiQkZGlyIjsgfSBcCisgICAgfHwgeyBlY2hvICIgKCBjZCAnJCRkaXInICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAorICAgICAgICAgJChhbV9fY2QpICIkJGRpciIgJiYgcm0gLWYgJCRmaWxlczsgfTsgXAorICB9CithbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQobGliZGlyKSIgXAorCSIkKERFU1RESVIpJChhdmFoaV9jb21wYXRfbGliZG5zX3NkZGlyKSIKK0xUTElCUkFSSUVTID0gJChsaWJfTFRMSUJSQVJJRVMpCitsaWJkbnNfc2RfbGFfTElCQUREID0KK2FtX19saWJkbnNfc2RfbGFfU09VUkNFU19ESVNUID0gZG5zX3NkLmggY29tcGF0LmMgdHh0LmMgdW5zdXBwb3J0ZWQuYyBcCisJd2Fybi5jIHdhcm4uaAorQEVOQUJMRV9DT01QQVRfTElCRE5TX1NEX1RSVUVAQEhBVkVfREJVU19UUlVFQGFtX2xpYmRuc19zZF9sYV9PQkpFQ1RTID0gbGliZG5zX3NkX2xhLWNvbXBhdC5sbyBcCitARU5BQkxFX0NPTVBBVF9MSUJETlNfU0RfVFJVRUBASEFWRV9EQlVTX1RSVUVACWxpYmRuc19zZF9sYS10eHQubG8gXAorQEVOQUJMRV9DT01QQVRfTElCRE5TX1NEX1RSVUVAQEhBVkVfREJVU19UUlVFQAlsaWJkbnNfc2RfbGEtdW5zdXBwb3J0ZWQubG8gXAorQEVOQUJMRV9DT01QQVRfTElCRE5TX1NEX1RSVUVAQEhBVkVfREJVU19UUlVFQAlsaWJkbnNfc2RfbGEtd2Fybi5sbworbGliZG5zX3NkX2xhX09CSkVDVFMgPSAkKGFtX2xpYmRuc19zZF9sYV9PQkpFQ1RTKQorQU1fVl9sdCA9ICQoYW1fX3ZfbHRfQEFNX1ZAKQorYW1fX3ZfbHRfID0gJChhbV9fdl9sdF9AQU1fREVGQVVMVF9WQCkKK2FtX192X2x0XzAgPSAtLXNpbGVudAorbGliZG5zX3NkX2xhX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKGxpYmRuc19zZF9sYV9DRkxBR1MpIFwKKwkkKENGTEFHUykgJChsaWJkbnNfc2RfbGFfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorQEVOQUJMRV9DT01QQVRfTElCRE5TX1NEX1RSVUVAQEhBVkVfREJVU19UUlVFQGFtX2xpYmRuc19zZF9sYV9ycGF0aCA9ICBcCitARU5BQkxFX0NPTVBBVF9MSUJETlNfU0RfVFJVRUBASEFWRV9EQlVTX1RSVUVACS1ycGF0aCAkKGxpYmRpcikKK1BST0dSQU1TID0gJChub2luc3RfUFJPR1JBTVMpCithbV9fbnVsbF90ZXN0X1NPVVJDRVNfRElTVCA9IGRuc19zZC5oIGNvbXBhdC5jIG51bGwtdGVzdC5jIHdhcm4uYyBcCisJd2Fybi5oCitARU5BQkxFX0NPTVBBVF9MSUJETlNfU0RfVFJVRUBASEFWRV9EQlVTX1RSVUVAYW1fbnVsbF90ZXN0X09CSkVDVFMgPSBudWxsX3Rlc3QtY29tcGF0LiQoT0JKRVhUKSBcCitARU5BQkxFX0NPTVBBVF9MSUJETlNfU0RfVFJVRUBASEFWRV9EQlVTX1RSVUVACW51bGxfdGVzdC1udWxsLXRlc3QuJChPQkpFWFQpIFwKK0BFTkFCTEVfQ09NUEFUX0xJQkROU19TRF9UUlVFQEBIQVZFX0RCVVNfVFJVRUAJbnVsbF90ZXN0LXdhcm4uJChPQkpFWFQpCitudWxsX3Rlc3RfT0JKRUNUUyA9ICQoYW1fbnVsbF90ZXN0X09CSkVDVFMpCithbV9fREVQRU5ERU5DSUVTXzEgPQorQEVOQUJMRV9DT01QQVRfTElCRE5TX1NEX1RSVUVAQEhBVkVfREJVU19UUlVFQG51bGxfdGVzdF9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAorQEVOQUJMRV9DT01QQVRfTElCRE5TX1NEX1RSVUVAQEhBVkVfREJVU19UUlVFQAkkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAorQEVOQUJMRV9DT01QQVRfTElCRE5TX1NEX1RSVUVAQEhBVkVfREJVU19UUlVFQAkuLi9hdmFoaS1jb21tb24vbGliYXZhaGktY29tbW9uLmxhIFwKK0BFTkFCTEVfQ09NUEFUX0xJQkROU19TRF9UUlVFQEBIQVZFX0RCVVNfVFJVRUAJLi4vYXZhaGktY2xpZW50L2xpYmF2YWhpLWNsaWVudC5sYQorbnVsbF90ZXN0X0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKG51bGxfdGVzdF9DRkxBR1MpIFwKKwkkKENGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACithbV9fdHh0X3Rlc3RfU09VUkNFU19ESVNUID0gZG5zX3NkLmggdHh0LmMgdHh0LXRlc3QuYyB3YXJuLmMgd2Fybi5oCitARU5BQkxFX0NPTVBBVF9MSUJETlNfU0RfVFJVRUBASEFWRV9EQlVTX1RSVUVAYW1fdHh0X3Rlc3RfT0JKRUNUUyA9IHR4dF90ZXN0LXR4dC4kKE9CSkVYVCkgXAorQEVOQUJMRV9DT01QQVRfTElCRE5TX1NEX1RSVUVAQEhBVkVfREJVU19UUlVFQAl0eHRfdGVzdC10eHQtdGVzdC4kKE9CSkVYVCkgXAorQEVOQUJMRV9DT01QQVRfTElCRE5TX1NEX1RSVUVAQEhBVkVfREJVU19UUlVFQAl0eHRfdGVzdC13YXJuLiQoT0JKRVhUKQordHh0X3Rlc3RfT0JKRUNUUyA9ICQoYW1fdHh0X3Rlc3RfT0JKRUNUUykKK0BFTkFCTEVfQ09NUEFUX0xJQkROU19TRF9UUlVFQEBIQVZFX0RCVVNfVFJVRUB0eHRfdGVzdF9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAorQEVOQUJMRV9DT01QQVRfTElCRE5TX1NEX1RSVUVAQEhBVkVfREJVU19UUlVFQAkkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAorQEVOQUJMRV9DT01QQVRfTElCRE5TX1NEX1RSVUVAQEhBVkVfREJVU19UUlVFQAkuLi9hdmFoaS1jb21tb24vbGliYXZhaGktY29tbW9uLmxhCit0eHRfdGVzdF9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJCh0eHRfdGVzdF9DRkxBR1MpIFwKKwkkKENGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACitERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQorZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAorYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKK2FtX19tdiA9IG12IC1mCitDT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKKwkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitMVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCisJJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCisJJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfQEFNX1ZAKQorYW1fX3ZfQ0NfID0gJChhbV9fdl9DQ19AQU1fREVGQVVMVF9WQCkKK2FtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAiICRAOworQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQorYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKK2FtX192X2F0XzAgPSBACitDQ0xEID0gJChDQykKK0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKKwkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKK0FNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF9AQU1fVkApCithbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF9AQU1fREVGQVVMVF9WQCkKK2FtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICIgJEA7CitBTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKK2FtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKK2FtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgIiAkQDsKK1NPVVJDRVMgPSAkKGxpYmRuc19zZF9sYV9TT1VSQ0VTKSAkKG51bGxfdGVzdF9TT1VSQ0VTKSBcCisJJCh0eHRfdGVzdF9TT1VSQ0VTKQorRElTVF9TT1VSQ0VTID0gJChhbV9fbGliZG5zX3NkX2xhX1NPVVJDRVNfRElTVCkgXAorCSQoYW1fX251bGxfdGVzdF9TT1VSQ0VTX0RJU1QpICQoYW1fX3R4dF90ZXN0X1NPVVJDRVNfRElTVCkKK2FtX19hdmFoaV9jb21wYXRfbGliZG5zX3NkX0hFQURFUlNfRElTVCA9IGRuc19zZC5oCitIRUFERVJTID0gJChhdmFoaV9jb21wYXRfbGliZG5zX3NkX0hFQURFUlMpCitFVEFHUyA9IGV0YWdzCitDVEFHUyA9IGN0YWdzCitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQUxMX0xJTkdVQVMgPSBAQUxMX0xJTkdVQVNACitBTVRBUiA9IEBBTVRBUkAKK0FNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAorQVIgPSBAQVJACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVZBSElfQVVUT0lQRF9HUk9VUCA9IEBBVkFISV9BVVRPSVBEX0dST1VQQAorQVZBSElfQVVUT0lQRF9VU0VSID0gQEFWQUhJX0FVVE9JUERfVVNFUkAKK0FWQUhJX0dST1VQID0gQEFWQUhJX0dST1VQQAorQVZBSElfUFJJVl9BQ0NFU1NfR1JPVVAgPSBAQVZBSElfUFJJVl9BQ0NFU1NfR1JPVVBACitBVkFISV9VU0VSID0gQEFWQUhJX1VTRVJACitBV0sgPSBAQVdLQAorQ0FUQUxPR1MgPSBAQ0FUQUxPR1NACitDQVRPQkpFWFQgPSBAQ0FUT0JKRVhUQAorQ0MgPSBAQ0NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREFUQURJUk5BTUUgPSBAREFUQURJUk5BTUVACitEQlVTX0NGTEFHUyA9IEBEQlVTX0NGTEFHU0AKK0RCVVNfTElCUyA9IEBEQlVTX0xJQlNACitEQlVTX1NZU1RFTV9CVVNfREVGQVVMVF9BRERSRVNTID0gQERCVVNfU1lTVEVNX0JVU19ERUZBVUxUX0FERFJFU1NACitEQlVTX1NZU19ESVIgPSBAREJVU19TWVNfRElSQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RMTFRPT0wgPSBARExMVE9PTEAKK0RPWFlHRU5fUEFQRVJfU0laRSA9IEBET1hZR0VOX1BBUEVSX1NJWkVACitEU1lNVVRJTCA9IEBEU1lNVVRJTEAKK0RVTVBCSU4gPSBARFVNUEJJTkAKK0RYX0NPTkZJRyA9IEBEWF9DT05GSUdACitEWF9ET0NESVIgPSBARFhfRE9DRElSQAorRFhfRE9UID0gQERYX0RPVEAKK0RYX0RPWFlHRU4gPSBARFhfRE9YWUdFTkAKK0RYX0RWSVBTID0gQERYX0RWSVBTQAorRFhfRUdSRVAgPSBARFhfRUdSRVBACitEWF9FTlYgPSBARFhfRU5WQAorRFhfRkxBR19jaGkgPSBARFhfRkxBR19jaGlACitEWF9GTEFHX2NobSA9IEBEWF9GTEFHX2NobUAKK0RYX0ZMQUdfZG9jID0gQERYX0ZMQUdfZG9jQAorRFhfRkxBR19kb3QgPSBARFhfRkxBR19kb3RACitEWF9GTEFHX2h0bWwgPSBARFhfRkxBR19odG1sQAorRFhfRkxBR19tYW4gPSBARFhfRkxBR19tYW5ACitEWF9GTEFHX3BkZiA9IEBEWF9GTEFHX3BkZkAKK0RYX0ZMQUdfcHMgPSBARFhfRkxBR19wc0AKK0RYX0ZMQUdfcnRmID0gQERYX0ZMQUdfcnRmQAorRFhfRkxBR194bWwgPSBARFhfRkxBR194bWxACitEWF9ISEMgPSBARFhfSEhDQAorRFhfTEFURVggPSBARFhfTEFURVhACitEWF9NQUtFSU5ERVggPSBARFhfTUFLRUlOREVYQAorRFhfUERGTEFURVggPSBARFhfUERGTEFURVhACitEWF9QRVJMID0gQERYX1BFUkxACitEWF9QUk9KRUNUID0gQERYX1BST0pFQ1RACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VYRUVYVCA9IEBFWEVFWFRACitGR1JFUCA9IEBGR1JFUEAKK0dBQ1VUSUwgPSBAR0FDVVRJTEAKK0dFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACitHTElCMjBfQ0ZMQUdTID0gQEdMSUIyMF9DRkxBR1NACitHTElCMjBfTElCUyA9IEBHTElCMjBfTElCU0AKK0dNT0ZJTEVTID0gQEdNT0ZJTEVTQAorR01TR0ZNVCA9IEBHTVNHRk1UQAorR09CSkVDVF9DRkxBR1MgPSBAR09CSkVDVF9DRkxBR1NACitHT0JKRUNUX0xJQlMgPSBAR09CSkVDVF9MSUJTQAorR1JFUCA9IEBHUkVQQAorR1RLMjBfQ0ZMQUdTID0gQEdUSzIwX0NGTEFHU0AKK0dUSzIwX0xJQlMgPSBAR1RLMjBfTElCU0AKK0dUSzMwX0NGTEFHUyA9IEBHVEszMF9DRkxBR1NACitHVEszMF9MSUJTID0gQEdUSzMwX0xJQlNACitIT1dMX0NPTVBBVF9WRVJTSU9OID0gQEhPV0xfQ09NUEFUX1ZFUlNJT05ACitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lOU1RPQkpFWFQgPSBASU5TVE9CSkVYVEAKK0lOVExMSUJTID0gQElOVExMSUJTQAorSU5UTFRPT0xfRVhUUkFDVCA9IEBJTlRMVE9PTF9FWFRSQUNUQAorSU5UTFRPT0xfTUVSR0UgPSBASU5UTFRPT0xfTUVSR0VACitJTlRMVE9PTF9QRVJMID0gQElOVExUT09MX1BFUkxACitJTlRMVE9PTF9VUERBVEUgPSBASU5UTFRPT0xfVVBEQVRFQAorSU5UUk9TUEVDVElPTl9DRkxBR1MgPSBASU5UUk9TUEVDVElPTl9DRkxBR1NACitJTlRST1NQRUNUSU9OX0NPTVBJTEVSID0gQElOVFJPU1BFQ1RJT05fQ09NUElMRVJACitJTlRST1NQRUNUSU9OX0dFTkVSQVRFID0gQElOVFJPU1BFQ1RJT05fR0VORVJBVEVACitJTlRST1NQRUNUSU9OX0dJUkRJUiA9IEBJTlRST1NQRUNUSU9OX0dJUkRJUkAKK0lOVFJPU1BFQ1RJT05fTElCUyA9IEBJTlRST1NQRUNUSU9OX0xJQlNACitJTlRST1NQRUNUSU9OX01BS0VGSUxFID0gQElOVFJPU1BFQ1RJT05fTUFLRUZJTEVACitJTlRST1NQRUNUSU9OX1NDQU5ORVIgPSBASU5UUk9TUEVDVElPTl9TQ0FOTkVSQAorSU5UUk9TUEVDVElPTl9UWVBFTElCRElSID0gQElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUkAKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCQVZBSElfQ0xJRU5UX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DTElFTlRfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfQ09NTU9OX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DT01NT05fVkVSU0lPTl9JTkZPQAorTElCQVZBSElfQ09NUEFUX0hPV0xfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NPTVBBVF9IT1dMX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPTVBBVF9MSUJETlNfU0RfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NPTVBBVF9MSUJETlNfU0RfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfQ09SRV9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ09SRV9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9HTElCX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9HTElCX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0dPQkpFQ1RfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0dPQkpFQ1RfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfUVQzX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9RVDNfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfUVQ0X1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9RVDRfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfVUlfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX1VJX1ZFUlNJT05fSU5GT0AKK0xJQkRBRU1PTl9DRkxBR1MgPSBATElCREFFTU9OX0NGTEFHU0AKK0xJQkRBRU1PTl9MSUJTID0gQExJQkRBRU1PTl9MSUJTQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAorTUNTID0gQE1DU0AKK01EQVNTRU1CTEVSID0gQE1EQVNTRU1CTEVSQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTUtJTlNUQUxMRElSUyA9IEBNS0lOU1RBTExESVJTQAorTU9DX1FUMyA9IEBNT0NfUVQzQAorTU9DX1FUNCA9IEBNT0NfUVQ0QAorTU9OT0RPQ0VSID0gQE1PTk9ET0NFUkAKK01PTk9ET0NfQ0ZMQUdTID0gQE1PTk9ET0NfQ0ZMQUdTQAorTU9OT0RPQ19ESVIgPSBATU9OT0RPQ19ESVJACitNT05PRE9DX0xJQlMgPSBATU9OT0RPQ19MSUJTQAorTVNHRk1UID0gQE1TR0ZNVEAKK01TR0ZNVF9PUFRTID0gQE1TR0ZNVF9PUFRTQAorTVNHTUVSR0UgPSBATVNHTUVSR0VACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitPQkpEVU1QID0gQE9CSkRVTVBACitPQkpFWFQgPSBAT0JKRVhUQAorT1RPT0wgPSBAT1RPT0xACitPVE9PTDY0ID0gQE9UT09MNjRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK1BLR19DT05GSUdfTElCRElSID0gQFBLR19DT05GSUdfTElCRElSQAorUEtHX0NPTkZJR19QQVRIID0gQFBLR19DT05GSUdfUEFUSEAKK1BPRklMRVMgPSBAUE9GSUxFU0AKK1BPU1VCID0gQFBPU1VCQAorUE9fSU5fREFUQURJUl9GQUxTRSA9IEBQT19JTl9EQVRBRElSX0ZBTFNFQAorUE9fSU5fREFUQURJUl9UUlVFID0gQFBPX0lOX0RBVEFESVJfVFJVRUAKK1BUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKK1BUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAorUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKK1BZVEhPTiA9IEBQWVRIT05ACitQWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAorUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKK1BZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKK1BZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAorUVQzX0NGTEFHUyA9IEBRVDNfQ0ZMQUdTQAorUVQzX0xJQlMgPSBAUVQzX0xJQlNACitRVDRfQ0ZMQUdTID0gQFFUNF9DRkxBR1NACitRVDRfTElCUyA9IEBRVDRfTElCU0AKK1JBTkxJQiA9IEBSQU5MSUJACitTRUQgPSBAU0VEQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NUT1cgPSBAU1RPV0AKK1NUUklQID0gQFNUUklQQAorVVNFX05MUyA9IEBVU0VfTkxTQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorVklTSUJJTElUWV9ISURERU5fQ0ZMQUdTID0gQFZJU0lCSUxJVFlfSElEREVOX0NGTEFHU0AKK1hHRVRURVhUID0gQFhHRVRURVhUQAorWE1MX0NGTEFHUyA9IEBYTUxfQ0ZMQUdTQAorWE1MX0xJQlMgPSBAWE1MX0xJQlNACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9BUiA9IEBhY19jdF9BUkAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKK2FjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK2FjeF9wdGhyZWFkX2NvbmZpZyA9IEBhY3hfcHRocmVhZF9jb25maWdACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2F2YWhpX3J1bnRpbWVfZGlyID0gQGF2YWhpX3J1bnRpbWVfZGlyQAorYXZhaGlfc29ja2V0ID0gQGF2YWhpX3NvY2tldEAKK2F2YWhpbG9jYWxlZGlyID0gQGF2YWhpbG9jYWxlZGlyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitoYXZlX3BrZ19jb25maWcgPSBAaGF2ZV9wa2dfY29uZmlnQAoraGF2ZV94bWx0b21hbiA9IEBoYXZlX3htbHRvbWFuQAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2ludGVyZmFjZXNkaXIgPSBAaW50ZXJmYWNlc2RpckAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAorcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3B5ZXhlY2RpciA9IEBweWV4ZWNkaXJACitweXRob25kaXIgPSBAcHl0aG9uZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzcmNkaXIgPSBAc3JjZGlyQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAorc3lzdGVtZHN5c3RlbXVuaXRkaXIgPSBAc3lzdGVtZHN5c3RlbXVuaXRkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKKworIyBUaGlzIGNvb2wgZGVidWcgdHJhcCB3b3JrcyBvbiBpMzg2L2djYyBvbmx5CitBTV9DRkxBR1MgPSAtSSQodG9wX3NyY2RpcikgJy1EREVCVUdfVFJBUD1fX2FzbV9fKCJpbnQgJCQzIiknCitARU5BQkxFX0NPTVBBVF9MSUJETlNfU0RfVFJVRUBASEFWRV9EQlVTX1RSVUVAYXZhaGlfY29tcGF0X2xpYmRuc19zZGRpciA9ICQoaW5jbHVkZWRpcikvYXZhaGktY29tcGF0LWxpYmRuc19zZAorQEVOQUJMRV9DT01QQVRfTElCRE5TX1NEX1RSVUVAQEhBVkVfREJVU19UUlVFQGF2YWhpX2NvbXBhdF9saWJkbnNfc2RfSEVBREVSUyA9IGRuc19zZC5oCitARU5BQkxFX0NPTVBBVF9MSUJETlNfU0RfVFJVRUBASEFWRV9EQlVTX1RSVUVAbGliX0xUTElCUkFSSUVTID0gbGliZG5zX3NkLmxhCitARU5BQkxFX0NPTVBBVF9MSUJETlNfU0RfVFJVRUBASEFWRV9EQlVTX1RSVUVAbGliZG5zX3NkX2xhX1NPVVJDRVMgPSBcCitARU5BQkxFX0NPTVBBVF9MSUJETlNfU0RfVFJVRUBASEFWRV9EQlVTX1RSVUVACWRuc19zZC5oIFwKK0BFTkFCTEVfQ09NUEFUX0xJQkROU19TRF9UUlVFQEBIQVZFX0RCVVNfVFJVRUAJY29tcGF0LmMgXAorQEVOQUJMRV9DT01QQVRfTElCRE5TX1NEX1RSVUVAQEhBVkVfREJVU19UUlVFQAl0eHQuYyBcCitARU5BQkxFX0NPTVBBVF9MSUJETlNfU0RfVFJVRUBASEFWRV9EQlVTX1RSVUVACXVuc3VwcG9ydGVkLmMgXAorQEVOQUJMRV9DT01QQVRfTElCRE5TX1NEX1RSVUVAQEhBVkVfREJVU19UUlVFQAl3YXJuLmMgd2Fybi5oCisKK0BFTkFCTEVfQ09NUEFUX0xJQkROU19TRF9UUlVFQEBIQVZFX0RCVVNfVFJVRUBsaWJkbnNfc2RfbGFfQ0ZMQUdTID0gJChBTV9DRkxBR1MpICQoUFRIUkVBRF9DRkxBR1MpCitARU5BQkxFX0NPTVBBVF9MSUJETlNfU0RfVFJVRUBASEFWRV9EQlVTX1RSVUVAbGliZG5zX3NkX2xhX0xERkxBR1MgPSAkKEFNX0xERkxBR1MpICAtdmVyc2lvbi1pbmZvICQoTElCQVZBSElfQ09NUEFUX0xJQkROU19TRF9WRVJTSU9OX0lORk8pICQoUFRIUkVBRF9MSUJTKSAkKFBUSFJFQURfQ0ZMQUdTKSAuLi9hdmFoaS1jb21tb24vbGliYXZhaGktY29tbW9uLmxhIC4uL2F2YWhpLWNsaWVudC9saWJhdmFoaS1jbGllbnQubGEKK0BFTkFCTEVfQ09NUEFUX0xJQkROU19TRF9UUlVFQEBIQVZFX0RCVVNfVFJVRUB0eHRfdGVzdF9TT1VSQ0VTID0gXAorQEVOQUJMRV9DT01QQVRfTElCRE5TX1NEX1RSVUVAQEhBVkVfREJVU19UUlVFQAlkbnNfc2QuaCBcCitARU5BQkxFX0NPTVBBVF9MSUJETlNfU0RfVFJVRUBASEFWRV9EQlVTX1RSVUVACXR4dC5jIFwKK0BFTkFCTEVfQ09NUEFUX0xJQkROU19TRF9UUlVFQEBIQVZFX0RCVVNfVFJVRUAJdHh0LXRlc3QuYyBcCitARU5BQkxFX0NPTVBBVF9MSUJETlNfU0RfVFJVRUBASEFWRV9EQlVTX1RSVUVACXdhcm4uYyB3YXJuLmgKKworQEVOQUJMRV9DT01QQVRfTElCRE5TX1NEX1RSVUVAQEhBVkVfREJVU19UUlVFQHR4dF90ZXN0X0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAkKFBUSFJFQURfQ0ZMQUdTKQorQEVOQUJMRV9DT01QQVRfTElCRE5TX1NEX1RSVUVAQEhBVkVfREJVU19UUlVFQHR4dF90ZXN0X0xEQUREID0gJChBTV9MREFERCkgJChQVEhSRUFEX0xJQlMpICQoUFRIUkVBRF9DRkxBR1MpIC4uL2F2YWhpLWNvbW1vbi9saWJhdmFoaS1jb21tb24ubGEKK0BFTkFCTEVfQ09NUEFUX0xJQkROU19TRF9UUlVFQEBIQVZFX0RCVVNfVFJVRUBudWxsX3Rlc3RfU09VUkNFUyA9IFwKK0BFTkFCTEVfQ09NUEFUX0xJQkROU19TRF9UUlVFQEBIQVZFX0RCVVNfVFJVRUAJZG5zX3NkLmggXAorQEVOQUJMRV9DT01QQVRfTElCRE5TX1NEX1RSVUVAQEhBVkVfREJVU19UUlVFQAljb21wYXQuYyBcCitARU5BQkxFX0NPTVBBVF9MSUJETlNfU0RfVFJVRUBASEFWRV9EQlVTX1RSVUVACW51bGwtdGVzdC5jIFwKK0BFTkFCTEVfQ09NUEFUX0xJQkROU19TRF9UUlVFQEBIQVZFX0RCVVNfVFJVRUAJd2Fybi5jIHdhcm4uaAorCitARU5BQkxFX0NPTVBBVF9MSUJETlNfU0RfVFJVRUBASEFWRV9EQlVTX1RSVUVAbnVsbF90ZXN0X0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAkKFBUSFJFQURfQ0ZMQUdTKQorQEVOQUJMRV9DT01QQVRfTElCRE5TX1NEX1RSVUVAQEhBVkVfREJVU19UUlVFQG51bGxfdGVzdF9MREFERCA9ICQoQU1fTERBREQpICQoUFRIUkVBRF9MSUJTKSAkKFBUSFJFQURfQ0ZMQUdTKSAuLi9hdmFoaS1jb21tb24vbGliYXZhaGktY29tbW9uLmxhIC4uL2F2YWhpLWNsaWVudC9saWJhdmFoaS1jbGllbnQubGEKK0BFTkFCTEVfQ09NUEFUX0xJQkROU19TRF9UUlVFQEBIQVZFX0RCVVNfVFJVRUBDTEVBTkZJTEVTID0gbGliZG5zX3NkLXRlc3QubyBsaWJkbnNfc2QtdGVzdAorYWxsOiBhbGwtYW0KKworLlNVRkZJWEVTOgorLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagorJChzcmNkaXIpL01ha2VmaWxlLmluOiAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gYXZhaGktY29tcGF0LWxpYmRuc19zZC9NYWtlZmlsZSc7IFwKKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gYXZhaGktY29tcGF0LWxpYmRuc19zZC9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CitpbnN0YWxsLWxpYkxUTElCUkFSSUVTOiAkKGxpYl9MVExJQlJBUklFUykKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwl0ZXN0IC16ICIkKGxpYmRpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKGxpYmRpcikiCisJQGxpc3Q9JyQobGliX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQobGliZGlyKSIgfHwgbGlzdD07IFwKKwlsaXN0Mj07IGZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJHA7IHRoZW4gXAorCSAgICBsaXN0Mj0iJCRsaXN0MiAkJHAiOyBcCisJICBlbHNlIDo7IGZpOyBcCisJZG9uZTsgXAorCXRlc3QgLXogIiQkbGlzdDIiIHx8IHsgXAorCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICckKERFU1RESVIpJChsaWJkaXIpJyI7IFwKKwkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICIkKERFU1RESVIpJChsaWJkaXIpIjsgXAorCX0KKwordW5pbnN0YWxsLWxpYkxUTElCUkFSSUVTOgorCUAkKE5PUk1BTF9VTklOU1RBTEwpCisJQGxpc3Q9JyQobGliX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQobGliZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgICQoYW1fX3N0cmlwX2RpcikgXAorCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICckKERFU1RESVIpJChsaWJkaXIpLyQkZiciOyBcCisJICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAiJChERVNURElSKSQobGliZGlyKS8kJGYiOyBcCisJZG9uZQorCitjbGVhbi1saWJMVExJQlJBUklFUzoKKwktdGVzdCAteiAiJChsaWJfTFRMSUJSQVJJRVMpIiB8fCBybSAtZiAkKGxpYl9MVExJQlJBUklFUykKKwlAbGlzdD0nJChsaWJfTFRMSUJSQVJJRVMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBkaXI9ImBlY2hvICQkcCB8IHNlZCAtZSAnc3wvW14vXSokJHx8J2AiOyBcCisJICB0ZXN0ICIkJGRpciIgIT0gIiQkcCIgfHwgZGlyPS47IFwKKwkgIGVjaG8gInJtIC1mIFwiJCR7ZGlyfS9zb19sb2NhdGlvbnNcIiI7IFwKKwkgIHJtIC1mICIkJHtkaXJ9L3NvX2xvY2F0aW9ucyI7IFwKKwlkb25lCitsaWJkbnNfc2QubGE6ICQobGliZG5zX3NkX2xhX09CSkVDVFMpICQobGliZG5zX3NkX2xhX0RFUEVOREVOQ0lFUykgJChFWFRSQV9saWJkbnNfc2RfbGFfREVQRU5ERU5DSUVTKSAKKwkkKEFNX1ZfQ0NMRCkkKGxpYmRuc19zZF9sYV9MSU5LKSAkKGFtX2xpYmRuc19zZF9sYV9ycGF0aCkgJChsaWJkbnNfc2RfbGFfT0JKRUNUUykgJChsaWJkbnNfc2RfbGFfTElCQUREKSAkKExJQlMpCisKK2NsZWFuLW5vaW5zdFBST0dSQU1TOgorCUBsaXN0PSckKG5vaW5zdF9QUk9HUkFNUyknOyB0ZXN0IC1uICIkJGxpc3QiIHx8IGV4aXQgMDsgXAorCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCisJcm0gLWYgJCRsaXN0IHx8IGV4aXQgJCQ/OyBcCisJdGVzdCAtbiAiJChFWEVFWFQpIiB8fCBleGl0IDA7IFwKKwlsaXN0PWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgJ3MvJChFWEVFWFQpJCQvLydgOyBcCisJZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKKwlybSAtZiAkJGxpc3QKK251bGwtdGVzdCQoRVhFRVhUKTogJChudWxsX3Rlc3RfT0JKRUNUUykgJChudWxsX3Rlc3RfREVQRU5ERU5DSUVTKSAkKEVYVFJBX251bGxfdGVzdF9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBudWxsLXRlc3QkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKG51bGxfdGVzdF9MSU5LKSAkKG51bGxfdGVzdF9PQkpFQ1RTKSAkKG51bGxfdGVzdF9MREFERCkgJChMSUJTKQordHh0LXRlc3QkKEVYRUVYVCk6ICQodHh0X3Rlc3RfT0JKRUNUUykgJCh0eHRfdGVzdF9ERVBFTkRFTkNJRVMpICQoRVhUUkFfdHh0X3Rlc3RfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgdHh0LXRlc3QkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKHR4dF90ZXN0X0xJTkspICQodHh0X3Rlc3RfT0JKRUNUUykgJCh0eHRfdGVzdF9MREFERCkgJChMSUJTKQorCittb3N0bHljbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLiQoT0JKRVhUKQorCitkaXN0Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi50YWIuYworCitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZG5zX3NkX2xhLWNvbXBhdC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmRuc19zZF9sYS10eHQuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJkbnNfc2RfbGEtdW5zdXBwb3J0ZWQuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJkbnNfc2RfbGEtd2Fybi5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL251bGxfdGVzdC1jb21wYXQuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL251bGxfdGVzdC1udWxsLXRlc3QuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL251bGxfdGVzdC13YXJuLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS90eHRfdGVzdC10eHQtdGVzdC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvdHh0X3Rlc3QtdHh0LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS90eHRfdGVzdC13YXJuLlBvQGFtX19xdW90ZUAKKworLmMubzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgJDwKKworLmMub2JqOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIGAkKENZR1BBVEhfVykgJyQ8J2AKKworLmMubG86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8CisKK2xpYmRuc19zZF9sYS1jb21wYXQubG86IGNvbXBhdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZG5zX3NkX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJkbnNfc2RfbGEtY29tcGF0LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJkbnNfc2RfbGEtY29tcGF0LlRwbyAtYyAtbyBsaWJkbnNfc2RfbGEtY29tcGF0LmxvIGB0ZXN0IC1mICdjb21wYXQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgY29tcGF0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmRuc19zZF9sYS1jb21wYXQuVHBvICQoREVQRElSKS9saWJkbnNfc2RfbGEtY29tcGF0LlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2NvbXBhdC5jJyBvYmplY3Q9J2xpYmRuc19zZF9sYS1jb21wYXQubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJkbnNfc2RfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZG5zX3NkX2xhLWNvbXBhdC5sbyBgdGVzdCAtZiAnY29tcGF0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGNvbXBhdC5jCisKK2xpYmRuc19zZF9sYS10eHQubG86IHR4dC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZG5zX3NkX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJkbnNfc2RfbGEtdHh0LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJkbnNfc2RfbGEtdHh0LlRwbyAtYyAtbyBsaWJkbnNfc2RfbGEtdHh0LmxvIGB0ZXN0IC1mICd0eHQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdHh0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmRuc19zZF9sYS10eHQuVHBvICQoREVQRElSKS9saWJkbnNfc2RfbGEtdHh0LlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3R4dC5jJyBvYmplY3Q9J2xpYmRuc19zZF9sYS10eHQubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJkbnNfc2RfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZG5zX3NkX2xhLXR4dC5sbyBgdGVzdCAtZiAndHh0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHR4dC5jCisKK2xpYmRuc19zZF9sYS11bnN1cHBvcnRlZC5sbzogdW5zdXBwb3J0ZWQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmRuc19zZF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZG5zX3NkX2xhLXVuc3VwcG9ydGVkLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJkbnNfc2RfbGEtdW5zdXBwb3J0ZWQuVHBvIC1jIC1vIGxpYmRuc19zZF9sYS11bnN1cHBvcnRlZC5sbyBgdGVzdCAtZiAndW5zdXBwb3J0ZWQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdW5zdXBwb3J0ZWQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZG5zX3NkX2xhLXVuc3VwcG9ydGVkLlRwbyAkKERFUERJUikvbGliZG5zX3NkX2xhLXVuc3VwcG9ydGVkLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3Vuc3VwcG9ydGVkLmMnIG9iamVjdD0nbGliZG5zX3NkX2xhLXVuc3VwcG9ydGVkLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZG5zX3NkX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmRuc19zZF9sYS11bnN1cHBvcnRlZC5sbyBgdGVzdCAtZiAndW5zdXBwb3J0ZWQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdW5zdXBwb3J0ZWQuYworCitsaWJkbnNfc2RfbGEtd2Fybi5sbzogd2Fybi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZG5zX3NkX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJkbnNfc2RfbGEtd2Fybi5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZG5zX3NkX2xhLXdhcm4uVHBvIC1jIC1vIGxpYmRuc19zZF9sYS13YXJuLmxvIGB0ZXN0IC1mICd3YXJuLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHdhcm4uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZG5zX3NkX2xhLXdhcm4uVHBvICQoREVQRElSKS9saWJkbnNfc2RfbGEtd2Fybi5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSd3YXJuLmMnIG9iamVjdD0nbGliZG5zX3NkX2xhLXdhcm4ubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJkbnNfc2RfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZG5zX3NkX2xhLXdhcm4ubG8gYHRlc3QgLWYgJ3dhcm4uYycgfHwgZWNobyAnJChzcmNkaXIpLydgd2Fybi5jCisKK251bGxfdGVzdC1jb21wYXQubzogY29tcGF0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChudWxsX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIG51bGxfdGVzdC1jb21wYXQubyAtTUQgLU1QIC1NRiAkKERFUERJUikvbnVsbF90ZXN0LWNvbXBhdC5UcG8gLWMgLW8gbnVsbF90ZXN0LWNvbXBhdC5vIGB0ZXN0IC1mICdjb21wYXQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgY29tcGF0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL251bGxfdGVzdC1jb21wYXQuVHBvICQoREVQRElSKS9udWxsX3Rlc3QtY29tcGF0LlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nY29tcGF0LmMnIG9iamVjdD0nbnVsbF90ZXN0LWNvbXBhdC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChudWxsX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbnVsbF90ZXN0LWNvbXBhdC5vIGB0ZXN0IC1mICdjb21wYXQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgY29tcGF0LmMKKworbnVsbF90ZXN0LWNvbXBhdC5vYmo6IGNvbXBhdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobnVsbF90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBudWxsX3Rlc3QtY29tcGF0Lm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvbnVsbF90ZXN0LWNvbXBhdC5UcG8gLWMgLW8gbnVsbF90ZXN0LWNvbXBhdC5vYmogYGlmIHRlc3QgLWYgJ2NvbXBhdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2NvbXBhdC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9jb21wYXQuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbnVsbF90ZXN0LWNvbXBhdC5UcG8gJChERVBESVIpL251bGxfdGVzdC1jb21wYXQuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdjb21wYXQuYycgb2JqZWN0PSdudWxsX3Rlc3QtY29tcGF0Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobnVsbF90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIG51bGxfdGVzdC1jb21wYXQub2JqIGBpZiB0ZXN0IC1mICdjb21wYXQuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdjb21wYXQuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvY29tcGF0LmMnOyBmaWAKKworbnVsbF90ZXN0LW51bGwtdGVzdC5vOiBudWxsLXRlc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKG51bGxfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbnVsbF90ZXN0LW51bGwtdGVzdC5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9udWxsX3Rlc3QtbnVsbC10ZXN0LlRwbyAtYyAtbyBudWxsX3Rlc3QtbnVsbC10ZXN0Lm8gYHRlc3QgLWYgJ251bGwtdGVzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BudWxsLXRlc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbnVsbF90ZXN0LW51bGwtdGVzdC5UcG8gJChERVBESVIpL251bGxfdGVzdC1udWxsLXRlc3QuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdudWxsLXRlc3QuYycgb2JqZWN0PSdudWxsX3Rlc3QtbnVsbC10ZXN0Lm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKG51bGxfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBudWxsX3Rlc3QtbnVsbC10ZXN0Lm8gYHRlc3QgLWYgJ251bGwtdGVzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BudWxsLXRlc3QuYworCitudWxsX3Rlc3QtbnVsbC10ZXN0Lm9iajogbnVsbC10ZXN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChudWxsX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIG51bGxfdGVzdC1udWxsLXRlc3Qub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9udWxsX3Rlc3QtbnVsbC10ZXN0LlRwbyAtYyAtbyBudWxsX3Rlc3QtbnVsbC10ZXN0Lm9iaiBgaWYgdGVzdCAtZiAnbnVsbC10ZXN0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnbnVsbC10ZXN0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL251bGwtdGVzdC5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9udWxsX3Rlc3QtbnVsbC10ZXN0LlRwbyAkKERFUERJUikvbnVsbF90ZXN0LW51bGwtdGVzdC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J251bGwtdGVzdC5jJyBvYmplY3Q9J251bGxfdGVzdC1udWxsLXRlc3Qub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChudWxsX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbnVsbF90ZXN0LW51bGwtdGVzdC5vYmogYGlmIHRlc3QgLWYgJ251bGwtdGVzdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ251bGwtdGVzdC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9udWxsLXRlc3QuYyc7IGZpYAorCitudWxsX3Rlc3Qtd2Fybi5vOiB3YXJuLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChudWxsX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIG51bGxfdGVzdC13YXJuLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL251bGxfdGVzdC13YXJuLlRwbyAtYyAtbyBudWxsX3Rlc3Qtd2Fybi5vIGB0ZXN0IC1mICd3YXJuLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHdhcm4uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbnVsbF90ZXN0LXdhcm4uVHBvICQoREVQRElSKS9udWxsX3Rlc3Qtd2Fybi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3dhcm4uYycgb2JqZWN0PSdudWxsX3Rlc3Qtd2Fybi5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChudWxsX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbnVsbF90ZXN0LXdhcm4ubyBgdGVzdCAtZiAnd2Fybi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B3YXJuLmMKKworbnVsbF90ZXN0LXdhcm4ub2JqOiB3YXJuLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChudWxsX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIG51bGxfdGVzdC13YXJuLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvbnVsbF90ZXN0LXdhcm4uVHBvIC1jIC1vIG51bGxfdGVzdC13YXJuLm9iaiBgaWYgdGVzdCAtZiAnd2Fybi5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3dhcm4uYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2Rpcikvd2Fybi5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9udWxsX3Rlc3Qtd2Fybi5UcG8gJChERVBESVIpL251bGxfdGVzdC13YXJuLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nd2Fybi5jJyBvYmplY3Q9J251bGxfdGVzdC13YXJuLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobnVsbF90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIG51bGxfdGVzdC13YXJuLm9iaiBgaWYgdGVzdCAtZiAnd2Fybi5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3dhcm4uYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2Rpcikvd2Fybi5jJzsgZmlgCisKK3R4dF90ZXN0LXR4dC5vOiB0eHQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHR4dF90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCB0eHRfdGVzdC10eHQubyAtTUQgLU1QIC1NRiAkKERFUERJUikvdHh0X3Rlc3QtdHh0LlRwbyAtYyAtbyB0eHRfdGVzdC10eHQubyBgdGVzdCAtZiAndHh0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHR4dC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS90eHRfdGVzdC10eHQuVHBvICQoREVQRElSKS90eHRfdGVzdC10eHQuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSd0eHQuYycgb2JqZWN0PSd0eHRfdGVzdC10eHQubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQodHh0X3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gdHh0X3Rlc3QtdHh0Lm8gYHRlc3QgLWYgJ3R4dC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B0eHQuYworCit0eHRfdGVzdC10eHQub2JqOiB0eHQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHR4dF90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCB0eHRfdGVzdC10eHQub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS90eHRfdGVzdC10eHQuVHBvIC1jIC1vIHR4dF90ZXN0LXR4dC5vYmogYGlmIHRlc3QgLWYgJ3R4dC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3R4dC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS90eHQuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvdHh0X3Rlc3QtdHh0LlRwbyAkKERFUERJUikvdHh0X3Rlc3QtdHh0LlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ndHh0LmMnIG9iamVjdD0ndHh0X3Rlc3QtdHh0Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQodHh0X3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gdHh0X3Rlc3QtdHh0Lm9iaiBgaWYgdGVzdCAtZiAndHh0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAndHh0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3R4dC5jJzsgZmlgCisKK3R4dF90ZXN0LXR4dC10ZXN0Lm86IHR4dC10ZXN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh0eHRfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgdHh0X3Rlc3QtdHh0LXRlc3QubyAtTUQgLU1QIC1NRiAkKERFUERJUikvdHh0X3Rlc3QtdHh0LXRlc3QuVHBvIC1jIC1vIHR4dF90ZXN0LXR4dC10ZXN0Lm8gYHRlc3QgLWYgJ3R4dC10ZXN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHR4dC10ZXN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3R4dF90ZXN0LXR4dC10ZXN0LlRwbyAkKERFUERJUikvdHh0X3Rlc3QtdHh0LXRlc3QuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSd0eHQtdGVzdC5jJyBvYmplY3Q9J3R4dF90ZXN0LXR4dC10ZXN0Lm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHR4dF90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHR4dF90ZXN0LXR4dC10ZXN0Lm8gYHRlc3QgLWYgJ3R4dC10ZXN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHR4dC10ZXN0LmMKKwordHh0X3Rlc3QtdHh0LXRlc3Qub2JqOiB0eHQtdGVzdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQodHh0X3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHR4dF90ZXN0LXR4dC10ZXN0Lm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvdHh0X3Rlc3QtdHh0LXRlc3QuVHBvIC1jIC1vIHR4dF90ZXN0LXR4dC10ZXN0Lm9iaiBgaWYgdGVzdCAtZiAndHh0LXRlc3QuYyc7IHRoZW4gJChDWUdQQVRIX1cpICd0eHQtdGVzdC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS90eHQtdGVzdC5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS90eHRfdGVzdC10eHQtdGVzdC5UcG8gJChERVBESVIpL3R4dF90ZXN0LXR4dC10ZXN0LlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ndHh0LXRlc3QuYycgb2JqZWN0PSd0eHRfdGVzdC10eHQtdGVzdC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHR4dF90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHR4dF90ZXN0LXR4dC10ZXN0Lm9iaiBgaWYgdGVzdCAtZiAndHh0LXRlc3QuYyc7IHRoZW4gJChDWUdQQVRIX1cpICd0eHQtdGVzdC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS90eHQtdGVzdC5jJzsgZmlgCisKK3R4dF90ZXN0LXdhcm4ubzogd2Fybi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQodHh0X3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHR4dF90ZXN0LXdhcm4ubyAtTUQgLU1QIC1NRiAkKERFUERJUikvdHh0X3Rlc3Qtd2Fybi5UcG8gLWMgLW8gdHh0X3Rlc3Qtd2Fybi5vIGB0ZXN0IC1mICd3YXJuLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHdhcm4uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvdHh0X3Rlc3Qtd2Fybi5UcG8gJChERVBESVIpL3R4dF90ZXN0LXdhcm4uUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSd3YXJuLmMnIG9iamVjdD0ndHh0X3Rlc3Qtd2Fybi5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh0eHRfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyB0eHRfdGVzdC13YXJuLm8gYHRlc3QgLWYgJ3dhcm4uYycgfHwgZWNobyAnJChzcmNkaXIpLydgd2Fybi5jCisKK3R4dF90ZXN0LXdhcm4ub2JqOiB3YXJuLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh0eHRfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgdHh0X3Rlc3Qtd2Fybi5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL3R4dF90ZXN0LXdhcm4uVHBvIC1jIC1vIHR4dF90ZXN0LXdhcm4ub2JqIGBpZiB0ZXN0IC1mICd3YXJuLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnd2Fybi5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS93YXJuLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3R4dF90ZXN0LXdhcm4uVHBvICQoREVQRElSKS90eHRfdGVzdC13YXJuLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nd2Fybi5jJyBvYmplY3Q9J3R4dF90ZXN0LXdhcm4ub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh0eHRfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyB0eHRfdGVzdC13YXJuLm9iaiBgaWYgdGVzdCAtZiAnd2Fybi5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3dhcm4uYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2Rpcikvd2Fybi5jJzsgZmlgCisKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJzCitpbnN0YWxsLWF2YWhpX2NvbXBhdF9saWJkbnNfc2RIRUFERVJTOiAkKGF2YWhpX2NvbXBhdF9saWJkbnNfc2RfSEVBREVSUykKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwl0ZXN0IC16ICIkKGF2YWhpX2NvbXBhdF9saWJkbnNfc2RkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChhdmFoaV9jb21wYXRfbGliZG5zX3NkZGlyKSIKKwlAbGlzdD0nJChhdmFoaV9jb21wYXRfbGliZG5zX3NkX0hFQURFUlMpJzsgdGVzdCAtbiAiJChhdmFoaV9jb21wYXRfbGliZG5zX3NkZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICBlY2hvICIkJGQkJHAiOyBcCisJZG9uZSB8ICQoYW1fX2Jhc2VfbGlzdCkgfCBcCisJd2hpbGUgcmVhZCBmaWxlczsgZG8gXAorCSAgZWNobyAiICQoSU5TVEFMTF9IRUFERVIpICQkZmlsZXMgJyQoREVTVERJUikkKGF2YWhpX2NvbXBhdF9saWJkbnNfc2RkaXIpJyI7IFwKKwkgICQoSU5TVEFMTF9IRUFERVIpICQkZmlsZXMgIiQoREVTVERJUikkKGF2YWhpX2NvbXBhdF9saWJkbnNfc2RkaXIpIiB8fCBleGl0ICQkPzsgXAorCWRvbmUKKwordW5pbnN0YWxsLWF2YWhpX2NvbXBhdF9saWJkbnNfc2RIRUFERVJTOgorCUAkKE5PUk1BTF9VTklOU1RBTEwpCisJQGxpc3Q9JyQoYXZhaGlfY29tcGF0X2xpYmRuc19zZF9IRUFERVJTKSc7IHRlc3QgLW4gIiQoYXZhaGlfY29tcGF0X2xpYmRuc19zZGRpcikiIHx8IGxpc3Q9OyBcCisJZmlsZXM9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7IFwKKwlkaXI9JyQoREVTVERJUikkKGF2YWhpX2NvbXBhdF9saWJkbnNfc2RkaXIpJzsgJChhbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyKQorCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCW1raWQgLWZJRCAkJHVuaXF1ZQordGFnczogVEFHUworCitUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXNldCB4OyBcCisJaGVyZT1gcHdkYDsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlzaGlmdDsgXAorCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisJICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCisJICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAorCSAgZWxzZSBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAkJHVuaXF1ZTsgXAorCSAgZmk7IFwKKwlmaQorY3RhZ3M6IENUQUdTCitDVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCisJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCisJICAgICAkJHVuaXF1ZQorCitHVEFHUzoKKwloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgorCitkaXN0Y2xlYW4tdGFnczoKKwktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1hbQorYWxsLWFtOiBNYWtlZmlsZSAkKExUTElCUkFSSUVTKSAkKFBST0dSQU1TKSAkKEhFQURFUlMpCitpbnN0YWxsZGlyczoKKwlmb3IgZGlyIGluICIkKERFU1RESVIpJChsaWJkaXIpIiAiJChERVNURElSKSQoYXZhaGlfY29tcGF0X2xpYmRuc19zZGRpcikiOyBkbyBcCisJICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCisJZG9uZQoraW5zdGFsbDogaW5zdGFsbC1hbQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCit1bmluc3RhbGw6IHVuaW5zdGFsbC1hbQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQoraW5zdGFsbC1zdHJpcDoKKwlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICAgICAgaW5zdGFsbDsgXAorCWVsc2UgXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCisJZmkKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ0xFQU5GSUxFUykiIHx8IHJtIC1mICQoQ0xFQU5GSUxFUykKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYkxUTElCUkFSSUVTIGNsZWFuLWxpYnRvb2wgXAorCWNsZWFuLW5vaW5zdFBST0dSQU1TIG1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLWF2YWhpX2NvbXBhdF9saWJkbnNfc2RIRUFERVJTCisKK2luc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQorCitpbnN0YWxsLWR2aS1hbToKKworaW5zdGFsbC1leGVjLWFtOiBpbnN0YWxsLWxpYkxUTElCUkFSSUVTCisKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCisKK2luc3RhbGwtaHRtbC1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1pbmZvLWFtOgorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCisKK2luc3RhbGwtcGRmLWFtOgorCitpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCisKK2luc3RhbGwtcHMtYW06CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtYW0KKworcGRmLWFtOgorCitwczogcHMtYW0KKworcHMtYW06CisKK3VuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWF2YWhpX2NvbXBhdF9saWJkbnNfc2RIRUFERVJTIFwKKwl1bmluc3RhbGwtbGliTFRMSUJSQVJJRVMKKworLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAorCisuUEhPTlk6IENUQUdTIEdUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCisJY2xlYW4tbGliTFRMSUJSQVJJRVMgY2xlYW4tbGlidG9vbCBjbGVhbi1ub2luc3RQUk9HUkFNUyBjdGFncyBcCisJZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKKwlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCisJaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIFwKKwlpbnN0YWxsLWF2YWhpX2NvbXBhdF9saWJkbnNfc2RIRUFERVJTIGluc3RhbGwtZGF0YSBcCisJaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBcCisJaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIFwKKwlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1saWJMVExJQlJBUklFUyBpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBcCisJaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgXAorCWluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBcCisJbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWNvbXBpbGUgXAorCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKKwl0YWdzIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gXAorCXVuaW5zdGFsbC1hdmFoaV9jb21wYXRfbGliZG5zX3NkSEVBREVSUyBcCisJdW5pbnN0YWxsLWxpYkxUTElCUkFSSUVTCisKKworIyBZb3UgY2FuIHRlc3QgdGhlIGNvbXBhdGliaWxpdHkgbGF5ZXIgYnkgc3RpY2tpbmcgaW4gbUROU1Jlc3BvbmRlcidzCisjIGRucy1zZC5jIHNvdXJjZSBoZXJlLCBuYW1pbmcgaXQgImxpYmRuc19zZC10ZXN0LmMiIGFuZCBydW5uaW5nICJtYWtlCisjIGxpYmRuc19zZC10ZXN0IiBtYW51YWxseS4gV2UgZG8gbm90IGRpc3RyaWJ1dGUgdGhhdCBmaWxlIGR1ZSB0bworIyBsaWNlbnNpbmcgcmVzdHJpY3Rpb25zLgorCitARU5BQkxFX0NPTVBBVF9MSUJETlNfU0RfVFJVRUBASEFWRV9EQlVTX1RSVUVAbGliZG5zX3NkLXRlc3Q6IGxpYmRuc19zZC10ZXN0LmMgbGliZG5zX3NkLmxhCitARU5BQkxFX0NPTVBBVF9MSUJETlNfU0RfVFJVRUBASEFWRV9EQlVTX1RSVUVACSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDQykgJChBTV9DRkxBR1MpICQoUFRIUkVBRF9DRkxBR1MpIC1vIGxpYmRuc19zZC10ZXN0Lm8gLWMgbGliZG5zX3NkLXRlc3QuYworQEVOQUJMRV9DT01QQVRfTElCRE5TX1NEX1RSVUVAQEhBVkVfREJVU19UUlVFQAkkKExJQlRPT0wpIC0tbW9kZT1saW5rICQoQ0MpICQoQU1fQ0ZMQUdTKSAkKFBUSFJFQURfQ0ZMQUdTKSAtbyBsaWJkbnNfc2QtdGVzdCBsaWJkbnNfc2QtdGVzdC5vICQoUFRIUkVBRF9MSUJTKSAuLi9hdmFoaS1jb21tb24vbGliYXZhaGktY29tbW9uLmxhIGxpYmRuc19zZC5sYQorCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktY29tcGF0LWxpYmRuc19zZC9jb21wYXQuYyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtbGliZG5zX3NkL2NvbXBhdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlYTM1OWUKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tcGF0LWxpYmRuc19zZC9jb21wYXQuYwpAQCAtMCwwICsxLDEzNzIgQEAKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKworI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9zaW1wbGUtd2F0Y2guaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vbWFsbG9jLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2Vycm9yLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2RvbWFpbi5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9hbHRlcm5hdGl2ZS5oPgorCisjaW5jbHVkZSA8YXZhaGktY2xpZW50L2NsaWVudC5oPgorI2luY2x1ZGUgPGF2YWhpLWNsaWVudC9wdWJsaXNoLmg+CisjaW5jbHVkZSA8YXZhaGktY2xpZW50L2xvb2t1cC5oPgorCisjaW5jbHVkZSAid2Fybi5oIgorI2luY2x1ZGUgImRuc19zZC5oIgorCitlbnVtIHsKKyAgICBDT01NQU5EX1BPTEwgPSAncCcsCisgICAgQ09NTUFORF9RVUlUID0gJ3EnLAorICAgIENPTU1BTkRfUE9MTF9ET05FID0gJ1AnLAorICAgIENPTU1BTkRfUE9MTF9GQUlMRUQgPSAnRicKK307CisKK3N0cnVjdCB0eXBlX2luZm8geworICAgIGNoYXIgKnR5cGU7CisgICAgQXZhaGlTdHJpbmdMaXN0ICpzdWJ0eXBlczsKKyAgICBpbnQgbl9zdWJ0eXBlczsKK307CisKK3N0cnVjdCBfRE5TU2VydmljZVJlZl90IHsKKyAgICBpbnQgbl9yZWY7CisKKyAgICBBdmFoaVNpbXBsZVBvbGwgKnNpbXBsZV9wb2xsOworCisgICAgaW50IHRocmVhZF9mZCwgbWFpbl9mZDsKKworICAgIHB0aHJlYWRfdCB0aHJlYWQ7CisgICAgaW50IHRocmVhZF9ydW5uaW5nOworCisgICAgcHRocmVhZF9tdXRleF90IG11dGV4OworCisgICAgdm9pZCAqY29udGV4dDsKKyAgICBETlNTZXJ2aWNlQnJvd3NlUmVwbHkgc2VydmljZV9icm93c2VyX2NhbGxiYWNrOworICAgIEROU1NlcnZpY2VSZXNvbHZlUmVwbHkgc2VydmljZV9yZXNvbHZlcl9jYWxsYmFjazsKKyAgICBETlNTZXJ2aWNlRG9tYWluRW51bVJlcGx5IGRvbWFpbl9icm93c2VyX2NhbGxiYWNrOworICAgIEROU1NlcnZpY2VSZWdpc3RlclJlcGx5IHNlcnZpY2VfcmVnaXN0ZXJfY2FsbGJhY2s7CisgICAgRE5TU2VydmljZVF1ZXJ5UmVjb3JkUmVwbHkgcXVlcnlfcmVzb2x2ZXJfY2FsbGJhY2s7CisKKyAgICBBdmFoaUNsaWVudCAqY2xpZW50OworICAgIEF2YWhpU2VydmljZUJyb3dzZXIgKnNlcnZpY2VfYnJvd3NlcjsKKyAgICBBdmFoaVNlcnZpY2VSZXNvbHZlciAqc2VydmljZV9yZXNvbHZlcjsKKyAgICBBdmFoaURvbWFpbkJyb3dzZXIgKmRvbWFpbl9icm93c2VyOworICAgIEF2YWhpUmVjb3JkQnJvd3NlciAqcmVjb3JkX2Jyb3dzZXI7CisKKyAgICBzdHJ1Y3QgdHlwZV9pbmZvIHR5cGVfaW5mbzsKKyAgICBjaGFyICpzZXJ2aWNlX25hbWUsICpzZXJ2aWNlX25hbWVfY2hvc2VuLCAqc2VydmljZV9kb21haW4sICpzZXJ2aWNlX2hvc3Q7CisgICAgdWludDE2X3Qgc2VydmljZV9wb3J0OworICAgIEF2YWhpSWZJbmRleCBzZXJ2aWNlX2ludGVyZmFjZTsKKyAgICBBdmFoaVN0cmluZ0xpc3QgKnNlcnZpY2VfdHh0OworCisgICAgQXZhaGlFbnRyeUdyb3VwICplbnRyeV9ncm91cDsKK307CisKKyNkZWZpbmUgQVNTRVJUX1NVQ0NFU1MocikgeyBpbnQgX19yZXQgPSAocik7IGFzc2VydChfX3JldCA9PSAwKTsgfQorCitzdGF0aWMgRE5TU2VydmljZUVycm9yVHlwZSBtYXBfZXJyb3IoaW50IGVycm9yKSB7CisgICAgc3dpdGNoIChlcnJvcikgeworICAgICAgICBjYXNlIEFWQUhJX09LIDoKKyAgICAgICAgICAgIHJldHVybiBrRE5TU2VydmljZUVycl9Ob0Vycm9yOworCisgICAgICAgIGNhc2UgQVZBSElfRVJSX0JBRF9TVEFURSA6CisgICAgICAgICAgICByZXR1cm4ga0ROU1NlcnZpY2VFcnJfQmFkU3RhdGU7CisKKyAgICAgICAgY2FzZSBBVkFISV9FUlJfSU5WQUxJRF9IT1NUX05BTUU6CisgICAgICAgIGNhc2UgQVZBSElfRVJSX0lOVkFMSURfRE9NQUlOX05BTUU6CisgICAgICAgIGNhc2UgQVZBSElfRVJSX0lOVkFMSURfVFRMOgorICAgICAgICBjYXNlIEFWQUhJX0VSUl9JU19QQVRURVJOOgorICAgICAgICBjYXNlIEFWQUhJX0VSUl9JTlZBTElEX1JFQ09SRDoKKyAgICAgICAgY2FzZSBBVkFISV9FUlJfSU5WQUxJRF9TRVJWSUNFX05BTUU6CisgICAgICAgIGNhc2UgQVZBSElfRVJSX0lOVkFMSURfU0VSVklDRV9UWVBFOgorICAgICAgICBjYXNlIEFWQUhJX0VSUl9JTlZBTElEX1BPUlQ6CisgICAgICAgIGNhc2UgQVZBSElfRVJSX0lOVkFMSURfS0VZOgorICAgICAgICBjYXNlIEFWQUhJX0VSUl9JTlZBTElEX0FERFJFU1M6CisgICAgICAgIGNhc2UgQVZBSElfRVJSX0lOVkFMSURfU0VSVklDRV9TVUJUWVBFOgorICAgICAgICAgICAgcmV0dXJuIGtETlNTZXJ2aWNlRXJyX0JhZFBhcmFtOworCisKKyAgICAgICAgY2FzZSBBVkFISV9FUlJfQ09MTElTSU9OOgorICAgICAgICAgICAgcmV0dXJuIGtETlNTZXJ2aWNlRXJyX05hbWVDb25mbGljdDsKKworICAgICAgICBjYXNlIEFWQUhJX0VSUl9UT09fTUFOWV9DTElFTlRTOgorICAgICAgICBjYXNlIEFWQUhJX0VSUl9UT09fTUFOWV9PQkpFQ1RTOgorICAgICAgICBjYXNlIEFWQUhJX0VSUl9UT09fTUFOWV9FTlRSSUVTOgorICAgICAgICBjYXNlIEFWQUhJX0VSUl9BQ0NFU1NfREVOSUVEOgorICAgICAgICAgICAgcmV0dXJuIGtETlNTZXJ2aWNlRXJyX1JlZnVzZWQ7CisKKyAgICAgICAgY2FzZSBBVkFISV9FUlJfSU5WQUxJRF9PUEVSQVRJT046CisgICAgICAgIGNhc2UgQVZBSElfRVJSX0lOVkFMSURfT0JKRUNUOgorICAgICAgICAgICAgcmV0dXJuIGtETlNTZXJ2aWNlRXJyX0ludmFsaWQ7CisKKyAgICAgICAgY2FzZSBBVkFISV9FUlJfTk9fTUVNT1JZOgorICAgICAgICAgICAgcmV0dXJuIGtETlNTZXJ2aWNlRXJyX05vTWVtb3J5OworCisgICAgICAgIGNhc2UgQVZBSElfRVJSX0lOVkFMSURfSU5URVJGQUNFOgorICAgICAgICBjYXNlIEFWQUhJX0VSUl9JTlZBTElEX1BST1RPQ09MOgorICAgICAgICAgICAgcmV0dXJuIGtETlNTZXJ2aWNlRXJyX0JhZEludGVyZmFjZUluZGV4OworCisgICAgICAgIGNhc2UgQVZBSElfRVJSX0lOVkFMSURfRkxBR1M6CisgICAgICAgICAgICByZXR1cm4ga0ROU1NlcnZpY2VFcnJfQmFkRmxhZ3M7CisKKyAgICAgICAgY2FzZSBBVkFISV9FUlJfTk9UX0ZPVU5EOgorICAgICAgICAgICAgcmV0dXJuIGtETlNTZXJ2aWNlRXJyX05vU3VjaE5hbWU7CisKKyAgICAgICAgY2FzZSBBVkFISV9FUlJfVkVSU0lPTl9NSVNNQVRDSDoKKyAgICAgICAgICAgIHJldHVybiBrRE5TU2VydmljZUVycl9JbmNvbXBhdGlibGU7CisKKyAgICAgICAgY2FzZSBBVkFISV9FUlJfTk9fTkVUV09SSzoKKyAgICAgICAgY2FzZSBBVkFISV9FUlJfT1M6CisgICAgICAgIGNhc2UgQVZBSElfRVJSX0lOVkFMSURfQ09ORklHOgorICAgICAgICBjYXNlIEFWQUhJX0VSUl9USU1FT1VUOgorICAgICAgICBjYXNlIEFWQUhJX0VSUl9EQlVTX0VSUk9SOgorICAgICAgICBjYXNlIEFWQUhJX0VSUl9ESVNDT05ORUNURUQ6CisgICAgICAgIGNhc2UgQVZBSElfRVJSX05PX0RBRU1PTjoKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgfQorCisgICAgcmV0dXJuIGtETlNTZXJ2aWNlRXJyX1Vua25vd247Cit9CisKK3N0YXRpYyB2b2lkIHR5cGVfaW5mb19pbml0KHN0cnVjdCB0eXBlX2luZm8gKmkpIHsKKyAgICBhc3NlcnQoaSk7CisgICAgaS0+dHlwZSA9IE5VTEw7CisgICAgaS0+c3VidHlwZXMgPSBOVUxMOworICAgIGktPm5fc3VidHlwZXMgPSAwOworfQorCitzdGF0aWMgdm9pZCB0eXBlX2luZm9fZnJlZShzdHJ1Y3QgdHlwZV9pbmZvICppKSB7CisgICAgYXNzZXJ0KGkpOworCisgICAgYXZhaGlfZnJlZShpLT50eXBlKTsKKyAgICBhdmFoaV9zdHJpbmdfbGlzdF9mcmVlKGktPnN1YnR5cGVzKTsKKworICAgIHR5cGVfaW5mb19pbml0KGkpOworfQorCitzdGF0aWMgaW50IHR5cGVfaW5mb19wYXJzZShzdHJ1Y3QgdHlwZV9pbmZvICppLCBjb25zdCBjaGFyICp0KSB7CisgICAgY2hhciAqdG9rZW4gPSBOVUxMOworCisgICAgYXNzZXJ0KGkpOworICAgIGFzc2VydCh0KTsKKworICAgIHR5cGVfaW5mb19pbml0KGkpOworCisgICAgZm9yICg7OykgeworICAgICAgICBzaXplX3QgbDsKKworICAgICAgICBpZiAoKnQgPT0gMCkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGwgPSBzdHJjc3BuKHQsICIsIik7CisKKyAgICAgICAgaWYgKGwgPD0gMCkKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKworICAgICAgICB0b2tlbiA9IGF2YWhpX3N0cm5kdXAodCwgbCk7CisKKyAgICAgICAgaWYgKCF0b2tlbikKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKworICAgICAgICBpZiAoIWktPnR5cGUpIHsKKyAgICAgICAgICAgIC8qIFRoaXMgaXMgdGhlIGZpcnN0IHRva2VuLCBoZW5jZSB0aGUgbWFpbiB0eXBlICovCisKKyAgICAgICAgICAgIGlmICghYXZhaGlfaXNfdmFsaWRfc2VydmljZV90eXBlX3N0cmljdCh0b2tlbikpCisgICAgICAgICAgICAgICAgZ290byBmYWlsOworCisgICAgICAgICAgICBpLT50eXBlID0gdG9rZW47CisgICAgICAgICAgICB0b2tlbiA9IE5VTEw7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjaGFyICpmc3Q7CisKKyAgICAgICAgICAgIC8qIFRoaXMgaXMgbm90IHRoZSBmaXJzdCB0b2tlbiwgaGVuY2UgYSBzdWJ0eXBlICovCisKKyAgICAgICAgICAgIGlmICghKGZzdCA9IGF2YWhpX3N0cmR1cF9wcmludGYoIiVzLl9zdWIuJXMiLCB0b2tlbiwgaS0+dHlwZSkpKQorICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKworICAgICAgICAgICAgaWYgKCFhdmFoaV9pc192YWxpZF9zZXJ2aWNlX3N1YnR5cGUoZnN0KSkgeworICAgICAgICAgICAgICAgIGF2YWhpX2ZyZWUoZnN0KTsKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGktPnN1YnR5cGVzID0gYXZhaGlfc3RyaW5nX2xpc3RfYWRkKGktPnN1YnR5cGVzLCBmc3QpOworICAgICAgICAgICAgYXZhaGlfZnJlZShmc3QpOworCisgICAgICAgICAgICBhdmFoaV9mcmVlKHRva2VuKTsKKyAgICAgICAgICAgIHRva2VuID0gTlVMTDsKKworICAgICAgICAgICAgaS0+bl9zdWJ0eXBlcysrOworICAgICAgICB9CisKKyAgICAgICAgdCArPSBsOworCisgICAgICAgIGlmICgqdCA9PSAnLCcpCisgICAgICAgICAgICB0Kys7CisgICAgfQorCisgICAgaWYgKGktPnR5cGUpCisgICAgICAgIHJldHVybiAwOworCitmYWlsOgorICAgIHR5cGVfaW5mb19mcmVlKGkpOworICAgIGF2YWhpX2ZyZWUodG9rZW4pOworICAgIHJldHVybiAtMTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmFkZF90cmFpbGluZ19kb3QoY29uc3QgY2hhciAqcywgY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbikgeworICAgIGlmICghcykKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoKnMgPT0gMCkKKyAgICAgICAgcmV0dXJuIHM7CisKKyAgICBpZiAoc1tzdHJsZW4ocyktMV0gPT0gJy4nKQorICAgICAgICByZXR1cm4gczsKKworICAgIHNucHJpbnRmKGJ1ZiwgYnVmX2xlbiwgIiVzLiIsIHMpOworICAgIHJldHVybiBidWY7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9jb21tYW5kKGludCBmZCkgeworICAgIHNzaXplX3QgcjsKKyAgICBjaGFyIGNvbW1hbmQ7CisKKyAgICBhc3NlcnQoZmQgPj0gMCk7CisKKyAgICBpZiAoKHIgPSByZWFkKGZkLCAmY29tbWFuZCwgMSkpICE9IDEpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsIF9fRklMRV9fIjogcmVhZCgpIGZhaWxlZDogJXNcbiIsIHIgPCAwID8gc3RyZXJyb3IoZXJybm8pIDogIkVPRiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcmV0dXJuIGNvbW1hbmQ7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfY29tbWFuZChpbnQgZmQsIGNoYXIgcmVwbHkpIHsKKyAgICBhc3NlcnQoZmQgPj0gMCk7CisKKyAgICBpZiAod3JpdGUoZmQsICZyZXBseSwgMSkgIT0gMSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgX19GSUxFX18iOiB3cml0ZSgpIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwb2xsX2Z1bmMoc3RydWN0IHBvbGxmZCAqdWZkcywgdW5zaWduZWQgaW50IG5mZHMsIGludCB0aW1lb3V0LCB2b2lkICp1c2VyZGF0YSkgeworICAgIEROU1NlcnZpY2VSZWYgc2RyZWYgPSB1c2VyZGF0YTsKKyAgICBpbnQgcmV0OworCisgICAgYXNzZXJ0KHNkcmVmKTsKKworICAgIEFTU0VSVF9TVUNDRVNTKHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZzZHJlZi0+bXV0ZXgpKTsKKworLyogICAgIGZwcmludGYoc3RkZXJyLCAicHJlLXN5c2NhbGxcbiIpOyAqLworICAgIHJldCA9IHBvbGwodWZkcywgbmZkcywgdGltZW91dCk7CisvKiAgICAgZnByaW50ZihzdGRlcnIsICJwb3N0LXN5c2NhbGxcbiIpOyAqLworCisgICAgQVNTRVJUX1NVQ0NFU1MocHRocmVhZF9tdXRleF9sb2NrKCZzZHJlZi0+bXV0ZXgpKTsKKworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkICogdGhyZWFkX2Z1bmModm9pZCAqZGF0YSkgeworICAgIEROU1NlcnZpY2VSZWYgc2RyZWYgPSBkYXRhOworICAgIHNpZ3NldF90IG1hc2s7CisKKyAgICBzaWdmaWxsc2V0KCZtYXNrKTsKKyAgICBwdGhyZWFkX3NpZ21hc2soU0lHX0JMT0NLLCAmbWFzaywgTlVMTCk7CisKKyAgICBzZHJlZi0+dGhyZWFkID0gcHRocmVhZF9zZWxmKCk7CisgICAgc2RyZWYtPnRocmVhZF9ydW5uaW5nID0gMTsKKworICAgIGZvciAoOzspIHsKKyAgICAgICAgY2hhciBjb21tYW5kOworCisgICAgICAgIGlmICgoY29tbWFuZCA9IHJlYWRfY29tbWFuZChzZHJlZi0+dGhyZWFkX2ZkKSkgPCAwKQorICAgICAgICAgICAgYnJlYWs7CisKKy8qICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb21tYW5kOiAlY1xuIiwgY29tbWFuZCk7ICovCisKKyAgICAgICAgc3dpdGNoIChjb21tYW5kKSB7CisKKyAgICAgICAgICAgIGNhc2UgQ09NTUFORF9QT0xMOiB7CisgICAgICAgICAgICAgICAgaW50IHJldDsKKworICAgICAgICAgICAgICAgIEFTU0VSVF9TVUNDRVNTKHB0aHJlYWRfbXV0ZXhfbG9jaygmc2RyZWYtPm11dGV4KSk7CisKKyAgICAgICAgICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgICAgICAgIGVycm5vID0gMDsKKworICAgICAgICAgICAgICAgICAgICBpZiAoKHJldCA9IGF2YWhpX3NpbXBsZV9wb2xsX3J1bihzZHJlZi0+c2ltcGxlX3BvbGwpKSA8IDApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm5vID09IEVJTlRSKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgX19GSUxFX18iOiBhdmFoaV9zaW1wbGVfcG9sbF9ydW4oKSBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgQVNTRVJUX1NVQ0NFU1MocHRocmVhZF9tdXRleF91bmxvY2soJnNkcmVmLT5tdXRleCkpOworCisgICAgICAgICAgICAgICAgaWYgKHdyaXRlX2NvbW1hbmQoc2RyZWYtPnRocmVhZF9mZCwgcmV0IDwgMCA/IENPTU1BTkRfUE9MTF9GQUlMRUQgOiBDT01NQU5EX1BPTExfRE9ORSkgPCAwKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNlIENPTU1BTkRfUVVJVDoKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBETlNTZXJ2aWNlUmVmIHNkcmVmX25ldyh2b2lkKSB7CisgICAgaW50IGZkWzJdID0geyAtMSwgLTEgfTsKKyAgICBETlNTZXJ2aWNlUmVmIHNkcmVmID0gTlVMTDsKKyAgICBwdGhyZWFkX211dGV4YXR0cl90IG11dGV4X2F0dHI7CisKKyAgICBpZiAoc29ja2V0cGFpcihBRl9VTklYLCBTT0NLX1NUUkVBTSwgMCwgZmQpIDwgMCkKKyAgICAgICAgZ290byBmYWlsOworCisgICAgaWYgKCEoc2RyZWYgPSBhdmFoaV9uZXcoc3RydWN0IF9ETlNTZXJ2aWNlUmVmX3QsIDEpKSkKKyAgICAgICAgZ290byBmYWlsOworCisgICAgc2RyZWYtPm5fcmVmID0gMTsKKyAgICBzZHJlZi0+dGhyZWFkX2ZkID0gZmRbMF07CisgICAgc2RyZWYtPm1haW5fZmQgPSBmZFsxXTsKKworICAgIHNkcmVmLT5jbGllbnQgPSBOVUxMOworICAgIHNkcmVmLT5zZXJ2aWNlX2Jyb3dzZXIgPSBOVUxMOworICAgIHNkcmVmLT5zZXJ2aWNlX3Jlc29sdmVyID0gTlVMTDsKKyAgICBzZHJlZi0+ZG9tYWluX2Jyb3dzZXIgPSBOVUxMOworICAgIHNkcmVmLT5lbnRyeV9ncm91cCA9IE5VTEw7CisKKyAgICBzZHJlZi0+c2VydmljZV9uYW1lID0gc2RyZWYtPnNlcnZpY2VfbmFtZV9jaG9zZW4gPSBzZHJlZi0+c2VydmljZV9kb21haW4gPSBzZHJlZi0+c2VydmljZV9ob3N0ID0gTlVMTDsKKyAgICBzZHJlZi0+c2VydmljZV90eHQgPSBOVUxMOworCisgICAgdHlwZV9pbmZvX2luaXQoJnNkcmVmLT50eXBlX2luZm8pOworCisgICAgQVNTRVJUX1NVQ0NFU1MocHRocmVhZF9tdXRleGF0dHJfaW5pdCgmbXV0ZXhfYXR0cikpOworICAgIHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUoJm11dGV4X2F0dHIsIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFKTsKKyAgICBBU1NFUlRfU1VDQ0VTUyhwdGhyZWFkX211dGV4X2luaXQoJnNkcmVmLT5tdXRleCwgJm11dGV4X2F0dHIpKTsKKworICAgIHNkcmVmLT50aHJlYWRfcnVubmluZyA9IDA7CisKKyAgICBpZiAoIShzZHJlZi0+c2ltcGxlX3BvbGwgPSBhdmFoaV9zaW1wbGVfcG9sbF9uZXcoKSkpCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIGF2YWhpX3NpbXBsZV9wb2xsX3NldF9mdW5jKHNkcmVmLT5zaW1wbGVfcG9sbCwgcG9sbF9mdW5jLCBzZHJlZik7CisKKyAgICAvKiBTdGFydCBzaW1wbGUgcG9sbCAqLworICAgIGlmIChhdmFoaV9zaW1wbGVfcG9sbF9wcmVwYXJlKHNkcmVmLT5zaW1wbGVfcG9sbCwgLTEpIDwgMCkKKyAgICAgICAgZ290byBmYWlsOworCisgICAgLyogUXVldWUgYW4gaW5pdGlhbCBQT0xMIGNvbW1hbmQgZm9yIHRoZSB0aHJlYWQgKi8KKyAgICBpZiAod3JpdGVfY29tbWFuZChzZHJlZi0+bWFpbl9mZCwgQ09NTUFORF9QT0xMKSA8IDApCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIGlmIChwdGhyZWFkX2NyZWF0ZSgmc2RyZWYtPnRocmVhZCwgTlVMTCwgdGhyZWFkX2Z1bmMsIHNkcmVmKSAhPSAwKQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICBzZHJlZi0+dGhyZWFkX3J1bm5pbmcgPSAxOworCisgICAgcmV0dXJuIHNkcmVmOworCitmYWlsOgorCisgICAgaWYgKHNkcmVmKQorICAgICAgICBETlNTZXJ2aWNlUmVmRGVhbGxvY2F0ZShzZHJlZik7CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgc2RyZWZfZnJlZShETlNTZXJ2aWNlUmVmIHNkcmVmKSB7CisgICAgYXNzZXJ0KHNkcmVmKTsKKworICAgIGlmIChzZHJlZi0+dGhyZWFkX3J1bm5pbmcpIHsKKyAgICAgICAgQVNTRVJUX1NVQ0NFU1Mod3JpdGVfY29tbWFuZChzZHJlZi0+bWFpbl9mZCwgQ09NTUFORF9RVUlUKSk7CisgICAgICAgIGF2YWhpX3NpbXBsZV9wb2xsX3dha2V1cChzZHJlZi0+c2ltcGxlX3BvbGwpOworICAgICAgICBBU1NFUlRfU1VDQ0VTUyhwdGhyZWFkX2pvaW4oc2RyZWYtPnRocmVhZCwgTlVMTCkpOworICAgIH0KKworICAgIGlmIChzZHJlZi0+Y2xpZW50KQorICAgICAgICBhdmFoaV9jbGllbnRfZnJlZShzZHJlZi0+Y2xpZW50KTsKKworICAgIGlmIChzZHJlZi0+c2ltcGxlX3BvbGwpCisgICAgICAgIGF2YWhpX3NpbXBsZV9wb2xsX2ZyZWUoc2RyZWYtPnNpbXBsZV9wb2xsKTsKKworICAgIGlmIChzZHJlZi0+dGhyZWFkX2ZkID49IDApCisgICAgICAgIGNsb3NlKHNkcmVmLT50aHJlYWRfZmQpOworCisgICAgaWYgKHNkcmVmLT5tYWluX2ZkID49IDApCisgICAgICAgIGNsb3NlKHNkcmVmLT5tYWluX2ZkKTsKKworICAgIEFTU0VSVF9TVUNDRVNTKHB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmc2RyZWYtPm11dGV4KSk7CisKKyAgICBhdmFoaV9mcmVlKHNkcmVmLT5zZXJ2aWNlX25hbWUpOworICAgIGF2YWhpX2ZyZWUoc2RyZWYtPnNlcnZpY2VfbmFtZV9jaG9zZW4pOworICAgIGF2YWhpX2ZyZWUoc2RyZWYtPnNlcnZpY2VfZG9tYWluKTsKKyAgICBhdmFoaV9mcmVlKHNkcmVmLT5zZXJ2aWNlX2hvc3QpOworCisgICAgdHlwZV9pbmZvX2ZyZWUoJnNkcmVmLT50eXBlX2luZm8pOworCisgICAgYXZhaGlfc3RyaW5nX2xpc3RfZnJlZShzZHJlZi0+c2VydmljZV90eHQpOworCisgICAgYXZhaGlfZnJlZShzZHJlZik7Cit9CisKK3N0YXRpYyB2b2lkIHNkcmVmX3JlZihETlNTZXJ2aWNlUmVmIHNkcmVmKSB7CisgICAgYXNzZXJ0KHNkcmVmKTsKKyAgICBhc3NlcnQoc2RyZWYtPm5fcmVmID49IDEpOworCisgICAgc2RyZWYtPm5fcmVmKys7Cit9CisKK3N0YXRpYyB2b2lkIHNkcmVmX3VucmVmKEROU1NlcnZpY2VSZWYgc2RyZWYpIHsKKyAgICBhc3NlcnQoc2RyZWYpOworICAgIGFzc2VydChzZHJlZi0+bl9yZWYgPj0gMSk7CisKKyAgICBpZiAoLS0oc2RyZWYtPm5fcmVmKSA8PSAwKQorICAgICAgICBzZHJlZl9mcmVlKHNkcmVmKTsKK30KKworaW50IEROU1NEX0FQSSBETlNTZXJ2aWNlUmVmU29ja0ZEKEROU1NlcnZpY2VSZWYgc2RyZWYpIHsKKworICAgIEFWQUhJX1dBUk5fTElOS0FHRTsKKworICAgIGlmICghc2RyZWYgfHwgc2RyZWYtPm5fcmVmIDw9IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHJldHVybiBzZHJlZi0+bWFpbl9mZDsKK30KKworRE5TU2VydmljZUVycm9yVHlwZSBETlNTRF9BUEkgRE5TU2VydmljZVByb2Nlc3NSZXN1bHQoRE5TU2VydmljZVJlZiBzZHJlZikgeworICAgIEROU1NlcnZpY2VFcnJvclR5cGUgcmV0ID0ga0ROU1NlcnZpY2VFcnJfVW5rbm93bjsKKworICAgIEFWQUhJX1dBUk5fTElOS0FHRTsKKworICAgIGlmICghc2RyZWYgfHwgc2RyZWYtPm5fcmVmIDw9IDApCisgICAgICAgIHJldHVybiBrRE5TU2VydmljZUVycl9CYWRQYXJhbTsKKworICAgIHNkcmVmX3JlZihzZHJlZik7CisKKyAgICBBU1NFUlRfU1VDQ0VTUyhwdGhyZWFkX211dGV4X2xvY2soJnNkcmVmLT5tdXRleCkpOworCisgICAgLyogQ2xlYW51cCBub3RpZmljYXRpb24gc29ja2V0ICovCisgICAgaWYgKHJlYWRfY29tbWFuZChzZHJlZi0+bWFpbl9mZCkgIT0gQ09NTUFORF9QT0xMX0RPTkUpCisgICAgICAgIGdvdG8gZmluaXNoOworCisgICAgaWYgKGF2YWhpX3NpbXBsZV9wb2xsX2Rpc3BhdGNoKHNkcmVmLT5zaW1wbGVfcG9sbCkgPCAwKQorICAgICAgICBnb3RvIGZpbmlzaDsKKworICAgIGlmIChzZHJlZi0+bl9yZWYgPiAxKSAvKiBQZXJoYXBzIHdlIHNob3VsZCBkaWUgKi8KKworICAgICAgICAvKiBEaXNwYXRjaCBldmVudHMgKi8KKyAgICAgICAgaWYgKGF2YWhpX3NpbXBsZV9wb2xsX3ByZXBhcmUoc2RyZWYtPnNpbXBsZV9wb2xsLCAtMSkgPCAwKQorICAgICAgICAgICAgZ290byBmaW5pc2g7CisKKyAgICBpZiAoc2RyZWYtPm5fcmVmID4gMSkKKworICAgICAgICAvKiBSZXF1ZXN0IHRoZSBwb2xsICovCisgICAgICAgIGlmICh3cml0ZV9jb21tYW5kKHNkcmVmLT5tYWluX2ZkLCBDT01NQU5EX1BPTEwpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZmluaXNoOworCisgICAgcmV0ID0ga0ROU1NlcnZpY2VFcnJfTm9FcnJvcjsKKworZmluaXNoOgorCisgICAgQVNTRVJUX1NVQ0NFU1MocHRocmVhZF9tdXRleF91bmxvY2soJnNkcmVmLT5tdXRleCkpOworCisgICAgc2RyZWZfdW5yZWYoc2RyZWYpOworCisgICAgcmV0dXJuIHJldDsKK30KKwordm9pZCBETlNTRF9BUEkgRE5TU2VydmljZVJlZkRlYWxsb2NhdGUoRE5TU2VydmljZVJlZiBzZHJlZikgeworICAgIEFWQUhJX1dBUk5fTElOS0FHRTsKKworICAgIGlmIChzZHJlZikKKyAgICAgICAgc2RyZWZfdW5yZWYoc2RyZWYpOworfQorCitzdGF0aWMgdm9pZCBzZXJ2aWNlX2Jyb3dzZXJfY2FsbGJhY2soCisgICAgQXZhaGlTZXJ2aWNlQnJvd3NlciAqYiwKKyAgICBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICBBdmFoaUJyb3dzZXJFdmVudCBldmVudCwKKyAgICBjb25zdCBjaGFyICpuYW1lLAorICAgIGNvbnN0IGNoYXIgKnR5cGUsCisgICAgY29uc3QgY2hhciAqZG9tYWluLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgQXZhaGlMb29rdXBSZXN1bHRGbGFncyBmbGFncywKKyAgICB2b2lkICp1c2VyZGF0YSkgeworCisgICAgRE5TU2VydmljZVJlZiBzZHJlZiA9IHVzZXJkYXRhOworICAgIGNoYXIgdHlwZV9maXhlZFtBVkFISV9ET01BSU5fTkFNRV9NQVhdLCBkb21haW5fZml4ZWRbQVZBSElfRE9NQUlOX05BTUVfTUFYXTsKKyAgICBhc3NlcnQoYik7CisgICAgYXNzZXJ0KHNkcmVmKTsKKyAgICBhc3NlcnQoc2RyZWYtPm5fcmVmID49IDEpOworCisgICAgdHlwZSA9IGFkZF90cmFpbGluZ19kb3QodHlwZSwgdHlwZV9maXhlZCwgc2l6ZW9mKHR5cGVfZml4ZWQpKTsKKyAgICBkb21haW4gID0gYWRkX3RyYWlsaW5nX2RvdChkb21haW4sIGRvbWFpbl9maXhlZCwgc2l6ZW9mKGRvbWFpbl9maXhlZCkpOworCisgICAgc3dpdGNoIChldmVudCkgeworICAgICAgICBjYXNlIEFWQUhJX0JST1dTRVJfTkVXOgorICAgICAgICAgICAgc2RyZWYtPnNlcnZpY2VfYnJvd3Nlcl9jYWxsYmFjayhzZHJlZiwga0ROU1NlcnZpY2VGbGFnc0FkZCwgaW50ZXJmYWNlLCBrRE5TU2VydmljZUVycl9Ob0Vycm9yLCBuYW1lLCB0eXBlLCBkb21haW4sIHNkcmVmLT5jb250ZXh0KTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQVZBSElfQlJPV1NFUl9SRU1PVkU6CisgICAgICAgICAgICBzZHJlZi0+c2VydmljZV9icm93c2VyX2NhbGxiYWNrKHNkcmVmLCAwLCBpbnRlcmZhY2UsIGtETlNTZXJ2aWNlRXJyX05vRXJyb3IsIG5hbWUsIHR5cGUsIGRvbWFpbiwgc2RyZWYtPmNvbnRleHQpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBVkFISV9CUk9XU0VSX0ZBSUxVUkU6CisgICAgICAgICAgICBzZHJlZi0+c2VydmljZV9icm93c2VyX2NhbGxiYWNrKHNkcmVmLCAwLCBpbnRlcmZhY2UsIG1hcF9lcnJvcihhdmFoaV9jbGllbnRfZXJybm8oc2RyZWYtPmNsaWVudCkpLCBOVUxMLCBOVUxMLCBOVUxMLCBzZHJlZi0+Y29udGV4dCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFWQUhJX0JST1dTRVJfQ0FDSEVfRVhIQVVTVEVEOgorICAgICAgICBjYXNlIEFWQUhJX0JST1dTRVJfQUxMX0ZPUl9OT1c6CisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGdlbmVyaWNfY2xpZW50X2NhbGxiYWNrKEF2YWhpQ2xpZW50ICpzLCBBdmFoaUNsaWVudFN0YXRlIHN0YXRlLCB2b2lkKiB1c2VyZGF0YSkgeworICAgIEROU1NlcnZpY2VSZWYgc2RyZWYgPSB1c2VyZGF0YTsKKyAgICBpbnQgZXJyb3IgPSBrRE5TU2VydmljZUVycl9Vbmtub3duOworCisgICAgYXNzZXJ0KHMpOworICAgIGFzc2VydChzZHJlZik7CisgICAgYXNzZXJ0KHNkcmVmLT5uX3JlZiA+PSAxKTsKKworICAgIHN3aXRjaCAoc3RhdGUpIHsKKworICAgICAgICBjYXNlIEFWQUhJX0NMSUVOVF9GQUlMVVJFOgorCisgICAgICAgICAgICBpZiAoc2RyZWYtPnNlcnZpY2VfYnJvd3Nlcl9jYWxsYmFjaykKKyAgICAgICAgICAgICAgICBzZHJlZi0+c2VydmljZV9icm93c2VyX2NhbGxiYWNrKHNkcmVmLCAwLCAwLCBlcnJvciwgTlVMTCwgTlVMTCwgTlVMTCwgc2RyZWYtPmNvbnRleHQpOworICAgICAgICAgICAgZWxzZSBpZiAoc2RyZWYtPnNlcnZpY2VfcmVzb2x2ZXJfY2FsbGJhY2spCisgICAgICAgICAgICAgICAgc2RyZWYtPnNlcnZpY2VfcmVzb2x2ZXJfY2FsbGJhY2soc2RyZWYsIDAsIDAsIGVycm9yLCBOVUxMLCBOVUxMLCAwLCAwLCBOVUxMLCBzZHJlZi0+Y29udGV4dCk7CisgICAgICAgICAgICBlbHNlIGlmIChzZHJlZi0+ZG9tYWluX2Jyb3dzZXJfY2FsbGJhY2spCisgICAgICAgICAgICAgICAgc2RyZWYtPmRvbWFpbl9icm93c2VyX2NhbGxiYWNrKHNkcmVmLCAwLCAwLCBlcnJvciwgTlVMTCwgc2RyZWYtPmNvbnRleHQpOworICAgICAgICAgICAgZWxzZSBpZiAoc2RyZWYtPnF1ZXJ5X3Jlc29sdmVyX2NhbGxiYWNrKQorICAgICAgICAgICAgICAgIHNkcmVmLT5xdWVyeV9yZXNvbHZlcl9jYWxsYmFjayhzZHJlZiwgMCwgMCwgZXJyb3IsIE5VTEwsIDAsIDAsIDAsIE5VTEwsIDAsIHNkcmVmLT5jb250ZXh0KTsKKworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBVkFISV9DTElFTlRfU19SVU5OSU5HOgorICAgICAgICBjYXNlIEFWQUhJX0NMSUVOVF9TX0NPTExJU0lPTjoKKyAgICAgICAgY2FzZSBBVkFISV9DTElFTlRfU19SRUdJU1RFUklORzoKKyAgICAgICAgY2FzZSBBVkFISV9DTElFTlRfQ09OTkVDVElORzoKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KK30KKworRE5TU2VydmljZUVycm9yVHlwZSBETlNTRF9BUEkgRE5TU2VydmljZUJyb3dzZSgKKyAgICAgICAgRE5TU2VydmljZVJlZiAqcmV0X3NkcmVmLAorICAgICAgICBETlNTZXJ2aWNlRmxhZ3MgZmxhZ3MsCisgICAgICAgIHVpbnQzMl90IGludGVyZmFjZSwKKyAgICAgICAgY29uc3QgY2hhciAqcmVndHlwZSwKKyAgICAgICAgY29uc3QgY2hhciAqZG9tYWluLAorICAgICAgICBETlNTZXJ2aWNlQnJvd3NlUmVwbHkgY2FsbGJhY2ssCisgICAgICAgIHZvaWQgKmNvbnRleHQpIHsKKworICAgIEROU1NlcnZpY2VFcnJvclR5cGUgcmV0ID0ga0ROU1NlcnZpY2VFcnJfVW5rbm93bjsKKyAgICBpbnQgZXJyb3I7CisgICAgRE5TU2VydmljZVJlZiBzZHJlZiA9IE5VTEw7CisgICAgQXZhaGlJZkluZGV4IGlmaW5kZXg7CisgICAgc3RydWN0IHR5cGVfaW5mbyB0eXBlX2luZm87CisKKyAgICBBVkFISV9XQVJOX0xJTktBR0U7CisKKyAgICBpZiAoIXJldF9zZHJlZiB8fCAhcmVndHlwZSkKKyAgICAgICAgcmV0dXJuIGtETlNTZXJ2aWNlRXJyX0JhZFBhcmFtOworICAgICpyZXRfc2RyZWYgPSBOVUxMOworCisgICAgaWYgKGludGVyZmFjZSA9PSBrRE5TU2VydmljZUludGVyZmFjZUluZGV4TG9jYWxPbmx5IHx8IGZsYWdzICE9IDApIHsKKyAgICAgICAgQVZBSElfV0FSTl9VTlNVUFBPUlRFRDsKKyAgICAgICAgcmV0dXJuIGtETlNTZXJ2aWNlRXJyX1Vuc3VwcG9ydGVkOworICAgIH0KKworICAgIHR5cGVfaW5mb19pbml0KCZ0eXBlX2luZm8pOworCisgICAgaWYgKHR5cGVfaW5mb19wYXJzZSgmdHlwZV9pbmZvLCByZWd0eXBlKSA8IDAgfHwgdHlwZV9pbmZvLm5fc3VidHlwZXMgPiAxKSB7CisgICAgICAgIHR5cGVfaW5mb19mcmVlKCZ0eXBlX2luZm8pOworCisgICAgICAgIGlmICghYXZhaGlfaXNfdmFsaWRfc2VydmljZV90eXBlX2dlbmVyaWMocmVndHlwZSkpCisgICAgICAgICAgICByZXR1cm4ga0ROU1NlcnZpY2VFcnJfVW5zdXBwb3J0ZWQ7CisgICAgfSBlbHNlCisgICAgICAgIHJlZ3R5cGUgPSB0eXBlX2luZm8uc3VidHlwZXMgPyAoY2hhciopIHR5cGVfaW5mby5zdWJ0eXBlcy0+dGV4dCA6IHR5cGVfaW5mby50eXBlOworCisgICAgaWYgKCEoc2RyZWYgPSBzZHJlZl9uZXcoKSkpIHsKKyAgICAgICAgdHlwZV9pbmZvX2ZyZWUoJnR5cGVfaW5mbyk7CisgICAgICAgIHJldHVybiBrRE5TU2VydmljZUVycl9Vbmtub3duOworICAgIH0KKworICAgIHNkcmVmLT5jb250ZXh0ID0gY29udGV4dDsKKyAgICBzZHJlZi0+c2VydmljZV9icm93c2VyX2NhbGxiYWNrID0gY2FsbGJhY2s7CisKKyAgICBBU1NFUlRfU1VDQ0VTUyhwdGhyZWFkX211dGV4X2xvY2soJnNkcmVmLT5tdXRleCkpOworCisgICAgaWYgKCEoc2RyZWYtPmNsaWVudCA9IGF2YWhpX2NsaWVudF9uZXcoYXZhaGlfc2ltcGxlX3BvbGxfZ2V0KHNkcmVmLT5zaW1wbGVfcG9sbCksIDAsIGdlbmVyaWNfY2xpZW50X2NhbGxiYWNrLCBzZHJlZiwgJmVycm9yKSkpIHsKKyAgICAgICAgcmV0ID0gIG1hcF9lcnJvcihlcnJvcik7CisgICAgICAgIGdvdG8gZmluaXNoOworICAgIH0KKworICAgIGlmaW5kZXggPSBpbnRlcmZhY2UgPT0ga0ROU1NlcnZpY2VJbnRlcmZhY2VJbmRleEFueSA/IEFWQUhJX0lGX1VOU1BFQyA6IChBdmFoaUlmSW5kZXgpIGludGVyZmFjZTsKKworICAgIGlmICghKHNkcmVmLT5zZXJ2aWNlX2Jyb3dzZXIgPSBhdmFoaV9zZXJ2aWNlX2Jyb3dzZXJfbmV3KHNkcmVmLT5jbGllbnQsIGlmaW5kZXgsIEFWQUhJX1BST1RPX1VOU1BFQywgcmVndHlwZSwgZG9tYWluLCAwLCBzZXJ2aWNlX2Jyb3dzZXJfY2FsbGJhY2ssIHNkcmVmKSkpIHsKKyAgICAgICAgcmV0ID0gbWFwX2Vycm9yKGF2YWhpX2NsaWVudF9lcnJubyhzZHJlZi0+Y2xpZW50KSk7CisgICAgICAgIGdvdG8gZmluaXNoOworICAgIH0KKworICAgIHJldCA9IGtETlNTZXJ2aWNlRXJyX05vRXJyb3I7CisgICAgKnJldF9zZHJlZiA9IHNkcmVmOworCitmaW5pc2g6CisKKyAgICBBU1NFUlRfU1VDQ0VTUyhwdGhyZWFkX211dGV4X3VubG9jaygmc2RyZWYtPm11dGV4KSk7CisKKyAgICBpZiAocmV0ICE9IGtETlNTZXJ2aWNlRXJyX05vRXJyb3IpCisgICAgICAgIEROU1NlcnZpY2VSZWZEZWFsbG9jYXRlKHNkcmVmKTsKKworICAgIHR5cGVfaW5mb19mcmVlKCZ0eXBlX2luZm8pOworCisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgc2VydmljZV9yZXNvbHZlcl9jYWxsYmFjaygKKyAgICBBdmFoaVNlcnZpY2VSZXNvbHZlciAqciwKKyAgICBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICBBdmFoaVJlc29sdmVyRXZlbnQgZXZlbnQsCisgICAgY29uc3QgY2hhciAqbmFtZSwKKyAgICBjb25zdCBjaGFyICp0eXBlLAorICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwKKyAgICBjb25zdCBjaGFyICpob3N0X25hbWUsCisgICAgQVZBSElfR0NDX1VOVVNFRCBjb25zdCBBdmFoaUFkZHJlc3MgKmEsCisgICAgdWludDE2X3QgcG9ydCwKKyAgICBBdmFoaVN0cmluZ0xpc3QgKnR4dCwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIEF2YWhpTG9va3VwUmVzdWx0RmxhZ3MgZmxhZ3MsCisgICAgdm9pZCAqdXNlcmRhdGEpIHsKKworICAgIEROU1NlcnZpY2VSZWYgc2RyZWYgPSB1c2VyZGF0YTsKKworICAgIGFzc2VydChyKTsKKyAgICBhc3NlcnQoc2RyZWYpOworICAgIGFzc2VydChzZHJlZi0+bl9yZWYgPj0gMSk7CisKKyAgICBzd2l0Y2ggKGV2ZW50KSB7CisgICAgICAgIGNhc2UgQVZBSElfUkVTT0xWRVJfRk9VTkQ6IHsKKworICAgICAgICAgICAgY2hhciBob3N0X25hbWVfZml4ZWRbQVZBSElfRE9NQUlOX05BTUVfTUFYXTsKKyAgICAgICAgICAgIGNoYXIgZnVsbF9uYW1lW0FWQUhJX0RPTUFJTl9OQU1FX01BWF07CisgICAgICAgICAgICBpbnQgcmV0OworICAgICAgICAgICAgY2hhciAqcCA9IE5VTEw7CisgICAgICAgICAgICBzaXplX3QgbCA9IDA7CisKKyAgICAgICAgICAgIGhvc3RfbmFtZSA9IGFkZF90cmFpbGluZ19kb3QoaG9zdF9uYW1lLCBob3N0X25hbWVfZml4ZWQsIHNpemVvZihob3N0X25hbWVfZml4ZWQpKTsKKworICAgICAgICAgICAgaWYgKChwID0gYXZhaGlfbmV3MChjaGFyLCAobCA9IGF2YWhpX3N0cmluZ19saXN0X3NlcmlhbGl6ZSh0eHQsIE5VTEwsIDApKSsxKSkpCisgICAgICAgICAgICAgICAgYXZhaGlfc3RyaW5nX2xpc3Rfc2VyaWFsaXplKHR4dCwgcCwgbCk7CisKKyAgICAgICAgICAgIHJldCA9IGF2YWhpX3NlcnZpY2VfbmFtZV9qb2luKGZ1bGxfbmFtZSwgc2l6ZW9mKGZ1bGxfbmFtZSksIG5hbWUsIHR5cGUsIGRvbWFpbik7CisgICAgICAgICAgICBhc3NlcnQocmV0ID09IEFWQUhJX09LKTsKKworICAgICAgICAgICAgc3RyY2F0KGZ1bGxfbmFtZSwgIi4iKTsKKworICAgICAgICAgICAgc2RyZWYtPnNlcnZpY2VfcmVzb2x2ZXJfY2FsbGJhY2soc2RyZWYsIDAsIGludGVyZmFjZSwga0ROU1NlcnZpY2VFcnJfTm9FcnJvciwgZnVsbF9uYW1lLCBob3N0X25hbWUsIGh0b25zKHBvcnQpLCBsLCAodW5zaWduZWQgY2hhciopIHAsIHNkcmVmLT5jb250ZXh0KTsKKworICAgICAgICAgICAgYXZhaGlfZnJlZShwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBBVkFISV9SRVNPTFZFUl9GQUlMVVJFOgorICAgICAgICAgICAgc2RyZWYtPnNlcnZpY2VfcmVzb2x2ZXJfY2FsbGJhY2soc2RyZWYsIDAsIGludGVyZmFjZSwgbWFwX2Vycm9yKGF2YWhpX2NsaWVudF9lcnJubyhzZHJlZi0+Y2xpZW50KSksIE5VTEwsIE5VTEwsIDAsIDAsIE5VTEwsIHNkcmVmLT5jb250ZXh0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KK30KKworRE5TU2VydmljZUVycm9yVHlwZSBETlNTRF9BUEkgRE5TU2VydmljZVJlc29sdmUoCisgICAgRE5TU2VydmljZVJlZiAqcmV0X3NkcmVmLAorICAgIEROU1NlcnZpY2VGbGFncyBmbGFncywKKyAgICB1aW50MzJfdCBpbnRlcmZhY2UsCisgICAgY29uc3QgY2hhciAqbmFtZSwKKyAgICBjb25zdCBjaGFyICpyZWd0eXBlLAorICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwKKyAgICBETlNTZXJ2aWNlUmVzb2x2ZVJlcGx5IGNhbGxiYWNrLAorICAgIHZvaWQgKmNvbnRleHQpIHsKKworICAgIEROU1NlcnZpY2VFcnJvclR5cGUgcmV0ID0ga0ROU1NlcnZpY2VFcnJfVW5rbm93bjsKKyAgICBpbnQgZXJyb3I7CisgICAgRE5TU2VydmljZVJlZiBzZHJlZiA9IE5VTEw7CisgICAgQXZhaGlJZkluZGV4IGlmaW5kZXg7CisKKyAgICBBVkFISV9XQVJOX0xJTktBR0U7CisKKyAgICBpZiAoIXJldF9zZHJlZiB8fCAhbmFtZSB8fCAhcmVndHlwZSB8fCAhZG9tYWluIHx8ICFjYWxsYmFjaykKKyAgICAgICAgcmV0dXJuIGtETlNTZXJ2aWNlRXJyX0JhZFBhcmFtOworICAgICpyZXRfc2RyZWYgPSBOVUxMOworCisgICAgaWYgKGludGVyZmFjZSA9PSBrRE5TU2VydmljZUludGVyZmFjZUluZGV4TG9jYWxPbmx5IHx8IGZsYWdzICE9IDApIHsKKyAgICAgICAgQVZBSElfV0FSTl9VTlNVUFBPUlRFRDsKKyAgICAgICAgcmV0dXJuIGtETlNTZXJ2aWNlRXJyX1Vuc3VwcG9ydGVkOworICAgIH0KKworICAgIGlmICghKHNkcmVmID0gc2RyZWZfbmV3KCkpKQorICAgICAgICByZXR1cm4ga0ROU1NlcnZpY2VFcnJfVW5rbm93bjsKKworICAgIHNkcmVmLT5jb250ZXh0ID0gY29udGV4dDsKKyAgICBzZHJlZi0+c2VydmljZV9yZXNvbHZlcl9jYWxsYmFjayA9IGNhbGxiYWNrOworCisgICAgQVNTRVJUX1NVQ0NFU1MocHRocmVhZF9tdXRleF9sb2NrKCZzZHJlZi0+bXV0ZXgpKTsKKworICAgIGlmICghKHNkcmVmLT5jbGllbnQgPSBhdmFoaV9jbGllbnRfbmV3KGF2YWhpX3NpbXBsZV9wb2xsX2dldChzZHJlZi0+c2ltcGxlX3BvbGwpLCAwLCBnZW5lcmljX2NsaWVudF9jYWxsYmFjaywgc2RyZWYsICZlcnJvcikpKSB7CisgICAgICAgIHJldCA9ICBtYXBfZXJyb3IoZXJyb3IpOworICAgICAgICBnb3RvIGZpbmlzaDsKKyAgICB9CisKKyAgICBpZmluZGV4ID0gaW50ZXJmYWNlID09IGtETlNTZXJ2aWNlSW50ZXJmYWNlSW5kZXhBbnkgPyBBVkFISV9JRl9VTlNQRUMgOiAoQXZhaGlJZkluZGV4KSBpbnRlcmZhY2U7CisKKyAgICBpZiAoIShzZHJlZi0+c2VydmljZV9yZXNvbHZlciA9IGF2YWhpX3NlcnZpY2VfcmVzb2x2ZXJfbmV3KHNkcmVmLT5jbGllbnQsIGlmaW5kZXgsIEFWQUhJX1BST1RPX1VOU1BFQywgbmFtZSwgcmVndHlwZSwgZG9tYWluLCBBVkFISV9QUk9UT19VTlNQRUMsIDAsIHNlcnZpY2VfcmVzb2x2ZXJfY2FsbGJhY2ssIHNkcmVmKSkpIHsKKyAgICAgICAgcmV0ID0gbWFwX2Vycm9yKGF2YWhpX2NsaWVudF9lcnJubyhzZHJlZi0+Y2xpZW50KSk7CisgICAgICAgIGdvdG8gZmluaXNoOworICAgIH0KKworCisgICAgcmV0ID0ga0ROU1NlcnZpY2VFcnJfTm9FcnJvcjsKKyAgICAqcmV0X3NkcmVmID0gc2RyZWY7CisKK2ZpbmlzaDoKKworICAgIEFTU0VSVF9TVUNDRVNTKHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZzZHJlZi0+bXV0ZXgpKTsKKworICAgIGlmIChyZXQgIT0ga0ROU1NlcnZpY2VFcnJfTm9FcnJvcikKKyAgICAgICAgRE5TU2VydmljZVJlZkRlYWxsb2NhdGUoc2RyZWYpOworCisgICAgcmV0dXJuIHJldDsKK30KKworaW50IEROU1NEX0FQSSBETlNTZXJ2aWNlQ29uc3RydWN0RnVsbE5hbWUgKAorICAgIGNoYXIgKmZ1bGxOYW1lLAorICAgIGNvbnN0IGNoYXIgKnNlcnZpY2UsCisgICAgY29uc3QgY2hhciAqcmVndHlwZSwKKyAgICBjb25zdCBjaGFyICpkb21haW4pIHsKKworICAgIEFWQUhJX1dBUk5fTElOS0FHRTsKKworICAgIGlmICghZnVsbE5hbWUgfHwgIXJlZ3R5cGUgfHwgIWRvbWFpbikKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaWYgKGF2YWhpX3NlcnZpY2VfbmFtZV9qb2luKGZ1bGxOYW1lLCBrRE5TU2VydmljZU1heERvbWFpbk5hbWUsIHNlcnZpY2UsIHJlZ3R5cGUsIGRvbWFpbikgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZG9tYWluX2Jyb3dzZXJfY2FsbGJhY2soCisgICAgQXZhaGlEb21haW5Ccm93c2VyICpiLAorICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsCisgICAgQVZBSElfR0NDX1VOVVNFRCBBdmFoaVByb3RvY29sIHByb3RvY29sLAorICAgIEF2YWhpQnJvd3NlckV2ZW50IGV2ZW50LAorICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIEF2YWhpTG9va3VwUmVzdWx0RmxhZ3MgZmxhZ3MsCisgICAgdm9pZCAqdXNlcmRhdGEpIHsKKworICAgIEROU1NlcnZpY2VSZWYgc2RyZWYgPSB1c2VyZGF0YTsKKyAgICBzdGF0aWMgY2hhciBkb21haW5fZml4ZWRbQVZBSElfRE9NQUlOX05BTUVfTUFYXTsKKworICAgIGFzc2VydChiKTsKKyAgICBhc3NlcnQoc2RyZWYpOworICAgIGFzc2VydChzZHJlZi0+bl9yZWYgPj0gMSk7CisKKyAgICBkb21haW4gID0gYWRkX3RyYWlsaW5nX2RvdChkb21haW4sIGRvbWFpbl9maXhlZCwgc2l6ZW9mKGRvbWFpbl9maXhlZCkpOworCisgICAgc3dpdGNoIChldmVudCkgeworICAgICAgICBjYXNlIEFWQUhJX0JST1dTRVJfTkVXOgorICAgICAgICAgICAgc2RyZWYtPmRvbWFpbl9icm93c2VyX2NhbGxiYWNrKHNkcmVmLCBrRE5TU2VydmljZUZsYWdzQWRkLCBpbnRlcmZhY2UsIGtETlNTZXJ2aWNlRXJyX05vRXJyb3IsIGRvbWFpbiwgc2RyZWYtPmNvbnRleHQpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBVkFISV9CUk9XU0VSX1JFTU9WRToKKyAgICAgICAgICAgIHNkcmVmLT5kb21haW5fYnJvd3Nlcl9jYWxsYmFjayhzZHJlZiwgMCwgaW50ZXJmYWNlLCBrRE5TU2VydmljZUVycl9Ob0Vycm9yLCBkb21haW4sIHNkcmVmLT5jb250ZXh0KTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQVZBSElfQlJPV1NFUl9GQUlMVVJFOgorICAgICAgICAgICAgc2RyZWYtPmRvbWFpbl9icm93c2VyX2NhbGxiYWNrKHNkcmVmLCAwLCBpbnRlcmZhY2UsIG1hcF9lcnJvcihhdmFoaV9jbGllbnRfZXJybm8oc2RyZWYtPmNsaWVudCkpLCBkb21haW4sIHNkcmVmLT5jb250ZXh0KTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQVZBSElfQlJPV1NFUl9DQUNIRV9FWEhBVVNURUQ6CisgICAgICAgIGNhc2UgQVZBSElfQlJPV1NFUl9BTExfRk9SX05PVzoKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KK30KKworRE5TU2VydmljZUVycm9yVHlwZSBETlNTRF9BUEkgRE5TU2VydmljZUVudW1lcmF0ZURvbWFpbnMoCisgICAgRE5TU2VydmljZVJlZiAqcmV0X3NkcmVmLAorICAgIEROU1NlcnZpY2VGbGFncyBmbGFncywKKyAgICB1aW50MzJfdCBpbnRlcmZhY2UsCisgICAgRE5TU2VydmljZURvbWFpbkVudW1SZXBseSBjYWxsYmFjaywKKyAgICB2b2lkICpjb250ZXh0KSB7CisKKyAgICBETlNTZXJ2aWNlRXJyb3JUeXBlIHJldCA9IGtETlNTZXJ2aWNlRXJyX1Vua25vd247CisgICAgaW50IGVycm9yOworICAgIEROU1NlcnZpY2VSZWYgc2RyZWYgPSBOVUxMOworICAgIEF2YWhpSWZJbmRleCBpZmluZGV4OworCisgICAgQVZBSElfV0FSTl9MSU5LQUdFOworCisgICAgaWYgKCFyZXRfc2RyZWYgfHwgIWNhbGxiYWNrKQorICAgICAgICByZXR1cm4ga0ROU1NlcnZpY2VFcnJfQmFkUGFyYW07CisgICAgKnJldF9zZHJlZiA9IE5VTEw7CisKKyAgICBpZiAoaW50ZXJmYWNlID09IGtETlNTZXJ2aWNlSW50ZXJmYWNlSW5kZXhMb2NhbE9ubHkgfHwKKyAgICAgICAgKGZsYWdzICE9IGtETlNTZXJ2aWNlRmxhZ3NCcm93c2VEb21haW5zICYmICBmbGFncyAhPSBrRE5TU2VydmljZUZsYWdzUmVnaXN0cmF0aW9uRG9tYWlucykpIHsKKyAgICAgICAgQVZBSElfV0FSTl9VTlNVUFBPUlRFRDsKKyAgICAgICAgcmV0dXJuIGtETlNTZXJ2aWNlRXJyX1Vuc3VwcG9ydGVkOworICAgIH0KKworICAgIGlmICghKHNkcmVmID0gc2RyZWZfbmV3KCkpKQorICAgICAgICByZXR1cm4ga0ROU1NlcnZpY2VFcnJfVW5rbm93bjsKKworICAgIHNkcmVmLT5jb250ZXh0ID0gY29udGV4dDsKKyAgICBzZHJlZi0+ZG9tYWluX2Jyb3dzZXJfY2FsbGJhY2sgPSBjYWxsYmFjazsKKworICAgIEFTU0VSVF9TVUNDRVNTKHB0aHJlYWRfbXV0ZXhfbG9jaygmc2RyZWYtPm11dGV4KSk7CisKKyAgICBpZiAoIShzZHJlZi0+Y2xpZW50ID0gYXZhaGlfY2xpZW50X25ldyhhdmFoaV9zaW1wbGVfcG9sbF9nZXQoc2RyZWYtPnNpbXBsZV9wb2xsKSwgMCwgZ2VuZXJpY19jbGllbnRfY2FsbGJhY2ssIHNkcmVmLCAmZXJyb3IpKSkgeworICAgICAgICByZXQgPSAgbWFwX2Vycm9yKGVycm9yKTsKKyAgICAgICAgZ290byBmaW5pc2g7CisgICAgfQorCisgICAgaWZpbmRleCA9IGludGVyZmFjZSA9PSBrRE5TU2VydmljZUludGVyZmFjZUluZGV4QW55ID8gQVZBSElfSUZfVU5TUEVDIDogKEF2YWhpSWZJbmRleCkgaW50ZXJmYWNlOworCisgICAgaWYgKCEoc2RyZWYtPmRvbWFpbl9icm93c2VyID0gYXZhaGlfZG9tYWluX2Jyb3dzZXJfbmV3KHNkcmVmLT5jbGllbnQsIGlmaW5kZXgsIEFWQUhJX1BST1RPX1VOU1BFQywgImxvY2FsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgPT0ga0ROU1NlcnZpY2VGbGFnc1JlZ2lzdHJhdGlvbkRvbWFpbnMgPyBBVkFISV9ET01BSU5fQlJPV1NFUl9SRUdJU1RFUiA6IEFWQUhJX0RPTUFJTl9CUk9XU0VSX0JST1dTRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgZG9tYWluX2Jyb3dzZXJfY2FsbGJhY2ssIHNkcmVmKSkpIHsKKyAgICAgICAgcmV0ID0gbWFwX2Vycm9yKGF2YWhpX2NsaWVudF9lcnJubyhzZHJlZi0+Y2xpZW50KSk7CisgICAgICAgIGdvdG8gZmluaXNoOworICAgIH0KKworICAgIHJldCA9IGtETlNTZXJ2aWNlRXJyX05vRXJyb3I7CisgICAgKnJldF9zZHJlZiA9IHNkcmVmOworCitmaW5pc2g6CisKKyAgICBBU1NFUlRfU1VDQ0VTUyhwdGhyZWFkX211dGV4X3VubG9jaygmc2RyZWYtPm11dGV4KSk7CisKKyAgICBpZiAocmV0ICE9IGtETlNTZXJ2aWNlRXJyX05vRXJyb3IpCisgICAgICAgIEROU1NlcnZpY2VSZWZEZWFsbG9jYXRlKHNkcmVmKTsKKworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHJlZ19yZXBvcnRfZXJyb3IoRE5TU2VydmljZVJlZiBzZHJlZiwgRE5TU2VydmljZUVycm9yVHlwZSBlcnJvcikgeworICAgIGNoYXIgcmVndHlwZV9maXhlZFtBVkFISV9ET01BSU5fTkFNRV9NQVhdLCBkb21haW5fZml4ZWRbQVZBSElfRE9NQUlOX05BTUVfTUFYXTsKKyAgICBjb25zdCBjaGFyICpyZWd0eXBlLCAqZG9tYWluOworICAgIGFzc2VydChzZHJlZik7CisgICAgYXNzZXJ0KHNkcmVmLT5uX3JlZiA+PSAxKTsKKworICAgIGlmICghc2RyZWYtPnNlcnZpY2VfcmVnaXN0ZXJfY2FsbGJhY2spCisgICAgICAgIHJldHVybjsKKworICAgIHJlZ3R5cGUgPSBhZGRfdHJhaWxpbmdfZG90KHNkcmVmLT50eXBlX2luZm8udHlwZSwgcmVndHlwZV9maXhlZCwgc2l6ZW9mKHJlZ3R5cGVfZml4ZWQpKTsKKyAgICBkb21haW4gPSBhZGRfdHJhaWxpbmdfZG90KHNkcmVmLT5zZXJ2aWNlX2RvbWFpbiwgZG9tYWluX2ZpeGVkLCBzaXplb2YoZG9tYWluX2ZpeGVkKSk7CisKKyAgICBzZHJlZi0+c2VydmljZV9yZWdpc3Rlcl9jYWxsYmFjaygKKyAgICAgICAgc2RyZWYsIDAsIGVycm9yLAorICAgICAgICBzZHJlZi0+c2VydmljZV9uYW1lX2Nob3NlbiA/IHNkcmVmLT5zZXJ2aWNlX25hbWVfY2hvc2VuIDogc2RyZWYtPnNlcnZpY2VfbmFtZSwKKyAgICAgICAgcmVndHlwZSwKKyAgICAgICAgZG9tYWluLAorICAgICAgICBzZHJlZi0+Y29udGV4dCk7Cit9CisKK3N0YXRpYyBpbnQgcmVnX2NyZWF0ZV9zZXJ2aWNlKEROU1NlcnZpY2VSZWYgc2RyZWYpIHsKKyAgICBpbnQgcmV0OworICAgIEF2YWhpU3RyaW5nTGlzdCAqbDsKKworICAgIGFzc2VydChzZHJlZik7CisgICAgYXNzZXJ0KHNkcmVmLT5uX3JlZiA+PSAxKTsKKworICAgIGlmICgocmV0ID0gYXZhaGlfZW50cnlfZ3JvdXBfYWRkX3NlcnZpY2Vfc3RybHN0KAorICAgICAgICBzZHJlZi0+ZW50cnlfZ3JvdXAsCisgICAgICAgIHNkcmVmLT5zZXJ2aWNlX2ludGVyZmFjZSwKKyAgICAgICAgQVZBSElfUFJPVE9fVU5TUEVDLAorICAgICAgICAwLAorICAgICAgICBzZHJlZi0+c2VydmljZV9uYW1lX2Nob3NlbiwKKyAgICAgICAgc2RyZWYtPnR5cGVfaW5mby50eXBlLAorICAgICAgICBzZHJlZi0+c2VydmljZV9kb21haW4sCisgICAgICAgIHNkcmVmLT5zZXJ2aWNlX2hvc3QsCisgICAgICAgIHNkcmVmLT5zZXJ2aWNlX3BvcnQsCisgICAgICAgIHNkcmVmLT5zZXJ2aWNlX3R4dCkpIDwgMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIGZvciAobCA9IHNkcmVmLT50eXBlX2luZm8uc3VidHlwZXM7IGw7IGwgPSBsLT5uZXh0KSB7CisgICAgICAgIC8qIENyZWF0ZSBhIHN1YnR5cGUgZW50cnkgKi8KKworICAgICAgICBpZiAoYXZhaGlfZW50cnlfZ3JvdXBfYWRkX3NlcnZpY2Vfc3VidHlwZSgKKyAgICAgICAgICAgICAgICBzZHJlZi0+ZW50cnlfZ3JvdXAsCisgICAgICAgICAgICAgICAgc2RyZWYtPnNlcnZpY2VfaW50ZXJmYWNlLAorICAgICAgICAgICAgICAgIEFWQUhJX1BST1RPX1VOU1BFQywKKyAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgIHNkcmVmLT5zZXJ2aWNlX25hbWVfY2hvc2VuLAorICAgICAgICAgICAgICAgIHNkcmVmLT50eXBlX2luZm8udHlwZSwKKyAgICAgICAgICAgICAgICBzZHJlZi0+c2VydmljZV9kb21haW4sCisgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIqKSBsLT50ZXh0KSA8IDApCisgICAgICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKworICAgIGlmICgocmV0ID0gYXZhaGlfZW50cnlfZ3JvdXBfY29tbWl0KHNkcmVmLT5lbnRyeV9ncm91cCkpIDwgMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCByZWdfY2xpZW50X2NhbGxiYWNrKEF2YWhpQ2xpZW50ICpzLCBBdmFoaUNsaWVudFN0YXRlIHN0YXRlLCB2b2lkKiB1c2VyZGF0YSkgeworICAgIEROU1NlcnZpY2VSZWYgc2RyZWYgPSB1c2VyZGF0YTsKKworICAgIGFzc2VydChzKTsKKyAgICBhc3NlcnQoc2RyZWYpOworICAgIGFzc2VydChzZHJlZi0+bl9yZWYgPj0gMSk7CisKKyAgICAvKiBXZSd2ZSBub3QgYmVlbiBzZXR1cCBjb21wbGV0ZWx5ICovCisgICAgaWYgKCFzZHJlZi0+ZW50cnlfZ3JvdXApCisgICAgICAgIHJldHVybjsKKworICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICAgICAgY2FzZSBBVkFISV9DTElFTlRfRkFJTFVSRToKKyAgICAgICAgICAgIHJlZ19yZXBvcnRfZXJyb3Ioc2RyZWYsIGtETlNTZXJ2aWNlRXJyX1Vua25vd24pOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBVkFISV9DTElFTlRfU19SVU5OSU5HOiB7CisgICAgICAgICAgICBpbnQgcmV0OworCisgICAgICAgICAgICBpZiAoIXNkcmVmLT5zZXJ2aWNlX25hbWUpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuOworICAgICAgICAgICAgICAgIC8qIElmIHRoZSBzZXJ2aWNlIG5hbWUgaXMgdGFrZW4gZnJvbSB0aGUgaG9zdCBuYW1lLCBjb3B5IHRoYXQgKi8KKworICAgICAgICAgICAgICAgIGF2YWhpX2ZyZWUoc2RyZWYtPnNlcnZpY2VfbmFtZV9jaG9zZW4pOworICAgICAgICAgICAgICAgIHNkcmVmLT5zZXJ2aWNlX25hbWVfY2hvc2VuID0gTlVMTDsKKworICAgICAgICAgICAgICAgIGlmICghKG4gPSBhdmFoaV9jbGllbnRfZ2V0X2hvc3RfbmFtZShzZHJlZi0+Y2xpZW50KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVnX3JlcG9ydF9lcnJvcihzZHJlZiwgbWFwX2Vycm9yKGF2YWhpX2NsaWVudF9lcnJubyhzZHJlZi0+Y2xpZW50KSkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCEoc2RyZWYtPnNlcnZpY2VfbmFtZV9jaG9zZW4gPSBhdmFoaV9zdHJkdXAobikpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlZ19yZXBvcnRfZXJyb3Ioc2RyZWYsIGtETlNTZXJ2aWNlRXJyX05vTWVtb3J5KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFzZHJlZi0+c2VydmljZV9uYW1lX2Nob3NlbikgeworCisgICAgICAgICAgICAgICAgYXNzZXJ0KHNkcmVmLT5zZXJ2aWNlX25hbWUpOworCisgICAgICAgICAgICAgICAgaWYgKCEoc2RyZWYtPnNlcnZpY2VfbmFtZV9jaG9zZW4gPSBhdmFoaV9zdHJkdXAoc2RyZWYtPnNlcnZpY2VfbmFtZSkpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlZ19yZXBvcnRfZXJyb3Ioc2RyZWYsIGtETlNTZXJ2aWNlRXJyX05vTWVtb3J5KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogUmVnaXN0ZXIgdGhlIHNlcnZpY2UgKi8KKworICAgICAgICAgICAgaWYgKChyZXQgPSByZWdfY3JlYXRlX3NlcnZpY2Uoc2RyZWYpKSA8IDApIHsKKyAgICAgICAgICAgICAgICByZWdfcmVwb3J0X2Vycm9yKHNkcmVmLCBtYXBfZXJyb3IocmV0KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgQVZBSElfQ0xJRU5UX1NfQ09MTElTSU9OOgorICAgICAgICBjYXNlIEFWQUhJX0NMSUVOVF9TX1JFR0lTVEVSSU5HOgorCisgICAgICAgICAgICAvKiBSZW1vdmUgb3VyIGVudHJ5ICovCisgICAgICAgICAgICBhdmFoaV9lbnRyeV9ncm91cF9yZXNldChzZHJlZi0+ZW50cnlfZ3JvdXApOworCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFWQUhJX0NMSUVOVF9DT05ORUNUSU5HOgorICAgICAgICAgICAgLyogSWdub3JlICovCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKK30KKworc3RhdGljIHZvaWQgcmVnX2VudHJ5X2dyb3VwX2NhbGxiYWNrKEF2YWhpRW50cnlHcm91cCAqZywgQXZhaGlFbnRyeUdyb3VwU3RhdGUgc3RhdGUsIHZvaWQgKnVzZXJkYXRhKSB7CisgICAgRE5TU2VydmljZVJlZiBzZHJlZiA9IHVzZXJkYXRhOworCisgICAgYXNzZXJ0KGcpOworCisgICAgc3dpdGNoIChzdGF0ZSkgeworICAgICAgICBjYXNlIEFWQUhJX0VOVFJZX0dST1VQX0VTVEFCTElTSEVEOgorCisgICAgICAgICAgICAvKiBJbmZvcm0gdGhlIHVzZXIgKi8KKyAgICAgICAgICAgIHJlZ19yZXBvcnRfZXJyb3Ioc2RyZWYsIGtETlNTZXJ2aWNlRXJyX05vRXJyb3IpOworCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFWQUhJX0VOVFJZX0dST1VQX0NPTExJU0lPTjogeworICAgICAgICAgICAgY2hhciAqbjsKKyAgICAgICAgICAgIGludCByZXQ7CisKKyAgICAgICAgICAgIC8qIFJlbW92ZSBvdXIgZW50cnkgKi8KKyAgICAgICAgICAgIGF2YWhpX2VudHJ5X2dyb3VwX3Jlc2V0KHNkcmVmLT5lbnRyeV9ncm91cCk7CisKKyAgICAgICAgICAgIGFzc2VydChzZHJlZi0+c2VydmljZV9uYW1lX2Nob3Nlbik7CisKKyAgICAgICAgICAgIC8qIFBpY2sgYSBuZXcgbmFtZSAqLworICAgICAgICAgICAgaWYgKCEobiA9IGF2YWhpX2FsdGVybmF0aXZlX3NlcnZpY2VfbmFtZShzZHJlZi0+c2VydmljZV9uYW1lX2Nob3NlbikpKSB7CisgICAgICAgICAgICAgICAgcmVnX3JlcG9ydF9lcnJvcihzZHJlZiwga0ROU1NlcnZpY2VFcnJfTm9NZW1vcnkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGF2YWhpX2ZyZWUoc2RyZWYtPnNlcnZpY2VfbmFtZV9jaG9zZW4pOworICAgICAgICAgICAgc2RyZWYtPnNlcnZpY2VfbmFtZV9jaG9zZW4gPSBuOworCisgICAgICAgICAgICAvKiBSZWdpc3RlciB0aGUgc2VydmljZSB3aXRoIHRoYXQgbmV3IG5hbWUgKi8KKyAgICAgICAgICAgIGlmICgocmV0ID0gcmVnX2NyZWF0ZV9zZXJ2aWNlKHNkcmVmKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgcmVnX3JlcG9ydF9lcnJvcihzZHJlZiwgbWFwX2Vycm9yKHJldCkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEFWQUhJX0VOVFJZX0dST1VQX1JFR0lTVEVSSU5HOgorICAgICAgICBjYXNlIEFWQUhJX0VOVFJZX0dST1VQX1VOQ09NTUlURUQ6CisgICAgICAgICAgICAvKiBJZ25vcmUgKi8KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQVZBSElfRU5UUllfR1JPVVBfRkFJTFVSRToKKyAgICAgICAgICAgIC8qIEluZm9ybSB0aGUgdXNlciAqLworICAgICAgICAgICAgcmVnX3JlcG9ydF9lcnJvcihzZHJlZiwgbWFwX2Vycm9yKGF2YWhpX2NsaWVudF9lcnJubyhzZHJlZi0+Y2xpZW50KSkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICB9Cit9CisKK0ROU1NlcnZpY2VFcnJvclR5cGUgRE5TU0RfQVBJIEROU1NlcnZpY2VSZWdpc3RlciAoCisgICAgICAgIEROU1NlcnZpY2VSZWYgKnJldF9zZHJlZiwKKyAgICAgICAgRE5TU2VydmljZUZsYWdzIGZsYWdzLAorICAgICAgICB1aW50MzJfdCBpbnRlcmZhY2UsCisgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCisgICAgICAgIGNvbnN0IGNoYXIgKnJlZ3R5cGUsCisgICAgICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwKKyAgICAgICAgY29uc3QgY2hhciAqaG9zdCwKKyAgICAgICAgdWludDE2X3QgcG9ydCwKKyAgICAgICAgdWludDE2X3QgdHh0TGVuLAorICAgICAgICBjb25zdCB2b2lkICp0eHRSZWNvcmQsCisgICAgICAgIEROU1NlcnZpY2VSZWdpc3RlclJlcGx5IGNhbGxiYWNrLAorICAgICAgICB2b2lkICpjb250ZXh0KSB7CisKKyAgICBETlNTZXJ2aWNlRXJyb3JUeXBlIHJldCA9IGtETlNTZXJ2aWNlRXJyX1Vua25vd247CisgICAgaW50IGVycm9yOworICAgIEROU1NlcnZpY2VSZWYgc2RyZWYgPSBOVUxMOworICAgIEF2YWhpU3RyaW5nTGlzdCAqdHh0ID0gTlVMTDsKKyAgICBzdHJ1Y3QgdHlwZV9pbmZvIHR5cGVfaW5mbzsKKworICAgIEFWQUhJX1dBUk5fTElOS0FHRTsKKworICAgIGlmICghcmV0X3NkcmVmIHx8ICFyZWd0eXBlKQorICAgICAgICByZXR1cm4ga0ROU1NlcnZpY2VFcnJfQmFkUGFyYW07CisgICAgKnJldF9zZHJlZiA9IE5VTEw7CisKKyAgICBpZiAoIXR4dFJlY29yZCkgeworICAgICAgICB0eHRMZW4gPSAxOworICAgICAgICB0eHRSZWNvcmQgPSAiIjsKKyAgICB9CisKKyAgICBpZiAoaW50ZXJmYWNlID09IGtETlNTZXJ2aWNlSW50ZXJmYWNlSW5kZXhMb2NhbE9ubHkgfHwgZmxhZ3MpIHsKKyAgICAgICAgQVZBSElfV0FSTl9VTlNVUFBPUlRFRDsKKyAgICAgICAgcmV0dXJuIGtETlNTZXJ2aWNlRXJyX1Vuc3VwcG9ydGVkOworICAgIH0KKworICAgIGlmICh0eHRMZW4gPiAwKQorICAgICAgICBpZiAoYXZhaGlfc3RyaW5nX2xpc3RfcGFyc2UodHh0UmVjb3JkLCB0eHRMZW4sICZ0eHQpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBrRE5TU2VydmljZUVycl9JbnZhbGlkOworCisgICAgaWYgKHR5cGVfaW5mb19wYXJzZSgmdHlwZV9pbmZvLCByZWd0eXBlKSA8IDApIHsKKyAgICAgICAgYXZhaGlfc3RyaW5nX2xpc3RfZnJlZSh0eHQpOworICAgICAgICByZXR1cm4ga0ROU1NlcnZpY2VFcnJfSW52YWxpZDsKKyAgICB9CisKKyAgICBpZiAoIShzZHJlZiA9IHNkcmVmX25ldygpKSkgeworICAgICAgICBhdmFoaV9zdHJpbmdfbGlzdF9mcmVlKHR4dCk7CisgICAgICAgIHR5cGVfaW5mb19mcmVlKCZ0eXBlX2luZm8pOworICAgICAgICByZXR1cm4ga0ROU1NlcnZpY2VFcnJfVW5rbm93bjsKKyAgICB9CisKKyAgICBzZHJlZi0+Y29udGV4dCA9IGNvbnRleHQ7CisgICAgc2RyZWYtPnNlcnZpY2VfcmVnaXN0ZXJfY2FsbGJhY2sgPSBjYWxsYmFjazsKKworICAgIHNkcmVmLT50eXBlX2luZm8gPSB0eXBlX2luZm87CisgICAgc2RyZWYtPnNlcnZpY2VfbmFtZSA9IGF2YWhpX3N0cmR1cChuYW1lKTsKKyAgICBzZHJlZi0+c2VydmljZV9kb21haW4gPSBkb21haW4gPyBhdmFoaV9ub3JtYWxpemVfbmFtZV9zdHJkdXAoZG9tYWluKSA6IE5VTEw7CisgICAgc2RyZWYtPnNlcnZpY2VfaG9zdCA9IGhvc3QgPyBhdmFoaV9ub3JtYWxpemVfbmFtZV9zdHJkdXAoaG9zdCkgOiBOVUxMOworICAgIHNkcmVmLT5zZXJ2aWNlX2ludGVyZmFjZSA9IGludGVyZmFjZSA9PSBrRE5TU2VydmljZUludGVyZmFjZUluZGV4QW55ID8gQVZBSElfSUZfVU5TUEVDIDogKEF2YWhpSWZJbmRleCkgaW50ZXJmYWNlOworICAgIHNkcmVmLT5zZXJ2aWNlX3BvcnQgPSBudG9ocyhwb3J0KTsKKyAgICBzZHJlZi0+c2VydmljZV90eHQgPSB0eHQ7CisKKyAgICAvKiBTb21lIE9PTSBjaGVja2luZyB3b3VsZCBiZSBjb29sIGhlcmUgKi8KKworICAgIEFTU0VSVF9TVUNDRVNTKHB0aHJlYWRfbXV0ZXhfbG9jaygmc2RyZWYtPm11dGV4KSk7CisKKyAgICBpZiAoIShzZHJlZi0+Y2xpZW50ID0gYXZhaGlfY2xpZW50X25ldyhhdmFoaV9zaW1wbGVfcG9sbF9nZXQoc2RyZWYtPnNpbXBsZV9wb2xsKSwgMCwgcmVnX2NsaWVudF9jYWxsYmFjaywgc2RyZWYsICZlcnJvcikpKSB7CisgICAgICAgIHJldCA9ICBtYXBfZXJyb3IoZXJyb3IpOworICAgICAgICBnb3RvIGZpbmlzaDsKKyAgICB9CisKKyAgICBpZiAoIXNkcmVmLT5zZXJ2aWNlX2RvbWFpbikgeworICAgICAgICBjb25zdCBjaGFyICpkOworCisgICAgICAgIGlmICghKGQgPSBhdmFoaV9jbGllbnRfZ2V0X2RvbWFpbl9uYW1lKHNkcmVmLT5jbGllbnQpKSkgeworICAgICAgICAgICAgcmV0ID0gbWFwX2Vycm9yKGF2YWhpX2NsaWVudF9lcnJubyhzZHJlZi0+Y2xpZW50KSk7CisgICAgICAgICAgICBnb3RvIGZpbmlzaDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghKHNkcmVmLT5zZXJ2aWNlX2RvbWFpbiA9IGF2YWhpX3N0cmR1cChkKSkpIHsKKyAgICAgICAgICAgIHJldCA9IGtETlNTZXJ2aWNlRXJyX05vTWVtb3J5OworICAgICAgICAgICAgZ290byBmaW5pc2g7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIShzZHJlZi0+ZW50cnlfZ3JvdXAgPSBhdmFoaV9lbnRyeV9ncm91cF9uZXcoc2RyZWYtPmNsaWVudCwgcmVnX2VudHJ5X2dyb3VwX2NhbGxiYWNrLCBzZHJlZikpKSB7CisgICAgICAgIHJldCA9IG1hcF9lcnJvcihhdmFoaV9jbGllbnRfZXJybm8oc2RyZWYtPmNsaWVudCkpOworICAgICAgICBnb3RvIGZpbmlzaDsKKyAgICB9CisKKyAgICBpZiAoYXZhaGlfY2xpZW50X2dldF9zdGF0ZShzZHJlZi0+Y2xpZW50KSA9PSBBVkFISV9DTElFTlRfU19SVU5OSU5HKSB7CisgICAgICAgIGNvbnN0IGNoYXIgKm47CisKKyAgICAgICAgaWYgKHNkcmVmLT5zZXJ2aWNlX25hbWUpCisgICAgICAgICAgICBuID0gc2RyZWYtPnNlcnZpY2VfbmFtZTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoIShuID0gYXZhaGlfY2xpZW50X2dldF9ob3N0X25hbWUoc2RyZWYtPmNsaWVudCkpKSB7CisgICAgICAgICAgICAgICAgcmV0ID0gbWFwX2Vycm9yKGF2YWhpX2NsaWVudF9lcnJubyhzZHJlZi0+Y2xpZW50KSk7CisgICAgICAgICAgICAgICAgZ290byBmaW5pc2g7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIShzZHJlZi0+c2VydmljZV9uYW1lX2Nob3NlbiA9IGF2YWhpX3N0cmR1cChuKSkpIHsKKyAgICAgICAgICAgIHJldCA9IGtETlNTZXJ2aWNlRXJyX05vTWVtb3J5OworICAgICAgICAgICAgZ290byBmaW5pc2g7CisgICAgICAgIH0KKworCisgICAgICAgIGlmICgoZXJyb3IgPSByZWdfY3JlYXRlX3NlcnZpY2Uoc2RyZWYpKSA8IDApIHsKKyAgICAgICAgICAgIHJldCA9IG1hcF9lcnJvcihlcnJvcik7CisgICAgICAgICAgICBnb3RvIGZpbmlzaDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldCA9IGtETlNTZXJ2aWNlRXJyX05vRXJyb3I7CisgICAgKnJldF9zZHJlZiA9IHNkcmVmOworCitmaW5pc2g6CisKKyAgICBBU1NFUlRfU1VDQ0VTUyhwdGhyZWFkX211dGV4X3VubG9jaygmc2RyZWYtPm11dGV4KSk7CisKKyAgICBpZiAocmV0ICE9IGtETlNTZXJ2aWNlRXJyX05vRXJyb3IpCisgICAgICAgIEROU1NlcnZpY2VSZWZEZWFsbG9jYXRlKHNkcmVmKTsKKworICAgIHJldHVybiByZXQ7Cit9CisKK0ROU1NlcnZpY2VFcnJvclR5cGUgRE5TU0RfQVBJIEROU1NlcnZpY2VVcGRhdGVSZWNvcmQoCisgICAgICAgICBETlNTZXJ2aWNlUmVmIHNkcmVmLAorICAgICAgICAgRE5TUmVjb3JkUmVmIHJyZWYsCisgICAgICAgICBETlNTZXJ2aWNlRmxhZ3MgZmxhZ3MsCisgICAgICAgICB1aW50MTZfdCByZGxlbiwKKyAgICAgICAgIGNvbnN0IHZvaWQgKnJkYXRhLAorICAgICAgICAgQVZBSElfR0NDX1VOVVNFRCB1aW50MzJfdCB0dGwpIHsKKworICAgIGludCByZXQgPSBrRE5TU2VydmljZUVycl9Vbmtub3duOworICAgIEF2YWhpU3RyaW5nTGlzdCAqdHh0ID0gTlVMTDsKKworICAgIEFWQUhJX1dBUk5fTElOS0FHRTsKKworICAgIGlmICghc2RyZWYgfHwgc2RyZWYtPm5fcmVmIDw9IDApCisgICAgICAgIHJldHVybiBrRE5TU2VydmljZUVycl9CYWRQYXJhbTsKKworICAgIGlmIChmbGFncyB8fCBycmVmKSB7CisgICAgICAgIEFWQUhJX1dBUk5fVU5TVVBQT1JURUQ7CisgICAgICAgIHJldHVybiBrRE5TU2VydmljZUVycl9VbnN1cHBvcnRlZDsKKyAgICB9CisKKyAgICBpZiAocmRsZW4gPiAwKQorICAgICAgICBpZiAoYXZhaGlfc3RyaW5nX2xpc3RfcGFyc2UocmRhdGEsIHJkbGVuLCAmdHh0KSA8IDApCisgICAgICAgICAgICByZXR1cm4ga0ROU1NlcnZpY2VFcnJfSW52YWxpZDsKKworICAgIEFTU0VSVF9TVUNDRVNTKHB0aHJlYWRfbXV0ZXhfbG9jaygmc2RyZWYtPm11dGV4KSk7CisKKyAgICBpZiAoIWF2YWhpX3N0cmluZ19saXN0X2VxdWFsKHR4dCwgc2RyZWYtPnNlcnZpY2VfdHh0KSkgeworCisgICAgICAgIGF2YWhpX3N0cmluZ19saXN0X2ZyZWUoc2RyZWYtPnNlcnZpY2VfdHh0KTsKKyAgICAgICAgc2RyZWYtPnNlcnZpY2VfdHh0ID0gdHh0OworCisgICAgICAgIGlmIChhdmFoaV9jbGllbnRfZ2V0X3N0YXRlKHNkcmVmLT5jbGllbnQpID09IEFWQUhJX0NMSUVOVF9TX1JVTk5JTkcgJiYKKyAgICAgICAgICAgIHNkcmVmLT5lbnRyeV9ncm91cCAmJgorICAgICAgICAgICAgKGF2YWhpX2VudHJ5X2dyb3VwX2dldF9zdGF0ZShzZHJlZi0+ZW50cnlfZ3JvdXApID09IEFWQUhJX0VOVFJZX0dST1VQX0VTVEFCTElTSEVEIHx8CisgICAgICAgICAgICBhdmFoaV9lbnRyeV9ncm91cF9nZXRfc3RhdGUoc2RyZWYtPmVudHJ5X2dyb3VwKSA9PSBBVkFISV9FTlRSWV9HUk9VUF9SRUdJU1RFUklORykpCisKKyAgICAgICAgICAgIGlmIChhdmFoaV9lbnRyeV9ncm91cF91cGRhdGVfc2VydmljZV90eHRfc3RybHN0KAorICAgICAgICAgICAgICAgICAgICAgICAgc2RyZWYtPmVudHJ5X2dyb3VwLAorICAgICAgICAgICAgICAgICAgICAgICAgc2RyZWYtPnNlcnZpY2VfaW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgQVZBSElfUFJPVE9fVU5TUEVDLAorICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNkcmVmLT5zZXJ2aWNlX25hbWVfY2hvc2VuLAorICAgICAgICAgICAgICAgICAgICAgICAgc2RyZWYtPnR5cGVfaW5mby50eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgc2RyZWYtPnNlcnZpY2VfZG9tYWluLAorICAgICAgICAgICAgICAgICAgICAgICAgc2RyZWYtPnNlcnZpY2VfdHh0KSA8IDApIHsKKworICAgICAgICAgICAgICAgIHJldCA9IG1hcF9lcnJvcihhdmFoaV9jbGllbnRfZXJybm8oc2RyZWYtPmNsaWVudCkpOworICAgICAgICAgICAgICAgIGdvdG8gZmluaXNoOworICAgICAgICAgICAgfQorCisgICAgfSBlbHNlCisgICAgICAgIGF2YWhpX3N0cmluZ19saXN0X2ZyZWUodHh0KTsKKworICAgIHJldCA9IGtETlNTZXJ2aWNlRXJyX05vRXJyb3I7CisKK2ZpbmlzaDoKKyAgICBBU1NFUlRfU1VDQ0VTUyhwdGhyZWFkX211dGV4X3VubG9jaygmc2RyZWYtPm11dGV4KSk7CisKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBxdWVyeV9yZXNvbHZlcl9jYWxsYmFjaygKKyAgICAgICAgQXZhaGlSZWNvcmRCcm93c2VyICpyLAorICAgICAgICBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLAorICAgICAgICBBVkFISV9HQ0NfVU5VU0VEIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsCisgICAgICAgIEF2YWhpQnJvd3NlckV2ZW50IGV2ZW50LAorICAgICAgICBjb25zdCBjaGFyICpuYW1lLAorICAgICAgICB1aW50MTZfdCBjbGF6eiwKKyAgICAgICAgdWludDE2X3QgdHlwZSwKKyAgICAgICAgY29uc3Qgdm9pZCogcmRhdGEsCisgICAgICAgIHNpemVfdCBzaXplLAorICAgICAgICBBVkFISV9HQ0NfVU5VU0VEIEF2YWhpTG9va3VwUmVzdWx0RmxhZ3MgZmxhZ3MsCisgICAgICAgIHZvaWQgKnVzZXJkYXRhKSB7CisKKyAgICBETlNTZXJ2aWNlUmVmIHNkcmVmID0gdXNlcmRhdGE7CisKKyAgICBhc3NlcnQocik7CisgICAgYXNzZXJ0KHNkcmVmKTsKKyAgICBhc3NlcnQoc2RyZWYtPm5fcmVmID49IDEpOworCisgICAgc3dpdGNoIChldmVudCkgeworCisgICAgY2FzZSBBVkFISV9CUk9XU0VSX05FVzoKKyAgICBjYXNlIEFWQUhJX0JST1dTRVJfUkVNT1ZFOiB7CisKKyAgICAgICAgRE5TU2VydmljZUZsYWdzIHFmbGFncyA9IDA7CisgICAgICAgIGlmIChldmVudCA9PSBBVkFISV9CUk9XU0VSX05FVykKKyAgICAgICAgICAgIHFmbGFncyB8PSBrRE5TU2VydmljZUZsYWdzQWRkOworCisgICAgICAgIHNkcmVmLT5xdWVyeV9yZXNvbHZlcl9jYWxsYmFjayhzZHJlZiwgcWZsYWdzLCBpbnRlcmZhY2UsIGtETlNTZXJ2aWNlRXJyX05vRXJyb3IsIG5hbWUsIHR5cGUsIGNsYXp6LCBzaXplLCByZGF0YSwgMCwgc2RyZWYtPmNvbnRleHQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEFWQUhJX0JST1dTRVJfQUxMX0ZPUl9OT1c6CisgICAgY2FzZSBBVkFISV9CUk9XU0VSX0NBQ0hFX0VYSEFVU1RFRDoKKyAgICAgICAgLyogbm90IGltcGxlbWVudGVkICovCisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBBVkFISV9CUk9XU0VSX0ZBSUxVUkU6CisgICAgICAgIHNkcmVmLT5xdWVyeV9yZXNvbHZlcl9jYWxsYmFjayhzZHJlZiwgMCwgaW50ZXJmYWNlLCBtYXBfZXJyb3IoYXZhaGlfY2xpZW50X2Vycm5vKHNkcmVmLT5jbGllbnQpKSwgTlVMTCwgMCwgMCwgMCwgTlVMTCwgMCwgc2RyZWYtPmNvbnRleHQpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK0ROU1NlcnZpY2VFcnJvclR5cGUgRE5TU0RfQVBJIEROU1NlcnZpY2VRdWVyeVJlY29yZCAoCisgICAgRE5TU2VydmljZVJlZiAqcmV0X3NkcmVmLAorICAgIEROU1NlcnZpY2VGbGFncyBmbGFncywKKyAgICB1aW50MzJfdCBpbnRlcmZhY2UsCisgICAgY29uc3QgY2hhciAqZnVsbG5hbWUsCisgICAgdWludDE2X3QgdHlwZSwKKyAgICB1aW50MTZfdCBjbGF6eiwKKyAgICBETlNTZXJ2aWNlUXVlcnlSZWNvcmRSZXBseSBjYWxsYmFjaywKKyAgICB2b2lkICpjb250ZXh0KSB7CisKKyAgICBETlNTZXJ2aWNlRXJyb3JUeXBlIHJldCA9IGtETlNTZXJ2aWNlRXJyX1Vua25vd247CisgICAgaW50IGVycm9yOworICAgIEROU1NlcnZpY2VSZWYgc2RyZWYgPSBOVUxMOworICAgIEF2YWhpSWZJbmRleCBpZmluZGV4OworCisgICAgQVZBSElfV0FSTl9MSU5LQUdFOworCisgICAgaWYgKCFyZXRfc2RyZWYgfHwgIWZ1bGxuYW1lKQorICAgICAgICByZXR1cm4ga0ROU1NlcnZpY2VFcnJfQmFkUGFyYW07CisgICAgKnJldF9zZHJlZiA9IE5VTEw7CisKKyAgICBpZiAoaW50ZXJmYWNlID09IGtETlNTZXJ2aWNlSW50ZXJmYWNlSW5kZXhMb2NhbE9ubHkgfHwgZmxhZ3MgIT0gMCkgeworICAgICAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEOworICAgICAgICByZXR1cm4ga0ROU1NlcnZpY2VFcnJfVW5zdXBwb3J0ZWQ7CisgICAgfQorCisgICAgaWYgKCEoc2RyZWYgPSBzZHJlZl9uZXcoKSkpCisgICAgICAgIHJldHVybiBrRE5TU2VydmljZUVycl9Vbmtub3duOworCisgICAgc2RyZWYtPmNvbnRleHQgPSBjb250ZXh0OworICAgIHNkcmVmLT5xdWVyeV9yZXNvbHZlcl9jYWxsYmFjayA9IGNhbGxiYWNrOworCisgICAgQVNTRVJUX1NVQ0NFU1MocHRocmVhZF9tdXRleF9sb2NrKCZzZHJlZi0+bXV0ZXgpKTsKKworICAgIGlmICghKHNkcmVmLT5jbGllbnQgPSBhdmFoaV9jbGllbnRfbmV3KGF2YWhpX3NpbXBsZV9wb2xsX2dldChzZHJlZi0+c2ltcGxlX3BvbGwpLCAwLCBnZW5lcmljX2NsaWVudF9jYWxsYmFjaywgc2RyZWYsICZlcnJvcikpKSB7CisgICAgICAgIHJldCA9ICBtYXBfZXJyb3IoZXJyb3IpOworICAgICAgICBnb3RvIGZpbmlzaDsKKyAgICB9CisKKyAgICBpZmluZGV4ID0gaW50ZXJmYWNlID09IGtETlNTZXJ2aWNlSW50ZXJmYWNlSW5kZXhBbnkgPyBBVkFISV9JRl9VTlNQRUMgOiAoQXZhaGlJZkluZGV4KSBpbnRlcmZhY2U7CisKKyAgICBpZiAoIShzZHJlZi0+cmVjb3JkX2Jyb3dzZXIgPSBhdmFoaV9yZWNvcmRfYnJvd3Nlcl9uZXcoc2RyZWYtPmNsaWVudCwgaWZpbmRleCwgQVZBSElfUFJPVE9fVU5TUEVDLCBmdWxsbmFtZSwgY2xhenosIHR5cGUsIDAsIHF1ZXJ5X3Jlc29sdmVyX2NhbGxiYWNrLCBzZHJlZikpKSB7CisgICAgICAgIHJldCA9IG1hcF9lcnJvcihhdmFoaV9jbGllbnRfZXJybm8oc2RyZWYtPmNsaWVudCkpOworICAgICAgICBnb3RvIGZpbmlzaDsKKyAgICB9CisKKyAgICByZXQgPSBrRE5TU2VydmljZUVycl9Ob0Vycm9yOworICAgICpyZXRfc2RyZWYgPSBzZHJlZjsKKworZmluaXNoOgorCisgICAgQVNTRVJUX1NVQ0NFU1MocHRocmVhZF9tdXRleF91bmxvY2soJnNkcmVmLT5tdXRleCkpOworCisgICAgaWYgKHJldCAhPSBrRE5TU2VydmljZUVycl9Ob0Vycm9yKQorICAgICAgICBETlNTZXJ2aWNlUmVmRGVhbGxvY2F0ZShzZHJlZik7CisKKyAgICByZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvbXBhdC1saWJkbnNfc2QvZG5zX3NkLmggYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tcGF0LWxpYmRuc19zZC9kbnNfc2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmU0OTRlCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbXBhdC1saWJkbnNfc2QvZG5zX3NkLmgKQEAgLTAsMCArMSwxNzIyIEBACisvKiAtKi0gTW9kZTogQzsgdGFiLXdpZHRoOiA0IC0qLQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA0LCBBcHBsZSBDb21wdXRlciwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfRE5TX1NEX0gKKyNkZWZpbmUgX0ROU19TRF9ICisKKyNpZmRlZiAgX19jcGx1c3BsdXMKKyAgICBleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiBzdGFuZGFyZCBjYWxsaW5nIGNvbnZlbnRpb24gdW5kZXIgV2luMzIgaXMgX19zdGRjYWxsICovCisvKiBOb3RlOiBXaGVuIGNvbXBpbGluZyBJbnRlbCBFRkkgKEV4dGVuc2libGUgRmlybXdhcmUgSW50ZXJmYWNlKSB1bmRlciBNUyBWaXN1YWwgU3R1ZGlvLCB0aGUgKi8KKy8qIF9XSU4zMiBzeW1ib2wgaXMgZGVmaW5lZCBieSB0aGUgY29tcGlsZXIgZXZlbiB0aG91Z2ggaXQncyBOT1QgY29tcGlsaW5nIGNvZGUgZm9yIFdpbmRvd3MzMiAqLworI2lmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChFRkkzMikgJiYgIWRlZmluZWQoRUZJNjQpCisjZGVmaW5lIEROU1NEX0FQSSBfX3N0ZGNhbGwKKyNlbHNlCisjZGVmaW5lIEROU1NEX0FQSQorI2VuZGlmCisKKy8qIHN0ZGludC5oIGRvZXMgbm90IGV4aXN0IG9uIEZyZWVCU0QgNC54OyBpdHMgdHlwZXMgYXJlIGRlZmluZWQgaW4gc3lzL3R5cGVzLmggaW5zdGVhZCAqLworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIChfX0ZyZWVCU0RfXyA8IDUpCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKy8qIExpa2V3aXNlLCBvbiBTdW4sIHN0YW5kYXJkIGludGVnZXIgdHlwZXMgYXJlIGluIHN5cy90eXBlcy5oICovCisjZWxpZiBkZWZpbmVkKF9fc3VuX18pCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKy8qIEVGSSBkb2VzIG5vdCBoYXZlIHN0ZGludC5oLCBvciBhbnl0aGluZyBlbHNlIGVxdWl2YWxlbnQgKi8KKyNlbGlmIGRlZmluZWQoRUZJMzIpIHx8IGRlZmluZWQoRUZJNjQpCit0eXBlZGVmIFVJTlQ4ICAgICAgIHVpbnQ4X3Q7Cit0eXBlZGVmIElOVDggICAgICAgIGludDhfdDsKK3R5cGVkZWYgVUlOVDE2ICAgICAgdWludDE2X3Q7Cit0eXBlZGVmIElOVDE2ICAgICAgIGludDE2X3Q7Cit0eXBlZGVmIFVJTlQzMiAgICAgIHVpbnQzMl90OwordHlwZWRlZiBJTlQzMiAgICAgICBpbnQzMl90OworCisvKiBXaW5kb3dzIGhhcyBpdHMgb3duIGRpZmZlcmVuY2VzICovCisjZWxpZiBkZWZpbmVkKF9XSU4zMikKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjZGVmaW5lIF9VTlVTRUQKKyNkZWZpbmUgYnplcm8oYSwgYikgbWVtc2V0KGEsIDAsIGIpCisjaWZuZGVmIF9NU0xfU1RESU5UX0gKK3R5cGVkZWYgVUlOVDggICAgICAgdWludDhfdDsKK3R5cGVkZWYgSU5UOCAgICAgICAgaW50OF90OwordHlwZWRlZiBVSU5UMTYgICAgICB1aW50MTZfdDsKK3R5cGVkZWYgSU5UMTYgICAgICAgaW50MTZfdDsKK3R5cGVkZWYgVUlOVDMyICAgICAgdWludDMyX3Q7Cit0eXBlZGVmIElOVDMyICAgICAgIGludDMyX3Q7CisjZW5kaWYKKworLyogQWxsIG90aGVyIFBvc2l4IHBsYXRmb3JtcyB1c2Ugc3RkaW50LmggKi8KKyNlbHNlCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjZW5kaWYKKworLyogRE5TU2VydmljZVJlZiwgRE5TUmVjb3JkUmVmCisgKgorICogT3BhcXVlIGludGVybmFsIGRhdGEgdHlwZXMuCisgKiBOb3RlOiBjbGllbnQgaXMgcmVzcG9uc2libGUgZm9yIHNlcmlhbGl6aW5nIGFjY2VzcyB0byB0aGVzZSBzdHJ1Y3R1cmVzIGlmCisgKiB0aGV5IGFyZSBzaGFyZWQgYmV0d2VlbiBjb25jdXJyZW50IHRocmVhZHMuCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX0ROU1NlcnZpY2VSZWZfdCAqRE5TU2VydmljZVJlZjsKK3R5cGVkZWYgc3RydWN0IF9ETlNSZWNvcmRSZWZfdCAqRE5TUmVjb3JkUmVmOworCisvKiBHZW5lcmFsIGZsYWdzIHVzZWQgaW4gZnVuY3Rpb25zIGRlZmluZWQgYmVsb3cgKi8KK2VudW0KKyAgICB7CisgICAga0ROU1NlcnZpY2VGbGFnc01vcmVDb21pbmcgICAgICAgICAgPSAweDEsCisgICAgLyogTW9yZUNvbWluZyBpbmRpY2F0ZXMgdG8gYSBjYWxsYmFjayB0aGF0IGF0IGxlYXN0IG9uZSBtb3JlIHJlc3VsdCBpcworICAgICAqIHF1ZXVlZCBhbmQgd2lsbCBiZSBkZWxpdmVyZWQgZm9sbG93aW5nIGltbWVkaWF0ZWx5IGFmdGVyIHRoaXMgb25lLgorICAgICAqIEFwcGxpY2F0aW9ucyBzaG91bGQgbm90IHVwZGF0ZSB0aGVpciBVSSB0byBkaXNwbGF5IGJyb3dzZQorICAgICAqIHJlc3VsdHMgd2hlbiB0aGUgTW9yZUNvbWluZyBmbGFnIGlzIHNldCwgYmVjYXVzZSB0aGlzIHdvdWxkCisgICAgICogcmVzdWx0IGluIGEgZ3JlYXQgZGVhbCBvZiB1Z2x5IGZsaWNrZXJpbmcgb24gdGhlIHNjcmVlbi4KKyAgICAgKiBBcHBsaWNhdGlvbnMgc2hvdWxkIGluc3RlYWQgd2FpdCB1bnRpbCB1bnRpbCBNb3JlQ29taW5nIGlzIG5vdCBzZXQsCisgICAgICogYW5kIHRoZW4gdXBkYXRlIHRoZWlyIFVJLgorICAgICAqIFdoZW4gTW9yZUNvbWluZyBpcyBub3Qgc2V0LCB0aGF0IGRvZXNuJ3QgbWVhbiB0aGVyZSB3aWxsIGJlIG5vIG1vcmUKKyAgICAgKiBhbnN3ZXJzIEVWRVIsIGp1c3QgdGhhdCB0aGVyZSBhcmUgbm8gbW9yZSBhbnN3ZXJzIGltbWVkaWF0ZWx5CisgICAgICogYXZhaWxhYmxlIHJpZ2h0IG5vdyBhdCB0aGlzIGluc3RhbnQuIElmIG1vcmUgYW5zd2VycyBiZWNvbWUgYXZhaWxhYmxlCisgICAgICogaW4gdGhlIGZ1dHVyZSB0aGV5IHdpbGwgYmUgZGVsaXZlcmVkIGFzIHVzdWFsLgorICAgICAqLworCisgICAga0ROU1NlcnZpY2VGbGFnc0FkZCAgICAgICAgICAgICAgICAgPSAweDIsCisgICAga0ROU1NlcnZpY2VGbGFnc0RlZmF1bHQgICAgICAgICAgICAgPSAweDQsCisgICAgLyogRmxhZ3MgZm9yIGRvbWFpbiBlbnVtZXJhdGlvbiBhbmQgYnJvd3NlL3F1ZXJ5IHJlcGx5IGNhbGxiYWNrcy4KKyAgICAgKiAiRGVmYXVsdCIgYXBwbGllcyBvbmx5IHRvIGVudW1lcmF0aW9uIGFuZCBpcyBvbmx5IHZhbGlkIGluCisgICAgICogY29uanVjdGlvbiB3aXRoICJBZGQiLiAgQW4gZW51bWVyYXRpb24gY2FsbGJhY2sgd2l0aCB0aGUgIkFkZCIKKyAgICAgKiBmbGFnIE5PVCBzZXQgaW5kaWNhdGVzIGEgIlJlbW92ZSIsIGkuZS4gdGhlIGRvbWFpbiBpcyBubyBsb25nZXIKKyAgICAgKiB2YWxpZC4KKyAgICAgKi8KKworICAgIGtETlNTZXJ2aWNlRmxhZ3NOb0F1dG9SZW5hbWUgICAgICAgID0gMHg4LAorICAgIC8qIEZsYWcgZm9yIHNwZWNpZnlpbmcgcmVuYW1pbmcgYmVoYXZpb3Igb24gbmFtZSBjb25mbGljdCB3aGVuIHJlZ2lzdGVyaW5nCisgICAgICogbm9uLXNoYXJlZCByZWNvcmRzLiBCeSBkZWZhdWx0LCBuYW1lIGNvbmZsaWN0cyBhcmUgYXV0b21hdGljYWxseSBoYW5kbGVkCisgICAgICogYnkgcmVuYW1pbmcgdGhlIHNlcnZpY2UuICBOb0F1dG9SZW5hbWUgb3ZlcnJpZGVzIHRoaXMgYmVoYXZpb3IgLSB3aXRoIHRoaXMKKyAgICAgKiBmbGFnIHNldCwgbmFtZSBjb25mbGljdHMgd2lsbCByZXN1bHQgaW4gYSBjYWxsYmFjay4gIFRoZSBOb0F1dG9yZW5hbWUgZmxhZworICAgICAqIGlzIG9ubHkgdmFsaWQgaWYgYSBuYW1lIGlzIGV4cGxpY2l0bHkgc3BlY2lmaWVkIHdoZW4gcmVnaXN0ZXJpbmcgYSBzZXJ2aWNlCisgICAgICogKGkuZS4gdGhlIGRlZmF1bHQgbmFtZSBpcyBub3QgdXNlZC4pCisgICAgICovCisKKyAgICBrRE5TU2VydmljZUZsYWdzU2hhcmVkICAgICAgICAgICAgICA9IDB4MTAsCisgICAga0ROU1NlcnZpY2VGbGFnc1VuaXF1ZSAgICAgICAgICAgICAgPSAweDIwLAorICAgIC8qIEZsYWcgZm9yIHJlZ2lzdGVyaW5nIGluZGl2aWR1YWwgcmVjb3JkcyBvbiBhIGNvbm5lY3RlZAorICAgICAqIEROU1NlcnZpY2VSZWYuICBTaGFyZWQgaW5kaWNhdGVzIHRoYXQgdGhlcmUgbWF5IGJlIG11bHRpcGxlIHJlY29yZHMKKyAgICAgKiB3aXRoIHRoaXMgbmFtZSBvbiB0aGUgbmV0d29yayAoZS5nLiBQVFIgcmVjb3JkcykuICBVbmlxdWUgaW5kaWNhdGVzIHRoYXQgdGhlCisgICAgICogcmVjb3JkJ3MgbmFtZSBpcyB0byBiZSB1bmlxdWUgb24gdGhlIG5ldHdvcmsgKGUuZy4gU1JWIHJlY29yZHMpLgorICAgICAqLworCisgICAga0ROU1NlcnZpY2VGbGFnc0Jyb3dzZURvbWFpbnMgICAgICAgPSAweDQwLAorICAgIGtETlNTZXJ2aWNlRmxhZ3NSZWdpc3RyYXRpb25Eb21haW5zID0gMHg4MCwKKyAgICAvKiBGbGFncyBmb3Igc3BlY2lmeWluZyBkb21haW4gZW51bWVyYXRpb24gdHlwZSBpbiBETlNTZXJ2aWNlRW51bWVyYXRlRG9tYWlucy4KKyAgICAgKiBCcm93c2VEb21haW5zIGVudW1lcmF0ZXMgZG9tYWlucyByZWNvbW1lbmRlZCBmb3IgYnJvd3NpbmcsIFJlZ2lzdHJhdGlvbkRvbWFpbnMKKyAgICAgKiBlbnVtZXJhdGVzIGRvbWFpbnMgcmVjb21tZW5kZWQgZm9yIHJlZ2lzdHJhdGlvbi4KKyAgICAgKi8KKworICAgIGtETlNTZXJ2aWNlRmxhZ3NMb25nTGl2ZWRRdWVyeSAgICAgID0gMHgxMDAsCisgICAgLyogRmxhZyBmb3IgY3JlYXRpbmcgYSBsb25nLWxpdmVkIHVuaWNhc3QgcXVlcnkgZm9yIHRoZSBETlNTZXJ2aWNlUXVlcnlSZWNvcmQgY2FsbC4gKi8KKworICAgIGtETlNTZXJ2aWNlRmxhZ3NBbGxvd1JlbW90ZVF1ZXJ5ICAgID0gMHgyMDAsCisgICAgLyogRmxhZyBmb3IgY3JlYXRpbmcgYSByZWNvcmQgZm9yIHdoaWNoIHdlIHdpbGwgYW5zd2VyIHJlbW90ZSBxdWVyaWVzCisgICAgICogKHF1ZXJpZXMgZnJvbSBob3N0cyBtb3JlIHRoYW4gb25lIGhvcCBhd2F5OyBob3N0cyBub3QgZGlyZWN0bHkgY29ubmVjdGVkIHRvIHRoZSBsb2NhbCBsaW5rKS4KKyAgICAgKi8KKworICAgIGtETlNTZXJ2aWNlRmxhZ3NGb3JjZU11bHRpY2FzdCAgICAgID0gMHg0MDAsCisgICAgLyogRmxhZyBmb3Igc2lnbmlmeWluZyB0aGF0IGEgcXVlcnkgb3IgcmVnaXN0cmF0aW9uIHNob3VsZCBiZSBwZXJmb3JtZWQgZXhjbHVzaXZlbHkgdmlhIG11bHRpY2FzdCBETlMsCisgICAgICogZXZlbiBmb3IgYSBuYW1lIGluIGEgZG9tYWluIChlLmcuIGZvby5hcHBsZS5jb20uKSB0aGF0IHdvdWxkIG5vcm1hbGx5IGltcGx5IHVuaWNhc3QgRE5TLgorICAgICAqLworCisgICAga0ROU1NlcnZpY2VGbGFnc1JldHVybkNOQU1FICAgICAgICAgPSAweDgwMAorICAgIC8qIEZsYWcgZm9yIHJldHVybmluZyBDTkFNRSByZWNvcmRzIGluIHRoZSBETlNTZXJ2aWNlUXVlcnlSZWNvcmQgY2FsbC4gQ05BTUUgcmVjb3JkcyBhcmUKKyAgICAgKiBub3JtYWxseSBmb2xsb3dlZCB3aXRob3V0IGluZGljYXRpbmcgdG8gdGhlIGNsaWVudCB0aGF0IHRoZXJlIHdhcyBhIENOQU1FIHJlY29yZC4KKyAgICAgKi8KKyAgICB9OworCisvKgorICogVGhlIHZhbHVlcyBmb3IgRE5TIENsYXNzZXMgYW5kIFR5cGVzIGFyZSBsaXN0ZWQgaW4gUkZDIDEwMzUsIGFuZCBhcmUgYXZhaWxhYmxlCisgKiBvbiBldmVyeSBPUyBpbiBpdHMgRE5TIGhlYWRlciBmaWxlLiBVbmZvcnR1bmF0ZWx5IGV2ZXJ5IE9TIGRvZXMgbm90IGhhdmUgdGhlCisgKiBzYW1lIGhlYWRlciBmaWxlIGNvbnRhaW5pbmcgRE5TIENsYXNzIGFuZCBUeXBlIGNvbnN0YW50cywgYW5kIHRoZSBuYW1lcyBvZgorICogdGhlIGNvbnN0YW50cyBhcmUgbm90IGNvbnNpc3RlbnQuIEZvciBleGFtcGxlLCBCSU5EIDggdXNlcyAiVF9BIiwKKyAqIEJJTkQgOSB1c2VzICJuc190X2EiLCBXaW5kb3dzIHVzZXMgIkROU19UWVBFX0EiLCBldGMuCisgKiBGb3IgdGhpcyByZWFzb24sIHRoZXNlIGNvbnN0YW50cyBhcmUgYWxzbyBsaXN0ZWQgaGVyZSwgc28gdGhhdCBjb2RlIHVzaW5nCisgKiB0aGUgRE5TLVNEIHByb2dyYW1taW5nIEFQSXMgY2FuIHVzZSB0aGVzZSBjb25zdGFudHMsIHNvIHRoYXQgdGhlIHNhbWUgY29kZQorICogY2FuIGNvbXBpbGUgb24gYWxsIG91ciBzdXBwb3J0ZWQgcGxhdGZvcm1zLgorICovCisKK2VudW0KKyAgICB7CisgICAga0ROU1NlcnZpY2VDbGFzc19JTiAgICAgICA9IDEgICAgICAgLyogSW50ZXJuZXQgKi8KKyAgICB9OworCitlbnVtCisgICAgeworICAgIGtETlNTZXJ2aWNlVHlwZV9BICAgICAgICAgPSAxLCAgICAgIC8qIEhvc3QgYWRkcmVzcy4gKi8KKyAgICBrRE5TU2VydmljZVR5cGVfTlMgICAgICAgID0gMiwgICAgICAvKiBBdXRob3JpdGF0aXZlIHNlcnZlci4gKi8KKyAgICBrRE5TU2VydmljZVR5cGVfTUQgICAgICAgID0gMywgICAgICAvKiBNYWlsIGRlc3RpbmF0aW9uLiAqLworICAgIGtETlNTZXJ2aWNlVHlwZV9NRiAgICAgICAgPSA0LCAgICAgIC8qIE1haWwgZm9yd2FyZGVyLiAqLworICAgIGtETlNTZXJ2aWNlVHlwZV9DTkFNRSAgICAgPSA1LCAgICAgIC8qIENhbm9uaWNhbCBuYW1lLiAqLworICAgIGtETlNTZXJ2aWNlVHlwZV9TT0EgICAgICAgPSA2LCAgICAgIC8qIFN0YXJ0IG9mIGF1dGhvcml0eSB6b25lLiAqLworICAgIGtETlNTZXJ2aWNlVHlwZV9NQiAgICAgICAgPSA3LCAgICAgIC8qIE1haWxib3ggZG9tYWluIG5hbWUuICovCisgICAga0ROU1NlcnZpY2VUeXBlX01HICAgICAgICA9IDgsICAgICAgLyogTWFpbCBncm91cCBtZW1iZXIuICovCisgICAga0ROU1NlcnZpY2VUeXBlX01SICAgICAgICA9IDksICAgICAgLyogTWFpbCByZW5hbWUgbmFtZS4gKi8KKyAgICBrRE5TU2VydmljZVR5cGVfTlVMTCAgICAgID0gMTAsICAgICAvKiBOdWxsIHJlc291cmNlIHJlY29yZC4gKi8KKyAgICBrRE5TU2VydmljZVR5cGVfV0tTICAgICAgID0gMTEsICAgICAvKiBXZWxsIGtub3duIHNlcnZpY2UuICovCisgICAga0ROU1NlcnZpY2VUeXBlX1BUUiAgICAgICA9IDEyLCAgICAgLyogRG9tYWluIG5hbWUgcG9pbnRlci4gKi8KKyAgICBrRE5TU2VydmljZVR5cGVfSElORk8gICAgID0gMTMsICAgICAvKiBIb3N0IGluZm9ybWF0aW9uLiAqLworICAgIGtETlNTZXJ2aWNlVHlwZV9NSU5GTyAgICAgPSAxNCwgICAgIC8qIE1haWxib3ggaW5mb3JtYXRpb24uICovCisgICAga0ROU1NlcnZpY2VUeXBlX01YICAgICAgICA9IDE1LCAgICAgLyogTWFpbCByb3V0aW5nIGluZm9ybWF0aW9uLiAqLworICAgIGtETlNTZXJ2aWNlVHlwZV9UWFQgICAgICAgPSAxNiwgICAgIC8qIE9uZSBvciBtb3JlIHRleHQgc3RyaW5ncy4gKi8KKyAgICBrRE5TU2VydmljZVR5cGVfUlAgICAgICAgID0gMTcsICAgICAvKiBSZXNwb25zaWJsZSBwZXJzb24uICovCisgICAga0ROU1NlcnZpY2VUeXBlX0FGU0RCICAgICA9IDE4LCAgICAgLyogQUZTIGNlbGwgZGF0YWJhc2UuICovCisgICAga0ROU1NlcnZpY2VUeXBlX1gyNSAgICAgICA9IDE5LCAgICAgLyogWF8yNSBjYWxsaW5nIGFkZHJlc3MuICovCisgICAga0ROU1NlcnZpY2VUeXBlX0lTRE4gICAgICA9IDIwLCAgICAgLyogSVNETiBjYWxsaW5nIGFkZHJlc3MuICovCisgICAga0ROU1NlcnZpY2VUeXBlX1JUICAgICAgICA9IDIxLCAgICAgLyogUm91dGVyLiAqLworICAgIGtETlNTZXJ2aWNlVHlwZV9OU0FQICAgICAgPSAyMiwgICAgIC8qIE5TQVAgYWRkcmVzcy4gKi8KKyAgICBrRE5TU2VydmljZVR5cGVfTlNBUF9QVFIgID0gMjMsICAgICAvKiBSZXZlcnNlIE5TQVAgbG9va3VwIChkZXByZWNhdGVkKS4gKi8KKyAgICBrRE5TU2VydmljZVR5cGVfU0lHICAgICAgID0gMjQsICAgICAvKiBTZWN1cml0eSBzaWduYXR1cmUuICovCisgICAga0ROU1NlcnZpY2VUeXBlX0tFWSAgICAgICA9IDI1LCAgICAgLyogU2VjdXJpdHkga2V5LiAqLworICAgIGtETlNTZXJ2aWNlVHlwZV9QWCAgICAgICAgPSAyNiwgICAgIC8qIFguNDAwIG1haWwgbWFwcGluZy4gKi8KKyAgICBrRE5TU2VydmljZVR5cGVfR1BPUyAgICAgID0gMjcsICAgICAvKiBHZW9ncmFwaGljYWwgcG9zaXRpb24gKHdpdGhkcmF3bikuICovCisgICAga0ROU1NlcnZpY2VUeXBlX0FBQUEgICAgICA9IDI4LCAgICAgLyogSVB2NiBBZGRyZXNzLiAqLworICAgIGtETlNTZXJ2aWNlVHlwZV9MT0MgICAgICAgPSAyOSwgICAgIC8qIExvY2F0aW9uIEluZm9ybWF0aW9uLiAqLworICAgIGtETlNTZXJ2aWNlVHlwZV9OWFQgICAgICAgPSAzMCwgICAgIC8qIE5leHQgZG9tYWluIChzZWN1cml0eSkuICovCisgICAga0ROU1NlcnZpY2VUeXBlX0VJRCAgICAgICA9IDMxLCAgICAgLyogRW5kcG9pbnQgaWRlbnRpZmllci4gKi8KKyAgICBrRE5TU2VydmljZVR5cGVfTklNTE9DICAgID0gMzIsICAgICAvKiBOaW1yb2QgTG9jYXRvci4gKi8KKyAgICBrRE5TU2VydmljZVR5cGVfU1JWICAgICAgID0gMzMsICAgICAvKiBTZXJ2ZXIgU2VsZWN0aW9uLiAqLworICAgIGtETlNTZXJ2aWNlVHlwZV9BVE1BICAgICAgPSAzNCwgICAgIC8qIEFUTSBBZGRyZXNzICovCisgICAga0ROU1NlcnZpY2VUeXBlX05BUFRSICAgICA9IDM1LCAgICAgLyogTmFtaW5nIEF1dGhvcml0eSBQb2luVGVSICovCisgICAga0ROU1NlcnZpY2VUeXBlX0tYICAgICAgICA9IDM2LCAgICAgLyogS2V5IEV4Y2hhbmdlICovCisgICAga0ROU1NlcnZpY2VUeXBlX0NFUlQgICAgICA9IDM3LCAgICAgLyogQ2VydGlmaWNhdGlvbiByZWNvcmQgKi8KKyAgICBrRE5TU2VydmljZVR5cGVfQTYgICAgICAgID0gMzgsICAgICAvKiBJUHY2IEFkZHJlc3MgKGRlcHJlY2F0ZWQpICovCisgICAga0ROU1NlcnZpY2VUeXBlX0ROQU1FICAgICA9IDM5LCAgICAgLyogTm9uLXRlcm1pbmFsIEROQU1FIChmb3IgSVB2NikgKi8KKyAgICBrRE5TU2VydmljZVR5cGVfU0lOSyAgICAgID0gNDAsICAgICAvKiBLaXRjaGVuIHNpbmsgKGV4cGVyaW1lbnRhdGwpICovCisgICAga0ROU1NlcnZpY2VUeXBlX09QVCAgICAgICA9IDQxLCAgICAgLyogRUROUzAgb3B0aW9uIChtZXRhLVJSKSAqLworICAgIGtETlNTZXJ2aWNlVHlwZV9US0VZICAgICAgPSAyNDksICAgIC8qIFRyYW5zYWN0aW9uIGtleSAqLworICAgIGtETlNTZXJ2aWNlVHlwZV9UU0lHICAgICAgPSAyNTAsICAgIC8qIFRyYW5zYWN0aW9uIHNpZ25hdHVyZS4gKi8KKyAgICBrRE5TU2VydmljZVR5cGVfSVhGUiAgICAgID0gMjUxLCAgICAvKiBJbmNyZW1lbnRhbCB6b25lIHRyYW5zZmVyLiAqLworICAgIGtETlNTZXJ2aWNlVHlwZV9BWEZSICAgICAgPSAyNTIsICAgIC8qIFRyYW5zZmVyIHpvbmUgb2YgYXV0aG9yaXR5LiAqLworICAgIGtETlNTZXJ2aWNlVHlwZV9NQUlMQiAgICAgPSAyNTMsICAgIC8qIFRyYW5zZmVyIG1haWxib3ggcmVjb3Jkcy4gKi8KKyAgICBrRE5TU2VydmljZVR5cGVfTUFJTEEgICAgID0gMjU0LCAgICAvKiBUcmFuc2ZlciBtYWlsIGFnZW50IHJlY29yZHMuICovCisgICAga0ROU1NlcnZpY2VUeXBlX0FOWSAgICAgICA9IDI1NSAgICAgLyogV2lsZGNhcmQgbWF0Y2guICovCisgICAgfTsKKworCisvKiBwb3NzaWJsZSBlcnJvciBjb2RlIHZhbHVlcyAqLworZW51bQorICAgIHsKKyAgICBrRE5TU2VydmljZUVycl9Ob0Vycm9yICAgICAgICAgICAgID0gMCwKKyAgICBrRE5TU2VydmljZUVycl9Vbmtub3duICAgICAgICAgICAgID0gLTY1NTM3LCAgICAgICAvKiAweEZGRkUgRkZGRiAqLworICAgIGtETlNTZXJ2aWNlRXJyX05vU3VjaE5hbWUgICAgICAgICAgPSAtNjU1MzgsCisgICAga0ROU1NlcnZpY2VFcnJfTm9NZW1vcnkgICAgICAgICAgICA9IC02NTUzOSwKKyAgICBrRE5TU2VydmljZUVycl9CYWRQYXJhbSAgICAgICAgICAgID0gLTY1NTQwLAorICAgIGtETlNTZXJ2aWNlRXJyX0JhZFJlZmVyZW5jZSAgICAgICAgPSAtNjU1NDEsCisgICAga0ROU1NlcnZpY2VFcnJfQmFkU3RhdGUgICAgICAgICAgICA9IC02NTU0MiwKKyAgICBrRE5TU2VydmljZUVycl9CYWRGbGFncyAgICAgICAgICAgID0gLTY1NTQzLAorICAgIGtETlNTZXJ2aWNlRXJyX1Vuc3VwcG9ydGVkICAgICAgICAgPSAtNjU1NDQsCisgICAga0ROU1NlcnZpY2VFcnJfTm90SW5pdGlhbGl6ZWQgICAgICA9IC02NTU0NSwKKyAgICBrRE5TU2VydmljZUVycl9BbHJlYWR5UmVnaXN0ZXJlZCAgID0gLTY1NTQ3LAorICAgIGtETlNTZXJ2aWNlRXJyX05hbWVDb25mbGljdCAgICAgICAgPSAtNjU1NDgsCisgICAga0ROU1NlcnZpY2VFcnJfSW52YWxpZCAgICAgICAgICAgICA9IC02NTU0OSwKKyAgICBrRE5TU2VydmljZUVycl9GaXJld2FsbCAgICAgICAgICAgID0gLTY1NTUwLAorICAgIGtETlNTZXJ2aWNlRXJyX0luY29tcGF0aWJsZSAgICAgICAgPSAtNjU1NTEsICAgICAgICAvKiBjbGllbnQgbGlicmFyeSBpbmNvbXBhdGlibGUgd2l0aCBkYWVtb24gKi8KKyAgICBrRE5TU2VydmljZUVycl9CYWRJbnRlcmZhY2VJbmRleCAgID0gLTY1NTUyLAorICAgIGtETlNTZXJ2aWNlRXJyX1JlZnVzZWQgICAgICAgICAgICAgPSAtNjU1NTMsCisgICAga0ROU1NlcnZpY2VFcnJfTm9TdWNoUmVjb3JkICAgICAgICA9IC02NTU1NCwKKyAgICBrRE5TU2VydmljZUVycl9Ob0F1dGggICAgICAgICAgICAgID0gLTY1NTU1LAorICAgIGtETlNTZXJ2aWNlRXJyX05vU3VjaEtleSAgICAgICAgICAgPSAtNjU1NTYsCisgICAga0ROU1NlcnZpY2VFcnJfTkFUVHJhdmVyc2FsICAgICAgICA9IC02NTU1NywKKyAgICBrRE5TU2VydmljZUVycl9Eb3VibGVOQVQgICAgICAgICAgID0gLTY1NTU4LAorICAgIGtETlNTZXJ2aWNlRXJyX0JhZFRpbWUgICAgICAgICAgICAgPSAtNjU1NTkKKyAgICAvKiBtRE5TIEVycm9yIGNvZGVzIGFyZSBpbiB0aGUgcmFuZ2UKKyAgICAgKiBGRkZFIEZGMDAgKC02NTc5MikgdG8gRkZGRSBGRkZGICgtNjU1MzcpICovCisgICAgfTsKKworCisvKiBNYXhpbXVtIGxlbmd0aCwgaW4gYnl0ZXMsIG9mIGEgc2VydmljZSBuYW1lIHJlcHJlc2VudGVkIGFzIGEgKi8KKy8qIGxpdGVyYWwgQy1TdHJpbmcsIGluY2x1ZGluZyB0aGUgdGVybWluYXRpbmcgTlVMTCBhdCB0aGUgZW5kLiAqLworCisjZGVmaW5lIGtETlNTZXJ2aWNlTWF4U2VydmljZU5hbWUgNjQKKworLyogTWF4aW11bSBsZW5ndGgsIGluIGJ5dGVzLCBvZiBhIGRvbWFpbiBuYW1lIHJlcHJlc2VudGVkIGFzIGFuICplc2NhcGVkKiBDLVN0cmluZyAqLworLyogaW5jbHVkaW5nIHRoZSBmaW5hbCB0cmFpbGluZyBkb3QsIGFuZCB0aGUgQy1TdHJpbmcgdGVybWluYXRpbmcgTlVMTCBhdCB0aGUgZW5kLiAqLworCisjZGVmaW5lIGtETlNTZXJ2aWNlTWF4RG9tYWluTmFtZSAxMDA1CisKKy8qCisgKiBOb3RlcyBvbiBETlMgTmFtZSBFc2NhcGluZworICogICAtLSBvciAtLQorICogIldoeSBpcyBrRE5TU2VydmljZU1heERvbWFpbk5hbWUgMTAwNSwgd2hlbiB0aGUgbWF4aW11bSBsZWdhbCBkb21haW4gbmFtZSBpcyAyNTUgYnl0ZXM/IgorICoKKyAqIEFsbCBzdHJpbmdzIHVzZWQgaW4gRE5TLVNEIGFyZSBVVEYtOCBzdHJpbmdzLgorICogV2l0aCBmZXcgZXhjZXB0aW9ucywgbW9zdCBhcmUgYWxzbyBlc2NhcGVkIHVzaW5nIHN0YW5kYXJkIEROUyBlc2NhcGluZyBydWxlczoKKyAqCisgKiAgICdcXCcgcmVwcmVzZW50cyBhIHNpbmdsZSBsaXRlcmFsICdcJyBpbiB0aGUgbmFtZQorICogICAnXC4nIHJlcHJlc2VudHMgYSBzaW5nbGUgbGl0ZXJhbCAnLicgaW4gdGhlIG5hbWUKKyAqICAgJ1xkZGQnLCB3aGVyZSBkZGQgaXMgYSB0aHJlZS1kaWdpdCBkZWNpbWFsIHZhbHVlIGZyb20gMDAwIHRvIDI1NSwKKyAqICAgICAgICByZXByZXNlbnRzIGEgc2luZ2xlIGxpdGVyYWwgYnl0ZSB3aXRoIHRoYXQgdmFsdWUuCisgKiAgIEEgYmFyZSB1bmVzY2FwZWQgJy4nIGlzIGEgbGFiZWwgc2VwYXJhdG9yLCBtYXJraW5nIGEgYm91bmRhcnkgYmV0d2VlbiBkb21haW4gYW5kIHN1YmRvbWFpbi4KKyAqCisgKiBUaGUgZXhjZXB0aW9ucywgdGhhdCBkbyBub3QgdXNlIGVzY2FwaW5nLCBhcmUgdGhlIHJvdXRpbmVzIHdoZXJlIHRoZSBmdWxsCisgKiBETlMgbmFtZSBvZiBhIHJlc291cmNlIGlzIGJyb2tlbiwgZm9yIGNvbnZlbmllbmNlLCBpbnRvIHNlcnZpY2VuYW1lL3JlZ3R5cGUvZG9tYWluLgorICogSW4gdGhlc2Ugcm91dGluZXMsIHRoZSAic2VydmljZW5hbWUiIGlzIE5PVCBlc2NhcGVkLiBJdCBkb2VzIG5vdCBuZWVkIHRvIGJlLCBzaW5jZQorICogaXQgaXMsIGJ5IGRlZmluaXRpb24sIGp1c3QgYSBzaW5nbGUgbGl0ZXJhbCBzdHJpbmcuIEFueSBjaGFyYWN0ZXJzIGluIHRoYXQgc3RyaW5nCisgKiByZXByZXNlbnQgZXhhY3RseSB3aGF0IHRoZXkgYXJlLiBUaGUgInJlZ3R5cGUiIHBvcnRpb24gaXMsIHRlY2huaWNhbGx5IHNwZWFraW5nLAorICogZXNjYXBlZCwgYnV0IHNpbmNlIGxlZ2FsIHJlZ3R5cGVzIGFyZSBvbmx5IGFsbG93ZWQgdG8gY29udGFpbiBsZXR0ZXJzLCBkaWdpdHMsCisgKiBhbmQgaHlwaGVucywgdGhlcmUgaXMgbm90aGluZyB0byBlc2NhcGUsIHNvIHRoZSBpc3N1ZSBpcyBtb290LiBUaGUgImRvbWFpbiIKKyAqIHBvcnRpb24gaXMgYWxzbyBlc2NhcGVkLCB0aG91Z2ggbW9zdCBkb21haW5zIGluIHVzZSBvbiB0aGUgcHVibGljIEludGVybmV0CisgKiB0b2RheSwgbGlrZSByZWd0eXBlcywgZG9uJ3QgY29udGFpbiBhbnkgY2hhcmFjdGVycyB0aGF0IG5lZWQgdG8gYmUgZXNjYXBlZC4KKyAqIEFzIEROUy1TRCBiZWNvbWVzIG1vcmUgcG9wdWxhciwgcmljaC10ZXh0IGRvbWFpbnMgZm9yIHNlcnZpY2UgZGlzY292ZXJ5IHdpbGwKKyAqIGJlY29tZSBjb21tb24sIHNvIHNvZnR3YXJlIHNob3VsZCBiZSB3cml0dGVuIHRvIGNvcGUgd2l0aCBkb21haW5zIHdpdGggZXNjYXBpbmcuCisgKgorICogVGhlIHNlcnZpY2VuYW1lIG1heSBiZSB1cCB0byA2MyBieXRlcyBvZiBVVEYtOCB0ZXh0IChub3QgY291bnRpbmcgdGhlIEMtU3RyaW5nCisgKiB0ZXJtaW5hdGluZyBOVUxMIGF0IHRoZSBlbmQpLiBUaGUgcmVndHlwZSBpcyBvZiB0aGUgZm9ybSBfc2VydmljZS5fdGNwIG9yCisgKiBfc2VydmljZS5fdWRwLCB3aGVyZSB0aGUgInNlcnZpY2UiIHBhcnQgaXMgMS0xNCBjaGFyYWN0ZXJzLCB3aGljaCBtYXkgYmUKKyAqIGxldHRlcnMsIGRpZ2l0cywgb3IgaHlwaGVucy4gVGhlIGRvbWFpbiBwYXJ0IG9mIHRoZSB0aHJlZS1wYXJ0IG5hbWUgbWF5IGJlCisgKiBhbnkgbGVnYWwgZG9tYWluLCBwcm92aWRpbmcgdGhhdCB0aGUgcmVzdWx0aW5nIHNlcnZpY2VuYW1lK3JlZ3R5cGUrZG9tYWluCisgKiBuYW1lIGRvZXMgbm90IGV4Y2VlZCAyNTUgYnl0ZXMuCisgKgorICogRm9yIG1vc3Qgc29mdHdhcmUsIHRoZXNlIGlzc3VlcyBhcmUgdHJhbnNwYXJlbnQuIFdoZW4gYnJvd3NpbmcsIHRoZSBkaXNjb3ZlcmVkCisgKiBzZXJ2aWNlbmFtZXMgc2hvdWxkIHNpbXBseSBiZSBkaXNwbGF5ZWQgYXMtaXMuIFdoZW4gcmVzb2x2aW5nLCB0aGUgZGlzY292ZXJlZAorICogc2VydmljZW5hbWUvcmVndHlwZS9kb21haW4gYXJlIHNpbXBseSBwYXNzZWQgdW5jaGFuZ2VkIHRvIEROU1NlcnZpY2VSZXNvbHZlKCkuCisgKiBXaGVuIGEgRE5TU2VydmljZVJlc29sdmUoKSBzdWNjZWVkcywgdGhlIHJldHVybmVkIGZ1bGxuYW1lIGlzIGFscmVhZHkgaW4KKyAqIHRoZSBjb3JyZWN0IGZvcm1hdCB0byBwYXNzIHRvIHN0YW5kYXJkIHN5c3RlbSBETlMgQVBJcyBzdWNoIGFzIHJlc19xdWVyeSgpLgorICogRm9yIGNvbnZlcnRpbmcgZnJvbSBzZXJ2aWNlbmFtZS9yZWd0eXBlL2RvbWFpbiB0byBhIHNpbmdsZSBwcm9wZXJseS1lc2NhcGVkCisgKiBmdWxsIEROUyBuYW1lLCB0aGUgaGVscGVyIGZ1bmN0aW9uIEROU1NlcnZpY2VDb25zdHJ1Y3RGdWxsTmFtZSgpIGlzIHByb3ZpZGVkLgorICoKKyAqIFRoZSBmb2xsb3dpbmcgKGhpZ2hseSBjb250cml2ZWQpIGV4YW1wbGUgaWxsdXN0cmF0ZXMgdGhlIGVzY2FwaW5nIHByb2Nlc3MuCisgKiBTdXBwb3NlIHlvdSBoYXZlIGFuIHNlcnZpY2UgY2FsbGVkICJEci4gU21pdGhcRHIuIEpvaG5zb24iLCBvZiB0eXBlICJfZnRwLl90Y3AiCisgKiBpbiBzdWJkb21haW4gIjR0aC4gRmxvb3IiIG9mIHN1YmRvbWFpbiAiQnVpbGRpbmcgMiIgb2YgZG9tYWluICJhcHBsZS5jb20uIgorICogVGhlIGZ1bGwgKGVzY2FwZWQpIEROUyBuYW1lIG9mIHRoaXMgc2VydmljZSdzIFNSViByZWNvcmQgd291bGQgYmU6CisgKiBEclwuXDAzMlNtaXRoXFxEclwuXDAzMkpvaG5zb24uX2Z0cC5fdGNwLjR0aFwuXDAzMkZsb29yLkJ1aWxkaW5nXDAzMjIuYXBwbGUuY29tLgorICovCisKKworLyoKKyAqIENvbnN0YW50cyBmb3Igc3BlY2lmeWluZyBhbiBpbnRlcmZhY2UgaW5kZXgKKyAqCisgKiBTcGVjaWZpYyBpbnRlcmZhY2UgaW5kZXhlcyBhcmUgaWRlbnRpZmllZCB2aWEgYSAzMi1iaXQgdW5zaWduZWQgaW50ZWdlciByZXR1cm5lZAorICogYnkgdGhlIGlmX25hbWV0b2luZGV4KCkgZmFtaWx5IG9mIGNhbGxzLgorICoKKyAqIElmIHRoZSBjbGllbnQgcGFzc2VzIDAgZm9yIGludGVyZmFjZSBpbmRleCwgdGhhdCBtZWFucyAiZG8gdGhlIHJpZ2h0IHRoaW5nIiwKKyAqIHdoaWNoIChhdCBwcmVzZW50KSBtZWFucywgImlmIHRoZSBuYW1lIGlzIGluIGFuIG1ETlMgbG9jYWwgbXVsdGljYXN0IGRvbWFpbgorICogKGUuZy4gJ2xvY2FsLicsICcyNTQuMTY5LmluLWFkZHIuYXJwYS4nLCAnezgsOSxBLEJ9LkUuRi5pcDYuYXJwYS4nKSB0aGVuIG11bHRpY2FzdAorICogb24gYWxsIGFwcGxpY2FibGUgaW50ZXJmYWNlcywgb3RoZXJ3aXNlIHNlbmQgdmlhIHVuaWNhc3QgdG8gdGhlIGFwcHJvcHJpYXRlCisgKiBETlMgc2VydmVyLiIgTm9ybWFsbHksIG1vc3QgY2xpZW50cyB3aWxsIHVzZSAwIGZvciBpbnRlcmZhY2UgaW5kZXggdG8KKyAqIGF1dG9tYXRpY2FsbHkgZ2V0IHRoZSBkZWZhdWx0IHNlbnNpYmxlIGJlaGF2aW91ci4KKyAqCisgKiBJZiB0aGUgY2xpZW50IHBhc3NlcyBhIHBvc2l0aXZlIGludGVyZmFjZSBpbmRleCwgdGhlbiBmb3IgbXVsdGljYXN0IG5hbWVzIHRoYXQKKyAqIGluZGljYXRlcyB0byBkbyB0aGUgb3BlcmF0aW9uIG9ubHkgb24gdGhhdCBvbmUgaW50ZXJmYWNlLiBGb3IgdW5pY2FzdCBuYW1lcyB0aGUKKyAqIGludGVyZmFjZSBpbmRleCBpcyBpZ25vcmVkIHVubGVzcyBrRE5TU2VydmljZUZsYWdzRm9yY2VNdWx0aWNhc3QgaXMgYWxzbyBzZXQuCisgKgorICogSWYgdGhlIGNsaWVudCBwYXNzZXMga0ROU1NlcnZpY2VJbnRlcmZhY2VJbmRleExvY2FsT25seSB3aGVuIHJlZ2lzdGVyaW5nCisgKiBhIHNlcnZpY2UsIHRoZW4gdGhhdCBzZXJ2aWNlIHdpbGwgYmUgZm91bmQgKm9ubHkqIGJ5IG90aGVyIGxvY2FsIGNsaWVudHMKKyAqIG9uIHRoZSBzYW1lIG1hY2hpbmUgdGhhdCBhcmUgYnJvd3NpbmcgdXNpbmcga0ROU1NlcnZpY2VJbnRlcmZhY2VJbmRleExvY2FsT25seQorICogb3Iga0ROU1NlcnZpY2VJbnRlcmZhY2VJbmRleEFueS4KKyAqIElmIGEgY2xpZW50IGhhcyBhICdwcml2YXRlJyBzZXJ2aWNlLCBhY2Nlc3NpYmxlIG9ubHkgdG8gb3RoZXIgcHJvY2Vzc2VzCisgKiBydW5uaW5nIG9uIHRoZSBzYW1lIG1hY2hpbmUsIHRoaXMgYWxsb3dzIHRoZSBjbGllbnQgdG8gYWR2ZXJ0aXNlIHRoYXQgc2VydmljZQorICogaW4gYSB3YXkgc3VjaCB0aGF0IGl0IGRvZXMgbm90IGluYWR2ZXJ0ZW50bHkgYXBwZWFyIGluIHNlcnZpY2UgbGlzdHMgb24KKyAqIGFsbCB0aGUgb3RoZXIgbWFjaGluZXMgb24gdGhlIG5ldHdvcmsuCisgKgorICogSWYgdGhlIGNsaWVudCBwYXNzZXMga0ROU1NlcnZpY2VJbnRlcmZhY2VJbmRleExvY2FsT25seSB3aGVuIGJyb3dzaW5nCisgKiB0aGVuIGl0IHdpbGwgZmluZCAqYWxsKiByZWNvcmRzIHJlZ2lzdGVyZWQgb24gdGhhdCBzYW1lIGxvY2FsIG1hY2hpbmUuCisgKiBDbGllbnRzIGV4cGxpY2l0bHkgd2lzaGluZyB0byBkaXNjb3ZlciAqb25seSogTG9jYWxPbmx5IHNlcnZpY2VzIGNhbgorICogYWNjb21wbGlzaCB0aGlzIGJ5IGluc3BlY3RpbmcgdGhlIGludGVyZmFjZUluZGV4IG9mIGVhY2ggc2VydmljZSByZXBvcnRlZAorICogdG8gdGhlaXIgRE5TU2VydmljZUJyb3dzZVJlcGx5KCkgY2FsbGJhY2sgZnVuY3Rpb24sIGFuZCBkaXNjYXJkaW5nIHRob3NlCisgKiB3aGVyZSB0aGUgaW50ZXJmYWNlIGluZGV4IGlzIG5vdCBrRE5TU2VydmljZUludGVyZmFjZUluZGV4TG9jYWxPbmx5LgorICovCisKKyNkZWZpbmUga0ROU1NlcnZpY2VJbnRlcmZhY2VJbmRleEFueSAwCisjZGVmaW5lIGtETlNTZXJ2aWNlSW50ZXJmYWNlSW5kZXhMb2NhbE9ubHkgKCAodWludDMyX3QpIC0xICkKKworCit0eXBlZGVmIHVpbnQzMl90IEROU1NlcnZpY2VGbGFnczsKK3R5cGVkZWYgaW50MzJfdCBETlNTZXJ2aWNlRXJyb3JUeXBlOworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBVbml4IERvbWFpbiBTb2NrZXQgYWNjZXNzLCBETlNTZXJ2aWNlUmVmIGRlYWxsb2NhdGlvbiwgYW5kIGRhdGEgcHJvY2Vzc2luZyBmdW5jdGlvbnMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qIEROU1NlcnZpY2VSZWZTb2NrRkQoKQorICoKKyAqIEFjY2VzcyB1bmRlcmx5aW5nIFVuaXggZG9tYWluIHNvY2tldCBmb3IgYW4gaW5pdGlhbGl6ZWQgRE5TU2VydmljZVJlZi4KKyAqIFRoZSBETlMgU2VydmljZSBEaXNjb3ZlcnkgaW1wbG1lbWVudGF0aW9uIHVzZXMgdGhpcyBzb2NrZXQgdG8gY29tbXVuaWNhdGUgYmV0d2VlbgorICogdGhlIGNsaWVudCBhbmQgdGhlIG1ETlNSZXNwb25kZXIgZGFlbW9uLiAgVGhlIGFwcGxpY2F0aW9uIE1VU1QgTk9UIGRpcmVjdGx5IHJlYWQgZnJvbQorICogb3Igd3JpdGUgdG8gdGhpcyBzb2NrZXQuICBBY2Nlc3MgdG8gdGhlIHNvY2tldCBpcyBwcm92aWRlZCBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIGFzIGEKKyAqIHJ1biBsb29wIHNvdXJjZSwgb3IgaW4gYSBzZWxlY3QoKSBsb29wOiB3aGVuIGRhdGEgaXMgYXZhaWxhYmxlIGZvciByZWFkaW5nIG9uIHRoZSBzb2NrZXQsCisgKiBETlNTZXJ2aWNlUHJvY2Vzc1Jlc3VsdCgpIHNob3VsZCBiZSBjYWxsZWQsIHdoaWNoIHdpbGwgZXh0cmFjdCB0aGUgZGFlbW9uJ3MgcmVwbHkgZnJvbQorICogdGhlIHNvY2tldCwgYW5kIHBhc3MgaXQgdG8gdGhlIGFwcHJvcHJpYXRlIGFwcGxpY2F0aW9uIGNhbGxiYWNrLiAgQnkgdXNpbmcgYSBydW4gbG9vcCBvcgorICogc2VsZWN0KCksIHJlc3VsdHMgZnJvbSB0aGUgZGFlbW9uIGNhbiBiZSBwcm9jZXNzZWQgYXN5bmNocm9ub3VzbHkuICBXaXRob3V0IHVzaW5nIHRoZXNlCisgKiBjb25zdHJ1Y3RzLCBETlNTZXJ2aWNlUHJvY2Vzc1Jlc3VsdCgpIHdpbGwgYmxvY2sgdW50aWwgdGhlIHJlc3BvbnNlIGZyb20gdGhlIGRhZW1vbiBhcnJpdmVzLgorICogVGhlIGNsaWVudCBpcyByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCB0aGUgZGF0YSBvbiB0aGUgc29ja2V0IGlzIHByb2Nlc3NlZCBpbiBhIHRpbWVseQorICogZmFzaGlvbiAtIHRoZSBkYWVtb24gbWF5IHRlcm1pbmF0ZSBpdHMgY29ubmVjdGlvbiB3aXRoIGEgY2xpZW50IHRoYXQgZG9lcyBub3QgY2xlYXIgaXRzCisgKiBzb2NrZXQgYnVmZmVyLgorICoKKyAqIHNkUmVmOiAgICAgICAgICAgIEEgRE5TU2VydmljZVJlZiBpbml0aWFsaXplZCBieSBhbnkgb2YgdGhlIEROU1NlcnZpY2UgY2FsbHMuCisgKgorICogcmV0dXJuIHZhbHVlOiAgICBUaGUgRE5TU2VydmljZVJlZidzIHVuZGVybHlpbmcgc29ja2V0IGRlc2NyaXB0b3IsIG9yIC0xIG9uCisgKiAgICAgICAgICAgICAgICAgIGVycm9yLgorICovCisKK2ludCBETlNTRF9BUEkgRE5TU2VydmljZVJlZlNvY2tGRChETlNTZXJ2aWNlUmVmIHNkUmVmKTsKKworCisvKiBETlNTZXJ2aWNlUHJvY2Vzc1Jlc3VsdCgpCisgKgorICogUmVhZCBhIHJlcGx5IGZyb20gdGhlIGRhZW1vbiwgY2FsbGluZyB0aGUgYXBwcm9wcmlhdGUgYXBwbGljYXRpb24gY2FsbGJhY2suICBUaGlzIGNhbGwgd2lsbAorICogYmxvY2sgdW50aWwgdGhlIGRhZW1vbidzIHJlc3BvbnNlIGlzIHJlY2VpdmVkLiAgVXNlIEROU1NlcnZpY2VSZWZTb2NrRkQoKSBpbgorICogY29uanVuY3Rpb24gd2l0aCBhIHJ1biBsb29wIG9yIHNlbGVjdCgpIHRvIGRldGVybWluZSB0aGUgcHJlc2VuY2Ugb2YgYSByZXNwb25zZSBmcm9tIHRoZQorICogc2VydmVyIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gdG8gcHJvY2VzcyB0aGUgcmVwbHkgd2l0aG91dCBibG9ja2luZy4gIENhbGwgdGhpcyBmdW5jdGlvbgorICogYXQgYW55IHBvaW50IGlmIGl0IGlzIGFjY2VwdGFibGUgdG8gYmxvY2sgdW50aWwgdGhlIGRhZW1vbidzIHJlc3BvbnNlIGFycml2ZXMuICBOb3RlIHRoYXQgdGhlCisgKiBjbGllbnQgaXMgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgRE5TU2VydmljZVByb2Nlc3NSZXN1bHQoKSBpcyBjYWxsZWQgd2hlbmV2ZXIgdGhlcmUgaXMKKyAqIGEgcmVwbHkgZnJvbSB0aGUgZGFlbW9uIC0gdGhlIGRhZW1vbiBtYXkgdGVybWluYXRlIGl0cyBjb25uZWN0aW9uIHdpdGggYSBjbGllbnQgdGhhdCBkb2VzIG5vdAorICogcHJvY2VzcyB0aGUgZGFlbW9uJ3MgcmVzcG9uc2VzLgorICoKKyAqIHNkUmVmOiAgICAgICAgICAgQSBETlNTZXJ2aWNlUmVmIGluaXRpYWxpemVkIGJ5IGFueSBvZiB0aGUgRE5TU2VydmljZSBjYWxscworICogICAgICAgICAgICAgICAgICB0aGF0IHRha2UgYSBjYWxsYmFjayBwYXJhbWV0ZXIuCisgKgorICogcmV0dXJuIHZhbHVlOiAgICBSZXR1cm5zIGtETlNTZXJ2aWNlRXJyX05vRXJyb3Igb24gc3VjY2Vzcywgb3RoZXJ3aXNlIHJldHVybnMKKyAqICAgICAgICAgICAgICAgICAgYW4gZXJyb3IgY29kZSBpbmRpY2F0aW5nIHRoZSBzcGVjaWZpYyBmYWlsdXJlIHRoYXQgb2NjdXJyZWQuCisgKi8KKworRE5TU2VydmljZUVycm9yVHlwZSBETlNTRF9BUEkgRE5TU2VydmljZVByb2Nlc3NSZXN1bHQoRE5TU2VydmljZVJlZiBzZFJlZik7CisKKworLyogRE5TU2VydmljZVJlZkRlYWxsb2NhdGUoKQorICoKKyAqIFRlcm1pbmF0ZSBhIGNvbm5lY3Rpb24gd2l0aCB0aGUgZGFlbW9uIGFuZCBmcmVlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIEROU1NlcnZpY2VSZWYuCisgKiBBbnkgc2VydmljZXMgb3IgcmVjb3JkcyByZWdpc3RlcmVkIHdpdGggdGhpcyBETlNTZXJ2aWNlUmVmIHdpbGwgYmUgZGVyZWdpc3RlcmVkLiBBbnkKKyAqIEJyb3dzZSwgUmVzb2x2ZSwgb3IgUXVlcnkgb3BlcmF0aW9ucyBjYWxsZWQgd2l0aCB0aGlzIHJlZmVyZW5jZSB3aWxsIGJlIHRlcm1pbmF0ZWQuCisgKgorICogTm90ZTogSWYgdGhlIHJlZmVyZW5jZSdzIHVuZGVybHlpbmcgc29ja2V0IGlzIHVzZWQgaW4gYSBydW4gbG9vcCBvciBzZWxlY3QoKSBjYWxsLCBpdCBzaG91bGQKKyAqIGJlIHJlbW92ZWQgQkVGT1JFIEROU1NlcnZpY2VSZWZEZWFsbG9jYXRlKCkgaXMgY2FsbGVkLCBhcyB0aGlzIGZ1bmN0aW9uIGNsb3NlcyB0aGUgcmVmZXJlbmNlJ3MKKyAqIHNvY2tldC4KKyAqCisgKiBOb3RlOiBJZiB0aGUgcmVmZXJlbmNlIHdhcyBpbml0aWFsaXplZCB3aXRoIEROU1NlcnZpY2VDcmVhdGVDb25uZWN0aW9uKCksIGFueSBETlNSZWNvcmRSZWZzCisgKiBjcmVhdGVkIHZpYSB0aGlzIHJlZmVyZW5jZSB3aWxsIGJlIGludmFsaWRhdGVkIGJ5IHRoaXMgY2FsbCAtIHRoZSByZXNvdXJjZSByZWNvcmRzIGFyZQorICogZGVyZWdpc3RlcmVkLCBhbmQgdGhlaXIgRE5TUmVjb3JkUmVmcyBtYXkgbm90IGJlIHVzZWQgaW4gc3Vic2VxdWVudCBmdW5jdGlvbnMuICBTaW1pbGFybHksCisgKiBpZiB0aGUgcmVmZXJlbmNlIHdhcyBpbml0aWFsaXplZCB3aXRoIEROU1NlcnZpY2VSZWdpc3RlciwgYW5kIGFuIGV4dHJhIHJlc291cmNlIHJlY29yZCB3YXMKKyAqIGFkZGVkIHRvIHRoZSBzZXJ2aWNlIHZpYSBETlNTZXJ2aWNlQWRkUmVjb3JkKCksIHRoZSBETlNSZWNvcmRSZWYgY3JlYXRlZCBieSB0aGUgQWRkKCkgY2FsbAorICogaXMgaW52YWxpZGF0ZWQgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCAtIHRoZSBETlNSZWNvcmRSZWYgbWF5IG5vdCBiZSB1c2VkIGluIHN1YnNlcXVlbnQKKyAqIGZ1bmN0aW9ucy4KKyAqCisgKiBOb3RlOiBUaGlzIGNhbGwgaXMgdG8gYmUgdXNlZCBvbmx5IHdpdGggdGhlIEROU1NlcnZpY2VSZWYgZGVmaW5lZCBieSB0aGlzIEFQSS4gIEl0IGlzCisgKiBub3QgY29tcGF0aWJsZSB3aXRoIGRuc19zZXJ2aWNlX2Rpc2NvdmVyeV9yZWYgb2JqZWN0cyBkZWZpbmVkIGluIHRoZSBsZWdhY3kgTWFjaC1iYXNlZAorICogRE5TU2VydmljZURpc2NvdmVyeS5oIEFQSS4KKyAqCisgKiBzZFJlZjogICAgICAgICAgIEEgRE5TU2VydmljZVJlZiBpbml0aWFsaXplZCBieSBhbnkgb2YgdGhlIEROU1NlcnZpY2UgY2FsbHMuCisgKgorICovCisKK3ZvaWQgRE5TU0RfQVBJIEROU1NlcnZpY2VSZWZEZWFsbG9jYXRlKEROU1NlcnZpY2VSZWYgc2RSZWYpOworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBEb21haW4gRW51bWVyYXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBETlNTZXJ2aWNlRW51bWVyYXRlRG9tYWlucygpCisgKgorICogQXN5bmNocm9ub3VzbHkgZW51bWVyYXRlIGRvbWFpbnMgYXZhaWxhYmxlIGZvciBicm93c2luZyBhbmQgcmVnaXN0cmF0aW9uLgorICoKKyAqIFRoZSBlbnVtZXJhdGlvbiBNVVNUIGJlIGNhbmNlbGxlZCB2aWEgRE5TU2VydmljZVJlZkRlYWxsb2NhdGUoKSB3aGVuIG5vIG1vcmUgZG9tYWlucworICogYXJlIHRvIGJlIGZvdW5kLgorICoKKyAqIE5vdGUgdGhhdCB0aGUgbmFtZXMgcmV0dXJuZWQgYXJlIChsaWtlIGFsbCBvZiBETlMtU0QpIFVURi04IHN0cmluZ3MsCisgKiBhbmQgYXJlIGVzY2FwZWQgdXNpbmcgc3RhbmRhcmQgRE5TIGVzY2FwaW5nIHJ1bGVzLgorICogKFNlZSAiTm90ZXMgb24gRE5TIE5hbWUgRXNjYXBpbmciIGVhcmxpZXIgaW4gdGhpcyBmaWxlIGZvciBtb3JlIGRldGFpbHMuKQorICogQSBncmFwaGljYWwgYnJvd3NlciBkaXNwbGF5aW5nIGEgaGllcmFyY2hpY2FsIHRyZWUtc3RydWN0dXJlZCB2aWV3IHNob3VsZCBjdXQKKyAqIHRoZSBuYW1lcyBhdCB0aGUgYmFyZSBkb3RzIHRvIHlpZWxkIGluZGl2aWR1YWwgbGFiZWxzLCB0aGVuIGRlLWVzY2FwZSBlYWNoCisgKiBsYWJlbCBhY2NvcmRpbmcgdG8gdGhlIGVzY2FwaW5nIHJ1bGVzLCBhbmQgdGhlbiBkaXNwbGF5IHRoZSByZXN1bHRpbmcgVVRGLTggdGV4dC4KKyAqCisgKiBETlNTZXJ2aWNlRG9tYWluRW51bVJlcGx5IENhbGxiYWNrIFBhcmFtZXRlcnM6CisgKgorICogc2RSZWY6ICAgICAgICAgICBUaGUgRE5TU2VydmljZVJlZiBpbml0aWFsaXplZCBieSBETlNTZXJ2aWNlRW51bWVyYXRlRG9tYWlucygpLgorICoKKyAqIGZsYWdzOiAgICAgICAgICAgUG9zc2libGUgdmFsdWVzIGFyZToKKyAqICAgICAgICAgICAgICAgICAga0ROU1NlcnZpY2VGbGFnc01vcmVDb21pbmcKKyAqICAgICAgICAgICAgICAgICAga0ROU1NlcnZpY2VGbGFnc0FkZAorICogICAgICAgICAgICAgICAgICBrRE5TU2VydmljZUZsYWdzRGVmYXVsdAorICoKKyAqIGludGVyZmFjZUluZGV4OiAgU3BlY2lmaWVzIHRoZSBpbnRlcmZhY2Ugb24gd2hpY2ggdGhlIGRvbWFpbiBleGlzdHMuICAoVGhlIGluZGV4IGZvciBhIGdpdmVuCisgKiAgICAgICAgICAgICAgICAgIGludGVyZmFjZSBpcyBkZXRlcm1pbmVkIHZpYSB0aGUgaWZfbmFtZXRvaW5kZXgoKSBmYW1pbHkgb2YgY2FsbHMuKQorICoKKyAqIGVycm9yQ29kZTogICAgICAgV2lsbCBiZSBrRE5TU2VydmljZUVycl9Ob0Vycm9yICgwKSBvbiBzdWNjZXNzLCBvdGhlcndpc2UgaW5kaWNhdGVzCisgKiAgICAgICAgICAgICAgICAgIHRoZSBmYWlsdXJlIHRoYXQgb2NjdXJyZWQgKG90aGVyIHBhcmFtZXRlcnMgYXJlIHVuZGVmaW5lZCBpZiBlcnJvckNvZGUgaXMgbm9uemVybykuCisgKgorICogcmVwbHlEb21haW46ICAgICBUaGUgbmFtZSBvZiB0aGUgZG9tYWluLgorICoKKyAqIGNvbnRleHQ6ICAgICAgICAgVGhlIGNvbnRleHQgcG9pbnRlciBwYXNzZWQgdG8gRE5TU2VydmljZUVudW1lcmF0ZURvbWFpbnMuCisgKgorICovCisKK3R5cGVkZWYgdm9pZCAoRE5TU0RfQVBJICpETlNTZXJ2aWNlRG9tYWluRW51bVJlcGx5KQorICAgICgKKyAgICBETlNTZXJ2aWNlUmVmICAgICAgICAgICAgICAgICAgICAgICBzZFJlZiwKKyAgICBETlNTZXJ2aWNlRmxhZ3MgICAgICAgICAgICAgICAgICAgICBmbGFncywKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2VJbmRleCwKKyAgICBETlNTZXJ2aWNlRXJyb3JUeXBlICAgICAgICAgICAgICAgICBlcnJvckNvZGUsCisgICAgY29uc3QgY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgKnJlcGx5RG9tYWluLAorICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpjb250ZXh0CisgICAgKTsKKworCisvKiBETlNTZXJ2aWNlRW51bWVyYXRlRG9tYWlucygpIFBhcmFtZXRlcnM6CisgKgorICoKKyAqIHNkUmVmOiAgICAgICAgICAgQSBwb2ludGVyIHRvIGFuIHVuaW5pdGlhbGl6ZWQgRE5TU2VydmljZVJlZi4gSWYgdGhlIGNhbGwgc3VjY2VlZHMKKyAqICAgICAgICAgICAgICAgICAgdGhlbiBpdCBpbml0aWFsaXplcyB0aGUgRE5TU2VydmljZVJlZiwgcmV0dXJucyBrRE5TU2VydmljZUVycl9Ob0Vycm9yLAorICogICAgICAgICAgICAgICAgICBhbmQgdGhlIGVudW1lcmF0aW9uIG9wZXJhdGlvbiB3aWxsIHJ1biBpbmRlZmluaXRlbHkgdW50aWwgdGhlIGNsaWVudAorICogICAgICAgICAgICAgICAgICB0ZXJtaW5hdGVzIGl0IGJ5IHBhc3NpbmcgdGhpcyBETlNTZXJ2aWNlUmVmIHRvIEROU1NlcnZpY2VSZWZEZWFsbG9jYXRlKCkuCisgKgorICogZmxhZ3M6ICAgICAgICAgICBQb3NzaWJsZSB2YWx1ZXMgYXJlOgorICogICAgICAgICAgICAgICAgICBrRE5TU2VydmljZUZsYWdzQnJvd3NlRG9tYWlucyB0byBlbnVtZXJhdGUgZG9tYWlucyByZWNvbW1lbmRlZCBmb3IgYnJvd3NpbmcuCisgKiAgICAgICAgICAgICAgICAgIGtETlNTZXJ2aWNlRmxhZ3NSZWdpc3RyYXRpb25Eb21haW5zIHRvIGVudW1lcmF0ZSBkb21haW5zIHJlY29tbWVuZGVkCisgKiAgICAgICAgICAgICAgICAgIGZvciByZWdpc3RyYXRpb24uCisgKgorICogaW50ZXJmYWNlSW5kZXg6ICBJZiBub24temVybywgc3BlY2lmaWVzIHRoZSBpbnRlcmZhY2Ugb24gd2hpY2ggdG8gbG9vayBmb3IgZG9tYWlucy4KKyAqICAgICAgICAgICAgICAgICAgKHRoZSBpbmRleCBmb3IgYSBnaXZlbiBpbnRlcmZhY2UgaXMgZGV0ZXJtaW5lZCB2aWEgdGhlIGlmX25hbWV0b2luZGV4KCkKKyAqICAgICAgICAgICAgICAgICAgZmFtaWx5IG9mIGNhbGxzLikgIE1vc3QgYXBwbGljYXRpb25zIHdpbGwgcGFzcyAwIHRvIGVudW1lcmF0ZSBkb21haW5zIG9uCisgKiAgICAgICAgICAgICAgICAgIGFsbCBpbnRlcmZhY2VzLiBTZWUgIkNvbnN0YW50cyBmb3Igc3BlY2lmeWluZyBhbiBpbnRlcmZhY2UgaW5kZXgiIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogY2FsbEJhY2s6ICAgICAgICBUaGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gYSBkb21haW4gaXMgZm91bmQgb3IgdGhlIGNhbGwgYXN5bmNocm9ub3VzbHkKKyAqICAgICAgICAgICAgICAgICAgZmFpbHMuCisgKgorICogY29udGV4dDogICAgICAgICBBbiBhcHBsaWNhdGlvbiBjb250ZXh0IHBvaW50ZXIgd2hpY2ggaXMgcGFzc2VkIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbgorICogICAgICAgICAgICAgICAgICAobWF5IGJlIE5VTEwpLgorICoKKyAqIHJldHVybiB2YWx1ZTogICAgUmV0dXJucyBrRE5TU2VydmljZUVycl9Ob0Vycm9yIG9uIHN1Y2Nlc2VzIChhbnkgc3Vic2VxdWVudCwgYXN5bmNocm9ub3VzCisgKiAgICAgICAgICAgICAgICAgIGVycm9ycyBhcmUgZGVsaXZlcmVkIHRvIHRoZSBjYWxsYmFjayksIG90aGVyd2lzZSByZXR1cm5zIGFuIGVycm9yIGNvZGUgaW5kaWNhdGluZworICogICAgICAgICAgICAgICAgICB0aGUgZXJyb3IgdGhhdCBvY2N1cnJlZCAodGhlIGNhbGxiYWNrIGlzIG5vdCBpbnZva2VkIGFuZCB0aGUgRE5TU2VydmljZVJlZgorICogICAgICAgICAgICAgICAgICBpcyBub3QgaW5pdGlhbGl6ZWQuKQorICovCisKK0ROU1NlcnZpY2VFcnJvclR5cGUgRE5TU0RfQVBJIEROU1NlcnZpY2VFbnVtZXJhdGVEb21haW5zCisgICAgKAorICAgIEROU1NlcnZpY2VSZWYgICAgICAgICAgICAgICAgICAgICAgICpzZFJlZiwKKyAgICBETlNTZXJ2aWNlRmxhZ3MgICAgICAgICAgICAgICAgICAgICBmbGFncywKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2VJbmRleCwKKyAgICBETlNTZXJ2aWNlRG9tYWluRW51bVJlcGx5ICAgICAgICAgICBjYWxsQmFjaywKKyAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqY29udGV4dCAgLyogbWF5IGJlIE5VTEwgKi8KKyAgICApOworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgU2VydmljZSBSZWdpc3RyYXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBSZWdpc3RlciBhIHNlcnZpY2UgdGhhdCBpcyBkaXNjb3ZlcmVkIHZpYSBCcm93c2UoKSBhbmQgUmVzb2x2ZSgpIGNhbGxzLgorICoKKyAqCisgKiBETlNTZXJ2aWNlUmVnaXN0ZXJSZXBseSgpIENhbGxiYWNrIFBhcmFtZXRlcnM6CisgKgorICogc2RSZWY6ICAgICAgICAgICBUaGUgRE5TU2VydmljZVJlZiBpbml0aWFsaXplZCBieSBETlNTZXJ2aWNlUmVnaXN0ZXIoKS4KKyAqCisgKiBmbGFnczogICAgICAgICAgIEN1cnJlbnRseSB1bnVzZWQsIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlLgorICoKKyAqIGVycm9yQ29kZTogICAgICAgV2lsbCBiZSBrRE5TU2VydmljZUVycl9Ob0Vycm9yIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSB3aWxsCisgKiAgICAgICAgICAgICAgICAgIGluZGljYXRlIHRoZSBmYWlsdXJlIHRoYXQgb2NjdXJyZWQgKGluY2x1ZGluZyBuYW1lIGNvbmZsaWN0cywKKyAqICAgICAgICAgICAgICAgICAgaWYgdGhlIGtETlNTZXJ2aWNlRmxhZ3NOb0F1dG9SZW5hbWUgZmxhZyB3YXMgdXNlZCB3aGVuIHJlZ2lzdGVyaW5nLikKKyAqICAgICAgICAgICAgICAgICAgT3RoZXIgcGFyYW1ldGVycyBhcmUgdW5kZWZpbmVkIGlmIGVycm9yQ29kZSBpcyBub256ZXJvLgorICoKKyAqIG5hbWU6ICAgICAgICAgICAgVGhlIHNlcnZpY2UgbmFtZSByZWdpc3RlcmVkIChpZiB0aGUgYXBwbGljYXRpb24gZGlkIG5vdCBzcGVjaWZ5IGEgbmFtZSBpbgorICogICAgICAgICAgICAgICAgICBETlNTZXJ2aWNlUmVnaXN0ZXIoKSwgdGhpcyBpbmRpY2F0ZXMgd2hhdCBuYW1lIHdhcyBhdXRvbWF0aWNhbGx5IGNob3NlbikuCisgKgorICogcmVndHlwZTogICAgICAgICBUaGUgdHlwZSBvZiBzZXJ2aWNlIHJlZ2lzdGVyZWQsIGFzIGl0IHdhcyBwYXNzZWQgdG8gdGhlIGNhbGxvdXQuCisgKgorICogZG9tYWluOiAgICAgICAgICBUaGUgZG9tYWluIG9uIHdoaWNoIHRoZSBzZXJ2aWNlIHdhcyByZWdpc3RlcmVkIChpZiB0aGUgYXBwbGljYXRpb24gZGlkIG5vdAorICogICAgICAgICAgICAgICAgICBzcGVjaWZ5IGEgZG9tYWluIGluIEROU1NlcnZpY2VSZWdpc3RlcigpLCB0aGlzIGluZGljYXRlcyB0aGUgZGVmYXVsdCBkb21haW4KKyAqICAgICAgICAgICAgICAgICAgb24gd2hpY2ggdGhlIHNlcnZpY2Ugd2FzIHJlZ2lzdGVyZWQpLgorICoKKyAqIGNvbnRleHQ6ICAgICAgICAgVGhlIGNvbnRleHQgcG9pbnRlciB0aGF0IHdhcyBwYXNzZWQgdG8gdGhlIGNhbGxvdXQuCisgKgorICovCisKK3R5cGVkZWYgdm9pZCAoRE5TU0RfQVBJICpETlNTZXJ2aWNlUmVnaXN0ZXJSZXBseSkKKyAgICAoCisgICAgRE5TU2VydmljZVJlZiAgICAgICAgICAgICAgICAgICAgICAgc2RSZWYsCisgICAgRE5TU2VydmljZUZsYWdzICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsCisgICAgRE5TU2VydmljZUVycm9yVHlwZSAgICAgICAgICAgICAgICAgZXJyb3JDb2RlLAorICAgIGNvbnN0IGNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICpuYW1lLAorICAgIGNvbnN0IGNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICpyZWd0eXBlLAorICAgIGNvbnN0IGNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICpkb21haW4sCisgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmNvbnRleHQKKyAgICApOworCisKKy8qIEROU1NlcnZpY2VSZWdpc3RlcigpICBQYXJhbWV0ZXJzOgorICoKKyAqIHNkUmVmOiAgICAgICAgICAgQSBwb2ludGVyIHRvIGFuIHVuaW5pdGlhbGl6ZWQgRE5TU2VydmljZVJlZi4gSWYgdGhlIGNhbGwgc3VjY2VlZHMKKyAqICAgICAgICAgICAgICAgICAgdGhlbiBpdCBpbml0aWFsaXplcyB0aGUgRE5TU2VydmljZVJlZiwgcmV0dXJucyBrRE5TU2VydmljZUVycl9Ob0Vycm9yLAorICogICAgICAgICAgICAgICAgICBhbmQgdGhlIHJlZ2lzdHJhdGlvbiB3aWxsIHJlbWFpbiBhY3RpdmUgaW5kZWZpbml0ZWx5IHVudGlsIHRoZSBjbGllbnQKKyAqICAgICAgICAgICAgICAgICAgdGVybWluYXRlcyBpdCBieSBwYXNzaW5nIHRoaXMgRE5TU2VydmljZVJlZiB0byBETlNTZXJ2aWNlUmVmRGVhbGxvY2F0ZSgpLgorICoKKyAqIGludGVyZmFjZUluZGV4OiAgSWYgbm9uLXplcm8sIHNwZWNpZmllcyB0aGUgaW50ZXJmYWNlIG9uIHdoaWNoIHRvIHJlZ2lzdGVyIHRoZSBzZXJ2aWNlCisgKiAgICAgICAgICAgICAgICAgICh0aGUgaW5kZXggZm9yIGEgZ2l2ZW4gaW50ZXJmYWNlIGlzIGRldGVybWluZWQgdmlhIHRoZSBpZl9uYW1ldG9pbmRleCgpCisgKiAgICAgICAgICAgICAgICAgIGZhbWlseSBvZiBjYWxscy4pICBNb3N0IGFwcGxpY2F0aW9ucyB3aWxsIHBhc3MgMCB0byByZWdpc3RlciBvbiBhbGwKKyAqICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlIGludGVyZmFjZXMuIFNlZSAiQ29uc3RhbnRzIGZvciBzcGVjaWZ5aW5nIGFuIGludGVyZmFjZSBpbmRleCIgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBmbGFnczogICAgICAgICAgIEluZGljYXRlcyB0aGUgcmVuYW1pbmcgYmVoYXZpb3Igb24gbmFtZSBjb25mbGljdCAobW9zdCBhcHBsaWNhdGlvbnMKKyAqICAgICAgICAgICAgICAgICAgd2lsbCBwYXNzIDApLiAgU2VlIGZsYWcgZGVmaW5pdGlvbnMgYWJvdmUgZm9yIGRldGFpbHMuCisgKgorICogbmFtZTogICAgICAgICAgICBJZiBub24tTlVMTCwgc3BlY2lmaWVzIHRoZSBzZXJ2aWNlIG5hbWUgdG8gYmUgcmVnaXN0ZXJlZC4KKyAqICAgICAgICAgICAgICAgICAgTW9zdCBhcHBsaWNhdGlvbnMgd2lsbCBub3Qgc3BlY2lmeSBhIG5hbWUsIGluIHdoaWNoIGNhc2UgdGhlIGNvbXB1dGVyCisgKiAgICAgICAgICAgICAgICAgIG5hbWUgaXMgdXNlZCAodGhpcyBuYW1lIGlzIGNvbW11bmljYXRlZCB0byB0aGUgY2xpZW50IHZpYSB0aGUgY2FsbGJhY2spLgorICogICAgICAgICAgICAgICAgICBJZiBhIG5hbWUgaXMgc3BlY2lmaWVkLCBpdCBtdXN0IGJlIDEtNjMgYnl0ZXMgb2YgVVRGLTggdGV4dC4KKyAqICAgICAgICAgICAgICAgICAgSWYgdGhlIG5hbWUgaXMgbG9uZ2VyIHRoYW4gNjMgYnl0ZXMgaXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHRydW5jYXRlZAorICogICAgICAgICAgICAgICAgICB0byBhIGxlZ2FsIGxlbmd0aCwgdW5sZXNzIHRoZSBOb0F1dG9SZW5hbWUgZmxhZyBpcyBzZXQsCisgKiAgICAgICAgICAgICAgICAgIGluIHdoaWNoIGNhc2Uga0ROU1NlcnZpY2VFcnJfQmFkUGFyYW0gd2lsbCBiZSByZXR1cm5lZC4KKyAqCisgKiByZWd0eXBlOiAgICAgICAgIFRoZSBzZXJ2aWNlIHR5cGUgZm9sbG93ZWQgYnkgdGhlIHByb3RvY29sLCBzZXBhcmF0ZWQgYnkgYSBkb3QKKyAqICAgICAgICAgICAgICAgICAgKGUuZy4gIl9mdHAuX3RjcCIpLiBUaGUgc2VydmljZSB0eXBlIG11c3QgYmUgYW4gdW5kZXJzY29yZSwgZm9sbG93ZWQKKyAqICAgICAgICAgICAgICAgICAgYnkgMS0xNCBjaGFyYWN0ZXJzLCB3aGljaCBtYXkgYmUgbGV0dGVycywgZGlnaXRzLCBvciBoeXBoZW5zLgorICogICAgICAgICAgICAgICAgICBUaGUgdHJhbnNwb3J0IHByb3RvY29sIG11c3QgYmUgIl90Y3AiIG9yICJfdWRwIi4gTmV3IHNlcnZpY2UgdHlwZXMKKyAqICAgICAgICAgICAgICAgICAgc2hvdWxkIGJlIHJlZ2lzdGVyZWQgYXQgPGh0dHA6Ly93d3cuZG5zLXNkLm9yZy9TZXJ2aWNlVHlwZXMuaHRtbD4uCisgKgorICogZG9tYWluOiAgICAgICAgICBJZiBub24tTlVMTCwgc3BlY2lmaWVzIHRoZSBkb21haW4gb24gd2hpY2ggdG8gYWR2ZXJ0aXNlIHRoZSBzZXJ2aWNlLgorICogICAgICAgICAgICAgICAgICBNb3N0IGFwcGxpY2F0aW9ucyB3aWxsIG5vdCBzcGVjaWZ5IGEgZG9tYWluLCBpbnN0ZWFkIGF1dG9tYXRpY2FsbHkKKyAqICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJpbmcgaW4gdGhlIGRlZmF1bHQgZG9tYWluKHMpLgorICoKKyAqIGhvc3Q6ICAgICAgICAgICAgSWYgbm9uLU5VTEwsIHNwZWNpZmllcyB0aGUgU1JWIHRhcmdldCBob3N0IG5hbWUuICBNb3N0IGFwcGxpY2F0aW9ucworICogICAgICAgICAgICAgICAgICB3aWxsIG5vdCBzcGVjaWZ5IGEgaG9zdCwgaW5zdGVhZCBhdXRvbWF0aWNhbGx5IHVzaW5nIHRoZSBtYWNoaW5lJ3MKKyAqICAgICAgICAgICAgICAgICAgZGVmYXVsdCBob3N0IG5hbWUocykuICBOb3RlIHRoYXQgc3BlY2lmeWluZyBhIG5vbi1OVUxMIGhvc3QgZG9lcyBOT1QKKyAqICAgICAgICAgICAgICAgICAgY3JlYXRlIGFuIGFkZHJlc3MgcmVjb3JkIGZvciB0aGF0IGhvc3QgLSB0aGUgYXBwbGljYXRpb24gaXMgcmVzcG9uc2libGUKKyAqICAgICAgICAgICAgICAgICAgZm9yIGVuc3VyaW5nIHRoYXQgdGhlIGFwcHJvcHJpYXRlIGFkZHJlc3MgcmVjb3JkIGV4aXN0cywgb3IgY3JlYXRpbmcgaXQKKyAqICAgICAgICAgICAgICAgICAgdmlhIEROU1NlcnZpY2VSZWdpc3RlclJlY29yZCgpLgorICoKKyAqIHBvcnQ6ICAgICAgICAgICAgVGhlIHBvcnQsIGluIG5ldHdvcmsgYnl0ZSBvcmRlciwgb24gd2hpY2ggdGhlIHNlcnZpY2UgYWNjZXB0cyBjb25uZWN0aW9ucy4KKyAqICAgICAgICAgICAgICAgICAgUGFzcyAwIGZvciBhICJwbGFjZWhvbGRlciIgc2VydmljZSAoaS5lLiBhIHNlcnZpY2UgdGhhdCB3aWxsIG5vdCBiZSBkaXNjb3ZlcmVkCisgKiAgICAgICAgICAgICAgICAgIGJ5IGJyb3dzaW5nLCBidXQgd2lsbCBjYXVzZSBhIG5hbWUgY29uZmxpY3QgaWYgYW5vdGhlciBjbGllbnQgdHJpZXMgdG8KKyAqICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIgdGhhdCBzYW1lIG5hbWUpLiAgTW9zdCBjbGllbnRzIHdpbGwgbm90IHVzZSBwbGFjZWhvbGRlciBzZXJ2aWNlcy4KKyAqCisgKiB0eHRMZW46ICAgICAgICAgIFRoZSBsZW5ndGggb2YgdGhlIHR4dFJlY29yZCwgaW4gYnl0ZXMuICBNdXN0IGJlIHplcm8gaWYgdGhlIHR4dFJlY29yZCBpcyBOVUxMLgorICoKKyAqIHR4dFJlY29yZDogICAgICAgVGhlIFRYVCByZWNvcmQgcmRhdGEuIEEgbm9uLU5VTEwgdHh0UmVjb3JkIE1VU1QgYmUgYSBwcm9wZXJseSBmb3JtYXR0ZWQgRE5TCisgKiAgICAgICAgICAgICAgICAgIFRYVCByZWNvcmQsIGkuZS4gPGxlbmd0aCBieXRlPiA8ZGF0YT4gPGxlbmd0aCBieXRlPiA8ZGF0YT4gLi4uCisgKiAgICAgICAgICAgICAgICAgIFBhc3NpbmcgTlVMTCBmb3IgdGhlIHR4dFJlY29yZCBpcyBhbGxvd2VkIGFzIGEgc3lub255bSBmb3IgdHh0TGVuPTEsIHR4dFJlY29yZD0iIiwKKyAqICAgICAgICAgICAgICAgICAgaS5lLiBpdCBjcmVhdGVzIGEgVFhUIHJlY29yZCBvZiBsZW5ndGggb25lIGNvbnRhaW5pbmcgYSBzaW5nbGUgZW1wdHkgc3RyaW5nLgorICogICAgICAgICAgICAgICAgICBSRkMgMTAzNSBkb2Vzbid0IGFsbG93IGEgVFhUIHJlY29yZCB0byBjb250YWluICp6ZXJvKiBzdHJpbmdzLCBzbyBhIHNpbmdsZSBlbXB0eQorICogICAgICAgICAgICAgICAgICBzdHJpbmcgaXMgdGhlIHNtYWxsZXN0IGxlZ2FsIEROUyBUWFQgcmVjb3JkLgorICogICAgICAgICAgICAgICAgICBBcyB3aXRoIHRoZSBvdGhlciBwYXJhbWV0ZXJzLCB0aGUgRE5TU2VydmljZVJlZ2lzdGVyIGNhbGwgY29waWVzIHRoZSB0eHRSZWNvcmQKKyAqICAgICAgICAgICAgICAgICAgZGF0YTsgZS5nLiBpZiB5b3UgYWxsb2NhdGVkIHRoZSBzdG9yYWdlIGZvciB0aGUgdHh0UmVjb3JkIHBhcmFtZXRlciB3aXRoIG1hbGxvYygpCisgKiAgICAgICAgICAgICAgICAgIHRoZW4geW91IGNhbiBzYWZlbHkgZnJlZSB0aGF0IG1lbW9yeSByaWdodCBhZnRlciB0aGUgRE5TU2VydmljZVJlZ2lzdGVyIGNhbGwgcmV0dXJucy4KKyAqCisgKiBjYWxsQmFjazogICAgICAgIFRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgcmVnaXN0cmF0aW9uIGNvbXBsZXRlcyBvciBhc3luY2hyb25vdXNseQorICogICAgICAgICAgICAgICAgICBmYWlscy4gIFRoZSBjbGllbnQgTUFZIHBhc3MgTlVMTCBmb3IgdGhlIGNhbGxiYWNrIC0gIFRoZSBjbGllbnQgd2lsbCBOT1QgYmUgbm90aWZpZWQKKyAqICAgICAgICAgICAgICAgICAgb2YgdGhlIGRlZmF1bHQgdmFsdWVzIHBpY2tlZCBvbiBpdHMgYmVoYWxmLCBhbmQgdGhlIGNsaWVudCB3aWxsIE5PVCBiZSBub3RpZmllZCBvZiBhbnkKKyAqICAgICAgICAgICAgICAgICAgYXN5bmNocm9ub3VzIGVycm9ycyAoZS5nLiBvdXQgb2YgbWVtb3J5IGVycm9ycywgZXRjLikgdGhhdCBtYXkgcHJldmVudCB0aGUgcmVnaXN0cmF0aW9uCisgKiAgICAgICAgICAgICAgICAgIG9mIHRoZSBzZXJ2aWNlLiAgVGhlIGNsaWVudCBtYXkgTk9UIHBhc3MgdGhlIE5vQXV0b1JlbmFtZSBmbGFnIGlmIHRoZSBjYWxsYmFjayBpcyBOVUxMLgorICogICAgICAgICAgICAgICAgICBUaGUgY2xpZW50IG1heSBzdGlsbCBkZXJlZ2lzdGVyIHRoZSBzZXJ2aWNlIGF0IGFueSB0aW1lIHZpYSBETlNTZXJ2aWNlUmVmRGVhbGxvY2F0ZSgpLgorICoKKyAqIGNvbnRleHQ6ICAgICAgICAgQW4gYXBwbGljYXRpb24gY29udGV4dCBwb2ludGVyIHdoaWNoIGlzIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24KKyAqICAgICAgICAgICAgICAgICAgKG1heSBiZSBOVUxMKS4KKyAqCisgKiByZXR1cm4gdmFsdWU6ICAgIFJldHVybnMga0ROU1NlcnZpY2VFcnJfTm9FcnJvciBvbiBzdWNjZXNlcyAoYW55IHN1YnNlcXVlbnQsIGFzeW5jaHJvbm91cworICogICAgICAgICAgICAgICAgICBlcnJvcnMgYXJlIGRlbGl2ZXJlZCB0byB0aGUgY2FsbGJhY2spLCBvdGhlcndpc2UgcmV0dXJucyBhbiBlcnJvciBjb2RlIGluZGljYXRpbmcKKyAqICAgICAgICAgICAgICAgICAgdGhlIGVycm9yIHRoYXQgb2NjdXJyZWQgKHRoZSBjYWxsYmFjayBpcyBuZXZlciBpbnZva2VkIGFuZCB0aGUgRE5TU2VydmljZVJlZgorICogICAgICAgICAgICAgICAgICBpcyBub3QgaW5pdGlhbGl6ZWQuKQorICovCisKK0ROU1NlcnZpY2VFcnJvclR5cGUgRE5TU0RfQVBJIEROU1NlcnZpY2VSZWdpc3RlcgorICAgICgKKyAgICBETlNTZXJ2aWNlUmVmICAgICAgICAgICAgICAgICAgICAgICAqc2RSZWYsCisgICAgRE5TU2VydmljZUZsYWdzICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsCisgICAgdWludDMyX3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlSW5kZXgsCisgICAgY29uc3QgY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgKm5hbWUsICAgICAgICAgLyogbWF5IGJlIE5VTEwgKi8KKyAgICBjb25zdCBjaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAqcmVndHlwZSwKKyAgICBjb25zdCBjaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAqZG9tYWluLCAgICAgICAvKiBtYXkgYmUgTlVMTCAqLworICAgIGNvbnN0IGNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICpob3N0LCAgICAgICAgIC8qIG1heSBiZSBOVUxMICovCisgICAgdWludDE2X3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydCwKKyAgICB1aW50MTZfdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eHRMZW4sCisgICAgY29uc3Qgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgKnR4dFJlY29yZCwgICAgLyogbWF5IGJlIE5VTEwgKi8KKyAgICBETlNTZXJ2aWNlUmVnaXN0ZXJSZXBseSAgICAgICAgICAgICBjYWxsQmFjaywgICAgICAvKiBtYXkgYmUgTlVMTCAqLworICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpjb250ZXh0ICAgICAgIC8qIG1heSBiZSBOVUxMICovCisgICAgKTsKKworCisvKiBETlNTZXJ2aWNlQWRkUmVjb3JkKCkKKyAqCisgKiBBZGQgYSByZWNvcmQgdG8gYSByZWdpc3RlcmVkIHNlcnZpY2UuICBUaGUgbmFtZSBvZiB0aGUgcmVjb3JkIHdpbGwgYmUgdGhlIHNhbWUgYXMgdGhlCisgKiByZWdpc3RlcmVkIHNlcnZpY2UncyBuYW1lLgorICogVGhlIHJlY29yZCBjYW4gbGF0ZXIgYmUgdXBkYXRlZCBvciBkZXJlZ2lzdGVyZWQgYnkgcGFzc2luZyB0aGUgUmVjb3JkUmVmIGluaXRpYWxpemVkCisgKiBieSB0aGlzIGZ1bmN0aW9uIHRvIEROU1NlcnZpY2VVcGRhdGVSZWNvcmQoKSBvciBETlNTZXJ2aWNlUmVtb3ZlUmVjb3JkKCkuCisgKgorICogTm90ZSB0aGF0IHRoZSBETlNTZXJ2aWNlQWRkUmVjb3JkL1VwZGF0ZVJlY29yZC9SZW1vdmVSZWNvcmQgYXJlICpOT1QqIHRocmVhZC1zYWZlCisgKiB3aXRoIHJlc3BlY3QgdG8gYSBzaW5nbGUgRE5TU2VydmljZVJlZi4gSWYgeW91IHBsYW4gdG8gaGF2ZSBtdWx0aXBsZSB0aHJlYWRzCisgKiBpbiB5b3VyIHByb2dyYW0gc2ltdWx0YW5lb3VzbHkgYWRkLCB1cGRhdGUsIG9yIHJlbW92ZSByZWNvcmRzIGZyb20gdGhlIHNhbWUKKyAqIEROU1NlcnZpY2VSZWYsIHRoZW4gaXQncyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gdXNlIGEgbXV0ZXh0IGxvY2sKKyAqIG9yIHRha2Ugc2ltaWxhciBhcHByb3ByaWF0ZSBwcmVjYXV0aW9ucyB0byBzZXJpYWxpemUgdGhvc2UgY2FsbHMuCisgKgorICoKKyAqIFBhcmFtZXRlcnM7CisgKgorICogc2RSZWY6ICAgICAgICAgICBBIEROU1NlcnZpY2VSZWYgaW5pdGlhbGl6ZWQgYnkgRE5TU2VydmljZVJlZ2lzdGVyKCkuCisgKgorICogUmVjb3JkUmVmOiAgICAgICBBIHBvaW50ZXIgdG8gYW4gdW5pbml0aWFsaXplZCBETlNSZWNvcmRSZWYuICBVcG9uIHN1Y2Nlc2Z1bGwgY29tcGxldGlvbiBvZiB0aGlzCisgKiAgICAgICAgICAgICAgICAgIGNhbGwsIHRoaXMgcmVmIG1heSBiZSBwYXNzZWQgdG8gRE5TU2VydmljZVVwZGF0ZVJlY29yZCgpIG9yIEROU1NlcnZpY2VSZW1vdmVSZWNvcmQoKS4KKyAqICAgICAgICAgICAgICAgICAgSWYgdGhlIGFib3ZlIEROU1NlcnZpY2VSZWYgaXMgcGFzc2VkIHRvIEROU1NlcnZpY2VSZWZEZWFsbG9jYXRlKCksIFJlY29yZFJlZiBpcyBhbHNvCisgKiAgICAgICAgICAgICAgICAgIGludmFsaWRhdGVkIGFuZCBtYXkgbm90IGJlIHVzZWQgZnVydGhlci4KKyAqCisgKiBmbGFnczogICAgICAgICAgIEN1cnJlbnRseSBpZ25vcmVkLCByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4KKyAqCisgKiBycnR5cGU6ICAgICAgICAgIFRoZSB0eXBlIG9mIHRoZSByZWNvcmQgKGUuZy4ga0ROU1NlcnZpY2VUeXBlX1RYVCwga0ROU1NlcnZpY2VUeXBlX1NSViwgZXRjKQorICoKKyAqIHJkbGVuOiAgICAgICAgICAgVGhlIGxlbmd0aCwgaW4gYnl0ZXMsIG9mIHRoZSByZGF0YS4KKyAqCisgKiByZGF0YTogICAgICAgICAgIFRoZSByYXcgcmRhdGEgdG8gYmUgY29udGFpbmVkIGluIHRoZSBhZGRlZCByZXNvdXJjZSByZWNvcmQuCisgKgorICogdHRsOiAgICAgICAgICAgICBUaGUgdGltZSB0byBsaXZlIG9mIHRoZSByZXNvdXJjZSByZWNvcmQsIGluIHNlY29uZHMuICBQYXNzIDAgdG8gdXNlIGEgZGVmYXVsdCB2YWx1ZS4KKyAqCisgKiByZXR1cm4gdmFsdWU6ICAgIFJldHVybnMga0ROU1NlcnZpY2VFcnJfTm9FcnJvciBvbiBzdWNjZXNzLCBvdGhlcndpc2UgcmV0dXJucyBhbgorICogICAgICAgICAgICAgICAgICBlcnJvciBjb2RlIGluZGljYXRpbmcgdGhlIGVycm9yIHRoYXQgb2NjdXJyZWQgKHRoZSBSZWNvcmRSZWYgaXMgbm90IGluaXRpYWxpemVkKS4KKyAqLworCitETlNTZXJ2aWNlRXJyb3JUeXBlIEROU1NEX0FQSSBETlNTZXJ2aWNlQWRkUmVjb3JkCisgICAgKAorICAgIEROU1NlcnZpY2VSZWYgICAgICAgICAgICAgICAgICAgICAgIHNkUmVmLAorICAgIEROU1JlY29yZFJlZiAgICAgICAgICAgICAgICAgICAgICAgICpSZWNvcmRSZWYsCisgICAgRE5TU2VydmljZUZsYWdzICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsCisgICAgdWludDE2X3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnJ0eXBlLAorICAgIHVpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkbGVuLAorICAgIGNvbnN0IHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICpyZGF0YSwKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dGwKKyAgICApOworCisKKy8qIEROU1NlcnZpY2VVcGRhdGVSZWNvcmQKKyAqCisgKiBVcGRhdGUgYSByZWdpc3RlcmVkIHJlc291cmNlIHJlY29yZC4gIFRoZSByZWNvcmQgbXVzdCBlaXRoZXIgYmU6CisgKiAgIC0gVGhlIHByaW1hcnkgdHh0IHJlY29yZCBvZiBhIHNlcnZpY2UgcmVnaXN0ZXJlZCB2aWEgRE5TU2VydmljZVJlZ2lzdGVyKCkKKyAqICAgLSBBIHJlY29yZCBhZGRlZCB0byBhIHJlZ2lzdGVyZWQgc2VydmljZSB2aWEgRE5TU2VydmljZUFkZFJlY29yZCgpCisgKiAgIC0gQW4gaW5kaXZpZHVhbCByZWNvcmQgcmVnaXN0ZXJlZCBieSBETlNTZXJ2aWNlUmVnaXN0ZXJSZWNvcmQoKQorICoKKyAqCisgKiBQYXJhbWV0ZXJzOgorICoKKyAqIHNkUmVmOiAgICAgICAgICAgQSBETlNTZXJ2aWNlUmVmIHRoYXQgd2FzIGluaXRpYWxpemVkIGJ5IEROU1NlcnZpY2VSZWdpc3RlcigpCisgKiAgICAgICAgICAgICAgICAgIG9yIEROU1NlcnZpY2VDcmVhdGVDb25uZWN0aW9uKCkuCisgKgorICogUmVjb3JkUmVmOiAgICAgICBBIEROU1JlY29yZFJlZiBpbml0aWFsaXplZCBieSBETlNTZXJ2aWNlQWRkUmVjb3JkLCBvciBOVUxMIHRvIHVwZGF0ZSB0aGUKKyAqICAgICAgICAgICAgICAgICAgc2VydmljZSdzIHByaW1hcnkgdHh0IHJlY29yZC4KKyAqCisgKiBmbGFnczogICAgICAgICAgIEN1cnJlbnRseSBpZ25vcmVkLCByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4KKyAqCisgKiByZGxlbjogICAgICAgICAgIFRoZSBsZW5ndGgsIGluIGJ5dGVzLCBvZiB0aGUgbmV3IHJkYXRhLgorICoKKyAqIHJkYXRhOiAgICAgICAgICAgVGhlIG5ldyByZGF0YSB0byBiZSBjb250YWluZWQgaW4gdGhlIHVwZGF0ZWQgcmVzb3VyY2UgcmVjb3JkLgorICoKKyAqIHR0bDogICAgICAgICAgICAgVGhlIHRpbWUgdG8gbGl2ZSBvZiB0aGUgdXBkYXRlZCByZXNvdXJjZSByZWNvcmQsIGluIHNlY29uZHMuCisgKgorICogcmV0dXJuIHZhbHVlOiAgICBSZXR1cm5zIGtETlNTZXJ2aWNlRXJyX05vRXJyb3Igb24gc3VjY2Vzcywgb3RoZXJ3aXNlIHJldHVybnMgYW4KKyAqICAgICAgICAgICAgICAgICAgZXJyb3IgY29kZSBpbmRpY2F0aW5nIHRoZSBlcnJvciB0aGF0IG9jY3VycmVkLgorICovCisKK0ROU1NlcnZpY2VFcnJvclR5cGUgRE5TU0RfQVBJIEROU1NlcnZpY2VVcGRhdGVSZWNvcmQKKyAgICAoCisgICAgRE5TU2VydmljZVJlZiAgICAgICAgICAgICAgICAgICAgICAgc2RSZWYsCisgICAgRE5TUmVjb3JkUmVmICAgICAgICAgICAgICAgICAgICAgICAgUmVjb3JkUmVmLCAgICAgLyogbWF5IGJlIE5VTEwgKi8KKyAgICBETlNTZXJ2aWNlRmxhZ3MgICAgICAgICAgICAgICAgICAgICBmbGFncywKKyAgICB1aW50MTZfdCAgICAgICAgICAgICAgICAgICAgICAgICAgICByZGxlbiwKKyAgICBjb25zdCB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAqcmRhdGEsCisgICAgdWludDMyX3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHRsCisgICAgKTsKKworCisvKiBETlNTZXJ2aWNlUmVtb3ZlUmVjb3JkCisgKgorICogUmVtb3ZlIGEgcmVjb3JkIHByZXZpb3VzbHkgYWRkZWQgdG8gYSBzZXJ2aWNlIHJlY29yZCBzZXQgdmlhIEROU1NlcnZpY2VBZGRSZWNvcmQoKSwgb3IgZGVyZWdpc3RlcgorICogYW4gcmVjb3JkIHJlZ2lzdGVyZWQgaW5kaXZpZHVhbGx5IHZpYSBETlNTZXJ2aWNlUmVnaXN0ZXJSZWNvcmQoKS4KKyAqCisgKiBQYXJhbWV0ZXJzOgorICoKKyAqIHNkUmVmOiAgICAgICAgICAgQSBETlNTZXJ2aWNlUmVmIGluaXRpYWxpemVkIGJ5IEROU1NlcnZpY2VSZWdpc3RlcigpIChpZiB0aGUKKyAqICAgICAgICAgICAgICAgICAgcmVjb3JkIGJlaW5nIHJlbW92ZWQgd2FzIHJlZ2lzdGVyZWQgdmlhIEROU1NlcnZpY2VBZGRSZWNvcmQoKSkgb3IgYnkKKyAqICAgICAgICAgICAgICAgICAgRE5TU2VydmljZUNyZWF0ZUNvbm5lY3Rpb24oKSAoaWYgdGhlIHJlY29yZCBiZWluZyByZW1vdmVkIHdhcyByZWdpc3RlcmVkIHZpYQorICogICAgICAgICAgICAgICAgICBETlNTZXJ2aWNlUmVnaXN0ZXJSZWNvcmQoKSkuCisgKgorICogcmVjb3JkUmVmOiAgICAgICBBIEROU1JlY29yZFJlZiBpbml0aWFsaXplZCBieSBhIHN1Y2Nlc3NmdWwgY2FsbCB0byBETlNTZXJ2aWNlQWRkUmVjb3JkKCkKKyAqICAgICAgICAgICAgICAgICAgb3IgRE5TU2VydmljZVJlZ2lzdGVyUmVjb3JkKCkuCisgKgorICogZmxhZ3M6ICAgICAgICAgICBDdXJyZW50bHkgaWdub3JlZCwgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuCisgKgorICogcmV0dXJuIHZhbHVlOiAgICBSZXR1cm5zIGtETlNTZXJ2aWNlRXJyX05vRXJyb3Igb24gc3VjY2Vzcywgb3RoZXJ3aXNlIHJldHVybnMgYW4KKyAqICAgICAgICAgICAgICAgICAgZXJyb3IgY29kZSBpbmRpY2F0aW5nIHRoZSBlcnJvciB0aGF0IG9jY3VycmVkLgorICovCisKK0ROU1NlcnZpY2VFcnJvclR5cGUgRE5TU0RfQVBJIEROU1NlcnZpY2VSZW1vdmVSZWNvcmQKKyAgICAoCisgICAgRE5TU2VydmljZVJlZiAgICAgICAgICAgICAgICAgc2RSZWYsCisgICAgRE5TUmVjb3JkUmVmICAgICAgICAgICAgICAgICAgUmVjb3JkUmVmLAorICAgIEROU1NlcnZpY2VGbGFncyAgICAgICAgICAgICAgIGZsYWdzCisgICAgKTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogIFNlcnZpY2UgRGlzY292ZXJ5CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogQnJvd3NlIGZvciBpbnN0YW5jZXMgb2YgYSBzZXJ2aWNlLgorICoKKyAqCisgKiBETlNTZXJ2aWNlQnJvd3NlUmVwbHkoKSBQYXJhbWV0ZXJzOgorICoKKyAqIHNkUmVmOiAgICAgICAgICAgVGhlIEROU1NlcnZpY2VSZWYgaW5pdGlhbGl6ZWQgYnkgRE5TU2VydmljZUJyb3dzZSgpLgorICoKKyAqIGZsYWdzOiAgICAgICAgICAgUG9zc2libGUgdmFsdWVzIGFyZSBrRE5TU2VydmljZUZsYWdzTW9yZUNvbWluZyBhbmQga0ROU1NlcnZpY2VGbGFnc0FkZC4KKyAqICAgICAgICAgICAgICAgICAgU2VlIGZsYWcgZGVmaW5pdGlvbnMgZm9yIGRldGFpbHMuCisgKgorICogaW50ZXJmYWNlSW5kZXg6ICBUaGUgaW50ZXJmYWNlIG9uIHdoaWNoIHRoZSBzZXJ2aWNlIGlzIGFkdmVydGlzZWQuICBUaGlzIGluZGV4IHNob3VsZAorICogICAgICAgICAgICAgICAgICBiZSBwYXNzZWQgdG8gRE5TU2VydmljZVJlc29sdmUoKSB3aGVuIHJlc29sdmluZyB0aGUgc2VydmljZS4KKyAqCisgKiBlcnJvckNvZGU6ICAgICAgIFdpbGwgYmUga0ROU1NlcnZpY2VFcnJfTm9FcnJvciAoMCkgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIHdpbGwKKyAqICAgICAgICAgICAgICAgICAgaW5kaWNhdGUgdGhlIGZhaWx1cmUgdGhhdCBvY2N1cnJlZC4gIE90aGVyIHBhcmFtZXRlcnMgYXJlIHVuZGVmaW5lZCBpZgorICogICAgICAgICAgICAgICAgICB0aGUgZXJyb3JDb2RlIGlzIG5vbnplcm8uCisgKgorICogc2VydmljZU5hbWU6ICAgICBUaGUgZGlzY292ZXJlZCBzZXJ2aWNlIG5hbWUuIFRoaXMgbmFtZSBzaG91bGQgYmUgZGlzcGxheWVkIHRvIHRoZSB1c2VyLAorICogICAgICAgICAgICAgICAgICBhbmQgc3RvcmVkIGZvciBzdWJzZXF1ZW50IHVzZSBpbiB0aGUgRE5TU2VydmljZVJlc29sdmUoKSBjYWxsLgorICoKKyAqIHJlZ3R5cGU6ICAgICAgICAgVGhlIHNlcnZpY2UgdHlwZSwgd2hpY2ggaXMgdXN1YWxseSAoYnV0IG5vdCBhbHdheXMpIHRoZSBzYW1lIGFzIHdhcyBwYXNzZWQKKyAqICAgICAgICAgICAgICAgICAgdG8gRE5TU2VydmljZUJyb3dzZSgpLiBPbmUgY2FzZSB3aGVyZSB0aGUgZGlzY292ZXJlZCBzZXJ2aWNlIHR5cGUgbWF5CisgKiAgICAgICAgICAgICAgICAgIG5vdCBiZSB0aGUgc2FtZSBhcyB0aGUgcmVxdWVzdGVkIHNlcnZpY2UgdHlwZSBpcyB3aGVuIHVzaW5nIHN1YnR5cGVzOgorICogICAgICAgICAgICAgICAgICBUaGUgY2xpZW50IG1heSB3YW50IHRvIGJyb3dzZSBmb3Igb25seSB0aG9zZSBmdHAgc2VydmVycyB0aGF0IGFsbG93CisgKiAgICAgICAgICAgICAgICAgIGFub255bW91cyBjb25uZWN0aW9ucy4gVGhlIGNsaWVudCB3aWxsIHBhc3MgdGhlIHN0cmluZyAiX2Z0cC5fdGNwLF9hbm9uIgorICogICAgICAgICAgICAgICAgICB0byBETlNTZXJ2aWNlQnJvd3NlKCksIGJ1dCB0aGUgdHlwZSBvZiB0aGUgc2VydmljZSB0aGF0J3MgZGlzY292ZXJlZAorICogICAgICAgICAgICAgICAgICBpcyBzaW1wbHkgIl9mdHAuX3RjcCIuIFRoZSByZWd0eXBlIGZvciBlYWNoIGRpc2NvdmVyZWQgc2VydmljZSBpbnN0YW5jZQorICogICAgICAgICAgICAgICAgICBzaG91bGQgYmUgc3RvcmVkIGFsb25nIHdpdGggdGhlIG5hbWUsIHNvIHRoYXQgaXQgY2FuIGJlIHBhc3NlZCB0bworICogICAgICAgICAgICAgICAgICBETlNTZXJ2aWNlUmVzb2x2ZSgpIHdoZW4gdGhlIHNlcnZpY2UgaXMgbGF0ZXIgcmVzb2x2ZWQuCisgKgorICogZG9tYWluOiAgICAgICAgICBUaGUgZG9tYWluIG9mIHRoZSBkaXNjb3ZlcmVkIHNlcnZpY2UgaW5zdGFuY2UuIFRoaXMgbWF5IG9yIG1heSBub3QgYmUgdGhlCisgKiAgICAgICAgICAgICAgICAgIHNhbWUgYXMgdGhlIGRvbWFpbiB0aGF0IHdhcyBwYXNzZWQgdG8gRE5TU2VydmljZUJyb3dzZSgpLiBUaGUgZG9tYWluIGZvciBlYWNoCisgKiAgICAgICAgICAgICAgICAgIGRpc2NvdmVyZWQgc2VydmljZSBpbnN0YW5jZSBzaG91bGQgYmUgc3RvcmVkIGFsb25nIHdpdGggdGhlIG5hbWUsIHNvIHRoYXQKKyAqICAgICAgICAgICAgICAgICAgaXQgY2FuIGJlIHBhc3NlZCB0byBETlNTZXJ2aWNlUmVzb2x2ZSgpIHdoZW4gdGhlIHNlcnZpY2UgaXMgbGF0ZXIgcmVzb2x2ZWQuCisgKgorICogY29udGV4dDogICAgICAgICBUaGUgY29udGV4dCBwb2ludGVyIHRoYXQgd2FzIHBhc3NlZCB0byB0aGUgY2FsbG91dC4KKyAqCisgKi8KKwordHlwZWRlZiB2b2lkIChETlNTRF9BUEkgKkROU1NlcnZpY2VCcm93c2VSZXBseSkKKyAgICAoCisgICAgRE5TU2VydmljZVJlZiAgICAgICAgICAgICAgICAgICAgICAgc2RSZWYsCisgICAgRE5TU2VydmljZUZsYWdzICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsCisgICAgdWludDMyX3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlSW5kZXgsCisgICAgRE5TU2VydmljZUVycm9yVHlwZSAgICAgICAgICAgICAgICAgZXJyb3JDb2RlLAorICAgIGNvbnN0IGNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICpzZXJ2aWNlTmFtZSwKKyAgICBjb25zdCBjaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAqcmVndHlwZSwKKyAgICBjb25zdCBjaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAqcmVwbHlEb21haW4sCisgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmNvbnRleHQKKyAgICApOworCisKKy8qIEROU1NlcnZpY2VCcm93c2UoKSBQYXJhbWV0ZXJzOgorICoKKyAqIHNkUmVmOiAgICAgICAgICAgQSBwb2ludGVyIHRvIGFuIHVuaW5pdGlhbGl6ZWQgRE5TU2VydmljZVJlZi4gSWYgdGhlIGNhbGwgc3VjY2VlZHMKKyAqICAgICAgICAgICAgICAgICAgdGhlbiBpdCBpbml0aWFsaXplcyB0aGUgRE5TU2VydmljZVJlZiwgcmV0dXJucyBrRE5TU2VydmljZUVycl9Ob0Vycm9yLAorICogICAgICAgICAgICAgICAgICBhbmQgdGhlIGJyb3dzZSBvcGVyYXRpb24gd2lsbCBydW4gaW5kZWZpbml0ZWx5IHVudGlsIHRoZSBjbGllbnQKKyAqICAgICAgICAgICAgICAgICAgdGVybWluYXRlcyBpdCBieSBwYXNzaW5nIHRoaXMgRE5TU2VydmljZVJlZiB0byBETlNTZXJ2aWNlUmVmRGVhbGxvY2F0ZSgpLgorICoKKyAqIGZsYWdzOiAgICAgICAgICAgQ3VycmVudGx5IGlnbm9yZWQsIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlLgorICoKKyAqIGludGVyZmFjZUluZGV4OiAgSWYgbm9uLXplcm8sIHNwZWNpZmllcyB0aGUgaW50ZXJmYWNlIG9uIHdoaWNoIHRvIGJyb3dzZSBmb3Igc2VydmljZXMKKyAqICAgICAgICAgICAgICAgICAgKHRoZSBpbmRleCBmb3IgYSBnaXZlbiBpbnRlcmZhY2UgaXMgZGV0ZXJtaW5lZCB2aWEgdGhlIGlmX25hbWV0b2luZGV4KCkKKyAqICAgICAgICAgICAgICAgICAgZmFtaWx5IG9mIGNhbGxzLikgIE1vc3QgYXBwbGljYXRpb25zIHdpbGwgcGFzcyAwIHRvIGJyb3dzZSBvbiBhbGwgYXZhaWxhYmxlCisgKiAgICAgICAgICAgICAgICAgIGludGVyZmFjZXMuIFNlZSAiQ29uc3RhbnRzIGZvciBzcGVjaWZ5aW5nIGFuIGludGVyZmFjZSBpbmRleCIgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiByZWd0eXBlOiAgICAgICAgIFRoZSBzZXJ2aWNlIHR5cGUgYmVpbmcgYnJvd3NlZCBmb3IgZm9sbG93ZWQgYnkgdGhlIHByb3RvY29sLCBzZXBhcmF0ZWQgYnkgYQorICogICAgICAgICAgICAgICAgICBkb3QgKGUuZy4gIl9mdHAuX3RjcCIpLiAgVGhlIHRyYW5zcG9ydCBwcm90b2NvbCBtdXN0IGJlICJfdGNwIiBvciAiX3VkcCIuCisgKgorICogZG9tYWluOiAgICAgICAgICBJZiBub24tTlVMTCwgc3BlY2lmaWVzIHRoZSBkb21haW4gb24gd2hpY2ggdG8gYnJvd3NlIGZvciBzZXJ2aWNlcy4KKyAqICAgICAgICAgICAgICAgICAgTW9zdCBhcHBsaWNhdGlvbnMgd2lsbCBub3Qgc3BlY2lmeSBhIGRvbWFpbiwgaW5zdGVhZCBicm93c2luZyBvbiB0aGUKKyAqICAgICAgICAgICAgICAgICAgZGVmYXVsdCBkb21haW4ocykuCisgKgorICogY2FsbEJhY2s6ICAgICAgICBUaGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gYW4gaW5zdGFuY2Ugb2YgdGhlIHNlcnZpY2UgYmVpbmcgYnJvd3NlZCBmb3IKKyAqICAgICAgICAgICAgICAgICAgaXMgZm91bmQsIG9yIGlmIHRoZSBjYWxsIGFzeW5jaHJvbm91c2x5IGZhaWxzLgorICoKKyAqIGNvbnRleHQ6ICAgICAgICAgQW4gYXBwbGljYXRpb24gY29udGV4dCBwb2ludGVyIHdoaWNoIGlzIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24KKyAqICAgICAgICAgICAgICAgICAgKG1heSBiZSBOVUxMKS4KKyAqCisgKiByZXR1cm4gdmFsdWU6ICAgIFJldHVybnMga0ROU1NlcnZpY2VFcnJfTm9FcnJvciBvbiBzdWNjZXNlcyAoYW55IHN1YnNlcXVlbnQsIGFzeW5jaHJvbm91cworICogICAgICAgICAgICAgICAgICBlcnJvcnMgYXJlIGRlbGl2ZXJlZCB0byB0aGUgY2FsbGJhY2spLCBvdGhlcndpc2UgcmV0dXJucyBhbiBlcnJvciBjb2RlIGluZGljYXRpbmcKKyAqICAgICAgICAgICAgICAgICAgdGhlIGVycm9yIHRoYXQgb2NjdXJyZWQgKHRoZSBjYWxsYmFjayBpcyBub3QgaW52b2tlZCBhbmQgdGhlIEROU1NlcnZpY2VSZWYKKyAqICAgICAgICAgICAgICAgICAgaXMgbm90IGluaXRpYWxpemVkLikKKyAqLworCitETlNTZXJ2aWNlRXJyb3JUeXBlIEROU1NEX0FQSSBETlNTZXJ2aWNlQnJvd3NlCisgICAgKAorICAgIEROU1NlcnZpY2VSZWYgICAgICAgICAgICAgICAgICAgICAgICpzZFJlZiwKKyAgICBETlNTZXJ2aWNlRmxhZ3MgICAgICAgICAgICAgICAgICAgICBmbGFncywKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2VJbmRleCwKKyAgICBjb25zdCBjaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAqcmVndHlwZSwKKyAgICBjb25zdCBjaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAqZG9tYWluLCAgICAvKiBtYXkgYmUgTlVMTCAqLworICAgIEROU1NlcnZpY2VCcm93c2VSZXBseSAgICAgICAgICAgICAgIGNhbGxCYWNrLAorICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpjb250ZXh0ICAgIC8qIG1heSBiZSBOVUxMICovCisgICAgKTsKKworCisvKiBETlNTZXJ2aWNlUmVzb2x2ZSgpCisgKgorICogUmVzb2x2ZSBhIHNlcnZpY2UgbmFtZSBkaXNjb3ZlcmVkIHZpYSBETlNTZXJ2aWNlQnJvd3NlKCkgdG8gYSB0YXJnZXQgaG9zdCBuYW1lLCBwb3J0IG51bWJlciwgYW5kCisgKiB0eHQgcmVjb3JkLgorICoKKyAqIE5vdGU6IEFwcGxpY2F0aW9ucyBzaG91bGQgTk9UIHVzZSBETlNTZXJ2aWNlUmVzb2x2ZSgpIHNvbGVseSBmb3IgdHh0IHJlY29yZCBtb25pdG9yaW5nIC0gdXNlCisgKiBETlNTZXJ2aWNlUXVlcnlSZWNvcmQoKSBpbnN0ZWFkLCBhcyBpdCBpcyBtb3JlIGVmZmljaWVudCBmb3IgdGhpcyB0YXNrLgorICoKKyAqIE5vdGU6IFdoZW4gdGhlIGRlc2lyZWQgcmVzdWx0cyBoYXZlIGJlZW4gcmV0dXJuZWQsIHRoZSBjbGllbnQgTVVTVCB0ZXJtaW5hdGUgdGhlIHJlc29sdmUgYnkgY2FsbGluZworICogRE5TU2VydmljZVJlZkRlYWxsb2NhdGUoKS4KKyAqCisgKiBOb3RlOiBETlNTZXJ2aWNlUmVzb2x2ZSgpIGJlaGF2ZXMgY29ycmVjdGx5IGZvciB0eXBpY2FsIHNlcnZpY2VzIHRoYXQgaGF2ZSBhIHNpbmdsZSBTUlYgcmVjb3JkCisgKiBhbmQgYSBzaW5nbGUgVFhUIHJlY29yZC4gVG8gcmVzb2x2ZSBub24tc3RhbmRhcmQgc2VydmljZXMgd2l0aCBtdWx0aXBsZSBTUlYgb3IgVFhUIHJlY29yZHMsCisgKiBETlNTZXJ2aWNlUXVlcnlSZWNvcmQoKSBzaG91bGQgYmUgdXNlZC4KKyAqCisgKiBETlNTZXJ2aWNlUmVzb2x2ZVJlcGx5IENhbGxiYWNrIFBhcmFtZXRlcnM6CisgKgorICogc2RSZWY6ICAgICAgICAgICBUaGUgRE5TU2VydmljZVJlZiBpbml0aWFsaXplZCBieSBETlNTZXJ2aWNlUmVzb2x2ZSgpLgorICoKKyAqIGZsYWdzOiAgICAgICAgICAgQ3VycmVudGx5IHVudXNlZCwgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuCisgKgorICogaW50ZXJmYWNlSW5kZXg6ICBUaGUgaW50ZXJmYWNlIG9uIHdoaWNoIHRoZSBzZXJ2aWNlIHdhcyByZXNvbHZlZC4KKyAqCisgKiBlcnJvckNvZGU6ICAgICAgIFdpbGwgYmUga0ROU1NlcnZpY2VFcnJfTm9FcnJvciAoMCkgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIHdpbGwKKyAqICAgICAgICAgICAgICAgICAgaW5kaWNhdGUgdGhlIGZhaWx1cmUgdGhhdCBvY2N1cnJlZC4gIE90aGVyIHBhcmFtZXRlcnMgYXJlIHVuZGVmaW5lZCBpZgorICogICAgICAgICAgICAgICAgICB0aGUgZXJyb3JDb2RlIGlzIG5vbnplcm8uCisgKgorICogZnVsbG5hbWU6ICAgICAgICBUaGUgZnVsbCBzZXJ2aWNlIGRvbWFpbiBuYW1lLCBpbiB0aGUgZm9ybSA8c2VydmljZW5hbWU+Ljxwcm90b2NvbD4uPGRvbWFpbj4uCisgKiAgICAgICAgICAgICAgICAgIChUaGlzIG5hbWUgaXMgZXNjYXBlZCBmb2xsb3dpbmcgc3RhbmRhcmQgRE5TIHJ1bGVzLCBtYWtpbmcgaXQgc3VpdGFibGUgZm9yCisgKiAgICAgICAgICAgICAgICAgIHBhc3NpbmcgdG8gc3RhbmRhcmQgc3lzdGVtIEROUyBBUElzIHN1Y2ggYXMgcmVzX3F1ZXJ5KCksIG9yIHRvIHRoZQorICogICAgICAgICAgICAgICAgICBzcGVjaWFsLXB1cnBvc2UgZnVuY3Rpb25zIGluY2x1ZGVkIGluIHRoaXMgQVBJIHRoYXQgdGFrZSBmdWxsbmFtZSBwYXJhbWV0ZXJzLgorICogICAgICAgICAgICAgICAgICBTZWUgIk5vdGVzIG9uIEROUyBOYW1lIEVzY2FwaW5nIiBlYXJsaWVyIGluIHRoaXMgZmlsZSBmb3IgbW9yZSBkZXRhaWxzLikKKyAqCisgKiBob3N0dGFyZ2V0OiAgICAgIFRoZSB0YXJnZXQgaG9zdG5hbWUgb2YgdGhlIG1hY2hpbmUgcHJvdmlkaW5nIHRoZSBzZXJ2aWNlLiAgVGhpcyBuYW1lIGNhbgorICogICAgICAgICAgICAgICAgICBiZSBwYXNzZWQgdG8gZnVuY3Rpb25zIGxpa2UgZ2V0aG9zdGJ5bmFtZSgpIHRvIGlkZW50aWZ5IHRoZSBob3N0J3MgSVAgYWRkcmVzcy4KKyAqCisgKiBwb3J0OiAgICAgICAgICAgIFRoZSBwb3J0LCBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIsIG9uIHdoaWNoIGNvbm5lY3Rpb25zIGFyZSBhY2NlcHRlZCBmb3IgdGhpcyBzZXJ2aWNlLgorICoKKyAqIHR4dExlbjogICAgICAgICAgVGhlIGxlbmd0aCBvZiB0aGUgdHh0IHJlY29yZCwgaW4gYnl0ZXMuCisgKgorICogdHh0UmVjb3JkOiAgICAgICBUaGUgc2VydmljZSdzIHByaW1hcnkgdHh0IHJlY29yZCwgaW4gc3RhbmRhcmQgdHh0IHJlY29yZCBmb3JtYXQuCisgKgorICogY29udGV4dDogICAgICAgICBUaGUgY29udGV4dCBwb2ludGVyIHRoYXQgd2FzIHBhc3NlZCB0byB0aGUgY2FsbG91dC4KKyAqCisgKiBOT1RFOiBJbiBlYXJsaWVyIHZlcnNpb25zIG9mIHRoaXMgaGVhZGVyIGZpbGUsIHRoZSB0eHRSZWNvcmQgcGFyYW1ldGVyIHdhcyBkZWNsYXJlZCAiY29uc3QgY2hhciAqIgorICogVGhpcyBpcyBpbmNvcnJlY3QsIHNpbmNlIGl0IGNvbnRhaW5zIGxlbmd0aCBieXRlcyB3aGljaCBhcmUgdmFsdWVzIGluIHRoZSByYW5nZSAwIHRvIDI1NSwgbm90IC0xMjggdG8gKzEyNy4KKyAqIERlcGVuZGluZyBvbiB5b3VyIGNvbXBpbGVyIHNldHRpbmdzLCB0aGlzIGNoYW5nZSBtYXkgY2F1c2Ugc2lnbmVkL3Vuc2lnbmVkIG1pc21hdGNoIHdhcm5pbmdzLgorICogVGhlc2Ugc2hvdWxkIGJlIGZpeGVkIGJ5IHVwZGF0aW5nIHlvdXIgb3duIGNhbGxiYWNrIGZ1bmN0aW9uIGRlZmluaXRpb24gdG8gbWF0Y2ggdGhlIGNvcnJlY3RlZAorICogZnVuY3Rpb24gc2lnbmF0dXJlIHVzaW5nICJjb25zdCB1bnNpZ25lZCBjaGFyICp0eHRSZWNvcmQiLiBNYWtpbmcgdGhpcyBjaGFuZ2UgbWF5IGFsc28gZml4IGluYWR2ZXJ0ZW50CisgKiBidWdzIGluIHlvdXIgY2FsbGJhY2sgZnVuY3Rpb24sIHdoZXJlIGl0IGNvdWxkIGhhdmUgaW5jb3JyZWN0bHkgaW50ZXJwcmV0ZWQgYSBsZW5ndGggYnl0ZSB3aXRoIHZhbHVlIDI1MAorICogYXMgYmVpbmcgLTYgaW5zdGVhZCwgd2l0aCB2YXJpb3VzIGJhZCBjb25zZXF1ZW5jZXMgcmFuZ2luZyBmcm9tIGluY29ycmVjdCBvcGVyYXRpb24gdG8gc29mdHdhcmUgY3Jhc2hlcy4KKyAqIElmIHlvdSBuZWVkIHRvIG1haW50YWluIHBvcnRhYmxlIGNvZGUgdGhhdCB3aWxsIGNvbXBpbGUgY2xlYW5seSB3aXRoIGJvdGggdGhlIG9sZCBhbmQgbmV3IHZlcnNpb25zIG9mCisgKiB0aGlzIGhlYWRlciBmaWxlLCB5b3Ugc2hvdWxkIHVwZGF0ZSB5b3VyIGNhbGxiYWNrIGZ1bmN0aW9uIGRlZmluaXRpb24gdG8gdXNlIHRoZSBjb3JyZWN0IHVuc2lnbmVkIHZhbHVlLAorICogYW5kIHRoZW4gaW4gdGhlIHBsYWNlIHdoZXJlIHlvdSBwYXNzIHlvdXIgY2FsbGJhY2sgZnVuY3Rpb24gdG8gRE5TU2VydmljZVJlc29sdmUoKSwgdXNlIGEgY2FzdCB0byBlbGltaW5hdGUKKyAqIHRoZSBjb21waWxlciB3YXJuaW5nLCBlLmcuOgorICogICBETlNTZXJ2aWNlUmVzb2x2ZShzZCwgZmxhZ3MsIGluZGV4LCBuYW1lLCByZWd0eXBlLCBkb21haW4sIChETlNTZXJ2aWNlUmVzb2x2ZVJlcGx5KU15Q2FsbGJhY2ssIGNvbnRleHQpOworICogVGhpcyB3aWxsIGVuc3VyZSB0aGF0IHlvdXIgY29kZSBjb21waWxlcyBjbGVhbmx5IHdpdGhvdXQgd2FybmluZ3MgKGFuZCBtb3JlIGltcG9ydGFudGx5LCB3b3JrcyBjb3JyZWN0bHkpCisgKiB3aXRoIGJvdGggdGhlIG9sZCBoZWFkZXIgYW5kIHdpdGggdGhlIG5ldyBjb3JyZWN0ZWQgdmVyc2lvbi4KKyAqCisgKi8KKwordHlwZWRlZiB2b2lkIChETlNTRF9BUEkgKkROU1NlcnZpY2VSZXNvbHZlUmVwbHkpCisgICAgKAorICAgIEROU1NlcnZpY2VSZWYgICAgICAgICAgICAgICAgICAgICAgIHNkUmVmLAorICAgIEROU1NlcnZpY2VGbGFncyAgICAgICAgICAgICAgICAgICAgIGZsYWdzLAorICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZUluZGV4LAorICAgIEROU1NlcnZpY2VFcnJvclR5cGUgICAgICAgICAgICAgICAgIGVycm9yQ29kZSwKKyAgICBjb25zdCBjaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAqZnVsbG5hbWUsCisgICAgY29uc3QgY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgKmhvc3R0YXJnZXQsCisgICAgdWludDE2X3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydCwKKyAgICB1aW50MTZfdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eHRMZW4sCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAgICAgICAgICAgICAgICAgKnR4dFJlY29yZCwKKyAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqY29udGV4dAorICAgICk7CisKKworLyogRE5TU2VydmljZVJlc29sdmUoKSBQYXJhbWV0ZXJzCisgKgorICogc2RSZWY6ICAgICAgICAgICBBIHBvaW50ZXIgdG8gYW4gdW5pbml0aWFsaXplZCBETlNTZXJ2aWNlUmVmLiBJZiB0aGUgY2FsbCBzdWNjZWVkcworICogICAgICAgICAgICAgICAgICB0aGVuIGl0IGluaXRpYWxpemVzIHRoZSBETlNTZXJ2aWNlUmVmLCByZXR1cm5zIGtETlNTZXJ2aWNlRXJyX05vRXJyb3IsCisgKiAgICAgICAgICAgICAgICAgIGFuZCB0aGUgcmVzb2x2ZSBvcGVyYXRpb24gd2lsbCBydW4gaW5kZWZpbml0ZWx5IHVudGlsIHRoZSBjbGllbnQKKyAqICAgICAgICAgICAgICAgICAgdGVybWluYXRlcyBpdCBieSBwYXNzaW5nIHRoaXMgRE5TU2VydmljZVJlZiB0byBETlNTZXJ2aWNlUmVmRGVhbGxvY2F0ZSgpLgorICoKKyAqIGZsYWdzOiAgICAgICAgICAgQ3VycmVudGx5IGlnbm9yZWQsIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlLgorICoKKyAqIGludGVyZmFjZUluZGV4OiAgVGhlIGludGVyZmFjZSBvbiB3aGljaCB0byByZXNvbHZlIHRoZSBzZXJ2aWNlLiBJZiB0aGlzIHJlc29sdmUgY2FsbCBpcworICogICAgICAgICAgICAgICAgICBhcyBhIHJlc3VsdCBvZiBhIGN1cnJlbnRseSBhY3RpdmUgRE5TU2VydmljZUJyb3dzZSgpIG9wZXJhdGlvbiwgdGhlbiB0aGUKKyAqICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlSW5kZXggc2hvdWxkIGJlIHRoZSBpbmRleCByZXBvcnRlZCBpbiB0aGUgRE5TU2VydmljZUJyb3dzZVJlcGx5CisgKiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLiBJZiB0aGlzIHJlc29sdmUgY2FsbCBpcyB1c2luZyBpbmZvcm1hdGlvbiBwcmV2aW91c2x5IHNhdmVkCisgKiAgICAgICAgICAgICAgICAgIChlLmcuIGluIGEgcHJlZmVyZW5jZSBmaWxlKSBmb3IgbGF0ZXIgdXNlLCB0aGVuIHVzZSBpbnRlcmZhY2VJbmRleCAwLCBiZWNhdXNlCisgKiAgICAgICAgICAgICAgICAgIHRoZSBkZXNpcmVkIHNlcnZpY2UgbWF5IG5vdyBiZSByZWFjaGFibGUgdmlhIGEgZGlmZmVyZW50IHBoeXNpY2FsIGludGVyZmFjZS4KKyAqICAgICAgICAgICAgICAgICAgU2VlICJDb25zdGFudHMgZm9yIHNwZWNpZnlpbmcgYW4gaW50ZXJmYWNlIGluZGV4IiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIG5hbWU6ICAgICAgICAgICAgVGhlIG5hbWUgb2YgdGhlIHNlcnZpY2UgaW5zdGFuY2UgdG8gYmUgcmVzb2x2ZWQsIGFzIHJlcG9ydGVkIHRvIHRoZQorICogICAgICAgICAgICAgICAgICBETlNTZXJ2aWNlQnJvd3NlUmVwbHkoKSBjYWxsYmFjay4KKyAqCisgKiByZWd0eXBlOiAgICAgICAgIFRoZSB0eXBlIG9mIHRoZSBzZXJ2aWNlIGluc3RhbmNlIHRvIGJlIHJlc29sdmVkLCBhcyByZXBvcnRlZCB0byB0aGUKKyAqICAgICAgICAgICAgICAgICAgRE5TU2VydmljZUJyb3dzZVJlcGx5KCkgY2FsbGJhY2suCisgKgorICogZG9tYWluOiAgICAgICAgICBUaGUgZG9tYWluIG9mIHRoZSBzZXJ2aWNlIGluc3RhbmNlIHRvIGJlIHJlc29sdmVkLCBhcyByZXBvcnRlZCB0byB0aGUKKyAqICAgICAgICAgICAgICAgICAgRE5TU2VydmljZUJyb3dzZVJlcGx5KCkgY2FsbGJhY2suCisgKgorICogY2FsbEJhY2s6ICAgICAgICBUaGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gYSByZXN1bHQgaXMgZm91bmQsIG9yIGlmIHRoZSBjYWxsCisgKiAgICAgICAgICAgICAgICAgIGFzeW5jaHJvbm91c2x5IGZhaWxzLgorICoKKyAqIGNvbnRleHQ6ICAgICAgICAgQW4gYXBwbGljYXRpb24gY29udGV4dCBwb2ludGVyIHdoaWNoIGlzIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24KKyAqICAgICAgICAgICAgICAgICAgKG1heSBiZSBOVUxMKS4KKyAqCisgKiByZXR1cm4gdmFsdWU6ICAgIFJldHVybnMga0ROU1NlcnZpY2VFcnJfTm9FcnJvciBvbiBzdWNjZXNlcyAoYW55IHN1YnNlcXVlbnQsIGFzeW5jaHJvbm91cworICogICAgICAgICAgICAgICAgICBlcnJvcnMgYXJlIGRlbGl2ZXJlZCB0byB0aGUgY2FsbGJhY2spLCBvdGhlcndpc2UgcmV0dXJucyBhbiBlcnJvciBjb2RlIGluZGljYXRpbmcKKyAqICAgICAgICAgICAgICAgICAgdGhlIGVycm9yIHRoYXQgb2NjdXJyZWQgKHRoZSBjYWxsYmFjayBpcyBuZXZlciBpbnZva2VkIGFuZCB0aGUgRE5TU2VydmljZVJlZgorICogICAgICAgICAgICAgICAgICBpcyBub3QgaW5pdGlhbGl6ZWQuKQorICovCisKK0ROU1NlcnZpY2VFcnJvclR5cGUgRE5TU0RfQVBJIEROU1NlcnZpY2VSZXNvbHZlCisgICAgKAorICAgIEROU1NlcnZpY2VSZWYgICAgICAgICAgICAgICAgICAgICAgICpzZFJlZiwKKyAgICBETlNTZXJ2aWNlRmxhZ3MgICAgICAgICAgICAgICAgICAgICBmbGFncywKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2VJbmRleCwKKyAgICBjb25zdCBjaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAqbmFtZSwKKyAgICBjb25zdCBjaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAqcmVndHlwZSwKKyAgICBjb25zdCBjaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAqZG9tYWluLAorICAgIEROU1NlcnZpY2VSZXNvbHZlUmVwbHkgICAgICAgICAgICAgIGNhbGxCYWNrLAorICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpjb250ZXh0ICAvKiBtYXkgYmUgTlVMTCAqLworICAgICk7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICBTcGVjaWFsIFB1cnBvc2UgQ2FsbHMgKG1vc3QgYXBwbGljYXRpb25zIHdpbGwgbm90IHVzZSB0aGVzZSkKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBETlNTZXJ2aWNlQ3JlYXRlQ29ubmVjdGlvbigpCisgKgorICogQ3JlYXRlIGEgY29ubmVjdGlvbiB0byB0aGUgZGFlbW9uIGFsbG93aW5nIGVmZmljaWVudCByZWdpc3RyYXRpb24gb2YKKyAqIG11bHRpcGxlIGluZGl2aWR1YWwgcmVjb3Jkcy4KKyAqCisgKgorICogUGFyYW1ldGVyczoKKyAqCisgKiBzZFJlZjogICAgICAgICAgIEEgcG9pbnRlciB0byBhbiB1bmluaXRpYWxpemVkIEROU1NlcnZpY2VSZWYuICBEZWFsbG9jYXRpbmcKKyAqICAgICAgICAgICAgICAgICAgdGhlIHJlZmVyZW5jZSAodmlhIEROU1NlcnZpY2VSZWZEZWFsbG9jYXRlKCkpIHNldmVycyB0aGUKKyAqICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbiBhbmQgZGVyZWdpc3RlcnMgYWxsIHJlY29yZHMgcmVnaXN0ZXJlZCBvbiB0aGlzIGNvbm5lY3Rpb24uCisgKgorICogcmV0dXJuIHZhbHVlOiAgICBSZXR1cm5zIGtETlNTZXJ2aWNlRXJyX05vRXJyb3Igb24gc3VjY2Vzcywgb3RoZXJ3aXNlIHJldHVybnMKKyAqICAgICAgICAgICAgICAgICAgYW4gZXJyb3IgY29kZSBpbmRpY2F0aW5nIHRoZSBzcGVjaWZpYyBmYWlsdXJlIHRoYXQgb2NjdXJyZWQgKGluIHdoaWNoCisgKiAgICAgICAgICAgICAgICAgIGNhc2UgdGhlIEROU1NlcnZpY2VSZWYgaXMgbm90IGluaXRpYWxpemVkKS4KKyAqLworCitETlNTZXJ2aWNlRXJyb3JUeXBlIEROU1NEX0FQSSBETlNTZXJ2aWNlQ3JlYXRlQ29ubmVjdGlvbihETlNTZXJ2aWNlUmVmICpzZFJlZik7CisKKworLyogRE5TU2VydmljZVJlZ2lzdGVyUmVjb3JkCisgKgorICogUmVnaXN0ZXIgYW4gaW5kaXZpZHVhbCByZXNvdXJjZSByZWNvcmQgb24gYSBjb25uZWN0ZWQgRE5TU2VydmljZVJlZi4KKyAqCisgKiBOb3RlIHRoYXQgbmFtZSBjb25mbGljdHMgb2NjdXJyaW5nIGZvciByZWNvcmRzIHJlZ2lzdGVyZWQgdmlhIHRoaXMgY2FsbCBtdXN0IGJlIGhhbmRsZWQKKyAqIGJ5IHRoZSBjbGllbnQgaW4gdGhlIGNhbGxiYWNrLgorICoKKyAqCisgKiBETlNTZXJ2aWNlUmVnaXN0ZXJSZWNvcmRSZXBseSgpIHBhcmFtZXRlcnM6CisgKgorICogc2RSZWY6ICAgICAgICAgICBUaGUgY29ubmVjdGVkIEROU1NlcnZpY2VSZWYgaW5pdGlhbGl6ZWQgYnkKKyAqICAgICAgICAgICAgICAgICAgRE5TU2VydmljZUNyZWF0ZUNvbm5lY3Rpb24oKS4KKyAqCisgKiBSZWNvcmRSZWY6ICAgICAgIFRoZSBETlNSZWNvcmRSZWYgaW5pdGlhbGl6ZWQgYnkgRE5TU2VydmljZVJlZ2lzdGVyUmVjb3JkKCkuICBJZiB0aGUgYWJvdmUKKyAqICAgICAgICAgICAgICAgICAgRE5TU2VydmljZVJlZiBpcyBwYXNzZWQgdG8gRE5TU2VydmljZVJlZkRlYWxsb2NhdGUoKSwgdGhpcyBETlNSZWNvcmRSZWYgaXMKKyAqICAgICAgICAgICAgICAgICAgaW52YWxpZGF0ZWQsIGFuZCBtYXkgbm90IGJlIHVzZWQgZnVydGhlci4KKyAqCisgKiBmbGFnczogICAgICAgICAgIEN1cnJlbnRseSB1bnVzZWQsIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlLgorICoKKyAqIGVycm9yQ29kZTogICAgICAgV2lsbCBiZSBrRE5TU2VydmljZUVycl9Ob0Vycm9yIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSB3aWxsCisgKiAgICAgICAgICAgICAgICAgIGluZGljYXRlIHRoZSBmYWlsdXJlIHRoYXQgb2NjdXJyZWQgKGluY2x1ZGluZyBuYW1lIGNvbmZsaWN0cy4pCisgKiAgICAgICAgICAgICAgICAgIE90aGVyIHBhcmFtZXRlcnMgYXJlIHVuZGVmaW5lZCBpZiBlcnJvckNvZGUgaXMgbm9uemVyby4KKyAqCisgKiBjb250ZXh0OiAgICAgICAgIFRoZSBjb250ZXh0IHBvaW50ZXIgdGhhdCB3YXMgcGFzc2VkIHRvIHRoZSBjYWxsb3V0LgorICoKKyAqLworCisgdHlwZWRlZiB2b2lkIChETlNTRF9BUEkgKkROU1NlcnZpY2VSZWdpc3RlclJlY29yZFJlcGx5KQorICAgICgKKyAgICBETlNTZXJ2aWNlUmVmICAgICAgICAgICAgICAgICAgICAgICBzZFJlZiwKKyAgICBETlNSZWNvcmRSZWYgICAgICAgICAgICAgICAgICAgICAgICBSZWNvcmRSZWYsCisgICAgRE5TU2VydmljZUZsYWdzICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsCisgICAgRE5TU2VydmljZUVycm9yVHlwZSAgICAgICAgICAgICAgICAgZXJyb3JDb2RlLAorICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpjb250ZXh0CisgICAgKTsKKworCisvKiBETlNTZXJ2aWNlUmVnaXN0ZXJSZWNvcmQoKSBQYXJhbWV0ZXJzOgorICoKKyAqIHNkUmVmOiAgICAgICAgICAgQSBETlNTZXJ2aWNlUmVmIGluaXRpYWxpemVkIGJ5IEROU1NlcnZpY2VDcmVhdGVDb25uZWN0aW9uKCkuCisgKgorICogUmVjb3JkUmVmOiAgICAgICBBIHBvaW50ZXIgdG8gYW4gdW5pbml0aWFsaXplZCBETlNSZWNvcmRSZWYuICBVcG9uIHN1Y2Nlc2Z1bGwgY29tcGxldGlvbiBvZiB0aGlzCisgKiAgICAgICAgICAgICAgICAgIGNhbGwsIHRoaXMgcmVmIG1heSBiZSBwYXNzZWQgdG8gRE5TU2VydmljZVVwZGF0ZVJlY29yZCgpIG9yIEROU1NlcnZpY2VSZW1vdmVSZWNvcmQoKS4KKyAqICAgICAgICAgICAgICAgICAgKFRvIGRlcmVnaXN0ZXIgQUxMIHJlY29yZHMgcmVnaXN0ZXJlZCBvbiBhIHNpbmdsZSBjb25uZWN0ZWQgRE5TU2VydmljZVJlZgorICogICAgICAgICAgICAgICAgICBhbmQgZGVhbGxvY2F0ZSBlYWNoIG9mIHRoZWlyIGNvcnJlc3BvbmRpbmcgRE5TU2VydmljZVJlY29yZFJlZnMsIGNhbGwKKyAqICAgICAgICAgICAgICAgICAgRE5TU2VydmljZVJlZkRlYWxsb29jYXRlKCkpLgorICoKKyAqIGZsYWdzOiAgICAgICAgICAgUG9zc2libGUgdmFsdWVzIGFyZSBrRE5TU2VydmljZUZsYWdzU2hhcmVkIG9yIGtETlNTZXJ2aWNlRmxhZ3NVbmlxdWUKKyAqICAgICAgICAgICAgICAgICAgKHNlZSBmbGFnIHR5cGUgZGVmaW5pdGlvbnMgZm9yIGRldGFpbHMpLgorICoKKyAqIGludGVyZmFjZUluZGV4OiAgSWYgbm9uLXplcm8sIHNwZWNpZmllcyB0aGUgaW50ZXJmYWNlIG9uIHdoaWNoIHRvIHJlZ2lzdGVyIHRoZSByZWNvcmQKKyAqICAgICAgICAgICAgICAgICAgKHRoZSBpbmRleCBmb3IgYSBnaXZlbiBpbnRlcmZhY2UgaXMgZGV0ZXJtaW5lZCB2aWEgdGhlIGlmX25hbWV0b2luZGV4KCkKKyAqICAgICAgICAgICAgICAgICAgZmFtaWx5IG9mIGNhbGxzLikgIFBhc3NpbmcgMCBjYXVzZXMgdGhlIHJlY29yZCB0byBiZSByZWdpc3RlcmVkIG9uIGFsbCBpbnRlcmZhY2VzLgorICogICAgICAgICAgICAgICAgICBTZWUgIkNvbnN0YW50cyBmb3Igc3BlY2lmeWluZyBhbiBpbnRlcmZhY2UgaW5kZXgiIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogZnVsbG5hbWU6ICAgICAgICBUaGUgZnVsbCBkb21haW4gbmFtZSBvZiB0aGUgcmVzb3VyY2UgcmVjb3JkLgorICoKKyAqIHJydHlwZTogICAgICAgICAgVGhlIG51bWVyaWNhbCB0eXBlIG9mIHRoZSByZXNvdXJjZSByZWNvcmQgKGUuZy4ga0ROU1NlcnZpY2VUeXBlX1BUUiwga0ROU1NlcnZpY2VUeXBlX1NSViwgZXRjKQorICoKKyAqIHJyY2xhc3M6ICAgICAgICAgVGhlIGNsYXNzIG9mIHRoZSByZXNvdXJjZSByZWNvcmQgKHVzdWFsbHkga0ROU1NlcnZpY2VDbGFzc19JTikKKyAqCisgKiByZGxlbjogICAgICAgICAgIExlbmd0aCwgaW4gYnl0ZXMsIG9mIHRoZSByZGF0YS4KKyAqCisgKiByZGF0YTogICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgcmF3IHJkYXRhLCBhcyBpdCBpcyB0byBhcHBlYXIgaW4gdGhlIEROUyByZWNvcmQuCisgKgorICogdHRsOiAgICAgICAgICAgICBUaGUgdGltZSB0byBsaXZlIG9mIHRoZSByZXNvdXJjZSByZWNvcmQsIGluIHNlY29uZHMuICBQYXNzIDAgdG8gdXNlIGEgZGVmYXVsdCB2YWx1ZS4KKyAqCisgKiBjYWxsQmFjazogICAgICAgIFRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiBhIHJlc3VsdCBpcyBmb3VuZCwgb3IgaWYgdGhlIGNhbGwKKyAqICAgICAgICAgICAgICAgICAgYXN5bmNocm9ub3VzbHkgZmFpbHMgKGUuZy4gYmVjYXVzZSBvZiBhIG5hbWUgY29uZmxpY3QuKQorICoKKyAqIGNvbnRleHQ6ICAgICAgICAgQW4gYXBwbGljYXRpb24gY29udGV4dCBwb2ludGVyIHdoaWNoIGlzIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24KKyAqICAgICAgICAgICAgICAgICAgKG1heSBiZSBOVUxMKS4KKyAqCisgKiByZXR1cm4gdmFsdWU6ICAgIFJldHVybnMga0ROU1NlcnZpY2VFcnJfTm9FcnJvciBvbiBzdWNjZXNlcyAoYW55IHN1YnNlcXVlbnQsIGFzeW5jaHJvbm91cworICogICAgICAgICAgICAgICAgICBlcnJvcnMgYXJlIGRlbGl2ZXJlZCB0byB0aGUgY2FsbGJhY2spLCBvdGhlcndpc2UgcmV0dXJucyBhbiBlcnJvciBjb2RlIGluZGljYXRpbmcKKyAqICAgICAgICAgICAgICAgICAgdGhlIGVycm9yIHRoYXQgb2NjdXJyZWQgKHRoZSBjYWxsYmFjayBpcyBuZXZlciBpbnZva2VkIGFuZCB0aGUgRE5TUmVjb3JkUmVmIGlzCisgKiAgICAgICAgICAgICAgICAgIG5vdCBpbml0aWFsaXplZC4pCisgKi8KKworRE5TU2VydmljZUVycm9yVHlwZSBETlNTRF9BUEkgRE5TU2VydmljZVJlZ2lzdGVyUmVjb3JkCisgICAgKAorICAgIEROU1NlcnZpY2VSZWYgICAgICAgICAgICAgICAgICAgICAgIHNkUmVmLAorICAgIEROU1JlY29yZFJlZiAgICAgICAgICAgICAgICAgICAgICAgICpSZWNvcmRSZWYsCisgICAgRE5TU2VydmljZUZsYWdzICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsCisgICAgdWludDMyX3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlSW5kZXgsCisgICAgY29uc3QgY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgKmZ1bGxuYW1lLAorICAgIHVpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJydHlwZSwKKyAgICB1aW50MTZfdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBycmNsYXNzLAorICAgIHVpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkbGVuLAorICAgIGNvbnN0IHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICpyZGF0YSwKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dGwsCisgICAgRE5TU2VydmljZVJlZ2lzdGVyUmVjb3JkUmVwbHkgICAgICAgY2FsbEJhY2ssCisgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmNvbnRleHQgICAgLyogbWF5IGJlIE5VTEwgKi8KKyAgICApOworCisKKy8qIEROU1NlcnZpY2VRdWVyeVJlY29yZAorICoKKyAqIFF1ZXJ5IGZvciBhbiBhcmJpdHJhcnkgRE5TIHJlY29yZC4KKyAqCisgKgorICogRE5TU2VydmljZVF1ZXJ5UmVjb3JkUmVwbHkoKSBDYWxsYmFjayBQYXJhbWV0ZXJzOgorICoKKyAqIHNkUmVmOiAgICAgICAgICAgVGhlIEROU1NlcnZpY2VSZWYgaW5pdGlhbGl6ZWQgYnkgRE5TU2VydmljZVF1ZXJ5UmVjb3JkKCkuCisgKgorICogZmxhZ3M6ICAgICAgICAgICBQb3NzaWJsZSB2YWx1ZXMgYXJlIGtETlNTZXJ2aWNlRmxhZ3NNb3JlQ29taW5nIGFuZAorICogICAgICAgICAgICAgICAgICBrRE5TU2VydmljZUZsYWdzQWRkLiAgVGhlIEFkZCBmbGFnIGlzIE5PVCBzZXQgZm9yIFBUUiByZWNvcmRzCisgKiAgICAgICAgICAgICAgICAgIHdpdGggYSB0dGwgb2YgMCwgaS5lLiAiUmVtb3ZlIiBldmVudHMuCisgKgorICogaW50ZXJmYWNlSW5kZXg6ICBUaGUgaW50ZXJmYWNlIG9uIHdoaWNoIHRoZSBxdWVyeSB3YXMgcmVzb2x2ZWQgKHRoZSBpbmRleCBmb3IgYSBnaXZlbgorICogICAgICAgICAgICAgICAgICBpbnRlcmZhY2UgaXMgZGV0ZXJtaW5lZCB2aWEgdGhlIGlmX25hbWV0b2luZGV4KCkgZmFtaWx5IG9mIGNhbGxzKS4KKyAqICAgICAgICAgICAgICAgICAgU2VlICJDb25zdGFudHMgZm9yIHNwZWNpZnlpbmcgYW4gaW50ZXJmYWNlIGluZGV4IiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIGVycm9yQ29kZTogICAgICAgV2lsbCBiZSBrRE5TU2VydmljZUVycl9Ob0Vycm9yIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSB3aWxsCisgKiAgICAgICAgICAgICAgICAgIGluZGljYXRlIHRoZSBmYWlsdXJlIHRoYXQgb2NjdXJyZWQuICBPdGhlciBwYXJhbWV0ZXJzIGFyZSB1bmRlZmluZWQgaWYKKyAqICAgICAgICAgICAgICAgICAgZXJyb3JDb2RlIGlzIG5vbnplcm8uCisgKgorICogZnVsbG5hbWU6ICAgICAgICBUaGUgcmVzb3VyY2UgcmVjb3JkJ3MgZnVsbCBkb21haW4gbmFtZS4KKyAqCisgKiBycnR5cGU6ICAgICAgICAgIFRoZSByZXNvdXJjZSByZWNvcmQncyB0eXBlIChlLmcuIGtETlNTZXJ2aWNlVHlwZV9QVFIsIGtETlNTZXJ2aWNlVHlwZV9TUlYsIGV0YykKKyAqCisgKiBycmNsYXNzOiAgICAgICAgIFRoZSBjbGFzcyBvZiB0aGUgcmVzb3VyY2UgcmVjb3JkICh1c3VhbGx5IGtETlNTZXJ2aWNlQ2xhc3NfSU4pLgorICoKKyAqIHJkbGVuOiAgICAgICAgICAgVGhlIGxlbmd0aCwgaW4gYnl0ZXMsIG9mIHRoZSByZXNvdXJjZSByZWNvcmQgcmRhdGEuCisgKgorICogcmRhdGE6ICAgICAgICAgICBUaGUgcmF3IHJkYXRhIG9mIHRoZSByZXNvdXJjZSByZWNvcmQuCisgKgorICogdHRsOiAgICAgICAgICAgICBUaGUgcmVzb3VyY2UgcmVjb3JkJ3MgdGltZSB0byBsaXZlLCBpbiBzZWNvbmRzLgorICoKKyAqIGNvbnRleHQ6ICAgICAgICAgVGhlIGNvbnRleHQgcG9pbnRlciB0aGF0IHdhcyBwYXNzZWQgdG8gdGhlIGNhbGxvdXQuCisgKgorICovCisKK3R5cGVkZWYgdm9pZCAoRE5TU0RfQVBJICpETlNTZXJ2aWNlUXVlcnlSZWNvcmRSZXBseSkKKyAgICAoCisgICAgRE5TU2VydmljZVJlZiAgICAgICAgICAgICAgICAgICAgICAgRE5TU2VydmljZVJlZiwKKyAgICBETlNTZXJ2aWNlRmxhZ3MgICAgICAgICAgICAgICAgICAgICBmbGFncywKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2VJbmRleCwKKyAgICBETlNTZXJ2aWNlRXJyb3JUeXBlICAgICAgICAgICAgICAgICBlcnJvckNvZGUsCisgICAgY29uc3QgY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgKmZ1bGxuYW1lLAorICAgIHVpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJydHlwZSwKKyAgICB1aW50MTZfdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBycmNsYXNzLAorICAgIHVpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkbGVuLAorICAgIGNvbnN0IHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICpyZGF0YSwKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dGwsCisgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmNvbnRleHQKKyAgICApOworCisKKy8qIEROU1NlcnZpY2VRdWVyeVJlY29yZCgpIFBhcmFtZXRlcnM6CisgKgorICogc2RSZWY6ICAgICAgICAgICBBIHBvaW50ZXIgdG8gYW4gdW5pbml0aWFsaXplZCBETlNTZXJ2aWNlUmVmLiBJZiB0aGUgY2FsbCBzdWNjZWVkcworICogICAgICAgICAgICAgICAgICB0aGVuIGl0IGluaXRpYWxpemVzIHRoZSBETlNTZXJ2aWNlUmVmLCByZXR1cm5zIGtETlNTZXJ2aWNlRXJyX05vRXJyb3IsCisgKiAgICAgICAgICAgICAgICAgIGFuZCB0aGUgcXVlcnkgb3BlcmF0aW9uIHdpbGwgcnVuIGluZGVmaW5pdGVseSB1bnRpbCB0aGUgY2xpZW50CisgKiAgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZXMgaXQgYnkgcGFzc2luZyB0aGlzIEROU1NlcnZpY2VSZWYgdG8gRE5TU2VydmljZVJlZkRlYWxsb2NhdGUoKS4KKyAqCisgKiBmbGFnczogICAgICAgICAgIFBhc3Mga0ROU1NlcnZpY2VGbGFnc0xvbmdMaXZlZFF1ZXJ5IHRvIGNyZWF0ZSBhICJsb25nLWxpdmVkIiB1bmljYXN0CisgKiAgICAgICAgICAgICAgICAgIHF1ZXJ5IGluIGEgbm9uLWxvY2FsIGRvbWFpbi4gIFdpdGhvdXQgc2V0dGluZyB0aGlzIGZsYWcsIHVuaWNhc3QgcXVlcmllcworICogICAgICAgICAgICAgICAgICB3aWxsIGJlIG9uZS1zaG90IC0gdGhhdCBpcywgb25seSBhbnN3ZXJzIGF2YWlsYWJsZSBhdCB0aGUgdGltZSBvZiB0aGUgY2FsbAorICogICAgICAgICAgICAgICAgICB3aWxsIGJlIHJldHVybmVkLiAgQnkgc2V0dGluZyB0aGlzIGZsYWcsIGFuc3dlcnMgKGluY2x1ZGluZyBBZGQgYW5kIFJlbW92ZQorICogICAgICAgICAgICAgICAgICBldmVudHMpIHRoYXQgYmVjb21lIGF2YWlsYWJsZSBhZnRlciB0aGUgaW5pdGlhbCBjYWxsIGlzIG1hZGUgd2lsbCBnZW5lcmF0ZQorICogICAgICAgICAgICAgICAgICBjYWxsYmFja3MuICBUaGlzIGZsYWcgaGFzIG5vIGVmZmVjdCBvbiBsaW5rLWxvY2FsIG11bHRpY2FzdCBxdWVyaWVzLgorICoKKyAqIGludGVyZmFjZUluZGV4OiAgSWYgbm9uLXplcm8sIHNwZWNpZmllcyB0aGUgaW50ZXJmYWNlIG9uIHdoaWNoIHRvIGlzc3VlIHRoZSBxdWVyeQorICogICAgICAgICAgICAgICAgICAodGhlIGluZGV4IGZvciBhIGdpdmVuIGludGVyZmFjZSBpcyBkZXRlcm1pbmVkIHZpYSB0aGUgaWZfbmFtZXRvaW5kZXgoKQorICogICAgICAgICAgICAgICAgICBmYW1pbHkgb2YgY2FsbHMuKSAgUGFzc2luZyAwIGNhdXNlcyB0aGUgbmFtZSB0byBiZSBxdWVyaWVkIGZvciBvbiBhbGwKKyAqICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlcy4gU2VlICJDb25zdGFudHMgZm9yIHNwZWNpZnlpbmcgYW4gaW50ZXJmYWNlIGluZGV4IiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIGZ1bGxuYW1lOiAgICAgICAgVGhlIGZ1bGwgZG9tYWluIG5hbWUgb2YgdGhlIHJlc291cmNlIHJlY29yZCB0byBiZSBxdWVyaWVkIGZvci4KKyAqCisgKiBycnR5cGU6ICAgICAgICAgIFRoZSBudW1lcmljYWwgdHlwZSBvZiB0aGUgcmVzb3VyY2UgcmVjb3JkIHRvIGJlIHF1ZXJpZWQgZm9yCisgKiAgICAgICAgICAgICAgICAgIChlLmcuIGtETlNTZXJ2aWNlVHlwZV9QVFIsIGtETlNTZXJ2aWNlVHlwZV9TUlYsIGV0YykKKyAqCisgKiBycmNsYXNzOiAgICAgICAgIFRoZSBjbGFzcyBvZiB0aGUgcmVzb3VyY2UgcmVjb3JkICh1c3VhbGx5IGtETlNTZXJ2aWNlQ2xhc3NfSU4pLgorICoKKyAqIGNhbGxCYWNrOiAgICAgICAgVGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIGEgcmVzdWx0IGlzIGZvdW5kLCBvciBpZiB0aGUgY2FsbAorICogICAgICAgICAgICAgICAgICBhc3luY2hyb25vdXNseSBmYWlscy4KKyAqCisgKiBjb250ZXh0OiAgICAgICAgIEFuIGFwcGxpY2F0aW9uIGNvbnRleHQgcG9pbnRlciB3aGljaCBpcyBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uCisgKiAgICAgICAgICAgICAgICAgIChtYXkgYmUgTlVMTCkuCisgKgorICogcmV0dXJuIHZhbHVlOiAgICBSZXR1cm5zIGtETlNTZXJ2aWNlRXJyX05vRXJyb3Igb24gc3VjY2VzZXMgKGFueSBzdWJzZXF1ZW50LCBhc3luY2hyb25vdXMKKyAqICAgICAgICAgICAgICAgICAgZXJyb3JzIGFyZSBkZWxpdmVyZWQgdG8gdGhlIGNhbGxiYWNrKSwgb3RoZXJ3aXNlIHJldHVybnMgYW4gZXJyb3IgY29kZSBpbmRpY2F0aW5nCisgKiAgICAgICAgICAgICAgICAgIHRoZSBlcnJvciB0aGF0IG9jY3VycmVkICh0aGUgY2FsbGJhY2sgaXMgbmV2ZXIgaW52b2tlZCBhbmQgdGhlIEROU1NlcnZpY2VSZWYKKyAqICAgICAgICAgICAgICAgICAgaXMgbm90IGluaXRpYWxpemVkLikKKyAqLworCitETlNTZXJ2aWNlRXJyb3JUeXBlIEROU1NEX0FQSSBETlNTZXJ2aWNlUXVlcnlSZWNvcmQKKyAgICAoCisgICAgRE5TU2VydmljZVJlZiAgICAgICAgICAgICAgICAgICAgICAgKnNkUmVmLAorICAgIEROU1NlcnZpY2VGbGFncyAgICAgICAgICAgICAgICAgICAgIGZsYWdzLAorICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZUluZGV4LAorICAgIGNvbnN0IGNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICpmdWxsbmFtZSwKKyAgICB1aW50MTZfdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBycnR5cGUsCisgICAgdWludDE2X3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnJjbGFzcywKKyAgICBETlNTZXJ2aWNlUXVlcnlSZWNvcmRSZXBseSAgICAgICAgICBjYWxsQmFjaywKKyAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqY29udGV4dCAgLyogbWF5IGJlIE5VTEwgKi8KKyAgICApOworCisKKy8qIEROU1NlcnZpY2VSZWNvbmZpcm1SZWNvcmQKKyAqCisgKiBJbnN0cnVjdCB0aGUgZGFlbW9uIHRvIHZlcmlmeSB0aGUgdmFsaWRpdHkgb2YgYSByZXNvdXJjZSByZWNvcmQgdGhhdCBhcHBlYXJzIHRvCisgKiBiZSBvdXQgb2YgZGF0ZSAoZS5nLiBiZWNhdXNlIHRjcCBjb25uZWN0aW9uIHRvIGEgc2VydmljZSdzIHRhcmdldCBmYWlsZWQuKQorICogQ2F1c2VzIHRoZSByZWNvcmQgdG8gYmUgZmx1c2hlZCBmcm9tIHRoZSBkYWVtb24ncyBjYWNoZSAoYXMgd2VsbCBhcyBhbGwgb3RoZXIKKyAqIGRhZW1vbnMnIGNhY2hlcyBvbiB0aGUgbmV0d29yaykgaWYgdGhlIHJlY29yZCBpcyBkZXRlcm1pbmVkIHRvIGJlIGludmFsaWQuCisgKgorICogUGFyYW1ldGVyczoKKyAqCisgKiBmbGFnczogICAgICAgICAgIEN1cnJlbnRseSB1bnVzZWQsIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlLgorICoKKyAqIGludGVyZmFjZUluZGV4OiAgSWYgbm9uLXplcm8sIHNwZWNpZmllcyB0aGUgaW50ZXJmYWNlIG9mIHRoZSByZWNvcmQgaW4gcXVlc3Rpb24uCisgKiAgICAgICAgICAgICAgICAgIFBhc3NpbmcgMCBjYXVzZXMgYWxsIGluc3RhbmNlcyBvZiB0aGlzIHJlY29yZCB0byBiZSByZWNvbmZpcm1lZC4KKyAqCisgKiBmdWxsbmFtZTogICAgICAgIFRoZSByZXNvdXJjZSByZWNvcmQncyBmdWxsIGRvbWFpbiBuYW1lLgorICoKKyAqIHJydHlwZTogICAgICAgICAgVGhlIHJlc291cmNlIHJlY29yZCdzIHR5cGUgKGUuZy4ga0ROU1NlcnZpY2VUeXBlX1BUUiwga0ROU1NlcnZpY2VUeXBlX1NSViwgZXRjKQorICoKKyAqIHJyY2xhc3M6ICAgICAgICAgVGhlIGNsYXNzIG9mIHRoZSByZXNvdXJjZSByZWNvcmQgKHVzdWFsbHkga0ROU1NlcnZpY2VDbGFzc19JTikuCisgKgorICogcmRsZW46ICAgICAgICAgICBUaGUgbGVuZ3RoLCBpbiBieXRlcywgb2YgdGhlIHJlc291cmNlIHJlY29yZCByZGF0YS4KKyAqCisgKiByZGF0YTogICAgICAgICAgIFRoZSByYXcgcmRhdGEgb2YgdGhlIHJlc291cmNlIHJlY29yZC4KKyAqCisgKi8KKworRE5TU2VydmljZUVycm9yVHlwZSBETlNTRF9BUEkgRE5TU2VydmljZVJlY29uZmlybVJlY29yZAorICAgICgKKyAgICBETlNTZXJ2aWNlRmxhZ3MgICAgICAgICAgICAgICAgICAgIGZsYWdzLAorICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlSW5kZXgsCisgICAgY29uc3QgY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAqZnVsbG5hbWUsCisgICAgdWludDE2X3QgICAgICAgICAgICAgICAgICAgICAgICAgICBycnR5cGUsCisgICAgdWludDE2X3QgICAgICAgICAgICAgICAgICAgICAgICAgICBycmNsYXNzLAorICAgIHVpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRsZW4sCisgICAgY29uc3Qgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqcmRhdGEKKyAgICApOworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgR2VuZXJhbCBVdGlsaXR5IEZ1bmN0aW9ucworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEROU1NlcnZpY2VDb25zdHJ1Y3RGdWxsTmFtZSgpCisgKgorICogQ29uY2F0ZW5hdGUgYSB0aHJlZS1wYXJ0IGRvbWFpbiBuYW1lIChhcyByZXR1cm5lZCBieSB0aGUgYWJvdmUgY2FsbGJhY2tzKSBpbnRvIGEKKyAqIHByb3Blcmx5LWVzY2FwZWQgZnVsbCBkb21haW4gbmFtZS4gTm90ZSB0aGF0IGNhbGxiYWNrcyBpbiB0aGUgYWJvdmUgZnVuY3Rpb25zIEFMUkVBRFkgRVNDQVBFCisgKiBzdHJpbmdzIHdoZXJlIG5lY2Vzc2FyeS4KKyAqCisgKiBQYXJhbWV0ZXJzOgorICoKKyAqIGZ1bGxOYW1lOiAgICAgICAgQSBwb2ludGVyIHRvIGEgYnVmZmVyIHRoYXQgd2hlcmUgdGhlIHJlc3VsdGluZyBmdWxsIGRvbWFpbiBuYW1lIGlzIHRvIGJlIHdyaXR0ZW4uCisgKiAgICAgICAgICAgICAgICAgIFRoZSBidWZmZXIgbXVzdCBiZSBrRE5TU2VydmljZU1heERvbWFpbk5hbWUgKDEwMDUpIGJ5dGVzIGluIGxlbmd0aCB0bworICogICAgICAgICAgICAgICAgICBhY2NvbW1vZGF0ZSB0aGUgbG9uZ2VzdCBsZWdhbCBkb21haW4gbmFtZSB3aXRob3V0IGJ1ZmZlciBvdmVycnVuLgorICoKKyAqIHNlcnZpY2U6ICAgICAgICAgVGhlIHNlcnZpY2UgbmFtZSAtIGFueSBkb3RzIG9yIGJhY2tzbGFzaGVzIG11c3QgTk9UIGJlIGVzY2FwZWQuCisgKiAgICAgICAgICAgICAgICAgIE1heSBiZSBOVUxMICh0byBjb25zdHJ1Y3QgYSBQVFIgcmVjb3JkIG5hbWUsIGUuZy4KKyAqICAgICAgICAgICAgICAgICAgIl9mdHAuX3RjcC5hcHBsZS5jb20uIikuCisgKgorICogcmVndHlwZTogICAgICAgICBUaGUgc2VydmljZSB0eXBlIGZvbGxvd2VkIGJ5IHRoZSBwcm90b2NvbCwgc2VwYXJhdGVkIGJ5IGEgZG90CisgKiAgICAgICAgICAgICAgICAgIChlLmcuICJfZnRwLl90Y3AiKS4KKyAqCisgKiBkb21haW46ICAgICAgICAgIFRoZSBkb21haW4gbmFtZSwgZS5nLiAiYXBwbGUuY29tLiIuICBMaXRlcmFsIGRvdHMgb3IgYmFja3NsYXNoZXMsCisgKiAgICAgICAgICAgICAgICAgIGlmIGFueSwgbXVzdCBiZSBlc2NhcGVkLCBlLmcuICIxc3RcLiBGbG9vci5hcHBsZS5jb20uIgorICoKKyAqIHJldHVybiB2YWx1ZTogICAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yLgorICoKKyAqLworCitpbnQgRE5TU0RfQVBJIEROU1NlcnZpY2VDb25zdHJ1Y3RGdWxsTmFtZQorICAgICgKKyAgICBjaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICpmdWxsTmFtZSwKKyAgICBjb25zdCBjaGFyICAgICAgICAgICAgICAgICAgICAgICpzZXJ2aWNlLCAgICAgIC8qIG1heSBiZSBOVUxMICovCisgICAgY29uc3QgY2hhciAgICAgICAgICAgICAgICAgICAgICAqcmVndHlwZSwKKyAgICBjb25zdCBjaGFyICAgICAgICAgICAgICAgICAgICAgICpkb21haW4KKyAgICApOworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgIFRYVCBSZWNvcmQgQ29uc3RydWN0aW9uIEZ1bmN0aW9ucworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBBIHR5cGljYWwgY2FsbGluZyBzZXF1ZW5jZSBmb3IgVFhUIHJlY29yZCBjb25zdHJ1Y3Rpb24gaXMgc29tZXRoaW5nIGxpa2U6CisgKgorICogQ2xpZW50IGFsbG9jYXRlcyBzdG9yYWdlIGZvciBUWFRSZWNvcmQgZGF0YSAoZS5nLiBkZWNsYXJlIGJ1ZmZlciBvbiB0aGUgc3RhY2spCisgKiBUWFRSZWNvcmRDcmVhdGUoKTsKKyAqIFRYVFJlY29yZFNldFZhbHVlKCk7CisgKiBUWFRSZWNvcmRTZXRWYWx1ZSgpOworICogVFhUUmVjb3JkU2V0VmFsdWUoKTsKKyAqIC4uLgorICogRE5TU2VydmljZVJlZ2lzdGVyKCAuLi4gVFhUUmVjb3JkR2V0TGVuZ3RoKCksIFRYVFJlY29yZEdldEJ5dGVzUHRyKCkgLi4uICk7CisgKiBUWFRSZWNvcmREZWFsbG9jYXRlKCk7CisgKiBFeHBsaWNpdGx5IGRlYWxsb2NhdGUgc3RvcmFnZSBmb3IgVFhUUmVjb3JkIGRhdGEgKGlmIG5vdCBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrKQorICovCisKKworLyogVFhUUmVjb3JkUmVmCisgKgorICogT3BhcXVlIGludGVybmFsIGRhdGEgdHlwZS4KKyAqIE5vdGU6IFJlcHJlc2VudHMgYSBETlMtU0QgVFhUIHJlY29yZC4KKyAqLworCit0eXBlZGVmIHVuaW9uIF9UWFRSZWNvcmRSZWZfdCB7IGNoYXIgUHJpdmF0ZURhdGFbMTZdOyBjaGFyICpGb3JjZU5hdHVyYWxBbGlnbm1lbnQ7IH0gVFhUUmVjb3JkUmVmOworCisKKy8qIFRYVFJlY29yZENyZWF0ZSgpCisgKgorICogQ3JlYXRlcyBhIG5ldyBlbXB0eSBUWFRSZWNvcmRSZWYgcmVmZXJlbmNpbmcgdGhlIHNwZWNpZmllZCBzdG9yYWdlLgorICoKKyAqIElmIHRoZSBidWZmZXIgcGFyYW1ldGVyIGlzIE5VTEwsIG9yIHRoZSBzcGVjaWZpZWQgc3RvcmFnZSBzaXplIGlzIG5vdAorICogbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYSBrZXkgc3Vic2VxdWVudGx5IGFkZGVkIHVzaW5nIFRYVFJlY29yZFNldFZhbHVlKCksCisgKiB0aGVuIGFkZGl0aW9uYWwgbWVtb3J5IHdpbGwgYmUgYWRkZWQgYXMgbmVlZGVkIHVzaW5nIG1hbGxvYygpLgorICoKKyAqIE9uIHNvbWUgcGxhdGZvcm1zLCB3aGVuIG1lbW9yeSBpcyBsb3csIG1hbGxvYygpIG1heSBmYWlsLiBJbiB0aGlzCisgKiBjYXNlLCBUWFRSZWNvcmRTZXRWYWx1ZSgpIHdpbGwgcmV0dXJuIGtETlNTZXJ2aWNlRXJyX05vTWVtb3J5LCBhbmQgdGhpcworICogZXJyb3IgY29uZGl0aW9uIHdpbGwgbmVlZCB0byBiZSBoYW5kbGVkIGFzIGFwcHJvcHJpYXRlIGJ5IHRoZSBjYWxsZXIuCisgKgorICogWW91IGNhbiBhdm9pZCB0aGUgbmVlZCB0byBoYW5kbGUgdGhpcyBlcnJvciBjb25kaXRpb24gaWYgeW91IGVuc3VyZQorICogdGhhdCB0aGUgc3RvcmFnZSB5b3UgaW5pdGlhbGx5IHByb3ZpZGUgaXMgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYWxsCisgKiB0aGUga2V5L3ZhbHVlIHBhaXJzIHRoYXQgYXJlIHRvIGJlIGFkZGVkIHRvIHRoZSByZWNvcmQuCisgKiBUaGUgY2FsbGVyIGNhbiBwcmVjb21wdXRlIHRoZSBleGFjdCBsZW5ndGggcmVxdWlyZWQgZm9yIGFsbCBvZiB0aGUKKyAqIGtleS92YWx1ZSBwYWlycyB0byBiZSBhZGRlZCwgb3Igc2ltcGx5IHByb3ZpZGUgYSBmaXhlZC1zaXplZCBidWZmZXIKKyAqIGtub3duIGluIGFkdmFuY2UgdG8gYmUgbGFyZ2UgZW5vdWdoLgorICogQSBuby12YWx1ZSAoa2V5LW9ubHkpIGtleSByZXF1aXJlcyAgKDEgKyBrZXkgbGVuZ3RoKSBieXRlcy4KKyAqIEEga2V5IHdpdGggZW1wdHkgdmFsdWUgcmVxdWlyZXMgICAgICgxICsga2V5IGxlbmd0aCArIDEpIGJ5dGVzLgorICogQSBrZXkgd2l0aCBub24tZW1wdHkgdmFsdWUgcmVxdWlyZXMgKDEgKyBrZXkgbGVuZ3RoICsgMSArIHZhbHVlIGxlbmd0aCkuCisgKiBGb3IgbW9zdCBhcHBsaWNhdGlvbnMsIEROUy1TRCBUWFQgcmVjb3JkcyBhcmUgZ2VuZXJhbGx5CisgKiBsZXNzIHRoYW4gMTAwIGJ5dGVzLCBzbyBpbiBtb3N0IGNhc2VzIGEgc2ltcGxlIGZpeGVkLXNpemVkCisgKiAyNTYtYnl0ZSBidWZmZXIgd2lsbCBiZSBtb3JlIHRoYW4gc3VmZmljaWVudC4KKyAqIFJlY29tbWVuZGVkIHNpemUgbGltaXRzIGZvciBETlMtU0QgVFhUIFJlY29yZHMgYXJlIGRpc2N1c3NlZCBpbgorICogPGh0dHA6Ly9maWxlcy5kbnMtc2Qub3JnL2RyYWZ0LWNoZXNoaXJlLWRuc2V4dC1kbnMtc2QudHh0PgorICoKKyAqIE5vdGU6IFdoZW4gcGFzc2luZyBwYXJhbWV0ZXJzIHRvIGFuZCBmcm9tIHRoZXNlIFRYVCByZWNvcmQgQVBJcywKKyAqIHRoZSBrZXkgbmFtZSBkb2VzIG5vdCBpbmNsdWRlIHRoZSAnPScgY2hhcmFjdGVyLiBUaGUgJz0nIGNoYXJhY3RlcgorICogaXMgdGhlIHNlcGFyYXRvciBiZXR3ZWVuIHRoZSBrZXkgYW5kIHZhbHVlIGluIHRoZSBvbi10aGUtd2lyZQorICogcGFja2V0IGZvcm1hdDsgaXQgaXMgbm90IHBhcnQgb2YgZWl0aGVyIHRoZSBrZXkgb3IgdGhlIHZhbHVlLgorICoKKyAqIHR4dFJlY29yZDogICAgICAgQSBwb2ludGVyIHRvIGFuIHVuaW5pdGlhbGl6ZWQgVFhUUmVjb3JkUmVmLgorICoKKyAqIGJ1ZmZlckxlbjogICAgICAgVGhlIHNpemUgb2YgdGhlIHN0b3JhZ2UgcHJvdmlkZWQgaW4gdGhlICJidWZmZXIiIHBhcmFtZXRlci4KKyAqCisgKiBidWZmZXI6ICAgICAgICAgIE9wdGlvbmFsIGNhbGxlci1zdXBwbGllZCBzdG9yYWdlIHVzZWQgdG8gaG9sZCB0aGUgVFhUUmVjb3JkIGRhdGEuCisgKiAgICAgICAgICAgICAgICAgIFRoaXMgc3RvcmFnZSBtdXN0IHJlbWFpbiB2YWxpZCBmb3IgYXMgbG9uZyBhcworICogICAgICAgICAgICAgICAgICB0aGUgVFhUUmVjb3JkUmVmLgorICovCisKK3ZvaWQgRE5TU0RfQVBJIFRYVFJlY29yZENyZWF0ZQorICAgICgKKyAgICBUWFRSZWNvcmRSZWYgICAgICp0eHRSZWNvcmQsCisgICAgdWludDE2X3QgICAgICAgICBidWZmZXJMZW4sCisgICAgdm9pZCAgICAgICAgICAgICAqYnVmZmVyCisgICAgKTsKKworCisvKiBUWFRSZWNvcmREZWFsbG9jYXRlKCkKKyAqCisgKiBSZWxlYXNlcyBhbnkgcmVzb3VyY2VzIGFsbG9jYXRlZCBpbiB0aGUgY291cnNlIG9mIHByZXBhcmluZyBhIFRYVCBSZWNvcmQKKyAqIHVzaW5nIFRYVFJlY29yZENyZWF0ZSgpL1RYVFJlY29yZFNldFZhbHVlKCkvVFhUUmVjb3JkUmVtb3ZlVmFsdWUoKS4KKyAqIE93bmVyc2hpcCBvZiB0aGUgYnVmZmVyIHByb3ZpZGVkIGluIFRYVFJlY29yZENyZWF0ZSgpIHJldHVybnMgdG8gdGhlIGNsaWVudC4KKyAqCisgKiB0eHRSZWNvcmQ6ICAgICAgICAgICBBIFRYVFJlY29yZFJlZiBpbml0aWFsaXplZCBieSBjYWxsaW5nIFRYVFJlY29yZENyZWF0ZSgpLgorICoKKyAqLworCit2b2lkIEROU1NEX0FQSSBUWFRSZWNvcmREZWFsbG9jYXRlCisgICAgKAorICAgIFRYVFJlY29yZFJlZiAgICAgKnR4dFJlY29yZAorICAgICk7CisKKworLyogVFhUUmVjb3JkU2V0VmFsdWUoKQorICoKKyAqIEFkZHMgYSBrZXkgKG9wdGlvbmFsbHkgd2l0aCB2YWx1ZSkgdG8gYSBUWFRSZWNvcmRSZWYuIElmIHRoZSAia2V5IiBhbHJlYWR5CisgKiBleGlzdHMgaW4gdGhlIFRYVFJlY29yZFJlZiwgdGhlbiB0aGUgY3VycmVudCB2YWx1ZSB3aWxsIGJlIHJlcGxhY2VkIHdpdGgKKyAqIHRoZSBuZXcgdmFsdWUuCisgKiBLZXlzIG1heSBleGlzdCBpbiBmb3VyIHN0YXRlcyB3aXRoIHJlc3BlY3QgdG8gYSBnaXZlbiBUWFQgcmVjb3JkOgorICogIC0gQWJzZW50IChrZXkgZG9lcyBub3QgYXBwZWFyIGF0IGFsbCkKKyAqICAtIFByZXNlbnQgd2l0aCBubyB2YWx1ZSAoImtleSIgYXBwZWFycyBhbG9uZSkKKyAqICAtIFByZXNlbnQgd2l0aCBlbXB0eSB2YWx1ZSAoImtleT0iIGFwcGVhcnMgaW4gVFhUIHJlY29yZCkKKyAqICAtIFByZXNlbnQgd2l0aCBub24tZW1wdHkgdmFsdWUgKCJrZXk9dmFsdWUiIGFwcGVhcnMgaW4gVFhUIHJlY29yZCkKKyAqIEZvciBtb3JlIGRldGFpbHMgcmVmZXIgdG8gIkRhdGEgU3ludGF4IGZvciBETlMtU0QgVFhUIFJlY29yZHMiIGluCisgKiA8aHR0cDovL2ZpbGVzLmRucy1zZC5vcmcvZHJhZnQtY2hlc2hpcmUtZG5zZXh0LWRucy1zZC50eHQ+CisgKgorICogdHh0UmVjb3JkOiAgICAgICBBIFRYVFJlY29yZFJlZiBpbml0aWFsaXplZCBieSBjYWxsaW5nIFRYVFJlY29yZENyZWF0ZSgpLgorICoKKyAqIGtleTogICAgICAgICAgICAgQSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nIHdoaWNoIG9ubHkgY29udGFpbnMgcHJpbnRhYmxlIEFTQ0lJCisgKiAgICAgICAgICAgICAgICAgIHZhbHVlcyAoMHgyMC0weDdFKSwgZXhjbHVkaW5nICc9JyAoMHgzRCkuIEtleXMgc2hvdWxkIGJlCisgKiAgICAgICAgICAgICAgICAgIDggY2hhcmFjdGVycyBvciBsZXNzIChub3QgY291bnRpbmcgdGhlIHRlcm1pbmF0aW5nIG51bGwpLgorICoKKyAqIHZhbHVlU2l6ZTogICAgICAgVGhlIHNpemUgb2YgdGhlIHZhbHVlLgorICoKKyAqIHZhbHVlOiAgICAgICAgICAgQW55IGJpbmFyeSB2YWx1ZS4gRm9yIHZhbHVlcyB0aGF0IHJlcHJlc2VudAorICogICAgICAgICAgICAgICAgICB0ZXh0dWFsIGRhdGEsIFVURi04IGlzIFNUUk9OR0xZIHJlY29tbWVuZGVkLgorICogICAgICAgICAgICAgICAgICBGb3IgdmFsdWVzIHRoYXQgcmVwcmVzZW50IHRleHR1YWwgZGF0YSwgdmFsdWVTaXplCisgKiAgICAgICAgICAgICAgICAgIHNob3VsZCBOT1QgaW5jbHVkZSB0aGUgdGVybWluYXRpbmcgbnVsbCAoaWYgYW55KQorICogICAgICAgICAgICAgICAgICBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuCisgKiAgICAgICAgICAgICAgICAgIElmIE5VTEwsIHRoZW4gImtleSIgd2lsbCBiZSBhZGRlZCB3aXRoIG5vIHZhbHVlLgorICogICAgICAgICAgICAgICAgICBJZiBub24tTlVMTCBidXQgdmFsdWVTaXplIGlzIHplcm8sIHRoZW4gImtleT0iIHdpbGwgYmUKKyAqICAgICAgICAgICAgICAgICAgYWRkZWQgd2l0aCBlbXB0eSB2YWx1ZS4KKyAqCisgKiByZXR1cm4gdmFsdWU6ICAgIFJldHVybnMga0ROU1NlcnZpY2VFcnJfTm9FcnJvciBvbiBzdWNjZXNzLgorICogICAgICAgICAgICAgICAgICBSZXR1cm5zIGtETlNTZXJ2aWNlRXJyX0ludmFsaWQgaWYgdGhlICJrZXkiIHN0cmluZyBjb250YWlucworICogICAgICAgICAgICAgICAgICBpbGxlZ2FsIGNoYXJhY3RlcnMuCisgKiAgICAgICAgICAgICAgICAgIFJldHVybnMga0ROU1NlcnZpY2VFcnJfTm9NZW1vcnkgaWYgYWRkaW5nIHRoaXMga2V5IHdvdWxkCisgKiAgICAgICAgICAgICAgICAgIGV4Y2VlZCB0aGUgYXZhaWxhYmxlIHN0b3JhZ2UuCisgKi8KKworRE5TU2VydmljZUVycm9yVHlwZSBETlNTRF9BUEkgVFhUUmVjb3JkU2V0VmFsdWUKKyAgICAoCisgICAgVFhUUmVjb3JkUmVmICAgICAqdHh0UmVjb3JkLAorICAgIGNvbnN0IGNoYXIgICAgICAgKmtleSwKKyAgICB1aW50OF90ICAgICAgICAgIHZhbHVlU2l6ZSwgICAgICAgIC8qIG1heSBiZSB6ZXJvICovCisgICAgY29uc3Qgdm9pZCAgICAgICAqdmFsdWUgICAgICAgICAgICAvKiBtYXkgYmUgTlVMTCAqLworICAgICk7CisKKworLyogVFhUUmVjb3JkUmVtb3ZlVmFsdWUoKQorICoKKyAqIFJlbW92ZXMgYSBrZXkgZnJvbSBhIFRYVFJlY29yZFJlZi4gIFRoZSAia2V5IiBtdXN0IGJlIGFuCisgKiBBU0NJSSBzdHJpbmcgd2hpY2ggZXhpc3RzIGluIHRoZSBUWFRSZWNvcmRSZWYuCisgKgorICogdHh0UmVjb3JkOiAgICAgICBBIFRYVFJlY29yZFJlZiBpbml0aWFsaXplZCBieSBjYWxsaW5nIFRYVFJlY29yZENyZWF0ZSgpLgorICoKKyAqIGtleTogICAgICAgICAgICAgQSBrZXkgbmFtZSB3aGljaCBleGlzdHMgaW4gdGhlIFRYVFJlY29yZFJlZi4KKyAqCisgKiByZXR1cm4gdmFsdWU6ICAgIFJldHVybnMga0ROU1NlcnZpY2VFcnJfTm9FcnJvciBvbiBzdWNjZXNzLgorICogICAgICAgICAgICAgICAgICBSZXR1cm5zIGtETlNTZXJ2aWNlRXJyX05vU3VjaEtleSBpZiB0aGUgImtleSIgZG9lcyBub3QKKyAqICAgICAgICAgICAgICAgICAgZXhpc3QgaW4gdGhlIFRYVFJlY29yZFJlZi4KKyAqLworCitETlNTZXJ2aWNlRXJyb3JUeXBlIEROU1NEX0FQSSBUWFRSZWNvcmRSZW1vdmVWYWx1ZQorICAgICgKKyAgICBUWFRSZWNvcmRSZWYgICAgICp0eHRSZWNvcmQsCisgICAgY29uc3QgY2hhciAgICAgICAqa2V5CisgICAgKTsKKworCisvKiBUWFRSZWNvcmRHZXRMZW5ndGgoKQorICoKKyAqIEFsbG93cyB5b3UgdG8gZGV0ZXJtaW5lIHRoZSBsZW5ndGggb2YgdGhlIHJhdyBieXRlcyB3aXRoaW4gYSBUWFRSZWNvcmRSZWYuCisgKgorICogdHh0UmVjb3JkOiAgICAgICBBIFRYVFJlY29yZFJlZiBpbml0aWFsaXplZCBieSBjYWxsaW5nIFRYVFJlY29yZENyZWF0ZSgpLgorICoKKyAqIHJldHVybiB2YWx1ZTogICAgUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgcmF3IGJ5dGVzIGluc2lkZSBhIFRYVFJlY29yZFJlZgorICogICAgICAgICAgICAgICAgICB3aGljaCB5b3UgY2FuIHBhc3MgZGlyZWN0bHkgdG8gRE5TU2VydmljZVJlZ2lzdGVyKCkgb3IKKyAqICAgICAgICAgICAgICAgICAgdG8gRE5TU2VydmljZVVwZGF0ZVJlY29yZCgpLgorICogICAgICAgICAgICAgICAgICBSZXR1cm5zIDAgaWYgdGhlIFRYVFJlY29yZFJlZiBpcyBlbXB0eS4KKyAqLworCit1aW50MTZfdCBETlNTRF9BUEkgVFhUUmVjb3JkR2V0TGVuZ3RoCisgICAgKAorICAgIGNvbnN0IFRYVFJlY29yZFJlZiAqdHh0UmVjb3JkCisgICAgKTsKKworCisvKiBUWFRSZWNvcmRHZXRCeXRlc1B0cigpCisgKgorICogQWxsb3dzIHlvdSB0byByZXRyaWV2ZSBhIHBvaW50ZXIgdG8gdGhlIHJhdyBieXRlcyB3aXRoaW4gYSBUWFRSZWNvcmRSZWYuCisgKgorICogdHh0UmVjb3JkOiAgICAgICBBIFRYVFJlY29yZFJlZiBpbml0aWFsaXplZCBieSBjYWxsaW5nIFRYVFJlY29yZENyZWF0ZSgpLgorICoKKyAqIHJldHVybiB2YWx1ZTogICAgUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHJhdyBieXRlcyBpbnNpZGUgdGhlIFRYVFJlY29yZFJlZgorICogICAgICAgICAgICAgICAgICB3aGljaCB5b3UgY2FuIHBhc3MgZGlyZWN0bHkgdG8gRE5TU2VydmljZVJlZ2lzdGVyKCkgb3IKKyAqICAgICAgICAgICAgICAgICAgdG8gRE5TU2VydmljZVVwZGF0ZVJlY29yZCgpLgorICovCisKK2NvbnN0IHZvaWQgKiBETlNTRF9BUEkgVFhUUmVjb3JkR2V0Qnl0ZXNQdHIKKyAgICAoCisgICAgY29uc3QgVFhUUmVjb3JkUmVmICp0eHRSZWNvcmQKKyAgICApOworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgIFRYVCBSZWNvcmQgUGFyc2luZyBGdW5jdGlvbnMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogQSB0eXBpY2FsIGNhbGxpbmcgc2VxdWVuY2UgZm9yIFRYVCByZWNvcmQgcGFyc2luZyBpcyBzb21ldGhpbmcgbGlrZToKKyAqCisgKiBSZWNlaXZlIFRYVCByZWNvcmQgZGF0YSBpbiBETlNTZXJ2aWNlUmVzb2x2ZSgpIGNhbGxiYWNrCisgKiBpZiAoVFhUUmVjb3JkQ29udGFpbnNLZXkodHh0TGVuLCB0eHRSZWNvcmQsICJrZXkiKSkgdGhlbiBkbyBzb21ldGhpbmcKKyAqIHZhbDFwdHIgPSBUWFRSZWNvcmRHZXRWYWx1ZVB0cih0eHRMZW4sIHR4dFJlY29yZCwgImtleTEiLCAmbGVuMSk7CisgKiB2YWwycHRyID0gVFhUUmVjb3JkR2V0VmFsdWVQdHIodHh0TGVuLCB0eHRSZWNvcmQsICJrZXkyIiwgJmxlbjIpOworICogLi4uCisgKiBiY29weSh2YWwxcHRyLCBteXZhbDEsIGxlbjEpOworICogYmNvcHkodmFsMnB0ciwgbXl2YWwyLCBsZW4yKTsKKyAqIC4uLgorICogcmV0dXJuOworICoKKyAqIElmIHlvdSB3aXNoIHRvIHJldGFpbiB0aGUgdmFsdWVzIGFmdGVyIHJldHVybiBmcm9tIHRoZSBETlNTZXJ2aWNlUmVzb2x2ZSgpCisgKiBjYWxsYmFjaywgdGhlbiB5b3UgbmVlZCB0byBjb3B5IHRoZSBkYXRhIHRvIHlvdXIgb3duIHN0b3JhZ2UgdXNpbmcgYmNvcHkoKQorICogb3Igc2ltaWxhciwgYXMgc2hvd24gaW4gdGhlIGV4YW1wbGUgYWJvdmUuCisgKgorICogSWYgZm9yIHNvbWUgcmVhc29uIHlvdSBuZWVkIHRvIHBhcnNlIGEgVFhUIHJlY29yZCB5b3UgYnVpbHQgeW91cnNlbGYKKyAqIHVzaW5nIHRoZSBUWFQgcmVjb3JkIGNvbnN0cnVjdGlvbiBmdW5jdGlvbnMgYWJvdmUsIHRoZW4geW91IGNhbiBkbworICogdGhhdCB1c2luZyBUWFRSZWNvcmRHZXRMZW5ndGggYW5kIFRYVFJlY29yZEdldEJ5dGVzUHRyIGNhbGxzOgorICogVFhUUmVjb3JkR2V0VmFsdWUoVFhUUmVjb3JkR2V0TGVuZ3RoKHgpLCBUWFRSZWNvcmRHZXRCeXRlc1B0cih4KSwga2V5LCAmbGVuKTsKKyAqCisgKiBNb3N0IGFwcGxpY2F0aW9ucyBvbmx5IGZldGNoIGtleXMgdGhleSBrbm93IGFib3V0IGZyb20gYSBUWFQgcmVjb3JkIGFuZAorICogaWdub3JlIHRoZSByZXN0LgorICogSG93ZXZlciwgc29tZSBkZWJ1Z2dpbmcgdG9vbHMgd2lzaCB0byBmZXRjaCBhbmQgZGlzcGxheSBhbGwga2V5cy4KKyAqIFRvIGRvIHRoYXQsIHVzZSB0aGUgVFhUUmVjb3JkR2V0Q291bnQoKSBhbmQgVFhUUmVjb3JkR2V0SXRlbUF0SW5kZXgoKSBjYWxscy4KKyAqLworCisvKiBUWFRSZWNvcmRDb250YWluc0tleSgpCisgKgorICogQWxsb3dzIHlvdSB0byBkZXRlcm1pbmUgaWYgYSBnaXZlbiBUWFQgUmVjb3JkIGNvbnRhaW5zIGEgc3BlY2lmaWVkIGtleS4KKyAqCisgKiB0eHRMZW46ICAgICAgICAgIFRoZSBzaXplIG9mIHRoZSByZWNlaXZlZCBUWFQgUmVjb3JkLgorICoKKyAqIHR4dFJlY29yZDogICAgICAgUG9pbnRlciB0byB0aGUgcmVjZWl2ZWQgVFhUIFJlY29yZCBieXRlcy4KKyAqCisgKiBrZXk6ICAgICAgICAgICAgIEEgbnVsbC10ZXJtaW5hdGVkIEFTQ0lJIHN0cmluZyBjb250YWluaW5nIHRoZSBrZXkgbmFtZS4KKyAqCisgKiByZXR1cm4gdmFsdWU6ICAgIFJldHVybnMgMSBpZiB0aGUgVFhUIFJlY29yZCBjb250YWlucyB0aGUgc3BlY2lmaWVkIGtleS4KKyAqICAgICAgICAgICAgICAgICAgT3RoZXJ3aXNlLCBpdCByZXR1cm5zIDAuCisgKi8KKworaW50IEROU1NEX0FQSSBUWFRSZWNvcmRDb250YWluc0tleQorICAgICgKKyAgICB1aW50MTZfdCAgICAgICAgIHR4dExlbiwKKyAgICBjb25zdCB2b2lkICAgICAgICp0eHRSZWNvcmQsCisgICAgY29uc3QgY2hhciAgICAgICAqa2V5CisgICAgKTsKKworCisvKiBUWFRSZWNvcmRHZXRWYWx1ZVB0cigpCisgKgorICogQWxsb3dzIHlvdSB0byByZXRyaWV2ZSB0aGUgdmFsdWUgZm9yIGEgZ2l2ZW4ga2V5IGZyb20gYSBUWFQgUmVjb3JkLgorICoKKyAqIHR4dExlbjogICAgICAgICAgVGhlIHNpemUgb2YgdGhlIHJlY2VpdmVkIFRYVCBSZWNvcmQKKyAqCisgKiB0eHRSZWNvcmQ6ICAgICAgIFBvaW50ZXIgdG8gdGhlIHJlY2VpdmVkIFRYVCBSZWNvcmQgYnl0ZXMuCisgKgorICoga2V5OiAgICAgICAgICAgICBBIG51bGwtdGVybWluYXRlZCBBU0NJSSBzdHJpbmcgY29udGFpbmluZyB0aGUga2V5IG5hbWUuCisgKgorICogdmFsdWVMZW46ICAgICAgICBPbiBvdXRwdXQsIHdpbGwgYmUgc2V0IHRvIHRoZSBzaXplIG9mIHRoZSAidmFsdWUiIGRhdGEuCisgKgorICogcmV0dXJuIHZhbHVlOiAgICBSZXR1cm5zIE5VTEwgaWYgdGhlIGtleSBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIFRYVCByZWNvcmQsCisgKiAgICAgICAgICAgICAgICAgIG9yIGV4aXN0cyB3aXRoIG5vIHZhbHVlICh0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4KKyAqICAgICAgICAgICAgICAgICAgdGhlc2UgdHdvIGNhc2VzIHVzZSBUWFRSZWNvcmRDb250YWluc0tleSgpKS4KKyAqICAgICAgICAgICAgICAgICAgUmV0dXJucyBwb2ludGVyIHRvIGxvY2F0aW9uIHdpdGhpbiBUWFQgUmVjb3JkIGJ5dGVzCisgKiAgICAgICAgICAgICAgICAgIGlmIHRoZSBrZXkgZXhpc3RzIHdpdGggZW1wdHkgb3Igbm9uLWVtcHR5IHZhbHVlLgorICogICAgICAgICAgICAgICAgICBGb3IgZW1wdHkgdmFsdWUsIHZhbHVlTGVuIHdpbGwgYmUgemVyby4KKyAqICAgICAgICAgICAgICAgICAgRm9yIG5vbi1lbXB0eSB2YWx1ZSwgdmFsdWVMZW4gd2lsbCBiZSBsZW5ndGggb2YgdmFsdWUgZGF0YS4KKyAqLworCitjb25zdCB2b2lkICogRE5TU0RfQVBJIFRYVFJlY29yZEdldFZhbHVlUHRyCisgICAgKAorICAgIHVpbnQxNl90ICAgICAgICAgdHh0TGVuLAorICAgIGNvbnN0IHZvaWQgICAgICAgKnR4dFJlY29yZCwKKyAgICBjb25zdCBjaGFyICAgICAgICprZXksCisgICAgdWludDhfdCAgICAgICAgICAqdmFsdWVMZW4KKyAgICApOworCisKKy8qIFRYVFJlY29yZEdldENvdW50KCkKKyAqCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Yga2V5cyBzdG9yZWQgaW4gdGhlIFRYVCBSZWNvcmQuICBUaGUgY291bnQKKyAqIGNhbiBiZSB1c2VkIHdpdGggVFhUUmVjb3JkR2V0SXRlbUF0SW5kZXgoKSB0byBpdGVyYXRlIHRocm91Z2ggdGhlIGtleXMuCisgKgorICogdHh0TGVuOiAgICAgICAgICBUaGUgc2l6ZSBvZiB0aGUgcmVjZWl2ZWQgVFhUIFJlY29yZC4KKyAqCisgKiB0eHRSZWNvcmQ6ICAgICAgIFBvaW50ZXIgdG8gdGhlIHJlY2VpdmVkIFRYVCBSZWNvcmQgYnl0ZXMuCisgKgorICogcmV0dXJuIHZhbHVlOiAgICBSZXR1cm5zIHRoZSB0b3RhbCBudW1iZXIgb2Yga2V5cyBpbiB0aGUgVFhUIFJlY29yZC4KKyAqCisgKi8KKwordWludDE2X3QgRE5TU0RfQVBJIFRYVFJlY29yZEdldENvdW50CisgICAgKAorICAgIHVpbnQxNl90ICAgICAgICAgdHh0TGVuLAorICAgIGNvbnN0IHZvaWQgICAgICAgKnR4dFJlY29yZAorICAgICk7CisKKworLyogVFhUUmVjb3JkR2V0SXRlbUF0SW5kZXgoKQorICoKKyAqIEFsbG93cyB5b3UgdG8gcmV0cmlldmUgYSBrZXkgbmFtZSBhbmQgdmFsdWUgcG9pbnRlciwgZ2l2ZW4gYW4gaW5kZXggaW50bworICogYSBUWFQgUmVjb3JkLiAgTGVnYWwgaW5kZXggdmFsdWVzIHJhbmdlIGZyb20gemVybyB0byBUWFRSZWNvcmRHZXRDb3VudCgpLTEuCisgKiBJdCdzIGFsc28gcG9zc2libGUgdG8gaXRlcmF0ZSB0aHJvdWdoIGtleXMgaW4gYSBUWFQgcmVjb3JkIGJ5IHNpbXBseQorICogY2FsbGluZyBUWFRSZWNvcmRHZXRJdGVtQXRJbmRleCgpIHJlcGVhdGVkbHksIGJlZ2lubmluZyB3aXRoIGluZGV4IHplcm8KKyAqIGFuZCBpbmNyZWFzaW5nIHVudGlsIFRYVFJlY29yZEdldEl0ZW1BdEluZGV4KCkgcmV0dXJucyBrRE5TU2VydmljZUVycl9JbnZhbGlkLgorICoKKyAqIE9uIHJldHVybjoKKyAqIEZvciBrZXlzIHdpdGggbm8gdmFsdWUsICp2YWx1ZSBpcyBzZXQgdG8gTlVMTCBhbmQgKnZhbHVlTGVuIGlzIHplcm8uCisgKiBGb3Iga2V5cyB3aXRoIGVtcHR5IHZhbHVlLCAqdmFsdWUgaXMgbm9uLU5VTEwgYW5kICp2YWx1ZUxlbiBpcyB6ZXJvLgorICogRm9yIGtleXMgd2l0aCBub24tZW1wdHkgdmFsdWUsICp2YWx1ZSBpcyBub24tTlVMTCBhbmQgKnZhbHVlTGVuIGlzIG5vbi16ZXJvLgorICoKKyAqIHR4dExlbjogICAgICAgICAgVGhlIHNpemUgb2YgdGhlIHJlY2VpdmVkIFRYVCBSZWNvcmQuCisgKgorICogdHh0UmVjb3JkOiAgICAgICBQb2ludGVyIHRvIHRoZSByZWNlaXZlZCBUWFQgUmVjb3JkIGJ5dGVzLgorICoKKyAqIGluZGV4OiAgICAgICAgICAgQW4gaW5kZXggaW50byB0aGUgVFhUIFJlY29yZC4KKyAqCisgKiBrZXlCdWZMZW46ICAgICAgIFRoZSBzaXplIG9mIHRoZSBzdHJpbmcgYnVmZmVyIGJlaW5nIHN1cHBsaWVkLgorICoKKyAqIGtleTogICAgICAgICAgICAgQSBzdHJpbmcgYnVmZmVyIHVzZWQgdG8gc3RvcmUgdGhlIGtleSBuYW1lLgorICogICAgICAgICAgICAgICAgICBPbiByZXR1cm4sIHRoZSBidWZmZXIgY29udGFpbnMgYSBudWxsLXRlcm1pbmF0ZWQgQyBzdHJpbmcKKyAqICAgICAgICAgICAgICAgICAgZ2l2aW5nIHRoZSBrZXkgbmFtZS4gRE5TLVNEIFRYVCBrZXlzIGFyZSB1c3VhbGx5CisgKiAgICAgICAgICAgICAgICAgIDggY2hhcmFjdGVycyBvciBsZXNzLiBUbyBob2xkIHRoZSBtYXhpbXVtIHBvc3NpYmxlCisgKiAgICAgICAgICAgICAgICAgIGtleSBuYW1lLCB0aGUgYnVmZmVyIHNob3VsZCBiZSAyNTYgYnl0ZXMgbG9uZy4KKyAqCisgKiB2YWx1ZUxlbjogICAgICAgIE9uIG91dHB1dCwgd2lsbCBiZSBzZXQgdG8gdGhlIHNpemUgb2YgdGhlICJ2YWx1ZSIgZGF0YS4KKyAqCisgKiB2YWx1ZTogICAgICAgICAgIE9uIG91dHB1dCwgKnZhbHVlIGlzIHNldCB0byBwb2ludCB0byBsb2NhdGlvbiB3aXRoaW4gVFhUCisgKiAgICAgICAgICAgICAgICAgIFJlY29yZCBieXRlcyB0aGF0IGhvbGRzIHRoZSB2YWx1ZSBkYXRhLgorICoKKyAqIHJldHVybiB2YWx1ZTogICAgUmV0dXJucyBrRE5TU2VydmljZUVycl9Ob0Vycm9yIG9uIHN1Y2Nlc3MuCisgKiAgICAgICAgICAgICAgICAgIFJldHVybnMga0ROU1NlcnZpY2VFcnJfTm9NZW1vcnkgaWYga2V5QnVmTGVuIGlzIHRvbyBzaG9ydC4KKyAqICAgICAgICAgICAgICAgICAgUmV0dXJucyBrRE5TU2VydmljZUVycl9JbnZhbGlkIGlmIGluZGV4IGlzIGdyZWF0ZXIgdGhhbgorICogICAgICAgICAgICAgICAgICBUWFRSZWNvcmRHZXRDb3VudCgpLTEuCisgKi8KKworRE5TU2VydmljZUVycm9yVHlwZSBETlNTRF9BUEkgVFhUUmVjb3JkR2V0SXRlbUF0SW5kZXgKKyAgICAoCisgICAgdWludDE2X3QgICAgICAgICB0eHRMZW4sCisgICAgY29uc3Qgdm9pZCAgICAgICAqdHh0UmVjb3JkLAorICAgIHVpbnQxNl90ICAgICAgICAgaW5kZXgsCisgICAgdWludDE2X3QgICAgICAgICBrZXlCdWZMZW4sCisgICAgY2hhciAgICAgICAgICAgICAqa2V5LAorICAgIHVpbnQ4X3QgICAgICAgICAgKnZhbHVlTGVuLAorICAgIGNvbnN0IHZvaWQgICAgICAgKip2YWx1ZQorICAgICk7CisKKyNpZmRlZiBfX0FQUExFX0FQSV9QUklWQVRFCisKKy8qCisgKiBNYWMgT1MgWCBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5CisgKiAzcmQgcGFydHkgY2xpZW50cyBvZiB0aGlzIEFQSSBzaG91bGQgbm90IGRlcGVuZCBvbiBmdXR1cmUgc3VwcG9ydCBvciBhdmFpbGFiaWxpdHkgb2YgdGhpcyByb3V0aW5lCisgKi8KKworLyogRE5TU2VydmljZVNldERlZmF1bHREb21haW5Gb3JVc2VyKCkKKyAqCisgKiBTZXQgdGhlIGRlZmF1bHQgZG9tYWluIGZvciB0aGUgY2FsbGVyJ3MgVUlELiAgRnV0dXJlIGJyb3dzZSBhbmQgcmVnaXN0cmF0aW9uCisgKiBjYWxscyBieSB0aGlzIHVzZXIgdGhhdCBkbyBub3Qgc3BlY2lmeSBhbiBleHBsaWNpdCBkb21haW4gd2lsbCBicm93c2UgYW5kCisgKiByZWdpc3RlciBpbiB0aGlzIHdpZGUtYXJlYSBkb21haW4gaW4gYWRkaXRpb24gdG8gLmxvY2FsLiAgSW4gYWRkaXRpb24sIHRoaXMKKyAqIGRvbWFpbiB3aWxsIGJlIHJldHVybmVkIGFzIGEgQnJvd3NlIGRvbWFpbiB2aWEgZG9tYWluIGVudW1lcmF0aW9uIGNhbGxzLgorICoKKyAqCisgKiBQYXJhbWV0ZXJzOgorICoKKyAqIGZsYWdzOiAgICAgICAgICAgUGFzcyBrRE5TU2VydmljZUZsYWdzQWRkIHRvIGFkZCBhIGRvbWFpbiBmb3IgYSB1c2VyLiAgQ2FsbCB3aXRob3V0CisgKiAgICAgICAgICAgICAgICAgIHRoaXMgZmxhZyBzZXQgdG8gY2xlYXIgYSBwcmV2aW91c2x5IGFkZGVkIGRvbWFpbi4KKyAqCisgKiBkb21haW46ICAgICAgICAgIFRoZSBkb21haW4gdG8gYmUgdXNlZCBmb3IgdGhlIGNhbGxlcidzIFVJRC4KKyAqCisgKiByZXR1cm4gdmFsdWU6ICAgIFJldHVybnMga0ROU1NlcnZpY2VFcnJfTm9FcnJvciBvbiBzdWNjZXNlcywgb3RoZXJ3aXNlIHJldHVybnMKKyAqICAgICAgICAgICAgICAgICAgYW4gZXJyb3IgY29kZSBpbmRpY2F0aW5nIHRoZSBlcnJvciB0aGF0IG9jY3VycmVkCisgKi8KKworRE5TU2VydmljZUVycm9yVHlwZSBETlNTRF9BUEkgRE5TU2VydmljZVNldERlZmF1bHREb21haW5Gb3JVc2VyCisgICAgKAorICAgIEROU1NlcnZpY2VGbGFncyAgICAgICAgICAgICAgICAgICAgZmxhZ3MsCisgICAgY29uc3QgY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAqZG9tYWluCisgICAgKTsKKworI2VuZGlmIC8vX19BUFBMRV9BUElfUFJJVkFURQorCisvLyBTb21lIEMgY29tcGlsZXIgY2xldmVybmVzcy4gV2UgY2FuIG1ha2UgdGhlIGNvbXBpbGVyIGNoZWNrIGNlcnRhaW4gdGhpbmdzIGZvciB1cywKKy8vIGFuZCByZXBvcnQgZXJyb3JzIGF0IGNvbXBpbGUtdGltZSBpZiBhbnl0aGluZyBpcyB3cm9uZy4gVGhlIHVzdWFsIHdheSB0byBkbyB0aGlzIHdvdWxkCisvLyBiZSB0byB1c2UgYSBydW4tdGltZSAiaWYiIHN0YXRlbWVudCBvciB0aGUgY29udmVudGlvbmFsIHJ1bi10aW1lICJhc3NlcnQiIG1lY2hhbmlzbSwgYnV0CisvLyB0aGVuIHlvdSBkb24ndCBmaW5kIG91dCB3aGF0J3Mgd3JvbmcgdW50aWwgeW91IHJ1biB0aGUgc29mdHdhcmUuIFRoaXMgd2F5LCBpZiB0aGUgYXNzZXJ0aW9uCisvLyBjb25kaXRpb24gaXMgZmFsc2UsIHRoZSBhcnJheSBzaXplIGlzIG5lZ2F0aXZlLCBhbmQgdGhlIGNvbXBsaWVyIGNvbXBsYWlucyBpbW1lZGlhdGVseS4KKworc3RydWN0IEROU19TRF9Db21waWxlVGltZUFzc2VydGlvbkNoZWNrcworCXsKKwljaGFyIGFzc2VydDBbKHNpemVvZih1bmlvbiBfVFhUUmVjb3JkUmVmX3QpID09IDE2KSA/IDEgOiAtMV07CisJfTsKKworI2lmZGVmICBfX2NwbHVzcGx1cworICAgIH0KKyNlbmRpZgorCisjZW5kaWYgIC8qIF9ETlNfU0RfSCAqLwpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvbXBhdC1saWJkbnNfc2QvbnVsbC10ZXN0LmMgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tcGF0LWxpYmRuc19zZC9udWxsLXRlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2ZiOThmCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbXBhdC1saWJkbnNfc2QvbnVsbC10ZXN0LmMKQEAgLTAsMCArMSw3MSBAQAorLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2djY21hY3JvLmg+CisjaW5jbHVkZSA8ZG5zX3NkLmg+CisKK3N0YXRpYyB2b2lkIHJlcGx5KAorICAgICAgICBBVkFISV9HQ0NfVU5VU0VEIEROU1NlcnZpY2VSZWYgc2RSZWYsCisgICAgICAgIEFWQUhJX0dDQ19VTlVTRUQgRE5TU2VydmljZUZsYWdzIGZsYWdzLAorICAgICAgICBBVkFISV9HQ0NfVU5VU0VEIHVpbnQzMl90IGludGVyZmFjZUluZGV4LAorICAgICAgICBBVkFISV9HQ0NfVU5VU0VEIEROU1NlcnZpY2VFcnJvclR5cGUgZXJyb3JDb2RlLAorICAgICAgICBBVkFISV9HQ0NfVU5VU0VEIGNvbnN0IGNoYXIgKnNlcnZpY2VOYW1lLAorICAgICAgICBBVkFISV9HQ0NfVU5VU0VEIGNvbnN0IGNoYXIgKnJlZ3R5cGUsCisgICAgICAgIEFWQUhJX0dDQ19VTlVTRUQgY29uc3QgY2hhciAqcmVwbHlEb21haW4sCisgICAgICAgIEFWQUhJX0dDQ19VTlVTRUQgdm9pZCAqY29udGV4dCkgeworfQorCitpbnQgbWFpbihBVkFISV9HQ0NfVU5VU0VEIGludCBhcmdjLCBBVkFISV9HQ0NfVU5VU0VEIGNoYXIqYXJndltdKSB7CisKKyAgICBETlNTZXJ2aWNlUmVmIHJlZjEsIHJlZjIsIHJlZjMsIHJlZjQgPSBOVUxMOworCisgICAgRE5TU2VydmljZVJlZ2lzdGVyKCZyZWYxLCAwLCAwLCAic2ltcGxlIiwgIl9zaW1wbGUuX3RjcCIsIE5VTEwsIE5VTEwsIDQ3MTEsIDAsIE5VTEwsIE5VTEwsIE5VTEwpOworICAgIEROU1NlcnZpY2VSZWdpc3RlcigmcmVmMiwgMCwgMCwgInN1YnR5cGUgIzEiLCAiX3NpbXBsZS5fdGNwLF9zdWJ0eXBlMSIsIE5VTEwsIE5VTEwsIDQ3MTEsIDAsIE5VTEwsIE5VTEwsIE5VTEwpOworICAgIEROU1NlcnZpY2VSZWdpc3RlcigmcmVmMywgMCwgMCwgInN1YnR5cGUgIzIiLCAiX3NpbXBsZS5fdGNwLF9zdWJ0eXBlMSxfc3VidHlwZTIiLCBOVUxMLCBOVUxMLCA0NzExLCAwLCBOVUxMLCBOVUxMLCBOVUxMKTsKKworICAgIEROU1NlcnZpY2VSZWdpc3RlcigmcmVmNCwgMCwgMCwgInN1YnR5cGUgIzMiLCAiX3NpbXBsZS5fdGNwLCwiLCBOVUxMLCBOVUxMLCA0NzExLCAwLCBOVUxMLCBOVUxMLCBOVUxMKTsKKyAgICBhc3NlcnQoIXJlZjQpOworICAgIEROU1NlcnZpY2VSZWdpc3RlcigmcmVmNCwgMCwgMCwgInN1YnR5cGUgIzMiLCAiIiwgTlVMTCwgTlVMTCwgNDcxMSwgMCwgTlVMTCwgTlVMTCwgTlVMTCk7CisgICAgYXNzZXJ0KCFyZWY0KTsKKyAgICBETlNTZXJ2aWNlUmVnaXN0ZXIoJnJlZjQsIDAsIDAsICJzdWJ0eXBlICMzIiwgIiwiLCBOVUxMLCBOVUxMLCA0NzExLCAwLCBOVUxMLCBOVUxMLCBOVUxMKTsKKyAgICBhc3NlcnQoIXJlZjQpOworICAgIEROU1NlcnZpY2VSZWdpc3RlcigmcmVmNCwgMCwgMCwgInN1YnR5cGUgIzMiLCAiLCwiLCBOVUxMLCBOVUxMLCA0NzExLCAwLCBOVUxMLCBOVUxMLCBOVUxMKTsKKyAgICBhc3NlcnQoIXJlZjQpOworCisgICAgRE5TU2VydmljZUJyb3dzZSgmcmVmNCwgMCwgMCwgIl9zaW1wbGUuX3RjcCxfZ3Vya2UiLCBOVUxMLCByZXBseSwgTlVMTCk7CisKKyAgICBzbGVlcCgyMCk7CisKKyAgICBETlNTZXJ2aWNlUmVmRGVhbGxvY2F0ZShyZWYxKTsKKyAgICBETlNTZXJ2aWNlUmVmRGVhbGxvY2F0ZShyZWYyKTsKKyAgICBETlNTZXJ2aWNlUmVmRGVhbGxvY2F0ZShyZWYzKTsKKyAgICBETlNTZXJ2aWNlUmVmRGVhbGxvY2F0ZShyZWY0KTsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvbXBhdC1saWJkbnNfc2QvdHh0LXRlc3QuYyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtbGliZG5zX3NkL3R4dC10ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJmMjliNAotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtbGliZG5zX3NkL3R4dC10ZXN0LmMKQEAgLTAsMCArMSwxMjggQEAKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9nY2NtYWNyby5oPgorI2luY2x1ZGUgPGRuc19zZC5oPgorCitzdGF0aWMgdm9pZCBoZXhkdW1wKGNvbnN0IHZvaWQqIHAsIHNpemVfdCBzaXplKSB7CisgICAgY29uc3QgdWludDhfdCAqYyA9IHA7CisgICAgYXNzZXJ0KHApOworCisgICAgcHJpbnRmKCJEdW1waW5nICV6dSBieXRlcyBmcm9tICVwOlxuIiwgc2l6ZSwgcCk7CisKKyAgICB3aGlsZSAoc2l6ZSA+IDApIHsKKyAgICAgICAgdW5zaWduZWQgaTsKKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworICAgICAgICAgICAgaWYgKGkgPCBzaXplKQorICAgICAgICAgICAgICAgIHByaW50ZigiJTAyeCAiLCBjW2ldKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwcmludGYoIiAgICIpOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKyAgICAgICAgICAgIGlmIChpIDwgc2l6ZSkKKyAgICAgICAgICAgICAgICBwcmludGYoIiVjIiwgY1tpXSA+PSAzMiAmJiBjW2ldIDwgMTI3ID8gY1tpXSA6ICcuJyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcHJpbnRmKCIgIik7CisgICAgICAgIH0KKworICAgICAgICBwcmludGYoIlxuIik7CisKKyAgICAgICAgYyArPSAxNjsKKworICAgICAgICBpZiAoc2l6ZSA8PSAxNikKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIHNpemUgLT0gMTY7CisgICAgfQorfQorCisKK2ludCBtYWluKEFWQUhJX0dDQ19VTlVTRUQgaW50IGFyZ2MsIEFWQUhJX0dDQ19VTlVTRUQgY2hhciAqYXJndltdKSB7CisgICAgY29uc3QgY2hhciAqcjsKKyAgICBUWFRSZWNvcmRSZWYgcmVmOworICAgIHVpbnQ4X3QgbDsKKyAgICBjb25zdCB2b2lkICpwOworICAgIGNoYXIga1syNTZdOworCisgICAgVFhUUmVjb3JkQ3JlYXRlKCZyZWYsIDAsIE5VTEwpOworCisgICAgaGV4ZHVtcChUWFRSZWNvcmRHZXRCeXRlc1B0cigmcmVmKSwgVFhUUmVjb3JkR2V0TGVuZ3RoKCZyZWYpKTsKKworICAgIFRYVFJlY29yZFNldFZhbHVlKCZyZWYsICJmb28iLCA3LCAibGVubmFydCIpOworICAgIGhleGR1bXAoVFhUUmVjb3JkR2V0Qnl0ZXNQdHIoJnJlZiksIFRYVFJlY29yZEdldExlbmd0aCgmcmVmKSk7CisKKyAgICBUWFRSZWNvcmRTZXRWYWx1ZSgmcmVmLCAid2FsZG8iLCA1LCAicm9ja3MiKTsKKyAgICBoZXhkdW1wKFRYVFJlY29yZEdldEJ5dGVzUHRyKCZyZWYpLCBUWFRSZWNvcmRHZXRMZW5ndGgoJnJlZikpOworCisgICAgVFhUUmVjb3JkU2V0VmFsdWUoJnJlZiwgInF1dXgiLCA5LCAidGhlX2hvdXNlIik7CisgICAgaGV4ZHVtcChUWFRSZWNvcmRHZXRCeXRlc1B0cigmcmVmKSwgVFhUUmVjb3JkR2V0TGVuZ3RoKCZyZWYpKTsKKworICAgIFRYVFJlY29yZFNldFZhbHVlKCZyZWYsICJ5ZWFoIiwgMCwgTlVMTCk7CisgICAgaGV4ZHVtcChUWFRSZWNvcmRHZXRCeXRlc1B0cigmcmVmKSwgVFhUUmVjb3JkR2V0TGVuZ3RoKCZyZWYpKTsKKworICAgIFRYVFJlY29yZFNldFZhbHVlKCZyZWYsICJ3YWxkbyIsIDYsICJyb2NrZWQiKTsKKyAgICBoZXhkdW1wKFRYVFJlY29yZEdldEJ5dGVzUHRyKCZyZWYpLCBUWFRSZWNvcmRHZXRMZW5ndGgoJnJlZikpOworCisgICAgVFhUUmVjb3JkUmVtb3ZlVmFsdWUoJnJlZiwgImZvbyIpOworICAgIGhleGR1bXAoVFhUUmVjb3JkR2V0Qnl0ZXNQdHIoJnJlZiksIFRYVFJlY29yZEdldExlbmd0aCgmcmVmKSk7CisKKyAgICBUWFRSZWNvcmRSZW1vdmVWYWx1ZSgmcmVmLCAid2FsZG8iKTsKKyAgICBoZXhkdW1wKFRYVFJlY29yZEdldEJ5dGVzUHRyKCZyZWYpLCBUWFRSZWNvcmRHZXRMZW5ndGgoJnJlZikpOworCisgICAgVFhUUmVjb3JkU2V0VmFsdWUoJnJlZiwgImthd3VtbSIsIDYsICJibG9lcmIiKTsKKyAgICBoZXhkdW1wKFRYVFJlY29yZEdldEJ5dGVzUHRyKCZyZWYpLCBUWFRSZWNvcmRHZXRMZW5ndGgoJnJlZikpOworCisgICAgVFhUUmVjb3JkU2V0VmFsdWUoJnJlZiwgIm9uZSIsIDEsICIxIik7CisgICAgaGV4ZHVtcChUWFRSZWNvcmRHZXRCeXRlc1B0cigmcmVmKSwgVFhUUmVjb3JkR2V0TGVuZ3RoKCZyZWYpKTsKKworICAgIFRYVFJlY29yZFNldFZhbHVlKCZyZWYsICJ0d28iLCAxLCAiMiIpOworICAgIGhleGR1bXAoVFhUUmVjb3JkR2V0Qnl0ZXNQdHIoJnJlZiksIFRYVFJlY29yZEdldExlbmd0aCgmcmVmKSk7CisKKyAgICBUWFRSZWNvcmRTZXRWYWx1ZSgmcmVmLCAidGhyZWUiLCAxLCAiMyIpOworICAgIGhleGR1bXAoVFhUUmVjb3JkR2V0Qnl0ZXNQdHIoJnJlZiksIFRYVFJlY29yZEdldExlbmd0aCgmcmVmKSk7CisKKyAgICBhc3NlcnQoVFhUUmVjb3JkQ29udGFpbnNLZXkoVFhUUmVjb3JkR2V0TGVuZ3RoKCZyZWYpLCBUWFRSZWNvcmRHZXRCeXRlc1B0cigmcmVmKSwgInR3byIpKTsKKyAgICBhc3NlcnQoIVRYVFJlY29yZENvbnRhaW5zS2V5KFRYVFJlY29yZEdldExlbmd0aCgmcmVmKSwgVFhUUmVjb3JkR2V0Qnl0ZXNQdHIoJnJlZiksICJmb3VyIikpOworCisgICAgciA9IFRYVFJlY29yZEdldFZhbHVlUHRyKFRYVFJlY29yZEdldExlbmd0aCgmcmVmKSwgVFhUUmVjb3JkR2V0Qnl0ZXNQdHIoJnJlZiksICJrYXd1bW0iLCAmbCk7CisKKyAgICBoZXhkdW1wKHIsIGwpOworCisgICAgYXNzZXJ0KFRYVFJlY29yZEdldENvdW50KFRYVFJlY29yZEdldExlbmd0aCgmcmVmKSwgVFhUUmVjb3JkR2V0Qnl0ZXNQdHIoJnJlZikpID09IDYpOworCisgICAgVFhUUmVjb3JkR2V0SXRlbUF0SW5kZXgoVFhUUmVjb3JkR2V0TGVuZ3RoKCZyZWYpLCBUWFRSZWNvcmRHZXRCeXRlc1B0cigmcmVmKSwgMiwgc2l6ZW9mKGspLCBrLCAmbCwgJnApOworCisgICAgZnByaW50ZihzdGRlcnIsICJrZXk9PCVzPlxuIiwgayk7CisKKyAgICBoZXhkdW1wKHAsIGwpOworCisgICAgYXNzZXJ0KFRYVFJlY29yZEdldEl0ZW1BdEluZGV4KFRYVFJlY29yZEdldExlbmd0aCgmcmVmKSwgVFhUUmVjb3JkR2V0Qnl0ZXNQdHIoJnJlZiksIDIwLCBzaXplb2YoayksIGssICZsLCAmcCkgPT0ga0ROU1NlcnZpY2VFcnJfSW52YWxpZCk7CisKKyAgICBUWFRSZWNvcmREZWFsbG9jYXRlKCZyZWYpOworfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvbXBhdC1saWJkbnNfc2QvdHh0LmMgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tcGF0LWxpYmRuc19zZC90eHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDZjMTE2Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbXBhdC1saWJkbnNfc2QvdHh0LmMKQEAgLTAsMCArMSw0ODkgQEAKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vbWFsbG9jLmg+CisKKyNpbmNsdWRlICJkbnNfc2QuaCIKKyNpbmNsdWRlICJ3YXJuLmgiCisKK3R5cGVkZWYgc3RydWN0IFRYVFJlY29yZEludGVybmFsIHsKKyAgICB1aW50OF90ICpidWZmZXIsICptYWxsb2NfYnVmZmVyOworICAgIHNpemVfdCBzaXplLCBtYXhfc2l6ZTsKK30gVFhUUmVjb3JkSW50ZXJuYWw7CisKKyNkZWZpbmUgSU5URVJOQUxfUFRSKHR4dHJlZikgKCogKFRYVFJlY29yZEludGVybmFsKiopICh0eHRyZWYpKQorI2RlZmluZSBJTlRFUk5BTF9QVFJfQ09OU1QodHh0cmVmKSAoKiAoY29uc3QgVFhUUmVjb3JkSW50ZXJuYWwqIGNvbnN0ICopICh0eHRyZWYpKQorCit2b2lkIEROU1NEX0FQSSBUWFRSZWNvcmRDcmVhdGUoCisgICAgVFhUUmVjb3JkUmVmICp0eHRyZWYsCisgICAgdWludDE2X3QgbGVuZ3RoLAorICAgIHZvaWQgKmJ1ZmZlcikgeworCisgICAgVFhUUmVjb3JkSW50ZXJuYWwgKnQ7CisKKyAgICBBVkFISV9XQVJOX0xJTktBR0U7CisKKyAgICBhc3NlcnQodHh0cmVmKTsKKworICAgIC8qIEFwcGxlJ3MgQVBJIGRlc2lnbiBpcyBmbGF3ZWQgaW4gc28gbWFueSB3YXlzLCBpbmNsdWRpbmcgdGhlCisgICAgICogZmFjdCB0aGF0IGl0IGlzbid0IGNvbXBhdGlibGUgd2l0aCA2NCBiaXQgcHJvY2Vzc29ycy4gVG8gd29yaworICAgICAqIGFyb3VuZCB0aGlzIHdlIG5lZWQgc29tZSBtYWdpYyBoZXJlIHdoaWNoIGludm9sdmVzIGFsbG9jYXRpbmcKKyAgICAgKiBvdXIgb3duIG1lbW9yeS4gUGxlYXNlLCBBcHBsZSwgZG8geW91ciBob21ld29yayBuZXh0IHRpbWUKKyAgICAgKiBiZWZvcmUgZGVzaWduaW5nIGFuIEFQSSEgKi8KKworICAgIGlmICgodCA9IGF2YWhpX25ldyhUWFRSZWNvcmRJbnRlcm5hbCwgMSkpKSB7CisgICAgICAgIHQtPmJ1ZmZlciA9IGJ1ZmZlcjsKKyAgICAgICAgdC0+bWF4X3NpemUgPSBidWZmZXIgPyBsZW5ndGggOiAoc2l6ZV90KTA7CisgICAgICAgIHQtPnNpemUgPSAwOworICAgICAgICB0LT5tYWxsb2NfYnVmZmVyID0gTlVMTDsKKyAgICB9CisKKyAgICAvKiBJZiB3ZSB3ZXJlIHVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnksIHdlIHN0b3JlIGEgTlVMTCBwb2ludGVyCisgICAgICogYW5kIHJldHVybiBhIE5vTWVtb3J5IGVycm9yIGxhdGVyLCBpcyBzb21ld2hhdCB1bmNsZWFuLCBidXQKKyAgICAgKiBzaG91bGQgd29yay4gKi8KKyAgICBJTlRFUk5BTF9QVFIodHh0cmVmKSA9IHQ7Cit9CisKK3ZvaWQgRE5TU0RfQVBJIFRYVFJlY29yZERlYWxsb2NhdGUoVFhUUmVjb3JkUmVmICp0eHRyZWYpIHsKKyAgICBUWFRSZWNvcmRJbnRlcm5hbCAqdDsKKworICAgIEFWQUhJX1dBUk5fTElOS0FHRTsKKworICAgIGFzc2VydCh0eHRyZWYpOworICAgIHQgPSBJTlRFUk5BTF9QVFIodHh0cmVmKTsKKyAgICBpZiAoIXQpCisgICAgICAgIHJldHVybjsKKworICAgIGF2YWhpX2ZyZWUodC0+bWFsbG9jX2J1ZmZlcik7CisgICAgYXZhaGlfZnJlZSh0KTsKKworICAgIC8qIEp1c3QgaW4gY2FzZSAuLi4gKi8KKyAgICBJTlRFUk5BTF9QVFIodHh0cmVmKSA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgbWFrZV9zdXJlX2ZpdHNfaW4oVFhUUmVjb3JkSW50ZXJuYWwgKnQsIHNpemVfdCBzaXplKSB7CisgICAgdWludDhfdCAqbjsKKyAgICBzaXplX3QgbnNpemU7CisKKyAgICBhc3NlcnQodCk7CisKKyAgICBpZiAodC0+c2l6ZSArIHNpemUgPD0gdC0+bWF4X3NpemUpCisgICAgICAgIHJldHVybiAwOworCisgICAgbnNpemUgPSB0LT5zaXplICsgc2l6ZSArIDEwMDsKKworICAgIGlmIChuc2l6ZSA+IDB4RkZGRikKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaWYgKCEobiA9IGF2YWhpX3JlYWxsb2ModC0+bWFsbG9jX2J1ZmZlciwgbnNpemUpKSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaWYgKCF0LT5tYWxsb2NfYnVmZmVyICYmIHQtPnNpemUpCisgICAgICAgIG1lbWNweShuLCB0LT5idWZmZXIsIHQtPnNpemUpOworCisgICAgdC0+YnVmZmVyID0gdC0+bWFsbG9jX2J1ZmZlciA9IG47CisgICAgdC0+bWF4X3NpemUgPSBuc2l6ZTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlbW92ZV9rZXkoVFhUUmVjb3JkSW50ZXJuYWwgKnQsIGNvbnN0IGNoYXIgKmtleSkgeworICAgIHNpemVfdCBpOworICAgIHVpbnQ4X3QgKnA7CisgICAgc2l6ZV90IGtleV9sZW47CisgICAgaW50IGZvdW5kID0gMDsKKworICAgIGtleV9sZW4gPSBzdHJsZW4oa2V5KTsKKyAgICBhc3NlcnQoa2V5X2xlbiA8PSAweEZGKTsKKworICAgIHAgPSB0LT5idWZmZXI7CisgICAgaSA9IDA7CisKKyAgICB3aGlsZSAoaSA8IHQtPnNpemUpIHsKKworICAgICAgICAvKiBEb2VzIHRoZSBpdGVtIGZpdCBpbj8gKi8KKyAgICAgICAgYXNzZXJ0KCpwIDw9IHQtPnNpemUgLSBpIC0gMSk7CisKKyAgICAgICAgLyogS2V5IGxvbmdlciB0aGFuIGJ1ZmZlciAqLworICAgICAgICBpZiAoa2V5X2xlbiA+IHQtPnNpemUgLSBpIC0gMSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmIChrZXlfbGVuIDw9ICpwICYmCisgICAgICAgICAgICBzdHJuY21wKGtleSwgKGNoYXIqKSBwKzEsIGtleV9sZW4pID09IDAgJiYKKyAgICAgICAgICAgIChrZXlfbGVuID09ICpwIHx8IHBbMStrZXlfbGVuXSA9PSAnPScpKSB7CisKKyAgICAgICAgICAgIHVpbnQ4X3QgczsKKworICAgICAgICAgICAgLyogS2V5IG1hdGNoZXMsIHNvIGxldCdzIHJlbW92ZSBpdCAqLworCisgICAgICAgICAgICBzID0gKnA7CisgICAgICAgICAgICBtZW1tb3ZlKHAsIHAgKyAxICsgKnAsIHQtPnNpemUgLSBpIC0gKnAgLTEpOworICAgICAgICAgICAgdC0+c2l6ZSAtPSBzICsgMTsKKworICAgICAgICAgICAgZm91bmQgPSAxOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyogU2tpcCB0byBuZXh0ICovCisKKyAgICAgICAgICAgIGkgKz0gKnAgKzE7CisgICAgICAgICAgICBwICs9ICpwICsxOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZvdW5kOworfQorCitETlNTZXJ2aWNlRXJyb3JUeXBlIEROU1NEX0FQSSBUWFRSZWNvcmRTZXRWYWx1ZSgKKyAgICBUWFRSZWNvcmRSZWYgKnR4dHJlZiwKKyAgICBjb25zdCBjaGFyICprZXksCisgICAgdWludDhfdCBsZW5ndGgsCisgICAgY29uc3Qgdm9pZCAqdmFsdWUpIHsKKworICAgIFRYVFJlY29yZEludGVybmFsICp0OworICAgIHVpbnQ4X3QgKnA7CisgICAgc2l6ZV90IGwsIG47CisKKyAgICBBVkFISV9XQVJOX0xJTktBR0U7CisKKyAgICBhc3NlcnQoa2V5KTsKKyAgICBhc3NlcnQodHh0cmVmKTsKKworICAgIGwgPSBzdHJsZW4oa2V5KTsKKworICAgIGlmICgqa2V5ID09IDAgfHwgc3RyY2hyKGtleSwgJz0nKSB8fCBsID4gMHhGRikgLyogRW1wdHkgb3IgaW52YWxpZCBrZXkgKi8KKyAgICAgICAgcmV0dXJuIGtETlNTZXJ2aWNlRXJyX0ludmFsaWQ7CisKKyAgICBpZiAoISh0ID0gSU5URVJOQUxfUFRSKHR4dHJlZikpKQorICAgICAgICByZXR1cm4ga0ROU1NlcnZpY2VFcnJfTm9NZW1vcnk7CisKKyAgICBuID0gbCArICh2YWx1ZSA/IGxlbmd0aCArIDEgOiAwKTsKKworICAgIGlmIChuID4gMHhGRikKKyAgICAgICAgcmV0dXJuIGtETlNTZXJ2aWNlRXJyX0ludmFsaWQ7CisKKyAgICBpZiAobWFrZV9zdXJlX2ZpdHNfaW4odCwgMSArIG4pIDwgMCkKKyAgICAgICAgcmV0dXJuIGtETlNTZXJ2aWNlRXJyX05vTWVtb3J5OworCisgICAgcmVtb3ZlX2tleSh0LCBrZXkpOworCisgICAgcCA9IHQtPmJ1ZmZlciArIHQtPnNpemU7CisKKyAgICAqKHArKykgPSAodWludDhfdCkgbjsKKyAgICB0LT5zaXplICsrOworCisgICAgbWVtY3B5KHAsIGtleSwgbCk7CisgICAgcCArPSBsOworICAgIHQtPnNpemUgKz0gbDsKKworICAgIGlmICh2YWx1ZSkgeworICAgICAgICAqKHArKykgPSAnPSc7CisgICAgICAgIG1lbWNweShwLCB2YWx1ZSwgbGVuZ3RoKTsKKyAgICAgICAgdC0+c2l6ZSArPSBsZW5ndGggKyAxOworICAgIH0KKworICAgIGFzc2VydCh0LT5zaXplIDw9IHQtPm1heF9zaXplKTsKKworICAgIHJldHVybiBrRE5TU2VydmljZUVycl9Ob0Vycm9yOworfQorCitETlNTZXJ2aWNlRXJyb3JUeXBlIEROU1NEX0FQSSBUWFRSZWNvcmRSZW1vdmVWYWx1ZShUWFRSZWNvcmRSZWYgKnR4dHJlZiwgY29uc3QgY2hhciAqa2V5KSB7CisgICAgVFhUUmVjb3JkSW50ZXJuYWwgKnQ7CisgICAgaW50IGZvdW5kOworCisgICAgQVZBSElfV0FSTl9MSU5LQUdFOworCisgICAgYXNzZXJ0KGtleSk7CisgICAgYXNzZXJ0KHR4dHJlZik7CisKKyAgICBpZiAoKmtleSA9PSAwIHx8IHN0cmNocihrZXksICc9JykgfHwgc3RybGVuKGtleSkgPiAweEZGKSAvKiBFbXB0eSBvciBpbnZhbGlkIGtleSAqLworICAgICAgICByZXR1cm4ga0ROU1NlcnZpY2VFcnJfSW52YWxpZDsKKworICAgIGlmICghKHQgPSBJTlRFUk5BTF9QVFIodHh0cmVmKSkpCisgICAgICAgIHJldHVybiBrRE5TU2VydmljZUVycl9Ob0Vycm9yOworCisgICAgZm91bmQgPSByZW1vdmVfa2V5KHQsIGtleSk7CisKKyAgICByZXR1cm4gZm91bmQgPyBrRE5TU2VydmljZUVycl9Ob0Vycm9yIDoga0ROU1NlcnZpY2VFcnJfTm9TdWNoS2V5OworfQorCit1aW50MTZfdCBETlNTRF9BUEkgVFhUUmVjb3JkR2V0TGVuZ3RoKGNvbnN0IFRYVFJlY29yZFJlZiAqdHh0cmVmKSB7CisgICAgY29uc3QgVFhUUmVjb3JkSW50ZXJuYWwgKnQ7CisKKyAgICBBVkFISV9XQVJOX0xJTktBR0U7CisKKyAgICBhc3NlcnQodHh0cmVmKTsKKworICAgIGlmICghKHQgPSBJTlRFUk5BTF9QVFJfQ09OU1QodHh0cmVmKSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgYXNzZXJ0KHQtPnNpemUgPD0gMHhGRkZGKTsKKyAgICByZXR1cm4gKHVpbnQxNl90KSB0LT5zaXplOworfQorCitjb25zdCB2b2lkICogRE5TU0RfQVBJIFRYVFJlY29yZEdldEJ5dGVzUHRyKGNvbnN0IFRYVFJlY29yZFJlZiAqdHh0cmVmKSB7CisgICAgY29uc3QgVFhUUmVjb3JkSW50ZXJuYWwgKnQ7CisKKyAgICBBVkFISV9XQVJOX0xJTktBR0U7CisKKyAgICBhc3NlcnQodHh0cmVmKTsKKworICAgIGlmICghKHQgPSBJTlRFUk5BTF9QVFJfQ09OU1QodHh0cmVmKSkgfHwgIXQtPmJ1ZmZlcikKKyAgICAgICAgcmV0dXJuICIiOworCisgICAgcmV0dXJuIHQtPmJ1ZmZlcjsKK30KKworc3RhdGljIGNvbnN0IHVpbnQ4X3QgKmZpbmRfa2V5KGNvbnN0IHVpbnQ4X3QgKmJ1ZmZlciwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmtleSkgeworICAgIHNpemVfdCBpOworICAgIGNvbnN0IHVpbnQ4X3QgKnA7CisgICAgc2l6ZV90IGtleV9sZW47CisKKyAgICBrZXlfbGVuID0gc3RybGVuKGtleSk7CisKKyAgICBhc3NlcnQoa2V5X2xlbiA8PSAweEZGKTsKKworICAgIHAgPSBidWZmZXI7CisgICAgaSA9IDA7CisKKyAgICB3aGlsZSAoaSA8IHNpemUpIHsKKworICAgICAgICAvKiBEb2VzIHRoZSBpdGVtIGZpdCBpbj8gKi8KKyAgICAgICAgaWYgKCpwID4gc2l6ZSAtIGkgLSAxKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAgICAgLyogS2V5IGxvbmdlciB0aGFuIGJ1ZmZlciAqLworICAgICAgICBpZiAoa2V5X2xlbiA+IHNpemUgLSBpIC0gMSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworCisgICAgICAgIGlmIChrZXlfbGVuIDw9ICpwICYmCisgICAgICAgICAgICBzdHJuY21wKGtleSwgKGNvbnN0IGNoYXIqKSBwKzEsIGtleV9sZW4pID09IDAgJiYKKyAgICAgICAgICAgIChrZXlfbGVuID09ICpwIHx8IHBbMStrZXlfbGVuXSA9PSAnPScpKSB7CisKKyAgICAgICAgICAgIC8qIEtleSBtYXRjaGVzLCBzbyBsZXQncyByZXR1cm4gaXQgKi8KKworICAgICAgICAgICAgcmV0dXJuIHA7CisgICAgICAgIH0KKworICAgICAgICAvKiBTa2lwIHRvIG5leHQgKi8KKyAgICAgICAgaSArPSAqcCArMTsKKyAgICAgICAgcCArPSAqcCArMTsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworaW50IEROU1NEX0FQSSBUWFRSZWNvcmRDb250YWluc0tleSAoCisgICAgdWludDE2X3Qgc2l6ZSwKKyAgICBjb25zdCB2b2lkICpidWZmZXIsCisgICAgY29uc3QgY2hhciAqa2V5KSB7CisKKyAgICBBVkFISV9XQVJOX0xJTktBR0U7CisKKyAgICBhc3NlcnQoa2V5KTsKKworICAgIGlmICghc2l6ZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBhc3NlcnQoYnVmZmVyKTsKKworICAgIGlmICghKGZpbmRfa2V5KGJ1ZmZlciwgc2l6ZSwga2V5KSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIDE7Cit9CisKK2NvbnN0IHZvaWQgKiBETlNTRF9BUEkgVFhUUmVjb3JkR2V0VmFsdWVQdHIoCisgICAgdWludDE2X3Qgc2l6ZSwKKyAgICBjb25zdCB2b2lkICpidWZmZXIsCisgICAgY29uc3QgY2hhciAqa2V5LAorICAgIHVpbnQ4X3QgKnZhbHVlX2xlbikgeworCisgICAgY29uc3QgdWludDhfdCAqcDsKKyAgICBzaXplX3QgbiwgbDsKKworICAgIEFWQUhJX1dBUk5fTElOS0FHRTsKKworICAgIGFzc2VydChrZXkpOworCisgICAgaWYgKCFzaXplKQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICBpZiAoKmtleSA9PSAwIHx8IHN0cmNocihrZXksICc9JykgfHwgc3RybGVuKGtleSkgPiAweEZGKSAvKiBFbXB0eSBvciBpbnZhbGlkIGtleSAqLworICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGFzc2VydChidWZmZXIpOworCisgICAgaWYgKCEocCA9IGZpbmRfa2V5KGJ1ZmZlciwgc2l6ZSwga2V5KSkpCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIG4gPSAqcDsKKyAgICBsID0gc3RybGVuKGtleSk7CisKKyAgICBhc3NlcnQobiA+PSBsKTsKKyAgICBwICs9IDEgKyBsOworICAgIG4gLT0gbDsKKworICAgIGlmIChuIDw9IDApCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIGFzc2VydCgqcCA9PSAnPScpOworICAgIHArKzsKKyAgICBuLS07CisKKyAgICBpZiAodmFsdWVfbGVuKQorICAgICAgICAqdmFsdWVfbGVuID0gbjsKKworICAgIHJldHVybiBwOworCitmYWlsOgorICAgIGlmICh2YWx1ZV9sZW4pCisgICAgICAgICp2YWx1ZV9sZW4gPSAwOworCisgICAgcmV0dXJuIE5VTEw7Cit9CisKKwordWludDE2X3QgRE5TU0RfQVBJIFRYVFJlY29yZEdldENvdW50KAorICAgIHVpbnQxNl90IHNpemUsCisgICAgY29uc3Qgdm9pZCAqYnVmZmVyKSB7CisKKyAgICBjb25zdCB1aW50OF90ICpwOworICAgIHVuc2lnbmVkIG4gPSAwOworICAgIHNpemVfdCBpOworCisgICAgQVZBSElfV0FSTl9MSU5LQUdFOworCisgICAgaWYgKCFzaXplKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGFzc2VydChidWZmZXIpOworCisgICAgcCA9IGJ1ZmZlcjsKKyAgICBpID0gMDsKKworICAgIHdoaWxlIChpIDwgc2l6ZSkgeworCisgICAgICAgIC8qIERvZXMgdGhlIGl0ZW0gZml0IGluPyAqLworICAgICAgICBpZiAoKnAgPiBzaXplIC0gaSAtIDEpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBuKys7CisKKyAgICAgICAgLyogU2tpcCB0byBuZXh0ICovCisgICAgICAgIGkgKz0gKnAgKzE7CisgICAgICAgIHAgKz0gKnAgKzE7CisgICAgfQorCisgICAgYXNzZXJ0KG4gPD0gMHhGRkZGKTsKKworICAgIHJldHVybiAodWludDE2X3QpIG47Cit9CisKK0ROU1NlcnZpY2VFcnJvclR5cGUgRE5TU0RfQVBJIFRYVFJlY29yZEdldEl0ZW1BdEluZGV4KAorICAgIHVpbnQxNl90IHNpemUsCisgICAgY29uc3Qgdm9pZCAqYnVmZmVyLAorICAgIHVpbnQxNl90IGlkeCwKKyAgICB1aW50MTZfdCBrZXlfbGVuLAorICAgIGNoYXIgKmtleSwKKyAgICB1aW50OF90ICp2YWx1ZV9sZW4sCisgICAgY29uc3Qgdm9pZCAqKnZhbHVlKSB7CisKKyAgICBjb25zdCB1aW50OF90ICpwOworICAgIHNpemVfdCBpOworICAgIHVuc2lnbmVkIG4gPSAwOworICAgIEROU1NlcnZpY2VFcnJvclR5cGUgcmV0ID0ga0ROU1NlcnZpY2VFcnJfSW52YWxpZDsKKworICAgIEFWQUhJX1dBUk5fTElOS0FHRTsKKworICAgIGlmICghc2l6ZSkKKyAgICAgICAgZ290byBmYWlsOworCisgICAgYXNzZXJ0KGJ1ZmZlcik7CisKKyAgICBwID0gYnVmZmVyOworICAgIGkgPSAwOworCisgICAgd2hpbGUgKGkgPCBzaXplKSB7CisKKyAgICAgICAgLyogRG9lcyB0aGUgaXRlbSBmaXQgaW4/ICovCisgICAgICAgIGlmICgqcCA+IHNpemUgLSBpIC0gMSkKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKworICAgICAgICBpZiAobiA+PSBpZHgpIHsKKyAgICAgICAgICAgIHNpemVfdCBsOworICAgICAgICAgICAgY29uc3QgdWludDhfdCAqZDsKKworICAgICAgICAgICAgZCA9IG1lbWNocihwKzEsICc9JywgKnApOworCisgICAgICAgICAgICAvKiBMZW5ndGggb2Yga2V5ICovCisgICAgICAgICAgICBsID0gZCA/IGQgLSBwIC0gMSA6ICpwOworCisgICAgICAgICAgICBpZiAoa2V5X2xlbiA8IGwrMSkgeworICAgICAgICAgICAgICAgIHJldCA9IGtETlNTZXJ2aWNlRXJyX05vTWVtb3J5OworICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3RybmNweShrZXksIChjb25zdCBjaGFyKikgcCArIDEsIGwpOworICAgICAgICAgICAga2V5W2xdID0gMDsKKworICAgICAgICAgICAgaWYgKGQpIHsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWVfbGVuKQorICAgICAgICAgICAgICAgICAgICAqdmFsdWVfbGVuID0gKnAgLSBsIC0gMTsKKworICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgKnZhbHVlID0gZCArIDE7CisgICAgICAgICAgICB9IGVsc2UgeworCisgICAgICAgICAgICAgICAgaWYgKHZhbHVlX2xlbikKKyAgICAgICAgICAgICAgICAgICAgKnZhbHVlX2xlbiAgPSAwOworCisgICAgICAgICAgICAgICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAqdmFsdWUgPSBOVUxMOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4ga0ROU1NlcnZpY2VFcnJfTm9FcnJvcjsKKyAgICAgICAgfQorCisgICAgICAgIG4rKzsKKworICAgICAgICAvKiBTa2lwIHRvIG5leHQgKi8KKyAgICAgICAgaSArPSAqcCArMTsKKyAgICAgICAgcCArPSAqcCArMTsKKyAgICB9CisKKworZmFpbDoKKworICAgIGlmICh2YWx1ZSkKKyAgICAgICAgKnZhbHVlID0gTlVMTDsKKworICAgIGlmICh2YWx1ZV9sZW4pCisgICAgICAgICp2YWx1ZV9sZW4gPSAwOworCisgICAgcmV0dXJuIHJldDsKKworfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvbXBhdC1saWJkbnNfc2QvdW5zdXBwb3J0ZWQuYyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtbGliZG5zX3NkL3Vuc3VwcG9ydGVkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU5NGY3MAotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtbGliZG5zX3NkL3Vuc3VwcG9ydGVkLmMKQEAgLTAsMCArMSw5MCBAQAorLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vZ2NjbWFjcm8uaD4KKworI2luY2x1ZGUgImRuc19zZC5oIgorI2luY2x1ZGUgIndhcm4uaCIKKworRE5TU2VydmljZUVycm9yVHlwZSBETlNTRF9BUEkgRE5TU2VydmljZVJlZ2lzdGVyUmVjb3JkICgKKyAgICBBVkFISV9HQ0NfVU5VU0VEIEROU1NlcnZpY2VSZWYgc2RSZWYsCisgICAgQVZBSElfR0NDX1VOVVNFRCBETlNSZWNvcmRSZWYgKlJlY29yZFJlZiwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIEROU1NlcnZpY2VGbGFncyBmbGFncywKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHVpbnQzMl90IGludGVyZmFjZUluZGV4LAorICAgIEFWQUhJX0dDQ19VTlVTRUQgY29uc3QgY2hhciAqZnVsbG5hbWUsCisgICAgQVZBSElfR0NDX1VOVVNFRCB1aW50MTZfdCBycnR5cGUsCisgICAgQVZBSElfR0NDX1VOVVNFRCB1aW50MTZfdCBycmNsYXNzLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgdWludDE2X3QgcmRsZW4sCisgICAgQVZBSElfR0NDX1VOVVNFRCBjb25zdCB2b2lkICpyZGF0YSwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHVpbnQzMl90IHR0bCwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIEROU1NlcnZpY2VSZWdpc3RlclJlY29yZFJlcGx5IGNhbGxCYWNrLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgdm9pZCAqY29udGV4dCkgeworCisgICAgQVZBSElfV0FSTl9VTlNVUFBPUlRFRDsKKworICAgIHJldHVybiBrRE5TU2VydmljZUVycl9VbnN1cHBvcnRlZDsKK30KKworRE5TU2VydmljZUVycm9yVHlwZSBETlNTRF9BUEkgRE5TU2VydmljZVJlY29uZmlybVJlY29yZCAoCisgICAgQVZBSElfR0NDX1VOVVNFRCBETlNTZXJ2aWNlRmxhZ3MgZmxhZ3MsCisgICAgQVZBSElfR0NDX1VOVVNFRCB1aW50MzJfdCBpbnRlcmZhY2VJbmRleCwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIGNvbnN0IGNoYXIgKmZ1bGxuYW1lLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgdWludDE2X3QgcnJ0eXBlLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgdWludDE2X3QgcnJjbGFzcywKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHVpbnQxNl90IHJkbGVuLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgY29uc3Qgdm9pZCAqcmRhdGEpIHsKKworICAgIEFWQUhJX1dBUk5fVU5TVVBQT1JURUQ7CisKKyAgICByZXR1cm4ga0ROU1NlcnZpY2VFcnJfVW5zdXBwb3J0ZWQ7Cit9CisKK0ROU1NlcnZpY2VFcnJvclR5cGUgRE5TU0RfQVBJIEROU1NlcnZpY2VDcmVhdGVDb25uZWN0aW9uKEFWQUhJX0dDQ19VTlVTRUQgRE5TU2VydmljZVJlZiAqc2RSZWYpIHsKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEOworCisgICAgcmV0dXJuIGtETlNTZXJ2aWNlRXJyX1Vuc3VwcG9ydGVkOworfQorCitETlNTZXJ2aWNlRXJyb3JUeXBlIEROU1NEX0FQSSBETlNTZXJ2aWNlQWRkUmVjb3JkKAorICAgIEFWQUhJX0dDQ19VTlVTRUQgRE5TU2VydmljZVJlZiBzZFJlZiwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIEROU1JlY29yZFJlZiAqUmVjb3JkUmVmLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgRE5TU2VydmljZUZsYWdzIGZsYWdzLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgdWludDE2X3QgcnJ0eXBlLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgdWludDE2X3QgcmRsZW4sCisgICAgQVZBSElfR0NDX1VOVVNFRCBjb25zdCB2b2lkICpyZGF0YSwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHVpbnQzMl90IHR0bCkgeworCisgICAgQVZBSElfV0FSTl9VTlNVUFBPUlRFRDsKKworICAgIHJldHVybiBrRE5TU2VydmljZUVycl9VbnN1cHBvcnRlZDsKK30KKworRE5TU2VydmljZUVycm9yVHlwZSBETlNTRF9BUEkgRE5TU2VydmljZVJlbW92ZVJlY29yZCgKKyAgICBBVkFISV9HQ0NfVU5VU0VEIEROU1NlcnZpY2VSZWYgc2RSZWYsCisgICAgQVZBSElfR0NDX1VOVVNFRCBETlNSZWNvcmRSZWYgUmVjb3JkUmVmLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgRE5TU2VydmljZUZsYWdzIGZsYWdzKSB7CisKKyAgICBBVkFISV9XQVJOX1VOU1VQUE9SVEVEOworCisgICAgcmV0dXJuIGtETlNTZXJ2aWNlRXJyX1Vuc3VwcG9ydGVkOworfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvbXBhdC1saWJkbnNfc2Qvd2Fybi5jIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbXBhdC1saWJkbnNfc2Qvd2Fybi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMTE3MzYKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29tcGF0LWxpYmRuc19zZC93YXJuLmMKQEAgLTAsMCArMSwxMjQgQEAKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3lzbG9nLmg+CisKKyNpbmNsdWRlICJ3YXJuLmgiCisKKyNpZm5kZWYgQ09NUEFUX0xBWUVSCisjZGVmaW5lIENPTVBBVF9MQVlFUiAiQXBwbGUgQm9uam91ciIKKyNlbmRpZgorCisjaWZuZGVmIENHSV9TVUJTWVNURU0KKyNkZWZpbmUgQ0dJX1NVQlNZU1RFTSAibGliZG5zX3NkIgorI2VuZGlmCisKK3N0YXRpYyBwdGhyZWFkX211dGV4X3QgbGlua2FnZV9tdXRleCA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CitzdGF0aWMgaW50IGxpbmthZ2Vfd2FybmluZyA9IDA7CisKK2NvbnN0IGNoYXIgKmF2YWhpX2V4ZV9uYW1lKHZvaWQpIHsKKyNpZmRlZiBIQVZFX0dFVFBST0dOQU1FCisgICAgcmV0dXJuIGdldHByb2duYW1lKCk7CisjZWxpZiBkZWZpbmVkKF9fbGludXhfXykKKyAgICBzdGF0aWMgY2hhciBleGVfbmFtZVsxMDI0XSA9ICIiOworICAgIHN0YXRpYyBwdGhyZWFkX211dGV4X3QgbXV0ZXggPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOworCisgICAgLyogWWVzLCBJIGtub3csIHRoaXMgaXMgbm90IHBvcnRhYmxlLiBCdXQgd2hvIGNhcmVzPyBJdCdzIGZvcgorICAgICAqIGNvc21ldGljcyBvbmx5LCBhbnl3YXkuICovCisKKyAgICBwdGhyZWFkX211dGV4X2xvY2soJm11dGV4KTsKKworICAgIGlmIChleGVfbmFtZVswXSA9PSAwKSB7CisgICAgICAgIGludCBrOworCisgICAgICAgIGlmICgoayA9IHJlYWRsaW5rKCIvcHJvYy9zZWxmL2V4ZSIsIGV4ZV9uYW1lLCBzaXplb2YoZXhlX25hbWUpLTEpKSA8IDApCisgICAgICAgICAgICBzbnByaW50ZihleGVfbmFtZSwgc2l6ZW9mKGV4ZV9uYW1lKSwgIih1bmtub3duKSIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGNoYXIgKnNsYXNoOworCisgICAgICAgICAgICBhc3NlcnQoKHNpemVfdCkgayA8PSBzaXplb2YoZXhlX25hbWUpLTEpOworICAgICAgICAgICAgZXhlX25hbWVba10gPSAwOworCisgICAgICAgICAgICBpZiAoKHNsYXNoID0gc3RycmNocihleGVfbmFtZSwgJy8nKSkpCisgICAgICAgICAgICAgICAgbWVtbW92ZShleGVfbmFtZSwgc2xhc2grMSwgc3RybGVuKHNsYXNoKSsxKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZtdXRleCk7CisKKyAgICByZXR1cm4gZXhlX25hbWU7CisjZWxzZQorI2lmZGVmIF9fR05VQ19fCisjd2FybmluZyAiYXZhaGlfZXhlX25hbWUoKSBuZWVkcyB0byBiZSBpbXBsZW1lbnRlZCBmb3IgeW91ciBvcGVyYXRpbmcgc3lzdGVtIgorI2VuZGlmCisgICAgcmV0dXJuICIodW5rbm93bikiOworI2VuZGlmCit9CisKK3ZvaWQgYXZhaGlfd2Fybihjb25zdCBjaGFyICpmbXQsIC4uLikgeworICAgIGNoYXIgbXNnWzUxMl0gID0gIioqKiBXQVJOSU5HICoqKiAiOworICAgIHZhX2xpc3QgYXA7CisgICAgc2l6ZV90IG47CisKKyAgICBhc3NlcnQoZm10KTsKKworICAgIHZhX3N0YXJ0KGFwLCBmbXQpOworICAgIG4gPSBzdHJsZW4obXNnKTsKKyAgICB2c25wcmludGYobXNnICsgbiwgc2l6ZW9mKG1zZykgLSBuLCBmbXQsIGFwKTsKKyAgICB2YV9lbmQoYXApOworCisgICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwgbXNnKTsKKworICAgIG9wZW5sb2coYXZhaGlfZXhlX25hbWUoKSwgTE9HX1BJRCwgTE9HX1VTRVIpOworICAgIHN5c2xvZyhMT0dfV0FSTklORywgIiVzIiwgbXNnKTsKKyAgICBjbG9zZWxvZygpOworfQorCit2b2lkIGF2YWhpX3dhcm5fbGlua2FnZSh2b2lkKSB7CisgICAgaW50IHc7CisKKyAgICBwdGhyZWFkX211dGV4X2xvY2soJmxpbmthZ2VfbXV0ZXgpOworICAgIHcgPSBsaW5rYWdlX3dhcm5pbmc7CisgICAgbGlua2FnZV93YXJuaW5nID0gMTsKKyAgICBwdGhyZWFkX211dGV4X3VubG9jaygmbGlua2FnZV9tdXRleCk7CisKKyAgICBpZiAoIXcgJiYgIWdldGVudigiQVZBSElfQ09NUEFUX05PV0FSTiIpKSB7CisgICAgICAgIGF2YWhpX3dhcm4oIlRoZSBwcm9ncmFtICclcycgdXNlcyB0aGUgIkNPTVBBVF9MQVlFUiIgY29tcGF0aWJpbGl0eSBsYXllciBvZiBBdmFoaS4iLCBhdmFoaV9leGVfbmFtZSgpKTsKKyAgICAgICAgYXZhaGlfd2FybigiUGxlYXNlIGZpeCB5b3VyIGFwcGxpY2F0aW9uIHRvIHVzZSB0aGUgbmF0aXZlIEFQSSBvZiBBdmFoaSEiKTsKKyAgICAgICAgYXZhaGlfd2FybigiRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIDxodHRwOi8vMHBvaW50ZXIuZGUvYXZhaGktY29tcGF0P3M9IkNHSV9TVUJTWVNURU0iJmU9JXM+IiwgYXZhaGlfZXhlX25hbWUoKSk7CisgICAgfQorfQorCit2b2lkIGF2YWhpX3dhcm5fdW5zdXBwb3J0ZWQoY29uc3QgY2hhciAqZnVuY3Rpb24pIHsKKyAgICBhdmFoaV93YXJuKCJUaGUgcHJvZ3JhbSAnJXMnIGNhbGxlZCAnJXMoKScgd2hpY2ggaXMgbm90IHN1cHBvcnRlZCAob3Igb25seSBzdXBwb3J0ZWQgcGFydGlhbGx5KSBpbiB0aGUgIkNPTVBBVF9MQVlFUiIgY29tcGF0aWJpbGl0eSBsYXllciBvZiBBdmFoaS4iLCBhdmFoaV9leGVfbmFtZSgpLCBmdW5jdGlvbik7CisgICAgYXZhaGlfd2FybigiUGxlYXNlIGZpeCB5b3VyIGFwcGxpY2F0aW9uIHRvIHVzZSB0aGUgbmF0aXZlIEFQSSBvZiBBdmFoaSEiKTsKKyAgICBhdmFoaV93YXJuKCJGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgPGh0dHA6Ly8wcG9pbnRlci5kZS9hdmFoaS1jb21wYXQ/cz0iQ0dJX1NVQlNZU1RFTSImZT0lcyZmPSVzPiIsIGF2YWhpX2V4ZV9uYW1lKCksIGZ1bmN0aW9uKTsKK30KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtbGliZG5zX3NkL3dhcm4uaCBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb21wYXQtbGliZG5zX3NkL3dhcm4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYThjMmJhCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvbXBhdC1saWJkbnNfc2Qvd2Fybi5oCkBAIC0wLDAgKzEsMzYgQEAKKyNpZm5kZWYgZm9vd2Fybmhmb28KKyNkZWZpbmUgZm9vd2Fybmhmb28KKworLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisvKiBUaGlzIHJvdXRpbmUgd29ya3Mgb24gTGludXggb25seSwgc28gZG9uJ3QgcmVseSBvbiBpdCAqLworY29uc3QgY2hhciAqYXZhaGlfZXhlX25hbWUodm9pZCk7CisKK3ZvaWQgYXZhaGlfd2Fybl91bnN1cHBvcnRlZChjb25zdCBjaGFyICpmdW5jdGlvbik7CisKK3ZvaWQgYXZhaGlfd2Fybl9saW5rYWdlKHZvaWQpOworCit2b2lkIGF2YWhpX3dhcm4oY29uc3QgY2hhciAqZm10LCAuLi4pOworCisjZGVmaW5lIEFWQUhJX1dBUk5fTElOS0FHRSBkbyB7IGF2YWhpX3dhcm5fbGlua2FnZSgpOyB9IHdoaWxlKDApCisjZGVmaW5lIEFWQUhJX1dBUk5fVU5TVVBQT1JURUQgZG8geyBhdmFoaV93YXJuX2xpbmthZ2UoKTsgYXZhaGlfd2Fybl91bnN1cHBvcnRlZChfX0ZVTkNUSU9OX18pOyB9IHdoaWxlKDApCisjZGVmaW5lIEFWQUhJX1dBUk5fVU5TVVBQT1JURURfQUJPUlQgZG8geyBBVkFISV9XQVJOX1VOU1VQUE9SVEVEOyBhYm9ydCgpOyB9IHdoaWxlKDApCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUucGMuaW4gYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS5wYy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjQ5MWI0Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUucGMuaW4KQEAgLTAsMCArMSwxMCBAQAorcHJlZml4PUBwcmVmaXhACitleGVjX3ByZWZpeD0ke3ByZWZpeH0KK2xpYmRpcj1AbGliZGlyQAoraW5jbHVkZWRpcj0ke3ByZWZpeH0vaW5jbHVkZQorCitOYW1lOiBhdmFoaS1jb3JlCitEZXNjcmlwdGlvbjogQXZhaGkgTXVsdGljYXN0IEROUyBSZXNwb25kZXIgKEVtYmVkZGFibGUgU3RhY2spCitWZXJzaW9uOiBAUEFDS0FHRV9WRVJTSU9OQAorTGliczogLUwke2xpYmRpcn0gLWxhdmFoaS1jb21tb24gLWxhdmFoaS1jb3JlCitDZmxhZ3M6IC1EX1JFRU5UUkFOVCAtSSR7aW5jbHVkZWRpcn0KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL01ha2VmaWxlLmFtIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYwOTU5NgotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMTczIEBACisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorIworIyBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworIyBVU0EuCisKK0FNX0NGTEFHUz0tSSQodG9wX3NyY2RpcikKKworIyBUaGlzIGNvb2wgZGVidWcgdHJhcCB3b3JrcyBvbiBpMzg2L2djYyBvbmx5CitBTV9DRkxBR1MrPSctRERFQlVHX1RSQVA9X19hc21fXygiaW50ICQkMyIpJworCithdmFoaWluY2x1ZGVkaXI9JChpbmNsdWRlZGlyKS9hdmFoaS1jb3JlCisKK2F2YWhpaW5jbHVkZV9IRUFERVJTID0gXAorCWNvcmUuaCBcCisJbG9nLmggXAorCXJyLmggXAorCXB1Ymxpc2guaCBcCisJbG9va3VwLmgKKworbGliX0xUTElCUkFSSUVTID0gXAorCWxpYmF2YWhpLWNvcmUubGEKKworaWYgRU5BQkxFX1RFU1RTCitub2luc3RfUFJPR1JBTVMgPSBcCisJcHJpb3EtdGVzdCBcCisJYXZhaGktdGVzdCBcCisJY29uZm9ybWFuY2UtdGVzdCBcCisJYXZhaGktcmVmbGVjdG9yIFwKKwlkbnMtdGVzdCBcCisJZG5zLXNwaW4tdGVzdCBcCisJdGltZWV2ZW50cS10ZXN0IFwKKwloYXNobWFwLXRlc3QgXAorCXF1ZXJpZXItdGVzdCBcCisJdXBkYXRlLXRlc3QKKworVEVTVFMgPSBcCisJZG5zLXNwaW4tdGVzdCBcCisJZG5zLXRlc3QgXAorCWhhc2htYXAtdGVzdAorZW5kaWYKKworbGliYXZhaGlfY29yZV9sYV9TT1VSQ0VTID0gXAorCXRpbWVldmVudHEuYyB0aW1lZXZlbnRxLmhcCisJaWZhY2UuYyBpZmFjZS5oIFwKKwlzZXJ2ZXIuYyBpbnRlcm5hbC5oIGVudHJ5LmMgXAorCXByaW9xLmMgcHJpb3EuaCBcCisJY2FjaGUuYyBjYWNoZS5oIFwKKwlzb2NrZXQuYyBzb2NrZXQuaCBcCisJcmVzcG9uc2Utc2NoZWQuYyByZXNwb25zZS1zY2hlZC5oIFwKKwlxdWVyeS1zY2hlZC5jIHF1ZXJ5LXNjaGVkLmggXAorCXByb2JlLXNjaGVkLmMgcHJvYmUtc2NoZWQuaCBcCisJYW5ub3VuY2UuYyBhbm5vdW5jZS5oIFwKKwlicm93c2UuYyBicm93c2UuaCBcCisJcnJsaXN0LmMgcnJsaXN0LmggXAorCXJlc29sdmUtaG9zdC1uYW1lLmMgXAorCXJlc29sdmUtYWRkcmVzcy5jIFwKKwlicm93c2UtZG9tYWluLmMgXAorCWJyb3dzZS1zZXJ2aWNlLXR5cGUuYyBcCisJYnJvd3NlLXNlcnZpY2UuYyBcCisJcmVzb2x2ZS1zZXJ2aWNlLmMgXAorCWRucy5jIGRucy5oIFwKKwlyci5jIHJyLmggcnItdXRpbC5oIFwKKwljb3JlLmggbG9va3VwLmggcHVibGlzaC5oIFwKKwlsb2cuYyBsb2cuaCBcCisJYnJvd3NlLWRucy1zZXJ2ZXIuYyBcCisJZmR1dGlsLmggZmR1dGlsLmMgXAorCXV0aWwuYyB1dGlsLmggXAorCWhhc2htYXAuYyBoYXNobWFwLmggXAorCXdpZGUtYXJlYS5jIHdpZGUtYXJlYS5oIFwKKwltdWx0aWNhc3QtbG9va3VwLmMgbXVsdGljYXN0LWxvb2t1cC5oIFwKKwlxdWVyaWVyLmMgcXVlcmllci5oIFwKKwlhZGRyLXV0aWwuaCBhZGRyLXV0aWwuYyBcCisJZG9tYWluLXV0aWwuaCBkb21haW4tdXRpbC5jIFwKKwlkbnMtc3J2LXJyLmgKKworaWYgSEFWRV9ORVRMSU5LCitsaWJhdmFoaV9jb3JlX2xhX1NPVVJDRVMgKz0gXAorICAgICAgIGlmYWNlLWxpbnV4LmMgaWZhY2UtbGludXguaCBcCisgICAgICAgbmV0bGluay5jIG5ldGxpbmsuaAorZWxzZQoraWYgSEFWRV9QRl9ST1VURQorbGliYXZhaGlfY29yZV9sYV9TT1VSQ0VTICs9IFwKKwlpZmFjZS1wZnJvdXRlLmMgaWZhY2UtcGZyb3V0ZS5oCitlbHNlCitsaWJhdmFoaV9jb3JlX2xhX1NPVVJDRVMgKz0gXAorCWlmYWNlLW5vbmUuYworZW5kaWYKK2VuZGlmCisKK2xpYmF2YWhpX2NvcmVfbGFfQ0ZMQUdTID0gJChBTV9DRkxBR1MpCitsaWJhdmFoaV9jb3JlX2xhX0xJQkFERCA9ICQoQU1fTERBREQpIC4uL2F2YWhpLWNvbW1vbi9saWJhdmFoaS1jb21tb24ubGEKK2xpYmF2YWhpX2NvcmVfbGFfTERGTEFHUyA9ICQoQU1fTERGTEFHUykgIC12ZXJzaW9uLWluZm8gJChMSUJBVkFISV9DT1JFX1ZFUlNJT05fSU5GTykKKworcHJpb3FfdGVzdF9TT1VSQ0VTID0gXAorCXByaW9xLXRlc3QuYyAgXAorCXByaW9xLmMgcHJpb3EuaAorcHJpb3FfdGVzdF9DRkxBR1MgPSAkKEFNX0NGTEFHUykKK3ByaW9xX3Rlc3RfTERBREQgPSAkKEFNX0xEQUREKSAuLi9hdmFoaS1jb21tb24vbGliYXZhaGktY29tbW9uLmxhCisKK2F2YWhpX3Rlc3RfU09VUkNFUyA9IFwKKwlhdmFoaS10ZXN0LmMKK2F2YWhpX3Rlc3RfQ0ZMQUdTID0gJChBTV9DRkxBR1MpCithdmFoaV90ZXN0X0xEQUREID0gJChBTV9MREFERCkgLi4vYXZhaGktY29tbW9uL2xpYmF2YWhpLWNvbW1vbi5sYSBsaWJhdmFoaS1jb3JlLmxhCisKK3VwZGF0ZV90ZXN0X1NPVVJDRVMgPSBcCisJdXBkYXRlLXRlc3QuYwordXBkYXRlX3Rlc3RfQ0ZMQUdTID0gJChBTV9DRkxBR1MpCit1cGRhdGVfdGVzdF9MREFERCA9ICQoQU1fTERBREQpIC4uL2F2YWhpLWNvbW1vbi9saWJhdmFoaS1jb21tb24ubGEgbGliYXZhaGktY29yZS5sYQorCitxdWVyaWVyX3Rlc3RfU09VUkNFUyA9IFwKKwlxdWVyaWVyLXRlc3QuYworcXVlcmllcl90ZXN0X0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKQorcXVlcmllcl90ZXN0X0xEQUREID0gJChBTV9MREFERCkgLi4vYXZhaGktY29tbW9uL2xpYmF2YWhpLWNvbW1vbi5sYSBsaWJhdmFoaS1jb3JlLmxhCisKK2NvbmZvcm1hbmNlX3Rlc3RfU09VUkNFUyA9IFwKKwljb25mb3JtYW5jZS10ZXN0LmMKK2NvbmZvcm1hbmNlX3Rlc3RfQ0ZMQUdTID0gJChBTV9DRkxBR1MpCitjb25mb3JtYW5jZV90ZXN0X0xEQUREID0gJChBTV9MREFERCkgLi4vYXZhaGktY29tbW9uL2xpYmF2YWhpLWNvbW1vbi5sYSBsaWJhdmFoaS1jb3JlLmxhCisKK2F2YWhpX3JlZmxlY3Rvcl9TT1VSQ0VTID0gXAorCWF2YWhpLXJlZmxlY3Rvci5jCithdmFoaV9yZWZsZWN0b3JfQ0ZMQUdTID0gJChBTV9DRkxBR1MpCithdmFoaV9yZWZsZWN0b3JfTERBREQgPSAkKEFNX0xEQUREKSAuLi9hdmFoaS1jb21tb24vbGliYXZhaGktY29tbW9uLmxhIGxpYmF2YWhpLWNvcmUubGEKKworZG5zX3Rlc3RfU09VUkNFUyA9IFwKKwlkbnMuYyBkbnMuaCBcCisJZG5zLXRlc3QuYyBcCisJbG9nLmMgbG9nLmggXAorCXV0aWwuYyB1dGlsLmggXAorCXJyLmMgcnIuaCBcCisJaGFzaG1hcC5jIGhhc2htYXAuaCBcCisJZG9tYWluLXV0aWwuYyBkb21haW4tdXRpbC5oIFwKKwlhZGRyLXV0aWwuYyBhZGRyLXV0aWwuaAorZG5zX3Rlc3RfQ0ZMQUdTID0gJChBTV9DRkxBR1MpCitkbnNfdGVzdF9MREFERCA9ICQoQU1fTERBREQpIC4uL2F2YWhpLWNvbW1vbi9saWJhdmFoaS1jb21tb24ubGEKKworZG5zX3NwaW5fdGVzdF9TT1VSQ0VTID0gXAorCWRucy1zcGluLXRlc3QuYworZG5zX3NwaW5fdGVzdF9DRkxBR1MgPSAkKEFNX0NGTEFHUykKK2Ruc19zcGluX3Rlc3RfTERBREQgPSAkKEFNX0xEQUREKSBsaWJhdmFoaS1jb3JlLmxhCisKK3RpbWVldmVudHFfdGVzdF9TT1VSQ0VTID0gXAorCXRpbWVldmVudHEtdGVzdC5jIFwKKwl0aW1lZXZlbnRxLmggdGltZWV2ZW50cS5jIFwKKwlwcmlvcS5oIHByaW9xLmMgXAorCWxvZy5jIGxvZy5oCit0aW1lZXZlbnRxX3Rlc3RfQ0ZMQUdTID0gJChBTV9DRkxBR1MpCit0aW1lZXZlbnRxX3Rlc3RfTERBREQgPSAkKEFNX0xEQUREKSAuLi9hdmFoaS1jb21tb24vbGliYXZhaGktY29tbW9uLmxhCisKK2hhc2htYXBfdGVzdF9TT1VSQ0VTID0gXAorCWhhc2htYXAtdGVzdC5jIFwKKwloYXNobWFwLmggaGFzaG1hcC5jIFwKKwl1dGlsLmggdXRpbC5jCitoYXNobWFwX3Rlc3RfQ0ZMQUdTID0gJChBTV9DRkxBR1MpCitoYXNobWFwX3Rlc3RfTERBREQgPSAkKEFNX0xEQUREKSAuLi9hdmFoaS1jb21tb24vbGliYXZhaGktY29tbW9uLmxhCisKK3ZhbGdyaW5kOiBhdmFoaS10ZXN0CisJbGlidG9vbCAtLW1vZGU9ZXhlY3V0ZSB2YWxncmluZCAuL2F2YWhpLXRlc3QKKworZ2RiOiBhdmFoaS10ZXN0CisJbGlidG9vbCAtLW1vZGU9ZXhlY3V0ZSBnZGIgLi9hdmFoaS10ZXN0CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9NYWtlZmlsZS5pbiBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmNTZkNjEKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDE3MzMgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEuMyBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKyMKKyMgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyMgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyMgVVNBLgorCisKKworVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorQEVOQUJMRV9URVNUU19UUlVFQG5vaW5zdF9QUk9HUkFNUyA9IHByaW9xLXRlc3QkKEVYRUVYVCkgXAorQEVOQUJMRV9URVNUU19UUlVFQAlhdmFoaS10ZXN0JChFWEVFWFQpIFwKK0BFTkFCTEVfVEVTVFNfVFJVRUAJY29uZm9ybWFuY2UtdGVzdCQoRVhFRVhUKSBcCitARU5BQkxFX1RFU1RTX1RSVUVACWF2YWhpLXJlZmxlY3RvciQoRVhFRVhUKSBkbnMtdGVzdCQoRVhFRVhUKSBcCitARU5BQkxFX1RFU1RTX1RSVUVACWRucy1zcGluLXRlc3QkKEVYRUVYVCkgXAorQEVOQUJMRV9URVNUU19UUlVFQAl0aW1lZXZlbnRxLXRlc3QkKEVYRUVYVCkgXAorQEVOQUJMRV9URVNUU19UUlVFQAloYXNobWFwLXRlc3QkKEVYRUVYVCkgcXVlcmllci10ZXN0JChFWEVFWFQpIFwKK0BFTkFCTEVfVEVTVFNfVFJVRUAJdXBkYXRlLXRlc3QkKEVYRUVYVCkKK0BFTkFCTEVfVEVTVFNfVFJVRUBURVNUUyA9IGRucy1zcGluLXRlc3QkKEVYRUVYVCkgZG5zLXRlc3QkKEVYRUVYVCkgXAorQEVOQUJMRV9URVNUU19UUlVFQAloYXNobWFwLXRlc3QkKEVYRUVYVCkKK0BIQVZFX05FVExJTktfVFJVRUBhbV9fYXBwZW5kXzEgPSBcCitASEFWRV9ORVRMSU5LX1RSVUVAICAgICAgIGlmYWNlLWxpbnV4LmMgaWZhY2UtbGludXguaCBcCitASEFWRV9ORVRMSU5LX1RSVUVAICAgICAgIG5ldGxpbmsuYyBuZXRsaW5rLmgKKworQEhBVkVfTkVUTElOS19GQUxTRUBASEFWRV9QRl9ST1VURV9UUlVFQGFtX19hcHBlbmRfMiA9IFwKK0BIQVZFX05FVExJTktfRkFMU0VAQEhBVkVfUEZfUk9VVEVfVFJVRUAJaWZhY2UtcGZyb3V0ZS5jIGlmYWNlLXBmcm91dGUuaAorCitASEFWRV9ORVRMSU5LX0ZBTFNFQEBIQVZFX1BGX1JPVVRFX0ZBTFNFQGFtX19hcHBlbmRfMyA9IFwKK0BIQVZFX05FVExJTktfRkFMU0VAQEhBVkVfUEZfUk9VVEVfRkFMU0VACWlmYWNlLW5vbmUuYworCitzdWJkaXIgPSBhdmFoaS1jb3JlCitESVNUX0NPTU1PTiA9ICQoYXZhaGlpbmNsdWRlX0hFQURFUlMpICQoc3JjZGlyKS9NYWtlZmlsZS5hbSBcCisJJChzcmNkaXIpL01ha2VmaWxlLmluCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vYWN4X3B0aHJlYWQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2djY19zdGFja19wcm90ZWN0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9nY2NfdmlzaWJpbGl0eS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vaW50bHRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2ludHJvc3BlY3Rpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2x0b3B0aW9ucy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHR2ZXJzaW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbmxzLm00ICQodG9wX3NyY2RpcikvY29tbW9uL3B5dGhvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9hY2luY2x1ZGUubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vZG94eWdlbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7CithbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAorICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCisgICAgKikgZj0kJHA7OyBcCisgIGVzYWM7CithbV9fc3RyaXBfZGlyID0gZj1gZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7CithbV9faW5zdGFsbF9tYXggPSA0MAorYW1fX25vYmFzZV9zdHJpcF9zZXR1cCA9IFwKKyAgc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYAorYW1fX25vYmFzZV9zdHJpcCA9IFwKKyAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkIC1lICJzfCQkc3JjZGlyc3RyaXAvfHwiCithbV9fbm9iYXNlX2xpc3QgPSAkKGFtX19ub2Jhc2Vfc3RyaXBfc2V0dXApOyBcCisgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCisgIHNlZCAic3wgJCRzcmNkaXJzdHJpcC98IHw7IicgLyAuKlwvLyFzLyAuKi8gLi87IHMsXCggLipcKS9bXi9dKiQkLFwxLCcgfCBcCisgICQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiIgfSB7IGZpbGVzWyQkMl0gPSBmaWxlc1skJDJdICIgIiAkJDE7IFwKKyAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCisgICAgICB7IHByaW50ICQkMiwgZmlsZXNbJCQyXTsgblskJDJdID0gMDsgZmlsZXNbJCQyXSA9ICIiIH0gfSBcCisgICAgRU5EIHsgZm9yIChkaXIgaW4gZmlsZXMpIHByaW50IGRpciwgZmlsZXNbZGlyXSB9JworYW1fX2Jhc2VfbGlzdCA9IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJyB8IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJworYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpciA9IHsgXAorICB0ZXN0IC16ICIkJGZpbGVzIiBcCisgICAgfHwgeyB0ZXN0ICEgLWQgIiQkZGlyIiAmJiB0ZXN0ICEgLWYgIiQkZGlyIiAmJiB0ZXN0ICEgLXIgIiQkZGlyIjsgfSBcCisgICAgfHwgeyBlY2hvICIgKCBjZCAnJCRkaXInICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAorICAgICAgICAgJChhbV9fY2QpICIkJGRpciIgJiYgcm0gLWYgJCRmaWxlczsgfTsgXAorICB9CithbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQobGliZGlyKSIgIiQoREVTVERJUikkKGF2YWhpaW5jbHVkZWRpcikiCitMVExJQlJBUklFUyA9ICQobGliX0xUTElCUkFSSUVTKQorbGliYXZhaGlfY29yZV9sYV9ERVBFTkRFTkNJRVMgPSAuLi9hdmFoaS1jb21tb24vbGliYXZhaGktY29tbW9uLmxhCithbV9fbGliYXZhaGlfY29yZV9sYV9TT1VSQ0VTX0RJU1QgPSB0aW1lZXZlbnRxLmMgdGltZWV2ZW50cS5oIGlmYWNlLmMgXAorCWlmYWNlLmggc2VydmVyLmMgaW50ZXJuYWwuaCBlbnRyeS5jIHByaW9xLmMgcHJpb3EuaCBjYWNoZS5jIFwKKwljYWNoZS5oIHNvY2tldC5jIHNvY2tldC5oIHJlc3BvbnNlLXNjaGVkLmMgcmVzcG9uc2Utc2NoZWQuaCBcCisJcXVlcnktc2NoZWQuYyBxdWVyeS1zY2hlZC5oIHByb2JlLXNjaGVkLmMgcHJvYmUtc2NoZWQuaCBcCisJYW5ub3VuY2UuYyBhbm5vdW5jZS5oIGJyb3dzZS5jIGJyb3dzZS5oIHJybGlzdC5jIHJybGlzdC5oIFwKKwlyZXNvbHZlLWhvc3QtbmFtZS5jIHJlc29sdmUtYWRkcmVzcy5jIGJyb3dzZS1kb21haW4uYyBcCisJYnJvd3NlLXNlcnZpY2UtdHlwZS5jIGJyb3dzZS1zZXJ2aWNlLmMgcmVzb2x2ZS1zZXJ2aWNlLmMgZG5zLmMgXAorCWRucy5oIHJyLmMgcnIuaCByci11dGlsLmggY29yZS5oIGxvb2t1cC5oIHB1Ymxpc2guaCBsb2cuYyBcCisJbG9nLmggYnJvd3NlLWRucy1zZXJ2ZXIuYyBmZHV0aWwuaCBmZHV0aWwuYyB1dGlsLmMgdXRpbC5oIFwKKwloYXNobWFwLmMgaGFzaG1hcC5oIHdpZGUtYXJlYS5jIHdpZGUtYXJlYS5oIG11bHRpY2FzdC1sb29rdXAuYyBcCisJbXVsdGljYXN0LWxvb2t1cC5oIHF1ZXJpZXIuYyBxdWVyaWVyLmggYWRkci11dGlsLmggYWRkci11dGlsLmMgXAorCWRvbWFpbi11dGlsLmggZG9tYWluLXV0aWwuYyBkbnMtc3J2LXJyLmggaWZhY2UtbGludXguYyBcCisJaWZhY2UtbGludXguaCBuZXRsaW5rLmMgbmV0bGluay5oIGlmYWNlLXBmcm91dGUuYyBcCisJaWZhY2UtcGZyb3V0ZS5oIGlmYWNlLW5vbmUuYworQEhBVkVfTkVUTElOS19UUlVFQGFtX19vYmplY3RzXzEgPSBsaWJhdmFoaV9jb3JlX2xhLWlmYWNlLWxpbnV4LmxvIFwKK0BIQVZFX05FVExJTktfVFJVRUAJbGliYXZhaGlfY29yZV9sYS1uZXRsaW5rLmxvCitASEFWRV9ORVRMSU5LX0ZBTFNFQEBIQVZFX1BGX1JPVVRFX1RSVUVAYW1fX29iamVjdHNfMiA9IGxpYmF2YWhpX2NvcmVfbGEtaWZhY2UtcGZyb3V0ZS5sbworQEhBVkVfTkVUTElOS19GQUxTRUBASEFWRV9QRl9ST1VURV9GQUxTRUBhbV9fb2JqZWN0c18zID0gbGliYXZhaGlfY29yZV9sYS1pZmFjZS1ub25lLmxvCithbV9saWJhdmFoaV9jb3JlX2xhX09CSkVDVFMgPSBsaWJhdmFoaV9jb3JlX2xhLXRpbWVldmVudHEubG8gXAorCWxpYmF2YWhpX2NvcmVfbGEtaWZhY2UubG8gbGliYXZhaGlfY29yZV9sYS1zZXJ2ZXIubG8gXAorCWxpYmF2YWhpX2NvcmVfbGEtZW50cnkubG8gbGliYXZhaGlfY29yZV9sYS1wcmlvcS5sbyBcCisJbGliYXZhaGlfY29yZV9sYS1jYWNoZS5sbyBsaWJhdmFoaV9jb3JlX2xhLXNvY2tldC5sbyBcCisJbGliYXZhaGlfY29yZV9sYS1yZXNwb25zZS1zY2hlZC5sbyBcCisJbGliYXZhaGlfY29yZV9sYS1xdWVyeS1zY2hlZC5sbyBcCisJbGliYXZhaGlfY29yZV9sYS1wcm9iZS1zY2hlZC5sbyBsaWJhdmFoaV9jb3JlX2xhLWFubm91bmNlLmxvIFwKKwlsaWJhdmFoaV9jb3JlX2xhLWJyb3dzZS5sbyBsaWJhdmFoaV9jb3JlX2xhLXJybGlzdC5sbyBcCisJbGliYXZhaGlfY29yZV9sYS1yZXNvbHZlLWhvc3QtbmFtZS5sbyBcCisJbGliYXZhaGlfY29yZV9sYS1yZXNvbHZlLWFkZHJlc3MubG8gXAorCWxpYmF2YWhpX2NvcmVfbGEtYnJvd3NlLWRvbWFpbi5sbyBcCisJbGliYXZhaGlfY29yZV9sYS1icm93c2Utc2VydmljZS10eXBlLmxvIFwKKwlsaWJhdmFoaV9jb3JlX2xhLWJyb3dzZS1zZXJ2aWNlLmxvIFwKKwlsaWJhdmFoaV9jb3JlX2xhLXJlc29sdmUtc2VydmljZS5sbyBsaWJhdmFoaV9jb3JlX2xhLWRucy5sbyBcCisJbGliYXZhaGlfY29yZV9sYS1yci5sbyBsaWJhdmFoaV9jb3JlX2xhLWxvZy5sbyBcCisJbGliYXZhaGlfY29yZV9sYS1icm93c2UtZG5zLXNlcnZlci5sbyBcCisJbGliYXZhaGlfY29yZV9sYS1mZHV0aWwubG8gbGliYXZhaGlfY29yZV9sYS11dGlsLmxvIFwKKwlsaWJhdmFoaV9jb3JlX2xhLWhhc2htYXAubG8gbGliYXZhaGlfY29yZV9sYS13aWRlLWFyZWEubG8gXAorCWxpYmF2YWhpX2NvcmVfbGEtbXVsdGljYXN0LWxvb2t1cC5sbyBcCisJbGliYXZhaGlfY29yZV9sYS1xdWVyaWVyLmxvIGxpYmF2YWhpX2NvcmVfbGEtYWRkci11dGlsLmxvIFwKKwlsaWJhdmFoaV9jb3JlX2xhLWRvbWFpbi11dGlsLmxvICQoYW1fX29iamVjdHNfMSkgXAorCSQoYW1fX29iamVjdHNfMikgJChhbV9fb2JqZWN0c18zKQorbGliYXZhaGlfY29yZV9sYV9PQkpFQ1RTID0gJChhbV9saWJhdmFoaV9jb3JlX2xhX09CSkVDVFMpCitBTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCithbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfbHRfMCA9IC0tc2lsZW50CitsaWJhdmFoaV9jb3JlX2xhX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAorCSQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSBcCisJJChsaWJhdmFoaV9jb3JlX2xhX0NGTEFHUykgJChDRkxBR1MpIFwKKwkkKGxpYmF2YWhpX2NvcmVfbGFfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorUFJPR1JBTVMgPSAkKG5vaW5zdF9QUk9HUkFNUykKK2FtX2F2YWhpX3JlZmxlY3Rvcl9PQkpFQ1RTID0gIFwKKwlhdmFoaV9yZWZsZWN0b3ItYXZhaGktcmVmbGVjdG9yLiQoT0JKRVhUKQorYXZhaGlfcmVmbGVjdG9yX09CSkVDVFMgPSAkKGFtX2F2YWhpX3JlZmxlY3Rvcl9PQkpFQ1RTKQorYXZhaGlfcmVmbGVjdG9yX0RFUEVOREVOQ0lFUyA9IC4uL2F2YWhpLWNvbW1vbi9saWJhdmFoaS1jb21tb24ubGEgXAorCWxpYmF2YWhpLWNvcmUubGEKK2F2YWhpX3JlZmxlY3Rvcl9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKKwkkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgXAorCSQoYXZhaGlfcmVmbGVjdG9yX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSBcCisJLW8gJEAKK2FtX2F2YWhpX3Rlc3RfT0JKRUNUUyA9IGF2YWhpX3Rlc3QtYXZhaGktdGVzdC4kKE9CSkVYVCkKK2F2YWhpX3Rlc3RfT0JKRUNUUyA9ICQoYW1fYXZhaGlfdGVzdF9PQkpFQ1RTKQorYXZhaGlfdGVzdF9ERVBFTkRFTkNJRVMgPSAuLi9hdmFoaS1jb21tb24vbGliYXZhaGktY29tbW9uLmxhIFwKKwlsaWJhdmFoaS1jb3JlLmxhCithdmFoaV90ZXN0X0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKGF2YWhpX3Rlc3RfQ0ZMQUdTKSBcCisJJChDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorYW1fY29uZm9ybWFuY2VfdGVzdF9PQkpFQ1RTID0gIFwKKwljb25mb3JtYW5jZV90ZXN0LWNvbmZvcm1hbmNlLXRlc3QuJChPQkpFWFQpCitjb25mb3JtYW5jZV90ZXN0X09CSkVDVFMgPSAkKGFtX2NvbmZvcm1hbmNlX3Rlc3RfT0JKRUNUUykKK2NvbmZvcm1hbmNlX3Rlc3RfREVQRU5ERU5DSUVTID0gLi4vYXZhaGktY29tbW9uL2xpYmF2YWhpLWNvbW1vbi5sYSBcCisJbGliYXZhaGktY29yZS5sYQorY29uZm9ybWFuY2VfdGVzdF9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKKwkkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgXAorCSQoY29uZm9ybWFuY2VfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgXAorCS1vICRACithbV9kbnNfc3Bpbl90ZXN0X09CSkVDVFMgPSBkbnNfc3Bpbl90ZXN0LWRucy1zcGluLXRlc3QuJChPQkpFWFQpCitkbnNfc3Bpbl90ZXN0X09CSkVDVFMgPSAkKGFtX2Ruc19zcGluX3Rlc3RfT0JKRUNUUykKK2Ruc19zcGluX3Rlc3RfREVQRU5ERU5DSUVTID0gbGliYXZhaGktY29yZS5sYQorZG5zX3NwaW5fdGVzdF9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChkbnNfc3Bpbl90ZXN0X0NGTEFHUykgXAorCSQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKK2FtX2Ruc190ZXN0X09CSkVDVFMgPSBkbnNfdGVzdC1kbnMuJChPQkpFWFQpIFwKKwlkbnNfdGVzdC1kbnMtdGVzdC4kKE9CSkVYVCkgZG5zX3Rlc3QtbG9nLiQoT0JKRVhUKSBcCisJZG5zX3Rlc3QtdXRpbC4kKE9CSkVYVCkgZG5zX3Rlc3QtcnIuJChPQkpFWFQpIFwKKwlkbnNfdGVzdC1oYXNobWFwLiQoT0JKRVhUKSBkbnNfdGVzdC1kb21haW4tdXRpbC4kKE9CSkVYVCkgXAorCWRuc190ZXN0LWFkZHItdXRpbC4kKE9CSkVYVCkKK2Ruc190ZXN0X09CSkVDVFMgPSAkKGFtX2Ruc190ZXN0X09CSkVDVFMpCitkbnNfdGVzdF9ERVBFTkRFTkNJRVMgPSAuLi9hdmFoaS1jb21tb24vbGliYXZhaGktY29tbW9uLmxhCitkbnNfdGVzdF9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChkbnNfdGVzdF9DRkxBR1MpIFwKKwkkKENGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACithbV9oYXNobWFwX3Rlc3RfT0JKRUNUUyA9IGhhc2htYXBfdGVzdC1oYXNobWFwLXRlc3QuJChPQkpFWFQpIFwKKwloYXNobWFwX3Rlc3QtaGFzaG1hcC4kKE9CSkVYVCkgaGFzaG1hcF90ZXN0LXV0aWwuJChPQkpFWFQpCitoYXNobWFwX3Rlc3RfT0JKRUNUUyA9ICQoYW1faGFzaG1hcF90ZXN0X09CSkVDVFMpCitoYXNobWFwX3Rlc3RfREVQRU5ERU5DSUVTID0gLi4vYXZhaGktY29tbW9uL2xpYmF2YWhpLWNvbW1vbi5sYQoraGFzaG1hcF90ZXN0X0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKGhhc2htYXBfdGVzdF9DRkxBR1MpIFwKKwkkKENGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACithbV9wcmlvcV90ZXN0X09CSkVDVFMgPSBwcmlvcV90ZXN0LXByaW9xLXRlc3QuJChPQkpFWFQpIFwKKwlwcmlvcV90ZXN0LXByaW9xLiQoT0JKRVhUKQorcHJpb3FfdGVzdF9PQkpFQ1RTID0gJChhbV9wcmlvcV90ZXN0X09CSkVDVFMpCitwcmlvcV90ZXN0X0RFUEVOREVOQ0lFUyA9IC4uL2F2YWhpLWNvbW1vbi9saWJhdmFoaS1jb21tb24ubGEKK3ByaW9xX3Rlc3RfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQocHJpb3FfdGVzdF9DRkxBR1MpIFwKKwkkKENGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACithbV9xdWVyaWVyX3Rlc3RfT0JKRUNUUyA9IHF1ZXJpZXJfdGVzdC1xdWVyaWVyLXRlc3QuJChPQkpFWFQpCitxdWVyaWVyX3Rlc3RfT0JKRUNUUyA9ICQoYW1fcXVlcmllcl90ZXN0X09CSkVDVFMpCitxdWVyaWVyX3Rlc3RfREVQRU5ERU5DSUVTID0gLi4vYXZhaGktY29tbW9uL2xpYmF2YWhpLWNvbW1vbi5sYSBcCisJbGliYXZhaGktY29yZS5sYQorcXVlcmllcl90ZXN0X0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKHF1ZXJpZXJfdGVzdF9DRkxBR1MpIFwKKwkkKENGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACithbV90aW1lZXZlbnRxX3Rlc3RfT0JKRUNUUyA9ICBcCisJdGltZWV2ZW50cV90ZXN0LXRpbWVldmVudHEtdGVzdC4kKE9CSkVYVCkgXAorCXRpbWVldmVudHFfdGVzdC10aW1lZXZlbnRxLiQoT0JKRVhUKSBcCisJdGltZWV2ZW50cV90ZXN0LXByaW9xLiQoT0JKRVhUKSB0aW1lZXZlbnRxX3Rlc3QtbG9nLiQoT0JKRVhUKQordGltZWV2ZW50cV90ZXN0X09CSkVDVFMgPSAkKGFtX3RpbWVldmVudHFfdGVzdF9PQkpFQ1RTKQordGltZWV2ZW50cV90ZXN0X0RFUEVOREVOQ0lFUyA9IC4uL2F2YWhpLWNvbW1vbi9saWJhdmFoaS1jb21tb24ubGEKK3RpbWVldmVudHFfdGVzdF9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKKwkkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgXAorCSQodGltZWV2ZW50cV90ZXN0X0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSBcCisJLW8gJEAKK2FtX3VwZGF0ZV90ZXN0X09CSkVDVFMgPSB1cGRhdGVfdGVzdC11cGRhdGUtdGVzdC4kKE9CSkVYVCkKK3VwZGF0ZV90ZXN0X09CSkVDVFMgPSAkKGFtX3VwZGF0ZV90ZXN0X09CSkVDVFMpCit1cGRhdGVfdGVzdF9ERVBFTkRFTkNJRVMgPSAuLi9hdmFoaS1jb21tb24vbGliYXZhaGktY29tbW9uLmxhIFwKKwlsaWJhdmFoaS1jb3JlLmxhCit1cGRhdGVfdGVzdF9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJCh1cGRhdGVfdGVzdF9DRkxBR1MpIFwKKwkkKENGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACitERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQorZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAorYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKK2FtX19tdiA9IG12IC1mCitDT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKKwkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitMVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCisJJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCisJJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfQEFNX1ZAKQorYW1fX3ZfQ0NfID0gJChhbV9fdl9DQ19AQU1fREVGQVVMVF9WQCkKK2FtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAiICRAOworQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQorYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKK2FtX192X2F0XzAgPSBACitDQ0xEID0gJChDQykKK0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKKwkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKK0FNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF9AQU1fVkApCithbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF9AQU1fREVGQVVMVF9WQCkKK2FtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICIgJEA7CitBTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKK2FtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKK2FtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgIiAkQDsKK1NPVVJDRVMgPSAkKGxpYmF2YWhpX2NvcmVfbGFfU09VUkNFUykgJChhdmFoaV9yZWZsZWN0b3JfU09VUkNFUykgXAorCSQoYXZhaGlfdGVzdF9TT1VSQ0VTKSAkKGNvbmZvcm1hbmNlX3Rlc3RfU09VUkNFUykgXAorCSQoZG5zX3NwaW5fdGVzdF9TT1VSQ0VTKSAkKGRuc190ZXN0X1NPVVJDRVMpIFwKKwkkKGhhc2htYXBfdGVzdF9TT1VSQ0VTKSAkKHByaW9xX3Rlc3RfU09VUkNFUykgXAorCSQocXVlcmllcl90ZXN0X1NPVVJDRVMpICQodGltZWV2ZW50cV90ZXN0X1NPVVJDRVMpIFwKKwkkKHVwZGF0ZV90ZXN0X1NPVVJDRVMpCitESVNUX1NPVVJDRVMgPSAkKGFtX19saWJhdmFoaV9jb3JlX2xhX1NPVVJDRVNfRElTVCkgXAorCSQoYXZhaGlfcmVmbGVjdG9yX1NPVVJDRVMpICQoYXZhaGlfdGVzdF9TT1VSQ0VTKSBcCisJJChjb25mb3JtYW5jZV90ZXN0X1NPVVJDRVMpICQoZG5zX3NwaW5fdGVzdF9TT1VSQ0VTKSBcCisJJChkbnNfdGVzdF9TT1VSQ0VTKSAkKGhhc2htYXBfdGVzdF9TT1VSQ0VTKSBcCisJJChwcmlvcV90ZXN0X1NPVVJDRVMpICQocXVlcmllcl90ZXN0X1NPVVJDRVMpIFwKKwkkKHRpbWVldmVudHFfdGVzdF9TT1VSQ0VTKSAkKHVwZGF0ZV90ZXN0X1NPVVJDRVMpCitIRUFERVJTID0gJChhdmFoaWluY2x1ZGVfSEVBREVSUykKK0VUQUdTID0gZXRhZ3MKK0NUQUdTID0gY3RhZ3MKK2FtX190dHlfY29sb3JzID0gXAorcmVkPTsgZ3JuPTsgbGduPTsgYmx1PTsgc3RkPQorRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FMTF9MSU5HVUFTID0gQEFMTF9MSU5HVUFTQAorQU1UQVIgPSBAQU1UQVJACitBTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKK0FSID0gQEFSQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FWQUhJX0FVVE9JUERfR1JPVVAgPSBAQVZBSElfQVVUT0lQRF9HUk9VUEAKK0FWQUhJX0FVVE9JUERfVVNFUiA9IEBBVkFISV9BVVRPSVBEX1VTRVJACitBVkFISV9HUk9VUCA9IEBBVkFISV9HUk9VUEAKK0FWQUhJX1BSSVZfQUNDRVNTX0dST1VQID0gQEFWQUhJX1BSSVZfQUNDRVNTX0dST1VQQAorQVZBSElfVVNFUiA9IEBBVkFISV9VU0VSQAorQVdLID0gQEFXS0AKK0NBVEFMT0dTID0gQENBVEFMT0dTQAorQ0FUT0JKRVhUID0gQENBVE9CSkVYVEAKK0NDID0gQENDQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RBVEFESVJOQU1FID0gQERBVEFESVJOQU1FQAorREJVU19DRkxBR1MgPSBAREJVU19DRkxBR1NACitEQlVTX0xJQlMgPSBAREJVU19MSUJTQAorREJVU19TWVNURU1fQlVTX0RFRkFVTFRfQUREUkVTUyA9IEBEQlVTX1NZU1RFTV9CVVNfREVGQVVMVF9BRERSRVNTQAorREJVU19TWVNfRElSID0gQERCVVNfU1lTX0RJUkAKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitETExUT09MID0gQERMTFRPT0xACitET1hZR0VOX1BBUEVSX1NJWkUgPSBARE9YWUdFTl9QQVBFUl9TSVpFQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitEWF9DT05GSUcgPSBARFhfQ09ORklHQAorRFhfRE9DRElSID0gQERYX0RPQ0RJUkAKK0RYX0RPVCA9IEBEWF9ET1RACitEWF9ET1hZR0VOID0gQERYX0RPWFlHRU5ACitEWF9EVklQUyA9IEBEWF9EVklQU0AKK0RYX0VHUkVQID0gQERYX0VHUkVQQAorRFhfRU5WID0gQERYX0VOVkAKK0RYX0ZMQUdfY2hpID0gQERYX0ZMQUdfY2hpQAorRFhfRkxBR19jaG0gPSBARFhfRkxBR19jaG1ACitEWF9GTEFHX2RvYyA9IEBEWF9GTEFHX2RvY0AKK0RYX0ZMQUdfZG90ID0gQERYX0ZMQUdfZG90QAorRFhfRkxBR19odG1sID0gQERYX0ZMQUdfaHRtbEAKK0RYX0ZMQUdfbWFuID0gQERYX0ZMQUdfbWFuQAorRFhfRkxBR19wZGYgPSBARFhfRkxBR19wZGZACitEWF9GTEFHX3BzID0gQERYX0ZMQUdfcHNACitEWF9GTEFHX3J0ZiA9IEBEWF9GTEFHX3J0ZkAKK0RYX0ZMQUdfeG1sID0gQERYX0ZMQUdfeG1sQAorRFhfSEhDID0gQERYX0hIQ0AKK0RYX0xBVEVYID0gQERYX0xBVEVYQAorRFhfTUFLRUlOREVYID0gQERYX01BS0VJTkRFWEAKK0RYX1BERkxBVEVYID0gQERYX1BERkxBVEVYQAorRFhfUEVSTCA9IEBEWF9QRVJMQAorRFhfUFJPSkVDVCA9IEBEWF9QUk9KRUNUQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFWEVFWFQgPSBARVhFRVhUQAorRkdSRVAgPSBARkdSRVBACitHQUNVVElMID0gQEdBQ1VUSUxACitHRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAorR0xJQjIwX0NGTEFHUyA9IEBHTElCMjBfQ0ZMQUdTQAorR0xJQjIwX0xJQlMgPSBAR0xJQjIwX0xJQlNACitHTU9GSUxFUyA9IEBHTU9GSUxFU0AKK0dNU0dGTVQgPSBAR01TR0ZNVEAKK0dPQkpFQ1RfQ0ZMQUdTID0gQEdPQkpFQ1RfQ0ZMQUdTQAorR09CSkVDVF9MSUJTID0gQEdPQkpFQ1RfTElCU0AKK0dSRVAgPSBAR1JFUEAKK0dUSzIwX0NGTEFHUyA9IEBHVEsyMF9DRkxBR1NACitHVEsyMF9MSUJTID0gQEdUSzIwX0xJQlNACitHVEszMF9DRkxBR1MgPSBAR1RLMzBfQ0ZMQUdTQAorR1RLMzBfTElCUyA9IEBHVEszMF9MSUJTQAorSE9XTF9DT01QQVRfVkVSU0lPTiA9IEBIT1dMX0NPTVBBVF9WRVJTSU9OQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitJTlNUT0JKRVhUID0gQElOU1RPQkpFWFRACitJTlRMTElCUyA9IEBJTlRMTElCU0AKK0lOVExUT09MX0VYVFJBQ1QgPSBASU5UTFRPT0xfRVhUUkFDVEAKK0lOVExUT09MX01FUkdFID0gQElOVExUT09MX01FUkdFQAorSU5UTFRPT0xfUEVSTCA9IEBJTlRMVE9PTF9QRVJMQAorSU5UTFRPT0xfVVBEQVRFID0gQElOVExUT09MX1VQREFURUAKK0lOVFJPU1BFQ1RJT05fQ0ZMQUdTID0gQElOVFJPU1BFQ1RJT05fQ0ZMQUdTQAorSU5UUk9TUEVDVElPTl9DT01QSUxFUiA9IEBJTlRST1NQRUNUSU9OX0NPTVBJTEVSQAorSU5UUk9TUEVDVElPTl9HRU5FUkFURSA9IEBJTlRST1NQRUNUSU9OX0dFTkVSQVRFQAorSU5UUk9TUEVDVElPTl9HSVJESVIgPSBASU5UUk9TUEVDVElPTl9HSVJESVJACitJTlRST1NQRUNUSU9OX0xJQlMgPSBASU5UUk9TUEVDVElPTl9MSUJTQAorSU5UUk9TUEVDVElPTl9NQUtFRklMRSA9IEBJTlRST1NQRUNUSU9OX01BS0VGSUxFQAorSU5UUk9TUEVDVElPTl9TQ0FOTkVSID0gQElOVFJPU1BFQ1RJT05fU0NBTk5FUkAKK0lOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUiA9IEBJTlRST1NQRUNUSU9OX1RZUEVMSUJESVJACitMRCA9IEBMREAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQkFWQUhJX0NMSUVOVF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ0xJRU5UX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPTU1PTl9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ09NTU9OX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPTVBBVF9IT1dMX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DT01QQVRfSE9XTF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9DT01QQVRfTElCRE5TX1NEX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DT01QQVRfTElCRE5TX1NEX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPUkVfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NPUkVfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfR0xJQl9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfR0xJQl9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9HT0JKRUNUX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9HT0JKRUNUX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX1FUM19WRVJTSU9OX0lORk8gPSBATElCQVZBSElfUVQzX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX1FUNF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfUVQ0X1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX1VJX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9VSV9WRVJTSU9OX0lORk9ACitMSUJEQUVNT05fQ0ZMQUdTID0gQExJQkRBRU1PTl9DRkxBR1NACitMSUJEQUVNT05fTElCUyA9IEBMSUJEQUVNT05fTElCU0AKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKK0xOX1MgPSBATE5fU0AKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKK01DUyA9IEBNQ1NACitNREFTU0VNQkxFUiA9IEBNREFTU0VNQkxFUkAKK01LRElSX1AgPSBATUtESVJfUEAKK01LSU5TVEFMTERJUlMgPSBATUtJTlNUQUxMRElSU0AKK01PQ19RVDMgPSBATU9DX1FUM0AKK01PQ19RVDQgPSBATU9DX1FUNEAKK01PTk9ET0NFUiA9IEBNT05PRE9DRVJACitNT05PRE9DX0NGTEFHUyA9IEBNT05PRE9DX0NGTEFHU0AKK01PTk9ET0NfRElSID0gQE1PTk9ET0NfRElSQAorTU9OT0RPQ19MSUJTID0gQE1PTk9ET0NfTElCU0AKK01TR0ZNVCA9IEBNU0dGTVRACitNU0dGTVRfT1BUUyA9IEBNU0dGTVRfT1BUU0AKK01TR01FUkdFID0gQE1TR01FUkdFQAorTk0gPSBATk1ACitOTUVESVQgPSBATk1FRElUQAorT0JKRFVNUCA9IEBPQkpEVU1QQAorT0JKRVhUID0gQE9CSkVYVEAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQS0dfQ09ORklHX0xJQkRJUiA9IEBQS0dfQ09ORklHX0xJQkRJUkAKK1BLR19DT05GSUdfUEFUSCA9IEBQS0dfQ09ORklHX1BBVEhACitQT0ZJTEVTID0gQFBPRklMRVNACitQT1NVQiA9IEBQT1NVQkAKK1BPX0lOX0RBVEFESVJfRkFMU0UgPSBAUE9fSU5fREFUQURJUl9GQUxTRUAKK1BPX0lOX0RBVEFESVJfVFJVRSA9IEBQT19JTl9EQVRBRElSX1RSVUVACitQVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACitQVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKK1BUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACitQWVRIT04gPSBAUFlUSE9OQAorUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKK1BZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACitQWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACitQWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKK1FUM19DRkxBR1MgPSBAUVQzX0NGTEFHU0AKK1FUM19MSUJTID0gQFFUM19MSUJTQAorUVQ0X0NGTEFHUyA9IEBRVDRfQ0ZMQUdTQAorUVQ0X0xJQlMgPSBAUVQ0X0xJQlNACitSQU5MSUIgPSBAUkFOTElCQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTVE9XID0gQFNUT1dACitTVFJJUCA9IEBTVFJJUEAKK1VTRV9OTFMgPSBAVVNFX05MU0AKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1ZJU0lCSUxJVFlfSElEREVOX0NGTEFHUyA9IEBWSVNJQklMSVRZX0hJRERFTl9DRkxBR1NACitYR0VUVEVYVCA9IEBYR0VUVEVYVEAKK1hNTF9DRkxBR1MgPSBAWE1MX0NGTEFHU0AKK1hNTF9MSUJTID0gQFhNTF9MSUJTQAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorYWNfY3RfQVIgPSBAYWNfY3RfQVJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithY3hfcHRocmVhZF9jb25maWcgPSBAYWN4X3B0aHJlYWRfY29uZmlnQAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACithdmFoaV9ydW50aW1lX2RpciA9IEBhdmFoaV9ydW50aW1lX2RpckAKK2F2YWhpX3NvY2tldCA9IEBhdmFoaV9zb2NrZXRACithdmFoaWxvY2FsZWRpciA9IEBhdmFoaWxvY2FsZWRpckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraGF2ZV9wa2dfY29uZmlnID0gQGhhdmVfcGtnX2NvbmZpZ0AKK2hhdmVfeG1sdG9tYW4gPSBAaGF2ZV94bWx0b21hbkAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitpbnRlcmZhY2VzZGlyID0gQGludGVyZmFjZXNkaXJACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKK3BrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitweWV4ZWNkaXIgPSBAcHlleGVjZGlyQAorcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3N5c3RlbWRzeXN0ZW11bml0ZGlyID0gQHN5c3RlbWRzeXN0ZW11bml0ZGlyQAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK3RvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKK3RvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACisKKyMgVGhpcyBjb29sIGRlYnVnIHRyYXAgd29ya3Mgb24gaTM4Ni9nY2Mgb25seQorQU1fQ0ZMQUdTID0gLUkkKHRvcF9zcmNkaXIpICctRERFQlVHX1RSQVA9X19hc21fXygiaW50ICQkMyIpJworYXZhaGlpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9hdmFoaS1jb3JlCithdmFoaWluY2x1ZGVfSEVBREVSUyA9IFwKKwljb3JlLmggXAorCWxvZy5oIFwKKwlyci5oIFwKKwlwdWJsaXNoLmggXAorCWxvb2t1cC5oCisKK2xpYl9MVExJQlJBUklFUyA9IFwKKwlsaWJhdmFoaS1jb3JlLmxhCisKK2xpYmF2YWhpX2NvcmVfbGFfU09VUkNFUyA9IHRpbWVldmVudHEuYyB0aW1lZXZlbnRxLmggaWZhY2UuYyBpZmFjZS5oIFwKKwlzZXJ2ZXIuYyBpbnRlcm5hbC5oIGVudHJ5LmMgcHJpb3EuYyBwcmlvcS5oIGNhY2hlLmMgY2FjaGUuaCBcCisJc29ja2V0LmMgc29ja2V0LmggcmVzcG9uc2Utc2NoZWQuYyByZXNwb25zZS1zY2hlZC5oIFwKKwlxdWVyeS1zY2hlZC5jIHF1ZXJ5LXNjaGVkLmggcHJvYmUtc2NoZWQuYyBwcm9iZS1zY2hlZC5oIFwKKwlhbm5vdW5jZS5jIGFubm91bmNlLmggYnJvd3NlLmMgYnJvd3NlLmggcnJsaXN0LmMgcnJsaXN0LmggXAorCXJlc29sdmUtaG9zdC1uYW1lLmMgcmVzb2x2ZS1hZGRyZXNzLmMgYnJvd3NlLWRvbWFpbi5jIFwKKwlicm93c2Utc2VydmljZS10eXBlLmMgYnJvd3NlLXNlcnZpY2UuYyByZXNvbHZlLXNlcnZpY2UuYyBkbnMuYyBcCisJZG5zLmggcnIuYyByci5oIHJyLXV0aWwuaCBjb3JlLmggbG9va3VwLmggcHVibGlzaC5oIGxvZy5jIFwKKwlsb2cuaCBicm93c2UtZG5zLXNlcnZlci5jIGZkdXRpbC5oIGZkdXRpbC5jIHV0aWwuYyB1dGlsLmggXAorCWhhc2htYXAuYyBoYXNobWFwLmggd2lkZS1hcmVhLmMgd2lkZS1hcmVhLmggbXVsdGljYXN0LWxvb2t1cC5jIFwKKwltdWx0aWNhc3QtbG9va3VwLmggcXVlcmllci5jIHF1ZXJpZXIuaCBhZGRyLXV0aWwuaCBhZGRyLXV0aWwuYyBcCisJZG9tYWluLXV0aWwuaCBkb21haW4tdXRpbC5jIGRucy1zcnYtcnIuaCAkKGFtX19hcHBlbmRfMSkgXAorCSQoYW1fX2FwcGVuZF8yKSAkKGFtX19hcHBlbmRfMykKK2xpYmF2YWhpX2NvcmVfbGFfQ0ZMQUdTID0gJChBTV9DRkxBR1MpCitsaWJhdmFoaV9jb3JlX2xhX0xJQkFERCA9ICQoQU1fTERBREQpIC4uL2F2YWhpLWNvbW1vbi9saWJhdmFoaS1jb21tb24ubGEKK2xpYmF2YWhpX2NvcmVfbGFfTERGTEFHUyA9ICQoQU1fTERGTEFHUykgIC12ZXJzaW9uLWluZm8gJChMSUJBVkFISV9DT1JFX1ZFUlNJT05fSU5GTykKK3ByaW9xX3Rlc3RfU09VUkNFUyA9IFwKKwlwcmlvcS10ZXN0LmMgIFwKKwlwcmlvcS5jIHByaW9xLmgKKworcHJpb3FfdGVzdF9DRkxBR1MgPSAkKEFNX0NGTEFHUykKK3ByaW9xX3Rlc3RfTERBREQgPSAkKEFNX0xEQUREKSAuLi9hdmFoaS1jb21tb24vbGliYXZhaGktY29tbW9uLmxhCithdmFoaV90ZXN0X1NPVVJDRVMgPSBcCisJYXZhaGktdGVzdC5jCisKK2F2YWhpX3Rlc3RfQ0ZMQUdTID0gJChBTV9DRkxBR1MpCithdmFoaV90ZXN0X0xEQUREID0gJChBTV9MREFERCkgLi4vYXZhaGktY29tbW9uL2xpYmF2YWhpLWNvbW1vbi5sYSBsaWJhdmFoaS1jb3JlLmxhCit1cGRhdGVfdGVzdF9TT1VSQ0VTID0gXAorCXVwZGF0ZS10ZXN0LmMKKwordXBkYXRlX3Rlc3RfQ0ZMQUdTID0gJChBTV9DRkxBR1MpCit1cGRhdGVfdGVzdF9MREFERCA9ICQoQU1fTERBREQpIC4uL2F2YWhpLWNvbW1vbi9saWJhdmFoaS1jb21tb24ubGEgbGliYXZhaGktY29yZS5sYQorcXVlcmllcl90ZXN0X1NPVVJDRVMgPSBcCisJcXVlcmllci10ZXN0LmMKKworcXVlcmllcl90ZXN0X0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKQorcXVlcmllcl90ZXN0X0xEQUREID0gJChBTV9MREFERCkgLi4vYXZhaGktY29tbW9uL2xpYmF2YWhpLWNvbW1vbi5sYSBsaWJhdmFoaS1jb3JlLmxhCitjb25mb3JtYW5jZV90ZXN0X1NPVVJDRVMgPSBcCisJY29uZm9ybWFuY2UtdGVzdC5jCisKK2NvbmZvcm1hbmNlX3Rlc3RfQ0ZMQUdTID0gJChBTV9DRkxBR1MpCitjb25mb3JtYW5jZV90ZXN0X0xEQUREID0gJChBTV9MREFERCkgLi4vYXZhaGktY29tbW9uL2xpYmF2YWhpLWNvbW1vbi5sYSBsaWJhdmFoaS1jb3JlLmxhCithdmFoaV9yZWZsZWN0b3JfU09VUkNFUyA9IFwKKwlhdmFoaS1yZWZsZWN0b3IuYworCithdmFoaV9yZWZsZWN0b3JfQ0ZMQUdTID0gJChBTV9DRkxBR1MpCithdmFoaV9yZWZsZWN0b3JfTERBREQgPSAkKEFNX0xEQUREKSAuLi9hdmFoaS1jb21tb24vbGliYXZhaGktY29tbW9uLmxhIGxpYmF2YWhpLWNvcmUubGEKK2Ruc190ZXN0X1NPVVJDRVMgPSBcCisJZG5zLmMgZG5zLmggXAorCWRucy10ZXN0LmMgXAorCWxvZy5jIGxvZy5oIFwKKwl1dGlsLmMgdXRpbC5oIFwKKwlyci5jIHJyLmggXAorCWhhc2htYXAuYyBoYXNobWFwLmggXAorCWRvbWFpbi11dGlsLmMgZG9tYWluLXV0aWwuaCBcCisJYWRkci11dGlsLmMgYWRkci11dGlsLmgKKworZG5zX3Rlc3RfQ0ZMQUdTID0gJChBTV9DRkxBR1MpCitkbnNfdGVzdF9MREFERCA9ICQoQU1fTERBREQpIC4uL2F2YWhpLWNvbW1vbi9saWJhdmFoaS1jb21tb24ubGEKK2Ruc19zcGluX3Rlc3RfU09VUkNFUyA9IFwKKwlkbnMtc3Bpbi10ZXN0LmMKKworZG5zX3NwaW5fdGVzdF9DRkxBR1MgPSAkKEFNX0NGTEFHUykKK2Ruc19zcGluX3Rlc3RfTERBREQgPSAkKEFNX0xEQUREKSBsaWJhdmFoaS1jb3JlLmxhCit0aW1lZXZlbnRxX3Rlc3RfU09VUkNFUyA9IFwKKwl0aW1lZXZlbnRxLXRlc3QuYyBcCisJdGltZWV2ZW50cS5oIHRpbWVldmVudHEuYyBcCisJcHJpb3EuaCBwcmlvcS5jIFwKKwlsb2cuYyBsb2cuaAorCit0aW1lZXZlbnRxX3Rlc3RfQ0ZMQUdTID0gJChBTV9DRkxBR1MpCit0aW1lZXZlbnRxX3Rlc3RfTERBREQgPSAkKEFNX0xEQUREKSAuLi9hdmFoaS1jb21tb24vbGliYXZhaGktY29tbW9uLmxhCitoYXNobWFwX3Rlc3RfU09VUkNFUyA9IFwKKwloYXNobWFwLXRlc3QuYyBcCisJaGFzaG1hcC5oIGhhc2htYXAuYyBcCisJdXRpbC5oIHV0aWwuYworCitoYXNobWFwX3Rlc3RfQ0ZMQUdTID0gJChBTV9DRkxBR1MpCitoYXNobWFwX3Rlc3RfTERBREQgPSAkKEFNX0xEQUREKSAuLi9hdmFoaS1jb21tb24vbGliYXZhaGktY29tbW9uLmxhCithbGw6IGFsbC1hbQorCisuU1VGRklYRVM6CisuU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCiskKHNyY2RpcikvTWFrZWZpbGUuaW46ICAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAorCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiBhdmFoaS1jb3JlL01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiBhdmFoaS1jb3JlL01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKK2luc3RhbGwtbGliTFRMSUJSQVJJRVM6ICQobGliX0xUTElCUkFSSUVTKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQobGliZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQobGliZGlyKSIKKwlAbGlzdD0nJChsaWJfTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChsaWJkaXIpIiB8fCBsaXN0PTsgXAorCWxpc3QyPTsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICQkcDsgdGhlbiBcCisJICAgIGxpc3QyPSIkJGxpc3QyICQkcCI7IFwKKwkgIGVsc2UgOjsgZmk7IFwKKwlkb25lOyBcCisJdGVzdCAteiAiJCRsaXN0MiIgfHwgeyBcCisJICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgJyQoREVTVERJUikkKGxpYmRpciknIjsgXAorCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgIiQoREVTVERJUikkKGxpYmRpcikiOyBcCisJfQorCit1bmluc3RhbGwtbGliTFRMSUJSQVJJRVM6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChsaWJfTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChsaWJkaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgJChhbV9fc3RyaXBfZGlyKSBcCisJICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgJyQoREVTVERJUikkKGxpYmRpcikvJCRmJyI7IFwKKwkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICIkKERFU1RESVIpJChsaWJkaXIpLyQkZiI7IFwKKwlkb25lCisKK2NsZWFuLWxpYkxUTElCUkFSSUVTOgorCS10ZXN0IC16ICIkKGxpYl9MVExJQlJBUklFUykiIHx8IHJtIC1mICQobGliX0xUTElCUkFSSUVTKQorCUBsaXN0PSckKGxpYl9MVExJQlJBUklFUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGRpcj0iYGVjaG8gJCRwIHwgc2VkIC1lICdzfC9bXi9dKiQkfHwnYCI7IFwKKwkgIHRlc3QgIiQkZGlyIiAhPSAiJCRwIiB8fCBkaXI9LjsgXAorCSAgZWNobyAicm0gLWYgXCIkJHtkaXJ9L3NvX2xvY2F0aW9uc1wiIjsgXAorCSAgcm0gLWYgIiQke2Rpcn0vc29fbG9jYXRpb25zIjsgXAorCWRvbmUKK2xpYmF2YWhpLWNvcmUubGE6ICQobGliYXZhaGlfY29yZV9sYV9PQkpFQ1RTKSAkKGxpYmF2YWhpX2NvcmVfbGFfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYmF2YWhpX2NvcmVfbGFfREVQRU5ERU5DSUVTKSAKKwkkKEFNX1ZfQ0NMRCkkKGxpYmF2YWhpX2NvcmVfbGFfTElOSykgLXJwYXRoICQobGliZGlyKSAkKGxpYmF2YWhpX2NvcmVfbGFfT0JKRUNUUykgJChsaWJhdmFoaV9jb3JlX2xhX0xJQkFERCkgJChMSUJTKQorCitjbGVhbi1ub2luc3RQUk9HUkFNUzoKKwlAbGlzdD0nJChub2luc3RfUFJPR1JBTVMpJzsgdGVzdCAtbiAiJCRsaXN0IiB8fCBleGl0IDA7IFwKKwllY2hvICIgcm0gLWYiICQkbGlzdDsgXAorCXJtIC1mICQkbGlzdCB8fCBleGl0ICQkPzsgXAorCXRlc3QgLW4gIiQoRVhFRVhUKSIgfHwgZXhpdCAwOyBcCisJbGlzdD1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkICdzLyQoRVhFRVhUKSQkLy8nYDsgXAorCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCisJcm0gLWYgJCRsaXN0CithdmFoaS1yZWZsZWN0b3IkKEVYRUVYVCk6ICQoYXZhaGlfcmVmbGVjdG9yX09CSkVDVFMpICQoYXZhaGlfcmVmbGVjdG9yX0RFUEVOREVOQ0lFUykgJChFWFRSQV9hdmFoaV9yZWZsZWN0b3JfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgYXZhaGktcmVmbGVjdG9yJChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChhdmFoaV9yZWZsZWN0b3JfTElOSykgJChhdmFoaV9yZWZsZWN0b3JfT0JKRUNUUykgJChhdmFoaV9yZWZsZWN0b3JfTERBREQpICQoTElCUykKK2F2YWhpLXRlc3QkKEVYRUVYVCk6ICQoYXZhaGlfdGVzdF9PQkpFQ1RTKSAkKGF2YWhpX3Rlc3RfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2F2YWhpX3Rlc3RfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgYXZhaGktdGVzdCQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQoYXZhaGlfdGVzdF9MSU5LKSAkKGF2YWhpX3Rlc3RfT0JKRUNUUykgJChhdmFoaV90ZXN0X0xEQUREKSAkKExJQlMpCitjb25mb3JtYW5jZS10ZXN0JChFWEVFWFQpOiAkKGNvbmZvcm1hbmNlX3Rlc3RfT0JKRUNUUykgJChjb25mb3JtYW5jZV90ZXN0X0RFUEVOREVOQ0lFUykgJChFWFRSQV9jb25mb3JtYW5jZV90ZXN0X0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGNvbmZvcm1hbmNlLXRlc3QkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKGNvbmZvcm1hbmNlX3Rlc3RfTElOSykgJChjb25mb3JtYW5jZV90ZXN0X09CSkVDVFMpICQoY29uZm9ybWFuY2VfdGVzdF9MREFERCkgJChMSUJTKQorZG5zLXNwaW4tdGVzdCQoRVhFRVhUKTogJChkbnNfc3Bpbl90ZXN0X09CSkVDVFMpICQoZG5zX3NwaW5fdGVzdF9ERVBFTkRFTkNJRVMpICQoRVhUUkFfZG5zX3NwaW5fdGVzdF9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBkbnMtc3Bpbi10ZXN0JChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChkbnNfc3Bpbl90ZXN0X0xJTkspICQoZG5zX3NwaW5fdGVzdF9PQkpFQ1RTKSAkKGRuc19zcGluX3Rlc3RfTERBREQpICQoTElCUykKK2Rucy10ZXN0JChFWEVFWFQpOiAkKGRuc190ZXN0X09CSkVDVFMpICQoZG5zX3Rlc3RfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2Ruc190ZXN0X0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGRucy10ZXN0JChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChkbnNfdGVzdF9MSU5LKSAkKGRuc190ZXN0X09CSkVDVFMpICQoZG5zX3Rlc3RfTERBREQpICQoTElCUykKK2hhc2htYXAtdGVzdCQoRVhFRVhUKTogJChoYXNobWFwX3Rlc3RfT0JKRUNUUykgJChoYXNobWFwX3Rlc3RfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2hhc2htYXBfdGVzdF9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBoYXNobWFwLXRlc3QkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKGhhc2htYXBfdGVzdF9MSU5LKSAkKGhhc2htYXBfdGVzdF9PQkpFQ1RTKSAkKGhhc2htYXBfdGVzdF9MREFERCkgJChMSUJTKQorcHJpb3EtdGVzdCQoRVhFRVhUKTogJChwcmlvcV90ZXN0X09CSkVDVFMpICQocHJpb3FfdGVzdF9ERVBFTkRFTkNJRVMpICQoRVhUUkFfcHJpb3FfdGVzdF9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBwcmlvcS10ZXN0JChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChwcmlvcV90ZXN0X0xJTkspICQocHJpb3FfdGVzdF9PQkpFQ1RTKSAkKHByaW9xX3Rlc3RfTERBREQpICQoTElCUykKK3F1ZXJpZXItdGVzdCQoRVhFRVhUKTogJChxdWVyaWVyX3Rlc3RfT0JKRUNUUykgJChxdWVyaWVyX3Rlc3RfREVQRU5ERU5DSUVTKSAkKEVYVFJBX3F1ZXJpZXJfdGVzdF9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBxdWVyaWVyLXRlc3QkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKHF1ZXJpZXJfdGVzdF9MSU5LKSAkKHF1ZXJpZXJfdGVzdF9PQkpFQ1RTKSAkKHF1ZXJpZXJfdGVzdF9MREFERCkgJChMSUJTKQordGltZWV2ZW50cS10ZXN0JChFWEVFWFQpOiAkKHRpbWVldmVudHFfdGVzdF9PQkpFQ1RTKSAkKHRpbWVldmVudHFfdGVzdF9ERVBFTkRFTkNJRVMpICQoRVhUUkFfdGltZWV2ZW50cV90ZXN0X0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIHRpbWVldmVudHEtdGVzdCQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQodGltZWV2ZW50cV90ZXN0X0xJTkspICQodGltZWV2ZW50cV90ZXN0X09CSkVDVFMpICQodGltZWV2ZW50cV90ZXN0X0xEQUREKSAkKExJQlMpCit1cGRhdGUtdGVzdCQoRVhFRVhUKTogJCh1cGRhdGVfdGVzdF9PQkpFQ1RTKSAkKHVwZGF0ZV90ZXN0X0RFUEVOREVOQ0lFUykgJChFWFRSQV91cGRhdGVfdGVzdF9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiB1cGRhdGUtdGVzdCQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQodXBkYXRlX3Rlc3RfTElOSykgJCh1cGRhdGVfdGVzdF9PQkpFQ1RTKSAkKHVwZGF0ZV90ZXN0X0xEQUREKSAkKExJQlMpCisKK21vc3RseWNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICouJChPQkpFWFQpCisKK2Rpc3RjbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLnRhYi5jCisKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9hdmFoaV9yZWZsZWN0b3ItYXZhaGktcmVmbGVjdG9yLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9hdmFoaV90ZXN0LWF2YWhpLXRlc3QuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2NvbmZvcm1hbmNlX3Rlc3QtY29uZm9ybWFuY2UtdGVzdC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZG5zX3NwaW5fdGVzdC1kbnMtc3Bpbi10ZXN0LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9kbnNfdGVzdC1hZGRyLXV0aWwuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2Ruc190ZXN0LWRucy10ZXN0LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9kbnNfdGVzdC1kbnMuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2Ruc190ZXN0LWRvbWFpbi11dGlsLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9kbnNfdGVzdC1oYXNobWFwLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9kbnNfdGVzdC1sb2cuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2Ruc190ZXN0LXJyLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9kbnNfdGVzdC11dGlsLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9oYXNobWFwX3Rlc3QtaGFzaG1hcC10ZXN0LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9oYXNobWFwX3Rlc3QtaGFzaG1hcC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvaGFzaG1hcF90ZXN0LXV0aWwuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmF2YWhpX2NvcmVfbGEtYWRkci11dGlsLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliYXZhaGlfY29yZV9sYS1hbm5vdW5jZS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmF2YWhpX2NvcmVfbGEtYnJvd3NlLWRucy1zZXJ2ZXIuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJhdmFoaV9jb3JlX2xhLWJyb3dzZS1kb21haW4uUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJhdmFoaV9jb3JlX2xhLWJyb3dzZS1zZXJ2aWNlLXR5cGUuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJhdmFoaV9jb3JlX2xhLWJyb3dzZS1zZXJ2aWNlLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliYXZhaGlfY29yZV9sYS1icm93c2UuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJhdmFoaV9jb3JlX2xhLWNhY2hlLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliYXZhaGlfY29yZV9sYS1kbnMuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJhdmFoaV9jb3JlX2xhLWRvbWFpbi11dGlsLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliYXZhaGlfY29yZV9sYS1lbnRyeS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmF2YWhpX2NvcmVfbGEtZmR1dGlsLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliYXZhaGlfY29yZV9sYS1oYXNobWFwLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliYXZhaGlfY29yZV9sYS1pZmFjZS1saW51eC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmF2YWhpX2NvcmVfbGEtaWZhY2Utbm9uZS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmF2YWhpX2NvcmVfbGEtaWZhY2UtcGZyb3V0ZS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmF2YWhpX2NvcmVfbGEtaWZhY2UuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJhdmFoaV9jb3JlX2xhLWxvZy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmF2YWhpX2NvcmVfbGEtbXVsdGljYXN0LWxvb2t1cC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmF2YWhpX2NvcmVfbGEtbmV0bGluay5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmF2YWhpX2NvcmVfbGEtcHJpb3EuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJhdmFoaV9jb3JlX2xhLXByb2JlLXNjaGVkLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliYXZhaGlfY29yZV9sYS1xdWVyaWVyLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliYXZhaGlfY29yZV9sYS1xdWVyeS1zY2hlZC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmF2YWhpX2NvcmVfbGEtcmVzb2x2ZS1hZGRyZXNzLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliYXZhaGlfY29yZV9sYS1yZXNvbHZlLWhvc3QtbmFtZS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmF2YWhpX2NvcmVfbGEtcmVzb2x2ZS1zZXJ2aWNlLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliYXZhaGlfY29yZV9sYS1yZXNwb25zZS1zY2hlZC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmF2YWhpX2NvcmVfbGEtcnIuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJhdmFoaV9jb3JlX2xhLXJybGlzdC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmF2YWhpX2NvcmVfbGEtc2VydmVyLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliYXZhaGlfY29yZV9sYS1zb2NrZXQuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJhdmFoaV9jb3JlX2xhLXRpbWVldmVudHEuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJhdmFoaV9jb3JlX2xhLXV0aWwuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJhdmFoaV9jb3JlX2xhLXdpZGUtYXJlYS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3ByaW9xX3Rlc3QtcHJpb3EtdGVzdC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcHJpb3FfdGVzdC1wcmlvcS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcXVlcmllcl90ZXN0LXF1ZXJpZXItdGVzdC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvdGltZWV2ZW50cV90ZXN0LWxvZy5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvdGltZWV2ZW50cV90ZXN0LXByaW9xLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS90aW1lZXZlbnRxX3Rlc3QtdGltZWV2ZW50cS10ZXN0LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS90aW1lZXZlbnRxX3Rlc3QtdGltZWV2ZW50cS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvdXBkYXRlX3Rlc3QtdXBkYXRlLXRlc3QuUG9AYW1fX3F1b3RlQAorCisuYy5vOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAkPAorCisuYy5vYmo6CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgYCQoQ1lHUEFUSF9XKSAnJDwnYAorCisuYy5sbzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKKworbGliYXZhaGlfY29yZV9sYS10aW1lZXZlbnRxLmxvOiB0aW1lZXZlbnRxLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV9jb3JlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJhdmFoaV9jb3JlX2xhLXRpbWVldmVudHEubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmF2YWhpX2NvcmVfbGEtdGltZWV2ZW50cS5UcG8gLWMgLW8gbGliYXZhaGlfY29yZV9sYS10aW1lZXZlbnRxLmxvIGB0ZXN0IC1mICd0aW1lZXZlbnRxLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHRpbWVldmVudHEuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliYXZhaGlfY29yZV9sYS10aW1lZXZlbnRxLlRwbyAkKERFUERJUikvbGliYXZhaGlfY29yZV9sYS10aW1lZXZlbnRxLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3RpbWVldmVudHEuYycgb2JqZWN0PSdsaWJhdmFoaV9jb3JlX2xhLXRpbWVldmVudHEubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV9jb3JlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmF2YWhpX2NvcmVfbGEtdGltZWV2ZW50cS5sbyBgdGVzdCAtZiAndGltZWV2ZW50cS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B0aW1lZXZlbnRxLmMKKworbGliYXZhaGlfY29yZV9sYS1pZmFjZS5sbzogaWZhY2UuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmF2YWhpX2NvcmVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmF2YWhpX2NvcmVfbGEtaWZhY2UubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmF2YWhpX2NvcmVfbGEtaWZhY2UuVHBvIC1jIC1vIGxpYmF2YWhpX2NvcmVfbGEtaWZhY2UubG8gYHRlc3QgLWYgJ2lmYWNlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGlmYWNlLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmF2YWhpX2NvcmVfbGEtaWZhY2UuVHBvICQoREVQRElSKS9saWJhdmFoaV9jb3JlX2xhLWlmYWNlLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2lmYWNlLmMnIG9iamVjdD0nbGliYXZhaGlfY29yZV9sYS1pZmFjZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmF2YWhpX2NvcmVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliYXZhaGlfY29yZV9sYS1pZmFjZS5sbyBgdGVzdCAtZiAnaWZhY2UuYycgfHwgZWNobyAnJChzcmNkaXIpLydgaWZhY2UuYworCitsaWJhdmFoaV9jb3JlX2xhLXNlcnZlci5sbzogc2VydmVyLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV9jb3JlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJhdmFoaV9jb3JlX2xhLXNlcnZlci5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliYXZhaGlfY29yZV9sYS1zZXJ2ZXIuVHBvIC1jIC1vIGxpYmF2YWhpX2NvcmVfbGEtc2VydmVyLmxvIGB0ZXN0IC1mICdzZXJ2ZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc2VydmVyLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmF2YWhpX2NvcmVfbGEtc2VydmVyLlRwbyAkKERFUERJUikvbGliYXZhaGlfY29yZV9sYS1zZXJ2ZXIuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nc2VydmVyLmMnIG9iamVjdD0nbGliYXZhaGlfY29yZV9sYS1zZXJ2ZXIubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV9jb3JlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmF2YWhpX2NvcmVfbGEtc2VydmVyLmxvIGB0ZXN0IC1mICdzZXJ2ZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc2VydmVyLmMKKworbGliYXZhaGlfY29yZV9sYS1lbnRyeS5sbzogZW50cnkuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmF2YWhpX2NvcmVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmF2YWhpX2NvcmVfbGEtZW50cnkubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmF2YWhpX2NvcmVfbGEtZW50cnkuVHBvIC1jIC1vIGxpYmF2YWhpX2NvcmVfbGEtZW50cnkubG8gYHRlc3QgLWYgJ2VudHJ5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVudHJ5LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmF2YWhpX2NvcmVfbGEtZW50cnkuVHBvICQoREVQRElSKS9saWJhdmFoaV9jb3JlX2xhLWVudHJ5LlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2VudHJ5LmMnIG9iamVjdD0nbGliYXZhaGlfY29yZV9sYS1lbnRyeS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmF2YWhpX2NvcmVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliYXZhaGlfY29yZV9sYS1lbnRyeS5sbyBgdGVzdCAtZiAnZW50cnkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZW50cnkuYworCitsaWJhdmFoaV9jb3JlX2xhLXByaW9xLmxvOiBwcmlvcS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliYXZhaGlfY29yZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliYXZhaGlfY29yZV9sYS1wcmlvcS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliYXZhaGlfY29yZV9sYS1wcmlvcS5UcG8gLWMgLW8gbGliYXZhaGlfY29yZV9sYS1wcmlvcS5sbyBgdGVzdCAtZiAncHJpb3EuYycgfHwgZWNobyAnJChzcmNkaXIpLydgcHJpb3EuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliYXZhaGlfY29yZV9sYS1wcmlvcS5UcG8gJChERVBESVIpL2xpYmF2YWhpX2NvcmVfbGEtcHJpb3EuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ncHJpb3EuYycgb2JqZWN0PSdsaWJhdmFoaV9jb3JlX2xhLXByaW9xLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliYXZhaGlfY29yZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJhdmFoaV9jb3JlX2xhLXByaW9xLmxvIGB0ZXN0IC1mICdwcmlvcS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BwcmlvcS5jCisKK2xpYmF2YWhpX2NvcmVfbGEtY2FjaGUubG86IGNhY2hlLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV9jb3JlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJhdmFoaV9jb3JlX2xhLWNhY2hlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJhdmFoaV9jb3JlX2xhLWNhY2hlLlRwbyAtYyAtbyBsaWJhdmFoaV9jb3JlX2xhLWNhY2hlLmxvIGB0ZXN0IC1mICdjYWNoZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BjYWNoZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJhdmFoaV9jb3JlX2xhLWNhY2hlLlRwbyAkKERFUERJUikvbGliYXZhaGlfY29yZV9sYS1jYWNoZS5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdjYWNoZS5jJyBvYmplY3Q9J2xpYmF2YWhpX2NvcmVfbGEtY2FjaGUubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV9jb3JlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmF2YWhpX2NvcmVfbGEtY2FjaGUubG8gYHRlc3QgLWYgJ2NhY2hlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGNhY2hlLmMKKworbGliYXZhaGlfY29yZV9sYS1zb2NrZXQubG86IHNvY2tldC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliYXZhaGlfY29yZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliYXZhaGlfY29yZV9sYS1zb2NrZXQubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmF2YWhpX2NvcmVfbGEtc29ja2V0LlRwbyAtYyAtbyBsaWJhdmFoaV9jb3JlX2xhLXNvY2tldC5sbyBgdGVzdCAtZiAnc29ja2V0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNvY2tldC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJhdmFoaV9jb3JlX2xhLXNvY2tldC5UcG8gJChERVBESVIpL2xpYmF2YWhpX2NvcmVfbGEtc29ja2V0LlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3NvY2tldC5jJyBvYmplY3Q9J2xpYmF2YWhpX2NvcmVfbGEtc29ja2V0LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliYXZhaGlfY29yZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJhdmFoaV9jb3JlX2xhLXNvY2tldC5sbyBgdGVzdCAtZiAnc29ja2V0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNvY2tldC5jCisKK2xpYmF2YWhpX2NvcmVfbGEtcmVzcG9uc2Utc2NoZWQubG86IHJlc3BvbnNlLXNjaGVkLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV9jb3JlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJhdmFoaV9jb3JlX2xhLXJlc3BvbnNlLXNjaGVkLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJhdmFoaV9jb3JlX2xhLXJlc3BvbnNlLXNjaGVkLlRwbyAtYyAtbyBsaWJhdmFoaV9jb3JlX2xhLXJlc3BvbnNlLXNjaGVkLmxvIGB0ZXN0IC1mICdyZXNwb25zZS1zY2hlZC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2ByZXNwb25zZS1zY2hlZC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJhdmFoaV9jb3JlX2xhLXJlc3BvbnNlLXNjaGVkLlRwbyAkKERFUERJUikvbGliYXZhaGlfY29yZV9sYS1yZXNwb25zZS1zY2hlZC5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdyZXNwb25zZS1zY2hlZC5jJyBvYmplY3Q9J2xpYmF2YWhpX2NvcmVfbGEtcmVzcG9uc2Utc2NoZWQubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV9jb3JlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmF2YWhpX2NvcmVfbGEtcmVzcG9uc2Utc2NoZWQubG8gYHRlc3QgLWYgJ3Jlc3BvbnNlLXNjaGVkLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHJlc3BvbnNlLXNjaGVkLmMKKworbGliYXZhaGlfY29yZV9sYS1xdWVyeS1zY2hlZC5sbzogcXVlcnktc2NoZWQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmF2YWhpX2NvcmVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmF2YWhpX2NvcmVfbGEtcXVlcnktc2NoZWQubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmF2YWhpX2NvcmVfbGEtcXVlcnktc2NoZWQuVHBvIC1jIC1vIGxpYmF2YWhpX2NvcmVfbGEtcXVlcnktc2NoZWQubG8gYHRlc3QgLWYgJ3F1ZXJ5LXNjaGVkLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHF1ZXJ5LXNjaGVkLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmF2YWhpX2NvcmVfbGEtcXVlcnktc2NoZWQuVHBvICQoREVQRElSKS9saWJhdmFoaV9jb3JlX2xhLXF1ZXJ5LXNjaGVkLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3F1ZXJ5LXNjaGVkLmMnIG9iamVjdD0nbGliYXZhaGlfY29yZV9sYS1xdWVyeS1zY2hlZC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmF2YWhpX2NvcmVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliYXZhaGlfY29yZV9sYS1xdWVyeS1zY2hlZC5sbyBgdGVzdCAtZiAncXVlcnktc2NoZWQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgcXVlcnktc2NoZWQuYworCitsaWJhdmFoaV9jb3JlX2xhLXByb2JlLXNjaGVkLmxvOiBwcm9iZS1zY2hlZC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliYXZhaGlfY29yZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliYXZhaGlfY29yZV9sYS1wcm9iZS1zY2hlZC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliYXZhaGlfY29yZV9sYS1wcm9iZS1zY2hlZC5UcG8gLWMgLW8gbGliYXZhaGlfY29yZV9sYS1wcm9iZS1zY2hlZC5sbyBgdGVzdCAtZiAncHJvYmUtc2NoZWQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgcHJvYmUtc2NoZWQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliYXZhaGlfY29yZV9sYS1wcm9iZS1zY2hlZC5UcG8gJChERVBESVIpL2xpYmF2YWhpX2NvcmVfbGEtcHJvYmUtc2NoZWQuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ncHJvYmUtc2NoZWQuYycgb2JqZWN0PSdsaWJhdmFoaV9jb3JlX2xhLXByb2JlLXNjaGVkLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliYXZhaGlfY29yZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJhdmFoaV9jb3JlX2xhLXByb2JlLXNjaGVkLmxvIGB0ZXN0IC1mICdwcm9iZS1zY2hlZC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bwcm9iZS1zY2hlZC5jCisKK2xpYmF2YWhpX2NvcmVfbGEtYW5ub3VuY2UubG86IGFubm91bmNlLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV9jb3JlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJhdmFoaV9jb3JlX2xhLWFubm91bmNlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJhdmFoaV9jb3JlX2xhLWFubm91bmNlLlRwbyAtYyAtbyBsaWJhdmFoaV9jb3JlX2xhLWFubm91bmNlLmxvIGB0ZXN0IC1mICdhbm5vdW5jZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bhbm5vdW5jZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJhdmFoaV9jb3JlX2xhLWFubm91bmNlLlRwbyAkKERFUERJUikvbGliYXZhaGlfY29yZV9sYS1hbm5vdW5jZS5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhbm5vdW5jZS5jJyBvYmplY3Q9J2xpYmF2YWhpX2NvcmVfbGEtYW5ub3VuY2UubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV9jb3JlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmF2YWhpX2NvcmVfbGEtYW5ub3VuY2UubG8gYHRlc3QgLWYgJ2Fubm91bmNlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGFubm91bmNlLmMKKworbGliYXZhaGlfY29yZV9sYS1icm93c2UubG86IGJyb3dzZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliYXZhaGlfY29yZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliYXZhaGlfY29yZV9sYS1icm93c2UubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmF2YWhpX2NvcmVfbGEtYnJvd3NlLlRwbyAtYyAtbyBsaWJhdmFoaV9jb3JlX2xhLWJyb3dzZS5sbyBgdGVzdCAtZiAnYnJvd3NlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGJyb3dzZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJhdmFoaV9jb3JlX2xhLWJyb3dzZS5UcG8gJChERVBESVIpL2xpYmF2YWhpX2NvcmVfbGEtYnJvd3NlLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2Jyb3dzZS5jJyBvYmplY3Q9J2xpYmF2YWhpX2NvcmVfbGEtYnJvd3NlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliYXZhaGlfY29yZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJhdmFoaV9jb3JlX2xhLWJyb3dzZS5sbyBgdGVzdCAtZiAnYnJvd3NlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGJyb3dzZS5jCisKK2xpYmF2YWhpX2NvcmVfbGEtcnJsaXN0LmxvOiBycmxpc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmF2YWhpX2NvcmVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmF2YWhpX2NvcmVfbGEtcnJsaXN0LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJhdmFoaV9jb3JlX2xhLXJybGlzdC5UcG8gLWMgLW8gbGliYXZhaGlfY29yZV9sYS1ycmxpc3QubG8gYHRlc3QgLWYgJ3JybGlzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bycmxpc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliYXZhaGlfY29yZV9sYS1ycmxpc3QuVHBvICQoREVQRElSKS9saWJhdmFoaV9jb3JlX2xhLXJybGlzdC5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdycmxpc3QuYycgb2JqZWN0PSdsaWJhdmFoaV9jb3JlX2xhLXJybGlzdC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmF2YWhpX2NvcmVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliYXZhaGlfY29yZV9sYS1ycmxpc3QubG8gYHRlc3QgLWYgJ3JybGlzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bycmxpc3QuYworCitsaWJhdmFoaV9jb3JlX2xhLXJlc29sdmUtaG9zdC1uYW1lLmxvOiByZXNvbHZlLWhvc3QtbmFtZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliYXZhaGlfY29yZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliYXZhaGlfY29yZV9sYS1yZXNvbHZlLWhvc3QtbmFtZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliYXZhaGlfY29yZV9sYS1yZXNvbHZlLWhvc3QtbmFtZS5UcG8gLWMgLW8gbGliYXZhaGlfY29yZV9sYS1yZXNvbHZlLWhvc3QtbmFtZS5sbyBgdGVzdCAtZiAncmVzb2x2ZS1ob3N0LW5hbWUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgcmVzb2x2ZS1ob3N0LW5hbWUuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliYXZhaGlfY29yZV9sYS1yZXNvbHZlLWhvc3QtbmFtZS5UcG8gJChERVBESVIpL2xpYmF2YWhpX2NvcmVfbGEtcmVzb2x2ZS1ob3N0LW5hbWUuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ncmVzb2x2ZS1ob3N0LW5hbWUuYycgb2JqZWN0PSdsaWJhdmFoaV9jb3JlX2xhLXJlc29sdmUtaG9zdC1uYW1lLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliYXZhaGlfY29yZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJhdmFoaV9jb3JlX2xhLXJlc29sdmUtaG9zdC1uYW1lLmxvIGB0ZXN0IC1mICdyZXNvbHZlLWhvc3QtbmFtZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2ByZXNvbHZlLWhvc3QtbmFtZS5jCisKK2xpYmF2YWhpX2NvcmVfbGEtcmVzb2x2ZS1hZGRyZXNzLmxvOiByZXNvbHZlLWFkZHJlc3MuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmF2YWhpX2NvcmVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmF2YWhpX2NvcmVfbGEtcmVzb2x2ZS1hZGRyZXNzLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJhdmFoaV9jb3JlX2xhLXJlc29sdmUtYWRkcmVzcy5UcG8gLWMgLW8gbGliYXZhaGlfY29yZV9sYS1yZXNvbHZlLWFkZHJlc3MubG8gYHRlc3QgLWYgJ3Jlc29sdmUtYWRkcmVzcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2ByZXNvbHZlLWFkZHJlc3MuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliYXZhaGlfY29yZV9sYS1yZXNvbHZlLWFkZHJlc3MuVHBvICQoREVQRElSKS9saWJhdmFoaV9jb3JlX2xhLXJlc29sdmUtYWRkcmVzcy5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdyZXNvbHZlLWFkZHJlc3MuYycgb2JqZWN0PSdsaWJhdmFoaV9jb3JlX2xhLXJlc29sdmUtYWRkcmVzcy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmF2YWhpX2NvcmVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliYXZhaGlfY29yZV9sYS1yZXNvbHZlLWFkZHJlc3MubG8gYHRlc3QgLWYgJ3Jlc29sdmUtYWRkcmVzcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2ByZXNvbHZlLWFkZHJlc3MuYworCitsaWJhdmFoaV9jb3JlX2xhLWJyb3dzZS1kb21haW4ubG86IGJyb3dzZS1kb21haW4uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmF2YWhpX2NvcmVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmF2YWhpX2NvcmVfbGEtYnJvd3NlLWRvbWFpbi5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliYXZhaGlfY29yZV9sYS1icm93c2UtZG9tYWluLlRwbyAtYyAtbyBsaWJhdmFoaV9jb3JlX2xhLWJyb3dzZS1kb21haW4ubG8gYHRlc3QgLWYgJ2Jyb3dzZS1kb21haW4uYycgfHwgZWNobyAnJChzcmNkaXIpLydgYnJvd3NlLWRvbWFpbi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJhdmFoaV9jb3JlX2xhLWJyb3dzZS1kb21haW4uVHBvICQoREVQRElSKS9saWJhdmFoaV9jb3JlX2xhLWJyb3dzZS1kb21haW4uUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYnJvd3NlLWRvbWFpbi5jJyBvYmplY3Q9J2xpYmF2YWhpX2NvcmVfbGEtYnJvd3NlLWRvbWFpbi5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmF2YWhpX2NvcmVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliYXZhaGlfY29yZV9sYS1icm93c2UtZG9tYWluLmxvIGB0ZXN0IC1mICdicm93c2UtZG9tYWluLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGJyb3dzZS1kb21haW4uYworCitsaWJhdmFoaV9jb3JlX2xhLWJyb3dzZS1zZXJ2aWNlLXR5cGUubG86IGJyb3dzZS1zZXJ2aWNlLXR5cGUuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmF2YWhpX2NvcmVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmF2YWhpX2NvcmVfbGEtYnJvd3NlLXNlcnZpY2UtdHlwZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliYXZhaGlfY29yZV9sYS1icm93c2Utc2VydmljZS10eXBlLlRwbyAtYyAtbyBsaWJhdmFoaV9jb3JlX2xhLWJyb3dzZS1zZXJ2aWNlLXR5cGUubG8gYHRlc3QgLWYgJ2Jyb3dzZS1zZXJ2aWNlLXR5cGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYnJvd3NlLXNlcnZpY2UtdHlwZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJhdmFoaV9jb3JlX2xhLWJyb3dzZS1zZXJ2aWNlLXR5cGUuVHBvICQoREVQRElSKS9saWJhdmFoaV9jb3JlX2xhLWJyb3dzZS1zZXJ2aWNlLXR5cGUuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYnJvd3NlLXNlcnZpY2UtdHlwZS5jJyBvYmplY3Q9J2xpYmF2YWhpX2NvcmVfbGEtYnJvd3NlLXNlcnZpY2UtdHlwZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmF2YWhpX2NvcmVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliYXZhaGlfY29yZV9sYS1icm93c2Utc2VydmljZS10eXBlLmxvIGB0ZXN0IC1mICdicm93c2Utc2VydmljZS10eXBlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGJyb3dzZS1zZXJ2aWNlLXR5cGUuYworCitsaWJhdmFoaV9jb3JlX2xhLWJyb3dzZS1zZXJ2aWNlLmxvOiBicm93c2Utc2VydmljZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliYXZhaGlfY29yZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliYXZhaGlfY29yZV9sYS1icm93c2Utc2VydmljZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliYXZhaGlfY29yZV9sYS1icm93c2Utc2VydmljZS5UcG8gLWMgLW8gbGliYXZhaGlfY29yZV9sYS1icm93c2Utc2VydmljZS5sbyBgdGVzdCAtZiAnYnJvd3NlLXNlcnZpY2UuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYnJvd3NlLXNlcnZpY2UuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliYXZhaGlfY29yZV9sYS1icm93c2Utc2VydmljZS5UcG8gJChERVBESVIpL2xpYmF2YWhpX2NvcmVfbGEtYnJvd3NlLXNlcnZpY2UuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYnJvd3NlLXNlcnZpY2UuYycgb2JqZWN0PSdsaWJhdmFoaV9jb3JlX2xhLWJyb3dzZS1zZXJ2aWNlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliYXZhaGlfY29yZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJhdmFoaV9jb3JlX2xhLWJyb3dzZS1zZXJ2aWNlLmxvIGB0ZXN0IC1mICdicm93c2Utc2VydmljZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bicm93c2Utc2VydmljZS5jCisKK2xpYmF2YWhpX2NvcmVfbGEtcmVzb2x2ZS1zZXJ2aWNlLmxvOiByZXNvbHZlLXNlcnZpY2UuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmF2YWhpX2NvcmVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmF2YWhpX2NvcmVfbGEtcmVzb2x2ZS1zZXJ2aWNlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJhdmFoaV9jb3JlX2xhLXJlc29sdmUtc2VydmljZS5UcG8gLWMgLW8gbGliYXZhaGlfY29yZV9sYS1yZXNvbHZlLXNlcnZpY2UubG8gYHRlc3QgLWYgJ3Jlc29sdmUtc2VydmljZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2ByZXNvbHZlLXNlcnZpY2UuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliYXZhaGlfY29yZV9sYS1yZXNvbHZlLXNlcnZpY2UuVHBvICQoREVQRElSKS9saWJhdmFoaV9jb3JlX2xhLXJlc29sdmUtc2VydmljZS5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdyZXNvbHZlLXNlcnZpY2UuYycgb2JqZWN0PSdsaWJhdmFoaV9jb3JlX2xhLXJlc29sdmUtc2VydmljZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmF2YWhpX2NvcmVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliYXZhaGlfY29yZV9sYS1yZXNvbHZlLXNlcnZpY2UubG8gYHRlc3QgLWYgJ3Jlc29sdmUtc2VydmljZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2ByZXNvbHZlLXNlcnZpY2UuYworCitsaWJhdmFoaV9jb3JlX2xhLWRucy5sbzogZG5zLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV9jb3JlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJhdmFoaV9jb3JlX2xhLWRucy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliYXZhaGlfY29yZV9sYS1kbnMuVHBvIC1jIC1vIGxpYmF2YWhpX2NvcmVfbGEtZG5zLmxvIGB0ZXN0IC1mICdkbnMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZG5zLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmF2YWhpX2NvcmVfbGEtZG5zLlRwbyAkKERFUERJUikvbGliYXZhaGlfY29yZV9sYS1kbnMuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZG5zLmMnIG9iamVjdD0nbGliYXZhaGlfY29yZV9sYS1kbnMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV9jb3JlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmF2YWhpX2NvcmVfbGEtZG5zLmxvIGB0ZXN0IC1mICdkbnMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZG5zLmMKKworbGliYXZhaGlfY29yZV9sYS1yci5sbzogcnIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmF2YWhpX2NvcmVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmF2YWhpX2NvcmVfbGEtcnIubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmF2YWhpX2NvcmVfbGEtcnIuVHBvIC1jIC1vIGxpYmF2YWhpX2NvcmVfbGEtcnIubG8gYHRlc3QgLWYgJ3JyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHJyLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmF2YWhpX2NvcmVfbGEtcnIuVHBvICQoREVQRElSKS9saWJhdmFoaV9jb3JlX2xhLXJyLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3JyLmMnIG9iamVjdD0nbGliYXZhaGlfY29yZV9sYS1yci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmF2YWhpX2NvcmVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliYXZhaGlfY29yZV9sYS1yci5sbyBgdGVzdCAtZiAncnIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgcnIuYworCitsaWJhdmFoaV9jb3JlX2xhLWxvZy5sbzogbG9nLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV9jb3JlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJhdmFoaV9jb3JlX2xhLWxvZy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliYXZhaGlfY29yZV9sYS1sb2cuVHBvIC1jIC1vIGxpYmF2YWhpX2NvcmVfbGEtbG9nLmxvIGB0ZXN0IC1mICdsb2cuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbG9nLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmF2YWhpX2NvcmVfbGEtbG9nLlRwbyAkKERFUERJUikvbGliYXZhaGlfY29yZV9sYS1sb2cuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nbG9nLmMnIG9iamVjdD0nbGliYXZhaGlfY29yZV9sYS1sb2cubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV9jb3JlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmF2YWhpX2NvcmVfbGEtbG9nLmxvIGB0ZXN0IC1mICdsb2cuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbG9nLmMKKworbGliYXZhaGlfY29yZV9sYS1icm93c2UtZG5zLXNlcnZlci5sbzogYnJvd3NlLWRucy1zZXJ2ZXIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmF2YWhpX2NvcmVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmF2YWhpX2NvcmVfbGEtYnJvd3NlLWRucy1zZXJ2ZXIubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmF2YWhpX2NvcmVfbGEtYnJvd3NlLWRucy1zZXJ2ZXIuVHBvIC1jIC1vIGxpYmF2YWhpX2NvcmVfbGEtYnJvd3NlLWRucy1zZXJ2ZXIubG8gYHRlc3QgLWYgJ2Jyb3dzZS1kbnMtc2VydmVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGJyb3dzZS1kbnMtc2VydmVyLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmF2YWhpX2NvcmVfbGEtYnJvd3NlLWRucy1zZXJ2ZXIuVHBvICQoREVQRElSKS9saWJhdmFoaV9jb3JlX2xhLWJyb3dzZS1kbnMtc2VydmVyLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2Jyb3dzZS1kbnMtc2VydmVyLmMnIG9iamVjdD0nbGliYXZhaGlfY29yZV9sYS1icm93c2UtZG5zLXNlcnZlci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmF2YWhpX2NvcmVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliYXZhaGlfY29yZV9sYS1icm93c2UtZG5zLXNlcnZlci5sbyBgdGVzdCAtZiAnYnJvd3NlLWRucy1zZXJ2ZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYnJvd3NlLWRucy1zZXJ2ZXIuYworCitsaWJhdmFoaV9jb3JlX2xhLWZkdXRpbC5sbzogZmR1dGlsLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV9jb3JlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJhdmFoaV9jb3JlX2xhLWZkdXRpbC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliYXZhaGlfY29yZV9sYS1mZHV0aWwuVHBvIC1jIC1vIGxpYmF2YWhpX2NvcmVfbGEtZmR1dGlsLmxvIGB0ZXN0IC1mICdmZHV0aWwuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZmR1dGlsLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmF2YWhpX2NvcmVfbGEtZmR1dGlsLlRwbyAkKERFUERJUikvbGliYXZhaGlfY29yZV9sYS1mZHV0aWwuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZmR1dGlsLmMnIG9iamVjdD0nbGliYXZhaGlfY29yZV9sYS1mZHV0aWwubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV9jb3JlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmF2YWhpX2NvcmVfbGEtZmR1dGlsLmxvIGB0ZXN0IC1mICdmZHV0aWwuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZmR1dGlsLmMKKworbGliYXZhaGlfY29yZV9sYS11dGlsLmxvOiB1dGlsLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV9jb3JlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJhdmFoaV9jb3JlX2xhLXV0aWwubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmF2YWhpX2NvcmVfbGEtdXRpbC5UcG8gLWMgLW8gbGliYXZhaGlfY29yZV9sYS11dGlsLmxvIGB0ZXN0IC1mICd1dGlsLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHV0aWwuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliYXZhaGlfY29yZV9sYS11dGlsLlRwbyAkKERFUERJUikvbGliYXZhaGlfY29yZV9sYS11dGlsLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3V0aWwuYycgb2JqZWN0PSdsaWJhdmFoaV9jb3JlX2xhLXV0aWwubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV9jb3JlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmF2YWhpX2NvcmVfbGEtdXRpbC5sbyBgdGVzdCAtZiAndXRpbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B1dGlsLmMKKworbGliYXZhaGlfY29yZV9sYS1oYXNobWFwLmxvOiBoYXNobWFwLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV9jb3JlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJhdmFoaV9jb3JlX2xhLWhhc2htYXAubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmF2YWhpX2NvcmVfbGEtaGFzaG1hcC5UcG8gLWMgLW8gbGliYXZhaGlfY29yZV9sYS1oYXNobWFwLmxvIGB0ZXN0IC1mICdoYXNobWFwLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGhhc2htYXAuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliYXZhaGlfY29yZV9sYS1oYXNobWFwLlRwbyAkKERFUERJUikvbGliYXZhaGlfY29yZV9sYS1oYXNobWFwLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2hhc2htYXAuYycgb2JqZWN0PSdsaWJhdmFoaV9jb3JlX2xhLWhhc2htYXAubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV9jb3JlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmF2YWhpX2NvcmVfbGEtaGFzaG1hcC5sbyBgdGVzdCAtZiAnaGFzaG1hcC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BoYXNobWFwLmMKKworbGliYXZhaGlfY29yZV9sYS13aWRlLWFyZWEubG86IHdpZGUtYXJlYS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliYXZhaGlfY29yZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliYXZhaGlfY29yZV9sYS13aWRlLWFyZWEubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmF2YWhpX2NvcmVfbGEtd2lkZS1hcmVhLlRwbyAtYyAtbyBsaWJhdmFoaV9jb3JlX2xhLXdpZGUtYXJlYS5sbyBgdGVzdCAtZiAnd2lkZS1hcmVhLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHdpZGUtYXJlYS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJhdmFoaV9jb3JlX2xhLXdpZGUtYXJlYS5UcG8gJChERVBESVIpL2xpYmF2YWhpX2NvcmVfbGEtd2lkZS1hcmVhLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3dpZGUtYXJlYS5jJyBvYmplY3Q9J2xpYmF2YWhpX2NvcmVfbGEtd2lkZS1hcmVhLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliYXZhaGlfY29yZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJhdmFoaV9jb3JlX2xhLXdpZGUtYXJlYS5sbyBgdGVzdCAtZiAnd2lkZS1hcmVhLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHdpZGUtYXJlYS5jCisKK2xpYmF2YWhpX2NvcmVfbGEtbXVsdGljYXN0LWxvb2t1cC5sbzogbXVsdGljYXN0LWxvb2t1cC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliYXZhaGlfY29yZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliYXZhaGlfY29yZV9sYS1tdWx0aWNhc3QtbG9va3VwLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJhdmFoaV9jb3JlX2xhLW11bHRpY2FzdC1sb29rdXAuVHBvIC1jIC1vIGxpYmF2YWhpX2NvcmVfbGEtbXVsdGljYXN0LWxvb2t1cC5sbyBgdGVzdCAtZiAnbXVsdGljYXN0LWxvb2t1cC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BtdWx0aWNhc3QtbG9va3VwLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmF2YWhpX2NvcmVfbGEtbXVsdGljYXN0LWxvb2t1cC5UcG8gJChERVBESVIpL2xpYmF2YWhpX2NvcmVfbGEtbXVsdGljYXN0LWxvb2t1cC5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdtdWx0aWNhc3QtbG9va3VwLmMnIG9iamVjdD0nbGliYXZhaGlfY29yZV9sYS1tdWx0aWNhc3QtbG9va3VwLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliYXZhaGlfY29yZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJhdmFoaV9jb3JlX2xhLW11bHRpY2FzdC1sb29rdXAubG8gYHRlc3QgLWYgJ211bHRpY2FzdC1sb29rdXAuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbXVsdGljYXN0LWxvb2t1cC5jCisKK2xpYmF2YWhpX2NvcmVfbGEtcXVlcmllci5sbzogcXVlcmllci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliYXZhaGlfY29yZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliYXZhaGlfY29yZV9sYS1xdWVyaWVyLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJhdmFoaV9jb3JlX2xhLXF1ZXJpZXIuVHBvIC1jIC1vIGxpYmF2YWhpX2NvcmVfbGEtcXVlcmllci5sbyBgdGVzdCAtZiAncXVlcmllci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BxdWVyaWVyLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmF2YWhpX2NvcmVfbGEtcXVlcmllci5UcG8gJChERVBESVIpL2xpYmF2YWhpX2NvcmVfbGEtcXVlcmllci5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdxdWVyaWVyLmMnIG9iamVjdD0nbGliYXZhaGlfY29yZV9sYS1xdWVyaWVyLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliYXZhaGlfY29yZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJhdmFoaV9jb3JlX2xhLXF1ZXJpZXIubG8gYHRlc3QgLWYgJ3F1ZXJpZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgcXVlcmllci5jCisKK2xpYmF2YWhpX2NvcmVfbGEtYWRkci11dGlsLmxvOiBhZGRyLXV0aWwuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmF2YWhpX2NvcmVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmF2YWhpX2NvcmVfbGEtYWRkci11dGlsLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJhdmFoaV9jb3JlX2xhLWFkZHItdXRpbC5UcG8gLWMgLW8gbGliYXZhaGlfY29yZV9sYS1hZGRyLXV0aWwubG8gYHRlc3QgLWYgJ2FkZHItdXRpbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhZGRyLXV0aWwuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliYXZhaGlfY29yZV9sYS1hZGRyLXV0aWwuVHBvICQoREVQRElSKS9saWJhdmFoaV9jb3JlX2xhLWFkZHItdXRpbC5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhZGRyLXV0aWwuYycgb2JqZWN0PSdsaWJhdmFoaV9jb3JlX2xhLWFkZHItdXRpbC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmF2YWhpX2NvcmVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliYXZhaGlfY29yZV9sYS1hZGRyLXV0aWwubG8gYHRlc3QgLWYgJ2FkZHItdXRpbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhZGRyLXV0aWwuYworCitsaWJhdmFoaV9jb3JlX2xhLWRvbWFpbi11dGlsLmxvOiBkb21haW4tdXRpbC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliYXZhaGlfY29yZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliYXZhaGlfY29yZV9sYS1kb21haW4tdXRpbC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliYXZhaGlfY29yZV9sYS1kb21haW4tdXRpbC5UcG8gLWMgLW8gbGliYXZhaGlfY29yZV9sYS1kb21haW4tdXRpbC5sbyBgdGVzdCAtZiAnZG9tYWluLXV0aWwuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZG9tYWluLXV0aWwuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliYXZhaGlfY29yZV9sYS1kb21haW4tdXRpbC5UcG8gJChERVBESVIpL2xpYmF2YWhpX2NvcmVfbGEtZG9tYWluLXV0aWwuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZG9tYWluLXV0aWwuYycgb2JqZWN0PSdsaWJhdmFoaV9jb3JlX2xhLWRvbWFpbi11dGlsLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliYXZhaGlfY29yZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJhdmFoaV9jb3JlX2xhLWRvbWFpbi11dGlsLmxvIGB0ZXN0IC1mICdkb21haW4tdXRpbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bkb21haW4tdXRpbC5jCisKK2xpYmF2YWhpX2NvcmVfbGEtaWZhY2UtbGludXgubG86IGlmYWNlLWxpbnV4LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV9jb3JlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJhdmFoaV9jb3JlX2xhLWlmYWNlLWxpbnV4LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJhdmFoaV9jb3JlX2xhLWlmYWNlLWxpbnV4LlRwbyAtYyAtbyBsaWJhdmFoaV9jb3JlX2xhLWlmYWNlLWxpbnV4LmxvIGB0ZXN0IC1mICdpZmFjZS1saW51eC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BpZmFjZS1saW51eC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJhdmFoaV9jb3JlX2xhLWlmYWNlLWxpbnV4LlRwbyAkKERFUERJUikvbGliYXZhaGlfY29yZV9sYS1pZmFjZS1saW51eC5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdpZmFjZS1saW51eC5jJyBvYmplY3Q9J2xpYmF2YWhpX2NvcmVfbGEtaWZhY2UtbGludXgubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV9jb3JlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmF2YWhpX2NvcmVfbGEtaWZhY2UtbGludXgubG8gYHRlc3QgLWYgJ2lmYWNlLWxpbnV4LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGlmYWNlLWxpbnV4LmMKKworbGliYXZhaGlfY29yZV9sYS1uZXRsaW5rLmxvOiBuZXRsaW5rLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV9jb3JlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJhdmFoaV9jb3JlX2xhLW5ldGxpbmsubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmF2YWhpX2NvcmVfbGEtbmV0bGluay5UcG8gLWMgLW8gbGliYXZhaGlfY29yZV9sYS1uZXRsaW5rLmxvIGB0ZXN0IC1mICduZXRsaW5rLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYG5ldGxpbmsuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliYXZhaGlfY29yZV9sYS1uZXRsaW5rLlRwbyAkKERFUERJUikvbGliYXZhaGlfY29yZV9sYS1uZXRsaW5rLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J25ldGxpbmsuYycgb2JqZWN0PSdsaWJhdmFoaV9jb3JlX2xhLW5ldGxpbmsubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV9jb3JlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmF2YWhpX2NvcmVfbGEtbmV0bGluay5sbyBgdGVzdCAtZiAnbmV0bGluay5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BuZXRsaW5rLmMKKworbGliYXZhaGlfY29yZV9sYS1pZmFjZS1wZnJvdXRlLmxvOiBpZmFjZS1wZnJvdXRlLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV9jb3JlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJhdmFoaV9jb3JlX2xhLWlmYWNlLXBmcm91dGUubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmF2YWhpX2NvcmVfbGEtaWZhY2UtcGZyb3V0ZS5UcG8gLWMgLW8gbGliYXZhaGlfY29yZV9sYS1pZmFjZS1wZnJvdXRlLmxvIGB0ZXN0IC1mICdpZmFjZS1wZnJvdXRlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGlmYWNlLXBmcm91dGUuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliYXZhaGlfY29yZV9sYS1pZmFjZS1wZnJvdXRlLlRwbyAkKERFUERJUikvbGliYXZhaGlfY29yZV9sYS1pZmFjZS1wZnJvdXRlLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2lmYWNlLXBmcm91dGUuYycgb2JqZWN0PSdsaWJhdmFoaV9jb3JlX2xhLWlmYWNlLXBmcm91dGUubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV9jb3JlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmF2YWhpX2NvcmVfbGEtaWZhY2UtcGZyb3V0ZS5sbyBgdGVzdCAtZiAnaWZhY2UtcGZyb3V0ZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BpZmFjZS1wZnJvdXRlLmMKKworbGliYXZhaGlfY29yZV9sYS1pZmFjZS1ub25lLmxvOiBpZmFjZS1ub25lLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV9jb3JlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJhdmFoaV9jb3JlX2xhLWlmYWNlLW5vbmUubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmF2YWhpX2NvcmVfbGEtaWZhY2Utbm9uZS5UcG8gLWMgLW8gbGliYXZhaGlfY29yZV9sYS1pZmFjZS1ub25lLmxvIGB0ZXN0IC1mICdpZmFjZS1ub25lLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGlmYWNlLW5vbmUuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliYXZhaGlfY29yZV9sYS1pZmFjZS1ub25lLlRwbyAkKERFUERJUikvbGliYXZhaGlfY29yZV9sYS1pZmFjZS1ub25lLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2lmYWNlLW5vbmUuYycgb2JqZWN0PSdsaWJhdmFoaV9jb3JlX2xhLWlmYWNlLW5vbmUubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV9jb3JlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmF2YWhpX2NvcmVfbGEtaWZhY2Utbm9uZS5sbyBgdGVzdCAtZiAnaWZhY2Utbm9uZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BpZmFjZS1ub25lLmMKKworYXZhaGlfcmVmbGVjdG9yLWF2YWhpLXJlZmxlY3Rvci5vOiBhdmFoaS1yZWZsZWN0b3IuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX3JlZmxlY3Rvcl9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYXZhaGlfcmVmbGVjdG9yLWF2YWhpLXJlZmxlY3Rvci5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9hdmFoaV9yZWZsZWN0b3ItYXZhaGktcmVmbGVjdG9yLlRwbyAtYyAtbyBhdmFoaV9yZWZsZWN0b3ItYXZhaGktcmVmbGVjdG9yLm8gYHRlc3QgLWYgJ2F2YWhpLXJlZmxlY3Rvci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhdmFoaS1yZWZsZWN0b3IuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYXZhaGlfcmVmbGVjdG9yLWF2YWhpLXJlZmxlY3Rvci5UcG8gJChERVBESVIpL2F2YWhpX3JlZmxlY3Rvci1hdmFoaS1yZWZsZWN0b3IuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhdmFoaS1yZWZsZWN0b3IuYycgb2JqZWN0PSdhdmFoaV9yZWZsZWN0b3ItYXZhaGktcmVmbGVjdG9yLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX3JlZmxlY3Rvcl9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhdmFoaV9yZWZsZWN0b3ItYXZhaGktcmVmbGVjdG9yLm8gYHRlc3QgLWYgJ2F2YWhpLXJlZmxlY3Rvci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhdmFoaS1yZWZsZWN0b3IuYworCithdmFoaV9yZWZsZWN0b3ItYXZhaGktcmVmbGVjdG9yLm9iajogYXZhaGktcmVmbGVjdG9yLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9yZWZsZWN0b3JfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGF2YWhpX3JlZmxlY3Rvci1hdmFoaS1yZWZsZWN0b3Iub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9hdmFoaV9yZWZsZWN0b3ItYXZhaGktcmVmbGVjdG9yLlRwbyAtYyAtbyBhdmFoaV9yZWZsZWN0b3ItYXZhaGktcmVmbGVjdG9yLm9iaiBgaWYgdGVzdCAtZiAnYXZhaGktcmVmbGVjdG9yLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnYXZhaGktcmVmbGVjdG9yLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2F2YWhpLXJlZmxlY3Rvci5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9hdmFoaV9yZWZsZWN0b3ItYXZhaGktcmVmbGVjdG9yLlRwbyAkKERFUERJUikvYXZhaGlfcmVmbGVjdG9yLWF2YWhpLXJlZmxlY3Rvci5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2F2YWhpLXJlZmxlY3Rvci5jJyBvYmplY3Q9J2F2YWhpX3JlZmxlY3Rvci1hdmFoaS1yZWZsZWN0b3Iub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9yZWZsZWN0b3JfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYXZhaGlfcmVmbGVjdG9yLWF2YWhpLXJlZmxlY3Rvci5vYmogYGlmIHRlc3QgLWYgJ2F2YWhpLXJlZmxlY3Rvci5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2F2YWhpLXJlZmxlY3Rvci5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9hdmFoaS1yZWZsZWN0b3IuYyc7IGZpYAorCithdmFoaV90ZXN0LWF2YWhpLXRlc3QubzogYXZhaGktdGVzdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYXZhaGlfdGVzdC1hdmFoaS10ZXN0Lm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2F2YWhpX3Rlc3QtYXZhaGktdGVzdC5UcG8gLWMgLW8gYXZhaGlfdGVzdC1hdmFoaS10ZXN0Lm8gYHRlc3QgLWYgJ2F2YWhpLXRlc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXZhaGktdGVzdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9hdmFoaV90ZXN0LWF2YWhpLXRlc3QuVHBvICQoREVQRElSKS9hdmFoaV90ZXN0LWF2YWhpLXRlc3QuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhdmFoaS10ZXN0LmMnIG9iamVjdD0nYXZhaGlfdGVzdC1hdmFoaS10ZXN0Lm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYXZhaGlfdGVzdC1hdmFoaS10ZXN0Lm8gYHRlc3QgLWYgJ2F2YWhpLXRlc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXZhaGktdGVzdC5jCisKK2F2YWhpX3Rlc3QtYXZhaGktdGVzdC5vYmo6IGF2YWhpLXRlc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGF2YWhpX3Rlc3QtYXZhaGktdGVzdC5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2F2YWhpX3Rlc3QtYXZhaGktdGVzdC5UcG8gLWMgLW8gYXZhaGlfdGVzdC1hdmFoaS10ZXN0Lm9iaiBgaWYgdGVzdCAtZiAnYXZhaGktdGVzdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2F2YWhpLXRlc3QuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvYXZhaGktdGVzdC5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9hdmFoaV90ZXN0LWF2YWhpLXRlc3QuVHBvICQoREVQRElSKS9hdmFoaV90ZXN0LWF2YWhpLXRlc3QuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhdmFoaS10ZXN0LmMnIG9iamVjdD0nYXZhaGlfdGVzdC1hdmFoaS10ZXN0Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhdmFoaV90ZXN0LWF2YWhpLXRlc3Qub2JqIGBpZiB0ZXN0IC1mICdhdmFoaS10ZXN0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnYXZhaGktdGVzdC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9hdmFoaS10ZXN0LmMnOyBmaWAKKworY29uZm9ybWFuY2VfdGVzdC1jb25mb3JtYW5jZS10ZXN0Lm86IGNvbmZvcm1hbmNlLXRlc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGNvbmZvcm1hbmNlX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGNvbmZvcm1hbmNlX3Rlc3QtY29uZm9ybWFuY2UtdGVzdC5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9jb25mb3JtYW5jZV90ZXN0LWNvbmZvcm1hbmNlLXRlc3QuVHBvIC1jIC1vIGNvbmZvcm1hbmNlX3Rlc3QtY29uZm9ybWFuY2UtdGVzdC5vIGB0ZXN0IC1mICdjb25mb3JtYW5jZS10ZXN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGNvbmZvcm1hbmNlLXRlc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvY29uZm9ybWFuY2VfdGVzdC1jb25mb3JtYW5jZS10ZXN0LlRwbyAkKERFUERJUikvY29uZm9ybWFuY2VfdGVzdC1jb25mb3JtYW5jZS10ZXN0LlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nY29uZm9ybWFuY2UtdGVzdC5jJyBvYmplY3Q9J2NvbmZvcm1hbmNlX3Rlc3QtY29uZm9ybWFuY2UtdGVzdC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChjb25mb3JtYW5jZV90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGNvbmZvcm1hbmNlX3Rlc3QtY29uZm9ybWFuY2UtdGVzdC5vIGB0ZXN0IC1mICdjb25mb3JtYW5jZS10ZXN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGNvbmZvcm1hbmNlLXRlc3QuYworCitjb25mb3JtYW5jZV90ZXN0LWNvbmZvcm1hbmNlLXRlc3Qub2JqOiBjb25mb3JtYW5jZS10ZXN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChjb25mb3JtYW5jZV90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBjb25mb3JtYW5jZV90ZXN0LWNvbmZvcm1hbmNlLXRlc3Qub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9jb25mb3JtYW5jZV90ZXN0LWNvbmZvcm1hbmNlLXRlc3QuVHBvIC1jIC1vIGNvbmZvcm1hbmNlX3Rlc3QtY29uZm9ybWFuY2UtdGVzdC5vYmogYGlmIHRlc3QgLWYgJ2NvbmZvcm1hbmNlLXRlc3QuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdjb25mb3JtYW5jZS10ZXN0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2NvbmZvcm1hbmNlLXRlc3QuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvY29uZm9ybWFuY2VfdGVzdC1jb25mb3JtYW5jZS10ZXN0LlRwbyAkKERFUERJUikvY29uZm9ybWFuY2VfdGVzdC1jb25mb3JtYW5jZS10ZXN0LlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nY29uZm9ybWFuY2UtdGVzdC5jJyBvYmplY3Q9J2NvbmZvcm1hbmNlX3Rlc3QtY29uZm9ybWFuY2UtdGVzdC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGNvbmZvcm1hbmNlX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gY29uZm9ybWFuY2VfdGVzdC1jb25mb3JtYW5jZS10ZXN0Lm9iaiBgaWYgdGVzdCAtZiAnY29uZm9ybWFuY2UtdGVzdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2NvbmZvcm1hbmNlLXRlc3QuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvY29uZm9ybWFuY2UtdGVzdC5jJzsgZmlgCisKK2Ruc19zcGluX3Rlc3QtZG5zLXNwaW4tdGVzdC5vOiBkbnMtc3Bpbi10ZXN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChkbnNfc3Bpbl90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBkbnNfc3Bpbl90ZXN0LWRucy1zcGluLXRlc3QubyAtTUQgLU1QIC1NRiAkKERFUERJUikvZG5zX3NwaW5fdGVzdC1kbnMtc3Bpbi10ZXN0LlRwbyAtYyAtbyBkbnNfc3Bpbl90ZXN0LWRucy1zcGluLXRlc3QubyBgdGVzdCAtZiAnZG5zLXNwaW4tdGVzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BkbnMtc3Bpbi10ZXN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2Ruc19zcGluX3Rlc3QtZG5zLXNwaW4tdGVzdC5UcG8gJChERVBESVIpL2Ruc19zcGluX3Rlc3QtZG5zLXNwaW4tdGVzdC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2Rucy1zcGluLXRlc3QuYycgb2JqZWN0PSdkbnNfc3Bpbl90ZXN0LWRucy1zcGluLXRlc3QubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZG5zX3NwaW5fdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBkbnNfc3Bpbl90ZXN0LWRucy1zcGluLXRlc3QubyBgdGVzdCAtZiAnZG5zLXNwaW4tdGVzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BkbnMtc3Bpbi10ZXN0LmMKKworZG5zX3NwaW5fdGVzdC1kbnMtc3Bpbi10ZXN0Lm9iajogZG5zLXNwaW4tdGVzdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZG5zX3NwaW5fdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZG5zX3NwaW5fdGVzdC1kbnMtc3Bpbi10ZXN0Lm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvZG5zX3NwaW5fdGVzdC1kbnMtc3Bpbi10ZXN0LlRwbyAtYyAtbyBkbnNfc3Bpbl90ZXN0LWRucy1zcGluLXRlc3Qub2JqIGBpZiB0ZXN0IC1mICdkbnMtc3Bpbi10ZXN0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZG5zLXNwaW4tdGVzdC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9kbnMtc3Bpbi10ZXN0LmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2Ruc19zcGluX3Rlc3QtZG5zLXNwaW4tdGVzdC5UcG8gJChERVBESVIpL2Ruc19zcGluX3Rlc3QtZG5zLXNwaW4tdGVzdC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2Rucy1zcGluLXRlc3QuYycgb2JqZWN0PSdkbnNfc3Bpbl90ZXN0LWRucy1zcGluLXRlc3Qub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChkbnNfc3Bpbl90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGRuc19zcGluX3Rlc3QtZG5zLXNwaW4tdGVzdC5vYmogYGlmIHRlc3QgLWYgJ2Rucy1zcGluLXRlc3QuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdkbnMtc3Bpbi10ZXN0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2Rucy1zcGluLXRlc3QuYyc7IGZpYAorCitkbnNfdGVzdC1kbnMubzogZG5zLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChkbnNfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZG5zX3Rlc3QtZG5zLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2Ruc190ZXN0LWRucy5UcG8gLWMgLW8gZG5zX3Rlc3QtZG5zLm8gYHRlc3QgLWYgJ2Rucy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BkbnMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvZG5zX3Rlc3QtZG5zLlRwbyAkKERFUERJUikvZG5zX3Rlc3QtZG5zLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZG5zLmMnIG9iamVjdD0nZG5zX3Rlc3QtZG5zLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGRuc190ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGRuc190ZXN0LWRucy5vIGB0ZXN0IC1mICdkbnMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZG5zLmMKKworZG5zX3Rlc3QtZG5zLm9iajogZG5zLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChkbnNfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZG5zX3Rlc3QtZG5zLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvZG5zX3Rlc3QtZG5zLlRwbyAtYyAtbyBkbnNfdGVzdC1kbnMub2JqIGBpZiB0ZXN0IC1mICdkbnMuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdkbnMuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZG5zLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2Ruc190ZXN0LWRucy5UcG8gJChERVBESVIpL2Ruc190ZXN0LWRucy5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2Rucy5jJyBvYmplY3Q9J2Ruc190ZXN0LWRucy5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGRuc190ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGRuc190ZXN0LWRucy5vYmogYGlmIHRlc3QgLWYgJ2Rucy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2Rucy5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9kbnMuYyc7IGZpYAorCitkbnNfdGVzdC1kbnMtdGVzdC5vOiBkbnMtdGVzdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZG5zX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGRuc190ZXN0LWRucy10ZXN0Lm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2Ruc190ZXN0LWRucy10ZXN0LlRwbyAtYyAtbyBkbnNfdGVzdC1kbnMtdGVzdC5vIGB0ZXN0IC1mICdkbnMtdGVzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BkbnMtdGVzdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9kbnNfdGVzdC1kbnMtdGVzdC5UcG8gJChERVBESVIpL2Ruc190ZXN0LWRucy10ZXN0LlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZG5zLXRlc3QuYycgb2JqZWN0PSdkbnNfdGVzdC1kbnMtdGVzdC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChkbnNfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBkbnNfdGVzdC1kbnMtdGVzdC5vIGB0ZXN0IC1mICdkbnMtdGVzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BkbnMtdGVzdC5jCisKK2Ruc190ZXN0LWRucy10ZXN0Lm9iajogZG5zLXRlc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGRuc190ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBkbnNfdGVzdC1kbnMtdGVzdC5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2Ruc190ZXN0LWRucy10ZXN0LlRwbyAtYyAtbyBkbnNfdGVzdC1kbnMtdGVzdC5vYmogYGlmIHRlc3QgLWYgJ2Rucy10ZXN0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZG5zLXRlc3QuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZG5zLXRlc3QuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvZG5zX3Rlc3QtZG5zLXRlc3QuVHBvICQoREVQRElSKS9kbnNfdGVzdC1kbnMtdGVzdC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2Rucy10ZXN0LmMnIG9iamVjdD0nZG5zX3Rlc3QtZG5zLXRlc3Qub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChkbnNfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBkbnNfdGVzdC1kbnMtdGVzdC5vYmogYGlmIHRlc3QgLWYgJ2Rucy10ZXN0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZG5zLXRlc3QuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZG5zLXRlc3QuYyc7IGZpYAorCitkbnNfdGVzdC1sb2cubzogbG9nLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChkbnNfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZG5zX3Rlc3QtbG9nLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2Ruc190ZXN0LWxvZy5UcG8gLWMgLW8gZG5zX3Rlc3QtbG9nLm8gYHRlc3QgLWYgJ2xvZy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bsb2cuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvZG5zX3Rlc3QtbG9nLlRwbyAkKERFUERJUikvZG5zX3Rlc3QtbG9nLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nbG9nLmMnIG9iamVjdD0nZG5zX3Rlc3QtbG9nLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGRuc190ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGRuc190ZXN0LWxvZy5vIGB0ZXN0IC1mICdsb2cuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbG9nLmMKKworZG5zX3Rlc3QtbG9nLm9iajogbG9nLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChkbnNfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZG5zX3Rlc3QtbG9nLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvZG5zX3Rlc3QtbG9nLlRwbyAtYyAtbyBkbnNfdGVzdC1sb2cub2JqIGBpZiB0ZXN0IC1mICdsb2cuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdsb2cuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvbG9nLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2Ruc190ZXN0LWxvZy5UcG8gJChERVBESVIpL2Ruc190ZXN0LWxvZy5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2xvZy5jJyBvYmplY3Q9J2Ruc190ZXN0LWxvZy5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGRuc190ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGRuc190ZXN0LWxvZy5vYmogYGlmIHRlc3QgLWYgJ2xvZy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2xvZy5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9sb2cuYyc7IGZpYAorCitkbnNfdGVzdC11dGlsLm86IHV0aWwuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGRuc190ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBkbnNfdGVzdC11dGlsLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2Ruc190ZXN0LXV0aWwuVHBvIC1jIC1vIGRuc190ZXN0LXV0aWwubyBgdGVzdCAtZiAndXRpbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B1dGlsLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2Ruc190ZXN0LXV0aWwuVHBvICQoREVQRElSKS9kbnNfdGVzdC11dGlsLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ndXRpbC5jJyBvYmplY3Q9J2Ruc190ZXN0LXV0aWwubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZG5zX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZG5zX3Rlc3QtdXRpbC5vIGB0ZXN0IC1mICd1dGlsLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHV0aWwuYworCitkbnNfdGVzdC11dGlsLm9iajogdXRpbC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZG5zX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGRuc190ZXN0LXV0aWwub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9kbnNfdGVzdC11dGlsLlRwbyAtYyAtbyBkbnNfdGVzdC11dGlsLm9iaiBgaWYgdGVzdCAtZiAndXRpbC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3V0aWwuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvdXRpbC5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9kbnNfdGVzdC11dGlsLlRwbyAkKERFUERJUikvZG5zX3Rlc3QtdXRpbC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3V0aWwuYycgb2JqZWN0PSdkbnNfdGVzdC11dGlsLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZG5zX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZG5zX3Rlc3QtdXRpbC5vYmogYGlmIHRlc3QgLWYgJ3V0aWwuYyc7IHRoZW4gJChDWUdQQVRIX1cpICd1dGlsLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3V0aWwuYyc7IGZpYAorCitkbnNfdGVzdC1yci5vOiByci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZG5zX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGRuc190ZXN0LXJyLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2Ruc190ZXN0LXJyLlRwbyAtYyAtbyBkbnNfdGVzdC1yci5vIGB0ZXN0IC1mICdyci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Byci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9kbnNfdGVzdC1yci5UcG8gJChERVBESVIpL2Ruc190ZXN0LXJyLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ncnIuYycgb2JqZWN0PSdkbnNfdGVzdC1yci5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChkbnNfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBkbnNfdGVzdC1yci5vIGB0ZXN0IC1mICdyci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Byci5jCisKK2Ruc190ZXN0LXJyLm9iajogcnIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGRuc190ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBkbnNfdGVzdC1yci5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2Ruc190ZXN0LXJyLlRwbyAtYyAtbyBkbnNfdGVzdC1yci5vYmogYGlmIHRlc3QgLWYgJ3JyLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAncnIuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvcnIuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvZG5zX3Rlc3QtcnIuVHBvICQoREVQRElSKS9kbnNfdGVzdC1yci5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3JyLmMnIG9iamVjdD0nZG5zX3Rlc3QtcnIub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChkbnNfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBkbnNfdGVzdC1yci5vYmogYGlmIHRlc3QgLWYgJ3JyLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAncnIuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvcnIuYyc7IGZpYAorCitkbnNfdGVzdC1oYXNobWFwLm86IGhhc2htYXAuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGRuc190ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBkbnNfdGVzdC1oYXNobWFwLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2Ruc190ZXN0LWhhc2htYXAuVHBvIC1jIC1vIGRuc190ZXN0LWhhc2htYXAubyBgdGVzdCAtZiAnaGFzaG1hcC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BoYXNobWFwLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2Ruc190ZXN0LWhhc2htYXAuVHBvICQoREVQRElSKS9kbnNfdGVzdC1oYXNobWFwLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0naGFzaG1hcC5jJyBvYmplY3Q9J2Ruc190ZXN0LWhhc2htYXAubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZG5zX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZG5zX3Rlc3QtaGFzaG1hcC5vIGB0ZXN0IC1mICdoYXNobWFwLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGhhc2htYXAuYworCitkbnNfdGVzdC1oYXNobWFwLm9iajogaGFzaG1hcC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZG5zX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGRuc190ZXN0LWhhc2htYXAub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9kbnNfdGVzdC1oYXNobWFwLlRwbyAtYyAtbyBkbnNfdGVzdC1oYXNobWFwLm9iaiBgaWYgdGVzdCAtZiAnaGFzaG1hcC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2hhc2htYXAuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvaGFzaG1hcC5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9kbnNfdGVzdC1oYXNobWFwLlRwbyAkKERFUERJUikvZG5zX3Rlc3QtaGFzaG1hcC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2hhc2htYXAuYycgb2JqZWN0PSdkbnNfdGVzdC1oYXNobWFwLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZG5zX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZG5zX3Rlc3QtaGFzaG1hcC5vYmogYGlmIHRlc3QgLWYgJ2hhc2htYXAuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdoYXNobWFwLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2hhc2htYXAuYyc7IGZpYAorCitkbnNfdGVzdC1kb21haW4tdXRpbC5vOiBkb21haW4tdXRpbC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZG5zX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGRuc190ZXN0LWRvbWFpbi11dGlsLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2Ruc190ZXN0LWRvbWFpbi11dGlsLlRwbyAtYyAtbyBkbnNfdGVzdC1kb21haW4tdXRpbC5vIGB0ZXN0IC1mICdkb21haW4tdXRpbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bkb21haW4tdXRpbC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9kbnNfdGVzdC1kb21haW4tdXRpbC5UcG8gJChERVBESVIpL2Ruc190ZXN0LWRvbWFpbi11dGlsLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZG9tYWluLXV0aWwuYycgb2JqZWN0PSdkbnNfdGVzdC1kb21haW4tdXRpbC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChkbnNfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBkbnNfdGVzdC1kb21haW4tdXRpbC5vIGB0ZXN0IC1mICdkb21haW4tdXRpbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bkb21haW4tdXRpbC5jCisKK2Ruc190ZXN0LWRvbWFpbi11dGlsLm9iajogZG9tYWluLXV0aWwuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGRuc190ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBkbnNfdGVzdC1kb21haW4tdXRpbC5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2Ruc190ZXN0LWRvbWFpbi11dGlsLlRwbyAtYyAtbyBkbnNfdGVzdC1kb21haW4tdXRpbC5vYmogYGlmIHRlc3QgLWYgJ2RvbWFpbi11dGlsLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZG9tYWluLXV0aWwuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZG9tYWluLXV0aWwuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvZG5zX3Rlc3QtZG9tYWluLXV0aWwuVHBvICQoREVQRElSKS9kbnNfdGVzdC1kb21haW4tdXRpbC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2RvbWFpbi11dGlsLmMnIG9iamVjdD0nZG5zX3Rlc3QtZG9tYWluLXV0aWwub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChkbnNfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBkbnNfdGVzdC1kb21haW4tdXRpbC5vYmogYGlmIHRlc3QgLWYgJ2RvbWFpbi11dGlsLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZG9tYWluLXV0aWwuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZG9tYWluLXV0aWwuYyc7IGZpYAorCitkbnNfdGVzdC1hZGRyLXV0aWwubzogYWRkci11dGlsLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChkbnNfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZG5zX3Rlc3QtYWRkci11dGlsLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2Ruc190ZXN0LWFkZHItdXRpbC5UcG8gLWMgLW8gZG5zX3Rlc3QtYWRkci11dGlsLm8gYHRlc3QgLWYgJ2FkZHItdXRpbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhZGRyLXV0aWwuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvZG5zX3Rlc3QtYWRkci11dGlsLlRwbyAkKERFUERJUikvZG5zX3Rlc3QtYWRkci11dGlsLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYWRkci11dGlsLmMnIG9iamVjdD0nZG5zX3Rlc3QtYWRkci11dGlsLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGRuc190ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGRuc190ZXN0LWFkZHItdXRpbC5vIGB0ZXN0IC1mICdhZGRyLXV0aWwuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYWRkci11dGlsLmMKKworZG5zX3Rlc3QtYWRkci11dGlsLm9iajogYWRkci11dGlsLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChkbnNfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZG5zX3Rlc3QtYWRkci11dGlsLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvZG5zX3Rlc3QtYWRkci11dGlsLlRwbyAtYyAtbyBkbnNfdGVzdC1hZGRyLXV0aWwub2JqIGBpZiB0ZXN0IC1mICdhZGRyLXV0aWwuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdhZGRyLXV0aWwuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvYWRkci11dGlsLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2Ruc190ZXN0LWFkZHItdXRpbC5UcG8gJChERVBESVIpL2Ruc190ZXN0LWFkZHItdXRpbC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2FkZHItdXRpbC5jJyBvYmplY3Q9J2Ruc190ZXN0LWFkZHItdXRpbC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGRuc190ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGRuc190ZXN0LWFkZHItdXRpbC5vYmogYGlmIHRlc3QgLWYgJ2FkZHItdXRpbC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2FkZHItdXRpbC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9hZGRyLXV0aWwuYyc7IGZpYAorCitoYXNobWFwX3Rlc3QtaGFzaG1hcC10ZXN0Lm86IGhhc2htYXAtdGVzdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoaGFzaG1hcF90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBoYXNobWFwX3Rlc3QtaGFzaG1hcC10ZXN0Lm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2hhc2htYXBfdGVzdC1oYXNobWFwLXRlc3QuVHBvIC1jIC1vIGhhc2htYXBfdGVzdC1oYXNobWFwLXRlc3QubyBgdGVzdCAtZiAnaGFzaG1hcC10ZXN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGhhc2htYXAtdGVzdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9oYXNobWFwX3Rlc3QtaGFzaG1hcC10ZXN0LlRwbyAkKERFUERJUikvaGFzaG1hcF90ZXN0LWhhc2htYXAtdGVzdC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2hhc2htYXAtdGVzdC5jJyBvYmplY3Q9J2hhc2htYXBfdGVzdC1oYXNobWFwLXRlc3QubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoaGFzaG1hcF90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGhhc2htYXBfdGVzdC1oYXNobWFwLXRlc3QubyBgdGVzdCAtZiAnaGFzaG1hcC10ZXN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGhhc2htYXAtdGVzdC5jCisKK2hhc2htYXBfdGVzdC1oYXNobWFwLXRlc3Qub2JqOiBoYXNobWFwLXRlc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGhhc2htYXBfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgaGFzaG1hcF90ZXN0LWhhc2htYXAtdGVzdC5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2hhc2htYXBfdGVzdC1oYXNobWFwLXRlc3QuVHBvIC1jIC1vIGhhc2htYXBfdGVzdC1oYXNobWFwLXRlc3Qub2JqIGBpZiB0ZXN0IC1mICdoYXNobWFwLXRlc3QuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdoYXNobWFwLXRlc3QuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvaGFzaG1hcC10ZXN0LmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2hhc2htYXBfdGVzdC1oYXNobWFwLXRlc3QuVHBvICQoREVQRElSKS9oYXNobWFwX3Rlc3QtaGFzaG1hcC10ZXN0LlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0naGFzaG1hcC10ZXN0LmMnIG9iamVjdD0naGFzaG1hcF90ZXN0LWhhc2htYXAtdGVzdC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGhhc2htYXBfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBoYXNobWFwX3Rlc3QtaGFzaG1hcC10ZXN0Lm9iaiBgaWYgdGVzdCAtZiAnaGFzaG1hcC10ZXN0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnaGFzaG1hcC10ZXN0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2hhc2htYXAtdGVzdC5jJzsgZmlgCisKK2hhc2htYXBfdGVzdC1oYXNobWFwLm86IGhhc2htYXAuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGhhc2htYXBfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgaGFzaG1hcF90ZXN0LWhhc2htYXAubyAtTUQgLU1QIC1NRiAkKERFUERJUikvaGFzaG1hcF90ZXN0LWhhc2htYXAuVHBvIC1jIC1vIGhhc2htYXBfdGVzdC1oYXNobWFwLm8gYHRlc3QgLWYgJ2hhc2htYXAuYycgfHwgZWNobyAnJChzcmNkaXIpLydgaGFzaG1hcC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9oYXNobWFwX3Rlc3QtaGFzaG1hcC5UcG8gJChERVBESVIpL2hhc2htYXBfdGVzdC1oYXNobWFwLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0naGFzaG1hcC5jJyBvYmplY3Q9J2hhc2htYXBfdGVzdC1oYXNobWFwLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGhhc2htYXBfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBoYXNobWFwX3Rlc3QtaGFzaG1hcC5vIGB0ZXN0IC1mICdoYXNobWFwLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGhhc2htYXAuYworCitoYXNobWFwX3Rlc3QtaGFzaG1hcC5vYmo6IGhhc2htYXAuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGhhc2htYXBfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgaGFzaG1hcF90ZXN0LWhhc2htYXAub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9oYXNobWFwX3Rlc3QtaGFzaG1hcC5UcG8gLWMgLW8gaGFzaG1hcF90ZXN0LWhhc2htYXAub2JqIGBpZiB0ZXN0IC1mICdoYXNobWFwLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnaGFzaG1hcC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9oYXNobWFwLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2hhc2htYXBfdGVzdC1oYXNobWFwLlRwbyAkKERFUERJUikvaGFzaG1hcF90ZXN0LWhhc2htYXAuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdoYXNobWFwLmMnIG9iamVjdD0naGFzaG1hcF90ZXN0LWhhc2htYXAub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChoYXNobWFwX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gaGFzaG1hcF90ZXN0LWhhc2htYXAub2JqIGBpZiB0ZXN0IC1mICdoYXNobWFwLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnaGFzaG1hcC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9oYXNobWFwLmMnOyBmaWAKKworaGFzaG1hcF90ZXN0LXV0aWwubzogdXRpbC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoaGFzaG1hcF90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBoYXNobWFwX3Rlc3QtdXRpbC5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9oYXNobWFwX3Rlc3QtdXRpbC5UcG8gLWMgLW8gaGFzaG1hcF90ZXN0LXV0aWwubyBgdGVzdCAtZiAndXRpbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B1dGlsLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2hhc2htYXBfdGVzdC11dGlsLlRwbyAkKERFUERJUikvaGFzaG1hcF90ZXN0LXV0aWwuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSd1dGlsLmMnIG9iamVjdD0naGFzaG1hcF90ZXN0LXV0aWwubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoaGFzaG1hcF90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGhhc2htYXBfdGVzdC11dGlsLm8gYHRlc3QgLWYgJ3V0aWwuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdXRpbC5jCisKK2hhc2htYXBfdGVzdC11dGlsLm9iajogdXRpbC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoaGFzaG1hcF90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBoYXNobWFwX3Rlc3QtdXRpbC5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2hhc2htYXBfdGVzdC11dGlsLlRwbyAtYyAtbyBoYXNobWFwX3Rlc3QtdXRpbC5vYmogYGlmIHRlc3QgLWYgJ3V0aWwuYyc7IHRoZW4gJChDWUdQQVRIX1cpICd1dGlsLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3V0aWwuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvaGFzaG1hcF90ZXN0LXV0aWwuVHBvICQoREVQRElSKS9oYXNobWFwX3Rlc3QtdXRpbC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3V0aWwuYycgb2JqZWN0PSdoYXNobWFwX3Rlc3QtdXRpbC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGhhc2htYXBfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBoYXNobWFwX3Rlc3QtdXRpbC5vYmogYGlmIHRlc3QgLWYgJ3V0aWwuYyc7IHRoZW4gJChDWUdQQVRIX1cpICd1dGlsLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3V0aWwuYyc7IGZpYAorCitwcmlvcV90ZXN0LXByaW9xLXRlc3QubzogcHJpb3EtdGVzdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocHJpb3FfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgcHJpb3FfdGVzdC1wcmlvcS10ZXN0Lm8gLU1EIC1NUCAtTUYgJChERVBESVIpL3ByaW9xX3Rlc3QtcHJpb3EtdGVzdC5UcG8gLWMgLW8gcHJpb3FfdGVzdC1wcmlvcS10ZXN0Lm8gYHRlc3QgLWYgJ3ByaW9xLXRlc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgcHJpb3EtdGVzdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9wcmlvcV90ZXN0LXByaW9xLXRlc3QuVHBvICQoREVQRElSKS9wcmlvcV90ZXN0LXByaW9xLXRlc3QuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdwcmlvcS10ZXN0LmMnIG9iamVjdD0ncHJpb3FfdGVzdC1wcmlvcS10ZXN0Lm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHByaW9xX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gcHJpb3FfdGVzdC1wcmlvcS10ZXN0Lm8gYHRlc3QgLWYgJ3ByaW9xLXRlc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgcHJpb3EtdGVzdC5jCisKK3ByaW9xX3Rlc3QtcHJpb3EtdGVzdC5vYmo6IHByaW9xLXRlc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHByaW9xX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHByaW9xX3Rlc3QtcHJpb3EtdGVzdC5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL3ByaW9xX3Rlc3QtcHJpb3EtdGVzdC5UcG8gLWMgLW8gcHJpb3FfdGVzdC1wcmlvcS10ZXN0Lm9iaiBgaWYgdGVzdCAtZiAncHJpb3EtdGVzdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3ByaW9xLXRlc3QuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvcHJpb3EtdGVzdC5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9wcmlvcV90ZXN0LXByaW9xLXRlc3QuVHBvICQoREVQRElSKS9wcmlvcV90ZXN0LXByaW9xLXRlc3QuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdwcmlvcS10ZXN0LmMnIG9iamVjdD0ncHJpb3FfdGVzdC1wcmlvcS10ZXN0Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocHJpb3FfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBwcmlvcV90ZXN0LXByaW9xLXRlc3Qub2JqIGBpZiB0ZXN0IC1mICdwcmlvcS10ZXN0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAncHJpb3EtdGVzdC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9wcmlvcS10ZXN0LmMnOyBmaWAKKworcHJpb3FfdGVzdC1wcmlvcS5vOiBwcmlvcS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocHJpb3FfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgcHJpb3FfdGVzdC1wcmlvcS5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9wcmlvcV90ZXN0LXByaW9xLlRwbyAtYyAtbyBwcmlvcV90ZXN0LXByaW9xLm8gYHRlc3QgLWYgJ3ByaW9xLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHByaW9xLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3ByaW9xX3Rlc3QtcHJpb3EuVHBvICQoREVQRElSKS9wcmlvcV90ZXN0LXByaW9xLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ncHJpb3EuYycgb2JqZWN0PSdwcmlvcV90ZXN0LXByaW9xLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHByaW9xX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gcHJpb3FfdGVzdC1wcmlvcS5vIGB0ZXN0IC1mICdwcmlvcS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BwcmlvcS5jCisKK3ByaW9xX3Rlc3QtcHJpb3Eub2JqOiBwcmlvcS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocHJpb3FfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgcHJpb3FfdGVzdC1wcmlvcS5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL3ByaW9xX3Rlc3QtcHJpb3EuVHBvIC1jIC1vIHByaW9xX3Rlc3QtcHJpb3Eub2JqIGBpZiB0ZXN0IC1mICdwcmlvcS5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3ByaW9xLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3ByaW9xLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3ByaW9xX3Rlc3QtcHJpb3EuVHBvICQoREVQRElSKS9wcmlvcV90ZXN0LXByaW9xLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ncHJpb3EuYycgb2JqZWN0PSdwcmlvcV90ZXN0LXByaW9xLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocHJpb3FfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBwcmlvcV90ZXN0LXByaW9xLm9iaiBgaWYgdGVzdCAtZiAncHJpb3EuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdwcmlvcS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9wcmlvcS5jJzsgZmlgCisKK3F1ZXJpZXJfdGVzdC1xdWVyaWVyLXRlc3QubzogcXVlcmllci10ZXN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChxdWVyaWVyX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHF1ZXJpZXJfdGVzdC1xdWVyaWVyLXRlc3QubyAtTUQgLU1QIC1NRiAkKERFUERJUikvcXVlcmllcl90ZXN0LXF1ZXJpZXItdGVzdC5UcG8gLWMgLW8gcXVlcmllcl90ZXN0LXF1ZXJpZXItdGVzdC5vIGB0ZXN0IC1mICdxdWVyaWVyLXRlc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgcXVlcmllci10ZXN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3F1ZXJpZXJfdGVzdC1xdWVyaWVyLXRlc3QuVHBvICQoREVQRElSKS9xdWVyaWVyX3Rlc3QtcXVlcmllci10ZXN0LlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ncXVlcmllci10ZXN0LmMnIG9iamVjdD0ncXVlcmllcl90ZXN0LXF1ZXJpZXItdGVzdC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChxdWVyaWVyX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gcXVlcmllcl90ZXN0LXF1ZXJpZXItdGVzdC5vIGB0ZXN0IC1mICdxdWVyaWVyLXRlc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgcXVlcmllci10ZXN0LmMKKworcXVlcmllcl90ZXN0LXF1ZXJpZXItdGVzdC5vYmo6IHF1ZXJpZXItdGVzdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocXVlcmllcl90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBxdWVyaWVyX3Rlc3QtcXVlcmllci10ZXN0Lm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvcXVlcmllcl90ZXN0LXF1ZXJpZXItdGVzdC5UcG8gLWMgLW8gcXVlcmllcl90ZXN0LXF1ZXJpZXItdGVzdC5vYmogYGlmIHRlc3QgLWYgJ3F1ZXJpZXItdGVzdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3F1ZXJpZXItdGVzdC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9xdWVyaWVyLXRlc3QuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvcXVlcmllcl90ZXN0LXF1ZXJpZXItdGVzdC5UcG8gJChERVBESVIpL3F1ZXJpZXJfdGVzdC1xdWVyaWVyLXRlc3QuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdxdWVyaWVyLXRlc3QuYycgb2JqZWN0PSdxdWVyaWVyX3Rlc3QtcXVlcmllci10ZXN0Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocXVlcmllcl90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHF1ZXJpZXJfdGVzdC1xdWVyaWVyLXRlc3Qub2JqIGBpZiB0ZXN0IC1mICdxdWVyaWVyLXRlc3QuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdxdWVyaWVyLXRlc3QuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvcXVlcmllci10ZXN0LmMnOyBmaWAKKwordGltZWV2ZW50cV90ZXN0LXRpbWVldmVudHEtdGVzdC5vOiB0aW1lZXZlbnRxLXRlc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHRpbWVldmVudHFfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgdGltZWV2ZW50cV90ZXN0LXRpbWVldmVudHEtdGVzdC5vIC1NRCAtTVAgLU1GICQoREVQRElSKS90aW1lZXZlbnRxX3Rlc3QtdGltZWV2ZW50cS10ZXN0LlRwbyAtYyAtbyB0aW1lZXZlbnRxX3Rlc3QtdGltZWV2ZW50cS10ZXN0Lm8gYHRlc3QgLWYgJ3RpbWVldmVudHEtdGVzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B0aW1lZXZlbnRxLXRlc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvdGltZWV2ZW50cV90ZXN0LXRpbWVldmVudHEtdGVzdC5UcG8gJChERVBESVIpL3RpbWVldmVudHFfdGVzdC10aW1lZXZlbnRxLXRlc3QuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSd0aW1lZXZlbnRxLXRlc3QuYycgb2JqZWN0PSd0aW1lZXZlbnRxX3Rlc3QtdGltZWV2ZW50cS10ZXN0Lm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHRpbWVldmVudHFfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyB0aW1lZXZlbnRxX3Rlc3QtdGltZWV2ZW50cS10ZXN0Lm8gYHRlc3QgLWYgJ3RpbWVldmVudHEtdGVzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B0aW1lZXZlbnRxLXRlc3QuYworCit0aW1lZXZlbnRxX3Rlc3QtdGltZWV2ZW50cS10ZXN0Lm9iajogdGltZWV2ZW50cS10ZXN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh0aW1lZXZlbnRxX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHRpbWVldmVudHFfdGVzdC10aW1lZXZlbnRxLXRlc3Qub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS90aW1lZXZlbnRxX3Rlc3QtdGltZWV2ZW50cS10ZXN0LlRwbyAtYyAtbyB0aW1lZXZlbnRxX3Rlc3QtdGltZWV2ZW50cS10ZXN0Lm9iaiBgaWYgdGVzdCAtZiAndGltZWV2ZW50cS10ZXN0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAndGltZWV2ZW50cS10ZXN0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3RpbWVldmVudHEtdGVzdC5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS90aW1lZXZlbnRxX3Rlc3QtdGltZWV2ZW50cS10ZXN0LlRwbyAkKERFUERJUikvdGltZWV2ZW50cV90ZXN0LXRpbWVldmVudHEtdGVzdC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3RpbWVldmVudHEtdGVzdC5jJyBvYmplY3Q9J3RpbWVldmVudHFfdGVzdC10aW1lZXZlbnRxLXRlc3Qub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh0aW1lZXZlbnRxX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gdGltZWV2ZW50cV90ZXN0LXRpbWVldmVudHEtdGVzdC5vYmogYGlmIHRlc3QgLWYgJ3RpbWVldmVudHEtdGVzdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3RpbWVldmVudHEtdGVzdC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS90aW1lZXZlbnRxLXRlc3QuYyc7IGZpYAorCit0aW1lZXZlbnRxX3Rlc3QtdGltZWV2ZW50cS5vOiB0aW1lZXZlbnRxLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh0aW1lZXZlbnRxX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHRpbWVldmVudHFfdGVzdC10aW1lZXZlbnRxLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL3RpbWVldmVudHFfdGVzdC10aW1lZXZlbnRxLlRwbyAtYyAtbyB0aW1lZXZlbnRxX3Rlc3QtdGltZWV2ZW50cS5vIGB0ZXN0IC1mICd0aW1lZXZlbnRxLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHRpbWVldmVudHEuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvdGltZWV2ZW50cV90ZXN0LXRpbWVldmVudHEuVHBvICQoREVQRElSKS90aW1lZXZlbnRxX3Rlc3QtdGltZWV2ZW50cS5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3RpbWVldmVudHEuYycgb2JqZWN0PSd0aW1lZXZlbnRxX3Rlc3QtdGltZWV2ZW50cS5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh0aW1lZXZlbnRxX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gdGltZWV2ZW50cV90ZXN0LXRpbWVldmVudHEubyBgdGVzdCAtZiAndGltZWV2ZW50cS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B0aW1lZXZlbnRxLmMKKwordGltZWV2ZW50cV90ZXN0LXRpbWVldmVudHEub2JqOiB0aW1lZXZlbnRxLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh0aW1lZXZlbnRxX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHRpbWVldmVudHFfdGVzdC10aW1lZXZlbnRxLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvdGltZWV2ZW50cV90ZXN0LXRpbWVldmVudHEuVHBvIC1jIC1vIHRpbWVldmVudHFfdGVzdC10aW1lZXZlbnRxLm9iaiBgaWYgdGVzdCAtZiAndGltZWV2ZW50cS5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3RpbWVldmVudHEuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvdGltZWV2ZW50cS5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS90aW1lZXZlbnRxX3Rlc3QtdGltZWV2ZW50cS5UcG8gJChERVBESVIpL3RpbWVldmVudHFfdGVzdC10aW1lZXZlbnRxLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ndGltZWV2ZW50cS5jJyBvYmplY3Q9J3RpbWVldmVudHFfdGVzdC10aW1lZXZlbnRxLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQodGltZWV2ZW50cV90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHRpbWVldmVudHFfdGVzdC10aW1lZXZlbnRxLm9iaiBgaWYgdGVzdCAtZiAndGltZWV2ZW50cS5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3RpbWVldmVudHEuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvdGltZWV2ZW50cS5jJzsgZmlgCisKK3RpbWVldmVudHFfdGVzdC1wcmlvcS5vOiBwcmlvcS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQodGltZWV2ZW50cV90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCB0aW1lZXZlbnRxX3Rlc3QtcHJpb3EubyAtTUQgLU1QIC1NRiAkKERFUERJUikvdGltZWV2ZW50cV90ZXN0LXByaW9xLlRwbyAtYyAtbyB0aW1lZXZlbnRxX3Rlc3QtcHJpb3EubyBgdGVzdCAtZiAncHJpb3EuYycgfHwgZWNobyAnJChzcmNkaXIpLydgcHJpb3EuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvdGltZWV2ZW50cV90ZXN0LXByaW9xLlRwbyAkKERFUERJUikvdGltZWV2ZW50cV90ZXN0LXByaW9xLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ncHJpb3EuYycgb2JqZWN0PSd0aW1lZXZlbnRxX3Rlc3QtcHJpb3EubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQodGltZWV2ZW50cV90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHRpbWVldmVudHFfdGVzdC1wcmlvcS5vIGB0ZXN0IC1mICdwcmlvcS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BwcmlvcS5jCisKK3RpbWVldmVudHFfdGVzdC1wcmlvcS5vYmo6IHByaW9xLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh0aW1lZXZlbnRxX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHRpbWVldmVudHFfdGVzdC1wcmlvcS5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL3RpbWVldmVudHFfdGVzdC1wcmlvcS5UcG8gLWMgLW8gdGltZWV2ZW50cV90ZXN0LXByaW9xLm9iaiBgaWYgdGVzdCAtZiAncHJpb3EuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdwcmlvcS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9wcmlvcS5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS90aW1lZXZlbnRxX3Rlc3QtcHJpb3EuVHBvICQoREVQRElSKS90aW1lZXZlbnRxX3Rlc3QtcHJpb3EuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdwcmlvcS5jJyBvYmplY3Q9J3RpbWVldmVudHFfdGVzdC1wcmlvcS5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHRpbWVldmVudHFfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyB0aW1lZXZlbnRxX3Rlc3QtcHJpb3Eub2JqIGBpZiB0ZXN0IC1mICdwcmlvcS5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3ByaW9xLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3ByaW9xLmMnOyBmaWAKKwordGltZWV2ZW50cV90ZXN0LWxvZy5vOiBsb2cuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHRpbWVldmVudHFfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgdGltZWV2ZW50cV90ZXN0LWxvZy5vIC1NRCAtTVAgLU1GICQoREVQRElSKS90aW1lZXZlbnRxX3Rlc3QtbG9nLlRwbyAtYyAtbyB0aW1lZXZlbnRxX3Rlc3QtbG9nLm8gYHRlc3QgLWYgJ2xvZy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bsb2cuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvdGltZWV2ZW50cV90ZXN0LWxvZy5UcG8gJChERVBESVIpL3RpbWVldmVudHFfdGVzdC1sb2cuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdsb2cuYycgb2JqZWN0PSd0aW1lZXZlbnRxX3Rlc3QtbG9nLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHRpbWVldmVudHFfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyB0aW1lZXZlbnRxX3Rlc3QtbG9nLm8gYHRlc3QgLWYgJ2xvZy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bsb2cuYworCit0aW1lZXZlbnRxX3Rlc3QtbG9nLm9iajogbG9nLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh0aW1lZXZlbnRxX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHRpbWVldmVudHFfdGVzdC1sb2cub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS90aW1lZXZlbnRxX3Rlc3QtbG9nLlRwbyAtYyAtbyB0aW1lZXZlbnRxX3Rlc3QtbG9nLm9iaiBgaWYgdGVzdCAtZiAnbG9nLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnbG9nLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2xvZy5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS90aW1lZXZlbnRxX3Rlc3QtbG9nLlRwbyAkKERFUERJUikvdGltZWV2ZW50cV90ZXN0LWxvZy5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2xvZy5jJyBvYmplY3Q9J3RpbWVldmVudHFfdGVzdC1sb2cub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh0aW1lZXZlbnRxX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gdGltZWV2ZW50cV90ZXN0LWxvZy5vYmogYGlmIHRlc3QgLWYgJ2xvZy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2xvZy5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9sb2cuYyc7IGZpYAorCit1cGRhdGVfdGVzdC11cGRhdGUtdGVzdC5vOiB1cGRhdGUtdGVzdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQodXBkYXRlX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHVwZGF0ZV90ZXN0LXVwZGF0ZS10ZXN0Lm8gLU1EIC1NUCAtTUYgJChERVBESVIpL3VwZGF0ZV90ZXN0LXVwZGF0ZS10ZXN0LlRwbyAtYyAtbyB1cGRhdGVfdGVzdC11cGRhdGUtdGVzdC5vIGB0ZXN0IC1mICd1cGRhdGUtdGVzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B1cGRhdGUtdGVzdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS91cGRhdGVfdGVzdC11cGRhdGUtdGVzdC5UcG8gJChERVBESVIpL3VwZGF0ZV90ZXN0LXVwZGF0ZS10ZXN0LlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ndXBkYXRlLXRlc3QuYycgb2JqZWN0PSd1cGRhdGVfdGVzdC11cGRhdGUtdGVzdC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh1cGRhdGVfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyB1cGRhdGVfdGVzdC11cGRhdGUtdGVzdC5vIGB0ZXN0IC1mICd1cGRhdGUtdGVzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B1cGRhdGUtdGVzdC5jCisKK3VwZGF0ZV90ZXN0LXVwZGF0ZS10ZXN0Lm9iajogdXBkYXRlLXRlc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHVwZGF0ZV90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCB1cGRhdGVfdGVzdC11cGRhdGUtdGVzdC5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL3VwZGF0ZV90ZXN0LXVwZGF0ZS10ZXN0LlRwbyAtYyAtbyB1cGRhdGVfdGVzdC11cGRhdGUtdGVzdC5vYmogYGlmIHRlc3QgLWYgJ3VwZGF0ZS10ZXN0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAndXBkYXRlLXRlc3QuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvdXBkYXRlLXRlc3QuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvdXBkYXRlX3Rlc3QtdXBkYXRlLXRlc3QuVHBvICQoREVQRElSKS91cGRhdGVfdGVzdC11cGRhdGUtdGVzdC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3VwZGF0ZS10ZXN0LmMnIG9iamVjdD0ndXBkYXRlX3Rlc3QtdXBkYXRlLXRlc3Qub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh1cGRhdGVfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyB1cGRhdGVfdGVzdC11cGRhdGUtdGVzdC5vYmogYGlmIHRlc3QgLWYgJ3VwZGF0ZS10ZXN0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAndXBkYXRlLXRlc3QuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvdXBkYXRlLXRlc3QuYyc7IGZpYAorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworaW5zdGFsbC1hdmFoaWluY2x1ZGVIRUFERVJTOiAkKGF2YWhpaW5jbHVkZV9IRUFERVJTKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQoYXZhaGlpbmNsdWRlZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQoYXZhaGlpbmNsdWRlZGlyKSIKKwlAbGlzdD0nJChhdmFoaWluY2x1ZGVfSEVBREVSUyknOyB0ZXN0IC1uICIkKGF2YWhpaW5jbHVkZWRpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAorCSAgZWNobyAiJCRkJCRwIjsgXAorCWRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAorCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKKwkgIGVjaG8gIiAkKElOU1RBTExfSEVBREVSKSAkJGZpbGVzICckKERFU1RESVIpJChhdmFoaWluY2x1ZGVkaXIpJyI7IFwKKwkgICQoSU5TVEFMTF9IRUFERVIpICQkZmlsZXMgIiQoREVTVERJUikkKGF2YWhpaW5jbHVkZWRpcikiIHx8IGV4aXQgJCQ/OyBcCisJZG9uZQorCit1bmluc3RhbGwtYXZhaGlpbmNsdWRlSEVBREVSUzoKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKGF2YWhpaW5jbHVkZV9IRUFERVJTKSc7IHRlc3QgLW4gIiQoYXZhaGlpbmNsdWRlZGlyKSIgfHwgbGlzdD07IFwKKwlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IHNlZCAtZSAnc3xeLiovfHwnYDsgXAorCWRpcj0nJChERVNURElSKSQoYXZhaGlpbmNsdWRlZGlyKSc7ICQoYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpcikKKworSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlta2lkIC1mSUQgJCR1bmlxdWUKK3RhZ3M6IFRBR1MKKworVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlzZXQgeDsgXAorCWhlcmU9YHB3ZGA7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJc2hpZnQ7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKKwkgIGVsc2UgXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgJCR1bmlxdWU7IFwKKwkgIGZpOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAorCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorCSAgICAgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKKworY2hlY2stVEVTVFM6ICQoVEVTVFMpCisJQGZhaWxlZD0wOyBhbGw9MDsgeGZhaWw9MDsgeHBhc3M9MDsgc2tpcD0wOyBcCisJc3JjZGlyPSQoc3JjZGlyKTsgZXhwb3J0IHNyY2RpcjsgXAorCWxpc3Q9JyAkKFRFU1RTKSAnOyBcCisJJChhbV9fdHR5X2NvbG9ycyk7IFwKKwlpZiB0ZXN0IC1uICIkJGxpc3QiOyB0aGVuIFwKKwkgIGZvciB0c3QgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgLi8kJHRzdDsgdGhlbiBkaXI9Li87IFwKKwkgICAgZWxpZiB0ZXN0IC1mICQkdHN0OyB0aGVuIGRpcj07IFwKKwkgICAgZWxzZSBkaXI9IiQoc3JjZGlyKS8iOyBmaTsgXAorCSAgICBpZiAkKFRFU1RTX0VOVklST05NRU5UKSAkJHtkaXJ9JCR0c3Q7IHRoZW4gXAorCSAgICAgIGFsbD1gZXhwciAkJGFsbCArIDFgOyBcCisJICAgICAgY2FzZSAiICQoWEZBSUxfVEVTVFMpICIgaW4gXAorCSAgICAgICpbXCBcCV0kJHRzdFtcIFwJXSopIFwKKwkJeHBhc3M9YGV4cHIgJCR4cGFzcyArIDFgOyBcCisJCWZhaWxlZD1gZXhwciAkJGZhaWxlZCArIDFgOyBcCisJCWNvbD0kJHJlZDsgcmVzPVhQQVNTOyBcCisJICAgICAgOzsgXAorCSAgICAgICopIFwKKwkJY29sPSQkZ3JuOyByZXM9UEFTUzsgXAorCSAgICAgIDs7IFwKKwkgICAgICBlc2FjOyBcCisJICAgIGVsaWYgdGVzdCAkJD8gLW5lIDc3OyB0aGVuIFwKKwkgICAgICBhbGw9YGV4cHIgJCRhbGwgKyAxYDsgXAorCSAgICAgIGNhc2UgIiAkKFhGQUlMX1RFU1RTKSAiIGluIFwKKwkgICAgICAqW1wgXAldJCR0c3RbXCBcCV0qKSBcCisJCXhmYWlsPWBleHByICQkeGZhaWwgKyAxYDsgXAorCQljb2w9JCRsZ247IHJlcz1YRkFJTDsgXAorCSAgICAgIDs7IFwKKwkgICAgICAqKSBcCisJCWZhaWxlZD1gZXhwciAkJGZhaWxlZCArIDFgOyBcCisJCWNvbD0kJHJlZDsgcmVzPUZBSUw7IFwKKwkgICAgICA7OyBcCisJICAgICAgZXNhYzsgXAorCSAgICBlbHNlIFwKKwkgICAgICBza2lwPWBleHByICQkc2tpcCArIDFgOyBcCisJICAgICAgY29sPSQkYmx1OyByZXM9U0tJUDsgXAorCSAgICBmaTsgXAorCSAgICBlY2hvICIkJHtjb2x9JCRyZXMkJHtzdGR9OiAkJHRzdCI7IFwKKwkgIGRvbmU7IFwKKwkgIGlmIHRlc3QgIiQkYWxsIiAtZXEgMTsgdGhlbiBcCisJICAgIHRlc3RzPSJ0ZXN0IjsgXAorCSAgICBBbGw9IiI7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0cz0idGVzdHMiOyBcCisJICAgIEFsbD0iQWxsICI7IFwKKwkgIGZpOyBcCisJICBpZiB0ZXN0ICIkJGZhaWxlZCIgLWVxIDA7IHRoZW4gXAorCSAgICBpZiB0ZXN0ICIkJHhmYWlsIiAtZXEgMDsgdGhlbiBcCisJICAgICAgYmFubmVyPSIkJEFsbCQkYWxsICQkdGVzdHMgcGFzc2VkIjsgXAorCSAgICBlbHNlIFwKKwkgICAgICBpZiB0ZXN0ICIkJHhmYWlsIiAtZXEgMTsgdGhlbiBmYWlsdXJlcz1mYWlsdXJlOyBlbHNlIGZhaWx1cmVzPWZhaWx1cmVzOyBmaTsgXAorCSAgICAgIGJhbm5lcj0iJCRBbGwkJGFsbCAkJHRlc3RzIGJlaGF2ZWQgYXMgZXhwZWN0ZWQgKCQkeGZhaWwgZXhwZWN0ZWQgJCRmYWlsdXJlcykiOyBcCisJICAgIGZpOyBcCisJICBlbHNlIFwKKwkgICAgaWYgdGVzdCAiJCR4cGFzcyIgLWVxIDA7IHRoZW4gXAorCSAgICAgIGJhbm5lcj0iJCRmYWlsZWQgb2YgJCRhbGwgJCR0ZXN0cyBmYWlsZWQiOyBcCisJICAgIGVsc2UgXAorCSAgICAgIGlmIHRlc3QgIiQkeHBhc3MiIC1lcSAxOyB0aGVuIHBhc3Nlcz1wYXNzOyBlbHNlIHBhc3Nlcz1wYXNzZXM7IGZpOyBcCisJICAgICAgYmFubmVyPSIkJGZhaWxlZCBvZiAkJGFsbCAkJHRlc3RzIGRpZCBub3QgYmVoYXZlIGFzIGV4cGVjdGVkICgkJHhwYXNzIHVuZXhwZWN0ZWQgJCRwYXNzZXMpIjsgXAorCSAgICBmaTsgXAorCSAgZmk7IFwKKwkgIGRhc2hlcz0iJCRiYW5uZXIiOyBcCisJICBza2lwcGVkPSIiOyBcCisJICBpZiB0ZXN0ICIkJHNraXAiIC1uZSAwOyB0aGVuIFwKKwkgICAgaWYgdGVzdCAiJCRza2lwIiAtZXEgMTsgdGhlbiBcCisJICAgICAgc2tpcHBlZD0iKCQkc2tpcCB0ZXN0IHdhcyBub3QgcnVuKSI7IFwKKwkgICAgZWxzZSBcCisJICAgICAgc2tpcHBlZD0iKCQkc2tpcCB0ZXN0cyB3ZXJlIG5vdCBydW4pIjsgXAorCSAgICBmaTsgXAorCSAgICB0ZXN0IGBlY2hvICIkJHNraXBwZWQiIHwgd2MgLWNgIC1sZSBgZWNobyAiJCRiYW5uZXIiIHwgd2MgLWNgIHx8IFwKKwkgICAgICBkYXNoZXM9IiQkc2tpcHBlZCI7IFwKKwkgIGZpOyBcCisJICByZXBvcnQ9IiI7IFwKKwkgIGlmIHRlc3QgIiQkZmFpbGVkIiAtbmUgMCAmJiB0ZXN0IC1uICIkKFBBQ0tBR0VfQlVHUkVQT1JUKSI7IHRoZW4gXAorCSAgICByZXBvcnQ9IlBsZWFzZSByZXBvcnQgdG8gJChQQUNLQUdFX0JVR1JFUE9SVCkiOyBcCisJICAgIHRlc3QgYGVjaG8gIiQkcmVwb3J0IiB8IHdjIC1jYCAtbGUgYGVjaG8gIiQkYmFubmVyIiB8IHdjIC1jYCB8fCBcCisJICAgICAgZGFzaGVzPSIkJHJlcG9ydCI7IFwKKwkgIGZpOyBcCisJICBkYXNoZXM9YGVjaG8gIiQkZGFzaGVzIiB8IHNlZCBzLy4vPS9nYDsgXAorCSAgaWYgdGVzdCAiJCRmYWlsZWQiIC1lcSAwOyB0aGVuIFwKKwkgICAgY29sPSIkJGdybiI7IFwKKwkgIGVsc2UgXAorCSAgICBjb2w9IiQkcmVkIjsgXAorCSAgZmk7IFwKKwkgIGVjaG8gIiQke2NvbH0kJGRhc2hlcyQke3N0ZH0iOyBcCisJICBlY2hvICIkJHtjb2x9JCRiYW5uZXIkJHtzdGR9IjsgXAorCSAgdGVzdCAteiAiJCRza2lwcGVkIiB8fCBlY2hvICIkJHtjb2x9JCRza2lwcGVkJCR7c3RkfSI7IFwKKwkgIHRlc3QgLXogIiQkcmVwb3J0IiB8fCBlY2hvICIkJHtjb2x9JCRyZXBvcnQkJHtzdGR9IjsgXAorCSAgZWNobyAiJCR7Y29sfSQkZGFzaGVzJCR7c3RkfSI7IFwKKwkgIHRlc3QgIiQkZmFpbGVkIiAtZXEgMDsgXAorCWVsc2UgOjsgZmkKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY2hlY2stVEVTVFMKK2NoZWNrOiBjaGVjay1hbQorYWxsLWFtOiBNYWtlZmlsZSAkKExUTElCUkFSSUVTKSAkKFBST0dSQU1TKSAkKEhFQURFUlMpCitpbnN0YWxsZGlyczoKKwlmb3IgZGlyIGluICIkKERFU1RESVIpJChsaWJkaXIpIiAiJChERVNURElSKSQoYXZhaGlpbmNsdWRlZGlyKSI7IGRvIFwKKwkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKE1LRElSX1ApICIkJGRpciI7IFwKKwlkb25lCitpbnN0YWxsOiBpbnN0YWxsLWFtCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KK3VuaW5zdGFsbDogdW5pbnN0YWxsLWFtCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCitpbnN0YWxsLXN0cmlwOgorCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgICAgICBpbnN0YWxsOyBcCisJZWxzZSBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKKwlmaQorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYkxUTElCUkFSSUVTIGNsZWFuLWxpYnRvb2wgXAorCWNsZWFuLW5vaW5zdFBST0dSQU1TIG1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLWF2YWhpaW5jbHVkZUhFQURFUlMKKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCisKK2luc3RhbGwtZHZpLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06IGluc3RhbGwtbGliTFRMSUJSQVJJRVMKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtYXZhaGlpbmNsdWRlSEVBREVSUyB1bmluc3RhbGwtbGliTFRMSUJSQVJJRVMKKworLk1BS0U6IGNoZWNrLWFtIGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAorCisuUEhPTlk6IENUQUdTIEdUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stVEVTVFMgY2hlY2stYW0gY2xlYW4gXAorCWNsZWFuLWdlbmVyaWMgY2xlYW4tbGliTFRMSUJSQVJJRVMgY2xlYW4tbGlidG9vbCBcCisJY2xlYW4tbm9pbnN0UFJPR1JBTVMgY3RhZ3MgZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIFwKKwlkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBcCisJZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIFwKKwlpbnN0YWxsLWF2YWhpaW5jbHVkZUhFQURFUlMgaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBcCisJaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBcCisJaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIFwKKwlpbnN0YWxsLWxpYkxUTElCUkFSSUVTIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKKwlpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgXAorCWluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIFwKKwltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBcCisJbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAorCXRhZ3MgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSB1bmluc3RhbGwtYXZhaGlpbmNsdWRlSEVBREVSUyBcCisJdW5pbnN0YWxsLWxpYkxUTElCUkFSSUVTCisKKwordmFsZ3JpbmQ6IGF2YWhpLXRlc3QKKwlsaWJ0b29sIC0tbW9kZT1leGVjdXRlIHZhbGdyaW5kIC4vYXZhaGktdGVzdAorCitnZGI6IGF2YWhpLXRlc3QKKwlsaWJ0b29sIC0tbW9kZT1leGVjdXRlIGdkYiAuL2F2YWhpLXRlc3QKKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvYWRkci11dGlsLmMgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9hZGRyLXV0aWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzliMWI3Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvYWRkci11dGlsLmMKQEAgLTAsMCArMSw5NCBAQAorLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorCisjaW5jbHVkZSAiYWRkci11dGlsLmgiCisKK0F2YWhpQWRkcmVzcyAqYXZhaGlfYWRkcmVzc19mcm9tX3NvY2thZGRyKGNvbnN0IHN0cnVjdCBzb2NrYWRkciogc2EsIEF2YWhpQWRkcmVzcyAqcmV0X2FkZHIpIHsKKyAgICBhc3NlcnQoc2EpOworICAgIGFzc2VydChyZXRfYWRkcik7CisKKyAgICBhc3NlcnQoc2EtPnNhX2ZhbWlseSA9PSBBRl9JTkVUIHx8IHNhLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpOworCisgICAgcmV0X2FkZHItPnByb3RvID0gYXZhaGlfYWZfdG9fcHJvdG8oc2EtPnNhX2ZhbWlseSk7CisKKyAgICBpZiAoc2EtPnNhX2ZhbWlseSA9PSBBRl9JTkVUKQorICAgICAgICBtZW1jcHkoJnJldF9hZGRyLT5kYXRhLmlwdjQsICYoKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiopIHNhKS0+c2luX2FkZHIsIHNpemVvZihyZXRfYWRkci0+ZGF0YS5pcHY0KSk7CisgICAgZWxzZQorICAgICAgICBtZW1jcHkoJnJldF9hZGRyLT5kYXRhLmlwdjYsICYoKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYqKSBzYSktPnNpbjZfYWRkciwgc2l6ZW9mKHJldF9hZGRyLT5kYXRhLmlwdjYpKTsKKworICAgIHJldHVybiByZXRfYWRkcjsKK30KKwordWludDE2X3QgYXZhaGlfcG9ydF9mcm9tX3NvY2thZGRyKGNvbnN0IHN0cnVjdCBzb2NrYWRkciogc2EpIHsKKyAgICBhc3NlcnQoc2EpOworCisgICAgYXNzZXJ0KHNhLT5zYV9mYW1pbHkgPT0gQUZfSU5FVCB8fCBzYS0+c2FfZmFtaWx5ID09IEFGX0lORVQ2KTsKKworICAgIGlmIChzYS0+c2FfZmFtaWx5ID09IEFGX0lORVQpCisgICAgICAgIHJldHVybiBudG9ocygoKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiopIHNhKS0+c2luX3BvcnQpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIG50b2hzKCgoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiopIHNhKS0+c2luNl9wb3J0KTsKK30KKworaW50IGF2YWhpX2FkZHJlc3NfaXNfaXB2NF9pbl9pcHY2KGNvbnN0IEF2YWhpQWRkcmVzcyAqYSkgeworCisgICAgc3RhdGljIGNvbnN0IHVpbnQ4X3QgaXB2NF9pbl9pcHY2W10gPSB7CisgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYKKyAgICB9OworCisgICAgYXNzZXJ0KGEpOworCisgICAgaWYgKGEtPnByb3RvICE9IEFWQUhJX1BST1RPX0lORVQ2KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBtZW1jbXAoYS0+ZGF0YS5pcHY2LmFkZHJlc3MsIGlwdjRfaW5faXB2Niwgc2l6ZW9mKGlwdjRfaW5faXB2NikpID09IDA7Cit9CisKKyNkZWZpbmUgSVBWNExMX05FVFdPUksgMHhBOUZFMDAwMEwKKyNkZWZpbmUgSVBWNExMX05FVE1BU0sgMHhGRkZGMDAwMEwKKyNkZWZpbmUgSVBWNkxMX05FVFdPUksgMHhGRTgwCisjZGVmaW5lIElQVjZMTF9ORVRNQVNLIDB4RkZDMAorCitpbnQgYXZhaGlfYWRkcmVzc19pc19saW5rX2xvY2FsKGNvbnN0IEF2YWhpQWRkcmVzcyAqYSkgeworICAgIGFzc2VydChhKTsKKworICAgIGlmIChhLT5wcm90byA9PSBBVkFISV9QUk9UT19JTkVUKSB7CisgICAgICAgIHVpbnQzMl90IG4gPSBudG9obChhLT5kYXRhLmlwdjQuYWRkcmVzcyk7CisgICAgICAgIHJldHVybiAobiAmIElQVjRMTF9ORVRNQVNLKSA9PSBJUFY0TExfTkVUV09SSzsKKyAgICB9CisgICAgZWxzZSBpZiAoYS0+cHJvdG8gPT0gQVZBSElfUFJPVE9fSU5FVDYpIHsKKyAgICAgICAgdW5zaWduZWQgbiA9IChhLT5kYXRhLmlwdjYuYWRkcmVzc1swXSA8PCA4KSB8IChhLT5kYXRhLmlwdjYuYWRkcmVzc1sxXSA8PCAwKTsKKyAgICAgICAgcmV0dXJuIChuICYgSVBWNkxMX05FVE1BU0spID09IElQVjZMTF9ORVRXT1JLOworICAgIH0KKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvYWRkci11dGlsLmggYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9hZGRyLXV0aWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmE5NDIyCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvYWRkci11dGlsLmgKQEAgLTAsMCArMSw0NyBAQAorI2lmbmRlZiBmb29hZGRydXRpbGhmb28KKyNkZWZpbmUgZm9vYWRkcnV0aWxoZm9vCisKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2luY2x1ZGUgPGludHR5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2NkZWNsLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2FkZHJlc3MuaD4KKworQVZBSElfQ19ERUNMX0JFR0lOCisKKy8qKiBNYWtlIGFuIGFkZHJlc3Mgc3RydWN0dHVyZSBvZiBhIHNvY2thZGRyIHN0cnVjdHVyZSAqLworQXZhaGlBZGRyZXNzICphdmFoaV9hZGRyZXNzX2Zyb21fc29ja2FkZHIoY29uc3Qgc3RydWN0IHNvY2thZGRyKiBzYSwgQXZhaGlBZGRyZXNzICpyZXRfYWRkcik7CisKKy8qKiBSZXR1cm4gdGhlIHBvcnQgbnVtYmVyIG9mIGEgc29ja2FkZHIgc3RydWN0dXJlIChlaXRoZXIgSVB2NCBvciBJUHY2KSAqLwordWludDE2X3QgYXZhaGlfcG9ydF9mcm9tX3NvY2thZGRyKGNvbnN0IHN0cnVjdCBzb2NrYWRkciogc2EpOworCisvKiogQ2hlY2sgd2hldGhlciB0aGUgc3BlY2lmaWVkIElQdjYgYWRkcmVzcyBpcyBpbiBmYWN0IGFuCisgKiBlbmNhcHN1bGF0ZWQgSVB2NCBhZGRyZXNzLCByZXR1cm5zIDEgaWYgeWVzLCAwIG90aGVyd2lzZSAqLworaW50IGF2YWhpX2FkZHJlc3NfaXNfaXB2NF9pbl9pcHY2KGNvbnN0IEF2YWhpQWRkcmVzcyAqYSk7CisKKy8qKiBDaGVjayB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyBpcyBhIGxpbmstbG9jYWwgSVB2NCBvciBJUHY2IGFkZHJlc3M7CisgKiByZXR1cm5zIDEgaWYgeWVzLCAwIG90aGVyd2lzZSAqLworaW50IGF2YWhpX2FkZHJlc3NfaXNfbGlua19sb2NhbChjb25zdCBBdmFoaUFkZHJlc3MgKmEpOworCitBVkFISV9DX0RFQ0xfRU5ECisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvYW5ub3VuY2UuYyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL2Fubm91bmNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NkYmYxNQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL2Fubm91bmNlLmMKQEAgLTAsMCArMSw1MjQgQEAKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vdGltZXZhbC5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9tYWxsb2MuaD4KKworI2luY2x1ZGUgImFubm91bmNlLmgiCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAicnItdXRpbC5oIgorCisjZGVmaW5lIEFWQUhJX0FOTk9VTkNFTUVOVF9KSVRURVJfTVNFQyAyNTAKKyNkZWZpbmUgQVZBSElfUFJPQkVfSklUVEVSX01TRUMgMjUwCisjZGVmaW5lIEFWQUhJX1BST0JFX0lOVEVSVkFMX01TRUMgMjUwCisKK3N0YXRpYyB2b2lkIHJlbW92ZV9hbm5vdW5jZXIoQXZhaGlTZXJ2ZXIgKnMsIEF2YWhpQW5ub3VuY2VyICphKSB7CisgICAgYXNzZXJ0KHMpOworICAgIGFzc2VydChhKTsKKworICAgIGlmIChhLT50aW1lX2V2ZW50KQorICAgICAgICBhdmFoaV90aW1lX2V2ZW50X2ZyZWUoYS0+dGltZV9ldmVudCk7CisKKyAgICBBVkFISV9MTElTVF9SRU1PVkUoQXZhaGlBbm5vdW5jZXIsIGJ5X2ludGVyZmFjZSwgYS0+aW50ZXJmYWNlLT5hbm5vdW5jZXJzLCBhKTsKKyAgICBBVkFISV9MTElTVF9SRU1PVkUoQXZhaGlBbm5vdW5jZXIsIGJ5X2VudHJ5LCBhLT5lbnRyeS0+YW5ub3VuY2VycywgYSk7CisKKyAgICBhdmFoaV9mcmVlKGEpOworfQorCitzdGF0aWMgdm9pZCBlbGFwc2VfYW5ub3VuY2UoQXZhaGlUaW1lRXZlbnQgKmUsIHZvaWQgKnVzZXJkYXRhKTsKKworc3RhdGljIHZvaWQgc2V0X3RpbWVvdXQoQXZhaGlBbm5vdW5jZXIgKmEsIGNvbnN0IHN0cnVjdCB0aW1ldmFsICp0dikgeworICAgIGFzc2VydChhKTsKKworICAgIGlmICghdHYpIHsKKyAgICAgICAgaWYgKGEtPnRpbWVfZXZlbnQpIHsKKyAgICAgICAgICAgIGF2YWhpX3RpbWVfZXZlbnRfZnJlZShhLT50aW1lX2V2ZW50KTsKKyAgICAgICAgICAgIGEtPnRpbWVfZXZlbnQgPSBOVUxMOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKworICAgICAgICBpZiAoYS0+dGltZV9ldmVudCkKKyAgICAgICAgICAgIGF2YWhpX3RpbWVfZXZlbnRfdXBkYXRlKGEtPnRpbWVfZXZlbnQsIHR2KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYS0+dGltZV9ldmVudCA9IGF2YWhpX3RpbWVfZXZlbnRfbmV3KGEtPnNlcnZlci0+dGltZV9ldmVudF9xdWV1ZSwgdHYsIGVsYXBzZV9hbm5vdW5jZSwgYSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBuZXh0X3N0YXRlKEF2YWhpQW5ub3VuY2VyICphKTsKKwordm9pZCBhdmFoaV9zX2VudHJ5X2dyb3VwX2NoZWNrX3Byb2JlZChBdmFoaVNFbnRyeUdyb3VwICpnLCBpbnQgaW1tZWRpYXRlbHkpIHsKKyAgICBBdmFoaUVudHJ5ICplOworICAgIGFzc2VydChnKTsKKyAgICBhc3NlcnQoIWctPmRlYWQpOworCisgICAgLyogQ2hlY2sgd2hldGhlciBhbGwgZ3JvdXAgbWVtYmVycyBoYXZlIGJlZW4gcHJvYmVkICovCisKKyAgICBpZiAoZy0+c3RhdGUgIT0gQVZBSElfRU5UUllfR1JPVVBfUkVHSVNURVJJTkcgfHwgZy0+bl9wcm9iaW5nID4gMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXZhaGlfc19lbnRyeV9ncm91cF9jaGFuZ2Vfc3RhdGUoZywgQVZBSElfRU5UUllfR1JPVVBfRVNUQUJMSVNIRUQpOworCisgICAgaWYgKGctPmRlYWQpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoZSA9IGctPmVudHJpZXM7IGU7IGUgPSBlLT5ieV9ncm91cF9uZXh0KSB7CisgICAgICAgIEF2YWhpQW5ub3VuY2VyICphOworCisgICAgICAgIGZvciAoYSA9IGUtPmFubm91bmNlcnM7IGE7IGEgPSBhLT5ieV9lbnRyeV9uZXh0KSB7CisKKyAgICAgICAgICAgIGlmIChhLT5zdGF0ZSAhPSBBVkFISV9XQUlUSU5HKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBhLT5zdGF0ZSA9IEFWQUhJX0FOTk9VTkNJTkc7CisKKyAgICAgICAgICAgIGlmIChpbW1lZGlhdGVseSkgeworICAgICAgICAgICAgICAgIC8qIFNob3J0Y3V0ICovCisKKyAgICAgICAgICAgICAgICBhLT5uX2l0ZXJhdGlvbiA9IDE7CisgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZShhKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgdHY7CisgICAgICAgICAgICAgICAgYS0+bl9pdGVyYXRpb24gPSAwOworICAgICAgICAgICAgICAgIGF2YWhpX2VsYXBzZV90aW1lKCZ0diwgMCwgQVZBSElfQU5OT1VOQ0VNRU5UX0pJVFRFUl9NU0VDKTsKKyAgICAgICAgICAgICAgICBzZXRfdGltZW91dChhLCAmdHYpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBuZXh0X3N0YXRlKEF2YWhpQW5ub3VuY2VyICphKSB7CisgICAgYXNzZXJ0KGEpOworCisgICAgaWYgKGEtPnN0YXRlID09IEFWQUhJX1dBSVRJTkcpIHsKKworICAgICAgICBhc3NlcnQoYS0+ZW50cnktPmdyb3VwKTsKKworICAgICAgICBhdmFoaV9zX2VudHJ5X2dyb3VwX2NoZWNrX3Byb2JlZChhLT5lbnRyeS0+Z3JvdXAsIDEpOworCisgICAgfSBlbHNlIGlmIChhLT5zdGF0ZSA9PSBBVkFISV9QUk9CSU5HKSB7CisKKyAgICAgICAgaWYgKGEtPm5faXRlcmF0aW9uID49IDQpIHsKKyAgICAgICAgICAgIC8qIFByb2JpbmcgZG9uZSAqLworCisgICAgICAgICAgICBpZiAoYS0+ZW50cnktPmdyb3VwKSB7CisgICAgICAgICAgICAgICAgYXNzZXJ0KGEtPmVudHJ5LT5ncm91cC0+bl9wcm9iaW5nKTsKKyAgICAgICAgICAgICAgICBhLT5lbnRyeS0+Z3JvdXAtPm5fcHJvYmluZy0tOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoYS0+ZW50cnktPmdyb3VwICYmIGEtPmVudHJ5LT5ncm91cC0+c3RhdGUgPT0gQVZBSElfRU5UUllfR1JPVVBfUkVHSVNURVJJTkcpCisgICAgICAgICAgICAgICAgYS0+c3RhdGUgPSBBVkFISV9XQUlUSU5HOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgYS0+c3RhdGUgPSBBVkFISV9BTk5PVU5DSU5HOworICAgICAgICAgICAgICAgIGEtPm5faXRlcmF0aW9uID0gMTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2V0X3RpbWVvdXQoYSwgTlVMTCk7CisgICAgICAgICAgICBuZXh0X3N0YXRlKGEpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgdHY7CisKKyAgICAgICAgICAgIGF2YWhpX2ludGVyZmFjZV9wb3N0X3Byb2JlKGEtPmludGVyZmFjZSwgYS0+ZW50cnktPnJlY29yZCwgMCk7CisKKyAgICAgICAgICAgIGF2YWhpX2VsYXBzZV90aW1lKCZ0diwgQVZBSElfUFJPQkVfSU5URVJWQUxfTVNFQywgMCk7CisgICAgICAgICAgICBzZXRfdGltZW91dChhLCAmdHYpOworCisgICAgICAgICAgICBhLT5uX2l0ZXJhdGlvbisrOworICAgICAgICB9CisKKyAgICB9IGVsc2UgaWYgKGEtPnN0YXRlID09IEFWQUhJX0FOTk9VTkNJTkcpIHsKKworICAgICAgICBpZiAoYS0+ZW50cnktPmZsYWdzICYgQVZBSElfUFVCTElTSF9VTklRVUUpCisgICAgICAgICAgICAvKiBTZW5kIHRoZSB3aG9sZSBycnNldCBhdCBvbmNlICovCisgICAgICAgICAgICBhdmFoaV9zZXJ2ZXJfcHJlcGFyZV9tYXRjaGluZ19yZXNwb25zZXMoYS0+c2VydmVyLCBhLT5pbnRlcmZhY2UsIGEtPmVudHJ5LT5yZWNvcmQtPmtleSwgMCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGF2YWhpX3NlcnZlcl9wcmVwYXJlX3Jlc3BvbnNlKGEtPnNlcnZlciwgYS0+aW50ZXJmYWNlLCBhLT5lbnRyeSwgMCwgMCk7CisKKyAgICAgICAgYXZhaGlfc2VydmVyX2dlbmVyYXRlX3Jlc3BvbnNlKGEtPnNlcnZlciwgYS0+aW50ZXJmYWNlLCBOVUxMLCBOVUxMLCAwLCAwLCAwKTsKKworICAgICAgICBpZiAoKythLT5uX2l0ZXJhdGlvbiA+PSA0KSB7CisgICAgICAgICAgICAvKiBBbm5vdW5jaW5nIGRvbmUgKi8KKworICAgICAgICAgICAgYS0+c3RhdGUgPSBBVkFISV9FU1RBQkxJU0hFRDsKKworICAgICAgICAgICAgc2V0X3RpbWVvdXQoYSwgTlVMTCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCB0djsKKyAgICAgICAgICAgIGF2YWhpX2VsYXBzZV90aW1lKCZ0diwgYS0+c2VjX2RlbGF5KjEwMDAsIEFWQUhJX0FOTk9VTkNFTUVOVF9KSVRURVJfTVNFQyk7CisKKyAgICAgICAgICAgIGlmIChhLT5uX2l0ZXJhdGlvbiA8IDEwKQorICAgICAgICAgICAgICAgIGEtPnNlY19kZWxheSAqPSAyOworCisgICAgICAgICAgICBzZXRfdGltZW91dChhLCAmdHYpOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBlbGFwc2VfYW5ub3VuY2UoQXZhaGlUaW1lRXZlbnQgKmUsIHZvaWQgKnVzZXJkYXRhKSB7CisgICAgYXNzZXJ0KGUpOworCisgICAgbmV4dF9zdGF0ZSh1c2VyZGF0YSk7Cit9CisKK3N0YXRpYyBBdmFoaUFubm91bmNlciAqZ2V0X2Fubm91bmNlcihBdmFoaVNlcnZlciAqcywgQXZhaGlFbnRyeSAqZSwgQXZhaGlJbnRlcmZhY2UgKmkpIHsKKyAgICBBdmFoaUFubm91bmNlciAqYTsKKworICAgIGFzc2VydChzKTsKKyAgICBhc3NlcnQoZSk7CisgICAgYXNzZXJ0KGkpOworCisgICAgZm9yIChhID0gZS0+YW5ub3VuY2VyczsgYTsgYSA9IGEtPmJ5X2VudHJ5X25leHQpCisgICAgICAgIGlmIChhLT5pbnRlcmZhY2UgPT0gaSkKKyAgICAgICAgICAgIHJldHVybiBhOworCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGdvX3RvX2luaXRpYWxfc3RhdGUoQXZhaGlBbm5vdW5jZXIgKmEpIHsKKyAgICBBdmFoaUVudHJ5ICplOworICAgIHN0cnVjdCB0aW1ldmFsIHR2OworCisgICAgYXNzZXJ0KGEpOworICAgIGUgPSBhLT5lbnRyeTsKKworICAgIGlmICgoZS0+ZmxhZ3MgJiBBVkFISV9QVUJMSVNIX1VOSVFVRSkgJiYgIShlLT5mbGFncyAmIEFWQUhJX1BVQkxJU0hfTk9fUFJPQkUpKQorICAgICAgICBhLT5zdGF0ZSA9IEFWQUhJX1BST0JJTkc7CisgICAgZWxzZSBpZiAoIShlLT5mbGFncyAmIEFWQUhJX1BVQkxJU0hfTk9fQU5OT1VOQ0UpKSB7CisKKyAgICAgICAgaWYgKCFlLT5ncm91cCB8fCBlLT5ncm91cC0+c3RhdGUgPT0gQVZBSElfRU5UUllfR1JPVVBfRVNUQUJMSVNIRUQpCisgICAgICAgICAgICBhLT5zdGF0ZSA9IEFWQUhJX0FOTk9VTkNJTkc7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGEtPnN0YXRlID0gQVZBSElfV0FJVElORzsKKworICAgIH0gZWxzZQorICAgICAgICBhLT5zdGF0ZSA9IEFWQUhJX0VTVEFCTElTSEVEOworCisgICAgYS0+bl9pdGVyYXRpb24gPSAxOworICAgIGEtPnNlY19kZWxheSA9IDE7CisKKyAgICBpZiAoYS0+c3RhdGUgPT0gQVZBSElfUFJPQklORyAmJiBlLT5ncm91cCkKKyAgICAgICAgZS0+Z3JvdXAtPm5fcHJvYmluZysrOworCisgICAgaWYgKGEtPnN0YXRlID09IEFWQUhJX1BST0JJTkcpCisgICAgICAgIHNldF90aW1lb3V0KGEsIGF2YWhpX2VsYXBzZV90aW1lKCZ0diwgMCwgQVZBSElfUFJPQkVfSklUVEVSX01TRUMpKTsKKyAgICBlbHNlIGlmIChhLT5zdGF0ZSA9PSBBVkFISV9BTk5PVU5DSU5HKQorICAgICAgICBzZXRfdGltZW91dChhLCBhdmFoaV9lbGFwc2VfdGltZSgmdHYsIDAsIEFWQUhJX0FOTk9VTkNFTUVOVF9KSVRURVJfTVNFQykpOworICAgIGVsc2UKKyAgICAgICAgc2V0X3RpbWVvdXQoYSwgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIG5ld19hbm5vdW5jZXIoQXZhaGlTZXJ2ZXIgKnMsIEF2YWhpSW50ZXJmYWNlICppLCBBdmFoaUVudHJ5ICplKSB7CisgICAgQXZhaGlBbm5vdW5jZXIgKmE7CisKKyAgICBhc3NlcnQocyk7CisgICAgYXNzZXJ0KGkpOworICAgIGFzc2VydChlKTsKKyAgICBhc3NlcnQoIWUtPmRlYWQpOworCisgICAgaWYgKCFhdmFoaV9pbnRlcmZhY2VfbWF0Y2goaSwgZS0+aW50ZXJmYWNlLCBlLT5wcm90b2NvbCkgfHwgIWktPmFubm91bmNpbmcgfHwgIWF2YWhpX2VudHJ5X2lzX2NvbW1pdGVkKGUpKQorICAgICAgICByZXR1cm47CisKKyAgICAvKiBXZSBkb24ndCB3YW50IGR1cGxpY2F0ZSBhbm5vdW5jZXJzICovCisgICAgaWYgKGdldF9hbm5vdW5jZXIocywgZSwgaSkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICgoIShhID0gYXZhaGlfbmV3KEF2YWhpQW5ub3VuY2VyLCAxKSkpKSB7CisgICAgICAgIGF2YWhpX2xvZ19lcnJvcihfX0ZJTEVfXyI6IE91dCBvZiBtZW1vcnkuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhLT5zZXJ2ZXIgPSBzOworICAgIGEtPmludGVyZmFjZSA9IGk7CisgICAgYS0+ZW50cnkgPSBlOworICAgIGEtPnRpbWVfZXZlbnQgPSBOVUxMOworCisgICAgQVZBSElfTExJU1RfUFJFUEVORChBdmFoaUFubm91bmNlciwgYnlfaW50ZXJmYWNlLCBpLT5hbm5vdW5jZXJzLCBhKTsKKyAgICBBVkFISV9MTElTVF9QUkVQRU5EKEF2YWhpQW5ub3VuY2VyLCBieV9lbnRyeSwgZS0+YW5ub3VuY2VycywgYSk7CisKKyAgICBnb190b19pbml0aWFsX3N0YXRlKGEpOworfQorCit2b2lkIGF2YWhpX2Fubm91bmNlX2ludGVyZmFjZShBdmFoaVNlcnZlciAqcywgQXZhaGlJbnRlcmZhY2UgKmkpIHsKKyAgICBBdmFoaUVudHJ5ICplOworCisgICAgYXNzZXJ0KHMpOworICAgIGFzc2VydChpKTsKKworICAgIGlmICghaS0+YW5ub3VuY2luZykKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChlID0gcy0+ZW50cmllczsgZTsgZSA9IGUtPmVudHJpZXNfbmV4dCkKKyAgICAgICAgaWYgKCFlLT5kZWFkKQorICAgICAgICAgICAgbmV3X2Fubm91bmNlcihzLCBpLCBlKTsKK30KKworc3RhdGljIHZvaWQgYW5ub3VuY2Vfd2Fsa19jYWxsYmFjayhBdmFoaUludGVyZmFjZU1vbml0b3IgKm0sIEF2YWhpSW50ZXJmYWNlICppLCB2b2lkKiB1c2VyZGF0YSkgeworICAgIEF2YWhpRW50cnkgKmUgPSB1c2VyZGF0YTsKKworICAgIGFzc2VydChtKTsKKyAgICBhc3NlcnQoaSk7CisgICAgYXNzZXJ0KGUpOworICAgIGFzc2VydCghZS0+ZGVhZCk7CisKKyAgICBuZXdfYW5ub3VuY2VyKG0tPnNlcnZlciwgaSwgZSk7Cit9CisKK3ZvaWQgYXZhaGlfYW5ub3VuY2VfZW50cnkoQXZhaGlTZXJ2ZXIgKnMsIEF2YWhpRW50cnkgKmUpIHsKKyAgICBhc3NlcnQocyk7CisgICAgYXNzZXJ0KGUpOworICAgIGFzc2VydCghZS0+ZGVhZCk7CisKKyAgICBhdmFoaV9pbnRlcmZhY2VfbW9uaXRvcl93YWxrKHMtPm1vbml0b3IsIGUtPmludGVyZmFjZSwgZS0+cHJvdG9jb2wsIGFubm91bmNlX3dhbGtfY2FsbGJhY2ssIGUpOworfQorCit2b2lkIGF2YWhpX2Fubm91bmNlX2dyb3VwKEF2YWhpU2VydmVyICpzLCBBdmFoaVNFbnRyeUdyb3VwICpnKSB7CisgICAgQXZhaGlFbnRyeSAqZTsKKworICAgIGFzc2VydChzKTsKKyAgICBhc3NlcnQoZyk7CisKKyAgICBmb3IgKGUgPSBnLT5lbnRyaWVzOyBlOyBlID0gZS0+YnlfZ3JvdXBfbmV4dCkKKyAgICAgICAgaWYgKCFlLT5kZWFkKQorICAgICAgICAgICAgYXZhaGlfYW5ub3VuY2VfZW50cnkocywgZSk7Cit9CisKK2ludCBhdmFoaV9lbnRyeV9pc19yZWdpc3RlcmVkKEF2YWhpU2VydmVyICpzLCBBdmFoaUVudHJ5ICplLCBBdmFoaUludGVyZmFjZSAqaSkgeworICAgIEF2YWhpQW5ub3VuY2VyICphOworCisgICAgYXNzZXJ0KHMpOworICAgIGFzc2VydChlKTsKKyAgICBhc3NlcnQoaSk7CisgICAgYXNzZXJ0KCFlLT5kZWFkKTsKKworICAgIGlmICghKGEgPSBnZXRfYW5ub3VuY2VyKHMsIGUsIGkpKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4KKyAgICAgICAgYS0+c3RhdGUgPT0gQVZBSElfQU5OT1VOQ0lORyB8fAorICAgICAgICBhLT5zdGF0ZSA9PSBBVkFISV9FU1RBQkxJU0hFRCB8fAorICAgICAgICAoYS0+c3RhdGUgPT0gQVZBSElfV0FJVElORyAmJiAhKGUtPmZsYWdzICYgQVZBSElfUFVCTElTSF9VTklRVUUpKTsKK30KKworaW50IGF2YWhpX2VudHJ5X2lzX3Byb2JpbmcoQXZhaGlTZXJ2ZXIgKnMsIEF2YWhpRW50cnkgKmUsIEF2YWhpSW50ZXJmYWNlICppKSB7CisgICAgQXZhaGlBbm5vdW5jZXIgKmE7CisKKyAgICBhc3NlcnQocyk7CisgICAgYXNzZXJ0KGUpOworICAgIGFzc2VydChpKTsKKyAgICBhc3NlcnQoIWUtPmRlYWQpOworCisgICAgaWYgKCEoYSA9IGdldF9hbm5vdW5jZXIocywgZSwgaSkpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybgorICAgICAgICBhLT5zdGF0ZSA9PSBBVkFISV9QUk9CSU5HIHx8CisgICAgICAgIChhLT5zdGF0ZSA9PSBBVkFISV9XQUlUSU5HICYmIChlLT5mbGFncyAmIEFWQUhJX1BVQkxJU0hfVU5JUVVFKSk7Cit9CisKK3ZvaWQgYXZhaGlfZW50cnlfcmV0dXJuX3RvX2luaXRpYWxfc3RhdGUoQXZhaGlTZXJ2ZXIgKnMsIEF2YWhpRW50cnkgKmUsIEF2YWhpSW50ZXJmYWNlICppKSB7CisgICAgQXZhaGlBbm5vdW5jZXIgKmE7CisKKyAgICBhc3NlcnQocyk7CisgICAgYXNzZXJ0KGUpOworICAgIGFzc2VydChpKTsKKworICAgIGlmICghKGEgPSBnZXRfYW5ub3VuY2VyKHMsIGUsIGkpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGEtPnN0YXRlID09IEFWQUhJX1BST0JJTkcgJiYgYS0+ZW50cnktPmdyb3VwKQorICAgICAgICBhLT5lbnRyeS0+Z3JvdXAtPm5fcHJvYmluZy0tOworCisgICAgZ29fdG9faW5pdGlhbF9zdGF0ZShhKTsKK30KKworc3RhdGljIEF2YWhpUmVjb3JkICptYWtlX2dvb2RieWVfcmVjb3JkKEF2YWhpUmVjb3JkICpyKSB7CisgICAgQXZhaGlSZWNvcmQgKmc7CisKKyAgICBhc3NlcnQocik7CisKKyAgICBpZiAoIShnID0gYXZhaGlfcmVjb3JkX2NvcHkocikpKQorICAgICAgICByZXR1cm4gTlVMTDsgLyogT09NICovCisKKyAgICBhc3NlcnQoZy0+cmVmID09IDEpOworICAgIGctPnR0bCA9IDA7CisKKyAgICByZXR1cm4gZzsKK30KKworc3RhdGljIGludCBpc19kdXBsaWNhdGVfZW50cnkoQXZhaGlTZXJ2ZXIgKnMsIEF2YWhpRW50cnkgKmUpIHsKKyAgICBBdmFoaUVudHJ5ICppOworCisgICAgYXNzZXJ0KHMpOworICAgIGFzc2VydChlKTsKKworICAgIGZvciAoaSA9IGF2YWhpX2hhc2htYXBfbG9va3VwKHMtPmVudHJpZXNfYnlfa2V5LCBlLT5yZWNvcmQtPmtleSk7IGk7IGkgPSBpLT5ieV9rZXlfbmV4dCkgeworCisgICAgICAgIGlmICgoaSA9PSBlKSB8fCAoaS0+ZGVhZCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoIWF2YWhpX3JlY29yZF9lcXVhbF9ub190dGwoaS0+cmVjb3JkLCBlLT5yZWNvcmQpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNlbmRfZ29vZGJ5ZV9jYWxsYmFjayhBdmFoaUludGVyZmFjZU1vbml0b3IgKm0sIEF2YWhpSW50ZXJmYWNlICppLCB2b2lkKiB1c2VyZGF0YSkgeworICAgIEF2YWhpRW50cnkgKmUgPSB1c2VyZGF0YTsKKyAgICBBdmFoaVJlY29yZCAqZzsKKworICAgIGFzc2VydChtKTsKKyAgICBhc3NlcnQoaSk7CisgICAgYXNzZXJ0KGUpOworICAgIGFzc2VydCghZS0+ZGVhZCk7CisKKyAgICBpZiAoIWF2YWhpX2ludGVyZmFjZV9tYXRjaChpLCBlLT5pbnRlcmZhY2UsIGUtPnByb3RvY29sKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGUtPmZsYWdzICYgQVZBSElfUFVCTElTSF9OT19BTk5PVU5DRSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFhdmFoaV9lbnRyeV9pc19yZWdpc3RlcmVkKG0tPnNlcnZlciwgZSwgaSkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChpc19kdXBsaWNhdGVfZW50cnkobS0+c2VydmVyLCBlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCEoZyA9IG1ha2VfZ29vZGJ5ZV9yZWNvcmQoZS0+cmVjb3JkKSkpCisgICAgICAgIHJldHVybjsgLyogT09NICovCisKKyAgICBhdmFoaV9pbnRlcmZhY2VfcG9zdF9yZXNwb25zZShpLCBnLCBlLT5mbGFncyAmIEFWQUhJX1BVQkxJU0hfVU5JUVVFLCBOVUxMLCAxKTsKKyAgICBhdmFoaV9yZWNvcmRfdW5yZWYoZyk7Cit9CisKK3N0YXRpYyB2b2lkIHJlYW5ub3VuY2UoQXZhaGlBbm5vdW5jZXIgKmEpIHsKKyAgICBBdmFoaUVudHJ5ICplOworICAgIHN0cnVjdCB0aW1ldmFsIHR2OworCisgICAgYXNzZXJ0KGEpOworICAgIGUgPSBhLT5lbnRyeTsKKworICAgIC8qIElmIHRoZSBncm91cCB0aGlzIGVudHJ5IGJlbG9uZ3MgdG8gaXMgbm90IGV2ZW4gY29tbWl0ZWQsIHRoZXJlJ3Mgbm90aGluZyB0byByZWFubm91bmNlICovCisgICAgaWYgKGUtPmdyb3VwICYmIChlLT5ncm91cC0+c3RhdGUgPT0gQVZBSElfRU5UUllfR1JPVVBfVU5DT01NSVRFRCB8fCBlLT5ncm91cC0+c3RhdGUgPT0gQVZBSElfRU5UUllfR1JPVVBfQ09MTElTSU9OKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLyogQmVjYXVzZSB3ZSBtaWdodCBjaGFuZ2Ugc3RhdGUgd2UgZGVjcmVhc2UgdGhlIHByb2JpbmcgY291bnRlciBmaXJzdCAqLworICAgIGlmIChhLT5zdGF0ZSA9PSBBVkFISV9QUk9CSU5HICYmIGEtPmVudHJ5LT5ncm91cCkKKyAgICAgICAgYS0+ZW50cnktPmdyb3VwLT5uX3Byb2JpbmctLTsKKworICAgIGlmIChhLT5zdGF0ZSA9PSBBVkFISV9QUk9CSU5HIHx8CisgICAgICAgIChhLT5zdGF0ZSA9PSBBVkFISV9XQUlUSU5HICYmIChlLT5mbGFncyAmIEFWQUhJX1BVQkxJU0hfVU5JUVVFKSAmJiAhKGUtPmZsYWdzICYgQVZBSElfUFVCTElTSF9OT19QUk9CRSkpKQorCisgICAgICAgIC8qIFdlIHdlcmUgcHJvYmluZyBvciB3YWl0aW5nIGFmdGVyIHByb2JlLCBzbyB3ZSByZXN0YXJ0IHByb2JpbmcgZnJvbSB0aGUgYmVnaW5uaW5nIGhlcmUgKi8KKworICAgICAgICBhLT5zdGF0ZSA9IEFWQUhJX1BST0JJTkc7CisgICAgZWxzZSBpZiAoYS0+c3RhdGUgPT0gQVZBSElfV0FJVElORykKKworICAgICAgICAvKiBXZSB3ZXJlIHdhaXRpbmcsIGJ1dCB3ZXJlIG5vdCBwcm9iaW5nIGJlZm9yZSwgc28gd2UgY29udGludWUgd2FpdGluZyAgKi8KKyAgICAgICAgYS0+c3RhdGUgPSBBVkFISV9XQUlUSU5HOworCisgICAgZWxzZSBpZiAoZS0+ZmxhZ3MgJiBBVkFISV9QVUJMSVNIX05PX0FOTk9VTkNFKQorCisgICAgICAgIC8qIE5vIGFubm91bmNlciBuZWVkZWQgKi8KKyAgICAgICAgYS0+c3RhdGUgPSBBVkFISV9FU1RBQkxJU0hFRDsKKworICAgIGVsc2UgeworCisgICAgICAgIC8qIE9rLCBsZXQncyByZXN0YXJ0IGFubm91bmNpbmcgKi8KKyAgICAgICAgYS0+c3RhdGUgPSBBVkFISV9BTk5PVU5DSU5HOworICAgIH0KKworICAgIC8qIE5vdyBsZXQncyBpbmNyZWFzZSB0aGUgcHJvYmluZyBjb3VudGVyIGFnYWluICovCisgICAgaWYgKGEtPnN0YXRlID09IEFWQUhJX1BST0JJTkcgJiYgZS0+Z3JvdXApCisgICAgICAgIGUtPmdyb3VwLT5uX3Byb2JpbmcrKzsKKworICAgIGEtPm5faXRlcmF0aW9uID0gMTsKKyAgICBhLT5zZWNfZGVsYXkgPSAxOworCisgICAgaWYgKGEtPnN0YXRlID09IEFWQUhJX1BST0JJTkcpCisgICAgICAgIHNldF90aW1lb3V0KGEsIGF2YWhpX2VsYXBzZV90aW1lKCZ0diwgMCwgQVZBSElfUFJPQkVfSklUVEVSX01TRUMpKTsKKyAgICBlbHNlIGlmIChhLT5zdGF0ZSA9PSBBVkFISV9BTk5PVU5DSU5HKQorICAgICAgICBzZXRfdGltZW91dChhLCBhdmFoaV9lbGFwc2VfdGltZSgmdHYsIDAsIEFWQUhJX0FOTk9VTkNFTUVOVF9KSVRURVJfTVNFQykpOworICAgIGVsc2UKKyAgICAgICAgc2V0X3RpbWVvdXQoYSwgTlVMTCk7Cit9CisKKworc3RhdGljIHZvaWQgcmVhbm5vdW5jZV93YWxrX2NhbGxiYWNrKEF2YWhpSW50ZXJmYWNlTW9uaXRvciAqbSwgQXZhaGlJbnRlcmZhY2UgKmksIHZvaWQqIHVzZXJkYXRhKSB7CisgICAgQXZhaGlFbnRyeSAqZSA9IHVzZXJkYXRhOworICAgIEF2YWhpQW5ub3VuY2VyICphOworCisgICAgYXNzZXJ0KG0pOworICAgIGFzc2VydChpKTsKKyAgICBhc3NlcnQoZSk7CisgICAgYXNzZXJ0KCFlLT5kZWFkKTsKKworICAgIGlmICghKGEgPSBnZXRfYW5ub3VuY2VyKG0tPnNlcnZlciwgZSwgaSkpKQorICAgICAgICByZXR1cm47CisKKyAgICByZWFubm91bmNlKGEpOworfQorCit2b2lkIGF2YWhpX3JlYW5ub3VuY2VfZW50cnkoQXZhaGlTZXJ2ZXIgKnMsIEF2YWhpRW50cnkgKmUpIHsKKworICAgIGFzc2VydChzKTsKKyAgICBhc3NlcnQoZSk7CisgICAgYXNzZXJ0KCFlLT5kZWFkKTsKKworICAgIGF2YWhpX2ludGVyZmFjZV9tb25pdG9yX3dhbGsocy0+bW9uaXRvciwgZS0+aW50ZXJmYWNlLCBlLT5wcm90b2NvbCwgcmVhbm5vdW5jZV93YWxrX2NhbGxiYWNrLCBlKTsKK30KKwordm9pZCBhdmFoaV9nb29kYnllX2ludGVyZmFjZShBdmFoaVNlcnZlciAqcywgQXZhaGlJbnRlcmZhY2UgKmksIGludCBzZW5kX2dvb2RieWUsIGludCByZW1vdmUpIHsKKyAgICBhc3NlcnQocyk7CisgICAgYXNzZXJ0KGkpOworCisgICAgaWYgKHNlbmRfZ29vZGJ5ZSkKKyAgICAgICAgaWYgKGktPmFubm91bmNpbmcpIHsKKyAgICAgICAgICAgIEF2YWhpRW50cnkgKmU7CisKKyAgICAgICAgICAgIGZvciAoZSA9IHMtPmVudHJpZXM7IGU7IGUgPSBlLT5lbnRyaWVzX25leHQpCisgICAgICAgICAgICAgICAgaWYgKCFlLT5kZWFkKQorICAgICAgICAgICAgICAgICAgICBzZW5kX2dvb2RieWVfY2FsbGJhY2socy0+bW9uaXRvciwgaSwgZSk7CisgICAgICAgIH0KKworICAgIGlmIChyZW1vdmUpCisgICAgICAgIHdoaWxlIChpLT5hbm5vdW5jZXJzKQorICAgICAgICAgICAgcmVtb3ZlX2Fubm91bmNlcihzLCBpLT5hbm5vdW5jZXJzKTsKK30KKwordm9pZCBhdmFoaV9nb29kYnllX2VudHJ5KEF2YWhpU2VydmVyICpzLCBBdmFoaUVudHJ5ICplLCBpbnQgc2VuZF9nb29kYnllLCBpbnQgcmVtb3ZlKSB7CisgICAgYXNzZXJ0KHMpOworICAgIGFzc2VydChlKTsKKworICAgIGlmIChzZW5kX2dvb2RieWUpCisgICAgICAgIGlmICghZS0+ZGVhZCkKKyAgICAgICAgICAgIGF2YWhpX2ludGVyZmFjZV9tb25pdG9yX3dhbGsocy0+bW9uaXRvciwgQVZBSElfSUZfVU5TUEVDLCBBVkFISV9QUk9UT19VTlNQRUMsIHNlbmRfZ29vZGJ5ZV9jYWxsYmFjaywgZSk7CisKKyAgICBpZiAocmVtb3ZlKQorICAgICAgICB3aGlsZSAoZS0+YW5ub3VuY2VycykKKyAgICAgICAgICAgIHJlbW92ZV9hbm5vdW5jZXIocywgZS0+YW5ub3VuY2Vycyk7Cit9CisKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL2Fubm91bmNlLmggYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9hbm5vdW5jZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkMjNkOGIKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9hbm5vdW5jZS5oCkBAIC0wLDAgKzEsNjkgQEAKKyNpZm5kZWYgZm9vYW5ub3VuY2VoZm9vCisjZGVmaW5lIGZvb2Fubm91bmNlaGZvbworCisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKK3R5cGVkZWYgc3RydWN0IEF2YWhpQW5ub3VuY2VyIEF2YWhpQW5ub3VuY2VyOworCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2xsaXN0Lmg+CisjaW5jbHVkZSAiaWZhY2UuaCIKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorI2luY2x1ZGUgInRpbWVldmVudHEuaCIKKyNpbmNsdWRlICJwdWJsaXNoLmgiCisKK3R5cGVkZWYgZW51bSB7CisgICAgQVZBSElfUFJPQklORywgICAgICAgICAvKiBwcm9iaW5nIHBoYXNlICovCisgICAgQVZBSElfV0FJVElORywgICAgICAgICAvKiB3YWl0IGZvciBvdGhlciByZWNvcmRzIGluIGdyb3VwICovCisgICAgQVZBSElfQU5OT1VOQ0lORywgICAgICAvKiBhbm5vdW5jaW5nIHBoYXNlICovCisgICAgQVZBSElfRVNUQUJMSVNIRUQgICAgICAvKiB3ZSdlIGVzdGFibGlzaGVkICovCit9IEF2YWhpQW5ub3VuY2VyU3RhdGU7CisKK3N0cnVjdCBBdmFoaUFubm91bmNlciB7CisgICAgQXZhaGlTZXJ2ZXIgKnNlcnZlcjsKKyAgICBBdmFoaUludGVyZmFjZSAqaW50ZXJmYWNlOworICAgIEF2YWhpRW50cnkgKmVudHJ5OworCisgICAgQXZhaGlUaW1lRXZlbnQgKnRpbWVfZXZlbnQ7CisKKyAgICBBdmFoaUFubm91bmNlclN0YXRlIHN0YXRlOworICAgIHVuc2lnbmVkIG5faXRlcmF0aW9uOworICAgIHVuc2lnbmVkIHNlY19kZWxheTsKKworICAgIEFWQUhJX0xMSVNUX0ZJRUxEUyhBdmFoaUFubm91bmNlciwgYnlfaW50ZXJmYWNlKTsKKyAgICBBVkFISV9MTElTVF9GSUVMRFMoQXZhaGlBbm5vdW5jZXIsIGJ5X2VudHJ5KTsKK307CisKK3ZvaWQgYXZhaGlfYW5ub3VuY2VfaW50ZXJmYWNlKEF2YWhpU2VydmVyICpzLCBBdmFoaUludGVyZmFjZSAqaSk7Cit2b2lkIGF2YWhpX2Fubm91bmNlX2VudHJ5KEF2YWhpU2VydmVyICpzLCBBdmFoaUVudHJ5ICplKTsKK3ZvaWQgYXZhaGlfYW5ub3VuY2VfZ3JvdXAoQXZhaGlTZXJ2ZXIgKnMsIEF2YWhpU0VudHJ5R3JvdXAgKmcpOworCit2b2lkIGF2YWhpX2VudHJ5X3JldHVybl90b19pbml0aWFsX3N0YXRlKEF2YWhpU2VydmVyICpzLCBBdmFoaUVudHJ5ICplLCBBdmFoaUludGVyZmFjZSAqaSk7CisKK3ZvaWQgYXZhaGlfc19lbnRyeV9ncm91cF9jaGVja19wcm9iZWQoQXZhaGlTRW50cnlHcm91cCAqZywgaW50IGltbWVkaWF0ZWx5KTsKKworaW50IGF2YWhpX2VudHJ5X2lzX3JlZ2lzdGVyZWQoQXZhaGlTZXJ2ZXIgKnMsIEF2YWhpRW50cnkgKmUsIEF2YWhpSW50ZXJmYWNlICppKTsKK2ludCBhdmFoaV9lbnRyeV9pc19wcm9iaW5nKEF2YWhpU2VydmVyICpzLCBBdmFoaUVudHJ5ICplLCBBdmFoaUludGVyZmFjZSAqaSk7CisKK3ZvaWQgYXZhaGlfZ29vZGJ5ZV9pbnRlcmZhY2UoQXZhaGlTZXJ2ZXIgKnMsIEF2YWhpSW50ZXJmYWNlICppLCBpbnQgc2VuZF9nb29kYnllLCBpbnQgcmVtKTsKK3ZvaWQgYXZhaGlfZ29vZGJ5ZV9lbnRyeShBdmFoaVNlcnZlciAqcywgQXZhaGlFbnRyeSAqZSwgaW50IHNlbmRfZ29vZGJ5ZSwgaW50IHJlbSk7CisKK3ZvaWQgYXZhaGlfcmVhbm5vdW5jZV9lbnRyeShBdmFoaVNlcnZlciAqcywgQXZhaGlFbnRyeSAqZSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvYXZhaGktcmVmbGVjdG9yLmMgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9hdmFoaS1yZWZsZWN0b3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWUxZTkzCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvYXZhaGktcmVmbGVjdG9yLmMKQEAgLTAsMCArMSw2MSBAQAorLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisKKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vc2ltcGxlLXdhdGNoLmg+CisjaW5jbHVkZSA8YXZhaGktY29yZS9jb3JlLmg+CisKK2ludCBtYWluKEFWQUhJX0dDQ19VTlVTRUQgaW50IGFyZ2MsIEFWQUhJX0dDQ19VTlVTRUQgY2hhciphcmd2W10pIHsKKyAgICBBdmFoaVNlcnZlciAqc2VydmVyOworICAgIEF2YWhpU2VydmVyQ29uZmlnIGNvbmZpZzsKKyAgICBpbnQgZXJyb3I7CisgICAgQXZhaGlTaW1wbGVQb2xsICpzaW1wbGVfcG9sbDsKKworICAgIHNpbXBsZV9wb2xsID0gYXZhaGlfc2ltcGxlX3BvbGxfbmV3KCk7CisKKyAgICBhdmFoaV9zZXJ2ZXJfY29uZmlnX2luaXQoJmNvbmZpZyk7CisgICAgY29uZmlnLnB1Ymxpc2hfaGluZm8gPSAwOworICAgIGNvbmZpZy5wdWJsaXNoX2FkZHJlc3NlcyA9IDA7CisgICAgY29uZmlnLnB1Ymxpc2hfd29ya3N0YXRpb24gPSAwOworICAgIGNvbmZpZy5wdWJsaXNoX2RvbWFpbiA9IDA7CisgICAgY29uZmlnLnVzZV9pcHY2ID0gMDsKKyAgICBjb25maWcuZW5hYmxlX3JlZmxlY3RvciA9IDE7CisKKyAgICBzZXJ2ZXIgPSBhdmFoaV9zZXJ2ZXJfbmV3KGF2YWhpX3NpbXBsZV9wb2xsX2dldChzaW1wbGVfcG9sbCksICZjb25maWcsIE5VTEwsIE5VTEwsICZlcnJvcik7CisgICAgYXZhaGlfc2VydmVyX2NvbmZpZ19mcmVlKCZjb25maWcpOworCisgICAgZm9yICg7OykKKyAgICAgICAgaWYgKGF2YWhpX3NpbXBsZV9wb2xsX2l0ZXJhdGUoc2ltcGxlX3BvbGwsIC0xKSAhPSAwKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICBhdmFoaV9zZXJ2ZXJfZnJlZShzZXJ2ZXIpOworICAgIGF2YWhpX3NpbXBsZV9wb2xsX2ZyZWUoc2ltcGxlX3BvbGwpOworCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9hdmFoaS10ZXN0LmMgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9hdmFoaS10ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIyMzc2ZgotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL2F2YWhpLXRlc3QuYwpAQCAtMCwwICsxLDQwMiBAQAorLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKworI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9tYWxsb2MuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vc2ltcGxlLXdhdGNoLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2FsdGVybmF0aXZlLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL3RpbWV2YWwuaD4KKworI2luY2x1ZGUgPGF2YWhpLWNvcmUvY29yZS5oPgorI2luY2x1ZGUgPGF2YWhpLWNvcmUvbG9nLmg+CisjaW5jbHVkZSA8YXZhaGktY29yZS9wdWJsaXNoLmg+CisjaW5jbHVkZSA8YXZhaGktY29yZS9sb29rdXAuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb3JlL2Rucy1zcnYtcnIuaD4KKworc3RhdGljIEF2YWhpU0VudHJ5R3JvdXAgKmdyb3VwID0gTlVMTDsKK3N0YXRpYyBBdmFoaVNlcnZlciAqc2VydmVyID0gTlVMTDsKK3N0YXRpYyBjaGFyICpzZXJ2aWNlX25hbWUgPSBOVUxMOworCitzdGF0aWMgY29uc3QgQXZhaGlQb2xsICpwb2xsX2FwaTsKKworc3RhdGljIHZvaWQgcXVpdF90aW1lb3V0X2NhbGxiYWNrKEFWQUhJX0dDQ19VTlVTRUQgQXZhaGlUaW1lb3V0ICp0aW1lb3V0LCB2b2lkKiB1c2VyZGF0YSkgeworICAgIEF2YWhpU2ltcGxlUG9sbCAqc2ltcGxlX3BvbGwgPSB1c2VyZGF0YTsKKworICAgIGF2YWhpX3NpbXBsZV9wb2xsX3F1aXQoc2ltcGxlX3BvbGwpOworfQorCitzdGF0aWMgdm9pZCBkdW1wX2xpbmUoY29uc3QgY2hhciAqdGV4dCwgQVZBSElfR0NDX1VOVVNFRCB2b2lkKiB1c2VyZGF0YSkgeworICAgIHByaW50ZigiJXNcbiIsIHRleHQpOworfQorCitzdGF0aWMgdm9pZCBkdW1wX3RpbWVvdXRfY2FsbGJhY2soQXZhaGlUaW1lb3V0ICp0aW1lb3V0LCB2b2lkKiB1c2VyZGF0YSkgeworICAgIHN0cnVjdCB0aW1ldmFsIHR2OworCisgICAgQXZhaGlTZXJ2ZXIgKmF2YWhpID0gdXNlcmRhdGE7CisgICAgYXZhaGlfc2VydmVyX2R1bXAoYXZhaGksIGR1bXBfbGluZSwgTlVMTCk7CisKKyAgICBhdmFoaV9lbGFwc2VfdGltZSgmdHYsIDUwMDAsIDApOworICAgIHBvbGxfYXBpLT50aW1lb3V0X3VwZGF0ZSh0aW1lb3V0LCAmdHYpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqYnJvd3Nlcl9ldmVudF90b19zdHJpbmcoQXZhaGlCcm93c2VyRXZlbnQgZXZlbnQpIHsKKyAgICBzd2l0Y2ggKGV2ZW50KSB7CisgICAgICAgIGNhc2UgQVZBSElfQlJPV1NFUl9ORVcgOiByZXR1cm4gIk5FVyI7CisgICAgICAgIGNhc2UgQVZBSElfQlJPV1NFUl9SRU1PVkUgOiByZXR1cm4gIlJFTU9WRSI7CisgICAgICAgIGNhc2UgQVZBSElfQlJPV1NFUl9DQUNIRV9FWEhBVVNURUQgOiByZXR1cm4gIkNBQ0hFX0VYSEFVU1RFRCI7CisgICAgICAgIGNhc2UgQVZBSElfQlJPV1NFUl9BTExfRk9SX05PVyA6IHJldHVybiAiQUxMX0ZPUl9OT1ciOworICAgICAgICBjYXNlIEFWQUhJX0JST1dTRVJfRkFJTFVSRSA6IHJldHVybiAiRkFJTFVSRSI7CisgICAgfQorCisgICAgYWJvcnQoKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnJlc29sdmVyX2V2ZW50X3RvX3N0cmluZyhBdmFoaVJlc29sdmVyRXZlbnQgZXZlbnQpIHsKKyAgICBzd2l0Y2ggKGV2ZW50KSB7CisgICAgICAgIGNhc2UgQVZBSElfUkVTT0xWRVJfRk9VTkQ6IHJldHVybiAiRk9VTkQiOworICAgICAgICBjYXNlIEFWQUhJX1JFU09MVkVSX0ZBSUxVUkU6IHJldHVybiAiRkFJTFVSRSI7CisgICAgfQorICAgIGFib3J0KCk7Cit9CisKK3N0YXRpYyB2b2lkIHJlY29yZF9icm93c2VyX2NhbGxiYWNrKAorICAgIEF2YWhpU1JlY29yZEJyb3dzZXIgKnIsCisgICAgQXZhaGlJZkluZGV4IGludGVyZmFjZSwKKyAgICBBdmFoaVByb3RvY29sIHByb3RvY29sLAorICAgIEF2YWhpQnJvd3NlckV2ZW50IGV2ZW50LAorICAgIEF2YWhpUmVjb3JkICpyZWNvcmQsCisgICAgQVZBSElfR0NDX1VOVVNFRCBBdmFoaUxvb2t1cFJlc3VsdEZsYWdzIGZsYWdzLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgdm9pZCogdXNlcmRhdGEpIHsKKyAgICBjaGFyICp0OworCisgICAgYXNzZXJ0KHIpOworCisgICAgaWYgKHJlY29yZCkgeworICAgICAgICBhdmFoaV9sb2dfZGVidWcoIlJCOiByZWNvcmQgWyVzXSBvbiAlaS4laSBpcyAlcyIsIHQgPSBhdmFoaV9yZWNvcmRfdG9fc3RyaW5nKHJlY29yZCksIGludGVyZmFjZSwgcHJvdG9jb2wsIGJyb3dzZXJfZXZlbnRfdG9fc3RyaW5nKGV2ZW50KSk7CisgICAgICAgIGF2YWhpX2ZyZWUodCk7CisgICAgfSBlbHNlCisgICAgICAgIGF2YWhpX2xvZ19kZWJ1ZygiUkI6IFslc10iLCBicm93c2VyX2V2ZW50X3RvX3N0cmluZyhldmVudCkpOworCit9CisKK3N0YXRpYyB2b2lkIHJlbW92ZV9lbnRyaWVzKHZvaWQpOworc3RhdGljIHZvaWQgY3JlYXRlX2VudHJpZXMoaW50IG5ld19uYW1lKTsKKworc3RhdGljIHZvaWQgZW50cnlfZ3JvdXBfY2FsbGJhY2soQVZBSElfR0NDX1VOVVNFRCBBdmFoaVNlcnZlciAqcywgQVZBSElfR0NDX1VOVVNFRCBBdmFoaVNFbnRyeUdyb3VwICpnLCBBdmFoaUVudHJ5R3JvdXBTdGF0ZSBzdGF0ZSwgQVZBSElfR0NDX1VOVVNFRCB2b2lkKiB1c2VyZGF0YSkgeworICAgIGF2YWhpX2xvZ19kZWJ1ZygiZW50cnkgZ3JvdXAgc3RhdGU6ICVpIiwgc3RhdGUpOworCisgICAgaWYgKHN0YXRlID09IEFWQUhJX0VOVFJZX0dST1VQX0NPTExJU0lPTikgeworICAgICAgICByZW1vdmVfZW50cmllcygpOworICAgICAgICBjcmVhdGVfZW50cmllcygxKTsKKyAgICAgICAgYXZhaGlfbG9nX2RlYnVnKCJTZXJ2aWNlIG5hbWUgY29uZmxpY3QsIHJldHJ5aW5nIHdpdGggPCVzPiIsIHNlcnZpY2VfbmFtZSk7CisgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSBBVkFISV9FTlRSWV9HUk9VUF9FU1RBQkxJU0hFRCkgeworICAgICAgICBhdmFoaV9sb2dfZGVidWcoIlNlcnZpY2UgZXN0YWJsaXNoZWQgdW5kZXIgbmFtZSA8JXM+Iiwgc2VydmljZV9uYW1lKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHNlcnZlcl9jYWxsYmFjayhBdmFoaVNlcnZlciAqcywgQXZhaGlTZXJ2ZXJTdGF0ZSBzdGF0ZSwgQVZBSElfR0NDX1VOVVNFRCB2b2lkKiB1c2VyZGF0YSkgeworCisgICAgc2VydmVyID0gczsKKyAgICBhdmFoaV9sb2dfZGVidWcoInNlcnZlciBzdGF0ZTogJWkiLCBzdGF0ZSk7CisKKyAgICBpZiAoc3RhdGUgPT0gQVZBSElfU0VSVkVSX1JVTk5JTkcpIHsKKyAgICAgICAgYXZhaGlfbG9nX2RlYnVnKCJTZXJ2ZXIgc3RhcnR1cCBjb21wbGV0ZS4gSG9zdCBuYW1lIGlzIDwlcz4uIFNlcnZpY2UgY29va2llIGlzICV1IiwgYXZhaGlfc2VydmVyX2dldF9ob3N0X25hbWVfZnFkbihzKSwgYXZhaGlfc2VydmVyX2dldF9sb2NhbF9zZXJ2aWNlX2Nvb2tpZShzKSk7CisgICAgICAgIGNyZWF0ZV9lbnRyaWVzKDApOworICAgIH0gZWxzZSBpZiAoc3RhdGUgPT0gQVZBSElfU0VSVkVSX0NPTExJU0lPTikgeworICAgICAgICBjaGFyICpuOworICAgICAgICByZW1vdmVfZW50cmllcygpOworCisgICAgICAgIG4gPSBhdmFoaV9hbHRlcm5hdGl2ZV9ob3N0X25hbWUoYXZhaGlfc2VydmVyX2dldF9ob3N0X25hbWUocykpOworCisgICAgICAgIGF2YWhpX2xvZ19kZWJ1ZygiSG9zdCBuYW1lIGNvbmZsaWN0LCByZXRyeWluZyB3aXRoIDwlcz4iLCBuKTsKKyAgICAgICAgYXZhaGlfc2VydmVyX3NldF9ob3N0X25hbWUocywgbik7CisgICAgICAgIGF2YWhpX2ZyZWUobik7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCByZW1vdmVfZW50cmllcyh2b2lkKSB7CisgICAgaWYgKGdyb3VwKQorICAgICAgICBhdmFoaV9zX2VudHJ5X2dyb3VwX3Jlc2V0KGdyb3VwKTsKK30KKworc3RhdGljIHZvaWQgY3JlYXRlX2VudHJpZXMoaW50IG5ld19uYW1lKSB7CisgICAgQXZhaGlBZGRyZXNzIGE7CisgICAgQXZhaGlSZWNvcmQgKnI7CisKKyAgICByZW1vdmVfZW50cmllcygpOworCisgICAgaWYgKCFncm91cCkKKyAgICAgICAgZ3JvdXAgPSBhdmFoaV9zX2VudHJ5X2dyb3VwX25ldyhzZXJ2ZXIsIGVudHJ5X2dyb3VwX2NhbGxiYWNrLCBOVUxMKTsKKworICAgIGFzc2VydChhdmFoaV9zX2VudHJ5X2dyb3VwX2lzX2VtcHR5KGdyb3VwKSk7CisKKyAgICBpZiAoIXNlcnZpY2VfbmFtZSkKKyAgICAgICAgc2VydmljZV9uYW1lID0gYXZhaGlfc3RyZHVwKCJUZXN0IFNlcnZpY2UiKTsKKyAgICBlbHNlIGlmIChuZXdfbmFtZSkgeworICAgICAgICBjaGFyICpuID0gYXZhaGlfYWx0ZXJuYXRpdmVfc2VydmljZV9uYW1lKHNlcnZpY2VfbmFtZSk7CisgICAgICAgIGF2YWhpX2ZyZWUoc2VydmljZV9uYW1lKTsKKyAgICAgICAgc2VydmljZV9uYW1lID0gbjsKKyAgICB9CisKKyAgICBpZiAoYXZhaGlfc2VydmVyX2FkZF9zZXJ2aWNlKHNlcnZlciwgZ3JvdXAsIEFWQUhJX0lGX1VOU1BFQywgQVZBSElfUFJPVE9fVU5TUEVDLCAwLCBzZXJ2aWNlX25hbWUsICJfaHR0cC5fdGNwIiwgTlVMTCwgTlVMTCwgODAsICJmb28iLCBOVUxMKSA8IDApIHsKKyAgICAgICAgYXZhaGlfbG9nX2Vycm9yKCJGYWlsZWQgdG8gYWRkIEhUVFAgc2VydmljZSIpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKGF2YWhpX3NlcnZlcl9hZGRfc2VydmljZShzZXJ2ZXIsIGdyb3VwLCBBVkFISV9JRl9VTlNQRUMsIEFWQUhJX1BST1RPX1VOU1BFQywgMCwgc2VydmljZV9uYW1lLCAiX2Z0cC5fdGNwIiwgTlVMTCwgTlVMTCwgMjEsICJmb28iLCBOVUxMKSA8IDApIHsKKyAgICAgICAgYXZhaGlfbG9nX2Vycm9yKCJGYWlsZWQgdG8gYWRkIEZUUCBzZXJ2aWNlIik7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBpZiAoYXZhaGlfc2VydmVyX2FkZF9zZXJ2aWNlKHNlcnZlciwgZ3JvdXAsIEFWQUhJX0lGX1VOU1BFQywgQVZBSElfUFJPVE9fVU5TUEVDLCAwLHNlcnZpY2VfbmFtZSwgIl93ZWJkYXYuX3RjcCIsIE5VTEwsIE5VTEwsIDgwLCAiZm9vIiwgTlVMTCkgPCAwKSB7CisgICAgICAgIGF2YWhpX2xvZ19lcnJvcigiRmFpbGVkIHRvIGFkZCBXRUJEQVYgc2VydmljZSIpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKGF2YWhpX3NlcnZlcl9hZGRfZG5zX3NlcnZlcl9hZGRyZXNzKHNlcnZlciwgZ3JvdXAsIEFWQUhJX0lGX1VOU1BFQywgQVZBSElfUFJPVE9fVU5TUEVDLCAwLCBOVUxMLCBBVkFISV9ETlNfU0VSVkVSX1JFU09MVkUsIGF2YWhpX2FkZHJlc3NfcGFyc2UoIjE5Mi4xNjguNTAuMSIsIEFWQUhJX1BST1RPX1VOU1BFQywgJmEpLCA1MykgPCAwKSB7CisgICAgICAgIGF2YWhpX2xvZ19lcnJvcigiRmFpbGVkIHRvIGFkZCBuZXcgRE5TIFNlcnZlciBhZGRyZXNzIik7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICByID0gYXZhaGlfcmVjb3JkX25ld19mdWxsKCJjbmFtZS5sb2NhbCIsIEFWQUhJX0ROU19DTEFTU19JTiwgQVZBSElfRE5TX1RZUEVfQ05BTUUsIEFWQUhJX0RFRkFVTFRfVFRMKTsKKyAgICByLT5kYXRhLmNuYW1lLm5hbWUgPSBhdmFoaV9zdHJkdXAoImNvY2FpbmUubG9jYWwiKTsKKworICAgIGlmIChhdmFoaV9zZXJ2ZXJfYWRkKHNlcnZlciwgZ3JvdXAsIEFWQUhJX0lGX1VOU1BFQywgQVZBSElfUFJPVE9fVU5TUEVDLCAwLCByKSA8IDApIHsKKyAgICAgICAgYXZhaGlfcmVjb3JkX3VucmVmKHIpOworICAgICAgICBhdmFoaV9sb2dfZXJyb3IoIkZhaWxlZCB0byBhZGQgQ05BTUUgcmVjb3JkIik7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisgICAgYXZhaGlfcmVjb3JkX3VucmVmKHIpOworCisgICAgYXZhaGlfc19lbnRyeV9ncm91cF9jb21taXQoZ3JvdXApOworICAgIHJldHVybjsKKworZmFpbDoKKyAgICBpZiAoZ3JvdXApCisgICAgICAgIGF2YWhpX3NfZW50cnlfZ3JvdXBfZnJlZShncm91cCk7CisKKyAgICBncm91cCA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGhucl9jYWxsYmFjaygKKyAgICBBVkFISV9HQ0NfVU5VU0VEIEF2YWhpU0hvc3ROYW1lUmVzb2x2ZXIgKnIsCisgICAgQXZhaGlJZkluZGV4IGlmYWNlLAorICAgIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsCisgICAgQXZhaGlSZXNvbHZlckV2ZW50IGV2ZW50LAorICAgIGNvbnN0IGNoYXIgKmhvc3RuYW1lLAorICAgIGNvbnN0IEF2YWhpQWRkcmVzcyAqYSwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIEF2YWhpTG9va3VwUmVzdWx0RmxhZ3MgZmxhZ3MsCisgICAgQVZBSElfR0NDX1VOVVNFRCB2b2lkKiB1c2VyZGF0YSkgeworICAgIGNoYXIgdFtBVkFISV9BRERSRVNTX1NUUl9NQVhdOworCisgICAgaWYgKGEpCisgICAgICAgIGF2YWhpX2FkZHJlc3Nfc25wcmludCh0LCBzaXplb2YodCksIGEpOworCisgICAgYXZhaGlfbG9nX2RlYnVnKCJITlI6ICglaS4laSkgPCVzPiAtPiAlcyBbJXNdIiwgaWZhY2UsIHByb3RvY29sLCBob3N0bmFtZSwgYSA/IHQgOiAibi9hIiwgcmVzb2x2ZXJfZXZlbnRfdG9fc3RyaW5nKGV2ZW50KSk7Cit9CisKK3N0YXRpYyB2b2lkIGFyX2NhbGxiYWNrKAorICAgIEFWQUhJX0dDQ19VTlVTRUQgQXZhaGlTQWRkcmVzc1Jlc29sdmVyICpyLAorICAgIEF2YWhpSWZJbmRleCBpZmFjZSwKKyAgICBBdmFoaVByb3RvY29sIHByb3RvY29sLAorICAgIEF2YWhpUmVzb2x2ZXJFdmVudCBldmVudCwKKyAgICBjb25zdCBBdmFoaUFkZHJlc3MgKmEsCisgICAgY29uc3QgY2hhciAqaG9zdG5hbWUsCisgICAgQVZBSElfR0NDX1VOVVNFRCBBdmFoaUxvb2t1cFJlc3VsdEZsYWdzIGZsYWdzLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgdm9pZCogdXNlcmRhdGEpIHsKKyAgICBjaGFyIHRbQVZBSElfQUREUkVTU19TVFJfTUFYXTsKKworICAgIGF2YWhpX2FkZHJlc3Nfc25wcmludCh0LCBzaXplb2YodCksIGEpOworCisgICAgYXZhaGlfbG9nX2RlYnVnKCJBUjogKCVpLiVpKSAlcyAtPiA8JXM+IFslc10iLCBpZmFjZSwgcHJvdG9jb2wsIHQsIGhvc3RuYW1lID8gaG9zdG5hbWUgOiAibi9hIiwgcmVzb2x2ZXJfZXZlbnRfdG9fc3RyaW5nKGV2ZW50KSk7Cit9CisKK3N0YXRpYyB2b2lkIGRiX2NhbGxiYWNrKAorICAgIEFWQUhJX0dDQ19VTlVTRUQgQXZhaGlTRG9tYWluQnJvd3NlciAqYiwKKyAgICBBdmFoaUlmSW5kZXggaWZhY2UsCisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICBBdmFoaUJyb3dzZXJFdmVudCBldmVudCwKKyAgICBjb25zdCBjaGFyICpkb21haW4sCisgICAgQVZBSElfR0NDX1VOVVNFRCBBdmFoaUxvb2t1cFJlc3VsdEZsYWdzIGZsYWdzLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgdm9pZCogdXNlcmRhdGEpIHsKKworICAgIGF2YWhpX2xvZ19kZWJ1ZygiREI6ICglaS4laSkgPCVzPiBbJXNdIiwgaWZhY2UsIHByb3RvY29sLCBkb21haW4gPyBkb21haW4gOiAiTlVMTCIsIGJyb3dzZXJfZXZlbnRfdG9fc3RyaW5nKGV2ZW50KSk7Cit9CisKK3N0YXRpYyB2b2lkIHN0Yl9jYWxsYmFjaygKKyAgICBBVkFISV9HQ0NfVU5VU0VEIEF2YWhpU1NlcnZpY2VUeXBlQnJvd3NlciAqYiwKKyAgICBBdmFoaUlmSW5kZXggaWZhY2UsCisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICBBdmFoaUJyb3dzZXJFdmVudCBldmVudCwKKyAgICBjb25zdCBjaGFyICpzZXJ2aWNlX3R5cGUsCisgICAgY29uc3QgY2hhciAqZG9tYWluLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgQXZhaGlMb29rdXBSZXN1bHRGbGFncyBmbGFncywKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHZvaWQqIHVzZXJkYXRhKSB7CisKKyAgICBhdmFoaV9sb2dfZGVidWcoIlNUQjogKCVpLiVpKSAlcyBpbiA8JXM+IFslc10iLCBpZmFjZSwgcHJvdG9jb2wsIHNlcnZpY2VfdHlwZSA/IHNlcnZpY2VfdHlwZSA6ICJOVUxMIiwgZG9tYWluID8gZG9tYWluIDogIk5VTEwiLCBicm93c2VyX2V2ZW50X3RvX3N0cmluZyhldmVudCkpOworfQorCitzdGF0aWMgdm9pZCBzYl9jYWxsYmFjaygKKyAgICBBVkFISV9HQ0NfVU5VU0VEIEF2YWhpU1NlcnZpY2VCcm93c2VyICpiLAorICAgIEF2YWhpSWZJbmRleCBpZmFjZSwKKyAgICBBdmFoaVByb3RvY29sIHByb3RvY29sLAorICAgIEF2YWhpQnJvd3NlckV2ZW50IGV2ZW50LAorICAgIGNvbnN0IGNoYXIgKm5hbWUsCisgICAgY29uc3QgY2hhciAqc2VydmljZV90eXBlLAorICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIEF2YWhpTG9va3VwUmVzdWx0RmxhZ3MgZmxhZ3MsCisgICAgQVZBSElfR0NDX1VOVVNFRCB2b2lkKiB1c2VyZGF0YSkgeworICAgIGF2YWhpX2xvZ19kZWJ1ZygiU0I6ICglaS4laSkgPCVzPiBhcyAlcyBpbiA8JXM+IFslc10iLCBpZmFjZSwgcHJvdG9jb2wsIG5hbWUgPyBuYW1lIDogIk5VTEwiLCBzZXJ2aWNlX3R5cGUgPyBzZXJ2aWNlX3R5cGUgOiAiTlVMTCIsIGRvbWFpbiA/IGRvbWFpbiA6ICJOVUxMIiwgYnJvd3Nlcl9ldmVudF90b19zdHJpbmcoZXZlbnQpKTsKK30KKworc3RhdGljIHZvaWQgc3JfY2FsbGJhY2soCisgICAgQVZBSElfR0NDX1VOVVNFRCBBdmFoaVNTZXJ2aWNlUmVzb2x2ZXIgKnIsCisgICAgQXZhaGlJZkluZGV4IGlmYWNlLAorICAgIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsCisgICAgQXZhaGlSZXNvbHZlckV2ZW50IGV2ZW50LAorICAgIGNvbnN0IGNoYXIgKm5hbWUsCisgICAgY29uc3QgY2hhcipzZXJ2aWNlX3R5cGUsCisgICAgY29uc3QgY2hhcipkb21haW5fbmFtZSwKKyAgICBjb25zdCBjaGFyKmhvc3RuYW1lLAorICAgIGNvbnN0IEF2YWhpQWRkcmVzcyAqYSwKKyAgICB1aW50MTZfdCBwb3J0LAorICAgIEF2YWhpU3RyaW5nTGlzdCAqdHh0LAorICAgIEFWQUhJX0dDQ19VTlVTRUQgQXZhaGlMb29rdXBSZXN1bHRGbGFncyBmbGFncywKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHZvaWQqIHVzZXJkYXRhKSB7CisKKyAgICBpZiAoZXZlbnQgIT0gQVZBSElfUkVTT0xWRVJfRk9VTkQpCisgICAgICAgIGF2YWhpX2xvZ19kZWJ1ZygiU1I6ICglaS4laSkgPCVzPiBhcyAlcyBpbiA8JXM+IFslc10iLCBpZmFjZSwgcHJvdG9jb2wsIG5hbWUsIHNlcnZpY2VfdHlwZSwgZG9tYWluX25hbWUsIHJlc29sdmVyX2V2ZW50X3RvX3N0cmluZyhldmVudCkpOworICAgIGVsc2UgeworICAgICAgICBjaGFyIHRbQVZBSElfQUREUkVTU19TVFJfTUFYXSwgKnM7CisKKyAgICAgICAgYXZhaGlfYWRkcmVzc19zbnByaW50KHQsIHNpemVvZih0KSwgYSk7CisKKyAgICAgICAgcyA9IGF2YWhpX3N0cmluZ19saXN0X3RvX3N0cmluZyh0eHQpOworICAgICAgICBhdmFoaV9sb2dfZGVidWcoIlNSOiAoJWkuJWkpIDwlcz4gYXMgJXMgaW4gPCVzPjogJXMvJXM6JWkgKCVzKSBbJXNdIiwgaWZhY2UsIHByb3RvY29sLCBuYW1lLCBzZXJ2aWNlX3R5cGUsIGRvbWFpbl9uYW1lLCBob3N0bmFtZSwgdCwgcG9ydCwgcywgcmVzb2x2ZXJfZXZlbnRfdG9fc3RyaW5nKGV2ZW50KSk7CisgICAgICAgIGF2YWhpX2ZyZWUocyk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBkc2JfY2FsbGJhY2soCisgICAgQVZBSElfR0NDX1VOVVNFRCBBdmFoaVNETlNTZXJ2ZXJCcm93c2VyICpiLAorICAgIEF2YWhpSWZJbmRleCBpZmFjZSwKKyAgICBBdmFoaVByb3RvY29sIHByb3RvY29sLAorICAgIEF2YWhpQnJvd3NlckV2ZW50IGV2ZW50LAorICAgIGNvbnN0IGNoYXIqaG9zdG5hbWUsCisgICAgY29uc3QgQXZhaGlBZGRyZXNzICphLAorICAgIHVpbnQxNl90IHBvcnQsCisgICAgQVZBSElfR0NDX1VOVVNFRCBBdmFoaUxvb2t1cFJlc3VsdEZsYWdzIGZsYWdzLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgdm9pZCogdXNlcmRhdGEpIHsKKworICAgIGNoYXIgdFtBVkFISV9BRERSRVNTX1NUUl9NQVhdID0gIm4vYSI7CisKKyAgICBpZiAoYSkKKyAgICAgICAgYXZhaGlfYWRkcmVzc19zbnByaW50KHQsIHNpemVvZih0KSwgYSk7CisKKyAgICBhdmFoaV9sb2dfZGVidWcoIkRTQjogKCVpLiVpKTogJXMvJXM6JWkgWyVzXSIsIGlmYWNlLCBwcm90b2NvbCwgaG9zdG5hbWUgPyBob3N0bmFtZSA6ICJOVUxMIiwgdCwgcG9ydCwgYnJvd3Nlcl9ldmVudF90b19zdHJpbmcoZXZlbnQpKTsKK30KKworaW50IG1haW4oQVZBSElfR0NDX1VOVVNFRCBpbnQgYXJnYywgQVZBSElfR0NDX1VOVVNFRCBjaGFyICphcmd2W10pIHsKKyAgICBBdmFoaVNSZWNvcmRCcm93c2VyICpyOworICAgIEF2YWhpU0hvc3ROYW1lUmVzb2x2ZXIgKmhucjsKKyAgICBBdmFoaVNBZGRyZXNzUmVzb2x2ZXIgKmFyOworICAgIEF2YWhpS2V5ICprOworICAgIEF2YWhpU2VydmVyQ29uZmlnIGNvbmZpZzsKKyAgICBBdmFoaUFkZHJlc3MgYTsKKyAgICBBdmFoaVNEb21haW5Ccm93c2VyICpkYjsKKyAgICBBdmFoaVNTZXJ2aWNlVHlwZUJyb3dzZXIgKnN0YjsKKyAgICBBdmFoaVNTZXJ2aWNlQnJvd3NlciAqc2I7CisgICAgQXZhaGlTU2VydmljZVJlc29sdmVyICpzcjsKKyAgICBBdmFoaVNETlNTZXJ2ZXJCcm93c2VyICpkc2I7CisgICAgQXZhaGlTaW1wbGVQb2xsICpzaW1wbGVfcG9sbDsKKyAgICBpbnQgZXJyb3I7CisgICAgc3RydWN0IHRpbWV2YWwgdHY7CisKKyAgICBzaW1wbGVfcG9sbCA9IGF2YWhpX3NpbXBsZV9wb2xsX25ldygpOworICAgIHBvbGxfYXBpID0gYXZhaGlfc2ltcGxlX3BvbGxfZ2V0KHNpbXBsZV9wb2xsKTsKKworICAgIGF2YWhpX3NlcnZlcl9jb25maWdfaW5pdCgmY29uZmlnKTsKKworICAgIGF2YWhpX2FkZHJlc3NfcGFyc2UoIjE5Mi4xNjguNTAuMSIsIEFWQUhJX1BST1RPX1VOU1BFQywgJmNvbmZpZy53aWRlX2FyZWFfc2VydmVyc1swXSk7CisgICAgY29uZmlnLm5fd2lkZV9hcmVhX3NlcnZlcnMgPSAxOworICAgIGNvbmZpZy5lbmFibGVfd2lkZV9hcmVhID0gMTsKKworICAgIHNlcnZlciA9IGF2YWhpX3NlcnZlcl9uZXcocG9sbF9hcGksICZjb25maWcsIHNlcnZlcl9jYWxsYmFjaywgTlVMTCwgJmVycm9yKTsKKyAgICBhdmFoaV9zZXJ2ZXJfY29uZmlnX2ZyZWUoJmNvbmZpZyk7CisKKyAgICBrID0gYXZhaGlfa2V5X25ldygiX2h0dHAuX3RjcC4wcG9pbnRlci5kZSIsIEFWQUhJX0ROU19DTEFTU19JTiwgQVZBSElfRE5TX1RZUEVfUFRSKTsKKyAgICByID0gYXZhaGlfc19yZWNvcmRfYnJvd3Nlcl9uZXcoc2VydmVyLCBBVkFISV9JRl9VTlNQRUMsIEFWQUhJX1BST1RPX1VOU1BFQywgaywgMCwgcmVjb3JkX2Jyb3dzZXJfY2FsbGJhY2ssIE5VTEwpOworICAgIGF2YWhpX2tleV91bnJlZihrKTsKKworICAgIGhuciA9IGF2YWhpX3NfaG9zdF9uYW1lX3Jlc29sdmVyX25ldyhzZXJ2ZXIsIEFWQUhJX0lGX1VOU1BFQywgQVZBSElfUFJPVE9fVU5TUEVDLCAiY25hbWUubG9jYWwiLCBBVkFISV9QUk9UT19VTlNQRUMsIDAsIGhucl9jYWxsYmFjaywgTlVMTCk7CisKKyAgICBhciA9IGF2YWhpX3NfYWRkcmVzc19yZXNvbHZlcl9uZXcoc2VydmVyLCBBVkFISV9JRl9VTlNQRUMsIEFWQUhJX1BST1RPX1VOU1BFQywgYXZhaGlfYWRkcmVzc19wYXJzZSgiMTkyLjE2OC41MC4xIiwgQVZBSElfUFJPVE9fSU5FVCwgJmEpLCAwLCBhcl9jYWxsYmFjaywgTlVMTCk7CisKKyAgICBkYiA9IGF2YWhpX3NfZG9tYWluX2Jyb3dzZXJfbmV3KHNlcnZlciwgQVZBSElfSUZfVU5TUEVDLCBBVkFISV9QUk9UT19VTlNQRUMsIE5VTEwsIEFWQUhJX0RPTUFJTl9CUk9XU0VSX0JST1dTRSwgMCwgZGJfY2FsbGJhY2ssIE5VTEwpOworCisgICAgc3RiID0gYXZhaGlfc19zZXJ2aWNlX3R5cGVfYnJvd3Nlcl9uZXcoc2VydmVyLCBBVkFISV9JRl9VTlNQRUMsIEFWQUhJX1BST1RPX1VOU1BFQywgTlVMTCwgMCwgc3RiX2NhbGxiYWNrLCBOVUxMKTsKKworICAgIHNiID0gYXZhaGlfc19zZXJ2aWNlX2Jyb3dzZXJfbmV3KHNlcnZlciwgQVZBSElfSUZfVU5TUEVDLCBBVkFISV9QUk9UT19VTlNQRUMsICJfaHR0cC5fdGNwIiwgTlVMTCwgMCwgc2JfY2FsbGJhY2ssIE5VTEwpOworCisgICAgc3IgPSBhdmFoaV9zX3NlcnZpY2VfcmVzb2x2ZXJfbmV3KHNlcnZlciwgQVZBSElfSUZfVU5TUEVDLCBBVkFISV9QUk9UT19VTlNQRUMsICJFY3N0YXN5IEhUVFAiLCAiX2h0dHAuX3RjcCIsICJsb2NhbCIsIEFWQUhJX1BST1RPX1VOU1BFQywgMCwgc3JfY2FsbGJhY2ssIE5VTEwpOworCisgICAgZHNiID0gYXZhaGlfc19kbnNfc2VydmVyX2Jyb3dzZXJfbmV3KHNlcnZlciwgQVZBSElfSUZfVU5TUEVDLCBBVkFISV9QUk9UT19VTlNQRUMsICJsb2NhbCIsIEFWQUhJX0ROU19TRVJWRVJfUkVTT0xWRSwgQVZBSElfUFJPVE9fVU5TUEVDLCAwLCBkc2JfY2FsbGJhY2ssIE5VTEwpOworCisgICAgYXZhaGlfZWxhcHNlX3RpbWUoJnR2LCAxMDAwKjUsIDApOworICAgIHBvbGxfYXBpLT50aW1lb3V0X25ldyhwb2xsX2FwaSwgJnR2LCBkdW1wX3RpbWVvdXRfY2FsbGJhY2ssIHNlcnZlcik7CisKKyAgICBhdmFoaV9lbGFwc2VfdGltZSgmdHYsIDEwMDAqNjAsIDApOworICAgIHBvbGxfYXBpLT50aW1lb3V0X25ldyhwb2xsX2FwaSwgJnR2LCBxdWl0X3RpbWVvdXRfY2FsbGJhY2ssIHNpbXBsZV9wb2xsKTsKKworICAgIGF2YWhpX3NpbXBsZV9wb2xsX2xvb3Aoc2ltcGxlX3BvbGwpOworCisgICAgYXZhaGlfc19yZWNvcmRfYnJvd3Nlcl9mcmVlKHIpOworICAgIGF2YWhpX3NfaG9zdF9uYW1lX3Jlc29sdmVyX2ZyZWUoaG5yKTsKKyAgICBhdmFoaV9zX2FkZHJlc3NfcmVzb2x2ZXJfZnJlZShhcik7CisgICAgYXZhaGlfc19kb21haW5fYnJvd3Nlcl9mcmVlKGRiKTsKKyAgICBhdmFoaV9zX3NlcnZpY2VfdHlwZV9icm93c2VyX2ZyZWUoc3RiKTsKKyAgICBhdmFoaV9zX3NlcnZpY2VfYnJvd3Nlcl9mcmVlKHNiKTsKKyAgICBhdmFoaV9zX3NlcnZpY2VfcmVzb2x2ZXJfZnJlZShzcik7CisgICAgYXZhaGlfc19kbnNfc2VydmVyX2Jyb3dzZXJfZnJlZShkc2IpOworCisgICAgaWYgKGdyb3VwKQorICAgICAgICBhdmFoaV9zX2VudHJ5X2dyb3VwX2ZyZWUoZ3JvdXApOworCisgICAgaWYgKHNlcnZlcikKKyAgICAgICAgYXZhaGlfc2VydmVyX2ZyZWUoc2VydmVyKTsKKworICAgIGlmIChzaW1wbGVfcG9sbCkKKyAgICAgICAgYXZhaGlfc2ltcGxlX3BvbGxfZnJlZShzaW1wbGVfcG9sbCk7CisKKyAgICBhdmFoaV9mcmVlKHNlcnZpY2VfbmFtZSk7CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL2Jyb3dzZS1kbnMtc2VydmVyLmMgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9icm93c2UtZG5zLXNlcnZlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MWMzOGYKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9icm93c2UtZG5zLXNlcnZlci5jCkBAIC0wLDAgKzEsMzIyIEBACisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2RvbWFpbi5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9tYWxsb2MuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vZXJyb3IuaD4KKworI2luY2x1ZGUgImJyb3dzZS5oIgorI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInJyLmgiCisKK3R5cGVkZWYgc3RydWN0IEF2YWhpRE5TU2VydmVySW5mbyBBdmFoaUROU1NlcnZlckluZm87CisKK3N0cnVjdCBBdmFoaUROU1NlcnZlckluZm8geworICAgIEF2YWhpU0ROU1NlcnZlckJyb3dzZXIgKmJyb3dzZXI7CisKKyAgICBBdmFoaUlmSW5kZXggaW50ZXJmYWNlOworICAgIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2w7CisgICAgQXZhaGlSZWNvcmQgKnNydl9yZWNvcmQ7CisgICAgQXZhaGlTSG9zdE5hbWVSZXNvbHZlciAqaG9zdF9uYW1lX3Jlc29sdmVyOworICAgIEF2YWhpQWRkcmVzcyBhZGRyZXNzOworICAgIEF2YWhpTG9va3VwUmVzdWx0RmxhZ3MgZmxhZ3M7CisKKyAgICBBVkFISV9MTElTVF9GSUVMRFMoQXZhaGlETlNTZXJ2ZXJJbmZvLCBpbmZvKTsKK307CisKK3N0cnVjdCBBdmFoaVNETlNTZXJ2ZXJCcm93c2VyIHsKKyAgICBBdmFoaVNlcnZlciAqc2VydmVyOworCisgICAgQXZhaGlTUmVjb3JkQnJvd3NlciAqcmVjb3JkX2Jyb3dzZXI7CisgICAgQXZhaGlTRE5TU2VydmVyQnJvd3NlckNhbGxiYWNrIGNhbGxiYWNrOworICAgIHZvaWQqIHVzZXJkYXRhOworICAgIEF2YWhpUHJvdG9jb2wgYXByb3RvY29sOworICAgIEF2YWhpTG9va3VwRmxhZ3MgdXNlcl9mbGFnczsKKworICAgIHVuc2lnbmVkIG5faW5mbzsKKworICAgIEFWQUhJX0xMSVNUX0ZJRUxEUyhBdmFoaVNETlNTZXJ2ZXJCcm93c2VyLCBicm93c2VyKTsKKyAgICBBVkFISV9MTElTVF9IRUFEKEF2YWhpRE5TU2VydmVySW5mbywgaW5mbyk7Cit9OworCitzdGF0aWMgQXZhaGlETlNTZXJ2ZXJJbmZvKiBnZXRfc2VydmVyX2luZm8oQXZhaGlTRE5TU2VydmVyQnJvd3NlciAqYiwgQXZhaGlJZkluZGV4IGludGVyZmFjZSwgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwgQXZhaGlSZWNvcmQgKnIpIHsKKyAgICBBdmFoaUROU1NlcnZlckluZm8gKmk7CisKKyAgICBhc3NlcnQoYik7CisgICAgYXNzZXJ0KHIpOworCisgICAgZm9yIChpID0gYi0+aW5mbzsgaTsgaSA9IGktPmluZm9fbmV4dCkKKyAgICAgICAgaWYgKGktPmludGVyZmFjZSA9PSBpbnRlcmZhY2UgJiYKKyAgICAgICAgICAgIGktPnByb3RvY29sID09IHByb3RvY29sICYmCisgICAgICAgICAgICBhdmFoaV9yZWNvcmRfZXF1YWxfbm9fdHRsKHIsIGktPnNydl9yZWNvcmQpKQorICAgICAgICAgICAgcmV0dXJuIGk7CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgc2VydmVyX2luZm9fZnJlZShBdmFoaVNETlNTZXJ2ZXJCcm93c2VyICpiLCBBdmFoaUROU1NlcnZlckluZm8gKmkpIHsKKyAgICBhc3NlcnQoYik7CisgICAgYXNzZXJ0KGkpOworCisgICAgYXZhaGlfcmVjb3JkX3VucmVmKGktPnNydl9yZWNvcmQpOworICAgIGlmIChpLT5ob3N0X25hbWVfcmVzb2x2ZXIpCisgICAgICAgIGF2YWhpX3NfaG9zdF9uYW1lX3Jlc29sdmVyX2ZyZWUoaS0+aG9zdF9uYW1lX3Jlc29sdmVyKTsKKworICAgIEFWQUhJX0xMSVNUX1JFTU9WRShBdmFoaUROU1NlcnZlckluZm8sIGluZm8sIGItPmluZm8sIGkpOworCisgICAgYXNzZXJ0KGItPm5faW5mbyA+PSAxKTsKKyAgICBiLT5uX2luZm8tLTsKKworICAgIGF2YWhpX2ZyZWUoaSk7Cit9CisKK3N0YXRpYyB2b2lkIGhvc3RfbmFtZV9yZXNvbHZlcl9jYWxsYmFjaygKKyAgICBBdmFoaVNIb3N0TmFtZVJlc29sdmVyICpyLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgQXZhaGlJZkluZGV4IGludGVyZmFjZSwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsCisgICAgQXZhaGlSZXNvbHZlckV2ZW50IGV2ZW50LAorICAgIGNvbnN0IGNoYXIgKmhvc3RfbmFtZSwKKyAgICBjb25zdCBBdmFoaUFkZHJlc3MgKmEsCisgICAgQXZhaGlMb29rdXBSZXN1bHRGbGFncyBmbGFncywKKyAgICB2b2lkKiB1c2VyZGF0YSkgeworCisgICAgQXZhaGlETlNTZXJ2ZXJJbmZvICppID0gdXNlcmRhdGE7CisKKyAgICBhc3NlcnQocik7CisgICAgYXNzZXJ0KGhvc3RfbmFtZSk7CisgICAgYXNzZXJ0KGkpOworCisgICAgc3dpdGNoIChldmVudCkgeworICAgICAgICBjYXNlIEFWQUhJX1JFU09MVkVSX0ZPVU5EOiB7CisgICAgICAgICAgICBpLT5hZGRyZXNzID0gKmE7CisKKyAgICAgICAgICAgIGktPmJyb3dzZXItPmNhbGxiYWNrKAorICAgICAgICAgICAgICAgIGktPmJyb3dzZXIsCisgICAgICAgICAgICAgICAgaS0+aW50ZXJmYWNlLAorICAgICAgICAgICAgICAgIGktPnByb3RvY29sLAorICAgICAgICAgICAgICAgIEFWQUhJX0JST1dTRVJfTkVXLAorICAgICAgICAgICAgICAgIGktPnNydl9yZWNvcmQtPmRhdGEuc3J2Lm5hbWUsCisgICAgICAgICAgICAgICAgJmktPmFkZHJlc3MsCisgICAgICAgICAgICAgICAgaS0+c3J2X3JlY29yZC0+ZGF0YS5zcnYucG9ydCwKKyAgICAgICAgICAgICAgICBpLT5mbGFncyB8IGZsYWdzLAorICAgICAgICAgICAgICAgIGktPmJyb3dzZXItPnVzZXJkYXRhKTsKKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEFWQUhJX1JFU09MVkVSX0ZBSUxVUkU6CisgICAgICAgICAgICAvKiBJZ25vcmUgKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGF2YWhpX3NfaG9zdF9uYW1lX3Jlc29sdmVyX2ZyZWUoaS0+aG9zdF9uYW1lX3Jlc29sdmVyKTsKKyAgICBpLT5ob3N0X25hbWVfcmVzb2x2ZXIgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZCByZWNvcmRfYnJvd3Nlcl9jYWxsYmFjaygKKyAgICBBdmFoaVNSZWNvcmRCcm93c2VyKnJyLAorICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsCisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICBBdmFoaUJyb3dzZXJFdmVudCBldmVudCwKKyAgICBBdmFoaVJlY29yZCAqcmVjb3JkLAorICAgIEF2YWhpTG9va3VwUmVzdWx0RmxhZ3MgZmxhZ3MsCisgICAgdm9pZCogdXNlcmRhdGEpIHsKKworICAgIEF2YWhpU0ROU1NlcnZlckJyb3dzZXIgKmIgPSB1c2VyZGF0YTsKKworICAgIGFzc2VydChycik7CisgICAgYXNzZXJ0KGIpOworCisgICAgLyogRmlsdGVyIGZsYWdzICovCisgICAgZmxhZ3MgJj0gQVZBSElfTE9PS1VQX1JFU1VMVF9DQUNIRUQgfCBBVkFISV9MT09LVVBfUkVTVUxUX01VTFRJQ0FTVCB8IEFWQUhJX0xPT0tVUF9SRVNVTFRfV0lERV9BUkVBOworCisgICAgc3dpdGNoIChldmVudCkgeworICAgICAgICBjYXNlIEFWQUhJX0JST1dTRVJfTkVXOiB7CisgICAgICAgICAgICBBdmFoaUROU1NlcnZlckluZm8gKmk7CisKKyAgICAgICAgICAgIGFzc2VydChyZWNvcmQpOworICAgICAgICAgICAgYXNzZXJ0KHJlY29yZC0+a2V5LT50eXBlID09IEFWQUhJX0ROU19UWVBFX1NSVik7CisKKyAgICAgICAgICAgIGlmIChnZXRfc2VydmVyX2luZm8oYiwgaW50ZXJmYWNlLCBwcm90b2NvbCwgcmVjb3JkKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGlmIChiLT5uX2luZm8gPj0gMTApCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoIShpID0gYXZhaGlfbmV3KEF2YWhpRE5TU2VydmVySW5mbywgMSkpKQorICAgICAgICAgICAgICAgIHJldHVybjsgLyogT09NICovCisKKyAgICAgICAgICAgIGktPmJyb3dzZXIgPSBiOworICAgICAgICAgICAgaS0+aW50ZXJmYWNlID0gaW50ZXJmYWNlOworICAgICAgICAgICAgaS0+cHJvdG9jb2wgPSBwcm90b2NvbDsKKyAgICAgICAgICAgIGktPnNydl9yZWNvcmQgPSBhdmFoaV9yZWNvcmRfcmVmKHJlY29yZCk7CisgICAgICAgICAgICBpLT5ob3N0X25hbWVfcmVzb2x2ZXIgPSBhdmFoaV9zX2hvc3RfbmFtZV9yZXNvbHZlcl9uZXcoCisgICAgICAgICAgICAgICAgYi0+c2VydmVyLAorICAgICAgICAgICAgICAgIGludGVyZmFjZSwgcHJvdG9jb2wsCisgICAgICAgICAgICAgICAgcmVjb3JkLT5kYXRhLnNydi5uYW1lLAorICAgICAgICAgICAgICAgIGItPmFwcm90b2NvbCwKKyAgICAgICAgICAgICAgICBiLT51c2VyX2ZsYWdzLAorICAgICAgICAgICAgICAgIGhvc3RfbmFtZV9yZXNvbHZlcl9jYWxsYmFjaywgaSk7CisgICAgICAgICAgICBpLT5mbGFncyA9IGZsYWdzOworCisgICAgICAgICAgICBBVkFISV9MTElTVF9QUkVQRU5EKEF2YWhpRE5TU2VydmVySW5mbywgaW5mbywgYi0+aW5mbywgaSk7CisKKyAgICAgICAgICAgIGItPm5faW5mbysrOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEFWQUhJX0JST1dTRVJfUkVNT1ZFOiB7CisgICAgICAgICAgICBBdmFoaUROU1NlcnZlckluZm8gKmk7CisKKyAgICAgICAgICAgIGFzc2VydChyZWNvcmQpOworICAgICAgICAgICAgYXNzZXJ0KHJlY29yZC0+a2V5LT50eXBlID09IEFWQUhJX0ROU19UWVBFX1NSVik7CisKKyAgICAgICAgICAgIGlmICghKGkgPSBnZXRfc2VydmVyX2luZm8oYiwgaW50ZXJmYWNlLCBwcm90b2NvbCwgcmVjb3JkKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoIWktPmhvc3RfbmFtZV9yZXNvbHZlcikKKyAgICAgICAgICAgICAgICBiLT5jYWxsYmFjaygKKyAgICAgICAgICAgICAgICAgICAgYiwKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICAgICBwcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgZXZlbnQsCisgICAgICAgICAgICAgICAgICAgIGktPnNydl9yZWNvcmQtPmRhdGEuc3J2Lm5hbWUsCisgICAgICAgICAgICAgICAgICAgICZpLT5hZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICBpLT5zcnZfcmVjb3JkLT5kYXRhLnNydi5wb3J0LAorICAgICAgICAgICAgICAgICAgICBpLT5mbGFncyB8IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICBiLT51c2VyZGF0YSk7CisKKyAgICAgICAgICAgIHNlcnZlcl9pbmZvX2ZyZWUoYiwgaSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgQVZBSElfQlJPV1NFUl9GQUlMVVJFOgorICAgICAgICBjYXNlIEFWQUhJX0JST1dTRVJfQUxMX0ZPUl9OT1c6CisgICAgICAgIGNhc2UgQVZBSElfQlJPV1NFUl9DQUNIRV9FWEhBVVNURUQ6CisKKyAgICAgICAgICAgIGItPmNhbGxiYWNrKAorICAgICAgICAgICAgICAgIGIsCisgICAgICAgICAgICAgICAgaW50ZXJmYWNlLAorICAgICAgICAgICAgICAgIHByb3RvY29sLAorICAgICAgICAgICAgICAgIGV2ZW50LAorICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgIGZsYWdzLAorICAgICAgICAgICAgICAgIGItPnVzZXJkYXRhKTsKKworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitBdmFoaVNETlNTZXJ2ZXJCcm93c2VyICphdmFoaV9zX2Ruc19zZXJ2ZXJfYnJvd3Nlcl9uZXcoCisgICAgQXZhaGlTZXJ2ZXIgKnNlcnZlciwKKyAgICBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLAorICAgIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsCisgICAgY29uc3QgY2hhciAqZG9tYWluLAorICAgIEF2YWhpRE5TU2VydmVyVHlwZSB0eXBlLAorICAgIEF2YWhpUHJvdG9jb2wgYXByb3RvY29sLAorICAgIEF2YWhpTG9va3VwRmxhZ3MgZmxhZ3MsCisgICAgQXZhaGlTRE5TU2VydmVyQnJvd3NlckNhbGxiYWNrIGNhbGxiYWNrLAorICAgIHZvaWQqIHVzZXJkYXRhKSB7CisKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHR5cGVfdGFibGVbQVZBSElfRE5TX1NFUlZFUl9NQVhdID0geworICAgICAgICAiX2RvbWFpbi5fdWRwIiwKKyAgICAgICAgIl9kbnMtdXBkYXRlLl91ZHAiCisgICAgfTsKKworICAgIEF2YWhpU0ROU1NlcnZlckJyb3dzZXIgKmI7CisgICAgQXZhaGlLZXkgKmsgPSBOVUxMOworICAgIGNoYXIgbltBVkFISV9ET01BSU5fTkFNRV9NQVhdOworICAgIGludCByOworCisgICAgYXNzZXJ0KHNlcnZlcik7CisgICAgYXNzZXJ0KGNhbGxiYWNrKTsKKworICAgIEFWQUhJX0NIRUNLX1ZBTElESVRZX1JFVFVSTl9OVUxMKHNlcnZlciwgQVZBSElfSUZfVkFMSUQoaW50ZXJmYWNlKSwgQVZBSElfRVJSX0lOVkFMSURfSU5URVJGQUNFKTsKKyAgICBBVkFISV9DSEVDS19WQUxJRElUWV9SRVRVUk5fTlVMTChzZXJ2ZXIsIEFWQUhJX1BST1RPX1ZBTElEKHByb3RvY29sKSwgQVZBSElfRVJSX0lOVkFMSURfUFJPVE9DT0wpOworICAgIEFWQUhJX0NIRUNLX1ZBTElESVRZX1JFVFVSTl9OVUxMKHNlcnZlciwgQVZBSElfUFJPVE9fVkFMSUQoYXByb3RvY29sKSwgQVZBSElfRVJSX0lOVkFMSURfUFJPVE9DT0wpOworICAgIEFWQUhJX0NIRUNLX1ZBTElESVRZX1JFVFVSTl9OVUxMKHNlcnZlciwgIWRvbWFpbiB8fCBhdmFoaV9pc192YWxpZF9kb21haW5fbmFtZShkb21haW4pLCBBVkFISV9FUlJfSU5WQUxJRF9ET01BSU5fTkFNRSk7CisgICAgQVZBSElfQ0hFQ0tfVkFMSURJVFlfUkVUVVJOX05VTEwoc2VydmVyLCBBVkFISV9GTEFHU19WQUxJRChmbGFncywgQVZBSElfTE9PS1VQX1VTRV9XSURFX0FSRUF8QVZBSElfTE9PS1VQX1VTRV9NVUxUSUNBU1QpLCBBVkFISV9FUlJfSU5WQUxJRF9GTEFHUyk7CisgICAgQVZBSElfQ0hFQ0tfVkFMSURJVFlfUkVUVVJOX05VTEwoc2VydmVyLCB0eXBlIDwgQVZBSElfRE5TX1NFUlZFUl9NQVgsIEFWQUhJX0VSUl9JTlZBTElEX0ZMQUdTKTsKKworICAgIGlmICghZG9tYWluKQorICAgICAgICBkb21haW4gPSBzZXJ2ZXItPmRvbWFpbl9uYW1lOworCisgICAgaWYgKChyID0gYXZhaGlfc2VydmljZV9uYW1lX2pvaW4obiwgc2l6ZW9mKG4pLCBOVUxMLCB0eXBlX3RhYmxlW3R5cGVdLCBkb21haW4pKSA8IDApIHsKKyAgICAgICAgYXZhaGlfc2VydmVyX3NldF9lcnJubyhzZXJ2ZXIsIHIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoIShiID0gYXZhaGlfbmV3KEF2YWhpU0ROU1NlcnZlckJyb3dzZXIsIDEpKSkgeworICAgICAgICBhdmFoaV9zZXJ2ZXJfc2V0X2Vycm5vKHNlcnZlciwgQVZBSElfRVJSX05PX01FTU9SWSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGItPnNlcnZlciA9IHNlcnZlcjsKKyAgICBiLT5jYWxsYmFjayA9IGNhbGxiYWNrOworICAgIGItPnVzZXJkYXRhID0gdXNlcmRhdGE7CisgICAgYi0+YXByb3RvY29sID0gYXByb3RvY29sOworICAgIGItPm5faW5mbyA9IDA7CisgICAgYi0+dXNlcl9mbGFncyA9IGZsYWdzOworCisgICAgQVZBSElfTExJU1RfSEVBRF9JTklUKEF2YWhpRE5TU2VydmVySW5mbywgYi0+aW5mbyk7CisgICAgQVZBSElfTExJU1RfUFJFUEVORChBdmFoaVNETlNTZXJ2ZXJCcm93c2VyLCBicm93c2VyLCBzZXJ2ZXItPmRuc19zZXJ2ZXJfYnJvd3NlcnMsIGIpOworCisgICAgaWYgKCEoayA9IGF2YWhpX2tleV9uZXcobiwgQVZBSElfRE5TX0NMQVNTX0lOLCBBVkFISV9ETlNfVFlQRV9TUlYpKSkgeworICAgICAgICBhdmFoaV9zZXJ2ZXJfc2V0X2Vycm5vKHNlcnZlciwgQVZBSElfRVJSX05PX01FTU9SWSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBpZiAoIShiLT5yZWNvcmRfYnJvd3NlciA9IGF2YWhpX3NfcmVjb3JkX2Jyb3dzZXJfbmV3KHNlcnZlciwgaW50ZXJmYWNlLCBwcm90b2NvbCwgaywgZmxhZ3MsIHJlY29yZF9icm93c2VyX2NhbGxiYWNrLCBiKSkpCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIGF2YWhpX2tleV91bnJlZihrKTsKKworICAgIHJldHVybiBiOworCitmYWlsOgorCisgICAgaWYgKGspCisgICAgICAgIGF2YWhpX2tleV91bnJlZihrKTsKKworICAgIGF2YWhpX3NfZG5zX3NlcnZlcl9icm93c2VyX2ZyZWUoYik7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgYXZhaGlfc19kbnNfc2VydmVyX2Jyb3dzZXJfZnJlZShBdmFoaVNETlNTZXJ2ZXJCcm93c2VyICpiKSB7CisgICAgYXNzZXJ0KGIpOworCisgICAgd2hpbGUgKGItPmluZm8pCisgICAgICAgIHNlcnZlcl9pbmZvX2ZyZWUoYiwgYi0+aW5mbyk7CisKKyAgICBBVkFISV9MTElTVF9SRU1PVkUoQXZhaGlTRE5TU2VydmVyQnJvd3NlciwgYnJvd3NlciwgYi0+c2VydmVyLT5kbnNfc2VydmVyX2Jyb3dzZXJzLCBiKTsKKworICAgIGlmIChiLT5yZWNvcmRfYnJvd3NlcikKKyAgICAgICAgYXZhaGlfc19yZWNvcmRfYnJvd3Nlcl9mcmVlKGItPnJlY29yZF9icm93c2VyKTsKKworICAgIGF2YWhpX2ZyZWUoYik7Cit9CisKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL2Jyb3dzZS1kb21haW4uYyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL2Jyb3dzZS1kb21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzA1YjJhCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvYnJvd3NlLWRvbWFpbi5jCkBAIC0wLDAgKzEsMjM1IEBACisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2RvbWFpbi5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9tYWxsb2MuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vZXJyb3IuaD4KKworI2luY2x1ZGUgImJyb3dzZS5oIgorI2luY2x1ZGUgImxvZy5oIgorCitzdHJ1Y3QgQXZhaGlTRG9tYWluQnJvd3NlciB7CisgICAgaW50IHJlZjsKKworICAgIEF2YWhpU2VydmVyICpzZXJ2ZXI7CisKKyAgICBBdmFoaVNSZWNvcmRCcm93c2VyICpyZWNvcmRfYnJvd3NlcjsKKworICAgIEF2YWhpRG9tYWluQnJvd3NlclR5cGUgdHlwZTsKKyAgICBBdmFoaVNEb21haW5Ccm93c2VyQ2FsbGJhY2sgY2FsbGJhY2s7CisgICAgdm9pZCogdXNlcmRhdGE7CisKKyAgICBBdmFoaVRpbWVFdmVudCAqZGVmZXJfZXZlbnQ7CisKKyAgICBpbnQgYWxsX2Zvcl9ub3dfc2NoZWR1bGVkOworCisgICAgQVZBSElfTExJU1RfRklFTERTKEF2YWhpU0RvbWFpbkJyb3dzZXIsIGJyb3dzZXIpOworfTsKKworc3RhdGljIHZvaWQgaW5jX3JlZihBdmFoaVNEb21haW5Ccm93c2VyICpiKSB7CisgICAgYXNzZXJ0KGIpOworICAgIGFzc2VydChiLT5yZWYgPj0gMSk7CisKKyAgICBiLT5yZWYrKzsKK30KKworc3RhdGljIHZvaWQgcmVjb3JkX2Jyb3dzZXJfY2FsbGJhY2soCisgICAgQXZhaGlTUmVjb3JkQnJvd3NlcipyciwKKyAgICBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLAorICAgIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsCisgICAgQXZhaGlCcm93c2VyRXZlbnQgZXZlbnQsCisgICAgQXZhaGlSZWNvcmQgKnJlY29yZCwKKyAgICBBdmFoaUxvb2t1cFJlc3VsdEZsYWdzIGZsYWdzLAorICAgIHZvaWQqIHVzZXJkYXRhKSB7CisKKyAgICBBdmFoaVNEb21haW5Ccm93c2VyICpiID0gdXNlcmRhdGE7CisgICAgY2hhciAqbiA9IE5VTEw7CisKKyAgICBhc3NlcnQocnIpOworICAgIGFzc2VydChiKTsKKworICAgIGlmIChldmVudCA9PSBBVkFISV9CUk9XU0VSX0FMTF9GT1JfTk9XICYmCisgICAgICAgIGItPmRlZmVyX2V2ZW50KSB7CisKKyAgICAgICAgYi0+YWxsX2Zvcl9ub3dfc2NoZWR1bGVkID0gMTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qIEZpbHRlciBmbGFncyAqLworICAgIGZsYWdzICY9IEFWQUhJX0xPT0tVUF9SRVNVTFRfQ0FDSEVEIHwgQVZBSElfTE9PS1VQX1JFU1VMVF9NVUxUSUNBU1QgfCBBVkFISV9MT09LVVBfUkVTVUxUX1dJREVfQVJFQTsKKworICAgIGlmIChyZWNvcmQpIHsKKyAgICAgICAgYXNzZXJ0KHJlY29yZC0+a2V5LT50eXBlID09IEFWQUhJX0ROU19UWVBFX1BUUik7CisgICAgICAgIG4gPSByZWNvcmQtPmRhdGEucHRyLm5hbWU7CisKKyAgICAgICAgaWYgKGItPnR5cGUgPT0gQVZBSElfRE9NQUlOX0JST1dTRVJfQlJPV1NFKSB7CisgICAgICAgICAgICBBdmFoaVN0cmluZ0xpc3QgKmw7CisKKyAgICAgICAgICAgIC8qIEZpbHRlciBvdXQgZW50cmllcyBkZWZpbmVkIHN0YXRpY2FsbHkgKi8KKworICAgICAgICAgICAgZm9yIChsID0gYi0+c2VydmVyLT5jb25maWcuYnJvd3NlX2RvbWFpbnM7IGw7IGwgPSBsLT5uZXh0KQorICAgICAgICAgICAgICAgIGlmIChhdmFoaV9kb21haW5fZXF1YWwoKGNoYXIqKSBsLT50ZXh0LCBuKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICB9CisKKyAgICBiLT5jYWxsYmFjayhiLCBpbnRlcmZhY2UsIHByb3RvY29sLCBldmVudCwgbiwgZmxhZ3MsIGItPnVzZXJkYXRhKTsKK30KKworc3RhdGljIHZvaWQgZGVmZXJfY2FsbGJhY2soQXZhaGlUaW1lRXZlbnQgKmUsIHZvaWQgKnVzZXJkYXRhKSB7CisgICAgQXZhaGlTRG9tYWluQnJvd3NlciAqYiA9IHVzZXJkYXRhOworICAgIEF2YWhpU3RyaW5nTGlzdCAqbDsKKworICAgIGFzc2VydChlKTsKKyAgICBhc3NlcnQoYik7CisKKyAgICBhc3NlcnQoYi0+dHlwZSA9PSBBVkFISV9ET01BSU5fQlJPV1NFUl9CUk9XU0UpOworCisgICAgYXZhaGlfdGltZV9ldmVudF9mcmVlKGItPmRlZmVyX2V2ZW50KTsKKyAgICBiLT5kZWZlcl9ldmVudCA9IE5VTEw7CisKKyAgICAvKiBJbmNyZWFzZSByZWYgY291bnRlciAqLworICAgIGluY19yZWYoYik7CisKKyAgICBmb3IgKGwgPSBiLT5zZXJ2ZXItPmNvbmZpZy5icm93c2VfZG9tYWluczsgbDsgbCA9IGwtPm5leHQpIHsKKworICAgICAgICAvKiBDaGVjayB3aGV0aGVyIHRoaXMgb2JqZWN0IHN0aWxsIGV4aXN0cyBvdXRzaWRlIG91ciBvd24KKyAgICAgICAgICogc3RhY2sgZnJhbWUgKi8KKyAgICAgICAgaWYgKGItPnJlZiA8PSAxKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgYi0+Y2FsbGJhY2soYiwgQVZBSElfSUZfVU5TUEVDLCBBVkFISV9QUk9UT19VTlNQRUMsIEFWQUhJX0JST1dTRVJfTkVXLCAoY2hhciopIGwtPnRleHQsIEFWQUhJX0xPT0tVUF9SRVNVTFRfU1RBVElDLCBiLT51c2VyZGF0YSk7CisgICAgfQorCisgICAgaWYgKGItPnJlZiA+IDEpIHsKKyAgICAgICAgLyogSWYgdGhlIEFMTF9GT1JfTk9XIGV2ZW50IGhhcyBhbHJlYWR5IGJlZW4gc2NoZWR1bGVkLCBleGVjdXRlIGl0IG5vdyAqLworCisgICAgICAgIGlmIChiLT5hbGxfZm9yX25vd19zY2hlZHVsZWQpCisgICAgICAgICAgICBiLT5jYWxsYmFjayhiLCBBVkFISV9JRl9VTlNQRUMsIEFWQUhJX1BST1RPX1VOU1BFQywgQVZBSElfQlJPV1NFUl9BTExfRk9SX05PVywgTlVMTCwgMCwgYi0+dXNlcmRhdGEpOworICAgIH0KKworICAgIC8qIERlY3JlYXNlIHJlZiBjb3VudGVyICovCisgICAgYXZhaGlfc19kb21haW5fYnJvd3Nlcl9mcmVlKGIpOworfQorCitBdmFoaVNEb21haW5Ccm93c2VyICphdmFoaV9zX2RvbWFpbl9icm93c2VyX25ldygKKyAgICBBdmFoaVNlcnZlciAqc2VydmVyLAorICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsCisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICBjb25zdCBjaGFyICpkb21haW4sCisgICAgQXZhaGlEb21haW5Ccm93c2VyVHlwZSB0eXBlLAorICAgIEF2YWhpTG9va3VwRmxhZ3MgZmxhZ3MsCisgICAgQXZhaGlTRG9tYWluQnJvd3NlckNhbGxiYWNrIGNhbGxiYWNrLAorICAgIHZvaWQqIHVzZXJkYXRhKSB7CisKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHR5cGVfdGFibGVbQVZBSElfRE9NQUlOX0JST1dTRVJfTUFYXSA9IHsKKyAgICAgICAgImIiLAorICAgICAgICAiZGIiLAorICAgICAgICAiciIsCisgICAgICAgICJkciIsCisgICAgICAgICJsYiIKKyAgICB9OworCisgICAgQXZhaGlTRG9tYWluQnJvd3NlciAqYjsKKyAgICBBdmFoaUtleSAqayA9IE5VTEw7CisgICAgY2hhciBuW0FWQUhJX0RPTUFJTl9OQU1FX01BWF07CisgICAgaW50IHI7CisKKyAgICBhc3NlcnQoc2VydmVyKTsKKyAgICBhc3NlcnQoY2FsbGJhY2spOworCisgICAgQVZBSElfQ0hFQ0tfVkFMSURJVFlfUkVUVVJOX05VTEwoc2VydmVyLCBBVkFISV9JRl9WQUxJRChpbnRlcmZhY2UpLCBBVkFISV9FUlJfSU5WQUxJRF9JTlRFUkZBQ0UpOworICAgIEFWQUhJX0NIRUNLX1ZBTElESVRZX1JFVFVSTl9OVUxMKHNlcnZlciwgQVZBSElfUFJPVE9fVkFMSUQocHJvdG9jb2wpLCBBVkFISV9FUlJfSU5WQUxJRF9QUk9UT0NPTCk7CisgICAgQVZBSElfQ0hFQ0tfVkFMSURJVFlfUkVUVVJOX05VTEwoc2VydmVyLCB0eXBlIDwgQVZBSElfRE9NQUlOX0JST1dTRVJfTUFYLCBBVkFISV9FUlJfSU5WQUxJRF9GTEFHUyk7CisgICAgQVZBSElfQ0hFQ0tfVkFMSURJVFlfUkVUVVJOX05VTEwoc2VydmVyLCAhZG9tYWluIHx8IGF2YWhpX2lzX3ZhbGlkX2RvbWFpbl9uYW1lKGRvbWFpbiksIEFWQUhJX0VSUl9JTlZBTElEX0RPTUFJTl9OQU1FKTsKKyAgICBBVkFISV9DSEVDS19WQUxJRElUWV9SRVRVUk5fTlVMTChzZXJ2ZXIsIEFWQUhJX0ZMQUdTX1ZBTElEKGZsYWdzLCBBVkFISV9MT09LVVBfVVNFX1dJREVfQVJFQXxBVkFISV9MT09LVVBfVVNFX01VTFRJQ0FTVCksIEFWQUhJX0VSUl9JTlZBTElEX0ZMQUdTKTsKKworICAgIGlmICghZG9tYWluKQorICAgICAgICBkb21haW4gPSBzZXJ2ZXItPmRvbWFpbl9uYW1lOworCisgICAgaWYgKChyID0gYXZhaGlfc2VydmljZV9uYW1lX2pvaW4obiwgc2l6ZW9mKG4pLCB0eXBlX3RhYmxlW3R5cGVdLCAiX2Rucy1zZC5fdWRwIiwgZG9tYWluKSkgPCAwKSB7CisgICAgICAgIGF2YWhpX3NlcnZlcl9zZXRfZXJybm8oc2VydmVyLCByKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKCEoYiA9IGF2YWhpX25ldyhBdmFoaVNEb21haW5Ccm93c2VyLCAxKSkpIHsKKyAgICAgICAgYXZhaGlfc2VydmVyX3NldF9lcnJubyhzZXJ2ZXIsIEFWQUhJX0VSUl9OT19NRU1PUlkpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBiLT5yZWYgPSAxOworICAgIGItPnNlcnZlciA9IHNlcnZlcjsKKyAgICBiLT5jYWxsYmFjayA9IGNhbGxiYWNrOworICAgIGItPnVzZXJkYXRhID0gdXNlcmRhdGE7CisgICAgYi0+cmVjb3JkX2Jyb3dzZXIgPSBOVUxMOworICAgIGItPnR5cGUgPSB0eXBlOworICAgIGItPmFsbF9mb3Jfbm93X3NjaGVkdWxlZCA9IDA7CisgICAgYi0+ZGVmZXJfZXZlbnQgPSBOVUxMOworCisgICAgQVZBSElfTExJU1RfUFJFUEVORChBdmFoaVNEb21haW5Ccm93c2VyLCBicm93c2VyLCBzZXJ2ZXItPmRvbWFpbl9icm93c2VycywgYik7CisKKyAgICBpZiAoIShrID0gYXZhaGlfa2V5X25ldyhuLCBBVkFISV9ETlNfQ0xBU1NfSU4sIEFWQUhJX0ROU19UWVBFX1BUUikpKSB7CisgICAgICAgIGF2YWhpX3NlcnZlcl9zZXRfZXJybm8oc2VydmVyLCBBVkFISV9FUlJfTk9fTUVNT1JZKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGlmICghKGItPnJlY29yZF9icm93c2VyID0gYXZhaGlfc19yZWNvcmRfYnJvd3Nlcl9uZXcoc2VydmVyLCBpbnRlcmZhY2UsIHByb3RvY29sLCBrLCBmbGFncywgcmVjb3JkX2Jyb3dzZXJfY2FsbGJhY2ssIGIpKSkKKyAgICAgICAgZ290byBmYWlsOworCisgICAgYXZhaGlfa2V5X3VucmVmKGspOworCisgICAgaWYgKHR5cGUgPT0gQVZBSElfRE9NQUlOX0JST1dTRVJfQlJPV1NFICYmIGItPnNlcnZlci0+Y29uZmlnLmJyb3dzZV9kb21haW5zKQorICAgICAgICBiLT5kZWZlcl9ldmVudCA9IGF2YWhpX3RpbWVfZXZlbnRfbmV3KHNlcnZlci0+dGltZV9ldmVudF9xdWV1ZSwgTlVMTCwgZGVmZXJfY2FsbGJhY2ssIGIpOworCisgICAgcmV0dXJuIGI7CisKK2ZhaWw6CisKKyAgICBpZiAoaykKKyAgICAgICAgYXZhaGlfa2V5X3VucmVmKGspOworCisgICAgYXZhaGlfc19kb21haW5fYnJvd3Nlcl9mcmVlKGIpOworCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgYXZhaGlfc19kb21haW5fYnJvd3Nlcl9mcmVlKEF2YWhpU0RvbWFpbkJyb3dzZXIgKmIpIHsKKyAgICBhc3NlcnQoYik7CisKKyAgICBhc3NlcnQoYi0+cmVmID49IDEpOworICAgIGlmICgtLWItPnJlZiA+IDApCisgICAgICAgIHJldHVybjsKKworICAgIEFWQUhJX0xMSVNUX1JFTU9WRShBdmFoaVNEb21haW5Ccm93c2VyLCBicm93c2VyLCBiLT5zZXJ2ZXItPmRvbWFpbl9icm93c2VycywgYik7CisKKyAgICBpZiAoYi0+cmVjb3JkX2Jyb3dzZXIpCisgICAgICAgIGF2YWhpX3NfcmVjb3JkX2Jyb3dzZXJfZnJlZShiLT5yZWNvcmRfYnJvd3Nlcik7CisKKyAgICBpZiAoYi0+ZGVmZXJfZXZlbnQpCisgICAgICAgIGF2YWhpX3RpbWVfZXZlbnRfZnJlZShiLT5kZWZlcl9ldmVudCk7CisKKyAgICBhdmFoaV9mcmVlKGIpOworfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvYnJvd3NlLXNlcnZpY2UtdHlwZS5jIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvYnJvd3NlLXNlcnZpY2UtdHlwZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmZmYwNzEKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9icm93c2Utc2VydmljZS10eXBlLmMKQEAgLTAsMCArMSwxNTcgQEAKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vZG9tYWluLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL21hbGxvYy5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9lcnJvci5oPgorCisjaW5jbHVkZSAiYnJvd3NlLmgiCisjaW5jbHVkZSAibG9nLmgiCisKK3N0cnVjdCBBdmFoaVNTZXJ2aWNlVHlwZUJyb3dzZXIgeworICAgIEF2YWhpU2VydmVyICpzZXJ2ZXI7CisgICAgY2hhciAqZG9tYWluX25hbWU7CisKKyAgICBBdmFoaVNSZWNvcmRCcm93c2VyICpyZWNvcmRfYnJvd3NlcjsKKworICAgIEF2YWhpU1NlcnZpY2VUeXBlQnJvd3NlckNhbGxiYWNrIGNhbGxiYWNrOworICAgIHZvaWQqIHVzZXJkYXRhOworCisgICAgQVZBSElfTExJU1RfRklFTERTKEF2YWhpU1NlcnZpY2VUeXBlQnJvd3NlciwgYnJvd3Nlcik7Cit9OworCitzdGF0aWMgdm9pZCByZWNvcmRfYnJvd3Nlcl9jYWxsYmFjaygKKyAgICBBdmFoaVNSZWNvcmRCcm93c2VyKnJyLAorICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsCisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICBBdmFoaUJyb3dzZXJFdmVudCBldmVudCwKKyAgICBBdmFoaVJlY29yZCAqcmVjb3JkLAorICAgIEF2YWhpTG9va3VwUmVzdWx0RmxhZ3MgZmxhZ3MsCisgICAgdm9pZCogdXNlcmRhdGEpIHsKKworICAgIEF2YWhpU1NlcnZpY2VUeXBlQnJvd3NlciAqYiA9IHVzZXJkYXRhOworCisgICAgYXNzZXJ0KHJyKTsKKyAgICBhc3NlcnQoYik7CisKKyAgICAvKiBGaWx0ZXIgZmxhZ3MgKi8KKyAgICBmbGFncyAmPSBBVkFISV9MT09LVVBfUkVTVUxUX0NBQ0hFRCB8IEFWQUhJX0xPT0tVUF9SRVNVTFRfTVVMVElDQVNUIHwgQVZBSElfTE9PS1VQX1JFU1VMVF9XSURFX0FSRUE7CisKKyAgICBpZiAocmVjb3JkKSB7CisgICAgICAgIGNoYXIgdHlwZVtBVkFISV9ET01BSU5fTkFNRV9NQVhdLCBkb21haW5bQVZBSElfRE9NQUlOX05BTUVfTUFYXTsKKworICAgICAgICBhc3NlcnQocmVjb3JkLT5rZXktPnR5cGUgPT0gQVZBSElfRE5TX1RZUEVfUFRSKTsKKworICAgICAgICBpZiAoYXZhaGlfc2VydmljZV9uYW1lX3NwbGl0KHJlY29yZC0+ZGF0YS5wdHIubmFtZSwgTlVMTCwgMCwgdHlwZSwgc2l6ZW9mKHR5cGUpLCBkb21haW4sIHNpemVvZihkb21haW4pKSA8IDApIHsKKyAgICAgICAgICAgIGF2YWhpX2xvZ193YXJuKCJJbnZhbGlkIHNlcnZpY2UgdHlwZSAnJXMnIiwgcmVjb3JkLT5rZXktPm5hbWUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYi0+Y2FsbGJhY2soYiwgaW50ZXJmYWNlLCBwcm90b2NvbCwgZXZlbnQsIHR5cGUsIGRvbWFpbiwgZmxhZ3MsIGItPnVzZXJkYXRhKTsKKyAgICB9IGVsc2UKKyAgICAgICAgYi0+Y2FsbGJhY2soYiwgaW50ZXJmYWNlLCBwcm90b2NvbCwgZXZlbnQsIE5VTEwsIGItPmRvbWFpbl9uYW1lLCBmbGFncywgYi0+dXNlcmRhdGEpOworfQorCitBdmFoaVNTZXJ2aWNlVHlwZUJyb3dzZXIgKmF2YWhpX3Nfc2VydmljZV90eXBlX2Jyb3dzZXJfbmV3KAorICAgIEF2YWhpU2VydmVyICpzZXJ2ZXIsCisgICAgQXZhaGlJZkluZGV4IGludGVyZmFjZSwKKyAgICBBdmFoaVByb3RvY29sIHByb3RvY29sLAorICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwKKyAgICBBdmFoaUxvb2t1cEZsYWdzIGZsYWdzLAorICAgIEF2YWhpU1NlcnZpY2VUeXBlQnJvd3NlckNhbGxiYWNrIGNhbGxiYWNrLAorICAgIHZvaWQqIHVzZXJkYXRhKSB7CisKKyAgICBBdmFoaVNTZXJ2aWNlVHlwZUJyb3dzZXIgKmI7CisgICAgQXZhaGlLZXkgKmsgPSBOVUxMOworICAgIGNoYXIgbltBVkFISV9ET01BSU5fTkFNRV9NQVhdOworICAgIGludCByOworCisgICAgYXNzZXJ0KHNlcnZlcik7CisgICAgYXNzZXJ0KGNhbGxiYWNrKTsKKworICAgIEFWQUhJX0NIRUNLX1ZBTElESVRZX1JFVFVSTl9OVUxMKHNlcnZlciwgQVZBSElfSUZfVkFMSUQoaW50ZXJmYWNlKSwgQVZBSElfRVJSX0lOVkFMSURfSU5URVJGQUNFKTsKKyAgICBBVkFISV9DSEVDS19WQUxJRElUWV9SRVRVUk5fTlVMTChzZXJ2ZXIsIEFWQUhJX1BST1RPX1ZBTElEKHByb3RvY29sKSwgQVZBSElfRVJSX0lOVkFMSURfUFJPVE9DT0wpOworICAgIEFWQUhJX0NIRUNLX1ZBTElESVRZX1JFVFVSTl9OVUxMKHNlcnZlciwgIWRvbWFpbiB8fCBhdmFoaV9pc192YWxpZF9kb21haW5fbmFtZShkb21haW4pLCBBVkFISV9FUlJfSU5WQUxJRF9ET01BSU5fTkFNRSk7CisgICAgQVZBSElfQ0hFQ0tfVkFMSURJVFlfUkVUVVJOX05VTEwoc2VydmVyLCBBVkFISV9GTEFHU19WQUxJRChmbGFncywgQVZBSElfTE9PS1VQX1VTRV9XSURFX0FSRUF8QVZBSElfTE9PS1VQX1VTRV9NVUxUSUNBU1QpLCBBVkFISV9FUlJfSU5WQUxJRF9GTEFHUyk7CisKKyAgICBpZiAoIWRvbWFpbikKKyAgICAgICAgZG9tYWluID0gc2VydmVyLT5kb21haW5fbmFtZTsKKworICAgIGlmICgociA9IGF2YWhpX3NlcnZpY2VfbmFtZV9qb2luKG4sIHNpemVvZihuKSwgTlVMTCwgIl9zZXJ2aWNlcy5fZG5zLXNkLl91ZHAiLCBkb21haW4pKSA8IDApIHsKKyAgICAgICAgYXZhaGlfc2VydmVyX3NldF9lcnJubyhzZXJ2ZXIsIHIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoIShiID0gYXZhaGlfbmV3KEF2YWhpU1NlcnZpY2VUeXBlQnJvd3NlciwgMSkpKSB7CisgICAgICAgIGF2YWhpX3NlcnZlcl9zZXRfZXJybm8oc2VydmVyLCBBVkFISV9FUlJfTk9fTUVNT1JZKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgYi0+c2VydmVyID0gc2VydmVyOworICAgIGItPmNhbGxiYWNrID0gY2FsbGJhY2s7CisgICAgYi0+dXNlcmRhdGEgPSB1c2VyZGF0YTsKKyAgICBiLT5yZWNvcmRfYnJvd3NlciA9IE5VTEw7CisKKyAgICBBVkFISV9MTElTVF9QUkVQRU5EKEF2YWhpU1NlcnZpY2VUeXBlQnJvd3NlciwgYnJvd3Nlciwgc2VydmVyLT5zZXJ2aWNlX3R5cGVfYnJvd3NlcnMsIGIpOworCisgICAgaWYgKCEoYi0+ZG9tYWluX25hbWUgPSBhdmFoaV9ub3JtYWxpemVfbmFtZV9zdHJkdXAoZG9tYWluKSkpIHsKKyAgICAgICAgYXZhaGlfc2VydmVyX3NldF9lcnJubyhzZXJ2ZXIsIEFWQUhJX0VSUl9OT19NRU1PUlkpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKCEoayA9IGF2YWhpX2tleV9uZXcobiwgQVZBSElfRE5TX0NMQVNTX0lOLCBBVkFISV9ETlNfVFlQRV9QVFIpKSkgeworICAgICAgICBhdmFoaV9zZXJ2ZXJfc2V0X2Vycm5vKHNlcnZlciwgQVZBSElfRVJSX05PX01FTU9SWSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBpZiAoIShiLT5yZWNvcmRfYnJvd3NlciA9IGF2YWhpX3NfcmVjb3JkX2Jyb3dzZXJfbmV3KHNlcnZlciwgaW50ZXJmYWNlLCBwcm90b2NvbCwgaywgZmxhZ3MsIHJlY29yZF9icm93c2VyX2NhbGxiYWNrLCBiKSkpCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIGF2YWhpX2tleV91bnJlZihrKTsKKworICAgIHJldHVybiBiOworCitmYWlsOgorICAgIGlmIChrKQorICAgICAgICBhdmFoaV9rZXlfdW5yZWYoayk7CisKKyAgICBhdmFoaV9zX3NlcnZpY2VfdHlwZV9icm93c2VyX2ZyZWUoYik7CisKKyAgICByZXR1cm4gTlVMTDsKK30KKwordm9pZCBhdmFoaV9zX3NlcnZpY2VfdHlwZV9icm93c2VyX2ZyZWUoQXZhaGlTU2VydmljZVR5cGVCcm93c2VyICpiKSB7CisgICAgYXNzZXJ0KGIpOworCisgICAgQVZBSElfTExJU1RfUkVNT1ZFKEF2YWhpU1NlcnZpY2VUeXBlQnJvd3NlciwgYnJvd3NlciwgYi0+c2VydmVyLT5zZXJ2aWNlX3R5cGVfYnJvd3NlcnMsIGIpOworCisgICAgaWYgKGItPnJlY29yZF9icm93c2VyKQorICAgICAgICBhdmFoaV9zX3JlY29yZF9icm93c2VyX2ZyZWUoYi0+cmVjb3JkX2Jyb3dzZXIpOworCisgICAgYXZhaGlfZnJlZShiLT5kb21haW5fbmFtZSk7CisgICAgYXZhaGlfZnJlZShiKTsKK30KKworCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9icm93c2Utc2VydmljZS5jIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvYnJvd3NlLXNlcnZpY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGUzNmJjCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvYnJvd3NlLXNlcnZpY2UuYwpAQCAtMCwwICsxLDE2NyBAQAorLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9kb21haW4uaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vbWFsbG9jLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2Vycm9yLmg+CisKKyNpbmNsdWRlICJicm93c2UuaCIKKyNpbmNsdWRlICJsb2cuaCIKKworc3RydWN0IEF2YWhpU1NlcnZpY2VCcm93c2VyIHsKKyAgICBBdmFoaVNlcnZlciAqc2VydmVyOworICAgIGNoYXIgKmRvbWFpbl9uYW1lOworICAgIGNoYXIgKnNlcnZpY2VfdHlwZTsKKworICAgIEF2YWhpU1JlY29yZEJyb3dzZXIgKnJlY29yZF9icm93c2VyOworCisgICAgQXZhaGlTU2VydmljZUJyb3dzZXJDYWxsYmFjayBjYWxsYmFjazsKKyAgICB2b2lkKiB1c2VyZGF0YTsKKworICAgIEFWQUhJX0xMSVNUX0ZJRUxEUyhBdmFoaVNTZXJ2aWNlQnJvd3NlciwgYnJvd3Nlcik7Cit9OworCitzdGF0aWMgdm9pZCByZWNvcmRfYnJvd3Nlcl9jYWxsYmFjaygKKyAgICBBdmFoaVNSZWNvcmRCcm93c2VyKnJyLAorICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsCisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICBBdmFoaUJyb3dzZXJFdmVudCBldmVudCwKKyAgICBBdmFoaVJlY29yZCAqcmVjb3JkLAorICAgIEF2YWhpTG9va3VwUmVzdWx0RmxhZ3MgZmxhZ3MsCisgICAgdm9pZCogdXNlcmRhdGEpIHsKKworICAgIEF2YWhpU1NlcnZpY2VCcm93c2VyICpiID0gdXNlcmRhdGE7CisKKyAgICBhc3NlcnQocnIpOworICAgIGFzc2VydChiKTsKKworICAgIC8qIEZpbHRlciBmbGFncyAqLworICAgIGZsYWdzICY9IEFWQUhJX0xPT0tVUF9SRVNVTFRfQ0FDSEVEIHwgQVZBSElfTE9PS1VQX1JFU1VMVF9NVUxUSUNBU1QgfCBBVkFISV9MT09LVVBfUkVTVUxUX1dJREVfQVJFQTsKKworICAgIGlmIChyZWNvcmQpIHsKKyAgICAgICAgY2hhciBzZXJ2aWNlW0FWQUhJX0xBQkVMX01BWF0sIHR5cGVbQVZBSElfRE9NQUlOX05BTUVfTUFYXSwgZG9tYWluW0FWQUhJX0RPTUFJTl9OQU1FX01BWF07CisKKyAgICAgICAgYXNzZXJ0KHJlY29yZC0+a2V5LT50eXBlID09IEFWQUhJX0ROU19UWVBFX1BUUik7CisKKyAgICAgICAgaWYgKGV2ZW50ID09IEFWQUhJX0JST1dTRVJfTkVXICYmIGF2YWhpX3NlcnZlcl9pc19zZXJ2aWNlX2xvY2FsKGItPnNlcnZlciwgaW50ZXJmYWNlLCBwcm90b2NvbCwgcmVjb3JkLT5kYXRhLnB0ci5uYW1lKSkKKyAgICAgICAgICAgIGZsYWdzIHw9IEFWQUhJX0xPT0tVUF9SRVNVTFRfTE9DQUw7CisKKyAgICAgICAgaWYgKGF2YWhpX3NlcnZpY2VfbmFtZV9zcGxpdChyZWNvcmQtPmRhdGEucHRyLm5hbWUsIHNlcnZpY2UsIHNpemVvZihzZXJ2aWNlKSwgdHlwZSwgc2l6ZW9mKHR5cGUpLCBkb21haW4sIHNpemVvZihkb21haW4pKSA8IDApIHsKKyAgICAgICAgICAgIGF2YWhpX2xvZ193YXJuKCJGYWlsZWQgdG8gc3BsaXQgJyVzJyIsIHJlY29yZC0+a2V5LT5uYW1lKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGItPmNhbGxiYWNrKGIsIGludGVyZmFjZSwgcHJvdG9jb2wsIGV2ZW50LCBzZXJ2aWNlLCB0eXBlLCBkb21haW4sIGZsYWdzLCBiLT51c2VyZGF0YSk7CisKKyAgICB9IGVsc2UKKyAgICAgICAgYi0+Y2FsbGJhY2soYiwgaW50ZXJmYWNlLCBwcm90b2NvbCwgZXZlbnQsIE5VTEwsIGItPnNlcnZpY2VfdHlwZSwgYi0+ZG9tYWluX25hbWUsIGZsYWdzLCBiLT51c2VyZGF0YSk7CisKK30KKworQXZhaGlTU2VydmljZUJyb3dzZXIgKmF2YWhpX3Nfc2VydmljZV9icm93c2VyX25ldygKKyAgICBBdmFoaVNlcnZlciAqc2VydmVyLAorICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsCisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICBjb25zdCBjaGFyICpzZXJ2aWNlX3R5cGUsCisgICAgY29uc3QgY2hhciAqZG9tYWluLAorICAgIEF2YWhpTG9va3VwRmxhZ3MgZmxhZ3MsCisgICAgQXZhaGlTU2VydmljZUJyb3dzZXJDYWxsYmFjayBjYWxsYmFjaywKKyAgICB2b2lkKiB1c2VyZGF0YSkgeworCisgICAgQXZhaGlTU2VydmljZUJyb3dzZXIgKmI7CisgICAgQXZhaGlLZXkgKmsgPSBOVUxMOworICAgIGNoYXIgbltBVkFISV9ET01BSU5fTkFNRV9NQVhdOworICAgIGludCByOworCisgICAgYXNzZXJ0KHNlcnZlcik7CisgICAgYXNzZXJ0KGNhbGxiYWNrKTsKKyAgICBhc3NlcnQoc2VydmljZV90eXBlKTsKKworICAgIEFWQUhJX0NIRUNLX1ZBTElESVRZX1JFVFVSTl9OVUxMKHNlcnZlciwgQVZBSElfSUZfVkFMSUQoaW50ZXJmYWNlKSwgQVZBSElfRVJSX0lOVkFMSURfSU5URVJGQUNFKTsKKyAgICBBVkFISV9DSEVDS19WQUxJRElUWV9SRVRVUk5fTlVMTChzZXJ2ZXIsIEFWQUhJX1BST1RPX1ZBTElEKHByb3RvY29sKSwgQVZBSElfRVJSX0lOVkFMSURfUFJPVE9DT0wpOworICAgIEFWQUhJX0NIRUNLX1ZBTElESVRZX1JFVFVSTl9OVUxMKHNlcnZlciwgIWRvbWFpbiB8fCBhdmFoaV9pc192YWxpZF9kb21haW5fbmFtZShkb21haW4pLCBBVkFISV9FUlJfSU5WQUxJRF9ET01BSU5fTkFNRSk7CisgICAgQVZBSElfQ0hFQ0tfVkFMSURJVFlfUkVUVVJOX05VTEwoc2VydmVyLCBBVkFISV9GTEFHU19WQUxJRChmbGFncywgQVZBSElfTE9PS1VQX1VTRV9XSURFX0FSRUF8QVZBSElfTE9PS1VQX1VTRV9NVUxUSUNBU1QpLCBBVkFISV9FUlJfSU5WQUxJRF9GTEFHUyk7CisgICAgQVZBSElfQ0hFQ0tfVkFMSURJVFlfUkVUVVJOX05VTEwoc2VydmVyLCBhdmFoaV9pc192YWxpZF9zZXJ2aWNlX3R5cGVfZ2VuZXJpYyhzZXJ2aWNlX3R5cGUpLCBBVkFISV9FUlJfSU5WQUxJRF9TRVJWSUNFX1RZUEUpOworCisgICAgaWYgKCFkb21haW4pCisgICAgICAgIGRvbWFpbiA9IHNlcnZlci0+ZG9tYWluX25hbWU7CisKKyAgICBpZiAoKHIgPSBhdmFoaV9zZXJ2aWNlX25hbWVfam9pbihuLCBzaXplb2YobiksIE5VTEwsIHNlcnZpY2VfdHlwZSwgZG9tYWluKSkgPCAwKSB7CisgICAgICAgIGF2YWhpX3NlcnZlcl9zZXRfZXJybm8oc2VydmVyLCByKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKCEoYiA9IGF2YWhpX25ldyhBdmFoaVNTZXJ2aWNlQnJvd3NlciwgMSkpKSB7CisgICAgICAgIGF2YWhpX3NlcnZlcl9zZXRfZXJybm8oc2VydmVyLCBBVkFISV9FUlJfTk9fTUVNT1JZKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgYi0+c2VydmVyID0gc2VydmVyOworICAgIGItPmRvbWFpbl9uYW1lID0gYi0+c2VydmljZV90eXBlID0gTlVMTDsKKyAgICBiLT5jYWxsYmFjayA9IGNhbGxiYWNrOworICAgIGItPnVzZXJkYXRhID0gdXNlcmRhdGE7CisgICAgYi0+cmVjb3JkX2Jyb3dzZXIgPSBOVUxMOworCisgICAgQVZBSElfTExJU1RfUFJFUEVORChBdmFoaVNTZXJ2aWNlQnJvd3NlciwgYnJvd3Nlciwgc2VydmVyLT5zZXJ2aWNlX2Jyb3dzZXJzLCBiKTsKKworICAgIGlmICghKGItPmRvbWFpbl9uYW1lID0gYXZhaGlfbm9ybWFsaXplX25hbWVfc3RyZHVwKGRvbWFpbikpIHx8CisgICAgICAgICEoYi0+c2VydmljZV90eXBlID0gYXZhaGlfbm9ybWFsaXplX25hbWVfc3RyZHVwKHNlcnZpY2VfdHlwZSkpKSB7CisgICAgICAgIGF2YWhpX3NlcnZlcl9zZXRfZXJybm8oc2VydmVyLCBBVkFISV9FUlJfTk9fTUVNT1JZKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGlmICghKGsgPSBhdmFoaV9rZXlfbmV3KG4sIEFWQUhJX0ROU19DTEFTU19JTiwgQVZBSElfRE5TX1RZUEVfUFRSKSkpIHsKKyAgICAgICAgYXZhaGlfc2VydmVyX3NldF9lcnJubyhzZXJ2ZXIsIEFWQUhJX0VSUl9OT19NRU1PUlkpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKCEoYi0+cmVjb3JkX2Jyb3dzZXIgPSBhdmFoaV9zX3JlY29yZF9icm93c2VyX25ldyhzZXJ2ZXIsIGludGVyZmFjZSwgcHJvdG9jb2wsIGssIGZsYWdzLCByZWNvcmRfYnJvd3Nlcl9jYWxsYmFjaywgYikpKQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICBhdmFoaV9rZXlfdW5yZWYoayk7CisKKyAgICByZXR1cm4gYjsKKworZmFpbDoKKworICAgIGlmIChrKQorICAgICAgICBhdmFoaV9rZXlfdW5yZWYoayk7CisKKyAgICBhdmFoaV9zX3NlcnZpY2VfYnJvd3Nlcl9mcmVlKGIpOworICAgIHJldHVybiBOVUxMOworfQorCit2b2lkIGF2YWhpX3Nfc2VydmljZV9icm93c2VyX2ZyZWUoQXZhaGlTU2VydmljZUJyb3dzZXIgKmIpIHsKKyAgICBhc3NlcnQoYik7CisKKyAgICBBVkFISV9MTElTVF9SRU1PVkUoQXZhaGlTU2VydmljZUJyb3dzZXIsIGJyb3dzZXIsIGItPnNlcnZlci0+c2VydmljZV9icm93c2VycywgYik7CisKKyAgICBpZiAoYi0+cmVjb3JkX2Jyb3dzZXIpCisgICAgICAgIGF2YWhpX3NfcmVjb3JkX2Jyb3dzZXJfZnJlZShiLT5yZWNvcmRfYnJvd3Nlcik7CisKKyAgICBhdmFoaV9mcmVlKGItPmRvbWFpbl9uYW1lKTsKKyAgICBhdmFoaV9mcmVlKGItPnNlcnZpY2VfdHlwZSk7CisgICAgYXZhaGlfZnJlZShiKTsKK30KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL2Jyb3dzZS5jIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvYnJvd3NlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFiZDdlYQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL2Jyb3dzZS5jCkBAIC0wLDAgKzEsNjEzIEBACisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL3RpbWV2YWwuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vbWFsbG9jLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2Vycm9yLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2RvbWFpbi5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9ybGlzdC5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9hZGRyZXNzLmg+CisKKyNpbmNsdWRlICJicm93c2UuaCIKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJxdWVyaWVyLmgiCisjaW5jbHVkZSAiZG9tYWluLXV0aWwuaCIKKyNpbmNsdWRlICJyci11dGlsLmgiCisKKyNkZWZpbmUgQVZBSElfTE9PS1VQU19QRVJfQlJPV1NFUl9NQVggMTUKKworc3RydWN0IEF2YWhpU1JCTG9va3VwIHsKKyAgICBBdmFoaVNSZWNvcmRCcm93c2VyICpyZWNvcmRfYnJvd3NlcjsKKworICAgIHVuc2lnbmVkIHJlZjsKKworICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2U7CisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbDsKKyAgICBBdmFoaUxvb2t1cEZsYWdzIGZsYWdzOworCisgICAgQXZhaGlLZXkgKmtleTsKKworICAgIEF2YWhpV2lkZUFyZWFMb29rdXAgKndpZGVfYXJlYTsKKyAgICBBdmFoaU11bHRpY2FzdExvb2t1cCAqbXVsdGljYXN0OworCisgICAgQXZhaGlSTGlzdCAqY25hbWVfbG9va3VwczsKKworICAgIEFWQUhJX0xMSVNUX0ZJRUxEUyhBdmFoaVNSQkxvb2t1cCwgbG9va3Vwcyk7Cit9OworCitzdGF0aWMgdm9pZCBsb29rdXBfaGFuZGxlX2NuYW1lKEF2YWhpU1JCTG9va3VwICpsLCBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLCBBdmFoaVByb3RvY29sIHByb3RvY29sLCBBdmFoaUxvb2t1cEZsYWdzIGZsYWdzLCBBdmFoaVJlY29yZCAqcik7CitzdGF0aWMgdm9pZCBsb29rdXBfZHJvcF9jbmFtZShBdmFoaVNSQkxvb2t1cCAqbCwgQXZhaGlJZkluZGV4IGludGVyZmFjZSwgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwgQXZhaGlMb29rdXBGbGFncyBmbGFncywgQXZhaGlSZWNvcmQgKnIpOworCitzdGF0aWMgdm9pZCB0cmFuc3BvcnRfZmxhZ3NfZnJvbV9kb21haW4oQXZhaGlTZXJ2ZXIgKnMsIEF2YWhpTG9va3VwRmxhZ3MgKmZsYWdzLCBjb25zdCBjaGFyICpkb21haW4pIHsKKyAgICBhc3NlcnQoZmxhZ3MpOworICAgIGFzc2VydChkb21haW4pOworCisgICAgYXNzZXJ0KCEoKCpmbGFncyAmIEFWQUhJX0xPT0tVUF9VU0VfTVVMVElDQVNUKSAmJiAoKmZsYWdzICYgQVZBSElfTE9PS1VQX1VTRV9XSURFX0FSRUEpKSk7CisKKyAgICBpZiAoKmZsYWdzICYgKEFWQUhJX0xPT0tVUF9VU0VfTVVMVElDQVNUfEFWQUhJX0xPT0tVUF9VU0VfV0lERV9BUkVBKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFzLT53aWRlX2FyZWFfbG9va3VwX2VuZ2luZSB8fAorICAgICAgICAhYXZhaGlfd2lkZV9hcmVhX2hhc19zZXJ2ZXJzKHMtPndpZGVfYXJlYV9sb29rdXBfZW5naW5lKSB8fAorICAgICAgICBhdmFoaV9kb21haW5fZW5kc193aXRoKGRvbWFpbiwgQVZBSElfTUROU19TVUZGSVhfTE9DQUwpIHx8CisgICAgICAgIGF2YWhpX2RvbWFpbl9lbmRzX3dpdGgoZG9tYWluLCBBVkFISV9NRE5TX1NVRkZJWF9BRERSX0lQVjQpIHx8CisgICAgICAgIGF2YWhpX2RvbWFpbl9lbmRzX3dpdGgoZG9tYWluLCBBVkFISV9NRE5TX1NVRkZJWF9BRERSX0lQVjYpKQorICAgICAgICAqZmxhZ3MgfD0gQVZBSElfTE9PS1VQX1VTRV9NVUxUSUNBU1Q7CisgICAgZWxzZQorICAgICAgICAqZmxhZ3MgfD0gQVZBSElfTE9PS1VQX1VTRV9XSURFX0FSRUE7Cit9CisKK3N0YXRpYyBBdmFoaVNSQkxvb2t1cCogbG9va3VwX25ldygKKyAgICBBdmFoaVNSZWNvcmRCcm93c2VyICpiLAorICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsCisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICBBdmFoaUxvb2t1cEZsYWdzIGZsYWdzLAorICAgIEF2YWhpS2V5ICprZXkpIHsKKworICAgIEF2YWhpU1JCTG9va3VwICpsOworCisgICAgYXNzZXJ0KGIpOworICAgIGFzc2VydChBVkFISV9JRl9WQUxJRChpbnRlcmZhY2UpKTsKKyAgICBhc3NlcnQoQVZBSElfUFJPVE9fVkFMSUQocHJvdG9jb2wpKTsKKworICAgIGlmIChiLT5uX2xvb2t1cHMgPj0gQVZBSElfTE9PS1VQU19QRVJfQlJPV1NFUl9NQVgpCisgICAgICAgIC8qIFdlIGRvbid0IGxpa2UgY3ljbGljIENOQU1FcyAqLworICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmICghKGwgPSBhdmFoaV9uZXcoQXZhaGlTUkJMb29rdXAsIDEpKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBsLT5yZWYgPSAxOworICAgIGwtPnJlY29yZF9icm93c2VyID0gYjsKKyAgICBsLT5pbnRlcmZhY2UgPSBpbnRlcmZhY2U7CisgICAgbC0+cHJvdG9jb2wgPSBwcm90b2NvbDsKKyAgICBsLT5rZXkgPSBhdmFoaV9rZXlfcmVmKGtleSk7CisgICAgbC0+d2lkZV9hcmVhID0gTlVMTDsKKyAgICBsLT5tdWx0aWNhc3QgPSBOVUxMOworICAgIGwtPmNuYW1lX2xvb2t1cHMgPSBOVUxMOworICAgIGwtPmZsYWdzID0gZmxhZ3M7CisKKyAgICB0cmFuc3BvcnRfZmxhZ3NfZnJvbV9kb21haW4oYi0+c2VydmVyLCAmbC0+ZmxhZ3MsIGtleS0+bmFtZSk7CisKKyAgICBBVkFISV9MTElTVF9QUkVQRU5EKEF2YWhpU1JCTG9va3VwLCBsb29rdXBzLCBiLT5sb29rdXBzLCBsKTsKKworICAgIGItPm5fbG9va3VwcyArKzsKKworICAgIHJldHVybiBsOworfQorCitzdGF0aWMgdm9pZCBsb29rdXBfdW5yZWYoQXZhaGlTUkJMb29rdXAgKmwpIHsKKyAgICBhc3NlcnQobCk7CisgICAgYXNzZXJ0KGwtPnJlZiA+PSAxKTsKKworICAgIGlmICgtLWwtPnJlZiA+PSAxKQorICAgICAgICByZXR1cm47CisKKyAgICBBVkFISV9MTElTVF9SRU1PVkUoQXZhaGlTUkJMb29rdXAsIGxvb2t1cHMsIGwtPnJlY29yZF9icm93c2VyLT5sb29rdXBzLCBsKTsKKyAgICBsLT5yZWNvcmRfYnJvd3Nlci0+bl9sb29rdXBzIC0tOworCisgICAgaWYgKGwtPndpZGVfYXJlYSkgeworICAgICAgICBhdmFoaV93aWRlX2FyZWFfbG9va3VwX2ZyZWUobC0+d2lkZV9hcmVhKTsKKyAgICAgICAgbC0+d2lkZV9hcmVhID0gTlVMTDsKKyAgICB9CisKKyAgICBpZiAobC0+bXVsdGljYXN0KSB7CisgICAgICAgIGF2YWhpX211bHRpY2FzdF9sb29rdXBfZnJlZShsLT5tdWx0aWNhc3QpOworICAgICAgICBsLT5tdWx0aWNhc3QgPSBOVUxMOworICAgIH0KKworICAgIHdoaWxlIChsLT5jbmFtZV9sb29rdXBzKSB7CisgICAgICAgIGxvb2t1cF91bnJlZihsLT5jbmFtZV9sb29rdXBzLT5kYXRhKTsKKyAgICAgICAgbC0+Y25hbWVfbG9va3VwcyA9IGF2YWhpX3JsaXN0X3JlbW92ZV9ieV9saW5rKGwtPmNuYW1lX2xvb2t1cHMsIGwtPmNuYW1lX2xvb2t1cHMpOworICAgIH0KKworICAgIGF2YWhpX2tleV91bnJlZihsLT5rZXkpOworICAgIGF2YWhpX2ZyZWUobCk7Cit9CisKK3N0YXRpYyBBdmFoaVNSQkxvb2t1cCogbG9va3VwX3JlZihBdmFoaVNSQkxvb2t1cCAqbCkgeworICAgIGFzc2VydChsKTsKKyAgICBhc3NlcnQobC0+cmVmID49IDEpOworCisgICAgbC0+cmVmKys7CisgICAgcmV0dXJuIGw7Cit9CisKK3N0YXRpYyBBdmFoaVNSQkxvb2t1cCAqbG9va3VwX2ZpbmQoCisgICAgQXZhaGlTUmVjb3JkQnJvd3NlciAqYiwKKyAgICBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLAorICAgIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsCisgICAgQXZhaGlMb29rdXBGbGFncyBmbGFncywKKyAgICBBdmFoaUtleSAqa2V5KSB7CisKKyAgICBBdmFoaVNSQkxvb2t1cCAqbDsKKworICAgIGFzc2VydChiKTsKKworICAgIGZvciAobCA9IGItPmxvb2t1cHM7IGw7IGwgPSBsLT5sb29rdXBzX25leHQpIHsKKworICAgICAgICBpZiAoKGwtPmludGVyZmFjZSA9PSBBVkFISV9JRl9VTlNQRUMgfHwgbC0+aW50ZXJmYWNlID09IGludGVyZmFjZSkgJiYKKyAgICAgICAgICAgIChsLT5pbnRlcmZhY2UgPT0gQVZBSElfUFJPVE9fVU5TUEVDIHx8IGwtPnByb3RvY29sID09IHByb3RvY29sKSAmJgorICAgICAgICAgICAgbC0+ZmxhZ3MgPT0gZmxhZ3MgJiYKKyAgICAgICAgICAgIGF2YWhpX2tleV9lcXVhbChsLT5rZXksIGtleSkpCisKKyAgICAgICAgICAgIHJldHVybiBsOworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBicm93c2VyX2NhbmNlbChBdmFoaVNSZWNvcmRCcm93c2VyICpiKSB7CisgICAgYXNzZXJ0KGIpOworCisgICAgaWYgKGItPnJvb3RfbG9va3VwKSB7CisgICAgICAgIGxvb2t1cF91bnJlZihiLT5yb290X2xvb2t1cCk7CisgICAgICAgIGItPnJvb3RfbG9va3VwID0gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoYi0+ZGVmZXJfdGltZV9ldmVudCkgeworICAgICAgICBhdmFoaV90aW1lX2V2ZW50X2ZyZWUoYi0+ZGVmZXJfdGltZV9ldmVudCk7CisgICAgICAgIGItPmRlZmVyX3RpbWVfZXZlbnQgPSBOVUxMOworICAgIH0KK30KKworc3RhdGljIHZvaWQgbG9va3VwX3dpZGVfYXJlYV9jYWxsYmFjaygKKyAgICBBdmFoaVdpZGVBcmVhTG9va3VwRW5naW5lICplLAorICAgIEF2YWhpQnJvd3NlckV2ZW50IGV2ZW50LAorICAgIEF2YWhpTG9va3VwUmVzdWx0RmxhZ3MgZmxhZ3MsCisgICAgQXZhaGlSZWNvcmQgKnIsCisgICAgdm9pZCAqdXNlcmRhdGEpIHsKKworICAgIEF2YWhpU1JCTG9va3VwICpsID0gdXNlcmRhdGE7CisgICAgQXZhaGlTUmVjb3JkQnJvd3NlciAqYjsKKworICAgIGFzc2VydChlKTsKKyAgICBhc3NlcnQobCk7CisgICAgYXNzZXJ0KGwtPnJlZiA+PSAxKTsKKworICAgIGIgPSBsLT5yZWNvcmRfYnJvd3NlcjsKKworICAgIGlmIChiLT5kZWFkKQorICAgICAgICByZXR1cm47CisKKyAgICBsb29rdXBfcmVmKGwpOworCisgICAgc3dpdGNoIChldmVudCkgeworICAgICAgICBjYXNlIEFWQUhJX0JST1dTRVJfTkVXOgorICAgICAgICAgICAgYXNzZXJ0KHIpOworCisgICAgICAgICAgICBpZiAoci0+a2V5LT5jbGF6eiA9PSBBVkFISV9ETlNfQ0xBU1NfSU4gJiYKKyAgICAgICAgICAgICAgICByLT5rZXktPnR5cGUgPT0gQVZBSElfRE5TX1RZUEVfQ05BTUUpCisgICAgICAgICAgICAgICAgLyogSXQncyBhIENOQU1FIHJlY29yZCwgc28gbGV0J3MgZm9sbG93IGl0LiBXZSBvbmx5IGZvbGxvdyBpdCBvbiB3aWRlIGFyZWEgRE5TISAqLworICAgICAgICAgICAgICAgIGxvb2t1cF9oYW5kbGVfY25hbWUobCwgQVZBSElfSUZfVU5TUEVDLCBBVkFISV9QUk9UT19VTlNQRUMsIEFWQUhJX0xPT0tVUF9VU0VfV0lERV9BUkVBLCByKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIC8qIEl0J3MgYSBub3JtYWwgcmVjb3JkLCBzbyBsZXQncyBjYWxsIHRoZSB1c2VyIGNhbGxiYWNrICovCisgICAgICAgICAgICAgICAgYXNzZXJ0KGF2YWhpX2tleV9lcXVhbChyLT5rZXksIGwtPmtleSkpOworCisgICAgICAgICAgICAgICAgYi0+Y2FsbGJhY2soYiwgQVZBSElfSUZfVU5TUEVDLCBBVkFISV9QUk9UT19VTlNQRUMsIGV2ZW50LCByLCBmbGFncywgYi0+dXNlcmRhdGEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBVkFISV9CUk9XU0VSX1JFTU9WRToKKyAgICAgICAgY2FzZSBBVkFISV9CUk9XU0VSX0NBQ0hFX0VYSEFVU1RFRDoKKyAgICAgICAgICAgIC8qIE5vdCBkZWZpbmVkIGZvciB3aWRlIGFyZWEgRE5TICovCisgICAgICAgICAgICBhYm9ydCgpOworCisgICAgICAgIGNhc2UgQVZBSElfQlJPV1NFUl9BTExfRk9SX05PVzoKKyAgICAgICAgY2FzZSBBVkFISV9CUk9XU0VSX0ZBSUxVUkU6CisKKyAgICAgICAgICAgIGItPmNhbGxiYWNrKGIsIEFWQUhJX0lGX1VOU1BFQywgQVZBSElfUFJPVE9fVU5TUEVDLCBldmVudCwgTlVMTCwgZmxhZ3MsIGItPnVzZXJkYXRhKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGxvb2t1cF91bnJlZihsKTsKKworfQorCitzdGF0aWMgdm9pZCBsb29rdXBfbXVsdGljYXN0X2NhbGxiYWNrKAorICAgIEF2YWhpTXVsdGljYXN0TG9va3VwRW5naW5lICplLAorICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsCisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICBBdmFoaUJyb3dzZXJFdmVudCBldmVudCwKKyAgICBBdmFoaUxvb2t1cFJlc3VsdEZsYWdzIGZsYWdzLAorICAgIEF2YWhpUmVjb3JkICpyLAorICAgIHZvaWQgKnVzZXJkYXRhKSB7CisKKyAgICBBdmFoaVNSQkxvb2t1cCAqbCA9IHVzZXJkYXRhOworICAgIEF2YWhpU1JlY29yZEJyb3dzZXIgKmI7CisKKyAgICBhc3NlcnQoZSk7CisgICAgYXNzZXJ0KGwpOworCisgICAgYiA9IGwtPnJlY29yZF9icm93c2VyOworCisgICAgaWYgKGItPmRlYWQpCisgICAgICAgIHJldHVybjsKKworICAgIGxvb2t1cF9yZWYobCk7CisKKyAgICBzd2l0Y2ggKGV2ZW50KSB7CisgICAgICAgIGNhc2UgQVZBSElfQlJPV1NFUl9ORVc6CisgICAgICAgICAgICBhc3NlcnQocik7CisKKyAgICAgICAgICAgIGlmIChyLT5rZXktPmNsYXp6ID09IEFWQUhJX0ROU19DTEFTU19JTiAmJgorICAgICAgICAgICAgICAgIHItPmtleS0+dHlwZSA9PSBBVkFISV9ETlNfVFlQRV9DTkFNRSkKKyAgICAgICAgICAgICAgICAvKiBJdCdzIGEgQ05BTUUgcmVjb3JkLCBzbyBsZXQncyBmb2xsb3cgaXQuIFdlIGFsbG93IGJyb3dzaW5nIG9uIGJvdGggbXVsdGljYXN0IGFuZCB3aWRlIGFyZWEuICovCisgICAgICAgICAgICAgICAgbG9va3VwX2hhbmRsZV9jbmFtZShsLCBpbnRlcmZhY2UsIHByb3RvY29sLCBiLT5mbGFncywgcik7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvKiBJdCdzIGEgbm9ybWFsIHJlY29yZCwgc28gbGV0J3MgY2FsbCB0aGUgdXNlciBjYWxsYmFjayAqLworCisgICAgICAgICAgICAgICAgaWYgKGF2YWhpX3NlcnZlcl9pc19yZWNvcmRfbG9jYWwoYi0+c2VydmVyLCBpbnRlcmZhY2UsIHByb3RvY29sLCByKSkKKyAgICAgICAgICAgICAgICAgICAgZmxhZ3MgfD0gQVZBSElfTE9PS1VQX1JFU1VMVF9MT0NBTDsKKworICAgICAgICAgICAgICAgIGItPmNhbGxiYWNrKGIsIGludGVyZmFjZSwgcHJvdG9jb2wsIGV2ZW50LCByLCBmbGFncywgYi0+dXNlcmRhdGEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBVkFISV9CUk9XU0VSX1JFTU9WRToKKyAgICAgICAgICAgIGFzc2VydChyKTsKKworICAgICAgICAgICAgaWYgKHItPmtleS0+Y2xhenogPT0gQVZBSElfRE5TX0NMQVNTX0lOICYmCisgICAgICAgICAgICAgICAgci0+a2V5LT50eXBlID09IEFWQUhJX0ROU19UWVBFX0NOQU1FKQorICAgICAgICAgICAgICAgIC8qIEl0J3MgYSBDTkFNRSByZWNvcmQsIHNvIGxldCdzIGRyb3AgdGhhdCBxdWVyeSEgKi8KKyAgICAgICAgICAgICAgICBsb29rdXBfZHJvcF9jbmFtZShsLCBpbnRlcmZhY2UsIHByb3RvY29sLCAwLCByKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIC8qIEl0J3MgYSBub3JtYWwgcmVjb3JkLCBzbyBsZXQncyBjYWxsIHRoZSB1c2VyIGNhbGxiYWNrICovCisgICAgICAgICAgICAgICAgYXNzZXJ0KGF2YWhpX2tleV9lcXVhbChiLT5rZXksIGwtPmtleSkpOworCisgICAgICAgICAgICAgICAgYi0+Y2FsbGJhY2soYiwgaW50ZXJmYWNlLCBwcm90b2NvbCwgZXZlbnQsIHIsIGZsYWdzLCBiLT51c2VyZGF0YSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFWQUhJX0JST1dTRVJfQUxMX0ZPUl9OT1c6CisKKyAgICAgICAgICAgIGItPmNhbGxiYWNrKGIsIEFWQUhJX0lGX1VOU1BFQywgQVZBSElfUFJPVE9fVU5TUEVDLCBldmVudCwgTlVMTCwgZmxhZ3MsIGItPnVzZXJkYXRhKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQVZBSElfQlJPV1NFUl9DQUNIRV9FWEhBVVNURUQ6CisgICAgICAgIGNhc2UgQVZBSElfQlJPV1NFUl9GQUlMVVJFOgorICAgICAgICAgICAgLyogTm90IGRlZmluZWQgZm9yIG11bHRpY2FzdCBETlMgKi8KKyAgICAgICAgICAgIGFib3J0KCk7CisKKyAgICB9CisKKyAgICBsb29rdXBfdW5yZWYobCk7Cit9CisKK3N0YXRpYyBpbnQgbG9va3VwX3N0YXJ0KEF2YWhpU1JCTG9va3VwICpsKSB7CisgICAgYXNzZXJ0KGwpOworCisgICAgYXNzZXJ0KCEobC0+ZmxhZ3MgJiBBVkFISV9MT09LVVBfVVNFX1dJREVfQVJFQSkgIT0gIShsLT5mbGFncyAmIEFWQUhJX0xPT0tVUF9VU0VfTVVMVElDQVNUKSk7CisgICAgYXNzZXJ0KCFsLT53aWRlX2FyZWEgJiYgIWwtPm11bHRpY2FzdCk7CisKKyAgICBpZiAobC0+ZmxhZ3MgJiBBVkFISV9MT09LVVBfVVNFX1dJREVfQVJFQSkgeworCisgICAgICAgIGlmICghKGwtPndpZGVfYXJlYSA9IGF2YWhpX3dpZGVfYXJlYV9sb29rdXBfbmV3KGwtPnJlY29yZF9icm93c2VyLT5zZXJ2ZXItPndpZGVfYXJlYV9sb29rdXBfZW5naW5lLCBsLT5rZXksIGxvb2t1cF93aWRlX2FyZWFfY2FsbGJhY2ssIGwpKSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKworICAgIH0gZWxzZSB7CisgICAgICAgIGFzc2VydChsLT5mbGFncyAmIEFWQUhJX0xPT0tVUF9VU0VfTVVMVElDQVNUKTsKKworICAgICAgICBpZiAoIShsLT5tdWx0aWNhc3QgPSBhdmFoaV9tdWx0aWNhc3RfbG9va3VwX25ldyhsLT5yZWNvcmRfYnJvd3Nlci0+c2VydmVyLT5tdWx0aWNhc3RfbG9va3VwX2VuZ2luZSwgbC0+aW50ZXJmYWNlLCBsLT5wcm90b2NvbCwgbC0+a2V5LCBsb29rdXBfbXVsdGljYXN0X2NhbGxiYWNrLCBsKSkpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbG9va3VwX3NjYW5fY2FjaGUoQXZhaGlTUkJMb29rdXAgKmwpIHsKKyAgICBpbnQgbiA9IDA7CisKKyAgICBhc3NlcnQobCk7CisKKyAgICBhc3NlcnQoIShsLT5mbGFncyAmIEFWQUhJX0xPT0tVUF9VU0VfV0lERV9BUkVBKSAhPSAhKGwtPmZsYWdzICYgQVZBSElfTE9PS1VQX1VTRV9NVUxUSUNBU1QpKTsKKworCisgICAgaWYgKGwtPmZsYWdzICYgQVZBSElfTE9PS1VQX1VTRV9XSURFX0FSRUEpIHsKKyAgICAgICAgbiA9IChpbnQpIGF2YWhpX3dpZGVfYXJlYV9zY2FuX2NhY2hlKGwtPnJlY29yZF9icm93c2VyLT5zZXJ2ZXItPndpZGVfYXJlYV9sb29rdXBfZW5naW5lLCBsLT5rZXksIGxvb2t1cF93aWRlX2FyZWFfY2FsbGJhY2ssIGwpOworCisgICAgfSBlbHNlIHsKKyAgICAgICAgYXNzZXJ0KGwtPmZsYWdzICYgQVZBSElfTE9PS1VQX1VTRV9NVUxUSUNBU1QpOworICAgICAgICBuID0gKGludCkgYXZhaGlfbXVsdGljYXN0X2xvb2t1cF9lbmdpbmVfc2Nhbl9jYWNoZShsLT5yZWNvcmRfYnJvd3Nlci0+c2VydmVyLT5tdWx0aWNhc3RfbG9va3VwX2VuZ2luZSwgbC0+aW50ZXJmYWNlLCBsLT5wcm90b2NvbCwgbC0+a2V5LCBsb29rdXBfbXVsdGljYXN0X2NhbGxiYWNrLCBsKTsKKyAgICB9CisKKyAgICByZXR1cm4gbjsKK30KKworc3RhdGljIEF2YWhpU1JCTG9va3VwKiBsb29rdXBfYWRkKEF2YWhpU1JlY29yZEJyb3dzZXIgKmIsIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsIEF2YWhpTG9va3VwRmxhZ3MgZmxhZ3MsIEF2YWhpS2V5ICprZXkpIHsKKyAgICBBdmFoaVNSQkxvb2t1cCAqbDsKKworICAgIGFzc2VydChiKTsKKyAgICBhc3NlcnQoIWItPmRlYWQpOworCisgICAgaWYgKChsID0gbG9va3VwX2ZpbmQoYiwgaW50ZXJmYWNlLCBwcm90b2NvbCwgZmxhZ3MsIGtleSkpKQorICAgICAgICByZXR1cm4gbG9va3VwX3JlZihsKTsKKworICAgIGlmICghKGwgPSBsb29rdXBfbmV3KGIsIGludGVyZmFjZSwgcHJvdG9jb2wsIGZsYWdzLCBrZXkpKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gbDsKK30KKworc3RhdGljIGludCBsb29rdXBfZ28oQXZhaGlTUkJMb29rdXAgKmwpIHsKKyAgICBpbnQgbiA9IDA7CisgICAgYXNzZXJ0KGwpOworCisgICAgaWYgKGwtPnJlY29yZF9icm93c2VyLT5kZWFkKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGxvb2t1cF9yZWYobCk7CisKKyAgICAvKiBCcm93c2UgdGhlIGNhY2hlIGZvciB0aGUgcm9vdCByZXF1ZXN0ICovCisgICAgbiA9IGxvb2t1cF9zY2FuX2NhY2hlKGwpOworCisgICAgLyogU3RhcnQgdGhlIGxvb2t1cCAqLworICAgIGlmICghbC0+cmVjb3JkX2Jyb3dzZXItPmRlYWQgJiYgbC0+cmVmID4gMSkgeworCisgICAgICAgIGlmICgobC0+ZmxhZ3MgJiBBVkFISV9MT09LVVBfVVNFX01VTFRJQ0FTVCkgfHwgbiA9PSAwKQorICAgICAgICAgICAgLyogV2UgZG8gbm8gc3RhcnQgYSBxdWVyeSBpZiB0aGUgY2FjaGUgY29udGFpbmVkIGVudHJpZXMgYW5kIHdlJ3JlIG9uIHdpZGUgYXJlYSAqLworCisgICAgICAgICAgICBpZiAobG9va3VwX3N0YXJ0KGwpIDwgMCkKKyAgICAgICAgICAgICAgICBuID0gLTE7CisgICAgfQorCisgICAgbG9va3VwX3VucmVmKGwpOworCisgICAgcmV0dXJuIG47Cit9CisKK3N0YXRpYyB2b2lkIGxvb2t1cF9oYW5kbGVfY25hbWUoQXZhaGlTUkJMb29rdXAgKmwsIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsIEF2YWhpTG9va3VwRmxhZ3MgZmxhZ3MsIEF2YWhpUmVjb3JkICpyKSB7CisgICAgQXZhaGlLZXkgKms7CisgICAgQXZhaGlTUkJMb29rdXAgKm47CisKKyAgICBhc3NlcnQobCk7CisgICAgYXNzZXJ0KHIpOworCisgICAgYXNzZXJ0KHItPmtleS0+Y2xhenogPT0gQVZBSElfRE5TX0NMQVNTX0lOKTsKKyAgICBhc3NlcnQoci0+a2V5LT50eXBlID09IEFWQUhJX0ROU19UWVBFX0NOQU1FKTsKKworICAgIGsgPSBhdmFoaV9rZXlfbmV3KHItPmRhdGEucHRyLm5hbWUsIGwtPnJlY29yZF9icm93c2VyLT5rZXktPmNsYXp6LCBsLT5yZWNvcmRfYnJvd3Nlci0+a2V5LT50eXBlKTsKKyAgICBuID0gbG9va3VwX2FkZChsLT5yZWNvcmRfYnJvd3NlciwgaW50ZXJmYWNlLCBwcm90b2NvbCwgZmxhZ3MsIGspOworICAgIGF2YWhpX2tleV91bnJlZihrKTsKKworICAgIGlmICghbikgeworICAgICAgICBhdmFoaV9sb2dfZGVidWcoX19GSUxFX18iOiBGYWlsZWQgdG8gY3JlYXRlIFNSQkxvb2t1cC4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGwtPmNuYW1lX2xvb2t1cHMgPSBhdmFoaV9ybGlzdF9wcmVwZW5kKGwtPmNuYW1lX2xvb2t1cHMsIGxvb2t1cF9yZWYobikpOworCisgICAgbG9va3VwX2dvKG4pOworICAgIGxvb2t1cF91bnJlZihuKTsKK30KKworc3RhdGljIHZvaWQgbG9va3VwX2Ryb3BfY25hbWUoQXZhaGlTUkJMb29rdXAgKmwsIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsIEF2YWhpTG9va3VwRmxhZ3MgZmxhZ3MsIEF2YWhpUmVjb3JkICpyKSB7CisgICAgQXZhaGlLZXkgKms7CisgICAgQXZhaGlTUkJMb29rdXAgKm4gPSBOVUxMOworICAgIEF2YWhpUkxpc3QgKnJsOworCisgICAgYXNzZXJ0KHItPmtleS0+Y2xhenogPT0gQVZBSElfRE5TX0NMQVNTX0lOKTsKKyAgICBhc3NlcnQoci0+a2V5LT50eXBlID09IEFWQUhJX0ROU19UWVBFX0NOQU1FKTsKKworICAgIGsgPSBhdmFoaV9rZXlfbmV3KHItPmRhdGEucHRyLm5hbWUsIGwtPnJlY29yZF9icm93c2VyLT5rZXktPmNsYXp6LCBsLT5yZWNvcmRfYnJvd3Nlci0+a2V5LT50eXBlKTsKKworICAgIGZvciAocmwgPSBsLT5jbmFtZV9sb29rdXBzOyBybDsgcmwgPSBybC0+cmxpc3RfbmV4dCkgeworICAgICAgICBuID0gcmwtPmRhdGE7CisKKyAgICAgICAgYXNzZXJ0KG4pOworCisgICAgICAgIGlmICgobi0+aW50ZXJmYWNlID09IEFWQUhJX0lGX1VOU1BFQyB8fCBuLT5pbnRlcmZhY2UgPT0gaW50ZXJmYWNlKSAmJgorICAgICAgICAgICAgKG4tPmludGVyZmFjZSA9PSBBVkFISV9QUk9UT19VTlNQRUMgfHwgbi0+cHJvdG9jb2wgPT0gcHJvdG9jb2wpICYmCisgICAgICAgICAgICBuLT5mbGFncyA9PSBmbGFncyAmJgorICAgICAgICAgICAgYXZhaGlfa2V5X2VxdWFsKG4tPmtleSwgaykpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBhdmFoaV9rZXlfdW5yZWYoayk7CisKKyAgICBpZiAocmwpIHsKKyAgICAgICAgbC0+Y25hbWVfbG9va3VwcyA9IGF2YWhpX3JsaXN0X3JlbW92ZV9ieV9saW5rKGwtPmNuYW1lX2xvb2t1cHMsIHJsKTsKKyAgICAgICAgbG9va3VwX3VucmVmKG4pOworICAgIH0KK30KKworc3RhdGljIHZvaWQgZGVmZXJfY2FsbGJhY2soQVZBSElfR0NDX1VOVVNFRCBBdmFoaVRpbWVFdmVudCAqZSwgdm9pZCAqdXNlcmRhdGEpIHsKKyAgICBBdmFoaVNSZWNvcmRCcm93c2VyICpiID0gdXNlcmRhdGE7CisgICAgaW50IG47CisKKyAgICBhc3NlcnQoYik7CisgICAgYXNzZXJ0KCFiLT5kZWFkKTsKKworICAgIC8qIFJlbW92ZSB0aGUgZGVmZXIgdGltZW91dCAqLworICAgIGlmIChiLT5kZWZlcl90aW1lX2V2ZW50KSB7CisgICAgICAgIGF2YWhpX3RpbWVfZXZlbnRfZnJlZShiLT5kZWZlcl90aW1lX2V2ZW50KTsKKyAgICAgICAgYi0+ZGVmZXJfdGltZV9ldmVudCA9IE5VTEw7CisgICAgfQorCisgICAgLyogQ3JlYXRlIGluaXRpYWwgcXVlcnkgKi8KKyAgICBhc3NlcnQoIWItPnJvb3RfbG9va3VwKTsKKyAgICBiLT5yb290X2xvb2t1cCA9IGxvb2t1cF9hZGQoYiwgYi0+aW50ZXJmYWNlLCBiLT5wcm90b2NvbCwgYi0+ZmxhZ3MsIGItPmtleSk7CisgICAgYXNzZXJ0KGItPnJvb3RfbG9va3VwKTsKKworICAgIG4gPSBsb29rdXBfZ28oYi0+cm9vdF9sb29rdXApOworCisgICAgaWYgKGItPmRlYWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChuIDwgMCkgeworICAgICAgICAvKiBzZW5kaW5nIG9mIHRoZSBpbml0aWFsIHF1ZXJ5IGZhaWxlZCAqLworCisgICAgICAgIGF2YWhpX3NlcnZlcl9zZXRfZXJybm8oYi0+c2VydmVyLCBBVkFISV9FUlJfRkFJTFVSRSk7CisKKyAgICAgICAgYi0+Y2FsbGJhY2soCisgICAgICAgICAgICBiLCBiLT5pbnRlcmZhY2UsIGItPnByb3RvY29sLCBBVkFISV9CUk9XU0VSX0ZBSUxVUkUsIE5VTEwsCisgICAgICAgICAgICBiLT5mbGFncyAmIEFWQUhJX0xPT0tVUF9VU0VfV0lERV9BUkVBID8gQVZBSElfTE9PS1VQX1JFU1VMVF9XSURFX0FSRUEgOiBBVkFISV9MT09LVVBfUkVTVUxUX01VTFRJQ0FTVCwKKyAgICAgICAgICAgIGItPnVzZXJkYXRhKTsKKworICAgICAgICBicm93c2VyX2NhbmNlbChiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qIFRlbGwgdGhlIGNsaWVudCB0aGF0IHdlJ3JlIGRvbmUgd2l0aCB0aGUgY2FjaGUgKi8KKyAgICBiLT5jYWxsYmFjaygKKyAgICAgICAgYiwgYi0+aW50ZXJmYWNlLCBiLT5wcm90b2NvbCwgQVZBSElfQlJPV1NFUl9DQUNIRV9FWEhBVVNURUQsIE5VTEwsCisgICAgICAgIGItPmZsYWdzICYgQVZBSElfTE9PS1VQX1VTRV9XSURFX0FSRUEgPyBBVkFISV9MT09LVVBfUkVTVUxUX1dJREVfQVJFQSA6IEFWQUhJX0xPT0tVUF9SRVNVTFRfTVVMVElDQVNULAorICAgICAgICBiLT51c2VyZGF0YSk7CisKKyAgICBpZiAoIWItPmRlYWQgJiYgYi0+cm9vdF9sb29rdXAgJiYgYi0+cm9vdF9sb29rdXAtPmZsYWdzICYgQVZBSElfTE9PS1VQX1VTRV9XSURFX0FSRUEgJiYgbiA+IDApIHsKKworICAgICAgICAvKiBJZiB3ZSBkbyB3aWRlIGFyZWEgbG9va3VwcyBhbmQgdGhlIHRoZSBjYWNoZSBjb250YWluZWQKKyAgICAgICAgICogZW50cmllcywgd2UgYXNzdW1lIHRoYXQgaXQgaXMgY29tcGxldGUsIGFuZCB0ZWxsIHRoZSB1c2VyCisgICAgICAgICAqIHNvIGJ5IGZpcmluZyBBTExfRk9SX05PVy4gKi8KKworICAgICAgICBiLT5jYWxsYmFjayhiLCBiLT5pbnRlcmZhY2UsIGItPnByb3RvY29sLCBBVkFISV9CUk9XU0VSX0FMTF9GT1JfTk9XLCBOVUxMLCBBVkFISV9MT09LVVBfUkVTVUxUX1dJREVfQVJFQSwgYi0+dXNlcmRhdGEpOworICAgIH0KK30KKwordm9pZCBhdmFoaV9zX3JlY29yZF9icm93c2VyX3Jlc3RhcnQoQXZhaGlTUmVjb3JkQnJvd3NlciAqYikgeworICAgIGFzc2VydChiKTsKKyAgICBhc3NlcnQoIWItPmRlYWQpOworCisgICAgYnJvd3Nlcl9jYW5jZWwoYik7CisKKyAgICAvKiBSZXF1ZXN0IGEgbmV3IGl0ZXJhdGlvbiBvZiB0aGUgY2FjaGUgc2Nhbm5pbmcgKi8KKyAgICBpZiAoIWItPmRlZmVyX3RpbWVfZXZlbnQpIHsKKyAgICAgICAgYi0+ZGVmZXJfdGltZV9ldmVudCA9IGF2YWhpX3RpbWVfZXZlbnRfbmV3KGItPnNlcnZlci0+dGltZV9ldmVudF9xdWV1ZSwgTlVMTCwgZGVmZXJfY2FsbGJhY2ssIGIpOworICAgICAgICBhc3NlcnQoYi0+ZGVmZXJfdGltZV9ldmVudCk7CisgICAgfQorfQorCitBdmFoaVNSZWNvcmRCcm93c2VyICphdmFoaV9zX3JlY29yZF9icm93c2VyX25ldygKKyAgICBBdmFoaVNlcnZlciAqc2VydmVyLAorICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsCisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICBBdmFoaUtleSAqa2V5LAorICAgIEF2YWhpTG9va3VwRmxhZ3MgZmxhZ3MsCisgICAgQXZhaGlTUmVjb3JkQnJvd3NlckNhbGxiYWNrIGNhbGxiYWNrLAorICAgIHZvaWQqIHVzZXJkYXRhKSB7CisKKyAgICBBdmFoaVNSZWNvcmRCcm93c2VyICpiOworCisgICAgYXNzZXJ0KHNlcnZlcik7CisgICAgYXNzZXJ0KGtleSk7CisgICAgYXNzZXJ0KGNhbGxiYWNrKTsKKworICAgIEFWQUhJX0NIRUNLX1ZBTElESVRZX1JFVFVSTl9OVUxMKHNlcnZlciwgQVZBSElfSUZfVkFMSUQoaW50ZXJmYWNlKSwgQVZBSElfRVJSX0lOVkFMSURfSU5URVJGQUNFKTsKKyAgICBBVkFISV9DSEVDS19WQUxJRElUWV9SRVRVUk5fTlVMTChzZXJ2ZXIsIEFWQUhJX1BST1RPX1ZBTElEKHByb3RvY29sKSwgQVZBSElfRVJSX0lOVkFMSURfUFJPVE9DT0wpOworICAgIEFWQUhJX0NIRUNLX1ZBTElESVRZX1JFVFVSTl9OVUxMKHNlcnZlciwgIWF2YWhpX2tleV9pc19wYXR0ZXJuKGtleSksIEFWQUhJX0VSUl9JU19QQVRURVJOKTsKKyAgICBBVkFISV9DSEVDS19WQUxJRElUWV9SRVRVUk5fTlVMTChzZXJ2ZXIsIGF2YWhpX2tleV9pc192YWxpZChrZXkpLCBBVkFISV9FUlJfSU5WQUxJRF9LRVkpOworICAgIEFWQUhJX0NIRUNLX1ZBTElESVRZX1JFVFVSTl9OVUxMKHNlcnZlciwgQVZBSElfRkxBR1NfVkFMSUQoZmxhZ3MsIEFWQUhJX0xPT0tVUF9VU0VfV0lERV9BUkVBfEFWQUhJX0xPT0tVUF9VU0VfTVVMVElDQVNUKSwgQVZBSElfRVJSX0lOVkFMSURfRkxBR1MpOworICAgIEFWQUhJX0NIRUNLX1ZBTElESVRZX1JFVFVSTl9OVUxMKHNlcnZlciwgIShmbGFncyAmIEFWQUhJX0xPT0tVUF9VU0VfV0lERV9BUkVBKSB8fCAhKGZsYWdzICYgQVZBSElfTE9PS1VQX1VTRV9NVUxUSUNBU1QpLCBBVkFISV9FUlJfSU5WQUxJRF9GTEFHUyk7CisKKyAgICBpZiAoIShiID0gYXZhaGlfbmV3KEF2YWhpU1JlY29yZEJyb3dzZXIsIDEpKSkgeworICAgICAgICBhdmFoaV9zZXJ2ZXJfc2V0X2Vycm5vKHNlcnZlciwgQVZBSElfRVJSX05PX01FTU9SWSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGItPmRlYWQgPSAwOworICAgIGItPnNlcnZlciA9IHNlcnZlcjsKKyAgICBiLT5pbnRlcmZhY2UgPSBpbnRlcmZhY2U7CisgICAgYi0+cHJvdG9jb2wgPSBwcm90b2NvbDsKKyAgICBiLT5rZXkgPSBhdmFoaV9rZXlfcmVmKGtleSk7CisgICAgYi0+ZmxhZ3MgPSBmbGFnczsKKyAgICBiLT5jYWxsYmFjayA9IGNhbGxiYWNrOworICAgIGItPnVzZXJkYXRhID0gdXNlcmRhdGE7CisgICAgYi0+bl9sb29rdXBzID0gMDsKKyAgICBBVkFISV9MTElTVF9IRUFEX0lOSVQoQXZhaGlTUkJMb29rdXAsIGItPmxvb2t1cHMpOworICAgIGItPnJvb3RfbG9va3VwID0gTlVMTDsKKworICAgIEFWQUhJX0xMSVNUX1BSRVBFTkQoQXZhaGlTUmVjb3JkQnJvd3NlciwgYnJvd3Nlciwgc2VydmVyLT5yZWNvcmRfYnJvd3NlcnMsIGIpOworCisgICAgLyogVGhlIGN1cnJlbnRseSBjYWNoZWQgZW50cmllcyBhcmUgc2Nhbm5lZCBhIGJpdCBsYXRlciwgYW5kIHRoYW4gd2Ugd2lsbCBzdGFydCBxdWVyeWluZywgdG9vICovCisgICAgYi0+ZGVmZXJfdGltZV9ldmVudCA9IGF2YWhpX3RpbWVfZXZlbnRfbmV3KHNlcnZlci0+dGltZV9ldmVudF9xdWV1ZSwgTlVMTCwgZGVmZXJfY2FsbGJhY2ssIGIpOworICAgIGFzc2VydChiLT5kZWZlcl90aW1lX2V2ZW50KTsKKworICAgIHJldHVybiBiOworfQorCit2b2lkIGF2YWhpX3NfcmVjb3JkX2Jyb3dzZXJfZnJlZShBdmFoaVNSZWNvcmRCcm93c2VyICpiKSB7CisgICAgYXNzZXJ0KGIpOworICAgIGFzc2VydCghYi0+ZGVhZCk7CisKKyAgICBiLT5kZWFkID0gMTsKKyAgICBiLT5zZXJ2ZXItPm5lZWRfYnJvd3Nlcl9jbGVhbnVwID0gMTsKKworICAgIGJyb3dzZXJfY2FuY2VsKGIpOworfQorCit2b2lkIGF2YWhpX3NfcmVjb3JkX2Jyb3dzZXJfZGVzdHJveShBdmFoaVNSZWNvcmRCcm93c2VyICpiKSB7CisgICAgYXNzZXJ0KGIpOworCisgICAgYnJvd3Nlcl9jYW5jZWwoYik7CisKKyAgICBBVkFISV9MTElTVF9SRU1PVkUoQXZhaGlTUmVjb3JkQnJvd3NlciwgYnJvd3NlciwgYi0+c2VydmVyLT5yZWNvcmRfYnJvd3NlcnMsIGIpOworCisgICAgYXZhaGlfa2V5X3VucmVmKGItPmtleSk7CisKKyAgICBhdmFoaV9mcmVlKGIpOworfQorCit2b2lkIGF2YWhpX2Jyb3dzZXJfY2xlYW51cChBdmFoaVNlcnZlciAqc2VydmVyKSB7CisgICAgQXZhaGlTUmVjb3JkQnJvd3NlciAqYjsKKyAgICBBdmFoaVNSZWNvcmRCcm93c2VyICpuOworCisgICAgYXNzZXJ0KHNlcnZlcik7CisKKyAgICB3aGlsZSAoc2VydmVyLT5uZWVkX2Jyb3dzZXJfY2xlYW51cCkgeworICAgICAgICBzZXJ2ZXItPm5lZWRfYnJvd3Nlcl9jbGVhbnVwID0gMDsKKworICAgICAgICBmb3IgKGIgPSBzZXJ2ZXItPnJlY29yZF9icm93c2VyczsgYjsgYiA9IG4pIHsKKyAgICAgICAgICAgIG4gPSBiLT5icm93c2VyX25leHQ7CisKKyAgICAgICAgICAgIGlmIChiLT5kZWFkKQorICAgICAgICAgICAgICAgIGF2YWhpX3NfcmVjb3JkX2Jyb3dzZXJfZGVzdHJveShiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChzZXJ2ZXItPndpZGVfYXJlYV9sb29rdXBfZW5naW5lKQorICAgICAgICBhdmFoaV93aWRlX2FyZWFfY2xlYW51cChzZXJ2ZXItPndpZGVfYXJlYV9sb29rdXBfZW5naW5lKTsKKyAgICBhdmFoaV9tdWx0aWNhc3RfbG9va3VwX2VuZ2luZV9jbGVhbnVwKHNlcnZlci0+bXVsdGljYXN0X2xvb2t1cF9lbmdpbmUpOworfQorCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9icm93c2UuaCBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL2Jyb3dzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwZGMyMDcKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9icm93c2UuaApAQCAtMCwwICsxLDYwIEBACisjaWZuZGVmIGZvb2Jyb3dzZWhmb28KKyNkZWZpbmUgZm9vYnJvd3NlaGZvbworCisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vbGxpc3QuaD4KKworI2luY2x1ZGUgImNvcmUuaCIKKyNpbmNsdWRlICJ0aW1lZXZlbnRxLmgiCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJkbnMuaCIKKyNpbmNsdWRlICJsb29rdXAuaCIKKwordHlwZWRlZiBzdHJ1Y3QgQXZhaGlTUkJMb29rdXAgQXZhaGlTUkJMb29rdXA7CisKK3N0cnVjdCBBdmFoaVNSZWNvcmRCcm93c2VyIHsKKyAgICBBVkFISV9MTElTVF9GSUVMRFMoQXZhaGlTUmVjb3JkQnJvd3NlciwgYnJvd3Nlcik7CisgICAgaW50IGRlYWQ7CisgICAgQXZhaGlTZXJ2ZXIgKnNlcnZlcjsKKworICAgIEF2YWhpS2V5ICprZXk7CisgICAgQXZhaGlJZkluZGV4IGludGVyZmFjZTsKKyAgICBBdmFoaVByb3RvY29sIHByb3RvY29sOworICAgIEF2YWhpTG9va3VwRmxhZ3MgZmxhZ3M7CisKKyAgICBBdmFoaVRpbWVFdmVudCAqZGVmZXJfdGltZV9ldmVudDsKKworICAgIEF2YWhpU1JlY29yZEJyb3dzZXJDYWxsYmFjayBjYWxsYmFjazsKKyAgICB2b2lkKiB1c2VyZGF0YTsKKworICAgIC8qIExvb2t1cCBkYXRhICovCisgICAgQVZBSElfTExJU1RfSEVBRChBdmFoaVNSQkxvb2t1cCwgbG9va3Vwcyk7CisgICAgdW5zaWduZWQgbl9sb29rdXBzOworCisgICAgQXZhaGlTUkJMb29rdXAgKnJvb3RfbG9va3VwOworfTsKKwordm9pZCBhdmFoaV9icm93c2VyX2NsZWFudXAoQXZhaGlTZXJ2ZXIgKnNlcnZlcik7CisKK3ZvaWQgYXZhaGlfc19yZWNvcmRfYnJvd3Nlcl9kZXN0cm95KEF2YWhpU1JlY29yZEJyb3dzZXIgKmIpOwordm9pZCBhdmFoaV9zX3JlY29yZF9icm93c2VyX3Jlc3RhcnQoQXZhaGlTUmVjb3JkQnJvd3NlciAqYik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvY2FjaGUuYyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL2NhY2hlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU0YWFjNQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL2NhY2hlLmMKQEAgLTAsMCArMSw1MTMgQEAKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dGltZS5oPgorCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL3RpbWV2YWwuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vbWFsbG9jLmg+CisKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInJyLXV0aWwuaCIKKworc3RhdGljIHZvaWQgcmVtb3ZlX2VudHJ5KEF2YWhpQ2FjaGUgKmMsIEF2YWhpQ2FjaGVFbnRyeSAqZSkgeworICAgIEF2YWhpQ2FjaGVFbnRyeSAqdDsKKworICAgIGFzc2VydChjKTsKKyAgICBhc3NlcnQoZSk7CisKKy8qICAgICBhdmFoaV9sb2dfZGVidWcoInJlbW92aW5nIGZyb20gY2FjaGU6ICVwICVwIiwgYywgZSk7ICovCisKKyAgICAvKiBSZW1vdmUgZnJvbSBoYXNoIHRhYmxlICovCisgICAgdCA9IGF2YWhpX2hhc2htYXBfbG9va3VwKGMtPmhhc2htYXAsIGUtPnJlY29yZC0+a2V5KTsKKyAgICBBVkFISV9MTElTVF9SRU1PVkUoQXZhaGlDYWNoZUVudHJ5LCBieV9rZXksIHQsIGUpOworICAgIGlmICh0KQorICAgICAgICBhdmFoaV9oYXNobWFwX3JlcGxhY2UoYy0+aGFzaG1hcCwgdC0+cmVjb3JkLT5rZXksIHQpOworICAgIGVsc2UKKyAgICAgICAgYXZhaGlfaGFzaG1hcF9yZW1vdmUoYy0+aGFzaG1hcCwgZS0+cmVjb3JkLT5rZXkpOworCisgICAgLyogUmVtb3ZlIGZyb20gbGlua2VkIGxpc3QgKi8KKyAgICBBVkFISV9MTElTVF9SRU1PVkUoQXZhaGlDYWNoZUVudHJ5LCBlbnRyeSwgYy0+ZW50cmllcywgZSk7CisKKyAgICBpZiAoZS0+dGltZV9ldmVudCkKKyAgICAgICAgYXZhaGlfdGltZV9ldmVudF9mcmVlKGUtPnRpbWVfZXZlbnQpOworCisgICAgYXZhaGlfbXVsdGljYXN0X2xvb2t1cF9lbmdpbmVfbm90aWZ5KGMtPnNlcnZlci0+bXVsdGljYXN0X2xvb2t1cF9lbmdpbmUsIGMtPmludGVyZmFjZSwgZS0+cmVjb3JkLCBBVkFISV9CUk9XU0VSX1JFTU9WRSk7CisKKyAgICBhdmFoaV9yZWNvcmRfdW5yZWYoZS0+cmVjb3JkKTsKKworICAgIGF2YWhpX2ZyZWUoZSk7CisKKyAgICBhc3NlcnQoYy0+bl9lbnRyaWVzID49IDEpOworICAgIC0tYy0+bl9lbnRyaWVzOworfQorCitBdmFoaUNhY2hlICphdmFoaV9jYWNoZV9uZXcoQXZhaGlTZXJ2ZXIgKnNlcnZlciwgQXZhaGlJbnRlcmZhY2UgKmlmYWNlKSB7CisgICAgQXZhaGlDYWNoZSAqYzsKKyAgICBhc3NlcnQoc2VydmVyKTsKKworICAgIGlmICghKGMgPSBhdmFoaV9uZXcoQXZhaGlDYWNoZSwgMSkpKSB7CisgICAgICAgIGF2YWhpX2xvZ19lcnJvcihfX0ZJTEVfXyI6IE91dCBvZiBtZW1vcnkuIik7CisgICAgICAgIHJldHVybiBOVUxMOyAvKiBPT00gKi8KKyAgICB9CisKKyAgICBjLT5zZXJ2ZXIgPSBzZXJ2ZXI7CisgICAgYy0+aW50ZXJmYWNlID0gaWZhY2U7CisKKyAgICBpZiAoIShjLT5oYXNobWFwID0gYXZhaGlfaGFzaG1hcF9uZXcoKEF2YWhpSGFzaEZ1bmMpIGF2YWhpX2tleV9oYXNoLCAoQXZhaGlFcXVhbEZ1bmMpIGF2YWhpX2tleV9lcXVhbCwgTlVMTCwgTlVMTCkpKSB7CisgICAgICAgIGF2YWhpX2xvZ19lcnJvcihfX0ZJTEVfXyI6IE91dCBvZiBtZW1vcnkuIik7CisgICAgICAgIGF2YWhpX2ZyZWUoYyk7CisgICAgICAgIHJldHVybiBOVUxMOyAvKiBPT00gKi8KKyAgICB9CisKKyAgICBBVkFISV9MTElTVF9IRUFEX0lOSVQoQXZhaGlDYWNoZUVudHJ5LCBjLT5lbnRyaWVzKTsKKyAgICBjLT5uX2VudHJpZXMgPSAwOworCisgICAgYy0+bGFzdF9yYW5kX3RpbWVzdGFtcCA9IDA7CisKKyAgICByZXR1cm4gYzsKK30KKwordm9pZCBhdmFoaV9jYWNoZV9mcmVlKEF2YWhpQ2FjaGUgKmMpIHsKKyAgICBhc3NlcnQoYyk7CisKKyAgICB3aGlsZSAoYy0+ZW50cmllcykKKyAgICAgICAgcmVtb3ZlX2VudHJ5KGMsIGMtPmVudHJpZXMpOworICAgIGFzc2VydChjLT5uX2VudHJpZXMgPT0gMCk7CisKKyAgICBhdmFoaV9oYXNobWFwX2ZyZWUoYy0+aGFzaG1hcCk7CisKKyAgICBhdmFoaV9mcmVlKGMpOworfQorCitzdGF0aWMgQXZhaGlDYWNoZUVudHJ5ICpsb29rdXBfa2V5KEF2YWhpQ2FjaGUgKmMsIEF2YWhpS2V5ICprKSB7CisgICAgYXNzZXJ0KGMpOworICAgIGFzc2VydChrKTsKKworICAgIGFzc2VydCghYXZhaGlfa2V5X2lzX3BhdHRlcm4oaykpOworCisgICAgcmV0dXJuIGF2YWhpX2hhc2htYXBfbG9va3VwKGMtPmhhc2htYXAsIGspOworfQorCit2b2lkKiBhdmFoaV9jYWNoZV93YWxrKEF2YWhpQ2FjaGUgKmMsIEF2YWhpS2V5ICpwYXR0ZXJuLCBBdmFoaUNhY2hlV2Fsa0NhbGxiYWNrIGNiLCB2b2lkKiB1c2VyZGF0YSkgeworICAgIHZvaWQqIHJldDsKKworICAgIGFzc2VydChjKTsKKyAgICBhc3NlcnQocGF0dGVybik7CisgICAgYXNzZXJ0KGNiKTsKKworICAgIGlmIChhdmFoaV9rZXlfaXNfcGF0dGVybihwYXR0ZXJuKSkgeworICAgICAgICBBdmFoaUNhY2hlRW50cnkgKmUsICpuOworCisgICAgICAgIGZvciAoZSA9IGMtPmVudHJpZXM7IGU7IGUgPSBuKSB7CisgICAgICAgICAgICBuID0gZS0+ZW50cnlfbmV4dDsKKworICAgICAgICAgICAgaWYgKGF2YWhpX2tleV9wYXR0ZXJuX21hdGNoKHBhdHRlcm4sIGUtPnJlY29yZC0+a2V5KSkKKyAgICAgICAgICAgICAgICBpZiAoKHJldCA9IGNiKGMsIHBhdHRlcm4sIGUsIHVzZXJkYXRhKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIH0KKworICAgIH0gZWxzZSB7CisgICAgICAgIEF2YWhpQ2FjaGVFbnRyeSAqZSwgKm47CisKKyAgICAgICAgZm9yIChlID0gbG9va3VwX2tleShjLCBwYXR0ZXJuKTsgZTsgZSA9IG4pIHsKKyAgICAgICAgICAgIG4gPSBlLT5ieV9rZXlfbmV4dDsKKworICAgICAgICAgICAgaWYgKChyZXQgPSBjYihjLCBwYXR0ZXJuLCBlLCB1c2VyZGF0YSkpKQorICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQqIGxvb2t1cF9yZWNvcmRfY2FsbGJhY2soQXZhaGlDYWNoZSAqYywgQXZhaGlLZXkgKnBhdHRlcm4sIEF2YWhpQ2FjaGVFbnRyeSAqZSwgdm9pZCAqdXNlcmRhdGEpIHsKKyAgICBhc3NlcnQoYyk7CisgICAgYXNzZXJ0KHBhdHRlcm4pOworICAgIGFzc2VydChlKTsKKworICAgIGlmIChhdmFoaV9yZWNvcmRfZXF1YWxfbm9fdHRsKGUtPnJlY29yZCwgdXNlcmRhdGEpKQorICAgICAgICByZXR1cm4gZTsKKworICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgQXZhaGlDYWNoZUVudHJ5ICpsb29rdXBfcmVjb3JkKEF2YWhpQ2FjaGUgKmMsIEF2YWhpUmVjb3JkICpyKSB7CisgICAgYXNzZXJ0KGMpOworICAgIGFzc2VydChyKTsKKworICAgIHJldHVybiBhdmFoaV9jYWNoZV93YWxrKGMsIHItPmtleSwgbG9va3VwX3JlY29yZF9jYWxsYmFjaywgcik7Cit9CisKK3N0YXRpYyB2b2lkIG5leHRfZXhwaXJ5KEF2YWhpQ2FjaGUgKmMsIEF2YWhpQ2FjaGVFbnRyeSAqZSwgdW5zaWduZWQgcGVyY2VudCk7CisKK3N0YXRpYyB2b2lkIGVsYXBzZV9mdW5jKEF2YWhpVGltZUV2ZW50ICp0LCB2b2lkICp1c2VyZGF0YSkgeworICAgIEF2YWhpQ2FjaGVFbnRyeSAqZSA9IHVzZXJkYXRhOworLyogICAgIGNoYXIgKnR4dDsgKi8KKyAgICB1bnNpZ25lZCBwZXJjZW50ID0gMDsKKworICAgIGFzc2VydCh0KTsKKyAgICBhc3NlcnQoZSk7CisKKy8qICAgICB0eHQgPSBhdmFoaV9yZWNvcmRfdG9fc3RyaW5nKGUtPnJlY29yZCk7ICovCisKKyAgICBzd2l0Y2ggKGUtPnN0YXRlKSB7CisKKyAgICAgICAgY2FzZSBBVkFISV9DQUNIRV9FWFBJUllfRklOQUw6CisgICAgICAgIGNhc2UgQVZBSElfQ0FDSEVfUE9PRl9GSU5BTDoKKyAgICAgICAgY2FzZSBBVkFISV9DQUNIRV9HT09EQllFX0ZJTkFMOgorICAgICAgICBjYXNlIEFWQUhJX0NBQ0hFX1JFUExBQ0VfRklOQUw6CisKKyAgICAgICAgICAgIHJlbW92ZV9lbnRyeShlLT5jYWNoZSwgZSk7CisKKyAgICAgICAgICAgIGUgPSBOVUxMOworLyogICAgICAgICBhdmFoaV9sb2dfZGVidWcoIlJlbW92aW5nIGVudHJ5IGZyb20gY2FjaGUgZHVlIHRvIGV4cGlyYXRpb24gKCVzKSIsIHR4dCk7ICovCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFWQUhJX0NBQ0hFX1ZBTElEOgorICAgICAgICBjYXNlIEFWQUhJX0NBQ0hFX1BPT0Y6CisgICAgICAgICAgICBlLT5zdGF0ZSA9IEFWQUhJX0NBQ0hFX0VYUElSWTE7CisgICAgICAgICAgICBwZXJjZW50ID0gODU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFWQUhJX0NBQ0hFX0VYUElSWTE6CisgICAgICAgICAgICBlLT5zdGF0ZSA9IEFWQUhJX0NBQ0hFX0VYUElSWTI7CisgICAgICAgICAgICBwZXJjZW50ID0gOTA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBVkFISV9DQUNIRV9FWFBJUlkyOgorICAgICAgICAgICAgZS0+c3RhdGUgPSBBVkFISV9DQUNIRV9FWFBJUlkzOworICAgICAgICAgICAgcGVyY2VudCA9IDk1OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBVkFISV9DQUNIRV9FWFBJUlkzOgorICAgICAgICAgICAgZS0+c3RhdGUgPSBBVkFISV9DQUNIRV9FWFBJUllfRklOQUw7CisgICAgICAgICAgICBwZXJjZW50ID0gMTAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKGUpIHsKKworICAgICAgICBhc3NlcnQocGVyY2VudCA+IDApOworCisgICAgICAgIC8qIFJlcXVlc3QgYSBjYWNoZSB1cGRhdGUgaWYgd2UgYXJlIHN1YnNjcmliZWQgdG8gdGhpcyBlbnRyeSAqLworICAgICAgICBpZiAoYXZhaGlfcXVlcmllcl9zaGFsbF9yZWZyZXNoX2NhY2hlKGUtPmNhY2hlLT5pbnRlcmZhY2UsIGUtPnJlY29yZC0+a2V5KSkKKyAgICAgICAgICAgIGF2YWhpX2ludGVyZmFjZV9wb3N0X3F1ZXJ5KGUtPmNhY2hlLT5pbnRlcmZhY2UsIGUtPnJlY29yZC0+a2V5LCAwLCBOVUxMKTsKKworICAgICAgICAvKiBDaGVjayBhZ2FpbiBsYXRlciAqLworICAgICAgICBuZXh0X2V4cGlyeShlLT5jYWNoZSwgZSwgcGVyY2VudCk7CisKKyAgICB9CisKKy8qICAgICBhdmFoaV9mcmVlKHR4dCk7ICovCit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV90aW1lX2V2ZW50KEF2YWhpQ2FjaGUgKmMsIEF2YWhpQ2FjaGVFbnRyeSAqZSkgeworICAgIGFzc2VydChjKTsKKyAgICBhc3NlcnQoZSk7CisKKyAgICBpZiAoZS0+dGltZV9ldmVudCkKKyAgICAgICAgYXZhaGlfdGltZV9ldmVudF91cGRhdGUoZS0+dGltZV9ldmVudCwgJmUtPmV4cGlyeSk7CisgICAgZWxzZQorICAgICAgICBlLT50aW1lX2V2ZW50ID0gYXZhaGlfdGltZV9ldmVudF9uZXcoYy0+c2VydmVyLT50aW1lX2V2ZW50X3F1ZXVlLCAmZS0+ZXhwaXJ5LCBlbGFwc2VfZnVuYywgZSk7Cit9CisKK3N0YXRpYyB2b2lkIG5leHRfZXhwaXJ5KEF2YWhpQ2FjaGUgKmMsIEF2YWhpQ2FjaGVFbnRyeSAqZSwgdW5zaWduZWQgcGVyY2VudCkgeworICAgIEF2YWhpVXNlYyB1c2VjLCBsZWZ0LCByaWdodDsKKyAgICB0aW1lX3Qgbm93OworCisgICAgYXNzZXJ0KGMpOworICAgIGFzc2VydChlKTsKKyAgICBhc3NlcnQocGVyY2VudCA+IDAgJiYgcGVyY2VudCA8PSAxMDApOworCisgICAgdXNlYyA9IChBdmFoaVVzZWMpIGUtPnJlY29yZC0+dHRsICogMTAwMDA7CisKKyAgICBsZWZ0ID0gdXNlYyAqIHBlcmNlbnQ7CisgICAgcmlnaHQgPSB1c2VjICogKHBlcmNlbnQrMik7IC8qIDIlIGppdHRlciAqLworCisgICAgbm93ID0gdGltZShOVUxMKTsKKworICAgIGlmIChub3cgPj0gYy0+bGFzdF9yYW5kX3RpbWVzdGFtcCArIDEwKSB7CisgICAgICAgIGMtPmxhc3RfcmFuZCA9IHJhbmQoKTsKKyAgICAgICAgYy0+bGFzdF9yYW5kX3RpbWVzdGFtcCA9IG5vdzsKKyAgICB9CisKKyAgICB1c2VjID0gbGVmdCArIChBdmFoaVVzZWMpICgoZG91YmxlKSAocmlnaHQtbGVmdCkgKiBjLT5sYXN0X3JhbmQgLyAoUkFORF9NQVgrMS4wKSk7CisKKyAgICBlLT5leHBpcnkgPSBlLT50aW1lc3RhbXA7CisgICAgYXZhaGlfdGltZXZhbF9hZGQoJmUtPmV4cGlyeSwgdXNlYyk7CisKKy8qICAgICBnX21lc3NhZ2UoIndha2UgdXAgaW4gKyVsdSBzZWNvbmRzIiwgZS0+ZXhwaXJ5LnR2X3NlYyAtIGUtPnRpbWVzdGFtcC50dl9zZWMpOyAqLworCisgICAgdXBkYXRlX3RpbWVfZXZlbnQoYywgZSk7Cit9CisKK3N0YXRpYyB2b2lkIGV4cGlyZV9pbl9vbmVfc2Vjb25kKEF2YWhpQ2FjaGUgKmMsIEF2YWhpQ2FjaGVFbnRyeSAqZSwgQXZhaGlDYWNoZUVudHJ5U3RhdGUgc3RhdGUpIHsKKyAgICBhc3NlcnQoYyk7CisgICAgYXNzZXJ0KGUpOworCisgICAgZS0+c3RhdGUgPSBzdGF0ZTsKKyAgICBnZXR0aW1lb2ZkYXkoJmUtPmV4cGlyeSwgTlVMTCk7CisgICAgYXZhaGlfdGltZXZhbF9hZGQoJmUtPmV4cGlyeSwgMTAwMDAwMCk7IC8qIDFzICovCisgICAgdXBkYXRlX3RpbWVfZXZlbnQoYywgZSk7Cit9CisKK3ZvaWQgYXZhaGlfY2FjaGVfdXBkYXRlKEF2YWhpQ2FjaGUgKmMsIEF2YWhpUmVjb3JkICpyLCBpbnQgY2FjaGVfZmx1c2gsIGNvbnN0IEF2YWhpQWRkcmVzcyAqYSkgeworLyogICAgIGNoYXIgKnR4dDsgKi8KKworICAgIGFzc2VydChjKTsKKyAgICBhc3NlcnQociAmJiByLT5yZWYgPj0gMSk7CisKKy8qICAgICB0eHQgPSBhdmFoaV9yZWNvcmRfdG9fc3RyaW5nKHIpOyAqLworCisgICAgaWYgKHItPnR0bCA9PSAwKSB7CisgICAgICAgIC8qIFRoaXMgaXMgYSBnb29kYnllIHJlcXVlc3QgKi8KKworICAgICAgICBBdmFoaUNhY2hlRW50cnkgKmU7CisKKyAgICAgICAgaWYgKChlID0gbG9va3VwX3JlY29yZChjLCByKSkpCisgICAgICAgICAgICBleHBpcmVfaW5fb25lX3NlY29uZChjLCBlLCBBVkFISV9DQUNIRV9HT09EQllFX0ZJTkFMKTsKKworICAgIH0gZWxzZSB7CisgICAgICAgIEF2YWhpQ2FjaGVFbnRyeSAqZSA9IE5VTEwsICpmaXJzdDsKKyAgICAgICAgc3RydWN0IHRpbWV2YWwgbm93OworCisgICAgICAgIGdldHRpbWVvZmRheSgmbm93LCBOVUxMKTsKKworICAgICAgICAvKiBUaGlzIGlzIGFuIHVwZGF0ZSByZXF1ZXN0ICovCisKKyAgICAgICAgaWYgKChmaXJzdCA9IGxvb2t1cF9rZXkoYywgci0+a2V5KSkpIHsKKworICAgICAgICAgICAgaWYgKGNhY2hlX2ZsdXNoKSB7CisKKyAgICAgICAgICAgICAgICAvKiBGb3IgdW5pcXVlIGVudHJpZXMgZHJvcCBhbGwgZW50cmllcyBvbGRlciB0aGFuIG9uZSBzZWNvbmQgKi8KKyAgICAgICAgICAgICAgICBmb3IgKGUgPSBmaXJzdDsgZTsgZSA9IGUtPmJ5X2tleV9uZXh0KSB7CisgICAgICAgICAgICAgICAgICAgIEF2YWhpVXNlYyB0OworCisgICAgICAgICAgICAgICAgICAgIHQgPSBhdmFoaV90aW1ldmFsX2RpZmYoJm5vdywgJmUtPnRpbWVzdGFtcCk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHQgPiAxMDAwMDAwKQorICAgICAgICAgICAgICAgICAgICAgICAgZXhwaXJlX2luX29uZV9zZWNvbmQoYywgZSwgQVZBSElfQ0FDSEVfUkVQTEFDRV9GSU5BTCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBMb29rIGZvciBleGFjdGx5IHRoZSBzYW1lIGVudHJ5ICovCisgICAgICAgICAgICBmb3IgKGUgPSBmaXJzdDsgZTsgZSA9IGUtPmJ5X2tleV9uZXh0KQorICAgICAgICAgICAgICAgIGlmIChhdmFoaV9yZWNvcmRfZXF1YWxfbm9fdHRsKGUtPnJlY29yZCwgcikpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGUpIHsKKworLyogICAgICAgICAgICAgYXZhaGlfbG9nX2RlYnVnKCJmb3VuZCBtYXRjaGluZyBjYWNoZSBlbnRyeSIpOyAgKi8KKworICAgICAgICAgICAgLyogV2UgbmVlZCB0byB1cGRhdGUgdGhlIGhhc2ggdGFibGUga2V5IGlmIHdlIHJlcGxhY2UgdGhlCisgICAgICAgICAgICAgKiByZWNvcmQgKi8KKyAgICAgICAgICAgIGlmIChlLT5ieV9rZXlfcHJldiA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGF2YWhpX2hhc2htYXBfcmVwbGFjZShjLT5oYXNobWFwLCByLT5rZXksIGUpOworCisgICAgICAgICAgICAvKiBVcGRhdGUgdGhlIHJlY29yZCAqLworICAgICAgICAgICAgYXZhaGlfcmVjb3JkX3VucmVmKGUtPnJlY29yZCk7CisgICAgICAgICAgICBlLT5yZWNvcmQgPSBhdmFoaV9yZWNvcmRfcmVmKHIpOworCisvKiAgICAgICAgICAgICBhdmFoaV9sb2dfZGVidWcoImNhY2hlOiB1cGRhdGluZyAlcyIsIHR4dCk7ICAgKi8KKworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyogTm8gZW50cnkgZm91bmQsIHRoZXJlZm9yZSB3ZSBjcmVhdGUgYSBuZXcgb25lICovCisKKy8qICAgICAgICAgICAgIGF2YWhpX2xvZ19kZWJ1ZygiY2FjaGU6IGNvdWxkbid0IGZpbmQgbWF0Y2hpbmcgY2FjaGUgZW50cnkgZm9yICVzIiwgdHh0KTsgICAqLworCisgICAgICAgICAgICBpZiAoYy0+bl9lbnRyaWVzID49IGMtPnNlcnZlci0+Y29uZmlnLm5fY2FjaGVfZW50cmllc19tYXgpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoIShlID0gYXZhaGlfbmV3KEF2YWhpQ2FjaGVFbnRyeSwgMSkpKSB7CisgICAgICAgICAgICAgICAgYXZhaGlfbG9nX2Vycm9yKF9fRklMRV9fIjogT3V0IG9mIG1lbW9yeSIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZS0+Y2FjaGUgPSBjOworICAgICAgICAgICAgZS0+dGltZV9ldmVudCA9IE5VTEw7CisgICAgICAgICAgICBlLT5yZWNvcmQgPSBhdmFoaV9yZWNvcmRfcmVmKHIpOworCisgICAgICAgICAgICAvKiBBcHBlbmQgdG8gaGFzaCB0YWJsZSAqLworICAgICAgICAgICAgQVZBSElfTExJU1RfUFJFUEVORChBdmFoaUNhY2hlRW50cnksIGJ5X2tleSwgZmlyc3QsIGUpOworICAgICAgICAgICAgYXZhaGlfaGFzaG1hcF9yZXBsYWNlKGMtPmhhc2htYXAsIGUtPnJlY29yZC0+a2V5LCBmaXJzdCk7CisKKyAgICAgICAgICAgIC8qIEFwcGVuZCB0byBsaW5rZWQgbGlzdCAqLworICAgICAgICAgICAgQVZBSElfTExJU1RfUFJFUEVORChBdmFoaUNhY2hlRW50cnksIGVudHJ5LCBjLT5lbnRyaWVzLCBlKTsKKworICAgICAgICAgICAgYy0+bl9lbnRyaWVzKys7CisKKyAgICAgICAgICAgIC8qIE5vdGlmeSBzdWJzY3JpYmVycyAqLworICAgICAgICAgICAgYXZhaGlfbXVsdGljYXN0X2xvb2t1cF9lbmdpbmVfbm90aWZ5KGMtPnNlcnZlci0+bXVsdGljYXN0X2xvb2t1cF9lbmdpbmUsIGMtPmludGVyZmFjZSwgZS0+cmVjb3JkLCBBVkFISV9CUk9XU0VSX05FVyk7CisgICAgICAgIH0KKworICAgICAgICBlLT5vcmlnaW4gPSAqYTsKKyAgICAgICAgZS0+dGltZXN0YW1wID0gbm93OworICAgICAgICBuZXh0X2V4cGlyeShjLCBlLCA4MCk7CisgICAgICAgIGUtPnN0YXRlID0gQVZBSElfQ0FDSEVfVkFMSUQ7CisgICAgICAgIGUtPmNhY2hlX2ZsdXNoID0gY2FjaGVfZmx1c2g7CisgICAgfQorCisvKiAgICAgYXZhaGlfZnJlZSh0eHQpOyAgKi8KK30KKworc3RydWN0IGR1bXBfZGF0YSB7CisgICAgQXZhaGlEdW1wQ2FsbGJhY2sgY2FsbGJhY2s7CisgICAgdm9pZCogdXNlcmRhdGE7Cit9OworCitzdGF0aWMgdm9pZCBkdW1wX2NhbGxiYWNrKHZvaWQqIGtleSwgdm9pZCogZGF0YSwgdm9pZCogdXNlcmRhdGEpIHsKKyAgICBBdmFoaUNhY2hlRW50cnkgKmUgPSBkYXRhOworICAgIEF2YWhpS2V5ICprID0ga2V5OworICAgIHN0cnVjdCBkdW1wX2RhdGEgKmR1bXBfZGF0YSA9IHVzZXJkYXRhOworCisgICAgYXNzZXJ0KGspOworICAgIGFzc2VydChlKTsKKyAgICBhc3NlcnQoZGF0YSk7CisKKyAgICBmb3IgKDsgZTsgZSA9IGUtPmJ5X2tleV9uZXh0KSB7CisgICAgICAgIGNoYXIgKnQ7CisKKyAgICAgICAgaWYgKCEodCA9IGF2YWhpX3JlY29yZF90b19zdHJpbmcoZS0+cmVjb3JkKSkpCisgICAgICAgICAgICBjb250aW51ZTsgLyogT09NICovCisKKyAgICAgICAgZHVtcF9kYXRhLT5jYWxsYmFjayh0LCBkdW1wX2RhdGEtPnVzZXJkYXRhKTsKKyAgICAgICAgYXZhaGlfZnJlZSh0KTsKKyAgICB9Cit9CisKK2ludCBhdmFoaV9jYWNoZV9kdW1wKEF2YWhpQ2FjaGUgKmMsIEF2YWhpRHVtcENhbGxiYWNrIGNhbGxiYWNrLCB2b2lkKiB1c2VyZGF0YSkgeworICAgIHN0cnVjdCBkdW1wX2RhdGEgZGF0YTsKKworICAgIGFzc2VydChjKTsKKyAgICBhc3NlcnQoY2FsbGJhY2spOworCisgICAgY2FsbGJhY2soIjs7OyBDQUNIRSBEVU1QIEZPTExPV1MgOzs7IiwgdXNlcmRhdGEpOworCisgICAgZGF0YS5jYWxsYmFjayA9IGNhbGxiYWNrOworICAgIGRhdGEudXNlcmRhdGEgPSB1c2VyZGF0YTsKKworICAgIGF2YWhpX2hhc2htYXBfZm9yZWFjaChjLT5oYXNobWFwLCBkdW1wX2NhbGxiYWNrLCAmZGF0YSk7CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IGF2YWhpX2NhY2hlX2VudHJ5X2hhbGZfdHRsKEF2YWhpQ2FjaGUgKmMsIEF2YWhpQ2FjaGVFbnRyeSAqZSkgeworICAgIHN0cnVjdCB0aW1ldmFsIG5vdzsKKyAgICB1bnNpZ25lZCBhZ2U7CisKKyAgICBhc3NlcnQoYyk7CisgICAgYXNzZXJ0KGUpOworCisgICAgZ2V0dGltZW9mZGF5KCZub3csIE5VTEwpOworCisgICAgYWdlID0gKHVuc2lnbmVkKSAoYXZhaGlfdGltZXZhbF9kaWZmKCZub3csICZlLT50aW1lc3RhbXApLzEwMDAwMDApOworCisvKiAgICAgYXZhaGlfbG9nX2RlYnVnKCJhZ2U6ICVsbGksIHR0bC8yOiAldSIsIGFnZSwgZS0+cmVjb3JkLT50dGwpOyAgKi8KKworICAgIHJldHVybiBhZ2UgPj0gZS0+cmVjb3JkLT50dGwvMjsKK30KKwordm9pZCBhdmFoaV9jYWNoZV9mbHVzaChBdmFoaUNhY2hlICpjKSB7CisgICAgYXNzZXJ0KGMpOworCisgICAgd2hpbGUgKGMtPmVudHJpZXMpCisgICAgICAgIHJlbW92ZV9lbnRyeShjLCBjLT5lbnRyaWVzKTsKK30KKworLyoqKiBQYXNzaXZlIG9ic2VydmF0aW9uIG9mIGZhaWx1cmUgKioqLworCitzdGF0aWMgdm9pZCogc3RhcnRfcG9vZl9jYWxsYmFjayhBdmFoaUNhY2hlICpjLCBBdmFoaUtleSAqcGF0dGVybiwgQXZhaGlDYWNoZUVudHJ5ICplLCB2b2lkICp1c2VyZGF0YSkgeworICAgIEF2YWhpQWRkcmVzcyAqYSA9IHVzZXJkYXRhOworICAgIHN0cnVjdCB0aW1ldmFsIG5vdzsKKworICAgIGFzc2VydChjKTsKKyAgICBhc3NlcnQocGF0dGVybik7CisgICAgYXNzZXJ0KGUpOworICAgIGFzc2VydChhKTsKKworICAgIGdldHRpbWVvZmRheSgmbm93LCBOVUxMKTsKKworICAgIHN3aXRjaCAoZS0+c3RhdGUpIHsKKyAgICAgICAgY2FzZSBBVkFISV9DQUNIRV9WQUxJRDoKKworICAgICAgICAgICAgLyogVGhlIGVudHJ5IHdhcyBwZXJmZWN0bHkgdmFsaWQgdGlsbCwgbm93LCBzbyBsZXQncyBlbnRlcgorICAgICAgICAgICAgICogUE9PRiBtb2RlICovCisKKyAgICAgICAgICAgIGUtPnN0YXRlID0gQVZBSElfQ0FDSEVfUE9PRjsKKyAgICAgICAgICAgIGUtPnBvb2ZfYWRkcmVzcyA9ICphOworICAgICAgICAgICAgZS0+cG9vZl90aW1lc3RhbXAgPSBub3c7CisgICAgICAgICAgICBlLT5wb29mX251bSA9IDA7CisKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQVZBSElfQ0FDSEVfUE9PRjoKKyAgICAgICAgICAgIGlmIChhdmFoaV90aW1ldmFsX2RpZmYoJm5vdywgJmUtPnBvb2ZfdGltZXN0YW1wKSA8IDEwMDAwMDApCisgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBlLT5wb29mX3RpbWVzdGFtcCA9IG5vdzsKKyAgICAgICAgICAgIGUtPnBvb2ZfYWRkcmVzcyA9ICphOworICAgICAgICAgICAgZS0+cG9vZl9udW0gKys7CisKKyAgICAgICAgICAgIC8qIFRoaXMgaXMgdGhlIDR0aCB0aW1lIHdlIGdvdCBubyByZXNwb25zZSwgc28gbGV0J3MKKyAgICAgICAgICAgICAqIGZ1Y2tpbmcgcmVtb3ZlIHRoaXMgZW50cnkuICovCisgICAgICAgICAgICBpZiAoZS0+cG9vZl9udW0gPiAzKQorICAgICAgICAgICAgICBleHBpcmVfaW5fb25lX3NlY29uZChjLCBlLCBBVkFISV9DQUNIRV9QT09GX0ZJTkFMKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICA7CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgYXZhaGlfY2FjaGVfc3RhcnRfcG9vZihBdmFoaUNhY2hlICpjLCBBdmFoaUtleSAqa2V5LCBjb25zdCBBdmFoaUFkZHJlc3MgKmEpIHsKKyAgICBhc3NlcnQoYyk7CisgICAgYXNzZXJ0KGtleSk7CisKKyAgICBhdmFoaV9jYWNoZV93YWxrKGMsIGtleSwgc3RhcnRfcG9vZl9jYWxsYmFjaywgKHZvaWQqKSBhKTsKK30KKwordm9pZCBhdmFoaV9jYWNoZV9zdG9wX3Bvb2YoQXZhaGlDYWNoZSAqYywgQXZhaGlSZWNvcmQgKnJlY29yZCwgY29uc3QgQXZhaGlBZGRyZXNzICphKSB7CisgICAgQXZhaGlDYWNoZUVudHJ5ICplOworCisgICAgYXNzZXJ0KGMpOworICAgIGFzc2VydChyZWNvcmQpOworICAgIGFzc2VydChhKTsKKworICAgIGlmICghKGUgPSBsb29rdXBfcmVjb3JkKGMsIHJlY29yZCkpKQorICAgICAgICByZXR1cm47CisKKyAgICAvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmb3IgZWFjaCByZXNwb25zZSBzdXBwcmVzc2lvbgorICAgICAgIHJlY29yZC4gSWYgdGhlIG1hdGNoaW5nIGNhY2hlIGVudHJ5IGlzIGluIFBPT0Ygc3RhdGUgYW5kIHRoZQorICAgICAgIHF1ZXJ5IGFkZHJlc3MgaXMgdGhlIHNhbWUsIHdlIHB1dCBpdCBiYWNrIGludG8gdmFsaWQgbW9kZSAqLworCisgICAgaWYgKGUtPnN0YXRlID09IEFWQUhJX0NBQ0hFX1BPT0YgfHwgZS0+c3RhdGUgPT0gQVZBSElfQ0FDSEVfUE9PRl9GSU5BTCkKKyAgICAgICAgaWYgKGF2YWhpX2FkZHJlc3NfY21wKGEsICZlLT5wb29mX2FkZHJlc3MpID09IDApIHsKKyAgICAgICAgICAgIGUtPnN0YXRlID0gQVZBSElfQ0FDSEVfVkFMSUQ7CisgICAgICAgICAgICBuZXh0X2V4cGlyeShjLCBlLCA4MCk7CisgICAgICAgIH0KK30KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL2NhY2hlLmggYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9jYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5YmE5YjkKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9jYWNoZS5oCkBAIC0wLDAgKzEsMTAxIEBACisjaWZuZGVmIGZvb2NhY2hlaGZvbworI2RlZmluZSBmb29jYWNoZWhmb28KKworLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCit0eXBlZGVmIHN0cnVjdCBBdmFoaUNhY2hlIEF2YWhpQ2FjaGU7CisKKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vbGxpc3QuaD4KKyNpbmNsdWRlICJwcmlvcS5oIgorI2luY2x1ZGUgImludGVybmFsLmgiCisjaW5jbHVkZSAidGltZWV2ZW50cS5oIgorI2luY2x1ZGUgImhhc2htYXAuaCIKKwordHlwZWRlZiBlbnVtIHsKKyAgICBBVkFISV9DQUNIRV9WQUxJRCwKKyAgICBBVkFISV9DQUNIRV9FWFBJUlkxLAorICAgIEFWQUhJX0NBQ0hFX0VYUElSWTIsCisgICAgQVZBSElfQ0FDSEVfRVhQSVJZMywKKyAgICBBVkFISV9DQUNIRV9FWFBJUllfRklOQUwsCisgICAgQVZBSElfQ0FDSEVfUE9PRiwgICAgICAgLyogUGFzc2l2ZSBvYnNlcnZhdGlvbiBvZiBmYWlsdXJlICovCisgICAgQVZBSElfQ0FDSEVfUE9PRl9GSU5BTCwKKyAgICBBVkFISV9DQUNIRV9HT09EQllFX0ZJTkFMLAorICAgIEFWQUhJX0NBQ0hFX1JFUExBQ0VfRklOQUwKK30gQXZhaGlDYWNoZUVudHJ5U3RhdGU7CisKK3R5cGVkZWYgc3RydWN0IEF2YWhpQ2FjaGVFbnRyeSBBdmFoaUNhY2hlRW50cnk7CisKK3N0cnVjdCBBdmFoaUNhY2hlRW50cnkgeworICAgIEF2YWhpQ2FjaGUgKmNhY2hlOworICAgIEF2YWhpUmVjb3JkICpyZWNvcmQ7CisgICAgc3RydWN0IHRpbWV2YWwgdGltZXN0YW1wOworICAgIHN0cnVjdCB0aW1ldmFsIHBvb2ZfdGltZXN0YW1wOworICAgIHN0cnVjdCB0aW1ldmFsIGV4cGlyeTsKKyAgICBpbnQgY2FjaGVfZmx1c2g7CisgICAgaW50IHBvb2ZfbnVtOworCisgICAgQXZhaGlBZGRyZXNzIG9yaWdpbjsKKworICAgIEF2YWhpQ2FjaGVFbnRyeVN0YXRlIHN0YXRlOworICAgIEF2YWhpVGltZUV2ZW50ICp0aW1lX2V2ZW50OworCisgICAgQXZhaGlBZGRyZXNzIHBvb2ZfYWRkcmVzczsKKworICAgIEFWQUhJX0xMSVNUX0ZJRUxEUyhBdmFoaUNhY2hlRW50cnksIGJ5X2tleSk7CisgICAgQVZBSElfTExJU1RfRklFTERTKEF2YWhpQ2FjaGVFbnRyeSwgZW50cnkpOworfTsKKworc3RydWN0IEF2YWhpQ2FjaGUgeworICAgIEF2YWhpU2VydmVyICpzZXJ2ZXI7CisKKyAgICBBdmFoaUludGVyZmFjZSAqaW50ZXJmYWNlOworCisgICAgQXZhaGlIYXNobWFwICpoYXNobWFwOworCisgICAgQVZBSElfTExJU1RfSEVBRChBdmFoaUNhY2hlRW50cnksIGVudHJpZXMpOworCisgICAgdW5zaWduZWQgbl9lbnRyaWVzOworCisgICAgaW50IGxhc3RfcmFuZDsKKyAgICB0aW1lX3QgbGFzdF9yYW5kX3RpbWVzdGFtcDsKK307CisKK0F2YWhpQ2FjaGUgKmF2YWhpX2NhY2hlX25ldyhBdmFoaVNlcnZlciAqc2VydmVyLCBBdmFoaUludGVyZmFjZSAqaW50ZXJmYWNlKTsKK3ZvaWQgYXZhaGlfY2FjaGVfZnJlZShBdmFoaUNhY2hlICpjKTsKKwordm9pZCBhdmFoaV9jYWNoZV91cGRhdGUoQXZhaGlDYWNoZSAqYywgQXZhaGlSZWNvcmQgKnIsIGludCBjYWNoZV9mbHVzaCwgY29uc3QgQXZhaGlBZGRyZXNzICphKTsKKworaW50IGF2YWhpX2NhY2hlX2R1bXAoQXZhaGlDYWNoZSAqYywgQXZhaGlEdW1wQ2FsbGJhY2sgY2FsbGJhY2ssIHZvaWQqIHVzZXJkYXRhKTsKKwordHlwZWRlZiB2b2lkKiBBdmFoaUNhY2hlV2Fsa0NhbGxiYWNrKEF2YWhpQ2FjaGUgKmMsIEF2YWhpS2V5ICpwYXR0ZXJuLCBBdmFoaUNhY2hlRW50cnkgKmUsIHZvaWQqIHVzZXJkYXRhKTsKK3ZvaWQqIGF2YWhpX2NhY2hlX3dhbGsoQXZhaGlDYWNoZSAqYywgQXZhaGlLZXkgKnBhdHRlcm4sIEF2YWhpQ2FjaGVXYWxrQ2FsbGJhY2sgY2IsIHZvaWQqIHVzZXJkYXRhKTsKKworaW50IGF2YWhpX2NhY2hlX2VudHJ5X2hhbGZfdHRsKEF2YWhpQ2FjaGUgKmMsIEF2YWhpQ2FjaGVFbnRyeSAqZSk7CisKKy8qKiBTdGFydCB0aGUgIlBhc3NpdmUgb2JzZXJ2YXRpb24gb2YgRmFpbHVyZSIgYWxnb3JpdGhtIGZvciBhbGwKKyAqIHJlY29yZHMgb2YgdGhlIHNwZWNpZmllZCBrZXkuIFRoZSBzcGVjaWZpZWQgYWRkcmVzcyBpcyAgKi8KK3ZvaWQgYXZhaGlfY2FjaGVfc3RhcnRfcG9vZihBdmFoaUNhY2hlICpjLCBBdmFoaUtleSAqa2V5LCBjb25zdCBBdmFoaUFkZHJlc3MgKmEpOworCisvKiBTdG9wIGEgcHJldmlvdXNseSBzdGFydGVkIFBPT0YgYWxnb3JpdGhtIGZvciBhIHJlY29yZC4gKFVzZWQgZm9yIHJlc3BvbnNlIHN1cHByZXNpb25zIHJlY29yZHMgKi8KK3ZvaWQgYXZhaGlfY2FjaGVfc3RvcF9wb29mKEF2YWhpQ2FjaGUgKmMsIEF2YWhpUmVjb3JkICpyZWNvcmQsIGNvbnN0IEF2YWhpQWRkcmVzcyAqYSk7CisKK3ZvaWQgYXZhaGlfY2FjaGVfZmx1c2goQXZhaGlDYWNoZSAqYyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvY29uZm9ybWFuY2UtdGVzdC5jIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvY29uZm9ybWFuY2UtdGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzMmY2NmIKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9jb25mb3JtYW5jZS10ZXN0LmMKQEAgLTAsMCArMSwxNTggQEAKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisKKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vYWx0ZXJuYXRpdmUuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vbWFsbG9jLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL3NpbXBsZS13YXRjaC5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi90aW1ldmFsLmg+CisKKyNpbmNsdWRlIDxhdmFoaS1jb3JlL2NvcmUuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb3JlL2xvZy5oPgorI2luY2x1ZGUgPGF2YWhpLWNvcmUvbG9va3VwLmg+CisjaW5jbHVkZSA8YXZhaGktY29yZS9wdWJsaXNoLmg+CisKK3N0YXRpYyBjaGFyICpuYW1lID0gTlVMTDsKK3N0YXRpYyBBdmFoaVNFbnRyeUdyb3VwICpncm91cCA9IE5VTEw7CitzdGF0aWMgaW50IHRyeSA9IDA7CitzdGF0aWMgQXZhaGlTZXJ2ZXIgKmF2YWhpID0gTlVMTDsKK3N0YXRpYyBjb25zdCBBdmFoaVBvbGwgKnBvbGxfYXBpOworCitzdGF0aWMgdm9pZCBkdW1wX2xpbmUoY29uc3QgY2hhciAqdGV4dCwgQVZBSElfR0NDX1VOVVNFRCB2b2lkKiB1c2VyZGF0YSkgeworICAgIHByaW50ZigiJXNcbiIsIHRleHQpOworfQorCitzdGF0aWMgdm9pZCBkdW1wX3RpbWVvdXRfY2FsbGJhY2soQXZhaGlUaW1lb3V0ICp0aW1lb3V0LCBBVkFISV9HQ0NfVU5VU0VEIHZvaWQqIHVzZXJkYXRhKSB7CisgICAgc3RydWN0IHRpbWV2YWwgdHY7CisKKyAgICBhdmFoaV9zZXJ2ZXJfZHVtcChhdmFoaSwgZHVtcF9saW5lLCBOVUxMKTsKKworICAgIGF2YWhpX2VsYXBzZV90aW1lKCZ0diwgNTAwMCwgMCk7CisgICAgcG9sbF9hcGktPnRpbWVvdXRfdXBkYXRlKHRpbWVvdXQsICZ0dik7Cit9CisKK3N0YXRpYyB2b2lkIGVudHJ5X2dyb3VwX2NhbGxiYWNrKEF2YWhpU2VydmVyICpzLCBBdmFoaVNFbnRyeUdyb3VwICpnLCBBdmFoaUVudHJ5R3JvdXBTdGF0ZSBzdGF0ZSwgdm9pZCogdXNlcmRhdGEpOworCitzdGF0aWMgdm9pZCBjcmVhdGVfc2VydmljZShjb25zdCBjaGFyICp0KSB7CisgICAgY2hhciAqbjsKKworICAgIGFzc2VydCh0IHx8IG5hbWUpOworCisgICAgbiA9IHQgPyBhdmFoaV9zdHJkdXAodCkgOiBhdmFoaV9hbHRlcm5hdGl2ZV9zZXJ2aWNlX25hbWUobmFtZSk7CisgICAgYXZhaGlfZnJlZShuYW1lKTsKKyAgICBuYW1lID0gbjsKKworICAgIGlmIChncm91cCkKKyAgICAgICAgYXZhaGlfc19lbnRyeV9ncm91cF9yZXNldChncm91cCk7CisgICAgZWxzZQorICAgICAgICBncm91cCA9IGF2YWhpX3NfZW50cnlfZ3JvdXBfbmV3KGF2YWhpLCBlbnRyeV9ncm91cF9jYWxsYmFjaywgTlVMTCk7CisKKyAgICBhdmFoaV9zZXJ2ZXJfYWRkX3NlcnZpY2UoYXZhaGksIGdyb3VwLCBBVkFISV9JRl9VTlNQRUMsIEFWQUhJX1BST1RPX1VOU1BFQywgMCwgbmFtZSwgIl9odHRwLl90Y3AiLCBOVUxMLCBOVUxMLCA4MCwgImZvbyIsIE5VTEwpOworICAgIGF2YWhpX3NfZW50cnlfZ3JvdXBfY29tbWl0KGdyb3VwKTsKKworICAgIHRyeSsrOworfQorCitzdGF0aWMgdm9pZCByZW5hbWVfdGltZW91dF9jYWxsYmFjayhBdmFoaVRpbWVvdXQgKnRpbWVvdXQsIEFWQUhJX0dDQ19VTlVTRUQgdm9pZCAqdXNlcmRhdGEpIHsKKyAgICBzdHJ1Y3QgdGltZXZhbCB0djsKKworICAgIGlmIChhY2Nlc3MoImZsYWciLCBGX09LKSA9PSAwKSB7CisgICAgICAgIGNyZWF0ZV9zZXJ2aWNlKCJOZXcgLSBCb25qb3VyIFNlcnZpY2UgTmFtZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXZhaGlfZWxhcHNlX3RpbWUoJnR2LCA1MDAwLCAwKTsKKyAgICBwb2xsX2FwaS0+dGltZW91dF91cGRhdGUodGltZW91dCwgJnR2KTsKK30KKworc3RhdGljIHZvaWQgZW50cnlfZ3JvdXBfY2FsbGJhY2soQVZBSElfR0NDX1VOVVNFRCBBdmFoaVNlcnZlciAqcywgQVZBSElfR0NDX1VOVVNFRCBBdmFoaVNFbnRyeUdyb3VwICpnLCBBdmFoaUVudHJ5R3JvdXBTdGF0ZSBzdGF0ZSwgQVZBSElfR0NDX1VOVVNFRCB2b2lkKiB1c2VyZGF0YSkgeworICAgIGlmIChzdGF0ZSA9PSBBVkFISV9FTlRSWV9HUk9VUF9DT0xMSVNJT04pCisgICAgICAgIGNyZWF0ZV9zZXJ2aWNlKE5VTEwpOworICAgIGVsc2UgaWYgKHN0YXRlID09IEFWQUhJX0VOVFJZX0dST1VQX0VTVEFCTElTSEVEKSB7CisgICAgICAgIGF2YWhpX2xvZ19kZWJ1ZygiRVNUQUJMSVNIRUQgISEhISIpOworICAgICAgICB0cnkgPSAwOworICAgIH0KK30KKworc3RhdGljIHZvaWQgc2VydmVyX2NhbGxiYWNrKEF2YWhpU2VydmVyICpzLCBBdmFoaVNlcnZlclN0YXRlIHN0YXRlLCBBVkFISV9HQ0NfVU5VU0VEIHZvaWQqIHVzZXJkYXRhKSB7CisgICAgYXZhaGlfbG9nX2RlYnVnKCJzZXJ2ZXIgc3RhdGU6ICVpIiwgc3RhdGUpOworCisgICAgaWYgKHN0YXRlID09IEFWQUhJX1NFUlZFUl9SVU5OSU5HKSB7CisgICAgICAgIGF2YWhpX3NlcnZlcl9kdW1wKGF2YWhpLCBkdW1wX2xpbmUsIE5VTEwpOworICAgIH0gZWxzZSBpZiAoc3RhdGUgPT0gQVZBSElfU0VSVkVSX0NPTExJU0lPTikgeworICAgICAgICBjaGFyICpuOworCisgICAgICAgIG4gPSBhdmFoaV9hbHRlcm5hdGl2ZV9ob3N0X25hbWUoYXZhaGlfc2VydmVyX2dldF9ob3N0X25hbWUocykpOworICAgICAgICBhdmFoaV9sb2dfd2FybigiSG9zdCBuYW1lIGNvbmZsaWN0LCByZXRyeWluZyB3aXRoIDwlcz4iLCBuKTsKKyAgICAgICAgYXZhaGlfc2VydmVyX3NldF9ob3N0X25hbWUocywgbik7CisgICAgICAgIGF2YWhpX2ZyZWUobik7CisKKyAgICB9Cit9CisKK2ludCBtYWluKEFWQUhJX0dDQ19VTlVTRUQgaW50IGFyZ2MsIEFWQUhJX0dDQ19VTlVTRUQgY2hhciAqYXJndltdKSB7CisgICAgaW50IGVycm9yOworICAgIEF2YWhpU2ltcGxlUG9sbCAqc2ltcGxlX3BvbGw7CisgICAgc3RydWN0IHRpbWV2YWwgdHY7CisgICAgc3RydWN0IEF2YWhpU2VydmVyQ29uZmlnIGNvbmZpZzsKKworICAgIHNpbXBsZV9wb2xsID0gYXZhaGlfc2ltcGxlX3BvbGxfbmV3KCk7CisgICAgcG9sbF9hcGkgPSBhdmFoaV9zaW1wbGVfcG9sbF9nZXQoc2ltcGxlX3BvbGwpOworCisgICAgYXZhaGlfc2VydmVyX2NvbmZpZ19pbml0KCZjb25maWcpOworICAgIGNvbmZpZy5wdWJsaXNoX3dvcmtzdGF0aW9uID0gMDsKKyAgICBjb25maWcudXNlX2lwdjYgPSAwOworICAgIGNvbmZpZy5wdWJsaXNoX2RvbWFpbiA9IDA7CisgICAgY29uZmlnLnB1Ymxpc2hfaGluZm8gPSAwOworICAgIGF2YWhpID0gYXZhaGlfc2VydmVyX25ldyhwb2xsX2FwaSwgJmNvbmZpZywgc2VydmVyX2NhbGxiYWNrLCBOVUxMLCAmZXJyb3IpOworICAgIGF2YWhpX3NlcnZlcl9jb25maWdfZnJlZSgmY29uZmlnKTsKKworICAgIGF2YWhpX2VsYXBzZV90aW1lKCZ0diwgNTAwMCwgMCk7CisgICAgcG9sbF9hcGktPnRpbWVvdXRfbmV3KHBvbGxfYXBpLCAmdHYsIGR1bXBfdGltZW91dF9jYWxsYmFjaywgYXZhaGkpOworCisgICAgYXZhaGlfZWxhcHNlX3RpbWUoJnR2LCA1MDAwLCAwKTsKKyAgICBwb2xsX2FwaS0+dGltZW91dF9uZXcocG9sbF9hcGksICZ0diwgcmVuYW1lX3RpbWVvdXRfY2FsbGJhY2ssIGF2YWhpKTsKKworICAgIC8qIEV2aWwsIGJ1dCB0aGUgY29uZm9ybWFjZSB0ZXN0IHJlcXVpcmVzIHRoYXQqLworICAgIGNyZWF0ZV9zZXJ2aWNlKCJndXJrZSIpOworCisKKyAgICBhdmFoaV9zaW1wbGVfcG9sbF9sb29wKHNpbXBsZV9wb2xsKTsKKworICAgIGlmIChncm91cCkKKyAgICAgICAgYXZhaGlfc19lbnRyeV9ncm91cF9mcmVlKGdyb3VwKTsKKyAgICBhdmFoaV9zZXJ2ZXJfZnJlZShhdmFoaSk7CisKKyAgICBhdmFoaV9zaW1wbGVfcG9sbF9mcmVlKHNpbXBsZV9wb2xsKTsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvY29yZS5oIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvY29yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1MGM2MTIKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9jb3JlLmgKQEAgLTAsMCArMSwxNjUgQEAKKyNpZm5kZWYgZm9vY29yZWhmb28KKyNkZWZpbmUgZm9vY29yZWhmb28KKworLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisvKiogXGZpbGUgY29yZS5oIFRoZSBBdmFoaSBNdWx0aWNhc3QgRE5TIGFuZCBETlMgU2VydmljZSBEaXNjb3ZlcnkgaW1wbGVtZW50YXRpb24uICovCisKKy8qKiBBbiBtRE5TIHJlc3BvbmRlciBvYmplY3QgKi8KK3R5cGVkZWYgc3RydWN0IEF2YWhpU2VydmVyIEF2YWhpU2VydmVyOworCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2NkZWNsLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2FkZHJlc3MuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vZGVmcy5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi93YXRjaC5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi90aW1ldmFsLmg+CisjaW5jbHVkZSA8YXZhaGktY29yZS9yci5oPgorCitBVkFISV9DX0RFQ0xfQkVHSU4KKworLyoqIE1heGltdW0gbnVtYmVyIG9mIGRlZmluZWQgRE5TIHNlcnZlcnMgZm9yIHdpZGUgYXJlYSBETlMgKi8KKyNkZWZpbmUgQVZBSElfV0lERV9BUkVBX1NFUlZFUlNfTUFYIDQKKworLyoqIFByb3RvdHlwZSBmb3IgY2FsbGJhY2sgZnVuY3Rpb25zIHdoaWNoIGFyZSBjYWxsZWQgd2hlbmV2ZXIgdGhlIHN0YXRlIG9mIGFuIEF2YWhpU2VydmVyIG9iamVjdCBjaGFuZ2VzICovCit0eXBlZGVmIHZvaWQgKCpBdmFoaVNlcnZlckNhbGxiYWNrKSAoQXZhaGlTZXJ2ZXIgKnMsIEF2YWhpU2VydmVyU3RhdGUgc3RhdGUsIHZvaWQqIHVzZXJkYXRhKTsKKworLyoqIFN0b3JlcyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGEgc2VydmVyIGluc3RhbmNlICovCit0eXBlZGVmIHN0cnVjdCBBdmFoaVNlcnZlckNvbmZpZyB7CisgICAgY2hhciAqaG9zdF9uYW1lOyAgICAgICAgICAgICAgICAgIC8qKjwgRGVmYXVsdCBob3N0IG5hbWUuIElmIGxlZnQgZW1wdHkgZGVmYXVsdHMgdG8gdGhlIHJlc3VsdCBvZiBnZXRob3N0bmFtZSgyKSBvZiB0aGUgbGliYyAqLworICAgIGNoYXIgKmRvbWFpbl9uYW1lOyAgICAgICAgICAgICAgICAvKio8IERlZmF1bHQgZG9tYWluIG5hbWUuIElmIGxlZnQgZW1wdHkgZGVmYXVsdHMgdG8gLmxvY2FsICovCisgICAgaW50IHVzZV9pcHY0OyAgICAgICAgICAgICAgICAgICAgIC8qKjwgRW5hYmxlIElQdjQgc3VwcG9ydCAqLworICAgIGludCB1c2VfaXB2NjsgICAgICAgICAgICAgICAgICAgICAvKio8IEVuYWJsZSBJUHY2IHN1cHBvcnQgKi8KKyAgICBBdmFoaVN0cmluZ0xpc3QgKmFsbG93X2ludGVyZmFjZXM7LyoqPCBBbGxvdyBzcGVjaWZpYyBpbnRlcmZhY2UgdG8gYmUgdXNlZCBmb3IgQXZhaGkgKi8KKyAgICBBdmFoaVN0cmluZ0xpc3QgKmRlbnlfaW50ZXJmYWNlczsgLyoqPCBEZW55IHNwZWNpZmljIGludGVyZmFjZXMgdG8gYmUgdXNlZCBmb3IgQXZhaGkgKi8KKyAgICBpbnQgcHVibGlzaF9oaW5mbzsgICAgICAgICAgICAgICAgLyoqPCBSZWdpc3RlciBhIEhJTkZPIHJlY29yZCBmb3IgdGhlIGhvc3QgY29udGFpbmluZyB0aGUgbG9jYWwgT1MgYW5kIENQVSB0eXBlICovCisgICAgaW50IHB1Ymxpc2hfYWRkcmVzc2VzOyAgICAgICAgICAgIC8qKjwgUmVnaXN0ZXIgQSwgQUFBQSBhbmQgUFRSIHJlY29yZHMgZm9yIGFsbCBsb2NhbCBJUCBhZGRyZXNzZXMgKi8KKyAgICBpbnQgcHVibGlzaF93b3Jrc3RhdGlvbjsgICAgICAgICAgLyoqPCBSZWdpc3RlciBhIF93b3Jrc3RhdGlvbi5fdGNwIHNlcnZpY2UgKi8KKyAgICBpbnQgcHVibGlzaF9kb21haW47ICAgICAgICAgICAgICAgLyoqPCBBbm5vdW5jZSB0aGUgbG9jYWwgZG9tYWluIGZvciBicm93c2luZyAqLworICAgIGludCBjaGVja19yZXNwb25zZV90dGw7ICAgICAgICAgICAvKio8IElmIGVuYWJsZWQgdGhlIHNlcnZlciBpZ25vcmVzIGFsbCBpbmNvbWluZyByZXNwb25zZXMgd2l0aCBJUCBUVEwgIT0gMjU1LiBOZXdlciB2ZXJzaW9ucyBvZiB0aGUgUkZDIGRvIG5vIGxvbmdlciBjb250YWluIHRoaXMgY2hlY2ssIHNvIGl0IGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuICovCisgICAgaW50IHVzZV9pZmZfcnVubmluZzsgICAgICAgICAgICAgIC8qKjwgUmVxdWlyZSBJRkZfUlVOTklORyBvbiBsb2NhbCBuZXR3b3JrIGludGVyZmFjZXMuIFRoaXMgaXMgdGhlIG9mZmljaWFsIHdheSB0byBjaGVjayBmb3IgbGluayBiZWF0LiBVbmZvcnR1bmF0ZWx5IHRoaXMgZG9lc24ndCB3b3JrIHdpdGggYWxsIGRyaXZlcnMuIFNvIGJldHRlcmUgbGVhdmUgdGhpcyBvZmYuICovCisgICAgaW50IGVuYWJsZV9yZWZsZWN0b3I7ICAgICAgICAgICAgIC8qKjwgUmVmbGVjdCBpbmNvbWluZyBtRE5TIHRyYWZmaWMgdG8gYWxsIGxvY2FsIG5ldHdvcmtzLiBUaGlzIGFsbG93cyBtRE5TIGJhc2VkIG5ldHdvcmsgYnJvd3NpbmcgYmV5b25kIGV0aGVybmV0IGJvcmRlcnMgKi8KKyAgICBpbnQgcmVmbGVjdF9pcHY7ICAgICAgICAgICAgICAgICAgLyoqPCBpZiBlbmFibGVfcmVmbGVjdG9yIGlzIDEsIGVuYWJsZS9kaXNhYmxlIHJlZmxlY3RpbmcgYmV0d2VlbiBJUHY0IGFuZCBJUHY2ICovCisgICAgaW50IGFkZF9zZXJ2aWNlX2Nvb2tpZTsgICAgICAgICAgIC8qKjwgQWRkIG1hZ2ljIHNlcnZpY2UgY29va2llIHRvIGFsbCBsb2NhbGx5IGdlbmVyYXRlZCByZWNvcmRzIGltcGxpY2l0bHkgKi8KKyAgICBpbnQgZW5hYmxlX3dpZGVfYXJlYTsgICAgICAgICAgICAgLyoqPCBFbmFibGUgd2lkZSBhcmVhIHN1cHBvcnQgKi8KKyAgICBBdmFoaUFkZHJlc3Mgd2lkZV9hcmVhX3NlcnZlcnNbQVZBSElfV0lERV9BUkVBX1NFUlZFUlNfTUFYXTsgLyoqIFVuaWNhc3QgRE5TIHNlcnZlciB0byB1c2UgZm9yIHdpZGUgYXJlYSBsb29rdXAgKi8KKyAgICB1bnNpZ25lZCBuX3dpZGVfYXJlYV9zZXJ2ZXJzOyAgICAgLyoqPCBOdW1iZXIgb2Ygc2VydmVycyBpbiB3aWRlX2FyZWFfc2VydmVyc1tdICovCisgICAgaW50IGRpc2FsbG93X290aGVyX3N0YWNrczsgICAgICAgIC8qKjwgTWFrZSBzdXJlIHRoYXQgb25seSBvbmUgbUROUyByZXNwb25kZXIgaXMgcnVuIGF0IHRoZSBzYW1lIHRpbWUgb24gdGhlIGxvY2FsIG1hY2hpbmUuIElmIHRoaXMgaXMgZW5hYmxlIEF2YWhpIHdpbGwgbm90IHNldCBTT19SRVVTQUREUiBvbiBpdHMgc29ja2V0cywgZWZmZWN0aXZlbHkgcHJldmVudGluZyBvdGhlciBzdGFja3MgZnJvbSBydW5uaW5nIG9uIHRoZSBsb2NhbCBtYWNoaW5lICovCisgICAgQXZhaGlTdHJpbmdMaXN0ICpicm93c2VfZG9tYWluczsgIC8qKjwgQWRkaXRpb25hbCBicm93c2luZyBkb21haW5zICovCisgICAgaW50IGRpc2FibGVfcHVibGlzaGluZzsgICAgICAgICAgIC8qKjwgRGlzYWJsZSBwdWJsaXNoaW5nIG9mIGFueSByZWNvcmQgKi8KKyAgICBpbnQgYWxsb3dfcG9pbnRfdG9fcG9pbnQ7ICAgICAgICAgLyoqPCBFbmFibGUgcHVibGlzaGluZyBvbiBQT0lOVE9QT0lOVCBpbnRlcmZhY2VzICovCisgICAgaW50IHB1Ymxpc2hfYV9vbl9pcHY2OyAgICAgICAgICAgIC8qKjwgUHVibGlzaCBhbiBJUHY0IEEgUlIgb24gSVB2NiBzb2NrZXRzICovCisgICAgaW50IHB1Ymxpc2hfYWFhYV9vbl9pcHY0OyAgICAgICAgIC8qKjwgUHVibGlzaCBhbiBJUHY0IEEgUlIgb24gSVB2NiBzb2NrZXRzICovCisgICAgdW5zaWduZWQgbl9jYWNoZV9lbnRyaWVzX21heDsgICAgIC8qKjwgTWF4aW11bSBudW1iZXIgb2YgY2FjaGUgZW50cmllcyBwZXIgaW50ZXJmYWNlICovCisgICAgQXZhaGlVc2VjIHJhdGVsaW1pdF9pbnRlcnZhbDsgICAgIC8qKjwgSWYgbm9uLXplcm8sIHJhdGUtbGltaXRpbmcgaW50ZXJ2YWwgcGFyYW1ldGVyLiAqLworICAgIHVuc2lnbmVkIHJhdGVsaW1pdF9idXJzdDsgICAgICAgICAvKio8IElmIHJhdGVsaW1pdF9pbnRlcnZhbCBpcyBub24temVybywgcmF0ZS1saW1pdGluZyBidXJzdCBwYXJhbWV0ZXIuICovCit9IEF2YWhpU2VydmVyQ29uZmlnOworCisvKiogQWxsb2NhdGUgYSBuZXcgbUROUyByZXNwb25kZXIgb2JqZWN0LiAqLworQXZhaGlTZXJ2ZXIgKmF2YWhpX3NlcnZlcl9uZXcoCisgICAgY29uc3QgQXZhaGlQb2xsICphcGksICAgICAgICAgIC8qKjwgVGhlIG1haW4gbG9vcCBhZGFwdGVyICovCisgICAgY29uc3QgQXZhaGlTZXJ2ZXJDb25maWcgKnNjLCAgIC8qKjwgSWYgbm9uLU5VTEwgYSBwb2ludGVyIHRvIGEgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgZm9yIHRoZSBzZXJ2ZXIuIFRoZSBzZXJ2ZXIgbWFrZXMgYW4gaW50ZXJuYWwgZGVlcCBjb3B5IG9mIHRoaXMgc3RydWN0dXJlLCBzbyB5b3UgbWF5IGZyZWUgaXQgdXNpbmcgYXZhaGlfc2VydmVyX2NvbmZpZ19kb25lKCkgaW1tZWRpYXRlbHkgYWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLiAqLworICAgIEF2YWhpU2VydmVyQ2FsbGJhY2sgY2FsbGJhY2ssICAvKio8IEEgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIHdoZW5ldmVyIHRoZSBzdGF0ZSBvZiB0aGUgc2VydmVyIGNoYW5nZXMgKi8KKyAgICB2b2lkKiB1c2VyZGF0YSwgICAgICAgICAgICAgICAgLyoqPCBBbiBvcGFxdWUgcG9pbnRlciB3aGljaCBpcyBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uICovCisgICAgaW50ICplcnJvcik7CisKKy8qKiBGcmVlIGFuIG1ETlMgcmVzcG9uZGVyIG9iamVjdCAqLwordm9pZCBhdmFoaV9zZXJ2ZXJfZnJlZShBdmFoaVNlcnZlciogcyk7CisKKy8qKiBGaWxsIGluIGRlZmF1bHQgdmFsdWVzIGZvciBhIHNlcnZlciBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4gSWYgeW91CisgKiBtYWtlIHVzZSBvZiBhbiBBdmFoaVNlcnZlckNvbmZpZyBzdHJ1Y3R1cmUgYmUgc3VyZSB0byBpbml0aWFsaXplCisgKiBpdCB3aXRoIHRoaXMgZnVuY3Rpb24gZm9yIHRoZSBzYWtlIG9mIHVwd2FyZHMgbGlicmFyeQorICogY29tcGF0aWJpbGl0eS4gVGhpcyBjYWxsIG1heSBhbGxvY2F0ZSBzdHJpbmdzIG9uIHRoZSBoZWFwLiBUbworICogcmVsZWFzZSB0aGlzIG1lbW9yeSBtYWtlIHN1cmUgdG8gY2FsbAorICogYXZhaGlfc2VydmVyX2NvbmZpZ19kb25lKCkuIElmIHlvdSB3YW50IHRvIHJlcGxhY2UgYW55IHN0cmluZ3MgaW4KKyAqIHRoZSBzdHJ1Y3R1cmUgYmUgc3VyZSB0byBmcmVlIHRoZSBzdHJpbmdzIGZpbGxlZCBpbiBieSB0aGlzCisgKiBmdW5jdGlvbiB3aXRoIGF2YWhpX2ZyZWUoKSBmaXJzdCBhbmQgYWxsb2NhdGUgdGhlIHJlcGxhY2VtZW50cyB3aXRoCisgKiBnX21hbGxvYygpIChvciBnX3N0cmR1cCgpKS4qLworQXZhaGlTZXJ2ZXJDb25maWcqIGF2YWhpX3NlcnZlcl9jb25maWdfaW5pdCgKKyAgIEF2YWhpU2VydmVyQ29uZmlnICpjIC8qKjwgQSBzdHJ1Y3R1cmUgd2hpY2ggc2hhbGwgYmUgZmlsbGVkIGluICovICk7CisKKy8qKiBNYWtlIGEgZGVlcCBjb3B5IG9mIHRoZSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSAqYyB0byAqcmV0LiAqLworQXZhaGlTZXJ2ZXJDb25maWcqIGF2YWhpX3NlcnZlcl9jb25maWdfY29weSgKKyAgICBBdmFoaVNlcnZlckNvbmZpZyAqcmV0IC8qKjwgZGVzdGluYXRpb24gKi8sCisgICAgY29uc3QgQXZhaGlTZXJ2ZXJDb25maWcgKmMgLyoqPCBzb3VyY2UgKi8pOworCisvKiogRnJlZSB0aGUgZGF0YSBpbiBhIHNlcnZlciBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4gKi8KK3ZvaWQgYXZhaGlfc2VydmVyX2NvbmZpZ19mcmVlKEF2YWhpU2VydmVyQ29uZmlnICpjKTsKKworLyoqIFJldHVybiB0aGUgY3VycmVudGx5IGNob3NlbiBkb21haW4gbmFtZSBvZiB0aGUgc2VydmVyIG9iamVjdC4gVGhlCisgKiByZXR1cm4gdmFsdWUgcG9pbnRzIHRvIGFuIGludGVybmFsbHkgYWxsb2NhdGVkIHN0cmluZy4gQmUgc3VyZSB0bworICogbWFrZSBhIGNvcHkgb2YgdGhlIHN0cmluZyBiZWZvcmUgY2FsbGluZyBhbnkgb3RoZXIgbGlicmFyeQorICogZnVuY3Rpb25zLiAqLworY29uc3QgY2hhciogYXZhaGlfc2VydmVyX2dldF9kb21haW5fbmFtZShBdmFoaVNlcnZlciAqcyk7CisKKy8qKiBSZXR1cm4gdGhlIGN1cnJlbnRseSBjaG9zZW4gaG9zdCBuYW1lLiBUaGUgcmV0dXJuIHZhbHVlIHBvaW50cyB0byBhIGludGVybmFsbHkgYWxsb2NhdGVkIHN0cmluZy4gKi8KK2NvbnN0IGNoYXIqIGF2YWhpX3NlcnZlcl9nZXRfaG9zdF9uYW1lKEF2YWhpU2VydmVyICpzKTsKKworLyoqIFJldHVybiB0aGUgY3VycmVudGx5IGNob3NlbiBob3N0IG5hbWUgYXMgYSBGUUROICgiZnVsbHkgcXVhbGlmaWVkCisgKiBkb21haW4gbmFtZSIsIGkuZS4gdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIGhvc3QgYW5kIGRvbWFpbgorICogbmFtZSkuIFRoZSByZXR1cm4gdmFsdWUgcG9pbnRzIHRvIGEgaW50ZXJuYWxseSBhbGxvY2F0ZWQgc3RyaW5nLiAqLworY29uc3QgY2hhciogYXZhaGlfc2VydmVyX2dldF9ob3N0X25hbWVfZnFkbihBdmFoaVNlcnZlciAqcyk7CisKKy8qKiBDaGFuZ2UgdGhlIGhvc3QgbmFtZSBvZiBhIHJ1bm5pbmcgbUROUyByZXNwb25kZXIuIFRoaXMgd2lsbCBkcm9wCithbGwgYXV0b21pY2F0aWxseSBnZW5lcmF0ZWQgUlJzIGFuZCByZWFkZCB0aGVtIHdpdGggdGhlIG5ldworbmFtZS4gU2luY2UgdGhlIHJlc3BvbmRlciBoYXMgdG8gcHJvYmUgZm9yIHRoZSBuZXcgUlJzIHRoaXMgZnVuY3Rpb24KK3Rha2VzIHNvbWUgdGltZSB0byB0YWtlIGVmZmVjdCBhbHRvdWdoIGl0IHJldHVybnMgaW1tZWRpYXRlbHkuIFRoaXMKK2Z1bmN0aW9uIGlzIGludGVuZGVkIHRvIGJlIGNhbGxlZCB3aGVuIGEgaG9zdCBuYW1lIGNvbmZsaWN0IGlzCityZXBvcnRlZCB1c2luZyBBdmFoaVNlcnZlckNhbGxiYWNrLiBUaGUgY2FsbGVyIHNob3VsZCByZWFkZCBhbGwgdXNlcgorZGVmaW5lZCBSUnMgdG9vIHNpbmNlIHRoZXkgb3RoZXJ3aXNlIGNvbnRpbnVlIHRvIHBvaW50IHRvIHRoZSBvdXRkYXRlZAoraG9zdCBuYW1lLi4qLworaW50IGF2YWhpX3NlcnZlcl9zZXRfaG9zdF9uYW1lKEF2YWhpU2VydmVyICpzLCBjb25zdCBjaGFyICpob3N0X25hbWUpOworCisvKiogQ2hhbmdlIHRoZSBkb21haW4gbmFtZSBvZiBhIHJ1bm5pbmcgbUROUyByZXNwb25kZXIuIFRoZSBzYW1lIHJ1bGVzCisgKiBhcyB3aXRoIGF2YWhpX3NlcnZlcl9zZXRfaG9zdF9uYW1lKCkgYXBwbHkuICovCitpbnQgYXZhaGlfc2VydmVyX3NldF9kb21haW5fbmFtZShBdmFoaVNlcnZlciAqcywgY29uc3QgY2hhciAqZG9tYWluX25hbWUpOworCisvKiogUmV0dXJuIHRoZSBvcGFxdWUgdXNlciBkYXRhIHBvaW50ZXIgYXR0YWNoZWQgdG8gYSBzZXJ2ZXIgb2JqZWN0ICovCit2b2lkKiBhdmFoaV9zZXJ2ZXJfZ2V0X2RhdGEoQXZhaGlTZXJ2ZXIgKnMpOworCisvKiogQ2hhbmdlIHRoZSBvcGFxdWUgdXNlciBkYXRhIHBvaW50ZXIgYXR0YWNoZWQgdG8gYSBzZXJ2ZXIgb2JqZWN0ICovCit2b2lkIGF2YWhpX3NlcnZlcl9zZXRfZGF0YShBdmFoaVNlcnZlciAqcywgdm9pZCogdXNlcmRhdGEpOworCisvKiogUmV0dXJuIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBzZXJ2ZXIgb2JqZWN0ICovCitBdmFoaVNlcnZlclN0YXRlIGF2YWhpX3NlcnZlcl9nZXRfc3RhdGUoQXZhaGlTZXJ2ZXIgKnMpOworCisvKiogQ2FsbGJhY2sgcHJvdG90eXBlIGZvciBhdmFoaV9zZXJ2ZXJfZHVtcCgpICovCit0eXBlZGVmIHZvaWQgKCpBdmFoaUR1bXBDYWxsYmFjaykoY29uc3QgY2hhciAqdGV4dCwgdm9pZCogdXNlcmRhdGEpOworCisvKiogRHVtcCB0aGUgY3VycmVudCBzZXJ2ZXIgc3RhdHVzIGJ5IGNhbGxpbmcgImNhbGxiYWNrIiBmb3IgZWFjaCBsaW5lLiAgKi8KK2ludCBhdmFoaV9zZXJ2ZXJfZHVtcChBdmFoaVNlcnZlciAqcywgQXZhaGlEdW1wQ2FsbGJhY2sgY2FsbGJhY2ssIHZvaWQqIHVzZXJkYXRhKTsKKworLyoqIFJldHVybiB0aGUgbGFzdCBlcnJvciBjb2RlICovCitpbnQgYXZhaGlfc2VydmVyX2Vycm5vKEF2YWhpU2VydmVyICpzKTsKKworLyoqIFJldHVybiB0aGUgbG9jYWwgc2VydmljZSBjb29raWUgKi8KK3VpbnQzMl90IGF2YWhpX3NlcnZlcl9nZXRfbG9jYWxfc2VydmljZV9jb29raWUoQXZhaGlTZXJ2ZXIgKnMpOworCisvKiogU2V0IHRoZSB3aWRlIGFyZWEgRE5TIHNlcnZlcnMgKi8KK2ludCBhdmFoaV9zZXJ2ZXJfc2V0X3dpZGVfYXJlYV9zZXJ2ZXJzKEF2YWhpU2VydmVyICpzLCBjb25zdCBBdmFoaUFkZHJlc3MgKmEsIHVuc2lnbmVkIG4pOworCisvKiogU2V0IHRoZSBicm93c2luZyBkb21haW5zICovCitpbnQgYXZhaGlfc2VydmVyX3NldF9icm93c2VfZG9tYWlucyhBdmFoaVNlcnZlciAqcywgQXZhaGlTdHJpbmdMaXN0ICpkb21haW5zKTsKKworLyoqIFJldHVybiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIG9mIHRoZSBzZXJ2ZXIgXHNpbmNlIDAuNi4xNyAqLworY29uc3QgQXZhaGlTZXJ2ZXJDb25maWcqIGF2YWhpX3NlcnZlcl9nZXRfY29uZmlnKEF2YWhpU2VydmVyICpzKTsKKworQVZBSElfQ19ERUNMX0VORAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL2Rucy1zcGluLXRlc3QuYyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL2Rucy1zcGluLXRlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTBlNjkxCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvZG5zLXNwaW4tdGVzdC5jCkBAIC0wLDAgKzEsMTIyIEBACisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKy8qIFJlZ3Jlc3Npb24gdGVzdCBmb3IgQXZhaGkgYnVnICM4NC4KKyAqIFRoaXMgcHJvZ3JhbSB0ZXN0cyB3aGV0aGVyIHRoZSBhdmFoaV9kbnNfcGFja2V0X2NvbnN1bWVfbmFtZSBmdW5jdGlvbgorICogcmV0dXJucyAocmF0aGVyIHRoYW4gc3Bpbm5pbmcgZm9yZXZlcikuIEZvciBhIGZ1bmN0aW9uIGFzIHNpbXBsZSBhcworICogYXZhaGlfZG5zX3BhY2tldF9jb25zdW1lX25hbWUsIHdlIGFzc3VtZSB0aGF0IDEgc2Vjb25kIG9mIENQVSB0aW1lIOKJiCBmb3JldmVyCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKworI2luY2x1ZGUgImRucy5oIgorCisjZGVmaW5lIE1BWF9DUFVfU0VDT05EUyAxCisKKyNkZWZpbmUgVEVTVF9OQU1FICJkbnMtc3Bpbi10ZXN0IgorCitzdGF0aWMgdm9pZCBmYWlsKGNvbnN0IGNoYXIgKmZtdCwgLi4uKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLCAxLCAyKSwgbm9yZXR1cm4pKTsKK3N0YXRpYyB2b2lkIHVucmVzb2x2ZWQoY29uc3QgY2hhciAqZm10LCAuLi4pIF9fYXR0cmlidXRlX18oKGZvcm1hdChwcmludGYsIDEsIDIpLCBub3JldHVybikpOworc3RhdGljIHZvaWQgc3RkbGliX2ZhaWwoY29uc3QgY2hhciAqbXNnKSBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpOworc3RhdGljIHZvaWQgaGFuZGxlKGludCBzaWcpIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSk7CisKK3ZvaWQgc3RkbGliX2ZhaWwoY29uc3QgY2hhciAqbXNnKSB7CisgICAgcGVycm9yKG1zZyk7CisKKyAgICBwcmludGYoIlVOUkVTT0xWRUQ6ICIgVEVTVF9OQU1FICIgKHN0ZGxpYiBmYWlsdXJlKVxuIik7CisKKyAgICBleGl0KDc3KTsKK30KKwordm9pZCB1bnJlc29sdmVkKGNvbnN0IGNoYXIgKmZtdCwgLi4uKSB7CisgICAgdmFfbGlzdCBhcDsKKworICAgIHByaW50ZigiVU5SRVNPTFZFRDogIiBURVNUX05BTUUgIjogIik7CisgICAgdmFfc3RhcnQoYXAsIGZtdCk7CisgICAgdnByaW50ZihmbXQsIGFwKTsKKyAgICB2YV9lbmQoYXApOworICAgIHByaW50ZigiXG4iKTsKKworICAgIGV4aXQoNzcpOworfQorCit2b2lkIGZhaWwoY29uc3QgY2hhciAqZm10LCAuLi4pIHsKKyAgICB2YV9saXN0IGFwOworCisgICAgdmFfc3RhcnQoYXAsIGZtdCk7CisgICAgdnByaW50ZihmbXQsIGFwKTsKKyAgICB2YV9lbmQoYXApOworICAgIHByaW50ZigiXG4iKTsKKworICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKK30KKwordm9pZCBoYW5kbGUoQVZBSElfR0NDX1VOVVNFRCBpbnQgc2lnKSB7CisgICAgZmFpbCgiSW50ZXJydXB0ZWQgYWZ0ZXIgJWQgc2Vjb25kIG9mIENQVSB0aW1lIiwgTUFYX0NQVV9TRUNPTkRTKTsKK30KKworI2RlZmluZSBUUllfRVhDRVBUKGNtZCwgYmFkcmVzdWx0KSBcCisgICAgZG8geyBcCisgICAgICAgIGlmICgoY21kKSA9PSAoYmFkcmVzdWx0KSkgXAorICAgICAgICAgICAgdW5yZXNvbHZlZCgiJXMgcmV0dXJuZWQgJXMiLCAjY21kLCAjYmFkcmVzdWx0KTsgXAorICAgIH0gd2hpbGUgKDApCisKK2ludCBtYWluKEFWQUhJX0dDQ19VTlVTRUQgaW50IGFyZ2MsIEFWQUhJX0dDQ19VTlVTRUQgY2hhciAqYXJndltdKSB7CisgICAgc3RydWN0IGl0aW1lcnZhbCBpdHZhbDsKKyAgICBBdmFoaURuc1BhY2tldCAqcGFja2V0OworICAgIGNoYXIgbmFtZVs1MTJdOworICAgIGludCByZXQ7CisgICAgdWludDhfdCBiYWRycltdID0geworICAgICAgICAweEMwLCBBVkFISV9ETlNfUEFDS0VUX0hFQURFUl9TSVpFLCAvKiBzZWxmLXJlZmVyZW50aWFsIFFOQU1FIHBvaW50ZXIgKi8KKyAgICAgICAgMCwgMSwgLyogUVRZUEUgQSAoaG9zdCBhZGRyKSAqLworICAgICAgICAwLCAxLCAvKiBRQ0xBU1MgSU4gKGludGVybmV0L2lwdjQpICovCisgICAgfTsKKworICAgIGlmIChzaWduYWwoU0lHVlRBTFJNLCBoYW5kbGUpID09IFNJR19FUlIpCisgICAgICAgIHN0ZGxpYl9mYWlsKCJzaWduYWwoU0lHVlRBTFJNKSIpOworCisgICAgbWVtc2V0KCZpdHZhbCwgMCwgc2l6ZW9mKGl0dmFsKSk7CisgICAgaXR2YWwuaXRfdmFsdWUudHZfc2VjID0gTUFYX0NQVV9TRUNPTkRTOworCisgICAgaWYgKHNldGl0aW1lcihJVElNRVJfVklSVFVBTCwgJml0dmFsLCBOVUxMKSA9PSAtMSkKKyAgICAgICAgc3RkbGliX2ZhaWwoInNldGl0aW1lcigpIik7CisKKyAgICBUUllfRVhDRVBUKHBhY2tldCA9IGF2YWhpX2Ruc19wYWNrZXRfbmV3X3F1ZXJ5KDUxMiksIE5VTEwpOworICAgIFRSWV9FWENFUFQoYXZhaGlfZG5zX3BhY2tldF9hcHBlbmRfYnl0ZXMocGFja2V0LCBiYWRyciwgc2l6ZW9mKGJhZHJyKSksIE5VTEwpOworCisgICAgLyogVGhpcyBpcyBleHBlY3RlZCB0byBmYWlsIChpZiBpdCByZXR1cm5zKSAqLworICAgIHJldCA9IGF2YWhpX2Ruc19wYWNrZXRfY29uc3VtZV9uYW1lKHBhY2tldCwgbmFtZSwgc2l6ZW9mKG5hbWUpKTsKKworICAgIGlmIChyZXQgIT0gLTEpCisgICAgICAgIGZhaWwoImF2YWhpX2Ruc19wYWNrZXRfY29uc3VtZV9uYW1lKCkgcmV0dXJuZWQgJWQ7IC0xIHdhcyBleHBlY3RlZCIsIHJldCk7CisKKyAgICByZXR1cm4gRVhJVF9TVUNDRVNTOworfQorCisvKiB2aW06dHM9NDpzdz00OmV0CisgKi8KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL2Rucy1zcnYtcnIuaCBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL2Rucy1zcnYtcnIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGQ5MDEwCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvZG5zLXNydi1yci5oCkBAIC0wLDAgKzEsODcgQEAKKyNpZm5kZWYgZm9vZG5zc3J2aGZvbworI2RlZmluZSBmb29kbnNzcnZoZm9vCisKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworLyoqIFxmaWxlIGF2YWhpLWNvcmUvZG5zLXNydi1yci5oIEZ1bmN0aW9ucyBmb3IgYW5ub3VuY2luZyBhbmQgYnJvd3NpbmcgZm9yIHVuaWNhc3QgRE5TIHNlcnZlcnMgdmlhIG1ETlMgKi8KKworLyoqIEEgZG9tYWluIHNlcnZpY2UgYnJvd3NlciBvYmplY3QuIFVzZSB0aGlzIHRvIGJyb3dzZSBmb3IKKyAqIGNvbnZlbnRpb25hbCB1bmljYXN0IEROUyBzZXJ2ZXJzIHdoaWNoIG1heSBiZSB1c2VkIHRvIHJlc29sdmUKKyAqIGNvbnZlbnRpb25hbCBkb21haW4gbmFtZXMgKi8KK3R5cGVkZWYgc3RydWN0IEF2YWhpU0ROU1NlcnZlckJyb3dzZXIgQXZhaGlTRE5TU2VydmVyQnJvd3NlcjsKKworI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9jZGVjbC5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9kZWZzLmg+CisjaW5jbHVkZSA8YXZhaGktY29yZS9jb3JlLmg+CisjaW5jbHVkZSA8YXZhaGktY29yZS9wdWJsaXNoLmg+CisKK0FWQUhJX0NfREVDTF9CRUdJTgorCisvKiogVGhlIHR5cGUgb2YgRE5TIHNlcnZlciAqLwordHlwZWRlZiBlbnVtIHsKKyAgICBBVkFISV9ETlNfU0VSVkVSX1JFU09MVkUsICAgICAgICAgLyoqPCBVbmljYXN0IEROUyBzZXJ2ZXJzIGZvciBub3JtYWwgcmVzb2x2ZXMgKF9kb21haW4uX3VkcCkqLworICAgIEFWQUhJX0ROU19TRVJWRVJfVVBEQVRFLCAgICAgICAgICAgLyoqPCBVbmljYXN0IEROUyBzZXJ2ZXJzIGZvciB1cGRhdGVzIChfZG5zLXVwZGF0ZS5fdWRwKSovCisgICAgQVZBSElfRE5TX1NFUlZFUl9NQVgKK30gQXZhaGlETlNTZXJ2ZXJUeXBlOworCisvKiogUHVibGlzaCB0aGUgc3BlY2lmaWVkIHVuaWNhc3QgRE5TIHNlcnZlciBhZGRyZXNzIHZpYSBtRE5TLiBZb3UgbWF5CisgKiBicm93c2UgZm9yIHJlY29yZHMgY3JlYXRlIHRoaXMgd2F5IHdpdAorICogYXZhaGlfc19kbnNfc2VydmVyX2Jyb3dzZXJfbmV3KCkuICovCitpbnQgYXZhaGlfc2VydmVyX2FkZF9kbnNfc2VydmVyX2FkZHJlc3MoCisgICAgQXZhaGlTZXJ2ZXIgKnMsCisgICAgQXZhaGlTRW50cnlHcm91cCAqZywKKyAgICBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLAorICAgIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsCisgICAgQXZhaGlQdWJsaXNoRmxhZ3MgZmxhZ3MsCisgICAgY29uc3QgY2hhciAqZG9tYWluLAorICAgIEF2YWhpRE5TU2VydmVyVHlwZSB0eXBlLAorICAgIGNvbnN0IEF2YWhpQWRkcmVzcyAqYWRkcmVzcywKKyAgICB1aW50MTZfdCBwb3J0IC8qKiBzaG91bGQgYmUgNTMgKi8pOworCisvKiogQ2FsbGJhY2sgcHJvdG90eXBlIGZvciBBdmFoaVNETlNTZXJ2ZXJCcm93c2VyIGV2ZW50cyAqLwordHlwZWRlZiB2b2lkICgqQXZhaGlTRE5TU2VydmVyQnJvd3NlckNhbGxiYWNrKSgKKyAgICBBdmFoaVNETlNTZXJ2ZXJCcm93c2VyICpiLAorICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsCisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICBBdmFoaUJyb3dzZXJFdmVudCBldmVudCwKKyAgICBjb25zdCBjaGFyICpob3N0X25hbWUsICAgICAgIC8qKjwgSG9zdCBuYW1lIG9mIHRoZSBETlMgc2VydmVyLCBwcm9iYWJseSB1c2VsZXNzICovCisgICAgY29uc3QgQXZhaGlBZGRyZXNzICphLCAgICAgICAgLyoqPCBBZGRyZXNzIG9mIHRoZSBETlMgc2VydmVyICovCisgICAgdWludDE2X3QgcG9ydCwgICAgICAgICAgICAgICAgIC8qKjwgUG9ydCBudW1iZXIgb2YgdGhlIEROUyBzZXJ2ZXJzLCBwcm9iYWJseSA1MyAqLworICAgIEF2YWhpTG9va3VwUmVzdWx0RmxhZ3MgZmxhZ3MsICAvKio8IExvb2t1cCBmbGFncyAqLworICAgIHZvaWQqIHVzZXJkYXRhKTsKKworLyoqIENyZWF0ZSBhIG5ldyBBdmFoaVNETlNTZXJ2ZXJCcm93c2VyIG9iamVjdCAqLworQXZhaGlTRE5TU2VydmVyQnJvd3NlciAqYXZhaGlfc19kbnNfc2VydmVyX2Jyb3dzZXJfbmV3KAorICAgIEF2YWhpU2VydmVyICpzZXJ2ZXIsCisgICAgQXZhaGlJZkluZGV4IGludGVyZmFjZSwKKyAgICBBdmFoaVByb3RvY29sIHByb3RvY29sLAorICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwKKyAgICBBdmFoaUROU1NlcnZlclR5cGUgdHlwZSwKKyAgICBBdmFoaVByb3RvY29sIGFwcm90b2NvbCwgIC8qKjwgQWRkcmVzcyBwcm90b2NvbCBmb3IgdGhlIEROUyBzZXJ2ZXIgKi8KKyAgICBBdmFoaUxvb2t1cEZsYWdzIGZsYWdzLCAgICAgICAgICAgICAgICAgLyoqPCBMb29rdXAgZmxhZ3MuICovCisgICAgQXZhaGlTRE5TU2VydmVyQnJvd3NlckNhbGxiYWNrIGNhbGxiYWNrLAorICAgIHZvaWQqIHVzZXJkYXRhKTsKKworLyoqIEZyZWUgYW4gQXZhaGlTRE5TU2VydmVyQnJvd3NlciBvYmplY3QgKi8KK3ZvaWQgYXZhaGlfc19kbnNfc2VydmVyX2Jyb3dzZXJfZnJlZShBdmFoaVNETlNTZXJ2ZXJCcm93c2VyICpiKTsKKworQVZBSElfQ19ERUNMX0VORAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL2Rucy10ZXN0LmMgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9kbnMtdGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViZTIzMDUKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9kbnMtdGVzdC5jCkBAIC0wLDAgKzEsMTEzIEBACisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisKKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vZG9tYWluLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2RlZnMuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vbWFsbG9jLmg+CisKKyNpbmNsdWRlICJkbnMuaCIKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJ1dGlsLmgiCisKK2ludCBtYWluKEFWQUhJX0dDQ19VTlVTRUQgaW50IGFyZ2MsIEFWQUhJX0dDQ19VTlVTRUQgY2hhciAqYXJndltdKSB7CisgICAgY2hhciB0W0FWQUhJX0RPTUFJTl9OQU1FX01BWF0sICptOworICAgIGNvbnN0IGNoYXIgKmEsICpiLCAqYywgKmQ7CisgICAgQXZhaGlEbnNQYWNrZXQgKnA7CisgICAgQXZhaGlSZWNvcmQgKnIsICpyMjsKKyAgICB1aW50OF90IHJkYXRhW0FWQUhJX0ROU19SREFUQV9NQVhdOworICAgIHNpemVfdCBsOworCisgICAgcCA9IGF2YWhpX2Ruc19wYWNrZXRfbmV3KDApOworCisgICAgYXNzZXJ0KGF2YWhpX2Ruc19wYWNrZXRfYXBwZW5kX25hbWUocCwgYSA9ICJBaGVsbG8uaGVsbG8uaGVsbG8uZGUuIikpOworICAgIGFzc2VydChhdmFoaV9kbnNfcGFja2V0X2FwcGVuZF9uYW1lKHAsIGIgPSAiQnRoaXMgaXMgYSB0ZXN0LmhlbGxvLmRlLiIpKTsKKyAgICBhc3NlcnQoYXZhaGlfZG5zX3BhY2tldF9hcHBlbmRfbmFtZShwLCBjID0gIkN0aGlzXFwuaXNcXC5hXFwudGVzdFxcLndpdGhcXC5kb3RzLmhlbGxvLmRlLiIpKTsKKyAgICBhc3NlcnQoYXZhaGlfZG5zX3BhY2tldF9hcHBlbmRfbmFtZShwLCBkID0gIkR0aGlzXFxcXGlzIGFub3RoZXIgdGVzdC5oZWxsby5kZS4iKSk7CisKKyAgICBhdmFoaV9oZXhkdW1wKEFWQUhJX0ROU19QQUNLRVRfREFUQShwKSwgcC0+c2l6ZSk7CisKKyAgICBhc3NlcnQoYXZhaGlfZG5zX3BhY2tldF9jb25zdW1lX25hbWUocCwgdCwgc2l6ZW9mKHQpKSA9PSAwKTsKKyAgICBhdmFoaV9sb2dfZGVidWcoIj4lczwiLCB0KTsKKyAgICBhc3NlcnQoYXZhaGlfZG9tYWluX2VxdWFsKGEsIHQpKTsKKworICAgIGFzc2VydChhdmFoaV9kbnNfcGFja2V0X2NvbnN1bWVfbmFtZShwLCB0LCBzaXplb2YodCkpID09IDApOworICAgIGF2YWhpX2xvZ19kZWJ1ZygiPiVzPCIsIHQpOworICAgIGFzc2VydChhdmFoaV9kb21haW5fZXF1YWwoYiwgdCkpOworCisgICAgYXNzZXJ0KGF2YWhpX2Ruc19wYWNrZXRfY29uc3VtZV9uYW1lKHAsIHQsIHNpemVvZih0KSkgPT0gMCk7CisgICAgYXZhaGlfbG9nX2RlYnVnKCI+JXM8IiwgdCk7CisgICAgYXNzZXJ0KGF2YWhpX2RvbWFpbl9lcXVhbChjLCB0KSk7CisKKyAgICBhc3NlcnQoYXZhaGlfZG5zX3BhY2tldF9jb25zdW1lX25hbWUocCwgdCwgc2l6ZW9mKHQpKSA9PSAwKTsKKyAgICBhdmFoaV9sb2dfZGVidWcoIj4lczwiLCB0KTsKKyAgICBhc3NlcnQoYXZhaGlfZG9tYWluX2VxdWFsKGQsIHQpKTsKKworICAgIGF2YWhpX2Ruc19wYWNrZXRfZnJlZShwKTsKKworICAgIC8qIFJEQVRBIFBBUlNJTkcgQU5EIFNFUklBTElaQVRJT04gKi8KKworICAgIC8qIENyZWF0ZSBhbiBBdmFoaVJlY29yZCB3aXRoIHNvbWUgdXNmdWwgZGF0YSAqLworICAgIHIgPSBhdmFoaV9yZWNvcmRfbmV3X2Z1bGwoImZvb2Jhci5sb2NhbCIsIEFWQUhJX0ROU19DTEFTU19JTiwgQVZBSElfRE5TX1RZUEVfSElORk8sIEFWQUhJX0RFRkFVTFRfVFRMKTsKKyAgICBhc3NlcnQocik7CisgICAgci0+ZGF0YS5oaW5mby5jcHUgPSBhdmFoaV9zdHJkdXAoIkZPTyIpOworICAgIHItPmRhdGEuaGluZm8ub3MgPSBhdmFoaV9zdHJkdXAoIkJBUiIpOworCisgICAgLyogU2VyaWFsaXplIGl0IGludG8gYSBibG9iICovCisgICAgYXNzZXJ0KChsID0gYXZhaGlfcmRhdGFfc2VyaWFsaXplKHIsIHJkYXRhLCBzaXplb2YocmRhdGEpKSkgIT0gKHNpemVfdCkgLTEpOworCisgICAgLyogUHJpbnQgaXQgKi8KKyAgICBhdmFoaV9oZXhkdW1wKHJkYXRhLCBsKTsKKworICAgIC8qIENyZWF0ZSBhIG5ldyByZWNvcmQgYW5kIGZpbGwgaW4gdGhlIGRhdGEgZnJvbSB0aGUgYmxvYiAqLworICAgIHIyID0gYXZhaGlfcmVjb3JkX25ldyhyLT5rZXksIEFWQUhJX0RFRkFVTFRfVFRMKTsKKyAgICBhc3NlcnQocjIpOworICAgIGFzc2VydChhdmFoaV9yZGF0YV9wYXJzZShyMiwgcmRhdGEsIGwpID49IDApOworCisgICAgLyogQ29tcGFyZSBib3RoIHZlcnNpb25zICovCisgICAgYXNzZXJ0KGF2YWhpX3JlY29yZF9lcXVhbF9ub190dGwociwgcjIpKTsKKworICAgIC8qIEZyZWUgdGhlIHJlY29yZHMgKi8KKyAgICBhdmFoaV9yZWNvcmRfdW5yZWYocik7CisgICAgYXZhaGlfcmVjb3JkX3VucmVmKHIyKTsKKworICAgIHIgPSBhdmFoaV9yZWNvcmRfbmV3X2Z1bGwoImZvb2JhciIsIDc3LCA3NywgQVZBSElfREVGQVVMVF9UVEwpOworICAgIGFzc2VydChyKTsKKworICAgIGFzc2VydChyLT5kYXRhLmdlbmVyaWMuZGF0YSA9IGF2YWhpX21lbWR1cCgiSEFMTE8iLCByLT5kYXRhLmdlbmVyaWMuc2l6ZSA9IDUpKTsKKworICAgIG0gPSBhdmFoaV9yZWNvcmRfdG9fc3RyaW5nKHIpOworICAgIGFzc2VydChtKTsKKworICAgIGF2YWhpX2xvZ19kZWJ1ZygiPiVzPCIsIG0pOworCisgICAgYXZhaGlfZnJlZShtKTsKKyAgICBhdmFoaV9yZWNvcmRfdW5yZWYocik7CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL2Rucy5jIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvZG5zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZjZDkxZgotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL2Rucy5jCkBAIC0wLDAgKzEsODc3IEBACisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisKKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vZGVmcy5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9kb21haW4uaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vbWFsbG9jLmg+CisKKyNpbmNsdWRlICJkbnMuaCIKKyNpbmNsdWRlICJsb2cuaCIKKworQXZhaGlEbnNQYWNrZXQqIGF2YWhpX2Ruc19wYWNrZXRfbmV3KHVuc2lnbmVkIG10dSkgeworICAgIEF2YWhpRG5zUGFja2V0ICpwOworICAgIHNpemVfdCBtYXhfc2l6ZTsKKworICAgIGlmIChtdHUgPD0gMCkKKyAgICAgICAgbWF4X3NpemUgPSBBVkFISV9ETlNfUEFDS0VUX1NJWkVfTUFYOworICAgIGVsc2UgaWYgKG10dSA+PSBBVkFISV9ETlNfUEFDS0VUX0VYVFJBX1NJWkUpCisgICAgICAgIG1heF9zaXplID0gbXR1IC0gQVZBSElfRE5TX1BBQ0tFVF9FWFRSQV9TSVpFOworICAgIGVsc2UKKyAgICAgICAgbWF4X3NpemUgPSAwOworCisgICAgaWYgKG1heF9zaXplIDwgQVZBSElfRE5TX1BBQ0tFVF9IRUFERVJfU0laRSkKKyAgICAgICAgbWF4X3NpemUgPSBBVkFISV9ETlNfUEFDS0VUX0hFQURFUl9TSVpFOworCisgICAgaWYgKCEocCA9IGF2YWhpX21hbGxvYyhzaXplb2YoQXZhaGlEbnNQYWNrZXQpICsgbWF4X3NpemUpKSkKKyAgICAgICAgcmV0dXJuIHA7CisKKyAgICBwLT5zaXplID0gcC0+cmluZGV4ID0gQVZBSElfRE5TX1BBQ0tFVF9IRUFERVJfU0laRTsKKyAgICBwLT5tYXhfc2l6ZSA9IG1heF9zaXplOworICAgIHAtPm5hbWVfdGFibGUgPSBOVUxMOworICAgIHAtPmRhdGEgPSBOVUxMOworCisgICAgbWVtc2V0KEFWQUhJX0ROU19QQUNLRVRfREFUQShwKSwgMCwgcC0+c2l6ZSk7CisgICAgcmV0dXJuIHA7Cit9CisKK0F2YWhpRG5zUGFja2V0KiBhdmFoaV9kbnNfcGFja2V0X25ld19xdWVyeSh1bnNpZ25lZCBtdHUpIHsKKyAgICBBdmFoaURuc1BhY2tldCAqcDsKKworICAgIGlmICghKHAgPSBhdmFoaV9kbnNfcGFja2V0X25ldyhtdHUpKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBhdmFoaV9kbnNfcGFja2V0X3NldF9maWVsZChwLCBBVkFISV9ETlNfRklFTERfRkxBR1MsIEFWQUhJX0ROU19GTEFHUygwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKSk7CisgICAgcmV0dXJuIHA7Cit9CisKK0F2YWhpRG5zUGFja2V0KiBhdmFoaV9kbnNfcGFja2V0X25ld19yZXNwb25zZSh1bnNpZ25lZCBtdHUsIGludCBhYSkgeworICAgIEF2YWhpRG5zUGFja2V0ICpwOworCisgICAgaWYgKCEocCA9IGF2YWhpX2Ruc19wYWNrZXRfbmV3KG10dSkpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGF2YWhpX2Ruc19wYWNrZXRfc2V0X2ZpZWxkKHAsIEFWQUhJX0ROU19GSUVMRF9GTEFHUywgQVZBSElfRE5TX0ZMQUdTKDEsIDAsIGFhLCAwLCAwLCAwLCAwLCAwLCAwLCAwKSk7CisgICAgcmV0dXJuIHA7Cit9CisKK0F2YWhpRG5zUGFja2V0KiBhdmFoaV9kbnNfcGFja2V0X25ld19yZXBseShBdmFoaURuc1BhY2tldCogcCwgdW5zaWduZWQgbXR1LCBpbnQgY29weV9xdWVyaWVzLCBpbnQgYWEpIHsKKyAgICBBdmFoaURuc1BhY2tldCAqcjsKKyAgICBhc3NlcnQocCk7CisKKyAgICBpZiAoIShyID0gYXZhaGlfZG5zX3BhY2tldF9uZXdfcmVzcG9uc2UobXR1LCBhYSkpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChjb3B5X3F1ZXJpZXMpIHsKKyAgICAgICAgdW5zaWduZWQgc2F2ZWRfcmluZGV4OworICAgICAgICB1aW50MzJfdCBuOworCisgICAgICAgIHNhdmVkX3JpbmRleCA9IHAtPnJpbmRleDsKKyAgICAgICAgcC0+cmluZGV4ID0gQVZBSElfRE5TX1BBQ0tFVF9IRUFERVJfU0laRTsKKworICAgICAgICBmb3IgKG4gPSBhdmFoaV9kbnNfcGFja2V0X2dldF9maWVsZChwLCBBVkFISV9ETlNfRklFTERfUURDT1VOVCk7IG4gPiAwOyBuLS0pIHsKKyAgICAgICAgICAgIEF2YWhpS2V5ICprOworICAgICAgICAgICAgaW50IHVuaWNhc3RfcmVzcG9uc2U7CisKKyAgICAgICAgICAgIGlmICgoayA9IGF2YWhpX2Ruc19wYWNrZXRfY29uc3VtZV9rZXkocCwgJnVuaWNhc3RfcmVzcG9uc2UpKSkgeworICAgICAgICAgICAgICAgIGF2YWhpX2Ruc19wYWNrZXRfYXBwZW5kX2tleShyLCBrLCB1bmljYXN0X3Jlc3BvbnNlKTsKKyAgICAgICAgICAgICAgICBhdmFoaV9rZXlfdW5yZWYoayk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwLT5yaW5kZXggPSBzYXZlZF9yaW5kZXg7CisKKyAgICAgICAgYXZhaGlfZG5zX3BhY2tldF9zZXRfZmllbGQociwgQVZBSElfRE5TX0ZJRUxEX1FEQ09VTlQsIGF2YWhpX2Ruc19wYWNrZXRfZ2V0X2ZpZWxkKHAsIEFWQUhJX0ROU19GSUVMRF9RRENPVU5UKSk7CisgICAgfQorCisgICAgYXZhaGlfZG5zX3BhY2tldF9zZXRfZmllbGQociwgQVZBSElfRE5TX0ZJRUxEX0lELCBhdmFoaV9kbnNfcGFja2V0X2dldF9maWVsZChwLCBBVkFISV9ETlNfRklFTERfSUQpKTsKKworICAgIGF2YWhpX2Ruc19wYWNrZXRfc2V0X2ZpZWxkKHIsIEFWQUhJX0ROU19GSUVMRF9GTEFHUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYXZhaGlfZG5zX3BhY2tldF9nZXRfZmllbGQociwgQVZBSElfRE5TX0ZJRUxEX0ZMQUdTKSAmIH5BVkFISV9ETlNfRkxBR19PUENPREUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYXZhaGlfZG5zX3BhY2tldF9nZXRfZmllbGQocCwgQVZBSElfRE5TX0ZJRUxEX0ZMQUdTKSAmIEFWQUhJX0ROU19GTEFHX09QQ09ERSkpOworCisgICAgcmV0dXJuIHI7Cit9CisKKwordm9pZCBhdmFoaV9kbnNfcGFja2V0X2ZyZWUoQXZhaGlEbnNQYWNrZXQgKnApIHsKKyAgICBhc3NlcnQocCk7CisKKyAgICBpZiAocC0+bmFtZV90YWJsZSkKKyAgICAgICAgYXZhaGlfaGFzaG1hcF9mcmVlKHAtPm5hbWVfdGFibGUpOworCisgICAgYXZhaGlfZnJlZShwKTsKK30KKwordm9pZCBhdmFoaV9kbnNfcGFja2V0X3NldF9maWVsZChBdmFoaURuc1BhY2tldCAqcCwgdW5zaWduZWQgaWR4LCB1aW50MTZfdCB2KSB7CisgICAgYXNzZXJ0KHApOworICAgIGFzc2VydChpZHggPCBBVkFISV9ETlNfUEFDS0VUX0hFQURFUl9TSVpFKTsKKworICAgICgodWludDE2X3QqKSBBVkFISV9ETlNfUEFDS0VUX0RBVEEocCkpW2lkeF0gPSBodG9ucyh2KTsKK30KKwordWludDE2X3QgYXZhaGlfZG5zX3BhY2tldF9nZXRfZmllbGQoQXZhaGlEbnNQYWNrZXQgKnAsIHVuc2lnbmVkIGlkeCkgeworICAgIGFzc2VydChwKTsKKyAgICBhc3NlcnQoaWR4IDwgQVZBSElfRE5TX1BBQ0tFVF9IRUFERVJfU0laRSk7CisKKyAgICByZXR1cm4gbnRvaHMoKCh1aW50MTZfdCopIEFWQUhJX0ROU19QQUNLRVRfREFUQShwKSlbaWR4XSk7Cit9CisKK3ZvaWQgYXZhaGlfZG5zX3BhY2tldF9pbmNfZmllbGQoQXZhaGlEbnNQYWNrZXQgKnAsIHVuc2lnbmVkIGlkeCkgeworICAgIGFzc2VydChwKTsKKyAgICBhc3NlcnQoaWR4IDwgQVZBSElfRE5TX1BBQ0tFVF9IRUFERVJfU0laRSk7CisKKyAgICBhdmFoaV9kbnNfcGFja2V0X3NldF9maWVsZChwLCBpZHgsIGF2YWhpX2Ruc19wYWNrZXRfZ2V0X2ZpZWxkKHAsIGlkeCkgKyAxKTsKK30KKworCitzdGF0aWMgdm9pZCBuYW1lX3RhYmxlX2NsZWFudXAodm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwgdm9pZCAqdXNlcl9kYXRhKSB7CisgICAgQXZhaGlEbnNQYWNrZXQgKnAgPSB1c2VyX2RhdGE7CisKKyAgICBpZiAoKHVpbnQ4X3QqKSB2YWx1ZSA+PSBBVkFISV9ETlNfUEFDS0VUX0RBVEEocCkgKyBwLT5zaXplKQorICAgICAgICBhdmFoaV9oYXNobWFwX3JlbW92ZShwLT5uYW1lX3RhYmxlLCBrZXkpOworfQorCit2b2lkIGF2YWhpX2Ruc19wYWNrZXRfY2xlYW51cF9uYW1lX3RhYmxlKEF2YWhpRG5zUGFja2V0ICpwKSB7CisgICAgaWYgKHAtPm5hbWVfdGFibGUpCisgICAgICAgIGF2YWhpX2hhc2htYXBfZm9yZWFjaChwLT5uYW1lX3RhYmxlLCBuYW1lX3RhYmxlX2NsZWFudXAsIHApOworfQorCit1aW50OF90KiBhdmFoaV9kbnNfcGFja2V0X2FwcGVuZF9uYW1lKEF2YWhpRG5zUGFja2V0ICpwLCBjb25zdCBjaGFyICpuYW1lKSB7CisgICAgdWludDhfdCAqZCwgKnNhdmVkX3B0ciA9IE5VTEw7CisgICAgc2l6ZV90IHNhdmVkX3NpemU7CisKKyAgICBhc3NlcnQocCk7CisgICAgYXNzZXJ0KG5hbWUpOworCisgICAgc2F2ZWRfc2l6ZSA9IHAtPnNpemU7CisgICAgc2F2ZWRfcHRyID0gYXZhaGlfZG5zX3BhY2tldF9leHRlbmQocCwgMCk7CisKKyAgICB3aGlsZSAoKm5hbWUpIHsKKyAgICAgICAgdWludDhfdCogcHJldjsKKyAgICAgICAgY29uc3QgY2hhciAqcG5hbWU7CisgICAgICAgIGNoYXIgbGFiZWxbNjRdLCAqdTsKKworICAgICAgICAvKiBDaGVjayB3aGV0aGVyIHdlIGNhbiBjb21wcmVzcyB0aGlzIG5hbWUuICovCisKKyAgICAgICAgaWYgKHAtPm5hbWVfdGFibGUgJiYgKHByZXYgPSBhdmFoaV9oYXNobWFwX2xvb2t1cChwLT5uYW1lX3RhYmxlLCBuYW1lKSkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGlkeDsKKworICAgICAgICAgICAgYXNzZXJ0KHByZXYgPj0gQVZBSElfRE5TX1BBQ0tFVF9EQVRBKHApKTsKKyAgICAgICAgICAgIGlkeCA9ICh1bnNpZ25lZCkgKHByZXYgLSBBVkFISV9ETlNfUEFDS0VUX0RBVEEocCkpOworCisgICAgICAgICAgICBhc3NlcnQoaWR4IDwgcC0+c2l6ZSk7CisKKyAgICAgICAgICAgIGlmIChpZHggPCAweDQwMDApIHsKKyAgICAgICAgICAgICAgICB1aW50OF90ICp0OworICAgICAgICAgICAgICAgIGlmICghKHQgPSAodWludDhfdCopIGF2YWhpX2Ruc19wYWNrZXRfZXh0ZW5kKHAsIHNpemVvZih1aW50MTZfdCkpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKKwkJdFswXSA9ICh1aW50OF90KSAoKDB4QzAwMCB8IGlkeCkgPj4gOCk7CisJCXRbMV0gPSAodWludDhfdCkgaWR4OworICAgICAgICAgICAgICAgIHJldHVybiBzYXZlZF9wdHI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwbmFtZSA9IG5hbWU7CisKKyAgICAgICAgaWYgKCEoYXZhaGlfdW5lc2NhcGVfbGFiZWwoJm5hbWUsIGxhYmVsLCBzaXplb2YobGFiZWwpKSkpCisgICAgICAgICAgICBnb3RvIGZhaWw7CisKKyAgICAgICAgaWYgKCEoZCA9IGF2YWhpX2Ruc19wYWNrZXRfYXBwZW5kX3N0cmluZyhwLCBsYWJlbCkpKQorICAgICAgICAgICAgZ290byBmYWlsOworCisgICAgICAgIGlmICghcC0+bmFtZV90YWJsZSkKKyAgICAgICAgICAgIC8qIFRoaXMgd29ya3Mgb25seSBmb3Igbm9ybWFsaXplZCBkb21haW4gbmFtZXMgKi8KKyAgICAgICAgICAgIHAtPm5hbWVfdGFibGUgPSBhdmFoaV9oYXNobWFwX25ldyhhdmFoaV9zdHJpbmdfaGFzaCwgYXZhaGlfc3RyaW5nX2VxdWFsLCBhdmFoaV9mcmVlLCBOVUxMKTsKKworICAgICAgICBpZiAoISh1ID0gYXZhaGlfc3RyZHVwKHBuYW1lKSkpCisgICAgICAgICAgICBhdmFoaV9sb2dfZXJyb3IoImF2YWhpX3N0cmR1cCgpIGZhaWxlZC4iKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYXZhaGlfaGFzaG1hcF9pbnNlcnQocC0+bmFtZV90YWJsZSwgdSwgZCk7CisgICAgfQorCisgICAgaWYgKCEoZCA9IGF2YWhpX2Ruc19wYWNrZXRfZXh0ZW5kKHAsIDEpKSkKKyAgICAgICAgZ290byBmYWlsOworCisgICAgKmQgPSAwOworCisgICAgcmV0dXJuIHNhdmVkX3B0cjsKKworZmFpbDoKKyAgICBwLT5zaXplID0gc2F2ZWRfc2l6ZTsKKyAgICBhdmFoaV9kbnNfcGFja2V0X2NsZWFudXBfbmFtZV90YWJsZShwKTsKKworICAgIHJldHVybiBOVUxMOworfQorCit1aW50OF90KiBhdmFoaV9kbnNfcGFja2V0X2FwcGVuZF91aW50MTYoQXZhaGlEbnNQYWNrZXQgKnAsIHVpbnQxNl90IHYpIHsKKyAgICB1aW50OF90ICpkOworICAgIGFzc2VydChwKTsKKworICAgIGlmICghKGQgPSBhdmFoaV9kbnNfcGFja2V0X2V4dGVuZChwLCBzaXplb2YodWludDE2X3QpKSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZFswXSA9ICh1aW50OF90KSAodiA+PiA4KTsKKyAgICBkWzFdID0gKHVpbnQ4X3QpIHY7CisgICAgcmV0dXJuIGQ7Cit9CisKK3VpbnQ4X3QgKmF2YWhpX2Ruc19wYWNrZXRfYXBwZW5kX3VpbnQzMihBdmFoaURuc1BhY2tldCAqcCwgdWludDMyX3QgdikgeworICAgIHVpbnQ4X3QgKmQ7CisgICAgYXNzZXJ0KHApOworCisgICAgaWYgKCEoZCA9IGF2YWhpX2Ruc19wYWNrZXRfZXh0ZW5kKHAsIHNpemVvZih1aW50MzJfdCkpKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBkWzBdID0gKHVpbnQ4X3QpICh2ID4+IDI0KTsKKyAgICBkWzFdID0gKHVpbnQ4X3QpICh2ID4+IDE2KTsKKyAgICBkWzJdID0gKHVpbnQ4X3QpICh2ID4+IDgpOworICAgIGRbM10gPSAodWludDhfdCkgdjsKKworICAgIHJldHVybiBkOworfQorCit1aW50OF90ICphdmFoaV9kbnNfcGFja2V0X2FwcGVuZF9ieXRlcyhBdmFoaURuc1BhY2tldCAgKnAsIGNvbnN0IHZvaWQgKmIsIHNpemVfdCBsKSB7CisgICAgdWludDhfdCogZDsKKworICAgIGFzc2VydChwKTsKKyAgICBhc3NlcnQoYik7CisgICAgYXNzZXJ0KGwpOworCisgICAgaWYgKCEoZCA9IGF2YWhpX2Ruc19wYWNrZXRfZXh0ZW5kKHAsIGwpKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBtZW1jcHkoZCwgYiwgbCk7CisgICAgcmV0dXJuIGQ7Cit9CisKK3VpbnQ4X3QqIGF2YWhpX2Ruc19wYWNrZXRfYXBwZW5kX3N0cmluZyhBdmFoaURuc1BhY2tldCAqcCwgY29uc3QgY2hhciAqcykgeworICAgIHVpbnQ4X3QqIGQ7CisgICAgc2l6ZV90IGs7CisKKyAgICBhc3NlcnQocCk7CisgICAgYXNzZXJ0KHMpOworCisgICAgaWYgKChrID0gc3RybGVuKHMpKSA+PSAyNTUpCisgICAgICAgIGsgPSAyNTU7CisKKyAgICBpZiAoIShkID0gYXZhaGlfZG5zX3BhY2tldF9leHRlbmQocCwgaysxKSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgKmQgPSAodWludDhfdCkgazsKKyAgICBtZW1jcHkoZCsxLCBzLCBrKTsKKworICAgIHJldHVybiBkOworfQorCit1aW50OF90ICphdmFoaV9kbnNfcGFja2V0X2V4dGVuZChBdmFoaURuc1BhY2tldCAqcCwgc2l6ZV90IGwpIHsKKyAgICB1aW50OF90ICpkOworCisgICAgYXNzZXJ0KHApOworCisgICAgaWYgKHAtPnNpemUrbCA+IHAtPm1heF9zaXplKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGQgPSBBVkFISV9ETlNfUEFDS0VUX0RBVEEocCkgKyBwLT5zaXplOworICAgIHAtPnNpemUgKz0gbDsKKworICAgIHJldHVybiBkOworfQorCitpbnQgYXZhaGlfZG5zX3BhY2tldF9jaGVja192YWxpZChBdmFoaURuc1BhY2tldCAqcCkgeworICAgIHVpbnQxNl90IGZsYWdzOworICAgIGFzc2VydChwKTsKKworICAgIGlmIChwLT5zaXplIDwgQVZBSElfRE5TX1BBQ0tFVF9IRUFERVJfU0laRSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgZmxhZ3MgPSBhdmFoaV9kbnNfcGFja2V0X2dldF9maWVsZChwLCBBVkFISV9ETlNfRklFTERfRkxBR1MpOworCisgICAgaWYgKGZsYWdzICYgQVZBSElfRE5TX0ZMQUdfT1BDT0RFKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IGF2YWhpX2Ruc19wYWNrZXRfY2hlY2tfdmFsaWRfbXVsdGljYXN0KEF2YWhpRG5zUGFja2V0ICpwKSB7CisgICAgdWludDE2X3QgZmxhZ3M7CisgICAgYXNzZXJ0KHApOworCisgICAgaWYgKGF2YWhpX2Ruc19wYWNrZXRfY2hlY2tfdmFsaWQocCkgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBmbGFncyA9IGF2YWhpX2Ruc19wYWNrZXRfZ2V0X2ZpZWxkKHAsIEFWQUhJX0ROU19GSUVMRF9GTEFHUyk7CisKKyAgICBpZiAoZmxhZ3MgJiBBVkFISV9ETlNfRkxBR19SQ09ERSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBhdmFoaV9kbnNfcGFja2V0X2lzX3F1ZXJ5KEF2YWhpRG5zUGFja2V0ICpwKSB7CisgICAgYXNzZXJ0KHApOworCisgICAgcmV0dXJuICEoYXZhaGlfZG5zX3BhY2tldF9nZXRfZmllbGQocCwgQVZBSElfRE5TX0ZJRUxEX0ZMQUdTKSAmIEFWQUhJX0ROU19GTEFHX1FSKTsKK30KKworc3RhdGljIGludCBjb25zdW1lX2xhYmVscyhBdmFoaURuc1BhY2tldCAqcCwgdW5zaWduZWQgaWR4LCBjaGFyICpyZXRfbmFtZSwgc2l6ZV90IGwpIHsKKyAgICBpbnQgcmV0ID0gMDsKKyAgICBpbnQgY29tcHJlc3NlZCA9IDA7CisgICAgaW50IGZpcnN0X2xhYmVsID0gMTsKKyAgICB1bnNpZ25lZCBsYWJlbF9wdHI7CisgICAgaW50IGk7CisgICAgYXNzZXJ0KHAgJiYgcmV0X25hbWUgJiYgbCk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgQVZBSElfRE5TX0xBQkVMU19NQVg7IGkrKykgeworICAgICAgICB1aW50OF90IG47CisKKyAgICAgICAgaWYgKGlkeCsxID4gcC0+c2l6ZSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKworICAgICAgICBuID0gQVZBSElfRE5TX1BBQ0tFVF9EQVRBKHApW2lkeF07CisKKyAgICAgICAgaWYgKCFuKSB7CisgICAgICAgICAgICBpZHgrKzsKKyAgICAgICAgICAgIGlmICghY29tcHJlc3NlZCkKKyAgICAgICAgICAgICAgICByZXQrKzsKKworICAgICAgICAgICAgaWYgKGwgPCAxKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICpyZXRfbmFtZSA9IDA7CisKKyAgICAgICAgICAgIHJldHVybiByZXQ7CisKKyAgICAgICAgfSBlbHNlIGlmIChuIDw9IDYzKSB7CisgICAgICAgICAgICAvKiBVbmNvbXByZXNzZWQgbGFiZWwgKi8KKyAgICAgICAgICAgIGlkeCsrOworICAgICAgICAgICAgaWYgKCFjb21wcmVzc2VkKQorICAgICAgICAgICAgICAgIHJldCsrOworCisgICAgICAgICAgICBpZiAoaWR4ICsgbiA+IHAtPnNpemUpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAgICAgICBpZiAoKHNpemVfdCkgbiArIDEgPiBsKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKworICAgICAgICAgICAgaWYgKCFmaXJzdF9sYWJlbCkgeworICAgICAgICAgICAgICAgICoocmV0X25hbWUrKykgPSAnLic7CisgICAgICAgICAgICAgICAgbC0tOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgZmlyc3RfbGFiZWwgPSAwOworCisgICAgICAgICAgICBpZiAoIShhdmFoaV9lc2NhcGVfbGFiZWwoKGNoYXIqKSBBVkFISV9ETlNfUEFDS0VUX0RBVEEocCkgKyBpZHgsIG4sICZyZXRfbmFtZSwgJmwpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgICAgIGlkeCArPSBuOworCisgICAgICAgICAgICBpZiAoIWNvbXByZXNzZWQpCisgICAgICAgICAgICAgICAgcmV0ICs9IG47CisgICAgICAgIH0gZWxzZSBpZiAoKG4gJiAweEMwKSA9PSAweEMwKSB7CisgICAgICAgICAgICAvKiBDb21wcmVzc2VkIGxhYmVsICovCisKKyAgICAgICAgICAgIGlmIChpZHgrMiA+IHAtPnNpemUpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAgICAgICBsYWJlbF9wdHIgPSAoKHVuc2lnbmVkKSAoQVZBSElfRE5TX1BBQ0tFVF9EQVRBKHApW2lkeF0gJiB+MHhDMCkpIDw8IDggfCBBVkFISV9ETlNfUEFDS0VUX0RBVEEocClbaWR4KzFdOworCisgICAgICAgICAgICBpZiAoKGxhYmVsX3B0ciA8IEFWQUhJX0ROU19QQUNLRVRfSEVBREVSX1NJWkUpIHx8IChsYWJlbF9wdHIgPj0gaWR4KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgICAgIGlkeCA9IGxhYmVsX3B0cjsKKworICAgICAgICAgICAgaWYgKCFjb21wcmVzc2VkKQorICAgICAgICAgICAgICAgIHJldCArPSAyOworCisgICAgICAgICAgICBjb21wcmVzc2VkID0gMTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCitpbnQgYXZhaGlfZG5zX3BhY2tldF9jb25zdW1lX25hbWUoQXZhaGlEbnNQYWNrZXQgKnAsIGNoYXIgKnJldF9uYW1lLCBzaXplX3QgbCkgeworICAgIGludCByOworCisgICAgaWYgKChyID0gY29uc3VtZV9sYWJlbHMocCwgcC0+cmluZGV4LCByZXRfbmFtZSwgbCkpIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgcC0+cmluZGV4ICs9IHI7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBhdmFoaV9kbnNfcGFja2V0X2NvbnN1bWVfdWludDE2KEF2YWhpRG5zUGFja2V0ICpwLCB1aW50MTZfdCAqcmV0X3YpIHsKKyAgICB1aW50OF90ICpkOworCisgICAgYXNzZXJ0KHApOworICAgIGFzc2VydChyZXRfdik7CisKKyAgICBpZiAocC0+cmluZGV4ICsgc2l6ZW9mKHVpbnQxNl90KSA+IHAtPnNpemUpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGQgPSAodWludDhfdCopIChBVkFISV9ETlNfUEFDS0VUX0RBVEEocCkgKyBwLT5yaW5kZXgpOworICAgICpyZXRfdiA9IChkWzBdIDw8IDgpIHwgZFsxXTsKKyAgICBwLT5yaW5kZXggKz0gc2l6ZW9mKHVpbnQxNl90KTsKKworICAgIHJldHVybiAwOworfQorCitpbnQgYXZhaGlfZG5zX3BhY2tldF9jb25zdW1lX3VpbnQzMihBdmFoaURuc1BhY2tldCAqcCwgdWludDMyX3QgKnJldF92KSB7CisgICAgdWludDhfdCogZDsKKworICAgIGFzc2VydChwKTsKKyAgICBhc3NlcnQocmV0X3YpOworCisgICAgaWYgKHAtPnJpbmRleCArIHNpemVvZih1aW50MzJfdCkgPiBwLT5zaXplKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBkID0gKHVpbnQ4X3QqKSAoQVZBSElfRE5TX1BBQ0tFVF9EQVRBKHApICsgcC0+cmluZGV4KTsKKyAgICAqcmV0X3YgPSAoZFswXSA8PCAyNCkgfCAoZFsxXSA8PCAxNikgfCAoZFsyXSA8PCA4KSB8IGRbM107CisgICAgcC0+cmluZGV4ICs9IHNpemVvZih1aW50MzJfdCk7CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IGF2YWhpX2Ruc19wYWNrZXRfY29uc3VtZV9ieXRlcyhBdmFoaURuc1BhY2tldCAqcCwgdm9pZCAqIHJldF9kYXRhLCBzaXplX3QgbCkgeworICAgIGFzc2VydChwKTsKKyAgICBhc3NlcnQocmV0X2RhdGEpOworICAgIGFzc2VydChsID4gMCk7CisKKyAgICBpZiAocC0+cmluZGV4ICsgbCA+IHAtPnNpemUpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIG1lbWNweShyZXRfZGF0YSwgQVZBSElfRE5TX1BBQ0tFVF9EQVRBKHApICsgcC0+cmluZGV4LCBsKTsKKyAgICBwLT5yaW5kZXggKz0gbDsKKworICAgIHJldHVybiAwOworfQorCitpbnQgYXZhaGlfZG5zX3BhY2tldF9jb25zdW1lX3N0cmluZyhBdmFoaURuc1BhY2tldCAqcCwgY2hhciAqcmV0X3N0cmluZywgc2l6ZV90IGwpIHsKKyAgICBzaXplX3QgazsKKworICAgIGFzc2VydChwKTsKKyAgICBhc3NlcnQocmV0X3N0cmluZyk7CisgICAgYXNzZXJ0KGwgPiAwKTsKKworICAgIGlmIChwLT5yaW5kZXggPj0gcC0+c2l6ZSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgayA9IEFWQUhJX0ROU19QQUNLRVRfREFUQShwKVtwLT5yaW5kZXhdOworCisgICAgaWYgKHAtPnJpbmRleCsxK2sgPiBwLT5zaXplKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAobCA+IGsrMSkKKyAgICAgICAgbCA9IGsrMTsKKworICAgIG1lbWNweShyZXRfc3RyaW5nLCBBVkFISV9ETlNfUEFDS0VUX0RBVEEocCkrcC0+cmluZGV4KzEsIGwtMSk7CisgICAgcmV0X3N0cmluZ1tsLTFdID0gMDsKKworICAgIHAtPnJpbmRleCArPSAxK2s7CisKKyAgICByZXR1cm4gMDsKK30KKworY29uc3Qgdm9pZCogYXZhaGlfZG5zX3BhY2tldF9nZXRfcnB0cihBdmFoaURuc1BhY2tldCAqcCkgeworICAgIGFzc2VydChwKTsKKworICAgIGlmIChwLT5yaW5kZXggPiBwLT5zaXplKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJldHVybiBBVkFISV9ETlNfUEFDS0VUX0RBVEEocCkgKyBwLT5yaW5kZXg7Cit9CisKK2ludCBhdmFoaV9kbnNfcGFja2V0X3NraXAoQXZhaGlEbnNQYWNrZXQgKnAsIHNpemVfdCBsZW5ndGgpIHsKKyAgICBhc3NlcnQocCk7CisKKyAgICBpZiAocC0+cmluZGV4ICsgbGVuZ3RoID4gcC0+c2l6ZSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgcC0+cmluZGV4ICs9IGxlbmd0aDsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYXJzZV9yZGF0YShBdmFoaURuc1BhY2tldCAqcCwgQXZhaGlSZWNvcmQgKnIsIHVpbnQxNl90IHJkbGVuZ3RoKSB7CisgICAgY2hhciBidWZbQVZBSElfRE9NQUlOX05BTUVfTUFYXTsKKyAgICBjb25zdCB2b2lkKiBzdGFydDsKKworICAgIGFzc2VydChwKTsKKyAgICBhc3NlcnQocik7CisKKyAgICBzdGFydCA9IGF2YWhpX2Ruc19wYWNrZXRfZ2V0X3JwdHIocCk7CisKKyAgICBzd2l0Y2ggKHItPmtleS0+dHlwZSkgeworICAgICAgICBjYXNlIEFWQUhJX0ROU19UWVBFX1BUUjoKKyAgICAgICAgY2FzZSBBVkFISV9ETlNfVFlQRV9DTkFNRToKKyAgICAgICAgY2FzZSBBVkFISV9ETlNfVFlQRV9OUzoKKworICAgICAgICAgICAgaWYgKGF2YWhpX2Ruc19wYWNrZXRfY29uc3VtZV9uYW1lKHAsIGJ1Ziwgc2l6ZW9mKGJ1ZikpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgICAgIHItPmRhdGEucHRyLm5hbWUgPSBhdmFoaV9zdHJkdXAoYnVmKTsKKyAgICAgICAgICAgIGJyZWFrOworCisKKyAgICAgICAgY2FzZSBBVkFISV9ETlNfVFlQRV9TUlY6CisKKyAgICAgICAgICAgIGlmIChhdmFoaV9kbnNfcGFja2V0X2NvbnN1bWVfdWludDE2KHAsICZyLT5kYXRhLnNydi5wcmlvcml0eSkgPCAwIHx8CisgICAgICAgICAgICAgICAgYXZhaGlfZG5zX3BhY2tldF9jb25zdW1lX3VpbnQxNihwLCAmci0+ZGF0YS5zcnYud2VpZ2h0KSA8IDAgfHwKKyAgICAgICAgICAgICAgICBhdmFoaV9kbnNfcGFja2V0X2NvbnN1bWVfdWludDE2KHAsICZyLT5kYXRhLnNydi5wb3J0KSA8IDAgfHwKKyAgICAgICAgICAgICAgICBhdmFoaV9kbnNfcGFja2V0X2NvbnN1bWVfbmFtZShwLCBidWYsIHNpemVvZihidWYpKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAgICAgICByLT5kYXRhLnNydi5uYW1lID0gYXZhaGlfc3RyZHVwKGJ1Zik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFWQUhJX0ROU19UWVBFX0hJTkZPOgorCisgICAgICAgICAgICBpZiAoYXZhaGlfZG5zX3BhY2tldF9jb25zdW1lX3N0cmluZyhwLCBidWYsIHNpemVvZihidWYpKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAgICAgICByLT5kYXRhLmhpbmZvLmNwdSA9IGF2YWhpX3N0cmR1cChidWYpOworCisgICAgICAgICAgICBpZiAoYXZhaGlfZG5zX3BhY2tldF9jb25zdW1lX3N0cmluZyhwLCBidWYsIHNpemVvZihidWYpKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAgICAgICByLT5kYXRhLmhpbmZvLm9zID0gYXZhaGlfc3RyZHVwKGJ1Zik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFWQUhJX0ROU19UWVBFX1RYVDoKKworICAgICAgICAgICAgaWYgKHJkbGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAgIGlmIChhdmFoaV9zdHJpbmdfbGlzdF9wYXJzZShhdmFoaV9kbnNfcGFja2V0X2dldF9ycHRyKHApLCByZGxlbmd0aCwgJnItPmRhdGEudHh0LnN0cmluZ19saXN0KSA8IDApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKworICAgICAgICAgICAgICAgIGlmIChhdmFoaV9kbnNfcGFja2V0X3NraXAocCwgcmRsZW5ndGgpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgci0+ZGF0YS50eHQuc3RyaW5nX2xpc3QgPSBOVUxMOworCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFWQUhJX0ROU19UWVBFX0E6CisKKy8qICAgICAgICAgICAgIGF2YWhpX2xvZ19kZWJ1ZygiQSIpOyAqLworCisgICAgICAgICAgICBpZiAoYXZhaGlfZG5zX3BhY2tldF9jb25zdW1lX2J5dGVzKHAsICZyLT5kYXRhLmEuYWRkcmVzcywgc2l6ZW9mKEF2YWhpSVB2NEFkZHJlc3MpKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFWQUhJX0ROU19UWVBFX0FBQUE6CisKKy8qICAgICAgICAgICAgIGF2YWhpX2xvZ19kZWJ1ZygiYWFhYSIpOyAqLworCisgICAgICAgICAgICBpZiAoYXZhaGlfZG5zX3BhY2tldF9jb25zdW1lX2J5dGVzKHAsICZyLT5kYXRhLmFhYWEuYWRkcmVzcywgc2l6ZW9mKEF2YWhpSVB2NkFkZHJlc3MpKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorCisvKiAgICAgICAgICAgICBhdmFoaV9sb2dfZGVidWcoImdlbmVyaWMiKTsgKi8KKworICAgICAgICAgICAgaWYgKHJkbGVuZ3RoID4gMCkgeworCisgICAgICAgICAgICAgICAgci0+ZGF0YS5nZW5lcmljLmRhdGEgPSBhdmFoaV9tZW1kdXAoYXZhaGlfZG5zX3BhY2tldF9nZXRfcnB0cihwKSwgcmRsZW5ndGgpOworICAgICAgICAgICAgICAgIHItPmRhdGEuZ2VuZXJpYy5zaXplID0gcmRsZW5ndGg7CisKKyAgICAgICAgICAgICAgICBpZiAoYXZhaGlfZG5zX3BhY2tldF9za2lwKHAsIHJkbGVuZ3RoKSA8IDApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLyogQ2hlY2sgaWYgd2UgcmVhZCBlbm91Z2ggZGF0YSAqLworICAgIGlmICgoY29uc3QgdWludDhfdCopIGF2YWhpX2Ruc19wYWNrZXRfZ2V0X3JwdHIocCkgLSAoY29uc3QgdWludDhfdCopIHN0YXJ0ICE9IHJkbGVuZ3RoKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICByZXR1cm4gMDsKK30KKworQXZhaGlSZWNvcmQqIGF2YWhpX2Ruc19wYWNrZXRfY29uc3VtZV9yZWNvcmQoQXZhaGlEbnNQYWNrZXQgKnAsIGludCAqcmV0X2NhY2hlX2ZsdXNoKSB7CisgICAgY2hhciBuYW1lW0FWQUhJX0RPTUFJTl9OQU1FX01BWF07CisgICAgdWludDE2X3QgdHlwZSwgY2xhc3M7CisgICAgdWludDMyX3QgdHRsOworICAgIHVpbnQxNl90IHJkbGVuZ3RoOworICAgIEF2YWhpUmVjb3JkICpyID0gTlVMTDsKKworICAgIGFzc2VydChwKTsKKworICAgIGlmIChhdmFoaV9kbnNfcGFja2V0X2NvbnN1bWVfbmFtZShwLCBuYW1lLCBzaXplb2YobmFtZSkpIDwgMCB8fAorICAgICAgICBhdmFoaV9kbnNfcGFja2V0X2NvbnN1bWVfdWludDE2KHAsICZ0eXBlKSA8IDAgfHwKKyAgICAgICAgYXZhaGlfZG5zX3BhY2tldF9jb25zdW1lX3VpbnQxNihwLCAmY2xhc3MpIDwgMCB8fAorICAgICAgICBhdmFoaV9kbnNfcGFja2V0X2NvbnN1bWVfdWludDMyKHAsICZ0dGwpIDwgMCB8fAorICAgICAgICBhdmFoaV9kbnNfcGFja2V0X2NvbnN1bWVfdWludDE2KHAsICZyZGxlbmd0aCkgPCAwIHx8CisgICAgICAgIHAtPnJpbmRleCArIHJkbGVuZ3RoID4gcC0+c2l6ZSkKKyAgICAgICAgZ290byBmYWlsOworCisgICAgaWYgKHJldF9jYWNoZV9mbHVzaCkKKyAgICAgICAgKnJldF9jYWNoZV9mbHVzaCA9ICEhKGNsYXNzICYgQVZBSElfRE5TX0NBQ0hFX0ZMVVNIKTsKKyAgICBjbGFzcyAmPSB+QVZBSElfRE5TX0NBQ0hFX0ZMVVNIOworCisgICAgaWYgKCEociA9IGF2YWhpX3JlY29yZF9uZXdfZnVsbChuYW1lLCBjbGFzcywgdHlwZSwgdHRsKSkpCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIGlmIChwYXJzZV9yZGF0YShwLCByLCByZGxlbmd0aCkgPCAwKQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICBpZiAoIWF2YWhpX3JlY29yZF9pc192YWxpZChyKSkKKyAgICAgICAgZ290byBmYWlsOworCisgICAgcmV0dXJuIHI7CisKK2ZhaWw6CisgICAgaWYgKHIpCisgICAgICAgIGF2YWhpX3JlY29yZF91bnJlZihyKTsKKworICAgIHJldHVybiBOVUxMOworfQorCitBdmFoaUtleSogYXZhaGlfZG5zX3BhY2tldF9jb25zdW1lX2tleShBdmFoaURuc1BhY2tldCAqcCwgaW50ICpyZXRfdW5pY2FzdF9yZXNwb25zZSkgeworICAgIGNoYXIgbmFtZVsyNTZdOworICAgIHVpbnQxNl90IHR5cGUsIGNsYXNzOworICAgIEF2YWhpS2V5ICprOworCisgICAgYXNzZXJ0KHApOworCisgICAgaWYgKGF2YWhpX2Ruc19wYWNrZXRfY29uc3VtZV9uYW1lKHAsIG5hbWUsIHNpemVvZihuYW1lKSkgPCAwIHx8CisgICAgICAgIGF2YWhpX2Ruc19wYWNrZXRfY29uc3VtZV91aW50MTYocCwgJnR5cGUpIDwgMCB8fAorICAgICAgICBhdmFoaV9kbnNfcGFja2V0X2NvbnN1bWVfdWludDE2KHAsICZjbGFzcykgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChyZXRfdW5pY2FzdF9yZXNwb25zZSkKKyAgICAgICAgKnJldF91bmljYXN0X3Jlc3BvbnNlID0gISEoY2xhc3MgJiBBVkFISV9ETlNfVU5JQ0FTVF9SRVNQT05TRSk7CisKKyAgICBjbGFzcyAmPSB+QVZBSElfRE5TX1VOSUNBU1RfUkVTUE9OU0U7CisKKyAgICBpZiAoIShrID0gYXZhaGlfa2V5X25ldyhuYW1lLCBjbGFzcywgdHlwZSkpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmICghYXZhaGlfa2V5X2lzX3ZhbGlkKGspKSB7CisgICAgICAgIGF2YWhpX2tleV91bnJlZihrKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIGs7Cit9CisKK3VpbnQ4X3QqIGF2YWhpX2Ruc19wYWNrZXRfYXBwZW5kX2tleShBdmFoaURuc1BhY2tldCAqcCwgQXZhaGlLZXkgKmssIGludCB1bmljYXN0X3Jlc3BvbnNlKSB7CisgICAgdWludDhfdCAqdDsKKyAgICBzaXplX3Qgc2l6ZTsKKworICAgIGFzc2VydChwKTsKKyAgICBhc3NlcnQoayk7CisKKyAgICBzaXplID0gcC0+c2l6ZTsKKworICAgIGlmICghKHQgPSBhdmFoaV9kbnNfcGFja2V0X2FwcGVuZF9uYW1lKHAsIGstPm5hbWUpKSB8fAorICAgICAgICAhYXZhaGlfZG5zX3BhY2tldF9hcHBlbmRfdWludDE2KHAsIGstPnR5cGUpIHx8CisgICAgICAgICFhdmFoaV9kbnNfcGFja2V0X2FwcGVuZF91aW50MTYocCwgay0+Y2xhenogfCAodW5pY2FzdF9yZXNwb25zZSA/IEFWQUhJX0ROU19VTklDQVNUX1JFU1BPTlNFIDogMCkpKSB7CisgICAgICAgIHAtPnNpemUgPSBzaXplOworICAgICAgICBhdmFoaV9kbnNfcGFja2V0X2NsZWFudXBfbmFtZV90YWJsZShwKTsKKworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gdDsKK30KKworc3RhdGljIGludCBhcHBlbmRfcmRhdGEoQXZhaGlEbnNQYWNrZXQgKnAsIEF2YWhpUmVjb3JkICpyKSB7CisgICAgYXNzZXJ0KHApOworICAgIGFzc2VydChyKTsKKworICAgIHN3aXRjaCAoci0+a2V5LT50eXBlKSB7CisKKyAgICAgICAgY2FzZSBBVkFISV9ETlNfVFlQRV9QVFI6CisgICAgICAgIGNhc2UgQVZBSElfRE5TX1RZUEVfQ05BTUU6CisgICAgICAgIGNhc2UgQVZBSElfRE5TX1RZUEVfTlM6CisKKyAgICAgICAgICAgIGlmICghKGF2YWhpX2Ruc19wYWNrZXRfYXBwZW5kX25hbWUocCwgci0+ZGF0YS5wdHIubmFtZSkpKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBVkFISV9ETlNfVFlQRV9TUlY6CisKKyAgICAgICAgICAgIGlmICghYXZhaGlfZG5zX3BhY2tldF9hcHBlbmRfdWludDE2KHAsIHItPmRhdGEuc3J2LnByaW9yaXR5KSB8fAorICAgICAgICAgICAgICAgICFhdmFoaV9kbnNfcGFja2V0X2FwcGVuZF91aW50MTYocCwgci0+ZGF0YS5zcnYud2VpZ2h0KSB8fAorICAgICAgICAgICAgICAgICFhdmFoaV9kbnNfcGFja2V0X2FwcGVuZF91aW50MTYocCwgci0+ZGF0YS5zcnYucG9ydCkgfHwKKyAgICAgICAgICAgICAgICAhYXZhaGlfZG5zX3BhY2tldF9hcHBlbmRfbmFtZShwLCByLT5kYXRhLnNydi5uYW1lKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQVZBSElfRE5TX1RZUEVfSElORk86CisgICAgICAgICAgICBpZiAoIWF2YWhpX2Ruc19wYWNrZXRfYXBwZW5kX3N0cmluZyhwLCByLT5kYXRhLmhpbmZvLmNwdSkgfHwKKyAgICAgICAgICAgICAgICAhYXZhaGlfZG5zX3BhY2tldF9hcHBlbmRfc3RyaW5nKHAsIHItPmRhdGEuaGluZm8ub3MpKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBVkFISV9ETlNfVFlQRV9UWFQ6IHsKKworICAgICAgICAgICAgdWludDhfdCAqZGF0YTsKKyAgICAgICAgICAgIHNpemVfdCBuOworCisgICAgICAgICAgICBuID0gYXZhaGlfc3RyaW5nX2xpc3Rfc2VyaWFsaXplKHItPmRhdGEudHh0LnN0cmluZ19saXN0LCBOVUxMLCAwKTsKKworICAgICAgICAgICAgaWYgKCEoZGF0YSA9IGF2YWhpX2Ruc19wYWNrZXRfZXh0ZW5kKHAsIG4pKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgICAgIGF2YWhpX3N0cmluZ19saXN0X3NlcmlhbGl6ZShyLT5kYXRhLnR4dC5zdHJpbmdfbGlzdCwgZGF0YSwgbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisKKyAgICAgICAgY2FzZSBBVkFISV9ETlNfVFlQRV9BOgorCisgICAgICAgICAgICBpZiAoIWF2YWhpX2Ruc19wYWNrZXRfYXBwZW5kX2J5dGVzKHAsICZyLT5kYXRhLmEuYWRkcmVzcywgc2l6ZW9mKHItPmRhdGEuYS5hZGRyZXNzKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFWQUhJX0ROU19UWVBFX0FBQUE6CisKKyAgICAgICAgICAgIGlmICghYXZhaGlfZG5zX3BhY2tldF9hcHBlbmRfYnl0ZXMocCwgJnItPmRhdGEuYWFhYS5hZGRyZXNzLCBzaXplb2Yoci0+ZGF0YS5hYWFhLmFkZHJlc3MpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisKKyAgICAgICAgICAgIGlmIChyLT5kYXRhLmdlbmVyaWMuc2l6ZSkKKyAgICAgICAgICAgICAgICBpZiAoIWF2YWhpX2Ruc19wYWNrZXRfYXBwZW5kX2J5dGVzKHAsIHItPmRhdGEuZ2VuZXJpYy5kYXRhLCByLT5kYXRhLmdlbmVyaWMuc2l6ZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKKwordWludDhfdCogYXZhaGlfZG5zX3BhY2tldF9hcHBlbmRfcmVjb3JkKEF2YWhpRG5zUGFja2V0ICpwLCBBdmFoaVJlY29yZCAqciwgaW50IGNhY2hlX2ZsdXNoLCB1bnNpZ25lZCBtYXhfdHRsKSB7CisgICAgdWludDhfdCAqdCwgKmwsICpzdGFydDsKKyAgICBzaXplX3Qgc2l6ZTsKKworICAgIGFzc2VydChwKTsKKyAgICBhc3NlcnQocik7CisKKyAgICBzaXplID0gcC0+c2l6ZTsKKworICAgIGlmICghKHQgPSBhdmFoaV9kbnNfcGFja2V0X2FwcGVuZF9uYW1lKHAsIHItPmtleS0+bmFtZSkpIHx8CisgICAgICAgICFhdmFoaV9kbnNfcGFja2V0X2FwcGVuZF91aW50MTYocCwgci0+a2V5LT50eXBlKSB8fAorICAgICAgICAhYXZhaGlfZG5zX3BhY2tldF9hcHBlbmRfdWludDE2KHAsIGNhY2hlX2ZsdXNoID8gKHItPmtleS0+Y2xhenogfCBBVkFISV9ETlNfQ0FDSEVfRkxVU0gpIDogKHItPmtleS0+Y2xhenogJn4gQVZBSElfRE5TX0NBQ0hFX0ZMVVNIKSkgfHwKKyAgICAgICAgIWF2YWhpX2Ruc19wYWNrZXRfYXBwZW5kX3VpbnQzMihwLCAobWF4X3R0bCAmJiByLT50dGwgPiBtYXhfdHRsKSA/IG1heF90dGwgOiByLT50dGwpIHx8CisgICAgICAgICEobCA9IGF2YWhpX2Ruc19wYWNrZXRfYXBwZW5kX3VpbnQxNihwLCAwKSkpCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIHN0YXJ0ID0gYXZhaGlfZG5zX3BhY2tldF9leHRlbmQocCwgMCk7CisKKyAgICBpZiAoYXBwZW5kX3JkYXRhKHAsIHIpIDwgMCkKKyAgICAgICAgZ290byBmYWlsOworCisgICAgc2l6ZSA9IGF2YWhpX2Ruc19wYWNrZXRfZXh0ZW5kKHAsIDApIC0gc3RhcnQ7CisgICAgYXNzZXJ0KHNpemUgPD0gQVZBSElfRE5TX1JEQVRBX01BWCk7CisKKy8qICAgICBhdmFoaV9sb2dfZGVidWcoImFwcGVuZGVkICV1Iiwgc2l6ZSk7ICovCisKKyAgICBsWzBdID0gKHVpbnQ4X3QpICgodWludDE2X3QpIHNpemUgPj4gOCk7CisgICAgbFsxXSA9ICh1aW50OF90KSAoKHVpbnQxNl90KSBzaXplKTsKKworICAgIHJldHVybiB0OworCisKK2ZhaWw6CisgICAgcC0+c2l6ZSA9IHNpemU7CisgICAgYXZhaGlfZG5zX3BhY2tldF9jbGVhbnVwX25hbWVfdGFibGUocCk7CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworaW50IGF2YWhpX2Ruc19wYWNrZXRfaXNfZW1wdHkoQXZhaGlEbnNQYWNrZXQgKnApIHsKKyAgICBhc3NlcnQocCk7CisKKyAgICByZXR1cm4gcC0+c2l6ZSA8PSBBVkFISV9ETlNfUEFDS0VUX0hFQURFUl9TSVpFOworfQorCitzaXplX3QgYXZhaGlfZG5zX3BhY2tldF9zcGFjZShBdmFoaURuc1BhY2tldCAqcCkgeworICAgIGFzc2VydChwKTsKKworICAgIGFzc2VydChwLT5zaXplIDw9IHAtPm1heF9zaXplKTsKKworICAgIHJldHVybiBwLT5tYXhfc2l6ZSAtIHAtPnNpemU7Cit9CisKK2ludCBhdmFoaV9yZGF0YV9wYXJzZShBdmFoaVJlY29yZCAqcmVjb3JkLCBjb25zdCB2b2lkKiByZGF0YSwgc2l6ZV90IHNpemUpIHsKKyAgICBpbnQgcmV0OworICAgIEF2YWhpRG5zUGFja2V0IHA7CisKKyAgICBhc3NlcnQocmVjb3JkKTsKKyAgICBhc3NlcnQocmRhdGEpOworCisgICAgcC5kYXRhID0gKHZvaWQqKSByZGF0YTsKKyAgICBwLm1heF9zaXplID0gcC5zaXplID0gc2l6ZTsKKyAgICBwLnJpbmRleCA9IDA7CisgICAgcC5uYW1lX3RhYmxlID0gTlVMTDsKKworICAgIHJldCA9IHBhcnNlX3JkYXRhKCZwLCByZWNvcmQsIHNpemUpOworCisgICAgYXNzZXJ0KCFwLm5hbWVfdGFibGUpOworCisgICAgcmV0dXJuIHJldDsKK30KKworc2l6ZV90IGF2YWhpX3JkYXRhX3NlcmlhbGl6ZShBdmFoaVJlY29yZCAqcmVjb3JkLCB2b2lkICpyZGF0YSwgc2l6ZV90IG1heF9zaXplKSB7CisgICAgaW50IHJldDsKKyAgICBBdmFoaURuc1BhY2tldCBwOworCisgICAgYXNzZXJ0KHJlY29yZCk7CisgICAgYXNzZXJ0KHJkYXRhKTsKKyAgICBhc3NlcnQobWF4X3NpemUgPiAwKTsKKworICAgIHAuZGF0YSA9ICh2b2lkKikgcmRhdGE7CisgICAgcC5tYXhfc2l6ZSA9IG1heF9zaXplOworICAgIHAuc2l6ZSA9IHAucmluZGV4ID0gMDsKKyAgICBwLm5hbWVfdGFibGUgPSBOVUxMOworCisgICAgcmV0ID0gYXBwZW5kX3JkYXRhKCZwLCByZWNvcmQpOworCisgICAgaWYgKHAubmFtZV90YWJsZSkKKyAgICAgICAgIGF2YWhpX2hhc2htYXBfZnJlZShwLm5hbWVfdGFibGUpOworCisgICAgaWYgKHJldCA8IDApCisgICAgICAgIHJldHVybiAoc2l6ZV90KSAtMTsKKworICAgIHJldHVybiBwLnNpemU7Cit9CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9kbnMuaCBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL2Rucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyZThkODgKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9kbnMuaApAQCAtMCwwICsxLDExMSBAQAorI2lmbmRlZiBmb29kbnNoZm9vCisjZGVmaW5lIGZvb2Ruc2hmb28KKworLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisjaW5jbHVkZSAicnIuaCIKKyNpbmNsdWRlICJoYXNobWFwLmgiCisKKyNkZWZpbmUgQVZBSElfRE5TX1BBQ0tFVF9IRUFERVJfU0laRSAxMgorI2RlZmluZSBBVkFISV9ETlNfUEFDS0VUX0VYVFJBX1NJWkUgNDgKKyNkZWZpbmUgQVZBSElfRE5TX0xBQkVMU19NQVggMTI3CisjZGVmaW5lIEFWQUhJX0ROU19SREFUQV9NQVggMHhGRkZGCisjZGVmaW5lIEFWQUhJX0ROU19QQUNLRVRfU0laRV9NQVggKEFWQUhJX0ROU19QQUNLRVRfSEVBREVSX1NJWkUgKyAyNTYgKyAyICsgMiArIDQgKyAyICsgQVZBSElfRE5TX1JEQVRBX01BWCkKKwordHlwZWRlZiBzdHJ1Y3QgQXZhaGlEbnNQYWNrZXQgeworICAgIHNpemVfdCBzaXplLCByaW5kZXgsIG1heF9zaXplOworICAgIEF2YWhpSGFzaG1hcCAqbmFtZV90YWJsZTsgLyogZm9yIG5hbWUgY29tcHJlc3Npb24gKi8KKyAgICB1aW50OF90ICpkYXRhOworfSBBdmFoaURuc1BhY2tldDsKKworI2RlZmluZSBBVkFISV9ETlNfUEFDS0VUX0RBVEEocCkgKChwKS0+ZGF0YSA/IChwKS0+ZGF0YSA6ICgodWludDhfdCopIHApICsgc2l6ZW9mKEF2YWhpRG5zUGFja2V0KSkKKworQXZhaGlEbnNQYWNrZXQqIGF2YWhpX2Ruc19wYWNrZXRfbmV3KHVuc2lnbmVkIG10dSk7CitBdmFoaURuc1BhY2tldCogYXZhaGlfZG5zX3BhY2tldF9uZXdfcXVlcnkodW5zaWduZWQgbXR1KTsKK0F2YWhpRG5zUGFja2V0KiBhdmFoaV9kbnNfcGFja2V0X25ld19yZXNwb25zZSh1bnNpZ25lZCBtdHUsIGludCBhYSk7CisKK0F2YWhpRG5zUGFja2V0KiBhdmFoaV9kbnNfcGFja2V0X25ld19yZXBseShBdmFoaURuc1BhY2tldCogcCwgdW5zaWduZWQgbXR1LCBpbnQgY29weV9xdWVyaWVzLCBpbnQgYWEpOworCit2b2lkIGF2YWhpX2Ruc19wYWNrZXRfZnJlZShBdmFoaURuc1BhY2tldCAqcCk7Cit2b2lkIGF2YWhpX2Ruc19wYWNrZXRfc2V0X2ZpZWxkKEF2YWhpRG5zUGFja2V0ICpwLCB1bnNpZ25lZCBpZHgsIHVpbnQxNl90IHYpOwordWludDE2X3QgYXZhaGlfZG5zX3BhY2tldF9nZXRfZmllbGQoQXZhaGlEbnNQYWNrZXQgKnAsIHVuc2lnbmVkIGlkeCk7Cit2b2lkIGF2YWhpX2Ruc19wYWNrZXRfaW5jX2ZpZWxkKEF2YWhpRG5zUGFja2V0ICpwLCB1bnNpZ25lZCBpZHgpOworCit1aW50OF90ICphdmFoaV9kbnNfcGFja2V0X2V4dGVuZChBdmFoaURuc1BhY2tldCAqcCwgc2l6ZV90IGwpOworCit2b2lkIGF2YWhpX2Ruc19wYWNrZXRfY2xlYW51cF9uYW1lX3RhYmxlKEF2YWhpRG5zUGFja2V0ICpwKTsKKwordWludDhfdCAqYXZhaGlfZG5zX3BhY2tldF9hcHBlbmRfdWludDE2KEF2YWhpRG5zUGFja2V0ICpwLCB1aW50MTZfdCB2KTsKK3VpbnQ4X3QgKmF2YWhpX2Ruc19wYWNrZXRfYXBwZW5kX3VpbnQzMihBdmFoaURuc1BhY2tldCAqcCwgdWludDMyX3Qgdik7Cit1aW50OF90ICphdmFoaV9kbnNfcGFja2V0X2FwcGVuZF9uYW1lKEF2YWhpRG5zUGFja2V0ICpwLCBjb25zdCBjaGFyICpuYW1lKTsKK3VpbnQ4X3QgKmF2YWhpX2Ruc19wYWNrZXRfYXBwZW5kX2J5dGVzKEF2YWhpRG5zUGFja2V0ICAqcCwgY29uc3Qgdm9pZCAqZCwgc2l6ZV90IGwpOwordWludDhfdCogYXZhaGlfZG5zX3BhY2tldF9hcHBlbmRfa2V5KEF2YWhpRG5zUGFja2V0ICpwLCBBdmFoaUtleSAqaywgaW50IHVuaWNhc3RfcmVzcG9uc2UpOwordWludDhfdCogYXZhaGlfZG5zX3BhY2tldF9hcHBlbmRfcmVjb3JkKEF2YWhpRG5zUGFja2V0ICpwLCBBdmFoaVJlY29yZCAqciwgaW50IGNhY2hlX2ZsdXNoLCB1bnNpZ25lZCBtYXhfdHRsKTsKK3VpbnQ4X3QqIGF2YWhpX2Ruc19wYWNrZXRfYXBwZW5kX3N0cmluZyhBdmFoaURuc1BhY2tldCAqcCwgY29uc3QgY2hhciAqcyk7CisKK2ludCBhdmFoaV9kbnNfcGFja2V0X2lzX3F1ZXJ5KEF2YWhpRG5zUGFja2V0ICpwKTsKK2ludCBhdmFoaV9kbnNfcGFja2V0X2NoZWNrX3ZhbGlkKEF2YWhpRG5zUGFja2V0ICpwKTsKK2ludCBhdmFoaV9kbnNfcGFja2V0X2NoZWNrX3ZhbGlkX211bHRpY2FzdChBdmFoaURuc1BhY2tldCAqcCk7CisKK2ludCBhdmFoaV9kbnNfcGFja2V0X2NvbnN1bWVfdWludDE2KEF2YWhpRG5zUGFja2V0ICpwLCB1aW50MTZfdCAqcmV0X3YpOworaW50IGF2YWhpX2Ruc19wYWNrZXRfY29uc3VtZV91aW50MzIoQXZhaGlEbnNQYWNrZXQgKnAsIHVpbnQzMl90ICpyZXRfdik7CitpbnQgYXZhaGlfZG5zX3BhY2tldF9jb25zdW1lX25hbWUoQXZhaGlEbnNQYWNrZXQgKnAsIGNoYXIgKnJldF9uYW1lLCBzaXplX3QgbCk7CitpbnQgYXZhaGlfZG5zX3BhY2tldF9jb25zdW1lX2J5dGVzKEF2YWhpRG5zUGFja2V0ICpwLCB2b2lkKiByZXRfZGF0YSwgc2l6ZV90IGwpOworQXZhaGlLZXkqIGF2YWhpX2Ruc19wYWNrZXRfY29uc3VtZV9rZXkoQXZhaGlEbnNQYWNrZXQgKnAsIGludCAqcmV0X3VuaWNhc3RfcmVzcG9uc2UpOworQXZhaGlSZWNvcmQqIGF2YWhpX2Ruc19wYWNrZXRfY29uc3VtZV9yZWNvcmQoQXZhaGlEbnNQYWNrZXQgKnAsIGludCAqcmV0X2NhY2hlX2ZsdXNoKTsKK2ludCBhdmFoaV9kbnNfcGFja2V0X2NvbnN1bWVfc3RyaW5nKEF2YWhpRG5zUGFja2V0ICpwLCBjaGFyICpyZXRfc3RyaW5nLCBzaXplX3QgbCk7CisKK2NvbnN0IHZvaWQqIGF2YWhpX2Ruc19wYWNrZXRfZ2V0X3JwdHIoQXZhaGlEbnNQYWNrZXQgKnApOworCitpbnQgYXZhaGlfZG5zX3BhY2tldF9za2lwKEF2YWhpRG5zUGFja2V0ICpwLCBzaXplX3QgbGVuZ3RoKTsKKworaW50IGF2YWhpX2Ruc19wYWNrZXRfaXNfZW1wdHkoQXZhaGlEbnNQYWNrZXQgKnApOworc2l6ZV90IGF2YWhpX2Ruc19wYWNrZXRfc3BhY2UoQXZhaGlEbnNQYWNrZXQgKnApOworCisjZGVmaW5lIEFWQUhJX0ROU19GSUVMRF9JRCAwCisjZGVmaW5lIEFWQUhJX0ROU19GSUVMRF9GTEFHUyAxCisjZGVmaW5lIEFWQUhJX0ROU19GSUVMRF9RRENPVU5UIDIKKyNkZWZpbmUgQVZBSElfRE5TX0ZJRUxEX0FOQ09VTlQgMworI2RlZmluZSBBVkFISV9ETlNfRklFTERfTlNDT1VOVCA0CisjZGVmaW5lIEFWQUhJX0ROU19GSUVMRF9BUkNPVU5UIDUKKworI2RlZmluZSBBVkFISV9ETlNfRkxBR19RUiAoMSA8PCAxNSkKKyNkZWZpbmUgQVZBSElfRE5TX0ZMQUdfT1BDT0RFICgxNSA8PCAxMSkKKyNkZWZpbmUgQVZBSElfRE5TX0ZMQUdfUkNPREUgKDE1KQorI2RlZmluZSBBVkFISV9ETlNfRkxBR19UQyAoMSA8PCA5KQorI2RlZmluZSBBVkFISV9ETlNfRkxBR19BQSAoMSA8PCAxMCkKKworI2RlZmluZSBBVkFISV9ETlNfRkxBR1MocXIsIG9wY29kZSwgYWEsIHRjLCByZCwgcmEsIHosIGFkLCBjZCwgcmNvZGUpIFwKKyAgICAgICAgKCgodWludDE2X3QpICEhcXIgPDwgMTUpIHwgIFwKKyAgICAgICAgICgodWludDE2X3QpIChvcGNvZGUgJiAxNSkgPDwgMTEpIHwgXAorICAgICAgICAgKCh1aW50MTZfdCkgISFhYSA8PCAxMCkgfCBcCisgICAgICAgICAoKHVpbnQxNl90KSAhIXRjIDw8IDkpIHwgXAorICAgICAgICAgKCh1aW50MTZfdCkgISFyZCA8PCA4KSB8IFwKKyAgICAgICAgICgodWludDE2X3QpICEhcmEgPDwgNykgfCBcCisgICAgICAgICAoKHVpbnQxNl90KSAhIWFkIDw8IDUpIHwgXAorICAgICAgICAgKCh1aW50MTZfdCkgISFjZCA8PCA0KSB8IFwKKyAgICAgICAgICgodWludDE2X3QpIChyY29kZSAmIDE1KSkpCisKKyNkZWZpbmUgQVZBSElfTUROU19TVUZGSVhfTE9DQUwgImxvY2FsIgorI2RlZmluZSBBVkFISV9NRE5TX1NVRkZJWF9BRERSX0lQVjQgIjI1NC4xNjkuaW4tYWRkci5hcnBhIgorI2RlZmluZSBBVkFISV9NRE5TX1NVRkZJWF9BRERSX0lQVjYgIjAuOC5lLmYuaXA2LmFycGEiCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9kb21haW4tdXRpbC5jIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvZG9tYWluLXV0aWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWVkMjdmCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvZG9tYWluLXV0aWwuYwpAQCAtMCwwICsxLDE4OCBAQAorLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN5cy91dHNuYW1lLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9tYWxsb2MuaD4KKworI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgImRvbWFpbi11dGlsLmgiCisjaW5jbHVkZSAidXRpbC5oIgorCitzdGF0aWMgdm9pZCBzdHJpcF9iYWRfY2hhcnMoY2hhciAqcykgeworICAgIGNoYXIgKnAsICpkOworCisgICAgc1tzdHJjc3BuKHMsICIuIildID0gMDsKKworICAgIGZvciAocCA9IHMsIGQgPSBzOyAqcDsgcCsrKQorICAgICAgICBpZiAoKCpwID49ICdhJyAmJiAqcCA8PSAneicpIHx8CisgICAgICAgICAgICAoKnAgPj0gJ0EnICYmICpwIDw9ICdaJykgfHwKKyAgICAgICAgICAgICgqcCA+PSAnMCcgJiYgKnAgPD0gJzknKSB8fAorICAgICAgICAgICAgKnAgPT0gJy0nKQorICAgICAgICAgICAgKihkKyspID0gKnA7CisKKyAgICAqZCA9IDA7Cit9CisKKyNpZmRlZiBfX2xpbnV4X18KK3N0YXRpYyBpbnQgbG9hZF9sc2JfZGlzdHJpYl9pZChjaGFyICpyZXRfcywgc2l6ZV90IHNpemUpIHsKKyAgICBGSUxFICpmOworCisgICAgYXNzZXJ0KHJldF9zKTsKKyAgICBhc3NlcnQoc2l6ZSA+IDApOworCisgICAgaWYgKCEoZiA9IGZvcGVuKCIvZXRjL2xzYi1yZWxlYXNlIiwgInIiKSkpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHdoaWxlICghZmVvZihmKSkgeworICAgICAgICBjaGFyIGxuWzI1Nl0sICpwOworCisgICAgICAgIGlmICghZmdldHMobG4sIHNpemVvZihsbiksIGYpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKHN0cm5jbXAobG4sICJESVNUUklCX0lEPSIsIDExKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHAgPSBsbiArIDExOworICAgICAgICBwICs9IHN0cnNwbihwLCAiXCIiKTsKKyAgICAgICAgcFtzdHJjc3BuKHAsICJcIiIpXSA9IDA7CisKKyAgICAgICAgc25wcmludGYocmV0X3MsIHNpemUsICIlcyIsIHApOworCisgICAgICAgIGZjbG9zZShmKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgZmNsb3NlKGYpOworICAgIHJldHVybiAtMTsKK30KKyNlbmRpZgorCitjaGFyICphdmFoaV9nZXRfaG9zdF9uYW1lKGNoYXIgKnJldF9zLCBzaXplX3Qgc2l6ZSkgeworICAgIGFzc2VydChyZXRfcyk7CisgICAgYXNzZXJ0KHNpemUgPiAwKTsKKworICAgIGlmIChnZXRob3N0bmFtZShyZXRfcywgc2l6ZSkgPj0gMCkgeworICAgICAgICByZXRfc1tzaXplLTFdID0gMDsKKyAgICAgICAgc3RyaXBfYmFkX2NoYXJzKHJldF9zKTsKKyAgICB9IGVsc2UKKyAgICAgICAgKnJldF9zID0gMDsKKworICAgIGlmIChzdHJjbXAocmV0X3MsICJsb2NhbGhvc3QiKSA9PSAwIHx8IHN0cm5jbXAocmV0X3MsICJsb2NhbGhvc3QuIiwgMTApID09IDApIHsKKyAgICAgICAgKnJldF9zID0gMDsKKyAgICAgICAgYXZhaGlfbG9nX3dhcm4oIlN5c3RlbSBob3N0IG5hbWUgaXMgc2V0IHRvICdsb2NhbGhvc3QnLiBUaGlzIGlzIG5vdCBhIHN1aXRhYmxlIG1ETlMgaG9zdCBuYW1lLCBsb29raW5nIGZvciBhbHRlcm5hdGl2ZXMuIik7CisgICAgfQorCisgICAgaWYgKCpyZXRfcyA9PSAwKSB7CisgICAgICAgIC8qIE5vIGhvc3RuYW1lIHdhcyBzZXQsIHNvIGxldCdzIHRha2UgdGhlIE9TIG5hbWUgKi8KKworI2lmZGVmIF9fbGludXhfXworCisgICAgICAgIC8qIFRyeSBMU0IgZGlzdHJpYnV0aW9uIG5hbWUgZmlyc3QgKi8KKyAgICAgICAgaWYgKGxvYWRfbHNiX2Rpc3RyaWJfaWQocmV0X3MsIHNpemUpID49IDApIHsKKyAgICAgICAgICAgIHN0cmlwX2JhZF9jaGFycyhyZXRfcyk7CisgICAgICAgICAgICBhdmFoaV9zdHJkb3duKHJldF9zKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgqcmV0X3MgPT0gMCkKKyNlbmRpZgorCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFRyeSB1bmFtZSgpIHNlY29uZCAqLworICAgICAgICAgICAgc3RydWN0IHV0c25hbWUgdXRzbmFtZTsKKworICAgICAgICAgICAgaWYgKHVuYW1lKCZ1dHNuYW1lKSA+PSAwKSB7CisgICAgICAgICAgICAgICAgc25wcmludGYocmV0X3MsIHNpemUsICIlcyIsIHV0c25hbWUuc3lzbmFtZSk7CisgICAgICAgICAgICAgICAgc3RyaXBfYmFkX2NoYXJzKHJldF9zKTsKKyAgICAgICAgICAgICAgICBhdmFoaV9zdHJkb3duKHJldF9zKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogR2l2ZSB1cCAqLworICAgICAgICAgICAgaWYgKCpyZXRfcyA9PSAwKQorICAgICAgICAgICAgICAgIHNucHJpbnRmKHJldF9zLCBzaXplLCAidW5uYW1lZCIpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHNpemUgPj0gQVZBSElfTEFCRUxfTUFYKQorCXJldF9zW0FWQUhJX0xBQkVMX01BWC0xXSA9IDA7CisKKyAgICByZXR1cm4gcmV0X3M7Cit9CisKK2NoYXIgKmF2YWhpX2dldF9ob3N0X25hbWVfc3RyZHVwKHZvaWQpIHsKKyAgICBjaGFyIHRbQVZBSElfRE9NQUlOX05BTUVfTUFYXTsKKworICAgIGlmICghKGF2YWhpX2dldF9ob3N0X25hbWUodCwgc2l6ZW9mKHQpKSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmV0dXJuIGF2YWhpX3N0cmR1cCh0KTsKK30KKworaW50IGF2YWhpX2JpbmFyeV9kb21haW5fY21wKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIpIHsKKyAgICBhc3NlcnQoYSk7CisgICAgYXNzZXJ0KGIpOworCisgICAgaWYgKGEgPT0gYikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGNoYXIgY2FbQVZBSElfTEFCRUxfTUFYXSwgY2JbQVZBSElfTEFCRUxfTUFYXSwgKnA7CisgICAgICAgIGludCByOworCisgICAgICAgIHAgPSBhdmFoaV91bmVzY2FwZV9sYWJlbCgmYSwgY2EsIHNpemVvZihjYSkpOworICAgICAgICBhc3NlcnQocCk7CisgICAgICAgIHAgPSBhdmFoaV91bmVzY2FwZV9sYWJlbCgmYiwgY2IsIHNpemVvZihjYikpOworICAgICAgICBhc3NlcnQocCk7CisKKyAgICAgICAgaWYgKChyID0gc3RyY21wKGNhLCBjYikpKQorICAgICAgICAgICAgcmV0dXJuIHI7CisKKyAgICAgICAgaWYgKCEqYSAmJiAhKmIpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK2ludCBhdmFoaV9kb21haW5fZW5kc193aXRoKGNvbnN0IGNoYXIgKmRvbWFpbiwgY29uc3QgY2hhciAqc3VmZml4KSB7CisgICAgYXNzZXJ0KGRvbWFpbik7CisgICAgYXNzZXJ0KHN1ZmZpeCk7CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGNoYXIgZHVtbXlbQVZBSElfTEFCRUxfTUFYXSwgKnI7CisKKyAgICAgICAgaWYgKCpkb21haW4gPT0gMCkKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIGlmIChhdmFoaV9kb21haW5fZXF1YWwoZG9tYWluLCBzdWZmaXgpKQorICAgICAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgICAgciA9IGF2YWhpX3VuZXNjYXBlX2xhYmVsKCZkb21haW4sIGR1bW15LCBzaXplb2YoZHVtbXkpKTsKKyAgICAgICAgYXNzZXJ0KHIpOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvZG9tYWluLXV0aWwuaCBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL2RvbWFpbi11dGlsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgyZmRlNgotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL2RvbWFpbi11dGlsLmgKQEAgLTAsMCArMSw0NSBAQAorI2lmbmRlZiBmb29kb21haW51dGlsaGZvbworI2RlZmluZSBmb29kb21haW51dGlsaGZvbworCisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2NkZWNsLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2RvbWFpbi5oPgorCitBVkFISV9DX0RFQ0xfQkVHSU4KKworLyoqIFJldHVybiB0aGUgbG9jYWwgaG9zdCBuYW1lLiAqLworY2hhciAqYXZhaGlfZ2V0X2hvc3RfbmFtZShjaGFyICpyZXRfcywgc2l6ZV90IHNpemUpOworCisvKiogUmV0dXJuIHRoZSBsb2NhbCBob3N0IG5hbWUuIGF2YWhpX2ZyZWUoKSB0aGUgcmVzdWx0ISAqLworY2hhciAqYXZhaGlfZ2V0X2hvc3RfbmFtZV9zdHJkdXAodm9pZCk7CisKKy8qKiBEbyBhIGJpbmFyeSBjb21wYXJpc29uIG9mIHRvIHNwZWNpZmllZCBkb21haW4gbmFtZXMsIHJldHVybiAtMSwgMCwgb3IgMSwgZGVwZW5kaW5nIG9uIHRoZSBvcmRlci4gKi8KK2ludCBhdmFoaV9iaW5hcnlfZG9tYWluX2NtcChjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiKTsKKworLyoqIFJldHVybnMgMSBpZiB0aGUgdGhlIGVuZCBsYWJlbHMgb2YgZG9tYWluIGFyZSBlcWFsIHRvIHN1ZmZpeCAqLworaW50IGF2YWhpX2RvbWFpbl9lbmRzX3dpdGgoY29uc3QgY2hhciAqZG9tYWluLCBjb25zdCBjaGFyICpzdWZmaXgpOworCitBVkFISV9DX0RFQ0xfRU5ECisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvZW50cnkuYyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL2VudHJ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ4NjIxMwotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL2VudHJ5LmMKQEAgLTAsMCArMSwxMjMzIEBACisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorCisjaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisKKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vZG9tYWluLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL3RpbWV2YWwuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vbWFsbG9jLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2Vycm9yLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2RvbWFpbi5oPgorCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJpZmFjZS5oIgorI2luY2x1ZGUgInNvY2tldC5oIgorI2luY2x1ZGUgImJyb3dzZS5oIgorI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInV0aWwuaCIKKyNpbmNsdWRlICJkbnMtc3J2LXJyLmgiCisjaW5jbHVkZSAicnItdXRpbC5oIgorI2luY2x1ZGUgImRvbWFpbi11dGlsLmgiCisKK3N0YXRpYyB2b2lkIHRyYW5zcG9ydF9mbGFnc19mcm9tX2RvbWFpbihBdmFoaVNlcnZlciAqcywgQXZhaGlQdWJsaXNoRmxhZ3MgKmZsYWdzLCBjb25zdCBjaGFyICpkb21haW4pIHsKKyAgICBhc3NlcnQoZmxhZ3MpOworICAgIGFzc2VydChkb21haW4pOworCisgICAgYXNzZXJ0KCEoKCpmbGFncyAmIEFWQUhJX1BVQkxJU0hfVVNFX01VTFRJQ0FTVCkgJiYgKCpmbGFncyAmIEFWQUhJX1BVQkxJU0hfVVNFX1dJREVfQVJFQSkpKTsKKworICAgIGlmICgqZmxhZ3MgJiAoQVZBSElfUFVCTElTSF9VU0VfTVVMVElDQVNUfEFWQUhJX1BVQkxJU0hfVVNFX1dJREVfQVJFQSkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghcy0+d2lkZV9hcmVhX2xvb2t1cF9lbmdpbmUgfHwKKyAgICAgICAgIWF2YWhpX3dpZGVfYXJlYV9oYXNfc2VydmVycyhzLT53aWRlX2FyZWFfbG9va3VwX2VuZ2luZSkgfHwKKyAgICAgICAgYXZhaGlfZG9tYWluX2VuZHNfd2l0aChkb21haW4sIEFWQUhJX01ETlNfU1VGRklYX0xPQ0FMKSB8fAorICAgICAgICBhdmFoaV9kb21haW5fZW5kc193aXRoKGRvbWFpbiwgQVZBSElfTUROU19TVUZGSVhfQUREUl9JUFY0KSB8fAorICAgICAgICBhdmFoaV9kb21haW5fZW5kc193aXRoKGRvbWFpbiwgQVZBSElfTUROU19TVUZGSVhfQUREUl9JUFY2KSkKKyAgICAgICAgKmZsYWdzIHw9IEFWQUhJX1BVQkxJU0hfVVNFX01VTFRJQ0FTVDsKKyAgICBlbHNlCisgICAgICAgICpmbGFncyB8PSBBVkFISV9QVUJMSVNIX1VTRV9XSURFX0FSRUE7Cit9CisKK3ZvaWQgYXZhaGlfZW50cnlfZnJlZShBdmFoaVNlcnZlcipzLCBBdmFoaUVudHJ5ICplKSB7CisgICAgQXZhaGlFbnRyeSAqdDsKKworICAgIGFzc2VydChzKTsKKyAgICBhc3NlcnQoZSk7CisKKyAgICBhdmFoaV9nb29kYnllX2VudHJ5KHMsIGUsIDEsIDEpOworCisgICAgLyogUmVtb3ZlIGZyb20gbGlua2VkIGxpc3QgKi8KKyAgICBBVkFISV9MTElTVF9SRU1PVkUoQXZhaGlFbnRyeSwgZW50cmllcywgcy0+ZW50cmllcywgZSk7CisKKyAgICAvKiBSZW1vdmUgZnJvbSBoYXNoIHRhYmxlIGluZGV4ZWQgYnkgbmFtZSAqLworICAgIHQgPSBhdmFoaV9oYXNobWFwX2xvb2t1cChzLT5lbnRyaWVzX2J5X2tleSwgZS0+cmVjb3JkLT5rZXkpOworICAgIEFWQUhJX0xMSVNUX1JFTU9WRShBdmFoaUVudHJ5LCBieV9rZXksIHQsIGUpOworICAgIGlmICh0KQorICAgICAgICBhdmFoaV9oYXNobWFwX3JlcGxhY2Uocy0+ZW50cmllc19ieV9rZXksIHQtPnJlY29yZC0+a2V5LCB0KTsKKyAgICBlbHNlCisgICAgICAgIGF2YWhpX2hhc2htYXBfcmVtb3ZlKHMtPmVudHJpZXNfYnlfa2V5LCBlLT5yZWNvcmQtPmtleSk7CisKKyAgICAvKiBSZW1vdmUgZnJvbSBhc3NvY2lhdGVkIGdyb3VwICovCisgICAgaWYgKGUtPmdyb3VwKQorICAgICAgICBBVkFISV9MTElTVF9SRU1PVkUoQXZhaGlFbnRyeSwgYnlfZ3JvdXAsIGUtPmdyb3VwLT5lbnRyaWVzLCBlKTsKKworICAgIGF2YWhpX3JlY29yZF91bnJlZihlLT5yZWNvcmQpOworICAgIGF2YWhpX2ZyZWUoZSk7Cit9CisKK3ZvaWQgYXZhaGlfZW50cnlfZ3JvdXBfZnJlZShBdmFoaVNlcnZlciAqcywgQXZhaGlTRW50cnlHcm91cCAqZykgeworICAgIGFzc2VydChzKTsKKyAgICBhc3NlcnQoZyk7CisKKyAgICB3aGlsZSAoZy0+ZW50cmllcykKKyAgICAgICAgYXZhaGlfZW50cnlfZnJlZShzLCBnLT5lbnRyaWVzKTsKKworICAgIGlmIChnLT5yZWdpc3Rlcl90aW1lX2V2ZW50KQorICAgICAgICBhdmFoaV90aW1lX2V2ZW50X2ZyZWUoZy0+cmVnaXN0ZXJfdGltZV9ldmVudCk7CisKKyAgICBBVkFISV9MTElTVF9SRU1PVkUoQXZhaGlTRW50cnlHcm91cCwgZ3JvdXBzLCBzLT5ncm91cHMsIGcpOworICAgIGF2YWhpX2ZyZWUoZyk7Cit9CisKK3ZvaWQgYXZhaGlfY2xlYW51cF9kZWFkX2VudHJpZXMoQXZhaGlTZXJ2ZXIgKnMpIHsKKyAgICBhc3NlcnQocyk7CisKKyAgICBpZiAocy0+bmVlZF9ncm91cF9jbGVhbnVwKSB7CisgICAgICAgIEF2YWhpU0VudHJ5R3JvdXAgKmcsICpuZXh0OworCisgICAgICAgIGZvciAoZyA9IHMtPmdyb3VwczsgZzsgZyA9IG5leHQpIHsKKyAgICAgICAgICAgIG5leHQgPSBnLT5ncm91cHNfbmV4dDsKKworICAgICAgICAgICAgaWYgKGctPmRlYWQpCisgICAgICAgICAgICAgICAgYXZhaGlfZW50cnlfZ3JvdXBfZnJlZShzLCBnKTsKKyAgICAgICAgfQorCisgICAgICAgIHMtPm5lZWRfZ3JvdXBfY2xlYW51cCA9IDA7CisgICAgfQorCisgICAgaWYgKHMtPm5lZWRfZW50cnlfY2xlYW51cCkgeworICAgICAgICBBdmFoaUVudHJ5ICplLCAqbmV4dDsKKworICAgICAgICBmb3IgKGUgPSBzLT5lbnRyaWVzOyBlOyBlID0gbmV4dCkgeworICAgICAgICAgICAgbmV4dCA9IGUtPmVudHJpZXNfbmV4dDsKKworICAgICAgICAgICAgaWYgKGUtPmRlYWQpCisgICAgICAgICAgICAgICAgYXZhaGlfZW50cnlfZnJlZShzLCBlKTsKKyAgICAgICAgfQorCisgICAgICAgIHMtPm5lZWRfZW50cnlfY2xlYW51cCA9IDA7CisgICAgfQorCisgICAgaWYgKHMtPm5lZWRfYnJvd3Nlcl9jbGVhbnVwKQorICAgICAgICBhdmFoaV9icm93c2VyX2NsZWFudXAocyk7CisKKyAgICBpZiAocy0+Y2xlYW51cF90aW1lX2V2ZW50KSB7CisgICAgICAgIGF2YWhpX3RpbWVfZXZlbnRfZnJlZShzLT5jbGVhbnVwX3RpbWVfZXZlbnQpOworICAgICAgICBzLT5jbGVhbnVwX3RpbWVfZXZlbnQgPSBOVUxMOworICAgIH0KK30KKworc3RhdGljIGludCBjaGVja19yZWNvcmRfY29uZmxpY3QoQXZhaGlTZXJ2ZXIgKnMsIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsIEF2YWhpUmVjb3JkICpyLCBBdmFoaVB1Ymxpc2hGbGFncyBmbGFncykgeworICAgIEF2YWhpRW50cnkgKmU7CisKKyAgICBhc3NlcnQocyk7CisgICAgYXNzZXJ0KHIpOworCisgICAgZm9yIChlID0gYXZhaGlfaGFzaG1hcF9sb29rdXAocy0+ZW50cmllc19ieV9rZXksIHItPmtleSk7IGU7IGUgPSBlLT5ieV9rZXlfbmV4dCkgeworICAgICAgICBpZiAoZS0+ZGVhZCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICghKGZsYWdzICYgQVZBSElfUFVCTElTSF9VTklRVUUpICYmICEoZS0+ZmxhZ3MgJiBBVkFISV9QVUJMSVNIX1VOSVFVRSkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoKGZsYWdzICYgQVZBSElfUFVCTElTSF9BTExPV19NVUxUSVBMRSkgJiYgKGUtPmZsYWdzICYgQVZBSElfUFVCTElTSF9BTExPV19NVUxUSVBMRSkgKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKGF2YWhpX3JlY29yZF9lcXVhbF9ub190dGwociwgZS0+cmVjb3JkKSkgeworICAgICAgICAgICAgLyogVGhlIHJlY29yZHMgYXJlIHRoZSBzYW1lLCBub3QgYSBjb25mbGljdCBpbiBhbnkgY2FzZSAqLworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKGludGVyZmFjZSA8PSAwIHx8CisgICAgICAgICAgICAgZS0+aW50ZXJmYWNlIDw9IDAgfHwKKyAgICAgICAgICAgICBlLT5pbnRlcmZhY2UgPT0gaW50ZXJmYWNlKSAmJgorICAgICAgICAgICAgKHByb3RvY29sID09IEFWQUhJX1BST1RPX1VOU1BFQyB8fAorICAgICAgICAgICAgIGUtPnByb3RvY29sID09IEFWQUhJX1BST1RPX1VOU1BFQyB8fAorICAgICAgICAgICAgIGUtPnByb3RvY29sID09IHByb3RvY29sKSkKKworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgQXZhaGlFbnRyeSAqIHNlcnZlcl9hZGRfaW50ZXJuYWwoCisgICAgQXZhaGlTZXJ2ZXIgKnMsCisgICAgQXZhaGlTRW50cnlHcm91cCAqZywKKyAgICBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLAorICAgIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsCisgICAgQXZhaGlQdWJsaXNoRmxhZ3MgZmxhZ3MsCisgICAgQXZhaGlSZWNvcmQgKnIpIHsKKworICAgIEF2YWhpRW50cnkgKmU7CisKKyAgICBhc3NlcnQocyk7CisgICAgYXNzZXJ0KHIpOworCisgICAgQVZBSElfQ0hFQ0tfVkFMSURJVFlfUkVUVVJOX05VTEwocywgcy0+c3RhdGUgIT0gQVZBSElfU0VSVkVSX0ZBSUxVUkUgJiYgcy0+c3RhdGUgIT0gQVZBSElfU0VSVkVSX0lOVkFMSUQsIEFWQUhJX0VSUl9CQURfU1RBVEUpOworICAgIEFWQUhJX0NIRUNLX1ZBTElESVRZX1JFVFVSTl9OVUxMKHMsIEFWQUhJX0lGX1ZBTElEKGludGVyZmFjZSksIEFWQUhJX0VSUl9JTlZBTElEX0lOVEVSRkFDRSk7CisgICAgQVZBSElfQ0hFQ0tfVkFMSURJVFlfUkVUVVJOX05VTEwocywgQVZBSElfUFJPVE9fVkFMSUQocHJvdG9jb2wpLCBBVkFISV9FUlJfSU5WQUxJRF9QUk9UT0NPTCk7CisgICAgQVZBSElfQ0hFQ0tfVkFMSURJVFlfUkVUVVJOX05VTEwocywgQVZBSElfRkxBR1NfVkFMSUQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVkFISV9QVUJMSVNIX05PX0FOTk9VTkNFfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVkFISV9QVUJMSVNIX05PX1BST0JFfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVkFISV9QVUJMSVNIX1VOSVFVRXwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZBSElfUFVCTElTSF9BTExPV19NVUxUSVBMRXwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZBSElfUFVCTElTSF9VUERBVEV8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWQUhJX1BVQkxJU0hfVVNFX1dJREVfQVJFQXwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZBSElfUFVCTElTSF9VU0VfTVVMVElDQVNUKSwgQVZBSElfRVJSX0lOVkFMSURfRkxBR1MpOworICAgIEFWQUhJX0NIRUNLX1ZBTElESVRZX1JFVFVSTl9OVUxMKHMsIGF2YWhpX2lzX3ZhbGlkX2RvbWFpbl9uYW1lKHItPmtleS0+bmFtZSksIEFWQUhJX0VSUl9JTlZBTElEX0hPU1RfTkFNRSk7CisgICAgQVZBSElfQ0hFQ0tfVkFMSURJVFlfUkVUVVJOX05VTEwocywgci0+dHRsICE9IDAsIEFWQUhJX0VSUl9JTlZBTElEX1RUTCk7CisgICAgQVZBSElfQ0hFQ0tfVkFMSURJVFlfUkVUVVJOX05VTEwocywgIWF2YWhpX2tleV9pc19wYXR0ZXJuKHItPmtleSksIEFWQUhJX0VSUl9JU19QQVRURVJOKTsKKyAgICBBVkFISV9DSEVDS19WQUxJRElUWV9SRVRVUk5fTlVMTChzLCBhdmFoaV9yZWNvcmRfaXNfdmFsaWQociksIEFWQUhJX0VSUl9JTlZBTElEX1JFQ09SRCk7CisgICAgQVZBSElfQ0hFQ0tfVkFMSURJVFlfUkVUVVJOX05VTEwocywgci0+a2V5LT5jbGF6eiA9PSBBVkFISV9ETlNfQ0xBU1NfSU4sIEFWQUhJX0VSUl9JTlZBTElEX0ROU19DTEFTUyk7CisgICAgQVZBSElfQ0hFQ0tfVkFMSURJVFlfUkVUVVJOX05VTEwocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoci0+a2V5LT50eXBlICE9IDApICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHItPmtleS0+dHlwZSAhPSBBVkFISV9ETlNfVFlQRV9BTlkpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHItPmtleS0+dHlwZSAhPSBBVkFISV9ETlNfVFlQRV9PUFQpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHItPmtleS0+dHlwZSAhPSBBVkFISV9ETlNfVFlQRV9US0VZKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyLT5rZXktPnR5cGUgIT0gQVZBSElfRE5TX1RZUEVfVFNJRykgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoci0+a2V5LT50eXBlICE9IEFWQUhJX0ROU19UWVBFX0lYRlIpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHItPmtleS0+dHlwZSAhPSBBVkFISV9ETlNfVFlQRV9BWEZSKSwgQVZBSElfRVJSX0lOVkFMSURfRE5TX1RZUEUpOworCisgICAgdHJhbnNwb3J0X2ZsYWdzX2Zyb21fZG9tYWluKHMsICZmbGFncywgci0+a2V5LT5uYW1lKTsKKyAgICBBVkFISV9DSEVDS19WQUxJRElUWV9SRVRVUk5fTlVMTChzLCBmbGFncyAmIEFWQUhJX1BVQkxJU0hfVVNFX01VTFRJQ0FTVCwgQVZBSElfRVJSX05PVF9TVVBQT1JURUQpOworICAgIEFWQUhJX0NIRUNLX1ZBTElESVRZX1JFVFVSTl9OVUxMKHMsICFzLT5jb25maWcuZGlzYWJsZV9wdWJsaXNoaW5nLCBBVkFISV9FUlJfTk9UX1BFUk1JVFRFRCk7CisgICAgQVZBSElfQ0hFQ0tfVkFMSURJVFlfUkVUVVJOX05VTEwocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZyB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnLT5zdGF0ZSAhPSBBVkFISV9FTlRSWV9HUk9VUF9FU1RBQkxJU0hFRCAmJiBnLT5zdGF0ZSAhPSBBVkFISV9FTlRSWV9HUk9VUF9SRUdJU1RFUklORykgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxhZ3MgJiBBVkFISV9QVUJMSVNIX1VQREFURSksIEFWQUhJX0VSUl9CQURfU1RBVEUpOworCisgICAgaWYgKGZsYWdzICYgQVZBSElfUFVCTElTSF9VUERBVEUpIHsKKyAgICAgICAgQXZhaGlSZWNvcmQgKm9sZF9yZWNvcmQ7CisgICAgICAgIGludCBpc19maXJzdCA9IDE7CisKKyAgICAgICAgLyogVXBkYXRlIGFuZCBleGlzdGluZyByZWNvcmQgKi8KKworICAgICAgICAvKiBGaW5kIHRoZSBmaXJzdCBtYXRjaGluZyBlbnRyeSAqLworICAgICAgICBmb3IgKGUgPSBhdmFoaV9oYXNobWFwX2xvb2t1cChzLT5lbnRyaWVzX2J5X2tleSwgci0+a2V5KTsgZTsgZSA9IGUtPmJ5X2tleV9uZXh0KSB7CisgICAgICAgICAgICBpZiAoIWUtPmRlYWQgJiYgZS0+Z3JvdXAgPT0gZyAmJiBlLT5pbnRlcmZhY2UgPT0gaW50ZXJmYWNlICYmIGUtPnByb3RvY29sID09IHByb3RvY29sKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBpc19maXJzdCA9IDA7CisgICAgICAgIH0KKworICAgICAgICAvKiBIbW0sIG5vdGhpbmcgZm91bmQ/ICovCisgICAgICAgIGlmICghZSkgeworICAgICAgICAgICAgYXZhaGlfc2VydmVyX3NldF9lcnJubyhzLCBBVkFISV9FUlJfTk9UX0ZPVU5EKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgLyogVXBkYXRlIHRoZSBlbnRyeSAqLworICAgICAgICBvbGRfcmVjb3JkID0gZS0+cmVjb3JkOworICAgICAgICBlLT5yZWNvcmQgPSBhdmFoaV9yZWNvcmRfcmVmKHIpOworICAgICAgICBlLT5mbGFncyA9IGZsYWdzOworCisgICAgICAgIC8qIEFubm91bmNlIG91ciBjaGFuZ2VzIHdoZW4gbmVlZGVkICovCisgICAgICAgIGlmICghYXZhaGlfcmVjb3JkX2VxdWFsX25vX3R0bChvbGRfcmVjb3JkLCByKSAmJiAoIWcgfHwgZy0+c3RhdGUgIT0gQVZBSElfRU5UUllfR1JPVVBfVU5DT01NSVRFRCkpIHsKKworICAgICAgICAgICAgLyogUmVtb3ZlIHRoZSBvbGQgZW50cnkgZnJvbSBhbGwgY2FjaGVzLCBpZiBuZWVkZWQgKi8KKyAgICAgICAgICAgIGlmICghKGUtPmZsYWdzICYgQVZBSElfUFVCTElTSF9VTklRVUUpKQorICAgICAgICAgICAgICAgIGF2YWhpX2dvb2RieWVfZW50cnkocywgZSwgMSwgMCk7CisKKyAgICAgICAgICAgIC8qIFJlYW5ub3VuY2Ugb3VyIHVwZGF0ZWQgZW50cnkgKi8KKyAgICAgICAgICAgIGF2YWhpX3JlYW5ub3VuY2VfZW50cnkocywgZSk7CisgICAgICAgIH0KKworICAgICAgICAvKiBJZiB3ZSB3ZXJlIHRoZSBmaXJzdCBlbnRyeSBpbiB0aGUgbGlzdCwgd2UgbmVlZCB0byB1cGRhdGUgdGhlIGtleSAqLworICAgICAgICBpZiAoaXNfZmlyc3QpCisgICAgICAgICAgICBhdmFoaV9oYXNobWFwX3JlcGxhY2Uocy0+ZW50cmllc19ieV9rZXksIGUtPnJlY29yZC0+a2V5LCBlKTsKKworICAgICAgICBhdmFoaV9yZWNvcmRfdW5yZWYob2xkX3JlY29yZCk7CisKKyAgICB9IGVsc2UgeworICAgICAgICBBdmFoaUVudHJ5ICp0OworCisgICAgICAgIC8qIEFkZCBhIG5ldyByZWNvcmQgKi8KKworICAgICAgICBpZiAoY2hlY2tfcmVjb3JkX2NvbmZsaWN0KHMsIGludGVyZmFjZSwgcHJvdG9jb2wsIHIsIGZsYWdzKSA8IDApIHsKKyAgICAgICAgICAgIGF2YWhpX3NlcnZlcl9zZXRfZXJybm8ocywgQVZBSElfRVJSX0NPTExJU0lPTik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghKGUgPSBhdmFoaV9uZXcoQXZhaGlFbnRyeSwgMSkpKSB7CisgICAgICAgICAgICBhdmFoaV9zZXJ2ZXJfc2V0X2Vycm5vKHMsIEFWQUhJX0VSUl9OT19NRU1PUlkpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKworICAgICAgICBlLT5zZXJ2ZXIgPSBzOworICAgICAgICBlLT5yZWNvcmQgPSBhdmFoaV9yZWNvcmRfcmVmKHIpOworICAgICAgICBlLT5ncm91cCA9IGc7CisgICAgICAgIGUtPmludGVyZmFjZSA9IGludGVyZmFjZTsKKyAgICAgICAgZS0+cHJvdG9jb2wgPSBwcm90b2NvbDsKKyAgICAgICAgZS0+ZmxhZ3MgPSBmbGFnczsKKyAgICAgICAgZS0+ZGVhZCA9IDA7CisKKyAgICAgICAgQVZBSElfTExJU1RfSEVBRF9JTklUKEF2YWhpQW5ub3VuY2VyLCBlLT5hbm5vdW5jZXJzKTsKKworICAgICAgICBBVkFISV9MTElTVF9QUkVQRU5EKEF2YWhpRW50cnksIGVudHJpZXMsIHMtPmVudHJpZXMsIGUpOworCisgICAgICAgIC8qIEluc2VydCBpbnRvIGhhc2ggdGFibGUgaW5kZXhlZCBieSBuYW1lICovCisgICAgICAgIHQgPSBhdmFoaV9oYXNobWFwX2xvb2t1cChzLT5lbnRyaWVzX2J5X2tleSwgZS0+cmVjb3JkLT5rZXkpOworICAgICAgICBBVkFISV9MTElTVF9QUkVQRU5EKEF2YWhpRW50cnksIGJ5X2tleSwgdCwgZSk7CisgICAgICAgIGF2YWhpX2hhc2htYXBfcmVwbGFjZShzLT5lbnRyaWVzX2J5X2tleSwgZS0+cmVjb3JkLT5rZXksIHQpOworCisgICAgICAgIC8qIEluc2VydCBpbnRvIGdyb3VwIGxpc3QgKi8KKyAgICAgICAgaWYgKGcpCisgICAgICAgICAgICBBVkFISV9MTElTVF9QUkVQRU5EKEF2YWhpRW50cnksIGJ5X2dyb3VwLCBnLT5lbnRyaWVzLCBlKTsKKworICAgICAgICBhdmFoaV9hbm5vdW5jZV9lbnRyeShzLCBlKTsKKyAgICB9CisKKyAgICByZXR1cm4gZTsKK30KKworaW50IGF2YWhpX3NlcnZlcl9hZGQoCisgICAgQXZhaGlTZXJ2ZXIgKnMsCisgICAgQXZhaGlTRW50cnlHcm91cCAqZywKKyAgICBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLAorICAgIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsCisgICAgQXZhaGlQdWJsaXNoRmxhZ3MgZmxhZ3MsCisgICAgQXZhaGlSZWNvcmQgKnIpIHsKKworICAgIGlmICghc2VydmVyX2FkZF9pbnRlcm5hbChzLCBnLCBpbnRlcmZhY2UsIHByb3RvY29sLCBmbGFncywgcikpCisgICAgICAgIHJldHVybiBhdmFoaV9zZXJ2ZXJfZXJybm8ocyk7CisKKyAgICByZXR1cm4gQVZBSElfT0s7Cit9CisKK2NvbnN0IEF2YWhpUmVjb3JkICphdmFoaV9zZXJ2ZXJfaXRlcmF0ZShBdmFoaVNlcnZlciAqcywgQXZhaGlTRW50cnlHcm91cCAqZywgdm9pZCAqKnN0YXRlKSB7CisgICAgQXZhaGlFbnRyeSAqKmUgPSAoQXZhaGlFbnRyeSoqKSBzdGF0ZTsKKyAgICBhc3NlcnQocyk7CisgICAgYXNzZXJ0KGUpOworCisgICAgaWYgKCEqZSkKKyAgICAgICAgKmUgPSBnID8gZy0+ZW50cmllcyA6IHMtPmVudHJpZXM7CisKKyAgICB3aGlsZSAoKmUgJiYgKCplKS0+ZGVhZCkKKyAgICAgICAgKmUgPSBnID8gKCplKS0+YnlfZ3JvdXBfbmV4dCA6ICgqZSktPmVudHJpZXNfbmV4dDsKKworICAgIGlmICghKmUpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmV0dXJuIGF2YWhpX3JlY29yZF9yZWYoKCplKS0+cmVjb3JkKTsKK30KKworaW50IGF2YWhpX3NlcnZlcl9kdW1wKEF2YWhpU2VydmVyICpzLCBBdmFoaUR1bXBDYWxsYmFjayBjYWxsYmFjaywgdm9pZCogdXNlcmRhdGEpIHsKKyAgICBBdmFoaUVudHJ5ICplOworCisgICAgYXNzZXJ0KHMpOworICAgIGFzc2VydChjYWxsYmFjayk7CisKKyAgICBjYWxsYmFjaygiOzs7IFpPTkUgRFVNUCBGT0xMT1dTIDs7OyIsIHVzZXJkYXRhKTsKKworICAgIGZvciAoZSA9IHMtPmVudHJpZXM7IGU7IGUgPSBlLT5lbnRyaWVzX25leHQpIHsKKyAgICAgICAgY2hhciAqdDsKKyAgICAgICAgY2hhciBsblsyNTZdOworCisgICAgICAgIGlmIChlLT5kZWFkKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKCEodCA9IGF2YWhpX3JlY29yZF90b19zdHJpbmcoZS0+cmVjb3JkKSkpCisgICAgICAgICAgICByZXR1cm4gYXZhaGlfc2VydmVyX3NldF9lcnJubyhzLCBBVkFISV9FUlJfTk9fTUVNT1JZKTsKKworICAgICAgICBzbnByaW50Zihsbiwgc2l6ZW9mKGxuKSwgIiVzIDsgaWZhY2U9JWkgcHJvdG89JWkiLCB0LCBlLT5pbnRlcmZhY2UsIGUtPnByb3RvY29sKTsKKyAgICAgICAgYXZhaGlfZnJlZSh0KTsKKworICAgICAgICBjYWxsYmFjayhsbiwgdXNlcmRhdGEpOworICAgIH0KKworICAgIGF2YWhpX2R1bXBfY2FjaGVzKHMtPm1vbml0b3IsIGNhbGxiYWNrLCB1c2VyZGF0YSk7CisKKyAgICBpZiAocy0+d2lkZV9hcmVhX2xvb2t1cF9lbmdpbmUpCisgICAgICAgIGF2YWhpX3dpZGVfYXJlYV9jYWNoZV9kdW1wKHMtPndpZGVfYXJlYV9sb29rdXBfZW5naW5lLCBjYWxsYmFjaywgdXNlcmRhdGEpOworICAgIHJldHVybiBBVkFISV9PSzsKK30KKworc3RhdGljIEF2YWhpRW50cnkgKnNlcnZlcl9hZGRfcHRyX2ludGVybmFsKAorICAgIEF2YWhpU2VydmVyICpzLAorICAgIEF2YWhpU0VudHJ5R3JvdXAgKmcsCisgICAgQXZhaGlJZkluZGV4IGludGVyZmFjZSwKKyAgICBBdmFoaVByb3RvY29sIHByb3RvY29sLAorICAgIEF2YWhpUHVibGlzaEZsYWdzIGZsYWdzLAorICAgIHVpbnQzMl90IHR0bCwKKyAgICBjb25zdCBjaGFyICpuYW1lLAorICAgIGNvbnN0IGNoYXIgKmRlc3QpIHsKKworICAgIEF2YWhpUmVjb3JkICpyOworICAgIEF2YWhpRW50cnkgKmU7CisKKyAgICBhc3NlcnQocyk7CisgICAgYXNzZXJ0KGRlc3QpOworCisgICAgQVZBSElfQ0hFQ0tfVkFMSURJVFlfUkVUVVJOX05VTEwocywgIW5hbWUgfHwgYXZhaGlfaXNfdmFsaWRfZG9tYWluX25hbWUobmFtZSksIEFWQUhJX0VSUl9JTlZBTElEX0hPU1RfTkFNRSk7CisgICAgQVZBSElfQ0hFQ0tfVkFMSURJVFlfUkVUVVJOX05VTEwocywgYXZhaGlfaXNfdmFsaWRfZG9tYWluX25hbWUoZGVzdCksIEFWQUhJX0VSUl9JTlZBTElEX0hPU1RfTkFNRSk7CisKKyAgICBpZiAoIW5hbWUpCisgICAgICAgIG5hbWUgPSBzLT5ob3N0X25hbWVfZnFkbjsKKworICAgIGlmICghKHIgPSBhdmFoaV9yZWNvcmRfbmV3X2Z1bGwobmFtZSwgQVZBSElfRE5TX0NMQVNTX0lOLCBBVkFISV9ETlNfVFlQRV9QVFIsIHR0bCkpKSB7CisgICAgICAgIGF2YWhpX3NlcnZlcl9zZXRfZXJybm8ocywgQVZBSElfRVJSX05PX01FTU9SWSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHItPmRhdGEucHRyLm5hbWUgPSBhdmFoaV9ub3JtYWxpemVfbmFtZV9zdHJkdXAoZGVzdCk7CisgICAgZSA9IHNlcnZlcl9hZGRfaW50ZXJuYWwocywgZywgaW50ZXJmYWNlLCBwcm90b2NvbCwgZmxhZ3MsIHIpOworICAgIGF2YWhpX3JlY29yZF91bnJlZihyKTsKKyAgICByZXR1cm4gZTsKK30KKworaW50IGF2YWhpX3NlcnZlcl9hZGRfcHRyKAorICAgIEF2YWhpU2VydmVyICpzLAorICAgIEF2YWhpU0VudHJ5R3JvdXAgKmcsCisgICAgQXZhaGlJZkluZGV4IGludGVyZmFjZSwKKyAgICBBdmFoaVByb3RvY29sIHByb3RvY29sLAorICAgIEF2YWhpUHVibGlzaEZsYWdzIGZsYWdzLAorICAgIHVpbnQzMl90IHR0bCwKKyAgICBjb25zdCBjaGFyICpuYW1lLAorICAgIGNvbnN0IGNoYXIgKmRlc3QpIHsKKworICAgIEF2YWhpRW50cnkgKmU7CisKKyAgICBhc3NlcnQocyk7CisKKyAgICBpZiAoIShlID0gc2VydmVyX2FkZF9wdHJfaW50ZXJuYWwocywgZywgaW50ZXJmYWNlLCBwcm90b2NvbCwgZmxhZ3MsIHR0bCwgbmFtZSwgZGVzdCkpKQorICAgICAgICByZXR1cm4gYXZhaGlfc2VydmVyX2Vycm5vKHMpOworCisgICAgcmV0dXJuIEFWQUhJX09LOworfQorCitpbnQgYXZhaGlfc2VydmVyX2FkZF9hZGRyZXNzKAorICAgIEF2YWhpU2VydmVyICpzLAorICAgIEF2YWhpU0VudHJ5R3JvdXAgKmcsCisgICAgQXZhaGlJZkluZGV4IGludGVyZmFjZSwKKyAgICBBdmFoaVByb3RvY29sIHByb3RvY29sLAorICAgIEF2YWhpUHVibGlzaEZsYWdzIGZsYWdzLAorICAgIGNvbnN0IGNoYXIgKm5hbWUsCisgICAgQXZhaGlBZGRyZXNzICphKSB7CisKKyAgICBjaGFyIG5bQVZBSElfRE9NQUlOX05BTUVfTUFYXTsKKyAgICBpbnQgcmV0ID0gQVZBSElfT0s7CisgICAgQXZhaGlFbnRyeSAqZW50cnkgPSBOVUxMLCAqcmV2ZXJzZSA9IE5VTEw7CisgICAgQXZhaGlSZWNvcmQgICpyOworCisgICAgYXNzZXJ0KHMpOworICAgIGFzc2VydChhKTsKKworICAgIEFWQUhJX0NIRUNLX1ZBTElESVRZKHMsIEFWQUhJX0lGX1ZBTElEKGludGVyZmFjZSksIEFWQUhJX0VSUl9JTlZBTElEX0lOVEVSRkFDRSk7CisgICAgQVZBSElfQ0hFQ0tfVkFMSURJVFkocywgQVZBSElfUFJPVE9fVkFMSUQocHJvdG9jb2wpICYmIEFWQUhJX1BST1RPX1ZBTElEKGEtPnByb3RvKSwgQVZBSElfRVJSX0lOVkFMSURfUFJPVE9DT0wpOworICAgIEFWQUhJX0NIRUNLX1ZBTElESVRZKHMsIEFWQUhJX0ZMQUdTX1ZBTElEKGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWQUhJX1BVQkxJU0hfTk9fUkVWRVJTRXwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVkFISV9QVUJMSVNIX05PX0FOTk9VTkNFfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWQUhJX1BVQkxJU0hfTk9fUFJPQkV8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZBSElfUFVCTElTSF9VUERBVEV8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZBSElfUFVCTElTSF9VU0VfV0lERV9BUkVBfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWQUhJX1BVQkxJU0hfVVNFX01VTFRJQ0FTVCksIEFWQUhJX0VSUl9JTlZBTElEX0ZMQUdTKTsKKyAgICBBVkFISV9DSEVDS19WQUxJRElUWShzLCAhbmFtZSB8fCBhdmFoaV9pc192YWxpZF9mcWRuKG5hbWUpLCBBVkFISV9FUlJfSU5WQUxJRF9IT1NUX05BTUUpOworCisgICAgLyogUHJlcGFyZSB0aGUgaG9zdCBuYWVtICovCisKKyAgICBpZiAoIW5hbWUpCisgICAgICAgIG5hbWUgPSBzLT5ob3N0X25hbWVfZnFkbjsKKyAgICBlbHNlIHsKKyAgICAgICAgQVZBSElfQVNTRVJUX1RSVUUoYXZhaGlfbm9ybWFsaXplX25hbWUobmFtZSwgbiwgc2l6ZW9mKG4pKSk7CisgICAgICAgIG5hbWUgPSBuOworICAgIH0KKworICAgIHRyYW5zcG9ydF9mbGFnc19mcm9tX2RvbWFpbihzLCAmZmxhZ3MsIG5hbWUpOworICAgIEFWQUhJX0NIRUNLX1ZBTElESVRZKHMsIGZsYWdzICYgQVZBSElfUFVCTElTSF9VU0VfTVVMVElDQVNULCBBVkFISV9FUlJfTk9UX1NVUFBPUlRFRCk7CisKKyAgICAvKiBDcmVhdGUgdGhlIEEvQUFBQSByZWNvcmQgKi8KKworICAgIGlmIChhLT5wcm90byA9PSBBVkFISV9QUk9UT19JTkVUKSB7CisKKyAgICAgICAgaWYgKCEociA9IGF2YWhpX3JlY29yZF9uZXdfZnVsbChuYW1lLCBBVkFISV9ETlNfQ0xBU1NfSU4sIEFWQUhJX0ROU19UWVBFX0EsIEFWQUhJX0RFRkFVTFRfVFRMX0hPU1RfTkFNRSkpKSB7CisgICAgICAgICAgICByZXQgPSBhdmFoaV9zZXJ2ZXJfc2V0X2Vycm5vKHMsIEFWQUhJX0VSUl9OT19NRU1PUlkpOworICAgICAgICAgICAgZ290byBmaW5pc2g7CisgICAgICAgIH0KKworICAgICAgICByLT5kYXRhLmEuYWRkcmVzcyA9IGEtPmRhdGEuaXB2NDsKKworICAgIH0gZWxzZSB7CisgICAgICAgIGFzc2VydChhLT5wcm90byA9PSBBVkFISV9QUk9UT19JTkVUNik7CisKKyAgICAgICAgaWYgKCEociA9IGF2YWhpX3JlY29yZF9uZXdfZnVsbChuYW1lLCBBVkFISV9ETlNfQ0xBU1NfSU4sIEFWQUhJX0ROU19UWVBFX0FBQUEsIEFWQUhJX0RFRkFVTFRfVFRMX0hPU1RfTkFNRSkpKSB7CisgICAgICAgICAgICByZXQgPSBhdmFoaV9zZXJ2ZXJfc2V0X2Vycm5vKHMsIEFWQUhJX0VSUl9OT19NRU1PUlkpOworICAgICAgICAgICAgZ290byBmaW5pc2g7CisgICAgICAgIH0KKworICAgICAgICByLT5kYXRhLmFhYWEuYWRkcmVzcyA9IGEtPmRhdGEuaXB2NjsKKyAgICB9CisKKyAgICBlbnRyeSA9IHNlcnZlcl9hZGRfaW50ZXJuYWwocywgZywgaW50ZXJmYWNlLCBwcm90b2NvbCwgKGZsYWdzICYgfiBBVkFISV9QVUJMSVNIX05PX1JFVkVSU0UpIHwgQVZBSElfUFVCTElTSF9VTklRVUUgfCBBVkFISV9QVUJMSVNIX0FMTE9XX01VTFRJUExFLCByKTsKKyAgICBhdmFoaV9yZWNvcmRfdW5yZWYocik7CisKKyAgICBpZiAoIWVudHJ5KSB7CisgICAgICAgIHJldCA9IGF2YWhpX3NlcnZlcl9lcnJubyhzKTsKKyAgICAgICAgZ290byBmaW5pc2g7CisgICAgfQorCisgICAgLyogQ3JlYXRlIHRoZSByZXZlcnNlIGxvb2t1cCBlbnRyeSAqLworCisgICAgaWYgKCEoZmxhZ3MgJiBBVkFISV9QVUJMSVNIX05PX1JFVkVSU0UpKSB7CisgICAgICAgIGNoYXIgcmV2ZXJzZV9uW0FWQUhJX0RPTUFJTl9OQU1FX01BWF07CisgICAgICAgIGF2YWhpX3JldmVyc2VfbG9va3VwX25hbWUoYSwgcmV2ZXJzZV9uLCBzaXplb2YocmV2ZXJzZV9uKSk7CisKKyAgICAgICAgaWYgKCEocmV2ZXJzZSA9IHNlcnZlcl9hZGRfcHRyX2ludGVybmFsKHMsIGcsIGludGVyZmFjZSwgcHJvdG9jb2wsIGZsYWdzIHwgQVZBSElfUFVCTElTSF9VTklRVUUsIEFWQUhJX0RFRkFVTFRfVFRMX0hPU1RfTkFNRSwgcmV2ZXJzZV9uLCBuYW1lKSkpIHsKKyAgICAgICAgICAgIHJldCA9IGF2YWhpX3NlcnZlcl9lcnJubyhzKTsKKyAgICAgICAgICAgIGdvdG8gZmluaXNoOworICAgICAgICB9CisgICAgfQorCitmaW5pc2g6CisKKyAgICBpZiAocmV0ICE9IEFWQUhJX09LICYmICEoZmxhZ3MgJiBBVkFISV9QVUJMSVNIX1VQREFURSkpIHsKKyAgICAgICAgaWYgKGVudHJ5KQorICAgICAgICAgICAgYXZhaGlfZW50cnlfZnJlZShzLCBlbnRyeSk7CisgICAgICAgIGlmIChyZXZlcnNlKQorICAgICAgICAgICAgYXZhaGlfZW50cnlfZnJlZShzLCByZXZlcnNlKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgQXZhaGlFbnRyeSAqc2VydmVyX2FkZF90eHRfc3RybHN0X25vY29weSgKKyAgICBBdmFoaVNlcnZlciAqcywKKyAgICBBdmFoaVNFbnRyeUdyb3VwICpnLAorICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsCisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICBBdmFoaVB1Ymxpc2hGbGFncyBmbGFncywKKyAgICB1aW50MzJfdCB0dGwsCisgICAgY29uc3QgY2hhciAqbmFtZSwKKyAgICBBdmFoaVN0cmluZ0xpc3QgKnN0cmxzdCkgeworCisgICAgQXZhaGlSZWNvcmQgKnI7CisgICAgQXZhaGlFbnRyeSAqZTsKKworICAgIGFzc2VydChzKTsKKworICAgIGlmICghKHIgPSBhdmFoaV9yZWNvcmRfbmV3X2Z1bGwobmFtZSA/IG5hbWUgOiBzLT5ob3N0X25hbWVfZnFkbiwgQVZBSElfRE5TX0NMQVNTX0lOLCBBVkFISV9ETlNfVFlQRV9UWFQsIHR0bCkpKSB7CisgICAgICAgIGF2YWhpX3N0cmluZ19saXN0X2ZyZWUoc3RybHN0KTsKKyAgICAgICAgYXZhaGlfc2VydmVyX3NldF9lcnJubyhzLCBBVkFISV9FUlJfTk9fTUVNT1JZKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgci0+ZGF0YS50eHQuc3RyaW5nX2xpc3QgPSBzdHJsc3Q7CisgICAgZSA9IHNlcnZlcl9hZGRfaW50ZXJuYWwocywgZywgaW50ZXJmYWNlLCBwcm90b2NvbCwgZmxhZ3MsIHIpOworICAgIGF2YWhpX3JlY29yZF91bnJlZihyKTsKKworICAgIHJldHVybiBlOworfQorCitzdGF0aWMgQXZhaGlTdHJpbmdMaXN0ICphZGRfbWFnaWNfY29va2llKAorICAgIEF2YWhpU2VydmVyICpzLAorICAgIEF2YWhpU3RyaW5nTGlzdCAqc3RybHN0KSB7CisKKyAgICBhc3NlcnQocyk7CisKKyAgICBpZiAoIXMtPmNvbmZpZy5hZGRfc2VydmljZV9jb29raWUpCisgICAgICAgIHJldHVybiBzdHJsc3Q7CisKKyAgICBpZiAoYXZhaGlfc3RyaW5nX2xpc3RfZmluZChzdHJsc3QsIEFWQUhJX1NFUlZJQ0VfQ09PS0lFKSkKKyAgICAgICAgLyogVGhpcyBzdHJpbmcgbGlzdCBhbHJlYWR5IGNvbnRhaW5zIGEgbWFnaWMgY29va2llICovCisgICAgICAgIHJldHVybiBzdHJsc3Q7CisKKyAgICByZXR1cm4gYXZhaGlfc3RyaW5nX2xpc3RfYWRkX3ByaW50ZihzdHJsc3QsIEFWQUhJX1NFUlZJQ0VfQ09PS0lFIj0ldSIsIHMtPmxvY2FsX3NlcnZpY2VfY29va2llKTsKK30KKworc3RhdGljIGludCBzZXJ2ZXJfYWRkX3NlcnZpY2Vfc3RybHN0X25vY29weSgKKyAgICBBdmFoaVNlcnZlciAqcywKKyAgICBBdmFoaVNFbnRyeUdyb3VwICpnLAorICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsCisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICBBdmFoaVB1Ymxpc2hGbGFncyBmbGFncywKKyAgICBjb25zdCBjaGFyICpuYW1lLAorICAgIGNvbnN0IGNoYXIgKnR5cGUsCisgICAgY29uc3QgY2hhciAqZG9tYWluLAorICAgIGNvbnN0IGNoYXIgKmhvc3QsCisgICAgdWludDE2X3QgcG9ydCwKKyAgICBBdmFoaVN0cmluZ0xpc3QgKnN0cmxzdCkgeworCisgICAgY2hhciBwdHJfbmFtZVtBVkFISV9ET01BSU5fTkFNRV9NQVhdLCBzdmNfbmFtZVtBVkFISV9ET01BSU5fTkFNRV9NQVhdLCBlbnVtX3B0cltBVkFISV9ET01BSU5fTkFNRV9NQVhdLCAqaCA9IE5VTEw7CisgICAgQXZhaGlSZWNvcmQgKnIgPSBOVUxMOworICAgIGludCByZXQgPSBBVkFISV9PSzsKKyAgICBBdmFoaUVudHJ5ICpzcnZfZW50cnkgPSBOVUxMLCAqdHh0X2VudHJ5ID0gTlVMTCwgKnB0cl9lbnRyeSA9IE5VTEwsICplbnVtX2VudHJ5ID0gTlVMTDsKKworICAgIGFzc2VydChzKTsKKyAgICBhc3NlcnQodHlwZSk7CisgICAgYXNzZXJ0KG5hbWUpOworCisgICAgQVZBSElfQ0hFQ0tfVkFMSURJVFlfU0VUX1JFVF9HT1RPX0ZBSUwocywgQVZBSElfSUZfVkFMSUQoaW50ZXJmYWNlKSwgQVZBSElfRVJSX0lOVkFMSURfSU5URVJGQUNFKTsKKyAgICBBVkFISV9DSEVDS19WQUxJRElUWV9TRVRfUkVUX0dPVE9fRkFJTChzLCBBVkFISV9QUk9UT19WQUxJRChwcm90b2NvbCksIEFWQUhJX0VSUl9JTlZBTElEX1BST1RPQ09MKTsKKyAgICBBVkFISV9DSEVDS19WQUxJRElUWV9TRVRfUkVUX0dPVE9fRkFJTChzLCBBVkFISV9GTEFHU19WQUxJRChmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVkFISV9QVUJMSVNIX05PX0NPT0tJRXwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVkFISV9QVUJMSVNIX1VQREFURXwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVkFISV9QVUJMSVNIX1VTRV9XSURFX0FSRUF8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZBSElfUFVCTElTSF9VU0VfTVVMVElDQVNUKSwgQVZBSElfRVJSX0lOVkFMSURfRkxBR1MpOworICAgIEFWQUhJX0NIRUNLX1ZBTElESVRZX1NFVF9SRVRfR09UT19GQUlMKHMsIGF2YWhpX2lzX3ZhbGlkX3NlcnZpY2VfbmFtZShuYW1lKSwgQVZBSElfRVJSX0lOVkFMSURfU0VSVklDRV9OQU1FKTsKKyAgICBBVkFISV9DSEVDS19WQUxJRElUWV9TRVRfUkVUX0dPVE9fRkFJTChzLCBhdmFoaV9pc192YWxpZF9zZXJ2aWNlX3R5cGVfc3RyaWN0KHR5cGUpLCBBVkFISV9FUlJfSU5WQUxJRF9TRVJWSUNFX1RZUEUpOworICAgIEFWQUhJX0NIRUNLX1ZBTElESVRZX1NFVF9SRVRfR09UT19GQUlMKHMsICFkb21haW4gfHwgYXZhaGlfaXNfdmFsaWRfZG9tYWluX25hbWUoZG9tYWluKSwgQVZBSElfRVJSX0lOVkFMSURfRE9NQUlOX05BTUUpOworICAgIEFWQUhJX0NIRUNLX1ZBTElESVRZX1NFVF9SRVRfR09UT19GQUlMKHMsICFob3N0IHx8IGF2YWhpX2lzX3ZhbGlkX2ZxZG4oaG9zdCksIEFWQUhJX0VSUl9JTlZBTElEX0hPU1RfTkFNRSk7CisKKyAgICBpZiAoIWRvbWFpbikKKyAgICAgICAgZG9tYWluID0gcy0+ZG9tYWluX25hbWU7CisKKyAgICBpZiAoIWhvc3QpCisgICAgICAgIGhvc3QgPSBzLT5ob3N0X25hbWVfZnFkbjsKKworICAgIHRyYW5zcG9ydF9mbGFnc19mcm9tX2RvbWFpbihzLCAmZmxhZ3MsIGRvbWFpbik7CisgICAgQVZBSElfQ0hFQ0tfVkFMSURJVFlfU0VUX1JFVF9HT1RPX0ZBSUwocywgZmxhZ3MgJiBBVkFISV9QVUJMSVNIX1VTRV9NVUxUSUNBU1QsIEFWQUhJX0VSUl9OT1RfU1VQUE9SVEVEKTsKKworICAgIGlmICghKGggPSBhdmFoaV9ub3JtYWxpemVfbmFtZV9zdHJkdXAoaG9zdCkpKSB7CisgICAgICAgIHJldCA9IGF2YWhpX3NlcnZlcl9zZXRfZXJybm8ocywgQVZBSElfRVJSX05PX01FTU9SWSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBpZiAoKHJldCA9IGF2YWhpX3NlcnZpY2VfbmFtZV9qb2luKHN2Y19uYW1lLCBzaXplb2Yoc3ZjX25hbWUpLCBuYW1lLCB0eXBlLCBkb21haW4pKSA8IDAgfHwKKyAgICAgICAgKHJldCA9IGF2YWhpX3NlcnZpY2VfbmFtZV9qb2luKHB0cl9uYW1lLCBzaXplb2YocHRyX25hbWUpLCBOVUxMLCB0eXBlLCBkb21haW4pKSA8IDAgfHwKKyAgICAgICAgKHJldCA9IGF2YWhpX3NlcnZpY2VfbmFtZV9qb2luKGVudW1fcHRyLCBzaXplb2YoZW51bV9wdHIpLCBOVUxMLCAiX3NlcnZpY2VzLl9kbnMtc2QuX3VkcCIsIGRvbWFpbikpIDwgMCkgeworICAgICAgICBhdmFoaV9zZXJ2ZXJfc2V0X2Vycm5vKHMsIHJldCk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICAvKiBBZGQgc2VydmljZSBlbnVtZXJhdGlvbiBQVFIgcmVjb3JkICovCisKKyAgICBpZiAoIShwdHJfZW50cnkgPSBzZXJ2ZXJfYWRkX3B0cl9pbnRlcm5hbChzLCBnLCBpbnRlcmZhY2UsIHByb3RvY29sLCAwLCBBVkFISV9ERUZBVUxUX1RUTCwgcHRyX25hbWUsIHN2Y19uYW1lKSkpIHsKKyAgICAgICAgcmV0ID0gYXZhaGlfc2VydmVyX2Vycm5vKHMpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgLyogQWRkIFNSViByZWNvcmQgKi8KKworICAgIGlmICghKHIgPSBhdmFoaV9yZWNvcmRfbmV3X2Z1bGwoc3ZjX25hbWUsIEFWQUhJX0ROU19DTEFTU19JTiwgQVZBSElfRE5TX1RZUEVfU1JWLCBBVkFISV9ERUZBVUxUX1RUTF9IT1NUX05BTUUpKSkgeworICAgICAgICByZXQgPSBhdmFoaV9zZXJ2ZXJfc2V0X2Vycm5vKHMsIEFWQUhJX0VSUl9OT19NRU1PUlkpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgci0+ZGF0YS5zcnYucHJpb3JpdHkgPSAwOworICAgIHItPmRhdGEuc3J2LndlaWdodCA9IDA7CisgICAgci0+ZGF0YS5zcnYucG9ydCA9IHBvcnQ7CisgICAgci0+ZGF0YS5zcnYubmFtZSA9IGg7CisgICAgaCA9IE5VTEw7CisgICAgc3J2X2VudHJ5ID0gc2VydmVyX2FkZF9pbnRlcm5hbChzLCBnLCBpbnRlcmZhY2UsIHByb3RvY29sLCBBVkFISV9QVUJMSVNIX1VOSVFVRSwgcik7CisgICAgYXZhaGlfcmVjb3JkX3VucmVmKHIpOworCisgICAgaWYgKCFzcnZfZW50cnkpIHsKKyAgICAgICAgcmV0ID0gYXZhaGlfc2VydmVyX2Vycm5vKHMpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgLyogQWRkIFRYVCByZWNvcmQgKi8KKworICAgIGlmICghKGZsYWdzICYgQVZBSElfUFVCTElTSF9OT19DT09LSUUpKQorICAgICAgICBzdHJsc3QgPSBhZGRfbWFnaWNfY29va2llKHMsIHN0cmxzdCk7CisKKyAgICB0eHRfZW50cnkgPSBzZXJ2ZXJfYWRkX3R4dF9zdHJsc3Rfbm9jb3B5KHMsIGcsIGludGVyZmFjZSwgcHJvdG9jb2wsIEFWQUhJX1BVQkxJU0hfVU5JUVVFLCBBVkFISV9ERUZBVUxUX1RUTCwgc3ZjX25hbWUsIHN0cmxzdCk7CisgICAgc3RybHN0ID0gTlVMTDsKKworICAgIGlmICghdHh0X2VudHJ5KSB7CisgICAgICAgIHJldCA9IGF2YWhpX3NlcnZlcl9lcnJubyhzKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIC8qIEFkZCBzZXJ2aWNlIHR5cGUgZW51bWVyYXRpb24gcmVjb3JkICovCisKKyAgICBpZiAoIShlbnVtX2VudHJ5ID0gc2VydmVyX2FkZF9wdHJfaW50ZXJuYWwocywgZywgaW50ZXJmYWNlLCBwcm90b2NvbCwgMCwgQVZBSElfREVGQVVMVF9UVEwsIGVudW1fcHRyLCBwdHJfbmFtZSkpKSB7CisgICAgICAgIHJldCA9IGF2YWhpX3NlcnZlcl9lcnJubyhzKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworZmFpbDoKKyAgICBpZiAocmV0ICE9IEFWQUhJX09LICYmICEoZmxhZ3MgJiBBVkFISV9QVUJMSVNIX1VQREFURSkpIHsKKyAgICAgICAgaWYgKHNydl9lbnRyeSkKKyAgICAgICAgICAgIGF2YWhpX2VudHJ5X2ZyZWUocywgc3J2X2VudHJ5KTsKKyAgICAgICAgaWYgKHR4dF9lbnRyeSkKKyAgICAgICAgICAgIGF2YWhpX2VudHJ5X2ZyZWUocywgdHh0X2VudHJ5KTsKKyAgICAgICAgaWYgKHB0cl9lbnRyeSkKKyAgICAgICAgICAgIGF2YWhpX2VudHJ5X2ZyZWUocywgcHRyX2VudHJ5KTsKKyAgICAgICAgaWYgKGVudW1fZW50cnkpCisgICAgICAgICAgICBhdmFoaV9lbnRyeV9mcmVlKHMsIGVudW1fZW50cnkpOworICAgIH0KKworICAgIGF2YWhpX3N0cmluZ19saXN0X2ZyZWUoc3RybHN0KTsKKyAgICBhdmFoaV9mcmVlKGgpOworCisgICAgcmV0dXJuIHJldDsKK30KKworaW50IGF2YWhpX3NlcnZlcl9hZGRfc2VydmljZV9zdHJsc3QoCisgICAgQXZhaGlTZXJ2ZXIgKnMsCisgICAgQXZhaGlTRW50cnlHcm91cCAqZywKKyAgICBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLAorICAgIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsCisgICAgQXZhaGlQdWJsaXNoRmxhZ3MgZmxhZ3MsCisgICAgY29uc3QgY2hhciAqbmFtZSwKKyAgICBjb25zdCBjaGFyICp0eXBlLAorICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwKKyAgICBjb25zdCBjaGFyICpob3N0LAorICAgIHVpbnQxNl90IHBvcnQsCisgICAgQXZhaGlTdHJpbmdMaXN0ICpzdHJsc3QpIHsKKworICAgIGFzc2VydChzKTsKKyAgICBhc3NlcnQodHlwZSk7CisgICAgYXNzZXJ0KG5hbWUpOworCisgICAgcmV0dXJuIHNlcnZlcl9hZGRfc2VydmljZV9zdHJsc3Rfbm9jb3B5KHMsIGcsIGludGVyZmFjZSwgcHJvdG9jb2wsIGZsYWdzLCBuYW1lLCB0eXBlLCBkb21haW4sIGhvc3QsIHBvcnQsIGF2YWhpX3N0cmluZ19saXN0X2NvcHkoc3RybHN0KSk7Cit9CisKK2ludCBhdmFoaV9zZXJ2ZXJfYWRkX3NlcnZpY2UoCisgICAgQXZhaGlTZXJ2ZXIgKnMsCisgICAgQXZhaGlTRW50cnlHcm91cCAqZywKKyAgICBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLAorICAgIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsCisgICAgQXZhaGlQdWJsaXNoRmxhZ3MgZmxhZ3MsCisgICAgY29uc3QgY2hhciAqbmFtZSwKKyAgICBjb25zdCBjaGFyICp0eXBlLAorICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwKKyAgICBjb25zdCBjaGFyICpob3N0LAorICAgIHVpbnQxNl90IHBvcnQsCisgICAgLi4uICl7CisKKyAgICB2YV9saXN0IHZhOworICAgIGludCByZXQ7CisKKyAgICB2YV9zdGFydCh2YSwgcG9ydCk7CisgICAgcmV0ID0gc2VydmVyX2FkZF9zZXJ2aWNlX3N0cmxzdF9ub2NvcHkocywgZywgaW50ZXJmYWNlLCBwcm90b2NvbCwgZmxhZ3MsIG5hbWUsIHR5cGUsIGRvbWFpbiwgaG9zdCwgcG9ydCwgYXZhaGlfc3RyaW5nX2xpc3RfbmV3X3ZhKHZhKSk7CisgICAgdmFfZW5kKHZhKTsKKworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc2VydmVyX3VwZGF0ZV9zZXJ2aWNlX3R4dF9zdHJsc3Rfbm9jb3B5KAorICAgIEF2YWhpU2VydmVyICpzLAorICAgIEF2YWhpU0VudHJ5R3JvdXAgKmcsCisgICAgQXZhaGlJZkluZGV4IGludGVyZmFjZSwKKyAgICBBdmFoaVByb3RvY29sIHByb3RvY29sLAorICAgIEF2YWhpUHVibGlzaEZsYWdzIGZsYWdzLAorICAgIGNvbnN0IGNoYXIgKm5hbWUsCisgICAgY29uc3QgY2hhciAqdHlwZSwKKyAgICBjb25zdCBjaGFyICpkb21haW4sCisgICAgQXZhaGlTdHJpbmdMaXN0ICpzdHJsc3QpIHsKKworICAgIGNoYXIgc3ZjX25hbWVbQVZBSElfRE9NQUlOX05BTUVfTUFYXTsKKyAgICBpbnQgcmV0ID0gQVZBSElfT0s7CisgICAgQXZhaGlFbnRyeSAqZTsKKworICAgIGFzc2VydChzKTsKKyAgICBhc3NlcnQodHlwZSk7CisgICAgYXNzZXJ0KG5hbWUpOworCisgICAgQVZBSElfQ0hFQ0tfVkFMSURJVFlfU0VUX1JFVF9HT1RPX0ZBSUwocywgQVZBSElfSUZfVkFMSUQoaW50ZXJmYWNlKSwgQVZBSElfRVJSX0lOVkFMSURfSU5URVJGQUNFKTsKKyAgICBBVkFISV9DSEVDS19WQUxJRElUWV9TRVRfUkVUX0dPVE9fRkFJTChzLCBBVkFISV9QUk9UT19WQUxJRChwcm90b2NvbCksIEFWQUhJX0VSUl9JTlZBTElEX1BST1RPQ09MKTsKKyAgICBBVkFISV9DSEVDS19WQUxJRElUWV9TRVRfUkVUX0dPVE9fRkFJTChzLCBBVkFISV9GTEFHU19WQUxJRChmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVkFISV9QVUJMSVNIX05PX0NPT0tJRXwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVkFISV9QVUJMSVNIX1VTRV9XSURFX0FSRUF8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZBSElfUFVCTElTSF9VU0VfTVVMVElDQVNUKSwgQVZBSElfRVJSX0lOVkFMSURfRkxBR1MpOworICAgIEFWQUhJX0NIRUNLX1ZBTElESVRZX1NFVF9SRVRfR09UT19GQUlMKHMsIGF2YWhpX2lzX3ZhbGlkX3NlcnZpY2VfbmFtZShuYW1lKSwgQVZBSElfRVJSX0lOVkFMSURfU0VSVklDRV9OQU1FKTsKKyAgICBBVkFISV9DSEVDS19WQUxJRElUWV9TRVRfUkVUX0dPVE9fRkFJTChzLCBhdmFoaV9pc192YWxpZF9zZXJ2aWNlX3R5cGVfc3RyaWN0KHR5cGUpLCBBVkFISV9FUlJfSU5WQUxJRF9TRVJWSUNFX1RZUEUpOworICAgIEFWQUhJX0NIRUNLX1ZBTElESVRZX1NFVF9SRVRfR09UT19GQUlMKHMsICFkb21haW4gfHwgYXZhaGlfaXNfdmFsaWRfZG9tYWluX25hbWUoZG9tYWluKSwgQVZBSElfRVJSX0lOVkFMSURfRE9NQUlOX05BTUUpOworCisgICAgaWYgKCFkb21haW4pCisgICAgICAgIGRvbWFpbiA9IHMtPmRvbWFpbl9uYW1lOworCisgICAgdHJhbnNwb3J0X2ZsYWdzX2Zyb21fZG9tYWluKHMsICZmbGFncywgZG9tYWluKTsKKyAgICBBVkFISV9DSEVDS19WQUxJRElUWV9TRVRfUkVUX0dPVE9fRkFJTChzLCBmbGFncyAmIEFWQUhJX1BVQkxJU0hfVVNFX01VTFRJQ0FTVCwgQVZBSElfRVJSX05PVF9TVVBQT1JURUQpOworCisgICAgaWYgKChyZXQgPSBhdmFoaV9zZXJ2aWNlX25hbWVfam9pbihzdmNfbmFtZSwgc2l6ZW9mKHN2Y19uYW1lKSwgbmFtZSwgdHlwZSwgZG9tYWluKSkgPCAwKSB7CisgICAgICAgIGF2YWhpX3NlcnZlcl9zZXRfZXJybm8ocywgcmV0KTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIC8qIEFkZCBUWFQgcmVjb3JkICovCisgICAgaWYgKCEoZmxhZ3MgJiBBVkFISV9QVUJMSVNIX05PX0NPT0tJRSkpCisgICAgICAgIHN0cmxzdCA9IGFkZF9tYWdpY19jb29raWUocywgc3RybHN0KTsKKworICAgIGUgPSBzZXJ2ZXJfYWRkX3R4dF9zdHJsc3Rfbm9jb3B5KHMsIGcsIGludGVyZmFjZSwgcHJvdG9jb2wsIEFWQUhJX1BVQkxJU0hfVU5JUVVFIHwgQVZBSElfUFVCTElTSF9VUERBVEUsIEFWQUhJX0RFRkFVTFRfVFRMLCBzdmNfbmFtZSwgc3RybHN0KTsKKyAgICBzdHJsc3QgPSBOVUxMOworCisgICAgaWYgKCFlKQorICAgICAgICByZXQgPSBhdmFoaV9zZXJ2ZXJfZXJybm8ocyk7CisKK2ZhaWw6CisKKyAgICBhdmFoaV9zdHJpbmdfbGlzdF9mcmVlKHN0cmxzdCk7CisKKyAgICByZXR1cm4gcmV0OworfQorCitpbnQgYXZhaGlfc2VydmVyX3VwZGF0ZV9zZXJ2aWNlX3R4dF9zdHJsc3QoCisgICAgQXZhaGlTZXJ2ZXIgKnMsCisgICAgQXZhaGlTRW50cnlHcm91cCAqZywKKyAgICBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLAorICAgIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsCisgICAgQXZhaGlQdWJsaXNoRmxhZ3MgZmxhZ3MsCisgICAgY29uc3QgY2hhciAqbmFtZSwKKyAgICBjb25zdCBjaGFyICp0eXBlLAorICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwKKyAgICBBdmFoaVN0cmluZ0xpc3QgKnN0cmxzdCkgeworCisgICAgcmV0dXJuIHNlcnZlcl91cGRhdGVfc2VydmljZV90eHRfc3RybHN0X25vY29weShzLCBnLCBpbnRlcmZhY2UsIHByb3RvY29sLCBmbGFncywgbmFtZSwgdHlwZSwgZG9tYWluLCBhdmFoaV9zdHJpbmdfbGlzdF9jb3B5KHN0cmxzdCkpOworfQorCisvKiogVXBkYXRlIHRoZSBUWFQgcmVjb3JkIGZvciBhIHNlcnZpY2Ugd2l0aCB0aGUgTlVMTCB0ZXJtb25hdGUgbGlzdCBvZiBzdHJpbmdzICovCitpbnQgYXZhaGlfc2VydmVyX3VwZGF0ZV9zZXJ2aWNlX3R4dCgKKyAgICBBdmFoaVNlcnZlciAqcywKKyAgICBBdmFoaVNFbnRyeUdyb3VwICpnLAorICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsCisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICBBdmFoaVB1Ymxpc2hGbGFncyBmbGFncywKKyAgICBjb25zdCBjaGFyICpuYW1lLAorICAgIGNvbnN0IGNoYXIgKnR5cGUsCisgICAgY29uc3QgY2hhciAqZG9tYWluLAorICAgIC4uLikgeworCisgICAgdmFfbGlzdCB2YTsKKyAgICBpbnQgcmV0OworCisgICAgdmFfc3RhcnQodmEsIGRvbWFpbik7CisgICAgcmV0ID0gc2VydmVyX3VwZGF0ZV9zZXJ2aWNlX3R4dF9zdHJsc3Rfbm9jb3B5KHMsIGcsIGludGVyZmFjZSwgcHJvdG9jb2wsIGZsYWdzLCBuYW1lLCB0eXBlLCBkb21haW4sIGF2YWhpX3N0cmluZ19saXN0X25ld192YSh2YSkpOworICAgIHZhX2VuZCh2YSk7CisKKyAgICByZXR1cm4gcmV0OworfQorCitpbnQgYXZhaGlfc2VydmVyX2FkZF9zZXJ2aWNlX3N1YnR5cGUoCisgICAgQXZhaGlTZXJ2ZXIgKnMsCisgICAgQXZhaGlTRW50cnlHcm91cCAqZywKKyAgICBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLAorICAgIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsCisgICAgQXZhaGlQdWJsaXNoRmxhZ3MgZmxhZ3MsCisgICAgY29uc3QgY2hhciAqbmFtZSwKKyAgICBjb25zdCBjaGFyICp0eXBlLAorICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwKKyAgICBjb25zdCBjaGFyICpzdWJ0eXBlKSB7CisKKyAgICBpbnQgcmV0ID0gQVZBSElfT0s7CisgICAgY2hhciBzdmNfbmFtZVtBVkFISV9ET01BSU5fTkFNRV9NQVhdLCBwdHJfbmFtZVtBVkFISV9ET01BSU5fTkFNRV9NQVhdOworCisgICAgYXNzZXJ0KG5hbWUpOworICAgIGFzc2VydCh0eXBlKTsKKyAgICBhc3NlcnQoc3VidHlwZSk7CisKKyAgICBBVkFISV9DSEVDS19WQUxJRElUWV9TRVRfUkVUX0dPVE9fRkFJTChzLCBBVkFISV9JRl9WQUxJRChpbnRlcmZhY2UpLCBBVkFISV9FUlJfSU5WQUxJRF9JTlRFUkZBQ0UpOworICAgIEFWQUhJX0NIRUNLX1ZBTElESVRZX1NFVF9SRVRfR09UT19GQUlMKHMsIEFWQUhJX1BST1RPX1ZBTElEKHByb3RvY29sKSwgQVZBSElfRVJSX0lOVkFMSURfUFJPVE9DT0wpOworICAgIEFWQUhJX0NIRUNLX1ZBTElESVRZX1NFVF9SRVRfR09UT19GQUlMKHMsIEFWQUhJX0ZMQUdTX1ZBTElEKGZsYWdzLCBBVkFISV9QVUJMSVNIX1VTRV9NVUxUSUNBU1R8QVZBSElfUFVCTElTSF9VU0VfV0lERV9BUkVBKSwgQVZBSElfRVJSX0lOVkFMSURfRkxBR1MpOworICAgIEFWQUhJX0NIRUNLX1ZBTElESVRZX1NFVF9SRVRfR09UT19GQUlMKHMsIGF2YWhpX2lzX3ZhbGlkX3NlcnZpY2VfbmFtZShuYW1lKSwgQVZBSElfRVJSX0lOVkFMSURfU0VSVklDRV9OQU1FKTsKKyAgICBBVkFISV9DSEVDS19WQUxJRElUWV9TRVRfUkVUX0dPVE9fRkFJTChzLCBhdmFoaV9pc192YWxpZF9zZXJ2aWNlX3R5cGVfc3RyaWN0KHR5cGUpLCBBVkFISV9FUlJfSU5WQUxJRF9TRVJWSUNFX1RZUEUpOworICAgIEFWQUhJX0NIRUNLX1ZBTElESVRZX1NFVF9SRVRfR09UT19GQUlMKHMsICFkb21haW4gfHwgYXZhaGlfaXNfdmFsaWRfZG9tYWluX25hbWUoZG9tYWluKSwgQVZBSElfRVJSX0lOVkFMSURfRE9NQUlOX05BTUUpOworICAgIEFWQUhJX0NIRUNLX1ZBTElESVRZX1NFVF9SRVRfR09UT19GQUlMKHMsIGF2YWhpX2lzX3ZhbGlkX3NlcnZpY2Vfc3VidHlwZShzdWJ0eXBlKSwgQVZBSElfRVJSX0lOVkFMSURfU0VSVklDRV9TVUJUWVBFKTsKKworICAgIGlmICghZG9tYWluKQorICAgICAgICBkb21haW4gPSBzLT5kb21haW5fbmFtZTsKKworICAgIHRyYW5zcG9ydF9mbGFnc19mcm9tX2RvbWFpbihzLCAmZmxhZ3MsIGRvbWFpbik7CisgICAgQVZBSElfQ0hFQ0tfVkFMSURJVFlfU0VUX1JFVF9HT1RPX0ZBSUwocywgZmxhZ3MgJiBBVkFISV9QVUJMSVNIX1VTRV9NVUxUSUNBU1QsIEFWQUhJX0VSUl9OT1RfU1VQUE9SVEVEKTsKKworICAgIGlmICgocmV0ID0gYXZhaGlfc2VydmljZV9uYW1lX2pvaW4oc3ZjX25hbWUsIHNpemVvZihzdmNfbmFtZSksIG5hbWUsIHR5cGUsIGRvbWFpbikpIDwgMCB8fAorICAgICAgICAocmV0ID0gYXZhaGlfc2VydmljZV9uYW1lX2pvaW4ocHRyX25hbWUsIHNpemVvZihwdHJfbmFtZSksIE5VTEwsIHN1YnR5cGUsIGRvbWFpbikpIDwgMCkgeworICAgICAgICBhdmFoaV9zZXJ2ZXJfc2V0X2Vycm5vKHMsIHJldCk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBpZiAoKHJldCA9IGF2YWhpX3NlcnZlcl9hZGRfcHRyKHMsIGcsIGludGVyZmFjZSwgcHJvdG9jb2wsIDAsIEFWQUhJX0RFRkFVTFRfVFRMLCBwdHJfbmFtZSwgc3ZjX25hbWUpKSA8IDApCisgICAgICAgIGdvdG8gZmFpbDsKKworZmFpbDoKKworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGhleHN0cmluZyhjaGFyICpzLCBzaXplX3Qgc2wsIGNvbnN0IHZvaWQgKnAsIHNpemVfdCBwbCkgeworICAgIHN0YXRpYyBjb25zdCBjaGFyIGhleFtdID0gIjAxMjM0NTY3ODlhYmNkZWYiOworICAgIGludCBiID0gMDsKKyAgICBjb25zdCB1aW50OF90ICprID0gcDsKKworICAgIHdoaWxlIChzbCA+IDEgJiYgcGwgPiAwKSB7CisgICAgICAgICoocysrKSA9IGhleFsoYiA/ICprIDogKmsgPj4gNCkgJiAweEZdOworCisgICAgICAgIGlmIChiKSB7CisgICAgICAgICAgICBrKys7CisgICAgICAgICAgICBwbC0tOworICAgICAgICB9CisKKyAgICAgICAgYiA9ICFiOworCisgICAgICAgIHNsLS07CisgICAgfQorCisgICAgaWYgKHNsID4gMCkKKyAgICAgICAgKnMgPSAwOworfQorCitzdGF0aWMgQXZhaGlFbnRyeSAqc2VydmVyX2FkZF9kbnNfc2VydmVyX25hbWUoCisgICAgQXZhaGlTZXJ2ZXIgKnMsCisgICAgQXZhaGlTRW50cnlHcm91cCAqZywKKyAgICBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLAorICAgIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsCisgICAgQXZhaGlQdWJsaXNoRmxhZ3MgZmxhZ3MsCisgICAgY29uc3QgY2hhciAqZG9tYWluLAorICAgIEF2YWhpRE5TU2VydmVyVHlwZSB0eXBlLAorICAgIGNvbnN0IGNoYXIgKm5hbWUsCisgICAgdWludDE2X3QgcG9ydCAvKiogc2hvdWxkIGJlIDUzICovKSB7CisKKyAgICBBdmFoaUVudHJ5ICplOworICAgIGNoYXIgdFtBVkFISV9ET01BSU5fTkFNRV9NQVhdLCBub3JtYWxpemVkX2RbQVZBSElfRE9NQUlOX05BTUVfTUFYXSwgKm47CisKKyAgICBBdmFoaVJlY29yZCAqcjsKKworICAgIGFzc2VydChzKTsKKyAgICBhc3NlcnQobmFtZSk7CisKKyAgICBBVkFISV9DSEVDS19WQUxJRElUWV9SRVRVUk5fTlVMTChzLCBBVkFISV9GTEFHU19WQUxJRChmbGFncywgQVZBSElfUFVCTElTSF9VU0VfV0lERV9BUkVBfEFWQUhJX1BVQkxJU0hfVVNFX01VTFRJQ0FTVCksIEFWQUhJX0VSUl9JTlZBTElEX0ZMQUdTKTsKKyAgICBBVkFISV9DSEVDS19WQUxJRElUWV9SRVRVUk5fTlVMTChzLCB0eXBlID09IEFWQUhJX0ROU19TRVJWRVJfVVBEQVRFIHx8IHR5cGUgPT0gQVZBSElfRE5TX1NFUlZFUl9SRVNPTFZFLCBBVkFISV9FUlJfSU5WQUxJRF9GTEFHUyk7CisgICAgQVZBSElfQ0hFQ0tfVkFMSURJVFlfUkVUVVJOX05VTEwocywgcG9ydCAhPSAwLCBBVkFISV9FUlJfSU5WQUxJRF9QT1JUKTsKKyAgICBBVkFISV9DSEVDS19WQUxJRElUWV9SRVRVUk5fTlVMTChzLCBhdmFoaV9pc192YWxpZF9mcWRuKG5hbWUpLCBBVkFISV9FUlJfSU5WQUxJRF9IT1NUX05BTUUpOworICAgIEFWQUhJX0NIRUNLX1ZBTElESVRZX1JFVFVSTl9OVUxMKHMsICFkb21haW4gfHwgYXZhaGlfaXNfdmFsaWRfZG9tYWluX25hbWUoZG9tYWluKSwgQVZBSElfRVJSX0lOVkFMSURfRE9NQUlOX05BTUUpOworCisgICAgaWYgKCFkb21haW4pCisgICAgICAgIGRvbWFpbiA9IHMtPmRvbWFpbl9uYW1lOworCisgICAgdHJhbnNwb3J0X2ZsYWdzX2Zyb21fZG9tYWluKHMsICZmbGFncywgZG9tYWluKTsKKyAgICBBVkFISV9DSEVDS19WQUxJRElUWV9SRVRVUk5fTlVMTChzLCBmbGFncyAmIEFWQUhJX1BVQkxJU0hfVVNFX01VTFRJQ0FTVCwgQVZBSElfRVJSX05PVF9TVVBQT1JURUQpOworCisgICAgaWYgKCEobiA9IGF2YWhpX25vcm1hbGl6ZV9uYW1lX3N0cmR1cChuYW1lKSkpIHsKKyAgICAgICAgYXZhaGlfc2VydmVyX3NldF9lcnJubyhzLCBBVkFISV9FUlJfTk9fTUVNT1JZKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgQVZBSElfQVNTRVJUX1RSVUUoYXZhaGlfbm9ybWFsaXplX25hbWUoZG9tYWluLCBub3JtYWxpemVkX2QsIHNpemVvZihub3JtYWxpemVkX2QpKSk7CisKKyAgICBzbnByaW50Zih0LCBzaXplb2YodCksICIlcy4lcyIsIHR5cGUgPT0gQVZBSElfRE5TX1NFUlZFUl9SRVNPTFZFID8gIl9kb21haW4uX3VkcCIgOiAiX2Rucy11cGRhdGUuX3VkcCIsIG5vcm1hbGl6ZWRfZCk7CisKKyAgICBpZiAoIShyID0gYXZhaGlfcmVjb3JkX25ld19mdWxsKHQsIEFWQUhJX0ROU19DTEFTU19JTiwgQVZBSElfRE5TX1RZUEVfU1JWLCBBVkFISV9ERUZBVUxUX1RUTF9IT1NUX05BTUUpKSkgeworICAgICAgICBhdmFoaV9zZXJ2ZXJfc2V0X2Vycm5vKHMsIEFWQUhJX0VSUl9OT19NRU1PUlkpOworICAgICAgICBhdmFoaV9mcmVlKG4pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByLT5kYXRhLnNydi5wcmlvcml0eSA9IDA7CisgICAgci0+ZGF0YS5zcnYud2VpZ2h0ID0gMDsKKyAgICByLT5kYXRhLnNydi5wb3J0ID0gcG9ydDsKKyAgICByLT5kYXRhLnNydi5uYW1lID0gbjsKKyAgICBlID0gc2VydmVyX2FkZF9pbnRlcm5hbChzLCBnLCBpbnRlcmZhY2UsIHByb3RvY29sLCAwLCByKTsKKyAgICBhdmFoaV9yZWNvcmRfdW5yZWYocik7CisKKyAgICByZXR1cm4gZTsKK30KKworaW50IGF2YWhpX3NlcnZlcl9hZGRfZG5zX3NlcnZlcl9hZGRyZXNzKAorICAgIEF2YWhpU2VydmVyICpzLAorICAgIEF2YWhpU0VudHJ5R3JvdXAgKmcsCisgICAgQXZhaGlJZkluZGV4IGludGVyZmFjZSwKKyAgICBBdmFoaVByb3RvY29sIHByb3RvY29sLAorICAgIEF2YWhpUHVibGlzaEZsYWdzIGZsYWdzLAorICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwKKyAgICBBdmFoaUROU1NlcnZlclR5cGUgdHlwZSwKKyAgICBjb25zdCBBdmFoaUFkZHJlc3MgKmFkZHJlc3MsCisgICAgdWludDE2X3QgcG9ydCAvKiogc2hvdWxkIGJlIDUzICovKSB7CisKKyAgICBBdmFoaVJlY29yZCAqcjsKKyAgICBjaGFyIG5bNjRdLCBoWzY0XTsKKyAgICBBdmFoaUVudHJ5ICphX2VudHJ5LCAqc19lbnRyeTsKKworICAgIGFzc2VydChzKTsKKyAgICBhc3NlcnQoYWRkcmVzcyk7CisKKyAgICBBVkFISV9DSEVDS19WQUxJRElUWShzLCBBVkFISV9JRl9WQUxJRChpbnRlcmZhY2UpLCBBVkFISV9FUlJfSU5WQUxJRF9JTlRFUkZBQ0UpOworICAgIEFWQUhJX0NIRUNLX1ZBTElESVRZKHMsIEFWQUhJX1BST1RPX1ZBTElEKHByb3RvY29sKSAmJiBBVkFISV9QUk9UT19WQUxJRChhZGRyZXNzLT5wcm90byksIEFWQUhJX0VSUl9JTlZBTElEX1BST1RPQ09MKTsKKyAgICBBVkFISV9DSEVDS19WQUxJRElUWShzLCBBVkFISV9GTEFHU19WQUxJRChmbGFncywgQVZBSElfUFVCTElTSF9VU0VfTVVMVElDQVNUfEFWQUhJX1BVQkxJU0hfVVNFX1dJREVfQVJFQSksIEFWQUhJX0VSUl9JTlZBTElEX0ZMQUdTKTsKKyAgICBBVkFISV9DSEVDS19WQUxJRElUWShzLCB0eXBlID09IEFWQUhJX0ROU19TRVJWRVJfVVBEQVRFIHx8IHR5cGUgPT0gQVZBSElfRE5TX1NFUlZFUl9SRVNPTFZFLCBBVkFISV9FUlJfSU5WQUxJRF9GTEFHUyk7CisgICAgQVZBSElfQ0hFQ0tfVkFMSURJVFkocywgcG9ydCAhPSAwLCBBVkFISV9FUlJfSU5WQUxJRF9QT1JUKTsKKyAgICBBVkFISV9DSEVDS19WQUxJRElUWShzLCAhZG9tYWluIHx8IGF2YWhpX2lzX3ZhbGlkX2RvbWFpbl9uYW1lKGRvbWFpbiksIEFWQUhJX0VSUl9JTlZBTElEX0RPTUFJTl9OQU1FKTsKKworICAgIGlmICghZG9tYWluKQorICAgICAgICBkb21haW4gPSBzLT5kb21haW5fbmFtZTsKKworICAgIHRyYW5zcG9ydF9mbGFnc19mcm9tX2RvbWFpbihzLCAmZmxhZ3MsIGRvbWFpbik7CisgICAgQVZBSElfQ0hFQ0tfVkFMSURJVFkocywgZmxhZ3MgJiBBVkFISV9QVUJMSVNIX1VTRV9NVUxUSUNBU1QsIEFWQUhJX0VSUl9OT1RfU1VQUE9SVEVEKTsKKworICAgIGlmIChhZGRyZXNzLT5wcm90byA9PSBBVkFISV9QUk9UT19JTkVUKSB7CisgICAgICAgIGhleHN0cmluZyhoLCBzaXplb2YoaCksICZhZGRyZXNzLT5kYXRhLCBzaXplb2YoQXZhaGlJUHY0QWRkcmVzcykpOworICAgICAgICBzbnByaW50ZihuLCBzaXplb2YobiksICJpcC0lcy4lcyIsIGgsIGRvbWFpbik7CisgICAgICAgIHIgPSBhdmFoaV9yZWNvcmRfbmV3X2Z1bGwobiwgQVZBSElfRE5TX0NMQVNTX0lOLCBBVkFISV9ETlNfVFlQRV9BLCBBVkFISV9ERUZBVUxUX1RUTF9IT1NUX05BTUUpOworICAgICAgICByLT5kYXRhLmEuYWRkcmVzcyA9IGFkZHJlc3MtPmRhdGEuaXB2NDsKKyAgICB9IGVsc2UgeworICAgICAgICBoZXhzdHJpbmcoaCwgc2l6ZW9mKGgpLCAmYWRkcmVzcy0+ZGF0YSwgc2l6ZW9mKEF2YWhpSVB2NkFkZHJlc3MpKTsKKyAgICAgICAgc25wcmludGYobiwgc2l6ZW9mKG4pLCAiaXA2LSVzLiVzIiwgaCwgZG9tYWluKTsKKyAgICAgICAgciA9IGF2YWhpX3JlY29yZF9uZXdfZnVsbChuLCBBVkFISV9ETlNfQ0xBU1NfSU4sIEFWQUhJX0ROU19UWVBFX0FBQUEsIEFWQUhJX0RFRkFVTFRfVFRMX0hPU1RfTkFNRSk7CisgICAgICAgIHItPmRhdGEuYWFhYS5hZGRyZXNzID0gYWRkcmVzcy0+ZGF0YS5pcHY2OworICAgIH0KKworICAgIGlmICghcikKKyAgICAgICAgcmV0dXJuIGF2YWhpX3NlcnZlcl9zZXRfZXJybm8ocywgQVZBSElfRVJSX05PX01FTU9SWSk7CisKKyAgICBhX2VudHJ5ID0gc2VydmVyX2FkZF9pbnRlcm5hbChzLCBnLCBpbnRlcmZhY2UsIHByb3RvY29sLCBBVkFISV9QVUJMSVNIX1VOSVFVRSB8IEFWQUhJX1BVQkxJU0hfQUxMT1dfTVVMVElQTEUsIHIpOworICAgIGF2YWhpX3JlY29yZF91bnJlZihyKTsKKworICAgIGlmICghYV9lbnRyeSkKKyAgICAgICAgcmV0dXJuIGF2YWhpX3NlcnZlcl9lcnJubyhzKTsKKworICAgIGlmICghKHNfZW50cnkgPSBzZXJ2ZXJfYWRkX2Ruc19zZXJ2ZXJfbmFtZShzLCBnLCBpbnRlcmZhY2UsIHByb3RvY29sLCBmbGFncywgZG9tYWluLCB0eXBlLCBuLCBwb3J0KSkpIHsKKyAgICAgICAgaWYgKCEoZmxhZ3MgJiBBVkFISV9QVUJMSVNIX1VQREFURSkpCisgICAgICAgICAgICBhdmFoaV9lbnRyeV9mcmVlKHMsIGFfZW50cnkpOworICAgICAgICByZXR1cm4gYXZhaGlfc2VydmVyX2Vycm5vKHMpOworICAgIH0KKworICAgIHJldHVybiBBVkFISV9PSzsKK30KKwordm9pZCBhdmFoaV9zX2VudHJ5X2dyb3VwX2NoYW5nZV9zdGF0ZShBdmFoaVNFbnRyeUdyb3VwICpnLCBBdmFoaUVudHJ5R3JvdXBTdGF0ZSBzdGF0ZSkgeworICAgIGFzc2VydChnKTsKKworICAgIGlmIChnLT5zdGF0ZSA9PSBzdGF0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXNzZXJ0KHN0YXRlIDw9IEFWQUhJX0VOVFJZX0dST1VQX0NPTExJU0lPTik7CisKKyAgICBpZiAoZy0+c3RhdGUgPT0gQVZBSElfRU5UUllfR1JPVVBfRVNUQUJMSVNIRUQpIHsKKworICAgICAgICAvKiBJZiB0aGUgZW50cnkgZ3JvdXAgd2FzIGVzdGFibGlzaGVkIGZvciBhIHRpbWUgbG9uZ2VyIHRoZW4KKyAgICAgICAgICogNXMsIHJlc2V0IHRoZSBlc3RhYmxpc2htZW50IHRyaWFsIGNvdW50ZXIgKi8KKworICAgICAgICBpZiAoYXZhaGlfYWdlKCZnLT5lc3RhYmxpc2hlZF9hdCkgPiA1MDAwMDAwKQorICAgICAgICAgICAgZy0+bl9yZWdpc3Rlcl90cnkgPSAwOworICAgIH0gZWxzZSBpZiAoZy0+c3RhdGUgPT0gQVZBSElfRU5UUllfR1JPVVBfUkVHSVNURVJJTkcpIHsKKyAgICAgICAgaWYgKGctPnJlZ2lzdGVyX3RpbWVfZXZlbnQpIHsKKyAgICAgICAgICAgIGF2YWhpX3RpbWVfZXZlbnRfZnJlZShnLT5yZWdpc3Rlcl90aW1lX2V2ZW50KTsKKyAgICAgICAgICAgIGctPnJlZ2lzdGVyX3RpbWVfZXZlbnQgPSBOVUxMOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHN0YXRlID09IEFWQUhJX0VOVFJZX0dST1VQX0VTVEFCTElTSEVEKQorCisgICAgICAgIC8qIElmIHRoZSBlbnRyeSBncm91cCBpcyBub3cgZXN0YWJsaXNoZWQsIHJlbWVtYmVyIHRoZSB0aW1lCisgICAgICAgICAqIHRoaXMgaGFwcGVuZWQgKi8KKworICAgICAgICBnZXR0aW1lb2ZkYXkoJmctPmVzdGFibGlzaGVkX2F0LCBOVUxMKTsKKworICAgIGctPnN0YXRlID0gc3RhdGU7CisKKyAgICBpZiAoZy0+Y2FsbGJhY2spCisgICAgICAgIGctPmNhbGxiYWNrKGctPnNlcnZlciwgZywgc3RhdGUsIGctPnVzZXJkYXRhKTsKK30KKworQXZhaGlTRW50cnlHcm91cCAqYXZhaGlfc19lbnRyeV9ncm91cF9uZXcoQXZhaGlTZXJ2ZXIgKnMsIEF2YWhpU0VudHJ5R3JvdXBDYWxsYmFjayBjYWxsYmFjaywgdm9pZCogdXNlcmRhdGEpIHsKKyAgICBBdmFoaVNFbnRyeUdyb3VwICpnOworCisgICAgYXNzZXJ0KHMpOworCisgICAgaWYgKCEoZyA9IGF2YWhpX25ldyhBdmFoaVNFbnRyeUdyb3VwLCAxKSkpIHsKKyAgICAgICAgYXZhaGlfc2VydmVyX3NldF9lcnJubyhzLCBBVkFISV9FUlJfTk9fTUVNT1JZKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgZy0+c2VydmVyID0gczsKKyAgICBnLT5jYWxsYmFjayA9IGNhbGxiYWNrOworICAgIGctPnVzZXJkYXRhID0gdXNlcmRhdGE7CisgICAgZy0+ZGVhZCA9IDA7CisgICAgZy0+c3RhdGUgPSBBVkFISV9FTlRSWV9HUk9VUF9VTkNPTU1JVEVEOworICAgIGctPm5fcHJvYmluZyA9IDA7CisgICAgZy0+bl9yZWdpc3Rlcl90cnkgPSAwOworICAgIGctPnJlZ2lzdGVyX3RpbWVfZXZlbnQgPSBOVUxMOworICAgIGctPnJlZ2lzdGVyX3RpbWUudHZfc2VjID0gMDsKKyAgICBnLT5yZWdpc3Rlcl90aW1lLnR2X3VzZWMgPSAwOworICAgIEFWQUhJX0xMSVNUX0hFQURfSU5JVChBdmFoaUVudHJ5LCBnLT5lbnRyaWVzKTsKKworICAgIEFWQUhJX0xMSVNUX1BSRVBFTkQoQXZhaGlTRW50cnlHcm91cCwgZ3JvdXBzLCBzLT5ncm91cHMsIGcpOworICAgIHJldHVybiBnOworfQorCitzdGF0aWMgdm9pZCBjbGVhbnVwX3RpbWVfZXZlbnRfY2FsbGJhY2soQVZBSElfR0NDX1VOVVNFRCBBdmFoaVRpbWVFdmVudCAqZSwgdm9pZCogdXNlcmRhdGEpIHsKKyAgICBBdmFoaVNlcnZlciAqcyA9IHVzZXJkYXRhOworCisgICAgYXNzZXJ0KHMpOworCisgICAgYXZhaGlfY2xlYW51cF9kZWFkX2VudHJpZXMocyk7Cit9CisKK3N0YXRpYyB2b2lkIHNjaGVkdWxlX2NsZWFudXAoQXZhaGlTZXJ2ZXIgKnMpIHsKKyAgICBzdHJ1Y3QgdGltZXZhbCB0djsKKworICAgIGFzc2VydChzKTsKKworICAgIGlmICghcy0+Y2xlYW51cF90aW1lX2V2ZW50KQorICAgICAgICBzLT5jbGVhbnVwX3RpbWVfZXZlbnQgPSBhdmFoaV90aW1lX2V2ZW50X25ldyhzLT50aW1lX2V2ZW50X3F1ZXVlLCBhdmFoaV9lbGFwc2VfdGltZSgmdHYsIDEwMDAsIDApLCAmY2xlYW51cF90aW1lX2V2ZW50X2NhbGxiYWNrLCBzKTsKK30KKwordm9pZCBhdmFoaV9zX2VudHJ5X2dyb3VwX2ZyZWUoQXZhaGlTRW50cnlHcm91cCAqZykgeworICAgIEF2YWhpRW50cnkgKmU7CisKKyAgICBhc3NlcnQoZyk7CisgICAgYXNzZXJ0KGctPnNlcnZlcik7CisKKyAgICBmb3IgKGUgPSBnLT5lbnRyaWVzOyBlOyBlID0gZS0+YnlfZ3JvdXBfbmV4dCkgeworICAgICAgICBpZiAoIWUtPmRlYWQpIHsKKyAgICAgICAgICAgIGF2YWhpX2dvb2RieWVfZW50cnkoZy0+c2VydmVyLCBlLCAxLCAxKTsKKyAgICAgICAgICAgIGUtPmRlYWQgPSAxOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGctPnJlZ2lzdGVyX3RpbWVfZXZlbnQpIHsKKyAgICAgICAgYXZhaGlfdGltZV9ldmVudF9mcmVlKGctPnJlZ2lzdGVyX3RpbWVfZXZlbnQpOworICAgICAgICBnLT5yZWdpc3Rlcl90aW1lX2V2ZW50ID0gTlVMTDsKKyAgICB9CisKKyAgICBnLT5kZWFkID0gMTsKKworICAgIGctPnNlcnZlci0+bmVlZF9ncm91cF9jbGVhbnVwID0gMTsKKyAgICBnLT5zZXJ2ZXItPm5lZWRfZW50cnlfY2xlYW51cCA9IDE7CisKKyAgICBzY2hlZHVsZV9jbGVhbnVwKGctPnNlcnZlcik7Cit9CisKK3N0YXRpYyB2b2lkIGVudHJ5X2dyb3VwX2NvbW1pdF9yZWFsKEF2YWhpU0VudHJ5R3JvdXAgKmcpIHsKKyAgICBhc3NlcnQoZyk7CisKKyAgICBnZXR0aW1lb2ZkYXkoJmctPnJlZ2lzdGVyX3RpbWUsIE5VTEwpOworCisgICAgYXZhaGlfc19lbnRyeV9ncm91cF9jaGFuZ2Vfc3RhdGUoZywgQVZBSElfRU5UUllfR1JPVVBfUkVHSVNURVJJTkcpOworCisgICAgaWYgKGctPmRlYWQpCisgICAgICAgIHJldHVybjsKKworICAgIGF2YWhpX2Fubm91bmNlX2dyb3VwKGctPnNlcnZlciwgZyk7CisgICAgYXZhaGlfc19lbnRyeV9ncm91cF9jaGVja19wcm9iZWQoZywgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGVudHJ5X2dyb3VwX3JlZ2lzdGVyX3RpbWVfZXZlbnRfY2FsbGJhY2soQVZBSElfR0NDX1VOVVNFRCBBdmFoaVRpbWVFdmVudCAqZSwgdm9pZCogdXNlcmRhdGEpIHsKKyAgICBBdmFoaVNFbnRyeUdyb3VwICpnID0gdXNlcmRhdGE7CisgICAgYXNzZXJ0KGcpOworCisgICAgYXZhaGlfdGltZV9ldmVudF9mcmVlKGctPnJlZ2lzdGVyX3RpbWVfZXZlbnQpOworICAgIGctPnJlZ2lzdGVyX3RpbWVfZXZlbnQgPSBOVUxMOworCisgICAgLyogSG9sZG9mZiB0aW1lIHBhc3NlZCwgc28gbGV0J3Mgc3RhcnQgcHJvYmluZyAqLworICAgIGVudHJ5X2dyb3VwX2NvbW1pdF9yZWFsKGcpOworfQorCitpbnQgYXZhaGlfc19lbnRyeV9ncm91cF9jb21taXQoQXZhaGlTRW50cnlHcm91cCAqZykgeworICAgIHN0cnVjdCB0aW1ldmFsIG5vdzsKKworICAgIGFzc2VydChnKTsKKyAgICBhc3NlcnQoIWctPmRlYWQpOworCisgICAgaWYgKGctPnN0YXRlICE9IEFWQUhJX0VOVFJZX0dST1VQX1VOQ09NTUlURUQgJiYgZy0+c3RhdGUgIT0gQVZBSElfRU5UUllfR1JPVVBfQ09MTElTSU9OKQorICAgICAgICByZXR1cm4gYXZhaGlfc2VydmVyX3NldF9lcnJubyhnLT5zZXJ2ZXIsIEFWQUhJX0VSUl9CQURfU1RBVEUpOworCisgICAgaWYgKGF2YWhpX3NfZW50cnlfZ3JvdXBfaXNfZW1wdHkoZykpCisgICAgICAgIHJldHVybiBhdmFoaV9zZXJ2ZXJfc2V0X2Vycm5vKGctPnNlcnZlciwgQVZBSElfRVJSX0lTX0VNUFRZKTsKKworICAgIGctPm5fcmVnaXN0ZXJfdHJ5Kys7CisKKyAgICBhdmFoaV90aW1ldmFsX2FkZCgmZy0+cmVnaXN0ZXJfdGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAxMDAwKihnLT5uX3JlZ2lzdGVyX3RyeSA+PSBBVkFISV9SUl9SQVRFX0xJTUlUX0NPVU5UID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVkFISV9SUl9IT0xET0ZGX01TRUNfUkFURV9MSU1JVCA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZBSElfUlJfSE9MRE9GRl9NU0VDKSk7CisKKyAgICBnZXR0aW1lb2ZkYXkoJm5vdywgTlVMTCk7CisKKyAgICBpZiAoYXZhaGlfdGltZXZhbF9jb21wYXJlKCZnLT5yZWdpc3Rlcl90aW1lLCAmbm93KSA8PSAwKSB7CisKKyAgICAgICAgLyogSG9sZG9mZiB0aW1lIHBhc3NlZCwgc28gbGV0J3Mgc3RhcnQgcHJvYmluZyAqLworICAgICAgICBlbnRyeV9ncm91cF9jb21taXRfcmVhbChnKTsKKyAgICB9IGVsc2UgeworCisgICAgICAgICAvKiBIb2xkb2ZmIHRpbWUgaGFzIG5vdCB5ZXQgcGFzc2VkLCBzbyBsZXQncyB3YWl0ICovCisgICAgICAgIGFzc2VydCghZy0+cmVnaXN0ZXJfdGltZV9ldmVudCk7CisgICAgICAgIGctPnJlZ2lzdGVyX3RpbWVfZXZlbnQgPSBhdmFoaV90aW1lX2V2ZW50X25ldyhnLT5zZXJ2ZXItPnRpbWVfZXZlbnRfcXVldWUsICZnLT5yZWdpc3Rlcl90aW1lLCBlbnRyeV9ncm91cF9yZWdpc3Rlcl90aW1lX2V2ZW50X2NhbGxiYWNrLCBnKTsKKworICAgICAgICBhdmFoaV9zX2VudHJ5X2dyb3VwX2NoYW5nZV9zdGF0ZShnLCBBVkFISV9FTlRSWV9HUk9VUF9SRUdJU1RFUklORyk7CisgICAgfQorCisgICAgcmV0dXJuIEFWQUhJX09LOworfQorCit2b2lkIGF2YWhpX3NfZW50cnlfZ3JvdXBfcmVzZXQoQXZhaGlTRW50cnlHcm91cCAqZykgeworICAgIEF2YWhpRW50cnkgKmU7CisgICAgYXNzZXJ0KGcpOworCisgICAgZm9yIChlID0gZy0+ZW50cmllczsgZTsgZSA9IGUtPmJ5X2dyb3VwX25leHQpIHsKKyAgICAgICAgaWYgKCFlLT5kZWFkKSB7CisgICAgICAgICAgICBhdmFoaV9nb29kYnllX2VudHJ5KGctPnNlcnZlciwgZSwgMSwgMSk7CisgICAgICAgICAgICBlLT5kZWFkID0gMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBnLT5zZXJ2ZXItPm5lZWRfZW50cnlfY2xlYW51cCA9IDE7CisKKyAgICBnLT5uX3Byb2JpbmcgPSAwOworCisgICAgYXZhaGlfc19lbnRyeV9ncm91cF9jaGFuZ2Vfc3RhdGUoZywgQVZBSElfRU5UUllfR1JPVVBfVU5DT01NSVRFRCk7CisKKyAgICBzY2hlZHVsZV9jbGVhbnVwKGctPnNlcnZlcik7Cit9CisKK2ludCBhdmFoaV9lbnRyeV9pc19jb21taXRlZChBdmFoaUVudHJ5ICplKSB7CisgICAgYXNzZXJ0KGUpOworICAgIGFzc2VydCghZS0+ZGVhZCk7CisKKyAgICByZXR1cm4gIWUtPmdyb3VwIHx8CisgICAgICAgIGUtPmdyb3VwLT5zdGF0ZSA9PSBBVkFISV9FTlRSWV9HUk9VUF9SRUdJU1RFUklORyB8fAorICAgICAgICBlLT5ncm91cC0+c3RhdGUgPT0gQVZBSElfRU5UUllfR1JPVVBfRVNUQUJMSVNIRUQ7Cit9CisKK0F2YWhpRW50cnlHcm91cFN0YXRlIGF2YWhpX3NfZW50cnlfZ3JvdXBfZ2V0X3N0YXRlKEF2YWhpU0VudHJ5R3JvdXAgKmcpIHsKKyAgICBhc3NlcnQoZyk7CisgICAgYXNzZXJ0KCFnLT5kZWFkKTsKKworICAgIHJldHVybiBnLT5zdGF0ZTsKK30KKwordm9pZCBhdmFoaV9zX2VudHJ5X2dyb3VwX3NldF9kYXRhKEF2YWhpU0VudHJ5R3JvdXAgKmcsIHZvaWQqIHVzZXJkYXRhKSB7CisgICAgYXNzZXJ0KGcpOworCisgICAgZy0+dXNlcmRhdGEgPSB1c2VyZGF0YTsKK30KKwordm9pZCogYXZhaGlfc19lbnRyeV9ncm91cF9nZXRfZGF0YShBdmFoaVNFbnRyeUdyb3VwICpnKSB7CisgICAgYXNzZXJ0KGcpOworCisgICAgcmV0dXJuIGctPnVzZXJkYXRhOworfQorCitpbnQgYXZhaGlfc19lbnRyeV9ncm91cF9pc19lbXB0eShBdmFoaVNFbnRyeUdyb3VwICpnKSB7CisgICAgQXZhaGlFbnRyeSAqZTsKKyAgICBhc3NlcnQoZyk7CisKKyAgICAvKiBMb29rIGZvciBhbiBlbnRyeSB0aGF0IGlzIG5vdCBkZWFkICovCisgICAgZm9yIChlID0gZy0+ZW50cmllczsgZTsgZSA9IGUtPmJ5X2dyb3VwX25leHQpCisgICAgICAgIGlmICghZS0+ZGVhZCkKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIDE7Cit9CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9mZHV0aWwuYyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL2ZkdXRpbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyOTQ3NTQKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9mZHV0aWwuYwpAQCAtMCwwICsxLDcyIEBACisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorCisjaW5jbHVkZSAiZmR1dGlsLmgiCisKK2ludCBhdmFoaV9zZXRfY2xvZXhlYyhpbnQgZmQpIHsKKyAgICBpbnQgbjsKKworICAgIGFzc2VydChmZCA+PSAwKTsKKworICAgIGlmICgobiA9IGZjbnRsKGZkLCBGX0dFVEZEKSkgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAobiAmIEZEX0NMT0VYRUMpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGZjbnRsKGZkLCBGX1NFVEZELCBufEZEX0NMT0VYRUMpOworfQorCitpbnQgYXZhaGlfc2V0X25vbmJsb2NrKGludCBmZCkgeworICAgIGludCBuOworCisgICAgYXNzZXJ0KGZkID49IDApOworCisgICAgaWYgKChuID0gZmNudGwoZmQsIEZfR0VURkwpKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGlmIChuICYgT19OT05CTE9DSykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gZmNudGwoZmQsIEZfU0VURkwsIG58T19OT05CTE9DSyk7Cit9CisKK2ludCBhdmFoaV93YWl0X2Zvcl93cml0ZShpbnQgZmQpIHsKKyAgICBmZF9zZXQgZmRzOworICAgIGludCByOworCisgICAgRkRfWkVSTygmZmRzKTsKKyAgICBGRF9TRVQoZmQsICZmZHMpOworCisgICAgaWYgKChyID0gc2VsZWN0KGZkKzEsIE5VTEwsICZmZHMsIE5VTEwsIE5VTEwpKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGFzc2VydChyID4gMCk7CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL2ZkdXRpbC5oIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvZmR1dGlsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg2MDdmOAotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL2ZkdXRpbC5oCkBAIC0wLDAgKzEsMzMgQEAKKyNpZm5kZWYgZm9vZmR1dGlsaGZvbworI2RlZmluZSBmb29mZHV0aWxoZm9vCisKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9jZGVjbC5oPgorCitBVkFISV9DX0RFQ0xfQkVHSU4KKworaW50IGF2YWhpX3NldF9jbG9leGVjKGludCBmZCk7CitpbnQgYXZhaGlfc2V0X25vbmJsb2NrKGludCBmZCk7CitpbnQgYXZhaGlfd2FpdF9mb3Jfd3JpdGUoaW50IGZkKTsKKworQVZBSElfQ19ERUNMX0VORAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL2hhc2htYXAtdGVzdC5jIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvaGFzaG1hcC10ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA5ZDBlNQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL2hhc2htYXAtdGVzdC5jCkBAIC0wLDAgKzEsNjIgQEAKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9kb21haW4uaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vbWFsbG9jLmg+CisKKyNpbmNsdWRlICJoYXNobWFwLmgiCisjaW5jbHVkZSAidXRpbC5oIgorCitpbnQgbWFpbihBVkFISV9HQ0NfVU5VU0VEIGludCBhcmdjLCBBVkFISV9HQ0NfVU5VU0VEIGNoYXIgKmFyZ3ZbXSkgeworICAgIHVuc2lnbmVkIG47CisgICAgQXZhaGlIYXNobWFwICptOworICAgIGNvbnN0IGNoYXIgKnQ7CisKKyAgICBtID0gYXZhaGlfaGFzaG1hcF9uZXcoYXZhaGlfc3RyaW5nX2hhc2gsIGF2YWhpX3N0cmluZ19lcXVhbCwgYXZhaGlfZnJlZSwgYXZhaGlfZnJlZSk7CisKKyAgICBhdmFoaV9oYXNobWFwX2luc2VydChtLCBhdmFoaV9zdHJkdXAoImJsYSIpLCBhdmFoaV9zdHJkdXAoIiMxIikpOworICAgIGF2YWhpX2hhc2htYXBfaW5zZXJ0KG0sIGF2YWhpX3N0cmR1cCgiYmxhMiIpLCBhdmFoaV9zdHJkdXAoImFzZGYiKSk7CisgICAgYXZhaGlfaGFzaG1hcF9pbnNlcnQobSwgYXZhaGlfc3RyZHVwKCJndXJrZSIpLCBhdmFoaV9zdHJkdXAoImZmc2RmIikpOworICAgIGF2YWhpX2hhc2htYXBfaW5zZXJ0KG0sIGF2YWhpX3N0cmR1cCgiYmx1YmIiKSwgYXZhaGlfc3RyZHVwKCJzYWRmc2QiKSk7CisgICAgYXZhaGlfaGFzaG1hcF9pbnNlcnQobSwgYXZhaGlfc3RyZHVwKCJibGEiKSwgYXZhaGlfc3RyZHVwKCIjMiIpKTsKKworICAgIGZvciAobiA9IDA7IG4gPCAxMDAwOyBuICsrKQorICAgICAgICBhdmFoaV9oYXNobWFwX2luc2VydChtLCBhdmFoaV9zdHJkdXBfcHJpbnRmKCJrZXkgJXUiLCBuKSwgYXZhaGlfc3RyZHVwX3ByaW50ZigidmFsdWUgJXUiLCBuKSk7CisKKyAgICBwcmludGYoIiVzXG4iLCAoY29uc3QgY2hhciopIGF2YWhpX2hhc2htYXBfbG9va3VwKG0sICJibGEiKSk7CisKKyAgICBhdmFoaV9oYXNobWFwX3JlcGxhY2UobSwgYXZhaGlfc3RyZHVwKCJibGEiKSwgYXZhaGlfc3RyZHVwKCIjMyIpKTsKKworICAgIHByaW50ZigiJXNcbiIsIChjb25zdCBjaGFyKikgYXZhaGlfaGFzaG1hcF9sb29rdXAobSwgImJsYSIpKTsKKworICAgIGF2YWhpX2hhc2htYXBfcmVtb3ZlKG0sICJibGEiKTsKKworICAgIHQgPSAoY29uc3QgY2hhciopIGF2YWhpX2hhc2htYXBfbG9va3VwKG0sICJibGEiKTsKKyAgICBwcmludGYoIiVzXG4iLCB0ID8gdCA6ICIobnVsbCkiKTsKKworICAgIGF2YWhpX2hhc2htYXBfZnJlZShtKTsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvaGFzaG1hcC5jIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvaGFzaG1hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliNTViZDMKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9oYXNobWFwLmMKQEAgLTAsMCArMSwyNDggQEAKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vbGxpc3QuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vZG9tYWluLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL21hbGxvYy5oPgorCisjaW5jbHVkZSAiaGFzaG1hcC5oIgorI2luY2x1ZGUgInV0aWwuaCIKKworI2RlZmluZSBIQVNIX01BUF9TSVpFIDEyMworCit0eXBlZGVmIHN0cnVjdCBFbnRyeSBFbnRyeTsKK3N0cnVjdCBFbnRyeSB7CisgICAgQXZhaGlIYXNobWFwICpoYXNobWFwOworICAgIHZvaWQgKmtleTsKKyAgICB2b2lkICp2YWx1ZTsKKworICAgIEFWQUhJX0xMSVNUX0ZJRUxEUyhFbnRyeSwgYnVja2V0KTsKKyAgICBBVkFISV9MTElTVF9GSUVMRFMoRW50cnksIGVudHJpZXMpOworfTsKKworc3RydWN0IEF2YWhpSGFzaG1hcCB7CisgICAgQXZhaGlIYXNoRnVuYyBoYXNoX2Z1bmM7CisgICAgQXZhaGlFcXVhbEZ1bmMgZXF1YWxfZnVuYzsKKyAgICBBdmFoaUZyZWVGdW5jIGtleV9mcmVlX2Z1bmMsIHZhbHVlX2ZyZWVfZnVuYzsKKworICAgIEVudHJ5ICplbnRyaWVzW0hBU0hfTUFQX1NJWkVdOworICAgIEFWQUhJX0xMSVNUX0hFQUQoRW50cnksIGVudHJpZXNfbGlzdCk7Cit9OworCitzdGF0aWMgRW50cnkqIGVudHJ5X2dldChBdmFoaUhhc2htYXAgKm0sIGNvbnN0IHZvaWQgKmtleSkgeworICAgIHVuc2lnbmVkIGlkeDsKKyAgICBFbnRyeSAqZTsKKworICAgIGlkeCA9IG0tPmhhc2hfZnVuYyhrZXkpICUgSEFTSF9NQVBfU0laRTsKKworICAgIGZvciAoZSA9IG0tPmVudHJpZXNbaWR4XTsgZTsgZSA9IGUtPmJ1Y2tldF9uZXh0KQorICAgICAgICBpZiAobS0+ZXF1YWxfZnVuYyhrZXksIGUtPmtleSkpCisgICAgICAgICAgICByZXR1cm4gZTsKKworICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBlbnRyeV9mcmVlKEF2YWhpSGFzaG1hcCAqbSwgRW50cnkgKmUsIGludCBzdG9sZW4pIHsKKyAgICB1bnNpZ25lZCBpZHg7CisgICAgYXNzZXJ0KG0pOworICAgIGFzc2VydChlKTsKKworICAgIGlkeCA9IG0tPmhhc2hfZnVuYyhlLT5rZXkpICUgSEFTSF9NQVBfU0laRTsKKworICAgIEFWQUhJX0xMSVNUX1JFTU9WRShFbnRyeSwgYnVja2V0LCBtLT5lbnRyaWVzW2lkeF0sIGUpOworICAgIEFWQUhJX0xMSVNUX1JFTU9WRShFbnRyeSwgZW50cmllcywgbS0+ZW50cmllc19saXN0LCBlKTsKKworICAgIGlmIChtLT5rZXlfZnJlZV9mdW5jKQorICAgICAgICBtLT5rZXlfZnJlZV9mdW5jKGUtPmtleSk7CisgICAgaWYgKG0tPnZhbHVlX2ZyZWVfZnVuYyAmJiAhc3RvbGVuKQorICAgICAgICBtLT52YWx1ZV9mcmVlX2Z1bmMoZS0+dmFsdWUpOworCisgICAgYXZhaGlfZnJlZShlKTsKK30KKworQXZhaGlIYXNobWFwKiBhdmFoaV9oYXNobWFwX25ldyhBdmFoaUhhc2hGdW5jIGhhc2hfZnVuYywgQXZhaGlFcXVhbEZ1bmMgZXF1YWxfZnVuYywgQXZhaGlGcmVlRnVuYyBrZXlfZnJlZV9mdW5jLCBBdmFoaUZyZWVGdW5jIHZhbHVlX2ZyZWVfZnVuYykgeworICAgIEF2YWhpSGFzaG1hcCAqbTsKKworICAgIGFzc2VydChoYXNoX2Z1bmMpOworICAgIGFzc2VydChlcXVhbF9mdW5jKTsKKworICAgIGlmICghKG0gPSBhdmFoaV9uZXcwKEF2YWhpSGFzaG1hcCwgMSkpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIG0tPmhhc2hfZnVuYyA9IGhhc2hfZnVuYzsKKyAgICBtLT5lcXVhbF9mdW5jID0gZXF1YWxfZnVuYzsKKyAgICBtLT5rZXlfZnJlZV9mdW5jID0ga2V5X2ZyZWVfZnVuYzsKKyAgICBtLT52YWx1ZV9mcmVlX2Z1bmMgPSB2YWx1ZV9mcmVlX2Z1bmM7CisKKyAgICBBVkFISV9MTElTVF9IRUFEX0lOSVQoRW50cnksIG0tPmVudHJpZXNfbGlzdCk7CisKKyAgICByZXR1cm4gbTsKK30KKwordm9pZCBhdmFoaV9oYXNobWFwX2ZyZWUoQXZhaGlIYXNobWFwICptKSB7CisgICAgYXNzZXJ0KG0pOworCisgICAgd2hpbGUgKG0tPmVudHJpZXNfbGlzdCkKKyAgICAgICAgZW50cnlfZnJlZShtLCBtLT5lbnRyaWVzX2xpc3QsIDApOworCisgICAgYXZhaGlfZnJlZShtKTsKK30KKwordm9pZCogYXZhaGlfaGFzaG1hcF9sb29rdXAoQXZhaGlIYXNobWFwICptLCBjb25zdCB2b2lkICprZXkpIHsKKyAgICBFbnRyeSAqZTsKKworICAgIGFzc2VydChtKTsKKworICAgIGlmICghKGUgPSBlbnRyeV9nZXQobSwga2V5KSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmV0dXJuIGUtPnZhbHVlOworfQorCitpbnQgYXZhaGlfaGFzaG1hcF9pbnNlcnQoQXZhaGlIYXNobWFwICptLCB2b2lkICprZXksIHZvaWQgKnZhbHVlKSB7CisgICAgdW5zaWduZWQgaWR4OworICAgIEVudHJ5ICplOworCisgICAgYXNzZXJ0KG0pOworCisgICAgaWYgKChlID0gZW50cnlfZ2V0KG0sIGtleSkpKSB7CisgICAgICAgIGlmIChtLT5rZXlfZnJlZV9mdW5jKQorICAgICAgICAgICAgbS0+a2V5X2ZyZWVfZnVuYyhrZXkpOworICAgICAgICBpZiAobS0+dmFsdWVfZnJlZV9mdW5jKQorICAgICAgICAgICAgbS0+dmFsdWVfZnJlZV9mdW5jKHZhbHVlKTsKKworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBpZiAoIShlID0gYXZhaGlfbmV3KEVudHJ5LCAxKSkpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGUtPmhhc2htYXAgPSBtOworICAgIGUtPmtleSA9IGtleTsKKyAgICBlLT52YWx1ZSA9IHZhbHVlOworCisgICAgQVZBSElfTExJU1RfUFJFUEVORChFbnRyeSwgZW50cmllcywgbS0+ZW50cmllc19saXN0LCBlKTsKKworICAgIGlkeCA9IG0tPmhhc2hfZnVuYyhrZXkpICUgSEFTSF9NQVBfU0laRTsKKyAgICBBVkFISV9MTElTVF9QUkVQRU5EKEVudHJ5LCBidWNrZXQsIG0tPmVudHJpZXNbaWR4XSwgZSk7CisKKyAgICByZXR1cm4gMDsKK30KKworCitpbnQgYXZhaGlfaGFzaG1hcF9yZXBsYWNlKEF2YWhpSGFzaG1hcCAqbSwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSkgeworICAgIHVuc2lnbmVkIGlkeDsKKyAgICBFbnRyeSAqZTsKKworICAgIGFzc2VydChtKTsKKworICAgIGlmICgoZSA9IGVudHJ5X2dldChtLCBrZXkpKSkgeworICAgICAgICBpZiAobS0+a2V5X2ZyZWVfZnVuYykKKyAgICAgICAgICAgIG0tPmtleV9mcmVlX2Z1bmMoZS0+a2V5KTsKKyAgICAgICAgaWYgKG0tPnZhbHVlX2ZyZWVfZnVuYykKKyAgICAgICAgICAgIG0tPnZhbHVlX2ZyZWVfZnVuYyhlLT52YWx1ZSk7CisKKyAgICAgICAgZS0+a2V5ID0ga2V5OworICAgICAgICBlLT52YWx1ZSA9IHZhbHVlOworCisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIGlmICghKGUgPSBhdmFoaV9uZXcoRW50cnksIDEpKSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgZS0+aGFzaG1hcCA9IG07CisgICAgZS0+a2V5ID0ga2V5OworICAgIGUtPnZhbHVlID0gdmFsdWU7CisKKyAgICBBVkFISV9MTElTVF9QUkVQRU5EKEVudHJ5LCBlbnRyaWVzLCBtLT5lbnRyaWVzX2xpc3QsIGUpOworCisgICAgaWR4ID0gbS0+aGFzaF9mdW5jKGtleSkgJSBIQVNIX01BUF9TSVpFOworICAgIEFWQUhJX0xMSVNUX1BSRVBFTkQoRW50cnksIGJ1Y2tldCwgbS0+ZW50cmllc1tpZHhdLCBlKTsKKworICAgIHJldHVybiAwOworfQorCit2b2lkIGF2YWhpX2hhc2htYXBfcmVtb3ZlKEF2YWhpSGFzaG1hcCAqbSwgY29uc3Qgdm9pZCAqa2V5KSB7CisgICAgRW50cnkgKmU7CisKKyAgICBhc3NlcnQobSk7CisKKyAgICBpZiAoIShlID0gZW50cnlfZ2V0KG0sIGtleSkpKQorICAgICAgICByZXR1cm47CisKKyAgICBlbnRyeV9mcmVlKG0sIGUsIDApOworfQorCit2b2lkIGF2YWhpX2hhc2htYXBfZm9yZWFjaChBdmFoaUhhc2htYXAgKm0sIEF2YWhpSGFzaG1hcEZvcmVhY2hDYWxsYmFjayBjYWxsYmFjaywgdm9pZCAqdXNlcmRhdGEpIHsKKyAgICBFbnRyeSAqZSwgKm5leHQ7CisgICAgYXNzZXJ0KG0pOworICAgIGFzc2VydChjYWxsYmFjayk7CisKKyAgICBmb3IgKGUgPSBtLT5lbnRyaWVzX2xpc3Q7IGU7IGUgPSBuZXh0KSB7CisgICAgICAgIG5leHQgPSBlLT5lbnRyaWVzX25leHQ7CisKKyAgICAgICAgY2FsbGJhY2soZS0+a2V5LCBlLT52YWx1ZSwgdXNlcmRhdGEpOworICAgIH0KK30KKwordW5zaWduZWQgYXZhaGlfc3RyaW5nX2hhc2goY29uc3Qgdm9pZCAqZGF0YSkgeworICAgIGNvbnN0IGNoYXIgKnAgPSBkYXRhOworICAgIHVuc2lnbmVkIGhhc2ggPSAwOworCisgICAgYXNzZXJ0KHApOworCisgICAgZm9yICg7ICpwOyBwKyspCisgICAgICAgIGhhc2ggPSAzMSAqIGhhc2ggKyAqcDsKKworICAgIHJldHVybiBoYXNoOworfQorCitpbnQgYXZhaGlfc3RyaW5nX2VxdWFsKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpIHsKKyAgICBjb25zdCBjaGFyICpwID0gYSwgKnEgPSBiOworCisgICAgYXNzZXJ0KHApOworICAgIGFzc2VydChxKTsKKworICAgIHJldHVybiBzdHJjbXAocCwgcSkgPT0gMDsKK30KKwordW5zaWduZWQgYXZhaGlfaW50X2hhc2goY29uc3Qgdm9pZCAqZGF0YSkgeworICAgIGNvbnN0IGludCAqaSA9IGRhdGE7CisKKyAgICBhc3NlcnQoaSk7CisKKyAgICByZXR1cm4gKHVuc2lnbmVkKSAqaTsKK30KKworaW50IGF2YWhpX2ludF9lcXVhbChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKSB7CisgICAgY29uc3QgaW50ICpfYSA9IGEsICpfYiA9IGI7CisKKyAgICBhc3NlcnQoX2EpOworICAgIGFzc2VydChfYik7CisKKyAgICByZXR1cm4gKl9hID09ICpfYjsKK30KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL2hhc2htYXAuaCBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL2hhc2htYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDdlODFmCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvaGFzaG1hcC5oCkBAIC0wLDAgKzEsNTMgQEAKKyNpZm5kZWYgZm9vaGFzaG1hcGhmb28KKyNkZWZpbmUgZm9vaGFzaG1hcGhmb28KKworLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2NkZWNsLmg+CisKK0FWQUhJX0NfREVDTF9CRUdJTgorCit0eXBlZGVmIHN0cnVjdCBBdmFoaUhhc2htYXAgQXZhaGlIYXNobWFwOworCit0eXBlZGVmIHVuc2lnbmVkICgqQXZhaGlIYXNoRnVuYykoY29uc3Qgdm9pZCAqZGF0YSk7Cit0eXBlZGVmIGludCAoKkF2YWhpRXF1YWxGdW5jKShjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKTsKK3R5cGVkZWYgdm9pZCAoKkF2YWhpRnJlZUZ1bmMpKHZvaWQgKnApOworCitBdmFoaUhhc2htYXAqIGF2YWhpX2hhc2htYXBfbmV3KEF2YWhpSGFzaEZ1bmMgaGFzaF9mdW5jLCBBdmFoaUVxdWFsRnVuYyBlcXVhbF9mdW5jLCBBdmFoaUZyZWVGdW5jIGtleV9mcmVlX2Z1bmMsIEF2YWhpRnJlZUZ1bmMgdmFsdWVfZnJlZV9mdW5jKTsKKwordm9pZCBhdmFoaV9oYXNobWFwX2ZyZWUoQXZhaGlIYXNobWFwICptKTsKK3ZvaWQqIGF2YWhpX2hhc2htYXBfbG9va3VwKEF2YWhpSGFzaG1hcCAqbSwgY29uc3Qgdm9pZCAqa2V5KTsKK2ludCBhdmFoaV9oYXNobWFwX2luc2VydChBdmFoaUhhc2htYXAgKm0sIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUpOworaW50IGF2YWhpX2hhc2htYXBfcmVwbGFjZShBdmFoaUhhc2htYXAgKm0sIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUpOwordm9pZCBhdmFoaV9oYXNobWFwX3JlbW92ZShBdmFoaUhhc2htYXAgKm0sIGNvbnN0IHZvaWQgKmtleSk7CisKK3R5cGVkZWYgdm9pZCAoKkF2YWhpSGFzaG1hcEZvcmVhY2hDYWxsYmFjaykodm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwgdm9pZCAqdXNlcmRhdGEpOworCit2b2lkIGF2YWhpX2hhc2htYXBfZm9yZWFjaChBdmFoaUhhc2htYXAgKm0sIEF2YWhpSGFzaG1hcEZvcmVhY2hDYWxsYmFjayBjYWxsYmFjaywgdm9pZCAqdXNlcmRhdGEpOworCit1bnNpZ25lZCBhdmFoaV9zdHJpbmdfaGFzaChjb25zdCB2b2lkICpkYXRhKTsKK2ludCBhdmFoaV9zdHJpbmdfZXF1YWwoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYik7CisKK3Vuc2lnbmVkIGF2YWhpX2ludF9oYXNoKGNvbnN0IHZvaWQgKmRhdGEpOworaW50IGF2YWhpX2ludF9lcXVhbChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKTsKKworQVZBSElfQ19ERUNMX0VORAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL2lmYWNlLWxpbnV4LmMgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9pZmFjZS1saW51eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNDk3YmMKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9pZmFjZS1saW51eC5jCkBAIC0wLDAgKzEsMzkxIEBACisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vbWFsbG9jLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJpZmFjZS5oIgorI2luY2x1ZGUgImlmYWNlLWxpbnV4LmgiCisKKyNpZm5kZWYgSUZMQV9SVEEKKyNpbmNsdWRlIDxsaW51eC9pZl9hZGRyLmg+CisjZGVmaW5lIElGTEFfUlRBKHIpICAoKHN0cnVjdCBydGF0dHIqKSgoKGNoYXIqKShyKSkgKyBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IGlmaW5mb21zZykpKSkKKyNlbmRpZgorCisjaWZuZGVmIElGQV9SVEEKKyNpbmNsdWRlIDxsaW51eC9pZl9hZGRyLmg+CisjZGVmaW5lIElGQV9SVEEocikgICgoc3RydWN0IHJ0YXR0ciopKCgoY2hhciopKHIpKSArIE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgaWZhZGRybXNnKSkpKQorI2VuZGlmCisKK3N0YXRpYyBpbnQgbmV0bGlua19saXN0X2l0ZW1zKEF2YWhpTmV0bGluayAqbmwsIHVpbnQxNl90IHR5cGUsIHVuc2lnbmVkICpyZXRfc2VxKSB7CisgICAgc3RydWN0IG5sbXNnaGRyICpuOworICAgIHN0cnVjdCBydGdlbm1zZyAqZ2VuOworICAgIHVpbnQ4X3QgcmVxWzEwMjRdOworCisgICAgLyogSXNzdWUgYSB3aWxkIGR1bXAgTkVUTElOSyByZXF1ZXN0ICovCisKKyAgICBtZW1zZXQoJnJlcSwgMCwgc2l6ZW9mKHJlcSkpOworICAgIG4gPSAoc3RydWN0IG5sbXNnaGRyKikgcmVxOworICAgIG4tPm5sbXNnX2xlbiA9IE5MTVNHX0xFTkdUSChzaXplb2Yoc3RydWN0IHJ0Z2VubXNnKSk7CisgICAgbi0+bmxtc2dfdHlwZSA9IHR5cGU7CisgICAgbi0+bmxtc2dfZmxhZ3MgPSBOTE1fRl9SRVFVRVNUfE5MTV9GX0RVTVA7CisgICAgbi0+bmxtc2dfcGlkID0gMDsKKworICAgIGdlbiA9IE5MTVNHX0RBVEEobik7CisgICAgbWVtc2V0KGdlbiwgMCwgc2l6ZW9mKHN0cnVjdCBydGdlbm1zZykpOworICAgIGdlbi0+cnRnZW5fZmFtaWx5ID0gQUZfVU5TUEVDOworCisgICAgcmV0dXJuIGF2YWhpX25ldGxpbmtfc2VuZChubCwgbiwgcmV0X3NlcSk7Cit9CisKK3N0YXRpYyB2b2lkIG5ldGxpbmtfY2FsbGJhY2soQXZhaGlOZXRsaW5rICpubCwgc3RydWN0IG5sbXNnaGRyICpuLCB2b2lkKiB1c2VyZGF0YSkgeworICAgIEF2YWhpSW50ZXJmYWNlTW9uaXRvciAqbSA9IHVzZXJkYXRhOworCisgICAgLyogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBmb3IgZXZlcnkgUlRORVRMSU5LIHJlc3BvbnNlIHBhY2tldCAqLworCisgICAgYXNzZXJ0KG0pOworICAgIGFzc2VydChuKTsKKyAgICBhc3NlcnQobS0+b3NkZXAubmV0bGluayA9PSBubCk7CisKKyAgICBpZiAobi0+bmxtc2dfdHlwZSA9PSBSVE1fTkVXTElOSykgeworCisgICAgICAgIC8qIEEgbmV3IGludGVyZmFjZSBhcHBlYXJlZCBvciBhbiBleGlzdGluZyBvbmUgaGFzIGJlZW4gbW9kaWZpZWQgKi8KKworICAgICAgICBzdHJ1Y3QgaWZpbmZvbXNnICppZmluZm9tc2cgPSBOTE1TR19EQVRBKG4pOworICAgICAgICBBdmFoaUh3SW50ZXJmYWNlICpodzsKKyAgICAgICAgc3RydWN0IHJ0YXR0ciAqYSA9IE5VTEw7CisgICAgICAgIHNpemVfdCBsOworCisgICAgICAgIC8qIEEgKHN1cGVyZmx1b3VzPykgc2FuaXR5IGNoZWNrICovCisgICAgICAgIGlmIChpZmluZm9tc2ctPmlmaV9mYW1pbHkgIT0gQUZfVU5TUEVDKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8qIENoZWNrIHdoZXRoZXIgdGhlcmUgYWxyZWFkeSBpcyBhbiBBdmFoaUh3SW50ZXJmYWNlIG9iamVjdAorICAgICAgICAgKiBmb3IgdGhpcyBsaW5rLCBzbyB0aGF0IHdlIGNhbiB1cGRhdGUgaXRzIGRhdGEuIE5vdGUgdGhhdAorICAgICAgICAgKiBOZXRsaW5rIHNlbmRzIHVzIGFuIFJUTV9ORVdMSU5LIG5vdCBvbmx5IHdoZW4gYSBuZXcKKyAgICAgICAgICogaW50ZXJmYWNlIGFwcGVhcnMsIGJ1dCB3aGVuIGl0IGNoYW5nZXMsIHRvbyAqLworCisgICAgICAgIGlmICghKGh3ID0gYXZhaGlfaW50ZXJmYWNlX21vbml0b3JfZ2V0X2h3X2ludGVyZmFjZShtLCBpZmluZm9tc2ctPmlmaV9pbmRleCkpKQorCisgICAgICAgICAgICAvKiBObyBvYmplY3QgZm91bmQsIHNvIGxldCdzIGNyZWF0ZSBhIG5ldworICAgICAgICAgICAgICogb25lLiBhdmFoaV9od19pbnRlcmZhY2VfbmV3KCkgd2lsbCBjYWxsCisgICAgICAgICAgICAgKiBhdmFoaV9pbnRlcmZhY2VfbmV3KCkgaW50ZXJuYWxseSB0d2ljZSBmb3IgSVB2NCBhbmQKKyAgICAgICAgICAgICAqIElQdjYsIHNvIHRoZXJlIGlzIG5vIG5lZWQgZm9yIHVzIHRvIGRvIHRoYXQKKyAgICAgICAgICAgICAqIG91cnNlbHZlcyAqLworICAgICAgICAgICAgaWYgKCEoaHcgPSBhdmFoaV9od19pbnRlcmZhY2VfbmV3KG0sIChBdmFoaUlmSW5kZXgpIGlmaW5mb21zZy0+aWZpX2luZGV4KSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOyAvKiBPT00gKi8KKworICAgICAgICAvKiBDaGVjayB3aGV0aGVyIHRoZSBmbGFncyBvZiB0aGlzIGludGVyZmFjZSBhcmUgT0sgZm9yIHVzICovCisgICAgICAgIGh3LT5mbGFnc19vayA9CisgICAgICAgICAgICAoaWZpbmZvbXNnLT5pZmlfZmxhZ3MgJiBJRkZfVVApICYmCisgICAgICAgICAgICAoIW0tPnNlcnZlci0+Y29uZmlnLnVzZV9pZmZfcnVubmluZyB8fCAoaWZpbmZvbXNnLT5pZmlfZmxhZ3MgJiBJRkZfUlVOTklORykpICYmCisgICAgICAgICAgICAhKGlmaW5mb21zZy0+aWZpX2ZsYWdzICYgSUZGX0xPT1BCQUNLKSAmJgorICAgICAgICAgICAgKGlmaW5mb21zZy0+aWZpX2ZsYWdzICYgSUZGX01VTFRJQ0FTVCkgJiYKKyAgICAgICAgICAgIChtLT5zZXJ2ZXItPmNvbmZpZy5hbGxvd19wb2ludF90b19wb2ludCB8fCAhKGlmaW5mb21zZy0+aWZpX2ZsYWdzICYgSUZGX1BPSU5UT1BPSU5UKSk7CisKKyAgICAgICAgLyogSGFuZGxlIGludGVyZmFjZSBhdHRyaWJ1dGVzICovCisgICAgICAgIGwgPSBOTE1TR19QQVlMT0FEKG4sIHNpemVvZihzdHJ1Y3QgaWZpbmZvbXNnKSk7CisgICAgICAgIGEgPSBJRkxBX1JUQShpZmluZm9tc2cpOworCisgICAgICAgIHdoaWxlIChSVEFfT0soYSwgbCkpIHsKKyAgICAgICAgICAgIHN3aXRjaChhLT5ydGFfdHlwZSkgeworICAgICAgICAgICAgICAgIGNhc2UgSUZMQV9JRk5BTUU6CisKKyAgICAgICAgICAgICAgICAgICAgLyogRmlsbCBpbiBpbnRlcmZhY2UgbmFtZSAqLworICAgICAgICAgICAgICAgICAgICBhdmFoaV9mcmVlKGh3LT5uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgaHctPm5hbWUgPSBhdmFoaV9zdHJuZHVwKFJUQV9EQVRBKGEpLCBSVEFfUEFZTE9BRChhKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBJRkxBX01UVToKKworICAgICAgICAgICAgICAgICAgICAvKiBGaWxsIGluIE1UVSAqLworICAgICAgICAgICAgICAgICAgICBhc3NlcnQoUlRBX1BBWUxPQUQoYSkgPT0gc2l6ZW9mKHVuc2lnbmVkIGludCkpOworICAgICAgICAgICAgICAgICAgICBody0+bXR1ID0gKigodW5zaWduZWQgaW50KikgUlRBX0RBVEEoYSkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgSUZMQV9BRERSRVNTOgorCisgICAgICAgICAgICAgICAgICAgIC8qIEZpbGwgaW4gaGFyZHdhcmUgKE1BQykgYWRkcmVzcyAqLworICAgICAgICAgICAgICAgICAgICBody0+bWFjX2FkZHJlc3Nfc2l6ZSA9IFJUQV9QQVlMT0FEKGEpOworICAgICAgICAgICAgICAgICAgICBpZiAoaHctPm1hY19hZGRyZXNzX3NpemUgPiBBVkFISV9NQUNfQUREUkVTU19NQVgpCisgICAgICAgICAgICAgICAgICAgICAgICBody0+bWFjX2FkZHJlc3Nfc2l6ZSA9IEFWQUhJX01BQ19BRERSRVNTX01BWDsKKworICAgICAgICAgICAgICAgICAgICBtZW1jcHkoaHctPm1hY19hZGRyZXNzLCBSVEFfREFUQShhKSwgaHctPm1hY19hZGRyZXNzX3NpemUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYSA9IFJUQV9ORVhUKGEsIGwpOworICAgICAgICB9CisKKyAgICAgICAgLyogQ2hlY2sgd2hldGhlciB0aGlzIGludGVyZmFjZSBpcyBub3cgInJlbGV2YW50IiBmb3IgdXMuIElmCisgICAgICAgICAqIGl0IGlzIEF2YWhpIHdpbGwgc3RhcnQgdG8gYW5ub3VuY2UgaXRzIHJlY29yZHMgb24gdGhpcworICAgICAgICAgKiBpbnRlcmZhY2UgYW5kIHNlbmQgb3V0IHF1ZXJpZXMgZm9yIHN1YnNjcmliZWQgcmVjb3JkcyBvbgorICAgICAgICAgKiBpdCAqLworICAgICAgICBhdmFoaV9od19pbnRlcmZhY2VfY2hlY2tfcmVsZXZhbnQoaHcpOworCisgICAgICAgIC8qIFVwZGF0ZSBhbnkgYXNzb2NpYXRlZCBSUnMgb2YgdGhpcyBpbnRlcmZhY2UuIChpLmUuIHRoZQorICAgICAgICAgKiBfd29ya3N0YXRpb24uX3RjcCByZWNvcmQgY29udGFpbmluZyB0aGUgTUFDIGFkZHJlc3MpICovCisgICAgICAgIGF2YWhpX2h3X2ludGVyZmFjZV91cGRhdGVfcnJzKGh3LCAwKTsKKworICAgIH0gZWxzZSBpZiAobi0+bmxtc2dfdHlwZSA9PSBSVE1fREVMTElOSykgeworCisgICAgICAgIC8qIEFuIGludGVyZmFjZSBoYXMgYmVlbiByZW1vdmVkICovCisKKyAgICAgICAgc3RydWN0IGlmaW5mb21zZyAqaWZpbmZvbXNnID0gTkxNU0dfREFUQShuKTsKKyAgICAgICAgQXZhaGlId0ludGVyZmFjZSAqaHc7CisKKyAgICAgICAgLyogQSAoc3VwZXJmbHVvdXM/KSBzYW5pdHkgY2hlY2sgKi8KKyAgICAgICAgaWYgKGlmaW5mb21zZy0+aWZpX2ZhbWlseSAhPSBBRl9VTlNQRUMpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgLyogR2V0IGEgcmVmZXJlbmNlIHRvIG91ciBBdmFoaUh3SW50ZXJmYWNlIG9iamVjdCBvZiB0aGlzIGludGVyZmFjZSAqLworICAgICAgICBpZiAoIShodyA9IGF2YWhpX2ludGVyZmFjZV9tb25pdG9yX2dldF9od19pbnRlcmZhY2UobSwgKEF2YWhpSWZJbmRleCkgaWZpbmZvbXNnLT5pZmlfaW5kZXgpKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvKiBGcmVlIG91ciBvYmplY3QgKi8KKyAgICAgICAgYXZhaGlfaHdfaW50ZXJmYWNlX2ZyZWUoaHcsIDApOworCisgICAgfSBlbHNlIGlmIChuLT5ubG1zZ190eXBlID09IFJUTV9ORVdBRERSIHx8IG4tPm5sbXNnX3R5cGUgPT0gUlRNX0RFTEFERFIpIHsKKworICAgICAgICAvKiBBbiBhZGRyZXNzIGhhcyBiZWVuIGFkZGVkLCBtb2RpZmllZCBvciByZW1vdmVkICovCisKKyAgICAgICAgc3RydWN0IGlmYWRkcm1zZyAqaWZhZGRybXNnID0gTkxNU0dfREFUQShuKTsKKyAgICAgICAgQXZhaGlJbnRlcmZhY2UgKmk7CisgICAgICAgIHN0cnVjdCBydGF0dHIgKmEgPSBOVUxMOworICAgICAgICBzaXplX3QgbDsKKyAgICAgICAgQXZhaGlBZGRyZXNzIHJhZGRyLCBybG9jYWwsICpyOworICAgICAgICBpbnQgcmFkZHJfdmFsaWQgPSAwLCBybG9jYWxfdmFsaWQgPSAwOworCisgICAgICAgIC8qIFdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gSVB2NCBhbmQgSVB2NiAqLworICAgICAgICBpZiAoaWZhZGRybXNnLT5pZmFfZmFtaWx5ICE9IEFGX0lORVQgJiYgaWZhZGRybXNnLT5pZmFfZmFtaWx5ICE9IEFGX0lORVQ2KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8qIFRyeSB0byBnZXQgYSByZWZlcmVuY2UgdG8gb3VyIEF2YWhpSW50ZXJmYWNlIG9iamVjdCBmb3IgdGhlCisgICAgICAgICAqIGludGVyZmFjZSB0aGlzIGFkZHJlc3MgaXMgYXNzaWduZWQgdG8uIElmIHRoZXIgaXMgbm8gb2JqZWN0CisgICAgICAgICAqIGZvciB0aGlzIGludGVyZmFjZSwgd2UgaWdub3JlIHRoaXMgYWRkcmVzcy4gKi8KKyAgICAgICAgaWYgKCEoaSA9IGF2YWhpX2ludGVyZmFjZV9tb25pdG9yX2dldF9pbnRlcmZhY2UobSwgKEF2YWhpSWZJbmRleCkgaWZhZGRybXNnLT5pZmFfaW5kZXgsIGF2YWhpX2FmX3RvX3Byb3RvKGlmYWRkcm1zZy0+aWZhX2ZhbWlseSkpKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvKiBGaWxsIGluIGFkZHJlc3MgZmFtaWx5IGZvciBvdXIgbmV3IGFkZHJlc3MgKi8KKyAgICAgICAgcmxvY2FsLnByb3RvID0gcmFkZHIucHJvdG8gPSBhdmFoaV9hZl90b19wcm90byhpZmFkZHJtc2ctPmlmYV9mYW1pbHkpOworCisgICAgICAgIGwgPSBOTE1TR19QQVlMT0FEKG4sIHNpemVvZihzdHJ1Y3QgaWZhZGRybXNnKSk7CisgICAgICAgIGEgPSBJRkFfUlRBKGlmYWRkcm1zZyk7CisKKyAgICAgICAgd2hpbGUgKFJUQV9PSyhhLCBsKSkgeworCisgICAgICAgICAgICBzd2l0Y2goYS0+cnRhX3R5cGUpIHsKKworICAgICAgICAgICAgICAgIGNhc2UgSUZBX0FERFJFU1M6CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKChybG9jYWwucHJvdG8gPT0gQVZBSElfUFJPVE9fSU5FVDYgJiYgUlRBX1BBWUxPQUQoYSkgIT0gMTYpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAocmxvY2FsLnByb3RvID09IEFWQUhJX1BST1RPX0lORVQgJiYgUlRBX1BBWUxPQUQoYSkgIT0gNCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgICAgICAgICAgbWVtY3B5KHJsb2NhbC5kYXRhLmRhdGEsIFJUQV9EQVRBKGEpLCBSVEFfUEFZTE9BRChhKSk7CisgICAgICAgICAgICAgICAgICAgIHJsb2NhbF92YWxpZCA9IDE7CisKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIElGQV9MT0NBTDoKKworICAgICAgICAgICAgICAgICAgICAvKiBGaWxsIGluIGxvY2FsIGFkZHJlc3MgZGF0YS4gVXN1YWxseSB0aGlzIGlzCisgICAgICAgICAgICAgICAgICAgICAqIHByZWZlcmFibGUgb3ZlciBJRkFfQUREUkVTUyBpZiBib3RoIGFyZSBzZXQsCisgICAgICAgICAgICAgICAgICAgICAqIHNpbmNlIHRoaXMgcmVmZXJzIHRvIHRoZSBsb2NhbCBhZGRyZXNzIG9mIGEgUFBQCisgICAgICAgICAgICAgICAgICAgICAqIGxpbmsgd2hpbGUgSUZBX0FERFJFU1MgcmVmZXJzIHRvIHRoZSBvdGhlcgorICAgICAgICAgICAgICAgICAgICAgKiBlbmQuICovCisKKyAgICAgICAgICAgICAgICAgICAgaWYgKChyYWRkci5wcm90byA9PSBBVkFISV9QUk9UT19JTkVUNiAmJiBSVEFfUEFZTE9BRChhKSAhPSAxNikgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIChyYWRkci5wcm90byA9PSBBVkFISV9QUk9UT19JTkVUICYmIFJUQV9QQVlMT0FEKGEpICE9IDQpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAgICAgICAgIG1lbWNweShyYWRkci5kYXRhLmRhdGEsIFJUQV9EQVRBKGEpLCBSVEFfUEFZTE9BRChhKSk7CisgICAgICAgICAgICAgICAgICAgIHJhZGRyX3ZhbGlkID0gMTsKKworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYSA9IFJUQV9ORVhUKGEsIGwpOworICAgICAgICB9CisKKyAgICAgICAgLyogSWYgdGhlcmUgd2FzIG5vIGFkcmVzcyBhdHRhY2hlZCB0byB0aGlzIG1lc3NhZ2UsIGxldCdzIHF1aXQuICovCisgICAgICAgIGlmIChybG9jYWxfdmFsaWQpCisgICAgICAgICAgICByID0gJnJsb2NhbDsKKyAgICAgICAgZWxzZSBpZiAocmFkZHJfdmFsaWQpCisgICAgICAgICAgICByID0gJnJhZGRyOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKG4tPm5sbXNnX3R5cGUgPT0gUlRNX05FV0FERFIpIHsKKyAgICAgICAgICAgIEF2YWhpSW50ZXJmYWNlQWRkcmVzcyAqYWRkcjsKKworICAgICAgICAgICAgLyogVGhpcyBhZGRyZXNzIGlzIG5ldyBvciBoYXMgYmVlbiBtb2RpZmllZCwgc28gbGV0J3MgZ2V0IGFuIG9iamVjdCBmb3IgaXQgKi8KKyAgICAgICAgICAgIGlmICghKGFkZHIgPSBhdmFoaV9pbnRlcmZhY2VfbW9uaXRvcl9nZXRfYWRkcmVzcyhtLCBpLCByKSkpCisKKyAgICAgICAgICAgICAgICAvKiBNbW0sIG5vIG9iamVjdCBleGlzdGluZyB5ZXQsIHNvIGxldCdzIGNyZWF0ZSBhIG5ldyBvbmUgKi8KKyAgICAgICAgICAgICAgICBpZiAoIShhZGRyID0gYXZhaGlfaW50ZXJmYWNlX2FkZHJlc3NfbmV3KG0sIGksIHIsIGlmYWRkcm1zZy0+aWZhX3ByZWZpeGxlbikpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47IC8qIE9PTSAqLworCisgICAgICAgICAgICAvKiBVcGRhdGUgdGhlIHNjb3BlIGZpZWxkIGZvciB0aGUgYWRkcmVzcyAqLworICAgICAgICAgICAgYWRkci0+Z2xvYmFsX3Njb3BlID0gaWZhZGRybXNnLT5pZmFfc2NvcGUgPT0gUlRfU0NPUEVfVU5JVkVSU0UgfHwgaWZhZGRybXNnLT5pZmFfc2NvcGUgPT0gUlRfU0NPUEVfU0lURTsKKyAgICAgICAgICAgIGFkZHItPmRlcHJlY2F0ZWQgPSAhIShpZmFkZHJtc2ctPmlmYV9mbGFncyAmIElGQV9GX0RFUFJFQ0FURUQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQXZhaGlJbnRlcmZhY2VBZGRyZXNzICphZGRyOworICAgICAgICAgICAgYXNzZXJ0KG4tPm5sbXNnX3R5cGUgPT0gUlRNX0RFTEFERFIpOworCisgICAgICAgICAgICAvKiBUcnkgdG8gZ2V0IGEgcmVmZXJlbmNlIHRvIG91ciBBdmFoaUludGVyZmFjZUFkZHJlc3Mgb2JqZWN0IGZvciB0aGlzIGFkZHJlc3MgKi8KKyAgICAgICAgICAgIGlmICghKGFkZHIgPSBhdmFoaV9pbnRlcmZhY2VfbW9uaXRvcl9nZXRfYWRkcmVzcyhtLCBpLCByKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAvKiBBbmQgZnJlZSBpdCAqLworICAgICAgICAgICAgYXZhaGlfaW50ZXJmYWNlX2FkZHJlc3NfZnJlZShhZGRyKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIEF2YWhpIG9ubHkgY29uc2lkZXJzIGludGVyZmFjZXMgd2l0aCBhdCBsZWFzdCBvbmUgYWRkcmVzcworICAgICAgICAgKiBhdHRhY2hlZCByZWxldmFudC4gU2luY2Ugd2UgbWlnaCBoYXZlIGFkZGVkIG9yIHJlbW92ZWQgYW4KKyAgICAgICAgICogYWRkcmVzcywgbGV0J3MgaGF2ZSBpdCBjaGVjayBhZ2FpbiB3aGV0aGVyIHRoZSBpbnRlcmZhY2UgaXMKKyAgICAgICAgICogbm93IHJlbGV2YW50ICovCisgICAgICAgIGF2YWhpX2ludGVyZmFjZV9jaGVja19yZWxldmFudChpKTsKKworICAgICAgICAvKiBVcGRhdGUgYW55IGFzc29jaWF0ZWQgUlJzLCBsaWtlIEEgb3IgQUFBQSBmb3Igb3VyIG5ldy9yZW1vdmVkIGFkZHJlc3MgKi8KKyAgICAgICAgYXZhaGlfaW50ZXJmYWNlX3VwZGF0ZV9ycnMoaSwgMCk7CisKKyAgICB9IGVsc2UgaWYgKG4tPm5sbXNnX3R5cGUgPT0gTkxNU0dfRE9ORSkgeworCisgICAgICAgIC8qIFRoaXMgd2lsZCBkdW1wIHJlcXVlc3QgZW5kZWQsIHNvIGxldCdzIHNlZSB3aGF0IHdlIGRvIG5leHQgKi8KKworICAgICAgICBpZiAobS0+b3NkZXAubGlzdCA9PSBMSVNUX0lGQUNFKSB7CisKKyAgICAgICAgICAgIC8qIE1tbW0sIGludGVyZmFjZXMgaGF2ZSBiZWVuIHdpbGQgZHVtcGVkIGFscmVhZHksIHNvCisgICAgICAgICAgICAgKiBsZXQncyBnbyBvbiB3aXRoIHdpbGQgZHVtcGluZyB0aGUgYWRkcmVzc2VzICovCisKKyAgICAgICAgICAgIGlmIChuZXRsaW5rX2xpc3RfaXRlbXMobS0+b3NkZXAubmV0bGluaywgUlRNX0dFVEFERFIsICZtLT5vc2RlcC5xdWVyeV9hZGRyX3NlcSkgPCAwKSB7CisgICAgICAgICAgICAgICAgYXZhaGlfbG9nX3dhcm4oIk5FVExJTks6IEZhaWxlZCB0byBsaXN0IGFkZHJzOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICAgICAgbS0+b3NkZXAubGlzdCA9IExJU1RfRE9ORTsKKyAgICAgICAgICAgIH0gZWxzZQorCisgICAgICAgICAgICAgICAgLyogVXBkYXRlIHN0YXRlIGluZm9ybWF0aW9uICovCisgICAgICAgICAgICAgICAgbS0+b3NkZXAubGlzdCA9IExJU1RfQUREUjsKKworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIC8qIFdlJ3JlIGRvbmUuIFRlbGwgYXZhaGlfaW50ZXJmYWNlX21vbml0b3Jfc3luYygpIHRvIGZpbmlzaC4gKi8KKyAgICAgICAgICAgIG0tPm9zZGVwLmxpc3QgPSBMSVNUX0RPTkU7CisKKyAgICAgICAgaWYgKG0tPm9zZGVwLmxpc3QgPT0gTElTVF9ET05FKSB7CisKKyAgICAgICAgICAgIC8qIE9ubHkgYWZ0ZXIgdGhpcyBib29sZWFuIHZhcmlhYmxlIGhhcyBiZWVuIHNldCwgQXZhaGkKKyAgICAgICAgICAgICAqIHdpbGwgc3RhcnQgdG8gYW5ub3VuY2Ugb3IgYnJvd3NlIG9uIGFsbCBpbnRlcmZhY2VzLiBJdAorICAgICAgICAgICAgICogaXMgb3JpZ2luYWx5IHNldCB0byAwLCB3aGljaCBtZWFucyB0aGF0IHJlbGV2YW5jeQorICAgICAgICAgICAgICogY2hlY2tzIGFuZCBSUiB1cGRhdGVzIGFyZSBkaXNhYmxlZCBkdXJpbmcgdGhlIHdpbGQKKyAgICAgICAgICAgICAqIGR1bXBzLiAqLworICAgICAgICAgICAgbS0+bGlzdF9jb21wbGV0ZSA9IDE7CisKKyAgICAgICAgICAgIC8qIFNvIGxldCdzIGNoZWNrIGlmIGFueSBpbnRlcmZhY2VzIGFyZSByZWxldmFudCBub3cgKi8KKyAgICAgICAgICAgIGF2YWhpX2ludGVyZmFjZV9tb25pdG9yX2NoZWNrX3JlbGV2YW50KG0pOworCisgICAgICAgICAgICAvKiBBbmQgdXBkYXRlIGFsbCBSUnMgYXR0YWNoZWQgdG8gYW55IGludGVyZmFjZSAqLworICAgICAgICAgICAgYXZhaGlfaW50ZXJmYWNlX21vbml0b3JfdXBkYXRlX3JycyhtLCAwKTsKKworICAgICAgICAgICAgLyogVGVsbCB0aGUgdXNlciB0aGF0IHRoZSB3aWxkIGR1bXAgaXMgY29tcGxldGUgKi8KKyAgICAgICAgICAgIGF2YWhpX2xvZ19pbmZvKCJOZXR3b3JrIGludGVyZmFjZSBlbnVtZXJhdGlvbiBjb21wbGV0ZWQuIik7CisgICAgICAgIH0KKworICAgIH0gZWxzZSBpZiAobi0+bmxtc2dfdHlwZSA9PSBOTE1TR19FUlJPUiAmJgorICAgICAgICAgICAgICAgKG4tPm5sbXNnX3NlcSA9PSBtLT5vc2RlcC5xdWVyeV9saW5rX3NlcSB8fCBuLT5ubG1zZ19zZXEgPT0gbS0+b3NkZXAucXVlcnlfYWRkcl9zZXEpKSB7CisgICAgICAgIHN0cnVjdCBubG1zZ2VyciAqZSA9IE5MTVNHX0RBVEEgKG4pOworCisgICAgICAgIC8qIFNvbWUga2luZCBvZiBlcnJvciBoYXBwZW5lZC4gTGV0J3MganVzdCB0ZWxsIHRoZSB1c2VyIGFuZAorICAgICAgICAgKiBpZ25vcmUgaXQgb3RoZXJ3aXNlICovCisKKyAgICAgICAgaWYgKGUtPmVycm9yKQorICAgICAgICAgICAgYXZhaGlfbG9nX3dhcm4oIk5FVExJTks6IEZhaWxlZCB0byBicm93c2U6ICVzIiwgc3RyZXJyb3IoLWUtPmVycm9yKSk7CisgICAgfQorfQorCitpbnQgYXZhaGlfaW50ZXJmYWNlX21vbml0b3JfaW5pdF9vc2RlcChBdmFoaUludGVyZmFjZU1vbml0b3IgKm0pIHsKKyAgICBhc3NlcnQobSk7CisKKyAgICAvKiBJbml0aWFsaXplIG91ciBvd24gZGF0YSAqLworCisgICAgbS0+b3NkZXAubmV0bGluayA9IE5VTEw7CisgICAgbS0+b3NkZXAucXVlcnlfYWRkcl9zZXEgPSBtLT5vc2RlcC5xdWVyeV9saW5rX3NlcSA9IDA7CisKKyAgICAvKiBDcmVhdGUgYSBuZXRsaW5rIG9iamVjdCBmb3IgdXMuIEl0IGFic3RyYWN0cyBzb21lIHRoaW5ncyBhbmQKKyAgICAgKiBtYWtlcyBuZXRsaW5rIGVhc2llciB0byB1c2UuIEl0IHdpbGwgYXR0YWNoIHRvIHRoZSBtYWluIGxvb3AKKyAgICAgKiBmb3IgdXMgYW5kIGNhbGwgbmV0bGlua19jYWxsYmFjaygpIHdoZW5ldmVyIGFuIGV2ZW50CisgICAgICogaGFwcGVucy4gKi8KKyAgICBpZiAoIShtLT5vc2RlcC5uZXRsaW5rID0gYXZhaGlfbmV0bGlua19uZXcobS0+c2VydmVyLT5wb2xsX2FwaSwgUlRNR1JQX0xJTkt8UlRNR1JQX0lQVjRfSUZBRERSfFJUTUdSUF9JUFY2X0lGQUREUiwgbmV0bGlua19jYWxsYmFjaywgbSkpKQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICAvKiBTZXQgdGhlIGluaXRpYWwgc3RhdGUuICovCisgICAgbS0+b3NkZXAubGlzdCA9IExJU1RfSUZBQ0U7CisKKyAgICAvKiBTdGFydCB0aGUgd2lsZCBkdW1wIGZvciB0aGUgaW50ZXJmYWNlcyAqLworICAgIGlmIChuZXRsaW5rX2xpc3RfaXRlbXMobS0+b3NkZXAubmV0bGluaywgUlRNX0dFVExJTkssICZtLT5vc2RlcC5xdWVyeV9saW5rX3NlcSkgPCAwKQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICByZXR1cm4gMDsKKworZmFpbDoKKworICAgIGlmIChtLT5vc2RlcC5uZXRsaW5rKSB7CisgICAgICAgIGF2YWhpX25ldGxpbmtfZnJlZShtLT5vc2RlcC5uZXRsaW5rKTsKKyAgICAgICAgbS0+b3NkZXAubmV0bGluayA9IE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCit2b2lkIGF2YWhpX2ludGVyZmFjZV9tb25pdG9yX2ZyZWVfb3NkZXAoQXZhaGlJbnRlcmZhY2VNb25pdG9yICptKSB7CisgICAgYXNzZXJ0KG0pOworCisgICAgaWYgKG0tPm9zZGVwLm5ldGxpbmspIHsKKyAgICAgICAgYXZhaGlfbmV0bGlua19mcmVlKG0tPm9zZGVwLm5ldGxpbmspOworICAgICAgICBtLT5vc2RlcC5uZXRsaW5rID0gTlVMTDsKKyAgICB9Cit9CisKK3ZvaWQgYXZhaGlfaW50ZXJmYWNlX21vbml0b3Jfc3luYyhBdmFoaUludGVyZmFjZU1vbml0b3IgKm0pIHsKKyAgICBhc3NlcnQobSk7CisKKyAgICAvKiBMZXQncyBoYW5kbGUgbmV0bGluayBldmVudHMgdW50aWwgd2UgYXJlIGRvbmUgd2l0aCB3aWxkCisgICAgICogZHVtcGluZyAqLworCisgICAgd2hpbGUgKCFtLT5saXN0X2NvbXBsZXRlKQorICAgICAgICBpZiAoIWF2YWhpX25ldGxpbmtfd29yayhtLT5vc2RlcC5uZXRsaW5rLCAxKSA9PSAwKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAvKiBBdCB0aGlzIHBvaW50IEF2YWhpIGtub3dzIGFib3V0IGFsbCBsb2NhbCBpbnRlcmZhY2VzIGFuZAorICAgICAqIGFkZHJlc3NlcyBpbiBleGlzdGFuY2UuICovCit9CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9pZmFjZS1saW51eC5oIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvaWZhY2UtbGludXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzdmODZkCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvaWZhY2UtbGludXguaApAQCAtMCwwICsxLDQwIEBACisjaWZuZGVmIGZvb2lmYWNlbGludXhoZm9vCisjZGVmaW5lIGZvb2lmYWNlbGludXhoZm9vCisKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKwordHlwZWRlZiBzdHJ1Y3QgQXZhaGlJbnRlcmZhY2VNb25pdG9yT1NEZXAgQXZhaGlJbnRlcmZhY2VNb25pdG9yT1NEZXA7CisKKyNpbmNsdWRlICJuZXRsaW5rLmgiCisKK3N0cnVjdCBBdmFoaUludGVyZmFjZU1vbml0b3JPU0RlcCB7CisgICAgQXZhaGlOZXRsaW5rICpuZXRsaW5rOworCisgICAgdW5zaWduZWQgcXVlcnlfYWRkcl9zZXEsIHF1ZXJ5X2xpbmtfc2VxOworCisgICAgZW51bSB7CisgICAgICAgIExJU1RfSUZBQ0UsCisgICAgICAgIExJU1RfQUREUiwKKyAgICAgICAgTElTVF9ET05FCisgICAgfSBsaXN0OworfTsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL2lmYWNlLW5vbmUuYyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL2lmYWNlLW5vbmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTVlNDk3Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvaWZhY2Utbm9uZS5jCkBAIC0wLDAgKzEsMzAgQEAKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2luY2x1ZGUgImlmYWNlLmgiCisKK2ludCBhdmFoaV9pbnRlcmZhY2VfbW9uaXRvcl9pbml0X29zZGVwKEF2YWhpSW50ZXJmYWNlTW9uaXRvciAqbSkgeworICAgIHJldHVybiAwOworfQorCit2b2lkIGF2YWhpX2ludGVyZmFjZV9tb25pdG9yX2ZyZWVfb3NkZXAoQXZhaGlJbnRlcmZhY2VNb25pdG9yICptKSB7Cit9CisKK3ZvaWQgYXZhaGlfaW50ZXJmYWNlX21vbml0b3Jfc3luYyhBdmFoaUludGVyZmFjZU1vbml0b3IgKm0pIHsKK30KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL2lmYWNlLXBmcm91dGUuYyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL2lmYWNlLXBmcm91dGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTJlOTUzCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvaWZhY2UtcGZyb3V0ZS5jCkBAIC0wLDAgKzEsNTQzIEBACisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9tYWxsb2MuaD4KKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaWZkZWYgSEFWRV9TWVNfU1lTQ1RMX0gKKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CisjZWxzZQorI2luY2x1ZGUgPHN5cy9zb2NraW8uaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0L3JvdXRlLmg+CisjaW5jbHVkZSA8bmV0L2lmLmg+CisjaW5jbHVkZSA8bmV0L2lmX2RsLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorCisjaW5jbHVkZSAibG9nLmgiCisjaW5jbHVkZSAiaWZhY2UuaCIKKyNpbmNsdWRlICJpZmFjZS1wZnJvdXRlLmgiCisjaW5jbHVkZSAidXRpbC5oIgorCitzdGF0aWMgaW50IGJpdGNvdW50ICh1bnNpZ25lZCBpbnQgbikKK3sKKyAgaW50IGNvdW50PTAgOworICB3aGlsZSAobikKKyAgICB7CisgICAgICBjb3VudCsrIDsKKyAgICAgIG4gJj0gKG4gLSAxKSA7CisgICAgfQorICByZXR1cm4gY291bnQgOworfQorCitzdGF0aWMgdm9pZCBydG1faW5mbyhzdHJ1Y3QgcnRfbXNnaGRyICpydG0sIEF2YWhpSW50ZXJmYWNlTW9uaXRvciAqbSkKK3sKKyAgQXZhaGlId0ludGVyZmFjZSAqaHc7CisgIHN0cnVjdCBpZl9tc2doZHIgKmlmbSA9IChzdHJ1Y3QgaWZfbXNnaGRyICopcnRtOworICBzdHJ1Y3Qgc29ja2FkZHJfZGwgKnNkbCA9IChzdHJ1Y3Qgc29ja2FkZHJfZGwgKikoaWZtICsgMSk7CisKKyAgaWYgKHNkbC0+c2RsX2ZhbWlseSAhPSBBRl9MSU5LKQorICAgIHJldHVybjsKKworICBpZiAoaWZtLT5pZm1fYWRkcnMgPT0gMCAmJiBpZm0tPmlmbV9pbmRleCA+IDApIHsKKyAgICBpZiAoIShodyA9IGF2YWhpX2ludGVyZmFjZV9tb25pdG9yX2dldF9od19pbnRlcmZhY2UobSwgKEF2YWhpSWZJbmRleCkgaWZtLT5pZm1faW5kZXgpKSkKKyAgICAgIHJldHVybjsKKyAgICBhdmFoaV9od19pbnRlcmZhY2VfZnJlZShodywgMCk7CisgICAgcmV0dXJuOworICB9CisKKyAgaWYgKCEoaHcgPSBhdmFoaV9pbnRlcmZhY2VfbW9uaXRvcl9nZXRfaHdfaW50ZXJmYWNlKG0sIGlmbS0+aWZtX2luZGV4KSkpCisgICAgaWYgKCEoaHcgPSBhdmFoaV9od19pbnRlcmZhY2VfbmV3KG0sIChBdmFoaUlmSW5kZXgpIGlmbS0+aWZtX2luZGV4KSkpCisgICAgICByZXR1cm47IC8qIE9PTSAqLworCisgIGh3LT5mbGFnc19vayA9CisgICAgKGlmbS0+aWZtX2ZsYWdzICYgSUZGX1VQKSAmJgorICAgICghbS0+c2VydmVyLT5jb25maWcudXNlX2lmZl9ydW5uaW5nIHx8IChpZm0tPmlmbV9mbGFncyAmIElGRl9SVU5OSU5HKSkgJiYKKyAgICAhKGlmbS0+aWZtX2ZsYWdzICYgSUZGX0xPT1BCQUNLKSAmJgorICAgIChpZm0tPmlmbV9mbGFncyAmIElGRl9NVUxUSUNBU1QpICYmCisgICAgKG0tPnNlcnZlci0+Y29uZmlnLmFsbG93X3BvaW50X3RvX3BvaW50IHx8ICEoaWZtLT5pZm1fZmxhZ3MgJiBJRkZfUE9JTlRPUE9JTlQpKTsKKworICBhdmFoaV9mcmVlKGh3LT5uYW1lKTsKKyAgaHctPm5hbWUgPSBhdmFoaV9zdHJuZHVwKHNkbC0+c2RsX2RhdGEsIHNkbC0+c2RsX25sZW4pOworCisgIGh3LT5tdHUgPSBpZm0tPmlmbV9kYXRhLmlmaV9tdHU7CisKKyAgaHctPm1hY19hZGRyZXNzX3NpemUgPSBzZGwtPnNkbF9hbGVuOworICBpZiAoaHctPm1hY19hZGRyZXNzX3NpemUgPiBBVkFISV9NQUNfQUREUkVTU19NQVgpCisgICAgaHctPm1hY19hZGRyZXNzX3NpemUgPSBBVkFISV9NQUNfQUREUkVTU19NQVg7CisKKyAgbWVtY3B5KGh3LT5tYWNfYWRkcmVzcywgc2RsLT5zZGxfZGF0YSArIHNkbC0+c2RsX25sZW4sIGh3LT5tYWNfYWRkcmVzc19zaXplKTsKKworLyogICB7ICovCisvKiAgICAgY2hhciBtYWNbMjU2XTsgKi8KKy8qICAgICBhdmFoaV9sb2dfZGVidWcoIj09PT09PVxuIG5hbWU6ICVzXG4gaW5kZXg6JWRcbiBtdHU6JWRcbiBtYWM6JXNcbiBmbGFnc19vazolZFxuPT09PT09IiwgICovCisvKiAJCSAgICBody0+bmFtZSwgaHctPmluZGV4LCAgKi8KKy8qIAkJICAgIGh3LT5tdHUsICAqLworLyogCQkgICAgYXZhaGlfZm9ybWF0X21hY19hZGRyZXNzKG1hYywgc2l6ZW9mKG1hYyksIGh3LT5tYWNfYWRkcmVzcywgaHctPm1hY19hZGRyZXNzX3NpemUpLCAqLworLyogCQkgICAgaHctPmZsYWdzX29rKTsgKi8KKy8qICAgfSAqLworCisgIGF2YWhpX2h3X2ludGVyZmFjZV9jaGVja19yZWxldmFudChodyk7CisgIGF2YWhpX2h3X2ludGVyZmFjZV91cGRhdGVfcnJzKGh3LCAwKTsKK30KKworI2RlZmluZSBST1VORFVQKGEpIFwKKyAgICAgKChhKSA+IDAgPyAoMSArICgoKGEpIC0gMSkgfCAoc2l6ZW9mKGxvbmcpIC0gMSkpKSA6IHNpemVvZihsb25nKSkKKyNpZmRlZiBIQVZFX1NZU19TWVNDVExfSAorI2RlZmluZSBBRFZBTkNFKHgsIG4pICh4ICs9IFJPVU5EVVAoKG4pLT5zYV9sZW4pKQorI2Vsc2UKKyNkZWZpbmUgQURWQU5DRSh4LCBuKSAoeCArPSBST1VORFVQKHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKSkKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBydG1fYWRkcihzdHJ1Y3QgcnRfbXNnaGRyICpydG0sIEF2YWhpSW50ZXJmYWNlTW9uaXRvciAqbSkKK3sKKyAgQXZhaGlJbnRlcmZhY2UgKmlmYWNlOworICBBdmFoaUFkZHJlc3MgcmFkZHI7CisgIGludCByYWRkcl92YWxpZCA9IDA7CisgIHN0cnVjdCBpZmFfbXNnaGRyICppZmFtID0gKHN0cnVjdCBpZmFfbXNnaGRyICopIHJ0bTsKKyAgY2hhciAqY3AgPSAoY2hhciAqKShpZmFtICsgMSk7CisgIGNoYXIgKmNwMDsKKyAgaW50IGk7CisgIGludCBwcmVmaXhsZW4gPSAwOworICBzdHJ1Y3Qgc29ja2FkZHIgKnNhICA9TlVMTDsKKworI2lmIGRlZmluZWQoX19OZXRCU0RfXykgfHwgZGVmaW5lZChfX09wZW5CU0RfXykKKyAgaWYoKChzdHJ1Y3Qgc29ja2FkZHIgKiljcCktPnNhX2ZhbWlseSA9PSBBRl9VTlNQRUMpCisgICAgKChzdHJ1Y3Qgc29ja2FkZHIgKiljcCktPnNhX2ZhbWlseSA9IEFGX0lORVQ7CisjZW5kaWYKKworICBmb3IgKGNwMCA9IGNwLCBpID0gMDsgaSA8IFJUQVhfTUFYOyBpKyspIHsKKyAgICBpZiAoIShpZmFtLT5pZmFtX2FkZHJzICYgKDE8PGkpKSkKKyAgICAgIGNvbnRpbnVlOworICAgIHNhID0gKHN0cnVjdCBzb2NrYWRkciAqKWNwOworICAgIGlmIChpID09IFJUQVhfSUZBKQorICAgICAgYnJlYWs7CisjaWZkZWYgU0FfU0laRQorICAgIGNwICs9IFNBX1NJWkUoc2EpOworI2Vsc2UKKyAgICBBRFZBTkNFKGNwLCBzYSk7CisjZW5kaWYKKyAgfQorCisgIGlmKHNhLT5zYV9mYW1pbHkgIT0gQUZfSU5FVCAmJiBzYS0+c2FfZmFtaWx5ICE9IEFGX0lORVQ2KQorICAgIHJldHVybjsKKworICBpZiAoIShpZmFjZSA9IGF2YWhpX2ludGVyZmFjZV9tb25pdG9yX2dldF9pbnRlcmZhY2UobSwgKEF2YWhpSWZJbmRleCkgaWZhbS0+aWZhbV9pbmRleCwgYXZhaGlfYWZfdG9fcHJvdG8oc2EtPnNhX2ZhbWlseSkpKSkKKyAgICByZXR1cm47CisKKyAgcmFkZHIucHJvdG8gPSBhdmFoaV9hZl90b19wcm90byhzYS0+c2FfZmFtaWx5KTsKKworICBmb3IoY3AgPSBjcDAsIGkgPSAwOyBpIDwgUlRBWF9NQVg7IGkrKykKKyAgICB7CisgICAgICBpZiAoIShpZmFtLT5pZmFtX2FkZHJzICYgKDE8PGkpKSkKKwljb250aW51ZTsKKyAgICAgIHNhID0gKHN0cnVjdCBzb2NrYWRkciAqKWNwOworI2lmZGVmIEhBVkVfU1lTX1NZU0NUTF9ICisgICAgICBpZiAoc2EtPnNhX2xlbiA9PSAwKQorCWNvbnRpbnVlOworI2VuZGlmCisgICAgICBzd2l0Y2goc2EtPnNhX2ZhbWlseSkgeworICAgICAgY2FzZSBBRl9JTkVUOgorCXN3aXRjaCAoMTw8aSkgeworCWNhc2UgUlRBX05FVE1BU0s6CisJICBwcmVmaXhsZW4gPSBiaXRjb3VudCgodW5zaWduZWQgaW50KSgoc3RydWN0IHNvY2thZGRyX2luICopc2EpLT5zaW5fYWRkci5zX2FkZHIpOworCSAgYnJlYWs7CisJY2FzZSBSVEFfSUZBOgorCSAgbWVtY3B5KHJhZGRyLmRhdGEuZGF0YSwgJigoc3RydWN0IHNvY2thZGRyX2luICopc2EpLT5zaW5fYWRkciwgIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpOworCSAgcmFkZHJfdmFsaWQgPSAxOworCWRlZmF1bHQ6CisJICBicmVhazsKKwl9CisJYnJlYWs7CisgICAgICBjYXNlIEFGX0lORVQ2OgorCXN3aXRjaCAoMTw8aSkgeworCWNhc2UgUlRBX05FVE1BU0s6CisJICBwcmVmaXhsZW4gPSBiaXRjb3VudCgodW5zaWduZWQgaW50KSgoc3RydWN0IHNvY2thZGRyX2luNiAqKXNhKS0+c2luNl9hZGRyLnM2X2FkZHIpOworCSAgYnJlYWs7CisJY2FzZSBSVEFfSUZBOgorCSAgbWVtY3B5KHJhZGRyLmRhdGEuZGF0YSwgJigoc3RydWN0IHNvY2thZGRyX2luNiAqKXNhKS0+c2luNl9hZGRyLCAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpOworI2lmZGVmIF9fS0FNRV9fCisJICBpZiAoSU42X0lTX0FERFJfTElOS0xPQ0FMKChzdHJ1Y3QgaW42X2FkZHIgKilyYWRkci5kYXRhLmRhdGEpKQorCSAgICB7CisJICAgICAgKChzdHJ1Y3QgaW42X2FkZHIgKilyYWRkci5kYXRhLmRhdGEpLT5zNl9hZGRyWzJdID0gMDsKKwkgICAgICAoKHN0cnVjdCBpbjZfYWRkciAqKXJhZGRyLmRhdGEuZGF0YSktPnM2X2FkZHJbM10gPSAwOworCSAgICB9CisjZW5kaWYKKwkgIHJhZGRyX3ZhbGlkID0gMTsKKwlkZWZhdWx0OgorCSAgYnJlYWs7CisJfQorCWJyZWFrOworICAgICAgZGVmYXVsdDoKKwlicmVhazsKKyAgICAgIH0KKyNpZmRlZiBTQV9TSVpFCisgICAgICBjcCArPSBTQV9TSVpFKHNhKTsKKyNlbHNlCisgICAgICBBRFZBTkNFKGNwLCBzYSk7CisjZW5kaWYKKyAgICB9CisKKyAgaWYgKCFyYWRkcl92YWxpZCkKKyAgICByZXR1cm47CisKKyAgaWYocnRtLT5ydG1fdHlwZSA9PSBSVE1fTkVXQUREUikKKyAgICB7CisgICAgICBBdmFoaUludGVyZmFjZUFkZHJlc3MgKmFkZHJpZmFjZTsKKyAgICAgIGlmICghKGFkZHJpZmFjZSA9IGF2YWhpX2ludGVyZmFjZV9tb25pdG9yX2dldF9hZGRyZXNzKG0sIGlmYWNlLCAmcmFkZHIpKSkKKwlpZiAoIShhZGRyaWZhY2UgPSBhdmFoaV9pbnRlcmZhY2VfYWRkcmVzc19uZXcobSwgaWZhY2UsICZyYWRkciwgcHJlZml4bGVuKSkpCisJICByZXR1cm47IC8qIE9PTSAqLworICAgICAgaWYgKHJhZGRyLnByb3RvID09IEFWQUhJX1BST1RPX0lORVQ2KQorICAgICAgICB7CisJICBhZGRyaWZhY2UtPmdsb2JhbF9zY29wZSA9ICEoSU42X0lTX0FERFJfTElOS0xPQ0FMKChzdHJ1Y3QgaW42X2FkZHIgKilyYWRkci5kYXRhLmRhdGEpIHx8IElONl9JU19BRERSX01VTFRJQ0FTVCgoc3RydWN0IGluNl9hZGRyICopcmFkZHIuZGF0YS5kYXRhKSk7CisJfQorICAgICAgZWxzZQorICAgICAgICBhZGRyaWZhY2UtPmdsb2JhbF9zY29wZSA9IDE7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgQXZhaGlJbnRlcmZhY2VBZGRyZXNzICphZGRyaWZhY2U7CisgICAgICBhc3NlcnQocnRtLT5ydG1fdHlwZSA9PSBSVE1fREVMQUREUik7CisgICAgICBpZiAoIShhZGRyaWZhY2UgPSBhdmFoaV9pbnRlcmZhY2VfbW9uaXRvcl9nZXRfYWRkcmVzcyhtLCBpZmFjZSwgJnJhZGRyKSkpCisJcmV0dXJuOworICAgICAgYXZhaGlfaW50ZXJmYWNlX2FkZHJlc3NfZnJlZShhZGRyaWZhY2UpOworICAgIH0KKworICBhdmFoaV9pbnRlcmZhY2VfY2hlY2tfcmVsZXZhbnQoaWZhY2UpOworICBhdmFoaV9pbnRlcmZhY2VfdXBkYXRlX3JycyhpZmFjZSwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX3J0bXNnKHN0cnVjdCBydF9tc2doZHIgKnJ0bSwgQXZhaGlJbnRlcmZhY2VNb25pdG9yICptKQoreworICBhc3NlcnQobSk7CisgIGFzc2VydChydG0pOworCisgIGlmIChydG0tPnJ0bV92ZXJzaW9uICE9IFJUTV9WRVJTSU9OKSB7CisgICAgYXZhaGlfbG9nX3dhcm4oInJvdXRpbmcgbWVzc2FnZSB2ZXJzaW9uICVkIG5vdCB1bmRlcnN0b29kIiwKKwkJICAgcnRtLT5ydG1fdmVyc2lvbik7CisgICAgcmV0dXJuOworICB9CisKKyAgc3dpdGNoIChydG0tPnJ0bV90eXBlKSB7CisgIGNhc2UgUlRNX0lGSU5GTzoKKyAgICBydG1faW5mbyhydG0sbSk7CisgICAgYnJlYWs7CisgIGNhc2UgUlRNX05FV0FERFI6CisgIGNhc2UgUlRNX0RFTEFERFI6CisgICAgcnRtX2FkZHIocnRtLG0pOworICAgIGJyZWFrOworICBkZWZhdWx0OgorICAgIGJyZWFrOworICB9Cit9CisKK3N0YXRpYyB2b2lkIHNvY2tldF9ldmVudChBdmFoaVdhdGNoICp3LCBpbnQgZmQsIEFWQUhJX0dDQ19VTlVTRUQgQXZhaGlXYXRjaEV2ZW50IGV2ZW50LHZvaWQgKnVzZXJkYXRhKSB7CisgIEF2YWhpSW50ZXJmYWNlTW9uaXRvciAqbSA9IChBdmFoaUludGVyZmFjZU1vbml0b3IgKil1c2VyZGF0YTsKKyAgQXZhaGlQZlJvdXRlICpubCA9IG0tPm9zZGVwLnBmcm91dGU7CisgICAgc3NpemVfdCBieXRlczsKKyAgICBjaGFyIG1zZ1syMDQ4XTsKKworICAgIGFzc2VydChtKTsKKyAgICBhc3NlcnQodyk7CisgICAgYXNzZXJ0KG5sKTsKKyAgICBhc3NlcnQoZmQgPT0gbmwtPmZkKTsKKworICAgIGRvIHsKKyAgICAgIGlmKChieXRlcyA9IHJlY3YobmwtPmZkLCBtc2csIDIwNDgsIE1TR19ET05UV0FJVCkpIDwgMCkgeworCWlmIChlcnJubyA9PSBFQUdBSU4gfHwgZXJybm8gPT0gRUlOVFIpCisJICByZXR1cm47CisJYXZhaGlfbG9nX2Vycm9yKF9fRklMRV9fIjogcmVjdigpIGZhaWxlZDogJXMiLCBzdHJlcnJvcihlcnJubykpOworCXJldHVybjsKKyAgICAgIH0KKyAgICAgIHBhcnNlX3J0bXNnKChzdHJ1Y3QgcnRfbXNnaGRyICopbXNnLCBtKTsKKyAgICB9CisgICAgd2hpbGUgKGJ5dGVzID4gMCk7Cit9CisKK2ludCBhdmFoaV9pbnRlcmZhY2VfbW9uaXRvcl9pbml0X29zZGVwKEF2YWhpSW50ZXJmYWNlTW9uaXRvciAqbSkgeworICAgIGludCBmZCA9IC0xOworCisgICAgYXNzZXJ0KG0pOworCisgICAgbS0+b3NkZXAucGZyb3V0ZSA9IE5VTEw7CisKKyAgICBpZiAoKGZkID0gc29ja2V0KFBGX1JPVVRFLCBTT0NLX1JBVywgQUZfVU5TUEVDKSkgPCAwKSB7CisgICAgICAgIGF2YWhpX2xvZ19lcnJvcihfX0ZJTEVfXyI6IHNvY2tldChQRl9ST1VURSk6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGlmICghKG0tPm9zZGVwLnBmcm91dGUgPSBhdmFoaV9uZXcoQXZhaGlQZlJvdXRlICwgMSkpKSB7CisgICAgICAgIGF2YWhpX2xvZ19lcnJvcihfX0ZJTEVfXyI6IGF2YWhpX25ldygpIGZhaWxlZC4iKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKyAgICBtLT5vc2RlcC5wZnJvdXRlLT5mZCA9IGZkOworCisgICAgaWYgKCEobS0+b3NkZXAucGZyb3V0ZS0+d2F0Y2ggPSBtLT5zZXJ2ZXItPnBvbGxfYXBpLT53YXRjaF9uZXcobS0+c2VydmVyLT5wb2xsX2FwaSwKKwkJCQkJCQkJICAgbS0+b3NkZXAucGZyb3V0ZS0+ZmQsCisJCQkJCQkJCSAgIEFWQUhJX1dBVENIX0lOLAorCQkJCQkJCQkgICBzb2NrZXRfZXZlbnQsCisJCQkJCQkJCSAgIG0pKSkgeworICAgICAgYXZhaGlfbG9nX2Vycm9yKF9fRklMRV9fIjogRmFpbGVkIHRvIGNyZWF0ZSB3YXRjaC4iKTsKKyAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKKworZmFpbDoKKworICAgIGlmIChtLT5vc2RlcC5wZnJvdXRlKSB7CisgICAgICBpZiAobS0+b3NkZXAucGZyb3V0ZS0+d2F0Y2gpCisgICAgICAgIG0tPnNlcnZlci0+cG9sbF9hcGktPndhdGNoX2ZyZWUobS0+b3NkZXAucGZyb3V0ZS0+d2F0Y2gpOworCisgICAgICBpZiAoZmQgPj0gMCkKKyAgICAgICAgY2xvc2UoZmQpOworCisgICAgICBtLT5vc2RlcC5wZnJvdXRlID0gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisKK3ZvaWQgYXZhaGlfaW50ZXJmYWNlX21vbml0b3JfZnJlZV9vc2RlcChBdmFoaUludGVyZmFjZU1vbml0b3IgKm0pIHsKKyAgICBhc3NlcnQobSk7CisKKyAgICBpZiAobS0+b3NkZXAucGZyb3V0ZSkgeworICAgICAgaWYgKG0tPm9zZGVwLnBmcm91dGUtPndhdGNoKQorICAgICAgICBtLT5zZXJ2ZXItPnBvbGxfYXBpLT53YXRjaF9mcmVlKG0tPm9zZGVwLnBmcm91dGUtPndhdGNoKTsKKworICAgICAgaWYgKG0tPm9zZGVwLnBmcm91dGUtPmZkID49IDApCisgICAgICAgIGNsb3NlKG0tPm9zZGVwLnBmcm91dGUtPmZkKTsKKworICAgICAgYXZhaGlfZnJlZShtLT5vc2RlcC5wZnJvdXRlKTsKKyAgICAgIG0tPm9zZGVwLnBmcm91dGUgPSBOVUxMOworICAgIH0KK30KKworI2lmIGRlZmluZWQgKFNJT0NHTElGTlVNKSAmJiBkZWZpbmVkKEhBVkVfU1RSVUNUX0xJRkNPTkYpIC8qIFNvbGFyaXMgOCBhbmQgbGF0ZXI7IFNvbCA3PyAqLworLyoKKyAqIEkgZ290IHRoaXMgZnVuY3Rpb24gZnJvbSBHTlUgenNicmEKKyAqLworc3RhdGljIGludCBpcDZfbWFza2xlbiAoc3RydWN0IGluNl9hZGRyIG5ldG1hc2spIHsKKyAgICBpbnQgbGVuID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyIHZhbDsKKyAgICB1bnNpZ25lZCBjaGFyICpwbnQ7CisKKyAgICBwbnQgPSAodW5zaWduZWQgY2hhciAqKSAmIG5ldG1hc2s7CisKKyAgICB3aGlsZSAoKCpwbnQgPT0gMHhmZikgJiYgbGVuIDwgMTI4KSB7CisgICAgICAgIGxlbiArPSA4OworICAgICAgICBwbnQrKzsKKyAgICB9CisKKyAgICBpZiAobGVuIDwgMTI4KSB7CisgICAgICAgIHZhbCA9ICpwbnQ7CisgICAgICAgIHdoaWxlICh2YWwpIHsKKyAgICAgICAgICAgIGxlbisrOworICAgICAgICAgICAgdmFsIDw8PSAxOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBsZW47Cit9CisKK3N0YXRpYyB2b2lkIGlmX2FkZF9pbnRlcmZhY2Uoc3RydWN0IGxpZnJlcSAqbGlmcmVxLCBBdmFoaUludGVyZmFjZU1vbml0b3IgKm0sIGludCBmZCwgaW50IGNvdW50KQoreworICAgIEF2YWhpSHdJbnRlcmZhY2UgKmh3OworICAgIEF2YWhpQWRkcmVzcyBhZGRyOworICAgIHN0cnVjdCBsaWZyZXEgbGlmcmNvcHk7CisgICAgdW5zaWduZWQgaW50IGluZGV4OworICAgIGludCBmbGFnczsKKyAgICBpbnQgbXR1OworICAgIGludCBwcmVmaXhsZW47CisgICAgQXZhaGlJbnRlcmZhY2VBZGRyZXNzICphZGRyaWZhY2U7CisgICAgQXZhaGlJbnRlcmZhY2UgKmlmYWNlOworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBtYXNrOworICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgbWFzazY7CisgICAgY2hhciBjYWRkcltBVkFISV9BRERSRVNTX1NUUl9NQVhdOworCisgICAgbGlmcmNvcHkgPSAqbGlmcmVxOworCisgICAgaWYgKGlvY3RsKGZkLCBTSU9DR0xJRkZMQUdTLCAmbGlmcmNvcHkpIDwgMCkgeworICAgICAgICBhdmFoaV9sb2dfZXJyb3IoX19GSUxFX18iOiBpb2N0bChTSU9DR0xJRkZMQUdTKSAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZmxhZ3MgPSBsaWZyY29weS5saWZyX2ZsYWdzOworCisgICAgaWYgKGlvY3RsKGZkLCBTSU9DR0xJRk1UVSwgJmxpZnJjb3B5KSA8IDApIHsKKyAgICAgICAgYXZhaGlfbG9nX2Vycm9yKF9fRklMRV9fIjogaW9jdGwoU0lPQ0dMSUZNVFUpICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtdHUgPSBsaWZyY29weS5saWZyX21ldHJpYzsKKworICAgIGlmIChpb2N0bChmZCwgU0lPQ0dMSUZBRERSLCAmbGlmcmNvcHkpIDwgMCkgeworICAgICAgICBhdmFoaV9sb2dfZXJyb3IoX19GSUxFX18iOiBpb2N0bChTSU9DR0xJRkFERFIpICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBhZGRyLnByb3RvID0gYXZhaGlfYWZfdG9fcHJvdG8obGlmcmVxLT5saWZyX2FkZHIuc3NfZmFtaWx5KTsKKyAgICBpZiAoaW9jdGwoZmQsIFNJT0NHTElGTkVUTUFTSywgJmxpZnJjb3B5KSA8IDApIHsKKyAgICAgICAgYXZhaGlfbG9nX2Vycm9yKF9fRklMRV9fIjogaW9jdGwoU0lPQ0dMSUZORVRNQVNLKSAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgc3dpdGNoIChsaWZyZXEtPmxpZnJfYWRkci5zc19mYW1pbHkpIHsKKyAgICAgICAgY2FzZSBBRl9JTkVUOgorCSAgICBtZW1jcHkoYWRkci5kYXRhLmRhdGEsICYoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZsaWZyZXEtPmxpZnJfYWRkciktPnNpbl9hZGRyLCAgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSk7CisJICAgIG1lbWNweSgmbWFzaywgJigoc3RydWN0IHNvY2thZGRyX2luICopJmxpZnJjb3B5LmxpZnJfYWRkciktPnNpbl9hZGRyLCAgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSk7CisgICAgICAgICAgICBwcmVmaXhsZW4gPSBiaXRjb3VudCgodW5zaWduZWQgaW50KSBtYXNrLnNpbl9hZGRyLnNfYWRkcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBRl9JTkVUNjoKKwkgICAgbWVtY3B5KGFkZHIuZGF0YS5kYXRhLCAmKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopJmxpZnJlcS0+bGlmcl9hZGRyKS0+c2luNl9hZGRyLCAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpOworCSAgICBtZW1jcHkoJm1hc2s2LCAmKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopJmxpZnJjb3B5LmxpZnJfYWRkciktPnNpbjZfYWRkciwgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKKyAgICAgICAgICAgIHByZWZpeGxlbiA9IGxpZnJjb3B5LmxpZnJfYWRkcmxlbjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGluZGV4ID0gaWZfbmFtZXRvaW5kZXgobGlmcmVxLT5saWZyX25hbWUpOworCisgICAgaWYgKCEoaHcgPSBhdmFoaV9pbnRlcmZhY2VfbW9uaXRvcl9nZXRfaHdfaW50ZXJmYWNlKG0sIChBdmFoaUlmSW5kZXgpIGluZGV4KSkpIHsKKyAgICAgICAgaWYgKCEoaHcgPSBhdmFoaV9od19pbnRlcmZhY2VfbmV3KG0sIChBdmFoaUlmSW5kZXgpIGluZGV4KSkpCisgICAgICAgICAgICByZXR1cm47IC8qIE9PTSAqLworCisgICAgICAgIGh3LT5mbGFnc19vayA9CisgICAgICAgICAgICAoZmxhZ3MgJiBJRkZfVVApICYmCisgICAgICAgICAgICAoIW0tPnNlcnZlci0+Y29uZmlnLnVzZV9pZmZfcnVubmluZyB8fCAoZmxhZ3MgJiBJRkZfUlVOTklORykpICYmCisgICAgICAgICAgICAhKGZsYWdzICYgSUZGX0xPT1BCQUNLKSAmJgorICAgICAgICAgICAgKGZsYWdzICYgSUZGX01VTFRJQ0FTVCkgJiYKKyAgICAgICAgICAgIChtLT5zZXJ2ZXItPmNvbmZpZy5hbGxvd19wb2ludF90b19wb2ludCB8fCAhKGZsYWdzICYgSUZGX1BPSU5UT1BPSU5UKSk7CisgICAgICAgIGh3LT5uYW1lID0gYXZhaGlfc3RyZHVwKGxpZnJlcS0+bGlmcl9uYW1lKTsKKyAgICAgICAgaHctPm10dSA9IG10dTsKKyAgICAgICAgLyogVE9ETyBnZXQgbWFjIGFkZHJlc3MgKi8KKyAgICB9CisKKyAgICBpZiAoIShpZmFjZSA9IGF2YWhpX2ludGVyZmFjZV9tb25pdG9yX2dldF9pbnRlcmZhY2UobSwgKEF2YWhpSWZJbmRleClpbmRleCwgYWRkci5wcm90bykpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIShhZGRyaWZhY2UgPSBhdmFoaV9pbnRlcmZhY2VfbW9uaXRvcl9nZXRfYWRkcmVzcyhtLCBpZmFjZSwgJmFkZHIpKSkKKyAgICAgICAgaWYgKCEoYWRkcmlmYWNlID0gYXZhaGlfaW50ZXJmYWNlX2FkZHJlc3NfbmV3KG0sIGlmYWNlLCAmYWRkciwgcHJlZml4bGVuKSkpCisgICAgICAgICAgICByZXR1cm47IC8qIE9PTSAqLworCisgICAgYWRkcmlmYWNlLT5nbG9iYWxfc2NvcGUgPSAxOworCisgICAgYXZhaGlfaHdfaW50ZXJmYWNlX2NoZWNrX3JlbGV2YW50KGh3KTsKKyAgICBhdmFoaV9od19pbnRlcmZhY2VfdXBkYXRlX3JycyhodywgMCk7Cit9CisjZW5kaWYKKwordm9pZCBhdmFoaV9pbnRlcmZhY2VfbW9uaXRvcl9zeW5jKEF2YWhpSW50ZXJmYWNlTW9uaXRvciAqbSkgeworI2lmbmRlZiBIQVZFX1NUUlVDVF9MSUZDT05GCisgIHNpemVfdCBuZWVkZWQ7CisgIGludCBtaWJbNl07CisgIGNoYXIgKmJ1ZiwgKmxpbSwgKm5leHQsIGNvdW50ID0gMDsKKyAgc3RydWN0IHJ0X21zZ2hkciAqcnRtOworCisgIGFzc2VydChtKTsKKworIHJldHJ5MjoKKyAgbWliWzBdID0gQ1RMX05FVDsKKyAgbWliWzFdID0gUEZfUk9VVEU7CisgIG1pYlsyXSA9IDA7ICAgICAgICAgICAgIC8qIHByb3RvY29sICovCisgIG1pYlszXSA9IDA7ICAgICAgICAgICAgIC8qIHdpbGRjYXJkIGFkZHJlc3MgZmFtaWx5ICovCisgIG1pYls0XSA9IE5FVF9SVF9JRkxJU1Q7CisgIG1pYls1XSA9IDA7ICAgICAgICAgICAgIC8qIG5vIGZsYWdzICovCisgIGlmIChzeXNjdGwobWliLCA2LCBOVUxMLCAmbmVlZGVkLCBOVUxMLCAwKSA8IDApCisgICAgeworICAgICAgYXZhaGlfbG9nX2Vycm9yKCJzeXNjdGwgZmFpbGVkOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICBhdmFoaV9sb2dfZXJyb3IoInJvdXRlLXN5c2N0bC1lc3RpbWF0ZSIpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgaWYgKChidWYgPSBhdmFoaV9tYWxsb2MobmVlZGVkKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBhdmFoaV9sb2dfZXJyb3IoIm1hbGxvYyBmYWlsZWQgaW4gYXZhaGlfaW50ZXJmYWNlX21vbml0b3Jfc3luYyIpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgaWYgKHN5c2N0bChtaWIsIDYsIGJ1ZiwgJm5lZWRlZCwgTlVMTCwgMCkgPCAwKSB7CisgICAgYXZhaGlfbG9nX3dhcm4oInN5c2N0bCBmYWlsZWQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICBpZiAoZXJybm8gPT0gRU5PTUVNICYmIGNvdW50KysgPCAxMCkgeworICAgICAgYXZhaGlfbG9nX3dhcm4oIlJvdXRpbmcgdGFibGUgZ3JldywgcmV0cnlpbmciKTsKKyAgICAgIHNsZWVwKDEpOworICAgICAgYXZhaGlfZnJlZShidWYpOworICAgICAgZ290byByZXRyeTI7CisgICAgfQorICB9CisgIGxpbSA9IGJ1ZiArIG5lZWRlZDsKKyAgZm9yIChuZXh0ID0gYnVmOyBuZXh0IDwgbGltOyBuZXh0ICs9IHJ0bS0+cnRtX21zZ2xlbikgeworICAgIHJ0bSA9IChzdHJ1Y3QgcnRfbXNnaGRyICopbmV4dDsKKyAgICBwYXJzZV9ydG1zZyhydG0sIG0pOworICB9CisKKyAgbS0+bGlzdF9jb21wbGV0ZSA9IDE7CisgIGF2YWhpX2ludGVyZmFjZV9tb25pdG9yX2NoZWNrX3JlbGV2YW50KG0pOworICBhdmFoaV9pbnRlcmZhY2VfbW9uaXRvcl91cGRhdGVfcnJzKG0sIDApOworICBhdmFoaV9sb2dfaW5mbygiTmV0d29yayBpbnRlcmZhY2UgZW51bWVyYXRpb24gY29tcGxldGVkLiIpOworI2VsaWYgZGVmaW5lZCAoU0lPQ0dMSUZOVU0pICYmIGRlZmluZWQoSEFWRV9TVFJVQ1RfTElGQ09ORikgLyogU29sYXJpcyA4IGFuZCBsYXRlcjsgU29sIDc/ICovCisgICAgaW50IHNvY2tmZDsKKyAgICBpbnQgcmV0OworICAgIGludCBuOworICAgIHN0cnVjdCBsaWZudW0gbGlmbjsKKyAgICBzdHJ1Y3QgbGlmY29uZiBsaWZjOworICAgIHN0cnVjdCBsaWZyZXEgKmxpZnJlcTsKKworICAgIGlmICgoc29ja2ZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIDApKSA8IDApIHsKKyAgICAgICAgYXZhaGlfbG9nX2Vycm9yKF9fRklMRV9fIjogc29ja2V0KFBGUk9VVEUpOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbGlmYy5saWZjX2J1ZiA9IE5VTEw7CisgICAgbGlmbi5saWZuX2ZhbWlseSA9IEFGX1VOU1BFQzsKKyAgICBsaWZuLmxpZm5fZmxhZ3MgPSAwOworICAgIGlmIChpb2N0bChzb2NrZmQsIFNJT0NHTElGTlVNLCAmbGlmbikgPCAwKSB7CisgICAgICAgIGF2YWhpX2xvZ19lcnJvcihfX0ZJTEVfXyI6IGlvY3RsKFNJT0NHTElGTlVNKTogJXMiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisgICAgbGlmYy5saWZjX2xlbiA9IGxpZm4ubGlmbl9jb3VudCAqIHNpemVvZiAoc3RydWN0IGxpZnJlcSk7CisgICAgaWYgKChsaWZjLmxpZmNfYnVmID0gYXZhaGlfbWFsbG9jKGxpZmMubGlmY19sZW4pKSA9PSBOVUxMKSB7CisgICAgICAgICAgICBhdmFoaV9sb2dfZXJyb3IoIm1hbGxvYyBmYWlsZWQgaW4gYXZhaGlfaW50ZXJmYWNlX21vbml0b3Jfc3luYyIpOworICAgICAgICAgICAgZ290byBlbmQ7CisgICAgfQorICAgIGxpZmMubGlmY19mYW1pbHkgPSBOVUxMOworICAgIGxpZmMubGlmY19mbGFncyA9IDA7CisgICAgaWYoaW9jdGwoc29ja2ZkLCBTSU9DR0xJRkNPTkYsICZsaWZjKSA8IDApIHsKKyAgICAgICAgYXZhaGlfbG9nX2Vycm9yKF9fRklMRV9fIjogaW9jdGwoU0lPQ0dMSUZDT05GKTogJXMiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisgICAgbGlmcmVxID0gbGlmYy5saWZjX3JlcTsKKworICAgIGZvciAobiA9IDA7IG4gPCBsaWZjLmxpZmNfbGVuOyBuICs9IHNpemVvZihzdHJ1Y3QgbGlmcmVxKSkgeworICAgICAgICBpZl9hZGRfaW50ZXJmYWNlKGxpZnJlcSwgbSwgc29ja2ZkLCBsaWZuLmxpZm5fY291bnQpOworICAgICAgICBsaWZyZXErKzsKKyAgICB9CisgICAgbS0+bGlzdF9jb21wbGV0ZSA9IDE7CisgICAgYXZhaGlfaW50ZXJmYWNlX21vbml0b3JfY2hlY2tfcmVsZXZhbnQobSk7CisgICAgYXZhaGlfaW50ZXJmYWNlX21vbml0b3JfdXBkYXRlX3JycyhtLCAwKTsKK2VuZDoKKyAgICBjbG9zZShzb2NrZmQpOworICAgIGF2YWhpX2ZyZWUobGlmYy5saWZjX2J1Zik7CisKKyAgICBhdmFoaV9sb2dfaW5mbygiTmV0d29yayBpbnRlcmZhY2UgZW51bWVyYXRpb24gY29tcGxldGVkLiIpOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9pZmFjZS1wZnJvdXRlLmggYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9pZmFjZS1wZnJvdXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc2NmNiMAotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL2lmYWNlLXBmcm91dGUuaApAQCAtMCwwICsxLDM3IEBACisjaWZuZGVmIGZvb2lmYWNlcGZyb3V0ZWhmb28KKyNkZWZpbmUgZm9vaWZhY2VwZnJvdXRlaGZvbworCisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL3dhdGNoLmg+CisKK3R5cGVkZWYgc3RydWN0IEF2YWhpUGZSb3V0ZSBBdmFoaVBmUm91dGU7CitzdHJ1Y3QgQXZhaGlQZlJvdXRlIHsKKyAgaW50IGZkOworICBBdmFoaVdhdGNoICp3YXRjaDsKKyAgQXZhaGlJbnRlcmZhY2VNb25pdG9yICptOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgQXZhaGlJbnRlcmZhY2VNb25pdG9yT1NEZXAgQXZhaGlJbnRlcmZhY2VNb25pdG9yT1NEZXA7CisKK3N0cnVjdCBBdmFoaUludGVyZmFjZU1vbml0b3JPU0RlcCB7CisgICAgQXZhaGlQZlJvdXRlICpwZnJvdXRlOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9pZmFjZS5jIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvaWZhY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWE4NjBhCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvaWZhY2UuYwpAQCAtMCwwICsxLDg2NSBAQAorLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKworI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9lcnJvci5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9tYWxsb2MuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vZG9tYWluLmg+CisKKyNpbmNsdWRlICJpZmFjZS5oIgorI2luY2x1ZGUgImRucy5oIgorI2luY2x1ZGUgInNvY2tldC5oIgorI2luY2x1ZGUgImFubm91bmNlLmgiCisjaW5jbHVkZSAidXRpbC5oIgorI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgIm11bHRpY2FzdC1sb29rdXAuaCIKKyNpbmNsdWRlICJxdWVyaWVyLmgiCisKK3ZvaWQgYXZhaGlfaW50ZXJmYWNlX2FkZHJlc3NfdXBkYXRlX3JycyhBdmFoaUludGVyZmFjZUFkZHJlc3MgKmEsIGludCByZW1vdmVfcnJzKSB7CisgICAgQXZhaGlJbnRlcmZhY2VNb25pdG9yICptOworCisgICAgYXNzZXJ0KGEpOworICAgIG0gPSBhLT5tb25pdG9yOworCisgICAgaWYgKG0tPmxpc3RfY29tcGxldGUgJiYKKyAgICAgICAgYXZhaGlfaW50ZXJmYWNlX2FkZHJlc3NfaXNfcmVsZXZhbnQoYSkgJiYKKyAgICAgICAgYXZhaGlfaW50ZXJmYWNlX2lzX3JlbGV2YW50KGEtPmludGVyZmFjZSkgJiYKKyAgICAgICAgIXJlbW92ZV9ycnMgJiYKKyAgICAgICAgbS0+c2VydmVyLT5jb25maWcucHVibGlzaF9hZGRyZXNzZXMgJiYKKyAgICAgICAgKG0tPnNlcnZlci0+c3RhdGUgPT0gQVZBSElfU0VSVkVSX1JVTk5JTkcgfHwKKyAgICAgICAgbS0+c2VydmVyLT5zdGF0ZSA9PSBBVkFISV9TRVJWRVJfUkVHSVNURVJJTkcpKSB7CisKKyAgICAgICAgLyogRmlsbCB0aGUgZW50cnkgZ3JvdXAgKi8KKyAgICAgICAgaWYgKCFhLT5lbnRyeV9ncm91cCkKKyAgICAgICAgICAgIGEtPmVudHJ5X2dyb3VwID0gYXZhaGlfc19lbnRyeV9ncm91cF9uZXcobS0+c2VydmVyLCBhdmFoaV9ob3N0X3JyX2VudHJ5X2dyb3VwX2NhbGxiYWNrLCBOVUxMKTsKKworICAgICAgICBpZiAoIWEtPmVudHJ5X2dyb3VwKSAvKiBPT00gKi8KKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoYXZhaGlfc19lbnRyeV9ncm91cF9pc19lbXB0eShhLT5lbnRyeV9ncm91cCkpIHsKKyAgICAgICAgICAgIGNoYXIgdFtBVkFISV9BRERSRVNTX1NUUl9NQVhdOworICAgICAgICAgICAgQXZhaGlQcm90b2NvbCBwOworCisgICAgICAgICAgICBwID0gKGEtPmludGVyZmFjZS0+cHJvdG9jb2wgPT0gQVZBSElfUFJPVE9fSU5FVCAmJiBtLT5zZXJ2ZXItPmNvbmZpZy5wdWJsaXNoX2Ffb25faXB2NikgfHwKKyAgICAgICAgICAgICAgICAoYS0+aW50ZXJmYWNlLT5wcm90b2NvbCA9PSBBVkFISV9QUk9UT19JTkVUNiAmJiBtLT5zZXJ2ZXItPmNvbmZpZy5wdWJsaXNoX2FhYWFfb25faXB2NCkgPyBBVkFISV9QUk9UT19VTlNQRUMgOiBhLT5pbnRlcmZhY2UtPnByb3RvY29sOworCisgICAgICAgICAgICBhdmFoaV9hZGRyZXNzX3NucHJpbnQodCwgc2l6ZW9mKHQpLCAmYS0+YWRkcmVzcyk7CisgICAgICAgICAgICBhdmFoaV9sb2dfaW5mbygiUmVnaXN0ZXJpbmcgbmV3IGFkZHJlc3MgcmVjb3JkIGZvciAlcyBvbiAlcy4lcy4iLCB0LCBhLT5pbnRlcmZhY2UtPmhhcmR3YXJlLT5uYW1lLCBwID09IEFWQUhJX1BST1RPX1VOU1BFQyA/ICIqIiA6IGF2YWhpX3Byb3RvX3RvX3N0cmluZyhwKSk7CisKKyAgICAgICAgICAgIGlmIChhdmFoaV9zZXJ2ZXJfYWRkX2FkZHJlc3MobS0+c2VydmVyLCBhLT5lbnRyeV9ncm91cCwgYS0+aW50ZXJmYWNlLT5oYXJkd2FyZS0+aW5kZXgsIHAsIDAsIE5VTEwsICZhLT5hZGRyZXNzKSA8IDApIHsKKyAgICAgICAgICAgICAgICBhdmFoaV9sb2dfd2FybihfX0ZJTEVfXyI6IGF2YWhpX3NlcnZlcl9hZGRfYWRkcmVzcygpIGZhaWxlZDogJXMiLCBhdmFoaV9zdHJlcnJvcihtLT5zZXJ2ZXItPmVycm9yKSk7CisgICAgICAgICAgICAgICAgYXZhaGlfc19lbnRyeV9ncm91cF9mcmVlKGEtPmVudHJ5X2dyb3VwKTsKKyAgICAgICAgICAgICAgICBhLT5lbnRyeV9ncm91cCA9IE5VTEw7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBhdmFoaV9zX2VudHJ5X2dyb3VwX2NvbW1pdChhLT5lbnRyeV9ncm91cCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworCisgICAgICAgIC8qIENsZWFyIHRoZSBlbnRyeSBncm91cCAqLworCisgICAgICAgIGlmIChhLT5lbnRyeV9ncm91cCAmJiAhYXZhaGlfc19lbnRyeV9ncm91cF9pc19lbXB0eShhLT5lbnRyeV9ncm91cCkpIHsKKyAgICAgICAgICAgIGNoYXIgdFtBVkFISV9BRERSRVNTX1NUUl9NQVhdOworICAgICAgICAgICAgYXZhaGlfYWRkcmVzc19zbnByaW50KHQsIHNpemVvZih0KSwgJmEtPmFkZHJlc3MpOworCisgICAgICAgICAgICBhdmFoaV9sb2dfaW5mbygiV2l0aGRyYXdpbmcgYWRkcmVzcyByZWNvcmQgZm9yICVzIG9uICVzLiIsIHQsIGEtPmludGVyZmFjZS0+aGFyZHdhcmUtPm5hbWUpOworCisgICAgICAgICAgICBpZiAoYXZhaGlfc19lbnRyeV9ncm91cF9nZXRfc3RhdGUoYS0+ZW50cnlfZ3JvdXApID09IEFWQUhJX0VOVFJZX0dST1VQX1JFR0lTVEVSSU5HICYmCisgICAgICAgICAgICAgICAgbS0+c2VydmVyLT5zdGF0ZSA9PSBBVkFISV9TRVJWRVJfUkVHSVNURVJJTkcpCisgICAgICAgICAgICAgICAgYXZhaGlfc2VydmVyX2RlY3JlYXNlX2hvc3RfcnJfcGVuZGluZyhtLT5zZXJ2ZXIpOworCisgICAgICAgICAgICBhdmFoaV9zX2VudHJ5X2dyb3VwX3Jlc2V0KGEtPmVudHJ5X2dyb3VwKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBhdmFoaV9pbnRlcmZhY2VfdXBkYXRlX3JycyhBdmFoaUludGVyZmFjZSAqaSwgaW50IHJlbW92ZV9ycnMpIHsKKyAgICBBdmFoaUludGVyZmFjZUFkZHJlc3MgKmE7CisKKyAgICBhc3NlcnQoaSk7CisKKyAgICBmb3IgKGEgPSBpLT5hZGRyZXNzZXM7IGE7IGEgPSBhLT5hZGRyZXNzX25leHQpCisgICAgICAgIGF2YWhpX2ludGVyZmFjZV9hZGRyZXNzX3VwZGF0ZV9ycnMoYSwgcmVtb3ZlX3Jycyk7Cit9CisKK3ZvaWQgYXZhaGlfaHdfaW50ZXJmYWNlX3VwZGF0ZV9ycnMoQXZhaGlId0ludGVyZmFjZSAqaHcsIGludCByZW1vdmVfcnJzKSB7CisgICAgQXZhaGlJbnRlcmZhY2UgKmk7CisgICAgQXZhaGlJbnRlcmZhY2VNb25pdG9yICptOworCisgICAgYXNzZXJ0KGh3KTsKKyAgICBtID0gaHctPm1vbml0b3I7CisKKyAgICBmb3IgKGkgPSBody0+aW50ZXJmYWNlczsgaTsgaSA9IGktPmJ5X2hhcmR3YXJlX25leHQpCisgICAgICAgIGF2YWhpX2ludGVyZmFjZV91cGRhdGVfcnJzKGksIHJlbW92ZV9ycnMpOworCisgICAgaWYgKG0tPmxpc3RfY29tcGxldGUgJiYKKyAgICAgICAgIXJlbW92ZV9ycnMgJiYKKyAgICAgICAgbS0+c2VydmVyLT5jb25maWcucHVibGlzaF93b3Jrc3RhdGlvbiAmJgorICAgICAgICAobS0+c2VydmVyLT5zdGF0ZSA9PSBBVkFISV9TRVJWRVJfUlVOTklORykpIHsKKworICAgICAgICBpZiAoIWh3LT5lbnRyeV9ncm91cCkKKyAgICAgICAgICAgIGh3LT5lbnRyeV9ncm91cCA9IGF2YWhpX3NfZW50cnlfZ3JvdXBfbmV3KG0tPnNlcnZlciwgYXZhaGlfaG9zdF9ycl9lbnRyeV9ncm91cF9jYWxsYmFjaywgTlVMTCk7CisKKyAgICAgICAgaWYgKCFody0+ZW50cnlfZ3JvdXApCisgICAgICAgICAgICByZXR1cm47IC8qIE9PTSAqLworCisgICAgICAgIGlmIChhdmFoaV9zX2VudHJ5X2dyb3VwX2lzX2VtcHR5KGh3LT5lbnRyeV9ncm91cCkpIHsKKyAgICAgICAgICAgIGNoYXIgbmFtZVtBVkFISV9MQUJFTF9NQVhdLCB1bmVzY2FwZWRbQVZBSElfTEFCRUxfTUFYXSwgbWFjWzI1Nl07CisgICAgICAgICAgICBjb25zdCBjaGFyICpwID0gbS0+c2VydmVyLT5ob3N0X25hbWU7CisKKyAgICAgICAgICAgIGF2YWhpX3VuZXNjYXBlX2xhYmVsKCZwLCB1bmVzY2FwZWQsIHNpemVvZih1bmVzY2FwZWQpKTsKKyAgICAgICAgICAgIGF2YWhpX2Zvcm1hdF9tYWNfYWRkcmVzcyhtYWMsIHNpemVvZihtYWMpLCBody0+bWFjX2FkZHJlc3MsIGh3LT5tYWNfYWRkcmVzc19zaXplKTsKKyAgICAgICAgICAgIHNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzIFslc10iLCB1bmVzY2FwZWQsIG1hYyk7CisKKyAgICAgICAgICAgIGlmIChhdmFoaV9zZXJ2ZXJfYWRkX3NlcnZpY2UobS0+c2VydmVyLCBody0+ZW50cnlfZ3JvdXAsIGh3LT5pbmRleCwgQVZBSElfUFJPVE9fVU5TUEVDLCAwLCBuYW1lLCAiX3dvcmtzdGF0aW9uLl90Y3AiLCBOVUxMLCBOVUxMLCA5LCBOVUxMKSA8IDApIHsKKyAgICAgICAgICAgICAgICBhdmFoaV9sb2dfd2FybihfX0ZJTEVfXyI6IGF2YWhpX3NlcnZlcl9hZGRfc2VydmljZSgpIGZhaWxlZDogJXMiLCBhdmFoaV9zdHJlcnJvcihtLT5zZXJ2ZXItPmVycm9yKSk7CisgICAgICAgICAgICAgICAgYXZhaGlfc19lbnRyeV9ncm91cF9mcmVlKGh3LT5lbnRyeV9ncm91cCk7CisgICAgICAgICAgICAgICAgaHctPmVudHJ5X2dyb3VwID0gTlVMTDsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGF2YWhpX3NfZW50cnlfZ3JvdXBfY29tbWl0KGh3LT5lbnRyeV9ncm91cCk7CisgICAgICAgIH0KKworICAgIH0gZWxzZSB7CisKKyAgICAgICAgaWYgKGh3LT5lbnRyeV9ncm91cCAmJiAhYXZhaGlfc19lbnRyeV9ncm91cF9pc19lbXB0eShody0+ZW50cnlfZ3JvdXApKSB7CisKKyAgICAgICAgICAgIGF2YWhpX2xvZ19pbmZvKCJXaXRoZHJhd2luZyB3b3Jrc3RhdGlvbiBzZXJ2aWNlIGZvciAlcy4iLCBody0+bmFtZSk7CisKKyAgICAgICAgICAgIGlmIChhdmFoaV9zX2VudHJ5X2dyb3VwX2dldF9zdGF0ZShody0+ZW50cnlfZ3JvdXApID09IEFWQUhJX0VOVFJZX0dST1VQX1JFR0lTVEVSSU5HICYmCisgICAgICAgICAgICAgICAgbS0+c2VydmVyLT5zdGF0ZSA9PSBBVkFISV9TRVJWRVJfUkVHSVNURVJJTkcpCisgICAgICAgICAgICAgICAgYXZhaGlfc2VydmVyX2RlY3JlYXNlX2hvc3RfcnJfcGVuZGluZyhtLT5zZXJ2ZXIpOworCisgICAgICAgICAgICBhdmFoaV9zX2VudHJ5X2dyb3VwX3Jlc2V0KGh3LT5lbnRyeV9ncm91cCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgYXZhaGlfaW50ZXJmYWNlX21vbml0b3JfdXBkYXRlX3JycyhBdmFoaUludGVyZmFjZU1vbml0b3IgKm0sIGludCByZW1vdmVfcnJzKSB7CisgICAgQXZhaGlId0ludGVyZmFjZSAqaHc7CisKKyAgICBhc3NlcnQobSk7CisKKyAgICBmb3IgKGh3ID0gbS0+aHdfaW50ZXJmYWNlczsgaHc7IGh3ID0gaHctPmhhcmR3YXJlX25leHQpCisgICAgICAgIGF2YWhpX2h3X2ludGVyZmFjZV91cGRhdGVfcnJzKGh3LCByZW1vdmVfcnJzKTsKK30KKworc3RhdGljIGludCBpbnRlcmZhY2VfbWRuc19tY2FzdF9qb2luKEF2YWhpSW50ZXJmYWNlICppLCBpbnQgam9pbikgeworICAgIGNoYXIgYXRbQVZBSElfQUREUkVTU19TVFJfTUFYXTsKKyAgICBpbnQgcjsKKyAgICBhc3NlcnQoaSk7CisKKyAgICBpZiAoISFqb2luICA9PSAhIWktPm1jYXN0X2pvaW5lZCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoKGktPnByb3RvY29sID09IEFWQUhJX1BST1RPX0lORVQ2ICYmIGktPm1vbml0b3ItPnNlcnZlci0+ZmRfaXB2NiA8IDApIHx8CisgICAgICAgIChpLT5wcm90b2NvbCA9PSBBVkFISV9QUk9UT19JTkVUICYmIGktPm1vbml0b3ItPnNlcnZlci0+ZmRfaXB2NCA8IDApKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAoam9pbikgeworICAgICAgICBBdmFoaUludGVyZmFjZUFkZHJlc3MgKmE7CisKKyAgICAgICAgLyogTG9vayBpZiB0aGVyZSdzIGFuIGFkZHJlc3Mgd2l0aCBnbG9iYWwgc2NvcGUgKi8KKyAgICAgICAgZm9yIChhID0gaS0+YWRkcmVzc2VzOyBhOyBhID0gYS0+YWRkcmVzc19uZXh0KQorICAgICAgICAgICAgaWYgKGEtPmdsb2JhbF9zY29wZSkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvKiBObyBhZGRyZXNzIHdpdGggYSBnbG9iYWwgc2NvcGUgaGFzIGJlZW4gZm91bmQsIHNvIGxldCdzIHVzZQorICAgICAgICAgKiBhbnkuICovCisgICAgICAgIGlmICghYSkKKyAgICAgICAgICAgIGEgPSBpLT5hZGRyZXNzZXM7CisKKyAgICAgICAgLyogSG1tLCB0aGVyZSBpcyBubyBhZGRyZXNzIGF2YWlsYWJsZS4gKi8KKyAgICAgICAgaWYgKCFhKQorICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAgIGktPmxvY2FsX21jYXN0X2FkZHJlc3MgPSBhLT5hZGRyZXNzOworICAgIH0KKworICAgIGF2YWhpX2xvZ19pbmZvKCIlcyBtRE5TIG11bHRpY2FzdCBncm91cCBvbiBpbnRlcmZhY2UgJXMuJXMgd2l0aCBhZGRyZXNzICVzLiIsCisgICAgICAgICAgICAgICAgICAgam9pbiA/ICJKb2luaW5nIiA6ICJMZWF2aW5nIiwKKyAgICAgICAgICAgICAgICAgICBpLT5oYXJkd2FyZS0+bmFtZSwKKyAgICAgICAgICAgICAgICAgICBhdmFoaV9wcm90b190b19zdHJpbmcoaS0+cHJvdG9jb2wpLAorICAgICAgICAgICAgICAgICAgIGF2YWhpX2FkZHJlc3Nfc25wcmludChhdCwgc2l6ZW9mKGF0KSwgJmktPmxvY2FsX21jYXN0X2FkZHJlc3MpKTsKKworICAgIGlmIChpLT5wcm90b2NvbCA9PSBBVkFISV9QUk9UT19JTkVUNikKKyAgICAgICAgciA9IGF2YWhpX21kbnNfbWNhc3Rfam9pbl9pcHY2KGktPm1vbml0b3ItPnNlcnZlci0+ZmRfaXB2NiwgJmktPmxvY2FsX21jYXN0X2FkZHJlc3MuZGF0YS5pcHY2LCBpLT5oYXJkd2FyZS0+aW5kZXgsIGpvaW4pOworICAgIGVsc2UgeworICAgICAgICBhc3NlcnQoaS0+cHJvdG9jb2wgPT0gQVZBSElfUFJPVE9fSU5FVCk7CisKKyAgICAgICAgciA9IGF2YWhpX21kbnNfbWNhc3Rfam9pbl9pcHY0KGktPm1vbml0b3ItPnNlcnZlci0+ZmRfaXB2NCwgJmktPmxvY2FsX21jYXN0X2FkZHJlc3MuZGF0YS5pcHY0LCBpLT5oYXJkd2FyZS0+aW5kZXgsIGpvaW4pOworICAgIH0KKworICAgIGlmIChyIDwgMCkKKyAgICAgICAgaS0+bWNhc3Rfam9pbmVkID0gMDsKKyAgICBlbHNlCisgICAgICAgIGktPm1jYXN0X2pvaW5lZCA9IGpvaW47CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbnRlcmZhY2VfbWRuc19tY2FzdF9yZWpvaW4oQXZhaGlJbnRlcmZhY2UgKmkpIHsKKyAgICBBdmFoaUludGVyZmFjZUFkZHJlc3MgKmEsICp1c2FibGUgPSBOVUxMLCAqZm91bmQgPSBOVUxMOworICAgIGFzc2VydChpKTsKKworICAgIGlmICghaS0+bWNhc3Rfam9pbmVkKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8qIENoZWNrIHdoZXRoZXIgb2xkIGFkZHJlc3Mgd2Ugam9pbmVkIHdpdGggaXMgc3RpbGwgYXZhaWxhYmxlLiBJZgorICAgICAqIG5vdCwgcmVqb2luIHVzaW5nIGFuIG90aGVyIGFkZHJlc3MuICovCisKKyAgICBmb3IgKGEgPSBpLT5hZGRyZXNzZXM7IGE7IGEgPSBhLT5hZGRyZXNzX25leHQpIHsKKyAgICAgICAgaWYgKGEtPmdsb2JhbF9zY29wZSAmJiAhdXNhYmxlKQorICAgICAgICAgICAgdXNhYmxlID0gYTsKKworICAgICAgICBpZiAoYXZhaGlfYWRkcmVzc19jbXAoJmEtPmFkZHJlc3MsICZpLT5sb2NhbF9tY2FzdF9hZGRyZXNzKSA9PSAwKSB7CisKKyAgICAgICAgICAgIGlmIChhLT5nbG9iYWxfc2NvcGUpCisgICAgICAgICAgICAgICAgLyogTm8gYWN0aW9uIG5lY2Vzc2FyeTogdGhlIGFkZHJlc3Mgc3RpbGwgZXhpc3RzIGFuZAorICAgICAgICAgICAgICAgICAqIGhhcyBnbG9iYWwgc2NvcGUuICovCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgICAgIGZvdW5kID0gYTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChmb3VuZCAmJiAhdXNhYmxlKQorICAgICAgICAvKiBObyBhY3Rpb24gbmVjZXNzYXJ5OiB0aGUgYWRkcmVzcyBzdGlsbCBleGlzdHMgYW5kIG5vIGJldHRlciBvbmUgaGFzIGJlZW4gZm91bmQgKi8KKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpbnRlcmZhY2VfbWRuc19tY2FzdF9qb2luKGksIDApOworICAgIHJldHVybiBpbnRlcmZhY2VfbWRuc19tY2FzdF9qb2luKGksIDEpOworfQorCit2b2lkIGF2YWhpX2ludGVyZmFjZV9hZGRyZXNzX2ZyZWUoQXZhaGlJbnRlcmZhY2VBZGRyZXNzICphKSB7CisgICAgYXNzZXJ0KGEpOworICAgIGFzc2VydChhLT5pbnRlcmZhY2UpOworCisgICAgYXZhaGlfaW50ZXJmYWNlX2FkZHJlc3NfdXBkYXRlX3JycyhhLCAxKTsKKyAgICBBVkFISV9MTElTVF9SRU1PVkUoQXZhaGlJbnRlcmZhY2VBZGRyZXNzLCBhZGRyZXNzLCBhLT5pbnRlcmZhY2UtPmFkZHJlc3NlcywgYSk7CisKKyAgICBpZiAoYS0+ZW50cnlfZ3JvdXApCisgICAgICAgIGF2YWhpX3NfZW50cnlfZ3JvdXBfZnJlZShhLT5lbnRyeV9ncm91cCk7CisKKyAgICBpbnRlcmZhY2VfbWRuc19tY2FzdF9yZWpvaW4oYS0+aW50ZXJmYWNlKTsKKworICAgIGF2YWhpX2ZyZWUoYSk7Cit9CisKK3ZvaWQgYXZhaGlfaW50ZXJmYWNlX2ZyZWUoQXZhaGlJbnRlcmZhY2UgKmksIGludCBzZW5kX2dvb2RieWUpIHsKKyAgICBhc3NlcnQoaSk7CisKKyAgICAvKiBIYW5kbGUgZ29vZGJ5ZXMgYW5kIHJlbW92ZSBhbm5vdW5jZXJzICovCisgICAgYXZhaGlfZ29vZGJ5ZV9pbnRlcmZhY2UoaS0+bW9uaXRvci0+c2VydmVyLCBpLCBzZW5kX2dvb2RieWUsIDEpOworICAgIGF2YWhpX3Jlc3BvbnNlX3NjaGVkdWxlcl9mb3JjZShpLT5yZXNwb25zZV9zY2hlZHVsZXIpOworICAgIGFzc2VydCghaS0+YW5ub3VuY2Vycyk7CisKKyAgICBpZiAoaS0+bWNhc3Rfam9pbmVkKQorICAgICAgICBpbnRlcmZhY2VfbWRuc19tY2FzdF9qb2luKGksIDApOworCisgICAgLyogUmVtb3ZlIHF1ZXJpZXJzICovCisgICAgYXZhaGlfcXVlcmllcl9mcmVlX2FsbChpKTsKKyAgICBhdmFoaV9oYXNobWFwX2ZyZWUoaS0+cXVlcmllcnNfYnlfa2V5KTsKKworICAgIC8qIFJlbW92ZSBsb2NhbCBSUnMgKi8KKyAgICBhdmFoaV9pbnRlcmZhY2VfdXBkYXRlX3JycyhpLCAxKTsKKworICAgIHdoaWxlIChpLT5hZGRyZXNzZXMpCisgICAgICAgIGF2YWhpX2ludGVyZmFjZV9hZGRyZXNzX2ZyZWUoaS0+YWRkcmVzc2VzKTsKKworICAgIGF2YWhpX3Jlc3BvbnNlX3NjaGVkdWxlcl9mcmVlKGktPnJlc3BvbnNlX3NjaGVkdWxlcik7CisgICAgYXZhaGlfcXVlcnlfc2NoZWR1bGVyX2ZyZWUoaS0+cXVlcnlfc2NoZWR1bGVyKTsKKyAgICBhdmFoaV9wcm9iZV9zY2hlZHVsZXJfZnJlZShpLT5wcm9iZV9zY2hlZHVsZXIpOworICAgIGF2YWhpX2NhY2hlX2ZyZWUoaS0+Y2FjaGUpOworCisgICAgQVZBSElfTExJU1RfUkVNT1ZFKEF2YWhpSW50ZXJmYWNlLCBpbnRlcmZhY2UsIGktPm1vbml0b3ItPmludGVyZmFjZXMsIGkpOworICAgIEFWQUhJX0xMSVNUX1JFTU9WRShBdmFoaUludGVyZmFjZSwgYnlfaGFyZHdhcmUsIGktPmhhcmR3YXJlLT5pbnRlcmZhY2VzLCBpKTsKKworICAgIGF2YWhpX2ZyZWUoaSk7Cit9CisKK3ZvaWQgYXZhaGlfaHdfaW50ZXJmYWNlX2ZyZWUoQXZhaGlId0ludGVyZmFjZSAqaHcsIGludCBzZW5kX2dvb2RieWUpIHsKKyAgICBhc3NlcnQoaHcpOworCisgICAgYXZhaGlfaHdfaW50ZXJmYWNlX3VwZGF0ZV9ycnMoaHcsIDEpOworCisgICAgd2hpbGUgKGh3LT5pbnRlcmZhY2VzKQorICAgICAgICBhdmFoaV9pbnRlcmZhY2VfZnJlZShody0+aW50ZXJmYWNlcywgc2VuZF9nb29kYnllKTsKKworICAgIGlmIChody0+ZW50cnlfZ3JvdXApCisgICAgICAgIGF2YWhpX3NfZW50cnlfZ3JvdXBfZnJlZShody0+ZW50cnlfZ3JvdXApOworCisgICAgQVZBSElfTExJU1RfUkVNT1ZFKEF2YWhpSHdJbnRlcmZhY2UsIGhhcmR3YXJlLCBody0+bW9uaXRvci0+aHdfaW50ZXJmYWNlcywgaHcpOworICAgIGF2YWhpX2hhc2htYXBfcmVtb3ZlKGh3LT5tb25pdG9yLT5oYXNobWFwLCAmaHctPmluZGV4KTsKKworICAgIGF2YWhpX2ZyZWUoaHctPm5hbWUpOworICAgIGF2YWhpX2ZyZWUoaHcpOworfQorCitBdmFoaUludGVyZmFjZSogYXZhaGlfaW50ZXJmYWNlX25ldyhBdmFoaUludGVyZmFjZU1vbml0b3IgKm0sIEF2YWhpSHdJbnRlcmZhY2UgKmh3LCBBdmFoaVByb3RvY29sIHByb3RvY29sKSB7CisgICAgQXZhaGlJbnRlcmZhY2UgKmk7CisKKyAgICBhc3NlcnQobSk7CisgICAgYXNzZXJ0KGh3KTsKKyAgICBhc3NlcnQoQVZBSElfUFJPVE9fVkFMSUQocHJvdG9jb2wpKTsKKworICAgIGlmICghKGkgPSBhdmFoaV9uZXcoQXZhaGlJbnRlcmZhY2UsIDEpKSkKKyAgICAgICAgZ290byBmYWlsOyAvKiBPT00gKi8KKworICAgIGktPm1vbml0b3IgPSBtOworICAgIGktPmhhcmR3YXJlID0gaHc7CisgICAgaS0+cHJvdG9jb2wgPSBwcm90b2NvbDsKKyAgICBpLT5hbm5vdW5jaW5nID0gMDsKKyAgICBpLT5tY2FzdF9qb2luZWQgPSAwOworCisgICAgQVZBSElfTExJU1RfSEVBRF9JTklUKEF2YWhpSW50ZXJmYWNlQWRkcmVzcywgaS0+YWRkcmVzc2VzKTsKKyAgICBBVkFISV9MTElTVF9IRUFEX0lOSVQoQXZhaGlBbm5vdW5jZXIsIGktPmFubm91bmNlcnMpOworCisgICAgQVZBSElfTExJU1RfSEVBRF9JTklUKEF2YWhpUXVlcmllciwgaS0+cXVlcmllcnMpOworICAgIGktPnF1ZXJpZXJzX2J5X2tleSA9IGF2YWhpX2hhc2htYXBfbmV3KChBdmFoaUhhc2hGdW5jKSBhdmFoaV9rZXlfaGFzaCwgKEF2YWhpRXF1YWxGdW5jKSBhdmFoaV9rZXlfZXF1YWwsIE5VTEwsIE5VTEwpOworCisgICAgaS0+Y2FjaGUgPSBhdmFoaV9jYWNoZV9uZXcobS0+c2VydmVyLCBpKTsKKyAgICBpLT5yZXNwb25zZV9zY2hlZHVsZXIgPSBhdmFoaV9yZXNwb25zZV9zY2hlZHVsZXJfbmV3KGkpOworICAgIGktPnF1ZXJ5X3NjaGVkdWxlciA9IGF2YWhpX3F1ZXJ5X3NjaGVkdWxlcl9uZXcoaSk7CisgICAgaS0+cHJvYmVfc2NoZWR1bGVyID0gYXZhaGlfcHJvYmVfc2NoZWR1bGVyX25ldyhpKTsKKworICAgIGlmICghaS0+Y2FjaGUgfHwgIWktPnJlc3BvbnNlX3NjaGVkdWxlciB8fCAhaS0+cXVlcnlfc2NoZWR1bGVyIHx8ICFpLT5wcm9iZV9zY2hlZHVsZXIpCisgICAgICAgIGdvdG8gZmFpbDsgLyogT09NICovCisKKyAgICBBVkFISV9MTElTVF9QUkVQRU5EKEF2YWhpSW50ZXJmYWNlLCBieV9oYXJkd2FyZSwgaHctPmludGVyZmFjZXMsIGkpOworICAgIEFWQUhJX0xMSVNUX1BSRVBFTkQoQXZhaGlJbnRlcmZhY2UsIGludGVyZmFjZSwgbS0+aW50ZXJmYWNlcywgaSk7CisKKyAgICByZXR1cm4gaTsKKworZmFpbDoKKworICAgIGlmIChpKSB7CisgICAgICAgIGlmIChpLT5jYWNoZSkKKyAgICAgICAgICAgIGF2YWhpX2NhY2hlX2ZyZWUoaS0+Y2FjaGUpOworICAgICAgICBpZiAoaS0+cmVzcG9uc2Vfc2NoZWR1bGVyKQorICAgICAgICAgICAgYXZhaGlfcmVzcG9uc2Vfc2NoZWR1bGVyX2ZyZWUoaS0+cmVzcG9uc2Vfc2NoZWR1bGVyKTsKKyAgICAgICAgaWYgKGktPnF1ZXJ5X3NjaGVkdWxlcikKKyAgICAgICAgICAgIGF2YWhpX3F1ZXJ5X3NjaGVkdWxlcl9mcmVlKGktPnF1ZXJ5X3NjaGVkdWxlcik7CisgICAgICAgIGlmIChpLT5wcm9iZV9zY2hlZHVsZXIpCisgICAgICAgICAgICBhdmFoaV9wcm9iZV9zY2hlZHVsZXJfZnJlZShpLT5wcm9iZV9zY2hlZHVsZXIpOworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCitBdmFoaUh3SW50ZXJmYWNlICphdmFoaV9od19pbnRlcmZhY2VfbmV3KEF2YWhpSW50ZXJmYWNlTW9uaXRvciAqbSwgQXZhaGlJZkluZGV4IGlkeCkgeworICAgIEF2YWhpSHdJbnRlcmZhY2UgKmh3OworCisgICAgYXNzZXJ0KG0pOworICAgIGFzc2VydChBVkFISV9JRl9WQUxJRChpZHgpKTsKKworICAgIGlmICAoIShodyA9IGF2YWhpX25ldyhBdmFoaUh3SW50ZXJmYWNlLCAxKSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaHctPm1vbml0b3IgPSBtOworICAgIGh3LT5uYW1lID0gTlVMTDsKKyAgICBody0+ZmxhZ3Nfb2sgPSAwOworICAgIGh3LT5tdHUgPSAxNTAwOworICAgIGh3LT5pbmRleCA9IGlkeDsKKyAgICBody0+bWFjX2FkZHJlc3Nfc2l6ZSA9IDA7CisgICAgaHctPmVudHJ5X2dyb3VwID0gTlVMTDsKKyAgICBody0+cmF0ZWxpbWl0X2JlZ2luLnR2X3NlYyA9IDA7CisgICAgaHctPnJhdGVsaW1pdF9iZWdpbi50dl91c2VjID0gMDsKKyAgICBody0+cmF0ZWxpbWl0X2NvdW50ZXIgPSAwOworCisgICAgQVZBSElfTExJU1RfSEVBRF9JTklUKEF2YWhpSW50ZXJmYWNlLCBody0+aW50ZXJmYWNlcyk7CisgICAgQVZBSElfTExJU1RfUFJFUEVORChBdmFoaUh3SW50ZXJmYWNlLCBoYXJkd2FyZSwgbS0+aHdfaW50ZXJmYWNlcywgaHcpOworCisgICAgYXZhaGlfaGFzaG1hcF9pbnNlcnQobS0+aGFzaG1hcCwgJmh3LT5pbmRleCwgaHcpOworCisgICAgaWYgKG0tPnNlcnZlci0+ZmRfaXB2NCA+PSAwIHx8IG0tPnNlcnZlci0+Y29uZmlnLnB1Ymxpc2hfYV9vbl9pcHY2KQorICAgICAgICBhdmFoaV9pbnRlcmZhY2VfbmV3KG0sIGh3LCBBVkFISV9QUk9UT19JTkVUKTsKKyAgICBpZiAobS0+c2VydmVyLT5mZF9pcHY2ID49IDAgfHwgbS0+c2VydmVyLT5jb25maWcucHVibGlzaF9hYWFhX29uX2lwdjQpCisgICAgICAgIGF2YWhpX2ludGVyZmFjZV9uZXcobSwgaHcsIEFWQUhJX1BST1RPX0lORVQ2KTsKKworICAgIHJldHVybiBodzsKK30KKworQXZhaGlJbnRlcmZhY2VBZGRyZXNzICphdmFoaV9pbnRlcmZhY2VfYWRkcmVzc19uZXcoQXZhaGlJbnRlcmZhY2VNb25pdG9yICptLCBBdmFoaUludGVyZmFjZSAqaSwgY29uc3QgQXZhaGlBZGRyZXNzICphZGRyLCB1bnNpZ25lZCBwcmVmaXhfbGVuKSB7CisgICAgQXZhaGlJbnRlcmZhY2VBZGRyZXNzICphOworCisgICAgYXNzZXJ0KG0pOworICAgIGFzc2VydChpKTsKKworICAgIGlmICghKGEgPSBhdmFoaV9uZXcoQXZhaGlJbnRlcmZhY2VBZGRyZXNzLCAxKSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgYS0+aW50ZXJmYWNlID0gaTsKKyAgICBhLT5tb25pdG9yID0gbTsKKyAgICBhLT5hZGRyZXNzID0gKmFkZHI7CisgICAgYS0+cHJlZml4X2xlbiA9IHByZWZpeF9sZW47CisgICAgYS0+Z2xvYmFsX3Njb3BlID0gMDsKKyAgICBhLT5kZXByZWNhdGVkID0gMDsKKyAgICBhLT5lbnRyeV9ncm91cCA9IE5VTEw7CisKKyAgICBBVkFISV9MTElTVF9QUkVQRU5EKEF2YWhpSW50ZXJmYWNlQWRkcmVzcywgYWRkcmVzcywgaS0+YWRkcmVzc2VzLCBhKTsKKworICAgIHJldHVybiBhOworfQorCit2b2lkIGF2YWhpX2ludGVyZmFjZV9jaGVja19yZWxldmFudChBdmFoaUludGVyZmFjZSAqaSkgeworICAgIGludCBiOworICAgIEF2YWhpSW50ZXJmYWNlTW9uaXRvciAqbTsKKworICAgIGFzc2VydChpKTsKKyAgICBtID0gaS0+bW9uaXRvcjsKKworICAgIGIgPSBhdmFoaV9pbnRlcmZhY2VfaXNfcmVsZXZhbnQoaSk7CisKKyAgICBpZiAobS0+bGlzdF9jb21wbGV0ZSAmJiBiICYmICFpLT5hbm5vdW5jaW5nKSB7CisgICAgICAgIGludGVyZmFjZV9tZG5zX21jYXN0X2pvaW4oaSwgMSk7CisKKyAgICAgICAgaWYgKGktPm1jYXN0X2pvaW5lZCkgeworICAgICAgICAgICAgYXZhaGlfbG9nX2luZm8oIk5ldyByZWxldmFudCBpbnRlcmZhY2UgJXMuJXMgZm9yIG1ETlMuIiwgaS0+aGFyZHdhcmUtPm5hbWUsIGF2YWhpX3Byb3RvX3RvX3N0cmluZyhpLT5wcm90b2NvbCkpOworCisgICAgICAgICAgICBpLT5hbm5vdW5jaW5nID0gMTsKKyAgICAgICAgICAgIGF2YWhpX2Fubm91bmNlX2ludGVyZmFjZShtLT5zZXJ2ZXIsIGkpOworICAgICAgICAgICAgYXZhaGlfbXVsdGljYXN0X2xvb2t1cF9lbmdpbmVfbmV3X2ludGVyZmFjZShtLT5zZXJ2ZXItPm11bHRpY2FzdF9sb29rdXBfZW5naW5lLCBpKTsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIGlmICghYiAmJiBpLT5hbm5vdW5jaW5nKSB7CisgICAgICAgIGF2YWhpX2xvZ19pbmZvKCJJbnRlcmZhY2UgJXMuJXMgbm8gbG9uZ2VyIHJlbGV2YW50IGZvciBtRE5TLiIsIGktPmhhcmR3YXJlLT5uYW1lLCBhdmFoaV9wcm90b190b19zdHJpbmcoaS0+cHJvdG9jb2wpKTsKKworICAgICAgICBpbnRlcmZhY2VfbWRuc19tY2FzdF9qb2luKGksIDApOworCisgICAgICAgIGF2YWhpX2dvb2RieWVfaW50ZXJmYWNlKG0tPnNlcnZlciwgaSwgMCwgMSk7CisgICAgICAgIGF2YWhpX3F1ZXJpZXJfZnJlZV9hbGwoaSk7CisKKyAgICAgICAgYXZhaGlfcmVzcG9uc2Vfc2NoZWR1bGVyX2NsZWFyKGktPnJlc3BvbnNlX3NjaGVkdWxlcik7CisgICAgICAgIGF2YWhpX3F1ZXJ5X3NjaGVkdWxlcl9jbGVhcihpLT5xdWVyeV9zY2hlZHVsZXIpOworICAgICAgICBhdmFoaV9wcm9iZV9zY2hlZHVsZXJfY2xlYXIoaS0+cHJvYmVfc2NoZWR1bGVyKTsKKyAgICAgICAgYXZhaGlfY2FjaGVfZmx1c2goaS0+Y2FjaGUpOworCisgICAgICAgIGktPmFubm91bmNpbmcgPSAwOworCisgICAgfSBlbHNlCisgICAgICAgIGludGVyZmFjZV9tZG5zX21jYXN0X3Jlam9pbihpKTsKK30KKwordm9pZCBhdmFoaV9od19pbnRlcmZhY2VfY2hlY2tfcmVsZXZhbnQoQXZhaGlId0ludGVyZmFjZSAqaHcpIHsKKyAgICBBdmFoaUludGVyZmFjZSAqaTsKKworICAgIGFzc2VydChodyk7CisKKyAgICBmb3IgKGkgPSBody0+aW50ZXJmYWNlczsgaTsgaSA9IGktPmJ5X2hhcmR3YXJlX25leHQpCisgICAgICAgIGF2YWhpX2ludGVyZmFjZV9jaGVja19yZWxldmFudChpKTsKK30KKwordm9pZCBhdmFoaV9pbnRlcmZhY2VfbW9uaXRvcl9jaGVja19yZWxldmFudChBdmFoaUludGVyZmFjZU1vbml0b3IgKm0pIHsKKyAgICBBdmFoaUludGVyZmFjZSAqaTsKKworICAgIGFzc2VydChtKTsKKworICAgIGZvciAoaSA9IG0tPmludGVyZmFjZXM7IGk7IGkgPSBpLT5pbnRlcmZhY2VfbmV4dCkKKyAgICAgICAgYXZhaGlfaW50ZXJmYWNlX2NoZWNrX3JlbGV2YW50KGkpOworfQorCitBdmFoaUludGVyZmFjZU1vbml0b3IgKmF2YWhpX2ludGVyZmFjZV9tb25pdG9yX25ldyhBdmFoaVNlcnZlciAqcykgeworICAgIEF2YWhpSW50ZXJmYWNlTW9uaXRvciAqbSA9IE5VTEw7CisKKyAgICBpZiAoIShtID0gYXZhaGlfbmV3MChBdmFoaUludGVyZmFjZU1vbml0b3IsIDEpKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7IC8qIE9PTSAqLworCisgICAgbS0+c2VydmVyID0gczsKKyAgICBtLT5saXN0X2NvbXBsZXRlID0gMDsKKyAgICBtLT5oYXNobWFwID0gYXZhaGlfaGFzaG1hcF9uZXcoYXZhaGlfaW50X2hhc2gsIGF2YWhpX2ludF9lcXVhbCwgTlVMTCwgTlVMTCk7CisKKyAgICBBVkFISV9MTElTVF9IRUFEX0lOSVQoQXZhaGlJbnRlcmZhY2UsIG0tPmludGVyZmFjZXMpOworICAgIEFWQUhJX0xMSVNUX0hFQURfSU5JVChBdmFoaUh3SW50ZXJmYWNlLCBtLT5od19pbnRlcmZhY2VzKTsKKworICAgIGlmIChhdmFoaV9pbnRlcmZhY2VfbW9uaXRvcl9pbml0X29zZGVwKG0pIDwgMCkKKyAgICAgICAgZ290byBmYWlsOworCisgICAgcmV0dXJuIG07CisKK2ZhaWw6CisgICAgYXZhaGlfaW50ZXJmYWNlX21vbml0b3JfZnJlZShtKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKwordm9pZCBhdmFoaV9pbnRlcmZhY2VfbW9uaXRvcl9mcmVlKEF2YWhpSW50ZXJmYWNlTW9uaXRvciAqbSkgeworICAgIGFzc2VydChtKTsKKworICAgIHdoaWxlIChtLT5od19pbnRlcmZhY2VzKQorICAgICAgICBhdmFoaV9od19pbnRlcmZhY2VfZnJlZShtLT5od19pbnRlcmZhY2VzLCAxKTsKKworICAgIGFzc2VydCghbS0+aW50ZXJmYWNlcyk7CisKKyAgICBhdmFoaV9pbnRlcmZhY2VfbW9uaXRvcl9mcmVlX29zZGVwKG0pOworCisgICAgaWYgKG0tPmhhc2htYXApCisgICAgICAgIGF2YWhpX2hhc2htYXBfZnJlZShtLT5oYXNobWFwKTsKKworICAgIGF2YWhpX2ZyZWUobSk7Cit9CisKKworQXZhaGlJbnRlcmZhY2UqIGF2YWhpX2ludGVyZmFjZV9tb25pdG9yX2dldF9pbnRlcmZhY2UoQXZhaGlJbnRlcmZhY2VNb25pdG9yICptLCBBdmFoaUlmSW5kZXggaWR4LCBBdmFoaVByb3RvY29sIHByb3RvY29sKSB7CisgICAgQXZhaGlId0ludGVyZmFjZSAqaHc7CisgICAgQXZhaGlJbnRlcmZhY2UgKmk7CisKKyAgICBhc3NlcnQobSk7CisgICAgYXNzZXJ0KGlkeCA+PSAwKTsKKyAgICBhc3NlcnQocHJvdG9jb2wgIT0gQVZBSElfUFJPVE9fVU5TUEVDKTsKKworICAgIGlmICghKGh3ID0gYXZhaGlfaW50ZXJmYWNlX21vbml0b3JfZ2V0X2h3X2ludGVyZmFjZShtLCBpZHgpKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBmb3IgKGkgPSBody0+aW50ZXJmYWNlczsgaTsgaSA9IGktPmJ5X2hhcmR3YXJlX25leHQpCisgICAgICAgIGlmIChpLT5wcm90b2NvbCA9PSBwcm90b2NvbCkKKyAgICAgICAgICAgIHJldHVybiBpOworCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK0F2YWhpSHdJbnRlcmZhY2UqIGF2YWhpX2ludGVyZmFjZV9tb25pdG9yX2dldF9od19pbnRlcmZhY2UoQXZhaGlJbnRlcmZhY2VNb25pdG9yICptLCBBdmFoaUlmSW5kZXggaWR4KSB7CisgICAgYXNzZXJ0KG0pOworICAgIGFzc2VydChpZHggPj0gMCk7CisKKyAgICByZXR1cm4gYXZhaGlfaGFzaG1hcF9sb29rdXAobS0+aGFzaG1hcCwgJmlkeCk7Cit9CisKK0F2YWhpSW50ZXJmYWNlQWRkcmVzcyogYXZhaGlfaW50ZXJmYWNlX21vbml0b3JfZ2V0X2FkZHJlc3MoQXZhaGlJbnRlcmZhY2VNb25pdG9yICptLCBBdmFoaUludGVyZmFjZSAqaSwgY29uc3QgQXZhaGlBZGRyZXNzICpyYWRkcikgeworICAgIEF2YWhpSW50ZXJmYWNlQWRkcmVzcyAqaWE7CisKKyAgICBhc3NlcnQobSk7CisgICAgYXNzZXJ0KGkpOworICAgIGFzc2VydChyYWRkcik7CisKKyAgICBmb3IgKGlhID0gaS0+YWRkcmVzc2VzOyBpYTsgaWEgPSBpYS0+YWRkcmVzc19uZXh0KQorICAgICAgICBpZiAoYXZhaGlfYWRkcmVzc19jbXAoJmlhLT5hZGRyZXNzLCByYWRkcikgPT0gMCkKKyAgICAgICAgICAgIHJldHVybiBpYTsKKworICAgIHJldHVybiBOVUxMOworfQorCit2b2lkIGF2YWhpX2ludGVyZmFjZV9zZW5kX3BhY2tldF91bmljYXN0KEF2YWhpSW50ZXJmYWNlICppLCBBdmFoaURuc1BhY2tldCAqcCwgY29uc3QgQXZhaGlBZGRyZXNzICphLCB1aW50MTZfdCBwb3J0KSB7CisgICAgYXNzZXJ0KGkpOworICAgIGFzc2VydChwKTsKKworICAgIGlmICghaS0+YW5ub3VuY2luZykKKyAgICAgICAgcmV0dXJuOworCisgICAgYXNzZXJ0KCFhIHx8IGEtPnByb3RvID09IGktPnByb3RvY29sKTsKKworICAgIGlmIChpLT5tb25pdG9yLT5zZXJ2ZXItPmNvbmZpZy5yYXRlbGltaXRfaW50ZXJ2YWwgPiAwKSB7CisgICAgICAgIHN0cnVjdCB0aW1ldmFsIG5vdywgZW5kOworCisgICAgICAgIGdldHRpbWVvZmRheSgmbm93LCBOVUxMKTsKKworICAgICAgICBlbmQgPSBpLT5oYXJkd2FyZS0+cmF0ZWxpbWl0X2JlZ2luOworICAgICAgICBhdmFoaV90aW1ldmFsX2FkZCgmZW5kLCBpLT5tb25pdG9yLT5zZXJ2ZXItPmNvbmZpZy5yYXRlbGltaXRfaW50ZXJ2YWwpOworCisgICAgICAgIGlmIChpLT5oYXJkd2FyZS0+cmF0ZWxpbWl0X2JlZ2luLnR2X3NlYyA8PSAwIHx8CisgICAgICAgICAgICBhdmFoaV90aW1ldmFsX2NvbXBhcmUoJmVuZCwgJm5vdykgPCAwKSB7CisKKyAgICAgICAgICAgIGktPmhhcmR3YXJlLT5yYXRlbGltaXRfYmVnaW4gPSBub3c7CisgICAgICAgICAgICBpLT5oYXJkd2FyZS0+cmF0ZWxpbWl0X2NvdW50ZXIgPSAwOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGktPmhhcmR3YXJlLT5yYXRlbGltaXRfY291bnRlciA+IGktPm1vbml0b3ItPnNlcnZlci0+Y29uZmlnLnJhdGVsaW1pdF9idXJzdCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpLT5oYXJkd2FyZS0+cmF0ZWxpbWl0X2NvdW50ZXIrKzsKKyAgICB9CisKKyAgICBpZiAoaS0+cHJvdG9jb2wgPT0gQVZBSElfUFJPVE9fSU5FVCAmJiBpLT5tb25pdG9yLT5zZXJ2ZXItPmZkX2lwdjQgPj0gMCkKKyAgICAgICAgYXZhaGlfc2VuZF9kbnNfcGFja2V0X2lwdjQoaS0+bW9uaXRvci0+c2VydmVyLT5mZF9pcHY0LCBpLT5oYXJkd2FyZS0+aW5kZXgsIHAsIGktPm1jYXN0X2pvaW5lZCA/ICZpLT5sb2NhbF9tY2FzdF9hZGRyZXNzLmRhdGEuaXB2NCA6IE5VTEwsIGEgPyAmYS0+ZGF0YS5pcHY0IDogTlVMTCwgcG9ydCk7CisgICAgZWxzZSBpZiAoaS0+cHJvdG9jb2wgPT0gQVZBSElfUFJPVE9fSU5FVDYgJiYgaS0+bW9uaXRvci0+c2VydmVyLT5mZF9pcHY2ID49IDApCisgICAgICAgIGF2YWhpX3NlbmRfZG5zX3BhY2tldF9pcHY2KGktPm1vbml0b3ItPnNlcnZlci0+ZmRfaXB2NiwgaS0+aGFyZHdhcmUtPmluZGV4LCBwLCBpLT5tY2FzdF9qb2luZWQgPyAmaS0+bG9jYWxfbWNhc3RfYWRkcmVzcy5kYXRhLmlwdjYgOiBOVUxMLCBhID8gJmEtPmRhdGEuaXB2NiA6IE5VTEwsIHBvcnQpOworfQorCit2b2lkIGF2YWhpX2ludGVyZmFjZV9zZW5kX3BhY2tldChBdmFoaUludGVyZmFjZSAqaSwgQXZhaGlEbnNQYWNrZXQgKnApIHsKKyAgICBhc3NlcnQoaSk7CisgICAgYXNzZXJ0KHApOworCisgICAgYXZhaGlfaW50ZXJmYWNlX3NlbmRfcGFja2V0X3VuaWNhc3QoaSwgcCwgTlVMTCwgMCk7Cit9CisKK2ludCBhdmFoaV9pbnRlcmZhY2VfcG9zdF9xdWVyeShBdmFoaUludGVyZmFjZSAqaSwgQXZhaGlLZXkgKmtleSwgaW50IGltbWVkaWF0ZWx5LCB1bnNpZ25lZCAqcmV0X2lkKSB7CisgICAgYXNzZXJ0KGkpOworICAgIGFzc2VydChrZXkpOworCisgICAgaWYgKCFpLT5hbm5vdW5jaW5nKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBhdmFoaV9xdWVyeV9zY2hlZHVsZXJfcG9zdChpLT5xdWVyeV9zY2hlZHVsZXIsIGtleSwgaW1tZWRpYXRlbHksIHJldF9pZCk7Cit9CisKK2ludCBhdmFoaV9pbnRlcmZhY2Vfd2l0aHJhd19xdWVyeShBdmFoaUludGVyZmFjZSAqaSwgdW5zaWduZWQgaWQpIHsKKworICAgIHJldHVybiBhdmFoaV9xdWVyeV9zY2hlZHVsZXJfd2l0aGRyYXdfYnlfaWQoaS0+cXVlcnlfc2NoZWR1bGVyLCBpZCk7Cit9CisKK2ludCBhdmFoaV9pbnRlcmZhY2VfcG9zdF9yZXNwb25zZShBdmFoaUludGVyZmFjZSAqaSwgQXZhaGlSZWNvcmQgKnJlY29yZCwgaW50IGZsdXNoX2NhY2hlLCBjb25zdCBBdmFoaUFkZHJlc3MgKnF1ZXJpZXIsIGludCBpbW1lZGlhdGVseSkgeworICAgIGFzc2VydChpKTsKKyAgICBhc3NlcnQocmVjb3JkKTsKKworICAgIGlmICghaS0+YW5ub3VuY2luZykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gYXZhaGlfcmVzcG9uc2Vfc2NoZWR1bGVyX3Bvc3QoaS0+cmVzcG9uc2Vfc2NoZWR1bGVyLCByZWNvcmQsIGZsdXNoX2NhY2hlLCBxdWVyaWVyLCBpbW1lZGlhdGVseSk7Cit9CisKK2ludCBhdmFoaV9pbnRlcmZhY2VfcG9zdF9wcm9iZShBdmFoaUludGVyZmFjZSAqaSwgQXZhaGlSZWNvcmQgKnJlY29yZCwgaW50IGltbWVkaWF0ZWx5KSB7CisgICAgYXNzZXJ0KGkpOworICAgIGFzc2VydChyZWNvcmQpOworCisgICAgaWYgKCFpLT5hbm5vdW5jaW5nKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBhdmFoaV9wcm9iZV9zY2hlZHVsZXJfcG9zdChpLT5wcm9iZV9zY2hlZHVsZXIsIHJlY29yZCwgaW1tZWRpYXRlbHkpOworfQorCitpbnQgYXZhaGlfZHVtcF9jYWNoZXMoQXZhaGlJbnRlcmZhY2VNb25pdG9yICptLCBBdmFoaUR1bXBDYWxsYmFjayBjYWxsYmFjaywgdm9pZCogdXNlcmRhdGEpIHsKKyAgICBBdmFoaUludGVyZmFjZSAqaTsKKyAgICBhc3NlcnQobSk7CisKKyAgICBmb3IgKGkgPSBtLT5pbnRlcmZhY2VzOyBpOyBpID0gaS0+aW50ZXJmYWNlX25leHQpIHsKKyAgICAgICAgaWYgKGF2YWhpX2ludGVyZmFjZV9pc19yZWxldmFudChpKSkgeworICAgICAgICAgICAgY2hhciBsblsyNTZdOworICAgICAgICAgICAgc25wcmludGYobG4sIHNpemVvZihsbiksICI7OzsgSU5URVJGQUNFICVzLiVzIDs7OyIsIGktPmhhcmR3YXJlLT5uYW1lLCBhdmFoaV9wcm90b190b19zdHJpbmcoaS0+cHJvdG9jb2wpKTsKKyAgICAgICAgICAgIGNhbGxiYWNrKGxuLCB1c2VyZGF0YSk7CisgICAgICAgICAgICBpZiAoYXZhaGlfY2FjaGVfZHVtcChpLT5jYWNoZSwgY2FsbGJhY2ssIHVzZXJkYXRhKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXZhaGlfaW50ZXJmYWNlX2lzX3JlbGV2YW50X2ludGVybmFsKEF2YWhpSW50ZXJmYWNlICppKSB7CisgICAgQXZhaGlJbnRlcmZhY2VBZGRyZXNzICphOworCisgICAgYXNzZXJ0KGkpOworCisgICAgaWYgKCFpLT5oYXJkd2FyZS0+ZmxhZ3Nfb2spCisgICAgICAgIHJldHVybiAwOworCisgICAgZm9yIChhID0gaS0+YWRkcmVzc2VzOyBhOyBhID0gYS0+YWRkcmVzc19uZXh0KQorICAgICAgICBpZiAoYXZhaGlfaW50ZXJmYWNlX2FkZHJlc3NfaXNfcmVsZXZhbnQoYSkpCisgICAgICAgICAgICByZXR1cm4gMTsKKworICAgIHJldHVybiAwOworfQorCitpbnQgYXZhaGlfaW50ZXJmYWNlX2lzX3JlbGV2YW50KEF2YWhpSW50ZXJmYWNlICppKSB7CisgICAgQXZhaGlTdHJpbmdMaXN0ICpsOworICAgIGFzc2VydChpKTsKKworICAgIGZvciAobCA9IGktPm1vbml0b3ItPnNlcnZlci0+Y29uZmlnLmRlbnlfaW50ZXJmYWNlczsgbDsgbCA9IGwtPm5leHQpCisgICAgICAgIGlmIChzdHJjYXNlY21wKChjaGFyKikgbC0+dGV4dCwgaS0+aGFyZHdhcmUtPm5hbWUpID09IDApCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChpLT5tb25pdG9yLT5zZXJ2ZXItPmNvbmZpZy5hbGxvd19pbnRlcmZhY2VzKSB7CisKKyAgICAgICAgZm9yIChsID0gaS0+bW9uaXRvci0+c2VydmVyLT5jb25maWcuYWxsb3dfaW50ZXJmYWNlczsgbDsgbCA9IGwtPm5leHQpCisgICAgICAgICAgICBpZiAoc3RyY2FzZWNtcCgoY2hhciopIGwtPnRleHQsIGktPmhhcmR3YXJlLT5uYW1lKSA9PSAwKQorICAgICAgICAgICAgICAgIGdvdG8gZ29vZDsKKworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKK2dvb2Q6CisgICAgcmV0dXJuIGF2YWhpX2ludGVyZmFjZV9pc19yZWxldmFudF9pbnRlcm5hbChpKTsKK30KKworaW50IGF2YWhpX2ludGVyZmFjZV9hZGRyZXNzX2lzX3JlbGV2YW50KEF2YWhpSW50ZXJmYWNlQWRkcmVzcyAqYSkgeworICAgIEF2YWhpSW50ZXJmYWNlQWRkcmVzcyAqYjsKKyAgICBhc3NlcnQoYSk7CisKKyAgICAvKiBQdWJsaXNoIHB1YmxpYyBhbmQgbm9uLWRlcHJlY2F0ZWQgSVAgYWRkcmVzc2VzICovCisgICAgaWYgKGEtPmdsb2JhbF9zY29wZSAmJiAhYS0+ZGVwcmVjYXRlZCkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICAvKiBQdWJsaXNoIGxpbmstbG9jYWwgYW5kIGRlcHJlY2F0ZWQgSVAgYWRkcmVzc2VzIG9ubHkgaWYgdGhleSBhcmUKKyAgICAgKiB0aGUgb25seSBvbmVzIG9uIHRoZSBsaW5rICovCisgICAgZm9yIChiID0gYS0+aW50ZXJmYWNlLT5hZGRyZXNzZXM7IGI7IGIgPSBiLT5hZGRyZXNzX25leHQpIHsKKyAgICAgICAgaWYgKGIgPT0gYSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChiLT5nbG9iYWxfc2NvcGUgJiYgIWItPmRlcHJlY2F0ZWQpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gMTsKK30KKworaW50IGF2YWhpX2ludGVyZmFjZV9tYXRjaChBdmFoaUludGVyZmFjZSAqaSwgQXZhaGlJZkluZGV4IGlkeCwgQXZhaGlQcm90b2NvbCBwcm90b2NvbCkgeworICAgIGFzc2VydChpKTsKKworICAgIGlmIChpZHggIT0gQVZBSElfSUZfVU5TUEVDICYmIGlkeCAhPSBpLT5oYXJkd2FyZS0+aW5kZXgpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKHByb3RvY29sICE9IEFWQUhJX1BST1RPX1VOU1BFQyAmJiBwcm90b2NvbCAhPSBpLT5wcm90b2NvbCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gMTsKK30KKwordm9pZCBhdmFoaV9pbnRlcmZhY2VfbW9uaXRvcl93YWxrKEF2YWhpSW50ZXJmYWNlTW9uaXRvciAqbSwgQXZhaGlJZkluZGV4IGludGVyZmFjZSwgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwgQXZhaGlJbnRlcmZhY2VNb25pdG9yV2Fsa0NhbGxiYWNrIGNhbGxiYWNrLCB2b2lkKiB1c2VyZGF0YSkgeworICAgIGFzc2VydChtKTsKKyAgICBhc3NlcnQoY2FsbGJhY2spOworCisgICAgaWYgKGludGVyZmFjZSAhPSBBVkFISV9JRl9VTlNQRUMpIHsKKyAgICAgICAgaWYgKHByb3RvY29sICE9IEFWQUhJX1BST1RPX1VOU1BFQykgeworICAgICAgICAgICAgQXZhaGlJbnRlcmZhY2UgKmk7CisKKyAgICAgICAgICAgIGlmICgoaSA9IGF2YWhpX2ludGVyZmFjZV9tb25pdG9yX2dldF9pbnRlcmZhY2UobSwgaW50ZXJmYWNlLCBwcm90b2NvbCkpKQorICAgICAgICAgICAgICAgIGNhbGxiYWNrKG0sIGksIHVzZXJkYXRhKTsKKworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQXZhaGlId0ludGVyZmFjZSAqaHc7CisgICAgICAgICAgICBBdmFoaUludGVyZmFjZSAqaTsKKworICAgICAgICAgICAgaWYgKChodyA9IGF2YWhpX2ludGVyZmFjZV9tb25pdG9yX2dldF9od19pbnRlcmZhY2UobSwgaW50ZXJmYWNlKSkpCisgICAgICAgICAgICAgICAgZm9yIChpID0gaHctPmludGVyZmFjZXM7IGk7IGkgPSBpLT5ieV9oYXJkd2FyZV9uZXh0KQorICAgICAgICAgICAgICAgICAgICBpZiAoYXZhaGlfaW50ZXJmYWNlX21hdGNoKGksIGludGVyZmFjZSwgcHJvdG9jb2wpKQorICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobSwgaSwgdXNlcmRhdGEpOworICAgICAgICB9CisKKyAgICB9IGVsc2UgeworICAgICAgICBBdmFoaUludGVyZmFjZSAqaTsKKworICAgICAgICBmb3IgKGkgPSBtLT5pbnRlcmZhY2VzOyBpOyBpID0gaS0+aW50ZXJmYWNlX25leHQpCisgICAgICAgICAgICBpZiAoYXZhaGlfaW50ZXJmYWNlX21hdGNoKGksIGludGVyZmFjZSwgcHJvdG9jb2wpKQorICAgICAgICAgICAgICAgIGNhbGxiYWNrKG0sIGksIHVzZXJkYXRhKTsKKyAgICB9Cit9CisKKworaW50IGF2YWhpX2FkZHJlc3NfaXNfbG9jYWwoQXZhaGlJbnRlcmZhY2VNb25pdG9yICptLCBjb25zdCBBdmFoaUFkZHJlc3MgKmEpIHsKKyAgICBBdmFoaUludGVyZmFjZSAqaTsKKyAgICBBdmFoaUludGVyZmFjZUFkZHJlc3MgKmlhOworICAgIGFzc2VydChtKTsKKyAgICBhc3NlcnQoYSk7CisKKyAgICBmb3IgKGkgPSBtLT5pbnRlcmZhY2VzOyBpOyBpID0gaS0+aW50ZXJmYWNlX25leHQpCisgICAgICAgIGZvciAoaWEgPSBpLT5hZGRyZXNzZXM7IGlhOyBpYSA9IGlhLT5hZGRyZXNzX25leHQpCisgICAgICAgICAgICBpZiAoYXZhaGlfYWRkcmVzc19jbXAoYSwgJmlhLT5hZGRyZXNzKSA9PSAwKQorICAgICAgICAgICAgICAgIHJldHVybiAxOworCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBhdmFoaV9pbnRlcmZhY2VfYWRkcmVzc19vbl9saW5rKEF2YWhpSW50ZXJmYWNlICppLCBjb25zdCBBdmFoaUFkZHJlc3MgKmEpIHsKKyAgICBBdmFoaUludGVyZmFjZUFkZHJlc3MgKmlhOworCisgICAgYXNzZXJ0KGkpOworICAgIGFzc2VydChhKTsKKworICAgIGlmIChhLT5wcm90byAhPSBpLT5wcm90b2NvbCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBmb3IgKGlhID0gaS0+YWRkcmVzc2VzOyBpYTsgaWEgPSBpYS0+YWRkcmVzc19uZXh0KSB7CisKKyAgICAgICAgaWYgKGEtPnByb3RvID09IEFWQUhJX1BST1RPX0lORVQpIHsKKyAgICAgICAgICAgIHVpbnQzMl90IG07CisKKyAgICAgICAgICAgIG0gPSB+KCgodWludDMyX3QpIC0xKSA+PiBpYS0+cHJlZml4X2xlbik7CisKKyAgICAgICAgICAgIGlmICgobnRvaGwoYS0+ZGF0YS5pcHY0LmFkZHJlc3MpICYgbSkgPT0gKG50b2hsKGlhLT5hZGRyZXNzLmRhdGEuaXB2NC5hZGRyZXNzKSAmIG0pKQorICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdW5zaWduZWQgajsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgcGw7CisgICAgICAgICAgICBhc3NlcnQoYS0+cHJvdG8gPT0gQVZBSElfUFJPVE9fSU5FVDYpOworCisgICAgICAgICAgICBwbCA9IGlhLT5wcmVmaXhfbGVuOworCisgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgMTY7IGorKykgeworICAgICAgICAgICAgICAgIHVpbnQ4X3QgbTsKKworICAgICAgICAgICAgICAgIGlmIChwbCA9PSAwKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKworICAgICAgICAgICAgICAgIGlmIChwbCA+PSA4KSB7CisgICAgICAgICAgICAgICAgICAgIG0gPSAweEZGOworICAgICAgICAgICAgICAgICAgICBwbCAtPSA4OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG0gPSB+KDB4RkYgPj4gcGwpOworICAgICAgICAgICAgICAgICAgICBwbCA9IDA7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKChhLT5kYXRhLmlwdjYuYWRkcmVzc1tqXSAmIG0pICE9IChpYS0+YWRkcmVzcy5kYXRhLmlwdjYuYWRkcmVzc1tqXSAmIG0pKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQorCitpbnQgYXZhaGlfaW50ZXJmYWNlX2hhc19hZGRyZXNzKEF2YWhpSW50ZXJmYWNlTW9uaXRvciAqbSwgQXZhaGlJZkluZGV4IGlmYWNlLCBjb25zdCBBdmFoaUFkZHJlc3MgKmEpIHsKKyAgICBBdmFoaUludGVyZmFjZSAqaTsKKyAgICBBdmFoaUludGVyZmFjZUFkZHJlc3MgKmo7CisKKyAgICBhc3NlcnQobSk7CisgICAgYXNzZXJ0KGlmYWNlICE9IEFWQUhJX0lGX1VOU1BFQyk7CisgICAgYXNzZXJ0KGEpOworCisgICAgaWYgKCEoaSA9IGF2YWhpX2ludGVyZmFjZV9tb25pdG9yX2dldF9pbnRlcmZhY2UobSwgaWZhY2UsIGEtPnByb3RvKSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgZm9yIChqID0gaS0+YWRkcmVzc2VzOyBqOyBqID0gai0+YWRkcmVzc19uZXh0KQorICAgICAgICBpZiAoYXZhaGlfYWRkcmVzc19jbXAoYSwgJmotPmFkZHJlc3MpID09IDApCisgICAgICAgICAgICByZXR1cm4gMTsKKworICAgIHJldHVybiAwOworfQorCitBdmFoaUlmSW5kZXggYXZhaGlfZmluZF9pbnRlcmZhY2VfZm9yX2FkZHJlc3MoQXZhaGlJbnRlcmZhY2VNb25pdG9yICptLCBjb25zdCBBdmFoaUFkZHJlc3MgKmEpIHsKKyAgICBBdmFoaUludGVyZmFjZSAqaTsKKyAgICBhc3NlcnQobSk7CisKKyAgICAvKiBTb21lIHN0dXBpZCBPUyBkb24ndCBzdXBwb3J0IHBhc3NpbmcgdGhlIGludGVyZmFjZSBpbmRleCB3aGVuIGEKKyAgICAgKiBwYWNrZXQgaXMgcmVjZWl2ZWQuIFdlIGhhdmUgdG8gd29yayBhcm91bmQgdGhhdCBsaW1pdGF0aW9uIGJ5CisgICAgICogbG9va2luZyBmb3IgYW4gaW50ZXJmYWNlIHRoYXQgaGFzIHRoZSBpbmNvbWluZyBhZGRyZXNzCisgICAgICogYXR0YWNoZWQuIFRoaXMgaXMgc29tZXRpbWVzIGFtYmlndW91cywgYnV0IHdlIGhhdmUgdG8gbGl2ZSB3aXRoCisgICAgICogaXQuICovCisKKyAgICBmb3IgKGkgPSBtLT5pbnRlcmZhY2VzOyBpOyBpID0gaS0+aW50ZXJmYWNlX25leHQpIHsKKyAgICAgICAgQXZhaGlJbnRlcmZhY2VBZGRyZXNzICphaTsKKworICAgICAgICBpZiAoaS0+cHJvdG9jb2wgIT0gYS0+cHJvdG8pCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBmb3IgKGFpID0gaS0+YWRkcmVzc2VzOyBhaTsgYWkgPSBhaS0+YWRkcmVzc19uZXh0KQorICAgICAgICAgICAgaWYgKGF2YWhpX2FkZHJlc3NfY21wKGEsICZhaS0+YWRkcmVzcykgPT0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gaS0+aGFyZHdhcmUtPmluZGV4OworICAgIH0KKworICAgIHJldHVybiBBVkFISV9JRl9VTlNQRUM7Cit9CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9pZmFjZS5oIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvaWZhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2YyNGFmCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvaWZhY2UuaApAQCAtMCwwICsxLDE5NSBAQAorI2lmbmRlZiBmb29pZmFjZWhmb28KKyNkZWZpbmUgZm9vaWZhY2VoZm9vCisKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKwordHlwZWRlZiBzdHJ1Y3QgQXZhaGlJbnRlcmZhY2VNb25pdG9yIEF2YWhpSW50ZXJmYWNlTW9uaXRvcjsKK3R5cGVkZWYgc3RydWN0IEF2YWhpSW50ZXJmYWNlQWRkcmVzcyBBdmFoaUludGVyZmFjZUFkZHJlc3M7Cit0eXBlZGVmIHN0cnVjdCBBdmFoaUludGVyZmFjZSBBdmFoaUludGVyZmFjZTsKK3R5cGVkZWYgc3RydWN0IEF2YWhpSHdJbnRlcmZhY2UgQXZhaGlId0ludGVyZmFjZTsKKworI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9sbGlzdC5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9hZGRyZXNzLmg+CisKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicmVzcG9uc2Utc2NoZWQuaCIKKyNpbmNsdWRlICJxdWVyeS1zY2hlZC5oIgorI2luY2x1ZGUgInByb2JlLXNjaGVkLmgiCisjaW5jbHVkZSAiZG5zLmgiCisjaW5jbHVkZSAiYW5ub3VuY2UuaCIKKyNpbmNsdWRlICJicm93c2UuaCIKKyNpbmNsdWRlICJxdWVyaWVyLmgiCisKKyNpZmRlZiBIQVZFX05FVExJTksKKyNpbmNsdWRlICJpZmFjZS1saW51eC5oIgorI2VsaWYgZGVmaW5lZChIQVZFX1BGX1JPVVRFKQorI2luY2x1ZGUgImlmYWNlLXBmcm91dGUuaCIKKyNlbHNlCit0eXBlZGVmIHN0cnVjdCBBdmFoaUludGVyZmFjZU1vbml0b3JPU0RlcCBBdmFoaUludGVyZmFjZU1vbml0b3JPU0RlcDsKK3N0cnVjdCBBdmFoaUludGVyZmFjZU1vbml0b3JPU0RlcCB7CisKKyAgICB1bnNpZ25lZCBxdWVyeV9hZGRyX3NlcSwgcXVlcnlfbGlua19zZXE7CisKKyAgICBlbnVtIHsKKyAgICAgICAgTElTVF9JRkFDRSwKKyAgICAgICAgTElTVF9BRERSLAorICAgICAgICBMSVNUX0RPTkUKKyAgICB9IGxpc3Q7Cit9OworI2VuZGlmCisKKyNkZWZpbmUgQVZBSElfTUFDX0FERFJFU1NfTUFYIDMyCisKK3N0cnVjdCBBdmFoaUludGVyZmFjZU1vbml0b3IgeworICAgIEF2YWhpU2VydmVyICpzZXJ2ZXI7CisgICAgQXZhaGlIYXNobWFwICpoYXNobWFwOworCisgICAgQVZBSElfTExJU1RfSEVBRChBdmFoaUludGVyZmFjZSwgaW50ZXJmYWNlcyk7CisgICAgQVZBSElfTExJU1RfSEVBRChBdmFoaUh3SW50ZXJmYWNlLCBod19pbnRlcmZhY2VzKTsKKworICAgIGludCBsaXN0X2NvbXBsZXRlOworICAgIEF2YWhpSW50ZXJmYWNlTW9uaXRvck9TRGVwIG9zZGVwOworfTsKKworc3RydWN0IEF2YWhpSHdJbnRlcmZhY2UgeworICAgIEF2YWhpSW50ZXJmYWNlTW9uaXRvciAqbW9uaXRvcjsKKworICAgIEFWQUhJX0xMSVNUX0ZJRUxEUyhBdmFoaUh3SW50ZXJmYWNlLCBoYXJkd2FyZSk7CisKKyAgICBjaGFyICpuYW1lOworICAgIEF2YWhpSWZJbmRleCBpbmRleDsKKyAgICBpbnQgZmxhZ3Nfb2s7CisKKyAgICB1bnNpZ25lZCBtdHU7CisKKyAgICB1aW50OF90IG1hY19hZGRyZXNzW0FWQUhJX01BQ19BRERSRVNTX01BWF07CisgICAgc2l6ZV90IG1hY19hZGRyZXNzX3NpemU7CisKKyAgICBBdmFoaVNFbnRyeUdyb3VwICplbnRyeV9ncm91cDsKKworICAgIC8qIFBhY2tldCByYXRlIGxpbWl0aW5nICovCisgICAgc3RydWN0IHRpbWV2YWwgcmF0ZWxpbWl0X2JlZ2luOworICAgIHVuc2lnbmVkIHJhdGVsaW1pdF9jb3VudGVyOworCisgICAgQVZBSElfTExJU1RfSEVBRChBdmFoaUludGVyZmFjZSwgaW50ZXJmYWNlcyk7Cit9OworCitzdHJ1Y3QgQXZhaGlJbnRlcmZhY2UgeworICAgIEF2YWhpSW50ZXJmYWNlTW9uaXRvciAqbW9uaXRvcjsKKyAgICBBdmFoaUh3SW50ZXJmYWNlICpoYXJkd2FyZTsKKworICAgIEFWQUhJX0xMSVNUX0ZJRUxEUyhBdmFoaUludGVyZmFjZSwgaW50ZXJmYWNlKTsKKyAgICBBVkFISV9MTElTVF9GSUVMRFMoQXZhaGlJbnRlcmZhY2UsIGJ5X2hhcmR3YXJlKTsKKworICAgIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2w7CisgICAgaW50IGFubm91bmNpbmc7CisgICAgQXZhaGlBZGRyZXNzIGxvY2FsX21jYXN0X2FkZHJlc3M7CisgICAgaW50IG1jYXN0X2pvaW5lZDsKKworICAgIEF2YWhpQ2FjaGUgKmNhY2hlOworCisgICAgQXZhaGlRdWVyeVNjaGVkdWxlciAqcXVlcnlfc2NoZWR1bGVyOworICAgIEF2YWhpUmVzcG9uc2VTY2hlZHVsZXIgKiByZXNwb25zZV9zY2hlZHVsZXI7CisgICAgQXZhaGlQcm9iZVNjaGVkdWxlciAqcHJvYmVfc2NoZWR1bGVyOworCisgICAgQVZBSElfTExJU1RfSEVBRChBdmFoaUludGVyZmFjZUFkZHJlc3MsIGFkZHJlc3Nlcyk7CisgICAgQVZBSElfTExJU1RfSEVBRChBdmFoaUFubm91bmNlciwgYW5ub3VuY2Vycyk7CisKKyAgICBBdmFoaUhhc2htYXAgKnF1ZXJpZXJzX2J5X2tleTsKKyAgICBBVkFISV9MTElTVF9IRUFEKEF2YWhpUXVlcmllciwgcXVlcmllcnMpOworfTsKKworc3RydWN0IEF2YWhpSW50ZXJmYWNlQWRkcmVzcyB7CisgICAgQXZhaGlJbnRlcmZhY2VNb25pdG9yICptb25pdG9yOworICAgIEF2YWhpSW50ZXJmYWNlICppbnRlcmZhY2U7CisKKyAgICBBVkFISV9MTElTVF9GSUVMRFMoQXZhaGlJbnRlcmZhY2VBZGRyZXNzLCBhZGRyZXNzKTsKKworICAgIEF2YWhpQWRkcmVzcyBhZGRyZXNzOworICAgIHVuc2lnbmVkIHByZWZpeF9sZW47CisKKyAgICBpbnQgZ2xvYmFsX3Njb3BlOworICAgIGludCBkZXByZWNhdGVkOworCisgICAgQXZhaGlTRW50cnlHcm91cCAqZW50cnlfZ3JvdXA7Cit9OworCitBdmFoaUludGVyZmFjZU1vbml0b3IgKmF2YWhpX2ludGVyZmFjZV9tb25pdG9yX25ldyhBdmFoaVNlcnZlciAqc2VydmVyKTsKK3ZvaWQgYXZhaGlfaW50ZXJmYWNlX21vbml0b3JfZnJlZShBdmFoaUludGVyZmFjZU1vbml0b3IgKm0pOworCitpbnQgYXZhaGlfaW50ZXJmYWNlX21vbml0b3JfaW5pdF9vc2RlcChBdmFoaUludGVyZmFjZU1vbml0b3IgKm0pOwordm9pZCBhdmFoaV9pbnRlcmZhY2VfbW9uaXRvcl9mcmVlX29zZGVwKEF2YWhpSW50ZXJmYWNlTW9uaXRvciAqbSk7Cit2b2lkIGF2YWhpX2ludGVyZmFjZV9tb25pdG9yX3N5bmMoQXZhaGlJbnRlcmZhY2VNb25pdG9yICptKTsKKwordHlwZWRlZiB2b2lkICgqQXZhaGlJbnRlcmZhY2VNb25pdG9yV2Fsa0NhbGxiYWNrKShBdmFoaUludGVyZmFjZU1vbml0b3IgKm0sIEF2YWhpSW50ZXJmYWNlICppLCB2b2lkKiB1c2VyZGF0YSk7Cit2b2lkIGF2YWhpX2ludGVyZmFjZV9tb25pdG9yX3dhbGsoQXZhaGlJbnRlcmZhY2VNb25pdG9yICptLCBBdmFoaUlmSW5kZXggaWR4LCBBdmFoaVByb3RvY29sIHByb3RvY29sLCBBdmFoaUludGVyZmFjZU1vbml0b3JXYWxrQ2FsbGJhY2sgY2FsbGJhY2ssIHZvaWQqIHVzZXJkYXRhKTsKK2ludCBhdmFoaV9kdW1wX2NhY2hlcyhBdmFoaUludGVyZmFjZU1vbml0b3IgKm0sIEF2YWhpRHVtcENhbGxiYWNrIGNhbGxiYWNrLCB2b2lkKiB1c2VyZGF0YSk7CisKK3ZvaWQgYXZhaGlfaW50ZXJmYWNlX21vbml0b3JfdXBkYXRlX3JycyhBdmFoaUludGVyZmFjZU1vbml0b3IgKm0sIGludCByZW1vdmVfcnJzKTsKK2ludCBhdmFoaV9hZGRyZXNzX2lzX2xvY2FsKEF2YWhpSW50ZXJmYWNlTW9uaXRvciAqbSwgY29uc3QgQXZhaGlBZGRyZXNzICphKTsKK3ZvaWQgYXZhaGlfaW50ZXJmYWNlX21vbml0b3JfY2hlY2tfcmVsZXZhbnQoQXZhaGlJbnRlcmZhY2VNb25pdG9yICptKTsKKworLyogQXZhaGlId0ludGVyZmFjZSAqLworCitBdmFoaUh3SW50ZXJmYWNlICphdmFoaV9od19pbnRlcmZhY2VfbmV3KEF2YWhpSW50ZXJmYWNlTW9uaXRvciAqbSwgQXZhaGlJZkluZGV4IGlkeCk7Cit2b2lkIGF2YWhpX2h3X2ludGVyZmFjZV9mcmVlKEF2YWhpSHdJbnRlcmZhY2UgKmh3LCBpbnQgc2VuZF9nb29kYnllKTsKKwordm9pZCBhdmFoaV9od19pbnRlcmZhY2VfdXBkYXRlX3JycyhBdmFoaUh3SW50ZXJmYWNlICpodywgaW50IHJlbW92ZV9ycnMpOwordm9pZCBhdmFoaV9od19pbnRlcmZhY2VfY2hlY2tfcmVsZXZhbnQoQXZhaGlId0ludGVyZmFjZSAqaHcpOworCitBdmFoaUh3SW50ZXJmYWNlKiBhdmFoaV9pbnRlcmZhY2VfbW9uaXRvcl9nZXRfaHdfaW50ZXJmYWNlKEF2YWhpSW50ZXJmYWNlTW9uaXRvciAqbSwgaW50IGlkeCk7CisKKy8qIEF2YWhpSW50ZXJmYWNlICovCisKK0F2YWhpSW50ZXJmYWNlKiBhdmFoaV9pbnRlcmZhY2VfbmV3KEF2YWhpSW50ZXJmYWNlTW9uaXRvciAqbSwgQXZhaGlId0ludGVyZmFjZSAqaHcsIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wpOwordm9pZCBhdmFoaV9pbnRlcmZhY2VfZnJlZShBdmFoaUludGVyZmFjZSAqaSwgaW50IHNlbmRfZ29vZGJ5ZSk7CisKK3ZvaWQgYXZhaGlfaW50ZXJmYWNlX3VwZGF0ZV9ycnMoQXZhaGlJbnRlcmZhY2UgKmksIGludCByZW1vdmVfcnJzKTsKK3ZvaWQgYXZhaGlfaW50ZXJmYWNlX2NoZWNrX3JlbGV2YW50KEF2YWhpSW50ZXJmYWNlICppKTsKK2ludCBhdmFoaV9pbnRlcmZhY2VfaXNfcmVsZXZhbnQoQXZhaGlJbnRlcmZhY2UgKmkpOworCit2b2lkIGF2YWhpX2ludGVyZmFjZV9zZW5kX3BhY2tldChBdmFoaUludGVyZmFjZSAqaSwgQXZhaGlEbnNQYWNrZXQgKnApOwordm9pZCBhdmFoaV9pbnRlcmZhY2Vfc2VuZF9wYWNrZXRfdW5pY2FzdChBdmFoaUludGVyZmFjZSAqaSwgQXZhaGlEbnNQYWNrZXQgKnAsIGNvbnN0IEF2YWhpQWRkcmVzcyAqYSwgdWludDE2X3QgcG9ydCk7CisKK2ludCBhdmFoaV9pbnRlcmZhY2VfcG9zdF9xdWVyeShBdmFoaUludGVyZmFjZSAqaSwgQXZhaGlLZXkgKmssIGludCBpbW1lZGlhdGVseSwgdW5zaWduZWQgKnJldF9pZCk7CitpbnQgYXZhaGlfaW50ZXJmYWNlX3dpdGhyYXdfcXVlcnkoQXZhaGlJbnRlcmZhY2UgKmksIHVuc2lnbmVkIGlkKTsKK2ludCBhdmFoaV9pbnRlcmZhY2VfcG9zdF9yZXNwb25zZShBdmFoaUludGVyZmFjZSAqaSwgQXZhaGlSZWNvcmQgKnJlY29yZCwgaW50IGZsdXNoX2NhY2hlLCBjb25zdCBBdmFoaUFkZHJlc3MgKnF1ZXJpZXIsIGludCBpbW1lZGlhdGVseSk7CitpbnQgYXZhaGlfaW50ZXJmYWNlX3Bvc3RfcHJvYmUoQXZhaGlJbnRlcmZhY2UgKmksIEF2YWhpUmVjb3JkICpwLCBpbnQgaW1tZWRpYXRlbHkpOworCitpbnQgYXZhaGlfaW50ZXJmYWNlX21hdGNoKEF2YWhpSW50ZXJmYWNlICppLCBBdmFoaUlmSW5kZXggaWR4LCBBdmFoaVByb3RvY29sIHByb3RvY29sKTsKK2ludCBhdmFoaV9pbnRlcmZhY2VfYWRkcmVzc19vbl9saW5rKEF2YWhpSW50ZXJmYWNlICppLCBjb25zdCBBdmFoaUFkZHJlc3MgKmEpOworaW50IGF2YWhpX2ludGVyZmFjZV9oYXNfYWRkcmVzcyhBdmFoaUludGVyZmFjZU1vbml0b3IgKm0sIEF2YWhpSWZJbmRleCBpZmFjZSwgY29uc3QgQXZhaGlBZGRyZXNzICphKTsKKworQXZhaGlJbnRlcmZhY2UqIGF2YWhpX2ludGVyZmFjZV9tb25pdG9yX2dldF9pbnRlcmZhY2UoQXZhaGlJbnRlcmZhY2VNb25pdG9yICptLCBBdmFoaUlmSW5kZXggaWR4LCBBdmFoaVByb3RvY29sIHByb3RvY29sKTsKKworLyogQXZhaGlJbnRlcmZhY2VBZGRyZXNzICovCisKK0F2YWhpSW50ZXJmYWNlQWRkcmVzcyAqYXZhaGlfaW50ZXJmYWNlX2FkZHJlc3NfbmV3KEF2YWhpSW50ZXJmYWNlTW9uaXRvciAqbSwgQXZhaGlJbnRlcmZhY2UgKmksIGNvbnN0IEF2YWhpQWRkcmVzcyAqYWRkciwgdW5zaWduZWQgcHJlZml4X2xlbik7Cit2b2lkIGF2YWhpX2ludGVyZmFjZV9hZGRyZXNzX2ZyZWUoQXZhaGlJbnRlcmZhY2VBZGRyZXNzICphKTsKKwordm9pZCBhdmFoaV9pbnRlcmZhY2VfYWRkcmVzc191cGRhdGVfcnJzKEF2YWhpSW50ZXJmYWNlQWRkcmVzcyAqYSwgaW50IHJlbW92ZV9ycnMpOworaW50IGF2YWhpX2ludGVyZmFjZV9hZGRyZXNzX2lzX3JlbGV2YW50KEF2YWhpSW50ZXJmYWNlQWRkcmVzcyAqYSk7CisKK0F2YWhpSW50ZXJmYWNlQWRkcmVzcyogYXZhaGlfaW50ZXJmYWNlX21vbml0b3JfZ2V0X2FkZHJlc3MoQXZhaGlJbnRlcmZhY2VNb25pdG9yICptLCBBdmFoaUludGVyZmFjZSAqaSwgY29uc3QgQXZhaGlBZGRyZXNzICpyYWRkcik7CisKK0F2YWhpSWZJbmRleCBhdmFoaV9maW5kX2ludGVyZmFjZV9mb3JfYWRkcmVzcyhBdmFoaUludGVyZmFjZU1vbml0b3IgKm0sIGNvbnN0IEF2YWhpQWRkcmVzcyAqYSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvaW50ZXJuYWwuaCBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL2ludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhmOTMwMgotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL2ludGVybmFsLmgKQEAgLTAsMCArMSwyMjcgQEAKKyNpZm5kZWYgZm9vaW50ZXJuYWxoZm9vCisjZGVmaW5lIGZvb2ludGVybmFsaGZvbworCisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKy8qKiBBIGxvY2FsbHkgcmVnaXN0ZXJlZCBETlMgcmVzb3VyY2UgcmVjb3JkICovCit0eXBlZGVmIHN0cnVjdCBBdmFoaUVudHJ5IEF2YWhpRW50cnk7CisKKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vbGxpc3QuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vd2F0Y2guaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vdGltZXZhbC5oPgorCisjaW5jbHVkZSAiY29yZS5oIgorI2luY2x1ZGUgImlmYWNlLmgiCisjaW5jbHVkZSAicHJpb3EuaCIKKyNpbmNsdWRlICJ0aW1lZXZlbnRxLmgiCisjaW5jbHVkZSAiYW5ub3VuY2UuaCIKKyNpbmNsdWRlICJicm93c2UuaCIKKyNpbmNsdWRlICJkbnMuaCIKKyNpbmNsdWRlICJycmxpc3QuaCIKKyNpbmNsdWRlICJoYXNobWFwLmgiCisjaW5jbHVkZSAid2lkZS1hcmVhLmgiCisjaW5jbHVkZSAibXVsdGljYXN0LWxvb2t1cC5oIgorI2luY2x1ZGUgImRucy1zcnYtcnIuaCIKKworI2RlZmluZSBBVkFISV9MRUdBQ1lfVU5JQ0FTVF9SRUZMRUNUX1NMT1RTX01BWCAxMDAKKworI2RlZmluZSBBVkFISV9GTEFHU19WQUxJRChmbGFncywgbWF4KSAoISgoZmxhZ3MpICYgfihtYXgpKSkKKworI2RlZmluZSBBVkFISV9SUl9IT0xET0ZGX01TRUMgMTAwMAorI2RlZmluZSBBVkFISV9SUl9IT0xET0ZGX01TRUNfUkFURV9MSU1JVCAyMDAwMAorI2RlZmluZSBBVkFISV9SUl9SQVRFX0xJTUlUX0NPVU5UIDE1CisKK3R5cGVkZWYgc3RydWN0IEF2YWhpTGVnYWN5VW5pY2FzdFJlZmxlY3RTbG90IEF2YWhpTGVnYWN5VW5pY2FzdFJlZmxlY3RTbG90OworCitzdHJ1Y3QgQXZhaGlMZWdhY3lVbmljYXN0UmVmbGVjdFNsb3QgeworICAgIEF2YWhpU2VydmVyICpzZXJ2ZXI7CisKKyAgICB1aW50MTZfdCBpZCwgb3JpZ2luYWxfaWQ7CisgICAgQXZhaGlBZGRyZXNzIGFkZHJlc3M7CisgICAgdWludDE2X3QgcG9ydDsKKyAgICBpbnQgaW50ZXJmYWNlOworICAgIHN0cnVjdCB0aW1ldmFsIGVsYXBzZV90aW1lOworICAgIEF2YWhpVGltZUV2ZW50ICp0aW1lX2V2ZW50OworfTsKKworc3RydWN0IEF2YWhpRW50cnkgeworICAgIEF2YWhpU2VydmVyICpzZXJ2ZXI7CisgICAgQXZhaGlTRW50cnlHcm91cCAqZ3JvdXA7CisKKyAgICBpbnQgZGVhZDsKKworICAgIEF2YWhpUHVibGlzaEZsYWdzIGZsYWdzOworICAgIEF2YWhpUmVjb3JkICpyZWNvcmQ7CisgICAgQXZhaGlJZkluZGV4IGludGVyZmFjZTsKKyAgICBBdmFoaVByb3RvY29sIHByb3RvY29sOworCisgICAgQVZBSElfTExJU1RfRklFTERTKEF2YWhpRW50cnksIGVudHJpZXMpOworICAgIEFWQUhJX0xMSVNUX0ZJRUxEUyhBdmFoaUVudHJ5LCBieV9rZXkpOworICAgIEFWQUhJX0xMSVNUX0ZJRUxEUyhBdmFoaUVudHJ5LCBieV9ncm91cCk7CisKKyAgICBBVkFISV9MTElTVF9IRUFEKEF2YWhpQW5ub3VuY2VyLCBhbm5vdW5jZXJzKTsKK307CisKK3N0cnVjdCBBdmFoaVNFbnRyeUdyb3VwIHsKKyAgICBBdmFoaVNlcnZlciAqc2VydmVyOworICAgIGludCBkZWFkOworCisgICAgQXZhaGlFbnRyeUdyb3VwU3RhdGUgc3RhdGU7CisgICAgdm9pZCogdXNlcmRhdGE7CisgICAgQXZhaGlTRW50cnlHcm91cENhbGxiYWNrIGNhbGxiYWNrOworCisgICAgdW5zaWduZWQgbl9wcm9iaW5nOworCisgICAgdW5zaWduZWQgbl9yZWdpc3Rlcl90cnk7CisgICAgc3RydWN0IHRpbWV2YWwgcmVnaXN0ZXJfdGltZTsKKyAgICBBdmFoaVRpbWVFdmVudCAqcmVnaXN0ZXJfdGltZV9ldmVudDsKKworICAgIHN0cnVjdCB0aW1ldmFsIGVzdGFibGlzaGVkX2F0OworCisgICAgQVZBSElfTExJU1RfRklFTERTKEF2YWhpU0VudHJ5R3JvdXAsIGdyb3Vwcyk7CisgICAgQVZBSElfTExJU1RfSEVBRChBdmFoaUVudHJ5LCBlbnRyaWVzKTsKK307CisKK3N0cnVjdCBBdmFoaVNlcnZlciB7CisgICAgY29uc3QgQXZhaGlQb2xsICpwb2xsX2FwaTsKKworICAgIEF2YWhpSW50ZXJmYWNlTW9uaXRvciAqbW9uaXRvcjsKKyAgICBBdmFoaVNlcnZlckNvbmZpZyBjb25maWc7CisKKyAgICBBVkFISV9MTElTVF9IRUFEKEF2YWhpRW50cnksIGVudHJpZXMpOworICAgIEF2YWhpSGFzaG1hcCAqZW50cmllc19ieV9rZXk7CisKKyAgICBBVkFISV9MTElTVF9IRUFEKEF2YWhpU0VudHJ5R3JvdXAsIGdyb3Vwcyk7CisKKyAgICBBVkFISV9MTElTVF9IRUFEKEF2YWhpU1JlY29yZEJyb3dzZXIsIHJlY29yZF9icm93c2Vycyk7CisgICAgQXZhaGlIYXNobWFwICpyZWNvcmRfYnJvd3Nlcl9oYXNobWFwOworICAgIEFWQUhJX0xMSVNUX0hFQUQoQXZhaGlTSG9zdE5hbWVSZXNvbHZlciwgaG9zdF9uYW1lX3Jlc29sdmVycyk7CisgICAgQVZBSElfTExJU1RfSEVBRChBdmFoaVNBZGRyZXNzUmVzb2x2ZXIsIGFkZHJlc3NfcmVzb2x2ZXJzKTsKKyAgICBBVkFISV9MTElTVF9IRUFEKEF2YWhpU0RvbWFpbkJyb3dzZXIsIGRvbWFpbl9icm93c2Vycyk7CisgICAgQVZBSElfTExJU1RfSEVBRChBdmFoaVNTZXJ2aWNlVHlwZUJyb3dzZXIsIHNlcnZpY2VfdHlwZV9icm93c2Vycyk7CisgICAgQVZBSElfTExJU1RfSEVBRChBdmFoaVNTZXJ2aWNlQnJvd3Nlciwgc2VydmljZV9icm93c2Vycyk7CisgICAgQVZBSElfTExJU1RfSEVBRChBdmFoaVNTZXJ2aWNlUmVzb2x2ZXIsIHNlcnZpY2VfcmVzb2x2ZXJzKTsKKyAgICBBVkFISV9MTElTVF9IRUFEKEF2YWhpU0ROU1NlcnZlckJyb3dzZXIsIGRuc19zZXJ2ZXJfYnJvd3NlcnMpOworCisgICAgaW50IG5lZWRfZW50cnlfY2xlYW51cCwgbmVlZF9ncm91cF9jbGVhbnVwLCBuZWVkX2Jyb3dzZXJfY2xlYW51cDsKKworICAgIC8qIFVzZWQgZm9yIHNjaGVkdWxpbmcgUlIgY2xlYW51cCAqLworICAgIEF2YWhpVGltZUV2ZW50ICpjbGVhbnVwX3RpbWVfZXZlbnQ7CisKKyAgICBBdmFoaVRpbWVFdmVudFF1ZXVlICp0aW1lX2V2ZW50X3F1ZXVlOworCisgICAgY2hhciAqaG9zdF9uYW1lLCAqaG9zdF9uYW1lX2ZxZG4sICpkb21haW5fbmFtZTsKKworICAgIGludCBmZF9pcHY0LCBmZF9pcHY2LAorICAgICAgICAvKiBUaGUgZm9sbG93aW5nIHR3byBzb2NrZXRzIHR3byBhcmUgdXNlZCBmb3IgcmVmbGVjdGlvbiBvbmx5ICovCisgICAgICAgIGZkX2xlZ2FjeV91bmljYXN0X2lwdjQsIGZkX2xlZ2FjeV91bmljYXN0X2lwdjY7CisKKyAgICBBdmFoaVdhdGNoICp3YXRjaF9pcHY0LCAqd2F0Y2hfaXB2NiwKKyAgICAgICAgKndhdGNoX2xlZ2FjeV91bmljYXN0X2lwdjQsICp3YXRjaF9sZWdhY3lfdW5pY2FzdF9pcHY2OworCisgICAgQXZhaGlTZXJ2ZXJTdGF0ZSBzdGF0ZTsKKyAgICBBdmFoaVNlcnZlckNhbGxiYWNrIGNhbGxiYWNrOworICAgIHZvaWQqIHVzZXJkYXRhOworCisgICAgQXZhaGlTRW50cnlHcm91cCAqaGluZm9fZW50cnlfZ3JvdXA7CisgICAgQXZhaGlTRW50cnlHcm91cCAqYnJvd3NlX2RvbWFpbl9lbnRyeV9ncm91cDsKKyAgICB1bnNpZ25lZCBuX2hvc3RfcnJfcGVuZGluZzsKKworICAgIC8qIFVzZWQgZm9yIGFzc2VtYmxpbmcgcmVzcG9uc2VzICovCisgICAgQXZhaGlSZWNvcmRMaXN0ICpyZWNvcmRfbGlzdDsKKworICAgIC8qIFVzZWQgZm9yIHJlZmxlY3Rpb24gb2YgbGVnYWN5IHVuaWNhc3QgcGFja2V0cyAqLworICAgIEF2YWhpTGVnYWN5VW5pY2FzdFJlZmxlY3RTbG90ICoqbGVnYWN5X3VuaWNhc3RfcmVmbGVjdF9zbG90czsKKyAgICB1aW50MTZfdCBsZWdhY3lfdW5pY2FzdF9yZWZsZWN0X2lkOworCisgICAgLyogVGhlIGxhc3QgZXJyb3IgY29kZSAqLworICAgIGludCBlcnJvcjsKKworICAgIC8qIFRoZSBsb2NhbCBzZXJ2aWNlIGNvb2tpZSAqLworICAgIHVpbnQzMl90IGxvY2FsX3NlcnZpY2VfY29va2llOworCisgICAgQXZhaGlNdWx0aWNhc3RMb29rdXBFbmdpbmUgKm11bHRpY2FzdF9sb29rdXBfZW5naW5lOworICAgIEF2YWhpV2lkZUFyZWFMb29rdXBFbmdpbmUgKndpZGVfYXJlYV9sb29rdXBfZW5naW5lOworfTsKKwordm9pZCBhdmFoaV9lbnRyeV9mcmVlKEF2YWhpU2VydmVyKnMsIEF2YWhpRW50cnkgKmUpOwordm9pZCBhdmFoaV9lbnRyeV9ncm91cF9mcmVlKEF2YWhpU2VydmVyICpzLCBBdmFoaVNFbnRyeUdyb3VwICpnKTsKKwordm9pZCBhdmFoaV9jbGVhbnVwX2RlYWRfZW50cmllcyhBdmFoaVNlcnZlciAqcyk7CisKK3ZvaWQgYXZhaGlfc2VydmVyX3ByZXBhcmVfcmVzcG9uc2UoQXZhaGlTZXJ2ZXIgKnMsIEF2YWhpSW50ZXJmYWNlICppLCBBdmFoaUVudHJ5ICplLCBpbnQgdW5pY2FzdF9yZXNwb25zZSwgaW50IGF1eGlsaWFyeSk7Cit2b2lkIGF2YWhpX3NlcnZlcl9wcmVwYXJlX21hdGNoaW5nX3Jlc3BvbnNlcyhBdmFoaVNlcnZlciAqcywgQXZhaGlJbnRlcmZhY2UgKmksIEF2YWhpS2V5ICprLCBpbnQgdW5pY2FzdF9yZXNwb25zZSk7Cit2b2lkIGF2YWhpX3NlcnZlcl9nZW5lcmF0ZV9yZXNwb25zZShBdmFoaVNlcnZlciAqcywgQXZhaGlJbnRlcmZhY2UgKmksIEF2YWhpRG5zUGFja2V0ICpwLCBjb25zdCBBdmFoaUFkZHJlc3MgKmEsIHVpbnQxNl90IHBvcnQsIGludCBsZWdhY3lfdW5pY2FzdCwgaW50IGlzX3Byb2JlKTsKKwordm9pZCBhdmFoaV9zX2VudHJ5X2dyb3VwX2NoYW5nZV9zdGF0ZShBdmFoaVNFbnRyeUdyb3VwICpnLCBBdmFoaUVudHJ5R3JvdXBTdGF0ZSBzdGF0ZSk7CisKK2ludCBhdmFoaV9lbnRyeV9pc19jb21taXRlZChBdmFoaUVudHJ5ICplKTsKKwordm9pZCBhdmFoaV9zZXJ2ZXJfZW51bWVyYXRlX2F1eF9yZWNvcmRzKEF2YWhpU2VydmVyICpzLCBBdmFoaUludGVyZmFjZSAqaSwgQXZhaGlSZWNvcmQgKnIsIHZvaWQgKCpjYWxsYmFjaykoQXZhaGlTZXJ2ZXIgKnMsIEF2YWhpUmVjb3JkICpyLCBpbnQgZmx1c2hfY2FjaGUsIHZvaWQqIHVzZXJkYXRhKSwgdm9pZCogdXNlcmRhdGEpOworCit2b2lkIGF2YWhpX2hvc3RfcnJfZW50cnlfZ3JvdXBfY2FsbGJhY2soQXZhaGlTZXJ2ZXIgKnMsIEF2YWhpU0VudHJ5R3JvdXAgKmcsIEF2YWhpRW50cnlHcm91cFN0YXRlIHN0YXRlLCB2b2lkICp1c2VyZGF0YSk7CisKK3ZvaWQgYXZhaGlfc2VydmVyX2RlY3JlYXNlX2hvc3RfcnJfcGVuZGluZyhBdmFoaVNlcnZlciAqcyk7CisKK2ludCBhdmFoaV9zZXJ2ZXJfc2V0X2Vycm5vKEF2YWhpU2VydmVyICpzLCBpbnQgZXJyb3IpOworCitpbnQgYXZhaGlfc2VydmVyX2lzX3NlcnZpY2VfbG9jYWwoQXZhaGlTZXJ2ZXIgKnMsIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsIGNvbnN0IGNoYXIgKm5hbWUpOworaW50IGF2YWhpX3NlcnZlcl9pc19yZWNvcmRfbG9jYWwoQXZhaGlTZXJ2ZXIgKnMsIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsIEF2YWhpUmVjb3JkICpyZWNvcmQpOworCitpbnQgYXZhaGlfc2VydmVyX2FkZF9wdHIoCisgICAgQXZhaGlTZXJ2ZXIgKnMsCisgICAgQXZhaGlTRW50cnlHcm91cCAqZywKKyAgICBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLAorICAgIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsCisgICAgQXZhaGlQdWJsaXNoRmxhZ3MgZmxhZ3MsCisgICAgdWludDMyX3QgdHRsLAorICAgIGNvbnN0IGNoYXIgKm5hbWUsCisgICAgY29uc3QgY2hhciAqZGVzdCk7CisKKyNkZWZpbmUgQVZBSElfQ0hFQ0tfVkFMSURJVFkoc2VydmVyLCBleHByZXNzaW9uLCBlcnJvcikgeyBcCisgICAgICAgIGlmICghKGV4cHJlc3Npb24pKSBcCisgICAgICAgICAgICByZXR1cm4gYXZhaGlfc2VydmVyX3NldF9lcnJubygoc2VydmVyKSwgKGVycm9yKSk7IFwKK30KKworI2RlZmluZSBBVkFISV9DSEVDS19WQUxJRElUWV9SRVRVUk5fTlVMTChzZXJ2ZXIsIGV4cHJlc3Npb24sIGVycm9yKSB7IFwKKyAgICAgICAgaWYgKCEoZXhwcmVzc2lvbikpIHsgXAorICAgICAgICAgICAgYXZhaGlfc2VydmVyX3NldF9lcnJubygoc2VydmVyKSwgKGVycm9yKSk7IFwKKyAgICAgICAgICAgIHJldHVybiBOVUxMOyBcCisgICAgICAgIH0gXAorfQorCisjZGVmaW5lIEFWQUhJX0NIRUNLX1ZBTElESVRZX1NFVF9SRVRfR09UT19GQUlMKHNlcnZlciwgZXhwcmVzc2lvbiwgZXJyb3IpIHtcCisgICAgaWYgKCEoZXhwcmVzc2lvbikpIHsgXAorICAgICAgICByZXQgPSBhdmFoaV9zZXJ2ZXJfc2V0X2Vycm5vKChzZXJ2ZXIpLCAoZXJyb3IpKTsgXAorICAgICAgICBnb3RvIGZhaWw7IFwKKyAgICB9IFwKK30KKworI2RlZmluZSBBVkFISV9BU1NFUlRfVFJVRShleHByZXNzaW9uKSB7IFwKKyAgICBpbnQgX190bXAgPSAhIShleHByZXNzaW9uKTsgXAorICAgIGFzc2VydChfX3RtcCk7IFwKK30KKworI2RlZmluZSBBVkFISV9BU1NFUlRfU1VDQ0VTUyhleHByZXNzaW9uKSB7IFwKKyAgICBpbnQgX190bXAgPSAoZXhwcmVzc2lvbik7IFwKKyAgICBhc3NlcnQoX190bXAgPT0gMCk7IFwKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9sb2cuYyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL2xvZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxMTA3NjUKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9sb2cuYwpAQCAtMCwwICsxLDg2IEBACisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisKKyNpbmNsdWRlICJsb2cuaCIKKworc3RhdGljIEF2YWhpTG9nRnVuY3Rpb24gbG9nX2Z1bmN0aW9uID0gTlVMTDsKKwordm9pZCBhdmFoaV9zZXRfbG9nX2Z1bmN0aW9uKEF2YWhpTG9nRnVuY3Rpb24gZnVuY3Rpb24pIHsKKyAgICBsb2dfZnVuY3Rpb24gPSBmdW5jdGlvbjsKK30KKwordm9pZCBhdmFoaV9sb2dfYXAoQXZhaGlMb2dMZXZlbCBsZXZlbCwgY29uc3QgY2hhcipmb3JtYXQsIHZhX2xpc3QgYXApIHsKKyAgICBjaGFyIHR4dFsyNTZdOworCisgICAgdnNucHJpbnRmKHR4dCwgc2l6ZW9mKHR4dCksIGZvcm1hdCwgYXApOworCisgICAgaWYgKGxvZ19mdW5jdGlvbikKKyAgICAgICAgbG9nX2Z1bmN0aW9uKGxldmVsLCB0eHQpOworICAgIGVsc2UKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwgdHh0KTsKK30KKwordm9pZCBhdmFoaV9sb2coQXZhaGlMb2dMZXZlbCBsZXZlbCwgY29uc3QgY2hhcipmb3JtYXQsIC4uLikgeworICAgIHZhX2xpc3QgYXA7CisgICAgdmFfc3RhcnQoYXAsIGZvcm1hdCk7CisgICAgYXZhaGlfbG9nX2FwKGxldmVsLCBmb3JtYXQsIGFwKTsKKyAgICB2YV9lbmQoYXApOworfQorCit2b2lkIGF2YWhpX2xvZ19lcnJvcihjb25zdCBjaGFyKmZvcm1hdCwgLi4uKSB7CisgICAgdmFfbGlzdCBhcDsKKyAgICB2YV9zdGFydChhcCwgZm9ybWF0KTsKKyAgICBhdmFoaV9sb2dfYXAoQVZBSElfTE9HX0VSUk9SLCBmb3JtYXQsIGFwKTsKKyAgICB2YV9lbmQoYXApOworfQorCit2b2lkIGF2YWhpX2xvZ193YXJuKGNvbnN0IGNoYXIqZm9ybWF0LCAuLi4pIHsKKyAgICB2YV9saXN0IGFwOworICAgIHZhX3N0YXJ0KGFwLCBmb3JtYXQpOworICAgIGF2YWhpX2xvZ19hcChBVkFISV9MT0dfV0FSTiwgZm9ybWF0LCBhcCk7CisgICAgdmFfZW5kKGFwKTsKK30KKwordm9pZCBhdmFoaV9sb2dfbm90aWNlKGNvbnN0IGNoYXIqZm9ybWF0LCAuLi4pIHsKKyAgICB2YV9saXN0IGFwOworICAgIHZhX3N0YXJ0KGFwLCBmb3JtYXQpOworICAgIGF2YWhpX2xvZ19hcChBVkFISV9MT0dfTk9USUNFLCBmb3JtYXQsIGFwKTsKKyAgICB2YV9lbmQoYXApOworfQorCit2b2lkIGF2YWhpX2xvZ19pbmZvKGNvbnN0IGNoYXIqZm9ybWF0LCAuLi4pIHsKKyAgICB2YV9saXN0IGFwOworICAgIHZhX3N0YXJ0KGFwLCBmb3JtYXQpOworICAgIGF2YWhpX2xvZ19hcChBVkFISV9MT0dfSU5GTywgZm9ybWF0LCBhcCk7CisgICAgdmFfZW5kKGFwKTsKK30KKwordm9pZCBhdmFoaV9sb2dfZGVidWcoY29uc3QgY2hhcipmb3JtYXQsIC4uLikgeworICAgIHZhX2xpc3QgYXA7CisgICAgdmFfc3RhcnQoYXAsIGZvcm1hdCk7CisgICAgYXZhaGlfbG9nX2FwKEFWQUhJX0xPR19ERUJVRywgZm9ybWF0LCBhcCk7CisgICAgdmFfZW5kKGFwKTsKK30KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL2xvZy5oIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvbG9nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc4ZjA3YQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL2xvZy5oCkBAIC0wLDAgKzEsNzMgQEAKKyNpZm5kZWYgZm9vbG9naGZvbworI2RlZmluZSBmb29sb2doZm9vCisKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2luY2x1ZGUgPHN0ZGFyZy5oPgorCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2NkZWNsLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2djY21hY3JvLmg+CisKKy8qKiBcZmlsZSBsb2cuaCBFeHRlbnNpYmxlIGxvZ2dpbmcgc3Vic3lzdGVtICovCisKK0FWQUhJX0NfREVDTF9CRUdJTgorCisvKiogTG9nIGxldmVsIGZvciBhdmFoaV9sb2dfeHh4KCkgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgQVZBSElfTE9HX0VSUk9SICA9IDAsICAgIC8qKjwgRXJyb3IgbWVzc2FnZXMgKi8KKyAgICBBVkFISV9MT0dfV0FSTiAgID0gMSwgICAgLyoqPCBXYXJuaW5nIG1lc3NhZ2VzICovCisgICAgQVZBSElfTE9HX05PVElDRSA9IDIsICAgIC8qKjwgTm90aWNlIG1lc3NhZ2VzICovCisgICAgQVZBSElfTE9HX0lORk8gICA9IDMsICAgIC8qKjwgSW5mbyBtZXNzYWdlcyAqLworICAgIEFWQUhJX0xPR19ERUJVRyAgPSA0LCAgICAvKio8IERlYnVnIG1lc3NhZ2VzICovCisgICAgQVZBSElfTE9HX0xFVkVMX01BWAorfSBBdmFoaUxvZ0xldmVsOworCisvKiogUHJvdG90eXBlIGZvciBhIHVzZXIgc3VwcGxpZWQgbG9nIGZ1bmN0aW9uICovCit0eXBlZGVmIHZvaWQgKCpBdmFoaUxvZ0Z1bmN0aW9uKShBdmFoaUxvZ0xldmVsIGxldmVsLCBjb25zdCBjaGFyICp0eHQpOworCisvKiogU2V0IGEgdXNlciBzdXBwbGllZCBsb2cgZnVuY3Rpb24sIHJlcGxhY2luZyB0aGUgZGVmYXVsdCB3aGljaAorICogcHJpbnRzIHRvIGxvZyBtZXNzYWdlcyB1bmNvbmRpdGlvbmFsbHkgdG8gU1RERVJSLiBQYXNzIE5VTEwgZm9yCisgKiByZXNldHRpbmcgdG8gdGhlIGRlZmF1bHQgbG9nIGZ1bmN0aW9uICovCit2b2lkIGF2YWhpX3NldF9sb2dfZnVuY3Rpb24oQXZhaGlMb2dGdW5jdGlvbiBmdW5jdGlvbik7CisKKy8qKiBJc3N1ZSBhIGxvZyBtZXNzYWdlIHVzaW5nIGEgdmFfbGlzdCBvYmplY3QgKi8KK3ZvaWQgYXZhaGlfbG9nX2FwKEF2YWhpTG9nTGV2ZWwgbGV2ZWwsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcCk7CisKKy8qKiBJc3N1ZSBhIGxvZyBtZXNzYWdlIGJ5IHBhc3NpbmcgYSBsb2cgbGV2ZWwgYW5kIGEgZm9ybWF0IHN0cmluZyAqLwordm9pZCBhdmFoaV9sb2coQXZhaGlMb2dMZXZlbCBsZXZlbCwgY29uc3QgY2hhcipmb3JtYXQsIC4uLikgQVZBSElfR0NDX1BSSU5URl9BVFRSMjM7CisKKy8qKiBTaG9ydGN1dCBmb3IgYXZhaGlfbG9nKEFWQUhJX0xPR19FUlJPUiwgLi4uKSAqLwordm9pZCBhdmFoaV9sb2dfZXJyb3IoY29uc3QgY2hhcipmb3JtYXQsIC4uLikgQVZBSElfR0NDX1BSSU5URl9BVFRSMTI7CisKKy8qKiBTaG9ydGN1dCBmb3IgYXZhaGlfbG9nKEFWQUhJX0xPR19XQVJOLCAuLi4pICovCit2b2lkIGF2YWhpX2xvZ193YXJuKGNvbnN0IGNoYXIqZm9ybWF0LCAuLi4pIEFWQUhJX0dDQ19QUklOVEZfQVRUUjEyOworCisvKiogU2hvcnRjdXQgZm9yIGF2YWhpX2xvZyhBVkFISV9MT0dfTk9USUNFLCAuLi4pICovCit2b2lkIGF2YWhpX2xvZ19ub3RpY2UoY29uc3QgY2hhcipmb3JtYXQsIC4uLikgQVZBSElfR0NDX1BSSU5URl9BVFRSMTI7CisKKy8qKiBTaG9ydGN1dCBmb3IgYXZhaGlfbG9nKEFWQUhJX0xPR19JTkZPLCAuLi4pICovCit2b2lkIGF2YWhpX2xvZ19pbmZvKGNvbnN0IGNoYXIqZm9ybWF0LCAuLi4pIEFWQUhJX0dDQ19QUklOVEZfQVRUUjEyOworCisvKiogU2hvcnRjdXQgZm9yIGF2YWhpX2xvZyhBVkFISV9MT0dfREVCVUcsIC4uLikgKi8KK3ZvaWQgYXZhaGlfbG9nX2RlYnVnKGNvbnN0IGNoYXIqZm9ybWF0LCAuLi4pIEFWQUhJX0dDQ19QUklOVEZfQVRUUjEyOworCitBVkFISV9DX0RFQ0xfRU5ECisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvbG9va3VwLmggYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9sb29rdXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmRlYzZlCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvbG9va3VwLmgKQEAgLTAsMCArMSwyMzUgQEAKKyNpZm5kZWYgZm9vbG9va3VwaGZvbworI2RlZmluZSBmb29sb29rdXBoZm9vCisKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworLyoqIFxmaWxlIGF2YWhpLWNvcmUvbG9va3VwLmggRnVuY3Rpb25zIGZvciBicm93c2luZy9yZXNvbHZpbmcgc2VydmljZXMgYW5kIG90aGVyIFJScyAqLworCisvKiogXGV4YW1wbGUgY29yZS1icm93c2Utc2VydmljZXMuYyBFeGFtcGxlIGhvdyB0byBicm93c2UgZm9yIEROUy1TRAorICogc2VydmljZXMgdXNpbmcgYW4gZW1iZWRkZWQgbUROUyBzdGFjay4gKi8KKworLyoqIEEgYnJvd3Npbmcgb2JqZWN0IGZvciBhcmJpdHJhcnkgUlJzICovCit0eXBlZGVmIHN0cnVjdCBBdmFoaVNSZWNvcmRCcm93c2VyIEF2YWhpU1JlY29yZEJyb3dzZXI7CisKKy8qKiBBIGhvc3QgbmFtZSB0byBJUCBhZGRkcmVzcyByZXNvbHZlciBvYmplY3QgKi8KK3R5cGVkZWYgc3RydWN0IEF2YWhpU0hvc3ROYW1lUmVzb2x2ZXIgQXZhaGlTSG9zdE5hbWVSZXNvbHZlcjsKKworLyoqIEFuIElQIGFkZHJlc3MgdG8gaG9zdCBuYW1lIHJlc29sdmVyIG9iamVjdCAoInJldmVyc2UgbG9va3VwIikgKi8KK3R5cGVkZWYgc3RydWN0IEF2YWhpU0FkZHJlc3NSZXNvbHZlciBBdmFoaVNBZGRyZXNzUmVzb2x2ZXI7CisKKy8qKiBBIGxvY2FsIGRvbWFpbiBicm93c2luZyBvYmplY3QuIE1heSBiZSB1c2VkIHRvIGVudW1lcmF0ZSBkb21haW5zIHVzZWQgb24gdGhlIGxvY2FsIExBTiAqLwordHlwZWRlZiBzdHJ1Y3QgQXZhaGlTRG9tYWluQnJvd3NlciBBdmFoaVNEb21haW5Ccm93c2VyOworCisvKiogQSBETlMtU0Qgc2VydmljZSB0eXBlIGJyb3dzaW5nIG9iamVjdC4gTWF5IGJlIHVzZWQgdG8gZW51bWVyYXRlIHRoZSBzZXJ2aWNlIHR5cGVzIG9mIGFsbCBhdmFpbGFibGUgc2VydmljZXMgb24gdGhlIGxvY2FsIExBTiAqLwordHlwZWRlZiBzdHJ1Y3QgQXZhaGlTU2VydmljZVR5cGVCcm93c2VyIEF2YWhpU1NlcnZpY2VUeXBlQnJvd3NlcjsKKworLyoqIEEgRE5TLVNEIHNlcnZpY2UgYnJvd3Nlci4gVXNlIHRoaXMgdG8gZW51bWVyYXRlIGF2YWlsYWJsZSBzZXJ2aWNlcyBvZiBhIGNlcnRhaW4ga2luZCBvbiB0aGUgbG9jYWwgTEFOLiBVc2UgQXZhaGlTU2VydmljZVJlc29sdmVyIHRvIGdldCBzcGVjaWZpYyBzZXJ2aWNlIGRhdGEgbGlrZSBhZGRyZXNzIGFuZCBwb3J0IGZvciBhIHNlcnZpY2UuICovCit0eXBlZGVmIHN0cnVjdCBBdmFoaVNTZXJ2aWNlQnJvd3NlciBBdmFoaVNTZXJ2aWNlQnJvd3NlcjsKKworLyoqIEEgRE5TLVNEIHNlcnZpY2UgcmVzb2x2ZXIuICBVc2UgdGhpcyB0byByZXRyaWV2ZSBhZGRyZXMsIHBvcnQgYW5kIFRYVCBkYXRhIGZvciBhIEROUy1TRCBzZXJ2aWNlICovCit0eXBlZGVmIHN0cnVjdCBBdmFoaVNTZXJ2aWNlUmVzb2x2ZXIgQXZhaGlTU2VydmljZVJlc29sdmVyOworCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2NkZWNsLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2RlZnMuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb3JlL2NvcmUuaD4KKworQVZBSElfQ19ERUNMX0JFR0lOCisKKy8qKiBDYWxsYmFjayBwcm90b3R5cGUgZm9yIEF2YWhpU1JlY29yZEJyb3dzZXIgZXZlbnRzICovCit0eXBlZGVmIHZvaWQgKCpBdmFoaVNSZWNvcmRCcm93c2VyQ2FsbGJhY2spKAorICAgIEF2YWhpU1JlY29yZEJyb3dzZXIgKmIsICAgICAgICAgIC8qKjwgVGhlIEF2YWhpU1JlY29yZEJyb3dzZXIgb2JqZWN0IHRoYXQgaXMgZW1pdHRpbmcgdGhpcyBjYWxsYmFjayAqLworICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsICAgICAgICAgIC8qKjwgTG9naWNhbCBPUyBuZXR3b3JrIGludGVyZmFjZSBudW1iZXIgdGhlIHJlY29yZCB3YXMgZm91bmQgb24gKi8KKyAgICBBdmFoaVByb3RvY29sIHByb3RvY29sLCAgICAgICAgICAvKio8IFByb3RvY29sIG51bWJlciB0aGUgcmVjb3JkIHdhcyBmb3VuZC4gKi8KKyAgICBBdmFoaUJyb3dzZXJFdmVudCBldmVudCwgICAgICAgICAvKio8IEJyb3dzaW5nIGV2ZW50LCBlaXRoZXIgQVZBSElfQlJPV1NFUl9ORVcgb3IgQVZBSElfQlJPV1NFUl9SRU1PVkUgKi8KKyAgICBBdmFoaVJlY29yZCAqcmVjb3JkLCAgICAgICAgICAgICAvKio8IFRoZSByZWNvcmQgdGhhdCB3YXMgZm91bmQgKi8KKyAgICBBdmFoaUxvb2t1cFJlc3VsdEZsYWdzIGZsYWdzLCAgLyoqPCBMb29rdXAgZmxhZ3MgKi8KKyAgICB2b2lkKiB1c2VyZGF0YSAgICAgICAgICAgICAgICAgICAvKio8IEFyYml0cmFyeSB1c2VyIGRhdGEgcGFzc2VkIHRvIGF2YWhpX3NfcmVjb3JkX2Jyb3dzZXJfbmV3KCkgKi8gKTsKKworLyoqIENyZWF0ZSBhIG5ldyBicm93c2luZyBvYmplY3QgZm9yIGFyYml0cmFyeSBSUnMgKi8KK0F2YWhpU1JlY29yZEJyb3dzZXIgKmF2YWhpX3NfcmVjb3JkX2Jyb3dzZXJfbmV3KAorICAgIEF2YWhpU2VydmVyICpzZXJ2ZXIsICAgICAgICAgICAgICAgICAgICAvKio8IFRoZSBzZXJ2ZXIgb2JqZWN0IHRvIHdoaWNoIGF0dGFjaCB0aGlzIHF1ZXJ5ICovCisgICAgQXZhaGlJZkluZGV4IGludGVyZmFjZSwgICAgICAgICAgICAgICAgIC8qKjwgTG9naWNhbCBPUyBpbnRlcmZhY2UgbnVtYmVyIHdoZXJlIHRvIGxvb2sgZm9yIHRoZSByZWNvcmRzLCBvciBBVkFISV9JRl9VTlNQRUMgdG8gbG9vayBvbiBpbnRlcmZhY2VzICovCisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwgICAgICAgICAgICAgICAgIC8qKjwgUHJvdG9jb2wgbnVtYmVyIHRvIHVzZSB3aGVuIGxvb2tpbmcgZm9yIHRoZSByZWNvcmQsIG9yIEFWQUhJX1BST1RPX1VOU1BFQyB0byBsb29rIG9uIGFsbCBwcm90b2NvbHMgKi8KKyAgICBBdmFoaUtleSAqa2V5LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUaGUgc2VhcmNoIGtleSAqLworICAgIEF2YWhpTG9va3VwRmxhZ3MgZmxhZ3MsICAgICAgICAgICAgICAgICAvKio8IExvb2t1cCBmbGFncy4gTXVzdCBoYXZlIHNldCBlaXRoZXIgQVZBSElfTE9PS1VQX0ZPUkNFX1dJREVfQVJFQSBvciBBVkFISV9MT09LVVBfRk9SQ0VfTVVMVElDQVNULCBzaW5jZSBkb21haW4gYmFzZWQgZGV0ZWN0aW9uIGlzIG5vdCBhdmFpbGFibGUgaGVyZS4gKi8KKyAgICBBdmFoaVNSZWNvcmRCcm93c2VyQ2FsbGJhY2sgY2FsbGJhY2ssICAgLyoqPCBUaGUgY2FsbGJhY2sgdG8gY2FsbCBvbiBicm93c2luZyBldmVudHMgKi8KKyAgICB2b2lkKiB1c2VyZGF0YSAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBBcmJpdHJhcnkgdXNlIHN1cHBsaWFibGUgZGF0YSB3aGljaCBpcyBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrICovKTsKKworLyoqIEZyZWUgYW4gQXZhaGlTUmVjb3JkQnJvd3NlciBvYmplY3QgKi8KK3ZvaWQgYXZhaGlfc19yZWNvcmRfYnJvd3Nlcl9mcmVlKEF2YWhpU1JlY29yZEJyb3dzZXIgKmIpOworCisvKiogQ2FsbGJhY2sgcHJvdG90eXBlIGZvciBBdmFoaVNIb3N0TmFtZVJlc29sdmVyIGV2ZW50cyAqLwordHlwZWRlZiB2b2lkICgqQXZhaGlTSG9zdE5hbWVSZXNvbHZlckNhbGxiYWNrKSgKKyAgICBBdmFoaVNIb3N0TmFtZVJlc29sdmVyICpyLAorICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsCisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICBBdmFoaVJlc29sdmVyRXZlbnQgZXZlbnQsIC8qKjwgUmVzb2x2aW5nIGV2ZW50ICovCisgICAgY29uc3QgY2hhciAqaG9zdF9uYW1lLCAgIC8qKjwgSG9zdCBuYW1lIHdoaWNoIHNob3VsZCBiZSByZXNvbHZlZC4gTWF5IGRpZmZlciBpbiBjYXNlIGZyb20gdGhlIHF1ZXJ5ICovCisgICAgY29uc3QgQXZhaGlBZGRyZXNzICphLCAgICAvKio8IFRoZSBhZGRyZXNzLCBvciBOVUxMIGlmIHRoZSBob3N0IG5hbWUgY291bGRuJ3QgYmUgcmVzb2x2ZWQuICovCisgICAgQXZhaGlMb29rdXBSZXN1bHRGbGFncyBmbGFncywgIC8qKjwgTG9va3VwIGZsYWdzICovCisgICAgdm9pZCogdXNlcmRhdGEpOworCisvKiogQ3JlYXRlIGFuIEF2YWhpU0hvc3ROYW1lUmVzb2x2ZXIgb2JqZWN0IGZvciByZXNvbHZpbmcgYSBob3N0IG5hbWUgdG8gYW4gYWRkZHJlc3MuIFNlZSBBdmFoaVNSZWNvcmRCcm93c2VyIGZvciBtb3JlIGluZm8gb24gdGhlIHBhcmFtdGVycy4gKi8KK0F2YWhpU0hvc3ROYW1lUmVzb2x2ZXIgKmF2YWhpX3NfaG9zdF9uYW1lX3Jlc29sdmVyX25ldygKKyAgICBBdmFoaVNlcnZlciAqc2VydmVyLAorICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsCisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICBjb25zdCBjaGFyICpob3N0X25hbWUsICAgICAgICAgICAgICAgICAgLyoqPCBUaGUgaG9zdCBuYW1lIHRvIGxvb2sgZm9yICovCisgICAgQXZhaGlQcm90b2NvbCBhcHJvdG9jb2wsICAgICAgICAgICAgICAgIC8qKjwgVGhlIGFkZHJlc3MgZmFtaWx5IG9mIHRoZSBkZXNpcmVkIGFkZHJlc3Mgb3IgQVZBSElfUFJPVE9fVU5TUEVDIGlmIGRvZXNuJ3QgbWF0dGVyLiAqLworICAgIEF2YWhpTG9va3VwRmxhZ3MgZmxhZ3MsICAgICAgICAgICAgICAgICAvKio8IExvb2t1cCBmbGFncy4gKi8KKyAgICBBdmFoaVNIb3N0TmFtZVJlc29sdmVyQ2FsbGJhY2sgY2FsYmFjaywKKyAgICB2b2lkKiB1c2VyZGF0YSk7CisKKy8qKiBGcmVlIGEgQXZhaGlTSG9zdE5hbWVSZXNvbHZlciBvYmplY3QgKi8KK3ZvaWQgYXZhaGlfc19ob3N0X25hbWVfcmVzb2x2ZXJfZnJlZShBdmFoaVNIb3N0TmFtZVJlc29sdmVyICpyKTsKKworLyoqIENhbGxiYWNrIHByb3RvdHlwZSBmb3IgQXZhaGlTQWRkcmVzc1Jlc29sdmVyIGV2ZW50cyAqLwordHlwZWRlZiB2b2lkICgqQXZhaGlTQWRkcmVzc1Jlc29sdmVyQ2FsbGJhY2spKAorICAgIEF2YWhpU0FkZHJlc3NSZXNvbHZlciAqciwKKyAgICBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLAorICAgIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsCisgICAgQXZhaGlSZXNvbHZlckV2ZW50IGV2ZW50LAorICAgIGNvbnN0IEF2YWhpQWRkcmVzcyAqYSwKKyAgICBjb25zdCBjaGFyICpob3N0X25hbWUsICAgLyoqPCBBIGhvc3QgbmFtZSBmb3IgdGhlIHNwZWNpZmllZCBhZGRyZXNzLCBpZiBvbmUgd2FzIGZvdW5kLCBpLmUuIGV2ZW50ID09IEFWQUhJX1JFU09MVkVSX0ZPVU5EICovCisgICAgQXZhaGlMb29rdXBSZXN1bHRGbGFncyBmbGFncywgIC8qKjwgTG9va3VwIGZsYWdzICovCisgICAgdm9pZCogdXNlcmRhdGEpOworCisvKiogQ3JlYXRlIGFuIEF2YWhpU0FkZHJlc3NSZXNvbHZlciBvYmplY3QuIFNlZSBBdmFoaVNSZWNvcmRCcm93c2VyIGZvciBtb3JlIGluZm8gb24gdGhlIHBhcmFtdGVycy4gKi8KK0F2YWhpU0FkZHJlc3NSZXNvbHZlciAqYXZhaGlfc19hZGRyZXNzX3Jlc29sdmVyX25ldygKKyAgICBBdmFoaVNlcnZlciAqc2VydmVyLAorICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsCisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICBjb25zdCBBdmFoaUFkZHJlc3MgKmFkZHJlc3MsCisgICAgQXZhaGlMb29rdXBGbGFncyBmbGFncywgICAgICAgICAgICAgICAgIC8qKjwgTG9va3VwIGZsYWdzLiAqLworICAgIEF2YWhpU0FkZHJlc3NSZXNvbHZlckNhbGxiYWNrIGNhbGJhY2ssCisgICAgdm9pZCogdXNlcmRhdGEpOworCisvKiogRnJlZSBhbiBBdmFoaVNBZGRyZXNzUmVzb2x2ZXIgb2JqZWN0ICovCit2b2lkIGF2YWhpX3NfYWRkcmVzc19yZXNvbHZlcl9mcmVlKEF2YWhpU0FkZHJlc3NSZXNvbHZlciAqcik7CisKKy8qKiBDYWxsYmFjayBwcm90b3R5cGUgZm9yIEF2YWhpU0RvbWFpbkJyb3dzZXIgZXZlbnRzICovCit0eXBlZGVmIHZvaWQgKCpBdmFoaVNEb21haW5Ccm93c2VyQ2FsbGJhY2spKAorICAgIEF2YWhpU0RvbWFpbkJyb3dzZXIgKmIsCisgICAgQXZhaGlJZkluZGV4IGludGVyZmFjZSwKKyAgICBBdmFoaVByb3RvY29sIHByb3RvY29sLAorICAgIEF2YWhpQnJvd3NlckV2ZW50IGV2ZW50LAorICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwKKyAgICBBdmFoaUxvb2t1cFJlc3VsdEZsYWdzIGZsYWdzLCAgLyoqPCBMb29rdXAgZmxhZ3MgKi8KKyAgICB2b2lkKiB1c2VyZGF0YSk7CisKKy8qKiBDcmVhdGUgYSBuZXcgQXZhaGlTRG9tYWluQnJvd3NlciBvYmplY3QgKi8KK0F2YWhpU0RvbWFpbkJyb3dzZXIgKmF2YWhpX3NfZG9tYWluX2Jyb3dzZXJfbmV3KAorICAgIEF2YWhpU2VydmVyICpzZXJ2ZXIsCisgICAgQXZhaGlJZkluZGV4IGludGVyZmFjZSwKKyAgICBBdmFoaVByb3RvY29sIHByb3RvY29sLAorICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwKKyAgICBBdmFoaURvbWFpbkJyb3dzZXJUeXBlIHR5cGUsCisgICAgQXZhaGlMb29rdXBGbGFncyBmbGFncywgICAgICAgICAgICAgICAgIC8qKjwgTG9va3VwIGZsYWdzLiAqLworICAgIEF2YWhpU0RvbWFpbkJyb3dzZXJDYWxsYmFjayBjYWxsYmFjaywKKyAgICB2b2lkKiB1c2VyZGF0YSk7CisKKy8qKiBGcmVlIGFuIEF2YWhpU0RvbWFpbkJyb3dzZXIgb2JqZWN0ICovCit2b2lkIGF2YWhpX3NfZG9tYWluX2Jyb3dzZXJfZnJlZShBdmFoaVNEb21haW5Ccm93c2VyICpiKTsKKworLyoqIENhbGxiYWNrIHByb3RvdHlwZSBmb3IgQXZhaGlTU2VydmljZVR5cGVCcm93c2VyIGV2ZW50cyAqLwordHlwZWRlZiB2b2lkICgqQXZhaGlTU2VydmljZVR5cGVCcm93c2VyQ2FsbGJhY2spKAorICAgIEF2YWhpU1NlcnZpY2VUeXBlQnJvd3NlciAqYiwKKyAgICBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLAorICAgIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsCisgICAgQXZhaGlCcm93c2VyRXZlbnQgZXZlbnQsCisgICAgY29uc3QgY2hhciAqdHlwZSwKKyAgICBjb25zdCBjaGFyICpkb21haW4sCisgICAgQXZhaGlMb29rdXBSZXN1bHRGbGFncyBmbGFncywgIC8qKjwgTG9va3VwIGZsYWdzICovCisgICAgdm9pZCogdXNlcmRhdGEpOworCisvKiogQ3JlYXRlIGEgbmV3IEF2YWhpU1NlcnZpY2VUeXBlQnJvd3NlciBvYmplY3QuICovCitBdmFoaVNTZXJ2aWNlVHlwZUJyb3dzZXIgKmF2YWhpX3Nfc2VydmljZV90eXBlX2Jyb3dzZXJfbmV3KAorICAgIEF2YWhpU2VydmVyICpzZXJ2ZXIsCisgICAgQXZhaGlJZkluZGV4IGludGVyZmFjZSwKKyAgICBBdmFoaVByb3RvY29sIHByb3RvY29sLAorICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwKKyAgICBBdmFoaUxvb2t1cEZsYWdzIGZsYWdzLCAgICAgICAgICAgICAgICAgLyoqPCBMb29rdXAgZmxhZ3MuICovCisgICAgQXZhaGlTU2VydmljZVR5cGVCcm93c2VyQ2FsbGJhY2sgY2FsbGJhY2ssCisgICAgdm9pZCogdXNlcmRhdGEpOworCisvKiogRnJlZSBhbiBBdmFoaVNTZXJ2aWNlVHlwZUJyb3dzZXIgb2JqZWN0ICovCit2b2lkIGF2YWhpX3Nfc2VydmljZV90eXBlX2Jyb3dzZXJfZnJlZShBdmFoaVNTZXJ2aWNlVHlwZUJyb3dzZXIgKmIpOworCisvKiogQ2FsbGJhY2sgcHJvdG90eXBlIGZvciBBdmFoaVNTZXJ2aWNlQnJvd3NlciBldmVudHMgKi8KK3R5cGVkZWYgdm9pZCAoKkF2YWhpU1NlcnZpY2VCcm93c2VyQ2FsbGJhY2spKAorICAgIEF2YWhpU1NlcnZpY2VCcm93c2VyICpiLAorICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsCisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICBBdmFoaUJyb3dzZXJFdmVudCBldmVudCwKKyAgICBjb25zdCBjaGFyICpuYW1lICAgICAvKio8IFNlcnZpY2UgbmFtZSwgZS5nLiAiTGVubmFydCdzIEZpbGVzIiAqLywKKyAgICBjb25zdCBjaGFyICp0eXBlICAgICAvKio8IEROUy1TRCB0eXBlLCBlLmcuICJfaHR0cC5fdGNwIiAqLywKKyAgICBjb25zdCBjaGFyICpkb21haW4gICAvKio8IERvbWFpbiBvZiB0aGlzIHNlcnZpY2UsIGUuZy4gImxvY2FsIiAqLywKKyAgICBBdmFoaUxvb2t1cFJlc3VsdEZsYWdzIGZsYWdzLCAgLyoqPCBMb29rdXAgZmxhZ3MgKi8KKyAgICB2b2lkKiB1c2VyZGF0YSk7CisKKy8qKiBDcmVhdGUgYSBuZXcgQXZhaGlTU2VydmljZUJyb3dzZXIgb2JqZWN0LiAqLworQXZhaGlTU2VydmljZUJyb3dzZXIgKmF2YWhpX3Nfc2VydmljZV9icm93c2VyX25ldygKKyAgICBBdmFoaVNlcnZlciAqc2VydmVyLAorICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsCisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICBjb25zdCBjaGFyICpzZXJ2aWNlX3R5cGUgLyoqIEROUy1TRCBzZXJ2aWNlIHR5cGUsIGUuZy4gIl9odHRwLl90Y3AiICovLAorICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwKKyAgICBBdmFoaUxvb2t1cEZsYWdzIGZsYWdzLCAgICAgICAgICAgICAgICAgLyoqPCBMb29rdXAgZmxhZ3MuICovCisgICAgQXZhaGlTU2VydmljZUJyb3dzZXJDYWxsYmFjayBjYWxsYmFjaywKKyAgICB2b2lkKiB1c2VyZGF0YSk7CisKKy8qKiBGcmVlIGFuIEF2YWhpU1NlcnZpY2VCcm93c2VyIG9iamVjdCAqLwordm9pZCBhdmFoaV9zX3NlcnZpY2VfYnJvd3Nlcl9mcmVlKEF2YWhpU1NlcnZpY2VCcm93c2VyICpiKTsKKworLyoqIENhbGxiYWNrIHByb3RvdHlwZSBmb3IgQXZhaGlTU2VydmljZVJlc29sdmVyIGV2ZW50cyAqLwordHlwZWRlZiB2b2lkICgqQXZhaGlTU2VydmljZVJlc29sdmVyQ2FsbGJhY2spKAorICAgIEF2YWhpU1NlcnZpY2VSZXNvbHZlciAqciwKKyAgICBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLAorICAgIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsCisgICAgQXZhaGlSZXNvbHZlckV2ZW50IGV2ZW50LCAgLyoqPCBJcyBBVkFISV9SRVNPTFZFUl9GT1VORCB3aGVuIHRoZSBzZXJ2aWNlIHdhcyByZXNvbHZlZCBzdWNjZXNzZnVsbHksIGFuZCBldmVyeXRpbWUgaXQgY2hhbmdlcy4gSXMgQVZBSElfUkVTT0xWRVJfVElNT1VUIHdoZW4gdGhlIHNlcnZpY2UgZmFpbGVkIHRvIHJlc29sdmUgb3IgZGlzYXBwZWFyZWQuICovCisgICAgY29uc3QgY2hhciAqbmFtZSwgICAgICAgLyoqPCBTZXJ2aWNlIG5hbWUgKi8KKyAgICBjb25zdCBjaGFyICp0eXBlLCAgICAgICAvKio8IFNlcnZpY2UgVHlwZSAqLworICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwKKyAgICBjb25zdCBjaGFyICpob3N0X25hbWUsICAvKio8IEhvc3QgbmFtZSBvZiB0aGUgc2VydmljZSAqLworICAgIGNvbnN0IEF2YWhpQWRkcmVzcyAqYSwgICAvKio8IFRoZSByZXNvbHZlZCBob3N0IG5hbWUgKi8KKyAgICB1aW50MTZfdCBwb3J0LCAgICAgICAgICAgIC8qKjwgU2VydmljZSBuYW1lICovCisgICAgQXZhaGlTdHJpbmdMaXN0ICp0eHQsICAgIC8qKjwgVFhUIHJlY29yZCBkYXRhICovCisgICAgQXZhaGlMb29rdXBSZXN1bHRGbGFncyBmbGFncywgIC8qKjwgTG9va3VwIGZsYWdzICovCisgICAgdm9pZCogdXNlcmRhdGEpOworCisvKiogQ3JlYXRlIGEgbmV3IEF2YWhpU1NlcnZpY2VSZXNvbHZlciBvYmplY3QuIFRoZSBzcGVjaWZpZWQgY2FsbGJhY2sgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgcmVzb2x2ZWQgc2VydmljZSBkYXRhLiAqLworQXZhaGlTU2VydmljZVJlc29sdmVyICphdmFoaV9zX3NlcnZpY2VfcmVzb2x2ZXJfbmV3KAorICAgIEF2YWhpU2VydmVyICpzZXJ2ZXIsCisgICAgQXZhaGlJZkluZGV4IGludGVyZmFjZSwKKyAgICBBdmFoaVByb3RvY29sIHByb3RvY29sLAorICAgIGNvbnN0IGNoYXIgKm5hbWUsCisgICAgY29uc3QgY2hhciAqdHlwZSwKKyAgICBjb25zdCBjaGFyICpkb21haW4sCisgICAgQXZhaGlQcm90b2NvbCBhcHJvdG9jb2wsICAgIC8qKjwgQWRkcmVzcyBmYW1pbHkgb2YgdGhlIGRlc2lyZWQgc2VydmljZSBhZGRyZXNzLiBVc2UgQVZBSElfUFJPVE9fVU5TUEVDIGlmIHlvdSBkb24ndCBjYXJlICovCisgICAgQXZhaGlMb29rdXBGbGFncyBmbGFncywgICAgICAgICAgICAgICAgIC8qKjwgTG9va3VwIGZsYWdzLiAqLworICAgIEF2YWhpU1NlcnZpY2VSZXNvbHZlckNhbGxiYWNrIGNhbGJhY2ssCisgICAgdm9pZCogdXNlcmRhdGEpOworCisvKiogRnJlZSBhbiBBdmFoaVNTZXJ2aWNlUmVzb2x2ZXIgb2JqZWN0ICovCit2b2lkIGF2YWhpX3Nfc2VydmljZV9yZXNvbHZlcl9mcmVlKEF2YWhpU1NlcnZpY2VSZXNvbHZlciAqcik7CisKK0FWQUhJX0NfREVDTF9FTkQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9tdWx0aWNhc3QtbG9va3VwLmMgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9tdWx0aWNhc3QtbG9va3VwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU5ODhiZgotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL211bHRpY2FzdC1sb29rdXAuYwpAQCAtMCwwICsxLDM1MCBAQAorLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9tYWxsb2MuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vdGltZXZhbC5oPgorCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJicm93c2UuaCIKKyNpbmNsdWRlICJzb2NrZXQuaCIKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJoYXNobWFwLmgiCisjaW5jbHVkZSAibXVsdGljYXN0LWxvb2t1cC5oIgorI2luY2x1ZGUgInJyLXV0aWwuaCIKKworc3RydWN0IEF2YWhpTXVsdGljYXN0TG9va3VwIHsKKyAgICBBdmFoaU11bHRpY2FzdExvb2t1cEVuZ2luZSAqZW5naW5lOworICAgIGludCBkZWFkOworCisgICAgQXZhaGlLZXkgKmtleSwgKmNuYW1lX2tleTsKKworICAgIEF2YWhpTXVsdGljYXN0TG9va3VwQ2FsbGJhY2sgY2FsbGJhY2s7CisgICAgdm9pZCAqdXNlcmRhdGE7CisKKyAgICBBdmFoaUlmSW5kZXggaW50ZXJmYWNlOworICAgIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2w7CisKKyAgICBpbnQgcXVlcmllcnNfYWRkZWQ7CisKKyAgICBBdmFoaVRpbWVFdmVudCAqYWxsX2Zvcl9ub3dfZXZlbnQ7CisKKyAgICBBVkFISV9MTElTVF9GSUVMRFMoQXZhaGlNdWx0aWNhc3RMb29rdXAsIGxvb2t1cHMpOworICAgIEFWQUhJX0xMSVNUX0ZJRUxEUyhBdmFoaU11bHRpY2FzdExvb2t1cCwgYnlfa2V5KTsKK307CisKK3N0cnVjdCBBdmFoaU11bHRpY2FzdExvb2t1cEVuZ2luZSB7CisgICAgQXZhaGlTZXJ2ZXIgKnNlcnZlcjsKKworICAgIC8qIExvb2t1cHMgKi8KKyAgICBBVkFISV9MTElTVF9IRUFEKEF2YWhpTXVsdGljYXN0TG9va3VwLCBsb29rdXBzKTsKKyAgICBBdmFoaUhhc2htYXAgKmxvb2t1cHNfYnlfa2V5OworCisgICAgaW50IGNsZWFudXBfZGVhZDsKK307CisKK3N0YXRpYyB2b2lkIGFsbF9mb3Jfbm93X2NhbGxiYWNrKEF2YWhpVGltZUV2ZW50ICplLCB2b2lkKiB1c2VyZGF0YSkgeworICAgIEF2YWhpTXVsdGljYXN0TG9va3VwICpsID0gdXNlcmRhdGE7CisKKyAgICBhc3NlcnQoZSk7CisgICAgYXNzZXJ0KGwpOworCisgICAgYXZhaGlfdGltZV9ldmVudF9mcmVlKGwtPmFsbF9mb3Jfbm93X2V2ZW50KTsKKyAgICBsLT5hbGxfZm9yX25vd19ldmVudCA9IE5VTEw7CisKKyAgICBsLT5jYWxsYmFjayhsLT5lbmdpbmUsIGwtPmludGVyZmFjZSwgbC0+cHJvdG9jb2wsIEFWQUhJX0JST1dTRVJfQUxMX0ZPUl9OT1csIEFWQUhJX0xPT0tVUF9SRVNVTFRfTVVMVElDQVNULCBOVUxMLCBsLT51c2VyZGF0YSk7Cit9CisKK0F2YWhpTXVsdGljYXN0TG9va3VwICphdmFoaV9tdWx0aWNhc3RfbG9va3VwX25ldygKKyAgICBBdmFoaU11bHRpY2FzdExvb2t1cEVuZ2luZSAqZSwKKyAgICBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLAorICAgIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsCisgICAgQXZhaGlLZXkgKmtleSwKKyAgICBBdmFoaU11bHRpY2FzdExvb2t1cENhbGxiYWNrIGNhbGxiYWNrLAorICAgIHZvaWQgKnVzZXJkYXRhKSB7CisKKyAgICBBdmFoaU11bHRpY2FzdExvb2t1cCAqbCwgKnQ7CisgICAgc3RydWN0IHRpbWV2YWwgdHY7CisKKyAgICBhc3NlcnQoZSk7CisgICAgYXNzZXJ0KEFWQUhJX0lGX1ZBTElEKGludGVyZmFjZSkpOworICAgIGFzc2VydChBVkFISV9QUk9UT19WQUxJRChwcm90b2NvbCkpOworICAgIGFzc2VydChrZXkpOworICAgIGFzc2VydChjYWxsYmFjayk7CisKKyAgICBsID0gYXZhaGlfbmV3KEF2YWhpTXVsdGljYXN0TG9va3VwLCAxKTsKKyAgICBsLT5lbmdpbmUgPSBlOworICAgIGwtPmRlYWQgPSAwOworICAgIGwtPmtleSA9IGF2YWhpX2tleV9yZWYoa2V5KTsKKyAgICBsLT5jbmFtZV9rZXkgPSBhdmFoaV9rZXlfbmV3X2NuYW1lKGwtPmtleSk7CisgICAgbC0+Y2FsbGJhY2sgPSBjYWxsYmFjazsKKyAgICBsLT51c2VyZGF0YSA9IHVzZXJkYXRhOworICAgIGwtPmludGVyZmFjZSA9IGludGVyZmFjZTsKKyAgICBsLT5wcm90b2NvbCA9IHByb3RvY29sOworICAgIGwtPmFsbF9mb3Jfbm93X2V2ZW50ID0gTlVMTDsKKyAgICBsLT5xdWVyaWVyc19hZGRlZCA9IDA7CisKKyAgICB0ID0gYXZhaGlfaGFzaG1hcF9sb29rdXAoZS0+bG9va3Vwc19ieV9rZXksIGwtPmtleSk7CisgICAgQVZBSElfTExJU1RfUFJFUEVORChBdmFoaU11bHRpY2FzdExvb2t1cCwgYnlfa2V5LCB0LCBsKTsKKyAgICBhdmFoaV9oYXNobWFwX3JlcGxhY2UoZS0+bG9va3Vwc19ieV9rZXksIGF2YWhpX2tleV9yZWYobC0+a2V5KSwgdCk7CisKKyAgICBBVkFISV9MTElTVF9QUkVQRU5EKEF2YWhpTXVsdGljYXN0TG9va3VwLCBsb29rdXBzLCBlLT5sb29rdXBzLCBsKTsKKworICAgIGF2YWhpX3F1ZXJpZXJfYWRkX2Zvcl9hbGwoZS0+c2VydmVyLCBpbnRlcmZhY2UsIHByb3RvY29sLCBsLT5rZXksICZ0dik7CisgICAgbC0+cXVlcmllcnNfYWRkZWQgPSAxOworCisgICAgLyogQWRkIGEgc2Vjb25kICovCisgICAgYXZhaGlfdGltZXZhbF9hZGQoJnR2LCAxMDAwMDAwKTsKKworICAgIC8qIElzc3VlIHRoZSBBTExfRk9SX05PVyBldmVudCBvbmUgc2Vjb25kIGFmdGVyIHRoZSBxdWVyaWVyIHdhcyBpbml0aWFsbHkgY3JlYXRlZCAqLworICAgIGwtPmFsbF9mb3Jfbm93X2V2ZW50ID0gYXZhaGlfdGltZV9ldmVudF9uZXcoZS0+c2VydmVyLT50aW1lX2V2ZW50X3F1ZXVlLCAmdHYsIGFsbF9mb3Jfbm93X2NhbGxiYWNrLCBsKTsKKworICAgIHJldHVybiBsOworfQorCitzdGF0aWMgdm9pZCBsb29rdXBfc3RvcChBdmFoaU11bHRpY2FzdExvb2t1cCAqbCkgeworICAgIGFzc2VydChsKTsKKworICAgIGwtPmNhbGxiYWNrID0gTlVMTDsKKworICAgIGlmIChsLT5xdWVyaWVyc19hZGRlZCkgeworICAgICAgICBhdmFoaV9xdWVyaWVyX3JlbW92ZV9mb3JfYWxsKGwtPmVuZ2luZS0+c2VydmVyLCBsLT5pbnRlcmZhY2UsIGwtPnByb3RvY29sLCBsLT5rZXkpOworICAgICAgICBsLT5xdWVyaWVyc19hZGRlZCA9IDA7CisgICAgfQorCisgICAgaWYgKGwtPmFsbF9mb3Jfbm93X2V2ZW50KSB7CisgICAgICAgIGF2YWhpX3RpbWVfZXZlbnRfZnJlZShsLT5hbGxfZm9yX25vd19ldmVudCk7CisgICAgICAgIGwtPmFsbF9mb3Jfbm93X2V2ZW50ID0gTlVMTDsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGxvb2t1cF9kZXN0cm95KEF2YWhpTXVsdGljYXN0TG9va3VwICpsKSB7CisgICAgQXZhaGlNdWx0aWNhc3RMb29rdXAgKnQ7CisgICAgYXNzZXJ0KGwpOworCisgICAgbG9va3VwX3N0b3AobCk7CisKKyAgICB0ID0gYXZhaGlfaGFzaG1hcF9sb29rdXAobC0+ZW5naW5lLT5sb29rdXBzX2J5X2tleSwgbC0+a2V5KTsKKyAgICBBVkFISV9MTElTVF9SRU1PVkUoQXZhaGlNdWx0aWNhc3RMb29rdXAsIGJ5X2tleSwgdCwgbCk7CisgICAgaWYgKHQpCisgICAgICAgIGF2YWhpX2hhc2htYXBfcmVwbGFjZShsLT5lbmdpbmUtPmxvb2t1cHNfYnlfa2V5LCBhdmFoaV9rZXlfcmVmKGwtPmtleSksIHQpOworICAgIGVsc2UKKyAgICAgICAgYXZhaGlfaGFzaG1hcF9yZW1vdmUobC0+ZW5naW5lLT5sb29rdXBzX2J5X2tleSwgbC0+a2V5KTsKKworICAgIEFWQUhJX0xMSVNUX1JFTU9WRShBdmFoaU11bHRpY2FzdExvb2t1cCwgbG9va3VwcywgbC0+ZW5naW5lLT5sb29rdXBzLCBsKTsKKworICAgIGlmIChsLT5rZXkpCisgICAgICAgIGF2YWhpX2tleV91bnJlZihsLT5rZXkpOworCisgICAgaWYgKGwtPmNuYW1lX2tleSkKKyAgICAgICAgYXZhaGlfa2V5X3VucmVmKGwtPmNuYW1lX2tleSk7CisKKyAgICBhdmFoaV9mcmVlKGwpOworfQorCit2b2lkIGF2YWhpX211bHRpY2FzdF9sb29rdXBfZnJlZShBdmFoaU11bHRpY2FzdExvb2t1cCAqbCkgeworICAgIGFzc2VydChsKTsKKworICAgIGlmIChsLT5kZWFkKQorICAgICAgICByZXR1cm47CisKKyAgICBsLT5kZWFkID0gMTsKKyAgICBsLT5lbmdpbmUtPmNsZWFudXBfZGVhZCA9IDE7CisgICAgbG9va3VwX3N0b3AobCk7Cit9CisKK3ZvaWQgYXZhaGlfbXVsdGljYXN0X2xvb2t1cF9lbmdpbmVfY2xlYW51cChBdmFoaU11bHRpY2FzdExvb2t1cEVuZ2luZSAqZSkgeworICAgIEF2YWhpTXVsdGljYXN0TG9va3VwICpsLCAqbjsKKyAgICBhc3NlcnQoZSk7CisKKyAgICB3aGlsZSAoZS0+Y2xlYW51cF9kZWFkKSB7CisgICAgICAgIGUtPmNsZWFudXBfZGVhZCA9IDA7CisKKyAgICAgICAgZm9yIChsID0gZS0+bG9va3VwczsgbDsgbCA9IG4pIHsKKyAgICAgICAgICAgIG4gPSBsLT5sb29rdXBzX25leHQ7CisKKyAgICAgICAgICAgIGlmIChsLT5kZWFkKQorICAgICAgICAgICAgICAgIGxvb2t1cF9kZXN0cm95KGwpOworICAgICAgICB9CisgICAgfQorfQorCitzdHJ1Y3QgY2JkYXRhIHsKKyAgICBBdmFoaU11bHRpY2FzdExvb2t1cEVuZ2luZSAqZW5naW5lOworICAgIEF2YWhpTXVsdGljYXN0TG9va3VwQ2FsbGJhY2sgY2FsbGJhY2s7CisgICAgdm9pZCAqdXNlcmRhdGE7CisgICAgQXZhaGlLZXkgKmtleSwgKmNuYW1lX2tleTsKKyAgICBBdmFoaUludGVyZmFjZSAqaW50ZXJmYWNlOworICAgIHVuc2lnbmVkIG5fZm91bmQ7Cit9OworCitzdGF0aWMgdm9pZCogc2Nhbl9jYWNoZV9jYWxsYmFjayhBdmFoaUNhY2hlICpjLCBBdmFoaUtleSAqcGF0dGVybiwgQXZhaGlDYWNoZUVudHJ5ICplLCB2b2lkKiB1c2VyZGF0YSkgeworICAgIHN0cnVjdCBjYmRhdGEgKmNiZGF0YSA9IHVzZXJkYXRhOworCisgICAgYXNzZXJ0KGMpOworICAgIGFzc2VydChwYXR0ZXJuKTsKKyAgICBhc3NlcnQoZSk7CisgICAgYXNzZXJ0KGNiZGF0YSk7CisKKyAgICBjYmRhdGEtPmNhbGxiYWNrKAorICAgICAgICBjYmRhdGEtPmVuZ2luZSwKKyAgICAgICAgY2JkYXRhLT5pbnRlcmZhY2UtPmhhcmR3YXJlLT5pbmRleCwKKyAgICAgICAgY2JkYXRhLT5pbnRlcmZhY2UtPnByb3RvY29sLAorICAgICAgICBBVkFISV9CUk9XU0VSX05FVywKKyAgICAgICAgQVZBSElfTE9PS1VQX1JFU1VMVF9DQUNIRUR8QVZBSElfTE9PS1VQX1JFU1VMVF9NVUxUSUNBU1QsCisgICAgICAgIGUtPnJlY29yZCwKKyAgICAgICAgY2JkYXRhLT51c2VyZGF0YSk7CisKKyAgICBjYmRhdGEtPm5fZm91bmQgKys7CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgc2Nhbl9pbnRlcmZhY2VfY2FsbGJhY2soQXZhaGlJbnRlcmZhY2VNb25pdG9yICptLCBBdmFoaUludGVyZmFjZSAqaSwgdm9pZCogdXNlcmRhdGEpIHsKKyAgICBzdHJ1Y3QgY2JkYXRhICpjYmRhdGEgPSB1c2VyZGF0YTsKKworICAgIGFzc2VydChtKTsKKyAgICBhc3NlcnQoaSk7CisgICAgYXNzZXJ0KGNiZGF0YSk7CisKKyAgICBjYmRhdGEtPmludGVyZmFjZSA9IGk7CisKKyAgICBhdmFoaV9jYWNoZV93YWxrKGktPmNhY2hlLCBjYmRhdGEtPmtleSwgc2Nhbl9jYWNoZV9jYWxsYmFjaywgY2JkYXRhKTsKKworICAgIGlmIChjYmRhdGEtPmNuYW1lX2tleSkKKyAgICAgICAgYXZhaGlfY2FjaGVfd2FsayhpLT5jYWNoZSwgY2JkYXRhLT5jbmFtZV9rZXksIHNjYW5fY2FjaGVfY2FsbGJhY2ssIGNiZGF0YSk7CisKKyAgICBjYmRhdGEtPmludGVyZmFjZSA9IE5VTEw7Cit9CisKK3Vuc2lnbmVkIGF2YWhpX211bHRpY2FzdF9sb29rdXBfZW5naW5lX3NjYW5fY2FjaGUoCisgICAgQXZhaGlNdWx0aWNhc3RMb29rdXBFbmdpbmUgKmUsCisgICAgQXZhaGlJZkluZGV4IGludGVyZmFjZSwKKyAgICBBdmFoaVByb3RvY29sIHByb3RvY29sLAorICAgIEF2YWhpS2V5ICprZXksCisgICAgQXZhaGlNdWx0aWNhc3RMb29rdXBDYWxsYmFjayBjYWxsYmFjaywKKyAgICB2b2lkICp1c2VyZGF0YSkgeworCisgICAgc3RydWN0IGNiZGF0YSBjYmRhdGE7CisKKyAgICBhc3NlcnQoZSk7CisgICAgYXNzZXJ0KGtleSk7CisgICAgYXNzZXJ0KGNhbGxiYWNrKTsKKworICAgIGFzc2VydChBVkFISV9JRl9WQUxJRChpbnRlcmZhY2UpKTsKKyAgICBhc3NlcnQoQVZBSElfUFJPVE9fVkFMSUQocHJvdG9jb2wpKTsKKworICAgIGNiZGF0YS5lbmdpbmUgPSBlOworICAgIGNiZGF0YS5rZXkgPSBrZXk7CisgICAgY2JkYXRhLmNuYW1lX2tleSA9IGF2YWhpX2tleV9uZXdfY25hbWUoa2V5KTsKKyAgICBjYmRhdGEuY2FsbGJhY2sgPSBjYWxsYmFjazsKKyAgICBjYmRhdGEudXNlcmRhdGEgPSB1c2VyZGF0YTsKKyAgICBjYmRhdGEuaW50ZXJmYWNlID0gTlVMTDsKKyAgICBjYmRhdGEubl9mb3VuZCA9IDA7CisKKyAgICBhdmFoaV9pbnRlcmZhY2VfbW9uaXRvcl93YWxrKGUtPnNlcnZlci0+bW9uaXRvciwgaW50ZXJmYWNlLCBwcm90b2NvbCwgc2Nhbl9pbnRlcmZhY2VfY2FsbGJhY2ssICZjYmRhdGEpOworCisgICAgaWYgKGNiZGF0YS5jbmFtZV9rZXkpCisgICAgICAgIGF2YWhpX2tleV91bnJlZihjYmRhdGEuY25hbWVfa2V5KTsKKworICAgIHJldHVybiBjYmRhdGEubl9mb3VuZDsKK30KKwordm9pZCBhdmFoaV9tdWx0aWNhc3RfbG9va3VwX2VuZ2luZV9uZXdfaW50ZXJmYWNlKEF2YWhpTXVsdGljYXN0TG9va3VwRW5naW5lICplLCBBdmFoaUludGVyZmFjZSAqaSkgeworICAgIEF2YWhpTXVsdGljYXN0TG9va3VwICpsOworCisgICAgYXNzZXJ0KGUpOworICAgIGFzc2VydChpKTsKKworICAgIGZvciAobCA9IGUtPmxvb2t1cHM7IGw7IGwgPSBsLT5sb29rdXBzX25leHQpIHsKKworICAgICAgICBpZiAobC0+ZGVhZCB8fCAhbC0+Y2FsbGJhY2spCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAobC0+cXVlcmllcnNfYWRkZWQgJiYgYXZhaGlfaW50ZXJmYWNlX21hdGNoKGksIGwtPmludGVyZmFjZSwgbC0+cHJvdG9jb2wpKQorICAgICAgICAgICAgYXZhaGlfcXVlcmllcl9hZGQoaSwgbC0+a2V5LCBOVUxMKTsKKyAgICB9Cit9CisKK3ZvaWQgYXZhaGlfbXVsdGljYXN0X2xvb2t1cF9lbmdpbmVfbm90aWZ5KEF2YWhpTXVsdGljYXN0TG9va3VwRW5naW5lICplLCBBdmFoaUludGVyZmFjZSAqaSwgQXZhaGlSZWNvcmQgKnJlY29yZCwgQXZhaGlCcm93c2VyRXZlbnQgZXZlbnQpIHsKKyAgICBBdmFoaU11bHRpY2FzdExvb2t1cCAqbDsKKworICAgIGFzc2VydChlKTsKKyAgICBhc3NlcnQocmVjb3JkKTsKKyAgICBhc3NlcnQoaSk7CisKKyAgICBmb3IgKGwgPSBhdmFoaV9oYXNobWFwX2xvb2t1cChlLT5sb29rdXBzX2J5X2tleSwgcmVjb3JkLT5rZXkpOyBsOyBsID0gbC0+Ynlfa2V5X25leHQpIHsKKyAgICAgICAgaWYgKGwtPmRlYWQgfHwgIWwtPmNhbGxiYWNrKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKGF2YWhpX2ludGVyZmFjZV9tYXRjaChpLCBsLT5pbnRlcmZhY2UsIGwtPnByb3RvY29sKSkKKyAgICAgICAgICAgIGwtPmNhbGxiYWNrKGUsIGktPmhhcmR3YXJlLT5pbmRleCwgaS0+cHJvdG9jb2wsIGV2ZW50LCBBVkFISV9MT09LVVBfUkVTVUxUX01VTFRJQ0FTVCwgcmVjb3JkLCBsLT51c2VyZGF0YSk7CisgICAgfQorCisKKyAgICBpZiAocmVjb3JkLT5rZXktPmNsYXp6ID09IEFWQUhJX0ROU19DTEFTU19JTiAmJiByZWNvcmQtPmtleS0+dHlwZSA9PSBBVkFISV9ETlNfVFlQRV9DTkFNRSkgeworICAgICAgICAvKiBJdCdzIGEgQ05BTUUgcmVjb3JkLCBzbyB3ZSBoYXZlIHRvIHNjYW4gdGhlIGFsbCBsb29rdXBzIHRvIHNlZSBpZiBvbmUgbWF0Y2hlcyAqLworCisgICAgICAgIGZvciAobCA9IGUtPmxvb2t1cHM7IGw7IGwgPSBsLT5sb29rdXBzX25leHQpIHsKKyAgICAgICAgICAgIEF2YWhpS2V5ICprZXk7CisKKyAgICAgICAgICAgIGlmIChsLT5kZWFkIHx8ICFsLT5jYWxsYmFjaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKChrZXkgPSBhdmFoaV9rZXlfbmV3X2NuYW1lKGwtPmtleSkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGF2YWhpX2tleV9lcXVhbChyZWNvcmQtPmtleSwga2V5KSkKKyAgICAgICAgICAgICAgICAgICAgbC0+Y2FsbGJhY2soZSwgaS0+aGFyZHdhcmUtPmluZGV4LCBpLT5wcm90b2NvbCwgZXZlbnQsIEFWQUhJX0xPT0tVUF9SRVNVTFRfTVVMVElDQVNULCByZWNvcmQsIGwtPnVzZXJkYXRhKTsKKworICAgICAgICAgICAgICAgIGF2YWhpX2tleV91bnJlZihrZXkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitBdmFoaU11bHRpY2FzdExvb2t1cEVuZ2luZSAqYXZhaGlfbXVsdGljYXN0X2xvb2t1cF9lbmdpbmVfbmV3KEF2YWhpU2VydmVyICpzKSB7CisgICAgQXZhaGlNdWx0aWNhc3RMb29rdXBFbmdpbmUgKmU7CisKKyAgICBhc3NlcnQocyk7CisKKyAgICBlID0gYXZhaGlfbmV3KEF2YWhpTXVsdGljYXN0TG9va3VwRW5naW5lLCAxKTsKKyAgICBlLT5zZXJ2ZXIgPSBzOworICAgIGUtPmNsZWFudXBfZGVhZCA9IDA7CisKKyAgICAvKiBJbml0aWFsaXplIGxvb2t1cCBsaXN0ICovCisgICAgZS0+bG9va3Vwc19ieV9rZXkgPSBhdmFoaV9oYXNobWFwX25ldygoQXZhaGlIYXNoRnVuYykgYXZhaGlfa2V5X2hhc2gsIChBdmFoaUVxdWFsRnVuYykgYXZhaGlfa2V5X2VxdWFsLCAoQXZhaGlGcmVlRnVuYykgYXZhaGlfa2V5X3VucmVmLCBOVUxMKTsKKyAgICBBVkFISV9MTElTVF9IRUFEX0lOSVQoQXZhaGlXaWRlQXJlYUxvb2t1cCwgZS0+bG9va3Vwcyk7CisKKyAgICByZXR1cm4gZTsKK30KKwordm9pZCBhdmFoaV9tdWx0aWNhc3RfbG9va3VwX2VuZ2luZV9mcmVlKEF2YWhpTXVsdGljYXN0TG9va3VwRW5naW5lICplKSB7CisgICAgYXNzZXJ0KGUpOworCisgICAgd2hpbGUgKGUtPmxvb2t1cHMpCisgICAgICAgIGxvb2t1cF9kZXN0cm95KGUtPmxvb2t1cHMpOworCisgICAgYXZhaGlfaGFzaG1hcF9mcmVlKGUtPmxvb2t1cHNfYnlfa2V5KTsKKyAgICBhdmFoaV9mcmVlKGUpOworfQorCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9tdWx0aWNhc3QtbG9va3VwLmggYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9tdWx0aWNhc3QtbG9va3VwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjcwNzY2NgotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL211bHRpY2FzdC1sb29rdXAuaApAQCAtMCwwICsxLDUxIEBACisjaWZuZGVmIGZvb211bHRpY2FzdGxvb2t1cGhmb28KKyNkZWZpbmUgZm9vbXVsdGljYXN0bG9va3VwaGZvbworCisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpbmNsdWRlICJsb29rdXAuaCIKKyNpbmNsdWRlICJicm93c2UuaCIKKwordHlwZWRlZiBzdHJ1Y3QgQXZhaGlNdWx0aWNhc3RMb29rdXBFbmdpbmUgQXZhaGlNdWx0aWNhc3RMb29rdXBFbmdpbmU7Cit0eXBlZGVmIHN0cnVjdCBBdmFoaU11bHRpY2FzdExvb2t1cCBBdmFoaU11bHRpY2FzdExvb2t1cDsKKwordHlwZWRlZiB2b2lkICgqQXZhaGlNdWx0aWNhc3RMb29rdXBDYWxsYmFjaykoCisgICAgQXZhaGlNdWx0aWNhc3RMb29rdXBFbmdpbmUgKmUsCisgICAgQXZhaGlJZkluZGV4IGlkeCwKKyAgICBBdmFoaVByb3RvY29sIHByb3RvY29sLAorICAgIEF2YWhpQnJvd3NlckV2ZW50IGV2ZW50LAorICAgIEF2YWhpTG9va3VwUmVzdWx0RmxhZ3MgZmxhZ3MsCisgICAgQXZhaGlSZWNvcmQgKnIsCisgICAgdm9pZCAqdXNlcmRhdGEpOworCitBdmFoaU11bHRpY2FzdExvb2t1cEVuZ2luZSAqYXZhaGlfbXVsdGljYXN0X2xvb2t1cF9lbmdpbmVfbmV3KEF2YWhpU2VydmVyICpzKTsKK3ZvaWQgYXZhaGlfbXVsdGljYXN0X2xvb2t1cF9lbmdpbmVfZnJlZShBdmFoaU11bHRpY2FzdExvb2t1cEVuZ2luZSAqZSk7CisKK3Vuc2lnbmVkIGF2YWhpX211bHRpY2FzdF9sb29rdXBfZW5naW5lX3NjYW5fY2FjaGUoQXZhaGlNdWx0aWNhc3RMb29rdXBFbmdpbmUgKmUsIEF2YWhpSWZJbmRleCBpZHgsIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsIEF2YWhpS2V5ICprZXksIEF2YWhpTXVsdGljYXN0TG9va3VwQ2FsbGJhY2sgY2FsbGJhY2ssIHZvaWQgKnVzZXJkYXRhKTsKK3ZvaWQgYXZhaGlfbXVsdGljYXN0X2xvb2t1cF9lbmdpbmVfbmV3X2ludGVyZmFjZShBdmFoaU11bHRpY2FzdExvb2t1cEVuZ2luZSAqZSwgQXZhaGlJbnRlcmZhY2UgKmkpOwordm9pZCBhdmFoaV9tdWx0aWNhc3RfbG9va3VwX2VuZ2luZV9jbGVhbnVwKEF2YWhpTXVsdGljYXN0TG9va3VwRW5naW5lICplKTsKK3ZvaWQgYXZhaGlfbXVsdGljYXN0X2xvb2t1cF9lbmdpbmVfbm90aWZ5KEF2YWhpTXVsdGljYXN0TG9va3VwRW5naW5lICplLCBBdmFoaUludGVyZmFjZSAqaSwgQXZhaGlSZWNvcmQgKnJlY29yZCwgQXZhaGlCcm93c2VyRXZlbnQgZXZlbnQpOworCitBdmFoaU11bHRpY2FzdExvb2t1cCAqYXZhaGlfbXVsdGljYXN0X2xvb2t1cF9uZXcoQXZhaGlNdWx0aWNhc3RMb29rdXBFbmdpbmUgKmUsIEF2YWhpSWZJbmRleCBpZHgsIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsIEF2YWhpS2V5ICprZXksIEF2YWhpTXVsdGljYXN0TG9va3VwQ2FsbGJhY2sgY2FsbGJhY2ssIHZvaWQgKnVzZXJkYXRhKTsKK3ZvaWQgYXZhaGlfbXVsdGljYXN0X2xvb2t1cF9mcmVlKEF2YWhpTXVsdGljYXN0TG9va3VwICpxKTsKKworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvbmV0bGluay5jIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvbmV0bGluay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZWQ1ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9uZXRsaW5rLmMKQEAgLTAsMCArMSwyMDggQEAKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKworI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9tYWxsb2MuaD4KKyNpbmNsdWRlICJuZXRsaW5rLmgiCisjaW5jbHVkZSAibG9nLmgiCisKK3N0cnVjdCBBdmFoaU5ldGxpbmsgeworICAgIGludCBmZDsKKyAgICB1bnNpZ25lZCBzZXE7CisgICAgQXZhaGlOZXRsaW5rQ2FsbGJhY2sgY2FsbGJhY2s7CisgICAgdm9pZCogdXNlcmRhdGE7CisgICAgdWludDhfdCogYnVmZmVyOworICAgIHNpemVfdCBidWZmZXJfbGVuZ3RoOworCisgICAgY29uc3QgQXZhaGlQb2xsICpwb2xsX2FwaTsKKyAgICBBdmFoaVdhdGNoICp3YXRjaDsKK307CisKK2ludCBhdmFoaV9uZXRsaW5rX3dvcmsoQXZhaGlOZXRsaW5rICpubCwgaW50IGJsb2NrKSB7CisgICAgc3NpemVfdCBieXRlczsKKyAgICBzdHJ1Y3QgbXNnaGRyIHNtc2c7CisgICAgc3RydWN0IGNtc2doZHIgKmNtc2c7CisgICAgc3RydWN0IHVjcmVkICpjcmVkOworICAgIHN0cnVjdCBpb3ZlYyBpb3Y7CisgICAgc3RydWN0IG5sbXNnaGRyICpwOworICAgIGNoYXIgY3JlZF9tc2dbQ01TR19TUEFDRShzaXplb2Yoc3RydWN0IHVjcmVkKSldOworCisgICAgYXNzZXJ0KG5sKTsKKworICAgIGlvdi5pb3ZfYmFzZSA9IG5sLT5idWZmZXI7CisgICAgaW92Lmlvdl9sZW4gPSBubC0+YnVmZmVyX2xlbmd0aDsKKworICAgIHNtc2cubXNnX25hbWUgPSBOVUxMOworICAgIHNtc2cubXNnX25hbWVsZW4gPSAwOworICAgIHNtc2cubXNnX2lvdiA9ICZpb3Y7CisgICAgc21zZy5tc2dfaW92bGVuID0gMTsKKyAgICBzbXNnLm1zZ19jb250cm9sID0gY3JlZF9tc2c7CisgICAgc21zZy5tc2dfY29udHJvbGxlbiA9IHNpemVvZihjcmVkX21zZyk7CisgICAgc21zZy5tc2dfZmxhZ3MgPSAoYmxvY2sgPyAwIDogTVNHX0RPTlRXQUlUKTsKKworICAgIGlmICgoYnl0ZXMgPSByZWN2bXNnKG5sLT5mZCwgJnNtc2csIDApKSA8IDApIHsKKyAgICAgICAgaWYgKGVycm5vID09IEVBR0FJTiB8fCBlcnJubyA9PSBFSU5UUikKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIGF2YWhpX2xvZ19lcnJvcihfX0ZJTEVfXyI6IHJlY3Ztc2coKSBmYWlsZWQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGNtc2cgPSBDTVNHX0ZJUlNUSERSKCZzbXNnKTsKKworICAgIGlmICghY21zZyB8fCBjbXNnLT5jbXNnX3R5cGUgIT0gU0NNX0NSRURFTlRJQUxTKSB7CisgICAgICAgIGF2YWhpX2xvZ193YXJuKCJObyBzZW5kZXIgY3JlZGVudGlhbHMgcmVjZWl2ZWQsIGlnbm9yaW5nIGRhdGEuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBjcmVkID0gKHN0cnVjdCB1Y3JlZCopIENNU0dfREFUQShjbXNnKTsKKworICAgIGlmIChjcmVkLT51aWQgIT0gMCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgcCA9IChzdHJ1Y3Qgbmxtc2doZHIgKikgbmwtPmJ1ZmZlcjsKKworICAgIGFzc2VydChubC0+Y2FsbGJhY2spOworCisgICAgZm9yICg7IGJ5dGVzID4gMDsgcCA9IE5MTVNHX05FWFQocCwgYnl0ZXMpKSB7CisgICAgICAgIGlmICghTkxNU0dfT0socCwgKHNpemVfdCkgYnl0ZXMpKSB7CisgICAgICAgICAgICBhdmFoaV9sb2dfd2FybihfX0ZJTEVfXyI6IHBhY2tldCB0cnVuY2F0ZWQiKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIG5sLT5jYWxsYmFjayhubCwgcCwgbmwtPnVzZXJkYXRhKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc29ja2V0X2V2ZW50KEF2YWhpV2F0Y2ggKncsIGludCBmZCwgQVZBSElfR0NDX1VOVVNFRCBBdmFoaVdhdGNoRXZlbnQgZXZlbnQsIHZvaWQgKnVzZXJkYXRhKSB7CisgICAgQXZhaGlOZXRsaW5rICpubCA9IHVzZXJkYXRhOworCisgICAgYXNzZXJ0KHcpOworICAgIGFzc2VydChubCk7CisgICAgYXNzZXJ0KGZkID09IG5sLT5mZCk7CisKKyAgICBhdmFoaV9uZXRsaW5rX3dvcmsobmwsIDApOworfQorCitBdmFoaU5ldGxpbmsgKmF2YWhpX25ldGxpbmtfbmV3KGNvbnN0IEF2YWhpUG9sbCAqcG9sbF9hcGksIHVpbnQzMl90IGdyb3Vwcywgdm9pZCAoKmNiKSAoQXZhaGlOZXRsaW5rICpubCwgc3RydWN0IG5sbXNnaGRyICpuLCB2b2lkKiB1c2VyZGF0YSksIHZvaWQqIHVzZXJkYXRhKSB7CisgICAgaW50IGZkID0gLTE7CisgICAgY29uc3QgaW50IG9uID0gMTsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfbmwgYWRkcjsKKyAgICBBdmFoaU5ldGxpbmsgKm5sID0gTlVMTDsKKworICAgIGFzc2VydChwb2xsX2FwaSk7CisgICAgYXNzZXJ0KGNiKTsKKworICAgIGlmICgoZmQgPSBzb2NrZXQoUEZfTkVUTElOSywgU09DS19ER1JBTSwgTkVUTElOS19ST1VURSkpIDwgMCkgeworICAgICAgICBhdmFoaV9sb2dfZXJyb3IoX19GSUxFX18iOiBzb2NrZXQoUEZfTkVUTElOSyk6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgbWVtc2V0KCZhZGRyLCAwLCBzaXplb2YoYWRkcikpOworICAgIGFkZHIubmxfZmFtaWx5ID0gQUZfTkVUTElOSzsKKyAgICBhZGRyLm5sX2dyb3VwcyA9IGdyb3VwczsKKyAgICBhZGRyLm5sX3BpZCA9IGdldHBpZCgpOworCisgICAgaWYgKGJpbmQoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmFkZHIsIHNpemVvZihhZGRyKSkgPCAwKSB7CisgICAgICAgIGF2YWhpX2xvZ19lcnJvcihfX0ZJTEVfXyI6IGJpbmQoKTogJXMiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX1BBU1NDUkVELCAmb24sIHNpemVvZihvbikpIDwgMCkgeworICAgICAgICBhdmFoaV9sb2dfZXJyb3IoX19GSUxFX18iOiBTT19QQVNTQ1JFRDogJXMiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKCEobmwgPSBhdmFoaV9uZXcoQXZhaGlOZXRsaW5rLCAxKSkpIHsKKyAgICAgICAgYXZhaGlfbG9nX2Vycm9yKF9fRklMRV9fIjogYXZhaGlfbmV3KCkgZmFpbGVkLiIpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgbmwtPnBvbGxfYXBpID0gcG9sbF9hcGk7CisgICAgbmwtPmZkID0gZmQ7CisgICAgbmwtPnNlcSA9IDA7CisgICAgbmwtPmNhbGxiYWNrID0gY2I7CisgICAgbmwtPnVzZXJkYXRhID0gdXNlcmRhdGE7CisKKyAgICBpZiAoIShubC0+YnVmZmVyID0gYXZhaGlfbmV3KHVpbnQ4X3QsIG5sLT5idWZmZXJfbGVuZ3RoID0gNjQqMTAyNCkpKSB7CisgICAgICAgIGF2YWhpX2xvZ19lcnJvcihfX0ZJTEVfXyI6IGF2YWhpX25ldygpIGZhaWxlZC4iKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGlmICghKG5sLT53YXRjaCA9IHBvbGxfYXBpLT53YXRjaF9uZXcocG9sbF9hcGksIGZkLCBBVkFISV9XQVRDSF9JTiwgc29ja2V0X2V2ZW50LCBubCkpKSB7CisgICAgICAgIGF2YWhpX2xvZ19lcnJvcihfX0ZJTEVfXyI6IEZhaWxlZCB0byBjcmVhdGUgd2F0Y2guIik7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICByZXR1cm4gbmw7CisKK2ZhaWw6CisKKyAgICBpZiAoZmQgPj0gMCkKKyAgICAgICAgY2xvc2UoZmQpOworCisgICAgaWYgKG5sKSB7CisgICAgICAgIGF2YWhpX2ZyZWUobmwtPmJ1ZmZlcik7CisgICAgICAgIGF2YWhpX2ZyZWUobmwpOworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCit2b2lkIGF2YWhpX25ldGxpbmtfZnJlZShBdmFoaU5ldGxpbmsgKm5sKSB7CisgICAgYXNzZXJ0KG5sKTsKKworICAgIGlmIChubC0+d2F0Y2gpCisgICAgICAgIG5sLT5wb2xsX2FwaS0+d2F0Y2hfZnJlZShubC0+d2F0Y2gpOworCisgICAgaWYgKG5sLT5mZCA+PSAwKQorICAgICAgICBjbG9zZShubC0+ZmQpOworCisgICAgYXZhaGlfZnJlZShubC0+YnVmZmVyKTsKKyAgICBhdmFoaV9mcmVlKG5sKTsKK30KKworaW50IGF2YWhpX25ldGxpbmtfc2VuZChBdmFoaU5ldGxpbmsgKm5sLCBzdHJ1Y3Qgbmxtc2doZHIgKm0sIHVuc2lnbmVkICpyZXRfc2VxKSB7CisgICAgYXNzZXJ0KG5sKTsKKyAgICBhc3NlcnQobSk7CisKKyAgICBtLT5ubG1zZ19zZXEgPSBubC0+c2VxKys7CisgICAgbS0+bmxtc2dfZmxhZ3MgfD0gTkxNX0ZfQUNLOworCisgICAgaWYgKHNlbmQobmwtPmZkLCBtLCBtLT5ubG1zZ19sZW4sIDApIDwgMCkgeworICAgICAgICBhdmFoaV9sb2dfZXJyb3IoX19GSUxFX18iOiBzZW5kKCk6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmIChyZXRfc2VxKQorICAgICAgICAqcmV0X3NlcSA9IG0tPm5sbXNnX3NlcTsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvbmV0bGluay5oIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvbmV0bGluay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljNmViMjgKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9uZXRsaW5rLmgKQEAgLTAsMCArMSw0MSBAQAorI2lmbmRlZiBmb29uZXRsaW5raGZvbworI2RlZmluZSBmb29uZXRsaW5raGZvbworCisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKworI2luY2x1ZGUgPGxpbnV4L25ldGxpbmsuaD4KKyNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KKworI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi93YXRjaC5oPgorCit0eXBlZGVmIHN0cnVjdCBBdmFoaU5ldGxpbmsgQXZhaGlOZXRsaW5rOworCit0eXBlZGVmIHZvaWQgKCpBdmFoaU5ldGxpbmtDYWxsYmFjaykoQXZhaGlOZXRsaW5rICpuLCBzdHJ1Y3Qgbmxtc2doZHIgKm0sIHZvaWQqIHVzZXJkYXRhKTsKKworQXZhaGlOZXRsaW5rICphdmFoaV9uZXRsaW5rX25ldyhjb25zdCBBdmFoaVBvbGwgKnBvbGxfYXBpLCB1aW50MzJfdCBncm91cHMsIEF2YWhpTmV0bGlua0NhbGxiYWNrIGNhbGxiYWNrLCB2b2lkKiB1c2VyZGF0YSk7Cit2b2lkIGF2YWhpX25ldGxpbmtfZnJlZShBdmFoaU5ldGxpbmsgKm4pOworaW50IGF2YWhpX25ldGxpbmtfc2VuZChBdmFoaU5ldGxpbmsgKm4sIHN0cnVjdCBubG1zZ2hkciAqbSwgdW5zaWduZWQgKnJldF9zZXEpOworaW50IGF2YWhpX25ldGxpbmtfd29yayhBdmFoaU5ldGxpbmsgKm4sIGludCBibG9jayk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvcHJpb3EtdGVzdC5jIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvcHJpb3EtdGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkMGZkNjIKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9wcmlvcS10ZXN0LmMKQEAgLTAsMCArMSwxMjAgQEAKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vZ2NjbWFjcm8uaD4KKworI2luY2x1ZGUgInByaW9xLmgiCisKKyNkZWZpbmUgUE9JTlRFUl9UT19JTlQocCkgKChpbnQpIChsb25nKSAocCkpCisjZGVmaW5lIElOVF9UT19QT0lOVEVSKGkpICgodm9pZCopIChsb25nKSAoaSkpCisKK3N0YXRpYyBpbnQgY29tcGFyZV9pbnQoY29uc3Qgdm9pZCogYSwgY29uc3Qgdm9pZCogYikgeworICAgIGludCBpID0gUE9JTlRFUl9UT19JTlQoYSksIGogPSBQT0lOVEVSX1RPX0lOVChiKTsKKworICAgIHJldHVybiBpIDwgaiA/IC0xIDogKGkgPiBqID8gMSA6IDApOworfQorCitzdGF0aWMgaW50IGNvbXBhcmVfcHRyKGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQqIGIpIHsKKyAgICByZXR1cm4gYSA8IGIgPyAtMSA6IChhID4gYiA/IDEgOiAwKTsKK30KKworc3RhdGljIHZvaWQgcmVjKEF2YWhpUHJpb1F1ZXVlTm9kZSAqbikgeworICAgIGlmICghbikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG4tPmxlZnQpCisgICAgICAgIGFzc2VydChuLT5sZWZ0LT5wYXJlbnQgPT0gbik7CisKKyAgICBpZiAobi0+cmlnaHQpCisgICAgICAgIGFzc2VydChuLT5yaWdodC0+cGFyZW50ID09IG4pOworCisgICAgaWYgKG4tPnBhcmVudCkgeworICAgICAgICBhc3NlcnQobi0+cGFyZW50LT5sZWZ0ID09IG4gfHwgbi0+cGFyZW50LT5yaWdodCA9PSBuKTsKKworICAgICAgICBpZiAobi0+cGFyZW50LT5sZWZ0ID09IG4pCisgICAgICAgICAgICBhc3NlcnQobi0+bmV4dCA9PSBuLT5wYXJlbnQtPnJpZ2h0KTsKKyAgICB9CisKKyAgICBpZiAoIW4tPm5leHQpIHsKKyAgICAgICAgYXNzZXJ0KG4tPnF1ZXVlLT5sYXN0ID09IG4pOworCisgICAgICAgIGlmIChuLT5wYXJlbnQgJiYgbi0+cGFyZW50LT5sZWZ0ID09IG4pCisgICAgICAgICAgICBhc3NlcnQobi0+cGFyZW50LT5yaWdodCA9PSBOVUxMKTsKKyAgICB9CisKKworICAgIGlmIChuLT5wYXJlbnQpIHsKKyAgICAgICAgaW50IGEgPSBQT0lOVEVSX1RPX0lOVChuLT5wYXJlbnQtPmRhdGEpLCBiID0gUE9JTlRFUl9UT19JTlQobi0+ZGF0YSk7CisgICAgICAgIGlmIChhID4gYikgeworICAgICAgICAgICAgcHJpbnRmKCIlaSA8PSAlaTogTk9cbiIsIGEsIGIpOworICAgICAgICAgICAgYWJvcnQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJlYyhuLT5sZWZ0KTsKKyAgICByZWMobi0+cmlnaHQpOworfQorCitpbnQgbWFpbihBVkFISV9HQ0NfVU5VU0VEIGludCBhcmdjLCBBVkFISV9HQ0NfVU5VU0VEIGNoYXIgKmFyZ3ZbXSkgeworICAgIEF2YWhpUHJpb1F1ZXVlICpxLCAqcTI7CisgICAgaW50IGk7CisKKyAgICBxID0gYXZhaGlfcHJpb19xdWV1ZV9uZXcoY29tcGFyZV9pbnQpOworICAgIHEyID0gYXZhaGlfcHJpb19xdWV1ZV9uZXcoY29tcGFyZV9wdHIpOworCisgICAgc3JhbmQodGltZShOVUxMKSk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgMTAwMDA7IGkrKykKKyAgICAgICAgYXZhaGlfcHJpb19xdWV1ZV9wdXQocTIsIGF2YWhpX3ByaW9fcXVldWVfcHV0KHEsIElOVF9UT19QT0lOVEVSKHJhbmRvbSgpICYgMHhGRkZGKSkpOworCisgICAgd2hpbGUgKHEyLT5yb290KSB7CisgICAgICAgIHJlYyhxLT5yb290KTsKKyAgICAgICAgcmVjKHEyLT5yb290KTsKKworICAgICAgICBhc3NlcnQocS0+bl9ub2RlcyA9PSBxMi0+bl9ub2Rlcyk7CisKKyAgICAgICAgcHJpbnRmKCIlaVxuIiwgUE9JTlRFUl9UT19JTlQoKChBdmFoaVByaW9RdWV1ZU5vZGUqKXEyLT5yb290LT5kYXRhKS0+ZGF0YSkpOworCisgICAgICAgIGF2YWhpX3ByaW9fcXVldWVfcmVtb3ZlKHEsIHEyLT5yb290LT5kYXRhKTsKKyAgICAgICAgYXZhaGlfcHJpb19xdWV1ZV9yZW1vdmUocTIsIHEyLT5yb290KTsKKyAgICB9CisKKworLyogICAgIHByZXYgPSAwOyAqLworLyogICAgIHdoaWxlIChxLT5yb290KSB7ICovCisvKiAgICAgICAgIGludCB2ID0gR1BPSU5URVJfVE9fSU5UKHEtPnJvb3QtPmRhdGEpOyAqLworLyogICAgICAgICByZWMocS0+cm9vdCk7ICovCisvKiAgICAgICAgIHByaW50ZigiJWlcbiIsIHYpOyAqLworLyogICAgICAgICBhdmFoaV9wcmlvX3F1ZXVlX3JlbW92ZShxLCBxLT5yb290KTsgKi8KKy8qICAgICAgICAgYXNzZXJ0KHYgPj0gcHJldik7ICovCisvKiAgICAgICAgIHByZXYgPSB2OyAqLworLyogICAgIH0gKi8KKworICAgIGF2YWhpX3ByaW9fcXVldWVfZnJlZShxKTsKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL3ByaW9xLmMgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9wcmlvcS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4YjUwMTgKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9wcmlvcS5jCkBAIC0wLDAgKzEsMzg4IEBACisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL21hbGxvYy5oPgorCisjaW5jbHVkZSAicHJpb3EuaCIKKworQXZhaGlQcmlvUXVldWUqIGF2YWhpX3ByaW9fcXVldWVfbmV3KEF2YWhpUFFDb21wYXJlRnVuYyBjb21wYXJlKSB7CisgICAgQXZhaGlQcmlvUXVldWUgKnE7CisgICAgYXNzZXJ0KGNvbXBhcmUpOworCisgICAgaWYgKCEocSA9IGF2YWhpX25ldyhBdmFoaVByaW9RdWV1ZSwgMSkpKQorICAgICAgICByZXR1cm4gTlVMTDsgLyogT09NICovCisKKyAgICBxLT5yb290ID0gcS0+bGFzdCA9IE5VTEw7CisgICAgcS0+bl9ub2RlcyA9IDA7CisgICAgcS0+Y29tcGFyZSA9IGNvbXBhcmU7CisKKyAgICByZXR1cm4gcTsKK30KKwordm9pZCBhdmFoaV9wcmlvX3F1ZXVlX2ZyZWUoQXZhaGlQcmlvUXVldWUgKnEpIHsKKyAgICBhc3NlcnQocSk7CisKKyAgICB3aGlsZSAocS0+bGFzdCkKKyAgICAgICAgYXZhaGlfcHJpb19xdWV1ZV9yZW1vdmUocSwgcS0+bGFzdCk7CisKKyAgICBhc3NlcnQoIXEtPm5fbm9kZXMpOworICAgIGF2YWhpX2ZyZWUocSk7Cit9CisKK3N0YXRpYyBBdmFoaVByaW9RdWV1ZU5vZGUqIGdldF9ub2RlX2F0X3h5KEF2YWhpUHJpb1F1ZXVlICpxLCB1bnNpZ25lZCB4LCB1bnNpZ25lZCB5KSB7CisgICAgdW5zaWduZWQgcjsKKyAgICBBdmFoaVByaW9RdWV1ZU5vZGUgKm47CisgICAgYXNzZXJ0KHEpOworCisgICAgbiA9IHEtPnJvb3Q7CisgICAgYXNzZXJ0KG4pOworCisgICAgZm9yIChyID0gMDsgciA8IHk7IHIrKykgeworICAgICAgICBhc3NlcnQobik7CisKKyAgICAgICAgaWYgKCh4ID4+ICh5LXItMSkpICYgMSkKKyAgICAgICAgICAgIG4gPSBuLT5yaWdodDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbiA9IG4tPmxlZnQ7CisgICAgfQorCisgICAgYXNzZXJ0KG4tPnggPT0geCk7CisgICAgYXNzZXJ0KG4tPnkgPT0geSk7CisKKyAgICByZXR1cm4gbjsKK30KKworc3RhdGljIHZvaWQgZXhjaGFuZ2Vfbm9kZXMoQXZhaGlQcmlvUXVldWUgKnEsIEF2YWhpUHJpb1F1ZXVlTm9kZSAqYSwgQXZhaGlQcmlvUXVldWVOb2RlICpiKSB7CisgICAgQXZhaGlQcmlvUXVldWVOb2RlICpsLCAqciwgKnAsICphcCwgKmFuLCAqYnAsICpibjsKKyAgICB1bnNpZ25lZCB0OworICAgIGFzc2VydChxKTsKKyAgICBhc3NlcnQoYSk7CisgICAgYXNzZXJ0KGIpOworICAgIGFzc2VydChhICE9IGIpOworCisgICAgLyogU3dhcCBwb3NpdGlvbnMgKi8KKyAgICB0ID0gYS0+eDsgYS0+eCA9IGItPng7IGItPnggPSB0OworICAgIHQgPSBhLT55OyBhLT55ID0gYi0+eTsgYi0+eSA9IHQ7CisKKyAgICBpZiAoYS0+cGFyZW50ID09IGIpIHsKKyAgICAgICAgLyogQiBpcyBwYXJlbnQgb2YgQSAqLworCisgICAgICAgIHAgPSBiLT5wYXJlbnQ7CisgICAgICAgIGItPnBhcmVudCA9IGE7CisKKyAgICAgICAgaWYgKChhLT5wYXJlbnQgPSBwKSkgeworICAgICAgICAgICAgaWYgKGEtPnBhcmVudC0+bGVmdCA9PSBiKQorICAgICAgICAgICAgICAgIGEtPnBhcmVudC0+bGVmdCA9IGE7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYS0+cGFyZW50LT5yaWdodCA9IGE7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcS0+cm9vdCA9IGE7CisKKyAgICAgICAgaWYgKGItPmxlZnQgPT0gYSkgeworICAgICAgICAgICAgaWYgKChiLT5sZWZ0ID0gYS0+bGVmdCkpCisgICAgICAgICAgICAgICAgYi0+bGVmdC0+cGFyZW50ID0gYjsKKyAgICAgICAgICAgIGEtPmxlZnQgPSBiOworCisgICAgICAgICAgICByID0gYS0+cmlnaHQ7CisgICAgICAgICAgICBpZiAoKGEtPnJpZ2h0ID0gYi0+cmlnaHQpKQorICAgICAgICAgICAgICAgIGEtPnJpZ2h0LT5wYXJlbnQgPSBhOworICAgICAgICAgICAgaWYgKChiLT5yaWdodCA9IHIpKQorICAgICAgICAgICAgICAgIGItPnJpZ2h0LT5wYXJlbnQgPSBiOworCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoKGItPnJpZ2h0ID0gYS0+cmlnaHQpKQorICAgICAgICAgICAgICAgIGItPnJpZ2h0LT5wYXJlbnQgPSBiOworICAgICAgICAgICAgYS0+cmlnaHQgPSBiOworCisgICAgICAgICAgICBsID0gYS0+bGVmdDsKKyAgICAgICAgICAgIGlmICgoYS0+bGVmdCA9IGItPmxlZnQpKQorICAgICAgICAgICAgICAgIGEtPmxlZnQtPnBhcmVudCA9IGE7CisgICAgICAgICAgICBpZiAoKGItPmxlZnQgPSBsKSkKKyAgICAgICAgICAgICAgICBiLT5sZWZ0LT5wYXJlbnQgPSBiOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChiLT5wYXJlbnQgPT0gYSkgeworICAgICAgICAvKiBBIGlzdCBwYXJlbnQgb2YgQiAqLworCisgICAgICAgIHAgPSBhLT5wYXJlbnQ7CisgICAgICAgIGEtPnBhcmVudCA9IGI7CisKKyAgICAgICAgaWYgKChiLT5wYXJlbnQgPSBwKSkgeworICAgICAgICAgICAgaWYgKGItPnBhcmVudC0+bGVmdCA9PSBhKQorICAgICAgICAgICAgICAgIGItPnBhcmVudC0+bGVmdCA9IGI7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYi0+cGFyZW50LT5yaWdodCA9IGI7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcS0+cm9vdCA9IGI7CisKKyAgICAgICAgaWYgKGEtPmxlZnQgPT0gYikgeworICAgICAgICAgICAgaWYgKChhLT5sZWZ0ID0gYi0+bGVmdCkpCisgICAgICAgICAgICAgICAgYS0+bGVmdC0+cGFyZW50ID0gYTsKKyAgICAgICAgICAgIGItPmxlZnQgPSBhOworCisgICAgICAgICAgICByID0gYS0+cmlnaHQ7CisgICAgICAgICAgICBpZiAoKGEtPnJpZ2h0ID0gYi0+cmlnaHQpKQorICAgICAgICAgICAgICAgIGEtPnJpZ2h0LT5wYXJlbnQgPSBhOworICAgICAgICAgICAgaWYgKChiLT5yaWdodCA9IHIpKQorICAgICAgICAgICAgICAgIGItPnJpZ2h0LT5wYXJlbnQgPSBiOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKChhLT5yaWdodCA9IGItPnJpZ2h0KSkKKyAgICAgICAgICAgICAgICBhLT5yaWdodC0+cGFyZW50ID0gYTsKKyAgICAgICAgICAgIGItPnJpZ2h0ID0gYTsKKworICAgICAgICAgICAgbCA9IGEtPmxlZnQ7CisgICAgICAgICAgICBpZiAoKGEtPmxlZnQgPSBiLT5sZWZ0KSkKKyAgICAgICAgICAgICAgICBhLT5sZWZ0LT5wYXJlbnQgPSBhOworICAgICAgICAgICAgaWYgKChiLT5sZWZ0ID0gbCkpCisgICAgICAgICAgICAgICAgYi0+bGVmdC0+cGFyZW50ID0gYjsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEF2YWhpUHJpb1F1ZXVlTm9kZSAqYXBsID0gTlVMTCwgKmJwbCA9IE5VTEw7CisKKyAgICAgICAgLyogU3dhcCBwYXJlbnRzICovCisgICAgICAgIGFwID0gYS0+cGFyZW50OworICAgICAgICBicCA9IGItPnBhcmVudDsKKworICAgICAgICBpZiAoYXApCisgICAgICAgICAgICBhcGwgPSBhcC0+bGVmdDsKKyAgICAgICAgaWYgKGJwKQorICAgICAgICAgICAgYnBsID0gYnAtPmxlZnQ7CisKKyAgICAgICAgaWYgKChhLT5wYXJlbnQgPSBicCkpIHsKKyAgICAgICAgICAgIGlmIChicGwgPT0gYikKKyAgICAgICAgICAgICAgICBicC0+bGVmdCA9IGE7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYnAtPnJpZ2h0ID0gYTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBxLT5yb290ID0gYTsKKworICAgICAgICBpZiAoKGItPnBhcmVudCA9IGFwKSkgeworICAgICAgICAgICAgaWYgKGFwbCA9PSBhKQorICAgICAgICAgICAgICAgIGFwLT5sZWZ0ID0gYjsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhcC0+cmlnaHQgPSBiOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHEtPnJvb3QgPSBiOworCisgICAgICAgIC8qIFN3YXAgY2hpbGRyZW4gKi8KKyAgICAgICAgbCA9IGEtPmxlZnQ7CisgICAgICAgIHIgPSBhLT5yaWdodDsKKworICAgICAgICBpZiAoKGEtPmxlZnQgPSBiLT5sZWZ0KSkKKyAgICAgICAgICAgIGEtPmxlZnQtPnBhcmVudCA9IGE7CisKKyAgICAgICAgaWYgKChiLT5sZWZ0ID0gbCkpCisgICAgICAgICAgICBiLT5sZWZ0LT5wYXJlbnQgPSBiOworCisgICAgICAgIGlmICgoYS0+cmlnaHQgPSBiLT5yaWdodCkpCisgICAgICAgICAgICBhLT5yaWdodC0+cGFyZW50ID0gYTsKKworICAgICAgICBpZiAoKGItPnJpZ2h0ID0gcikpCisgICAgICAgICAgICBiLT5yaWdodC0+cGFyZW50ID0gYjsKKyAgICB9CisKKyAgICAvKiBTd2FwIHNpYmxpbmdzICovCisgICAgYXAgPSBhLT5wcmV2OyBhbiA9IGEtPm5leHQ7CisgICAgYnAgPSBiLT5wcmV2OyBibiA9IGItPm5leHQ7CisKKyAgICBpZiAoYS0+bmV4dCA9PSBiKSB7CisgICAgICAgIC8qIEEgaXMgcHJlZGVjZXNzb3Igb2YgQiAqLworICAgICAgICBhLT5wcmV2ID0gYjsKKyAgICAgICAgYi0+bmV4dCA9IGE7CisKKyAgICAgICAgaWYgKChhLT5uZXh0ID0gYm4pKQorICAgICAgICAgICAgYS0+bmV4dC0+cHJldiA9IGE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHEtPmxhc3QgPSBhOworCisgICAgICAgIGlmICgoYi0+cHJldiA9IGFwKSkKKyAgICAgICAgICAgIGItPnByZXYtPm5leHQgPSBiOworCisgICAgfSBlbHNlIGlmIChiLT5uZXh0ID09IGEpIHsKKyAgICAgICAgLyogQiBpcyBwcmVkZWNlc3NvciBvZiBBICovCisgICAgICAgIGEtPm5leHQgPSBiOworICAgICAgICBiLT5wcmV2ID0gYTsKKworICAgICAgICBpZiAoKGEtPnByZXYgPSBicCkpCisgICAgICAgICAgICBhLT5wcmV2LT5uZXh0ID0gYTsKKworICAgICAgICBpZiAoKGItPm5leHQgPSBhbikpCisgICAgICAgICAgICBiLT5uZXh0LT5wcmV2ID0gYjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcS0+bGFzdCA9IGI7CisKKyAgICB9IGVsc2UgeworICAgICAgICAvKiBBIGlzIG5vIG5laWdoYm91ciBvZiBCICovCisKKyAgICAgICAgaWYgKChhLT5wcmV2ID0gYnApKQorICAgICAgICAgICAgYS0+cHJldi0+bmV4dCA9IGE7CisKKyAgICAgICAgaWYgKChhLT5uZXh0ID0gYm4pKQorICAgICAgICAgICAgYS0+bmV4dC0+cHJldiA9IGE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHEtPmxhc3QgPSBhOworCisgICAgICAgIGlmICgoYi0+cHJldiA9IGFwKSkKKyAgICAgICAgICAgIGItPnByZXYtPm5leHQgPSBiOworCisgICAgICAgIGlmICgoYi0+bmV4dCA9IGFuKSkKKyAgICAgICAgICAgIGItPm5leHQtPnByZXYgPSBiOworICAgICAgICBlbHNlCisgICAgICAgICAgICBxLT5sYXN0ID0gYjsKKyAgICB9Cit9CisKKy8qIE1vdmUgYSBub2RlIHRvIHRoZSBjb3JyZWN0IHBvc2l0aW9uICovCit2b2lkIGF2YWhpX3ByaW9fcXVldWVfc2h1ZmZsZShBdmFoaVByaW9RdWV1ZSAqcSwgQXZhaGlQcmlvUXVldWVOb2RlICpuKSB7CisgICAgYXNzZXJ0KHEpOworICAgIGFzc2VydChuKTsKKyAgICBhc3NlcnQobi0+cXVldWUgPT0gcSk7CisKKyAgICAvKiBNb3ZlIHVwIHVudGlsIHRoZSBwb3NpdGlvbiBpcyBPSyAqLworICAgIHdoaWxlIChuLT5wYXJlbnQgJiYgcS0+Y29tcGFyZShuLT5wYXJlbnQtPmRhdGEsIG4tPmRhdGEpID4gMCkKKyAgICAgICAgZXhjaGFuZ2Vfbm9kZXMocSwgbiwgbi0+cGFyZW50KTsKKworICAgIC8qIE1vdmUgZG93biB1bnRpbCB0aGUgcG9zaXRpb24gaXMgT0sgKi8KKyAgICBmb3IgKDs7KSB7CisgICAgICAgIEF2YWhpUHJpb1F1ZXVlTm9kZSAqbWluOworCisgICAgICAgIGlmICghKG1pbiA9IG4tPmxlZnQpKSB7CisgICAgICAgICAgICAvKiBObyBjaGlsZHJlbiAqLworICAgICAgICAgICAgYXNzZXJ0KCFuLT5yaWdodCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChuLT5yaWdodCAmJiBxLT5jb21wYXJlKG4tPnJpZ2h0LT5kYXRhLCBtaW4tPmRhdGEpIDwgMCkKKyAgICAgICAgICAgIG1pbiA9IG4tPnJpZ2h0OworCisgICAgICAgIC8qIG1pbiBub3cgY29udGFpbnMgdGhlIHNtYWxsZXIgb25lIG9mIG91ciB0d28gY2hpbGRyZW4gKi8KKworICAgICAgICBpZiAocS0+Y29tcGFyZShuLT5kYXRhLCBtaW4tPmRhdGEpIDw9IDApCisgICAgICAgICAgICAvKiBPcmRlciBPSyAqLworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZXhjaGFuZ2Vfbm9kZXMocSwgbiwgbWluKTsKKyAgICB9Cit9CisKK0F2YWhpUHJpb1F1ZXVlTm9kZSogYXZhaGlfcHJpb19xdWV1ZV9wdXQoQXZhaGlQcmlvUXVldWUgKnEsIHZvaWQqIGRhdGEpIHsKKyAgICBBdmFoaVByaW9RdWV1ZU5vZGUgKm47CisgICAgYXNzZXJ0KHEpOworCisgICAgaWYgKCEobiA9IGF2YWhpX25ldyhBdmFoaVByaW9RdWV1ZU5vZGUsIDEpKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7IC8qIE9PTSAqLworCisgICAgbi0+cXVldWUgPSBxOworICAgIG4tPmRhdGEgPSBkYXRhOworCisgICAgaWYgKHEtPmxhc3QpIHsKKyAgICAgICAgYXNzZXJ0KHEtPnJvb3QpOworICAgICAgICBhc3NlcnQocS0+bl9ub2Rlcyk7CisKKyAgICAgICAgbi0+eSA9IHEtPmxhc3QtPnk7CisgICAgICAgIG4tPnggPSBxLT5sYXN0LT54KzE7CisKKyAgICAgICAgaWYgKG4tPnggPj0gKCh1bnNpZ25lZCkgMSA8PCBuLT55KSkgeworICAgICAgICAgICAgbi0+eCA9IDA7CisgICAgICAgICAgICBuLT55Kys7CisgICAgICAgIH0KKworICAgICAgICBxLT5sYXN0LT5uZXh0ID0gbjsKKyAgICAgICAgbi0+cHJldiA9IHEtPmxhc3Q7CisKKyAgICAgICAgYXNzZXJ0KG4tPnkgPiAwKTsKKyAgICAgICAgbi0+cGFyZW50ID0gZ2V0X25vZGVfYXRfeHkocSwgbi0+eC8yLCBuLT55LTEpOworCisgICAgICAgIGlmIChuLT54ICYgMSkKKyAgICAgICAgICAgIG4tPnBhcmVudC0+cmlnaHQgPSBuOworICAgICAgICBlbHNlCisgICAgICAgICAgICBuLT5wYXJlbnQtPmxlZnQgPSBuOworICAgIH0gZWxzZSB7CisgICAgICAgIGFzc2VydCghcS0+cm9vdCk7CisgICAgICAgIGFzc2VydCghcS0+bl9ub2Rlcyk7CisKKyAgICAgICAgbi0+eSA9IG4tPnggPSAwOworICAgICAgICBxLT5yb290ID0gbjsKKyAgICAgICAgbi0+cHJldiA9IG4tPnBhcmVudCA9IE5VTEw7CisgICAgfQorCisgICAgbi0+bmV4dCA9IG4tPmxlZnQgPSBuLT5yaWdodCA9IE5VTEw7CisgICAgcS0+bGFzdCA9IG47CisgICAgcS0+bl9ub2RlcysrOworCisgICAgYXZhaGlfcHJpb19xdWV1ZV9zaHVmZmxlKHEsIG4pOworCisgICAgcmV0dXJuIG47Cit9CisKK3ZvaWQgYXZhaGlfcHJpb19xdWV1ZV9yZW1vdmUoQXZhaGlQcmlvUXVldWUgKnEsIEF2YWhpUHJpb1F1ZXVlTm9kZSAqbikgeworICAgIGFzc2VydChxKTsKKyAgICBhc3NlcnQobik7CisgICAgYXNzZXJ0KHEgPT0gbi0+cXVldWUpOworCisgICAgaWYgKG4gIT0gcS0+bGFzdCkgeworICAgICAgICBBdmFoaVByaW9RdWV1ZU5vZGUgKnJlcGxhY2VtZW50ID0gcS0+bGFzdDsKKyAgICAgICAgZXhjaGFuZ2Vfbm9kZXMocSwgcmVwbGFjZW1lbnQsIG4pOworICAgICAgICBhdmFoaV9wcmlvX3F1ZXVlX3JlbW92ZShxLCBuKTsKKyAgICAgICAgYXZhaGlfcHJpb19xdWV1ZV9zaHVmZmxlKHEsIHJlcGxhY2VtZW50KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGFzc2VydChuID09IHEtPmxhc3QpOworICAgIGFzc2VydCghbi0+bmV4dCk7CisgICAgYXNzZXJ0KCFuLT5sZWZ0KTsKKyAgICBhc3NlcnQoIW4tPnJpZ2h0KTsKKworICAgIHEtPmxhc3QgPSBuLT5wcmV2OworCisgICAgaWYgKG4tPnByZXYpIHsKKyAgICAgICAgbi0+cHJldi0+bmV4dCA9IE5VTEw7CisgICAgICAgIGFzc2VydChuLT5wYXJlbnQpOworICAgIH0gZWxzZQorICAgICAgICBhc3NlcnQoIW4tPnBhcmVudCk7CisKKyAgICBpZiAobi0+cGFyZW50KSB7CisgICAgICAgIGFzc2VydChuLT5wcmV2KTsKKyAgICAgICAgaWYgKG4tPnBhcmVudC0+bGVmdCA9PSBuKSB7CisgICAgICAgICAgICBhc3NlcnQobi0+cGFyZW50LT5yaWdodCA9PSBOVUxMKTsKKyAgICAgICAgICAgIG4tPnBhcmVudC0+bGVmdCA9IE5VTEw7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhc3NlcnQobi0+cGFyZW50LT5yaWdodCA9PSBuKTsKKyAgICAgICAgICAgIGFzc2VydChuLT5wYXJlbnQtPmxlZnQgIT0gTlVMTCk7CisgICAgICAgICAgICBuLT5wYXJlbnQtPnJpZ2h0ID0gTlVMTDsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGFzc2VydChxLT5yb290ID09IG4pOworICAgICAgICBhc3NlcnQoIW4tPnByZXYpOworICAgICAgICBhc3NlcnQocS0+bl9ub2RlcyA9PSAxKTsKKyAgICAgICAgcS0+cm9vdCA9IE5VTEw7CisgICAgfQorCisgICAgYXZhaGlfZnJlZShuKTsKKworICAgIGFzc2VydChxLT5uX25vZGVzID4gMCk7CisgICAgcS0+bl9ub2Rlcy0tOworfQorCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9wcmlvcS5oIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvcHJpb3EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2QzMWViCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvcHJpb3EuaApAQCAtMCwwICsxLDQ5IEBACisjaWZuZGVmIGZvb3ByaW9xaGZvbworI2RlZmluZSBmb29wcmlvcWhmb28KKworLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCit0eXBlZGVmIHN0cnVjdCBBdmFoaVByaW9RdWV1ZSBBdmFoaVByaW9RdWV1ZTsKK3R5cGVkZWYgc3RydWN0IEF2YWhpUHJpb1F1ZXVlTm9kZSBBdmFoaVByaW9RdWV1ZU5vZGU7CisKK3R5cGVkZWYgaW50ICgqQXZhaGlQUUNvbXBhcmVGdW5jKShjb25zdCB2b2lkKiBhLCBjb25zdCB2b2lkKiBiKTsKKworc3RydWN0IEF2YWhpUHJpb1F1ZXVlIHsKKyAgICBBdmFoaVByaW9RdWV1ZU5vZGUgKnJvb3QsICpsYXN0OworICAgIHVuc2lnbmVkIG5fbm9kZXM7CisgICAgQXZhaGlQUUNvbXBhcmVGdW5jIGNvbXBhcmU7Cit9OworCitzdHJ1Y3QgQXZhaGlQcmlvUXVldWVOb2RlIHsKKyAgICBBdmFoaVByaW9RdWV1ZSAqcXVldWU7CisgICAgdm9pZCogZGF0YTsKKyAgICB1bnNpZ25lZCB4LCB5OworICAgIEF2YWhpUHJpb1F1ZXVlTm9kZSAqbGVmdCwgKnJpZ2h0LCAqcGFyZW50LCAqbmV4dCwgKnByZXY7Cit9OworCitBdmFoaVByaW9RdWV1ZSogYXZhaGlfcHJpb19xdWV1ZV9uZXcoQXZhaGlQUUNvbXBhcmVGdW5jIGNvbXBhcmUpOwordm9pZCBhdmFoaV9wcmlvX3F1ZXVlX2ZyZWUoQXZhaGlQcmlvUXVldWUgKnEpOworCitBdmFoaVByaW9RdWV1ZU5vZGUqIGF2YWhpX3ByaW9fcXVldWVfcHV0KEF2YWhpUHJpb1F1ZXVlICpxLCB2b2lkKiBkYXRhKTsKK3ZvaWQgYXZhaGlfcHJpb19xdWV1ZV9yZW1vdmUoQXZhaGlQcmlvUXVldWUgKnEsIEF2YWhpUHJpb1F1ZXVlTm9kZSAqbik7CisKK3ZvaWQgYXZhaGlfcHJpb19xdWV1ZV9zaHVmZmxlKEF2YWhpUHJpb1F1ZXVlICpxLCBBdmFoaVByaW9RdWV1ZU5vZGUgKm4pOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL3Byb2JlLXNjaGVkLmMgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9wcm9iZS1zY2hlZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNjM0MTEKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9wcm9iZS1zY2hlZC5jCkBAIC0wLDAgKzEsMzk3IEBACisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2RvbWFpbi5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi90aW1ldmFsLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL21hbGxvYy5oPgorCisjaW5jbHVkZSAicHJvYmUtc2NoZWQuaCIKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJyci11dGlsLmgiCisKKyNkZWZpbmUgQVZBSElfUFJPQkVfSElTVE9SWV9NU0VDIDE1MAorI2RlZmluZSBBVkFISV9QUk9CRV9ERUZFUl9NU0VDIDUwCisKK3R5cGVkZWYgc3RydWN0IEF2YWhpUHJvYmVKb2IgQXZhaGlQcm9iZUpvYjsKKworc3RydWN0IEF2YWhpUHJvYmVKb2IgeworICAgIEF2YWhpUHJvYmVTY2hlZHVsZXIgKnNjaGVkdWxlcjsKKyAgICBBdmFoaVRpbWVFdmVudCAqdGltZV9ldmVudDsKKworICAgIGludCBjaG9zZW47IC8qIFVzZSBmb3IgcGFja2V0IGFzc2VtYmxpbmcgKi8KKyAgICBpbnQgZG9uZTsKKyAgICBzdHJ1Y3QgdGltZXZhbCBkZWxpdmVyeTsKKworICAgIEF2YWhpUmVjb3JkICpyZWNvcmQ7CisKKyAgICBBVkFISV9MTElTVF9GSUVMRFMoQXZhaGlQcm9iZUpvYiwgam9icyk7Cit9OworCitzdHJ1Y3QgQXZhaGlQcm9iZVNjaGVkdWxlciB7CisgICAgQXZhaGlJbnRlcmZhY2UgKmludGVyZmFjZTsKKyAgICBBdmFoaVRpbWVFdmVudFF1ZXVlICp0aW1lX2V2ZW50X3F1ZXVlOworCisgICAgQVZBSElfTExJU1RfSEVBRChBdmFoaVByb2JlSm9iLCBqb2JzKTsKKyAgICBBVkFISV9MTElTVF9IRUFEKEF2YWhpUHJvYmVKb2IsIGhpc3RvcnkpOworfTsKKworc3RhdGljIEF2YWhpUHJvYmVKb2IqIGpvYl9uZXcoQXZhaGlQcm9iZVNjaGVkdWxlciAqcywgQXZhaGlSZWNvcmQgKnJlY29yZCwgaW50IGRvbmUpIHsKKyAgICBBdmFoaVByb2JlSm9iICpwajsKKworICAgIGFzc2VydChzKTsKKyAgICBhc3NlcnQocmVjb3JkKTsKKworICAgIGlmICghKHBqID0gYXZhaGlfbmV3KEF2YWhpUHJvYmVKb2IsIDEpKSkgeworICAgICAgICBhdmFoaV9sb2dfZXJyb3IoX19GSUxFX18iOiBPdXQgb2YgbWVtb3J5Iik7CisgICAgICAgIHJldHVybiBOVUxMOyAvKiBPT00gKi8KKyAgICB9CisKKyAgICBwai0+c2NoZWR1bGVyID0gczsKKyAgICBwai0+cmVjb3JkID0gYXZhaGlfcmVjb3JkX3JlZihyZWNvcmQpOworICAgIHBqLT50aW1lX2V2ZW50ID0gTlVMTDsKKyAgICBwai0+Y2hvc2VuID0gMDsKKworICAgIGlmICgocGotPmRvbmUgPSBkb25lKSkKKyAgICAgICAgQVZBSElfTExJU1RfUFJFUEVORChBdmFoaVByb2JlSm9iLCBqb2JzLCBzLT5oaXN0b3J5LCBwaik7CisgICAgZWxzZQorICAgICAgICBBVkFISV9MTElTVF9QUkVQRU5EKEF2YWhpUHJvYmVKb2IsIGpvYnMsIHMtPmpvYnMsIHBqKTsKKworICAgIHJldHVybiBwajsKK30KKworc3RhdGljIHZvaWQgam9iX2ZyZWUoQXZhaGlQcm9iZVNjaGVkdWxlciAqcywgQXZhaGlQcm9iZUpvYiAqcGopIHsKKyAgICBhc3NlcnQocGopOworCisgICAgaWYgKHBqLT50aW1lX2V2ZW50KQorICAgICAgICBhdmFoaV90aW1lX2V2ZW50X2ZyZWUocGotPnRpbWVfZXZlbnQpOworCisgICAgaWYgKHBqLT5kb25lKQorICAgICAgICBBVkFISV9MTElTVF9SRU1PVkUoQXZhaGlQcm9iZUpvYiwgam9icywgcy0+aGlzdG9yeSwgcGopOworICAgIGVsc2UKKyAgICAgICAgQVZBSElfTExJU1RfUkVNT1ZFKEF2YWhpUHJvYmVKb2IsIGpvYnMsIHMtPmpvYnMsIHBqKTsKKworICAgIGF2YWhpX3JlY29yZF91bnJlZihwai0+cmVjb3JkKTsKKyAgICBhdmFoaV9mcmVlKHBqKTsKK30KKworc3RhdGljIHZvaWQgZWxhcHNlX2NhbGxiYWNrKEF2YWhpVGltZUV2ZW50ICplLCB2b2lkKiBkYXRhKTsKKworc3RhdGljIHZvaWQgam9iX3NldF9lbGFwc2VfdGltZShBdmFoaVByb2JlU2NoZWR1bGVyICpzLCBBdmFoaVByb2JlSm9iICpwaiwgdW5zaWduZWQgbXNlYywgdW5zaWduZWQgaml0dGVyKSB7CisgICAgc3RydWN0IHRpbWV2YWwgdHY7CisKKyAgICBhc3NlcnQocyk7CisgICAgYXNzZXJ0KHBqKTsKKworICAgIGF2YWhpX2VsYXBzZV90aW1lKCZ0diwgbXNlYywgaml0dGVyKTsKKworICAgIGlmIChwai0+dGltZV9ldmVudCkKKyAgICAgICAgYXZhaGlfdGltZV9ldmVudF91cGRhdGUocGotPnRpbWVfZXZlbnQsICZ0dik7CisgICAgZWxzZQorICAgICAgICBwai0+dGltZV9ldmVudCA9IGF2YWhpX3RpbWVfZXZlbnRfbmV3KHMtPnRpbWVfZXZlbnRfcXVldWUsICZ0diwgZWxhcHNlX2NhbGxiYWNrLCBwaik7Cit9CisKK3N0YXRpYyB2b2lkIGpvYl9tYXJrX2RvbmUoQXZhaGlQcm9iZVNjaGVkdWxlciAqcywgQXZhaGlQcm9iZUpvYiAqcGopIHsKKyAgICBhc3NlcnQocyk7CisgICAgYXNzZXJ0KHBqKTsKKworICAgIGFzc2VydCghcGotPmRvbmUpOworCisgICAgQVZBSElfTExJU1RfUkVNT1ZFKEF2YWhpUHJvYmVKb2IsIGpvYnMsIHMtPmpvYnMsIHBqKTsKKyAgICBBVkFISV9MTElTVF9QUkVQRU5EKEF2YWhpUHJvYmVKb2IsIGpvYnMsIHMtPmhpc3RvcnksIHBqKTsKKworICAgIHBqLT5kb25lID0gMTsKKworICAgIGpvYl9zZXRfZWxhcHNlX3RpbWUocywgcGosIEFWQUhJX1BST0JFX0hJU1RPUllfTVNFQywgMCk7CisgICAgZ2V0dGltZW9mZGF5KCZwai0+ZGVsaXZlcnksIE5VTEwpOworfQorCitBdmFoaVByb2JlU2NoZWR1bGVyICphdmFoaV9wcm9iZV9zY2hlZHVsZXJfbmV3KEF2YWhpSW50ZXJmYWNlICppKSB7CisgICAgQXZhaGlQcm9iZVNjaGVkdWxlciAqczsKKworICAgIGFzc2VydChpKTsKKworICAgIGlmICghKHMgPSBhdmFoaV9uZXcoQXZhaGlQcm9iZVNjaGVkdWxlciwgMSkpKSB7CisgICAgICAgIGF2YWhpX2xvZ19lcnJvcihfX0ZJTEVfXyI6IE91dCBvZiBtZW1vcnkiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcy0+aW50ZXJmYWNlID0gaTsKKyAgICBzLT50aW1lX2V2ZW50X3F1ZXVlID0gaS0+bW9uaXRvci0+c2VydmVyLT50aW1lX2V2ZW50X3F1ZXVlOworCisgICAgQVZBSElfTExJU1RfSEVBRF9JTklUKEF2YWhpUHJvYmVKb2IsIHMtPmpvYnMpOworICAgIEFWQUhJX0xMSVNUX0hFQURfSU5JVChBdmFoaVByb2JlSm9iLCBzLT5oaXN0b3J5KTsKKworICAgIHJldHVybiBzOworfQorCit2b2lkIGF2YWhpX3Byb2JlX3NjaGVkdWxlcl9mcmVlKEF2YWhpUHJvYmVTY2hlZHVsZXIgKnMpIHsKKyAgICBhc3NlcnQocyk7CisKKyAgICBhdmFoaV9wcm9iZV9zY2hlZHVsZXJfY2xlYXIocyk7CisgICAgYXZhaGlfZnJlZShzKTsKK30KKwordm9pZCBhdmFoaV9wcm9iZV9zY2hlZHVsZXJfY2xlYXIoQXZhaGlQcm9iZVNjaGVkdWxlciAqcykgeworICAgIGFzc2VydChzKTsKKworICAgIHdoaWxlIChzLT5qb2JzKQorICAgICAgICBqb2JfZnJlZShzLCBzLT5qb2JzKTsKKyAgICB3aGlsZSAocy0+aGlzdG9yeSkKKyAgICAgICAgam9iX2ZyZWUocywgcy0+aGlzdG9yeSk7Cit9CisKK3N0YXRpYyBpbnQgcGFja2V0X2FkZF9wcm9iZV9xdWVyeShBdmFoaVByb2JlU2NoZWR1bGVyICpzLCBBdmFoaURuc1BhY2tldCAqcCwgQXZhaGlQcm9iZUpvYiAqcGopIHsKKyAgICBzaXplX3Qgc2l6ZTsKKyAgICBBdmFoaUtleSAqazsKKyAgICBpbnQgYjsKKworICAgIGFzc2VydChzKTsKKyAgICBhc3NlcnQocCk7CisgICAgYXNzZXJ0KHBqKTsKKworICAgIGFzc2VydCghcGotPmNob3Nlbik7CisKKyAgICAvKiBFc3RpbWF0ZSB0aGUgc2l6ZSBmb3IgdGhpcyByZWNvcmQgKi8KKyAgICBzaXplID0KKyAgICAgICAgYXZhaGlfa2V5X2dldF9lc3RpbWF0ZV9zaXplKHBqLT5yZWNvcmQtPmtleSkgKworICAgICAgICBhdmFoaV9yZWNvcmRfZ2V0X2VzdGltYXRlX3NpemUocGotPnJlY29yZCk7CisKKyAgICAvKiBUb28gbGFyZ2UgKi8KKyAgICBpZiAoc2l6ZSA+IGF2YWhpX2Ruc19wYWNrZXRfc3BhY2UocCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgLyogQ3JlYXRlIHRoZSBwcm9iZSBxdWVyeSAqLworICAgIGlmICghKGsgPSBhdmFoaV9rZXlfbmV3KHBqLT5yZWNvcmQtPmtleS0+bmFtZSwgcGotPnJlY29yZC0+a2V5LT5jbGF6eiwgQVZBSElfRE5TX1RZUEVfQU5ZKSkpCisgICAgICAgIHJldHVybiAwOyAvKiBPT00gKi8KKworICAgIGIgPSAhIWF2YWhpX2Ruc19wYWNrZXRfYXBwZW5kX2tleShwLCBrLCAwKTsKKyAgICBhc3NlcnQoYik7CisKKyAgICAvKiBNYXJrIHRoaXMgam9iIGZvciBhZGRpdGlvbiB0byB0aGUgcGFja2V0ICovCisgICAgcGotPmNob3NlbiA9IDE7CisKKyAgICAvKiBTY2FuIGZvciBtb3JlIGpvYnMgd2hpdGggbWF0Y2hpbmcga2V5IHBhdHRlcm4gKi8KKyAgICBmb3IgKHBqID0gcy0+am9iczsgcGo7IHBqID0gcGotPmpvYnNfbmV4dCkgeworICAgICAgICBpZiAocGotPmNob3NlbikKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8qIERvZXMgdGhlIHJlY29yZCBtYXRjaCB0aGUgcHJvYmU/ICovCisgICAgICAgIGlmIChrLT5jbGF6eiAhPSBwai0+cmVjb3JkLT5rZXktPmNsYXp6IHx8ICFhdmFoaV9kb21haW5fZXF1YWwoay0+bmFtZSwgcGotPnJlY29yZC0+a2V5LT5uYW1lKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8qIFRoaXMgam9iIHdvdWxkbid0IGZpdCBpbiAqLworICAgICAgICBpZiAoYXZhaGlfcmVjb3JkX2dldF9lc3RpbWF0ZV9zaXplKHBqLT5yZWNvcmQpID4gYXZhaGlfZG5zX3BhY2tldF9zcGFjZShwKSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qIE1hcmsgdGhpcyBqb2IgZm9yIGFkZGl0aW9uIHRvIHRoZSBwYWNrZXQgKi8KKyAgICAgICAgcGotPmNob3NlbiA9IDE7CisgICAgfQorCisgICAgYXZhaGlfa2V5X3VucmVmKGspOworCisgICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGVsYXBzZV9jYWxsYmFjayhBVkFISV9HQ0NfVU5VU0VEIEF2YWhpVGltZUV2ZW50ICplLCB2b2lkKiBkYXRhKSB7CisgICAgQXZhaGlQcm9iZUpvYiAqcGogPSBkYXRhLCAqbmV4dDsKKyAgICBBdmFoaVByb2JlU2NoZWR1bGVyICpzOworICAgIEF2YWhpRG5zUGFja2V0ICpwOworICAgIHVuc2lnbmVkIG47CisKKyAgICBhc3NlcnQocGopOworICAgIHMgPSBwai0+c2NoZWR1bGVyOworCisgICAgaWYgKHBqLT5kb25lKSB7CisgICAgICAgIC8qIExldHMgcmVtb3ZlIGl0ICBmcm9tIHRoZSBoaXN0b3J5ICovCisgICAgICAgIGpvYl9mcmVlKHMsIHBqKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghKHAgPSBhdmFoaV9kbnNfcGFja2V0X25ld19xdWVyeShzLT5pbnRlcmZhY2UtPmhhcmR3YXJlLT5tdHUpKSkKKyAgICAgICAgcmV0dXJuOyAvKiBPT00gKi8KKyAgICBuID0gMTsKKworICAgIC8qIEFkZCB0aGUgaW1wb3J0IHByb2JlICovCisgICAgaWYgKCFwYWNrZXRfYWRkX3Byb2JlX3F1ZXJ5KHMsIHAsIHBqKSkgeworICAgICAgICBzaXplX3Qgc2l6ZTsKKyAgICAgICAgQXZhaGlLZXkgKms7CisgICAgICAgIGludCBiOworCisgICAgICAgIGF2YWhpX2Ruc19wYWNrZXRfZnJlZShwKTsKKworICAgICAgICAvKiBUaGUgcHJvYmUgZGlkbid0IGZpdCBpbiB0aGUgcGFja2FnZSwgc28gbGV0J3MgYWxsb2NhdGUgYSBsYXJnZXIgb25lICovCisKKyAgICAgICAgc2l6ZSA9CisgICAgICAgICAgICBhdmFoaV9rZXlfZ2V0X2VzdGltYXRlX3NpemUocGotPnJlY29yZC0+a2V5KSArCisgICAgICAgICAgICBhdmFoaV9yZWNvcmRfZ2V0X2VzdGltYXRlX3NpemUocGotPnJlY29yZCkgKworICAgICAgICAgICAgQVZBSElfRE5TX1BBQ0tFVF9IRUFERVJfU0laRTsKKworICAgICAgICBpZiAoIShwID0gYXZhaGlfZG5zX3BhY2tldF9uZXdfcXVlcnkoc2l6ZSArIEFWQUhJX0ROU19QQUNLRVRfRVhUUkFfU0laRSkpKQorICAgICAgICAgICAgcmV0dXJuOyAvKiBPT00gKi8KKworICAgICAgICBpZiAoIShrID0gYXZhaGlfa2V5X25ldyhwai0+cmVjb3JkLT5rZXktPm5hbWUsIHBqLT5yZWNvcmQtPmtleS0+Y2xhenosIEFWQUhJX0ROU19UWVBFX0FOWSkpKSB7CisgICAgICAgICAgICBhdmFoaV9kbnNfcGFja2V0X2ZyZWUocCk7CisgICAgICAgICAgICByZXR1cm47ICAvKiBPT00gKi8KKyAgICAgICAgfQorCisgICAgICAgIGIgPSBhdmFoaV9kbnNfcGFja2V0X2FwcGVuZF9rZXkocCwgaywgMCkgJiYgYXZhaGlfZG5zX3BhY2tldF9hcHBlbmRfcmVjb3JkKHAsIHBqLT5yZWNvcmQsIDAsIDApOworICAgICAgICBhdmFoaV9rZXlfdW5yZWYoayk7CisKKyAgICAgICAgaWYgKGIpIHsKKyAgICAgICAgICAgIGF2YWhpX2Ruc19wYWNrZXRfc2V0X2ZpZWxkKHAsIEFWQUhJX0ROU19GSUVMRF9OU0NPVU5ULCAxKTsKKyAgICAgICAgICAgIGF2YWhpX2Ruc19wYWNrZXRfc2V0X2ZpZWxkKHAsIEFWQUhJX0ROU19GSUVMRF9RRENPVU5ULCAxKTsKKyAgICAgICAgICAgIGF2YWhpX2ludGVyZmFjZV9zZW5kX3BhY2tldChzLT5pbnRlcmZhY2UsIHApOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGF2YWhpX2xvZ193YXJuKCJQcm9iZSByZWNvcmQgdG9vIGxhcmdlLCBjYW5ub3Qgc2VuZCIpOworCisgICAgICAgIGF2YWhpX2Ruc19wYWNrZXRfZnJlZShwKTsKKyAgICAgICAgam9iX21hcmtfZG9uZShzLCBwaik7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qIFRyeSB0byBmaWxsIHVwIHBhY2tldCB3aXRoIG1vcmUgcHJvYmVzLCBpZiBhdmFpbGFibGUgKi8KKyAgICBmb3IgKHBqID0gcy0+am9iczsgcGo7IHBqID0gcGotPmpvYnNfbmV4dCkgeworCisgICAgICAgIGlmIChwai0+Y2hvc2VuKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKCFwYWNrZXRfYWRkX3Byb2JlX3F1ZXJ5KHMsIHAsIHBqKSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIG4rKzsKKyAgICB9CisKKyAgICBhdmFoaV9kbnNfcGFja2V0X3NldF9maWVsZChwLCBBVkFISV9ETlNfRklFTERfUURDT1VOVCwgbik7CisKKyAgICBuID0gMDsKKworICAgIC8qIE5vdyBhZGQgdGhlIGNob3NlbiByZWNvcmRzIHRvIHRoZSBhdXRob3JhdGl2ZSBzZWN0aW9uICovCisgICAgZm9yIChwaiA9IHMtPmpvYnM7IHBqOyBwaiA9IG5leHQpIHsKKworICAgICAgICBuZXh0ID0gcGotPmpvYnNfbmV4dDsKKworICAgICAgICBpZiAoIXBqLT5jaG9zZW4pCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoIWF2YWhpX2Ruc19wYWNrZXRfYXBwZW5kX3JlY29yZChwLCBwai0+cmVjb3JkLCAwLCAwKSkgeworLyogICAgICAgICAgICAgYXZhaGlfbG9nX3dhcm4oIkJhZCBwcm9iZSBzaXplIGVzdGltYXRlISIpOyAqLworCisgICAgICAgICAgICAvKiBVbm1hcmsgYWxsIGZvbGxvd2luZyBqb2JzICovCisgICAgICAgICAgICBmb3IgKDsgcGo7IHBqID0gcGotPmpvYnNfbmV4dCkKKyAgICAgICAgICAgICAgICBwai0+Y2hvc2VuID0gMDsKKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBqb2JfbWFya19kb25lKHMsIHBqKTsKKworICAgICAgICBuICsrOworICAgIH0KKworICAgIGF2YWhpX2Ruc19wYWNrZXRfc2V0X2ZpZWxkKHAsIEFWQUhJX0ROU19GSUVMRF9OU0NPVU5ULCBuKTsKKworICAgIC8qIFNlbmQgaXQgbm93ICovCisgICAgYXZhaGlfaW50ZXJmYWNlX3NlbmRfcGFja2V0KHMtPmludGVyZmFjZSwgcCk7CisgICAgYXZhaGlfZG5zX3BhY2tldF9mcmVlKHApOworfQorCitzdGF0aWMgQXZhaGlQcm9iZUpvYiogZmluZF9zY2hlZHVsZWRfam9iKEF2YWhpUHJvYmVTY2hlZHVsZXIgKnMsIEF2YWhpUmVjb3JkICpyZWNvcmQpIHsKKyAgICBBdmFoaVByb2JlSm9iICpwajsKKworICAgIGFzc2VydChzKTsKKyAgICBhc3NlcnQocmVjb3JkKTsKKworICAgIGZvciAocGogPSBzLT5qb2JzOyBwajsgcGogPSBwai0+am9ic19uZXh0KSB7CisgICAgICAgIGFzc2VydCghcGotPmRvbmUpOworCisgICAgICAgIGlmIChhdmFoaV9yZWNvcmRfZXF1YWxfbm9fdHRsKHBqLT5yZWNvcmQsIHJlY29yZCkpCisgICAgICAgICAgICByZXR1cm4gcGo7CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBBdmFoaVByb2JlSm9iKiBmaW5kX2hpc3Rvcnlfam9iKEF2YWhpUHJvYmVTY2hlZHVsZXIgKnMsIEF2YWhpUmVjb3JkICpyZWNvcmQpIHsKKyAgICBBdmFoaVByb2JlSm9iICpwajsKKworICAgIGFzc2VydChzKTsKKyAgICBhc3NlcnQocmVjb3JkKTsKKworICAgIGZvciAocGogPSBzLT5oaXN0b3J5OyBwajsgcGogPSBwai0+am9ic19uZXh0KSB7CisgICAgICAgIGFzc2VydChwai0+ZG9uZSk7CisKKyAgICAgICAgaWYgKGF2YWhpX3JlY29yZF9lcXVhbF9ub190dGwocGotPnJlY29yZCwgcmVjb3JkKSkgeworICAgICAgICAgICAgLyogQ2hlY2sgd2hldGhlciB0aGlzIGVudHJ5IGlzIG91dGRhdGVkICovCisKKyAgICAgICAgICAgIGlmIChhdmFoaV9hZ2UoJnBqLT5kZWxpdmVyeSkgPiBBVkFISV9QUk9CRV9ISVNUT1JZX01TRUMqMTAwMCkgeworICAgICAgICAgICAgICAgIC8qIGl0IGlzIG91dGRhdGVkLCBzbyBsZXQncyByZW1vdmUgaXQgKi8KKyAgICAgICAgICAgICAgICBqb2JfZnJlZShzLCBwaik7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBwajsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCitpbnQgYXZhaGlfcHJvYmVfc2NoZWR1bGVyX3Bvc3QoQXZhaGlQcm9iZVNjaGVkdWxlciAqcywgQXZhaGlSZWNvcmQgKnJlY29yZCwgaW50IGltbWVkaWF0ZWx5KSB7CisgICAgQXZhaGlQcm9iZUpvYiAqcGo7CisgICAgc3RydWN0IHRpbWV2YWwgdHY7CisKKyAgICBhc3NlcnQocyk7CisgICAgYXNzZXJ0KHJlY29yZCk7CisgICAgYXNzZXJ0KCFhdmFoaV9rZXlfaXNfcGF0dGVybihyZWNvcmQtPmtleSkpOworCisgICAgaWYgKChwaiA9IGZpbmRfaGlzdG9yeV9qb2IocywgcmVjb3JkKSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgYXZhaGlfZWxhcHNlX3RpbWUoJnR2LCBpbW1lZGlhdGVseSA/IDAgOiBBVkFISV9QUk9CRV9ERUZFUl9NU0VDLCAwKTsKKworICAgIGlmICgocGogPSBmaW5kX3NjaGVkdWxlZF9qb2IocywgcmVjb3JkKSkpIHsKKworICAgICAgICBpZiAoYXZhaGlfdGltZXZhbF9jb21wYXJlKCZ0diwgJnBqLT5kZWxpdmVyeSkgPCAwKSB7CisgICAgICAgICAgICAvKiBJZiB0aGUgbmV3IGVudHJ5IHNob3VsZCBiZSBzY2hlZHVsZWQgZWFybGllciwgdXBkYXRlIHRoZSBvbGQgZW50cnkgKi8KKyAgICAgICAgICAgIHBqLT5kZWxpdmVyeSA9IHR2OworICAgICAgICAgICAgYXZhaGlfdGltZV9ldmVudF91cGRhdGUocGotPnRpbWVfZXZlbnQsICZwai0+ZGVsaXZlcnkpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLyogQ3JlYXRlIGEgbmV3IGpvYiBhbmQgc2NoZWR1bGUgaXQgKi8KKyAgICAgICAgaWYgKCEocGogPSBqb2JfbmV3KHMsIHJlY29yZCwgMCkpKQorICAgICAgICAgICAgcmV0dXJuIDA7IC8qIE9PTSAqLworCisgICAgICAgIHBqLT5kZWxpdmVyeSA9IHR2OworICAgICAgICBwai0+dGltZV9ldmVudCA9IGF2YWhpX3RpbWVfZXZlbnRfbmV3KHMtPnRpbWVfZXZlbnRfcXVldWUsICZwai0+ZGVsaXZlcnksIGVsYXBzZV9jYWxsYmFjaywgcGopOworCisKKy8qICAgICBhdmFoaV9sb2dfZGVidWcoIkFjY2VwdGVkIG5ldyBwcm9iZSBqb2IuIik7ICovCisKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvcHJvYmUtc2NoZWQuaCBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL3Byb2JlLXNjaGVkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ3ZGU0MQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL3Byb2JlLXNjaGVkLmgKQEAgLTAsMCArMSwzNCBAQAorI2lmbmRlZiBmb29wcm9iZXNjaGVkaGZvbworI2RlZmluZSBmb29wcm9iZXNjaGVkaGZvbworCisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKK3R5cGVkZWYgc3RydWN0IEF2YWhpUHJvYmVTY2hlZHVsZXIgQXZhaGlQcm9iZVNjaGVkdWxlcjsKKworI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9hZGRyZXNzLmg+CisjaW5jbHVkZSAiaWZhY2UuaCIKKworQXZhaGlQcm9iZVNjaGVkdWxlciAqYXZhaGlfcHJvYmVfc2NoZWR1bGVyX25ldyhBdmFoaUludGVyZmFjZSAqaSk7Cit2b2lkIGF2YWhpX3Byb2JlX3NjaGVkdWxlcl9mcmVlKEF2YWhpUHJvYmVTY2hlZHVsZXIgKnMpOwordm9pZCBhdmFoaV9wcm9iZV9zY2hlZHVsZXJfY2xlYXIoQXZhaGlQcm9iZVNjaGVkdWxlciAqcyk7CisKK2ludCBhdmFoaV9wcm9iZV9zY2hlZHVsZXJfcG9zdChBdmFoaVByb2JlU2NoZWR1bGVyICpzLCBBdmFoaVJlY29yZCAqcmVjb3JkLCBpbnQgaW1tZWRpYXRlbHkpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL3B1Ymxpc2guaCBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL3B1Ymxpc2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDc5N2RlCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvcHVibGlzaC5oCkBAIC0wLDAgKzEsMTc1IEBACisjaWZuZGVmIGZvb3B1Ymxpc2hoZm9vCisjZGVmaW5lIGZvb3B1Ymxpc2hoZm9vCisKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworLyoqIFxmaWxlIGNvcmUvcHVibGlzaC5oIEZ1bmN0aW9ucyBmb3IgcHVibGlzaW5nIGxvY2FsIHNlcnZpY2VzIGFuZCBSUnMgKi8KKworLyoqIFxleGFtcGxlIGNvcmUtcHVibGlzaC1zZXJ2aWNlLmMgRXhhbXBsZSBob3cgdG8gcmVnaXN0ZXIgYSBETlMtU0QKKyAqIHNlcnZpY2UgdXNpbmcgYW4gZW1iZWRkZWQgbUROUyBzdGFjay4gSXQgYmVoYXZlcyBsaWtlIGEgbmV0d29yaworICogcHJpbnRlciByZWdpc3RlcmluZyBib3RoIGFuIElQUCBhbmQgYSBCU0QgTFBSIHNlcnZpY2UuICovCisKKy8qKiBBIGdyb3VwIG9mIGxvY2FsbHkgcmVnaXN0ZXJlZCBETlMgUlJzICovCit0eXBlZGVmIHN0cnVjdCBBdmFoaVNFbnRyeUdyb3VwIEF2YWhpU0VudHJ5R3JvdXA7CisKKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vY2RlY2wuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb3JlL2NvcmUuaD4KKworQVZBSElfQ19ERUNMX0JFR0lOCisKKy8qKiBQcm90b3R5cGUgZm9yIGNhbGxiYWNrIGZ1bmN0aW9ucyB3aGljaCBhcmUgY2FsbGVkIHdoZW5ldmVyIHRoZSBzdGF0ZSBvZiBhbiBBdmFoaVNFbnRyeUdyb3VwIG9iamVjdCBjaGFuZ2VzICovCit0eXBlZGVmIHZvaWQgKCpBdmFoaVNFbnRyeUdyb3VwQ2FsbGJhY2spIChBdmFoaVNlcnZlciAqcywgQXZhaGlTRW50cnlHcm91cCAqZywgQXZhaGlFbnRyeUdyb3VwU3RhdGUgc3RhdGUsIHZvaWQqIHVzZXJkYXRhKTsKKworLyoqIEl0ZXJhdGUgdGhyb3VnaCBhbGwgbG9jYWwgZW50cmllcyBvZiB0aGUgc2VydmVyLiAod2hlbiBnIGlzIE5VTEwpCisgKiBvciBvZiBhIHNwZWNpZmllZCBlbnRyeSBncm91cC4gQXQgdGhlIGZpcnN0IGNhbGwgc3RhdGUgc2hvdWxkIHBvaW50CisgKiB0byBhIE5VTEwgaW5pdGlhbGl6ZWQgdm9pZCBwb2ludGVyLCBUaGF0IHBvaW50ZXIgaXMgdXNlZCB0byB0cmFjaworICogdGhlIGN1cnJlbnQgaXRlcmF0aW9uLiBJdCBpcyBub3Qgc2FmZSB0byBjYWxsIGFueSBvdGhlcgorICogYXZhaGlfc2VydmVyX3h4eCgpIGZ1bmN0aW9uIGR1cmluZyB0aGUgaXRlcmF0aW9uLiBJZiB0aGUgbGFzdCBlbnRyeQorICogaGFzIGJlZW4gcmVhZCwgTlVMTCBpcyByZXR1cm5lZC4gKi8KK2NvbnN0IEF2YWhpUmVjb3JkICphdmFoaV9zZXJ2ZXJfaXRlcmF0ZShBdmFoaVNlcnZlciAqcywgQXZhaGlTRW50cnlHcm91cCAqZywgdm9pZCAqKnN0YXRlKTsKKworLyoqIENyZWF0ZSBhIG5ldyBlbnRyeSBncm91cC4gVGhlIHNwZWNpZmllZCBjYWxsYmFjayBmdW5jdGlvbiBpcworICogY2FsbGVkIHdoZW5ldmVyIHRoZSBzdGF0ZSBvZiB0aGUgZ3JvdXAgY2hhbmdlcy4gVXNlIGVudHJ5IGdyb3VwCisgKiBvYmplY3RzIHRvIGtlZXAgdHJhY2sgb2YgeW91IFJScy4gQWRkIG5ldyBSUnMgdG8gYSBncm91cCB1c2luZworICogYXZhaGlfc2VydmVyX2FkZF94eHgoKS4gTWFrZSBzdXJlIHRvIGNhbGwgYXZhaGlfc19lbnRyeV9ncm91cF9jb21taXQoKQorICogdG8gc3RhcnQgdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzIGZvciB5b3VyIFJScyAqLworQXZhaGlTRW50cnlHcm91cCAqYXZhaGlfc19lbnRyeV9ncm91cF9uZXcoQXZhaGlTZXJ2ZXIgKnMsIEF2YWhpU0VudHJ5R3JvdXBDYWxsYmFjayBjYWxsYmFjaywgdm9pZCogdXNlcmRhdGEpOworCisvKiogRnJlZSBhbiBlbnRyeSBncm91cC4gQWxsIFJScyBhc3NpZ25lZCB0byB0aGUgZ3JvdXAgYXJlIHJlbW92ZWQgZnJvbSB0aGUgc2VydmVyICovCit2b2lkIGF2YWhpX3NfZW50cnlfZ3JvdXBfZnJlZShBdmFoaVNFbnRyeUdyb3VwICpnKTsKKworLyoqIENvbW1pdCBhbiBlbnRyeSBncm91cC4gVGhpcyBzdGFydHMgdGhlIHByb2JpbmcgYW5kIHJlZ2lzdHJhdGlvbiBwcm9jZXNzIGZvciBhbGwgUlJzIGluIHRoZSBncm91cCAqLworaW50IGF2YWhpX3NfZW50cnlfZ3JvdXBfY29tbWl0KEF2YWhpU0VudHJ5R3JvdXAgKmcpOworCisvKiogUmVtb3ZlIGFsbCBlbnRyaWVzIGZyb20gdGhlIGVudHJ5IGdyb3VwIGFuZCByZXNldCB0aGUgc3RhdGUgdG8gQVZBSElfRU5UUllfR1JPVVBfVU5DT01NSVRFRC4gKi8KK3ZvaWQgYXZhaGlfc19lbnRyeV9ncm91cF9yZXNldChBdmFoaVNFbnRyeUdyb3VwICpnKTsKKworLyoqIFJldHVybiAxIGlmIHRoZSBlbnRyeSBncm91cCBpcyBlbXB0eSwgaS5lLiBoYXMgbm8gcmVjb3JkcyBhdHRhY2hlZC4gKi8KK2ludCBhdmFoaV9zX2VudHJ5X2dyb3VwX2lzX2VtcHR5KEF2YWhpU0VudHJ5R3JvdXAgKmcpOworCisvKiogUmV0dXJuIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBzcGVjaWZpZWQgZW50cnkgZ3JvdXAgKi8KK0F2YWhpRW50cnlHcm91cFN0YXRlIGF2YWhpX3NfZW50cnlfZ3JvdXBfZ2V0X3N0YXRlKEF2YWhpU0VudHJ5R3JvdXAgKmcpOworCisvKiogQ2hhbmdlIHRoZSBvcGFxdWUgdXNlciBkYXRhIHBvaW50ZXIgYXR0YWNoZWQgdG8gYW4gZW50cnkgZ3JvdXAgb2JqZWN0ICovCit2b2lkIGF2YWhpX3NfZW50cnlfZ3JvdXBfc2V0X2RhdGEoQXZhaGlTRW50cnlHcm91cCAqZywgdm9pZCogdXNlcmRhdGEpOworCisvKiogUmV0dXJuIHRoZSBvcGFxdWUgdXNlciBkYXRhIHBvaW50ZXIgY3VycmVudGx5IHNldCBmb3IgdGhlIGVudHJ5IGdyb3VwIG9iamVjdCAqLwordm9pZCogYXZhaGlfc19lbnRyeV9ncm91cF9nZXRfZGF0YShBdmFoaVNFbnRyeUdyb3VwICpnKTsKKworLyoqIEFkZCBhIG5ldyByZXNvdXJjZSByZWNvcmQgdG8gdGhlIHNlcnZlci4gUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG90aGVyd2lzZS4gKi8KK2ludCBhdmFoaV9zZXJ2ZXJfYWRkKAorICAgIEF2YWhpU2VydmVyICpzLCAgICAgICAgICAgLyoqPCBUaGUgc2VydmVyIG9iamVjdCB0byBhZGQgdGhpcyByZWNvcmQgdG8gKi8KKyAgICBBdmFoaVNFbnRyeUdyb3VwICpnLCAgICAgICAvKio8IEFuIGVudHJ5IGdyb3VwIG9iamVjdCBpZiB0aGlzIG5ldyByZWNvcmQgc2hhbGwgYmUgYXR0YWNoZWQgdG8gb25lLCBvciBOVUxMLiBJZiB5b3UgcGxhbiB0byByZW1vdmUgdGhlIHJlY29yZCBzb21ldGltZSBsYXRlciB5b3UgYSByZXF1aXJlZCB0byBwYXNzIGFuIGVudHJ5IGdyb3VwIG9iamVjdCBoZXJlLiAqLworICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsICAgLyoqPCBBIG51bWVyaWMgaW5kZXggb2YgYSBuZXR3b3JrIGludGVyZmFjZSB0byBhdHRhY2ggdGhpcyByZWNvcmQgdG8sIG9yIEFWQUhJX0lGX1VOU1BFQyB0byBhdHRhY2ggdGhpcyByZWNvcmQgdG8gYWxsIGludGVyZmFjZXMgKi8KKyAgICBBdmFoaVByb3RvY29sIHByb3RvY29sLCAgIC8qKjwgQSBwcm90b2NvbCBmYW1pbHkgdG8gYXR0YWNoIHRoaXMgcmVjb3JkIHRvLiBPbmUgb2YgdGhlIEFWQUhJX1BST1RPX3h4eCBjb25zdGFudHMuIFVzZSBBVkFISV9QUk9UT19VTlNQRUMgdG8gbWFrZSB0aGlzIHJlY29yZCBhdmFpbGFibGUgb24gYWxsIHByb3RvY29scyAod2ljaCBtZWFucyBvbiBib3RoIElQdjQgYW5kIElQdjYpLiAqLworICAgIEF2YWhpUHVibGlzaEZsYWdzIGZsYWdzLCAgICAvKio8IFNwZWNpYWwgZmxhZ3MgZm9yIHRoaXMgcmVjb3JkICovCisgICAgQXZhaGlSZWNvcmQgKnIgICAgICAgICAgICAvKio8IFRoZSByZWNvcmQgdG8gYWRkLiBUaGlzIGZ1bmN0aW9uIGluY3JlYXNlcyB0aGUgcmVmZXJlbmNlIGNvdW50ZXIgb2YgdGhpcyBvYmplY3QuICovKTsKKworLyoqIEFkZCBhbiBJUCBhZGRyZXNzIG1hcHBpbmcgdG8gdGhlIHNlcnZlci4gVGhpcyB3aWxsIGFkZCBib3RoIHRoZQorICogaG9zdC1uYW1lLXRvLWFkZHJlc3MgYW5kIHRoZSByZXZlcnNlIG1hcHBpbmcgdG8gdGhlIHNlcnZlci4gU2VlCisgKiBhdmFoaV9zZXJ2ZXJfYWRkKCkgZm9yIG1vcmUgaW5mb3JtYXRpb24uIElmIGFkZGluZyBvbmUgb2YgdGhlIFJScworICogZmFpbHMsIHRoZSBmdW5jdGlvbiByZXR1cm5zIHdpdGggYW4gZXJyb3IsIGJ1dCBpdCBpcyBub3QgZGVmaW5lZCBpZgorICogdGhlIG90aGVyIFJSIGlzIGRlbGV0ZWQgZnJvbSB0aGUgc2VydmVyIG9yIG5vdC4gVGhlcmVmb3JlLCB5b3UgaGF2ZQorICogdG8gZnJlZSB0aGUgQXZhaGlTRW50cnlHcm91cCBhbmQgY3JlYXRlIGEgbmV3IG9uZSBiZWZvcmUKKyAqIHByb2NlZWRpbmcuICovCitpbnQgYXZhaGlfc2VydmVyX2FkZF9hZGRyZXNzKAorICAgIEF2YWhpU2VydmVyICpzLAorICAgIEF2YWhpU0VudHJ5R3JvdXAgKmcsCisgICAgQXZhaGlJZkluZGV4IGludGVyZmFjZSwKKyAgICBBdmFoaVByb3RvY29sIHByb3RvY29sLAorICAgIEF2YWhpUHVibGlzaEZsYWdzIGZsYWdzLAorICAgIGNvbnN0IGNoYXIgKm5hbWUsCisgICAgQXZhaGlBZGRyZXNzICphKTsKKworLyoqIEFkZCBhbiBETlMtU0Qgc2VydmljZSB0byB0aGUgU2VydmVyLiBUaGlzIHdpbGwgYWRkIGFsbCByZXF1aXJlZAorICogUlJzIHRvIHRoZSBzZXJ2ZXIuIFNlZSBhdmFoaV9zZXJ2ZXJfYWRkKCkgZm9yIG1vcmUgaW5mb3JtYXRpb24uICBJZgorICogYWRkaW5nIG9uZSBvZiB0aGUgUlJzIGZhaWxzLCB0aGUgZnVuY3Rpb24gcmV0dXJucyB3aXRoIGFuIGVycm9yLAorICogYnV0IGl0IGlzIG5vdCBkZWZpbmVkIGlmIHRoZSBvdGhlciBSUiBpcyBkZWxldGVkIGZyb20gdGhlIHNlcnZlciBvcgorICogbm90LiBUaGVyZWZvcmUsIHlvdSBoYXZlIHRvIGZyZWUgdGhlIEF2YWhpU0VudHJ5R3JvdXAgYW5kIGNyZWF0ZSBhCisgKiBuZXcgb25lIGJlZm9yZSBwcm9jZWVkaW5nLiAqLworaW50IGF2YWhpX3NlcnZlcl9hZGRfc2VydmljZSgKKyAgICBBdmFoaVNlcnZlciAqcywKKyAgICBBdmFoaVNFbnRyeUdyb3VwICpnLAorICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsCisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICBBdmFoaVB1Ymxpc2hGbGFncyBmbGFncywKKyAgICBjb25zdCBjaGFyICpuYW1lLCAgICAgICAgIC8qKjwgU2VydmljZSBuYW1lLCBlLmcuICJMZW5uYXJ0J3MgRmlsZXMiICovCisgICAgY29uc3QgY2hhciAqdHlwZSwgICAgICAgICAvKio8IEROUy1TRCB0eXBlLCBlLmcuICJfaHR0cC5fdGNwIiAqLworICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwKKyAgICBjb25zdCBjaGFyICpob3N0LCAgICAgICAgIC8qKjwgSG9zdCBuYW1lIHdoZXJlIHRoaXMgc2VydmNpZSByZXNpZGVzLCBvciBOVUxMIGlmIG9uIHRoZSBsb2NhbCBob3N0ICovCisgICAgdWludDE2X3QgcG9ydCwgICAgICAgICAgICAgIC8qKjwgUG9ydCBudW1iZXIgb2YgdGhlIHNlcnZpY2UgKi8KKyAgICAuLi4gIC8qKjwgVGV4dCByZWNvcmRzLCB0ZXJtaW5hdGVkIGJ5IE5VTEwgKi8pIEFWQUhJX0dDQ19TRU5USU5FTDsKKworLyoqIE1vc3RseSBpZGVudGljYWwgdG8gYXZhaGlfc2VydmVyX2FkZF9zZXJ2aWNlKCksIGJ1dCB0YWtlcyBhbiBBdmFoaVN0cmluZ0xpc3Qgb2JqZWN0IGZvciB0aGUgVFhUIHJlY29yZHMuICBUaGUgQXZhaGlTdHJpbmdMaXN0IG9iamVjdCBpcyBjb3BpZWQuICovCitpbnQgYXZhaGlfc2VydmVyX2FkZF9zZXJ2aWNlX3N0cmxzdCgKKyAgICBBdmFoaVNlcnZlciAqcywKKyAgICBBdmFoaVNFbnRyeUdyb3VwICpnLAorICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsCisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICBBdmFoaVB1Ymxpc2hGbGFncyBmbGFncywKKyAgICBjb25zdCBjaGFyICpuYW1lLAorICAgIGNvbnN0IGNoYXIgKnR5cGUsCisgICAgY29uc3QgY2hhciAqZG9tYWluLAorICAgIGNvbnN0IGNoYXIgKmhvc3QsCisgICAgdWludDE2X3QgcG9ydCwKKyAgICBBdmFoaVN0cmluZ0xpc3QgKnN0cmxzdCk7CisKKy8qKiBBZGQgYSBzdWJ0eXBlIGZvciBhbiBhbHJlYWR5IGV4aXN0aW5nIHNlcnZpY2UgKi8KK2ludCBhdmFoaV9zZXJ2ZXJfYWRkX3NlcnZpY2Vfc3VidHlwZSgKKyAgICBBdmFoaVNlcnZlciAqcywKKyAgICBBdmFoaVNFbnRyeUdyb3VwICpnLAorICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsCisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICBBdmFoaVB1Ymxpc2hGbGFncyBmbGFncywKKyAgICBjb25zdCBjaGFyICpuYW1lLCAgICAgICAgIC8qKjwgU3BlY2lmeSB0aGUgbmFtZSBvZiBtYWluIHNlcnZpY2UgeW91IGFscmVhZHkgYWRkZWQgaGVyZSAqLworICAgIGNvbnN0IGNoYXIgKnR5cGUsICAgICAgICAgLyoqPCBTcGVjaWZ5IHRoZSBtYWluIHR5cGUgb2YgdGhlIHNlcnZpY2UgeW91IGFscmVhZHkgYWRkZWQgaGVyZSAqLworICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwgICAgICAgLyoqPCBTcGVjaWZ5IHRoZSBtYWluIHR5cGUgb2YgdGhlIHNlcnZpY2UgeW91IGFscmVhZHkgYWRkZWQgaGVyZSAqLworICAgIGNvbnN0IGNoYXIgKnN1YnR5cGUgICAgICAgLyoqPCBUaGUgbmV3IHN1YnR5cGUgZm9yIHRoZSBzcGVjaWZpZWQgc2VydmljZSAqLyApOworCisvKiogVXBkYXRlIHRoZSBUWFQgcmVjb3JkIGZvciBhIHNlcnZpY2Ugd2l0aCB0aGUgZGF0YSBmcm9tIHRoZSBzcGVjaWZpZWQgc3RyaW5nIGxpc3QgKi8KK2ludCBhdmFoaV9zZXJ2ZXJfdXBkYXRlX3NlcnZpY2VfdHh0X3N0cmxzdCgKKyAgICBBdmFoaVNlcnZlciAqcywKKyAgICBBdmFoaVNFbnRyeUdyb3VwICpnLAorICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsCisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICBBdmFoaVB1Ymxpc2hGbGFncyBmbGFncywKKyAgICBjb25zdCBjaGFyICpuYW1lLAorICAgIGNvbnN0IGNoYXIgKnR5cGUsCisgICAgY29uc3QgY2hhciAqZG9tYWluLAorICAgIEF2YWhpU3RyaW5nTGlzdCAqc3RybHN0KTsKKworLyoqIFVwZGF0ZSB0aGUgVFhUIHJlY29yZCBmb3IgYSBzZXJ2aWNlIHdpdGggdGhlIE5VTEwgdGVybW9uYXRlIGxpc3Qgb2Ygc3RyaW5ncyAqLworaW50IGF2YWhpX3NlcnZlcl91cGRhdGVfc2VydmljZV90eHQoCisgICAgQXZhaGlTZXJ2ZXIgKnMsCisgICAgQXZhaGlTRW50cnlHcm91cCAqZywKKyAgICBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLAorICAgIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsCisgICAgQXZhaGlQdWJsaXNoRmxhZ3MgZmxhZ3MsCisgICAgY29uc3QgY2hhciAqbmFtZSwKKyAgICBjb25zdCBjaGFyICp0eXBlLAorICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwKKyAgICAuLi4pIEFWQUhJX0dDQ19TRU5USU5FTDsKKworLyoqIENoZWNrIGlmIHRoZXJlIGlzIGEgc2VydmljZSBsb2NhbGx5IGRlZmluZWQgYW5kIHJldHVybiB0aGUgZW50cnkgZ3JvdXAgaXQgaXMgYXR0YWNoZWQgdG8uIFJldHVybnMgTlVMTCBpZiB0aGUgc2VydmljZSBpc24ndCBsb2NhbCovCitpbnQgYXZhaGlfc2VydmVyX2dldF9ncm91cF9vZl9zZXJ2aWNlKEF2YWhpU2VydmVyICpzLCBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLCBBdmFoaVByb3RvY29sIHByb3RvY29sLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp0eXBlLCBjb25zdCBjaGFyICpkb21haW4sIEF2YWhpU0VudHJ5R3JvdXAqKiByZXRfZ3JvdXApOworCitBVkFISV9DX0RFQ0xfRU5ECisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvcXVlcmllci10ZXN0LmMgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9xdWVyaWVyLXRlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWNlOTEzCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvcXVlcmllci10ZXN0LmMKQEAgLTAsMCArMSwxMjIgQEAKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vbWFsbG9jLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL3NpbXBsZS13YXRjaC5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9hbHRlcm5hdGl2ZS5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi90aW1ldmFsLmg+CisKKyNpbmNsdWRlIDxhdmFoaS1jb3JlL2NvcmUuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb3JlL2xvZy5oPgorI2luY2x1ZGUgPGF2YWhpLWNvcmUvcHVibGlzaC5oPgorI2luY2x1ZGUgPGF2YWhpLWNvcmUvbG9va3VwLmg+CisKKyNkZWZpbmUgRE9NQUlOIE5VTEwKKyNkZWZpbmUgU0VSVklDRV9UWVBFICJfaHR0cC5fdGNwIgorCitzdGF0aWMgQXZhaGlTU2VydmljZUJyb3dzZXIgKnNlcnZpY2VfYnJvd3NlcjEgPSBOVUxMLCAqc2VydmljZV9icm93c2VyMiA9IE5VTEw7CitzdGF0aWMgY29uc3QgQXZhaGlQb2xsICogcG9sbF9hcGkgPSBOVUxMOworc3RhdGljIEF2YWhpU2VydmVyICpzZXJ2ZXIgPSBOVUxMOworc3RhdGljIEF2YWhpU2ltcGxlUG9sbCAqc2ltcGxlX3BvbGw7CisKK3N0YXRpYyBjb25zdCBjaGFyICpicm93c2VyX2V2ZW50X3RvX3N0cmluZyhBdmFoaUJyb3dzZXJFdmVudCBldmVudCkgeworICAgIHN3aXRjaCAoZXZlbnQpIHsKKyAgICAgICAgY2FzZSBBVkFISV9CUk9XU0VSX05FVyA6IHJldHVybiAiTkVXIjsKKyAgICAgICAgY2FzZSBBVkFISV9CUk9XU0VSX1JFTU9WRSA6IHJldHVybiAiUkVNT1ZFIjsKKyAgICAgICAgY2FzZSBBVkFISV9CUk9XU0VSX0NBQ0hFX0VYSEFVU1RFRCA6IHJldHVybiAiQ0FDSEVfRVhIQVVTVEVEIjsKKyAgICAgICAgY2FzZSBBVkFISV9CUk9XU0VSX0FMTF9GT1JfTk9XIDogcmV0dXJuICJBTExfRk9SX05PVyI7CisgICAgICAgIGNhc2UgQVZBSElfQlJPV1NFUl9GQUlMVVJFIDogcmV0dXJuICJGQUlMVVJFIjsKKyAgICB9CisKKyAgICBhYm9ydCgpOworfQorCitzdGF0aWMgdm9pZCBzYl9jYWxsYmFjaygKKyAgICBBdmFoaVNTZXJ2aWNlQnJvd3NlciAqYiwKKyAgICBBdmFoaUlmSW5kZXggaWZhY2UsCisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICBBdmFoaUJyb3dzZXJFdmVudCBldmVudCwKKyAgICBjb25zdCBjaGFyICpuYW1lLAorICAgIGNvbnN0IGNoYXIgKnNlcnZpY2VfdHlwZSwKKyAgICBjb25zdCBjaGFyICpkb21haW4sCisgICAgQXZhaGlMb29rdXBSZXN1bHRGbGFncyBmbGFncywKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHZvaWQqIHVzZXJkYXRhKSB7CisgICAgYXZhaGlfbG9nX2RlYnVnKCJTQiVpOiAoJWkuJXMpIDwlcz4gYXMgPCVzPiBpbiA8JXM+IFslc10gY2FjaGVkPSVpIiwgYiA9PSBzZXJ2aWNlX2Jyb3dzZXIxID8gMSA6IDIsIGlmYWNlLCBhdmFoaV9wcm90b190b19zdHJpbmcocHJvdG9jb2wpLCBuYW1lLCBzZXJ2aWNlX3R5cGUsIGRvbWFpbiwgYnJvd3Nlcl9ldmVudF90b19zdHJpbmcoZXZlbnQpLCAhIShmbGFncyAmIEFWQUhJX0xPT0tVUF9SRVNVTFRfQ0FDSEVEKSk7Cit9CisKK3N0YXRpYyB2b2lkIGNyZWF0ZV9zZWNvbmRfc2VydmljZV9icm93c2VyKEF2YWhpVGltZW91dCAqdGltZW91dCwgQVZBSElfR0NDX1VOVVNFRCB2b2lkKiB1c2VyZGF0YSkgeworCisgICAgc2VydmljZV9icm93c2VyMiA9IGF2YWhpX3Nfc2VydmljZV9icm93c2VyX25ldyhzZXJ2ZXIsIEFWQUhJX0lGX1VOU1BFQywgQVZBSElfUFJPVE9fVU5TUEVDLCBTRVJWSUNFX1RZUEUsIERPTUFJTiwgMCwgc2JfY2FsbGJhY2ssIE5VTEwpOworICAgIGFzc2VydChzZXJ2aWNlX2Jyb3dzZXIyKTsKKworICAgIHBvbGxfYXBpLT50aW1lb3V0X2ZyZWUodGltZW91dCk7Cit9CisKK3N0YXRpYyB2b2lkIHF1aXQoQVZBSElfR0NDX1VOVVNFRCBBdmFoaVRpbWVvdXQgKnRpbWVvdXQsIEFWQUhJX0dDQ19VTlVTRUQgdm9pZCAqdXNlcmRhdGEpIHsKKyAgICBhdmFoaV9zaW1wbGVfcG9sbF9xdWl0KHNpbXBsZV9wb2xsKTsKK30KKworaW50IG1haW4oQVZBSElfR0NDX1VOVVNFRCBpbnQgYXJnYywgQVZBSElfR0NDX1VOVVNFRCBjaGFyICphcmd2W10pIHsKKyAgICBzdHJ1Y3QgdGltZXZhbCB0djsKKyAgICBBdmFoaVNlcnZlckNvbmZpZyBjb25maWc7CisKKyAgICBzaW1wbGVfcG9sbCA9IGF2YWhpX3NpbXBsZV9wb2xsX25ldygpOworICAgIGFzc2VydChzaW1wbGVfcG9sbCk7CisKKyAgICBwb2xsX2FwaSA9IGF2YWhpX3NpbXBsZV9wb2xsX2dldChzaW1wbGVfcG9sbCk7CisgICAgYXNzZXJ0KHBvbGxfYXBpKTsKKworICAgIGF2YWhpX3NlcnZlcl9jb25maWdfaW5pdCgmY29uZmlnKTsKKyAgICBjb25maWcucHVibGlzaF9oaW5mbyA9IDA7CisgICAgY29uZmlnLnB1Ymxpc2hfYWRkcmVzc2VzID0gMDsKKyAgICBjb25maWcucHVibGlzaF93b3Jrc3RhdGlvbiA9IDA7CisgICAgY29uZmlnLnB1Ymxpc2hfZG9tYWluID0gMDsKKworICAgIGF2YWhpX2FkZHJlc3NfcGFyc2UoIjE5Mi4xNjguNTAuMSIsIEFWQUhJX1BST1RPX1VOU1BFQywgJmNvbmZpZy53aWRlX2FyZWFfc2VydmVyc1swXSk7CisgICAgY29uZmlnLm5fd2lkZV9hcmVhX3NlcnZlcnMgPSAxOworICAgIGNvbmZpZy5lbmFibGVfd2lkZV9hcmVhID0gMTsKKworICAgIHNlcnZlciA9IGF2YWhpX3NlcnZlcl9uZXcocG9sbF9hcGksICZjb25maWcsIE5VTEwsIE5VTEwsIE5VTEwpOworICAgIGFzc2VydChzZXJ2ZXIpOworICAgIGF2YWhpX3NlcnZlcl9jb25maWdfZnJlZSgmY29uZmlnKTsKKworICAgIHNlcnZpY2VfYnJvd3NlcjEgPSBhdmFoaV9zX3NlcnZpY2VfYnJvd3Nlcl9uZXcoc2VydmVyLCBBVkFISV9JRl9VTlNQRUMsIEFWQUhJX1BST1RPX1VOU1BFQywgU0VSVklDRV9UWVBFLCBET01BSU4sIDAsIHNiX2NhbGxiYWNrLCBOVUxMKTsKKyAgICBhc3NlcnQoc2VydmljZV9icm93c2VyMSk7CisKKyAgICBwb2xsX2FwaS0+dGltZW91dF9uZXcocG9sbF9hcGksIGF2YWhpX2VsYXBzZV90aW1lKCZ0diwgMTAwMDAsIDApLCBjcmVhdGVfc2Vjb25kX3NlcnZpY2VfYnJvd3NlciwgTlVMTCk7CisKKyAgICBwb2xsX2FwaS0+dGltZW91dF9uZXcocG9sbF9hcGksIGF2YWhpX2VsYXBzZV90aW1lKCZ0diwgNjAwMDAsIDApLCBxdWl0LCBOVUxMKTsKKworCisgICAgZm9yICg7OykKKyAgICAgICAgaWYgKGF2YWhpX3NpbXBsZV9wb2xsX2l0ZXJhdGUoc2ltcGxlX3BvbGwsIC0xKSAhPSAwKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICBhdmFoaV9zZXJ2ZXJfZnJlZShzZXJ2ZXIpOworICAgIGF2YWhpX3NpbXBsZV9wb2xsX2ZyZWUoc2ltcGxlX3BvbGwpOworCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9xdWVyaWVyLmMgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9xdWVyaWVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDlkYzFmYgotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL3F1ZXJpZXIuYwpAQCAtMCwwICsxLDI2OCBAQAorLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi90aW1ldmFsLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL21hbGxvYy5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9lcnJvci5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9kb21haW4uaD4KKworI2luY2x1ZGUgInF1ZXJpZXIuaCIKKyNpbmNsdWRlICJsb2cuaCIKKworc3RydWN0IEF2YWhpUXVlcmllciB7CisgICAgQXZhaGlJbnRlcmZhY2UgKmludGVyZmFjZTsKKworICAgIEF2YWhpS2V5ICprZXk7CisgICAgaW50IG5fdXNlZDsKKworICAgIHVuc2lnbmVkIHNlY19kZWxheTsKKworICAgIEF2YWhpVGltZUV2ZW50ICp0aW1lX2V2ZW50OworCisgICAgc3RydWN0IHRpbWV2YWwgY3JlYXRpb25fdGltZTsKKworICAgIHVuc2lnbmVkIHBvc3RfaWQ7CisgICAgaW50IHBvc3RfaWRfdmFsaWQ7CisKKyAgICBBVkFISV9MTElTVF9GSUVMRFMoQXZhaGlRdWVyaWVyLCBxdWVyaWVycyk7Cit9OworCit2b2lkIGF2YWhpX3F1ZXJpZXJfZnJlZShBdmFoaVF1ZXJpZXIgKnEpIHsKKyAgICBhc3NlcnQocSk7CisKKyAgICBBVkFISV9MTElTVF9SRU1PVkUoQXZhaGlRdWVyaWVyLCBxdWVyaWVycywgcS0+aW50ZXJmYWNlLT5xdWVyaWVycywgcSk7CisgICAgYXZhaGlfaGFzaG1hcF9yZW1vdmUocS0+aW50ZXJmYWNlLT5xdWVyaWVyc19ieV9rZXksIHEtPmtleSk7CisKKyAgICBhdmFoaV9rZXlfdW5yZWYocS0+a2V5KTsKKyAgICBhdmFoaV90aW1lX2V2ZW50X2ZyZWUocS0+dGltZV9ldmVudCk7CisKKyAgICBhdmFoaV9mcmVlKHEpOworfQorCitzdGF0aWMgdm9pZCBxdWVyaWVyX2VsYXBzZV9jYWxsYmFjayhBVkFISV9HQ0NfVU5VU0VEIEF2YWhpVGltZUV2ZW50ICplLCB2b2lkICp1c2VyZGF0YSkgeworICAgIEF2YWhpUXVlcmllciAqcSA9IHVzZXJkYXRhOworICAgIHN0cnVjdCB0aW1ldmFsIHR2OworCisgICAgYXNzZXJ0KHEpOworCisgICAgaWYgKHEtPm5fdXNlZCA8PSAwKSB7CisKKyAgICAgICAgLyogV2UgYXJlIG5vdCByZWZlcmVuY2VkIGJ5IGFueW9uZSBhbnltb3JlLCBzbyBsZXQncyBmcmVlCisgICAgICAgICAqIG91cnNlbHZlcy4gV2Ugc2hvdWxkIG5vdCBzZW5kIG91dCBhbnkgZnVydGhlciBxdWVyaWVzIGZyb20KKyAgICAgICAgICogdGhpcyBxdWVyaWVyIG9iamVjdCBhbnltb3JlLiAqLworCisgICAgICAgIGF2YWhpX3F1ZXJpZXJfZnJlZShxKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdmFoaV9pbnRlcmZhY2VfcG9zdF9xdWVyeShxLT5pbnRlcmZhY2UsIHEtPmtleSwgMCwgJnEtPnBvc3RfaWQpKSB7CisKKyAgICAgICAgLyogVGhlIHF1ZXVlIGFjY2VwdGVkIG91ciBxdWVyeS4gV2Ugc3RvcmUgdGhlIHF1ZXJ5IGlkIGhlcmUsCisgICAgICAgICAqIHRoYXQgYWxsb3dzIHVzIHRvIGRyb3AgdGhlIHF1ZXJ5IGF0IGEgbGF0ZXIgcG9pbnQgaWYgdGhlCisgICAgICAgICAqIHF1ZXJ5IGlzIHZlcnkgc2hvcnQtbGl2ZWQuICovCisKKyAgICAgICAgcS0+cG9zdF9pZF92YWxpZCA9IDE7CisgICAgfQorCisgICAgcS0+c2VjX2RlbGF5ICo9IDI7CisKKyAgICBpZiAocS0+c2VjX2RlbGF5ID49IDYwKjYwKSAgLyogMWggKi8KKyAgICAgICAgcS0+c2VjX2RlbGF5ID0gNjAqNjA7CisKKyAgICBhdmFoaV9lbGFwc2VfdGltZSgmdHYsIHEtPnNlY19kZWxheSoxMDAwLCAwKTsKKyAgICBhdmFoaV90aW1lX2V2ZW50X3VwZGF0ZShxLT50aW1lX2V2ZW50LCAmdHYpOworfQorCit2b2lkIGF2YWhpX3F1ZXJpZXJfYWRkKEF2YWhpSW50ZXJmYWNlICppLCBBdmFoaUtleSAqa2V5LCBzdHJ1Y3QgdGltZXZhbCAqcmV0X2N0aW1lKSB7CisgICAgQXZhaGlRdWVyaWVyICpxOworICAgIHN0cnVjdCB0aW1ldmFsIHR2OworCisgICAgYXNzZXJ0KGkpOworICAgIGFzc2VydChrZXkpOworCisgICAgaWYgKChxID0gYXZhaGlfaGFzaG1hcF9sb29rdXAoaS0+cXVlcmllcnNfYnlfa2V5LCBrZXkpKSkgeworCisgICAgICAgIC8qIFNvbWVvbmUgaXMgYWxyZWFkeSBicm93c2luZyBmb3IgcmVjb3JkcyBvZiB0aGlzIFJSIGtleSAqLworICAgICAgICBxLT5uX3VzZWQrKzsKKworICAgICAgICAvKiBSZXR1cm4gdGhlIGNyZWF0aW9uIHRpbWUuIFRoaXMgaXMgdXNlZCBmb3IgZ2VuZXJhdGluZyB0aGUKKyAgICAgICAgICogQUxMX0ZPUl9OT1cgZXZlbnQgb25lIHNlY29uZCBhZnRlciB0aGUgcXVlcmllciB3YXMKKyAgICAgICAgICogaW5pdGlhbGx5IGNyZWF0ZWQuICovCisgICAgICAgIGlmIChyZXRfY3RpbWUpCisgICAgICAgICAgICAqcmV0X2N0aW1lID0gcS0+Y3JlYXRpb25fdGltZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qIE5vIG9uZSBpcyBicm93c2luZyBmb3IgdGhpcyBSUiBrZXksIHNvIHdlIGFkZCBhIG5ldyBxdWVyaWVyICovCisgICAgaWYgKCEocSA9IGF2YWhpX25ldyhBdmFoaVF1ZXJpZXIsIDEpKSkKKyAgICAgICAgcmV0dXJuOyAvKiBPT00gKi8KKworICAgIHEtPmtleSA9IGF2YWhpX2tleV9yZWYoa2V5KTsKKyAgICBxLT5pbnRlcmZhY2UgPSBpOworICAgIHEtPm5fdXNlZCA9IDE7CisgICAgcS0+c2VjX2RlbGF5ID0gMTsKKyAgICBxLT5wb3N0X2lkX3ZhbGlkID0gMDsKKyAgICBnZXR0aW1lb2ZkYXkoJnEtPmNyZWF0aW9uX3RpbWUsIE5VTEwpOworCisgICAgLyogRG8gdGhlIGluaXRpYWwgcXVlcnkgKi8KKyAgICBpZiAoYXZhaGlfaW50ZXJmYWNlX3Bvc3RfcXVlcnkoaSwga2V5LCAwLCAmcS0+cG9zdF9pZCkpCisgICAgICAgIHEtPnBvc3RfaWRfdmFsaWQgPSAxOworCisgICAgLyogU2NoZWR1bGUgbmV4dCBxdWVyaWVzICovCisgICAgcS0+dGltZV9ldmVudCA9IGF2YWhpX3RpbWVfZXZlbnRfbmV3KGktPm1vbml0b3ItPnNlcnZlci0+dGltZV9ldmVudF9xdWV1ZSwgYXZhaGlfZWxhcHNlX3RpbWUoJnR2LCBxLT5zZWNfZGVsYXkqMTAwMCwgMCksIHF1ZXJpZXJfZWxhcHNlX2NhbGxiYWNrLCBxKTsKKworICAgIEFWQUhJX0xMSVNUX1BSRVBFTkQoQXZhaGlRdWVyaWVyLCBxdWVyaWVycywgaS0+cXVlcmllcnMsIHEpOworICAgIGF2YWhpX2hhc2htYXBfaW5zZXJ0KGktPnF1ZXJpZXJzX2J5X2tleSwgcS0+a2V5LCBxKTsKKworICAgIC8qIFJldHVybiB0aGUgY3JlYXRpb24gdGltZS4gVGhpcyBpcyB1c2VkIGZvciBnZW5lcmF0aW5nIHRoZQorICAgICAqIEFMTF9GT1JfTk9XIGV2ZW50IG9uZSBzZWNvbmQgYWZ0ZXIgdGhlIHF1ZXJpZXIgd2FzIGluaXRpYWxseQorICAgICAqIGNyZWF0ZWQuICovCisgICAgaWYgKHJldF9jdGltZSkKKyAgICAgICAgKnJldF9jdGltZSA9IHEtPmNyZWF0aW9uX3RpbWU7Cit9CisKK3ZvaWQgYXZhaGlfcXVlcmllcl9yZW1vdmUoQXZhaGlJbnRlcmZhY2UgKmksIEF2YWhpS2V5ICprZXkpIHsKKyAgICBBdmFoaVF1ZXJpZXIgKnE7CisKKyAgICAvKiBUaGVyZSB3YXMgbm8gcXVlcmllciBmb3IgdGhpcyBSUiBrZXksIG9yIGl0IHdhc24ndCByZWZlcmVuY2VkCisgICAgICogYnkgYW55b25lLiAqLworICAgIGlmICghKHEgPSBhdmFoaV9oYXNobWFwX2xvb2t1cChpLT5xdWVyaWVyc19ieV9rZXksIGtleSkpIHx8IHEtPm5fdXNlZCA8PSAwKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoKC0tcS0+bl91c2VkKSA8PSAwKSB7CisKKyAgICAgICAgLyogTm9ib2R5IHJlZmVyZW5jZXMgdXMgYW55bW9yZS4gKi8KKworICAgICAgICBpZiAocS0+cG9zdF9pZF92YWxpZCAmJiBhdmFoaV9pbnRlcmZhY2Vfd2l0aHJhd19xdWVyeShpLCBxLT5wb3N0X2lkKSkgeworCisgICAgICAgICAgICAvKiBXZSBzdWNjZWVkZWQgaW4gd2l0aGRyYXdpbmcgb3VyIHF1ZXJ5IGZyb20gdGhlIHF1ZXVlLAorICAgICAgICAgICAgICogc28gbGV0J3MgZHJvcCBkZWFkLiAqLworCisgICAgICAgICAgICBhdmFoaV9xdWVyaWVyX2ZyZWUocSk7CisgICAgICAgIH0KKworICAgICAgICAvKiBJZiB3ZSBmYWlsZWQgdG8gd2l0aGRyYXcgb3VyIHF1ZXJ5IGZyb20gdGhlIHF1ZXVlLCB3ZSBzdGF5CisgICAgICAgICAqIGFsaXZlLCBpbiBjYXNlIHNvbWVvbmUgZWxzZSBtaWdodCByZWN5Y2xlIG91ciBxdWVyaWVyIGF0IGEKKyAgICAgICAgICogbGF0ZXIgcG9pbnQuIFdlIGFyZSBmcmVlZCBhdCBvdXIgbmV4dCBleHBpcnksIGluIGNhc2UKKyAgICAgICAgICogbm9ib2R5IHJlY3ljbGVkIHVzLiAqLworICAgIH0KK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX3F1ZXJpZXJfY2FsbGJhY2soQXZhaGlJbnRlcmZhY2VNb25pdG9yICptLCBBdmFoaUludGVyZmFjZSAqaSwgdm9pZCogdXNlcmRhdGEpIHsKKyAgICBhc3NlcnQobSk7CisgICAgYXNzZXJ0KGkpOworICAgIGFzc2VydCh1c2VyZGF0YSk7CisKKyAgICBpZiAoaS0+YW5ub3VuY2luZykKKyAgICAgICAgYXZhaGlfcXVlcmllcl9yZW1vdmUoaSwgKEF2YWhpS2V5KikgdXNlcmRhdGEpOworfQorCit2b2lkIGF2YWhpX3F1ZXJpZXJfcmVtb3ZlX2Zvcl9hbGwoQXZhaGlTZXJ2ZXIgKnMsIEF2YWhpSWZJbmRleCBpZHgsIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsIEF2YWhpS2V5ICprZXkpIHsKKyAgICBhc3NlcnQocyk7CisgICAgYXNzZXJ0KGtleSk7CisKKyAgICBhdmFoaV9pbnRlcmZhY2VfbW9uaXRvcl93YWxrKHMtPm1vbml0b3IsIGlkeCwgcHJvdG9jb2wsIHJlbW92ZV9xdWVyaWVyX2NhbGxiYWNrLCBrZXkpOworfQorCitzdHJ1Y3QgY2JkYXRhIHsKKyAgICBBdmFoaUtleSAqa2V5OworICAgIHN0cnVjdCB0aW1ldmFsICpyZXRfY3RpbWU7Cit9OworCitzdGF0aWMgdm9pZCBhZGRfcXVlcmllcl9jYWxsYmFjayhBdmFoaUludGVyZmFjZU1vbml0b3IgKm0sIEF2YWhpSW50ZXJmYWNlICppLCB2b2lkKiB1c2VyZGF0YSkgeworICAgIHN0cnVjdCBjYmRhdGEgKmNiZGF0YSA9IHVzZXJkYXRhOworCisgICAgYXNzZXJ0KG0pOworICAgIGFzc2VydChpKTsKKyAgICBhc3NlcnQoY2JkYXRhKTsKKworICAgIGlmIChpLT5hbm5vdW5jaW5nKSB7CisgICAgICAgIHN0cnVjdCB0aW1ldmFsIHR2OworICAgICAgICBhdmFoaV9xdWVyaWVyX2FkZChpLCBjYmRhdGEtPmtleSwgJnR2KTsKKworICAgICAgICBpZiAoY2JkYXRhLT5yZXRfY3RpbWUgJiYgYXZhaGlfdGltZXZhbF9jb21wYXJlKCZ0diwgY2JkYXRhLT5yZXRfY3RpbWUpID4gMCkKKyAgICAgICAgICAgICpjYmRhdGEtPnJldF9jdGltZSA9IHR2OworICAgIH0KK30KKwordm9pZCBhdmFoaV9xdWVyaWVyX2FkZF9mb3JfYWxsKEF2YWhpU2VydmVyICpzLCBBdmFoaUlmSW5kZXggaWR4LCBBdmFoaVByb3RvY29sIHByb3RvY29sLCBBdmFoaUtleSAqa2V5LCBzdHJ1Y3QgdGltZXZhbCAqcmV0X2N0aW1lKSB7CisgICAgc3RydWN0IGNiZGF0YSBjYmRhdGE7CisKKyAgICBhc3NlcnQocyk7CisgICAgYXNzZXJ0KGtleSk7CisKKyAgICBjYmRhdGEua2V5ID0ga2V5OworICAgIGNiZGF0YS5yZXRfY3RpbWUgPSByZXRfY3RpbWU7CisKKyAgICBpZiAocmV0X2N0aW1lKQorICAgICAgICByZXRfY3RpbWUtPnR2X3NlYyA9IHJldF9jdGltZS0+dHZfdXNlYyA9IDA7CisKKyAgICBhdmFoaV9pbnRlcmZhY2VfbW9uaXRvcl93YWxrKHMtPm1vbml0b3IsIGlkeCwgcHJvdG9jb2wsIGFkZF9xdWVyaWVyX2NhbGxiYWNrLCAmY2JkYXRhKTsKK30KKworaW50IGF2YWhpX3F1ZXJpZXJfc2hhbGxfcmVmcmVzaF9jYWNoZShBdmFoaUludGVyZmFjZSAqaSwgQXZhaGlLZXkgKmtleSkgeworICAgIEF2YWhpUXVlcmllciAqcTsKKworICAgIGFzc2VydChpKTsKKyAgICBhc3NlcnQoa2V5KTsKKworICAgIC8qIENhbGxlZCBieSB0aGUgY2FjaGUgbWFpbnRhaW5lciAqLworCisgICAgaWYgKCEocSA9IGF2YWhpX2hhc2htYXBfbG9va3VwKGktPnF1ZXJpZXJzX2J5X2tleSwga2V5KSkpCisgICAgICAgIC8qIFRoaXMga2V5IGlzIGN1cnJlbnRseSBub3Qgc3Vic2NyaWJlZCBhdCBhbGwsIHNvIG5vIGNhY2hlCisgICAgICAgICAqIHJlZnJlc2ggaXMgbmVlZGVkICovCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKHEtPm5fdXNlZCA8PSAwKSB7CisKKyAgICAgICAgLyogSWYgdGhpcyBpcyBhbiBlbnRyeSBub2JvZHkgcmVmZXJlbmNlcyByaWdodCBub3csIGRvbid0CisgICAgICAgICAqIGNvbnNpZGVyIGl0ICJleGlzdGluZyIuICovCisKKyAgICAgICAgLyogUmVtb3ZlIHRoaXMgcXVlcmllciBzaW5jZSBpdCBpcyByZWZlcmVuY2VkIGJ5IG5vYm9keQorICAgICAgICAgKiBhbmQgdGhlIGNhY2hlZCBkYXRhIHdpbGwgc29vbiBiZSBvdXQgb2YgZGF0ZSAqLworICAgICAgICBhdmFoaV9xdWVyaWVyX2ZyZWUocSk7CisKKyAgICAgICAgLyogVGVsbCB0aGUgY2FjaGUgdGhhdCBubyByZWZyZXNoIGlzIG5lZWRlZCAqLworICAgICAgICByZXR1cm4gMDsKKworICAgIH0gZWxzZSB7CisgICAgICAgIHN0cnVjdCB0aW1ldmFsIHR2OworCisgICAgICAgIC8qIFdlIGNhbiBkZWZlciBvdXIgcXVlcnkgYSBsaXR0bGUsIHNpbmNlIHRoZSBjYWNoZSB3aWxsIG5vdworICAgICAgICAgKiBpc3N1ZSBhIHJlZnJlc2ggcXVlcnkgYW55d2F5LiAqLworICAgICAgICBhdmFoaV9lbGFwc2VfdGltZSgmdHYsIHEtPnNlY19kZWxheSoxMDAwLCAwKTsKKyAgICAgICAgYXZhaGlfdGltZV9ldmVudF91cGRhdGUocS0+dGltZV9ldmVudCwgJnR2KTsKKworICAgICAgICAvKiBUZWxsIHRoZSBjYWNoZSB0aGF0IGEgcmVmcmVzaCBzaG91bGQgYmUgaXNzdWVkICovCisgICAgICAgIHJldHVybiAxOworICAgIH0KK30KKwordm9pZCBhdmFoaV9xdWVyaWVyX2ZyZWVfYWxsKEF2YWhpSW50ZXJmYWNlICppKSB7CisgICAgYXNzZXJ0KGkpOworCisgICAgd2hpbGUgKGktPnF1ZXJpZXJzKQorICAgICAgICBhdmFoaV9xdWVyaWVyX2ZyZWUoaS0+cXVlcmllcnMpOworfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvcXVlcmllci5oIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvcXVlcmllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMzJhM2IKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9xdWVyaWVyLmgKQEAgLTAsMCArMSw0OCBAQAorI2lmbmRlZiBmb29xdWVyaWVyaGZvbworI2RlZmluZSBmb29xdWVyaWVyaGZvbworCisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKK3R5cGVkZWYgc3RydWN0IEF2YWhpUXVlcmllciBBdmFoaVF1ZXJpZXI7CisKKyNpbmNsdWRlICJpZmFjZS5oIgorCisvKiogQWRkIHF1ZXJpZXIgZm9yIHRoZSBzcGVjaWZpZWQga2V5IHRvIHRoZSBzcGVjaWZpZWQgaW50ZXJmYWNlICovCit2b2lkIGF2YWhpX3F1ZXJpZXJfYWRkKEF2YWhpSW50ZXJmYWNlICppLCBBdmFoaUtleSAqa2V5LCBzdHJ1Y3QgdGltZXZhbCAqcmV0X2N0aW1lKTsKKworLyoqIFJlbW92ZSBhIHF1ZXJpZXIgZm9yIHRoZSBzcGVjaWZpZWQga2V5IGZyb20gdGhlIHNwZWNpZmllZCBpbnRlcmZhY2UgKi8KK3ZvaWQgYXZhaGlfcXVlcmllcl9yZW1vdmUoQXZhaGlJbnRlcmZhY2UgKmksIEF2YWhpS2V5ICprZXkpOworCisvKiogQWRkIGEgcXVlcmllciBmb3IgdGhlIHNwZWNpZmllZCBrZXkgb24gYWxsIGludGVyZmFjZXMgdGhhdCBtYWNoICovCit2b2lkIGF2YWhpX3F1ZXJpZXJfYWRkX2Zvcl9hbGwoQXZhaGlTZXJ2ZXIgKnMsIEF2YWhpSWZJbmRleCBpZHgsIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsIEF2YWhpS2V5ICprZXksIHN0cnVjdCB0aW1ldmFsICpyZXRfY3RpbWUpOworCisvKiogUmVtb3ZlIGEgcXVlcmllciBmb3IgdGhlIHNwZWNpZmllZCBrZXkgb24gYWxsIGludGVyZmFjZXMgdGhhdCBtYWNoICovCit2b2lkIGF2YWhpX3F1ZXJpZXJfcmVtb3ZlX2Zvcl9hbGwoQXZhaGlTZXJ2ZXIgKnMsIEF2YWhpSWZJbmRleCBpZHgsIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsIEF2YWhpS2V5ICprZXkpOworCisvKiogRnJlZSBhbGwgcXVlcmllcnMgKi8KK3ZvaWQgYXZhaGlfcXVlcmllcl9mcmVlKEF2YWhpUXVlcmllciAqcSk7CisKKy8qKiBGcmVlIGFsbCBxdWVyaWVycyBvbiB0aGUgc3BlY2lmaWVkIGludGVyZmFjZSAqLwordm9pZCBhdmFoaV9xdWVyaWVyX2ZyZWVfYWxsKEF2YWhpSW50ZXJmYWNlICppKTsKKworLyoqIFJldHVybiAxIGlmIHRoZXJlIGlzIGEgcXVlcmllciBmb3IgdGhlIHNwZWNpZmllZCBrZXkgb24gdGhlIHNwZWNpZmllZCBpbnRlcmZhY2UgKi8KK2ludCBhdmFoaV9xdWVyaWVyX3NoYWxsX3JlZnJlc2hfY2FjaGUoQXZhaGlJbnRlcmZhY2UgKmksIEF2YWhpS2V5ICprZXkpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL3F1ZXJ5LXNjaGVkLmMgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9xdWVyeS1zY2hlZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmODMzZjkKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9xdWVyeS1zY2hlZC5jCkBAIC0wLDAgKzEsNDUwIEBACisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL3RpbWV2YWwuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vbWFsbG9jLmg+CisKKyNpbmNsdWRlICJxdWVyeS1zY2hlZC5oIgorI2luY2x1ZGUgImxvZy5oIgorCisjZGVmaW5lIEFWQUhJX1FVRVJZX0hJU1RPUllfTVNFQyAxMDAKKyNkZWZpbmUgQVZBSElfUVVFUllfREVGRVJfTVNFQyAxMDAKKwordHlwZWRlZiBzdHJ1Y3QgQXZhaGlRdWVyeUpvYiBBdmFoaVF1ZXJ5Sm9iOwordHlwZWRlZiBzdHJ1Y3QgQXZhaGlLbm93bkFuc3dlciBBdmFoaUtub3duQW5zd2VyOworCitzdHJ1Y3QgQXZhaGlRdWVyeUpvYiB7CisgICAgdW5zaWduZWQgaWQ7CisgICAgaW50IG5fcG9zdGVkOworCisgICAgQXZhaGlRdWVyeVNjaGVkdWxlciAqc2NoZWR1bGVyOworICAgIEF2YWhpVGltZUV2ZW50ICp0aW1lX2V2ZW50OworCisgICAgaW50IGRvbmU7CisgICAgc3RydWN0IHRpbWV2YWwgZGVsaXZlcnk7CisKKyAgICBBdmFoaUtleSAqa2V5OworCisgICAgLyogSm9icyBhcmUgc3RvcmVkIGluIGEgc2ltcGxlIGxpbmtlZCBsaXN0LiBJdCBtaWdodCB0dXJuIG91dCBpbgorICAgICAqIHRoZSBmdXR1cmUgdGhhdCB0aGlzIGxpc3QgZ3Jvd3MgdG9vIGxvbmcgYW5kIHdlIG11c3Qgc3dpdGNoIHRvCisgICAgICogc29tZSBvdGhlciBraW5kIG9mIGRhdGEgc3RydWN0dXJlLiBUaGlzIG5lZWRzIGZ1cnRoZXIKKyAgICAgKiBpbnZlc3RpZ2F0aW9uLiBJIGV4cGVjdCB0aGUgbGlzdCB0byBiZSB2ZXJ5IHNob3J0ICg8IDIwCisgICAgICogZW50cmllcykgbW9zdCBvZiB0aGUgdGltZSwgYnV0IHRoaXMgbWlnaHQgYmUgYSB3cm9uZworICAgICAqIGFzc3VtcHRpb24sIGVzcGVjaWFsbHkgb24gc2V0dXBzIHdoZXJlIHRyYWZmaWMgcmVmbGVjdGlvbiBpcworICAgICAqIGludm9sdmVkLiAqLworCisgICAgQVZBSElfTExJU1RfRklFTERTKEF2YWhpUXVlcnlKb2IsIGpvYnMpOworfTsKKworc3RydWN0IEF2YWhpS25vd25BbnN3ZXIgeworICAgIEF2YWhpUXVlcnlTY2hlZHVsZXIgKnNjaGVkdWxlcjsKKyAgICBBdmFoaVJlY29yZCAqcmVjb3JkOworCisgICAgQVZBSElfTExJU1RfRklFTERTKEF2YWhpS25vd25BbnN3ZXIsIGtub3duX2Fuc3dlcik7Cit9OworCitzdHJ1Y3QgQXZhaGlRdWVyeVNjaGVkdWxlciB7CisgICAgQXZhaGlJbnRlcmZhY2UgKmludGVyZmFjZTsKKyAgICBBdmFoaVRpbWVFdmVudFF1ZXVlICp0aW1lX2V2ZW50X3F1ZXVlOworCisgICAgdW5zaWduZWQgbmV4dF9pZDsKKworICAgIEFWQUhJX0xMSVNUX0hFQUQoQXZhaGlRdWVyeUpvYiwgam9icyk7CisgICAgQVZBSElfTExJU1RfSEVBRChBdmFoaVF1ZXJ5Sm9iLCBoaXN0b3J5KTsKKyAgICBBVkFISV9MTElTVF9IRUFEKEF2YWhpS25vd25BbnN3ZXIsIGtub3duX2Fuc3dlcnMpOworfTsKKworc3RhdGljIEF2YWhpUXVlcnlKb2IqIGpvYl9uZXcoQXZhaGlRdWVyeVNjaGVkdWxlciAqcywgQXZhaGlLZXkgKmtleSwgaW50IGRvbmUpIHsKKyAgICBBdmFoaVF1ZXJ5Sm9iICpxajsKKworICAgIGFzc2VydChzKTsKKyAgICBhc3NlcnQoa2V5KTsKKworICAgIGlmICghKHFqID0gYXZhaGlfbmV3KEF2YWhpUXVlcnlKb2IsIDEpKSkgeworICAgICAgICBhdmFoaV9sb2dfZXJyb3IoX19GSUxFX18iOiBPdXQgb2YgbWVtb3J5Iik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHFqLT5zY2hlZHVsZXIgPSBzOworICAgIHFqLT5rZXkgPSBhdmFoaV9rZXlfcmVmKGtleSk7CisgICAgcWotPnRpbWVfZXZlbnQgPSBOVUxMOworICAgIHFqLT5uX3Bvc3RlZCA9IDE7CisgICAgcWotPmlkID0gcy0+bmV4dF9pZCsrOworCisgICAgaWYgKChxai0+ZG9uZSA9IGRvbmUpKQorICAgICAgICBBVkFISV9MTElTVF9QUkVQRU5EKEF2YWhpUXVlcnlKb2IsIGpvYnMsIHMtPmhpc3RvcnksIHFqKTsKKyAgICBlbHNlCisgICAgICAgIEFWQUhJX0xMSVNUX1BSRVBFTkQoQXZhaGlRdWVyeUpvYiwgam9icywgcy0+am9icywgcWopOworCisgICAgcmV0dXJuIHFqOworfQorCitzdGF0aWMgdm9pZCBqb2JfZnJlZShBdmFoaVF1ZXJ5U2NoZWR1bGVyICpzLCBBdmFoaVF1ZXJ5Sm9iICpxaikgeworICAgIGFzc2VydChzKTsKKyAgICBhc3NlcnQocWopOworCisgICAgaWYgKHFqLT50aW1lX2V2ZW50KQorICAgICAgICBhdmFoaV90aW1lX2V2ZW50X2ZyZWUocWotPnRpbWVfZXZlbnQpOworCisgICAgaWYgKHFqLT5kb25lKQorICAgICAgICBBVkFISV9MTElTVF9SRU1PVkUoQXZhaGlRdWVyeUpvYiwgam9icywgcy0+aGlzdG9yeSwgcWopOworICAgIGVsc2UKKyAgICAgICAgQVZBSElfTExJU1RfUkVNT1ZFKEF2YWhpUXVlcnlKb2IsIGpvYnMsIHMtPmpvYnMsIHFqKTsKKworICAgIGF2YWhpX2tleV91bnJlZihxai0+a2V5KTsKKyAgICBhdmFoaV9mcmVlKHFqKTsKK30KKworc3RhdGljIHZvaWQgZWxhcHNlX2NhbGxiYWNrKEF2YWhpVGltZUV2ZW50ICplLCB2b2lkKiBkYXRhKTsKKworc3RhdGljIHZvaWQgam9iX3NldF9lbGFwc2VfdGltZShBdmFoaVF1ZXJ5U2NoZWR1bGVyICpzLCBBdmFoaVF1ZXJ5Sm9iICpxaiwgdW5zaWduZWQgbXNlYywgdW5zaWduZWQgaml0dGVyKSB7CisgICAgc3RydWN0IHRpbWV2YWwgdHY7CisKKyAgICBhc3NlcnQocyk7CisgICAgYXNzZXJ0KHFqKTsKKworICAgIGF2YWhpX2VsYXBzZV90aW1lKCZ0diwgbXNlYywgaml0dGVyKTsKKworICAgIGlmIChxai0+dGltZV9ldmVudCkKKyAgICAgICAgYXZhaGlfdGltZV9ldmVudF91cGRhdGUocWotPnRpbWVfZXZlbnQsICZ0dik7CisgICAgZWxzZQorICAgICAgICBxai0+dGltZV9ldmVudCA9IGF2YWhpX3RpbWVfZXZlbnRfbmV3KHMtPnRpbWVfZXZlbnRfcXVldWUsICZ0diwgZWxhcHNlX2NhbGxiYWNrLCBxaik7Cit9CisKK3N0YXRpYyB2b2lkIGpvYl9tYXJrX2RvbmUoQXZhaGlRdWVyeVNjaGVkdWxlciAqcywgQXZhaGlRdWVyeUpvYiAqcWopIHsKKyAgICBhc3NlcnQocyk7CisgICAgYXNzZXJ0KHFqKTsKKworICAgIGFzc2VydCghcWotPmRvbmUpOworCisgICAgQVZBSElfTExJU1RfUkVNT1ZFKEF2YWhpUXVlcnlKb2IsIGpvYnMsIHMtPmpvYnMsIHFqKTsKKyAgICBBVkFISV9MTElTVF9QUkVQRU5EKEF2YWhpUXVlcnlKb2IsIGpvYnMsIHMtPmhpc3RvcnksIHFqKTsKKworICAgIHFqLT5kb25lID0gMTsKKworICAgIGpvYl9zZXRfZWxhcHNlX3RpbWUocywgcWosIEFWQUhJX1FVRVJZX0hJU1RPUllfTVNFQywgMCk7CisgICAgZ2V0dGltZW9mZGF5KCZxai0+ZGVsaXZlcnksIE5VTEwpOworfQorCitBdmFoaVF1ZXJ5U2NoZWR1bGVyICphdmFoaV9xdWVyeV9zY2hlZHVsZXJfbmV3KEF2YWhpSW50ZXJmYWNlICppKSB7CisgICAgQXZhaGlRdWVyeVNjaGVkdWxlciAqczsKKyAgICBhc3NlcnQoaSk7CisKKyAgICBpZiAoIShzID0gYXZhaGlfbmV3KEF2YWhpUXVlcnlTY2hlZHVsZXIsIDEpKSkgeworICAgICAgICBhdmFoaV9sb2dfZXJyb3IoX19GSUxFX18iOiBPdXQgb2YgbWVtb3J5Iik7CisgICAgICAgIHJldHVybiBOVUxMOyAvKiBPT00gKi8KKyAgICB9CisKKyAgICBzLT5pbnRlcmZhY2UgPSBpOworICAgIHMtPnRpbWVfZXZlbnRfcXVldWUgPSBpLT5tb25pdG9yLT5zZXJ2ZXItPnRpbWVfZXZlbnRfcXVldWU7CisgICAgcy0+bmV4dF9pZCA9IDA7CisKKyAgICBBVkFISV9MTElTVF9IRUFEX0lOSVQoQXZhaGlRdWVyeUpvYiwgcy0+am9icyk7CisgICAgQVZBSElfTExJU1RfSEVBRF9JTklUKEF2YWhpUXVlcnlKb2IsIHMtPmhpc3RvcnkpOworICAgIEFWQUhJX0xMSVNUX0hFQURfSU5JVChBdmFoaUtub3duQW5zd2VyLCBzLT5rbm93bl9hbnN3ZXJzKTsKKworICAgIHJldHVybiBzOworfQorCit2b2lkIGF2YWhpX3F1ZXJ5X3NjaGVkdWxlcl9mcmVlKEF2YWhpUXVlcnlTY2hlZHVsZXIgKnMpIHsKKyAgICBhc3NlcnQocyk7CisKKyAgICBhc3NlcnQoIXMtPmtub3duX2Fuc3dlcnMpOworICAgIGF2YWhpX3F1ZXJ5X3NjaGVkdWxlcl9jbGVhcihzKTsKKyAgICBhdmFoaV9mcmVlKHMpOworfQorCit2b2lkIGF2YWhpX3F1ZXJ5X3NjaGVkdWxlcl9jbGVhcihBdmFoaVF1ZXJ5U2NoZWR1bGVyICpzKSB7CisgICAgYXNzZXJ0KHMpOworCisgICAgd2hpbGUgKHMtPmpvYnMpCisgICAgICAgIGpvYl9mcmVlKHMsIHMtPmpvYnMpOworICAgIHdoaWxlIChzLT5oaXN0b3J5KQorICAgICAgICBqb2JfZnJlZShzLCBzLT5oaXN0b3J5KTsKK30KKworc3RhdGljIHZvaWQqIGtub3duX2Fuc3dlcl93YWxrX2NhbGxiYWNrKEF2YWhpQ2FjaGUgKmMsIEF2YWhpS2V5ICpwYXR0ZXJuLCBBdmFoaUNhY2hlRW50cnkgKmUsIHZvaWQqIHVzZXJkYXRhKSB7CisgICAgQXZhaGlRdWVyeVNjaGVkdWxlciAqcyA9IHVzZXJkYXRhOworICAgIEF2YWhpS25vd25BbnN3ZXIgKmthOworCisgICAgYXNzZXJ0KGMpOworICAgIGFzc2VydChwYXR0ZXJuKTsKKyAgICBhc3NlcnQoZSk7CisgICAgYXNzZXJ0KHMpOworCisgICAgaWYgKGF2YWhpX2NhY2hlX2VudHJ5X2hhbGZfdHRsKGMsIGUpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmICghKGthID0gYXZhaGlfbmV3MChBdmFoaUtub3duQW5zd2VyLCAxKSkpIHsKKyAgICAgICAgYXZhaGlfbG9nX2Vycm9yKF9fRklMRV9fIjogT3V0IG9mIG1lbW9yeSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBrYS0+c2NoZWR1bGVyID0gczsKKyAgICBrYS0+cmVjb3JkID0gYXZhaGlfcmVjb3JkX3JlZihlLT5yZWNvcmQpOworCisgICAgQVZBSElfTExJU1RfUFJFUEVORChBdmFoaUtub3duQW5zd2VyLCBrbm93bl9hbnN3ZXIsIHMtPmtub3duX2Fuc3dlcnMsIGthKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBwYWNrZXRfYWRkX3F1ZXJ5X2pvYihBdmFoaVF1ZXJ5U2NoZWR1bGVyICpzLCBBdmFoaURuc1BhY2tldCAqcCwgQXZhaGlRdWVyeUpvYiAqcWopIHsKKyAgICBhc3NlcnQocyk7CisgICAgYXNzZXJ0KHApOworICAgIGFzc2VydChxaik7CisKKyAgICBpZiAoIWF2YWhpX2Ruc19wYWNrZXRfYXBwZW5kX2tleShwLCBxai0+a2V5LCAwKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvKiBBZGQgYWxsIG1hdGNoaW5nIGtub3duIGFuc3dlcnMgdG8gdGhlIGxpc3QgKi8KKyAgICBhdmFoaV9jYWNoZV93YWxrKHMtPmludGVyZmFjZS0+Y2FjaGUsIHFqLT5rZXksIGtub3duX2Fuc3dlcl93YWxrX2NhbGxiYWNrLCBzKTsKKworICAgIGpvYl9tYXJrX2RvbmUocywgcWopOworCisgICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGFwcGVuZF9rbm93bl9hbnN3ZXJzX2FuZF9zZW5kKEF2YWhpUXVlcnlTY2hlZHVsZXIgKnMsIEF2YWhpRG5zUGFja2V0ICpwKSB7CisgICAgQXZhaGlLbm93bkFuc3dlciAqa2E7CisgICAgdW5zaWduZWQgbjsKKyAgICBhc3NlcnQocyk7CisgICAgYXNzZXJ0KHApOworCisgICAgbiA9IDA7CisKKyAgICB3aGlsZSAoKGthID0gcy0+a25vd25fYW5zd2VycykpIHsKKyAgICAgICAgaW50IHRvb19sYXJnZSA9IDA7CisKKyAgICAgICAgd2hpbGUgKCFhdmFoaV9kbnNfcGFja2V0X2FwcGVuZF9yZWNvcmQocCwga2EtPnJlY29yZCwgMCwgMCkpIHsKKworICAgICAgICAgICAgaWYgKGF2YWhpX2Ruc19wYWNrZXRfaXNfZW1wdHkocCkpIHsKKyAgICAgICAgICAgICAgICAvKiBUaGUgcmVjb3JkIGlzIHRvbyBsYXJnZSB0byBmaXQgaW50byBvbmUgcGFja2V0LCBzbworICAgICAgICAgICAgICAgICAgIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gc2VuZGluZyBpdC4gQmV0dGVyIGlzIGxldHRpbmcKKyAgICAgICAgICAgICAgICAgICB0aGUgb3duZXIgb2YgdGhlIHJlY29yZCBzZW5kIGl0IGFzIGEgcmVzcG9uc2UuIFRoaXMKKyAgICAgICAgICAgICAgICAgICBoYXMgdGhlIGFkdmFudGFnZSBvZiBhIGNhY2hlIHJlZnJlc2guICovCisKKyAgICAgICAgICAgICAgICB0b29fbGFyZ2UgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBhdmFoaV9kbnNfcGFja2V0X3NldF9maWVsZChwLCBBVkFISV9ETlNfRklFTERfRkxBR1MsIGF2YWhpX2Ruc19wYWNrZXRfZ2V0X2ZpZWxkKHAsIEFWQUhJX0ROU19GSUVMRF9GTEFHUykgfCBBVkFISV9ETlNfRkxBR19UQyk7CisgICAgICAgICAgICBhdmFoaV9kbnNfcGFja2V0X3NldF9maWVsZChwLCBBVkFISV9ETlNfRklFTERfQU5DT1VOVCwgbik7CisgICAgICAgICAgICBhdmFoaV9pbnRlcmZhY2Vfc2VuZF9wYWNrZXQocy0+aW50ZXJmYWNlLCBwKTsKKyAgICAgICAgICAgIGF2YWhpX2Ruc19wYWNrZXRfZnJlZShwKTsKKworICAgICAgICAgICAgcCA9IGF2YWhpX2Ruc19wYWNrZXRfbmV3X3F1ZXJ5KHMtPmludGVyZmFjZS0+aGFyZHdhcmUtPm10dSk7CisgICAgICAgICAgICBuID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIEFWQUhJX0xMSVNUX1JFTU9WRShBdmFoaUtub3duQW5zd2VyLCBrbm93bl9hbnN3ZXIsIHMtPmtub3duX2Fuc3dlcnMsIGthKTsKKyAgICAgICAgYXZhaGlfcmVjb3JkX3VucmVmKGthLT5yZWNvcmQpOworICAgICAgICBhdmFoaV9mcmVlKGthKTsKKworICAgICAgICBpZiAoIXRvb19sYXJnZSkKKyAgICAgICAgICAgIG4rKzsKKyAgICB9CisKKyAgICBhdmFoaV9kbnNfcGFja2V0X3NldF9maWVsZChwLCBBVkFISV9ETlNfRklFTERfQU5DT1VOVCwgbik7CisgICAgYXZhaGlfaW50ZXJmYWNlX3NlbmRfcGFja2V0KHMtPmludGVyZmFjZSwgcCk7CisgICAgYXZhaGlfZG5zX3BhY2tldF9mcmVlKHApOworfQorCitzdGF0aWMgdm9pZCBlbGFwc2VfY2FsbGJhY2soQVZBSElfR0NDX1VOVVNFRCBBdmFoaVRpbWVFdmVudCAqZSwgdm9pZCogZGF0YSkgeworICAgIEF2YWhpUXVlcnlKb2IgKnFqID0gZGF0YTsKKyAgICBBdmFoaVF1ZXJ5U2NoZWR1bGVyICpzOworICAgIEF2YWhpRG5zUGFja2V0ICpwOworICAgIHVuc2lnbmVkIG47CisgICAgaW50IGI7CisKKyAgICBhc3NlcnQocWopOworICAgIHMgPSBxai0+c2NoZWR1bGVyOworCisgICAgaWYgKHFqLT5kb25lKSB7CisgICAgICAgIC8qIExldHMgcmVtb3ZlIGl0ICBmcm9tIHRoZSBoaXN0b3J5ICovCisgICAgICAgIGpvYl9mcmVlKHMsIHFqKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGFzc2VydCghcy0+a25vd25fYW5zd2Vycyk7CisKKyAgICBpZiAoIShwID0gYXZhaGlfZG5zX3BhY2tldF9uZXdfcXVlcnkocy0+aW50ZXJmYWNlLT5oYXJkd2FyZS0+bXR1KSkpCisgICAgICAgIHJldHVybjsgLyogT09NICovCisKKyAgICBiID0gcGFja2V0X2FkZF9xdWVyeV9qb2IocywgcCwgcWopOworICAgIGFzc2VydChiKTsgLyogQW4gcXVlcnkgbXVzdCBhbHdheXMgZml0IGluICovCisgICAgbiA9IDE7CisKKyAgICAvKiBUcnkgdG8gZmlsbCB1cCBwYWNrZXQgd2l0aCBtb3JlIHF1ZXJpZXMsIGlmIGF2YWlsYWJsZSAqLworICAgIHdoaWxlIChzLT5qb2JzKSB7CisKKyAgICAgICAgaWYgKCFwYWNrZXRfYWRkX3F1ZXJ5X2pvYihzLCBwLCBzLT5qb2JzKSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIG4rKzsKKyAgICB9CisKKyAgICBhdmFoaV9kbnNfcGFja2V0X3NldF9maWVsZChwLCBBVkFISV9ETlNfRklFTERfUURDT1VOVCwgbik7CisKKyAgICAvKiBOb3cgYWRkIGtub3duIGFuc3dlcnMgKi8KKyAgICBhcHBlbmRfa25vd25fYW5zd2Vyc19hbmRfc2VuZChzLCBwKTsKK30KKworc3RhdGljIEF2YWhpUXVlcnlKb2IqIGZpbmRfc2NoZWR1bGVkX2pvYihBdmFoaVF1ZXJ5U2NoZWR1bGVyICpzLCBBdmFoaUtleSAqa2V5KSB7CisgICAgQXZhaGlRdWVyeUpvYiAqcWo7CisKKyAgICBhc3NlcnQocyk7CisgICAgYXNzZXJ0KGtleSk7CisKKyAgICBmb3IgKHFqID0gcy0+am9iczsgcWo7IHFqID0gcWotPmpvYnNfbmV4dCkgeworICAgICAgICBhc3NlcnQoIXFqLT5kb25lKTsKKworICAgICAgICBpZiAoYXZhaGlfa2V5X2VxdWFsKHFqLT5rZXksIGtleSkpCisgICAgICAgICAgICByZXR1cm4gcWo7CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBBdmFoaVF1ZXJ5Sm9iKiBmaW5kX2hpc3Rvcnlfam9iKEF2YWhpUXVlcnlTY2hlZHVsZXIgKnMsIEF2YWhpS2V5ICprZXkpIHsKKyAgICBBdmFoaVF1ZXJ5Sm9iICpxajsKKworICAgIGFzc2VydChzKTsKKyAgICBhc3NlcnQoa2V5KTsKKworICAgIGZvciAocWogPSBzLT5oaXN0b3J5OyBxajsgcWogPSBxai0+am9ic19uZXh0KSB7CisgICAgICAgIGFzc2VydChxai0+ZG9uZSk7CisKKyAgICAgICAgaWYgKGF2YWhpX2tleV9lcXVhbChxai0+a2V5LCBrZXkpKSB7CisgICAgICAgICAgICAvKiBDaGVjayB3aGV0aGVyIHRoaXMgZW50cnkgaXMgb3V0ZGF0ZWQgKi8KKworICAgICAgICAgICAgaWYgKGF2YWhpX2FnZSgmcWotPmRlbGl2ZXJ5KSA+IEFWQUhJX1FVRVJZX0hJU1RPUllfTVNFQyoxMDAwKSB7CisgICAgICAgICAgICAgICAgLyogaXQgaXMgb3V0ZGF0ZWQsIHNvIGxldCdzIHJlbW92ZSBpdCAqLworICAgICAgICAgICAgICAgIGpvYl9mcmVlKHMsIHFqKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHFqOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK2ludCBhdmFoaV9xdWVyeV9zY2hlZHVsZXJfcG9zdChBdmFoaVF1ZXJ5U2NoZWR1bGVyICpzLCBBdmFoaUtleSAqa2V5LCBpbnQgaW1tZWRpYXRlbHksIHVuc2lnbmVkICpyZXRfaWQpIHsKKyAgICBzdHJ1Y3QgdGltZXZhbCB0djsKKyAgICBBdmFoaVF1ZXJ5Sm9iICpxajsKKworICAgIGFzc2VydChzKTsKKyAgICBhc3NlcnQoa2V5KTsKKworICAgIGlmICgocWogPSBmaW5kX2hpc3Rvcnlfam9iKHMsIGtleSkpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGF2YWhpX2VsYXBzZV90aW1lKCZ0diwgaW1tZWRpYXRlbHkgPyAwIDogQVZBSElfUVVFUllfREVGRVJfTVNFQywgMCk7CisKKyAgICBpZiAoKHFqID0gZmluZF9zY2hlZHVsZWRfam9iKHMsIGtleSkpKSB7CisgICAgICAgIC8qIER1cGxpY2F0ZSBxdWVzdGlvbnMgc3VwcHJlc3Npb24gKi8KKworICAgICAgICBpZiAoYXZhaGlfdGltZXZhbF9jb21wYXJlKCZ0diwgJnFqLT5kZWxpdmVyeSkgPCAwKSB7CisgICAgICAgICAgICAvKiBJZiB0aGUgbmV3IGVudHJ5IHNob3VsZCBiZSBzY2hlZHVsZWQgZWFybGllciwKKyAgICAgICAgICAgICAqIHVwZGF0ZSB0aGUgb2xkIGVudHJ5ICovCisgICAgICAgICAgICBxai0+ZGVsaXZlcnkgPSB0djsKKyAgICAgICAgICAgIGF2YWhpX3RpbWVfZXZlbnRfdXBkYXRlKHFqLT50aW1lX2V2ZW50LCAmcWotPmRlbGl2ZXJ5KTsKKyAgICAgICAgfQorCisgICAgICAgIHFqLT5uX3Bvc3RlZCsrOworCisgICAgfSBlbHNlIHsKKworICAgICAgICBpZiAoIShxaiA9IGpvYl9uZXcocywga2V5LCAwKSkpCisgICAgICAgICAgICByZXR1cm4gMDsgLyogT09NICovCisKKyAgICAgICAgcWotPmRlbGl2ZXJ5ID0gdHY7CisgICAgICAgIHFqLT50aW1lX2V2ZW50ID0gYXZhaGlfdGltZV9ldmVudF9uZXcocy0+dGltZV9ldmVudF9xdWV1ZSwgJnFqLT5kZWxpdmVyeSwgZWxhcHNlX2NhbGxiYWNrLCBxaik7CisgICAgfQorCisgICAgaWYgKHJldF9pZCkKKyAgICAgICAgKnJldF9pZCA9IHFqLT5pZDsKKworICAgIHJldHVybiAxOworfQorCit2b2lkIGF2YWhpX3F1ZXJ5X3NjaGVkdWxlcl9pbmNvbWluZyhBdmFoaVF1ZXJ5U2NoZWR1bGVyICpzLCBBdmFoaUtleSAqa2V5KSB7CisgICAgQXZhaGlRdWVyeUpvYiAqcWo7CisKKyAgICBhc3NlcnQocyk7CisgICAgYXNzZXJ0KGtleSk7CisKKyAgICAvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuZXZlciBhbiBpbmNvbWluZyBxdWVyeSB3YXMKKyAgICAgKiByZWNlaXZlZC4gV2UgZHJvcCBzY2hlZHVsZWQgcXVlcmllcyB0aGF0IG1hdGNoLiBUaGUga2V5d29yZCBpcworICAgICAqICJEVVBMSUNBVEUgUVVFU1RJT04gU1VQUFJFU0lPTiIuICovCisKKyAgICBpZiAoKHFqID0gZmluZF9zY2hlZHVsZWRfam9iKHMsIGtleSkpKSB7CisgICAgICAgIGpvYl9tYXJrX2RvbmUocywgcWopOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyogTG9vayBpZiB0aGVyZSdzIGEgaGlzdG9yeSBqb2IgZm9yIHRoaXMga2V5LiBJZiB0aGVyZSBpcywganVzdAorICAgICAqIHVwZGF0ZSB0aGUgZWxhcHNlIHRpbWUgKi8KKyAgICBpZiAoIShxaiA9IGZpbmRfaGlzdG9yeV9qb2Iocywga2V5KSkpCisgICAgICAgIGlmICghKHFqID0gam9iX25ldyhzLCBrZXksIDEpKSkKKyAgICAgICAgICAgIHJldHVybjsgLyogT09NICovCisKKyAgICBnZXR0aW1lb2ZkYXkoJnFqLT5kZWxpdmVyeSwgTlVMTCk7CisgICAgam9iX3NldF9lbGFwc2VfdGltZShzLCBxaiwgQVZBSElfUVVFUllfSElTVE9SWV9NU0VDLCAwKTsKK30KKworaW50IGF2YWhpX3F1ZXJ5X3NjaGVkdWxlcl93aXRoZHJhd19ieV9pZChBdmFoaVF1ZXJ5U2NoZWR1bGVyICpzLCB1bnNpZ25lZCBpZCkgeworICAgIEF2YWhpUXVlcnlKb2IgKnFqOworCisgICAgYXNzZXJ0KHMpOworCisgICAgLyogVmVyeSBzaG9ydCBsaXZlZCBxdWVyaWVzIGNhbiB3aXRoZHJhdyBhbiBhbHJlYWR5IHNjaGVkdWxlZCBpdGVtCisgICAgICogZnJvbSB0aGUgcXVldWUgdXNpbmcgdGhpcyBmdW5jdGlvbiwgc2ltcGx5IGJ5IHBhc3NpbmcgdGhlIGlkCisgICAgICogcmV0dXJuZWQgYnkgYXZhaGlfcXVlcnlfc2NoZWR1bGVyX3Bvc3QoKS4gKi8KKworICAgIGZvciAocWogPSBzLT5qb2JzOyBxajsgcWogPSBxai0+am9ic19uZXh0KSB7CisgICAgICAgIGFzc2VydCghcWotPmRvbmUpOworCisgICAgICAgIGlmIChxai0+aWQgPT0gaWQpIHsKKyAgICAgICAgICAgIC8qIEVudHJ5IGZvdW5kICovCisKKyAgICAgICAgICAgIGFzc2VydChxai0+bl9wb3N0ZWQgPj0gMSk7CisKKyAgICAgICAgICAgIGlmICgtLXFqLT5uX3Bvc3RlZCA8PSAwKSB7CisKKyAgICAgICAgICAgICAgICAvKiBXZSB3aXRoZHJhdyB0aGlzIGpvYiBvbmx5IGlmIHRoZSBjYWxsaW5nIG9iamVjdCB3YXMKKyAgICAgICAgICAgICAgICAgKiB0aGUgb25seSByZW1haW5pbmcgcG9zdGVyLiAoVXN1YWxseSB0aGlzIGlzIHRoZQorICAgICAgICAgICAgICAgICAqIGNhc2Ugc2luY2UgdGhlcmUgc2hvdWxkIGV4aXN0IG9ubHkgb25lIHF1ZXJpZXIgcGVyCisgICAgICAgICAgICAgICAgICoga2V5LCBidXQgdGhlcmUgYXJlIGV4Y2VwdGlvbnMsIG5vdGFibHkgcmVmbGVjdGVkCisgICAgICAgICAgICAgICAgICogdHJhZmZpYy4pICovCisKKyAgICAgICAgICAgICAgICBqb2JfZnJlZShzLCBxaik7CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL3F1ZXJ5LXNjaGVkLmggYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9xdWVyeS1zY2hlZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NTUyMGMKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9xdWVyeS1zY2hlZC5oCkBAIC0wLDAgKzEsMzYgQEAKKyNpZm5kZWYgZm9vcXVlcnlzY2hlZGhmb28KKyNkZWZpbmUgZm9vcXVlcnlzY2hlZGhmb28KKworLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCit0eXBlZGVmIHN0cnVjdCBBdmFoaVF1ZXJ5U2NoZWR1bGVyIEF2YWhpUXVlcnlTY2hlZHVsZXI7CisKKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vYWRkcmVzcy5oPgorI2luY2x1ZGUgImlmYWNlLmgiCisKK0F2YWhpUXVlcnlTY2hlZHVsZXIgKmF2YWhpX3F1ZXJ5X3NjaGVkdWxlcl9uZXcoQXZhaGlJbnRlcmZhY2UgKmkpOwordm9pZCBhdmFoaV9xdWVyeV9zY2hlZHVsZXJfZnJlZShBdmFoaVF1ZXJ5U2NoZWR1bGVyICpzKTsKK3ZvaWQgYXZhaGlfcXVlcnlfc2NoZWR1bGVyX2NsZWFyKEF2YWhpUXVlcnlTY2hlZHVsZXIgKnMpOworCitpbnQgYXZhaGlfcXVlcnlfc2NoZWR1bGVyX3Bvc3QoQXZhaGlRdWVyeVNjaGVkdWxlciAqcywgQXZhaGlLZXkgKmtleSwgaW50IGltbWVkaWF0ZWx5LCB1bnNpZ25lZCAqcmV0X2lkKTsKK2ludCBhdmFoaV9xdWVyeV9zY2hlZHVsZXJfd2l0aGRyYXdfYnlfaWQoQXZhaGlRdWVyeVNjaGVkdWxlciAqcywgdW5zaWduZWQgaWQpOwordm9pZCBhdmFoaV9xdWVyeV9zY2hlZHVsZXJfaW5jb21pbmcoQXZhaGlRdWVyeVNjaGVkdWxlciAqcywgQXZhaGlLZXkgKmtleSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvcmVzb2x2ZS1hZGRyZXNzLmMgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9yZXNvbHZlLWFkZHJlc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDRhZGJjCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvcmVzb2x2ZS1hZGRyZXNzLmMKQEAgLTAsMCArMSwyNjggQEAKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vdGltZXZhbC5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9tYWxsb2MuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vZXJyb3IuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vZG9tYWluLmg+CisKKyNpbmNsdWRlICJicm93c2UuaCIKKworI2RlZmluZSBUSU1FT1VUX01TRUMgNTAwMAorCitzdHJ1Y3QgQXZhaGlTQWRkcmVzc1Jlc29sdmVyIHsKKyAgICBBdmFoaVNlcnZlciAqc2VydmVyOworICAgIEF2YWhpQWRkcmVzcyBhZGRyZXNzOworCisgICAgQXZhaGlTUmVjb3JkQnJvd3NlciAqcmVjb3JkX2Jyb3dzZXI7CisKKyAgICBBdmFoaVNBZGRyZXNzUmVzb2x2ZXJDYWxsYmFjayBjYWxsYmFjazsKKyAgICB2b2lkKiB1c2VyZGF0YTsKKworICAgIEF2YWhpUmVjb3JkICpwdHJfcmVjb3JkOworICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2U7CisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbDsKKyAgICBBdmFoaUxvb2t1cFJlc3VsdEZsYWdzIGZsYWdzOworCisgICAgaW50IHJldHJ5X3dpdGhfbXVsdGljYXN0OworICAgIEF2YWhpS2V5ICprZXk7CisKKyAgICBBdmFoaVRpbWVFdmVudCAqdGltZV9ldmVudDsKKworICAgIEFWQUhJX0xMSVNUX0ZJRUxEUyhBdmFoaVNBZGRyZXNzUmVzb2x2ZXIsIHJlc29sdmVyKTsKK307CisKK3N0YXRpYyB2b2lkIGZpbmlzaChBdmFoaVNBZGRyZXNzUmVzb2x2ZXIgKnIsIEF2YWhpUmVzb2x2ZXJFdmVudCBldmVudCkgeworICAgIGFzc2VydChyKTsKKworICAgIGlmIChyLT50aW1lX2V2ZW50KSB7CisgICAgICAgIGF2YWhpX3RpbWVfZXZlbnRfZnJlZShyLT50aW1lX2V2ZW50KTsKKyAgICAgICAgci0+dGltZV9ldmVudCA9IE5VTEw7CisgICAgfQorCisgICAgc3dpdGNoIChldmVudCkgeworICAgICAgICBjYXNlIEFWQUhJX1JFU09MVkVSX0ZBSUxVUkU6CisgICAgICAgICAgICByLT5jYWxsYmFjayhyLCByLT5pbnRlcmZhY2UsIHItPnByb3RvY29sLCBldmVudCwgJnItPmFkZHJlc3MsIE5VTEwsIHItPmZsYWdzLCByLT51c2VyZGF0YSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFWQUhJX1JFU09MVkVSX0ZPVU5EOgorICAgICAgICAgICAgYXNzZXJ0KHItPnB0cl9yZWNvcmQpOworICAgICAgICAgICAgci0+Y2FsbGJhY2sociwgci0+aW50ZXJmYWNlLCByLT5wcm90b2NvbCwgZXZlbnQsICZyLT5hZGRyZXNzLCByLT5wdHJfcmVjb3JkLT5kYXRhLnB0ci5uYW1lLCByLT5mbGFncywgci0+dXNlcmRhdGEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB0aW1lX2V2ZW50X2NhbGxiYWNrKEF2YWhpVGltZUV2ZW50ICplLCB2b2lkICp1c2VyZGF0YSkgeworICAgIEF2YWhpU0FkZHJlc3NSZXNvbHZlciAqciA9IHVzZXJkYXRhOworCisgICAgYXNzZXJ0KGUpOworICAgIGFzc2VydChyKTsKKworICAgIGF2YWhpX3NlcnZlcl9zZXRfZXJybm8oci0+c2VydmVyLCBBVkFISV9FUlJfVElNRU9VVCk7CisgICAgZmluaXNoKHIsIEFWQUhJX1JFU09MVkVSX0ZBSUxVUkUpOworfQorCitzdGF0aWMgdm9pZCBzdGFydF90aW1lb3V0KEF2YWhpU0FkZHJlc3NSZXNvbHZlciAqcikgeworICAgIHN0cnVjdCB0aW1ldmFsIHR2OworICAgIGFzc2VydChyKTsKKworICAgIGlmIChyLT50aW1lX2V2ZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBhdmFoaV9lbGFwc2VfdGltZSgmdHYsIFRJTUVPVVRfTVNFQywgMCk7CisgICAgci0+dGltZV9ldmVudCA9IGF2YWhpX3RpbWVfZXZlbnRfbmV3KHItPnNlcnZlci0+dGltZV9ldmVudF9xdWV1ZSwgJnR2LCB0aW1lX2V2ZW50X2NhbGxiYWNrLCByKTsKK30KKworc3RhdGljIHZvaWQgcmVjb3JkX2Jyb3dzZXJfY2FsbGJhY2soCisgICAgQXZhaGlTUmVjb3JkQnJvd3NlcipyciwKKyAgICBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLAorICAgIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsCisgICAgQXZhaGlCcm93c2VyRXZlbnQgZXZlbnQsCisgICAgQXZhaGlSZWNvcmQgKnJlY29yZCwKKyAgICBBdmFoaUxvb2t1cFJlc3VsdEZsYWdzIGZsYWdzLAorICAgIHZvaWQqIHVzZXJkYXRhKSB7CisKKyAgICBBdmFoaVNBZGRyZXNzUmVzb2x2ZXIgKnIgPSB1c2VyZGF0YTsKKworICAgIGFzc2VydChycik7CisgICAgYXNzZXJ0KHIpOworCisgICAgc3dpdGNoIChldmVudCkgeworICAgICAgICBjYXNlIEFWQUhJX0JST1dTRVJfTkVXOgorICAgICAgICAgICAgYXNzZXJ0KHJlY29yZCk7CisgICAgICAgICAgICBhc3NlcnQocmVjb3JkLT5rZXktPnR5cGUgPT0gQVZBSElfRE5TX1RZUEVfUFRSKTsKKworICAgICAgICAgICAgaWYgKHItPmludGVyZmFjZSA+IDAgJiYgaW50ZXJmYWNlICE9IHItPmludGVyZmFjZSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGlmIChyLT5wcm90b2NvbCAhPSBBVkFISV9QUk9UT19VTlNQRUMgJiYgcHJvdG9jb2wgIT0gci0+cHJvdG9jb2wpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoci0+aW50ZXJmYWNlIDw9IDApCisgICAgICAgICAgICAgICAgci0+aW50ZXJmYWNlID0gaW50ZXJmYWNlOworCisgICAgICAgICAgICBpZiAoci0+cHJvdG9jb2wgPT0gQVZBSElfUFJPVE9fVU5TUEVDKQorICAgICAgICAgICAgICAgIHItPnByb3RvY29sID0gcHJvdG9jb2w7CisKKyAgICAgICAgICAgIGlmICghci0+cHRyX3JlY29yZCkgeworICAgICAgICAgICAgICAgIHItPnB0cl9yZWNvcmQgPSBhdmFoaV9yZWNvcmRfcmVmKHJlY29yZCk7CisgICAgICAgICAgICAgICAgci0+ZmxhZ3MgPSBmbGFnczsKKworICAgICAgICAgICAgICAgIGZpbmlzaChyLCBBVkFISV9SRVNPTFZFUl9GT1VORCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFWQUhJX0JST1dTRVJfUkVNT1ZFOgorICAgICAgICAgICAgYXNzZXJ0KHJlY29yZCk7CisgICAgICAgICAgICBhc3NlcnQocmVjb3JkLT5rZXktPnR5cGUgPT0gQVZBSElfRE5TX1RZUEVfUFRSKTsKKworICAgICAgICAgICAgaWYgKHItPnB0cl9yZWNvcmQgJiYgYXZhaGlfcmVjb3JkX2VxdWFsX25vX3R0bChyZWNvcmQsIHItPnB0cl9yZWNvcmQpKSB7CisgICAgICAgICAgICAgICAgYXZhaGlfcmVjb3JkX3VucmVmKHItPnB0cl9yZWNvcmQpOworICAgICAgICAgICAgICAgIHItPnB0cl9yZWNvcmQgPSBOVUxMOworICAgICAgICAgICAgICAgIHItPmZsYWdzID0gZmxhZ3M7CisKKyAgICAgICAgICAgICAgICAvKiogTG9vayBmb3IgYSByZXBsYWNlbWVudCAqLworICAgICAgICAgICAgICAgIGF2YWhpX3NfcmVjb3JkX2Jyb3dzZXJfcmVzdGFydChyLT5yZWNvcmRfYnJvd3Nlcik7CisgICAgICAgICAgICAgICAgc3RhcnRfdGltZW91dChyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBVkFISV9CUk9XU0VSX0NBQ0hFX0VYSEFVU1RFRDoKKyAgICAgICAgY2FzZSBBVkFISV9CUk9XU0VSX0FMTF9GT1JfTk9XOgorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBVkFISV9CUk9XU0VSX0ZBSUxVUkU6CisKKyAgICAgICAgICAgIGlmIChyLT5yZXRyeV93aXRoX211bHRpY2FzdCkgeworICAgICAgICAgICAgICAgIHItPnJldHJ5X3dpdGhfbXVsdGljYXN0ID0gMDsKKworICAgICAgICAgICAgICAgIGF2YWhpX3NfcmVjb3JkX2Jyb3dzZXJfZnJlZShyLT5yZWNvcmRfYnJvd3Nlcik7CisgICAgICAgICAgICAgICAgci0+cmVjb3JkX2Jyb3dzZXIgPSBhdmFoaV9zX3JlY29yZF9icm93c2VyX25ldyhyLT5zZXJ2ZXIsIHItPmludGVyZmFjZSwgci0+cHJvdG9jb2wsIHItPmtleSwgQVZBSElfTE9PS1VQX1VTRV9NVUxUSUNBU1QsIHJlY29yZF9icm93c2VyX2NhbGxiYWNrLCByKTsKKworICAgICAgICAgICAgICAgIGlmIChyLT5yZWNvcmRfYnJvd3NlcikgeworICAgICAgICAgICAgICAgICAgICBzdGFydF90aW1lb3V0KHIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHItPmZsYWdzID0gZmxhZ3M7CisgICAgICAgICAgICBmaW5pc2gociwgQVZBSElfUkVTT0xWRVJfRkFJTFVSRSk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK0F2YWhpU0FkZHJlc3NSZXNvbHZlciAqYXZhaGlfc19hZGRyZXNzX3Jlc29sdmVyX25ldygKKyAgICBBdmFoaVNlcnZlciAqc2VydmVyLAorICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsCisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICBjb25zdCBBdmFoaUFkZHJlc3MgKmFkZHJlc3MsCisgICAgQXZhaGlMb29rdXBGbGFncyBmbGFncywKKyAgICBBdmFoaVNBZGRyZXNzUmVzb2x2ZXJDYWxsYmFjayBjYWxsYmFjaywKKyAgICB2b2lkKiB1c2VyZGF0YSkgeworCisgICAgQXZhaGlTQWRkcmVzc1Jlc29sdmVyICpyOworICAgIEF2YWhpS2V5ICprOworICAgIGNoYXIgbltBVkFISV9ET01BSU5fTkFNRV9NQVhdOworCisgICAgYXNzZXJ0KHNlcnZlcik7CisgICAgYXNzZXJ0KGFkZHJlc3MpOworICAgIGFzc2VydChjYWxsYmFjayk7CisKKyAgICBBVkFISV9DSEVDS19WQUxJRElUWV9SRVRVUk5fTlVMTChzZXJ2ZXIsIEFWQUhJX0lGX1ZBTElEKGludGVyZmFjZSksIEFWQUhJX0VSUl9JTlZBTElEX0lOVEVSRkFDRSk7CisgICAgQVZBSElfQ0hFQ0tfVkFMSURJVFlfUkVUVVJOX05VTEwoc2VydmVyLCBBVkFISV9QUk9UT19WQUxJRChwcm90b2NvbCksIEFWQUhJX0VSUl9JTlZBTElEX1BST1RPQ09MKTsKKyAgICBBVkFISV9DSEVDS19WQUxJRElUWV9SRVRVUk5fTlVMTChzZXJ2ZXIsIGFkZHJlc3MtPnByb3RvID09IEFWQUhJX1BST1RPX0lORVQgfHwgYWRkcmVzcy0+cHJvdG8gPT0gQVZBSElfUFJPVE9fSU5FVDYsIEFWQUhJX0VSUl9JTlZBTElEX1BST1RPQ09MKTsKKyAgICBBVkFISV9DSEVDS19WQUxJRElUWV9SRVRVUk5fTlVMTChzZXJ2ZXIsIEFWQUhJX0ZMQUdTX1ZBTElEKGZsYWdzLCBBVkFISV9MT09LVVBfVVNFX1dJREVfQVJFQXxBVkFISV9MT09LVVBfVVNFX01VTFRJQ0FTVCksIEFWQUhJX0VSUl9JTlZBTElEX0ZMQUdTKTsKKworICAgIGF2YWhpX3JldmVyc2VfbG9va3VwX25hbWUoYWRkcmVzcywgbiwgc2l6ZW9mKG4pKTsKKworICAgIGlmICghKGsgPSBhdmFoaV9rZXlfbmV3KG4sIEFWQUhJX0ROU19DTEFTU19JTiwgQVZBSElfRE5TX1RZUEVfUFRSKSkpIHsKKyAgICAgICAgYXZhaGlfc2VydmVyX3NldF9lcnJubyhzZXJ2ZXIsIEFWQUhJX0VSUl9OT19NRU1PUlkpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoIShyID0gYXZhaGlfbmV3KEF2YWhpU0FkZHJlc3NSZXNvbHZlciwgMSkpKSB7CisgICAgICAgIGF2YWhpX3NlcnZlcl9zZXRfZXJybm8oc2VydmVyLCBBVkFISV9FUlJfTk9fTUVNT1JZKTsKKyAgICAgICAgYXZhaGlfa2V5X3VucmVmKGspOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByLT5zZXJ2ZXIgPSBzZXJ2ZXI7CisgICAgci0+YWRkcmVzcyA9ICphZGRyZXNzOworICAgIHItPmNhbGxiYWNrID0gY2FsbGJhY2s7CisgICAgci0+dXNlcmRhdGEgPSB1c2VyZGF0YTsKKyAgICByLT5wdHJfcmVjb3JkID0gTlVMTDsKKyAgICByLT5pbnRlcmZhY2UgPSBpbnRlcmZhY2U7CisgICAgci0+cHJvdG9jb2wgPSBwcm90b2NvbDsKKyAgICByLT5mbGFncyA9IDA7CisgICAgci0+cmV0cnlfd2l0aF9tdWx0aWNhc3QgPSAwOworICAgIHItPmtleSA9IGs7CisKKyAgICByLT5yZWNvcmRfYnJvd3NlciA9IE5VTEw7CisgICAgQVZBSElfTExJU1RfUFJFUEVORChBdmFoaVNBZGRyZXNzUmVzb2x2ZXIsIHJlc29sdmVyLCBzZXJ2ZXItPmFkZHJlc3NfcmVzb2x2ZXJzLCByKTsKKworICAgIHItPnRpbWVfZXZlbnQgPSBOVUxMOworCisgICAgaWYgKCEoZmxhZ3MgJiAoQVZBSElfTE9PS1VQX1VTRV9NVUxUSUNBU1R8QVZBSElfTE9PS1VQX1VTRV9XSURFX0FSRUEpKSkgeworCisgICAgICAgIGlmICghc2VydmVyLT53aWRlX2FyZWFfbG9va3VwX2VuZ2luZSB8fCAhYXZhaGlfd2lkZV9hcmVhX2hhc19zZXJ2ZXJzKHNlcnZlci0+d2lkZV9hcmVhX2xvb2t1cF9lbmdpbmUpKQorICAgICAgICAgICAgZmxhZ3MgfD0gQVZBSElfTE9PS1VQX1VTRV9NVUxUSUNBU1Q7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZmxhZ3MgfD0gQVZBSElfTE9PS1VQX1VTRV9XSURFX0FSRUE7CisgICAgICAgICAgICByLT5yZXRyeV93aXRoX211bHRpY2FzdCA9IDE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByLT5yZWNvcmRfYnJvd3NlciA9IGF2YWhpX3NfcmVjb3JkX2Jyb3dzZXJfbmV3KHNlcnZlciwgaW50ZXJmYWNlLCBwcm90b2NvbCwgaywgZmxhZ3MsIHJlY29yZF9icm93c2VyX2NhbGxiYWNrLCByKTsKKworICAgIGlmICghci0+cmVjb3JkX2Jyb3dzZXIpIHsKKyAgICAgICAgYXZhaGlfc19hZGRyZXNzX3Jlc29sdmVyX2ZyZWUocik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHN0YXJ0X3RpbWVvdXQocik7CisKKyAgICByZXR1cm4gcjsKK30KKwordm9pZCBhdmFoaV9zX2FkZHJlc3NfcmVzb2x2ZXJfZnJlZShBdmFoaVNBZGRyZXNzUmVzb2x2ZXIgKnIpIHsKKyAgICBhc3NlcnQocik7CisKKyAgICBBVkFISV9MTElTVF9SRU1PVkUoQXZhaGlTQWRkcmVzc1Jlc29sdmVyLCByZXNvbHZlciwgci0+c2VydmVyLT5hZGRyZXNzX3Jlc29sdmVycywgcik7CisKKyAgICBpZiAoci0+cmVjb3JkX2Jyb3dzZXIpCisgICAgICAgIGF2YWhpX3NfcmVjb3JkX2Jyb3dzZXJfZnJlZShyLT5yZWNvcmRfYnJvd3Nlcik7CisKKyAgICBpZiAoci0+dGltZV9ldmVudCkKKyAgICAgICAgYXZhaGlfdGltZV9ldmVudF9mcmVlKHItPnRpbWVfZXZlbnQpOworCisgICAgaWYgKHItPnB0cl9yZWNvcmQpCisgICAgICAgIGF2YWhpX3JlY29yZF91bnJlZihyLT5wdHJfcmVjb3JkKTsKKworICAgIGlmIChyLT5rZXkpCisgICAgICAgIGF2YWhpX2tleV91bnJlZihyLT5rZXkpOworCisgICAgYXZhaGlfZnJlZShyKTsKK30KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL3Jlc29sdmUtaG9zdC1uYW1lLmMgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9yZXNvbHZlLWhvc3QtbmFtZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4ZjIwOWIKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9yZXNvbHZlLWhvc3QtbmFtZS5jCkBAIC0wLDAgKzEsMjk3IEBACisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2RvbWFpbi5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi90aW1ldmFsLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL21hbGxvYy5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9lcnJvci5oPgorCisjaW5jbHVkZSAiYnJvd3NlLmgiCisjaW5jbHVkZSAibG9nLmgiCisKKyNkZWZpbmUgVElNRU9VVF9NU0VDIDUwMDAKKworc3RydWN0IEF2YWhpU0hvc3ROYW1lUmVzb2x2ZXIgeworICAgIEF2YWhpU2VydmVyICpzZXJ2ZXI7CisgICAgY2hhciAqaG9zdF9uYW1lOworCisgICAgQXZhaGlTUmVjb3JkQnJvd3NlciAqcmVjb3JkX2Jyb3dzZXJfYTsKKyAgICBBdmFoaVNSZWNvcmRCcm93c2VyICpyZWNvcmRfYnJvd3Nlcl9hYWFhOworCisgICAgQXZhaGlTSG9zdE5hbWVSZXNvbHZlckNhbGxiYWNrIGNhbGxiYWNrOworICAgIHZvaWQqIHVzZXJkYXRhOworCisgICAgQXZhaGlSZWNvcmQgKmFkZHJlc3NfcmVjb3JkOworICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2U7CisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbDsKKyAgICBBdmFoaUxvb2t1cFJlc3VsdEZsYWdzIGZsYWdzOworCisgICAgQXZhaGlUaW1lRXZlbnQgKnRpbWVfZXZlbnQ7CisKKyAgICBBVkFISV9MTElTVF9GSUVMRFMoQXZhaGlTSG9zdE5hbWVSZXNvbHZlciwgcmVzb2x2ZXIpOworfTsKKworc3RhdGljIHZvaWQgZmluaXNoKEF2YWhpU0hvc3ROYW1lUmVzb2x2ZXIgKnIsIEF2YWhpUmVzb2x2ZXJFdmVudCBldmVudCkgeworICAgIGFzc2VydChyKTsKKworICAgIGlmIChyLT50aW1lX2V2ZW50KSB7CisgICAgICAgIGF2YWhpX3RpbWVfZXZlbnRfZnJlZShyLT50aW1lX2V2ZW50KTsKKyAgICAgICAgci0+dGltZV9ldmVudCA9IE5VTEw7CisgICAgfQorCisgICAgc3dpdGNoIChldmVudCkgeworICAgICAgICBjYXNlIEFWQUhJX1JFU09MVkVSX0ZPVU5EOiB7CisgICAgICAgICAgICBBdmFoaUFkZHJlc3MgYTsKKworICAgICAgICAgICAgYXNzZXJ0KHItPmFkZHJlc3NfcmVjb3JkKTsKKworICAgICAgICAgICAgc3dpdGNoIChyLT5hZGRyZXNzX3JlY29yZC0+a2V5LT50eXBlKSB7CisgICAgICAgICAgICAgICAgY2FzZSBBVkFISV9ETlNfVFlQRV9BOgorICAgICAgICAgICAgICAgICAgICBhLnByb3RvID0gQVZBSElfUFJPVE9fSU5FVDsKKyAgICAgICAgICAgICAgICAgICAgYS5kYXRhLmlwdjQgPSByLT5hZGRyZXNzX3JlY29yZC0+ZGF0YS5hLmFkZHJlc3M7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBBVkFISV9ETlNfVFlQRV9BQUFBOgorICAgICAgICAgICAgICAgICAgICBhLnByb3RvID0gQVZBSElfUFJPVE9fSU5FVDY7CisgICAgICAgICAgICAgICAgICAgIGEuZGF0YS5pcHY2ID0gci0+YWRkcmVzc19yZWNvcmQtPmRhdGEuYWFhYS5hZGRyZXNzOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGFib3J0KCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHItPmNhbGxiYWNrKHIsIHItPmludGVyZmFjZSwgci0+cHJvdG9jb2wsIEFWQUhJX1JFU09MVkVSX0ZPVU5ELCByLT5hZGRyZXNzX3JlY29yZC0+a2V5LT5uYW1lLCAmYSwgci0+ZmxhZ3MsIHItPnVzZXJkYXRhKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIH0KKworICAgICAgICBjYXNlIEFWQUhJX1JFU09MVkVSX0ZBSUxVUkU6CisKKyAgICAgICAgICAgIHItPmNhbGxiYWNrKHIsIHItPmludGVyZmFjZSwgci0+cHJvdG9jb2wsIGV2ZW50LCByLT5ob3N0X25hbWUsIE5VTEwsIHItPmZsYWdzLCByLT51c2VyZGF0YSk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHRpbWVfZXZlbnRfY2FsbGJhY2soQXZhaGlUaW1lRXZlbnQgKmUsIHZvaWQgKnVzZXJkYXRhKSB7CisgICAgQXZhaGlTSG9zdE5hbWVSZXNvbHZlciAqciA9IHVzZXJkYXRhOworCisgICAgYXNzZXJ0KGUpOworICAgIGFzc2VydChyKTsKKworICAgIGF2YWhpX3NlcnZlcl9zZXRfZXJybm8oci0+c2VydmVyLCBBVkFISV9FUlJfVElNRU9VVCk7CisgICAgZmluaXNoKHIsIEFWQUhJX1JFU09MVkVSX0ZBSUxVUkUpOworfQorCitzdGF0aWMgdm9pZCBzdGFydF90aW1lb3V0KEF2YWhpU0hvc3ROYW1lUmVzb2x2ZXIgKnIpIHsKKyAgICBzdHJ1Y3QgdGltZXZhbCB0djsKKyAgICBhc3NlcnQocik7CisKKyAgICBpZiAoci0+dGltZV9ldmVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXZhaGlfZWxhcHNlX3RpbWUoJnR2LCBUSU1FT1VUX01TRUMsIDApOworCisgICAgci0+dGltZV9ldmVudCA9IGF2YWhpX3RpbWVfZXZlbnRfbmV3KHItPnNlcnZlci0+dGltZV9ldmVudF9xdWV1ZSwgJnR2LCB0aW1lX2V2ZW50X2NhbGxiYWNrLCByKTsKK30KKworc3RhdGljIHZvaWQgcmVjb3JkX2Jyb3dzZXJfY2FsbGJhY2soCisgICAgQXZhaGlTUmVjb3JkQnJvd3NlcipyciwKKyAgICBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLAorICAgIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsCisgICAgQXZhaGlCcm93c2VyRXZlbnQgZXZlbnQsCisgICAgQXZhaGlSZWNvcmQgKnJlY29yZCwKKyAgICBBdmFoaUxvb2t1cFJlc3VsdEZsYWdzIGZsYWdzLAorICAgIHZvaWQqIHVzZXJkYXRhKSB7CisKKyAgICBBdmFoaVNIb3N0TmFtZVJlc29sdmVyICpyID0gdXNlcmRhdGE7CisKKyAgICBhc3NlcnQocnIpOworICAgIGFzc2VydChyKTsKKworCisgICAgc3dpdGNoIChldmVudCkgeworICAgICAgICBjYXNlIEFWQUhJX0JST1dTRVJfTkVXOgorICAgICAgICAgICAgYXNzZXJ0KHJlY29yZCk7CisgICAgICAgICAgICBhc3NlcnQocmVjb3JkLT5rZXktPnR5cGUgPT0gQVZBSElfRE5TX1RZUEVfQSB8fCByZWNvcmQtPmtleS0+dHlwZSA9PSBBVkFISV9ETlNfVFlQRV9BQUFBKTsKKworICAgICAgICAgICAgaWYgKHItPmludGVyZmFjZSA+IDAgJiYgaW50ZXJmYWNlICE9IHItPmludGVyZmFjZSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGlmIChyLT5wcm90b2NvbCAhPSBBVkFISV9QUk9UT19VTlNQRUMgJiYgcHJvdG9jb2wgIT0gci0+cHJvdG9jb2wpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoci0+aW50ZXJmYWNlIDw9IDApCisgICAgICAgICAgICAgICAgci0+aW50ZXJmYWNlID0gaW50ZXJmYWNlOworCisgICAgICAgICAgICBpZiAoci0+cHJvdG9jb2wgPT0gQVZBSElfUFJPVE9fVU5TUEVDKQorICAgICAgICAgICAgICAgIHItPnByb3RvY29sID0gcHJvdG9jb2w7CisKKyAgICAgICAgICAgIGlmICghci0+YWRkcmVzc19yZWNvcmQpIHsKKyAgICAgICAgICAgICAgICByLT5hZGRyZXNzX3JlY29yZCA9IGF2YWhpX3JlY29yZF9yZWYocmVjb3JkKTsKKyAgICAgICAgICAgICAgICByLT5mbGFncyA9IGZsYWdzOworCisgICAgICAgICAgICAgICAgZmluaXNoKHIsIEFWQUhJX1JFU09MVkVSX0ZPVU5EKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBVkFISV9CUk9XU0VSX1JFTU9WRToKKyAgICAgICAgICAgIGFzc2VydChyZWNvcmQpOworICAgICAgICAgICAgYXNzZXJ0KHJlY29yZC0+a2V5LT50eXBlID09IEFWQUhJX0ROU19UWVBFX0EgfHwgcmVjb3JkLT5rZXktPnR5cGUgPT0gQVZBSElfRE5TX1RZUEVfQUFBQSk7CisKKyAgICAgICAgICAgIGlmIChyLT5hZGRyZXNzX3JlY29yZCAmJiBhdmFoaV9yZWNvcmRfZXF1YWxfbm9fdHRsKHJlY29yZCwgci0+YWRkcmVzc19yZWNvcmQpKSB7CisgICAgICAgICAgICAgICAgYXZhaGlfcmVjb3JkX3VucmVmKHItPmFkZHJlc3NfcmVjb3JkKTsKKyAgICAgICAgICAgICAgICByLT5hZGRyZXNzX3JlY29yZCA9IE5VTEw7CisKKyAgICAgICAgICAgICAgICByLT5mbGFncyA9IGZsYWdzOworCisKKyAgICAgICAgICAgICAgICAvKiogTG9vayBmb3IgYSByZXBsYWNlbWVudCAqLworICAgICAgICAgICAgICAgIGlmIChyLT5yZWNvcmRfYnJvd3Nlcl9hYWFhKQorICAgICAgICAgICAgICAgICAgICBhdmFoaV9zX3JlY29yZF9icm93c2VyX3Jlc3RhcnQoci0+cmVjb3JkX2Jyb3dzZXJfYWFhYSk7CisgICAgICAgICAgICAgICAgaWYgKHItPnJlY29yZF9icm93c2VyX2EpCisgICAgICAgICAgICAgICAgICAgIGF2YWhpX3NfcmVjb3JkX2Jyb3dzZXJfcmVzdGFydChyLT5yZWNvcmRfYnJvd3Nlcl9hKTsKKworICAgICAgICAgICAgICAgIHN0YXJ0X3RpbWVvdXQocik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQVZBSElfQlJPV1NFUl9DQUNIRV9FWEhBVVNURUQ6CisgICAgICAgIGNhc2UgQVZBSElfQlJPV1NFUl9BTExfRk9SX05PVzoKKyAgICAgICAgICAgIC8qIElnbm9yZSAqLworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBVkFISV9CUk9XU0VSX0ZBSUxVUkU6CisKKyAgICAgICAgICAgIC8qIFN0b3AgYnJvd3NlcnMgKi8KKworICAgICAgICAgICAgaWYgKHItPnJlY29yZF9icm93c2VyX2FhYWEpCisgICAgICAgICAgICAgICAgYXZhaGlfc19yZWNvcmRfYnJvd3Nlcl9mcmVlKHItPnJlY29yZF9icm93c2VyX2FhYWEpOworICAgICAgICAgICAgaWYgKHItPnJlY29yZF9icm93c2VyX2EpCisgICAgICAgICAgICAgICAgYXZhaGlfc19yZWNvcmRfYnJvd3Nlcl9mcmVlKHItPnJlY29yZF9icm93c2VyX2EpOworCisgICAgICAgICAgICByLT5yZWNvcmRfYnJvd3Nlcl9hID0gci0+cmVjb3JkX2Jyb3dzZXJfYWFhYSA9IE5VTEw7CisgICAgICAgICAgICByLT5mbGFncyA9IGZsYWdzOworCisgICAgICAgICAgICBmaW5pc2gociwgQVZBSElfUkVTT0xWRVJfRkFJTFVSRSk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK0F2YWhpU0hvc3ROYW1lUmVzb2x2ZXIgKmF2YWhpX3NfaG9zdF9uYW1lX3Jlc29sdmVyX25ldygKKyAgICBBdmFoaVNlcnZlciAqc2VydmVyLAorICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsCisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICBjb25zdCBjaGFyICpob3N0X25hbWUsCisgICAgQXZhaGlQcm90b2NvbCBhcHJvdG9jb2wsCisgICAgQXZhaGlMb29rdXBGbGFncyBmbGFncywKKyAgICBBdmFoaVNIb3N0TmFtZVJlc29sdmVyQ2FsbGJhY2sgY2FsbGJhY2ssCisgICAgdm9pZCogdXNlcmRhdGEpIHsKKworICAgIEF2YWhpU0hvc3ROYW1lUmVzb2x2ZXIgKnI7CisgICAgQXZhaGlLZXkgKms7CisKKyAgICBhc3NlcnQoc2VydmVyKTsKKyAgICBhc3NlcnQoaG9zdF9uYW1lKTsKKyAgICBhc3NlcnQoY2FsbGJhY2spOworCisgICAgQVZBSElfQ0hFQ0tfVkFMSURJVFlfUkVUVVJOX05VTEwoc2VydmVyLCBBVkFISV9JRl9WQUxJRChpbnRlcmZhY2UpLCBBVkFISV9FUlJfSU5WQUxJRF9JTlRFUkZBQ0UpOworICAgIEFWQUhJX0NIRUNLX1ZBTElESVRZX1JFVFVSTl9OVUxMKHNlcnZlciwgQVZBSElfUFJPVE9fVkFMSUQocHJvdG9jb2wpLCBBVkFISV9FUlJfSU5WQUxJRF9QUk9UT0NPTCk7CisgICAgQVZBSElfQ0hFQ0tfVkFMSURJVFlfUkVUVVJOX05VTEwoc2VydmVyLCBhdmFoaV9pc192YWxpZF9mcWRuKGhvc3RfbmFtZSksIEFWQUhJX0VSUl9JTlZBTElEX0hPU1RfTkFNRSk7CisgICAgQVZBSElfQ0hFQ0tfVkFMSURJVFlfUkVUVVJOX05VTEwoc2VydmVyLCBBVkFISV9QUk9UT19WQUxJRChhcHJvdG9jb2wpLCBBVkFISV9FUlJfSU5WQUxJRF9QUk9UT0NPTCk7CisgICAgQVZBSElfQ0hFQ0tfVkFMSURJVFlfUkVUVVJOX05VTEwoc2VydmVyLCBBVkFISV9GTEFHU19WQUxJRChmbGFncywgQVZBSElfTE9PS1VQX1VTRV9XSURFX0FSRUF8QVZBSElfTE9PS1VQX1VTRV9NVUxUSUNBU1QpLCBBVkFISV9FUlJfSU5WQUxJRF9GTEFHUyk7CisKKyAgICBpZiAoIShyID0gYXZhaGlfbmV3KEF2YWhpU0hvc3ROYW1lUmVzb2x2ZXIsIDEpKSkgeworICAgICAgICBhdmFoaV9zZXJ2ZXJfc2V0X2Vycm5vKHNlcnZlciwgQVZBSElfRVJSX05PX01FTU9SWSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHItPnNlcnZlciA9IHNlcnZlcjsKKyAgICByLT5ob3N0X25hbWUgPSBhdmFoaV9ub3JtYWxpemVfbmFtZV9zdHJkdXAoaG9zdF9uYW1lKTsKKyAgICByLT5jYWxsYmFjayA9IGNhbGxiYWNrOworICAgIHItPnVzZXJkYXRhID0gdXNlcmRhdGE7CisgICAgci0+YWRkcmVzc19yZWNvcmQgPSBOVUxMOworICAgIHItPmludGVyZmFjZSA9IGludGVyZmFjZTsKKyAgICByLT5wcm90b2NvbCA9IHByb3RvY29sOworICAgIHItPmZsYWdzID0gMDsKKworICAgIHItPnJlY29yZF9icm93c2VyX2EgPSByLT5yZWNvcmRfYnJvd3Nlcl9hYWFhID0gTlVMTDsKKworICAgIHItPnRpbWVfZXZlbnQgPSBOVUxMOworCisgICAgQVZBSElfTExJU1RfUFJFUEVORChBdmFoaVNIb3N0TmFtZVJlc29sdmVyLCByZXNvbHZlciwgc2VydmVyLT5ob3N0X25hbWVfcmVzb2x2ZXJzLCByKTsKKworICAgIHItPnJlY29yZF9icm93c2VyX2FhYWEgPSByLT5yZWNvcmRfYnJvd3Nlcl9hID0gTlVMTDsKKworICAgIGlmIChhcHJvdG9jb2wgPT0gQVZBSElfUFJPVE9fSU5FVCB8fCBhcHJvdG9jb2wgPT0gQVZBSElfUFJPVE9fVU5TUEVDKSB7CisgICAgICAgIGsgPSBhdmFoaV9rZXlfbmV3KGhvc3RfbmFtZSwgQVZBSElfRE5TX0NMQVNTX0lOLCBBVkFISV9ETlNfVFlQRV9BKTsKKyAgICAgICAgci0+cmVjb3JkX2Jyb3dzZXJfYSA9IGF2YWhpX3NfcmVjb3JkX2Jyb3dzZXJfbmV3KHNlcnZlciwgaW50ZXJmYWNlLCBwcm90b2NvbCwgaywgZmxhZ3MsIHJlY29yZF9icm93c2VyX2NhbGxiYWNrLCByKTsKKyAgICAgICAgYXZhaGlfa2V5X3VucmVmKGspOworCisgICAgICAgIGlmICghci0+cmVjb3JkX2Jyb3dzZXJfYSkKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBpZiAoYXByb3RvY29sID09IEFWQUhJX1BST1RPX0lORVQ2IHx8IGFwcm90b2NvbCA9PSBBVkFISV9QUk9UT19VTlNQRUMpIHsKKyAgICAgICAgayA9IGF2YWhpX2tleV9uZXcoaG9zdF9uYW1lLCBBVkFISV9ETlNfQ0xBU1NfSU4sIEFWQUhJX0ROU19UWVBFX0FBQUEpOworICAgICAgICByLT5yZWNvcmRfYnJvd3Nlcl9hYWFhID0gYXZhaGlfc19yZWNvcmRfYnJvd3Nlcl9uZXcoc2VydmVyLCBpbnRlcmZhY2UsIHByb3RvY29sLCBrLCBmbGFncywgcmVjb3JkX2Jyb3dzZXJfY2FsbGJhY2ssIHIpOworICAgICAgICBhdmFoaV9rZXlfdW5yZWYoayk7CisKKyAgICAgICAgaWYgKCFyLT5yZWNvcmRfYnJvd3Nlcl9hYWFhKQorICAgICAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGFzc2VydChyLT5yZWNvcmRfYnJvd3Nlcl9hYWFhIHx8IHItPnJlY29yZF9icm93c2VyX2EpOworCisgICAgc3RhcnRfdGltZW91dChyKTsKKworICAgIHJldHVybiByOworCitmYWlsOgorICAgIGF2YWhpX3NfaG9zdF9uYW1lX3Jlc29sdmVyX2ZyZWUocik7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgYXZhaGlfc19ob3N0X25hbWVfcmVzb2x2ZXJfZnJlZShBdmFoaVNIb3N0TmFtZVJlc29sdmVyICpyKSB7CisgICAgYXNzZXJ0KHIpOworCisgICAgQVZBSElfTExJU1RfUkVNT1ZFKEF2YWhpU0hvc3ROYW1lUmVzb2x2ZXIsIHJlc29sdmVyLCByLT5zZXJ2ZXItPmhvc3RfbmFtZV9yZXNvbHZlcnMsIHIpOworCisgICAgaWYgKHItPnJlY29yZF9icm93c2VyX2EpCisgICAgICAgIGF2YWhpX3NfcmVjb3JkX2Jyb3dzZXJfZnJlZShyLT5yZWNvcmRfYnJvd3Nlcl9hKTsKKworICAgIGlmIChyLT5yZWNvcmRfYnJvd3Nlcl9hYWFhKQorICAgICAgICBhdmFoaV9zX3JlY29yZF9icm93c2VyX2ZyZWUoci0+cmVjb3JkX2Jyb3dzZXJfYWFhYSk7CisKKyAgICBpZiAoci0+dGltZV9ldmVudCkKKyAgICAgICAgYXZhaGlfdGltZV9ldmVudF9mcmVlKHItPnRpbWVfZXZlbnQpOworCisgICAgaWYgKHItPmFkZHJlc3NfcmVjb3JkKQorICAgICAgICBhdmFoaV9yZWNvcmRfdW5yZWYoci0+YWRkcmVzc19yZWNvcmQpOworCisgICAgYXZhaGlfZnJlZShyLT5ob3N0X25hbWUpOworICAgIGF2YWhpX2ZyZWUocik7Cit9CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9yZXNvbHZlLXNlcnZpY2UuYyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL3Jlc29sdmUtc2VydmljZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNzdhNTAKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9yZXNvbHZlLXNlcnZpY2UuYwpAQCAtMCwwICsxLDQ4OSBAQAorLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2RvbWFpbi5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi90aW1ldmFsLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL21hbGxvYy5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9lcnJvci5oPgorCisjaW5jbHVkZSAiYnJvd3NlLmgiCisjaW5jbHVkZSAibG9nLmgiCisKKyNkZWZpbmUgVElNRU9VVF9NU0VDIDUwMDAKKworc3RydWN0IEF2YWhpU1NlcnZpY2VSZXNvbHZlciB7CisgICAgQXZhaGlTZXJ2ZXIgKnNlcnZlcjsKKyAgICBjaGFyICpzZXJ2aWNlX25hbWU7CisgICAgY2hhciAqc2VydmljZV90eXBlOworICAgIGNoYXIgKmRvbWFpbl9uYW1lOworICAgIEF2YWhpUHJvdG9jb2wgYWRkcmVzc19wcm90b2NvbDsKKworICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2U7CisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbDsKKworICAgIEF2YWhpU1JlY29yZEJyb3dzZXIgKnJlY29yZF9icm93c2VyX3NydjsKKyAgICBBdmFoaVNSZWNvcmRCcm93c2VyICpyZWNvcmRfYnJvd3Nlcl90eHQ7CisgICAgQXZhaGlTUmVjb3JkQnJvd3NlciAqcmVjb3JkX2Jyb3dzZXJfYTsKKyAgICBBdmFoaVNSZWNvcmRCcm93c2VyICpyZWNvcmRfYnJvd3Nlcl9hYWFhOworCisgICAgQXZhaGlSZWNvcmQgKnNydl9yZWNvcmQsICp0eHRfcmVjb3JkLCAqYWRkcmVzc19yZWNvcmQ7CisgICAgQXZhaGlMb29rdXBSZXN1bHRGbGFncyBzcnZfZmxhZ3MsIHR4dF9mbGFncywgYWRkcmVzc19mbGFnczsKKworICAgIEF2YWhpU1NlcnZpY2VSZXNvbHZlckNhbGxiYWNrIGNhbGxiYWNrOworICAgIHZvaWQqIHVzZXJkYXRhOworICAgIEF2YWhpTG9va3VwRmxhZ3MgdXNlcl9mbGFnczsKKworICAgIEF2YWhpVGltZUV2ZW50ICp0aW1lX2V2ZW50OworCisgICAgQVZBSElfTExJU1RfRklFTERTKEF2YWhpU1NlcnZpY2VSZXNvbHZlciwgcmVzb2x2ZXIpOworfTsKKworc3RhdGljIHZvaWQgZmluaXNoKEF2YWhpU1NlcnZpY2VSZXNvbHZlciAqciwgQXZhaGlSZXNvbHZlckV2ZW50IGV2ZW50KSB7CisgICAgQXZhaGlMb29rdXBSZXN1bHRGbGFncyBmbGFnczsKKworICAgIGFzc2VydChyKTsKKworICAgIGlmIChyLT50aW1lX2V2ZW50KSB7CisgICAgICAgIGF2YWhpX3RpbWVfZXZlbnRfZnJlZShyLT50aW1lX2V2ZW50KTsKKyAgICAgICAgci0+dGltZV9ldmVudCA9IE5VTEw7CisgICAgfQorCisgICAgZmxhZ3MgPQorICAgICAgICByLT50eHRfZmxhZ3MgfAorICAgICAgICByLT5zcnZfZmxhZ3MgfAorICAgICAgICByLT5hZGRyZXNzX2ZsYWdzOworCisgICAgc3dpdGNoIChldmVudCkgeworICAgICAgICBjYXNlIEFWQUhJX1JFU09MVkVSX0ZBSUxVUkU6CisKKyAgICAgICAgICAgIHItPmNhbGxiYWNrKAorICAgICAgICAgICAgICAgIHIsCisgICAgICAgICAgICAgICAgci0+aW50ZXJmYWNlLAorICAgICAgICAgICAgICAgIHItPnByb3RvY29sLAorICAgICAgICAgICAgICAgIGV2ZW50LAorICAgICAgICAgICAgICAgIHItPnNlcnZpY2VfbmFtZSwKKyAgICAgICAgICAgICAgICByLT5zZXJ2aWNlX3R5cGUsCisgICAgICAgICAgICAgICAgci0+ZG9tYWluX25hbWUsCisgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICBmbGFncywKKyAgICAgICAgICAgICAgICByLT51c2VyZGF0YSk7CisKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQVZBSElfUkVTT0xWRVJfRk9VTkQ6IHsKKyAgICAgICAgICAgIEF2YWhpQWRkcmVzcyBhOworCisgICAgICAgICAgICBhc3NlcnQoZXZlbnQgPT0gQVZBSElfUkVTT0xWRVJfRk9VTkQpOworCisgICAgICAgICAgICBhc3NlcnQoci0+c3J2X3JlY29yZCk7CisKKyAgICAgICAgICAgIGlmIChyLT5hZGRyZXNzX3JlY29yZCkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoci0+YWRkcmVzc19yZWNvcmQtPmtleS0+dHlwZSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEFWQUhJX0ROU19UWVBFX0E6CisgICAgICAgICAgICAgICAgICAgICAgICBhLnByb3RvID0gQVZBSElfUFJPVE9fSU5FVDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGEuZGF0YS5pcHY0ID0gci0+YWRkcmVzc19yZWNvcmQtPmRhdGEuYS5hZGRyZXNzOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBVkFISV9ETlNfVFlQRV9BQUFBOgorICAgICAgICAgICAgICAgICAgICAgICAgYS5wcm90byA9IEFWQUhJX1BST1RPX0lORVQ2OworICAgICAgICAgICAgICAgICAgICAgICAgYS5kYXRhLmlwdjYgPSByLT5hZGRyZXNzX3JlY29yZC0+ZGF0YS5hYWFhLmFkZHJlc3M7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KDApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgci0+Y2FsbGJhY2soCisgICAgICAgICAgICAgICAgciwKKyAgICAgICAgICAgICAgICByLT5pbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgci0+cHJvdG9jb2wsCisgICAgICAgICAgICAgICAgZXZlbnQsCisgICAgICAgICAgICAgICAgci0+c2VydmljZV9uYW1lLAorICAgICAgICAgICAgICAgIHItPnNlcnZpY2VfdHlwZSwKKyAgICAgICAgICAgICAgICByLT5kb21haW5fbmFtZSwKKyAgICAgICAgICAgICAgICByLT5zcnZfcmVjb3JkLT5kYXRhLnNydi5uYW1lLAorICAgICAgICAgICAgICAgIHItPmFkZHJlc3NfcmVjb3JkID8gJmEgOiBOVUxMLAorICAgICAgICAgICAgICAgIHItPnNydl9yZWNvcmQtPmRhdGEuc3J2LnBvcnQsCisgICAgICAgICAgICAgICAgci0+dHh0X3JlY29yZCA/IHItPnR4dF9yZWNvcmQtPmRhdGEudHh0LnN0cmluZ19saXN0IDogTlVMTCwKKyAgICAgICAgICAgICAgICBmbGFncywKKyAgICAgICAgICAgICAgICByLT51c2VyZGF0YSk7CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB0aW1lX2V2ZW50X2NhbGxiYWNrKEF2YWhpVGltZUV2ZW50ICplLCB2b2lkICp1c2VyZGF0YSkgeworICAgIEF2YWhpU1NlcnZpY2VSZXNvbHZlciAqciA9IHVzZXJkYXRhOworCisgICAgYXNzZXJ0KGUpOworICAgIGFzc2VydChyKTsKKworICAgIGF2YWhpX3NlcnZlcl9zZXRfZXJybm8oci0+c2VydmVyLCBBVkFISV9FUlJfVElNRU9VVCk7CisgICAgZmluaXNoKHIsIEFWQUhJX1JFU09MVkVSX0ZBSUxVUkUpOworfQorCitzdGF0aWMgdm9pZCBzdGFydF90aW1lb3V0KEF2YWhpU1NlcnZpY2VSZXNvbHZlciAqcikgeworICAgIHN0cnVjdCB0aW1ldmFsIHR2OworICAgIGFzc2VydChyKTsKKworICAgIGlmIChyLT50aW1lX2V2ZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBhdmFoaV9lbGFwc2VfdGltZSgmdHYsIFRJTUVPVVRfTVNFQywgMCk7CisKKyAgICByLT50aW1lX2V2ZW50ID0gYXZhaGlfdGltZV9ldmVudF9uZXcoci0+c2VydmVyLT50aW1lX2V2ZW50X3F1ZXVlLCAmdHYsIHRpbWVfZXZlbnRfY2FsbGJhY2ssIHIpOworfQorCitzdGF0aWMgdm9pZCByZWNvcmRfYnJvd3Nlcl9jYWxsYmFjaygKKyAgICBBdmFoaVNSZWNvcmRCcm93c2VyKnJyLAorICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsCisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICBBdmFoaUJyb3dzZXJFdmVudCBldmVudCwKKyAgICBBdmFoaVJlY29yZCAqcmVjb3JkLAorICAgIEF2YWhpTG9va3VwUmVzdWx0RmxhZ3MgZmxhZ3MsCisgICAgdm9pZCogdXNlcmRhdGEpIHsKKworICAgIEF2YWhpU1NlcnZpY2VSZXNvbHZlciAqciA9IHVzZXJkYXRhOworCisgICAgYXNzZXJ0KHJyKTsKKyAgICBhc3NlcnQocik7CisKKyAgICBpZiAocnIgPT0gci0+cmVjb3JkX2Jyb3dzZXJfYWFhYSB8fCByciA9PSByLT5yZWNvcmRfYnJvd3Nlcl9hKQorICAgICAgICByLT5hZGRyZXNzX2ZsYWdzID0gZmxhZ3M7CisgICAgZWxzZSBpZiAocnIgPT0gci0+cmVjb3JkX2Jyb3dzZXJfc3J2KQorICAgICAgICByLT5zcnZfZmxhZ3MgPSBmbGFnczsKKyAgICBlbHNlIGlmIChyciA9PSByLT5yZWNvcmRfYnJvd3Nlcl90eHQpCisgICAgICAgIHItPnR4dF9mbGFncyA9IGZsYWdzOworCisgICAgc3dpdGNoIChldmVudCkgeworCisgICAgICAgIGNhc2UgQVZBSElfQlJPV1NFUl9ORVc6IHsKKyAgICAgICAgICAgIGludCBjaGFuZ2VkID0gMDsKKyAgICAgICAgICAgIGFzc2VydChyZWNvcmQpOworCisgICAgICAgICAgICBpZiAoci0+aW50ZXJmYWNlID4gMCAmJiBpbnRlcmZhY2UgPiAwICYmICBpbnRlcmZhY2UgIT0gci0+aW50ZXJmYWNlKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKHItPnByb3RvY29sICE9IEFWQUhJX1BST1RPX1VOU1BFQyAmJiBwcm90b2NvbCAhPSBBVkFISV9QUk9UT19VTlNQRUMgJiYgcHJvdG9jb2wgIT0gci0+cHJvdG9jb2wpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoci0+aW50ZXJmYWNlIDw9IDApCisgICAgICAgICAgICAgICAgci0+aW50ZXJmYWNlID0gaW50ZXJmYWNlOworCisgICAgICAgICAgICBpZiAoci0+cHJvdG9jb2wgPT0gQVZBSElfUFJPVE9fVU5TUEVDKQorICAgICAgICAgICAgICAgIHItPnByb3RvY29sID0gcHJvdG9jb2w7CisKKyAgICAgICAgICAgIHN3aXRjaCAocmVjb3JkLT5rZXktPnR5cGUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEFWQUhJX0ROU19UWVBFX1NSVjoKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFyLT5zcnZfcmVjb3JkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByLT5zcnZfcmVjb3JkID0gYXZhaGlfcmVjb3JkX3JlZihyZWNvcmQpOworICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IDE7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyLT5yZWNvcmRfYnJvd3Nlcl9hKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaGlfc19yZWNvcmRfYnJvd3Nlcl9mcmVlKHItPnJlY29yZF9icm93c2VyX2EpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHItPnJlY29yZF9icm93c2VyX2EgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoci0+cmVjb3JkX2Jyb3dzZXJfYWFhYSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWhpX3NfcmVjb3JkX2Jyb3dzZXJfZnJlZShyLT5yZWNvcmRfYnJvd3Nlcl9hYWFhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByLT5yZWNvcmRfYnJvd3Nlcl9hYWFhID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoci0+dXNlcl9mbGFncyAmIEFWQUhJX0xPT0tVUF9OT19BRERSRVNTKSkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHItPmFkZHJlc3NfcHJvdG9jb2wgPT0gQVZBSElfUFJPVE9fSU5FVCB8fCByLT5hZGRyZXNzX3Byb3RvY29sID09IEFWQUhJX1BST1RPX1VOU1BFQykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdmFoaUtleSAqayA9IGF2YWhpX2tleV9uZXcoci0+c3J2X3JlY29yZC0+ZGF0YS5zcnYubmFtZSwgQVZBSElfRE5TX0NMQVNTX0lOLCBBVkFISV9ETlNfVFlQRV9BKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0+cmVjb3JkX2Jyb3dzZXJfYSA9IGF2YWhpX3NfcmVjb3JkX2Jyb3dzZXJfbmV3KHItPnNlcnZlciwgci0+aW50ZXJmYWNlLCByLT5wcm90b2NvbCwgaywgci0+dXNlcl9mbGFncyAmIH4oQVZBSElfTE9PS1VQX05PX1RYVHxBVkFISV9MT09LVVBfTk9fQUREUkVTUyksIHJlY29yZF9icm93c2VyX2NhbGxiYWNrLCByKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaGlfa2V5X3VucmVmKGspOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyLT5hZGRyZXNzX3Byb3RvY29sID09IEFWQUhJX1BST1RPX0lORVQ2IHx8IHItPmFkZHJlc3NfcHJvdG9jb2wgPT0gQVZBSElfUFJPVE9fVU5TUEVDKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF2YWhpS2V5ICprID0gYXZhaGlfa2V5X25ldyhyLT5zcnZfcmVjb3JkLT5kYXRhLnNydi5uYW1lLCBBVkFISV9ETlNfQ0xBU1NfSU4sIEFWQUhJX0ROU19UWVBFX0FBQUEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLT5yZWNvcmRfYnJvd3Nlcl9hYWFhID0gYXZhaGlfc19yZWNvcmRfYnJvd3Nlcl9uZXcoci0+c2VydmVyLCByLT5pbnRlcmZhY2UsIHItPnByb3RvY29sLCBrLCByLT51c2VyX2ZsYWdzICYgfihBVkFISV9MT09LVVBfTk9fVFhUfEFWQUhJX0xPT0tVUF9OT19BRERSRVNTKSwgcmVjb3JkX2Jyb3dzZXJfY2FsbGJhY2ssIHIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFoaV9rZXlfdW5yZWYoayk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBBVkFISV9ETlNfVFlQRV9UWFQ6CisKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KCEoci0+dXNlcl9mbGFncyAmIEFWQUhJX0xPT0tVUF9OT19UWFQpKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoIXItPnR4dF9yZWNvcmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHItPnR4dF9yZWNvcmQgPSBhdmFoaV9yZWNvcmRfcmVmKHJlY29yZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgQVZBSElfRE5TX1RZUEVfQToKKyAgICAgICAgICAgICAgICBjYXNlIEFWQUhJX0ROU19UWVBFX0FBQUE6CisKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KCEoci0+dXNlcl9mbGFncyAmIEFWQUhJX0xPT0tVUF9OT19BRERSRVNTKSk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFyLT5hZGRyZXNzX3JlY29yZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgci0+YWRkcmVzc19yZWNvcmQgPSBhdmFoaV9yZWNvcmRfcmVmKHJlY29yZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGFib3J0KCk7CisgICAgICAgICAgICB9CisKKworICAgICAgICAgICAgaWYgKGNoYW5nZWQgJiYKKyAgICAgICAgICAgICAgICByLT5zcnZfcmVjb3JkICYmCisgICAgICAgICAgICAgICAgKHItPnR4dF9yZWNvcmQgfHwgKHItPnVzZXJfZmxhZ3MgJiBBVkFISV9MT09LVVBfTk9fVFhUKSkgJiYKKyAgICAgICAgICAgICAgICAoci0+YWRkcmVzc19yZWNvcmQgfHwgKHItPnVzZXJfZmxhZ3MgJiBBVkFISV9MT09LVVBfTk9fQUREUkVTUykpKQorICAgICAgICAgICAgICAgIGZpbmlzaChyLCBBVkFISV9SRVNPTFZFUl9GT1VORCk7CisKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIH0KKworICAgICAgICBjYXNlIEFWQUhJX0JST1dTRVJfUkVNT1ZFOgorCisgICAgICAgICAgICBhc3NlcnQocmVjb3JkKTsKKworICAgICAgICAgICAgc3dpdGNoIChyZWNvcmQtPmtleS0+dHlwZSkgeworICAgICAgICAgICAgICAgIGNhc2UgQVZBSElfRE5TX1RZUEVfU1JWOgorCisgICAgICAgICAgICAgICAgICAgIGlmIChyLT5zcnZfcmVjb3JkICYmIGF2YWhpX3JlY29yZF9lcXVhbF9ub190dGwocmVjb3JkLCByLT5zcnZfcmVjb3JkKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYXZhaGlfcmVjb3JkX3VucmVmKHItPnNydl9yZWNvcmQpOworICAgICAgICAgICAgICAgICAgICAgICAgci0+c3J2X3JlY29yZCA9IE5VTEw7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyLT5yZWNvcmRfYnJvd3Nlcl9hKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaGlfc19yZWNvcmRfYnJvd3Nlcl9mcmVlKHItPnJlY29yZF9icm93c2VyX2EpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHItPnJlY29yZF9icm93c2VyX2EgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoci0+cmVjb3JkX2Jyb3dzZXJfYWFhYSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWhpX3NfcmVjb3JkX2Jyb3dzZXJfZnJlZShyLT5yZWNvcmRfYnJvd3Nlcl9hYWFhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByLT5yZWNvcmRfYnJvd3Nlcl9hYWFhID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgLyoqIExvb2sgZm9yIGEgcmVwbGFjZW1lbnQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGF2YWhpX3NfcmVjb3JkX2Jyb3dzZXJfcmVzdGFydChyLT5yZWNvcmRfYnJvd3Nlcl9zcnYpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRfdGltZW91dChyKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBBVkFISV9ETlNfVFlQRV9UWFQ6CisKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KCEoci0+dXNlcl9mbGFncyAmIEFWQUhJX0xPT0tVUF9OT19UWFQpKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoci0+dHh0X3JlY29yZCAmJiBhdmFoaV9yZWNvcmRfZXF1YWxfbm9fdHRsKHJlY29yZCwgci0+dHh0X3JlY29yZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF2YWhpX3JlY29yZF91bnJlZihyLT50eHRfcmVjb3JkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHItPnR4dF9yZWNvcmQgPSBOVUxMOworCisgICAgICAgICAgICAgICAgICAgICAgICAvKiogTG9vayBmb3IgYSByZXBsYWNlbWVudCAqLworICAgICAgICAgICAgICAgICAgICAgICAgYXZhaGlfc19yZWNvcmRfYnJvd3Nlcl9yZXN0YXJ0KHItPnJlY29yZF9icm93c2VyX3R4dCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF90aW1lb3V0KHIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBBVkFISV9ETlNfVFlQRV9BOgorICAgICAgICAgICAgICAgIGNhc2UgQVZBSElfRE5TX1RZUEVfQUFBQToKKworICAgICAgICAgICAgICAgICAgICBhc3NlcnQoIShyLT51c2VyX2ZsYWdzICYgQVZBSElfTE9PS1VQX05PX0FERFJFU1MpKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoci0+YWRkcmVzc19yZWNvcmQgJiYgYXZhaGlfcmVjb3JkX2VxdWFsX25vX3R0bChyZWNvcmQsIHItPmFkZHJlc3NfcmVjb3JkKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYXZhaGlfcmVjb3JkX3VucmVmKHItPmFkZHJlc3NfcmVjb3JkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHItPmFkZHJlc3NfcmVjb3JkID0gTlVMTDsKKworICAgICAgICAgICAgICAgICAgICAgICAgLyoqIExvb2sgZm9yIGEgcmVwbGFjZW1lbnQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyLT5yZWNvcmRfYnJvd3Nlcl9hYWFhKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWhpX3NfcmVjb3JkX2Jyb3dzZXJfcmVzdGFydChyLT5yZWNvcmRfYnJvd3Nlcl9hYWFhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyLT5yZWNvcmRfYnJvd3Nlcl9hKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWhpX3NfcmVjb3JkX2Jyb3dzZXJfcmVzdGFydChyLT5yZWNvcmRfYnJvd3Nlcl9hKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X3RpbWVvdXQocik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBhYm9ydCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFWQUhJX0JST1dTRVJfQ0FDSEVfRVhIQVVTVEVEOgorICAgICAgICBjYXNlIEFWQUhJX0JST1dTRVJfQUxMX0ZPUl9OT1c6CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFWQUhJX0JST1dTRVJfRkFJTFVSRToKKworICAgICAgICAgICAgaWYgKHJyID09IHItPnJlY29yZF9icm93c2VyX2EgJiYgci0+cmVjb3JkX2Jyb3dzZXJfYWFhYSkgeworICAgICAgICAgICAgICAgIC8qIFdlIHdlcmUgbG9va2luZyBmb3IgYm90aCBBQUFBIGFuZCBBLCBhbmQgdGhlIG90aGVyIHF1ZXJ5IGlzIHN0aWxsIGxpdmluZywgc28gd2UnbGwgbm90IGRpZSAqLworICAgICAgICAgICAgICAgIGF2YWhpX3NfcmVjb3JkX2Jyb3dzZXJfZnJlZShyLT5yZWNvcmRfYnJvd3Nlcl9hKTsKKyAgICAgICAgICAgICAgICByLT5yZWNvcmRfYnJvd3Nlcl9hID0gTlVMTDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHJyID09IHItPnJlY29yZF9icm93c2VyX2FhYWEgJiYgci0+cmVjb3JkX2Jyb3dzZXJfYSkgeworICAgICAgICAgICAgICAgIC8qIFdlIHdlcmUgbG9va2luZyBmb3IgYm90aCBBQUFBIGFuZCBBLCBhbmQgdGhlIG90aGVyIHF1ZXJ5IGlzIHN0aWxsIGxpdmluZywgc28gd2UnbGwgbm90IGRpZSAqLworICAgICAgICAgICAgICAgIGF2YWhpX3NfcmVjb3JkX2Jyb3dzZXJfZnJlZShyLT5yZWNvcmRfYnJvd3Nlcl9hYWFhKTsKKyAgICAgICAgICAgICAgICByLT5yZWNvcmRfYnJvd3Nlcl9hYWFhID0gTlVMTDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogSG1tLCBldmVyeXRoaW5nJ3MgbG9zdCwgdGVsbCB0aGUgdXNlciAqLworCisgICAgICAgICAgICBpZiAoci0+cmVjb3JkX2Jyb3dzZXJfc3J2KQorICAgICAgICAgICAgICAgIGF2YWhpX3NfcmVjb3JkX2Jyb3dzZXJfZnJlZShyLT5yZWNvcmRfYnJvd3Nlcl9zcnYpOworICAgICAgICAgICAgaWYgKHItPnJlY29yZF9icm93c2VyX3R4dCkKKyAgICAgICAgICAgICAgICBhdmFoaV9zX3JlY29yZF9icm93c2VyX2ZyZWUoci0+cmVjb3JkX2Jyb3dzZXJfdHh0KTsKKyAgICAgICAgICAgIGlmIChyLT5yZWNvcmRfYnJvd3Nlcl9hKQorICAgICAgICAgICAgICAgIGF2YWhpX3NfcmVjb3JkX2Jyb3dzZXJfZnJlZShyLT5yZWNvcmRfYnJvd3Nlcl9hKTsKKyAgICAgICAgICAgIGlmIChyLT5yZWNvcmRfYnJvd3Nlcl9hYWFhKQorICAgICAgICAgICAgICAgIGF2YWhpX3NfcmVjb3JkX2Jyb3dzZXJfZnJlZShyLT5yZWNvcmRfYnJvd3Nlcl9hYWFhKTsKKworICAgICAgICAgICAgci0+cmVjb3JkX2Jyb3dzZXJfc3J2ID0gci0+cmVjb3JkX2Jyb3dzZXJfdHh0ID0gci0+cmVjb3JkX2Jyb3dzZXJfYSA9IHItPnJlY29yZF9icm93c2VyX2FhYWEgPSBOVUxMOworCisgICAgICAgICAgICBmaW5pc2gociwgQVZBSElfUkVTT0xWRVJfRkFJTFVSRSk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK0F2YWhpU1NlcnZpY2VSZXNvbHZlciAqYXZhaGlfc19zZXJ2aWNlX3Jlc29sdmVyX25ldygKKyAgICBBdmFoaVNlcnZlciAqc2VydmVyLAorICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsCisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICBjb25zdCBjaGFyICpuYW1lLAorICAgIGNvbnN0IGNoYXIgKnR5cGUsCisgICAgY29uc3QgY2hhciAqZG9tYWluLAorICAgIEF2YWhpUHJvdG9jb2wgYXByb3RvY29sLAorICAgIEF2YWhpTG9va3VwRmxhZ3MgZmxhZ3MsCisgICAgQXZhaGlTU2VydmljZVJlc29sdmVyQ2FsbGJhY2sgY2FsbGJhY2ssCisgICAgdm9pZCogdXNlcmRhdGEpIHsKKworICAgIEF2YWhpU1NlcnZpY2VSZXNvbHZlciAqcjsKKyAgICBBdmFoaUtleSAqazsKKyAgICBjaGFyIG5bQVZBSElfRE9NQUlOX05BTUVfTUFYXTsKKyAgICBpbnQgcmV0OworCisgICAgYXNzZXJ0KHNlcnZlcik7CisgICAgYXNzZXJ0KHR5cGUpOworICAgIGFzc2VydChjYWxsYmFjayk7CisKKyAgICBBVkFISV9DSEVDS19WQUxJRElUWV9SRVRVUk5fTlVMTChzZXJ2ZXIsIEFWQUhJX0lGX1ZBTElEKGludGVyZmFjZSksIEFWQUhJX0VSUl9JTlZBTElEX0lOVEVSRkFDRSk7CisgICAgQVZBSElfQ0hFQ0tfVkFMSURJVFlfUkVUVVJOX05VTEwoc2VydmVyLCBBVkFISV9QUk9UT19WQUxJRChwcm90b2NvbCksIEFWQUhJX0VSUl9JTlZBTElEX1BST1RPQ09MKTsKKyAgICBBVkFISV9DSEVDS19WQUxJRElUWV9SRVRVUk5fTlVMTChzZXJ2ZXIsIEFWQUhJX1BST1RPX1ZBTElEKGFwcm90b2NvbCksIEFWQUhJX0VSUl9JTlZBTElEX1BST1RPQ09MKTsKKyAgICBBVkFISV9DSEVDS19WQUxJRElUWV9SRVRVUk5fTlVMTChzZXJ2ZXIsICFkb21haW4gfHwgYXZhaGlfaXNfdmFsaWRfZG9tYWluX25hbWUoZG9tYWluKSwgQVZBSElfRVJSX0lOVkFMSURfRE9NQUlOX05BTUUpOworICAgIEFWQUhJX0NIRUNLX1ZBTElESVRZX1JFVFVSTl9OVUxMKHNlcnZlciwgIW5hbWUgfHwgYXZhaGlfaXNfdmFsaWRfc2VydmljZV9uYW1lKG5hbWUpLCBBVkFISV9FUlJfSU5WQUxJRF9TRVJWSUNFX05BTUUpOworICAgIEFWQUhJX0NIRUNLX1ZBTElESVRZX1JFVFVSTl9OVUxMKHNlcnZlciwgYXZhaGlfaXNfdmFsaWRfc2VydmljZV90eXBlX3N0cmljdCh0eXBlKSwgQVZBSElfRVJSX0lOVkFMSURfU0VSVklDRV9UWVBFKTsKKyAgICBBVkFISV9DSEVDS19WQUxJRElUWV9SRVRVUk5fTlVMTChzZXJ2ZXIsIEFWQUhJX0ZMQUdTX1ZBTElEKGZsYWdzLCBBVkFISV9MT09LVVBfVVNFX1dJREVfQVJFQXxBVkFISV9MT09LVVBfVVNFX01VTFRJQ0FTVHxBVkFISV9MT09LVVBfTk9fVFhUfEFWQUhJX0xPT0tVUF9OT19BRERSRVNTKSwgQVZBSElfRVJSX0lOVkFMSURfRkxBR1MpOworCisgICAgaWYgKCFkb21haW4pCisgICAgICAgIGRvbWFpbiA9IHNlcnZlci0+ZG9tYWluX25hbWU7CisKKyAgICBpZiAoKHJldCA9IGF2YWhpX3NlcnZpY2VfbmFtZV9qb2luKG4sIHNpemVvZihuKSwgbmFtZSwgdHlwZSwgZG9tYWluKSkgPCAwKSB7CisgICAgICAgIGF2YWhpX3NlcnZlcl9zZXRfZXJybm8oc2VydmVyLCByZXQpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoIShyID0gYXZhaGlfbmV3KEF2YWhpU1NlcnZpY2VSZXNvbHZlciwgMSkpKSB7CisgICAgICAgIGF2YWhpX3NlcnZlcl9zZXRfZXJybm8oc2VydmVyLCBBVkFISV9FUlJfTk9fTUVNT1JZKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgci0+c2VydmVyID0gc2VydmVyOworICAgIHItPnNlcnZpY2VfbmFtZSA9IGF2YWhpX3N0cmR1cChuYW1lKTsKKyAgICByLT5zZXJ2aWNlX3R5cGUgPSBhdmFoaV9ub3JtYWxpemVfbmFtZV9zdHJkdXAodHlwZSk7CisgICAgci0+ZG9tYWluX25hbWUgPSBhdmFoaV9ub3JtYWxpemVfbmFtZV9zdHJkdXAoZG9tYWluKTsKKyAgICByLT5jYWxsYmFjayA9IGNhbGxiYWNrOworICAgIHItPnVzZXJkYXRhID0gdXNlcmRhdGE7CisgICAgci0+YWRkcmVzc19wcm90b2NvbCA9IGFwcm90b2NvbDsKKyAgICByLT5zcnZfcmVjb3JkID0gci0+dHh0X3JlY29yZCA9IHItPmFkZHJlc3NfcmVjb3JkID0gTlVMTDsKKyAgICByLT5zcnZfZmxhZ3MgPSByLT50eHRfZmxhZ3MgPSByLT5hZGRyZXNzX2ZsYWdzID0gMDsKKyAgICByLT5pbnRlcmZhY2UgPSBpbnRlcmZhY2U7CisgICAgci0+cHJvdG9jb2wgPSBwcm90b2NvbDsKKyAgICByLT51c2VyX2ZsYWdzID0gZmxhZ3M7CisgICAgci0+cmVjb3JkX2Jyb3dzZXJfYSA9IHItPnJlY29yZF9icm93c2VyX2FhYWEgPSByLT5yZWNvcmRfYnJvd3Nlcl9zcnYgPSByLT5yZWNvcmRfYnJvd3Nlcl90eHQgPSBOVUxMOworICAgIHItPnRpbWVfZXZlbnQgPSBOVUxMOworICAgIEFWQUhJX0xMSVNUX1BSRVBFTkQoQXZhaGlTU2VydmljZVJlc29sdmVyLCByZXNvbHZlciwgc2VydmVyLT5zZXJ2aWNlX3Jlc29sdmVycywgcik7CisKKyAgICBrID0gYXZhaGlfa2V5X25ldyhuLCBBVkFISV9ETlNfQ0xBU1NfSU4sIEFWQUhJX0ROU19UWVBFX1NSVik7CisgICAgci0+cmVjb3JkX2Jyb3dzZXJfc3J2ID0gYXZhaGlfc19yZWNvcmRfYnJvd3Nlcl9uZXcoc2VydmVyLCBpbnRlcmZhY2UsIHByb3RvY29sLCBrLCBmbGFncyAmIH4oQVZBSElfTE9PS1VQX05PX1RYVHxBVkFISV9MT09LVVBfTk9fQUREUkVTUyksIHJlY29yZF9icm93c2VyX2NhbGxiYWNrLCByKTsKKyAgICBhdmFoaV9rZXlfdW5yZWYoayk7CisKKyAgICBpZiAoIXItPnJlY29yZF9icm93c2VyX3NydikgeworICAgICAgICBhdmFoaV9zX3NlcnZpY2VfcmVzb2x2ZXJfZnJlZShyKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKCEoZmxhZ3MgJiBBVkFISV9MT09LVVBfTk9fVFhUKSkgeworICAgICAgICBrID0gYXZhaGlfa2V5X25ldyhuLCBBVkFISV9ETlNfQ0xBU1NfSU4sIEFWQUhJX0ROU19UWVBFX1RYVCk7CisgICAgICAgIHItPnJlY29yZF9icm93c2VyX3R4dCA9IGF2YWhpX3NfcmVjb3JkX2Jyb3dzZXJfbmV3KHNlcnZlciwgaW50ZXJmYWNlLCBwcm90b2NvbCwgaywgZmxhZ3MgJiB+KEFWQUhJX0xPT0tVUF9OT19UWFR8QVZBSElfTE9PS1VQX05PX0FERFJFU1MpLCAgcmVjb3JkX2Jyb3dzZXJfY2FsbGJhY2ssIHIpOworICAgICAgICBhdmFoaV9rZXlfdW5yZWYoayk7CisKKyAgICAgICAgaWYgKCFyLT5yZWNvcmRfYnJvd3Nlcl90eHQpIHsKKyAgICAgICAgICAgIGF2YWhpX3Nfc2VydmljZV9yZXNvbHZlcl9mcmVlKHIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGFydF90aW1lb3V0KHIpOworCisgICAgcmV0dXJuIHI7Cit9CisKK3ZvaWQgYXZhaGlfc19zZXJ2aWNlX3Jlc29sdmVyX2ZyZWUoQXZhaGlTU2VydmljZVJlc29sdmVyICpyKSB7CisgICAgYXNzZXJ0KHIpOworCisgICAgQVZBSElfTExJU1RfUkVNT1ZFKEF2YWhpU1NlcnZpY2VSZXNvbHZlciwgcmVzb2x2ZXIsIHItPnNlcnZlci0+c2VydmljZV9yZXNvbHZlcnMsIHIpOworCisgICAgaWYgKHItPnRpbWVfZXZlbnQpCisgICAgICAgIGF2YWhpX3RpbWVfZXZlbnRfZnJlZShyLT50aW1lX2V2ZW50KTsKKworICAgIGlmIChyLT5yZWNvcmRfYnJvd3Nlcl9zcnYpCisgICAgICAgIGF2YWhpX3NfcmVjb3JkX2Jyb3dzZXJfZnJlZShyLT5yZWNvcmRfYnJvd3Nlcl9zcnYpOworICAgIGlmIChyLT5yZWNvcmRfYnJvd3Nlcl90eHQpCisgICAgICAgIGF2YWhpX3NfcmVjb3JkX2Jyb3dzZXJfZnJlZShyLT5yZWNvcmRfYnJvd3Nlcl90eHQpOworICAgIGlmIChyLT5yZWNvcmRfYnJvd3Nlcl9hKQorICAgICAgICBhdmFoaV9zX3JlY29yZF9icm93c2VyX2ZyZWUoci0+cmVjb3JkX2Jyb3dzZXJfYSk7CisgICAgaWYgKHItPnJlY29yZF9icm93c2VyX2FhYWEpCisgICAgICAgIGF2YWhpX3NfcmVjb3JkX2Jyb3dzZXJfZnJlZShyLT5yZWNvcmRfYnJvd3Nlcl9hYWFhKTsKKworICAgIGlmIChyLT5zcnZfcmVjb3JkKQorICAgICAgICBhdmFoaV9yZWNvcmRfdW5yZWYoci0+c3J2X3JlY29yZCk7CisgICAgaWYgKHItPnR4dF9yZWNvcmQpCisgICAgICAgIGF2YWhpX3JlY29yZF91bnJlZihyLT50eHRfcmVjb3JkKTsKKyAgICBpZiAoci0+YWRkcmVzc19yZWNvcmQpCisgICAgICAgIGF2YWhpX3JlY29yZF91bnJlZihyLT5hZGRyZXNzX3JlY29yZCk7CisKKyAgICBhdmFoaV9mcmVlKHItPnNlcnZpY2VfbmFtZSk7CisgICAgYXZhaGlfZnJlZShyLT5zZXJ2aWNlX3R5cGUpOworICAgIGF2YWhpX2ZyZWUoci0+ZG9tYWluX25hbWUpOworICAgIGF2YWhpX2ZyZWUocik7Cit9CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9yZXNwb25zZS1zY2hlZC5jIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvcmVzcG9uc2Utc2NoZWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmFjMGExCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvcmVzcG9uc2Utc2NoZWQuYwpAQCAtMCwwICsxLDUxMSBAQAorLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi90aW1ldmFsLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL21hbGxvYy5oPgorCisjaW5jbHVkZSAicmVzcG9uc2Utc2NoZWQuaCIKKyNpbmNsdWRlICJsb2cuaCIKKyNpbmNsdWRlICJyci11dGlsLmgiCisKKy8qIExvY2FsIHBhY2tldHMgYXJlIHN1cHJlc3NlZCB0aGlzIGxvbmcgYWZ0ZXIgc2VuZGluZyB0aGVtICovCisjZGVmaW5lIEFWQUhJX1JFU1BPTlNFX0hJU1RPUllfTVNFQyA1MDAKKworLyogTG9jYWwgcGFja2V0cyBhcmUgZGVmZXJyZWQgdGhpcyBsb25nIGJlZm9yZSBzZW5kaW5nIHRoZW0gKi8KKyNkZWZpbmUgQVZBSElfUkVTUE9OU0VfREVGRVJfTVNFQyAyMAorCisvKiBBZGRpdGlvbmFsIGppdHRlciBmb3IgZGVmZXJyZWQgcGFja2V0cyAqLworI2RlZmluZSBBVkFISV9SRVNQT05TRV9KSVRURVJfTVNFQyAxMDAKKworLyogUmVtb3RlIHBhY2tldHMgY2FuIHN1cHByZXNzIGxvY2FsIHRyYWZmaWMgYXMgbG9uZyBhcyB0aGlzIHZhbHVlICovCisjZGVmaW5lIEFWQUhJX1JFU1BPTlNFX1NVUFBSRVNTX01TRUMgNzAwCisKK3R5cGVkZWYgc3RydWN0IEF2YWhpUmVzcG9uc2VKb2IgQXZhaGlSZXNwb25zZUpvYjsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBBVkFISV9TQ0hFRFVMRUQsCisgICAgQVZBSElfRE9ORSwKKyAgICBBVkFISV9TVVBQUkVTU0VECit9IEF2YWhpUmVzcG9uc2VKb2JTdGF0ZTsKKworc3RydWN0IEF2YWhpUmVzcG9uc2VKb2IgeworICAgIEF2YWhpUmVzcG9uc2VTY2hlZHVsZXIgKnNjaGVkdWxlcjsKKyAgICBBdmFoaVRpbWVFdmVudCAqdGltZV9ldmVudDsKKworICAgIEF2YWhpUmVzcG9uc2VKb2JTdGF0ZSBzdGF0ZTsKKyAgICBzdHJ1Y3QgdGltZXZhbCBkZWxpdmVyeTsKKworICAgIEF2YWhpUmVjb3JkICpyZWNvcmQ7CisgICAgaW50IGZsdXNoX2NhY2hlOworICAgIEF2YWhpQWRkcmVzcyBxdWVyaWVyOworICAgIGludCBxdWVyaWVyX3ZhbGlkOworCisgICAgQVZBSElfTExJU1RfRklFTERTKEF2YWhpUmVzcG9uc2VKb2IsIGpvYnMpOworfTsKKworc3RydWN0IEF2YWhpUmVzcG9uc2VTY2hlZHVsZXIgeworICAgIEF2YWhpSW50ZXJmYWNlICppbnRlcmZhY2U7CisgICAgQXZhaGlUaW1lRXZlbnRRdWV1ZSAqdGltZV9ldmVudF9xdWV1ZTsKKworICAgIEFWQUhJX0xMSVNUX0hFQUQoQXZhaGlSZXNwb25zZUpvYiwgam9icyk7CisgICAgQVZBSElfTExJU1RfSEVBRChBdmFoaVJlc3BvbnNlSm9iLCBoaXN0b3J5KTsKKyAgICBBVkFISV9MTElTVF9IRUFEKEF2YWhpUmVzcG9uc2VKb2IsIHN1cHByZXNzZWQpOworfTsKKworc3RhdGljIEF2YWhpUmVzcG9uc2VKb2IqIGpvYl9uZXcoQXZhaGlSZXNwb25zZVNjaGVkdWxlciAqcywgQXZhaGlSZWNvcmQgKnJlY29yZCwgQXZhaGlSZXNwb25zZUpvYlN0YXRlIHN0YXRlKSB7CisgICAgQXZhaGlSZXNwb25zZUpvYiAqcmo7CisKKyAgICBhc3NlcnQocyk7CisgICAgYXNzZXJ0KHJlY29yZCk7CisKKyAgICBpZiAoIShyaiA9IGF2YWhpX25ldyhBdmFoaVJlc3BvbnNlSm9iLCAxKSkpIHsKKyAgICAgICAgYXZhaGlfbG9nX2Vycm9yKF9fRklMRV9fIjogT3V0IG9mIG1lbW9yeSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByai0+c2NoZWR1bGVyID0gczsKKyAgICByai0+cmVjb3JkID0gYXZhaGlfcmVjb3JkX3JlZihyZWNvcmQpOworICAgIHJqLT50aW1lX2V2ZW50ID0gTlVMTDsKKyAgICByai0+Zmx1c2hfY2FjaGUgPSAwOworICAgIHJqLT5xdWVyaWVyX3ZhbGlkID0gMDsKKworICAgIGlmICgocmotPnN0YXRlID0gc3RhdGUpID09IEFWQUhJX1NDSEVEVUxFRCkKKyAgICAgICAgQVZBSElfTExJU1RfUFJFUEVORChBdmFoaVJlc3BvbnNlSm9iLCBqb2JzLCBzLT5qb2JzLCByaik7CisgICAgZWxzZSBpZiAocmotPnN0YXRlID09IEFWQUhJX0RPTkUpCisgICAgICAgIEFWQUhJX0xMSVNUX1BSRVBFTkQoQXZhaGlSZXNwb25zZUpvYiwgam9icywgcy0+aGlzdG9yeSwgcmopOworICAgIGVsc2UgIC8qIHJqLT5zdGF0ZSA9PSBBVkFISV9TVVBQUkVTU0VEICovCisgICAgICAgIEFWQUhJX0xMSVNUX1BSRVBFTkQoQXZhaGlSZXNwb25zZUpvYiwgam9icywgcy0+c3VwcHJlc3NlZCwgcmopOworCisgICAgcmV0dXJuIHJqOworfQorCitzdGF0aWMgdm9pZCBqb2JfZnJlZShBdmFoaVJlc3BvbnNlU2NoZWR1bGVyICpzLCBBdmFoaVJlc3BvbnNlSm9iICpyaikgeworICAgIGFzc2VydChzKTsKKyAgICBhc3NlcnQocmopOworCisgICAgaWYgKHJqLT50aW1lX2V2ZW50KQorICAgICAgICBhdmFoaV90aW1lX2V2ZW50X2ZyZWUocmotPnRpbWVfZXZlbnQpOworCisgICAgaWYgKHJqLT5zdGF0ZSA9PSBBVkFISV9TQ0hFRFVMRUQpCisgICAgICAgIEFWQUhJX0xMSVNUX1JFTU9WRShBdmFoaVJlc3BvbnNlSm9iLCBqb2JzLCBzLT5qb2JzLCByaik7CisgICAgZWxzZSBpZiAocmotPnN0YXRlID09IEFWQUhJX0RPTkUpCisgICAgICAgIEFWQUhJX0xMSVNUX1JFTU9WRShBdmFoaVJlc3BvbnNlSm9iLCBqb2JzLCBzLT5oaXN0b3J5LCByaik7CisgICAgZWxzZSAvKiByai0+c3RhdGUgPT0gQVZBSElfU1VQUFJFU1NFRCAqLworICAgICAgICBBVkFISV9MTElTVF9SRU1PVkUoQXZhaGlSZXNwb25zZUpvYiwgam9icywgcy0+c3VwcHJlc3NlZCwgcmopOworCisgICAgYXZhaGlfcmVjb3JkX3VucmVmKHJqLT5yZWNvcmQpOworICAgIGF2YWhpX2ZyZWUocmopOworfQorCitzdGF0aWMgdm9pZCBlbGFwc2VfY2FsbGJhY2soQXZhaGlUaW1lRXZlbnQgKmUsIHZvaWQqIGRhdGEpOworCitzdGF0aWMgdm9pZCBqb2Jfc2V0X2VsYXBzZV90aW1lKEF2YWhpUmVzcG9uc2VTY2hlZHVsZXIgKnMsIEF2YWhpUmVzcG9uc2VKb2IgKnJqLCB1bnNpZ25lZCBtc2VjLCB1bnNpZ25lZCBqaXR0ZXIpIHsKKyAgICBzdHJ1Y3QgdGltZXZhbCB0djsKKworICAgIGFzc2VydChzKTsKKyAgICBhc3NlcnQocmopOworCisgICAgYXZhaGlfZWxhcHNlX3RpbWUoJnR2LCBtc2VjLCBqaXR0ZXIpOworCisgICAgaWYgKHJqLT50aW1lX2V2ZW50KQorICAgICAgICBhdmFoaV90aW1lX2V2ZW50X3VwZGF0ZShyai0+dGltZV9ldmVudCwgJnR2KTsKKyAgICBlbHNlCisgICAgICAgIHJqLT50aW1lX2V2ZW50ID0gYXZhaGlfdGltZV9ldmVudF9uZXcocy0+dGltZV9ldmVudF9xdWV1ZSwgJnR2LCBlbGFwc2VfY2FsbGJhY2ssIHJqKTsKK30KKworc3RhdGljIHZvaWQgam9iX21hcmtfZG9uZShBdmFoaVJlc3BvbnNlU2NoZWR1bGVyICpzLCBBdmFoaVJlc3BvbnNlSm9iICpyaikgeworICAgIGFzc2VydChzKTsKKyAgICBhc3NlcnQocmopOworCisgICAgYXNzZXJ0KHJqLT5zdGF0ZSA9PSBBVkFISV9TQ0hFRFVMRUQpOworCisgICAgQVZBSElfTExJU1RfUkVNT1ZFKEF2YWhpUmVzcG9uc2VKb2IsIGpvYnMsIHMtPmpvYnMsIHJqKTsKKyAgICBBVkFISV9MTElTVF9QUkVQRU5EKEF2YWhpUmVzcG9uc2VKb2IsIGpvYnMsIHMtPmhpc3RvcnksIHJqKTsKKworICAgIHJqLT5zdGF0ZSA9IEFWQUhJX0RPTkU7CisKKyAgICBqb2Jfc2V0X2VsYXBzZV90aW1lKHMsIHJqLCBBVkFISV9SRVNQT05TRV9ISVNUT1JZX01TRUMsIDApOworCisgICAgZ2V0dGltZW9mZGF5KCZyai0+ZGVsaXZlcnksIE5VTEwpOworfQorCitBdmFoaVJlc3BvbnNlU2NoZWR1bGVyICphdmFoaV9yZXNwb25zZV9zY2hlZHVsZXJfbmV3KEF2YWhpSW50ZXJmYWNlICppKSB7CisgICAgQXZhaGlSZXNwb25zZVNjaGVkdWxlciAqczsKKyAgICBhc3NlcnQoaSk7CisKKyAgICBpZiAoIShzID0gYXZhaGlfbmV3KEF2YWhpUmVzcG9uc2VTY2hlZHVsZXIsIDEpKSkgeworICAgICAgICBhdmFoaV9sb2dfZXJyb3IoX19GSUxFX18iOiBPdXQgb2YgbWVtb3J5Iik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHMtPmludGVyZmFjZSA9IGk7CisgICAgcy0+dGltZV9ldmVudF9xdWV1ZSA9IGktPm1vbml0b3ItPnNlcnZlci0+dGltZV9ldmVudF9xdWV1ZTsKKworICAgIEFWQUhJX0xMSVNUX0hFQURfSU5JVChBdmFoaVJlc3BvbnNlSm9iLCBzLT5qb2JzKTsKKyAgICBBVkFISV9MTElTVF9IRUFEX0lOSVQoQXZhaGlSZXNwb25zZUpvYiwgcy0+aGlzdG9yeSk7CisgICAgQVZBSElfTExJU1RfSEVBRF9JTklUKEF2YWhpUmVzcG9uc2VKb2IsIHMtPnN1cHByZXNzZWQpOworCisgICAgcmV0dXJuIHM7Cit9CisKK3ZvaWQgYXZhaGlfcmVzcG9uc2Vfc2NoZWR1bGVyX2ZyZWUoQXZhaGlSZXNwb25zZVNjaGVkdWxlciAqcykgeworICAgIGFzc2VydChzKTsKKworICAgIGF2YWhpX3Jlc3BvbnNlX3NjaGVkdWxlcl9jbGVhcihzKTsKKyAgICBhdmFoaV9mcmVlKHMpOworfQorCit2b2lkIGF2YWhpX3Jlc3BvbnNlX3NjaGVkdWxlcl9jbGVhcihBdmFoaVJlc3BvbnNlU2NoZWR1bGVyICpzKSB7CisgICAgYXNzZXJ0KHMpOworCisgICAgd2hpbGUgKHMtPmpvYnMpCisgICAgICAgIGpvYl9mcmVlKHMsIHMtPmpvYnMpOworICAgIHdoaWxlIChzLT5oaXN0b3J5KQorICAgICAgICBqb2JfZnJlZShzLCBzLT5oaXN0b3J5KTsKKyAgICB3aGlsZSAocy0+c3VwcHJlc3NlZCkKKyAgICAgICAgam9iX2ZyZWUocywgcy0+c3VwcHJlc3NlZCk7Cit9CisKK3N0YXRpYyB2b2lkIGVudW1lcmF0ZV9hdXhfcmVjb3Jkc19jYWxsYmFjayhBVkFISV9HQ0NfVU5VU0VEIEF2YWhpU2VydmVyICpzLCBBdmFoaVJlY29yZCAqciwgaW50IGZsdXNoX2NhY2hlLCB2b2lkKiB1c2VyZGF0YSkgeworICAgIEF2YWhpUmVzcG9uc2VKb2IgKnJqID0gdXNlcmRhdGE7CisKKyAgICBhc3NlcnQocik7CisgICAgYXNzZXJ0KHJqKTsKKworICAgIGF2YWhpX3Jlc3BvbnNlX3NjaGVkdWxlcl9wb3N0KHJqLT5zY2hlZHVsZXIsIHIsIGZsdXNoX2NhY2hlLCByai0+cXVlcmllcl92YWxpZCA/ICZyai0+cXVlcmllciA6IE5VTEwsIDApOworfQorCitzdGF0aWMgaW50IHBhY2tldF9hZGRfcmVzcG9uc2Vfam9iKEF2YWhpUmVzcG9uc2VTY2hlZHVsZXIgKnMsIEF2YWhpRG5zUGFja2V0ICpwLCBBdmFoaVJlc3BvbnNlSm9iICpyaikgeworICAgIGFzc2VydChzKTsKKyAgICBhc3NlcnQocCk7CisgICAgYXNzZXJ0KHJqKTsKKworICAgIC8qIFRyeSB0byBhZGQgdGhpcyByZWNvcmQgdG8gdGhlIHBhY2tldCAqLworICAgIGlmICghYXZhaGlfZG5zX3BhY2tldF9hcHBlbmRfcmVjb3JkKHAsIHJqLT5yZWNvcmQsIHJqLT5mbHVzaF9jYWNoZSwgMCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgLyogT2ssIHRoaXMgcmVjb3JkIHdpbGwgZGVmaW5pdGVseSBiZSBzZW50LCBzbyBzY2hlZHVsZSB0aGUKKyAgICAgKiBhdXhpbGxpYXJ5IHBhY2tldHMsIHRvbyAqLworICAgIGF2YWhpX3NlcnZlcl9lbnVtZXJhdGVfYXV4X3JlY29yZHMocy0+aW50ZXJmYWNlLT5tb25pdG9yLT5zZXJ2ZXIsIHMtPmludGVyZmFjZSwgcmotPnJlY29yZCwgZW51bWVyYXRlX2F1eF9yZWNvcmRzX2NhbGxiYWNrLCByaik7CisgICAgam9iX21hcmtfZG9uZShzLCByaik7CisKKyAgICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgc2VuZF9yZXNwb25zZV9wYWNrZXQoQXZhaGlSZXNwb25zZVNjaGVkdWxlciAqcywgQXZhaGlSZXNwb25zZUpvYiAqcmopIHsKKyAgICBBdmFoaURuc1BhY2tldCAqcDsKKyAgICB1bnNpZ25lZCBuOworCisgICAgYXNzZXJ0KHMpOworICAgIGFzc2VydChyaik7CisKKyAgICBpZiAoIShwID0gYXZhaGlfZG5zX3BhY2tldF9uZXdfcmVzcG9uc2Uocy0+aW50ZXJmYWNlLT5oYXJkd2FyZS0+bXR1LCAxKSkpCisgICAgICAgIHJldHVybjsgLyogT09NICovCisgICAgbiA9IDE7CisKKyAgICAvKiBQdXQgaXQgaW4gdGhlIHBhY2tldC4gKi8KKyAgICBpZiAocGFja2V0X2FkZF9yZXNwb25zZV9qb2IocywgcCwgcmopKSB7CisKKyAgICAgICAgLyogVHJ5IHRvIGZpbGwgdXAgcGFja2V0IHdpdGggbW9yZSByZXNwb25zZXMsIGlmIGF2YWlsYWJsZSAqLworICAgICAgICB3aGlsZSAocy0+am9icykgeworCisgICAgICAgICAgICBpZiAoIXBhY2tldF9hZGRfcmVzcG9uc2Vfam9iKHMsIHAsIHMtPmpvYnMpKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBuKys7CisgICAgICAgIH0KKworICAgIH0gZWxzZSB7CisgICAgICAgIHNpemVfdCBzaXplOworCisgICAgICAgIGF2YWhpX2Ruc19wYWNrZXRfZnJlZShwKTsKKworICAgICAgICAvKiBPSywgdGhlIHBhY2tldCB3YXMgdG9vIHNtYWxsLCBzbyBjcmVhdGUgb25lIHRoYXQgZml0cyAqLworICAgICAgICBzaXplID0gYXZhaGlfcmVjb3JkX2dldF9lc3RpbWF0ZV9zaXplKHJqLT5yZWNvcmQpICsgQVZBSElfRE5TX1BBQ0tFVF9IRUFERVJfU0laRTsKKworICAgICAgICBpZiAoIShwID0gYXZhaGlfZG5zX3BhY2tldF9uZXdfcmVzcG9uc2Uoc2l6ZSArIEFWQUhJX0ROU19QQUNLRVRfRVhUUkFfU0laRSwgMSkpKQorICAgICAgICAgICAgcmV0dXJuOyAvKiBPT00gKi8KKworICAgICAgICBpZiAoIXBhY2tldF9hZGRfcmVzcG9uc2Vfam9iKHMsIHAsIHJqKSkgeworICAgICAgICAgICAgYXZhaGlfZG5zX3BhY2tldF9mcmVlKHApOworCisgICAgICAgICAgICBhdmFoaV9sb2dfd2FybigiUmVjb3JkIHRvbyBsYXJnZSwgY2Fubm90IHNlbmQiKTsKKyAgICAgICAgICAgIGpvYl9tYXJrX2RvbmUocywgcmopOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgYXZhaGlfZG5zX3BhY2tldF9zZXRfZmllbGQocCwgQVZBSElfRE5TX0ZJRUxEX0FOQ09VTlQsIG4pOworICAgIGF2YWhpX2ludGVyZmFjZV9zZW5kX3BhY2tldChzLT5pbnRlcmZhY2UsIHApOworICAgIGF2YWhpX2Ruc19wYWNrZXRfZnJlZShwKTsKK30KKworc3RhdGljIHZvaWQgZWxhcHNlX2NhbGxiYWNrKEFWQUhJX0dDQ19VTlVTRUQgQXZhaGlUaW1lRXZlbnQgKmUsIHZvaWQqIGRhdGEpIHsKKyAgICBBdmFoaVJlc3BvbnNlSm9iICpyaiA9IGRhdGE7CisKKyAgICBhc3NlcnQocmopOworCisgICAgaWYgKHJqLT5zdGF0ZSA9PSBBVkFISV9ET05FIHx8IHJqLT5zdGF0ZSA9PSBBVkFISV9TVVBQUkVTU0VEKQorICAgICAgICBqb2JfZnJlZShyai0+c2NoZWR1bGVyLCByaik7ICAgICAgICAgLyogTGV0cyBkcm9wIHRoaXMgZW50cnkgKi8KKyAgICBlbHNlCisgICAgICAgIHNlbmRfcmVzcG9uc2VfcGFja2V0KHJqLT5zY2hlZHVsZXIsIHJqKTsKK30KKworc3RhdGljIEF2YWhpUmVzcG9uc2VKb2IqIGZpbmRfc2NoZWR1bGVkX2pvYihBdmFoaVJlc3BvbnNlU2NoZWR1bGVyICpzLCBBdmFoaVJlY29yZCAqcmVjb3JkKSB7CisgICAgQXZhaGlSZXNwb25zZUpvYiAqcmo7CisKKyAgICBhc3NlcnQocyk7CisgICAgYXNzZXJ0KHJlY29yZCk7CisKKyAgICBmb3IgKHJqID0gcy0+am9iczsgcmo7IHJqID0gcmotPmpvYnNfbmV4dCkgeworICAgICAgICBhc3NlcnQocmotPnN0YXRlID09IEFWQUhJX1NDSEVEVUxFRCk7CisKKyAgICAgICAgaWYgKGF2YWhpX3JlY29yZF9lcXVhbF9ub190dGwocmotPnJlY29yZCwgcmVjb3JkKSkKKyAgICAgICAgICAgIHJldHVybiByajsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIEF2YWhpUmVzcG9uc2VKb2IqIGZpbmRfaGlzdG9yeV9qb2IoQXZhaGlSZXNwb25zZVNjaGVkdWxlciAqcywgQXZhaGlSZWNvcmQgKnJlY29yZCkgeworICAgIEF2YWhpUmVzcG9uc2VKb2IgKnJqOworCisgICAgYXNzZXJ0KHMpOworICAgIGFzc2VydChyZWNvcmQpOworCisgICAgZm9yIChyaiA9IHMtPmhpc3Rvcnk7IHJqOyByaiA9IHJqLT5qb2JzX25leHQpIHsKKyAgICAgICAgYXNzZXJ0KHJqLT5zdGF0ZSA9PSBBVkFISV9ET05FKTsKKworICAgICAgICBpZiAoYXZhaGlfcmVjb3JkX2VxdWFsX25vX3R0bChyai0+cmVjb3JkLCByZWNvcmQpKSB7CisgICAgICAgICAgICAvKiBDaGVjayB3aGV0aGVyIHRoaXMgZW50cnkgaXMgb3V0ZGF0ZWQgKi8KKworLyogICAgICAgICAgICAgYXZhaGlfbG9nX2RlYnVnKCJoaXN0b3J5IGFnZTogJXUiLCAodW5zaWduZWQpIChhdmFoaV9hZ2UoJnJqLT5kZWxpdmVyeSkvMTAwMCkpOyAqLworCisgICAgICAgICAgICBpZiAoYXZhaGlfYWdlKCZyai0+ZGVsaXZlcnkpLzEwMDAgPiBBVkFISV9SRVNQT05TRV9ISVNUT1JZX01TRUMpIHsKKyAgICAgICAgICAgICAgICAvKiBpdCBpcyBvdXRkYXRlZCwgc28gbGV0J3MgcmVtb3ZlIGl0ICovCisgICAgICAgICAgICAgICAgam9iX2ZyZWUocywgcmopOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gcmo7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIEF2YWhpUmVzcG9uc2VKb2IqIGZpbmRfc3VwcHJlc3NlZF9qb2IoQXZhaGlSZXNwb25zZVNjaGVkdWxlciAqcywgQXZhaGlSZWNvcmQgKnJlY29yZCwgY29uc3QgQXZhaGlBZGRyZXNzICpxdWVyaWVyKSB7CisgICAgQXZhaGlSZXNwb25zZUpvYiAqcmo7CisKKyAgICBhc3NlcnQocyk7CisgICAgYXNzZXJ0KHJlY29yZCk7CisgICAgYXNzZXJ0KHF1ZXJpZXIpOworCisgICAgZm9yIChyaiA9IHMtPnN1cHByZXNzZWQ7IHJqOyByaiA9IHJqLT5qb2JzX25leHQpIHsKKyAgICAgICAgYXNzZXJ0KHJqLT5zdGF0ZSA9PSBBVkFISV9TVVBQUkVTU0VEKTsKKyAgICAgICAgYXNzZXJ0KHJqLT5xdWVyaWVyX3ZhbGlkKTsKKworICAgICAgICBpZiAoYXZhaGlfcmVjb3JkX2VxdWFsX25vX3R0bChyai0+cmVjb3JkLCByZWNvcmQpICYmCisgICAgICAgICAgICBhdmFoaV9hZGRyZXNzX2NtcCgmcmotPnF1ZXJpZXIsIHF1ZXJpZXIpID09IDApIHsKKyAgICAgICAgICAgIC8qIENoZWNrIHdoZXRoZXIgdGhpcyBlbnRyeSBpcyBvdXRkYXRlZCAqLworCisgICAgICAgICAgICBpZiAoYXZhaGlfYWdlKCZyai0+ZGVsaXZlcnkpID4gQVZBSElfUkVTUE9OU0VfU1VQUFJFU1NfTVNFQyoxMDAwKSB7CisgICAgICAgICAgICAgICAgLyogaXQgaXMgb3V0ZGF0ZWQsIHNvIGxldCdzIHJlbW92ZSBpdCAqLworICAgICAgICAgICAgICAgIGpvYl9mcmVlKHMsIHJqKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHJqOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK2ludCBhdmFoaV9yZXNwb25zZV9zY2hlZHVsZXJfcG9zdChBdmFoaVJlc3BvbnNlU2NoZWR1bGVyICpzLCBBdmFoaVJlY29yZCAqcmVjb3JkLCBpbnQgZmx1c2hfY2FjaGUsIGNvbnN0IEF2YWhpQWRkcmVzcyAqcXVlcmllciwgaW50IGltbWVkaWF0ZWx5KSB7CisgICAgQXZhaGlSZXNwb25zZUpvYiAqcmo7CisgICAgc3RydWN0IHRpbWV2YWwgdHY7CisvKiAgICAgY2hhciAqdDsgKi8KKworICAgIGFzc2VydChzKTsKKyAgICBhc3NlcnQocmVjb3JkKTsKKworICAgIGFzc2VydCghYXZhaGlfa2V5X2lzX3BhdHRlcm4ocmVjb3JkLT5rZXkpKTsKKworLyogICAgIHQgPSBhdmFoaV9yZWNvcmRfdG9fc3RyaW5nKHJlY29yZCk7ICovCisvKiAgICAgYXZhaGlfbG9nX2RlYnVnKCJwb3N0ICVpICVzIiwgaW1tZWRpYXRlbHksIHQpOyAqLworLyogICAgIGF2YWhpX2ZyZWUodCk7ICovCisKKyAgICAvKiBDaGVjayB3aGV0aGVyIHRoaXMgcmVzcG9uc2UgaXMgc3VwcHJlc3NlZCAqLworICAgIGlmIChxdWVyaWVyICYmCisgICAgICAgIChyaiA9IGZpbmRfc3VwcHJlc3NlZF9qb2IocywgcmVjb3JkLCBxdWVyaWVyKSkgJiYKKyAgICAgICAgYXZhaGlfcmVjb3JkX2lzX2dvb2RieWUocmVjb3JkKSA9PSBhdmFoaV9yZWNvcmRfaXNfZ29vZGJ5ZShyai0+cmVjb3JkKSAmJgorICAgICAgICByai0+cmVjb3JkLT50dGwgPj0gcmVjb3JkLT50dGwvMikgeworCisvKiAgICAgICAgIGF2YWhpX2xvZ19kZWJ1ZygiUmVzcG9uc2Ugc3VwcHJlc3NlZCBieSBrbm93biBhbnN3ZXIgc3VwcHJlc3Npb24uIik7ICAqLworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvKiBDaGVjayBpZiB3ZSBhbHJlYWR5IHNlbnQgdGhpcyByZXNwb25zZSByZWNlbnRseSAqLworICAgIGlmICgocmogPSBmaW5kX2hpc3Rvcnlfam9iKHMsIHJlY29yZCkpKSB7CisKKyAgICAgICAgaWYgKGF2YWhpX3JlY29yZF9pc19nb29kYnllKHJlY29yZCkgPT0gYXZhaGlfcmVjb3JkX2lzX2dvb2RieWUocmotPnJlY29yZCkgJiYKKyAgICAgICAgICAgIHJqLT5yZWNvcmQtPnR0bCA+PSByZWNvcmQtPnR0bC8yICYmCisgICAgICAgICAgICAocmotPmZsdXNoX2NhY2hlIHx8ICFmbHVzaF9jYWNoZSkpIHsKKy8qICAgICAgICAgICAgIGF2YWhpX2xvZ19kZWJ1ZygiUmVzcG9uc2Ugc3VwcHJlc3NlZCBieSBsb2NhbCBkdXBsaWNhdGUgc3VwcHJlc3Npb24gKGhpc3RvcnkpIik7ICAqLworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICAvKiBPdXRkYXRlZCAuLi4gKi8KKyAgICAgICAgam9iX2ZyZWUocywgcmopOworICAgIH0KKworICAgIGF2YWhpX2VsYXBzZV90aW1lKCZ0diwgaW1tZWRpYXRlbHkgPyAwIDogQVZBSElfUkVTUE9OU0VfREVGRVJfTVNFQywgaW1tZWRpYXRlbHkgPyAwIDogQVZBSElfUkVTUE9OU0VfSklUVEVSX01TRUMpOworCisgICAgaWYgKChyaiA9IGZpbmRfc2NoZWR1bGVkX2pvYihzLCByZWNvcmQpKSkgeworLyogICAgICAgICAgYXZhaGlfbG9nX2RlYnVnKCJSZXNwb25zZSBzdXBwcmVzc2VkIGJ5IGxvY2FsIGR1cGxpY2F0ZSBzdXBwcmVzc2lvbiAoc2NoZWR1bGVkKSIpOyAqLworCisgICAgICAgIC8qIFVwZGF0ZSBhIGxpdHRsZSAuLi4gKi8KKworICAgICAgICAvKiBVcGRhdGUgdGhlIHRpbWUgaWYgdGhlIG5ldyBpcyBwcmlvciB0byB0aGUgb2xkICovCisgICAgICAgIGlmIChhdmFoaV90aW1ldmFsX2NvbXBhcmUoJnR2LCAmcmotPmRlbGl2ZXJ5KSA8IDApIHsKKyAgICAgICAgICAgIHJqLT5kZWxpdmVyeSA9IHR2OworICAgICAgICAgICAgYXZhaGlfdGltZV9ldmVudF91cGRhdGUocmotPnRpbWVfZXZlbnQsICZyai0+ZGVsaXZlcnkpOworICAgICAgICB9CisKKyAgICAgICAgLyogVXBkYXRlIHRoZSBmbHVzaCBjYWNoZSBiaXQgKi8KKyAgICAgICAgaWYgKGZsdXNoX2NhY2hlKQorICAgICAgICAgICAgcmotPmZsdXNoX2NhY2hlID0gMTsKKworICAgICAgICAvKiBVcGRhdGUgdGhlIHF1ZXJpZXIgZmllbGQgKi8KKyAgICAgICAgaWYgKCFxdWVyaWVyIHx8IChyai0+cXVlcmllcl92YWxpZCAmJiBhdmFoaV9hZGRyZXNzX2NtcChxdWVyaWVyLCAmcmotPnF1ZXJpZXIpICE9IDApKQorICAgICAgICAgICAgcmotPnF1ZXJpZXJfdmFsaWQgPSAwOworCisgICAgICAgIC8qIFVwZGF0ZSByZWNvcmQgZGF0YSAoanVzdCBmb3IgdGhlIFRUTCkgKi8KKyAgICAgICAgYXZhaGlfcmVjb3JkX3VucmVmKHJqLT5yZWNvcmQpOworICAgICAgICByai0+cmVjb3JkID0gYXZhaGlfcmVjb3JkX3JlZihyZWNvcmQpOworCisgICAgICAgIHJldHVybiAxOworICAgIH0gZWxzZSB7CisvKiAgICAgICAgIGF2YWhpX2xvZ19kZWJ1ZygiQWNjZXB0ZWQgbmV3IHJlc3BvbnNlIGpvYi4iKTsgICovCisKKyAgICAgICAgLyogQ3JlYXRlIGEgbmV3IGpvYiBhbmQgc2NoZWR1bGUgaXQgKi8KKyAgICAgICAgaWYgKCEocmogPSBqb2JfbmV3KHMsIHJlY29yZCwgQVZBSElfU0NIRURVTEVEKSkpCisgICAgICAgICAgICByZXR1cm4gMDsgLyogT09NICovCisKKyAgICAgICAgcmotPmRlbGl2ZXJ5ID0gdHY7CisgICAgICAgIHJqLT50aW1lX2V2ZW50ID0gYXZhaGlfdGltZV9ldmVudF9uZXcocy0+dGltZV9ldmVudF9xdWV1ZSwgJnJqLT5kZWxpdmVyeSwgZWxhcHNlX2NhbGxiYWNrLCByaik7CisgICAgICAgIHJqLT5mbHVzaF9jYWNoZSA9IGZsdXNoX2NhY2hlOworCisgICAgICAgIGlmICgocmotPnF1ZXJpZXJfdmFsaWQgPSAhIXF1ZXJpZXIpKQorICAgICAgICAgICAgcmotPnF1ZXJpZXIgPSAqcXVlcmllcjsKKworICAgICAgICByZXR1cm4gMTsKKyAgICB9Cit9CisKK3ZvaWQgYXZhaGlfcmVzcG9uc2Vfc2NoZWR1bGVyX2luY29taW5nKEF2YWhpUmVzcG9uc2VTY2hlZHVsZXIgKnMsIEF2YWhpUmVjb3JkICpyZWNvcmQsIGludCBmbHVzaF9jYWNoZSkgeworICAgIEF2YWhpUmVzcG9uc2VKb2IgKnJqOworICAgIGFzc2VydChzKTsKKworICAgIC8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW5ldmVyIGFuIGluY29taW5nIHJlc3BvbnNlIHdhcworICAgICAqIHJlY2VpZXZlZC4gV2UgZHJvcCBzY2hlZHVsZWQgcmVzcG9uc2VzIHdoaWNoIG1hdGNoIGhlcmUuIFRoZQorICAgICAqIGtleXdvcmQgaXMgIkRVUExJQ0FURSBBTlNXRVIgU1VQUFJFU0lPTiIuICovCisKKyAgICBpZiAoKHJqID0gZmluZF9zY2hlZHVsZWRfam9iKHMsIHJlY29yZCkpKSB7CisKKyAgICAgICAgaWYgKCghcmotPmZsdXNoX2NhY2hlIHx8IGZsdXNoX2NhY2hlKSAmJiAgICAvKiBmbHVzaCBjYWNoZSBiaXQgd2FzIHNldCBjb3JyZWN0bHkgKi8KKyAgICAgICAgICAgIGF2YWhpX3JlY29yZF9pc19nb29kYnllKHJlY29yZCkgPT0gYXZhaGlfcmVjb3JkX2lzX2dvb2RieWUocmotPnJlY29yZCkgJiYgICAvKiBib3RoIGdvb2RieWUgcGFja2V0cywgb3IgYm90aCBub3QgKi8KKyAgICAgICAgICAgIHJlY29yZC0+dHRsID49IHJqLT5yZWNvcmQtPnR0bC8yKSB7ICAgICAvKiBzZW5zaWJsZSBUVEwgKi8KKworICAgICAgICAgICAgLyogQSBtYXRjaGluZyBlbnRyeSB3YXMgZm91bmQsIHNvIGxldCdzIG1hcmsgaXQgZG9uZSAqLworLyogICAgICAgICAgICAgYXZhaGlfbG9nX2RlYnVnKCJSZXNwb25zZSBzdXBwcmVzc2VkIGJ5IGRpc3RyaWJ1dGVkIGR1cGxpY2F0ZSBzdXBwcmVzc2lvbiIpOyAqLworICAgICAgICAgICAgam9iX21hcmtfZG9uZShzLCByaik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKChyaiA9IGZpbmRfaGlzdG9yeV9qb2IocywgcmVjb3JkKSkpIHsKKyAgICAgICAgLyogRm91bmQgYSBoaXN0b3J5IGpvYiwgbGV0J3MgdXBkYXRlIGl0ICovCisgICAgICAgIGF2YWhpX3JlY29yZF91bnJlZihyai0+cmVjb3JkKTsKKyAgICAgICAgcmotPnJlY29yZCA9IGF2YWhpX3JlY29yZF9yZWYocmVjb3JkKTsKKyAgICB9IGVsc2UKKyAgICAgICAgLyogRm91bmQgbm8gZXhpc3RpbmcgaGlzdG9yeSBqb2IsIHNvIGxldCdzIGNyZWF0ZSBhIG5ldyBvbmUgKi8KKyAgICAgICAgaWYgKCEocmogPSBqb2JfbmV3KHMsIHJlY29yZCwgQVZBSElfRE9ORSkpKQorICAgICAgICAgICAgcmV0dXJuOyAvKiBPT00gKi8KKworICAgIHJqLT5mbHVzaF9jYWNoZSA9IGZsdXNoX2NhY2hlOworICAgIHJqLT5xdWVyaWVyX3ZhbGlkID0gMDsKKworICAgIGdldHRpbWVvZmRheSgmcmotPmRlbGl2ZXJ5LCBOVUxMKTsKKyAgICBqb2Jfc2V0X2VsYXBzZV90aW1lKHMsIHJqLCBBVkFISV9SRVNQT05TRV9ISVNUT1JZX01TRUMsIDApOworfQorCit2b2lkIGF2YWhpX3Jlc3BvbnNlX3NjaGVkdWxlcl9zdXBwcmVzcyhBdmFoaVJlc3BvbnNlU2NoZWR1bGVyICpzLCBBdmFoaVJlY29yZCAqcmVjb3JkLCBjb25zdCBBdmFoaUFkZHJlc3MgKnF1ZXJpZXIpIHsKKyAgICBBdmFoaVJlc3BvbnNlSm9iICpyajsKKworICAgIGFzc2VydChzKTsKKyAgICBhc3NlcnQocmVjb3JkKTsKKyAgICBhc3NlcnQocXVlcmllcik7CisKKyAgICBpZiAoKHJqID0gZmluZF9zY2hlZHVsZWRfam9iKHMsIHJlY29yZCkpKSB7CisKKyAgICAgICAgaWYgKHJqLT5xdWVyaWVyX3ZhbGlkICYmIGF2YWhpX2FkZHJlc3NfY21wKHF1ZXJpZXIsICZyai0+cXVlcmllcikgPT0gMCAmJiAvKiBzYW1lIG9yaWdpbmF0b3IgKi8KKyAgICAgICAgICAgIGF2YWhpX3JlY29yZF9pc19nb29kYnllKHJlY29yZCkgPT0gYXZhaGlfcmVjb3JkX2lzX2dvb2RieWUocmotPnJlY29yZCkgJiYgLyogYm90aCBnb29kYnllIHBhY2tldHMsIG9yIGJvdGggbm90ICovCisgICAgICAgICAgICByZWNvcmQtPnR0bCA+PSByai0+cmVjb3JkLT50dGwvMikgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzZW5zaWJsZSBUVEwgKi8KKworICAgICAgICAgICAgLyogQSBtYXRjaGluZyBlbnRyeSB3YXMgZm91bmQsIHNvIGxldCdzIGRyb3AgaXQgKi8KKy8qICAgICAgICAgICAgIGF2YWhpX2xvZ19kZWJ1ZygiS25vd24gYW5zd2VyIHN1cHByZXNzaW9uIGFjdGl2ZSEiKTsgKi8KKyAgICAgICAgICAgIGpvYl9mcmVlKHMsIHJqKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICgocmogPSBmaW5kX3N1cHByZXNzZWRfam9iKHMsIHJlY29yZCwgcXVlcmllcikpKSB7CisKKyAgICAgICAgLyogTGV0J3MgdXBkYXRlIHRoZSBvbGQgZW50cnkgKi8KKyAgICAgICAgYXZhaGlfcmVjb3JkX3VucmVmKHJqLT5yZWNvcmQpOworICAgICAgICByai0+cmVjb3JkID0gYXZhaGlfcmVjb3JkX3JlZihyZWNvcmQpOworCisgICAgfSBlbHNlIHsKKworICAgICAgICAvKiBDcmVhdGUgYSBuZXcgZW50cnkgKi8KKyAgICAgICAgaWYgKCEocmogPSBqb2JfbmV3KHMsIHJlY29yZCwgQVZBSElfU1VQUFJFU1NFRCkpKQorICAgICAgICAgICAgcmV0dXJuOyAvKiBPT00gKi8KKyAgICAgICAgcmotPnF1ZXJpZXJfdmFsaWQgPSAxOworICAgICAgICByai0+cXVlcmllciA9ICpxdWVyaWVyOworICAgIH0KKworICAgIGdldHRpbWVvZmRheSgmcmotPmRlbGl2ZXJ5LCBOVUxMKTsKKyAgICBqb2Jfc2V0X2VsYXBzZV90aW1lKHMsIHJqLCBBVkFISV9SRVNQT05TRV9TVVBQUkVTU19NU0VDLCAwKTsKK30KKwordm9pZCBhdmFoaV9yZXNwb25zZV9zY2hlZHVsZXJfZm9yY2UoQXZhaGlSZXNwb25zZVNjaGVkdWxlciAqcykgeworICAgIGFzc2VydChzKTsKKworICAgIC8qIFNlbmQgYWxsIHNjaGVkdWxlZCByZXNwb25zZXMgaW1tZWRpYXRlbHkgKi8KKyAgICB3aGlsZSAocy0+am9icykKKyAgICAgICAgc2VuZF9yZXNwb25zZV9wYWNrZXQocywgcy0+am9icyk7Cit9CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9yZXNwb25zZS1zY2hlZC5oIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvcmVzcG9uc2Utc2NoZWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDg4MzllCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvcmVzcG9uc2Utc2NoZWQuaApAQCAtMCwwICsxLDM3IEBACisjaWZuZGVmIGZvb3Jlc3BvbnNlc2NoZWRoZm9vCisjZGVmaW5lIGZvb3Jlc3BvbnNlc2NoZWRoZm9vCisKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKwordHlwZWRlZiBzdHJ1Y3QgQXZhaGlSZXNwb25zZVNjaGVkdWxlciBBdmFoaVJlc3BvbnNlU2NoZWR1bGVyOworCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2FkZHJlc3MuaD4KKyNpbmNsdWRlICJpZmFjZS5oIgorCitBdmFoaVJlc3BvbnNlU2NoZWR1bGVyICphdmFoaV9yZXNwb25zZV9zY2hlZHVsZXJfbmV3KEF2YWhpSW50ZXJmYWNlICppKTsKK3ZvaWQgYXZhaGlfcmVzcG9uc2Vfc2NoZWR1bGVyX2ZyZWUoQXZhaGlSZXNwb25zZVNjaGVkdWxlciAqcyk7Cit2b2lkIGF2YWhpX3Jlc3BvbnNlX3NjaGVkdWxlcl9jbGVhcihBdmFoaVJlc3BvbnNlU2NoZWR1bGVyICpzKTsKK3ZvaWQgYXZhaGlfcmVzcG9uc2Vfc2NoZWR1bGVyX2ZvcmNlKEF2YWhpUmVzcG9uc2VTY2hlZHVsZXIgKnMpOworCitpbnQgYXZhaGlfcmVzcG9uc2Vfc2NoZWR1bGVyX3Bvc3QoQXZhaGlSZXNwb25zZVNjaGVkdWxlciAqcywgQXZhaGlSZWNvcmQgKnJlY29yZCwgaW50IGZsdXNoX2NhY2hlLCBjb25zdCBBdmFoaUFkZHJlc3MgKnF1ZXJpZXIsIGludCBpbW1lZGlhdGVseSk7Cit2b2lkIGF2YWhpX3Jlc3BvbnNlX3NjaGVkdWxlcl9pbmNvbWluZyhBdmFoaVJlc3BvbnNlU2NoZWR1bGVyICpzLCBBdmFoaVJlY29yZCAqcmVjb3JkLCBpbnQgZmx1c2hfY2FjaGUpOwordm9pZCBhdmFoaV9yZXNwb25zZV9zY2hlZHVsZXJfc3VwcHJlc3MoQXZhaGlSZXNwb25zZVNjaGVkdWxlciAqcywgQXZhaGlSZWNvcmQgKnJlY29yZCwgY29uc3QgQXZhaGlBZGRyZXNzICpxdWVyaWVyKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9yci11dGlsLmggYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9yci11dGlsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVlYmMwMAotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL3JyLXV0aWwuaApAQCAtMCwwICsxLDYyIEBACisjaWZuZGVmIGZvb3JydXRpbGhmb28KKyNkZWZpbmUgZm9vcnJ1dGlsaGZvbworCisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpbmNsdWRlICJyci5oIgorCitBVkFISV9DX0RFQ0xfQkVHSU4KKworLyoqIENyZWF6ZSBuZXcgQXZhaGlLZXkgb2JqZWN0IGJhc2VkIG9uIGFuIGV4aXN0aW5nIGtleSBidXQgcmVwbGFjZWluZyB0aGUgdHlwZSBieSBDTkFNRSAqLworQXZhaGlLZXkgKmF2YWhpX2tleV9uZXdfY25hbWUoQXZhaGlLZXkgKmtleSk7CisKKy8qKiBNYXRjaCBhIGtleSB0byBhIGtleSBwYXR0ZXJuLiBUaGUgcGF0dGVybiBoYXMgYSB0eXBlIG9mCitBVkFISV9ETlNfQ0xBU1NfQU5ZLCB0aGUgY2xhc3NlcyBhcmUgdGFrZW4gdG8gYmUgZXF1YWwuIFNhbWUgZm9yIHRoZQordHlwZS4gSWYgdGhlIHBhdHRlcm4gaGFzIG5laXRoZXIgY2xhc3Mgbm9yIHR5cGUgd2l0aCBBTlkgY29uc3RhbnRzLAordGhpcyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8gYXZhaGlfa2V5X2VxdWFsKCkuIEluIGNvbnRyYXN0IHRvCithdmFoaV9lcXVhbCgpIHRoaXMgZnVuY3Rpb24gaXMgbm90IGNvbW11dGF0aXZlLiAqLworaW50IGF2YWhpX2tleV9wYXR0ZXJuX21hdGNoKGNvbnN0IEF2YWhpS2V5ICpwYXR0ZXJuLCBjb25zdCBBdmFoaUtleSAqayk7CisKKy8qKiBDaGVjayB3aGV0aGVyIGEga2V5IGlzIGEgcGF0dGVybiBrZXksIGkuZS4gdGhlIGNsYXNzL3R5cGUgaGFzIGEKKyAqIHZhbHVlIG9mIEFWQUhJX0ROU19DTEFTU19BTlkvQVZBSElfRE5TX1RZUEVfQU5ZICovCitpbnQgYXZhaGlfa2V5X2lzX3BhdHRlcm4oY29uc3QgQXZhaGlLZXkgKmspOworCisvKiogUmV0dXJucyBhIG1heGltdW0gZXN0aW1hdGUgZm9yIHRoZSBzcGFjZSB0aGF0IGlzIG5lZWRlZCB0byBzdG9yZQorICogdGhpcyBrZXkgaW4gYSBETlMgcGFja2V0LiAqLworc2l6ZV90IGF2YWhpX2tleV9nZXRfZXN0aW1hdGVfc2l6ZShBdmFoaUtleSAqayk7CisKKy8qKiBSZXR1cm5zIGEgbWF4aW11bSBlc3RpbWF0ZSBmb3IgdGhlIHNwYWNlIHRoYXQgaXMgbmVlZGVkIHRvIHN0b3JlCisgKiB0aGUgcmVjb3JkIGluIGEgRE5TIHBhY2tldC4gKi8KK3NpemVfdCBhdmFoaV9yZWNvcmRfZ2V0X2VzdGltYXRlX3NpemUoQXZhaGlSZWNvcmQgKnIpOworCisvKiogRG8gYSBtRE5TIHNwZWMgY29uZm9ybWluZyBsZXhpY29ncmFwaGljYWwgY29tcGFyaXNvbiBvZiB0aGUgdHdvCisgKiByZWNvcmRzLiBSZXR1cm4gYSBuZWdhdGl2ZSB2YWx1ZSBpZiBhIDwgYiwgYSBwb3NpdGl2ZSBpZiBhID4gYiwKKyAqIHplcm8gaWYgZXF1YWwuICovCitpbnQgYXZhaGlfcmVjb3JkX2xleGljb2dyYXBoaWNhbF9jb21wYXJlKEF2YWhpUmVjb3JkICphLCBBdmFoaVJlY29yZCAqYik7CisKKy8qKiBSZXR1cm4gMSBpZiB0aGUgc3BlY2lmaWVkIHJlY29yZCBpcyBhbiBtRE5TIGdvb2RieWUgcmVjb3JkLiBpLmUuIFRUTCBpcyB6ZXJvLiAqLworaW50IGF2YWhpX3JlY29yZF9pc19nb29kYnllKEF2YWhpUmVjb3JkICpyKTsKKworLyoqIE1ha2UgYSBkZWVwIGNvcHkgb2YgYW4gQXZhaGlSZWNvcmQgb2JqZWN0ICovCitBdmFoaVJlY29yZCAqYXZhaGlfcmVjb3JkX2NvcHkoQXZhaGlSZWNvcmQgKnIpOworCitBVkFISV9DX0RFQ0xfRU5ECisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvcnIuYyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL3JyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZhMGJlZQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL3JyLmMKQEAgLTAsMCArMSw3MzMgQEAKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vZG9tYWluLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL21hbGxvYy5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9kZWZzLmg+CisKKyNpbmNsdWRlICJyci5oIgorI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInV0aWwuaCIKKyNpbmNsdWRlICJoYXNobWFwLmgiCisjaW5jbHVkZSAiZG9tYWluLXV0aWwuaCIKKyNpbmNsdWRlICJyci11dGlsLmgiCisjaW5jbHVkZSAiYWRkci11dGlsLmgiCisKK0F2YWhpS2V5ICphdmFoaV9rZXlfbmV3KGNvbnN0IGNoYXIgKm5hbWUsIHVpbnQxNl90IGNsYXNzLCB1aW50MTZfdCB0eXBlKSB7CisgICAgQXZhaGlLZXkgKms7CisgICAgYXNzZXJ0KG5hbWUpOworCisgICAgaWYgKCEoayA9IGF2YWhpX25ldyhBdmFoaUtleSwgMSkpKSB7CisgICAgICAgIGF2YWhpX2xvZ19lcnJvcigiYXZhaGlfbmV3KCkgZmFpbGVkLiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoIShrLT5uYW1lID0gYXZhaGlfbm9ybWFsaXplX25hbWVfc3RyZHVwKG5hbWUpKSkgeworICAgICAgICBhdmFoaV9sb2dfZXJyb3IoImF2YWhpX25vcm1hbGl6ZV9uYW1lKCkgZmFpbGVkLiIpOworICAgICAgICBhdmFoaV9mcmVlKGspOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBrLT5yZWYgPSAxOworICAgIGstPmNsYXp6ID0gY2xhc3M7CisgICAgay0+dHlwZSA9IHR5cGU7CisKKyAgICByZXR1cm4gazsKK30KKworQXZhaGlLZXkgKmF2YWhpX2tleV9uZXdfY25hbWUoQXZhaGlLZXkgKmtleSkgeworICAgIGFzc2VydChrZXkpOworCisgICAgaWYgKGtleS0+Y2xhenogIT0gQVZBSElfRE5TX0NMQVNTX0lOKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChrZXktPnR5cGUgPT0gQVZBSElfRE5TX1RZUEVfQ05BTUUpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmV0dXJuIGF2YWhpX2tleV9uZXcoa2V5LT5uYW1lLCBrZXktPmNsYXp6LCBBVkFISV9ETlNfVFlQRV9DTkFNRSk7Cit9CisKK0F2YWhpS2V5ICphdmFoaV9rZXlfcmVmKEF2YWhpS2V5ICprKSB7CisgICAgYXNzZXJ0KGspOworICAgIGFzc2VydChrLT5yZWYgPj0gMSk7CisKKyAgICBrLT5yZWYrKzsKKworICAgIHJldHVybiBrOworfQorCit2b2lkIGF2YWhpX2tleV91bnJlZihBdmFoaUtleSAqaykgeworICAgIGFzc2VydChrKTsKKyAgICBhc3NlcnQoay0+cmVmID49IDEpOworCisgICAgaWYgKCgtLWstPnJlZikgPD0gMCkgeworICAgICAgICBhdmFoaV9mcmVlKGstPm5hbWUpOworICAgICAgICBhdmFoaV9mcmVlKGspOworICAgIH0KK30KKworQXZhaGlSZWNvcmQgKmF2YWhpX3JlY29yZF9uZXcoQXZhaGlLZXkgKmssIHVpbnQzMl90IHR0bCkgeworICAgIEF2YWhpUmVjb3JkICpyOworCisgICAgYXNzZXJ0KGspOworCisgICAgaWYgKCEociA9IGF2YWhpX25ldyhBdmFoaVJlY29yZCwgMSkpKSB7CisgICAgICAgIGF2YWhpX2xvZ19lcnJvcigiYXZhaGlfbmV3KCkgZmFpbGVkLiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByLT5yZWYgPSAxOworICAgIHItPmtleSA9IGF2YWhpX2tleV9yZWYoayk7CisKKyAgICBtZW1zZXQoJnItPmRhdGEsIDAsIHNpemVvZihyLT5kYXRhKSk7CisKKyAgICByLT50dGwgPSB0dGwgIT0gKHVpbnQzMl90KSAtMSA/IHR0bCA6IEFWQUhJX0RFRkFVTFRfVFRMOworCisgICAgcmV0dXJuIHI7Cit9CisKK0F2YWhpUmVjb3JkICphdmFoaV9yZWNvcmRfbmV3X2Z1bGwoY29uc3QgY2hhciAqbmFtZSwgdWludDE2X3QgY2xhc3MsIHVpbnQxNl90IHR5cGUsIHVpbnQzMl90IHR0bCkgeworICAgIEF2YWhpUmVjb3JkICpyOworICAgIEF2YWhpS2V5ICprOworCisgICAgYXNzZXJ0KG5hbWUpOworCisgICAgaWYgKCEoayA9IGF2YWhpX2tleV9uZXcobmFtZSwgY2xhc3MsIHR5cGUpKSkgeworICAgICAgICBhdmFoaV9sb2dfZXJyb3IoImF2YWhpX2tleV9uZXcoKSBmYWlsZWQuIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHIgPSBhdmFoaV9yZWNvcmRfbmV3KGssIHR0bCk7CisgICAgYXZhaGlfa2V5X3VucmVmKGspOworCisgICAgaWYgKCFyKSB7CisgICAgICAgIGF2YWhpX2xvZ19lcnJvcigiYXZhaGlfcmVjb3JkX25ldygpIGZhaWxlZC4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIHI7Cit9CisKK0F2YWhpUmVjb3JkICphdmFoaV9yZWNvcmRfcmVmKEF2YWhpUmVjb3JkICpyKSB7CisgICAgYXNzZXJ0KHIpOworICAgIGFzc2VydChyLT5yZWYgPj0gMSk7CisKKyAgICByLT5yZWYrKzsKKyAgICByZXR1cm4gcjsKK30KKwordm9pZCBhdmFoaV9yZWNvcmRfdW5yZWYoQXZhaGlSZWNvcmQgKnIpIHsKKyAgICBhc3NlcnQocik7CisgICAgYXNzZXJ0KHItPnJlZiA+PSAxKTsKKworICAgIGlmICgoLS1yLT5yZWYpIDw9IDApIHsKKyAgICAgICAgc3dpdGNoIChyLT5rZXktPnR5cGUpIHsKKworICAgICAgICAgICAgY2FzZSBBVkFISV9ETlNfVFlQRV9TUlY6CisgICAgICAgICAgICAgICAgYXZhaGlfZnJlZShyLT5kYXRhLnNydi5uYW1lKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBBVkFISV9ETlNfVFlQRV9QVFI6CisgICAgICAgICAgICBjYXNlIEFWQUhJX0ROU19UWVBFX0NOQU1FOgorICAgICAgICAgICAgY2FzZSBBVkFISV9ETlNfVFlQRV9OUzoKKyAgICAgICAgICAgICAgICBhdmFoaV9mcmVlKHItPmRhdGEucHRyLm5hbWUpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEFWQUhJX0ROU19UWVBFX0hJTkZPOgorICAgICAgICAgICAgICAgIGF2YWhpX2ZyZWUoci0+ZGF0YS5oaW5mby5jcHUpOworICAgICAgICAgICAgICAgIGF2YWhpX2ZyZWUoci0+ZGF0YS5oaW5mby5vcyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgQVZBSElfRE5TX1RZUEVfVFhUOgorICAgICAgICAgICAgICAgIGF2YWhpX3N0cmluZ19saXN0X2ZyZWUoci0+ZGF0YS50eHQuc3RyaW5nX2xpc3QpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEFWQUhJX0ROU19UWVBFX0E6CisgICAgICAgICAgICBjYXNlIEFWQUhJX0ROU19UWVBFX0FBQUE6CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYXZhaGlfZnJlZShyLT5kYXRhLmdlbmVyaWMuZGF0YSk7CisgICAgICAgIH0KKworICAgICAgICBhdmFoaV9rZXlfdW5yZWYoci0+a2V5KTsKKyAgICAgICAgYXZhaGlfZnJlZShyKTsKKyAgICB9Cit9CisKK2NvbnN0IGNoYXIgKmF2YWhpX2Ruc19jbGFzc190b19zdHJpbmcodWludDE2X3QgY2xhc3MpIHsKKyAgICBpZiAoY2xhc3MgJiBBVkFISV9ETlNfQ0FDSEVfRkxVU0gpCisgICAgICAgIHJldHVybiAiRkxVU0giOworCisgICAgc3dpdGNoIChjbGFzcykgeworICAgICAgICBjYXNlIEFWQUhJX0ROU19DTEFTU19JTjoKKyAgICAgICAgICAgIHJldHVybiAiSU4iOworICAgICAgICBjYXNlIEFWQUhJX0ROU19DTEFTU19BTlk6CisgICAgICAgICAgICByZXR1cm4gIkFOWSI7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKK2NvbnN0IGNoYXIgKmF2YWhpX2Ruc190eXBlX3RvX3N0cmluZyh1aW50MTZfdCB0eXBlKSB7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgQVZBSElfRE5TX1RZUEVfQ05BTUU6CisgICAgICAgICAgICByZXR1cm4gIkNOQU1FIjsKKyAgICAgICAgY2FzZSBBVkFISV9ETlNfVFlQRV9BOgorICAgICAgICAgICAgcmV0dXJuICJBIjsKKyAgICAgICAgY2FzZSBBVkFISV9ETlNfVFlQRV9BQUFBOgorICAgICAgICAgICAgcmV0dXJuICJBQUFBIjsKKyAgICAgICAgY2FzZSBBVkFISV9ETlNfVFlQRV9QVFI6CisgICAgICAgICAgICByZXR1cm4gIlBUUiI7CisgICAgICAgIGNhc2UgQVZBSElfRE5TX1RZUEVfSElORk86CisgICAgICAgICAgICByZXR1cm4gIkhJTkZPIjsKKyAgICAgICAgY2FzZSBBVkFISV9ETlNfVFlQRV9UWFQ6CisgICAgICAgICAgICByZXR1cm4gIlRYVCI7CisgICAgICAgIGNhc2UgQVZBSElfRE5TX1RZUEVfU1JWOgorICAgICAgICAgICAgcmV0dXJuICJTUlYiOworICAgICAgICBjYXNlIEFWQUhJX0ROU19UWVBFX0FOWToKKyAgICAgICAgICAgIHJldHVybiAiQU5ZIjsKKyAgICAgICAgY2FzZSBBVkFISV9ETlNfVFlQRV9TT0E6CisgICAgICAgICAgICByZXR1cm4gIlNPQSI7CisgICAgICAgIGNhc2UgQVZBSElfRE5TX1RZUEVfTlM6CisgICAgICAgICAgICByZXR1cm4gIk5TIjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KK30KKworY2hhciAqYXZhaGlfa2V5X3RvX3N0cmluZyhjb25zdCBBdmFoaUtleSAqaykgeworICAgIGNoYXIgY2xhc3NbMTZdLCB0eXBlWzE2XTsKKyAgICBjb25zdCBjaGFyICpjLCAqdDsKKworICAgIGFzc2VydChrKTsKKyAgICBhc3NlcnQoay0+cmVmID49IDEpOworCisgICAgLyogQWNjb3JkaW5nIHRvIFJGQzM1OTcgKi8KKworICAgIGlmICghKGMgPSBhdmFoaV9kbnNfY2xhc3NfdG9fc3RyaW5nKGstPmNsYXp6KSkpIHsKKyAgICAgICAgc25wcmludGYoY2xhc3MsIHNpemVvZihjbGFzcyksICJDTEFTUyV1Iiwgay0+Y2xhenopOworICAgICAgICBjID0gY2xhc3M7CisgICAgfQorCisgICAgaWYgKCEodCA9IGF2YWhpX2Ruc190eXBlX3RvX3N0cmluZyhrLT50eXBlKSkpIHsKKyAgICAgICAgc25wcmludGYodHlwZSwgc2l6ZW9mKHR5cGUpLCAiVFlQRSV1Iiwgay0+dHlwZSk7CisgICAgICAgIHQgPSB0eXBlOworICAgIH0KKworICAgIHJldHVybiBhdmFoaV9zdHJkdXBfcHJpbnRmKCIlc1x0JXNcdCVzIiwgay0+bmFtZSwgYywgdCk7Cit9CisKK2NoYXIgKmF2YWhpX3JlY29yZF90b19zdHJpbmcoY29uc3QgQXZhaGlSZWNvcmQgKnIpIHsKKyAgICBjaGFyICpwLCAqczsKKyAgICBjaGFyIGJ1ZlsxMDI0XSwgKnQgPSBOVUxMLCAqZCA9IE5VTEw7CisKKyAgICBhc3NlcnQocik7CisgICAgYXNzZXJ0KHItPnJlZiA+PSAxKTsKKworICAgIHN3aXRjaCAoci0+a2V5LT50eXBlKSB7CisgICAgICAgIGNhc2UgQVZBSElfRE5TX1RZUEVfQToKKyAgICAgICAgICAgIGluZXRfbnRvcChBRl9JTkVULCAmci0+ZGF0YS5hLmFkZHJlc3MuYWRkcmVzcywgdCA9IGJ1Ziwgc2l6ZW9mKGJ1ZikpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBVkFISV9ETlNfVFlQRV9BQUFBOgorICAgICAgICAgICAgaW5ldF9udG9wKEFGX0lORVQ2LCAmci0+ZGF0YS5hYWFhLmFkZHJlc3MuYWRkcmVzcywgdCA9IGJ1Ziwgc2l6ZW9mKGJ1ZikpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBVkFISV9ETlNfVFlQRV9QVFI6CisgICAgICAgIGNhc2UgQVZBSElfRE5TX1RZUEVfQ05BTUU6CisgICAgICAgIGNhc2UgQVZBSElfRE5TX1RZUEVfTlM6CisKKyAgICAgICAgICAgIHQgPSByLT5kYXRhLnB0ci5uYW1lOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBVkFISV9ETlNfVFlQRV9UWFQ6CisgICAgICAgICAgICB0ID0gZCA9IGF2YWhpX3N0cmluZ19saXN0X3RvX3N0cmluZyhyLT5kYXRhLnR4dC5zdHJpbmdfbGlzdCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFWQUhJX0ROU19UWVBFX0hJTkZPOgorCisgICAgICAgICAgICBzbnByaW50Zih0ID0gYnVmLCBzaXplb2YoYnVmKSwgIlwiJXNcIiBcIiVzXCIiLCByLT5kYXRhLmhpbmZvLmNwdSwgci0+ZGF0YS5oaW5mby5vcyk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFWQUhJX0ROU19UWVBFX1NSVjoKKworICAgICAgICAgICAgc25wcmludGYodCA9IGJ1Ziwgc2l6ZW9mKGJ1ZiksICIldSAldSAldSAlcyIsCisgICAgICAgICAgICAgICAgICAgICByLT5kYXRhLnNydi5wcmlvcml0eSwKKyAgICAgICAgICAgICAgICAgICAgIHItPmRhdGEuc3J2LndlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgIHItPmRhdGEuc3J2LnBvcnQsCisgICAgICAgICAgICAgICAgICAgICByLT5kYXRhLnNydi5uYW1lKTsKKworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDogeworCisgICAgICAgICAgICB1aW50OF90ICpjOworICAgICAgICAgICAgdWludDE2X3QgbjsKKyAgICAgICAgICAgIGludCBpOworICAgICAgICAgICAgY2hhciAqZTsKKworICAgICAgICAgICAgLyogQWNjb3JkaW5nIHRvIFJGQzM1OTcgKi8KKworICAgICAgICAgICAgc25wcmludGYodCA9IGJ1Ziwgc2l6ZW9mKGJ1ZiksICJcXCMgJXUiLCByLT5kYXRhLmdlbmVyaWMuc2l6ZSk7CisKKyAgICAgICAgICAgIGUgPSBzdHJjaHIodCwgMCk7CisKKyAgICAgICAgICAgIGZvciAoYyA9IHItPmRhdGEuZ2VuZXJpYy5kYXRhLCBuID0gci0+ZGF0YS5nZW5lcmljLnNpemUsIGkgPSAwOworICAgICAgICAgICAgICAgICBuID4gMCAmJiBpIDwgMjA7CisgICAgICAgICAgICAgICAgIGMgKyssIG4gLS0sIGkrKykgeworCisgICAgICAgICAgICAgICAgc3ByaW50ZihlLCAiICUwMlgiLCAqYyk7CisgICAgICAgICAgICAgICAgZSA9IHN0cmNocihlLCAwKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwID0gYXZhaGlfa2V5X3RvX3N0cmluZyhyLT5rZXkpOworICAgIHMgPSBhdmFoaV9zdHJkdXBfcHJpbnRmKCIlcyAlcyA7IHR0bD0ldSIsIHAsIHQsIHItPnR0bCk7CisgICAgYXZhaGlfZnJlZShwKTsKKyAgICBhdmFoaV9mcmVlKGQpOworCisgICAgcmV0dXJuIHM7Cit9CisKK2ludCBhdmFoaV9rZXlfZXF1YWwoY29uc3QgQXZhaGlLZXkgKmEsIGNvbnN0IEF2YWhpS2V5ICpiKSB7CisgICAgYXNzZXJ0KGEpOworICAgIGFzc2VydChiKTsKKworICAgIGlmIChhID09IGIpCisgICAgICAgIHJldHVybiAxOworCisgICAgcmV0dXJuIGF2YWhpX2RvbWFpbl9lcXVhbChhLT5uYW1lLCBiLT5uYW1lKSAmJgorICAgICAgICBhLT50eXBlID09IGItPnR5cGUgJiYKKyAgICAgICAgYS0+Y2xhenogPT0gYi0+Y2xheno7Cit9CisKK2ludCBhdmFoaV9rZXlfcGF0dGVybl9tYXRjaChjb25zdCBBdmFoaUtleSAqcGF0dGVybiwgY29uc3QgQXZhaGlLZXkgKmspIHsKKyAgICBhc3NlcnQocGF0dGVybik7CisgICAgYXNzZXJ0KGspOworCisgICAgYXNzZXJ0KCFhdmFoaV9rZXlfaXNfcGF0dGVybihrKSk7CisKKyAgICBpZiAocGF0dGVybiA9PSBrKQorICAgICAgICByZXR1cm4gMTsKKworICAgIHJldHVybiBhdmFoaV9kb21haW5fZXF1YWwocGF0dGVybi0+bmFtZSwgay0+bmFtZSkgJiYKKyAgICAgICAgKHBhdHRlcm4tPnR5cGUgPT0gay0+dHlwZSB8fCBwYXR0ZXJuLT50eXBlID09IEFWQUhJX0ROU19UWVBFX0FOWSkgJiYKKyAgICAgICAgKHBhdHRlcm4tPmNsYXp6ID09IGstPmNsYXp6IHx8IHBhdHRlcm4tPmNsYXp6ID09IEFWQUhJX0ROU19DTEFTU19BTlkpOworfQorCitpbnQgYXZhaGlfa2V5X2lzX3BhdHRlcm4oY29uc3QgQXZhaGlLZXkgKmspIHsKKyAgICBhc3NlcnQoayk7CisKKyAgICByZXR1cm4KKyAgICAgICAgay0+dHlwZSA9PSBBVkFISV9ETlNfVFlQRV9BTlkgfHwKKyAgICAgICAgay0+Y2xhenogPT0gQVZBSElfRE5TX0NMQVNTX0FOWTsKK30KKwordW5zaWduZWQgYXZhaGlfa2V5X2hhc2goY29uc3QgQXZhaGlLZXkgKmspIHsKKyAgICBhc3NlcnQoayk7CisKKyAgICByZXR1cm4KKyAgICAgICAgYXZhaGlfZG9tYWluX2hhc2goay0+bmFtZSkgKworICAgICAgICBrLT50eXBlICsKKyAgICAgICAgay0+Y2xheno7Cit9CisKK3N0YXRpYyBpbnQgcmRhdGFfZXF1YWwoY29uc3QgQXZhaGlSZWNvcmQgKmEsIGNvbnN0IEF2YWhpUmVjb3JkICpiKSB7CisgICAgYXNzZXJ0KGEpOworICAgIGFzc2VydChiKTsKKyAgICBhc3NlcnQoYS0+a2V5LT50eXBlID09IGItPmtleS0+dHlwZSk7CisKKyAgICBzd2l0Y2ggKGEtPmtleS0+dHlwZSkgeworICAgICAgICBjYXNlIEFWQUhJX0ROU19UWVBFX1NSVjoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgIGEtPmRhdGEuc3J2LnByaW9yaXR5ID09IGItPmRhdGEuc3J2LnByaW9yaXR5ICYmCisgICAgICAgICAgICAgICAgYS0+ZGF0YS5zcnYud2VpZ2h0ID09IGItPmRhdGEuc3J2LndlaWdodCAmJgorICAgICAgICAgICAgICAgIGEtPmRhdGEuc3J2LnBvcnQgPT0gYi0+ZGF0YS5zcnYucG9ydCAmJgorICAgICAgICAgICAgICAgIGF2YWhpX2RvbWFpbl9lcXVhbChhLT5kYXRhLnNydi5uYW1lLCBiLT5kYXRhLnNydi5uYW1lKTsKKworICAgICAgICBjYXNlIEFWQUhJX0ROU19UWVBFX1BUUjoKKyAgICAgICAgY2FzZSBBVkFISV9ETlNfVFlQRV9DTkFNRToKKyAgICAgICAgY2FzZSBBVkFISV9ETlNfVFlQRV9OUzoKKyAgICAgICAgICAgIHJldHVybiBhdmFoaV9kb21haW5fZXF1YWwoYS0+ZGF0YS5wdHIubmFtZSwgYi0+ZGF0YS5wdHIubmFtZSk7CisKKyAgICAgICAgY2FzZSBBVkFISV9ETlNfVFlQRV9ISU5GTzoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgICFzdHJjbXAoYS0+ZGF0YS5oaW5mby5jcHUsIGItPmRhdGEuaGluZm8uY3B1KSAmJgorICAgICAgICAgICAgICAgICFzdHJjbXAoYS0+ZGF0YS5oaW5mby5vcywgYi0+ZGF0YS5oaW5mby5vcyk7CisKKyAgICAgICAgY2FzZSBBVkFISV9ETlNfVFlQRV9UWFQ6CisgICAgICAgICAgICByZXR1cm4gYXZhaGlfc3RyaW5nX2xpc3RfZXF1YWwoYS0+ZGF0YS50eHQuc3RyaW5nX2xpc3QsIGItPmRhdGEudHh0LnN0cmluZ19saXN0KTsKKworICAgICAgICBjYXNlIEFWQUhJX0ROU19UWVBFX0E6CisgICAgICAgICAgICByZXR1cm4gbWVtY21wKCZhLT5kYXRhLmEuYWRkcmVzcywgJmItPmRhdGEuYS5hZGRyZXNzLCBzaXplb2YoQXZhaGlJUHY0QWRkcmVzcykpID09IDA7CisKKyAgICAgICAgY2FzZSBBVkFISV9ETlNfVFlQRV9BQUFBOgorICAgICAgICAgICAgcmV0dXJuIG1lbWNtcCgmYS0+ZGF0YS5hYWFhLmFkZHJlc3MsICZiLT5kYXRhLmFhYWEuYWRkcmVzcywgc2l6ZW9mKEF2YWhpSVB2NkFkZHJlc3MpKSA9PSAwOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gYS0+ZGF0YS5nZW5lcmljLnNpemUgPT0gYi0+ZGF0YS5nZW5lcmljLnNpemUgJiYKKyAgICAgICAgICAgICAgICAoYS0+ZGF0YS5nZW5lcmljLnNpemUgPT0gMCB8fCBtZW1jbXAoYS0+ZGF0YS5nZW5lcmljLmRhdGEsIGItPmRhdGEuZ2VuZXJpYy5kYXRhLCBhLT5kYXRhLmdlbmVyaWMuc2l6ZSkgPT0gMCk7CisgICAgfQorCit9CisKK2ludCBhdmFoaV9yZWNvcmRfZXF1YWxfbm9fdHRsKGNvbnN0IEF2YWhpUmVjb3JkICphLCBjb25zdCBBdmFoaVJlY29yZCAqYikgeworICAgIGFzc2VydChhKTsKKyAgICBhc3NlcnQoYik7CisKKyAgICBpZiAoYSA9PSBiKQorICAgICAgICByZXR1cm4gMTsKKworICAgIHJldHVybgorICAgICAgICBhdmFoaV9rZXlfZXF1YWwoYS0+a2V5LCBiLT5rZXkpICYmCisgICAgICAgIHJkYXRhX2VxdWFsKGEsIGIpOworfQorCisKK0F2YWhpUmVjb3JkICphdmFoaV9yZWNvcmRfY29weShBdmFoaVJlY29yZCAqcikgeworICAgIEF2YWhpUmVjb3JkICpjb3B5OworCisgICAgaWYgKCEoY29weSA9IGF2YWhpX25ldyhBdmFoaVJlY29yZCwgMSkpKSB7CisgICAgICAgIGF2YWhpX2xvZ19lcnJvcigiYXZhaGlfbmV3KCkgZmFpbGVkLiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBjb3B5LT5yZWYgPSAxOworICAgIGNvcHktPmtleSA9IGF2YWhpX2tleV9yZWYoci0+a2V5KTsKKyAgICBjb3B5LT50dGwgPSByLT50dGw7CisKKyAgICBzd2l0Y2ggKHItPmtleS0+dHlwZSkgeworICAgICAgICBjYXNlIEFWQUhJX0ROU19UWVBFX1BUUjoKKyAgICAgICAgY2FzZSBBVkFISV9ETlNfVFlQRV9DTkFNRToKKyAgICAgICAgY2FzZSBBVkFISV9ETlNfVFlQRV9OUzoKKyAgICAgICAgICAgIGlmICghKGNvcHktPmRhdGEucHRyLm5hbWUgPSBhdmFoaV9zdHJkdXAoci0+ZGF0YS5wdHIubmFtZSkpKQorICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQVZBSElfRE5TX1RZUEVfU1JWOgorICAgICAgICAgICAgY29weS0+ZGF0YS5zcnYucHJpb3JpdHkgPSByLT5kYXRhLnNydi5wcmlvcml0eTsKKyAgICAgICAgICAgIGNvcHktPmRhdGEuc3J2LndlaWdodCA9IHItPmRhdGEuc3J2LndlaWdodDsKKyAgICAgICAgICAgIGNvcHktPmRhdGEuc3J2LnBvcnQgPSByLT5kYXRhLnNydi5wb3J0OworICAgICAgICAgICAgaWYgKCEoY29weS0+ZGF0YS5zcnYubmFtZSA9IGF2YWhpX3N0cmR1cChyLT5kYXRhLnNydi5uYW1lKSkpCisgICAgICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBVkFISV9ETlNfVFlQRV9ISU5GTzoKKyAgICAgICAgICAgIGlmICghKGNvcHktPmRhdGEuaGluZm8ub3MgPSBhdmFoaV9zdHJkdXAoci0+ZGF0YS5oaW5mby5vcykpKQorICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKworICAgICAgICAgICAgaWYgKCEoY29weS0+ZGF0YS5oaW5mby5jcHUgPSBhdmFoaV9zdHJkdXAoci0+ZGF0YS5oaW5mby5jcHUpKSkgeworICAgICAgICAgICAgICAgIGF2YWhpX2ZyZWUoci0+ZGF0YS5oaW5mby5vcyk7CisgICAgICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBVkFISV9ETlNfVFlQRV9UWFQ6CisgICAgICAgICAgICBjb3B5LT5kYXRhLnR4dC5zdHJpbmdfbGlzdCA9IGF2YWhpX3N0cmluZ19saXN0X2NvcHkoci0+ZGF0YS50eHQuc3RyaW5nX2xpc3QpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBVkFISV9ETlNfVFlQRV9BOgorICAgICAgICAgICAgY29weS0+ZGF0YS5hLmFkZHJlc3MgPSByLT5kYXRhLmEuYWRkcmVzczsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQVZBSElfRE5TX1RZUEVfQUFBQToKKyAgICAgICAgICAgIGNvcHktPmRhdGEuYWFhYS5hZGRyZXNzID0gci0+ZGF0YS5hYWFhLmFkZHJlc3M7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgaWYgKCEoY29weS0+ZGF0YS5nZW5lcmljLmRhdGEgPSBhdmFoaV9tZW1kdXAoci0+ZGF0YS5nZW5lcmljLmRhdGEsIHItPmRhdGEuZ2VuZXJpYy5zaXplKSkpCisgICAgICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICAgICAgY29weS0+ZGF0YS5nZW5lcmljLnNpemUgPSByLT5kYXRhLmdlbmVyaWMuc2l6ZTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgfQorCisgICAgcmV0dXJuIGNvcHk7CisKK2ZhaWw6CisgICAgYXZhaGlfbG9nX2Vycm9yKCJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5Iik7CisKKyAgICBhdmFoaV9rZXlfdW5yZWYoY29weS0+a2V5KTsKKyAgICBhdmFoaV9mcmVlKGNvcHkpOworCisgICAgcmV0dXJuIE5VTEw7Cit9CisKKworc2l6ZV90IGF2YWhpX2tleV9nZXRfZXN0aW1hdGVfc2l6ZShBdmFoaUtleSAqaykgeworICAgIGFzc2VydChrKTsKKworICAgIHJldHVybiBzdHJsZW4oay0+bmFtZSkrMSs0OworfQorCitzaXplX3QgYXZhaGlfcmVjb3JkX2dldF9lc3RpbWF0ZV9zaXplKEF2YWhpUmVjb3JkICpyKSB7CisgICAgc2l6ZV90IG47CisgICAgYXNzZXJ0KHIpOworCisgICAgbiA9IGF2YWhpX2tleV9nZXRfZXN0aW1hdGVfc2l6ZShyLT5rZXkpICsgNCArIDI7CisKKyAgICBzd2l0Y2ggKHItPmtleS0+dHlwZSkgeworICAgICAgICBjYXNlIEFWQUhJX0ROU19UWVBFX1BUUjoKKyAgICAgICAgY2FzZSBBVkFISV9ETlNfVFlQRV9DTkFNRToKKyAgICAgICAgY2FzZSBBVkFISV9ETlNfVFlQRV9OUzoKKyAgICAgICAgICAgIG4gKz0gc3RybGVuKHItPmRhdGEucHRyLm5hbWUpICsgMTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQVZBSElfRE5TX1RZUEVfU1JWOgorICAgICAgICAgICAgbiArPSA2ICsgc3RybGVuKHItPmRhdGEuc3J2Lm5hbWUpICsgMTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQVZBSElfRE5TX1RZUEVfSElORk86CisgICAgICAgICAgICBuICs9IHN0cmxlbihyLT5kYXRhLmhpbmZvLm9zKSArIDEgKyBzdHJsZW4oci0+ZGF0YS5oaW5mby5jcHUpICsgMTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQVZBSElfRE5TX1RZUEVfVFhUOgorICAgICAgICAgICAgbiArPSBhdmFoaV9zdHJpbmdfbGlzdF9zZXJpYWxpemUoci0+ZGF0YS50eHQuc3RyaW5nX2xpc3QsIE5VTEwsIDApOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBVkFISV9ETlNfVFlQRV9BOgorICAgICAgICAgICAgbiArPSBzaXplb2YoQXZhaGlJUHY0QWRkcmVzcyk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFWQUhJX0ROU19UWVBFX0FBQUE6CisgICAgICAgICAgICBuICs9IHNpemVvZihBdmFoaUlQdjZBZGRyZXNzKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBuICs9IHItPmRhdGEuZ2VuZXJpYy5zaXplOworICAgIH0KKworICAgIHJldHVybiBuOworfQorCitzdGF0aWMgaW50IGxleGljb2dyYXBoaWNhbF9tZW1jbXAoY29uc3Qgdm9pZCogYSwgc2l6ZV90IGFsLCBjb25zdCB2b2lkKiBiLCBzaXplX3QgYmwpIHsKKyAgICBzaXplX3QgYzsKKyAgICBpbnQgcmV0OworCisgICAgYXNzZXJ0KGEpOworICAgIGFzc2VydChiKTsKKworICAgIGMgPSBhbCA8IGJsID8gYWwgOiBibDsKKyAgICBpZiAoKHJldCA9IG1lbWNtcChhLCBiLCBjKSkpCisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICBpZiAoYWwgPT0gYmwpCisgICAgICAgIHJldHVybiAwOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGFsID09IGMgPyAxIDogLTE7Cit9CisKK3N0YXRpYyBpbnQgdWludDE2X2NtcCh1aW50MTZfdCBhLCB1aW50MTZfdCBiKSB7CisgICAgcmV0dXJuIGEgPT0gYiA/IDAgOiAoYSA8IGIgPyAtMSA6IDEpOworfQorCitpbnQgYXZhaGlfcmVjb3JkX2xleGljb2dyYXBoaWNhbF9jb21wYXJlKEF2YWhpUmVjb3JkICphLCBBdmFoaVJlY29yZCAqYikgeworICAgIGludCByOworLyogICAgICBjaGFyICp0MSwgKnQyOyAqLworCisgICAgYXNzZXJ0KGEpOworICAgIGFzc2VydChiKTsKKworLyogICAgIHQxID0gYXZhaGlfcmVjb3JkX3RvX3N0cmluZyhhKTsgKi8KKy8qICAgICB0MiA9IGF2YWhpX3JlY29yZF90b19zdHJpbmcoYik7ICovCisvKiAgICAgZ19tZXNzYWdlKCJsZXhpY29jbXA6ICVzICVzIiwgdDEsIHQyKTsgKi8KKy8qICAgICBhdmFoaV9mcmVlKHQxKTsgKi8KKy8qICAgICBhdmFoaV9mcmVlKHQyKTsgKi8KKworICAgIGlmIChhID09IGIpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKChyID0gdWludDE2X2NtcChhLT5rZXktPmNsYXp6LCBiLT5rZXktPmNsYXp6KSkgfHwKKyAgICAgICAgKHIgPSB1aW50MTZfY21wKGEtPmtleS0+dHlwZSwgYi0+a2V5LT50eXBlKSkpCisgICAgICAgIHJldHVybiByOworCisgICAgc3dpdGNoIChhLT5rZXktPnR5cGUpIHsKKworICAgICAgICBjYXNlIEFWQUhJX0ROU19UWVBFX1BUUjoKKyAgICAgICAgY2FzZSBBVkFISV9ETlNfVFlQRV9DTkFNRToKKyAgICAgICAgY2FzZSBBVkFISV9ETlNfVFlQRV9OUzoKKyAgICAgICAgICAgIHJldHVybiBhdmFoaV9iaW5hcnlfZG9tYWluX2NtcChhLT5kYXRhLnB0ci5uYW1lLCBiLT5kYXRhLnB0ci5uYW1lKTsKKworICAgICAgICBjYXNlIEFWQUhJX0ROU19UWVBFX1NSVjogeworICAgICAgICAgICAgaWYgKChyID0gdWludDE2X2NtcChhLT5kYXRhLnNydi5wcmlvcml0eSwgYi0+ZGF0YS5zcnYucHJpb3JpdHkpKSA9PSAwICYmCisgICAgICAgICAgICAgICAgKHIgPSB1aW50MTZfY21wKGEtPmRhdGEuc3J2LndlaWdodCwgYi0+ZGF0YS5zcnYud2VpZ2h0KSkgPT0gMCAmJgorICAgICAgICAgICAgICAgIChyID0gdWludDE2X2NtcChhLT5kYXRhLnNydi5wb3J0LCBiLT5kYXRhLnNydi5wb3J0KSkgPT0gMCkKKyAgICAgICAgICAgICAgICByID0gYXZhaGlfYmluYXJ5X2RvbWFpbl9jbXAoYS0+ZGF0YS5zcnYubmFtZSwgYi0+ZGF0YS5zcnYubmFtZSk7CisKKyAgICAgICAgICAgIHJldHVybiByOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBBVkFISV9ETlNfVFlQRV9ISU5GTzogeworCisgICAgICAgICAgICBpZiAoKHIgPSBzdHJjbXAoYS0+ZGF0YS5oaW5mby5jcHUsIGItPmRhdGEuaGluZm8uY3B1KSkgfHwKKyAgICAgICAgICAgICAgICAociA9IHN0cmNtcChhLT5kYXRhLmhpbmZvLm9zLCBiLT5kYXRhLmhpbmZvLm9zKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHI7CisKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIH0KKworICAgICAgICBjYXNlIEFWQUhJX0ROU19UWVBFX1RYVDogeworCisgICAgICAgICAgICB1aW50OF90ICptYSA9IE5VTEwsICptYiA9IE5VTEw7CisgICAgICAgICAgICBzaXplX3QgYXNpemUsIGJzaXplOworCisgICAgICAgICAgICBhc2l6ZSA9IGF2YWhpX3N0cmluZ19saXN0X3NlcmlhbGl6ZShhLT5kYXRhLnR4dC5zdHJpbmdfbGlzdCwgTlVMTCwgMCk7CisgICAgICAgICAgICBic2l6ZSA9IGF2YWhpX3N0cmluZ19saXN0X3NlcmlhbGl6ZShiLT5kYXRhLnR4dC5zdHJpbmdfbGlzdCwgTlVMTCwgMCk7CisKKyAgICAgICAgICAgIGlmIChhc2l6ZSA+IDAgJiYgIShtYSA9IGF2YWhpX25ldyh1aW50OF90LCBhc2l6ZSkpKQorICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKworICAgICAgICAgICAgaWYgKGJzaXplID4gMCAmJiAhKG1iID0gYXZhaGlfbmV3KHVpbnQ4X3QsIGJzaXplKSkpIHsKKyAgICAgICAgICAgICAgICBhdmFoaV9mcmVlKG1hKTsKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGF2YWhpX3N0cmluZ19saXN0X3NlcmlhbGl6ZShhLT5kYXRhLnR4dC5zdHJpbmdfbGlzdCwgbWEsIGFzaXplKTsKKyAgICAgICAgICAgIGF2YWhpX3N0cmluZ19saXN0X3NlcmlhbGl6ZShiLT5kYXRhLnR4dC5zdHJpbmdfbGlzdCwgbWIsIGJzaXplKTsKKworICAgICAgICAgICAgaWYgKGFzaXplICYmIGJzaXplKQorICAgICAgICAgICAgICAgIHIgPSBsZXhpY29ncmFwaGljYWxfbWVtY21wKG1hLCBhc2l6ZSwgbWIsIGJzaXplKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGFzaXplICYmICFic2l6ZSkKKyAgICAgICAgICAgICAgICByID0gMTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCFhc2l6ZSAmJiBic2l6ZSkKKyAgICAgICAgICAgICAgICByID0gLTE7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgciA9IDA7CisKKyAgICAgICAgICAgIGF2YWhpX2ZyZWUobWEpOworICAgICAgICAgICAgYXZhaGlfZnJlZShtYik7CisKKyAgICAgICAgICAgIHJldHVybiByOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBBVkFISV9ETlNfVFlQRV9BOgorICAgICAgICAgICAgcmV0dXJuIG1lbWNtcCgmYS0+ZGF0YS5hLmFkZHJlc3MsICZiLT5kYXRhLmEuYWRkcmVzcywgc2l6ZW9mKEF2YWhpSVB2NEFkZHJlc3MpKTsKKworICAgICAgICBjYXNlIEFWQUhJX0ROU19UWVBFX0FBQUE6CisgICAgICAgICAgICByZXR1cm4gbWVtY21wKCZhLT5kYXRhLmFhYWEuYWRkcmVzcywgJmItPmRhdGEuYWFhYS5hZGRyZXNzLCBzaXplb2YoQXZhaGlJUHY2QWRkcmVzcykpOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX21lbWNtcChhLT5kYXRhLmdlbmVyaWMuZGF0YSwgYS0+ZGF0YS5nZW5lcmljLnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiLT5kYXRhLmdlbmVyaWMuZGF0YSwgYi0+ZGF0YS5nZW5lcmljLnNpemUpOworICAgIH0KKworCitmYWlsOgorICAgIGF2YWhpX2xvZ19lcnJvcihfX0ZJTEVfXyI6IE91dCBvZiBtZW1vcnkiKTsKKyAgICByZXR1cm4gLTE7IC8qIG9yIHdoYXRldmVyIC4uLiAqLworfQorCitpbnQgYXZhaGlfcmVjb3JkX2lzX2dvb2RieWUoQXZhaGlSZWNvcmQgKnIpIHsKKyAgICBhc3NlcnQocik7CisKKyAgICByZXR1cm4gci0+dHRsID09IDA7Cit9CisKK2ludCBhdmFoaV9rZXlfaXNfdmFsaWQoQXZhaGlLZXkgKmspIHsKKyAgICBhc3NlcnQoayk7CisKKyAgICBpZiAoIWF2YWhpX2lzX3ZhbGlkX2RvbWFpbl9uYW1lKGstPm5hbWUpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiAxOworfQorCitpbnQgYXZhaGlfcmVjb3JkX2lzX3ZhbGlkKEF2YWhpUmVjb3JkICpyKSB7CisgICAgYXNzZXJ0KHIpOworCisgICAgaWYgKCFhdmFoaV9rZXlfaXNfdmFsaWQoci0+a2V5KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBzd2l0Y2ggKHItPmtleS0+dHlwZSkgeworCisgICAgICAgIGNhc2UgQVZBSElfRE5TX1RZUEVfUFRSOgorICAgICAgICBjYXNlIEFWQUhJX0ROU19UWVBFX0NOQU1FOgorICAgICAgICBjYXNlIEFWQUhJX0ROU19UWVBFX05TOgorICAgICAgICAgICAgcmV0dXJuIGF2YWhpX2lzX3ZhbGlkX2RvbWFpbl9uYW1lKHItPmRhdGEucHRyLm5hbWUpOworCisgICAgICAgIGNhc2UgQVZBSElfRE5TX1RZUEVfU1JWOgorICAgICAgICAgICAgcmV0dXJuIGF2YWhpX2lzX3ZhbGlkX2RvbWFpbl9uYW1lKHItPmRhdGEuc3J2Lm5hbWUpOworCisgICAgICAgIGNhc2UgQVZBSElfRE5TX1RZUEVfSElORk86CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICBzdHJsZW4oci0+ZGF0YS5oaW5mby5vcykgPD0gMjU1ICYmCisgICAgICAgICAgICAgICAgc3RybGVuKHItPmRhdGEuaGluZm8uY3B1KSA8PSAyNTU7CisKKyAgICAgICAgY2FzZSBBVkFISV9ETlNfVFlQRV9UWFQ6IHsKKworICAgICAgICAgICAgQXZhaGlTdHJpbmdMaXN0ICpzdHJsc3Q7CisKKyAgICAgICAgICAgIGZvciAoc3RybHN0ID0gci0+ZGF0YS50eHQuc3RyaW5nX2xpc3Q7IHN0cmxzdDsgc3RybHN0ID0gc3RybHN0LT5uZXh0KQorICAgICAgICAgICAgICAgIGlmIChzdHJsc3QtPnNpemUgPiAyNTUgfHwgc3RybHN0LT5zaXplIDw9IDApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAxOworfQorCitzdGF0aWMgQXZhaGlBZGRyZXNzICpnZXRfYWRkcmVzcyhjb25zdCBBdmFoaVJlY29yZCAqciwgQXZhaGlBZGRyZXNzICphKSB7CisgICAgYXNzZXJ0KHIpOworCisgICAgc3dpdGNoIChyLT5rZXktPnR5cGUpIHsKKyAgICAgICAgY2FzZSBBVkFISV9ETlNfVFlQRV9BOgorICAgICAgICAgICAgYS0+cHJvdG8gPSBBVkFISV9QUk9UT19JTkVUOworICAgICAgICAgICAgYS0+ZGF0YS5pcHY0ID0gci0+ZGF0YS5hLmFkZHJlc3M7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFWQUhJX0ROU19UWVBFX0FBQUE6CisgICAgICAgICAgICBhLT5wcm90byA9IEFWQUhJX1BST1RPX0lORVQ2OworICAgICAgICAgICAgYS0+ZGF0YS5pcHY2ID0gci0+ZGF0YS5hYWFhLmFkZHJlc3M7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIGE7Cit9CisKK2ludCBhdmFoaV9yZWNvcmRfaXNfbGlua19sb2NhbF9hZGRyZXNzKGNvbnN0IEF2YWhpUmVjb3JkICpyKSB7CisgICAgQXZhaGlBZGRyZXNzIGE7CisKKyAgICBhc3NlcnQocik7CisKKyAgICBpZiAoIWdldF9hZGRyZXNzKHIsICZhKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gYXZhaGlfYWRkcmVzc19pc19saW5rX2xvY2FsKCZhKTsKK30KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL3JyLmggYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9yci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NGI4M2YKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9yci5oCkBAIC0wLDAgKzEsMTc1IEBACisjaWZuZGVmIGZvb3JyaGZvbworI2RlZmluZSBmb29ycmhmb28KKworLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisvKiogXGZpbGUgcnIuaCBGdW5jdGlvbnMgYW5kIGRlZmluaXRpb25zIGZvciBtYW5pcHVsYXRpbmcgRE5TIHJlc291cmNlIHJlY29yZCAoUlIpIGRhdGEuICovCisKKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL3N0cmxzdC5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9hZGRyZXNzLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2NkZWNsLmg+CisKK0FWQUhJX0NfREVDTF9CRUdJTgorCisvKiogRE5TIHJlY29yZCB0eXBlcywgc2VlIFJGQyAxMDM1LCBpbiBhZGRpdGlvbiB0byB0aG9zZSBkZWZpbmVkIGluIGRlZnMuaCAqLworZW51bSB7CisgICAgQVZBSElfRE5TX1RZUEVfQU5ZID0gMHhGRiwgICAvKio8IFNwZWNpYWwgcXVlcnkgdHlwZSBmb3IgcmVxdWVzdGluZyBhbGwgcmVjb3JkcyAqLworICAgIEFWQUhJX0ROU19UWVBFX09QVCA9IDQxLCAgICAgLyoqPCBFRE5TMCBvcHRpb24gKi8KKyAgICBBVkFISV9ETlNfVFlQRV9US0VZID0gMjQ5LAorICAgIEFWQUhJX0ROU19UWVBFX1RTSUcgPSAyNTAsCisgICAgQVZBSElfRE5TX1RZUEVfSVhGUiA9IDI1MSwKKyAgICBBVkFISV9ETlNfVFlQRV9BWEZSID0gMjUyCit9OworCisvKiogRE5TIHJlY29yZCBjbGFzc2VzLCBzZWUgUkZDIDEwMzUsIGluIGFkZGl0aW9uIHRvIHRob3NlIGRlZmluZWQgaW4gZGVmcy5oICovCitlbnVtIHsKKyAgICBBVkFISV9ETlNfQ0xBU1NfQU5ZID0gMHhGRiwgICAgICAgICAvKio8IFNwZWNpYWwgcXVlcnkgdHlwZSBmb3IgcmVxdWVzdGluZyBhbGwgcmVjb3JkcyAqLworICAgIEFWQUhJX0ROU19DQUNIRV9GTFVTSCA9IDB4ODAwMCwgICAgIC8qKjwgTm90IHJlYWxseSBhIGNsYXNzIGJ1dCBhIGJpdCB3aGljaCBtYXkgYmUgc2V0IGluIHJlc3BvbnNlIHBhY2tldHMsIHNlZSBtRE5TIHNwZWMgZm9yIG1vcmUgaW5mb3JtYXRpb24gKi8KKyAgICBBVkFISV9ETlNfVU5JQ0FTVF9SRVNQT05TRSA9IDB4ODAwMCAvKio8IE5vdCByZWFsbHkgYSBjbGFzcyBidXQgYSBiaXQgd2hpY2ggbWF5IGJlIHNldCBpbiBxdWVyeSBwYWNrZXRzLCBzZWUgbUROUyBzcGVjIGZvciBtb3JlIGluZm9ybWF0aW9uICovCit9OworCisvKiogRW5jYXBzdWxhdGVzIGEgRE5TIHF1ZXJ5IGtleSBjb25zaXN0aW5nIG9mIGNsYXNzLCB0eXBlIGFuZAorICAgIG5hbWUuIFVzZSBhdmFoaV9rZXlfcmVmKCkvYXZhaGlfa2V5X3VucmVmKCkgZm9yIG1hbmlwdWxhdGluZyB0aGUKKyAgICByZWZlcmVuY2UgY291bnRlci4gVGhlIHN0cnVjdHVyZSBpcyBpbnRlbmRlZCB0byBiZSB0cmVhdGVkIGFzICJpbW11dGFibGUiLCBubworICAgIGNoYW5nZXMgc2hvdWxkIGJlIGltcG9zZWQgYWZ0ZXIgY3JlYXRpb24gKi8KK3R5cGVkZWYgc3RydWN0IEF2YWhpS2V5IHsKKyAgICBpbnQgcmVmOyAgICAgICAgICAgLyoqPCBSZWZlcmVuY2UgY291bnRlciAqLworICAgIGNoYXIgKm5hbWU7ICAgICAgICAvKio8IFJlY29yZCBuYW1lICovCisgICAgdWludDE2X3QgY2xheno7ICAgIC8qKjwgUmVjb3JkIGNsYXNzLCBvbmUgb2YgdGhlIEFWQUhJX0ROU19DTEFTU194eHggY29uc3RhbnRzICovCisgICAgdWludDE2X3QgdHlwZTsgICAgIC8qKjwgUmVjb3JkIHR5cGUsIG9uZSBvZiB0aGUgQVZBSElfRE5TX1RZUEVfeHh4IGNvbnN0YW50cyAqLworfSBBdmFoaUtleTsKKworLyoqIEVuY2Fwc3VsYXRlcyBhIEROUyByZXNvdXJjZSByZWNvcmQuIFRoZSBzdHJ1Y3R1cmUgaXMgaW50ZW5kZWQgdG8KKyAqIGJlIHRyZWF0ZWQgYXMgImltbXV0YWJsZSIsIG5vIGNoYW5nZXMgc2hvdWxkIGJlIGltcG9zZWQgYWZ0ZXIKKyAqIGNyZWF0aW9uLiAqLwordHlwZWRlZiBzdHJ1Y3QgQXZhaGlSZWNvcmQgeworICAgIGludCByZWY7ICAgICAgICAgLyoqPCBSZWZlcmVuY2UgY291bnRlciAqLworICAgIEF2YWhpS2V5ICprZXk7ICAgLyoqPCBSZWZlcmVuY2UgdG8gdGhlIHF1ZXJ5IGtleSBvZiB0aGlzIHJlY29yZCAqLworCisgICAgdWludDMyX3QgdHRsOyAgICAgLyoqPCBETlMgVFRMIG9mIHRoaXMgcmVjb3JkICovCisKKyAgICB1bmlvbiB7CisKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIHZvaWQqIGRhdGE7CisgICAgICAgICAgICB1aW50MTZfdCBzaXplOworICAgICAgICB9IGdlbmVyaWM7IC8qKjwgR2VuZXJpYyByZWNvcmQgZGF0YSBmb3IgdW5rbm93biB0eXBlcyAqLworCisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICB1aW50MTZfdCBwcmlvcml0eTsKKyAgICAgICAgICAgIHVpbnQxNl90IHdlaWdodDsKKyAgICAgICAgICAgIHVpbnQxNl90IHBvcnQ7CisgICAgICAgICAgICBjaGFyICpuYW1lOworICAgICAgICB9IHNydjsgLyoqPCBEYXRhIGZvciBTUlYgcmVjb3JkcyAqLworCisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBjaGFyICpuYW1lOworICAgICAgICB9IHB0ciwgbnMsIGNuYW1lOyAvKio8IERhdGEgZm9yIFBUUiwgTlMgYW5kIENOQU1FIHJlY29yZHMgKi8KKworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgY2hhciAqY3B1OworICAgICAgICAgICAgY2hhciAqb3M7CisgICAgICAgIH0gaGluZm87IC8qKjwgRGF0YSBmb3IgSElORk8gcmVjb3JkcyAqLworCisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBBdmFoaVN0cmluZ0xpc3QgKnN0cmluZ19saXN0OworICAgICAgICB9IHR4dDsgLyoqPCBEYXRhIGZvciBUWFQgcmVjb3JkcyAqLworCisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBBdmFoaUlQdjRBZGRyZXNzIGFkZHJlc3M7CisgICAgICAgIH0gYTsgLyoqPCBEYXRhIGZvciBBIHJlY29yZHMgKi8KKworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgQXZhaGlJUHY2QWRkcmVzcyBhZGRyZXNzOworICAgICAgICB9IGFhYWE7IC8qKjwgRGF0YSBmb3IgQUFBQSByZWNvcmRzICovCisKKyAgICB9IGRhdGE7IC8qKjwgUmVjb3JkIGRhdGEgKi8KKworfSBBdmFoaVJlY29yZDsKKworLyoqIENyZWF0ZSBhIG5ldyBBdmFoaUtleSBvYmplY3QuIFRoZSByZWZlcmVuY2UgY291bnRlciB3aWxsIGJlIHNldCB0byAxLiAqLworQXZhaGlLZXkgKmF2YWhpX2tleV9uZXcoY29uc3QgY2hhciAqbmFtZSwgdWludDE2X3QgY2xhenosIHVpbnQxNl90IHR5cGUpOworCisvKiogSW5jcmVhc2UgdGhlIHJlZmVyZW5jZSBjb3VudGVyIG9mIGFuIEF2YWhpS2V5IG9iamVjdCBieSBvbmUgKi8KK0F2YWhpS2V5ICphdmFoaV9rZXlfcmVmKEF2YWhpS2V5ICprKTsKKworLyoqIERlY3JlYXNlIHRoZSByZWZlcmVuY2UgY291bnRlciBvZiBhbiBBdmFoaUtleSBvYmplY3QgYnkgb25lICovCit2b2lkIGF2YWhpX2tleV91bnJlZihBdmFoaUtleSAqayk7CisKKy8qKiBDaGVjayB3aGV0aGVyIHR3byBBdmFoaUtleSBvYmplY3QgY29udGFpbiB0aGUgc2FtZQorICogZGF0YS4gQVZBSElfRE5TX0NMQVNTX0FOWS9BVkFISV9ETlNfVFlQRV9BTlkgYXJlIHRyZWF0ZWQgbGlrZSBhbnkKKyAqIG90aGVyIGNsYXNzL3R5cGUuICovCitpbnQgYXZhaGlfa2V5X2VxdWFsKGNvbnN0IEF2YWhpS2V5ICphLCBjb25zdCBBdmFoaUtleSAqYik7CisKKy8qKiBSZXR1cm4gYSBudW1lcmljIGhhc2ggdmFsdWUgZm9yIGEga2V5IGZvciB1c2FnZSBpbiBoYXNoIHRhYmxlcy4gKi8KK3Vuc2lnbmVkIGF2YWhpX2tleV9oYXNoKGNvbnN0IEF2YWhpS2V5ICprKTsKKworLyoqIENyZWF0ZSBhIG5ldyByZWNvcmQgb2JqZWN0LiBSZWNvcmQgZGF0YSBzaG91bGQgYmUgZmlsbGVkIGluIHJpZ2h0IGFmdGVyIGNyZWF0aW9uLiBUaGUgcmVmZXJlbmNlIGNvdW50ZXIgaXMgc2V0IHRvIDEuICovCitBdmFoaVJlY29yZCAqYXZhaGlfcmVjb3JkX25ldyhBdmFoaUtleSAqaywgdWludDMyX3QgdHRsKTsKKworLyoqIENyZWF0ZSBhIG5ldyByZWNvcmQgb2JqZWN0LiBSZWNvcmQgZGF0YSBzaG91bGQgYmUgZmlsbGVkIGluIHJpZ2h0IGFmdGVyIGNyZWF0aW9uLiBUaGUgcmVmZXJlbmNlIGNvdW50ZXIgaXMgc2V0IHRvIDEuICovCitBdmFoaVJlY29yZCAqYXZhaGlfcmVjb3JkX25ld19mdWxsKGNvbnN0IGNoYXIgKm5hbWUsIHVpbnQxNl90IGNsYXp6LCB1aW50MTZfdCB0eXBlLCB1aW50MzJfdCB0dGwpOworCisvKiogSW5jcmVhc2UgdGhlIHJlZmVyZW5jZSBjb3VudGVyIG9mIGFuIEF2YWhpUmVjb3JkIGJ5IG9uZS4gKi8KK0F2YWhpUmVjb3JkICphdmFoaV9yZWNvcmRfcmVmKEF2YWhpUmVjb3JkICpyKTsKKworLyoqIERlY3JlYXNlIHRoZSByZWZlcmVuY2UgY291bnRlciBvZiBhbiBBdmFoaVJlY29yZCBieSBvbmUuICovCit2b2lkIGF2YWhpX3JlY29yZF91bnJlZihBdmFoaVJlY29yZCAqcik7CisKKy8qKiBSZXR1cm4gYSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzcGVjaWZpZWQgRE5TIGNsYXNzLiBUaGUKKyAqIHJldHVybmVkIHBvaW50ZXIgcG9pbnRzIHRvIGEgcmVhZCBvbmx5IGludGVybmFsIHN0cmluZy4gKi8KK2NvbnN0IGNoYXIgKmF2YWhpX2Ruc19jbGFzc190b19zdHJpbmcodWludDE2X3QgY2xhenopOworCisvKiogUmV0dXJuIGEgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3BlY2lmaWVkIEROUyBjbGFzcy4gVGhlCisgKiByZXR1cm5lZCBwb2ludGVyIHBvaW50cyB0byBhIHJlYWQgb25seSBpbnRlcm5hbCBzdHJpbmcuICovCitjb25zdCBjaGFyICphdmFoaV9kbnNfdHlwZV90b19zdHJpbmcodWludDE2X3QgdHlwZSk7CisKKy8qKiBDcmVhdGUgYSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzcGVjaWZpZWQga2V5LiBhdmFoaV9mcmVlKCkgdGhlCisgKiByZXN1bHQhICovCitjaGFyICphdmFoaV9rZXlfdG9fc3RyaW5nKGNvbnN0IEF2YWhpS2V5ICprKTsKKworLyoqIENyZWF0ZSBhIHRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNwZWNpZmllZCByZWNvcmQsIHNpbWlsYXIKKyAqIGluIHN0eWxlIHRvIEJJTkQgem9uZSBmaWxlIGRhdGEuIGF2YWhpX2ZyZWUoKSB0aGUgcmVzdWx0ISAqLworY2hhciAqYXZhaGlfcmVjb3JkX3RvX3N0cmluZyhjb25zdCBBdmFoaVJlY29yZCAqcik7CisKKy8qKiBDaGVjayB3aGV0aGVyIHR3byByZWNvcmRzIGFyZSBlcXVhbCAocmVnYXJkbGVzcyBvZiB0aGUgVFRMICovCitpbnQgYXZhaGlfcmVjb3JkX2VxdWFsX25vX3R0bChjb25zdCBBdmFoaVJlY29yZCAqYSwgY29uc3QgQXZhaGlSZWNvcmQgKmIpOworCisvKiogQ2hlY2sgd2hldGhlciB0aGUgc3BlY2lmaWVkIGtleSBpcyB2YWxpZCAqLworaW50IGF2YWhpX2tleV9pc192YWxpZChBdmFoaUtleSAqayk7CisKKy8qKiBDaGVjayB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgcmVjb3JkIGlzIHZhbGlkICovCitpbnQgYXZhaGlfcmVjb3JkX2lzX3ZhbGlkKEF2YWhpUmVjb3JkICpyKTsKKworLyoqIFBhcnNlIGEgYmluYXJ5IHJkYXRhIG9iamVjdCBhbmQgZmlsbCBpdCBpbnRvICpyZWNvcmQuIFRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgaW1wbGVtZW50ZWQgaW4gZG5zLmMgKi8KK2ludCBhdmFoaV9yZGF0YV9wYXJzZShBdmFoaVJlY29yZCAqcmVjb3JkLCBjb25zdCB2b2lkKiByZGF0YSwgc2l6ZV90IHNpemUpOworCisvKiogU2VyaWFsaXplIGFuIEF2YWhpUmVjb3JkIG9iamVjdCBpbnRvIGJpbmFyeSByZGF0YS4gVGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSBpbXBsZW1lbnRlZCBpbiBkbnMuYyAqLworc2l6ZV90IGF2YWhpX3JkYXRhX3NlcmlhbGl6ZShBdmFoaVJlY29yZCAqcmVjb3JkLCB2b2lkICpyZGF0YSwgc2l6ZV90IG1heF9zaXplKTsKKworLyoqIFJldHVybiBUUlVFIGlmIHRoZSBBdmFoaVJlY29yZCBvYmplY3QgaXMgYSBsaW5rLWxvY2FsIEEgb3IgQUFBQSBhZGRyZXNzICovCitpbnQgYXZhaGlfcmVjb3JkX2lzX2xpbmtfbG9jYWxfYWRkcmVzcyhjb25zdCBBdmFoaVJlY29yZCAqcik7CisKK0FWQUhJX0NfREVDTF9FTkQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9ycmxpc3QuYyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL3JybGlzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNzk0YWIKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9ycmxpc3QuYwpAQCAtMCwwICsxLDE4OCBAQAorLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKworI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9sbGlzdC5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9tYWxsb2MuaD4KKworI2luY2x1ZGUgInJybGlzdC5oIgorI2luY2x1ZGUgImxvZy5oIgorCit0eXBlZGVmIHN0cnVjdCBBdmFoaVJlY29yZExpc3RJdGVtIEF2YWhpUmVjb3JkTGlzdEl0ZW07CisKK3N0cnVjdCBBdmFoaVJlY29yZExpc3RJdGVtIHsKKyAgICBpbnQgcmVhZDsKKyAgICBBdmFoaVJlY29yZCAqcmVjb3JkOworICAgIGludCB1bmljYXN0X3Jlc3BvbnNlOworICAgIGludCBmbHVzaF9jYWNoZTsKKyAgICBpbnQgYXV4aWxpYXJ5OworICAgIEFWQUhJX0xMSVNUX0ZJRUxEUyhBdmFoaVJlY29yZExpc3RJdGVtLCBpdGVtcyk7Cit9OworCitzdHJ1Y3QgQXZhaGlSZWNvcmRMaXN0IHsKKyAgICBBVkFISV9MTElTVF9IRUFEKEF2YWhpUmVjb3JkTGlzdEl0ZW0sIHJlYWQpOworICAgIEFWQUhJX0xMSVNUX0hFQUQoQXZhaGlSZWNvcmRMaXN0SXRlbSwgdW5yZWFkKTsKKworICAgIGludCBhbGxfZmx1c2hfY2FjaGU7Cit9OworCitBdmFoaVJlY29yZExpc3QgKmF2YWhpX3JlY29yZF9saXN0X25ldyh2b2lkKSB7CisgICAgQXZhaGlSZWNvcmRMaXN0ICpsOworCisgICAgaWYgKCEobCA9IGF2YWhpX25ldyhBdmFoaVJlY29yZExpc3QsIDEpKSkgeworICAgICAgICBhdmFoaV9sb2dfZXJyb3IoImF2YWhpX25ldygpIGZhaWxlZC4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgQVZBSElfTExJU1RfSEVBRF9JTklUKEF2YWhpUmVjb3JkTGlzdEl0ZW0sIGwtPnJlYWQpOworICAgIEFWQUhJX0xMSVNUX0hFQURfSU5JVChBdmFoaVJlY29yZExpc3RJdGVtLCBsLT51bnJlYWQpOworCisgICAgbC0+YWxsX2ZsdXNoX2NhY2hlID0gMTsKKyAgICByZXR1cm4gbDsKK30KKwordm9pZCBhdmFoaV9yZWNvcmRfbGlzdF9mcmVlKEF2YWhpUmVjb3JkTGlzdCAqbCkgeworICAgIGFzc2VydChsKTsKKworICAgIGF2YWhpX3JlY29yZF9saXN0X2ZsdXNoKGwpOworICAgIGF2YWhpX2ZyZWUobCk7Cit9CisKK3N0YXRpYyB2b2lkIGl0ZW1fZnJlZShBdmFoaVJlY29yZExpc3QgKmwsIEF2YWhpUmVjb3JkTGlzdEl0ZW0gKmkpIHsKKyAgICBhc3NlcnQobCk7CisgICAgYXNzZXJ0KGkpOworCisgICAgaWYgKGktPnJlYWQpCisgICAgICAgIEFWQUhJX0xMSVNUX1JFTU9WRShBdmFoaVJlY29yZExpc3RJdGVtLCBpdGVtcywgbC0+cmVhZCwgaSk7CisgICAgZWxzZQorICAgICAgICBBVkFISV9MTElTVF9SRU1PVkUoQXZhaGlSZWNvcmRMaXN0SXRlbSwgaXRlbXMsIGwtPnVucmVhZCwgaSk7CisKKyAgICBhdmFoaV9yZWNvcmRfdW5yZWYoaS0+cmVjb3JkKTsKKyAgICBhdmFoaV9mcmVlKGkpOworfQorCit2b2lkIGF2YWhpX3JlY29yZF9saXN0X2ZsdXNoKEF2YWhpUmVjb3JkTGlzdCAqbCkgeworICAgIGFzc2VydChsKTsKKworICAgIHdoaWxlIChsLT5yZWFkKQorICAgICAgICBpdGVtX2ZyZWUobCwgbC0+cmVhZCk7CisgICAgd2hpbGUgKGwtPnVucmVhZCkKKyAgICAgICAgaXRlbV9mcmVlKGwsIGwtPnVucmVhZCk7CisKKyAgICBsLT5hbGxfZmx1c2hfY2FjaGUgPSAxOworfQorCitBdmFoaVJlY29yZCogYXZhaGlfcmVjb3JkX2xpc3RfbmV4dChBdmFoaVJlY29yZExpc3QgKmwsIGludCAqcmV0X2ZsdXNoX2NhY2hlLCBpbnQgKnJldF91bmljYXN0X3Jlc3BvbnNlLCBpbnQgKnJldF9hdXhpbGlhcnkpIHsKKyAgICBBdmFoaVJlY29yZCAqcjsKKyAgICBBdmFoaVJlY29yZExpc3RJdGVtICppOworCisgICAgaWYgKCEoaSA9IGwtPnVucmVhZCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgYXNzZXJ0KCFpLT5yZWFkKTsKKworICAgIHIgPSBhdmFoaV9yZWNvcmRfcmVmKGktPnJlY29yZCk7CisgICAgaWYgKHJldF91bmljYXN0X3Jlc3BvbnNlKQorICAgICAgICAqcmV0X3VuaWNhc3RfcmVzcG9uc2UgPSBpLT51bmljYXN0X3Jlc3BvbnNlOworICAgIGlmIChyZXRfZmx1c2hfY2FjaGUpCisgICAgICAgICpyZXRfZmx1c2hfY2FjaGUgPSBpLT5mbHVzaF9jYWNoZTsKKyAgICBpZiAocmV0X2F1eGlsaWFyeSkKKyAgICAgICAgKnJldF9hdXhpbGlhcnkgPSBpLT5hdXhpbGlhcnk7CisKKyAgICBBVkFISV9MTElTVF9SRU1PVkUoQXZhaGlSZWNvcmRMaXN0SXRlbSwgaXRlbXMsIGwtPnVucmVhZCwgaSk7CisgICAgQVZBSElfTExJU1RfUFJFUEVORChBdmFoaVJlY29yZExpc3RJdGVtLCBpdGVtcywgbC0+cmVhZCwgaSk7CisKKyAgICBpLT5yZWFkID0gMTsKKworICAgIHJldHVybiByOworfQorCitzdGF0aWMgQXZhaGlSZWNvcmRMaXN0SXRlbSAqZ2V0KEF2YWhpUmVjb3JkTGlzdCAqbCwgQXZhaGlSZWNvcmQgKnIpIHsKKyAgICBBdmFoaVJlY29yZExpc3RJdGVtICppOworCisgICAgYXNzZXJ0KGwpOworICAgIGFzc2VydChyKTsKKworICAgIGZvciAoaSA9IGwtPnJlYWQ7IGk7IGkgPSBpLT5pdGVtc19uZXh0KQorICAgICAgICBpZiAoYXZhaGlfcmVjb3JkX2VxdWFsX25vX3R0bChpLT5yZWNvcmQsIHIpKQorICAgICAgICAgICAgcmV0dXJuIGk7CisKKyAgICBmb3IgKGkgPSBsLT51bnJlYWQ7IGk7IGkgPSBpLT5pdGVtc19uZXh0KQorICAgICAgICBpZiAoYXZhaGlfcmVjb3JkX2VxdWFsX25vX3R0bChpLT5yZWNvcmQsIHIpKQorICAgICAgICAgICAgcmV0dXJuIGk7CisKKyAgICByZXR1cm4gTlVMTDsKK30KKwordm9pZCBhdmFoaV9yZWNvcmRfbGlzdF9wdXNoKEF2YWhpUmVjb3JkTGlzdCAqbCwgQXZhaGlSZWNvcmQgKnIsIGludCBmbHVzaF9jYWNoZSwgaW50IHVuaWNhc3RfcmVzcG9uc2UsIGludCBhdXhpbGlhcnkpIHsKKyAgICBBdmFoaVJlY29yZExpc3RJdGVtICppOworCisgICAgYXNzZXJ0KGwpOworICAgIGFzc2VydChyKTsKKworICAgIGlmIChnZXQobCwgcikpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghKGkgPSBhdmFoaV9uZXcoQXZhaGlSZWNvcmRMaXN0SXRlbSwgMSkpKSB7CisgICAgICAgIGF2YWhpX2xvZ19lcnJvcigiYXZhaGlfbmV3KCkgZmFpbGVkLiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaS0+dW5pY2FzdF9yZXNwb25zZSA9IHVuaWNhc3RfcmVzcG9uc2U7CisgICAgaS0+Zmx1c2hfY2FjaGUgPSBmbHVzaF9jYWNoZTsKKyAgICBpLT5hdXhpbGlhcnkgPSBhdXhpbGlhcnk7CisgICAgaS0+cmVjb3JkID0gYXZhaGlfcmVjb3JkX3JlZihyKTsKKyAgICBpLT5yZWFkID0gMDsKKworICAgIGwtPmFsbF9mbHVzaF9jYWNoZSA9IGwtPmFsbF9mbHVzaF9jYWNoZSAmJiBmbHVzaF9jYWNoZTsKKworICAgIEFWQUhJX0xMSVNUX1BSRVBFTkQoQXZhaGlSZWNvcmRMaXN0SXRlbSwgaXRlbXMsIGwtPnVucmVhZCwgaSk7Cit9CisKK3ZvaWQgYXZhaGlfcmVjb3JkX2xpc3RfZHJvcChBdmFoaVJlY29yZExpc3QgKmwsIEF2YWhpUmVjb3JkICpyKSB7CisgICAgQXZhaGlSZWNvcmRMaXN0SXRlbSAqaTsKKworICAgIGFzc2VydChsKTsKKyAgICBhc3NlcnQocik7CisKKyAgICBpZiAoIShpID0gZ2V0KGwsIHIpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaXRlbV9mcmVlKGwsIGkpOworfQorCitpbnQgYXZhaGlfcmVjb3JkX2xpc3RfaXNfZW1wdHkoQXZhaGlSZWNvcmRMaXN0ICpsKSB7CisgICAgYXNzZXJ0KGwpOworCisgICAgcmV0dXJuICFsLT51bnJlYWQgJiYgIWwtPnJlYWQ7Cit9CisKK2ludCBhdmFoaV9yZWNvcmRfbGlzdF9hbGxfZmx1c2hfY2FjaGUoQXZhaGlSZWNvcmRMaXN0ICpsKSB7CisgICAgYXNzZXJ0KGwpOworCisgICAgLyogUmV0dXJuIFRSVUUgaWYgYWxsIGVudHJpZXMgaW4gdGhpcyBsaXN0IGhhdmUgZmx1c2hfY2FjaGUgc2V0ICovCisKKyAgICByZXR1cm4gbC0+YWxsX2ZsdXNoX2NhY2hlOworfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvcnJsaXN0LmggYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9ycmxpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2I1YWJhCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvcnJsaXN0LmgKQEAgLTAsMCArMSw0MCBAQAorI2lmbmRlZiBmb29ycmxpc3RoZm9vCisjZGVmaW5lIGZvb3JybGlzdGhmb28KKworLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisKKyNpbmNsdWRlICJyci5oIgorCit0eXBlZGVmIHN0cnVjdCBBdmFoaVJlY29yZExpc3QgQXZhaGlSZWNvcmRMaXN0OworCitBdmFoaVJlY29yZExpc3QgKmF2YWhpX3JlY29yZF9saXN0X25ldyh2b2lkKTsKK3ZvaWQgYXZhaGlfcmVjb3JkX2xpc3RfZnJlZShBdmFoaVJlY29yZExpc3QgKmwpOwordm9pZCBhdmFoaV9yZWNvcmRfbGlzdF9mbHVzaChBdmFoaVJlY29yZExpc3QgKmwpOworCitBdmFoaVJlY29yZCogYXZhaGlfcmVjb3JkX2xpc3RfbmV4dChBdmFoaVJlY29yZExpc3QgKmwsIGludCAqcmV0X2ZsdXNoX2NhY2hlLCBpbnQgKnJldF91bmljYXN0X3Jlc3BvbnNlLCBpbnQgKnJldF9hdXhpbGlhcnkpOwordm9pZCBhdmFoaV9yZWNvcmRfbGlzdF9wdXNoKEF2YWhpUmVjb3JkTGlzdCAqbCwgQXZhaGlSZWNvcmQgKnIsIGludCBmbHVzaF9jYWNoZSwgaW50IHVuaWNhc3RfcmVzcG9uc2UsIGludCBhdXhpbGlhcnkpOwordm9pZCBhdmFoaV9yZWNvcmRfbGlzdF9kcm9wKEF2YWhpUmVjb3JkTGlzdCAqbCwgQXZhaGlSZWNvcmQgKnIpOworCitpbnQgYXZhaGlfcmVjb3JkX2xpc3RfYWxsX2ZsdXNoX2NhY2hlKEF2YWhpUmVjb3JkTGlzdCAqbCk7CisKK2ludCBhdmFoaV9yZWNvcmRfbGlzdF9pc19lbXB0eShBdmFoaVJlY29yZExpc3QgKmwpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL3NlcnZlci5jIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvc2VydmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZmZDRhNQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL3NlcnZlci5jCkBAIC0wLDAgKzEsMTgwNSBAQAorLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy91dHNuYW1lLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2RvbWFpbi5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi90aW1ldmFsLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL21hbGxvYy5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9lcnJvci5oPgorCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJpZmFjZS5oIgorI2luY2x1ZGUgInNvY2tldC5oIgorI2luY2x1ZGUgImJyb3dzZS5oIgorI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgInV0aWwuaCIKKyNpbmNsdWRlICJkbnMtc3J2LXJyLmgiCisjaW5jbHVkZSAiYWRkci11dGlsLmgiCisjaW5jbHVkZSAiZG9tYWluLXV0aWwuaCIKKyNpbmNsdWRlICJyci11dGlsLmgiCisKKyNkZWZpbmUgQVZBSElfREVGQVVMVF9DQUNIRV9FTlRSSUVTX01BWCA0MDk2CisKK3N0YXRpYyB2b2lkIGVudW1fYXV4X3JlY29yZHMoQXZhaGlTZXJ2ZXIgKnMsIEF2YWhpSW50ZXJmYWNlICppLCBjb25zdCBjaGFyICpuYW1lLCB1aW50MTZfdCB0eXBlLCB2b2lkICgqY2FsbGJhY2spKEF2YWhpU2VydmVyICpzLCBBdmFoaVJlY29yZCAqciwgaW50IGZsdXNoX2NhY2hlLCB2b2lkKiB1c2VyZGF0YSksIHZvaWQqIHVzZXJkYXRhKSB7CisgICAgYXNzZXJ0KHMpOworICAgIGFzc2VydChpKTsKKyAgICBhc3NlcnQobmFtZSk7CisgICAgYXNzZXJ0KGNhbGxiYWNrKTsKKworICAgIGlmICh0eXBlID09IEFWQUhJX0ROU19UWVBFX0FOWSkgeworICAgICAgICBBdmFoaUVudHJ5ICplOworCisgICAgICAgIGZvciAoZSA9IHMtPmVudHJpZXM7IGU7IGUgPSBlLT5lbnRyaWVzX25leHQpCisgICAgICAgICAgICBpZiAoIWUtPmRlYWQgJiYKKyAgICAgICAgICAgICAgICBhdmFoaV9lbnRyeV9pc19yZWdpc3RlcmVkKHMsIGUsIGkpICYmCisgICAgICAgICAgICAgICAgZS0+cmVjb3JkLT5rZXktPmNsYXp6ID09IEFWQUhJX0ROU19DTEFTU19JTiAmJgorICAgICAgICAgICAgICAgIGF2YWhpX2RvbWFpbl9lcXVhbChuYW1lLCBlLT5yZWNvcmQtPmtleS0+bmFtZSkpCisgICAgICAgICAgICAgICAgY2FsbGJhY2socywgZS0+cmVjb3JkLCBlLT5mbGFncyAmIEFWQUhJX1BVQkxJU0hfVU5JUVVFLCB1c2VyZGF0YSk7CisKKyAgICB9IGVsc2UgeworICAgICAgICBBdmFoaUVudHJ5ICplOworICAgICAgICBBdmFoaUtleSAqazsKKworICAgICAgICBpZiAoIShrID0gYXZhaGlfa2V5X25ldyhuYW1lLCBBVkFISV9ETlNfQ0xBU1NfSU4sIHR5cGUpKSkKKyAgICAgICAgICAgIHJldHVybjsgLyoqIE9PTSAqLworCisgICAgICAgIGZvciAoZSA9IGF2YWhpX2hhc2htYXBfbG9va3VwKHMtPmVudHJpZXNfYnlfa2V5LCBrKTsgZTsgZSA9IGUtPmJ5X2tleV9uZXh0KQorICAgICAgICAgICAgaWYgKCFlLT5kZWFkICYmIGF2YWhpX2VudHJ5X2lzX3JlZ2lzdGVyZWQocywgZSwgaSkpCisgICAgICAgICAgICAgICAgY2FsbGJhY2socywgZS0+cmVjb3JkLCBlLT5mbGFncyAmIEFWQUhJX1BVQkxJU0hfVU5JUVVFLCB1c2VyZGF0YSk7CisKKyAgICAgICAgYXZhaGlfa2V5X3VucmVmKGspOworICAgIH0KK30KKwordm9pZCBhdmFoaV9zZXJ2ZXJfZW51bWVyYXRlX2F1eF9yZWNvcmRzKEF2YWhpU2VydmVyICpzLCBBdmFoaUludGVyZmFjZSAqaSwgQXZhaGlSZWNvcmQgKnIsIHZvaWQgKCpjYWxsYmFjaykoQXZhaGlTZXJ2ZXIgKnMsIEF2YWhpUmVjb3JkICpyLCBpbnQgZmx1c2hfY2FjaGUsIHZvaWQqIHVzZXJkYXRhKSwgdm9pZCogdXNlcmRhdGEpIHsKKyAgICBhc3NlcnQocyk7CisgICAgYXNzZXJ0KGkpOworICAgIGFzc2VydChyKTsKKyAgICBhc3NlcnQoY2FsbGJhY2spOworCisgICAgLyogQ2FsbCB0aGUgc3BlY2lmaWVkIGNhbGxiYWNrIGZhciBhbGwgcmVjb3JkcyByZWZlcmVuY2VkIGJ5IHRoZSBvbmUgc3BlY2lmaWVkIGluICpyICovCisKKyAgICBpZiAoci0+a2V5LT5jbGF6eiA9PSBBVkFISV9ETlNfQ0xBU1NfSU4pIHsKKyAgICAgICAgaWYgKHItPmtleS0+dHlwZSA9PSBBVkFISV9ETlNfVFlQRV9QVFIpIHsKKyAgICAgICAgICAgIGVudW1fYXV4X3JlY29yZHMocywgaSwgci0+ZGF0YS5wdHIubmFtZSwgQVZBSElfRE5TX1RZUEVfU1JWLCBjYWxsYmFjaywgdXNlcmRhdGEpOworICAgICAgICAgICAgZW51bV9hdXhfcmVjb3JkcyhzLCBpLCByLT5kYXRhLnB0ci5uYW1lLCBBVkFISV9ETlNfVFlQRV9UWFQsIGNhbGxiYWNrLCB1c2VyZGF0YSk7CisgICAgICAgIH0gZWxzZSBpZiAoci0+a2V5LT50eXBlID09IEFWQUhJX0ROU19UWVBFX1NSVikgeworICAgICAgICAgICAgZW51bV9hdXhfcmVjb3JkcyhzLCBpLCByLT5kYXRhLnNydi5uYW1lLCBBVkFISV9ETlNfVFlQRV9BLCBjYWxsYmFjaywgdXNlcmRhdGEpOworICAgICAgICAgICAgZW51bV9hdXhfcmVjb3JkcyhzLCBpLCByLT5kYXRhLnNydi5uYW1lLCBBVkFISV9ETlNfVFlQRV9BQUFBLCBjYWxsYmFjaywgdXNlcmRhdGEpOworICAgICAgICB9IGVsc2UgaWYgKHItPmtleS0+dHlwZSA9PSBBVkFISV9ETlNfVFlQRV9DTkFNRSkKKyAgICAgICAgICAgIGVudW1fYXV4X3JlY29yZHMocywgaSwgci0+ZGF0YS5jbmFtZS5uYW1lLCBBVkFISV9ETlNfVFlQRV9BTlksIGNhbGxiYWNrLCB1c2VyZGF0YSk7CisgICAgfQorfQorCit2b2lkIGF2YWhpX3NlcnZlcl9wcmVwYXJlX3Jlc3BvbnNlKEF2YWhpU2VydmVyICpzLCBBdmFoaUludGVyZmFjZSAqaSwgQXZhaGlFbnRyeSAqZSwgaW50IHVuaWNhc3RfcmVzcG9uc2UsIGludCBhdXhpbGlhcnkpIHsKKyAgICBhc3NlcnQocyk7CisgICAgYXNzZXJ0KGkpOworICAgIGFzc2VydChlKTsKKworICAgIGF2YWhpX3JlY29yZF9saXN0X3B1c2gocy0+cmVjb3JkX2xpc3QsIGUtPnJlY29yZCwgZS0+ZmxhZ3MgJiBBVkFISV9QVUJMSVNIX1VOSVFVRSwgdW5pY2FzdF9yZXNwb25zZSwgYXV4aWxpYXJ5KTsKK30KKwordm9pZCBhdmFoaV9zZXJ2ZXJfcHJlcGFyZV9tYXRjaGluZ19yZXNwb25zZXMoQXZhaGlTZXJ2ZXIgKnMsIEF2YWhpSW50ZXJmYWNlICppLCBBdmFoaUtleSAqaywgaW50IHVuaWNhc3RfcmVzcG9uc2UpIHsKKyAgICBhc3NlcnQocyk7CisgICAgYXNzZXJ0KGkpOworICAgIGFzc2VydChrKTsKKworICAgIC8qIFB1c2ggYWxsIHJlY29yZHMgdGhhdCBtYXRjaCB0aGUgc3BlY2lmaWVkIGtleSB0byB0aGUgcmVjb3JkIGxpc3QgKi8KKworICAgIGlmIChhdmFoaV9rZXlfaXNfcGF0dGVybihrKSkgeworICAgICAgICBBdmFoaUVudHJ5ICplOworCisgICAgICAgIC8qIEhhbmRsZSBBTlkgcXVlcnkgKi8KKworICAgICAgICBmb3IgKGUgPSBzLT5lbnRyaWVzOyBlOyBlID0gZS0+ZW50cmllc19uZXh0KQorICAgICAgICAgICAgaWYgKCFlLT5kZWFkICYmIGF2YWhpX2tleV9wYXR0ZXJuX21hdGNoKGssIGUtPnJlY29yZC0+a2V5KSAmJiBhdmFoaV9lbnRyeV9pc19yZWdpc3RlcmVkKHMsIGUsIGkpKQorICAgICAgICAgICAgICAgIGF2YWhpX3NlcnZlcl9wcmVwYXJlX3Jlc3BvbnNlKHMsIGksIGUsIHVuaWNhc3RfcmVzcG9uc2UsIDApOworCisgICAgfSBlbHNlIHsKKyAgICAgICAgQXZhaGlFbnRyeSAqZTsKKworICAgICAgICAvKiBIYW5kbGUgYWxsIG90aGVyIHF1ZXJpZXMgKi8KKworICAgICAgICBmb3IgKGUgPSBhdmFoaV9oYXNobWFwX2xvb2t1cChzLT5lbnRyaWVzX2J5X2tleSwgayk7IGU7IGUgPSBlLT5ieV9rZXlfbmV4dCkKKyAgICAgICAgICAgIGlmICghZS0+ZGVhZCAmJiBhdmFoaV9lbnRyeV9pc19yZWdpc3RlcmVkKHMsIGUsIGkpKQorICAgICAgICAgICAgICAgIGF2YWhpX3NlcnZlcl9wcmVwYXJlX3Jlc3BvbnNlKHMsIGksIGUsIHVuaWNhc3RfcmVzcG9uc2UsIDApOworICAgIH0KKworICAgIC8qIExvb2sgZm9yIENOQU1FIHJlY29yZHMgKi8KKworICAgIGlmICgoay0+Y2xhenogPT0gQVZBSElfRE5TX0NMQVNTX0lOIHx8IGstPmNsYXp6ID09IEFWQUhJX0ROU19DTEFTU19BTlkpCisgICAgICAgICYmIGstPnR5cGUgIT0gQVZBSElfRE5TX1RZUEVfQ05BTUUgJiYgay0+dHlwZSAhPSBBVkFISV9ETlNfVFlQRV9BTlkpIHsKKworICAgICAgICBBdmFoaUtleSAqY25hbWVfa2V5OworCisgICAgICAgIGlmICghKGNuYW1lX2tleSA9IGF2YWhpX2tleV9uZXcoay0+bmFtZSwgQVZBSElfRE5TX0NMQVNTX0lOLCBBVkFISV9ETlNfVFlQRV9DTkFNRSkpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF2YWhpX3NlcnZlcl9wcmVwYXJlX21hdGNoaW5nX3Jlc3BvbnNlcyhzLCBpLCBjbmFtZV9rZXksIHVuaWNhc3RfcmVzcG9uc2UpOworICAgICAgICBhdmFoaV9rZXlfdW5yZWYoY25hbWVfa2V5KTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdpdGhkcmF3X2VudHJ5KEF2YWhpU2VydmVyICpzLCBBdmFoaUVudHJ5ICplKSB7CisgICAgYXNzZXJ0KHMpOworICAgIGFzc2VydChlKTsKKworICAgIC8qIFdpdGhkcmF3IHRoZSBzcGVjaWZpZWQgZW50cnksIGFuZCBpZiBpcyBwYXJ0IG9mIGFuIGVudHJ5IGdyb3VwLAorICAgICAqIHB1dCB0aGF0IGludG8gQ09MTElTSU9OIHN0YXRlICovCisKKyAgICBpZiAoZS0+ZGVhZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGUtPmdyb3VwKSB7CisgICAgICAgIEF2YWhpRW50cnkgKms7CisKKyAgICAgICAgZm9yIChrID0gZS0+Z3JvdXAtPmVudHJpZXM7IGs7IGsgPSBrLT5ieV9ncm91cF9uZXh0KQorICAgICAgICAgICAgaWYgKCFrLT5kZWFkKSB7CisgICAgICAgICAgICAgICAgYXZhaGlfZ29vZGJ5ZV9lbnRyeShzLCBrLCAwLCAxKTsKKyAgICAgICAgICAgICAgICBrLT5kZWFkID0gMTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBlLT5ncm91cC0+bl9wcm9iaW5nID0gMDsKKworICAgICAgICBhdmFoaV9zX2VudHJ5X2dyb3VwX2NoYW5nZV9zdGF0ZShlLT5ncm91cCwgQVZBSElfRU5UUllfR1JPVVBfQ09MTElTSU9OKTsKKyAgICB9IGVsc2UgeworICAgICAgICBhdmFoaV9nb29kYnllX2VudHJ5KHMsIGUsIDAsIDEpOworICAgICAgICBlLT5kZWFkID0gMTsKKyAgICB9CisKKyAgICBzLT5uZWVkX2VudHJ5X2NsZWFudXAgPSAxOworfQorCitzdGF0aWMgdm9pZCB3aXRoZHJhd19ycnNldChBdmFoaVNlcnZlciAqcywgQXZhaGlLZXkgKmtleSkgeworICAgIEF2YWhpRW50cnkgKmU7CisKKyAgICBhc3NlcnQocyk7CisgICAgYXNzZXJ0KGtleSk7CisKKyAgICAvKiBXaXRoZHJhdyBhbiBlbnRyeSBSUlNzZXQgKi8KKworICAgIGZvciAoZSA9IGF2YWhpX2hhc2htYXBfbG9va3VwKHMtPmVudHJpZXNfYnlfa2V5LCBrZXkpOyBlOyBlID0gZS0+Ynlfa2V5X25leHQpCisgICAgICAgIHdpdGhkcmF3X2VudHJ5KHMsIGUpOworfQorCitzdGF0aWMgdm9pZCBpbmNvbWluZ19wcm9iZShBdmFoaVNlcnZlciAqcywgQXZhaGlSZWNvcmQgKnJlY29yZCwgQXZhaGlJbnRlcmZhY2UgKmkpIHsKKyAgICBBdmFoaUVudHJ5ICplLCAqbjsKKyAgICBpbnQgb3VycyA9IDAsIHdvbiA9IDAsIGxvc3QgPSAwOworCisgICAgYXNzZXJ0KHMpOworICAgIGFzc2VydChyZWNvcmQpOworICAgIGFzc2VydChpKTsKKworICAgIC8qIEhhbmRsZSBpbmNvbWluZyBwcm9iZXMgYW5kIGNoZWNrIGlmIHRoZXkgY29uZmxpY3Qgb3VyIG93biBwcm9iZXMgKi8KKworICAgIGZvciAoZSA9IGF2YWhpX2hhc2htYXBfbG9va3VwKHMtPmVudHJpZXNfYnlfa2V5LCByZWNvcmQtPmtleSk7IGU7IGUgPSBuKSB7CisgICAgICAgIGludCBjbXA7CisgICAgICAgIG4gPSBlLT5ieV9rZXlfbmV4dDsKKworICAgICAgICBpZiAoZS0+ZGVhZCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICgoY21wID0gYXZhaGlfcmVjb3JkX2xleGljb2dyYXBoaWNhbF9jb21wYXJlKGUtPnJlY29yZCwgcmVjb3JkKSkgPT0gMCkgeworICAgICAgICAgICAgb3VycyA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSBlbHNlIHsKKworICAgICAgICAgICAgaWYgKGF2YWhpX2VudHJ5X2lzX3Byb2JpbmcocywgZSwgaSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoY21wID4gMCkKKyAgICAgICAgICAgICAgICAgICAgd29uID0gMTsKKyAgICAgICAgICAgICAgICBlbHNlIC8qIGNtcCA8IDAgKi8KKyAgICAgICAgICAgICAgICAgICAgbG9zdCA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIW91cnMpIHsKKyAgICAgICAgY2hhciAqdCA9IGF2YWhpX3JlY29yZF90b19zdHJpbmcocmVjb3JkKTsKKworICAgICAgICBpZiAod29uKQorICAgICAgICAgICAgYXZhaGlfbG9nX2RlYnVnKCJSZWNlaXZlZCBjb25mbGljdGluZyBwcm9iZSBbJXNdLiBMb2NhbCBob3N0IHdvbi4iLCB0KTsKKyAgICAgICAgZWxzZSBpZiAobG9zdCkgeworICAgICAgICAgICAgYXZhaGlfbG9nX2RlYnVnKCJSZWNlaXZlZCBjb25mbGljdGluZyBwcm9iZSBbJXNdLiBMb2NhbCBob3N0IGxvc3QuIFdpdGhkcmF3aW5nLiIsIHQpOworICAgICAgICAgICAgd2l0aGRyYXdfcnJzZXQocywgcmVjb3JkLT5rZXkpOworICAgICAgICB9CisKKyAgICAgICAgYXZhaGlfZnJlZSh0KTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX2NvbmZsaWN0KEF2YWhpU2VydmVyICpzLCBBdmFoaUludGVyZmFjZSAqaSwgQXZhaGlSZWNvcmQgKnJlY29yZCwgaW50IHVuaXF1ZSkgeworICAgIGludCB2YWxpZCA9IDEsIG91cnMgPSAwLCBjb25mbGljdCA9IDAsIHdpdGhkcmF3X2ltbWVkaWF0ZWx5ID0gMDsKKyAgICBBdmFoaUVudHJ5ICplLCAqbiwgKmNvbmZsaWN0aW5nX2VudHJ5ID0gTlVMTDsKKworICAgIGFzc2VydChzKTsKKyAgICBhc3NlcnQoaSk7CisgICAgYXNzZXJ0KHJlY29yZCk7CisKKyAgICAvKiBDaGVjayB3aGV0aGVyIGFuIGluY29taW5nIHJlY29yZCBjb25mbGljdHMgd2l0aCBvbmUgb2Ygb3VyIG93biAqLworCisgICAgZm9yIChlID0gYXZhaGlfaGFzaG1hcF9sb29rdXAocy0+ZW50cmllc19ieV9rZXksIHJlY29yZC0+a2V5KTsgZTsgZSA9IG4pIHsKKyAgICAgICAgbiA9IGUtPmJ5X2tleV9uZXh0OworCisgICAgICAgIGlmIChlLT5kZWFkKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLyogQ2hlY2sgaWYgdGhlIGluY29taW5nIGlzIGEgZ29vZGJ5ZSByZWNvcmQgKi8KKyAgICAgICAgaWYgKGF2YWhpX3JlY29yZF9pc19nb29kYnllKHJlY29yZCkpIHsKKworICAgICAgICAgICAgaWYgKGF2YWhpX3JlY29yZF9lcXVhbF9ub190dGwoZS0+cmVjb3JkLCByZWNvcmQpKSB7CisgICAgICAgICAgICAgICAgY2hhciAqdDsKKworICAgICAgICAgICAgICAgIC8qIFJlZnJlc2ggKi8KKyAgICAgICAgICAgICAgICB0ID0gYXZhaGlfcmVjb3JkX3RvX3N0cmluZyhyZWNvcmQpOworICAgICAgICAgICAgICAgIGF2YWhpX2xvZ19kZWJ1ZygiUmVjZWl2ZWQgZ29vZGJ5ZSByZWNvcmQgZm9yIG9uZSBvZiBvdXIgcmVjb3JkcyBbJXNdLiBSZWZyZXNoaW5nLiIsIHQpOworICAgICAgICAgICAgICAgIGF2YWhpX3NlcnZlcl9wcmVwYXJlX21hdGNoaW5nX3Jlc3BvbnNlcyhzLCBpLCBlLT5yZWNvcmQtPmtleSwgMCk7CisKKyAgICAgICAgICAgICAgICB2YWxpZCA9IDA7CisgICAgICAgICAgICAgICAgYXZhaGlfZnJlZSh0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogSWYgdGhlIGdvb2R5YmUgcGFja2V0IGRvZXNuJ3QgbWF0Y2ggb25lIG9mIG91ciBvd24gUlJzLCB3ZSBzaW1wbHkgaWdub3JlIGl0LiAqLworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIShlLT5mbGFncyAmIEFWQUhJX1BVQkxJU0hfVU5JUVVFKSAmJiAhdW5pcXVlKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLyogRWl0aGVyIG91ciBlbnRyeSBvciB0aGUgb3RoZXIgaXMgaW50ZW5kZWQgdG8gYmUgdW5pcXVlLCBzbyBsZXQncyBjaGVjayAqLworCisgICAgICAgIGlmIChhdmFoaV9yZWNvcmRfZXF1YWxfbm9fdHRsKGUtPnJlY29yZCwgcmVjb3JkKSkgeworICAgICAgICAgICAgb3VycyA9IDE7IC8qIFdlIGhhdmUgYW4gaWRlbnRpY2FsIHJlY29yZCwgc28gdGhpcyBpcyBubyBjb25mbGljdCAqLworCisgICAgICAgICAgICAvKiBDaGVjayB3aGV0ZXIgdGhlcmUgaXMgYSBUVEwgY29uZmxpY3QgKi8KKyAgICAgICAgICAgIGlmIChyZWNvcmQtPnR0bCA8PSBlLT5yZWNvcmQtPnR0bC8yICYmCisgICAgICAgICAgICAgICAgYXZhaGlfZW50cnlfaXNfcmVnaXN0ZXJlZChzLCBlLCBpKSkgeworICAgICAgICAgICAgICAgIGNoYXIgKnQ7CisgICAgICAgICAgICAgICAgLyogUmVmcmVzaCAqLworICAgICAgICAgICAgICAgIHQgPSBhdmFoaV9yZWNvcmRfdG9fc3RyaW5nKHJlY29yZCk7CisKKyAgICAgICAgICAgICAgICBhdmFoaV9sb2dfZGVidWcoIlJlY2VpdmVkIHJlY29yZCB3aXRoIGJhZCBUVEwgWyVzXS4gUmVmcmVzaGluZy4iLCB0KTsKKyAgICAgICAgICAgICAgICBhdmFoaV9zZXJ2ZXJfcHJlcGFyZV9tYXRjaGluZ19yZXNwb25zZXMocywgaSwgZS0+cmVjb3JkLT5rZXksIDApOworICAgICAgICAgICAgICAgIHZhbGlkID0gMDsKKworICAgICAgICAgICAgICAgIGF2YWhpX2ZyZWUodCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIFRoZXJlJ3Mgbm8gbmVlZCB0byBjaGVjayB0aGUgb3RoZXIgZW50cmllcyBvZiB0aGlzIFJSc2V0ICovCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICB9IGVsc2UgeworCisgICAgICAgICAgICBpZiAoYXZhaGlfZW50cnlfaXNfcmVnaXN0ZXJlZChzLCBlLCBpKSkgeworCisgICAgICAgICAgICAgICAgLyogQSBjb25mbGljdCA9PiB3ZSBoYXZlIHRvIHJldHVybiB0byBwcm9iZSBtb2RlICovCisgICAgICAgICAgICAgICAgY29uZmxpY3QgPSAxOworICAgICAgICAgICAgICAgIGNvbmZsaWN0aW5nX2VudHJ5ID0gZTsKKworICAgICAgICAgICAgfSBlbHNlIGlmIChhdmFoaV9lbnRyeV9pc19wcm9iaW5nKHMsIGUsIGkpKSB7CisKKyAgICAgICAgICAgICAgICAvKiBXZSBhcmUgY3VycmVudGx5IHJlZ2lzdGVyaW5nIGEgbWF0Y2hpbmcgcmVjb3JkLCBidXQKKyAgICAgICAgICAgICAgICAgKiBzb21lb25lIGVsc2UgYWxyZWFkeSBjbGFpbWVkIGl0LCBzbyBsZXQncworICAgICAgICAgICAgICAgICAqIHdpdGhkcmF3ICovCisgICAgICAgICAgICAgICAgY29uZmxpY3QgPSAxOworICAgICAgICAgICAgICAgIHdpdGhkcmF3X2ltbWVkaWF0ZWx5ID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghb3VycyAmJiBjb25mbGljdCkgeworICAgICAgICBjaGFyICp0OworCisgICAgICAgIHZhbGlkID0gMDsKKworICAgICAgICB0ID0gYXZhaGlfcmVjb3JkX3RvX3N0cmluZyhyZWNvcmQpOworCisgICAgICAgIGlmICh3aXRoZHJhd19pbW1lZGlhdGVseSkgeworICAgICAgICAgICAgYXZhaGlfbG9nX2RlYnVnKCJSZWNlaXZlZCBjb25mbGljdGluZyByZWNvcmQgWyVzXSB3aXRoIGxvY2FsIHJlY29yZCB0byBiZS4gV2l0aGRyYXdpbmcuIiwgdCk7CisgICAgICAgICAgICB3aXRoZHJhd19ycnNldChzLCByZWNvcmQtPmtleSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhc3NlcnQoY29uZmxpY3RpbmdfZW50cnkpOworICAgICAgICAgICAgYXZhaGlfbG9nX2RlYnVnKCJSZWNlaXZlZCBjb25mbGljdGluZyByZWNvcmQgWyVzXS4gUmVzZXR0aW5nIG91ciByZWNvcmQuIiwgdCk7CisgICAgICAgICAgICBhdmFoaV9lbnRyeV9yZXR1cm5fdG9faW5pdGlhbF9zdGF0ZShzLCBjb25mbGljdGluZ19lbnRyeSwgaSk7CisKKyAgICAgICAgICAgIC8qIExvY2FsIHVuaXF1ZSByZWNvcmRzIGFyZSByZXR1cm5lZCB0byBwcm9iaW5nCisgICAgICAgICAgICAgKiBzdGF0ZS4gTG9jYWwgc2hhcmVkIHJlY29yZHMgYXJlIHJlYW5ub3VuY2VkLiAqLworICAgICAgICB9CisKKyAgICAgICAgYXZhaGlfZnJlZSh0KTsKKyAgICB9CisKKyAgICByZXR1cm4gdmFsaWQ7Cit9CisKK3N0YXRpYyB2b2lkIGFwcGVuZF9hdXhfY2FsbGJhY2soQXZhaGlTZXJ2ZXIgKnMsIEF2YWhpUmVjb3JkICpyLCBpbnQgZmx1c2hfY2FjaGUsIHZvaWQqIHVzZXJkYXRhKSB7CisgICAgaW50ICp1bmljYXN0X3Jlc3BvbnNlID0gdXNlcmRhdGE7CisKKyAgICBhc3NlcnQocyk7CisgICAgYXNzZXJ0KHIpOworICAgIGFzc2VydCh1bmljYXN0X3Jlc3BvbnNlKTsKKworICAgIGF2YWhpX3JlY29yZF9saXN0X3B1c2gocy0+cmVjb3JkX2xpc3QsIHIsIGZsdXNoX2NhY2hlLCAqdW5pY2FzdF9yZXNwb25zZSwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIGFwcGVuZF9hdXhfcmVjb3Jkc190b19saXN0KEF2YWhpU2VydmVyICpzLCBBdmFoaUludGVyZmFjZSAqaSwgQXZhaGlSZWNvcmQgKnIsIGludCB1bmljYXN0X3Jlc3BvbnNlKSB7CisgICAgYXNzZXJ0KHMpOworICAgIGFzc2VydChyKTsKKworICAgIGF2YWhpX3NlcnZlcl9lbnVtZXJhdGVfYXV4X3JlY29yZHMocywgaSwgciwgYXBwZW5kX2F1eF9jYWxsYmFjaywgJnVuaWNhc3RfcmVzcG9uc2UpOworfQorCit2b2lkIGF2YWhpX3NlcnZlcl9nZW5lcmF0ZV9yZXNwb25zZShBdmFoaVNlcnZlciAqcywgQXZhaGlJbnRlcmZhY2UgKmksIEF2YWhpRG5zUGFja2V0ICpwLCBjb25zdCBBdmFoaUFkZHJlc3MgKmEsIHVpbnQxNl90IHBvcnQsIGludCBsZWdhY3lfdW5pY2FzdCwgaW50IGltbWVkaWF0ZWx5KSB7CisKKyAgICBhc3NlcnQocyk7CisgICAgYXNzZXJ0KGkpOworICAgIGFzc2VydCghbGVnYWN5X3VuaWNhc3QgfHwgKGEgJiYgcG9ydCA+IDAgJiYgcCkpOworCisgICAgaWYgKGxlZ2FjeV91bmljYXN0KSB7CisgICAgICAgIEF2YWhpRG5zUGFja2V0ICpyZXBseTsKKyAgICAgICAgQXZhaGlSZWNvcmQgKnI7CisKKyAgICAgICAgaWYgKCEocmVwbHkgPSBhdmFoaV9kbnNfcGFja2V0X25ld19yZXBseShwLCA1MTIgKyBBVkFISV9ETlNfUEFDS0VUX0VYVFJBX1NJWkUgLyogdW5pY2FzdCBETlMgbWF4aW11bSBwYWNrZXQgc2l6ZSBpcyA1MTIgKi8gLCAxLCAxKSkpCisgICAgICAgICAgICByZXR1cm47IC8qIE9PTSAqLworCisgICAgICAgIHdoaWxlICgociA9IGF2YWhpX3JlY29yZF9saXN0X25leHQocy0+cmVjb3JkX2xpc3QsIE5VTEwsIE5VTEwsIE5VTEwpKSkgeworCisgICAgICAgICAgICBhcHBlbmRfYXV4X3JlY29yZHNfdG9fbGlzdChzLCBpLCByLCAwKTsKKworICAgICAgICAgICAgaWYgKGF2YWhpX2Ruc19wYWNrZXRfYXBwZW5kX3JlY29yZChyZXBseSwgciwgMCwgMTApKQorICAgICAgICAgICAgICAgIGF2YWhpX2Ruc19wYWNrZXRfaW5jX2ZpZWxkKHJlcGx5LCBBVkFISV9ETlNfRklFTERfQU5DT1VOVCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBjaGFyICp0ID0gYXZhaGlfcmVjb3JkX3RvX3N0cmluZyhyKTsKKyAgICAgICAgICAgICAgICBhdmFoaV9sb2dfd2FybigiUmVjb3JkIFslc10gbm90IGZpdHRpbmcgaW4gbGVnYWN5IHVuaWNhc3QgcGFja2V0LCBkcm9wcGluZy4iLCB0KTsKKyAgICAgICAgICAgICAgICBhdmFoaV9mcmVlKHQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBhdmFoaV9yZWNvcmRfdW5yZWYocik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYXZhaGlfZG5zX3BhY2tldF9nZXRfZmllbGQocmVwbHksIEFWQUhJX0ROU19GSUVMRF9BTkNPVU5UKSAhPSAwKQorICAgICAgICAgICAgYXZhaGlfaW50ZXJmYWNlX3NlbmRfcGFja2V0X3VuaWNhc3QoaSwgcmVwbHksIGEsIHBvcnQpOworCisgICAgICAgIGF2YWhpX2Ruc19wYWNrZXRfZnJlZShyZXBseSk7CisKKyAgICB9IGVsc2UgeworICAgICAgICBpbnQgdW5pY2FzdF9yZXNwb25zZSwgZmx1c2hfY2FjaGUsIGF1eGlsaWFyeTsKKyAgICAgICAgQXZhaGlEbnNQYWNrZXQgKnJlcGx5ID0gTlVMTDsKKyAgICAgICAgQXZhaGlSZWNvcmQgKnI7CisKKyAgICAgICAgLyogSW4gY2FzZSB0aGUgcXVlcnkgcGFja2V0IHdhcyB0cnVuY2F0ZWQgbmV2ZXIgcmVzcG9uZAorICAgICAgICBpbW1lZGlhdGVseSwgYmVjYXVzZSBrbm93biBhbnN3ZXIgc3VwcHJlc3Npb24gcmVjb3JkcyBtaWdodCBiZQorICAgICAgICBjb250YWluZWQgaW4gbGF0ZXIgcGFja2V0cyAqLworICAgICAgICBpbnQgdGMgPSBwICYmICEhKGF2YWhpX2Ruc19wYWNrZXRfZ2V0X2ZpZWxkKHAsIEFWQUhJX0ROU19GSUVMRF9GTEFHUykgJiBBVkFISV9ETlNfRkxBR19UQyk7CisKKyAgICAgICAgd2hpbGUgKChyID0gYXZhaGlfcmVjb3JkX2xpc3RfbmV4dChzLT5yZWNvcmRfbGlzdCwgJmZsdXNoX2NhY2hlLCAmdW5pY2FzdF9yZXNwb25zZSwgJmF1eGlsaWFyeSkpKSB7CisKKyAgICAgICAgICAgIGludCBpbSA9IGltbWVkaWF0ZWx5OworCisgICAgICAgICAgICAvKiBPbmx5IHNlbmQgdGhlIHJlc3BvbnNlIGltbWVkaWF0ZWx5IGlmIGl0IGNvbnRhaW5zIGEKKyAgICAgICAgICAgICAqIHVuaXF1ZSBlbnRyeSBBTkQgaXQgaXMgbm90IGluIHJlcGx5IHRvIGEgdHJ1bmNhdGVkCisgICAgICAgICAgICAgKiBwYWNrZXQgQU5EIGl0IGlzIG5vdCBhbiBhdXhpbGlhcnkgcmVjb3JkIEFORCBhbGwgb3RoZXIKKyAgICAgICAgICAgICAqIHJlc3BvbnNlcyBmb3IgdGhpcyByZWNvcmQgYXJlIHVuaXF1ZSB0b28uICovCisKKyAgICAgICAgICAgIGlmIChmbHVzaF9jYWNoZSAmJiAhdGMgJiYgIWF1eGlsaWFyeSAmJiBhdmFoaV9yZWNvcmRfbGlzdF9hbGxfZmx1c2hfY2FjaGUocy0+cmVjb3JkX2xpc3QpKQorICAgICAgICAgICAgICAgIGltID0gMTsKKworICAgICAgICAgICAgaWYgKCFhdmFoaV9pbnRlcmZhY2VfcG9zdF9yZXNwb25zZShpLCByLCBmbHVzaF9jYWNoZSwgYSwgaW0pICYmIHVuaWNhc3RfcmVzcG9uc2UpIHsKKworICAgICAgICAgICAgICAgIC8qIER1ZSB0byBzb21lIHJlYXNvbnMgdGhlIHJlY29yZCBoYXMgbm90IGJlZW4gc2NoZWR1bGVkLgorICAgICAgICAgICAgICAgICAqIFRoZSBjbGllbnQgcmVxdWVzdGVkIGFuIHVuaWNhc3QgcmVzcG9uc2UgaW4gdGhhdAorICAgICAgICAgICAgICAgICAqIGNhc2UuIFRoZXJlZm9yZSB3ZSBwcmVwYXJlIHN1Y2ggYSByZXNwb25zZSAqLworCisgICAgICAgICAgICAgICAgYXBwZW5kX2F1eF9yZWNvcmRzX3RvX2xpc3QocywgaSwgciwgdW5pY2FzdF9yZXNwb25zZSk7CisKKyAgICAgICAgICAgICAgICBmb3IgKDs7KSB7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXBseSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHApOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZXBseSA9IGF2YWhpX2Ruc19wYWNrZXRfbmV3X3JlcGx5KHAsIGktPmhhcmR3YXJlLT5tdHUsIDAsIDApKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgLyogT09NICovCisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoYXZhaGlfZG5zX3BhY2tldF9hcHBlbmRfcmVjb3JkKHJlcGx5LCByLCBmbHVzaF9jYWNoZSwgMCkpIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgLyogQXBwZW5kaW5nIHRoaXMgcmVjb3JkIHN1Y2NlZWRlZCwgc28gaW5jcmVtZWFudAorICAgICAgICAgICAgICAgICAgICAgICAgICogdGhlIHNwZWNpZmljIGhlYWRlciBmaWVsZCwgYW5kIHJldHVybiB0byB0aGUgY2FsbGVyICovCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGF2YWhpX2Ruc19wYWNrZXRfaW5jX2ZpZWxkKHJlcGx5LCBBVkFISV9ETlNfRklFTERfQU5DT1VOVCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmIChhdmFoaV9kbnNfcGFja2V0X2dldF9maWVsZChyZXBseSwgQVZBSElfRE5TX0ZJRUxEX0FOQ09VTlQpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplOworCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGUgcmVjb3JkIGlzIHRvbyBsYXJnZSBmb3Igb25lIHBhY2tldCwgc28gY3JlYXRlIGEgbGFyZ2VyIHBhY2tldCAqLworCisgICAgICAgICAgICAgICAgICAgICAgICBhdmFoaV9kbnNfcGFja2V0X2ZyZWUocmVwbHkpOworICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IGF2YWhpX3JlY29yZF9nZXRfZXN0aW1hdGVfc2l6ZShyKSArIEFWQUhJX0ROU19QQUNLRVRfSEVBREVSX1NJWkU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlcGx5ID0gYXZhaGlfZG5zX3BhY2tldF9uZXdfcmVwbHkocCwgc2l6ZSArIEFWQUhJX0ROU19QQUNLRVRfRVhUUkFfU0laRSwgMCwgMSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvKiBPT00gKi8KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF2YWhpX2Ruc19wYWNrZXRfYXBwZW5kX3JlY29yZChyZXBseSwgciwgZmx1c2hfY2FjaGUsIDApKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBcHBlbmRpbmcgdGhpcyByZWNvcmQgc3VjY2VlZGVkLCBzbyBpbmNyZW1lYW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdGhlIHNwZWNpZmljIGhlYWRlciBmaWVsZCwgYW5kIHJldHVybiB0byB0aGUgY2FsbGVyICovCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFoaV9kbnNfcGFja2V0X2luY19maWVsZChyZXBseSwgQVZBSElfRE5TX0ZJRUxEX0FOQ09VTlQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgICAgICB9ICBlbHNlIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdlIGNvbXBsZXRlbHkgZnVja2VkIHVwLCB0aGVyZSdzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogbm90aGluZyB3ZSBjYW4gZG8uIFRoZSBSUiBqdXN0IGRvZXNuJ3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBmaXQgaW4uIExldCdzIGlnbm9yZSBpdC4gKi8KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaGlfZG5zX3BhY2tldF9mcmVlKHJlcGx5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBseSA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IGF2YWhpX3JlY29yZF90b19zdHJpbmcocik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaGlfbG9nX3dhcm4oIlJlY29yZCBbJXNdIHRvbyBsYXJnZSwgZG9lc24ndCBmaXQgaW4gYW55IHBhY2tldCEiLCB0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFoaV9mcmVlKHQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLyogQXBwZW5kaW5nIHRoZSByZWNvcmQgZGlkbid0IHN1Y2NlZWVkLCBzbyBsZXQncyBzZW5kIHRoaXMgcGFja2V0LCBhbmQgY3JlYXRlIGEgbmV3IG9uZSAqLworICAgICAgICAgICAgICAgICAgICBhdmFoaV9pbnRlcmZhY2Vfc2VuZF9wYWNrZXRfdW5pY2FzdChpLCByZXBseSwgYSwgcG9ydCk7CisgICAgICAgICAgICAgICAgICAgIGF2YWhpX2Ruc19wYWNrZXRfZnJlZShyZXBseSk7CisgICAgICAgICAgICAgICAgICAgIHJlcGx5ID0gTlVMTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGF2YWhpX3JlY29yZF91bnJlZihyKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyZXBseSkgeworICAgICAgICAgICAgaWYgKGF2YWhpX2Ruc19wYWNrZXRfZ2V0X2ZpZWxkKHJlcGx5LCBBVkFISV9ETlNfRklFTERfQU5DT1VOVCkgIT0gMCkKKyAgICAgICAgICAgICAgICBhdmFoaV9pbnRlcmZhY2Vfc2VuZF9wYWNrZXRfdW5pY2FzdChpLCByZXBseSwgYSwgcG9ydCk7CisgICAgICAgICAgICBhdmFoaV9kbnNfcGFja2V0X2ZyZWUocmVwbHkpOworICAgICAgICB9CisgICAgfQorCisgICAgYXZhaGlfcmVjb3JkX2xpc3RfZmx1c2gocy0+cmVjb3JkX2xpc3QpOworfQorCitzdGF0aWMgdm9pZCByZWZsZWN0X3Jlc3BvbnNlKEF2YWhpU2VydmVyICpzLCBBdmFoaUludGVyZmFjZSAqaSwgQXZhaGlSZWNvcmQgKnIsIGludCBmbHVzaF9jYWNoZSkgeworICAgIEF2YWhpSW50ZXJmYWNlICpqOworCisgICAgYXNzZXJ0KHMpOworICAgIGFzc2VydChpKTsKKyAgICBhc3NlcnQocik7CisKKyAgICBpZiAoIXMtPmNvbmZpZy5lbmFibGVfcmVmbGVjdG9yKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGogPSBzLT5tb25pdG9yLT5pbnRlcmZhY2VzOyBqOyBqID0gai0+aW50ZXJmYWNlX25leHQpCisgICAgICAgIGlmIChqICE9IGkgJiYgKHMtPmNvbmZpZy5yZWZsZWN0X2lwdiB8fCBqLT5wcm90b2NvbCA9PSBpLT5wcm90b2NvbCkpCisgICAgICAgICAgICBhdmFoaV9pbnRlcmZhY2VfcG9zdF9yZXNwb25zZShqLCByLCBmbHVzaF9jYWNoZSwgTlVMTCwgMSk7Cit9CisKK3N0YXRpYyB2b2lkKiByZWZsZWN0X2NhY2hlX3dhbGtfY2FsbGJhY2soQXZhaGlDYWNoZSAqYywgQXZhaGlLZXkgKnBhdHRlcm4sIEF2YWhpQ2FjaGVFbnRyeSAqZSwgdm9pZCogdXNlcmRhdGEpIHsKKyAgICBBdmFoaVNlcnZlciAqcyA9IHVzZXJkYXRhOworICAgIEF2YWhpUmVjb3JkKiByOworCisgICAgYXNzZXJ0KGMpOworICAgIGFzc2VydChwYXR0ZXJuKTsKKyAgICBhc3NlcnQoZSk7CisgICAgYXNzZXJ0KHMpOworCisgICAgLyogRG9uJ3QgcmVmbGVjdCBjYWNoZSBlbnRyeSB3aXRoIGlwdjYgbGluay1sb2NhbCBhZGRyZXNzZXMuICovCisgICAgciA9IGUtPnJlY29yZDsKKyAgICBpZiAoKHItPmtleS0+dHlwZSA9PSBBVkFISV9ETlNfVFlQRV9BQUFBKSAmJgorICAgICAgICAgICAgKHItPmRhdGEuYWFhYS5hZGRyZXNzLmFkZHJlc3NbMF0gPT0gMHhGRSkgJiYKKyAgICAgICAgICAgIChyLT5kYXRhLmFhYWEuYWRkcmVzcy5hZGRyZXNzWzFdID09IDB4ODApKQorICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBhdmFoaV9yZWNvcmRfbGlzdF9wdXNoKHMtPnJlY29yZF9saXN0LCBlLT5yZWNvcmQsIGUtPmNhY2hlX2ZsdXNoLCAwLCAwKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgcmVmbGVjdF9xdWVyeShBdmFoaVNlcnZlciAqcywgQXZhaGlJbnRlcmZhY2UgKmksIEF2YWhpS2V5ICprKSB7CisgICAgQXZhaGlJbnRlcmZhY2UgKmo7CisKKyAgICBhc3NlcnQocyk7CisgICAgYXNzZXJ0KGkpOworICAgIGFzc2VydChrKTsKKworICAgIGlmICghcy0+Y29uZmlnLmVuYWJsZV9yZWZsZWN0b3IpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoaiA9IHMtPm1vbml0b3ItPmludGVyZmFjZXM7IGo7IGogPSBqLT5pbnRlcmZhY2VfbmV4dCkKKyAgICAgICAgaWYgKGogIT0gaSAmJiAocy0+Y29uZmlnLnJlZmxlY3RfaXB2IHx8IGotPnByb3RvY29sID09IGktPnByb3RvY29sKSkgeworICAgICAgICAgICAgLyogUG9zdCB0aGUgcXVlcnkgdG8gb3RoZXIgbmV0d29ya3MgKi8KKyAgICAgICAgICAgIGF2YWhpX2ludGVyZmFjZV9wb3N0X3F1ZXJ5KGosIGssIDEsIE5VTEwpOworCisgICAgICAgICAgICAvKiBSZXBseSBmcm9tIGNhY2hlcyBvZiBvdGhlciBuZXR3b3JrLiBUaGlzIGlzIG5lZWRlZCB0bworICAgICAgICAgICAgICogIndvcmsgYXJvdW5kIiBrbm93biBhbnN3ZXIgc3VwcHJlc3Npb24uICovCisKKyAgICAgICAgICAgIGF2YWhpX2NhY2hlX3dhbGsoai0+Y2FjaGUsIGssIHJlZmxlY3RfY2FjaGVfd2Fsa19jYWxsYmFjaywgcyk7CisgICAgICAgIH0KK30KKworc3RhdGljIHZvaWQgcmVmbGVjdF9wcm9iZShBdmFoaVNlcnZlciAqcywgQXZhaGlJbnRlcmZhY2UgKmksIEF2YWhpUmVjb3JkICpyKSB7CisgICAgQXZhaGlJbnRlcmZhY2UgKmo7CisKKyAgICBhc3NlcnQocyk7CisgICAgYXNzZXJ0KGkpOworICAgIGFzc2VydChyKTsKKworICAgIGlmICghcy0+Y29uZmlnLmVuYWJsZV9yZWZsZWN0b3IpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoaiA9IHMtPm1vbml0b3ItPmludGVyZmFjZXM7IGo7IGogPSBqLT5pbnRlcmZhY2VfbmV4dCkKKyAgICAgICAgaWYgKGogIT0gaSAmJiAocy0+Y29uZmlnLnJlZmxlY3RfaXB2IHx8IGotPnByb3RvY29sID09IGktPnByb3RvY29sKSkKKyAgICAgICAgICAgIGF2YWhpX2ludGVyZmFjZV9wb3N0X3Byb2JlKGosIHIsIDEpOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfcXVlcnlfcGFja2V0KEF2YWhpU2VydmVyICpzLCBBdmFoaURuc1BhY2tldCAqcCwgQXZhaGlJbnRlcmZhY2UgKmksIGNvbnN0IEF2YWhpQWRkcmVzcyAqYSwgdWludDE2X3QgcG9ydCwgaW50IGxlZ2FjeV91bmljYXN0LCBpbnQgZnJvbV9sb2NhbF9pZmFjZSkgeworICAgIHNpemVfdCBuOworICAgIGludCBpc19wcm9iZTsKKworICAgIGFzc2VydChzKTsKKyAgICBhc3NlcnQocCk7CisgICAgYXNzZXJ0KGkpOworICAgIGFzc2VydChhKTsKKworICAgIGFzc2VydChhdmFoaV9yZWNvcmRfbGlzdF9pc19lbXB0eShzLT5yZWNvcmRfbGlzdCkpOworCisgICAgaXNfcHJvYmUgPSBhdmFoaV9kbnNfcGFja2V0X2dldF9maWVsZChwLCBBVkFISV9ETlNfRklFTERfTlNDT1VOVCkgPiAwOworCisgICAgLyogSGFuZGxlIHRoZSBxdWVzdGlvbnMgKi8KKyAgICBmb3IgKG4gPSBhdmFoaV9kbnNfcGFja2V0X2dldF9maWVsZChwLCBBVkFISV9ETlNfRklFTERfUURDT1VOVCk7IG4gPiAwOyBuIC0tKSB7CisgICAgICAgIEF2YWhpS2V5ICprZXk7CisgICAgICAgIGludCB1bmljYXN0X3Jlc3BvbnNlID0gMDsKKworICAgICAgICBpZiAoIShrZXkgPSBhdmFoaV9kbnNfcGFja2V0X2NvbnN1bWVfa2V5KHAsICZ1bmljYXN0X3Jlc3BvbnNlKSkpIHsKKyAgICAgICAgICAgIGF2YWhpX2xvZ193YXJuKF9fRklMRV9fIjogUGFja2V0IHRvbyBzaG9ydCBvciBpbnZhbGlkIHdoaWxlIHJlYWRpbmcgcXVlc3Rpb24ga2V5LiAoTWF5YmUgYSBVVEYtOCBwcm9ibGVtPykiKTsKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghbGVnYWN5X3VuaWNhc3QgJiYgIWZyb21fbG9jYWxfaWZhY2UpIHsKKyAgICAgICAgICAgIHJlZmxlY3RfcXVlcnkocywgaSwga2V5KTsKKyAgICAgICAgICAgIGlmICghdW5pY2FzdF9yZXNwb25zZSkKKyAgICAgICAgICAgICAgYXZhaGlfY2FjaGVfc3RhcnRfcG9vZihpLT5jYWNoZSwga2V5LCBhKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhdmFoaV9kbnNfcGFja2V0X2dldF9maWVsZChwLCBBVkFISV9ETlNfRklFTERfQU5DT1VOVCkgPT0gMCAmJgorICAgICAgICAgICAgIShhdmFoaV9kbnNfcGFja2V0X2dldF9maWVsZChwLCBBVkFISV9ETlNfRklFTERfRkxBR1MpICYgQVZBSElfRE5TX0ZMQUdfVEMpKQorICAgICAgICAgICAgLyogQWxsb3cgb3VyIG93biBxdWVyaWVzIHRvIGJlIHN1cHByZXNzZWQgYnkgaW5jb21pbmcKKyAgICAgICAgICAgICAqIHF1ZXJpZXMgb25seSB3aGVuIHRoZXkgZG8gbm90IGluY2x1ZGUga25vd24gYW5zd2VycyAqLworICAgICAgICAgICAgYXZhaGlfcXVlcnlfc2NoZWR1bGVyX2luY29taW5nKGktPnF1ZXJ5X3NjaGVkdWxlciwga2V5KTsKKworICAgICAgICBhdmFoaV9zZXJ2ZXJfcHJlcGFyZV9tYXRjaGluZ19yZXNwb25zZXMocywgaSwga2V5LCB1bmljYXN0X3Jlc3BvbnNlKTsKKyAgICAgICAgYXZhaGlfa2V5X3VucmVmKGtleSk7CisgICAgfQorCisgICAgaWYgKCFsZWdhY3lfdW5pY2FzdCkgeworCisgICAgICAgIC8qIEtub3duIEFuc3dlciBTdXBwcmVzc2lvbiAqLworICAgICAgICBmb3IgKG4gPSBhdmFoaV9kbnNfcGFja2V0X2dldF9maWVsZChwLCBBVkFISV9ETlNfRklFTERfQU5DT1VOVCk7IG4gPiAwOyBuIC0tKSB7CisgICAgICAgICAgICBBdmFoaVJlY29yZCAqcmVjb3JkOworICAgICAgICAgICAgaW50IHVuaXF1ZSA9IDA7CisKKyAgICAgICAgICAgIGlmICghKHJlY29yZCA9IGF2YWhpX2Ruc19wYWNrZXRfY29uc3VtZV9yZWNvcmQocCwgJnVuaXF1ZSkpKSB7CisgICAgICAgICAgICAgICAgYXZhaGlfbG9nX3dhcm4oX19GSUxFX18iOiBQYWNrZXQgdG9vIHNob3J0IG9yIGludmFsaWQgd2hpbGUgcmVhZGluZyBrbm93biBhbnN3ZXIgcmVjb3JkLiAoTWF5YmUgYSBVVEYtOCBwcm9ibGVtPykiKTsKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGF2YWhpX3Jlc3BvbnNlX3NjaGVkdWxlcl9zdXBwcmVzcyhpLT5yZXNwb25zZV9zY2hlZHVsZXIsIHJlY29yZCwgYSk7CisgICAgICAgICAgICBhdmFoaV9yZWNvcmRfbGlzdF9kcm9wKHMtPnJlY29yZF9saXN0LCByZWNvcmQpOworICAgICAgICAgICAgYXZhaGlfY2FjaGVfc3RvcF9wb29mKGktPmNhY2hlLCByZWNvcmQsIGEpOworCisgICAgICAgICAgICBhdmFoaV9yZWNvcmRfdW5yZWYocmVjb3JkKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFByb2JlIHJlY29yZCAqLworICAgICAgICBmb3IgKG4gPSBhdmFoaV9kbnNfcGFja2V0X2dldF9maWVsZChwLCBBVkFISV9ETlNfRklFTERfTlNDT1VOVCk7IG4gPiAwOyBuIC0tKSB7CisgICAgICAgICAgICBBdmFoaVJlY29yZCAqcmVjb3JkOworICAgICAgICAgICAgaW50IHVuaXF1ZSA9IDA7CisKKyAgICAgICAgICAgIGlmICghKHJlY29yZCA9IGF2YWhpX2Ruc19wYWNrZXRfY29uc3VtZV9yZWNvcmQocCwgJnVuaXF1ZSkpKSB7CisgICAgICAgICAgICAgICAgYXZhaGlfbG9nX3dhcm4oX19GSUxFX18iOiBQYWNrZXQgdG9vIHNob3J0IG9yIGludmFsaWQgd2hpbGUgcmVhZGluZyBwcm9iZSByZWNvcmQuIChNYXliZSBhIFVURi04IHByb2JsZW0/KSIpOworICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFhdmFoaV9rZXlfaXNfcGF0dGVybihyZWNvcmQtPmtleSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWZyb21fbG9jYWxfaWZhY2UpCisgICAgICAgICAgICAgICAgICAgIHJlZmxlY3RfcHJvYmUocywgaSwgcmVjb3JkKTsKKyAgICAgICAgICAgICAgICBpbmNvbWluZ19wcm9iZShzLCByZWNvcmQsIGkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBhdmFoaV9yZWNvcmRfdW5yZWYocmVjb3JkKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghYXZhaGlfcmVjb3JkX2xpc3RfaXNfZW1wdHkocy0+cmVjb3JkX2xpc3QpKQorICAgICAgICBhdmFoaV9zZXJ2ZXJfZ2VuZXJhdGVfcmVzcG9uc2UocywgaSwgcCwgYSwgcG9ydCwgbGVnYWN5X3VuaWNhc3QsIGlzX3Byb2JlKTsKKworICAgIHJldHVybjsKKworZmFpbDoKKyAgICBhdmFoaV9yZWNvcmRfbGlzdF9mbHVzaChzLT5yZWNvcmRfbGlzdCk7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9yZXNwb25zZV9wYWNrZXQoQXZhaGlTZXJ2ZXIgKnMsIEF2YWhpRG5zUGFja2V0ICpwLCBBdmFoaUludGVyZmFjZSAqaSwgY29uc3QgQXZhaGlBZGRyZXNzICphLCBpbnQgZnJvbV9sb2NhbF9pZmFjZSkgeworICAgIHVuc2lnbmVkIG47CisKKyAgICBhc3NlcnQocyk7CisgICAgYXNzZXJ0KHApOworICAgIGFzc2VydChpKTsKKyAgICBhc3NlcnQoYSk7CisKKyAgICBmb3IgKG4gPSBhdmFoaV9kbnNfcGFja2V0X2dldF9maWVsZChwLCBBVkFISV9ETlNfRklFTERfQU5DT1VOVCkgKworICAgICAgICAgICAgIGF2YWhpX2Ruc19wYWNrZXRfZ2V0X2ZpZWxkKHAsIEFWQUhJX0ROU19GSUVMRF9BUkNPVU5UKTsgbiA+IDA7IG4tLSkgeworICAgICAgICBBdmFoaVJlY29yZCAqcmVjb3JkOworICAgICAgICBpbnQgY2FjaGVfZmx1c2ggPSAwOworCisgICAgICAgIGlmICghKHJlY29yZCA9IGF2YWhpX2Ruc19wYWNrZXRfY29uc3VtZV9yZWNvcmQocCwgJmNhY2hlX2ZsdXNoKSkpIHsKKyAgICAgICAgICAgIGF2YWhpX2xvZ193YXJuKF9fRklMRV9fIjogUGFja2V0IHRvbyBzaG9ydCBvciBpbnZhbGlkIHdoaWxlIHJlYWRpbmcgcmVzcG9uc2UgcmVjb3JkLiAoTWF5YmUgYSBVVEYtOCBwcm9ibGVtPykiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFhdmFoaV9rZXlfaXNfcGF0dGVybihyZWNvcmQtPmtleSkpIHsKKworICAgICAgICAgICAgaWYgKGhhbmRsZV9jb25mbGljdChzLCBpLCByZWNvcmQsIGNhY2hlX2ZsdXNoKSkgeworICAgICAgICAgICAgICAgIGlmICghZnJvbV9sb2NhbF9pZmFjZSAmJiAhYXZhaGlfcmVjb3JkX2lzX2xpbmtfbG9jYWxfYWRkcmVzcyhyZWNvcmQpKQorICAgICAgICAgICAgICAgICAgICByZWZsZWN0X3Jlc3BvbnNlKHMsIGksIHJlY29yZCwgY2FjaGVfZmx1c2gpOworICAgICAgICAgICAgICAgIGF2YWhpX2NhY2hlX3VwZGF0ZShpLT5jYWNoZSwgcmVjb3JkLCBjYWNoZV9mbHVzaCwgYSk7CisgICAgICAgICAgICAgICAgYXZhaGlfcmVzcG9uc2Vfc2NoZWR1bGVyX2luY29taW5nKGktPnJlc3BvbnNlX3NjaGVkdWxlciwgcmVjb3JkLCBjYWNoZV9mbHVzaCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBhdmFoaV9yZWNvcmRfdW5yZWYocmVjb3JkKTsKKyAgICB9CisKKyAgICAvKiBJZiB0aGUgaW5jb21pbmcgcmVzcG9uc2UgY29udGFpbmVkIGEgY29uZmxpY3RpbmcgcmVjb3JkLCBzb21lCisgICAgICAgcmVjb3JkcyBoYXZlIGJlZW4gc2NoZWR1bGVkIGZvciBzZW5kaW5nLiBXZSBuZWVkIHRvIGZsdXNoIHRoZW0KKyAgICAgICBoZXJlLiAqLworICAgIGlmICghYXZhaGlfcmVjb3JkX2xpc3RfaXNfZW1wdHkocy0+cmVjb3JkX2xpc3QpKQorICAgICAgICBhdmFoaV9zZXJ2ZXJfZ2VuZXJhdGVfcmVzcG9uc2UocywgaSwgTlVMTCwgTlVMTCwgMCwgMCwgMSk7Cit9CisKK3N0YXRpYyBBdmFoaUxlZ2FjeVVuaWNhc3RSZWZsZWN0U2xvdCogYWxsb2NhdGVfc2xvdChBdmFoaVNlcnZlciAqcykgeworICAgIHVuc2lnbmVkIG4sIGlkeCA9ICh1bnNpZ25lZCkgLTE7CisgICAgQXZhaGlMZWdhY3lVbmljYXN0UmVmbGVjdFNsb3QgKnNsb3Q7CisKKyAgICBhc3NlcnQocyk7CisKKyAgICBpZiAoIXMtPmxlZ2FjeV91bmljYXN0X3JlZmxlY3Rfc2xvdHMpCisgICAgICAgIHMtPmxlZ2FjeV91bmljYXN0X3JlZmxlY3Rfc2xvdHMgPSBhdmFoaV9uZXcwKEF2YWhpTGVnYWN5VW5pY2FzdFJlZmxlY3RTbG90KiwgQVZBSElfTEVHQUNZX1VOSUNBU1RfUkVGTEVDVF9TTE9UU19NQVgpOworCisgICAgZm9yIChuID0gMDsgbiA8IEFWQUhJX0xFR0FDWV9VTklDQVNUX1JFRkxFQ1RfU0xPVFNfTUFYOyBuKyssIHMtPmxlZ2FjeV91bmljYXN0X3JlZmxlY3RfaWQrKykgeworICAgICAgICBpZHggPSBzLT5sZWdhY3lfdW5pY2FzdF9yZWZsZWN0X2lkICUgQVZBSElfTEVHQUNZX1VOSUNBU1RfUkVGTEVDVF9TTE9UU19NQVg7CisKKyAgICAgICAgaWYgKCFzLT5sZWdhY3lfdW5pY2FzdF9yZWZsZWN0X3Nsb3RzW2lkeF0pCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoaWR4ID09ICh1bnNpZ25lZCkgLTEgfHwgcy0+bGVnYWN5X3VuaWNhc3RfcmVmbGVjdF9zbG90c1tpZHhdKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmICghKHNsb3QgPSBhdmFoaV9uZXcoQXZhaGlMZWdhY3lVbmljYXN0UmVmbGVjdFNsb3QsIDEpKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7IC8qIE9PTSAqLworCisgICAgcy0+bGVnYWN5X3VuaWNhc3RfcmVmbGVjdF9zbG90c1tpZHhdID0gc2xvdDsKKyAgICBzbG90LT5pZCA9IHMtPmxlZ2FjeV91bmljYXN0X3JlZmxlY3RfaWQrKzsKKyAgICBzbG90LT5zZXJ2ZXIgPSBzOworCisgICAgcmV0dXJuIHNsb3Q7Cit9CisKK3N0YXRpYyB2b2lkIGRlYWxsb2NhdGVfc2xvdChBdmFoaVNlcnZlciAqcywgQXZhaGlMZWdhY3lVbmljYXN0UmVmbGVjdFNsb3QgKnNsb3QpIHsKKyAgICB1bnNpZ25lZCBpZHg7CisKKyAgICBhc3NlcnQocyk7CisgICAgYXNzZXJ0KHNsb3QpOworCisgICAgaWR4ID0gc2xvdC0+aWQgJSBBVkFISV9MRUdBQ1lfVU5JQ0FTVF9SRUZMRUNUX1NMT1RTX01BWDsKKworICAgIGFzc2VydChzLT5sZWdhY3lfdW5pY2FzdF9yZWZsZWN0X3Nsb3RzW2lkeF0gPT0gc2xvdCk7CisKKyAgICBhdmFoaV90aW1lX2V2ZW50X2ZyZWUoc2xvdC0+dGltZV9ldmVudCk7CisKKyAgICBhdmFoaV9mcmVlKHNsb3QpOworICAgIHMtPmxlZ2FjeV91bmljYXN0X3JlZmxlY3Rfc2xvdHNbaWR4XSA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfc2xvdHMoQXZhaGlTZXJ2ZXIgKnMpIHsKKyAgICB1bnNpZ25lZCBpZHg7CisgICAgYXNzZXJ0KHMpOworCisgICAgaWYgKCFzLT5sZWdhY3lfdW5pY2FzdF9yZWZsZWN0X3Nsb3RzKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGlkeCA9IDA7IGlkeCA8IEFWQUhJX0xFR0FDWV9VTklDQVNUX1JFRkxFQ1RfU0xPVFNfTUFYOyBpZHggKyspCisgICAgICAgIGlmIChzLT5sZWdhY3lfdW5pY2FzdF9yZWZsZWN0X3Nsb3RzW2lkeF0pCisgICAgICAgICAgICBkZWFsbG9jYXRlX3Nsb3Qocywgcy0+bGVnYWN5X3VuaWNhc3RfcmVmbGVjdF9zbG90c1tpZHhdKTsKKworICAgIGF2YWhpX2ZyZWUocy0+bGVnYWN5X3VuaWNhc3RfcmVmbGVjdF9zbG90cyk7CisgICAgcy0+bGVnYWN5X3VuaWNhc3RfcmVmbGVjdF9zbG90cyA9IE5VTEw7Cit9CisKK3N0YXRpYyBBdmFoaUxlZ2FjeVVuaWNhc3RSZWZsZWN0U2xvdCogZmluZF9zbG90KEF2YWhpU2VydmVyICpzLCB1aW50MTZfdCBpZCkgeworICAgIHVuc2lnbmVkIGlkeDsKKworICAgIGFzc2VydChzKTsKKworICAgIGlmICghcy0+bGVnYWN5X3VuaWNhc3RfcmVmbGVjdF9zbG90cykKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZHggPSBpZCAlIEFWQUhJX0xFR0FDWV9VTklDQVNUX1JFRkxFQ1RfU0xPVFNfTUFYOworCisgICAgaWYgKCFzLT5sZWdhY3lfdW5pY2FzdF9yZWZsZWN0X3Nsb3RzW2lkeF0gfHwgcy0+bGVnYWN5X3VuaWNhc3RfcmVmbGVjdF9zbG90c1tpZHhdLT5pZCAhPSBpZCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gcy0+bGVnYWN5X3VuaWNhc3RfcmVmbGVjdF9zbG90c1tpZHhdOworfQorCitzdGF0aWMgdm9pZCBsZWdhY3lfdW5pY2FzdF9yZWZsZWN0X3Nsb3RfdGltZW91dChBdmFoaVRpbWVFdmVudCAqZSwgdm9pZCAqdXNlcmRhdGEpIHsKKyAgICBBdmFoaUxlZ2FjeVVuaWNhc3RSZWZsZWN0U2xvdCAqc2xvdCA9IHVzZXJkYXRhOworCisgICAgYXNzZXJ0KGUpOworICAgIGFzc2VydChzbG90KTsKKyAgICBhc3NlcnQoc2xvdC0+dGltZV9ldmVudCA9PSBlKTsKKworICAgIGRlYWxsb2NhdGVfc2xvdChzbG90LT5zZXJ2ZXIsIHNsb3QpOworfQorCitzdGF0aWMgdm9pZCByZWZsZWN0X2xlZ2FjeV91bmljYXN0X3F1ZXJ5X3BhY2tldChBdmFoaVNlcnZlciAqcywgQXZhaGlEbnNQYWNrZXQgKnAsIEF2YWhpSW50ZXJmYWNlICppLCBjb25zdCBBdmFoaUFkZHJlc3MgKmEsIHVpbnQxNl90IHBvcnQpIHsKKyAgICBBdmFoaUxlZ2FjeVVuaWNhc3RSZWZsZWN0U2xvdCAqc2xvdDsKKyAgICBBdmFoaUludGVyZmFjZSAqajsKKworICAgIGFzc2VydChzKTsKKyAgICBhc3NlcnQocCk7CisgICAgYXNzZXJ0KGkpOworICAgIGFzc2VydChhKTsKKyAgICBhc3NlcnQocG9ydCA+IDApOworICAgIGFzc2VydChpLT5wcm90b2NvbCA9PSBhLT5wcm90byk7CisKKyAgICBpZiAoIXMtPmNvbmZpZy5lbmFibGVfcmVmbGVjdG9yKQorICAgICAgICByZXR1cm47CisKKyAgICAvKiBSZWZsZWN0aW5nIGxlZ2FjeSB1bmljYXN0IHF1ZXJpZXMgaXMgYSBsaXR0bGUgbW9yZSBjb21wbGljYXRlZAorICAgICAgIHRoYW4gcmVmbGVjdGluZyBub3JtYWwgcXVlcmllcywgc2luY2Ugd2UgbXVzdCByb3V0ZSB0aGUKKyAgICAgICByZXNwb25zZXMgYmFjayB0byB0aGUgcmlnaHQgY2xpZW50LiBUaGVyZWZvcmUgd2UgbXVzdCBzdG9yZQorICAgICAgIHNvbWUgaW5mb3JtYXRpb24gZm9yIGZpbmRpbmcgdGhlIHJpZ2h0IGNsaWVudCBjb250YWN0IGRhdGEgZm9yCisgICAgICAgcmVzcG9uc2UgcGFja2V0cy4gSW4gY29udHJhc3QgdG8gbm9ybWFsIHF1ZXJpZXMgbGVnYWN5CisgICAgICAgdW5pY2FzdCBxdWVyeSBhbmQgcmVzcG9uc2UgcGFja2V0cyBhcmUgcmVmbGVjdGVkIHVudG91Y2hlZCBhbmQKKyAgICAgICBhcmUgbm90IHJlYXNzZW1ibGVkIGludG8gbGFyZ2VyIHBhY2tldHMgKi8KKworICAgIGlmICghKHNsb3QgPSBhbGxvY2F0ZV9zbG90KHMpKSkgeworICAgICAgICAvKiBObyBzbG90IGF2YWlsYWJsZSwgd2UgZHJvcCB0aGlzIGxlZ2FjeSB1bmljYXN0IHF1ZXJ5ICovCisgICAgICAgIGF2YWhpX2xvZ193YXJuKCJObyBzbG90IGF2YWlsYWJsZSBmb3IgbGVnYWN5IHVuaWNhc3QgcmVmbGVjdGlvbiwgZHJvcHBpbmcgcXVlcnkgcGFja2V0LiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc2xvdC0+b3JpZ2luYWxfaWQgPSBhdmFoaV9kbnNfcGFja2V0X2dldF9maWVsZChwLCBBVkFISV9ETlNfRklFTERfSUQpOworICAgIHNsb3QtPmFkZHJlc3MgPSAqYTsKKyAgICBzbG90LT5wb3J0ID0gcG9ydDsKKyAgICBzbG90LT5pbnRlcmZhY2UgPSBpLT5oYXJkd2FyZS0+aW5kZXg7CisKKyAgICBhdmFoaV9lbGFwc2VfdGltZSgmc2xvdC0+ZWxhcHNlX3RpbWUsIDIwMDAsIDApOworICAgIHNsb3QtPnRpbWVfZXZlbnQgPSBhdmFoaV90aW1lX2V2ZW50X25ldyhzLT50aW1lX2V2ZW50X3F1ZXVlLCAmc2xvdC0+ZWxhcHNlX3RpbWUsIGxlZ2FjeV91bmljYXN0X3JlZmxlY3Rfc2xvdF90aW1lb3V0LCBzbG90KTsKKworICAgIC8qIFBhdGNoIHRoZSBwYWNrZXQgd2l0aCBvdXIgbmV3IGxvY2FsbHkgZ2VuZXJhdGV0IGlkICovCisgICAgYXZhaGlfZG5zX3BhY2tldF9zZXRfZmllbGQocCwgQVZBSElfRE5TX0ZJRUxEX0lELCBzbG90LT5pZCk7CisKKyAgICBmb3IgKGogPSBzLT5tb25pdG9yLT5pbnRlcmZhY2VzOyBqOyBqID0gai0+aW50ZXJmYWNlX25leHQpCisgICAgICAgIGlmIChqLT5hbm5vdW5jaW5nICYmCisgICAgICAgICAgICBqICE9IGkgJiYKKyAgICAgICAgICAgIChzLT5jb25maWcucmVmbGVjdF9pcHYgfHwgai0+cHJvdG9jb2wgPT0gaS0+cHJvdG9jb2wpKSB7CisKKyAgICAgICAgICAgIGlmIChqLT5wcm90b2NvbCA9PSBBVkFISV9QUk9UT19JTkVUICYmIHMtPmZkX2xlZ2FjeV91bmljYXN0X2lwdjQgPj0gMCkgeworICAgICAgICAgICAgICAgIGF2YWhpX3NlbmRfZG5zX3BhY2tldF9pcHY0KHMtPmZkX2xlZ2FjeV91bmljYXN0X2lwdjQsIGotPmhhcmR3YXJlLT5pbmRleCwgcCwgTlVMTCwgTlVMTCwgMCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGotPnByb3RvY29sID09IEFWQUhJX1BST1RPX0lORVQ2ICYmIHMtPmZkX2xlZ2FjeV91bmljYXN0X2lwdjYgPj0gMCkKKyAgICAgICAgICAgICAgICBhdmFoaV9zZW5kX2Ruc19wYWNrZXRfaXB2NihzLT5mZF9sZWdhY3lfdW5pY2FzdF9pcHY2LCBqLT5oYXJkd2FyZS0+aW5kZXgsIHAsIE5VTEwsIE5VTEwsIDApOworICAgICAgICB9CisKKyAgICAvKiBSZXNldCB0aGUgaWQgKi8KKyAgICBhdmFoaV9kbnNfcGFja2V0X3NldF9maWVsZChwLCBBVkFISV9ETlNfRklFTERfSUQsIHNsb3QtPm9yaWdpbmFsX2lkKTsKK30KKworc3RhdGljIGludCBvcmlnaW5hdGVzX2Zyb21fbG9jYWxfbGVnYWN5X3VuaWNhc3Rfc29ja2V0KEF2YWhpU2VydmVyICpzLCBjb25zdCBBdmFoaUFkZHJlc3MgKmFkZHJlc3MsIHVpbnQxNl90IHBvcnQpIHsKKyAgICBhc3NlcnQocyk7CisgICAgYXNzZXJ0KGFkZHJlc3MpOworICAgIGFzc2VydChwb3J0ID4gMCk7CisKKyAgICBpZiAoIXMtPmNvbmZpZy5lbmFibGVfcmVmbGVjdG9yKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmICghYXZhaGlfYWRkcmVzc19pc19sb2NhbChzLT5tb25pdG9yLCBhZGRyZXNzKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoYWRkcmVzcy0+cHJvdG8gPT0gQVZBSElfUFJPVE9fSU5FVCAmJiBzLT5mZF9sZWdhY3lfdW5pY2FzdF9pcHY0ID49IDApIHsKKyAgICAgICAgc3RydWN0IHNvY2thZGRyX2luIGxzYTsKKyAgICAgICAgc29ja2xlbl90IGwgPSBzaXplb2YobHNhKTsKKworICAgICAgICBpZiAoZ2V0c29ja25hbWUocy0+ZmRfbGVnYWN5X3VuaWNhc3RfaXB2NCwgKHN0cnVjdCBzb2NrYWRkciopICZsc2EsICZsKSAhPSAwKQorICAgICAgICAgICAgYXZhaGlfbG9nX3dhcm4oImdldHNvY2tuYW1lKCk6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIGF2YWhpX3BvcnRfZnJvbV9zb2NrYWRkcigoc3RydWN0IHNvY2thZGRyKikgJmxzYSkgPT0gcG9ydDsKKworICAgIH0KKworICAgIGlmIChhZGRyZXNzLT5wcm90byA9PSBBVkFISV9QUk9UT19JTkVUNiAmJiBzLT5mZF9sZWdhY3lfdW5pY2FzdF9pcHY2ID49IDApIHsKKyAgICAgICAgc3RydWN0IHNvY2thZGRyX2luNiBsc2E7CisgICAgICAgIHNvY2tsZW5fdCBsID0gc2l6ZW9mKGxzYSk7CisKKyAgICAgICAgaWYgKGdldHNvY2tuYW1lKHMtPmZkX2xlZ2FjeV91bmljYXN0X2lwdjYsIChzdHJ1Y3Qgc29ja2FkZHIqKSAmbHNhLCAmbCkgIT0gMCkKKyAgICAgICAgICAgIGF2YWhpX2xvZ193YXJuKCJnZXRzb2NrbmFtZSgpOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBhdmFoaV9wb3J0X2Zyb21fc29ja2FkZHIoKHN0cnVjdCBzb2NrYWRkciopICZsc2EpID09IHBvcnQ7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXNfbWRuc19tY2FzdF9hZGRyZXNzKGNvbnN0IEF2YWhpQWRkcmVzcyAqYSkgeworICAgIEF2YWhpQWRkcmVzcyBiOworICAgIGFzc2VydChhKTsKKworICAgIGF2YWhpX2FkZHJlc3NfcGFyc2UoYS0+cHJvdG8gPT0gQVZBSElfUFJPVE9fSU5FVCA/IEFWQUhJX0lQVjRfTUNBU1RfR1JPVVAgOiBBVkFISV9JUFY2X01DQVNUX0dST1VQLCBhLT5wcm90bywgJmIpOworICAgIHJldHVybiBhdmFoaV9hZGRyZXNzX2NtcChhLCAmYikgPT0gMDsKK30KKworc3RhdGljIGludCBvcmlnaW5hdGVzX2Zyb21fbG9jYWxfaWZhY2UoQXZhaGlTZXJ2ZXIgKnMsIEF2YWhpSWZJbmRleCBpZmFjZSwgY29uc3QgQXZhaGlBZGRyZXNzICphLCB1aW50MTZfdCBwb3J0KSB7CisgICAgYXNzZXJ0KHMpOworICAgIGFzc2VydChpZmFjZSAhPSBBVkFISV9JRl9VTlNQRUMpOworICAgIGFzc2VydChhKTsKKworICAgIC8qIElmIGl0IGlzbid0IHRoZSBNRE5TIHBvcnQgaXQgY2FuJ3QgYmUgZ2VuZXJhdGVkIGJ5IHVzICovCisgICAgaWYgKHBvcnQgIT0gQVZBSElfTUROU19QT1JUKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBhdmFoaV9pbnRlcmZhY2VfaGFzX2FkZHJlc3Mocy0+bW9uaXRvciwgaWZhY2UsIGEpOworfQorCitzdGF0aWMgdm9pZCBkaXNwYXRjaF9wYWNrZXQoQXZhaGlTZXJ2ZXIgKnMsIEF2YWhpRG5zUGFja2V0ICpwLCBjb25zdCBBdmFoaUFkZHJlc3MgKnNyY19hZGRyZXNzLCB1aW50MTZfdCBwb3J0LCBjb25zdCBBdmFoaUFkZHJlc3MgKmRzdF9hZGRyZXNzLCBBdmFoaUlmSW5kZXggaWZhY2UsIGludCB0dGwpIHsKKyAgICBBdmFoaUludGVyZmFjZSAqaTsKKyAgICBpbnQgZnJvbV9sb2NhbF9pZmFjZSA9IDA7CisKKyAgICBhc3NlcnQocyk7CisgICAgYXNzZXJ0KHApOworICAgIGFzc2VydChzcmNfYWRkcmVzcyk7CisgICAgYXNzZXJ0KGRzdF9hZGRyZXNzKTsKKyAgICBhc3NlcnQoaWZhY2UgPiAwKTsKKyAgICBhc3NlcnQoc3JjX2FkZHJlc3MtPnByb3RvID09IGRzdF9hZGRyZXNzLT5wcm90byk7CisKKyAgICBpZiAoIShpID0gYXZhaGlfaW50ZXJmYWNlX21vbml0b3JfZ2V0X2ludGVyZmFjZShzLT5tb25pdG9yLCBpZmFjZSwgc3JjX2FkZHJlc3MtPnByb3RvKSkgfHwKKyAgICAgICAgIWktPmFubm91bmNpbmcpIHsKKyAgICAgICAgYXZhaGlfbG9nX3dhcm4oIlJlY2VpdmVkIHBhY2tldCBmcm9tIGludmFsaWQgaW50ZXJmYWNlLiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHBvcnQgPD0gMCkgeworICAgICAgICAvKiBUaGlzIGZpeGVzIFJIQlogIzQ3NTM5NCAqLworICAgICAgICBhdmFoaV9sb2dfd2FybigiUmVjZWl2ZWQgcGFja2V0IGZyb20gaW52YWxpZCBzb3VyY2UgcG9ydCAldS4iLCAodW5zaWduZWQpIHBvcnQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF2YWhpX2FkZHJlc3NfaXNfaXB2NF9pbl9pcHY2KHNyY19hZGRyZXNzKSkKKyAgICAgICAgLyogVGhpcyBpcyBhbiBJUHY0IGFkZHJlc3MgZW5jYXBzdWxhdGVkIGluIElQdjYsIHNvIGxldCdzIGlnbm9yZSBpdC4gKi8KKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG9yaWdpbmF0ZXNfZnJvbV9sb2NhbF9sZWdhY3lfdW5pY2FzdF9zb2NrZXQocywgc3JjX2FkZHJlc3MsIHBvcnQpKQorICAgICAgICAvKiBUaGlzIG9yaWdpbmF0ZXMgZnJvbSBvdXIgbG9jYWwgcmVmbGVjdG9yLCBzbyBsZXQncyBpZ25vcmUgaXQgKi8KKyAgICAgICAgcmV0dXJuOworCisgICAgLyogV2UgZG9uJ3Qgd2FudCB0byByZWZsZWN0IGxvY2FsIHRyYWZmaWMsIHNvIHdlIGNoZWNrIGlmIHRoaXMgcGFja2V0IGlzIGdlbmVyYXRlZCBsb2NhbGx5LiAqLworICAgIGlmIChzLT5jb25maWcuZW5hYmxlX3JlZmxlY3RvcikKKyAgICAgICAgZnJvbV9sb2NhbF9pZmFjZSA9IG9yaWdpbmF0ZXNfZnJvbV9sb2NhbF9pZmFjZShzLCBpZmFjZSwgc3JjX2FkZHJlc3MsIHBvcnQpOworCisgICAgaWYgKGF2YWhpX2Ruc19wYWNrZXRfY2hlY2tfdmFsaWRfbXVsdGljYXN0KHApIDwgMCkgeworICAgICAgICBhdmFoaV9sb2dfd2FybigiUmVjZWl2ZWQgaW52YWxpZCBwYWNrZXQuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYXZhaGlfZG5zX3BhY2tldF9pc19xdWVyeShwKSkgeworICAgICAgICBpbnQgbGVnYWN5X3VuaWNhc3QgPSAwOworCisgICAgICAgIC8qIEZvciBxdWVyaWVzIEVETlMwIG1pZ2h0IGFsbG93IEFSQ09VTlQgIT0gMC4gV2UgaWdub3JlIHRoZQorICAgICAgICAgKiBBUiBzZWN0aW9uIGNvbXBsZXRlbHkgaGVyZSwgc28gZmFyLiBVbnRpbCB0aGUgZGF5IHdlIGFkZAorICAgICAgICAgKiBFRE5TMCBzdXBwb3J0LiAqLworCisgICAgICAgIGlmIChwb3J0ICE9IEFWQUhJX01ETlNfUE9SVCkgeworICAgICAgICAgICAgLyogTGVnYWN5IFVuaWNhc3QgKi8KKworICAgICAgICAgICAgaWYgKChhdmFoaV9kbnNfcGFja2V0X2dldF9maWVsZChwLCBBVkFISV9ETlNfRklFTERfQU5DT1VOVCkgIT0gMCB8fAorICAgICAgICAgICAgICAgICBhdmFoaV9kbnNfcGFja2V0X2dldF9maWVsZChwLCBBVkFISV9ETlNfRklFTERfTlNDT1VOVCkgIT0gMCkpIHsKKyAgICAgICAgICAgICAgICBhdmFoaV9sb2dfd2FybigiSW52YWxpZCBsZWdhY3kgdW5pY2FzdCBxdWVyeSBwYWNrZXQuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBsZWdhY3lfdW5pY2FzdCA9IDE7CisgICAgICAgIH0KKworICAgICAgICBpZiAobGVnYWN5X3VuaWNhc3QpCisgICAgICAgICAgICByZWZsZWN0X2xlZ2FjeV91bmljYXN0X3F1ZXJ5X3BhY2tldChzLCBwLCBpLCBzcmNfYWRkcmVzcywgcG9ydCk7CisKKyAgICAgICAgaGFuZGxlX3F1ZXJ5X3BhY2tldChzLCBwLCBpLCBzcmNfYWRkcmVzcywgcG9ydCwgbGVnYWN5X3VuaWNhc3QsIGZyb21fbG9jYWxfaWZhY2UpOworCisgICAgfSBlbHNlIHsKKyAgICAgICAgY2hhciB0W0FWQUhJX0FERFJFU1NfU1RSX01BWF07CisKKyAgICAgICAgaWYgKHBvcnQgIT0gQVZBSElfTUROU19QT1JUKSB7CisgICAgICAgICAgICBhdmFoaV9sb2dfd2FybigiUmVjZWl2ZWQgcmVzcG9uc2UgZnJvbSBob3N0ICVzIHdpdGggaW52YWxpZCBzb3VyY2UgcG9ydCAldSBvbiBpbnRlcmZhY2UgJyVzLiVpJyIsIGF2YWhpX2FkZHJlc3Nfc25wcmludCh0LCBzaXplb2YodCksIHNyY19hZGRyZXNzKSwgcG9ydCwgaS0+aGFyZHdhcmUtPm5hbWUsIGktPnByb3RvY29sKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0dGwgIT0gMjU1ICYmIHMtPmNvbmZpZy5jaGVja19yZXNwb25zZV90dGwpIHsKKyAgICAgICAgICAgIGF2YWhpX2xvZ193YXJuKCJSZWNlaXZlZCByZXNwb25zZSBmcm9tIGhvc3QgJXMgd2l0aCBpbnZhbGlkIFRUTCAldSBvbiBpbnRlcmZhY2UgJyVzLiVpJy4iLCBhdmFoaV9hZGRyZXNzX3NucHJpbnQodCwgc2l6ZW9mKHQpLCBzcmNfYWRkcmVzcyksIHR0bCwgaS0+aGFyZHdhcmUtPm5hbWUsIGktPnByb3RvY29sKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghaXNfbWRuc19tY2FzdF9hZGRyZXNzKGRzdF9hZGRyZXNzKSAmJgorICAgICAgICAgICAgIWF2YWhpX2ludGVyZmFjZV9hZGRyZXNzX29uX2xpbmsoaSwgc3JjX2FkZHJlc3MpKSB7CisKKyAgICAgICAgICAgIGF2YWhpX2xvZ193YXJuKCJSZWNlaXZlZCBub24tbG9jYWwgcmVzcG9uc2UgZnJvbSBob3N0ICVzIG9uIGludGVyZmFjZSAnJXMuJWknLiIsIGF2YWhpX2FkZHJlc3Nfc25wcmludCh0LCBzaXplb2YodCksIHNyY19hZGRyZXNzKSwgaS0+aGFyZHdhcmUtPm5hbWUsIGktPnByb3RvY29sKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhdmFoaV9kbnNfcGFja2V0X2dldF9maWVsZChwLCBBVkFISV9ETlNfRklFTERfUURDT1VOVCkgIT0gMCB8fAorICAgICAgICAgICAgYXZhaGlfZG5zX3BhY2tldF9nZXRfZmllbGQocCwgQVZBSElfRE5TX0ZJRUxEX0FOQ09VTlQpID09IDAgfHwKKyAgICAgICAgICAgIGF2YWhpX2Ruc19wYWNrZXRfZ2V0X2ZpZWxkKHAsIEFWQUhJX0ROU19GSUVMRF9OU0NPVU5UKSAhPSAwKSB7CisKKyAgICAgICAgICAgIGF2YWhpX2xvZ193YXJuKCJJbnZhbGlkIHJlc3BvbnNlIHBhY2tldCBmcm9tIGhvc3QgJXMuIiwgYXZhaGlfYWRkcmVzc19zbnByaW50KHQsIHNpemVvZih0KSwgc3JjX2FkZHJlc3MpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGhhbmRsZV9yZXNwb25zZV9wYWNrZXQocywgcCwgaSwgc3JjX2FkZHJlc3MsIGZyb21fbG9jYWxfaWZhY2UpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgZGlzcGF0Y2hfbGVnYWN5X3VuaWNhc3RfcGFja2V0KEF2YWhpU2VydmVyICpzLCBBdmFoaURuc1BhY2tldCAqcCkgeworICAgIEF2YWhpSW50ZXJmYWNlICpqOworICAgIEF2YWhpTGVnYWN5VW5pY2FzdFJlZmxlY3RTbG90ICpzbG90OworCisgICAgYXNzZXJ0KHMpOworICAgIGFzc2VydChwKTsKKworICAgIGlmIChhdmFoaV9kbnNfcGFja2V0X2NoZWNrX3ZhbGlkKHApIDwgMCB8fCBhdmFoaV9kbnNfcGFja2V0X2lzX3F1ZXJ5KHApKSB7CisgICAgICAgIGF2YWhpX2xvZ193YXJuKCJSZWNlaXZlZCBpbnZhbGlkIHBhY2tldC4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghKHNsb3QgPSBmaW5kX3Nsb3QocywgYXZhaGlfZG5zX3BhY2tldF9nZXRfZmllbGQocCwgQVZBSElfRE5TX0ZJRUxEX0lEKSkpKSB7CisgICAgICAgIGF2YWhpX2xvZ193YXJuKCJSZWNlaXZlZCBsZWdhY3kgdW5pY2FzdCByZXNwb25zZSB3aXRoIHVua25vd24gaWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghKGogPSBhdmFoaV9pbnRlcmZhY2VfbW9uaXRvcl9nZXRfaW50ZXJmYWNlKHMtPm1vbml0b3IsIHNsb3QtPmludGVyZmFjZSwgc2xvdC0+YWRkcmVzcy5wcm90bykpIHx8CisgICAgICAgICFqLT5hbm5vdW5jaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICAvKiBQYXRjaCB0aGUgb3JpZ2luYWwgSUQgaW50byB0aGlzIHJlc3BvbnNlICovCisgICAgYXZhaGlfZG5zX3BhY2tldF9zZXRfZmllbGQocCwgQVZBSElfRE5TX0ZJRUxEX0lELCBzbG90LT5vcmlnaW5hbF9pZCk7CisKKyAgICAvKiBGb3J3YXJkIHRoZSByZXNwb25zZSB0byB0aGUgY29ycmVjdCBjbGllbnQgKi8KKyAgICBhdmFoaV9pbnRlcmZhY2Vfc2VuZF9wYWNrZXRfdW5pY2FzdChqLCBwLCAmc2xvdC0+YWRkcmVzcywgc2xvdC0+cG9ydCk7CisKKyAgICAvKiBVbmRvIGNoYW5nZXMgdG8gcGFja2V0ICovCisgICAgYXZhaGlfZG5zX3BhY2tldF9zZXRfZmllbGQocCwgQVZBSElfRE5TX0ZJRUxEX0lELCBzbG90LT5pZCk7Cit9CisKK3N0YXRpYyB2b2lkIG1jYXN0X3NvY2tldF9ldmVudChBdmFoaVdhdGNoICp3LCBpbnQgZmQsIEF2YWhpV2F0Y2hFdmVudCBldmVudHMsIHZvaWQgKnVzZXJkYXRhKSB7CisgICAgQXZhaGlTZXJ2ZXIgKnMgPSB1c2VyZGF0YTsKKyAgICBBdmFoaUFkZHJlc3MgZGVzdCwgc3JjOworICAgIEF2YWhpRG5zUGFja2V0ICpwID0gTlVMTDsKKyAgICBBdmFoaUlmSW5kZXggaWZhY2U7CisgICAgdWludDE2X3QgcG9ydDsKKyAgICB1aW50OF90IHR0bDsKKworICAgIGFzc2VydCh3KTsKKyAgICBhc3NlcnQoZmQgPj0gMCk7CisgICAgYXNzZXJ0KGV2ZW50cyAmIEFWQUhJX1dBVENIX0lOKTsKKworICAgIGlmIChmZCA9PSBzLT5mZF9pcHY0KSB7CisgICAgICAgIGRlc3QucHJvdG8gPSBzcmMucHJvdG8gPSBBVkFISV9QUk9UT19JTkVUOworICAgICAgICBwID0gYXZhaGlfcmVjdl9kbnNfcGFja2V0X2lwdjQocy0+ZmRfaXB2NCwgJnNyYy5kYXRhLmlwdjQsICZwb3J0LCAmZGVzdC5kYXRhLmlwdjQsICZpZmFjZSwgJnR0bCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXNzZXJ0KGZkID09IHMtPmZkX2lwdjYpOworICAgICAgICBkZXN0LnByb3RvID0gc3JjLnByb3RvID0gQVZBSElfUFJPVE9fSU5FVDY7CisgICAgICAgIHAgPSBhdmFoaV9yZWN2X2Ruc19wYWNrZXRfaXB2NihzLT5mZF9pcHY2LCAmc3JjLmRhdGEuaXB2NiwgJnBvcnQsICZkZXN0LmRhdGEuaXB2NiwgJmlmYWNlLCAmdHRsKTsKKyAgICB9CisKKyAgICBpZiAocCkgeworICAgICAgICBpZiAoaWZhY2UgPT0gQVZBSElfSUZfVU5TUEVDKQorICAgICAgICAgICAgaWZhY2UgPSBhdmFoaV9maW5kX2ludGVyZmFjZV9mb3JfYWRkcmVzcyhzLT5tb25pdG9yLCAmZGVzdCk7CisKKyAgICAgICAgaWYgKGlmYWNlICE9IEFWQUhJX0lGX1VOU1BFQykKKyAgICAgICAgICAgIGRpc3BhdGNoX3BhY2tldChzLCBwLCAmc3JjLCBwb3J0LCAmZGVzdCwgaWZhY2UsIHR0bCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGF2YWhpX2xvZ19lcnJvcigiSW5jb21pbmcgcGFja2V0IHJlY2VpdmVkIG9uIGFkZHJlc3MgdGhhdCBpc24ndCBsb2NhbC4iKTsKKworICAgICAgICBhdmFoaV9kbnNfcGFja2V0X2ZyZWUocCk7CisKKyAgICAgICAgYXZhaGlfY2xlYW51cF9kZWFkX2VudHJpZXMocyk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBsZWdhY3lfdW5pY2FzdF9zb2NrZXRfZXZlbnQoQXZhaGlXYXRjaCAqdywgaW50IGZkLCBBdmFoaVdhdGNoRXZlbnQgZXZlbnRzLCB2b2lkICp1c2VyZGF0YSkgeworICAgIEF2YWhpU2VydmVyICpzID0gdXNlcmRhdGE7CisgICAgQXZhaGlEbnNQYWNrZXQgKnAgPSBOVUxMOworCisgICAgYXNzZXJ0KHcpOworICAgIGFzc2VydChmZCA+PSAwKTsKKyAgICBhc3NlcnQoZXZlbnRzICYgQVZBSElfV0FUQ0hfSU4pOworCisgICAgaWYgKGZkID09IHMtPmZkX2xlZ2FjeV91bmljYXN0X2lwdjQpCisgICAgICAgIHAgPSBhdmFoaV9yZWN2X2Ruc19wYWNrZXRfaXB2NChzLT5mZF9sZWdhY3lfdW5pY2FzdF9pcHY0LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXNzZXJ0KGZkID09IHMtPmZkX2xlZ2FjeV91bmljYXN0X2lwdjYpOworICAgICAgICBwID0gYXZhaGlfcmVjdl9kbnNfcGFja2V0X2lwdjYocy0+ZmRfbGVnYWN5X3VuaWNhc3RfaXB2NiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7CisgICAgfQorCisgICAgaWYgKHApIHsKKyAgICAgICAgZGlzcGF0Y2hfbGVnYWN5X3VuaWNhc3RfcGFja2V0KHMsIHApOworICAgICAgICBhdmFoaV9kbnNfcGFja2V0X2ZyZWUocCk7CisKKyAgICAgICAgYXZhaGlfY2xlYW51cF9kZWFkX2VudHJpZXMocyk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBzZXJ2ZXJfc2V0X3N0YXRlKEF2YWhpU2VydmVyICpzLCBBdmFoaVNlcnZlclN0YXRlIHN0YXRlKSB7CisgICAgYXNzZXJ0KHMpOworCisgICAgaWYgKHMtPnN0YXRlID09IHN0YXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBzLT5zdGF0ZSA9IHN0YXRlOworCisgICAgYXZhaGlfaW50ZXJmYWNlX21vbml0b3JfdXBkYXRlX3JycyhzLT5tb25pdG9yLCAwKTsKKworICAgIGlmIChzLT5jYWxsYmFjaykKKyAgICAgICAgcy0+Y2FsbGJhY2socywgc3RhdGUsIHMtPnVzZXJkYXRhKTsKK30KKworc3RhdGljIHZvaWQgd2l0aGRyYXdfaG9zdF9ycnMoQXZhaGlTZXJ2ZXIgKnMpIHsKKyAgICBhc3NlcnQocyk7CisKKyAgICBpZiAocy0+aGluZm9fZW50cnlfZ3JvdXApCisgICAgICAgIGF2YWhpX3NfZW50cnlfZ3JvdXBfcmVzZXQocy0+aGluZm9fZW50cnlfZ3JvdXApOworCisgICAgaWYgKHMtPmJyb3dzZV9kb21haW5fZW50cnlfZ3JvdXApCisgICAgICAgIGF2YWhpX3NfZW50cnlfZ3JvdXBfcmVzZXQocy0+YnJvd3NlX2RvbWFpbl9lbnRyeV9ncm91cCk7CisKKyAgICBhdmFoaV9pbnRlcmZhY2VfbW9uaXRvcl91cGRhdGVfcnJzKHMtPm1vbml0b3IsIDEpOworICAgIHMtPm5faG9zdF9ycl9wZW5kaW5nID0gMDsKK30KKwordm9pZCBhdmFoaV9zZXJ2ZXJfZGVjcmVhc2VfaG9zdF9ycl9wZW5kaW5nKEF2YWhpU2VydmVyICpzKSB7CisgICAgYXNzZXJ0KHMpOworCisgICAgYXNzZXJ0KHMtPm5faG9zdF9ycl9wZW5kaW5nID4gMCk7CisKKyAgICBpZiAoLS1zLT5uX2hvc3RfcnJfcGVuZGluZyA9PSAwKQorICAgICAgICBzZXJ2ZXJfc2V0X3N0YXRlKHMsIEFWQUhJX1NFUlZFUl9SVU5OSU5HKTsKK30KKwordm9pZCBhdmFoaV9ob3N0X3JyX2VudHJ5X2dyb3VwX2NhbGxiYWNrKEF2YWhpU2VydmVyICpzLCBBdmFoaVNFbnRyeUdyb3VwICpnLCBBdmFoaUVudHJ5R3JvdXBTdGF0ZSBzdGF0ZSwgQVZBSElfR0NDX1VOVVNFRCB2b2lkICp1c2VyZGF0YSkgeworICAgIGFzc2VydChzKTsKKyAgICBhc3NlcnQoZyk7CisKKyAgICBpZiAoc3RhdGUgPT0gQVZBSElfRU5UUllfR1JPVVBfUkVHSVNURVJJTkcgJiYKKyAgICAgICAgcy0+c3RhdGUgPT0gQVZBSElfU0VSVkVSX1JFR0lTVEVSSU5HKQorICAgICAgICBzLT5uX2hvc3RfcnJfcGVuZGluZyArKzsKKworICAgIGVsc2UgaWYgKHN0YXRlID09IEFWQUhJX0VOVFJZX0dST1VQX0NPTExJU0lPTiAmJgorICAgICAgICAocy0+c3RhdGUgPT0gQVZBSElfU0VSVkVSX1JFR0lTVEVSSU5HIHx8IHMtPnN0YXRlID09IEFWQUhJX1NFUlZFUl9SVU5OSU5HKSkgeworICAgICAgICB3aXRoZHJhd19ob3N0X3JycyhzKTsKKyAgICAgICAgc2VydmVyX3NldF9zdGF0ZShzLCBBVkFISV9TRVJWRVJfQ09MTElTSU9OKTsKKworICAgIH0gZWxzZSBpZiAoc3RhdGUgPT0gQVZBSElfRU5UUllfR1JPVVBfRVNUQUJMSVNIRUQgJiYKKyAgICAgICAgICAgICAgIHMtPnN0YXRlID09IEFWQUhJX1NFUlZFUl9SRUdJU1RFUklORykKKyAgICAgICAgYXZhaGlfc2VydmVyX2RlY3JlYXNlX2hvc3RfcnJfcGVuZGluZyhzKTsKK30KKworc3RhdGljIHZvaWQgcmVnaXN0ZXJfaGluZm8oQXZhaGlTZXJ2ZXIgKnMpIHsKKyAgICBzdHJ1Y3QgdXRzbmFtZSB1dHNuYW1lOworICAgIEF2YWhpUmVjb3JkICpyOworCisgICAgYXNzZXJ0KHMpOworCisgICAgaWYgKCFzLT5jb25maWcucHVibGlzaF9oaW5mbykKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHMtPmhpbmZvX2VudHJ5X2dyb3VwKQorICAgICAgICBhc3NlcnQoYXZhaGlfc19lbnRyeV9ncm91cF9pc19lbXB0eShzLT5oaW5mb19lbnRyeV9ncm91cCkpOworICAgIGVsc2UKKyAgICAgICAgcy0+aGluZm9fZW50cnlfZ3JvdXAgPSBhdmFoaV9zX2VudHJ5X2dyb3VwX25ldyhzLCBhdmFoaV9ob3N0X3JyX2VudHJ5X2dyb3VwX2NhbGxiYWNrLCBOVUxMKTsKKworICAgIGlmICghcy0+aGluZm9fZW50cnlfZ3JvdXApIHsKKyAgICAgICAgYXZhaGlfbG9nX3dhcm4oIkZhaWxlZCB0byBjcmVhdGUgSElORk8gZW50cnkgZ3JvdXA6ICVzIiwgYXZhaGlfc3RyZXJyb3Iocy0+ZXJyb3IpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qIEZpbGwgaW4gSElORk8gcnIgKi8KKyAgICBpZiAoKHIgPSBhdmFoaV9yZWNvcmRfbmV3X2Z1bGwocy0+aG9zdF9uYW1lX2ZxZG4sIEFWQUhJX0ROU19DTEFTU19JTiwgQVZBSElfRE5TX1RZUEVfSElORk8sIEFWQUhJX0RFRkFVTFRfVFRMX0hPU1RfTkFNRSkpKSB7CisKKyAgICAgICAgaWYgKHVuYW1lKCZ1dHNuYW1lKSA8IDApCisgICAgICAgICAgICBhdmFoaV9sb2dfd2FybigidW5hbWUoKSBmYWlsZWQ6ICVzXG4iLCBhdmFoaV9zdHJlcnJvcihlcnJubykpOworICAgICAgICBlbHNlIHsKKworICAgICAgICAgICAgci0+ZGF0YS5oaW5mby5jcHUgPSBhdmFoaV9zdHJkdXAoYXZhaGlfc3RydXAodXRzbmFtZS5tYWNoaW5lKSk7CisgICAgICAgICAgICByLT5kYXRhLmhpbmZvLm9zID0gYXZhaGlfc3RyZHVwKGF2YWhpX3N0cnVwKHV0c25hbWUuc3lzbmFtZSkpOworCisgICAgICAgICAgICBhdmFoaV9sb2dfaW5mbygiUmVnaXN0ZXJpbmcgSElORk8gcmVjb3JkIHdpdGggdmFsdWVzICclcycvJyVzJy4iLCByLT5kYXRhLmhpbmZvLmNwdSwgci0+ZGF0YS5oaW5mby5vcyk7CisKKyAgICAgICAgICAgIGlmIChhdmFoaV9zZXJ2ZXJfYWRkKHMsIHMtPmhpbmZvX2VudHJ5X2dyb3VwLCBBVkFISV9JRl9VTlNQRUMsIEFWQUhJX1BST1RPX1VOU1BFQywgQVZBSElfUFVCTElTSF9VTklRVUUsIHIpIDwgMCkgeworICAgICAgICAgICAgICAgIGF2YWhpX2xvZ193YXJuKCJGYWlsZWQgdG8gYWRkIEhJTkZPIFJSOiAlcyIsIGF2YWhpX3N0cmVycm9yKHMtPmVycm9yKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgYXZhaGlfcmVjb3JkX3VucmVmKHIpOworICAgIH0KKworICAgIGlmIChhdmFoaV9zX2VudHJ5X2dyb3VwX2NvbW1pdChzLT5oaW5mb19lbnRyeV9ncm91cCkgPCAwKQorICAgICAgICBhdmFoaV9sb2dfd2FybigiRmFpbGVkIHRvIGNvbW1pdCBISU5GTyBlbnRyeSBncm91cDogJXMiLCBhdmFoaV9zdHJlcnJvcihzLT5lcnJvcikpOworCit9CisKK3N0YXRpYyB2b2lkIHJlZ2lzdGVyX2xvY2FsaG9zdChBdmFoaVNlcnZlciAqcykgeworICAgIEF2YWhpQWRkcmVzcyBhOworICAgIGFzc2VydChzKTsKKworICAgIC8qIEFkZCBsb2NhbGhvc3QgZW50cmllcyAqLworICAgIGF2YWhpX2FkZHJlc3NfcGFyc2UoIjEyNy4wLjAuMSIsIEFWQUhJX1BST1RPX0lORVQsICZhKTsKKyAgICBhdmFoaV9zZXJ2ZXJfYWRkX2FkZHJlc3MocywgTlVMTCwgQVZBSElfSUZfVU5TUEVDLCBBVkFISV9QUk9UT19VTlNQRUMsIEFWQUhJX1BVQkxJU0hfTk9fUFJPQkV8QVZBSElfUFVCTElTSF9OT19BTk5PVU5DRSwgImxvY2FsaG9zdCIsICZhKTsKKworICAgIGF2YWhpX2FkZHJlc3NfcGFyc2UoIjo6MSIsIEFWQUhJX1BST1RPX0lORVQ2LCAmYSk7CisgICAgYXZhaGlfc2VydmVyX2FkZF9hZGRyZXNzKHMsIE5VTEwsIEFWQUhJX0lGX1VOU1BFQywgQVZBSElfUFJPVE9fVU5TUEVDLCBBVkFISV9QVUJMSVNIX05PX1BST0JFfEFWQUhJX1BVQkxJU0hfTk9fQU5OT1VOQ0UsICJpcDYtbG9jYWxob3N0IiwgJmEpOworfQorCitzdGF0aWMgdm9pZCByZWdpc3Rlcl9icm93c2VfZG9tYWluKEF2YWhpU2VydmVyICpzKSB7CisgICAgYXNzZXJ0KHMpOworCisgICAgaWYgKCFzLT5jb25maWcucHVibGlzaF9kb21haW4pCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChhdmFoaV9kb21haW5fZXF1YWwocy0+ZG9tYWluX25hbWUsICJsb2NhbCIpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAocy0+YnJvd3NlX2RvbWFpbl9lbnRyeV9ncm91cCkKKyAgICAgICAgYXNzZXJ0KGF2YWhpX3NfZW50cnlfZ3JvdXBfaXNfZW1wdHkocy0+YnJvd3NlX2RvbWFpbl9lbnRyeV9ncm91cCkpOworICAgIGVsc2UKKyAgICAgICAgcy0+YnJvd3NlX2RvbWFpbl9lbnRyeV9ncm91cCA9IGF2YWhpX3NfZW50cnlfZ3JvdXBfbmV3KHMsIE5VTEwsIE5VTEwpOworCisgICAgaWYgKCFzLT5icm93c2VfZG9tYWluX2VudHJ5X2dyb3VwKSB7CisgICAgICAgIGF2YWhpX2xvZ193YXJuKCJGYWlsZWQgdG8gY3JlYXRlIGJyb3dzZSBkb21haW4gZW50cnkgZ3JvdXA6ICVzIiwgYXZhaGlfc3RyZXJyb3Iocy0+ZXJyb3IpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhdmFoaV9zZXJ2ZXJfYWRkX3B0cihzLCBzLT5icm93c2VfZG9tYWluX2VudHJ5X2dyb3VwLCBBVkFISV9JRl9VTlNQRUMsIEFWQUhJX1BST1RPX1VOU1BFQywgMCwgQVZBSElfREVGQVVMVF9UVEwsICJiLl9kbnMtc2QuX3VkcC5sb2NhbCIsIHMtPmRvbWFpbl9uYW1lKSA8IDApIHsKKyAgICAgICAgYXZhaGlfbG9nX3dhcm4oIkZhaWxlZCB0byBhZGQgYnJvd3NlIGRvbWFpbiBSUjogJXMiLCBhdmFoaV9zdHJlcnJvcihzLT5lcnJvcikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGF2YWhpX3NfZW50cnlfZ3JvdXBfY29tbWl0KHMtPmJyb3dzZV9kb21haW5fZW50cnlfZ3JvdXApIDwgMCkKKyAgICAgICAgYXZhaGlfbG9nX3dhcm4oIkZhaWxlZCB0byBjb21taXQgYnJvd3NlIGRvbWFpbiBlbnRyeSBncm91cDogJXMiLCBhdmFoaV9zdHJlcnJvcihzLT5lcnJvcikpOworfQorCitzdGF0aWMgdm9pZCByZWdpc3Rlcl9zdHVmZihBdmFoaVNlcnZlciAqcykgeworICAgIGFzc2VydChzKTsKKworICAgIHNlcnZlcl9zZXRfc3RhdGUocywgQVZBSElfU0VSVkVSX1JFR0lTVEVSSU5HKTsKKyAgICBzLT5uX2hvc3RfcnJfcGVuZGluZyArKzsgLyoqIE1ha2Ugc3VyZSB0aGF0IHRoZSBzdGF0ZSBpc24ndCBjaGFuZ2VkIHRwIEFWQUhJX1NFUlZFUl9SVU5OSU5HIHRvbyBlYXJseSAqLworCisgICAgcmVnaXN0ZXJfaGluZm8ocyk7CisgICAgcmVnaXN0ZXJfYnJvd3NlX2RvbWFpbihzKTsKKyAgICBhdmFoaV9pbnRlcmZhY2VfbW9uaXRvcl91cGRhdGVfcnJzKHMtPm1vbml0b3IsIDApOworCisgICAgYXNzZXJ0KHMtPm5faG9zdF9ycl9wZW5kaW5nID4gMCk7CisgICAgcy0+bl9ob3N0X3JyX3BlbmRpbmcgLS07CisKKyAgICBpZiAocy0+bl9ob3N0X3JyX3BlbmRpbmcgPT0gMCkKKyAgICAgICAgc2VydmVyX3NldF9zdGF0ZShzLCBBVkFISV9TRVJWRVJfUlVOTklORyk7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9mcWRuKEF2YWhpU2VydmVyICpzKSB7CisgICAgY2hhciAqbjsKKworICAgIGFzc2VydChzKTsKKyAgICBhc3NlcnQocy0+aG9zdF9uYW1lKTsKKyAgICBhc3NlcnQocy0+ZG9tYWluX25hbWUpOworCisgICAgaWYgKCEobiA9IGF2YWhpX3N0cmR1cF9wcmludGYoIiVzLiVzIiwgcy0+aG9zdF9uYW1lLCBzLT5kb21haW5fbmFtZSkpKQorICAgICAgICByZXR1cm47IC8qIE9PTSAqLworCisgICAgYXZhaGlfZnJlZShzLT5ob3N0X25hbWVfZnFkbik7CisgICAgcy0+aG9zdF9uYW1lX2ZxZG4gPSBuOworfQorCitpbnQgYXZhaGlfc2VydmVyX3NldF9ob3N0X25hbWUoQXZhaGlTZXJ2ZXIgKnMsIGNvbnN0IGNoYXIgKmhvc3RfbmFtZSkgeworICAgIGNoYXIgKmhuID0gTlVMTDsKKyAgICBhc3NlcnQocyk7CisKKyAgICBBVkFISV9DSEVDS19WQUxJRElUWShzLCAhaG9zdF9uYW1lIHx8IGF2YWhpX2lzX3ZhbGlkX2hvc3RfbmFtZShob3N0X25hbWUpLCBBVkFISV9FUlJfSU5WQUxJRF9IT1NUX05BTUUpOworCisgICAgaWYgKCFob3N0X25hbWUpCisgICAgICAgIGhuID0gYXZhaGlfZ2V0X2hvc3RfbmFtZV9zdHJkdXAoKTsKKyAgICBlbHNlCisgICAgICAgIGhuID0gYXZhaGlfbm9ybWFsaXplX25hbWVfc3RyZHVwKGhvc3RfbmFtZSk7CisKKyAgICBobltzdHJjc3BuKGhuLCAiLiIpXSA9IDA7CisKKyAgICBpZiAoYXZhaGlfZG9tYWluX2VxdWFsKHMtPmhvc3RfbmFtZSwgaG4pICYmIHMtPnN0YXRlICE9IEFWQUhJX1NFUlZFUl9DT0xMSVNJT04pIHsKKyAgICAgICAgYXZhaGlfZnJlZShobik7CisgICAgICAgIHJldHVybiBhdmFoaV9zZXJ2ZXJfc2V0X2Vycm5vKHMsIEFWQUhJX0VSUl9OT19DSEFOR0UpOworICAgIH0KKworICAgIHdpdGhkcmF3X2hvc3RfcnJzKHMpOworCisgICAgYXZhaGlfZnJlZShzLT5ob3N0X25hbWUpOworICAgIHMtPmhvc3RfbmFtZSA9IGhuOworCisgICAgdXBkYXRlX2ZxZG4ocyk7CisKKyAgICByZWdpc3Rlcl9zdHVmZihzKTsKKyAgICByZXR1cm4gQVZBSElfT0s7Cit9CisKK2ludCBhdmFoaV9zZXJ2ZXJfc2V0X2RvbWFpbl9uYW1lKEF2YWhpU2VydmVyICpzLCBjb25zdCBjaGFyICpkb21haW5fbmFtZSkgeworICAgIGNoYXIgKmRuID0gTlVMTDsKKyAgICBhc3NlcnQocyk7CisKKyAgICBBVkFISV9DSEVDS19WQUxJRElUWShzLCAhZG9tYWluX25hbWUgfHwgYXZhaGlfaXNfdmFsaWRfZG9tYWluX25hbWUoZG9tYWluX25hbWUpLCBBVkFISV9FUlJfSU5WQUxJRF9ET01BSU5fTkFNRSk7CisKKyAgICBpZiAoIWRvbWFpbl9uYW1lKQorICAgICAgICBkbiA9IGF2YWhpX3N0cmR1cCgibG9jYWwiKTsKKyAgICBlbHNlCisgICAgICAgIGRuID0gYXZhaGlfbm9ybWFsaXplX25hbWVfc3RyZHVwKGRvbWFpbl9uYW1lKTsKKworICAgIGlmIChhdmFoaV9kb21haW5fZXF1YWwocy0+ZG9tYWluX25hbWUsIGRvbWFpbl9uYW1lKSkgeworICAgICAgICBhdmFoaV9mcmVlKGRuKTsKKyAgICAgICAgcmV0dXJuIGF2YWhpX3NlcnZlcl9zZXRfZXJybm8ocywgQVZBSElfRVJSX05PX0NIQU5HRSk7CisgICAgfQorCisgICAgd2l0aGRyYXdfaG9zdF9ycnMocyk7CisKKyAgICBhdmFoaV9mcmVlKHMtPmRvbWFpbl9uYW1lKTsKKyAgICBzLT5kb21haW5fbmFtZSA9IGRuOworICAgIHVwZGF0ZV9mcWRuKHMpOworCisgICAgcmVnaXN0ZXJfc3R1ZmYocyk7CisKKyAgICBhdmFoaV9mcmVlKGRuKTsKKyAgICByZXR1cm4gQVZBSElfT0s7Cit9CisKK3N0YXRpYyBpbnQgdmFsaWRfc2VydmVyX2NvbmZpZyhjb25zdCBBdmFoaVNlcnZlckNvbmZpZyAqc2MpIHsKKyAgICBBdmFoaVN0cmluZ0xpc3QgKmw7CisKKyAgICBhc3NlcnQoc2MpOworCisgICAgaWYgKHNjLT5uX3dpZGVfYXJlYV9zZXJ2ZXJzID4gQVZBSElfV0lERV9BUkVBX1NFUlZFUlNfTUFYKQorICAgICAgICByZXR1cm4gQVZBSElfRVJSX0lOVkFMSURfQ09ORklHOworCisgICAgaWYgKHNjLT5ob3N0X25hbWUgJiYgIWF2YWhpX2lzX3ZhbGlkX2hvc3RfbmFtZShzYy0+aG9zdF9uYW1lKSkKKyAgICAgICAgcmV0dXJuIEFWQUhJX0VSUl9JTlZBTElEX0hPU1RfTkFNRTsKKworICAgIGlmIChzYy0+ZG9tYWluX25hbWUgJiYgIWF2YWhpX2lzX3ZhbGlkX2RvbWFpbl9uYW1lKHNjLT5kb21haW5fbmFtZSkpCisgICAgICAgIHJldHVybiBBVkFISV9FUlJfSU5WQUxJRF9ET01BSU5fTkFNRTsKKworICAgIGZvciAobCA9IHNjLT5icm93c2VfZG9tYWluczsgbDsgbCA9IGwtPm5leHQpCisgICAgICAgIGlmICghYXZhaGlfaXNfdmFsaWRfZG9tYWluX25hbWUoKGNoYXIqKSBsLT50ZXh0KSkKKyAgICAgICAgICAgIHJldHVybiBBVkFISV9FUlJfSU5WQUxJRF9ET01BSU5fTkFNRTsKKworICAgIHJldHVybiBBVkFISV9PSzsKK30KKworc3RhdGljIGludCBzZXR1cF9zb2NrZXRzKEF2YWhpU2VydmVyICpzKSB7CisgICAgYXNzZXJ0KHMpOworCisgICAgcy0+ZmRfaXB2NCA9IHMtPmNvbmZpZy51c2VfaXB2NCA/IGF2YWhpX29wZW5fc29ja2V0X2lwdjQocy0+Y29uZmlnLmRpc2FsbG93X290aGVyX3N0YWNrcykgOiAtMTsKKyAgICBzLT5mZF9pcHY2ID0gcy0+Y29uZmlnLnVzZV9pcHY2ID8gYXZhaGlfb3Blbl9zb2NrZXRfaXB2NihzLT5jb25maWcuZGlzYWxsb3dfb3RoZXJfc3RhY2tzKSA6IC0xOworCisgICAgaWYgKHMtPmZkX2lwdjYgPCAwICYmIHMtPmZkX2lwdjQgPCAwKQorICAgICAgICByZXR1cm4gQVZBSElfRVJSX05PX05FVFdPUks7CisKKyAgICBpZiAocy0+ZmRfaXB2NCA8IDAgJiYgcy0+Y29uZmlnLnVzZV9pcHY0KQorICAgICAgICBhdmFoaV9sb2dfbm90aWNlKCJGYWlsZWQgdG8gY3JlYXRlIElQdjQgc29ja2V0LCBwcm9jZWVkaW5nIGluIElQdjYgb25seSBtb2RlIik7CisgICAgZWxzZSBpZiAocy0+ZmRfaXB2NiA8IDAgJiYgcy0+Y29uZmlnLnVzZV9pcHY2KQorICAgICAgICBhdmFoaV9sb2dfbm90aWNlKCJGYWlsZWQgdG8gY3JlYXRlIElQdjYgc29ja2V0LCBwcm9jZWVkaW5nIGluIElQdjQgb25seSBtb2RlIik7CisKKyAgICBzLT5mZF9sZWdhY3lfdW5pY2FzdF9pcHY0ID0gcy0+ZmRfaXB2NCA+PSAwICYmIHMtPmNvbmZpZy5lbmFibGVfcmVmbGVjdG9yID8gYXZhaGlfb3Blbl91bmljYXN0X3NvY2tldF9pcHY0KCkgOiAtMTsKKyAgICBzLT5mZF9sZWdhY3lfdW5pY2FzdF9pcHY2ID0gcy0+ZmRfaXB2NiA+PSAwICYmIHMtPmNvbmZpZy5lbmFibGVfcmVmbGVjdG9yID8gYXZhaGlfb3Blbl91bmljYXN0X3NvY2tldF9pcHY2KCkgOiAtMTsKKworICAgIHMtPndhdGNoX2lwdjQgPQorICAgICAgICBzLT53YXRjaF9pcHY2ID0KKyAgICAgICAgcy0+d2F0Y2hfbGVnYWN5X3VuaWNhc3RfaXB2NCA9CisgICAgICAgIHMtPndhdGNoX2xlZ2FjeV91bmljYXN0X2lwdjYgPSBOVUxMOworCisgICAgaWYgKHMtPmZkX2lwdjQgPj0gMCkKKyAgICAgICAgcy0+d2F0Y2hfaXB2NCA9IHMtPnBvbGxfYXBpLT53YXRjaF9uZXcocy0+cG9sbF9hcGksIHMtPmZkX2lwdjQsIEFWQUhJX1dBVENIX0lOLCBtY2FzdF9zb2NrZXRfZXZlbnQsIHMpOworICAgIGlmIChzLT5mZF9pcHY2ID49IDApCisgICAgICAgIHMtPndhdGNoX2lwdjYgPSBzLT5wb2xsX2FwaS0+d2F0Y2hfbmV3KHMtPnBvbGxfYXBpLCBzLT5mZF9pcHY2LCBBVkFISV9XQVRDSF9JTiwgbWNhc3Rfc29ja2V0X2V2ZW50LCBzKTsKKworICAgIGlmIChzLT5mZF9sZWdhY3lfdW5pY2FzdF9pcHY0ID49IDApCisgICAgICAgIHMtPndhdGNoX2xlZ2FjeV91bmljYXN0X2lwdjQgPSBzLT5wb2xsX2FwaS0+d2F0Y2hfbmV3KHMtPnBvbGxfYXBpLCBzLT5mZF9sZWdhY3lfdW5pY2FzdF9pcHY0LCBBVkFISV9XQVRDSF9JTiwgbGVnYWN5X3VuaWNhc3Rfc29ja2V0X2V2ZW50LCBzKTsKKyAgICBpZiAocy0+ZmRfbGVnYWN5X3VuaWNhc3RfaXB2NiA+PSAwKQorICAgICAgICBzLT53YXRjaF9sZWdhY3lfdW5pY2FzdF9pcHY2ID0gcy0+cG9sbF9hcGktPndhdGNoX25ldyhzLT5wb2xsX2FwaSwgcy0+ZmRfbGVnYWN5X3VuaWNhc3RfaXB2NiwgQVZBSElfV0FUQ0hfSU4sIGxlZ2FjeV91bmljYXN0X3NvY2tldF9ldmVudCwgcyk7CisKKyAgICByZXR1cm4gMDsKK30KKworQXZhaGlTZXJ2ZXIgKmF2YWhpX3NlcnZlcl9uZXcoY29uc3QgQXZhaGlQb2xsICpwb2xsX2FwaSwgY29uc3QgQXZhaGlTZXJ2ZXJDb25maWcgKnNjLCBBdmFoaVNlcnZlckNhbGxiYWNrIGNhbGxiYWNrLCB2b2lkKiB1c2VyZGF0YSwgaW50ICplcnJvcikgeworICAgIEF2YWhpU2VydmVyICpzOworICAgIGludCBlOworCisgICAgaWYgKHNjICYmIChlID0gdmFsaWRfc2VydmVyX2NvbmZpZyhzYykpIDwgMCkgeworICAgICAgICBpZiAoZXJyb3IpCisgICAgICAgICAgICAqZXJyb3IgPSBlOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoIShzID0gYXZhaGlfbmV3KEF2YWhpU2VydmVyLCAxKSkpIHsKKyAgICAgICAgaWYgKGVycm9yKQorICAgICAgICAgICAgKmVycm9yID0gQVZBSElfRVJSX05PX01FTU9SWTsKKworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBzLT5wb2xsX2FwaSA9IHBvbGxfYXBpOworCisgICAgaWYgKHNjKQorICAgICAgICBhdmFoaV9zZXJ2ZXJfY29uZmlnX2NvcHkoJnMtPmNvbmZpZywgc2MpOworICAgIGVsc2UKKyAgICAgICAgYXZhaGlfc2VydmVyX2NvbmZpZ19pbml0KCZzLT5jb25maWcpOworCisgICAgaWYgKChlID0gc2V0dXBfc29ja2V0cyhzKSkgPCAwKSB7CisgICAgICAgIGlmIChlcnJvcikKKyAgICAgICAgICAgICplcnJvciA9IGU7CisKKyAgICAgICAgYXZhaGlfc2VydmVyX2NvbmZpZ19mcmVlKCZzLT5jb25maWcpOworICAgICAgICBhdmFoaV9mcmVlKHMpOworCisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHMtPm5faG9zdF9ycl9wZW5kaW5nID0gMDsKKyAgICBzLT5uZWVkX2VudHJ5X2NsZWFudXAgPSAwOworICAgIHMtPm5lZWRfZ3JvdXBfY2xlYW51cCA9IDA7CisgICAgcy0+bmVlZF9icm93c2VyX2NsZWFudXAgPSAwOworICAgIHMtPmNsZWFudXBfdGltZV9ldmVudCA9IE5VTEw7CisgICAgcy0+aGluZm9fZW50cnlfZ3JvdXAgPSBOVUxMOworICAgIHMtPmJyb3dzZV9kb21haW5fZW50cnlfZ3JvdXAgPSBOVUxMOworICAgIHMtPmVycm9yID0gQVZBSElfT0s7CisgICAgcy0+c3RhdGUgPSBBVkFISV9TRVJWRVJfSU5WQUxJRDsKKworICAgIHMtPmNhbGxiYWNrID0gY2FsbGJhY2s7CisgICAgcy0+dXNlcmRhdGEgPSB1c2VyZGF0YTsKKworICAgIHMtPnRpbWVfZXZlbnRfcXVldWUgPSBhdmFoaV90aW1lX2V2ZW50X3F1ZXVlX25ldyhwb2xsX2FwaSk7CisKKyAgICBzLT5lbnRyaWVzX2J5X2tleSA9IGF2YWhpX2hhc2htYXBfbmV3KChBdmFoaUhhc2hGdW5jKSBhdmFoaV9rZXlfaGFzaCwgKEF2YWhpRXF1YWxGdW5jKSBhdmFoaV9rZXlfZXF1YWwsIE5VTEwsIE5VTEwpOworICAgIEFWQUhJX0xMSVNUX0hFQURfSU5JVChBdmFoaUVudHJ5LCBzLT5lbnRyaWVzKTsKKyAgICBBVkFISV9MTElTVF9IRUFEX0lOSVQoQXZhaGlHcm91cCwgcy0+Z3JvdXBzKTsKKworICAgIHMtPnJlY29yZF9icm93c2VyX2hhc2htYXAgPSBhdmFoaV9oYXNobWFwX25ldygoQXZhaGlIYXNoRnVuYykgYXZhaGlfa2V5X2hhc2gsIChBdmFoaUVxdWFsRnVuYykgYXZhaGlfa2V5X2VxdWFsLCBOVUxMLCBOVUxMKTsKKyAgICBBVkFISV9MTElTVF9IRUFEX0lOSVQoQXZhaGlTUmVjb3JkQnJvd3Nlciwgcy0+cmVjb3JkX2Jyb3dzZXJzKTsKKyAgICBBVkFISV9MTElTVF9IRUFEX0lOSVQoQXZhaGlTSG9zdE5hbWVSZXNvbHZlciwgcy0+aG9zdF9uYW1lX3Jlc29sdmVycyk7CisgICAgQVZBSElfTExJU1RfSEVBRF9JTklUKEF2YWhpU0FkZHJlc3NSZXNvbHZlciwgcy0+YWRkcmVzc19yZXNvbHZlcnMpOworICAgIEFWQUhJX0xMSVNUX0hFQURfSU5JVChBdmFoaVNEb21haW5Ccm93c2VyLCBzLT5kb21haW5fYnJvd3NlcnMpOworICAgIEFWQUhJX0xMSVNUX0hFQURfSU5JVChBdmFoaVNTZXJ2aWNlVHlwZUJyb3dzZXIsIHMtPnNlcnZpY2VfdHlwZV9icm93c2Vycyk7CisgICAgQVZBSElfTExJU1RfSEVBRF9JTklUKEF2YWhpU1NlcnZpY2VCcm93c2VyLCBzLT5zZXJ2aWNlX2Jyb3dzZXJzKTsKKyAgICBBVkFISV9MTElTVF9IRUFEX0lOSVQoQXZhaGlTU2VydmljZVJlc29sdmVyLCBzLT5zZXJ2aWNlX3Jlc29sdmVycyk7CisgICAgQVZBSElfTExJU1RfSEVBRF9JTklUKEF2YWhpU0ROU1NlcnZlckJyb3dzZXIsIHMtPmRuc19zZXJ2ZXJfYnJvd3NlcnMpOworCisgICAgcy0+bGVnYWN5X3VuaWNhc3RfcmVmbGVjdF9zbG90cyA9IE5VTEw7CisgICAgcy0+bGVnYWN5X3VuaWNhc3RfcmVmbGVjdF9pZCA9IDA7CisKKyAgICBzLT5yZWNvcmRfbGlzdCA9IGF2YWhpX3JlY29yZF9saXN0X25ldygpOworCisgICAgLyogR2V0IGhvc3QgbmFtZSAqLworICAgIHMtPmhvc3RfbmFtZSA9IHMtPmNvbmZpZy5ob3N0X25hbWUgPyBhdmFoaV9ub3JtYWxpemVfbmFtZV9zdHJkdXAocy0+Y29uZmlnLmhvc3RfbmFtZSkgOiBhdmFoaV9nZXRfaG9zdF9uYW1lX3N0cmR1cCgpOworICAgIHMtPmhvc3RfbmFtZVtzdHJjc3BuKHMtPmhvc3RfbmFtZSwgIi4iKV0gPSAwOworICAgIHMtPmRvbWFpbl9uYW1lID0gcy0+Y29uZmlnLmRvbWFpbl9uYW1lID8gYXZhaGlfbm9ybWFsaXplX25hbWVfc3RyZHVwKHMtPmNvbmZpZy5kb21haW5fbmFtZSkgOiBhdmFoaV9zdHJkdXAoImxvY2FsIik7CisgICAgcy0+aG9zdF9uYW1lX2ZxZG4gPSBOVUxMOworICAgIHVwZGF0ZV9mcWRuKHMpOworCisgICAgZG8geworICAgICAgICBzLT5sb2NhbF9zZXJ2aWNlX2Nvb2tpZSA9ICh1aW50MzJfdCkgcmFuZCgpICogKHVpbnQzMl90KSByYW5kKCk7CisgICAgfSB3aGlsZSAocy0+bG9jYWxfc2VydmljZV9jb29raWUgPT0gQVZBSElfU0VSVklDRV9DT09LSUVfSU5WQUxJRCk7CisKKyAgICBpZiAocy0+Y29uZmlnLmVuYWJsZV93aWRlX2FyZWEpIHsKKyAgICAgICAgcy0+d2lkZV9hcmVhX2xvb2t1cF9lbmdpbmUgPSBhdmFoaV93aWRlX2FyZWFfZW5naW5lX25ldyhzKTsKKyAgICAgICAgYXZhaGlfd2lkZV9hcmVhX3NldF9zZXJ2ZXJzKHMtPndpZGVfYXJlYV9sb29rdXBfZW5naW5lLCBzLT5jb25maWcud2lkZV9hcmVhX3NlcnZlcnMsIHMtPmNvbmZpZy5uX3dpZGVfYXJlYV9zZXJ2ZXJzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcy0+d2lkZV9hcmVhX2xvb2t1cF9lbmdpbmUgPSBOVUxMOworCisgICAgcy0+bXVsdGljYXN0X2xvb2t1cF9lbmdpbmUgPSBhdmFoaV9tdWx0aWNhc3RfbG9va3VwX2VuZ2luZV9uZXcocyk7CisKKyAgICBzLT5tb25pdG9yID0gYXZhaGlfaW50ZXJmYWNlX21vbml0b3JfbmV3KHMpOworICAgIGF2YWhpX2ludGVyZmFjZV9tb25pdG9yX3N5bmMocy0+bW9uaXRvcik7CisKKyAgICByZWdpc3Rlcl9sb2NhbGhvc3Qocyk7CisgICAgcmVnaXN0ZXJfc3R1ZmYocyk7CisKKyAgICByZXR1cm4gczsKK30KKwordm9pZCBhdmFoaV9zZXJ2ZXJfZnJlZShBdmFoaVNlcnZlciogcykgeworICAgIGFzc2VydChzKTsKKworICAgIC8qIFJlbW92ZSBhbGwgYnJvd3NlcnMgKi8KKworICAgIHdoaWxlIChzLT5kbnNfc2VydmVyX2Jyb3dzZXJzKQorICAgICAgICBhdmFoaV9zX2Ruc19zZXJ2ZXJfYnJvd3Nlcl9mcmVlKHMtPmRuc19zZXJ2ZXJfYnJvd3NlcnMpOworICAgIHdoaWxlIChzLT5ob3N0X25hbWVfcmVzb2x2ZXJzKQorICAgICAgICBhdmFoaV9zX2hvc3RfbmFtZV9yZXNvbHZlcl9mcmVlKHMtPmhvc3RfbmFtZV9yZXNvbHZlcnMpOworICAgIHdoaWxlIChzLT5hZGRyZXNzX3Jlc29sdmVycykKKyAgICAgICAgYXZhaGlfc19hZGRyZXNzX3Jlc29sdmVyX2ZyZWUocy0+YWRkcmVzc19yZXNvbHZlcnMpOworICAgIHdoaWxlIChzLT5kb21haW5fYnJvd3NlcnMpCisgICAgICAgIGF2YWhpX3NfZG9tYWluX2Jyb3dzZXJfZnJlZShzLT5kb21haW5fYnJvd3NlcnMpOworICAgIHdoaWxlIChzLT5zZXJ2aWNlX3R5cGVfYnJvd3NlcnMpCisgICAgICAgIGF2YWhpX3Nfc2VydmljZV90eXBlX2Jyb3dzZXJfZnJlZShzLT5zZXJ2aWNlX3R5cGVfYnJvd3NlcnMpOworICAgIHdoaWxlIChzLT5zZXJ2aWNlX2Jyb3dzZXJzKQorICAgICAgICBhdmFoaV9zX3NlcnZpY2VfYnJvd3Nlcl9mcmVlKHMtPnNlcnZpY2VfYnJvd3NlcnMpOworICAgIHdoaWxlIChzLT5zZXJ2aWNlX3Jlc29sdmVycykKKyAgICAgICAgYXZhaGlfc19zZXJ2aWNlX3Jlc29sdmVyX2ZyZWUocy0+c2VydmljZV9yZXNvbHZlcnMpOworICAgIHdoaWxlIChzLT5yZWNvcmRfYnJvd3NlcnMpCisgICAgICAgIGF2YWhpX3NfcmVjb3JkX2Jyb3dzZXJfZGVzdHJveShzLT5yZWNvcmRfYnJvd3NlcnMpOworCisgICAgLyogUmVtb3ZlIGFsbCBsb2NhbGx5IHJnZWlzdGVyZWQgc3R1ZmYgKi8KKworICAgIHdoaWxlKHMtPmVudHJpZXMpCisgICAgICAgIGF2YWhpX2VudHJ5X2ZyZWUocywgcy0+ZW50cmllcyk7CisKKyAgICBhdmFoaV9pbnRlcmZhY2VfbW9uaXRvcl9mcmVlKHMtPm1vbml0b3IpOworCisgICAgd2hpbGUgKHMtPmdyb3VwcykKKyAgICAgICAgYXZhaGlfZW50cnlfZ3JvdXBfZnJlZShzLCBzLT5ncm91cHMpOworCisgICAgZnJlZV9zbG90cyhzKTsKKworICAgIGF2YWhpX2hhc2htYXBfZnJlZShzLT5lbnRyaWVzX2J5X2tleSk7CisgICAgYXZhaGlfcmVjb3JkX2xpc3RfZnJlZShzLT5yZWNvcmRfbGlzdCk7CisgICAgYXZhaGlfaGFzaG1hcF9mcmVlKHMtPnJlY29yZF9icm93c2VyX2hhc2htYXApOworCisgICAgaWYgKHMtPndpZGVfYXJlYV9sb29rdXBfZW5naW5lKQorICAgICAgICBhdmFoaV93aWRlX2FyZWFfZW5naW5lX2ZyZWUocy0+d2lkZV9hcmVhX2xvb2t1cF9lbmdpbmUpOworICAgIGF2YWhpX211bHRpY2FzdF9sb29rdXBfZW5naW5lX2ZyZWUocy0+bXVsdGljYXN0X2xvb2t1cF9lbmdpbmUpOworCisgICAgaWYgKHMtPmNsZWFudXBfdGltZV9ldmVudCkKKyAgICAgICAgYXZhaGlfdGltZV9ldmVudF9mcmVlKHMtPmNsZWFudXBfdGltZV9ldmVudCk7CisKKyAgICBhdmFoaV90aW1lX2V2ZW50X3F1ZXVlX2ZyZWUocy0+dGltZV9ldmVudF9xdWV1ZSk7CisKKyAgICAvKiBGcmVlIHdhdGNoZXMgKi8KKworICAgIGlmIChzLT53YXRjaF9pcHY0KQorICAgICAgICBzLT5wb2xsX2FwaS0+d2F0Y2hfZnJlZShzLT53YXRjaF9pcHY0KTsKKyAgICBpZiAocy0+d2F0Y2hfaXB2NikKKyAgICAgICAgcy0+cG9sbF9hcGktPndhdGNoX2ZyZWUocy0+d2F0Y2hfaXB2Nik7CisKKyAgICBpZiAocy0+d2F0Y2hfbGVnYWN5X3VuaWNhc3RfaXB2NCkKKyAgICAgICAgcy0+cG9sbF9hcGktPndhdGNoX2ZyZWUocy0+d2F0Y2hfbGVnYWN5X3VuaWNhc3RfaXB2NCk7CisgICAgaWYgKHMtPndhdGNoX2xlZ2FjeV91bmljYXN0X2lwdjYpCisgICAgICAgIHMtPnBvbGxfYXBpLT53YXRjaF9mcmVlKHMtPndhdGNoX2xlZ2FjeV91bmljYXN0X2lwdjYpOworCisgICAgLyogRnJlZSBzb2NrZXRzICovCisKKyAgICBpZiAocy0+ZmRfaXB2NCA+PSAwKQorICAgICAgICBjbG9zZShzLT5mZF9pcHY0KTsKKyAgICBpZiAocy0+ZmRfaXB2NiA+PSAwKQorICAgICAgICBjbG9zZShzLT5mZF9pcHY2KTsKKworICAgIGlmIChzLT5mZF9sZWdhY3lfdW5pY2FzdF9pcHY0ID49IDApCisgICAgICAgIGNsb3NlKHMtPmZkX2xlZ2FjeV91bmljYXN0X2lwdjQpOworICAgIGlmIChzLT5mZF9sZWdhY3lfdW5pY2FzdF9pcHY2ID49IDApCisgICAgICAgIGNsb3NlKHMtPmZkX2xlZ2FjeV91bmljYXN0X2lwdjYpOworCisgICAgLyogRnJlZSBvdGhlciBzdHVmZiAqLworCisgICAgYXZhaGlfZnJlZShzLT5ob3N0X25hbWUpOworICAgIGF2YWhpX2ZyZWUocy0+ZG9tYWluX25hbWUpOworICAgIGF2YWhpX2ZyZWUocy0+aG9zdF9uYW1lX2ZxZG4pOworCisgICAgYXZhaGlfc2VydmVyX2NvbmZpZ19mcmVlKCZzLT5jb25maWcpOworCisgICAgYXZhaGlfZnJlZShzKTsKK30KKworY29uc3QgY2hhciogYXZhaGlfc2VydmVyX2dldF9kb21haW5fbmFtZShBdmFoaVNlcnZlciAqcykgeworICAgIGFzc2VydChzKTsKKworICAgIHJldHVybiBzLT5kb21haW5fbmFtZTsKK30KKworY29uc3QgY2hhciogYXZhaGlfc2VydmVyX2dldF9ob3N0X25hbWUoQXZhaGlTZXJ2ZXIgKnMpIHsKKyAgICBhc3NlcnQocyk7CisKKyAgICByZXR1cm4gcy0+aG9zdF9uYW1lOworfQorCitjb25zdCBjaGFyKiBhdmFoaV9zZXJ2ZXJfZ2V0X2hvc3RfbmFtZV9mcWRuKEF2YWhpU2VydmVyICpzKSB7CisgICAgYXNzZXJ0KHMpOworCisgICAgcmV0dXJuIHMtPmhvc3RfbmFtZV9mcWRuOworfQorCit2b2lkKiBhdmFoaV9zZXJ2ZXJfZ2V0X2RhdGEoQXZhaGlTZXJ2ZXIgKnMpIHsKKyAgICBhc3NlcnQocyk7CisKKyAgICByZXR1cm4gcy0+dXNlcmRhdGE7Cit9CisKK3ZvaWQgYXZhaGlfc2VydmVyX3NldF9kYXRhKEF2YWhpU2VydmVyICpzLCB2b2lkKiB1c2VyZGF0YSkgeworICAgIGFzc2VydChzKTsKKworICAgIHMtPnVzZXJkYXRhID0gdXNlcmRhdGE7Cit9CisKK0F2YWhpU2VydmVyU3RhdGUgYXZhaGlfc2VydmVyX2dldF9zdGF0ZShBdmFoaVNlcnZlciAqcykgeworICAgIGFzc2VydChzKTsKKworICAgIHJldHVybiBzLT5zdGF0ZTsKK30KKworQXZhaGlTZXJ2ZXJDb25maWcqIGF2YWhpX3NlcnZlcl9jb25maWdfaW5pdChBdmFoaVNlcnZlckNvbmZpZyAqYykgeworICAgIGFzc2VydChjKTsKKworICAgIG1lbXNldChjLCAwLCBzaXplb2YoQXZhaGlTZXJ2ZXJDb25maWcpKTsKKyAgICBjLT51c2VfaXB2NiA9IDE7CisgICAgYy0+dXNlX2lwdjQgPSAxOworICAgIGMtPmFsbG93X2ludGVyZmFjZXMgPSBOVUxMOworICAgIGMtPmRlbnlfaW50ZXJmYWNlcyA9IE5VTEw7CisgICAgYy0+aG9zdF9uYW1lID0gTlVMTDsKKyAgICBjLT5kb21haW5fbmFtZSA9IE5VTEw7CisgICAgYy0+Y2hlY2tfcmVzcG9uc2VfdHRsID0gMDsKKyAgICBjLT5wdWJsaXNoX2hpbmZvID0gMTsKKyAgICBjLT5wdWJsaXNoX2FkZHJlc3NlcyA9IDE7CisgICAgYy0+cHVibGlzaF93b3Jrc3RhdGlvbiA9IDE7CisgICAgYy0+cHVibGlzaF9kb21haW4gPSAxOworICAgIGMtPnVzZV9pZmZfcnVubmluZyA9IDA7CisgICAgYy0+ZW5hYmxlX3JlZmxlY3RvciA9IDA7CisgICAgYy0+cmVmbGVjdF9pcHYgPSAwOworICAgIGMtPmFkZF9zZXJ2aWNlX2Nvb2tpZSA9IDA7CisgICAgYy0+ZW5hYmxlX3dpZGVfYXJlYSA9IDA7CisgICAgYy0+bl93aWRlX2FyZWFfc2VydmVycyA9IDA7CisgICAgYy0+ZGlzYWxsb3dfb3RoZXJfc3RhY2tzID0gMDsKKyAgICBjLT5icm93c2VfZG9tYWlucyA9IE5VTEw7CisgICAgYy0+ZGlzYWJsZV9wdWJsaXNoaW5nID0gMDsKKyAgICBjLT5hbGxvd19wb2ludF90b19wb2ludCA9IDA7CisgICAgYy0+cHVibGlzaF9hYWFhX29uX2lwdjQgPSAxOworICAgIGMtPnB1Ymxpc2hfYV9vbl9pcHY2ID0gMDsKKyAgICBjLT5uX2NhY2hlX2VudHJpZXNfbWF4ID0gQVZBSElfREVGQVVMVF9DQUNIRV9FTlRSSUVTX01BWDsKKyAgICBjLT5yYXRlbGltaXRfaW50ZXJ2YWwgPSAwOworICAgIGMtPnJhdGVsaW1pdF9idXJzdCA9IDA7CisKKyAgICByZXR1cm4gYzsKK30KKwordm9pZCBhdmFoaV9zZXJ2ZXJfY29uZmlnX2ZyZWUoQXZhaGlTZXJ2ZXJDb25maWcgKmMpIHsKKyAgICBhc3NlcnQoYyk7CisKKyAgICBhdmFoaV9mcmVlKGMtPmhvc3RfbmFtZSk7CisgICAgYXZhaGlfZnJlZShjLT5kb21haW5fbmFtZSk7CisgICAgYXZhaGlfc3RyaW5nX2xpc3RfZnJlZShjLT5icm93c2VfZG9tYWlucyk7CisgICAgYXZhaGlfc3RyaW5nX2xpc3RfZnJlZShjLT5hbGxvd19pbnRlcmZhY2VzKTsKKyAgICBhdmFoaV9zdHJpbmdfbGlzdF9mcmVlKGMtPmRlbnlfaW50ZXJmYWNlcyk7Cit9CisKK0F2YWhpU2VydmVyQ29uZmlnKiBhdmFoaV9zZXJ2ZXJfY29uZmlnX2NvcHkoQXZhaGlTZXJ2ZXJDb25maWcgKnJldCwgY29uc3QgQXZhaGlTZXJ2ZXJDb25maWcgKmMpIHsKKyAgICBjaGFyICpkID0gTlVMTCwgKmggPSBOVUxMOworICAgIEF2YWhpU3RyaW5nTGlzdCAqYnJvd3NlID0gTlVMTCwgKmFsbG93ID0gTlVMTCwgKmRlbnkgPSBOVUxMOworICAgIGFzc2VydChyZXQpOworICAgIGFzc2VydChjKTsKKworICAgIGlmIChjLT5ob3N0X25hbWUpCisgICAgICAgIGlmICghKGggPSBhdmFoaV9zdHJkdXAoYy0+aG9zdF9uYW1lKSkpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChjLT5kb21haW5fbmFtZSkKKyAgICAgICAgaWYgKCEoZCA9IGF2YWhpX3N0cmR1cChjLT5kb21haW5fbmFtZSkpKSB7CisgICAgICAgICAgICBhdmFoaV9mcmVlKGgpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKworICAgIGlmICghKGJyb3dzZSA9IGF2YWhpX3N0cmluZ19saXN0X2NvcHkoYy0+YnJvd3NlX2RvbWFpbnMpKSAmJiBjLT5icm93c2VfZG9tYWlucykgeworICAgICAgICBhdmFoaV9mcmVlKGgpOworICAgICAgICBhdmFoaV9mcmVlKGQpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoIShhbGxvdyA9IGF2YWhpX3N0cmluZ19saXN0X2NvcHkoYy0+YWxsb3dfaW50ZXJmYWNlcykpICYmIGMtPmFsbG93X2ludGVyZmFjZXMpIHsKKyAgICAgICAgYXZhaGlfc3RyaW5nX2xpc3RfZnJlZShicm93c2UpOworICAgICAgICBhdmFoaV9mcmVlKGgpOworICAgICAgICBhdmFoaV9mcmVlKGQpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoIShkZW55ID0gYXZhaGlfc3RyaW5nX2xpc3RfY29weShjLT5kZW55X2ludGVyZmFjZXMpKSAmJiBjLT5kZW55X2ludGVyZmFjZXMpIHsKKyAgICAgICAgYXZhaGlfc3RyaW5nX2xpc3RfZnJlZShhbGxvdyk7CisgICAgICAgIGF2YWhpX3N0cmluZ19saXN0X2ZyZWUoYnJvd3NlKTsKKyAgICAgICAgYXZhaGlfZnJlZShoKTsKKyAgICAgICAgYXZhaGlfZnJlZShkKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgKnJldCA9ICpjOworICAgIHJldC0+aG9zdF9uYW1lID0gaDsKKyAgICByZXQtPmRvbWFpbl9uYW1lID0gZDsKKyAgICByZXQtPmJyb3dzZV9kb21haW5zID0gYnJvd3NlOworICAgIHJldC0+YWxsb3dfaW50ZXJmYWNlcyA9IGFsbG93OworICAgIHJldC0+ZGVueV9pbnRlcmZhY2VzID0gZGVueTsKKworICAgIHJldHVybiByZXQ7Cit9CisKK2ludCBhdmFoaV9zZXJ2ZXJfZXJybm8oQXZhaGlTZXJ2ZXIgKnMpIHsKKyAgICBhc3NlcnQocyk7CisKKyAgICByZXR1cm4gcy0+ZXJyb3I7Cit9CisKKy8qIEp1c3QgZm9yIGludGVybmFsIHVzZSAqLworaW50IGF2YWhpX3NlcnZlcl9zZXRfZXJybm8oQXZhaGlTZXJ2ZXIgKnMsIGludCBlcnJvcikgeworICAgIGFzc2VydChzKTsKKworICAgIHJldHVybiBzLT5lcnJvciA9IGVycm9yOworfQorCit1aW50MzJfdCBhdmFoaV9zZXJ2ZXJfZ2V0X2xvY2FsX3NlcnZpY2VfY29va2llKEF2YWhpU2VydmVyICpzKSB7CisgICAgYXNzZXJ0KHMpOworCisgICAgcmV0dXJuIHMtPmxvY2FsX3NlcnZpY2VfY29va2llOworfQorCitzdGF0aWMgQXZhaGlFbnRyeSAqZmluZF9lbnRyeShBdmFoaVNlcnZlciAqcywgQXZhaGlJZkluZGV4IGludGVyZmFjZSwgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwgQXZhaGlLZXkgKmtleSkgeworICAgIEF2YWhpRW50cnkgKmU7CisKKyAgICBhc3NlcnQocyk7CisgICAgYXNzZXJ0KGtleSk7CisKKyAgICBmb3IgKGUgPSBhdmFoaV9oYXNobWFwX2xvb2t1cChzLT5lbnRyaWVzX2J5X2tleSwga2V5KTsgZTsgZSA9IGUtPmJ5X2tleV9uZXh0KQorCisgICAgICAgIGlmICgoZS0+aW50ZXJmYWNlID09IGludGVyZmFjZSB8fCBlLT5pbnRlcmZhY2UgPD0gMCB8fCBpbnRlcmZhY2UgPD0gMCkgJiYKKyAgICAgICAgICAgIChlLT5wcm90b2NvbCA9PSBwcm90b2NvbCB8fCBlLT5wcm90b2NvbCA9PSBBVkFISV9QUk9UT19VTlNQRUMgfHwgcHJvdG9jb2wgPT0gQVZBSElfUFJPVE9fVU5TUEVDKSAmJgorICAgICAgICAgICAgKCFlLT5ncm91cCB8fCBlLT5ncm91cC0+c3RhdGUgPT0gQVZBSElfRU5UUllfR1JPVVBfRVNUQUJMSVNIRUQgfHwgZS0+Z3JvdXAtPnN0YXRlID09IEFWQUhJX0VOVFJZX0dST1VQX1JFR0lTVEVSSU5HKSkKKworICAgICAgICAgICAgcmV0dXJuIGU7CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworaW50IGF2YWhpX3NlcnZlcl9nZXRfZ3JvdXBfb2Zfc2VydmljZShBdmFoaVNlcnZlciAqcywgQXZhaGlJZkluZGV4IGludGVyZmFjZSwgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdHlwZSwgY29uc3QgY2hhciAqZG9tYWluLCBBdmFoaVNFbnRyeUdyb3VwKiogcmV0X2dyb3VwKSB7CisgICAgQXZhaGlLZXkgKmtleSA9IE5VTEw7CisgICAgQXZhaGlFbnRyeSAqZTsKKyAgICBpbnQgcmV0OworICAgIGNoYXIgbltBVkFISV9ET01BSU5fTkFNRV9NQVhdOworCisgICAgYXNzZXJ0KHMpOworICAgIGFzc2VydChuYW1lKTsKKyAgICBhc3NlcnQodHlwZSk7CisgICAgYXNzZXJ0KHJldF9ncm91cCk7CisKKyAgICBBVkFISV9DSEVDS19WQUxJRElUWShzLCBBVkFISV9JRl9WQUxJRChpbnRlcmZhY2UpLCBBVkFISV9FUlJfSU5WQUxJRF9JTlRFUkZBQ0UpOworICAgIEFWQUhJX0NIRUNLX1ZBTElESVRZKHMsIEFWQUhJX1BST1RPX1ZBTElEKHByb3RvY29sKSwgQVZBSElfRVJSX0lOVkFMSURfUFJPVE9DT0wpOworICAgIEFWQUhJX0NIRUNLX1ZBTElESVRZKHMsIGF2YWhpX2lzX3ZhbGlkX3NlcnZpY2VfbmFtZShuYW1lKSwgQVZBSElfRVJSX0lOVkFMSURfU0VSVklDRV9OQU1FKTsKKyAgICBBVkFISV9DSEVDS19WQUxJRElUWShzLCBhdmFoaV9pc192YWxpZF9zZXJ2aWNlX3R5cGVfc3RyaWN0KHR5cGUpLCBBVkFISV9FUlJfSU5WQUxJRF9TRVJWSUNFX1RZUEUpOworICAgIEFWQUhJX0NIRUNLX1ZBTElESVRZKHMsICFkb21haW4gfHwgYXZhaGlfaXNfdmFsaWRfZG9tYWluX25hbWUoZG9tYWluKSwgQVZBSElfRVJSX0lOVkFMSURfRE9NQUlOX05BTUUpOworCisgICAgaWYgKChyZXQgPSBhdmFoaV9zZXJ2aWNlX25hbWVfam9pbihuLCBzaXplb2YobiksIG5hbWUsIHR5cGUsIGRvbWFpbikgPCAwKSkKKyAgICAgICAgcmV0dXJuIGF2YWhpX3NlcnZlcl9zZXRfZXJybm8ocywgcmV0KTsKKworICAgIGlmICghKGtleSA9IGF2YWhpX2tleV9uZXcobiwgQVZBSElfRE5TX0NMQVNTX0lOLCBBVkFISV9ETlNfVFlQRV9TUlYpKSkKKyAgICAgICAgcmV0dXJuIGF2YWhpX3NlcnZlcl9zZXRfZXJybm8ocywgQVZBSElfRVJSX05PX01FTU9SWSk7CisKKyAgICBlID0gZmluZF9lbnRyeShzLCBpbnRlcmZhY2UsIHByb3RvY29sLCBrZXkpOworICAgIGF2YWhpX2tleV91bnJlZihrZXkpOworCisgICAgaWYgKGUpIHsKKyAgICAgICAgKnJldF9ncm91cCA9IGUtPmdyb3VwOworICAgICAgICByZXR1cm4gQVZBSElfT0s7CisgICAgfQorCisgICAgcmV0dXJuIGF2YWhpX3NlcnZlcl9zZXRfZXJybm8ocywgQVZBSElfRVJSX05PVF9GT1VORCk7Cit9CisKK2ludCBhdmFoaV9zZXJ2ZXJfaXNfc2VydmljZV9sb2NhbChBdmFoaVNlcnZlciAqcywgQXZhaGlJZkluZGV4IGludGVyZmFjZSwgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwgY29uc3QgY2hhciAqbmFtZSkgeworICAgIEF2YWhpS2V5ICprZXkgPSBOVUxMOworICAgIEF2YWhpRW50cnkgKmU7CisKKyAgICBhc3NlcnQocyk7CisgICAgYXNzZXJ0KG5hbWUpOworCisgICAgaWYgKCFzLT5ob3N0X25hbWVfZnFkbikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIShrZXkgPSBhdmFoaV9rZXlfbmV3KG5hbWUsIEFWQUhJX0ROU19DTEFTU19JTiwgQVZBSElfRE5TX1RZUEVfU1JWKSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgZSA9IGZpbmRfZW50cnkocywgaW50ZXJmYWNlLCBwcm90b2NvbCwga2V5KTsKKyAgICBhdmFoaV9rZXlfdW5yZWYoa2V5KTsKKworICAgIGlmICghZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gYXZhaGlfZG9tYWluX2VxdWFsKHMtPmhvc3RfbmFtZV9mcWRuLCBlLT5yZWNvcmQtPmRhdGEuc3J2Lm5hbWUpOworfQorCitpbnQgYXZhaGlfc2VydmVyX2lzX3JlY29yZF9sb2NhbChBdmFoaVNlcnZlciAqcywgQXZhaGlJZkluZGV4IGludGVyZmFjZSwgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwgQXZhaGlSZWNvcmQgKnJlY29yZCkgeworICAgIEF2YWhpRW50cnkgKmU7CisKKyAgICBhc3NlcnQocyk7CisgICAgYXNzZXJ0KHJlY29yZCk7CisKKyAgICBmb3IgKGUgPSBhdmFoaV9oYXNobWFwX2xvb2t1cChzLT5lbnRyaWVzX2J5X2tleSwgcmVjb3JkLT5rZXkpOyBlOyBlID0gZS0+Ynlfa2V5X25leHQpCisKKyAgICAgICAgaWYgKChlLT5pbnRlcmZhY2UgPT0gaW50ZXJmYWNlIHx8IGUtPmludGVyZmFjZSA8PSAwIHx8IGludGVyZmFjZSA8PSAwKSAmJgorICAgICAgICAgICAgKGUtPnByb3RvY29sID09IHByb3RvY29sIHx8IGUtPnByb3RvY29sID09IEFWQUhJX1BST1RPX1VOU1BFQyB8fCBwcm90b2NvbCA9PSBBVkFISV9QUk9UT19VTlNQRUMpICYmCisgICAgICAgICAgICAoIWUtPmdyb3VwIHx8IGUtPmdyb3VwLT5zdGF0ZSA9PSBBVkFISV9FTlRSWV9HUk9VUF9FU1RBQkxJU0hFRCB8fCBlLT5ncm91cC0+c3RhdGUgPT0gQVZBSElfRU5UUllfR1JPVVBfUkVHSVNURVJJTkcpICYmCisgICAgICAgICAgICBhdmFoaV9yZWNvcmRfZXF1YWxfbm9fdHRsKHJlY29yZCwgZS0+cmVjb3JkKSkKKyAgICAgICAgICAgIHJldHVybiAxOworCisgICAgcmV0dXJuIDA7Cit9CisKKy8qKiBTZXQgdGhlIHdpZGUgYXJlYSBETlMgc2VydmVycyAqLworaW50IGF2YWhpX3NlcnZlcl9zZXRfd2lkZV9hcmVhX3NlcnZlcnMoQXZhaGlTZXJ2ZXIgKnMsIGNvbnN0IEF2YWhpQWRkcmVzcyAqYSwgdW5zaWduZWQgbikgeworICAgIGFzc2VydChzKTsKKworICAgIGlmICghcy0+d2lkZV9hcmVhX2xvb2t1cF9lbmdpbmUpCisgICAgICAgIHJldHVybiBhdmFoaV9zZXJ2ZXJfc2V0X2Vycm5vKHMsIEFWQUhJX0VSUl9JTlZBTElEX0NPTkZJRyk7CisKKyAgICBhdmFoaV93aWRlX2FyZWFfc2V0X3NlcnZlcnMocy0+d2lkZV9hcmVhX2xvb2t1cF9lbmdpbmUsIGEsIG4pOworICAgIHJldHVybiBBVkFISV9PSzsKK30KKworY29uc3QgQXZhaGlTZXJ2ZXJDb25maWcqIGF2YWhpX3NlcnZlcl9nZXRfY29uZmlnKEF2YWhpU2VydmVyICpzKSB7CisgICAgYXNzZXJ0KHMpOworCisgICAgcmV0dXJuICZzLT5jb25maWc7Cit9CisKKy8qKiBTZXQgdGhlIGJyb3dzaW5nIGRvbWFpbnMgKi8KK2ludCBhdmFoaV9zZXJ2ZXJfc2V0X2Jyb3dzZV9kb21haW5zKEF2YWhpU2VydmVyICpzLCBBdmFoaVN0cmluZ0xpc3QgKmRvbWFpbnMpIHsKKyAgICBBdmFoaVN0cmluZ0xpc3QgKmw7CisKKyAgICBhc3NlcnQocyk7CisKKyAgICBmb3IgKGwgPSBzLT5jb25maWcuYnJvd3NlX2RvbWFpbnM7IGw7IGwgPSBsLT5uZXh0KQorICAgICAgICBpZiAoIWF2YWhpX2lzX3ZhbGlkX2RvbWFpbl9uYW1lKChjaGFyKikgbC0+dGV4dCkpCisgICAgICAgICAgICByZXR1cm4gYXZhaGlfc2VydmVyX3NldF9lcnJubyhzLCBBVkFISV9FUlJfSU5WQUxJRF9ET01BSU5fTkFNRSk7CisKKyAgICBhdmFoaV9zdHJpbmdfbGlzdF9mcmVlKHMtPmNvbmZpZy5icm93c2VfZG9tYWlucyk7CisgICAgcy0+Y29uZmlnLmJyb3dzZV9kb21haW5zID0gYXZhaGlfc3RyaW5nX2xpc3RfY29weShkb21haW5zKTsKKworICAgIHJldHVybiBBVkFISV9PSzsKK30KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL3NvY2tldC5jIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvc29ja2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdhYjZlNQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL3NvY2tldC5jCkBAIC0wLDAgKzEsOTkzIEBACisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGludHR5cGVzLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpZmRlZiBIQVZFX1NZU19GSUxJT19ICisjaW5jbHVkZSA8c3lzL2ZpbGlvLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSA8bmV0L2lmLmg+CisjaW5jbHVkZSA8c3lzL3Vpby5oPgorCisjaWZkZWYgSVBfUkVDVklGCisjaW5jbHVkZSA8bmV0L2lmX2RsLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImRucy5oIgorI2luY2x1ZGUgImZkdXRpbC5oIgorI2luY2x1ZGUgInNvY2tldC5oIgorI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgImFkZHItdXRpbC5oIgorCisvKiB0aGlzIGlzIGEgcG9ydGFiaWxpdHkgaGFjayAqLworI2lmbmRlZiBJUFY2X0FERF9NRU1CRVJTSElQCisjaWZkZWYgIElQVjZfSk9JTl9HUk9VUAorI2RlZmluZSBJUFY2X0FERF9NRU1CRVJTSElQIElQVjZfSk9JTl9HUk9VUAorI2VuZGlmCisjZW5kaWYKKworI2lmbmRlZiBJUFY2X0RST1BfTUVNQkVSU0hJUAorI2lmZGVmICBJUFY2X0xFQVZFX0dST1VQCisjZGVmaW5lIElQVjZfRFJPUF9NRU1CRVJTSElQIElQVjZfTEVBVkVfR1JPVVAKKyNlbmRpZgorI2VuZGlmCisKK3N0YXRpYyB2b2lkIG1kbnNfbWNhc3RfZ3JvdXBfaXB2NChzdHJ1Y3Qgc29ja2FkZHJfaW4gKnJldF9zYSkgeworICAgIGFzc2VydChyZXRfc2EpOworCisgICAgbWVtc2V0KHJldF9zYSwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOworICAgIHJldF9zYS0+c2luX2ZhbWlseSA9IEFGX0lORVQ7CisgICAgcmV0X3NhLT5zaW5fcG9ydCA9IGh0b25zKEFWQUhJX01ETlNfUE9SVCk7CisgICAgaW5ldF9wdG9uKEFGX0lORVQsIEFWQUhJX0lQVjRfTUNBU1RfR1JPVVAsICZyZXRfc2EtPnNpbl9hZGRyKTsKK30KKworc3RhdGljIHZvaWQgbWRuc19tY2FzdF9ncm91cF9pcHY2KHN0cnVjdCBzb2NrYWRkcl9pbjYgKnJldF9zYSkgeworICAgIGFzc2VydChyZXRfc2EpOworCisgICAgbWVtc2V0KHJldF9zYSwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKKyAgICByZXRfc2EtPnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisgICAgcmV0X3NhLT5zaW42X3BvcnQgPSBodG9ucyhBVkFISV9NRE5TX1BPUlQpOworICAgIGluZXRfcHRvbihBRl9JTkVUNiwgQVZBSElfSVBWNl9NQ0FTVF9HUk9VUCwgJnJldF9zYS0+c2luNl9hZGRyKTsKK30KKworc3RhdGljIHZvaWQgaXB2NF9hZGRyZXNzX3RvX3NvY2thZGRyKHN0cnVjdCBzb2NrYWRkcl9pbiAqcmV0X3NhLCBjb25zdCBBdmFoaUlQdjRBZGRyZXNzICphLCB1aW50MTZfdCBwb3J0KSB7CisgICAgYXNzZXJ0KHJldF9zYSk7CisgICAgYXNzZXJ0KGEpOworICAgIGFzc2VydChwb3J0ID4gMCk7CisKKyAgICBtZW1zZXQocmV0X3NhLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisgICAgcmV0X3NhLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgICByZXRfc2EtPnNpbl9wb3J0ID0gaHRvbnMocG9ydCk7CisgICAgbWVtY3B5KCZyZXRfc2EtPnNpbl9hZGRyLCBhLCBzaXplb2YoQXZhaGlJUHY0QWRkcmVzcykpOworfQorCitzdGF0aWMgdm9pZCBpcHY2X2FkZHJlc3NfdG9fc29ja2FkZHIoc3RydWN0IHNvY2thZGRyX2luNiAqcmV0X3NhLCBjb25zdCBBdmFoaUlQdjZBZGRyZXNzICphLCB1aW50MTZfdCBwb3J0KSB7CisgICAgYXNzZXJ0KHJldF9zYSk7CisgICAgYXNzZXJ0KGEpOworICAgIGFzc2VydChwb3J0ID4gMCk7CisKKyAgICBtZW1zZXQocmV0X3NhLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOworICAgIHJldF9zYS0+c2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgICByZXRfc2EtPnNpbjZfcG9ydCA9IGh0b25zKHBvcnQpOworICAgIG1lbWNweSgmcmV0X3NhLT5zaW42X2FkZHIsIGEsIHNpemVvZihBdmFoaUlQdjZBZGRyZXNzKSk7Cit9CisKK2ludCBhdmFoaV9tZG5zX21jYXN0X2pvaW5faXB2NChpbnQgZmQsIGNvbnN0IEF2YWhpSVB2NEFkZHJlc3MgKmEsIGludCBpZHgsIGludCBqb2luKSB7CisjaWZkZWYgSEFWRV9TVFJVQ1RfSVBfTVJFUU4KKyAgICBzdHJ1Y3QgaXBfbXJlcW4gbXJlcTsKKyNlbHNlCisgICAgc3RydWN0IGlwX21yZXEgbXJlcTsKKyNlbmRpZgorICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBzYTsKKworICAgIGFzc2VydChmZCA+PSAwKTsKKyAgICBhc3NlcnQoaWR4ID49IDApOworICAgIGFzc2VydChhKTsKKworICAgIG1lbXNldCgmbXJlcSwgMCwgc2l6ZW9mKG1yZXEpKTsKKyNpZmRlZiBIQVZFX1NUUlVDVF9JUF9NUkVRTgorICAgIG1yZXEuaW1yX2lmaW5kZXggPSBpZHg7CisgICAgbXJlcS5pbXJfYWRkcmVzcy5zX2FkZHIgPSBhLT5hZGRyZXNzOworI2Vsc2UKKyAgICBtcmVxLmltcl9pbnRlcmZhY2Uuc19hZGRyID0gYS0+YWRkcmVzczsKKyNlbmRpZgorICAgIG1kbnNfbWNhc3RfZ3JvdXBfaXB2NCgmc2EpOworICAgIG1yZXEuaW1yX211bHRpYWRkciA9IHNhLnNpbl9hZGRyOworCisgICAgLyogU29tZSBuZXR3b3JrIGRyaXZlcnMgaGF2ZSBpc3N1ZXMgd2l0aCBkcm9wcGluZyBtZW1iZXJzaGlwIG9mCisgICAgICogbWNhc3QgZ3JvdXBzIHdoZW4gdGhlIGlmYWNlIGlzIGRvd24sIGJ1dCBkb24ndCBhbGxvdyByZWpvaW5pbmcKKyAgICAgKiB3aGVuIGl0IGNvbWVzIGJhY2sgdXAuIFRoaXMgaXMgYW4gdWdseSB3b3JrYXJvdW5kICovCisgICAgaWYgKGpvaW4pCisgICAgICAgIHNldHNvY2tvcHQoZmQsIElQUFJPVE9fSVAsIElQX0RST1BfTUVNQkVSU0hJUCwgJm1yZXEsIHNpemVvZihtcmVxKSk7CisKKyAgICBpZiAoc2V0c29ja29wdChmZCwgSVBQUk9UT19JUCwgam9pbiA/IElQX0FERF9NRU1CRVJTSElQIDogSVBfRFJPUF9NRU1CRVJTSElQLCAmbXJlcSwgc2l6ZW9mKG1yZXEpKSA8IDApIHsKKyAgICAgICAgYXZhaGlfbG9nX3dhcm4oIiVzIGZhaWxlZDogJXMiLCBqb2luID8gIklQX0FERF9NRU1CRVJTSElQIiA6ICJJUF9EUk9QX01FTUJFUlNISVAiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBhdmFoaV9tZG5zX21jYXN0X2pvaW5faXB2NihpbnQgZmQsIGNvbnN0IEF2YWhpSVB2NkFkZHJlc3MgKmEsIGludCBpZHgsIGludCBqb2luKSB7CisgICAgc3RydWN0IGlwdjZfbXJlcSBtcmVxNjsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42IHNhNjsKKworICAgIGFzc2VydChmZCA+PSAwKTsKKyAgICBhc3NlcnQoaWR4ID49IDApOworICAgIGFzc2VydChhKTsKKworICAgIG1lbXNldCgmbXJlcTYsIDAsIHNpemVvZihtcmVxNikpOworICAgIG1kbnNfbWNhc3RfZ3JvdXBfaXB2NiAoJnNhNik7CisgICAgbXJlcTYuaXB2Nm1yX211bHRpYWRkciA9IHNhNi5zaW42X2FkZHI7CisgICAgbXJlcTYuaXB2Nm1yX2ludGVyZmFjZSA9IGlkeDsKKworICAgIGlmIChqb2luKQorICAgICAgICBzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX0lQVjYsIElQVjZfRFJPUF9NRU1CRVJTSElQLCAmbXJlcTYsIHNpemVvZihtcmVxNikpOworCisgICAgaWYgKHNldHNvY2tvcHQoZmQsIElQUFJPVE9fSVBWNiwgam9pbiA/IElQVjZfQUREX01FTUJFUlNISVAgOiBJUFY2X0RST1BfTUVNQkVSU0hJUCwgJm1yZXE2LCBzaXplb2YobXJlcTYpKSA8IDApIHsKKyAgICAgICAgYXZhaGlfbG9nX3dhcm4oIiVzIGZhaWxlZDogJXMiLCBqb2luID8gIklQVjZfQUREX01FTUJFUlNISVAiIDogIklQVjZfRFJPUF9NRU1CRVJTSElQIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJldXNlYWRkcihpbnQgZmQpIHsKKyAgICBpbnQgeWVzOworCisgICAgeWVzID0gMTsKKyAgICBpZiAoc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCAmeWVzLCBzaXplb2YoeWVzKSkgPCAwKSB7CisgICAgICAgIGF2YWhpX2xvZ193YXJuKCJTT19SRVVTRUFERFIgZmFpbGVkOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyNpZmRlZiBTT19SRVVTRVBPUlQKKyAgICB5ZXMgPSAxOworICAgIGlmIChzZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19SRVVTRVBPUlQsICZ5ZXMsIHNpemVvZih5ZXMpKSA8IDApIHsKKyAgICAgICAgYXZhaGlfbG9nX3dhcm4oIlNPX1JFVVNFUE9SVCBmYWlsZWQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYmluZF93aXRoX3dhcm4oaW50IGZkLCBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhLCBzb2NrbGVuX3QgbCkgeworCisgICAgYXNzZXJ0KGZkID49IDApOworICAgIGFzc2VydChzYSk7CisgICAgYXNzZXJ0KGwgPiAwKTsKKworICAgIGlmIChiaW5kKGZkLCBzYSwgbCkgPCAwKSB7CisKKyAgICAgICAgaWYgKGVycm5vICE9IEVBRERSSU5VU0UpIHsKKyAgICAgICAgICAgIGF2YWhpX2xvZ193YXJuKCJiaW5kKCkgZmFpbGVkOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBhdmFoaV9sb2dfd2FybigiKioqIFdBUk5JTkc6IERldGVjdGVkIGFub3RoZXIgJXMgbUROUyBzdGFjayBydW5uaW5nIG9uIHRoaXMgaG9zdC4gVGhpcyBtYWtlcyBtRE5TIHVucmVsaWFibGUgYW5kIGlzIHRodXMgbm90IHJlY29tbWVuZGVkLiAqKioiLAorICAgICAgICAgICAgICAgICAgICAgICBzYS0+c2FfZmFtaWx5ID09IEFGX0lORVQgPyAiSVB2NCIgOiAiSVB2NiIpOworCisgICAgICAgIC8qIFRyeSBhZ2FpbiwgdGhpcyB0aW1lIHdpdGggU09fUkVVU0VBRERSIHNldCAqLworICAgICAgICBpZiAocmV1c2VhZGRyKGZkKSA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgaWYgKGJpbmQoZmQsIHNhLCBsKSA8IDApIHsKKyAgICAgICAgICAgIGF2YWhpX2xvZ193YXJuKCJiaW5kKCkgZmFpbGVkOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworCisgICAgICAgIC8qIFdlIGVuYWJsZSBTT19SRVVTRUFERFIgYWZ0ZXJ3YXJkcywgdG8gbWFrZSBzdXJlIHRoYXQgdGhlCisgICAgICAgICAqIHVzZXIgbWF5IHJ1biBvdGhlciBtRE5TIGltcGxlbWVudGF0aW9ucyBpZiBoZSByZWFsbHkKKyAgICAgICAgICogd2FudHMuICovCisKKyAgICAgICAgaWYgKHJldXNlYWRkcihmZCkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlwdjRfcGt0aW5mbyhpbnQgZmQpIHsKKyAgICBpbnQgeWVzOworCisjaWZkZWYgSVBfUEtUSU5GTworICAgIHllcyA9IDE7CisgICAgaWYgKHNldHNvY2tvcHQoZmQsIElQUFJPVE9fSVAsIElQX1BLVElORk8sICZ5ZXMsIHNpemVvZih5ZXMpKSA8IDApIHsKKyAgICAgICAgYXZhaGlfbG9nX3dhcm4oIklQX1BLVElORk8gZmFpbGVkOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisjZWxzZQorCisjaWZkZWYgSVBfUkVDVklOVEVSRkFDRQorICAgIHllcyA9IDE7CisgICAgaWYgKHNldHNvY2tvcHQgKGZkLCBJUFBST1RPX0lQLCBJUF9SRUNWSU5URVJGQUNFLCAmeWVzLCBzaXplb2YoeWVzKSkgPCAwKSB7CisgICAgICAgIGF2YWhpX2xvZ193YXJuKCJJUF9SRUNWSU5URVJGQUNFIGZhaWxlZDogJXMiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorI2VsaWYgZGVmaW5lZChJUF9SRUNWSUYpCisgICAgeWVzID0gMTsKKyAgICBpZiAoc2V0c29ja29wdCAoZmQsIElQUFJPVE9fSVAsIElQX1JFQ1ZJRiwgJnllcywgc2l6ZW9mKHllcykpIDwgMCkgeworICAgICAgICBhdmFoaV9sb2dfd2FybigiSVBfUkVDVklGIGZhaWxlZDogJXMiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorI2VuZGlmCisKKyNpZmRlZiBJUF9SRUNWRFNUQUREUgorICAgIHllcyA9IDE7CisgICAgaWYgKHNldHNvY2tvcHQgKGZkLCBJUFBST1RPX0lQLCBJUF9SRUNWRFNUQUREUiwgJnllcywgc2l6ZW9mKHllcykpIDwgMCkgeworICAgICAgICBhdmFoaV9sb2dfd2FybigiSVBfUkVDVkRTVEFERFIgZmFpbGVkOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisjZW5kaWYKKworI2VuZGlmIC8qIElQX1BLVElORk8gKi8KKworI2lmZGVmIElQX1JFQ1ZUVEwKKyAgICB5ZXMgPSAxOworICAgIGlmIChzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX0lQLCBJUF9SRUNWVFRMLCAmeWVzLCBzaXplb2YoeWVzKSkgPCAwKSB7CisgICAgICAgIGF2YWhpX2xvZ193YXJuKCJJUF9SRUNWVFRMIGZhaWxlZDogJXMiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpcHY2X3BrdGluZm8oaW50IGZkKSB7CisgICAgaW50IHllczsKKworI2lmZGVmIElQVjZfUkVDVlBLVElORk8KKyAgICB5ZXMgPSAxOworICAgIGlmIChzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX0lQVjYsIElQVjZfUkVDVlBLVElORk8sICZ5ZXMsIHNpemVvZih5ZXMpKSA8IDApIHsKKyAgICAgICAgYXZhaGlfbG9nX3dhcm4oIklQVjZfUkVDVlBLVElORk8gZmFpbGVkOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisjZWxpZiBkZWZpbmVkKElQVjZfUEtUSU5GTykKKyAgICB5ZXMgPSAxOworICAgIGlmIChzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX0lQVjYsIElQVjZfUEtUSU5GTywgJnllcywgc2l6ZW9mKHllcykpIDwgMCkgeworICAgICAgICBhdmFoaV9sb2dfd2FybigiSVBWNl9QS1RJTkZPIGZhaWxlZDogJXMiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorI2VuZGlmCisKKyNpZmRlZiBJUFY2X1JFQ1ZIT1BTCisgICAgeWVzID0gMTsKKyAgICBpZiAoc2V0c29ja29wdChmZCwgSVBQUk9UT19JUFY2LCBJUFY2X1JFQ1ZIT1BTLCAmeWVzLCBzaXplb2YoeWVzKSkgPCAwKSB7CisgICAgICAgIGF2YWhpX2xvZ193YXJuKCJJUFY2X1JFQ1ZIT1BTIGZhaWxlZDogJXMiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorI2VsaWYgZGVmaW5lZChJUFY2X1JFQ1ZIT1BMSU1JVCkKKyAgICB5ZXMgPSAxOworICAgIGlmIChzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX0lQVjYsIElQVjZfUkVDVkhPUExJTUlULCAmeWVzLCBzaXplb2YoeWVzKSkgPCAwKSB7CisgICAgICAgIGF2YWhpX2xvZ193YXJuKCJJUFY2X1JFQ1ZIT1BMSU1JVCBmYWlsZWQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyNlbGlmIGRlZmluZWQoSVBWNl9IT1BMSU1JVCkKKyAgICB5ZXMgPSAxOworICAgIGlmIChzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX0lQVjYsIElQVjZfSE9QTElNSVQsICZ5ZXMsIHNpemVvZih5ZXMpKSA8IDApIHsKKyAgICAgICAgYXZhaGlfbG9nX3dhcm4oIklQVjZfSE9QTElNSVQgZmFpbGVkOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiAwOworfQorCitpbnQgYXZhaGlfb3Blbl9zb2NrZXRfaXB2NChpbnQgbm9fcmV1c2UpIHsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gbG9jYWw7CisgICAgaW50IGZkID0gLTEsIHIsIGl0dGw7CisgICAgdWludDhfdCB0dGwsIGN5ZXM7CisKKyAgICBpZiAoKGZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIDApKSA8IDApIHsKKyAgICAgICAgYXZhaGlfbG9nX3dhcm4oInNvY2tldCgpIGZhaWxlZDogJXMiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgdHRsID0gMjU1OworICAgIGlmIChzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX0lQLCBJUF9NVUxUSUNBU1RfVFRMLCAmdHRsLCBzaXplb2YodHRsKSkgPCAwKSB7CisgICAgICAgIGF2YWhpX2xvZ193YXJuKCJJUF9NVUxUSUNBU1RfVFRMIGZhaWxlZDogJXMiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaXR0bCA9IDI1NTsKKyAgICBpZiAoc2V0c29ja29wdChmZCwgSVBQUk9UT19JUCwgSVBfVFRMLCAmaXR0bCwgc2l6ZW9mKGl0dGwpKSA8IDApIHsKKyAgICAgICAgYXZhaGlfbG9nX3dhcm4oIklQX1RUTCBmYWlsZWQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGN5ZXMgPSAxOworICAgIGlmIChzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX0lQLCBJUF9NVUxUSUNBU1RfTE9PUCwgJmN5ZXMsIHNpemVvZihjeWVzKSkgPCAwKSB7CisgICAgICAgIGF2YWhpX2xvZ193YXJuKCJJUF9NVUxUSUNBU1RfTE9PUCBmYWlsZWQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIG1lbXNldCgmbG9jYWwsIDAsIHNpemVvZihsb2NhbCkpOworICAgIGxvY2FsLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworICAgIGxvY2FsLnNpbl9wb3J0ID0gaHRvbnMoQVZBSElfTUROU19QT1JUKTsKKworICAgIGlmIChub19yZXVzZSkKKyAgICAgICAgciA9IGJpbmQoZmQsIChzdHJ1Y3Qgc29ja2FkZHIqKSAmbG9jYWwsIHNpemVvZihsb2NhbCkpOworICAgIGVsc2UKKyAgICAgICAgciA9IGJpbmRfd2l0aF93YXJuKGZkLCAoc3RydWN0IHNvY2thZGRyKikgJmxvY2FsLCBzaXplb2YobG9jYWwpKTsKKworICAgIGlmIChyIDwgMCkKKyAgICAgICAgZ290byBmYWlsOworCisgICAgaWYgKGlwdjRfcGt0aW5mbyAoZmQpIDwgMCkKKyAgICAgICAgIGdvdG8gZmFpbDsKKworICAgIGlmIChhdmFoaV9zZXRfY2xvZXhlYyhmZCkgPCAwKSB7CisgICAgICAgIGF2YWhpX2xvZ193YXJuKCJGRF9DTE9FWEVDIGZhaWxlZDogJXMiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKGF2YWhpX3NldF9ub25ibG9jayhmZCkgPCAwKSB7CisgICAgICAgIGF2YWhpX2xvZ193YXJuKCJPX05PTkJMT0NLIGZhaWxlZDogJXMiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgcmV0dXJuIGZkOworCitmYWlsOgorICAgIGlmIChmZCA+PSAwKQorICAgICAgICBjbG9zZShmZCk7CisKKyAgICByZXR1cm4gLTE7Cit9CisKK2ludCBhdmFoaV9vcGVuX3NvY2tldF9pcHY2KGludCBub19yZXVzZSkgeworICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgc2EsIGxvY2FsOworICAgIGludCBmZCA9IC0xLCB5ZXMsIHI7CisgICAgaW50IHR0bDsKKworICAgIG1kbnNfbWNhc3RfZ3JvdXBfaXB2Nigmc2EpOworCisgICAgaWYgKChmZCA9IHNvY2tldChBRl9JTkVUNiwgU09DS19ER1JBTSwgMCkpIDwgMCkgeworICAgICAgICBhdmFoaV9sb2dfd2Fybigic29ja2V0KCkgZmFpbGVkOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICB0dGwgPSAyNTU7CisgICAgaWYgKHNldHNvY2tvcHQoZmQsIElQUFJPVE9fSVBWNiwgSVBWNl9NVUxUSUNBU1RfSE9QUywgJnR0bCwgc2l6ZW9mKHR0bCkpIDwgMCkgeworICAgICAgICBhdmFoaV9sb2dfd2FybigiSVBWNl9NVUxUSUNBU1RfSE9QUyBmYWlsZWQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIHR0bCA9IDI1NTsKKyAgICBpZiAoc2V0c29ja29wdChmZCwgSVBQUk9UT19JUFY2LCBJUFY2X1VOSUNBU1RfSE9QUywgJnR0bCwgc2l6ZW9mKHR0bCkpIDwgMCkgeworICAgICAgICBhdmFoaV9sb2dfd2FybigiSVBWNl9VTklDQVNUX0hPUFMgZmFpbGVkOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICB5ZXMgPSAxOworICAgIGlmIChzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX0lQVjYsIElQVjZfVjZPTkxZLCAmeWVzLCBzaXplb2YoeWVzKSkgPCAwKSB7CisgICAgICAgIGF2YWhpX2xvZ193YXJuKCJJUFY2X1Y2T05MWSBmYWlsZWQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIHllcyA9IDE7CisgICAgaWYgKHNldHNvY2tvcHQoZmQsIElQUFJPVE9fSVBWNiwgSVBWNl9NVUxUSUNBU1RfTE9PUCwgJnllcywgc2l6ZW9mKHllcykpIDwgMCkgeworICAgICAgICBhdmFoaV9sb2dfd2FybigiSVBWNl9NVUxUSUNBU1RfTE9PUCBmYWlsZWQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIG1lbXNldCgmbG9jYWwsIDAsIHNpemVvZihsb2NhbCkpOworICAgIGxvY2FsLnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisgICAgbG9jYWwuc2luNl9wb3J0ID0gaHRvbnMoQVZBSElfTUROU19QT1JUKTsKKworICAgIGlmIChub19yZXVzZSkKKyAgICAgICAgciA9IGJpbmQoZmQsIChzdHJ1Y3Qgc29ja2FkZHIqKSAmbG9jYWwsIHNpemVvZihsb2NhbCkpOworICAgIGVsc2UKKyAgICAgICAgciA9IGJpbmRfd2l0aF93YXJuKGZkLCAoc3RydWN0IHNvY2thZGRyKikgJmxvY2FsLCBzaXplb2YobG9jYWwpKTsKKworICAgIGlmIChyIDwgMCkKKyAgICAgICAgZ290byBmYWlsOworCisgICAgaWYgKGlwdjZfcGt0aW5mbyhmZCkgPCAwKQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICBpZiAoYXZhaGlfc2V0X2Nsb2V4ZWMoZmQpIDwgMCkgeworICAgICAgICBhdmFoaV9sb2dfd2FybigiRkRfQ0xPRVhFQyBmYWlsZWQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGlmIChhdmFoaV9zZXRfbm9uYmxvY2soZmQpIDwgMCkgeworICAgICAgICBhdmFoaV9sb2dfd2FybigiT19OT05CTE9DSyBmYWlsZWQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIHJldHVybiBmZDsKKworZmFpbDoKKyAgICBpZiAoZmQgPj0gMCkKKyAgICAgICAgY2xvc2UoZmQpOworCisgICAgcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IHNlbmRtc2dfbG9vcChpbnQgZmQsIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGZsYWdzKSB7CisgICAgYXNzZXJ0KGZkID49IDApOworICAgIGFzc2VydChtc2cpOworCisgICAgZm9yICg7OykgeworCisgICAgICAgIGlmIChzZW5kbXNnKGZkLCBtc2csIGZsYWdzKSA+PSAwKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGVycm5vID09IEVJTlRSKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKGVycm5vICE9IEVBR0FJTikgeworICAgICAgICAgICAgY2hhciB3aGVyZVs2NF07CisgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IG1zZy0+bXNnX25hbWU7CisKKyAgICAgICAgICAgIGluZXRfbnRvcChzaW4tPnNpbl9mYW1pbHksICZzaW4tPnNpbl9hZGRyLCB3aGVyZSwgc2l6ZW9mKHdoZXJlKSk7CisgICAgICAgICAgICBhdmFoaV9sb2dfZGVidWcoInNlbmRtc2coKSB0byAlcyBmYWlsZWQ6ICVzIiwgd2hlcmUsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYXZhaGlfd2FpdF9mb3Jfd3JpdGUoZmQpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IGF2YWhpX3NlbmRfZG5zX3BhY2tldF9pcHY0KAorICAgICAgICBpbnQgZmQsCisgICAgICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsCisgICAgICAgIEF2YWhpRG5zUGFja2V0ICpwLAorICAgICAgICBjb25zdCBBdmFoaUlQdjRBZGRyZXNzICpzcmNfYWRkcmVzcywKKyAgICAgICAgY29uc3QgQXZhaGlJUHY0QWRkcmVzcyAqZHN0X2FkZHJlc3MsCisgICAgICAgIHVpbnQxNl90IGRzdF9wb3J0KSB7CisKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2E7CisgICAgc3RydWN0IG1zZ2hkciBtc2c7CisgICAgc3RydWN0IGlvdmVjIGlvOworI2lmZGVmIElQX1BLVElORk8KKyAgICBzdHJ1Y3QgY21zZ2hkciAqY21zZzsKKyAgICBzaXplX3QgY21zZ19kYXRhWyggQ01TR19TUEFDRShzaXplb2Yoc3RydWN0IGluX3BrdGluZm8pKSAvIHNpemVvZihzaXplX3QpKSArIDFdOworI2VsaWYgIWRlZmluZWQoSVBfTVVMVElDQVNUX0lGKSAmJiBkZWZpbmVkKElQX1NFTkRTUkNBRERSKQorICAgIHN0cnVjdCBjbXNnaGRyICpjbXNnOworICAgIHNpemVfdCBjbXNnX2RhdGFbKCBDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpIC8gc2l6ZW9mKHNpemVfdCkpICsgMV07CisjZW5kaWYKKworICAgIGFzc2VydChmZCA+PSAwKTsKKyAgICBhc3NlcnQocCk7CisgICAgYXNzZXJ0KGF2YWhpX2Ruc19wYWNrZXRfY2hlY2tfdmFsaWQocCkgPj0gMCk7CisgICAgYXNzZXJ0KCFkc3RfYWRkcmVzcyB8fCBkc3RfcG9ydCA+IDApOworCisgICAgaWYgKCFkc3RfYWRkcmVzcykKKyAgICAgICAgbWRuc19tY2FzdF9ncm91cF9pcHY0KCZzYSk7CisgICAgZWxzZQorICAgICAgICBpcHY0X2FkZHJlc3NfdG9fc29ja2FkZHIoJnNhLCBkc3RfYWRkcmVzcywgZHN0X3BvcnQpOworCisgICAgbWVtc2V0KCZpbywgMCwgc2l6ZW9mKGlvKSk7CisgICAgaW8uaW92X2Jhc2UgPSBBVkFISV9ETlNfUEFDS0VUX0RBVEEocCk7CisgICAgaW8uaW92X2xlbiA9IHAtPnNpemU7CisKKyAgICBtZW1zZXQoJm1zZywgMCwgc2l6ZW9mKG1zZykpOworICAgIG1zZy5tc2dfbmFtZSA9ICZzYTsKKyAgICBtc2cubXNnX25hbWVsZW4gPSBzaXplb2Yoc2EpOworICAgIG1zZy5tc2dfaW92ID0gJmlvOworICAgIG1zZy5tc2dfaW92bGVuID0gMTsKKyAgICBtc2cubXNnX2ZsYWdzID0gMDsKKyAgICBtc2cubXNnX2NvbnRyb2wgPSBOVUxMOworICAgIG1zZy5tc2dfY29udHJvbGxlbiA9IDA7CisKKyNpZmRlZiBJUF9QS1RJTkZPCisgICAgaWYgKGludGVyZmFjZSA+IDAgfHwgc3JjX2FkZHJlc3MpIHsKKyAgICAgICAgc3RydWN0IGluX3BrdGluZm8gKnBrdGk7CisKKyAgICAgICAgbWVtc2V0KGNtc2dfZGF0YSwgMCwgc2l6ZW9mKGNtc2dfZGF0YSkpOworICAgICAgICBtc2cubXNnX2NvbnRyb2wgPSBjbXNnX2RhdGE7CisgICAgICAgIG1zZy5tc2dfY29udHJvbGxlbiA9IENNU0dfTEVOKHNpemVvZihzdHJ1Y3QgaW5fcGt0aW5mbykpOworCisgICAgICAgIGNtc2cgPSBDTVNHX0ZJUlNUSERSKCZtc2cpOworICAgICAgICBjbXNnLT5jbXNnX2xlbiA9IG1zZy5tc2dfY29udHJvbGxlbjsKKyAgICAgICAgY21zZy0+Y21zZ19sZXZlbCA9IElQUFJPVE9fSVA7CisgICAgICAgIGNtc2ctPmNtc2dfdHlwZSA9IElQX1BLVElORk87CisKKyAgICAgICAgcGt0aSA9IChzdHJ1Y3QgaW5fcGt0aW5mbyopIENNU0dfREFUQShjbXNnKTsKKworICAgICAgICBpZiAoaW50ZXJmYWNlID4gMCkKKyAgICAgICAgICAgIHBrdGktPmlwaV9pZmluZGV4ID0gaW50ZXJmYWNlOworCisgICAgICAgIGlmIChzcmNfYWRkcmVzcykKKyAgICAgICAgICAgIHBrdGktPmlwaV9zcGVjX2RzdC5zX2FkZHIgPSBzcmNfYWRkcmVzcy0+YWRkcmVzczsKKyAgICB9CisjZWxpZiBkZWZpbmVkKElQX01VTFRJQ0FTVF9JRikKKyAgICBpZiAoc3JjX2FkZHJlc3MpIHsKKyAgICAgICAgc3RydWN0IGluX2FkZHIgYW55ID0geyBJTkFERFJfQU5ZIH07CisgICAgICAgIGlmIChzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX0lQLCBJUF9NVUxUSUNBU1RfSUYsIHNyY19hZGRyZXNzID8gJnNyY19hZGRyZXNzLT5hZGRyZXNzIDogJmFueSwgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSkgPCAwKSB7CisgICAgICAgICAgICBhdmFoaV9sb2dfd2FybigiSVBfTVVMVElDQVNUX0lGIGZhaWxlZDogJXMiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorI2VsaWYgZGVmaW5lZChJUF9TRU5EU1JDQUREUikKKyAgICBpZiAoc3JjX2FkZHJlc3MpIHsKKyAgICAgICAgc3RydWN0IGluX2FkZHIgKmFkZHI7CisKKyAgICAgICAgbWVtc2V0KGNtc2dfZGF0YSwgMCwgc2l6ZW9mKGNtc2dfZGF0YSkpOworICAgICAgICBtc2cubXNnX2NvbnRyb2wgPSBjbXNnX2RhdGE7CisgICAgICAgIG1zZy5tc2dfY29udHJvbGxlbiA9IENNU0dfTEVOKHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpOworCisgICAgICAgIGNtc2cgPSBDTVNHX0ZJUlNUSERSKCZtc2cpOworICAgICAgICBjbXNnLT5jbXNnX2xlbiA9IG1zZy5tc2dfY29udHJvbGxlbjsKKyAgICAgICAgY21zZy0+Y21zZ19sZXZlbCA9IElQUFJPVE9fSVA7CisgICAgICAgIGNtc2ctPmNtc2dfdHlwZSA9IElQX1NFTkRTUkNBRERSOworCisgICAgICAgIGFkZHIgPSAoc3RydWN0IGluX2FkZHIgKilDTVNHX0RBVEEoY21zZyk7CisgICAgICAgIGFkZHItPnNfYWRkciA9ICBzcmNfYWRkcmVzcy0+YWRkcmVzczsKKyAgICB9CisjZWxpZiBkZWZpbmVkKF9fR05VQ19fKQorI3dhcm5pbmcgIkZJWE1FOiBXZSBuZWVkIHNvbWUgY29kZSB0byBzZXQgdGhlIG91dGdvaW5nIGludGVyZmFjZS9sb2NhbCBhZGRyZXNzIGhlcmUgaWYgSVBfUEtUSU5GTy9JUF9NVUxUSUNBU1RfSUYgaXMgbm90IGF2YWlsYWJsZSIKKyNlbmRpZgorCisgICAgcmV0dXJuIHNlbmRtc2dfbG9vcChmZCwgJm1zZywgMCk7Cit9CisKK2ludCBhdmFoaV9zZW5kX2Ruc19wYWNrZXRfaXB2NigKKyAgICAgICAgaW50IGZkLAorICAgICAgICBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLAorICAgICAgICBBdmFoaURuc1BhY2tldCAqcCwKKyAgICAgICAgY29uc3QgQXZhaGlJUHY2QWRkcmVzcyAqc3JjX2FkZHJlc3MsCisgICAgICAgIGNvbnN0IEF2YWhpSVB2NkFkZHJlc3MgKmRzdF9hZGRyZXNzLAorICAgICAgICB1aW50MTZfdCBkc3RfcG9ydCkgeworCisgICAgc3RydWN0IHNvY2thZGRyX2luNiBzYTsKKyAgICBzdHJ1Y3QgbXNnaGRyIG1zZzsKKyAgICBzdHJ1Y3QgaW92ZWMgaW87CisgICAgc3RydWN0IGNtc2doZHIgKmNtc2c7CisgICAgc2l6ZV90IGNtc2dfZGF0YVsoQ01TR19TUEFDRShzaXplb2Yoc3RydWN0IGluNl9wa3RpbmZvKSkvc2l6ZW9mKHNpemVfdCkpICsgMV07CisKKyAgICBhc3NlcnQoZmQgPj0gMCk7CisgICAgYXNzZXJ0KHApOworICAgIGFzc2VydChhdmFoaV9kbnNfcGFja2V0X2NoZWNrX3ZhbGlkKHApID49IDApOworICAgIGFzc2VydCghZHN0X2FkZHJlc3MgfHwgZHN0X3BvcnQgPiAwKTsKKworICAgIGlmICghZHN0X2FkZHJlc3MpCisgICAgICAgIG1kbnNfbWNhc3RfZ3JvdXBfaXB2Nigmc2EpOworICAgIGVsc2UKKyAgICAgICAgaXB2Nl9hZGRyZXNzX3RvX3NvY2thZGRyKCZzYSwgZHN0X2FkZHJlc3MsIGRzdF9wb3J0KTsKKworICAgIG1lbXNldCgmaW8sIDAsIHNpemVvZihpbykpOworICAgIGlvLmlvdl9iYXNlID0gQVZBSElfRE5TX1BBQ0tFVF9EQVRBKHApOworICAgIGlvLmlvdl9sZW4gPSBwLT5zaXplOworCisgICAgbWVtc2V0KCZtc2csIDAsIHNpemVvZihtc2cpKTsKKyAgICBtc2cubXNnX25hbWUgPSAmc2E7CisgICAgbXNnLm1zZ19uYW1lbGVuID0gc2l6ZW9mKHNhKTsKKyAgICBtc2cubXNnX2lvdiA9ICZpbzsKKyAgICBtc2cubXNnX2lvdmxlbiA9IDE7CisgICAgbXNnLm1zZ19mbGFncyA9IDA7CisKKyAgICBpZiAoaW50ZXJmYWNlID4gMCB8fCBzcmNfYWRkcmVzcykgeworICAgICAgICBzdHJ1Y3QgaW42X3BrdGluZm8gKnBrdGk7CisKKyAgICAgICAgbWVtc2V0KGNtc2dfZGF0YSwgMCwgc2l6ZW9mKGNtc2dfZGF0YSkpOworICAgICAgICBtc2cubXNnX2NvbnRyb2wgPSBjbXNnX2RhdGE7CisgICAgICAgIG1zZy5tc2dfY29udHJvbGxlbiA9IENNU0dfTEVOKHNpemVvZihzdHJ1Y3QgaW42X3BrdGluZm8pKTsKKworICAgICAgICBjbXNnID0gQ01TR19GSVJTVEhEUigmbXNnKTsKKyAgICAgICAgY21zZy0+Y21zZ19sZW4gPSBtc2cubXNnX2NvbnRyb2xsZW47CisgICAgICAgIGNtc2ctPmNtc2dfbGV2ZWwgPSBJUFBST1RPX0lQVjY7CisgICAgICAgIGNtc2ctPmNtc2dfdHlwZSA9IElQVjZfUEtUSU5GTzsKKworICAgICAgICBwa3RpID0gKHN0cnVjdCBpbjZfcGt0aW5mbyopIENNU0dfREFUQShjbXNnKTsKKworICAgICAgICBpZiAoaW50ZXJmYWNlID4gMCkKKyAgICAgICAgICAgIHBrdGktPmlwaTZfaWZpbmRleCA9IGludGVyZmFjZTsKKworICAgICAgICBpZiAoc3JjX2FkZHJlc3MpCisgICAgICAgICAgICBtZW1jcHkoJnBrdGktPmlwaTZfYWRkciwgc3JjX2FkZHJlc3MtPmFkZHJlc3MsIHNpemVvZihzcmNfYWRkcmVzcy0+YWRkcmVzcykpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1zZy5tc2dfY29udHJvbCA9IE5VTEw7CisgICAgICAgIG1zZy5tc2dfY29udHJvbGxlbiA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHNlbmRtc2dfbG9vcChmZCwgJm1zZywgMCk7Cit9CisKK0F2YWhpRG5zUGFja2V0ICphdmFoaV9yZWN2X2Ruc19wYWNrZXRfaXB2NCgKKyAgICAgICAgaW50IGZkLAorICAgICAgICBBdmFoaUlQdjRBZGRyZXNzICpyZXRfc3JjX2FkZHJlc3MsCisgICAgICAgIHVpbnQxNl90ICpyZXRfc3JjX3BvcnQsCisgICAgICAgIEF2YWhpSVB2NEFkZHJlc3MgKnJldF9kc3RfYWRkcmVzcywKKyAgICAgICAgQXZhaGlJZkluZGV4ICpyZXRfaWZhY2UsCisgICAgICAgIHVpbnQ4X3QgKnJldF90dGwpIHsKKworICAgIEF2YWhpRG5zUGFja2V0ICpwPSBOVUxMOworICAgIHN0cnVjdCBtc2doZHIgbXNnOworICAgIHN0cnVjdCBpb3ZlYyBpbzsKKyAgICBzaXplX3QgYXV4WzEwMjQgLyBzaXplb2Yoc2l6ZV90KV07IC8qIGZvciBhbGlnbm1lbnQgb24gaWE2NCAhICovCisgICAgc3NpemVfdCBsOworICAgIHN0cnVjdCBjbXNnaGRyICpjbXNnOworICAgIGludCBmb3VuZF9hZGRyID0gMDsKKyAgICBpbnQgbXM7CisgICAgc3RydWN0IHNvY2thZGRyX2luIHNhOworCisgICAgYXNzZXJ0KGZkID49IDApOworCisgICAgaWYgKGlvY3RsKGZkLCBGSU9OUkVBRCwgJm1zKSA8IDApIHsKKyAgICAgICAgYXZhaGlfbG9nX3dhcm4oImlvY3RsKCk6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGlmIChtcyA8IDApIHsKKyAgICAgICAgYXZhaGlfbG9nX3dhcm4oIkZJT05SRUFEIHJldHVybmVkIG5lZ2F0aXZlIHZhbHVlLiIpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgcCA9IGF2YWhpX2Ruc19wYWNrZXRfbmV3KG1zICsgQVZBSElfRE5TX1BBQ0tFVF9FWFRSQV9TSVpFKTsKKworICAgIGlvLmlvdl9iYXNlID0gQVZBSElfRE5TX1BBQ0tFVF9EQVRBKHApOworICAgIGlvLmlvdl9sZW4gPSBwLT5tYXhfc2l6ZTsKKworICAgIG1lbXNldCgmbXNnLCAwLCBzaXplb2YobXNnKSk7CisgICAgbXNnLm1zZ19uYW1lID0gJnNhOworICAgIG1zZy5tc2dfbmFtZWxlbiA9IHNpemVvZihzYSk7CisgICAgbXNnLm1zZ19pb3YgPSAmaW87CisgICAgbXNnLm1zZ19pb3ZsZW4gPSAxOworICAgIG1zZy5tc2dfY29udHJvbCA9IGF1eDsKKyAgICBtc2cubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoYXV4KTsKKyAgICBtc2cubXNnX2ZsYWdzID0gMDsKKworICAgIGlmICgobCA9IHJlY3Ztc2coZmQsICZtc2csIDApKSA8IDApIHsKKyAgICAgICAgLyogTGludXggcmV0dXJucyBFQUdBSU4gd2hlbiBhbiBpbnZhbGlkIElQIHBhY2tldCBoYXMgYmVlbgorICAgICAgICByZWNlaXZlZC4gV2Ugc3VwcHJlc3Mgd2FybmluZ3MgaW4gdGhpcyBjYXNlIGJlY2F1c2UgdGhpcyBtaWdodAorICAgICAgICBjcmVhdGUgcXVpdGUgYSBiaXQgb2YgbG9nIHRyYWZmaWMgb24gbWFjaGluZXMgd2l0aCB1bnN0YWJsZQorICAgICAgICBsaW5rcy4gKFNlZSAjNjApICovCisKKyAgICAgICAgaWYgKGVycm5vICE9IEVBR0FJTikKKyAgICAgICAgICAgIGF2YWhpX2xvZ193YXJuKCJyZWN2bXNnKCk6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgLyogRm9yIGNvcnJ1cHQgcGFja2V0cyBGSU9OUkVBRCByZXR1cm5zIHplcm8gc2l6ZSAoU2VlIHJoYnogIzYwNzI5NykuIFNvCisgICAgICogZmFpbCBhZnRlciBoYXZpbmcgcmVhZCB0aGVtLiAqLworICAgIGlmICghbXMpCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIGlmIChzYS5zaW5fYWRkci5zX2FkZHIgPT0gSU5BRERSX0FOWSkKKyAgICAgICAgLyogTGludXggMi40IGJlaGF2ZXMgdmVyeSBzdHJhbmdlbHkgc29tZXRpbWVzISAqLworICAgICAgICBnb3RvIGZhaWw7CisKKyAgICBhc3NlcnQoIShtc2cubXNnX2ZsYWdzICYgTVNHX0NUUlVOQykpOworICAgIGFzc2VydCghKG1zZy5tc2dfZmxhZ3MgJiBNU0dfVFJVTkMpKTsKKworICAgIHAtPnNpemUgPSAoc2l6ZV90KSBsOworCisgICAgaWYgKHJldF9zcmNfcG9ydCkKKyAgICAgICAgKnJldF9zcmNfcG9ydCA9IGF2YWhpX3BvcnRfZnJvbV9zb2NrYWRkcigoc3RydWN0IHNvY2thZGRyKikgJnNhKTsKKworICAgIGlmIChyZXRfc3JjX2FkZHJlc3MpIHsKKyAgICAgICAgQXZhaGlBZGRyZXNzIGE7CisgICAgICAgIGF2YWhpX2FkZHJlc3NfZnJvbV9zb2NrYWRkcigoc3RydWN0IHNvY2thZGRyKikgJnNhLCAmYSk7CisgICAgICAgICpyZXRfc3JjX2FkZHJlc3MgPSBhLmRhdGEuaXB2NDsKKyAgICB9CisKKyAgICBpZiAocmV0X3R0bCkKKyAgICAgICAgKnJldF90dGwgPSAyNTU7CisKKyAgICBpZiAocmV0X2lmYWNlKQorICAgICAgICAqcmV0X2lmYWNlID0gQVZBSElfSUZfVU5TUEVDOworCisgICAgZm9yIChjbXNnID0gQ01TR19GSVJTVEhEUigmbXNnKTsgY21zZyAhPSBOVUxMOyBjbXNnID0gQ01TR19OWFRIRFIoJm1zZywgY21zZykpIHsKKworICAgICAgICBpZiAoY21zZy0+Y21zZ19sZXZlbCA9PSBJUFBST1RPX0lQKSB7CisKKyAgICAgICAgICAgIHN3aXRjaCAoY21zZy0+Y21zZ190eXBlKSB7CisjaWZkZWYgSVBfUkVDVlRUTAorICAgICAgICAgICAgICAgIGNhc2UgSVBfUkVDVlRUTDoKKyNlbmRpZgorICAgICAgICAgICAgICAgIGNhc2UgSVBfVFRMOgorICAgICAgICAgICAgICAgICAgICBpZiAocmV0X3R0bCkKKyAgICAgICAgICAgICAgICAgICAgICAgICpyZXRfdHRsID0gKHVpbnQ4X3QpICgqKGludCAqKSBDTVNHX0RBVEEoY21zZykpOworCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisjaWZkZWYgSVBfUEtUSU5GTworICAgICAgICAgICAgICAgIGNhc2UgSVBfUEtUSU5GTzogeworICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaW5fcGt0aW5mbyAqaSA9IChzdHJ1Y3QgaW5fcGt0aW5mbyopIENNU0dfREFUQShjbXNnKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAocmV0X2lmYWNlICYmIGktPmlwaV9pZmluZGV4ID4gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICpyZXRfaWZhY2UgPSAoaW50KSBpLT5pcGlfaWZpbmRleDsKKworICAgICAgICAgICAgICAgICAgICBpZiAocmV0X2RzdF9hZGRyZXNzKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0X2RzdF9hZGRyZXNzLT5hZGRyZXNzID0gaS0+aXBpX2FkZHIuc19hZGRyOworCisgICAgICAgICAgICAgICAgICAgIGZvdW5kX2FkZHIgPSAxOworCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyNlbmRpZgorCisjaWZkZWYgSVBfUkVDVklGCisgICAgICAgICAgICAgICAgY2FzZSBJUF9SRUNWSUY6IHsKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyX2RsICpzZGwgPSAoc3RydWN0IHNvY2thZGRyX2RsICopIENNU0dfREFUQSAoY21zZyk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJldF9pZmFjZSkgeworI2lmZGVmIF9fc3VuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKih1aW50X3QqKSBzZGwgPiAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICpyZXRfaWZhY2UgPSAqKHVpbnRfdCopIHNkbDsKKyNlbHNlCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZGwtPnNkbF9pbmRleCA+IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnJldF9pZmFjZSA9IChpbnQpIHNkbC0+c2RsX2luZGV4OworI2VuZGlmCisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisjZW5kaWYKKworI2lmZGVmIElQX1JFQ1ZEU1RBRERSCisgICAgICAgICAgICAgICAgY2FzZSBJUF9SRUNWRFNUQUREUjoKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJldF9kc3RfYWRkcmVzcykKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweSgmcmV0X2RzdF9hZGRyZXNzLT5hZGRyZXNzLCBDTVNHX0RBVEEgKGNtc2cpLCA0KTsKKworICAgICAgICAgICAgICAgICAgICBmb3VuZF9hZGRyID0gMTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGF2YWhpX2xvZ193YXJuKCJVbmhhbmRsZWQgY21zZ190eXBlOiAlZCIsIGNtc2ctPmNtc2dfdHlwZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgYXNzZXJ0KGZvdW5kX2FkZHIpOworCisgICAgcmV0dXJuIHA7CisKK2ZhaWw6CisgICAgaWYgKHApCisgICAgICAgIGF2YWhpX2Ruc19wYWNrZXRfZnJlZShwKTsKKworICAgIHJldHVybiBOVUxMOworfQorCitBdmFoaURuc1BhY2tldCAqYXZhaGlfcmVjdl9kbnNfcGFja2V0X2lwdjYoCisgICAgICAgIGludCBmZCwKKyAgICAgICAgQXZhaGlJUHY2QWRkcmVzcyAqcmV0X3NyY19hZGRyZXNzLAorICAgICAgICB1aW50MTZfdCAqcmV0X3NyY19wb3J0LAorICAgICAgICBBdmFoaUlQdjZBZGRyZXNzICpyZXRfZHN0X2FkZHJlc3MsCisgICAgICAgIEF2YWhpSWZJbmRleCAqcmV0X2lmYWNlLAorICAgICAgICB1aW50OF90ICpyZXRfdHRsKSB7CisKKyAgICBBdmFoaURuc1BhY2tldCAqcCA9IE5VTEw7CisgICAgc3RydWN0IG1zZ2hkciBtc2c7CisgICAgc3RydWN0IGlvdmVjIGlvOworICAgIHNpemVfdCBhdXhbMTAyNCAvIHNpemVvZihzaXplX3QpXTsKKyAgICBzc2l6ZV90IGw7CisgICAgaW50IG1zOworICAgIHN0cnVjdCBjbXNnaGRyICpjbXNnOworICAgIGludCBmb3VuZF90dGwgPSAwLCBmb3VuZF9pZmFjZSA9IDA7CisgICAgc3RydWN0IHNvY2thZGRyX2luNiBzYTsKKworICAgIGFzc2VydChmZCA+PSAwKTsKKworICAgIGlmIChpb2N0bChmZCwgRklPTlJFQUQsICZtcykgPCAwKSB7CisgICAgICAgIGF2YWhpX2xvZ193YXJuKCJpb2N0bCgpOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBpZiAobXMgPCAwKSB7CisgICAgICAgIGF2YWhpX2xvZ193YXJuKCJGSU9OUkVBRCByZXR1cm5lZCBuZWdhdGl2ZSB2YWx1ZS4iKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIHAgPSBhdmFoaV9kbnNfcGFja2V0X25ldyhtcyArIEFWQUhJX0ROU19QQUNLRVRfRVhUUkFfU0laRSk7CisKKyAgICBpby5pb3ZfYmFzZSA9IEFWQUhJX0ROU19QQUNLRVRfREFUQShwKTsKKyAgICBpby5pb3ZfbGVuID0gcC0+bWF4X3NpemU7CisKKyAgICBtZW1zZXQoJm1zZywgMCwgc2l6ZW9mKG1zZykpOworICAgIG1zZy5tc2dfbmFtZSA9IChzdHJ1Y3Qgc29ja2FkZHIqKSAmc2E7CisgICAgbXNnLm1zZ19uYW1lbGVuID0gc2l6ZW9mKHNhKTsKKworICAgIG1zZy5tc2dfaW92ID0gJmlvOworICAgIG1zZy5tc2dfaW92bGVuID0gMTsKKyAgICBtc2cubXNnX2NvbnRyb2wgPSBhdXg7CisgICAgbXNnLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGF1eCk7CisgICAgbXNnLm1zZ19mbGFncyA9IDA7CisKKyAgICBpZiAoKGwgPSByZWN2bXNnKGZkLCAmbXNnLCAwKSkgPCAwKSB7CisgICAgICAgIC8qIExpbnV4IHJldHVybnMgRUFHQUlOIHdoZW4gYW4gaW52YWxpZCBJUCBwYWNrZXQgaGFzIGJlZW4KKyAgICAgICAgcmVjZWl2ZWQuIFdlIHN1cHByZXNzIHdhcm5pbmdzIGluIHRoaXMgY2FzZSBiZWNhdXNlIHRoaXMgbWlnaHQKKyAgICAgICAgY3JlYXRlIHF1aXRlIGEgYml0IG9mIGxvZyB0cmFmZmljIG9uIG1hY2hpbmVzIHdpdGggdW5zdGFibGUKKyAgICAgICAgbGlua3MuIChTZWUgIzYwKSAqLworCisgICAgICAgIGlmIChlcnJubyAhPSBFQUdBSU4pCisgICAgICAgICAgICBhdmFoaV9sb2dfd2FybigicmVjdm1zZygpOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIC8qIEZvciBjb3JydXB0IHBhY2tldHMgRklPTlJFQUQgcmV0dXJucyB6ZXJvIHNpemUgKFNlZSByaGJ6ICM2MDcyOTcpLiBTbworICAgICAqIGZhaWwgYWZ0ZXIgaGF2aW5nIHJlYWQgdGhlbS4gKi8KKyAgICBpZiAoIW1zKQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICBhc3NlcnQoIShtc2cubXNnX2ZsYWdzICYgTVNHX0NUUlVOQykpOworICAgIGFzc2VydCghKG1zZy5tc2dfZmxhZ3MgJiBNU0dfVFJVTkMpKTsKKworICAgIHAtPnNpemUgPSAoc2l6ZV90KSBsOworCisgICAgaWYgKHJldF9zcmNfcG9ydCkKKyAgICAgICAgKnJldF9zcmNfcG9ydCA9IGF2YWhpX3BvcnRfZnJvbV9zb2NrYWRkcigoc3RydWN0IHNvY2thZGRyKikgJnNhKTsKKworICAgIGlmIChyZXRfc3JjX2FkZHJlc3MpIHsKKyAgICAgICAgQXZhaGlBZGRyZXNzIGE7CisgICAgICAgIGF2YWhpX2FkZHJlc3NfZnJvbV9zb2NrYWRkcigoc3RydWN0IHNvY2thZGRyKikgJnNhLCAmYSk7CisgICAgICAgICpyZXRfc3JjX2FkZHJlc3MgPSBhLmRhdGEuaXB2NjsKKyAgICB9CisKKyAgICBmb3IgKGNtc2cgPSBDTVNHX0ZJUlNUSERSKCZtc2cpOyBjbXNnICE9IE5VTEw7IGNtc2cgPSBDTVNHX05YVEhEUigmbXNnLCBjbXNnKSkgeworCisgICAgICAgIGlmIChjbXNnLT5jbXNnX2xldmVsID09IElQUFJPVE9fSVBWNikgeworCisgICAgICAgICAgICBzd2l0Y2ggKGNtc2ctPmNtc2dfdHlwZSkgeworCisgICAgICAgICAgICAgICAgY2FzZSBJUFY2X0hPUExJTUlUOgorCisgICAgICAgICAgICAgICAgICAgIGlmIChyZXRfdHRsKQorICAgICAgICAgICAgICAgICAgICAgICAgKnJldF90dGwgPSAodWludDhfdCkgKCooaW50ICopIENNU0dfREFUQShjbXNnKSk7CisKKyAgICAgICAgICAgICAgICAgICAgZm91bmRfdHRsID0gMTsKKworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgSVBWNl9QS1RJTkZPOiB7CisgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpbjZfcGt0aW5mbyAqaSA9IChzdHJ1Y3QgaW42X3BrdGluZm8qKSBDTVNHX0RBVEEoY21zZyk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJldF9pZmFjZSAmJiBpLT5pcGk2X2lmaW5kZXggPiAwKQorICAgICAgICAgICAgICAgICAgICAgICAgKnJldF9pZmFjZSA9IGktPmlwaTZfaWZpbmRleDsKKworICAgICAgICAgICAgICAgICAgICBpZiAocmV0X2RzdF9hZGRyZXNzKQorICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KHJldF9kc3RfYWRkcmVzcy0+YWRkcmVzcywgaS0+aXBpNl9hZGRyLnM2X2FkZHIsIDE2KTsKKworICAgICAgICAgICAgICAgICAgICBmb3VuZF9pZmFjZSA9IDE7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGF2YWhpX2xvZ193YXJuKCJVbmhhbmRsZWQgY21zZ190eXBlOiAlZCIsIGNtc2ctPmNtc2dfdHlwZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgYXNzZXJ0KGZvdW5kX2lmYWNlKTsKKyAgICBhc3NlcnQoZm91bmRfdHRsKTsKKworICAgIHJldHVybiBwOworCitmYWlsOgorICAgIGlmIChwKQorICAgICAgICBhdmFoaV9kbnNfcGFja2V0X2ZyZWUocCk7CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworaW50IGF2YWhpX29wZW5fdW5pY2FzdF9zb2NrZXRfaXB2NCh2b2lkKSB7CisgICAgc3RydWN0IHNvY2thZGRyX2luIGxvY2FsOworICAgIGludCBmZCA9IC0xOworCisgICAgaWYgKChmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCAwKSkgPCAwKSB7CisgICAgICAgIGF2YWhpX2xvZ193YXJuKCJzb2NrZXQoKSBmYWlsZWQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIG1lbXNldCgmbG9jYWwsIDAsIHNpemVvZihsb2NhbCkpOworICAgIGxvY2FsLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCisgICAgaWYgKGJpbmQoZmQsIChzdHJ1Y3Qgc29ja2FkZHIqKSAmbG9jYWwsIHNpemVvZihsb2NhbCkpIDwgMCkgeworICAgICAgICBhdmFoaV9sb2dfd2FybigiYmluZCgpIGZhaWxlZDogJXMiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKGlwdjRfcGt0aW5mbyhmZCkgPCAwKSB7CisgICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKGF2YWhpX3NldF9jbG9leGVjKGZkKSA8IDApIHsKKyAgICAgICAgYXZhaGlfbG9nX3dhcm4oIkZEX0NMT0VYRUMgZmFpbGVkOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBpZiAoYXZhaGlfc2V0X25vbmJsb2NrKGZkKSA8IDApIHsKKyAgICAgICAgYXZhaGlfbG9nX3dhcm4oIk9fTk9OQkxPQ0sgZmFpbGVkOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICByZXR1cm4gZmQ7CisKK2ZhaWw6CisgICAgaWYgKGZkID49IDApCisgICAgICAgIGNsb3NlKGZkKTsKKworICAgIHJldHVybiAtMTsKK30KKworaW50IGF2YWhpX29wZW5fdW5pY2FzdF9zb2NrZXRfaXB2Nih2b2lkKSB7CisgICAgc3RydWN0IHNvY2thZGRyX2luNiBsb2NhbDsKKyAgICBpbnQgZmQgPSAtMSwgeWVzOworCisgICAgaWYgKChmZCA9IHNvY2tldChBRl9JTkVUNiwgU09DS19ER1JBTSwgMCkpIDwgMCkgeworICAgICAgICBhdmFoaV9sb2dfd2Fybigic29ja2V0KCkgZmFpbGVkOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICB5ZXMgPSAxOworICAgIGlmIChzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX0lQVjYsIElQVjZfVjZPTkxZLCAmeWVzLCBzaXplb2YoeWVzKSkgPCAwKSB7CisgICAgICAgIGF2YWhpX2xvZ193YXJuKCJJUFY2X1Y2T05MWSBmYWlsZWQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIG1lbXNldCgmbG9jYWwsIDAsIHNpemVvZihsb2NhbCkpOworICAgIGxvY2FsLnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisKKyAgICBpZiAoYmluZChmZCwgKHN0cnVjdCBzb2NrYWRkciopICZsb2NhbCwgc2l6ZW9mKGxvY2FsKSkgPCAwKSB7CisgICAgICAgIGF2YWhpX2xvZ193YXJuKCJiaW5kKCkgZmFpbGVkOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBpZiAoaXB2Nl9wa3RpbmZvKGZkKSA8IDApCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIGlmIChhdmFoaV9zZXRfY2xvZXhlYyhmZCkgPCAwKSB7CisgICAgICAgIGF2YWhpX2xvZ193YXJuKCJGRF9DTE9FWEVDIGZhaWxlZDogJXMiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKGF2YWhpX3NldF9ub25ibG9jayhmZCkgPCAwKSB7CisgICAgICAgIGF2YWhpX2xvZ193YXJuKCJPX05PTkJMT0NLIGZhaWxlZDogJXMiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgcmV0dXJuIGZkOworCitmYWlsOgorICAgIGlmIChmZCA+PSAwKQorICAgICAgICBjbG9zZShmZCk7CisKKyAgICByZXR1cm4gLTE7Cit9CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9zb2NrZXQuaCBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL3NvY2tldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyZjEyZDcKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS9zb2NrZXQuaApAQCAtMCwwICsxLDQ3IEBACisjaWZuZGVmIGZvb3NvY2tldGhmb28KKyNkZWZpbmUgZm9vc29ja2V0aGZvbworCisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorCisjaW5jbHVkZSAiZG5zLmgiCisKKyNkZWZpbmUgQVZBSElfTUROU19QT1JUIDUzNTMKKyNkZWZpbmUgQVZBSElfRE5TX1BPUlQgNTMKKyNkZWZpbmUgQVZBSElfSVBWNF9NQ0FTVF9HUk9VUCAiMjI0LjAuMC4yNTEiCisjZGVmaW5lIEFWQUhJX0lQVjZfTUNBU1RfR1JPVVAgImZmMDI6OmZiIgorCitpbnQgYXZhaGlfb3Blbl9zb2NrZXRfaXB2NChpbnQgbm9fcmV1c2UpOworaW50IGF2YWhpX29wZW5fc29ja2V0X2lwdjYoaW50IG5vX3JldXNlKTsKKworaW50IGF2YWhpX29wZW5fdW5pY2FzdF9zb2NrZXRfaXB2NCh2b2lkKTsKK2ludCBhdmFoaV9vcGVuX3VuaWNhc3Rfc29ja2V0X2lwdjYodm9pZCk7CisKK2ludCBhdmFoaV9zZW5kX2Ruc19wYWNrZXRfaXB2NChpbnQgZmQsIEF2YWhpSWZJbmRleCBpZmFjZSwgQXZhaGlEbnNQYWNrZXQgKnAsIGNvbnN0IEF2YWhpSVB2NEFkZHJlc3MgKnNyY19hZGRyZXNzLCBjb25zdCBBdmFoaUlQdjRBZGRyZXNzICpkc3RfYWRkcmVzcywgdWludDE2X3QgZHN0X3BvcnQpOworaW50IGF2YWhpX3NlbmRfZG5zX3BhY2tldF9pcHY2KGludCBmZCwgQXZhaGlJZkluZGV4IGlmYWNlLCBBdmFoaURuc1BhY2tldCAqcCwgY29uc3QgQXZhaGlJUHY2QWRkcmVzcyAqc3JjX2FkZHJlc3MsIGNvbnN0IEF2YWhpSVB2NkFkZHJlc3MgKmRzdF9hZGRyZXNzLCB1aW50MTZfdCBkc3RfcG9ydCk7CisKK0F2YWhpRG5zUGFja2V0ICphdmFoaV9yZWN2X2Ruc19wYWNrZXRfaXB2NChpbnQgZmQsIEF2YWhpSVB2NEFkZHJlc3MgKnJldF9zcmNfYWRkcmVzcywgdWludDE2X3QgKnJldF9zcmNfcG9ydCwgQXZhaGlJUHY0QWRkcmVzcyAqcmV0X2RzdF9hZGRyZXNzLCBBdmFoaUlmSW5kZXggKnJldF9pZmFjZSwgdWludDhfdCAqcmV0X3R0bCk7CitBdmFoaURuc1BhY2tldCAqYXZhaGlfcmVjdl9kbnNfcGFja2V0X2lwdjYoaW50IGZkLCBBdmFoaUlQdjZBZGRyZXNzICpyZXRfc3JjX2FkZHJlc3MsIHVpbnQxNl90ICpyZXRfc3JjX3BvcnQsIEF2YWhpSVB2NkFkZHJlc3MgKnJldF9kc3RfYWRkcmVzcywgQXZhaGlJZkluZGV4ICpyZXRfaWZhY2UsIHVpbnQ4X3QgKnJldF90dGwpOworCitpbnQgYXZhaGlfbWRuc19tY2FzdF9qb2luX2lwdjQoaW50IGZkLCBjb25zdCBBdmFoaUlQdjRBZGRyZXNzICpsb2NhbF9hZGRyZXNzLCBpbnQgaWZhY2UsIGludCBqb2luKTsKK2ludCBhdmFoaV9tZG5zX21jYXN0X2pvaW5faXB2NihpbnQgZmQsIGNvbnN0IEF2YWhpSVB2NkFkZHJlc3MgKmxvY2FsX2FkZHJlc3MsIGludCBpZmFjZSwgaW50IGpvaW4pOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL3RpbWVldmVudHEtdGVzdC5jIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvdGltZWV2ZW50cS10ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdiMmUzOQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL3RpbWVldmVudHEtdGVzdC5jCkBAIC0wLDAgKzEsNjcgQEAKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vdGltZXZhbC5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9zaW1wbGUtd2F0Y2guaD4KKworI2luY2x1ZGUgInRpbWVldmVudHEuaCIKKyNpbmNsdWRlICJsb2cuaCIKKworI2RlZmluZSBQT0lOVEVSX1RPX0lOVChwKSAoKGludCkgKGxvbmcpIChwKSkKKyNkZWZpbmUgSU5UX1RPX1BPSU5URVIoaSkgKCh2b2lkKikgKGxvbmcpIChpKSkKKworc3RhdGljIEF2YWhpVGltZUV2ZW50UXVldWUgKnEgPSBOVUxMOworCitzdGF0aWMgdm9pZCBjYWxsYmFjayhBdmFoaVRpbWVFdmVudCplLCB2b2lkKiB1c2VyZGF0YSkgeworICAgIHN0cnVjdCB0aW1ldmFsIHR2ID0gezAsIDB9OworICAgIGFzc2VydChlKTsKKyAgICBhdmFoaV9sb2dfaW5mbygiY2FsbGJhY2soJWkpIiwgUE9JTlRFUl9UT19JTlQodXNlcmRhdGEpKTsKKyAgICBhdmFoaV9lbGFwc2VfdGltZSgmdHYsIDEwMDAsIDEwMCk7CisgICAgYXZhaGlfdGltZV9ldmVudF91cGRhdGUoZSwgJnR2KTsKK30KKworaW50IG1haW4oQVZBSElfR0NDX1VOVVNFRCBpbnQgYXJnYywgQVZBSElfR0NDX1VOVVNFRCBjaGFyICphcmd2W10pIHsKKyAgICBzdHJ1Y3QgdGltZXZhbCB0djsKKyAgICBBdmFoaVNpbXBsZVBvbGwgKnM7CisKKyAgICBzID0gYXZhaGlfc2ltcGxlX3BvbGxfbmV3KCk7CisKKyAgICBxID0gYXZhaGlfdGltZV9ldmVudF9xdWV1ZV9uZXcoYXZhaGlfc2ltcGxlX3BvbGxfZ2V0KHMpKTsKKworICAgIGF2YWhpX3RpbWVfZXZlbnRfbmV3KHEsIGF2YWhpX2VsYXBzZV90aW1lKCZ0diwgNTAwMCwgMTAwKSwgY2FsbGJhY2ssIElOVF9UT19QT0lOVEVSKDEpKTsKKyAgICBhdmFoaV90aW1lX2V2ZW50X25ldyhxLCBhdmFoaV9lbGFwc2VfdGltZSgmdHYsIDUwMDAsIDEwMCksIGNhbGxiYWNrLCBJTlRfVE9fUE9JTlRFUigyKSk7CisKKyAgICBhdmFoaV9sb2dfaW5mbygic3RhcnRpbmciKTsKKworICAgIGZvciAoOzspCisgICAgICAgIGlmIChhdmFoaV9zaW1wbGVfcG9sbF9pdGVyYXRlKHMsIC0xKSAhPSAwKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICBhdmFoaV90aW1lX2V2ZW50X3F1ZXVlX2ZyZWUocSk7CisgICAgYXZhaGlfc2ltcGxlX3BvbGxfZnJlZShzKTsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvdGltZWV2ZW50cS5jIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvdGltZWV2ZW50cS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3OTliZjIKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS90aW1lZXZlbnRxLmMKQEAgLTAsMCArMSwyMjUgQEAKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vdGltZXZhbC5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9tYWxsb2MuaD4KKworI2luY2x1ZGUgInRpbWVldmVudHEuaCIKKyNpbmNsdWRlICJsb2cuaCIKKworc3RydWN0IEF2YWhpVGltZUV2ZW50IHsKKyAgICBBdmFoaVRpbWVFdmVudFF1ZXVlICpxdWV1ZTsKKyAgICBBdmFoaVByaW9RdWV1ZU5vZGUgKm5vZGU7CisgICAgc3RydWN0IHRpbWV2YWwgZXhwaXJ5OworICAgIHN0cnVjdCB0aW1ldmFsIGxhc3RfcnVuOworICAgIEF2YWhpVGltZUV2ZW50Q2FsbGJhY2sgY2FsbGJhY2s7CisgICAgdm9pZCogdXNlcmRhdGE7Cit9OworCitzdHJ1Y3QgQXZhaGlUaW1lRXZlbnRRdWV1ZSB7CisgICAgY29uc3QgQXZhaGlQb2xsICpwb2xsX2FwaTsKKyAgICBBdmFoaVByaW9RdWV1ZSAqcHJpb3E7CisgICAgQXZhaGlUaW1lb3V0ICp0aW1lb3V0OworfTsKKworc3RhdGljIGludCBjb21wYXJlKGNvbnN0IHZvaWQqIF9hLCBjb25zdCB2b2lkKiBfYikgeworICAgIGNvbnN0IEF2YWhpVGltZUV2ZW50ICphID0gX2EsICAqYiA9IF9iOworICAgIGludCByZXQ7CisKKyAgICBpZiAoKHJldCA9IGF2YWhpX3RpbWV2YWxfY29tcGFyZSgmYS0+ZXhwaXJ5LCAmYi0+ZXhwaXJ5KSkgIT0gMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIC8qIElmIGJvdGggZXhldmVudHMgYXJlIHNjaGVkdWxlZCBmb3IgdGhlIHNhbWUgdGltZSwgcHV0IHRoZSBlbnRyeQorICAgICAqIHRoYXQgaGFzIGJlZW4gcnVuIGVhcmxpZXIgdGhlIGxhc3QgdGltZSBmaXJzdC4gKi8KKyAgICByZXR1cm4gYXZhaGlfdGltZXZhbF9jb21wYXJlKCZhLT5sYXN0X3J1biwgJmItPmxhc3RfcnVuKTsKK30KKworc3RhdGljIEF2YWhpVGltZUV2ZW50KiB0aW1lX2V2ZW50X3F1ZXVlX3Jvb3QoQXZhaGlUaW1lRXZlbnRRdWV1ZSAqcSkgeworICAgIGFzc2VydChxKTsKKworICAgIHJldHVybiBxLT5wcmlvcS0+cm9vdCA/IHEtPnByaW9xLT5yb290LT5kYXRhIDogTlVMTDsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX3RpbWVvdXQoQXZhaGlUaW1lRXZlbnRRdWV1ZSAqcSkgeworICAgIEF2YWhpVGltZUV2ZW50ICplOworICAgIGFzc2VydChxKTsKKworICAgIGlmICgoZSA9IHRpbWVfZXZlbnRfcXVldWVfcm9vdChxKSkpCisgICAgICAgIHEtPnBvbGxfYXBpLT50aW1lb3V0X3VwZGF0ZShxLT50aW1lb3V0LCAmZS0+ZXhwaXJ5KTsKKyAgICBlbHNlCisgICAgICAgIHEtPnBvbGxfYXBpLT50aW1lb3V0X3VwZGF0ZShxLT50aW1lb3V0LCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgZXhwaXJhdGlvbl9ldmVudChBVkFISV9HQ0NfVU5VU0VEIEF2YWhpVGltZW91dCAqdGltZW91dCwgdm9pZCAqdXNlcmRhdGEpIHsKKyAgICBBdmFoaVRpbWVFdmVudFF1ZXVlICpxID0gdXNlcmRhdGE7CisgICAgQXZhaGlUaW1lRXZlbnQgKmU7CisKKyAgICBpZiAoKGUgPSB0aW1lX2V2ZW50X3F1ZXVlX3Jvb3QocSkpKSB7CisgICAgICAgIHN0cnVjdCB0aW1ldmFsIG5vdzsKKworICAgICAgICBnZXR0aW1lb2ZkYXkoJm5vdywgTlVMTCk7CisKKyAgICAgICAgLyogQ2hlY2sgaWYgZXhwaXJlZCAqLworICAgICAgICBpZiAoYXZhaGlfdGltZXZhbF9jb21wYXJlKCZub3csICZlLT5leHBpcnkpID49IDApIHsKKworICAgICAgICAgICAgLyogTWFrZSBzdXJlIHRvIG1vdmUgdGhlIGVudHJ5IGF3YXkgZnJvbSB0aGUgZnJvbnQgKi8KKyAgICAgICAgICAgIGUtPmxhc3RfcnVuID0gbm93OworICAgICAgICAgICAgYXZhaGlfcHJpb19xdWV1ZV9zaHVmZmxlKHEtPnByaW9xLCBlLT5ub2RlKTsKKworICAgICAgICAgICAgLyogUnVuIGl0ICovCisgICAgICAgICAgICBhc3NlcnQoZS0+Y2FsbGJhY2spOworICAgICAgICAgICAgZS0+Y2FsbGJhY2soZSwgZS0+dXNlcmRhdGEpOworCisgICAgICAgICAgICB1cGRhdGVfdGltZW91dChxKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGF2YWhpX2xvZ19kZWJ1ZyhfX0ZJTEVfXyI6IFN0cmFuZ2UsIGV4cGlyYXRpb25fZXZlbnQoKSBjYWxsZWQsIGJ1dCBub3RoaW5nIHJlYWxseSBoYXBwZW5lZC4iKTsKKyAgICB1cGRhdGVfdGltZW91dChxKTsKK30KKworc3RhdGljIHZvaWQgZml4X2V4cGlyeV90aW1lKEF2YWhpVGltZUV2ZW50ICplKSB7CisgICAgc3RydWN0IHRpbWV2YWwgbm93OworICAgIGFzc2VydChlKTsKKworICAgIHJldHVybjsgLyoqKiBETyBXRSBSRUFMTFkgTkVFRCBUSElTPyAqKiovCisKKyAgICBnZXR0aW1lb2ZkYXkoJm5vdywgTlVMTCk7CisKKyAgICBpZiAoYXZhaGlfdGltZXZhbF9jb21wYXJlKCZub3csICZlLT5leHBpcnkpID4gMCkKKyAgICAgICAgZS0+ZXhwaXJ5ID0gbm93OworfQorCitBdmFoaVRpbWVFdmVudFF1ZXVlKiBhdmFoaV90aW1lX2V2ZW50X3F1ZXVlX25ldyhjb25zdCBBdmFoaVBvbGwgKnBvbGxfYXBpKSB7CisgICAgQXZhaGlUaW1lRXZlbnRRdWV1ZSAqcTsKKworICAgIGlmICghKHEgPSBhdmFoaV9uZXcoQXZhaGlUaW1lRXZlbnRRdWV1ZSwgMSkpKSB7CisgICAgICAgIGF2YWhpX2xvZ19lcnJvcihfX0ZJTEVfXyI6IE91dCBvZiBtZW1vcnkiKTsKKyAgICAgICAgZ290byBvb207CisgICAgfQorCisgICAgcS0+cG9sbF9hcGkgPSBwb2xsX2FwaTsKKworICAgIGlmICghKHEtPnByaW9xID0gYXZhaGlfcHJpb19xdWV1ZV9uZXcoY29tcGFyZSkpKQorICAgICAgICBnb3RvIG9vbTsKKworICAgIGlmICghKHEtPnRpbWVvdXQgPSBwb2xsX2FwaS0+dGltZW91dF9uZXcocG9sbF9hcGksIE5VTEwsIGV4cGlyYXRpb25fZXZlbnQsIHEpKSkKKyAgICAgICAgZ290byBvb207CisKKyAgICByZXR1cm4gcTsKKworb29tOgorCisgICAgaWYgKHEpIHsKKyAgICAgICAgYXZhaGlfZnJlZShxKTsKKworICAgICAgICBpZiAocS0+cHJpb3EpCisgICAgICAgICAgICBhdmFoaV9wcmlvX3F1ZXVlX2ZyZWUocS0+cHJpb3EpOworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCit2b2lkIGF2YWhpX3RpbWVfZXZlbnRfcXVldWVfZnJlZShBdmFoaVRpbWVFdmVudFF1ZXVlICpxKSB7CisgICAgQXZhaGlUaW1lRXZlbnQgKmU7CisKKyAgICBhc3NlcnQocSk7CisKKyAgICB3aGlsZSAoKGUgPSB0aW1lX2V2ZW50X3F1ZXVlX3Jvb3QocSkpKQorICAgICAgICBhdmFoaV90aW1lX2V2ZW50X2ZyZWUoZSk7CisgICAgYXZhaGlfcHJpb19xdWV1ZV9mcmVlKHEtPnByaW9xKTsKKworICAgIHEtPnBvbGxfYXBpLT50aW1lb3V0X2ZyZWUocS0+dGltZW91dCk7CisKKyAgICBhdmFoaV9mcmVlKHEpOworfQorCitBdmFoaVRpbWVFdmVudCogYXZhaGlfdGltZV9ldmVudF9uZXcoCisgICAgQXZhaGlUaW1lRXZlbnRRdWV1ZSAqcSwKKyAgICBjb25zdCBzdHJ1Y3QgdGltZXZhbCAqdGltZXZhbCwKKyAgICBBdmFoaVRpbWVFdmVudENhbGxiYWNrIGNhbGxiYWNrLAorICAgIHZvaWQqIHVzZXJkYXRhKSB7CisKKyAgICBBdmFoaVRpbWVFdmVudCAqZTsKKworICAgIGFzc2VydChxKTsKKyAgICBhc3NlcnQoY2FsbGJhY2spOworICAgIGFzc2VydCh1c2VyZGF0YSk7CisKKyAgICBpZiAoIShlID0gYXZhaGlfbmV3KEF2YWhpVGltZUV2ZW50LCAxKSkpIHsKKyAgICAgICAgYXZhaGlfbG9nX2Vycm9yKF9fRklMRV9fIjogT3V0IG9mIG1lbW9yeSIpOworICAgICAgICByZXR1cm4gTlVMTDsgLyogT09NICovCisgICAgfQorCisgICAgZS0+cXVldWUgPSBxOworICAgIGUtPmNhbGxiYWNrID0gY2FsbGJhY2s7CisgICAgZS0+dXNlcmRhdGEgPSB1c2VyZGF0YTsKKworICAgIGlmICh0aW1ldmFsKQorICAgICAgICBlLT5leHBpcnkgPSAqdGltZXZhbDsKKyAgICBlbHNlIHsKKyAgICAgICAgZS0+ZXhwaXJ5LnR2X3NlYyA9IDA7CisgICAgICAgIGUtPmV4cGlyeS50dl91c2VjID0gMDsKKyAgICB9CisKKyAgICBmaXhfZXhwaXJ5X3RpbWUoZSk7CisKKyAgICBlLT5sYXN0X3J1bi50dl9zZWMgPSAwOworICAgIGUtPmxhc3RfcnVuLnR2X3VzZWMgPSAwOworCisgICAgaWYgKCEoZS0+bm9kZSA9IGF2YWhpX3ByaW9fcXVldWVfcHV0KHEtPnByaW9xLCBlKSkpIHsKKyAgICAgICAgYXZhaGlfZnJlZShlKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgdXBkYXRlX3RpbWVvdXQocSk7CisgICAgcmV0dXJuIGU7Cit9CisKK3ZvaWQgYXZhaGlfdGltZV9ldmVudF9mcmVlKEF2YWhpVGltZUV2ZW50ICplKSB7CisgICAgQXZhaGlUaW1lRXZlbnRRdWV1ZSAqcTsKKyAgICBhc3NlcnQoZSk7CisKKyAgICBxID0gZS0+cXVldWU7CisKKyAgICBhdmFoaV9wcmlvX3F1ZXVlX3JlbW92ZShxLT5wcmlvcSwgZS0+bm9kZSk7CisgICAgYXZhaGlfZnJlZShlKTsKKworICAgIHVwZGF0ZV90aW1lb3V0KHEpOworfQorCit2b2lkIGF2YWhpX3RpbWVfZXZlbnRfdXBkYXRlKEF2YWhpVGltZUV2ZW50ICplLCBjb25zdCBzdHJ1Y3QgdGltZXZhbCAqdGltZXZhbCkgeworICAgIGFzc2VydChlKTsKKyAgICBhc3NlcnQodGltZXZhbCk7CisKKyAgICBlLT5leHBpcnkgPSAqdGltZXZhbDsKKyAgICBmaXhfZXhwaXJ5X3RpbWUoZSk7CisgICAgYXZhaGlfcHJpb19xdWV1ZV9zaHVmZmxlKGUtPnF1ZXVlLT5wcmlvcSwgZS0+bm9kZSk7CisKKyAgICB1cGRhdGVfdGltZW91dChlLT5xdWV1ZSk7Cit9CisKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL3RpbWVldmVudHEuaCBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL3RpbWVldmVudHEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjk1YjZhCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvdGltZWV2ZW50cS5oCkBAIC0wLDAgKzEsNDYgQEAKKyNpZm5kZWYgZm9vdGltZWV2ZW50cWhmb28KKyNkZWZpbmUgZm9vdGltZWV2ZW50cWhmb28KKworLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKK3R5cGVkZWYgc3RydWN0IEF2YWhpVGltZUV2ZW50UXVldWUgQXZhaGlUaW1lRXZlbnRRdWV1ZTsKK3R5cGVkZWYgc3RydWN0IEF2YWhpVGltZUV2ZW50IEF2YWhpVGltZUV2ZW50OworCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL3dhdGNoLmg+CisKKyNpbmNsdWRlICJwcmlvcS5oIgorCit0eXBlZGVmIHZvaWQgKCpBdmFoaVRpbWVFdmVudENhbGxiYWNrKShBdmFoaVRpbWVFdmVudCAqZSwgdm9pZCogdXNlcmRhdGEpOworCitBdmFoaVRpbWVFdmVudFF1ZXVlKiBhdmFoaV90aW1lX2V2ZW50X3F1ZXVlX25ldyhjb25zdCBBdmFoaVBvbGwgKnBvbGxfYXBpKTsKK3ZvaWQgYXZhaGlfdGltZV9ldmVudF9xdWV1ZV9mcmVlKEF2YWhpVGltZUV2ZW50UXVldWUgKnEpOworCitBdmFoaVRpbWVFdmVudCogYXZhaGlfdGltZV9ldmVudF9uZXcoCisgICAgQXZhaGlUaW1lRXZlbnRRdWV1ZSAqcSwKKyAgICBjb25zdCBzdHJ1Y3QgdGltZXZhbCAqdGltZXZhbCwKKyAgICBBdmFoaVRpbWVFdmVudENhbGxiYWNrIGNhbGxiYWNrLAorICAgIHZvaWQqIHVzZXJkYXRhKTsKKwordm9pZCBhdmFoaV90aW1lX2V2ZW50X2ZyZWUoQXZhaGlUaW1lRXZlbnQgKmUpOwordm9pZCBhdmFoaV90aW1lX2V2ZW50X3VwZGF0ZShBdmFoaVRpbWVFdmVudCAqZSwgY29uc3Qgc3RydWN0IHRpbWV2YWwgKnRpbWV2YWwpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL3VwZGF0ZS10ZXN0LmMgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS91cGRhdGUtdGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlYjg4NGEKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS91cGRhdGUtdGVzdC5jCkBAIC0wLDAgKzEsOTEgQEAKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vZXJyb3IuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vd2F0Y2guaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vc2ltcGxlLXdhdGNoLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL21hbGxvYy5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9hbHRlcm5hdGl2ZS5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi90aW1ldmFsLmg+CisKKyNpbmNsdWRlIDxhdmFoaS1jb3JlL2NvcmUuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb3JlL2xvZy5oPgorI2luY2x1ZGUgPGF2YWhpLWNvcmUvcHVibGlzaC5oPgorI2luY2x1ZGUgPGF2YWhpLWNvcmUvbG9va3VwLmg+CisKK3N0YXRpYyBBdmFoaVNFbnRyeUdyb3VwICpncm91cCA9IE5VTEw7CisKK3N0YXRpYyB2b2lkIHNlcnZlcl9jYWxsYmFjayhBdmFoaVNlcnZlciAqcywgQXZhaGlTZXJ2ZXJTdGF0ZSBzdGF0ZSwgQVZBSElfR0NDX1VOVVNFRCB2b2lkKiB1c2VyZGF0YSkgeworCisgICAgYXZhaGlfbG9nX2RlYnVnKCJzZXJ2ZXIgc3RhdGU6ICVpIiwgc3RhdGUpOworCisgICAgaWYgKHN0YXRlID09IEFWQUhJX1NFUlZFUl9SVU5OSU5HKSB7CisgICAgICAgIGludCByZXQ7CisKKyAgICAgICAgZ3JvdXAgPSBhdmFoaV9zX2VudHJ5X2dyb3VwX25ldyhzLCBOVUxMLCBOVUxMKTsKKyAgICAgICAgYXNzZXJ0KGdyb3VwKTsKKworICAgICAgICByZXQgPSBhdmFoaV9zZXJ2ZXJfYWRkX3NlcnZpY2UocywgZ3JvdXAsIEFWQUhJX0lGX1VOU1BFQywgQVZBSElfUFJPVE9fVU5TUEVDLCAwLCAiZm9vIiwgIl9odHRwLl90Y3AiLCBOVUxMLCBOVUxMLCA4MCwgInRlc3QxIiwgTlVMTCk7CisgICAgICAgIGFzc2VydChyZXQgPT0gQVZBSElfT0spOworCisgICAgICAgIGF2YWhpX3NfZW50cnlfZ3JvdXBfY29tbWl0KGdyb3VwKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIG1vZGlmeV90eHRfY2FsbGJhY2soQVZBSElfR0NDX1VOVVNFRCBBdmFoaVRpbWVvdXQgKmUsIHZvaWQgKnVzZXJkYXRhKSB7CisgICAgaW50IHJldDsKKyAgICBBdmFoaVNlcnZlciAqcyA9IHVzZXJkYXRhOworCisgICAgYXZhaGlfbG9nX2RlYnVnKCJtb2RpZnlpbmciKTsKKworICAgIHJldCA9IGF2YWhpX3NlcnZlcl91cGRhdGVfc2VydmljZV90eHQocywgZ3JvdXAsIEFWQUhJX0lGX1VOU1BFQywgQVZBSElfUFJPVE9fVU5TUEVDLCAwLCAiZm9vIiwgIl9odHRwLl90Y3AiLCBOVUxMLCAidGVzdDIiLCBOVUxMKTsKKyAgICBhc3NlcnQocmV0ID09IEFWQUhJX09LKTsKK30KKworaW50IG1haW4oQVZBSElfR0NDX1VOVVNFRCBpbnQgYXJnYywgQVZBSElfR0NDX1VOVVNFRCBjaGFyICphcmd2W10pIHsKKyAgICBBdmFoaVNpbXBsZVBvbGwgKnNpbXBsZV9wb2xsOworICAgIGNvbnN0IEF2YWhpUG9sbCAqcG9sbF9hcGk7CisgICAgQXZhaGlTZXJ2ZXIgKnNlcnZlcjsKKyAgICBzdHJ1Y3QgdGltZXZhbCB0djsKKyAgICBBdmFoaVNlcnZlckNvbmZpZyBjb25maWc7CisKKyAgICBzaW1wbGVfcG9sbCA9IGF2YWhpX3NpbXBsZV9wb2xsX25ldygpOworICAgIGFzc2VydChzaW1wbGVfcG9sbCk7CisKKyAgICBwb2xsX2FwaSA9IGF2YWhpX3NpbXBsZV9wb2xsX2dldChzaW1wbGVfcG9sbCk7CisgICAgYXNzZXJ0KHBvbGxfYXBpKTsKKworICAgIGF2YWhpX3NlcnZlcl9jb25maWdfaW5pdCgmY29uZmlnKTsKKyAgICBjb25maWcucHVibGlzaF9kb21haW4gPSBjb25maWcucHVibGlzaF93b3Jrc3RhdGlvbiA9IGNvbmZpZy51c2VfaXB2NiA9IGNvbmZpZy5wdWJsaXNoX2hpbmZvID0gMDsKKyAgICBzZXJ2ZXIgPSBhdmFoaV9zZXJ2ZXJfbmV3KHBvbGxfYXBpLCAmY29uZmlnLCBzZXJ2ZXJfY2FsbGJhY2ssIE5VTEwsIE5VTEwpOworICAgIGFzc2VydChzZXJ2ZXIpOworICAgIGF2YWhpX3NlcnZlcl9jb25maWdfZnJlZSgmY29uZmlnKTsKKworICAgIHBvbGxfYXBpLT50aW1lb3V0X25ldyhwb2xsX2FwaSwgYXZhaGlfZWxhcHNlX3RpbWUoJnR2LCAxMDAwKjEwLCAwKSwgbW9kaWZ5X3R4dF9jYWxsYmFjaywgc2VydmVyKTsKKworICAgIGF2YWhpX3NpbXBsZV9wb2xsX2xvb3Aoc2ltcGxlX3BvbGwpOworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvdXRpbC5jIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvdXRpbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZWY5NGMKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS91dGlsLmMKQEAgLTAsMCArMSwxMjAgQEAKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL21hbGxvYy5oPgorI2luY2x1ZGUgInV0aWwuaCIKKwordm9pZCBhdmFoaV9oZXhkdW1wKGNvbnN0IHZvaWQqIHAsIHNpemVfdCBzaXplKSB7CisgICAgY29uc3QgdWludDhfdCAqYyA9IHA7CisgICAgYXNzZXJ0KHApOworCisgICAgcHJpbnRmKCJEdW1waW5nICVsdSBieXRlcyBmcm9tICVwOlxuIiwgKHVuc2lnbmVkIGxvbmcpIHNpemUsIHApOworCisgICAgd2hpbGUgKHNpemUgPiAwKSB7CisgICAgICAgIHVuc2lnbmVkIGk7CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKyAgICAgICAgICAgIGlmIChpIDwgc2l6ZSkKKyAgICAgICAgICAgICAgICBwcmludGYoIiUwMnggIiwgY1tpXSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcHJpbnRmKCIgICAiKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisgICAgICAgICAgICBpZiAoaSA8IHNpemUpCisgICAgICAgICAgICAgICAgcHJpbnRmKCIlYyIsIGNbaV0gPj0gMzIgJiYgY1tpXSA8IDEyNyA/IGNbaV0gOiAnLicpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHByaW50ZigiICIpOworICAgICAgICB9CisKKyAgICAgICAgcHJpbnRmKCJcbiIpOworCisgICAgICAgIGMgKz0gMTY7CisKKyAgICAgICAgaWYgKHNpemUgPD0gMTYpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBzaXplIC09IDE2OworICAgIH0KK30KKworY2hhciAqYXZhaGlfZm9ybWF0X21hY19hZGRyZXNzKGNoYXIgKnIsIHNpemVfdCBsLCBjb25zdCB1aW50OF90KiBtYWMsIHNpemVfdCBzaXplKSB7CisgICAgY2hhciAqdCA9IHI7CisgICAgdW5zaWduZWQgaTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciBoZXhbXSA9ICIwMTIzNDU2Nzg5YWJjZGVmIjsKKworICAgIGFzc2VydChyKTsKKyAgICBhc3NlcnQobCA+IDApOworICAgIGFzc2VydChtYWMpOworCisgICAgaWYgKHNpemUgPD0gMCkgeworICAgICAgICAqciA9IDA7CisgICAgICAgIHJldHVybiByOworICAgIH0KKworICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgaWYgKGwgPCAzKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgKih0KyspID0gaGV4WyptYWMgPj4gNF07CisgICAgICAgICoodCsrKSA9IGhleFsqbWFjICYgMHhGXTsKKyAgICAgICAgKih0KyspID0gJzonOworCisgICAgICAgIGwgLT0gMzsKKworICAgICAgICBtYWMrKzsKKyAgICB9CisKKyAgICBpZiAodCA+IHIpCisgICAgICAgICoodC0xKSA9IDA7CisgICAgZWxzZQorICAgICAgICAqciA9IDA7CisKKyAgICByZXR1cm4gcjsKK30KKworY2hhciAqYXZhaGlfc3RydXAoY2hhciAqcykgeworICAgIGNoYXIgKmM7CisgICAgYXNzZXJ0KHMpOworCisgICAgZm9yIChjID0gczsgKmM7IGMrKykKKyAgICAgICAgKmMgPSAoY2hhcikgdG91cHBlcigqYyk7CisKKyAgICByZXR1cm4gczsKK30KKworY2hhciAqYXZhaGlfc3RyZG93bihjaGFyICpzKSB7CisgICAgY2hhciAqYzsKKyAgICBhc3NlcnQocyk7CisKKyAgICBmb3IgKGMgPSBzOyAqYzsgYysrKQorICAgICAgICAqYyA9IChjaGFyKSB0b2xvd2VyKCpjKTsKKworICAgIHJldHVybiBzOworfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvdXRpbC5oIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvdXRpbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxM2MzMzQKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS91dGlsLmgKQEAgLTAsMCArMSw0MSBAQAorI2lmbmRlZiBmb291dGlsaGZvbworI2RlZmluZSBmb291dGlsaGZvbworCisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2NkZWNsLmg+CisKK0FWQUhJX0NfREVDTF9CRUdJTgorCit2b2lkIGF2YWhpX2hleGR1bXAoY29uc3Qgdm9pZCAqcCwgc2l6ZV90IHNpemUpOworCitjaGFyICphdmFoaV9mb3JtYXRfbWFjX2FkZHJlc3MoY2hhciAqdCwgc2l6ZV90IGwsIGNvbnN0IHVpbnQ4X3QqIG1hYywgc2l6ZV90IHNpemUpOworCisvKiogQ2hhbmdlIGV2ZXJ5IGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nIHRvIHVwcGVyIGNhc2UgKEFTQ0lJKSwgcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgc3RyaW5nICovCitjaGFyICphdmFoaV9zdHJ1cChjaGFyICpzKTsKKworLyoqIENoYW5nZSBldmVyeSBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZyB0byBsb3dlciBjYXNlIChBU0NJSSksIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHN0cmluZyAqLworY2hhciAqYXZhaGlfc3RyZG93bihjaGFyICpzKTsKKworQVZBSElfQ19ERUNMX0VORAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL3dpZGUtYXJlYS5jIGIvYXZhaGktMC42LjMxL2F2YWhpLWNvcmUvd2lkZS1hcmVhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVlNjRlNQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL3dpZGUtYXJlYS5jCkBAIC0wLDAgKzEsNzIzIEBACisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL21hbGxvYy5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9lcnJvci5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi90aW1ldmFsLmg+CisKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorI2luY2x1ZGUgImJyb3dzZS5oIgorI2luY2x1ZGUgInNvY2tldC5oIgorI2luY2x1ZGUgImxvZy5oIgorI2luY2x1ZGUgImhhc2htYXAuaCIKKyNpbmNsdWRlICJ3aWRlLWFyZWEuaCIKKyNpbmNsdWRlICJhZGRyLXV0aWwuaCIKKyNpbmNsdWRlICJyci11dGlsLmgiCisKKyNkZWZpbmUgQ0FDSEVfRU5UUklFU19NQVggNTAwCisKK3R5cGVkZWYgc3RydWN0IEF2YWhpV2lkZUFyZWFDYWNoZUVudHJ5IEF2YWhpV2lkZUFyZWFDYWNoZUVudHJ5OworCitzdHJ1Y3QgQXZhaGlXaWRlQXJlYUNhY2hlRW50cnkgeworICAgIEF2YWhpV2lkZUFyZWFMb29rdXBFbmdpbmUgKmVuZ2luZTsKKworICAgIEF2YWhpUmVjb3JkICpyZWNvcmQ7CisgICAgc3RydWN0IHRpbWV2YWwgdGltZXN0YW1wOworICAgIHN0cnVjdCB0aW1ldmFsIGV4cGlyeTsKKworICAgIEF2YWhpVGltZUV2ZW50ICp0aW1lX2V2ZW50OworCisgICAgQVZBSElfTExJU1RfRklFTERTKEF2YWhpV2lkZUFyZWFDYWNoZUVudHJ5LCBieV9rZXkpOworICAgIEFWQUhJX0xMSVNUX0ZJRUxEUyhBdmFoaVdpZGVBcmVhQ2FjaGVFbnRyeSwgY2FjaGUpOworfTsKKworc3RydWN0IEF2YWhpV2lkZUFyZWFMb29rdXAgeworICAgIEF2YWhpV2lkZUFyZWFMb29rdXBFbmdpbmUgKmVuZ2luZTsKKyAgICBpbnQgZGVhZDsKKworICAgIHVpbnQzMl90IGlkOyAgLyogZWZmZWN0aXZlbHkganVzdCBhbiB1aW50MTZfdCwgYnV0IHdlIG5lZWQgaXQgYXMgYW4gaW5kZXggZm9yIGEgaGFzaCB0YWJsZSAqLworICAgIEF2YWhpVGltZUV2ZW50ICp0aW1lX2V2ZW50OworCisgICAgQXZhaGlLZXkgKmtleSwgKmNuYW1lX2tleTsKKworICAgIGludCBuX3NlbmQ7CisgICAgQXZhaGlEbnNQYWNrZXQgKnBhY2tldDsKKworICAgIEF2YWhpV2lkZUFyZWFMb29rdXBDYWxsYmFjayBjYWxsYmFjazsKKyAgICB2b2lkICp1c2VyZGF0YTsKKworICAgIEF2YWhpQWRkcmVzcyBkbnNfc2VydmVyX3VzZWQ7CisKKyAgICBBVkFISV9MTElTVF9GSUVMRFMoQXZhaGlXaWRlQXJlYUxvb2t1cCwgbG9va3Vwcyk7CisgICAgQVZBSElfTExJU1RfRklFTERTKEF2YWhpV2lkZUFyZWFMb29rdXAsIGJ5X2tleSk7Cit9OworCitzdHJ1Y3QgQXZhaGlXaWRlQXJlYUxvb2t1cEVuZ2luZSB7CisgICAgQXZhaGlTZXJ2ZXIgKnNlcnZlcjsKKworICAgIGludCBmZF9pcHY0LCBmZF9pcHY2OworICAgIEF2YWhpV2F0Y2ggKndhdGNoX2lwdjQsICp3YXRjaF9pcHY2OworCisgICAgdWludDE2X3QgbmV4dF9pZDsKKworICAgIC8qIENhY2hlICovCisgICAgQVZBSElfTExJU1RfSEVBRChBdmFoaVdpZGVBcmVhQ2FjaGVFbnRyeSwgY2FjaGUpOworICAgIEF2YWhpSGFzaG1hcCAqY2FjaGVfYnlfa2V5OworICAgIHVuc2lnbmVkIGNhY2hlX25fZW50cmllczsKKworICAgIC8qIExvb2t1cHMgKi8KKyAgICBBVkFISV9MTElTVF9IRUFEKEF2YWhpV2lkZUFyZWFMb29rdXAsIGxvb2t1cHMpOworICAgIEF2YWhpSGFzaG1hcCAqbG9va3Vwc19ieV9pZDsKKyAgICBBdmFoaUhhc2htYXAgKmxvb2t1cHNfYnlfa2V5OworCisgICAgaW50IGNsZWFudXBfZGVhZDsKKworICAgIEF2YWhpQWRkcmVzcyBkbnNfc2VydmVyc1tBVkFISV9XSURFX0FSRUFfU0VSVkVSU19NQVhdOworICAgIHVuc2lnbmVkIG5fZG5zX3NlcnZlcnM7CisgICAgdW5zaWduZWQgY3VycmVudF9kbnNfc2VydmVyOworfTsKKworc3RhdGljIEF2YWhpV2lkZUFyZWFMb29rdXAqIGZpbmRfbG9va3VwKEF2YWhpV2lkZUFyZWFMb29rdXBFbmdpbmUgKmUsIHVpbnQxNl90IGlkKSB7CisgICAgQXZhaGlXaWRlQXJlYUxvb2t1cCAqbDsKKyAgICBpbnQgaSA9IChpbnQpIGlkOworCisgICAgYXNzZXJ0KGUpOworCisgICAgaWYgKCEobCA9IGF2YWhpX2hhc2htYXBfbG9va3VwKGUtPmxvb2t1cHNfYnlfaWQsICZpKSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgYXNzZXJ0KGwtPmlkID09IGlkKTsKKworICAgIGlmIChsLT5kZWFkKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJldHVybiBsOworfQorCitzdGF0aWMgaW50IHNlbmRfdG9fZG5zX3NlcnZlcihBdmFoaVdpZGVBcmVhTG9va3VwICpsLCBBdmFoaURuc1BhY2tldCAqcCkgeworICAgIEF2YWhpQWRkcmVzcyAqYTsKKworICAgIGFzc2VydChsKTsKKyAgICBhc3NlcnQocCk7CisKKyAgICBpZiAobC0+ZW5naW5lLT5uX2Ruc19zZXJ2ZXJzIDw9IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGFzc2VydChsLT5lbmdpbmUtPmN1cnJlbnRfZG5zX3NlcnZlciA8IGwtPmVuZ2luZS0+bl9kbnNfc2VydmVycyk7CisKKyAgICBhID0gJmwtPmVuZ2luZS0+ZG5zX3NlcnZlcnNbbC0+ZW5naW5lLT5jdXJyZW50X2Ruc19zZXJ2ZXJdOworICAgIGwtPmRuc19zZXJ2ZXJfdXNlZCA9ICphOworCisgICAgaWYgKGEtPnByb3RvID09IEFWQUhJX1BST1RPX0lORVQpIHsKKworICAgICAgICBpZiAobC0+ZW5naW5lLT5mZF9pcHY0IDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKworICAgICAgICByZXR1cm4gYXZhaGlfc2VuZF9kbnNfcGFja2V0X2lwdjQobC0+ZW5naW5lLT5mZF9pcHY0LCBBVkFISV9JRl9VTlNQRUMsIHAsIE5VTEwsICZhLT5kYXRhLmlwdjQsIEFWQUhJX0ROU19QT1JUKTsKKworICAgIH0gZWxzZSB7CisgICAgICAgIGFzc2VydChhLT5wcm90byA9PSBBVkFISV9QUk9UT19JTkVUNik7CisKKyAgICAgICAgaWYgKGwtPmVuZ2luZS0+ZmRfaXB2NiA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgcmV0dXJuIGF2YWhpX3NlbmRfZG5zX3BhY2tldF9pcHY2KGwtPmVuZ2luZS0+ZmRfaXB2NiwgQVZBSElfSUZfVU5TUEVDLCBwLCBOVUxMLCAmYS0+ZGF0YS5pcHY2LCBBVkFISV9ETlNfUE9SVCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBuZXh0X2Ruc19zZXJ2ZXIoQXZhaGlXaWRlQXJlYUxvb2t1cEVuZ2luZSAqZSkgeworICAgIGFzc2VydChlKTsKKworICAgIGUtPmN1cnJlbnRfZG5zX3NlcnZlcisrOworCisgICAgaWYgKGUtPmN1cnJlbnRfZG5zX3NlcnZlciA+PSBlLT5uX2Ruc19zZXJ2ZXJzKQorICAgICAgICBlLT5jdXJyZW50X2Ruc19zZXJ2ZXIgPSAwOworfQorCitzdGF0aWMgdm9pZCBsb29rdXBfc3RvcChBdmFoaVdpZGVBcmVhTG9va3VwICpsKSB7CisgICAgYXNzZXJ0KGwpOworCisgICAgbC0+Y2FsbGJhY2sgPSBOVUxMOworCisgICAgaWYgKGwtPnRpbWVfZXZlbnQpIHsKKyAgICAgICAgYXZhaGlfdGltZV9ldmVudF9mcmVlKGwtPnRpbWVfZXZlbnQpOworICAgICAgICBsLT50aW1lX2V2ZW50ID0gTlVMTDsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHNlbmRlcl90aW1lb3V0X2NhbGxiYWNrKEF2YWhpVGltZUV2ZW50ICplLCB2b2lkICp1c2VyZGF0YSkgeworICAgIEF2YWhpV2lkZUFyZWFMb29rdXAgKmwgPSB1c2VyZGF0YTsKKyAgICBzdHJ1Y3QgdGltZXZhbCB0djsKKworICAgIGFzc2VydChsKTsKKworICAgIC8qIFRyeSBhbm90aGVyIEROUyBzZXJ2ZXIgYWZ0ZXIgdGhyZWUgcmV0cmllcyAqLworICAgIGlmIChsLT5uX3NlbmQgPj0gMyAmJiBhdmFoaV9hZGRyZXNzX2NtcCgmbC0+ZW5naW5lLT5kbnNfc2VydmVyc1tsLT5lbmdpbmUtPmN1cnJlbnRfZG5zX3NlcnZlcl0sICZsLT5kbnNfc2VydmVyX3VzZWQpID09IDApIHsKKyAgICAgICAgbmV4dF9kbnNfc2VydmVyKGwtPmVuZ2luZSk7CisKKyAgICAgICAgaWYgKGF2YWhpX2FkZHJlc3NfY21wKCZsLT5lbmdpbmUtPmRuc19zZXJ2ZXJzW2wtPmVuZ2luZS0+Y3VycmVudF9kbnNfc2VydmVyXSwgJmwtPmRuc19zZXJ2ZXJfdXNlZCkgPT0gMCkKKyAgICAgICAgICAgIC8qIFRoZXJlIGlzIG5vIG90aGVyIEROUyBzZXJ2ZXIsIGZhaWwgKi8KKyAgICAgICAgICAgIGwtPm5fc2VuZCA9IDEwMDA7CisgICAgfQorCisgICAgaWYgKGwtPm5fc2VuZCA+PSA2KSB7CisgICAgICAgIGF2YWhpX2xvZ193YXJuKF9fRklMRV9fIjogUXVlcnkgdGltZWQgb3V0LiIpOworICAgICAgICBhdmFoaV9zZXJ2ZXJfc2V0X2Vycm5vKGwtPmVuZ2luZS0+c2VydmVyLCBBVkFISV9FUlJfVElNRU9VVCk7CisgICAgICAgIGwtPmNhbGxiYWNrKGwtPmVuZ2luZSwgQVZBSElfQlJPV1NFUl9GQUlMVVJFLCBBVkFISV9MT09LVVBfUkVTVUxUX1dJREVfQVJFQSwgTlVMTCwgbC0+dXNlcmRhdGEpOworICAgICAgICBsb29rdXBfc3RvcChsKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGFzc2VydChsLT5wYWNrZXQpOworICAgIHNlbmRfdG9fZG5zX3NlcnZlcihsLCBsLT5wYWNrZXQpOworICAgIGwtPm5fc2VuZCsrOworCisgICAgYXZhaGlfdGltZV9ldmVudF91cGRhdGUoZSwgYXZhaGlfZWxhcHNlX3RpbWUoJnR2LCAxMDAwLCAwKSk7Cit9CisKK0F2YWhpV2lkZUFyZWFMb29rdXAgKmF2YWhpX3dpZGVfYXJlYV9sb29rdXBfbmV3KAorICAgIEF2YWhpV2lkZUFyZWFMb29rdXBFbmdpbmUgKmUsCisgICAgQXZhaGlLZXkgKmtleSwKKyAgICBBdmFoaVdpZGVBcmVhTG9va3VwQ2FsbGJhY2sgY2FsbGJhY2ssCisgICAgdm9pZCAqdXNlcmRhdGEpIHsKKworICAgIHN0cnVjdCB0aW1ldmFsIHR2OworICAgIEF2YWhpV2lkZUFyZWFMb29rdXAgKmwsICp0OworICAgIHVpbnQ4X3QgKnA7CisKKyAgICBhc3NlcnQoZSk7CisgICAgYXNzZXJ0KGtleSk7CisgICAgYXNzZXJ0KGNhbGxiYWNrKTsKKyAgICBhc3NlcnQodXNlcmRhdGEpOworCisgICAgbCA9IGF2YWhpX25ldyhBdmFoaVdpZGVBcmVhTG9va3VwLCAxKTsKKyAgICBsLT5lbmdpbmUgPSBlOworICAgIGwtPmRlYWQgPSAwOworICAgIGwtPmtleSA9IGF2YWhpX2tleV9yZWYoa2V5KTsKKyAgICBsLT5jbmFtZV9rZXkgPSBhdmFoaV9rZXlfbmV3X2NuYW1lKGwtPmtleSk7CisgICAgbC0+Y2FsbGJhY2sgPSBjYWxsYmFjazsKKyAgICBsLT51c2VyZGF0YSA9IHVzZXJkYXRhOworCisgICAgLyogSWYgbW9yZSB0aGFuIDY1SyB3aWRlIGFyZWEgcXVyaWVzIGFyZSBpc3N1ZWQgc2ltdWx0YW5lb3VzbHksCisgICAgICogdGhpcyB3aWxsIGJyZWFrLiBUaGlzIHNob3VsZCBiZSBsaW1pdGVkIGJ5IHNvbWUgaGlnaGVyIGxldmVsICovCisKKyAgICBmb3IgKDs7IGUtPm5leHRfaWQrKykKKyAgICAgICAgaWYgKCFmaW5kX2xvb2t1cChlLCBlLT5uZXh0X2lkKSkKKyAgICAgICAgICAgIGJyZWFrOyAvKiBUaGlzIElEIGlzIG5vdCB5ZXQgdXNlZC4gKi8KKworICAgIGwtPmlkID0gZS0+bmV4dF9pZCsrOworCisgICAgLyogV2Uga2VlcCB0aGUgcGFja2V0IGFyb3VuZCBpbiBjYXNlIHdlIG5lZWQgdG8gcmVwZWF0IG91ciBxdWVyeSAqLworICAgIGwtPnBhY2tldCA9IGF2YWhpX2Ruc19wYWNrZXRfbmV3KDApOworCisgICAgYXZhaGlfZG5zX3BhY2tldF9zZXRfZmllbGQobC0+cGFja2V0LCBBVkFISV9ETlNfRklFTERfSUQsICh1aW50MTZfdCkgbC0+aWQpOworICAgIGF2YWhpX2Ruc19wYWNrZXRfc2V0X2ZpZWxkKGwtPnBhY2tldCwgQVZBSElfRE5TX0ZJRUxEX0ZMQUdTLCBBVkFISV9ETlNfRkxBR1MoMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCkpOworCisgICAgcCA9IGF2YWhpX2Ruc19wYWNrZXRfYXBwZW5kX2tleShsLT5wYWNrZXQsIGtleSwgMCk7CisgICAgYXNzZXJ0KHApOworCisgICAgYXZhaGlfZG5zX3BhY2tldF9zZXRfZmllbGQobC0+cGFja2V0LCBBVkFISV9ETlNfRklFTERfUURDT1VOVCwgMSk7CisKKyAgICBpZiAoc2VuZF90b19kbnNfc2VydmVyKGwsIGwtPnBhY2tldCkgPCAwKSB7CisgICAgICAgIGF2YWhpX2xvZ19lcnJvcihfX0ZJTEVfXyI6IEZhaWxlZCB0byBzZW5kIHBhY2tldC4iKTsKKyAgICAgICAgYXZhaGlfZG5zX3BhY2tldF9mcmVlKGwtPnBhY2tldCk7CisgICAgICAgIGF2YWhpX2tleV91bnJlZihsLT5rZXkpOworICAgICAgICBpZiAobC0+Y25hbWVfa2V5KQorICAgICAgICAgICAgYXZhaGlfa2V5X3VucmVmKGwtPmNuYW1lX2tleSk7CisgICAgICAgIGF2YWhpX2ZyZWUobCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGwtPm5fc2VuZCA9IDE7CisKKyAgICBsLT50aW1lX2V2ZW50ID0gYXZhaGlfdGltZV9ldmVudF9uZXcoZS0+c2VydmVyLT50aW1lX2V2ZW50X3F1ZXVlLCBhdmFoaV9lbGFwc2VfdGltZSgmdHYsIDUwMCwgMCksIHNlbmRlcl90aW1lb3V0X2NhbGxiYWNrLCBsKTsKKworICAgIGF2YWhpX2hhc2htYXBfaW5zZXJ0KGUtPmxvb2t1cHNfYnlfaWQsICZsLT5pZCwgbCk7CisKKyAgICB0ID0gYXZhaGlfaGFzaG1hcF9sb29rdXAoZS0+bG9va3Vwc19ieV9rZXksIGwtPmtleSk7CisgICAgQVZBSElfTExJU1RfUFJFUEVORChBdmFoaVdpZGVBcmVhTG9va3VwLCBieV9rZXksIHQsIGwpOworICAgIGF2YWhpX2hhc2htYXBfcmVwbGFjZShlLT5sb29rdXBzX2J5X2tleSwgYXZhaGlfa2V5X3JlZihsLT5rZXkpLCB0KTsKKworICAgIEFWQUhJX0xMSVNUX1BSRVBFTkQoQXZhaGlXaWRlQXJlYUxvb2t1cCwgbG9va3VwcywgZS0+bG9va3VwcywgbCk7CisKKyAgICByZXR1cm4gbDsKK30KKworc3RhdGljIHZvaWQgbG9va3VwX2Rlc3Ryb3koQXZhaGlXaWRlQXJlYUxvb2t1cCAqbCkgeworICAgIEF2YWhpV2lkZUFyZWFMb29rdXAgKnQ7CisgICAgYXNzZXJ0KGwpOworCisgICAgbG9va3VwX3N0b3AobCk7CisKKyAgICB0ID0gYXZhaGlfaGFzaG1hcF9sb29rdXAobC0+ZW5naW5lLT5sb29rdXBzX2J5X2tleSwgbC0+a2V5KTsKKyAgICBBVkFISV9MTElTVF9SRU1PVkUoQXZhaGlXaWRlQXJlYUxvb2t1cCwgYnlfa2V5LCB0LCBsKTsKKyAgICBpZiAodCkKKyAgICAgICAgYXZhaGlfaGFzaG1hcF9yZXBsYWNlKGwtPmVuZ2luZS0+bG9va3Vwc19ieV9rZXksIGF2YWhpX2tleV9yZWYobC0+a2V5KSwgdCk7CisgICAgZWxzZQorICAgICAgICBhdmFoaV9oYXNobWFwX3JlbW92ZShsLT5lbmdpbmUtPmxvb2t1cHNfYnlfa2V5LCBsLT5rZXkpOworCisgICAgQVZBSElfTExJU1RfUkVNT1ZFKEF2YWhpV2lkZUFyZWFMb29rdXAsIGxvb2t1cHMsIGwtPmVuZ2luZS0+bG9va3VwcywgbCk7CisKKyAgICBhdmFoaV9oYXNobWFwX3JlbW92ZShsLT5lbmdpbmUtPmxvb2t1cHNfYnlfaWQsICZsLT5pZCk7CisgICAgYXZhaGlfZG5zX3BhY2tldF9mcmVlKGwtPnBhY2tldCk7CisKKyAgICBpZiAobC0+a2V5KQorICAgICAgICBhdmFoaV9rZXlfdW5yZWYobC0+a2V5KTsKKworICAgIGlmIChsLT5jbmFtZV9rZXkpCisgICAgICAgIGF2YWhpX2tleV91bnJlZihsLT5jbmFtZV9rZXkpOworCisgICAgYXZhaGlfZnJlZShsKTsKK30KKwordm9pZCBhdmFoaV93aWRlX2FyZWFfbG9va3VwX2ZyZWUoQXZhaGlXaWRlQXJlYUxvb2t1cCAqbCkgeworICAgIGFzc2VydChsKTsKKworICAgIGlmIChsLT5kZWFkKQorICAgICAgICByZXR1cm47CisKKyAgICBsLT5kZWFkID0gMTsKKyAgICBsLT5lbmdpbmUtPmNsZWFudXBfZGVhZCA9IDE7CisgICAgbG9va3VwX3N0b3AobCk7Cit9CisKK3ZvaWQgYXZhaGlfd2lkZV9hcmVhX2NsZWFudXAoQXZhaGlXaWRlQXJlYUxvb2t1cEVuZ2luZSAqZSkgeworICAgIEF2YWhpV2lkZUFyZWFMb29rdXAgKmwsICpuOworICAgIGFzc2VydChlKTsKKworICAgIHdoaWxlIChlLT5jbGVhbnVwX2RlYWQpIHsKKyAgICAgICAgZS0+Y2xlYW51cF9kZWFkID0gMDsKKworICAgICAgICBmb3IgKGwgPSBlLT5sb29rdXBzOyBsOyBsID0gbikgeworICAgICAgICAgICAgbiA9IGwtPmxvb2t1cHNfbmV4dDsKKworICAgICAgICAgICAgaWYgKGwtPmRlYWQpCisgICAgICAgICAgICAgICAgbG9va3VwX2Rlc3Ryb3kobCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGNhY2hlX2VudHJ5X2ZyZWUoQXZhaGlXaWRlQXJlYUNhY2hlRW50cnkgKmMpIHsKKyAgICBBdmFoaVdpZGVBcmVhQ2FjaGVFbnRyeSAqdDsKKyAgICBhc3NlcnQoYyk7CisKKyAgICBpZiAoYy0+dGltZV9ldmVudCkKKyAgICAgICAgYXZhaGlfdGltZV9ldmVudF9mcmVlKGMtPnRpbWVfZXZlbnQpOworCisgICAgQVZBSElfTExJU1RfUkVNT1ZFKEF2YWhpV2lkZUFyZWFDYWNoZUVudHJ5LCBjYWNoZSwgYy0+ZW5naW5lLT5jYWNoZSwgYyk7CisKKyAgICB0ID0gYXZhaGlfaGFzaG1hcF9sb29rdXAoYy0+ZW5naW5lLT5jYWNoZV9ieV9rZXksIGMtPnJlY29yZC0+a2V5KTsKKyAgICBBVkFISV9MTElTVF9SRU1PVkUoQXZhaGlXaWRlQXJlYUNhY2hlRW50cnksIGJ5X2tleSwgdCwgYyk7CisgICAgaWYgKHQpCisgICAgICAgIGF2YWhpX2hhc2htYXBfcmVwbGFjZShjLT5lbmdpbmUtPmNhY2hlX2J5X2tleSwgYXZhaGlfa2V5X3JlZihjLT5yZWNvcmQtPmtleSksIHQpOworICAgIGVsc2UKKyAgICAgICAgYXZhaGlfaGFzaG1hcF9yZW1vdmUoYy0+ZW5naW5lLT5jYWNoZV9ieV9rZXksIGMtPnJlY29yZC0+a2V5KTsKKworICAgIGMtPmVuZ2luZS0+Y2FjaGVfbl9lbnRyaWVzIC0tOworCisgICAgYXZhaGlfcmVjb3JkX3VucmVmKGMtPnJlY29yZCk7CisgICAgYXZhaGlfZnJlZShjKTsKK30KKworc3RhdGljIHZvaWQgZXhwaXJ5X2V2ZW50KEF2YWhpVGltZUV2ZW50ICp0ZSwgdm9pZCAqdXNlcmRhdGEpIHsKKyAgICBBdmFoaVdpZGVBcmVhQ2FjaGVFbnRyeSAqZSA9IHVzZXJkYXRhOworCisgICAgYXNzZXJ0KHRlKTsKKyAgICBhc3NlcnQoZSk7CisKKyAgICBjYWNoZV9lbnRyeV9mcmVlKGUpOworfQorCitzdGF0aWMgQXZhaGlXaWRlQXJlYUNhY2hlRW50cnkqIGZpbmRfcmVjb3JkX2luX2NhY2hlKEF2YWhpV2lkZUFyZWFMb29rdXBFbmdpbmUgKmUsIEF2YWhpUmVjb3JkICpyKSB7CisgICAgQXZhaGlXaWRlQXJlYUNhY2hlRW50cnkgKmM7CisKKyAgICBhc3NlcnQoZSk7CisgICAgYXNzZXJ0KHIpOworCisgICAgZm9yIChjID0gYXZhaGlfaGFzaG1hcF9sb29rdXAoZS0+Y2FjaGVfYnlfa2V5LCByLT5rZXkpOyBjOyBjID0gYy0+Ynlfa2V5X25leHQpCisgICAgICAgIGlmIChhdmFoaV9yZWNvcmRfZXF1YWxfbm9fdHRsKHIsIGMtPnJlY29yZCkpCisgICAgICAgICAgICByZXR1cm4gYzsKKworICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBydW5fY2FsbGJhY2tzKEF2YWhpV2lkZUFyZWFMb29rdXBFbmdpbmUgKmUsIEF2YWhpUmVjb3JkICpyKSB7CisgICAgQXZhaGlXaWRlQXJlYUxvb2t1cCAqbDsKKworICAgIGFzc2VydChlKTsKKyAgICBhc3NlcnQocik7CisKKyAgICBmb3IgKGwgPSBhdmFoaV9oYXNobWFwX2xvb2t1cChlLT5sb29rdXBzX2J5X2tleSwgci0+a2V5KTsgbDsgbCA9IGwtPmJ5X2tleV9uZXh0KSB7CisgICAgICAgIGlmIChsLT5kZWFkIHx8ICFsLT5jYWxsYmFjaykKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGwtPmNhbGxiYWNrKGUsIEFWQUhJX0JST1dTRVJfTkVXLCBBVkFISV9MT09LVVBfUkVTVUxUX1dJREVfQVJFQSwgciwgbC0+dXNlcmRhdGEpOworICAgIH0KKworICAgIGlmIChyLT5rZXktPmNsYXp6ID09IEFWQUhJX0ROU19DTEFTU19JTiAmJiByLT5rZXktPnR5cGUgPT0gQVZBSElfRE5TX1RZUEVfQ05BTUUpIHsKKyAgICAgICAgLyogSXQncyBhIENOQU1FIHJlY29yZCwgc28gd2UgaGF2ZSB0byBzY2FuIHRoZSBhbGwgbG9va3VwcyB0byBzZWUgaWYgb25lIG1hdGNoZXMgKi8KKworICAgICAgICBmb3IgKGwgPSBlLT5sb29rdXBzOyBsOyBsID0gbC0+bG9va3Vwc19uZXh0KSB7CisgICAgICAgICAgICBBdmFoaUtleSAqa2V5OworCisgICAgICAgICAgICBpZiAobC0+ZGVhZCB8fCAhbC0+Y2FsbGJhY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGlmICgoa2V5ID0gYXZhaGlfa2V5X25ld19jbmFtZShsLT5rZXkpKSkgeworICAgICAgICAgICAgICAgIGlmIChhdmFoaV9rZXlfZXF1YWwoci0+a2V5LCBrZXkpKQorICAgICAgICAgICAgICAgICAgICBsLT5jYWxsYmFjayhlLCBBVkFISV9CUk9XU0VSX05FVywgQVZBSElfTE9PS1VQX1JFU1VMVF9XSURFX0FSRUEsIHIsIGwtPnVzZXJkYXRhKTsKKworICAgICAgICAgICAgICAgIGF2YWhpX2tleV91bnJlZihrZXkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBhZGRfdG9fY2FjaGUoQXZhaGlXaWRlQXJlYUxvb2t1cEVuZ2luZSAqZSwgQXZhaGlSZWNvcmQgKnIpIHsKKyAgICBBdmFoaVdpZGVBcmVhQ2FjaGVFbnRyeSAqYzsKKyAgICBpbnQgaXNfbmV3OworCisgICAgYXNzZXJ0KGUpOworICAgIGFzc2VydChyKTsKKworICAgIGlmICgoYyA9IGZpbmRfcmVjb3JkX2luX2NhY2hlKGUsIHIpKSkgeworICAgICAgICBpc19uZXcgPSAwOworCisgICAgICAgIC8qIFVwZGF0ZSB0aGUgZXhpc3RpbmcgZW50cnkgKi8KKyAgICAgICAgYXZhaGlfcmVjb3JkX3VucmVmKGMtPnJlY29yZCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQXZhaGlXaWRlQXJlYUNhY2hlRW50cnkgKnQ7CisKKyAgICAgICAgaXNfbmV3ID0gMTsKKworICAgICAgICAvKiBFbmZvcmNlIGNhY2hlIHNpemUgKi8KKyAgICAgICAgaWYgKGUtPmNhY2hlX25fZW50cmllcyA+PSBDQUNIRV9FTlRSSUVTX01BWCkKKyAgICAgICAgICAgIC8qIEV2ZW50dWFsbHkgd2Ugc2hvdWxkIGltcHJvdmUgdGhlIGNhY2hpbmcgYWxnb3JpdGhtIGhlcmUgKi8KKyAgICAgICAgICAgIGdvdG8gZmluaXNoOworCisgICAgICAgIGMgPSBhdmFoaV9uZXcoQXZhaGlXaWRlQXJlYUNhY2hlRW50cnksIDEpOworICAgICAgICBjLT5lbmdpbmUgPSBlOworICAgICAgICBjLT50aW1lX2V2ZW50ID0gTlVMTDsKKworICAgICAgICBBVkFISV9MTElTVF9QUkVQRU5EKEF2YWhpV2lkZUFyZWFDYWNoZUVudHJ5LCBjYWNoZSwgZS0+Y2FjaGUsIGMpOworCisgICAgICAgIC8qIEFkZCB0aGUgbmV3IGVudHJ5IHRvIHRoZSBjYWNoZSBlbnRyeSBoYXNoIHRhYmxlICovCisgICAgICAgIHQgPSBhdmFoaV9oYXNobWFwX2xvb2t1cChlLT5jYWNoZV9ieV9rZXksIHItPmtleSk7CisgICAgICAgIEFWQUhJX0xMSVNUX1BSRVBFTkQoQXZhaGlXaWRlQXJlYUNhY2hlRW50cnksIGJ5X2tleSwgdCwgYyk7CisgICAgICAgIGF2YWhpX2hhc2htYXBfcmVwbGFjZShlLT5jYWNoZV9ieV9rZXksIGF2YWhpX2tleV9yZWYoci0+a2V5KSwgdCk7CisKKyAgICAgICAgZS0+Y2FjaGVfbl9lbnRyaWVzICsrOworICAgIH0KKworICAgIGMtPnJlY29yZCA9IGF2YWhpX3JlY29yZF9yZWYocik7CisKKyAgICBnZXR0aW1lb2ZkYXkoJmMtPnRpbWVzdGFtcCwgTlVMTCk7CisgICAgYy0+ZXhwaXJ5ID0gYy0+dGltZXN0YW1wOworICAgIGF2YWhpX3RpbWV2YWxfYWRkKCZjLT5leHBpcnksIHItPnR0bCAqIDEwMDAwMDApOworCisgICAgaWYgKGMtPnRpbWVfZXZlbnQpCisgICAgICAgIGF2YWhpX3RpbWVfZXZlbnRfdXBkYXRlKGMtPnRpbWVfZXZlbnQsICZjLT5leHBpcnkpOworICAgIGVsc2UKKyAgICAgICAgYy0+dGltZV9ldmVudCA9IGF2YWhpX3RpbWVfZXZlbnRfbmV3KGUtPnNlcnZlci0+dGltZV9ldmVudF9xdWV1ZSwgJmMtPmV4cGlyeSwgZXhwaXJ5X2V2ZW50LCBjKTsKKworZmluaXNoOgorCisgICAgaWYgKGlzX25ldykKKyAgICAgICAgcnVuX2NhbGxiYWNrcyhlLCByKTsKK30KKworc3RhdGljIGludCBtYXBfZG5zX2Vycm9yKHVpbnQxNl90IGVycm9yKSB7CisgICAgc3RhdGljIGNvbnN0IGludCB0YWJsZVsxNl0gPSB7CisgICAgICAgIEFWQUhJX09LLAorICAgICAgICBBVkFISV9FUlJfRE5TX0ZPUk1FUlIsCisgICAgICAgIEFWQUhJX0VSUl9ETlNfU0VSVkZBSUwsCisgICAgICAgIEFWQUhJX0VSUl9ETlNfTlhET01BSU4sCisgICAgICAgIEFWQUhJX0VSUl9ETlNfTk9USU1QLAorICAgICAgICBBVkFISV9FUlJfRE5TX1JFRlVTRUQsCisgICAgICAgIEFWQUhJX0VSUl9ETlNfWVhET01BSU4sCisgICAgICAgIEFWQUhJX0VSUl9ETlNfWVhSUlNFVCwKKyAgICAgICAgQVZBSElfRVJSX0ROU19OWFJSU0VULAorICAgICAgICBBVkFISV9FUlJfRE5TX05PVEFVVEgsCisgICAgICAgIEFWQUhJX0VSUl9ETlNfTk9UWk9ORSwKKyAgICAgICAgQVZBSElfRVJSX0lOVkFMSURfRE5TX0VSUk9SLAorICAgICAgICBBVkFISV9FUlJfSU5WQUxJRF9ETlNfRVJST1IsCisgICAgICAgIEFWQUhJX0VSUl9JTlZBTElEX0ROU19FUlJPUiwKKyAgICAgICAgQVZBSElfRVJSX0lOVkFMSURfRE5TX0VSUk9SLAorICAgICAgICBBVkFISV9FUlJfSU5WQUxJRF9ETlNfRVJST1IKKyAgICB9OworCisgICAgYXNzZXJ0KGVycm9yIDw9IDE1KTsKKworICAgIHJldHVybiB0YWJsZVtlcnJvcl07Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9wYWNrZXQoQXZhaGlXaWRlQXJlYUxvb2t1cEVuZ2luZSAqZSwgQXZhaGlEbnNQYWNrZXQgKnApIHsKKyAgICBBdmFoaVdpZGVBcmVhTG9va3VwICpsID0gTlVMTDsKKyAgICBpbnQgaSwgcjsKKworICAgIEF2YWhpQnJvd3NlckV2ZW50IGZpbmFsX2V2ZW50ID0gQVZBSElfQlJPV1NFUl9BTExfRk9SX05PVzsKKworICAgIGFzc2VydChlKTsKKyAgICBhc3NlcnQocCk7CisKKyAgICAvKiBTb21lIHN1cGVyZmljaWFsIHZhbGlkaXR5IHRlc3RzICovCisgICAgaWYgKGF2YWhpX2Ruc19wYWNrZXRfY2hlY2tfdmFsaWQocCkgPCAwIHx8IGF2YWhpX2Ruc19wYWNrZXRfaXNfcXVlcnkocCkpIHsKKyAgICAgICAgYXZhaGlfbG9nX3dhcm4oX19GSUxFX18iOiBJZ25vcmluZyBpbnZhbGlkIHJlc3BvbnNlIGZvciB3aWRlIGFyZWEgZGF0YWdyYW0uIik7CisgICAgICAgIGdvdG8gZmluaXNoOworICAgIH0KKworICAgIC8qIExvb2sgZm9yIHRoZSBsb29rdXAgdGhhdCBpc3N1ZWQgdGhpcyBxdWVyeSAqLworICAgIGlmICghKGwgPSBmaW5kX2xvb2t1cChlLCBhdmFoaV9kbnNfcGFja2V0X2dldF9maWVsZChwLCBBVkFISV9ETlNfRklFTERfSUQpKSkgfHwgbC0+ZGVhZCkKKyAgICAgICAgZ290byBmaW5pc2g7CisKKyAgICAvKiBDaGVjayB3aGV0aGVyIHRoaXMgYSBwYWNrZXQgaW5kaWNhdGluZyBhIGZhaWx1cmUgKi8KKyAgICBpZiAoKHIgPSBhdmFoaV9kbnNfcGFja2V0X2dldF9maWVsZChwLCBBVkFISV9ETlNfRklFTERfRkxBR1MpICYgMTUpICE9IDAgfHwKKyAgICAgICAgYXZhaGlfZG5zX3BhY2tldF9nZXRfZmllbGQocCwgQVZBSElfRE5TX0ZJRUxEX0FOQ09VTlQpID09IDApIHsKKworICAgICAgICBhdmFoaV9zZXJ2ZXJfc2V0X2Vycm5vKGUtPnNlcnZlciwgciA9PSAwID8gQVZBSElfRVJSX05PVF9GT1VORCA6IG1hcF9kbnNfZXJyb3IocikpOworICAgICAgICAvKiBUZWxsIHRoZSB1c2VyIGFib3V0IHRoZSBmYWlsdXJlICovCisgICAgICAgIGZpbmFsX2V2ZW50ID0gQVZBSElfQlJPV1NFUl9GQUlMVVJFOworCisgICAgICAgIC8qIFdlIGdvIG9uIGhlcmUsIHNpbmNlIHNvbWUgb2YgdGhlIHJlY29yZHMgY29udGFpbmVkIGluIHRoZQorICAgICAgICAgICByZXBseSBtaWdodCBiZSBpbnRlcmVzdGluZyBpbiBzb21lIHdheSAqLworICAgIH0KKworICAgIC8qIFNraXAgb3ZlciB0aGUgcXVlc3Rpb24gKi8KKyAgICBmb3IgKGkgPSAoaW50KSBhdmFoaV9kbnNfcGFja2V0X2dldF9maWVsZChwLCBBVkFISV9ETlNfRklFTERfUURDT1VOVCk7IGkgPiAwOyBpLS0pIHsKKyAgICAgICAgQXZhaGlLZXkgKms7CisKKyAgICAgICAgaWYgKCEoayA9IGF2YWhpX2Ruc19wYWNrZXRfY29uc3VtZV9rZXkocCwgTlVMTCkpKSB7CisgICAgICAgICAgICBhdmFoaV9sb2dfd2FybihfX0ZJTEVfXyI6IFdpZGUgYXJlYSByZXNwb25zZSBwYWNrZXQgdG9vIHNob3J0IG9yIGludmFsaWQgd2hpbGUgcmVhZGluZyBxdWVzdGlvbiBrZXkuIChNYXliZSBhIFVURi04IHByb2JsZW0/KSIpOworICAgICAgICAgICAgYXZhaGlfc2VydmVyX3NldF9lcnJubyhlLT5zZXJ2ZXIsIEFWQUhJX0VSUl9JTlZBTElEX1BBQ0tFVCk7CisgICAgICAgICAgICBmaW5hbF9ldmVudCA9IEFWQUhJX0JST1dTRVJfRkFJTFVSRTsKKyAgICAgICAgICAgIGdvdG8gZmluaXNoOworICAgICAgICB9CisKKyAgICAgICAgYXZhaGlfa2V5X3VucmVmKGspOworICAgIH0KKworICAgIC8qIFByb2Nlc3MgcmVzcG9uc2VzICovCisgICAgZm9yIChpID0gKGludCkgYXZhaGlfZG5zX3BhY2tldF9nZXRfZmllbGQocCwgQVZBSElfRE5TX0ZJRUxEX0FOQ09VTlQpICsKKyAgICAgICAgICAgICAoaW50KSBhdmFoaV9kbnNfcGFja2V0X2dldF9maWVsZChwLCBBVkFISV9ETlNfRklFTERfTlNDT1VOVCkgKworICAgICAgICAgICAgIChpbnQpIGF2YWhpX2Ruc19wYWNrZXRfZ2V0X2ZpZWxkKHAsIEFWQUhJX0ROU19GSUVMRF9BUkNPVU5UKTsgaSA+IDA7IGktLSkgeworCisgICAgICAgIEF2YWhpUmVjb3JkICpycjsKKworICAgICAgICBpZiAoIShyciA9IGF2YWhpX2Ruc19wYWNrZXRfY29uc3VtZV9yZWNvcmQocCwgTlVMTCkpKSB7CisgICAgICAgICAgICBhdmFoaV9sb2dfd2FybihfX0ZJTEVfXyI6IFdpZGUgYXJlYSByZXNwb25zZSBwYWNrZXQgdG9vIHNob3J0IG9yIGludmFsaWQgd2hpbGUgcmVhZGluZyByZXNwb25zZSByZWNvcmQuIChNYXliZSBhIFVURi04IHByb2JsZW0/KSIpOworICAgICAgICAgICAgYXZhaGlfc2VydmVyX3NldF9lcnJubyhlLT5zZXJ2ZXIsIEFWQUhJX0VSUl9JTlZBTElEX1BBQ0tFVCk7CisgICAgICAgICAgICBmaW5hbF9ldmVudCA9IEFWQUhJX0JST1dTRVJfRkFJTFVSRTsKKyAgICAgICAgICAgIGdvdG8gZmluaXNoOworICAgICAgICB9CisKKyAgICAgICAgYWRkX3RvX2NhY2hlKGUsIHJyKTsKKyAgICAgICAgYXZhaGlfcmVjb3JkX3VucmVmKHJyKTsKKyAgICB9CisKK2ZpbmlzaDoKKworICAgIGlmIChsICYmICFsLT5kZWFkKSB7CisgICAgICAgIGlmIChsLT5jYWxsYmFjaykKKyAgICAgICAgICAgIGwtPmNhbGxiYWNrKGUsIGZpbmFsX2V2ZW50LCBBVkFISV9MT09LVVBfUkVTVUxUX1dJREVfQVJFQSwgTlVMTCwgbC0+dXNlcmRhdGEpOworCisgICAgICAgIGxvb2t1cF9zdG9wKGwpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgc29ja2V0X2V2ZW50KEFWQUhJX0dDQ19VTlVTRUQgQXZhaGlXYXRjaCAqdywgaW50IGZkLCBBVkFISV9HQ0NfVU5VU0VEIEF2YWhpV2F0Y2hFdmVudCBldmVudHMsIHZvaWQgKnVzZXJkYXRhKSB7CisgICAgQXZhaGlXaWRlQXJlYUxvb2t1cEVuZ2luZSAqZSA9IHVzZXJkYXRhOworICAgIEF2YWhpRG5zUGFja2V0ICpwID0gTlVMTDsKKworICAgIGlmIChmZCA9PSBlLT5mZF9pcHY0KQorICAgICAgICBwID0gYXZhaGlfcmVjdl9kbnNfcGFja2V0X2lwdjQoZS0+ZmRfaXB2NCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7CisgICAgZWxzZSB7CisgICAgICAgIGFzc2VydChmZCA9PSBlLT5mZF9pcHY2KTsKKyAgICAgICAgcCA9IGF2YWhpX3JlY3ZfZG5zX3BhY2tldF9pcHY2KGUtPmZkX2lwdjYsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOworICAgIH0KKworICAgIGlmIChwKSB7CisgICAgICAgIGhhbmRsZV9wYWNrZXQoZSwgcCk7CisgICAgICAgIGF2YWhpX2Ruc19wYWNrZXRfZnJlZShwKTsKKyAgICB9Cit9CisKK0F2YWhpV2lkZUFyZWFMb29rdXBFbmdpbmUgKmF2YWhpX3dpZGVfYXJlYV9lbmdpbmVfbmV3KEF2YWhpU2VydmVyICpzKSB7CisgICAgQXZhaGlXaWRlQXJlYUxvb2t1cEVuZ2luZSAqZTsKKworICAgIGFzc2VydChzKTsKKworICAgIGUgPSBhdmFoaV9uZXcoQXZhaGlXaWRlQXJlYUxvb2t1cEVuZ2luZSwgMSk7CisgICAgZS0+c2VydmVyID0gczsKKyAgICBlLT5jbGVhbnVwX2RlYWQgPSAwOworCisgICAgLyogQ3JlYXRlIHNvY2tldHMgKi8KKyAgICBlLT5mZF9pcHY0ID0gcy0+Y29uZmlnLnVzZV9pcHY0ID8gYXZhaGlfb3Blbl91bmljYXN0X3NvY2tldF9pcHY0KCkgOiAtMTsKKyAgICBlLT5mZF9pcHY2ID0gcy0+Y29uZmlnLnVzZV9pcHY2ID8gYXZhaGlfb3Blbl91bmljYXN0X3NvY2tldF9pcHY2KCkgOiAtMTsKKworICAgIGlmIChlLT5mZF9pcHY0IDwgMCAmJiBlLT5mZF9pcHY2IDwgMCkgeworICAgICAgICBhdmFoaV9sb2dfZXJyb3IoX19GSUxFX18iOiBGYWlsZWQgdG8gY3JlYXRlIHdpZGUgYXJlYSBzb2NrZXRzOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisKKyAgICAgICAgaWYgKGUtPmZkX2lwdjYgPj0gMCkKKyAgICAgICAgICAgIGNsb3NlKGUtPmZkX2lwdjYpOworCisgICAgICAgIGlmIChlLT5mZF9pcHY0ID49IDApCisgICAgICAgICAgICBjbG9zZShlLT5mZF9pcHY0KTsKKworICAgICAgICBhdmFoaV9mcmVlKGUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvKiBDcmVhdGUgd2F0Y2hlcyAqLworCisgICAgZS0+d2F0Y2hfaXB2NCA9IGUtPndhdGNoX2lwdjYgPSBOVUxMOworCisgICAgaWYgKGUtPmZkX2lwdjQgPj0gMCkKKyAgICAgICAgZS0+d2F0Y2hfaXB2NCA9IHMtPnBvbGxfYXBpLT53YXRjaF9uZXcoZS0+c2VydmVyLT5wb2xsX2FwaSwgZS0+ZmRfaXB2NCwgQVZBSElfV0FUQ0hfSU4sIHNvY2tldF9ldmVudCwgZSk7CisgICAgaWYgKGUtPmZkX2lwdjYgPj0gMCkKKyAgICAgICAgZS0+d2F0Y2hfaXB2NiA9IHMtPnBvbGxfYXBpLT53YXRjaF9uZXcoZS0+c2VydmVyLT5wb2xsX2FwaSwgZS0+ZmRfaXB2NiwgQVZBSElfV0FUQ0hfSU4sIHNvY2tldF9ldmVudCwgZSk7CisKKyAgICBlLT5uX2Ruc19zZXJ2ZXJzID0gZS0+Y3VycmVudF9kbnNfc2VydmVyID0gMDsKKyAgICBlLT5uZXh0X2lkID0gKHVpbnQxNl90KSByYW5kKCk7CisKKyAgICAvKiBJbml0aWFsaXplIGNhY2hlICovCisgICAgQVZBSElfTExJU1RfSEVBRF9JTklUKEF2YWhpV2lkZUFyZWFDYWNoZUVudHJ5LCBlLT5jYWNoZSk7CisgICAgZS0+Y2FjaGVfYnlfa2V5ID0gYXZhaGlfaGFzaG1hcF9uZXcoKEF2YWhpSGFzaEZ1bmMpIGF2YWhpX2tleV9oYXNoLCAoQXZhaGlFcXVhbEZ1bmMpIGF2YWhpX2tleV9lcXVhbCwgKEF2YWhpRnJlZUZ1bmMpIGF2YWhpX2tleV91bnJlZiwgTlVMTCk7CisgICAgZS0+Y2FjaGVfbl9lbnRyaWVzID0gMDsKKworICAgIC8qIEluaXRpYWxpemUgbG9va3VwIGxpc3QgKi8KKyAgICBlLT5sb29rdXBzX2J5X2lkID0gYXZhaGlfaGFzaG1hcF9uZXcoKEF2YWhpSGFzaEZ1bmMpIGF2YWhpX2ludF9oYXNoLCAoQXZhaGlFcXVhbEZ1bmMpIGF2YWhpX2ludF9lcXVhbCwgTlVMTCwgTlVMTCk7CisgICAgZS0+bG9va3Vwc19ieV9rZXkgPSBhdmFoaV9oYXNobWFwX25ldygoQXZhaGlIYXNoRnVuYykgYXZhaGlfa2V5X2hhc2gsIChBdmFoaUVxdWFsRnVuYykgYXZhaGlfa2V5X2VxdWFsLCAoQXZhaGlGcmVlRnVuYykgYXZhaGlfa2V5X3VucmVmLCBOVUxMKTsKKyAgICBBVkFISV9MTElTVF9IRUFEX0lOSVQoQXZhaGlXaWRlQXJlYUxvb2t1cCwgZS0+bG9va3Vwcyk7CisKKyAgICByZXR1cm4gZTsKK30KKwordm9pZCBhdmFoaV93aWRlX2FyZWFfZW5naW5lX2ZyZWUoQXZhaGlXaWRlQXJlYUxvb2t1cEVuZ2luZSAqZSkgeworICAgIGFzc2VydChlKTsKKworICAgIGF2YWhpX3dpZGVfYXJlYV9jbGVhcl9jYWNoZShlKTsKKworICAgIHdoaWxlIChlLT5sb29rdXBzKQorICAgICAgICBsb29rdXBfZGVzdHJveShlLT5sb29rdXBzKTsKKworICAgIGF2YWhpX2hhc2htYXBfZnJlZShlLT5jYWNoZV9ieV9rZXkpOworICAgIGF2YWhpX2hhc2htYXBfZnJlZShlLT5sb29rdXBzX2J5X2lkKTsKKyAgICBhdmFoaV9oYXNobWFwX2ZyZWUoZS0+bG9va3Vwc19ieV9rZXkpOworCisgICAgaWYgKGUtPndhdGNoX2lwdjQpCisgICAgICAgIGUtPnNlcnZlci0+cG9sbF9hcGktPndhdGNoX2ZyZWUoZS0+d2F0Y2hfaXB2NCk7CisKKyAgICBpZiAoZS0+d2F0Y2hfaXB2NikKKyAgICAgICAgZS0+c2VydmVyLT5wb2xsX2FwaS0+d2F0Y2hfZnJlZShlLT53YXRjaF9pcHY2KTsKKworICAgIGlmIChlLT5mZF9pcHY2ID49IDApCisgICAgICAgIGNsb3NlKGUtPmZkX2lwdjYpOworCisgICAgaWYgKGUtPmZkX2lwdjQgPj0gMCkKKyAgICAgICAgY2xvc2UoZS0+ZmRfaXB2NCk7CisKKyAgICBhdmFoaV9mcmVlKGUpOworfQorCit2b2lkIGF2YWhpX3dpZGVfYXJlYV9jbGVhcl9jYWNoZShBdmFoaVdpZGVBcmVhTG9va3VwRW5naW5lICplKSB7CisgICAgYXNzZXJ0KGUpOworCisgICAgd2hpbGUgKGUtPmNhY2hlKQorICAgICAgICBjYWNoZV9lbnRyeV9mcmVlKGUtPmNhY2hlKTsKKworICAgIGFzc2VydChlLT5jYWNoZV9uX2VudHJpZXMgPT0gMCk7Cit9CisKK3ZvaWQgYXZhaGlfd2lkZV9hcmVhX3NldF9zZXJ2ZXJzKEF2YWhpV2lkZUFyZWFMb29rdXBFbmdpbmUgKmUsIGNvbnN0IEF2YWhpQWRkcmVzcyAqYSwgdW5zaWduZWQgbikgeworICAgIGFzc2VydChlKTsKKworICAgIGlmIChhKSB7CisgICAgICAgIGZvciAoZS0+bl9kbnNfc2VydmVycyA9IDA7IG4gPiAwICYmIGUtPm5fZG5zX3NlcnZlcnMgPCBBVkFISV9XSURFX0FSRUFfU0VSVkVSU19NQVg7IGErKywgbi0tKQorICAgICAgICAgICAgaWYgKChhLT5wcm90byA9PSBBVkFISV9QUk9UT19JTkVUICYmIGUtPmZkX2lwdjQgPj0gMCkgfHwgKGEtPnByb3RvID09IEFWQUhJX1BST1RPX0lORVQ2ICYmIGUtPmZkX2lwdjYgPj0gMCkpCisgICAgICAgICAgICAgICAgZS0+ZG5zX3NlcnZlcnNbZS0+bl9kbnNfc2VydmVycysrXSA9ICphOworICAgIH0gZWxzZSB7CisgICAgICAgIGFzc2VydChuID09IDApOworICAgICAgICBlLT5uX2Ruc19zZXJ2ZXJzID0gMDsKKyAgICB9CisKKyAgICBlLT5jdXJyZW50X2Ruc19zZXJ2ZXIgPSAwOworCisgICAgYXZhaGlfd2lkZV9hcmVhX2NsZWFyX2NhY2hlKGUpOworfQorCit2b2lkIGF2YWhpX3dpZGVfYXJlYV9jYWNoZV9kdW1wKEF2YWhpV2lkZUFyZWFMb29rdXBFbmdpbmUgKmUsIEF2YWhpRHVtcENhbGxiYWNrIGNhbGxiYWNrLCB2b2lkKiB1c2VyZGF0YSkgeworICAgIEF2YWhpV2lkZUFyZWFDYWNoZUVudHJ5ICpjOworCisgICAgYXNzZXJ0KGUpOworICAgIGFzc2VydChjYWxsYmFjayk7CisKKyAgICBjYWxsYmFjaygiOzsgV0lERSBBUkVBIENBQ0hFIDs7OyAiLCB1c2VyZGF0YSk7CisKKyAgICBmb3IgKGMgPSBlLT5jYWNoZTsgYzsgYyA9IGMtPmNhY2hlX25leHQpIHsKKyAgICAgICAgY2hhciAqdCA9IGF2YWhpX3JlY29yZF90b19zdHJpbmcoYy0+cmVjb3JkKTsKKyAgICAgICAgY2FsbGJhY2sodCwgdXNlcmRhdGEpOworICAgICAgICBhdmFoaV9mcmVlKHQpOworICAgIH0KK30KKwordW5zaWduZWQgYXZhaGlfd2lkZV9hcmVhX3NjYW5fY2FjaGUoQXZhaGlXaWRlQXJlYUxvb2t1cEVuZ2luZSAqZSwgQXZhaGlLZXkgKmtleSwgQXZhaGlXaWRlQXJlYUxvb2t1cENhbGxiYWNrIGNhbGxiYWNrLCB2b2lkICp1c2VyZGF0YSkgeworICAgIEF2YWhpV2lkZUFyZWFDYWNoZUVudHJ5ICpjOworICAgIEF2YWhpS2V5ICpjbmFtZV9rZXk7CisgICAgdW5zaWduZWQgbiA9IDA7CisKKyAgICBhc3NlcnQoZSk7CisgICAgYXNzZXJ0KGtleSk7CisgICAgYXNzZXJ0KGNhbGxiYWNrKTsKKworICAgIGZvciAoYyA9IGF2YWhpX2hhc2htYXBfbG9va3VwKGUtPmNhY2hlX2J5X2tleSwga2V5KTsgYzsgYyA9IGMtPmJ5X2tleV9uZXh0KSB7CisgICAgICAgIGNhbGxiYWNrKGUsIEFWQUhJX0JST1dTRVJfTkVXLCBBVkFISV9MT09LVVBfUkVTVUxUX1dJREVfQVJFQXxBVkFISV9MT09LVVBfUkVTVUxUX0NBQ0hFRCwgYy0+cmVjb3JkLCB1c2VyZGF0YSk7CisgICAgICAgIG4rKzsKKyAgICB9CisKKyAgICBpZiAoKGNuYW1lX2tleSA9IGF2YWhpX2tleV9uZXdfY25hbWUoa2V5KSkpIHsKKworICAgICAgICBmb3IgKGMgPSBhdmFoaV9oYXNobWFwX2xvb2t1cChlLT5jYWNoZV9ieV9rZXksIGNuYW1lX2tleSk7IGM7IGMgPSBjLT5ieV9rZXlfbmV4dCkgeworICAgICAgICAgICAgY2FsbGJhY2soZSwgQVZBSElfQlJPV1NFUl9ORVcsIEFWQUhJX0xPT0tVUF9SRVNVTFRfV0lERV9BUkVBfEFWQUhJX0xPT0tVUF9SRVNVTFRfQ0FDSEVELCBjLT5yZWNvcmQsIHVzZXJkYXRhKTsKKyAgICAgICAgICAgIG4rKzsKKyAgICAgICAgfQorCisgICAgICAgIGF2YWhpX2tleV91bnJlZihjbmFtZV9rZXkpOworICAgIH0KKworICAgIHJldHVybiBuOworfQorCitpbnQgYXZhaGlfd2lkZV9hcmVhX2hhc19zZXJ2ZXJzKEF2YWhpV2lkZUFyZWFMb29rdXBFbmdpbmUgKmUpIHsKKyAgICBhc3NlcnQoZSk7CisKKyAgICByZXR1cm4gZS0+bl9kbnNfc2VydmVycyA+IDA7Cit9CisKKworCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS93aWRlLWFyZWEuaCBiL2F2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL3dpZGUtYXJlYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxZGM1NzAKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktY29yZS93aWRlLWFyZWEuaApAQCAtMCwwICsxLDUyIEBACisjaWZuZGVmIGZvb3dpZGVhcmVhaGZvbworI2RlZmluZSBmb293aWRlYXJlYWhmb28KKworLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisjaW5jbHVkZSAibG9va3VwLmgiCisjaW5jbHVkZSAiYnJvd3NlLmgiCisKK3R5cGVkZWYgc3RydWN0IEF2YWhpV2lkZUFyZWFMb29rdXBFbmdpbmUgQXZhaGlXaWRlQXJlYUxvb2t1cEVuZ2luZTsKK3R5cGVkZWYgc3RydWN0IEF2YWhpV2lkZUFyZWFMb29rdXAgQXZhaGlXaWRlQXJlYUxvb2t1cDsKKwordHlwZWRlZiB2b2lkICgqQXZhaGlXaWRlQXJlYUxvb2t1cENhbGxiYWNrKSgKKyAgICBBdmFoaVdpZGVBcmVhTG9va3VwRW5naW5lICplLAorICAgIEF2YWhpQnJvd3NlckV2ZW50IGV2ZW50LAorICAgIEF2YWhpTG9va3VwUmVzdWx0RmxhZ3MgZmxhZ3MsCisgICAgQXZhaGlSZWNvcmQgKnIsCisgICAgdm9pZCAqdXNlcmRhdGEpOworCitBdmFoaVdpZGVBcmVhTG9va3VwRW5naW5lICphdmFoaV93aWRlX2FyZWFfZW5naW5lX25ldyhBdmFoaVNlcnZlciAqcyk7Cit2b2lkIGF2YWhpX3dpZGVfYXJlYV9lbmdpbmVfZnJlZShBdmFoaVdpZGVBcmVhTG9va3VwRW5naW5lICplKTsKKwordW5zaWduZWQgYXZhaGlfd2lkZV9hcmVhX3NjYW5fY2FjaGUoQXZhaGlXaWRlQXJlYUxvb2t1cEVuZ2luZSAqZSwgQXZhaGlLZXkgKmtleSwgQXZhaGlXaWRlQXJlYUxvb2t1cENhbGxiYWNrIGNhbGxiYWNrLCB2b2lkICp1c2VyZGF0YSk7Cit2b2lkIGF2YWhpX3dpZGVfYXJlYV9jYWNoZV9kdW1wKEF2YWhpV2lkZUFyZWFMb29rdXBFbmdpbmUgKmUsIEF2YWhpRHVtcENhbGxiYWNrIGNhbGxiYWNrLCB2b2lkKiB1c2VyZGF0YSk7Cit2b2lkIGF2YWhpX3dpZGVfYXJlYV9zZXRfc2VydmVycyhBdmFoaVdpZGVBcmVhTG9va3VwRW5naW5lICplLCBjb25zdCBBdmFoaUFkZHJlc3MgKmEsIHVuc2lnbmVkIG4pOwordm9pZCBhdmFoaV93aWRlX2FyZWFfY2xlYXJfY2FjaGUoQXZhaGlXaWRlQXJlYUxvb2t1cEVuZ2luZSAqZSk7Cit2b2lkIGF2YWhpX3dpZGVfYXJlYV9jbGVhbnVwKEF2YWhpV2lkZUFyZWFMb29rdXBFbmdpbmUgKmUpOworaW50IGF2YWhpX3dpZGVfYXJlYV9oYXNfc2VydmVycyhBdmFoaVdpZGVBcmVhTG9va3VwRW5naW5lICplKTsKKworQXZhaGlXaWRlQXJlYUxvb2t1cCAqYXZhaGlfd2lkZV9hcmVhX2xvb2t1cF9uZXcoQXZhaGlXaWRlQXJlYUxvb2t1cEVuZ2luZSAqZSwgQXZhaGlLZXkgKmtleSwgQXZhaGlXaWRlQXJlYUxvb2t1cENhbGxiYWNrIGNhbGxiYWNrLCB2b2lkICp1c2VyZGF0YSk7Cit2b2lkIGF2YWhpX3dpZGVfYXJlYV9sb29rdXBfZnJlZShBdmFoaVdpZGVBcmVhTG9va3VwICpxKTsKKworCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL01ha2VmaWxlLmFtIGIvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWQyYmY0Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDE3NiBAQAorIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKyMKKyMgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyMgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyMgVVNBLgorCitBTV9DRkxBR1M9LUkkKHRvcF9zcmNkaXIpCisKKyMgVGhpcyBjb29sIGRlYnVnIHRyYXAgd29ya3Mgb24gaTM4Ni9nY2Mgb25seQorQU1fQ0ZMQUdTKz0nLURERUJVR19UUkFQPV9fYXNtX18oImludCAkJDMiKScKKworaWYgSEFWRV9MSUJEQUVNT04KK2lmIEhBVkVfWE1MCisKK3BrZ3N5c2NvbmZkaXI9JChzeXNjb25mZGlyKS9hdmFoaQorc2VydmljZWRpcj0kKHBrZ3N5c2NvbmZkaXIpL3NlcnZpY2VzCitpbnRyb3NwZWN0aW9uZGlyPSQoZGF0YWRpcikvZGJ1cy0xL2ludGVyZmFjZXMKK2RidXNzeXN0ZW1zZXJ2aWNlc2Rpcj0kKGRhdGFkaXIpL2RidXMtMS9zeXN0ZW0tc2VydmljZXMKKworQU1fQ0ZMQUdTKz0gXAorCS1EQVZBSElfREFFTU9OX1JVTlRJTUVfRElSPVwiJChhdmFoaV9ydW50aW1lX2RpcikvYXZhaGktZGFlbW9uL1wiIFwKKwktREFWQUhJX1NPQ0tFVD1cIiQoYXZhaGlfc29ja2V0KVwiIFwKKwktREFWQUhJX1NFUlZJQ0VfRElSPVwiJChzZXJ2aWNlZGlyKVwiIFwKKwktREFWQUhJX0NPTkZJR19GSUxFPVwiJChwa2dzeXNjb25mZGlyKS9hdmFoaS1kYWVtb24uY29uZlwiIFwKKwktREFWQUhJX0hPU1RTX0ZJTEU9XCIkKHBrZ3N5c2NvbmZkaXIpL2hvc3RzXCIgXAorCS1EQVZBSElfREJVU19JTlRST1NQRUNUSU9OX0RJUj1cIiQoaW50cm9zcGVjdGlvbmRpcilcIiBcCisJLURBVkFISV9DT05GSUdfRElSPVwiJChwa2dzeXNjb25mZGlyKVwiCisKK3NiaW5fUFJPR1JBTVMgPSBcCisJYXZhaGktZGFlbW9uCisKK2lmIEVOQUJMRV9URVNUUworbm9pbnN0X1BST0dSQU1TID0gXAorCWluaS1maWxlLXBhcnNlci10ZXN0CitlbmRpZgorCithdmFoaV9kYWVtb25fU09VUkNFUyA9IFwKKwltYWluLmMgbWFpbi5oIFwKKwlzaW1wbGUtcHJvdG9jb2wuYyBzaW1wbGUtcHJvdG9jb2wuaCBcCisJc3RhdGljLXNlcnZpY2VzLmMgc3RhdGljLXNlcnZpY2VzLmggXAorCXN0YXRpYy1ob3N0cy5jIHN0YXRpYy1ob3N0cy5oIFwKKwlpbmktZmlsZS1wYXJzZXIuYyBpbmktZmlsZS1wYXJzZXIuaCBcCisJc2V0cHJvY3RpdGxlLmMgc2V0cHJvY3RpdGxlLmggXAorCXNkLWRhZW1vbi5oIHNkLWRhZW1vbi5jIFwKKwkuLi9hdmFoaS1jbGllbnQvY2hlY2stbnNzLmMKKworYXZhaGlfZGFlbW9uX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAkKExJQkRBRU1PTl9DRkxBR1MpICQoWE1MX0NGTEFHUykKK2F2YWhpX2RhZW1vbl9MREFERCA9ICQoQU1fTERBREQpIC4uL2F2YWhpLWNvbW1vbi9saWJhdmFoaS1jb21tb24ubGEgLi4vYXZhaGktY29yZS9saWJhdmFoaS1jb3JlLmxhICQoTElCREFFTU9OX0xJQlMpICQoWE1MX0xJQlMpCisKK2luaV9maWxlX3BhcnNlcl90ZXN0X1NPVVJDRVMgPSBcCisJaW5pLWZpbGUtcGFyc2VyLmMgaW5pLWZpbGUtcGFyc2VyLmggXAorCWluaS1maWxlLXBhcnNlci10ZXN0LmMKKworaW5pX2ZpbGVfcGFyc2VyX3Rlc3RfQ0ZMQUdTID0gJChBTV9DRkxBR1MpCitpbmlfZmlsZV9wYXJzZXJfdGVzdF9MREFERCA9ICQoQU1fTERBREQpIC4uL2F2YWhpLWNvbW1vbi9saWJhdmFoaS1jb21tb24ubGEgLi4vYXZhaGktY29yZS9saWJhdmFoaS1jb3JlLmxhCisKK3BrZ3N5c2NvbmZfREFUQSA9IFwKKwlhdmFoaS1kYWVtb24uY29uZiBcCisJaG9zdHMKKworZGlzdF9zZXJ2aWNlX0RBVEEgPSBcCisJc3NoLnNlcnZpY2UgXAorCXNmdHAtc3NoLnNlcnZpY2UKKworZGlzdF9wa2dkYXRhX0RBVEEgPSBcCisJYXZhaGktc2VydmljZS5kdGQKKworJS5zZXJ2aWNlOiAlLnNlcnZpY2UuaW4KKwkkKEFNX1ZfR0VOKXNlZCAtZSAncyxAc2JpbmRpclxALCQoc2JpbmRpciksZycgJDwgPiAkQAorCislLnNvY2tldDogJS5zb2NrZXQuaW4KKwkkKEFNX1ZfR0VOKXNlZCAtZSAncyxAc2JpbmRpclxALCQoc2JpbmRpciksZycgXAorCQktZSAncyxAYXZhaGlfcnVudGltZV9kaXJcQCwkKGF2YWhpX3J1bnRpbWVfZGlyKSxnJyAkPCA+ICRACisKK2lmIEhBVkVfU1lTVEVNRAorc3lzdGVtZHN5c3RlbXVuaXRfREFUQSA9IFwKKwlhdmFoaS1kYWVtb24uc2VydmljZSBcCisJYXZhaGktZGFlbW9uLnNvY2tldAorCitkaXN0X2RidXNzeXN0ZW1zZXJ2aWNlc19EQVRBID0gXAorCW9yZy5mcmVlZGVza3RvcC5BdmFoaS5zZXJ2aWNlCitlbmRpZgorCitDTEVBTkZJTEVTID0gJChzeXN0ZW1kc3lzdGVtdW5pdF9EQVRBKQorCitpZiBFTkFCTEVfQ0hST09UCisKK2F2YWhpX2RhZW1vbl9TT1VSQ0VTICs9IFwKKwljaHJvb3QuYyBjaHJvb3QuaCBcCisJY2Fwcy5jIGNhcHMuaAorCithdmFoaV9kYWVtb25fTERBREQgKz0gLWxjYXAKKworZW5kaWYKKworaWYgSEFWRV9ETE9QRU4KK2F2YWhpX2RhZW1vbl9MREFERCArPSAtbGRsCitlbmRpZgorCitpZiBIQVZFX0RCVVMKKworZGJ1c3NlcnZpY2VkaXI9JChEQlVTX1NZU19ESVIpCisKK2F2YWhpX2RhZW1vbl9TT1VSQ0VTICs9IFwKKwlkYnVzLXByb3RvY29sLmMgZGJ1cy1wcm90b2NvbC5oIFwKKwlkYnVzLXV0aWwuYyBkYnVzLXV0aWwuaCBcCisJZGJ1cy1pbnRlcm5hbC5oIFwKKwlkYnVzLWFzeW5jLWFkZHJlc3MtcmVzb2x2ZXIuYyBcCisJZGJ1cy1hc3luYy1ob3N0LW5hbWUtcmVzb2x2ZXIuYyBcCisJZGJ1cy1hc3luYy1zZXJ2aWNlLXJlc29sdmVyLmMgXAorCWRidXMtZG9tYWluLWJyb3dzZXIuYyBcCisJZGJ1cy1lbnRyeS1ncm91cC5jIFwKKwlkYnVzLXNlcnZpY2UtYnJvd3Nlci5jIFwKKwlkYnVzLXNlcnZpY2UtdHlwZS1icm93c2VyLmMgXAorCWRidXMtc3luYy1hZGRyZXNzLXJlc29sdmVyLmMgXAorCWRidXMtc3luYy1ob3N0LW5hbWUtcmVzb2x2ZXIuYyBcCisJZGJ1cy1zeW5jLXNlcnZpY2UtcmVzb2x2ZXIuYyBcCisJZGJ1cy1yZWNvcmQtYnJvd3Nlci5jICBcCisJLi4vYXZhaGktY29tbW9uL2RidXMuYyAuLi9hdmFoaS1jb21tb24vZGJ1cy5oIFwKKwkuLi9hdmFoaS1jb21tb24vZGJ1cy13YXRjaC1nbHVlLmMgLi4vYXZhaGktY29tbW9uL2RidXMtd2F0Y2gtZ2x1ZS5oCisKK2F2YWhpX2RhZW1vbl9MREFERCArPSBcCisJJChEQlVTX0xJQlMpCisKK2F2YWhpX2RhZW1vbl9DRkxBR1MgKz0gJChEQlVTX0NGTEFHUykgLUREQlVTX1NZU1RFTV9CVVNfREVGQVVMVF9BRERSRVNTPVwiJChEQlVTX1NZU1RFTV9CVVNfREVGQVVMVF9BRERSRVNTKVwiCisKK2Rpc3RfZGJ1c3NlcnZpY2VfREFUQSA9IGF2YWhpLWRidXMuY29uZgorCitkaXN0X2ludHJvc3BlY3Rpb25fREFUQSA9IFwKKwlvcmcuZnJlZWRlc2t0b3AuQXZhaGkuU2VydmVyLnhtbCBcCisJb3JnLmZyZWVkZXNrdG9wLkF2YWhpLkVudHJ5R3JvdXAueG1sIFwKKwlvcmcuZnJlZWRlc2t0b3AuQXZhaGkuRG9tYWluQnJvd3Nlci54bWwgXAorCW9yZy5mcmVlZGVza3RvcC5BdmFoaS5TZXJ2aWNlVHlwZUJyb3dzZXIueG1sIFwKKwlvcmcuZnJlZWRlc2t0b3AuQXZhaGkuU2VydmljZUJyb3dzZXIueG1sIFwKKwlvcmcuZnJlZWRlc2t0b3AuQXZhaGkuU2VydmljZVJlc29sdmVyLnhtbCBcCisJb3JnLmZyZWVkZXNrdG9wLkF2YWhpLkFkZHJlc3NSZXNvbHZlci54bWwgXAorCW9yZy5mcmVlZGVza3RvcC5BdmFoaS5Ib3N0TmFtZVJlc29sdmVyLnhtbCBcCisJb3JnLmZyZWVkZXNrdG9wLkF2YWhpLlJlY29yZEJyb3dzZXIueG1sCisKK2VuZGlmCitlbmRpZgorZW5kaWYKKworRVhUUkFfRElTVCA9IFwKKwlhdmFoaS1kYWVtb24uY29uZiBcCisJZXhhbXBsZS5zZXJ2aWNlIFwKKwlob3N0cyBcCisJZXhhbXBsZS5zZXJ2aWNlIFwKKwlpbnRyb3NwZWN0LmR0ZCBcCisJaW50cm9zcGVjdC54c2wgXAorCWF2YWhpLWRhZW1vbi5zZXJ2aWNlLmluIFwKKwlhdmFoaS1kYWVtb24uc29ja2V0LmluCisKK3htbGxpbnQ6CisJeG1sbGludCAtLW5vb3V0IC0tdmFsaWQgZXhhbXBsZS5zZXJ2aWNlCisJZm9yIEYgaW4gJChpbnRyb3NwZWN0aW9uX0RBVEEpIDsgZG8gXAorCQl4bWxsaW50IC0tbm9vdXQgLS12YWxpZCAkJEYgOyBcCisJZG9uZQorCitpbnN0YWxsLWRhdGEtbG9jYWw6CisJdGVzdCAteiAiJChsb2NhbHN0YXRlZGlyKS9ydW4iIHx8ICQobWtkaXJfcCkgIiQoREVTVERJUikkKGxvY2Fsc3RhdGVkaXIpL3J1biIKKwordXBkYXRlLXN5c3RlbWQ6CisJY3VybCBodHRwOi8vY2dpdC5mcmVlZGVza3RvcC5vcmcvc3lzdGVtZC9wbGFpbi9zcmMvc2QtZGFlbW9uLmMgPiBzZC1kYWVtb24uYworCWN1cmwgaHR0cDovL2NnaXQuZnJlZWRlc2t0b3Aub3JnL3N5c3RlbWQvcGxhaW4vc3JjL3NkLWRhZW1vbi5oID4gc2QtZGFlbW9uLmgKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vTWFrZWZpbGUuaW4gYi9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjNWViYzMKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMTUwOSBAQAorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xMS4zIGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorIworIyBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworIyBVU0EuCisKKworVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorQEhBVkVfTElCREFFTU9OX1RSVUVAQEhBVkVfWE1MX1RSVUVAYW1fX2FwcGVuZF8xID0gXAorQEhBVkVfTElCREFFTU9OX1RSVUVAQEhBVkVfWE1MX1RSVUVACS1EQVZBSElfREFFTU9OX1JVTlRJTUVfRElSPVwiJChhdmFoaV9ydW50aW1lX2RpcikvYXZhaGktZGFlbW9uL1wiIFwKK0BIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQAktREFWQUhJX1NPQ0tFVD1cIiQoYXZhaGlfc29ja2V0KVwiIFwKK0BIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQAktREFWQUhJX1NFUlZJQ0VfRElSPVwiJChzZXJ2aWNlZGlyKVwiIFwKK0BIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQAktREFWQUhJX0NPTkZJR19GSUxFPVwiJChwa2dzeXNjb25mZGlyKS9hdmFoaS1kYWVtb24uY29uZlwiIFwKK0BIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQAktREFWQUhJX0hPU1RTX0ZJTEU9XCIkKHBrZ3N5c2NvbmZkaXIpL2hvc3RzXCIgXAorQEhBVkVfTElCREFFTU9OX1RSVUVAQEhBVkVfWE1MX1RSVUVACS1EQVZBSElfREJVU19JTlRST1NQRUNUSU9OX0RJUj1cIiQoaW50cm9zcGVjdGlvbmRpcilcIiBcCitASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUAJLURBVkFISV9DT05GSUdfRElSPVwiJChwa2dzeXNjb25mZGlyKVwiCisKK0BIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQHNiaW5fUFJPR1JBTVMgPSAgXAorQEhBVkVfTElCREFFTU9OX1RSVUVAQEhBVkVfWE1MX1RSVUVACWF2YWhpLWRhZW1vbiQoRVhFRVhUKQorQEVOQUJMRV9URVNUU19UUlVFQEBIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQG5vaW5zdF9QUk9HUkFNUyA9IGluaS1maWxlLXBhcnNlci10ZXN0JChFWEVFWFQpCitARU5BQkxFX0NIUk9PVF9UUlVFQEBIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQGFtX19hcHBlbmRfMiA9IFwKK0BFTkFCTEVfQ0hST09UX1RSVUVAQEhBVkVfTElCREFFTU9OX1RSVUVAQEhBVkVfWE1MX1RSVUVACWNocm9vdC5jIGNocm9vdC5oIFwKK0BFTkFCTEVfQ0hST09UX1RSVUVAQEhBVkVfTElCREFFTU9OX1RSVUVAQEhBVkVfWE1MX1RSVUVACWNhcHMuYyBjYXBzLmgKKworQEVOQUJMRV9DSFJPT1RfVFJVRUBASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUBhbV9fYXBwZW5kXzMgPSAtbGNhcAorQEhBVkVfRExPUEVOX1RSVUVAQEhBVkVfTElCREFFTU9OX1RSVUVAQEhBVkVfWE1MX1RSVUVAYW1fX2FwcGVuZF80ID0gLWxkbAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQGFtX19hcHBlbmRfNSA9IFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUAJZGJ1cy1wcm90b2NvbC5jIGRidXMtcHJvdG9jb2wuaCBcCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfTElCREFFTU9OX1RSVUVAQEhBVkVfWE1MX1RSVUVACWRidXMtdXRpbC5jIGRidXMtdXRpbC5oIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUAJZGJ1cy1pbnRlcm5hbC5oIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUAJZGJ1cy1hc3luYy1hZGRyZXNzLXJlc29sdmVyLmMgXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQAlkYnVzLWFzeW5jLWhvc3QtbmFtZS1yZXNvbHZlci5jIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUAJZGJ1cy1hc3luYy1zZXJ2aWNlLXJlc29sdmVyLmMgXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQAlkYnVzLWRvbWFpbi1icm93c2VyLmMgXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQAlkYnVzLWVudHJ5LWdyb3VwLmMgXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQAlkYnVzLXNlcnZpY2UtYnJvd3Nlci5jIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUAJZGJ1cy1zZXJ2aWNlLXR5cGUtYnJvd3Nlci5jIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUAJZGJ1cy1zeW5jLWFkZHJlc3MtcmVzb2x2ZXIuYyBcCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfTElCREFFTU9OX1RSVUVAQEhBVkVfWE1MX1RSVUVACWRidXMtc3luYy1ob3N0LW5hbWUtcmVzb2x2ZXIuYyBcCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfTElCREFFTU9OX1RSVUVAQEhBVkVfWE1MX1RSVUVACWRidXMtc3luYy1zZXJ2aWNlLXJlc29sdmVyLmMgXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQAlkYnVzLXJlY29yZC1icm93c2VyLmMgIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUAJLi4vYXZhaGktY29tbW9uL2RidXMuYyAuLi9hdmFoaS1jb21tb24vZGJ1cy5oIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUAJLi4vYXZhaGktY29tbW9uL2RidXMtd2F0Y2gtZ2x1ZS5jIC4uL2F2YWhpLWNvbW1vbi9kYnVzLXdhdGNoLWdsdWUuaAorCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfTElCREFFTU9OX1RSVUVAQEhBVkVfWE1MX1RSVUVAYW1fX2FwcGVuZF82ID0gXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQAkkKERCVVNfTElCUykKKworQEhBVkVfREJVU19UUlVFQEBIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQGFtX19hcHBlbmRfNyA9ICQoREJVU19DRkxBR1MpIC1EREJVU19TWVNURU1fQlVTX0RFRkFVTFRfQUREUkVTUz1cIiQoREJVU19TWVNURU1fQlVTX0RFRkFVTFRfQUREUkVTUylcIgorc3ViZGlyID0gYXZhaGktZGFlbW9uCitESVNUX0NPTU1PTiA9ICQoYW1fX2Rpc3RfZGJ1c3NlcnZpY2VfREFUQV9ESVNUKSBcCisJJChhbV9fZGlzdF9kYnVzc3lzdGVtc2VydmljZXNfREFUQV9ESVNUKSBcCisJJChhbV9fZGlzdF9pbnRyb3NwZWN0aW9uX0RBVEFfRElTVCkgXAorCSQoYW1fX2Rpc3RfcGtnZGF0YV9EQVRBX0RJU1QpICQoYW1fX2Rpc3Rfc2VydmljZV9EQVRBX0RJU1QpIFwKKwkkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluIFwKKwkkKHNyY2RpcikvYXZhaGktZGJ1cy5jb25mLmluCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vYWN4X3B0aHJlYWQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2djY19zdGFja19wcm90ZWN0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9nY2NfdmlzaWJpbGl0eS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vaW50bHRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2ludHJvc3BlY3Rpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2x0b3B0aW9ucy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHR2ZXJzaW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbmxzLm00ICQodG9wX3NyY2RpcikvY29tbW9uL3B5dGhvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9hY2luY2x1ZGUubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vZG94eWdlbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9IGF2YWhpLWRidXMuY29uZgorQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KK2FtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChzYmluZGlyKSIgIiQoREVTVERJUikkKGRidXNzZXJ2aWNlZGlyKSIgXAorCSIkKERFU1RESVIpJChkYnVzc3lzdGVtc2VydmljZXNkaXIpIiBcCisJIiQoREVTVERJUikkKGludHJvc3BlY3Rpb25kaXIpIiAiJChERVNURElSKSQocGtnZGF0YWRpcikiIFwKKwkiJChERVNURElSKSQoc2VydmljZWRpcikiICIkKERFU1RESVIpJChwa2dzeXNjb25mZGlyKSIgXAorCSIkKERFU1RESVIpJChzeXN0ZW1kc3lzdGVtdW5pdGRpcikiCitQUk9HUkFNUyA9ICQobm9pbnN0X1BST0dSQU1TKSAkKHNiaW5fUFJPR1JBTVMpCithbV9fYXZhaGlfZGFlbW9uX1NPVVJDRVNfRElTVCA9IG1haW4uYyBtYWluLmggc2ltcGxlLXByb3RvY29sLmMgXAorCXNpbXBsZS1wcm90b2NvbC5oIHN0YXRpYy1zZXJ2aWNlcy5jIHN0YXRpYy1zZXJ2aWNlcy5oIFwKKwlzdGF0aWMtaG9zdHMuYyBzdGF0aWMtaG9zdHMuaCBpbmktZmlsZS1wYXJzZXIuYyBcCisJaW5pLWZpbGUtcGFyc2VyLmggc2V0cHJvY3RpdGxlLmMgc2V0cHJvY3RpdGxlLmggc2QtZGFlbW9uLmggXAorCXNkLWRhZW1vbi5jIC4uL2F2YWhpLWNsaWVudC9jaGVjay1uc3MuYyBjaHJvb3QuYyBjaHJvb3QuaCBcCisJY2Fwcy5jIGNhcHMuaCBkYnVzLXByb3RvY29sLmMgZGJ1cy1wcm90b2NvbC5oIGRidXMtdXRpbC5jIFwKKwlkYnVzLXV0aWwuaCBkYnVzLWludGVybmFsLmggZGJ1cy1hc3luYy1hZGRyZXNzLXJlc29sdmVyLmMgXAorCWRidXMtYXN5bmMtaG9zdC1uYW1lLXJlc29sdmVyLmMgZGJ1cy1hc3luYy1zZXJ2aWNlLXJlc29sdmVyLmMgXAorCWRidXMtZG9tYWluLWJyb3dzZXIuYyBkYnVzLWVudHJ5LWdyb3VwLmMgXAorCWRidXMtc2VydmljZS1icm93c2VyLmMgZGJ1cy1zZXJ2aWNlLXR5cGUtYnJvd3Nlci5jIFwKKwlkYnVzLXN5bmMtYWRkcmVzcy1yZXNvbHZlci5jIGRidXMtc3luYy1ob3N0LW5hbWUtcmVzb2x2ZXIuYyBcCisJZGJ1cy1zeW5jLXNlcnZpY2UtcmVzb2x2ZXIuYyBkYnVzLXJlY29yZC1icm93c2VyLmMgXAorCS4uL2F2YWhpLWNvbW1vbi9kYnVzLmMgLi4vYXZhaGktY29tbW9uL2RidXMuaCBcCisJLi4vYXZhaGktY29tbW9uL2RidXMtd2F0Y2gtZ2x1ZS5jIFwKKwkuLi9hdmFoaS1jb21tb24vZGJ1cy13YXRjaC1nbHVlLmgKK0BFTkFCTEVfQ0hST09UX1RSVUVAQEhBVkVfTElCREFFTU9OX1RSVUVAQEhBVkVfWE1MX1RSVUVAYW1fX29iamVjdHNfMSA9IGF2YWhpX2RhZW1vbi1jaHJvb3QuJChPQkpFWFQpIFwKK0BFTkFCTEVfQ0hST09UX1RSVUVAQEhBVkVfTElCREFFTU9OX1RSVUVAQEhBVkVfWE1MX1RSVUVACWF2YWhpX2RhZW1vbi1jYXBzLiQoT0JKRVhUKQorQEhBVkVfREJVU19UUlVFQEBIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQGFtX19vYmplY3RzXzIgPSBhdmFoaV9kYWVtb24tZGJ1cy1wcm90b2NvbC4kKE9CSkVYVCkgXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQAlhdmFoaV9kYWVtb24tZGJ1cy11dGlsLiQoT0JKRVhUKSBcCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfTElCREFFTU9OX1RSVUVAQEhBVkVfWE1MX1RSVUVACWF2YWhpX2RhZW1vbi1kYnVzLWFzeW5jLWFkZHJlc3MtcmVzb2x2ZXIuJChPQkpFWFQpIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUAJYXZhaGlfZGFlbW9uLWRidXMtYXN5bmMtaG9zdC1uYW1lLXJlc29sdmVyLiQoT0JKRVhUKSBcCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfTElCREFFTU9OX1RSVUVAQEhBVkVfWE1MX1RSVUVACWF2YWhpX2RhZW1vbi1kYnVzLWFzeW5jLXNlcnZpY2UtcmVzb2x2ZXIuJChPQkpFWFQpIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUAJYXZhaGlfZGFlbW9uLWRidXMtZG9tYWluLWJyb3dzZXIuJChPQkpFWFQpIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUAJYXZhaGlfZGFlbW9uLWRidXMtZW50cnktZ3JvdXAuJChPQkpFWFQpIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUAJYXZhaGlfZGFlbW9uLWRidXMtc2VydmljZS1icm93c2VyLiQoT0JKRVhUKSBcCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfTElCREFFTU9OX1RSVUVAQEhBVkVfWE1MX1RSVUVACWF2YWhpX2RhZW1vbi1kYnVzLXNlcnZpY2UtdHlwZS1icm93c2VyLiQoT0JKRVhUKSBcCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfTElCREFFTU9OX1RSVUVAQEhBVkVfWE1MX1RSVUVACWF2YWhpX2RhZW1vbi1kYnVzLXN5bmMtYWRkcmVzcy1yZXNvbHZlci4kKE9CSkVYVCkgXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQAlhdmFoaV9kYWVtb24tZGJ1cy1zeW5jLWhvc3QtbmFtZS1yZXNvbHZlci4kKE9CSkVYVCkgXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQAlhdmFoaV9kYWVtb24tZGJ1cy1zeW5jLXNlcnZpY2UtcmVzb2x2ZXIuJChPQkpFWFQpIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUAJYXZhaGlfZGFlbW9uLWRidXMtcmVjb3JkLWJyb3dzZXIuJChPQkpFWFQpIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUAJYXZhaGlfZGFlbW9uLWRidXMuJChPQkpFWFQpIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUAJYXZhaGlfZGFlbW9uLWRidXMtd2F0Y2gtZ2x1ZS4kKE9CSkVYVCkKK0BIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQGFtX2F2YWhpX2RhZW1vbl9PQkpFQ1RTID0gYXZhaGlfZGFlbW9uLW1haW4uJChPQkpFWFQpIFwKK0BIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQAlhdmFoaV9kYWVtb24tc2ltcGxlLXByb3RvY29sLiQoT0JKRVhUKSBcCitASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUAJYXZhaGlfZGFlbW9uLXN0YXRpYy1zZXJ2aWNlcy4kKE9CSkVYVCkgXAorQEhBVkVfTElCREFFTU9OX1RSVUVAQEhBVkVfWE1MX1RSVUVACWF2YWhpX2RhZW1vbi1zdGF0aWMtaG9zdHMuJChPQkpFWFQpIFwKK0BIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQAlhdmFoaV9kYWVtb24taW5pLWZpbGUtcGFyc2VyLiQoT0JKRVhUKSBcCitASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUAJYXZhaGlfZGFlbW9uLXNldHByb2N0aXRsZS4kKE9CSkVYVCkgXAorQEhBVkVfTElCREFFTU9OX1RSVUVAQEhBVkVfWE1MX1RSVUVACWF2YWhpX2RhZW1vbi1zZC1kYWVtb24uJChPQkpFWFQpIFwKK0BIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQAlhdmFoaV9kYWVtb24tY2hlY2stbnNzLiQoT0JKRVhUKSBcCitASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUAJJChhbV9fb2JqZWN0c18xKSBcCitASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUAJJChhbV9fb2JqZWN0c18yKQorYXZhaGlfZGFlbW9uX09CSkVDVFMgPSAkKGFtX2F2YWhpX2RhZW1vbl9PQkpFQ1RTKQorYW1fX0RFUEVOREVOQ0lFU18xID0KK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUBhbV9fREVQRU5ERU5DSUVTXzIgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKK0BIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQGF2YWhpX2RhZW1vbl9ERVBFTkRFTkNJRVMgPSAuLi9hdmFoaS1jb21tb24vbGliYXZhaGktY29tbW9uLmxhIFwKK0BIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQAkuLi9hdmFoaS1jb3JlL2xpYmF2YWhpLWNvcmUubGEgXAorQEhBVkVfTElCREFFTU9OX1RSVUVAQEhBVkVfWE1MX1RSVUVACSQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCitASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUAJJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKK0BIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQAkkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAorQEhBVkVfTElCREFFTU9OX1RSVUVAQEhBVkVfWE1MX1RSVUVACSQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCitASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUAJJChhbV9fREVQRU5ERU5DSUVTXzIpCitBTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCithbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfbHRfMCA9IC0tc2lsZW50CithdmFoaV9kYWVtb25fTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoYXZhaGlfZGFlbW9uX0NGTEFHUykgXAorCSQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKK2FtX19pbmlfZmlsZV9wYXJzZXJfdGVzdF9TT1VSQ0VTX0RJU1QgPSBpbmktZmlsZS1wYXJzZXIuYyBcCisJaW5pLWZpbGUtcGFyc2VyLmggaW5pLWZpbGUtcGFyc2VyLXRlc3QuYworQEhBVkVfTElCREFFTU9OX1RSVUVAQEhBVkVfWE1MX1RSVUVAYW1faW5pX2ZpbGVfcGFyc2VyX3Rlc3RfT0JKRUNUUyA9IGluaV9maWxlX3BhcnNlcl90ZXN0LWluaS1maWxlLXBhcnNlci4kKE9CSkVYVCkgXAorQEhBVkVfTElCREFFTU9OX1RSVUVAQEhBVkVfWE1MX1RSVUVACWluaV9maWxlX3BhcnNlcl90ZXN0LWluaS1maWxlLXBhcnNlci10ZXN0LiQoT0JKRVhUKQoraW5pX2ZpbGVfcGFyc2VyX3Rlc3RfT0JKRUNUUyA9ICQoYW1faW5pX2ZpbGVfcGFyc2VyX3Rlc3RfT0JKRUNUUykKK0BIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQGluaV9maWxlX3BhcnNlcl90ZXN0X0RFUEVOREVOQ0lFUyA9IC4uL2F2YWhpLWNvbW1vbi9saWJhdmFoaS1jb21tb24ubGEgXAorQEhBVkVfTElCREFFTU9OX1RSVUVAQEhBVkVfWE1MX1RSVUVACS4uL2F2YWhpLWNvcmUvbGliYXZhaGktY29yZS5sYQoraW5pX2ZpbGVfcGFyc2VyX3Rlc3RfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCisJJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpIFwKKwkkKGluaV9maWxlX3BhcnNlcl90ZXN0X0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgXAorCSQoTERGTEFHUykgLW8gJEAKK0RFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpCitkZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCithbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcworYW1fX212ID0gbXYgLWYKK0NPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAorCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0xUQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpIFwKKwkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKKwkkKEFNX0NGTEFHUykgJChDRkxBR1MpCitBTV9WX0NDID0gJChhbV9fdl9DQ19AQU1fVkApCithbV9fdl9DQ18gPSAkKGFtX192X0NDX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICIgJEA7CitBTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCithbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfYXRfMCA9IEAKK0NDTEQgPSAkKENDKQorTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAorCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEX0BBTV9WQCkKK2FtX192X0NDTERfID0gJChhbV9fdl9DQ0xEX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfQ0NMRF8wID0gQGVjaG8gIiAgQ0NMRCAgIiAkQDsKK0FNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQorYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAiICRAOworU09VUkNFUyA9ICQoYXZhaGlfZGFlbW9uX1NPVVJDRVMpICQoaW5pX2ZpbGVfcGFyc2VyX3Rlc3RfU09VUkNFUykKK0RJU1RfU09VUkNFUyA9ICQoYW1fX2F2YWhpX2RhZW1vbl9TT1VSQ0VTX0RJU1QpIFwKKwkkKGFtX19pbmlfZmlsZV9wYXJzZXJfdGVzdF9TT1VSQ0VTX0RJU1QpCithbV9fZGlzdF9kYnVzc2VydmljZV9EQVRBX0RJU1QgPSBhdmFoaS1kYnVzLmNvbmYKK2FtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOworYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKKyAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAorICAgICopIGY9JCRwOzsgXAorICBlc2FjOworYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOworYW1fX2luc3RhbGxfbWF4ID0gNDAKK2FtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCisgIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKK2FtX19ub2Jhc2Vfc3RyaXAgPSBcCisgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgorYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAorICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAorICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAorICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCisgICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAorICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAorICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKK2FtX19iYXNlX2xpc3QgPSBcCisgIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCisgIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKK2FtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIgPSB7IFwKKyAgdGVzdCAteiAiJCRmaWxlcyIgXAorICAgIHx8IHsgdGVzdCAhIC1kICIkJGRpciIgJiYgdGVzdCAhIC1mICIkJGRpciIgJiYgdGVzdCAhIC1yICIkJGRpciI7IH0gXAorICAgIHx8IHsgZWNobyAiICggY2QgJyQkZGlyJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKKyAgICAgICAgICQoYW1fX2NkKSAiJCRkaXIiICYmIHJtIC1mICQkZmlsZXM7IH07IFwKKyAgfQorYW1fX2Rpc3RfZGJ1c3N5c3RlbXNlcnZpY2VzX0RBVEFfRElTVCA9IG9yZy5mcmVlZGVza3RvcC5BdmFoaS5zZXJ2aWNlCithbV9fZGlzdF9pbnRyb3NwZWN0aW9uX0RBVEFfRElTVCA9IG9yZy5mcmVlZGVza3RvcC5BdmFoaS5TZXJ2ZXIueG1sIFwKKwlvcmcuZnJlZWRlc2t0b3AuQXZhaGkuRW50cnlHcm91cC54bWwgXAorCW9yZy5mcmVlZGVza3RvcC5BdmFoaS5Eb21haW5Ccm93c2VyLnhtbCBcCisJb3JnLmZyZWVkZXNrdG9wLkF2YWhpLlNlcnZpY2VUeXBlQnJvd3Nlci54bWwgXAorCW9yZy5mcmVlZGVza3RvcC5BdmFoaS5TZXJ2aWNlQnJvd3Nlci54bWwgXAorCW9yZy5mcmVlZGVza3RvcC5BdmFoaS5TZXJ2aWNlUmVzb2x2ZXIueG1sIFwKKwlvcmcuZnJlZWRlc2t0b3AuQXZhaGkuQWRkcmVzc1Jlc29sdmVyLnhtbCBcCisJb3JnLmZyZWVkZXNrdG9wLkF2YWhpLkhvc3ROYW1lUmVzb2x2ZXIueG1sIFwKKwlvcmcuZnJlZWRlc2t0b3AuQXZhaGkuUmVjb3JkQnJvd3Nlci54bWwKK2FtX19kaXN0X3BrZ2RhdGFfREFUQV9ESVNUID0gYXZhaGktc2VydmljZS5kdGQKK2FtX19kaXN0X3NlcnZpY2VfREFUQV9ESVNUID0gc3NoLnNlcnZpY2Ugc2Z0cC1zc2guc2VydmljZQorREFUQSA9ICQoZGlzdF9kYnVzc2VydmljZV9EQVRBKSAkKGRpc3RfZGJ1c3N5c3RlbXNlcnZpY2VzX0RBVEEpIFwKKwkkKGRpc3RfaW50cm9zcGVjdGlvbl9EQVRBKSAkKGRpc3RfcGtnZGF0YV9EQVRBKSBcCisJJChkaXN0X3NlcnZpY2VfREFUQSkgJChwa2dzeXNjb25mX0RBVEEpIFwKKwkkKHN5c3RlbWRzeXN0ZW11bml0X0RBVEEpCitFVEFHUyA9IGV0YWdzCitDVEFHUyA9IGN0YWdzCitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQUxMX0xJTkdVQVMgPSBAQUxMX0xJTkdVQVNACitBTVRBUiA9IEBBTVRBUkAKK0FNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAorQVIgPSBAQVJACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVZBSElfQVVUT0lQRF9HUk9VUCA9IEBBVkFISV9BVVRPSVBEX0dST1VQQAorQVZBSElfQVVUT0lQRF9VU0VSID0gQEFWQUhJX0FVVE9JUERfVVNFUkAKK0FWQUhJX0dST1VQID0gQEFWQUhJX0dST1VQQAorQVZBSElfUFJJVl9BQ0NFU1NfR1JPVVAgPSBAQVZBSElfUFJJVl9BQ0NFU1NfR1JPVVBACitBVkFISV9VU0VSID0gQEFWQUhJX1VTRVJACitBV0sgPSBAQVdLQAorQ0FUQUxPR1MgPSBAQ0FUQUxPR1NACitDQVRPQkpFWFQgPSBAQ0FUT0JKRVhUQAorQ0MgPSBAQ0NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREFUQURJUk5BTUUgPSBAREFUQURJUk5BTUVACitEQlVTX0NGTEFHUyA9IEBEQlVTX0NGTEFHU0AKK0RCVVNfTElCUyA9IEBEQlVTX0xJQlNACitEQlVTX1NZU1RFTV9CVVNfREVGQVVMVF9BRERSRVNTID0gQERCVVNfU1lTVEVNX0JVU19ERUZBVUxUX0FERFJFU1NACitEQlVTX1NZU19ESVIgPSBAREJVU19TWVNfRElSQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RMTFRPT0wgPSBARExMVE9PTEAKK0RPWFlHRU5fUEFQRVJfU0laRSA9IEBET1hZR0VOX1BBUEVSX1NJWkVACitEU1lNVVRJTCA9IEBEU1lNVVRJTEAKK0RVTVBCSU4gPSBARFVNUEJJTkAKK0RYX0NPTkZJRyA9IEBEWF9DT05GSUdACitEWF9ET0NESVIgPSBARFhfRE9DRElSQAorRFhfRE9UID0gQERYX0RPVEAKK0RYX0RPWFlHRU4gPSBARFhfRE9YWUdFTkAKK0RYX0RWSVBTID0gQERYX0RWSVBTQAorRFhfRUdSRVAgPSBARFhfRUdSRVBACitEWF9FTlYgPSBARFhfRU5WQAorRFhfRkxBR19jaGkgPSBARFhfRkxBR19jaGlACitEWF9GTEFHX2NobSA9IEBEWF9GTEFHX2NobUAKK0RYX0ZMQUdfZG9jID0gQERYX0ZMQUdfZG9jQAorRFhfRkxBR19kb3QgPSBARFhfRkxBR19kb3RACitEWF9GTEFHX2h0bWwgPSBARFhfRkxBR19odG1sQAorRFhfRkxBR19tYW4gPSBARFhfRkxBR19tYW5ACitEWF9GTEFHX3BkZiA9IEBEWF9GTEFHX3BkZkAKK0RYX0ZMQUdfcHMgPSBARFhfRkxBR19wc0AKK0RYX0ZMQUdfcnRmID0gQERYX0ZMQUdfcnRmQAorRFhfRkxBR194bWwgPSBARFhfRkxBR194bWxACitEWF9ISEMgPSBARFhfSEhDQAorRFhfTEFURVggPSBARFhfTEFURVhACitEWF9NQUtFSU5ERVggPSBARFhfTUFLRUlOREVYQAorRFhfUERGTEFURVggPSBARFhfUERGTEFURVhACitEWF9QRVJMID0gQERYX1BFUkxACitEWF9QUk9KRUNUID0gQERYX1BST0pFQ1RACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VYRUVYVCA9IEBFWEVFWFRACitGR1JFUCA9IEBGR1JFUEAKK0dBQ1VUSUwgPSBAR0FDVVRJTEAKK0dFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACitHTElCMjBfQ0ZMQUdTID0gQEdMSUIyMF9DRkxBR1NACitHTElCMjBfTElCUyA9IEBHTElCMjBfTElCU0AKK0dNT0ZJTEVTID0gQEdNT0ZJTEVTQAorR01TR0ZNVCA9IEBHTVNHRk1UQAorR09CSkVDVF9DRkxBR1MgPSBAR09CSkVDVF9DRkxBR1NACitHT0JKRUNUX0xJQlMgPSBAR09CSkVDVF9MSUJTQAorR1JFUCA9IEBHUkVQQAorR1RLMjBfQ0ZMQUdTID0gQEdUSzIwX0NGTEFHU0AKK0dUSzIwX0xJQlMgPSBAR1RLMjBfTElCU0AKK0dUSzMwX0NGTEFHUyA9IEBHVEszMF9DRkxBR1NACitHVEszMF9MSUJTID0gQEdUSzMwX0xJQlNACitIT1dMX0NPTVBBVF9WRVJTSU9OID0gQEhPV0xfQ09NUEFUX1ZFUlNJT05ACitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lOU1RPQkpFWFQgPSBASU5TVE9CSkVYVEAKK0lOVExMSUJTID0gQElOVExMSUJTQAorSU5UTFRPT0xfRVhUUkFDVCA9IEBJTlRMVE9PTF9FWFRSQUNUQAorSU5UTFRPT0xfTUVSR0UgPSBASU5UTFRPT0xfTUVSR0VACitJTlRMVE9PTF9QRVJMID0gQElOVExUT09MX1BFUkxACitJTlRMVE9PTF9VUERBVEUgPSBASU5UTFRPT0xfVVBEQVRFQAorSU5UUk9TUEVDVElPTl9DRkxBR1MgPSBASU5UUk9TUEVDVElPTl9DRkxBR1NACitJTlRST1NQRUNUSU9OX0NPTVBJTEVSID0gQElOVFJPU1BFQ1RJT05fQ09NUElMRVJACitJTlRST1NQRUNUSU9OX0dFTkVSQVRFID0gQElOVFJPU1BFQ1RJT05fR0VORVJBVEVACitJTlRST1NQRUNUSU9OX0dJUkRJUiA9IEBJTlRST1NQRUNUSU9OX0dJUkRJUkAKK0lOVFJPU1BFQ1RJT05fTElCUyA9IEBJTlRST1NQRUNUSU9OX0xJQlNACitJTlRST1NQRUNUSU9OX01BS0VGSUxFID0gQElOVFJPU1BFQ1RJT05fTUFLRUZJTEVACitJTlRST1NQRUNUSU9OX1NDQU5ORVIgPSBASU5UUk9TUEVDVElPTl9TQ0FOTkVSQAorSU5UUk9TUEVDVElPTl9UWVBFTElCRElSID0gQElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUkAKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCQVZBSElfQ0xJRU5UX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DTElFTlRfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfQ09NTU9OX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DT01NT05fVkVSU0lPTl9JTkZPQAorTElCQVZBSElfQ09NUEFUX0hPV0xfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NPTVBBVF9IT1dMX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPTVBBVF9MSUJETlNfU0RfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NPTVBBVF9MSUJETlNfU0RfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfQ09SRV9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ09SRV9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9HTElCX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9HTElCX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0dPQkpFQ1RfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0dPQkpFQ1RfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfUVQzX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9RVDNfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfUVQ0X1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9RVDRfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfVUlfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX1VJX1ZFUlNJT05fSU5GT0AKK0xJQkRBRU1PTl9DRkxBR1MgPSBATElCREFFTU9OX0NGTEFHU0AKK0xJQkRBRU1PTl9MSUJTID0gQExJQkRBRU1PTl9MSUJTQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAorTUNTID0gQE1DU0AKK01EQVNTRU1CTEVSID0gQE1EQVNTRU1CTEVSQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTUtJTlNUQUxMRElSUyA9IEBNS0lOU1RBTExESVJTQAorTU9DX1FUMyA9IEBNT0NfUVQzQAorTU9DX1FUNCA9IEBNT0NfUVQ0QAorTU9OT0RPQ0VSID0gQE1PTk9ET0NFUkAKK01PTk9ET0NfQ0ZMQUdTID0gQE1PTk9ET0NfQ0ZMQUdTQAorTU9OT0RPQ19ESVIgPSBATU9OT0RPQ19ESVJACitNT05PRE9DX0xJQlMgPSBATU9OT0RPQ19MSUJTQAorTVNHRk1UID0gQE1TR0ZNVEAKK01TR0ZNVF9PUFRTID0gQE1TR0ZNVF9PUFRTQAorTVNHTUVSR0UgPSBATVNHTUVSR0VACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitPQkpEVU1QID0gQE9CSkRVTVBACitPQkpFWFQgPSBAT0JKRVhUQAorT1RPT0wgPSBAT1RPT0xACitPVE9PTDY0ID0gQE9UT09MNjRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK1BLR19DT05GSUdfTElCRElSID0gQFBLR19DT05GSUdfTElCRElSQAorUEtHX0NPTkZJR19QQVRIID0gQFBLR19DT05GSUdfUEFUSEAKK1BPRklMRVMgPSBAUE9GSUxFU0AKK1BPU1VCID0gQFBPU1VCQAorUE9fSU5fREFUQURJUl9GQUxTRSA9IEBQT19JTl9EQVRBRElSX0ZBTFNFQAorUE9fSU5fREFUQURJUl9UUlVFID0gQFBPX0lOX0RBVEFESVJfVFJVRUAKK1BUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKK1BUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAorUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKK1BZVEhPTiA9IEBQWVRIT05ACitQWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAorUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKK1BZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKK1BZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAorUVQzX0NGTEFHUyA9IEBRVDNfQ0ZMQUdTQAorUVQzX0xJQlMgPSBAUVQzX0xJQlNACitRVDRfQ0ZMQUdTID0gQFFUNF9DRkxBR1NACitRVDRfTElCUyA9IEBRVDRfTElCU0AKK1JBTkxJQiA9IEBSQU5MSUJACitTRUQgPSBAU0VEQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NUT1cgPSBAU1RPV0AKK1NUUklQID0gQFNUUklQQAorVVNFX05MUyA9IEBVU0VfTkxTQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorVklTSUJJTElUWV9ISURERU5fQ0ZMQUdTID0gQFZJU0lCSUxJVFlfSElEREVOX0NGTEFHU0AKK1hHRVRURVhUID0gQFhHRVRURVhUQAorWE1MX0NGTEFHUyA9IEBYTUxfQ0ZMQUdTQAorWE1MX0xJQlMgPSBAWE1MX0xJQlNACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9BUiA9IEBhY19jdF9BUkAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKK2FjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK2FjeF9wdGhyZWFkX2NvbmZpZyA9IEBhY3hfcHRocmVhZF9jb25maWdACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2F2YWhpX3J1bnRpbWVfZGlyID0gQGF2YWhpX3J1bnRpbWVfZGlyQAorYXZhaGlfc29ja2V0ID0gQGF2YWhpX3NvY2tldEAKK2F2YWhpbG9jYWxlZGlyID0gQGF2YWhpbG9jYWxlZGlyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitoYXZlX3BrZ19jb25maWcgPSBAaGF2ZV9wa2dfY29uZmlnQAoraGF2ZV94bWx0b21hbiA9IEBoYXZlX3htbHRvbWFuQAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2ludGVyZmFjZXNkaXIgPSBAaW50ZXJmYWNlc2RpckAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAorcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3B5ZXhlY2RpciA9IEBweWV4ZWNkaXJACitweXRob25kaXIgPSBAcHl0aG9uZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzcmNkaXIgPSBAc3JjZGlyQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAorc3lzdGVtZHN5c3RlbXVuaXRkaXIgPSBAc3lzdGVtZHN5c3RlbXVuaXRkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKKworIyBUaGlzIGNvb2wgZGVidWcgdHJhcCB3b3JrcyBvbiBpMzg2L2djYyBvbmx5CitBTV9DRkxBR1MgPSAtSSQodG9wX3NyY2RpcikgJy1EREVCVUdfVFJBUD1fX2FzbV9fKCJpbnQgJCQzIiknIFwKKwkkKGFtX19hcHBlbmRfMSkKK0BIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQHBrZ3N5c2NvbmZkaXIgPSAkKHN5c2NvbmZkaXIpL2F2YWhpCitASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUBzZXJ2aWNlZGlyID0gJChwa2dzeXNjb25mZGlyKS9zZXJ2aWNlcworQEhBVkVfTElCREFFTU9OX1RSVUVAQEhBVkVfWE1MX1RSVUVAaW50cm9zcGVjdGlvbmRpciA9ICQoZGF0YWRpcikvZGJ1cy0xL2ludGVyZmFjZXMKK0BIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQGRidXNzeXN0ZW1zZXJ2aWNlc2RpciA9ICQoZGF0YWRpcikvZGJ1cy0xL3N5c3RlbS1zZXJ2aWNlcworQEhBVkVfTElCREFFTU9OX1RSVUVAQEhBVkVfWE1MX1RSVUVAYXZhaGlfZGFlbW9uX1NPVVJDRVMgPSBtYWluLmMgXAorQEhBVkVfTElCREFFTU9OX1RSVUVAQEhBVkVfWE1MX1RSVUVACW1haW4uaCBzaW1wbGUtcHJvdG9jb2wuYyBcCitASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUAJc2ltcGxlLXByb3RvY29sLmggXAorQEhBVkVfTElCREFFTU9OX1RSVUVAQEhBVkVfWE1MX1RSVUVACXN0YXRpYy1zZXJ2aWNlcy5jIFwKK0BIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQAlzdGF0aWMtc2VydmljZXMuaCBcCitASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUAJc3RhdGljLWhvc3RzLmMgXAorQEhBVkVfTElCREFFTU9OX1RSVUVAQEhBVkVfWE1MX1RSVUVACXN0YXRpYy1ob3N0cy5oIFwKK0BIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQAlpbmktZmlsZS1wYXJzZXIuYyBcCitASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUAJaW5pLWZpbGUtcGFyc2VyLmggXAorQEhBVkVfTElCREFFTU9OX1RSVUVAQEhBVkVfWE1MX1RSVUVACXNldHByb2N0aXRsZS5jIFwKK0BIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQAlzZXRwcm9jdGl0bGUuaCBzZC1kYWVtb24uaCBcCitASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUAJc2QtZGFlbW9uLmMgXAorQEhBVkVfTElCREFFTU9OX1RSVUVAQEhBVkVfWE1MX1RSVUVACS4uL2F2YWhpLWNsaWVudC9jaGVjay1uc3MuYyBcCitASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUAJJChhbV9fYXBwZW5kXzIpIFwKK0BIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQAkkKGFtX19hcHBlbmRfNSkKK0BIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQGF2YWhpX2RhZW1vbl9DRkxBR1MgPSAgXAorQEhBVkVfTElCREFFTU9OX1RSVUVAQEhBVkVfWE1MX1RSVUVACSQoQU1fQ0ZMQUdTKSBcCitASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUAJJChMSUJEQUVNT05fQ0ZMQUdTKSBcCitASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUAJJChYTUxfQ0ZMQUdTKSBcCitASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUAJJChhbV9fYXBwZW5kXzcpCitASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUBhdmFoaV9kYWVtb25fTERBREQgPSAkKEFNX0xEQUREKSBcCitASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUAJLi4vYXZhaGktY29tbW9uL2xpYmF2YWhpLWNvbW1vbi5sYSBcCitASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUAJLi4vYXZhaGktY29yZS9saWJhdmFoaS1jb3JlLmxhIFwKK0BIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQAkkKExJQkRBRU1PTl9MSUJTKSBcCitASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUAJJChYTUxfTElCUykgXAorQEhBVkVfTElCREFFTU9OX1RSVUVAQEhBVkVfWE1MX1RSVUVACSQoYW1fX2FwcGVuZF8zKSBcCitASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUAJJChhbV9fYXBwZW5kXzQpIFwKK0BIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQAkkKGFtX19hcHBlbmRfNikKK0BIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQGluaV9maWxlX3BhcnNlcl90ZXN0X1NPVVJDRVMgPSBcCitASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUAJaW5pLWZpbGUtcGFyc2VyLmMgaW5pLWZpbGUtcGFyc2VyLmggXAorQEhBVkVfTElCREFFTU9OX1RSVUVAQEhBVkVfWE1MX1RSVUVACWluaS1maWxlLXBhcnNlci10ZXN0LmMKKworQEhBVkVfTElCREFFTU9OX1RSVUVAQEhBVkVfWE1MX1RSVUVAaW5pX2ZpbGVfcGFyc2VyX3Rlc3RfQ0ZMQUdTID0gJChBTV9DRkxBR1MpCitASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUBpbmlfZmlsZV9wYXJzZXJfdGVzdF9MREFERCA9ICQoQU1fTERBREQpIC4uL2F2YWhpLWNvbW1vbi9saWJhdmFoaS1jb21tb24ubGEgLi4vYXZhaGktY29yZS9saWJhdmFoaS1jb3JlLmxhCitASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUBwa2dzeXNjb25mX0RBVEEgPSBcCitASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUAJYXZhaGktZGFlbW9uLmNvbmYgXAorQEhBVkVfTElCREFFTU9OX1RSVUVAQEhBVkVfWE1MX1RSVUVACWhvc3RzCisKK0BIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQGRpc3Rfc2VydmljZV9EQVRBID0gXAorQEhBVkVfTElCREFFTU9OX1RSVUVAQEhBVkVfWE1MX1RSVUVACXNzaC5zZXJ2aWNlIFwKK0BIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQAlzZnRwLXNzaC5zZXJ2aWNlCisKK0BIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQGRpc3RfcGtnZGF0YV9EQVRBID0gXAorQEhBVkVfTElCREFFTU9OX1RSVUVAQEhBVkVfWE1MX1RSVUVACWF2YWhpLXNlcnZpY2UuZHRkCisKK0BIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1NZU1RFTURfVFJVRUBASEFWRV9YTUxfVFJVRUBzeXN0ZW1kc3lzdGVtdW5pdF9EQVRBID0gXAorQEhBVkVfTElCREFFTU9OX1RSVUVAQEhBVkVfU1lTVEVNRF9UUlVFQEBIQVZFX1hNTF9UUlVFQAlhdmFoaS1kYWVtb24uc2VydmljZSBcCitASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9TWVNURU1EX1RSVUVAQEhBVkVfWE1MX1RSVUVACWF2YWhpLWRhZW1vbi5zb2NrZXQKKworQEhBVkVfTElCREFFTU9OX1RSVUVAQEhBVkVfU1lTVEVNRF9UUlVFQEBIQVZFX1hNTF9UUlVFQGRpc3RfZGJ1c3N5c3RlbXNlcnZpY2VzX0RBVEEgPSBcCitASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9TWVNURU1EX1RSVUVAQEhBVkVfWE1MX1RSVUVACW9yZy5mcmVlZGVza3RvcC5BdmFoaS5zZXJ2aWNlCisKK0BIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQENMRUFORklMRVMgPSAkKHN5c3RlbWRzeXN0ZW11bml0X0RBVEEpCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfTElCREFFTU9OX1RSVUVAQEhBVkVfWE1MX1RSVUVAZGJ1c3NlcnZpY2VkaXIgPSAkKERCVVNfU1lTX0RJUikKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUBkaXN0X2RidXNzZXJ2aWNlX0RBVEEgPSBhdmFoaS1kYnVzLmNvbmYKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUBkaXN0X2ludHJvc3BlY3Rpb25fREFUQSA9IFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUAJb3JnLmZyZWVkZXNrdG9wLkF2YWhpLlNlcnZlci54bWwgXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQAlvcmcuZnJlZWRlc2t0b3AuQXZhaGkuRW50cnlHcm91cC54bWwgXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQAlvcmcuZnJlZWRlc2t0b3AuQXZhaGkuRG9tYWluQnJvd3Nlci54bWwgXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQAlvcmcuZnJlZWRlc2t0b3AuQXZhaGkuU2VydmljZVR5cGVCcm93c2VyLnhtbCBcCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfTElCREFFTU9OX1RSVUVAQEhBVkVfWE1MX1RSVUVACW9yZy5mcmVlZGVza3RvcC5BdmFoaS5TZXJ2aWNlQnJvd3Nlci54bWwgXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQAlvcmcuZnJlZWRlc2t0b3AuQXZhaGkuU2VydmljZVJlc29sdmVyLnhtbCBcCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfTElCREFFTU9OX1RSVUVAQEhBVkVfWE1MX1RSVUVACW9yZy5mcmVlZGVza3RvcC5BdmFoaS5BZGRyZXNzUmVzb2x2ZXIueG1sIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUAJb3JnLmZyZWVkZXNrdG9wLkF2YWhpLkhvc3ROYW1lUmVzb2x2ZXIueG1sIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUAJb3JnLmZyZWVkZXNrdG9wLkF2YWhpLlJlY29yZEJyb3dzZXIueG1sCisKK0VYVFJBX0RJU1QgPSBcCisJYXZhaGktZGFlbW9uLmNvbmYgXAorCWV4YW1wbGUuc2VydmljZSBcCisJaG9zdHMgXAorCWV4YW1wbGUuc2VydmljZSBcCisJaW50cm9zcGVjdC5kdGQgXAorCWludHJvc3BlY3QueHNsIFwKKwlhdmFoaS1kYWVtb24uc2VydmljZS5pbiBcCisJYXZhaGktZGFlbW9uLnNvY2tldC5pbgorCithbGw6IGFsbC1hbQorCisuU1VGRklYRVM6CisuU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCiskKHNyY2RpcikvTWFrZWZpbGUuaW46ICAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAorCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiBhdmFoaS1kYWVtb24vTWFrZWZpbGUnOyBcCisJJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1mb3JlaWduIGF2YWhpLWRhZW1vbi9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CithdmFoaS1kYnVzLmNvbmY6ICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoc3JjZGlyKS9hdmFoaS1kYnVzLmNvbmYuaW4KKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQAorCitjbGVhbi1ub2luc3RQUk9HUkFNUzoKKwlAbGlzdD0nJChub2luc3RfUFJPR1JBTVMpJzsgdGVzdCAtbiAiJCRsaXN0IiB8fCBleGl0IDA7IFwKKwllY2hvICIgcm0gLWYiICQkbGlzdDsgXAorCXJtIC1mICQkbGlzdCB8fCBleGl0ICQkPzsgXAorCXRlc3QgLW4gIiQoRVhFRVhUKSIgfHwgZXhpdCAwOyBcCisJbGlzdD1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkICdzLyQoRVhFRVhUKSQkLy8nYDsgXAorCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCisJcm0gLWYgJCRsaXN0CitpbnN0YWxsLXNiaW5QUk9HUkFNUzogJChzYmluX1BST0dSQU1TKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQoc2JpbmRpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKHNiaW5kaXIpIgorCUBsaXN0PSckKHNiaW5fUFJPR1JBTVMpJzsgdGVzdCAtbiAiJChzYmluZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAorCXNlZCAncy8kKEVYRUVYVCkkJC8vJyB8IFwKKwl3aGlsZSByZWFkIHAgcDE7IGRvIGlmIHRlc3QgLWYgJCRwIHx8IHRlc3QgLWYgJCRwMTsgXAorCSAgdGhlbiBlY2hvICIkJHAiOyBlY2hvICIkJHAiOyBlbHNlIDo7IGZpOyBcCisJZG9uZSB8IFwKKwlzZWQgLWUgJ3A7cywuKi8sLDtuO2gnIC1lICdzfC4qfC58JyBcCisJICAgIC1lICdwO3g7cywuKi8sLDtzLyQoRVhFRVhUKSQkLy87JCh0cmFuc2Zvcm0pO3MvJCQvJChFWEVFWFQpLycgfCBcCisJc2VkICdOO047TjtzLFxuLCAsZycgfCBcCisJJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIjsgZGlyc1siLiJdID0gMSB9IFwKKwkgIHsgZD0kJDM7IGlmIChkaXJzW2RdICE9IDEpIHsgcHJpbnQgImQiLCBkOyBkaXJzW2RdID0gMSB9IFwKKwkgICAgaWYgKCQkMiA9PSAkJDQpIGZpbGVzW2RdID0gZmlsZXNbZF0gIiAiICQkMTsgXAorCSAgICBlbHNlIHsgcHJpbnQgImYiLCAkJDMgIi8iICQkNCwgJCQxOyB9IH0gXAorCSAgRU5EIHsgZm9yIChkIGluIGZpbGVzKSBwcmludCAiZiIsIGQsIGZpbGVzW2RdIH0nIHwgXAorCXdoaWxlIHJlYWQgdHlwZSBkaXIgZmlsZXM7IGRvIFwKKwkgICAgaWYgdGVzdCAiJCRkaXIiID0gLjsgdGhlbiBkaXI9OyBlbHNlIGRpcj0vJCRkaXI7IGZpOyBcCisJICAgIHRlc3QgLXogIiQkZmlsZXMiIHx8IHsgXAorCSAgICBlY2hvICIgJChJTlNUQUxMX1BST0dSQU1fRU5WKSAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMX1BST0dSQU0pICQkZmlsZXMgJyQoREVTVERJUikkKHNiaW5kaXIpJCRkaXInIjsgXAorCSAgICAkKElOU1RBTExfUFJPR1JBTV9FTlYpICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTExfUFJPR1JBTSkgJCRmaWxlcyAiJChERVNURElSKSQoc2JpbmRpcikkJGRpciIgfHwgZXhpdCAkJD87IFwKKwkgICAgfSBcCisJOyBkb25lCisKK3VuaW5zdGFsbC1zYmluUFJPR1JBTVM6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChzYmluX1BST0dSQU1TKSc7IHRlc3QgLW4gIiQoc2JpbmRpcikiIHx8IGxpc3Q9OyBcCisJZmlsZXM9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IFwKKwkgIHNlZCAtZSAnaDtzLF4uKi8sLDtzLyQoRVhFRVhUKSQkLy87JCh0cmFuc2Zvcm0pJyBcCisJICAgICAgLWUgJ3MvJCQvJChFWEVFWFQpLycgYDsgXAorCXRlc3QgLW4gIiQkbGlzdCIgfHwgZXhpdCAwOyBcCisJZWNobyAiICggY2QgJyQoREVTVERJUikkKHNiaW5kaXIpJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKKwljZCAiJChERVNURElSKSQoc2JpbmRpcikiICYmIHJtIC1mICQkZmlsZXMKKworY2xlYW4tc2JpblBST0dSQU1TOgorCUBsaXN0PSckKHNiaW5fUFJPR1JBTVMpJzsgdGVzdCAtbiAiJCRsaXN0IiB8fCBleGl0IDA7IFwKKwllY2hvICIgcm0gLWYiICQkbGlzdDsgXAorCXJtIC1mICQkbGlzdCB8fCBleGl0ICQkPzsgXAorCXRlc3QgLW4gIiQoRVhFRVhUKSIgfHwgZXhpdCAwOyBcCisJbGlzdD1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkICdzLyQoRVhFRVhUKSQkLy8nYDsgXAorCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCisJcm0gLWYgJCRsaXN0CithdmFoaS1kYWVtb24kKEVYRUVYVCk6ICQoYXZhaGlfZGFlbW9uX09CSkVDVFMpICQoYXZhaGlfZGFlbW9uX0RFUEVOREVOQ0lFUykgJChFWFRSQV9hdmFoaV9kYWVtb25fREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgYXZhaGktZGFlbW9uJChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChhdmFoaV9kYWVtb25fTElOSykgJChhdmFoaV9kYWVtb25fT0JKRUNUUykgJChhdmFoaV9kYWVtb25fTERBREQpICQoTElCUykKK2luaS1maWxlLXBhcnNlci10ZXN0JChFWEVFWFQpOiAkKGluaV9maWxlX3BhcnNlcl90ZXN0X09CSkVDVFMpICQoaW5pX2ZpbGVfcGFyc2VyX3Rlc3RfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2luaV9maWxlX3BhcnNlcl90ZXN0X0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGluaS1maWxlLXBhcnNlci10ZXN0JChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChpbmlfZmlsZV9wYXJzZXJfdGVzdF9MSU5LKSAkKGluaV9maWxlX3BhcnNlcl90ZXN0X09CSkVDVFMpICQoaW5pX2ZpbGVfcGFyc2VyX3Rlc3RfTERBREQpICQoTElCUykKKworbW9zdGx5Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi4kKE9CSkVYVCkKKworZGlzdGNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICoudGFiLmMKKworQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2F2YWhpX2RhZW1vbi1jYXBzLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9hdmFoaV9kYWVtb24tY2hlY2stbnNzLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9hdmFoaV9kYWVtb24tY2hyb290LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9hdmFoaV9kYWVtb24tZGJ1cy1hc3luYy1hZGRyZXNzLXJlc29sdmVyLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9hdmFoaV9kYWVtb24tZGJ1cy1hc3luYy1ob3N0LW5hbWUtcmVzb2x2ZXIuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2F2YWhpX2RhZW1vbi1kYnVzLWFzeW5jLXNlcnZpY2UtcmVzb2x2ZXIuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2F2YWhpX2RhZW1vbi1kYnVzLWRvbWFpbi1icm93c2VyLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9hdmFoaV9kYWVtb24tZGJ1cy1lbnRyeS1ncm91cC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYXZhaGlfZGFlbW9uLWRidXMtcHJvdG9jb2wuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2F2YWhpX2RhZW1vbi1kYnVzLXJlY29yZC1icm93c2VyLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9hdmFoaV9kYWVtb24tZGJ1cy1zZXJ2aWNlLWJyb3dzZXIuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2F2YWhpX2RhZW1vbi1kYnVzLXNlcnZpY2UtdHlwZS1icm93c2VyLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9hdmFoaV9kYWVtb24tZGJ1cy1zeW5jLWFkZHJlc3MtcmVzb2x2ZXIuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2F2YWhpX2RhZW1vbi1kYnVzLXN5bmMtaG9zdC1uYW1lLXJlc29sdmVyLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9hdmFoaV9kYWVtb24tZGJ1cy1zeW5jLXNlcnZpY2UtcmVzb2x2ZXIuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2F2YWhpX2RhZW1vbi1kYnVzLXV0aWwuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2F2YWhpX2RhZW1vbi1kYnVzLXdhdGNoLWdsdWUuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2F2YWhpX2RhZW1vbi1kYnVzLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9hdmFoaV9kYWVtb24taW5pLWZpbGUtcGFyc2VyLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9hdmFoaV9kYWVtb24tbWFpbi5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYXZhaGlfZGFlbW9uLXNkLWRhZW1vbi5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYXZhaGlfZGFlbW9uLXNldHByb2N0aXRsZS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYXZhaGlfZGFlbW9uLXNpbXBsZS1wcm90b2NvbC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYXZhaGlfZGFlbW9uLXN0YXRpYy1ob3N0cy5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYXZhaGlfZGFlbW9uLXN0YXRpYy1zZXJ2aWNlcy5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvaW5pX2ZpbGVfcGFyc2VyX3Rlc3QtaW5pLWZpbGUtcGFyc2VyLXRlc3QuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2luaV9maWxlX3BhcnNlcl90ZXN0LWluaS1maWxlLXBhcnNlci5Qb0BhbV9fcXVvdGVACisKKy5jLm86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jICQ8CisKKy5jLm9iajoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyBgJChDWUdQQVRIX1cpICckPCdgCisKKy5jLmxvOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAorCithdmFoaV9kYWVtb24tbWFpbi5vOiBtYWluLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9kYWVtb25fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGF2YWhpX2RhZW1vbi1tYWluLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2F2YWhpX2RhZW1vbi1tYWluLlRwbyAtYyAtbyBhdmFoaV9kYWVtb24tbWFpbi5vIGB0ZXN0IC1mICdtYWluLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYG1haW4uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYXZhaGlfZGFlbW9uLW1haW4uVHBvICQoREVQRElSKS9hdmFoaV9kYWVtb24tbWFpbi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J21haW4uYycgb2JqZWN0PSdhdmFoaV9kYWVtb24tbWFpbi5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9kYWVtb25fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYXZhaGlfZGFlbW9uLW1haW4ubyBgdGVzdCAtZiAnbWFpbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BtYWluLmMKKworYXZhaGlfZGFlbW9uLW1haW4ub2JqOiBtYWluLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9kYWVtb25fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGF2YWhpX2RhZW1vbi1tYWluLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvYXZhaGlfZGFlbW9uLW1haW4uVHBvIC1jIC1vIGF2YWhpX2RhZW1vbi1tYWluLm9iaiBgaWYgdGVzdCAtZiAnbWFpbi5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ21haW4uYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvbWFpbi5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9hdmFoaV9kYWVtb24tbWFpbi5UcG8gJChERVBESVIpL2F2YWhpX2RhZW1vbi1tYWluLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nbWFpbi5jJyBvYmplY3Q9J2F2YWhpX2RhZW1vbi1tYWluLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfZGFlbW9uX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGF2YWhpX2RhZW1vbi1tYWluLm9iaiBgaWYgdGVzdCAtZiAnbWFpbi5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ21haW4uYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvbWFpbi5jJzsgZmlgCisKK2F2YWhpX2RhZW1vbi1zaW1wbGUtcHJvdG9jb2wubzogc2ltcGxlLXByb3RvY29sLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9kYWVtb25fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGF2YWhpX2RhZW1vbi1zaW1wbGUtcHJvdG9jb2wubyAtTUQgLU1QIC1NRiAkKERFUERJUikvYXZhaGlfZGFlbW9uLXNpbXBsZS1wcm90b2NvbC5UcG8gLWMgLW8gYXZhaGlfZGFlbW9uLXNpbXBsZS1wcm90b2NvbC5vIGB0ZXN0IC1mICdzaW1wbGUtcHJvdG9jb2wuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc2ltcGxlLXByb3RvY29sLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2F2YWhpX2RhZW1vbi1zaW1wbGUtcHJvdG9jb2wuVHBvICQoREVQRElSKS9hdmFoaV9kYWVtb24tc2ltcGxlLXByb3RvY29sLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nc2ltcGxlLXByb3RvY29sLmMnIG9iamVjdD0nYXZhaGlfZGFlbW9uLXNpbXBsZS1wcm90b2NvbC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9kYWVtb25fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYXZhaGlfZGFlbW9uLXNpbXBsZS1wcm90b2NvbC5vIGB0ZXN0IC1mICdzaW1wbGUtcHJvdG9jb2wuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc2ltcGxlLXByb3RvY29sLmMKKworYXZhaGlfZGFlbW9uLXNpbXBsZS1wcm90b2NvbC5vYmo6IHNpbXBsZS1wcm90b2NvbC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfZGFlbW9uX0NGTEFHUykgJChDRkxBR1MpIC1NVCBhdmFoaV9kYWVtb24tc2ltcGxlLXByb3RvY29sLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvYXZhaGlfZGFlbW9uLXNpbXBsZS1wcm90b2NvbC5UcG8gLWMgLW8gYXZhaGlfZGFlbW9uLXNpbXBsZS1wcm90b2NvbC5vYmogYGlmIHRlc3QgLWYgJ3NpbXBsZS1wcm90b2NvbC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3NpbXBsZS1wcm90b2NvbC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9zaW1wbGUtcHJvdG9jb2wuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYXZhaGlfZGFlbW9uLXNpbXBsZS1wcm90b2NvbC5UcG8gJChERVBESVIpL2F2YWhpX2RhZW1vbi1zaW1wbGUtcHJvdG9jb2wuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdzaW1wbGUtcHJvdG9jb2wuYycgb2JqZWN0PSdhdmFoaV9kYWVtb24tc2ltcGxlLXByb3RvY29sLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfZGFlbW9uX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGF2YWhpX2RhZW1vbi1zaW1wbGUtcHJvdG9jb2wub2JqIGBpZiB0ZXN0IC1mICdzaW1wbGUtcHJvdG9jb2wuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdzaW1wbGUtcHJvdG9jb2wuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2Rpcikvc2ltcGxlLXByb3RvY29sLmMnOyBmaWAKKworYXZhaGlfZGFlbW9uLXN0YXRpYy1zZXJ2aWNlcy5vOiBzdGF0aWMtc2VydmljZXMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX2RhZW1vbl9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYXZhaGlfZGFlbW9uLXN0YXRpYy1zZXJ2aWNlcy5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9hdmFoaV9kYWVtb24tc3RhdGljLXNlcnZpY2VzLlRwbyAtYyAtbyBhdmFoaV9kYWVtb24tc3RhdGljLXNlcnZpY2VzLm8gYHRlc3QgLWYgJ3N0YXRpYy1zZXJ2aWNlcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzdGF0aWMtc2VydmljZXMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYXZhaGlfZGFlbW9uLXN0YXRpYy1zZXJ2aWNlcy5UcG8gJChERVBESVIpL2F2YWhpX2RhZW1vbi1zdGF0aWMtc2VydmljZXMuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdzdGF0aWMtc2VydmljZXMuYycgb2JqZWN0PSdhdmFoaV9kYWVtb24tc3RhdGljLXNlcnZpY2VzLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX2RhZW1vbl9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhdmFoaV9kYWVtb24tc3RhdGljLXNlcnZpY2VzLm8gYHRlc3QgLWYgJ3N0YXRpYy1zZXJ2aWNlcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzdGF0aWMtc2VydmljZXMuYworCithdmFoaV9kYWVtb24tc3RhdGljLXNlcnZpY2VzLm9iajogc3RhdGljLXNlcnZpY2VzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9kYWVtb25fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGF2YWhpX2RhZW1vbi1zdGF0aWMtc2VydmljZXMub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9hdmFoaV9kYWVtb24tc3RhdGljLXNlcnZpY2VzLlRwbyAtYyAtbyBhdmFoaV9kYWVtb24tc3RhdGljLXNlcnZpY2VzLm9iaiBgaWYgdGVzdCAtZiAnc3RhdGljLXNlcnZpY2VzLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnc3RhdGljLXNlcnZpY2VzLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3N0YXRpYy1zZXJ2aWNlcy5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9hdmFoaV9kYWVtb24tc3RhdGljLXNlcnZpY2VzLlRwbyAkKERFUERJUikvYXZhaGlfZGFlbW9uLXN0YXRpYy1zZXJ2aWNlcy5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3N0YXRpYy1zZXJ2aWNlcy5jJyBvYmplY3Q9J2F2YWhpX2RhZW1vbi1zdGF0aWMtc2VydmljZXMub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9kYWVtb25fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYXZhaGlfZGFlbW9uLXN0YXRpYy1zZXJ2aWNlcy5vYmogYGlmIHRlc3QgLWYgJ3N0YXRpYy1zZXJ2aWNlcy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3N0YXRpYy1zZXJ2aWNlcy5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9zdGF0aWMtc2VydmljZXMuYyc7IGZpYAorCithdmFoaV9kYWVtb24tc3RhdGljLWhvc3RzLm86IHN0YXRpYy1ob3N0cy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfZGFlbW9uX0NGTEFHUykgJChDRkxBR1MpIC1NVCBhdmFoaV9kYWVtb24tc3RhdGljLWhvc3RzLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2F2YWhpX2RhZW1vbi1zdGF0aWMtaG9zdHMuVHBvIC1jIC1vIGF2YWhpX2RhZW1vbi1zdGF0aWMtaG9zdHMubyBgdGVzdCAtZiAnc3RhdGljLWhvc3RzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHN0YXRpYy1ob3N0cy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9hdmFoaV9kYWVtb24tc3RhdGljLWhvc3RzLlRwbyAkKERFUERJUikvYXZhaGlfZGFlbW9uLXN0YXRpYy1ob3N0cy5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3N0YXRpYy1ob3N0cy5jJyBvYmplY3Q9J2F2YWhpX2RhZW1vbi1zdGF0aWMtaG9zdHMubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfZGFlbW9uX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGF2YWhpX2RhZW1vbi1zdGF0aWMtaG9zdHMubyBgdGVzdCAtZiAnc3RhdGljLWhvc3RzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHN0YXRpYy1ob3N0cy5jCisKK2F2YWhpX2RhZW1vbi1zdGF0aWMtaG9zdHMub2JqOiBzdGF0aWMtaG9zdHMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX2RhZW1vbl9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYXZhaGlfZGFlbW9uLXN0YXRpYy1ob3N0cy5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2F2YWhpX2RhZW1vbi1zdGF0aWMtaG9zdHMuVHBvIC1jIC1vIGF2YWhpX2RhZW1vbi1zdGF0aWMtaG9zdHMub2JqIGBpZiB0ZXN0IC1mICdzdGF0aWMtaG9zdHMuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdzdGF0aWMtaG9zdHMuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2Rpcikvc3RhdGljLWhvc3RzLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2F2YWhpX2RhZW1vbi1zdGF0aWMtaG9zdHMuVHBvICQoREVQRElSKS9hdmFoaV9kYWVtb24tc3RhdGljLWhvc3RzLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nc3RhdGljLWhvc3RzLmMnIG9iamVjdD0nYXZhaGlfZGFlbW9uLXN0YXRpYy1ob3N0cy5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX2RhZW1vbl9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhdmFoaV9kYWVtb24tc3RhdGljLWhvc3RzLm9iaiBgaWYgdGVzdCAtZiAnc3RhdGljLWhvc3RzLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnc3RhdGljLWhvc3RzLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3N0YXRpYy1ob3N0cy5jJzsgZmlgCisKK2F2YWhpX2RhZW1vbi1pbmktZmlsZS1wYXJzZXIubzogaW5pLWZpbGUtcGFyc2VyLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9kYWVtb25fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGF2YWhpX2RhZW1vbi1pbmktZmlsZS1wYXJzZXIubyAtTUQgLU1QIC1NRiAkKERFUERJUikvYXZhaGlfZGFlbW9uLWluaS1maWxlLXBhcnNlci5UcG8gLWMgLW8gYXZhaGlfZGFlbW9uLWluaS1maWxlLXBhcnNlci5vIGB0ZXN0IC1mICdpbmktZmlsZS1wYXJzZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgaW5pLWZpbGUtcGFyc2VyLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2F2YWhpX2RhZW1vbi1pbmktZmlsZS1wYXJzZXIuVHBvICQoREVQRElSKS9hdmFoaV9kYWVtb24taW5pLWZpbGUtcGFyc2VyLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0naW5pLWZpbGUtcGFyc2VyLmMnIG9iamVjdD0nYXZhaGlfZGFlbW9uLWluaS1maWxlLXBhcnNlci5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9kYWVtb25fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYXZhaGlfZGFlbW9uLWluaS1maWxlLXBhcnNlci5vIGB0ZXN0IC1mICdpbmktZmlsZS1wYXJzZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgaW5pLWZpbGUtcGFyc2VyLmMKKworYXZhaGlfZGFlbW9uLWluaS1maWxlLXBhcnNlci5vYmo6IGluaS1maWxlLXBhcnNlci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfZGFlbW9uX0NGTEFHUykgJChDRkxBR1MpIC1NVCBhdmFoaV9kYWVtb24taW5pLWZpbGUtcGFyc2VyLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvYXZhaGlfZGFlbW9uLWluaS1maWxlLXBhcnNlci5UcG8gLWMgLW8gYXZhaGlfZGFlbW9uLWluaS1maWxlLXBhcnNlci5vYmogYGlmIHRlc3QgLWYgJ2luaS1maWxlLXBhcnNlci5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2luaS1maWxlLXBhcnNlci5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9pbmktZmlsZS1wYXJzZXIuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYXZhaGlfZGFlbW9uLWluaS1maWxlLXBhcnNlci5UcG8gJChERVBESVIpL2F2YWhpX2RhZW1vbi1pbmktZmlsZS1wYXJzZXIuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdpbmktZmlsZS1wYXJzZXIuYycgb2JqZWN0PSdhdmFoaV9kYWVtb24taW5pLWZpbGUtcGFyc2VyLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfZGFlbW9uX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGF2YWhpX2RhZW1vbi1pbmktZmlsZS1wYXJzZXIub2JqIGBpZiB0ZXN0IC1mICdpbmktZmlsZS1wYXJzZXIuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdpbmktZmlsZS1wYXJzZXIuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvaW5pLWZpbGUtcGFyc2VyLmMnOyBmaWAKKworYXZhaGlfZGFlbW9uLXNldHByb2N0aXRsZS5vOiBzZXRwcm9jdGl0bGUuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX2RhZW1vbl9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYXZhaGlfZGFlbW9uLXNldHByb2N0aXRsZS5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9hdmFoaV9kYWVtb24tc2V0cHJvY3RpdGxlLlRwbyAtYyAtbyBhdmFoaV9kYWVtb24tc2V0cHJvY3RpdGxlLm8gYHRlc3QgLWYgJ3NldHByb2N0aXRsZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzZXRwcm9jdGl0bGUuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYXZhaGlfZGFlbW9uLXNldHByb2N0aXRsZS5UcG8gJChERVBESVIpL2F2YWhpX2RhZW1vbi1zZXRwcm9jdGl0bGUuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdzZXRwcm9jdGl0bGUuYycgb2JqZWN0PSdhdmFoaV9kYWVtb24tc2V0cHJvY3RpdGxlLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX2RhZW1vbl9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhdmFoaV9kYWVtb24tc2V0cHJvY3RpdGxlLm8gYHRlc3QgLWYgJ3NldHByb2N0aXRsZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzZXRwcm9jdGl0bGUuYworCithdmFoaV9kYWVtb24tc2V0cHJvY3RpdGxlLm9iajogc2V0cHJvY3RpdGxlLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9kYWVtb25fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGF2YWhpX2RhZW1vbi1zZXRwcm9jdGl0bGUub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9hdmFoaV9kYWVtb24tc2V0cHJvY3RpdGxlLlRwbyAtYyAtbyBhdmFoaV9kYWVtb24tc2V0cHJvY3RpdGxlLm9iaiBgaWYgdGVzdCAtZiAnc2V0cHJvY3RpdGxlLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnc2V0cHJvY3RpdGxlLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3NldHByb2N0aXRsZS5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9hdmFoaV9kYWVtb24tc2V0cHJvY3RpdGxlLlRwbyAkKERFUERJUikvYXZhaGlfZGFlbW9uLXNldHByb2N0aXRsZS5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3NldHByb2N0aXRsZS5jJyBvYmplY3Q9J2F2YWhpX2RhZW1vbi1zZXRwcm9jdGl0bGUub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9kYWVtb25fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYXZhaGlfZGFlbW9uLXNldHByb2N0aXRsZS5vYmogYGlmIHRlc3QgLWYgJ3NldHByb2N0aXRsZS5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3NldHByb2N0aXRsZS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9zZXRwcm9jdGl0bGUuYyc7IGZpYAorCithdmFoaV9kYWVtb24tc2QtZGFlbW9uLm86IHNkLWRhZW1vbi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfZGFlbW9uX0NGTEFHUykgJChDRkxBR1MpIC1NVCBhdmFoaV9kYWVtb24tc2QtZGFlbW9uLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2F2YWhpX2RhZW1vbi1zZC1kYWVtb24uVHBvIC1jIC1vIGF2YWhpX2RhZW1vbi1zZC1kYWVtb24ubyBgdGVzdCAtZiAnc2QtZGFlbW9uLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNkLWRhZW1vbi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9hdmFoaV9kYWVtb24tc2QtZGFlbW9uLlRwbyAkKERFUERJUikvYXZhaGlfZGFlbW9uLXNkLWRhZW1vbi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3NkLWRhZW1vbi5jJyBvYmplY3Q9J2F2YWhpX2RhZW1vbi1zZC1kYWVtb24ubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfZGFlbW9uX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGF2YWhpX2RhZW1vbi1zZC1kYWVtb24ubyBgdGVzdCAtZiAnc2QtZGFlbW9uLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNkLWRhZW1vbi5jCisKK2F2YWhpX2RhZW1vbi1zZC1kYWVtb24ub2JqOiBzZC1kYWVtb24uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX2RhZW1vbl9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYXZhaGlfZGFlbW9uLXNkLWRhZW1vbi5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2F2YWhpX2RhZW1vbi1zZC1kYWVtb24uVHBvIC1jIC1vIGF2YWhpX2RhZW1vbi1zZC1kYWVtb24ub2JqIGBpZiB0ZXN0IC1mICdzZC1kYWVtb24uYyc7IHRoZW4gJChDWUdQQVRIX1cpICdzZC1kYWVtb24uYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2Rpcikvc2QtZGFlbW9uLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2F2YWhpX2RhZW1vbi1zZC1kYWVtb24uVHBvICQoREVQRElSKS9hdmFoaV9kYWVtb24tc2QtZGFlbW9uLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nc2QtZGFlbW9uLmMnIG9iamVjdD0nYXZhaGlfZGFlbW9uLXNkLWRhZW1vbi5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX2RhZW1vbl9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhdmFoaV9kYWVtb24tc2QtZGFlbW9uLm9iaiBgaWYgdGVzdCAtZiAnc2QtZGFlbW9uLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnc2QtZGFlbW9uLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3NkLWRhZW1vbi5jJzsgZmlgCisKK2F2YWhpX2RhZW1vbi1jaGVjay1uc3MubzogLi4vYXZhaGktY2xpZW50L2NoZWNrLW5zcy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfZGFlbW9uX0NGTEFHUykgJChDRkxBR1MpIC1NVCBhdmFoaV9kYWVtb24tY2hlY2stbnNzLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2F2YWhpX2RhZW1vbi1jaGVjay1uc3MuVHBvIC1jIC1vIGF2YWhpX2RhZW1vbi1jaGVjay1uc3MubyBgdGVzdCAtZiAnLi4vYXZhaGktY2xpZW50L2NoZWNrLW5zcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2AuLi9hdmFoaS1jbGllbnQvY2hlY2stbnNzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2F2YWhpX2RhZW1vbi1jaGVjay1uc3MuVHBvICQoREVQRElSKS9hdmFoaV9kYWVtb24tY2hlY2stbnNzLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nLi4vYXZhaGktY2xpZW50L2NoZWNrLW5zcy5jJyBvYmplY3Q9J2F2YWhpX2RhZW1vbi1jaGVjay1uc3MubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfZGFlbW9uX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGF2YWhpX2RhZW1vbi1jaGVjay1uc3MubyBgdGVzdCAtZiAnLi4vYXZhaGktY2xpZW50L2NoZWNrLW5zcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2AuLi9hdmFoaS1jbGllbnQvY2hlY2stbnNzLmMKKworYXZhaGlfZGFlbW9uLWNoZWNrLW5zcy5vYmo6IC4uL2F2YWhpLWNsaWVudC9jaGVjay1uc3MuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX2RhZW1vbl9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYXZhaGlfZGFlbW9uLWNoZWNrLW5zcy5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2F2YWhpX2RhZW1vbi1jaGVjay1uc3MuVHBvIC1jIC1vIGF2YWhpX2RhZW1vbi1jaGVjay1uc3Mub2JqIGBpZiB0ZXN0IC1mICcuLi9hdmFoaS1jbGllbnQvY2hlY2stbnNzLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnLi4vYXZhaGktY2xpZW50L2NoZWNrLW5zcy5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS8uLi9hdmFoaS1jbGllbnQvY2hlY2stbnNzLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2F2YWhpX2RhZW1vbi1jaGVjay1uc3MuVHBvICQoREVQRElSKS9hdmFoaV9kYWVtb24tY2hlY2stbnNzLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nLi4vYXZhaGktY2xpZW50L2NoZWNrLW5zcy5jJyBvYmplY3Q9J2F2YWhpX2RhZW1vbi1jaGVjay1uc3Mub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9kYWVtb25fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYXZhaGlfZGFlbW9uLWNoZWNrLW5zcy5vYmogYGlmIHRlc3QgLWYgJy4uL2F2YWhpLWNsaWVudC9jaGVjay1uc3MuYyc7IHRoZW4gJChDWUdQQVRIX1cpICcuLi9hdmFoaS1jbGllbnQvY2hlY2stbnNzLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLy4uL2F2YWhpLWNsaWVudC9jaGVjay1uc3MuYyc7IGZpYAorCithdmFoaV9kYWVtb24tY2hyb290Lm86IGNocm9vdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfZGFlbW9uX0NGTEFHUykgJChDRkxBR1MpIC1NVCBhdmFoaV9kYWVtb24tY2hyb290Lm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2F2YWhpX2RhZW1vbi1jaHJvb3QuVHBvIC1jIC1vIGF2YWhpX2RhZW1vbi1jaHJvb3QubyBgdGVzdCAtZiAnY2hyb290LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGNocm9vdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9hdmFoaV9kYWVtb24tY2hyb290LlRwbyAkKERFUERJUikvYXZhaGlfZGFlbW9uLWNocm9vdC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2Nocm9vdC5jJyBvYmplY3Q9J2F2YWhpX2RhZW1vbi1jaHJvb3QubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfZGFlbW9uX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGF2YWhpX2RhZW1vbi1jaHJvb3QubyBgdGVzdCAtZiAnY2hyb290LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGNocm9vdC5jCisKK2F2YWhpX2RhZW1vbi1jaHJvb3Qub2JqOiBjaHJvb3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX2RhZW1vbl9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYXZhaGlfZGFlbW9uLWNocm9vdC5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2F2YWhpX2RhZW1vbi1jaHJvb3QuVHBvIC1jIC1vIGF2YWhpX2RhZW1vbi1jaHJvb3Qub2JqIGBpZiB0ZXN0IC1mICdjaHJvb3QuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdjaHJvb3QuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvY2hyb290LmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2F2YWhpX2RhZW1vbi1jaHJvb3QuVHBvICQoREVQRElSKS9hdmFoaV9kYWVtb24tY2hyb290LlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nY2hyb290LmMnIG9iamVjdD0nYXZhaGlfZGFlbW9uLWNocm9vdC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX2RhZW1vbl9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhdmFoaV9kYWVtb24tY2hyb290Lm9iaiBgaWYgdGVzdCAtZiAnY2hyb290LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnY2hyb290LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2Nocm9vdC5jJzsgZmlgCisKK2F2YWhpX2RhZW1vbi1jYXBzLm86IGNhcHMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX2RhZW1vbl9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYXZhaGlfZGFlbW9uLWNhcHMubyAtTUQgLU1QIC1NRiAkKERFUERJUikvYXZhaGlfZGFlbW9uLWNhcHMuVHBvIC1jIC1vIGF2YWhpX2RhZW1vbi1jYXBzLm8gYHRlc3QgLWYgJ2NhcHMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgY2Fwcy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9hdmFoaV9kYWVtb24tY2Fwcy5UcG8gJChERVBESVIpL2F2YWhpX2RhZW1vbi1jYXBzLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nY2Fwcy5jJyBvYmplY3Q9J2F2YWhpX2RhZW1vbi1jYXBzLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX2RhZW1vbl9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhdmFoaV9kYWVtb24tY2Fwcy5vIGB0ZXN0IC1mICdjYXBzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGNhcHMuYworCithdmFoaV9kYWVtb24tY2Fwcy5vYmo6IGNhcHMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX2RhZW1vbl9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYXZhaGlfZGFlbW9uLWNhcHMub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9hdmFoaV9kYWVtb24tY2Fwcy5UcG8gLWMgLW8gYXZhaGlfZGFlbW9uLWNhcHMub2JqIGBpZiB0ZXN0IC1mICdjYXBzLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnY2Fwcy5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9jYXBzLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2F2YWhpX2RhZW1vbi1jYXBzLlRwbyAkKERFUERJUikvYXZhaGlfZGFlbW9uLWNhcHMuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdjYXBzLmMnIG9iamVjdD0nYXZhaGlfZGFlbW9uLWNhcHMub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9kYWVtb25fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYXZhaGlfZGFlbW9uLWNhcHMub2JqIGBpZiB0ZXN0IC1mICdjYXBzLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnY2Fwcy5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9jYXBzLmMnOyBmaWAKKworYXZhaGlfZGFlbW9uLWRidXMtcHJvdG9jb2wubzogZGJ1cy1wcm90b2NvbC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfZGFlbW9uX0NGTEFHUykgJChDRkxBR1MpIC1NVCBhdmFoaV9kYWVtb24tZGJ1cy1wcm90b2NvbC5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9hdmFoaV9kYWVtb24tZGJ1cy1wcm90b2NvbC5UcG8gLWMgLW8gYXZhaGlfZGFlbW9uLWRidXMtcHJvdG9jb2wubyBgdGVzdCAtZiAnZGJ1cy1wcm90b2NvbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BkYnVzLXByb3RvY29sLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2F2YWhpX2RhZW1vbi1kYnVzLXByb3RvY29sLlRwbyAkKERFUERJUikvYXZhaGlfZGFlbW9uLWRidXMtcHJvdG9jb2wuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdkYnVzLXByb3RvY29sLmMnIG9iamVjdD0nYXZhaGlfZGFlbW9uLWRidXMtcHJvdG9jb2wubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfZGFlbW9uX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGF2YWhpX2RhZW1vbi1kYnVzLXByb3RvY29sLm8gYHRlc3QgLWYgJ2RidXMtcHJvdG9jb2wuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZGJ1cy1wcm90b2NvbC5jCisKK2F2YWhpX2RhZW1vbi1kYnVzLXByb3RvY29sLm9iajogZGJ1cy1wcm90b2NvbC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfZGFlbW9uX0NGTEFHUykgJChDRkxBR1MpIC1NVCBhdmFoaV9kYWVtb24tZGJ1cy1wcm90b2NvbC5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2F2YWhpX2RhZW1vbi1kYnVzLXByb3RvY29sLlRwbyAtYyAtbyBhdmFoaV9kYWVtb24tZGJ1cy1wcm90b2NvbC5vYmogYGlmIHRlc3QgLWYgJ2RidXMtcHJvdG9jb2wuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdkYnVzLXByb3RvY29sLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2RidXMtcHJvdG9jb2wuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYXZhaGlfZGFlbW9uLWRidXMtcHJvdG9jb2wuVHBvICQoREVQRElSKS9hdmFoaV9kYWVtb24tZGJ1cy1wcm90b2NvbC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2RidXMtcHJvdG9jb2wuYycgb2JqZWN0PSdhdmFoaV9kYWVtb24tZGJ1cy1wcm90b2NvbC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX2RhZW1vbl9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhdmFoaV9kYWVtb24tZGJ1cy1wcm90b2NvbC5vYmogYGlmIHRlc3QgLWYgJ2RidXMtcHJvdG9jb2wuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdkYnVzLXByb3RvY29sLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2RidXMtcHJvdG9jb2wuYyc7IGZpYAorCithdmFoaV9kYWVtb24tZGJ1cy11dGlsLm86IGRidXMtdXRpbC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfZGFlbW9uX0NGTEFHUykgJChDRkxBR1MpIC1NVCBhdmFoaV9kYWVtb24tZGJ1cy11dGlsLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2F2YWhpX2RhZW1vbi1kYnVzLXV0aWwuVHBvIC1jIC1vIGF2YWhpX2RhZW1vbi1kYnVzLXV0aWwubyBgdGVzdCAtZiAnZGJ1cy11dGlsLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGRidXMtdXRpbC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9hdmFoaV9kYWVtb24tZGJ1cy11dGlsLlRwbyAkKERFUERJUikvYXZhaGlfZGFlbW9uLWRidXMtdXRpbC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2RidXMtdXRpbC5jJyBvYmplY3Q9J2F2YWhpX2RhZW1vbi1kYnVzLXV0aWwubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfZGFlbW9uX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGF2YWhpX2RhZW1vbi1kYnVzLXV0aWwubyBgdGVzdCAtZiAnZGJ1cy11dGlsLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGRidXMtdXRpbC5jCisKK2F2YWhpX2RhZW1vbi1kYnVzLXV0aWwub2JqOiBkYnVzLXV0aWwuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX2RhZW1vbl9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYXZhaGlfZGFlbW9uLWRidXMtdXRpbC5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2F2YWhpX2RhZW1vbi1kYnVzLXV0aWwuVHBvIC1jIC1vIGF2YWhpX2RhZW1vbi1kYnVzLXV0aWwub2JqIGBpZiB0ZXN0IC1mICdkYnVzLXV0aWwuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdkYnVzLXV0aWwuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZGJ1cy11dGlsLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2F2YWhpX2RhZW1vbi1kYnVzLXV0aWwuVHBvICQoREVQRElSKS9hdmFoaV9kYWVtb24tZGJ1cy11dGlsLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZGJ1cy11dGlsLmMnIG9iamVjdD0nYXZhaGlfZGFlbW9uLWRidXMtdXRpbC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX2RhZW1vbl9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhdmFoaV9kYWVtb24tZGJ1cy11dGlsLm9iaiBgaWYgdGVzdCAtZiAnZGJ1cy11dGlsLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZGJ1cy11dGlsLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2RidXMtdXRpbC5jJzsgZmlgCisKK2F2YWhpX2RhZW1vbi1kYnVzLWFzeW5jLWFkZHJlc3MtcmVzb2x2ZXIubzogZGJ1cy1hc3luYy1hZGRyZXNzLXJlc29sdmVyLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9kYWVtb25fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGF2YWhpX2RhZW1vbi1kYnVzLWFzeW5jLWFkZHJlc3MtcmVzb2x2ZXIubyAtTUQgLU1QIC1NRiAkKERFUERJUikvYXZhaGlfZGFlbW9uLWRidXMtYXN5bmMtYWRkcmVzcy1yZXNvbHZlci5UcG8gLWMgLW8gYXZhaGlfZGFlbW9uLWRidXMtYXN5bmMtYWRkcmVzcy1yZXNvbHZlci5vIGB0ZXN0IC1mICdkYnVzLWFzeW5jLWFkZHJlc3MtcmVzb2x2ZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZGJ1cy1hc3luYy1hZGRyZXNzLXJlc29sdmVyLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2F2YWhpX2RhZW1vbi1kYnVzLWFzeW5jLWFkZHJlc3MtcmVzb2x2ZXIuVHBvICQoREVQRElSKS9hdmFoaV9kYWVtb24tZGJ1cy1hc3luYy1hZGRyZXNzLXJlc29sdmVyLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZGJ1cy1hc3luYy1hZGRyZXNzLXJlc29sdmVyLmMnIG9iamVjdD0nYXZhaGlfZGFlbW9uLWRidXMtYXN5bmMtYWRkcmVzcy1yZXNvbHZlci5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9kYWVtb25fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYXZhaGlfZGFlbW9uLWRidXMtYXN5bmMtYWRkcmVzcy1yZXNvbHZlci5vIGB0ZXN0IC1mICdkYnVzLWFzeW5jLWFkZHJlc3MtcmVzb2x2ZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZGJ1cy1hc3luYy1hZGRyZXNzLXJlc29sdmVyLmMKKworYXZhaGlfZGFlbW9uLWRidXMtYXN5bmMtYWRkcmVzcy1yZXNvbHZlci5vYmo6IGRidXMtYXN5bmMtYWRkcmVzcy1yZXNvbHZlci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfZGFlbW9uX0NGTEFHUykgJChDRkxBR1MpIC1NVCBhdmFoaV9kYWVtb24tZGJ1cy1hc3luYy1hZGRyZXNzLXJlc29sdmVyLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvYXZhaGlfZGFlbW9uLWRidXMtYXN5bmMtYWRkcmVzcy1yZXNvbHZlci5UcG8gLWMgLW8gYXZhaGlfZGFlbW9uLWRidXMtYXN5bmMtYWRkcmVzcy1yZXNvbHZlci5vYmogYGlmIHRlc3QgLWYgJ2RidXMtYXN5bmMtYWRkcmVzcy1yZXNvbHZlci5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2RidXMtYXN5bmMtYWRkcmVzcy1yZXNvbHZlci5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9kYnVzLWFzeW5jLWFkZHJlc3MtcmVzb2x2ZXIuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYXZhaGlfZGFlbW9uLWRidXMtYXN5bmMtYWRkcmVzcy1yZXNvbHZlci5UcG8gJChERVBESVIpL2F2YWhpX2RhZW1vbi1kYnVzLWFzeW5jLWFkZHJlc3MtcmVzb2x2ZXIuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdkYnVzLWFzeW5jLWFkZHJlc3MtcmVzb2x2ZXIuYycgb2JqZWN0PSdhdmFoaV9kYWVtb24tZGJ1cy1hc3luYy1hZGRyZXNzLXJlc29sdmVyLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfZGFlbW9uX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGF2YWhpX2RhZW1vbi1kYnVzLWFzeW5jLWFkZHJlc3MtcmVzb2x2ZXIub2JqIGBpZiB0ZXN0IC1mICdkYnVzLWFzeW5jLWFkZHJlc3MtcmVzb2x2ZXIuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdkYnVzLWFzeW5jLWFkZHJlc3MtcmVzb2x2ZXIuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZGJ1cy1hc3luYy1hZGRyZXNzLXJlc29sdmVyLmMnOyBmaWAKKworYXZhaGlfZGFlbW9uLWRidXMtYXN5bmMtaG9zdC1uYW1lLXJlc29sdmVyLm86IGRidXMtYXN5bmMtaG9zdC1uYW1lLXJlc29sdmVyLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9kYWVtb25fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGF2YWhpX2RhZW1vbi1kYnVzLWFzeW5jLWhvc3QtbmFtZS1yZXNvbHZlci5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9hdmFoaV9kYWVtb24tZGJ1cy1hc3luYy1ob3N0LW5hbWUtcmVzb2x2ZXIuVHBvIC1jIC1vIGF2YWhpX2RhZW1vbi1kYnVzLWFzeW5jLWhvc3QtbmFtZS1yZXNvbHZlci5vIGB0ZXN0IC1mICdkYnVzLWFzeW5jLWhvc3QtbmFtZS1yZXNvbHZlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BkYnVzLWFzeW5jLWhvc3QtbmFtZS1yZXNvbHZlci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9hdmFoaV9kYWVtb24tZGJ1cy1hc3luYy1ob3N0LW5hbWUtcmVzb2x2ZXIuVHBvICQoREVQRElSKS9hdmFoaV9kYWVtb24tZGJ1cy1hc3luYy1ob3N0LW5hbWUtcmVzb2x2ZXIuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdkYnVzLWFzeW5jLWhvc3QtbmFtZS1yZXNvbHZlci5jJyBvYmplY3Q9J2F2YWhpX2RhZW1vbi1kYnVzLWFzeW5jLWhvc3QtbmFtZS1yZXNvbHZlci5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9kYWVtb25fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYXZhaGlfZGFlbW9uLWRidXMtYXN5bmMtaG9zdC1uYW1lLXJlc29sdmVyLm8gYHRlc3QgLWYgJ2RidXMtYXN5bmMtaG9zdC1uYW1lLXJlc29sdmVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGRidXMtYXN5bmMtaG9zdC1uYW1lLXJlc29sdmVyLmMKKworYXZhaGlfZGFlbW9uLWRidXMtYXN5bmMtaG9zdC1uYW1lLXJlc29sdmVyLm9iajogZGJ1cy1hc3luYy1ob3N0LW5hbWUtcmVzb2x2ZXIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX2RhZW1vbl9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYXZhaGlfZGFlbW9uLWRidXMtYXN5bmMtaG9zdC1uYW1lLXJlc29sdmVyLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvYXZhaGlfZGFlbW9uLWRidXMtYXN5bmMtaG9zdC1uYW1lLXJlc29sdmVyLlRwbyAtYyAtbyBhdmFoaV9kYWVtb24tZGJ1cy1hc3luYy1ob3N0LW5hbWUtcmVzb2x2ZXIub2JqIGBpZiB0ZXN0IC1mICdkYnVzLWFzeW5jLWhvc3QtbmFtZS1yZXNvbHZlci5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2RidXMtYXN5bmMtaG9zdC1uYW1lLXJlc29sdmVyLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2RidXMtYXN5bmMtaG9zdC1uYW1lLXJlc29sdmVyLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2F2YWhpX2RhZW1vbi1kYnVzLWFzeW5jLWhvc3QtbmFtZS1yZXNvbHZlci5UcG8gJChERVBESVIpL2F2YWhpX2RhZW1vbi1kYnVzLWFzeW5jLWhvc3QtbmFtZS1yZXNvbHZlci5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2RidXMtYXN5bmMtaG9zdC1uYW1lLXJlc29sdmVyLmMnIG9iamVjdD0nYXZhaGlfZGFlbW9uLWRidXMtYXN5bmMtaG9zdC1uYW1lLXJlc29sdmVyLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfZGFlbW9uX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGF2YWhpX2RhZW1vbi1kYnVzLWFzeW5jLWhvc3QtbmFtZS1yZXNvbHZlci5vYmogYGlmIHRlc3QgLWYgJ2RidXMtYXN5bmMtaG9zdC1uYW1lLXJlc29sdmVyLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZGJ1cy1hc3luYy1ob3N0LW5hbWUtcmVzb2x2ZXIuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZGJ1cy1hc3luYy1ob3N0LW5hbWUtcmVzb2x2ZXIuYyc7IGZpYAorCithdmFoaV9kYWVtb24tZGJ1cy1hc3luYy1zZXJ2aWNlLXJlc29sdmVyLm86IGRidXMtYXN5bmMtc2VydmljZS1yZXNvbHZlci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfZGFlbW9uX0NGTEFHUykgJChDRkxBR1MpIC1NVCBhdmFoaV9kYWVtb24tZGJ1cy1hc3luYy1zZXJ2aWNlLXJlc29sdmVyLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2F2YWhpX2RhZW1vbi1kYnVzLWFzeW5jLXNlcnZpY2UtcmVzb2x2ZXIuVHBvIC1jIC1vIGF2YWhpX2RhZW1vbi1kYnVzLWFzeW5jLXNlcnZpY2UtcmVzb2x2ZXIubyBgdGVzdCAtZiAnZGJ1cy1hc3luYy1zZXJ2aWNlLXJlc29sdmVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGRidXMtYXN5bmMtc2VydmljZS1yZXNvbHZlci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9hdmFoaV9kYWVtb24tZGJ1cy1hc3luYy1zZXJ2aWNlLXJlc29sdmVyLlRwbyAkKERFUERJUikvYXZhaGlfZGFlbW9uLWRidXMtYXN5bmMtc2VydmljZS1yZXNvbHZlci5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2RidXMtYXN5bmMtc2VydmljZS1yZXNvbHZlci5jJyBvYmplY3Q9J2F2YWhpX2RhZW1vbi1kYnVzLWFzeW5jLXNlcnZpY2UtcmVzb2x2ZXIubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfZGFlbW9uX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGF2YWhpX2RhZW1vbi1kYnVzLWFzeW5jLXNlcnZpY2UtcmVzb2x2ZXIubyBgdGVzdCAtZiAnZGJ1cy1hc3luYy1zZXJ2aWNlLXJlc29sdmVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGRidXMtYXN5bmMtc2VydmljZS1yZXNvbHZlci5jCisKK2F2YWhpX2RhZW1vbi1kYnVzLWFzeW5jLXNlcnZpY2UtcmVzb2x2ZXIub2JqOiBkYnVzLWFzeW5jLXNlcnZpY2UtcmVzb2x2ZXIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX2RhZW1vbl9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYXZhaGlfZGFlbW9uLWRidXMtYXN5bmMtc2VydmljZS1yZXNvbHZlci5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2F2YWhpX2RhZW1vbi1kYnVzLWFzeW5jLXNlcnZpY2UtcmVzb2x2ZXIuVHBvIC1jIC1vIGF2YWhpX2RhZW1vbi1kYnVzLWFzeW5jLXNlcnZpY2UtcmVzb2x2ZXIub2JqIGBpZiB0ZXN0IC1mICdkYnVzLWFzeW5jLXNlcnZpY2UtcmVzb2x2ZXIuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdkYnVzLWFzeW5jLXNlcnZpY2UtcmVzb2x2ZXIuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZGJ1cy1hc3luYy1zZXJ2aWNlLXJlc29sdmVyLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2F2YWhpX2RhZW1vbi1kYnVzLWFzeW5jLXNlcnZpY2UtcmVzb2x2ZXIuVHBvICQoREVQRElSKS9hdmFoaV9kYWVtb24tZGJ1cy1hc3luYy1zZXJ2aWNlLXJlc29sdmVyLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZGJ1cy1hc3luYy1zZXJ2aWNlLXJlc29sdmVyLmMnIG9iamVjdD0nYXZhaGlfZGFlbW9uLWRidXMtYXN5bmMtc2VydmljZS1yZXNvbHZlci5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX2RhZW1vbl9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhdmFoaV9kYWVtb24tZGJ1cy1hc3luYy1zZXJ2aWNlLXJlc29sdmVyLm9iaiBgaWYgdGVzdCAtZiAnZGJ1cy1hc3luYy1zZXJ2aWNlLXJlc29sdmVyLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZGJ1cy1hc3luYy1zZXJ2aWNlLXJlc29sdmVyLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2RidXMtYXN5bmMtc2VydmljZS1yZXNvbHZlci5jJzsgZmlgCisKK2F2YWhpX2RhZW1vbi1kYnVzLWRvbWFpbi1icm93c2VyLm86IGRidXMtZG9tYWluLWJyb3dzZXIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX2RhZW1vbl9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYXZhaGlfZGFlbW9uLWRidXMtZG9tYWluLWJyb3dzZXIubyAtTUQgLU1QIC1NRiAkKERFUERJUikvYXZhaGlfZGFlbW9uLWRidXMtZG9tYWluLWJyb3dzZXIuVHBvIC1jIC1vIGF2YWhpX2RhZW1vbi1kYnVzLWRvbWFpbi1icm93c2VyLm8gYHRlc3QgLWYgJ2RidXMtZG9tYWluLWJyb3dzZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZGJ1cy1kb21haW4tYnJvd3Nlci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9hdmFoaV9kYWVtb24tZGJ1cy1kb21haW4tYnJvd3Nlci5UcG8gJChERVBESVIpL2F2YWhpX2RhZW1vbi1kYnVzLWRvbWFpbi1icm93c2VyLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZGJ1cy1kb21haW4tYnJvd3Nlci5jJyBvYmplY3Q9J2F2YWhpX2RhZW1vbi1kYnVzLWRvbWFpbi1icm93c2VyLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX2RhZW1vbl9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhdmFoaV9kYWVtb24tZGJ1cy1kb21haW4tYnJvd3Nlci5vIGB0ZXN0IC1mICdkYnVzLWRvbWFpbi1icm93c2VyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGRidXMtZG9tYWluLWJyb3dzZXIuYworCithdmFoaV9kYWVtb24tZGJ1cy1kb21haW4tYnJvd3Nlci5vYmo6IGRidXMtZG9tYWluLWJyb3dzZXIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX2RhZW1vbl9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYXZhaGlfZGFlbW9uLWRidXMtZG9tYWluLWJyb3dzZXIub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9hdmFoaV9kYWVtb24tZGJ1cy1kb21haW4tYnJvd3Nlci5UcG8gLWMgLW8gYXZhaGlfZGFlbW9uLWRidXMtZG9tYWluLWJyb3dzZXIub2JqIGBpZiB0ZXN0IC1mICdkYnVzLWRvbWFpbi1icm93c2VyLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZGJ1cy1kb21haW4tYnJvd3Nlci5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9kYnVzLWRvbWFpbi1icm93c2VyLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2F2YWhpX2RhZW1vbi1kYnVzLWRvbWFpbi1icm93c2VyLlRwbyAkKERFUERJUikvYXZhaGlfZGFlbW9uLWRidXMtZG9tYWluLWJyb3dzZXIuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdkYnVzLWRvbWFpbi1icm93c2VyLmMnIG9iamVjdD0nYXZhaGlfZGFlbW9uLWRidXMtZG9tYWluLWJyb3dzZXIub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9kYWVtb25fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYXZhaGlfZGFlbW9uLWRidXMtZG9tYWluLWJyb3dzZXIub2JqIGBpZiB0ZXN0IC1mICdkYnVzLWRvbWFpbi1icm93c2VyLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZGJ1cy1kb21haW4tYnJvd3Nlci5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9kYnVzLWRvbWFpbi1icm93c2VyLmMnOyBmaWAKKworYXZhaGlfZGFlbW9uLWRidXMtZW50cnktZ3JvdXAubzogZGJ1cy1lbnRyeS1ncm91cC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfZGFlbW9uX0NGTEFHUykgJChDRkxBR1MpIC1NVCBhdmFoaV9kYWVtb24tZGJ1cy1lbnRyeS1ncm91cC5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9hdmFoaV9kYWVtb24tZGJ1cy1lbnRyeS1ncm91cC5UcG8gLWMgLW8gYXZhaGlfZGFlbW9uLWRidXMtZW50cnktZ3JvdXAubyBgdGVzdCAtZiAnZGJ1cy1lbnRyeS1ncm91cC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BkYnVzLWVudHJ5LWdyb3VwLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2F2YWhpX2RhZW1vbi1kYnVzLWVudHJ5LWdyb3VwLlRwbyAkKERFUERJUikvYXZhaGlfZGFlbW9uLWRidXMtZW50cnktZ3JvdXAuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdkYnVzLWVudHJ5LWdyb3VwLmMnIG9iamVjdD0nYXZhaGlfZGFlbW9uLWRidXMtZW50cnktZ3JvdXAubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfZGFlbW9uX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGF2YWhpX2RhZW1vbi1kYnVzLWVudHJ5LWdyb3VwLm8gYHRlc3QgLWYgJ2RidXMtZW50cnktZ3JvdXAuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZGJ1cy1lbnRyeS1ncm91cC5jCisKK2F2YWhpX2RhZW1vbi1kYnVzLWVudHJ5LWdyb3VwLm9iajogZGJ1cy1lbnRyeS1ncm91cC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfZGFlbW9uX0NGTEFHUykgJChDRkxBR1MpIC1NVCBhdmFoaV9kYWVtb24tZGJ1cy1lbnRyeS1ncm91cC5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2F2YWhpX2RhZW1vbi1kYnVzLWVudHJ5LWdyb3VwLlRwbyAtYyAtbyBhdmFoaV9kYWVtb24tZGJ1cy1lbnRyeS1ncm91cC5vYmogYGlmIHRlc3QgLWYgJ2RidXMtZW50cnktZ3JvdXAuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdkYnVzLWVudHJ5LWdyb3VwLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2RidXMtZW50cnktZ3JvdXAuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYXZhaGlfZGFlbW9uLWRidXMtZW50cnktZ3JvdXAuVHBvICQoREVQRElSKS9hdmFoaV9kYWVtb24tZGJ1cy1lbnRyeS1ncm91cC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2RidXMtZW50cnktZ3JvdXAuYycgb2JqZWN0PSdhdmFoaV9kYWVtb24tZGJ1cy1lbnRyeS1ncm91cC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX2RhZW1vbl9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhdmFoaV9kYWVtb24tZGJ1cy1lbnRyeS1ncm91cC5vYmogYGlmIHRlc3QgLWYgJ2RidXMtZW50cnktZ3JvdXAuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdkYnVzLWVudHJ5LWdyb3VwLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2RidXMtZW50cnktZ3JvdXAuYyc7IGZpYAorCithdmFoaV9kYWVtb24tZGJ1cy1zZXJ2aWNlLWJyb3dzZXIubzogZGJ1cy1zZXJ2aWNlLWJyb3dzZXIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX2RhZW1vbl9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYXZhaGlfZGFlbW9uLWRidXMtc2VydmljZS1icm93c2VyLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2F2YWhpX2RhZW1vbi1kYnVzLXNlcnZpY2UtYnJvd3Nlci5UcG8gLWMgLW8gYXZhaGlfZGFlbW9uLWRidXMtc2VydmljZS1icm93c2VyLm8gYHRlc3QgLWYgJ2RidXMtc2VydmljZS1icm93c2VyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGRidXMtc2VydmljZS1icm93c2VyLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2F2YWhpX2RhZW1vbi1kYnVzLXNlcnZpY2UtYnJvd3Nlci5UcG8gJChERVBESVIpL2F2YWhpX2RhZW1vbi1kYnVzLXNlcnZpY2UtYnJvd3Nlci5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2RidXMtc2VydmljZS1icm93c2VyLmMnIG9iamVjdD0nYXZhaGlfZGFlbW9uLWRidXMtc2VydmljZS1icm93c2VyLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX2RhZW1vbl9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhdmFoaV9kYWVtb24tZGJ1cy1zZXJ2aWNlLWJyb3dzZXIubyBgdGVzdCAtZiAnZGJ1cy1zZXJ2aWNlLWJyb3dzZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZGJ1cy1zZXJ2aWNlLWJyb3dzZXIuYworCithdmFoaV9kYWVtb24tZGJ1cy1zZXJ2aWNlLWJyb3dzZXIub2JqOiBkYnVzLXNlcnZpY2UtYnJvd3Nlci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfZGFlbW9uX0NGTEFHUykgJChDRkxBR1MpIC1NVCBhdmFoaV9kYWVtb24tZGJ1cy1zZXJ2aWNlLWJyb3dzZXIub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9hdmFoaV9kYWVtb24tZGJ1cy1zZXJ2aWNlLWJyb3dzZXIuVHBvIC1jIC1vIGF2YWhpX2RhZW1vbi1kYnVzLXNlcnZpY2UtYnJvd3Nlci5vYmogYGlmIHRlc3QgLWYgJ2RidXMtc2VydmljZS1icm93c2VyLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZGJ1cy1zZXJ2aWNlLWJyb3dzZXIuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZGJ1cy1zZXJ2aWNlLWJyb3dzZXIuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYXZhaGlfZGFlbW9uLWRidXMtc2VydmljZS1icm93c2VyLlRwbyAkKERFUERJUikvYXZhaGlfZGFlbW9uLWRidXMtc2VydmljZS1icm93c2VyLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZGJ1cy1zZXJ2aWNlLWJyb3dzZXIuYycgb2JqZWN0PSdhdmFoaV9kYWVtb24tZGJ1cy1zZXJ2aWNlLWJyb3dzZXIub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9kYWVtb25fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYXZhaGlfZGFlbW9uLWRidXMtc2VydmljZS1icm93c2VyLm9iaiBgaWYgdGVzdCAtZiAnZGJ1cy1zZXJ2aWNlLWJyb3dzZXIuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdkYnVzLXNlcnZpY2UtYnJvd3Nlci5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9kYnVzLXNlcnZpY2UtYnJvd3Nlci5jJzsgZmlgCisKK2F2YWhpX2RhZW1vbi1kYnVzLXNlcnZpY2UtdHlwZS1icm93c2VyLm86IGRidXMtc2VydmljZS10eXBlLWJyb3dzZXIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX2RhZW1vbl9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYXZhaGlfZGFlbW9uLWRidXMtc2VydmljZS10eXBlLWJyb3dzZXIubyAtTUQgLU1QIC1NRiAkKERFUERJUikvYXZhaGlfZGFlbW9uLWRidXMtc2VydmljZS10eXBlLWJyb3dzZXIuVHBvIC1jIC1vIGF2YWhpX2RhZW1vbi1kYnVzLXNlcnZpY2UtdHlwZS1icm93c2VyLm8gYHRlc3QgLWYgJ2RidXMtc2VydmljZS10eXBlLWJyb3dzZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZGJ1cy1zZXJ2aWNlLXR5cGUtYnJvd3Nlci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9hdmFoaV9kYWVtb24tZGJ1cy1zZXJ2aWNlLXR5cGUtYnJvd3Nlci5UcG8gJChERVBESVIpL2F2YWhpX2RhZW1vbi1kYnVzLXNlcnZpY2UtdHlwZS1icm93c2VyLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZGJ1cy1zZXJ2aWNlLXR5cGUtYnJvd3Nlci5jJyBvYmplY3Q9J2F2YWhpX2RhZW1vbi1kYnVzLXNlcnZpY2UtdHlwZS1icm93c2VyLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX2RhZW1vbl9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhdmFoaV9kYWVtb24tZGJ1cy1zZXJ2aWNlLXR5cGUtYnJvd3Nlci5vIGB0ZXN0IC1mICdkYnVzLXNlcnZpY2UtdHlwZS1icm93c2VyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGRidXMtc2VydmljZS10eXBlLWJyb3dzZXIuYworCithdmFoaV9kYWVtb24tZGJ1cy1zZXJ2aWNlLXR5cGUtYnJvd3Nlci5vYmo6IGRidXMtc2VydmljZS10eXBlLWJyb3dzZXIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX2RhZW1vbl9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYXZhaGlfZGFlbW9uLWRidXMtc2VydmljZS10eXBlLWJyb3dzZXIub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9hdmFoaV9kYWVtb24tZGJ1cy1zZXJ2aWNlLXR5cGUtYnJvd3Nlci5UcG8gLWMgLW8gYXZhaGlfZGFlbW9uLWRidXMtc2VydmljZS10eXBlLWJyb3dzZXIub2JqIGBpZiB0ZXN0IC1mICdkYnVzLXNlcnZpY2UtdHlwZS1icm93c2VyLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZGJ1cy1zZXJ2aWNlLXR5cGUtYnJvd3Nlci5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9kYnVzLXNlcnZpY2UtdHlwZS1icm93c2VyLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2F2YWhpX2RhZW1vbi1kYnVzLXNlcnZpY2UtdHlwZS1icm93c2VyLlRwbyAkKERFUERJUikvYXZhaGlfZGFlbW9uLWRidXMtc2VydmljZS10eXBlLWJyb3dzZXIuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdkYnVzLXNlcnZpY2UtdHlwZS1icm93c2VyLmMnIG9iamVjdD0nYXZhaGlfZGFlbW9uLWRidXMtc2VydmljZS10eXBlLWJyb3dzZXIub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9kYWVtb25fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYXZhaGlfZGFlbW9uLWRidXMtc2VydmljZS10eXBlLWJyb3dzZXIub2JqIGBpZiB0ZXN0IC1mICdkYnVzLXNlcnZpY2UtdHlwZS1icm93c2VyLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZGJ1cy1zZXJ2aWNlLXR5cGUtYnJvd3Nlci5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9kYnVzLXNlcnZpY2UtdHlwZS1icm93c2VyLmMnOyBmaWAKKworYXZhaGlfZGFlbW9uLWRidXMtc3luYy1hZGRyZXNzLXJlc29sdmVyLm86IGRidXMtc3luYy1hZGRyZXNzLXJlc29sdmVyLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9kYWVtb25fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGF2YWhpX2RhZW1vbi1kYnVzLXN5bmMtYWRkcmVzcy1yZXNvbHZlci5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9hdmFoaV9kYWVtb24tZGJ1cy1zeW5jLWFkZHJlc3MtcmVzb2x2ZXIuVHBvIC1jIC1vIGF2YWhpX2RhZW1vbi1kYnVzLXN5bmMtYWRkcmVzcy1yZXNvbHZlci5vIGB0ZXN0IC1mICdkYnVzLXN5bmMtYWRkcmVzcy1yZXNvbHZlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BkYnVzLXN5bmMtYWRkcmVzcy1yZXNvbHZlci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9hdmFoaV9kYWVtb24tZGJ1cy1zeW5jLWFkZHJlc3MtcmVzb2x2ZXIuVHBvICQoREVQRElSKS9hdmFoaV9kYWVtb24tZGJ1cy1zeW5jLWFkZHJlc3MtcmVzb2x2ZXIuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdkYnVzLXN5bmMtYWRkcmVzcy1yZXNvbHZlci5jJyBvYmplY3Q9J2F2YWhpX2RhZW1vbi1kYnVzLXN5bmMtYWRkcmVzcy1yZXNvbHZlci5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9kYWVtb25fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYXZhaGlfZGFlbW9uLWRidXMtc3luYy1hZGRyZXNzLXJlc29sdmVyLm8gYHRlc3QgLWYgJ2RidXMtc3luYy1hZGRyZXNzLXJlc29sdmVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGRidXMtc3luYy1hZGRyZXNzLXJlc29sdmVyLmMKKworYXZhaGlfZGFlbW9uLWRidXMtc3luYy1hZGRyZXNzLXJlc29sdmVyLm9iajogZGJ1cy1zeW5jLWFkZHJlc3MtcmVzb2x2ZXIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX2RhZW1vbl9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYXZhaGlfZGFlbW9uLWRidXMtc3luYy1hZGRyZXNzLXJlc29sdmVyLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvYXZhaGlfZGFlbW9uLWRidXMtc3luYy1hZGRyZXNzLXJlc29sdmVyLlRwbyAtYyAtbyBhdmFoaV9kYWVtb24tZGJ1cy1zeW5jLWFkZHJlc3MtcmVzb2x2ZXIub2JqIGBpZiB0ZXN0IC1mICdkYnVzLXN5bmMtYWRkcmVzcy1yZXNvbHZlci5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2RidXMtc3luYy1hZGRyZXNzLXJlc29sdmVyLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2RidXMtc3luYy1hZGRyZXNzLXJlc29sdmVyLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2F2YWhpX2RhZW1vbi1kYnVzLXN5bmMtYWRkcmVzcy1yZXNvbHZlci5UcG8gJChERVBESVIpL2F2YWhpX2RhZW1vbi1kYnVzLXN5bmMtYWRkcmVzcy1yZXNvbHZlci5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2RidXMtc3luYy1hZGRyZXNzLXJlc29sdmVyLmMnIG9iamVjdD0nYXZhaGlfZGFlbW9uLWRidXMtc3luYy1hZGRyZXNzLXJlc29sdmVyLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfZGFlbW9uX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGF2YWhpX2RhZW1vbi1kYnVzLXN5bmMtYWRkcmVzcy1yZXNvbHZlci5vYmogYGlmIHRlc3QgLWYgJ2RidXMtc3luYy1hZGRyZXNzLXJlc29sdmVyLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZGJ1cy1zeW5jLWFkZHJlc3MtcmVzb2x2ZXIuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZGJ1cy1zeW5jLWFkZHJlc3MtcmVzb2x2ZXIuYyc7IGZpYAorCithdmFoaV9kYWVtb24tZGJ1cy1zeW5jLWhvc3QtbmFtZS1yZXNvbHZlci5vOiBkYnVzLXN5bmMtaG9zdC1uYW1lLXJlc29sdmVyLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9kYWVtb25fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGF2YWhpX2RhZW1vbi1kYnVzLXN5bmMtaG9zdC1uYW1lLXJlc29sdmVyLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2F2YWhpX2RhZW1vbi1kYnVzLXN5bmMtaG9zdC1uYW1lLXJlc29sdmVyLlRwbyAtYyAtbyBhdmFoaV9kYWVtb24tZGJ1cy1zeW5jLWhvc3QtbmFtZS1yZXNvbHZlci5vIGB0ZXN0IC1mICdkYnVzLXN5bmMtaG9zdC1uYW1lLXJlc29sdmVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGRidXMtc3luYy1ob3N0LW5hbWUtcmVzb2x2ZXIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYXZhaGlfZGFlbW9uLWRidXMtc3luYy1ob3N0LW5hbWUtcmVzb2x2ZXIuVHBvICQoREVQRElSKS9hdmFoaV9kYWVtb24tZGJ1cy1zeW5jLWhvc3QtbmFtZS1yZXNvbHZlci5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2RidXMtc3luYy1ob3N0LW5hbWUtcmVzb2x2ZXIuYycgb2JqZWN0PSdhdmFoaV9kYWVtb24tZGJ1cy1zeW5jLWhvc3QtbmFtZS1yZXNvbHZlci5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9kYWVtb25fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYXZhaGlfZGFlbW9uLWRidXMtc3luYy1ob3N0LW5hbWUtcmVzb2x2ZXIubyBgdGVzdCAtZiAnZGJ1cy1zeW5jLWhvc3QtbmFtZS1yZXNvbHZlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BkYnVzLXN5bmMtaG9zdC1uYW1lLXJlc29sdmVyLmMKKworYXZhaGlfZGFlbW9uLWRidXMtc3luYy1ob3N0LW5hbWUtcmVzb2x2ZXIub2JqOiBkYnVzLXN5bmMtaG9zdC1uYW1lLXJlc29sdmVyLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9kYWVtb25fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGF2YWhpX2RhZW1vbi1kYnVzLXN5bmMtaG9zdC1uYW1lLXJlc29sdmVyLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvYXZhaGlfZGFlbW9uLWRidXMtc3luYy1ob3N0LW5hbWUtcmVzb2x2ZXIuVHBvIC1jIC1vIGF2YWhpX2RhZW1vbi1kYnVzLXN5bmMtaG9zdC1uYW1lLXJlc29sdmVyLm9iaiBgaWYgdGVzdCAtZiAnZGJ1cy1zeW5jLWhvc3QtbmFtZS1yZXNvbHZlci5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2RidXMtc3luYy1ob3N0LW5hbWUtcmVzb2x2ZXIuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZGJ1cy1zeW5jLWhvc3QtbmFtZS1yZXNvbHZlci5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9hdmFoaV9kYWVtb24tZGJ1cy1zeW5jLWhvc3QtbmFtZS1yZXNvbHZlci5UcG8gJChERVBESVIpL2F2YWhpX2RhZW1vbi1kYnVzLXN5bmMtaG9zdC1uYW1lLXJlc29sdmVyLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZGJ1cy1zeW5jLWhvc3QtbmFtZS1yZXNvbHZlci5jJyBvYmplY3Q9J2F2YWhpX2RhZW1vbi1kYnVzLXN5bmMtaG9zdC1uYW1lLXJlc29sdmVyLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfZGFlbW9uX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGF2YWhpX2RhZW1vbi1kYnVzLXN5bmMtaG9zdC1uYW1lLXJlc29sdmVyLm9iaiBgaWYgdGVzdCAtZiAnZGJ1cy1zeW5jLWhvc3QtbmFtZS1yZXNvbHZlci5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2RidXMtc3luYy1ob3N0LW5hbWUtcmVzb2x2ZXIuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZGJ1cy1zeW5jLWhvc3QtbmFtZS1yZXNvbHZlci5jJzsgZmlgCisKK2F2YWhpX2RhZW1vbi1kYnVzLXN5bmMtc2VydmljZS1yZXNvbHZlci5vOiBkYnVzLXN5bmMtc2VydmljZS1yZXNvbHZlci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfZGFlbW9uX0NGTEFHUykgJChDRkxBR1MpIC1NVCBhdmFoaV9kYWVtb24tZGJ1cy1zeW5jLXNlcnZpY2UtcmVzb2x2ZXIubyAtTUQgLU1QIC1NRiAkKERFUERJUikvYXZhaGlfZGFlbW9uLWRidXMtc3luYy1zZXJ2aWNlLXJlc29sdmVyLlRwbyAtYyAtbyBhdmFoaV9kYWVtb24tZGJ1cy1zeW5jLXNlcnZpY2UtcmVzb2x2ZXIubyBgdGVzdCAtZiAnZGJ1cy1zeW5jLXNlcnZpY2UtcmVzb2x2ZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZGJ1cy1zeW5jLXNlcnZpY2UtcmVzb2x2ZXIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYXZhaGlfZGFlbW9uLWRidXMtc3luYy1zZXJ2aWNlLXJlc29sdmVyLlRwbyAkKERFUERJUikvYXZhaGlfZGFlbW9uLWRidXMtc3luYy1zZXJ2aWNlLXJlc29sdmVyLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZGJ1cy1zeW5jLXNlcnZpY2UtcmVzb2x2ZXIuYycgb2JqZWN0PSdhdmFoaV9kYWVtb24tZGJ1cy1zeW5jLXNlcnZpY2UtcmVzb2x2ZXIubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfZGFlbW9uX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGF2YWhpX2RhZW1vbi1kYnVzLXN5bmMtc2VydmljZS1yZXNvbHZlci5vIGB0ZXN0IC1mICdkYnVzLXN5bmMtc2VydmljZS1yZXNvbHZlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BkYnVzLXN5bmMtc2VydmljZS1yZXNvbHZlci5jCisKK2F2YWhpX2RhZW1vbi1kYnVzLXN5bmMtc2VydmljZS1yZXNvbHZlci5vYmo6IGRidXMtc3luYy1zZXJ2aWNlLXJlc29sdmVyLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9kYWVtb25fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGF2YWhpX2RhZW1vbi1kYnVzLXN5bmMtc2VydmljZS1yZXNvbHZlci5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2F2YWhpX2RhZW1vbi1kYnVzLXN5bmMtc2VydmljZS1yZXNvbHZlci5UcG8gLWMgLW8gYXZhaGlfZGFlbW9uLWRidXMtc3luYy1zZXJ2aWNlLXJlc29sdmVyLm9iaiBgaWYgdGVzdCAtZiAnZGJ1cy1zeW5jLXNlcnZpY2UtcmVzb2x2ZXIuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdkYnVzLXN5bmMtc2VydmljZS1yZXNvbHZlci5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9kYnVzLXN5bmMtc2VydmljZS1yZXNvbHZlci5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9hdmFoaV9kYWVtb24tZGJ1cy1zeW5jLXNlcnZpY2UtcmVzb2x2ZXIuVHBvICQoREVQRElSKS9hdmFoaV9kYWVtb24tZGJ1cy1zeW5jLXNlcnZpY2UtcmVzb2x2ZXIuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdkYnVzLXN5bmMtc2VydmljZS1yZXNvbHZlci5jJyBvYmplY3Q9J2F2YWhpX2RhZW1vbi1kYnVzLXN5bmMtc2VydmljZS1yZXNvbHZlci5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX2RhZW1vbl9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhdmFoaV9kYWVtb24tZGJ1cy1zeW5jLXNlcnZpY2UtcmVzb2x2ZXIub2JqIGBpZiB0ZXN0IC1mICdkYnVzLXN5bmMtc2VydmljZS1yZXNvbHZlci5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2RidXMtc3luYy1zZXJ2aWNlLXJlc29sdmVyLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2RidXMtc3luYy1zZXJ2aWNlLXJlc29sdmVyLmMnOyBmaWAKKworYXZhaGlfZGFlbW9uLWRidXMtcmVjb3JkLWJyb3dzZXIubzogZGJ1cy1yZWNvcmQtYnJvd3Nlci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfZGFlbW9uX0NGTEFHUykgJChDRkxBR1MpIC1NVCBhdmFoaV9kYWVtb24tZGJ1cy1yZWNvcmQtYnJvd3Nlci5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9hdmFoaV9kYWVtb24tZGJ1cy1yZWNvcmQtYnJvd3Nlci5UcG8gLWMgLW8gYXZhaGlfZGFlbW9uLWRidXMtcmVjb3JkLWJyb3dzZXIubyBgdGVzdCAtZiAnZGJ1cy1yZWNvcmQtYnJvd3Nlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BkYnVzLXJlY29yZC1icm93c2VyLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2F2YWhpX2RhZW1vbi1kYnVzLXJlY29yZC1icm93c2VyLlRwbyAkKERFUERJUikvYXZhaGlfZGFlbW9uLWRidXMtcmVjb3JkLWJyb3dzZXIuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdkYnVzLXJlY29yZC1icm93c2VyLmMnIG9iamVjdD0nYXZhaGlfZGFlbW9uLWRidXMtcmVjb3JkLWJyb3dzZXIubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfZGFlbW9uX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGF2YWhpX2RhZW1vbi1kYnVzLXJlY29yZC1icm93c2VyLm8gYHRlc3QgLWYgJ2RidXMtcmVjb3JkLWJyb3dzZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZGJ1cy1yZWNvcmQtYnJvd3Nlci5jCisKK2F2YWhpX2RhZW1vbi1kYnVzLXJlY29yZC1icm93c2VyLm9iajogZGJ1cy1yZWNvcmQtYnJvd3Nlci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfZGFlbW9uX0NGTEFHUykgJChDRkxBR1MpIC1NVCBhdmFoaV9kYWVtb24tZGJ1cy1yZWNvcmQtYnJvd3Nlci5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2F2YWhpX2RhZW1vbi1kYnVzLXJlY29yZC1icm93c2VyLlRwbyAtYyAtbyBhdmFoaV9kYWVtb24tZGJ1cy1yZWNvcmQtYnJvd3Nlci5vYmogYGlmIHRlc3QgLWYgJ2RidXMtcmVjb3JkLWJyb3dzZXIuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdkYnVzLXJlY29yZC1icm93c2VyLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2RidXMtcmVjb3JkLWJyb3dzZXIuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYXZhaGlfZGFlbW9uLWRidXMtcmVjb3JkLWJyb3dzZXIuVHBvICQoREVQRElSKS9hdmFoaV9kYWVtb24tZGJ1cy1yZWNvcmQtYnJvd3Nlci5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2RidXMtcmVjb3JkLWJyb3dzZXIuYycgb2JqZWN0PSdhdmFoaV9kYWVtb24tZGJ1cy1yZWNvcmQtYnJvd3Nlci5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX2RhZW1vbl9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhdmFoaV9kYWVtb24tZGJ1cy1yZWNvcmQtYnJvd3Nlci5vYmogYGlmIHRlc3QgLWYgJ2RidXMtcmVjb3JkLWJyb3dzZXIuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdkYnVzLXJlY29yZC1icm93c2VyLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2RidXMtcmVjb3JkLWJyb3dzZXIuYyc7IGZpYAorCithdmFoaV9kYWVtb24tZGJ1cy5vOiAuLi9hdmFoaS1jb21tb24vZGJ1cy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfZGFlbW9uX0NGTEFHUykgJChDRkxBR1MpIC1NVCBhdmFoaV9kYWVtb24tZGJ1cy5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9hdmFoaV9kYWVtb24tZGJ1cy5UcG8gLWMgLW8gYXZhaGlfZGFlbW9uLWRidXMubyBgdGVzdCAtZiAnLi4vYXZhaGktY29tbW9uL2RidXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgLi4vYXZhaGktY29tbW9uL2RidXMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYXZhaGlfZGFlbW9uLWRidXMuVHBvICQoREVQRElSKS9hdmFoaV9kYWVtb24tZGJ1cy5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9Jy4uL2F2YWhpLWNvbW1vbi9kYnVzLmMnIG9iamVjdD0nYXZhaGlfZGFlbW9uLWRidXMubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfZGFlbW9uX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGF2YWhpX2RhZW1vbi1kYnVzLm8gYHRlc3QgLWYgJy4uL2F2YWhpLWNvbW1vbi9kYnVzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYC4uL2F2YWhpLWNvbW1vbi9kYnVzLmMKKworYXZhaGlfZGFlbW9uLWRidXMub2JqOiAuLi9hdmFoaS1jb21tb24vZGJ1cy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfZGFlbW9uX0NGTEFHUykgJChDRkxBR1MpIC1NVCBhdmFoaV9kYWVtb24tZGJ1cy5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2F2YWhpX2RhZW1vbi1kYnVzLlRwbyAtYyAtbyBhdmFoaV9kYWVtb24tZGJ1cy5vYmogYGlmIHRlc3QgLWYgJy4uL2F2YWhpLWNvbW1vbi9kYnVzLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnLi4vYXZhaGktY29tbW9uL2RidXMuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvLi4vYXZhaGktY29tbW9uL2RidXMuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYXZhaGlfZGFlbW9uLWRidXMuVHBvICQoREVQRElSKS9hdmFoaV9kYWVtb24tZGJ1cy5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9Jy4uL2F2YWhpLWNvbW1vbi9kYnVzLmMnIG9iamVjdD0nYXZhaGlfZGFlbW9uLWRidXMub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9kYWVtb25fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYXZhaGlfZGFlbW9uLWRidXMub2JqIGBpZiB0ZXN0IC1mICcuLi9hdmFoaS1jb21tb24vZGJ1cy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJy4uL2F2YWhpLWNvbW1vbi9kYnVzLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLy4uL2F2YWhpLWNvbW1vbi9kYnVzLmMnOyBmaWAKKworYXZhaGlfZGFlbW9uLWRidXMtd2F0Y2gtZ2x1ZS5vOiAuLi9hdmFoaS1jb21tb24vZGJ1cy13YXRjaC1nbHVlLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9kYWVtb25fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGF2YWhpX2RhZW1vbi1kYnVzLXdhdGNoLWdsdWUubyAtTUQgLU1QIC1NRiAkKERFUERJUikvYXZhaGlfZGFlbW9uLWRidXMtd2F0Y2gtZ2x1ZS5UcG8gLWMgLW8gYXZhaGlfZGFlbW9uLWRidXMtd2F0Y2gtZ2x1ZS5vIGB0ZXN0IC1mICcuLi9hdmFoaS1jb21tb24vZGJ1cy13YXRjaC1nbHVlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYC4uL2F2YWhpLWNvbW1vbi9kYnVzLXdhdGNoLWdsdWUuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYXZhaGlfZGFlbW9uLWRidXMtd2F0Y2gtZ2x1ZS5UcG8gJChERVBESVIpL2F2YWhpX2RhZW1vbi1kYnVzLXdhdGNoLWdsdWUuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPScuLi9hdmFoaS1jb21tb24vZGJ1cy13YXRjaC1nbHVlLmMnIG9iamVjdD0nYXZhaGlfZGFlbW9uLWRidXMtd2F0Y2gtZ2x1ZS5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9kYWVtb25fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYXZhaGlfZGFlbW9uLWRidXMtd2F0Y2gtZ2x1ZS5vIGB0ZXN0IC1mICcuLi9hdmFoaS1jb21tb24vZGJ1cy13YXRjaC1nbHVlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYC4uL2F2YWhpLWNvbW1vbi9kYnVzLXdhdGNoLWdsdWUuYworCithdmFoaV9kYWVtb24tZGJ1cy13YXRjaC1nbHVlLm9iajogLi4vYXZhaGktY29tbW9uL2RidXMtd2F0Y2gtZ2x1ZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfZGFlbW9uX0NGTEFHUykgJChDRkxBR1MpIC1NVCBhdmFoaV9kYWVtb24tZGJ1cy13YXRjaC1nbHVlLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvYXZhaGlfZGFlbW9uLWRidXMtd2F0Y2gtZ2x1ZS5UcG8gLWMgLW8gYXZhaGlfZGFlbW9uLWRidXMtd2F0Y2gtZ2x1ZS5vYmogYGlmIHRlc3QgLWYgJy4uL2F2YWhpLWNvbW1vbi9kYnVzLXdhdGNoLWdsdWUuYyc7IHRoZW4gJChDWUdQQVRIX1cpICcuLi9hdmFoaS1jb21tb24vZGJ1cy13YXRjaC1nbHVlLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLy4uL2F2YWhpLWNvbW1vbi9kYnVzLXdhdGNoLWdsdWUuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYXZhaGlfZGFlbW9uLWRidXMtd2F0Y2gtZ2x1ZS5UcG8gJChERVBESVIpL2F2YWhpX2RhZW1vbi1kYnVzLXdhdGNoLWdsdWUuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPScuLi9hdmFoaS1jb21tb24vZGJ1cy13YXRjaC1nbHVlLmMnIG9iamVjdD0nYXZhaGlfZGFlbW9uLWRidXMtd2F0Y2gtZ2x1ZS5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX2RhZW1vbl9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhdmFoaV9kYWVtb24tZGJ1cy13YXRjaC1nbHVlLm9iaiBgaWYgdGVzdCAtZiAnLi4vYXZhaGktY29tbW9uL2RidXMtd2F0Y2gtZ2x1ZS5jJzsgdGhlbiAkKENZR1BBVEhfVykgJy4uL2F2YWhpLWNvbW1vbi9kYnVzLXdhdGNoLWdsdWUuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvLi4vYXZhaGktY29tbW9uL2RidXMtd2F0Y2gtZ2x1ZS5jJzsgZmlgCisKK2luaV9maWxlX3BhcnNlcl90ZXN0LWluaS1maWxlLXBhcnNlci5vOiBpbmktZmlsZS1wYXJzZXIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGluaV9maWxlX3BhcnNlcl90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBpbmlfZmlsZV9wYXJzZXJfdGVzdC1pbmktZmlsZS1wYXJzZXIubyAtTUQgLU1QIC1NRiAkKERFUERJUikvaW5pX2ZpbGVfcGFyc2VyX3Rlc3QtaW5pLWZpbGUtcGFyc2VyLlRwbyAtYyAtbyBpbmlfZmlsZV9wYXJzZXJfdGVzdC1pbmktZmlsZS1wYXJzZXIubyBgdGVzdCAtZiAnaW5pLWZpbGUtcGFyc2VyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGluaS1maWxlLXBhcnNlci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9pbmlfZmlsZV9wYXJzZXJfdGVzdC1pbmktZmlsZS1wYXJzZXIuVHBvICQoREVQRElSKS9pbmlfZmlsZV9wYXJzZXJfdGVzdC1pbmktZmlsZS1wYXJzZXIuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdpbmktZmlsZS1wYXJzZXIuYycgb2JqZWN0PSdpbmlfZmlsZV9wYXJzZXJfdGVzdC1pbmktZmlsZS1wYXJzZXIubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoaW5pX2ZpbGVfcGFyc2VyX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gaW5pX2ZpbGVfcGFyc2VyX3Rlc3QtaW5pLWZpbGUtcGFyc2VyLm8gYHRlc3QgLWYgJ2luaS1maWxlLXBhcnNlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BpbmktZmlsZS1wYXJzZXIuYworCitpbmlfZmlsZV9wYXJzZXJfdGVzdC1pbmktZmlsZS1wYXJzZXIub2JqOiBpbmktZmlsZS1wYXJzZXIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGluaV9maWxlX3BhcnNlcl90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBpbmlfZmlsZV9wYXJzZXJfdGVzdC1pbmktZmlsZS1wYXJzZXIub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9pbmlfZmlsZV9wYXJzZXJfdGVzdC1pbmktZmlsZS1wYXJzZXIuVHBvIC1jIC1vIGluaV9maWxlX3BhcnNlcl90ZXN0LWluaS1maWxlLXBhcnNlci5vYmogYGlmIHRlc3QgLWYgJ2luaS1maWxlLXBhcnNlci5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2luaS1maWxlLXBhcnNlci5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9pbmktZmlsZS1wYXJzZXIuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvaW5pX2ZpbGVfcGFyc2VyX3Rlc3QtaW5pLWZpbGUtcGFyc2VyLlRwbyAkKERFUERJUikvaW5pX2ZpbGVfcGFyc2VyX3Rlc3QtaW5pLWZpbGUtcGFyc2VyLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0naW5pLWZpbGUtcGFyc2VyLmMnIG9iamVjdD0naW5pX2ZpbGVfcGFyc2VyX3Rlc3QtaW5pLWZpbGUtcGFyc2VyLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoaW5pX2ZpbGVfcGFyc2VyX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gaW5pX2ZpbGVfcGFyc2VyX3Rlc3QtaW5pLWZpbGUtcGFyc2VyLm9iaiBgaWYgdGVzdCAtZiAnaW5pLWZpbGUtcGFyc2VyLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnaW5pLWZpbGUtcGFyc2VyLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2luaS1maWxlLXBhcnNlci5jJzsgZmlgCisKK2luaV9maWxlX3BhcnNlcl90ZXN0LWluaS1maWxlLXBhcnNlci10ZXN0Lm86IGluaS1maWxlLXBhcnNlci10ZXN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChpbmlfZmlsZV9wYXJzZXJfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgaW5pX2ZpbGVfcGFyc2VyX3Rlc3QtaW5pLWZpbGUtcGFyc2VyLXRlc3QubyAtTUQgLU1QIC1NRiAkKERFUERJUikvaW5pX2ZpbGVfcGFyc2VyX3Rlc3QtaW5pLWZpbGUtcGFyc2VyLXRlc3QuVHBvIC1jIC1vIGluaV9maWxlX3BhcnNlcl90ZXN0LWluaS1maWxlLXBhcnNlci10ZXN0Lm8gYHRlc3QgLWYgJ2luaS1maWxlLXBhcnNlci10ZXN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGluaS1maWxlLXBhcnNlci10ZXN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2luaV9maWxlX3BhcnNlcl90ZXN0LWluaS1maWxlLXBhcnNlci10ZXN0LlRwbyAkKERFUERJUikvaW5pX2ZpbGVfcGFyc2VyX3Rlc3QtaW5pLWZpbGUtcGFyc2VyLXRlc3QuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdpbmktZmlsZS1wYXJzZXItdGVzdC5jJyBvYmplY3Q9J2luaV9maWxlX3BhcnNlcl90ZXN0LWluaS1maWxlLXBhcnNlci10ZXN0Lm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGluaV9maWxlX3BhcnNlcl90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGluaV9maWxlX3BhcnNlcl90ZXN0LWluaS1maWxlLXBhcnNlci10ZXN0Lm8gYHRlc3QgLWYgJ2luaS1maWxlLXBhcnNlci10ZXN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGluaS1maWxlLXBhcnNlci10ZXN0LmMKKworaW5pX2ZpbGVfcGFyc2VyX3Rlc3QtaW5pLWZpbGUtcGFyc2VyLXRlc3Qub2JqOiBpbmktZmlsZS1wYXJzZXItdGVzdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoaW5pX2ZpbGVfcGFyc2VyX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGluaV9maWxlX3BhcnNlcl90ZXN0LWluaS1maWxlLXBhcnNlci10ZXN0Lm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvaW5pX2ZpbGVfcGFyc2VyX3Rlc3QtaW5pLWZpbGUtcGFyc2VyLXRlc3QuVHBvIC1jIC1vIGluaV9maWxlX3BhcnNlcl90ZXN0LWluaS1maWxlLXBhcnNlci10ZXN0Lm9iaiBgaWYgdGVzdCAtZiAnaW5pLWZpbGUtcGFyc2VyLXRlc3QuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdpbmktZmlsZS1wYXJzZXItdGVzdC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9pbmktZmlsZS1wYXJzZXItdGVzdC5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9pbmlfZmlsZV9wYXJzZXJfdGVzdC1pbmktZmlsZS1wYXJzZXItdGVzdC5UcG8gJChERVBESVIpL2luaV9maWxlX3BhcnNlcl90ZXN0LWluaS1maWxlLXBhcnNlci10ZXN0LlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0naW5pLWZpbGUtcGFyc2VyLXRlc3QuYycgb2JqZWN0PSdpbmlfZmlsZV9wYXJzZXJfdGVzdC1pbmktZmlsZS1wYXJzZXItdGVzdC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGluaV9maWxlX3BhcnNlcl90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGluaV9maWxlX3BhcnNlcl90ZXN0LWluaS1maWxlLXBhcnNlci10ZXN0Lm9iaiBgaWYgdGVzdCAtZiAnaW5pLWZpbGUtcGFyc2VyLXRlc3QuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdpbmktZmlsZS1wYXJzZXItdGVzdC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9pbmktZmlsZS1wYXJzZXItdGVzdC5jJzsgZmlgCisKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJzCitpbnN0YWxsLWRpc3RfZGJ1c3NlcnZpY2VEQVRBOiAkKGRpc3RfZGJ1c3NlcnZpY2VfREFUQSkKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwl0ZXN0IC16ICIkKGRidXNzZXJ2aWNlZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQoZGJ1c3NlcnZpY2VkaXIpIgorCUBsaXN0PSckKGRpc3RfZGJ1c3NlcnZpY2VfREFUQSknOyB0ZXN0IC1uICIkKGRidXNzZXJ2aWNlZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICBlY2hvICIkJGQkJHAiOyBcCisJZG9uZSB8ICQoYW1fX2Jhc2VfbGlzdCkgfCBcCisJd2hpbGUgcmVhZCBmaWxlczsgZG8gXAorCSAgZWNobyAiICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICckKERFU1RESVIpJChkYnVzc2VydmljZWRpciknIjsgXAorCSAgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgIiQoREVTVERJUikkKGRidXNzZXJ2aWNlZGlyKSIgfHwgZXhpdCAkJD87IFwKKwlkb25lCisKK3VuaW5zdGFsbC1kaXN0X2RidXNzZXJ2aWNlREFUQToKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKGRpc3RfZGJ1c3NlcnZpY2VfREFUQSknOyB0ZXN0IC1uICIkKGRidXNzZXJ2aWNlZGlyKSIgfHwgbGlzdD07IFwKKwlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IHNlZCAtZSAnc3xeLiovfHwnYDsgXAorCWRpcj0nJChERVNURElSKSQoZGJ1c3NlcnZpY2VkaXIpJzsgJChhbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyKQoraW5zdGFsbC1kaXN0X2RidXNzeXN0ZW1zZXJ2aWNlc0RBVEE6ICQoZGlzdF9kYnVzc3lzdGVtc2VydmljZXNfREFUQSkKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwl0ZXN0IC16ICIkKGRidXNzeXN0ZW1zZXJ2aWNlc2RpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKGRidXNzeXN0ZW1zZXJ2aWNlc2RpcikiCisJQGxpc3Q9JyQoZGlzdF9kYnVzc3lzdGVtc2VydmljZXNfREFUQSknOyB0ZXN0IC1uICIkKGRidXNzeXN0ZW1zZXJ2aWNlc2RpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAorCSAgZWNobyAiJCRkJCRwIjsgXAorCWRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAorCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKKwkgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAnJChERVNURElSKSQoZGJ1c3N5c3RlbXNlcnZpY2VzZGlyKSciOyBcCisJICAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAiJChERVNURElSKSQoZGJ1c3N5c3RlbXNlcnZpY2VzZGlyKSIgfHwgZXhpdCAkJD87IFwKKwlkb25lCisKK3VuaW5zdGFsbC1kaXN0X2RidXNzeXN0ZW1zZXJ2aWNlc0RBVEE6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChkaXN0X2RidXNzeXN0ZW1zZXJ2aWNlc19EQVRBKSc7IHRlc3QgLW4gIiQoZGJ1c3N5c3RlbXNlcnZpY2VzZGlyKSIgfHwgbGlzdD07IFwKKwlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IHNlZCAtZSAnc3xeLiovfHwnYDsgXAorCWRpcj0nJChERVNURElSKSQoZGJ1c3N5c3RlbXNlcnZpY2VzZGlyKSc7ICQoYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpcikKK2luc3RhbGwtZGlzdF9pbnRyb3NwZWN0aW9uREFUQTogJChkaXN0X2ludHJvc3BlY3Rpb25fREFUQSkKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwl0ZXN0IC16ICIkKGludHJvc3BlY3Rpb25kaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChpbnRyb3NwZWN0aW9uZGlyKSIKKwlAbGlzdD0nJChkaXN0X2ludHJvc3BlY3Rpb25fREFUQSknOyB0ZXN0IC1uICIkKGludHJvc3BlY3Rpb25kaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKKwkgIGVjaG8gIiQkZCQkcCI7IFwKKwlkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKKwl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCisJICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgJyQoREVTVERJUikkKGludHJvc3BlY3Rpb25kaXIpJyI7IFwKKwkgICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICIkKERFU1RESVIpJChpbnRyb3NwZWN0aW9uZGlyKSIgfHwgZXhpdCAkJD87IFwKKwlkb25lCisKK3VuaW5zdGFsbC1kaXN0X2ludHJvc3BlY3Rpb25EQVRBOgorCUAkKE5PUk1BTF9VTklOU1RBTEwpCisJQGxpc3Q9JyQoZGlzdF9pbnRyb3NwZWN0aW9uX0RBVEEpJzsgdGVzdCAtbiAiJChpbnRyb3NwZWN0aW9uZGlyKSIgfHwgbGlzdD07IFwKKwlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IHNlZCAtZSAnc3xeLiovfHwnYDsgXAorCWRpcj0nJChERVNURElSKSQoaW50cm9zcGVjdGlvbmRpciknOyAkKGFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIpCitpbnN0YWxsLWRpc3RfcGtnZGF0YURBVEE6ICQoZGlzdF9wa2dkYXRhX0RBVEEpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJdGVzdCAteiAiJChwa2dkYXRhZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQocGtnZGF0YWRpcikiCisJQGxpc3Q9JyQoZGlzdF9wa2dkYXRhX0RBVEEpJzsgdGVzdCAtbiAiJChwa2dkYXRhZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICBlY2hvICIkJGQkJHAiOyBcCisJZG9uZSB8ICQoYW1fX2Jhc2VfbGlzdCkgfCBcCisJd2hpbGUgcmVhZCBmaWxlczsgZG8gXAorCSAgZWNobyAiICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICckKERFU1RESVIpJChwa2dkYXRhZGlyKSciOyBcCisJICAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAiJChERVNURElSKSQocGtnZGF0YWRpcikiIHx8IGV4aXQgJCQ/OyBcCisJZG9uZQorCit1bmluc3RhbGwtZGlzdF9wa2dkYXRhREFUQToKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKGRpc3RfcGtnZGF0YV9EQVRBKSc7IHRlc3QgLW4gIiQocGtnZGF0YWRpcikiIHx8IGxpc3Q9OyBcCisJZmlsZXM9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7IFwKKwlkaXI9JyQoREVTVERJUikkKHBrZ2RhdGFkaXIpJzsgJChhbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyKQoraW5zdGFsbC1kaXN0X3NlcnZpY2VEQVRBOiAkKGRpc3Rfc2VydmljZV9EQVRBKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQoc2VydmljZWRpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKHNlcnZpY2VkaXIpIgorCUBsaXN0PSckKGRpc3Rfc2VydmljZV9EQVRBKSc7IHRlc3QgLW4gIiQoc2VydmljZWRpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAorCSAgZWNobyAiJCRkJCRwIjsgXAorCWRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAorCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKKwkgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAnJChERVNURElSKSQoc2VydmljZWRpciknIjsgXAorCSAgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgIiQoREVTVERJUikkKHNlcnZpY2VkaXIpIiB8fCBleGl0ICQkPzsgXAorCWRvbmUKKwordW5pbnN0YWxsLWRpc3Rfc2VydmljZURBVEE6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChkaXN0X3NlcnZpY2VfREFUQSknOyB0ZXN0IC1uICIkKHNlcnZpY2VkaXIpIiB8fCBsaXN0PTsgXAorCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgc2VkIC1lICdzfF4uKi98fCdgOyBcCisJZGlyPSckKERFU1RESVIpJChzZXJ2aWNlZGlyKSc7ICQoYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpcikKK2luc3RhbGwtcGtnc3lzY29uZkRBVEE6ICQocGtnc3lzY29uZl9EQVRBKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQocGtnc3lzY29uZmRpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKHBrZ3N5c2NvbmZkaXIpIgorCUBsaXN0PSckKHBrZ3N5c2NvbmZfREFUQSknOyB0ZXN0IC1uICIkKHBrZ3N5c2NvbmZkaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKKwkgIGVjaG8gIiQkZCQkcCI7IFwKKwlkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKKwl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCisJICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgJyQoREVTVERJUikkKHBrZ3N5c2NvbmZkaXIpJyI7IFwKKwkgICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICIkKERFU1RESVIpJChwa2dzeXNjb25mZGlyKSIgfHwgZXhpdCAkJD87IFwKKwlkb25lCisKK3VuaW5zdGFsbC1wa2dzeXNjb25mREFUQToKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKHBrZ3N5c2NvbmZfREFUQSknOyB0ZXN0IC1uICIkKHBrZ3N5c2NvbmZkaXIpIiB8fCBsaXN0PTsgXAorCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgc2VkIC1lICdzfF4uKi98fCdgOyBcCisJZGlyPSckKERFU1RESVIpJChwa2dzeXNjb25mZGlyKSc7ICQoYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpcikKK2luc3RhbGwtc3lzdGVtZHN5c3RlbXVuaXREQVRBOiAkKHN5c3RlbWRzeXN0ZW11bml0X0RBVEEpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJdGVzdCAteiAiJChzeXN0ZW1kc3lzdGVtdW5pdGRpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKHN5c3RlbWRzeXN0ZW11bml0ZGlyKSIKKwlAbGlzdD0nJChzeXN0ZW1kc3lzdGVtdW5pdF9EQVRBKSc7IHRlc3QgLW4gIiQoc3lzdGVtZHN5c3RlbXVuaXRkaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKKwkgIGVjaG8gIiQkZCQkcCI7IFwKKwlkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKKwl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCisJICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgJyQoREVTVERJUikkKHN5c3RlbWRzeXN0ZW11bml0ZGlyKSciOyBcCisJICAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAiJChERVNURElSKSQoc3lzdGVtZHN5c3RlbXVuaXRkaXIpIiB8fCBleGl0ICQkPzsgXAorCWRvbmUKKwordW5pbnN0YWxsLXN5c3RlbWRzeXN0ZW11bml0REFUQToKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKHN5c3RlbWRzeXN0ZW11bml0X0RBVEEpJzsgdGVzdCAtbiAiJChzeXN0ZW1kc3lzdGVtdW5pdGRpcikiIHx8IGxpc3Q9OyBcCisJZmlsZXM9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7IFwKKwlkaXI9JyQoREVTVERJUikkKHN5c3RlbWRzeXN0ZW11bml0ZGlyKSc7ICQoYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpcikKKworSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlta2lkIC1mSUQgJCR1bmlxdWUKK3RhZ3M6IFRBR1MKKworVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlzZXQgeDsgXAorCWhlcmU9YHB3ZGA7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJc2hpZnQ7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKKwkgIGVsc2UgXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgJCR1bmlxdWU7IFwKKwkgIGZpOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAorCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorCSAgICAgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUgJChQUk9HUkFNUykgJChEQVRBKQoraW5zdGFsbGRpcnM6CisJZm9yIGRpciBpbiAiJChERVNURElSKSQoc2JpbmRpcikiICIkKERFU1RESVIpJChkYnVzc2VydmljZWRpcikiICIkKERFU1RESVIpJChkYnVzc3lzdGVtc2VydmljZXNkaXIpIiAiJChERVNURElSKSQoaW50cm9zcGVjdGlvbmRpcikiICIkKERFU1RESVIpJChwa2dkYXRhZGlyKSIgIiQoREVTVERJUikkKHNlcnZpY2VkaXIpIiAiJChERVNURElSKSQocGtnc3lzY29uZmRpcikiICIkKERFU1RESVIpJChzeXN0ZW1kc3lzdGVtdW5pdGRpcikiOyBkbyBcCisJICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCisJZG9uZQoraW5zdGFsbDogaW5zdGFsbC1hbQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCit1bmluc3RhbGw6IHVuaW5zdGFsbC1hbQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQoraW5zdGFsbC1zdHJpcDoKKwlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICAgICAgaW5zdGFsbDsgXAorCWVsc2UgXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCisJZmkKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ0xFQU5GSUxFUykiIHx8IHJtIC1mICQoQ0xFQU5GSUxFUykKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0UFJPR1JBTVMgXAorCWNsZWFuLXNiaW5QUk9HUkFNUyBtb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi10YWdzCisKK2R2aTogZHZpLWFtCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1hbQorCitodG1sLWFtOgorCitpbmZvOiBpbmZvLWFtCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1kYXRhLWxvY2FsIGluc3RhbGwtZGlzdF9kYnVzc2VydmljZURBVEEgXAorCWluc3RhbGwtZGlzdF9kYnVzc3lzdGVtc2VydmljZXNEQVRBIFwKKwlpbnN0YWxsLWRpc3RfaW50cm9zcGVjdGlvbkRBVEEgaW5zdGFsbC1kaXN0X3BrZ2RhdGFEQVRBIFwKKwlpbnN0YWxsLWRpc3Rfc2VydmljZURBVEEgaW5zdGFsbC1wa2dzeXNjb25mREFUQSBcCisJaW5zdGFsbC1zeXN0ZW1kc3lzdGVtdW5pdERBVEEKKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCisKK2luc3RhbGwtZHZpLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06IGluc3RhbGwtc2JpblBST0dSQU1TCisKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCisKK2luc3RhbGwtaHRtbC1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1pbmZvLWFtOgorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCisKK2luc3RhbGwtcGRmLWFtOgorCitpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCisKK2luc3RhbGwtcHMtYW06CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtYW0KKworcGRmLWFtOgorCitwczogcHMtYW0KKworcHMtYW06CisKK3VuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWRpc3RfZGJ1c3NlcnZpY2VEQVRBIFwKKwl1bmluc3RhbGwtZGlzdF9kYnVzc3lzdGVtc2VydmljZXNEQVRBIFwKKwl1bmluc3RhbGwtZGlzdF9pbnRyb3NwZWN0aW9uREFUQSB1bmluc3RhbGwtZGlzdF9wa2dkYXRhREFUQSBcCisJdW5pbnN0YWxsLWRpc3Rfc2VydmljZURBVEEgdW5pbnN0YWxsLXBrZ3N5c2NvbmZEQVRBIFwKKwl1bmluc3RhbGwtc2JpblBST0dSQU1TIHVuaW5zdGFsbC1zeXN0ZW1kc3lzdGVtdW5pdERBVEEKKworLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAorCisuUEhPTlk6IENUQUdTIEdUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCisJY2xlYW4tbGlidG9vbCBjbGVhbi1ub2luc3RQUk9HUkFNUyBjbGVhbi1zYmluUFJPR1JBTVMgY3RhZ3MgXAorCWRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAorCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAorCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWRhdGEtbG9jYWwgXAorCWluc3RhbGwtZGlzdF9kYnVzc2VydmljZURBVEEgXAorCWluc3RhbGwtZGlzdF9kYnVzc3lzdGVtc2VydmljZXNEQVRBIFwKKwlpbnN0YWxsLWRpc3RfaW50cm9zcGVjdGlvbkRBVEEgaW5zdGFsbC1kaXN0X3BrZ2RhdGFEQVRBIFwKKwlpbnN0YWxsLWRpc3Rfc2VydmljZURBVEEgaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gXAorCWluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBcCisJaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBcCisJaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wa2dzeXNjb25mREFUQSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAorCWluc3RhbGwtc2JpblBST0dSQU1TIGluc3RhbGwtc3RyaXAgXAorCWluc3RhbGwtc3lzdGVtZHN5c3RlbXVuaXREQVRBIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gXAorCWluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIFwKKwltb3N0bHljbGVhbiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHVuaW5zdGFsbCBcCisJdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1kaXN0X2RidXNzZXJ2aWNlREFUQSBcCisJdW5pbnN0YWxsLWRpc3RfZGJ1c3N5c3RlbXNlcnZpY2VzREFUQSBcCisJdW5pbnN0YWxsLWRpc3RfaW50cm9zcGVjdGlvbkRBVEEgdW5pbnN0YWxsLWRpc3RfcGtnZGF0YURBVEEgXAorCXVuaW5zdGFsbC1kaXN0X3NlcnZpY2VEQVRBIHVuaW5zdGFsbC1wa2dzeXNjb25mREFUQSBcCisJdW5pbnN0YWxsLXNiaW5QUk9HUkFNUyB1bmluc3RhbGwtc3lzdGVtZHN5c3RlbXVuaXREQVRBCisKKworQEhBVkVfTElCREFFTU9OX1RSVUVAQEhBVkVfWE1MX1RSVUVAJS5zZXJ2aWNlOiAlLnNlcnZpY2UuaW4KK0BIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQAkkKEFNX1ZfR0VOKXNlZCAtZSAncyxAc2JpbmRpclxALCQoc2JpbmRpciksZycgJDwgPiAkQAorCitASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUAlLnNvY2tldDogJS5zb2NrZXQuaW4KK0BIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQAkkKEFNX1ZfR0VOKXNlZCAtZSAncyxAc2JpbmRpclxALCQoc2JpbmRpciksZycgXAorQEhBVkVfTElCREFFTU9OX1RSVUVAQEhBVkVfWE1MX1RSVUVACQktZSAncyxAYXZhaGlfcnVudGltZV9kaXJcQCwkKGF2YWhpX3J1bnRpbWVfZGlyKSxnJyAkPCA+ICRACisKK3htbGxpbnQ6CisJeG1sbGludCAtLW5vb3V0IC0tdmFsaWQgZXhhbXBsZS5zZXJ2aWNlCisJZm9yIEYgaW4gJChpbnRyb3NwZWN0aW9uX0RBVEEpIDsgZG8gXAorCQl4bWxsaW50IC0tbm9vdXQgLS12YWxpZCAkJEYgOyBcCisJZG9uZQorCitpbnN0YWxsLWRhdGEtbG9jYWw6CisJdGVzdCAteiAiJChsb2NhbHN0YXRlZGlyKS9ydW4iIHx8ICQobWtkaXJfcCkgIiQoREVTVERJUikkKGxvY2Fsc3RhdGVkaXIpL3J1biIKKwordXBkYXRlLXN5c3RlbWQ6CisJY3VybCBodHRwOi8vY2dpdC5mcmVlZGVza3RvcC5vcmcvc3lzdGVtZC9wbGFpbi9zcmMvc2QtZGFlbW9uLmMgPiBzZC1kYWVtb24uYworCWN1cmwgaHR0cDovL2NnaXQuZnJlZWRlc2t0b3Aub3JnL3N5c3RlbWQvcGxhaW4vc3JjL3NkLWRhZW1vbi5oID4gc2QtZGFlbW9uLmgKKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9hdmFoaS1kYWVtb24uY29uZiBiL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vYXZhaGktZGFlbW9uLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk5Mjg0MgotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vYXZhaGktZGFlbW9uLmNvbmYKQEAgLTAsMCArMSw2OCBAQAorIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKyMKKyMgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyMgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyMgVVNBLgorCisjIFNlZSBhdmFoaS1kYWVtb24uY29uZig1KSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIGNvbmZpZ3VyYXRpb24KKyMgZmlsZSEKKworW3NlcnZlcl0KKyNob3N0LW5hbWU9Zm9vCisjZG9tYWluLW5hbWU9bG9jYWwKK2Jyb3dzZS1kb21haW5zPTBwb2ludGVyLmRlLCB6ZXJvY29uZi5vcmcKK3VzZS1pcHY0PXllcwordXNlLWlwdjY9bm8KKyNhbGxvdy1pbnRlcmZhY2VzPWV0aDAKKyNkZW55LWludGVyZmFjZXM9ZXRoMQorI2NoZWNrLXJlc3BvbnNlLXR0bD1ubworI3VzZS1pZmYtcnVubmluZz1ubworI2VuYWJsZS1kYnVzPXllcworI2Rpc2FsbG93LW90aGVyLXN0YWNrcz1ubworI2FsbG93LXBvaW50LXRvLXBvaW50PW5vCisjY2FjaGUtZW50cmllcy1tYXg9NDA5NgorI2NsaWVudHMtbWF4PTQwOTYKKyNvYmplY3RzLXBlci1jbGllbnQtbWF4PTEwMjQKKyNlbnRyaWVzLXBlci1lbnRyeS1ncm91cC1tYXg9MzIKK3JhdGVsaW1pdC1pbnRlcnZhbC11c2VjPTEwMDAwMDAKK3JhdGVsaW1pdC1idXJzdD0xMDAwCisKK1t3aWRlLWFyZWFdCitlbmFibGUtd2lkZS1hcmVhPXllcworCitbcHVibGlzaF0KKyNkaXNhYmxlLXB1Ymxpc2hpbmc9bm8KKyNkaXNhYmxlLXVzZXItc2VydmljZS1wdWJsaXNoaW5nPW5vCisjYWRkLXNlcnZpY2UtY29va2llPW5vCisjcHVibGlzaC1hZGRyZXNzZXM9eWVzCisjcHVibGlzaC1oaW5mbz15ZXMKKyNwdWJsaXNoLXdvcmtzdGF0aW9uPXllcworI3B1Ymxpc2gtZG9tYWluPXllcworI3B1Ymxpc2gtZG5zLXNlcnZlcnM9MTkyLjE2OC41MC4xLCAxOTIuMTY4LjUwLjIKKyNwdWJsaXNoLXJlc29sdi1jb25mLWRucy1zZXJ2ZXJzPXllcworI3B1Ymxpc2gtYWFhYS1vbi1pcHY0PXllcworI3B1Ymxpc2gtYS1vbi1pcHY2PW5vCisKK1tyZWZsZWN0b3JdCisjZW5hYmxlLXJlZmxlY3Rvcj1ubworI3JlZmxlY3QtaXB2PW5vCisKK1tybGltaXRzXQorI3JsaW1pdC1hcz0KK3JsaW1pdC1jb3JlPTAKK3JsaW1pdC1kYXRhPTQxOTQzMDQKK3JsaW1pdC1mc2l6ZT0wCitybGltaXQtbm9maWxlPTc2OAorcmxpbWl0LXN0YWNrPTQxOTQzMDQKK3JsaW1pdC1ucHJvYz0zCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL2F2YWhpLWRhZW1vbi5zZXJ2aWNlLmluIGIvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9hdmFoaS1kYWVtb24uc2VydmljZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDhjODM0Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9hdmFoaS1kYWVtb24uc2VydmljZS5pbgpAQCAtMCwwICsxLDMyIEBACisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorIworIyBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworIyBVU0EuCisKK1tVbml0XQorRGVzY3JpcHRpb249QXZhaGkgbUROUy9ETlMtU0QgU3RhY2sKK1JlcXVpcmVzPWF2YWhpLWRhZW1vbi5zb2NrZXQKKworW1NlcnZpY2VdCitUeXBlPWRidXMKK0J1c05hbWU9b3JnLmZyZWVkZXNrdG9wLkF2YWhpCitFeGVjU3RhcnQ9QHNiaW5kaXJAL2F2YWhpLWRhZW1vbiAtcworRXhlY1JlbG9hZD1Ac2JpbmRpckAvYXZhaGktZGFlbW9uIC1yCitOb3RpZnlBY2Nlc3M9bWFpbgorCitbSW5zdGFsbF0KK1dhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0CitBbHNvPWF2YWhpLWRhZW1vbi5zb2NrZXQKK0FsaWFzPWRidXMtb3JnLmZyZWVkZXNrdG9wLkF2YWhpLnNlcnZpY2UKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vYXZhaGktZGFlbW9uLnNvY2tldC5pbiBiL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vYXZhaGktZGFlbW9uLnNvY2tldC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzMwOWI4Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9hdmFoaS1kYWVtb24uc29ja2V0LmluCkBAIC0wLDAgKzEsMjUgQEAKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisjCisjIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisjIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisjIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisjIFVTQS4KKworW1VuaXRdCitEZXNjcmlwdGlvbj1BdmFoaSBtRE5TL0ROUy1TRCBTdGFjayBBY3RpdmF0aW9uIFNvY2tldAorCitbU29ja2V0XQorTGlzdGVuU3RyZWFtPUBhdmFoaV9ydW50aW1lX2RpckAvYXZhaGktZGFlbW9uL3NvY2tldAorCitbSW5zdGFsbF0KK1dhbnRlZEJ5PXNvY2tldHMudGFyZ2V0CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL2F2YWhpLWRidXMuY29uZiBiL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vYXZhaGktZGJ1cy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YjFhNjcKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL2F2YWhpLWRidXMuY29uZgpAQCAtMCwwICsxLDMyIEBACis8IURPQ1RZUEUgYnVzY29uZmlnIFBVQkxJQworICAgICAgICAgICItLy9mcmVlZGVza3RvcC8vRFREIEQtQlVTIEJ1cyBDb25maWd1cmF0aW9uIDEuMC8vRU4iCisgICAgICAgICAgImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3N0YW5kYXJkcy9kYnVzLzEuMC9idXNjb25maWcuZHRkIj4KKzxidXNjb25maWc+CisKKyAgPCEtLSBPbmx5IHJvb3Qgb3IgdXNlciBhdmFoaSBjYW4gb3duIHRoZSBBdmFoaSBzZXJ2aWNlIC0tPgorICA8cG9saWN5IHVzZXI9ImF2YWhpIj4KKyAgICA8YWxsb3cgb3duPSJvcmcuZnJlZWRlc2t0b3AuQXZhaGkiLz4KKyAgPC9wb2xpY3k+CisgIDxwb2xpY3kgdXNlcj0icm9vdCI+CisgICAgPGFsbG93IG93bj0ib3JnLmZyZWVkZXNrdG9wLkF2YWhpIi8+CisgIDwvcG9saWN5PgorCisgIDwhLS0gQWxsb3cgYW55b25lIHRvIGludm9rZSBtZXRob2RzIG9uIEF2YWhpIHNlcnZlciwgZXhjZXB0IFNldEhvc3ROYW1lIC0tPgorICA8cG9saWN5IGNvbnRleHQ9ImRlZmF1bHQiPgorICAgIDxhbGxvdyBzZW5kX2Rlc3RpbmF0aW9uPSJvcmcuZnJlZWRlc2t0b3AuQXZhaGkiLz4KKyAgICA8YWxsb3cgcmVjZWl2ZV9zZW5kZXI9Im9yZy5mcmVlZGVza3RvcC5BdmFoaSIvPgorCisgICAgPGRlbnkgc2VuZF9kZXN0aW5hdGlvbj0ib3JnLmZyZWVkZXNrdG9wLkF2YWhpIgorICAgICAgICAgIHNlbmRfaW50ZXJmYWNlPSJvcmcuZnJlZWRlc2t0b3AuQXZhaGkuU2VydmVyIiBzZW5kX21lbWJlcj0iU2V0SG9zdE5hbWUiLz4KKyAgPC9wb2xpY3k+CisKKyAgPCEtLSBBbGxvdyBldmVyeXRoaW5nLCBpbmNsdWRpbmcgYWNjZXNzIHRvIFNldEhvc3ROYW1lIHRvIHVzZXJzIG9mIHRoZSBncm91cCAibmV0ZGV2IiAtLT4KKyAgPHBvbGljeSBncm91cD0ibmV0ZGV2Ij4KKyAgICA8YWxsb3cgc2VuZF9kZXN0aW5hdGlvbj0ib3JnLmZyZWVkZXNrdG9wLkF2YWhpIi8+CisgICAgPGFsbG93IHJlY2VpdmVfc2VuZGVyPSJvcmcuZnJlZWRlc2t0b3AuQXZhaGkiLz4KKyAgPC9wb2xpY3k+CisgIDxwb2xpY3kgdXNlcj0icm9vdCI+CisgICAgPGFsbG93IHNlbmRfZGVzdGluYXRpb249Im9yZy5mcmVlZGVza3RvcC5BdmFoaSIvPgorICAgIDxhbGxvdyByZWNlaXZlX3NlbmRlcj0ib3JnLmZyZWVkZXNrdG9wLkF2YWhpIi8+CisgIDwvcG9saWN5PgorPC9idXNjb25maWc+CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL2F2YWhpLWRidXMuY29uZi5pbiBiL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vYXZhaGktZGJ1cy5jb25mLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkZjBjYzQKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL2F2YWhpLWRidXMuY29uZi5pbgpAQCAtMCwwICsxLDMyIEBACis8IURPQ1RZUEUgYnVzY29uZmlnIFBVQkxJQworICAgICAgICAgICItLy9mcmVlZGVza3RvcC8vRFREIEQtQlVTIEJ1cyBDb25maWd1cmF0aW9uIDEuMC8vRU4iCisgICAgICAgICAgImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3N0YW5kYXJkcy9kYnVzLzEuMC9idXNjb25maWcuZHRkIj4KKzxidXNjb25maWc+CisKKyAgPCEtLSBPbmx5IHJvb3Qgb3IgdXNlciBAQVZBSElfVVNFUkAgY2FuIG93biB0aGUgQXZhaGkgc2VydmljZSAtLT4KKyAgPHBvbGljeSB1c2VyPSJAQVZBSElfVVNFUkAiPgorICAgIDxhbGxvdyBvd249Im9yZy5mcmVlZGVza3RvcC5BdmFoaSIvPgorICA8L3BvbGljeT4KKyAgPHBvbGljeSB1c2VyPSJyb290Ij4KKyAgICA8YWxsb3cgb3duPSJvcmcuZnJlZWRlc2t0b3AuQXZhaGkiLz4KKyAgPC9wb2xpY3k+CisKKyAgPCEtLSBBbGxvdyBhbnlvbmUgdG8gaW52b2tlIG1ldGhvZHMgb24gQXZhaGkgc2VydmVyLCBleGNlcHQgU2V0SG9zdE5hbWUgLS0+CisgIDxwb2xpY3kgY29udGV4dD0iZGVmYXVsdCI+CisgICAgPGFsbG93IHNlbmRfZGVzdGluYXRpb249Im9yZy5mcmVlZGVza3RvcC5BdmFoaSIvPgorICAgIDxhbGxvdyByZWNlaXZlX3NlbmRlcj0ib3JnLmZyZWVkZXNrdG9wLkF2YWhpIi8+CisKKyAgICA8ZGVueSBzZW5kX2Rlc3RpbmF0aW9uPSJvcmcuZnJlZWRlc2t0b3AuQXZhaGkiCisgICAgICAgICAgc2VuZF9pbnRlcmZhY2U9Im9yZy5mcmVlZGVza3RvcC5BdmFoaS5TZXJ2ZXIiIHNlbmRfbWVtYmVyPSJTZXRIb3N0TmFtZSIvPgorICA8L3BvbGljeT4KKworICA8IS0tIEFsbG93IGV2ZXJ5dGhpbmcsIGluY2x1ZGluZyBhY2Nlc3MgdG8gU2V0SG9zdE5hbWUgdG8gdXNlcnMgb2YgdGhlIGdyb3VwICJAQVZBSElfUFJJVl9BQ0NFU1NfR1JPVVBAIiAtLT4KKyAgPHBvbGljeSBncm91cD0iQEFWQUhJX1BSSVZfQUNDRVNTX0dST1VQQCI+CisgICAgPGFsbG93IHNlbmRfZGVzdGluYXRpb249Im9yZy5mcmVlZGVza3RvcC5BdmFoaSIvPgorICAgIDxhbGxvdyByZWNlaXZlX3NlbmRlcj0ib3JnLmZyZWVkZXNrdG9wLkF2YWhpIi8+CisgIDwvcG9saWN5PgorICA8cG9saWN5IHVzZXI9InJvb3QiPgorICAgIDxhbGxvdyBzZW5kX2Rlc3RpbmF0aW9uPSJvcmcuZnJlZWRlc2t0b3AuQXZhaGkiLz4KKyAgICA8YWxsb3cgcmVjZWl2ZV9zZW5kZXI9Im9yZy5mcmVlZGVza3RvcC5BdmFoaSIvPgorICA8L3BvbGljeT4KKzwvYnVzY29uZmlnPgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9hdmFoaS1zZXJ2aWNlLmR0ZCBiL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vYXZhaGktc2VydmljZS5kdGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFmOTYzNwotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vYXZhaGktc2VydmljZS5kdGQKQEAgLTAsMCArMSwxOCBAQAorPCFFTEVNRU5UIHNlcnZpY2UtZ3JvdXAgKG5hbWUsc2VydmljZSspPgorPCFBVFRMSVNUIHNlcnZpY2UtZ3JvdXA+Cis8IUVMRU1FTlQgbmFtZSAoI1BDREFUQSk+Cis8IUFUVExJU1QgbmFtZSByZXBsYWNlLXdpbGRjYXJkcyAoeWVzfG5vKSAibm8iPgorPCFFTEVNRU5UIHNlcnZpY2UgKHR5cGUsc3VidHlwZSosZG9tYWluLW5hbWU/LGhvc3QtbmFtZT8scG9ydCx0eHQtcmVjb3JkKik+Cis8IUFUVExJU1Qgc2VydmljZSBwcm90b2NvbCAoaXB2NHxpcHY2fGFueSkgImFueSI+Cis8IUVMRU1FTlQgdHlwZSAoI1BDREFUQSk+Cis8IUFUVExJU1QgdHlwZT4KKzwhRUxFTUVOVCBzdWJ0eXBlICgjUENEQVRBKT4KKzwhQVRUTElTVCBzdWJ0eXBlPgorPCFFTEVNRU5UIGRvbWFpbi1uYW1lICgjUENEQVRBKT4KKzwhQVRUTElTVCBkb21haW4tbmFtZT4KKzwhRUxFTUVOVCBob3N0LW5hbWUgKCNQQ0RBVEEpPgorPCFBVFRMSVNUIGhvc3QtbmFtZT4KKzwhRUxFTUVOVCBwb3J0ICgjUENEQVRBKT4KKzwhQVRUTElTVCBwb3J0PgorPCFFTEVNRU5UIHR4dC1yZWNvcmQgKCNQQ0RBVEEpPgorPCFBVFRMSVNUIHR4dC1yZWNvcmQ+CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL2NhcHMuYyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vY2Fwcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlMjFhY2YKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL2NhcHMuYwpAQCAtMCwwICsxLDExNSBAQAorLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy9jYXBhYmlsaXR5Lmg+CisjaW5jbHVkZSA8c3lzL3ByY3RsLmg+CisKKyNpbmNsdWRlIDxhdmFoaS1jb3JlL2xvZy5oPgorCisjaW5jbHVkZSAiY2Fwcy5oIgorCitpbnQgYXZhaGlfY2Fwc19yZWR1Y2Uodm9pZCkgeworICAgIGludCByZXQgPSAwOworICAgIGNhcF90IGNhcHM7CisgICAgc3RhdGljIGNhcF92YWx1ZV90IGNhcF92YWx1ZXNbXSA9IHsgQ0FQX1NZU19DSFJPT1QsIENBUF9TRVRVSUQsIENBUF9TRVRHSUQgfTsKKworICAgIC8qIExldCdzIHJlZHVjZSBvdXIgY2FwcyB0byB0aGUgbWluaW11bSBzZXQgYW5kIHRlbGwgTGludXggdG8ga2VlcAorICAgICAqIHRoZW0gYWNyb3NzIHNldHVpZCgpLiBUaGlzIGlzIGNhbGxlZCBiZWZvcmUgd2UgZHJvcAorICAgICAqIHByaXZpbGVnZXMuICovCisKKyAgICBjYXBzID0gY2FwX2luaXQoKTsKKyAgICBhc3NlcnQoY2Fwcyk7CisgICAgY2FwX2NsZWFyKGNhcHMpOworCisgICAgY2FwX3NldF9mbGFnKGNhcHMsIENBUF9FRkZFQ1RJVkUsIDMsIGNhcF92YWx1ZXMsIENBUF9TRVQpOworICAgIGNhcF9zZXRfZmxhZyhjYXBzLCBDQVBfUEVSTUlUVEVELCAzLCBjYXBfdmFsdWVzLCBDQVBfU0VUKTsKKworICAgIGlmIChjYXBfc2V0X3Byb2MoY2FwcykgPCAwKSB7CisgICAgICAgIGF2YWhpX2xvZ19lcnJvcigiY2FwX3NldF9wcm9jKCkgZmFpbGVkOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldCA9IC0xOworICAgIH0KKyAgICBjYXBfZnJlZShjYXBzKTsKKworICAgIC8qIFJldGFpbiBjYXBhYmlsaXRpZXMgYWNyb3NzIHNldHVpZCgpICovCisgICAgaWYgKHByY3RsKFBSX1NFVF9LRUVQQ0FQUywgMSwgMCwgMCwgMCkgPCAwKSB7CisgICAgICAgIGF2YWhpX2xvZ19lcnJvcigicHJjdGwoUFJfU0VUX0tFRVBDQVBTKSBmYWlsZWQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0ID0gLTE7CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KKworaW50IGF2YWhpX2NhcHNfcmVkdWNlMih2b2lkKSB7CisgICAgaW50IHJldCA9IDA7CisgICAgY2FwX3QgY2FwczsKKyAgICBzdGF0aWMgY2FwX3ZhbHVlX3QgY2FwX3ZhbHVlc1tdID0geyBDQVBfU1lTX0NIUk9PVCB9OworCisgICAgLyogUmVkdWNlIG91ciBjYXBzIHRvIHRoZSBiYXJlIG1pbmltdW0gYW5kIHRlbGwgTGludXggbm90IHRvIGtlZXAKKyAgICAgKiB0aGVtIGFjcm9zcyBzZXR1aWQoKS4gVGhpcyBpcyBjYWxsZWQgYWZ0ZXIgd2UgZHJvcAorICAgICAqIHByaXZpbGVnZXMuICovCisKKyAgICAvKiBObyBsb25nZXIgcmV0YWluIGNhcHMgYWNyb3NzIHNldHVpZCgpICovCisgICAgaWYgKHByY3RsKFBSX1NFVF9LRUVQQ0FQUywgMCwgMCwgMCwgMCkgPCAwKSB7CisgICAgICAgIGF2YWhpX2xvZ19lcnJvcigicHJjdGwoUFJfU0VUX0tFRVBDQVBTKSBmYWlsZWQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0ID0gLTE7CisgICAgfQorCisgICAgY2FwcyA9IGNhcF9pbml0KCk7CisgICAgYXNzZXJ0KGNhcHMpOworICAgIGNhcF9jbGVhcihjYXBzKTsKKworICAgIC8qIHNldHVpZCgpIHplcm9lZCBvdXIgZWZmZWN0aXZlIGNhcHMsIGxldCdzIGdldCB0aGVtIGJhY2sgKi8KKyAgICBjYXBfc2V0X2ZsYWcoY2FwcywgQ0FQX0VGRkVDVElWRSwgMSwgY2FwX3ZhbHVlcywgQ0FQX1NFVCk7CisgICAgY2FwX3NldF9mbGFnKGNhcHMsIENBUF9QRVJNSVRURUQsIDEsIGNhcF92YWx1ZXMsIENBUF9TRVQpOworCisgICAgaWYgKGNhcF9zZXRfcHJvYyhjYXBzKSA8IDApIHsKKyAgICAgICAgYXZhaGlfbG9nX2Vycm9yKCJjYXBfc2V0X3Byb2MoKSBmYWlsZWQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0ID0gLTE7CisgICAgfQorICAgIGNhcF9mcmVlKGNhcHMpOworCisgICAgcmV0dXJuIHJldDsKK30KKworaW50IGF2YWhpX2NhcHNfZHJvcF9hbGwodm9pZCkgeworICAgIGNhcF90IGNhcHM7CisgICAgaW50IHJldCA9IDA7CisKKyAgICAvKiBEcm9wIGFsbCBjYXBhYmlsaXRpZXMgYW5kIHR1cm4gb3Vyc2VsdmVzIGludG8gYSBub3JtYWwgdXNlciBwcm9jZXNzICovCisKKyAgICBjYXBzID0gY2FwX2luaXQoKTsKKyAgICBhc3NlcnQoY2Fwcyk7CisgICAgY2FwX2NsZWFyKGNhcHMpOworCisgICAgaWYgKGNhcF9zZXRfcHJvYyhjYXBzKSA8IDApIHsKKyAgICAgICAgYXZhaGlfbG9nX2Vycm9yKCJjYXBfc2V0X3Byb2MoKSBmYWlsZWQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0ID0gLTE7CisgICAgfQorICAgIGNhcF9mcmVlKGNhcHMpOworCisgICAgcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vY2Fwcy5oIGIvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9jYXBzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTExOWJkMAotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vY2Fwcy5oCkBAIC0wLDAgKzEsMjcgQEAKKyNpZm5kZWYgZm9vY2Fwc2hmb28KKyNkZWZpbmUgZm9vY2Fwc2hmb28KKworLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCitpbnQgYXZhaGlfY2Fwc19yZWR1Y2Uodm9pZCk7CitpbnQgYXZhaGlfY2Fwc19yZWR1Y2UyKHZvaWQpOworaW50IGF2YWhpX2NhcHNfZHJvcF9hbGwodm9pZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9jaHJvb3QuYyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vY2hyb290LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NkNTZiZQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vY2hyb290LmMKQEAgLTAsMCArMSw0MTUgQEAKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvdW4uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorCisjaW5jbHVkZSA8YXZhaGktY29yZS9sb2cuaD4KKyNpbmNsdWRlIDxsaWJkYWVtb24vZGZvcmsuaD4KKworI2luY2x1ZGUgImNocm9vdC5oIgorI2luY2x1ZGUgImNhcHMuaCIKKyNpbmNsdWRlICJzZXRwcm9jdGl0bGUuaCIKKworZW51bSB7CisgICAgQVZBSElfQ0hST09UX1NVQ0NFU1MgPSAwLAorICAgIEFWQUhJX0NIUk9PVF9GQUlMVVJFLAorICAgIEFWQUhJX0NIUk9PVF9HRVRfUkVTT0xWX0NPTkYsCisjaWZkZWYgSEFWRV9EQlVTCisgICAgQVZBSElfQ0hST09UX0dFVF9TRVJWRVJfSU5UUk9TUEVDVCwKKyAgICBBVkFISV9DSFJPT1RfR0VUX0VOVFJZX0dST1VQX0lOVFJPU1BFQ1QsCisgICAgQVZBSElfQ0hST09UX0dFVF9BRERSRVNTX1JFU09MVkVSX0lOVFJPU1BFQ1QsCisgICAgQVZBSElfQ0hST09UX0dFVF9ET01BSU5fQlJPV1NFUl9JTlRST1NQRUNULAorICAgIEFWQUhJX0NIUk9PVF9HRVRfSE9TVF9OQU1FX1JFU09MVkVSX0lOVFJPU1BFQ1QsCisgICAgQVZBSElfQ0hST09UX0dFVF9TRVJWSUNFX0JST1dTRVJfSU5UUk9TUEVDVCwKKyAgICBBVkFISV9DSFJPT1RfR0VUX1NFUlZJQ0VfUkVTT0xWRVJfSU5UUk9TUEVDVCwKKyAgICBBVkFISV9DSFJPT1RfR0VUX1NFUlZJQ0VfVFlQRV9CUk9XU0VSX0lOVFJPU1BFQ1QsCisgICAgQVZBSElfQ0hST09UX0dFVF9SRUNPUkRfQlJPV1NFUl9JTlRST1NQRUNULAorI2VuZGlmCisgICAgQVZBSElfQ0hST09UX1VOTElOS19QSUQsCisgICAgQVZBSElfQ0hST09UX1VOTElOS19TT0NLRVQsCisgICAgQVZBSElfQ0hST09UX01BWAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGdldF9maWxlX25hbWVfdGFibGVbQVZBSElfQ0hST09UX01BWF0gPSB7CisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgICIvZXRjL3Jlc29sdi5jb25mIiwKKyNpZmRlZiBIQVZFX0RCVVMKKyAgICBBVkFISV9EQlVTX0lOVFJPU1BFQ1RJT05fRElSIi9vcmcuZnJlZWRlc2t0b3AuQXZhaGkuU2VydmVyLnhtbCIsCisgICAgQVZBSElfREJVU19JTlRST1NQRUNUSU9OX0RJUiIvb3JnLmZyZWVkZXNrdG9wLkF2YWhpLkVudHJ5R3JvdXAueG1sIiwKKyAgICBBVkFISV9EQlVTX0lOVFJPU1BFQ1RJT05fRElSIi9vcmcuZnJlZWRlc2t0b3AuQXZhaGkuQWRkcmVzc1Jlc29sdmVyLnhtbCIsCisgICAgQVZBSElfREJVU19JTlRST1NQRUNUSU9OX0RJUiIvb3JnLmZyZWVkZXNrdG9wLkF2YWhpLkRvbWFpbkJyb3dzZXIueG1sIiwKKyAgICBBVkFISV9EQlVTX0lOVFJPU1BFQ1RJT05fRElSIi9vcmcuZnJlZWRlc2t0b3AuQXZhaGkuSG9zdE5hbWVSZXNvbHZlci54bWwiLAorICAgIEFWQUhJX0RCVVNfSU5UUk9TUEVDVElPTl9ESVIiL29yZy5mcmVlZGVza3RvcC5BdmFoaS5TZXJ2aWNlQnJvd3Nlci54bWwiLAorICAgIEFWQUhJX0RCVVNfSU5UUk9TUEVDVElPTl9ESVIiL29yZy5mcmVlZGVza3RvcC5BdmFoaS5TZXJ2aWNlUmVzb2x2ZXIueG1sIiwKKyAgICBBVkFISV9EQlVTX0lOVFJPU1BFQ1RJT05fRElSIi9vcmcuZnJlZWRlc2t0b3AuQXZhaGkuU2VydmljZVR5cGVCcm93c2VyLnhtbCIsCisgICAgQVZBSElfREJVU19JTlRST1NQRUNUSU9OX0RJUiIvb3JnLmZyZWVkZXNrdG9wLkF2YWhpLlJlY29yZEJyb3dzZXIueG1sIiwKKyNlbmRpZgorICAgIE5VTEwsCisgICAgTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHVubGlua19maWxlX25hbWVfdGFibGVbQVZBSElfQ0hST09UX01BWF0gPSB7CisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwsCisjaWZkZWYgSEFWRV9EQlVTCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwsCisjZW5kaWYKKyAgICBBVkFISV9EQUVNT05fUlVOVElNRV9ESVIiL3BpZCIsCisgICAgQVZBSElfU09DS0VUCit9OworCitzdGF0aWMgaW50IGhlbHBlcl9mZCA9IC0xOworCitzdGF0aWMgaW50IHNlbmRfZmQoaW50IGZkLCBpbnQgcGF5bG9hZF9mZCkgeworICAgIHVpbnQ4X3QgZHVtbXkgPSBBVkFISV9DSFJPT1RfU1VDQ0VTUzsKKyAgICBzdHJ1Y3QgaW92ZWMgaW92OworICAgIHN0cnVjdCBtc2doZHIgbXNnOworICAgIHVuaW9uIHsKKyAgICAgICAgc3RydWN0IGNtc2doZHIgaGRyOworICAgICAgICBjaGFyIGJ1ZltDTVNHX1NQQUNFKHNpemVvZihpbnQpKV07CisgICAgfSBjbXNnOworCisgICAgLyogU2VuZCBhIGZpbGUgZGVzY3JpcHRvciBvdmVyIHRoZSBzb2NrZXQgKi8KKworICAgIG1lbXNldCgmaW92LCAwLCBzaXplb2YoaW92KSk7CisgICAgbWVtc2V0KCZtc2csIDAsIHNpemVvZihtc2cpKTsKKyAgICBtZW1zZXQoJmNtc2csIDAsIHNpemVvZihjbXNnKSk7CisKKyAgICBpb3YuaW92X2Jhc2UgPSAmZHVtbXk7CisgICAgaW92Lmlvdl9sZW4gPSBzaXplb2YoZHVtbXkpOworCisgICAgbXNnLm1zZ19pb3YgPSAmaW92OworICAgIG1zZy5tc2dfaW92bGVuID0gMTsKKyAgICBtc2cubXNnX25hbWUgPSBOVUxMOworICAgIG1zZy5tc2dfbmFtZWxlbiA9IDA7CisKKyAgICBtc2cubXNnX2NvbnRyb2wgPSAmY21zZzsKKyAgICBtc2cubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoY21zZyk7CisgICAgbXNnLm1zZ19mbGFncyA9IDA7CisKKyAgICBjbXNnLmhkci5jbXNnX2xlbiA9IENNU0dfTEVOKHNpemVvZihpbnQpKTsKKyAgICBjbXNnLmhkci5jbXNnX2xldmVsID0gU09MX1NPQ0tFVDsKKyAgICBjbXNnLmhkci5jbXNnX3R5cGUgPSBTQ01fUklHSFRTOworICAgICooKGludCopIENNU0dfREFUQSgmY21zZy5oZHIpKSA9IHBheWxvYWRfZmQ7CisKKyAgICBpZiAoc2VuZG1zZyhmZCwgJm1zZywgMCkgPCAwKSB7CisgICAgICAgIGF2YWhpX2xvZ19lcnJvcigic2VuZG1zZygpIGZhaWxlZDogJXMiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVjdl9mZChpbnQgZmQpIHsKKyAgICB1aW50OF90IGR1bW15OworICAgIHN0cnVjdCBpb3ZlYyBpb3Y7CisgICAgc3RydWN0IG1zZ2hkciBtc2c7CisgICAgdW5pb24geworICAgICAgICBzdHJ1Y3QgY21zZ2hkciBoZHI7CisgICAgICAgIGNoYXIgYnVmW0NNU0dfU1BBQ0Uoc2l6ZW9mKGludCkpXTsKKyAgICB9IGNtc2c7CisKKyAgICAvKiBSZWNlaXZlIGEgZmlsZSBkZXNjcmlwdG9yIGZyb20gYSBzb2NrZXQgKi8KKworICAgIG1lbXNldCgmaW92LCAwLCBzaXplb2YoaW92KSk7CisgICAgbWVtc2V0KCZtc2csIDAsIHNpemVvZihtc2cpKTsKKyAgICBtZW1zZXQoJmNtc2csIDAsIHNpemVvZihjbXNnKSk7CisKKyAgICBpb3YuaW92X2Jhc2UgPSAmZHVtbXk7CisgICAgaW92Lmlvdl9sZW4gPSBzaXplb2YoZHVtbXkpOworCisgICAgbXNnLm1zZ19pb3YgPSAmaW92OworICAgIG1zZy5tc2dfaW92bGVuID0gMTsKKyAgICBtc2cubXNnX25hbWUgPSBOVUxMOworICAgIG1zZy5tc2dfbmFtZWxlbiA9IDA7CisKKyAgICBtc2cubXNnX2NvbnRyb2wgPSBjbXNnLmJ1ZjsKKyAgICBtc2cubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoY21zZyk7CisgICAgbXNnLm1zZ19mbGFncyA9IDA7CisKKyAgICBjbXNnLmhkci5jbXNnX2xlbiA9IENNU0dfTEVOKHNpemVvZihpbnQpKTsKKyAgICBjbXNnLmhkci5jbXNnX2xldmVsID0gU09MX1NPQ0tFVDsKKyAgICBjbXNnLmhkci5jbXNnX3R5cGUgPSBTQ01fUklHSFRTOworICAgICooKGludCopIENNU0dfREFUQSgmY21zZy5oZHIpKSA9IC0xOworCisgICAgaWYgKHJlY3Ztc2coZmQsICZtc2csIDApIDw9IDApIHsKKyAgICAgICAgYXZhaGlfbG9nX2Vycm9yKCJyZWN2bXNnKCkgZmFpbGVkOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdHJ1Y3QgY21zZ2hkciogaDsKKworICAgICAgICBpZiAoZHVtbXkgIT0gQVZBSElfQ0hST09UX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCEoaCA9IENNU0dfRklSU1RIRFIoJm1zZykpKSB7CisgICAgICAgICAgICBhdmFoaV9sb2dfZXJyb3IoInJlY3Ztc2coKSBzZW50IG5vIGZkLiIpOworICAgICAgICAgICAgZXJybm8gPSBFSU5WQUw7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBhc3NlcnQoaC0+Y21zZ19sZW4gPSBDTVNHX0xFTihzaXplb2YoaW50KSkpOworICAgICAgICBhc3NlcnQoaC0+Y21zZ19sZXZlbCA9IFNPTF9TT0NLRVQpOworICAgICAgICBhc3NlcnQoaC0+Y21zZ190eXBlID09IFNDTV9SSUdIVFMpOworCisgICAgICAgIHJldHVybiAqKChpbnQqKUNNU0dfREFUQShoKSk7CisgICAgfQorfQorCitzdGF0aWMgaW50IGhlbHBlcl9tYWluKGludCBmZCkgeworICAgIGludCByZXQgPSAxOworICAgIGFzc2VydChmZCA+PSAwKTsKKworICAgIC8qIFRoaXMgaXMgdGhlIG1haW4gZnVuY3Rpb24gb2Ygb3VyIGhlbHBlciBwcm9jZXNzIHdoaWNoIGlzIGZvcmtlZAorICAgICAqIG9mZiB0byBhY2Nlc3MgZmlsZXMgb3V0c2lkZSB0aGUgY2hyb290IGVudmlyb25tZW50LiBLZWVwIGluCisgICAgICogbWluZCB0aGF0IHRoaXMgY29kZSBpcyBzZWN1cml0eSBzZW5zaXRpdmUhICovCisKKyAgICBhdmFoaV9sb2dfZGVidWcoX19GSUxFX18iOiBjaHJvb3QoKSBoZWxwZXIgc3RhcnRlZCIpOworCisgICAgZm9yICg7OykgeworICAgICAgICB1aW50OF90IGNvbW1hbmQ7CisgICAgICAgIHNzaXplX3QgcjsKKworICAgICAgICBpZiAoKHIgPSByZWFkKGZkLCAmY29tbWFuZCwgc2l6ZW9mKGNvbW1hbmQpKSkgPD0gMCkgeworCisgICAgICAgICAgICAvKiBFT0Y/ICovCisgICAgICAgICAgICBpZiAociA9PSAwKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBhdmFoaV9sb2dfZXJyb3IoX19GSUxFX18iOiByZWFkKCkgZmFpbGVkOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKworICAgICAgICBhc3NlcnQociA9PSBzaXplb2YoY29tbWFuZCkpOworCisgICAgICAgIGF2YWhpX2xvZ19kZWJ1ZyhfX0ZJTEVfXyI6IGNocm9vdCgpIGhlbHBlciBnb3QgY29tbWFuZCAlMDJ4IiwgY29tbWFuZCk7CisKKyAgICAgICAgc3dpdGNoIChjb21tYW5kKSB7CisjaWZkZWYgSEFWRV9EQlVTCisgICAgICAgICAgICBjYXNlIEFWQUhJX0NIUk9PVF9HRVRfU0VSVkVSX0lOVFJPU1BFQ1Q6CisgICAgICAgICAgICBjYXNlIEFWQUhJX0NIUk9PVF9HRVRfRU5UUllfR1JPVVBfSU5UUk9TUEVDVDoKKyAgICAgICAgICAgIGNhc2UgQVZBSElfQ0hST09UX0dFVF9BRERSRVNTX1JFU09MVkVSX0lOVFJPU1BFQ1Q6CisgICAgICAgICAgICBjYXNlIEFWQUhJX0NIUk9PVF9HRVRfRE9NQUlOX0JST1dTRVJfSU5UUk9TUEVDVDoKKyAgICAgICAgICAgIGNhc2UgQVZBSElfQ0hST09UX0dFVF9IT1NUX05BTUVfUkVTT0xWRVJfSU5UUk9TUEVDVDoKKyAgICAgICAgICAgIGNhc2UgQVZBSElfQ0hST09UX0dFVF9TRVJWSUNFX0JST1dTRVJfSU5UUk9TUEVDVDoKKyAgICAgICAgICAgIGNhc2UgQVZBSElfQ0hST09UX0dFVF9TRVJWSUNFX1JFU09MVkVSX0lOVFJPU1BFQ1Q6CisgICAgICAgICAgICBjYXNlIEFWQUhJX0NIUk9PVF9HRVRfU0VSVklDRV9UWVBFX0JST1dTRVJfSU5UUk9TUEVDVDoKKyAgICAgICAgICAgIGNhc2UgQVZBSElfQ0hST09UX0dFVF9SRUNPUkRfQlJPV1NFUl9JTlRST1NQRUNUOgorI2VuZGlmCisgICAgICAgICAgICBjYXNlIEFWQUhJX0NIUk9PVF9HRVRfUkVTT0xWX0NPTkY6IHsKKyAgICAgICAgICAgICAgICBpbnQgcGF5bG9hZDsKKworICAgICAgICAgICAgICAgIGlmICgocGF5bG9hZCA9IG9wZW4oZ2V0X2ZpbGVfbmFtZV90YWJsZVsoaW50KSBjb21tYW5kXSwgT19SRE9OTFkpKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgdWludDhfdCBjID0gQVZBSElfQ0hST09UX0ZBSUxVUkU7CisKKyAgICAgICAgICAgICAgICAgICAgYXZhaGlfbG9nX2Vycm9yKF9fRklMRV9fIjogb3BlbigpIGZhaWxlZDogJXMiLCBzdHJlcnJvcihlcnJubykpOworCisgICAgICAgICAgICAgICAgICAgIGlmICh3cml0ZShmZCwgJmMsIHNpemVvZihjKSkgIT0gc2l6ZW9mKGMpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdmFoaV9sb2dfZXJyb3IoX19GSUxFX18iOiB3cml0ZSgpIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoc2VuZF9mZChmZCwgcGF5bG9hZCkgPCAwKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisKKyAgICAgICAgICAgICAgICBjbG9zZShwYXlsb2FkKTsKKworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNlIEFWQUhJX0NIUk9PVF9VTkxJTktfU09DS0VUOgorICAgICAgICAgICAgY2FzZSBBVkFISV9DSFJPT1RfVU5MSU5LX1BJRDogeworICAgICAgICAgICAgICAgIHVpbnQ4X3QgYyA9IEFWQUhJX0NIUk9PVF9TVUNDRVNTOworCisgICAgICAgICAgICAgICAgdW5saW5rKHVubGlua19maWxlX25hbWVfdGFibGVbKGludCkgY29tbWFuZF0pOworCisgICAgICAgICAgICAgICAgaWYgKHdyaXRlKGZkLCAmYywgc2l6ZW9mKGMpKSAhPSBzaXplb2YoYykpIHsKKyAgICAgICAgICAgICAgICAgICAgYXZhaGlfbG9nX2Vycm9yKF9fRklMRV9fIjogd3JpdGUoKSBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYXZhaGlfbG9nX2Vycm9yKF9fRklMRV9fIjogVW5rbm93biBjb21tYW5kICUwMnguIiwgY29tbWFuZCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXQgPSAwOworCitmYWlsOgorCisgICAgYXZhaGlfbG9nX2RlYnVnKF9fRklMRV9fIjogY2hyb290KCkgaGVscGVyIGV4aXRpbmcgd2l0aCByZXR1cm4gdmFsdWUgJWkiLCByZXQpOworCisgICAgcmV0dXJuIHJldDsKK30KKworaW50IGF2YWhpX2Nocm9vdF9oZWxwZXJfc3RhcnQoY29uc3QgY2hhciAqYXJndjApIHsKKyAgICBpbnQgc29ja1syXTsKKyAgICBwaWRfdCBwaWQ7CisKKyAgICBhc3NlcnQoaGVscGVyX2ZkIDwgMCk7CisKKyAgICBpZiAoc29ja2V0cGFpcihBRl9VTklYLCBTT0NLX1NUUkVBTSwgMCwgc29jaykgPCAwKSB7CisgICAgICAgIGF2YWhpX2xvZ19lcnJvcigic29ja2V0cGFpcigpIGZhaWxlZDogJXMiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKChwaWQgPSBmb3JrKCkpIDwgMCkgeworICAgICAgICBjbG9zZShzb2NrWzBdKTsKKyAgICAgICAgY2xvc2Uoc29ja1sxXSk7CisgICAgICAgIGF2YWhpX2xvZ19lcnJvcihfX0ZJTEVfXyI6IGZvcmsoKSBmYWlsZWQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0gZWxzZSBpZiAocGlkID09IDApIHsKKworICAgICAgICAvKiBEcm9wIGFsbCByZW1haW5pbmcgY2FwYWJpbGl0aWVzICovCisgICAgICAgIGF2YWhpX2NhcHNfZHJvcF9hbGwoKTsKKworICAgICAgICBhdmFoaV9zZXRfcHJvY190aXRsZShhcmd2MCwgIiVzOiBjaHJvb3QgaGVscGVyIiwgYXJndjApOworCisgICAgICAgIGRhZW1vbl9yZXR2YWxfZG9uZSgpOworCisgICAgICAgIGNsb3NlKHNvY2tbMF0pOworICAgICAgICBoZWxwZXJfbWFpbihzb2NrWzFdKTsKKyAgICAgICAgX2V4aXQoMCk7CisgICAgfQorCisgICAgY2xvc2Uoc29ja1sxXSk7CisgICAgaGVscGVyX2ZkID0gc29ja1swXTsKKworICAgIHJldHVybiAwOworfQorCit2b2lkIGF2YWhpX2Nocm9vdF9oZWxwZXJfc2h1dGRvd24odm9pZCkgeworCisgICAgaWYgKGhlbHBlcl9mZCA8PSAwKQorICAgICAgICByZXR1cm47CisKKyAgICBjbG9zZShoZWxwZXJfZmQpOworICAgIGhlbHBlcl9mZCA9IC0xOworfQorCitpbnQgYXZhaGlfY2hyb290X2hlbHBlcl9nZXRfZmQoY29uc3QgY2hhciAqZm5hbWUpIHsKKworICAgIGlmIChoZWxwZXJfZmQgPj0gMCkgeworICAgICAgICB1aW50OF90IGNvbW1hbmQ7CisKKyAgICAgICAgZm9yIChjb21tYW5kID0gMjsgY29tbWFuZCA8IEFWQUhJX0NIUk9PVF9NQVg7IGNvbW1hbmQrKykKKyAgICAgICAgICAgIGlmIChnZXRfZmlsZV9uYW1lX3RhYmxlWyhpbnQpIGNvbW1hbmRdICYmCisgICAgICAgICAgICAgICAgc3RyY21wKGZuYW1lLCBnZXRfZmlsZV9uYW1lX3RhYmxlWyhpbnQpIGNvbW1hbmRdKSA9PSAwKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmIChjb21tYW5kID49IEFWQUhJX0NIUk9PVF9NQVgpIHsKKyAgICAgICAgICAgIGF2YWhpX2xvZ19lcnJvcigiY2hyb290KCkgaGVscGVyIGFjY2Vzc2VkIGZvciBpbnZhbGlkIGZpbGUgbmFtZSIpOworICAgICAgICAgICAgZXJybm8gPSBFQUNDRVM7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBhc3NlcnQoZ2V0X2ZpbGVfbmFtZV90YWJsZVsoaW50KSBjb21tYW5kXSk7CisKKyAgICAgICAgaWYgKHdyaXRlKGhlbHBlcl9mZCwgJmNvbW1hbmQsIHNpemVvZihjb21tYW5kKSkgPCAwKSB7CisgICAgICAgICAgICBhdmFoaV9sb2dfZXJyb3IoIndyaXRlKCkgZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZWN2X2ZkKGhlbHBlcl9mZCk7CisKKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuIG9wZW4oZm5hbWUsIE9fUkRPTkxZKTsKK30KKworCitGSUxFICphdmFoaV9jaHJvb3RfaGVscGVyX2dldF9maWxlKGNvbnN0IGNoYXIgKmZuYW1lKSB7CisgICAgRklMRSAqZjsKKyAgICBpbnQgZmQ7CisKKyAgICBpZiAoKGZkID0gYXZhaGlfY2hyb290X2hlbHBlcl9nZXRfZmQoZm5hbWUpKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZiA9IGZkb3BlbihmZCwgInIiKTsKKyAgICBhc3NlcnQoZik7CisKKyAgICByZXR1cm4gZjsKK30KKworaW50IGF2YWhpX2Nocm9vdF9oZWxwZXJfdW5saW5rKGNvbnN0IGNoYXIgKmZuYW1lKSB7CisKKyAgICBpZiAoaGVscGVyX2ZkID49IDApIHsKKyAgICAgICAgdWludDhfdCBjLCBjb21tYW5kOworICAgICAgICBzc2l6ZV90IHI7CisKKyAgICAgICAgZm9yIChjb21tYW5kID0gMjsgY29tbWFuZCA8IEFWQUhJX0NIUk9PVF9NQVg7IGNvbW1hbmQrKykKKyAgICAgICAgICAgIGlmICh1bmxpbmtfZmlsZV9uYW1lX3RhYmxlWyhpbnQpIGNvbW1hbmRdICYmCisgICAgICAgICAgICAgICAgc3RyY21wKGZuYW1lLCB1bmxpbmtfZmlsZV9uYW1lX3RhYmxlWyhpbnQpIGNvbW1hbmRdKSA9PSAwKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmIChjb21tYW5kID49IEFWQUhJX0NIUk9PVF9NQVgpIHsKKyAgICAgICAgICAgIGF2YWhpX2xvZ19lcnJvcigiY2hyb290KCkgaGVscGVyIGFjY2Vzc2VkIGZvciBpbnZhbGlkIGZpbGUgbmFtZSIpOworICAgICAgICAgICAgZXJybm8gPSBFQUNDRVM7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBpZiAod3JpdGUoaGVscGVyX2ZkLCAmY29tbWFuZCwgc2l6ZW9mKGNvbW1hbmQpKSA8IDAgJiYKKyAgICAgICAgICAgIChlcnJubyAhPSBFUElQRSAmJiBlcnJubyAhPSBFQ09OTlJFU0VUKSkgeworICAgICAgICAgICAgYXZhaGlfbG9nX2Vycm9yKCJ3cml0ZSgpIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKHIgPSByZWFkKGhlbHBlcl9mZCwgJmMsIHNpemVvZihjKSkpIDwgMCAmJgorICAgICAgICAgICAgKGVycm5vICE9IEVQSVBFICYmIGVycm5vICE9IEVDT05OUkVTRVQpKSB7CisgICAgICAgICAgICBhdmFoaV9sb2dfZXJyb3IoInJlYWQoKSBmYWlsZWQ6ICVzXG4iLCByIDwgMCA/IHN0cmVycm9yKGVycm5vKSA6ICJFT0YiKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAwOworCisgICAgfSBlbHNlCisKKyAgICAgICAgcmV0dXJuIHVubGluayhmbmFtZSk7CisKK30KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vY2hyb290LmggYi9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL2Nocm9vdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4MjhkNTQKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL2Nocm9vdC5oCkBAIC0wLDAgKzEsMzQgQEAKKyNpZm5kZWYgZm9vY2hyb290aGVscGVyaGZvbworI2RlZmluZSBmb29jaHJvb3RoZWxwZXJoZm9vCisKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKK2ludCBhdmFoaV9jaHJvb3RfaGVscGVyX3N0YXJ0KGNvbnN0IGNoYXIgKmFyZ3YwKTsKK3ZvaWQgYXZhaGlfY2hyb290X2hlbHBlcl9zaHV0ZG93bih2b2lkKTsKK2ludCBhdmFoaV9jaHJvb3RfaGVscGVyX2dldChjb25zdCBjaGFyICpmbmFtZSk7CisKK2ludCBhdmFoaV9jaHJvb3RfaGVscGVyX2dldF9mZChjb25zdCBjaGFyICpmbmFtZSk7CitGSUxFICphdmFoaV9jaHJvb3RfaGVscGVyX2dldF9maWxlKGNvbnN0IGNoYXIgKmZuYW1lKTsKKworaW50IGF2YWhpX2Nocm9vdF9oZWxwZXJfdW5saW5rKGNvbnN0IGNoYXIgKmZuYW1lKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL2RidXMtYXN5bmMtYWRkcmVzcy1yZXNvbHZlci5jIGIvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9kYnVzLWFzeW5jLWFkZHJlc3MtcmVzb2x2ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzdlMDNjCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9kYnVzLWFzeW5jLWFkZHJlc3MtcmVzb2x2ZXIuYwpAQCAtMCwwICsxLDE0MiBAQAorLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9tYWxsb2MuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vZGJ1cy5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9lcnJvci5oPgorI2luY2x1ZGUgPGF2YWhpLWNvcmUvbG9nLmg+CisKKyNpbmNsdWRlICJkYnVzLXV0aWwuaCIKKyNpbmNsdWRlICJkYnVzLWludGVybmFsLmgiCisKK3ZvaWQgYXZhaGlfZGJ1c19hc3luY19hZGRyZXNzX3Jlc29sdmVyX2ZyZWUoQXN5bmNBZGRyZXNzUmVzb2x2ZXJJbmZvICppKSB7CisgICAgYXNzZXJ0KGkpOworCisgICAgaWYgKGktPmFkZHJlc3NfcmVzb2x2ZXIpCisgICAgICAgIGF2YWhpX3NfYWRkcmVzc19yZXNvbHZlcl9mcmVlKGktPmFkZHJlc3NfcmVzb2x2ZXIpOworCisgICAgaWYgKGktPnBhdGgpIHsKKyAgICAgICAgZGJ1c19jb25uZWN0aW9uX3VucmVnaXN0ZXJfb2JqZWN0X3BhdGgoc2VydmVyLT5idXMsIGktPnBhdGgpOworICAgICAgICBhdmFoaV9mcmVlKGktPnBhdGgpOworICAgIH0KKworICAgIEFWQUhJX0xMSVNUX1JFTU9WRShBc3luY0FkZHJlc3NSZXNvbHZlckluZm8sIGFzeW5jX2FkZHJlc3NfcmVzb2x2ZXJzLCBpLT5jbGllbnQtPmFzeW5jX2FkZHJlc3NfcmVzb2x2ZXJzLCBpKTsKKworICAgIGFzc2VydChpLT5jbGllbnQtPm5fb2JqZWN0cyA+PSAxKTsKKyAgICBpLT5jbGllbnQtPm5fb2JqZWN0cy0tOworCisgICAgYXZhaGlfZnJlZShpKTsKK30KKwordm9pZCBhdmFoaV9kYnVzX2FzeW5jX2FkZHJlc3NfcmVzb2x2ZXJfY2FsbGJhY2soQXZhaGlTQWRkcmVzc1Jlc29sdmVyICpyLCBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLCBBdmFoaVByb3RvY29sIHByb3RvY29sLCBBdmFoaVJlc29sdmVyRXZlbnQgZXZlbnQsIGNvbnN0IEF2YWhpQWRkcmVzcyAqYWRkcmVzcywgY29uc3QgY2hhciAqaG9zdF9uYW1lLCBBdmFoaUxvb2t1cFJlc3VsdEZsYWdzIGZsYWdzLCB2b2lkKiB1c2VyZGF0YSkgeworICAgIEFzeW5jQWRkcmVzc1Jlc29sdmVySW5mbyAqaSA9IHVzZXJkYXRhOworICAgIERCdXNNZXNzYWdlICpyZXBseTsKKworICAgIGFzc2VydChyKTsKKyAgICBhc3NlcnQoaSk7CisKKyAgICByZXBseSA9IGRidXNfbWVzc2FnZV9uZXdfc2lnbmFsKGktPnBhdGgsIEFWQUhJX0RCVVNfSU5URVJGQUNFX0FERFJFU1NfUkVTT0xWRVIsIGF2YWhpX2RidXNfbWFwX3Jlc29sdmVfc2lnbmFsX25hbWUoZXZlbnQpKTsKKworICAgIGlmICghcmVwbHkpIHsKKyAgICAgICAgYXZhaGlfbG9nX2Vycm9yKCJGYWlsZWQgYWxsb2NhdGUgbWVzc2FnZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGV2ZW50ID09IEFWQUhJX1JFU09MVkVSX0ZPVU5EKSB7CisgICAgICAgIGNoYXIgdFtBVkFISV9BRERSRVNTX1NUUl9NQVhdLCAqcHQgPSB0OworICAgICAgICBpbnQzMl90IGlfaW50ZXJmYWNlLCBpX3Byb3RvY29sLCBpX2Fwcm90b2NvbDsKKyAgICAgICAgdWludDMyX3QgdV9mbGFnczsKKworICAgICAgICBhc3NlcnQoYWRkcmVzcyk7CisgICAgICAgIGFzc2VydChob3N0X25hbWUpOworICAgICAgICBhdmFoaV9hZGRyZXNzX3NucHJpbnQodCwgc2l6ZW9mKHQpLCBhZGRyZXNzKTsKKworICAgICAgICBpX2ludGVyZmFjZSA9IChpbnQzMl90KSBpbnRlcmZhY2U7CisgICAgICAgIGlfcHJvdG9jb2wgPSAoaW50MzJfdCkgcHJvdG9jb2w7CisgICAgICAgIGlfYXByb3RvY29sID0gKGludDMyX3QpIGFkZHJlc3MtPnByb3RvOworICAgICAgICB1X2ZsYWdzID0gKHVpbnQzMl90KSBmbGFnczsKKworICAgICAgICBkYnVzX21lc3NhZ2VfYXBwZW5kX2FyZ3MoCisgICAgICAgICAgICByZXBseSwKKyAgICAgICAgICAgIERCVVNfVFlQRV9JTlQzMiwgJmlfaW50ZXJmYWNlLAorICAgICAgICAgICAgREJVU19UWVBFX0lOVDMyLCAmaV9wcm90b2NvbCwKKyAgICAgICAgICAgIERCVVNfVFlQRV9JTlQzMiwgJmlfYXByb3RvY29sLAorICAgICAgICAgICAgREJVU19UWVBFX1NUUklORywgJnB0LAorICAgICAgICAgICAgREJVU19UWVBFX1NUUklORywgJmhvc3RfbmFtZSwKKyAgICAgICAgICAgIERCVVNfVFlQRV9VSU5UMzIsICZ1X2ZsYWdzLAorICAgICAgICAgICAgREJVU19UWVBFX0lOVkFMSUQpOworCisgICAgfSAgZWxzZSB7CisgICAgICAgIGFzc2VydChldmVudCA9PSBBVkFISV9SRVNPTFZFUl9GQUlMVVJFKTsKKyAgICAgICAgYXZhaGlfZGJ1c19hcHBlbmRfc2VydmVyX2Vycm9yKHJlcGx5KTsKKyAgICB9CisKKyAgICBkYnVzX21lc3NhZ2Vfc2V0X2Rlc3RpbmF0aW9uKHJlcGx5LCBpLT5jbGllbnQtPm5hbWUpOworICAgIGRidXNfY29ubmVjdGlvbl9zZW5kKHNlcnZlci0+YnVzLCByZXBseSwgTlVMTCk7CisgICAgZGJ1c19tZXNzYWdlX3VucmVmKHJlcGx5KTsKK30KKworREJ1c0hhbmRsZXJSZXN1bHQgYXZhaGlfZGJ1c19tc2dfYXN5bmNfYWRkcmVzc19yZXNvbHZlcl9pbXBsKERCdXNDb25uZWN0aW9uICpjLCBEQnVzTWVzc2FnZSAqbSwgdm9pZCAqdXNlcmRhdGEpIHsKKyAgICBEQnVzRXJyb3IgZXJyb3I7CisgICAgQXN5bmNBZGRyZXNzUmVzb2x2ZXJJbmZvICppID0gdXNlcmRhdGE7CisKKyAgICBhc3NlcnQoYyk7CisgICAgYXNzZXJ0KG0pOworICAgIGFzc2VydChpKTsKKworICAgIGRidXNfZXJyb3JfaW5pdCgmZXJyb3IpOworCisgICAgYXZhaGlfbG9nX2RlYnVnKF9fRklMRV9fIjogaW50ZXJmYWNlPSVzLCBwYXRoPSVzLCBtZW1iZXI9JXMiLAorICAgICAgICAgICAgICAgICAgICBkYnVzX21lc3NhZ2VfZ2V0X2ludGVyZmFjZShtKSwKKyAgICAgICAgICAgICAgICAgICAgZGJ1c19tZXNzYWdlX2dldF9wYXRoKG0pLAorICAgICAgICAgICAgICAgICAgICBkYnVzX21lc3NhZ2VfZ2V0X21lbWJlcihtKSk7CisKKyAgICAvKiBJbnRyb3NwZWN0aW9uICovCisgICAgaWYgKGRidXNfbWVzc2FnZV9pc19tZXRob2RfY2FsbChtLCBEQlVTX0lOVEVSRkFDRV9JTlRST1NQRUNUQUJMRSwgIkludHJvc3BlY3QiKSkKKyAgICAgICAgcmV0dXJuIGF2YWhpX2RidXNfaGFuZGxlX2ludHJvc3BlY3QoYywgbSwgIm9yZy5mcmVlZGVza3RvcC5BdmFoaS5BZGRyZXNzUmVzb2x2ZXIueG1sIik7CisKKyAgICAvKiBBY2Nlc3MgY29udHJvbCAqLworICAgIGlmIChzdHJjbXAoZGJ1c19tZXNzYWdlX2dldF9zZW5kZXIobSksIGktPmNsaWVudC0+bmFtZSkpCisgICAgICAgIHJldHVybiBhdmFoaV9kYnVzX3Jlc3BvbmRfZXJyb3IoYywgbSwgQVZBSElfRVJSX0FDQ0VTU19ERU5JRUQsIE5VTEwpOworCisgICAgaWYgKGRidXNfbWVzc2FnZV9pc19tZXRob2RfY2FsbChtLCBBVkFISV9EQlVTX0lOVEVSRkFDRV9BRERSRVNTX1JFU09MVkVSLCAiRnJlZSIpKSB7CisKKyAgICAgICAgaWYgKCFkYnVzX21lc3NhZ2VfZ2V0X2FyZ3MobSwgJmVycm9yLCBEQlVTX1RZUEVfSU5WQUxJRCkpIHsKKyAgICAgICAgICAgIGF2YWhpX2xvZ193YXJuKCJFcnJvciBwYXJzaW5nIEFkZHJlc3NSZXNvbHZlcjo6RnJlZSBtZXNzYWdlIik7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKworICAgICAgICBhdmFoaV9kYnVzX2FzeW5jX2FkZHJlc3NfcmVzb2x2ZXJfZnJlZShpKTsKKyAgICAgICAgcmV0dXJuIGF2YWhpX2RidXNfcmVzcG9uZF9vayhjLCBtKTsKKyAgICB9CisKKyAgICBhdmFoaV9sb2dfd2FybigiTWlzc2VkIG1lc3NhZ2UgJXM6OiVzKCkiLCBkYnVzX21lc3NhZ2VfZ2V0X2ludGVyZmFjZShtKSwgZGJ1c19tZXNzYWdlX2dldF9tZW1iZXIobSkpOworCitmYWlsOgorICAgIGlmIChkYnVzX2Vycm9yX2lzX3NldCgmZXJyb3IpKQorICAgICAgICBkYnVzX2Vycm9yX2ZyZWUoJmVycm9yKTsKKworICAgIHJldHVybiBEQlVTX0hBTkRMRVJfUkVTVUxUX05PVF9ZRVRfSEFORExFRDsKK30KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vZGJ1cy1hc3luYy1ob3N0LW5hbWUtcmVzb2x2ZXIuYyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vZGJ1cy1hc3luYy1ob3N0LW5hbWUtcmVzb2x2ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzJkMDYzCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9kYnVzLWFzeW5jLWhvc3QtbmFtZS1yZXNvbHZlci5jCkBAIC0wLDAgKzEsMTQwIEBACisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL21hbGxvYy5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9kYnVzLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2Vycm9yLmg+CisjaW5jbHVkZSA8YXZhaGktY29yZS9sb2cuaD4KKworI2luY2x1ZGUgImRidXMtdXRpbC5oIgorI2luY2x1ZGUgImRidXMtaW50ZXJuYWwuaCIKKwordm9pZCBhdmFoaV9kYnVzX2FzeW5jX2hvc3RfbmFtZV9yZXNvbHZlcl9mcmVlKEFzeW5jSG9zdE5hbWVSZXNvbHZlckluZm8gKmkpIHsKKyAgICBhc3NlcnQoaSk7CisKKyAgICBpZiAoaS0+aG9zdF9uYW1lX3Jlc29sdmVyKQorICAgICAgICBhdmFoaV9zX2hvc3RfbmFtZV9yZXNvbHZlcl9mcmVlKGktPmhvc3RfbmFtZV9yZXNvbHZlcik7CisKKyAgICBpZiAoaS0+cGF0aCkgeworICAgICAgICBkYnVzX2Nvbm5lY3Rpb25fdW5yZWdpc3Rlcl9vYmplY3RfcGF0aChzZXJ2ZXItPmJ1cywgaS0+cGF0aCk7CisgICAgICAgIGF2YWhpX2ZyZWUoaS0+cGF0aCk7CisgICAgfQorICAgIEFWQUhJX0xMSVNUX1JFTU9WRShBc3luY0hvc3ROYW1lUmVzb2x2ZXJJbmZvLCBhc3luY19ob3N0X25hbWVfcmVzb2x2ZXJzLCBpLT5jbGllbnQtPmFzeW5jX2hvc3RfbmFtZV9yZXNvbHZlcnMsIGkpOworCisgICAgYXNzZXJ0KGktPmNsaWVudC0+bl9vYmplY3RzID49IDEpOworICAgIGktPmNsaWVudC0+bl9vYmplY3RzLS07CisKKyAgICBhdmFoaV9mcmVlKGkpOworfQorCit2b2lkIGF2YWhpX2RidXNfYXN5bmNfaG9zdF9uYW1lX3Jlc29sdmVyX2NhbGxiYWNrKEF2YWhpU0hvc3ROYW1lUmVzb2x2ZXIgKnIsIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsIEF2YWhpUmVzb2x2ZXJFdmVudCBldmVudCwgY29uc3QgY2hhciAqaG9zdF9uYW1lLCBjb25zdCBBdmFoaUFkZHJlc3MgKmEsIEF2YWhpTG9va3VwUmVzdWx0RmxhZ3MgZmxhZ3MsIHZvaWQqIHVzZXJkYXRhKSB7CisgICAgQXN5bmNIb3N0TmFtZVJlc29sdmVySW5mbyAqaSA9IHVzZXJkYXRhOworICAgIERCdXNNZXNzYWdlICpyZXBseTsKKworICAgIGFzc2VydChyKTsKKyAgICBhc3NlcnQoaSk7CisKKyAgICByZXBseSA9IGRidXNfbWVzc2FnZV9uZXdfc2lnbmFsKGktPnBhdGgsIEFWQUhJX0RCVVNfSU5URVJGQUNFX0hPU1RfTkFNRV9SRVNPTFZFUiwgYXZhaGlfZGJ1c19tYXBfcmVzb2x2ZV9zaWduYWxfbmFtZShldmVudCkpOworCisgICAgaWYgKCFyZXBseSkgeworICAgICAgICBhdmFoaV9sb2dfZXJyb3IoIkZhaWxlZCBhbGxvY2F0ZSBtZXNzYWdlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZXZlbnQgPT0gQVZBSElfUkVTT0xWRVJfRk9VTkQpIHsKKyAgICAgICAgY2hhciB0W0FWQUhJX0FERFJFU1NfU1RSX01BWF0sICpwdCA9IHQ7CisgICAgICAgIGludDMyX3QgaV9pbnRlcmZhY2UsIGlfcHJvdG9jb2wsIGlfYXByb3RvY29sOworICAgICAgICB1aW50MzJfdCB1X2ZsYWdzOworCisgICAgICAgIGFzc2VydChhKTsKKyAgICAgICAgYXNzZXJ0KGhvc3RfbmFtZSk7CisgICAgICAgIGF2YWhpX2FkZHJlc3Nfc25wcmludCh0LCBzaXplb2YodCksIGEpOworCisgICAgICAgIGlfaW50ZXJmYWNlID0gKGludDMyX3QpIGludGVyZmFjZTsKKyAgICAgICAgaV9wcm90b2NvbCA9IChpbnQzMl90KSBwcm90b2NvbDsKKyAgICAgICAgaV9hcHJvdG9jb2wgPSAoaW50MzJfdCkgYS0+cHJvdG87CisgICAgICAgIHVfZmxhZ3MgPSAodWludDMyX3QpIGZsYWdzOworCisgICAgICAgIGRidXNfbWVzc2FnZV9hcHBlbmRfYXJncygKKyAgICAgICAgICAgIHJlcGx5LAorICAgICAgICAgICAgREJVU19UWVBFX0lOVDMyLCAmaV9pbnRlcmZhY2UsCisgICAgICAgICAgICBEQlVTX1RZUEVfSU5UMzIsICZpX3Byb3RvY29sLAorICAgICAgICAgICAgREJVU19UWVBFX1NUUklORywgJmhvc3RfbmFtZSwKKyAgICAgICAgICAgIERCVVNfVFlQRV9JTlQzMiwgJmlfYXByb3RvY29sLAorICAgICAgICAgICAgREJVU19UWVBFX1NUUklORywgJnB0LAorICAgICAgICAgICAgREJVU19UWVBFX1VJTlQzMiwgJnVfZmxhZ3MsCisgICAgICAgICAgICBEQlVTX1RZUEVfSU5WQUxJRCk7CisgICAgfSAgZWxzZSB7CisgICAgICAgIGFzc2VydChldmVudCA9PSBBVkFISV9SRVNPTFZFUl9GQUlMVVJFKTsKKyAgICAgICAgYXZhaGlfZGJ1c19hcHBlbmRfc2VydmVyX2Vycm9yKHJlcGx5KTsKKyAgICB9CisKKyAgICBkYnVzX21lc3NhZ2Vfc2V0X2Rlc3RpbmF0aW9uKHJlcGx5LCBpLT5jbGllbnQtPm5hbWUpOworICAgIGRidXNfY29ubmVjdGlvbl9zZW5kKHNlcnZlci0+YnVzLCByZXBseSwgTlVMTCk7CisgICAgZGJ1c19tZXNzYWdlX3VucmVmKHJlcGx5KTsKK30KKworREJ1c0hhbmRsZXJSZXN1bHQgYXZhaGlfZGJ1c19tc2dfYXN5bmNfaG9zdF9uYW1lX3Jlc29sdmVyX2ltcGwoREJ1c0Nvbm5lY3Rpb24gKmMsIERCdXNNZXNzYWdlICptLCB2b2lkICp1c2VyZGF0YSkgeworICAgIERCdXNFcnJvciBlcnJvcjsKKyAgICBBc3luY0hvc3ROYW1lUmVzb2x2ZXJJbmZvICppID0gdXNlcmRhdGE7CisKKyAgICBhc3NlcnQoYyk7CisgICAgYXNzZXJ0KG0pOworICAgIGFzc2VydChpKTsKKworICAgIGRidXNfZXJyb3JfaW5pdCgmZXJyb3IpOworCisgICAgYXZhaGlfbG9nX2RlYnVnKF9fRklMRV9fIjogaW50ZXJmYWNlPSVzLCBwYXRoPSVzLCBtZW1iZXI9JXMiLAorICAgICAgICAgICAgICAgICAgICBkYnVzX21lc3NhZ2VfZ2V0X2ludGVyZmFjZShtKSwKKyAgICAgICAgICAgICAgICAgICAgZGJ1c19tZXNzYWdlX2dldF9wYXRoKG0pLAorICAgICAgICAgICAgICAgICAgICBkYnVzX21lc3NhZ2VfZ2V0X21lbWJlcihtKSk7CisKKyAgICAvKiBJbnRyb3NwZWN0aW9uICovCisgICAgaWYgKGRidXNfbWVzc2FnZV9pc19tZXRob2RfY2FsbChtLCBEQlVTX0lOVEVSRkFDRV9JTlRST1NQRUNUQUJMRSwgIkludHJvc3BlY3QiKSkKKyAgICAgICAgcmV0dXJuIGF2YWhpX2RidXNfaGFuZGxlX2ludHJvc3BlY3QoYywgbSwgIm9yZy5mcmVlZGVza3RvcC5BdmFoaS5Ib3N0TmFtZVJlc29sdmVyLnhtbCIpOworCisgICAgLyogQWNjZXNzIGNvbnRyb2wgKi8KKyAgICBpZiAoc3RyY21wKGRidXNfbWVzc2FnZV9nZXRfc2VuZGVyKG0pLCBpLT5jbGllbnQtPm5hbWUpKQorICAgICAgICByZXR1cm4gYXZhaGlfZGJ1c19yZXNwb25kX2Vycm9yKGMsIG0sIEFWQUhJX0VSUl9BQ0NFU1NfREVOSUVELCBOVUxMKTsKKworICAgIGlmIChkYnVzX21lc3NhZ2VfaXNfbWV0aG9kX2NhbGwobSwgQVZBSElfREJVU19JTlRFUkZBQ0VfSE9TVF9OQU1FX1JFU09MVkVSLCAiRnJlZSIpKSB7CisKKyAgICAgICAgaWYgKCFkYnVzX21lc3NhZ2VfZ2V0X2FyZ3MobSwgJmVycm9yLCBEQlVTX1RZUEVfSU5WQUxJRCkpIHsKKyAgICAgICAgICAgIGF2YWhpX2xvZ193YXJuKCJFcnJvciBwYXJzaW5nIEhvc3ROYW1lUmVzb2x2ZXI6OkZyZWUgbWVzc2FnZSIpOworICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CisKKyAgICAgICAgYXZhaGlfZGJ1c19hc3luY19ob3N0X25hbWVfcmVzb2x2ZXJfZnJlZShpKTsKKyAgICAgICAgcmV0dXJuIGF2YWhpX2RidXNfcmVzcG9uZF9vayhjLCBtKTsKKyAgICB9CisKKyAgICBhdmFoaV9sb2dfd2FybigiTWlzc2VkIG1lc3NhZ2UgJXM6OiVzKCkiLCBkYnVzX21lc3NhZ2VfZ2V0X2ludGVyZmFjZShtKSwgZGJ1c19tZXNzYWdlX2dldF9tZW1iZXIobSkpOworCitmYWlsOgorICAgIGlmIChkYnVzX2Vycm9yX2lzX3NldCgmZXJyb3IpKQorICAgICAgICBkYnVzX2Vycm9yX2ZyZWUoJmVycm9yKTsKKworICAgIHJldHVybiBEQlVTX0hBTkRMRVJfUkVTVUxUX05PVF9ZRVRfSEFORExFRDsKK30KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vZGJ1cy1hc3luYy1zZXJ2aWNlLXJlc29sdmVyLmMgYi9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL2RidXMtYXN5bmMtc2VydmljZS1yZXNvbHZlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNThlMmQKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL2RidXMtYXN5bmMtc2VydmljZS1yZXNvbHZlci5jCkBAIC0wLDAgKzEsMTc5IEBACisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL21hbGxvYy5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9kYnVzLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2Vycm9yLmg+CisjaW5jbHVkZSA8YXZhaGktY29yZS9sb2cuaD4KKworI2luY2x1ZGUgImRidXMtdXRpbC5oIgorI2luY2x1ZGUgImRidXMtaW50ZXJuYWwuaCIKKwordm9pZCBhdmFoaV9kYnVzX2FzeW5jX3NlcnZpY2VfcmVzb2x2ZXJfZnJlZShBc3luY1NlcnZpY2VSZXNvbHZlckluZm8gKmkpIHsKKyAgICBhc3NlcnQoaSk7CisKKyAgICBpZiAoaS0+c2VydmljZV9yZXNvbHZlcikKKyAgICAgICAgYXZhaGlfc19zZXJ2aWNlX3Jlc29sdmVyX2ZyZWUoaS0+c2VydmljZV9yZXNvbHZlcik7CisKKyAgICBpZiAoaS0+cGF0aCkgeworICAgICAgICBkYnVzX2Nvbm5lY3Rpb25fdW5yZWdpc3Rlcl9vYmplY3RfcGF0aChzZXJ2ZXItPmJ1cywgaS0+cGF0aCk7CisgICAgICAgIGF2YWhpX2ZyZWUoaS0+cGF0aCk7CisgICAgfQorCisgICAgQVZBSElfTExJU1RfUkVNT1ZFKEFzeW5jU2VydmljZVJlc29sdmVySW5mbywgYXN5bmNfc2VydmljZV9yZXNvbHZlcnMsIGktPmNsaWVudC0+YXN5bmNfc2VydmljZV9yZXNvbHZlcnMsIGkpOworCisgICAgYXNzZXJ0KGktPmNsaWVudC0+bl9vYmplY3RzID49IDEpOworICAgIGktPmNsaWVudC0+bl9vYmplY3RzLS07CisKKyAgICBhdmFoaV9mcmVlKGkpOworfQorCit2b2lkIGF2YWhpX2RidXNfYXN5bmNfc2VydmljZV9yZXNvbHZlcl9jYWxsYmFjaygKKyAgICBBdmFoaVNTZXJ2aWNlUmVzb2x2ZXIgKnIsCisgICAgQXZhaGlJZkluZGV4IGludGVyZmFjZSwKKyAgICBBdmFoaVByb3RvY29sIHByb3RvY29sLAorICAgIEF2YWhpUmVzb2x2ZXJFdmVudCBldmVudCwKKyAgICBjb25zdCBjaGFyICpuYW1lLAorICAgIGNvbnN0IGNoYXIgKnR5cGUsCisgICAgY29uc3QgY2hhciAqZG9tYWluLAorICAgIGNvbnN0IGNoYXIgKmhvc3RfbmFtZSwKKyAgICBjb25zdCBBdmFoaUFkZHJlc3MgKmEsCisgICAgdWludDE2X3QgcG9ydCwKKyAgICBBdmFoaVN0cmluZ0xpc3QgKnR4dCwKKyAgICBBdmFoaUxvb2t1cFJlc3VsdEZsYWdzIGZsYWdzLAorICAgIHZvaWQqIHVzZXJkYXRhKSB7CisKKyAgICBBc3luY1NlcnZpY2VSZXNvbHZlckluZm8gKmkgPSB1c2VyZGF0YTsKKyAgICBEQnVzTWVzc2FnZSAqcmVwbHk7CisKKyAgICBhc3NlcnQocik7CisgICAgYXNzZXJ0KGkpOworCisgICAgcmVwbHkgPSBkYnVzX21lc3NhZ2VfbmV3X3NpZ25hbChpLT5wYXRoLCBBVkFISV9EQlVTX0lOVEVSRkFDRV9TRVJWSUNFX1JFU09MVkVSLCBhdmFoaV9kYnVzX21hcF9yZXNvbHZlX3NpZ25hbF9uYW1lKGV2ZW50KSk7CisKKyAgICBpZiAoIXJlcGx5KSB7CisgICAgICAgIGF2YWhpX2xvZ19lcnJvcigiRmFpbGVkIGFsbG9jYXRlIG1lc3NhZ2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChldmVudCA9PSBBVkFISV9SRVNPTFZFUl9GT1VORCkgeworICAgICAgICBjaGFyIHRbQVZBSElfQUREUkVTU19TVFJfTUFYXSwgKnB0ID0gdDsKKyAgICAgICAgaW50MzJfdCBpX2ludGVyZmFjZSwgaV9wcm90b2NvbCwgaV9hcHJvdG9jb2w7CisgICAgICAgIHVpbnQzMl90IHVfZmxhZ3M7CisKKyAgICAgICAgYXNzZXJ0KGhvc3RfbmFtZSk7CisKKy8qICAgICAgICAgYXZhaGlfbG9nX2RlYnVnKF9fRklMRV9fIjogWyVzXSBTdWNjZXNzZnVsbHkgcmVzb2x2ZWQgc2VydmljZSA8JXMuJXMuJXM+IiwgaS0+cGF0aCwgbmFtZSwgdHlwZSwgZG9tYWluKTsgKi8KKworICAgICAgICBpZiAoYSkKKyAgICAgICAgICAgIGF2YWhpX2FkZHJlc3Nfc25wcmludCh0LCBzaXplb2YodCksIGEpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0WzBdID0gMDsKKworICAgICAgICBpZiAoIW5hbWUpCisgICAgICAgICAgICBuYW1lID0gIiI7CisKKyAgICAgICAgaWYgKGF2YWhpX2RidXNfaXNfb3VyX293bl9zZXJ2aWNlKGktPmNsaWVudCwgaW50ZXJmYWNlLCBwcm90b2NvbCwgbmFtZSwgdHlwZSwgZG9tYWluKSA+IDApCisgICAgICAgICAgICBmbGFncyB8PSBBVkFISV9MT09LVVBfUkVTVUxUX09VUl9PV047CisKKyAgICAgICAgaV9pbnRlcmZhY2UgPSAoaW50MzJfdCkgaW50ZXJmYWNlOworICAgICAgICBpX3Byb3RvY29sID0gKGludDMyX3QpIHByb3RvY29sOworICAgICAgICBpZiAoYSkKKwkgICAgaV9hcHJvdG9jb2wgPSAoaW50MzJfdCkgYS0+cHJvdG87CisJZWxzZQorCSAgICBpX2Fwcm90b2NvbCA9IEFWQUhJX1BST1RPX1VOU1BFQzsKKyAgICAgICAgdV9mbGFncyA9ICh1aW50MzJfdCkgZmxhZ3M7CisKKyAgICAgICAgZGJ1c19tZXNzYWdlX2FwcGVuZF9hcmdzKAorICAgICAgICAgICAgcmVwbHksCisgICAgICAgICAgICBEQlVTX1RZUEVfSU5UMzIsICZpX2ludGVyZmFjZSwKKyAgICAgICAgICAgIERCVVNfVFlQRV9JTlQzMiwgJmlfcHJvdG9jb2wsCisgICAgICAgICAgICBEQlVTX1RZUEVfU1RSSU5HLCAmbmFtZSwKKyAgICAgICAgICAgIERCVVNfVFlQRV9TVFJJTkcsICZ0eXBlLAorICAgICAgICAgICAgREJVU19UWVBFX1NUUklORywgJmRvbWFpbiwKKyAgICAgICAgICAgIERCVVNfVFlQRV9TVFJJTkcsICZob3N0X25hbWUsCisgICAgICAgICAgICBEQlVTX1RZUEVfSU5UMzIsICZpX2Fwcm90b2NvbCwKKyAgICAgICAgICAgIERCVVNfVFlQRV9TVFJJTkcsICZwdCwKKyAgICAgICAgICAgIERCVVNfVFlQRV9VSU5UMTYsICZwb3J0LAorICAgICAgICAgICAgREJVU19UWVBFX0lOVkFMSUQpOworCisgICAgICAgIGF2YWhpX2RidXNfYXBwZW5kX3N0cmluZ19saXN0KHJlcGx5LCB0eHQpOworCisgICAgICAgIGRidXNfbWVzc2FnZV9hcHBlbmRfYXJncygKKyAgICAgICAgICAgIHJlcGx5LAorICAgICAgICAgICAgREJVU19UWVBFX1VJTlQzMiwgJnVfZmxhZ3MsCisgICAgICAgICAgICBEQlVTX1RZUEVfSU5WQUxJRCk7CisgICAgfSAgZWxzZSB7CisgICAgICAgIGFzc2VydChldmVudCA9PSBBVkFISV9SRVNPTFZFUl9GQUlMVVJFKTsKKyAgICAgICAgYXZhaGlfZGJ1c19hcHBlbmRfc2VydmVyX2Vycm9yKHJlcGx5KTsKKyAgICB9CisKKyAgICBkYnVzX21lc3NhZ2Vfc2V0X2Rlc3RpbmF0aW9uKHJlcGx5LCBpLT5jbGllbnQtPm5hbWUpOworICAgIGRidXNfY29ubmVjdGlvbl9zZW5kKHNlcnZlci0+YnVzLCByZXBseSwgTlVMTCk7CisgICAgZGJ1c19tZXNzYWdlX3VucmVmKHJlcGx5KTsKK30KKworREJ1c0hhbmRsZXJSZXN1bHQgYXZhaGlfZGJ1c19tc2dfYXN5bmNfc2VydmljZV9yZXNvbHZlcl9pbXBsKERCdXNDb25uZWN0aW9uICpjLCBEQnVzTWVzc2FnZSAqbSwgdm9pZCAqdXNlcmRhdGEpIHsKKyAgICBEQnVzRXJyb3IgZXJyb3I7CisgICAgQXN5bmNTZXJ2aWNlUmVzb2x2ZXJJbmZvICppID0gdXNlcmRhdGE7CisKKyAgICBhc3NlcnQoYyk7CisgICAgYXNzZXJ0KG0pOworICAgIGFzc2VydChpKTsKKworICAgIGRidXNfZXJyb3JfaW5pdCgmZXJyb3IpOworCisgICAgYXZhaGlfbG9nX2RlYnVnKF9fRklMRV9fIjogaW50ZXJmYWNlPSVzLCBwYXRoPSVzLCBtZW1iZXI9JXMiLAorICAgICAgICAgICAgICAgICAgICBkYnVzX21lc3NhZ2VfZ2V0X2ludGVyZmFjZShtKSwKKyAgICAgICAgICAgICAgICAgICAgZGJ1c19tZXNzYWdlX2dldF9wYXRoKG0pLAorICAgICAgICAgICAgICAgICAgICBkYnVzX21lc3NhZ2VfZ2V0X21lbWJlcihtKSk7CisKKyAgICAvKiBJbnRyb3NwZWN0aW9uICovCisgICAgaWYgKGRidXNfbWVzc2FnZV9pc19tZXRob2RfY2FsbChtLCBEQlVTX0lOVEVSRkFDRV9JTlRST1NQRUNUQUJMRSwgIkludHJvc3BlY3QiKSkKKyAgICAgICAgcmV0dXJuIGF2YWhpX2RidXNfaGFuZGxlX2ludHJvc3BlY3QoYywgbSwgIm9yZy5mcmVlZGVza3RvcC5BdmFoaS5TZXJ2aWNlUmVzb2x2ZXIueG1sIik7CisKKyAgICAvKiBBY2Nlc3MgY29udHJvbCAqLworICAgIGlmIChzdHJjbXAoZGJ1c19tZXNzYWdlX2dldF9zZW5kZXIobSksIGktPmNsaWVudC0+bmFtZSkpCisgICAgICAgIHJldHVybiBhdmFoaV9kYnVzX3Jlc3BvbmRfZXJyb3IoYywgbSwgQVZBSElfRVJSX0FDQ0VTU19ERU5JRUQsIE5VTEwpOworCisgICAgaWYgKGRidXNfbWVzc2FnZV9pc19tZXRob2RfY2FsbChtLCBBVkFISV9EQlVTX0lOVEVSRkFDRV9TRVJWSUNFX1JFU09MVkVSLCAiRnJlZSIpKSB7CisKKyAgICAgICAgaWYgKCFkYnVzX21lc3NhZ2VfZ2V0X2FyZ3MobSwgJmVycm9yLCBEQlVTX1RZUEVfSU5WQUxJRCkpIHsKKyAgICAgICAgICAgIGF2YWhpX2xvZ193YXJuKCJFcnJvciBwYXJzaW5nIFNlcnZpY2VSZXNvbHZlcjo6RnJlZSBtZXNzYWdlIik7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKworICAgICAgICBhdmFoaV9kYnVzX2FzeW5jX3NlcnZpY2VfcmVzb2x2ZXJfZnJlZShpKTsKKyAgICAgICAgcmV0dXJuIGF2YWhpX2RidXNfcmVzcG9uZF9vayhjLCBtKTsKKyAgICB9CisKKyAgICBhdmFoaV9sb2dfd2FybigiTWlzc2VkIG1lc3NhZ2UgJXM6OiVzKCkiLCBkYnVzX21lc3NhZ2VfZ2V0X2ludGVyZmFjZShtKSwgZGJ1c19tZXNzYWdlX2dldF9tZW1iZXIobSkpOworCitmYWlsOgorICAgIGlmIChkYnVzX2Vycm9yX2lzX3NldCgmZXJyb3IpKQorICAgICAgICBkYnVzX2Vycm9yX2ZyZWUoJmVycm9yKTsKKworICAgIHJldHVybiBEQlVTX0hBTkRMRVJfUkVTVUxUX05PVF9ZRVRfSEFORExFRDsKK30KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vZGJ1cy1kb21haW4tYnJvd3Nlci5jIGIvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9kYnVzLWRvbWFpbi1icm93c2VyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUxOTk2ZgotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vZGJ1cy1kb21haW4tYnJvd3Nlci5jCkBAIC0wLDAgKzEsMTMyIEBACisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL21hbGxvYy5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9kYnVzLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2Vycm9yLmg+CisjaW5jbHVkZSA8YXZhaGktY29yZS9sb2cuaD4KKworI2luY2x1ZGUgImRidXMtdXRpbC5oIgorI2luY2x1ZGUgImRidXMtaW50ZXJuYWwuaCIKKwordm9pZCBhdmFoaV9kYnVzX2RvbWFpbl9icm93c2VyX2ZyZWUoRG9tYWluQnJvd3NlckluZm8gKmkpIHsKKyAgICBhc3NlcnQoaSk7CisKKyAgICBpZiAoaS0+ZG9tYWluX2Jyb3dzZXIpCisgICAgICAgIGF2YWhpX3NfZG9tYWluX2Jyb3dzZXJfZnJlZShpLT5kb21haW5fYnJvd3Nlcik7CisKKyAgICBpZiAoaS0+cGF0aCkgeworICAgICAgICBkYnVzX2Nvbm5lY3Rpb25fdW5yZWdpc3Rlcl9vYmplY3RfcGF0aChzZXJ2ZXItPmJ1cywgaS0+cGF0aCk7CisgICAgICAgIGF2YWhpX2ZyZWUoaS0+cGF0aCk7CisgICAgfQorCisgICAgQVZBSElfTExJU1RfUkVNT1ZFKERvbWFpbkJyb3dzZXJJbmZvLCBkb21haW5fYnJvd3NlcnMsIGktPmNsaWVudC0+ZG9tYWluX2Jyb3dzZXJzLCBpKTsKKworICAgIGFzc2VydChpLT5jbGllbnQtPm5fb2JqZWN0cyA+PSAxKTsKKyAgICBpLT5jbGllbnQtPm5fb2JqZWN0cy0tOworCisgICAgYXZhaGlfZnJlZShpKTsKK30KKworREJ1c0hhbmRsZXJSZXN1bHQgYXZhaGlfZGJ1c19tc2dfZG9tYWluX2Jyb3dzZXJfaW1wbChEQnVzQ29ubmVjdGlvbiAqYywgREJ1c01lc3NhZ2UgKm0sIHZvaWQgKnVzZXJkYXRhKSB7CisgICAgREJ1c0Vycm9yIGVycm9yOworICAgIERvbWFpbkJyb3dzZXJJbmZvICppID0gdXNlcmRhdGE7CisKKyAgICBhc3NlcnQoYyk7CisgICAgYXNzZXJ0KG0pOworICAgIGFzc2VydChpKTsKKworICAgIGRidXNfZXJyb3JfaW5pdCgmZXJyb3IpOworCisgICAgYXZhaGlfbG9nX2RlYnVnKF9fRklMRV9fIjogaW50ZXJmYWNlPSVzLCBwYXRoPSVzLCBtZW1iZXI9JXMiLAorICAgICAgICAgICAgICAgICAgICBkYnVzX21lc3NhZ2VfZ2V0X2ludGVyZmFjZShtKSwKKyAgICAgICAgICAgICAgICAgICAgZGJ1c19tZXNzYWdlX2dldF9wYXRoKG0pLAorICAgICAgICAgICAgICAgICAgICBkYnVzX21lc3NhZ2VfZ2V0X21lbWJlcihtKSk7CisKKyAgICAvKiBJbnRyb3NwZWN0aW9uICovCisgICAgaWYgKGRidXNfbWVzc2FnZV9pc19tZXRob2RfY2FsbChtLCBEQlVTX0lOVEVSRkFDRV9JTlRST1NQRUNUQUJMRSwgIkludHJvc3BlY3QiKSkKKyAgICAgICAgcmV0dXJuIGF2YWhpX2RidXNfaGFuZGxlX2ludHJvc3BlY3QoYywgbSwgIm9yZy5mcmVlZGVza3RvcC5BdmFoaS5Eb21haW5Ccm93c2VyLnhtbCIpOworCisgICAgLyogQWNjZXNzIGNvbnRyb2wgKi8KKyAgICBpZiAoc3RyY21wKGRidXNfbWVzc2FnZV9nZXRfc2VuZGVyKG0pLCBpLT5jbGllbnQtPm5hbWUpKQorICAgICAgICByZXR1cm4gYXZhaGlfZGJ1c19yZXNwb25kX2Vycm9yKGMsIG0sIEFWQUhJX0VSUl9BQ0NFU1NfREVOSUVELCBOVUxMKTsKKworICAgIGlmIChkYnVzX21lc3NhZ2VfaXNfbWV0aG9kX2NhbGwobSwgQVZBSElfREJVU19JTlRFUkZBQ0VfRE9NQUlOX0JST1dTRVIsICJGcmVlIikpIHsKKworICAgICAgICBpZiAoIWRidXNfbWVzc2FnZV9nZXRfYXJncyhtLCAmZXJyb3IsIERCVVNfVFlQRV9JTlZBTElEKSkgeworICAgICAgICAgICAgYXZhaGlfbG9nX3dhcm4oIkVycm9yIHBhcnNpbmcgRG9tYWluQnJvd3Nlcjo6RnJlZSBtZXNzYWdlIik7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKworICAgICAgICBhdmFoaV9kYnVzX2RvbWFpbl9icm93c2VyX2ZyZWUoaSk7CisgICAgICAgIHJldHVybiBhdmFoaV9kYnVzX3Jlc3BvbmRfb2soYywgbSk7CisKKyAgICB9CisKKyAgICBhdmFoaV9sb2dfd2FybigiTWlzc2VkIG1lc3NhZ2UgJXM6OiVzKCkiLCBkYnVzX21lc3NhZ2VfZ2V0X2ludGVyZmFjZShtKSwgZGJ1c19tZXNzYWdlX2dldF9tZW1iZXIobSkpOworCitmYWlsOgorICAgIGlmIChkYnVzX2Vycm9yX2lzX3NldCgmZXJyb3IpKQorICAgICAgICBkYnVzX2Vycm9yX2ZyZWUoJmVycm9yKTsKKworICAgIHJldHVybiBEQlVTX0hBTkRMRVJfUkVTVUxUX05PVF9ZRVRfSEFORExFRDsKK30KKwordm9pZCBhdmFoaV9kYnVzX2RvbWFpbl9icm93c2VyX2NhbGxiYWNrKEF2YWhpU0RvbWFpbkJyb3dzZXIgKmIsIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsIEF2YWhpQnJvd3NlckV2ZW50IGV2ZW50LCBjb25zdCBjaGFyICpkb21haW4sIEF2YWhpTG9va3VwUmVzdWx0RmxhZ3MgZmxhZ3MsICB2b2lkKiB1c2VyZGF0YSkgeworICAgIERvbWFpbkJyb3dzZXJJbmZvICppID0gdXNlcmRhdGE7CisgICAgREJ1c01lc3NhZ2UgKm07CisgICAgaW50MzJfdCBpX2ludGVyZmFjZSwgaV9wcm90b2NvbDsKKyAgICB1aW50MzJfdCB1X2ZsYWdzOworCisgICAgYXNzZXJ0KGIpOworICAgIGFzc2VydChpKTsKKworICAgIGlfaW50ZXJmYWNlID0gKGludDMyX3QpIGludGVyZmFjZTsKKyAgICBpX3Byb3RvY29sID0gKGludDMyX3QpIHByb3RvY29sOworICAgIHVfZmxhZ3MgPSAodWludDMyX3QpIGZsYWdzOworCisgICAgbSA9IGRidXNfbWVzc2FnZV9uZXdfc2lnbmFsKGktPnBhdGgsIEFWQUhJX0RCVVNfSU5URVJGQUNFX0RPTUFJTl9CUk9XU0VSLCBhdmFoaV9kYnVzX21hcF9icm93c2Vfc2lnbmFsX25hbWUoZXZlbnQpKTsKKworICAgIGlmICghbSkgeworICAgICAgICBhdmFoaV9sb2dfZXJyb3IoIkZhaWxlZCBhbGxvY2F0ZSBtZXNzYWdlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZXZlbnQgPT0gQVZBSElfQlJPV1NFUl9ORVcgfHwgZXZlbnQgPT0gQVZBSElfQlJPV1NFUl9SRU1PVkUpIHsKKyAgICAgICAgYXNzZXJ0KGRvbWFpbik7CisgICAgICAgIGRidXNfbWVzc2FnZV9hcHBlbmRfYXJncygKKyAgICAgICAgICAgIG0sCisgICAgICAgICAgICBEQlVTX1RZUEVfSU5UMzIsICZpX2ludGVyZmFjZSwKKyAgICAgICAgICAgIERCVVNfVFlQRV9JTlQzMiwgJmlfcHJvdG9jb2wsCisgICAgICAgICAgICBEQlVTX1RZUEVfU1RSSU5HLCAmZG9tYWluLAorICAgICAgICAgICAgREJVU19UWVBFX1VJTlQzMiwgJnVfZmxhZ3MsCisgICAgICAgICAgICBEQlVTX1RZUEVfSU5WQUxJRCk7CisgICAgfSBlbHNlIGlmIChldmVudCA9PSBBVkFISV9CUk9XU0VSX0ZBSUxVUkUpCisgICAgICAgIGF2YWhpX2RidXNfYXBwZW5kX3NlcnZlcl9lcnJvcihtKTsKKworICAgIGRidXNfbWVzc2FnZV9zZXRfZGVzdGluYXRpb24obSwgaS0+Y2xpZW50LT5uYW1lKTsKKyAgICBkYnVzX2Nvbm5lY3Rpb25fc2VuZChzZXJ2ZXItPmJ1cywgbSwgTlVMTCk7CisgICAgZGJ1c19tZXNzYWdlX3VucmVmKG0pOworfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9kYnVzLWVudHJ5LWdyb3VwLmMgYi9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL2RidXMtZW50cnktZ3JvdXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTg3OWE1Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9kYnVzLWVudHJ5LWdyb3VwLmMKQEAgLTAsMCArMSwzNjkgQEAKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vbWFsbG9jLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2RidXMuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vZXJyb3IuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vZG9tYWluLmg+CisjaW5jbHVkZSA8YXZhaGktY29yZS9sb2cuaD4KKworI2luY2x1ZGUgImRidXMtdXRpbC5oIgorI2luY2x1ZGUgImRidXMtaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJtYWluLmgiCisKK3ZvaWQgYXZhaGlfZGJ1c19lbnRyeV9ncm91cF9mcmVlKEVudHJ5R3JvdXBJbmZvICppKSB7CisgICAgYXNzZXJ0KGkpOworCisgICAgaWYgKGktPmVudHJ5X2dyb3VwKQorICAgICAgICBhdmFoaV9zX2VudHJ5X2dyb3VwX2ZyZWUoaS0+ZW50cnlfZ3JvdXApOworCisgICAgaWYgKGktPnBhdGgpIHsKKyAgICAgICAgZGJ1c19jb25uZWN0aW9uX3VucmVnaXN0ZXJfb2JqZWN0X3BhdGgoc2VydmVyLT5idXMsIGktPnBhdGgpOworICAgICAgICBhdmFoaV9mcmVlKGktPnBhdGgpOworICAgIH0KKyAgICBBVkFISV9MTElTVF9SRU1PVkUoRW50cnlHcm91cEluZm8sIGVudHJ5X2dyb3VwcywgaS0+Y2xpZW50LT5lbnRyeV9ncm91cHMsIGkpOworCisgICAgYXNzZXJ0KGktPmNsaWVudC0+bl9vYmplY3RzID49IDEpOworICAgIGktPmNsaWVudC0+bl9vYmplY3RzLS07CisKKyAgICBhdmFoaV9mcmVlKGkpOworfQorCit2b2lkIGF2YWhpX2RidXNfZW50cnlfZ3JvdXBfY2FsbGJhY2soQXZhaGlTZXJ2ZXIgKnMsIEF2YWhpU0VudHJ5R3JvdXAgKmcsIEF2YWhpRW50cnlHcm91cFN0YXRlIHN0YXRlLCB2b2lkKiB1c2VyZGF0YSkgeworICAgIEVudHJ5R3JvdXBJbmZvICppID0gdXNlcmRhdGE7CisgICAgREJ1c01lc3NhZ2UgKm07CisgICAgaW50MzJfdCB0OworICAgIGNvbnN0IGNoYXIgKmU7CisKKyAgICBhc3NlcnQocyk7CisgICAgYXNzZXJ0KGcpOworICAgIGFzc2VydChpKTsKKworICAgIG0gPSBkYnVzX21lc3NhZ2VfbmV3X3NpZ25hbChpLT5wYXRoLCBBVkFISV9EQlVTX0lOVEVSRkFDRV9FTlRSWV9HUk9VUCwgIlN0YXRlQ2hhbmdlZCIpOworCisgICAgaWYgKCFtKSB7CisgICAgICAgIGF2YWhpX2xvZ19lcnJvcigiRmFpbGVkIGFsbG9jYXRlIG1lc3NhZ2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHQgPSAoaW50MzJfdCkgc3RhdGU7CisgICAgaWYgKHN0YXRlID09IEFWQUhJX0VOVFJZX0dST1VQX0ZBSUxVUkUpCisgICAgICAgIGUgPSBhdmFoaV9lcnJvcl9udW1iZXJfdG9fZGJ1cyhhdmFoaV9zZXJ2ZXJfZXJybm8ocykpOworICAgIGVsc2UgaWYgKHN0YXRlID09IEFWQUhJX0VOVFJZX0dST1VQX0NPTExJU0lPTikKKyAgICAgICAgZSA9IEFWQUhJX0RCVVNfRVJSX0NPTExJU0lPTjsKKyAgICBlbHNlCisgICAgICAgIGUgPSBBVkFISV9EQlVTX0VSUl9PSzsKKworICAgIGRidXNfbWVzc2FnZV9hcHBlbmRfYXJncygKKyAgICAgICAgbSwKKyAgICAgICAgREJVU19UWVBFX0lOVDMyLCAmdCwKKyAgICAgICAgREJVU19UWVBFX1NUUklORywgJmUsCisgICAgICAgIERCVVNfVFlQRV9JTlZBTElEKTsKKyAgICBkYnVzX21lc3NhZ2Vfc2V0X2Rlc3RpbmF0aW9uKG0sIGktPmNsaWVudC0+bmFtZSk7CisgICAgZGJ1c19jb25uZWN0aW9uX3NlbmQoc2VydmVyLT5idXMsIG0sIE5VTEwpOworICAgIGRidXNfbWVzc2FnZV91bnJlZihtKTsKK30KKworREJ1c0hhbmRsZXJSZXN1bHQgYXZhaGlfZGJ1c19tc2dfZW50cnlfZ3JvdXBfaW1wbChEQnVzQ29ubmVjdGlvbiAqYywgREJ1c01lc3NhZ2UgKm0sIHZvaWQgKnVzZXJkYXRhKSB7CisgICAgREJ1c0Vycm9yIGVycm9yOworICAgIEVudHJ5R3JvdXBJbmZvICppID0gdXNlcmRhdGE7CisKKyAgICBhc3NlcnQoYyk7CisgICAgYXNzZXJ0KG0pOworICAgIGFzc2VydChpKTsKKworICAgIGRidXNfZXJyb3JfaW5pdCgmZXJyb3IpOworCisgICAgYXZhaGlfbG9nX2RlYnVnKF9fRklMRV9fIjogaW50ZXJmYWNlPSVzLCBwYXRoPSVzLCBtZW1iZXI9JXMiLAorICAgICAgICAgICAgICAgICAgICBkYnVzX21lc3NhZ2VfZ2V0X2ludGVyZmFjZShtKSwKKyAgICAgICAgICAgICAgICAgICAgZGJ1c19tZXNzYWdlX2dldF9wYXRoKG0pLAorICAgICAgICAgICAgICAgICAgICBkYnVzX21lc3NhZ2VfZ2V0X21lbWJlcihtKSk7CisKKyAgICAvKiBJbnRyb3NwZWN0aW9uICovCisgICAgaWYgKGRidXNfbWVzc2FnZV9pc19tZXRob2RfY2FsbChtLCBEQlVTX0lOVEVSRkFDRV9JTlRST1NQRUNUQUJMRSwgIkludHJvc3BlY3QiKSkKKyAgICAgICAgcmV0dXJuIGF2YWhpX2RidXNfaGFuZGxlX2ludHJvc3BlY3QoYywgbSwgIm9yZy5mcmVlZGVza3RvcC5BdmFoaS5FbnRyeUdyb3VwLnhtbCIpOworCisgICAgLyogQWNjZXNzIGNvbnRyb2wgKi8KKyAgICBpZiAoc3RyY21wKGRidXNfbWVzc2FnZV9nZXRfc2VuZGVyKG0pLCBpLT5jbGllbnQtPm5hbWUpKQorICAgICAgICByZXR1cm4gYXZhaGlfZGJ1c19yZXNwb25kX2Vycm9yKGMsIG0sIEFWQUhJX0VSUl9BQ0NFU1NfREVOSUVELCBOVUxMKTsKKworICAgIGlmIChkYnVzX21lc3NhZ2VfaXNfbWV0aG9kX2NhbGwobSwgQVZBSElfREJVU19JTlRFUkZBQ0VfRU5UUllfR1JPVVAsICJGcmVlIikpIHsKKworICAgICAgICBpZiAoIWRidXNfbWVzc2FnZV9nZXRfYXJncyhtLCAmZXJyb3IsIERCVVNfVFlQRV9JTlZBTElEKSkgeworICAgICAgICAgICAgYXZhaGlfbG9nX3dhcm4oIkVycm9yIHBhcnNpbmcgRW50cnlHcm91cDo6RnJlZSBtZXNzYWdlIik7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKworICAgICAgICBhdmFoaV9kYnVzX2VudHJ5X2dyb3VwX2ZyZWUoaSk7CisgICAgICAgIHJldHVybiBhdmFoaV9kYnVzX3Jlc3BvbmRfb2soYywgbSk7CisKKyAgICB9IGVsc2UgaWYgKGRidXNfbWVzc2FnZV9pc19tZXRob2RfY2FsbChtLCBBVkFISV9EQlVTX0lOVEVSRkFDRV9FTlRSWV9HUk9VUCwgIkNvbW1pdCIpKSB7CisKKyAgICAgICAgaWYgKCFkYnVzX21lc3NhZ2VfZ2V0X2FyZ3MobSwgJmVycm9yLCBEQlVTX1RZUEVfSU5WQUxJRCkpIHsKKyAgICAgICAgICAgIGF2YWhpX2xvZ193YXJuKCJFcnJvciBwYXJzaW5nIEVudHJ5R3JvdXA6OkNvbW1pdCBtZXNzYWdlIik7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYXZhaGlfc19lbnRyeV9ncm91cF9jb21taXQoaS0+ZW50cnlfZ3JvdXApIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBhdmFoaV9kYnVzX3Jlc3BvbmRfZXJyb3IoYywgbSwgYXZhaGlfc2VydmVyX2Vycm5vKGF2YWhpX3NlcnZlciksIE5VTEwpOworCisgICAgICAgIHJldHVybiBhdmFoaV9kYnVzX3Jlc3BvbmRfb2soYywgbSk7CisKKworICAgIH0gZWxzZSBpZiAoZGJ1c19tZXNzYWdlX2lzX21ldGhvZF9jYWxsKG0sIEFWQUhJX0RCVVNfSU5URVJGQUNFX0VOVFJZX0dST1VQLCAiUmVzZXQiKSkgeworCisgICAgICAgIGlmICghZGJ1c19tZXNzYWdlX2dldF9hcmdzKG0sICZlcnJvciwgREJVU19UWVBFX0lOVkFMSUQpKSB7CisgICAgICAgICAgICBhdmFoaV9sb2dfd2FybigiRXJyb3IgcGFyc2luZyBFbnRyeUdyb3VwOjpSZXNldCBtZXNzYWdlIik7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKworICAgICAgICBhdmFoaV9zX2VudHJ5X2dyb3VwX3Jlc2V0KGktPmVudHJ5X2dyb3VwKTsKKyAgICAgICAgaS0+bl9lbnRyaWVzID0gMDsKKyAgICAgICAgcmV0dXJuIGF2YWhpX2RidXNfcmVzcG9uZF9vayhjLCBtKTsKKworICAgIH0gZWxzZSBpZiAoZGJ1c19tZXNzYWdlX2lzX21ldGhvZF9jYWxsKG0sIEFWQUhJX0RCVVNfSU5URVJGQUNFX0VOVFJZX0dST1VQLCAiSXNFbXB0eSIpKSB7CisKKyAgICAgICAgaWYgKCFkYnVzX21lc3NhZ2VfZ2V0X2FyZ3MobSwgJmVycm9yLCBEQlVTX1RZUEVfSU5WQUxJRCkpIHsKKyAgICAgICAgICAgIGF2YWhpX2xvZ193YXJuKCJFcnJvciBwYXJzaW5nIEVudHJ5R3JvdXA6OklzRW1wdHkgbWVzc2FnZSIpOworICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGF2YWhpX2RidXNfcmVzcG9uZF9ib29sZWFuKGMsIG0sICEhYXZhaGlfc19lbnRyeV9ncm91cF9pc19lbXB0eShpLT5lbnRyeV9ncm91cCkpOworCisgICAgfSBlbHNlIGlmIChkYnVzX21lc3NhZ2VfaXNfbWV0aG9kX2NhbGwobSwgQVZBSElfREJVU19JTlRFUkZBQ0VfRU5UUllfR1JPVVAsICJHZXRTdGF0ZSIpKSB7CisgICAgICAgIEF2YWhpRW50cnlHcm91cFN0YXRlIHN0YXRlOworCisgICAgICAgIGlmICghZGJ1c19tZXNzYWdlX2dldF9hcmdzKG0sICZlcnJvciwgREJVU19UWVBFX0lOVkFMSUQpKSB7CisgICAgICAgICAgICBhdmFoaV9sb2dfd2FybigiRXJyb3IgcGFyc2luZyBFbnRyeUdyb3VwOjpHZXRTdGF0ZSBtZXNzYWdlIik7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKworICAgICAgICBzdGF0ZSA9IGF2YWhpX3NfZW50cnlfZ3JvdXBfZ2V0X3N0YXRlKGktPmVudHJ5X2dyb3VwKTsKKyAgICAgICAgcmV0dXJuIGF2YWhpX2RidXNfcmVzcG9uZF9pbnQzMihjLCBtLCAoaW50MzJfdCkgc3RhdGUpOworCisgICAgfSBlbHNlIGlmIChkYnVzX21lc3NhZ2VfaXNfbWV0aG9kX2NhbGwobSwgQVZBSElfREJVU19JTlRFUkZBQ0VfRU5UUllfR1JPVVAsICJBZGRTZXJ2aWNlIikpIHsKKyAgICAgICAgaW50MzJfdCBpbnRlcmZhY2UsIHByb3RvY29sOworICAgICAgICB1aW50MzJfdCBmbGFnczsKKyAgICAgICAgY2hhciAqdHlwZSwgKm5hbWUsICpkb21haW4sICpob3N0OworICAgICAgICB1aW50MTZfdCBwb3J0OworICAgICAgICBBdmFoaVN0cmluZ0xpc3QgKnN0cmxzdCA9IE5VTEw7CisKKyAgICAgICAgaWYgKCFkYnVzX21lc3NhZ2VfZ2V0X2FyZ3MoCisgICAgICAgICAgICAgICAgbSwgJmVycm9yLAorICAgICAgICAgICAgICAgIERCVVNfVFlQRV9JTlQzMiwgJmludGVyZmFjZSwKKyAgICAgICAgICAgICAgICBEQlVTX1RZUEVfSU5UMzIsICZwcm90b2NvbCwKKyAgICAgICAgICAgICAgICBEQlVTX1RZUEVfVUlOVDMyLCAmZmxhZ3MsCisgICAgICAgICAgICAgICAgREJVU19UWVBFX1NUUklORywgJm5hbWUsCisgICAgICAgICAgICAgICAgREJVU19UWVBFX1NUUklORywgJnR5cGUsCisgICAgICAgICAgICAgICAgREJVU19UWVBFX1NUUklORywgJmRvbWFpbiwKKyAgICAgICAgICAgICAgICBEQlVTX1RZUEVfU1RSSU5HLCAmaG9zdCwKKyAgICAgICAgICAgICAgICBEQlVTX1RZUEVfVUlOVDE2LCAmcG9ydCwKKyAgICAgICAgICAgICAgICBEQlVTX1RZUEVfSU5WQUxJRCkgfHwKKyAgICAgICAgICAgICF0eXBlIHx8ICFuYW1lIHx8CisgICAgICAgICAgICBhdmFoaV9kYnVzX3JlYWRfc3RybHN0KG0sIDgsICZzdHJsc3QpIDwgMCkgeworICAgICAgICAgICAgYXZhaGlfbG9nX3dhcm4oIkVycm9yIHBhcnNpbmcgRW50cnlHcm91cDo6QWRkU2VydmljZSBtZXNzYWdlIik7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIShmbGFncyAmIEFWQUhJX1BVQkxJU0hfVVBEQVRFKSAmJiBpLT5uX2VudHJpZXMgPj0gc2VydmVyLT5uX2VudHJpZXNfcGVyX2VudHJ5X2dyb3VwX21heCkgeworICAgICAgICAgICAgYXZhaGlfc3RyaW5nX2xpc3RfZnJlZShzdHJsc3QpOworICAgICAgICAgICAgcmV0dXJuIGF2YWhpX2RidXNfcmVzcG9uZF9lcnJvcihjLCBtLCBBVkFISV9FUlJfVE9PX01BTllfRU5UUklFUywgTlVMTCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZG9tYWluICYmICEqZG9tYWluKQorICAgICAgICAgICAgZG9tYWluID0gTlVMTDsKKworICAgICAgICBpZiAoaG9zdCAmJiAhKmhvc3QpCisgICAgICAgICAgICBob3N0ID0gTlVMTDsKKworICAgICAgICBpZiAoYXZhaGlfc2VydmVyX2FkZF9zZXJ2aWNlX3N0cmxzdChhdmFoaV9zZXJ2ZXIsIGktPmVudHJ5X2dyb3VwLCAoQXZhaGlJZkluZGV4KSBpbnRlcmZhY2UsIChBdmFoaVByb3RvY29sKSBwcm90b2NvbCwgKEF2YWhpUHVibGlzaEZsYWdzKSBmbGFncywgbmFtZSwgdHlwZSwgZG9tYWluLCBob3N0LCBwb3J0LCBzdHJsc3QpIDwgMCkgeworICAgICAgICAgICAgYXZhaGlfc3RyaW5nX2xpc3RfZnJlZShzdHJsc3QpOworICAgICAgICAgICAgcmV0dXJuIGF2YWhpX2RidXNfcmVzcG9uZF9lcnJvcihjLCBtLCBhdmFoaV9zZXJ2ZXJfZXJybm8oYXZhaGlfc2VydmVyKSwgTlVMTCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIShmbGFncyAmIEFWQUhJX1BVQkxJU0hfVVBEQVRFKSkKKyAgICAgICAgICAgIGktPm5fZW50cmllcyArKzsKKworICAgICAgICBhdmFoaV9zdHJpbmdfbGlzdF9mcmVlKHN0cmxzdCk7CisKKyAgICAgICAgcmV0dXJuIGF2YWhpX2RidXNfcmVzcG9uZF9vayhjLCBtKTsKKworICAgIH0gZWxzZSBpZiAoZGJ1c19tZXNzYWdlX2lzX21ldGhvZF9jYWxsKG0sIEFWQUhJX0RCVVNfSU5URVJGQUNFX0VOVFJZX0dST1VQLCAiQWRkU2VydmljZVN1YnR5cGUiKSkgeworCisgICAgICAgIGludDMyX3QgaW50ZXJmYWNlLCBwcm90b2NvbDsKKyAgICAgICAgdWludDMyX3QgZmxhZ3M7CisgICAgICAgIGNoYXIgKnR5cGUsICpuYW1lLCAqZG9tYWluLCAqc3VidHlwZTsKKworICAgICAgICBpZiAoIWRidXNfbWVzc2FnZV9nZXRfYXJncygKKyAgICAgICAgICAgICAgICBtLCAmZXJyb3IsCisgICAgICAgICAgICAgICAgREJVU19UWVBFX0lOVDMyLCAmaW50ZXJmYWNlLAorICAgICAgICAgICAgICAgIERCVVNfVFlQRV9JTlQzMiwgJnByb3RvY29sLAorICAgICAgICAgICAgICAgIERCVVNfVFlQRV9VSU5UMzIsICZmbGFncywKKyAgICAgICAgICAgICAgICBEQlVTX1RZUEVfU1RSSU5HLCAmbmFtZSwKKyAgICAgICAgICAgICAgICBEQlVTX1RZUEVfU1RSSU5HLCAmdHlwZSwKKyAgICAgICAgICAgICAgICBEQlVTX1RZUEVfU1RSSU5HLCAmZG9tYWluLAorICAgICAgICAgICAgICAgIERCVVNfVFlQRV9TVFJJTkcsICZzdWJ0eXBlLAorICAgICAgICAgICAgICAgIERCVVNfVFlQRV9JTlZBTElEKSB8fCAhdHlwZSB8fCAhbmFtZSB8fCAhc3VidHlwZSkgeworICAgICAgICAgICAgYXZhaGlfbG9nX3dhcm4oIkVycm9yIHBhcnNpbmcgRW50cnlHcm91cDo6QWRkU2VydmljZVN1YnR5cGUgbWVzc2FnZSIpOworICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCEoZmxhZ3MgJiBBVkFISV9QVUJMSVNIX1VQREFURSkgJiYgaS0+bl9lbnRyaWVzID49IHNlcnZlci0+bl9lbnRyaWVzX3Blcl9lbnRyeV9ncm91cF9tYXgpCisgICAgICAgICAgICByZXR1cm4gYXZhaGlfZGJ1c19yZXNwb25kX2Vycm9yKGMsIG0sIEFWQUhJX0VSUl9UT09fTUFOWV9FTlRSSUVTLCBOVUxMKTsKKworICAgICAgICBpZiAoZG9tYWluICYmICEqZG9tYWluKQorICAgICAgICAgICAgZG9tYWluID0gTlVMTDsKKworICAgICAgICBpZiAoYXZhaGlfc2VydmVyX2FkZF9zZXJ2aWNlX3N1YnR5cGUoYXZhaGlfc2VydmVyLCBpLT5lbnRyeV9ncm91cCwgKEF2YWhpSWZJbmRleCkgaW50ZXJmYWNlLCAoQXZhaGlQcm90b2NvbCkgcHJvdG9jb2wsIChBdmFoaVB1Ymxpc2hGbGFncykgZmxhZ3MsIG5hbWUsIHR5cGUsIGRvbWFpbiwgc3VidHlwZSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIGF2YWhpX2RidXNfcmVzcG9uZF9lcnJvcihjLCBtLCBhdmFoaV9zZXJ2ZXJfZXJybm8oYXZhaGlfc2VydmVyKSwgTlVMTCk7CisKKyAgICAgICAgaWYgKCEoZmxhZ3MgJiBBVkFISV9QVUJMSVNIX1VQREFURSkpCisgICAgICAgICAgICBpLT5uX2VudHJpZXMgKys7CisKKyAgICAgICAgcmV0dXJuIGF2YWhpX2RidXNfcmVzcG9uZF9vayhjLCBtKTsKKworICAgIH0gZWxzZSBpZiAoZGJ1c19tZXNzYWdlX2lzX21ldGhvZF9jYWxsKG0sIEFWQUhJX0RCVVNfSU5URVJGQUNFX0VOVFJZX0dST1VQLCAiVXBkYXRlU2VydmljZVR4dCIpKSB7CisgICAgICAgIGludDMyX3QgaW50ZXJmYWNlLCBwcm90b2NvbDsKKyAgICAgICAgdWludDMyX3QgZmxhZ3M7CisgICAgICAgIGNoYXIgKnR5cGUsICpuYW1lLCAqZG9tYWluOworICAgICAgICBBdmFoaVN0cmluZ0xpc3QgKnN0cmxzdDsKKworICAgICAgICBpZiAoIWRidXNfbWVzc2FnZV9nZXRfYXJncygKKyAgICAgICAgICAgICAgICBtLCAmZXJyb3IsCisgICAgICAgICAgICAgICAgREJVU19UWVBFX0lOVDMyLCAmaW50ZXJmYWNlLAorICAgICAgICAgICAgICAgIERCVVNfVFlQRV9JTlQzMiwgJnByb3RvY29sLAorICAgICAgICAgICAgICAgIERCVVNfVFlQRV9VSU5UMzIsICZmbGFncywKKyAgICAgICAgICAgICAgICBEQlVTX1RZUEVfU1RSSU5HLCAmbmFtZSwKKyAgICAgICAgICAgICAgICBEQlVTX1RZUEVfU1RSSU5HLCAmdHlwZSwKKyAgICAgICAgICAgICAgICBEQlVTX1RZUEVfU1RSSU5HLCAmZG9tYWluLAorICAgICAgICAgICAgICAgIERCVVNfVFlQRV9JTlZBTElEKSB8fAorICAgICAgICAgICAgIXR5cGUgfHwgIW5hbWUgfHwKKyAgICAgICAgICAgIGF2YWhpX2RidXNfcmVhZF9zdHJsc3QobSwgNiwgJnN0cmxzdCkpIHsKKyAgICAgICAgICAgIGF2YWhpX2xvZ193YXJuKCJFcnJvciBwYXJzaW5nIEVudHJ5R3JvdXA6OlVwZGF0ZVNlcnZpY2VUeHQgbWVzc2FnZSIpOworICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGRvbWFpbiAmJiAhKmRvbWFpbikKKyAgICAgICAgICAgIGRvbWFpbiA9IE5VTEw7CisKKyAgICAgICAgaWYgKGF2YWhpX3NlcnZlcl91cGRhdGVfc2VydmljZV90eHRfc3RybHN0KGF2YWhpX3NlcnZlciwgaS0+ZW50cnlfZ3JvdXAsIChBdmFoaUlmSW5kZXgpIGludGVyZmFjZSwgKEF2YWhpUHJvdG9jb2wpIHByb3RvY29sLCAoQXZhaGlQdWJsaXNoRmxhZ3MpIGZsYWdzLCBuYW1lLCB0eXBlLCBkb21haW4sIHN0cmxzdCkgPCAwKSB7CisgICAgICAgICAgICBhdmFoaV9zdHJpbmdfbGlzdF9mcmVlKHN0cmxzdCk7CisgICAgICAgICAgICByZXR1cm4gYXZhaGlfZGJ1c19yZXNwb25kX2Vycm9yKGMsIG0sIGF2YWhpX3NlcnZlcl9lcnJubyhhdmFoaV9zZXJ2ZXIpLCBOVUxMKTsKKyAgICAgICAgfQorCisgICAgICAgIGF2YWhpX3N0cmluZ19saXN0X2ZyZWUoc3RybHN0KTsKKworICAgICAgICByZXR1cm4gYXZhaGlfZGJ1c19yZXNwb25kX29rKGMsIG0pOworCisgICAgfSBlbHNlIGlmIChkYnVzX21lc3NhZ2VfaXNfbWV0aG9kX2NhbGwobSwgQVZBSElfREJVU19JTlRFUkZBQ0VfRU5UUllfR1JPVVAsICJBZGRBZGRyZXNzIikpIHsKKyAgICAgICAgaW50MzJfdCBpbnRlcmZhY2UsIHByb3RvY29sOworICAgICAgICB1aW50MzJfdCBmbGFnczsKKyAgICAgICAgY2hhciAqbmFtZSwgKmFkZHJlc3M7CisgICAgICAgIEF2YWhpQWRkcmVzcyBhOworCisgICAgICAgIGlmICghZGJ1c19tZXNzYWdlX2dldF9hcmdzKAorICAgICAgICAgICAgICAgIG0sICZlcnJvciwKKyAgICAgICAgICAgICAgICBEQlVTX1RZUEVfSU5UMzIsICZpbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgREJVU19UWVBFX0lOVDMyLCAmcHJvdG9jb2wsCisgICAgICAgICAgICAgICAgREJVU19UWVBFX1VJTlQzMiwgJmZsYWdzLAorICAgICAgICAgICAgICAgIERCVVNfVFlQRV9TVFJJTkcsICZuYW1lLAorICAgICAgICAgICAgICAgIERCVVNfVFlQRV9TVFJJTkcsICZhZGRyZXNzLAorICAgICAgICAgICAgICAgIERCVVNfVFlQRV9JTlZBTElEKSB8fCAhbmFtZSB8fCAhYWRkcmVzcykgeworICAgICAgICAgICAgYXZhaGlfbG9nX3dhcm4oIkVycm9yIHBhcnNpbmcgRW50cnlHcm91cDo6QWRkQWRkcmVzcyBtZXNzYWdlIik7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIShmbGFncyAmIEFWQUhJX1BVQkxJU0hfVVBEQVRFKSAmJiBpLT5uX2VudHJpZXMgPj0gc2VydmVyLT5uX2VudHJpZXNfcGVyX2VudHJ5X2dyb3VwX21heCkKKyAgICAgICAgICAgIHJldHVybiBhdmFoaV9kYnVzX3Jlc3BvbmRfZXJyb3IoYywgbSwgQVZBSElfRVJSX1RPT19NQU5ZX0VOVFJJRVMsIE5VTEwpOworCisgICAgICAgIGlmICghKGF2YWhpX2FkZHJlc3NfcGFyc2UoYWRkcmVzcywgQVZBSElfUFJPVE9fVU5TUEVDLCAmYSkpKQorICAgICAgICAgICAgcmV0dXJuIGF2YWhpX2RidXNfcmVzcG9uZF9lcnJvcihjLCBtLCBBVkFISV9FUlJfSU5WQUxJRF9BRERSRVNTLCBOVUxMKTsKKworICAgICAgICBpZiAoYXZhaGlfc2VydmVyX2FkZF9hZGRyZXNzKGF2YWhpX3NlcnZlciwgaS0+ZW50cnlfZ3JvdXAsIChBdmFoaUlmSW5kZXgpIGludGVyZmFjZSwgKEF2YWhpUHJvdG9jb2wpIHByb3RvY29sLCAoQXZhaGlQdWJsaXNoRmxhZ3MpIGZsYWdzLCBuYW1lLCAmYSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIGF2YWhpX2RidXNfcmVzcG9uZF9lcnJvcihjLCBtLCBhdmFoaV9zZXJ2ZXJfZXJybm8oYXZhaGlfc2VydmVyKSwgTlVMTCk7CisKKyAgICAgICAgaWYgKCEoZmxhZ3MgJiBBVkFISV9QVUJMSVNIX1VQREFURSkpCisgICAgICAgICAgICBpLT5uX2VudHJpZXMgKys7CisKKyAgICAgICAgcmV0dXJuIGF2YWhpX2RidXNfcmVzcG9uZF9vayhjLCBtKTsKKyAgICB9IGVsc2UgaWYgKGRidXNfbWVzc2FnZV9pc19tZXRob2RfY2FsbChtLCBBVkFISV9EQlVTX0lOVEVSRkFDRV9FTlRSWV9HUk9VUCwgIkFkZFJlY29yZCIpKSB7CisgICAgICAgIGludDMyX3QgaW50ZXJmYWNlLCBwcm90b2NvbDsKKyAgICAgICAgdWludDMyX3QgZmxhZ3MsIHR0bCwgc2l6ZTsKKyAgICAgICAgdWludDE2X3QgY2xhenosIHR5cGU7CisgICAgICAgIGNoYXIgKm5hbWU7CisgICAgICAgIHZvaWQgKnJkYXRhOworICAgICAgICBBdmFoaVJlY29yZCAqcjsKKworICAgICAgICBpZiAoIWRidXNfbWVzc2FnZV9nZXRfYXJncygKKyAgICAgICAgICAgICAgICBtLCAmZXJyb3IsCisgICAgICAgICAgICAgICAgREJVU19UWVBFX0lOVDMyLCAmaW50ZXJmYWNlLAorICAgICAgICAgICAgICAgIERCVVNfVFlQRV9JTlQzMiwgJnByb3RvY29sLAorICAgICAgICAgICAgICAgIERCVVNfVFlQRV9VSU5UMzIsICZmbGFncywKKyAgICAgICAgICAgICAgICBEQlVTX1RZUEVfU1RSSU5HLCAmbmFtZSwKKyAgICAgICAgICAgICAgICBEQlVTX1RZUEVfVUlOVDE2LCAmY2xhenosCisgICAgICAgICAgICAgICAgREJVU19UWVBFX1VJTlQxNiwgJnR5cGUsCisgICAgICAgICAgICAgICAgREJVU19UWVBFX1VJTlQzMiwgJnR0bCwKKyAgICAgICAgICAgICAgICBEQlVTX1RZUEVfSU5WQUxJRCkgfHwgIW5hbWUgfHwKKyAgICAgICAgICAgIGF2YWhpX2RidXNfcmVhZF9yZGF0YSAobSwgNywgJnJkYXRhLCAmc2l6ZSkpIHsKKyAgICAgICAgICAgIGF2YWhpX2xvZ193YXJuKCJFcnJvciBwYXJzaW5nIEVudHJ5R3JvdXA6OkFkZFJlY29yZCBtZXNzYWdlIik7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIShmbGFncyAmIEFWQUhJX1BVQkxJU0hfVVBEQVRFKSAmJiBpLT5uX2VudHJpZXMgPj0gc2VydmVyLT5uX2VudHJpZXNfcGVyX2VudHJ5X2dyb3VwX21heCkKKyAgICAgICAgICAgIHJldHVybiBhdmFoaV9kYnVzX3Jlc3BvbmRfZXJyb3IoYywgbSwgQVZBSElfRVJSX1RPT19NQU5ZX0VOVFJJRVMsIE5VTEwpOworCisgICAgICAgIGlmICghYXZhaGlfaXNfdmFsaWRfZG9tYWluX25hbWUgKG5hbWUpKQorICAgICAgICAgICAgcmV0dXJuIGF2YWhpX2RidXNfcmVzcG9uZF9lcnJvcihjLCBtLCBBVkFISV9FUlJfSU5WQUxJRF9ET01BSU5fTkFNRSwgTlVMTCk7CisKKyAgICAgICAgaWYgKCEociA9IGF2YWhpX3JlY29yZF9uZXdfZnVsbCAobmFtZSwgY2xhenosIHR5cGUsIHR0bCkpKQorICAgICAgICAgICAgcmV0dXJuIGF2YWhpX2RidXNfcmVzcG9uZF9lcnJvcihjLCBtLCBBVkFISV9FUlJfTk9fTUVNT1JZLCBOVUxMKTsKKworICAgICAgICBpZiAoYXZhaGlfcmRhdGFfcGFyc2UgKHIsIHJkYXRhLCBzaXplKSA8IDApIHsKKyAgICAgICAgICAgIGF2YWhpX3JlY29yZF91bnJlZiAocik7CisgICAgICAgICAgICByZXR1cm4gYXZhaGlfZGJ1c19yZXNwb25kX2Vycm9yKGMsIG0sIEFWQUhJX0VSUl9JTlZBTElEX1JEQVRBLCBOVUxMKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhdmFoaV9zZXJ2ZXJfYWRkKGF2YWhpX3NlcnZlciwgaS0+ZW50cnlfZ3JvdXAsIChBdmFoaUlmSW5kZXgpIGludGVyZmFjZSwgKEF2YWhpUHJvdG9jb2wpIHByb3RvY29sLCAoQXZhaGlQdWJsaXNoRmxhZ3MpIGZsYWdzLCByKSA8IDApIHsKKyAgICAgICAgICAgIGF2YWhpX3JlY29yZF91bnJlZiAocik7CisgICAgICAgICAgICByZXR1cm4gYXZhaGlfZGJ1c19yZXNwb25kX2Vycm9yKGMsIG0sIGF2YWhpX3NlcnZlcl9lcnJubyhhdmFoaV9zZXJ2ZXIpLCBOVUxMKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghKGZsYWdzICYgQVZBSElfUFVCTElTSF9VUERBVEUpKQorICAgICAgICAgICAgaS0+bl9lbnRyaWVzICsrOworCisgICAgICAgIGF2YWhpX3JlY29yZF91bnJlZiAocik7CisKKyAgICAgICAgcmV0dXJuIGF2YWhpX2RidXNfcmVzcG9uZF9vayhjLCBtKTsKKyAgICB9CisKKworICAgIGF2YWhpX2xvZ193YXJuKCJNaXNzZWQgbWVzc2FnZSAlczo6JXMoKSIsIGRidXNfbWVzc2FnZV9nZXRfaW50ZXJmYWNlKG0pLCBkYnVzX21lc3NhZ2VfZ2V0X21lbWJlcihtKSk7CisKK2ZhaWw6CisgICAgaWYgKGRidXNfZXJyb3JfaXNfc2V0KCZlcnJvcikpCisgICAgICAgIGRidXNfZXJyb3JfZnJlZSgmZXJyb3IpOworCisgICAgcmV0dXJuIERCVVNfSEFORExFUl9SRVNVTFRfTk9UX1lFVF9IQU5ETEVEOworfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9kYnVzLWludGVybmFsLmggYi9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL2RidXMtaW50ZXJuYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjg2NTc4Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9kYnVzLWludGVybmFsLmgKQEAgLTAsMCArMSwyNTYgQEAKKyNpZm5kZWYgZm9vZGJ1c2ludGVybmFsaGZvbworI2RlZmluZSBmb29kYnVzaW50ZXJuYWxoZm9vCisKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworCisjaW5jbHVkZSA8ZGJ1cy9kYnVzLmg+CisKKyNpbmNsdWRlIDxhdmFoaS1jb3JlL2NvcmUuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb3JlL3B1Ymxpc2guaD4KKyNpbmNsdWRlIDxhdmFoaS1jb3JlL2xvb2t1cC5oPgorCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2xsaXN0Lmg+CisKK3R5cGVkZWYgc3RydWN0IFNlcnZlciBTZXJ2ZXI7Cit0eXBlZGVmIHN0cnVjdCBDbGllbnQgQ2xpZW50OwordHlwZWRlZiBzdHJ1Y3QgRW50cnlHcm91cEluZm8gRW50cnlHcm91cEluZm87Cit0eXBlZGVmIHN0cnVjdCBTeW5jSG9zdE5hbWVSZXNvbHZlckluZm8gU3luY0hvc3ROYW1lUmVzb2x2ZXJJbmZvOwordHlwZWRlZiBzdHJ1Y3QgQXN5bmNIb3N0TmFtZVJlc29sdmVySW5mbyBBc3luY0hvc3ROYW1lUmVzb2x2ZXJJbmZvOwordHlwZWRlZiBzdHJ1Y3QgU3luY0FkZHJlc3NSZXNvbHZlckluZm8gU3luY0FkZHJlc3NSZXNvbHZlckluZm87Cit0eXBlZGVmIHN0cnVjdCBBc3luY0FkZHJlc3NSZXNvbHZlckluZm8gQXN5bmNBZGRyZXNzUmVzb2x2ZXJJbmZvOwordHlwZWRlZiBzdHJ1Y3QgRG9tYWluQnJvd3NlckluZm8gRG9tYWluQnJvd3NlckluZm87Cit0eXBlZGVmIHN0cnVjdCBTZXJ2aWNlVHlwZUJyb3dzZXJJbmZvIFNlcnZpY2VUeXBlQnJvd3NlckluZm87Cit0eXBlZGVmIHN0cnVjdCBTZXJ2aWNlQnJvd3NlckluZm8gU2VydmljZUJyb3dzZXJJbmZvOwordHlwZWRlZiBzdHJ1Y3QgU3luY1NlcnZpY2VSZXNvbHZlckluZm8gU3luY1NlcnZpY2VSZXNvbHZlckluZm87Cit0eXBlZGVmIHN0cnVjdCBBc3luY1NlcnZpY2VSZXNvbHZlckluZm8gQXN5bmNTZXJ2aWNlUmVzb2x2ZXJJbmZvOwordHlwZWRlZiBzdHJ1Y3QgUmVjb3JkQnJvd3NlckluZm8gUmVjb3JkQnJvd3NlckluZm87CisKKyNkZWZpbmUgREVGQVVMVF9DTElFTlRTX01BWCA0MDk2CisjZGVmaW5lIERFRkFVTFRfT0JKRUNUU19QRVJfQ0xJRU5UX01BWCAxMDI0CisjZGVmaW5lIERFRkFVTFRfRU5UUklFU19QRVJfRU5UUllfR1JPVVBfTUFYIDMyCisKK3N0cnVjdCBFbnRyeUdyb3VwSW5mbyB7CisgICAgdW5zaWduZWQgaWQ7CisgICAgQ2xpZW50ICpjbGllbnQ7CisgICAgQXZhaGlTRW50cnlHcm91cCAqZW50cnlfZ3JvdXA7CisgICAgY2hhciAqcGF0aDsKKworICAgIHVuc2lnbmVkIG5fZW50cmllczsKKworICAgIEFWQUhJX0xMSVNUX0ZJRUxEUyhFbnRyeUdyb3VwSW5mbywgZW50cnlfZ3JvdXBzKTsKK307CisKK3N0cnVjdCBTeW5jSG9zdE5hbWVSZXNvbHZlckluZm8geworICAgIENsaWVudCAqY2xpZW50OworICAgIEF2YWhpU0hvc3ROYW1lUmVzb2x2ZXIgKmhvc3RfbmFtZV9yZXNvbHZlcjsKKyAgICBEQnVzTWVzc2FnZSAqbWVzc2FnZTsKKworICAgIEFWQUhJX0xMSVNUX0ZJRUxEUyhTeW5jSG9zdE5hbWVSZXNvbHZlckluZm8sIHN5bmNfaG9zdF9uYW1lX3Jlc29sdmVycyk7Cit9OworCitzdHJ1Y3QgQXN5bmNIb3N0TmFtZVJlc29sdmVySW5mbyB7CisgICAgdW5zaWduZWQgaWQ7CisgICAgQ2xpZW50ICpjbGllbnQ7CisgICAgQXZhaGlTSG9zdE5hbWVSZXNvbHZlciAqaG9zdF9uYW1lX3Jlc29sdmVyOworICAgIGNoYXIgKnBhdGg7CisKKyAgICBBVkFISV9MTElTVF9GSUVMRFMoQXN5bmNIb3N0TmFtZVJlc29sdmVySW5mbywgYXN5bmNfaG9zdF9uYW1lX3Jlc29sdmVycyk7Cit9OworCitzdHJ1Y3QgU3luY0FkZHJlc3NSZXNvbHZlckluZm8geworICAgIENsaWVudCAqY2xpZW50OworICAgIEF2YWhpU0FkZHJlc3NSZXNvbHZlciAqYWRkcmVzc19yZXNvbHZlcjsKKyAgICBEQnVzTWVzc2FnZSAqbWVzc2FnZTsKKworICAgIEFWQUhJX0xMSVNUX0ZJRUxEUyhTeW5jQWRkcmVzc1Jlc29sdmVySW5mbywgc3luY19hZGRyZXNzX3Jlc29sdmVycyk7Cit9OworCitzdHJ1Y3QgQXN5bmNBZGRyZXNzUmVzb2x2ZXJJbmZvIHsKKyAgICB1bnNpZ25lZCBpZDsKKyAgICBDbGllbnQgKmNsaWVudDsKKyAgICBBdmFoaVNBZGRyZXNzUmVzb2x2ZXIgKmFkZHJlc3NfcmVzb2x2ZXI7CisgICAgY2hhciAqcGF0aDsKKworICAgIEFWQUhJX0xMSVNUX0ZJRUxEUyhBc3luY0FkZHJlc3NSZXNvbHZlckluZm8sIGFzeW5jX2FkZHJlc3NfcmVzb2x2ZXJzKTsKK307CisKK3N0cnVjdCBEb21haW5Ccm93c2VySW5mbyB7CisgICAgdW5zaWduZWQgaWQ7CisgICAgQ2xpZW50ICpjbGllbnQ7CisgICAgQXZhaGlTRG9tYWluQnJvd3NlciAqZG9tYWluX2Jyb3dzZXI7CisgICAgY2hhciAqcGF0aDsKKworICAgIEFWQUhJX0xMSVNUX0ZJRUxEUyhEb21haW5Ccm93c2VySW5mbywgZG9tYWluX2Jyb3dzZXJzKTsKK307CisKK3N0cnVjdCBTZXJ2aWNlVHlwZUJyb3dzZXJJbmZvIHsKKyAgICB1bnNpZ25lZCBpZDsKKyAgICBDbGllbnQgKmNsaWVudDsKKyAgICBBdmFoaVNTZXJ2aWNlVHlwZUJyb3dzZXIgKnNlcnZpY2VfdHlwZV9icm93c2VyOworICAgIGNoYXIgKnBhdGg7CisKKyAgICBBVkFISV9MTElTVF9GSUVMRFMoU2VydmljZVR5cGVCcm93c2VySW5mbywgc2VydmljZV90eXBlX2Jyb3dzZXJzKTsKK307CisKK3N0cnVjdCBTZXJ2aWNlQnJvd3NlckluZm8geworICAgIHVuc2lnbmVkIGlkOworICAgIENsaWVudCAqY2xpZW50OworICAgIEF2YWhpU1NlcnZpY2VCcm93c2VyICpzZXJ2aWNlX2Jyb3dzZXI7CisgICAgY2hhciAqcGF0aDsKKworICAgIEFWQUhJX0xMSVNUX0ZJRUxEUyhTZXJ2aWNlQnJvd3NlckluZm8sIHNlcnZpY2VfYnJvd3NlcnMpOworfTsKKworc3RydWN0IFN5bmNTZXJ2aWNlUmVzb2x2ZXJJbmZvIHsKKyAgICBDbGllbnQgKmNsaWVudDsKKyAgICBBdmFoaVNTZXJ2aWNlUmVzb2x2ZXIgKnNlcnZpY2VfcmVzb2x2ZXI7CisgICAgREJ1c01lc3NhZ2UgKm1lc3NhZ2U7CisKKyAgICBBVkFISV9MTElTVF9GSUVMRFMoU3luY1NlcnZpY2VSZXNvbHZlckluZm8sIHN5bmNfc2VydmljZV9yZXNvbHZlcnMpOworfTsKKworc3RydWN0IEFzeW5jU2VydmljZVJlc29sdmVySW5mbyB7CisgICAgdW5zaWduZWQgaWQ7CisgICAgQ2xpZW50ICpjbGllbnQ7CisgICAgQXZhaGlTU2VydmljZVJlc29sdmVyICpzZXJ2aWNlX3Jlc29sdmVyOworICAgIGNoYXIgKnBhdGg7CisKKyAgICBBVkFISV9MTElTVF9GSUVMRFMoQXN5bmNTZXJ2aWNlUmVzb2x2ZXJJbmZvLCBhc3luY19zZXJ2aWNlX3Jlc29sdmVycyk7Cit9OworCitzdHJ1Y3QgUmVjb3JkQnJvd3NlckluZm8geworICAgIHVuc2lnbmVkIGlkOworICAgIENsaWVudCAqY2xpZW50OworICAgIEF2YWhpU1JlY29yZEJyb3dzZXIgKnJlY29yZF9icm93c2VyOworICAgIGNoYXIgKnBhdGg7CisKKyAgICBBVkFISV9MTElTVF9GSUVMRFMoUmVjb3JkQnJvd3NlckluZm8sIHJlY29yZF9icm93c2Vycyk7Cit9OworCitzdHJ1Y3QgQ2xpZW50IHsKKyAgICB1bnNpZ25lZCBpZDsKKyAgICBjaGFyICpuYW1lOworICAgIHVuc2lnbmVkIGN1cnJlbnRfaWQ7CisgICAgdW5zaWduZWQgbl9vYmplY3RzOworCisgICAgQVZBSElfTExJU1RfRklFTERTKENsaWVudCwgY2xpZW50cyk7CisgICAgQVZBSElfTExJU1RfSEVBRChFbnRyeUdyb3VwSW5mbywgZW50cnlfZ3JvdXBzKTsKKyAgICBBVkFISV9MTElTVF9IRUFEKFN5bmNIb3N0TmFtZVJlc29sdmVySW5mbywgc3luY19ob3N0X25hbWVfcmVzb2x2ZXJzKTsKKyAgICBBVkFISV9MTElTVF9IRUFEKEFzeW5jSG9zdE5hbWVSZXNvbHZlckluZm8sIGFzeW5jX2hvc3RfbmFtZV9yZXNvbHZlcnMpOworICAgIEFWQUhJX0xMSVNUX0hFQUQoU3luY0FkZHJlc3NSZXNvbHZlckluZm8sIHN5bmNfYWRkcmVzc19yZXNvbHZlcnMpOworICAgIEFWQUhJX0xMSVNUX0hFQUQoQXN5bmNBZGRyZXNzUmVzb2x2ZXJJbmZvLCBhc3luY19hZGRyZXNzX3Jlc29sdmVycyk7CisgICAgQVZBSElfTExJU1RfSEVBRChEb21haW5Ccm93c2VySW5mbywgZG9tYWluX2Jyb3dzZXJzKTsKKyAgICBBVkFISV9MTElTVF9IRUFEKFNlcnZpY2VUeXBlQnJvd3NlckluZm8sIHNlcnZpY2VfdHlwZV9icm93c2Vycyk7CisgICAgQVZBSElfTExJU1RfSEVBRChTZXJ2aWNlQnJvd3NlckluZm8sIHNlcnZpY2VfYnJvd3NlcnMpOworICAgIEFWQUhJX0xMSVNUX0hFQUQoU3luY1NlcnZpY2VSZXNvbHZlckluZm8sIHN5bmNfc2VydmljZV9yZXNvbHZlcnMpOworICAgIEFWQUhJX0xMSVNUX0hFQUQoQXN5bmNTZXJ2aWNlUmVzb2x2ZXJJbmZvLCBhc3luY19zZXJ2aWNlX3Jlc29sdmVycyk7CisgICAgQVZBSElfTExJU1RfSEVBRChSZWNvcmRCcm93c2VySW5mbywgcmVjb3JkX2Jyb3dzZXJzKTsKK307CisKK3N0cnVjdCBTZXJ2ZXIgeworICAgIGNvbnN0IEF2YWhpUG9sbCAqcG9sbF9hcGk7CisgICAgREJ1c0Nvbm5lY3Rpb24gKmJ1czsKKyAgICBBVkFISV9MTElTVF9IRUFEKENsaWVudCwgY2xpZW50cyk7CisgICAgdW5zaWduZWQgbl9jbGllbnRzOworICAgIHVuc2lnbmVkIGN1cnJlbnRfaWQ7CisKKyAgICBBdmFoaVRpbWVvdXQgKnJlY29ubmVjdF90aW1lb3V0OworICAgIGludCByZWNvbm5lY3Q7CisKKyAgICB1bnNpZ25lZCBuX2NsaWVudHNfbWF4OworICAgIHVuc2lnbmVkIG5fb2JqZWN0c19wZXJfY2xpZW50X21heDsKKyAgICB1bnNpZ25lZCBuX2VudHJpZXNfcGVyX2VudHJ5X2dyb3VwX21heDsKKworICAgIGludCBkaXNhYmxlX3VzZXJfc2VydmljZV9wdWJsaXNoaW5nOworfTsKKworZXh0ZXJuIFNlcnZlciAqc2VydmVyOworCit2b2lkIGF2YWhpX2RidXNfZW50cnlfZ3JvdXBfZnJlZShFbnRyeUdyb3VwSW5mbyAqaSk7Cit2b2lkIGF2YWhpX2RidXNfZW50cnlfZ3JvdXBfY2FsbGJhY2soQXZhaGlTZXJ2ZXIgKnMsIEF2YWhpU0VudHJ5R3JvdXAgKmcsIEF2YWhpRW50cnlHcm91cFN0YXRlIHN0YXRlLCB2b2lkKiB1c2VyZGF0YSk7CitEQnVzSGFuZGxlclJlc3VsdCBhdmFoaV9kYnVzX21zZ19lbnRyeV9ncm91cF9pbXBsKERCdXNDb25uZWN0aW9uICpjLCBEQnVzTWVzc2FnZSAqbSwgdm9pZCAqdXNlcmRhdGEpOworCit2b2lkIGF2YWhpX2RidXNfc3luY19ob3N0X25hbWVfcmVzb2x2ZXJfZnJlZShTeW5jSG9zdE5hbWVSZXNvbHZlckluZm8gKmkpOwordm9pZCBhdmFoaV9kYnVzX3N5bmNfaG9zdF9uYW1lX3Jlc29sdmVyX2NhbGxiYWNrKEF2YWhpU0hvc3ROYW1lUmVzb2x2ZXIgKnIsIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsIEF2YWhpUmVzb2x2ZXJFdmVudCBldmVudCwgY29uc3QgY2hhciAqaG9zdF9uYW1lLCBjb25zdCBBdmFoaUFkZHJlc3MgKmEsIEF2YWhpTG9va3VwUmVzdWx0RmxhZ3MgZmxhZ3MsIHZvaWQqIHVzZXJkYXRhKTsKKwordm9pZCBhdmFoaV9kYnVzX2FzeW5jX2hvc3RfbmFtZV9yZXNvbHZlcl9mcmVlKEFzeW5jSG9zdE5hbWVSZXNvbHZlckluZm8gKmkpOwordm9pZCBhdmFoaV9kYnVzX2FzeW5jX2hvc3RfbmFtZV9yZXNvbHZlcl9jYWxsYmFjayhBdmFoaVNIb3N0TmFtZVJlc29sdmVyICpyLCBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLCBBdmFoaVByb3RvY29sIHByb3RvY29sLCBBdmFoaVJlc29sdmVyRXZlbnQgZXZlbnQsIGNvbnN0IGNoYXIgKmhvc3RfbmFtZSwgY29uc3QgQXZhaGlBZGRyZXNzICphLCBBdmFoaUxvb2t1cFJlc3VsdEZsYWdzIGZsYWdzLCB2b2lkKiB1c2VyZGF0YSk7CitEQnVzSGFuZGxlclJlc3VsdCBhdmFoaV9kYnVzX21zZ19hc3luY19ob3N0X25hbWVfcmVzb2x2ZXJfaW1wbChEQnVzQ29ubmVjdGlvbiAqYywgREJ1c01lc3NhZ2UgKm0sIHZvaWQgKnVzZXJkYXRhKTsKKwordm9pZCBhdmFoaV9kYnVzX3N5bmNfYWRkcmVzc19yZXNvbHZlcl9mcmVlKFN5bmNBZGRyZXNzUmVzb2x2ZXJJbmZvICppKTsKK3ZvaWQgYXZhaGlfZGJ1c19zeW5jX2FkZHJlc3NfcmVzb2x2ZXJfY2FsbGJhY2soQXZhaGlTQWRkcmVzc1Jlc29sdmVyICpyLCBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLCBBdmFoaVByb3RvY29sIHByb3RvY29sLCBBdmFoaVJlc29sdmVyRXZlbnQgZXZlbnQsIGNvbnN0IEF2YWhpQWRkcmVzcyAqYWRkcmVzcywgY29uc3QgY2hhciAqaG9zdF9uYW1lLCBBdmFoaUxvb2t1cFJlc3VsdEZsYWdzIGZsYWdzLCB2b2lkKiB1c2VyZGF0YSk7CisKK3ZvaWQgYXZhaGlfZGJ1c19hc3luY19hZGRyZXNzX3Jlc29sdmVyX2ZyZWUoQXN5bmNBZGRyZXNzUmVzb2x2ZXJJbmZvICppKTsKK3ZvaWQgYXZhaGlfZGJ1c19hc3luY19hZGRyZXNzX3Jlc29sdmVyX2NhbGxiYWNrKEF2YWhpU0FkZHJlc3NSZXNvbHZlciAqciwgQXZhaGlJZkluZGV4IGludGVyZmFjZSwgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwgQXZhaGlSZXNvbHZlckV2ZW50IGV2ZW50LCBjb25zdCBBdmFoaUFkZHJlc3MgKmFkZHJlc3MsIGNvbnN0IGNoYXIgKmhvc3RfbmFtZSwgQXZhaGlMb29rdXBSZXN1bHRGbGFncyBmbGFncywgdm9pZCogdXNlcmRhdGEpOworREJ1c0hhbmRsZXJSZXN1bHQgYXZhaGlfZGJ1c19tc2dfYXN5bmNfYWRkcmVzc19yZXNvbHZlcl9pbXBsKERCdXNDb25uZWN0aW9uICpjLCBEQnVzTWVzc2FnZSAqbSwgdm9pZCAqdXNlcmRhdGEpOworCit2b2lkIGF2YWhpX2RidXNfZG9tYWluX2Jyb3dzZXJfZnJlZShEb21haW5Ccm93c2VySW5mbyAqaSk7CitEQnVzSGFuZGxlclJlc3VsdCBhdmFoaV9kYnVzX21zZ19kb21haW5fYnJvd3Nlcl9pbXBsKERCdXNDb25uZWN0aW9uICpjLCBEQnVzTWVzc2FnZSAqbSwgdm9pZCAqdXNlcmRhdGEpOwordm9pZCBhdmFoaV9kYnVzX2RvbWFpbl9icm93c2VyX2NhbGxiYWNrKEF2YWhpU0RvbWFpbkJyb3dzZXIgKmIsIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsIEF2YWhpQnJvd3NlckV2ZW50IGV2ZW50LCBjb25zdCBjaGFyICpkb21haW4sIEF2YWhpTG9va3VwUmVzdWx0RmxhZ3MgZmxhZ3MsICB2b2lkKiB1c2VyZGF0YSk7CisKK3ZvaWQgYXZhaGlfZGJ1c19zZXJ2aWNlX3R5cGVfYnJvd3Nlcl9mcmVlKFNlcnZpY2VUeXBlQnJvd3NlckluZm8gKmkpOworREJ1c0hhbmRsZXJSZXN1bHQgYXZhaGlfZGJ1c19tc2dfc2VydmljZV90eXBlX2Jyb3dzZXJfaW1wbChEQnVzQ29ubmVjdGlvbiAqYywgREJ1c01lc3NhZ2UgKm0sIHZvaWQgKnVzZXJkYXRhKTsKK3ZvaWQgYXZhaGlfZGJ1c19zZXJ2aWNlX3R5cGVfYnJvd3Nlcl9jYWxsYmFjayhBdmFoaVNTZXJ2aWNlVHlwZUJyb3dzZXIgKmIsIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsIEF2YWhpQnJvd3NlckV2ZW50IGV2ZW50LCBjb25zdCBjaGFyICp0eXBlLCBjb25zdCBjaGFyICpkb21haW4sIEF2YWhpTG9va3VwUmVzdWx0RmxhZ3MgZmxhZ3MsIHZvaWQqIHVzZXJkYXRhKTsKKwordm9pZCBhdmFoaV9kYnVzX3NlcnZpY2VfYnJvd3Nlcl9mcmVlKFNlcnZpY2VCcm93c2VySW5mbyAqaSk7CitEQnVzSGFuZGxlclJlc3VsdCBhdmFoaV9kYnVzX21zZ19zZXJ2aWNlX2Jyb3dzZXJfaW1wbChEQnVzQ29ubmVjdGlvbiAqYywgREJ1c01lc3NhZ2UgKm0sIHZvaWQgKnVzZXJkYXRhKTsKK3ZvaWQgYXZhaGlfZGJ1c19zZXJ2aWNlX2Jyb3dzZXJfY2FsbGJhY2soQXZhaGlTU2VydmljZUJyb3dzZXIgKmIsIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsIEF2YWhpQnJvd3NlckV2ZW50IGV2ZW50LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp0eXBlLCBjb25zdCBjaGFyICpkb21haW4sIEF2YWhpTG9va3VwUmVzdWx0RmxhZ3MgZmxhZ3MsIHZvaWQqIHVzZXJkYXRhKTsKKwordm9pZCBhdmFoaV9kYnVzX3N5bmNfc2VydmljZV9yZXNvbHZlcl9mcmVlKFN5bmNTZXJ2aWNlUmVzb2x2ZXJJbmZvICppKTsKKwordm9pZCBhdmFoaV9kYnVzX3N5bmNfc2VydmljZV9yZXNvbHZlcl9jYWxsYmFjaygKKyAgICBBdmFoaVNTZXJ2aWNlUmVzb2x2ZXIgKnIsCisgICAgQXZhaGlJZkluZGV4IGludGVyZmFjZSwKKyAgICBBdmFoaVByb3RvY29sIHByb3RvY29sLAorICAgIEF2YWhpUmVzb2x2ZXJFdmVudCBldmVudCwKKyAgICBjb25zdCBjaGFyICpuYW1lLAorICAgIGNvbnN0IGNoYXIgKnR5cGUsCisgICAgY29uc3QgY2hhciAqZG9tYWluLAorICAgIGNvbnN0IGNoYXIgKmhvc3RfbmFtZSwKKyAgICBjb25zdCBBdmFoaUFkZHJlc3MgKmEsCisgICAgdWludDE2X3QgcG9ydCwKKyAgICBBdmFoaVN0cmluZ0xpc3QgKnR4dCwKKyAgICBBdmFoaUxvb2t1cFJlc3VsdEZsYWdzIGZsYWdzLAorICAgIHZvaWQqIHVzZXJkYXRhKTsKKwordm9pZCBhdmFoaV9kYnVzX2FzeW5jX3NlcnZpY2VfcmVzb2x2ZXJfZnJlZShBc3luY1NlcnZpY2VSZXNvbHZlckluZm8gKmkpOwordm9pZCBhdmFoaV9kYnVzX2FzeW5jX3NlcnZpY2VfcmVzb2x2ZXJfY2FsbGJhY2soCisgICAgQXZhaGlTU2VydmljZVJlc29sdmVyICpyLAorICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsCisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICBBdmFoaVJlc29sdmVyRXZlbnQgZXZlbnQsCisgICAgY29uc3QgY2hhciAqbmFtZSwKKyAgICBjb25zdCBjaGFyICp0eXBlLAorICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwKKyAgICBjb25zdCBjaGFyICpob3N0X25hbWUsCisgICAgY29uc3QgQXZhaGlBZGRyZXNzICphLAorICAgIHVpbnQxNl90IHBvcnQsCisgICAgQXZhaGlTdHJpbmdMaXN0ICp0eHQsCisgICAgQXZhaGlMb29rdXBSZXN1bHRGbGFncyBmbGFncywKKyAgICB2b2lkKiB1c2VyZGF0YSk7CisKK0RCdXNIYW5kbGVyUmVzdWx0IGF2YWhpX2RidXNfbXNnX2FzeW5jX3NlcnZpY2VfcmVzb2x2ZXJfaW1wbChEQnVzQ29ubmVjdGlvbiAqYywgREJ1c01lc3NhZ2UgKm0sIHZvaWQgKnVzZXJkYXRhKTsKKwordm9pZCBhdmFoaV9kYnVzX3JlY29yZF9icm93c2VyX2ZyZWUoUmVjb3JkQnJvd3NlckluZm8gKmkpOworREJ1c0hhbmRsZXJSZXN1bHQgYXZhaGlfZGJ1c19tc2dfcmVjb3JkX2Jyb3dzZXJfaW1wbChEQnVzQ29ubmVjdGlvbiAqYywgREJ1c01lc3NhZ2UgKm0sIHZvaWQgKnVzZXJkYXRhKTsKK3ZvaWQgYXZhaGlfZGJ1c19yZWNvcmRfYnJvd3Nlcl9jYWxsYmFjayhBdmFoaVNSZWNvcmRCcm93c2VyICpiLCBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLCBBdmFoaVByb3RvY29sIHByb3RvY29sLCBBdmFoaUJyb3dzZXJFdmVudCBldmVudCwgQXZhaGlSZWNvcmQgKnJlY29yZCwgQXZhaGlMb29rdXBSZXN1bHRGbGFncyBmbGFncywgdm9pZCogdXNlcmRhdGEpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vZGJ1cy1wcm90b2NvbC5jIGIvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9kYnVzLXByb3RvY29sLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI4YTY2MgotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vZGJ1cy1wcm90b2NvbC5jCkBAIC0wLDAgKzEsMTIyNiBAQAorLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlIDxkYnVzL2RidXMuaD4KKworI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9kYnVzLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2xsaXN0Lmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL21hbGxvYy5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9kYnVzLXdhdGNoLWdsdWUuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vYWx0ZXJuYXRpdmUuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vZXJyb3IuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vZG9tYWluLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL3RpbWV2YWwuaD4KKworI2luY2x1ZGUgPGF2YWhpLWNvcmUvbG9nLmg+CisjaW5jbHVkZSA8YXZhaGktY29yZS9jb3JlLmg+CisjaW5jbHVkZSA8YXZhaGktY29yZS9sb29rdXAuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb3JlL3B1Ymxpc2guaD4KKworI2luY2x1ZGUgImRidXMtcHJvdG9jb2wuaCIKKyNpbmNsdWRlICJkYnVzLXV0aWwuaCIKKyNpbmNsdWRlICJkYnVzLWludGVybmFsLmgiCisjaW5jbHVkZSAibWFpbi5oIgorCisvKiAjZGVmaW5lIFZBTEdSSU5EX1dPUktBUk9VTkQgMSAqLworCisjZGVmaW5lIFJFQ09OTkVDVF9NU0VDIDMwMDAKKworU2VydmVyICpzZXJ2ZXIgPSBOVUxMOworCitzdGF0aWMgaW50IGRidXNfY29ubmVjdCh2b2lkKTsKK3N0YXRpYyB2b2lkIGRidXNfZGlzY29ubmVjdCh2b2lkKTsKKworc3RhdGljIHZvaWQgY2xpZW50X2ZyZWUoQ2xpZW50ICpjKSB7CisKKyAgICBhc3NlcnQoc2VydmVyKTsKKyAgICBhc3NlcnQoYyk7CisKKyAgICB3aGlsZSAoYy0+ZW50cnlfZ3JvdXBzKQorICAgICAgICBhdmFoaV9kYnVzX2VudHJ5X2dyb3VwX2ZyZWUoYy0+ZW50cnlfZ3JvdXBzKTsKKworICAgIHdoaWxlIChjLT5zeW5jX2hvc3RfbmFtZV9yZXNvbHZlcnMpCisgICAgICAgIGF2YWhpX2RidXNfc3luY19ob3N0X25hbWVfcmVzb2x2ZXJfZnJlZShjLT5zeW5jX2hvc3RfbmFtZV9yZXNvbHZlcnMpOworCisgICAgd2hpbGUgKGMtPmFzeW5jX2hvc3RfbmFtZV9yZXNvbHZlcnMpCisgICAgICAgIGF2YWhpX2RidXNfYXN5bmNfaG9zdF9uYW1lX3Jlc29sdmVyX2ZyZWUoYy0+YXN5bmNfaG9zdF9uYW1lX3Jlc29sdmVycyk7CisKKyAgICB3aGlsZSAoYy0+c3luY19hZGRyZXNzX3Jlc29sdmVycykKKyAgICAgICAgYXZhaGlfZGJ1c19zeW5jX2FkZHJlc3NfcmVzb2x2ZXJfZnJlZShjLT5zeW5jX2FkZHJlc3NfcmVzb2x2ZXJzKTsKKworICAgIHdoaWxlIChjLT5hc3luY19hZGRyZXNzX3Jlc29sdmVycykKKyAgICAgICAgYXZhaGlfZGJ1c19hc3luY19hZGRyZXNzX3Jlc29sdmVyX2ZyZWUoYy0+YXN5bmNfYWRkcmVzc19yZXNvbHZlcnMpOworCisgICAgd2hpbGUgKGMtPmRvbWFpbl9icm93c2VycykKKyAgICAgICAgYXZhaGlfZGJ1c19kb21haW5fYnJvd3Nlcl9mcmVlKGMtPmRvbWFpbl9icm93c2Vycyk7CisKKyAgICB3aGlsZSAoYy0+c2VydmljZV90eXBlX2Jyb3dzZXJzKQorICAgICAgICBhdmFoaV9kYnVzX3NlcnZpY2VfdHlwZV9icm93c2VyX2ZyZWUoYy0+c2VydmljZV90eXBlX2Jyb3dzZXJzKTsKKworICAgIHdoaWxlIChjLT5zZXJ2aWNlX2Jyb3dzZXJzKQorICAgICAgICBhdmFoaV9kYnVzX3NlcnZpY2VfYnJvd3Nlcl9mcmVlKGMtPnNlcnZpY2VfYnJvd3NlcnMpOworCisgICAgd2hpbGUgKGMtPnN5bmNfc2VydmljZV9yZXNvbHZlcnMpCisgICAgICAgIGF2YWhpX2RidXNfc3luY19zZXJ2aWNlX3Jlc29sdmVyX2ZyZWUoYy0+c3luY19zZXJ2aWNlX3Jlc29sdmVycyk7CisKKyAgICB3aGlsZSAoYy0+YXN5bmNfc2VydmljZV9yZXNvbHZlcnMpCisgICAgICAgIGF2YWhpX2RidXNfYXN5bmNfc2VydmljZV9yZXNvbHZlcl9mcmVlKGMtPmFzeW5jX3NlcnZpY2VfcmVzb2x2ZXJzKTsKKworICAgIHdoaWxlIChjLT5yZWNvcmRfYnJvd3NlcnMpCisgICAgICAgIGF2YWhpX2RidXNfcmVjb3JkX2Jyb3dzZXJfZnJlZShjLT5yZWNvcmRfYnJvd3NlcnMpOworCisgICAgYXNzZXJ0KGMtPm5fb2JqZWN0cyA9PSAwKTsKKworICAgIGF2YWhpX2ZyZWUoYy0+bmFtZSk7CisgICAgQVZBSElfTExJU1RfUkVNT1ZFKENsaWVudCwgY2xpZW50cywgc2VydmVyLT5jbGllbnRzLCBjKTsKKyAgICBhdmFoaV9mcmVlKGMpOworCisgICAgYXNzZXJ0KHNlcnZlci0+bl9jbGllbnRzID49IDEpOworICAgIHNlcnZlci0+bl9jbGllbnRzIC0tOworfQorCitzdGF0aWMgQ2xpZW50ICpjbGllbnRfZ2V0KGNvbnN0IGNoYXIgKm5hbWUsIGludCBjcmVhdGUpIHsKKyAgICBDbGllbnQgKmNsaWVudDsKKworICAgIGFzc2VydChzZXJ2ZXIpOworICAgIGFzc2VydChuYW1lKTsKKworICAgIGZvciAoY2xpZW50ID0gc2VydmVyLT5jbGllbnRzOyBjbGllbnQ7IGNsaWVudCA9IGNsaWVudC0+Y2xpZW50c19uZXh0KQorICAgICAgICBpZiAoIXN0cmNtcChuYW1lLCBjbGllbnQtPm5hbWUpKQorICAgICAgICAgICAgcmV0dXJuIGNsaWVudDsKKworICAgIGlmICghY3JlYXRlKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChzZXJ2ZXItPm5fY2xpZW50cyA+PSBzZXJ2ZXItPm5fY2xpZW50c19tYXgpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgLyogSWYgbm90IGV4aXN0ZW50IHlldCwgY3JlYXRlIGEgbmV3IGVudHJ5ICovCisgICAgY2xpZW50ID0gYXZhaGlfbmV3KENsaWVudCwgMSk7CisgICAgY2xpZW50LT5pZCA9IHNlcnZlci0+Y3VycmVudF9pZCsrOworICAgIGNsaWVudC0+bmFtZSA9IGF2YWhpX3N0cmR1cChuYW1lKTsKKyAgICBjbGllbnQtPmN1cnJlbnRfaWQgPSAwOworICAgIGNsaWVudC0+bl9vYmplY3RzID0gMDsKKworICAgIEFWQUhJX0xMSVNUX0hFQURfSU5JVChFbnRyeUdyb3VwSW5mbywgY2xpZW50LT5lbnRyeV9ncm91cHMpOworICAgIEFWQUhJX0xMSVNUX0hFQURfSU5JVChTeW5jSG9zdE5hbWVSZXNvbHZlckluZm8sIGNsaWVudC0+c3luY19ob3N0X25hbWVfcmVzb2x2ZXJzKTsKKyAgICBBVkFISV9MTElTVF9IRUFEX0lOSVQoQXN5bmNIb3N0TmFtZVJlc29sdmVySW5mbywgY2xpZW50LT5hc3luY19ob3N0X25hbWVfcmVzb2x2ZXJzKTsKKyAgICBBVkFISV9MTElTVF9IRUFEX0lOSVQoU3luY0FkZHJlc3NSZXNvbHZlckluZm8sIGNsaWVudC0+c3luY19hZGRyZXNzX3Jlc29sdmVycyk7CisgICAgQVZBSElfTExJU1RfSEVBRF9JTklUKEFzeW5jQWRkcmVzc1Jlc29sdmVySW5mbywgY2xpZW50LT5hc3luY19hZGRyZXNzX3Jlc29sdmVycyk7CisgICAgQVZBSElfTExJU1RfSEVBRF9JTklUKERvbWFpbkJyb3dzZXJJbmZvLCBjbGllbnQtPmRvbWFpbl9icm93c2Vycyk7CisgICAgQVZBSElfTExJU1RfSEVBRF9JTklUKFNlcnZpY2VUeXBlQnJvd3NlckluZm8sIGNsaWVudC0+c2VydmljZV90eXBlX2Jyb3dzZXJzKTsKKyAgICBBVkFISV9MTElTVF9IRUFEX0lOSVQoU2VydmljZUJyb3dzZXJJbmZvLCBjbGllbnQtPnNlcnZpY2VfYnJvd3NlcnMpOworICAgIEFWQUhJX0xMSVNUX0hFQURfSU5JVChTeW5jU2VydmljZVJlc29sdmVySW5mbywgY2xpZW50LT5zeW5jX3NlcnZpY2VfcmVzb2x2ZXJzKTsKKyAgICBBVkFISV9MTElTVF9IRUFEX0lOSVQoQXN5bmNTZXJ2aWNlUmVzb2x2ZXJJbmZvLCBjbGllbnQtPmFzeW5jX3NlcnZpY2VfcmVzb2x2ZXJzKTsKKyAgICBBVkFISV9MTElTVF9IRUFEX0lOSVQoUmVjb3JkQnJvd3NlckluZm8sIGNsaWVudC0+cmVjb3JkX2Jyb3dzZXJzKTsKKworICAgIEFWQUhJX0xMSVNUX1BSRVBFTkQoQ2xpZW50LCBjbGllbnRzLCBzZXJ2ZXItPmNsaWVudHMsIGNsaWVudCk7CisKKyAgICBzZXJ2ZXItPm5fY2xpZW50cysrOworICAgIGFzc2VydChzZXJ2ZXItPm5fY2xpZW50cyA+IDApOworCisgICAgcmV0dXJuIGNsaWVudDsKK30KKworc3RhdGljIHZvaWQgcmVjb25uZWN0X2NhbGxiYWNrKEF2YWhpVGltZW91dCAqdCwgQVZBSElfR0NDX1VOVVNFRCB2b2lkICp1c2VyZGF0YSkgeworICAgIGFzc2VydCghc2VydmVyLT5idXMpOworCisgICAgaWYgKGRidXNfY29ubmVjdCgpIDwgMCkgeworICAgICAgICBzdHJ1Y3QgdGltZXZhbCB0djsKKyAgICAgICAgYXZhaGlfbG9nX2RlYnVnKF9fRklMRV9fIjogQ29ubmVjdGlvbiBmYWlsZWQsIHJldHJ5aW5nIGluICVpbXMuLi4iLCBSRUNPTk5FQ1RfTVNFQyk7CisgICAgICAgIGF2YWhpX2VsYXBzZV90aW1lKCZ0diwgUkVDT05ORUNUX01TRUMsIDApOworICAgICAgICBzZXJ2ZXItPnBvbGxfYXBpLT50aW1lb3V0X3VwZGF0ZSh0LCAmdHYpOworICAgIH0gZWxzZSB7CisgICAgICAgIGF2YWhpX2xvZ19kZWJ1ZyhfX0ZJTEVfXyI6IFN1Y2Nlc3NmdWxseSByZWNvbm5lY3RlZC4iKTsKKyAgICAgICAgc2VydmVyLT5wb2xsX2FwaS0+dGltZW91dF91cGRhdGUodCwgTlVMTCk7CisgICAgfQorfQorCitzdGF0aWMgREJ1c0hhbmRsZXJSZXN1bHQgbXNnX3NpZ25hbF9maWx0ZXJfaW1wbChBVkFISV9HQ0NfVU5VU0VEIERCdXNDb25uZWN0aW9uICpjLCBEQnVzTWVzc2FnZSAqbSwgQVZBSElfR0NDX1VOVVNFRCB2b2lkICp1c2VyZGF0YSkgeworICAgIERCdXNFcnJvciBlcnJvcjsKKworICAgIGRidXNfZXJyb3JfaW5pdCgmZXJyb3IpOworCisvKiAgICAgYXZhaGlfbG9nX2RlYnVnKF9fRklMRV9fIjogaW50ZXJmYWNlPSVzLCBwYXRoPSVzLCBtZW1iZXI9JXMiLCAqLworLyogICAgICAgICAgICAgICAgICAgICBkYnVzX21lc3NhZ2VfZ2V0X2ludGVyZmFjZShtKSwgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgZGJ1c19tZXNzYWdlX2dldF9wYXRoKG0pLCAqLworLyogICAgICAgICAgICAgICAgICAgICBkYnVzX21lc3NhZ2VfZ2V0X21lbWJlcihtKSk7ICovCisKKyAgICBpZiAoZGJ1c19tZXNzYWdlX2lzX3NpZ25hbChtLCBEQlVTX0lOVEVSRkFDRV9MT0NBTCwgIkRpc2Nvbm5lY3RlZCIpKSB7CisgICAgICAgIHN0cnVjdCB0aW1ldmFsIHR2OworCisgICAgICAgIGlmIChzZXJ2ZXItPnJlY29ubmVjdCkgeworICAgICAgICAgICAgYXZhaGlfbG9nX3dhcm4oIkRpc2Nvbm5lY3RlZCBmcm9tIEQtQnVzLCB0cnlpbmcgdG8gcmVjb25uZWN0IGluICVpbXMuLi4iLCBSRUNPTk5FQ1RfTVNFQyk7CisKKyAgICAgICAgICAgIGRidXNfZGlzY29ubmVjdCgpOworCisgICAgICAgICAgICBhdmFoaV9lbGFwc2VfdGltZSgmdHYsIFJFQ09OTkVDVF9NU0VDLCAwKTsKKworICAgICAgICAgICAgaWYgKHNlcnZlci0+cmVjb25uZWN0X3RpbWVvdXQpCisgICAgICAgICAgICAgICAgc2VydmVyLT5wb2xsX2FwaS0+dGltZW91dF91cGRhdGUoc2VydmVyLT5yZWNvbm5lY3RfdGltZW91dCwgJnR2KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzZXJ2ZXItPnJlY29ubmVjdF90aW1lb3V0ID0gc2VydmVyLT5wb2xsX2FwaS0+dGltZW91dF9uZXcoc2VydmVyLT5wb2xsX2FwaSwgJnR2LCByZWNvbm5lY3RfY2FsbGJhY2ssIE5VTEwpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXZhaGlfbG9nX3dhcm4oIkRpc2Nvbm5lY3RlZCBmcm9tIEQtQnVzLCBleGl0aW5nLiIpOworICAgICAgICAgICAgcmFpc2UoU0lHVEVSTSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gREJVU19IQU5ETEVSX1JFU1VMVF9IQU5ETEVEOworCisgICAgfSBlbHNlIGlmIChkYnVzX21lc3NhZ2VfaXNfc2lnbmFsKG0sIERCVVNfSU5URVJGQUNFX0RCVVMsICJOYW1lQWNxdWlyZWQiKSkgeworICAgICAgICBjaGFyICpuYW1lOworCisgICAgICAgIGlmICghZGJ1c19tZXNzYWdlX2dldF9hcmdzKG0sICZlcnJvciwgREJVU19UWVBFX1NUUklORywgJm5hbWUsIERCVVNfVFlQRV9JTlZBTElEKSkgeworICAgICAgICAgICAgYXZhaGlfbG9nX3dhcm4oIkVycm9yIHBhcnNpbmcgTmFtZUFjcXVpcmVkIG1lc3NhZ2UiKTsKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQorCisvKiAgICAgICAgIGF2YWhpX2xvZ19pbmZvKF9fRklMRV9fIjogbmFtZSBhY3F1aXJlZCAoJXMpIiwgbmFtZSk7ICovCisgICAgICAgIHJldHVybiBEQlVTX0hBTkRMRVJfUkVTVUxUX0hBTkRMRUQ7CisKKyAgICB9IGVsc2UgaWYgKGRidXNfbWVzc2FnZV9pc19zaWduYWwobSwgREJVU19JTlRFUkZBQ0VfREJVUywgIk5hbWVPd25lckNoYW5nZWQiKSkgeworICAgICAgICBjaGFyICpuYW1lLCAqb2xkLCAqbmV3OworCisgICAgICAgIGlmICghZGJ1c19tZXNzYWdlX2dldF9hcmdzKG0sICZlcnJvciwgREJVU19UWVBFX1NUUklORywgJm5hbWUsIERCVVNfVFlQRV9TVFJJTkcsICZvbGQsIERCVVNfVFlQRV9TVFJJTkcsICZuZXcsIERCVVNfVFlQRV9JTlZBTElEKSkgeworICAgICAgICAgICAgYXZhaGlfbG9nX3dhcm4oIkVycm9yIHBhcnNpbmcgTmFtZU93bmVyQ2hhbmdlZCBtZXNzYWdlIik7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKworICAgICAgICBpZiAoISpuZXcpIHsKKyAgICAgICAgICAgIENsaWVudCAqY2xpZW50OworCisgICAgICAgICAgICBpZiAoKGNsaWVudCA9IGNsaWVudF9nZXQobmFtZSwgRkFMU0UpKSkgeworICAgICAgICAgICAgICAgIGF2YWhpX2xvZ19kZWJ1ZyhfX0ZJTEVfXyI6IGNsaWVudCAlcyB2YW5pc2hlZC4iLCBuYW1lKTsKKyAgICAgICAgICAgICAgICBjbGllbnRfZnJlZShjbGllbnQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCitmYWlsOgorICAgIGlmIChkYnVzX2Vycm9yX2lzX3NldCgmZXJyb3IpKQorICAgICAgICBkYnVzX2Vycm9yX2ZyZWUoJmVycm9yKTsKKworICAgIHJldHVybiBEQlVTX0hBTkRMRVJfUkVTVUxUX05PVF9ZRVRfSEFORExFRDsKK30KKworc3RhdGljIERCdXNIYW5kbGVyUmVzdWx0IG1zZ19zZXJ2ZXJfaW1wbChEQnVzQ29ubmVjdGlvbiAqYywgREJ1c01lc3NhZ2UgKm0sIEFWQUhJX0dDQ19VTlVTRUQgdm9pZCAqdXNlcmRhdGEpIHsKKyAgICBEQnVzRXJyb3IgZXJyb3I7CisKKyAgICBkYnVzX2Vycm9yX2luaXQoJmVycm9yKTsKKworICAgIGF2YWhpX2xvZ19kZWJ1ZyhfX0ZJTEVfXyI6IGludGVyZmFjZT0lcywgcGF0aD0lcywgbWVtYmVyPSVzIiwKKyAgICAgICAgICAgICAgICAgICAgZGJ1c19tZXNzYWdlX2dldF9pbnRlcmZhY2UobSksCisgICAgICAgICAgICAgICAgICAgIGRidXNfbWVzc2FnZV9nZXRfcGF0aChtKSwKKyAgICAgICAgICAgICAgICAgICAgZGJ1c19tZXNzYWdlX2dldF9tZW1iZXIobSkpOworCisgICAgaWYgKGRidXNfbWVzc2FnZV9pc19tZXRob2RfY2FsbChtLCBEQlVTX0lOVEVSRkFDRV9JTlRST1NQRUNUQUJMRSwgIkludHJvc3BlY3QiKSkKKyAgICAgICAgcmV0dXJuIGF2YWhpX2RidXNfaGFuZGxlX2ludHJvc3BlY3QoYywgbSwgIm9yZy5mcmVlZGVza3RvcC5BdmFoaS5TZXJ2ZXIueG1sIik7CisKKyAgICBlbHNlIGlmIChkYnVzX21lc3NhZ2VfaXNfbWV0aG9kX2NhbGwobSwgQVZBSElfREJVU19JTlRFUkZBQ0VfU0VSVkVSLCAiR2V0SG9zdE5hbWUiKSkgeworCisgICAgICAgIGlmICghZGJ1c19tZXNzYWdlX2dldF9hcmdzKG0sICZlcnJvciwgREJVU19UWVBFX0lOVkFMSUQpKSB7CisgICAgICAgICAgICBhdmFoaV9sb2dfd2FybigiRXJyb3IgcGFyc2luZyBTZXJ2ZXI6OkdldEhvc3ROYW1lIG1lc3NhZ2UiKTsKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBhdmFoaV9kYnVzX3Jlc3BvbmRfc3RyaW5nKGMsIG0sIGF2YWhpX3NlcnZlcl9nZXRfaG9zdF9uYW1lKGF2YWhpX3NlcnZlcikpOworCisgICAgfSBlbHNlIGlmIChkYnVzX21lc3NhZ2VfaXNfbWV0aG9kX2NhbGwobSwgQVZBSElfREJVU19JTlRFUkZBQ0VfU0VSVkVSLCAiU2V0SG9zdE5hbWUiKSkgeworCisgICAgICAgIGNoYXIgKm5hbWU7CisKKyAgICAgICAgaWYgKCFkYnVzX21lc3NhZ2VfZ2V0X2FyZ3MobSwgJmVycm9yLCBEQlVTX1RZUEVfU1RSSU5HLCAmbmFtZSwgREJVU19UWVBFX0lOVkFMSUQpKSB7CisgICAgICAgICAgICBhdmFoaV9sb2dfd2FybigiRXJyb3IgcGFyc2luZyBTZXJ2ZXI6OlNldEhvc3ROYW1lIG1lc3NhZ2UiKTsKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhdmFoaV9zZXJ2ZXJfc2V0X2hvc3RfbmFtZShhdmFoaV9zZXJ2ZXIsIG5hbWUpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBhdmFoaV9kYnVzX3Jlc3BvbmRfZXJyb3IoYywgbSwgYXZhaGlfc2VydmVyX2Vycm5vKGF2YWhpX3NlcnZlciksIE5VTEwpOworCisgICAgICAgIGF2YWhpX2xvZ19pbmZvKCJDaGFuZ2luZyBob3N0IG5hbWUgdG8gJyVzJy4iLCBuYW1lKTsKKworICAgICAgICByZXR1cm4gYXZhaGlfZGJ1c19yZXNwb25kX29rKGMsIG0pOworCisgICAgfSBlbHNlIGlmIChkYnVzX21lc3NhZ2VfaXNfbWV0aG9kX2NhbGwobSwgQVZBSElfREJVU19JTlRFUkZBQ0VfU0VSVkVSLCAiR2V0RG9tYWluTmFtZSIpKSB7CisKKyAgICAgICAgaWYgKCFkYnVzX21lc3NhZ2VfZ2V0X2FyZ3MobSwgJmVycm9yLCBEQlVTX1RZUEVfSU5WQUxJRCkpIHsKKyAgICAgICAgICAgIGF2YWhpX2xvZ193YXJuKCJFcnJvciBwYXJzaW5nIFNlcnZlcjo6R2V0RG9tYWluTmFtZSBtZXNzYWdlIik7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gYXZhaGlfZGJ1c19yZXNwb25kX3N0cmluZyhjLCBtLCBhdmFoaV9zZXJ2ZXJfZ2V0X2RvbWFpbl9uYW1lKGF2YWhpX3NlcnZlcikpOworCisgICAgfSBlbHNlIGlmIChkYnVzX21lc3NhZ2VfaXNfbWV0aG9kX2NhbGwobSwgQVZBSElfREJVU19JTlRFUkZBQ0VfU0VSVkVSLCAiR2V0SG9zdE5hbWVGcWRuIikpIHsKKworICAgICAgICBpZiAoIShkYnVzX21lc3NhZ2VfZ2V0X2FyZ3MobSwgJmVycm9yLCBEQlVTX1RZUEVfSU5WQUxJRCkpKSB7CisgICAgICAgICAgICBhdmFoaV9sb2dfd2FybigiRXJyb3IgcGFyc2luZyBTZXJ2ZXI6OkdldEhvc3ROYW1lRnFkbiBtZXNzYWdlIik7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gYXZhaGlfZGJ1c19yZXNwb25kX3N0cmluZyhjLCBtLCBhdmFoaV9zZXJ2ZXJfZ2V0X2hvc3RfbmFtZV9mcWRuKGF2YWhpX3NlcnZlcikpOworCisgICAgfSBlbHNlIGlmIChkYnVzX21lc3NhZ2VfaXNfbWV0aG9kX2NhbGwobSwgQVZBSElfREJVU19JTlRFUkZBQ0VfU0VSVkVSLCAiSXNOU1NTdXBwb3J0QXZhaWxhYmxlIikpIHsKKyAgICAgICAgaWYgKCEoZGJ1c19tZXNzYWdlX2dldF9hcmdzKG0sICZlcnJvciwgREJVU19UWVBFX0lOVkFMSUQpKSkgeworICAgICAgICAgICAgYXZhaGlfbG9nX3dhcm4oIkVycm9yIHBhcnNpbmcgU2VydmVyOjpJc05TU1N1cHBvcnRBdmFpbGFibGUgbWVzc2FnZSIpOworICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGF2YWhpX2RidXNfcmVzcG9uZF9ib29sZWFuKGMsIG0sIG5zc19zdXBwb3J0KTsKKworICAgIH0gZWxzZSBpZiAoZGJ1c19tZXNzYWdlX2lzX21ldGhvZF9jYWxsKG0sIEFWQUhJX0RCVVNfSU5URVJGQUNFX1NFUlZFUiwgIkdldFZlcnNpb25TdHJpbmciKSkgeworCisgICAgICAgIGlmICghKGRidXNfbWVzc2FnZV9nZXRfYXJncyhtLCAmZXJyb3IsIERCVVNfVFlQRV9JTlZBTElEKSkpIHsKKyAgICAgICAgICAgIGF2YWhpX2xvZ193YXJuKCJFcnJvciBwYXJzaW5nIFNlcnZlcjo6R2V0VmVyc2lvblN0cmluZyBtZXNzYWdlIik7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gYXZhaGlfZGJ1c19yZXNwb25kX3N0cmluZyhjLCBtLCBQQUNLQUdFX1NUUklORyk7CisKKyAgICB9IGVsc2UgaWYgKGRidXNfbWVzc2FnZV9pc19tZXRob2RfY2FsbChtLCBBVkFISV9EQlVTX0lOVEVSRkFDRV9TRVJWRVIsICJHZXRBUElWZXJzaW9uIikpIHsKKworICAgICAgICBpZiAoIShkYnVzX21lc3NhZ2VfZ2V0X2FyZ3MobSwgJmVycm9yLCBEQlVTX1RZUEVfSU5WQUxJRCkpKSB7CisgICAgICAgICAgICBhdmFoaV9sb2dfd2FybigiRXJyb3IgcGFyc2luZyBTZXJ2ZXI6OkdldEFQSVZlcnNpb24gbWVzc2FnZSIpOworICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGF2YWhpX2RidXNfcmVzcG9uZF91aW50MzIoYywgbSwgQVZBSElfREJVU19BUElfVkVSU0lPTik7CisKKyAgICB9IGVsc2UgaWYgKGRidXNfbWVzc2FnZV9pc19tZXRob2RfY2FsbChtLCBBVkFISV9EQlVTX0lOVEVSRkFDRV9TRVJWRVIsICJHZXRTdGF0ZSIpKSB7CisgICAgICAgIEF2YWhpU2VydmVyU3RhdGUgc3RhdGU7CisKKyAgICAgICAgaWYgKCEoZGJ1c19tZXNzYWdlX2dldF9hcmdzKG0sICZlcnJvciwgREJVU19UWVBFX0lOVkFMSUQpKSkgeworICAgICAgICAgICAgYXZhaGlfbG9nX3dhcm4oIkVycm9yIHBhcnNpbmcgU2VydmVyOjpHZXRTdGF0ZSBtZXNzYWdlIik7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKworICAgICAgICBzdGF0ZSA9IGF2YWhpX3NlcnZlcl9nZXRfc3RhdGUoYXZhaGlfc2VydmVyKTsKKyAgICAgICAgcmV0dXJuIGF2YWhpX2RidXNfcmVzcG9uZF9pbnQzMihjLCBtLCAoaW50MzJfdCkgc3RhdGUpOworCisgICAgfSBlbHNlIGlmIChkYnVzX21lc3NhZ2VfaXNfbWV0aG9kX2NhbGwobSwgQVZBSElfREJVU19JTlRFUkZBQ0VfU0VSVkVSLCAiR2V0TG9jYWxTZXJ2aWNlQ29va2llIikpIHsKKworICAgICAgICBpZiAoIShkYnVzX21lc3NhZ2VfZ2V0X2FyZ3MobSwgJmVycm9yLCBEQlVTX1RZUEVfSU5WQUxJRCkpKSB7CisgICAgICAgICAgICBhdmFoaV9sb2dfd2FybigiRXJyb3IgcGFyc2luZyBTZXJ2ZXI6OkdldExvY2FsU2VydmljZUNvb2tpZSBtZXNzYWdlIik7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gYXZhaGlfZGJ1c19yZXNwb25kX3VpbnQzMihjLCBtLCBhdmFoaV9zZXJ2ZXJfZ2V0X2xvY2FsX3NlcnZpY2VfY29va2llKGF2YWhpX3NlcnZlcikpOworCisgICAgfSBlbHNlIGlmIChkYnVzX21lc3NhZ2VfaXNfbWV0aG9kX2NhbGwobSwgQVZBSElfREJVU19JTlRFUkZBQ0VfU0VSVkVSLCAiR2V0TmV0d29ya0ludGVyZmFjZU5hbWVCeUluZGV4IikpIHsKKyAgICAgICAgaW50MzJfdCBpZHg7CisgICAgICAgIGNoYXIgbmFtZVtJRl9OQU1FU0laRV07CisKKyAgICAgICAgaWYgKCEoZGJ1c19tZXNzYWdlX2dldF9hcmdzKG0sICZlcnJvciwgREJVU19UWVBFX0lOVDMyLCAmaWR4LCBEQlVTX1RZUEVfSU5WQUxJRCkpKSB7CisgICAgICAgICAgICBhdmFoaV9sb2dfd2FybigiRXJyb3IgcGFyc2luZyBTZXJ2ZXI6OkdldE5ldHdvcmtJbnRlcmZhY2VOYW1lQnlJbmRleCBtZXNzYWdlIik7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKworI2lmZGVmIFZBTEdSSU5EX1dPUktBUk9VTkQKKyAgICAgICAgcmV0dXJuIHJlc3BvbmRfc3RyaW5nKGMsIG0sICJibGFoIik7CisjZWxzZQorICAgICAgICBpZiAoKCFpZl9pbmRleHRvbmFtZShpZHgsIG5hbWUpKSkgeworICAgICAgICAgICAgY2hhciB0eHRbMjU2XTsKKyAgICAgICAgICAgIHNucHJpbnRmKHR4dCwgc2l6ZW9mKHR4dCksICJPUyBFcnJvcjogJXMiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgcmV0dXJuIGF2YWhpX2RidXNfcmVzcG9uZF9lcnJvcihjLCBtLCBBVkFISV9FUlJfT1MsIHR4dCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gYXZhaGlfZGJ1c19yZXNwb25kX3N0cmluZyhjLCBtLCBuYW1lKTsKKyNlbmRpZgorCisgICAgfSBlbHNlIGlmIChkYnVzX21lc3NhZ2VfaXNfbWV0aG9kX2NhbGwobSwgQVZBSElfREJVU19JTlRFUkZBQ0VfU0VSVkVSLCAiR2V0TmV0d29ya0ludGVyZmFjZUluZGV4QnlOYW1lIikpIHsKKyAgICAgICAgY2hhciAqbjsKKyAgICAgICAgaW50MzJfdCBpZHg7CisKKyAgICAgICAgaWYgKCEoZGJ1c19tZXNzYWdlX2dldF9hcmdzKG0sICZlcnJvciwgREJVU19UWVBFX1NUUklORywgJm4sIERCVVNfVFlQRV9JTlZBTElEKSkgfHwgIW4pIHsKKyAgICAgICAgICAgIGF2YWhpX2xvZ193YXJuKCJFcnJvciBwYXJzaW5nIFNlcnZlcjo6R2V0TmV0d29ya0ludGVyZmFjZUluZGV4QnlOYW1lIG1lc3NhZ2UiKTsKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQorCisjaWZkZWYgVkFMR1JJTkRfV09SS0FST1VORAorICAgICAgICByZXR1cm4gcmVzcG9uZF9pbnQzMihjLCBtLCAxKTsKKyNlbHNlCisgICAgICAgIGlmICghKGlkeCA9IGlmX25hbWV0b2luZGV4KG4pKSkgeworICAgICAgICAgICAgY2hhciB0eHRbMjU2XTsKKyAgICAgICAgICAgIHNucHJpbnRmKHR4dCwgc2l6ZW9mKHR4dCksICJPUyBFcnJvcjogJXMiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgcmV0dXJuIGF2YWhpX2RidXNfcmVzcG9uZF9lcnJvcihjLCBtLCBBVkFISV9FUlJfT1MsIHR4dCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gYXZhaGlfZGJ1c19yZXNwb25kX2ludDMyKGMsIG0sIGlkeCk7CisjZW5kaWYKKworICAgIH0gZWxzZSBpZiAoZGJ1c19tZXNzYWdlX2lzX21ldGhvZF9jYWxsKG0sIEFWQUhJX0RCVVNfSU5URVJGQUNFX1NFUlZFUiwgIkdldEFsdGVybmF0aXZlSG9zdE5hbWUiKSkgeworICAgICAgICBjaGFyICpuLCAqIHQ7CisKKyAgICAgICAgaWYgKCEoZGJ1c19tZXNzYWdlX2dldF9hcmdzKG0sICZlcnJvciwgREJVU19UWVBFX1NUUklORywgJm4sIERCVVNfVFlQRV9JTlZBTElEKSkgfHwgIW4pIHsKKyAgICAgICAgICAgIGF2YWhpX2xvZ193YXJuKCJFcnJvciBwYXJzaW5nIFNlcnZlcjo6R2V0QWx0ZXJuYXRpdmVIb3N0TmFtZSBtZXNzYWdlIik7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKworICAgICAgICB0ID0gYXZhaGlfYWx0ZXJuYXRpdmVfaG9zdF9uYW1lKG4pOworICAgICAgICBhdmFoaV9kYnVzX3Jlc3BvbmRfc3RyaW5nKGMsIG0sIHQpOworICAgICAgICBhdmFoaV9mcmVlKHQpOworCisgICAgICAgIHJldHVybiBEQlVTX0hBTkRMRVJfUkVTVUxUX0hBTkRMRUQ7CisKKyAgICB9IGVsc2UgaWYgKGRidXNfbWVzc2FnZV9pc19tZXRob2RfY2FsbChtLCBBVkFISV9EQlVTX0lOVEVSRkFDRV9TRVJWRVIsICJHZXRBbHRlcm5hdGl2ZVNlcnZpY2VOYW1lIikpIHsKKyAgICAgICAgY2hhciAqbiwgKnQ7CisKKyAgICAgICAgaWYgKCEoZGJ1c19tZXNzYWdlX2dldF9hcmdzKG0sICZlcnJvciwgREJVU19UWVBFX1NUUklORywgJm4sIERCVVNfVFlQRV9JTlZBTElEKSkgfHwgIW4pIHsKKyAgICAgICAgICAgIGF2YWhpX2xvZ193YXJuKCJFcnJvciBwYXJzaW5nIFNlcnZlcjo6R2V0QWx0ZXJuYXRpdmVTZXJ2aWNlTmFtZSBtZXNzYWdlIik7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKworICAgICAgICB0ID0gYXZhaGlfYWx0ZXJuYXRpdmVfc2VydmljZV9uYW1lKG4pOworICAgICAgICBhdmFoaV9kYnVzX3Jlc3BvbmRfc3RyaW5nKGMsIG0sIHQpOworICAgICAgICBhdmFoaV9mcmVlKHQpOworCisgICAgICAgIHJldHVybiBEQlVTX0hBTkRMRVJfUkVTVUxUX0hBTkRMRUQ7CisKKyAgICB9IGVsc2UgaWYgKGRidXNfbWVzc2FnZV9pc19tZXRob2RfY2FsbChtLCBBVkFISV9EQlVTX0lOVEVSRkFDRV9TRVJWRVIsICJFbnRyeUdyb3VwTmV3IikpIHsKKyAgICAgICAgQ2xpZW50ICpjbGllbnQ7CisgICAgICAgIEVudHJ5R3JvdXBJbmZvICppOworICAgICAgICBzdGF0aWMgY29uc3QgREJ1c09iamVjdFBhdGhWVGFibGUgdnRhYmxlID0geworICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIGF2YWhpX2RidXNfbXNnX2VudHJ5X2dyb3VwX2ltcGwsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBOVUxMCisgICAgICAgIH07CisKKyAgICAgICAgaWYgKCFkYnVzX21lc3NhZ2VfZ2V0X2FyZ3MobSwgJmVycm9yLCBEQlVTX1RZUEVfSU5WQUxJRCkpIHsKKyAgICAgICAgICAgIGF2YWhpX2xvZ193YXJuKCJFcnJvciBwYXJzaW5nIFNlcnZlcjo6RW50cnlHcm91cE5ldyBtZXNzYWdlIik7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2VydmVyLT5kaXNhYmxlX3VzZXJfc2VydmljZV9wdWJsaXNoaW5nKQorICAgICAgICAgICAgcmV0dXJuIGF2YWhpX2RidXNfcmVzcG9uZF9lcnJvcihjLCBtLCBBVkFISV9FUlJfTk9UX1BFUk1JVFRFRCwgTlVMTCk7CisKKyAgICAgICAgaWYgKCEoY2xpZW50ID0gY2xpZW50X2dldChkYnVzX21lc3NhZ2VfZ2V0X3NlbmRlcihtKSwgVFJVRSkpKSB7CisgICAgICAgICAgICBhdmFoaV9sb2dfd2FybigiVG9vIG1hbnkgY2xpZW50cywgY2xpZW50IHJlcXVlc3QgZmFpbGVkLiIpOworICAgICAgICAgICAgcmV0dXJuIGF2YWhpX2RidXNfcmVzcG9uZF9lcnJvcihjLCBtLCBBVkFISV9FUlJfVE9PX01BTllfQ0xJRU5UUywgTlVMTCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY2xpZW50LT5uX29iamVjdHMgPj0gc2VydmVyLT5uX29iamVjdHNfcGVyX2NsaWVudF9tYXgpIHsKKyAgICAgICAgICAgIGF2YWhpX2xvZ193YXJuKCJUb28gbWFueSBvYmplY3RzIGZvciBjbGllbnQgJyVzJywgY2xpZW50IHJlcXVlc3QgZmFpbGVkLiIsIGNsaWVudC0+bmFtZSk7CisgICAgICAgICAgICByZXR1cm4gYXZhaGlfZGJ1c19yZXNwb25kX2Vycm9yKGMsIG0sIEFWQUhJX0VSUl9UT09fTUFOWV9PQkpFQ1RTLCBOVUxMKTsKKyAgICAgICAgfQorCisgICAgICAgIGkgPSBhdmFoaV9uZXcoRW50cnlHcm91cEluZm8sIDEpOworICAgICAgICBpLT5pZCA9ICsrY2xpZW50LT5jdXJyZW50X2lkOworICAgICAgICBpLT5jbGllbnQgPSBjbGllbnQ7CisgICAgICAgIGktPnBhdGggPSBOVUxMOworICAgICAgICBpLT5uX2VudHJpZXMgPSAwOworICAgICAgICBBVkFISV9MTElTVF9QUkVQRU5EKEVudHJ5R3JvdXBJbmZvLCBlbnRyeV9ncm91cHMsIGNsaWVudC0+ZW50cnlfZ3JvdXBzLCBpKTsKKyAgICAgICAgY2xpZW50LT5uX29iamVjdHMrKzsKKworICAgICAgICBpZiAoIShpLT5lbnRyeV9ncm91cCA9IGF2YWhpX3NfZW50cnlfZ3JvdXBfbmV3KGF2YWhpX3NlcnZlciwgYXZhaGlfZGJ1c19lbnRyeV9ncm91cF9jYWxsYmFjaywgaSkpKSB7CisgICAgICAgICAgICBhdmFoaV9kYnVzX2VudHJ5X2dyb3VwX2ZyZWUoaSk7CisgICAgICAgICAgICByZXR1cm4gYXZhaGlfZGJ1c19yZXNwb25kX2Vycm9yKGMsIG0sIGF2YWhpX3NlcnZlcl9lcnJubyhhdmFoaV9zZXJ2ZXIpLCBOVUxMKTsKKyAgICAgICAgfQorCisgICAgICAgIGktPnBhdGggPSBhdmFoaV9zdHJkdXBfcHJpbnRmKCIvQ2xpZW50JXUvRW50cnlHcm91cCV1IiwgY2xpZW50LT5pZCwgaS0+aWQpOworICAgICAgICBkYnVzX2Nvbm5lY3Rpb25fcmVnaXN0ZXJfb2JqZWN0X3BhdGgoYywgaS0+cGF0aCwgJnZ0YWJsZSwgaSk7CisgICAgICAgIHJldHVybiBhdmFoaV9kYnVzX3Jlc3BvbmRfcGF0aChjLCBtLCBpLT5wYXRoKTsKKworICAgIH0gZWxzZSBpZiAoZGJ1c19tZXNzYWdlX2lzX21ldGhvZF9jYWxsKG0sIEFWQUhJX0RCVVNfSU5URVJGQUNFX1NFUlZFUiwgIlJlc29sdmVIb3N0TmFtZSIpKSB7CisgICAgICAgIENsaWVudCAqY2xpZW50OworICAgICAgICBpbnQzMl90IGludGVyZmFjZSwgcHJvdG9jb2wsIGFwcm90b2NvbDsKKyAgICAgICAgdWludDMyX3QgZmxhZ3M7CisgICAgICAgIGNoYXIgKm5hbWU7CisgICAgICAgIFN5bmNIb3N0TmFtZVJlc29sdmVySW5mbyAqaTsKKworICAgICAgICBpZiAoIWRidXNfbWVzc2FnZV9nZXRfYXJncygKKyAgICAgICAgICAgICAgICBtLCAmZXJyb3IsCisgICAgICAgICAgICAgICAgREJVU19UWVBFX0lOVDMyLCAmaW50ZXJmYWNlLAorICAgICAgICAgICAgICAgIERCVVNfVFlQRV9JTlQzMiwgJnByb3RvY29sLAorICAgICAgICAgICAgICAgIERCVVNfVFlQRV9TVFJJTkcsICZuYW1lLAorICAgICAgICAgICAgICAgIERCVVNfVFlQRV9JTlQzMiwgJmFwcm90b2NvbCwKKyAgICAgICAgICAgICAgICBEQlVTX1RZUEVfVUlOVDMyLCAmZmxhZ3MsCisgICAgICAgICAgICAgICAgREJVU19UWVBFX0lOVkFMSUQpIHx8ICFuYW1lKSB7CisgICAgICAgICAgICBhdmFoaV9sb2dfd2FybigiRXJyb3IgcGFyc2luZyBTZXJ2ZXI6OlJlc29sdmVIb3N0TmFtZSBtZXNzYWdlIik7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIShjbGllbnQgPSBjbGllbnRfZ2V0KGRidXNfbWVzc2FnZV9nZXRfc2VuZGVyKG0pLCBUUlVFKSkpIHsKKyAgICAgICAgICAgIGF2YWhpX2xvZ193YXJuKCJUb28gbWFueSBjbGllbnRzLCBjbGllbnQgcmVxdWVzdCBmYWlsZWQuIik7CisgICAgICAgICAgICByZXR1cm4gYXZhaGlfZGJ1c19yZXNwb25kX2Vycm9yKGMsIG0sIEFWQUhJX0VSUl9UT09fTUFOWV9DTElFTlRTLCBOVUxMKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjbGllbnQtPm5fb2JqZWN0cyA+PSBzZXJ2ZXItPm5fb2JqZWN0c19wZXJfY2xpZW50X21heCkgeworICAgICAgICAgICAgYXZhaGlfbG9nX3dhcm4oIlRvbyBtYW55IG9iamVjdHMgZm9yIGNsaWVudCAnJXMnLCBjbGllbnQgcmVxdWVzdCBmYWlsZWQuIiwgY2xpZW50LT5uYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBhdmFoaV9kYnVzX3Jlc3BvbmRfZXJyb3IoYywgbSwgQVZBSElfRVJSX1RPT19NQU5ZX09CSkVDVFMsIE5VTEwpOworICAgICAgICB9CisKKyAgICAgICAgaSA9IGF2YWhpX25ldyhTeW5jSG9zdE5hbWVSZXNvbHZlckluZm8sIDEpOworICAgICAgICBpLT5jbGllbnQgPSBjbGllbnQ7CisgICAgICAgIGktPm1lc3NhZ2UgPSBkYnVzX21lc3NhZ2VfcmVmKG0pOworICAgICAgICBBVkFISV9MTElTVF9QUkVQRU5EKFN5bmNIb3N0TmFtZVJlc29sdmVySW5mbywgc3luY19ob3N0X25hbWVfcmVzb2x2ZXJzLCBjbGllbnQtPnN5bmNfaG9zdF9uYW1lX3Jlc29sdmVycywgaSk7CisgICAgICAgIGNsaWVudC0+bl9vYmplY3RzKys7CisKKyAgICAgICAgaWYgKCEoaS0+aG9zdF9uYW1lX3Jlc29sdmVyID0gYXZhaGlfc19ob3N0X25hbWVfcmVzb2x2ZXJfbmV3KGF2YWhpX3NlcnZlciwgKEF2YWhpSWZJbmRleCkgaW50ZXJmYWNlLCAoQXZhaGlQcm90b2NvbCkgcHJvdG9jb2wsIG5hbWUsIChBdmFoaVByb3RvY29sKSBhcHJvdG9jb2wsIChBdmFoaUxvb2t1cEZsYWdzKSBmbGFncywgYXZhaGlfZGJ1c19zeW5jX2hvc3RfbmFtZV9yZXNvbHZlcl9jYWxsYmFjaywgaSkpKSB7CisgICAgICAgICAgICBhdmFoaV9kYnVzX3N5bmNfaG9zdF9uYW1lX3Jlc29sdmVyX2ZyZWUoaSk7CisgICAgICAgICAgICByZXR1cm4gYXZhaGlfZGJ1c19yZXNwb25kX2Vycm9yKGMsIG0sIGF2YWhpX3NlcnZlcl9lcnJubyhhdmFoaV9zZXJ2ZXIpLCBOVUxMKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBEQlVTX0hBTkRMRVJfUkVTVUxUX0hBTkRMRUQ7CisKKyAgICB9IGVsc2UgaWYgKGRidXNfbWVzc2FnZV9pc19tZXRob2RfY2FsbChtLCBBVkFISV9EQlVTX0lOVEVSRkFDRV9TRVJWRVIsICJSZXNvbHZlQWRkcmVzcyIpKSB7CisgICAgICAgIENsaWVudCAqY2xpZW50OworICAgICAgICBpbnQzMl90IGludGVyZmFjZSwgcHJvdG9jb2w7CisgICAgICAgIHVpbnQzMl90IGZsYWdzOworICAgICAgICBjaGFyICphZGRyZXNzOworICAgICAgICBTeW5jQWRkcmVzc1Jlc29sdmVySW5mbyAqaTsKKyAgICAgICAgQXZhaGlBZGRyZXNzIGE7CisKKyAgICAgICAgaWYgKCFkYnVzX21lc3NhZ2VfZ2V0X2FyZ3MoCisgICAgICAgICAgICAgICAgbSwgJmVycm9yLAorICAgICAgICAgICAgICAgIERCVVNfVFlQRV9JTlQzMiwgJmludGVyZmFjZSwKKyAgICAgICAgICAgICAgICBEQlVTX1RZUEVfSU5UMzIsICZwcm90b2NvbCwKKyAgICAgICAgICAgICAgICBEQlVTX1RZUEVfU1RSSU5HLCAmYWRkcmVzcywKKyAgICAgICAgICAgICAgICBEQlVTX1RZUEVfVUlOVDMyLCAmZmxhZ3MsCisgICAgICAgICAgICAgICAgREJVU19UWVBFX0lOVkFMSUQpIHx8ICFhZGRyZXNzKSB7CisgICAgICAgICAgICBhdmFoaV9sb2dfd2FybigiRXJyb3IgcGFyc2luZyBTZXJ2ZXI6OlJlc29sdmVBZGRyZXNzIG1lc3NhZ2UiKTsKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghYXZhaGlfYWRkcmVzc19wYXJzZShhZGRyZXNzLCBBVkFISV9QUk9UT19VTlNQRUMsICZhKSkKKyAgICAgICAgICAgIHJldHVybiBhdmFoaV9kYnVzX3Jlc3BvbmRfZXJyb3IoYywgbSwgQVZBSElfRVJSX0lOVkFMSURfQUREUkVTUywgTlVMTCk7CisKKyAgICAgICAgaWYgKCEoY2xpZW50ID0gY2xpZW50X2dldChkYnVzX21lc3NhZ2VfZ2V0X3NlbmRlcihtKSwgVFJVRSkpKSB7CisgICAgICAgICAgICBhdmFoaV9sb2dfd2FybigiVG9vIG1hbnkgY2xpZW50cywgY2xpZW50IHJlcXVlc3QgZmFpbGVkLiIpOworICAgICAgICAgICAgcmV0dXJuIGF2YWhpX2RidXNfcmVzcG9uZF9lcnJvcihjLCBtLCBBVkFISV9FUlJfVE9PX01BTllfQ0xJRU5UUywgTlVMTCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY2xpZW50LT5uX29iamVjdHMgPj0gc2VydmVyLT5uX29iamVjdHNfcGVyX2NsaWVudF9tYXgpIHsKKyAgICAgICAgICAgIGF2YWhpX2xvZ193YXJuKCJUb28gbWFueSBvYmplY3RzIGZvciBjbGllbnQgJyVzJywgY2xpZW50IHJlcXVlc3QgZmFpbGVkLiIsIGNsaWVudC0+bmFtZSk7CisgICAgICAgICAgICByZXR1cm4gYXZhaGlfZGJ1c19yZXNwb25kX2Vycm9yKGMsIG0sIEFWQUhJX0VSUl9UT09fTUFOWV9PQkpFQ1RTLCBOVUxMKTsKKyAgICAgICAgfQorCisgICAgICAgIGkgPSBhdmFoaV9uZXcoU3luY0FkZHJlc3NSZXNvbHZlckluZm8sIDEpOworICAgICAgICBpLT5jbGllbnQgPSBjbGllbnQ7CisgICAgICAgIGktPm1lc3NhZ2UgPSBkYnVzX21lc3NhZ2VfcmVmKG0pOworICAgICAgICBBVkFISV9MTElTVF9QUkVQRU5EKFN5bmNBZGRyZXNzUmVzb2x2ZXJJbmZvLCBzeW5jX2FkZHJlc3NfcmVzb2x2ZXJzLCBjbGllbnQtPnN5bmNfYWRkcmVzc19yZXNvbHZlcnMsIGkpOworICAgICAgICBjbGllbnQtPm5fb2JqZWN0cysrOworCisgICAgICAgIGlmICghKGktPmFkZHJlc3NfcmVzb2x2ZXIgPSBhdmFoaV9zX2FkZHJlc3NfcmVzb2x2ZXJfbmV3KGF2YWhpX3NlcnZlciwgKEF2YWhpSWZJbmRleCkgaW50ZXJmYWNlLCAoQXZhaGlQcm90b2NvbCkgcHJvdG9jb2wsICZhLCAoQXZhaGlMb29rdXBGbGFncykgZmxhZ3MsIGF2YWhpX2RidXNfc3luY19hZGRyZXNzX3Jlc29sdmVyX2NhbGxiYWNrLCBpKSkpIHsKKyAgICAgICAgICAgIGF2YWhpX2RidXNfc3luY19hZGRyZXNzX3Jlc29sdmVyX2ZyZWUoaSk7CisgICAgICAgICAgICByZXR1cm4gYXZhaGlfZGJ1c19yZXNwb25kX2Vycm9yKGMsIG0sIGF2YWhpX3NlcnZlcl9lcnJubyhhdmFoaV9zZXJ2ZXIpLCBOVUxMKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBEQlVTX0hBTkRMRVJfUkVTVUxUX0hBTkRMRUQ7CisKKyAgICB9IGVsc2UgaWYgKGRidXNfbWVzc2FnZV9pc19tZXRob2RfY2FsbChtLCBBVkFISV9EQlVTX0lOVEVSRkFDRV9TRVJWRVIsICJEb21haW5Ccm93c2VyTmV3IikpIHsKKyAgICAgICAgQ2xpZW50ICpjbGllbnQ7CisgICAgICAgIERvbWFpbkJyb3dzZXJJbmZvICppOworICAgICAgICBzdGF0aWMgY29uc3QgREJ1c09iamVjdFBhdGhWVGFibGUgdnRhYmxlID0geworICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIGF2YWhpX2RidXNfbXNnX2RvbWFpbl9icm93c2VyX2ltcGwsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBOVUxMCisgICAgICAgIH07CisgICAgICAgIGludDMyX3QgaW50ZXJmYWNlLCBwcm90b2NvbCwgdHlwZTsKKyAgICAgICAgdWludDMyX3QgZmxhZ3M7CisgICAgICAgIGNoYXIgKmRvbWFpbjsKKworICAgICAgICBpZiAoIWRidXNfbWVzc2FnZV9nZXRfYXJncygKKyAgICAgICAgICAgICAgICBtLCAmZXJyb3IsCisgICAgICAgICAgICAgICAgREJVU19UWVBFX0lOVDMyLCAmaW50ZXJmYWNlLAorICAgICAgICAgICAgICAgIERCVVNfVFlQRV9JTlQzMiwgJnByb3RvY29sLAorICAgICAgICAgICAgICAgIERCVVNfVFlQRV9TVFJJTkcsICZkb21haW4sCisgICAgICAgICAgICAgICAgREJVU19UWVBFX0lOVDMyLCAmdHlwZSwKKyAgICAgICAgICAgICAgICBEQlVTX1RZUEVfVUlOVDMyLCAmZmxhZ3MsCisgICAgICAgICAgICAgICAgREJVU19UWVBFX0lOVkFMSUQpIHx8IHR5cGUgPCAwIHx8IHR5cGUgPj0gQVZBSElfRE9NQUlOX0JST1dTRVJfTUFYKSB7CisgICAgICAgICAgICBhdmFoaV9sb2dfd2FybigiRXJyb3IgcGFyc2luZyBTZXJ2ZXI6OkRvbWFpbkJyb3dzZXJOZXcgbWVzc2FnZSIpOworICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCEoY2xpZW50ID0gY2xpZW50X2dldChkYnVzX21lc3NhZ2VfZ2V0X3NlbmRlcihtKSwgVFJVRSkpKSB7CisgICAgICAgICAgICBhdmFoaV9sb2dfd2FybigiVG9vIG1hbnkgY2xpZW50cywgY2xpZW50IHJlcXVlc3QgZmFpbGVkLiIpOworICAgICAgICAgICAgcmV0dXJuIGF2YWhpX2RidXNfcmVzcG9uZF9lcnJvcihjLCBtLCBBVkFISV9FUlJfVE9PX01BTllfQ0xJRU5UUywgTlVMTCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY2xpZW50LT5uX29iamVjdHMgPj0gc2VydmVyLT5uX29iamVjdHNfcGVyX2NsaWVudF9tYXgpIHsKKyAgICAgICAgICAgIGF2YWhpX2xvZ193YXJuKCJUb28gbWFueSBvYmplY3RzIGZvciBjbGllbnQgJyVzJywgY2xpZW50IHJlcXVlc3QgZmFpbGVkLiIsIGNsaWVudC0+bmFtZSk7CisgICAgICAgICAgICByZXR1cm4gYXZhaGlfZGJ1c19yZXNwb25kX2Vycm9yKGMsIG0sIEFWQUhJX0VSUl9UT09fTUFOWV9PQkpFQ1RTLCBOVUxMKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghKmRvbWFpbikKKyAgICAgICAgICAgIGRvbWFpbiA9IE5VTEw7CisKKyAgICAgICAgaSA9IGF2YWhpX25ldyhEb21haW5Ccm93c2VySW5mbywgMSk7CisgICAgICAgIGktPmlkID0gKytjbGllbnQtPmN1cnJlbnRfaWQ7CisgICAgICAgIGktPmNsaWVudCA9IGNsaWVudDsKKyAgICAgICAgaS0+cGF0aCA9IE5VTEw7CisgICAgICAgIEFWQUhJX0xMSVNUX1BSRVBFTkQoRG9tYWluQnJvd3NlckluZm8sIGRvbWFpbl9icm93c2VycywgY2xpZW50LT5kb21haW5fYnJvd3NlcnMsIGkpOworICAgICAgICBjbGllbnQtPm5fb2JqZWN0cysrOworCisgICAgICAgIGlmICghKGktPmRvbWFpbl9icm93c2VyID0gYXZhaGlfc19kb21haW5fYnJvd3Nlcl9uZXcoYXZhaGlfc2VydmVyLCAoQXZhaGlJZkluZGV4KSBpbnRlcmZhY2UsIChBdmFoaVByb3RvY29sKSBwcm90b2NvbCwgZG9tYWluLCAoQXZhaGlEb21haW5Ccm93c2VyVHlwZSkgdHlwZSwgKEF2YWhpTG9va3VwRmxhZ3MpIGZsYWdzLCBhdmFoaV9kYnVzX2RvbWFpbl9icm93c2VyX2NhbGxiYWNrLCBpKSkpIHsKKyAgICAgICAgICAgIGF2YWhpX2RidXNfZG9tYWluX2Jyb3dzZXJfZnJlZShpKTsKKyAgICAgICAgICAgIHJldHVybiBhdmFoaV9kYnVzX3Jlc3BvbmRfZXJyb3IoYywgbSwgYXZhaGlfc2VydmVyX2Vycm5vKGF2YWhpX3NlcnZlciksIE5VTEwpOworICAgICAgICB9CisKKyAgICAgICAgaS0+cGF0aCA9IGF2YWhpX3N0cmR1cF9wcmludGYoIi9DbGllbnQldS9Eb21haW5Ccm93c2VyJXUiLCBjbGllbnQtPmlkLCBpLT5pZCk7CisgICAgICAgIGRidXNfY29ubmVjdGlvbl9yZWdpc3Rlcl9vYmplY3RfcGF0aChjLCBpLT5wYXRoLCAmdnRhYmxlLCBpKTsKKyAgICAgICAgcmV0dXJuIGF2YWhpX2RidXNfcmVzcG9uZF9wYXRoKGMsIG0sIGktPnBhdGgpOworCisgICAgfSBlbHNlIGlmIChkYnVzX21lc3NhZ2VfaXNfbWV0aG9kX2NhbGwobSwgQVZBSElfREJVU19JTlRFUkZBQ0VfU0VSVkVSLCAiU2VydmljZVR5cGVCcm93c2VyTmV3IikpIHsKKyAgICAgICAgQ2xpZW50ICpjbGllbnQ7CisgICAgICAgIFNlcnZpY2VUeXBlQnJvd3NlckluZm8gKmk7CisgICAgICAgIHN0YXRpYyBjb25zdCBEQnVzT2JqZWN0UGF0aFZUYWJsZSB2dGFibGUgPSB7CisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgYXZhaGlfZGJ1c19tc2dfc2VydmljZV90eXBlX2Jyb3dzZXJfaW1wbCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIE5VTEwKKyAgICAgICAgfTsKKyAgICAgICAgaW50MzJfdCBpbnRlcmZhY2UsIHByb3RvY29sOworICAgICAgICB1aW50MzJfdCBmbGFnczsKKyAgICAgICAgY2hhciAqZG9tYWluOworCisgICAgICAgIGlmICghZGJ1c19tZXNzYWdlX2dldF9hcmdzKAorICAgICAgICAgICAgICAgIG0sICZlcnJvciwKKyAgICAgICAgICAgICAgICBEQlVTX1RZUEVfSU5UMzIsICZpbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgREJVU19UWVBFX0lOVDMyLCAmcHJvdG9jb2wsCisgICAgICAgICAgICAgICAgREJVU19UWVBFX1NUUklORywgJmRvbWFpbiwKKyAgICAgICAgICAgICAgICBEQlVTX1RZUEVfVUlOVDMyLCAmZmxhZ3MsCisgICAgICAgICAgICAgICAgREJVU19UWVBFX0lOVkFMSUQpKSB7CisgICAgICAgICAgICBhdmFoaV9sb2dfd2FybigiRXJyb3IgcGFyc2luZyBTZXJ2ZXI6OlNlcnZpY2VUeXBlQnJvd3Nlck5ldyBtZXNzYWdlIik7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIShjbGllbnQgPSBjbGllbnRfZ2V0KGRidXNfbWVzc2FnZV9nZXRfc2VuZGVyKG0pLCBUUlVFKSkpIHsKKyAgICAgICAgICAgIGF2YWhpX2xvZ193YXJuKCJUb28gbWFueSBjbGllbnRzLCBjbGllbnQgcmVxdWVzdCBmYWlsZWQuIik7CisgICAgICAgICAgICByZXR1cm4gYXZhaGlfZGJ1c19yZXNwb25kX2Vycm9yKGMsIG0sIEFWQUhJX0VSUl9UT09fTUFOWV9DTElFTlRTLCBOVUxMKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjbGllbnQtPm5fb2JqZWN0cyA+PSBzZXJ2ZXItPm5fb2JqZWN0c19wZXJfY2xpZW50X21heCkgeworICAgICAgICAgICAgYXZhaGlfbG9nX3dhcm4oIlRvbyBtYW55IG9iamVjdHMgZm9yIGNsaWVudCAnJXMnLCBjbGllbnQgcmVxdWVzdCBmYWlsZWQuIiwgY2xpZW50LT5uYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBhdmFoaV9kYnVzX3Jlc3BvbmRfZXJyb3IoYywgbSwgQVZBSElfRVJSX1RPT19NQU5ZX09CSkVDVFMsIE5VTEwpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCEqZG9tYWluKQorICAgICAgICAgICAgZG9tYWluID0gTlVMTDsKKworICAgICAgICBpID0gYXZhaGlfbmV3KFNlcnZpY2VUeXBlQnJvd3NlckluZm8sIDEpOworICAgICAgICBpLT5pZCA9ICsrY2xpZW50LT5jdXJyZW50X2lkOworICAgICAgICBpLT5jbGllbnQgPSBjbGllbnQ7CisgICAgICAgIGktPnBhdGggPSBOVUxMOworICAgICAgICBBVkFISV9MTElTVF9QUkVQRU5EKFNlcnZpY2VUeXBlQnJvd3NlckluZm8sIHNlcnZpY2VfdHlwZV9icm93c2VycywgY2xpZW50LT5zZXJ2aWNlX3R5cGVfYnJvd3NlcnMsIGkpOworICAgICAgICBjbGllbnQtPm5fb2JqZWN0cysrOworCisgICAgICAgIGlmICghKGktPnNlcnZpY2VfdHlwZV9icm93c2VyID0gYXZhaGlfc19zZXJ2aWNlX3R5cGVfYnJvd3Nlcl9uZXcoYXZhaGlfc2VydmVyLCAoQXZhaGlJZkluZGV4KSBpbnRlcmZhY2UsIChBdmFoaVByb3RvY29sKSBwcm90b2NvbCwgZG9tYWluLCAoQXZhaGlMb29rdXBGbGFncykgZmxhZ3MsIGF2YWhpX2RidXNfc2VydmljZV90eXBlX2Jyb3dzZXJfY2FsbGJhY2ssIGkpKSkgeworICAgICAgICAgICAgYXZhaGlfZGJ1c19zZXJ2aWNlX3R5cGVfYnJvd3Nlcl9mcmVlKGkpOworICAgICAgICAgICAgcmV0dXJuIGF2YWhpX2RidXNfcmVzcG9uZF9lcnJvcihjLCBtLCBhdmFoaV9zZXJ2ZXJfZXJybm8oYXZhaGlfc2VydmVyKSwgTlVMTCk7CisgICAgICAgIH0KKworICAgICAgICBpLT5wYXRoID0gYXZhaGlfc3RyZHVwX3ByaW50ZigiL0NsaWVudCV1L1NlcnZpY2VUeXBlQnJvd3NlciV1IiwgY2xpZW50LT5pZCwgaS0+aWQpOworICAgICAgICBkYnVzX2Nvbm5lY3Rpb25fcmVnaXN0ZXJfb2JqZWN0X3BhdGgoYywgaS0+cGF0aCwgJnZ0YWJsZSwgaSk7CisgICAgICAgIHJldHVybiBhdmFoaV9kYnVzX3Jlc3BvbmRfcGF0aChjLCBtLCBpLT5wYXRoKTsKKworICAgIH0gZWxzZSBpZiAoZGJ1c19tZXNzYWdlX2lzX21ldGhvZF9jYWxsKG0sIEFWQUhJX0RCVVNfSU5URVJGQUNFX1NFUlZFUiwgIlNlcnZpY2VCcm93c2VyTmV3IikpIHsKKyAgICAgICAgQ2xpZW50ICpjbGllbnQ7CisgICAgICAgIFNlcnZpY2VCcm93c2VySW5mbyAqaTsKKyAgICAgICAgc3RhdGljIGNvbnN0IERCdXNPYmplY3RQYXRoVlRhYmxlIHZ0YWJsZSA9IHsKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBhdmFoaV9kYnVzX21zZ19zZXJ2aWNlX2Jyb3dzZXJfaW1wbCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIE5VTEwKKyAgICAgICAgfTsKKyAgICAgICAgaW50MzJfdCBpbnRlcmZhY2UsIHByb3RvY29sOworICAgICAgICB1aW50MzJfdCBmbGFnczsKKyAgICAgICAgY2hhciAqZG9tYWluLCAqdHlwZTsKKworICAgICAgICBpZiAoIWRidXNfbWVzc2FnZV9nZXRfYXJncygKKyAgICAgICAgICAgICAgICBtLCAmZXJyb3IsCisgICAgICAgICAgICAgICAgREJVU19UWVBFX0lOVDMyLCAmaW50ZXJmYWNlLAorICAgICAgICAgICAgICAgIERCVVNfVFlQRV9JTlQzMiwgJnByb3RvY29sLAorICAgICAgICAgICAgICAgIERCVVNfVFlQRV9TVFJJTkcsICZ0eXBlLAorICAgICAgICAgICAgICAgIERCVVNfVFlQRV9TVFJJTkcsICZkb21haW4sCisgICAgICAgICAgICAgICAgREJVU19UWVBFX1VJTlQzMiwgJmZsYWdzLAorICAgICAgICAgICAgICAgIERCVVNfVFlQRV9JTlZBTElEKSB8fCAhdHlwZSkgeworICAgICAgICAgICAgYXZhaGlfbG9nX3dhcm4oIkVycm9yIHBhcnNpbmcgU2VydmVyOjpTZXJ2aWNlQnJvd3Nlck5ldyBtZXNzYWdlIik7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIShjbGllbnQgPSBjbGllbnRfZ2V0KGRidXNfbWVzc2FnZV9nZXRfc2VuZGVyKG0pLCBUUlVFKSkpIHsKKyAgICAgICAgICAgIGF2YWhpX2xvZ193YXJuKCJUb28gbWFueSBjbGllbnRzLCBjbGllbnQgcmVxdWVzdCBmYWlsZWQuIik7CisgICAgICAgICAgICByZXR1cm4gYXZhaGlfZGJ1c19yZXNwb25kX2Vycm9yKGMsIG0sIEFWQUhJX0VSUl9UT09fTUFOWV9DTElFTlRTLCBOVUxMKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjbGllbnQtPm5fb2JqZWN0cyA+PSBzZXJ2ZXItPm5fb2JqZWN0c19wZXJfY2xpZW50X21heCkgeworICAgICAgICAgICAgYXZhaGlfbG9nX3dhcm4oIlRvbyBtYW55IG9iamVjdHMgZm9yIGNsaWVudCAnJXMnLCBjbGllbnQgcmVxdWVzdCBmYWlsZWQuIiwgY2xpZW50LT5uYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBhdmFoaV9kYnVzX3Jlc3BvbmRfZXJyb3IoYywgbSwgQVZBSElfRVJSX1RPT19NQU5ZX09CSkVDVFMsIE5VTEwpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCEqZG9tYWluKQorICAgICAgICAgICAgZG9tYWluID0gTlVMTDsKKworICAgICAgICBpID0gYXZhaGlfbmV3KFNlcnZpY2VCcm93c2VySW5mbywgMSk7CisgICAgICAgIGktPmlkID0gKytjbGllbnQtPmN1cnJlbnRfaWQ7CisgICAgICAgIGktPmNsaWVudCA9IGNsaWVudDsKKyAgICAgICAgaS0+cGF0aCA9IE5VTEw7CisgICAgICAgIEFWQUhJX0xMSVNUX1BSRVBFTkQoU2VydmljZUJyb3dzZXJJbmZvLCBzZXJ2aWNlX2Jyb3dzZXJzLCBjbGllbnQtPnNlcnZpY2VfYnJvd3NlcnMsIGkpOworICAgICAgICBjbGllbnQtPm5fb2JqZWN0cysrOworCisgICAgICAgIGlmICghKGktPnNlcnZpY2VfYnJvd3NlciA9IGF2YWhpX3Nfc2VydmljZV9icm93c2VyX25ldyhhdmFoaV9zZXJ2ZXIsIChBdmFoaUlmSW5kZXgpIGludGVyZmFjZSwgKEF2YWhpUHJvdG9jb2wpIHByb3RvY29sLCB0eXBlLCBkb21haW4sIChBdmFoaUxvb2t1cEZsYWdzKSBmbGFncywgYXZhaGlfZGJ1c19zZXJ2aWNlX2Jyb3dzZXJfY2FsbGJhY2ssIGkpKSkgeworICAgICAgICAgICAgYXZhaGlfZGJ1c19zZXJ2aWNlX2Jyb3dzZXJfZnJlZShpKTsKKyAgICAgICAgICAgIHJldHVybiBhdmFoaV9kYnVzX3Jlc3BvbmRfZXJyb3IoYywgbSwgYXZhaGlfc2VydmVyX2Vycm5vKGF2YWhpX3NlcnZlciksIE5VTEwpOworICAgICAgICB9CisKKyAgICAgICAgaS0+cGF0aCA9IGF2YWhpX3N0cmR1cF9wcmludGYoIi9DbGllbnQldS9TZXJ2aWNlQnJvd3NlciV1IiwgY2xpZW50LT5pZCwgaS0+aWQpOworICAgICAgICBkYnVzX2Nvbm5lY3Rpb25fcmVnaXN0ZXJfb2JqZWN0X3BhdGgoYywgaS0+cGF0aCwgJnZ0YWJsZSwgaSk7CisgICAgICAgIHJldHVybiBhdmFoaV9kYnVzX3Jlc3BvbmRfcGF0aChjLCBtLCBpLT5wYXRoKTsKKworICAgIH0gZWxzZSBpZiAoZGJ1c19tZXNzYWdlX2lzX21ldGhvZF9jYWxsKG0sIEFWQUhJX0RCVVNfSU5URVJGQUNFX1NFUlZFUiwgIlJlc29sdmVTZXJ2aWNlIikpIHsKKyAgICAgICAgQ2xpZW50ICpjbGllbnQ7CisgICAgICAgIGludDMyX3QgaW50ZXJmYWNlLCBwcm90b2NvbCwgYXByb3RvY29sOworICAgICAgICB1aW50MzJfdCBmbGFnczsKKyAgICAgICAgY2hhciAqbmFtZSwgKnR5cGUsICpkb21haW47CisgICAgICAgIFN5bmNTZXJ2aWNlUmVzb2x2ZXJJbmZvICppOworCisgICAgICAgIGlmICghZGJ1c19tZXNzYWdlX2dldF9hcmdzKAorICAgICAgICAgICAgICAgIG0sICZlcnJvciwKKyAgICAgICAgICAgICAgICBEQlVTX1RZUEVfSU5UMzIsICZpbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgREJVU19UWVBFX0lOVDMyLCAmcHJvdG9jb2wsCisgICAgICAgICAgICAgICAgREJVU19UWVBFX1NUUklORywgJm5hbWUsCisgICAgICAgICAgICAgICAgREJVU19UWVBFX1NUUklORywgJnR5cGUsCisgICAgICAgICAgICAgICAgREJVU19UWVBFX1NUUklORywgJmRvbWFpbiwKKyAgICAgICAgICAgICAgICBEQlVTX1RZUEVfSU5UMzIsICZhcHJvdG9jb2wsCisgICAgICAgICAgICAgICAgREJVU19UWVBFX1VJTlQzMiwgJmZsYWdzLAorICAgICAgICAgICAgICAgIERCVVNfVFlQRV9JTlZBTElEKSB8fCAhdHlwZSkgeworICAgICAgICAgICAgYXZhaGlfbG9nX3dhcm4oIkVycm9yIHBhcnNpbmcgU2VydmVyOjpSZXNvbHZlU2VydmljZSBtZXNzYWdlIik7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIShjbGllbnQgPSBjbGllbnRfZ2V0KGRidXNfbWVzc2FnZV9nZXRfc2VuZGVyKG0pLCBUUlVFKSkpIHsKKyAgICAgICAgICAgIGF2YWhpX2xvZ193YXJuKCJUb28gbWFueSBjbGllbnRzLCBjbGllbnQgcmVxdWVzdCBmYWlsZWQuIik7CisgICAgICAgICAgICByZXR1cm4gYXZhaGlfZGJ1c19yZXNwb25kX2Vycm9yKGMsIG0sIEFWQUhJX0VSUl9UT09fTUFOWV9DTElFTlRTLCBOVUxMKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjbGllbnQtPm5fb2JqZWN0cyA+PSBzZXJ2ZXItPm5fb2JqZWN0c19wZXJfY2xpZW50X21heCkgeworICAgICAgICAgICAgYXZhaGlfbG9nX3dhcm4oIlRvbyBtYW55IG9iamVjdHMgZm9yIGNsaWVudCAnJXMnLCBjbGllbnQgcmVxdWVzdCBmYWlsZWQuIiwgY2xpZW50LT5uYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBhdmFoaV9kYnVzX3Jlc3BvbmRfZXJyb3IoYywgbSwgQVZBSElfRVJSX1RPT19NQU5ZX09CSkVDVFMsIE5VTEwpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCEqZG9tYWluKQorICAgICAgICAgICAgZG9tYWluID0gTlVMTDsKKworICAgICAgICBpZiAoISpuYW1lKQorICAgICAgICAgICAgbmFtZSA9IE5VTEw7CisKKyAgICAgICAgaSA9IGF2YWhpX25ldyhTeW5jU2VydmljZVJlc29sdmVySW5mbywgMSk7CisgICAgICAgIGktPmNsaWVudCA9IGNsaWVudDsKKyAgICAgICAgaS0+bWVzc2FnZSA9IGRidXNfbWVzc2FnZV9yZWYobSk7CisgICAgICAgIEFWQUhJX0xMSVNUX1BSRVBFTkQoU3luY1NlcnZpY2VSZXNvbHZlckluZm8sIHN5bmNfc2VydmljZV9yZXNvbHZlcnMsIGNsaWVudC0+c3luY19zZXJ2aWNlX3Jlc29sdmVycywgaSk7CisgICAgICAgIGNsaWVudC0+bl9vYmplY3RzKys7CisKKyAgICAgICAgaWYgKCEoaS0+c2VydmljZV9yZXNvbHZlciA9IGF2YWhpX3Nfc2VydmljZV9yZXNvbHZlcl9uZXcoYXZhaGlfc2VydmVyLCAoQXZhaGlJZkluZGV4KSBpbnRlcmZhY2UsIChBdmFoaVByb3RvY29sKSBwcm90b2NvbCwgbmFtZSwgdHlwZSwgZG9tYWluLCAoQXZhaGlQcm90b2NvbCkgYXByb3RvY29sLCAoQXZhaGlMb29rdXBGbGFncykgZmxhZ3MsIGF2YWhpX2RidXNfc3luY19zZXJ2aWNlX3Jlc29sdmVyX2NhbGxiYWNrLCBpKSkpIHsKKyAgICAgICAgICAgIGF2YWhpX2RidXNfc3luY19zZXJ2aWNlX3Jlc29sdmVyX2ZyZWUoaSk7CisgICAgICAgICAgICByZXR1cm4gYXZhaGlfZGJ1c19yZXNwb25kX2Vycm9yKGMsIG0sIGF2YWhpX3NlcnZlcl9lcnJubyhhdmFoaV9zZXJ2ZXIpLCBOVUxMKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBEQlVTX0hBTkRMRVJfUkVTVUxUX0hBTkRMRUQ7CisKKyAgICB9IGVsc2UgaWYgKGRidXNfbWVzc2FnZV9pc19tZXRob2RfY2FsbChtLCBBVkFISV9EQlVTX0lOVEVSRkFDRV9TRVJWRVIsICJTZXJ2aWNlUmVzb2x2ZXJOZXciKSkgeworICAgICAgICBDbGllbnQgKmNsaWVudDsKKyAgICAgICAgaW50MzJfdCBpbnRlcmZhY2UsIHByb3RvY29sLCBhcHJvdG9jb2w7CisgICAgICAgIHVpbnQzMl90IGZsYWdzOworICAgICAgICBjaGFyICpuYW1lLCAqdHlwZSwgKmRvbWFpbjsKKyAgICAgICAgQXN5bmNTZXJ2aWNlUmVzb2x2ZXJJbmZvICppOworICAgICAgICBzdGF0aWMgY29uc3QgREJ1c09iamVjdFBhdGhWVGFibGUgdnRhYmxlID0geworICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIGF2YWhpX2RidXNfbXNnX2FzeW5jX3NlcnZpY2VfcmVzb2x2ZXJfaW1wbCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIE5VTEwKKyAgICAgICAgfTsKKworICAgICAgICBpZiAoIWRidXNfbWVzc2FnZV9nZXRfYXJncygKKyAgICAgICAgICAgICAgICBtLCAmZXJyb3IsCisgICAgICAgICAgICAgICAgREJVU19UWVBFX0lOVDMyLCAmaW50ZXJmYWNlLAorICAgICAgICAgICAgICAgIERCVVNfVFlQRV9JTlQzMiwgJnByb3RvY29sLAorICAgICAgICAgICAgICAgIERCVVNfVFlQRV9TVFJJTkcsICZuYW1lLAorICAgICAgICAgICAgICAgIERCVVNfVFlQRV9TVFJJTkcsICZ0eXBlLAorICAgICAgICAgICAgICAgIERCVVNfVFlQRV9TVFJJTkcsICZkb21haW4sCisgICAgICAgICAgICAgICAgREJVU19UWVBFX0lOVDMyLCAmYXByb3RvY29sLAorICAgICAgICAgICAgICAgIERCVVNfVFlQRV9VSU5UMzIsICZmbGFncywKKyAgICAgICAgICAgICAgICBEQlVTX1RZUEVfSU5WQUxJRCkgfHwgIXR5cGUpIHsKKyAgICAgICAgICAgIGF2YWhpX2xvZ193YXJuKCJFcnJvciBwYXJzaW5nIFNlcnZlcjo6U2VydmljZVJlc29sdmVyTmV3IG1lc3NhZ2UiKTsKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghKGNsaWVudCA9IGNsaWVudF9nZXQoZGJ1c19tZXNzYWdlX2dldF9zZW5kZXIobSksIFRSVUUpKSkgeworICAgICAgICAgICAgYXZhaGlfbG9nX3dhcm4oX19GSUxFX18iOiBUb28gbWFueSBjbGllbnRzLCBjbGllbnQgcmVxdWVzdCBmYWlsZWQuIik7CisgICAgICAgICAgICByZXR1cm4gYXZhaGlfZGJ1c19yZXNwb25kX2Vycm9yKGMsIG0sIEFWQUhJX0VSUl9UT09fTUFOWV9DTElFTlRTLCBOVUxMKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjbGllbnQtPm5fb2JqZWN0cyA+PSBzZXJ2ZXItPm5fb2JqZWN0c19wZXJfY2xpZW50X21heCkgeworICAgICAgICAgICAgYXZhaGlfbG9nX3dhcm4oX19GSUxFX18iOiBUb28gbWFueSBvYmplY3RzIGZvciBjbGllbnQgJyVzJywgY2xpZW50IHJlcXVlc3QgZmFpbGVkLiIsIGNsaWVudC0+bmFtZSk7CisgICAgICAgICAgICByZXR1cm4gYXZhaGlfZGJ1c19yZXNwb25kX2Vycm9yKGMsIG0sIEFWQUhJX0VSUl9UT09fTUFOWV9PQkpFQ1RTLCBOVUxMKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghKmRvbWFpbikKKyAgICAgICAgICAgIGRvbWFpbiA9IE5VTEw7CisKKyAgICAgICAgaWYgKCEqbmFtZSkKKyAgICAgICAgICAgIG5hbWUgPSBOVUxMOworCisgICAgICAgIGkgPSBhdmFoaV9uZXcoQXN5bmNTZXJ2aWNlUmVzb2x2ZXJJbmZvLCAxKTsKKyAgICAgICAgaS0+aWQgPSArK2NsaWVudC0+Y3VycmVudF9pZDsKKyAgICAgICAgaS0+Y2xpZW50ID0gY2xpZW50OworICAgICAgICBpLT5wYXRoID0gTlVMTDsKKyAgICAgICAgQVZBSElfTExJU1RfUFJFUEVORChBc3luY1NlcnZpY2VSZXNvbHZlckluZm8sIGFzeW5jX3NlcnZpY2VfcmVzb2x2ZXJzLCBjbGllbnQtPmFzeW5jX3NlcnZpY2VfcmVzb2x2ZXJzLCBpKTsKKyAgICAgICAgY2xpZW50LT5uX29iamVjdHMrKzsKKworICAgICAgICBpZiAoIShpLT5zZXJ2aWNlX3Jlc29sdmVyID0gYXZhaGlfc19zZXJ2aWNlX3Jlc29sdmVyX25ldyhhdmFoaV9zZXJ2ZXIsIChBdmFoaUlmSW5kZXgpIGludGVyZmFjZSwgKEF2YWhpUHJvdG9jb2wpIHByb3RvY29sLCBuYW1lLCB0eXBlLCBkb21haW4sIChBdmFoaVByb3RvY29sKSBhcHJvdG9jb2wsIChBdmFoaUxvb2t1cEZsYWdzKSBmbGFncywgYXZhaGlfZGJ1c19hc3luY19zZXJ2aWNlX3Jlc29sdmVyX2NhbGxiYWNrLCBpKSkpIHsKKyAgICAgICAgICAgIGF2YWhpX2RidXNfYXN5bmNfc2VydmljZV9yZXNvbHZlcl9mcmVlKGkpOworICAgICAgICAgICAgcmV0dXJuIGF2YWhpX2RidXNfcmVzcG9uZF9lcnJvcihjLCBtLCBhdmFoaV9zZXJ2ZXJfZXJybm8oYXZhaGlfc2VydmVyKSwgTlVMTCk7CisgICAgICAgIH0KKworLyogICAgICAgICBhdmFoaV9sb2dfZGVidWcoX19GSUxFX18iOiBbJXNdLCBuZXcgc2VydmljZSByZXNvbHZlciBmb3IgPCVzLiVzLiVzPiIsIGktPnBhdGgsIG5hbWUsIHR5cGUsIGRvbWFpbik7ICovCisKKyAgICAgICAgaS0+cGF0aCA9IGF2YWhpX3N0cmR1cF9wcmludGYoIi9DbGllbnQldS9TZXJ2aWNlUmVzb2x2ZXIldSIsIGNsaWVudC0+aWQsIGktPmlkKTsKKyAgICAgICAgZGJ1c19jb25uZWN0aW9uX3JlZ2lzdGVyX29iamVjdF9wYXRoKGMsIGktPnBhdGgsICZ2dGFibGUsIGkpOworICAgICAgICByZXR1cm4gYXZhaGlfZGJ1c19yZXNwb25kX3BhdGgoYywgbSwgaS0+cGF0aCk7CisKKyAgICB9IGVsc2UgaWYgKGRidXNfbWVzc2FnZV9pc19tZXRob2RfY2FsbChtLCBBVkFISV9EQlVTX0lOVEVSRkFDRV9TRVJWRVIsICJIb3N0TmFtZVJlc29sdmVyTmV3IikpIHsKKyAgICAgICAgQ2xpZW50ICpjbGllbnQ7CisgICAgICAgIGludDMyX3QgaW50ZXJmYWNlLCBwcm90b2NvbCwgYXByb3RvY29sOworICAgICAgICB1aW50MzJfdCBmbGFnczsKKyAgICAgICAgY2hhciAqbmFtZTsKKyAgICAgICAgQXN5bmNIb3N0TmFtZVJlc29sdmVySW5mbyAqaTsKKyAgICAgICAgc3RhdGljIGNvbnN0IERCdXNPYmplY3RQYXRoVlRhYmxlIHZ0YWJsZSA9IHsKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBhdmFoaV9kYnVzX21zZ19hc3luY19ob3N0X25hbWVfcmVzb2x2ZXJfaW1wbCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIE5VTEwKKyAgICAgICAgfTsKKworICAgICAgICBpZiAoIWRidXNfbWVzc2FnZV9nZXRfYXJncygKKyAgICAgICAgICAgICAgICBtLCAmZXJyb3IsCisgICAgICAgICAgICAgICAgREJVU19UWVBFX0lOVDMyLCAmaW50ZXJmYWNlLAorICAgICAgICAgICAgICAgIERCVVNfVFlQRV9JTlQzMiwgJnByb3RvY29sLAorICAgICAgICAgICAgICAgIERCVVNfVFlQRV9TVFJJTkcsICZuYW1lLAorICAgICAgICAgICAgICAgIERCVVNfVFlQRV9JTlQzMiwgJmFwcm90b2NvbCwKKyAgICAgICAgICAgICAgICBEQlVTX1RZUEVfVUlOVDMyLCAmZmxhZ3MsCisgICAgICAgICAgICAgICAgREJVU19UWVBFX0lOVkFMSUQpIHx8ICFuYW1lKSB7CisgICAgICAgICAgICBhdmFoaV9sb2dfd2FybigiRXJyb3IgcGFyc2luZyBTZXJ2ZXI6Okhvc3ROYW1lUmVzb2x2ZXJOZXcgbWVzc2FnZSIpOworICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCEoY2xpZW50ID0gY2xpZW50X2dldChkYnVzX21lc3NhZ2VfZ2V0X3NlbmRlcihtKSwgVFJVRSkpKSB7CisgICAgICAgICAgICBhdmFoaV9sb2dfd2FybihfX0ZJTEVfXyI6IFRvbyBtYW55IGNsaWVudHMsIGNsaWVudCByZXF1ZXN0IGZhaWxlZC4iKTsKKyAgICAgICAgICAgIHJldHVybiBhdmFoaV9kYnVzX3Jlc3BvbmRfZXJyb3IoYywgbSwgQVZBSElfRVJSX1RPT19NQU5ZX0NMSUVOVFMsIE5VTEwpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNsaWVudC0+bl9vYmplY3RzID49IHNlcnZlci0+bl9vYmplY3RzX3Blcl9jbGllbnRfbWF4KSB7CisgICAgICAgICAgICBhdmFoaV9sb2dfd2FybihfX0ZJTEVfXyI6IFRvbyBtYW55IG9iamVjdHMgZm9yIGNsaWVudCAnJXMnLCBjbGllbnQgcmVxdWVzdCBmYWlsZWQuIiwgY2xpZW50LT5uYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBhdmFoaV9kYnVzX3Jlc3BvbmRfZXJyb3IoYywgbSwgQVZBSElfRVJSX1RPT19NQU5ZX09CSkVDVFMsIE5VTEwpOworICAgICAgICB9CisKKyAgICAgICAgaSA9IGF2YWhpX25ldyhBc3luY0hvc3ROYW1lUmVzb2x2ZXJJbmZvLCAxKTsKKyAgICAgICAgaS0+aWQgPSArK2NsaWVudC0+Y3VycmVudF9pZDsKKyAgICAgICAgaS0+Y2xpZW50ID0gY2xpZW50OworICAgICAgICBpLT5wYXRoID0gTlVMTDsKKyAgICAgICAgQVZBSElfTExJU1RfUFJFUEVORChBc3luY0hvc3ROYW1lUmVzb2x2ZXJJbmZvLCBhc3luY19ob3N0X25hbWVfcmVzb2x2ZXJzLCBjbGllbnQtPmFzeW5jX2hvc3RfbmFtZV9yZXNvbHZlcnMsIGkpOworICAgICAgICBjbGllbnQtPm5fb2JqZWN0cysrOworCisgICAgICAgIGlmICghKGktPmhvc3RfbmFtZV9yZXNvbHZlciA9IGF2YWhpX3NfaG9zdF9uYW1lX3Jlc29sdmVyX25ldyhhdmFoaV9zZXJ2ZXIsIChBdmFoaUlmSW5kZXgpIGludGVyZmFjZSwgKEF2YWhpUHJvdG9jb2wpIHByb3RvY29sLCBuYW1lLCBhcHJvdG9jb2wsIChBdmFoaUxvb2t1cEZsYWdzKSBmbGFncywgYXZhaGlfZGJ1c19hc3luY19ob3N0X25hbWVfcmVzb2x2ZXJfY2FsbGJhY2ssIGkpKSkgeworICAgICAgICAgICAgYXZhaGlfZGJ1c19hc3luY19ob3N0X25hbWVfcmVzb2x2ZXJfZnJlZShpKTsKKyAgICAgICAgICAgIHJldHVybiBhdmFoaV9kYnVzX3Jlc3BvbmRfZXJyb3IoYywgbSwgYXZhaGlfc2VydmVyX2Vycm5vKGF2YWhpX3NlcnZlciksIE5VTEwpOworICAgICAgICB9CisKKyAgICAgICAgaS0+cGF0aCA9IGF2YWhpX3N0cmR1cF9wcmludGYoIi9DbGllbnQldS9Ib3N0TmFtZVJlc29sdmVyJXUiLCBjbGllbnQtPmlkLCBpLT5pZCk7CisgICAgICAgIGRidXNfY29ubmVjdGlvbl9yZWdpc3Rlcl9vYmplY3RfcGF0aChjLCBpLT5wYXRoLCAmdnRhYmxlLCBpKTsKKyAgICAgICAgcmV0dXJuIGF2YWhpX2RidXNfcmVzcG9uZF9wYXRoKGMsIG0sIGktPnBhdGgpOworCisgICAgfSBlbHNlIGlmIChkYnVzX21lc3NhZ2VfaXNfbWV0aG9kX2NhbGwobSwgQVZBSElfREJVU19JTlRFUkZBQ0VfU0VSVkVSLCAiQWRkcmVzc1Jlc29sdmVyTmV3IikpIHsKKyAgICAgICAgQ2xpZW50ICpjbGllbnQ7CisgICAgICAgIGludDMyX3QgaW50ZXJmYWNlLCBwcm90b2NvbDsKKyAgICAgICAgdWludDMyX3QgZmxhZ3M7CisgICAgICAgIGNoYXIgKmFkZHJlc3M7CisgICAgICAgIEFzeW5jQWRkcmVzc1Jlc29sdmVySW5mbyAqaTsKKyAgICAgICAgQXZhaGlBZGRyZXNzIGE7CisgICAgICAgIHN0YXRpYyBjb25zdCBEQnVzT2JqZWN0UGF0aFZUYWJsZSB2dGFibGUgPSB7CisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgYXZhaGlfZGJ1c19tc2dfYXN5bmNfYWRkcmVzc19yZXNvbHZlcl9pbXBsLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgTlVMTAorICAgICAgICB9OworCisgICAgICAgIGlmICghZGJ1c19tZXNzYWdlX2dldF9hcmdzKAorICAgICAgICAgICAgICAgIG0sICZlcnJvciwKKyAgICAgICAgICAgICAgICBEQlVTX1RZUEVfSU5UMzIsICZpbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgREJVU19UWVBFX0lOVDMyLCAmcHJvdG9jb2wsCisgICAgICAgICAgICAgICAgREJVU19UWVBFX1NUUklORywgJmFkZHJlc3MsCisgICAgICAgICAgICAgICAgREJVU19UWVBFX1VJTlQzMiwgJmZsYWdzLAorICAgICAgICAgICAgICAgIERCVVNfVFlQRV9JTlZBTElEKSB8fCAhYWRkcmVzcykgeworICAgICAgICAgICAgYXZhaGlfbG9nX3dhcm4oIkVycm9yIHBhcnNpbmcgU2VydmVyOjpBZGRyZXNzUmVzb2x2ZXJOZXcgbWVzc2FnZSIpOworICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFhdmFoaV9hZGRyZXNzX3BhcnNlKGFkZHJlc3MsIEFWQUhJX1BST1RPX1VOU1BFQywgJmEpKQorICAgICAgICAgICAgcmV0dXJuIGF2YWhpX2RidXNfcmVzcG9uZF9lcnJvcihjLCBtLCBBVkFISV9FUlJfSU5WQUxJRF9BRERSRVNTLCBOVUxMKTsKKworICAgICAgICBpZiAoIShjbGllbnQgPSBjbGllbnRfZ2V0KGRidXNfbWVzc2FnZV9nZXRfc2VuZGVyKG0pLCBUUlVFKSkpIHsKKyAgICAgICAgICAgIGF2YWhpX2xvZ193YXJuKF9fRklMRV9fIjogVG9vIG1hbnkgY2xpZW50cywgY2xpZW50IHJlcXVlc3QgZmFpbGVkLiIpOworICAgICAgICAgICAgcmV0dXJuIGF2YWhpX2RidXNfcmVzcG9uZF9lcnJvcihjLCBtLCBBVkFISV9FUlJfVE9PX01BTllfQ0xJRU5UUywgTlVMTCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY2xpZW50LT5uX29iamVjdHMgPj0gc2VydmVyLT5uX29iamVjdHNfcGVyX2NsaWVudF9tYXgpIHsKKyAgICAgICAgICAgIGF2YWhpX2xvZ193YXJuKF9fRklMRV9fIjogVG9vIG1hbnkgb2JqZWN0cyBmb3IgY2xpZW50ICclcycsIGNsaWVudCByZXF1ZXN0IGZhaWxlZC4iLCBjbGllbnQtPm5hbWUpOworICAgICAgICAgICAgcmV0dXJuIGF2YWhpX2RidXNfcmVzcG9uZF9lcnJvcihjLCBtLCBBVkFISV9FUlJfVE9PX01BTllfT0JKRUNUUywgTlVMTCk7CisgICAgICAgIH0KKworICAgICAgICBpID0gYXZhaGlfbmV3KEFzeW5jQWRkcmVzc1Jlc29sdmVySW5mbywgMSk7CisgICAgICAgIGktPmlkID0gKytjbGllbnQtPmN1cnJlbnRfaWQ7CisgICAgICAgIGktPmNsaWVudCA9IGNsaWVudDsKKyAgICAgICAgaS0+cGF0aCA9IE5VTEw7CisgICAgICAgIEFWQUhJX0xMSVNUX1BSRVBFTkQoQXN5bmNBZGRyZXNzUmVzb2x2ZXJJbmZvLCBhc3luY19hZGRyZXNzX3Jlc29sdmVycywgY2xpZW50LT5hc3luY19hZGRyZXNzX3Jlc29sdmVycywgaSk7CisgICAgICAgIGNsaWVudC0+bl9vYmplY3RzKys7CisKKyAgICAgICAgaWYgKCEoaS0+YWRkcmVzc19yZXNvbHZlciA9IGF2YWhpX3NfYWRkcmVzc19yZXNvbHZlcl9uZXcoYXZhaGlfc2VydmVyLCAoQXZhaGlJZkluZGV4KSBpbnRlcmZhY2UsIChBdmFoaVByb3RvY29sKSBwcm90b2NvbCwgJmEsIChBdmFoaUxvb2t1cEZsYWdzKSBmbGFncywgYXZhaGlfZGJ1c19hc3luY19hZGRyZXNzX3Jlc29sdmVyX2NhbGxiYWNrLCBpKSkpIHsKKyAgICAgICAgICAgIGF2YWhpX2RidXNfYXN5bmNfYWRkcmVzc19yZXNvbHZlcl9mcmVlKGkpOworICAgICAgICAgICAgcmV0dXJuIGF2YWhpX2RidXNfcmVzcG9uZF9lcnJvcihjLCBtLCBhdmFoaV9zZXJ2ZXJfZXJybm8oYXZhaGlfc2VydmVyKSwgTlVMTCk7CisgICAgICAgIH0KKworICAgICAgICBpLT5wYXRoID0gYXZhaGlfc3RyZHVwX3ByaW50ZigiL0NsaWVudCV1L0FkZHJlc3NSZXNvbHZlciV1IiwgY2xpZW50LT5pZCwgaS0+aWQpOworICAgICAgICBkYnVzX2Nvbm5lY3Rpb25fcmVnaXN0ZXJfb2JqZWN0X3BhdGgoYywgaS0+cGF0aCwgJnZ0YWJsZSwgaSk7CisgICAgICAgIHJldHVybiBhdmFoaV9kYnVzX3Jlc3BvbmRfcGF0aChjLCBtLCBpLT5wYXRoKTsKKworICAgIH0gZWxzZSBpZiAoZGJ1c19tZXNzYWdlX2lzX21ldGhvZF9jYWxsKG0sIEFWQUhJX0RCVVNfSU5URVJGQUNFX1NFUlZFUiwgIlJlY29yZEJyb3dzZXJOZXciKSkgeworICAgICAgICBDbGllbnQgKmNsaWVudDsKKyAgICAgICAgUmVjb3JkQnJvd3NlckluZm8gKmk7CisgICAgICAgIHN0YXRpYyBjb25zdCBEQnVzT2JqZWN0UGF0aFZUYWJsZSB2dGFibGUgPSB7CisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgYXZhaGlfZGJ1c19tc2dfcmVjb3JkX2Jyb3dzZXJfaW1wbCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIE5VTEwKKyAgICAgICAgfTsKKyAgICAgICAgaW50MzJfdCBpbnRlcmZhY2UsIHByb3RvY29sOworICAgICAgICB1aW50MzJfdCBmbGFnczsKKyAgICAgICAgY2hhciAqbmFtZTsKKyAgICAgICAgdWludDE2X3QgdHlwZSwgY2xheno7CisgICAgICAgIEF2YWhpS2V5ICprZXk7CisKKyAgICAgICAgaWYgKCFkYnVzX21lc3NhZ2VfZ2V0X2FyZ3MoCisgICAgICAgICAgICAgICAgbSwgJmVycm9yLAorICAgICAgICAgICAgICAgIERCVVNfVFlQRV9JTlQzMiwgJmludGVyZmFjZSwKKyAgICAgICAgICAgICAgICBEQlVTX1RZUEVfSU5UMzIsICZwcm90b2NvbCwKKyAgICAgICAgICAgICAgICBEQlVTX1RZUEVfU1RSSU5HLCAmbmFtZSwKKyAgICAgICAgICAgICAgICBEQlVTX1RZUEVfVUlOVDE2LCAmY2xhenosCisgICAgICAgICAgICAgICAgREJVU19UWVBFX1VJTlQxNiwgJnR5cGUsCisgICAgICAgICAgICAgICAgREJVU19UWVBFX1VJTlQzMiwgJmZsYWdzLAorICAgICAgICAgICAgICAgIERCVVNfVFlQRV9JTlZBTElEKSB8fCAhbmFtZSkgeworICAgICAgICAgICAgYXZhaGlfbG9nX3dhcm4oIkVycm9yIHBhcnNpbmcgU2VydmVyOjpSZWNvcmRCcm93c2VyTmV3IG1lc3NhZ2UiKTsKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghYXZhaGlfaXNfdmFsaWRfZG9tYWluX25hbWUobmFtZSkpCisgICAgICAgICAgICByZXR1cm4gYXZhaGlfZGJ1c19yZXNwb25kX2Vycm9yKGMsIG0sIEFWQUhJX0VSUl9JTlZBTElEX0RPTUFJTl9OQU1FLCBOVUxMKTsKKworICAgICAgICBpZiAoIShjbGllbnQgPSBjbGllbnRfZ2V0KGRidXNfbWVzc2FnZV9nZXRfc2VuZGVyKG0pLCBUUlVFKSkpIHsKKyAgICAgICAgICAgIGF2YWhpX2xvZ193YXJuKCJUb28gbWFueSBjbGllbnRzLCBjbGllbnQgcmVxdWVzdCBmYWlsZWQuIik7CisgICAgICAgICAgICByZXR1cm4gYXZhaGlfZGJ1c19yZXNwb25kX2Vycm9yKGMsIG0sIEFWQUhJX0VSUl9UT09fTUFOWV9DTElFTlRTLCBOVUxMKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjbGllbnQtPm5fb2JqZWN0cyA+PSBzZXJ2ZXItPm5fb2JqZWN0c19wZXJfY2xpZW50X21heCkgeworICAgICAgICAgICAgYXZhaGlfbG9nX3dhcm4oIlRvbyBtYW55IG9iamVjdHMgZm9yIGNsaWVudCAnJXMnLCBjbGllbnQgcmVxdWVzdCBmYWlsZWQuIiwgY2xpZW50LT5uYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBhdmFoaV9kYnVzX3Jlc3BvbmRfZXJyb3IoYywgbSwgQVZBSElfRVJSX1RPT19NQU5ZX09CSkVDVFMsIE5VTEwpOworICAgICAgICB9CisKKyAgICAgICAgaSA9IGF2YWhpX25ldyhSZWNvcmRCcm93c2VySW5mbywgMSk7CisgICAgICAgIGktPmlkID0gKytjbGllbnQtPmN1cnJlbnRfaWQ7CisgICAgICAgIGktPmNsaWVudCA9IGNsaWVudDsKKyAgICAgICAgaS0+cGF0aCA9IE5VTEw7CisgICAgICAgIEFWQUhJX0xMSVNUX1BSRVBFTkQoUmVjb3JkQnJvd3NlckluZm8sIHJlY29yZF9icm93c2VycywgY2xpZW50LT5yZWNvcmRfYnJvd3NlcnMsIGkpOworICAgICAgICBjbGllbnQtPm5fb2JqZWN0cysrOworCisgICAgICAgIGtleSA9IGF2YWhpX2tleV9uZXcobmFtZSwgY2xhenosIHR5cGUpOworICAgICAgICBhc3NlcnQoa2V5KTsKKworICAgICAgICBpZiAoIShpLT5yZWNvcmRfYnJvd3NlciA9IGF2YWhpX3NfcmVjb3JkX2Jyb3dzZXJfbmV3KGF2YWhpX3NlcnZlciwgKEF2YWhpSWZJbmRleCkgaW50ZXJmYWNlLCAoQXZhaGlQcm90b2NvbCkgcHJvdG9jb2wsIGtleSwgKEF2YWhpTG9va3VwRmxhZ3MpIGZsYWdzLCBhdmFoaV9kYnVzX3JlY29yZF9icm93c2VyX2NhbGxiYWNrLCBpKSkpIHsKKyAgICAgICAgICAgIGF2YWhpX2tleV91bnJlZihrZXkpOworICAgICAgICAgICAgYXZhaGlfZGJ1c19yZWNvcmRfYnJvd3Nlcl9mcmVlKGkpOworICAgICAgICAgICAgcmV0dXJuIGF2YWhpX2RidXNfcmVzcG9uZF9lcnJvcihjLCBtLCBhdmFoaV9zZXJ2ZXJfZXJybm8oYXZhaGlfc2VydmVyKSwgTlVMTCk7CisgICAgICAgIH0KKworICAgICAgICBhdmFoaV9rZXlfdW5yZWYoa2V5KTsKKworICAgICAgICBpLT5wYXRoID0gYXZhaGlfc3RyZHVwX3ByaW50ZigiL0NsaWVudCV1L1JlY29yZEJyb3dzZXIldSIsIGNsaWVudC0+aWQsIGktPmlkKTsKKyAgICAgICAgZGJ1c19jb25uZWN0aW9uX3JlZ2lzdGVyX29iamVjdF9wYXRoKGMsIGktPnBhdGgsICZ2dGFibGUsIGkpOworICAgICAgICByZXR1cm4gYXZhaGlfZGJ1c19yZXNwb25kX3BhdGgoYywgbSwgaS0+cGF0aCk7CisgICAgfQorCisgICAgYXZhaGlfbG9nX3dhcm4oIk1pc3NlZCBtZXNzYWdlICVzOjolcygpIiwgZGJ1c19tZXNzYWdlX2dldF9pbnRlcmZhY2UobSksIGRidXNfbWVzc2FnZV9nZXRfbWVtYmVyKG0pKTsKKworZmFpbDoKKyAgICBpZiAoZGJ1c19lcnJvcl9pc19zZXQoJmVycm9yKSkKKyAgICAgICAgZGJ1c19lcnJvcl9mcmVlKCZlcnJvcik7CisKKyAgICByZXR1cm4gREJVU19IQU5ETEVSX1JFU1VMVF9OT1RfWUVUX0hBTkRMRUQ7Cit9CisKK3ZvaWQgZGJ1c19wcm90b2NvbF9zZXJ2ZXJfc3RhdGVfY2hhbmdlZChBdmFoaVNlcnZlclN0YXRlIHN0YXRlKSB7CisgICAgREJ1c01lc3NhZ2UgKm07CisgICAgaW50MzJfdCB0OworICAgIGNvbnN0IGNoYXIgKmU7CisKKyAgICBpZiAoIXNlcnZlciB8fCAhc2VydmVyLT5idXMpCisgICAgICAgIHJldHVybjsKKworICAgIG0gPSBkYnVzX21lc3NhZ2VfbmV3X3NpZ25hbChBVkFISV9EQlVTX1BBVEhfU0VSVkVSLCBBVkFISV9EQlVTX0lOVEVSRkFDRV9TRVJWRVIsICJTdGF0ZUNoYW5nZWQiKTsKKworICAgIGlmICghbSkgeworICAgICAgICBhdmFoaV9sb2dfZXJyb3IoIkZhaWxlZCBhbGxvY2F0ZSBtZXNzYWdlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB0ID0gKGludDMyX3QpIHN0YXRlOworCisgICAgaWYgKHN0YXRlID09IEFWQUhJX1NFUlZFUl9DT0xMSVNJT04pCisgICAgICAgIGUgPSBBVkFISV9EQlVTX0VSUl9DT0xMSVNJT047CisgICAgZWxzZSBpZiAoc3RhdGUgPT0gQVZBSElfU0VSVkVSX0ZBSUxVUkUpCisgICAgICAgIGUgPSBhdmFoaV9lcnJvcl9udW1iZXJfdG9fZGJ1cyhhdmFoaV9zZXJ2ZXJfZXJybm8oYXZhaGlfc2VydmVyKSk7CisgICAgZWxzZQorICAgICAgICBlID0gQVZBSElfREJVU19FUlJfT0s7CisKKyAgICBkYnVzX21lc3NhZ2VfYXBwZW5kX2FyZ3MobSwgREJVU19UWVBFX0lOVDMyLCAmdCwgREJVU19UWVBFX1NUUklORywgJmUsIERCVVNfVFlQRV9JTlZBTElEKTsKKyAgICBkYnVzX2Nvbm5lY3Rpb25fc2VuZChzZXJ2ZXItPmJ1cywgbSwgTlVMTCk7CisgICAgZGJ1c19tZXNzYWdlX3VucmVmKG0pOworfQorCitzdGF0aWMgaW50IGRidXNfY29ubmVjdCh2b2lkKSB7CisgICAgREJ1c0Vycm9yIGVycm9yOworCisgICAgc3RhdGljIGNvbnN0IERCdXNPYmplY3RQYXRoVlRhYmxlIHNlcnZlcl92dGFibGUgPSB7CisgICAgICAgIE5VTEwsCisgICAgICAgIG1zZ19zZXJ2ZXJfaW1wbCwKKyAgICAgICAgTlVMTCwKKyAgICAgICAgTlVMTCwKKyAgICAgICAgTlVMTCwKKyAgICAgICAgTlVMTAorICAgIH07CisKKyAgICBhc3NlcnQoc2VydmVyKTsKKyAgICBhc3NlcnQoIXNlcnZlci0+YnVzKTsKKworICAgIGRidXNfZXJyb3JfaW5pdCgmZXJyb3IpOworCisjaWZkZWYgSEFWRV9EQlVTX0JVU19HRVRfUFJJVkFURQorICAgIGlmICghKHNlcnZlci0+YnVzID0gZGJ1c19idXNfZ2V0X3ByaXZhdGUoREJVU19CVVNfU1lTVEVNLCAmZXJyb3IpKSkgeworICAgICAgICBhc3NlcnQoZGJ1c19lcnJvcl9pc19zZXQoJmVycm9yKSk7CisgICAgICAgIGF2YWhpX2xvZ19lcnJvcigiZGJ1c19idXNfZ2V0X3ByaXZhdGUoKTogJXMiLCBlcnJvci5tZXNzYWdlKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKyNlbHNlCisgICAgeworICAgICAgICBjb25zdCBjaGFyICphOworCisgICAgICAgIGlmICghKGEgPSBnZXRlbnYoIkRCVVNfU1lTVEVNX0JVU19BRERSRVNTIikpIHx8ICEqYSkKKyAgICAgICAgICAgIGEgPSBEQlVTX1NZU1RFTV9CVVNfREVGQVVMVF9BRERSRVNTOworCisgICAgICAgIGlmICghKHNlcnZlci0+YnVzID0gZGJ1c19jb25uZWN0aW9uX29wZW5fcHJpdmF0ZShhLCAmZXJyb3IpKSkgeworICAgICAgICAgICAgYXNzZXJ0KGRidXNfZXJyb3JfaXNfc2V0KCZlcnJvcikpOworICAgICAgICAgICAgYXZhaGlfbG9nX2Vycm9yKCJkYnVzX2J1c19vcGVuX3ByaXZhdGUoKTogJXMiLCBlcnJvci5tZXNzYWdlKTsKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghZGJ1c19idXNfcmVnaXN0ZXIoc2VydmVyLT5idXMsICZlcnJvcikpIHsKKyAgICAgICAgICAgIGFzc2VydChkYnVzX2Vycm9yX2lzX3NldCgmZXJyb3IpKTsKKyAgICAgICAgICAgIGF2YWhpX2xvZ19lcnJvcigiZGJ1c19idXNfcmVnaXN0ZXIoKTogJXMiLCBlcnJvci5tZXNzYWdlKTsKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisgICAgaWYgKGF2YWhpX2RidXNfY29ubmVjdGlvbl9nbHVlKHNlcnZlci0+YnVzLCBzZXJ2ZXItPnBvbGxfYXBpKSA8IDApIHsKKyAgICAgICAgYXZhaGlfbG9nX2Vycm9yKCJhdmFoaV9kYnVzX2Nvbm5lY3Rpb25fZ2x1ZSgpIGZhaWxlZCIpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgZGJ1c19jb25uZWN0aW9uX3NldF9leGl0X29uX2Rpc2Nvbm5lY3Qoc2VydmVyLT5idXMsIEZBTFNFKTsKKworICAgIGlmIChkYnVzX2J1c19yZXF1ZXN0X25hbWUoCisgICAgICAgICAgICBzZXJ2ZXItPmJ1cywKKyAgICAgICAgICAgIEFWQUhJX0RCVVNfTkFNRSwKKyNpZiAoREJVU19WRVJTSU9OX01BSk9SID09IDApICYmIChEQlVTX1ZFUlNJT05fTUlOT1IgPCA2MCkKKyAgICAgICAgICAgIERCVVNfTkFNRV9GTEFHX1BST0hJQklUX1JFUExBQ0VNRU5ULAorI2Vsc2UKKyAgICAgICAgICAgIERCVVNfTkFNRV9GTEFHX0RPX05PVF9RVUVVRSwKKyNlbmRpZgorICAgICAgICAgICAgJmVycm9yKSAhPSBEQlVTX1JFUVVFU1RfTkFNRV9SRVBMWV9QUklNQVJZX09XTkVSKSB7CisgICAgICAgIGlmIChkYnVzX2Vycm9yX2lzX3NldCgmZXJyb3IpKSB7CisgICAgICAgICAgICBhdmFoaV9sb2dfZXJyb3IoImRidXNfYnVzX3JlcXVlc3RfbmFtZSgpOiAlcyIsIGVycm9yLm1lc3NhZ2UpOworICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CisKKyAgICAgICAgYXZhaGlfbG9nX2Vycm9yKCJGYWlsZWQgdG8gYWNxdWlyZSBELUJ1cyBuYW1lICciQVZBSElfREJVU19OQU1FIiciKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGlmICghKGRidXNfY29ubmVjdGlvbl9hZGRfZmlsdGVyKHNlcnZlci0+YnVzLCBtc2dfc2lnbmFsX2ZpbHRlcl9pbXBsLCAodm9pZCopIHNlcnZlci0+cG9sbF9hcGksIE5VTEwpKSkgeworICAgICAgICBhdmFoaV9sb2dfZXJyb3IoImRidXNfY29ubmVjdGlvbl9hZGRfZmlsdGVyKCkgZmFpbGVkIik7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBkYnVzX2J1c19hZGRfbWF0Y2goc2VydmVyLT5idXMsICJ0eXBlPSdzaWduYWwnLCIiaW50ZXJmYWNlPSciIERCVVNfSU5URVJGQUNFX0RCVVMgICInIiwgJmVycm9yKTsKKworICAgIGlmIChkYnVzX2Vycm9yX2lzX3NldCgmZXJyb3IpKSB7CisgICAgICAgIGF2YWhpX2xvZ19lcnJvcigiZGJ1c19idXNfYWRkX21hdGNoKCk6ICVzIiwgZXJyb3IubWVzc2FnZSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBpZiAoIShkYnVzX2Nvbm5lY3Rpb25fcmVnaXN0ZXJfb2JqZWN0X3BhdGgoc2VydmVyLT5idXMsIEFWQUhJX0RCVVNfUEFUSF9TRVJWRVIsICZzZXJ2ZXJfdnRhYmxlLCBOVUxMKSkpIHsKKyAgICAgICAgYXZhaGlfbG9nX2Vycm9yKCJkYnVzX2Nvbm5lY3Rpb25fcmVnaXN0ZXJfb2JqZWN0X3BhdGgoKSBmYWlsZWQiKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIHJldHVybiAwOworZmFpbDoKKworICAgIGlmIChkYnVzX2Vycm9yX2lzX3NldCgmZXJyb3IpKQorICAgICAgICBkYnVzX2Vycm9yX2ZyZWUoJmVycm9yKTsKKworICAgIGlmIChzZXJ2ZXItPmJ1cykgeworI2lmZGVmIEhBVkVfREJVU19DT05ORUNUSU9OX0NMT1NFCisgICAgICAgIGRidXNfY29ubmVjdGlvbl9jbG9zZShzZXJ2ZXItPmJ1cyk7CisjZWxzZQorICAgICAgICBkYnVzX2Nvbm5lY3Rpb25fZGlzY29ubmVjdChzZXJ2ZXItPmJ1cyk7CisjZW5kaWYKKyAgICAgICAgZGJ1c19jb25uZWN0aW9uX3VucmVmKHNlcnZlci0+YnVzKTsKKyAgICAgICAgc2VydmVyLT5idXMgPSBOVUxMOworICAgIH0KKworICAgIHJldHVybiAtMTsKK30KKworc3RhdGljIHZvaWQgZGJ1c19kaXNjb25uZWN0KHZvaWQpIHsKKyAgICBhc3NlcnQoc2VydmVyKTsKKworICAgIHdoaWxlIChzZXJ2ZXItPmNsaWVudHMpCisgICAgICAgIGNsaWVudF9mcmVlKHNlcnZlci0+Y2xpZW50cyk7CisKKyAgICBhc3NlcnQoc2VydmVyLT5uX2NsaWVudHMgPT0gMCk7CisKKyAgICBpZiAoc2VydmVyLT5idXMpIHsKKyNpZmRlZiBIQVZFX0RCVVNfQ09OTkVDVElPTl9DTE9TRQorICAgICAgICBkYnVzX2Nvbm5lY3Rpb25fY2xvc2Uoc2VydmVyLT5idXMpOworI2Vsc2UKKyAgICAgICAgZGJ1c19jb25uZWN0aW9uX2Rpc2Nvbm5lY3Qoc2VydmVyLT5idXMpOworI2VuZGlmCisgICAgICAgIGRidXNfY29ubmVjdGlvbl91bnJlZihzZXJ2ZXItPmJ1cyk7CisgICAgICAgIHNlcnZlci0+YnVzID0gTlVMTDsKKyAgICB9Cit9CisKK2ludCBkYnVzX3Byb3RvY29sX3NldHVwKGNvbnN0IEF2YWhpUG9sbCAqcG9sbF9hcGksCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX2Rpc2FibGVfdXNlcl9zZXJ2aWNlX3B1Ymxpc2hpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX25fY2xpZW50c19tYXgsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX25fb2JqZWN0c19wZXJfY2xpZW50X21heCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBfbl9lbnRyaWVzX3Blcl9lbnRyeV9ncm91cF9tYXgsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZm9yY2UpIHsKKworCisgICAgc2VydmVyID0gYXZhaGlfbmV3KFNlcnZlciwgMSk7CisgICAgQVZBSElfTExJU1RfSEVBRF9JTklUKENsaWVudHMsIHNlcnZlci0+Y2xpZW50cyk7CisgICAgc2VydmVyLT5jdXJyZW50X2lkID0gMDsKKyAgICBzZXJ2ZXItPm5fY2xpZW50cyA9IDA7CisgICAgc2VydmVyLT5idXMgPSBOVUxMOworICAgIHNlcnZlci0+cG9sbF9hcGkgPSBwb2xsX2FwaTsKKyAgICBzZXJ2ZXItPnJlY29ubmVjdF90aW1lb3V0ID0gTlVMTDsKKyAgICBzZXJ2ZXItPnJlY29ubmVjdCA9IGZvcmNlOworICAgIHNlcnZlci0+ZGlzYWJsZV91c2VyX3NlcnZpY2VfcHVibGlzaGluZyA9IF9kaXNhYmxlX3VzZXJfc2VydmljZV9wdWJsaXNoaW5nOworICAgIHNlcnZlci0+bl9jbGllbnRzX21heCA9IF9uX2NsaWVudHNfbWF4ID4gMCA/IF9uX2NsaWVudHNfbWF4IDogREVGQVVMVF9DTElFTlRTX01BWDsKKyAgICBzZXJ2ZXItPm5fb2JqZWN0c19wZXJfY2xpZW50X21heCA9IF9uX29iamVjdHNfcGVyX2NsaWVudF9tYXggPiAwID8gX25fb2JqZWN0c19wZXJfY2xpZW50X21heCA6IERFRkFVTFRfT0JKRUNUU19QRVJfQ0xJRU5UX01BWDsKKyAgICBzZXJ2ZXItPm5fZW50cmllc19wZXJfZW50cnlfZ3JvdXBfbWF4ID0gX25fZW50cmllc19wZXJfZW50cnlfZ3JvdXBfbWF4ID4gMCA/IF9uX2VudHJpZXNfcGVyX2VudHJ5X2dyb3VwX21heCA6IERFRkFVTFRfRU5UUklFU19QRVJfRU5UUllfR1JPVVBfTUFYOworCisgICAgaWYgKGRidXNfY29ubmVjdCgpIDwgMCkgeworICAgICAgICBzdHJ1Y3QgdGltZXZhbCB0djsKKworICAgICAgICBpZiAoIWZvcmNlKQorICAgICAgICAgICAgZ290byBmYWlsOworCisgICAgICAgIGF2YWhpX2xvZ193YXJuKCJXQVJOSU5HOiBGYWlsZWQgdG8gY29udGFjdCBELUJ1cyBkYWVtb24sIHJldHJ5aW5nIGluICVpbXMuIiwgUkVDT05ORUNUX01TRUMpOworCisgICAgICAgIGF2YWhpX2VsYXBzZV90aW1lKCZ0diwgUkVDT05ORUNUX01TRUMsIDApOworICAgICAgICBzZXJ2ZXItPnJlY29ubmVjdF90aW1lb3V0ID0gc2VydmVyLT5wb2xsX2FwaS0+dGltZW91dF9uZXcoc2VydmVyLT5wb2xsX2FwaSwgJnR2LCByZWNvbm5lY3RfY2FsbGJhY2ssIE5VTEwpOworICAgIH0KKworICAgIHJldHVybiAwOworCitmYWlsOgorICAgIGlmIChzZXJ2ZXItPmJ1cykgeworI2lmZGVmIEhBVkVfREJVU19DT05ORUNUSU9OX0NMT1NFCisgICAgICAgIGRidXNfY29ubmVjdGlvbl9jbG9zZShzZXJ2ZXItPmJ1cyk7CisjZWxzZQorICAgICAgICBkYnVzX2Nvbm5lY3Rpb25fZGlzY29ubmVjdChzZXJ2ZXItPmJ1cyk7CisjZW5kaWYKKworICAgICAgICBkYnVzX2Nvbm5lY3Rpb25fdW5yZWYoc2VydmVyLT5idXMpOworICAgIH0KKworICAgIGF2YWhpX2ZyZWUoc2VydmVyKTsKKyAgICBzZXJ2ZXIgPSBOVUxMOworICAgIHJldHVybiAtMTsKK30KKwordm9pZCBkYnVzX3Byb3RvY29sX3NodXRkb3duKHZvaWQpIHsKKworICAgIGlmIChzZXJ2ZXIpIHsKKyAgICAgICAgZGJ1c19kaXNjb25uZWN0KCk7CisKKyAgICAgICAgaWYgKHNlcnZlci0+cmVjb25uZWN0X3RpbWVvdXQpCisgICAgICAgICAgICBzZXJ2ZXItPnBvbGxfYXBpLT50aW1lb3V0X2ZyZWUoc2VydmVyLT5yZWNvbm5lY3RfdGltZW91dCk7CisKKyAgICAgICAgYXZhaGlfZnJlZShzZXJ2ZXIpOworICAgICAgICBzZXJ2ZXIgPSBOVUxMOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vZGJ1cy1wcm90b2NvbC5oIGIvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9kYnVzLXByb3RvY29sLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE4NDQ4NwotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vZGJ1cy1wcm90b2NvbC5oCkBAIC0wLDAgKzEsMzIgQEAKKyNpZm5kZWYgZm9vZGJ1c3Byb3RvY29saGZvbworI2RlZmluZSBmb29kYnVzcHJvdG9jb2xoZm9vCisKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworaW50IGRidXNfcHJvdG9jb2xfc2V0dXAoY29uc3QgQXZhaGlQb2xsICpwb2xsX2FwaSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBfZGlzYWJsZV91c2VyX3NlcnZpY2VfcHVibGlzaGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBfbl9jbGllbnRzX21heCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBfbl9vYmplY3RzX3Blcl9jbGllbnRfbWF4LAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9uX2VudHJpZXNfcGVyX2VudHJ5X2dyb3VwX21heCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBmb3JjZSk7Cit2b2lkIGRidXNfcHJvdG9jb2xfc2h1dGRvd24odm9pZCk7Cit2b2lkIGRidXNfcHJvdG9jb2xfc2VydmVyX3N0YXRlX2NoYW5nZWQoQXZhaGlTZXJ2ZXJTdGF0ZSBzdGF0ZSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9kYnVzLXJlY29yZC1icm93c2VyLmMgYi9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL2RidXMtcmVjb3JkLWJyb3dzZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDMzN2NmCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9kYnVzLXJlY29yZC1icm93c2VyLmMKQEAgLTAsMCArMSwxNjQgQEAKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vbWFsbG9jLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2RidXMuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vZXJyb3IuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb3JlL2xvZy5oPgorCisjaW5jbHVkZSAiZGJ1cy11dGlsLmgiCisjaW5jbHVkZSAiZGJ1cy1pbnRlcm5hbC5oIgorCit2b2lkIGF2YWhpX2RidXNfcmVjb3JkX2Jyb3dzZXJfZnJlZShSZWNvcmRCcm93c2VySW5mbyAqaSkgeworICAgIGFzc2VydChpKTsKKworICAgIGlmIChpLT5yZWNvcmRfYnJvd3NlcikKKyAgICAgICAgYXZhaGlfc19yZWNvcmRfYnJvd3Nlcl9mcmVlKGktPnJlY29yZF9icm93c2VyKTsKKworICAgIGlmIChpLT5wYXRoKSB7CisgICAgICAgIGRidXNfY29ubmVjdGlvbl91bnJlZ2lzdGVyX29iamVjdF9wYXRoKHNlcnZlci0+YnVzLCBpLT5wYXRoKTsKKyAgICAgICAgYXZhaGlfZnJlZShpLT5wYXRoKTsKKyAgICB9CisgICAgQVZBSElfTExJU1RfUkVNT1ZFKFJlY29yZEJyb3dzZXJJbmZvLCByZWNvcmRfYnJvd3NlcnMsIGktPmNsaWVudC0+cmVjb3JkX2Jyb3dzZXJzLCBpKTsKKworICAgIGFzc2VydChpLT5jbGllbnQtPm5fb2JqZWN0cyA+PSAxKTsKKyAgICBpLT5jbGllbnQtPm5fb2JqZWN0cy0tOworCisgICAgYXZhaGlfZnJlZShpKTsKK30KKworREJ1c0hhbmRsZXJSZXN1bHQgYXZhaGlfZGJ1c19tc2dfcmVjb3JkX2Jyb3dzZXJfaW1wbChEQnVzQ29ubmVjdGlvbiAqYywgREJ1c01lc3NhZ2UgKm0sIHZvaWQgKnVzZXJkYXRhKSB7CisgICAgREJ1c0Vycm9yIGVycm9yOworICAgIFJlY29yZEJyb3dzZXJJbmZvICppID0gdXNlcmRhdGE7CisKKyAgICBhc3NlcnQoYyk7CisgICAgYXNzZXJ0KG0pOworICAgIGFzc2VydChpKTsKKworICAgIGRidXNfZXJyb3JfaW5pdCgmZXJyb3IpOworCisgICAgYXZhaGlfbG9nX2RlYnVnKF9fRklMRV9fIjogaW50ZXJmYWNlPSVzLCBwYXRoPSVzLCBtZW1iZXI9JXMiLAorICAgICAgICAgICAgICAgICAgICBkYnVzX21lc3NhZ2VfZ2V0X2ludGVyZmFjZShtKSwKKyAgICAgICAgICAgICAgICAgICAgZGJ1c19tZXNzYWdlX2dldF9wYXRoKG0pLAorICAgICAgICAgICAgICAgICAgICBkYnVzX21lc3NhZ2VfZ2V0X21lbWJlcihtKSk7CisKKyAgICAvKiBJbnRyb3NwZWN0aW9uICovCisgICAgaWYgKGRidXNfbWVzc2FnZV9pc19tZXRob2RfY2FsbChtLCBEQlVTX0lOVEVSRkFDRV9JTlRST1NQRUNUQUJMRSwgIkludHJvc3BlY3QiKSkKKyAgICAgICAgcmV0dXJuIGF2YWhpX2RidXNfaGFuZGxlX2ludHJvc3BlY3QoYywgbSwgIm9yZy5mcmVlZGVza3RvcC5BdmFoaS5SZWNvcmRCcm93c2VyLnhtbCIpOworCisgICAgLyogQWNjZXNzIGNvbnRyb2wgKi8KKyAgICBpZiAoc3RyY21wKGRidXNfbWVzc2FnZV9nZXRfc2VuZGVyKG0pLCBpLT5jbGllbnQtPm5hbWUpKQorICAgICAgICByZXR1cm4gYXZhaGlfZGJ1c19yZXNwb25kX2Vycm9yKGMsIG0sIEFWQUhJX0VSUl9BQ0NFU1NfREVOSUVELCBOVUxMKTsKKworICAgIGlmIChkYnVzX21lc3NhZ2VfaXNfbWV0aG9kX2NhbGwobSwgQVZBSElfREJVU19JTlRFUkZBQ0VfUkVDT1JEX0JST1dTRVIsICJGcmVlIikpIHsKKworICAgICAgICBpZiAoIWRidXNfbWVzc2FnZV9nZXRfYXJncyhtLCAmZXJyb3IsIERCVVNfVFlQRV9JTlZBTElEKSkgeworICAgICAgICAgICAgYXZhaGlfbG9nX3dhcm4oIkVycm9yIHBhcnNpbmcgUmVjb3JkQnJvd3Nlcjo6RnJlZSBtZXNzYWdlIik7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKworICAgICAgICBhdmFoaV9kYnVzX3JlY29yZF9icm93c2VyX2ZyZWUoaSk7CisgICAgICAgIHJldHVybiBhdmFoaV9kYnVzX3Jlc3BvbmRfb2soYywgbSk7CisKKyAgICB9CisKKyAgICBhdmFoaV9sb2dfd2FybigiTWlzc2VkIG1lc3NhZ2UgJXM6OiVzKCkiLCBkYnVzX21lc3NhZ2VfZ2V0X2ludGVyZmFjZShtKSwgZGJ1c19tZXNzYWdlX2dldF9tZW1iZXIobSkpOworCitmYWlsOgorICAgIGlmIChkYnVzX2Vycm9yX2lzX3NldCgmZXJyb3IpKQorICAgICAgICBkYnVzX2Vycm9yX2ZyZWUoJmVycm9yKTsKKworICAgIHJldHVybiBEQlVTX0hBTkRMRVJfUkVTVUxUX05PVF9ZRVRfSEFORExFRDsKK30KKwordm9pZCBhdmFoaV9kYnVzX3JlY29yZF9icm93c2VyX2NhbGxiYWNrKAorICAgIEF2YWhpU1JlY29yZEJyb3dzZXIgKmIsCisgICAgQXZhaGlJZkluZGV4IGludGVyZmFjZSwKKyAgICBBdmFoaVByb3RvY29sIHByb3RvY29sLAorICAgIEF2YWhpQnJvd3NlckV2ZW50IGV2ZW50LAorICAgIEF2YWhpUmVjb3JkICpyZWNvcmQsCisgICAgQXZhaGlMb29rdXBSZXN1bHRGbGFncyBmbGFncywKKyAgICB2b2lkKiB1c2VyZGF0YSkgeworCisgICAgUmVjb3JkQnJvd3NlckluZm8gKmkgPSB1c2VyZGF0YTsKKyAgICBEQnVzTWVzc2FnZSAqbSA9IE5VTEw7CisgICAgaW50MzJfdCBpX2ludGVyZmFjZSwgaV9wcm90b2NvbDsKKyAgICB1aW50MzJfdCB1X2ZsYWdzOworCisgICAgYXNzZXJ0KGIpOworICAgIGFzc2VydChpKTsKKworICAgIGlfaW50ZXJmYWNlID0gKGludDMyX3QpIGludGVyZmFjZTsKKyAgICBpX3Byb3RvY29sID0gKGludDMyX3QpIHByb3RvY29sOworICAgIHVfZmxhZ3MgPSAodWludDMyX3QpIGZsYWdzOworCisgICAgbSA9IGRidXNfbWVzc2FnZV9uZXdfc2lnbmFsKGktPnBhdGgsIEFWQUhJX0RCVVNfSU5URVJGQUNFX1JFQ09SRF9CUk9XU0VSLCBhdmFoaV9kYnVzX21hcF9icm93c2Vfc2lnbmFsX25hbWUoZXZlbnQpKTsKKworICAgIGlmICghbSkgeworICAgICAgICBhdmFoaV9sb2dfZXJyb3IoIkZhaWxlZCBhbGxvY2F0ZSBtZXNzYWdlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZXZlbnQgPT0gQVZBSElfQlJPV1NFUl9ORVcgfHwgZXZlbnQgPT0gQVZBSElfQlJPV1NFUl9SRU1PVkUpIHsKKyAgICAgICAgdWludDhfdCByZGF0YVsweEZGRkZdOworICAgICAgICBzaXplX3Qgc2l6ZTsKKyAgICAgICAgYXNzZXJ0KHJlY29yZCk7CisKKyAgICAgICAgaWYgKCEoZGJ1c19tZXNzYWdlX2FwcGVuZF9hcmdzKAorICAgICAgICAgICAgICAgICAgbSwKKyAgICAgICAgICAgICAgICAgIERCVVNfVFlQRV9JTlQzMiwgJmlfaW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICAgREJVU19UWVBFX0lOVDMyLCAmaV9wcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgIERCVVNfVFlQRV9TVFJJTkcsICZyZWNvcmQtPmtleS0+bmFtZSwKKyAgICAgICAgICAgICAgICAgIERCVVNfVFlQRV9VSU5UMTYsICZyZWNvcmQtPmtleS0+Y2xhenosCisgICAgICAgICAgICAgICAgICBEQlVTX1RZUEVfVUlOVDE2LCAmcmVjb3JkLT5rZXktPnR5cGUsCisgICAgICAgICAgICAgICAgICBEQlVTX1RZUEVfSU5WQUxJRCkpKQorICAgICAgICAgICAgZ290byBmYWlsOworCisgICAgICAgIGlmICgoc2l6ZSA9IGF2YWhpX3JkYXRhX3NlcmlhbGl6ZShyZWNvcmQsIHJkYXRhLCBzaXplb2YocmRhdGEpKSkgPT0gKHNpemVfdCkgLTEgfHwKKyAgICAgICAgICAgIGF2YWhpX2RidXNfYXBwZW5kX3JkYXRhKG0sIHJkYXRhLCBzaXplKSA8IDApIHsKKyAgICAgICAgICAgIGF2YWhpX2xvZ19kZWJ1ZyhfX0ZJTEVfXyI6IEZhaWxlZCB0byBhcHBlbmQgcmRhdGEiKTsKKyAgICAgICAgICAgIGRidXNfbWVzc2FnZV91bnJlZihtKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGRidXNfbWVzc2FnZV9hcHBlbmRfYXJncygKKyAgICAgICAgICAgIG0sCisgICAgICAgICAgICBEQlVTX1RZUEVfVUlOVDMyLCAmdV9mbGFncywKKyAgICAgICAgICAgIERCVVNfVFlQRV9JTlZBTElEKTsKKworICAgIH0gZWxzZSBpZiAoZXZlbnQgPT0gQVZBSElfQlJPV1NFUl9GQUlMVVJFKQorICAgICAgICBhdmFoaV9kYnVzX2FwcGVuZF9zZXJ2ZXJfZXJyb3IobSk7CisKKyAgICBkYnVzX21lc3NhZ2Vfc2V0X2Rlc3RpbmF0aW9uKG0sIGktPmNsaWVudC0+bmFtZSk7CisgICAgZGJ1c19jb25uZWN0aW9uX3NlbmQoc2VydmVyLT5idXMsIG0sIE5VTEwpOworICAgIGRidXNfbWVzc2FnZV91bnJlZihtKTsKKworICAgIHJldHVybjsKKworZmFpbDoKKworICAgIGlmIChtKQorICAgICAgICBkYnVzX21lc3NhZ2VfdW5yZWYobSk7Cit9CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL2RidXMtc2VydmljZS1icm93c2VyLmMgYi9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL2RidXMtc2VydmljZS1icm93c2VyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTYyZGNhMAotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vZGJ1cy1zZXJ2aWNlLWJyb3dzZXIuYwpAQCAtMCwwICsxLDE0NCBAQAorLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9tYWxsb2MuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vZGJ1cy5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9lcnJvci5oPgorI2luY2x1ZGUgPGF2YWhpLWNvcmUvbG9nLmg+CisKKyNpbmNsdWRlICJkYnVzLXV0aWwuaCIKKyNpbmNsdWRlICJkYnVzLWludGVybmFsLmgiCisKK3ZvaWQgYXZhaGlfZGJ1c19zZXJ2aWNlX2Jyb3dzZXJfZnJlZShTZXJ2aWNlQnJvd3NlckluZm8gKmkpIHsKKyAgICBhc3NlcnQoaSk7CisKKyAgICBpZiAoaS0+c2VydmljZV9icm93c2VyKQorICAgICAgICBhdmFoaV9zX3NlcnZpY2VfYnJvd3Nlcl9mcmVlKGktPnNlcnZpY2VfYnJvd3Nlcik7CisKKyAgICBpZiAoaS0+cGF0aCkgeworICAgICAgICBkYnVzX2Nvbm5lY3Rpb25fdW5yZWdpc3Rlcl9vYmplY3RfcGF0aChzZXJ2ZXItPmJ1cywgaS0+cGF0aCk7CisgICAgICAgIGF2YWhpX2ZyZWUoaS0+cGF0aCk7CisgICAgfQorCisgICAgQVZBSElfTExJU1RfUkVNT1ZFKFNlcnZpY2VCcm93c2VySW5mbywgc2VydmljZV9icm93c2VycywgaS0+Y2xpZW50LT5zZXJ2aWNlX2Jyb3dzZXJzLCBpKTsKKworICAgIGFzc2VydChpLT5jbGllbnQtPm5fb2JqZWN0cyA+PSAxKTsKKyAgICBpLT5jbGllbnQtPm5fb2JqZWN0cy0tOworCisgICAgYXZhaGlfZnJlZShpKTsKK30KKworREJ1c0hhbmRsZXJSZXN1bHQgYXZhaGlfZGJ1c19tc2dfc2VydmljZV9icm93c2VyX2ltcGwoREJ1c0Nvbm5lY3Rpb24gKmMsIERCdXNNZXNzYWdlICptLCB2b2lkICp1c2VyZGF0YSkgeworICAgIERCdXNFcnJvciBlcnJvcjsKKyAgICBTZXJ2aWNlQnJvd3NlckluZm8gKmkgPSB1c2VyZGF0YTsKKworICAgIGFzc2VydChjKTsKKyAgICBhc3NlcnQobSk7CisgICAgYXNzZXJ0KGkpOworCisgICAgZGJ1c19lcnJvcl9pbml0KCZlcnJvcik7CisKKyAgICBhdmFoaV9sb2dfZGVidWcoX19GSUxFX18iOiBpbnRlcmZhY2U9JXMsIHBhdGg9JXMsIG1lbWJlcj0lcyIsCisgICAgICAgICAgICAgICAgICAgIGRidXNfbWVzc2FnZV9nZXRfaW50ZXJmYWNlKG0pLAorICAgICAgICAgICAgICAgICAgICBkYnVzX21lc3NhZ2VfZ2V0X3BhdGgobSksCisgICAgICAgICAgICAgICAgICAgIGRidXNfbWVzc2FnZV9nZXRfbWVtYmVyKG0pKTsKKworICAgIC8qIEludHJvc3BlY3Rpb24gKi8KKyAgICBpZiAoZGJ1c19tZXNzYWdlX2lzX21ldGhvZF9jYWxsKG0sIERCVVNfSU5URVJGQUNFX0lOVFJPU1BFQ1RBQkxFLCAiSW50cm9zcGVjdCIpKQorICAgICAgICByZXR1cm4gYXZhaGlfZGJ1c19oYW5kbGVfaW50cm9zcGVjdChjLCBtLCAib3JnLmZyZWVkZXNrdG9wLkF2YWhpLlNlcnZpY2VCcm93c2VyLnhtbCIpOworCisgICAgLyogQWNjZXNzIGNvbnRyb2wgKi8KKyAgICBpZiAoc3RyY21wKGRidXNfbWVzc2FnZV9nZXRfc2VuZGVyKG0pLCBpLT5jbGllbnQtPm5hbWUpKQorICAgICAgICByZXR1cm4gYXZhaGlfZGJ1c19yZXNwb25kX2Vycm9yKGMsIG0sIEFWQUhJX0VSUl9BQ0NFU1NfREVOSUVELCBOVUxMKTsKKworICAgIGlmIChkYnVzX21lc3NhZ2VfaXNfbWV0aG9kX2NhbGwobSwgQVZBSElfREJVU19JTlRFUkZBQ0VfU0VSVklDRV9CUk9XU0VSLCAiRnJlZSIpKSB7CisKKyAgICAgICAgaWYgKCFkYnVzX21lc3NhZ2VfZ2V0X2FyZ3MobSwgJmVycm9yLCBEQlVTX1RZUEVfSU5WQUxJRCkpIHsKKyAgICAgICAgICAgIGF2YWhpX2xvZ193YXJuKCJFcnJvciBwYXJzaW5nIFNlcnZpY2VCcm93c2VyOjpGcmVlIG1lc3NhZ2UiKTsKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQorCisgICAgICAgIGF2YWhpX2RidXNfc2VydmljZV9icm93c2VyX2ZyZWUoaSk7CisgICAgICAgIHJldHVybiBhdmFoaV9kYnVzX3Jlc3BvbmRfb2soYywgbSk7CisKKyAgICB9CisKKyAgICBhdmFoaV9sb2dfd2FybigiTWlzc2VkIG1lc3NhZ2UgJXM6OiVzKCkiLCBkYnVzX21lc3NhZ2VfZ2V0X2ludGVyZmFjZShtKSwgZGJ1c19tZXNzYWdlX2dldF9tZW1iZXIobSkpOworCitmYWlsOgorICAgIGlmIChkYnVzX2Vycm9yX2lzX3NldCgmZXJyb3IpKQorICAgICAgICBkYnVzX2Vycm9yX2ZyZWUoJmVycm9yKTsKKworICAgIHJldHVybiBEQlVTX0hBTkRMRVJfUkVTVUxUX05PVF9ZRVRfSEFORExFRDsKK30KKwordm9pZCBhdmFoaV9kYnVzX3NlcnZpY2VfYnJvd3Nlcl9jYWxsYmFjayhBdmFoaVNTZXJ2aWNlQnJvd3NlciAqYiwgQXZhaGlJZkluZGV4IGludGVyZmFjZSwgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwgQXZhaGlCcm93c2VyRXZlbnQgZXZlbnQsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnR5cGUsIGNvbnN0IGNoYXIgKmRvbWFpbiwgQXZhaGlMb29rdXBSZXN1bHRGbGFncyBmbGFncywgdm9pZCogdXNlcmRhdGEpIHsKKyAgICBTZXJ2aWNlQnJvd3NlckluZm8gKmkgPSB1c2VyZGF0YTsKKyAgICBEQnVzTWVzc2FnZSAqbTsKKyAgICBpbnQzMl90IGlfaW50ZXJmYWNlLCBpX3Byb3RvY29sOworICAgIHVpbnQzMl90IHVfZmxhZ3M7CisKKyAgICBhc3NlcnQoYik7CisgICAgYXNzZXJ0KGkpOworCisgICAgbSA9IGRidXNfbWVzc2FnZV9uZXdfc2lnbmFsKGktPnBhdGgsIEFWQUhJX0RCVVNfSU5URVJGQUNFX1NFUlZJQ0VfQlJPV1NFUiwgYXZhaGlfZGJ1c19tYXBfYnJvd3NlX3NpZ25hbF9uYW1lKGV2ZW50KSk7CisKKyAgICBpZiAoIW0pIHsKKyAgICAgICAgYXZhaGlfbG9nX2Vycm9yKCJGYWlsZWQgYWxsb2NhdGUgbWVzc2FnZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGV2ZW50ID09IEFWQUhJX0JST1dTRVJfTkVXKSB7CisgICAgICAgIC8qIFBhdGNoIGluIEFWQUhJX0xPT0tVUF9SRVNVTFRfT1VSX09XTiAqLworCisgICAgICAgIGlmIChhdmFoaV9kYnVzX2lzX291cl9vd25fc2VydmljZShpLT5jbGllbnQsIGludGVyZmFjZSwgcHJvdG9jb2wsIG5hbWUsIHR5cGUsIGRvbWFpbikgPiAwKQorICAgICAgICAgICAgZmxhZ3MgfD0gQVZBSElfTE9PS1VQX1JFU1VMVF9PVVJfT1dOOworICAgIH0KKworICAgIGlfaW50ZXJmYWNlID0gKGludDMyX3QpIGludGVyZmFjZTsKKyAgICBpX3Byb3RvY29sID0gKGludDMyX3QpIHByb3RvY29sOworICAgIHVfZmxhZ3MgPSAodWludDMyX3QpIGZsYWdzOworCisgICAgaWYgKGV2ZW50ID09IEFWQUhJX0JST1dTRVJfTkVXIHx8IGV2ZW50ID09IEFWQUhJX0JST1dTRVJfUkVNT1ZFKSB7CisgICAgICAgIGFzc2VydChuYW1lKTsKKyAgICAgICAgYXNzZXJ0KHR5cGUpOworICAgICAgICBhc3NlcnQoZG9tYWluKTsKKworICAgICAgICBkYnVzX21lc3NhZ2VfYXBwZW5kX2FyZ3MoCisgICAgICAgICAgICBtLAorICAgICAgICAgICAgREJVU19UWVBFX0lOVDMyLCAmaV9pbnRlcmZhY2UsCisgICAgICAgICAgICBEQlVTX1RZUEVfSU5UMzIsICZpX3Byb3RvY29sLAorICAgICAgICAgICAgREJVU19UWVBFX1NUUklORywgJm5hbWUsCisgICAgICAgICAgICBEQlVTX1RZUEVfU1RSSU5HLCAmdHlwZSwKKyAgICAgICAgICAgIERCVVNfVFlQRV9TVFJJTkcsICZkb21haW4sCisgICAgICAgICAgICBEQlVTX1RZUEVfVUlOVDMyLCAmdV9mbGFncywKKyAgICAgICAgICAgIERCVVNfVFlQRV9JTlZBTElEKTsKKyAgICB9IGVsc2UgaWYgKGV2ZW50ID09IEFWQUhJX0JST1dTRVJfRkFJTFVSRSkKKyAgICAgICAgYXZhaGlfZGJ1c19hcHBlbmRfc2VydmVyX2Vycm9yKG0pOworCisgICAgZGJ1c19tZXNzYWdlX3NldF9kZXN0aW5hdGlvbihtLCBpLT5jbGllbnQtPm5hbWUpOworICAgIGRidXNfY29ubmVjdGlvbl9zZW5kKHNlcnZlci0+YnVzLCBtLCBOVUxMKTsKKyAgICBkYnVzX21lc3NhZ2VfdW5yZWYobSk7Cit9CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL2RidXMtc2VydmljZS10eXBlLWJyb3dzZXIuYyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vZGJ1cy1zZXJ2aWNlLXR5cGUtYnJvd3Nlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwYWZkYmUKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL2RidXMtc2VydmljZS10eXBlLWJyb3dzZXIuYwpAQCAtMCwwICsxLDEzNCBAQAorLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9tYWxsb2MuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vZGJ1cy5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9lcnJvci5oPgorI2luY2x1ZGUgPGF2YWhpLWNvcmUvbG9nLmg+CisKKyNpbmNsdWRlICJkYnVzLXV0aWwuaCIKKyNpbmNsdWRlICJkYnVzLWludGVybmFsLmgiCisKK3ZvaWQgYXZhaGlfZGJ1c19zZXJ2aWNlX3R5cGVfYnJvd3Nlcl9mcmVlKFNlcnZpY2VUeXBlQnJvd3NlckluZm8gKmkpIHsKKyAgICBhc3NlcnQoaSk7CisKKyAgICBpZiAoaS0+c2VydmljZV90eXBlX2Jyb3dzZXIpCisgICAgICAgIGF2YWhpX3Nfc2VydmljZV90eXBlX2Jyb3dzZXJfZnJlZShpLT5zZXJ2aWNlX3R5cGVfYnJvd3Nlcik7CisKKyAgICBpZiAoaS0+cGF0aCkgeworICAgICAgICBkYnVzX2Nvbm5lY3Rpb25fdW5yZWdpc3Rlcl9vYmplY3RfcGF0aChzZXJ2ZXItPmJ1cywgaS0+cGF0aCk7CisgICAgICAgIGF2YWhpX2ZyZWUoaS0+cGF0aCk7CisgICAgfQorCisgICAgQVZBSElfTExJU1RfUkVNT1ZFKFNlcnZpY2VUeXBlQnJvd3NlckluZm8sIHNlcnZpY2VfdHlwZV9icm93c2VycywgaS0+Y2xpZW50LT5zZXJ2aWNlX3R5cGVfYnJvd3NlcnMsIGkpOworCisgICAgYXNzZXJ0KGktPmNsaWVudC0+bl9vYmplY3RzID49IDEpOworICAgIGktPmNsaWVudC0+bl9vYmplY3RzLS07CisKKyAgICBhdmFoaV9mcmVlKGkpOworfQorCitEQnVzSGFuZGxlclJlc3VsdCBhdmFoaV9kYnVzX21zZ19zZXJ2aWNlX3R5cGVfYnJvd3Nlcl9pbXBsKERCdXNDb25uZWN0aW9uICpjLCBEQnVzTWVzc2FnZSAqbSwgdm9pZCAqdXNlcmRhdGEpIHsKKyAgICBEQnVzRXJyb3IgZXJyb3I7CisgICAgU2VydmljZVR5cGVCcm93c2VySW5mbyAqaSA9IHVzZXJkYXRhOworCisgICAgYXNzZXJ0KGMpOworICAgIGFzc2VydChtKTsKKyAgICBhc3NlcnQoaSk7CisKKyAgICBkYnVzX2Vycm9yX2luaXQoJmVycm9yKTsKKworICAgIGF2YWhpX2xvZ19kZWJ1ZyhfX0ZJTEVfXyI6IGludGVyZmFjZT0lcywgcGF0aD0lcywgbWVtYmVyPSVzIiwKKyAgICAgICAgICAgICAgICAgICAgZGJ1c19tZXNzYWdlX2dldF9pbnRlcmZhY2UobSksCisgICAgICAgICAgICAgICAgICAgIGRidXNfbWVzc2FnZV9nZXRfcGF0aChtKSwKKyAgICAgICAgICAgICAgICAgICAgZGJ1c19tZXNzYWdlX2dldF9tZW1iZXIobSkpOworCisgICAgLyogSW50cm9zcGVjdGlvbiAqLworICAgIGlmIChkYnVzX21lc3NhZ2VfaXNfbWV0aG9kX2NhbGwobSwgREJVU19JTlRFUkZBQ0VfSU5UUk9TUEVDVEFCTEUsICJJbnRyb3NwZWN0IikpCisgICAgICAgIHJldHVybiBhdmFoaV9kYnVzX2hhbmRsZV9pbnRyb3NwZWN0KGMsIG0sICJvcmcuZnJlZWRlc2t0b3AuQXZhaGkuU2VydmljZVR5cGVCcm93c2VyLnhtbCIpOworCisgICAgLyogQWNjZXNzIGNvbnRyb2wgKi8KKyAgICBpZiAoc3RyY21wKGRidXNfbWVzc2FnZV9nZXRfc2VuZGVyKG0pLCBpLT5jbGllbnQtPm5hbWUpKQorICAgICAgICByZXR1cm4gYXZhaGlfZGJ1c19yZXNwb25kX2Vycm9yKGMsIG0sIEFWQUhJX0VSUl9BQ0NFU1NfREVOSUVELCBOVUxMKTsKKworICAgIGlmIChkYnVzX21lc3NhZ2VfaXNfbWV0aG9kX2NhbGwobSwgQVZBSElfREJVU19JTlRFUkZBQ0VfU0VSVklDRV9UWVBFX0JST1dTRVIsICJGcmVlIikpIHsKKworICAgICAgICBpZiAoIWRidXNfbWVzc2FnZV9nZXRfYXJncyhtLCAmZXJyb3IsIERCVVNfVFlQRV9JTlZBTElEKSkgeworICAgICAgICAgICAgYXZhaGlfbG9nX3dhcm4oIkVycm9yIHBhcnNpbmcgU2VydmljZVR5cGVCcm93c2VyOjpGcmVlIG1lc3NhZ2UiKTsKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQorCisgICAgICAgIGF2YWhpX2RidXNfc2VydmljZV90eXBlX2Jyb3dzZXJfZnJlZShpKTsKKyAgICAgICAgcmV0dXJuIGF2YWhpX2RidXNfcmVzcG9uZF9vayhjLCBtKTsKKworICAgIH0KKworICAgIGF2YWhpX2xvZ193YXJuKCJNaXNzZWQgbWVzc2FnZSAlczo6JXMoKSIsIGRidXNfbWVzc2FnZV9nZXRfaW50ZXJmYWNlKG0pLCBkYnVzX21lc3NhZ2VfZ2V0X21lbWJlcihtKSk7CisKK2ZhaWw6CisgICAgaWYgKGRidXNfZXJyb3JfaXNfc2V0KCZlcnJvcikpCisgICAgICAgIGRidXNfZXJyb3JfZnJlZSgmZXJyb3IpOworCisgICAgcmV0dXJuIERCVVNfSEFORExFUl9SRVNVTFRfTk9UX1lFVF9IQU5ETEVEOworfQorCit2b2lkIGF2YWhpX2RidXNfc2VydmljZV90eXBlX2Jyb3dzZXJfY2FsbGJhY2soQXZhaGlTU2VydmljZVR5cGVCcm93c2VyICpiLCBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLCBBdmFoaVByb3RvY29sIHByb3RvY29sLCBBdmFoaUJyb3dzZXJFdmVudCBldmVudCwgY29uc3QgY2hhciAqdHlwZSwgY29uc3QgY2hhciAqZG9tYWluLCBBdmFoaUxvb2t1cFJlc3VsdEZsYWdzIGZsYWdzLCB2b2lkKiB1c2VyZGF0YSkgeworICAgIFNlcnZpY2VUeXBlQnJvd3NlckluZm8gKmkgPSB1c2VyZGF0YTsKKyAgICBEQnVzTWVzc2FnZSAqbTsKKyAgICBpbnQzMl90IGlfaW50ZXJmYWNlLCBpX3Byb3RvY29sOworICAgIHVpbnQzMl90IHVfZmxhZ3M7CisKKyAgICBhc3NlcnQoYik7CisgICAgYXNzZXJ0KGkpOworCisgICAgaV9pbnRlcmZhY2UgPSAoaW50MzJfdCkgaW50ZXJmYWNlOworICAgIGlfcHJvdG9jb2wgPSAoaW50MzJfdCkgcHJvdG9jb2w7CisgICAgdV9mbGFncyA9ICh1aW50MzJfdCkgZmxhZ3M7CisKKyAgICBtID0gZGJ1c19tZXNzYWdlX25ld19zaWduYWwoaS0+cGF0aCwgQVZBSElfREJVU19JTlRFUkZBQ0VfU0VSVklDRV9UWVBFX0JST1dTRVIsIGF2YWhpX2RidXNfbWFwX2Jyb3dzZV9zaWduYWxfbmFtZShldmVudCkpOworCisgICAgaWYgKCFtKSB7CisgICAgICAgIGF2YWhpX2xvZ19lcnJvcigiRmFpbGVkIGFsbG9jYXRlIG1lc3NhZ2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChldmVudCA9PSBBVkFISV9CUk9XU0VSX05FVyB8fCBldmVudCA9PSBBVkFISV9CUk9XU0VSX1JFTU9WRSkgeworICAgICAgICBhc3NlcnQodHlwZSk7CisgICAgICAgIGFzc2VydChkb21haW4pOworICAgICAgICBkYnVzX21lc3NhZ2VfYXBwZW5kX2FyZ3MoCisgICAgICAgICAgICBtLAorICAgICAgICAgICAgREJVU19UWVBFX0lOVDMyLCAmaV9pbnRlcmZhY2UsCisgICAgICAgICAgICBEQlVTX1RZUEVfSU5UMzIsICZpX3Byb3RvY29sLAorICAgICAgICAgICAgREJVU19UWVBFX1NUUklORywgJnR5cGUsCisgICAgICAgICAgICBEQlVTX1RZUEVfU1RSSU5HLCAmZG9tYWluLAorICAgICAgICAgICAgREJVU19UWVBFX1VJTlQzMiwgJnVfZmxhZ3MsCisgICAgICAgICAgICBEQlVTX1RZUEVfSU5WQUxJRCk7CisgICAgfSBlbHNlIGlmIChldmVudCA9PSBBVkFISV9CUk9XU0VSX0ZBSUxVUkUpCisgICAgICAgIGF2YWhpX2RidXNfYXBwZW5kX3NlcnZlcl9lcnJvcihtKTsKKworICAgIGRidXNfbWVzc2FnZV9zZXRfZGVzdGluYXRpb24obSwgaS0+Y2xpZW50LT5uYW1lKTsKKyAgICBkYnVzX2Nvbm5lY3Rpb25fc2VuZChzZXJ2ZXItPmJ1cywgbSwgTlVMTCk7CisgICAgZGJ1c19tZXNzYWdlX3VucmVmKG0pOworfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9kYnVzLXN5bmMtYWRkcmVzcy1yZXNvbHZlci5jIGIvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9kYnVzLXN5bmMtYWRkcmVzcy1yZXNvbHZlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4NDU0MjAKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL2RidXMtc3luYy1hZGRyZXNzLXJlc29sdmVyLmMKQEAgLTAsMCArMSw5NiBAQAorLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9tYWxsb2MuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vZGJ1cy5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9lcnJvci5oPgorI2luY2x1ZGUgPGF2YWhpLWNvcmUvbG9nLmg+CisKKyNpbmNsdWRlICJkYnVzLXV0aWwuaCIKKyNpbmNsdWRlICJkYnVzLWludGVybmFsLmgiCisjaW5jbHVkZSAibWFpbi5oIgorCit2b2lkIGF2YWhpX2RidXNfc3luY19hZGRyZXNzX3Jlc29sdmVyX2ZyZWUoU3luY0FkZHJlc3NSZXNvbHZlckluZm8gKmkpIHsKKyAgICBhc3NlcnQoaSk7CisKKyAgICBpZiAoaS0+YWRkcmVzc19yZXNvbHZlcikKKyAgICAgICAgYXZhaGlfc19hZGRyZXNzX3Jlc29sdmVyX2ZyZWUoaS0+YWRkcmVzc19yZXNvbHZlcik7CisgICAgZGJ1c19tZXNzYWdlX3VucmVmKGktPm1lc3NhZ2UpOworICAgIEFWQUhJX0xMSVNUX1JFTU9WRShTeW5jQWRkcmVzc1Jlc29sdmVySW5mbywgc3luY19hZGRyZXNzX3Jlc29sdmVycywgaS0+Y2xpZW50LT5zeW5jX2FkZHJlc3NfcmVzb2x2ZXJzLCBpKTsKKworICAgIGFzc2VydChpLT5jbGllbnQtPm5fb2JqZWN0cyA+PSAxKTsKKyAgICBpLT5jbGllbnQtPm5fb2JqZWN0cy0tOworCisgICAgYXZhaGlfZnJlZShpKTsKK30KKwordm9pZCBhdmFoaV9kYnVzX3N5bmNfYWRkcmVzc19yZXNvbHZlcl9jYWxsYmFjayhBdmFoaVNBZGRyZXNzUmVzb2x2ZXIgKnIsIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsIEF2YWhpUmVzb2x2ZXJFdmVudCBldmVudCwgY29uc3QgQXZhaGlBZGRyZXNzICphZGRyZXNzLCBjb25zdCBjaGFyICpob3N0X25hbWUsIEF2YWhpTG9va3VwUmVzdWx0RmxhZ3MgZmxhZ3MsIHZvaWQqIHVzZXJkYXRhKSB7CisgICAgU3luY0FkZHJlc3NSZXNvbHZlckluZm8gKmkgPSB1c2VyZGF0YTsKKworICAgIGFzc2VydChyKTsKKyAgICBhc3NlcnQoYWRkcmVzcyk7CisgICAgYXNzZXJ0KGkpOworCisgICAgaWYgKGV2ZW50ID09IEFWQUhJX1JFU09MVkVSX0ZPVU5EKSB7CisgICAgICAgIGNoYXIgdFtBVkFISV9BRERSRVNTX1NUUl9NQVhdLCAqcHQgPSB0OworICAgICAgICBpbnQzMl90IGlfaW50ZXJmYWNlLCBpX3Byb3RvY29sLCBpX2Fwcm90b2NvbDsKKyAgICAgICAgdWludDMyX3QgdV9mbGFnczsKKyAgICAgICAgREJ1c01lc3NhZ2UgKnJlcGx5OworCisgICAgICAgIGFzc2VydChob3N0X25hbWUpOworICAgICAgICBhdmFoaV9hZGRyZXNzX3NucHJpbnQodCwgc2l6ZW9mKHQpLCBhZGRyZXNzKTsKKworICAgICAgICBpX2ludGVyZmFjZSA9IChpbnQzMl90KSBpbnRlcmZhY2U7CisgICAgICAgIGlfcHJvdG9jb2wgPSAoaW50MzJfdCkgcHJvdG9jb2w7CisgICAgICAgIGlfYXByb3RvY29sID0gKGludDMyX3QpIGFkZHJlc3MtPnByb3RvOworICAgICAgICB1X2ZsYWdzID0gKHVpbnQzMl90KSBmbGFnczsKKworICAgICAgICByZXBseSA9IGRidXNfbWVzc2FnZV9uZXdfbWV0aG9kX3JldHVybihpLT5tZXNzYWdlKTsKKworICAgICAgICBpZiAoIXJlcGx5KSB7CisgICAgICAgICAgICBhdmFoaV9sb2dfZXJyb3IoIkZhaWxlZCBhbGxvY2F0ZSBtZXNzYWdlIik7CisgICAgICAgICAgICBnb3RvIGZpbmlzaDsKKyAgICAgICAgfQorCisgICAgICAgIGRidXNfbWVzc2FnZV9hcHBlbmRfYXJncygKKyAgICAgICAgICAgIHJlcGx5LAorICAgICAgICAgICAgREJVU19UWVBFX0lOVDMyLCAmaV9pbnRlcmZhY2UsCisgICAgICAgICAgICBEQlVTX1RZUEVfSU5UMzIsICZpX3Byb3RvY29sLAorICAgICAgICAgICAgREJVU19UWVBFX0lOVDMyLCAmaV9hcHJvdG9jb2wsCisgICAgICAgICAgICBEQlVTX1RZUEVfU1RSSU5HLCAmcHQsCisgICAgICAgICAgICBEQlVTX1RZUEVfU1RSSU5HLCAmaG9zdF9uYW1lLAorICAgICAgICAgICAgREJVU19UWVBFX1VJTlQzMiwgJnVfZmxhZ3MsCisgICAgICAgICAgICBEQlVTX1RZUEVfSU5WQUxJRCk7CisKKyAgICAgICAgZGJ1c19jb25uZWN0aW9uX3NlbmQoc2VydmVyLT5idXMsIHJlcGx5LCBOVUxMKTsKKyAgICAgICAgZGJ1c19tZXNzYWdlX3VucmVmKHJlcGx5KTsKKyAgICB9IGVsc2UgeworICAgICAgICBhc3NlcnQoZXZlbnQgPT0gQVZBSElfUkVTT0xWRVJfRkFJTFVSRSk7CisgICAgICAgIGF2YWhpX2RidXNfcmVzcG9uZF9lcnJvcihzZXJ2ZXItPmJ1cywgaS0+bWVzc2FnZSwgYXZhaGlfc2VydmVyX2Vycm5vKGF2YWhpX3NlcnZlciksIE5VTEwpOworICAgIH0KKworZmluaXNoOgorICAgIGF2YWhpX2RidXNfc3luY19hZGRyZXNzX3Jlc29sdmVyX2ZyZWUoaSk7Cit9CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL2RidXMtc3luYy1ob3N0LW5hbWUtcmVzb2x2ZXIuYyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vZGJ1cy1zeW5jLWhvc3QtbmFtZS1yZXNvbHZlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MTEzMjcKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL2RidXMtc3luYy1ob3N0LW5hbWUtcmVzb2x2ZXIuYwpAQCAtMCwwICsxLDk2IEBACisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL21hbGxvYy5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9kYnVzLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2Vycm9yLmg+CisjaW5jbHVkZSA8YXZhaGktY29yZS9sb2cuaD4KKworI2luY2x1ZGUgImRidXMtdXRpbC5oIgorI2luY2x1ZGUgImRidXMtaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJtYWluLmgiCisKK3ZvaWQgYXZhaGlfZGJ1c19zeW5jX2hvc3RfbmFtZV9yZXNvbHZlcl9mcmVlKFN5bmNIb3N0TmFtZVJlc29sdmVySW5mbyAqaSkgeworICAgIGFzc2VydChpKTsKKworICAgIGlmIChpLT5ob3N0X25hbWVfcmVzb2x2ZXIpCisgICAgICAgIGF2YWhpX3NfaG9zdF9uYW1lX3Jlc29sdmVyX2ZyZWUoaS0+aG9zdF9uYW1lX3Jlc29sdmVyKTsKKyAgICBkYnVzX21lc3NhZ2VfdW5yZWYoaS0+bWVzc2FnZSk7CisgICAgQVZBSElfTExJU1RfUkVNT1ZFKFN5bmNIb3N0TmFtZVJlc29sdmVySW5mbywgc3luY19ob3N0X25hbWVfcmVzb2x2ZXJzLCBpLT5jbGllbnQtPnN5bmNfaG9zdF9uYW1lX3Jlc29sdmVycywgaSk7CisKKyAgICBhc3NlcnQoaS0+Y2xpZW50LT5uX29iamVjdHMgPj0gMSk7CisgICAgaS0+Y2xpZW50LT5uX29iamVjdHMtLTsKKworICAgIGF2YWhpX2ZyZWUoaSk7Cit9CisKK3ZvaWQgYXZhaGlfZGJ1c19zeW5jX2hvc3RfbmFtZV9yZXNvbHZlcl9jYWxsYmFjayhBdmFoaVNIb3N0TmFtZVJlc29sdmVyICpyLCBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLCBBdmFoaVByb3RvY29sIHByb3RvY29sLCBBdmFoaVJlc29sdmVyRXZlbnQgZXZlbnQsIGNvbnN0IGNoYXIgKmhvc3RfbmFtZSwgY29uc3QgQXZhaGlBZGRyZXNzICphLCBBdmFoaUxvb2t1cFJlc3VsdEZsYWdzIGZsYWdzLCB2b2lkKiB1c2VyZGF0YSkgeworICAgIFN5bmNIb3N0TmFtZVJlc29sdmVySW5mbyAqaSA9IHVzZXJkYXRhOworCisgICAgYXNzZXJ0KHIpOworICAgIGFzc2VydChob3N0X25hbWUpOworICAgIGFzc2VydChpKTsKKworICAgIGlmIChldmVudCA9PSBBVkFISV9SRVNPTFZFUl9GT1VORCkgeworICAgICAgICBjaGFyIHRbQVZBSElfQUREUkVTU19TVFJfTUFYXSwgKnB0ID0gdDsKKyAgICAgICAgaW50MzJfdCBpX2ludGVyZmFjZSwgaV9wcm90b2NvbCwgaV9hcHJvdG9jb2w7CisgICAgICAgIHVpbnQzMl90IHVfZmxhZ3M7CisgICAgICAgIERCdXNNZXNzYWdlICpyZXBseTsKKworICAgICAgICBhc3NlcnQoYSk7CisgICAgICAgIGF2YWhpX2FkZHJlc3Nfc25wcmludCh0LCBzaXplb2YodCksIGEpOworCisgICAgICAgIGlfaW50ZXJmYWNlID0gKGludDMyX3QpIGludGVyZmFjZTsKKyAgICAgICAgaV9wcm90b2NvbCA9IChpbnQzMl90KSBwcm90b2NvbDsKKyAgICAgICAgaV9hcHJvdG9jb2wgPSAoaW50MzJfdCkgYS0+cHJvdG87CisgICAgICAgIHVfZmxhZ3MgPSAodWludDMyX3QpIGZsYWdzOworCisgICAgICAgIHJlcGx5ID0gZGJ1c19tZXNzYWdlX25ld19tZXRob2RfcmV0dXJuKGktPm1lc3NhZ2UpOworCisgICAgICAgIGlmICghcmVwbHkpIHsKKyAgICAgICAgICAgIGF2YWhpX2xvZ19lcnJvcigiRmFpbGVkIGFsbG9jYXRlIG1lc3NhZ2UiKTsKKyAgICAgICAgICAgIGdvdG8gZmluaXNoOworICAgICAgICB9CisKKyAgICAgICAgZGJ1c19tZXNzYWdlX2FwcGVuZF9hcmdzKAorICAgICAgICAgICAgcmVwbHksCisgICAgICAgICAgICBEQlVTX1RZUEVfSU5UMzIsICZpX2ludGVyZmFjZSwKKyAgICAgICAgICAgIERCVVNfVFlQRV9JTlQzMiwgJmlfcHJvdG9jb2wsCisgICAgICAgICAgICBEQlVTX1RZUEVfU1RSSU5HLCAmaG9zdF9uYW1lLAorICAgICAgICAgICAgREJVU19UWVBFX0lOVDMyLCAmaV9hcHJvdG9jb2wsCisgICAgICAgICAgICBEQlVTX1RZUEVfU1RSSU5HLCAmcHQsCisgICAgICAgICAgICBEQlVTX1RZUEVfVUlOVDMyLCAmdV9mbGFncywKKyAgICAgICAgICAgIERCVVNfVFlQRV9JTlZBTElEKTsKKworICAgICAgICBkYnVzX2Nvbm5lY3Rpb25fc2VuZChzZXJ2ZXItPmJ1cywgcmVwbHksIE5VTEwpOworICAgICAgICBkYnVzX21lc3NhZ2VfdW5yZWYocmVwbHkpOworICAgIH0gZWxzZSB7CisgICAgICAgIGFzc2VydChldmVudCA9PSBBVkFISV9SRVNPTFZFUl9GQUlMVVJFKTsKKyAgICAgICAgYXZhaGlfZGJ1c19yZXNwb25kX2Vycm9yKHNlcnZlci0+YnVzLCBpLT5tZXNzYWdlLCBhdmFoaV9zZXJ2ZXJfZXJybm8oYXZhaGlfc2VydmVyKSwgTlVMTCk7CisgICAgfQorCitmaW5pc2g6CisgICAgYXZhaGlfZGJ1c19zeW5jX2hvc3RfbmFtZV9yZXNvbHZlcl9mcmVlKGkpOworfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9kYnVzLXN5bmMtc2VydmljZS1yZXNvbHZlci5jIGIvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9kYnVzLXN5bmMtc2VydmljZS1yZXNvbHZlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNzI3NmEKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL2RidXMtc3luYy1zZXJ2aWNlLXJlc29sdmVyLmMKQEAgLTAsMCArMSwxMzUgQEAKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vbWFsbG9jLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2RidXMuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vZXJyb3IuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb3JlL2xvZy5oPgorCisjaW5jbHVkZSAiZGJ1cy11dGlsLmgiCisjaW5jbHVkZSAiZGJ1cy1pbnRlcm5hbC5oIgorI2luY2x1ZGUgIm1haW4uaCIKKwordm9pZCBhdmFoaV9kYnVzX3N5bmNfc2VydmljZV9yZXNvbHZlcl9mcmVlKFN5bmNTZXJ2aWNlUmVzb2x2ZXJJbmZvICppKSB7CisgICAgYXNzZXJ0KGkpOworCisgICAgaWYgKGktPnNlcnZpY2VfcmVzb2x2ZXIpCisgICAgICAgIGF2YWhpX3Nfc2VydmljZV9yZXNvbHZlcl9mcmVlKGktPnNlcnZpY2VfcmVzb2x2ZXIpOworICAgIGRidXNfbWVzc2FnZV91bnJlZihpLT5tZXNzYWdlKTsKKyAgICBBVkFISV9MTElTVF9SRU1PVkUoU3luY1NlcnZpY2VSZXNvbHZlckluZm8sIHN5bmNfc2VydmljZV9yZXNvbHZlcnMsIGktPmNsaWVudC0+c3luY19zZXJ2aWNlX3Jlc29sdmVycywgaSk7CisKKyAgICBhc3NlcnQoaS0+Y2xpZW50LT5uX29iamVjdHMgPj0gMSk7CisgICAgaS0+Y2xpZW50LT5uX29iamVjdHMtLTsKKworICAgIGF2YWhpX2ZyZWUoaSk7Cit9CisKK3ZvaWQgYXZhaGlfZGJ1c19zeW5jX3NlcnZpY2VfcmVzb2x2ZXJfY2FsbGJhY2soCisgICAgQXZhaGlTU2VydmljZVJlc29sdmVyICpyLAorICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsCisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICBBdmFoaVJlc29sdmVyRXZlbnQgZXZlbnQsCisgICAgY29uc3QgY2hhciAqbmFtZSwKKyAgICBjb25zdCBjaGFyICp0eXBlLAorICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwKKyAgICBjb25zdCBjaGFyICpob3N0X25hbWUsCisgICAgY29uc3QgQXZhaGlBZGRyZXNzICphLAorICAgIHVpbnQxNl90IHBvcnQsCisgICAgQXZhaGlTdHJpbmdMaXN0ICp0eHQsCisgICAgQXZhaGlMb29rdXBSZXN1bHRGbGFncyBmbGFncywKKyAgICB2b2lkKiB1c2VyZGF0YSkgeworCisgICAgU3luY1NlcnZpY2VSZXNvbHZlckluZm8gKmkgPSB1c2VyZGF0YTsKKworICAgIGFzc2VydChyKTsKKyAgICBhc3NlcnQoaSk7CisKKyAgICBpZiAoZXZlbnQgPT0gQVZBSElfUkVTT0xWRVJfRk9VTkQpIHsKKyAgICAgICAgY2hhciB0W0FWQUhJX0FERFJFU1NfU1RSX01BWF0sICpwdCA9IHQ7CisgICAgICAgIGludDMyX3QgaV9pbnRlcmZhY2UsIGlfcHJvdG9jb2wsIGlfYXByb3RvY29sOworICAgICAgICB1aW50MzJfdCB1X2ZsYWdzOworICAgICAgICBEQnVzTWVzc2FnZSAqcmVwbHk7CisKKyAgICAgICAgYXNzZXJ0KGhvc3RfbmFtZSk7CisKKyAgICAgICAgaWYgKCFuYW1lKQorICAgICAgICAgICAgbmFtZSA9ICIiOworCisgICAgICAgIGlmIChhKQorICAgICAgICAgICAgYXZhaGlfYWRkcmVzc19zbnByaW50KHQsIHNpemVvZih0KSwgYSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRbMF0gPSAwOworCisgICAgICAgIC8qIFBhdGNoIGluIEFWQUhJX0xPT0tVUF9SRVNVTFRfT1VSX09XTiAqLworCisgICAgICAgIGlmIChhdmFoaV9kYnVzX2lzX291cl9vd25fc2VydmljZShpLT5jbGllbnQsIGludGVyZmFjZSwgcHJvdG9jb2wsIG5hbWUsIHR5cGUsIGRvbWFpbikgPiAwKQorICAgICAgICAgICAgZmxhZ3MgfD0gQVZBSElfTE9PS1VQX1JFU1VMVF9PVVJfT1dOOworCisgICAgICAgIGlfaW50ZXJmYWNlID0gKGludDMyX3QpIGludGVyZmFjZTsKKyAgICAgICAgaV9wcm90b2NvbCA9IChpbnQzMl90KSBwcm90b2NvbDsKKyAgICAgICAgaWYgKGEpCisgICAgICAgICAgICBpX2Fwcm90b2NvbCA9IChpbnQzMl90KSBhLT5wcm90bzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaV9hcHJvdG9jb2wgPSBBVkFISV9QUk9UT19VTlNQRUM7CisgICAgICAgIHVfZmxhZ3MgPSAodWludDMyX3QpIGZsYWdzOworCisgICAgICAgIHJlcGx5ID0gZGJ1c19tZXNzYWdlX25ld19tZXRob2RfcmV0dXJuKGktPm1lc3NhZ2UpOworCisgICAgICAgIGlmICghcmVwbHkpIHsKKyAgICAgICAgICAgIGF2YWhpX2xvZ19lcnJvcigiRmFpbGVkIGFsbG9jYXRlIG1lc3NhZ2UiKTsKKyAgICAgICAgICAgIGdvdG8gZmluaXNoOworICAgICAgICB9CisKKyAgICAgICAgZGJ1c19tZXNzYWdlX2FwcGVuZF9hcmdzKAorICAgICAgICAgICAgcmVwbHksCisgICAgICAgICAgICBEQlVTX1RZUEVfSU5UMzIsICZpX2ludGVyZmFjZSwKKyAgICAgICAgICAgIERCVVNfVFlQRV9JTlQzMiwgJmlfcHJvdG9jb2wsCisgICAgICAgICAgICBEQlVTX1RZUEVfU1RSSU5HLCAmbmFtZSwKKyAgICAgICAgICAgIERCVVNfVFlQRV9TVFJJTkcsICZ0eXBlLAorICAgICAgICAgICAgREJVU19UWVBFX1NUUklORywgJmRvbWFpbiwKKyAgICAgICAgICAgIERCVVNfVFlQRV9TVFJJTkcsICZob3N0X25hbWUsCisgICAgICAgICAgICBEQlVTX1RZUEVfSU5UMzIsICZpX2Fwcm90b2NvbCwKKyAgICAgICAgICAgIERCVVNfVFlQRV9TVFJJTkcsICZwdCwKKyAgICAgICAgICAgIERCVVNfVFlQRV9VSU5UMTYsICZwb3J0LAorICAgICAgICAgICAgREJVU19UWVBFX0lOVkFMSUQpOworCisgICAgICAgIGF2YWhpX2RidXNfYXBwZW5kX3N0cmluZ19saXN0KHJlcGx5LCB0eHQpOworCisgICAgICAgIGRidXNfbWVzc2FnZV9hcHBlbmRfYXJncygKKyAgICAgICAgICAgIHJlcGx5LAorICAgICAgICAgICAgREJVU19UWVBFX1VJTlQzMiwgJnVfZmxhZ3MsCisgICAgICAgICAgICBEQlVTX1RZUEVfSU5WQUxJRCk7CisKKyAgICAgICAgZGJ1c19jb25uZWN0aW9uX3NlbmQoc2VydmVyLT5idXMsIHJlcGx5LCBOVUxMKTsKKyAgICAgICAgZGJ1c19tZXNzYWdlX3VucmVmKHJlcGx5KTsKKyAgICB9IGVsc2UgeworICAgICAgICBhc3NlcnQoZXZlbnQgPT0gQVZBSElfUkVTT0xWRVJfRkFJTFVSRSk7CisKKyAgICAgICAgYXZhaGlfZGJ1c19yZXNwb25kX2Vycm9yKHNlcnZlci0+YnVzLCBpLT5tZXNzYWdlLCBhdmFoaV9zZXJ2ZXJfZXJybm8oYXZhaGlfc2VydmVyKSwgTlVMTCk7CisgICAgfQorCitmaW5pc2g6CisgICAgYXZhaGlfZGJ1c19zeW5jX3NlcnZpY2VfcmVzb2x2ZXJfZnJlZShpKTsKK30KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vZGJ1cy11dGlsLmMgYi9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL2RidXMtdXRpbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5ODNiMjkKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL2RidXMtdXRpbC5jCkBAIC0wLDAgKzEsNDM1IEBACisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2Vycm9yLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2RidXMuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vbWFsbG9jLmg+CisjaW5jbHVkZSA8YXZhaGktY29yZS9sb2cuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb3JlL2NvcmUuaD4KKworI2lmZGVmIEVOQUJMRV9DSFJPT1QKKyNpbmNsdWRlICJjaHJvb3QuaCIKKyNlbmRpZgorCisjaW5jbHVkZSAibWFpbi5oIgorI2luY2x1ZGUgImRidXMtdXRpbC5oIgorCitEQnVzSGFuZGxlclJlc3VsdCBhdmFoaV9kYnVzX3Jlc3BvbmRfZXJyb3IoREJ1c0Nvbm5lY3Rpb24gKmMsIERCdXNNZXNzYWdlICptLCBpbnQgZXJyb3IsIGNvbnN0IGNoYXIgKnRleHQpIHsKKyAgICBEQnVzTWVzc2FnZSAqcmVwbHk7CisKKyAgICBhc3NlcnQoLWVycm9yID4gLUFWQUhJX09LKTsKKyAgICBhc3NlcnQoLWVycm9yIDwgLUFWQUhJX0VSUl9NQVgpOworCisgICAgaWYgKCF0ZXh0KQorICAgICAgICB0ZXh0ID0gYXZhaGlfc3RyZXJyb3IoZXJyb3IpOworCisgICAgcmVwbHkgPSBkYnVzX21lc3NhZ2VfbmV3X2Vycm9yKG0sIGF2YWhpX2Vycm9yX251bWJlcl90b19kYnVzKGVycm9yKSwgdGV4dCk7CisKKyAgICBpZiAoIXJlcGx5KSB7CisgICAgICAgIGF2YWhpX2xvZ19lcnJvcigiRmFpbGVkIGFsbG9jYXRlIG1lc3NhZ2UiKTsKKyAgICAgICAgcmV0dXJuIERCVVNfSEFORExFUl9SRVNVTFRfTkVFRF9NRU1PUlk7CisgICAgfQorCisgICAgZGJ1c19jb25uZWN0aW9uX3NlbmQoYywgcmVwbHksIE5VTEwpOworICAgIGRidXNfbWVzc2FnZV91bnJlZihyZXBseSk7CisKKyAgICBhdmFoaV9sb2dfZGVidWcoX19GSUxFX18iOiBSZXNwb25kaW5nIGVycm9yICclcycgKCVpKSIsIHRleHQsIGVycm9yKTsKKworICAgIHJldHVybiBEQlVTX0hBTkRMRVJfUkVTVUxUX0hBTkRMRUQ7Cit9CisKK0RCdXNIYW5kbGVyUmVzdWx0IGF2YWhpX2RidXNfcmVzcG9uZF9zdHJpbmcoREJ1c0Nvbm5lY3Rpb24gKmMsIERCdXNNZXNzYWdlICptLCBjb25zdCBjaGFyICp0ZXh0KSB7CisgICAgREJ1c01lc3NhZ2UgKnJlcGx5OworCisgICAgcmVwbHkgPSBkYnVzX21lc3NhZ2VfbmV3X21ldGhvZF9yZXR1cm4obSk7CisKKyAgICBpZiAoIXJlcGx5KSB7CisgICAgICAgIGF2YWhpX2xvZ19lcnJvcigiRmFpbGVkIGFsbG9jYXRlIG1lc3NhZ2UiKTsKKyAgICAgICAgcmV0dXJuIERCVVNfSEFORExFUl9SRVNVTFRfTkVFRF9NRU1PUlk7CisgICAgfQorCisgICAgZGJ1c19tZXNzYWdlX2FwcGVuZF9hcmdzKHJlcGx5LCBEQlVTX1RZUEVfU1RSSU5HLCAmdGV4dCwgREJVU19UWVBFX0lOVkFMSUQpOworICAgIGRidXNfY29ubmVjdGlvbl9zZW5kKGMsIHJlcGx5LCBOVUxMKTsKKyAgICBkYnVzX21lc3NhZ2VfdW5yZWYocmVwbHkpOworCisgICAgcmV0dXJuIERCVVNfSEFORExFUl9SRVNVTFRfSEFORExFRDsKK30KKworREJ1c0hhbmRsZXJSZXN1bHQgYXZhaGlfZGJ1c19yZXNwb25kX2ludDMyKERCdXNDb25uZWN0aW9uICpjLCBEQnVzTWVzc2FnZSAqbSwgaW50MzJfdCBpKSB7CisgICAgREJ1c01lc3NhZ2UgKnJlcGx5OworCisgICAgcmVwbHkgPSBkYnVzX21lc3NhZ2VfbmV3X21ldGhvZF9yZXR1cm4obSk7CisKKyAgICBpZiAoIXJlcGx5KSB7CisgICAgICAgIGF2YWhpX2xvZ19lcnJvcigiRmFpbGVkIGFsbG9jYXRlIG1lc3NhZ2UiKTsKKyAgICAgICAgcmV0dXJuIERCVVNfSEFORExFUl9SRVNVTFRfTkVFRF9NRU1PUlk7CisgICAgfQorCisgICAgZGJ1c19tZXNzYWdlX2FwcGVuZF9hcmdzKHJlcGx5LCBEQlVTX1RZUEVfSU5UMzIsICZpLCBEQlVTX1RZUEVfSU5WQUxJRCk7CisgICAgZGJ1c19jb25uZWN0aW9uX3NlbmQoYywgcmVwbHksIE5VTEwpOworICAgIGRidXNfbWVzc2FnZV91bnJlZihyZXBseSk7CisKKyAgICByZXR1cm4gREJVU19IQU5ETEVSX1JFU1VMVF9IQU5ETEVEOworfQorCitEQnVzSGFuZGxlclJlc3VsdCBhdmFoaV9kYnVzX3Jlc3BvbmRfdWludDMyKERCdXNDb25uZWN0aW9uICpjLCBEQnVzTWVzc2FnZSAqbSwgdWludDMyX3QgdSkgeworICAgIERCdXNNZXNzYWdlICpyZXBseTsKKworICAgIHJlcGx5ID0gZGJ1c19tZXNzYWdlX25ld19tZXRob2RfcmV0dXJuKG0pOworCisgICAgaWYgKCFyZXBseSkgeworICAgICAgICBhdmFoaV9sb2dfZXJyb3IoIkZhaWxlZCBhbGxvY2F0ZSBtZXNzYWdlIik7CisgICAgICAgIHJldHVybiBEQlVTX0hBTkRMRVJfUkVTVUxUX05FRURfTUVNT1JZOworICAgIH0KKworICAgIGRidXNfbWVzc2FnZV9hcHBlbmRfYXJncyhyZXBseSwgREJVU19UWVBFX1VJTlQzMiwgJnUsIERCVVNfVFlQRV9JTlZBTElEKTsKKyAgICBkYnVzX2Nvbm5lY3Rpb25fc2VuZChjLCByZXBseSwgTlVMTCk7CisgICAgZGJ1c19tZXNzYWdlX3VucmVmKHJlcGx5KTsKKworICAgIHJldHVybiBEQlVTX0hBTkRMRVJfUkVTVUxUX0hBTkRMRUQ7Cit9CisKK0RCdXNIYW5kbGVyUmVzdWx0IGF2YWhpX2RidXNfcmVzcG9uZF9ib29sZWFuKERCdXNDb25uZWN0aW9uICpjLCBEQnVzTWVzc2FnZSAqbSwgaW50IGIpIHsKKyAgICBEQnVzTWVzc2FnZSAqcmVwbHk7CisKKyAgICByZXBseSA9IGRidXNfbWVzc2FnZV9uZXdfbWV0aG9kX3JldHVybihtKTsKKworICAgIGlmICghcmVwbHkpIHsKKyAgICAgICAgYXZhaGlfbG9nX2Vycm9yKCJGYWlsZWQgYWxsb2NhdGUgbWVzc2FnZSIpOworICAgICAgICByZXR1cm4gREJVU19IQU5ETEVSX1JFU1VMVF9ORUVEX01FTU9SWTsKKyAgICB9CisKKyAgICBkYnVzX21lc3NhZ2VfYXBwZW5kX2FyZ3MocmVwbHksIERCVVNfVFlQRV9CT09MRUFOLCAmYiwgREJVU19UWVBFX0lOVkFMSUQpOworICAgIGRidXNfY29ubmVjdGlvbl9zZW5kKGMsIHJlcGx5LCBOVUxMKTsKKyAgICBkYnVzX21lc3NhZ2VfdW5yZWYocmVwbHkpOworCisgICAgcmV0dXJuIERCVVNfSEFORExFUl9SRVNVTFRfSEFORExFRDsKK30KKworREJ1c0hhbmRsZXJSZXN1bHQgYXZhaGlfZGJ1c19yZXNwb25kX29rKERCdXNDb25uZWN0aW9uICpjLCBEQnVzTWVzc2FnZSAqbSkgeworICAgIERCdXNNZXNzYWdlICpyZXBseTsKKworICAgIHJlcGx5ID0gZGJ1c19tZXNzYWdlX25ld19tZXRob2RfcmV0dXJuKG0pOworCisgICAgaWYgKCFyZXBseSkgeworICAgICAgICBhdmFoaV9sb2dfZXJyb3IoIkZhaWxlZCBhbGxvY2F0ZSBtZXNzYWdlIik7CisgICAgICAgIHJldHVybiBEQlVTX0hBTkRMRVJfUkVTVUxUX05FRURfTUVNT1JZOworICAgIH0KKworICAgIGRidXNfY29ubmVjdGlvbl9zZW5kKGMsIHJlcGx5LCBOVUxMKTsKKyAgICBkYnVzX21lc3NhZ2VfdW5yZWYocmVwbHkpOworCisgICAgcmV0dXJuIERCVVNfSEFORExFUl9SRVNVTFRfSEFORExFRDsKK30KKworREJ1c0hhbmRsZXJSZXN1bHQgYXZhaGlfZGJ1c19yZXNwb25kX3BhdGgoREJ1c0Nvbm5lY3Rpb24gKmMsIERCdXNNZXNzYWdlICptLCBjb25zdCBjaGFyICpwYXRoKSB7CisgICAgREJ1c01lc3NhZ2UgKnJlcGx5OworCisgICAgcmVwbHkgPSBkYnVzX21lc3NhZ2VfbmV3X21ldGhvZF9yZXR1cm4obSk7CisKKyAgICBpZiAoIXJlcGx5KSB7CisgICAgICAgIGF2YWhpX2xvZ19lcnJvcigiRmFpbGVkIGFsbG9jYXRlIG1lc3NhZ2UiKTsKKyAgICAgICAgcmV0dXJuIERCVVNfSEFORExFUl9SRVNVTFRfTkVFRF9NRU1PUlk7CisgICAgfQorCisgICAgZGJ1c19tZXNzYWdlX2FwcGVuZF9hcmdzKHJlcGx5LCBEQlVTX1RZUEVfT0JKRUNUX1BBVEgsICZwYXRoLCBEQlVTX1RZUEVfSU5WQUxJRCk7CisgICAgZGJ1c19jb25uZWN0aW9uX3NlbmQoYywgcmVwbHksIE5VTEwpOworICAgIGRidXNfbWVzc2FnZV91bnJlZihyZXBseSk7CisKKyAgICByZXR1cm4gREJVU19IQU5ETEVSX1JFU1VMVF9IQU5ETEVEOworfQorCit2b2lkIGF2YWhpX2RidXNfYXBwZW5kX3NlcnZlcl9lcnJvcihEQnVzTWVzc2FnZSAqcmVwbHkpIHsKKyAgICBjb25zdCBjaGFyICp0OworCisgICAgdCA9IGF2YWhpX2Vycm9yX251bWJlcl90b19kYnVzKGF2YWhpX3NlcnZlcl9lcnJubyhhdmFoaV9zZXJ2ZXIpKTsKKworICAgIGRidXNfbWVzc2FnZV9hcHBlbmRfYXJncygKKyAgICAgICAgcmVwbHksCisgICAgICAgIERCVVNfVFlQRV9TVFJJTkcsICZ0LAorICAgICAgICBEQlVTX1RZUEVfSU5WQUxJRCk7Cit9CisKK2NvbnN0IGNoYXIgKmF2YWhpX2RidXNfbWFwX2Jyb3dzZV9zaWduYWxfbmFtZShBdmFoaUJyb3dzZXJFdmVudCBlKSB7CisgICAgc3dpdGNoIChlKSB7CisgICAgICAgIGNhc2UgQVZBSElfQlJPV1NFUl9ORVcgOiByZXR1cm4gIkl0ZW1OZXciOworICAgICAgICBjYXNlIEFWQUhJX0JST1dTRVJfUkVNT1ZFIDogcmV0dXJuICJJdGVtUmVtb3ZlIjsKKyAgICAgICAgY2FzZSBBVkFISV9CUk9XU0VSX0ZBSUxVUkUgOiByZXR1cm4gIkZhaWx1cmUiOworICAgICAgICBjYXNlIEFWQUhJX0JST1dTRVJfQ0FDSEVfRVhIQVVTVEVEIDogcmV0dXJuICJDYWNoZUV4aGF1c3RlZCI7CisgICAgICAgIGNhc2UgQVZBSElfQlJPV1NFUl9BTExfRk9SX05PVyA6IHJldHVybiAiQWxsRm9yTm93IjsKKyAgICB9CisKKyAgICBhYm9ydCgpOworfQorCitjb25zdCBjaGFyICphdmFoaV9kYnVzX21hcF9yZXNvbHZlX3NpZ25hbF9uYW1lKEF2YWhpUmVzb2x2ZXJFdmVudCBlKSB7CisgICAgc3dpdGNoIChlKSB7CisgICAgICAgIGNhc2UgQVZBSElfUkVTT0xWRVJfRk9VTkQgOiByZXR1cm4gIkZvdW5kIjsKKyAgICAgICAgY2FzZSBBVkFISV9SRVNPTFZFUl9GQUlMVVJFIDogcmV0dXJuICJGYWlsdXJlIjsKKyAgICB9CisKKyAgICBhYm9ydCgpOworfQorCitzdGF0aWMgY2hhciAqZmlsZV9nZXRfY29udGVudHMoY29uc3QgY2hhciAqZm5hbWUpIHsKKyAgICBpbnQgZmQgPSAtMTsKKyAgICBzdHJ1Y3Qgc3RhdCBzdDsKKyAgICBzc2l6ZV90IHNpemU7CisgICAgY2hhciAqYnVmID0gTlVMTDsKKworICAgIGFzc2VydChmbmFtZSk7CisKKyNpZmRlZiBFTkFCTEVfQ0hST09UCisgICAgZmQgPSBhdmFoaV9jaHJvb3RfaGVscGVyX2dldF9mZChmbmFtZSk7CisjZWxzZQorICAgIGZkID0gb3BlbihmbmFtZSwgT19SRE9OTFkpOworI2VuZGlmCisKKyAgICBpZiAoZmQgPCAwKSB7CisgICAgICAgIGF2YWhpX2xvZ19lcnJvcigiRmFpbGVkIHRvIG9wZW4gJXM6ICVzIiwgZm5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBpZiAoZnN0YXQoZmQsICZzdCkgPCAwKSB7CisgICAgICAgIGF2YWhpX2xvZ19lcnJvcigic3RhdCglcykgZmFpbGVkOiAlcyIsIGZuYW1lLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKCEoU19JU1JFRyhzdC5zdF9tb2RlKSkpIHsKKyAgICAgICAgYXZhaGlfbG9nX2Vycm9yKCJJbnZhbGlkIGZpbGUgJXMiLCBmbmFtZSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBpZiAoc3Quc3Rfc2l6ZSA+IDEwMjQqMTAyNCkgeyAvKiogMU1CICovCisgICAgICAgIGF2YWhpX2xvZ19lcnJvcigiRmlsZSB0b28gbGFyZ2UgJXMiLCBmbmFtZSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBidWYgPSBhdmFoaV9uZXcoY2hhciwgc3Quc3Rfc2l6ZSsxKTsKKworICAgIGlmICgoc2l6ZSA9IHJlYWQoZmQsIGJ1Ziwgc3Quc3Rfc2l6ZSkpIDwgMCkgeworICAgICAgICBhdmFoaV9sb2dfZXJyb3IoInJlYWQoKSBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgYnVmW3NpemVdID0gMDsKKworICAgIGNsb3NlKGZkKTsKKworICAgIHJldHVybiBidWY7CisKK2ZhaWw6CisgICAgaWYgKGZkID49IDApCisgICAgICAgIGNsb3NlKGZkKTsKKworICAgIGlmIChidWYpCisgICAgICAgIGF2YWhpX2ZyZWUoYnVmKTsKKworICAgIHJldHVybiBOVUxMOworCit9CisKK0RCdXNIYW5kbGVyUmVzdWx0IGF2YWhpX2RidXNfaGFuZGxlX2ludHJvc3BlY3QoREJ1c0Nvbm5lY3Rpb24gKmMsIERCdXNNZXNzYWdlICptLCBjb25zdCBjaGFyICpmbmFtZSkgeworICAgIGNoYXIgKmNvbnRlbnRzLCAqcGF0aDsKKyAgICBEQnVzRXJyb3IgZXJyb3I7CisKKyAgICBhc3NlcnQoYyk7CisgICAgYXNzZXJ0KG0pOworICAgIGFzc2VydChmbmFtZSk7CisKKyAgICBkYnVzX2Vycm9yX2luaXQoJmVycm9yKTsKKworICAgIGlmICghZGJ1c19tZXNzYWdlX2dldF9hcmdzKG0sICZlcnJvciwgREJVU19UWVBFX0lOVkFMSUQpKSB7CisgICAgICAgIGF2YWhpX2xvZ19lcnJvcigiRXJyb3IgcGFyc2luZyBJbnRyb3NwZWN0IG1lc3NhZ2U6ICVzIiwgZXJyb3IubWVzc2FnZSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBwYXRoID0gYXZhaGlfc3RyZHVwX3ByaW50ZigiJXMvJXMiLCBBVkFISV9EQlVTX0lOVFJPU1BFQ1RJT05fRElSLCBmbmFtZSk7CisgICAgY29udGVudHMgPSBmaWxlX2dldF9jb250ZW50cyhwYXRoKTsKKyAgICBhdmFoaV9mcmVlKHBhdGgpOworCisgICAgaWYgKCFjb250ZW50cykgeworICAgICAgICBhdmFoaV9sb2dfZXJyb3IoIkZhaWxlZCB0byBsb2FkIGludHJvc3BlY3Rpb24gZGF0YS4iKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGF2YWhpX2RidXNfcmVzcG9uZF9zdHJpbmcoYywgbSwgY29udGVudHMpOworICAgIGF2YWhpX2ZyZWUoY29udGVudHMpOworCisgICAgcmV0dXJuIERCVVNfSEFORExFUl9SRVNVTFRfSEFORExFRDsKKworZmFpbDoKKyAgICBpZiAoZGJ1c19lcnJvcl9pc19zZXQoJmVycm9yKSkKKyAgICAgICAgZGJ1c19lcnJvcl9mcmVlKCZlcnJvcik7CisKKyAgICByZXR1cm4gREJVU19IQU5ETEVSX1JFU1VMVF9OT1RfWUVUX0hBTkRMRUQ7CisKK30KKwordm9pZCBhdmFoaV9kYnVzX2FwcGVuZF9zdHJpbmdfbGlzdChEQnVzTWVzc2FnZSAqcmVwbHksIEF2YWhpU3RyaW5nTGlzdCAqdHh0KSB7CisgICAgQXZhaGlTdHJpbmdMaXN0ICpwOworICAgIERCdXNNZXNzYWdlSXRlciBpdGVyLCBzdWI7CisKKyAgICBhc3NlcnQocmVwbHkpOworCisgICAgZGJ1c19tZXNzYWdlX2l0ZXJfaW5pdF9hcHBlbmQocmVwbHksICZpdGVyKTsKKyAgICBkYnVzX21lc3NhZ2VfaXRlcl9vcGVuX2NvbnRhaW5lcigmaXRlciwgREJVU19UWVBFX0FSUkFZLCAiYXkiLCAmc3ViKTsKKworICAgIGZvciAocCA9IHR4dDsgcDsgcCA9IHAtPm5leHQpIHsKKyAgICAgICAgREJ1c01lc3NhZ2VJdGVyIHN1YjI7CisgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmRhdGEgPSBwLT50ZXh0OworCisgICAgICAgIGRidXNfbWVzc2FnZV9pdGVyX29wZW5fY29udGFpbmVyKCZzdWIsIERCVVNfVFlQRV9BUlJBWSwgInkiLCAmc3ViMik7CisgICAgICAgIGRidXNfbWVzc2FnZV9pdGVyX2FwcGVuZF9maXhlZF9hcnJheSgmc3ViMiwgREJVU19UWVBFX0JZVEUsICZkYXRhLCBwLT5zaXplKTsKKyAgICAgICAgZGJ1c19tZXNzYWdlX2l0ZXJfY2xvc2VfY29udGFpbmVyKCZzdWIsICZzdWIyKTsKKworICAgIH0KKyAgICBkYnVzX21lc3NhZ2VfaXRlcl9jbG9zZV9jb250YWluZXIoJml0ZXIsICZzdWIpOworfQorCitpbnQgYXZhaGlfZGJ1c19yZWFkX3JkYXRhKERCdXNNZXNzYWdlICptLCBpbnQgaWR4LCB2b2lkICoqcmRhdGEsIHVpbnQzMl90ICpzaXplKSB7CisgICAgREJ1c01lc3NhZ2VJdGVyIGl0ZXIsIHN1YjsKKyAgICBpbnQgbiwgajsKKyAgICB1aW50OF90ICprOworCisgICAgYXNzZXJ0KG0pOworCisgICAgZGJ1c19tZXNzYWdlX2l0ZXJfaW5pdChtLCAmaXRlcik7CisKKyAgICBmb3IgKGogPSAwOyBqIDwgaWR4OyBqKyspCisgICAgICAgZGJ1c19tZXNzYWdlX2l0ZXJfbmV4dCgmaXRlcik7CisKKyAgICBpZiAoZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2FyZ190eXBlKCZpdGVyKSAhPSBEQlVTX1RZUEVfQVJSQVkgfHwKKyAgICAgICAgZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2VsZW1lbnRfdHlwZSgmaXRlcikgIT0gREJVU19UWVBFX0JZVEUpCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIGRidXNfbWVzc2FnZV9pdGVyX3JlY3Vyc2UoJml0ZXIsICZzdWIpOworICAgIGRidXNfbWVzc2FnZV9pdGVyX2dldF9maXhlZF9hcnJheSgmc3ViLCAmaywgJm4pOworCisgICAgKnJkYXRhID0gazsKKyAgICAqc2l6ZSA9IG47CisKKyAgICByZXR1cm4gMDsKKworZmFpbDoKKyAgICBhdmFoaV9sb2dfd2FybigiRXJyb3IgcGFyc2luZyBkYXRhIik7CisKKyAgICAqcmRhdGEgPSBOVUxMOworICAgIHNpemUgPSAwOworICAgIHJldHVybiAtMTsKK30KKworaW50IGF2YWhpX2RidXNfcmVhZF9zdHJsc3QoREJ1c01lc3NhZ2UgKm0sIGludCBpZHgsIEF2YWhpU3RyaW5nTGlzdCAqKmwpIHsKKyAgICBEQnVzTWVzc2FnZUl0ZXIgaXRlciwgc3ViOworICAgIGludCBqOworICAgIEF2YWhpU3RyaW5nTGlzdCAqc3RybHN0ID0gTlVMTDsKKworICAgIGFzc2VydChtKTsKKyAgICBhc3NlcnQobCk7CisKKyAgICBkYnVzX21lc3NhZ2VfaXRlcl9pbml0KG0sICZpdGVyKTsKKworICAgIGZvciAoaiA9IDA7IGogPCBpZHg7IGorKykKKyAgICAgICAgZGJ1c19tZXNzYWdlX2l0ZXJfbmV4dCgmaXRlcik7CisKKyAgICBpZiAoZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2FyZ190eXBlKCZpdGVyKSAhPSBEQlVTX1RZUEVfQVJSQVkgfHwKKyAgICAgICAgZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2VsZW1lbnRfdHlwZSgmaXRlcikgIT0gREJVU19UWVBFX0FSUkFZKQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICBkYnVzX21lc3NhZ2VfaXRlcl9yZWN1cnNlKCZpdGVyLCAmc3ViKTsKKworICAgIGZvciAoOzspIHsKKyAgICAgICAgaW50IGF0LCBuOworICAgICAgICBjb25zdCB1aW50OF90ICprOworICAgICAgICBEQnVzTWVzc2FnZUl0ZXIgc3ViMjsKKworICAgICAgICBpZiAoKGF0ID0gZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2FyZ190eXBlKCZzdWIpKSA9PSBEQlVTX1RZUEVfSU5WQUxJRCkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGFzc2VydChhdCA9PSBEQlVTX1RZUEVfQVJSQVkpOworCisgICAgICAgIGlmIChkYnVzX21lc3NhZ2VfaXRlcl9nZXRfZWxlbWVudF90eXBlKCZzdWIpICE9IERCVVNfVFlQRV9CWVRFKQorICAgICAgICAgICAgZ290byBmYWlsOworCisgICAgICAgIGRidXNfbWVzc2FnZV9pdGVyX3JlY3Vyc2UoJnN1YiwgJnN1YjIpOworCisgICAgICAgIGsgPSAoY29uc3QgdWludDhfdCopICIiOworICAgICAgICBuID0gMDsKKyAgICAgICAgZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2ZpeGVkX2FycmF5KCZzdWIyLCAmaywgJm4pOworCisgICAgICAgIGlmICghaykKKyAgICAgICAgICAgIGsgPSAoY29uc3QgdWludDhfdCopICIiOworCisgICAgICAgIHN0cmxzdCA9IGF2YWhpX3N0cmluZ19saXN0X2FkZF9hcmJpdHJhcnkoc3RybHN0LCBrLCBuKTsKKworICAgICAgICBkYnVzX21lc3NhZ2VfaXRlcl9uZXh0KCZzdWIpOworICAgIH0KKworICAgICpsID0gc3RybHN0OworCisgICAgcmV0dXJuIDA7CisKK2ZhaWw6CisgICAgYXZhaGlfbG9nX3dhcm4oIkVycm9yIHBhcnNpbmcgVFhUIGRhdGEiKTsKKworICAgIGF2YWhpX3N0cmluZ19saXN0X2ZyZWUoc3RybHN0KTsKKyAgICAqbCA9IE5VTEw7CisgICAgcmV0dXJuIC0xOworfQorCitpbnQgYXZhaGlfZGJ1c19pc19vdXJfb3duX3NlcnZpY2UoQ2xpZW50ICpjLCBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLCBBdmFoaVByb3RvY29sIHByb3RvY29sLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp0eXBlLCBjb25zdCBjaGFyICpkb21haW4pIHsKKyAgICBBdmFoaVNFbnRyeUdyb3VwICpnOworCisgICAgaWYgKGF2YWhpX3NlcnZlcl9nZXRfZ3JvdXBfb2Zfc2VydmljZShhdmFoaV9zZXJ2ZXIsIGludGVyZmFjZSwgcHJvdG9jb2wsIG5hbWUsIHR5cGUsIGRvbWFpbiwgJmcpID09IEFWQUhJX09LKSB7CisgICAgICAgIEVudHJ5R3JvdXBJbmZvICplZ2k7CisKKyAgICAgICAgZm9yIChlZ2kgPSBjLT5lbnRyeV9ncm91cHM7IGVnaTsgZWdpID0gZWdpLT5lbnRyeV9ncm91cHNfbmV4dCkKKyAgICAgICAgICAgIGlmIChlZ2ktPmVudHJ5X2dyb3VwID09IGcpCisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBhdmFoaV9kYnVzX2FwcGVuZF9yZGF0YShEQnVzTWVzc2FnZSAqbWVzc2FnZSwgY29uc3Qgdm9pZCAqcmRhdGEsIHNpemVfdCBzaXplKSB7CisgICAgREJ1c01lc3NhZ2VJdGVyIGl0ZXIsIHN1YjsKKworICAgIGFzc2VydChtZXNzYWdlKTsKKworICAgIGRidXNfbWVzc2FnZV9pdGVyX2luaXRfYXBwZW5kKG1lc3NhZ2UsICZpdGVyKTsKKworICAgIGlmICghKGRidXNfbWVzc2FnZV9pdGVyX29wZW5fY29udGFpbmVyKCZpdGVyLCBEQlVTX1RZUEVfQVJSQVksIERCVVNfVFlQRV9CWVRFX0FTX1NUUklORywgJnN1YikpIHx8CisgICAgICAgICEoZGJ1c19tZXNzYWdlX2l0ZXJfYXBwZW5kX2ZpeGVkX2FycmF5KCZzdWIsIERCVVNfVFlQRV9CWVRFLCAmcmRhdGEsIHNpemUpKSB8fAorICAgICAgICAhKGRidXNfbWVzc2FnZV9pdGVyX2Nsb3NlX2NvbnRhaW5lcigmaXRlciwgJnN1YikpKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vZGJ1cy11dGlsLmggYi9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL2RidXMtdXRpbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MTMzNjcKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL2RidXMtdXRpbC5oCkBAIC0wLDAgKzEsNTcgQEAKKyNpZm5kZWYgZm9vZGJ1c3V0aWxoZm9vCisjZGVmaW5lIGZvb2RidXN1dGlsaGZvbworCisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorCisjaW5jbHVkZSA8ZGJ1cy9kYnVzLmg+CisKKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vc3RybHN0Lmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2RlZnMuaD4KKworI2luY2x1ZGUgImRidXMtaW50ZXJuYWwuaCIKKworREJ1c0hhbmRsZXJSZXN1bHQgYXZhaGlfZGJ1c19yZXNwb25kX2Vycm9yKERCdXNDb25uZWN0aW9uICpjLCBEQnVzTWVzc2FnZSAqbSwgaW50IGVycm9yLCBjb25zdCBjaGFyICp0ZXh0KTsKK0RCdXNIYW5kbGVyUmVzdWx0IGF2YWhpX2RidXNfcmVzcG9uZF9zdHJpbmcoREJ1c0Nvbm5lY3Rpb24gKmMsIERCdXNNZXNzYWdlICptLCBjb25zdCBjaGFyICp0ZXh0KTsKK0RCdXNIYW5kbGVyUmVzdWx0IGF2YWhpX2RidXNfcmVzcG9uZF9pbnQzMihEQnVzQ29ubmVjdGlvbiAqYywgREJ1c01lc3NhZ2UgKm0sIGludDMyX3QgaSk7CitEQnVzSGFuZGxlclJlc3VsdCBhdmFoaV9kYnVzX3Jlc3BvbmRfdWludDMyKERCdXNDb25uZWN0aW9uICpjLCBEQnVzTWVzc2FnZSAqbSwgdWludDMyX3QgdSk7CitEQnVzSGFuZGxlclJlc3VsdCBhdmFoaV9kYnVzX3Jlc3BvbmRfYm9vbGVhbihEQnVzQ29ubmVjdGlvbiAqYywgREJ1c01lc3NhZ2UgKm0sIGludCBiKTsKK0RCdXNIYW5kbGVyUmVzdWx0IGF2YWhpX2RidXNfcmVzcG9uZF9vayhEQnVzQ29ubmVjdGlvbiAqYywgREJ1c01lc3NhZ2UgKm0pOworREJ1c0hhbmRsZXJSZXN1bHQgYXZhaGlfZGJ1c19yZXNwb25kX3BhdGgoREJ1c0Nvbm5lY3Rpb24gKmMsIERCdXNNZXNzYWdlICptLCBjb25zdCBjaGFyICpwYXRoKTsKKwordm9pZCBhdmFoaV9kYnVzX2FwcGVuZF9zZXJ2ZXJfZXJyb3IoREJ1c01lc3NhZ2UgKnJlcGx5KTsKKworY29uc3QgY2hhciAqYXZhaGlfZGJ1c19tYXBfYnJvd3NlX3NpZ25hbF9uYW1lKEF2YWhpQnJvd3NlckV2ZW50IGUpOworCitjb25zdCBjaGFyICphdmFoaV9kYnVzX21hcF9yZXNvbHZlX3NpZ25hbF9uYW1lKEF2YWhpUmVzb2x2ZXJFdmVudCBlKTsKKworREJ1c0hhbmRsZXJSZXN1bHQgYXZhaGlfZGJ1c19oYW5kbGVfaW50cm9zcGVjdChEQnVzQ29ubmVjdGlvbiAqYywgREJ1c01lc3NhZ2UgKm0sIGNvbnN0IGNoYXIgKmZuYW1lKTsKKwordm9pZCBhdmFoaV9kYnVzX2FwcGVuZF9zdHJpbmdfbGlzdChEQnVzTWVzc2FnZSAqcmVwbHksIEF2YWhpU3RyaW5nTGlzdCAqdHh0KTsKKworaW50IGF2YWhpX2RidXNfcmVhZF9yZGF0YShEQnVzTWVzc2FnZSAqbSwgaW50IGlkeCwgdm9pZCAqKnJkYXRhLCB1aW50MzJfdCAqc2l6ZSk7CitpbnQgYXZhaGlfZGJ1c19yZWFkX3N0cmxzdChEQnVzTWVzc2FnZSAqbSwgaW50IGlkeCwgQXZhaGlTdHJpbmdMaXN0ICoqbCk7CisKK2ludCBhdmFoaV9kYnVzX2lzX291cl9vd25fc2VydmljZShDbGllbnQgKmMsIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnR5cGUsIGNvbnN0IGNoYXIgKmRvbWFpbik7CisKK2ludCBhdmFoaV9kYnVzX2FwcGVuZF9yZGF0YShEQnVzTWVzc2FnZSAqbWVzc2FnZSwgY29uc3Qgdm9pZCAqcmRhdGEsIHNpemVfdCBzaXplKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL2V4YW1wbGUuc2VydmljZSBiL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vZXhhbXBsZS5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ZGIyYWUKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL2V4YW1wbGUuc2VydmljZQpAQCAtMCwwICsxLDUwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIHN0YW5kYWxvbmU9J25vJz8+PCEtLSotbnhtbC0qLS0+Cis8IURPQ1RZUEUgc2VydmljZS1ncm91cCBTWVNURU0gImF2YWhpLXNlcnZpY2UuZHRkIj4KKworPCEtLQorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKyAKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAwMjExMS0xMzA3IFVTQS4KKy0tPgorCis8IS0tIFNlZSBhdmFoaS5zZXJ2aWNlKDUpIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgY29uZmlndXJhdGlvbiBmaWxlIC0tPgorCis8c2VydmljZS1ncm91cD4KKworICA8bmFtZSByZXBsYWNlLXdpbGRjYXJkcz0ieWVzIj5QcmludGVyIG9uICVoPC9uYW1lPgorCisgIDxzZXJ2aWNlPgorICAgIDx0eXBlPl9wcmludGVyLl90Y3A8L3R5cGU+CisgICAgPHBvcnQ+NTE1PC9wb3J0PgorICA8L3NlcnZpY2U+CisKKyAgPHNlcnZpY2U+CisgICAgPHR5cGU+X2lwcC5fdGNwPC90eXBlPgorICAgIDxzdWJ0eXBlPl9jb2xvdXIuX3N1Yi5faXBwLl90Y3A8L3N1YnR5cGU+CisgICAgPHBvcnQ+NjMxPC9wb3J0PgorICA8L3NlcnZpY2U+CisKKyAgPHNlcnZpY2UgcHJvdG9jb2w9ImlwdjYiPgorICAgIDx0eXBlPl91YmVycHJpbnRlci5fdGNwPC90eXBlPgorICAgIDxkb21haW4tbmFtZT5sb2NhbDwvZG9tYWluLW5hbWU+CisgICAgPGhvc3QtbmFtZT5xdXV4LmxvY2FsPC9ob3N0LW5hbWU+CisgICAgPHBvcnQ+NDcxMTwvcG9ydD4KKyAgICA8dHh0LXJlY29yZD50aGlzPWlzPC90eHQtcmVjb3JkPgorICAgIDx0eHQtcmVjb3JkPmE9cmVhbGx5PC90eHQtcmVjb3JkPgorICAgIDx0eHQtcmVjb3JkPmJhZD1leGFtcGxlPC90eHQtcmVjb3JkPgorICA8L3NlcnZpY2U+CisKKzwvc2VydmljZS1ncm91cD4KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vaG9zdHMgYi9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL2hvc3RzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0ODMzNDAKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL2hvc3RzCkBAIC0wLDAgKzEsMjcgQEAKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisjIAorIyBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworIyBVU0EuCisKKyMgVGhpcyBmaWxlIGNvbnRhaW5zIHN0YXRpYyBpcCBhZGRyZXNzIDwtPiBob3N0IG5hbWUgbWFwcGluZ3MuICBUaGVzZQorIyBjYW4gYmUgdXNlZnVsIHRvIHB1Ymxpc2ggc2VydmljZXMgb24gYmVoYWxmIG9mIGEgbm9uLWF2YWhpIGVuYWJsZWQKKyMgZGV2aWNlLiBQbGVhc2UgYmVhciBpbiBtaW5kIHRoYXQgaG9zdCBuYW1lcyBhcmUgZXhwZWN0ZWQgdG8gYmUKKyMgZnVsbHkgcXVhbGlmaWVkIGRvbWFpbiBuYW1lcywgaS5lLiBlbmRpbmcgaW4gLmxvY2FsIQorCisjIFNlZSBhdmFoaS5ob3N0cyg1KSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIGNvbmZpZ3VyYXRpb24gZmlsZSEKKworIyBFeGFtcGxlczoKKyMgMTkyLjE2OC4wLjEgcm91dGVyLmxvY2FsCisjIDIwMDE6OjgxOjEgdGVzdC5sb2NhbApkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9pbmktZmlsZS1wYXJzZXItdGVzdC5jIGIvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9pbmktZmlsZS1wYXJzZXItdGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjYTY2NDEKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL2luaS1maWxlLXBhcnNlci10ZXN0LmMKQEAgLTAsMCArMSw2MiBAQAorLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL21hbGxvYy5oPgorCisjaW5jbHVkZSAiaW5pLWZpbGUtcGFyc2VyLmgiCisKK2ludCBtYWluKEFWQUhJX0dDQ19VTlVTRUQgaW50IGFyZ2MsIEFWQUhJX0dDQ19VTlVTRUQgY2hhciAqYXJndltdKSB7CisKKyAgICBBdmFoaUluaUZpbGUgKmY7CisgICAgQXZhaGlJbmlGaWxlR3JvdXAgKmc7CisKKyAgICBpZiAoIShmID0gYXZhaGlfaW5pX2ZpbGVfbG9hZCgiYXZhaGktZGFlbW9uLmNvbmYiKSkpIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgcHJpbnRmKCIldSBncm91cHNcbiIsIGYtPm5fZ3JvdXBzKTsKKworICAgIGZvciAoZyA9IGYtPmdyb3VwczsgZzsgZyA9IGctPmdyb3Vwc19uZXh0KSB7CisgICAgICAgIEF2YWhpSW5pRmlsZVBhaXIgKnA7CisgICAgICAgIHByaW50ZigiPCVzPiAoJXUgcGFpcnMpXG4iLCBnLT5uYW1lLCBnLT5uX3BhaXJzKTsKKworICAgICAgICBmb3IgKHAgPSBnLT5wYWlyczsgcDsgcCA9IHAtPnBhaXJzX25leHQpIHsKKyAgICAgICAgICAgIGNoYXIgKipzcGxpdCwgKippOworCisgICAgICAgICAgICBwcmludGYoIlx0PCVzPiA9ICIsIHAtPmtleSk7CisgICAgICAgICAgICBzcGxpdCA9IGF2YWhpX3NwbGl0X2NzdihwLT52YWx1ZSk7CisKKyAgICAgICAgICAgIGZvciAoaSA9IHNwbGl0OyAqaTsgaSsrKQorICAgICAgICAgICAgICAgIHByaW50ZigiPCVzPiAiLCAqaSk7CisKKyAgICAgICAgICAgIGF2YWhpX3N0cmZyZWV2KHNwbGl0KTsKKworICAgICAgICAgICAgcHJpbnRmKCJcbiIpOworICAgICAgICB9CisgICAgfQorCisgICAgYXZhaGlfaW5pX2ZpbGVfZnJlZShmKTsKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vaW5pLWZpbGUtcGFyc2VyLmMgYi9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL2luaS1maWxlLXBhcnNlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhOTljZTMKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL2luaS1maWxlLXBhcnNlci5jCkBAIC0wLDAgKzEsMTk2IEBACisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL21hbGxvYy5oPgorI2luY2x1ZGUgPGF2YWhpLWNvcmUvbG9nLmg+CisKKyNpbmNsdWRlICJpbmktZmlsZS1wYXJzZXIuaCIKKworQXZhaGlJbmlGaWxlKiBhdmFoaV9pbmlfZmlsZV9sb2FkKGNvbnN0IGNoYXIgKmZuYW1lKSB7CisgICAgQXZhaGlJbmlGaWxlICpmOworICAgIEZJTEUgKmZvOworICAgIEF2YWhpSW5pRmlsZUdyb3VwICpncm91cCA9IE5VTEw7CisgICAgdW5zaWduZWQgbGluZTsKKworICAgIGFzc2VydChmbmFtZSk7CisKKyAgICBpZiAoIShmbyA9IGZvcGVuKGZuYW1lLCAiciIpKSkgeworICAgICAgICBhdmFoaV9sb2dfZXJyb3IoIkZhaWxlZCB0byBvcGVuIGZpbGUgJyVzJzogJXMiLCBmbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgZiA9IGF2YWhpX25ldyhBdmFoaUluaUZpbGUsIDEpOworICAgIEFWQUhJX0xMSVNUX0hFQURfSU5JVChBdmFoaUluaUZpbGVHcm91cCwgZi0+Z3JvdXBzKTsKKyAgICBmLT5uX2dyb3VwcyA9IDA7CisKKyAgICBsaW5lID0gMDsKKyAgICB3aGlsZSAoIWZlb2YoZm8pKSB7CisgICAgICAgIGNoYXIgbG5bMjU2XSwgKnMsICplOworICAgICAgICBBdmFoaUluaUZpbGVQYWlyICpwYWlyOworCisgICAgICAgIGlmICghKGZnZXRzKGxuLCBzaXplb2YobG4pLCBmbykpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgbGluZSsrOworCisgICAgICAgIHMgPSBsbiArIHN0cnNwbihsbiwgIiBcdCIpOworICAgICAgICBzW3N0cmNzcG4ocywgIlxyXG4iKV0gPSAwOworCisgICAgICAgIC8qIFNraXAgY29tbWVudHMgYW5kIGVtcHR5IGxpbmVzICovCisgICAgICAgIGlmICgqcyA9PSAnIycgfHwgKnMgPT0gJyUnIHx8ICpzID09IDApCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoKnMgPT0gJ1snKSB7CisgICAgICAgICAgICAvKiBuZXcgZ3JvdXAgKi8KKworICAgICAgICAgICAgaWYgKCEoZSA9IHN0cmNocihzLCAnXScpKSkgeworICAgICAgICAgICAgICAgIGF2YWhpX2xvZ19lcnJvcigiVW5jbG9zZWQgZ3JvdXAgaGVhZGVyIGluICVzOiV1OiA8JXM+IiwgZm5hbWUsIGxpbmUsIHMpOworICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgKmUgPSAwOworCisgICAgICAgICAgICBncm91cCA9IGF2YWhpX25ldyhBdmFoaUluaUZpbGVHcm91cCwgMSk7CisgICAgICAgICAgICBncm91cC0+bmFtZSA9IGF2YWhpX3N0cmR1cChzKzEpOworICAgICAgICAgICAgZ3JvdXAtPm5fcGFpcnMgPSAwOworICAgICAgICAgICAgQVZBSElfTExJU1RfSEVBRF9JTklUKEF2YWhpSW5pRmlsZVBhaXIsIGdyb3VwLT5wYWlycyk7CisKKyAgICAgICAgICAgIEFWQUhJX0xMSVNUX1BSRVBFTkQoQXZhaGlJbmlGaWxlR3JvdXAsIGdyb3VwcywgZi0+Z3JvdXBzLCBncm91cCk7CisgICAgICAgICAgICBmLT5uX2dyb3VwcysrOworICAgICAgICB9IGVsc2UgeworCisgICAgICAgICAgICAvKiBOb3JtYWwgYXNzaWdubWVudCAqLworICAgICAgICAgICAgaWYgKCEoZSA9IHN0cmNocihzLCAnPScpKSkgeworICAgICAgICAgICAgICAgIGF2YWhpX2xvZ19lcnJvcigiTWlzc2luZyBhc3NpZ25tZW50IGluICVzOiV1OiA8JXM+IiwgZm5hbWUsIGxpbmUsIHMpOworICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFncm91cCkgeworICAgICAgICAgICAgICAgIGF2YWhpX2xvZ19lcnJvcigiQXNzaWdubWVudCBvdXRzaWRlIGdyb3VwIGluICVzOiV1IDwlcz4iLCBmbmFtZSwgbGluZSwgcyk7CisgICAgICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBTcGxpdCB0aGUga2V5IGFuZCB0aGUgdmFsdWUgKi8KKyAgICAgICAgICAgICooZSsrKSA9IDA7CisKKyAgICAgICAgICAgIHBhaXIgPSBhdmFoaV9uZXcoQXZhaGlJbmlGaWxlUGFpciwgMSk7CisgICAgICAgICAgICBwYWlyLT5rZXkgPSBhdmFoaV9zdHJkdXAocyk7CisgICAgICAgICAgICBwYWlyLT52YWx1ZSA9IGF2YWhpX3N0cmR1cChlKTsKKworICAgICAgICAgICAgQVZBSElfTExJU1RfUFJFUEVORChBdmFoaUluaUZpbGVQYWlyLCBwYWlycywgZ3JvdXAtPnBhaXJzLCBwYWlyKTsKKyAgICAgICAgICAgIGdyb3VwLT5uX3BhaXJzKys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmY2xvc2UoZm8pOworCisgICAgcmV0dXJuIGY7CisKK2ZhaWw6CisKKyAgICBpZiAoZm8pCisgICAgICAgIGZjbG9zZShmbyk7CisKKyAgICBpZiAoZikKKyAgICAgICAgYXZhaGlfaW5pX2ZpbGVfZnJlZShmKTsKKworICAgIHJldHVybiBOVUxMOworfQorCit2b2lkIGF2YWhpX2luaV9maWxlX2ZyZWUoQXZhaGlJbmlGaWxlICpmKSB7CisgICAgQXZhaGlJbmlGaWxlR3JvdXAgKmc7CisgICAgYXNzZXJ0KGYpOworCisgICAgd2hpbGUgKChnID0gZi0+Z3JvdXBzKSkgeworICAgICAgICBBdmFoaUluaUZpbGVQYWlyICpwOworCisgICAgICAgIHdoaWxlICgocCA9IGctPnBhaXJzKSkgeworICAgICAgICAgICAgYXZhaGlfZnJlZShwLT5rZXkpOworICAgICAgICAgICAgYXZhaGlfZnJlZShwLT52YWx1ZSk7CisKKyAgICAgICAgICAgIEFWQUhJX0xMSVNUX1JFTU9WRShBdmFoaUluaUZpbGVQYWlyLCBwYWlycywgZy0+cGFpcnMsIHApOworICAgICAgICAgICAgYXZhaGlfZnJlZShwKTsKKyAgICAgICAgfQorCisgICAgICAgIGF2YWhpX2ZyZWUoZy0+bmFtZSk7CisKKyAgICAgICAgQVZBSElfTExJU1RfUkVNT1ZFKEF2YWhpSW5pRmlsZUdyb3VwLCBncm91cHMsIGYtPmdyb3VwcywgZyk7CisgICAgICAgIGF2YWhpX2ZyZWUoZyk7CisgICAgfQorCisgICAgYXZhaGlfZnJlZShmKTsKK30KKworY2hhcioqIGF2YWhpX3NwbGl0X2Nzdihjb25zdCBjaGFyICp0KSB7CisgICAgdW5zaWduZWQgbl9jb21tYSA9IDA7CisgICAgY29uc3QgY2hhciAqcDsKKyAgICBjaGFyICoqciwgKippOworCisgICAgZm9yIChwID0gdDsgKnA7IHArKykKKyAgICAgICAgaWYgKCpwID09ICcsJykKKyAgICAgICAgICAgIG5fY29tbWErKzsKKworICAgIGkgPSByID0gYXZhaGlfbmV3KGNoYXIqLCBuX2NvbW1hKzIpOworCisgICAgZm9yICg7OykgeworICAgICAgICBzaXplX3QgbiwgbCA9IHN0cmNzcG4odCwgIiwiKTsKKyAgICAgICAgY29uc3QgY2hhciAqYzsKKworICAgICAgICAvKiBJZ25vcmUgbGVhZGluZyBibGFua3MgKi8KKyAgICAgICAgZm9yIChjID0gdCwgbiA9IGw7IGlzYmxhbmsoKmMpOyBjKyssIG4tLSk7CisKKyAgICAgICAgLyogSWdub3JlIHRyYWlsaW5nIGJsYW5rcyAqLworICAgICAgICBmb3IgKDsgbiA+IDAgJiYgaXNibGFuayhjW24tMV0pOyBuLS0pOworCisgICAgICAgICooaSsrKSA9IGF2YWhpX3N0cm5kdXAoYywgbik7CisKKyAgICAgICAgdCArPSBsOworCisgICAgICAgIGlmICgqdCA9PSAwKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgYXNzZXJ0KCp0ID09ICcsJyk7CisgICAgICAgIHQrKzsKKyAgICB9CisKKyAgICAqaSA9IE5VTEw7CisKKyAgICByZXR1cm4gcjsKK30KKwordm9pZCBhdmFoaV9zdHJmcmVldihjaGFyICoqcCkgeworICAgIGNoYXIgKippOworCisgICAgaWYgKCFwKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGkgPSBwOyAqaTsgaSsrKQorICAgICAgICBhdmFoaV9mcmVlKCppKTsKKworICAgIGF2YWhpX2ZyZWUocCk7Cit9CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL2luaS1maWxlLXBhcnNlci5oIGIvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9pbmktZmlsZS1wYXJzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDNhYWNlCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9pbmktZmlsZS1wYXJzZXIuaApAQCAtMCwwICsxLDU1IEBACisjaWZuZGVmIGZvb2luaWZpbGVwYXJzZXJoZm9vCisjZGVmaW5lIGZvb2luaWZpbGVwYXJzZXJoZm9vCisKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9sbGlzdC5oPgorCit0eXBlZGVmIHN0cnVjdCBBdmFoaUluaUZpbGUgQXZhaGlJbmlGaWxlOwordHlwZWRlZiBzdHJ1Y3QgQXZhaGlJbmlGaWxlUGFpciBBdmFoaUluaUZpbGVQYWlyOwordHlwZWRlZiBzdHJ1Y3QgQXZhaGlJbmlGaWxlR3JvdXAgQXZhaGlJbmlGaWxlR3JvdXA7CisKK3N0cnVjdCBBdmFoaUluaUZpbGVQYWlyIHsKKyAgICBBVkFISV9MTElTVF9GSUVMRFMoQXZhaGlJbmlGaWxlUGFpciwgcGFpcnMpOworICAgIGNoYXIgKmtleSwgKnZhbHVlOworfTsKKworc3RydWN0IEF2YWhpSW5pRmlsZUdyb3VwIHsKKyAgICBBVkFISV9MTElTVF9GSUVMRFMoQXZhaGlJbmlGaWxlR3JvdXAsIGdyb3Vwcyk7CisgICAgY2hhciAqbmFtZTsKKworICAgIEFWQUhJX0xMSVNUX0hFQUQoQXZhaGlJbmlGaWxlUGFpciwgcGFpcnMpOworICAgIHVuc2lnbmVkIG5fcGFpcnM7Cit9OworCitzdHJ1Y3QgQXZhaGlJbmlGaWxlIHsKKyAgICBBVkFISV9MTElTVF9IRUFEKEF2YWhpSW5pRmlsZUdyb3VwLCBncm91cHMpOworICAgIHVuc2lnbmVkIG5fZ3JvdXBzOworfTsKKworCitBdmFoaUluaUZpbGUqIGF2YWhpX2luaV9maWxlX2xvYWQoY29uc3QgY2hhciAqZm5hbWUpOwordm9pZCBhdmFoaV9pbmlfZmlsZV9mcmVlKEF2YWhpSW5pRmlsZSAqZik7CisKK2NoYXIqKiBhdmFoaV9zcGxpdF9jc3YoY29uc3QgY2hhciAqdCk7CisKK3ZvaWQgYXZhaGlfc3RyZnJlZXYoY2hhciAqKik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9pbnRyb3NwZWN0LmR0ZCBiL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vaW50cm9zcGVjdC5kdGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVkOTEzYQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vaW50cm9zcGVjdC5kdGQKQEAgLTAsMCArMSwzNyBAQAorPCEtLSBEVEQgZm9yIEQtQlVTIEludHJvc3BlY3Rpb24gZGF0YSAtLT4KKzwhLS0gKEMpIDIwMDUtMDItMDIgRGF2aWQgQS4gV2hlZWxlcjsgcmVsZWFzZWQgdW5kZXIgdGhlIEQtQlVTIGxpY2Vuc2VzLAorICAgICAgICAgR05VIEdQTCB2ZXJzaW9uIDIgKG9yIGdyZWF0ZXIpIGFuZCBBRkwgMS4xIChvciBncmVhdGVyKSAtLT4KKworPCEtLSBzZWUgRC1CVVMgc3BlY2lmaWNhdGlvbiBmb3IgZG9jdW1lbnRhdGlvbiAtLT4KKworPCFFTEVNRU5UIG5vZGUgKG5vZGV8aW50ZXJmYWNlKSo+Cis8IUFUVExJU1Qgbm9kZSBuYW1lIENEQVRBICNJTVBMSUVEPgorCis8IUVMRU1FTlQgaW50ZXJmYWNlIChtZXRob2R8c2lnbmFsfHByb3BlcnR5fGFubm90YXRpb24pKj4KKzwhQVRUTElTVCBpbnRlcmZhY2UgbmFtZSBDREFUQSAjUkVRVUlSRUQ+CisKKzwhRUxFTUVOVCBtZXRob2QgKGFyZ3xhbm5vdGF0aW9uKSo+Cis8IUFUVExJU1QgbWV0aG9kIG5hbWUgQ0RBVEEgI1JFUVVJUkVEPgorCis8IUVMRU1FTlQgc2lnbmFsIChhcmd8YW5ub3RhdGlvbikqPgorPCFBVFRMSVNUIHNpZ25hbCBuYW1lIENEQVRBICNSRVFVSVJFRD4KKworPCFFTEVNRU5UIGFyZyBFTVBUWT4KKzwhQVRUTElTVCBhcmcgbmFtZSBDREFUQSAjSU1QTElFRD4KKzwhQVRUTElTVCBhcmcgdHlwZSBDREFUQSAjUkVRVUlSRUQ+Cis8IS0tIE1ldGhvZCBhcmd1bWVudHMgU0hPVUxEIGluY2x1ZGUgImRpcmVjdGlvbiIsCisgICAgIHdoaWxlIHNpZ25hbCBhbmQgZXJyb3IgYXJndW1lbnRzIFNIT1VMRCBub3QgKHNpbmNlIHRoZXJlJ3Mgbm8gcG9pbnQpLgorICAgICBUaGUgRFREIGZvcm1hdCBjYW4ndCBleHByZXNzIHRoYXQgc3VidGxldHkuIC0tPgorPCFBVFRMSVNUIGFyZyBkaXJlY3Rpb24gKGlufG91dCkgImluIj4KKworPCEtLSBBS0EgImF0dHJpYnV0ZSIgLS0+Cis8IUVMRU1FTlQgcHJvcGVydHkgKGFubm90YXRpb24pKj4KKzwhQVRUTElTVCBwcm9wZXJ0eSBuYW1lIENEQVRBICNSRVFVSVJFRD4KKzwhQVRUTElTVCBwcm9wZXJ0eSB0eXBlIENEQVRBICNSRVFVSVJFRD4gCis8IUFUVExJU1QgcHJvcGVydHkgYWNjZXNzIChyZWFkfHdyaXRlfHJlYWR3cml0ZSkgI1JFUVVJUkVEPgorCis8IUVMRU1FTlQgYW5ub3RhdGlvbiBFTVBUWT4gIDwhLS0gR2VuZXJpYyBtZXRhZGF0YSAtLT4KKzwhQVRUTElTVCBhbm5vdGF0aW9uIG5hbWUgQ0RBVEEgI1JFUVVJUkVEPgorPCFBVFRMSVNUIGFubm90YXRpb24gdmFsdWUgQ0RBVEEgI1JFUVVJUkVEPgorCisKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vaW50cm9zcGVjdC54c2wgYi9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL2ludHJvc3BlY3QueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkNjg1NjAKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL2ludHJvc3BlY3QueHNsCkBAIC0wLDAgKzEsMTAyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJpc28tODg1OS0xNSI/PgorPHhzbDpzdHlsZXNoZWV0IHZlcnNpb249IjEuMCIgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKworPCEtLSAKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgorICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EuIAorLS0+CisKKzx4c2w6b3V0cHV0IG1ldGhvZD0ieG1sIiB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJpc28tODg1OS0xNSIgZG9jdHlwZS1wdWJsaWM9Ii0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiBkb2N0eXBlLXN5c3RlbT0iaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCIgaW5kZW50PSJ5ZXMiLz4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iLyI+CisgIDxodG1sPgorICAgIDxoZWFkPgorICAgICAgPHRpdGxlPkRCVVMgSW50cm9zcGVjdGlvbiBkYXRhPC90aXRsZT4KKyAgICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisgICAgICAgIGJvZHkgeyBjb2xvcjogYmxhY2s7IGJhY2tncm91bmQtY29sb3I6IHdoaXRlIH0gCisgICAgICAgIGgxIHsgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWYgfQorICAgICAgICB1bCB7IGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsgbWFyZ2luLWJvdHRvbTogMTBweCB9CisgICAgICAgIGxpIHsgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWYgfQorICAgICAgICAua2V5d29yZCB7IGZvbnQtc3R5bGU6IGl0YWxpYyB9CisgICAgICAgIC50eXBlIHsgZm9udC13ZWlnaHQ6IGJvbGQgfQorICAgICAgICAuc3ltYm9sIHsgZm9udC1mYW1pbHk6IG1vbm9zcGFjZSB9CisgICAgICAgIC5pbnRlcmZhY2UgeyBwYWRkaW5nOiAxMHB4OyBtYXJnaW46IDEwcHggfQorICAgICAgPC9zdHlsZT4KKyAgICA8L2hlYWQ+CisgICAgPGJvZHk+CisgICAgICA8eHNsOmZvci1lYWNoIHNlbGVjdD0ibm9kZS9pbnRlcmZhY2UiPgorICAgICAgICA8ZGl2IGNsYXNzPSJpbnRlcmZhY2UiPgorICAgICAgICAgIDxoMT4KKyAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5pbnRlcmZhY2U8L3NwYW4+PHhzbDp0ZXh0PiA8L3hzbDp0ZXh0PgorICAgICAgICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBuYW1lIi8+PC9zcGFuPgorICAgICAgICAgIDwvaDE+ICAgCisgICAgICAgICAgCisgICAgICAgICAgPHVsPgorCisgICAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9ImFubm90YXRpb24iLz4gCisKKyAgICAgICAgICAgIDx4c2w6Zm9yLWVhY2ggc2VsZWN0PSJtZXRob2R8c2lnbmFsfHByb3BlcnR5Ij4KKyAgICAgICAgICAgICAgPGxpPgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0ibmFtZSgpIi8+PC9zcGFuPgorICAgICAgICAgICAgICAgIDx4c2w6dGV4dD4gPC94c2w6dGV4dD4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz48L3NwYW4+CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgPHVsPgorICAgICAgICAgICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJhbm5vdGF0aW9uIi8+IAorICAgICAgICAgICAgICAgICAgPHhzbDpmb3ItZWFjaCBzZWxlY3Q9ImFyZyI+CisgICAgICAgICAgICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+CisgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDp3aGVuIHRlc3Q9IkBkaXJlY3Rpb24gIT0gJnF1b3Q7JnF1b3Q7Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGRpcmVjdGlvbiIvPiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6d2hlbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDp3aGVuIHRlc3Q9Im5hbWUoLi4pID0gJnF1b3Q7c2lnbmFsJnF1b3Q7Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6d2hlbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDpvdGhlcndpc2U+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6b3RoZXJ3aXNlPgorICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6Y2hvb3NlPgorICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKworICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dGV4dD4gPC94c2w6dGV4dD4KKyAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idHlwZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkB0eXBlIi8+PC9zcGFuPjx4c2w6dGV4dD4gPC94c2w6dGV4dD4KKyAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz48L3NwYW4+PHhzbDp0ZXh0PiA8L3hzbDp0ZXh0PgorICAgICAgICAgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgICAgICAgPC94c2w6Zm9yLWVhY2g+CisgICAgICAgICAgICAgICAgPC91bD4KKworICAgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgPC94c2w6Zm9yLWVhY2g+CisKKyAgICAgICAgICA8L3VsPgorICAgICAgICA8L2Rpdj4KKyAgICAgIDwveHNsOmZvci1lYWNoPgorICAgIDwvYm9keT4KKyAgPC9odG1sPgorPC94c2w6dGVtcGxhdGU+CisKKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYW5ub3RhdGlvbiI+IAorICA8bGk+CisgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmFubm90YXRpb248L3NwYW4+CisgICAgPGNvZGU+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBuYW1lIi8+PC9jb2RlPjx4c2w6dGV4dD4gPSA8L3hzbDp0ZXh0PgorICAgIDxjb2RlPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAdmFsdWUiLz48L2NvZGU+CisgIDwvbGk+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vbWFpbi5jIGIvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ2ZjQwYQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vbWFpbi5jCkBAIC0wLDAgKzEsMTY2OCBAQAorLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxnZXRvcHQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGdycC5oPgorI2luY2x1ZGUgPHB3ZC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKworI2lmZGVmIEhBVkVfSU5PVElGWQorI2luY2x1ZGUgPHN5cy9pbm90aWZ5Lmg+CisjZW5kaWYKKworI2lmZGVmIEhBVkVfS1FVRVVFCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL2V2ZW50Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGxpYmRhZW1vbi9kZm9yay5oPgorI2luY2x1ZGUgPGxpYmRhZW1vbi9kc2lnbmFsLmg+CisjaW5jbHVkZSA8bGliZGFlbW9uL2Rsb2cuaD4KKyNpbmNsdWRlIDxsaWJkYWVtb24vZHBpZC5oPgorCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL21hbGxvYy5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9zaW1wbGUtd2F0Y2guaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vZXJyb3IuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vYWx0ZXJuYXRpdmUuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vZG9tYWluLmg+CisKKyNpbmNsdWRlIDxhdmFoaS1jb3JlL2NvcmUuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb3JlL3B1Ymxpc2guaD4KKyNpbmNsdWRlIDxhdmFoaS1jb3JlL2Rucy1zcnYtcnIuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb3JlL2xvZy5oPgorCisjaWZkZWYgRU5BQkxFX0NIUk9PVAorI2luY2x1ZGUgImNocm9vdC5oIgorI2luY2x1ZGUgImNhcHMuaCIKKyNlbmRpZgorCisjaW5jbHVkZSAic2V0cHJvY3RpdGxlLmgiCisjaW5jbHVkZSAibWFpbi5oIgorI2luY2x1ZGUgInNpbXBsZS1wcm90b2NvbC5oIgorI2luY2x1ZGUgInN0YXRpYy1zZXJ2aWNlcy5oIgorI2luY2x1ZGUgInN0YXRpYy1ob3N0cy5oIgorI2luY2x1ZGUgImluaS1maWxlLXBhcnNlci5oIgorI2luY2x1ZGUgInNkLWRhZW1vbi5oIgorCisjaWZkZWYgSEFWRV9EQlVTCisjaW5jbHVkZSAiZGJ1cy1wcm90b2NvbC5oIgorI2VuZGlmCisKK0F2YWhpU2VydmVyICphdmFoaV9zZXJ2ZXIgPSBOVUxMOworQXZhaGlTaW1wbGVQb2xsICpzaW1wbGVfcG9sbF9hcGkgPSBOVUxMOworc3RhdGljIGNoYXIgKmFyZ3YwID0gTlVMTDsKK2ludCBuc3Nfc3VwcG9ydCA9IDA7CisKK3R5cGVkZWYgZW51bSB7CisgICAgREFFTU9OX1JVTiwKKyAgICBEQUVNT05fS0lMTCwKKyAgICBEQUVNT05fVkVSU0lPTiwKKyAgICBEQUVNT05fSEVMUCwKKyAgICBEQUVNT05fUkVMT0FELAorICAgIERBRU1PTl9DSEVDSworfSBEYWVtb25Db21tYW5kOworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgQXZhaGlTZXJ2ZXJDb25maWcgc2VydmVyX2NvbmZpZzsKKyAgICBEYWVtb25Db21tYW5kIGNvbW1hbmQ7CisgICAgaW50IGRhZW1vbml6ZTsKKyAgICBpbnQgdXNlX3N5c2xvZzsKKyAgICBjaGFyICpjb25maWdfZmlsZTsKKyNpZmRlZiBIQVZFX0RCVVMKKyAgICBpbnQgZW5hYmxlX2RidXM7CisgICAgaW50IGZhaWxfb25fbWlzc2luZ19kYnVzOworICAgIHVuc2lnbmVkIG5fY2xpZW50c19tYXg7CisgICAgdW5zaWduZWQgbl9vYmplY3RzX3Blcl9jbGllbnRfbWF4OworICAgIHVuc2lnbmVkIG5fZW50cmllc19wZXJfZW50cnlfZ3JvdXBfbWF4OworI2VuZGlmCisgICAgaW50IGRyb3Bfcm9vdDsKKyAgICBpbnQgc2V0X3JsaW1pdHM7CisjaWZkZWYgRU5BQkxFX0NIUk9PVAorICAgIGludCB1c2VfY2hyb290OworI2VuZGlmCisgICAgaW50IG1vZGlmeV9wcm9jX3RpdGxlOworCisgICAgaW50IGRpc2FibGVfdXNlcl9zZXJ2aWNlX3B1Ymxpc2hpbmc7CisgICAgaW50IHB1Ymxpc2hfcmVzb2x2X2NvbmY7CisgICAgY2hhciAqKiBwdWJsaXNoX2Ruc19zZXJ2ZXJzOworICAgIGludCBkZWJ1ZzsKKworICAgIGludCBybGltaXRfYXNfc2V0LCBybGltaXRfY29yZV9zZXQsIHJsaW1pdF9kYXRhX3NldCwgcmxpbWl0X2ZzaXplX3NldCwgcmxpbWl0X25vZmlsZV9zZXQsIHJsaW1pdF9zdGFja19zZXQ7CisgICAgcmxpbV90IHJsaW1pdF9hcywgcmxpbWl0X2NvcmUsIHJsaW1pdF9kYXRhLCBybGltaXRfZnNpemUsIHJsaW1pdF9ub2ZpbGUsIHJsaW1pdF9zdGFjazsKKworI2lmZGVmIFJMSU1JVF9OUFJPQworICAgIGludCBybGltaXRfbnByb2Nfc2V0OworICAgIHJsaW1fdCBybGltaXRfbnByb2M7CisjZW5kaWYKK30gRGFlbW9uQ29uZmlnOworCisjZGVmaW5lIFJFU09MVl9DT05GICIvZXRjL3Jlc29sdi5jb25mIgorI2RlZmluZSBCUk9XU0VfRE9NQUlOU19NQVggMTYKKworc3RhdGljIEF2YWhpU0VudHJ5R3JvdXAgKmRuc19zZXJ2ZXJzX2VudHJ5X2dyb3VwID0gTlVMTDsKK3N0YXRpYyBBdmFoaVNFbnRyeUdyb3VwICpyZXNvbHZfY29uZl9lbnRyeV9ncm91cCA9IE5VTEw7CisKK3N0YXRpYyBjaGFyICoqcmVzb2x2X2NvbmZfbmFtZV9zZXJ2ZXJzID0gTlVMTDsKK3N0YXRpYyBjaGFyICoqcmVzb2x2X2NvbmZfc2VhcmNoX2RvbWFpbnMgPSBOVUxMOworCitzdGF0aWMgRGFlbW9uQ29uZmlnIGNvbmZpZzsKKworc3RhdGljIGludCBoYXNfcHJlZml4KGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKnByZWZpeCkgeworICAgIHNpemVfdCBsOworCisgICAgbCA9IHN0cmxlbihwcmVmaXgpOworCisgICAgcmV0dXJuIHN0cmxlbihzKSA+PSBsICYmIHN0cm5jbXAocywgcHJlZml4LCBsKSA9PSAwOworfQorCitzdGF0aWMgaW50IGxvYWRfcmVzb2x2X2NvbmYodm9pZCkgeworICAgIGludCByZXQgPSAtMTsKKyAgICBGSUxFICpmOworICAgIGludCBpID0gMCwgaiA9IDA7CisKKyAgICBhdmFoaV9zdHJmcmVldihyZXNvbHZfY29uZl9uYW1lX3NlcnZlcnMpOworICAgIHJlc29sdl9jb25mX25hbWVfc2VydmVycyA9IE5VTEw7CisKKyAgICBhdmFoaV9zdHJmcmVldihyZXNvbHZfY29uZl9zZWFyY2hfZG9tYWlucyk7CisgICAgcmVzb2x2X2NvbmZfc2VhcmNoX2RvbWFpbnMgPSBOVUxMOworCisjaWZkZWYgRU5BQkxFX0NIUk9PVAorICAgIGYgPSBhdmFoaV9jaHJvb3RfaGVscGVyX2dldF9maWxlKFJFU09MVl9DT05GKTsKKyNlbHNlCisgICAgZiA9IGZvcGVuKFJFU09MVl9DT05GLCAiciIpOworI2VuZGlmCisKKyAgICBpZiAoIWYpIHsKKyAgICAgICAgYXZhaGlfbG9nX3dhcm4oIkZhaWxlZCB0byBvcGVuICJSRVNPTFZfQ09ORiI6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgZ290byBmaW5pc2g7CisgICAgfQorCisgICAgcmVzb2x2X2NvbmZfbmFtZV9zZXJ2ZXJzID0gYXZhaGlfbmV3MChjaGFyKiwgQVZBSElfV0lERV9BUkVBX1NFUlZFUlNfTUFYKzEpOworICAgIHJlc29sdl9jb25mX3NlYXJjaF9kb21haW5zID0gYXZhaGlfbmV3MChjaGFyKiwgQlJPV1NFX0RPTUFJTlNfTUFYKzEpOworCisgICAgd2hpbGUgKCFmZW9mKGYpKSB7CisgICAgICAgIGNoYXIgbG5bMTI4XTsKKyAgICAgICAgY2hhciAqcDsKKworICAgICAgICBpZiAoIShmZ2V0cyhsbiwgc2l6ZW9mKGxuKSwgZikpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgbG5bc3RyY3NwbihsbiwgIlxyXG4jIildID0gMDsKKyAgICAgICAgcCA9IGxuICsgc3Ryc3BuKGxuLCAiXHQgIik7CisKKyAgICAgICAgaWYgKChoYXNfcHJlZml4KHAsICJuYW1lc2VydmVyICIpIHx8IGhhc19wcmVmaXgocCwgIm5hbWVzZXJ2ZXJcdCIpKSAmJiBpIDwgQVZBSElfV0lERV9BUkVBX1NFUlZFUlNfTUFYKSB7CisgICAgICAgICAgICBwICs9IDEwOworICAgICAgICAgICAgcCArPSBzdHJzcG4ocCwgIlx0ICIpOworICAgICAgICAgICAgcFtzdHJjc3BuKHAsICJcdCAiKV0gPSAwOworICAgICAgICAgICAgcmVzb2x2X2NvbmZfbmFtZV9zZXJ2ZXJzW2krK10gPSBhdmFoaV9zdHJkdXAocCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKGhhc19wcmVmaXgocCwgInNlYXJjaCAiKSB8fCBoYXNfcHJlZml4KHAsICJzZWFyY2hcdCIpIHx8CisgICAgICAgICAgICAgaGFzX3ByZWZpeChwLCAiZG9tYWluICIpIHx8IGhhc19wcmVmaXgocCwgImRvbWFpblx0IikpKSB7CisKKyAgICAgICAgICAgIHAgKz0gNjsKKworICAgICAgICAgICAgd2hpbGUgKGogPCBCUk9XU0VfRE9NQUlOU19NQVgpIHsKKyAgICAgICAgICAgICAgICBzaXplX3QgazsKKworICAgICAgICAgICAgICAgIHAgKz0gc3Ryc3BuKHAsICJcdCAiKTsKKyAgICAgICAgICAgICAgICBrID0gc3RyY3NwbihwLCAiXHQgIik7CisKKyAgICAgICAgICAgICAgICBpZiAoayA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzb2x2X2NvbmZfc2VhcmNoX2RvbWFpbnNbaisrXSA9IGF2YWhpX3N0cm5kdXAocCwgayk7CisgICAgICAgICAgICAgICAgICAgIHAgKz0gazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoISpwKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldCA9IDA7CisKK2ZpbmlzaDoKKworICAgIGlmIChyZXQgIT0gMCkgeworICAgICAgICBhdmFoaV9zdHJmcmVldihyZXNvbHZfY29uZl9uYW1lX3NlcnZlcnMpOworICAgICAgICByZXNvbHZfY29uZl9uYW1lX3NlcnZlcnMgPSBOVUxMOworCisgICAgICAgIGF2YWhpX3N0cmZyZWV2KHJlc29sdl9jb25mX3NlYXJjaF9kb21haW5zKTsKKyAgICAgICAgcmVzb2x2X2NvbmZfc2VhcmNoX2RvbWFpbnMgPSBOVUxMOworICAgIH0KKworICAgIGlmIChmKQorICAgICAgICBmY2xvc2UoZik7CisKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgQXZhaGlTRW50cnlHcm91cCogYWRkX2Ruc19zZXJ2ZXJzKEF2YWhpU2VydmVyICpzLCBBdmFoaVNFbnRyeUdyb3VwKiBnLCBjaGFyICoqbCkgeworICAgIGNoYXIgKipwOworCisgICAgYXNzZXJ0KHMpOworICAgIGFzc2VydChsKTsKKworICAgIGlmICghZykKKyAgICAgICAgZyA9IGF2YWhpX3NfZW50cnlfZ3JvdXBfbmV3KHMsIE5VTEwsIE5VTEwpOworCisgICAgYXNzZXJ0KGF2YWhpX3NfZW50cnlfZ3JvdXBfaXNfZW1wdHkoZykpOworCisgICAgZm9yIChwID0gbDsgKnA7IHArKykgeworICAgICAgICBBdmFoaUFkZHJlc3MgYTsKKworICAgICAgICBpZiAoIWF2YWhpX2FkZHJlc3NfcGFyc2UoKnAsIEFWQUhJX1BST1RPX1VOU1BFQywgJmEpKQorICAgICAgICAgICAgYXZhaGlfbG9nX3dhcm4oIkZhaWxlZCB0byBwYXJzZSBhZGRyZXNzICclcycsIGlnbm9yaW5nLiIsICpwKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaWYgKGF2YWhpX3NlcnZlcl9hZGRfZG5zX3NlcnZlcl9hZGRyZXNzKHMsIGcsIEFWQUhJX0lGX1VOU1BFQywgQVZBSElfUFJPVE9fVU5TUEVDLCAwLCBOVUxMLCBBVkFISV9ETlNfU0VSVkVSX1JFU09MVkUsICZhLCA1MykgPCAwKSB7CisgICAgICAgICAgICAgICAgYXZhaGlfc19lbnRyeV9ncm91cF9mcmVlKGcpOworICAgICAgICAgICAgICAgIGF2YWhpX2xvZ19lcnJvcigiRmFpbGVkIHRvIGFkZCBETlMgc2VydmVyIGFkZHJlc3M6ICVzIiwgYXZhaGlfc3RyZXJyb3IoYXZhaGlfc2VydmVyX2Vycm5vKHMpKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgfQorCisgICAgYXZhaGlfc19lbnRyeV9ncm91cF9jb21taXQoZyk7CisKKyAgICByZXR1cm4gZzsKK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX2Ruc19zZXJ2ZXJfZW50cnlfZ3JvdXBzKHZvaWQpIHsKKworICAgIGlmIChyZXNvbHZfY29uZl9lbnRyeV9ncm91cCkKKyAgICAgICAgYXZhaGlfc19lbnRyeV9ncm91cF9yZXNldChyZXNvbHZfY29uZl9lbnRyeV9ncm91cCk7CisKKyAgICBpZiAoZG5zX3NlcnZlcnNfZW50cnlfZ3JvdXApCisgICAgICAgIGF2YWhpX3NfZW50cnlfZ3JvdXBfcmVzZXQoZG5zX3NlcnZlcnNfZW50cnlfZ3JvdXApOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfd2lkZV9hcmVhX3NlcnZlcnModm9pZCkgeworICAgIEF2YWhpQWRkcmVzcyBhW0FWQUhJX1dJREVfQVJFQV9TRVJWRVJTX01BWF07CisgICAgdW5zaWduZWQgbiA9IDA7CisgICAgY2hhciAqKnA7CisKKyAgICBpZiAoIXJlc29sdl9jb25mX25hbWVfc2VydmVycykgeworICAgICAgICBhdmFoaV9zZXJ2ZXJfc2V0X3dpZGVfYXJlYV9zZXJ2ZXJzKGF2YWhpX3NlcnZlciwgTlVMTCwgMCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmb3IgKHAgPSByZXNvbHZfY29uZl9uYW1lX3NlcnZlcnM7ICpwICYmIG4gPCBBVkFISV9XSURFX0FSRUFfU0VSVkVSU19NQVg7IHArKykgeworICAgICAgICBpZiAoIWF2YWhpX2FkZHJlc3NfcGFyc2UoKnAsIEFWQUhJX1BST1RPX1VOU1BFQywgJmFbbl0pKQorICAgICAgICAgICAgYXZhaGlfbG9nX3dhcm4oIkZhaWxlZCB0byBwYXJzZSBhZGRyZXNzICclcycsIGlnbm9yaW5nLiIsICpwKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbisrOworICAgIH0KKworICAgIGF2YWhpX3NlcnZlcl9zZXRfd2lkZV9hcmVhX3NlcnZlcnMoYXZhaGlfc2VydmVyLCBhLCBuKTsKK30KKworc3RhdGljIEF2YWhpU3RyaW5nTGlzdCAqZmlsdGVyX2R1cGxpY2F0ZV9kb21haW5zKEF2YWhpU3RyaW5nTGlzdCAqbCkgeworICAgIEF2YWhpU3RyaW5nTGlzdCAqZSwgKm4sICpwOworCisgICAgaWYgKCFsKQorICAgICAgICByZXR1cm4gbDsKKworICAgIGZvciAocCA9IGwsIGUgPSBsLT5uZXh0OyBlOyBlID0gbikgeworICAgICAgICBuID0gZS0+bmV4dDsKKworICAgICAgICBpZiAoYXZhaGlfZG9tYWluX2VxdWFsKChjaGFyKikgZS0+dGV4dCwgKGNoYXIqKSBsLT50ZXh0KSkgeworICAgICAgICAgICAgcC0+bmV4dCA9IGUtPm5leHQ7CisgICAgICAgICAgICBhdmFoaV9mcmVlKGUpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHAgPSBlOworICAgIH0KKworICAgIGwtPm5leHQgPSBmaWx0ZXJfZHVwbGljYXRlX2RvbWFpbnMobC0+bmV4dCk7CisgICAgcmV0dXJuIGw7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9icm93c2VfZG9tYWlucyh2b2lkKSB7CisgICAgQXZhaGlTdHJpbmdMaXN0ICpsOworICAgIGludCBuOworICAgIGNoYXIgKipwOworCisgICAgaWYgKCFyZXNvbHZfY29uZl9zZWFyY2hfZG9tYWlucykgeworICAgICAgICBhdmFoaV9zZXJ2ZXJfc2V0X2Jyb3dzZV9kb21haW5zKGF2YWhpX3NlcnZlciwgTlVMTCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBsID0gYXZhaGlfc3RyaW5nX2xpc3RfY29weShjb25maWcuc2VydmVyX2NvbmZpZy5icm93c2VfZG9tYWlucyk7CisKKyAgICBmb3IgKHAgPSByZXNvbHZfY29uZl9zZWFyY2hfZG9tYWlucywgbiA9IDA7ICpwICYmIG4gPCBCUk9XU0VfRE9NQUlOU19NQVg7IHArKywgbisrKSB7CisgICAgICAgIGlmICghYXZhaGlfaXNfdmFsaWRfZG9tYWluX25hbWUoKnApKQorICAgICAgICAgICAgYXZhaGlfbG9nX3dhcm4oIiclcycgaXMgbm8gdmFsaWQgZG9tYWluIG5hbWUsIGlnbm9yaW5nLiIsICpwKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbCA9IGF2YWhpX3N0cmluZ19saXN0X2FkZChsLCAqcCk7CisgICAgfQorCisgICAgbCA9IGZpbHRlcl9kdXBsaWNhdGVfZG9tYWlucyhsKTsKKworICAgIGF2YWhpX3NlcnZlcl9zZXRfYnJvd3NlX2RvbWFpbnMoYXZhaGlfc2VydmVyLCBsKTsKKyAgICBhdmFoaV9zdHJpbmdfbGlzdF9mcmVlKGwpOworfQorCitzdGF0aWMgdm9pZCBzZXJ2ZXJfY2FsbGJhY2soQXZhaGlTZXJ2ZXIgKnMsIEF2YWhpU2VydmVyU3RhdGUgc3RhdGUsIHZvaWQgKnVzZXJkYXRhKSB7CisgICAgRGFlbW9uQ29uZmlnICpjID0gdXNlcmRhdGE7CisKKyAgICBhc3NlcnQocyk7CisgICAgYXNzZXJ0KGMpOworCisgICAgLyogVGhpcyBmdW5jdGlvbiBpcyBwb3NzaWJseSBjYWxsZWQgYmVmb3JlIHRoZSBnbG9iYWwgdmFyaWFibGUKKyAgICAgKiBhdmFoaV9zZXJ2ZXIgaGFzIGJlZW4gc2V0LCB0aGVyZWZvcmUgd2UgZG8gaXQgZXhwbGljaXRseSAqLworCisgICAgYXZhaGlfc2VydmVyID0gczsKKworI2lmZGVmIEhBVkVfREJVUworICAgIGlmIChjLT5lbmFibGVfZGJ1cyAmJiBzdGF0ZSAhPSBBVkFISV9TRVJWRVJfSU5WQUxJRCAmJiBzdGF0ZSAhPSBBVkFISV9TRVJWRVJfRkFJTFVSRSkKKyAgICAgICAgZGJ1c19wcm90b2NvbF9zZXJ2ZXJfc3RhdGVfY2hhbmdlZChzdGF0ZSk7CisjZW5kaWYKKworICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICAgICAgY2FzZSBBVkFISV9TRVJWRVJfUlVOTklORzoKKyAgICAgICAgICAgIGF2YWhpX2xvZ19pbmZvKCJTZXJ2ZXIgc3RhcnR1cCBjb21wbGV0ZS4gSG9zdCBuYW1lIGlzICVzLiBMb2NhbCBzZXJ2aWNlIGNvb2tpZSBpcyAldS4iLCBhdmFoaV9zZXJ2ZXJfZ2V0X2hvc3RfbmFtZV9mcWRuKHMpLCBhdmFoaV9zZXJ2ZXJfZ2V0X2xvY2FsX3NlcnZpY2VfY29va2llKHMpKTsKKyAgICAgICAgICAgIHNkX25vdGlmeWYoMCwgIlNUQVRVUz1TZXJ2ZXIgc3RhcnR1cCBjb21wbGV0ZS4gSG9zdCBuYW1lIGlzICVzLiBMb2NhbCBzZXJ2aWNlIGNvb2tpZSBpcyAldS4iLCBhdmFoaV9zZXJ2ZXJfZ2V0X2hvc3RfbmFtZV9mcWRuKHMpLCBhdmFoaV9zZXJ2ZXJfZ2V0X2xvY2FsX3NlcnZpY2VfY29va2llKHMpKTsKKyAgICAgICAgICAgIGF2YWhpX3NldF9wcm9jX3RpdGxlKGFyZ3YwLCAiJXM6IHJ1bm5pbmcgWyVzXSIsIGFyZ3YwLCBhdmFoaV9zZXJ2ZXJfZ2V0X2hvc3RfbmFtZV9mcWRuKHMpKTsKKworICAgICAgICAgICAgc3RhdGljX3NlcnZpY2VfYWRkX3RvX3NlcnZlcigpOworICAgICAgICAgICAgc3RhdGljX2hvc3RzX2FkZF90b19zZXJ2ZXIoKTsKKworICAgICAgICAgICAgcmVtb3ZlX2Ruc19zZXJ2ZXJfZW50cnlfZ3JvdXBzKCk7CisKKyAgICAgICAgICAgIGlmIChjLT5wdWJsaXNoX3Jlc29sdl9jb25mICYmIHJlc29sdl9jb25mX25hbWVfc2VydmVycyAmJiByZXNvbHZfY29uZl9uYW1lX3NlcnZlcnNbMF0pCisgICAgICAgICAgICAgICAgcmVzb2x2X2NvbmZfZW50cnlfZ3JvdXAgPSBhZGRfZG5zX3NlcnZlcnMocywgcmVzb2x2X2NvbmZfZW50cnlfZ3JvdXAsIHJlc29sdl9jb25mX25hbWVfc2VydmVycyk7CisKKyAgICAgICAgICAgIGlmIChjLT5wdWJsaXNoX2Ruc19zZXJ2ZXJzICYmIGMtPnB1Ymxpc2hfZG5zX3NlcnZlcnNbMF0pCisgICAgICAgICAgICAgICAgZG5zX3NlcnZlcnNfZW50cnlfZ3JvdXAgPSBhZGRfZG5zX3NlcnZlcnMocywgZG5zX3NlcnZlcnNfZW50cnlfZ3JvdXAsIGMtPnB1Ymxpc2hfZG5zX3NlcnZlcnMpOworCisgICAgICAgICAgICBzaW1wbGVfcHJvdG9jb2xfcmVzdGFydF9xdWVyaWVzKCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFWQUhJX1NFUlZFUl9DT0xMSVNJT046IHsKKyAgICAgICAgICAgIGNoYXIgKm47CisKKyAgICAgICAgICAgIHN0YXRpY19zZXJ2aWNlX3JlbW92ZV9mcm9tX3NlcnZlcigpOworICAgICAgICAgICAgc3RhdGljX2hvc3RzX3JlbW92ZV9mcm9tX3NlcnZlcigpOworICAgICAgICAgICAgcmVtb3ZlX2Ruc19zZXJ2ZXJfZW50cnlfZ3JvdXBzKCk7CisKKyAgICAgICAgICAgIG4gPSBhdmFoaV9hbHRlcm5hdGl2ZV9ob3N0X25hbWUoYXZhaGlfc2VydmVyX2dldF9ob3N0X25hbWUocykpOworCisgICAgICAgICAgICBhdmFoaV9sb2dfd2FybigiSG9zdCBuYW1lIGNvbmZsaWN0LCByZXRyeWluZyB3aXRoICVzIiwgbik7CisgICAgICAgICAgICBzZF9ub3RpZnlmKDAsICJTVEFUVVM9SG9zdCBuYW1lIGNvbmZsaWN0LCByZXRyeWluZyB3aXRoICVzIiwgbik7CisgICAgICAgICAgICBhdmFoaV9zZXRfcHJvY190aXRsZShhcmd2MCwgIiVzOiBjb2xsaXNpb24gWyVzXSIsIGFyZ3YwLCBuKTsKKworICAgICAgICAgICAgYXZhaGlfc2VydmVyX3NldF9ob3N0X25hbWUocywgbik7CisgICAgICAgICAgICBhdmFoaV9mcmVlKG4pOworCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgQVZBSElfU0VSVkVSX0ZBSUxVUkU6CisKKyAgICAgICAgICAgIGF2YWhpX2xvZ19lcnJvcigiU2VydmVyIGVycm9yOiAlcyIsIGF2YWhpX3N0cmVycm9yKGF2YWhpX3NlcnZlcl9lcnJubyhzKSkpOworICAgICAgICAgICAgc2Rfbm90aWZ5ZigwLCAiU1RBVFVTPVNlcnZlciBlcnJvcjogJXMiLCBhdmFoaV9zdHJlcnJvcihhdmFoaV9zZXJ2ZXJfZXJybm8ocykpKTsKKworICAgICAgICAgICAgYXZhaGlfc2ltcGxlX3BvbGxfcXVpdChzaW1wbGVfcG9sbF9hcGkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBVkFISV9TRVJWRVJfUkVHSVNURVJJTkc6CisKKyAgICAgICAgICAgIHNkX25vdGlmeWYoMCwgIlNUQVRVUz1SZWdpc3RlcmluZyBob3N0IG5hbWUgJXMiLCBhdmFoaV9zZXJ2ZXJfZ2V0X2hvc3RfbmFtZV9mcWRuKHMpKTsKKyAgICAgICAgICAgIGF2YWhpX3NldF9wcm9jX3RpdGxlKGFyZ3YwLCAiJXM6IHJlZ2lzdGVyaW5nIFslc10iLCBhcmd2MCwgYXZhaGlfc2VydmVyX2dldF9ob3N0X25hbWVfZnFkbihzKSk7CisKKyAgICAgICAgICAgIHN0YXRpY19zZXJ2aWNlX3JlbW92ZV9mcm9tX3NlcnZlcigpOworICAgICAgICAgICAgc3RhdGljX2hvc3RzX3JlbW92ZV9mcm9tX3NlcnZlcigpOworICAgICAgICAgICAgcmVtb3ZlX2Ruc19zZXJ2ZXJfZW50cnlfZ3JvdXBzKCk7CisKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQVZBSElfU0VSVkVSX0lOVkFMSUQ6CisgICAgICAgICAgICBicmVhazsKKworICAgIH0KK30KKworc3RhdGljIHZvaWQgaGVscChGSUxFICpmKSB7CisgICAgZnByaW50ZihmLAorICAgICAgICAgICAgIiVzIFtvcHRpb25zXVxuIgorICAgICAgICAgICAgIiAgICAtaCAtLWhlbHAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyAgICAgICAgICAgICIgICAgLUQgLS1kYWVtb25pemUgICAgIERhZW1vbml6ZSBhZnRlciBzdGFydHVwIChpbXBsaWVzIC1zKVxuIgorICAgICAgICAgICAgIiAgICAtcyAtLXN5c2xvZyAgICAgICAgV3JpdGUgbG9nIG1lc3NhZ2VzIHRvIHN5c2xvZygzKSBpbnN0ZWFkIG9mIFNUREVSUlxuIgorICAgICAgICAgICAgIiAgICAtayAtLWtpbGwgICAgICAgICAgS2lsbCBhIHJ1bm5pbmcgZGFlbW9uXG4iCisgICAgICAgICAgICAiICAgIC1yIC0tcmVsb2FkICAgICAgICBSZXF1ZXN0IGEgcnVubmluZyBkYWVtb24gdG8gcmVsb2FkIHN0YXRpYyBzZXJ2aWNlc1xuIgorICAgICAgICAgICAgIiAgICAtYyAtLWNoZWNrICAgICAgICAgUmV0dXJuIDAgaWYgYSBkYWVtb24gaXMgYWxyZWFkeSBydW5uaW5nXG4iCisgICAgICAgICAgICAiICAgIC1WIC0tdmVyc2lvbiAgICAgICBTaG93IHZlcnNpb25cbiIKKyAgICAgICAgICAgICIgICAgLWYgLS1maWxlPUZJTEUgICAgIExvYWQgdGhlIHNwZWNpZmllZCBjb25maWd1cmF0aW9uIGZpbGUgaW5zdGVhZCBvZlxuIgorICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgIkFWQUhJX0NPTkZJR19GSUxFIlxuIgorICAgICAgICAgICAgIiAgICAgICAtLW5vLXJsaW1pdHMgICAgRG9uJ3QgZW5mb3JjZSByZXNvdXJjZSBsaW1pdHNcbiIKKyAgICAgICAgICAgICIgICAgICAgLS1uby1kcm9wLXJvb3QgIERvbid0IGRyb3AgcHJpdmlsZWdlc1xuIgorI2lmZGVmIEVOQUJMRV9DSFJPT1QKKyAgICAgICAgICAgICIgICAgICAgLS1uby1jaHJvb3QgICAgIERvbid0IGNocm9vdCgpXG4iCisjZW5kaWYKKyAgICAgICAgICAgICIgICAgICAgLS1uby1wcm9jLXRpdGxlIERvbid0IG1vZGlmeSBwcm9jZXNzIHRpdGxlXG4iCisgICAgICAgICAgICAiICAgICAgIC0tZGVidWcgICAgICAgICBJbmNyZWFzZSB2ZXJib3NpdHlcbiIsCisgICAgICAgICAgICBhcmd2MCk7Cit9CisKKworc3RhdGljIGludCBwYXJzZV9jb21tYW5kX2xpbmUoRGFlbW9uQ29uZmlnICpjLCBpbnQgYXJnYywgY2hhciAqYXJndltdKSB7CisgICAgaW50IG87CisKKyAgICBlbnVtIHsKKyAgICAgICAgT1BUSU9OX05PX1JMSU1JVFMgPSAyNTYsCisgICAgICAgIE9QVElPTl9OT19EUk9QX1JPT1QsCisjaWZkZWYgRU5BQkxFX0NIUk9PVAorICAgICAgICBPUFRJT05fTk9fQ0hST09ULAorI2VuZGlmCisgICAgICAgIE9QVElPTl9OT19QUk9DX1RJVExFLAorICAgICAgICBPUFRJT05fREVCVUcKKyAgICB9OworCisgICAgc3RhdGljIGNvbnN0IHN0cnVjdCBvcHRpb24gbG9uZ19vcHRpb25zW10gPSB7CisgICAgICAgIHsgImhlbHAiLCAgICAgICAgICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsICdoJyB9LAorICAgICAgICB7ICJkYWVtb25pemUiLCAgICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCAnRCcgfSwKKyAgICAgICAgeyAia2lsbCIsICAgICAgICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgJ2snIH0sCisgICAgICAgIHsgInZlcnNpb24iLCAgICAgICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsICdWJyB9LAorICAgICAgICB7ICJmaWxlIiwgICAgICAgICAgIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnZicgfSwKKyAgICAgICAgeyAicmVsb2FkIiwgICAgICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgJ3InIH0sCisgICAgICAgIHsgImNoZWNrIiwgICAgICAgICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsICdjJyB9LAorICAgICAgICB7ICJzeXNsb2ciLCAgICAgICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCAncycgfSwKKyAgICAgICAgeyAibm8tcmxpbWl0cyIsICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgT1BUSU9OX05PX1JMSU1JVFMgfSwKKyAgICAgICAgeyAibm8tZHJvcC1yb290IiwgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgT1BUSU9OX05PX0RST1BfUk9PVCB9LAorI2lmZGVmIEVOQUJMRV9DSFJPT1QKKyAgICAgICAgeyAibm8tY2hyb290IiwgICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgT1BUSU9OX05PX0NIUk9PVCB9LAorI2VuZGlmCisgICAgICAgIHsgIm5vLXByb2MtdGl0bGUiLCAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsIE9QVElPTl9OT19QUk9DX1RJVExFIH0sCisgICAgICAgIHsgImRlYnVnIiwgICAgICAgICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsIE9QVElPTl9ERUJVRyB9LAorICAgICAgICB7IE5VTEwsIDAsIE5VTEwsIDAgfQorICAgIH07CisKKyAgICBhc3NlcnQoYyk7CisKKyAgICB3aGlsZSAoKG8gPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiaERrVmY6cmNzIiwgbG9uZ19vcHRpb25zLCBOVUxMKSkgPj0gMCkgeworCisgICAgICAgIHN3aXRjaChvKSB7CisgICAgICAgICAgICBjYXNlICdzJzoKKyAgICAgICAgICAgICAgICBjLT51c2Vfc3lzbG9nID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ2gnOgorICAgICAgICAgICAgICAgIGMtPmNvbW1hbmQgPSBEQUVNT05fSEVMUDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ0QnOgorICAgICAgICAgICAgICAgIGMtPmRhZW1vbml6ZSA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdrJzoKKyAgICAgICAgICAgICAgICBjLT5jb21tYW5kID0gREFFTU9OX0tJTEw7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdWJzoKKyAgICAgICAgICAgICAgICBjLT5jb21tYW5kID0gREFFTU9OX1ZFUlNJT047CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdmJzoKKyAgICAgICAgICAgICAgICBhdmFoaV9mcmVlKGMtPmNvbmZpZ19maWxlKTsKKyAgICAgICAgICAgICAgICBjLT5jb25maWdfZmlsZSA9IGF2YWhpX3N0cmR1cChvcHRhcmcpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAncic6CisgICAgICAgICAgICAgICAgYy0+Y29tbWFuZCA9IERBRU1PTl9SRUxPQUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdjJzoKKyAgICAgICAgICAgICAgICBjLT5jb21tYW5kID0gREFFTU9OX0NIRUNLOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBPUFRJT05fTk9fUkxJTUlUUzoKKyAgICAgICAgICAgICAgICBjLT5zZXRfcmxpbWl0cyA9IDA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIE9QVElPTl9OT19EUk9QX1JPT1Q6CisgICAgICAgICAgICAgICAgYy0+ZHJvcF9yb290ID0gMDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyNpZmRlZiBFTkFCTEVfQ0hST09UCisgICAgICAgICAgICBjYXNlIE9QVElPTl9OT19DSFJPT1Q6CisgICAgICAgICAgICAgICAgYy0+dXNlX2Nocm9vdCA9IDA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICAgICAgICAgIGNhc2UgT1BUSU9OX05PX1BST0NfVElUTEU6CisgICAgICAgICAgICAgICAgYy0+bW9kaWZ5X3Byb2NfdGl0bGUgPSAwOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBPUFRJT05fREVCVUc6CisgICAgICAgICAgICAgICAgYy0+ZGVidWcgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAob3B0aW5kIDwgYXJnYykgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlRvbyBtYW55IGFyZ3VtZW50c1xuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpc195ZXMoY29uc3QgY2hhciAqcykgeworICAgIGFzc2VydChzKTsKKworICAgIHJldHVybiAqcyA9PSAneScgfHwgKnMgPT0gJ1knIHx8ICpzID09ICcxJyB8fCAqcyA9PSAndCcgfHwgKnMgPT0gJ1QnOworfQorCitzdGF0aWMgaW50IHBhcnNlX3Vuc2lnbmVkKGNvbnN0IGNoYXIgKnMsIHVuc2lnbmVkICp1KSB7CisgICAgY2hhciAqZSA9IE5VTEw7CisgICAgdW5zaWduZWQgbG9uZyB1bDsKKyAgICB1bnNpZ25lZCBrOworCisgICAgZXJybm8gPSAwOworICAgIHVsID0gc3RydG91bChzLCAmZSwgMCk7CisKKyAgICBpZiAoIWUgfHwgKmUgfHwgZXJybm8gIT0gMCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgayA9ICh1bnNpZ25lZCkgdWw7CisKKyAgICBpZiAoKHVuc2lnbmVkIGxvbmcpIGsgIT0gdWwpCisgICAgICAgIHJldHVybiAtMTsKKworICAgICp1ID0gazsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYXJzZV91c2VjKGNvbnN0IGNoYXIgKnMsIEF2YWhpVXNlYyAqdSkgeworICAgIGNoYXIgKmUgPSBOVUxMOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB1bGw7CisgICAgQXZhaGlVc2VjIGs7CisKKyAgICBlcnJubyA9IDA7CisgICAgdWxsID0gc3RydG91bGwocywgJmUsIDApOworCisgICAgaWYgKCFlIHx8ICplIHx8IGVycm5vICE9IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGsgPSAoQXZhaGlVc2VjKSB1bGw7CisKKyAgICBpZiAoKHVuc2lnbmVkIGxvbmcgbG9uZykgayAhPSB1bGwpCisgICAgICAgIHJldHVybiAtMTsKKworICAgICp1ID0gazsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsb2FkX2NvbmZpZ19maWxlKERhZW1vbkNvbmZpZyAqYykgeworICAgIGludCByID0gLTE7CisgICAgQXZhaGlJbmlGaWxlICpmOworICAgIEF2YWhpSW5pRmlsZUdyb3VwICpnOworCisgICAgYXNzZXJ0KGMpOworCisgICAgaWYgKCEoZiA9IGF2YWhpX2luaV9maWxlX2xvYWQoYy0+Y29uZmlnX2ZpbGUgPyBjLT5jb25maWdfZmlsZSA6IEFWQUhJX0NPTkZJR19GSUxFKSkpCisgICAgICAgIGdvdG8gZmluaXNoOworCisgICAgZm9yIChnID0gZi0+Z3JvdXBzOyBnOyBnID0gZy0+Z3JvdXBzX25leHQpIHsKKworICAgICAgICBpZiAoc3RyY2FzZWNtcChnLT5uYW1lLCAic2VydmVyIikgPT0gMCkgeworICAgICAgICAgICAgQXZhaGlJbmlGaWxlUGFpciAqcDsKKworICAgICAgICAgICAgZm9yIChwID0gZy0+cGFpcnM7IHA7IHAgPSBwLT5wYWlyc19uZXh0KSB7CisKKyAgICAgICAgICAgICAgICBpZiAoc3RyY2FzZWNtcChwLT5rZXksICJob3N0LW5hbWUiKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGF2YWhpX2ZyZWUoYy0+c2VydmVyX2NvbmZpZy5ob3N0X25hbWUpOworICAgICAgICAgICAgICAgICAgICBjLT5zZXJ2ZXJfY29uZmlnLmhvc3RfbmFtZSA9IGF2YWhpX3N0cmR1cChwLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjYXNlY21wKHAtPmtleSwgImRvbWFpbi1uYW1lIikgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBhdmFoaV9mcmVlKGMtPnNlcnZlcl9jb25maWcuZG9tYWluX25hbWUpOworICAgICAgICAgICAgICAgICAgICBjLT5zZXJ2ZXJfY29uZmlnLmRvbWFpbl9uYW1lID0gYXZhaGlfc3RyZHVwKHAtPnZhbHVlKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmNhc2VjbXAocC0+a2V5LCAiYnJvd3NlLWRvbWFpbnMiKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGNoYXIgKiplLCAqKnQ7CisKKyAgICAgICAgICAgICAgICAgICAgZSA9IGF2YWhpX3NwbGl0X2NzdihwLT52YWx1ZSk7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yICh0ID0gZTsgKnQ7IHQrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBjbGVhbmVkW0FWQUhJX0RPTUFJTl9OQU1FX01BWF07CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXZhaGlfbm9ybWFsaXplX25hbWUoKnQsIGNsZWFuZWQsIHNpemVvZihjbGVhbmVkKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFoaV9sb2dfZXJyb3IoIkludmFsaWQgZG9tYWluIG5hbWUgXCIlc1wiIGZvciBrZXkgXCIlc1wiIGluIGdyb3VwIFwiJXNcIlxuIiwgKnQsIHAtPmtleSwgZy0+bmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaGlfc3RyZnJlZXYoZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmaW5pc2g7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGMtPnNlcnZlcl9jb25maWcuYnJvd3NlX2RvbWFpbnMgPSBhdmFoaV9zdHJpbmdfbGlzdF9hZGQoYy0+c2VydmVyX2NvbmZpZy5icm93c2VfZG9tYWlucywgY2xlYW5lZCk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBhdmFoaV9zdHJmcmVldihlKTsKKworICAgICAgICAgICAgICAgICAgICBjLT5zZXJ2ZXJfY29uZmlnLmJyb3dzZV9kb21haW5zID0gZmlsdGVyX2R1cGxpY2F0ZV9kb21haW5zKGMtPnNlcnZlcl9jb25maWcuYnJvd3NlX2RvbWFpbnMpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY2FzZWNtcChwLT5rZXksICJ1c2UtaXB2NCIpID09IDApCisgICAgICAgICAgICAgICAgICAgIGMtPnNlcnZlcl9jb25maWcudXNlX2lwdjQgPSBpc195ZXMocC0+dmFsdWUpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAocC0+a2V5LCAidXNlLWlwdjYiKSA9PSAwKQorICAgICAgICAgICAgICAgICAgICBjLT5zZXJ2ZXJfY29uZmlnLnVzZV9pcHY2ID0gaXNfeWVzKHAtPnZhbHVlKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChzdHJjYXNlY21wKHAtPmtleSwgImNoZWNrLXJlc3BvbnNlLXR0bCIpID09IDApCisgICAgICAgICAgICAgICAgICAgIGMtPnNlcnZlcl9jb25maWcuY2hlY2tfcmVzcG9uc2VfdHRsID0gaXNfeWVzKHAtPnZhbHVlKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChzdHJjYXNlY21wKHAtPmtleSwgImFsbG93LXBvaW50LXRvLXBvaW50IikgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgYy0+c2VydmVyX2NvbmZpZy5hbGxvd19wb2ludF90b19wb2ludCA9IGlzX3llcyhwLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3RyY2FzZWNtcChwLT5rZXksICJ1c2UtaWZmLXJ1bm5pbmciKSA9PSAwKQorICAgICAgICAgICAgICAgICAgICBjLT5zZXJ2ZXJfY29uZmlnLnVzZV9pZmZfcnVubmluZyA9IGlzX3llcyhwLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3RyY2FzZWNtcChwLT5rZXksICJkaXNhbGxvdy1vdGhlci1zdGFja3MiKSA9PSAwKQorICAgICAgICAgICAgICAgICAgICBjLT5zZXJ2ZXJfY29uZmlnLmRpc2FsbG93X290aGVyX3N0YWNrcyA9IGlzX3llcyhwLT52YWx1ZSk7CisjaWZkZWYgSEFWRV9EQlVTCisgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3RyY2FzZWNtcChwLT5rZXksICJlbmFibGUtZGJ1cyIpID09IDApIHsKKworICAgICAgICAgICAgICAgICAgICBpZiAoKihwLT52YWx1ZSkgPT0gJ3cnIHx8ICoocC0+dmFsdWUpID09ICdXJykgeworICAgICAgICAgICAgICAgICAgICAgICAgYy0+ZmFpbF9vbl9taXNzaW5nX2RidXMgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgYy0+ZW5hYmxlX2RidXMgPSAxOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCoocC0+dmFsdWUpID09ICd5JyB8fCAqKHAtPnZhbHVlKSA9PSAnWScpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGMtPmZhaWxfb25fbWlzc2luZ19kYnVzID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGMtPmVuYWJsZV9kYnVzID0gMTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGMtPmVuYWJsZV9kYnVzID0gMDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAocC0+a2V5LCAiYWxsb3ctaW50ZXJmYWNlcyIpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgY2hhciAqKmUsICoqdDsKKworICAgICAgICAgICAgICAgICAgICBhdmFoaV9zdHJpbmdfbGlzdF9mcmVlKGMtPnNlcnZlcl9jb25maWcuYWxsb3dfaW50ZXJmYWNlcyk7CisgICAgICAgICAgICAgICAgICAgIGMtPnNlcnZlcl9jb25maWcuYWxsb3dfaW50ZXJmYWNlcyA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgIGUgPSBhdmFoaV9zcGxpdF9jc3YocC0+dmFsdWUpOworCisgICAgICAgICAgICAgICAgICAgIGZvciAodCA9IGU7ICp0OyB0KyspCisgICAgICAgICAgICAgICAgICAgICAgICBjLT5zZXJ2ZXJfY29uZmlnLmFsbG93X2ludGVyZmFjZXMgPSBhdmFoaV9zdHJpbmdfbGlzdF9hZGQoYy0+c2VydmVyX2NvbmZpZy5hbGxvd19pbnRlcmZhY2VzLCAqdCk7CisKKyAgICAgICAgICAgICAgICAgICAgYXZhaGlfc3RyZnJlZXYoZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjYXNlY21wKHAtPmtleSwgImRlbnktaW50ZXJmYWNlcyIpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgY2hhciAqKmUsICoqdDsKKworICAgICAgICAgICAgICAgICAgICBhdmFoaV9zdHJpbmdfbGlzdF9mcmVlKGMtPnNlcnZlcl9jb25maWcuZGVueV9pbnRlcmZhY2VzKTsKKyAgICAgICAgICAgICAgICAgICAgYy0+c2VydmVyX2NvbmZpZy5kZW55X2ludGVyZmFjZXMgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICBlID0gYXZhaGlfc3BsaXRfY3N2KHAtPnZhbHVlKTsKKworICAgICAgICAgICAgICAgICAgICBmb3IgKHQgPSBlOyAqdDsgdCsrKQorICAgICAgICAgICAgICAgICAgICAgICAgYy0+c2VydmVyX2NvbmZpZy5kZW55X2ludGVyZmFjZXMgPSBhdmFoaV9zdHJpbmdfbGlzdF9hZGQoYy0+c2VydmVyX2NvbmZpZy5kZW55X2ludGVyZmFjZXMsICp0KTsKKworICAgICAgICAgICAgICAgICAgICBhdmFoaV9zdHJmcmVldihlKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmNhc2VjbXAocC0+a2V5LCAicmF0ZWxpbWl0LWludGVydmFsLXVzZWMiKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIEF2YWhpVXNlYyBrOworCisgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZV91c2VjKHAtPnZhbHVlLCAmaykgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdmFoaV9sb2dfZXJyb3IoIkludmFsaWQgcmF0ZWxpbWl0LWludGVydmFsLXVzZWMgc2V0dGluZyAlcyIsIHAtPnZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmluaXNoOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgYy0+c2VydmVyX2NvbmZpZy5yYXRlbGltaXRfaW50ZXJ2YWwgPSBrOworCisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjYXNlY21wKHAtPmtleSwgInJhdGVsaW1pdC1idXJzdCIpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgazsKKworICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VfdW5zaWduZWQocC0+dmFsdWUsICZrKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF2YWhpX2xvZ19lcnJvcigiSW52YWxpZCByYXRlbGltaXQtYnVyc3Qgc2V0dGluZyAlcyIsIHAtPnZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmluaXNoOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgYy0+c2VydmVyX2NvbmZpZy5yYXRlbGltaXRfYnVyc3QgPSBrOworCisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjYXNlY21wKHAtPmtleSwgImNhY2hlLWVudHJpZXMtbWF4IikgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBrOworCisgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZV91bnNpZ25lZChwLT52YWx1ZSwgJmspIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgYXZhaGlfbG9nX2Vycm9yKCJJbnZhbGlkIGNhY2hlLWVudHJpZXMtbWF4IHNldHRpbmcgJXMiLCBwLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZpbmlzaDsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGMtPnNlcnZlcl9jb25maWcubl9jYWNoZV9lbnRyaWVzX21heCA9IGs7CisjaWZkZWYgSEFWRV9EQlVTCisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjYXNlY21wKHAtPmtleSwgImNsaWVudHMtbWF4IikgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBrOworCisgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZV91bnNpZ25lZChwLT52YWx1ZSwgJmspIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgYXZhaGlfbG9nX2Vycm9yKCJJbnZhbGlkIGNsaWVudHMtbWF4IHNldHRpbmcgJXMiLCBwLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZpbmlzaDsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGMtPm5fY2xpZW50c19tYXggPSBrOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY2FzZWNtcChwLT5rZXksICJvYmplY3RzLXBlci1jbGllbnQtbWF4IikgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBrOworCisgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZV91bnNpZ25lZChwLT52YWx1ZSwgJmspIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgYXZhaGlfbG9nX2Vycm9yKCJJbnZhbGlkIG9iamVjdHMtcGVyLWNsaWVudC1tYXggc2V0dGluZyAlcyIsIHAtPnZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmluaXNoOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgYy0+bl9vYmplY3RzX3Blcl9jbGllbnRfbWF4ID0gazsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmNhc2VjbXAocC0+a2V5LCAiZW50cmllcy1wZXItZW50cnktZ3JvdXAtbWF4IikgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBrOworCisgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZV91bnNpZ25lZChwLT52YWx1ZSwgJmspIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgYXZhaGlfbG9nX2Vycm9yKCJJbnZhbGlkIGVudHJpZXMtcGVyLWVudHJ5LWdyb3VwLW1heCBzZXR0aW5nICVzIiwgcC0+dmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmaW5pc2g7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBjLT5uX2VudHJpZXNfcGVyX2VudHJ5X2dyb3VwX21heCA9IGs7CisjZW5kaWYKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBhdmFoaV9sb2dfZXJyb3IoIkludmFsaWQgY29uZmlndXJhdGlvbiBrZXkgXCIlc1wiIGluIGdyb3VwIFwiJXNcIlxuIiwgcC0+a2V5LCBnLT5uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBmaW5pc2g7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgIH0gZWxzZSBpZiAoc3RyY2FzZWNtcChnLT5uYW1lLCAicHVibGlzaCIpID09IDApIHsKKyAgICAgICAgICAgIEF2YWhpSW5pRmlsZVBhaXIgKnA7CisKKyAgICAgICAgICAgIGZvciAocCA9IGctPnBhaXJzOyBwOyBwID0gcC0+cGFpcnNfbmV4dCkgeworCisgICAgICAgICAgICAgICAgaWYgKHN0cmNhc2VjbXAocC0+a2V5LCAicHVibGlzaC1hZGRyZXNzZXMiKSA9PSAwKQorICAgICAgICAgICAgICAgICAgICBjLT5zZXJ2ZXJfY29uZmlnLnB1Ymxpc2hfYWRkcmVzc2VzID0gaXNfeWVzKHAtPnZhbHVlKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChzdHJjYXNlY21wKHAtPmtleSwgInB1Ymxpc2gtaGluZm8iKSA9PSAwKQorICAgICAgICAgICAgICAgICAgICBjLT5zZXJ2ZXJfY29uZmlnLnB1Ymxpc2hfaGluZm8gPSBpc195ZXMocC0+dmFsdWUpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAocC0+a2V5LCAicHVibGlzaC13b3Jrc3RhdGlvbiIpID09IDApCisgICAgICAgICAgICAgICAgICAgIGMtPnNlcnZlcl9jb25maWcucHVibGlzaF93b3Jrc3RhdGlvbiA9IGlzX3llcyhwLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3RyY2FzZWNtcChwLT5rZXksICJwdWJsaXNoLWRvbWFpbiIpID09IDApCisgICAgICAgICAgICAgICAgICAgIGMtPnNlcnZlcl9jb25maWcucHVibGlzaF9kb21haW4gPSBpc195ZXMocC0+dmFsdWUpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAocC0+a2V5LCAicHVibGlzaC1yZXNvbHYtY29uZi1kbnMtc2VydmVycyIpID09IDApCisgICAgICAgICAgICAgICAgICAgIGMtPnB1Ymxpc2hfcmVzb2x2X2NvbmYgPSBpc195ZXMocC0+dmFsdWUpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAocC0+a2V5LCAiZGlzYWJsZS1wdWJsaXNoaW5nIikgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgYy0+c2VydmVyX2NvbmZpZy5kaXNhYmxlX3B1Ymxpc2hpbmcgPSBpc195ZXMocC0+dmFsdWUpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAocC0+a2V5LCAiZGlzYWJsZS11c2VyLXNlcnZpY2UtcHVibGlzaGluZyIpID09IDApCisgICAgICAgICAgICAgICAgICAgIGMtPmRpc2FibGVfdXNlcl9zZXJ2aWNlX3B1Ymxpc2hpbmcgPSBpc195ZXMocC0+dmFsdWUpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAocC0+a2V5LCAiYWRkLXNlcnZpY2UtY29va2llIikgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgYy0+c2VydmVyX2NvbmZpZy5hZGRfc2VydmljZV9jb29raWUgPSBpc195ZXMocC0+dmFsdWUpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAocC0+a2V5LCAicHVibGlzaC1kbnMtc2VydmVycyIpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgYXZhaGlfc3RyZnJlZXYoYy0+cHVibGlzaF9kbnNfc2VydmVycyk7CisgICAgICAgICAgICAgICAgICAgIGMtPnB1Ymxpc2hfZG5zX3NlcnZlcnMgPSBhdmFoaV9zcGxpdF9jc3YocC0+dmFsdWUpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY2FzZWNtcChwLT5rZXksICJwdWJsaXNoLWEtb24taXB2NiIpID09IDApCisgICAgICAgICAgICAgICAgICAgIGMtPnNlcnZlcl9jb25maWcucHVibGlzaF9hX29uX2lwdjYgPSBpc195ZXMocC0+dmFsdWUpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAocC0+a2V5LCAicHVibGlzaC1hYWFhLW9uLWlwdjQiKSA9PSAwKQorICAgICAgICAgICAgICAgICAgICBjLT5zZXJ2ZXJfY29uZmlnLnB1Ymxpc2hfYWFhYV9vbl9pcHY0ID0gaXNfeWVzKHAtPnZhbHVlKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYXZhaGlfbG9nX2Vycm9yKCJJbnZhbGlkIGNvbmZpZ3VyYXRpb24ga2V5IFwiJXNcIiBpbiBncm91cCBcIiVzXCJcbiIsIHAtPmtleSwgZy0+bmFtZSk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZmluaXNoOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICB9IGVsc2UgaWYgKHN0cmNhc2VjbXAoZy0+bmFtZSwgIndpZGUtYXJlYSIpID09IDApIHsKKyAgICAgICAgICAgIEF2YWhpSW5pRmlsZVBhaXIgKnA7CisKKyAgICAgICAgICAgIGZvciAocCA9IGctPnBhaXJzOyBwOyBwID0gcC0+cGFpcnNfbmV4dCkgeworCisgICAgICAgICAgICAgICAgaWYgKHN0cmNhc2VjbXAocC0+a2V5LCAiZW5hYmxlLXdpZGUtYXJlYSIpID09IDApCisgICAgICAgICAgICAgICAgICAgIGMtPnNlcnZlcl9jb25maWcuZW5hYmxlX3dpZGVfYXJlYSA9IGlzX3llcyhwLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGF2YWhpX2xvZ19lcnJvcigiSW52YWxpZCBjb25maWd1cmF0aW9uIGtleSBcIiVzXCIgaW4gZ3JvdXAgXCIlc1wiXG4iLCBwLT5rZXksIGctPm5hbWUpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGZpbmlzaDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgfSBlbHNlIGlmIChzdHJjYXNlY21wKGctPm5hbWUsICJyZWZsZWN0b3IiKSA9PSAwKSB7CisgICAgICAgICAgICBBdmFoaUluaUZpbGVQYWlyICpwOworCisgICAgICAgICAgICBmb3IgKHAgPSBnLT5wYWlyczsgcDsgcCA9IHAtPnBhaXJzX25leHQpIHsKKworICAgICAgICAgICAgICAgIGlmIChzdHJjYXNlY21wKHAtPmtleSwgImVuYWJsZS1yZWZsZWN0b3IiKSA9PSAwKQorICAgICAgICAgICAgICAgICAgICBjLT5zZXJ2ZXJfY29uZmlnLmVuYWJsZV9yZWZsZWN0b3IgPSBpc195ZXMocC0+dmFsdWUpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAocC0+a2V5LCAicmVmbGVjdC1pcHYiKSA9PSAwKQorICAgICAgICAgICAgICAgICAgICBjLT5zZXJ2ZXJfY29uZmlnLnJlZmxlY3RfaXB2ID0gaXNfeWVzKHAtPnZhbHVlKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYXZhaGlfbG9nX2Vycm9yKCJJbnZhbGlkIGNvbmZpZ3VyYXRpb24ga2V5IFwiJXNcIiBpbiBncm91cCBcIiVzXCJcbiIsIHAtPmtleSwgZy0+bmFtZSk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZmluaXNoOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICB9IGVsc2UgaWYgKHN0cmNhc2VjbXAoZy0+bmFtZSwgInJsaW1pdHMiKSA9PSAwKSB7CisgICAgICAgICAgICBBdmFoaUluaUZpbGVQYWlyICpwOworCisgICAgICAgICAgICBmb3IgKHAgPSBnLT5wYWlyczsgcDsgcCA9IHAtPnBhaXJzX25leHQpIHsKKworICAgICAgICAgICAgICAgIGlmIChzdHJjYXNlY21wKHAtPmtleSwgInJsaW1pdC1hcyIpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgYy0+cmxpbWl0X2FzX3NldCA9IDE7CisgICAgICAgICAgICAgICAgICAgIGMtPnJsaW1pdF9hcyA9IGF0b2kocC0+dmFsdWUpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY2FzZWNtcChwLT5rZXksICJybGltaXQtY29yZSIpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgYy0+cmxpbWl0X2NvcmVfc2V0ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgYy0+cmxpbWl0X2NvcmUgPSBhdG9pKHAtPnZhbHVlKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmNhc2VjbXAocC0+a2V5LCAicmxpbWl0LWRhdGEiKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGMtPnJsaW1pdF9kYXRhX3NldCA9IDE7CisgICAgICAgICAgICAgICAgICAgIGMtPnJsaW1pdF9kYXRhID0gYXRvaShwLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjYXNlY21wKHAtPmtleSwgInJsaW1pdC1mc2l6ZSIpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgYy0+cmxpbWl0X2ZzaXplX3NldCA9IDE7CisgICAgICAgICAgICAgICAgICAgIGMtPnJsaW1pdF9mc2l6ZSA9IGF0b2kocC0+dmFsdWUpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY2FzZWNtcChwLT5rZXksICJybGltaXQtbm9maWxlIikgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBjLT5ybGltaXRfbm9maWxlX3NldCA9IDE7CisgICAgICAgICAgICAgICAgICAgIGMtPnJsaW1pdF9ub2ZpbGUgPSBhdG9pKHAtPnZhbHVlKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmNhc2VjbXAocC0+a2V5LCAicmxpbWl0LXN0YWNrIikgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBjLT5ybGltaXRfc3RhY2tfc2V0ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgYy0+cmxpbWl0X3N0YWNrID0gYXRvaShwLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjYXNlY21wKHAtPmtleSwgInJsaW1pdC1ucHJvYyIpID09IDApIHsKKyNpZmRlZiBSTElNSVRfTlBST0MKKyAgICAgICAgICAgICAgICAgICAgYy0+cmxpbWl0X25wcm9jX3NldCA9IDE7CisgICAgICAgICAgICAgICAgICAgIGMtPnJsaW1pdF9ucHJvYyA9IGF0b2kocC0+dmFsdWUpOworI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgYXZhaGlfbG9nX2Vycm9yKCJJZ25vcmluZyBjb25maWd1cmF0aW9uIGtleSBcIiVzXCIgaW4gZ3JvdXAgXCIlc1wiXG4iLCBwLT5rZXksIGctPm5hbWUpOworI2VuZGlmCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYXZhaGlfbG9nX2Vycm9yKCJJbnZhbGlkIGNvbmZpZ3VyYXRpb24ga2V5IFwiJXNcIiBpbiBncm91cCBcIiVzXCJcbiIsIHAtPmtleSwgZy0+bmFtZSk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZmluaXNoOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgfQorCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhdmFoaV9sb2dfZXJyb3IoIkludmFsaWQgY29uZmlndXJhdGlvbiBmaWxlIGdyb3VwIFwiJXNcIi5cbiIsIGctPm5hbWUpOworICAgICAgICAgICAgZ290byBmaW5pc2g7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByID0gMDsKKworZmluaXNoOgorCisgICAgaWYgKGYpCisgICAgICAgIGF2YWhpX2luaV9maWxlX2ZyZWUoZik7CisKKyAgICByZXR1cm4gcjsKK30KKworc3RhdGljIHZvaWQgbG9nX2Z1bmN0aW9uKEF2YWhpTG9nTGV2ZWwgbGV2ZWwsIGNvbnN0IGNoYXIgKnR4dCkgeworCisgICAgc3RhdGljIGNvbnN0IGludCBsb2dfbGV2ZWxfbWFwW10gPSB7CisgICAgICAgIExPR19FUlIsCisgICAgICAgIExPR19XQVJOSU5HLAorICAgICAgICBMT0dfTk9USUNFLAorICAgICAgICBMT0dfSU5GTywKKyAgICAgICAgTE9HX0RFQlVHCisgICAgfTsKKworICAgIGFzc2VydChsZXZlbCA8IEFWQUhJX0xPR19MRVZFTF9NQVgpOworICAgIGFzc2VydCh0eHQpOworCisgICAgaWYgKCFjb25maWcuZGVidWcgJiYgbGV2ZWwgPT0gQVZBSElfTE9HX0RFQlVHKQorICAgICAgICByZXR1cm47CisKKyAgICBkYWVtb25fbG9nKGxvZ19sZXZlbF9tYXBbbGV2ZWxdLCAiJXMiLCB0eHQpOworfQorCitzdGF0aWMgdm9pZCBkdW1wKGNvbnN0IGNoYXIgKnRleHQsIEFWQUhJX0dDQ19VTlVTRUQgdm9pZCogdXNlcmRhdGEpIHsKKyAgICBhdmFoaV9sb2dfaW5mbygiJXMiLCB0ZXh0KTsKK30KKworI2lmZGVmIEhBVkVfSU5PVElGWQorCitzdGF0aWMgaW50IGlub3RpZnlfZmQgPSAtMTsKKworc3RhdGljIHZvaWQgYWRkX2lub3RpZnlfd2F0Y2hlcyh2b2lkKSB7CisgICAgaW50IGMgPSAwOworICAgIC8qIFdlIGlnbm9yZSB0aGUgcmV0dXJuIHZhbHVlcywgYmVjYXVzZSBvbmUgb3IgbW9yZSBvZiB0aGVzZSBmaWxlcworICAgICAqIG1pZ2h0IG5vdCBleGlzdCBhbmQgd2UncmUgT0sgd2l0aCB0aGF0LiBJbiBhZGRpdGlvbiB3ZSBuZXZlcgorICAgICAqIHdhbnQgdG8gcmVtb3ZlIHRoZXNlIHdhdGNoZXMsIGhlbmNlIHdlIGtlZXAgdGhlaXIgaWRzPyAqLworCisjaWZkZWYgRU5BQkxFX0NIUk9PVAorICAgIGMgPSBjb25maWcudXNlX2Nocm9vdDsKKyNlbmRpZgorCisgICAgaW5vdGlmeV9hZGRfd2F0Y2goaW5vdGlmeV9mZCwgYyA/ICIvc2VydmljZXMiIDogQVZBSElfU0VSVklDRV9ESVIsIElOX0NMT1NFX1dSSVRFfElOX0RFTEVURXxJTl9ERUxFVEVfU0VMRnxJTl9NT1ZFRF9GUk9NfElOX01PVkVEX1RPfElOX01PVkVfU0VMRgorI2lmZGVmIElOX09OTFlESVIKKyAgICAgICAgICAgICAgICAgICAgICB8SU5fT05MWURJUgorI2VuZGlmCisgICAgKTsKKyAgICBpbm90aWZ5X2FkZF93YXRjaChpbm90aWZ5X2ZkLCBjID8gIi8iIDogQVZBSElfQ09ORklHX0RJUiwgSU5fQ0xPU0VfV1JJVEV8SU5fREVMRVRFfElOX0RFTEVURV9TRUxGfElOX01PVkVEX0ZST018SU5fTU9WRURfVE98SU5fTU9WRV9TRUxGCisjaWZkZWYgSU5fT05MWURJUgorICAgICAgICAgICAgICAgICAgICAgIHxJTl9PTkxZRElSCisjZW5kaWYKKyAgICApOworfQorCisjZW5kaWYKKworI2lmZGVmIEhBVkVfS1FVRVVFCisKKyNkZWZpbmUgTlVNX1dBVENIRVMgMgorCitzdGF0aWMgaW50IGtxID0gLTE7CitzdGF0aWMgaW50IGtmZHNbTlVNX1dBVENIRVNdOworc3RhdGljIGludCBudW1fa2ZkcyA9IDA7CisKK3N0YXRpYyB2b2lkIGFkZF9rcXVldWVfd2F0Y2goY29uc3QgY2hhciAqZGlyKTsKKworc3RhdGljIHZvaWQgYWRkX2txdWV1ZV93YXRjaGVzKHZvaWQpIHsKKyAgICBpbnQgYyA9IDA7CisKKyNpZmRlZiBFTkFCTEVfQ0hST09UCisgICAgYyA9IGNvbmZpZy51c2VfY2hyb290OworI2VuZGlmCisKKyAgICBhZGRfa3F1ZXVlX3dhdGNoKGMgPyAiLyIgOiBBVkFISV9DT05GSUdfRElSKTsKKyAgICBhZGRfa3F1ZXVlX3dhdGNoKGMgPyAiL3NlcnZpY2VzIiA6IEFWQUhJX1NFUlZJQ0VfRElSKTsKK30KKworc3RhdGljIHZvaWQgYWRkX2txdWV1ZV93YXRjaChjb25zdCBjaGFyICpkaXIpIHsKKyAgICBpbnQgZmQ7CisgICAgc3RydWN0IGtldmVudCBldjsKKworICAgIGlmIChrcSA8IDApCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChudW1fa2ZkcyA+PSBOVU1fV0FUQ0hFUykKKyAgICAgICAgcmV0dXJuOworCisgICAgZmQgPSBvcGVuKGRpciwgT19SRE9OTFkpOworICAgIGlmIChmZCA8IDApCisgICAgICAgIHJldHVybjsKKyAgICBFVl9TRVQoJmV2LCBmZCwgRVZGSUxUX1ZOT0RFLCBFVl9BREQgfCBFVl9FTkFCTEUgfCBFVl9DTEVBUiwKKyAgICAgICAgICAgTk9URV9ERUxFVEUgfCBOT1RFX0VYVEVORCB8IE5PVEVfV1JJVEUgfCBOT1RFX1JFTkFNRSwKKyAgICAgICAgICAgMCwgMCk7CisgICAgaWYgKGtldmVudChrcSwgJmV2LCAxLCBOVUxMLCAwLCBOVUxMKSA9PSAtMSkgeworICAgICAgICBjbG9zZShmZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBrZmRzW251bV9rZmRzKytdID0gZmQ7Cit9CisKKyNlbmRpZgorCitzdGF0aWMgdm9pZCByZWxvYWRfY29uZmlnKHZvaWQpIHsKKworI2lmZGVmIEhBVkVfSU5PVElGWQorICAgIC8qIFJlZnJlc2ggaW4gY2FzZSB0aGUgY29uZmlnIGRpcnMgaGF2ZSBiZWVuIHJlbW92ZWQgKi8KKyAgICBhZGRfaW5vdGlmeV93YXRjaGVzKCk7CisjZW5kaWYKKworI2lmZGVmIEhBVkVfS1FVRVVFCisgICAgYWRkX2txdWV1ZV93YXRjaGVzKCk7CisjZW5kaWYKKworI2lmZGVmIEVOQUJMRV9DSFJPT1QKKyAgICBzdGF0aWNfc2VydmljZV9sb2FkKGNvbmZpZy51c2VfY2hyb290KTsKKyAgICBzdGF0aWNfaG9zdHNfbG9hZChjb25maWcudXNlX2Nocm9vdCk7CisjZWxzZQorICAgIHN0YXRpY19zZXJ2aWNlX2xvYWQoMCk7CisgICAgc3RhdGljX2hvc3RzX2xvYWQoMCk7CisjZW5kaWYKKyAgICBzdGF0aWNfc2VydmljZV9hZGRfdG9fc2VydmVyKCk7CisgICAgc3RhdGljX2hvc3RzX2FkZF90b19zZXJ2ZXIoKTsKKworICAgIGlmIChyZXNvbHZfY29uZl9lbnRyeV9ncm91cCkKKyAgICAgICAgYXZhaGlfc19lbnRyeV9ncm91cF9yZXNldChyZXNvbHZfY29uZl9lbnRyeV9ncm91cCk7CisKKyAgICBsb2FkX3Jlc29sdl9jb25mKCk7CisKKyAgICB1cGRhdGVfd2lkZV9hcmVhX3NlcnZlcnMoKTsKKyAgICB1cGRhdGVfYnJvd3NlX2RvbWFpbnMoKTsKKworICAgIGlmIChjb25maWcucHVibGlzaF9yZXNvbHZfY29uZiAmJiByZXNvbHZfY29uZl9uYW1lX3NlcnZlcnMgJiYgcmVzb2x2X2NvbmZfbmFtZV9zZXJ2ZXJzWzBdKQorICAgICAgICByZXNvbHZfY29uZl9lbnRyeV9ncm91cCA9IGFkZF9kbnNfc2VydmVycyhhdmFoaV9zZXJ2ZXIsIHJlc29sdl9jb25mX2VudHJ5X2dyb3VwLCByZXNvbHZfY29uZl9uYW1lX3NlcnZlcnMpOworfQorCisjaWZkZWYgSEFWRV9JTk9USUZZCisKK3N0YXRpYyB2b2lkIGlub3RpZnlfY2FsbGJhY2soQXZhaGlXYXRjaCAqd2F0Y2gsIGludCBmZCwgQVZBSElfR0NDX1VOVVNFRCBBdmFoaVdhdGNoRXZlbnQgZXZlbnQsIEFWQUhJX0dDQ19VTlVTRUQgdm9pZCAqdXNlcmRhdGEpIHsKKyAgICBjaGFyKiBidWZmZXI7CisgICAgaW50IG4gPSAwOworCisgICAgYXNzZXJ0KGZkID09IGlub3RpZnlfZmQpOworICAgIGFzc2VydCh3YXRjaCk7CisKKyAgICBpb2N0bChpbm90aWZ5X2ZkLCBGSU9OUkVBRCwgJm4pOworICAgIGlmIChuIDw9IDApCisgICAgICAgIG4gPSAxMjg7CisKKyAgICBidWZmZXIgPSBhdmFoaV9tYWxsb2Mobik7CisgICAgaWYgKHJlYWQoaW5vdGlmeV9mZCwgYnVmZmVyLCBuKSA8IDAgKSB7CisgICAgICAgIGF2YWhpX2ZyZWUoYnVmZmVyKTsKKyAgICAgICAgYXZhaGlfbG9nX2Vycm9yKCJGYWlsZWQgdG8gcmVhZCBpbm90aWZ5IGV2ZW50OiAlcyIsIGF2YWhpX3N0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgYXZhaGlfZnJlZShidWZmZXIpOworCisgICAgYXZhaGlfbG9nX2luZm8oIkZpbGVzIGNoYW5nZWQsIHJlbG9hZGluZy4iKTsKKyAgICByZWxvYWRfY29uZmlnKCk7Cit9CisKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9LUVVFVUUKKworc3RhdGljIHZvaWQga3F1ZXVlX2NhbGxiYWNrKEF2YWhpV2F0Y2ggKndhdGNoLCBpbnQgZmQsIEFWQUhJX0dDQ19VTlVTRUQgQXZhaGlXYXRjaEV2ZW50IGV2ZW50LCBBVkFISV9HQ0NfVU5VU0VEIHZvaWQgKnVzZXJkYXRhKSB7CisgICAgc3RydWN0IGtldmVudCBldjsKKyAgICBzdHJ1Y3QgdGltZXNwZWMgbnVsbHRzID0geyAwLCAwIH07CisgICAgaW50IHJlczsKKworICAgIGFzc2VydChmZCA9PSBrcSk7CisgICAgYXNzZXJ0KHdhdGNoKTsKKworICAgIHJlcyA9IGtldmVudChrcSwgTlVMTCwgMCwgJmV2LCAxLCAmbnVsbHRzKTsKKworICAgIGlmIChyZXMgPiAwKSB7CisgICAgICAgIC8qIFNsZWVwIGZvciBhIGhhbGYtc2Vjb25kIHRvIGF2b2lkIHBvdGVudGlhbCByYWNlcworICAgICAgICAgKiBkdXJpbmcgaW5zdGFsbC91bmluc3RhbGwuICovCisgICAgICAgIHVzbGVlcCg1MDAwMDApOworICAgICAgICBhdmFoaV9sb2dfaW5mbygiRmlsZXMgY2hhbmdlZCwgcmVsb2FkaW5nLiIpOworICAgICAgICByZWxvYWRfY29uZmlnKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXZhaGlfbG9nX2Vycm9yKCJGYWlsZWQgdG8gcmVhZCBrcXVldWUgZXZlbnQ6ICVzIiwgYXZhaGlfc3RyZXJyb3IoZXJybm8pKTsKKyAgICB9Cit9CisKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBzaWduYWxfY2FsbGJhY2soQXZhaGlXYXRjaCAqd2F0Y2gsIEFWQUhJX0dDQ19VTlVTRUQgaW50IGZkLCBBVkFISV9HQ0NfVU5VU0VEIEF2YWhpV2F0Y2hFdmVudCBldmVudCwgQVZBSElfR0NDX1VOVVNFRCB2b2lkICp1c2VyZGF0YSkgeworICAgIGludCBzaWc7CisgICAgY29uc3QgQXZhaGlQb2xsICpwb2xsX2FwaTsKKworICAgIGFzc2VydCh3YXRjaCk7CisgICAgYXNzZXJ0KHNpbXBsZV9wb2xsX2FwaSk7CisKKyAgICBwb2xsX2FwaSA9IGF2YWhpX3NpbXBsZV9wb2xsX2dldChzaW1wbGVfcG9sbF9hcGkpOworCisgICAgaWYgKChzaWcgPSBkYWVtb25fc2lnbmFsX25leHQoKSkgPD0gMCkgeworICAgICAgICBhdmFoaV9sb2dfZXJyb3IoImRhZW1vbl9zaWduYWxfbmV4dCgpIGZhaWxlZCIpOworICAgICAgICBwb2xsX2FwaS0+d2F0Y2hfZnJlZSh3YXRjaCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHNpZykgeworICAgICAgICBjYXNlIFNJR0lOVDoKKyAgICAgICAgY2FzZSBTSUdURVJNOgorICAgICAgICAgICAgYXZhaGlfbG9nX2luZm8oCisgICAgICAgICAgICAgICAgICAgICJHb3QgJXMsIHF1aXR0aW5nLiIsCisgICAgICAgICAgICAgICAgICAgIHNpZyA9PSBTSUdJTlQgPyAiU0lHSU5UIiA6ICJTSUdURVJNIik7CisgICAgICAgICAgICBhdmFoaV9zaW1wbGVfcG9sbF9xdWl0KHNpbXBsZV9wb2xsX2FwaSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNJR0hVUDoKKyAgICAgICAgICAgIGF2YWhpX2xvZ19pbmZvKCJHb3QgU0lHSFVQLCByZWxvYWRpbmcuIik7CisKKyAgICAgICAgICAgIHJlbG9hZF9jb25maWcoKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU0lHVVNSMToKKyAgICAgICAgICAgIGF2YWhpX2xvZ19pbmZvKCJHb3QgU0lHVVNSMSwgZHVtcGluZyByZWNvcmQgZGF0YS4iKTsKKyAgICAgICAgICAgIGF2YWhpX3NlcnZlcl9kdW1wKGF2YWhpX3NlcnZlciwgZHVtcCwgTlVMTCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYXZhaGlfbG9nX3dhcm4oIkdvdCBzcHVyaW91cyBzaWduYWwsIGlnbm9yaW5nLiIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorfQorCisvKiBJbXBvcnRlZCBmcm9tIC4uL2F2YWhpLWNsaWVudC9uc3MtY2hlY2suYyAqLworaW50IGF2YWhpX25zc19zdXBwb3J0KHZvaWQpOworCitzdGF0aWMgdm9pZCBpZ25vcmVfc2lnbmFsKGludCBzaWcpICB7CisgICAgc3RydWN0IHNpZ2FjdGlvbiBzYTsKKworICAgIG1lbXNldCgmc2EsIDAsIHNpemVvZihzYSkpOworICAgIHNhLnNhX2hhbmRsZXIgPSBTSUdfSUdOOworICAgIHNhLnNhX2ZsYWdzID0gU0FfUkVTVEFSVDsKKworICAgIHNpZ2FjdGlvbihzaWcsICZzYSwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQgcnVuX3NlcnZlcihEYWVtb25Db25maWcgKmMpIHsKKyAgICBpbnQgciA9IC0xOworICAgIGludCBlcnJvcjsKKyAgICBjb25zdCBBdmFoaVBvbGwgKnBvbGxfYXBpID0gTlVMTDsKKyAgICBBdmFoaVdhdGNoICpzaWdfd2F0Y2ggPSBOVUxMOworICAgIGludCByZXR2YWxfaXNfc2VudCA9IDA7CisjaWZkZWYgSEFWRV9JTk9USUZZCisgICAgQXZhaGlXYXRjaCAqaW5vdGlmeV93YXRjaCA9IE5VTEw7CisjZW5kaWYKKyNpZmRlZiBIQVZFX0tRVUVVRQorICAgIGludCBpOworICAgIEF2YWhpV2F0Y2ggKmtxdWV1ZV93YXRjaCA9IE5VTEw7CisjZW5kaWYKKworICAgIGFzc2VydChjKTsKKworICAgIGlnbm9yZV9zaWduYWwoU0lHUElQRSk7CisKKyAgICBpZiAoIShuc3Nfc3VwcG9ydCA9IGF2YWhpX25zc19zdXBwb3J0KCkpKQorICAgICAgICBhdmFoaV9sb2dfd2FybigiV0FSTklORzogTm8gTlNTIHN1cHBvcnQgZm9yIG1ETlMgZGV0ZWN0ZWQsIGNvbnNpZGVyIGluc3RhbGxpbmcgbnNzLW1kbnMhIik7CisKKyAgICBpZiAoIShzaW1wbGVfcG9sbF9hcGkgPSBhdmFoaV9zaW1wbGVfcG9sbF9uZXcoKSkpIHsKKyAgICAgICAgYXZhaGlfbG9nX2Vycm9yKCJGYWlsZWQgdG8gY3JlYXRlIG1haW4gbG9vcCBvYmplY3QuIik7CisgICAgICAgIGdvdG8gZmluaXNoOworICAgIH0KKworICAgIHBvbGxfYXBpID0gYXZhaGlfc2ltcGxlX3BvbGxfZ2V0KHNpbXBsZV9wb2xsX2FwaSk7CisKKyAgICBpZiAoZGFlbW9uX3NpZ25hbF9pbml0KFNJR0lOVCwgU0lHSFVQLCBTSUdURVJNLCBTSUdVU1IxLCAwKSA8IDApIHsKKyAgICAgICAgYXZhaGlfbG9nX2Vycm9yKCJDb3VsZCBub3QgcmVnaXN0ZXIgc2lnbmFsIGhhbmRsZXJzICglcykuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgZ290byBmaW5pc2g7CisgICAgfQorCisgICAgaWYgKCEoc2lnX3dhdGNoID0gcG9sbF9hcGktPndhdGNoX25ldyhwb2xsX2FwaSwgZGFlbW9uX3NpZ25hbF9mZCgpLCBBVkFISV9XQVRDSF9JTiwgc2lnbmFsX2NhbGxiYWNrLCBzaW1wbGVfcG9sbF9hcGkpKSkgeworICAgICAgICBhdmFoaV9sb2dfZXJyb3IoICJGYWlsZWQgdG8gY3JlYXRlIHNpZ25hbCB3YXRjaGVyIik7CisgICAgICAgIGdvdG8gZmluaXNoOworICAgIH0KKworICAgIGlmIChzaW1wbGVfcHJvdG9jb2xfc2V0dXAocG9sbF9hcGkpIDwgMCkKKyAgICAgICAgZ290byBmaW5pc2g7CisKKyNpZmRlZiBIQVZFX0RCVVMKKyAgICBpZiAoYy0+ZW5hYmxlX2RidXMpIHsKKyAgICAgICAgaWYgKGRidXNfcHJvdG9jb2xfc2V0dXAocG9sbF9hcGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5kaXNhYmxlX3VzZXJfc2VydmljZV9wdWJsaXNoaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcubl9jbGllbnRzX21heCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLm5fb2JqZWN0c19wZXJfY2xpZW50X21heCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLm5fZW50cmllc19wZXJfZW50cnlfZ3JvdXBfbWF4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhYy0+ZmFpbF9vbl9taXNzaW5nX2RidXMKKyNpZmRlZiBFTkFCTEVfQ0hST09UCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICFjb25maWcudXNlX2Nocm9vdAorI2VuZGlmCisgICAgICAgICAgICApIDwgMCkgeworCisgICAgICAgICAgICBhdmFoaV9sb2dfd2FybigiV0FSTklORzogRmFpbGVkIHRvIGNvbnRhY3QgRC1CdXMgZGFlbW9uLiIpOworCisgICAgICAgICAgICBpZiAoYy0+ZmFpbF9vbl9taXNzaW5nX2RidXMpCisgICAgICAgICAgICAgICAgZ290byBmaW5pc2g7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworI2lmZGVmIEVOQUJMRV9DSFJPT1QKKworICAgIGlmIChjb25maWcuZHJvcF9yb290ICYmIGNvbmZpZy51c2VfY2hyb290KSB7CisgICAgICAgIGlmIChjaHJvb3QoQVZBSElfQ09ORklHX0RJUikgPCAwKSB7CisgICAgICAgICAgICBhdmFoaV9sb2dfZXJyb3IoIkZhaWxlZCB0byBjaHJvb3QoKTogJXMiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgZ290byBmaW5pc2g7CisgICAgICAgIH0KKworICAgICAgICBhdmFoaV9sb2dfaW5mbygiU3VjY2Vzc2Z1bGx5IGNhbGxlZCBjaHJvb3QoKS4iKTsKKyAgICAgICAgY2hkaXIoIi8iKTsKKworICAgICAgICBpZiAoYXZhaGlfY2Fwc19kcm9wX2FsbCgpIDwgMCkgeworICAgICAgICAgICAgYXZhaGlfbG9nX2Vycm9yKCJGYWlsZWQgdG8gZHJvcCBjYXBhYmlsaXRpZXMuIik7CisgICAgICAgICAgICBnb3RvIGZpbmlzaDsKKyAgICAgICAgfQorICAgICAgICBhdmFoaV9sb2dfaW5mbygiU3VjY2Vzc2Z1bGx5IGRyb3BwZWQgcmVtYWluaW5nIGNhcGFiaWxpdGllcy4iKTsKKyAgICB9CisKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9JTk9USUZZCisgICAgaWYgKChpbm90aWZ5X2ZkID0gaW5vdGlmeV9pbml0KCkpIDwgMCkKKyAgICAgICAgYXZhaGlfbG9nX3dhcm4oICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBpbm90aWZ5OiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgZWxzZSB7CisgICAgICAgIGFkZF9pbm90aWZ5X3dhdGNoZXMoKTsKKworICAgICAgICBpZiAoIShpbm90aWZ5X3dhdGNoID0gcG9sbF9hcGktPndhdGNoX25ldyhwb2xsX2FwaSwgaW5vdGlmeV9mZCwgQVZBSElfV0FUQ0hfSU4sIGlub3RpZnlfY2FsbGJhY2ssIE5VTEwpKSkgeworICAgICAgICAgICAgYXZhaGlfbG9nX2Vycm9yKCAiRmFpbGVkIHRvIGNyZWF0ZSBpbm90aWZ5IHdhdGNoZXIiKTsKKyAgICAgICAgICAgIGdvdG8gZmluaXNoOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0tRVUVVRQorICAgIGlmICgoa3EgPSBrcXVldWUoKSkgPCAwKQorICAgICAgICBhdmFoaV9sb2dfd2FybiggIkZhaWxlZCB0byBpbml0aWFsaXplIGtxdWV1ZTogJXMiLCBzdHJlcnJvcihlcnJubykpOworICAgIGVsc2UgeworICAgICAgICBhZGRfa3F1ZXVlX3dhdGNoZXMoKTsKKworICAgICAgICBpZiAoIShrcXVldWVfd2F0Y2ggPSBwb2xsX2FwaS0+d2F0Y2hfbmV3KHBvbGxfYXBpLCBrcSwgQVZBSElfV0FUQ0hfSU4sIGtxdWV1ZV9jYWxsYmFjaywgTlVMTCkpKSB7CisgICAgICAgICAgICBhdmFoaV9sb2dfZXJyb3IoICJGYWlsZWQgdG8gY3JlYXRlIGtxdWV1ZSB3YXRjaGVyIik7CisgICAgICAgICAgICBnb3RvIGZpbmlzaDsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisgICAgbG9hZF9yZXNvbHZfY29uZigpOworI2lmZGVmIEVOQUJMRV9DSFJPT1QKKyAgICBzdGF0aWNfc2VydmljZV9sb2FkKGNvbmZpZy51c2VfY2hyb290KTsKKyAgICBzdGF0aWNfaG9zdHNfbG9hZChjb25maWcudXNlX2Nocm9vdCk7CisjZWxzZQorICAgIHN0YXRpY19zZXJ2aWNlX2xvYWQoMCk7CisgICAgc3RhdGljX2hvc3RzX2xvYWQoMCk7CisjZW5kaWYKKworICAgIGlmICghKGF2YWhpX3NlcnZlciA9IGF2YWhpX3NlcnZlcl9uZXcocG9sbF9hcGksICZjLT5zZXJ2ZXJfY29uZmlnLCBzZXJ2ZXJfY2FsbGJhY2ssIGMsICZlcnJvcikpKSB7CisgICAgICAgIGF2YWhpX2xvZ19lcnJvcigiRmFpbGVkIHRvIGNyZWF0ZSBzZXJ2ZXI6ICVzIiwgYXZhaGlfc3RyZXJyb3IoZXJyb3IpKTsKKyAgICAgICAgZ290byBmaW5pc2g7CisgICAgfQorCisgICAgdXBkYXRlX3dpZGVfYXJlYV9zZXJ2ZXJzKCk7CisgICAgdXBkYXRlX2Jyb3dzZV9kb21haW5zKCk7CisKKyAgICBpZiAoYy0+ZGFlbW9uaXplKSB7CisgICAgICAgIGRhZW1vbl9yZXR2YWxfc2VuZCgwKTsKKyAgICAgICAgcmV0dmFsX2lzX3NlbnQgPSAxOworICAgIH0KKworICAgIGZvciAoOzspIHsKKyAgICAgICAgaWYgKChyID0gYXZhaGlfc2ltcGxlX3BvbGxfaXRlcmF0ZShzaW1wbGVfcG9sbF9hcGksIC0xKSkgPCAwKSB7CisKKyAgICAgICAgICAgIC8qIFdlIGhhbmRsZSBzaWduYWxzIHRocm91Z2ggYW4gRkQsIHNvIGxldCdzIGNvbnRpbnVlICovCisgICAgICAgICAgICBpZiAoZXJybm8gPT0gRUlOVFIpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGF2YWhpX2xvZ19lcnJvcigicG9sbCgpOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICBnb3RvIGZpbmlzaDsKKyAgICAgICAgfSBlbHNlIGlmIChyID4gMCkKKyAgICAgICAgICAgIC8qIFF1aXQgKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHIgPSAwOworCitmaW5pc2g6CisKKyAgICBzdGF0aWNfc2VydmljZV9yZW1vdmVfZnJvbV9zZXJ2ZXIoKTsKKyAgICBzdGF0aWNfc2VydmljZV9mcmVlX2FsbCgpOworCisgICAgc3RhdGljX2hvc3RzX3JlbW92ZV9mcm9tX3NlcnZlcigpOworICAgIHN0YXRpY19ob3N0c19mcmVlX2FsbCgpOworCisgICAgcmVtb3ZlX2Ruc19zZXJ2ZXJfZW50cnlfZ3JvdXBzKCk7CisKKyAgICBzaW1wbGVfcHJvdG9jb2xfc2h1dGRvd24oKTsKKworI2lmZGVmIEhBVkVfREJVUworICAgIGlmIChjLT5lbmFibGVfZGJ1cykKKyAgICAgICAgZGJ1c19wcm90b2NvbF9zaHV0ZG93bigpOworI2VuZGlmCisKKyAgICBpZiAoYXZhaGlfc2VydmVyKSB7CisgICAgICAgIGF2YWhpX3NlcnZlcl9mcmVlKGF2YWhpX3NlcnZlcik7CisgICAgICAgIGF2YWhpX3NlcnZlciA9IE5VTEw7CisgICAgfQorCisgICAgZGFlbW9uX3NpZ25hbF9kb25lKCk7CisKKyAgICBpZiAoc2lnX3dhdGNoKQorICAgICAgICBwb2xsX2FwaS0+d2F0Y2hfZnJlZShzaWdfd2F0Y2gpOworCisjaWZkZWYgSEFWRV9JTk9USUZZCisgICAgaWYgKGlub3RpZnlfd2F0Y2gpCisgICAgICAgIHBvbGxfYXBpLT53YXRjaF9mcmVlKGlub3RpZnlfd2F0Y2gpOworICAgIGlmIChpbm90aWZ5X2ZkID49IDApCisgICAgICAgIGNsb3NlKGlub3RpZnlfZmQpOworI2VuZGlmCisKKyNpZmRlZiBIQVZFX0tRVUVVRQorICAgIGlmIChrcXVldWVfd2F0Y2gpCisgICAgICAgIHBvbGxfYXBpLT53YXRjaF9mcmVlKGtxdWV1ZV93YXRjaCk7CisgICAgaWYgKGtxID49IDApCisgICAgICAgIGNsb3NlKGtxKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2tmZHM7IGkrKykgeworICAgICAgICBpZiAoa2Zkc1tpXSA+PSAwKQorICAgICAgICAgICAgY2xvc2Uoa2Zkc1tpXSk7CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAoc2ltcGxlX3BvbGxfYXBpKSB7CisgICAgICAgIGF2YWhpX3NpbXBsZV9wb2xsX2ZyZWUoc2ltcGxlX3BvbGxfYXBpKTsKKyAgICAgICAgc2ltcGxlX3BvbGxfYXBpID0gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoIXJldHZhbF9pc19zZW50ICYmIGMtPmRhZW1vbml6ZSkKKyAgICAgICAgZGFlbW9uX3JldHZhbF9zZW5kKDEpOworCisgICAgcmV0dXJuIHI7Cit9CisKKyNkZWZpbmUgc2V0X2VudihrZXksIHZhbHVlKSBwdXRlbnYoYXZhaGlfc3RyZHVwX3ByaW50ZigiJXM9JXMiLCAoa2V5KSwgKHZhbHVlKSkpCisKK3N0YXRpYyBpbnQgZHJvcF9yb290KHZvaWQpIHsKKyAgICBzdHJ1Y3QgcGFzc3dkICpwdzsKKyAgICBzdHJ1Y3QgZ3JvdXAgKiBncjsKKyAgICBpbnQgcjsKKworICAgIGlmICghKHB3ID0gZ2V0cHduYW0oQVZBSElfVVNFUikpKSB7CisgICAgICAgIGF2YWhpX2xvZ19lcnJvciggIkZhaWxlZCB0byBmaW5kIHVzZXIgJyJBVkFISV9VU0VSIicuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoIShnciA9IGdldGdybmFtKEFWQUhJX0dST1VQKSkpIHsKKyAgICAgICAgYXZhaGlfbG9nX2Vycm9yKCAiRmFpbGVkIHRvIGZpbmQgZ3JvdXAgJyJBVkFISV9HUk9VUCInLiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgYXZhaGlfbG9nX2luZm8oIkZvdW5kIHVzZXIgJyJBVkFISV9VU0VSIicgKFVJRCAlbHUpIGFuZCBncm91cCAnIkFWQUhJX0dST1VQIicgKEdJRCAlbHUpLiIsICh1bnNpZ25lZCBsb25nKSBwdy0+cHdfdWlkLCAodW5zaWduZWQgbG9uZykgZ3ItPmdyX2dpZCk7CisKKyAgICBpZiAoaW5pdGdyb3VwcyhBVkFISV9VU0VSLCBnci0+Z3JfZ2lkKSAhPSAwKSB7CisgICAgICAgIGF2YWhpX2xvZ19lcnJvcigiRmFpbGVkIHRvIGNoYW5nZSBncm91cCBsaXN0OiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyNpZiBkZWZpbmVkKEhBVkVfU0VUUkVTR0lEKQorICAgIHIgPSBzZXRyZXNnaWQoZ3ItPmdyX2dpZCwgZ3ItPmdyX2dpZCwgZ3ItPmdyX2dpZCk7CisjZWxpZiBkZWZpbmVkKEhBVkVfU0VURUdJRCkKKyAgICBpZiAoKHIgPSBzZXRnaWQoZ3ItPmdyX2dpZCkpID49IDApCisgICAgICAgIHIgPSBzZXRlZ2lkKGdyLT5ncl9naWQpOworI2VsaWYgZGVmaW5lZChIQVZFX1NFVFJFR0lEKQorICAgIHIgPSBzZXRyZWdpZChnci0+Z3JfZ2lkLCBnci0+Z3JfZ2lkKTsKKyNlbHNlCisjZXJyb3IgIk5vIEFQSSB0byBkcm9wIHByaXZpbGVnZXMiCisjZW5kaWYKKworICAgIGlmIChyIDwgMCkgeworICAgICAgICBhdmFoaV9sb2dfZXJyb3IoIkZhaWxlZCB0byBjaGFuZ2UgR0lEOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyNpZiBkZWZpbmVkKEhBVkVfU0VUUkVTVUlEKQorICAgIHIgPSBzZXRyZXN1aWQocHctPnB3X3VpZCwgcHctPnB3X3VpZCwgcHctPnB3X3VpZCk7CisjZWxpZiBkZWZpbmVkKEhBVkVfU0VURVVJRCkKKyAgICBpZiAoKHIgPSBzZXR1aWQocHctPnB3X3VpZCkpID49IDApCisgICAgICAgIHIgPSBzZXRldWlkKHB3LT5wd191aWQpOworI2VsaWYgZGVmaW5lZChIQVZFX1NFVFJFVUlEKQorICAgIHIgPSBzZXRyZXVpZChwdy0+cHdfdWlkLCBwdy0+cHdfdWlkKTsKKyNlbHNlCisjZXJyb3IgIk5vIEFQSSB0byBkcm9wIHByaXZpbGVnZXMiCisjZW5kaWYKKworICAgIGlmIChyIDwgMCkgeworICAgICAgICBhdmFoaV9sb2dfZXJyb3IoIkZhaWxlZCB0byBjaGFuZ2UgVUlEOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBzZXRfZW52KCJVU0VSIiwgcHctPnB3X25hbWUpOworICAgIHNldF9lbnYoIkxPR05BTUUiLCBwdy0+cHdfbmFtZSk7CisgICAgc2V0X2VudigiSE9NRSIsIHB3LT5wd19kaXIpOworCisgICAgYXZhaGlfbG9nX2luZm8oIlN1Y2Nlc3NmdWxseSBkcm9wcGVkIHJvb3QgcHJpdmlsZWdlcy4iKTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgY2hhciogcGlkX2ZpbGVfcHJvYyh2b2lkKSB7CisgICAgcmV0dXJuIEFWQUhJX0RBRU1PTl9SVU5USU1FX0RJUiIvcGlkIjsKK30KKworc3RhdGljIGludCBtYWtlX3J1bnRpbWVfZGlyKHZvaWQpIHsKKyAgICBpbnQgciA9IC0xOworICAgIG1vZGVfdCB1OworICAgIGludCByZXNldF91bWFzayA9IDA7CisgICAgc3RydWN0IHBhc3N3ZCAqcHc7CisgICAgc3RydWN0IGdyb3VwICogZ3I7CisgICAgc3RydWN0IHN0YXQgc3Q7CisKKyAgICBpZiAoIShwdyA9IGdldHB3bmFtKEFWQUhJX1VTRVIpKSkgeworICAgICAgICBhdmFoaV9sb2dfZXJyb3IoICJGYWlsZWQgdG8gZmluZCB1c2VyICciQVZBSElfVVNFUiInLiIpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKCEoZ3IgPSBnZXRncm5hbShBVkFISV9HUk9VUCkpKSB7CisgICAgICAgIGF2YWhpX2xvZ19lcnJvciggIkZhaWxlZCB0byBmaW5kIGdyb3VwICciQVZBSElfR1JPVVAiJy4iKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIHUgPSB1bWFzaygwMDAwKTsKKyAgICByZXNldF91bWFzayA9IDE7CisKKyAgICBpZiAobWtkaXIoQVZBSElfREFFTU9OX1JVTlRJTUVfRElSLCAwNzU1KSA8IDAgJiYgZXJybm8gIT0gRUVYSVNUKSB7CisgICAgICAgIGF2YWhpX2xvZ19lcnJvcigibWtkaXIoXCIiQVZBSElfREFFTU9OX1JVTlRJTUVfRElSIlwiKTogJXMiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgY2hvd24oQVZBSElfREFFTU9OX1JVTlRJTUVfRElSLCBwdy0+cHdfdWlkLCBnci0+Z3JfZ2lkKTsKKworICAgIGlmIChzdGF0KEFWQUhJX0RBRU1PTl9SVU5USU1FX0RJUiwgJnN0KSA8IDApIHsKKyAgICAgICAgYXZhaGlfbG9nX2Vycm9yKCJzdGF0KCk6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKCFTX0lTRElSKHN0LnN0X21vZGUpIHx8IHN0LnN0X3VpZCAhPSBwdy0+cHdfdWlkIHx8IHN0LnN0X2dpZCAhPSBnci0+Z3JfZ2lkKSB7CisgICAgICAgIGF2YWhpX2xvZ19lcnJvcigiRmFpbGVkIHRvIGNyZWF0ZSBydW50aW1lIGRpcmVjdG9yeSAiQVZBSElfREFFTU9OX1JVTlRJTUVfRElSIi4iKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIHIgPSAwOworCitmYWlsOgorICAgIGlmIChyZXNldF91bWFzaykKKyAgICAgICAgdW1hc2sodSk7CisgICAgcmV0dXJuIHI7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9vbmVfcmxpbWl0KGludCByZXNvdXJjZSwgcmxpbV90IGxpbWl0LCBjb25zdCBjaGFyICpuYW1lKSB7CisgICAgc3RydWN0IHJsaW1pdCBybDsKKyAgICBybC5ybGltX2N1ciA9IHJsLnJsaW1fbWF4ID0gbGltaXQ7CisKKyAgICBpZiAoc2V0cmxpbWl0KHJlc291cmNlLCAmcmwpIDwgMCkKKyAgICAgICAgYXZhaGlfbG9nX3dhcm4oInNldHJsaW1pdCglcywgeyV1LCAldX0pIGZhaWxlZDogJXMiLCBuYW1lLCAodW5zaWduZWQpIGxpbWl0LCAodW5zaWduZWQpIGxpbWl0LCBzdHJlcnJvcihlcnJubykpOworfQorCitzdGF0aWMgdm9pZCBlbmZvcmNlX3JsaW1pdHModm9pZCkgeworI2lmZGVmIFJMSU1JVF9BUworICAgIGlmIChjb25maWcucmxpbWl0X2FzX3NldCkKKyAgICAgICAgc2V0X29uZV9ybGltaXQoUkxJTUlUX0FTLCBjb25maWcucmxpbWl0X2FzLCAiUkxJTUlUX0FTIik7CisjZW5kaWYKKyAgICBpZiAoY29uZmlnLnJsaW1pdF9jb3JlX3NldCkKKyAgICAgICAgc2V0X29uZV9ybGltaXQoUkxJTUlUX0NPUkUsIGNvbmZpZy5ybGltaXRfY29yZSwgIlJMSU1JVF9DT1JFIik7CisgICAgaWYgKGNvbmZpZy5ybGltaXRfZGF0YV9zZXQpCisgICAgICAgIHNldF9vbmVfcmxpbWl0KFJMSU1JVF9EQVRBLCBjb25maWcucmxpbWl0X2RhdGEsICJSTElNSVRfREFUQSIpOworICAgIGlmIChjb25maWcucmxpbWl0X2ZzaXplX3NldCkKKyAgICAgICAgc2V0X29uZV9ybGltaXQoUkxJTUlUX0ZTSVpFLCBjb25maWcucmxpbWl0X2ZzaXplLCAiUkxJTUlUX0ZTSVpFIik7CisgICAgaWYgKGNvbmZpZy5ybGltaXRfbm9maWxlX3NldCkKKyAgICAgICAgc2V0X29uZV9ybGltaXQoUkxJTUlUX05PRklMRSwgY29uZmlnLnJsaW1pdF9ub2ZpbGUsICJSTElNSVRfTk9GSUxFIik7CisgICAgaWYgKGNvbmZpZy5ybGltaXRfc3RhY2tfc2V0KQorICAgICAgICBzZXRfb25lX3JsaW1pdChSTElNSVRfU1RBQ0ssIGNvbmZpZy5ybGltaXRfc3RhY2ssICJSTElNSVRfU1RBQ0siKTsKKyNpZmRlZiBSTElNSVRfTlBST0MKKyAgICBpZiAoY29uZmlnLnJsaW1pdF9ucHJvY19zZXQpCisgICAgICAgIHNldF9vbmVfcmxpbWl0KFJMSU1JVF9OUFJPQywgY29uZmlnLnJsaW1pdF9ucHJvYywgIlJMSU1JVF9OUFJPQyIpOworI2VuZGlmCisKKyAgICAvKiB0aGUgc3lzY3RsKCkgY2FsbCBmcm9tIGlmYWNlLXBmcm91dGUuYyBuZWVkcyBsb2NrZWQgbWVtb3J5IG9uIEZyZWVCU0QgKi8KKyNpZiBkZWZpbmVkKFJMSU1JVF9NRU1MT0NLKSAmJiAhZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19GcmVlQlNEX2tlcm5lbF9fKQorICAgIC8qIFdlIGRvbid0IG5lZWQgbG9ja2VkIG1lbW9yeSAqLworICAgIHNldF9vbmVfcmxpbWl0KFJMSU1JVF9NRU1MT0NLLCAwLCAiUkxJTUlUX01FTUxPQ0siKTsKKyNlbmRpZgorfQorCisjZGVmaW5lIFJBTkRPTV9ERVZJQ0UgIi9kZXYvdXJhbmRvbSIKKworc3RhdGljIHZvaWQgaW5pdF9yYW5kX3NlZWQodm9pZCkgeworICAgIGludCBmZDsKKyAgICB1bnNpZ25lZCBzZWVkID0gMDsKKworICAgIC8qIFRyeSB0byBpbml0aWFsaXplIHNlZWQgZnJvbSAvZGV2L3VyYW5kb20sIHRvIG1ha2UgaXQgYSBsaXR0bGUKKyAgICAgKiBsZXNzIHByZWRpY3RhYmxlLCBhbmQgdG8gbWFrZSBzdXJlIHRoYXQgbXVsdGlwbGUgbWFjaGluZXMKKyAgICAgKiBib290ZWQgYXQgdGhlIHNhbWUgdGltZSBjaG9vc2UgZGlmZmVyZW50IHJhbmRvbSBzZWVkcy4gICovCisgICAgaWYgKChmZCA9IG9wZW4oUkFORE9NX0RFVklDRSwgT19SRE9OTFkpKSA+PSAwKSB7CisgICAgICAgIHJlYWQoZmQsICZzZWVkLCBzaXplb2Yoc2VlZCkpOworICAgICAgICBjbG9zZShmZCk7CisgICAgfQorCisgICAgLyogSWYgdGhlIGluaXRpYWxpemF0aW9uIGZhaWxlZCBieSBzb21lIHJlYXNvbiwgd2UgYWRkIHRoZSB0aW1lIHRvIHRoZSBzZWVkKi8KKyAgICBzZWVkIF49ICh1bnNpZ25lZCkgdGltZShOVUxMKTsKKworICAgIHNyYW5kKHNlZWQpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKSB7CisgICAgaW50IHIgPSAyNTU7CisgICAgaW50IHdyb3RlX3BpZF9maWxlID0gMDsKKworICAgIGF2YWhpX3NldF9sb2dfZnVuY3Rpb24obG9nX2Z1bmN0aW9uKTsKKworICAgIGluaXRfcmFuZF9zZWVkKCk7CisKKyAgICBhdmFoaV9zZXJ2ZXJfY29uZmlnX2luaXQoJmNvbmZpZy5zZXJ2ZXJfY29uZmlnKTsKKyAgICBjb25maWcuY29tbWFuZCA9IERBRU1PTl9SVU47CisgICAgY29uZmlnLmRhZW1vbml6ZSA9IDA7CisgICAgY29uZmlnLmNvbmZpZ19maWxlID0gTlVMTDsKKyNpZmRlZiBIQVZFX0RCVVMKKyAgICBjb25maWcuZW5hYmxlX2RidXMgPSAxOworICAgIGNvbmZpZy5mYWlsX29uX21pc3NpbmdfZGJ1cyA9IDE7CisgICAgY29uZmlnLm5fY2xpZW50c19tYXggPSAwOworICAgIGNvbmZpZy5uX29iamVjdHNfcGVyX2NsaWVudF9tYXggPSAwOworICAgIGNvbmZpZy5uX2VudHJpZXNfcGVyX2VudHJ5X2dyb3VwX21heCA9IDA7CisjZW5kaWYKKworICAgIGNvbmZpZy5kcm9wX3Jvb3QgPSAxOworICAgIGNvbmZpZy5zZXRfcmxpbWl0cyA9IDE7CisjaWZkZWYgRU5BQkxFX0NIUk9PVAorICAgIGNvbmZpZy51c2VfY2hyb290ID0gMTsKKyNlbmRpZgorICAgIGNvbmZpZy5tb2RpZnlfcHJvY190aXRsZSA9IDE7CisKKyAgICBjb25maWcuZGlzYWJsZV91c2VyX3NlcnZpY2VfcHVibGlzaGluZyA9IDA7CisgICAgY29uZmlnLnB1Ymxpc2hfZG5zX3NlcnZlcnMgPSBOVUxMOworICAgIGNvbmZpZy5wdWJsaXNoX3Jlc29sdl9jb25mID0gMDsKKyAgICBjb25maWcudXNlX3N5c2xvZyA9IDA7CisgICAgY29uZmlnLmRlYnVnID0gMDsKKyAgICBjb25maWcucmxpbWl0X2FzX3NldCA9IDA7CisgICAgY29uZmlnLnJsaW1pdF9jb3JlX3NldCA9IDA7CisgICAgY29uZmlnLnJsaW1pdF9kYXRhX3NldCA9IDA7CisgICAgY29uZmlnLnJsaW1pdF9mc2l6ZV9zZXQgPSAwOworICAgIGNvbmZpZy5ybGltaXRfbm9maWxlX3NldCA9IDA7CisgICAgY29uZmlnLnJsaW1pdF9zdGFja19zZXQgPSAwOworI2lmZGVmIFJMSU1JVF9OUFJPQworICAgIGNvbmZpZy5ybGltaXRfbnByb2Nfc2V0ID0gMDsKKyNlbmRpZgorCisgICAgaWYgKChhcmd2MCA9IHN0cnJjaHIoYXJndlswXSwgJy8nKSkpCisgICAgICAgIGFyZ3YwID0gYXZhaGlfc3RyZHVwKGFyZ3YwICsgMSk7CisgICAgZWxzZQorICAgICAgICBhcmd2MCA9IGF2YWhpX3N0cmR1cChhcmd2WzBdKTsKKworICAgIGRhZW1vbl9waWRfZmlsZV9pZGVudCA9IChjb25zdCBjaGFyICopIGFyZ3YwOworICAgIGRhZW1vbl9sb2dfaWRlbnQgPSAoY2hhciopIGFyZ3YwOworICAgIGRhZW1vbl9waWRfZmlsZV9wcm9jID0gcGlkX2ZpbGVfcHJvYzsKKworICAgIGlmIChwYXJzZV9jb21tYW5kX2xpbmUoJmNvbmZpZywgYXJnYywgYXJndikgPCAwKQorICAgICAgICBnb3RvIGZpbmlzaDsKKworICAgIGlmIChjb25maWcubW9kaWZ5X3Byb2NfdGl0bGUpCisgICAgICAgIGF2YWhpX2luaXRfcHJvY190aXRsZShhcmdjLCBhcmd2KTsKKworI2lmZGVmIEVOQUJMRV9DSFJPT1QKKyAgICBjb25maWcudXNlX2Nocm9vdCA9IGNvbmZpZy51c2VfY2hyb290ICYmIGNvbmZpZy5kcm9wX3Jvb3Q7CisjZW5kaWYKKworICAgIGlmIChjb25maWcuY29tbWFuZCA9PSBEQUVNT05fSEVMUCkgeworICAgICAgICBoZWxwKHN0ZG91dCk7CisgICAgICAgIHIgPSAwOworICAgIH0gZWxzZSBpZiAoY29uZmlnLmNvbW1hbmQgPT0gREFFTU9OX1ZFUlNJT04pIHsKKyAgICAgICAgcHJpbnRmKCIlcyAiUEFDS0FHRV9WRVJTSU9OIlxuIiwgYXJndjApOworICAgICAgICByID0gMDsKKyAgICB9IGVsc2UgaWYgKGNvbmZpZy5jb21tYW5kID09IERBRU1PTl9LSUxMKSB7CisgICAgICAgIGlmIChkYWVtb25fcGlkX2ZpbGVfa2lsbF93YWl0KFNJR1RFUk0sIDUpIDwgMCkgeworICAgICAgICAgICAgYXZhaGlfbG9nX3dhcm4oIkZhaWxlZCB0byBraWxsIGRhZW1vbjogJXMiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgZ290byBmaW5pc2g7CisgICAgICAgIH0KKworICAgICAgICByID0gMDsKKworICAgIH0gZWxzZSBpZiAoY29uZmlnLmNvbW1hbmQgPT0gREFFTU9OX1JFTE9BRCkgeworICAgICAgICBpZiAoZGFlbW9uX3BpZF9maWxlX2tpbGwoU0lHSFVQKSA8IDApIHsKKyAgICAgICAgICAgIGF2YWhpX2xvZ193YXJuKCJGYWlsZWQgdG8ga2lsbCBkYWVtb246ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgIGdvdG8gZmluaXNoOworICAgICAgICB9CisKKyAgICAgICAgciA9IDA7CisKKyAgICB9IGVsc2UgaWYgKGNvbmZpZy5jb21tYW5kID09IERBRU1PTl9DSEVDSykKKyAgICAgICAgciA9IChkYWVtb25fcGlkX2ZpbGVfaXNfcnVubmluZygpID49IDApID8gMCA6IDE7CisgICAgZWxzZSBpZiAoY29uZmlnLmNvbW1hbmQgPT0gREFFTU9OX1JVTikgeworICAgICAgICBwaWRfdCBwaWQ7CisKKyAgICAgICAgaWYgKGdldHVpZCgpICE9IDAgJiYgY29uZmlnLmRyb3Bfcm9vdCkgeworICAgICAgICAgICAgYXZhaGlfbG9nX2Vycm9yKCJUaGlzIHByb2dyYW0gaXMgaW50ZW5kZWQgdG8gYmUgcnVuIGFzIHJvb3QuIik7CisgICAgICAgICAgICBnb3RvIGZpbmlzaDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgocGlkID0gZGFlbW9uX3BpZF9maWxlX2lzX3J1bm5pbmcoKSkgPj0gMCkgeworICAgICAgICAgICAgYXZhaGlfbG9nX2Vycm9yKCJEYWVtb24gYWxyZWFkeSBydW5uaW5nIG9uIFBJRCAldSIsIHBpZCk7CisgICAgICAgICAgICBnb3RvIGZpbmlzaDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsb2FkX2NvbmZpZ19maWxlKCZjb25maWcpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZmluaXNoOworCisgICAgICAgIGlmIChjb25maWcuZGFlbW9uaXplKSB7CisgICAgICAgICAgICBkYWVtb25fcmV0dmFsX2luaXQoKTsKKworICAgICAgICAgICAgaWYgKChwaWQgPSBkYWVtb25fZm9yaygpKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBmaW5pc2g7CisgICAgICAgICAgICBlbHNlIGlmIChwaWQgIT0gMCkgeworICAgICAgICAgICAgICAgIGludCByZXQ7CisgICAgICAgICAgICAgICAgLyoqIFBhcmVudCAqKi8KKworICAgICAgICAgICAgICAgIGlmICgocmV0ID0gZGFlbW9uX3JldHZhbF93YWl0KDIwKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIGF2YWhpX2xvZ19lcnJvcigiQ291bGQgbm90IHJlY2VpdmUgcmV0dXJuIHZhbHVlIGZyb20gZGFlbW9uIHByb2Nlc3MuIik7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZmluaXNoOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHIgPSByZXQ7CisgICAgICAgICAgICAgICAgZ290byBmaW5pc2g7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIENoaWxkICovCisgICAgICAgIH0KKworICAgICAgICBpZiAoY29uZmlnLnVzZV9zeXNsb2cgfHwgY29uZmlnLmRhZW1vbml6ZSkKKyAgICAgICAgICAgIGRhZW1vbl9sb2dfdXNlID0gREFFTU9OX0xPR19TWVNMT0c7CisKKyAgICAgICAgaWYgKHNkX2xpc3Rlbl9mZHMoMCkgPD0gMCkKKyAgICAgICAgICAgIGlmIChkYWVtb25fY2xvc2VfYWxsKC0xKSA8IDApCisgICAgICAgICAgICAgICAgYXZhaGlfbG9nX3dhcm4oIkZhaWxlZCB0byBjbG9zZSBhbGwgcmVtYWluaW5nIGZpbGUgZGVzY3JpcHRvcnM6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKworICAgICAgICBkYWVtb25fcmVzZXRfc2lncygtMSk7CisgICAgICAgIGRhZW1vbl91bmJsb2NrX3NpZ3MoLTEpOworCisgICAgICAgIGlmIChtYWtlX3J1bnRpbWVfZGlyKCkgPCAwKQorICAgICAgICAgICAgZ290byBmaW5pc2g7CisKKyAgICAgICAgaWYgKGNvbmZpZy5kcm9wX3Jvb3QpIHsKKyNpZmRlZiBFTkFCTEVfQ0hST09UCisgICAgICAgICAgICBpZiAoY29uZmlnLnVzZV9jaHJvb3QpCisgICAgICAgICAgICAgICAgaWYgKGF2YWhpX2NhcHNfcmVkdWNlKCkgPCAwKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGZpbmlzaDsKKyNlbmRpZgorCisgICAgICAgICAgICBpZiAoZHJvcF9yb290KCkgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZmluaXNoOworCisjaWZkZWYgRU5BQkxFX0NIUk9PVAorICAgICAgICAgICAgaWYgKGNvbmZpZy51c2VfY2hyb290KQorICAgICAgICAgICAgICAgIGlmIChhdmFoaV9jYXBzX3JlZHVjZTIoKSA8IDApCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZmluaXNoOworI2VuZGlmCisgICAgICAgIH0KKworICAgICAgICBpZiAoZGFlbW9uX3BpZF9maWxlX2NyZWF0ZSgpIDwgMCkgeworICAgICAgICAgICAgYXZhaGlfbG9nX2Vycm9yKCJGYWlsZWQgdG8gY3JlYXRlIFBJRCBmaWxlOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisKKyAgICAgICAgICAgIGlmIChjb25maWcuZGFlbW9uaXplKQorICAgICAgICAgICAgICAgIGRhZW1vbl9yZXR2YWxfc2VuZCgxKTsKKyAgICAgICAgICAgIGdvdG8gZmluaXNoOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHdyb3RlX3BpZF9maWxlID0gMTsKKworICAgICAgICBpZiAoY29uZmlnLnNldF9ybGltaXRzKQorICAgICAgICAgICAgZW5mb3JjZV9ybGltaXRzKCk7CisKKyAgICAgICAgY2hkaXIoIi8iKTsKKworI2lmZGVmIEVOQUJMRV9DSFJPT1QKKyAgICAgICAgaWYgKGNvbmZpZy5kcm9wX3Jvb3QgJiYgY29uZmlnLnVzZV9jaHJvb3QpCisgICAgICAgICAgICBpZiAoYXZhaGlfY2hyb290X2hlbHBlcl9zdGFydChhcmd2MCkgPCAwKSB7CisgICAgICAgICAgICAgICAgYXZhaGlfbG9nX2Vycm9yKCJmYWlsZWQgdG8gc3RhcnQgY2hyb290KCkgaGVscGVyIGRhZW1vbi4iKTsKKyAgICAgICAgICAgICAgICBnb3RvIGZpbmlzaDsKKyAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBhdmFoaV9sb2dfaW5mbygiJXMgIlBBQ0tBR0VfVkVSU0lPTiIgc3RhcnRpbmcgdXAuIiwgYXJndjApOworICAgICAgICBzZF9ub3RpZnlmKDAsICJTVEFUVVM9JXMgIlBBQ0tBR0VfVkVSU0lPTiIgc3RhcnRpbmcgdXAuIiwgYXJndjApOworICAgICAgICBhdmFoaV9zZXRfcHJvY190aXRsZShhcmd2MCwgIiVzOiBzdGFydGluZyB1cCIsIGFyZ3YwKTsKKworICAgICAgICBpZiAocnVuX3NlcnZlcigmY29uZmlnKSA9PSAwKQorICAgICAgICAgICAgciA9IDA7CisKKyAgICAgICAgYXZhaGlfbG9nX2luZm8oIiVzICJQQUNLQUdFX1ZFUlNJT04iIGV4aXRpbmcuIiwgYXJndjApOworICAgICAgICBzZF9ub3RpZnlmKDAsICJTVEFUVVM9JXMgIlBBQ0tBR0VfVkVSU0lPTiIgZXhpdGluZy4iLCBhcmd2MCk7CisgICAgfQorCitmaW5pc2g6CisKKyAgICBpZiAoY29uZmlnLmRhZW1vbml6ZSkKKyAgICAgICAgZGFlbW9uX3JldHZhbF9kb25lKCk7CisKKyAgICBhdmFoaV9zZXJ2ZXJfY29uZmlnX2ZyZWUoJmNvbmZpZy5zZXJ2ZXJfY29uZmlnKTsKKyAgICBhdmFoaV9mcmVlKGNvbmZpZy5jb25maWdfZmlsZSk7CisgICAgYXZhaGlfc3RyZnJlZXYoY29uZmlnLnB1Ymxpc2hfZG5zX3NlcnZlcnMpOworICAgIGF2YWhpX3N0cmZyZWV2KHJlc29sdl9jb25mX25hbWVfc2VydmVycyk7CisgICAgYXZhaGlfc3RyZnJlZXYocmVzb2x2X2NvbmZfc2VhcmNoX2RvbWFpbnMpOworCisgICAgaWYgKHdyb3RlX3BpZF9maWxlKSB7CisjaWZkZWYgRU5BQkxFX0NIUk9PVAorICAgICAgICBhdmFoaV9jaHJvb3RfaGVscGVyX3VubGluayhwaWRfZmlsZV9wcm9jKCkpOworI2Vsc2UKKyAgICAgICAgZGFlbW9uX3BpZF9maWxlX3JlbW92ZSgpOworI2VuZGlmCisgICAgfQorCisjaWZkZWYgRU5BQkxFX0NIUk9PVAorICAgIGF2YWhpX2Nocm9vdF9oZWxwZXJfc2h1dGRvd24oKTsKKyNlbmRpZgorCisgICAgYXZhaGlfZnJlZShhcmd2MCk7CisKKyAgICByZXR1cm4gcjsKK30KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vbWFpbi5oIGIvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9tYWluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYwNGMyZAotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vbWFpbi5oCkBAIC0wLDAgKzEsMzEgQEAKKyNpZm5kZWYgZm9vbWFpbmhmb28KKyNkZWZpbmUgZm9vbWFpbmhmb28KKworLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisjaW5jbHVkZSA8YXZhaGktY29yZS9jb3JlLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL3NpbXBsZS13YXRjaC5oPgorCitleHRlcm4gQXZhaGlTZXJ2ZXIgKmF2YWhpX3NlcnZlcjsKK2V4dGVybiBBdmFoaVNpbXBsZVBvbGwgKnNpbXBsZV9wb2xsX2FwaTsKKworZXh0ZXJuIGludCBuc3Nfc3VwcG9ydDsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL29yZy5mcmVlZGVza3RvcC5BdmFoaS5BZGRyZXNzUmVzb2x2ZXIueG1sIGIvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9vcmcuZnJlZWRlc2t0b3AuQXZhaGkuQWRkcmVzc1Jlc29sdmVyLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWU5YzJmCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9vcmcuZnJlZWRlc2t0b3AuQXZhaGkuQWRkcmVzc1Jlc29sdmVyLnhtbApAQCAtMCwwICsxLDUwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIHN0YW5kYWxvbmU9J25vJz8+PCEtLSotbnhtbC0qLS0+Cis8P3htbC1zdHlsZXNoZWV0IHR5cGU9InRleHQveHNsIiBocmVmPSJpbnRyb3NwZWN0LnhzbCI/PgorPCFET0NUWVBFIG5vZGUgU1lTVEVNICJpbnRyb3NwZWN0LmR0ZCI+CisKKzwhLS0KKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAwMjExMS0xMzA3IFVTQS4KKy0tPgorCis8bm9kZT4KKworICA8aW50ZXJmYWNlIG5hbWU9Im9yZy5mcmVlZGVza3RvcC5EQnVzLkludHJvc3BlY3RhYmxlIj4KKyAgICA8bWV0aG9kIG5hbWU9IkludHJvc3BlY3QiPgorICAgICAgPGFyZyBuYW1lPSJkYXRhIiB0eXBlPSJzIiBkaXJlY3Rpb249Im91dCIgLz4KKyAgICA8L21ldGhvZD4KKyAgPC9pbnRlcmZhY2U+CisKKyAgPGludGVyZmFjZSBuYW1lPSJvcmcuZnJlZWRlc2t0b3AuQXZhaGkuQWRkcmVzc1Jlc29sdmVyIj4KKworICAgIDxtZXRob2QgbmFtZT0iRnJlZSIvPgorCisgICAgPHNpZ25hbCBuYW1lPSJGb3VuZCI+CisgICAgICA8YXJnIG5hbWU9ImludGVyZmFjZSIgdHlwZT0iaSIgZGlyZWN0aW9uPSJvdXQiLz4KKyAgICAgIDxhcmcgbmFtZT0icHJvdG9jb2wiIHR5cGU9ImkiIGRpcmVjdGlvbj0ib3V0Ii8+CisgICAgICA8YXJnIG5hbWU9ImFwcm90b2NvbCIgdHlwZT0iaSIgZGlyZWN0aW9uPSJvdXQiLz4KKyAgICAgIDxhcmcgbmFtZT0iYWRkcmVzcyIgdHlwZT0icyIgZGlyZWN0aW9uPSJvdXQiLz4KKyAgICAgIDxhcmcgbmFtZT0ibmFtZSIgdHlwZT0icyIgZGlyZWN0aW9uPSJvdXQiLz4KKyAgICAgIDxhcmcgbmFtZT0iZmxhZ3MiIHR5cGU9InUiIGRpcmVjdGlvbj0ib3V0Ii8+CisgICAgPC9zaWduYWw+CisKKyAgICA8c2lnbmFsIG5hbWU9IkZhaWx1cmUiPgorICAgICAgPGFyZyBuYW1lPSJlcnJvciIgdHlwZT0icyIvPgorICAgIDwvc2lnbmFsPgorCisgIDwvaW50ZXJmYWNlPgorPC9ub2RlPgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9vcmcuZnJlZWRlc2t0b3AuQXZhaGkuRG9tYWluQnJvd3Nlci54bWwgYi9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL29yZy5mcmVlZGVza3RvcC5BdmFoaS5Eb21haW5Ccm93c2VyLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmM2MTRlCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9vcmcuZnJlZWRlc2t0b3AuQXZhaGkuRG9tYWluQnJvd3Nlci54bWwKQEAgLTAsMCArMSw1OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSdubyc/PjwhLS0qLW54bWwtKi0tPgorPD94bWwtc3R5bGVzaGVldCB0eXBlPSJ0ZXh0L3hzbCIgaHJlZj0iaW50cm9zcGVjdC54c2wiPz4KKzwhRE9DVFlQRSBub2RlIFNZU1RFTSAiaW50cm9zcGVjdC5kdGQiPgorCis8IS0tCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgMDIxMTEtMTMwNyBVU0EuCistLT4KKworPG5vZGU+CisKKyAgPGludGVyZmFjZSBuYW1lPSJvcmcuZnJlZWRlc2t0b3AuREJ1cy5JbnRyb3NwZWN0YWJsZSI+CisgICAgPG1ldGhvZCBuYW1lPSJJbnRyb3NwZWN0Ij4KKyAgICAgIDxhcmcgbmFtZT0iZGF0YSIgdHlwZT0icyIgZGlyZWN0aW9uPSJvdXQiIC8+CisgICAgPC9tZXRob2Q+CisgIDwvaW50ZXJmYWNlPgorCisgIDxpbnRlcmZhY2UgbmFtZT0ib3JnLmZyZWVkZXNrdG9wLkF2YWhpLkRvbWFpbkJyb3dzZXIiPgorCisgICAgPG1ldGhvZCBuYW1lPSJGcmVlIi8+CisKKyAgICA8c2lnbmFsIG5hbWU9Ikl0ZW1OZXciPgorICAgICAgPGFyZyBuYW1lPSJpbnRlcmZhY2UiIHR5cGU9ImkiLz4KKyAgICAgIDxhcmcgbmFtZT0icHJvdG9jb2wiIHR5cGU9ImkiLz4KKyAgICAgIDxhcmcgbmFtZT0iZG9tYWluIiB0eXBlPSJzIi8+CisgICAgICA8YXJnIG5hbWU9ImZsYWdzIiB0eXBlPSJ1Ii8+CisgICAgPC9zaWduYWw+CisKKyAgICA8c2lnbmFsIG5hbWU9Ikl0ZW1SZW1vdmUiPgorICAgICAgPGFyZyBuYW1lPSJpbnRlcmZhY2UiIHR5cGU9ImkiLz4KKyAgICAgIDxhcmcgbmFtZT0icHJvdG9jb2wiIHR5cGU9ImkiLz4KKyAgICAgIDxhcmcgbmFtZT0iZG9tYWluIiB0eXBlPSJzIi8+CisgICAgICA8YXJnIG5hbWU9ImZsYWdzIiB0eXBlPSJ1Ii8+CisgICAgPC9zaWduYWw+CisKKyAgICA8c2lnbmFsIG5hbWU9IkZhaWx1cmUiPgorICAgICAgPGFyZyBuYW1lPSJlcnJvciIgdHlwZT0icyIvPgorICAgIDwvc2lnbmFsPgorCisgICAgPHNpZ25hbCBuYW1lPSJBbGxGb3JOb3ciLz4KKworICAgIDxzaWduYWwgbmFtZT0iQ2FjaGVFeGhhdXN0ZWQiLz4KKworICA8L2ludGVyZmFjZT4KKzwvbm9kZT4KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vb3JnLmZyZWVkZXNrdG9wLkF2YWhpLkVudHJ5R3JvdXAueG1sIGIvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9vcmcuZnJlZWRlc2t0b3AuQXZhaGkuRW50cnlHcm91cC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNmZDYzYwotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vb3JnLmZyZWVkZXNrdG9wLkF2YWhpLkVudHJ5R3JvdXAueG1sCkBAIC0wLDAgKzEsMTAxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIHN0YW5kYWxvbmU9J25vJz8+PCEtLSotbnhtbC0qLS0+Cis8P3htbC1zdHlsZXNoZWV0IHR5cGU9InRleHQveHNsIiBocmVmPSJpbnRyb3NwZWN0LnhzbCI/PgorPCFET0NUWVBFIG5vZGUgU1lTVEVNICJpbnRyb3NwZWN0LmR0ZCI+CisKKzwhLS0KKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAwMjExMS0xMzA3IFVTQS4KKy0tPgorCis8bm9kZT4KKworICA8aW50ZXJmYWNlIG5hbWU9Im9yZy5mcmVlZGVza3RvcC5EQnVzLkludHJvc3BlY3RhYmxlIj4KKyAgICA8bWV0aG9kIG5hbWU9IkludHJvc3BlY3QiPgorICAgICAgPGFyZyBuYW1lPSJkYXRhIiB0eXBlPSJzIiBkaXJlY3Rpb249Im91dCIvPgorICAgIDwvbWV0aG9kPgorICA8L2ludGVyZmFjZT4KKworICA8aW50ZXJmYWNlIG5hbWU9Im9yZy5mcmVlZGVza3RvcC5BdmFoaS5FbnRyeUdyb3VwIj4KKyAgICA8bWV0aG9kIG5hbWU9IkZyZWUiLz4KKyAgICA8bWV0aG9kIG5hbWU9IkNvbW1pdCIvPgorICAgIDxtZXRob2QgbmFtZT0iUmVzZXQiLz4KKworICAgIDxtZXRob2QgbmFtZT0iR2V0U3RhdGUiPgorICAgICAgPGFyZyBuYW1lPSJzdGF0ZSIgdHlwZT0iaSIgZGlyZWN0aW9uPSJvdXQiLz4KKyAgICA8L21ldGhvZD4KKworICAgIDxzaWduYWwgbmFtZT0iU3RhdGVDaGFuZ2VkIj4KKyAgICAgIDxhcmcgbmFtZT0ic3RhdGUiIHR5cGU9ImkiLz4KKyAgICAgIDxhcmcgbmFtZT0iZXJyb3IiIHR5cGU9InMiLz4KKyAgICA8L3NpZ25hbD4KKworICAgIDxtZXRob2QgbmFtZT0iSXNFbXB0eSI+CisgICAgICA8YXJnIG5hbWU9ImVtcHR5IiB0eXBlPSJiIiBkaXJlY3Rpb249Im91dCIvPgorICAgIDwvbWV0aG9kPgorCisgICAgPG1ldGhvZCBuYW1lPSJBZGRTZXJ2aWNlIj4KKyAgICAgIDxhcmcgbmFtZT0iaW50ZXJmYWNlIiB0eXBlPSJpIiBkaXJlY3Rpb249ImluIi8+CisgICAgICA8YXJnIG5hbWU9InByb3RvY29sIiB0eXBlPSJpIiBkaXJlY3Rpb249ImluIi8+CisgICAgICA8YXJnIG5hbWU9ImZsYWdzIiB0eXBlPSJ1IiBkaXJlY3Rpb249ImluIi8+CisgICAgICA8YXJnIG5hbWU9Im5hbWUiIHR5cGU9InMiIGRpcmVjdGlvbj0iaW4iLz4KKyAgICAgIDxhcmcgbmFtZT0idHlwZSIgdHlwZT0icyIgZGlyZWN0aW9uPSJpbiIvPgorICAgICAgPGFyZyBuYW1lPSJkb21haW4iIHR5cGU9InMiIGRpcmVjdGlvbj0iaW4iLz4KKyAgICAgIDxhcmcgbmFtZT0iaG9zdCIgdHlwZT0icyIgZGlyZWN0aW9uPSJpbiIvPgorICAgICAgPGFyZyBuYW1lPSJwb3J0IiB0eXBlPSJxIiBkaXJlY3Rpb249ImluIi8+CisgICAgICA8YXJnIG5hbWU9InR4dCIgdHlwZT0iYWF5IiBkaXJlY3Rpb249ImluIi8+CisgICAgPC9tZXRob2Q+CisKKyAgICA8bWV0aG9kIG5hbWU9IkFkZFNlcnZpY2VTdWJ0eXBlIj4KKyAgICAgIDxhcmcgbmFtZT0iaW50ZXJmYWNlIiB0eXBlPSJpIiBkaXJlY3Rpb249ImluIi8+CisgICAgICA8YXJnIG5hbWU9InByb3RvY29sIiB0eXBlPSJpIiBkaXJlY3Rpb249ImluIi8+CisgICAgICA8YXJnIG5hbWU9ImZsYWdzIiB0eXBlPSJ1IiBkaXJlY3Rpb249ImluIi8+CisgICAgICA8YXJnIG5hbWU9Im5hbWUiIHR5cGU9InMiIGRpcmVjdGlvbj0iaW4iLz4KKyAgICAgIDxhcmcgbmFtZT0idHlwZSIgdHlwZT0icyIgZGlyZWN0aW9uPSJpbiIvPgorICAgICAgPGFyZyBuYW1lPSJkb21haW4iIHR5cGU9InMiIGRpcmVjdGlvbj0iaW4iLz4KKyAgICAgIDxhcmcgbmFtZT0ic3VidHlwZSIgdHlwZT0icyIgZGlyZWN0aW9uPSJpbiIvPgorICAgIDwvbWV0aG9kPgorCisgICAgPG1ldGhvZCBuYW1lPSJVcGRhdGVTZXJ2aWNlVHh0Ij4KKyAgICAgIDxhcmcgbmFtZT0iaW50ZXJmYWNlIiB0eXBlPSJpIiBkaXJlY3Rpb249ImluIi8+CisgICAgICA8YXJnIG5hbWU9InByb3RvY29sIiB0eXBlPSJpIiBkaXJlY3Rpb249ImluIi8+CisgICAgICA8YXJnIG5hbWU9ImZsYWdzIiB0eXBlPSJ1IiBkaXJlY3Rpb249ImluIi8+CisgICAgICA8YXJnIG5hbWU9Im5hbWUiIHR5cGU9InMiIGRpcmVjdGlvbj0iaW4iLz4KKyAgICAgIDxhcmcgbmFtZT0idHlwZSIgdHlwZT0icyIgZGlyZWN0aW9uPSJpbiIvPgorICAgICAgPGFyZyBuYW1lPSJkb21haW4iIHR5cGU9InMiIGRpcmVjdGlvbj0iaW4iLz4KKyAgICAgIDxhcmcgbmFtZT0idHh0IiB0eXBlPSJhYXkiIGRpcmVjdGlvbj0iaW4iLz4KKyAgICA8L21ldGhvZD4KKworICAgIDxtZXRob2QgbmFtZT0iQWRkQWRkcmVzcyI+CisgICAgICA8YXJnIG5hbWU9ImludGVyZmFjZSIgdHlwZT0iaSIgZGlyZWN0aW9uPSJpbiIvPgorICAgICAgPGFyZyBuYW1lPSJwcm90b2NvbCIgdHlwZT0iaSIgZGlyZWN0aW9uPSJpbiIvPgorICAgICAgPGFyZyBuYW1lPSJmbGFncyIgdHlwZT0idSIgZGlyZWN0aW9uPSJpbiIvPgorICAgICAgPGFyZyBuYW1lPSJuYW1lIiB0eXBlPSJzIiBkaXJlY3Rpb249ImluIi8+CisgICAgICA8YXJnIG5hbWU9ImFkZHJlc3MiIHR5cGU9InMiIGRpcmVjdGlvbj0iaW4iLz4KKyAgICA8L21ldGhvZD4KKworICAgIDxtZXRob2QgbmFtZT0iQWRkUmVjb3JkIj4KKyAgICAgIDxhcmcgbmFtZT0iaW50ZXJmYWNlIiB0eXBlPSJpIiBkaXJlY3Rpb249ImluIi8+CisgICAgICA8YXJnIG5hbWU9InByb3RvY29sIiB0eXBlPSJpIiBkaXJlY3Rpb249ImluIi8+CisgICAgICA8YXJnIG5hbWU9ImZsYWdzIiB0eXBlPSJ1IiBkaXJlY3Rpb249ImluIi8+CisgICAgICA8YXJnIG5hbWU9Im5hbWUiIHR5cGU9InMiIGRpcmVjdGlvbj0iaW4iLz4KKyAgICAgIDxhcmcgbmFtZT0iY2xhenoiIHR5cGU9InEiIGRpcmVjdGlvbj0iaW4iLz4KKyAgICAgIDxhcmcgbmFtZT0idHlwZSIgdHlwZT0icSIgZGlyZWN0aW9uPSJpbiIvPgorICAgICAgPGFyZyBuYW1lPSJ0dGwiIHR5cGU9InUiIGRpcmVjdGlvbj0iaW4iLz4KKyAgICAgIDxhcmcgbmFtZT0icmRhdGEiIHR5cGU9ImF5IiBkaXJlY3Rpb249ImluIi8+CisgICAgPC9tZXRob2Q+CisgIDwvaW50ZXJmYWNlPgorPC9ub2RlPgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9vcmcuZnJlZWRlc2t0b3AuQXZhaGkuSG9zdE5hbWVSZXNvbHZlci54bWwgYi9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL29yZy5mcmVlZGVza3RvcC5BdmFoaS5Ib3N0TmFtZVJlc29sdmVyLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjQzNzUyCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9vcmcuZnJlZWRlc2t0b3AuQXZhaGkuSG9zdE5hbWVSZXNvbHZlci54bWwKQEAgLTAsMCArMSw1MCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSdubyc/PjwhLS0qLW54bWwtKi0tPgorPD94bWwtc3R5bGVzaGVldCB0eXBlPSJ0ZXh0L3hzbCIgaHJlZj0iaW50cm9zcGVjdC54c2wiPz4KKzwhRE9DVFlQRSBub2RlIFNZU1RFTSAiaW50cm9zcGVjdC5kdGQiPgorCis8IS0tCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgMDIxMTEtMTMwNyBVU0EuCistLT4KKworPG5vZGU+CisKKyAgPGludGVyZmFjZSBuYW1lPSJvcmcuZnJlZWRlc2t0b3AuREJ1cy5JbnRyb3NwZWN0YWJsZSI+CisgICAgPG1ldGhvZCBuYW1lPSJJbnRyb3NwZWN0Ij4KKyAgICAgIDxhcmcgbmFtZT0iZGF0YSIgdHlwZT0icyIgZGlyZWN0aW9uPSJvdXQiIC8+CisgICAgPC9tZXRob2Q+CisgIDwvaW50ZXJmYWNlPgorCisgIDxpbnRlcmZhY2UgbmFtZT0ib3JnLmZyZWVkZXNrdG9wLkF2YWhpLkhvc3ROYW1lUmVzb2x2ZXIiPgorCisgICAgPG1ldGhvZCBuYW1lPSJGcmVlIi8+CisKKyAgICA8c2lnbmFsIG5hbWU9IkZvdW5kIj4KKyAgICAgIDxhcmcgbmFtZT0iaW50ZXJmYWNlIiB0eXBlPSJpIiBkaXJlY3Rpb249Im91dCIvPgorICAgICAgPGFyZyBuYW1lPSJwcm90b2NvbCIgdHlwZT0iaSIgZGlyZWN0aW9uPSJvdXQiLz4KKyAgICAgIDxhcmcgbmFtZT0ibmFtZSIgdHlwZT0icyIgZGlyZWN0aW9uPSJvdXQiLz4KKyAgICAgIDxhcmcgbmFtZT0iYXByb3RvY29sIiB0eXBlPSJpIiBkaXJlY3Rpb249Im91dCIvPgorICAgICAgPGFyZyBuYW1lPSJhZGRyZXNzIiB0eXBlPSJzIiBkaXJlY3Rpb249Im91dCIvPgorICAgICAgPGFyZyBuYW1lPSJmbGFncyIgdHlwZT0idSIgZGlyZWN0aW9uPSJvdXQiLz4KKyAgICA8L3NpZ25hbD4KKworICAgIDxzaWduYWwgbmFtZT0iRmFpbHVyZSI+CisgICAgICA8YXJnIG5hbWU9ImVycm9yIiB0eXBlPSJzIi8+CisgICAgPC9zaWduYWw+CisKKyAgPC9pbnRlcmZhY2U+Cis8L25vZGU+CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL29yZy5mcmVlZGVza3RvcC5BdmFoaS5SZWNvcmRCcm93c2VyLnhtbCBiL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vb3JnLmZyZWVkZXNrdG9wLkF2YWhpLlJlY29yZEJyb3dzZXIueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYTg2ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL29yZy5mcmVlZGVza3RvcC5BdmFoaS5SZWNvcmRCcm93c2VyLnhtbApAQCAtMCwwICsxLDY1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIHN0YW5kYWxvbmU9J25vJz8+PCEtLSotbnhtbC0qLS0+Cis8P3htbC1zdHlsZXNoZWV0IHR5cGU9InRleHQveHNsIiBocmVmPSJpbnRyb3NwZWN0LnhzbCI/PgorPCFET0NUWVBFIG5vZGUgU1lTVEVNICJpbnRyb3NwZWN0LmR0ZCI+CisKKzwhLS0KKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAwMjExMS0xMzA3IFVTQS4KKy0tPgorCis8bm9kZT4KKworICA8aW50ZXJmYWNlIG5hbWU9Im9yZy5mcmVlZGVza3RvcC5EQnVzLkludHJvc3BlY3RhYmxlIj4KKyAgICA8bWV0aG9kIG5hbWU9IkludHJvc3BlY3QiPgorICAgICAgPGFyZyBuYW1lPSJkYXRhIiB0eXBlPSJzIiBkaXJlY3Rpb249Im91dCIgLz4KKyAgICA8L21ldGhvZD4KKyAgPC9pbnRlcmZhY2U+CisKKyAgPGludGVyZmFjZSBuYW1lPSJvcmcuZnJlZWRlc2t0b3AuQXZhaGkuUmVjb3JkQnJvd3NlciI+CisKKyAgICA8bWV0aG9kIG5hbWU9IkZyZWUiLz4KKworICAgIDxzaWduYWwgbmFtZT0iSXRlbU5ldyI+CisgICAgICA8YXJnIG5hbWU9ImludGVyZmFjZSIgdHlwZT0iaSIvPgorICAgICAgPGFyZyBuYW1lPSJwcm90b2NvbCIgdHlwZT0iaSIvPgorICAgICAgPGFyZyBuYW1lPSJuYW1lIiB0eXBlPSJzIi8+CisgICAgICA8YXJnIG5hbWU9ImNsYXp6IiB0eXBlPSJxIi8+CisgICAgICA8YXJnIG5hbWU9InR5cGUiIHR5cGU9InEiLz4KKyAgICAgIDxhcmcgbmFtZT0icmRhdGEiIHR5cGU9ImF5Ii8+CisgICAgICA8YXJnIG5hbWU9ImZsYWdzIiB0eXBlPSJ1Ii8+CisgICAgPC9zaWduYWw+CisKKyAgICA8c2lnbmFsIG5hbWU9Ikl0ZW1SZW1vdmUiPgorICAgICAgPGFyZyBuYW1lPSJpbnRlcmZhY2UiIHR5cGU9ImkiLz4KKyAgICAgIDxhcmcgbmFtZT0icHJvdG9jb2wiIHR5cGU9ImkiLz4KKyAgICAgIDxhcmcgbmFtZT0ibmFtZSIgdHlwZT0icyIvPgorICAgICAgPGFyZyBuYW1lPSJjbGF6eiIgdHlwZT0icSIvPgorICAgICAgPGFyZyBuYW1lPSJ0eXBlIiB0eXBlPSJxIi8+CisgICAgICA8YXJnIG5hbWU9InJkYXRhIiB0eXBlPSJheSIvPgorICAgICAgPGFyZyBuYW1lPSJmbGFncyIgdHlwZT0idSIvPgorICAgIDwvc2lnbmFsPgorCisgICAgPHNpZ25hbCBuYW1lPSJGYWlsdXJlIj4KKyAgICAgIDxhcmcgbmFtZT0iZXJyb3IiIHR5cGU9InMiLz4KKyAgICA8L3NpZ25hbD4KKworICAgIDxzaWduYWwgbmFtZT0iQWxsRm9yTm93Ii8+CisKKyAgICA8c2lnbmFsIG5hbWU9IkNhY2hlRXhoYXVzdGVkIi8+CisKKyAgPC9pbnRlcmZhY2U+Cis8L25vZGU+CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL29yZy5mcmVlZGVza3RvcC5BdmFoaS5TZXJ2ZXIueG1sIGIvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9vcmcuZnJlZWRlc2t0b3AuQXZhaGkuU2VydmVyLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjkxMjc0Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9vcmcuZnJlZWRlc2t0b3AuQXZhaGkuU2VydmVyLnhtbApAQCAtMCwwICsxLDIxOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSdubyc/PjwhLS0qLW54bWwtKi0tPgorPD94bWwtc3R5bGVzaGVldCB0eXBlPSJ0ZXh0L3hzbCIgaHJlZj0iaW50cm9zcGVjdC54c2wiPz4KKzwhRE9DVFlQRSBub2RlIFNZU1RFTSAiaW50cm9zcGVjdC5kdGQiPgorCis8IS0tCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgMDIxMTEtMTMwNyBVU0EuCistLT4KKworPG5vZGU+CisKKyA8aW50ZXJmYWNlIG5hbWU9Im9yZy5mcmVlZGVza3RvcC5EQnVzLkludHJvc3BlY3RhYmxlIj4KKyAgICA8bWV0aG9kIG5hbWU9IkludHJvc3BlY3QiPgorICAgICAgPGFyZyBuYW1lPSJkYXRhIiB0eXBlPSJzIiBkaXJlY3Rpb249Im91dCIvPgorICAgIDwvbWV0aG9kPgorICA8L2ludGVyZmFjZT4KKworICA8aW50ZXJmYWNlIG5hbWU9Im9yZy5mcmVlZGVza3RvcC5BdmFoaS5TZXJ2ZXIiPgorCisgICAgPG1ldGhvZCBuYW1lPSJHZXRWZXJzaW9uU3RyaW5nIj4KKyAgICAgIDxhcmcgbmFtZT0idmVyc2lvbiIgdHlwZT0icyIgZGlyZWN0aW9uPSJvdXQiLz4KKyAgICA8L21ldGhvZD4KKworICAgIDxtZXRob2QgbmFtZT0iR2V0QVBJVmVyc2lvbiI+CisgICAgICA8YXJnIG5hbWU9InZlcnNpb24iIHR5cGU9InUiIGRpcmVjdGlvbj0ib3V0Ii8+CisgICAgPC9tZXRob2Q+CisKKyAgICA8bWV0aG9kIG5hbWU9IkdldEhvc3ROYW1lIj4KKyAgICAgIDxhcmcgbmFtZT0ibmFtZSIgdHlwZT0icyIgZGlyZWN0aW9uPSJvdXQiLz4KKyAgICA8L21ldGhvZD4KKyAgICA8bWV0aG9kIG5hbWU9IlNldEhvc3ROYW1lIj4KKyAgICAgIDxhcmcgbmFtZT0ibmFtZSIgdHlwZT0icyIgZGlyZWN0aW9uPSJpbiIvPgorICAgIDwvbWV0aG9kPgorICAgIDxtZXRob2QgbmFtZT0iR2V0SG9zdE5hbWVGcWRuIj4KKyAgICAgIDxhcmcgbmFtZT0ibmFtZSIgdHlwZT0icyIgZGlyZWN0aW9uPSJvdXQiLz4KKyAgICA8L21ldGhvZD4KKyAgICA8bWV0aG9kIG5hbWU9IkdldERvbWFpbk5hbWUiPgorICAgICAgPGFyZyBuYW1lPSJuYW1lIiB0eXBlPSJzIiBkaXJlY3Rpb249Im91dCIvPgorICAgIDwvbWV0aG9kPgorCisgICAgPG1ldGhvZCBuYW1lPSJJc05TU1N1cHBvcnRBdmFpbGFibGUiPgorICAgICAgPGFyZyBuYW1lPSJ5ZXMiIHR5cGU9ImIiIGRpcmVjdGlvbj0ib3V0Ii8+CisgICAgPC9tZXRob2Q+CisKKyAgICA8bWV0aG9kIG5hbWU9IkdldFN0YXRlIj4KKyAgICAgIDxhcmcgbmFtZT0ic3RhdGUiIHR5cGU9ImkiIGRpcmVjdGlvbj0ib3V0Ii8+CisgICAgPC9tZXRob2Q+CisKKyAgICA8c2lnbmFsIG5hbWU9IlN0YXRlQ2hhbmdlZCI+CisgICAgICA8YXJnIG5hbWU9InN0YXRlIiB0eXBlPSJpIi8+CisgICAgICA8YXJnIG5hbWU9ImVycm9yIiB0eXBlPSJzIi8+CisgICAgPC9zaWduYWw+CisKKyAgICA8bWV0aG9kIG5hbWU9IkdldExvY2FsU2VydmljZUNvb2tpZSI+CisgICAgICA8YXJnIG5hbWU9ImNvb2tpZSIgdHlwZT0idSIgZGlyZWN0aW9uPSJvdXQiLz4KKyAgICA8L21ldGhvZD4KKworICAgIDxtZXRob2QgbmFtZT0iR2V0QWx0ZXJuYXRpdmVIb3N0TmFtZSI+CisgICAgICA8YXJnIG5hbWU9Im5hbWUiIHR5cGU9InMiIGRpcmVjdGlvbj0iaW4iLz4KKyAgICAgIDxhcmcgbmFtZT0ibmFtZSIgdHlwZT0icyIgZGlyZWN0aW9uPSJvdXQiLz4KKyAgICA8L21ldGhvZD4KKworICAgIDxtZXRob2QgbmFtZT0iR2V0QWx0ZXJuYXRpdmVTZXJ2aWNlTmFtZSI+CisgICAgICA8YXJnIG5hbWU9Im5hbWUiIHR5cGU9InMiIGRpcmVjdGlvbj0iaW4iLz4KKyAgICAgIDxhcmcgbmFtZT0ibmFtZSIgdHlwZT0icyIgZGlyZWN0aW9uPSJvdXQiLz4KKyAgICA8L21ldGhvZD4KKworICAgIDxtZXRob2QgbmFtZT0iR2V0TmV0d29ya0ludGVyZmFjZU5hbWVCeUluZGV4Ij4KKyAgICAgIDxhcmcgbmFtZT0iaW5kZXgiIHR5cGU9ImkiIGRpcmVjdGlvbj0iaW4iLz4KKyAgICAgIDxhcmcgbmFtZT0ibmFtZSIgdHlwZT0icyIgZGlyZWN0aW9uPSJvdXQiLz4KKyAgICA8L21ldGhvZD4KKyAgICA8bWV0aG9kIG5hbWU9IkdldE5ldHdvcmtJbnRlcmZhY2VJbmRleEJ5TmFtZSI+CisgICAgICA8YXJnIG5hbWU9Im5hbWUiIHR5cGU9InMiIGRpcmVjdGlvbj0iaW4iLz4KKyAgICAgIDxhcmcgbmFtZT0iaW5kZXgiIHR5cGU9ImkiIGRpcmVjdGlvbj0ib3V0Ii8+CisgICAgPC9tZXRob2Q+CisKKyAgICA8bWV0aG9kIG5hbWU9IlJlc29sdmVIb3N0TmFtZSI+CisgICAgICA8YXJnIG5hbWU9ImludGVyZmFjZSIgdHlwZT0iaSIgZGlyZWN0aW9uPSJpbiIvPgorICAgICAgPGFyZyBuYW1lPSJwcm90b2NvbCIgdHlwZT0iaSIgZGlyZWN0aW9uPSJpbiIvPgorICAgICAgPGFyZyBuYW1lPSJuYW1lIiB0eXBlPSJzIiBkaXJlY3Rpb249ImluIi8+CisgICAgICA8YXJnIG5hbWU9ImFwcm90b2NvbCIgdHlwZT0iaSIgZGlyZWN0aW9uPSJpbiIvPgorICAgICAgPGFyZyBuYW1lPSJmbGFncyIgdHlwZT0idSIgZGlyZWN0aW9uPSJpbiIvPgorCisgICAgICA8YXJnIG5hbWU9ImludGVyZmFjZSIgdHlwZT0iaSIgZGlyZWN0aW9uPSJvdXQiLz4KKyAgICAgIDxhcmcgbmFtZT0icHJvdG9jb2wiIHR5cGU9ImkiIGRpcmVjdGlvbj0ib3V0Ii8+CisgICAgICA8YXJnIG5hbWU9Im5hbWUiIHR5cGU9InMiIGRpcmVjdGlvbj0ib3V0Ii8+CisgICAgICA8YXJnIG5hbWU9ImFwcm90b2NvbCIgdHlwZT0iaSIgZGlyZWN0aW9uPSJvdXQiLz4KKyAgICAgIDxhcmcgbmFtZT0iYWRkcmVzcyIgdHlwZT0icyIgZGlyZWN0aW9uPSJvdXQiLz4KKyAgICAgIDxhcmcgbmFtZT0iZmxhZ3MiIHR5cGU9InUiIGRpcmVjdGlvbj0ib3V0Ii8+CisgICAgPC9tZXRob2Q+CisKKyAgICA8bWV0aG9kIG5hbWU9IlJlc29sdmVBZGRyZXNzIj4KKyAgICAgIDxhcmcgbmFtZT0iaW50ZXJmYWNlIiB0eXBlPSJpIiBkaXJlY3Rpb249ImluIi8+CisgICAgICA8YXJnIG5hbWU9InByb3RvY29sIiB0eXBlPSJpIiBkaXJlY3Rpb249ImluIi8+CisgICAgICA8YXJnIG5hbWU9ImFkZHJlc3MiIHR5cGU9InMiIGRpcmVjdGlvbj0iaW4iLz4KKyAgICAgIDxhcmcgbmFtZT0iZmxhZ3MiIHR5cGU9InUiIGRpcmVjdGlvbj0iaW4iLz4KKworICAgICAgPGFyZyBuYW1lPSJpbnRlcmZhY2UiIHR5cGU9ImkiIGRpcmVjdGlvbj0ib3V0Ii8+CisgICAgICA8YXJnIG5hbWU9InByb3RvY29sIiB0eXBlPSJpIiBkaXJlY3Rpb249Im91dCIvPgorICAgICAgPGFyZyBuYW1lPSJhcHJvdG9jb2wiIHR5cGU9ImkiIGRpcmVjdGlvbj0ib3V0Ii8+CisgICAgICA8YXJnIG5hbWU9ImFkZHJlc3MiIHR5cGU9InMiIGRpcmVjdGlvbj0ib3V0Ii8+CisgICAgICA8YXJnIG5hbWU9Im5hbWUiIHR5cGU9InMiIGRpcmVjdGlvbj0ib3V0Ii8+CisgICAgICA8YXJnIG5hbWU9ImZsYWdzIiB0eXBlPSJ1IiBkaXJlY3Rpb249Im91dCIvPgorICAgIDwvbWV0aG9kPgorCisgICAgPG1ldGhvZCBuYW1lPSJSZXNvbHZlU2VydmljZSI+CisgICAgICA8YXJnIG5hbWU9ImludGVyZmFjZSIgdHlwZT0iaSIgZGlyZWN0aW9uPSJpbiIvPgorICAgICAgPGFyZyBuYW1lPSJwcm90b2NvbCIgdHlwZT0iaSIgZGlyZWN0aW9uPSJpbiIvPgorICAgICAgPGFyZyBuYW1lPSJuYW1lIiB0eXBlPSJzIiBkaXJlY3Rpb249ImluIi8+CisgICAgICA8YXJnIG5hbWU9InR5cGUiIHR5cGU9InMiIGRpcmVjdGlvbj0iaW4iLz4KKyAgICAgIDxhcmcgbmFtZT0iZG9tYWluIiB0eXBlPSJzIiBkaXJlY3Rpb249ImluIi8+CisgICAgICA8YXJnIG5hbWU9ImFwcm90b2NvbCIgdHlwZT0iaSIgZGlyZWN0aW9uPSJpbiIvPgorICAgICAgPGFyZyBuYW1lPSJmbGFncyIgdHlwZT0idSIgZGlyZWN0aW9uPSJpbiIvPgorCisgICAgICA8YXJnIG5hbWU9ImludGVyZmFjZSIgdHlwZT0iaSIgZGlyZWN0aW9uPSJvdXQiLz4KKyAgICAgIDxhcmcgbmFtZT0icHJvdG9jb2wiIHR5cGU9ImkiIGRpcmVjdGlvbj0ib3V0Ii8+CisgICAgICA8YXJnIG5hbWU9Im5hbWUiIHR5cGU9InMiIGRpcmVjdGlvbj0ib3V0Ii8+CisgICAgICA8YXJnIG5hbWU9InR5cGUiIHR5cGU9InMiIGRpcmVjdGlvbj0ib3V0Ii8+CisgICAgICA8YXJnIG5hbWU9ImRvbWFpbiIgdHlwZT0icyIgZGlyZWN0aW9uPSJvdXQiLz4KKyAgICAgIDxhcmcgbmFtZT0iaG9zdCIgdHlwZT0icyIgZGlyZWN0aW9uPSJvdXQiLz4KKyAgICAgIDxhcmcgbmFtZT0iYXByb3RvY29sIiB0eXBlPSJpIiBkaXJlY3Rpb249Im91dCIvPgorICAgICAgPGFyZyBuYW1lPSJhZGRyZXNzIiB0eXBlPSJzIiBkaXJlY3Rpb249Im91dCIvPgorICAgICAgPGFyZyBuYW1lPSJwb3J0IiB0eXBlPSJxIiBkaXJlY3Rpb249Im91dCIvPgorICAgICAgPGFyZyBuYW1lPSJ0eHQiIHR5cGU9ImFheSIgZGlyZWN0aW9uPSJvdXQiLz4KKyAgICAgIDxhcmcgbmFtZT0iZmxhZ3MiIHR5cGU9InUiIGRpcmVjdGlvbj0ib3V0Ii8+CisgICAgPC9tZXRob2Q+CisKKyAgICA8bWV0aG9kIG5hbWU9IkVudHJ5R3JvdXBOZXciPgorICAgICAgPGFyZyBuYW1lPSJwYXRoIiB0eXBlPSJvIiBkaXJlY3Rpb249Im91dCIvPgorICAgIDwvbWV0aG9kPgorCisgICAgPG1ldGhvZCBuYW1lPSJEb21haW5Ccm93c2VyTmV3Ij4KKyAgICAgIDxhcmcgbmFtZT0iaW50ZXJmYWNlIiB0eXBlPSJpIiBkaXJlY3Rpb249ImluIi8+CisgICAgICA8YXJnIG5hbWU9InByb3RvY29sIiB0eXBlPSJpIiBkaXJlY3Rpb249ImluIi8+CisgICAgICA8YXJnIG5hbWU9ImRvbWFpbiIgdHlwZT0icyIgZGlyZWN0aW9uPSJpbiIvPgorICAgICAgPGFyZyBuYW1lPSJidHlwZSIgdHlwZT0iaSIgZGlyZWN0aW9uPSJpbiIvPgorICAgICAgPGFyZyBuYW1lPSJmbGFncyIgdHlwZT0idSIgZGlyZWN0aW9uPSJpbiIvPgorCisgICAgICA8YXJnIG5hbWU9InBhdGgiIHR5cGU9Im8iIGRpcmVjdGlvbj0ib3V0Ii8+CisgICAgPC9tZXRob2Q+CisKKyAgICA8bWV0aG9kIG5hbWU9IlNlcnZpY2VUeXBlQnJvd3Nlck5ldyI+CisgICAgICA8YXJnIG5hbWU9ImludGVyZmFjZSIgdHlwZT0iaSIgZGlyZWN0aW9uPSJpbiIvPgorICAgICAgPGFyZyBuYW1lPSJwcm90b2NvbCIgdHlwZT0iaSIgZGlyZWN0aW9uPSJpbiIvPgorICAgICAgPGFyZyBuYW1lPSJkb21haW4iIHR5cGU9InMiIGRpcmVjdGlvbj0iaW4iLz4KKyAgICAgIDxhcmcgbmFtZT0iZmxhZ3MiIHR5cGU9InUiIGRpcmVjdGlvbj0iaW4iLz4KKworICAgICAgPGFyZyBuYW1lPSJwYXRoIiB0eXBlPSJvIiBkaXJlY3Rpb249Im91dCIvPgorICAgIDwvbWV0aG9kPgorCisgICAgPG1ldGhvZCBuYW1lPSJTZXJ2aWNlQnJvd3Nlck5ldyI+CisgICAgICA8YXJnIG5hbWU9ImludGVyZmFjZSIgdHlwZT0iaSIgZGlyZWN0aW9uPSJpbiIvPgorICAgICAgPGFyZyBuYW1lPSJwcm90b2NvbCIgdHlwZT0iaSIgZGlyZWN0aW9uPSJpbiIvPgorICAgICAgPGFyZyBuYW1lPSJ0eXBlIiB0eXBlPSJzIiBkaXJlY3Rpb249ImluIi8+CisgICAgICA8YXJnIG5hbWU9ImRvbWFpbiIgdHlwZT0icyIgZGlyZWN0aW9uPSJpbiIvPgorICAgICAgPGFyZyBuYW1lPSJmbGFncyIgdHlwZT0idSIgZGlyZWN0aW9uPSJpbiIvPgorCisgICAgICA8YXJnIG5hbWU9InBhdGgiIHR5cGU9Im8iIGRpcmVjdGlvbj0ib3V0Ii8+CisgICAgPC9tZXRob2Q+CisKKyAgICA8bWV0aG9kIG5hbWU9IlNlcnZpY2VSZXNvbHZlck5ldyI+CisgICAgICA8YXJnIG5hbWU9ImludGVyZmFjZSIgdHlwZT0iaSIgZGlyZWN0aW9uPSJpbiIvPgorICAgICAgPGFyZyBuYW1lPSJwcm90b2NvbCIgdHlwZT0iaSIgZGlyZWN0aW9uPSJpbiIvPgorICAgICAgPGFyZyBuYW1lPSJuYW1lIiB0eXBlPSJzIiBkaXJlY3Rpb249ImluIi8+CisgICAgICA8YXJnIG5hbWU9InR5cGUiIHR5cGU9InMiIGRpcmVjdGlvbj0iaW4iLz4KKyAgICAgIDxhcmcgbmFtZT0iZG9tYWluIiB0eXBlPSJzIiBkaXJlY3Rpb249ImluIi8+CisgICAgICA8YXJnIG5hbWU9ImFwcm90b2NvbCIgdHlwZT0iaSIgZGlyZWN0aW9uPSJpbiIvPgorICAgICAgPGFyZyBuYW1lPSJmbGFncyIgdHlwZT0idSIgZGlyZWN0aW9uPSJpbiIvPgorCisgICAgICA8YXJnIG5hbWU9InBhdGgiIHR5cGU9Im8iIGRpcmVjdGlvbj0ib3V0Ii8+CisgICAgPC9tZXRob2Q+CisKKyAgICA8bWV0aG9kIG5hbWU9Ikhvc3ROYW1lUmVzb2x2ZXJOZXciPgorICAgICAgPGFyZyBuYW1lPSJpbnRlcmZhY2UiIHR5cGU9ImkiIGRpcmVjdGlvbj0iaW4iLz4KKyAgICAgIDxhcmcgbmFtZT0icHJvdG9jb2wiIHR5cGU9ImkiIGRpcmVjdGlvbj0iaW4iLz4KKyAgICAgIDxhcmcgbmFtZT0ibmFtZSIgdHlwZT0icyIgZGlyZWN0aW9uPSJpbiIvPgorICAgICAgPGFyZyBuYW1lPSJhcHJvdG9jb2wiIHR5cGU9ImkiIGRpcmVjdGlvbj0iaW4iLz4KKyAgICAgIDxhcmcgbmFtZT0iZmxhZ3MiIHR5cGU9InUiIGRpcmVjdGlvbj0iaW4iLz4KKworICAgICAgPGFyZyBuYW1lPSJwYXRoIiB0eXBlPSJvIiBkaXJlY3Rpb249Im91dCIvPgorICAgIDwvbWV0aG9kPgorCisgICAgPG1ldGhvZCBuYW1lPSJBZGRyZXNzUmVzb2x2ZXJOZXciPgorICAgICAgPGFyZyBuYW1lPSJpbnRlcmZhY2UiIHR5cGU9ImkiIGRpcmVjdGlvbj0iaW4iLz4KKyAgICAgIDxhcmcgbmFtZT0icHJvdG9jb2wiIHR5cGU9ImkiIGRpcmVjdGlvbj0iaW4iLz4KKyAgICAgIDxhcmcgbmFtZT0iYWRkcmVzcyIgdHlwZT0icyIgZGlyZWN0aW9uPSJpbiIvPgorICAgICAgPGFyZyBuYW1lPSJmbGFncyIgdHlwZT0idSIgZGlyZWN0aW9uPSJpbiIvPgorCisgICAgICA8YXJnIG5hbWU9InBhdGgiIHR5cGU9Im8iIGRpcmVjdGlvbj0ib3V0Ii8+CisgICAgPC9tZXRob2Q+CisKKyAgICA8bWV0aG9kIG5hbWU9IlJlY29yZEJyb3dzZXJOZXciPgorICAgICAgPGFyZyBuYW1lPSJpbnRlcmZhY2UiIHR5cGU9ImkiIGRpcmVjdGlvbj0iaW4iLz4KKyAgICAgIDxhcmcgbmFtZT0icHJvdG9jb2wiIHR5cGU9ImkiIGRpcmVjdGlvbj0iaW4iLz4KKyAgICAgIDxhcmcgbmFtZT0ibmFtZSIgdHlwZT0icyIgZGlyZWN0aW9uPSJpbiIvPgorICAgICAgPGFyZyBuYW1lPSJjbGF6eiIgdHlwZT0icSIgZGlyZWN0aW9uPSJpbiIvPgorICAgICAgPGFyZyBuYW1lPSJ0eXBlIiB0eXBlPSJxIiBkaXJlY3Rpb249ImluIi8+CisgICAgICA8YXJnIG5hbWU9ImZsYWdzIiB0eXBlPSJ1IiBkaXJlY3Rpb249ImluIi8+CisKKyAgICAgIDxhcmcgbmFtZT0icGF0aCIgdHlwZT0ibyIgZGlyZWN0aW9uPSJvdXQiLz4KKyAgICA8L21ldGhvZD4KKworCisgIDwvaW50ZXJmYWNlPgorPC9ub2RlPgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9vcmcuZnJlZWRlc2t0b3AuQXZhaGkuU2VydmljZUJyb3dzZXIueG1sIGIvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9vcmcuZnJlZWRlc2t0b3AuQXZhaGkuU2VydmljZUJyb3dzZXIueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MDI5OGQKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL29yZy5mcmVlZGVza3RvcC5BdmFoaS5TZXJ2aWNlQnJvd3Nlci54bWwKQEAgLTAsMCArMSw2MyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSdubyc/PjwhLS0qLW54bWwtKi0tPgorPD94bWwtc3R5bGVzaGVldCB0eXBlPSJ0ZXh0L3hzbCIgaHJlZj0iaW50cm9zcGVjdC54c2wiPz4KKzwhRE9DVFlQRSBub2RlIFNZU1RFTSAiaW50cm9zcGVjdC5kdGQiPgorCis8IS0tCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgMDIxMTEtMTMwNyBVU0EuCistLT4KKworPG5vZGU+CisKKyAgPGludGVyZmFjZSBuYW1lPSJvcmcuZnJlZWRlc2t0b3AuREJ1cy5JbnRyb3NwZWN0YWJsZSI+CisgICAgPG1ldGhvZCBuYW1lPSJJbnRyb3NwZWN0Ij4KKyAgICAgIDxhcmcgbmFtZT0iZGF0YSIgdHlwZT0icyIgZGlyZWN0aW9uPSJvdXQiIC8+CisgICAgPC9tZXRob2Q+CisgIDwvaW50ZXJmYWNlPgorCisgIDxpbnRlcmZhY2UgbmFtZT0ib3JnLmZyZWVkZXNrdG9wLkF2YWhpLlNlcnZpY2VCcm93c2VyIj4KKworICAgIDxtZXRob2QgbmFtZT0iRnJlZSIvPgorCisgICAgPHNpZ25hbCBuYW1lPSJJdGVtTmV3Ij4KKyAgICAgIDxhcmcgbmFtZT0iaW50ZXJmYWNlIiB0eXBlPSJpIi8+CisgICAgICA8YXJnIG5hbWU9InByb3RvY29sIiB0eXBlPSJpIi8+CisgICAgICA8YXJnIG5hbWU9Im5hbWUiIHR5cGU9InMiLz4KKyAgICAgIDxhcmcgbmFtZT0idHlwZSIgdHlwZT0icyIvPgorICAgICAgPGFyZyBuYW1lPSJkb21haW4iIHR5cGU9InMiLz4KKyAgICAgIDxhcmcgbmFtZT0iZmxhZ3MiIHR5cGU9InUiLz4KKyAgICA8L3NpZ25hbD4KKworICAgIDxzaWduYWwgbmFtZT0iSXRlbVJlbW92ZSI+CisgICAgICA8YXJnIG5hbWU9ImludGVyZmFjZSIgdHlwZT0iaSIvPgorICAgICAgPGFyZyBuYW1lPSJwcm90b2NvbCIgdHlwZT0iaSIvPgorICAgICAgPGFyZyBuYW1lPSJuYW1lIiB0eXBlPSJzIi8+CisgICAgICA8YXJnIG5hbWU9InR5cGUiIHR5cGU9InMiLz4KKyAgICAgIDxhcmcgbmFtZT0iZG9tYWluIiB0eXBlPSJzIi8+CisgICAgICA8YXJnIG5hbWU9ImZsYWdzIiB0eXBlPSJ1Ii8+CisgICAgPC9zaWduYWw+CisKKyAgICA8c2lnbmFsIG5hbWU9IkZhaWx1cmUiPgorICAgICAgPGFyZyBuYW1lPSJlcnJvciIgdHlwZT0icyIvPgorICAgIDwvc2lnbmFsPgorCisgICAgPHNpZ25hbCBuYW1lPSJBbGxGb3JOb3ciLz4KKworICAgIDxzaWduYWwgbmFtZT0iQ2FjaGVFeGhhdXN0ZWQiLz4KKworICA8L2ludGVyZmFjZT4KKzwvbm9kZT4KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vb3JnLmZyZWVkZXNrdG9wLkF2YWhpLlNlcnZpY2VSZXNvbHZlci54bWwgYi9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL29yZy5mcmVlZGVza3RvcC5BdmFoaS5TZXJ2aWNlUmVzb2x2ZXIueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyM2YyMDkKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL29yZy5mcmVlZGVza3RvcC5BdmFoaS5TZXJ2aWNlUmVzb2x2ZXIueG1sCkBAIC0wLDAgKzEsNTUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgc3RhbmRhbG9uZT0nbm8nPz48IS0tKi1ueG1sLSotLT4KKzw/eG1sLXN0eWxlc2hlZXQgdHlwZT0idGV4dC94c2wiIGhyZWY9ImludHJvc3BlY3QueHNsIj8+Cis8IURPQ1RZUEUgbm9kZSBTWVNURU0gImludHJvc3BlY3QuZHRkIj4KKworPCEtLQorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisgIDAyMTExLTEzMDcgVVNBLgorLS0+CisKKzxub2RlPgorCisgIDxpbnRlcmZhY2UgbmFtZT0ib3JnLmZyZWVkZXNrdG9wLkRCdXMuSW50cm9zcGVjdGFibGUiPgorICAgIDxtZXRob2QgbmFtZT0iSW50cm9zcGVjdCI+CisgICAgICA8YXJnIG5hbWU9ImRhdGEiIHR5cGU9InMiIGRpcmVjdGlvbj0ib3V0IiAvPgorICAgIDwvbWV0aG9kPgorICA8L2ludGVyZmFjZT4KKworICA8aW50ZXJmYWNlIG5hbWU9Im9yZy5mcmVlZGVza3RvcC5BdmFoaS5TZXJ2aWNlUmVzb2x2ZXIiPgorCisgICAgPG1ldGhvZCBuYW1lPSJGcmVlIi8+CisKKyAgICA8c2lnbmFsIG5hbWU9IkZvdW5kIj4KKyAgICAgIDxhcmcgbmFtZT0iaW50ZXJmYWNlIiB0eXBlPSJpIiBkaXJlY3Rpb249Im91dCIvPgorICAgICAgPGFyZyBuYW1lPSJwcm90b2NvbCIgdHlwZT0iaSIgZGlyZWN0aW9uPSJvdXQiLz4KKyAgICAgIDxhcmcgbmFtZT0ibmFtZSIgdHlwZT0icyIgZGlyZWN0aW9uPSJvdXQiLz4KKyAgICAgIDxhcmcgbmFtZT0idHlwZSIgdHlwZT0icyIgZGlyZWN0aW9uPSJvdXQiLz4KKyAgICAgIDxhcmcgbmFtZT0iZG9tYWluIiB0eXBlPSJzIiBkaXJlY3Rpb249Im91dCIvPgorICAgICAgPGFyZyBuYW1lPSJob3N0IiB0eXBlPSJzIiBkaXJlY3Rpb249Im91dCIvPgorICAgICAgPGFyZyBuYW1lPSJhcHJvdG9jb2wiIHR5cGU9ImkiIGRpcmVjdGlvbj0ib3V0Ii8+CisgICAgICA8YXJnIG5hbWU9ImFkZHJlc3MiIHR5cGU9InMiIGRpcmVjdGlvbj0ib3V0Ii8+CisgICAgICA8YXJnIG5hbWU9InBvcnQiIHR5cGU9InEiIGRpcmVjdGlvbj0ib3V0Ii8+CisgICAgICA8YXJnIG5hbWU9InR4dCIgdHlwZT0iYWF5IiBkaXJlY3Rpb249Im91dCIvPgorICAgICAgPGFyZyBuYW1lPSJmbGFncyIgdHlwZT0idSIgZGlyZWN0aW9uPSJvdXQiLz4KKyAgICA8L3NpZ25hbD4KKworICAgIDxzaWduYWwgbmFtZT0iRmFpbHVyZSI+CisgICAgICA8YXJnIG5hbWU9ImVycm9yIiB0eXBlPSJzIi8+CisgICAgPC9zaWduYWw+CisKKyAgPC9pbnRlcmZhY2U+Cis8L25vZGU+CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL29yZy5mcmVlZGVza3RvcC5BdmFoaS5TZXJ2aWNlVHlwZUJyb3dzZXIueG1sIGIvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9vcmcuZnJlZWRlc2t0b3AuQXZhaGkuU2VydmljZVR5cGVCcm93c2VyLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWZlYzgyCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9vcmcuZnJlZWRlc2t0b3AuQXZhaGkuU2VydmljZVR5cGVCcm93c2VyLnhtbApAQCAtMCwwICsxLDYxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIHN0YW5kYWxvbmU9J25vJz8+PCEtLSotbnhtbC0qLS0+Cis8P3htbC1zdHlsZXNoZWV0IHR5cGU9InRleHQveHNsIiBocmVmPSJpbnRyb3NwZWN0LnhzbCI/PgorPCFET0NUWVBFIG5vZGUgU1lTVEVNICJpbnRyb3NwZWN0LmR0ZCI+CisKKzwhLS0KKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAwMjExMS0xMzA3IFVTQS4KKy0tPgorCis8bm9kZT4KKworICA8aW50ZXJmYWNlIG5hbWU9Im9yZy5mcmVlZGVza3RvcC5EQnVzLkludHJvc3BlY3RhYmxlIj4KKyAgICA8bWV0aG9kIG5hbWU9IkludHJvc3BlY3QiPgorICAgICAgPGFyZyBuYW1lPSJkYXRhIiB0eXBlPSJzIiBkaXJlY3Rpb249Im91dCIgLz4KKyAgICA8L21ldGhvZD4KKyAgPC9pbnRlcmZhY2U+CisKKyAgPGludGVyZmFjZSBuYW1lPSJvcmcuZnJlZWRlc2t0b3AuQXZhaGkuU2VydmljZVR5cGVCcm93c2VyIj4KKworICAgIDxtZXRob2QgbmFtZT0iRnJlZSIvPgorCisgICAgPHNpZ25hbCBuYW1lPSJJdGVtTmV3Ij4KKyAgICAgIDxhcmcgbmFtZT0iaW50ZXJmYWNlIiB0eXBlPSJpIi8+CisgICAgICA8YXJnIG5hbWU9InByb3RvY29sIiB0eXBlPSJpIi8+CisgICAgICA8YXJnIG5hbWU9InR5cGUiIHR5cGU9InMiLz4KKyAgICAgIDxhcmcgbmFtZT0iZG9tYWluIiB0eXBlPSJzIi8+CisgICAgICA8YXJnIG5hbWU9ImZsYWdzIiB0eXBlPSJ1Ii8+CisgICAgPC9zaWduYWw+CisKKyAgICA8c2lnbmFsIG5hbWU9Ikl0ZW1SZW1vdmUiPgorICAgICAgPGFyZyBuYW1lPSJpbnRlcmZhY2UiIHR5cGU9ImkiLz4KKyAgICAgIDxhcmcgbmFtZT0icHJvdG9jb2wiIHR5cGU9ImkiLz4KKyAgICAgIDxhcmcgbmFtZT0idHlwZSIgdHlwZT0icyIvPgorICAgICAgPGFyZyBuYW1lPSJkb21haW4iIHR5cGU9InMiLz4KKyAgICAgIDxhcmcgbmFtZT0iZmxhZ3MiIHR5cGU9InUiLz4KKyAgICA8L3NpZ25hbD4KKworICAgIDxzaWduYWwgbmFtZT0iRmFpbHVyZSI+CisgICAgICA8YXJnIG5hbWU9ImVycm9yIiB0eXBlPSJzIi8+CisgICAgPC9zaWduYWw+CisKKyAgICA8c2lnbmFsIG5hbWU9IkFsbEZvck5vdyIvPgorCisgICAgPHNpZ25hbCBuYW1lPSJDYWNoZUV4aGF1c3RlZCIvPgorCisgIDwvaW50ZXJmYWNlPgorPC9ub2RlPgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9vcmcuZnJlZWRlc2t0b3AuQXZhaGkuc2VydmljZSBiL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vb3JnLmZyZWVkZXNrdG9wLkF2YWhpLnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBlZDJkOAotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vb3JnLmZyZWVkZXNrdG9wLkF2YWhpLnNlcnZpY2UKQEAgLTAsMCArMSwyNCBAQAorIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKyMKKyMgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyMgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyMgVVNBLgorCitbRC1CVVMgU2VydmljZV0KK05hbWU9b3JnLmZyZWVkZXNrdG9wLkF2YWhpCitTeXN0ZW1kU2VydmljZT1kYnVzLW9yZy5mcmVlZGVza3RvcC5BdmFoaS5zZXJ2aWNlCisKKyMgVGhpcyBzZXJ2aWNlIHNob3VsZCBub3QgYmUgYnVzIGFjdGl2YXRlZCBpZiBzeXN0ZW1kIGlzbid0IHJ1bm5pbmcsCisjIHNvIHRoYXQgYWN0aXZhdGlvbiB3b24ndCBjb25mbGljdCB3aXRoIHRoZSBpbml0IHNjcmlwdCBzdGFydHVwLgorRXhlYz0vYmluL2ZhbHNlCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL3NkLWRhZW1vbi5jIGIvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9zZC1kYWVtb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWNhOTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9zZC1kYWVtb24uYwpAQCAtMCwwICsxLDQ0MSBAQAorLyotKi0gTW9kZTogQzsgYy1iYXNpYy1vZmZzZXQ6IDg7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0qLworCisvKioqCisgIENvcHlyaWdodCAyMDEwIExlbm5hcnQgUG9ldHRlcmluZworCisgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCisgIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzCisgICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sCisgIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsCisgIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsCisgIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sCisgIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCisgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAgQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAgQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICBTT0ZUV0FSRS4KKyoqKi8KKworI2lmbmRlZiBfR05VX1NPVVJDRQorI2RlZmluZSBfR05VX1NPVVJDRQorI2VuZGlmCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvdW4uaD4KKyNpbmNsdWRlIDxzeXMvZmNudGwuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisjaW5jbHVkZSAic2QtZGFlbW9uLmgiCisKK2ludCBzZF9saXN0ZW5fZmRzKGludCB1bnNldF9lbnZpcm9ubWVudCkgeworCisjaWYgZGVmaW5lZChESVNBQkxFX1NZU1RFTUQpIHx8ICFkZWZpbmVkKF9fbGludXhfXykKKyAgICAgICAgcmV0dXJuIDA7CisjZWxzZQorICAgICAgICBpbnQgciwgZmQ7CisgICAgICAgIGNvbnN0IGNoYXIgKmU7CisgICAgICAgIGNoYXIgKnAgPSBOVUxMOworICAgICAgICB1bnNpZ25lZCBsb25nIGw7CisKKyAgICAgICAgaWYgKCEoZSA9IGdldGVudigiTElTVEVOX1BJRCIpKSkgeworICAgICAgICAgICAgICAgIHIgPSAwOworICAgICAgICAgICAgICAgIGdvdG8gZmluaXNoOworICAgICAgICB9CisKKyAgICAgICAgZXJybm8gPSAwOworICAgICAgICBsID0gc3RydG91bChlLCAmcCwgMTApOworCisgICAgICAgIGlmIChlcnJubyAhPSAwKSB7CisgICAgICAgICAgICAgICAgciA9IC1lcnJubzsKKyAgICAgICAgICAgICAgICBnb3RvIGZpbmlzaDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghcCB8fCAqcCB8fCBsIDw9IDApIHsKKyAgICAgICAgICAgICAgICByID0gLUVJTlZBTDsKKyAgICAgICAgICAgICAgICBnb3RvIGZpbmlzaDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIElzIHRoaXMgZm9yIHVzPyAqLworICAgICAgICBpZiAoZ2V0cGlkKCkgIT0gKHBpZF90KSBsKSB7CisgICAgICAgICAgICAgICAgciA9IDA7CisgICAgICAgICAgICAgICAgZ290byBmaW5pc2g7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIShlID0gZ2V0ZW52KCJMSVNURU5fRkRTIikpKSB7CisgICAgICAgICAgICAgICAgciA9IDA7CisgICAgICAgICAgICAgICAgZ290byBmaW5pc2g7CisgICAgICAgIH0KKworICAgICAgICBlcnJubyA9IDA7CisgICAgICAgIGwgPSBzdHJ0b3VsKGUsICZwLCAxMCk7CisKKyAgICAgICAgaWYgKGVycm5vICE9IDApIHsKKyAgICAgICAgICAgICAgICByID0gLWVycm5vOworICAgICAgICAgICAgICAgIGdvdG8gZmluaXNoOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFwIHx8ICpwKSB7CisgICAgICAgICAgICAgICAgciA9IC1FSU5WQUw7CisgICAgICAgICAgICAgICAgZ290byBmaW5pc2g7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGZkID0gU0RfTElTVEVOX0ZEU19TVEFSVDsgZmQgPCBTRF9MSVNURU5fRkRTX1NUQVJUICsgKGludCkgbDsgZmQgKyspIHsKKyAgICAgICAgICAgICAgICBpbnQgZmxhZ3M7CisKKyAgICAgICAgICAgICAgICBpZiAoKGZsYWdzID0gZmNudGwoZmQsIEZfR0VURkQpKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHIgPSAtZXJybm87CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZpbmlzaDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoZmxhZ3MgJiBGRF9DTE9FWEVDKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBpZiAoZmNudGwoZmQsIEZfU0VURkQsIGZsYWdzIHwgRkRfQ0xPRVhFQykgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByID0gLWVycm5vOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmaW5pc2g7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgciA9IChpbnQpIGw7CisKK2ZpbmlzaDoKKyAgICAgICAgaWYgKHVuc2V0X2Vudmlyb25tZW50KSB7CisgICAgICAgICAgICAgICAgdW5zZXRlbnYoIkxJU1RFTl9QSUQiKTsKKyAgICAgICAgICAgICAgICB1bnNldGVudigiTElTVEVOX0ZEUyIpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHI7CisjZW5kaWYKK30KKworaW50IHNkX2lzX2ZpZm8oaW50IGZkLCBjb25zdCBjaGFyICpwYXRoKSB7CisgICAgICAgIHN0cnVjdCBzdGF0IHN0X2ZkOworCisgICAgICAgIGlmIChmZCA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisKKyAgICAgICAgbWVtc2V0KCZzdF9mZCwgMCwgc2l6ZW9mKHN0X2ZkKSk7CisgICAgICAgIGlmIChmc3RhdChmZCwgJnN0X2ZkKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIC1lcnJubzsKKworICAgICAgICBpZiAoIVNfSVNGSUZPKHN0X2ZkLnN0X21vZGUpKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIGlmIChwYXRoKSB7CisgICAgICAgICAgICAgICAgc3RydWN0IHN0YXQgc3RfcGF0aDsKKworICAgICAgICAgICAgICAgIG1lbXNldCgmc3RfcGF0aCwgMCwgc2l6ZW9mKHN0X3BhdGgpKTsKKyAgICAgICAgICAgICAgICBpZiAoc3RhdChwYXRoLCAmc3RfcGF0aCkgPCAwKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJubyA9PSBFTk9FTlQgfHwgZXJybm8gPT0gRU5PVERJUikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtZXJybm87CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgICAgICAgICBzdF9wYXRoLnN0X2RldiA9PSBzdF9mZC5zdF9kZXYgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0X3BhdGguc3RfaW5vID09IHN0X2ZkLnN0X2lubzsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50IHNkX2lzX3NvY2tldF9pbnRlcm5hbChpbnQgZmQsIGludCB0eXBlLCBpbnQgbGlzdGVuaW5nKSB7CisgICAgICAgIHN0cnVjdCBzdGF0IHN0X2ZkOworCisgICAgICAgIGlmIChmZCA8IDAgfHwgdHlwZSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisKKyAgICAgICAgaWYgKGZzdGF0KGZkLCAmc3RfZmQpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLWVycm5vOworCisgICAgICAgIGlmICghU19JU1NPQ0soc3RfZmQuc3RfbW9kZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgaWYgKHR5cGUgIT0gMCkgeworICAgICAgICAgICAgICAgIGludCBvdGhlcl90eXBlID0gMDsKKyAgICAgICAgICAgICAgICBzb2NrbGVuX3QgbCA9IHNpemVvZihvdGhlcl90eXBlKTsKKworICAgICAgICAgICAgICAgIGlmIChnZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19UWVBFLCAmb3RoZXJfdHlwZSwgJmwpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtZXJybm87CisKKyAgICAgICAgICAgICAgICBpZiAobCAhPSBzaXplb2Yob3RoZXJfdHlwZSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgICAgICAgICAgICAgIGlmIChvdGhlcl90eXBlICE9IHR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsaXN0ZW5pbmcgPj0gMCkgeworICAgICAgICAgICAgICAgIGludCBhY2NlcHRpbmcgPSAwOworICAgICAgICAgICAgICAgIHNvY2tsZW5fdCBsID0gc2l6ZW9mKGFjY2VwdGluZyk7CisKKyAgICAgICAgICAgICAgICBpZiAoZ2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fQUNDRVBUQ09OTiwgJmFjY2VwdGluZywgJmwpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtZXJybm87CisKKyAgICAgICAgICAgICAgICBpZiAobCAhPSBzaXplb2YoYWNjZXB0aW5nKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworCisgICAgICAgICAgICAgICAgaWYgKCFhY2NlcHRpbmcgIT0gIWxpc3RlbmluZykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIDE7Cit9CisKK3VuaW9uIHNvY2thZGRyX3VuaW9uIHsKKyAgICAgICAgc3RydWN0IHNvY2thZGRyIHNhOworICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gaW40OworICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42IGluNjsKKyAgICAgICAgc3RydWN0IHNvY2thZGRyX3VuIHVuOworICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzdG9yYWdlOworfTsKKworaW50IHNkX2lzX3NvY2tldChpbnQgZmQsIGludCBmYW1pbHksIGludCB0eXBlLCBpbnQgbGlzdGVuaW5nKSB7CisgICAgICAgIGludCByOworCisgICAgICAgIGlmIChmYW1pbHkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworCisgICAgICAgIGlmICgociA9IHNkX2lzX3NvY2tldF9pbnRlcm5hbChmZCwgdHlwZSwgbGlzdGVuaW5nKSkgPD0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcjsKKworICAgICAgICBpZiAoZmFtaWx5ID4gMCkgeworICAgICAgICAgICAgICAgIHVuaW9uIHNvY2thZGRyX3VuaW9uIHNvY2thZGRyOworICAgICAgICAgICAgICAgIHNvY2tsZW5fdCBsOworCisgICAgICAgICAgICAgICAgbWVtc2V0KCZzb2NrYWRkciwgMCwgc2l6ZW9mKHNvY2thZGRyKSk7CisgICAgICAgICAgICAgICAgbCA9IHNpemVvZihzb2NrYWRkcik7CisKKyAgICAgICAgICAgICAgICBpZiAoZ2V0c29ja25hbWUoZmQsICZzb2NrYWRkci5zYSwgJmwpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtZXJybm87CisKKyAgICAgICAgICAgICAgICBpZiAobCA8IHNpemVvZihzYV9mYW1pbHlfdCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgICAgICAgICAgICAgIHJldHVybiBzb2NrYWRkci5zYS5zYV9mYW1pbHkgPT0gZmFtaWx5OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIDE7Cit9CisKK2ludCBzZF9pc19zb2NrZXRfaW5ldChpbnQgZmQsIGludCBmYW1pbHksIGludCB0eXBlLCBpbnQgbGlzdGVuaW5nLCB1aW50MTZfdCBwb3J0KSB7CisgICAgICAgIHVuaW9uIHNvY2thZGRyX3VuaW9uIHNvY2thZGRyOworICAgICAgICBzb2NrbGVuX3QgbDsKKyAgICAgICAgaW50IHI7CisKKyAgICAgICAgaWYgKGZhbWlseSAhPSAwICYmIGZhbWlseSAhPSBBRl9JTkVUICYmIGZhbWlseSAhPSBBRl9JTkVUNikKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgICAgICBpZiAoKHIgPSBzZF9pc19zb2NrZXRfaW50ZXJuYWwoZmQsIHR5cGUsIGxpc3RlbmluZykpIDw9IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIHI7CisKKyAgICAgICAgbWVtc2V0KCZzb2NrYWRkciwgMCwgc2l6ZW9mKHNvY2thZGRyKSk7CisgICAgICAgIGwgPSBzaXplb2Yoc29ja2FkZHIpOworCisgICAgICAgIGlmIChnZXRzb2NrbmFtZShmZCwgJnNvY2thZGRyLnNhLCAmbCkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAtZXJybm87CisKKyAgICAgICAgaWYgKGwgPCBzaXplb2Yoc2FfZmFtaWx5X3QpKQorICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworCisgICAgICAgIGlmIChzb2NrYWRkci5zYS5zYV9mYW1pbHkgIT0gQUZfSU5FVCAmJgorICAgICAgICAgICAgc29ja2FkZHIuc2Euc2FfZmFtaWx5ICE9IEFGX0lORVQ2KQorICAgICAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIGlmIChmYW1pbHkgPiAwKQorICAgICAgICAgICAgICAgIGlmIChzb2NrYWRkci5zYS5zYV9mYW1pbHkgIT0gZmFtaWx5KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgaWYgKHBvcnQgPiAwKSB7CisgICAgICAgICAgICAgICAgaWYgKHNvY2thZGRyLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA8IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGh0b25zKHBvcnQpID09IHNvY2thZGRyLmluNC5zaW5fcG9ydDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaHRvbnMocG9ydCkgPT0gc29ja2FkZHIuaW42LnNpbjZfcG9ydDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gMTsKK30KKworaW50IHNkX2lzX3NvY2tldF91bml4KGludCBmZCwgaW50IHR5cGUsIGludCBsaXN0ZW5pbmcsIGNvbnN0IGNoYXIgKnBhdGgsIHNpemVfdCBsZW5ndGgpIHsKKyAgICAgICAgdW5pb24gc29ja2FkZHJfdW5pb24gc29ja2FkZHI7CisgICAgICAgIHNvY2tsZW5fdCBsOworICAgICAgICBpbnQgcjsKKworICAgICAgICBpZiAoKHIgPSBzZF9pc19zb2NrZXRfaW50ZXJuYWwoZmQsIHR5cGUsIGxpc3RlbmluZykpIDw9IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIHI7CisKKyAgICAgICAgbWVtc2V0KCZzb2NrYWRkciwgMCwgc2l6ZW9mKHNvY2thZGRyKSk7CisgICAgICAgIGwgPSBzaXplb2Yoc29ja2FkZHIpOworCisgICAgICAgIGlmIChnZXRzb2NrbmFtZShmZCwgJnNvY2thZGRyLnNhLCAmbCkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAtZXJybm87CisKKyAgICAgICAgaWYgKGwgPCBzaXplb2Yoc2FfZmFtaWx5X3QpKQorICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworCisgICAgICAgIGlmIChzb2NrYWRkci5zYS5zYV9mYW1pbHkgIT0gQUZfVU5JWCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBpZiAocGF0aCkgeworICAgICAgICAgICAgICAgIGlmIChsZW5ndGggPD0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IHN0cmxlbihwYXRoKTsKKworICAgICAgICAgICAgICAgIGlmIChsZW5ndGggPD0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVubmFtZWQgc29ja2V0ICovCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbCA9PSBvZmZzZXRvZihzdHJ1Y3Qgc29ja2FkZHJfdW4sIHN1bl9wYXRoKTsKKworICAgICAgICAgICAgICAgIGlmIChwYXRoWzBdKQorICAgICAgICAgICAgICAgICAgICAgICAgLyogTm9ybWFsIHBhdGggc29ja2V0ICovCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGwgPj0gb2Zmc2V0b2Yoc3RydWN0IHNvY2thZGRyX3VuLCBzdW5fcGF0aCkgKyBsZW5ndGggKyAxKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1jbXAocGF0aCwgc29ja2FkZHIudW4uc3VuX3BhdGgsIGxlbmd0aCsxKSA9PSAwOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFic3RyYWN0IG5hbWVzcGFjZSBzb2NrZXQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobCA9PSBvZmZzZXRvZihzdHJ1Y3Qgc29ja2FkZHJfdW4sIHN1bl9wYXRoKSArIGxlbmd0aCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtY21wKHBhdGgsIHNvY2thZGRyLnVuLnN1bl9wYXRoLCBsZW5ndGgpID09IDA7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gMTsKK30KKworaW50IHNkX25vdGlmeShpbnQgdW5zZXRfZW52aXJvbm1lbnQsIGNvbnN0IGNoYXIgKnN0YXRlKSB7CisjaWYgZGVmaW5lZChESVNBQkxFX1NZU1RFTUQpIHx8ICFkZWZpbmVkKF9fbGludXhfXykgfHwgIWRlZmluZWQoU09DS19DTE9FWEVDKQorICAgICAgICByZXR1cm4gMDsKKyNlbHNlCisjIGlmIGRlZmluZWQoU09DS19DTE9FWEVDKQorCQlpbnQgc29ja19jbG9leGVjID0gU09DS19DTE9FWEVDOworIyBlbHNlCisjICBkZWZpbmUgc29ja19jbG9leGVjIDAKKyMgZW5kaWYKKyAgICAgICAgaW50IGZkID0gLTEsIHI7CisgICAgICAgIHN0cnVjdCBtc2doZHIgbXNnaGRyOworICAgICAgICBzdHJ1Y3QgaW92ZWMgaW92ZWM7CisgICAgICAgIHVuaW9uIHNvY2thZGRyX3VuaW9uIHNvY2thZGRyOworICAgICAgICBjb25zdCBjaGFyICplOworCisgICAgICAgIGlmICghc3RhdGUpIHsKKyAgICAgICAgICAgICAgICByID0gLUVJTlZBTDsKKyAgICAgICAgICAgICAgICBnb3RvIGZpbmlzaDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghKGUgPSBnZXRlbnYoIk5PVElGWV9TT0NLRVQiKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgLyogTXVzdCBiZSBhbiBhYnN0cmFjdCBzb2NrZXQsIG9yIGFuIGFic29sdXRlIHBhdGggKi8KKyAgICAgICAgaWYgKChlWzBdICE9ICdAJyAmJiBlWzBdICE9ICcvJykgfHwgZVsxXSA9PSAwKSB7CisgICAgICAgICAgICAgICAgciA9IC1FSU5WQUw7CisgICAgICAgICAgICAgICAgZ290byBmaW5pc2g7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKGZkID0gc29ja2V0KEFGX1VOSVgsIFNPQ0tfREdSQU18c29ja19jbG9leGVjLCAwKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgciA9IC1lcnJubzsKKyAgICAgICAgICAgICAgICBnb3RvIGZpbmlzaDsKKyAgICAgICAgfQorCisgICAgICAgIG1lbXNldCgmc29ja2FkZHIsIDAsIHNpemVvZihzb2NrYWRkcikpOworICAgICAgICBzb2NrYWRkci5zYS5zYV9mYW1pbHkgPSBBRl9VTklYOworICAgICAgICBzdHJuY3B5KHNvY2thZGRyLnVuLnN1bl9wYXRoLCBlLCBzaXplb2Yoc29ja2FkZHIudW4uc3VuX3BhdGgpKTsKKworICAgICAgICBpZiAoc29ja2FkZHIudW4uc3VuX3BhdGhbMF0gPT0gJ0AnKQorICAgICAgICAgICAgICAgIHNvY2thZGRyLnVuLnN1bl9wYXRoWzBdID0gMDsKKworICAgICAgICBtZW1zZXQoJmlvdmVjLCAwLCBzaXplb2YoaW92ZWMpKTsKKyAgICAgICAgaW92ZWMuaW92X2Jhc2UgPSAoY2hhciopIHN0YXRlOworICAgICAgICBpb3ZlYy5pb3ZfbGVuID0gc3RybGVuKHN0YXRlKTsKKworICAgICAgICBtZW1zZXQoJm1zZ2hkciwgMCwgc2l6ZW9mKG1zZ2hkcikpOworICAgICAgICBtc2doZHIubXNnX25hbWUgPSAmc29ja2FkZHI7CisgICAgICAgIG1zZ2hkci5tc2dfbmFtZWxlbiA9IG9mZnNldG9mKHN0cnVjdCBzb2NrYWRkcl91biwgc3VuX3BhdGgpICsgc3RybGVuKGUpOworCisgICAgICAgIGlmIChtc2doZHIubXNnX25hbWVsZW4gPiBzaXplb2Yoc3RydWN0IHNvY2thZGRyX3VuKSkKKyAgICAgICAgICAgICAgICBtc2doZHIubXNnX25hbWVsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX3VuKTsKKworICAgICAgICBtc2doZHIubXNnX2lvdiA9ICZpb3ZlYzsKKyAgICAgICAgbXNnaGRyLm1zZ19pb3ZsZW4gPSAxOworCisgICAgICAgIGlmIChzZW5kbXNnKGZkLCAmbXNnaGRyLCBNU0dfTk9TSUdOQUwpIDwgMCkgeworICAgICAgICAgICAgICAgIHIgPSAtZXJybm87CisgICAgICAgICAgICAgICAgZ290byBmaW5pc2g7CisgICAgICAgIH0KKworICAgICAgICByID0gMTsKKworZmluaXNoOgorICAgICAgICBpZiAodW5zZXRfZW52aXJvbm1lbnQpCisgICAgICAgICAgICAgICAgdW5zZXRlbnYoIk5PVElGWV9TT0NLRVQiKTsKKworICAgICAgICBpZiAoZmQgPj0gMCkKKyAgICAgICAgICAgICAgICBjbG9zZShmZCk7CisKKyAgICAgICAgcmV0dXJuIHI7CisjZW5kaWYKK30KKworaW50IHNkX25vdGlmeWYoaW50IHVuc2V0X2Vudmlyb25tZW50LCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikgeworI2lmIGRlZmluZWQoRElTQUJMRV9TWVNURU1EKSB8fCAhZGVmaW5lZChfX2xpbnV4X18pCisgICAgICAgIHJldHVybiAwOworI2Vsc2UKKyAgICAgICAgdmFfbGlzdCBhcDsKKyAgICAgICAgY2hhciAqcCA9IE5VTEw7CisgICAgICAgIGludCByOworCisgICAgICAgIHZhX3N0YXJ0KGFwLCBmb3JtYXQpOworICAgICAgICByID0gdmFzcHJpbnRmKCZwLCBmb3JtYXQsIGFwKTsKKyAgICAgICAgdmFfZW5kKGFwKTsKKworICAgICAgICBpZiAociA8IDAgfHwgIXApCisgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CisKKyAgICAgICAgciA9IHNkX25vdGlmeSh1bnNldF9lbnZpcm9ubWVudCwgcCk7CisgICAgICAgIGZyZWUocCk7CisKKyAgICAgICAgcmV0dXJuIHI7CisjZW5kaWYKK30KKworaW50IHNkX2Jvb3RlZCh2b2lkKSB7CisjaWYgZGVmaW5lZChESVNBQkxFX1NZU1RFTUQpIHx8ICFkZWZpbmVkKF9fbGludXhfXykKKyAgICAgICAgcmV0dXJuIDA7CisjZWxzZQorCisgICAgICAgIHN0cnVjdCBzdGF0IGEsIGI7CisKKyAgICAgICAgLyogV2Ugc2ltcGx5IHRlc3Qgd2hldGhlciB0aGUgc3lzdGVtZCBjZ3JvdXAgaGllcmFyY2h5IGlzCisgICAgICAgICAqIG1vdW50ZWQgKi8KKworICAgICAgICBpZiAobHN0YXQoIi9zeXMvZnMvY2dyb3VwIiwgJmEpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBpZiAobHN0YXQoIi9zeXMvZnMvY2dyb3VwL3N5c3RlbWQiLCAmYikgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIHJldHVybiBhLnN0X2RldiAhPSBiLnN0X2RldjsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9zZC1kYWVtb24uYy5vcmlnIGIvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9zZC1kYWVtb24uYy5vcmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkMWVlYmYKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL3NkLWRhZW1vbi5jLm9yaWcKQEAgLTAsMCArMSw0MzYgQEAKKy8qLSotIE1vZGU6IEM7IGMtYmFzaWMtb2Zmc2V0OiA4OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotKi8KKworLyoqKgorICBDb3B5cmlnaHQgMjAxMCBMZW5uYXJ0IFBvZXR0ZXJpbmcKKworICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgorICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcworICAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLAorICBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLAorICBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLAorICBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLAorICBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAgU09GVFdBUkUuCisqKiovCisKKyNpZm5kZWYgX0dOVV9TT1VSQ0UKKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKyNlbmRpZgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lzL3VuLmg+CisjaW5jbHVkZSA8c3lzL2ZjbnRsLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworI2luY2x1ZGUgInNkLWRhZW1vbi5oIgorCitpbnQgc2RfbGlzdGVuX2ZkcyhpbnQgdW5zZXRfZW52aXJvbm1lbnQpIHsKKworI2lmIGRlZmluZWQoRElTQUJMRV9TWVNURU1EKSB8fCAhZGVmaW5lZChfX2xpbnV4X18pCisgICAgICAgIHJldHVybiAwOworI2Vsc2UKKyAgICAgICAgaW50IHIsIGZkOworICAgICAgICBjb25zdCBjaGFyICplOworICAgICAgICBjaGFyICpwID0gTlVMTDsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBsOworCisgICAgICAgIGlmICghKGUgPSBnZXRlbnYoIkxJU1RFTl9QSUQiKSkpIHsKKyAgICAgICAgICAgICAgICByID0gMDsKKyAgICAgICAgICAgICAgICBnb3RvIGZpbmlzaDsKKyAgICAgICAgfQorCisgICAgICAgIGVycm5vID0gMDsKKyAgICAgICAgbCA9IHN0cnRvdWwoZSwgJnAsIDEwKTsKKworICAgICAgICBpZiAoZXJybm8gIT0gMCkgeworICAgICAgICAgICAgICAgIHIgPSAtZXJybm87CisgICAgICAgICAgICAgICAgZ290byBmaW5pc2g7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXAgfHwgKnAgfHwgbCA8PSAwKSB7CisgICAgICAgICAgICAgICAgciA9IC1FSU5WQUw7CisgICAgICAgICAgICAgICAgZ290byBmaW5pc2g7CisgICAgICAgIH0KKworICAgICAgICAvKiBJcyB0aGlzIGZvciB1cz8gKi8KKyAgICAgICAgaWYgKGdldHBpZCgpICE9IChwaWRfdCkgbCkgeworICAgICAgICAgICAgICAgIHIgPSAwOworICAgICAgICAgICAgICAgIGdvdG8gZmluaXNoOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCEoZSA9IGdldGVudigiTElTVEVOX0ZEUyIpKSkgeworICAgICAgICAgICAgICAgIHIgPSAwOworICAgICAgICAgICAgICAgIGdvdG8gZmluaXNoOworICAgICAgICB9CisKKyAgICAgICAgZXJybm8gPSAwOworICAgICAgICBsID0gc3RydG91bChlLCAmcCwgMTApOworCisgICAgICAgIGlmIChlcnJubyAhPSAwKSB7CisgICAgICAgICAgICAgICAgciA9IC1lcnJubzsKKyAgICAgICAgICAgICAgICBnb3RvIGZpbmlzaDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghcCB8fCAqcCkgeworICAgICAgICAgICAgICAgIHIgPSAtRUlOVkFMOworICAgICAgICAgICAgICAgIGdvdG8gZmluaXNoOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChmZCA9IFNEX0xJU1RFTl9GRFNfU1RBUlQ7IGZkIDwgU0RfTElTVEVOX0ZEU19TVEFSVCArIChpbnQpIGw7IGZkICsrKSB7CisgICAgICAgICAgICAgICAgaW50IGZsYWdzOworCisgICAgICAgICAgICAgICAgaWYgKChmbGFncyA9IGZjbnRsKGZkLCBGX0dFVEZEKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByID0gLWVycm5vOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmaW5pc2g7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGZsYWdzICYgRkRfQ0xPRVhFQykKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgaWYgKGZjbnRsKGZkLCBGX1NFVEZELCBmbGFncyB8IEZEX0NMT0VYRUMpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgciA9IC1lcnJubzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmluaXNoOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHIgPSAoaW50KSBsOworCitmaW5pc2g6CisgICAgICAgIGlmICh1bnNldF9lbnZpcm9ubWVudCkgeworICAgICAgICAgICAgICAgIHVuc2V0ZW52KCJMSVNURU5fUElEIik7CisgICAgICAgICAgICAgICAgdW5zZXRlbnYoIkxJU1RFTl9GRFMiKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByOworI2VuZGlmCit9CisKK2ludCBzZF9pc19maWZvKGludCBmZCwgY29uc3QgY2hhciAqcGF0aCkgeworICAgICAgICBzdHJ1Y3Qgc3RhdCBzdF9mZDsKKworICAgICAgICBpZiAoZmQgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworCisgICAgICAgIG1lbXNldCgmc3RfZmQsIDAsIHNpemVvZihzdF9mZCkpOworICAgICAgICBpZiAoZnN0YXQoZmQsICZzdF9mZCkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAtZXJybm87CisKKyAgICAgICAgaWYgKCFTX0lTRklGTyhzdF9mZC5zdF9tb2RlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBpZiAocGF0aCkgeworICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0IHN0X3BhdGg7CisKKyAgICAgICAgICAgICAgICBtZW1zZXQoJnN0X3BhdGgsIDAsIHNpemVvZihzdF9wYXRoKSk7CisgICAgICAgICAgICAgICAgaWYgKHN0YXQocGF0aCwgJnN0X3BhdGgpIDwgMCkgeworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJybm8gPT0gRU5PRU5UIHx8IGVycm5vID09IEVOT1RESVIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLWVycm5vOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgICAgICAgICAgc3RfcGF0aC5zdF9kZXYgPT0gc3RfZmQuc3RfZGV2ICYmCisgICAgICAgICAgICAgICAgICAgICAgICBzdF9wYXRoLnN0X2lubyA9PSBzdF9mZC5zdF9pbm87CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gMTsKK30KKworc3RhdGljIGludCBzZF9pc19zb2NrZXRfaW50ZXJuYWwoaW50IGZkLCBpbnQgdHlwZSwgaW50IGxpc3RlbmluZykgeworICAgICAgICBzdHJ1Y3Qgc3RhdCBzdF9mZDsKKworICAgICAgICBpZiAoZmQgPCAwIHx8IHR5cGUgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworCisgICAgICAgIGlmIChmc3RhdChmZCwgJnN0X2ZkKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIC1lcnJubzsKKworICAgICAgICBpZiAoIVNfSVNTT0NLKHN0X2ZkLnN0X21vZGUpKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIGlmICh0eXBlICE9IDApIHsKKyAgICAgICAgICAgICAgICBpbnQgb3RoZXJfdHlwZSA9IDA7CisgICAgICAgICAgICAgICAgc29ja2xlbl90IGwgPSBzaXplb2Yob3RoZXJfdHlwZSk7CisKKyAgICAgICAgICAgICAgICBpZiAoZ2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fVFlQRSwgJm90aGVyX3R5cGUsICZsKSA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLWVycm5vOworCisgICAgICAgICAgICAgICAgaWYgKGwgIT0gc2l6ZW9mKG90aGVyX3R5cGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisKKyAgICAgICAgICAgICAgICBpZiAob3RoZXJfdHlwZSAhPSB0eXBlKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICBpZiAobGlzdGVuaW5nID49IDApIHsKKyAgICAgICAgICAgICAgICBpbnQgYWNjZXB0aW5nID0gMDsKKyAgICAgICAgICAgICAgICBzb2NrbGVuX3QgbCA9IHNpemVvZihhY2NlcHRpbmcpOworCisgICAgICAgICAgICAgICAgaWYgKGdldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX0FDQ0VQVENPTk4sICZhY2NlcHRpbmcsICZsKSA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLWVycm5vOworCisgICAgICAgICAgICAgICAgaWYgKGwgIT0gc2l6ZW9mKGFjY2VwdGluZykpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgICAgICAgICAgICAgIGlmICghYWNjZXB0aW5nICE9ICFsaXN0ZW5pbmcpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAxOworfQorCit1bmlvbiBzb2NrYWRkcl91bmlvbiB7CisgICAgICAgIHN0cnVjdCBzb2NrYWRkciBzYTsKKyAgICAgICAgc3RydWN0IHNvY2thZGRyX2luIGluNDsKKyAgICAgICAgc3RydWN0IHNvY2thZGRyX2luNiBpbjY7CisgICAgICAgIHN0cnVjdCBzb2NrYWRkcl91biB1bjsKKyAgICAgICAgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc3RvcmFnZTsKK307CisKK2ludCBzZF9pc19zb2NrZXQoaW50IGZkLCBpbnQgZmFtaWx5LCBpbnQgdHlwZSwgaW50IGxpc3RlbmluZykgeworICAgICAgICBpbnQgcjsKKworICAgICAgICBpZiAoZmFtaWx5IDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgICAgICBpZiAoKHIgPSBzZF9pc19zb2NrZXRfaW50ZXJuYWwoZmQsIHR5cGUsIGxpc3RlbmluZykpIDw9IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIHI7CisKKyAgICAgICAgaWYgKGZhbWlseSA+IDApIHsKKyAgICAgICAgICAgICAgICB1bmlvbiBzb2NrYWRkcl91bmlvbiBzb2NrYWRkcjsKKyAgICAgICAgICAgICAgICBzb2NrbGVuX3QgbDsKKworICAgICAgICAgICAgICAgIG1lbXNldCgmc29ja2FkZHIsIDAsIHNpemVvZihzb2NrYWRkcikpOworICAgICAgICAgICAgICAgIGwgPSBzaXplb2Yoc29ja2FkZHIpOworCisgICAgICAgICAgICAgICAgaWYgKGdldHNvY2tuYW1lKGZkLCAmc29ja2FkZHIuc2EsICZsKSA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLWVycm5vOworCisgICAgICAgICAgICAgICAgaWYgKGwgPCBzaXplb2Yoc2FfZmFtaWx5X3QpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gc29ja2FkZHIuc2Euc2FfZmFtaWx5ID09IGZhbWlseTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAxOworfQorCitpbnQgc2RfaXNfc29ja2V0X2luZXQoaW50IGZkLCBpbnQgZmFtaWx5LCBpbnQgdHlwZSwgaW50IGxpc3RlbmluZywgdWludDE2X3QgcG9ydCkgeworICAgICAgICB1bmlvbiBzb2NrYWRkcl91bmlvbiBzb2NrYWRkcjsKKyAgICAgICAgc29ja2xlbl90IGw7CisgICAgICAgIGludCByOworCisgICAgICAgIGlmIChmYW1pbHkgIT0gMCAmJiBmYW1pbHkgIT0gQUZfSU5FVCAmJiBmYW1pbHkgIT0gQUZfSU5FVDYpCisgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisKKyAgICAgICAgaWYgKChyID0gc2RfaXNfc29ja2V0X2ludGVybmFsKGZkLCB0eXBlLCBsaXN0ZW5pbmcpKSA8PSAwKQorICAgICAgICAgICAgICAgIHJldHVybiByOworCisgICAgICAgIG1lbXNldCgmc29ja2FkZHIsIDAsIHNpemVvZihzb2NrYWRkcikpOworICAgICAgICBsID0gc2l6ZW9mKHNvY2thZGRyKTsKKworICAgICAgICBpZiAoZ2V0c29ja25hbWUoZmQsICZzb2NrYWRkci5zYSwgJmwpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLWVycm5vOworCisgICAgICAgIGlmIChsIDwgc2l6ZW9mKHNhX2ZhbWlseV90KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgICAgICBpZiAoc29ja2FkZHIuc2Euc2FfZmFtaWx5ICE9IEFGX0lORVQgJiYKKyAgICAgICAgICAgIHNvY2thZGRyLnNhLnNhX2ZhbWlseSAhPSBBRl9JTkVUNikKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBpZiAoZmFtaWx5ID4gMCkKKyAgICAgICAgICAgICAgICBpZiAoc29ja2FkZHIuc2Euc2FfZmFtaWx5ICE9IGZhbWlseSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIGlmIChwb3J0ID4gMCkgeworICAgICAgICAgICAgICAgIGlmIChzb2NrYWRkci5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwgPCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBodG9ucyhwb3J0KSA9PSBzb2NrYWRkci5pbjQuc2luX3BvcnQ7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsIDwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGh0b25zKHBvcnQpID09IHNvY2thZGRyLmluNi5zaW42X3BvcnQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIDE7Cit9CisKK2ludCBzZF9pc19zb2NrZXRfdW5peChpbnQgZmQsIGludCB0eXBlLCBpbnQgbGlzdGVuaW5nLCBjb25zdCBjaGFyICpwYXRoLCBzaXplX3QgbGVuZ3RoKSB7CisgICAgICAgIHVuaW9uIHNvY2thZGRyX3VuaW9uIHNvY2thZGRyOworICAgICAgICBzb2NrbGVuX3QgbDsKKyAgICAgICAgaW50IHI7CisKKyAgICAgICAgaWYgKChyID0gc2RfaXNfc29ja2V0X2ludGVybmFsKGZkLCB0eXBlLCBsaXN0ZW5pbmcpKSA8PSAwKQorICAgICAgICAgICAgICAgIHJldHVybiByOworCisgICAgICAgIG1lbXNldCgmc29ja2FkZHIsIDAsIHNpemVvZihzb2NrYWRkcikpOworICAgICAgICBsID0gc2l6ZW9mKHNvY2thZGRyKTsKKworICAgICAgICBpZiAoZ2V0c29ja25hbWUoZmQsICZzb2NrYWRkci5zYSwgJmwpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLWVycm5vOworCisgICAgICAgIGlmIChsIDwgc2l6ZW9mKHNhX2ZhbWlseV90KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgICAgICBpZiAoc29ja2FkZHIuc2Euc2FfZmFtaWx5ICE9IEFGX1VOSVgpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgaWYgKHBhdGgpIHsKKyAgICAgICAgICAgICAgICBpZiAobGVuZ3RoIDw9IDApCisgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSBzdHJsZW4ocGF0aCk7CisKKyAgICAgICAgICAgICAgICBpZiAobGVuZ3RoIDw9IDApCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBVbm5hbWVkIHNvY2tldCAqLworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGwgPT0gb2Zmc2V0b2Yoc3RydWN0IHNvY2thZGRyX3VuLCBzdW5fcGF0aCk7CisKKyAgICAgICAgICAgICAgICBpZiAocGF0aFswXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vcm1hbCBwYXRoIHNvY2tldCAqLworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsID49IG9mZnNldG9mKHN0cnVjdCBzb2NrYWRkcl91biwgc3VuX3BhdGgpICsgbGVuZ3RoICsgMSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtY21wKHBhdGgsIHNvY2thZGRyLnVuLnN1bl9wYXRoLCBsZW5ndGgrMSkgPT0gMDsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBBYnN0cmFjdCBuYW1lc3BhY2Ugc29ja2V0ICovCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGwgPT0gb2Zmc2V0b2Yoc3RydWN0IHNvY2thZGRyX3VuLCBzdW5fcGF0aCkgKyBsZW5ndGgpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNtcChwYXRoLCBzb2NrYWRkci51bi5zdW5fcGF0aCwgbGVuZ3RoKSA9PSAwOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIDE7Cit9CisKK2ludCBzZF9ub3RpZnkoaW50IHVuc2V0X2Vudmlyb25tZW50LCBjb25zdCBjaGFyICpzdGF0ZSkgeworI2lmIGRlZmluZWQoRElTQUJMRV9TWVNURU1EKSB8fCAhZGVmaW5lZChfX2xpbnV4X18pIHx8ICFkZWZpbmVkKFNPQ0tfQ0xPRVhFQykKKyAgICAgICAgcmV0dXJuIDA7CisjZWxzZQorICAgICAgICBpbnQgZmQgPSAtMSwgcjsKKyAgICAgICAgc3RydWN0IG1zZ2hkciBtc2doZHI7CisgICAgICAgIHN0cnVjdCBpb3ZlYyBpb3ZlYzsKKyAgICAgICAgdW5pb24gc29ja2FkZHJfdW5pb24gc29ja2FkZHI7CisgICAgICAgIGNvbnN0IGNoYXIgKmU7CisKKyAgICAgICAgaWYgKCFzdGF0ZSkgeworICAgICAgICAgICAgICAgIHIgPSAtRUlOVkFMOworICAgICAgICAgICAgICAgIGdvdG8gZmluaXNoOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCEoZSA9IGdldGVudigiTk9USUZZX1NPQ0tFVCIpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICAvKiBNdXN0IGJlIGFuIGFic3RyYWN0IHNvY2tldCwgb3IgYW4gYWJzb2x1dGUgcGF0aCAqLworICAgICAgICBpZiAoKGVbMF0gIT0gJ0AnICYmIGVbMF0gIT0gJy8nKSB8fCBlWzFdID09IDApIHsKKyAgICAgICAgICAgICAgICByID0gLUVJTlZBTDsKKyAgICAgICAgICAgICAgICBnb3RvIGZpbmlzaDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgoZmQgPSBzb2NrZXQoQUZfVU5JWCwgU09DS19ER1JBTXxTT0NLX0NMT0VYRUMsIDApKSA8IDApIHsKKyAgICAgICAgICAgICAgICByID0gLWVycm5vOworICAgICAgICAgICAgICAgIGdvdG8gZmluaXNoOworICAgICAgICB9CisKKyAgICAgICAgbWVtc2V0KCZzb2NrYWRkciwgMCwgc2l6ZW9mKHNvY2thZGRyKSk7CisgICAgICAgIHNvY2thZGRyLnNhLnNhX2ZhbWlseSA9IEFGX1VOSVg7CisgICAgICAgIHN0cm5jcHkoc29ja2FkZHIudW4uc3VuX3BhdGgsIGUsIHNpemVvZihzb2NrYWRkci51bi5zdW5fcGF0aCkpOworCisgICAgICAgIGlmIChzb2NrYWRkci51bi5zdW5fcGF0aFswXSA9PSAnQCcpCisgICAgICAgICAgICAgICAgc29ja2FkZHIudW4uc3VuX3BhdGhbMF0gPSAwOworCisgICAgICAgIG1lbXNldCgmaW92ZWMsIDAsIHNpemVvZihpb3ZlYykpOworICAgICAgICBpb3ZlYy5pb3ZfYmFzZSA9IChjaGFyKikgc3RhdGU7CisgICAgICAgIGlvdmVjLmlvdl9sZW4gPSBzdHJsZW4oc3RhdGUpOworCisgICAgICAgIG1lbXNldCgmbXNnaGRyLCAwLCBzaXplb2YobXNnaGRyKSk7CisgICAgICAgIG1zZ2hkci5tc2dfbmFtZSA9ICZzb2NrYWRkcjsKKyAgICAgICAgbXNnaGRyLm1zZ19uYW1lbGVuID0gb2Zmc2V0b2Yoc3RydWN0IHNvY2thZGRyX3VuLCBzdW5fcGF0aCkgKyBzdHJsZW4oZSk7CisKKyAgICAgICAgaWYgKG1zZ2hkci5tc2dfbmFtZWxlbiA+IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfdW4pKQorICAgICAgICAgICAgICAgIG1zZ2hkci5tc2dfbmFtZWxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfdW4pOworCisgICAgICAgIG1zZ2hkci5tc2dfaW92ID0gJmlvdmVjOworICAgICAgICBtc2doZHIubXNnX2lvdmxlbiA9IDE7CisKKyAgICAgICAgaWYgKHNlbmRtc2coZmQsICZtc2doZHIsIE1TR19OT1NJR05BTCkgPCAwKSB7CisgICAgICAgICAgICAgICAgciA9IC1lcnJubzsKKyAgICAgICAgICAgICAgICBnb3RvIGZpbmlzaDsKKyAgICAgICAgfQorCisgICAgICAgIHIgPSAxOworCitmaW5pc2g6CisgICAgICAgIGlmICh1bnNldF9lbnZpcm9ubWVudCkKKyAgICAgICAgICAgICAgICB1bnNldGVudigiTk9USUZZX1NPQ0tFVCIpOworCisgICAgICAgIGlmIChmZCA+PSAwKQorICAgICAgICAgICAgICAgIGNsb3NlKGZkKTsKKworICAgICAgICByZXR1cm4gcjsKKyNlbmRpZgorfQorCitpbnQgc2Rfbm90aWZ5ZihpbnQgdW5zZXRfZW52aXJvbm1lbnQsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSB7CisjaWYgZGVmaW5lZChESVNBQkxFX1NZU1RFTUQpIHx8ICFkZWZpbmVkKF9fbGludXhfXykKKyAgICAgICAgcmV0dXJuIDA7CisjZWxzZQorICAgICAgICB2YV9saXN0IGFwOworICAgICAgICBjaGFyICpwID0gTlVMTDsKKyAgICAgICAgaW50IHI7CisKKyAgICAgICAgdmFfc3RhcnQoYXAsIGZvcm1hdCk7CisgICAgICAgIHIgPSB2YXNwcmludGYoJnAsIGZvcm1hdCwgYXApOworICAgICAgICB2YV9lbmQoYXApOworCisgICAgICAgIGlmIChyIDwgMCB8fCAhcCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKKworICAgICAgICByID0gc2Rfbm90aWZ5KHVuc2V0X2Vudmlyb25tZW50LCBwKTsKKyAgICAgICAgZnJlZShwKTsKKworICAgICAgICByZXR1cm4gcjsKKyNlbmRpZgorfQorCitpbnQgc2RfYm9vdGVkKHZvaWQpIHsKKyNpZiBkZWZpbmVkKERJU0FCTEVfU1lTVEVNRCkgfHwgIWRlZmluZWQoX19saW51eF9fKQorICAgICAgICByZXR1cm4gMDsKKyNlbHNlCisKKyAgICAgICAgc3RydWN0IHN0YXQgYSwgYjsKKworICAgICAgICAvKiBXZSBzaW1wbHkgdGVzdCB3aGV0aGVyIHRoZSBzeXN0ZW1kIGNncm91cCBoaWVyYXJjaHkgaXMKKyAgICAgICAgICogbW91bnRlZCAqLworCisgICAgICAgIGlmIChsc3RhdCgiL3N5cy9mcy9jZ3JvdXAiLCAmYSkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIGlmIChsc3RhdCgiL3N5cy9mcy9jZ3JvdXAvc3lzdGVtZCIsICZiKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgcmV0dXJuIGEuc3RfZGV2ICE9IGIuc3RfZGV2OworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL3NkLWRhZW1vbi5oIGIvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9zZC1kYWVtb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Yjg1M2ExCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9zZC1kYWVtb24uaApAQCAtMCwwICsxLDI2NSBAQAorLyotKi0gTW9kZTogQzsgYy1iYXNpYy1vZmZzZXQ6IDg7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0qLworCisjaWZuZGVmIGZvb3NkZGFlbW9uaGZvbworI2RlZmluZSBmb29zZGRhZW1vbmhmb28KKworLyoqKgorICBDb3B5cmlnaHQgMjAxMCBMZW5uYXJ0IFBvZXR0ZXJpbmcKKworICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgorICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcworICAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLAorICBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLAorICBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLAorICBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLAorICBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAgU09GVFdBUkUuCisqKiovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qCisgIFJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBvZiBhIGZldyBzeXN0ZW1kIHJlbGF0ZWQgaW50ZXJmYWNlcyBmb3IKKyAgd3JpdGluZyBkYWVtb25zLiBUaGVzZSBpbnRlcmZhY2VzIGFyZSB0cml2aWFsIHRvIGltcGxlbWVudC4gVG8KKyAgc2ltcGxpZnkgcG9ydGluZyB3ZSBwcm92aWRlIHRoaXMgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uLgorICBBcHBsaWNhdGlvbnMgYXJlIHdlbGNvbWUgdG8gcmVpbXBsZW1lbnQgdGhlIGFsZ29yaXRobXMgZGVzY3JpYmVkCisgIGhlcmUgaWYgdGhleSBkbyBub3Qgd2FudCB0byBpbmNsdWRlIHRoZXNlIHR3byBzb3VyY2UgZmlsZXMuCisKKyAgVGhlIGZvbGxvd2luZyBmdW5jdGlvbmFsaXR5IGlzIHByb3ZpZGVkOgorCisgIC0gU3VwcG9ydCBmb3IgbG9nZ2luZyB3aXRoIGxvZyBsZXZlbHMgb24gc3RkZXJyCisgIC0gRmlsZSBkZXNjcmlwdG9yIHBhc3NpbmcgZm9yIHNvY2tldC1iYXNlZCBhY3RpdmF0aW9uCisgIC0gRGFlbW9uIHN0YXJ0dXAgYW5kIHN0YXR1cyBub3RpZmljYXRpb24KKyAgLSBEZXRlY3Rpb24gb2Ygc3lzdGVtZCBib290cworCisgIFlvdSBtYXkgY29tcGlsZSB0aGlzIHdpdGggLURESVNBQkxFX1NZU1RFTUQgdG8gZGlzYWJsZSBzeXN0ZW1kCisgIHN1cHBvcnQuIFRoaXMgbWFrZXMgYWxsIHRob3NlIGNhbGxzIE5PUHMgdGhhdCBhcmUgZGlyZWN0bHkgcmVsYXRlZCB0bworICBzeXN0ZW1kIChpLmUuIG9ubHkgc2RfaXNfeHh4KCkgd2lsbCBzdGF5IHVzZWZ1bCkuCisKKyAgU2luY2UgdGhpcyBpcyBkcm9wLWluIGNvZGUgd2UgZG9uJ3Qgd2FudCBhbnkgb2Ygb3VyIHN5bWJvbHMgdG8gYmUKKyAgZXhwb3J0ZWQgaW4gYW55IGNhc2UuIEhlbmNlIHdlIGRlY2xhcmUgaGlkZGVuIHZpc2liaWxpdHkgZm9yIGFsbCBvZgorICB0aGVtLgorCisgIFlvdSBtYXkgZmluZCBhbiB1cC10by1kYXRlIHZlcnNpb24gb2YgdGhlc2Ugc291cmNlIGZpbGVzIG9ubGluZToKKworICBodHRwOi8vY2dpdC5mcmVlZGVza3RvcC5vcmcvc3lzdGVtZC9wbGFpbi9zcmMvc2QtZGFlbW9uLmgKKyAgaHR0cDovL2NnaXQuZnJlZWRlc2t0b3Aub3JnL3N5c3RlbWQvcGxhaW4vc3JjL3NkLWRhZW1vbi5jCisKKyAgVGhpcyBzaG91bGQgY29tcGlsZSBvbiBub24tTGludXggc3lzdGVtcywgdG9vLCBidXQgd2l0aCB0aGUKKyAgZXhjZXB0aW9uIG9mIHRoZSBzZF9pc194eHgoKSBjYWxscyBhbGwgZnVuY3Rpb25zIHdpbGwgYmVjb21lIE5PUHMuCisKKyAgU2VlIHNkLWRhZW1vbig3KSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyovCisKKyNpZm5kZWYgX3NkX3ByaW50Zl9hdHRyXworI2lmIF9fR05VQ19fID49IDQKKyNkZWZpbmUgX3NkX3ByaW50Zl9hdHRyXyhhLGIpIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgYSwgYikpKQorI2Vsc2UKKyNkZWZpbmUgX3NkX3ByaW50Zl9hdHRyXyhhLGIpCisjZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIF9zZF9oaWRkZW5fCisjaWYgKF9fR05VQ19fID49IDQpICYmICFkZWZpbmVkKFNEX0VYUE9SVF9TWU1CT0xTKQorI2RlZmluZSBfc2RfaGlkZGVuXyBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSgiaGlkZGVuIikpKQorI2Vsc2UKKyNkZWZpbmUgX3NkX2hpZGRlbl8KKyNlbmRpZgorI2VuZGlmCisKKy8qCisgIExvZyBsZXZlbHMgZm9yIHVzYWdlIG9uIHN0ZGVycjoKKworICAgICAgICAgIGZwcmludGYoc3RkZXJyLCBTRF9OT1RJQ0UgIkhlbGxvIFdvcmxkIVxuIik7CisKKyAgVGhpcyBpcyBzaW1pbGFyIHRvIHByaW50aygpIHVzYWdlIGluIHRoZSBrZXJuZWwuCisqLworI2RlZmluZSBTRF9FTUVSRyAgICI8MD4iICAvKiBzeXN0ZW0gaXMgdW51c2FibGUgKi8KKyNkZWZpbmUgU0RfQUxFUlQgICAiPDE+IiAgLyogYWN0aW9uIG11c3QgYmUgdGFrZW4gaW1tZWRpYXRlbHkgKi8KKyNkZWZpbmUgU0RfQ1JJVCAgICAiPDI+IiAgLyogY3JpdGljYWwgY29uZGl0aW9ucyAqLworI2RlZmluZSBTRF9FUlIgICAgICI8Mz4iICAvKiBlcnJvciBjb25kaXRpb25zICovCisjZGVmaW5lIFNEX1dBUk5JTkcgIjw0PiIgIC8qIHdhcm5pbmcgY29uZGl0aW9ucyAqLworI2RlZmluZSBTRF9OT1RJQ0UgICI8NT4iICAvKiBub3JtYWwgYnV0IHNpZ25pZmljYW50IGNvbmRpdGlvbiAqLworI2RlZmluZSBTRF9JTkZPICAgICI8Nj4iICAvKiBpbmZvcm1hdGlvbmFsICovCisjZGVmaW5lIFNEX0RFQlVHICAgIjw3PiIgIC8qIGRlYnVnLWxldmVsIG1lc3NhZ2VzICovCisKKy8qIFRoZSBmaXJzdCBwYXNzZWQgZmlsZSBkZXNjcmlwdG9yIGlzIGZkIDMgKi8KKyNkZWZpbmUgU0RfTElTVEVOX0ZEU19TVEFSVCAzCisKKy8qCisgIFJldHVybnMgaG93IG1hbnkgZmlsZSBkZXNjcmlwdG9ycyBoYXZlIGJlZW4gcGFzc2VkLCBvciBhIG5lZ2F0aXZlCisgIGVycm5vIGNvZGUgb24gZmFpbHVyZS4gT3B0aW9uYWxseSwgcmVtb3ZlcyB0aGUgJExJU1RFTl9GRFMgYW5kCisgICRMSVNURU5fUElEIGZpbGUgZGVzY3JpcHRvcnMgZnJvbSB0aGUgZW52aXJvbm1lbnQgKHJlY29tbWVuZGVkLCBidXQKKyAgcHJvYmxlbWF0aWMgaW4gdGhyZWFkZWQgZW52aXJvbm1lbnRzKS4gSWYgciBpcyB0aGUgcmV0dXJuIHZhbHVlIG9mCisgIHRoaXMgZnVuY3Rpb24geW91J2xsIGZpbmQgdGhlIGZpbGUgZGVzY3JpcHRvcnMgcGFzc2VkIGFzIGZkcworICBTRF9MSVNURU5fRkRTX1NUQVJUIHRvIFNEX0xJU1RFTl9GRFNfU1RBUlQrci0xLiBSZXR1cm5zIGEgbmVnYXRpdmUKKyAgZXJybm8gc3R5bGUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLiBUaGlzIGZ1bmN0aW9uIGNhbGwgZW5zdXJlcyB0aGF0CisgIHRoZSBGRF9DTE9FWEVDIGZsYWcgaXMgc2V0IGZvciB0aGUgcGFzc2VkIGZpbGUgZGVzY3JpcHRvcnMsIHRvIG1ha2UKKyAgc3VyZSB0aGV5IGFyZSBub3QgcGFzc2VkIG9uIHRvIGNoaWxkIHByb2Nlc3Nlcy4gSWYgRkRfQ0xPRVhFQyBzaGFsbAorICBub3QgYmUgc2V0LCB0aGUgY2FsbGVyIG5lZWRzIHRvIHVuc2V0IGl0IGFmdGVyIHRoaXMgY2FsbCBmb3IgYWxsIGZpbGUKKyAgZGVzY3JpcHRvcnMgdGhhdCBhcmUgdXNlZC4KKworICBTZWUgc2RfbGlzdGVuX2ZkcygzKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyovCitpbnQgc2RfbGlzdGVuX2ZkcyhpbnQgdW5zZXRfZW52aXJvbm1lbnQpIF9zZF9oaWRkZW5fOworCisvKgorICBIZWxwZXIgY2FsbCBmb3IgaWRlbnRpZnlpbmcgYSBwYXNzZWQgZmlsZSBkZXNjcmlwdG9yLiBSZXR1cm5zIDEgaWYKKyAgdGhlIGZpbGUgZGVzY3JpcHRvciBpcyBhIEZJRk8gaW4gdGhlIGZpbGUgc3lzdGVtIHN0b3JlZCB1bmRlciB0aGUKKyAgc3BlY2lmaWVkIHBhdGgsIDAgb3RoZXJ3aXNlLiBJZiBwYXRoIGlzIE5VTEwgYSBwYXRoIG5hbWUgY2hlY2sgd2lsbAorICBub3QgYmUgZG9uZSBhbmQgdGhlIGNhbGwgb25seSB2ZXJpZmllcyBpZiB0aGUgZmlsZSBkZXNjcmlwdG9yCisgIHJlZmVycyB0byBhIEZJRk8uIFJldHVybnMgYSBuZWdhdGl2ZSBlcnJubyBzdHlsZSBlcnJvciBjb2RlIG9uCisgIGZhaWx1cmUuCisKKyAgU2VlIHNkX2lzX2ZpZm8oMykgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisqLworaW50IHNkX2lzX2ZpZm8oaW50IGZkLCBjb25zdCBjaGFyICpwYXRoKSBfc2RfaGlkZGVuXzsKKworLyoKKyAgSGVscGVyIGNhbGwgZm9yIGlkZW50aWZ5aW5nIGEgcGFzc2VkIGZpbGUgZGVzY3JpcHRvci4gUmV0dXJucyAxIGlmCisgIHRoZSBmaWxlIGRlc2NyaXB0b3IgaXMgYSBzb2NrZXQgb2YgdGhlIHNwZWNpZmllZCBmYW1pbHkgKEFGX0lORVQsCisgIC4uLikgYW5kIHR5cGUgKFNPQ0tfREdSQU0sIFNPQ0tfU1RSRUFNLCAuLi4pLCAwIG90aGVyd2lzZS4gSWYKKyAgZmFtaWx5IGlzIDAgYSBzb2NrZXQgZmFtaWx5IGNoZWNrIHdpbGwgbm90IGJlIGRvbmUuIElmIHR5cGUgaXMgMCBhCisgIHNvY2tldCB0eXBlIGNoZWNrIHdpbGwgbm90IGJlIGRvbmUgYW5kIHRoZSBjYWxsIG9ubHkgdmVyaWZpZXMgaWYKKyAgdGhlIGZpbGUgZGVzY3JpcHRvciByZWZlcnMgdG8gYSBzb2NrZXQuIElmIGxpc3RlbmluZyBpcyA+IDAgaXQgaXMKKyAgdmVyaWZpZWQgdGhhdCB0aGUgc29ja2V0IGlzIGluIGxpc3RlbmluZyBtb2RlLiAoaS5lLiBsaXN0ZW4oKSBoYXMKKyAgYmVlbiBjYWxsZWQpIElmIGxpc3RlbmluZyBpcyA9PSAwIGl0IGlzIHZlcmlmaWVkIHRoYXQgdGhlIHNvY2tldCBpcworICBub3QgaW4gbGlzdGVuaW5nIG1vZGUuIElmIGxpc3RlbmluZyBpcyA8IDAgbm8gbGlzdGVuaW5nIG1vZGUgY2hlY2sKKyAgaXMgZG9uZS4gUmV0dXJucyBhIG5lZ2F0aXZlIGVycm5vIHN0eWxlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKworICBTZWUgc2RfaXNfc29ja2V0KDMpIGZvciBtb3JlIGluZm9ybWF0aW9uLgorKi8KK2ludCBzZF9pc19zb2NrZXQoaW50IGZkLCBpbnQgZmFtaWx5LCBpbnQgdHlwZSwgaW50IGxpc3RlbmluZykgX3NkX2hpZGRlbl87CisKKy8qCisgIEhlbHBlciBjYWxsIGZvciBpZGVudGlmeWluZyBhIHBhc3NlZCBmaWxlIGRlc2NyaXB0b3IuIFJldHVybnMgMSBpZgorICB0aGUgZmlsZSBkZXNjcmlwdG9yIGlzIGFuIEludGVybmV0IHNvY2tldCwgb2YgdGhlIHNwZWNpZmllZCBmYW1pbHkKKyAgKGVpdGhlciBBRl9JTkVUIG9yIEFGX0lORVQ2KSBhbmQgdGhlIHNwZWNpZmllZCB0eXBlIChTT0NLX0RHUkFNLAorICBTT0NLX1NUUkVBTSwgLi4uKSwgMCBvdGhlcndpc2UuIElmIHZlcnNpb24gaXMgMCBhIHByb3RvY29sIHZlcnNpb24KKyAgY2hlY2sgaXMgbm90IGRvbmUuIElmIHR5cGUgaXMgMCBhIHNvY2tldCB0eXBlIGNoZWNrIHdpbGwgbm90IGJlCisgIGRvbmUuIElmIHBvcnQgaXMgMCBhIHNvY2tldCBwb3J0IGNoZWNrIHdpbGwgbm90IGJlIGRvbmUuIFRoZQorICBsaXN0ZW5pbmcgZmxhZyBpcyB1c2VkIHRoZSBzYW1lIHdheSBhcyBpbiBzZF9pc19zb2NrZXQoKS4gUmV0dXJucyBhCisgIG5lZ2F0aXZlIGVycm5vIHN0eWxlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKworICBTZWUgc2RfaXNfc29ja2V0X2luZXQoMykgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisqLworaW50IHNkX2lzX3NvY2tldF9pbmV0KGludCBmZCwgaW50IGZhbWlseSwgaW50IHR5cGUsIGludCBsaXN0ZW5pbmcsIHVpbnQxNl90IHBvcnQpIF9zZF9oaWRkZW5fOworCisvKgorICBIZWxwZXIgY2FsbCBmb3IgaWRlbnRpZnlpbmcgYSBwYXNzZWQgZmlsZSBkZXNjcmlwdG9yLiBSZXR1cm5zIDEgaWYKKyAgdGhlIGZpbGUgZGVzY3JpcHRvciBpcyBhbiBBRl9VTklYIHNvY2tldCBvZiB0aGUgc3BlY2lmaWVkIHR5cGUKKyAgKFNPQ0tfREdSQU0sIFNPQ0tfU1RSRUFNLCAuLi4pIGFuZCBwYXRoLCAwIG90aGVyd2lzZS4gSWYgdHlwZSBpcyAwCisgIGEgc29ja2V0IHR5cGUgY2hlY2sgd2lsbCBub3QgYmUgZG9uZS4gSWYgcGF0aCBpcyBOVUxMIGEgc29ja2V0IHBhdGgKKyAgY2hlY2sgd2lsbCBub3QgYmUgZG9uZS4gRm9yIG5vcm1hbCBBRl9VTklYIHNvY2tldHMgc2V0IGxlbmd0aCB0bworICAwLiBGb3IgYWJzdHJhY3QgbmFtZXNwYWNlIHNvY2tldHMgc2V0IGxlbmd0aCB0byB0aGUgbGVuZ3RoIG9mIHRoZQorICBzb2NrZXQgbmFtZSAoaW5jbHVkaW5nIHRoZSBpbml0aWFsIDAgYnl0ZSksIGFuZCBwYXNzIHRoZSBmdWxsCisgIHNvY2tldCBwYXRoIGluIHBhdGggKGluY2x1ZGluZyB0aGUgaW5pdGlhbCAwIGJ5dGUpLiBUaGUgbGlzdGVuaW5nCisgIGZsYWcgaXMgdXNlZCB0aGUgc2FtZSB3YXkgYXMgaW4gc2RfaXNfc29ja2V0KCkuIFJldHVybnMgYSBuZWdhdGl2ZQorICBlcnJubyBzdHlsZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisKKyAgU2VlIHNkX2lzX3NvY2tldF91bml4KDMpIGZvciBtb3JlIGluZm9ybWF0aW9uLgorKi8KK2ludCBzZF9pc19zb2NrZXRfdW5peChpbnQgZmQsIGludCB0eXBlLCBpbnQgbGlzdGVuaW5nLCBjb25zdCBjaGFyICpwYXRoLCBzaXplX3QgbGVuZ3RoKSBfc2RfaGlkZGVuXzsKKworLyoKKyAgSW5mb3JtcyBzeXN0ZW1kIGFib3V0IGNoYW5nZWQgZGFlbW9uIHN0YXRlLiBUaGlzIHRha2VzIGEgbnVtYmVyIG9mCisgIG5ld2xpbmUgc2VwYXJhdGVkIGVudmlyb25tZW50LXN0eWxlIHZhcmlhYmxlIGFzc2lnbm1lbnRzIGluIGEKKyAgc3RyaW5nLiBUaGUgZm9sbG93aW5nIHZhcmlhYmxlcyBhcmUga25vd246CisKKyAgICAgUkVBRFk9MSAgICAgIFRlbGxzIHN5c3RlbWQgdGhhdCBkYWVtb24gc3RhcnR1cCBpcyBmaW5pc2hlZCAob25seQorICAgICAgICAgICAgICAgICAgcmVsZXZhbnQgZm9yIHNlcnZpY2VzIG9mIFR5cGU9bm90aWZ5KS4gVGhlIHBhc3NlZAorICAgICAgICAgICAgICAgICAgYXJndW1lbnQgaXMgYSBib29sZWFuICIxIiBvciAiMCIuIFNpbmNlIHRoZXJlIGlzCisgICAgICAgICAgICAgICAgICBsaXR0bGUgdmFsdWUgaW4gc2lnbmFsaW5nIG5vbi1yZWFkaW5lc3MgdGhlIG9ubHkKKyAgICAgICAgICAgICAgICAgIHZhbHVlIGRhZW1vbnMgc2hvdWxkIHNlbmQgaXMgIlJFQURZPTEiLgorCisgICAgIFNUQVRVUz0uLi4gICBQYXNzZXMgYSBzaW5nbGUtbGluZSBzdGF0dXMgc3RyaW5nIGJhY2sgdG8gc3lzdGVtZAorICAgICAgICAgICAgICAgICAgdGhhdCBkZXNjcmliZXMgdGhlIGRhZW1vbiBzdGF0ZS4gVGhpcyBpcyBmcmVlLWZyb20KKyAgICAgICAgICAgICAgICAgIGFuZCBjYW4gYmUgdXNlZCBmb3IgdmFyaW91cyBwdXJwb3NlczogZ2VuZXJhbCBzdGF0ZQorICAgICAgICAgICAgICAgICAgZmVlZGJhY2ssIGZzY2stbGlrZSBwcm9ncmFtcyBjb3VsZCBwYXNzIGNvbXBsZXRpb24KKyAgICAgICAgICAgICAgICAgIHBlcmNlbnRhZ2VzIGFuZCBmYWlsaW5nIHByb2dyYW1zIGNvdWxkIHBhc3MgYSBodW1hbgorICAgICAgICAgICAgICAgICAgcmVhZGFibGUgZXJyb3IgbWVzc2FnZS4gRXhhbXBsZTogIlNUQVRVUz1Db21wbGV0ZWQKKyAgICAgICAgICAgICAgICAgIDY2JSBvZiBmaWxlIHN5c3RlbSBjaGVjay4uLiIKKworICAgICBFUlJOTz0uLi4gICAgSWYgYSBkYWVtb24gZmFpbHMsIHRoZSBlcnJuby1zdHlsZSBlcnJvciBjb2RlLAorICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkIGFzIHN0cmluZy4gRXhhbXBsZTogIkVSUk5PPTIiIGZvciBFTk9FTlQuCisKKyAgICAgQlVTRVJST1I9Li4uIElmIGEgZGFlbW9uIGZhaWxzLCB0aGUgRC1CdXMgZXJyb3Itc3R5bGUgZXJyb3IKKyAgICAgICAgICAgICAgICAgIGNvZGUuIEV4YW1wbGU6ICJCVVNFUlJPUj1vcmcuZnJlZWRlc2t0b3AuREJ1cy5FcnJvci5UaW1lZE91dCIKKworICAgICBNQUlOUElEPS4uLiAgVGhlIG1haW4gcGlkIG9mIGEgZGFlbW9uLCBpbiBjYXNlIHN5c3RlbWQgZGlkIG5vdAorICAgICAgICAgICAgICAgICAgZm9yayBvZmYgdGhlIHByb2Nlc3MgaXRzZWxmLiBFeGFtcGxlOiAiTUFJTlBJRD00NzExIgorCisgIERhZW1vbnMgY2FuIGNob29zZSB0byBzZW5kIGFkZGl0aW9uYWwgdmFyaWFibGVzLiBIb3dldmVyLCBpdCBpcworICByZWNvbW1lbmRlZCB0byBwcmVmaXggdmFyaWFibGUgbmFtZXMgbm90IGxpc3RlZCBhYm92ZSB3aXRoIFhfLgorCisgIFJldHVybnMgYSBuZWdhdGl2ZSBlcnJuby1zdHlsZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuIFJldHVybnMgPiAwCisgIGlmIHN5c3RlbWQgY291bGQgYmUgbm90aWZpZWQsIDAgaWYgaXQgY291bGRuJ3QgcG9zc2libHkgYmVjYXVzZQorICBzeXN0ZW1kIGlzIG5vdCBydW5uaW5nLgorCisgIEV4YW1wbGU6IFdoZW4gYSBkYWVtb24gZmluaXNoZWQgc3RhcnRpbmcgdXAsIGl0IGNvdWxkIGlzc3VlIHRoaXMKKyAgY2FsbCB0byBub3RpZnkgc3lzdGVtZCBhYm91dCBpdDoKKworICAgICBzZF9ub3RpZnkoMCwgIlJFQURZPTEiKTsKKworICBTZWUgc2Rfbm90aWZ5ZigpIGZvciBtb3JlIGNvbXBsZXRlIGV4YW1wbGVzLgorCisgIFNlZSBzZF9ub3RpZnkoMykgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisqLworaW50IHNkX25vdGlmeShpbnQgdW5zZXRfZW52aXJvbm1lbnQsIGNvbnN0IGNoYXIgKnN0YXRlKSBfc2RfaGlkZGVuXzsKKworLyoKKyAgU2ltaWxhciB0byBzZF9ub3RpZnkoKSBidXQgdGFrZXMgYSBmb3JtYXQgc3RyaW5nLgorCisgIEV4YW1wbGUgMTogQSBkYWVtb24gY291bGQgc2VuZCB0aGUgZm9sbG93aW5nIGFmdGVyIGluaXRpYWxpemF0aW9uOgorCisgICAgIHNkX25vdGlmeWYoMCwgIlJFQURZPTFcbiIKKyAgICAgICAgICAgICAgICAgICAiU1RBVFVTPVByb2Nlc3NpbmcgcmVxdWVzdHMuLi5cbiIKKyAgICAgICAgICAgICAgICAgICAiTUFJTlBJRD0lbHUiLAorICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKSBnZXRwaWQoKSk7CisKKyAgRXhhbXBsZSAyOiBBIGRhZW1vbiBjb3VsZCBzZW5kIHRoZSBmb2xsb3dpbmcgc2hvcnRseSBiZWZvcmUKKyAgZXhpdGluZywgb24gZmFpbHVyZToKKworICAgICBzZF9ub3RpZnlmKDAsICJTVEFUVVM9RmFpbGVkIHRvIHN0YXJ0IHVwOiAlc1xuIgorICAgICAgICAgICAgICAgICAgICJFUlJOTz0laSIsCisgICAgICAgICAgICAgICAgICAgc3RyZXJyb3IoZXJybm8pLAorICAgICAgICAgICAgICAgICAgIGVycm5vKTsKKworICBTZWUgc2Rfbm90aWZ5ZigzKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyovCitpbnQgc2Rfbm90aWZ5ZihpbnQgdW5zZXRfZW52aXJvbm1lbnQsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSBfc2RfcHJpbnRmX2F0dHJfKDIsMykgX3NkX2hpZGRlbl87CisKKy8qCisgIFJldHVybnMgPiAwIGlmIHRoZSBzeXN0ZW0gd2FzIGJvb3RlZCB3aXRoIHN5c3RlbWQuIFJldHVybnMgPCAwIG9uCisgIGVycm9yLiBSZXR1cm5zIDAgaWYgdGhlIHN5c3RlbSB3YXMgbm90IGJvb3RlZCB3aXRoIHN5c3RlbWQuIE5vdGUKKyAgdGhhdCBhbGwgb2YgdGhlIGZ1bmN0aW9ucyBhYm92ZSBoYW5kbGUgbm9uLXN5c3RlbWQgYm9vdHMganVzdAorICBmaW5lLiBZb3Ugc2hvdWxkIE5PVCBwcm90ZWN0IHRoZW0gd2l0aCBhIGNhbGwgdG8gdGhpcyBmdW5jdGlvbi4gQWxzbworICBub3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBjaGVja3Mgd2hldGhlciB0aGUgc3lzdGVtLCBub3QgdGhlIHVzZXIKKyAgc2Vzc2lvbiBpcyBjb250cm9sbGVkIGJ5IHN5c3RlbWQuIEhvd2V2ZXIgdGhlIGZ1bmN0aW9ucyBhYm92ZSB3b3JrCisgIGZvciBib3RoIHVzZXIgYW5kIHN5c3RlbSBzZXJ2aWNlcy4KKworICBTZWUgc2RfYm9vdGVkKDMpIGZvciBtb3JlIGluZm9ybWF0aW9uLgorKi8KK2ludCBzZF9ib290ZWQodm9pZCkgX3NkX2hpZGRlbl87CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9zZXRwcm9jdGl0bGUuYyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vc2V0cHJvY3RpdGxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZmMDk0MQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vc2V0cHJvY3RpdGxlLmMKQEAgLTAsMCArMSwxMTEgQEAKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2lmZGVmIEhBVkVfU1lTX1BSQ1RMX0gKKyNpbmNsdWRlIDxzeXMvcHJjdGwuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL21hbGxvYy5oPgorCisjaW5jbHVkZSAic2V0cHJvY3RpdGxlLmgiCisKKyNpZiAhZGVmaW5lZChIQVZFX1NFVFBST0NUSVRMRSkgJiYgZGVmaW5lZChfX2xpbnV4X18pCitzdGF0aWMgY2hhcioqIGFyZ3ZfYnVmZmVyID0gTlVMTDsKK3N0YXRpYyBzaXplX3QgYXJndl9zaXplID0gMDsKKworI2lmICFIQVZFX0RFQ0xfRU5WSVJPTgorZXh0ZXJuIGNoYXIgKiplbnZpcm9uOworI2VuZGlmCisKKyNlbmRpZgorCit2b2lkIGF2YWhpX2luaXRfcHJvY190aXRsZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpIHsKKworI2lmICFkZWZpbmVkKEhBVkVfU0VUUFJPQ1RJVExFKSAmJiBkZWZpbmVkKF9fbGludXhfXykKKworICAgIHVuc2lnbmVkIGk7CisgICAgY2hhciAqKm5ld19lbnZpcm9uLCAqZW5kcHRyOworCisgICAgLyogVGhpcyBjb2RlIGlzIHJlYWxseSByZWFsbHkgdWdseS4gV2UgbWFrZSBzb21lIG1lbW9yeSBsYXlvdXQKKyAgICAgKiBhc3N1bXB0aW9ucyBhbmQgcmV1c2UgdGhlIGVudmlyb25tZW50IGFycmF5IGFzIG1lbW9yeSB0byBzdG9yZQorICAgICAqIG91ciBwcm9jZXNzIHRpdGxlIGluICovCisKKyAgICBmb3IgKGkgPSAwOyBlbnZpcm9uW2ldOyBpKyspOworCisgICAgZW5kcHRyID0gaSA/IGVudmlyb25baS0xXSArIHN0cmxlbihlbnZpcm9uW2ktMV0pIDogYXJndlthcmdjLTFdICsgc3RybGVuKGFyZ3ZbYXJnYy0xXSk7CisKKyAgICBhcmd2X2J1ZmZlciA9IGFyZ3Y7CisgICAgYXJndl9zaXplID0gZW5kcHRyIC0gYXJndl9idWZmZXJbMF07CisKKyAgICAvKiBNYWtlIGEgY29weSBvZiBlbnZpcm9uICovCisKKyAgICBuZXdfZW52aXJvbiA9IGF2YWhpX21hbGxvYyhzaXplb2YoY2hhciopICogKGkgKyAxKSk7CisgICAgZm9yIChpID0gMDsgZW52aXJvbltpXTsgaSsrKQorICAgICAgICBuZXdfZW52aXJvbltpXSA9IGF2YWhpX3N0cmR1cChlbnZpcm9uW2ldKTsKKyAgICBuZXdfZW52aXJvbltpXSA9IE5VTEw7CisKKyAgICBlbnZpcm9uID0gbmV3X2Vudmlyb247CisKKyNlbmRpZgorfQorCit2b2lkIGF2YWhpX3NldF9wcm9jX3RpdGxlKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmZtdCwuLi4pIHsKKyNpZmRlZiBIQVZFX1NFVFBST0NUSVRMRQorICAgIGNoYXIgdFsyNTZdOworCisgICAgdmFfbGlzdCBhcDsKKyAgICB2YV9zdGFydChhcCwgZm10KTsKKyAgICB2c25wcmludGYodCwgc2l6ZW9mKHQpLCBmbXQsIGFwKTsKKyAgICB2YV9lbmQoYXApOworCisgICAgc2V0cHJvY3RpdGxlKCItJXMiLCB0KTsKKyNlbGlmIGRlZmluZWQoX19saW51eF9fKQorICAgIHNpemVfdCBsOworICAgIHZhX2xpc3QgYXA7CisKKyAgICBpZiAoIWFyZ3ZfYnVmZmVyKQorICAgICAgICByZXR1cm47CisKKyAgICB2YV9zdGFydChhcCwgZm10KTsKKyAgICB2c25wcmludGYoYXJndl9idWZmZXJbMF0sIGFyZ3Zfc2l6ZSwgZm10LCBhcCk7CisgICAgdmFfZW5kKGFwKTsKKworICAgIGwgPSBzdHJsZW4oYXJndl9idWZmZXJbMF0pOworCisgICAgbWVtc2V0KGFyZ3ZfYnVmZmVyWzBdICsgbCwgMCwgYXJndl9zaXplIC0gbCk7CisgICAgYXJndl9idWZmZXJbMV0gPSBOVUxMOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEhBVkVfU1lTX1BSQ1RMX0gpICYmIGRlZmluZWQoUFJfU0VUX05BTUUpCisKKyAgICBpZiAobmFtZSkKKyAgICAgICAgcHJjdGwoUFJfU0VUX05BTUUsICh1bnNpZ25lZCBsb25nKSBuYW1lLCAwLCAwLCAwKTsKKworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL3NldHByb2N0aXRsZS5oIGIvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9zZXRwcm9jdGl0bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDk5ZTJlCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9zZXRwcm9jdGl0bGUuaApAQCAtMCwwICsxLDI4IEBACisjaWZuZGVmIGZvb3NldHByb2N0aXRsZWhmb28KKyNkZWZpbmUgZm9vc2V0cHJvY3RpdGxlaGZvbworCisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vZ2NjbWFjcm8uaD4KKwordm9pZCBhdmFoaV9pbml0X3Byb2NfdGl0bGUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK3ZvaWQgYXZhaGlfc2V0X3Byb2NfdGl0bGUoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZm10LCAuLi4pIEFWQUhJX0dDQ19QUklOVEZfQVRUUjIzOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vc2Z0cC1zc2guc2VydmljZSBiL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vc2Z0cC1zc2guc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmFlNGYxCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9zZnRwLXNzaC5zZXJ2aWNlCkBAIC0wLDAgKzEsMzQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgc3RhbmRhbG9uZT0nbm8nPz48IS0tKi1ueG1sLSotLT4KKzwhRE9DVFlQRSBzZXJ2aWNlLWdyb3VwIFNZU1RFTSAiYXZhaGktc2VydmljZS5kdGQiPgorCis8IS0tCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgMDIxMTEtMTMwNyBVU0EuCistLT4KKworPCEtLSBTZWUgYXZhaGkuc2VydmljZSg1KSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGNvbmZpZ3VyYXRpb24gZmlsZSAtLT4KKworPHNlcnZpY2UtZ3JvdXA+CisKKyAgPG5hbWUgcmVwbGFjZS13aWxkY2FyZHM9InllcyI+JWg8L25hbWU+CisKKyAgPHNlcnZpY2U+CisgICAgPHR5cGU+X3NmdHAtc3NoLl90Y3A8L3R5cGU+CisgICAgPHBvcnQ+MjI8L3BvcnQ+CisgIDwvc2VydmljZT4KKworPC9zZXJ2aWNlLWdyb3VwPgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9zaW1wbGUtcHJvdG9jb2wuYyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vc2ltcGxlLXByb3RvY29sLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2UwZWJiMQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vc2ltcGxlLXByb3RvY29sLmMKQEAgLTAsMCArMSw1NjggQEAKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3VuLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vbGxpc3QuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vbWFsbG9jLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2Vycm9yLmg+CisKKyNpbmNsdWRlIDxhdmFoaS1jb3JlL2xvZy5oPgorI2luY2x1ZGUgPGF2YWhpLWNvcmUvbG9va3VwLmg+CisjaW5jbHVkZSA8YXZhaGktY29yZS9kbnMtc3J2LXJyLmg+CisKKyNpbmNsdWRlICJzaW1wbGUtcHJvdG9jb2wuaCIKKyNpbmNsdWRlICJtYWluLmgiCisjaW5jbHVkZSAic2QtZGFlbW9uLmgiCisKKyNpZmRlZiBFTkFCTEVfQ0hST09UCisjaW5jbHVkZSAiY2hyb290LmgiCisjZW5kaWYKKworI2lmbmRlZiBBRl9MT0NBTAorI2RlZmluZSBBRl9MT0NBTCBBRl9VTklYCisjZW5kaWYKKyNpZm5kZWYgUEZfTE9DQUwKKyNkZWZpbmUgUEZfTE9DQUwgUEZfVU5JWAorI2VuZGlmCisKKyNkZWZpbmUgQlVGRkVSX1NJWkUgKDIwKjEwMjQpCisKKyNkZWZpbmUgQ0xJRU5UU19NQVggNTAKKwordHlwZWRlZiBzdHJ1Y3QgQ2xpZW50IENsaWVudDsKK3R5cGVkZWYgc3RydWN0IFNlcnZlciBTZXJ2ZXI7CisKK3R5cGVkZWYgZW51bSB7CisgICAgQ0xJRU5UX0lETEUsCisgICAgQ0xJRU5UX1JFU09MVkVfSE9TVE5BTUUsCisgICAgQ0xJRU5UX1JFU09MVkVfQUREUkVTUywKKyAgICBDTElFTlRfQlJPV1NFX0ROU19TRVJWRVJTLAorICAgIENMSUVOVF9ERUFECit9IENsaWVudFN0YXRlOworCitzdHJ1Y3QgQ2xpZW50IHsKKyAgICBTZXJ2ZXIgKnNlcnZlcjsKKworICAgIENsaWVudFN0YXRlIHN0YXRlOworCisgICAgaW50IGZkOworICAgIEF2YWhpV2F0Y2ggKndhdGNoOworCisgICAgY2hhciBpbmJ1ZltCVUZGRVJfU0laRV0sIG91dGJ1ZltCVUZGRVJfU0laRV07CisgICAgc2l6ZV90IGluYnVmX2xlbmd0aCwgb3V0YnVmX2xlbmd0aDsKKworICAgIEF2YWhpU0hvc3ROYW1lUmVzb2x2ZXIgKmhvc3RfbmFtZV9yZXNvbHZlcjsKKyAgICBBdmFoaVNBZGRyZXNzUmVzb2x2ZXIgKmFkZHJlc3NfcmVzb2x2ZXI7CisgICAgQXZhaGlTRE5TU2VydmVyQnJvd3NlciAqZG5zX3NlcnZlcl9icm93c2VyOworCisgICAgQXZhaGlQcm90b2NvbCBhZnF1ZXJ5OworCisgICAgQVZBSElfTExJU1RfRklFTERTKENsaWVudCwgY2xpZW50cyk7Cit9OworCitzdHJ1Y3QgU2VydmVyIHsKKyAgICBjb25zdCBBdmFoaVBvbGwgKnBvbGxfYXBpOworICAgIGludCBmZDsKKyAgICBBdmFoaVdhdGNoICp3YXRjaDsKKyAgICBBVkFISV9MTElTVF9IRUFEKENsaWVudCwgY2xpZW50cyk7CisKKyAgICB1bnNpZ25lZCBuX2NsaWVudHM7CisgICAgaW50IHJlbW92ZV9zb2NrZXQ7Cit9OworCitzdGF0aWMgU2VydmVyICpzZXJ2ZXIgPSBOVUxMOworCitzdGF0aWMgdm9pZCBjbGllbnRfd29yayhBdmFoaVdhdGNoICp3YXRjaCwgaW50IGZkLCBBdmFoaVdhdGNoRXZlbnQgZXZlbnRzLCB2b2lkICp1c2VyZGF0YSk7CisKK3N0YXRpYyB2b2lkIGNsaWVudF9mcmVlKENsaWVudCAqYykgeworICAgIGFzc2VydChjKTsKKworICAgIGFzc2VydChjLT5zZXJ2ZXItPm5fY2xpZW50cyA+PSAxKTsKKyAgICBjLT5zZXJ2ZXItPm5fY2xpZW50cy0tOworCisgICAgaWYgKGMtPmhvc3RfbmFtZV9yZXNvbHZlcikKKyAgICAgICAgYXZhaGlfc19ob3N0X25hbWVfcmVzb2x2ZXJfZnJlZShjLT5ob3N0X25hbWVfcmVzb2x2ZXIpOworCisgICAgaWYgKGMtPmFkZHJlc3NfcmVzb2x2ZXIpCisgICAgICAgIGF2YWhpX3NfYWRkcmVzc19yZXNvbHZlcl9mcmVlKGMtPmFkZHJlc3NfcmVzb2x2ZXIpOworCisgICAgaWYgKGMtPmRuc19zZXJ2ZXJfYnJvd3NlcikKKyAgICAgICAgYXZhaGlfc19kbnNfc2VydmVyX2Jyb3dzZXJfZnJlZShjLT5kbnNfc2VydmVyX2Jyb3dzZXIpOworCisgICAgYy0+c2VydmVyLT5wb2xsX2FwaS0+d2F0Y2hfZnJlZShjLT53YXRjaCk7CisgICAgY2xvc2UoYy0+ZmQpOworCisgICAgQVZBSElfTExJU1RfUkVNT1ZFKENsaWVudCwgY2xpZW50cywgYy0+c2VydmVyLT5jbGllbnRzLCBjKTsKKyAgICBhdmFoaV9mcmVlKGMpOworfQorCitzdGF0aWMgdm9pZCBjbGllbnRfbmV3KFNlcnZlciAqcywgaW50IGZkKSB7CisgICAgQ2xpZW50ICpjOworCisgICAgYXNzZXJ0KGZkID49IDApOworCisgICAgYyA9IGF2YWhpX25ldyhDbGllbnQsIDEpOworICAgIGMtPnNlcnZlciA9IHM7CisgICAgYy0+ZmQgPSBmZDsKKyAgICBjLT5zdGF0ZSA9IENMSUVOVF9JRExFOworCisgICAgYy0+aW5idWZfbGVuZ3RoID0gYy0+b3V0YnVmX2xlbmd0aCA9IDA7CisKKyAgICBjLT5ob3N0X25hbWVfcmVzb2x2ZXIgPSBOVUxMOworICAgIGMtPmFkZHJlc3NfcmVzb2x2ZXIgPSBOVUxMOworICAgIGMtPmRuc19zZXJ2ZXJfYnJvd3NlciA9IE5VTEw7CisKKyAgICBjLT53YXRjaCA9IHMtPnBvbGxfYXBpLT53YXRjaF9uZXcocy0+cG9sbF9hcGksIGZkLCBBVkFISV9XQVRDSF9JTiwgY2xpZW50X3dvcmssIGMpOworCisgICAgQVZBSElfTExJU1RfUFJFUEVORChDbGllbnQsIGNsaWVudHMsIHMtPmNsaWVudHMsIGMpOworICAgIHMtPm5fY2xpZW50cysrOworfQorCitzdGF0aWMgdm9pZCBjbGllbnRfb3V0cHV0KENsaWVudCAqYywgY29uc3QgdWludDhfdCpkYXRhLCBzaXplX3Qgc2l6ZSkgeworICAgIHNpemVfdCBrLCBtOworCisgICAgYXNzZXJ0KGMpOworICAgIGFzc2VydChkYXRhKTsKKworICAgIGlmICghc2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgayA9IHNpemVvZihjLT5vdXRidWYpIC0gYy0+b3V0YnVmX2xlbmd0aDsKKyAgICBtID0gc2l6ZSA+IGsgPyBrIDogc2l6ZTsKKworICAgIG1lbWNweShjLT5vdXRidWYgKyBjLT5vdXRidWZfbGVuZ3RoLCBkYXRhLCBtKTsKKyAgICBjLT5vdXRidWZfbGVuZ3RoICs9IG07CisKKyAgICBzZXJ2ZXItPnBvbGxfYXBpLT53YXRjaF91cGRhdGUoYy0+d2F0Y2gsIEFWQUhJX1dBVENIX09VVCk7Cit9CisKK3N0YXRpYyB2b2lkIGNsaWVudF9vdXRwdXRfcHJpbnRmKENsaWVudCAqYywgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pIHsKKyAgICBjaGFyICp0OworICAgIHZhX2xpc3QgYXA7CisKKyAgICB2YV9zdGFydChhcCwgZm9ybWF0KTsKKyAgICB0ID0gYXZhaGlfc3RyZHVwX3ZwcmludGYoZm9ybWF0LCBhcCk7CisgICAgdmFfZW5kKGFwKTsKKworICAgIGNsaWVudF9vdXRwdXQoYywgKHVpbnQ4X3QqKSB0LCBzdHJsZW4odCkpOworICAgIGF2YWhpX2ZyZWUodCk7Cit9CisKK3N0YXRpYyB2b2lkIGhvc3RfbmFtZV9yZXNvbHZlcl9jYWxsYmFjaygKKyAgICBBVkFISV9HQ0NfVU5VU0VEIEF2YWhpU0hvc3ROYW1lUmVzb2x2ZXIgKnIsCisgICAgQXZhaGlJZkluZGV4IGlmYWNlLAorICAgIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsCisgICAgQXZhaGlSZXNvbHZlckV2ZW50IGV2ZW50LAorICAgIGNvbnN0IGNoYXIgKmhvc3RuYW1lLAorICAgIGNvbnN0IEF2YWhpQWRkcmVzcyAqYSwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIEF2YWhpTG9va3VwUmVzdWx0RmxhZ3MgZmxhZ3MsCisgICAgdm9pZCogdXNlcmRhdGEpIHsKKworICAgIENsaWVudCAqYyA9IHVzZXJkYXRhOworCisgICAgYXNzZXJ0KGMpOworCisgICAgaWYgKGV2ZW50ID09IEFWQUhJX1JFU09MVkVSX0ZBSUxVUkUpCisgICAgICAgIGNsaWVudF9vdXRwdXRfcHJpbnRmKGMsICIlK2kgJXNcbiIsIGF2YWhpX3NlcnZlcl9lcnJubyhhdmFoaV9zZXJ2ZXIpLCBhdmFoaV9zdHJlcnJvcihhdmFoaV9zZXJ2ZXJfZXJybm8oYXZhaGlfc2VydmVyKSkpOworICAgIGVsc2UgaWYgKGV2ZW50ID09IEFWQUhJX1JFU09MVkVSX0ZPVU5EKSB7CisgICAgICAgIGNoYXIgdFtBVkFISV9BRERSRVNTX1NUUl9NQVhdOworICAgICAgICBhdmFoaV9hZGRyZXNzX3NucHJpbnQodCwgc2l6ZW9mKHQpLCBhKTsKKyAgICAgICAgY2xpZW50X291dHB1dF9wcmludGYoYywgIisgJWkgJXUgJXMgJXNcbiIsIGlmYWNlLCBwcm90b2NvbCwgaG9zdG5hbWUsIHQpOworICAgIH0KKworICAgIGMtPnN0YXRlID0gQ0xJRU5UX0RFQUQ7Cit9CisKK3N0YXRpYyB2b2lkIGFkZHJlc3NfcmVzb2x2ZXJfY2FsbGJhY2soCisgICAgQVZBSElfR0NDX1VOVVNFRCBBdmFoaVNBZGRyZXNzUmVzb2x2ZXIgKnIsCisgICAgQXZhaGlJZkluZGV4IGlmYWNlLAorICAgIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsCisgICAgQXZhaGlSZXNvbHZlckV2ZW50IGV2ZW50LAorICAgIEFWQUhJX0dDQ19VTlVTRUQgY29uc3QgQXZhaGlBZGRyZXNzICphLAorICAgIGNvbnN0IGNoYXIgKmhvc3RuYW1lLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgQXZhaGlMb29rdXBSZXN1bHRGbGFncyBmbGFncywKKyAgICB2b2lkKiB1c2VyZGF0YSkgeworCisgICAgQ2xpZW50ICpjID0gdXNlcmRhdGE7CisKKyAgICBhc3NlcnQoYyk7CisKKyAgICBpZiAoZXZlbnQgPT0gQVZBSElfUkVTT0xWRVJfRkFJTFVSRSkKKyAgICAgICAgY2xpZW50X291dHB1dF9wcmludGYoYywgIiUraSAlc1xuIiwgYXZhaGlfc2VydmVyX2Vycm5vKGF2YWhpX3NlcnZlciksIGF2YWhpX3N0cmVycm9yKGF2YWhpX3NlcnZlcl9lcnJubyhhdmFoaV9zZXJ2ZXIpKSk7CisgICAgZWxzZSBpZiAoZXZlbnQgPT0gQVZBSElfUkVTT0xWRVJfRk9VTkQpCisgICAgICAgIGNsaWVudF9vdXRwdXRfcHJpbnRmKGMsICIrICVpICV1ICVzXG4iLCBpZmFjZSwgcHJvdG9jb2wsIGhvc3RuYW1lKTsKKworICAgIGMtPnN0YXRlID0gQ0xJRU5UX0RFQUQ7Cit9CisKK3N0YXRpYyB2b2lkIGRuc19zZXJ2ZXJfYnJvd3Nlcl9jYWxsYmFjaygKKyAgICBBVkFISV9HQ0NfVU5VU0VEIEF2YWhpU0ROU1NlcnZlckJyb3dzZXIgKmIsCisgICAgQXZhaGlJZkluZGV4IGludGVyZmFjZSwKKyAgICBBdmFoaVByb3RvY29sIHByb3RvY29sLAorICAgIEF2YWhpQnJvd3NlckV2ZW50IGV2ZW50LAorICAgIEFWQUhJX0dDQ19VTlVTRUQgY29uc3QgY2hhciAqaG9zdF9uYW1lLAorICAgIGNvbnN0IEF2YWhpQWRkcmVzcyAqYSwKKyAgICB1aW50MTZfdCBwb3J0LAorICAgIEFWQUhJX0dDQ19VTlVTRUQgQXZhaGlMb29rdXBSZXN1bHRGbGFncyBmbGFncywKKyAgICB2b2lkKiB1c2VyZGF0YSkgeworCisgICAgQ2xpZW50ICpjID0gdXNlcmRhdGE7CisgICAgY2hhciB0W0FWQUhJX0FERFJFU1NfU1RSX01BWF07CisKKyAgICBhc3NlcnQoYyk7CisKKyAgICBpZiAoIWEpCisgICAgICAgIHJldHVybjsKKworICAgIHN3aXRjaCAoZXZlbnQpIHsKKyAgICAgICAgY2FzZSBBVkFISV9CUk9XU0VSX0ZBSUxVUkU6CisgICAgICAgICAgICBjbGllbnRfb3V0cHV0X3ByaW50ZihjLCAiJStpICVzXG4iLCBhdmFoaV9zZXJ2ZXJfZXJybm8oYXZhaGlfc2VydmVyKSwgYXZhaGlfc3RyZXJyb3IoYXZhaGlfc2VydmVyX2Vycm5vKGF2YWhpX3NlcnZlcikpKTsKKyAgICAgICAgICAgIGMtPnN0YXRlID0gQ0xJRU5UX0RFQUQ7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFWQUhJX0JST1dTRVJfQUxMX0ZPUl9OT1c6CisgICAgICAgIGNhc2UgQVZBSElfQlJPV1NFUl9DQUNIRV9FWEhBVVNURUQ6CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFWQUhJX0JST1dTRVJfTkVXOgorICAgICAgICBjYXNlIEFWQUhJX0JST1dTRVJfUkVNT1ZFOgorCisgICAgICAgICAgICBhdmFoaV9hZGRyZXNzX3NucHJpbnQodCwgc2l6ZW9mKHQpLCBhKTsKKyAgICAgICAgICAgIGNsaWVudF9vdXRwdXRfcHJpbnRmKGMsICIlYyAlaSAldSAlcyAldVxuIiwgZXZlbnQgPT0gQVZBSElfQlJPV1NFUl9ORVcgPyAnPicgOiAnPCcsICBpbnRlcmZhY2UsIHByb3RvY29sLCB0LCBwb3J0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2xpbmUoQ2xpZW50ICpjLCBjb25zdCBjaGFyICpzKSB7CisgICAgY2hhciBjbWRbNjRdLCBhcmdbNjRdOworICAgIGludCBuX2FyZ3M7CisKKyAgICBhc3NlcnQoYyk7CisgICAgYXNzZXJ0KHMpOworCisgICAgaWYgKGMtPnN0YXRlICE9IENMSUVOVF9JRExFKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoKG5fYXJncyA9IHNzY2FuZihzLCAiJTYzcyAlNjNzIiwgY21kLCBhcmcpKSA8IDEgKSB7CisgICAgICAgIGNsaWVudF9vdXRwdXRfcHJpbnRmKGMsICIlK2kgRmFpbGVkIHRvIHBhcnNlIGNvbW1hbmQsIHRyeSBcIkhFTFBcIi5cbiIsIEFWQUhJX0VSUl9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgIGMtPnN0YXRlID0gQ0xJRU5UX0RFQUQ7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoc3RyY21wKGNtZCwgIkhFTFAiKSA9PSAwKSB7CisgICAgICAgIGNsaWVudF9vdXRwdXRfcHJpbnRmKGMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIrIEF2YWlsYWJsZSBjb21tYW5kcyBhcmU6XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIrICAgICAgUkVTT0xWRS1IT1NUTkFNRSA8aG9zdG5hbWU+XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIrICAgICAgUkVTT0xWRS1IT1NUTkFNRS1JUFY2IDxob3N0bmFtZT5cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIisgICAgICBSRVNPTFZFLUhPU1ROQU1FLUlQVjQgPGhvc3RuYW1lPlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKyAgICAgIFJFU09MVkUtQUREUkVTUyA8YWRkcmVzcz5cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIisgICAgICBCUk9XU0UtRE5TLVNFUlZFUlNcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIisgICAgICBCUk9XU0UtRE5TLVNFUlZFUlMtSVBWNFxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKyAgICAgIEJST1dTRS1ETlMtU0VSVkVSUy1JUFY2XG4iKTsKKyAgICAgICAgYy0+c3RhdGUgPSBDTElFTlRfREVBRDsgfQorICAgIGVsc2UgaWYgKHN0cmNtcChjbWQsICJGVUNLIikgPT0gMCAmJiBuX2FyZ3MgPT0gMSkgeworICAgICAgICBjbGllbnRfb3V0cHV0X3ByaW50ZihjLCAiKyBGVUNLOiBHbyBmdWNrIHlvdXJzZWxmIVxuIik7CisgICAgICAgIGMtPnN0YXRlID0gQ0xJRU5UX0RFQUQ7CisgICAgfSBlbHNlIGlmIChzdHJjbXAoY21kLCAiUkVTT0xWRS1IT1NUTkFNRS1JUFY0IikgPT0gMCAmJiBuX2FyZ3MgPT0gMikgeworICAgICAgICBjLT5zdGF0ZSA9IENMSUVOVF9SRVNPTFZFX0hPU1ROQU1FOworICAgICAgICBpZiAoIShjLT5ob3N0X25hbWVfcmVzb2x2ZXIgPSBhdmFoaV9zX2hvc3RfbmFtZV9yZXNvbHZlcl9uZXcoYXZhaGlfc2VydmVyLCBBVkFISV9JRl9VTlNQRUMsIEFWQUhJX1BST1RPX1VOU1BFQywgYXJnLCBjLT5hZnF1ZXJ5ID0gQVZBSElfUFJPVE9fSU5FVCwgQVZBSElfTE9PS1VQX1VTRV9NVUxUSUNBU1QsIGhvc3RfbmFtZV9yZXNvbHZlcl9jYWxsYmFjaywgYykpKQorICAgICAgICAgICAgZ290byBmYWlsOworCisgICAgICAgIGF2YWhpX2xvZ19kZWJ1ZyhfX0ZJTEVfXyI6IEdvdCAlcyByZXF1ZXN0IGZvciAnJXMnLiIsIGNtZCwgYXJnKTsKKyAgICB9IGVsc2UgaWYgKHN0cmNtcChjbWQsICJSRVNPTFZFLUhPU1ROQU1FLUlQVjYiKSA9PSAwICYmIG5fYXJncyA9PSAyKSB7CisgICAgICAgIGMtPnN0YXRlID0gQ0xJRU5UX1JFU09MVkVfSE9TVE5BTUU7CisgICAgICAgIGlmICghKGMtPmhvc3RfbmFtZV9yZXNvbHZlciA9IGF2YWhpX3NfaG9zdF9uYW1lX3Jlc29sdmVyX25ldyhhdmFoaV9zZXJ2ZXIsIEFWQUhJX0lGX1VOU1BFQywgQVZBSElfUFJPVE9fVU5TUEVDLCBhcmcsIGMtPmFmcXVlcnkgPSBBVkFISV9QUk9UT19JTkVUNiwgQVZBSElfTE9PS1VQX1VTRV9NVUxUSUNBU1QsIGhvc3RfbmFtZV9yZXNvbHZlcl9jYWxsYmFjaywgYykpKQorICAgICAgICAgICAgZ290byBmYWlsOworCisgICAgICAgIGF2YWhpX2xvZ19kZWJ1ZyhfX0ZJTEVfXyI6IEdvdCAlcyByZXF1ZXN0IGZvciAnJXMnLiIsIGNtZCwgYXJnKTsKKyAgICB9IGVsc2UgaWYgKHN0cmNtcChjbWQsICJSRVNPTFZFLUhPU1ROQU1FIikgPT0gMCAmJiBuX2FyZ3MgPT0gMikgeworICAgICAgICBjLT5zdGF0ZSA9IENMSUVOVF9SRVNPTFZFX0hPU1ROQU1FOworICAgICAgICBpZiAoIShjLT5ob3N0X25hbWVfcmVzb2x2ZXIgPSBhdmFoaV9zX2hvc3RfbmFtZV9yZXNvbHZlcl9uZXcoYXZhaGlfc2VydmVyLCBBVkFISV9JRl9VTlNQRUMsIEFWQUhJX1BST1RPX1VOU1BFQywgYXJnLCBjLT5hZnF1ZXJ5ID0gQVZBSElfUFJPVE9fVU5TUEVDLCBBVkFISV9MT09LVVBfVVNFX01VTFRJQ0FTVCwgaG9zdF9uYW1lX3Jlc29sdmVyX2NhbGxiYWNrLCBjKSkpCisgICAgICAgICAgICBnb3RvIGZhaWw7CisKKyAgICAgICAgYXZhaGlfbG9nX2RlYnVnKF9fRklMRV9fIjogR290ICVzIHJlcXVlc3QgZm9yICclcycuIiwgY21kLCBhcmcpOworICAgIH0gZWxzZSBpZiAoc3RyY21wKGNtZCwgIlJFU09MVkUtQUREUkVTUyIpID09IDAgJiYgbl9hcmdzID09IDIpIHsKKyAgICAgICAgQXZhaGlBZGRyZXNzIGFkZHI7CisKKyAgICAgICAgaWYgKCEoYXZhaGlfYWRkcmVzc19wYXJzZShhcmcsIEFWQUhJX1BST1RPX1VOU1BFQywgJmFkZHIpKSkgeworICAgICAgICAgICAgY2xpZW50X291dHB1dF9wcmludGYoYywgIiUraSBGYWlsZWQgdG8gcGFyc2UgYWRkcmVzcyBcIiVzXCIuXG4iLCBBVkFISV9FUlJfSU5WQUxJRF9BRERSRVNTLCBhcmcpOworICAgICAgICAgICAgYy0+c3RhdGUgPSBDTElFTlRfREVBRDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGMtPnN0YXRlID0gQ0xJRU5UX1JFU09MVkVfQUREUkVTUzsKKyAgICAgICAgICAgIGlmICghKGMtPmFkZHJlc3NfcmVzb2x2ZXIgPSBhdmFoaV9zX2FkZHJlc3NfcmVzb2x2ZXJfbmV3KGF2YWhpX3NlcnZlciwgQVZBSElfSUZfVU5TUEVDLCBBVkFISV9QUk9UT19VTlNQRUMsICZhZGRyLCBBVkFISV9MT09LVVBfVVNFX01VTFRJQ0FTVCwgYWRkcmVzc19yZXNvbHZlcl9jYWxsYmFjaywgYykpKQorICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQorCisgICAgICAgIGF2YWhpX2xvZ19kZWJ1ZyhfX0ZJTEVfXyI6IEdvdCAlcyByZXF1ZXN0IGZvciAnJXMnLiIsIGNtZCwgYXJnKTsKKworICAgIH0gZWxzZSBpZiAoc3RyY21wKGNtZCwgIkJST1dTRS1ETlMtU0VSVkVSUy1JUFY0IikgPT0gMCAmJiBuX2FyZ3MgPT0gMSkgeworICAgICAgICBjLT5zdGF0ZSA9IENMSUVOVF9CUk9XU0VfRE5TX1NFUlZFUlM7CisgICAgICAgIGlmICghKGMtPmRuc19zZXJ2ZXJfYnJvd3NlciA9IGF2YWhpX3NfZG5zX3NlcnZlcl9icm93c2VyX25ldyhhdmFoaV9zZXJ2ZXIsIEFWQUhJX0lGX1VOU1BFQywgQVZBSElfUFJPVE9fVU5TUEVDLCBOVUxMLCBBVkFISV9ETlNfU0VSVkVSX1JFU09MVkUsIGMtPmFmcXVlcnkgPSBBVkFISV9QUk9UT19JTkVULCBBVkFISV9MT09LVVBfVVNFX01VTFRJQ0FTVCwgZG5zX3NlcnZlcl9icm93c2VyX2NhbGxiYWNrLCBjKSkpCisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIGNsaWVudF9vdXRwdXRfcHJpbnRmKGMsICIrIEJyb3dzaW5nIC4uLlxuIik7CisKKyAgICAgICAgYXZhaGlfbG9nX2RlYnVnKF9fRklMRV9fIjogR290ICVzIHJlcXVlc3QuIiwgY21kKTsKKworICAgIH0gZWxzZSBpZiAoc3RyY21wKGNtZCwgIkJST1dTRS1ETlMtU0VSVkVSUy1JUFY2IikgPT0gMCAmJiBuX2FyZ3MgPT0gMSkgeworICAgICAgICBjLT5zdGF0ZSA9IENMSUVOVF9CUk9XU0VfRE5TX1NFUlZFUlM7CisgICAgICAgIGlmICghKGMtPmRuc19zZXJ2ZXJfYnJvd3NlciA9IGF2YWhpX3NfZG5zX3NlcnZlcl9icm93c2VyX25ldyhhdmFoaV9zZXJ2ZXIsIEFWQUhJX0lGX1VOU1BFQywgQVZBSElfUFJPVE9fVU5TUEVDLCBOVUxMLCBBVkFISV9ETlNfU0VSVkVSX1JFU09MVkUsIGMtPmFmcXVlcnkgPSBBVkFISV9QUk9UT19JTkVUNiwgQVZBSElfTE9PS1VQX1VTRV9NVUxUSUNBU1QsIGRuc19zZXJ2ZXJfYnJvd3Nlcl9jYWxsYmFjaywgYykpKQorICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICBjbGllbnRfb3V0cHV0X3ByaW50ZihjLCAiKyBCcm93c2luZyAuLi5cbiIpOworCisgICAgICAgIGF2YWhpX2xvZ19kZWJ1ZyhfX0ZJTEVfXyI6IEdvdCAlcyByZXF1ZXN0LiIsIGNtZCk7CisKKyAgICB9IGVsc2UgaWYgKHN0cmNtcChjbWQsICJCUk9XU0UtRE5TLVNFUlZFUlMiKSA9PSAwICYmIG5fYXJncyA9PSAxKSB7CisgICAgICAgIGMtPnN0YXRlID0gQ0xJRU5UX0JST1dTRV9ETlNfU0VSVkVSUzsKKyAgICAgICAgaWYgKCEoYy0+ZG5zX3NlcnZlcl9icm93c2VyID0gYXZhaGlfc19kbnNfc2VydmVyX2Jyb3dzZXJfbmV3KGF2YWhpX3NlcnZlciwgQVZBSElfSUZfVU5TUEVDLCBBVkFISV9QUk9UT19VTlNQRUMsIE5VTEwsIEFWQUhJX0ROU19TRVJWRVJfUkVTT0xWRSwgYy0+YWZxdWVyeSA9IEFWQUhJX1BST1RPX1VOU1BFQywgQVZBSElfTE9PS1VQX1VTRV9NVUxUSUNBU1QsIGRuc19zZXJ2ZXJfYnJvd3Nlcl9jYWxsYmFjaywgYykpKQorICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICBjbGllbnRfb3V0cHV0X3ByaW50ZihjLCAiKyBCcm93c2luZyAuLi5cbiIpOworCisgICAgICAgIGF2YWhpX2xvZ19kZWJ1ZyhfX0ZJTEVfXyI6IEdvdCAlcyByZXF1ZXN0LiIsIGNtZCk7CisKKyAgICB9IGVsc2UgeworICAgICAgICBjbGllbnRfb3V0cHV0X3ByaW50ZihjLCAiJStpIEludmFsaWQgY29tbWFuZCBcIiVzXCIsIHRyeSBcIkhFTFBcIi5cbiIsIEFWQUhJX0VSUl9JTlZBTElEX09QRVJBVElPTiwgY21kKTsKKyAgICAgICAgYy0+c3RhdGUgPSBDTElFTlRfREVBRDsKKworICAgICAgICBhdmFoaV9sb2dfZGVidWcoX19GSUxFX18iOiBHb3QgaW52YWxpZCByZXF1ZXN0ICclcycuIiwgY21kKTsKKyAgICB9CisKKyAgICByZXR1cm47CisKK2ZhaWw6CisgICAgY2xpZW50X291dHB1dF9wcmludGYoYywgIiUraSAlc1xuIiwgYXZhaGlfc2VydmVyX2Vycm5vKGF2YWhpX3NlcnZlciksIGF2YWhpX3N0cmVycm9yKGF2YWhpX3NlcnZlcl9lcnJubyhhdmFoaV9zZXJ2ZXIpKSk7CisgICAgYy0+c3RhdGUgPSBDTElFTlRfREVBRDsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2lucHV0KENsaWVudCAqYykgeworICAgIGFzc2VydChjKTsKKworICAgIGZvciAoOzspIHsKKyAgICAgICAgY2hhciAqZTsKKyAgICAgICAgc2l6ZV90IGs7CisKKyAgICAgICAgaWYgKCEoZSA9IG1lbWNocihjLT5pbmJ1ZiwgJ1xuJywgYy0+aW5idWZfbGVuZ3RoKSkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBrID0gZSAtIChjaGFyKikgYy0+aW5idWY7CisgICAgICAgICplID0gMDsKKworICAgICAgICBoYW5kbGVfbGluZShjLCBjLT5pbmJ1Zik7CisgICAgICAgIGMtPmluYnVmX2xlbmd0aCAtPSBrICsgMTsKKyAgICAgICAgbWVtbW92ZShjLT5pbmJ1ZiwgZSsxLCBjLT5pbmJ1Zl9sZW5ndGgpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgY2xpZW50X3dvcmsoQXZhaGlXYXRjaCAqd2F0Y2gsIEFWQUhJX0dDQ19VTlVTRUQgaW50IGZkLCBBdmFoaVdhdGNoRXZlbnQgZXZlbnRzLCB2b2lkICp1c2VyZGF0YSkgeworICAgIENsaWVudCAqYyA9IHVzZXJkYXRhOworCisgICAgYXNzZXJ0KGMpOworCisgICAgaWYgKChldmVudHMgJiBBVkFISV9XQVRDSF9JTikgJiYgYy0+aW5idWZfbGVuZ3RoIDwgc2l6ZW9mKGMtPmluYnVmKSkgeworICAgICAgICBzc2l6ZV90IHI7CisKKyAgICAgICAgaWYgKChyID0gcmVhZChjLT5mZCwgYy0+aW5idWYgKyBjLT5pbmJ1Zl9sZW5ndGgsIHNpemVvZihjLT5pbmJ1ZikgLSBjLT5pbmJ1Zl9sZW5ndGgpKSA8PSAwKSB7CisgICAgICAgICAgICBpZiAociA8IDApCisgICAgICAgICAgICAgICAgYXZhaGlfbG9nX3dhcm4oInJlYWQoKTogJXMiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgY2xpZW50X2ZyZWUoYyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjLT5pbmJ1Zl9sZW5ndGggKz0gcjsKKyAgICAgICAgYXNzZXJ0KGMtPmluYnVmX2xlbmd0aCA8PSBzaXplb2YoYy0+aW5idWYpKTsKKworICAgICAgICBoYW5kbGVfaW5wdXQoYyk7CisgICAgfQorCisgICAgaWYgKChldmVudHMgJiBBVkFISV9XQVRDSF9PVVQpICYmIGMtPm91dGJ1Zl9sZW5ndGggPiAwKSB7CisgICAgICAgIHNzaXplX3QgcjsKKworICAgICAgICBpZiAoKHIgPSB3cml0ZShjLT5mZCwgYy0+b3V0YnVmLCBjLT5vdXRidWZfbGVuZ3RoKSkgPCAwKSB7CisgICAgICAgICAgICBhdmFoaV9sb2dfd2Fybigid3JpdGUoKTogJXMiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgY2xpZW50X2ZyZWUoYyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhc3NlcnQoKHNpemVfdCkgciA8PSBjLT5vdXRidWZfbGVuZ3RoKTsKKyAgICAgICAgYy0+b3V0YnVmX2xlbmd0aCAtPSByOworCisgICAgICAgIGlmIChjLT5vdXRidWZfbGVuZ3RoKQorICAgICAgICAgICAgbWVtbW92ZShjLT5vdXRidWYsIGMtPm91dGJ1ZiArIHIsIGMtPm91dGJ1Zl9sZW5ndGggLSByKTsKKworICAgICAgICBpZiAoYy0+b3V0YnVmX2xlbmd0aCA9PSAwICYmIGMtPnN0YXRlID09IENMSUVOVF9ERUFEKSB7CisgICAgICAgICAgICBjbGllbnRfZnJlZShjKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGMtPnNlcnZlci0+cG9sbF9hcGktPndhdGNoX3VwZGF0ZSgKKyAgICAgICAgd2F0Y2gsCisgICAgICAgIChjLT5vdXRidWZfbGVuZ3RoID4gMCA/IEFWQUhJX1dBVENIX09VVCA6IDApIHwKKyAgICAgICAgKGMtPmluYnVmX2xlbmd0aCA8IHNpemVvZihjLT5pbmJ1ZikgPyBBVkFISV9XQVRDSF9JTiA6IDApKTsKK30KKworc3RhdGljIHZvaWQgc2VydmVyX3dvcmsoQVZBSElfR0NDX1VOVVNFRCBBdmFoaVdhdGNoICp3YXRjaCwgaW50IGZkLCBBdmFoaVdhdGNoRXZlbnQgZXZlbnRzLCB2b2lkICp1c2VyZGF0YSkgeworICAgIFNlcnZlciAqcyA9IHVzZXJkYXRhOworCisgICAgYXNzZXJ0KHMpOworCisgICAgaWYgKGV2ZW50cyAmIEFWQUhJX1dBVENIX0lOKSB7CisgICAgICAgIGludCBjZmQ7CisKKyAgICAgICAgaWYgKChjZmQgPSBhY2NlcHQoZmQsIE5VTEwsIE5VTEwpKSA8IDApCisgICAgICAgICAgICBhdmFoaV9sb2dfZXJyb3IoImFjY2VwdCgpOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNsaWVudF9uZXcocywgY2ZkKTsKKyAgICB9Cit9CisKK2ludCBzaW1wbGVfcHJvdG9jb2xfc2V0dXAoY29uc3QgQXZhaGlQb2xsICpwb2xsX2FwaSkgeworICAgIHN0cnVjdCBzb2NrYWRkcl91biBzYTsKKyAgICBtb2RlX3QgdTsKKyAgICBpbnQgbjsKKworICAgIGFzc2VydCghc2VydmVyKTsKKworICAgIHNlcnZlciA9IGF2YWhpX25ldyhTZXJ2ZXIsIDEpOworICAgIHNlcnZlci0+cG9sbF9hcGkgPSBwb2xsX2FwaTsKKyAgICBzZXJ2ZXItPnJlbW92ZV9zb2NrZXQgPSAwOworICAgIHNlcnZlci0+ZmQgPSAtMTsKKyAgICBzZXJ2ZXItPm5fY2xpZW50cyA9IDA7CisgICAgQVZBSElfTExJU1RfSEVBRF9JTklUKENsaWVudCwgc2VydmVyLT5jbGllbnRzKTsKKyAgICBzZXJ2ZXItPndhdGNoID0gTlVMTDsKKworICAgIHUgPSB1bWFzaygwMDAwKTsKKworICAgIGlmICgobiA9IHNkX2xpc3Rlbl9mZHMoMSkpIDwgMCkgeworICAgICAgICBhdmFoaV9sb2dfd2FybigiRmFpbGVkIHRvIGFjcXVpcmUgc3lzdGVtZCBmaWxlIGRlc2NyaXB0b3JzOiAlcyIsIHN0cmVycm9yKC1uKSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBpZiAobiA+IDEpIHsKKyAgICAgICAgYXZhaGlfbG9nX3dhcm4oIlRvbyBtYW55IHN5c3RlbWQgZmlsZSBkZXNjcmlwdG9ycyBwYXNzZWQuIik7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBpZiAobiA9PSAxKSB7CisgICAgICAgIGludCByOworCisgICAgICAgIGlmICgociA9IHNkX2lzX3NvY2tldChTRF9MSVNURU5fRkRTX1NUQVJULCBBRl9MT0NBTCwgU09DS19TVFJFQU0sIDEpKSA8IDApIHsKKyAgICAgICAgICAgIGF2YWhpX2xvZ193YXJuKCJQYXNzZWQgc3lzdGVtZCBmaWxlIGRlc2NyaXB0b3IgaXMgb2Ygd3JvbmcgdHlwZTogJXMiLCBzdHJlcnJvcigtcikpOworICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CisKKyAgICAgICAgc2VydmVyLT5mZCA9IFNEX0xJU1RFTl9GRFNfU1RBUlQ7CisKKyAgICB9IGVsc2UgeworCisgICAgICAgIGlmICgoc2VydmVyLT5mZCA9IHNvY2tldChBRl9MT0NBTCwgU09DS19TVFJFQU0sIDApKSA8IDApIHsKKyAgICAgICAgICAgIGF2YWhpX2xvZ193YXJuKCJzb2NrZXQoQUZfTE9DQUwsIFNPQ0tfU1RSRUFNLCAwKTogJXMiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CisKKyAgICAgICAgbWVtc2V0KCZzYSwgMCwgc2l6ZW9mKHNhKSk7CisgICAgICAgIHNhLnN1bl9mYW1pbHkgPSBBRl9MT0NBTDsKKyAgICAgICAgc3RybmNweShzYS5zdW5fcGF0aCwgQVZBSElfU09DS0VULCBzaXplb2Yoc2Euc3VuX3BhdGgpLTEpOworCisgICAgICAgIC8qIFdlIHNpbXBseSByZW1vdmUgZXhpc3RpbmcgVU5JWCBzb2NrZXRzIHVuZGVyIHRoaXMgbmFtZS4gVGhlCisgICAgICAgICAgIEF2YWhpIGRhZW1vbiBtYWtlcyBzdXJlIHRoYXQgaXQgcnVucyBvbmx5IG9uY2Ugb24gYSBob3N0LAorICAgICAgICAgICB0aGVyZWZvcmUgc29ja2V0cyB0aGF0IGFscmVhZHkgZXhpc3QgYXJlIHN0YWxlIGFuZCBtYXkgYmUKKyAgICAgICAgICAgcmVtb3ZlZCB3aXRob3V0IGFueSBpbGwgZWZmZWN0cyAqLworCisgICAgICAgIHVubGluayhBVkFISV9TT0NLRVQpOworCisgICAgICAgIGlmIChiaW5kKHNlcnZlci0+ZmQsIChzdHJ1Y3Qgc29ja2FkZHIqKSAmc2EsIHNpemVvZihzYSkpIDwgMCkgeworICAgICAgICAgICAgYXZhaGlfbG9nX3dhcm4oImJpbmQoKTogJXMiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CisKKyAgICAgICAgc2VydmVyLT5yZW1vdmVfc29ja2V0ID0gMTsKKworICAgICAgICBpZiAobGlzdGVuKHNlcnZlci0+ZmQsIFNPTUFYQ09OTikgPCAwKSB7CisgICAgICAgICAgICBhdmFoaV9sb2dfd2FybigibGlzdGVuKCk6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHVtYXNrKHUpOworCisgICAgc2VydmVyLT53YXRjaCA9IHBvbGxfYXBpLT53YXRjaF9uZXcocG9sbF9hcGksIHNlcnZlci0+ZmQsIEFWQUhJX1dBVENIX0lOLCBzZXJ2ZXJfd29yaywgc2VydmVyKTsKKworICAgIHJldHVybiAwOworCitmYWlsOgorCisgICAgdW1hc2sodSk7CisgICAgc2ltcGxlX3Byb3RvY29sX3NodXRkb3duKCk7CisKKyAgICByZXR1cm4gLTE7Cit9CisKK3ZvaWQgc2ltcGxlX3Byb3RvY29sX3NodXRkb3duKHZvaWQpIHsKKworICAgIGlmIChzZXJ2ZXIpIHsKKworICAgICAgICBpZiAoc2VydmVyLT5yZW1vdmVfc29ja2V0KQorI2lmZGVmIEVOQUJMRV9DSFJPT1QKKyAgICAgICAgICAgIGF2YWhpX2Nocm9vdF9oZWxwZXJfdW5saW5rKEFWQUhJX1NPQ0tFVCk7CisjZWxzZQorICAgICAgICAgICAgdW5saW5rKEFWQUhJX1NPQ0tFVCk7CisjZW5kaWYKKworICAgICAgICB3aGlsZSAoc2VydmVyLT5jbGllbnRzKQorICAgICAgICAgICAgY2xpZW50X2ZyZWUoc2VydmVyLT5jbGllbnRzKTsKKworICAgICAgICBpZiAoc2VydmVyLT53YXRjaCkKKyAgICAgICAgICAgIHNlcnZlci0+cG9sbF9hcGktPndhdGNoX2ZyZWUoc2VydmVyLT53YXRjaCk7CisKKyAgICAgICAgaWYgKHNlcnZlci0+ZmQgPj0gMCkKKyAgICAgICAgICAgIGNsb3NlKHNlcnZlci0+ZmQpOworCisgICAgICAgIGF2YWhpX2ZyZWUoc2VydmVyKTsKKworICAgICAgICBzZXJ2ZXIgPSBOVUxMOworICAgIH0KK30KKwordm9pZCBzaW1wbGVfcHJvdG9jb2xfcmVzdGFydF9xdWVyaWVzKHZvaWQpIHsKKyAgICBDbGllbnQgKmM7CisKKyAgICAvKiBSZXN0YXJ0IHF1ZXJpZXMgaW4gY2FzZSBvZiBsb2NhbCBkb21haW4gbmFtZSBjaGFuZ2VzICovCisKKyAgICBhc3NlcnQoc2VydmVyKTsKKworICAgIGZvciAoYyA9IHNlcnZlci0+Y2xpZW50czsgYzsgYyA9IGMtPmNsaWVudHNfbmV4dCkKKyAgICAgICAgaWYgKGMtPnN0YXRlID09IENMSUVOVF9CUk9XU0VfRE5TX1NFUlZFUlMgJiYgYy0+ZG5zX3NlcnZlcl9icm93c2VyKSB7CisgICAgICAgICAgICBhdmFoaV9zX2Ruc19zZXJ2ZXJfYnJvd3Nlcl9mcmVlKGMtPmRuc19zZXJ2ZXJfYnJvd3Nlcik7CisgICAgICAgICAgICBjLT5kbnNfc2VydmVyX2Jyb3dzZXIgPSBhdmFoaV9zX2Ruc19zZXJ2ZXJfYnJvd3Nlcl9uZXcoYXZhaGlfc2VydmVyLCBBVkFISV9JRl9VTlNQRUMsIEFWQUhJX1BST1RPX1VOU1BFQywgTlVMTCwgQVZBSElfRE5TX1NFUlZFUl9SRVNPTFZFLCBjLT5hZnF1ZXJ5LCBBVkFISV9MT09LVVBfVVNFX01VTFRJQ0FTVCwgZG5zX3NlcnZlcl9icm93c2VyX2NhbGxiYWNrLCBjKTsKKyAgICAgICAgfQorfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9zaW1wbGUtcHJvdG9jb2wuaCBiL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vc2ltcGxlLXByb3RvY29sLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNiZmZjMwotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vc2ltcGxlLXByb3RvY29sLmgKQEAgLTAsMCArMSwyOSBAQAorI2lmbmRlZiBmb29zaW1wbGVwcm90b2NvbGhmb28KKyNkZWZpbmUgZm9vc2ltcGxlcHJvdG9jb2xoZm9vCisKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi93YXRjaC5oPgorCitpbnQgc2ltcGxlX3Byb3RvY29sX3NldHVwKGNvbnN0IEF2YWhpUG9sbCAqcG9sbF9hcGkpOwordm9pZCBzaW1wbGVfcHJvdG9jb2xfc2h1dGRvd24odm9pZCk7Cit2b2lkIHNpbXBsZV9wcm90b2NvbF9yZXN0YXJ0X3F1ZXJpZXModm9pZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9zc2guc2VydmljZSBiL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vc3NoLnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY2ZTBjMQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vc3NoLnNlcnZpY2UKQEAgLTAsMCArMSwzNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSdubyc/PjwhLS0qLW54bWwtKi0tPgorPCFET0NUWVBFIHNlcnZpY2UtZ3JvdXAgU1lTVEVNICJhdmFoaS1zZXJ2aWNlLmR0ZCI+CisKKzwhLS0KKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisgCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgMDIxMTEtMTMwNyBVU0EuCistLT4KKworPCEtLSBTZWUgYXZhaGkuc2VydmljZSg1KSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGNvbmZpZ3VyYXRpb24gZmlsZSAtLT4KKworPHNlcnZpY2UtZ3JvdXA+CisKKyAgPG5hbWUgcmVwbGFjZS13aWxkY2FyZHM9InllcyI+JWg8L25hbWU+CisKKyAgPHNlcnZpY2U+CisgICAgPHR5cGU+X3NzaC5fdGNwPC90eXBlPgorICAgIDxwb3J0PjIyPC9wb3J0PgorICA8L3NlcnZpY2U+CisKKzwvc2VydmljZS1ncm91cD4KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vc3RhdGljLWhvc3RzLmMgYi9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL3N0YXRpYy1ob3N0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ZjUzMWYKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL3N0YXRpYy1ob3N0cy5jCkBAIC0wLDAgKzEsMjc4IEBACisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9sbGlzdC5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9tYWxsb2MuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vZXJyb3IuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb3JlL2xvZy5oPgorI2luY2x1ZGUgPGF2YWhpLWNvcmUvcHVibGlzaC5oPgorCisjaW5jbHVkZSAibWFpbi5oIgorI2luY2x1ZGUgInN0YXRpYy1ob3N0cy5oIgorCit0eXBlZGVmIHN0cnVjdCBTdGF0aWNIb3N0IFN0YXRpY0hvc3Q7CisKK3N0cnVjdCBTdGF0aWNIb3N0IHsKKyAgICBBdmFoaVNFbnRyeUdyb3VwICpncm91cDsKKyAgICBpbnQgaXRlcmF0aW9uOworCisgICAgY2hhciAqaG9zdDsKKyAgICBBdmFoaUFkZHJlc3MgYWRkcmVzczsKKworICAgIEFWQUhJX0xMSVNUX0ZJRUxEUyhTdGF0aWNIb3N0LCBob3N0cyk7Cit9OworCitzdGF0aWMgQVZBSElfTExJU1RfSEVBRChTdGF0aWNIb3N0LCBob3N0cykgPSBOVUxMOworc3RhdGljIGludCBjdXJyZW50X2l0ZXJhdGlvbiA9IDA7CisKK3N0YXRpYyB2b2lkIGFkZF9zdGF0aWNfaG9zdF90b19zZXJ2ZXIoU3RhdGljSG9zdCAqaCk7CitzdGF0aWMgdm9pZCByZW1vdmVfc3RhdGljX2hvc3RfZnJvbV9zZXJ2ZXIoU3RhdGljSG9zdCAqaCk7CisKK3N0YXRpYyB2b2lkIGVudHJ5X2dyb3VwX2NhbGxiYWNrKEF2YWhpU2VydmVyICpzLCBBVkFISV9HQ0NfVU5VU0VEIEF2YWhpU0VudHJ5R3JvdXAgKmVnLCBBdmFoaUVudHJ5R3JvdXBTdGF0ZSBzdGF0ZSwgdm9pZCogdXNlcmRhdGEpIHsKKyAgICBTdGF0aWNIb3N0ICpoOworCisgICAgYXNzZXJ0KHMpOworICAgIGFzc2VydChlZyk7CisKKyAgICBoID0gdXNlcmRhdGE7CisKKyAgICBzd2l0Y2ggKHN0YXRlKSB7CisKKyAgICAgICAgY2FzZSBBVkFISV9FTlRSWV9HUk9VUF9DT0xMSVNJT046CisgICAgICAgICAgICBhdmFoaV9sb2dfZXJyb3IoIkhvc3QgbmFtZSBjb25mbGljdCBmb3IgXCIlc1wiLCBub3QgZXN0YWJsaXNoZWQuIiwgaC0+aG9zdCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFWQUhJX0VOVFJZX0dST1VQX0VTVEFCTElTSEVEOgorICAgICAgICAgICAgYXZhaGlfbG9nX25vdGljZSAoIlN0YXRpYyBob3N0IG5hbWUgXCIlc1wiIHN1Y2Nlc3NmdWxseSBlc3RhYmxpc2hlZC4iLCBoLT5ob3N0KTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQVZBSElfRU5UUllfR1JPVVBfRkFJTFVSRToKKyAgICAgICAgICAgIGF2YWhpX2xvZ19ub3RpY2UgKCJGYWlsZWQgdG8gZXN0YWJsaXNoIHN0YXRpYyBob3N0IG5hbWUgXCIlc1wiOiAlcy4iLCBoLT5ob3N0LCBhdmFoaV9zdHJlcnJvciAoYXZhaGlfc2VydmVyX2Vycm5vIChzKSkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBVkFISV9FTlRSWV9HUk9VUF9VTkNPTU1JVEVEOgorICAgICAgICBjYXNlIEFWQUhJX0VOVFJZX0dST1VQX1JFR0lTVEVSSU5HOgorICAgICAgICAgICAgOworICAgIH0KK30KKworc3RhdGljIFN0YXRpY0hvc3QgKnN0YXRpY19ob3N0X25ldyh2b2lkKSB7CisgICAgU3RhdGljSG9zdCAqczsKKworICAgIHMgPSBhdmFoaV9uZXcoU3RhdGljSG9zdCwgMSk7CisKKyAgICBzLT5ncm91cCA9IE5VTEw7CisgICAgcy0+aG9zdCA9IE5VTEw7CisgICAgcy0+aXRlcmF0aW9uID0gY3VycmVudF9pdGVyYXRpb247CisKKyAgICBBVkFISV9MTElTVF9QUkVQRU5EKFN0YXRpY0hvc3QsIGhvc3RzLCBob3N0cywgcyk7CisKKyAgICByZXR1cm4gczsKK30KKworc3RhdGljIHZvaWQgc3RhdGljX2hvc3RfZnJlZShTdGF0aWNIb3N0ICpzKSB7CisgICAgYXNzZXJ0KHMpOworCisgICAgQVZBSElfTExJU1RfUkVNT1ZFKFN0YXRpY0hvc3QsIGhvc3RzLCBob3N0cywgcyk7CisKKyAgICBpZiAocy0+Z3JvdXApCisgICAgICAgIGF2YWhpX3NfZW50cnlfZ3JvdXBfZnJlZSAocy0+Z3JvdXApOworCisgICAgYXZhaGlfZnJlZShzLT5ob3N0KTsKKworICAgIGF2YWhpX2ZyZWUocyk7Cit9CisKK3N0YXRpYyBTdGF0aWNIb3N0ICpzdGF0aWNfaG9zdF9maW5kKGNvbnN0IGNoYXIgKmhvc3QsIGNvbnN0IEF2YWhpQWRkcmVzcyAqYSkgeworICAgIFN0YXRpY0hvc3QgKmg7CisKKyAgICBhc3NlcnQoaG9zdCk7CisgICAgYXNzZXJ0KGEpOworCisgICAgZm9yIChoID0gaG9zdHM7IGg7IGggPSBoLT5ob3N0c19uZXh0KQorICAgICAgICBpZiAoIXN0cmNtcChoLT5ob3N0LCBob3N0KSAmJiAhYXZhaGlfYWRkcmVzc19jbXAoYSwgJmgtPmFkZHJlc3MpKQorICAgICAgICAgICAgcmV0dXJuIGg7CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgYWRkX3N0YXRpY19ob3N0X3RvX3NlcnZlcihTdGF0aWNIb3N0ICpoKQoreworCisgICAgaWYgKCFoLT5ncm91cCkKKyAgICAgICAgaWYgKCEoaC0+Z3JvdXAgPSBhdmFoaV9zX2VudHJ5X2dyb3VwX25ldyAoYXZhaGlfc2VydmVyLCBlbnRyeV9ncm91cF9jYWxsYmFjaywgaCkpKSB7CisgICAgICAgICAgICBhdmFoaV9sb2dfZXJyb3IoImF2YWhpX3NfZW50cnlfZ3JvdXBfbmV3KCkgZmFpbGVkOiAlcyIsIGF2YWhpX3N0cmVycm9yKGF2YWhpX3NlcnZlcl9lcnJubyhhdmFoaV9zZXJ2ZXIpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgIGlmIChhdmFoaV9zX2VudHJ5X2dyb3VwX2lzX2VtcHR5KGgtPmdyb3VwKSkgeworICAgICAgICBBdmFoaVByb3RvY29sIHA7CisgICAgICAgIGludCBlcnI7CisgICAgICAgIGNvbnN0IEF2YWhpU2VydmVyQ29uZmlnICpjb25maWc7CisgICAgICAgIGNvbmZpZyA9IGF2YWhpX3NlcnZlcl9nZXRfY29uZmlnKGF2YWhpX3NlcnZlcik7CisKKyAgICAgICAgcCA9IChoLT5hZGRyZXNzLnByb3RvID09IEFWQUhJX1BST1RPX0lORVQgJiYgY29uZmlnLT5wdWJsaXNoX2Ffb25faXB2NikgfHwKKyAgICAgICAgICAgIChoLT5hZGRyZXNzLnByb3RvID09IEFWQUhJX1BST1RPX0lORVQ2ICYmIGNvbmZpZy0+cHVibGlzaF9hYWFhX29uX2lwdjQpID8gQVZBSElfUFJPVE9fVU5TUEVDIDogaC0+YWRkcmVzcy5wcm90bzsKKworICAgICAgICBpZiAoKGVyciA9IGF2YWhpX3NlcnZlcl9hZGRfYWRkcmVzcyhhdmFoaV9zZXJ2ZXIsIGgtPmdyb3VwLCBBVkFISV9JRl9VTlNQRUMsIHAsIDAsIGgtPmhvc3QsICZoLT5hZGRyZXNzKSkgPCAwKSB7CisgICAgICAgICAgICBhdmFoaV9sb2dfZXJyb3IgKCJTdGF0aWMgaG9zdCBuYW1lICVzOiBhdmFoaV9zZXJ2ZXJfYWRkX2FkZHJlc3MgZmFpbHVyZTogJXMiLCBoLT5ob3N0LCBhdmFoaV9zdHJlcnJvcihlcnIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGF2YWhpX3NfZW50cnlfZ3JvdXBfY29tbWl0IChoLT5ncm91cCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCByZW1vdmVfc3RhdGljX2hvc3RfZnJvbV9zZXJ2ZXIoU3RhdGljSG9zdCAqaCkKK3sKKyAgICBpZiAoaC0+Z3JvdXApCisgICAgICAgIGF2YWhpX3NfZW50cnlfZ3JvdXBfcmVzZXQgKGgtPmdyb3VwKTsKK30KKwordm9pZCBzdGF0aWNfaG9zdHNfYWRkX3RvX3NlcnZlcih2b2lkKSB7CisgICAgU3RhdGljSG9zdCAqaDsKKworICAgIGZvciAoaCA9IGhvc3RzOyBoOyBoID0gaC0+aG9zdHNfbmV4dCkKKyAgICAgICAgYWRkX3N0YXRpY19ob3N0X3RvX3NlcnZlcihoKTsKK30KKwordm9pZCBzdGF0aWNfaG9zdHNfcmVtb3ZlX2Zyb21fc2VydmVyKHZvaWQpIHsKKyAgICBTdGF0aWNIb3N0ICpoOworCisgICAgZm9yIChoID0gaG9zdHM7IGg7IGggPSBoLT5ob3N0c19uZXh0KQorICAgICAgICByZW1vdmVfc3RhdGljX2hvc3RfZnJvbV9zZXJ2ZXIoaCk7Cit9CisKK3ZvaWQgc3RhdGljX2hvc3RzX2xvYWQoaW50IGluX2Nocm9vdCkgeworICAgIEZJTEUgKmY7CisgICAgdW5zaWduZWQgaW50IGxpbmUgPSAwOworICAgIFN0YXRpY0hvc3QgKmgsICpuZXh0OworICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lID0gaW5fY2hyb290ID8gIi9ob3N0cyIgOiBBVkFISV9DT05GSUdfRElSICIvaG9zdHMiOworCisgICAgaWYgKCEoZiA9IGZvcGVuKGZpbGVuYW1lLCAiciIpKSkgeworICAgICAgICBpZiAoZXJybm8gIT0gRU5PRU5UKQorICAgICAgICAgICAgYXZhaGlfbG9nX2Vycm9yICgiRmFpbGVkIHRvIG9wZW4gc3RhdGljIGhvc3RzIGZpbGU6ICVzIiwgc3RyZXJyb3IgKGVycm5vKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjdXJyZW50X2l0ZXJhdGlvbisrOworCisgICAgd2hpbGUgKCFmZW9mKGYpKSB7CisgICAgICAgIHVuc2lnbmVkIGludCBsZW47CisgICAgICAgIGNoYXIgbG5bMjU2XSwgKnM7CisgICAgICAgIGNoYXIgKmhvc3QsICppcDsKKyAgICAgICAgQXZhaGlBZGRyZXNzIGE7CisKKyAgICAgICAgaWYgKCFmZ2V0cyhsbiwgc2l6ZW9mIChsbiksIGYpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgbGluZSsrOworCisgICAgICAgIC8qIEZpbmQgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lLCBpZ25vcmUgd2hpdGVzcGFjZSAqLworICAgICAgICBzID0gbG4gKyBzdHJzcG4obG4sICIgXHQiKTsKKyAgICAgICAgLyogU2V0IHRoZSBlbmQgb2YgdGhlIHN0cmluZyB0byBOVUxMICovCisgICAgICAgIHNbc3RyY3NwbihzLCAiI1xyXG4iKV0gPSAwOworCisgICAgICAgIC8qIElnbm9yZSBibGFuayBsaW5lcyAqLworICAgICAgICBpZiAoKnMgPT0gMCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8qIFJlYWQgdGhlIGZpcnN0IHN0cmluZyAoaXApIHVwIHRvIHRoZSBuZXh0IHdoaXRlc3BhY2UgKi8KKyAgICAgICAgbGVuID0gc3RyY3NwbihzLCAiIFx0Iik7CisgICAgICAgIGlwID0gYXZhaGlfc3RybmR1cChzLCBsZW4pOworCisgICAgICAgIC8qIFNraXAgcGFzdCBpdCAqLworICAgICAgICBzICs9IGxlbjsKKworICAgICAgICAvKiBGaW5kIHRoZSBuZXh0IHRva2VuICovCisgICAgICAgIHMgKz0gc3Ryc3BuKHMsICIgXHQiKTsKKyAgICAgICAgbGVuID0gc3RyY3NwbihzLCAiIFx0Iik7CisgICAgICAgIGhvc3QgPSBhdmFoaV9zdHJuZHVwKHMsIGxlbik7CisKKyAgICAgICAgaWYgKCpob3N0ID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGF2YWhpX2xvZ19lcnJvcigiJXM6JWQ6IEVycm9yLCB1bmV4cGVjdGVkIGVuZCBvZiBsaW5lISIsIGZpbGVuYW1lLCBsaW5lKTsKKyAgICAgICAgICAgIGF2YWhpX2ZyZWUoaG9zdCk7CisgICAgICAgICAgICBhdmFoaV9mcmVlKGlwKTsKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFNraXAgb3ZlciB0aGUgaG9zdCAqLworICAgICAgICBzICs9IGxlbjsKKworICAgICAgICAvKiBTa2lwIHBhc3QgYW55IG1vcmUgc3BhY2VzICovCisgICAgICAgIHMgKz0gc3Ryc3BuKHMsICIgXHQiKTsKKworICAgICAgICAvKiBBbnl0aGluZyBsZWZ0PyAqLworICAgICAgICBpZiAoKnMgIT0gMCkgeworICAgICAgICAgICAgYXZhaGlfbG9nX2Vycm9yICgiJXM6JWQ6IEp1bmsgb24gdGhlIGVuZCBvZiB0aGUgbGluZSEiLCBmaWxlbmFtZSwgbGluZSk7CisgICAgICAgICAgICBhdmFoaV9mcmVlKGhvc3QpOworICAgICAgICAgICAgYXZhaGlfZnJlZShpcCk7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWF2YWhpX2FkZHJlc3NfcGFyc2UoaXAsIEFWQUhJX1BST1RPX1VOU1BFQywgJmEpKSB7CisgICAgICAgICAgICBhdmFoaV9sb2dfZXJyb3IoIlN0YXRpYyBob3N0IG5hbWUgJXM6IGZhaWxlZCB0byBwYXJzZSBhZGRyZXNzICVzIiwgaG9zdCwgaXApOworICAgICAgICAgICAgYXZhaGlfZnJlZShob3N0KTsKKyAgICAgICAgICAgIGF2YWhpX2ZyZWUoaXApOworICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CisKKyAgICAgICAgYXZhaGlfZnJlZShpcCk7CisKKyAgICAgICAgaWYgKChoID0gc3RhdGljX2hvc3RfZmluZChob3N0LCAmYSkpKQorICAgICAgICAgICAgYXZhaGlfZnJlZShob3N0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBoID0gc3RhdGljX2hvc3RfbmV3KCk7CisgICAgICAgICAgICBoLT5ob3N0ID0gaG9zdDsKKyAgICAgICAgICAgIGgtPmFkZHJlc3MgPSBhOworCisgICAgICAgICAgICBhdmFoaV9sb2dfaW5mbygiTG9hZGluZyBuZXcgc3RhdGljIGhvc3RuYW1lICVzLiIsIGgtPmhvc3QpOworICAgICAgICB9CisKKyAgICAgICAgaC0+aXRlcmF0aW9uID0gY3VycmVudF9pdGVyYXRpb247CisgICAgfQorCisgICAgZm9yIChoID0gaG9zdHM7IGg7IGggPSBuZXh0KSB7CisgICAgICAgIG5leHQgPSBoLT5ob3N0c19uZXh0OworCisgICAgICAgIGlmIChoLT5pdGVyYXRpb24gIT0gY3VycmVudF9pdGVyYXRpb24pIHsKKyAgICAgICAgICAgIGF2YWhpX2xvZ19pbmZvKCJTdGF0aWMgaG9zdG5hbWUgJXMgdmFuaXNoZWQsIHJlbW92aW5nLiIsIGgtPmhvc3QpOworICAgICAgICAgICAgc3RhdGljX2hvc3RfZnJlZShoKTsKKyAgICAgICAgfQorICAgIH0KKworZmFpbDoKKworICAgIGZjbG9zZShmKTsKK30KKwordm9pZCBzdGF0aWNfaG9zdHNfZnJlZV9hbGwgKHZvaWQpCit7CisgICAgd2hpbGUoaG9zdHMpCisgICAgICAgIHN0YXRpY19ob3N0X2ZyZWUoaG9zdHMpOworfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9zdGF0aWMtaG9zdHMuaCBiL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vc3RhdGljLWhvc3RzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ2Mzk5NQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vc3RhdGljLWhvc3RzLmgKQEAgLTAsMCArMSwyOCBAQAorI2lmbmRlZiBmb29zdGF0aWNob3N0c2hmb28KKyNkZWZpbmUgZm9vc3RhdGljaG9zdHNoZm9vCisKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKwordm9pZCBzdGF0aWNfaG9zdHNfbG9hZChpbnQgaW5fY2hyb290KTsKK3ZvaWQgc3RhdGljX2hvc3RzX2ZyZWVfYWxsKHZvaWQpOwordm9pZCBzdGF0aWNfaG9zdHNfYWRkX3RvX3NlcnZlcih2b2lkKTsKK3ZvaWQgc3RhdGljX2hvc3RzX3JlbW92ZV9mcm9tX3NlcnZlcih2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL3N0YXRpYy1zZXJ2aWNlcy5jIGIvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9zdGF0aWMtc2VydmljZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzM0OTFmCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9zdGF0aWMtc2VydmljZXMuYwpAQCAtMCwwICsxLDc0NCBAQAorLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGdsb2IuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpZmRlZiBVU0VfRVhQQVRfSAorI2luY2x1ZGUgPGV4cGF0Lmg+CisjZW5kaWYgLyogVVNFX0VYUEFUX0ggKi8KKworI2lmZGVmIFVTRV9CU0RYTUxfSAorI2luY2x1ZGUgPGJzZHhtbC5oPgorI2VuZGlmIC8qIFVTRV9CU0RYTUxfSCAqLworCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2xsaXN0Lmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL21hbGxvYy5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9hbHRlcm5hdGl2ZS5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9lcnJvci5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9kb21haW4uaD4KKyNpbmNsdWRlIDxhdmFoaS1jb3JlL2xvZy5oPgorI2luY2x1ZGUgPGF2YWhpLWNvcmUvcHVibGlzaC5oPgorCisjaW5jbHVkZSAibWFpbi5oIgorI2luY2x1ZGUgInN0YXRpYy1zZXJ2aWNlcy5oIgorCit0eXBlZGVmIHN0cnVjdCBTdGF0aWNTZXJ2aWNlIFN0YXRpY1NlcnZpY2U7Cit0eXBlZGVmIHN0cnVjdCBTdGF0aWNTZXJ2aWNlR3JvdXAgU3RhdGljU2VydmljZUdyb3VwOworCitzdHJ1Y3QgU3RhdGljU2VydmljZSB7CisgICAgU3RhdGljU2VydmljZUdyb3VwICpncm91cDsKKworICAgIGNoYXIgKnR5cGU7CisgICAgY2hhciAqZG9tYWluX25hbWU7CisgICAgY2hhciAqaG9zdF9uYW1lOworICAgIHVpbnQxNl90IHBvcnQ7CisgICAgaW50IHByb3RvY29sOworCisgICAgQXZhaGlTdHJpbmdMaXN0ICpzdWJ0eXBlczsKKworICAgIEF2YWhpU3RyaW5nTGlzdCAqdHh0X3JlY29yZHM7CisKKyAgICBBVkFISV9MTElTVF9GSUVMRFMoU3RhdGljU2VydmljZSwgc2VydmljZXMpOworfTsKKworc3RydWN0IFN0YXRpY1NlcnZpY2VHcm91cCB7CisgICAgY2hhciAqZmlsZW5hbWU7CisgICAgdGltZV90IG10aW1lOworCisgICAgY2hhciAqbmFtZSwgKmNob3Nlbl9uYW1lOworICAgIGludCByZXBsYWNlX3dpbGRjYXJkczsKKworICAgIEF2YWhpU0VudHJ5R3JvdXAgKmVudHJ5X2dyb3VwOworICAgIEFWQUhJX0xMSVNUX0hFQUQoU3RhdGljU2VydmljZSwgc2VydmljZXMpOworICAgIEFWQUhJX0xMSVNUX0ZJRUxEUyhTdGF0aWNTZXJ2aWNlR3JvdXAsIGdyb3Vwcyk7Cit9OworCitzdGF0aWMgQVZBSElfTExJU1RfSEVBRChTdGF0aWNTZXJ2aWNlR3JvdXAsIGdyb3VwcykgPSBOVUxMOworCitzdGF0aWMgY2hhciAqcmVwbGFjZXN0cihjb25zdCBjaGFyICpwYXR0ZXJuLCBjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiKSB7CisgICAgY2hhciAqciA9IE5VTEwsICplLCAqbjsKKworICAgIHdoaWxlICgoZSA9IHN0cnN0cihwYXR0ZXJuLCBhKSkpIHsKKyAgICAgICAgY2hhciAqazsKKworICAgICAgICBrID0gYXZhaGlfc3RybmR1cChwYXR0ZXJuLCBlIC0gcGF0dGVybik7CisgICAgICAgIGlmIChyKQorICAgICAgICAgICAgbiA9IGF2YWhpX3N0cmR1cF9wcmludGYoIiVzJXMlcyIsIHIsIGssIGIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBuID0gYXZhaGlfc3RyZHVwX3ByaW50ZigiJXMlcyIsIGssIGIpOworCisgICAgICAgIGF2YWhpX2ZyZWUoayk7CisgICAgICAgIGF2YWhpX2ZyZWUocik7CisgICAgICAgIHIgPSBuOworCisgICAgICAgIHBhdHRlcm4gPSBlICsgc3RybGVuKGEpOworICAgIH0KKworICAgIGlmICghcikKKyAgICAgICAgcmV0dXJuIGF2YWhpX3N0cmR1cChwYXR0ZXJuKTsKKworICAgIG4gPSBhdmFoaV9zdHJkdXBfcHJpbnRmKCIlcyVzIiwgciwgcGF0dGVybik7CisgICAgYXZhaGlfZnJlZShyKTsKKworICAgIHJldHVybiBuOworfQorCitzdGF0aWMgdm9pZCBhZGRfc3RhdGljX3NlcnZpY2VfZ3JvdXBfdG9fc2VydmVyKFN0YXRpY1NlcnZpY2VHcm91cCAqZyk7CitzdGF0aWMgdm9pZCByZW1vdmVfc3RhdGljX3NlcnZpY2VfZ3JvdXBfZnJvbV9zZXJ2ZXIoU3RhdGljU2VydmljZUdyb3VwICpnKTsKKworc3RhdGljIFN0YXRpY1NlcnZpY2UgKnN0YXRpY19zZXJ2aWNlX25ldyhTdGF0aWNTZXJ2aWNlR3JvdXAgKmdyb3VwKSB7CisgICAgU3RhdGljU2VydmljZSAqczsKKworICAgIGFzc2VydChncm91cCk7CisgICAgcyA9IGF2YWhpX25ldyhTdGF0aWNTZXJ2aWNlLCAxKTsKKyAgICBzLT5ncm91cCA9IGdyb3VwOworCisgICAgcy0+dHlwZSA9IHMtPmhvc3RfbmFtZSA9IHMtPmRvbWFpbl9uYW1lID0gTlVMTDsKKyAgICBzLT5wb3J0ID0gMDsKKyAgICBzLT5wcm90b2NvbCA9IEFWQUhJX1BST1RPX1VOU1BFQzsKKworICAgIHMtPnR4dF9yZWNvcmRzID0gTlVMTDsKKyAgICBzLT5zdWJ0eXBlcyA9IE5VTEw7CisKKyAgICBBVkFISV9MTElTVF9QUkVQRU5EKFN0YXRpY1NlcnZpY2UsIHNlcnZpY2VzLCBncm91cC0+c2VydmljZXMsIHMpOworCisgICAgcmV0dXJuIHM7Cit9CisKK3N0YXRpYyBTdGF0aWNTZXJ2aWNlR3JvdXAgKnN0YXRpY19zZXJ2aWNlX2dyb3VwX25ldyhjaGFyICpmaWxlbmFtZSkgeworICAgIFN0YXRpY1NlcnZpY2VHcm91cCAqZzsKKyAgICBhc3NlcnQoZmlsZW5hbWUpOworCisgICAgZyA9IGF2YWhpX25ldyhTdGF0aWNTZXJ2aWNlR3JvdXAsIDEpOworICAgIGctPmZpbGVuYW1lID0gYXZhaGlfc3RyZHVwKGZpbGVuYW1lKTsKKyAgICBnLT5tdGltZSA9IDA7CisgICAgZy0+bmFtZSA9IGctPmNob3Nlbl9uYW1lID0gTlVMTDsKKyAgICBnLT5yZXBsYWNlX3dpbGRjYXJkcyA9IDA7CisgICAgZy0+ZW50cnlfZ3JvdXAgPSBOVUxMOworCisgICAgQVZBSElfTExJU1RfSEVBRF9JTklUKFN0YXRpY1NlcnZpY2UsIGctPnNlcnZpY2VzKTsKKyAgICBBVkFISV9MTElTVF9QUkVQRU5EKFN0YXRpY1NlcnZpY2VHcm91cCwgZ3JvdXBzLCBncm91cHMsIGcpOworCisgICAgcmV0dXJuIGc7Cit9CisKK3N0YXRpYyB2b2lkIHN0YXRpY19zZXJ2aWNlX2ZyZWUoU3RhdGljU2VydmljZSAqcykgeworICAgIGFzc2VydChzKTsKKworICAgIEFWQUhJX0xMSVNUX1JFTU9WRShTdGF0aWNTZXJ2aWNlLCBzZXJ2aWNlcywgcy0+Z3JvdXAtPnNlcnZpY2VzLCBzKTsKKworICAgIGF2YWhpX2ZyZWUocy0+dHlwZSk7CisgICAgYXZhaGlfZnJlZShzLT5ob3N0X25hbWUpOworICAgIGF2YWhpX2ZyZWUocy0+ZG9tYWluX25hbWUpOworCisgICAgYXZhaGlfc3RyaW5nX2xpc3RfZnJlZShzLT50eHRfcmVjb3Jkcyk7CisgICAgYXZhaGlfc3RyaW5nX2xpc3RfZnJlZShzLT5zdWJ0eXBlcyk7CisKKyAgICBhdmFoaV9mcmVlKHMpOworfQorCitzdGF0aWMgdm9pZCBzdGF0aWNfc2VydmljZV9ncm91cF9mcmVlKFN0YXRpY1NlcnZpY2VHcm91cCAqZykgeworICAgIGFzc2VydChnKTsKKworICAgIGlmIChnLT5lbnRyeV9ncm91cCkKKyAgICAgICAgYXZhaGlfc19lbnRyeV9ncm91cF9mcmVlKGctPmVudHJ5X2dyb3VwKTsKKworICAgIHdoaWxlIChnLT5zZXJ2aWNlcykKKyAgICAgICAgc3RhdGljX3NlcnZpY2VfZnJlZShnLT5zZXJ2aWNlcyk7CisKKyAgICBBVkFISV9MTElTVF9SRU1PVkUoU3RhdGljU2VydmljZUdyb3VwLCBncm91cHMsIGdyb3VwcywgZyk7CisKKyAgICBhdmFoaV9mcmVlKGctPmZpbGVuYW1lKTsKKyAgICBhdmFoaV9mcmVlKGctPm5hbWUpOworICAgIGF2YWhpX2ZyZWUoZy0+Y2hvc2VuX25hbWUpOworICAgIGF2YWhpX2ZyZWUoZyk7Cit9CisKK3N0YXRpYyB2b2lkIGVudHJ5X2dyb3VwX2NhbGxiYWNrKEF2YWhpU2VydmVyICpzLCBBVkFISV9HQ0NfVU5VU0VEIEF2YWhpU0VudHJ5R3JvdXAgKmVnLCBBdmFoaUVudHJ5R3JvdXBTdGF0ZSBzdGF0ZSwgdm9pZCogdXNlcmRhdGEpIHsKKyAgICBTdGF0aWNTZXJ2aWNlR3JvdXAgKmcgPSB1c2VyZGF0YTsKKworICAgIGFzc2VydChzKTsKKyAgICBhc3NlcnQoZyk7CisKKyAgICBzd2l0Y2ggKHN0YXRlKSB7CisKKyAgICAgICAgY2FzZSBBVkFISV9FTlRSWV9HUk9VUF9DT0xMSVNJT046IHsKKyAgICAgICAgICAgIGNoYXIgKm47CisKKyAgICAgICAgICAgIHJlbW92ZV9zdGF0aWNfc2VydmljZV9ncm91cF9mcm9tX3NlcnZlcihnKTsKKworICAgICAgICAgICAgbiA9IGF2YWhpX2FsdGVybmF0aXZlX3NlcnZpY2VfbmFtZShnLT5jaG9zZW5fbmFtZSk7CisgICAgICAgICAgICBhdmFoaV9mcmVlKGctPmNob3Nlbl9uYW1lKTsKKyAgICAgICAgICAgIGctPmNob3Nlbl9uYW1lID0gbjsKKworICAgICAgICAgICAgYXZhaGlfbG9nX25vdGljZSgiU2VydmljZSBuYW1lIGNvbmZsaWN0IGZvciBcIiVzXCIgKCVzKSwgcmV0cnlpbmcgd2l0aCBcIiVzXCIuIiwgZy0+bmFtZSwgZy0+ZmlsZW5hbWUsIGctPmNob3Nlbl9uYW1lKTsKKworICAgICAgICAgICAgYWRkX3N0YXRpY19zZXJ2aWNlX2dyb3VwX3RvX3NlcnZlcihnKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBBVkFISV9FTlRSWV9HUk9VUF9FU1RBQkxJU0hFRDoKKyAgICAgICAgICAgIGF2YWhpX2xvZ19pbmZvKCJTZXJ2aWNlIFwiJXNcIiAoJXMpIHN1Y2Nlc3NmdWxseSBlc3RhYmxpc2hlZC4iLCBnLT5jaG9zZW5fbmFtZSwgZy0+ZmlsZW5hbWUpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBVkFISV9FTlRSWV9HUk9VUF9GQUlMVVJFOgorICAgICAgICAgICAgYXZhaGlfbG9nX3dhcm4oIkZhaWxlZCB0byBwdWJsaXNoIHNlcnZpY2UgXCIlc1wiICglcyk6ICVzIiwgZy0+Y2hvc2VuX25hbWUsIGctPmZpbGVuYW1lLCBhdmFoaV9zdHJlcnJvcihhdmFoaV9zZXJ2ZXJfZXJybm8ocykpKTsKKyAgICAgICAgICAgIHJlbW92ZV9zdGF0aWNfc2VydmljZV9ncm91cF9mcm9tX3NlcnZlcihnKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQVZBSElfRU5UUllfR1JPVVBfVU5DT01NSVRFRDoKKyAgICAgICAgY2FzZSBBVkFISV9FTlRSWV9HUk9VUF9SRUdJU1RFUklORzoKKyAgICAgICAgICAgIDsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9zdGF0aWNfc2VydmljZV9ncm91cF90b19zZXJ2ZXIoU3RhdGljU2VydmljZUdyb3VwICpnKSB7CisgICAgU3RhdGljU2VydmljZSAqczsKKworICAgIGFzc2VydChnKTsKKworICAgIGlmIChnLT5lbnRyeV9ncm91cCAmJiAhYXZhaGlfc19lbnRyeV9ncm91cF9pc19lbXB0eShnLT5lbnRyeV9ncm91cCkpCisgICAgICAgIC8qIFRoaXMgc2VydmljZSBncm91cCBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgaW4gdGhlIHNlcnZlciAqLworICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWctPmNob3Nlbl9uYW1lIHx8IChnLT5yZXBsYWNlX3dpbGRjYXJkcyAmJiBzdHJzdHIoZy0+bmFtZSwgIiVoIikpKSB7CisKKyAgICAgICAgYXZhaGlfZnJlZShnLT5jaG9zZW5fbmFtZSk7CisKKyAgICAgICAgaWYgKGctPnJlcGxhY2Vfd2lsZGNhcmRzKSB7CisgICAgICAgICAgICBjaGFyIGxhYmVsW0FWQUhJX0xBQkVMX01BWF07CisgICAgICAgICAgICBjb25zdCBjaGFyICpwOworCisgICAgICAgICAgICBwID0gYXZhaGlfc2VydmVyX2dldF9ob3N0X25hbWUoYXZhaGlfc2VydmVyKTsKKyAgICAgICAgICAgIGF2YWhpX3VuZXNjYXBlX2xhYmVsKCZwLCBsYWJlbCwgc2l6ZW9mKGxhYmVsKSk7CisKKyAgICAgICAgICAgIGctPmNob3Nlbl9uYW1lID0gcmVwbGFjZXN0cihnLT5uYW1lLCAiJWgiLCBsYWJlbCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZy0+Y2hvc2VuX25hbWUgPSBhdmFoaV9zdHJkdXAoZy0+bmFtZSk7CisKKyAgICB9CisKKyAgICBpZiAoIWctPmVudHJ5X2dyb3VwKQorICAgICAgICBnLT5lbnRyeV9ncm91cCA9IGF2YWhpX3NfZW50cnlfZ3JvdXBfbmV3KGF2YWhpX3NlcnZlciwgZW50cnlfZ3JvdXBfY2FsbGJhY2ssIGcpOworCisgICAgYXNzZXJ0KGF2YWhpX3NfZW50cnlfZ3JvdXBfaXNfZW1wdHkoZy0+ZW50cnlfZ3JvdXApKTsKKworICAgIGZvciAocyA9IGctPnNlcnZpY2VzOyBzOyBzID0gcy0+c2VydmljZXNfbmV4dCkgeworICAgICAgICBBdmFoaVN0cmluZ0xpc3QgKmk7CisKKyAgICAgICAgaWYgKGF2YWhpX3NlcnZlcl9hZGRfc2VydmljZV9zdHJsc3QoCisgICAgICAgICAgICAgICAgYXZhaGlfc2VydmVyLAorICAgICAgICAgICAgICAgIGctPmVudHJ5X2dyb3VwLAorICAgICAgICAgICAgICAgIEFWQUhJX0lGX1VOU1BFQywgcy0+cHJvdG9jb2wsCisgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICBnLT5jaG9zZW5fbmFtZSwgcy0+dHlwZSwgcy0+ZG9tYWluX25hbWUsCisgICAgICAgICAgICAgICAgcy0+aG9zdF9uYW1lLCBzLT5wb3J0LAorICAgICAgICAgICAgICAgIHMtPnR4dF9yZWNvcmRzKSA8IDApIHsKKyAgICAgICAgICAgIGF2YWhpX2xvZ19lcnJvcigiRmFpbGVkIHRvIGFkZCBzZXJ2aWNlICclcycgb2YgdHlwZSAnJXMnLCBpZ25vcmluZyBzZXJ2aWNlIGdyb3VwICglcyk6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnLT5jaG9zZW5fbmFtZSwgcy0+dHlwZSwgZy0+ZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaGlfc3RyZXJyb3IoYXZhaGlfc2VydmVyX2Vycm5vKGF2YWhpX3NlcnZlcikpKTsKKyAgICAgICAgICAgIHJlbW92ZV9zdGF0aWNfc2VydmljZV9ncm91cF9mcm9tX3NlcnZlcihnKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoaSA9IHMtPnN1YnR5cGVzOyBpOyBpID0gaS0+bmV4dCkgeworCisgICAgICAgICAgICBpZiAoYXZhaGlfc2VydmVyX2FkZF9zZXJ2aWNlX3N1YnR5cGUoCisgICAgICAgICAgICAgICAgICAgIGF2YWhpX3NlcnZlciwKKyAgICAgICAgICAgICAgICAgICAgZy0+ZW50cnlfZ3JvdXAsCisgICAgICAgICAgICAgICAgICAgIEFWQUhJX0lGX1VOU1BFQywgcy0+cHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgIGctPmNob3Nlbl9uYW1lLCBzLT50eXBlLCBzLT5kb21haW5fbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgKGNoYXIqKSBpLT50ZXh0KSA8IDApIHsKKworICAgICAgICAgICAgICAgIGF2YWhpX2xvZ19lcnJvcigiRmFpbGVkIHRvIGFkZCBzdWJ0eXBlICclcycgZm9yIHNlcnZpY2UgJyVzJyBvZiB0eXBlICclcycsIGlnbm9yaW5nIHN1YnR5cGUgKCVzKTogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLT50ZXh0LCBnLT5jaG9zZW5fbmFtZSwgcy0+dHlwZSwgZy0+ZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWhpX3N0cmVycm9yKGF2YWhpX3NlcnZlcl9lcnJubyhhdmFoaV9zZXJ2ZXIpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhdmFoaV9zX2VudHJ5X2dyb3VwX2NvbW1pdChnLT5lbnRyeV9ncm91cCk7Cit9CisKK3N0YXRpYyB2b2lkIHJlbW92ZV9zdGF0aWNfc2VydmljZV9ncm91cF9mcm9tX3NlcnZlcihTdGF0aWNTZXJ2aWNlR3JvdXAgKmcpIHsKKyAgICBhc3NlcnQoZyk7CisKKyAgICBpZiAoZy0+ZW50cnlfZ3JvdXApCisgICAgICAgIGF2YWhpX3NfZW50cnlfZ3JvdXBfcmVzZXQoZy0+ZW50cnlfZ3JvdXApOworfQorCit0eXBlZGVmIGVudW0geworICAgIFhNTF9UQUdfSU5WQUxJRCwKKyAgICBYTUxfVEFHX1NFUlZJQ0VfR1JPVVAsCisgICAgWE1MX1RBR19OQU1FLAorICAgIFhNTF9UQUdfU0VSVklDRSwKKyAgICBYTUxfVEFHX1RZUEUsCisgICAgWE1MX1RBR19TVUJUWVBFLAorICAgIFhNTF9UQUdfRE9NQUlOX05BTUUsCisgICAgWE1MX1RBR19IT1NUX05BTUUsCisgICAgWE1MX1RBR19QT1JULAorICAgIFhNTF9UQUdfVFhUX1JFQ09SRAorfSB4bWxfdGFnX25hbWU7CisKK3N0cnVjdCB4bWxfdXNlcmRhdGEgeworICAgIFN0YXRpY1NlcnZpY2VHcm91cCAqZ3JvdXA7CisgICAgU3RhdGljU2VydmljZSAqc2VydmljZTsKKyAgICB4bWxfdGFnX25hbWUgY3VycmVudF90YWc7CisgICAgaW50IGZhaWxlZDsKKyAgICBjaGFyICpidWY7Cit9OworCisjaWZuZGVmIFhNTENBTEwKKyNkZWZpbmUgWE1MQ0FMTAorI2VuZGlmCisKK3N0YXRpYyB2b2lkIFhNTENBTEwgeG1sX3N0YXJ0KHZvaWQgKmRhdGEsIGNvbnN0IGNoYXIgKmVsLCBjb25zdCBjaGFyICphdHRyW10pIHsKKyAgICBzdHJ1Y3QgeG1sX3VzZXJkYXRhICp1ID0gZGF0YTsKKworICAgIGFzc2VydCh1KTsKKworICAgIGlmICh1LT5mYWlsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICh1LT5jdXJyZW50X3RhZyA9PSBYTUxfVEFHX0lOVkFMSUQgJiYgc3RyY21wKGVsLCAic2VydmljZS1ncm91cCIpID09IDApIHsKKworICAgICAgICBpZiAoYXR0clswXSkKKyAgICAgICAgICAgIGdvdG8gaW52YWxpZF9hdHRyOworCisgICAgICAgIHUtPmN1cnJlbnRfdGFnID0gWE1MX1RBR19TRVJWSUNFX0dST1VQOworICAgIH0gZWxzZSBpZiAodS0+Y3VycmVudF90YWcgPT0gWE1MX1RBR19TRVJWSUNFX0dST1VQICYmIHN0cmNtcChlbCwgIm5hbWUiKSA9PSAwKSB7CisgICAgICAgIHUtPmN1cnJlbnRfdGFnID0gWE1MX1RBR19OQU1FOworCisgICAgICAgIGlmIChhdHRyWzBdKSB7CisgICAgICAgICAgICBpZiAoc3RyY21wKGF0dHJbMF0sICJyZXBsYWNlLXdpbGRjYXJkcyIpID09IDApCisgICAgICAgICAgICAgICAgdS0+Z3JvdXAtPnJlcGxhY2Vfd2lsZGNhcmRzID0gc3RyY21wKGF0dHJbMV0sICJ5ZXMiKSA9PSAwOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGdvdG8gaW52YWxpZF9hdHRyOworCisgICAgICAgICAgICBpZiAoYXR0clsyXSkKKyAgICAgICAgICAgICAgICBnb3RvIGludmFsaWRfYXR0cjsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIGlmICh1LT5jdXJyZW50X3RhZyA9PSBYTUxfVEFHX1NFUlZJQ0VfR1JPVVAgJiYgc3RyY21wKGVsLCAic2VydmljZSIpID09IDApIHsKKyAgICAgICAgdS0+Y3VycmVudF90YWcgPSBYTUxfVEFHX1NFUlZJQ0U7CisKKyAgICAgICAgYXNzZXJ0KCF1LT5zZXJ2aWNlKTsKKyAgICAgICAgdS0+c2VydmljZSA9IHN0YXRpY19zZXJ2aWNlX25ldyh1LT5ncm91cCk7CisKKyAgICAgICAgaWYgKGF0dHJbMF0pIHsKKyAgICAgICAgICAgIGlmIChzdHJjbXAoYXR0clswXSwgInByb3RvY29sIikgPT0gMCkgeworICAgICAgICAgICAgICAgIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2w7CisKKyAgICAgICAgICAgICAgICBpZiAoc3RyY21wKGF0dHJbMV0sICJpcHY0IikgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBwcm90b2NvbCA9IEFWQUhJX1BST1RPX0lORVQ7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoYXR0clsxXSwgImlwdjYiKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHByb3RvY29sID0gQVZBSElfUFJPVE9fSU5FVDY7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoYXR0clsxXSwgImFueSIpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2wgPSBBVkFISV9QUk9UT19VTlNQRUM7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYXZhaGlfbG9nX2Vycm9yKCIlczogcGFyc2UgZmFpbHVyZTogaW52YWxpZCBwcm90b2NvbCBzcGVjaWZpY2F0aW9uIFwiJXNcIi4iLCB1LT5ncm91cC0+ZmlsZW5hbWUsIGF0dHJbMV0pOworICAgICAgICAgICAgICAgICAgICB1LT5mYWlsZWQgPSAxOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdS0+c2VydmljZS0+cHJvdG9jb2wgPSBwcm90b2NvbDsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGdvdG8gaW52YWxpZF9hdHRyOworCisgICAgICAgICAgICBpZiAoYXR0clsyXSkKKyAgICAgICAgICAgICAgICBnb3RvIGludmFsaWRfYXR0cjsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIGlmICh1LT5jdXJyZW50X3RhZyA9PSBYTUxfVEFHX1NFUlZJQ0UgJiYgc3RyY21wKGVsLCAidHlwZSIpID09IDApIHsKKyAgICAgICAgaWYgKGF0dHJbMF0pCisgICAgICAgICAgICBnb3RvIGludmFsaWRfYXR0cjsKKworICAgICAgICB1LT5jdXJyZW50X3RhZyA9IFhNTF9UQUdfVFlQRTsKKyAgICB9IGVsc2UgaWYgKHUtPmN1cnJlbnRfdGFnID09IFhNTF9UQUdfU0VSVklDRSAmJiBzdHJjbXAoZWwsICJzdWJ0eXBlIikgPT0gMCkgeworICAgICAgICBpZiAoYXR0clswXSkKKyAgICAgICAgICAgIGdvdG8gaW52YWxpZF9hdHRyOworCisgICAgICAgIHUtPmN1cnJlbnRfdGFnID0gWE1MX1RBR19TVUJUWVBFOworICAgIH0gZWxzZSBpZiAodS0+Y3VycmVudF90YWcgPT0gWE1MX1RBR19TRVJWSUNFICYmIHN0cmNtcChlbCwgImRvbWFpbi1uYW1lIikgPT0gMCkgeworICAgICAgICBpZiAoYXR0clswXSkKKyAgICAgICAgICAgIGdvdG8gaW52YWxpZF9hdHRyOworCisgICAgICAgIHUtPmN1cnJlbnRfdGFnID0gWE1MX1RBR19ET01BSU5fTkFNRTsKKyAgICB9IGVsc2UgaWYgKHUtPmN1cnJlbnRfdGFnID09IFhNTF9UQUdfU0VSVklDRSAmJiBzdHJjbXAoZWwsICJob3N0LW5hbWUiKSA9PSAwKSB7CisgICAgICAgIGlmIChhdHRyWzBdKQorICAgICAgICAgICAgZ290byBpbnZhbGlkX2F0dHI7CisKKyAgICAgICAgdS0+Y3VycmVudF90YWcgPSBYTUxfVEFHX0hPU1RfTkFNRTsKKyAgICB9IGVsc2UgaWYgKHUtPmN1cnJlbnRfdGFnID09IFhNTF9UQUdfU0VSVklDRSAmJiBzdHJjbXAoZWwsICJwb3J0IikgPT0gMCkgeworICAgICAgICBpZiAoYXR0clswXSkKKyAgICAgICAgICAgIGdvdG8gaW52YWxpZF9hdHRyOworCisgICAgICAgIHUtPmN1cnJlbnRfdGFnID0gWE1MX1RBR19QT1JUOworICAgIH0gZWxzZSBpZiAodS0+Y3VycmVudF90YWcgPT0gWE1MX1RBR19TRVJWSUNFICYmIHN0cmNtcChlbCwgInR4dC1yZWNvcmQiKSA9PSAwKSB7CisgICAgICAgIGlmIChhdHRyWzBdKQorICAgICAgICAgICAgZ290byBpbnZhbGlkX2F0dHI7CisKKyAgICAgICAgdS0+Y3VycmVudF90YWcgPSBYTUxfVEFHX1RYVF9SRUNPUkQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXZhaGlfbG9nX2Vycm9yKCIlczogcGFyc2UgZmFpbHVyZTogZGlkbid0IGV4cGVjdCBlbGVtZW50IDwlcz4uIiwgdS0+Z3JvdXAtPmZpbGVuYW1lLCBlbCk7CisgICAgICAgIHUtPmZhaWxlZCA9IDE7CisgICAgfQorCisgICAgcmV0dXJuOworCitpbnZhbGlkX2F0dHI6CisgICAgYXZhaGlfbG9nX2Vycm9yKCIlczogcGFyc2UgZmFpbHVyZTogaW52YWxpZCBhdHRyaWJ1dGUgZm9yIGVsZW1lbnQgPCVzPi4iLCB1LT5ncm91cC0+ZmlsZW5hbWUsIGVsKTsKKyAgICB1LT5mYWlsZWQgPSAxOworICAgIHJldHVybjsKK30KKworc3RhdGljIHZvaWQgWE1MQ0FMTCB4bWxfZW5kKHZvaWQgKmRhdGEsIEFWQUhJX0dDQ19VTlVTRUQgY29uc3QgY2hhciAqZWwpIHsKKyAgICBzdHJ1Y3QgeG1sX3VzZXJkYXRhICp1ID0gZGF0YTsKKyAgICBhc3NlcnQodSk7CisKKyAgICBpZiAodS0+ZmFpbGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBzd2l0Y2ggKHUtPmN1cnJlbnRfdGFnKSB7CisgICAgICAgIGNhc2UgWE1MX1RBR19TRVJWSUNFX0dST1VQOgorCisgICAgICAgICAgICBpZiAoIXUtPmdyb3VwLT5uYW1lIHx8ICF1LT5ncm91cC0+c2VydmljZXMpIHsKKyAgICAgICAgICAgICAgICBhdmFoaV9sb2dfZXJyb3IoIiVzOiBwYXJzZSBmYWlsdXJlOiBzZXJ2aWNlIGdyb3VwIGluY29tcGxldGUuIiwgdS0+Z3JvdXAtPmZpbGVuYW1lKTsKKyAgICAgICAgICAgICAgICB1LT5mYWlsZWQgPSAxOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdS0+Y3VycmVudF90YWcgPSBYTUxfVEFHX0lOVkFMSUQ7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFhNTF9UQUdfU0VSVklDRToKKworICAgICAgICAgICAgaWYgKCF1LT5zZXJ2aWNlLT50eXBlKSB7CisgICAgICAgICAgICAgICAgYXZhaGlfbG9nX2Vycm9yKCIlczogcGFyc2UgZmFpbHVyZTogc2VydmljZSBpbmNvbXBsZXRlLiIsIHUtPmdyb3VwLT5maWxlbmFtZSk7CisgICAgICAgICAgICAgICAgdS0+ZmFpbGVkID0gMTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHUtPnNlcnZpY2UgPSBOVUxMOworICAgICAgICAgICAgdS0+Y3VycmVudF90YWcgPSBYTUxfVEFHX1NFUlZJQ0VfR1JPVVA7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFhNTF9UQUdfTkFNRToKKyAgICAgICAgICAgIHUtPmN1cnJlbnRfdGFnID0gWE1MX1RBR19TRVJWSUNFX0dST1VQOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBYTUxfVEFHX1BPUlQ6IHsKKyAgICAgICAgICAgIGludCBwOworICAgICAgICAgICAgYXNzZXJ0KHUtPnNlcnZpY2UpOworCisgICAgICAgICAgICBwID0gdS0+YnVmID8gYXRvaSh1LT5idWYpIDogMDsKKworICAgICAgICAgICAgaWYgKHAgPCAwIHx8IHAgPiAweEZGRkYpIHsKKyAgICAgICAgICAgICAgICBhdmFoaV9sb2dfZXJyb3IoIiVzOiBwYXJzZSBmYWlsdXJlOiBpbnZhbGlkIHBvcnQgc3BlY2lmaWNhdGlvbiBcIiVzXCIuIiwgdS0+Z3JvdXAtPmZpbGVuYW1lLCB1LT5idWYpOworICAgICAgICAgICAgICAgIHUtPmZhaWxlZCA9IDE7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB1LT5zZXJ2aWNlLT5wb3J0ID0gKHVpbnQxNl90KSBwOworCisgICAgICAgICAgICB1LT5jdXJyZW50X3RhZyA9IFhNTF9UQUdfU0VSVklDRTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBYTUxfVEFHX1RYVF9SRUNPUkQ6IHsKKyAgICAgICAgICAgIGFzc2VydCh1LT5zZXJ2aWNlKTsKKworICAgICAgICAgICAgdS0+c2VydmljZS0+dHh0X3JlY29yZHMgPSBhdmFoaV9zdHJpbmdfbGlzdF9hZGQodS0+c2VydmljZS0+dHh0X3JlY29yZHMsIHUtPmJ1ZiA/IHUtPmJ1ZiA6ICIiKTsKKyAgICAgICAgICAgIHUtPmN1cnJlbnRfdGFnID0gWE1MX1RBR19TRVJWSUNFOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFhNTF9UQUdfU1VCVFlQRTogeworICAgICAgICAgICAgYXNzZXJ0KHUtPnNlcnZpY2UpOworCisgICAgICAgICAgICB1LT5zZXJ2aWNlLT5zdWJ0eXBlcyA9IGF2YWhpX3N0cmluZ19saXN0X2FkZCh1LT5zZXJ2aWNlLT5zdWJ0eXBlcywgdS0+YnVmID8gdS0+YnVmIDogIiIpOworICAgICAgICAgICAgdS0+Y3VycmVudF90YWcgPSBYTUxfVEFHX1NFUlZJQ0U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgWE1MX1RBR19UWVBFOgorICAgICAgICBjYXNlIFhNTF9UQUdfRE9NQUlOX05BTUU6CisgICAgICAgIGNhc2UgWE1MX1RBR19IT1NUX05BTUU6CisgICAgICAgICAgICB1LT5jdXJyZW50X3RhZyA9IFhNTF9UQUdfU0VSVklDRTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgWE1MX1RBR19JTlZBTElEOgorICAgICAgICAgICAgOworICAgIH0KKworICAgIGF2YWhpX2ZyZWUodS0+YnVmKTsKKyAgICB1LT5idWYgPSBOVUxMOworfQorCitzdGF0aWMgY2hhciAqYXBwZW5kX2NkYXRhKGNoYXIgKnQsIGNvbnN0IGNoYXIgKm4sIGludCBsZW5ndGgpIHsKKyAgICBjaGFyICpyLCAqazsKKworICAgIGlmICghbGVuZ3RoKQorICAgICAgICByZXR1cm4gdDsKKworCisgICAgayA9IGF2YWhpX3N0cm5kdXAobiwgbGVuZ3RoKTsKKworICAgIGlmICh0KSB7CisgICAgICAgIHIgPSBhdmFoaV9zdHJkdXBfcHJpbnRmKCIlcyVzIiwgdCwgayk7CisgICAgICAgIGF2YWhpX2ZyZWUoayk7CisgICAgICAgIGF2YWhpX2ZyZWUodCk7CisgICAgfSBlbHNlCisgICAgICAgIHIgPSBrOworCisgICAgcmV0dXJuIHI7Cit9CisKK3N0YXRpYyB2b2lkIFhNTENBTEwgeG1sX2NkYXRhKHZvaWQgKmRhdGEsIGNvbnN0IFhNTF9DaGFyICpzLCBpbnQgbGVuKSB7CisgICAgc3RydWN0IHhtbF91c2VyZGF0YSAqdSA9IGRhdGE7CisgICAgYXNzZXJ0KHUpOworCisgICAgaWYgKHUtPmZhaWxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3dpdGNoICh1LT5jdXJyZW50X3RhZykgeworICAgICAgICBjYXNlIFhNTF9UQUdfTkFNRToKKyAgICAgICAgICAgIHUtPmdyb3VwLT5uYW1lID0gYXBwZW5kX2NkYXRhKHUtPmdyb3VwLT5uYW1lLCBzLCBsZW4pOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBYTUxfVEFHX1RZUEU6CisgICAgICAgICAgICBhc3NlcnQodS0+c2VydmljZSk7CisgICAgICAgICAgICB1LT5zZXJ2aWNlLT50eXBlID0gYXBwZW5kX2NkYXRhKHUtPnNlcnZpY2UtPnR5cGUsIHMsIGxlbik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFhNTF9UQUdfRE9NQUlOX05BTUU6CisgICAgICAgICAgICBhc3NlcnQodS0+c2VydmljZSk7CisgICAgICAgICAgICB1LT5zZXJ2aWNlLT5kb21haW5fbmFtZSA9IGFwcGVuZF9jZGF0YSh1LT5zZXJ2aWNlLT5kb21haW5fbmFtZSwgcywgbGVuKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgWE1MX1RBR19IT1NUX05BTUU6CisgICAgICAgICAgICBhc3NlcnQodS0+c2VydmljZSk7CisgICAgICAgICAgICB1LT5zZXJ2aWNlLT5ob3N0X25hbWUgPSBhcHBlbmRfY2RhdGEodS0+c2VydmljZS0+aG9zdF9uYW1lLCBzLCBsZW4pOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBYTUxfVEFHX1BPUlQ6CisgICAgICAgIGNhc2UgWE1MX1RBR19UWFRfUkVDT1JEOgorICAgICAgICBjYXNlIFhNTF9UQUdfU1VCVFlQRToKKyAgICAgICAgICAgIGFzc2VydCh1LT5zZXJ2aWNlKTsKKyAgICAgICAgICAgIHUtPmJ1ZiA9IGFwcGVuZF9jZGF0YSh1LT5idWYsIHMsIGxlbik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFhNTF9UQUdfU0VSVklDRV9HUk9VUDoKKyAgICAgICAgY2FzZSBYTUxfVEFHX1NFUlZJQ0U6CisgICAgICAgIGNhc2UgWE1MX1RBR19JTlZBTElEOgorICAgICAgICAgICAgOworICAgIH0KK30KKworc3RhdGljIGludCBzdGF0aWNfc2VydmljZV9ncm91cF9sb2FkKFN0YXRpY1NlcnZpY2VHcm91cCAqZykgeworICAgIFhNTF9QYXJzZXIgcGFyc2VyID0gTlVMTDsKKyAgICBpbnQgZmQgPSAtMTsKKyAgICBzdHJ1Y3QgeG1sX3VzZXJkYXRhIHU7CisgICAgaW50IHIgPSAtMTsKKyAgICBzdHJ1Y3Qgc3RhdCBzdDsKKyAgICBzc2l6ZV90IG47CisKKyAgICBhc3NlcnQoZyk7CisKKyAgICB1LmJ1ZiA9IE5VTEw7CisgICAgdS5ncm91cCA9IGc7CisgICAgdS5zZXJ2aWNlID0gTlVMTDsKKyAgICB1LmN1cnJlbnRfdGFnID0gWE1MX1RBR19JTlZBTElEOworICAgIHUuZmFpbGVkID0gMDsKKworICAgIC8qIENsZWFudXAgb2xkIGRhdGEgaW4gdGhpcyBzZXJ2aWNlIGdyb3VwLCBpZiBhdmFpbGFibGUgKi8KKyAgICByZW1vdmVfc3RhdGljX3NlcnZpY2VfZ3JvdXBfZnJvbV9zZXJ2ZXIoZyk7CisgICAgd2hpbGUgKGctPnNlcnZpY2VzKQorICAgICAgICBzdGF0aWNfc2VydmljZV9mcmVlKGctPnNlcnZpY2VzKTsKKworICAgIGF2YWhpX2ZyZWUoZy0+bmFtZSk7CisgICAgYXZhaGlfZnJlZShnLT5jaG9zZW5fbmFtZSk7CisgICAgZy0+bmFtZSA9IGctPmNob3Nlbl9uYW1lID0gTlVMTDsKKyAgICBnLT5yZXBsYWNlX3dpbGRjYXJkcyA9IDA7CisKKyAgICBpZiAoIShwYXJzZXIgPSBYTUxfUGFyc2VyQ3JlYXRlKE5VTEwpKSkgeworICAgICAgICBhdmFoaV9sb2dfZXJyb3IoIlhNTF9QYXJzZXJDcmVhdGUoKSBmYWlsZWQuIik7CisgICAgICAgIGdvdG8gZmluaXNoOworICAgIH0KKworICAgIGlmICgoZmQgPSBvcGVuKGctPmZpbGVuYW1lLCBPX1JET05MWSkpIDwgMCkgeworICAgICAgICBhdmFoaV9sb2dfZXJyb3IoIm9wZW4oXCIlc1wiLCBPX1JET05MWSk6ICVzIiwgZy0+ZmlsZW5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIGdvdG8gZmluaXNoOworICAgIH0KKworICAgIGlmIChmc3RhdChmZCwgJnN0KSA8IDApIHsKKyAgICAgICAgYXZhaGlfbG9nX2Vycm9yKCJmc3RhdCgpOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIGdvdG8gZmluaXNoOworICAgIH0KKworICAgIGctPm10aW1lID0gc3Quc3RfbXRpbWU7CisKKyAgICBYTUxfU2V0VXNlckRhdGEocGFyc2VyLCAmdSk7CisKKyAgICBYTUxfU2V0RWxlbWVudEhhbmRsZXIocGFyc2VyLCB4bWxfc3RhcnQsIHhtbF9lbmQpOworICAgIFhNTF9TZXRDaGFyYWN0ZXJEYXRhSGFuZGxlcihwYXJzZXIsIHhtbF9jZGF0YSk7CisKKyAgICBkbyB7CisgICAgICAgIHZvaWQgKmJ1ZmZlcjsKKworI2RlZmluZSBCVUZTSVpFICgxMCoxMDI0KQorCisgICAgICAgIGlmICghKGJ1ZmZlciA9IFhNTF9HZXRCdWZmZXIocGFyc2VyLCBCVUZTSVpFKSkpIHsKKyAgICAgICAgICAgIGF2YWhpX2xvZ19lcnJvcigiWE1MX0dldEJ1ZmZlcigpIGZhaWxlZC4iKTsKKyAgICAgICAgICAgIGdvdG8gZmluaXNoOworICAgICAgICB9CisKKyAgICAgICAgaWYgKChuID0gcmVhZChmZCwgYnVmZmVyLCBCVUZTSVpFKSkgPCAwKSB7CisgICAgICAgICAgICBhdmFoaV9sb2dfZXJyb3IoInJlYWQoKTogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICBnb3RvIGZpbmlzaDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghWE1MX1BhcnNlQnVmZmVyKHBhcnNlciwgbiwgbiA9PSAwKSkgeworICAgICAgICAgICAgYXZhaGlfbG9nX2Vycm9yKCJYTUxfUGFyc2VCdWZmZXIoKSBmYWlsZWQgYXQgbGluZSAlZDogJXMuXG4iLCAoaW50KSBYTUxfR2V0Q3VycmVudExpbmVOdW1iZXIocGFyc2VyKSwgWE1MX0Vycm9yU3RyaW5nKFhNTF9HZXRFcnJvckNvZGUocGFyc2VyKSkpOworICAgICAgICAgICAgZ290byBmaW5pc2g7CisgICAgICAgIH0KKworICAgIH0gd2hpbGUgKG4gIT0gMCk7CisKKyAgICBpZiAoIXUuZmFpbGVkKQorICAgICAgICByID0gMDsKKworZmluaXNoOgorCisgICAgaWYgKGZkID49IDApCisgICAgICAgIGNsb3NlKGZkKTsKKworICAgIGlmIChwYXJzZXIpCisgICAgICAgIFhNTF9QYXJzZXJGcmVlKHBhcnNlcik7CisKKyAgICBhdmFoaV9mcmVlKHUuYnVmKTsKKworICAgIHJldHVybiByOworfQorCitzdGF0aWMgdm9pZCBsb2FkX2ZpbGUoY2hhciAqbikgeworICAgIFN0YXRpY1NlcnZpY2VHcm91cCAqZzsKKyAgICBhc3NlcnQobik7CisKKyAgICBmb3IgKGcgPSBncm91cHM7IGc7IGcgPSBnLT5ncm91cHNfbmV4dCkKKyAgICAgICAgaWYgKHN0cmNtcChnLT5maWxlbmFtZSwgbikgPT0gMCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgIGF2YWhpX2xvZ19pbmZvKCJMb2FkaW5nIHNlcnZpY2UgZmlsZSAlcy4iLCBuKTsKKworICAgIGcgPSBzdGF0aWNfc2VydmljZV9ncm91cF9uZXcobik7CisgICAgaWYgKHN0YXRpY19zZXJ2aWNlX2dyb3VwX2xvYWQoZykgPCAwKSB7CisgICAgICAgIGF2YWhpX2xvZ19lcnJvcigiRmFpbGVkIHRvIGxvYWQgc2VydmljZSBncm91cCBmaWxlICVzLCBpZ25vcmluZy4iLCBnLT5maWxlbmFtZSk7CisgICAgICAgIHN0YXRpY19zZXJ2aWNlX2dyb3VwX2ZyZWUoZyk7CisgICAgfQorfQorCit2b2lkIHN0YXRpY19zZXJ2aWNlX2xvYWQoaW50IGluX2Nocm9vdCkgeworICAgIFN0YXRpY1NlcnZpY2VHcm91cCAqZywgKm47CisgICAgZ2xvYl90IGdsb2JidWY7CisgICAgaW50IGdsb2JyZXQ7CisgICAgY2hhciAqKnA7CisKKyAgICBmb3IgKGcgPSBncm91cHM7IGc7IGcgPSBuKSB7CisgICAgICAgIHN0cnVjdCBzdGF0IHN0OworCisgICAgICAgIG4gPSBnLT5ncm91cHNfbmV4dDsKKworICAgICAgICBpZiAoc3RhdChnLT5maWxlbmFtZSwgJnN0KSA8IDApIHsKKworICAgICAgICAgICAgaWYgKGVycm5vID09IEVOT0VOVCkKKyAgICAgICAgICAgICAgICBhdmFoaV9sb2dfaW5mbygiU2VydmljZSBncm91cCBmaWxlICVzIHZhbmlzaGVkLCByZW1vdmluZyBzZXJ2aWNlcy4iLCBnLT5maWxlbmFtZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYXZhaGlfbG9nX3dhcm4oIkZhaWxlZCB0byBzdGF0KCkgZmlsZSAlcywgaWdub3Jpbmc6ICVzIiwgZy0+ZmlsZW5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisKKyAgICAgICAgICAgIHN0YXRpY19zZXJ2aWNlX2dyb3VwX2ZyZWUoZyk7CisgICAgICAgIH0gZWxzZSBpZiAoc3Quc3RfbXRpbWUgIT0gZy0+bXRpbWUpIHsKKyAgICAgICAgICAgIGF2YWhpX2xvZ19pbmZvKCJTZXJ2aWNlIGdyb3VwIGZpbGUgJXMgY2hhbmdlZCwgcmVsb2FkaW5nLiIsIGctPmZpbGVuYW1lKTsKKworICAgICAgICAgICAgaWYgKHN0YXRpY19zZXJ2aWNlX2dyb3VwX2xvYWQoZykgPCAwKSB7CisgICAgICAgICAgICAgICAgYXZhaGlfbG9nX3dhcm4oIkZhaWxlZCB0byBsb2FkIHNlcnZpY2UgZ3JvdXAgZmlsZSAlcywgcmVtb3Zpbmcgc2VydmljZS4iLCBnLT5maWxlbmFtZSk7CisgICAgICAgICAgICAgICAgc3RhdGljX3NlcnZpY2VfZ3JvdXBfZnJlZShnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIG1lbXNldCgmZ2xvYmJ1ZiwgMCwgc2l6ZW9mKGdsb2JidWYpKTsKKworICAgIGlmICgoZ2xvYnJldCA9IGdsb2IoaW5fY2hyb290ID8gIi9zZXJ2aWNlcy8qLnNlcnZpY2UiIDogQVZBSElfU0VSVklDRV9ESVIgIi8qLnNlcnZpY2UiLCBHTE9CX0VSUiwgTlVMTCwgJmdsb2JidWYpKSAhPSAwKQorCisgICAgICAgIHN3aXRjaCAoZ2xvYnJldCkgeworI2lmZGVmIEdMT0JfTk9TUEFDRQorCSAgICBjYXNlIEdMT0JfTk9TUEFDRToKKwkgICAgICAgIGF2YWhpX2xvZ19lcnJvcigiTm90IGVub3VnaCBtZW1vcnkgdG8gcmVhZCBzZXJ2aWNlIGRpcmVjdG9yeSAiQVZBSElfU0VSVklDRV9ESVIiLiIpOworCSAgICAgICAgYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBHTE9CX05PTUFUQ0gKKyAgICAgICAgICAgIGNhc2UgR0xPQl9OT01BVENIOgorCSAgICAgICAgYXZhaGlfbG9nX2luZm8oIk5vIHNlcnZpY2UgZmlsZSBmb3VuZCBpbiAiQVZBSElfU0VSVklDRV9ESVIiLiIpOworCSAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICAgICAgICAgIGRlZmF1bHQ6CisJICAgICAgICBhdmFoaV9sb2dfZXJyb3IoIkZhaWxlZCB0byByZWFkICJBVkFISV9TRVJWSUNFX0RJUiIuIik7CisJICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgZWxzZSB7CisgICAgICAgIGZvciAocCA9IGdsb2JidWYuZ2xfcGF0aHY7ICpwOyBwKyspCisgICAgICAgICAgICBsb2FkX2ZpbGUoKnApOworCisgICAgICAgIGdsb2JmcmVlKCZnbG9iYnVmKTsKKyAgICB9Cit9CisKK3ZvaWQgc3RhdGljX3NlcnZpY2VfZnJlZV9hbGwodm9pZCkgeworCisgICAgd2hpbGUgKGdyb3VwcykKKyAgICAgICAgc3RhdGljX3NlcnZpY2VfZ3JvdXBfZnJlZShncm91cHMpOworfQorCit2b2lkIHN0YXRpY19zZXJ2aWNlX2FkZF90b19zZXJ2ZXIodm9pZCkgeworICAgIFN0YXRpY1NlcnZpY2VHcm91cCAqZzsKKworICAgIGZvciAoZyA9IGdyb3VwczsgZzsgZyA9IGctPmdyb3Vwc19uZXh0KQorICAgICAgICBhZGRfc3RhdGljX3NlcnZpY2VfZ3JvdXBfdG9fc2VydmVyKGcpOworfQorCit2b2lkIHN0YXRpY19zZXJ2aWNlX3JlbW92ZV9mcm9tX3NlcnZlcih2b2lkKSB7CisgICAgU3RhdGljU2VydmljZUdyb3VwICpnOworCisgICAgZm9yIChnID0gZ3JvdXBzOyBnOyBnID0gZy0+Z3JvdXBzX25leHQpCisgICAgICAgIHJlbW92ZV9zdGF0aWNfc2VydmljZV9ncm91cF9mcm9tX3NlcnZlcihnKTsKK30KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1kYWVtb24vc3RhdGljLXNlcnZpY2VzLmggYi9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL3N0YXRpYy1zZXJ2aWNlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyZWRjMzYKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL3N0YXRpYy1zZXJ2aWNlcy5oCkBAIC0wLDAgKzEsMjggQEAKKyNpZm5kZWYgZm9vc3RhdGljc2VydmljZXNoZm9vCisjZGVmaW5lIGZvb3N0YXRpY3NlcnZpY2VzaGZvbworCisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKK3ZvaWQgc3RhdGljX3NlcnZpY2VfbG9hZChpbnQgaW5fY2hyb290KTsKK3ZvaWQgc3RhdGljX3NlcnZpY2VfZnJlZV9hbGwodm9pZCk7Cit2b2lkIHN0YXRpY19zZXJ2aWNlX2FkZF90b19zZXJ2ZXIodm9pZCk7Cit2b2lkIHN0YXRpY19zZXJ2aWNlX3JlbW92ZV9mcm9tX3NlcnZlcih2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktZGlzY292ZXItc3RhbmRhbG9uZS9NYWtlZmlsZS5hbSBiL2F2YWhpLTAuNi4zMS9hdmFoaS1kaXNjb3Zlci1zdGFuZGFsb25lL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5OTVjMGEKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktZGlzY292ZXItc3RhbmRhbG9uZS9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDY5IEBACisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorIworIyBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworIyBVU0EuCisKK0FNX0NGTEFHUz0tSSQodG9wX3NyY2RpcikKKworaW50ZXJmYWNlcyA9IFwKKyAgICAgICAgYXZhaGktZGlzY292ZXIudWkKKworIyBUaGlzIGNvb2wgZGVidWcgdHJhcCB3b3JrcyBvbiBpMzg2L2djYyBvbmx5CitBTV9DRkxBR1MrPSctRERFQlVHX1RSQVA9X19hc21fXygiaW50ICQkMyIpJworCitpZiBIQVZFX0dUSzJPUjMKK2lmIEhBVkVfR0xJQgorYmluX1BST0dSQU1TID0gXAorCWF2YWhpLWRpc2NvdmVyLXN0YW5kYWxvbmUKKworYXZhaGlfZGlzY292ZXJfc3RhbmRhbG9uZV9TT1VSQ0VTID0gXAorCW1haW4uYworCithdmFoaV9kaXNjb3Zlcl9zdGFuZGFsb25lX0NGTEFHUyA9IFwKKwkkKEFNX0NGTEFHUykgXAorCS1EQVZBSElfSU5URVJGQUNFU19ESVI9XCIkKGludGVyZmFjZXNkaXIpXCIKKworYXZhaGlfZGlzY292ZXJfc3RhbmRhbG9uZV9MREFERCA9IFwKKwkkKEFNX0xEQUREKSBcCisJLi4vYXZhaGktY29tbW9uL2xpYmF2YWhpLWNvbW1vbi5sYSBcCisJLi4vYXZhaGktZ2xpYi9saWJhdmFoaS1nbGliLmxhIFwKKwkuLi9hdmFoaS1jb3JlL2xpYmF2YWhpLWNvcmUubGEKKworaWYgSEFWRV9HVEszCithdmFoaV9kaXNjb3Zlcl9zdGFuZGFsb25lX0NGTEFHUyArPSBcCisJJChHTElCMzBfQ0ZMQUdTKSAkKEdUSzMwX0NGTEFHUykKK2F2YWhpX2Rpc2NvdmVyX3N0YW5kYWxvbmVfTERBREQgKz0gXAorCSQoR0xJQjMwX0xJQlMpICQoR1RLMzBfTElCUykKK2Vsc2UKK2F2YWhpX2Rpc2NvdmVyX3N0YW5kYWxvbmVfQ0ZMQUdTICs9IFwKKwkkKEdMSUIyMF9DRkxBR1MpICQoR1RLMjBfQ0ZMQUdTKQorYXZhaGlfZGlzY292ZXJfc3RhbmRhbG9uZV9MREFERCArPSBcCisJJChHTElCMjBfTElCUykgJChHVEsyMF9MSUJTKQorZW5kaWYKKworaW50ZXJmYWNlc19EQVRBID0gJChpbnRlcmZhY2VzKQorCitlbmRpZiAgIyBIQVZFX0dMSUIKK2Vsc2UKKworaWYgSEFWRV9QWVRIT05fREJVUworCitpbnRlcmZhY2VzX0RBVEEgPQorCitlbmRpZgorZW5kaWYKKworRVhUUkFfRElTVCA9IFwKKwkkKGludGVyZmFjZXMpCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktZGlzY292ZXItc3RhbmRhbG9uZS9NYWtlZmlsZS5pbiBiL2F2YWhpLTAuNi4zMS9hdmFoaS1kaXNjb3Zlci1zdGFuZGFsb25lL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNWFhNzMKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktZGlzY292ZXItc3RhbmRhbG9uZS9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDc5OCBAQAorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xMS4zIGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorIworIyBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworIyBVU0EuCisKKworVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dUSzJPUjNfVFJVRUBiaW5fUFJPR1JBTVMgPSBhdmFoaS1kaXNjb3Zlci1zdGFuZGFsb25lJChFWEVFWFQpCitASEFWRV9HTElCX1RSVUVAQEhBVkVfR1RLMk9SM19UUlVFQEBIQVZFX0dUSzNfVFJVRUBhbV9fYXBwZW5kXzEgPSBcCitASEFWRV9HTElCX1RSVUVAQEhBVkVfR1RLMk9SM19UUlVFQEBIQVZFX0dUSzNfVFJVRUAJJChHTElCMzBfQ0ZMQUdTKSAkKEdUSzMwX0NGTEFHUykKKworQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dUSzJPUjNfVFJVRUBASEFWRV9HVEszX1RSVUVAYW1fX2FwcGVuZF8yID0gXAorQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dUSzJPUjNfVFJVRUBASEFWRV9HVEszX1RSVUVACSQoR0xJQjMwX0xJQlMpICQoR1RLMzBfTElCUykKKworQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dUSzJPUjNfVFJVRUBASEFWRV9HVEszX0ZBTFNFQGFtX19hcHBlbmRfMyA9IFwKK0BIQVZFX0dMSUJfVFJVRUBASEFWRV9HVEsyT1IzX1RSVUVAQEhBVkVfR1RLM19GQUxTRUAJJChHTElCMjBfQ0ZMQUdTKSAkKEdUSzIwX0NGTEFHUykKKworQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dUSzJPUjNfVFJVRUBASEFWRV9HVEszX0ZBTFNFQGFtX19hcHBlbmRfNCA9IFwKK0BIQVZFX0dMSUJfVFJVRUBASEFWRV9HVEsyT1IzX1RSVUVAQEhBVkVfR1RLM19GQUxTRUAJJChHTElCMjBfTElCUykgJChHVEsyMF9MSUJTKQorCitzdWJkaXIgPSBhdmFoaS1kaXNjb3Zlci1zdGFuZGFsb25lCitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9hY3hfcHRocmVhZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vZ2NjX3N0YWNrX3Byb3RlY3QubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2djY192aXNpYmlsaXR5Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9pbnRsdG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vaW50cm9zcGVjdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbGlidG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHRvcHRpb25zLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9sdHN1Z2FyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9sdHZlcnNpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2x0fm9ic29sZXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9ubHMubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vcHl0aG9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2FjaW5jbHVkZS5tNCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9kb3h5Z2VuLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CithbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQoYmluZGlyKSIgIiQoREVTVERJUikkKGludGVyZmFjZXNkaXIpIgorUFJPR1JBTVMgPSAkKGJpbl9QUk9HUkFNUykKK2FtX19hdmFoaV9kaXNjb3Zlcl9zdGFuZGFsb25lX1NPVVJDRVNfRElTVCA9IG1haW4uYworQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dUSzJPUjNfVFJVRUBhbV9hdmFoaV9kaXNjb3Zlcl9zdGFuZGFsb25lX09CSkVDVFMgPSBhdmFoaV9kaXNjb3Zlcl9zdGFuZGFsb25lLW1haW4uJChPQkpFWFQpCithdmFoaV9kaXNjb3Zlcl9zdGFuZGFsb25lX09CSkVDVFMgPSAgXAorCSQoYW1fYXZhaGlfZGlzY292ZXJfc3RhbmRhbG9uZV9PQkpFQ1RTKQorYW1fX0RFUEVOREVOQ0lFU18xID0KK0BIQVZFX0dMSUJfVFJVRUBASEFWRV9HVEsyT1IzX1RSVUVAQEhBVkVfR1RLM19UUlVFQGFtX19ERVBFTkRFTkNJRVNfMiA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKQorQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dUSzJPUjNfVFJVRUBASEFWRV9HVEszX0ZBTFNFQGFtX19ERVBFTkRFTkNJRVNfMyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCitASEFWRV9HTElCX1RSVUVAQEhBVkVfR1RLMk9SM19UUlVFQEBIQVZFX0dUSzNfRkFMU0VACSQoYW1fX0RFUEVOREVOQ0lFU18xKQorQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dUSzJPUjNfVFJVRUBhdmFoaV9kaXNjb3Zlcl9zdGFuZGFsb25lX0RFUEVOREVOQ0lFUyA9IC4uL2F2YWhpLWNvbW1vbi9saWJhdmFoaS1jb21tb24ubGEgXAorQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dUSzJPUjNfVFJVRUAJLi4vYXZhaGktZ2xpYi9saWJhdmFoaS1nbGliLmxhIFwKK0BIQVZFX0dMSUJfVFJVRUBASEFWRV9HVEsyT1IzX1RSVUVACS4uL2F2YWhpLWNvcmUvbGliYXZhaGktY29yZS5sYSBcCitASEFWRV9HTElCX1RSVUVAQEhBVkVfR1RLMk9SM19UUlVFQAkkKGFtX19ERVBFTkRFTkNJRVNfMikgXAorQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dUSzJPUjNfVFJVRUAJJChhbV9fREVQRU5ERU5DSUVTXzMpCitBTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCithbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfbHRfMCA9IC0tc2lsZW50CithdmFoaV9kaXNjb3Zlcl9zdGFuZGFsb25lX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAorCSQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSBcCisJJChhdmFoaV9kaXNjb3Zlcl9zdGFuZGFsb25lX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgXAorCSQoTERGTEFHUykgLW8gJEAKK0RFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpCitkZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCithbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcworYW1fX212ID0gbXYgLWYKK0NPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAorCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0xUQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpIFwKKwkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKKwkkKEFNX0NGTEFHUykgJChDRkxBR1MpCitBTV9WX0NDID0gJChhbV9fdl9DQ19AQU1fVkApCithbV9fdl9DQ18gPSAkKGFtX192X0NDX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICIgJEA7CitBTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCithbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfYXRfMCA9IEAKK0NDTEQgPSAkKENDKQorTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAorCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEX0BBTV9WQCkKK2FtX192X0NDTERfID0gJChhbV9fdl9DQ0xEX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfQ0NMRF8wID0gQGVjaG8gIiAgQ0NMRCAgIiAkQDsKK0FNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQorYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAiICRAOworU09VUkNFUyA9ICQoYXZhaGlfZGlzY292ZXJfc3RhbmRhbG9uZV9TT1VSQ0VTKQorRElTVF9TT1VSQ0VTID0gJChhbV9fYXZhaGlfZGlzY292ZXJfc3RhbmRhbG9uZV9TT1VSQ0VTX0RJU1QpCithbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKK2FtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCisgICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKKyAgICAqKSBmPSQkcDs7IFwKKyAgZXNhYzsKK2FtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKK2FtX19pbnN0YWxsX21heCA9IDQwCithbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAorICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCithbV9fbm9iYXNlX3N0cmlwID0gXAorICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKK2FtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKKyAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKKyAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMvIC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKKyAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAorICAgIGlmICgrK25bJCQyXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIFwKKyAgICAgIHsgcHJpbnQgJCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKKyAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCithbV9fYmFzZV9saXN0ID0gXAorICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnIHwgXAorICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCithbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyID0geyBcCisgIHRlc3QgLXogIiQkZmlsZXMiIFwKKyAgICB8fCB7IHRlc3QgISAtZCAiJCRkaXIiICYmIHRlc3QgISAtZiAiJCRkaXIiICYmIHRlc3QgISAtciAiJCRkaXIiOyB9IFwKKyAgICB8fCB7IGVjaG8gIiAoIGNkICckJGRpcicgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCisgICAgICAgICAkKGFtX19jZCkgIiQkZGlyIiAmJiBybSAtZiAkJGZpbGVzOyB9OyBcCisgIH0KK0RBVEEgPSAkKGludGVyZmFjZXNfREFUQSkKK0VUQUdTID0gZXRhZ3MKK0NUQUdTID0gY3RhZ3MKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitBQ0xPQ0FMID0gQEFDTE9DQUxACitBTExfTElOR1VBUyA9IEBBTExfTElOR1VBU0AKK0FNVEFSID0gQEFNVEFSQAorQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACitBUiA9IEBBUkAKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBVkFISV9BVVRPSVBEX0dST1VQID0gQEFWQUhJX0FVVE9JUERfR1JPVVBACitBVkFISV9BVVRPSVBEX1VTRVIgPSBAQVZBSElfQVVUT0lQRF9VU0VSQAorQVZBSElfR1JPVVAgPSBAQVZBSElfR1JPVVBACitBVkFISV9QUklWX0FDQ0VTU19HUk9VUCA9IEBBVkFISV9QUklWX0FDQ0VTU19HUk9VUEAKK0FWQUhJX1VTRVIgPSBAQVZBSElfVVNFUkAKK0FXSyA9IEBBV0tACitDQVRBTE9HUyA9IEBDQVRBTE9HU0AKK0NBVE9CSkVYVCA9IEBDQVRPQkpFWFRACitDQyA9IEBDQ0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1hYID0gQENYWEAKK0NYWENQUCA9IEBDWFhDUFBACitDWFhERVBNT0RFID0gQENYWERFUE1PREVACitDWFhGTEFHUyA9IEBDWFhGTEFHU0AKK0NZR1BBVEhfVyA9IEBDWUdQQVRIX1dACitEQVRBRElSTkFNRSA9IEBEQVRBRElSTkFNRUAKK0RCVVNfQ0ZMQUdTID0gQERCVVNfQ0ZMQUdTQAorREJVU19MSUJTID0gQERCVVNfTElCU0AKK0RCVVNfU1lTVEVNX0JVU19ERUZBVUxUX0FERFJFU1MgPSBAREJVU19TWVNURU1fQlVTX0RFRkFVTFRfQUREUkVTU0AKK0RCVVNfU1lTX0RJUiA9IEBEQlVTX1NZU19ESVJACitERUZTID0gQERFRlNACitERVBESVIgPSBAREVQRElSQAorRExMVE9PTCA9IEBETExUT09MQAorRE9YWUdFTl9QQVBFUl9TSVpFID0gQERPWFlHRU5fUEFQRVJfU0laRUAKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRFhfQ09ORklHID0gQERYX0NPTkZJR0AKK0RYX0RPQ0RJUiA9IEBEWF9ET0NESVJACitEWF9ET1QgPSBARFhfRE9UQAorRFhfRE9YWUdFTiA9IEBEWF9ET1hZR0VOQAorRFhfRFZJUFMgPSBARFhfRFZJUFNACitEWF9FR1JFUCA9IEBEWF9FR1JFUEAKK0RYX0VOViA9IEBEWF9FTlZACitEWF9GTEFHX2NoaSA9IEBEWF9GTEFHX2NoaUAKK0RYX0ZMQUdfY2htID0gQERYX0ZMQUdfY2htQAorRFhfRkxBR19kb2MgPSBARFhfRkxBR19kb2NACitEWF9GTEFHX2RvdCA9IEBEWF9GTEFHX2RvdEAKK0RYX0ZMQUdfaHRtbCA9IEBEWF9GTEFHX2h0bWxACitEWF9GTEFHX21hbiA9IEBEWF9GTEFHX21hbkAKK0RYX0ZMQUdfcGRmID0gQERYX0ZMQUdfcGRmQAorRFhfRkxBR19wcyA9IEBEWF9GTEFHX3BzQAorRFhfRkxBR19ydGYgPSBARFhfRkxBR19ydGZACitEWF9GTEFHX3htbCA9IEBEWF9GTEFHX3htbEAKK0RYX0hIQyA9IEBEWF9ISENACitEWF9MQVRFWCA9IEBEWF9MQVRFWEAKK0RYX01BS0VJTkRFWCA9IEBEWF9NQUtFSU5ERVhACitEWF9QREZMQVRFWCA9IEBEWF9QREZMQVRFWEAKK0RYX1BFUkwgPSBARFhfUEVSTEAKK0RYX1BST0pFQ1QgPSBARFhfUFJPSkVDVEAKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRVhFRVhUID0gQEVYRUVYVEAKK0ZHUkVQID0gQEZHUkVQQAorR0FDVVRJTCA9IEBHQUNVVElMQAorR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKK0dMSUIyMF9DRkxBR1MgPSBAR0xJQjIwX0NGTEFHU0AKK0dMSUIyMF9MSUJTID0gQEdMSUIyMF9MSUJTQAorR01PRklMRVMgPSBAR01PRklMRVNACitHTVNHRk1UID0gQEdNU0dGTVRACitHT0JKRUNUX0NGTEFHUyA9IEBHT0JKRUNUX0NGTEFHU0AKK0dPQkpFQ1RfTElCUyA9IEBHT0JKRUNUX0xJQlNACitHUkVQID0gQEdSRVBACitHVEsyMF9DRkxBR1MgPSBAR1RLMjBfQ0ZMQUdTQAorR1RLMjBfTElCUyA9IEBHVEsyMF9MSUJTQAorR1RLMzBfQ0ZMQUdTID0gQEdUSzMwX0NGTEFHU0AKK0dUSzMwX0xJQlMgPSBAR1RLMzBfTElCU0AKK0hPV0xfQ09NUEFUX1ZFUlNJT04gPSBASE9XTF9DT01QQVRfVkVSU0lPTkAKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSU5TVE9CSkVYVCA9IEBJTlNUT0JKRVhUQAorSU5UTExJQlMgPSBASU5UTExJQlNACitJTlRMVE9PTF9FWFRSQUNUID0gQElOVExUT09MX0VYVFJBQ1RACitJTlRMVE9PTF9NRVJHRSA9IEBJTlRMVE9PTF9NRVJHRUAKK0lOVExUT09MX1BFUkwgPSBASU5UTFRPT0xfUEVSTEAKK0lOVExUT09MX1VQREFURSA9IEBJTlRMVE9PTF9VUERBVEVACitJTlRST1NQRUNUSU9OX0NGTEFHUyA9IEBJTlRST1NQRUNUSU9OX0NGTEFHU0AKK0lOVFJPU1BFQ1RJT05fQ09NUElMRVIgPSBASU5UUk9TUEVDVElPTl9DT01QSUxFUkAKK0lOVFJPU1BFQ1RJT05fR0VORVJBVEUgPSBASU5UUk9TUEVDVElPTl9HRU5FUkFURUAKK0lOVFJPU1BFQ1RJT05fR0lSRElSID0gQElOVFJPU1BFQ1RJT05fR0lSRElSQAorSU5UUk9TUEVDVElPTl9MSUJTID0gQElOVFJPU1BFQ1RJT05fTElCU0AKK0lOVFJPU1BFQ1RJT05fTUFLRUZJTEUgPSBASU5UUk9TUEVDVElPTl9NQUtFRklMRUAKK0lOVFJPU1BFQ1RJT05fU0NBTk5FUiA9IEBJTlRST1NQRUNUSU9OX1NDQU5ORVJACitJTlRST1NQRUNUSU9OX1RZUEVMSUJESVIgPSBASU5UUk9TUEVDVElPTl9UWVBFTElCRElSQAorTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMSUJBVkFISV9DTElFTlRfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NMSUVOVF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9DT01NT05fVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NPTU1PTl9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9DT01QQVRfSE9XTF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ09NUEFUX0hPV0xfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfQ09NUEFUX0xJQkROU19TRF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ09NUEFUX0xJQkROU19TRF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9DT1JFX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DT1JFX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0dMSUJfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0dMSUJfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfR09CSkVDVF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfR09CSkVDVF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9RVDNfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX1FUM19WRVJTSU9OX0lORk9ACitMSUJBVkFISV9RVDRfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX1FUNF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9VSV9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfVUlfVkVSU0lPTl9JTkZPQAorTElCREFFTU9OX0NGTEFHUyA9IEBMSUJEQUVNT05fQ0ZMQUdTQAorTElCREFFTU9OX0xJQlMgPSBATElCREFFTU9OX0xJQlNACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQExJQlNACitMSUJUT09MID0gQExJQlRPT0xACitMSVBPID0gQExJUE9ACitMTl9TID0gQExOX1NACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACitNQ1MgPSBATUNTQAorTURBU1NFTUJMRVIgPSBATURBU1NFTUJMRVJACitNS0RJUl9QID0gQE1LRElSX1BACitNS0lOU1RBTExESVJTID0gQE1LSU5TVEFMTERJUlNACitNT0NfUVQzID0gQE1PQ19RVDNACitNT0NfUVQ0ID0gQE1PQ19RVDRACitNT05PRE9DRVIgPSBATU9OT0RPQ0VSQAorTU9OT0RPQ19DRkxBR1MgPSBATU9OT0RPQ19DRkxBR1NACitNT05PRE9DX0RJUiA9IEBNT05PRE9DX0RJUkAKK01PTk9ET0NfTElCUyA9IEBNT05PRE9DX0xJQlNACitNU0dGTVQgPSBATVNHRk1UQAorTVNHRk1UX09QVFMgPSBATVNHRk1UX09QVFNACitNU0dNRVJHRSA9IEBNU0dNRVJHRUAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPVE9PTCA9IEBPVE9PTEAKK09UT09MNjQgPSBAT1RPT0w2NEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAorUEtHX0NPTkZJR19MSUJESVIgPSBAUEtHX0NPTkZJR19MSUJESVJACitQS0dfQ09ORklHX1BBVEggPSBAUEtHX0NPTkZJR19QQVRIQAorUE9GSUxFUyA9IEBQT0ZJTEVTQAorUE9TVUIgPSBAUE9TVUJACitQT19JTl9EQVRBRElSX0ZBTFNFID0gQFBPX0lOX0RBVEFESVJfRkFMU0VACitQT19JTl9EQVRBRElSX1RSVUUgPSBAUE9fSU5fREFUQURJUl9UUlVFQAorUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAorUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACitQVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAorUFlUSE9OID0gQFBZVEhPTkAKK1BZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACitQWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAorUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAorUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACitRVDNfQ0ZMQUdTID0gQFFUM19DRkxBR1NACitRVDNfTElCUyA9IEBRVDNfTElCU0AKK1FUNF9DRkxBR1MgPSBAUVQ0X0NGTEFHU0AKK1FUNF9MSUJTID0gQFFUNF9MSUJTQAorUkFOTElCID0gQFJBTkxJQkAKK1NFRCA9IEBTRURACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU1RPVyA9IEBTVE9XQAorU1RSSVAgPSBAU1RSSVBACitVU0VfTkxTID0gQFVTRV9OTFNACitWRVJTSU9OID0gQFZFUlNJT05ACitWSVNJQklMSVRZX0hJRERFTl9DRkxBR1MgPSBAVklTSUJJTElUWV9ISURERU5fQ0ZMQUdTQAorWEdFVFRFWFQgPSBAWEdFVFRFWFRACitYTUxfQ0ZMQUdTID0gQFhNTF9DRkxBR1NACitYTUxfTElCUyA9IEBYTUxfTElCU0AKK2Fic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACithYnNfc3JjZGlyID0gQGFic19zcmNkaXJACithYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACithYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKK2FjX2N0X0FSID0gQGFjX2N0X0FSQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9DWFggPSBAYWNfY3RfQ1hYQAorYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAorYWN4X3B0aHJlYWRfY29uZmlnID0gQGFjeF9wdGhyZWFkX2NvbmZpZ0AKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYXZhaGlfcnVudGltZV9kaXIgPSBAYXZhaGlfcnVudGltZV9kaXJACithdmFoaV9zb2NrZXQgPSBAYXZhaGlfc29ja2V0QAorYXZhaGlsb2NhbGVkaXIgPSBAYXZhaGlsb2NhbGVkaXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitidWlsZGRpciA9IEBidWlsZGRpckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZG9jZGlyID0gQGRvY2RpckAKK2R2aWRpciA9IEBkdmlkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2hhdmVfcGtnX2NvbmZpZyA9IEBoYXZlX3BrZ19jb25maWdACitoYXZlX3htbHRvbWFuID0gQGhhdmVfeG1sdG9tYW5ACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAoraW50ZXJmYWNlc2RpciA9IEBpbnRlcmZhY2VzZGlyQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3BrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACitwa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3BzZGlyID0gQHBzZGlyQAorcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKK3B5dGhvbmRpciA9IEBweXRob25kaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACitzeXN0ZW1kc3lzdGVtdW5pdGRpciA9IEBzeXN0ZW1kc3lzdGVtdW5pdGRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorCisjIFRoaXMgY29vbCBkZWJ1ZyB0cmFwIHdvcmtzIG9uIGkzODYvZ2NjIG9ubHkKK0FNX0NGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKSAnLURERUJVR19UUkFQPV9fYXNtX18oImludCAkJDMiKScKK2ludGVyZmFjZXMgPSBcCisgICAgICAgIGF2YWhpLWRpc2NvdmVyLnVpCisKK0BIQVZFX0dMSUJfVFJVRUBASEFWRV9HVEsyT1IzX1RSVUVAYXZhaGlfZGlzY292ZXJfc3RhbmRhbG9uZV9TT1VSQ0VTID0gXAorQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dUSzJPUjNfVFJVRUAJbWFpbi5jCisKK0BIQVZFX0dMSUJfVFJVRUBASEFWRV9HVEsyT1IzX1RSVUVAYXZhaGlfZGlzY292ZXJfc3RhbmRhbG9uZV9DRkxBR1MgPSAgXAorQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dUSzJPUjNfVFJVRUAJJChBTV9DRkxBR1MpIFwKK0BIQVZFX0dMSUJfVFJVRUBASEFWRV9HVEsyT1IzX1RSVUVACS1EQVZBSElfSU5URVJGQUNFU19ESVI9XCIkKGludGVyZmFjZXNkaXIpXCIgXAorQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dUSzJPUjNfVFJVRUAJJChhbV9fYXBwZW5kXzEpIFwKK0BIQVZFX0dMSUJfVFJVRUBASEFWRV9HVEsyT1IzX1RSVUVACSQoYW1fX2FwcGVuZF8zKQorQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dUSzJPUjNfVFJVRUBhdmFoaV9kaXNjb3Zlcl9zdGFuZGFsb25lX0xEQUREID0gIFwKK0BIQVZFX0dMSUJfVFJVRUBASEFWRV9HVEsyT1IzX1RSVUVACSQoQU1fTERBREQpIFwKK0BIQVZFX0dMSUJfVFJVRUBASEFWRV9HVEsyT1IzX1RSVUVACS4uL2F2YWhpLWNvbW1vbi9saWJhdmFoaS1jb21tb24ubGEgXAorQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dUSzJPUjNfVFJVRUAJLi4vYXZhaGktZ2xpYi9saWJhdmFoaS1nbGliLmxhIFwKK0BIQVZFX0dMSUJfVFJVRUBASEFWRV9HVEsyT1IzX1RSVUVACS4uL2F2YWhpLWNvcmUvbGliYXZhaGktY29yZS5sYSBcCitASEFWRV9HTElCX1RSVUVAQEhBVkVfR1RLMk9SM19UUlVFQAkkKGFtX19hcHBlbmRfMikgXAorQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dUSzJPUjNfVFJVRUAJJChhbV9fYXBwZW5kXzQpCitASEFWRV9HTElCX1RSVUVAQEhBVkVfR1RLMk9SM19UUlVFQGludGVyZmFjZXNfREFUQSA9ICQoaW50ZXJmYWNlcykKK0BIQVZFX0dUSzJPUjNfRkFMU0VAQEhBVkVfUFlUSE9OX0RCVVNfVFJVRUBpbnRlcmZhY2VzX0RBVEEgPSAKK0VYVFJBX0RJU1QgPSBcCisJJChpbnRlcmZhY2VzKQorCithbGw6IGFsbC1hbQorCisuU1VGRklYRVM6CisuU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCiskKHNyY2RpcikvTWFrZWZpbGUuaW46ICAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAorCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiBhdmFoaS1kaXNjb3Zlci1zdGFuZGFsb25lL01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiBhdmFoaS1kaXNjb3Zlci1zdGFuZGFsb25lL01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKK2luc3RhbGwtYmluUFJPR1JBTVM6ICQoYmluX1BST0dSQU1TKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQoYmluZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQoYmluZGlyKSIKKwlAbGlzdD0nJChiaW5fUFJPR1JBTVMpJzsgdGVzdCAtbiAiJChiaW5kaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCisJc2VkICdzLyQoRVhFRVhUKSQkLy8nIHwgXAorCXdoaWxlIHJlYWQgcCBwMTsgZG8gaWYgdGVzdCAtZiAkJHAgfHwgdGVzdCAtZiAkJHAxOyBcCisJICB0aGVuIGVjaG8gIiQkcCI7IGVjaG8gIiQkcCI7IGVsc2UgOjsgZmk7IFwKKwlkb25lIHwgXAorCXNlZCAtZSAncDtzLC4qLywsO247aCcgLWUgJ3N8Lip8LnwnIFwKKwkgICAgLWUgJ3A7eDtzLC4qLywsO3MvJChFWEVFWFQpJCQvLzskKHRyYW5zZm9ybSk7cy8kJC8kKEVYRUVYVCkvJyB8IFwKKwlzZWQgJ047TjtOO3MsXG4sICxnJyB8IFwKKwkkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiOyBkaXJzWyIuIl0gPSAxIH0gXAorCSAgeyBkPSQkMzsgaWYgKGRpcnNbZF0gIT0gMSkgeyBwcmludCAiZCIsIGQ7IGRpcnNbZF0gPSAxIH0gXAorCSAgICBpZiAoJCQyID09ICQkNCkgZmlsZXNbZF0gPSBmaWxlc1tkXSAiICIgJCQxOyBcCisJICAgIGVsc2UgeyBwcmludCAiZiIsICQkMyAiLyIgJCQ0LCAkJDE7IH0gfSBcCisJICBFTkQgeyBmb3IgKGQgaW4gZmlsZXMpIHByaW50ICJmIiwgZCwgZmlsZXNbZF0gfScgfCBcCisJd2hpbGUgcmVhZCB0eXBlIGRpciBmaWxlczsgZG8gXAorCSAgICBpZiB0ZXN0ICIkJGRpciIgPSAuOyB0aGVuIGRpcj07IGVsc2UgZGlyPS8kJGRpcjsgZmk7IFwKKwkgICAgdGVzdCAteiAiJCRmaWxlcyIgfHwgeyBcCisJICAgIGVjaG8gIiAkKElOU1RBTExfUFJPR1JBTV9FTlYpICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTExfUFJPR1JBTSkgJCRmaWxlcyAnJChERVNURElSKSQoYmluZGlyKSQkZGlyJyI7IFwKKwkgICAgJChJTlNUQUxMX1BST0dSQU1fRU5WKSAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMX1BST0dSQU0pICQkZmlsZXMgIiQoREVTVERJUikkKGJpbmRpcikkJGRpciIgfHwgZXhpdCAkJD87IFwKKwkgICAgfSBcCisJOyBkb25lCisKK3VuaW5zdGFsbC1iaW5QUk9HUkFNUzoKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKGJpbl9QUk9HUkFNUyknOyB0ZXN0IC1uICIkKGJpbmRpcikiIHx8IGxpc3Q9OyBcCisJZmlsZXM9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IFwKKwkgIHNlZCAtZSAnaDtzLF4uKi8sLDtzLyQoRVhFRVhUKSQkLy87JCh0cmFuc2Zvcm0pJyBcCisJICAgICAgLWUgJ3MvJCQvJChFWEVFWFQpLycgYDsgXAorCXRlc3QgLW4gIiQkbGlzdCIgfHwgZXhpdCAwOyBcCisJZWNobyAiICggY2QgJyQoREVTVERJUikkKGJpbmRpciknICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAorCWNkICIkKERFU1RESVIpJChiaW5kaXIpIiAmJiBybSAtZiAkJGZpbGVzCisKK2NsZWFuLWJpblBST0dSQU1TOgorCUBsaXN0PSckKGJpbl9QUk9HUkFNUyknOyB0ZXN0IC1uICIkJGxpc3QiIHx8IGV4aXQgMDsgXAorCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCisJcm0gLWYgJCRsaXN0IHx8IGV4aXQgJCQ/OyBcCisJdGVzdCAtbiAiJChFWEVFWFQpIiB8fCBleGl0IDA7IFwKKwlsaXN0PWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgJ3MvJChFWEVFWFQpJCQvLydgOyBcCisJZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKKwlybSAtZiAkJGxpc3QKK2F2YWhpLWRpc2NvdmVyLXN0YW5kYWxvbmUkKEVYRUVYVCk6ICQoYXZhaGlfZGlzY292ZXJfc3RhbmRhbG9uZV9PQkpFQ1RTKSAkKGF2YWhpX2Rpc2NvdmVyX3N0YW5kYWxvbmVfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2F2YWhpX2Rpc2NvdmVyX3N0YW5kYWxvbmVfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgYXZhaGktZGlzY292ZXItc3RhbmRhbG9uZSQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQoYXZhaGlfZGlzY292ZXJfc3RhbmRhbG9uZV9MSU5LKSAkKGF2YWhpX2Rpc2NvdmVyX3N0YW5kYWxvbmVfT0JKRUNUUykgJChhdmFoaV9kaXNjb3Zlcl9zdGFuZGFsb25lX0xEQUREKSAkKExJQlMpCisKK21vc3RseWNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICouJChPQkpFWFQpCisKK2Rpc3RjbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLnRhYi5jCisKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9hdmFoaV9kaXNjb3Zlcl9zdGFuZGFsb25lLW1haW4uUG9AYW1fX3F1b3RlQAorCisuYy5vOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAkPAorCisuYy5vYmo6CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgYCQoQ1lHUEFUSF9XKSAnJDwnYAorCisuYy5sbzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKKworYXZhaGlfZGlzY292ZXJfc3RhbmRhbG9uZS1tYWluLm86IG1haW4uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX2Rpc2NvdmVyX3N0YW5kYWxvbmVfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGF2YWhpX2Rpc2NvdmVyX3N0YW5kYWxvbmUtbWFpbi5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9hdmFoaV9kaXNjb3Zlcl9zdGFuZGFsb25lLW1haW4uVHBvIC1jIC1vIGF2YWhpX2Rpc2NvdmVyX3N0YW5kYWxvbmUtbWFpbi5vIGB0ZXN0IC1mICdtYWluLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYG1haW4uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYXZhaGlfZGlzY292ZXJfc3RhbmRhbG9uZS1tYWluLlRwbyAkKERFUERJUikvYXZhaGlfZGlzY292ZXJfc3RhbmRhbG9uZS1tYWluLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nbWFpbi5jJyBvYmplY3Q9J2F2YWhpX2Rpc2NvdmVyX3N0YW5kYWxvbmUtbWFpbi5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9kaXNjb3Zlcl9zdGFuZGFsb25lX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGF2YWhpX2Rpc2NvdmVyX3N0YW5kYWxvbmUtbWFpbi5vIGB0ZXN0IC1mICdtYWluLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYG1haW4uYworCithdmFoaV9kaXNjb3Zlcl9zdGFuZGFsb25lLW1haW4ub2JqOiBtYWluLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9kaXNjb3Zlcl9zdGFuZGFsb25lX0NGTEFHUykgJChDRkxBR1MpIC1NVCBhdmFoaV9kaXNjb3Zlcl9zdGFuZGFsb25lLW1haW4ub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9hdmFoaV9kaXNjb3Zlcl9zdGFuZGFsb25lLW1haW4uVHBvIC1jIC1vIGF2YWhpX2Rpc2NvdmVyX3N0YW5kYWxvbmUtbWFpbi5vYmogYGlmIHRlc3QgLWYgJ21haW4uYyc7IHRoZW4gJChDWUdQQVRIX1cpICdtYWluLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL21haW4uYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYXZhaGlfZGlzY292ZXJfc3RhbmRhbG9uZS1tYWluLlRwbyAkKERFUERJUikvYXZhaGlfZGlzY292ZXJfc3RhbmRhbG9uZS1tYWluLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nbWFpbi5jJyBvYmplY3Q9J2F2YWhpX2Rpc2NvdmVyX3N0YW5kYWxvbmUtbWFpbi5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX2Rpc2NvdmVyX3N0YW5kYWxvbmVfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYXZhaGlfZGlzY292ZXJfc3RhbmRhbG9uZS1tYWluLm9iaiBgaWYgdGVzdCAtZiAnbWFpbi5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ21haW4uYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvbWFpbi5jJzsgZmlgCisKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJzCitpbnN0YWxsLWludGVyZmFjZXNEQVRBOiAkKGludGVyZmFjZXNfREFUQSkKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwl0ZXN0IC16ICIkKGludGVyZmFjZXNkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChpbnRlcmZhY2VzZGlyKSIKKwlAbGlzdD0nJChpbnRlcmZhY2VzX0RBVEEpJzsgdGVzdCAtbiAiJChpbnRlcmZhY2VzZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICBlY2hvICIkJGQkJHAiOyBcCisJZG9uZSB8ICQoYW1fX2Jhc2VfbGlzdCkgfCBcCisJd2hpbGUgcmVhZCBmaWxlczsgZG8gXAorCSAgZWNobyAiICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICckKERFU1RESVIpJChpbnRlcmZhY2VzZGlyKSciOyBcCisJICAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAiJChERVNURElSKSQoaW50ZXJmYWNlc2RpcikiIHx8IGV4aXQgJCQ/OyBcCisJZG9uZQorCit1bmluc3RhbGwtaW50ZXJmYWNlc0RBVEE6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChpbnRlcmZhY2VzX0RBVEEpJzsgdGVzdCAtbiAiJChpbnRlcmZhY2VzZGlyKSIgfHwgbGlzdD07IFwKKwlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IHNlZCAtZSAnc3xeLiovfHwnYDsgXAorCWRpcj0nJChERVNURElSKSQoaW50ZXJmYWNlc2RpciknOyAkKGFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIpCisKK0lEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJbWtpZCAtZklEICQkdW5pcXVlCit0YWdzOiBUQUdTCisKK1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJc2V0IHg7IFwKKwloZXJlPWBwd2RgOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXNoaWZ0OyBcCisJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKwkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKKwkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCisJICBlbHNlIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICQkdW5pcXVlOyBcCisJICBmaTsgXAorCWZpCitjdGFnczogQ1RBR1MKK0NUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKKwkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKKwkgICAgICQkdW5pcXVlCisKK0dUQUdTOgorCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCisJICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCisJICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCisKK2Rpc3RjbGVhbi10YWdzOgorCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgXAorCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKKwkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCisJICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAorCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKKwkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKKwkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKKwkJCSAgIHNvcnQgLXVgIDs7IFwKKwllc2FjOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorY2hlY2stYW06IGFsbC1hbQorY2hlY2s6IGNoZWNrLWFtCithbGwtYW06IE1ha2VmaWxlICQoUFJPR1JBTVMpICQoREFUQSkKK2luc3RhbGxkaXJzOgorCWZvciBkaXIgaW4gIiQoREVTVERJUikkKGJpbmRpcikiICIkKERFU1RESVIpJChpbnRlcmZhY2VzZGlyKSI7IGRvIFwKKwkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKE1LRElSX1ApICIkJGRpciI7IFwKKwlkb25lCitpbnN0YWxsOiBpbnN0YWxsLWFtCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KK3VuaW5zdGFsbDogdW5pbnN0YWxsLWFtCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCitpbnN0YWxsLXN0cmlwOgorCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgICAgICBpbnN0YWxsOyBcCisJZWxzZSBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKKwlmaQorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1iaW5QUk9HUkFNUyBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKKwlkaXN0Y2xlYW4tdGFncworCitkdmk6IGR2aS1hbQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtYW0KKworaHRtbC1hbToKKworaW5mbzogaW5mby1hbQorCitpbmZvLWFtOgorCitpbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtaW50ZXJmYWNlc0RBVEEKKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCisKK2luc3RhbGwtZHZpLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06IGluc3RhbGwtYmluUFJPR1JBTVMKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtYmluUFJPR1JBTVMgdW5pbnN0YWxsLWludGVyZmFjZXNEQVRBCisKKy5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKKworLlBIT05ZOiBDVEFHUyBHVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWJpblBST0dSQU1TIFwKKwljbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY3RhZ3MgZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIFwKKwlkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBcCisJZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIFwKKwlpbnN0YWxsLWJpblBST0dSQU1TIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgXAorCWluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIFwKKwlpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBcCisJaW5zdGFsbC1pbnRlcmZhY2VzREFUQSBpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBcCisJaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIFwKKwlpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBcCisJbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWNvbXBpbGUgXAorCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKKwl0YWdzIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gdW5pbnN0YWxsLWJpblBST0dSQU1TIFwKKwl1bmluc3RhbGwtaW50ZXJmYWNlc0RBVEEKKworCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktZGlzY292ZXItc3RhbmRhbG9uZS9hdmFoaS1kaXNjb3Zlci51aSBiL2F2YWhpLTAuNi4zMS9hdmFoaS1kaXNjb3Zlci1zdGFuZGFsb25lL2F2YWhpLWRpc2NvdmVyLnVpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0YjcyZjkKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktZGlzY292ZXItc3RhbmRhbG9uZS9hdmFoaS1kaXNjb3Zlci51aQpAQCAtMCwwICsxLDg0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhLS0qLSBtb2RlOiB4bWwgLSotLT4KKzxpbnRlcmZhY2U+CisgIDxvYmplY3QgY2xhc3M9Ikd0a1dpbmRvdyIgaWQ9Im1haW5fd2luZG93Ij4KKyAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgPHByb3BlcnR5IG5hbWU9InRpdGxlIiB0cmFuc2xhdGFibGU9InllcyI+QXZhaGkgRGlzY292ZXJ5PC9wcm9wZXJ0eT4KKyAgICA8cHJvcGVydHkgbmFtZT0idHlwZSI+R1RLX1dJTkRPV19UT1BMRVZFTDwvcHJvcGVydHk+CisgICAgPHByb3BlcnR5IG5hbWU9IndpbmRvd19wb3NpdGlvbiI+R1RLX1dJTl9QT1NfTk9ORTwvcHJvcGVydHk+CisgICAgPHByb3BlcnR5IG5hbWU9Im1vZGFsIj5GYWxzZTwvcHJvcGVydHk+CisgICAgPHByb3BlcnR5IG5hbWU9ImRlZmF1bHRfd2lkdGgiPjUwMDwvcHJvcGVydHk+CisgICAgPHByb3BlcnR5IG5hbWU9ImRlZmF1bHRfaGVpZ2h0Ij40MDA8L3Byb3BlcnR5PgorICAgIDxwcm9wZXJ0eSBuYW1lPSJyZXNpemFibGUiPlRydWU8L3Byb3BlcnR5PgorICAgIDxwcm9wZXJ0eSBuYW1lPSJkZXN0cm95X3dpdGhfcGFyZW50Ij5GYWxzZTwvcHJvcGVydHk+CisgICAgPHByb3BlcnR5IG5hbWU9ImRlY29yYXRlZCI+VHJ1ZTwvcHJvcGVydHk+CisgICAgPHByb3BlcnR5IG5hbWU9InNraXBfdGFza2Jhcl9oaW50Ij5GYWxzZTwvcHJvcGVydHk+CisgICAgPHByb3BlcnR5IG5hbWU9InNraXBfcGFnZXJfaGludCI+RmFsc2U8L3Byb3BlcnR5PgorICAgIDxwcm9wZXJ0eSBuYW1lPSJ0eXBlX2hpbnQiPkdES19XSU5ET1dfVFlQRV9ISU5UX05PUk1BTDwvcHJvcGVydHk+CisgICAgPHByb3BlcnR5IG5hbWU9ImdyYXZpdHkiPkdES19HUkFWSVRZX05PUlRIX1dFU1Q8L3Byb3BlcnR5PgorICAgIDxwcm9wZXJ0eSBuYW1lPSJmb2N1c19vbl9tYXAiPlRydWU8L3Byb3BlcnR5PgorICAgIDxzaWduYWwgYWZ0ZXI9IkZhbHNlIiBoYW5kbGVyPSJndGtfbWFpbl9xdWl0IiBuYW1lPSJkZXN0cm95Ii8+CisgICAgPGNoaWxkPgorICAgICAgPG9iamVjdCBjbGFzcz0iR3RrVkJveCIgaWQ9InZib3gxIj4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJvcmRlcl93aWR0aCI+MTI8L3Byb3BlcnR5PgorICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJob21vZ2VuZW91cyI+RmFsc2U8L3Byb3BlcnR5PgorICAgICAgICA8cHJvcGVydHkgbmFtZT0ic3BhY2luZyI+MTI8L3Byb3BlcnR5PgorICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgPG9iamVjdCBjbGFzcz0iR3RrU2Nyb2xsZWRXaW5kb3ciIGlkPSJzY3JvbGxlZHdpbmRvdzEiPgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImNhbl9mb2N1cyI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iaHNjcm9sbGJhcl9wb2xpY3kiPkdUS19QT0xJQ1lfQVVUT01BVElDPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2c2Nyb2xsYmFyX3BvbGljeSI+R1RLX1BPTElDWV9BVVRPTUFUSUM8L3Byb3BlcnR5PgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InNoYWRvd190eXBlIj5HVEtfU0hBRE9XX0lOPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ3aW5kb3dfcGxhY2VtZW50Ij5HVEtfQ09STkVSX1RPUF9MRUZUPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgPG9iamVjdCBjbGFzcz0iR3RrVHJlZVZpZXciIGlkPSJ0cmVlX3ZpZXciPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iY2FuX2ZvY3VzIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGVhZGVyc192aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icnVsZXNfaGludCI+RmFsc2U8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyZW9yZGVyYWJsZSI+RmFsc2U8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJlbmFibGVfc2VhcmNoIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iZml4ZWRfaGVpZ2h0X21vZGUiPkZhbHNlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iaG92ZXJfc2VsZWN0aW9uIj5GYWxzZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImhvdmVyX2V4cGFuZCI+RmFsc2U8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxzaWduYWwgaGFuZGxlcj0ib25fdHJlZV92aWV3X2N1cnNvcl9jaGFuZ2VkIiBsYXN0X21vZGlmaWNhdGlvbl90aW1lPSJTYXQsIDMwIEp1bCAyMDA1IDIxOjM5OjEzIEdNVCIgbmFtZT0iY3Vyc29yX2NoYW5nZWQiLz4KKyAgICAgICAgICAgICAgPC9vYmplY3Q+CisgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgIDwvb2JqZWN0PgorICAgICAgICAgIDxwYWNraW5nPgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InBhZGRpbmciPjA8L3Byb3BlcnR5PgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImV4cGFuZCI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iZmlsbCI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICA8L2NoaWxkPgorICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgPG9iamVjdCBjbGFzcz0iR3RrTGFiZWwiIGlkPSJpbmZvX2xhYmVsIj4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjYW5fZm9jdXMiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+Jmx0O2kmZ3Q7Tm8gc2VydmljZSBjdXJyZW50bHkgc2VsZWN0ZWQuJmx0Oy9pJmd0OzwvcHJvcGVydHk+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idXNlX3VuZGVybGluZSI+RmFsc2U8L3Byb3BlcnR5PgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV9tYXJrdXAiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Imp1c3RpZnkiPkdUS19KVVNUSUZZX0xFRlQ8L3Byb3BlcnR5PgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9IndyYXAiPkZhbHNlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzZWxlY3RhYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ4YWxpZ24iPjA8L3Byb3BlcnR5PgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InlhbGlnbiI+MC41PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ4cGFkIj4wPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ5cGFkIj4wPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJlbGxpcHNpemUiPlBBTkdPX0VMTElQU0laRV9OT05FPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ3aWR0aF9jaGFycyI+LTE8L3Byb3BlcnR5PgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InNpbmdsZV9saW5lX21vZGUiPkZhbHNlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJhbmdsZSI+MDwvcHJvcGVydHk+CisgICAgICAgICAgPC9vYmplY3Q+CisgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icGFkZGluZyI+MDwvcHJvcGVydHk+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iZXhwYW5kIj5GYWxzZTwvcHJvcGVydHk+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iZmlsbCI+RmFsc2U8L3Byb3BlcnR5PgorICAgICAgICAgIDwvcGFja2luZz4KKyAgICAgICAgPC9jaGlsZD4KKyAgICAgIDwvb2JqZWN0PgorICAgIDwvY2hpbGQ+CisgIDwvb2JqZWN0PgorPC9pbnRlcmZhY2U+CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktZGlzY292ZXItc3RhbmRhbG9uZS9tYWluLmMgYi9hdmFoaS0wLjYuMzEvYXZhaGktZGlzY292ZXItc3RhbmRhbG9uZS9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYwMDBhNAotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1kaXNjb3Zlci1zdGFuZGFsb25lL21haW4uYwpAQCAtMCwwICsxLDM2OCBAQAorLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0L2lmLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKKyNpbmNsdWRlIDxhdmFoaS1jb3JlL2NvcmUuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb3JlL2xvb2t1cC5oPgorCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL3N0cmxzdC5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9kb21haW4uaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vZXJyb3IuaD4KKworI2luY2x1ZGUgPGF2YWhpLWdsaWIvZ2xpYi13YXRjaC5oPgorI2luY2x1ZGUgPGF2YWhpLWdsaWIvZ2xpYi1tYWxsb2MuaD4KKworc3RydWN0IFNlcnZpY2VUeXBlOworCitzdHJ1Y3QgU2VydmljZSB7CisgICAgc3RydWN0IFNlcnZpY2VUeXBlICpzZXJ2aWNlX3R5cGU7CisgICAgZ2NoYXIgKnNlcnZpY2VfbmFtZTsKKyAgICBnY2hhciAqZG9tYWluX25hbWU7CisKKyAgICBBdmFoaUlmSW5kZXggaW50ZXJmYWNlOworICAgIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2w7CisKKyAgICBHdGtUcmVlUm93UmVmZXJlbmNlICp0cmVlX3JlZjsKK307CisKK3N0cnVjdCBTZXJ2aWNlVHlwZSB7CisgICAgZ2NoYXIgKnNlcnZpY2VfdHlwZTsKKyAgICBBdmFoaVNTZXJ2aWNlQnJvd3NlciAqYnJvd3NlcjsKKworICAgIEdMaXN0ICpzZXJ2aWNlczsKKyAgICBHdGtUcmVlUm93UmVmZXJlbmNlICp0cmVlX3JlZjsKK307CisKK3N0YXRpYyBHdGtXaWRnZXQgKm1haW5fd2luZG93ID0gTlVMTDsKK3N0YXRpYyBHdGtUcmVlVmlldyAqdHJlZV92aWV3ID0gTlVMTDsKK3N0YXRpYyBHdGtUcmVlU3RvcmUgKnRyZWVfc3RvcmUgPSBOVUxMOworc3RhdGljIEd0a0xhYmVsICppbmZvX2xhYmVsID0gTlVMTDsKK3N0YXRpYyBBdmFoaVNlcnZlciAqc2VydmVyID0gTlVMTDsKK3N0YXRpYyBBdmFoaVNTZXJ2aWNlVHlwZUJyb3dzZXIgKnNlcnZpY2VfdHlwZV9icm93c2VyID0gTlVMTDsKK3N0YXRpYyBHSGFzaFRhYmxlICpzZXJ2aWNlX3R5cGVfaGFzaF90YWJsZSA9IE5VTEw7CitzdGF0aWMgQXZhaGlTU2VydmljZVJlc29sdmVyICpzZXJ2aWNlX3Jlc29sdmVyID0gTlVMTDsKK3N0YXRpYyBzdHJ1Y3QgU2VydmljZSAqY3VycmVudF9zZXJ2aWNlID0gTlVMTDsKKworc3RhdGljIHN0cnVjdCBTZXJ2aWNlICpnZXRfc2VydmljZShjb25zdCBnY2hhciAqc2VydmljZV90eXBlLCBjb25zdCBnY2hhciAqc2VydmljZV9uYW1lLCBjb25zdCBnY2hhcipkb21haW5fbmFtZSwgQXZhaGlJZkluZGV4IGludGVyZmFjZSwgQXZhaGlQcm90b2NvbCBwcm90b2NvbCkgeworICAgIHN0cnVjdCBTZXJ2aWNlVHlwZSAqc3Q7CisgICAgR0xpc3QgKmw7CisKKyAgICBpZiAoIShzdCA9IGdfaGFzaF90YWJsZV9sb29rdXAoc2VydmljZV90eXBlX2hhc2hfdGFibGUsIHNlcnZpY2VfdHlwZSkpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGZvciAobCA9IHN0LT5zZXJ2aWNlczsgbDsgbCA9IGwtPm5leHQpIHsKKyAgICAgICAgc3RydWN0IFNlcnZpY2UgKnMgPSBsLT5kYXRhOworCisgICAgICAgIGlmIChzLT5pbnRlcmZhY2UgPT0gaW50ZXJmYWNlICYmCisgICAgICAgICAgICBzLT5wcm90b2NvbCA9PSBwcm90b2NvbCAmJgorICAgICAgICAgICAgYXZhaGlfZG9tYWluX2VxdWFsKHMtPnNlcnZpY2VfbmFtZSwgc2VydmljZV9uYW1lKSAmJgorICAgICAgICAgICAgYXZhaGlfZG9tYWluX2VxdWFsKHMtPmRvbWFpbl9uYW1lLCBkb21haW5fbmFtZSkpCisgICAgICAgICAgICByZXR1cm4gczsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgZnJlZV9zZXJ2aWNlKHN0cnVjdCBTZXJ2aWNlICpzKSB7CisgICAgR3RrVHJlZUl0ZXIgaXRlcjsKKyAgICBHdGtUcmVlUGF0aCAqcGF0aDsKKworICAgIGlmIChjdXJyZW50X3NlcnZpY2UgPT0gcykgeworICAgICAgICBjdXJyZW50X3NlcnZpY2UgPSBOVUxMOworCisgICAgICAgIGlmIChzZXJ2aWNlX3Jlc29sdmVyKSB7CisgICAgICAgICAgICBhdmFoaV9zX3NlcnZpY2VfcmVzb2x2ZXJfZnJlZShzZXJ2aWNlX3Jlc29sdmVyKTsKKyAgICAgICAgICAgIHNlcnZpY2VfcmVzb2x2ZXIgPSBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgZ3RrX2xhYmVsX3NldF90ZXh0KGluZm9fbGFiZWwsICI8aT5TZXJ2aWNlIHJlbW92ZWQ8L2k+Iik7CisgICAgfQorCisgICAgcy0+c2VydmljZV90eXBlLT5zZXJ2aWNlcyA9IGdfbGlzdF9yZW1vdmUocy0+c2VydmljZV90eXBlLT5zZXJ2aWNlcywgcyk7CisKKyAgICBpZiAoKHBhdGggPSBndGtfdHJlZV9yb3dfcmVmZXJlbmNlX2dldF9wYXRoKHMtPnRyZWVfcmVmKSkpIHsKKyAgICAgICAgZ3RrX3RyZWVfbW9kZWxfZ2V0X2l0ZXIoR1RLX1RSRUVfTU9ERUwodHJlZV9zdG9yZSksICZpdGVyLCBwYXRoKTsKKyAgICAgICAgZ3RrX3RyZWVfcGF0aF9mcmVlKHBhdGgpOworICAgIH0KKworICAgIGd0a190cmVlX3N0b3JlX3JlbW92ZSh0cmVlX3N0b3JlLCAmaXRlcik7CisKKyAgICBndGtfdHJlZV9yb3dfcmVmZXJlbmNlX2ZyZWUocy0+dHJlZV9yZWYpOworCisgICAgZ19mcmVlKHMtPnNlcnZpY2VfbmFtZSk7CisgICAgZ19mcmVlKHMtPmRvbWFpbl9uYW1lKTsKKyAgICBnX2ZyZWUocyk7Cit9CisKK3N0YXRpYyB2b2lkIHNlcnZpY2VfYnJvd3Nlcl9jYWxsYmFjaygKKyAgICBBVkFISV9HQ0NfVU5VU0VEIEF2YWhpU1NlcnZpY2VCcm93c2VyICpiLAorICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsCisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICBBdmFoaUJyb3dzZXJFdmVudCBldmVudCwKKyAgICBjb25zdCBjaGFyICpzZXJ2aWNlX25hbWUsCisgICAgY29uc3QgY2hhciAqc2VydmljZV90eXBlLAorICAgIGNvbnN0IGNoYXIgKmRvbWFpbl9uYW1lLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgQXZhaGlMb29rdXBSZXN1bHRGbGFncyBmbGFncywKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHZvaWQqIHVzZXJkYXRhKSB7CisKKyAgICBpZiAoZXZlbnQgPT0gQVZBSElfQlJPV1NFUl9ORVcpIHsKKyAgICAgICAgc3RydWN0IFNlcnZpY2UgKnM7CisgICAgICAgIEd0a1RyZWVJdGVyIGl0ZXIsIHBpdGVyOworICAgICAgICBHdGtUcmVlUGF0aCAqcGF0aCwgKnBwYXRoOworICAgICAgICBnY2hhciBpZmFjZVsyNTZdOworCWNoYXIgbmFtZVtJRl9OQU1FU0laRV07CisKKyAgICAgICAgcyA9IGdfbmV3KHN0cnVjdCBTZXJ2aWNlLCAxKTsKKyAgICAgICAgcy0+c2VydmljZV9uYW1lID0gZ19zdHJkdXAoc2VydmljZV9uYW1lKTsKKyAgICAgICAgcy0+ZG9tYWluX25hbWUgPSBnX3N0cmR1cChkb21haW5fbmFtZSk7CisgICAgICAgIHMtPmludGVyZmFjZSA9IGludGVyZmFjZTsKKyAgICAgICAgcy0+cHJvdG9jb2wgPSBwcm90b2NvbDsKKyAgICAgICAgcy0+c2VydmljZV90eXBlID0gZ19oYXNoX3RhYmxlX2xvb2t1cChzZXJ2aWNlX3R5cGVfaGFzaF90YWJsZSwgc2VydmljZV90eXBlKTsKKyAgICAgICAgZ19hc3NlcnQocy0+c2VydmljZV90eXBlKTsKKworICAgICAgICBzLT5zZXJ2aWNlX3R5cGUtPnNlcnZpY2VzID0gZ19saXN0X3ByZXBlbmQocy0+c2VydmljZV90eXBlLT5zZXJ2aWNlcywgcyk7CisKKyAgICAgICAgcHBhdGggPSBndGtfdHJlZV9yb3dfcmVmZXJlbmNlX2dldF9wYXRoKHMtPnNlcnZpY2VfdHlwZS0+dHJlZV9yZWYpOworICAgICAgICBndGtfdHJlZV9tb2RlbF9nZXRfaXRlcihHVEtfVFJFRV9NT0RFTCh0cmVlX3N0b3JlKSwgJnBpdGVyLCBwcGF0aCk7CisKKyAgICAgICAgc25wcmludGYoaWZhY2UsIHNpemVvZihpZmFjZSksICIlcyAlcyIsIGlmX2luZGV4dG9uYW1lKGludGVyZmFjZSwgbmFtZSksIGF2YWhpX3Byb3RvX3RvX3N0cmluZyhwcm90b2NvbCkpOworCisgICAgICAgIGd0a190cmVlX3N0b3JlX2FwcGVuZCh0cmVlX3N0b3JlLCAmaXRlciwgJnBpdGVyKTsKKyAgICAgICAgZ3RrX3RyZWVfc3RvcmVfc2V0KHRyZWVfc3RvcmUsICZpdGVyLCAwLCBzLT5zZXJ2aWNlX25hbWUsIDEsIGlmYWNlLCAyLCBzLCAtMSk7CisKKyAgICAgICAgcGF0aCA9IGd0a190cmVlX21vZGVsX2dldF9wYXRoKEdUS19UUkVFX01PREVMKHRyZWVfc3RvcmUpLCAmaXRlcik7CisgICAgICAgIHMtPnRyZWVfcmVmID0gZ3RrX3RyZWVfcm93X3JlZmVyZW5jZV9uZXcoR1RLX1RSRUVfTU9ERUwodHJlZV9zdG9yZSksIHBhdGgpOworICAgICAgICBndGtfdHJlZV9wYXRoX2ZyZWUocGF0aCk7CisKKyAgICAgICAgZ3RrX3RyZWVfdmlld19leHBhbmRfcm93KHRyZWVfdmlldywgcHBhdGgsIEZBTFNFKTsKKyAgICAgICAgZ3RrX3RyZWVfcGF0aF9mcmVlKHBwYXRoKTsKKworCisgICAgfSBlbHNlIGlmIChldmVudCA9PSBBVkFISV9CUk9XU0VSX1JFTU9WRSkgeworICAgICAgICBzdHJ1Y3QgU2VydmljZSogczsKKworICAgICAgICBpZiAoKHMgPSBnZXRfc2VydmljZShzZXJ2aWNlX3R5cGUsIHNlcnZpY2VfbmFtZSwgZG9tYWluX25hbWUsIGludGVyZmFjZSwgcHJvdG9jb2wpKSkKKyAgICAgICAgICAgIGZyZWVfc2VydmljZShzKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHNlcnZpY2VfdHlwZV9icm93c2VyX2NhbGxiYWNrKAorICAgIEFWQUhJX0dDQ19VTlVTRUQgQXZhaGlTU2VydmljZVR5cGVCcm93c2VyICpiLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgQXZhaGlJZkluZGV4IGludGVyZmFjZSwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsCisgICAgQXZhaGlCcm93c2VyRXZlbnQgZXZlbnQsCisgICAgY29uc3QgY2hhciAqc2VydmljZV90eXBlLAorICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIEF2YWhpTG9va3VwUmVzdWx0RmxhZ3MgZmxhZ3MsCisgICAgQVZBSElfR0NDX1VOVVNFRCB2b2lkICogdXNlcmRhdGEpIHsKKworICAgIHN0cnVjdCBTZXJ2aWNlVHlwZSAqc3Q7CisgICAgR3RrVHJlZVBhdGggKnBhdGg7CisgICAgR3RrVHJlZUl0ZXIgaXRlcjsKKworICAgIGlmIChldmVudCAhPSBBVkFISV9CUk9XU0VSX05FVykKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGdfaGFzaF90YWJsZV9sb29rdXAoc2VydmljZV90eXBlX2hhc2hfdGFibGUsIHNlcnZpY2VfdHlwZSkpCisgICAgICAgIHJldHVybjsKKworICAgIHN0ID0gZ19uZXcoc3RydWN0IFNlcnZpY2VUeXBlLCAxKTsKKyAgICBzdC0+c2VydmljZV90eXBlID0gZ19zdHJkdXAoc2VydmljZV90eXBlKTsKKyAgICBzdC0+c2VydmljZXMgPSBOVUxMOworCisgICAgZ3RrX3RyZWVfc3RvcmVfYXBwZW5kKHRyZWVfc3RvcmUsICZpdGVyLCBOVUxMKTsKKyAgICBndGtfdHJlZV9zdG9yZV9zZXQodHJlZV9zdG9yZSwgJml0ZXIsIDAsIHN0LT5zZXJ2aWNlX3R5cGUsIDEsICIiLCAyLCBOVUxMLCAtMSk7CisKKyAgICBwYXRoID0gZ3RrX3RyZWVfbW9kZWxfZ2V0X3BhdGgoR1RLX1RSRUVfTU9ERUwodHJlZV9zdG9yZSksICZpdGVyKTsKKyAgICBzdC0+dHJlZV9yZWYgPSBndGtfdHJlZV9yb3dfcmVmZXJlbmNlX25ldyhHVEtfVFJFRV9NT0RFTCh0cmVlX3N0b3JlKSwgcGF0aCk7CisgICAgZ3RrX3RyZWVfcGF0aF9mcmVlKHBhdGgpOworCisgICAgZ19oYXNoX3RhYmxlX2luc2VydChzZXJ2aWNlX3R5cGVfaGFzaF90YWJsZSwgc3QtPnNlcnZpY2VfdHlwZSwgc3QpOworCisgICAgc3QtPmJyb3dzZXIgPSBhdmFoaV9zX3NlcnZpY2VfYnJvd3Nlcl9uZXcoc2VydmVyLCBBVkFISV9JRl9VTlNQRUMsIEFWQUhJX1BST1RPX1VOU1BFQywgc3QtPnNlcnZpY2VfdHlwZSwgZG9tYWluLCAwLCBzZXJ2aWNlX2Jyb3dzZXJfY2FsbGJhY2ssIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfbGFiZWwoc3RydWN0IFNlcnZpY2UgKnMsIGNvbnN0IGdjaGFyICpob3N0bmFtZSwgY29uc3QgQXZhaGlBZGRyZXNzICphLCBndWludDE2IHBvcnQsIEF2YWhpU3RyaW5nTGlzdCAqdHh0KSB7CisgICAgZ2NoYXIgdFs1MTJdLCBhZGRyZXNzWzY0XSwgKnR4dF9zOworICAgIGNoYXIgbmFtZVtJRl9OQU1FU0laRV07CisKKyAgICBpZiAoYSAmJiBob3N0bmFtZSkgeworICAgICAgICBjaGFyIG5hW0FWQUhJX0FERFJFU1NfU1RSX01BWF07CisgICAgICAgIGF2YWhpX2FkZHJlc3Nfc25wcmludChuYSwgc2l6ZW9mKG5hKSwgYSk7CisgICAgICAgIHNucHJpbnRmKGFkZHJlc3MsIHNpemVvZihhZGRyZXNzKSwgIiVzLyVzOiV1IiwgaG9zdG5hbWUsIG5hLCBwb3J0KTsKKworICAgICAgICBpZiAodHh0KQorICAgICAgICAgICAgdHh0X3MgPSBhdmFoaV9zdHJpbmdfbGlzdF90b19zdHJpbmcodHh0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdHh0X3MgPSBnX3N0cmR1cCgiPGk+ZW1wdHk8L2k+Iik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc25wcmludGYoYWRkcmVzcywgc2l6ZW9mKGFkZHJlc3MpLCAiPGk+bi9hPC9pPiIpOworICAgICAgICB0eHRfcyA9IGdfc3RyZHVwKCI8aT5uL2E8L2k+Iik7CisgICAgfQorCisgICAgc25wcmludGYodCwgc2l6ZW9mKHQpLAorICAgICAgICAgICAgICI8Yj5TZXJ2aWNlIFR5cGU6PC9iPiAlc1xuIgorICAgICAgICAgICAgICI8Yj5TZXJ2aWNlIE5hbWU6PC9iPiAlc1xuIgorICAgICAgICAgICAgICI8Yj5Eb21haW4gTmFtZTo8L2I+ICVzXG4iCisgICAgICAgICAgICAgIjxiPkludGVyZmFjZTo8L2I+ICVzICVzXG4iCisgICAgICAgICAgICAgIjxiPkFkZHJlc3M6PC9iPiAlc1xuIgorICAgICAgICAgICAgICI8Yj5UWFQgRGF0YTo8L2I+ICVzIiwKKyAgICAgICAgICAgICBzLT5zZXJ2aWNlX3R5cGUtPnNlcnZpY2VfdHlwZSwKKyAgICAgICAgICAgICBzLT5zZXJ2aWNlX25hbWUsCisgICAgICAgICAgICAgcy0+ZG9tYWluX25hbWUsCisgICAgICAgICAgICAgaWZfaW5kZXh0b25hbWUocy0+aW50ZXJmYWNlLG5hbWUpLCBhdmFoaV9wcm90b190b19zdHJpbmcocy0+cHJvdG9jb2wpLAorICAgICAgICAgICAgIGFkZHJlc3MsCisgICAgICAgICAgICAgdHh0X3MpOworCisgICAgZ3RrX2xhYmVsX3NldF9tYXJrdXAoaW5mb19sYWJlbCwgdCk7CisKKyAgICBnX2ZyZWUodHh0X3MpOworfQorCitzdGF0aWMgc3RydWN0IFNlcnZpY2UgKmdldF9zZXJ2aWNlX29uX2N1cnNvcih2b2lkKSB7CisgICAgR3RrVHJlZVBhdGggKnBhdGg7CisgICAgc3RydWN0IFNlcnZpY2UgKnM7CisgICAgR3RrVHJlZUl0ZXIgaXRlcjsKKworICAgIGd0a190cmVlX3ZpZXdfZ2V0X2N1cnNvcih0cmVlX3ZpZXcsICZwYXRoLCBOVUxMKTsKKworICAgIGlmICghcGF0aCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBndGtfdHJlZV9tb2RlbF9nZXRfaXRlcihHVEtfVFJFRV9NT0RFTCh0cmVlX3N0b3JlKSwgJml0ZXIsIHBhdGgpOworICAgIGd0a190cmVlX21vZGVsX2dldChHVEtfVFJFRV9NT0RFTCh0cmVlX3N0b3JlKSwgJml0ZXIsIDIsICZzLCAtMSk7CisgICAgZ3RrX3RyZWVfcGF0aF9mcmVlKHBhdGgpOworCisgICAgcmV0dXJuIHM7Cit9CisKK3N0YXRpYyB2b2lkIHNlcnZpY2VfcmVzb2x2ZXJfY2FsbGJhY2soCisgICAgQXZhaGlTU2VydmljZVJlc29sdmVyICpyLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgQXZhaGlJZkluZGV4IGludGVyZmFjZSwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsCisgICAgQXZhaGlSZXNvbHZlckV2ZW50IGV2ZW50LAorICAgIEFWQUhJX0dDQ19VTlVTRUQgY29uc3QgY2hhciAqbmFtZSwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIGNvbnN0IGNoYXIgKnR5cGUsCisgICAgQVZBSElfR0NDX1VOVVNFRCBjb25zdCBjaGFyICpkb21haW4sCisgICAgY29uc3QgY2hhciAqaG9zdF9uYW1lLAorICAgIGNvbnN0IEF2YWhpQWRkcmVzcyAqYSwKKyAgICB1aW50MTZfdCBwb3J0LAorICAgIEF2YWhpU3RyaW5nTGlzdCAqdHh0LAorICAgIEFWQUhJX0dDQ19VTlVTRUQgQXZhaGlMb29rdXBSZXN1bHRGbGFncyBmbGFncywKKyAgICB2b2lkKiB1c2VyZGF0YSkgeworCisgICAgc3RydWN0IFNlcnZpY2UgKnM7CisgICAgZ19hc3NlcnQocik7CisKKyAgICBpZiAoIShzID0gZ2V0X3NlcnZpY2Vfb25fY3Vyc29yKCkpIHx8IHVzZXJkYXRhICE9IHMpIHsKKyAgICAgICAgZ19hc3NlcnQociA9PSBzZXJ2aWNlX3Jlc29sdmVyKTsKKyAgICAgICAgYXZhaGlfc19zZXJ2aWNlX3Jlc29sdmVyX2ZyZWUoc2VydmljZV9yZXNvbHZlcik7CisgICAgICAgIHNlcnZpY2VfcmVzb2x2ZXIgPSBOVUxMOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGV2ZW50ID09IEFWQUhJX1JFU09MVkVSX0ZBSUxVUkUpIHsKKyAgICAgICAgY2hhciB0WzI1Nl07CisgICAgICAgIHNucHJpbnRmKHQsIHNpemVvZih0KSwgIjxpPkZhaWxlZCB0byByZXNvbHZlOiAlcy48L2k+IiwgYXZhaGlfc3RyZXJyb3IoYXZhaGlfc2VydmVyX2Vycm5vKHNlcnZlcikpKTsKKyAgICAgICAgZ3RrX2xhYmVsX3NldF9tYXJrdXAoaW5mb19sYWJlbCwgdCk7CisgICAgfSBlbHNlIGlmIChldmVudCA9PSBBVkFISV9SRVNPTFZFUl9GT1VORCkKKyAgICAgICAgdXBkYXRlX2xhYmVsKHMsIGhvc3RfbmFtZSwgYSwgcG9ydCwgdHh0KTsKK30KKworc3RhdGljIHZvaWQgdHJlZV92aWV3X29uX2N1cnNvcl9jaGFuZ2VkKEFWQUhJX0dDQ19VTlVTRUQgR3RrVHJlZVZpZXcgKnR2LCBBVkFISV9HQ0NfVU5VU0VEIGdwb2ludGVyIHVzZXJkYXRhKSB7CisgICAgc3RydWN0IFNlcnZpY2UgKnM7CisKKyAgICBpZiAoIShzID0gZ2V0X3NlcnZpY2Vfb25fY3Vyc29yKCkpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoc2VydmljZV9yZXNvbHZlcikKKyAgICAgICAgYXZhaGlfc19zZXJ2aWNlX3Jlc29sdmVyX2ZyZWUoc2VydmljZV9yZXNvbHZlcik7CisKKyAgICB1cGRhdGVfbGFiZWwocywgTlVMTCwgTlVMTCwgMCwgTlVMTCk7CisKKyAgICBzZXJ2aWNlX3Jlc29sdmVyID0gYXZhaGlfc19zZXJ2aWNlX3Jlc29sdmVyX25ldyhzZXJ2ZXIsIHMtPmludGVyZmFjZSwgcy0+cHJvdG9jb2wsIHMtPnNlcnZpY2VfbmFtZSwgcy0+c2VydmljZV90eXBlLT5zZXJ2aWNlX3R5cGUsIHMtPmRvbWFpbl9uYW1lLCBBVkFISV9QUk9UT19VTlNQRUMsIDAsIHNlcnZpY2VfcmVzb2x2ZXJfY2FsbGJhY2ssIHMpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gbWFpbl93aW5kb3dfb25fZGVsZXRlX2V2ZW50KEFWQUhJX0dDQ19VTlVTRUQgR3RrV2lkZ2V0ICp3aWRnZXQsIEFWQUhJX0dDQ19VTlVTRUQgR2RrRXZlbnQgKmV2ZW50LCBBVkFISV9HQ0NfVU5VU0VEIGdwb2ludGVyIHVzZXJfZGF0YSkgeworICAgIGd0a19tYWluX3F1aXQoKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKKyAgICBHdGtCdWlsZGVyICp1aTsKKyAgICBBdmFoaVNlcnZlckNvbmZpZyBjb25maWc7CisgICAgR3RrVHJlZVZpZXdDb2x1bW4gKmM7CisgICAgZ2ludCBlcnJvcjsKKyAgICBBdmFoaUdMaWJQb2xsICpwb2xsX2FwaTsKKworICAgIGd0a19pbml0KCZhcmdjLCAmYXJndik7CisKKyAgICBhdmFoaV9zZXRfYWxsb2NhdG9yKGF2YWhpX2dsaWJfYWxsb2NhdG9yKCkpOworCisgICAgcG9sbF9hcGkgPSBhdmFoaV9nbGliX3BvbGxfbmV3KE5VTEwsIEdfUFJJT1JJVFlfREVGQVVMVCk7CisKKyAgICB1aSA9IGd0a19idWlsZGVyX25ldygpOworICAgIGd0a19idWlsZGVyX2FkZF9mcm9tX2ZpbGUodWksIEFWQUhJX0lOVEVSRkFDRVNfRElSImF2YWhpLWRpc2NvdmVyLnVpIiwgTlVMTCk7CisgICAgbWFpbl93aW5kb3cgPSBHVEtfV0lER0VUKGd0a19idWlsZGVyX2dldF9vYmplY3QodWksICJtYWluX3dpbmRvdyIpKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1haW5fd2luZG93LCAiZGVsZXRlLWV2ZW50IiwgKEdDYWxsYmFjaykgbWFpbl93aW5kb3dfb25fZGVsZXRlX2V2ZW50LCBOVUxMKTsKKworICAgIHRyZWVfdmlldyA9IEdUS19UUkVFX1ZJRVcoZ3RrX2J1aWxkZXJfZ2V0X29iamVjdCh1aSwgInRyZWVfdmlldyIpKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KEdUS19XSURHRVQodHJlZV92aWV3KSwgImN1cnNvci1jaGFuZ2VkIiwgKEdDYWxsYmFjaykgdHJlZV92aWV3X29uX2N1cnNvcl9jaGFuZ2VkLCBOVUxMKTsKKworICAgIGluZm9fbGFiZWwgPSBHVEtfTEFCRUwoZ3RrX2J1aWxkZXJfZ2V0X29iamVjdCh1aSwgImluZm9fbGFiZWwiKSk7CisKKyAgICB0cmVlX3N0b3JlID0gZ3RrX3RyZWVfc3RvcmVfbmV3KDMsIEdfVFlQRV9TVFJJTkcsIEdfVFlQRV9TVFJJTkcsIEdfVFlQRV9QT0lOVEVSKTsKKyAgICBndGtfdHJlZV92aWV3X3NldF9tb2RlbCh0cmVlX3ZpZXcsIEdUS19UUkVFX01PREVMKHRyZWVfc3RvcmUpKTsKKyAgICBndGtfdHJlZV92aWV3X2luc2VydF9jb2x1bW5fd2l0aF9hdHRyaWJ1dGVzKHRyZWVfdmlldywgLTEsICJOYW1lIiwgZ3RrX2NlbGxfcmVuZGVyZXJfdGV4dF9uZXcoKSwgInRleHQiLCAwLCBOVUxMKTsKKyAgICBndGtfdHJlZV92aWV3X2luc2VydF9jb2x1bW5fd2l0aF9hdHRyaWJ1dGVzKHRyZWVfdmlldywgLTEsICJJbnRlcmZhY2UiLCBndGtfY2VsbF9yZW5kZXJlcl90ZXh0X25ldygpLCAidGV4dCIsIDEsIE5VTEwpOworCisgICAgZ3RrX3RyZWVfdmlld19jb2x1bW5fc2V0X3Jlc2l6YWJsZShjID0gZ3RrX3RyZWVfdmlld19nZXRfY29sdW1uKHRyZWVfdmlldywgMCksIFRSVUUpOworICAgIGd0a190cmVlX3ZpZXdfY29sdW1uX3NldF9zaXppbmcoYywgR1RLX1RSRUVfVklFV19DT0xVTU5fR1JPV19PTkxZKTsKKyAgICBndGtfdHJlZV92aWV3X2NvbHVtbl9zZXRfZXhwYW5kKGMsIFRSVUUpOworCisgICAgc2VydmljZV90eXBlX2hhc2hfdGFibGUgPSBnX2hhc2hfdGFibGVfbmV3KChHSGFzaEZ1bmMpIGF2YWhpX2RvbWFpbl9oYXNoLCAoR0VxdWFsRnVuYykgYXZhaGlfZG9tYWluX2VxdWFsKTsKKworICAgIGF2YWhpX3NlcnZlcl9jb25maWdfaW5pdCgmY29uZmlnKTsKKyAgICBjb25maWcucHVibGlzaF9oaW5mbyA9IGNvbmZpZy5wdWJsaXNoX2FkZHJlc3NlcyA9IGNvbmZpZy5wdWJsaXNoX2RvbWFpbiA9IGNvbmZpZy5wdWJsaXNoX3dvcmtzdGF0aW9uID0gRkFMU0U7CisgICAgc2VydmVyID0gYXZhaGlfc2VydmVyX25ldyhhdmFoaV9nbGliX3BvbGxfZ2V0KHBvbGxfYXBpKSwgJmNvbmZpZywgTlVMTCwgTlVMTCwgJmVycm9yKTsKKyAgICBhdmFoaV9zZXJ2ZXJfY29uZmlnX2ZyZWUoJmNvbmZpZyk7CisKKyAgICBnX2Fzc2VydChzZXJ2ZXIpOworCisgICAgc2VydmljZV90eXBlX2Jyb3dzZXIgPSBhdmFoaV9zX3NlcnZpY2VfdHlwZV9icm93c2VyX25ldyhzZXJ2ZXIsIEFWQUhJX0lGX1VOU1BFQywgQVZBSElfUFJPVE9fVU5TUEVDLCBhcmdjID49IDIgPyBhcmd2WzFdIDogTlVMTCwgMCwgc2VydmljZV90eXBlX2Jyb3dzZXJfY2FsbGJhY2ssIE5VTEwpOworCisgICAgZ3RrX21haW4oKTsKKworICAgIGF2YWhpX3NlcnZlcl9mcmVlKHNlcnZlcik7CisgICAgYXZhaGlfZ2xpYl9wb2xsX2ZyZWUocG9sbF9hcGkpOworCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktZG5zY29uZmQvTWFrZWZpbGUuYW0gYi9hdmFoaS0wLjYuMzEvYXZhaGktZG5zY29uZmQvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU3NDQyOQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1kbnNjb25mZC9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDUzIEBACisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorIworIyBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworIyBVU0EuCisKK0VYVFJBX0RJU1Q9YXZhaGktZG5zY29uZmQuYWN0aW9uIGF2YWhpLWRuc2NvbmZkLnNlcnZpY2UuaW4KKworaWYgSEFWRV9YTUwKK2lmIEhBVkVfTElCREFFTU9OCisKK3BrZ3N5c2NvbmZkaXI9JChzeXNjb25mZGlyKS9hdmFoaQorCitBTV9DRkxBR1M9IFwKKwktSSQodG9wX3NyY2RpcikgXAorCS1EQVZBSElfUlVOVElNRV9ESVI9XCIkKGF2YWhpX3J1bnRpbWVfZGlyKS9cIiBcCisJLURBVkFISV9TT0NLRVQ9XCIkKGF2YWhpX3NvY2tldClcIiBcCisJLURBVkFISV9ETlNDT05GX1NDUklQVD1cIiQocGtnc3lzY29uZmRpcikvYXZhaGktZG5zY29uZmQuYWN0aW9uXCIKKworIyBUaGlzIGNvb2wgZGVidWcgdHJhcCB3b3JrcyBvbiBpMzg2L2djYyBvbmx5CitBTV9DRkxBR1MrPSctRERFQlVHX1RSQVA9X19hc21fXygiaW50ICQkMyIpJworCitzYmluX1BST0dSQU1TID0gYXZhaGktZG5zY29uZmQKKworYXZhaGlfZG5zY29uZmRfU09VUkNFUyA9IG1haW4uYworYXZhaGlfZG5zY29uZmRfQ0ZMQUdTID0gJChBTV9DRkxBR1MpICQoTElCREFFTU9OX0NGTEFHUykKK2F2YWhpX2Ruc2NvbmZkX0xEQUREID0gJChBTV9MREFERCkgLi4vYXZhaGktY29tbW9uL2xpYmF2YWhpLWNvbW1vbi5sYSAkKExJQkRBRU1PTl9MSUJTKQorCitwa2dzeXNjb25mX1NDUklQVFM9YXZhaGktZG5zY29uZmQuYWN0aW9uCisKKyUuc2VydmljZTogJS5zZXJ2aWNlLmluCisJJChBTV9WX0dFTilzZWQgLWUgJ3MsQHNiaW5kaXJcQCwkKHNiaW5kaXIpLGcnICQ8ID4gJEAKKworaWYgSEFWRV9TWVNURU1ECitzeXN0ZW1kc3lzdGVtdW5pdF9EQVRBID0gXAorCWF2YWhpLWRuc2NvbmZkLnNlcnZpY2UKK2VuZGlmCisKK0NMRUFORklMRVMgPSAkKHN5c3RlbWRzeXN0ZW11bml0X0RBVEEpCisKK2VuZGlmCitlbmRpZgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWRuc2NvbmZkL01ha2VmaWxlLmluIGIvYXZhaGktMC42LjMxL2F2YWhpLWRuc2NvbmZkL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1NmFiZTcKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktZG5zY29uZmQvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw4MTUgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEuMyBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKyMKKyMgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyMgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyMgVVNBLgorCisKKworVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorQEhBVkVfTElCREFFTU9OX1RSVUVAQEhBVkVfWE1MX1RSVUVAc2Jpbl9QUk9HUkFNUyA9ICBcCitASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUAJYXZhaGktZG5zY29uZmQkKEVYRUVYVCkKK3N1YmRpciA9IGF2YWhpLWRuc2NvbmZkCitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9hY3hfcHRocmVhZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vZ2NjX3N0YWNrX3Byb3RlY3QubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2djY192aXNpYmlsaXR5Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9pbnRsdG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vaW50cm9zcGVjdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbGlidG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHRvcHRpb25zLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9sdHN1Z2FyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9sdHZlcnNpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2x0fm9ic29sZXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9ubHMubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vcHl0aG9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2FjaW5jbHVkZS5tNCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9kb3h5Z2VuLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CithbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQoc2JpbmRpcikiICIkKERFU1RESVIpJChwa2dzeXNjb25mZGlyKSIgXAorCSIkKERFU1RESVIpJChzeXN0ZW1kc3lzdGVtdW5pdGRpcikiCitQUk9HUkFNUyA9ICQoc2Jpbl9QUk9HUkFNUykKK2FtX19hdmFoaV9kbnNjb25mZF9TT1VSQ0VTX0RJU1QgPSBtYWluLmMKK0BIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQGFtX2F2YWhpX2Ruc2NvbmZkX09CSkVDVFMgPSBhdmFoaV9kbnNjb25mZC1tYWluLiQoT0JKRVhUKQorYXZhaGlfZG5zY29uZmRfT0JKRUNUUyA9ICQoYW1fYXZhaGlfZG5zY29uZmRfT0JKRUNUUykKK2FtX19ERVBFTkRFTkNJRVNfMSA9CitASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUBhdmFoaV9kbnNjb25mZF9ERVBFTkRFTkNJRVMgPSAuLi9hdmFoaS1jb21tb24vbGliYXZhaGktY29tbW9uLmxhIFwKK0BIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQAkkKGFtX19ERVBFTkRFTkNJRVNfMSkKK0FNX1ZfbHQgPSAkKGFtX192X2x0X0BBTV9WQCkKK2FtX192X2x0XyA9ICQoYW1fX3ZfbHRfQEFNX0RFRkFVTFRfVkApCithbV9fdl9sdF8wID0gLS1zaWxlbnQKK2F2YWhpX2Ruc2NvbmZkX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAorCSQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSBcCisJJChhdmFoaV9kbnNjb25mZF9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gXAorCSRACithbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKK2FtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCisgICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKKyAgICAqKSBmPSQkcDs7IFwKKyAgZXNhYzsKK2FtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKK2FtX19pbnN0YWxsX21heCA9IDQwCithbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAorICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCithbV9fbm9iYXNlX3N0cmlwID0gXAorICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKK2FtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKKyAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKKyAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMvIC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKKyAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAorICAgIGlmICgrK25bJCQyXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIFwKKyAgICAgIHsgcHJpbnQgJCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKKyAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCithbV9fYmFzZV9saXN0ID0gXAorICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnIHwgXAorICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCithbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyID0geyBcCisgIHRlc3QgLXogIiQkZmlsZXMiIFwKKyAgICB8fCB7IHRlc3QgISAtZCAiJCRkaXIiICYmIHRlc3QgISAtZiAiJCRkaXIiICYmIHRlc3QgISAtciAiJCRkaXIiOyB9IFwKKyAgICB8fCB7IGVjaG8gIiAoIGNkICckJGRpcicgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCisgICAgICAgICAkKGFtX19jZCkgIiQkZGlyIiAmJiBybSAtZiAkJGZpbGVzOyB9OyBcCisgIH0KK1NDUklQVFMgPSAkKHBrZ3N5c2NvbmZfU0NSSVBUUykKK0RFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpCitkZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCithbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcworYW1fX212ID0gbXYgLWYKK0NPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAorCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0xUQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpIFwKKwkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKKwkkKEFNX0NGTEFHUykgJChDRkxBR1MpCitBTV9WX0NDID0gJChhbV9fdl9DQ19AQU1fVkApCithbV9fdl9DQ18gPSAkKGFtX192X0NDX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICIgJEA7CitBTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCithbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfYXRfMCA9IEAKK0NDTEQgPSAkKENDKQorTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAorCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEX0BBTV9WQCkKK2FtX192X0NDTERfID0gJChhbV9fdl9DQ0xEX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfQ0NMRF8wID0gQGVjaG8gIiAgQ0NMRCAgIiAkQDsKK0FNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQorYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAiICRAOworU09VUkNFUyA9ICQoYXZhaGlfZG5zY29uZmRfU09VUkNFUykKK0RJU1RfU09VUkNFUyA9ICQoYW1fX2F2YWhpX2Ruc2NvbmZkX1NPVVJDRVNfRElTVCkKK0RBVEEgPSAkKHN5c3RlbWRzeXN0ZW11bml0X0RBVEEpCitFVEFHUyA9IGV0YWdzCitDVEFHUyA9IGN0YWdzCitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQUxMX0xJTkdVQVMgPSBAQUxMX0xJTkdVQVNACitBTVRBUiA9IEBBTVRBUkAKK0FNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAorQVIgPSBAQVJACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVZBSElfQVVUT0lQRF9HUk9VUCA9IEBBVkFISV9BVVRPSVBEX0dST1VQQAorQVZBSElfQVVUT0lQRF9VU0VSID0gQEFWQUhJX0FVVE9JUERfVVNFUkAKK0FWQUhJX0dST1VQID0gQEFWQUhJX0dST1VQQAorQVZBSElfUFJJVl9BQ0NFU1NfR1JPVVAgPSBAQVZBSElfUFJJVl9BQ0NFU1NfR1JPVVBACitBVkFISV9VU0VSID0gQEFWQUhJX1VTRVJACitBV0sgPSBAQVdLQAorQ0FUQUxPR1MgPSBAQ0FUQUxPR1NACitDQVRPQkpFWFQgPSBAQ0FUT0JKRVhUQAorQ0MgPSBAQ0NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREFUQURJUk5BTUUgPSBAREFUQURJUk5BTUVACitEQlVTX0NGTEFHUyA9IEBEQlVTX0NGTEFHU0AKK0RCVVNfTElCUyA9IEBEQlVTX0xJQlNACitEQlVTX1NZU1RFTV9CVVNfREVGQVVMVF9BRERSRVNTID0gQERCVVNfU1lTVEVNX0JVU19ERUZBVUxUX0FERFJFU1NACitEQlVTX1NZU19ESVIgPSBAREJVU19TWVNfRElSQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RMTFRPT0wgPSBARExMVE9PTEAKK0RPWFlHRU5fUEFQRVJfU0laRSA9IEBET1hZR0VOX1BBUEVSX1NJWkVACitEU1lNVVRJTCA9IEBEU1lNVVRJTEAKK0RVTVBCSU4gPSBARFVNUEJJTkAKK0RYX0NPTkZJRyA9IEBEWF9DT05GSUdACitEWF9ET0NESVIgPSBARFhfRE9DRElSQAorRFhfRE9UID0gQERYX0RPVEAKK0RYX0RPWFlHRU4gPSBARFhfRE9YWUdFTkAKK0RYX0RWSVBTID0gQERYX0RWSVBTQAorRFhfRUdSRVAgPSBARFhfRUdSRVBACitEWF9FTlYgPSBARFhfRU5WQAorRFhfRkxBR19jaGkgPSBARFhfRkxBR19jaGlACitEWF9GTEFHX2NobSA9IEBEWF9GTEFHX2NobUAKK0RYX0ZMQUdfZG9jID0gQERYX0ZMQUdfZG9jQAorRFhfRkxBR19kb3QgPSBARFhfRkxBR19kb3RACitEWF9GTEFHX2h0bWwgPSBARFhfRkxBR19odG1sQAorRFhfRkxBR19tYW4gPSBARFhfRkxBR19tYW5ACitEWF9GTEFHX3BkZiA9IEBEWF9GTEFHX3BkZkAKK0RYX0ZMQUdfcHMgPSBARFhfRkxBR19wc0AKK0RYX0ZMQUdfcnRmID0gQERYX0ZMQUdfcnRmQAorRFhfRkxBR194bWwgPSBARFhfRkxBR194bWxACitEWF9ISEMgPSBARFhfSEhDQAorRFhfTEFURVggPSBARFhfTEFURVhACitEWF9NQUtFSU5ERVggPSBARFhfTUFLRUlOREVYQAorRFhfUERGTEFURVggPSBARFhfUERGTEFURVhACitEWF9QRVJMID0gQERYX1BFUkxACitEWF9QUk9KRUNUID0gQERYX1BST0pFQ1RACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VYRUVYVCA9IEBFWEVFWFRACitGR1JFUCA9IEBGR1JFUEAKK0dBQ1VUSUwgPSBAR0FDVVRJTEAKK0dFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACitHTElCMjBfQ0ZMQUdTID0gQEdMSUIyMF9DRkxBR1NACitHTElCMjBfTElCUyA9IEBHTElCMjBfTElCU0AKK0dNT0ZJTEVTID0gQEdNT0ZJTEVTQAorR01TR0ZNVCA9IEBHTVNHRk1UQAorR09CSkVDVF9DRkxBR1MgPSBAR09CSkVDVF9DRkxBR1NACitHT0JKRUNUX0xJQlMgPSBAR09CSkVDVF9MSUJTQAorR1JFUCA9IEBHUkVQQAorR1RLMjBfQ0ZMQUdTID0gQEdUSzIwX0NGTEFHU0AKK0dUSzIwX0xJQlMgPSBAR1RLMjBfTElCU0AKK0dUSzMwX0NGTEFHUyA9IEBHVEszMF9DRkxBR1NACitHVEszMF9MSUJTID0gQEdUSzMwX0xJQlNACitIT1dMX0NPTVBBVF9WRVJTSU9OID0gQEhPV0xfQ09NUEFUX1ZFUlNJT05ACitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lOU1RPQkpFWFQgPSBASU5TVE9CSkVYVEAKK0lOVExMSUJTID0gQElOVExMSUJTQAorSU5UTFRPT0xfRVhUUkFDVCA9IEBJTlRMVE9PTF9FWFRSQUNUQAorSU5UTFRPT0xfTUVSR0UgPSBASU5UTFRPT0xfTUVSR0VACitJTlRMVE9PTF9QRVJMID0gQElOVExUT09MX1BFUkxACitJTlRMVE9PTF9VUERBVEUgPSBASU5UTFRPT0xfVVBEQVRFQAorSU5UUk9TUEVDVElPTl9DRkxBR1MgPSBASU5UUk9TUEVDVElPTl9DRkxBR1NACitJTlRST1NQRUNUSU9OX0NPTVBJTEVSID0gQElOVFJPU1BFQ1RJT05fQ09NUElMRVJACitJTlRST1NQRUNUSU9OX0dFTkVSQVRFID0gQElOVFJPU1BFQ1RJT05fR0VORVJBVEVACitJTlRST1NQRUNUSU9OX0dJUkRJUiA9IEBJTlRST1NQRUNUSU9OX0dJUkRJUkAKK0lOVFJPU1BFQ1RJT05fTElCUyA9IEBJTlRST1NQRUNUSU9OX0xJQlNACitJTlRST1NQRUNUSU9OX01BS0VGSUxFID0gQElOVFJPU1BFQ1RJT05fTUFLRUZJTEVACitJTlRST1NQRUNUSU9OX1NDQU5ORVIgPSBASU5UUk9TUEVDVElPTl9TQ0FOTkVSQAorSU5UUk9TUEVDVElPTl9UWVBFTElCRElSID0gQElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUkAKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCQVZBSElfQ0xJRU5UX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DTElFTlRfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfQ09NTU9OX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DT01NT05fVkVSU0lPTl9JTkZPQAorTElCQVZBSElfQ09NUEFUX0hPV0xfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NPTVBBVF9IT1dMX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPTVBBVF9MSUJETlNfU0RfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NPTVBBVF9MSUJETlNfU0RfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfQ09SRV9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ09SRV9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9HTElCX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9HTElCX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0dPQkpFQ1RfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0dPQkpFQ1RfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfUVQzX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9RVDNfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfUVQ0X1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9RVDRfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfVUlfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX1VJX1ZFUlNJT05fSU5GT0AKK0xJQkRBRU1PTl9DRkxBR1MgPSBATElCREFFTU9OX0NGTEFHU0AKK0xJQkRBRU1PTl9MSUJTID0gQExJQkRBRU1PTl9MSUJTQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAorTUNTID0gQE1DU0AKK01EQVNTRU1CTEVSID0gQE1EQVNTRU1CTEVSQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTUtJTlNUQUxMRElSUyA9IEBNS0lOU1RBTExESVJTQAorTU9DX1FUMyA9IEBNT0NfUVQzQAorTU9DX1FUNCA9IEBNT0NfUVQ0QAorTU9OT0RPQ0VSID0gQE1PTk9ET0NFUkAKK01PTk9ET0NfQ0ZMQUdTID0gQE1PTk9ET0NfQ0ZMQUdTQAorTU9OT0RPQ19ESVIgPSBATU9OT0RPQ19ESVJACitNT05PRE9DX0xJQlMgPSBATU9OT0RPQ19MSUJTQAorTVNHRk1UID0gQE1TR0ZNVEAKK01TR0ZNVF9PUFRTID0gQE1TR0ZNVF9PUFRTQAorTVNHTUVSR0UgPSBATVNHTUVSR0VACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitPQkpEVU1QID0gQE9CSkRVTVBACitPQkpFWFQgPSBAT0JKRVhUQAorT1RPT0wgPSBAT1RPT0xACitPVE9PTDY0ID0gQE9UT09MNjRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK1BLR19DT05GSUdfTElCRElSID0gQFBLR19DT05GSUdfTElCRElSQAorUEtHX0NPTkZJR19QQVRIID0gQFBLR19DT05GSUdfUEFUSEAKK1BPRklMRVMgPSBAUE9GSUxFU0AKK1BPU1VCID0gQFBPU1VCQAorUE9fSU5fREFUQURJUl9GQUxTRSA9IEBQT19JTl9EQVRBRElSX0ZBTFNFQAorUE9fSU5fREFUQURJUl9UUlVFID0gQFBPX0lOX0RBVEFESVJfVFJVRUAKK1BUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKK1BUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAorUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKK1BZVEhPTiA9IEBQWVRIT05ACitQWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAorUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKK1BZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKK1BZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAorUVQzX0NGTEFHUyA9IEBRVDNfQ0ZMQUdTQAorUVQzX0xJQlMgPSBAUVQzX0xJQlNACitRVDRfQ0ZMQUdTID0gQFFUNF9DRkxBR1NACitRVDRfTElCUyA9IEBRVDRfTElCU0AKK1JBTkxJQiA9IEBSQU5MSUJACitTRUQgPSBAU0VEQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NUT1cgPSBAU1RPV0AKK1NUUklQID0gQFNUUklQQAorVVNFX05MUyA9IEBVU0VfTkxTQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorVklTSUJJTElUWV9ISURERU5fQ0ZMQUdTID0gQFZJU0lCSUxJVFlfSElEREVOX0NGTEFHU0AKK1hHRVRURVhUID0gQFhHRVRURVhUQAorWE1MX0NGTEFHUyA9IEBYTUxfQ0ZMQUdTQAorWE1MX0xJQlMgPSBAWE1MX0xJQlNACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9BUiA9IEBhY19jdF9BUkAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKK2FjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK2FjeF9wdGhyZWFkX2NvbmZpZyA9IEBhY3hfcHRocmVhZF9jb25maWdACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2F2YWhpX3J1bnRpbWVfZGlyID0gQGF2YWhpX3J1bnRpbWVfZGlyQAorYXZhaGlfc29ja2V0ID0gQGF2YWhpX3NvY2tldEAKK2F2YWhpbG9jYWxlZGlyID0gQGF2YWhpbG9jYWxlZGlyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitoYXZlX3BrZ19jb25maWcgPSBAaGF2ZV9wa2dfY29uZmlnQAoraGF2ZV94bWx0b21hbiA9IEBoYXZlX3htbHRvbWFuQAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2ludGVyZmFjZXNkaXIgPSBAaW50ZXJmYWNlc2RpckAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAorcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3B5ZXhlY2RpciA9IEBweWV4ZWNkaXJACitweXRob25kaXIgPSBAcHl0aG9uZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzcmNkaXIgPSBAc3JjZGlyQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAorc3lzdGVtZHN5c3RlbXVuaXRkaXIgPSBAc3lzdGVtZHN5c3RlbXVuaXRkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK0VYVFJBX0RJU1QgPSBhdmFoaS1kbnNjb25mZC5hY3Rpb24gYXZhaGktZG5zY29uZmQuc2VydmljZS5pbgorQEhBVkVfTElCREFFTU9OX1RSVUVAQEhBVkVfWE1MX1RSVUVAcGtnc3lzY29uZmRpciA9ICQoc3lzY29uZmRpcikvYXZhaGkKKworIyBUaGlzIGNvb2wgZGVidWcgdHJhcCB3b3JrcyBvbiBpMzg2L2djYyBvbmx5CitASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUBBTV9DRkxBR1MgPSAtSSQodG9wX3NyY2RpcikgXAorQEhBVkVfTElCREFFTU9OX1RSVUVAQEhBVkVfWE1MX1RSVUVACS1EQVZBSElfUlVOVElNRV9ESVI9XCIkKGF2YWhpX3J1bnRpbWVfZGlyKS9cIiBcCitASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUAJLURBVkFISV9TT0NLRVQ9XCIkKGF2YWhpX3NvY2tldClcIiBcCitASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUAJLURBVkFISV9ETlNDT05GX1NDUklQVD1cIiQocGtnc3lzY29uZmRpcikvYXZhaGktZG5zY29uZmQuYWN0aW9uXCIgXAorQEhBVkVfTElCREFFTU9OX1RSVUVAQEhBVkVfWE1MX1RSVUVACSctRERFQlVHX1RSQVA9X19hc21fXygiaW50IFwKK0BIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQAkkJDMiKScKK0BIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQGF2YWhpX2Ruc2NvbmZkX1NPVVJDRVMgPSBtYWluLmMKK0BIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQGF2YWhpX2Ruc2NvbmZkX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAkKExJQkRBRU1PTl9DRkxBR1MpCitASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUBhdmFoaV9kbnNjb25mZF9MREFERCA9ICQoQU1fTERBREQpIC4uL2F2YWhpLWNvbW1vbi9saWJhdmFoaS1jb21tb24ubGEgJChMSUJEQUVNT05fTElCUykKK0BIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQHBrZ3N5c2NvbmZfU0NSSVBUUyA9IGF2YWhpLWRuc2NvbmZkLmFjdGlvbgorQEhBVkVfTElCREFFTU9OX1RSVUVAQEhBVkVfU1lTVEVNRF9UUlVFQEBIQVZFX1hNTF9UUlVFQHN5c3RlbWRzeXN0ZW11bml0X0RBVEEgPSBcCitASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9TWVNURU1EX1RSVUVAQEhBVkVfWE1MX1RSVUVACWF2YWhpLWRuc2NvbmZkLnNlcnZpY2UKKworQEhBVkVfTElCREFFTU9OX1RSVUVAQEhBVkVfWE1MX1RSVUVAQ0xFQU5GSUxFUyA9ICQoc3lzdGVtZHN5c3RlbXVuaXRfREFUQSkKK2FsbDogYWxsLWFtCisKKy5TVUZGSVhFUzoKKy5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCisJICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduIGF2YWhpLWRuc2NvbmZkL01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiBhdmFoaS1kbnNjb25mZC9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CitpbnN0YWxsLXNiaW5QUk9HUkFNUzogJChzYmluX1BST0dSQU1TKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQoc2JpbmRpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKHNiaW5kaXIpIgorCUBsaXN0PSckKHNiaW5fUFJPR1JBTVMpJzsgdGVzdCAtbiAiJChzYmluZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAorCXNlZCAncy8kKEVYRUVYVCkkJC8vJyB8IFwKKwl3aGlsZSByZWFkIHAgcDE7IGRvIGlmIHRlc3QgLWYgJCRwIHx8IHRlc3QgLWYgJCRwMTsgXAorCSAgdGhlbiBlY2hvICIkJHAiOyBlY2hvICIkJHAiOyBlbHNlIDo7IGZpOyBcCisJZG9uZSB8IFwKKwlzZWQgLWUgJ3A7cywuKi8sLDtuO2gnIC1lICdzfC4qfC58JyBcCisJICAgIC1lICdwO3g7cywuKi8sLDtzLyQoRVhFRVhUKSQkLy87JCh0cmFuc2Zvcm0pO3MvJCQvJChFWEVFWFQpLycgfCBcCisJc2VkICdOO047TjtzLFxuLCAsZycgfCBcCisJJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIjsgZGlyc1siLiJdID0gMSB9IFwKKwkgIHsgZD0kJDM7IGlmIChkaXJzW2RdICE9IDEpIHsgcHJpbnQgImQiLCBkOyBkaXJzW2RdID0gMSB9IFwKKwkgICAgaWYgKCQkMiA9PSAkJDQpIGZpbGVzW2RdID0gZmlsZXNbZF0gIiAiICQkMTsgXAorCSAgICBlbHNlIHsgcHJpbnQgImYiLCAkJDMgIi8iICQkNCwgJCQxOyB9IH0gXAorCSAgRU5EIHsgZm9yIChkIGluIGZpbGVzKSBwcmludCAiZiIsIGQsIGZpbGVzW2RdIH0nIHwgXAorCXdoaWxlIHJlYWQgdHlwZSBkaXIgZmlsZXM7IGRvIFwKKwkgICAgaWYgdGVzdCAiJCRkaXIiID0gLjsgdGhlbiBkaXI9OyBlbHNlIGRpcj0vJCRkaXI7IGZpOyBcCisJICAgIHRlc3QgLXogIiQkZmlsZXMiIHx8IHsgXAorCSAgICBlY2hvICIgJChJTlNUQUxMX1BST0dSQU1fRU5WKSAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMX1BST0dSQU0pICQkZmlsZXMgJyQoREVTVERJUikkKHNiaW5kaXIpJCRkaXInIjsgXAorCSAgICAkKElOU1RBTExfUFJPR1JBTV9FTlYpICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTExfUFJPR1JBTSkgJCRmaWxlcyAiJChERVNURElSKSQoc2JpbmRpcikkJGRpciIgfHwgZXhpdCAkJD87IFwKKwkgICAgfSBcCisJOyBkb25lCisKK3VuaW5zdGFsbC1zYmluUFJPR1JBTVM6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChzYmluX1BST0dSQU1TKSc7IHRlc3QgLW4gIiQoc2JpbmRpcikiIHx8IGxpc3Q9OyBcCisJZmlsZXM9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IFwKKwkgIHNlZCAtZSAnaDtzLF4uKi8sLDtzLyQoRVhFRVhUKSQkLy87JCh0cmFuc2Zvcm0pJyBcCisJICAgICAgLWUgJ3MvJCQvJChFWEVFWFQpLycgYDsgXAorCXRlc3QgLW4gIiQkbGlzdCIgfHwgZXhpdCAwOyBcCisJZWNobyAiICggY2QgJyQoREVTVERJUikkKHNiaW5kaXIpJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKKwljZCAiJChERVNURElSKSQoc2JpbmRpcikiICYmIHJtIC1mICQkZmlsZXMKKworY2xlYW4tc2JpblBST0dSQU1TOgorCUBsaXN0PSckKHNiaW5fUFJPR1JBTVMpJzsgdGVzdCAtbiAiJCRsaXN0IiB8fCBleGl0IDA7IFwKKwllY2hvICIgcm0gLWYiICQkbGlzdDsgXAorCXJtIC1mICQkbGlzdCB8fCBleGl0ICQkPzsgXAorCXRlc3QgLW4gIiQoRVhFRVhUKSIgfHwgZXhpdCAwOyBcCisJbGlzdD1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkICdzLyQoRVhFRVhUKSQkLy8nYDsgXAorCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCisJcm0gLWYgJCRsaXN0CithdmFoaS1kbnNjb25mZCQoRVhFRVhUKTogJChhdmFoaV9kbnNjb25mZF9PQkpFQ1RTKSAkKGF2YWhpX2Ruc2NvbmZkX0RFUEVOREVOQ0lFUykgJChFWFRSQV9hdmFoaV9kbnNjb25mZF9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBhdmFoaS1kbnNjb25mZCQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQoYXZhaGlfZG5zY29uZmRfTElOSykgJChhdmFoaV9kbnNjb25mZF9PQkpFQ1RTKSAkKGF2YWhpX2Ruc2NvbmZkX0xEQUREKSAkKExJQlMpCitpbnN0YWxsLXBrZ3N5c2NvbmZTQ1JJUFRTOiAkKHBrZ3N5c2NvbmZfU0NSSVBUUykKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwl0ZXN0IC16ICIkKHBrZ3N5c2NvbmZkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChwa2dzeXNjb25mZGlyKSIKKwlAbGlzdD0nJChwa2dzeXNjb25mX1NDUklQVFMpJzsgdGVzdCAtbiAiJChwa2dzeXNjb25mZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICBpZiB0ZXN0IC1mICIkJGQkJHAiOyB0aGVuIGVjaG8gIiQkZCQkcCI7IGVjaG8gIiQkcCI7IGVsc2UgOjsgZmk7IFwKKwlkb25lIHwgXAorCXNlZCAtZSAncDtzLC4qLywsO24nIFwKKwkgICAgLWUgJ2g7c3wuKnwufCcgXAorCSAgICAtZSAncDt4O3MsLiovLCw7JCh0cmFuc2Zvcm0pJyB8IHNlZCAnTjtOO047cyxcbiwgLGcnIHwgXAorCSQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiI7IGRpcnNbIi4iXSA9IDE7IH0gXAorCSAgeyBkPSQkMzsgaWYgKGRpcnNbZF0gIT0gMSkgeyBwcmludCAiZCIsIGQ7IGRpcnNbZF0gPSAxIH0gXAorCSAgICBpZiAoJCQyID09ICQkNCkgeyBmaWxlc1tkXSA9IGZpbGVzW2RdICIgIiAkJDE7IFwKKwkgICAgICBpZiAoKytuW2RdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgeyBcCisJCXByaW50ICJmIiwgZCwgZmlsZXNbZF07IG5bZF0gPSAwOyBmaWxlc1tkXSA9ICIiIH0gfSBcCisJICAgIGVsc2UgeyBwcmludCAiZiIsIGQgIi8iICQkNCwgJCQxIH0gfSBcCisJICBFTkQgeyBmb3IgKGQgaW4gZmlsZXMpIHByaW50ICJmIiwgZCwgZmlsZXNbZF0gfScgfCBcCisJd2hpbGUgcmVhZCB0eXBlIGRpciBmaWxlczsgZG8gXAorCSAgICAgaWYgdGVzdCAiJCRkaXIiID0gLjsgdGhlbiBkaXI9OyBlbHNlIGRpcj0vJCRkaXI7IGZpOyBcCisJICAgICB0ZXN0IC16ICIkJGZpbGVzIiB8fCB7IFwKKwkgICAgICAgZWNobyAiICQoSU5TVEFMTF9TQ1JJUFQpICQkZmlsZXMgJyQoREVTVERJUikkKHBrZ3N5c2NvbmZkaXIpJCRkaXInIjsgXAorCSAgICAgICAkKElOU1RBTExfU0NSSVBUKSAkJGZpbGVzICIkKERFU1RESVIpJChwa2dzeXNjb25mZGlyKSQkZGlyIiB8fCBleGl0ICQkPzsgXAorCSAgICAgfSBcCisJOyBkb25lCisKK3VuaW5zdGFsbC1wa2dzeXNjb25mU0NSSVBUUzoKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKHBrZ3N5c2NvbmZfU0NSSVBUUyknOyB0ZXN0IC1uICIkKHBrZ3N5c2NvbmZkaXIpIiB8fCBleGl0IDA7IFwKKwlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgXAorCSAgICAgICBzZWQgLWUgJ3MsLiovLCw7JCh0cmFuc2Zvcm0pJ2A7IFwKKwlkaXI9JyQoREVTVERJUikkKHBrZ3N5c2NvbmZkaXIpJzsgJChhbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyKQorCittb3N0bHljbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLiQoT0JKRVhUKQorCitkaXN0Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi50YWIuYworCitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYXZhaGlfZG5zY29uZmQtbWFpbi5Qb0BhbV9fcXVvdGVACisKKy5jLm86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jICQ8CisKKy5jLm9iajoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyBgJChDWUdQQVRIX1cpICckPCdgCisKKy5jLmxvOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAorCithdmFoaV9kbnNjb25mZC1tYWluLm86IG1haW4uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX2Ruc2NvbmZkX0NGTEFHUykgJChDRkxBR1MpIC1NVCBhdmFoaV9kbnNjb25mZC1tYWluLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2F2YWhpX2Ruc2NvbmZkLW1haW4uVHBvIC1jIC1vIGF2YWhpX2Ruc2NvbmZkLW1haW4ubyBgdGVzdCAtZiAnbWFpbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BtYWluLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2F2YWhpX2Ruc2NvbmZkLW1haW4uVHBvICQoREVQRElSKS9hdmFoaV9kbnNjb25mZC1tYWluLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nbWFpbi5jJyBvYmplY3Q9J2F2YWhpX2Ruc2NvbmZkLW1haW4ubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfZG5zY29uZmRfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYXZhaGlfZG5zY29uZmQtbWFpbi5vIGB0ZXN0IC1mICdtYWluLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYG1haW4uYworCithdmFoaV9kbnNjb25mZC1tYWluLm9iajogbWFpbi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfZG5zY29uZmRfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGF2YWhpX2Ruc2NvbmZkLW1haW4ub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9hdmFoaV9kbnNjb25mZC1tYWluLlRwbyAtYyAtbyBhdmFoaV9kbnNjb25mZC1tYWluLm9iaiBgaWYgdGVzdCAtZiAnbWFpbi5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ21haW4uYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvbWFpbi5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9hdmFoaV9kbnNjb25mZC1tYWluLlRwbyAkKERFUERJUikvYXZhaGlfZG5zY29uZmQtbWFpbi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J21haW4uYycgb2JqZWN0PSdhdmFoaV9kbnNjb25mZC1tYWluLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfZG5zY29uZmRfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYXZhaGlfZG5zY29uZmQtbWFpbi5vYmogYGlmIHRlc3QgLWYgJ21haW4uYyc7IHRoZW4gJChDWUdQQVRIX1cpICdtYWluLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL21haW4uYyc7IGZpYAorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworaW5zdGFsbC1zeXN0ZW1kc3lzdGVtdW5pdERBVEE6ICQoc3lzdGVtZHN5c3RlbXVuaXRfREFUQSkKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwl0ZXN0IC16ICIkKHN5c3RlbWRzeXN0ZW11bml0ZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQoc3lzdGVtZHN5c3RlbXVuaXRkaXIpIgorCUBsaXN0PSckKHN5c3RlbWRzeXN0ZW11bml0X0RBVEEpJzsgdGVzdCAtbiAiJChzeXN0ZW1kc3lzdGVtdW5pdGRpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAorCSAgZWNobyAiJCRkJCRwIjsgXAorCWRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAorCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKKwkgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAnJChERVNURElSKSQoc3lzdGVtZHN5c3RlbXVuaXRkaXIpJyI7IFwKKwkgICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICIkKERFU1RESVIpJChzeXN0ZW1kc3lzdGVtdW5pdGRpcikiIHx8IGV4aXQgJCQ/OyBcCisJZG9uZQorCit1bmluc3RhbGwtc3lzdGVtZHN5c3RlbXVuaXREQVRBOgorCUAkKE5PUk1BTF9VTklOU1RBTEwpCisJQGxpc3Q9JyQoc3lzdGVtZHN5c3RlbXVuaXRfREFUQSknOyB0ZXN0IC1uICIkKHN5c3RlbWRzeXN0ZW11bml0ZGlyKSIgfHwgbGlzdD07IFwKKwlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IHNlZCAtZSAnc3xeLiovfHwnYDsgXAorCWRpcj0nJChERVNURElSKSQoc3lzdGVtZHN5c3RlbXVuaXRkaXIpJzsgJChhbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyKQorCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCW1raWQgLWZJRCAkJHVuaXF1ZQordGFnczogVEFHUworCitUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXNldCB4OyBcCisJaGVyZT1gcHdkYDsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlzaGlmdDsgXAorCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisJICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCisJICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAorCSAgZWxzZSBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAkJHVuaXF1ZTsgXAorCSAgZmk7IFwKKwlmaQorY3RhZ3M6IENUQUdTCitDVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCisJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCisJICAgICAkJHVuaXF1ZQorCitHVEFHUzoKKwloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgorCitkaXN0Y2xlYW4tdGFnczoKKwktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1hbQorYWxsLWFtOiBNYWtlZmlsZSAkKFBST0dSQU1TKSAkKFNDUklQVFMpICQoREFUQSkKK2luc3RhbGxkaXJzOgorCWZvciBkaXIgaW4gIiQoREVTVERJUikkKHNiaW5kaXIpIiAiJChERVNURElSKSQocGtnc3lzY29uZmRpcikiICIkKERFU1RESVIpJChzeXN0ZW1kc3lzdGVtdW5pdGRpcikiOyBkbyBcCisJICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCisJZG9uZQoraW5zdGFsbDogaW5zdGFsbC1hbQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCit1bmluc3RhbGw6IHVuaW5zdGFsbC1hbQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQoraW5zdGFsbC1zdHJpcDoKKwlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICAgICAgaW5zdGFsbDsgXAorCWVsc2UgXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCisJZmkKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ0xFQU5GSUxFUykiIHx8IHJtIC1mICQoQ0xFQU5GSUxFUykKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tc2JpblBST0dSQU1TIFwKKwltb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi10YWdzCisKK2R2aTogZHZpLWFtCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1hbQorCitodG1sLWFtOgorCitpbmZvOiBpbmZvLWFtCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1wa2dzeXNjb25mU0NSSVBUUyBcCisJaW5zdGFsbC1zeXN0ZW1kc3lzdGVtdW5pdERBVEEKKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCisKK2luc3RhbGwtZHZpLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06IGluc3RhbGwtc2JpblBST0dSQU1TCisKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCisKK2luc3RhbGwtaHRtbC1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1pbmZvLWFtOgorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCisKK2luc3RhbGwtcGRmLWFtOgorCitpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCisKK2luc3RhbGwtcHMtYW06CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtYW0KKworcGRmLWFtOgorCitwczogcHMtYW0KKworcHMtYW06CisKK3VuaW5zdGFsbC1hbTogdW5pbnN0YWxsLXBrZ3N5c2NvbmZTQ1JJUFRTIHVuaW5zdGFsbC1zYmluUFJPR1JBTVMgXAorCXVuaW5zdGFsbC1zeXN0ZW1kc3lzdGVtdW5pdERBVEEKKworLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAorCisuUEhPTlk6IENUQUdTIEdUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCisJY2xlYW4tbGlidG9vbCBjbGVhbi1zYmluUFJPR1JBTVMgY3RhZ3MgZGlzdGNsZWFuIFwKKwlkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBcCisJZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gXAorCWluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIFwKKwlpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBcCisJaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gXAorCWluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIGluc3RhbGwtcGtnc3lzY29uZlNDUklQVFMgXAorCWluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBpbnN0YWxsLXNiaW5QUk9HUkFNUyBpbnN0YWxsLXN0cmlwIFwKKwlpbnN0YWxsLXN5c3RlbWRzeXN0ZW11bml0REFUQSBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIFwKKwlpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKKwltb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB1bmluc3RhbGwgXAorCXVuaW5zdGFsbC1hbSB1bmluc3RhbGwtcGtnc3lzY29uZlNDUklQVFMgXAorCXVuaW5zdGFsbC1zYmluUFJPR1JBTVMgdW5pbnN0YWxsLXN5c3RlbWRzeXN0ZW11bml0REFUQQorCisKK0BIQVZFX0xJQkRBRU1PTl9UUlVFQEBIQVZFX1hNTF9UUlVFQCUuc2VydmljZTogJS5zZXJ2aWNlLmluCitASEFWRV9MSUJEQUVNT05fVFJVRUBASEFWRV9YTUxfVFJVRUAJJChBTV9WX0dFTilzZWQgLWUgJ3MsQHNiaW5kaXJcQCwkKHNiaW5kaXIpLGcnICQ8ID4gJEAKKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWRuc2NvbmZkL2F2YWhpLWRuc2NvbmZkLmFjdGlvbiBiL2F2YWhpLTAuNi4zMS9hdmFoaS1kbnNjb25mZC9hdmFoaS1kbnNjb25mZC5hY3Rpb24KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjBhY2U1MQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1kbnNjb25mZC9hdmFoaS1kbnNjb25mZC5hY3Rpb24KQEAgLTAsMCArMSw4MCBAQAorIyEvYmluL3NoCisKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisjIAorIyBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworIyBVU0EuCisKK3NldCAtZQorCit0ZXN0ICJ4JEFWQUhJX0lOVEVSRkFDRSIgIT0gIngiCisKKyMgQ29tbWFuZCBsaW5lIGFyZ3VtZW50czoKKyMgICAkMSAiKyIgaWYgYSBuZXcgRE5TIHNlcnZlciB3YXMgZm91bmQsICItIiBpZiBvbmUgd2FzIHJlbW92ZWQKKyMgICAkMiBETlMgU2VydmVyIGFkZHJlc3MKKyMgICAkMyBpbnRlcmZhY2UgaW5kZXggd2hlcmUgdGhpcyBzZXJ2ZXIgd2FzIGZvdW5kIG9uCisjICAgJDQgcHJvdG9jb2wgbnVtYmVyIHdoZXJlIHRoaXMgc2VydmVyIHdhcyBmb3VuZCBvbgorCisjIEF2YWlsYWJsZSBlbnZpcm9ubWVudCB2YXJpYWJsZXM6CisjCisjICAgJEFWQUhJX0lOVEVSRkFDRSAgICAgICAgICAgICAgIFRoZSBpbnRlcmZhY2UgbmFtZSB3aGVyZSB0aGlzIEROUyBzZXJ2ZXIgd2FzIGZvdW5kIG9uCisjICAgJEFWQUhJX0lOVEVSRkFDRV9ETlNfU0VSVkVSUyAgIEEgd2hpdGVzcGFjZSBzZXBlcmF0ZWQgbGlzdCBvZiBETlMgc2VydmVycyBvbiAkQVZBSElfSU5URVJGQUNFCisjICAgJEFWQUhJX0ROU19TRVJWRVJTICAgICAgICAgICAgIFRoZSBjb21wbGV0ZSBsaXN0IG9mIGFsbCBETlMgc2VydmVycyBmb3VuZCBvbiBhbGwgaW50ZXJmYWNlcworCitpZiBbIC14IC9zYmluL25ldGNvbmZpZyBdOyB0aGVuCisgICAgIyBTVVNFIG1ldGhvZCBvbiAxMS4xKworICAgIGlmIFsgLW4gIiRBVkFISV9JTlRFUkZBQ0VfRE5TX1NFUlZFUlMiIF07IHRoZW4KKwkvc2Jpbi9uZXRjb25maWcgbW9kaWZ5IC1zIGF2YWhpIC1pICIkQVZBSElfSU5URVJGQUNFIiA8PC1FT0YKKwlJTlRFUkZBQ0U9JyRBVkFISV9JTlRFUkZBQ0UnCisJRE5TU0VSVkVSUz0nJEFWQUhJX0lOVEVSRkFDRV9ETlNfU0VSVkVSUycKKwlFT0YKKyAgICBlbHNlCisJL3NiaW4vbmV0Y29uZmlnIHJlbW92ZSAtcyBhdmFoaSAtaSAiJEFWQUhJX0lOVEVSRkFDRSIKKyAgICBmaQorZWxpZiBbIC14IC9zYmluL21vZGlmeV9yZXNvbHZjb25mIF0gOyB0aGVuCisgICAgIyBtZXRob2QgZm9yIFNVU0UgPD0gMTEuMAorICAgIGlmIFsgLW4gIiRBVkFISV9ETlNfU0VSVkVSUyIgXTsgdGhlbgorCS9zYmluL21vZGlmeV9yZXNvbHZjb25mIG1vZGlmeSAtcyBhdmFoaSAtdCAtIC1wIGF2YWhpLWRuc2NvbmZkIC1uICIkQVZBSElfRE5TX1NFUlZFUlMiIDw8LUVPRgorCWlmIHlvdSBkb24ndCBsaWtlIGF2YWhpIHRvIHVwZGF0ZSB5b3VyIE5hbWVzZXJ2ZXJzCisJZGlzYWJsZSB0aGUgYXZhaGktZG5zY29uZmQgaW5pdCBzY3JpcHQKKwlFT0YKKyAgICBlbHNlCisJL3NiaW4vbW9kaWZ5X3Jlc29sdmNvbmYgcmVzdG9yZSAtcyBhdmFoaQorICAgIGZpCitlbGlmIFsgLXggL3NiaW4vcmVzb2x2Y29uZiBdIDsgdGhlbgorCisgICAgIyBXZSBoYXZlIERlYmlhbidzIHJlc29sdmNvbmYgdG9vbAorCisgICAgaWYgWyAieCRBVkFISV9JTlRFUkZBQ0VfRE5TX1NFUlZFUlMiID0gIngiIF0gOyB0aGVuCisgICAgICAgIC9zYmluL3Jlc29sdmNvbmYgLWQgIiRBVkFISV9JTlRFUkZBQ0UuYXZhaGkiCisgICAgZWxzZQorICAgICAgICBmb3IgbiBpbiAkQVZBSElfSU5URVJGQUNFX0ROU19TRVJWRVJTIDsgZG8gCisgICAgICAgICAgICBlY2hvICJuYW1lc2VydmVyICRuIgorICAgICAgICBkb25lIHwgL3NiaW4vcmVzb2x2Y29uZiAtYSAiJEFWQUhJX0lOVEVSRkFDRS5hdmFoaSIKKyAgICBmaQorZWxzZQorCisgICAgIyBObyByZXNvbHZjb25mIHRvb2wgYXZhaWxhYmxlCisKKyAgICBpZiBbICJ4JEFWQUhJX0ROU19TRVJWRVJTIiA9ICJ4IiBdIDsgdGhlbgorICAgICAgICB0ZXN0IC1mIC9ldGMvcmVzb2x2LmNvbmYuYXZhaGkgJiYgbXYgL2V0Yy9yZXNvbHYuY29uZi5hdmFoaSAvZXRjL3Jlc29sdi5jb25mCisgICAgZWxzZQorICAgICAgICB0ZXN0IC1mIC9ldGMvcmVzb2x2LmNvbmYuYXZhaGkgfHwgbXYgL2V0Yy9yZXNvbHYuY29uZiAvZXRjL3Jlc29sdi5jb25mLmF2YWhpCisKKyAgICAgICAgZm9yIG4gaW4gJEFWQUhJX0ROU19TRVJWRVJTIDsgZG8gCisgICAgICAgICAgICBlY2hvICJuYW1lc2VydmVyICRuIgorICAgICAgICBkb25lID4gL2V0Yy9yZXNvbHYuY29uZgorICAgIGZpCitmaQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWRuc2NvbmZkL2F2YWhpLWRuc2NvbmZkLnNlcnZpY2UuaW4gYi9hdmFoaS0wLjYuMzEvYXZhaGktZG5zY29uZmQvYXZhaGktZG5zY29uZmQuc2VydmljZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWRiNzlmCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWRuc2NvbmZkL2F2YWhpLWRuc2NvbmZkLnNlcnZpY2UuaW4KQEAgLTAsMCArMSwyOSBAQAorIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKyMKKyMgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyMgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyMgVVNBLgorCitbVW5pdF0KK0Rlc2NyaXB0aW9uPUF2YWhpIEROUyBDb25maWd1cmF0aW9uIERhZW1vbgorUmVxdWlyZXM9YXZhaGktZGFlbW9uLnNvY2tldCBhdmFoaS1kYWVtb24uc2VydmljZQorQWZ0ZXI9YXZhaGktZGFlbW9uLnNvY2tldAorCitbU2VydmljZV0KK1R5cGU9c2ltcGxlCitFeGVjU3RhcnQ9QHNiaW5kaXJAL2F2YWhpLWRuc2NvbmZkIC1zCisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKK0Fsc289YXZhaGktZGFlbW9uLnNvY2tldApkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWRuc2NvbmZkL21haW4uYyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1kbnNjb25mZC9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE5ZmJlYgotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1kbnNjb25mZC9tYWluLmMKQEAgLTAsMCArMSw2NjggQEAKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy91bi5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorI2luY2x1ZGUgPGdldG9wdC5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGludHR5cGVzLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vbGxpc3QuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vbWFsbG9jLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2FkZHJlc3MuaD4KKworI2luY2x1ZGUgPGxpYmRhZW1vbi9kZm9yay5oPgorI2luY2x1ZGUgPGxpYmRhZW1vbi9kc2lnbmFsLmg+CisjaW5jbHVkZSA8bGliZGFlbW9uL2Rsb2cuaD4KKyNpbmNsdWRlIDxsaWJkYWVtb24vZHBpZC5oPgorI2luY2x1ZGUgPGxpYmRhZW1vbi9kZXhlYy5oPgorCisjZGVmaW5lIEJST1dTRV9ETlNfU0VSVkVSUyAiQlJPV1NFLUROUy1TRVJWRVJTXG4iCisKKyNkZWZpbmUgRU5WX0lOVEVSRkFDRV9ETlNfU0VSVkVSUyAgIkFWQUhJX0lOVEVSRkFDRV9ETlNfU0VSVkVSUyIKKyNkZWZpbmUgRU5WX0ROU19TRVJWRVJTICJBVkFISV9ETlNfU0VSVkVSUyIKKyNkZWZpbmUgRU5WX0lOVEVSRkFDRSAiQVZBSElfSU5URVJGQUNFIgorCitzdGF0aWMgZW51bSB7CisgICAgQUNLV0FJVCwKKyAgICBCUk9XU0lORworfSBzdGF0ZSA9IEFDS1dBSVQ7CisKK3N0YXRpYyBlbnVtIHsKKyAgICBEQUVNT05fUlVOLAorICAgIERBRU1PTl9LSUxMLAorICAgIERBRU1PTl9SRUZSRVNILAorICAgIERBRU1PTl9WRVJTSU9OLAorICAgIERBRU1PTl9IRUxQLAorICAgIERBRU1PTl9DSEVDSworfSBjb21tYW5kID0gREFFTU9OX1JVTjsKKworc3RhdGljIGludCBxdWl0ID0gMDsKK3N0YXRpYyBpbnQgZGFlbW9uaXplID0gMDsKK3N0YXRpYyBpbnQgdXNlX3N5c2xvZyA9IDA7CisKKyNpZiAhSEFWRV9ERUNMX0VOVklST04KK2V4dGVybiBjaGFyICoqZW52aXJvbjsKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBETlNTZXJ2ZXJJbmZvIEROU1NlcnZlckluZm87CisKK3N0cnVjdCBETlNTZXJ2ZXJJbmZvIHsKKyAgICBBdmFoaUlmSW5kZXggaW50ZXJmYWNlOworICAgIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2w7CisgICAgY2hhciAqYWRkcmVzczsKKyAgICBBVkFISV9MTElTVF9GSUVMRFMoRE5TU2VydmVySW5mbywgc2VydmVycyk7Cit9OworCitzdGF0aWMgQVZBSElfTExJU1RfSEVBRChETlNTZXJ2ZXJJbmZvLCBzZXJ2ZXJzKTsKKworc3RhdGljIHZvaWQgc2VydmVyX2luZm9fZnJlZShETlNTZXJ2ZXJJbmZvICppKSB7CisgICAgYXNzZXJ0KGkpOworCisgICAgYXZhaGlfZnJlZShpLT5hZGRyZXNzKTsKKworICAgIEFWQUhJX0xMSVNUX1JFTU9WRShETlNTZXJ2ZXJJbmZvLCBzZXJ2ZXJzLCBzZXJ2ZXJzLCBpKTsKKyAgICBhdmFoaV9mcmVlKGkpOworfQorCitzdGF0aWMgRE5TU2VydmVySW5mbyogZ2V0X3NlcnZlcl9pbmZvKEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsIGNvbnN0IGNoYXIgKmFkZHJlc3MpIHsKKyAgICBETlNTZXJ2ZXJJbmZvICppOworICAgIGFzc2VydChhZGRyZXNzKTsKKworICAgIGZvciAoaSA9IHNlcnZlcnM7IGk7IGkgPSBpLT5zZXJ2ZXJzX25leHQpCisgICAgICAgIGlmIChpLT5pbnRlcmZhY2UgPT0gaW50ZXJmYWNlICYmCisgICAgICAgICAgICBpLT5wcm90b2NvbCA9PSBwcm90b2NvbCAmJgorICAgICAgICAgICAgc3RyY21wKGktPmFkZHJlc3MsIGFkZHJlc3MpID09IDApCisgICAgICAgICAgICByZXR1cm4gaTsKKworICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgRE5TU2VydmVySW5mbyogbmV3X3NlcnZlcl9pbmZvKEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsIGNvbnN0IGNoYXIgKmFkZHJlc3MpIHsKKyAgICBETlNTZXJ2ZXJJbmZvICppOworCisgICAgYXNzZXJ0KGFkZHJlc3MpOworCisgICAgaSA9IGF2YWhpX25ldyhETlNTZXJ2ZXJJbmZvLCAxKTsKKyAgICBpLT5pbnRlcmZhY2UgPSBpbnRlcmZhY2U7CisgICAgaS0+cHJvdG9jb2wgPSBwcm90b2NvbDsKKyAgICBpLT5hZGRyZXNzID0gYXZhaGlfc3RyZHVwKGFkZHJlc3MpOworCisgICAgQVZBSElfTExJU1RfUFJFUEVORChETlNTZXJ2ZXJJbmZvLCBzZXJ2ZXJzLCBzZXJ2ZXJzLCBpKTsKKworICAgIHJldHVybiBpOworfQorCitzdGF0aWMgaW50IHNldF9jbG9leGVjKGludCBmZCkgeworICAgIGludCBuOworCisgICAgYXNzZXJ0KGZkID49IDApOworCisgICAgaWYgKChuID0gZmNudGwoZmQsIEZfR0VURkQpKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGlmIChuICYgRkRfQ0xPRVhFQykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gZmNudGwoZmQsIEZfU0VURkQsIG58RkRfQ0xPRVhFQyk7Cit9CisKK3N0YXRpYyBpbnQgb3Blbl9zb2NrZXQodm9pZCkgeworICAgIGludCBmZCA9IC0xOworICAgIHN0cnVjdCBzb2NrYWRkcl91biBzYTsKKworICAgIGlmICgoZmQgPSBzb2NrZXQoQUZfVU5JWCwgU09DS19TVFJFQU0sIDApKSA8IDApIHsKKyAgICAgICAgZGFlbW9uX2xvZyhMT0dfRVJSLCAic29ja2V0KCk6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGlmIChzZXRfY2xvZXhlYyhmZCkgPCAwKSB7CisgICAgICAgIGRhZW1vbl9sb2coTE9HX0VSUiwgImZjbnRsKCk6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIG1lbXNldCgmc2EsIDAsIHNpemVvZihzYSkpOworICAgIHNhLnN1bl9mYW1pbHkgPSBBRl9VTklYOworICAgIHN0cm5jcHkoc2Euc3VuX3BhdGgsIEFWQUhJX1NPQ0tFVCwgc2l6ZW9mKHNhLnN1bl9wYXRoKS0xKTsKKyAgICBzYS5zdW5fcGF0aFtzaXplb2Yoc2Euc3VuX3BhdGgpLTFdID0gMDsKKworICAgIGlmIChjb25uZWN0KGZkLCAoc3RydWN0IHNvY2thZGRyKikgJnNhLCBzaXplb2Yoc2EpKSA8IDApIHsKKyAgICAgICAgZGFlbW9uX2xvZyhMT0dfRVJSLCAiY29ubmVjdCgpOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIGRhZW1vbl9sb2coTE9HX0lORk8sICJGYWlsZWQgdG8gY29ubmVjdCB0byB0aGUgZGFlbW9uLiBUaGlzIHByb2JhYmx5IG1lYW5zIHRoYXQgeW91Iik7CisgICAgICAgIGRhZW1vbl9sb2coTE9HX0lORk8sICJkaWRuJ3Qgc3RhcnQgYXZhaGktZGFlbW9uIGJlZm9yZSBhdmFoaS1kbnNjb25mZC4iKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIHJldHVybiBmZDsKKworZmFpbDoKKyAgICBpZiAoZmQgPj0gMCkKKyAgICAgICAgY2xvc2UoZmQpOworCisgICAgcmV0dXJuIC0xOworfQorCitzdGF0aWMgc3NpemVfdCBsb29wX3dyaXRlKGludCBmZCwgY29uc3Qgdm9pZCpkYXRhLCBzaXplX3Qgc2l6ZSkgeworCisgICAgc3NpemVfdCByZXQgPSAwOworICAgIGFzc2VydChmZCA+PSAwICYmIGRhdGEgJiYgc2l6ZSk7CisKKyAgICB3aGlsZSAoc2l6ZSA+IDApIHsKKyAgICAgICAgc3NpemVfdCByOworCisgICAgICAgIGlmICgociA9IHdyaXRlKGZkLCBkYXRhLCBzaXplKSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIHI7CisKKyAgICAgICAgaWYgKHIgPT0gMCkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIHJldCArPSByOworICAgICAgICBkYXRhID0gKGNvbnN0IHVpbnQ4X3QqKSBkYXRhICsgcjsKKyAgICAgICAgc2l6ZSAtPSByOworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjaGFyICpjb25jYXRfZG5zX3NlcnZlcnMoQXZhaGlJZkluZGV4IGludGVyZmFjZSkgeworICAgIEROU1NlcnZlckluZm8gKmk7CisgICAgY2hhciAqciA9IE5VTEw7CisKKyAgICBmb3IgKGkgPSBzZXJ2ZXJzOyBpOyBpID0gaS0+c2VydmVyc19uZXh0KQorICAgICAgICBpZiAoaS0+aW50ZXJmYWNlID09IGludGVyZmFjZSB8fCBpbnRlcmZhY2UgPD0gMCkgeworICAgICAgICAgICAgRE5TU2VydmVySW5mbyAqajsKKyAgICAgICAgICAgIGNoYXIgKnQ7CisKKyAgICAgICAgICAgIC8qIEZpbHRlciBvdXQgZG91YmxlIGVudHJpZXMgKi8KKyAgICAgICAgICAgIGZvciAoaiA9IHNlcnZlcnM7IGogIT0gaTsgaiA9IGotPnNlcnZlcnNfbmV4dCkKKyAgICAgICAgICAgICAgICBpZiAoai0+aW50ZXJmYWNlID09IGludGVyZmFjZSB8fCBpbnRlcmZhY2UgPD0gMCkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmNtcChpLT5hZGRyZXNzLCBqLT5hZGRyZXNzKSA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGlmIChqICE9IGkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGlmICghcikKKyAgICAgICAgICAgICAgICB0ID0gYXZhaGlfc3RyZHVwKGktPmFkZHJlc3MpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHQgPSBhdmFoaV9zdHJkdXBfcHJpbnRmKCIlcyAlcyIsIHIsIGktPmFkZHJlc3MpOworCisgICAgICAgICAgICBhdmFoaV9mcmVlKHIpOworICAgICAgICAgICAgciA9IHQ7CisgICAgICAgIH0KKworICAgIHJldHVybiByOworfQorCitzdGF0aWMgdm9pZCBzZXRfZW52KGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKSB7CisgICAgY2hhciAqKmU7CisgICAgc2l6ZV90IGw7CisKKyAgICBhc3NlcnQobmFtZSk7CisgICAgYXNzZXJ0KHZhbHVlKTsKKworICAgIGwgPSBzdHJsZW4obmFtZSk7CisKKyAgICBmb3IgKGUgPSBlbnZpcm9uOyAqZTsgZSsrKSB7CisgICAgICAgIC8qIFNlYXJjaCBmb3IgdGhlIHZhcmlhYmxlICovCisgICAgICAgIGlmIChzdHJsZW4oKmUpIDwgbCsxKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKHN0cm5jbXAoKmUsIG5hbWUsIGwpICE9IDAgfHwgKCplKVtsXSAhPSAnPScpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvKiBXZSBzaW1wbHkgZnJlZSB0aGUgcmVjb3JkLCBzaWNuZSB3ZSBrbm93IHRoYXQgd2UgY3JlYXRlZCBpdCBwcmV2aW91c2x5ICovCisgICAgICAgIGF2YWhpX2ZyZWUoKmUpOworICAgICAgICAqZSA9IGF2YWhpX3N0cmR1cF9wcmludGYoIiVzPSVzIiwgbmFtZSwgdmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXNzZXJ0KDApOworfQorCitzdGF0aWMgdm9pZCBydW5fc2NyaXB0KGludCBuZXcsIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsIGNvbnN0IGNoYXIgKmFkZHJlc3MpIHsKKyAgICBjaGFyICpwOworICAgIGludCByZXQ7CisgICAgY2hhciBpYVsxNl0sIHBhWzE2XTsKKyAgICBjaGFyIG5hbWVbSUZfTkFNRVNJWkVdOworCisgICAgYXNzZXJ0KGludGVyZmFjZSA+IDApOworCisgICAgaWYgKCFpZl9pbmRleHRvbmFtZShpbnRlcmZhY2UsIG5hbWUpKQorICAgICAgICByZXR1cm47CisKKyAgICBwID0gY29uY2F0X2Ruc19zZXJ2ZXJzKGludGVyZmFjZSk7CisgICAgc2V0X2VudihFTlZfSU5URVJGQUNFX0ROU19TRVJWRVJTLCBwID8gcCA6ICIiKTsKKyAgICBhdmFoaV9mcmVlKHApOworCisgICAgcCA9IGNvbmNhdF9kbnNfc2VydmVycygtMSk7CisgICAgc2V0X2VudihFTlZfRE5TX1NFUlZFUlMsIHAgPyBwIDogIiIpOworICAgIGF2YWhpX2ZyZWUocCk7CisKKyAgICBzZXRfZW52KEVOVl9JTlRFUkZBQ0UsIG5hbWUpOworCisgICAgc25wcmludGYoaWEsIHNpemVvZihpYSksICIlaSIsIChpbnQpIGludGVyZmFjZSk7CisgICAgc25wcmludGYocGEsIHNpemVvZihwYSksICIlaSIsIChpbnQpIHByb3RvY29sKTsKKworICAgIGlmIChkYWVtb25fZXhlYygiLyIsICZyZXQsIEFWQUhJX0ROU0NPTkZfU0NSSVBULCBBVkFISV9ETlNDT05GX1NDUklQVCwgbmV3ID8gIisiIDogIi0iLCBhZGRyZXNzLCBpYSwgcGEsIGF2YWhpX3Byb3RvX3RvX3N0cmluZyhwcm90b2NvbCksIE5VTEwpIDwgMCkKKyAgICAgICAgZGFlbW9uX2xvZyhMT0dfV0FSTklORywgIkZhaWxlZCB0byBydW4gc2NyaXB0Iik7CisgICAgZWxzZSBpZiAocmV0ICE9IDApCisgICAgICAgIGRhZW1vbl9sb2coTE9HX1dBUk5JTkcsICJTY3JpcHQgcmV0dXJuZWQgd2l0aCBub24temVybyBleGl0IGNvZGUgJWkiLCByZXQpOworfQorCitzdGF0aWMgaW50IG5ld19saW5lKGNvbnN0IGNoYXIgKmwpIHsKKyAgICBhc3NlcnQobCk7CisKKyAgICBpZiAoc3RhdGUgPT0gQUNLV0FJVCkgeworICAgICAgICBpZiAoKmwgIT0gJysnKSB7CisgICAgICAgICAgICBkYWVtb25fbG9nKExPR19FUlIsICJBdmFoaSBjb21tYW5kIGZhaWxlZDogJXMiLCBsKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIGRhZW1vbl9sb2coTE9HX0lORk8sICJTdWNjZXNzZnVsbHkgY29ubmVjdGVkIHRvIEF2YWhpIGRhZW1vbi4iKTsKKyAgICAgICAgc3RhdGUgPSBCUk9XU0lORzsKKyAgICB9IGVsc2UgeworICAgICAgICBBdmFoaUlmSW5kZXggaW50ZXJmYWNlOworICAgICAgICBBdmFoaVByb3RvY29sIHByb3RvY29sOworICAgICAgICBpbnQgaV9pbnRlcmZhY2UsIGlfcHJvdG9jb2wsIHBvcnQ7CisgICAgICAgIGNoYXIgYVtBVkFISV9BRERSRVNTX1NUUl9NQVhdOworCisgICAgICAgIGFzc2VydChzdGF0ZSA9PSBCUk9XU0lORyk7CisKKyAgICAgICAgaWYgKCpsICE9ICc8JyAmJiAqbCAhPSAnPicpIHsKKyAgICAgICAgICAgIGRhZW1vbl9sb2coTE9HX0VSUiwgIkF2YWhpIHNlbnQgdXMgYW4gaW52YWxpZCBicm93c2luZyBsaW5lOiAlcyIsIGwpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNzY2FuZihsKzEsICIlaSAlaSAlMzlzICVpIiwgJmlfaW50ZXJmYWNlLCAmaV9wcm90b2NvbCwgYSwgJnBvcnQpICE9IDQpIHsKKyAgICAgICAgICAgIGRhZW1vbl9sb2coTE9HX0VSUiwgIkZhaWxlZCB0byBwYXJzZSBicm93c2luZyBsaW5lOiAlcyIsIGwpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgaW50ZXJmYWNlID0gKEF2YWhpSWZJbmRleCkgaV9pbnRlcmZhY2U7CisgICAgICAgIHByb3RvY29sID0gKEF2YWhpUHJvdG9jb2wpIGlfcHJvdG9jb2w7CisKKyAgICAgICAgaWYgKCpsID09ICc+JykgeworICAgICAgICAgICAgaWYgKHBvcnQgIT0gNTMpCisgICAgICAgICAgICAgICAgZGFlbW9uX2xvZyhMT0dfV0FSTklORywgIkROUyBzZXJ2ZXIgd2l0aCBwb3J0IGFkZHJlc3MgIT0gNTMgZm91bmQsIGlnbm9yaW5nIik7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBkYWVtb25fbG9nKExPR19JTkZPLCAiTmV3IEROUyBTZXJ2ZXIgJXMgKGludGVyZmFjZTogJWkuJXMpIiwgYSwgaW50ZXJmYWNlLCBhdmFoaV9wcm90b190b19zdHJpbmcocHJvdG9jb2wpKTsKKyAgICAgICAgICAgICAgICBuZXdfc2VydmVyX2luZm8oaW50ZXJmYWNlLCBwcm90b2NvbCwgYSk7CisgICAgICAgICAgICAgICAgcnVuX3NjcmlwdCgxLCBpbnRlcmZhY2UsIHByb3RvY29sLCBhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEROU1NlcnZlckluZm8gKmk7CisKKyAgICAgICAgICAgIGlmIChwb3J0ID09IDUzKQorICAgICAgICAgICAgICAgIGlmICgoaSA9IGdldF9zZXJ2ZXJfaW5mbyhpbnRlcmZhY2UsIHByb3RvY29sLCBhKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgZGFlbW9uX2xvZyhMT0dfSU5GTywgIkROUyBTZXJ2ZXIgJXMgcmVtb3ZlZCAoaW50ZXJmYWNlOiAlaS4lcykiLCBhLCBpbnRlcmZhY2UsIGF2YWhpX3Byb3RvX3RvX3N0cmluZyhwcm90b2NvbCkpOworICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaW5mb19mcmVlKGkpOworICAgICAgICAgICAgICAgICAgICBydW5fc2NyaXB0KDAsIGludGVyZmFjZSwgcHJvdG9jb2wsIGEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZG9fY29ubmVjdCh2b2lkKSB7CisgICAgaW50IGZkID0gLTE7CisKKyAgICBpZiAoKGZkID0gb3Blbl9zb2NrZXQoKSkgPCAwKQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICBpZiAobG9vcF93cml0ZShmZCwgQlJPV1NFX0ROU19TRVJWRVJTLCBzaXplb2YoQlJPV1NFX0ROU19TRVJWRVJTKS0xKSA8IDApIHsKKyAgICAgICAgZGFlbW9uX2xvZyhMT0dfRVJSLCAid3JpdGUoKTogJXMiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgc3RhdGUgPSBBQ0tXQUlUOworICAgIHJldHVybiBmZDsKKworZmFpbDoKKyAgICBpZiAoZmQgPj0gMCkKKyAgICAgICAgY2xvc2UoZmQpOworCisgICAgcmV0dXJuIC0xOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2Ruc19zZXJ2ZXJfaW5mb19saXN0KHZvaWQpIHsKKyAgICB3aGlsZSAoc2VydmVycykgeworICAgICAgICBBdmFoaUlmSW5kZXggaW50ZXJmYWNlID0gc2VydmVycy0+aW50ZXJmYWNlOworICAgICAgICBBdmFoaVByb3RvY29sIHByb3RvY29sID0gc2VydmVycy0+cHJvdG9jb2w7CisgICAgICAgIGNoYXIgKmFkZHJlc3MgPSBhdmFoaV9zdHJkdXAoc2VydmVycy0+YWRkcmVzcyk7CisgICAgICAgIHNlcnZlcl9pbmZvX2ZyZWUoc2VydmVycyk7CisKKyAgICAgICAgcnVuX3NjcmlwdCgwLCBpbnRlcmZhY2UsIHByb3RvY29sLCBhZGRyZXNzKTsKKyAgICAgICAgYXZhaGlfZnJlZShhZGRyZXNzKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGhlbHAoRklMRSAqZiwgY29uc3QgY2hhciAqYXJndjApIHsKKyAgICBmcHJpbnRmKGYsCisgICAgICAgICAgICAiJXMgW29wdGlvbnNdXG4iCisgICAgICAgICAgICAiICAgIC1oIC0taGVscCAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyAgICAgICAgICAgICIgICAgLUQgLS1kYWVtb25pemUgICBEYWVtb25pemUgYWZ0ZXIgc3RhcnR1cFxuIgorICAgICAgICAgICAgIiAgICAtcyAtLXN5c2xvZyAgICAgIFdyaXRlIGxvZyBtZXNzYWdlcyB0byBzeXNsb2coMykgaW5zdGVhZCBvZiBTVERFUlJcbiIKKyAgICAgICAgICAgICIgICAgLWsgLS1raWxsICAgICAgICBLaWxsIGEgcnVubmluZyBkYWVtb25cbiIKKyAgICAgICAgICAgICIgICAgLXIgLS1yZWZyZXNoICAgICBSZXF1ZXN0IGEgcnVubmluZyBkYWVtb24gdG8gcmVmcmVzaCBETlMgc2VydmVyIGRhdGFcbiIKKyAgICAgICAgICAgICIgICAgLWMgLS1jaGVjayAgICAgICBSZXR1cm4gMCBpZiBhIGRhZW1vbiBpcyBhbHJlYWR5IHJ1bm5pbmdcbiIKKyAgICAgICAgICAgICIgICAgLVYgLS12ZXJzaW9uICAgICBTaG93IHZlcnNpb25cbiIsCisgICAgICAgICAgICBhcmd2MCk7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfY29tbWFuZF9saW5lKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKKyAgICBpbnQgYzsKKworICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uIGxvbmdfb3B0aW9uc1tdID0geworICAgICAgICB7ICJoZWxwIiwgICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgJ2gnIH0sCisgICAgICAgIHsgImRhZW1vbml6ZSIsIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCAnRCcgfSwKKyAgICAgICAgeyAic3lzbG9nIiwgICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsICdzJyB9LAorICAgICAgICB7ICJraWxsIiwgICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgJ2snIH0sCisgICAgICAgIHsgInZlcnNpb24iLCAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCAnVicgfSwKKyAgICAgICAgeyAicmVmcmVzaCIsICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsICdyJyB9LAorICAgICAgICB7ICJjaGVjayIsICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgJ2MnIH0sCisgICAgICAgIHsgTlVMTCwgMCwgTlVMTCwgMCB9CisgICAgfTsKKworICAgIHdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJoRGtWcmNzIiwgbG9uZ19vcHRpb25zLCBOVUxMKSkgPj0gMCkgeworCisgICAgICAgIHN3aXRjaChjKSB7CisgICAgICAgICAgICBjYXNlICdoJzoKKyAgICAgICAgICAgICAgICBjb21tYW5kID0gREFFTU9OX0hFTFA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdEJzoKKyAgICAgICAgICAgICAgICBkYWVtb25pemUgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAncyc6CisgICAgICAgICAgICAgICAgdXNlX3N5c2xvZyA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdrJzoKKyAgICAgICAgICAgICAgICBjb21tYW5kID0gREFFTU9OX0tJTEw7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdWJzoKKyAgICAgICAgICAgICAgICBjb21tYW5kID0gREFFTU9OX1ZFUlNJT047CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdyJzoKKyAgICAgICAgICAgICAgICBjb21tYW5kID0gREFFTU9OX1JFRlJFU0g7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdjJzoKKyAgICAgICAgICAgICAgICBjb21tYW5kID0gREFFTU9OX0NIRUNLOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAob3B0aW5kIDwgYXJnYykgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlRvbyBtYW55IGFyZ3VtZW50c1xuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydW5fZGFlbW9uKHZvaWQpIHsKKyAgICBpbnQgZmQgPSAtMSwgcmV0ID0gLTE7CisgICAgY2hhciBidWZbMTAyNF07CisgICAgc2l6ZV90IGJ1ZmxlbiA9IDA7CisKKyAgICBBVkFISV9MTElTVF9IRUFEX0lOSVQoRE5TU2VydmVySW5mbywgc2VydmVycyk7CisKKyAgICBkYWVtb25fc2lnbmFsX2luaXQoU0lHSU5ULCBTSUdURVJNLCBTSUdDSExELCBTSUdIVVAsIDApOworCisgICAgLyogQWxsb2NhdGUgc29tZSBtZW1vcnkgZm9yIG91ciBlbnZpcm9ubWVudCB2YXJpYWJsZXMgKi8KKyAgICBwdXRlbnYoYXZhaGlfc3RyZHVwKEVOVl9JTlRFUkZBQ0UiPSIpKTsKKyAgICBwdXRlbnYoYXZhaGlfc3RyZHVwKEVOVl9ETlNfU0VSVkVSUyI9IikpOworICAgIHB1dGVudihhdmFoaV9zdHJkdXAoRU5WX0lOVEVSRkFDRV9ETlNfU0VSVkVSUyI9IikpOworCisgICAgaWYgKChmZCA9IGRvX2Nvbm5lY3QoKSkgPCAwKQorICAgICAgICBnb3RvIGZpbmlzaDsKKworICAgIGlmIChkYWVtb25pemUpCisgICAgICAgIGRhZW1vbl9yZXR2YWxfc2VuZCgwKTsKKworICAgIHJldCA9IDA7CisKKyAgICB3aGlsZSAoIXF1aXQpIHsKKyAgICAgICAgZmRfc2V0IHJmZHMsIHdmZHM7CisKKyAgICAgICAgRkRfWkVSTygmcmZkcyk7CisgICAgICAgIEZEX1pFUk8oJndmZHMpOworCisgICAgICAgIEZEX1NFVChmZCwgJnJmZHMpOworICAgICAgICBGRF9TRVQoZGFlbW9uX3NpZ25hbF9mZCgpLCAmcmZkcyk7CisKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgaWYgKHNlbGVjdChmZCsxLCAmcmZkcywgTlVMTCwgTlVMTCwgTlVMTCkgPCAwKSB7CisgICAgICAgICAgICAgICAgaWYgKGVycm5vID09IEVJTlRSKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIGRhZW1vbl9sb2coTE9HX0VSUiwgInNlbGVjdCgpOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICAgICAgZ290byBmaW5pc2g7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKEZEX0lTU0VUKGRhZW1vbl9zaWduYWxfZmQoKSwgJnJmZHMpKSB7CisKKyAgICAgICAgICAgIGludCBzaWc7CisKKyAgICAgICAgICAgIGlmICgoc2lnID0gZGFlbW9uX3NpZ25hbF9uZXh0KCkpIDw9IDApIHsKKyAgICAgICAgICAgICAgICBkYWVtb25fbG9nKExPR19FUlIsICJkYWVtb25fc2lnbmFsX25leHQoKSBmYWlsZWQiKTsKKyAgICAgICAgICAgICAgICBnb3RvIGZpbmlzaDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoKHNpZykgeworICAgICAgICAgICAgICAgIGNhc2UgU0lHSU5UOgorICAgICAgICAgICAgICAgIGNhc2UgU0lHVEVSTToKKyAgICAgICAgICAgICAgICAgICAgZGFlbW9uX2xvZyhMT0dfSU5GTywgIkdvdCAlcywgcXVpdHRpbmcuIiwgc2lnID09IFNJR0lOVCA/ICJTSUdJTlQiIDogIlNJR1RFUk0iKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZ290byBmaW5pc2g7CisKKyAgICAgICAgICAgICAgICBjYXNlIFNJR0NITEQ6CisgICAgICAgICAgICAgICAgICAgIHdhaXRwaWQoLTEsIE5VTEwsIFdOT0hBTkcpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgU0lHSFVQOgorICAgICAgICAgICAgICAgICAgICBkYWVtb25fbG9nKExPR19JTkZPLCAiUmVmcmVzaGluZyBETlMgU2VydmVyIGxpc3QiKTsKKworICAgICAgICAgICAgICAgICAgICBjbG9zZShmZCk7CisgICAgICAgICAgICAgICAgICAgIGZyZWVfZG5zX3NlcnZlcl9pbmZvX2xpc3QoKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoKGZkID0gZG9fY29ubmVjdCgpKSA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZpbmlzaDsKKworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9IGVsc2UgaWYgKEZEX0lTU0VUKGZkLCAmcmZkcykpIHsKKyAgICAgICAgICAgIHNzaXplX3QgcjsKKyAgICAgICAgICAgIGNoYXIgKm47CisKKyAgICAgICAgICAgIGlmICgociA9IHJlYWQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikgLSBidWZsZW4gLSAxKSkgPD0gMCkgeworICAgICAgICAgICAgICAgIGRhZW1vbl9sb2coTE9HX0VSUiwgInJlYWQoKTogJXMiLCByIDwgMCA/IHN0cmVycm9yKGVycm5vKSA6ICJFT0YiKTsKKyAgICAgICAgICAgICAgICBnb3RvIGZpbmlzaDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnVmbGVuICs9IHI7CisgICAgICAgICAgICBhc3NlcnQoYnVmbGVuIDw9IHNpemVvZihidWYpLTEpOworCisgICAgICAgICAgICB3aGlsZSAoKG4gPSBtZW1jaHIoYnVmLCAnXG4nLCBidWZsZW4pKSkgeworICAgICAgICAgICAgICAgICoobisrKSA9IDA7CisKKyAgICAgICAgICAgICAgICBpZiAobmV3X2xpbmUoYnVmKSA8IDApCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZmluaXNoOworCisgICAgICAgICAgICAgICAgYnVmbGVuIC09IChuIC0gYnVmKTsKKyAgICAgICAgICAgICAgICBtZW1tb3ZlKGJ1ZiwgbiwgYnVmbGVuKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGJ1ZmxlbiA+PSBzaXplb2YoYnVmKS0xKSB7CisgICAgICAgICAgICAgICAgLyogVGhlIGluY29taW5nIGxpbmUgaXMgaG9ycmlibHkgbG9uZyAqLworICAgICAgICAgICAgICAgIGJ1ZltzaXplb2YoYnVmKS0xXSA9IDA7CisKKyAgICAgICAgICAgICAgICBpZiAobmV3X2xpbmUoYnVmKSA8IDApCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZmluaXNoOworCisgICAgICAgICAgICAgICAgYnVmbGVuID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworZmluaXNoOgorCisgICAgZnJlZV9kbnNfc2VydmVyX2luZm9fbGlzdCgpOworCisgICAgaWYgKGZkID49IDApCisgICAgICAgIGNsb3NlKGZkKTsKKworICAgIGRhZW1vbl9zaWduYWxfZG9uZSgpOworCisgICAgaWYgKHJldCAhPSAwICYmIGRhZW1vbml6ZSkKKyAgICAgICAgZGFlbW9uX3JldHZhbF9zZW5kKDEpOworCisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIqIHBpZF9maWxlX3Byb2Modm9pZCkgeworICAgIHJldHVybiBBVkFISV9SVU5USU1FX0RJUiIvYXZhaGktZG5zY29uZmQucGlkIjsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkgeworICAgIGNoYXIgKmFyZ3YwOworICAgIGludCByID0gMTsKKyAgICBpbnQgd3JvdGVfcGlkX2ZpbGUgPSAwOworCisgICAgaWYgKChhcmd2MCA9IHN0cnJjaHIoYXJndlswXSwgJy8nKSkpCisgICAgICAgIGFyZ3YwKys7CisgICAgZWxzZQorICAgICAgICBhcmd2MCA9IGFyZ3ZbMF07CisKKyAgICBkYWVtb25fcGlkX2ZpbGVfaWRlbnQgPSBkYWVtb25fbG9nX2lkZW50ID0gYXJndjA7CisgICAgZGFlbW9uX3BpZF9maWxlX3Byb2MgPSBwaWRfZmlsZV9wcm9jOworCisgICAgaWYgKHBhcnNlX2NvbW1hbmRfbGluZShhcmdjLCBhcmd2KSA8IDApCisgICAgICAgIGdvdG8gZmluaXNoOworCisgICAgaWYgKGNvbW1hbmQgPT0gREFFTU9OX1JVTikgeworICAgICAgICBwaWRfdCBwaWQ7CisKKyAgICAgICAgaWYgKGdldHVpZCgpICE9IDApIHsKKyAgICAgICAgICAgIGRhZW1vbl9sb2coTE9HX0VSUiwgIlRoaXMgcHJvZ3JhbSBpcyBpbnRlbmRlZCB0byBiZSBydW4gYXMgcm9vdC4iKTsKKyAgICAgICAgICAgIGdvdG8gZmluaXNoOworICAgICAgICB9CisKKyAgICAgICAgaWYgKChwaWQgPSBkYWVtb25fcGlkX2ZpbGVfaXNfcnVubmluZygpKSA+PSAwKSB7CisgICAgICAgICAgICBkYWVtb25fbG9nKExPR19FUlIsICJEYWVtb24gYWxyZWFkeSBydW5uaW5nIG9uIFBJRCAldSIsIHBpZCk7CisgICAgICAgICAgICBnb3RvIGZpbmlzaDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChkYWVtb25pemUpIHsKKyAgICAgICAgICAgIGRhZW1vbl9yZXR2YWxfaW5pdCgpOworCisgICAgICAgICAgICBpZiAoKHBpZCA9IGRhZW1vbl9mb3JrKCkpIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGZpbmlzaDsKKyAgICAgICAgICAgIGVsc2UgaWYgKHBpZCAhPSAwKSB7CisgICAgICAgICAgICAgICAgaW50IHJldDsKKyAgICAgICAgICAgICAgICAvKiogUGFyZW50ICoqLworCisgICAgICAgICAgICAgICAgaWYgKChyZXQgPSBkYWVtb25fcmV0dmFsX3dhaXQoMjApKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgZGFlbW9uX2xvZyhMT0dfRVJSLCAiQ291bGQgbm90IHJlY2VpdmUgcmV0dXJuIHZhbHVlIGZyb20gZGFlbW9uIHByb2Nlc3MuIik7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZmluaXNoOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHIgPSByZXQ7CisgICAgICAgICAgICAgICAgZ290byBmaW5pc2g7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIENoaWxkICovCisgICAgICAgIH0KKworICAgICAgICBpZiAodXNlX3N5c2xvZyB8fCBkYWVtb25pemUpCisgICAgICAgICAgICBkYWVtb25fbG9nX3VzZSA9IERBRU1PTl9MT0dfU1lTTE9HOworCisgICAgICAgIGNoZGlyKCIvIik7CisKKyAgICAgICAgaWYgKGRhZW1vbl9waWRfZmlsZV9jcmVhdGUoKSA8IDApIHsKKyAgICAgICAgICAgIGRhZW1vbl9sb2coTE9HX0VSUiwgIkZhaWxlZCB0byBjcmVhdGUgUElEIGZpbGU6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKworICAgICAgICAgICAgaWYgKGRhZW1vbml6ZSkKKyAgICAgICAgICAgICAgICBkYWVtb25fcmV0dmFsX3NlbmQoMSk7CisgICAgICAgICAgICBnb3RvIGZpbmlzaDsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB3cm90ZV9waWRfZmlsZSA9IDE7CisKKyAgICAgICAgaWYgKHJ1bl9kYWVtb24oKSA8IDApCisgICAgICAgICAgICBnb3RvIGZpbmlzaDsKKworICAgICAgICByID0gMDsKKyAgICB9IGVsc2UgaWYgKGNvbW1hbmQgPT0gREFFTU9OX0hFTFApIHsKKyAgICAgICAgaGVscChzdGRvdXQsIGFyZ3YwKTsKKworICAgICAgICByID0gMDsKKyAgICB9IGVsc2UgaWYgKGNvbW1hbmQgPT0gREFFTU9OX1ZFUlNJT04pIHsKKyAgICAgICAgcHJpbnRmKCIlcyAiUEFDS0FHRV9WRVJTSU9OIlxuIiwgYXJndjApOworCisgICAgICAgIHIgPSAwOworICAgIH0gZWxzZSBpZiAoY29tbWFuZCA9PSBEQUVNT05fS0lMTCkgeworICAgICAgICBpZiAoZGFlbW9uX3BpZF9maWxlX2tpbGxfd2FpdChTSUdURVJNLCA1KSA8IDApIHsKKyAgICAgICAgICAgIGRhZW1vbl9sb2coTE9HX1dBUk5JTkcsICJGYWlsZWQgdG8ga2lsbCBkYWVtb246ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgIGdvdG8gZmluaXNoOworICAgICAgICB9CisKKyAgICAgICAgciA9IDA7CisgICAgfSBlbHNlIGlmIChjb21tYW5kID09IERBRU1PTl9SRUZSRVNIKSB7CisgICAgICAgIGlmIChkYWVtb25fcGlkX2ZpbGVfa2lsbChTSUdIVVApIDwgMCkgeworICAgICAgICAgICAgZGFlbW9uX2xvZyhMT0dfV0FSTklORywgIkZhaWxlZCB0byBraWxsIGRhZW1vbjogJXMiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgZ290byBmaW5pc2g7CisgICAgICAgIH0KKworICAgICAgICByID0gMDsKKyAgICB9IGVsc2UgaWYgKGNvbW1hbmQgPT0gREFFTU9OX0NIRUNLKQorICAgICAgICByID0gKGRhZW1vbl9waWRfZmlsZV9pc19ydW5uaW5nKCkgPj0gMCkgPyAwIDogMTsKKworCitmaW5pc2g6CisKKyAgICBpZiAoZGFlbW9uaXplKQorICAgICAgICBkYWVtb25fcmV0dmFsX2RvbmUoKTsKKworICAgIGlmICh3cm90ZV9waWRfZmlsZSkKKyAgICAgICAgZGFlbW9uX3BpZF9maWxlX3JlbW92ZSgpOworCisgICAgcmV0dXJuIHI7Cit9CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktZ2xpYi5wYy5pbiBiL2F2YWhpLTAuNi4zMS9hdmFoaS1nbGliLnBjLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNjNlODkKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktZ2xpYi5wYy5pbgpAQCAtMCwwICsxLDExIEBACitwcmVmaXg9QHByZWZpeEAKK2V4ZWNfcHJlZml4PSR7cHJlZml4fQorbGliZGlyPUBsaWJkaXJACitpbmNsdWRlZGlyPSR7cHJlZml4fS9pbmNsdWRlCisKK05hbWU6IGF2YWhpLWdsaWIKK0Rlc2NyaXB0aW9uOiBBdmFoaSBNdWx0aWNhc3QgRE5TIFJlc3BvbmRlciAoR0xpYiBTdXBwb3J0KQorVmVyc2lvbjogQFBBQ0tBR0VfVkVSU0lPTkAKK1JlcXVpcmVzOiBnbGliLTIuMAorTGliczogLUwke2xpYmRpcn0gLWxhdmFoaS1nbGliCitDZmxhZ3M6IC1EX1JFRU5UUkFOVCAtSSR7aW5jbHVkZWRpcn0KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1nbGliL01ha2VmaWxlLmFtIGIvYXZhaGktMC42LjMxL2F2YWhpLWdsaWIvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVkNWZiYQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1nbGliL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsNTMgQEAKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisjCisjIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisjIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisjIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisjIFVTQS4KKworQU1fQ0ZMQUdTPS1JJCh0b3Bfc3JjZGlyKQorCisjIFRoaXMgY29vbCBkZWJ1ZyB0cmFwIHdvcmtzIG9uIGkzODYvZ2NjIG9ubHkKK0FNX0NGTEFHUys9Jy1EREVCVUdfVFJBUD1fX2FzbV9fKCJpbnQgJCQzIiknCisKK2lmIEhBVkVfR0xJQgorCithdmFoaWdsaWJpbmNsdWRlZGlyPSQoaW5jbHVkZWRpcikvYXZhaGktZ2xpYgorCithdmFoaWdsaWJpbmNsdWRlX0hFQURFUlMgPSBcCisJZ2xpYi13YXRjaC5oIFwKKwlnbGliLW1hbGxvYy5oCisKK2xpYl9MVExJQlJBUklFUyA9IFwKKwlsaWJhdmFoaS1nbGliLmxhCisKK2lmIEVOQUJMRV9URVNUUworbm9pbnN0X1BST0dSQU1TID0gXAorCWdsaWItd2F0Y2gtdGVzdAorZW5kaWYKKworbGliYXZhaGlfZ2xpYl9sYV9TT1VSQ0VTID0gXAorCWdsaWItd2F0Y2guYyBnbGliLXdhdGNoLmggXAorCWdsaWItbWFsbG9jLmggZ2xpYi1tYWxsb2MuYworCitsaWJhdmFoaV9nbGliX2xhX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAkKEdMSUIyMF9DRkxBR1MpCitsaWJhdmFoaV9nbGliX2xhX0xJQkFERCA9ICQoQU1fTERBREQpIC4uL2F2YWhpLWNvbW1vbi9saWJhdmFoaS1jb21tb24ubGEgJChHTElCMjBfTElCUykKK2xpYmF2YWhpX2dsaWJfbGFfTERGTEFHUyA9ICQoQU1fTERGTEFHUykgIC12ZXJzaW9uLWluZm8gJChMSUJBVkFISV9HTElCX1ZFUlNJT05fSU5GTykKKworZ2xpYl93YXRjaF90ZXN0X1NPVVJDRVMgPSBcCisJZ2xpYi13YXRjaC5jIGdsaWItd2F0Y2guaCBcCisJZ2xpYi13YXRjaC10ZXN0LmMKK2dsaWJfd2F0Y2hfdGVzdF9DRkxBR1MgPSAkKEFNX0NGTEFHUykgJChHTElCMjBfQ0ZMQUdTKQorZ2xpYl93YXRjaF90ZXN0X0xEQUREID0gJChBTV9MREFERCkgLi4vYXZhaGktY29tbW9uL2xpYmF2YWhpLWNvbW1vbi5sYSAkKEdMSUIyMF9MSUJTKQorCitlbmRpZgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWdsaWIvTWFrZWZpbGUuaW4gYi9hdmFoaS0wLjYuMzEvYXZhaGktZ2xpYi9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmU3MzcyCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWdsaWIvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw4MzUgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEuMyBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKyMKKyMgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyMgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyMgVVNBLgorCisKKworVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorQEVOQUJMRV9URVNUU19UUlVFQEBIQVZFX0dMSUJfVFJVRUBub2luc3RfUFJPR1JBTVMgPSAgXAorQEVOQUJMRV9URVNUU19UUlVFQEBIQVZFX0dMSUJfVFJVRUAJZ2xpYi13YXRjaC10ZXN0JChFWEVFWFQpCitzdWJkaXIgPSBhdmFoaS1nbGliCitESVNUX0NPTU1PTiA9ICQoYW1fX2F2YWhpZ2xpYmluY2x1ZGVfSEVBREVSU19ESVNUKSBcCisJJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbgorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL2FjeF9wdGhyZWFkLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9nY2Nfc3RhY2tfcHJvdGVjdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vZ2NjX3Zpc2liaWxpdHkubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2ludGx0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9pbnRyb3NwZWN0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9sdG9wdGlvbnMubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2x0c3VnYXIubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2x0dmVyc2lvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHR+b2Jzb2xldGUubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL25scy5tNCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9weXRob24ubTQgXAorCSQodG9wX3NyY2RpcikvYWNpbmNsdWRlLm00ICQodG9wX3NyY2RpcikvY29tbW9uL2RveHlnZW4ubTQgXAorCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCithbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQoQUNMT0NBTF9NNCkKK21raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCitDT05GSUdfQ0xFQU5fRklMRVMgPQorQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KK2FtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOworYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKKyAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAorICAgICopIGY9JCRwOzsgXAorICBlc2FjOworYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOworYW1fX2luc3RhbGxfbWF4ID0gNDAKK2FtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCisgIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKK2FtX19ub2Jhc2Vfc3RyaXAgPSBcCisgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgorYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAorICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAorICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAorICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCisgICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAorICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAorICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKK2FtX19iYXNlX2xpc3QgPSBcCisgIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCisgIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKK2FtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIgPSB7IFwKKyAgdGVzdCAteiAiJCRmaWxlcyIgXAorICAgIHx8IHsgdGVzdCAhIC1kICIkJGRpciIgJiYgdGVzdCAhIC1mICIkJGRpciIgJiYgdGVzdCAhIC1yICIkJGRpciI7IH0gXAorICAgIHx8IHsgZWNobyAiICggY2QgJyQkZGlyJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKKyAgICAgICAgICQoYW1fX2NkKSAiJCRkaXIiICYmIHJtIC1mICQkZmlsZXM7IH07IFwKKyAgfQorYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKGxpYmRpcikiIFwKKwkiJChERVNURElSKSQoYXZhaGlnbGliaW5jbHVkZWRpcikiCitMVExJQlJBUklFUyA9ICQobGliX0xUTElCUkFSSUVTKQorYW1fX0RFUEVOREVOQ0lFU18xID0KK0BIQVZFX0dMSUJfVFJVRUBsaWJhdmFoaV9nbGliX2xhX0RFUEVOREVOQ0lFUyA9ICBcCitASEFWRV9HTElCX1RSVUVACS4uL2F2YWhpLWNvbW1vbi9saWJhdmFoaS1jb21tb24ubGEgXAorQEhBVkVfR0xJQl9UUlVFQAkkKGFtX19ERVBFTkRFTkNJRVNfMSkKK2FtX19saWJhdmFoaV9nbGliX2xhX1NPVVJDRVNfRElTVCA9IGdsaWItd2F0Y2guYyBnbGliLXdhdGNoLmggXAorCWdsaWItbWFsbG9jLmggZ2xpYi1tYWxsb2MuYworQEhBVkVfR0xJQl9UUlVFQGFtX2xpYmF2YWhpX2dsaWJfbGFfT0JKRUNUUyA9ICBcCitASEFWRV9HTElCX1RSVUVACWxpYmF2YWhpX2dsaWJfbGEtZ2xpYi13YXRjaC5sbyBcCitASEFWRV9HTElCX1RSVUVACWxpYmF2YWhpX2dsaWJfbGEtZ2xpYi1tYWxsb2MubG8KK2xpYmF2YWhpX2dsaWJfbGFfT0JKRUNUUyA9ICQoYW1fbGliYXZhaGlfZ2xpYl9sYV9PQkpFQ1RTKQorQU1fVl9sdCA9ICQoYW1fX3ZfbHRfQEFNX1ZAKQorYW1fX3ZfbHRfID0gJChhbV9fdl9sdF9AQU1fREVGQVVMVF9WQCkKK2FtX192X2x0XzAgPSAtLXNpbGVudAorbGliYXZhaGlfZ2xpYl9sYV9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKKwkkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgXAorCSQobGliYXZhaGlfZ2xpYl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSBcCisJJChsaWJhdmFoaV9nbGliX2xhX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKK0BIQVZFX0dMSUJfVFJVRUBhbV9saWJhdmFoaV9nbGliX2xhX3JwYXRoID0gLXJwYXRoICQobGliZGlyKQorUFJPR1JBTVMgPSAkKG5vaW5zdF9QUk9HUkFNUykKK2FtX19nbGliX3dhdGNoX3Rlc3RfU09VUkNFU19ESVNUID0gZ2xpYi13YXRjaC5jIGdsaWItd2F0Y2guaCBcCisJZ2xpYi13YXRjaC10ZXN0LmMKK0BIQVZFX0dMSUJfVFJVRUBhbV9nbGliX3dhdGNoX3Rlc3RfT0JKRUNUUyA9ICBcCitASEFWRV9HTElCX1RSVUVACWdsaWJfd2F0Y2hfdGVzdC1nbGliLXdhdGNoLiQoT0JKRVhUKSBcCitASEFWRV9HTElCX1RSVUVACWdsaWJfd2F0Y2hfdGVzdC1nbGliLXdhdGNoLXRlc3QuJChPQkpFWFQpCitnbGliX3dhdGNoX3Rlc3RfT0JKRUNUUyA9ICQoYW1fZ2xpYl93YXRjaF90ZXN0X09CSkVDVFMpCitASEFWRV9HTElCX1RSVUVAZ2xpYl93YXRjaF90ZXN0X0RFUEVOREVOQ0lFUyA9ICBcCitASEFWRV9HTElCX1RSVUVACS4uL2F2YWhpLWNvbW1vbi9saWJhdmFoaS1jb21tb24ubGEgXAorQEhBVkVfR0xJQl9UUlVFQAkkKGFtX19ERVBFTkRFTkNJRVNfMSkKK2dsaWJfd2F0Y2hfdGVzdF9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKKwkkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgXAorCSQoZ2xpYl93YXRjaF90ZXN0X0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSBcCisJLW8gJEAKK0RFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpCitkZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCithbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcworYW1fX212ID0gbXYgLWYKK0NPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAorCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0xUQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpIFwKKwkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKKwkkKEFNX0NGTEFHUykgJChDRkxBR1MpCitBTV9WX0NDID0gJChhbV9fdl9DQ19AQU1fVkApCithbV9fdl9DQ18gPSAkKGFtX192X0NDX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICIgJEA7CitBTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCithbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfYXRfMCA9IEAKK0NDTEQgPSAkKENDKQorTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAorCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEX0BBTV9WQCkKK2FtX192X0NDTERfID0gJChhbV9fdl9DQ0xEX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfQ0NMRF8wID0gQGVjaG8gIiAgQ0NMRCAgIiAkQDsKK0FNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQorYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAiICRAOworU09VUkNFUyA9ICQobGliYXZhaGlfZ2xpYl9sYV9TT1VSQ0VTKSAkKGdsaWJfd2F0Y2hfdGVzdF9TT1VSQ0VTKQorRElTVF9TT1VSQ0VTID0gJChhbV9fbGliYXZhaGlfZ2xpYl9sYV9TT1VSQ0VTX0RJU1QpIFwKKwkkKGFtX19nbGliX3dhdGNoX3Rlc3RfU09VUkNFU19ESVNUKQorYW1fX2F2YWhpZ2xpYmluY2x1ZGVfSEVBREVSU19ESVNUID0gZ2xpYi13YXRjaC5oIGdsaWItbWFsbG9jLmgKK0hFQURFUlMgPSAkKGF2YWhpZ2xpYmluY2x1ZGVfSEVBREVSUykKK0VUQUdTID0gZXRhZ3MKK0NUQUdTID0gY3RhZ3MKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitBQ0xPQ0FMID0gQEFDTE9DQUxACitBTExfTElOR1VBUyA9IEBBTExfTElOR1VBU0AKK0FNVEFSID0gQEFNVEFSQAorQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACitBUiA9IEBBUkAKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBVkFISV9BVVRPSVBEX0dST1VQID0gQEFWQUhJX0FVVE9JUERfR1JPVVBACitBVkFISV9BVVRPSVBEX1VTRVIgPSBAQVZBSElfQVVUT0lQRF9VU0VSQAorQVZBSElfR1JPVVAgPSBAQVZBSElfR1JPVVBACitBVkFISV9QUklWX0FDQ0VTU19HUk9VUCA9IEBBVkFISV9QUklWX0FDQ0VTU19HUk9VUEAKK0FWQUhJX1VTRVIgPSBAQVZBSElfVVNFUkAKK0FXSyA9IEBBV0tACitDQVRBTE9HUyA9IEBDQVRBTE9HU0AKK0NBVE9CSkVYVCA9IEBDQVRPQkpFWFRACitDQyA9IEBDQ0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1hYID0gQENYWEAKK0NYWENQUCA9IEBDWFhDUFBACitDWFhERVBNT0RFID0gQENYWERFUE1PREVACitDWFhGTEFHUyA9IEBDWFhGTEFHU0AKK0NZR1BBVEhfVyA9IEBDWUdQQVRIX1dACitEQVRBRElSTkFNRSA9IEBEQVRBRElSTkFNRUAKK0RCVVNfQ0ZMQUdTID0gQERCVVNfQ0ZMQUdTQAorREJVU19MSUJTID0gQERCVVNfTElCU0AKK0RCVVNfU1lTVEVNX0JVU19ERUZBVUxUX0FERFJFU1MgPSBAREJVU19TWVNURU1fQlVTX0RFRkFVTFRfQUREUkVTU0AKK0RCVVNfU1lTX0RJUiA9IEBEQlVTX1NZU19ESVJACitERUZTID0gQERFRlNACitERVBESVIgPSBAREVQRElSQAorRExMVE9PTCA9IEBETExUT09MQAorRE9YWUdFTl9QQVBFUl9TSVpFID0gQERPWFlHRU5fUEFQRVJfU0laRUAKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRFhfQ09ORklHID0gQERYX0NPTkZJR0AKK0RYX0RPQ0RJUiA9IEBEWF9ET0NESVJACitEWF9ET1QgPSBARFhfRE9UQAorRFhfRE9YWUdFTiA9IEBEWF9ET1hZR0VOQAorRFhfRFZJUFMgPSBARFhfRFZJUFNACitEWF9FR1JFUCA9IEBEWF9FR1JFUEAKK0RYX0VOViA9IEBEWF9FTlZACitEWF9GTEFHX2NoaSA9IEBEWF9GTEFHX2NoaUAKK0RYX0ZMQUdfY2htID0gQERYX0ZMQUdfY2htQAorRFhfRkxBR19kb2MgPSBARFhfRkxBR19kb2NACitEWF9GTEFHX2RvdCA9IEBEWF9GTEFHX2RvdEAKK0RYX0ZMQUdfaHRtbCA9IEBEWF9GTEFHX2h0bWxACitEWF9GTEFHX21hbiA9IEBEWF9GTEFHX21hbkAKK0RYX0ZMQUdfcGRmID0gQERYX0ZMQUdfcGRmQAorRFhfRkxBR19wcyA9IEBEWF9GTEFHX3BzQAorRFhfRkxBR19ydGYgPSBARFhfRkxBR19ydGZACitEWF9GTEFHX3htbCA9IEBEWF9GTEFHX3htbEAKK0RYX0hIQyA9IEBEWF9ISENACitEWF9MQVRFWCA9IEBEWF9MQVRFWEAKK0RYX01BS0VJTkRFWCA9IEBEWF9NQUtFSU5ERVhACitEWF9QREZMQVRFWCA9IEBEWF9QREZMQVRFWEAKK0RYX1BFUkwgPSBARFhfUEVSTEAKK0RYX1BST0pFQ1QgPSBARFhfUFJPSkVDVEAKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRVhFRVhUID0gQEVYRUVYVEAKK0ZHUkVQID0gQEZHUkVQQAorR0FDVVRJTCA9IEBHQUNVVElMQAorR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKK0dMSUIyMF9DRkxBR1MgPSBAR0xJQjIwX0NGTEFHU0AKK0dMSUIyMF9MSUJTID0gQEdMSUIyMF9MSUJTQAorR01PRklMRVMgPSBAR01PRklMRVNACitHTVNHRk1UID0gQEdNU0dGTVRACitHT0JKRUNUX0NGTEFHUyA9IEBHT0JKRUNUX0NGTEFHU0AKK0dPQkpFQ1RfTElCUyA9IEBHT0JKRUNUX0xJQlNACitHUkVQID0gQEdSRVBACitHVEsyMF9DRkxBR1MgPSBAR1RLMjBfQ0ZMQUdTQAorR1RLMjBfTElCUyA9IEBHVEsyMF9MSUJTQAorR1RLMzBfQ0ZMQUdTID0gQEdUSzMwX0NGTEFHU0AKK0dUSzMwX0xJQlMgPSBAR1RLMzBfTElCU0AKK0hPV0xfQ09NUEFUX1ZFUlNJT04gPSBASE9XTF9DT01QQVRfVkVSU0lPTkAKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSU5TVE9CSkVYVCA9IEBJTlNUT0JKRVhUQAorSU5UTExJQlMgPSBASU5UTExJQlNACitJTlRMVE9PTF9FWFRSQUNUID0gQElOVExUT09MX0VYVFJBQ1RACitJTlRMVE9PTF9NRVJHRSA9IEBJTlRMVE9PTF9NRVJHRUAKK0lOVExUT09MX1BFUkwgPSBASU5UTFRPT0xfUEVSTEAKK0lOVExUT09MX1VQREFURSA9IEBJTlRMVE9PTF9VUERBVEVACitJTlRST1NQRUNUSU9OX0NGTEFHUyA9IEBJTlRST1NQRUNUSU9OX0NGTEFHU0AKK0lOVFJPU1BFQ1RJT05fQ09NUElMRVIgPSBASU5UUk9TUEVDVElPTl9DT01QSUxFUkAKK0lOVFJPU1BFQ1RJT05fR0VORVJBVEUgPSBASU5UUk9TUEVDVElPTl9HRU5FUkFURUAKK0lOVFJPU1BFQ1RJT05fR0lSRElSID0gQElOVFJPU1BFQ1RJT05fR0lSRElSQAorSU5UUk9TUEVDVElPTl9MSUJTID0gQElOVFJPU1BFQ1RJT05fTElCU0AKK0lOVFJPU1BFQ1RJT05fTUFLRUZJTEUgPSBASU5UUk9TUEVDVElPTl9NQUtFRklMRUAKK0lOVFJPU1BFQ1RJT05fU0NBTk5FUiA9IEBJTlRST1NQRUNUSU9OX1NDQU5ORVJACitJTlRST1NQRUNUSU9OX1RZUEVMSUJESVIgPSBASU5UUk9TUEVDVElPTl9UWVBFTElCRElSQAorTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMSUJBVkFISV9DTElFTlRfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NMSUVOVF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9DT01NT05fVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NPTU1PTl9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9DT01QQVRfSE9XTF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ09NUEFUX0hPV0xfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfQ09NUEFUX0xJQkROU19TRF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ09NUEFUX0xJQkROU19TRF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9DT1JFX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DT1JFX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0dMSUJfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0dMSUJfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfR09CSkVDVF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfR09CSkVDVF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9RVDNfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX1FUM19WRVJTSU9OX0lORk9ACitMSUJBVkFISV9RVDRfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX1FUNF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9VSV9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfVUlfVkVSU0lPTl9JTkZPQAorTElCREFFTU9OX0NGTEFHUyA9IEBMSUJEQUVNT05fQ0ZMQUdTQAorTElCREFFTU9OX0xJQlMgPSBATElCREFFTU9OX0xJQlNACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQExJQlNACitMSUJUT09MID0gQExJQlRPT0xACitMSVBPID0gQExJUE9ACitMTl9TID0gQExOX1NACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACitNQ1MgPSBATUNTQAorTURBU1NFTUJMRVIgPSBATURBU1NFTUJMRVJACitNS0RJUl9QID0gQE1LRElSX1BACitNS0lOU1RBTExESVJTID0gQE1LSU5TVEFMTERJUlNACitNT0NfUVQzID0gQE1PQ19RVDNACitNT0NfUVQ0ID0gQE1PQ19RVDRACitNT05PRE9DRVIgPSBATU9OT0RPQ0VSQAorTU9OT0RPQ19DRkxBR1MgPSBATU9OT0RPQ19DRkxBR1NACitNT05PRE9DX0RJUiA9IEBNT05PRE9DX0RJUkAKK01PTk9ET0NfTElCUyA9IEBNT05PRE9DX0xJQlNACitNU0dGTVQgPSBATVNHRk1UQAorTVNHRk1UX09QVFMgPSBATVNHRk1UX09QVFNACitNU0dNRVJHRSA9IEBNU0dNRVJHRUAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPVE9PTCA9IEBPVE9PTEAKK09UT09MNjQgPSBAT1RPT0w2NEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAorUEtHX0NPTkZJR19MSUJESVIgPSBAUEtHX0NPTkZJR19MSUJESVJACitQS0dfQ09ORklHX1BBVEggPSBAUEtHX0NPTkZJR19QQVRIQAorUE9GSUxFUyA9IEBQT0ZJTEVTQAorUE9TVUIgPSBAUE9TVUJACitQT19JTl9EQVRBRElSX0ZBTFNFID0gQFBPX0lOX0RBVEFESVJfRkFMU0VACitQT19JTl9EQVRBRElSX1RSVUUgPSBAUE9fSU5fREFUQURJUl9UUlVFQAorUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAorUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACitQVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAorUFlUSE9OID0gQFBZVEhPTkAKK1BZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACitQWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAorUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAorUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACitRVDNfQ0ZMQUdTID0gQFFUM19DRkxBR1NACitRVDNfTElCUyA9IEBRVDNfTElCU0AKK1FUNF9DRkxBR1MgPSBAUVQ0X0NGTEFHU0AKK1FUNF9MSUJTID0gQFFUNF9MSUJTQAorUkFOTElCID0gQFJBTkxJQkAKK1NFRCA9IEBTRURACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU1RPVyA9IEBTVE9XQAorU1RSSVAgPSBAU1RSSVBACitVU0VfTkxTID0gQFVTRV9OTFNACitWRVJTSU9OID0gQFZFUlNJT05ACitWSVNJQklMSVRZX0hJRERFTl9DRkxBR1MgPSBAVklTSUJJTElUWV9ISURERU5fQ0ZMQUdTQAorWEdFVFRFWFQgPSBAWEdFVFRFWFRACitYTUxfQ0ZMQUdTID0gQFhNTF9DRkxBR1NACitYTUxfTElCUyA9IEBYTUxfTElCU0AKK2Fic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACithYnNfc3JjZGlyID0gQGFic19zcmNkaXJACithYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACithYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKK2FjX2N0X0FSID0gQGFjX2N0X0FSQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9DWFggPSBAYWNfY3RfQ1hYQAorYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAorYWN4X3B0aHJlYWRfY29uZmlnID0gQGFjeF9wdGhyZWFkX2NvbmZpZ0AKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYXZhaGlfcnVudGltZV9kaXIgPSBAYXZhaGlfcnVudGltZV9kaXJACithdmFoaV9zb2NrZXQgPSBAYXZhaGlfc29ja2V0QAorYXZhaGlsb2NhbGVkaXIgPSBAYXZhaGlsb2NhbGVkaXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitidWlsZGRpciA9IEBidWlsZGRpckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZG9jZGlyID0gQGRvY2RpckAKK2R2aWRpciA9IEBkdmlkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2hhdmVfcGtnX2NvbmZpZyA9IEBoYXZlX3BrZ19jb25maWdACitoYXZlX3htbHRvbWFuID0gQGhhdmVfeG1sdG9tYW5ACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAoraW50ZXJmYWNlc2RpciA9IEBpbnRlcmZhY2VzZGlyQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3BrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACitwa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3BzZGlyID0gQHBzZGlyQAorcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKK3B5dGhvbmRpciA9IEBweXRob25kaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACitzeXN0ZW1kc3lzdGVtdW5pdGRpciA9IEBzeXN0ZW1kc3lzdGVtdW5pdGRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorCisjIFRoaXMgY29vbCBkZWJ1ZyB0cmFwIHdvcmtzIG9uIGkzODYvZ2NjIG9ubHkKK0FNX0NGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKSAnLURERUJVR19UUkFQPV9fYXNtX18oImludCAkJDMiKScKK0BIQVZFX0dMSUJfVFJVRUBhdmFoaWdsaWJpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9hdmFoaS1nbGliCitASEFWRV9HTElCX1RSVUVAYXZhaGlnbGliaW5jbHVkZV9IRUFERVJTID0gXAorQEhBVkVfR0xJQl9UUlVFQAlnbGliLXdhdGNoLmggXAorQEhBVkVfR0xJQl9UUlVFQAlnbGliLW1hbGxvYy5oCisKK0BIQVZFX0dMSUJfVFJVRUBsaWJfTFRMSUJSQVJJRVMgPSBcCitASEFWRV9HTElCX1RSVUVACWxpYmF2YWhpLWdsaWIubGEKKworQEhBVkVfR0xJQl9UUlVFQGxpYmF2YWhpX2dsaWJfbGFfU09VUkNFUyA9IFwKK0BIQVZFX0dMSUJfVFJVRUAJZ2xpYi13YXRjaC5jIGdsaWItd2F0Y2guaCBcCitASEFWRV9HTElCX1RSVUVACWdsaWItbWFsbG9jLmggZ2xpYi1tYWxsb2MuYworCitASEFWRV9HTElCX1RSVUVAbGliYXZhaGlfZ2xpYl9sYV9DRkxBR1MgPSAkKEFNX0NGTEFHUykgJChHTElCMjBfQ0ZMQUdTKQorQEhBVkVfR0xJQl9UUlVFQGxpYmF2YWhpX2dsaWJfbGFfTElCQUREID0gJChBTV9MREFERCkgLi4vYXZhaGktY29tbW9uL2xpYmF2YWhpLWNvbW1vbi5sYSAkKEdMSUIyMF9MSUJTKQorQEhBVkVfR0xJQl9UUlVFQGxpYmF2YWhpX2dsaWJfbGFfTERGTEFHUyA9ICQoQU1fTERGTEFHUykgIC12ZXJzaW9uLWluZm8gJChMSUJBVkFISV9HTElCX1ZFUlNJT05fSU5GTykKK0BIQVZFX0dMSUJfVFJVRUBnbGliX3dhdGNoX3Rlc3RfU09VUkNFUyA9IFwKK0BIQVZFX0dMSUJfVFJVRUAJZ2xpYi13YXRjaC5jIGdsaWItd2F0Y2guaCBcCitASEFWRV9HTElCX1RSVUVACWdsaWItd2F0Y2gtdGVzdC5jCisKK0BIQVZFX0dMSUJfVFJVRUBnbGliX3dhdGNoX3Rlc3RfQ0ZMQUdTID0gJChBTV9DRkxBR1MpICQoR0xJQjIwX0NGTEFHUykKK0BIQVZFX0dMSUJfVFJVRUBnbGliX3dhdGNoX3Rlc3RfTERBREQgPSAkKEFNX0xEQUREKSAuLi9hdmFoaS1jb21tb24vbGliYXZhaGktY29tbW9uLmxhICQoR0xJQjIwX0xJQlMpCithbGw6IGFsbC1hbQorCisuU1VGRklYRVM6CisuU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCiskKHNyY2RpcikvTWFrZWZpbGUuaW46ICAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAorCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiBhdmFoaS1nbGliL01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiBhdmFoaS1nbGliL01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKK2luc3RhbGwtbGliTFRMSUJSQVJJRVM6ICQobGliX0xUTElCUkFSSUVTKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQobGliZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQobGliZGlyKSIKKwlAbGlzdD0nJChsaWJfTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChsaWJkaXIpIiB8fCBsaXN0PTsgXAorCWxpc3QyPTsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICQkcDsgdGhlbiBcCisJICAgIGxpc3QyPSIkJGxpc3QyICQkcCI7IFwKKwkgIGVsc2UgOjsgZmk7IFwKKwlkb25lOyBcCisJdGVzdCAteiAiJCRsaXN0MiIgfHwgeyBcCisJICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgJyQoREVTVERJUikkKGxpYmRpciknIjsgXAorCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgIiQoREVTVERJUikkKGxpYmRpcikiOyBcCisJfQorCit1bmluc3RhbGwtbGliTFRMSUJSQVJJRVM6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChsaWJfTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChsaWJkaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgJChhbV9fc3RyaXBfZGlyKSBcCisJICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgJyQoREVTVERJUikkKGxpYmRpcikvJCRmJyI7IFwKKwkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICIkKERFU1RESVIpJChsaWJkaXIpLyQkZiI7IFwKKwlkb25lCisKK2NsZWFuLWxpYkxUTElCUkFSSUVTOgorCS10ZXN0IC16ICIkKGxpYl9MVExJQlJBUklFUykiIHx8IHJtIC1mICQobGliX0xUTElCUkFSSUVTKQorCUBsaXN0PSckKGxpYl9MVExJQlJBUklFUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGRpcj0iYGVjaG8gJCRwIHwgc2VkIC1lICdzfC9bXi9dKiQkfHwnYCI7IFwKKwkgIHRlc3QgIiQkZGlyIiAhPSAiJCRwIiB8fCBkaXI9LjsgXAorCSAgZWNobyAicm0gLWYgXCIkJHtkaXJ9L3NvX2xvY2F0aW9uc1wiIjsgXAorCSAgcm0gLWYgIiQke2Rpcn0vc29fbG9jYXRpb25zIjsgXAorCWRvbmUKK2xpYmF2YWhpLWdsaWIubGE6ICQobGliYXZhaGlfZ2xpYl9sYV9PQkpFQ1RTKSAkKGxpYmF2YWhpX2dsaWJfbGFfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYmF2YWhpX2dsaWJfbGFfREVQRU5ERU5DSUVTKSAKKwkkKEFNX1ZfQ0NMRCkkKGxpYmF2YWhpX2dsaWJfbGFfTElOSykgJChhbV9saWJhdmFoaV9nbGliX2xhX3JwYXRoKSAkKGxpYmF2YWhpX2dsaWJfbGFfT0JKRUNUUykgJChsaWJhdmFoaV9nbGliX2xhX0xJQkFERCkgJChMSUJTKQorCitjbGVhbi1ub2luc3RQUk9HUkFNUzoKKwlAbGlzdD0nJChub2luc3RfUFJPR1JBTVMpJzsgdGVzdCAtbiAiJCRsaXN0IiB8fCBleGl0IDA7IFwKKwllY2hvICIgcm0gLWYiICQkbGlzdDsgXAorCXJtIC1mICQkbGlzdCB8fCBleGl0ICQkPzsgXAorCXRlc3QgLW4gIiQoRVhFRVhUKSIgfHwgZXhpdCAwOyBcCisJbGlzdD1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkICdzLyQoRVhFRVhUKSQkLy8nYDsgXAorCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCisJcm0gLWYgJCRsaXN0CitnbGliLXdhdGNoLXRlc3QkKEVYRUVYVCk6ICQoZ2xpYl93YXRjaF90ZXN0X09CSkVDVFMpICQoZ2xpYl93YXRjaF90ZXN0X0RFUEVOREVOQ0lFUykgJChFWFRSQV9nbGliX3dhdGNoX3Rlc3RfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgZ2xpYi13YXRjaC10ZXN0JChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChnbGliX3dhdGNoX3Rlc3RfTElOSykgJChnbGliX3dhdGNoX3Rlc3RfT0JKRUNUUykgJChnbGliX3dhdGNoX3Rlc3RfTERBREQpICQoTElCUykKKworbW9zdGx5Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi4kKE9CSkVYVCkKKworZGlzdGNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICoudGFiLmMKKworQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2dsaWJfd2F0Y2hfdGVzdC1nbGliLXdhdGNoLXRlc3QuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2dsaWJfd2F0Y2hfdGVzdC1nbGliLXdhdGNoLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJhdmFoaV9nbGliX2xhLWdsaWItbWFsbG9jLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliYXZhaGlfZ2xpYl9sYS1nbGliLXdhdGNoLlBsb0BhbV9fcXVvdGVACisKKy5jLm86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jICQ8CisKKy5jLm9iajoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyBgJChDWUdQQVRIX1cpICckPCdgCisKKy5jLmxvOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAorCitsaWJhdmFoaV9nbGliX2xhLWdsaWItd2F0Y2gubG86IGdsaWItd2F0Y2guYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmF2YWhpX2dsaWJfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmF2YWhpX2dsaWJfbGEtZ2xpYi13YXRjaC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliYXZhaGlfZ2xpYl9sYS1nbGliLXdhdGNoLlRwbyAtYyAtbyBsaWJhdmFoaV9nbGliX2xhLWdsaWItd2F0Y2gubG8gYHRlc3QgLWYgJ2dsaWItd2F0Y2guYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ2xpYi13YXRjaC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJhdmFoaV9nbGliX2xhLWdsaWItd2F0Y2guVHBvICQoREVQRElSKS9saWJhdmFoaV9nbGliX2xhLWdsaWItd2F0Y2guUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ2xpYi13YXRjaC5jJyBvYmplY3Q9J2xpYmF2YWhpX2dsaWJfbGEtZ2xpYi13YXRjaC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmF2YWhpX2dsaWJfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliYXZhaGlfZ2xpYl9sYS1nbGliLXdhdGNoLmxvIGB0ZXN0IC1mICdnbGliLXdhdGNoLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdsaWItd2F0Y2guYworCitsaWJhdmFoaV9nbGliX2xhLWdsaWItbWFsbG9jLmxvOiBnbGliLW1hbGxvYy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliYXZhaGlfZ2xpYl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliYXZhaGlfZ2xpYl9sYS1nbGliLW1hbGxvYy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliYXZhaGlfZ2xpYl9sYS1nbGliLW1hbGxvYy5UcG8gLWMgLW8gbGliYXZhaGlfZ2xpYl9sYS1nbGliLW1hbGxvYy5sbyBgdGVzdCAtZiAnZ2xpYi1tYWxsb2MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ2xpYi1tYWxsb2MuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliYXZhaGlfZ2xpYl9sYS1nbGliLW1hbGxvYy5UcG8gJChERVBESVIpL2xpYmF2YWhpX2dsaWJfbGEtZ2xpYi1tYWxsb2MuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ2xpYi1tYWxsb2MuYycgb2JqZWN0PSdsaWJhdmFoaV9nbGliX2xhLWdsaWItbWFsbG9jLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliYXZhaGlfZ2xpYl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJhdmFoaV9nbGliX2xhLWdsaWItbWFsbG9jLmxvIGB0ZXN0IC1mICdnbGliLW1hbGxvYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BnbGliLW1hbGxvYy5jCisKK2dsaWJfd2F0Y2hfdGVzdC1nbGliLXdhdGNoLm86IGdsaWItd2F0Y2guYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGdsaWJfd2F0Y2hfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ2xpYl93YXRjaF90ZXN0LWdsaWItd2F0Y2gubyAtTUQgLU1QIC1NRiAkKERFUERJUikvZ2xpYl93YXRjaF90ZXN0LWdsaWItd2F0Y2guVHBvIC1jIC1vIGdsaWJfd2F0Y2hfdGVzdC1nbGliLXdhdGNoLm8gYHRlc3QgLWYgJ2dsaWItd2F0Y2guYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ2xpYi13YXRjaC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9nbGliX3dhdGNoX3Rlc3QtZ2xpYi13YXRjaC5UcG8gJChERVBESVIpL2dsaWJfd2F0Y2hfdGVzdC1nbGliLXdhdGNoLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ2xpYi13YXRjaC5jJyBvYmplY3Q9J2dsaWJfd2F0Y2hfdGVzdC1nbGliLXdhdGNoLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGdsaWJfd2F0Y2hfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBnbGliX3dhdGNoX3Rlc3QtZ2xpYi13YXRjaC5vIGB0ZXN0IC1mICdnbGliLXdhdGNoLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdsaWItd2F0Y2guYworCitnbGliX3dhdGNoX3Rlc3QtZ2xpYi13YXRjaC5vYmo6IGdsaWItd2F0Y2guYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGdsaWJfd2F0Y2hfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ2xpYl93YXRjaF90ZXN0LWdsaWItd2F0Y2gub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9nbGliX3dhdGNoX3Rlc3QtZ2xpYi13YXRjaC5UcG8gLWMgLW8gZ2xpYl93YXRjaF90ZXN0LWdsaWItd2F0Y2gub2JqIGBpZiB0ZXN0IC1mICdnbGliLXdhdGNoLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZ2xpYi13YXRjaC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nbGliLXdhdGNoLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2dsaWJfd2F0Y2hfdGVzdC1nbGliLXdhdGNoLlRwbyAkKERFUERJUikvZ2xpYl93YXRjaF90ZXN0LWdsaWItd2F0Y2guUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnbGliLXdhdGNoLmMnIG9iamVjdD0nZ2xpYl93YXRjaF90ZXN0LWdsaWItd2F0Y2gub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChnbGliX3dhdGNoX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZ2xpYl93YXRjaF90ZXN0LWdsaWItd2F0Y2gub2JqIGBpZiB0ZXN0IC1mICdnbGliLXdhdGNoLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZ2xpYi13YXRjaC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nbGliLXdhdGNoLmMnOyBmaWAKKworZ2xpYl93YXRjaF90ZXN0LWdsaWItd2F0Y2gtdGVzdC5vOiBnbGliLXdhdGNoLXRlc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGdsaWJfd2F0Y2hfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ2xpYl93YXRjaF90ZXN0LWdsaWItd2F0Y2gtdGVzdC5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9nbGliX3dhdGNoX3Rlc3QtZ2xpYi13YXRjaC10ZXN0LlRwbyAtYyAtbyBnbGliX3dhdGNoX3Rlc3QtZ2xpYi13YXRjaC10ZXN0Lm8gYHRlc3QgLWYgJ2dsaWItd2F0Y2gtdGVzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BnbGliLXdhdGNoLXRlc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvZ2xpYl93YXRjaF90ZXN0LWdsaWItd2F0Y2gtdGVzdC5UcG8gJChERVBESVIpL2dsaWJfd2F0Y2hfdGVzdC1nbGliLXdhdGNoLXRlc3QuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnbGliLXdhdGNoLXRlc3QuYycgb2JqZWN0PSdnbGliX3dhdGNoX3Rlc3QtZ2xpYi13YXRjaC10ZXN0Lm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGdsaWJfd2F0Y2hfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBnbGliX3dhdGNoX3Rlc3QtZ2xpYi13YXRjaC10ZXN0Lm8gYHRlc3QgLWYgJ2dsaWItd2F0Y2gtdGVzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BnbGliLXdhdGNoLXRlc3QuYworCitnbGliX3dhdGNoX3Rlc3QtZ2xpYi13YXRjaC10ZXN0Lm9iajogZ2xpYi13YXRjaC10ZXN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChnbGliX3dhdGNoX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGdsaWJfd2F0Y2hfdGVzdC1nbGliLXdhdGNoLXRlc3Qub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9nbGliX3dhdGNoX3Rlc3QtZ2xpYi13YXRjaC10ZXN0LlRwbyAtYyAtbyBnbGliX3dhdGNoX3Rlc3QtZ2xpYi13YXRjaC10ZXN0Lm9iaiBgaWYgdGVzdCAtZiAnZ2xpYi13YXRjaC10ZXN0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZ2xpYi13YXRjaC10ZXN0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2dsaWItd2F0Y2gtdGVzdC5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9nbGliX3dhdGNoX3Rlc3QtZ2xpYi13YXRjaC10ZXN0LlRwbyAkKERFUERJUikvZ2xpYl93YXRjaF90ZXN0LWdsaWItd2F0Y2gtdGVzdC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dsaWItd2F0Y2gtdGVzdC5jJyBvYmplY3Q9J2dsaWJfd2F0Y2hfdGVzdC1nbGliLXdhdGNoLXRlc3Qub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChnbGliX3dhdGNoX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZ2xpYl93YXRjaF90ZXN0LWdsaWItd2F0Y2gtdGVzdC5vYmogYGlmIHRlc3QgLWYgJ2dsaWItd2F0Y2gtdGVzdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dsaWItd2F0Y2gtdGVzdC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nbGliLXdhdGNoLXRlc3QuYyc7IGZpYAorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworaW5zdGFsbC1hdmFoaWdsaWJpbmNsdWRlSEVBREVSUzogJChhdmFoaWdsaWJpbmNsdWRlX0hFQURFUlMpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJdGVzdCAteiAiJChhdmFoaWdsaWJpbmNsdWRlZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQoYXZhaGlnbGliaW5jbHVkZWRpcikiCisJQGxpc3Q9JyQoYXZhaGlnbGliaW5jbHVkZV9IRUFERVJTKSc7IHRlc3QgLW4gIiQoYXZhaGlnbGliaW5jbHVkZWRpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAorCSAgZWNobyAiJCRkJCRwIjsgXAorCWRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAorCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKKwkgIGVjaG8gIiAkKElOU1RBTExfSEVBREVSKSAkJGZpbGVzICckKERFU1RESVIpJChhdmFoaWdsaWJpbmNsdWRlZGlyKSciOyBcCisJICAkKElOU1RBTExfSEVBREVSKSAkJGZpbGVzICIkKERFU1RESVIpJChhdmFoaWdsaWJpbmNsdWRlZGlyKSIgfHwgZXhpdCAkJD87IFwKKwlkb25lCisKK3VuaW5zdGFsbC1hdmFoaWdsaWJpbmNsdWRlSEVBREVSUzoKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKGF2YWhpZ2xpYmluY2x1ZGVfSEVBREVSUyknOyB0ZXN0IC1uICIkKGF2YWhpZ2xpYmluY2x1ZGVkaXIpIiB8fCBsaXN0PTsgXAorCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgc2VkIC1lICdzfF4uKi98fCdgOyBcCisJZGlyPSckKERFU1RESVIpJChhdmFoaWdsaWJpbmNsdWRlZGlyKSc7ICQoYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpcikKKworSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlta2lkIC1mSUQgJCR1bmlxdWUKK3RhZ3M6IFRBR1MKKworVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlzZXQgeDsgXAorCWhlcmU9YHB3ZGA7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJc2hpZnQ7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKKwkgIGVsc2UgXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgJCR1bmlxdWU7IFwKKwkgIGZpOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAorCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorCSAgICAgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUgJChMVExJQlJBUklFUykgJChQUk9HUkFNUykgJChIRUFERVJTKQoraW5zdGFsbGRpcnM6CisJZm9yIGRpciBpbiAiJChERVNURElSKSQobGliZGlyKSIgIiQoREVTVERJUikkKGF2YWhpZ2xpYmluY2x1ZGVkaXIpIjsgZG8gXAorCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAorCWRvbmUKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgICAgIGluc3RhbGw7IFwKKwllbHNlIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAorCWZpCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tYW0KKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGliTFRMSUJSQVJJRVMgY2xlYW4tbGlidG9vbCBcCisJY2xlYW4tbm9pbnN0UFJPR1JBTVMgbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKKwlkaXN0Y2xlYW4tdGFncworCitkdmk6IGR2aS1hbQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtYW0KKworaHRtbC1hbToKKworaW5mbzogaW5mby1hbQorCitpbmZvLWFtOgorCitpbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtYXZhaGlnbGliaW5jbHVkZUhFQURFUlMKKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCisKK2luc3RhbGwtZHZpLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06IGluc3RhbGwtbGliTFRMSUJSQVJJRVMKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtYXZhaGlnbGliaW5jbHVkZUhFQURFUlMgXAorCXVuaW5zdGFsbC1saWJMVExJQlJBUklFUworCisuTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisKKy5QSE9OWTogQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKKwljbGVhbi1saWJMVExJQlJBUklFUyBjbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdFBST0dSQU1TIGN0YWdzIFwKKwlkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIFwKKwlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gXAorCWluc3RhbGwtYXZhaGlnbGliaW5jbHVkZUhFQURFUlMgaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBcCisJaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBcCisJaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIFwKKwlpbnN0YWxsLWxpYkxUTElCUkFSSUVTIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKKwlpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgXAorCWluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIFwKKwltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBcCisJbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAorCXRhZ3MgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSB1bmluc3RhbGwtYXZhaGlnbGliaW5jbHVkZUhFQURFUlMgXAorCXVuaW5zdGFsbC1saWJMVExJQlJBUklFUworCisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1nbGliL2dsaWItbWFsbG9jLmMgYi9hdmFoaS0wLjYuMzEvYXZhaGktZ2xpYi9nbGliLW1hbGxvYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwYWMxZDEKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktZ2xpYi9nbGliLW1hbGxvYy5jCkBAIC0wLDAgKzEsNTUgQEAKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2xsaXN0Lmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL21hbGxvYy5oPgorCisjaW5jbHVkZSAiZ2xpYi1tYWxsb2MuaCIKKworc3RhdGljIHZvaWQqIG1hbGxvY19nbHVlKHNpemVfdCBsKSB7CisgICAgcmV0dXJuIGdfbWFsbG9jKGwpOworfQorCitzdGF0aWMgdm9pZCogcmVhbGxvY19nbHVlKHZvaWQgKnAsIHNpemVfdCBsKSB7CisgICAgcmV0dXJuIGdfcmVhbGxvYyhwLCBsKTsKK30KKworc3RhdGljIHZvaWQqIGNhbGxvY19nbHVlKHNpemVfdCBubWVtYiwgc2l6ZV90IHNpemUpIHsKKyAgICByZXR1cm4gZ19tYWxsb2MwKG5tZW1iICogc2l6ZSk7Cit9CisKK2NvbnN0IEF2YWhpQWxsb2NhdG9yICphdmFoaV9nbGliX2FsbG9jYXRvcih2b2lkKSB7CisKKyAgICBzdGF0aWMgQXZhaGlBbGxvY2F0b3IgYWxsb2NhdG9yOworICAgIHN0YXRpYyBpbnQgYWxsb2NhdG9yX2luaXRpYWxpemVkID0gMDsKKworICAgIGlmICghYWxsb2NhdG9yX2luaXRpYWxpemVkKSB7CisgICAgICAgIGFsbG9jYXRvci5tYWxsb2MgPSBtYWxsb2NfZ2x1ZTsKKyAgICAgICAgYWxsb2NhdG9yLmZyZWUgPSBnX2ZyZWU7CisgICAgICAgIGFsbG9jYXRvci5yZWFsbG9jID0gcmVhbGxvY19nbHVlOworICAgICAgICBhbGxvY2F0b3IuY2FsbG9jID0gY2FsbG9jX2dsdWU7CisgICAgICAgIGFsbG9jYXRvcl9pbml0aWFsaXplZCA9IDE7CisgICAgfQorCisgICAgcmV0dXJuICZhbGxvY2F0b3I7Cit9CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktZ2xpYi9nbGliLW1hbGxvYy5oIGIvYXZhaGktMC42LjMxL2F2YWhpLWdsaWIvZ2xpYi1tYWxsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjE4OWQyCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWdsaWIvZ2xpYi1tYWxsb2MuaApAQCAtMCwwICsxLDM5IEBACisjaWZuZGVmIGZvb2dsaWJtYWxsb2NoZm9vCisjZGVmaW5lIGZvb2dsaWJtYWxsb2NoZm9vCisKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworLyoqIFxmaWxlIGdsaWItbWFsbG9jLmggR0xpYidzIG1lbW9yeSBhbGxvY2F0b3IgZm9yIEF2YWhpICovCisKKyNpbmNsdWRlIDxnbGliLmg+CisKKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vY2RlY2wuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vbWFsbG9jLmg+CisKK0FWQUhJX0NfREVDTF9CRUdJTgorCisvKiogUmV0dXJuIGEgcG9pbnRlciB0byBhIG1lbW9yeSBhbGxvY2F0b3IgdGhhdCB1c2VzIEdMaWIncyBnX21hbGxvYygpCisgYW5kIGZyaWVuZHMuIFRoZSByZXR1cm5lZCBzdHJ1Y3R1cmUgaXMgc3RhdGljYWxseSBhbGxvY2F0ZWQsIGFuZCBuZWVkcworIG5vdCB0byBiZSBjb3BpZWQgb3IgZnJlZWQuIFBhc3MgdGhpcyBkaXJlY3RseSB0byBhdmFoaV9zZXRfYWxsb2NhdG9yKCkuICovCitjb25zdCBBdmFoaUFsbG9jYXRvciAqIGF2YWhpX2dsaWJfYWxsb2NhdG9yKHZvaWQpOworCitBVkFISV9DX0RFQ0xfRU5ECisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWdsaWIvZ2xpYi13YXRjaC10ZXN0LmMgYi9hdmFoaS0wLjYuMzEvYXZhaGktZ2xpYi9nbGliLXdhdGNoLXRlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2M2NjgzCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWdsaWIvZ2xpYi13YXRjaC10ZXN0LmMKQEAgLTAsMCArMSw4OSBAQAorLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vd2F0Y2guaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vdGltZXZhbC5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9nY2NtYWNyby5oPgorCisjaW5jbHVkZSAiZ2xpYi13YXRjaC5oIgorCitzdGF0aWMgY29uc3QgQXZhaGlQb2xsICphcGkgPSBOVUxMOworc3RhdGljIEdNYWluTG9vcCAqbG9vcCA9IE5VTEw7CisKK3N0YXRpYyB2b2lkIGNhbGxiYWNrKEF2YWhpV2F0Y2ggKncsIGludCBmZCwgQXZhaGlXYXRjaEV2ZW50IGV2ZW50LCBBVkFISV9HQ0NfVU5VU0VEIHZvaWQgKnVzZXJkYXRhKSB7CisKKyAgICBpZiAoZXZlbnQgJiBBVkFISV9XQVRDSF9JTikgeworICAgICAgICBzc2l6ZV90IHI7CisgICAgICAgIGNoYXIgYzsKKworICAgICAgICBpZiAoKHIgPSByZWFkKGZkLCAmYywgMSkpIDw9IDApIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAicmVhZCgpIGZhaWxlZDogJXNcbiIsIHIgPCAwID8gc3RyZXJyb3IoZXJybm8pIDogIkVPRiIpOworICAgICAgICAgICAgYXBpLT53YXRjaF9mcmVlKHcpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgcHJpbnRmKCJSZWFkOiAlY1xuIiwgYyA+PSAzMiAmJiBjIDwgMTI3ID8gYyA6ICcuJyk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3YWtldXAoQXZhaGlUaW1lb3V0ICp0LCBBVkFISV9HQ0NfVU5VU0VEIHZvaWQgKnVzZXJkYXRhKSB7CisgICAgc3RydWN0IHRpbWV2YWwgdHY7CisgICAgc3RhdGljIGludCBpID0gMDsKKworICAgIHByaW50ZigiV2FrZXVwICMlaVxuIiwgaSsrKTsKKworICAgIGlmIChpID4gMTApCisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7CisKKyAgICBhdmFoaV9lbGFwc2VfdGltZSgmdHYsIDEwMDAsIDApOworICAgIGFwaS0+dGltZW91dF91cGRhdGUodCwgJnR2KTsKK30KKworaW50IG1haW4oQVZBSElfR0NDX1VOVVNFRCBpbnQgYXJnYywgQVZBSElfR0NDX1VOVVNFRCBjaGFyICphcmd2W10pIHsKKyAgICBBdmFoaUdMaWJQb2xsICpnOworICAgIHN0cnVjdCB0aW1ldmFsIHR2OworCisgICAgZyA9IGF2YWhpX2dsaWJfcG9sbF9uZXcoTlVMTCwgR19QUklPUklUWV9ERUZBVUxUKTsKKyAgICBhc3NlcnQoZyk7CisKKyAgICBhcGkgPSBhdmFoaV9nbGliX3BvbGxfZ2V0KGcpOworCisgICAgYXBpLT53YXRjaF9uZXcoYXBpLCAwLCBBVkFISV9XQVRDSF9JTiwgY2FsbGJhY2ssIE5VTEwpOworCisgICAgYXZhaGlfZWxhcHNlX3RpbWUoJnR2LCAxMDAwLCAwKTsKKyAgICBhcGktPnRpbWVvdXRfbmV3KGFwaSwgJnR2LCB3YWtldXAsIE5VTEwpOworCisgICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBGQUxTRSk7CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworICAgIGdfbWFpbl9sb29wX3VucmVmKGxvb3ApOworCisgICAgYXZhaGlfZ2xpYl9wb2xsX2ZyZWUoZyk7CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1nbGliL2dsaWItd2F0Y2guYyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1nbGliL2dsaWItd2F0Y2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjYwYmJjCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWdsaWIvZ2xpYi13YXRjaC5jCkBAIC0wLDAgKzEsNDAyIEBACisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9sbGlzdC5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9tYWxsb2MuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vdGltZXZhbC5oPgorCisjaW5jbHVkZSAiZ2xpYi13YXRjaC5oIgorCitzdHJ1Y3QgQXZhaGlXYXRjaCB7CisgICAgQXZhaGlHTGliUG9sbCAqZ2xpYl9wb2xsOworICAgIGludCBkZWFkOworCisgICAgR1BvbGxGRCBwb2xsZmQ7CisgICAgaW50IHBvbGxmZF9hZGRlZDsKKworICAgIEF2YWhpV2F0Y2hDYWxsYmFjayBjYWxsYmFjazsKKyAgICB2b2lkICp1c2VyZGF0YTsKKworICAgIEFWQUhJX0xMSVNUX0ZJRUxEUyhBdmFoaVdhdGNoLCB3YXRjaGVzKTsKK307CisKK3N0cnVjdCBBdmFoaVRpbWVvdXQgeworICAgIEF2YWhpR0xpYlBvbGwgKmdsaWJfcG9sbDsKKyAgICBnYm9vbGVhbiBkZWFkOworCisgICAgZ2Jvb2xlYW4gZW5hYmxlZDsKKyAgICBzdHJ1Y3QgdGltZXZhbCBleHBpcnk7CisKKyAgICBBdmFoaVRpbWVvdXRDYWxsYmFjayBjYWxsYmFjazsKKyAgICB2b2lkICAqdXNlcmRhdGE7CisKKyAgICBBVkFISV9MTElTVF9GSUVMRFMoQXZhaGlUaW1lb3V0LCB0aW1lb3V0cyk7Cit9OworCitzdHJ1Y3QgQXZhaGlHTGliUG9sbCB7CisgICAgR1NvdXJjZSBzb3VyY2U7CisgICAgQXZhaGlQb2xsIGFwaTsKKyAgICBHTWFpbkNvbnRleHQgKmNvbnRleHQ7CisKKyAgICBnYm9vbGVhbiB0aW1lb3V0X3JlcV9jbGVhbnVwOworICAgIGdib29sZWFuIHdhdGNoX3JlcV9jbGVhbnVwOworCisgICAgQVZBSElfTExJU1RfSEVBRChBdmFoaVdhdGNoLCB3YXRjaGVzKTsKKyAgICBBVkFISV9MTElTVF9IRUFEKEF2YWhpVGltZW91dCwgdGltZW91dHMpOworfTsKKworc3RhdGljIHZvaWQgZGVzdHJveV93YXRjaChBdmFoaVdhdGNoICp3KSB7CisgICAgYXNzZXJ0KHcpOworCisgICAgaWYgKHctPnBvbGxmZF9hZGRlZCkKKyAgICAgICAgZ19zb3VyY2VfcmVtb3ZlX3BvbGwoJnctPmdsaWJfcG9sbC0+c291cmNlLCAmdy0+cG9sbGZkKTsKKworICAgIEFWQUhJX0xMSVNUX1JFTU9WRShBdmFoaVdhdGNoLCB3YXRjaGVzLCB3LT5nbGliX3BvbGwtPndhdGNoZXMsIHcpOworCisgICAgYXZhaGlfZnJlZSh3KTsKK30KKworc3RhdGljIHZvaWQgY2xlYW51cF93YXRjaGVzKEF2YWhpR0xpYlBvbGwgKmcsIGludCBhbGwpIHsKKyAgICBBdmFoaVdhdGNoICp3LCAqbmV4dDsKKyAgICBhc3NlcnQoZyk7CisKKyAgICBmb3IgKHcgPSBnLT53YXRjaGVzOyB3OyB3ID0gbmV4dCkgeworICAgICAgICBuZXh0ID0gdy0+d2F0Y2hlc19uZXh0OworCisgICAgICAgIGlmIChhbGwgfHwgdy0+ZGVhZCkKKyAgICAgICAgICAgIGRlc3Ryb3lfd2F0Y2godyk7CisgICAgfQorCisgICAgZy0+d2F0Y2hfcmVxX2NsZWFudXAgPSAwOworfQorCitzdGF0aWMgZ3VzaG9ydCBtYXBfZXZlbnRzX3RvX2dsaWIoQXZhaGlXYXRjaEV2ZW50IGV2ZW50cykgeworICAgIHJldHVybgorICAgICAgICAoZXZlbnRzICYgQVZBSElfV0FUQ0hfSU4gPyBHX0lPX0lOIDogMCkgfAorICAgICAgICAoZXZlbnRzICYgQVZBSElfV0FUQ0hfT1VUID8gR19JT19PVVQgOiAwKSB8CisgICAgICAgIChldmVudHMgJiBBVkFISV9XQVRDSF9FUlIgPyBHX0lPX0VSUiA6IDApIHwKKyAgICAgICAgKGV2ZW50cyAmIEFWQUhJX1dBVENIX0hVUCA/IEdfSU9fSFVQIDogMCk7Cit9CisKK3N0YXRpYyBBdmFoaVdhdGNoRXZlbnQgbWFwX2V2ZW50c19mcm9tX2dsaWIoZ3VzaG9ydCBldmVudHMpIHsKKyAgICByZXR1cm4KKyAgICAgICAgKGV2ZW50cyAmIEdfSU9fSU4gPyBBVkFISV9XQVRDSF9JTiA6IDApIHwKKyAgICAgICAgKGV2ZW50cyAmIEdfSU9fT1VUID8gQVZBSElfV0FUQ0hfT1VUIDogMCkgfAorICAgICAgICAoZXZlbnRzICYgR19JT19FUlIgPyBBVkFISV9XQVRDSF9FUlIgOiAwKSB8CisgICAgICAgIChldmVudHMgJiBHX0lPX0hVUCA/IEFWQUhJX1dBVENIX0hVUCA6IDApOworfQorCitzdGF0aWMgQXZhaGlXYXRjaCogd2F0Y2hfbmV3KGNvbnN0IEF2YWhpUG9sbCAqYXBpLCBpbnQgZmQsIEF2YWhpV2F0Y2hFdmVudCBldmVudHMsIEF2YWhpV2F0Y2hDYWxsYmFjayBjYWxsYmFjaywgdm9pZCAqdXNlcmRhdGEpIHsKKyAgICBBdmFoaVdhdGNoICp3OworICAgIEF2YWhpR0xpYlBvbGwgKmc7CisKKyAgICBhc3NlcnQoYXBpKTsKKyAgICBhc3NlcnQoZmQgPj0gMCk7CisgICAgYXNzZXJ0KGNhbGxiYWNrKTsKKworICAgIGcgPSBhcGktPnVzZXJkYXRhOworICAgIGFzc2VydChnKTsKKworICAgIGlmICghKHcgPSBhdmFoaV9uZXcoQXZhaGlXYXRjaCwgMSkpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHctPmdsaWJfcG9sbCA9IGc7CisgICAgdy0+cG9sbGZkLmZkID0gZmQ7CisgICAgdy0+cG9sbGZkLmV2ZW50cyA9IG1hcF9ldmVudHNfdG9fZ2xpYihldmVudHMpOworICAgIHctPnBvbGxmZC5yZXZlbnRzID0gMDsKKyAgICB3LT5jYWxsYmFjayA9IGNhbGxiYWNrOworICAgIHctPnVzZXJkYXRhID0gdXNlcmRhdGE7CisgICAgdy0+ZGVhZCA9IEZBTFNFOworCisgICAgZ19zb3VyY2VfYWRkX3BvbGwoJmctPnNvdXJjZSwgJnctPnBvbGxmZCk7CisgICAgdy0+cG9sbGZkX2FkZGVkID0gVFJVRTsKKworICAgIEFWQUhJX0xMSVNUX1BSRVBFTkQoQXZhaGlXYXRjaCwgd2F0Y2hlcywgZy0+d2F0Y2hlcywgdyk7CisKKyAgICByZXR1cm4gdzsKK30KKworc3RhdGljIHZvaWQgd2F0Y2hfdXBkYXRlKEF2YWhpV2F0Y2ggKncsIEF2YWhpV2F0Y2hFdmVudCBldmVudHMpIHsKKyAgICBhc3NlcnQodyk7CisgICAgYXNzZXJ0KCF3LT5kZWFkKTsKKworICAgIHctPnBvbGxmZC5ldmVudHMgPSBtYXBfZXZlbnRzX3RvX2dsaWIoZXZlbnRzKTsKK30KKworc3RhdGljIEF2YWhpV2F0Y2hFdmVudCB3YXRjaF9nZXRfZXZlbnRzKEF2YWhpV2F0Y2ggKncpIHsKKyAgICBhc3NlcnQodyk7CisgICAgYXNzZXJ0KCF3LT5kZWFkKTsKKworICAgIHJldHVybiBtYXBfZXZlbnRzX2Zyb21fZ2xpYih3LT5wb2xsZmQucmV2ZW50cyk7Cit9CisKK3N0YXRpYyB2b2lkIHdhdGNoX2ZyZWUoQXZhaGlXYXRjaCAqdykgeworICAgIGFzc2VydCh3KTsKKyAgICBhc3NlcnQoIXctPmRlYWQpOworCisgICAgaWYgKHctPnBvbGxmZF9hZGRlZCkgeworICAgICAgICBnX3NvdXJjZV9yZW1vdmVfcG9sbCgmdy0+Z2xpYl9wb2xsLT5zb3VyY2UsICZ3LT5wb2xsZmQpOworICAgICAgICB3LT5wb2xsZmRfYWRkZWQgPSBGQUxTRTsKKyAgICB9CisKKyAgICB3LT5kZWFkID0gVFJVRTsKKyAgICB3LT5nbGliX3BvbGwtPnRpbWVvdXRfcmVxX2NsZWFudXAgPSBUUlVFOworfQorCitzdGF0aWMgQXZhaGlUaW1lb3V0KiB0aW1lb3V0X25ldyhjb25zdCBBdmFoaVBvbGwgKmFwaSwgY29uc3Qgc3RydWN0IHRpbWV2YWwgKnR2LCBBdmFoaVRpbWVvdXRDYWxsYmFjayBjYWxsYmFjaywgdm9pZCAqdXNlcmRhdGEpIHsKKyAgICBBdmFoaVRpbWVvdXQgKnQ7CisgICAgQXZhaGlHTGliUG9sbCAqZzsKKworICAgIGFzc2VydChhcGkpOworICAgIGFzc2VydChjYWxsYmFjayk7CisKKyAgICBnID0gYXBpLT51c2VyZGF0YTsKKyAgICBhc3NlcnQoZyk7CisKKyAgICBpZiAoISh0ID0gYXZhaGlfbmV3KEF2YWhpVGltZW91dCwgMSkpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHQtPmdsaWJfcG9sbCA9IGc7CisgICAgdC0+ZGVhZCA9IEZBTFNFOworCisgICAgaWYgKCh0LT5lbmFibGVkID0gISF0dikpCisgICAgICAgIHQtPmV4cGlyeSA9ICp0djsKKworICAgIHQtPmNhbGxiYWNrID0gY2FsbGJhY2s7CisgICAgdC0+dXNlcmRhdGEgPSB1c2VyZGF0YTsKKworICAgIEFWQUhJX0xMSVNUX1BSRVBFTkQoQXZhaGlUaW1lb3V0LCB0aW1lb3V0cywgZy0+dGltZW91dHMsIHQpOworCisgICAgcmV0dXJuIHQ7Cit9CisKK3N0YXRpYyB2b2lkIHRpbWVvdXRfdXBkYXRlKEF2YWhpVGltZW91dCAqdCwgY29uc3Qgc3RydWN0IHRpbWV2YWwgKnR2KSB7CisgICAgYXNzZXJ0KHQpOworICAgIGFzc2VydCghdC0+ZGVhZCk7CisKKyAgICBpZiAoKHQtPmVuYWJsZWQgPSAhIXR2KSkKKyAgICAgICAgdC0+ZXhwaXJ5ID0gKnR2OworfQorCitzdGF0aWMgdm9pZCB0aW1lb3V0X2ZyZWUoQXZhaGlUaW1lb3V0ICp0KSB7CisgICAgYXNzZXJ0KHQpOworICAgIGFzc2VydCghdC0+ZGVhZCk7CisKKyAgICB0LT5kZWFkID0gVFJVRTsKKyAgICB0LT5nbGliX3BvbGwtPnRpbWVvdXRfcmVxX2NsZWFudXAgPSBUUlVFOworfQorCitzdGF0aWMgdm9pZCBkZXN0cm95X3RpbWVvdXQoQXZhaGlUaW1lb3V0ICp0KSB7CisgICAgYXNzZXJ0KHQpOworCisgICAgQVZBSElfTExJU1RfUkVNT1ZFKEF2YWhpVGltZW91dCwgdGltZW91dHMsIHQtPmdsaWJfcG9sbC0+dGltZW91dHMsIHQpOworICAgIGF2YWhpX2ZyZWUodCk7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFudXBfdGltZW91dHMoQXZhaGlHTGliUG9sbCAqZywgaW50IGFsbCkgeworICAgIEF2YWhpVGltZW91dCAqdCwgKm5leHQ7CisgICAgYXNzZXJ0KGcpOworCisgICAgZm9yICh0ID0gZy0+dGltZW91dHM7IHQ7IHQgPSBuZXh0KSB7CisgICAgICAgIG5leHQgPSB0LT50aW1lb3V0c19uZXh0OworCisgICAgICAgIGlmIChhbGwgfHwgdC0+ZGVhZCkKKyAgICAgICAgICAgIGRlc3Ryb3lfdGltZW91dCh0KTsKKyAgICB9CisKKyAgICBnLT50aW1lb3V0X3JlcV9jbGVhbnVwID0gRkFMU0U7Cit9CisKK3N0YXRpYyBBdmFoaVRpbWVvdXQqIGZpbmRfbmV4dF90aW1lb3V0KEF2YWhpR0xpYlBvbGwgKmcpIHsKKyAgICBBdmFoaVRpbWVvdXQgKnQsICpuID0gTlVMTDsKKyAgICBhc3NlcnQoZyk7CisKKyAgICBmb3IgKHQgPSBnLT50aW1lb3V0czsgdDsgdCA9IHQtPnRpbWVvdXRzX25leHQpIHsKKworICAgICAgICBpZiAodC0+ZGVhZCB8fCAhdC0+ZW5hYmxlZCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICghbiB8fCBhdmFoaV90aW1ldmFsX2NvbXBhcmUoJnQtPmV4cGlyeSwgJm4tPmV4cGlyeSkgPCAwKQorICAgICAgICAgICAgbiA9IHQ7CisgICAgfQorCisgICAgcmV0dXJuIG47Cit9CisKK3N0YXRpYyB2b2lkIHN0YXJ0X3RpbWVvdXRfY2FsbGJhY2soQXZhaGlUaW1lb3V0ICp0KSB7CisgICAgYXNzZXJ0KHQpOworICAgIGFzc2VydCghdC0+ZGVhZCk7CisgICAgYXNzZXJ0KHQtPmVuYWJsZWQpOworCisgICAgdC0+ZW5hYmxlZCA9IDA7CisgICAgdC0+Y2FsbGJhY2sodCwgdC0+dXNlcmRhdGEpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gcHJlcGFyZV9mdW5jKEdTb3VyY2UgKnNvdXJjZSwgZ2ludCAqdGltZW91dCkgeworICAgIEF2YWhpR0xpYlBvbGwgKmcgPSAoQXZhaGlHTGliUG9sbCopIHNvdXJjZTsKKyAgICBBdmFoaVRpbWVvdXQgKm5leHRfdGltZW91dDsKKworICAgIGdfYXNzZXJ0KGcpOworICAgIGdfYXNzZXJ0KHRpbWVvdXQpOworCisgICAgaWYgKGctPndhdGNoX3JlcV9jbGVhbnVwKQorICAgICAgICBjbGVhbnVwX3dhdGNoZXMoZywgMCk7CisKKyAgICBpZiAoZy0+dGltZW91dF9yZXFfY2xlYW51cCkKKyAgICAgICAgY2xlYW51cF90aW1lb3V0cyhnLCAwKTsKKworICAgIGlmICgobmV4dF90aW1lb3V0ID0gZmluZF9uZXh0X3RpbWVvdXQoZykpKSB7CisgICAgICAgIEdUaW1lVmFsIG5vdzsKKyAgICAgICAgc3RydWN0IHRpbWV2YWwgdHZub3c7CisgICAgICAgIEF2YWhpVXNlYyB1c2VjOworCisgICAgICAgIGdfc291cmNlX2dldF9jdXJyZW50X3RpbWUoc291cmNlLCAmbm93KTsKKyAgICAgICAgdHZub3cudHZfc2VjID0gbm93LnR2X3NlYzsKKyAgICAgICAgdHZub3cudHZfdXNlYyA9IG5vdy50dl91c2VjOworCisgICAgICAgIHVzZWMgPSBhdmFoaV90aW1ldmFsX2RpZmYoJm5leHRfdGltZW91dC0+ZXhwaXJ5LCAmdHZub3cpOworCisgICAgICAgIGlmICh1c2VjIDw9IDApIHsKKwkgICAqdGltZW91dCA9IDA7CisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKwl9CisKKyAgICAgICAgKnRpbWVvdXQgPSAoZ2ludCkgKHVzZWMgLyAxMDAwKTsKKyAgICB9IGVsc2UKKyAgICAgICAgKnRpbWVvdXQgPSAtMTsKKworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIGdib29sZWFuIGNoZWNrX2Z1bmMoR1NvdXJjZSAqc291cmNlKSB7CisgICAgQXZhaGlHTGliUG9sbCAqZyA9IChBdmFoaUdMaWJQb2xsKikgc291cmNlOworICAgIEF2YWhpV2F0Y2ggKnc7CisgICAgQXZhaGlUaW1lb3V0ICpuZXh0X3RpbWVvdXQ7CisKKyAgICBnX2Fzc2VydChnKTsKKworICAgIGlmICgobmV4dF90aW1lb3V0ID0gZmluZF9uZXh0X3RpbWVvdXQoZykpKSB7CisgICAgICAgIEdUaW1lVmFsIG5vdzsKKyAgICAgICAgc3RydWN0IHRpbWV2YWwgdHZub3c7CisgICAgICAgIGdfc291cmNlX2dldF9jdXJyZW50X3RpbWUoc291cmNlLCAmbm93KTsKKyAgICAgICAgdHZub3cudHZfc2VjID0gbm93LnR2X3NlYzsKKyAgICAgICAgdHZub3cudHZfdXNlYyA9IG5vdy50dl91c2VjOworCisgICAgICAgIGlmIChhdmFoaV90aW1ldmFsX2NvbXBhcmUoJm5leHRfdGltZW91dC0+ZXhwaXJ5LCAmdHZub3cpIDw9IDApCisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICBmb3IgKHcgPSBnLT53YXRjaGVzOyB3OyB3ID0gdy0+d2F0Y2hlc19uZXh0KQorICAgICAgICBpZiAody0+cG9sbGZkLnJldmVudHMgPiAwKQorICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBkaXNwYXRjaF9mdW5jKEdTb3VyY2UgKnNvdXJjZSwgQVZBSElfR0NDX1VOVVNFRCBHU291cmNlRnVuYyBjYWxsYmFjaywgQVZBSElfR0NDX1VOVVNFRCBncG9pbnRlciB1c2VyZGF0YSkgeworICAgIEF2YWhpR0xpYlBvbGwqIGcgPSAoQXZhaGlHTGliUG9sbCopIHNvdXJjZTsKKyAgICBBdmFoaVdhdGNoICp3OworICAgIEF2YWhpVGltZW91dCAqbmV4dF90aW1lb3V0OworCisgICAgZ19hc3NlcnQoZyk7CisKKyAgICBpZiAoKG5leHRfdGltZW91dCA9IGZpbmRfbmV4dF90aW1lb3V0KGcpKSkgeworICAgICAgICBHVGltZVZhbCBub3c7CisgICAgICAgIHN0cnVjdCB0aW1ldmFsIHR2bm93OworICAgICAgICBnX3NvdXJjZV9nZXRfY3VycmVudF90aW1lKHNvdXJjZSwgJm5vdyk7CisgICAgICAgIHR2bm93LnR2X3NlYyA9IG5vdy50dl9zZWM7CisgICAgICAgIHR2bm93LnR2X3VzZWMgPSBub3cudHZfdXNlYzsKKworICAgICAgICBpZiAoYXZhaGlfdGltZXZhbF9jb21wYXJlKCZuZXh0X3RpbWVvdXQtPmV4cGlyeSwgJnR2bm93KSA8IDApIHsKKyAgICAgICAgICAgIHN0YXJ0X3RpbWVvdXRfY2FsbGJhY2sobmV4dF90aW1lb3V0KTsKKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh3ID0gZy0+d2F0Y2hlczsgdzsgdyA9IHctPndhdGNoZXNfbmV4dCkKKyAgICAgICAgaWYgKHctPnBvbGxmZC5yZXZlbnRzID4gMCkgeworICAgICAgICAgICAgYXNzZXJ0KHctPmNhbGxiYWNrKTsKKyAgICAgICAgICAgIHctPmNhbGxiYWNrKHcsIHctPnBvbGxmZC5mZCwgbWFwX2V2ZW50c19mcm9tX2dsaWIody0+cG9sbGZkLnJldmVudHMpLCB3LT51c2VyZGF0YSk7CisgICAgICAgICAgICB3LT5wb2xsZmQucmV2ZW50cyA9IDA7CisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfQorCisgICAgcmV0dXJuIFRSVUU7Cit9CisKK0F2YWhpR0xpYlBvbGwgKmF2YWhpX2dsaWJfcG9sbF9uZXcoR01haW5Db250ZXh0ICpjb250ZXh0LCBnaW50IHByaW9yaXR5KSB7CisgICAgQXZhaGlHTGliUG9sbCAqZzsKKworICAgIHN0YXRpYyBHU291cmNlRnVuY3Mgc291cmNlX2Z1bmNzID0geworICAgICAgICBwcmVwYXJlX2Z1bmMsCisgICAgICAgIGNoZWNrX2Z1bmMsCisgICAgICAgIGRpc3BhdGNoX2Z1bmMsCisgICAgICAgIE5VTEwsCisgICAgICAgIE5VTEwsCisgICAgICAgIE5VTEwKKyAgICB9OworCisgICAgZyA9IChBdmFoaUdMaWJQb2xsKikgZ19zb3VyY2VfbmV3KCZzb3VyY2VfZnVuY3MsIHNpemVvZihBdmFoaUdMaWJQb2xsKSk7CisgICAgZ19tYWluX2NvbnRleHRfcmVmKGctPmNvbnRleHQgPSBjb250ZXh0ID8gY29udGV4dCA6IGdfbWFpbl9jb250ZXh0X2RlZmF1bHQoKSk7CisKKyAgICBnLT5hcGkudXNlcmRhdGEgPSBnOworCisgICAgZy0+YXBpLndhdGNoX25ldyA9IHdhdGNoX25ldzsKKyAgICBnLT5hcGkud2F0Y2hfZnJlZSA9IHdhdGNoX2ZyZWU7CisgICAgZy0+YXBpLndhdGNoX3VwZGF0ZSA9IHdhdGNoX3VwZGF0ZTsKKyAgICBnLT5hcGkud2F0Y2hfZ2V0X2V2ZW50cyA9IHdhdGNoX2dldF9ldmVudHM7CisKKyAgICBnLT5hcGkudGltZW91dF9uZXcgPSB0aW1lb3V0X25ldzsKKyAgICBnLT5hcGkudGltZW91dF9mcmVlID0gdGltZW91dF9mcmVlOworICAgIGctPmFwaS50aW1lb3V0X3VwZGF0ZSA9IHRpbWVvdXRfdXBkYXRlOworCisgICAgZy0+d2F0Y2hfcmVxX2NsZWFudXAgPSBGQUxTRTsKKyAgICBnLT50aW1lb3V0X3JlcV9jbGVhbnVwID0gRkFMU0U7CisKKyAgICBBVkFISV9MTElTVF9IRUFEX0lOSVQoQXZhaGlXYXRjaCwgZy0+d2F0Y2hlcyk7CisgICAgQVZBSElfTExJU1RfSEVBRF9JTklUKEF2YWhpVGltZW91dCwgZy0+dGltZW91dHMpOworCisgICAgZ19zb3VyY2VfYXR0YWNoKCZnLT5zb3VyY2UsIGctPmNvbnRleHQpOworICAgIGdfc291cmNlX3NldF9wcmlvcml0eSgmZy0+c291cmNlLCBwcmlvcml0eSk7CisgICAgZ19zb3VyY2Vfc2V0X2Nhbl9yZWN1cnNlKCZnLT5zb3VyY2UsIEZBTFNFKTsKKworICAgIHJldHVybiBnOworfQorCit2b2lkIGF2YWhpX2dsaWJfcG9sbF9mcmVlKEF2YWhpR0xpYlBvbGwgKmcpIHsKKyAgICBHU291cmNlICpzID0gJmctPnNvdXJjZTsKKyAgICBhc3NlcnQoZyk7CisKKyAgICBjbGVhbnVwX3dhdGNoZXMoZywgMSk7CisgICAgY2xlYW51cF90aW1lb3V0cyhnLCAxKTsKKworICAgIGdfbWFpbl9jb250ZXh0X3VucmVmKGctPmNvbnRleHQpOworICAgIGdfc291cmNlX2Rlc3Ryb3kocyk7CisgICAgZ19zb3VyY2VfdW5yZWYocyk7Cit9CisKK2NvbnN0IEF2YWhpUG9sbCogYXZhaGlfZ2xpYl9wb2xsX2dldChBdmFoaUdMaWJQb2xsICpnKSB7CisgICAgYXNzZXJ0KGcpOworCisgICAgcmV0dXJuICZnLT5hcGk7Cit9CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktZ2xpYi9nbGliLXdhdGNoLmggYi9hdmFoaS0wLjYuMzEvYXZhaGktZ2xpYi9nbGliLXdhdGNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZjM2FhYwotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1nbGliL2dsaWItd2F0Y2guaApAQCAtMCwwICsxLDU0IEBACisjaWZuZGVmIGZvb2dsaWJ3YXRjaGhmb28KKyNkZWZpbmUgZm9vZ2xpYndhdGNoaGZvbworCisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKy8qKiBcZmlsZSBnbGliLXdhdGNoLmggR0xpYiBtYWluIGxvb3AgYWRhcHRlciAqLworCisvKiogXGV4YW1wbGUgZ2xpYi1pbnRlZ3JhdGlvbi5jIEV4YW1wbGUgb2YgaG93IHRvIGludGVncmF0ZQorICogYXZhaGkgdXNlIHdpdGggR0xJQi9HVEsgYXBwbGljYXRpb25zICovCisKKyNpbmNsdWRlIDxnbGliLmg+CisKKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vY2RlY2wuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vd2F0Y2guaD4KKworQVZBSElfQ19ERUNMX0JFR0lOCisKKy8qKiBHTGliIG1haW4gbG9vcCBhZGFwdGVyLiBZb3UgY2FuIHNhZmVseSBjYXN0IHRoaXMgaW50byBhIEdTb3VyY2UgKi8KK3R5cGVkZWYgc3RydWN0IEF2YWhpR0xpYlBvbGwgQXZhaGlHTGliUG9sbDsKKworLyoqIENyZWF0ZSBhIG5ldyBHTGliIG1haW4gbG9vcCBhZGFwdGVyIGF0dGFjaGVkIHRvIHRoZSBzcGVjaWZpZWQKKyBjb250ZXh0LiBJZiBjb250ZXh0IGlzIE5VTEwsIHRoZSBkZWZhdWx0IG1haW4gbG9vcCBjb250ZXh0IGlzCisgdXNlZC4gWW91IGNhbiBhdHRhY2ggYXMgbWFueSBBdmFoaUdMaWJQb2xsIG9iamVjdHMgdG8gdGhlIHNhbWUgY29udGV4dAorIGFzIHlvdSB3YW50LiBwcmlvcml0eSB0YWtlcyBvbmUgb2YgR0xpYidzIEdfUFJJT1JJVFkgY29uc3RhbnRzLiAqLworQXZhaGlHTGliUG9sbCAqYXZhaGlfZ2xpYl9wb2xsX25ldyhHTWFpbkNvbnRleHQgKmNvbnRleHQsIGdpbnQgcHJpb3JpdHkpOworCisvKiogRnJlZSAgR0xpYiBtYWluIGxvb3AgYWRhcHRlciAqLwordm9pZCBhdmFoaV9nbGliX3BvbGxfZnJlZShBdmFoaUdMaWJQb2xsICpnKTsKKworLyoqIFJldHVybiB0aGUgYWJzdHJhY3QgcG9sbCBBUEkgc3RydWN0dXJlIGZvciB0aGlzIG9iamVjdC4gVGhpcyB3aWxsCisgKiByZXR1cm4gdGhlIHNhbWUgcG9pbnRlciB0byBhIGludGVybmFsbHkgYWxsb2NhdGVkIHN0cnVjdHVyZSBvbiBlYWNoCisgKiBjYWxsICovCitjb25zdCBBdmFoaVBvbGwgKmF2YWhpX2dsaWJfcG9sbF9nZXQoQXZhaGlHTGliUG9sbCAqZyk7CisKK0FWQUhJX0NfREVDTF9FTkQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktZ29iamVjdC5wYy5pbiBiL2F2YWhpLTAuNi4zMS9hdmFoaS1nb2JqZWN0LnBjLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMzgyMDAKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktZ29iamVjdC5wYy5pbgpAQCAtMCwwICsxLDExIEBACitwcmVmaXg9QHByZWZpeEAKK2V4ZWNfcHJlZml4PSR7cHJlZml4fQorbGliZGlyPUBsaWJkaXJACitpbmNsdWRlZGlyPSR7cHJlZml4fS9pbmNsdWRlCisKK05hbWU6IGF2YWhpLWdvYmplY3QKK0Rlc2NyaXB0aW9uOiBBdmFoaSBNdWx0aWNhc3QgRE5TIFJlc3BvbmRlciAoR0xpYiBHT2JqZWN0IFN1cHBvcnQpCitWZXJzaW9uOiBAUEFDS0FHRV9WRVJTSU9OQAorUmVxdWlyZXMucHJpdmF0ZTogZ2xpYi0yLjAgZ29iamVjdC0yLjAgYXZhaGktZ2xpYiBhdmFoaS1jbGllbnQKK0xpYnM6IC1MJHtsaWJkaXJ9IC1sYXZhaGktZ29iamVjdAorQ2ZsYWdzOiAtRF9SRUVOVFJBTlQgLUkke2luY2x1ZGVkaXJ9CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktZ29iamVjdC9BdmFoaUNvcmUtMC42LmdpciBiL2F2YWhpLTAuNi4zMS9hdmFoaS1nb2JqZWN0L0F2YWhpQ29yZS0wLjYuZ2lyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkN2Y2OGIKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktZ29iamVjdC9BdmFoaUNvcmUtMC42LmdpcgpAQCAtMCwwICsxLDYxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzxyZXBvc2l0b3J5IHZlcnNpb249IjEuMiIKKyAgICAgICAgICAgIHhtbG5zPSJodHRwOi8vd3d3Lmd0ay5vcmcvaW50cm9zcGVjdGlvbi9jb3JlLzEuMCIKKyAgICAgICAgICAgIHhtbG5zOmM9Imh0dHA6Ly93d3cuZ3RrLm9yZy9pbnRyb3NwZWN0aW9uL2MvMS4wIgorICAgICAgICAgICAgeG1sbnM6Z2xpYj0iaHR0cDovL3d3dy5ndGsub3JnL2ludHJvc3BlY3Rpb24vZ2xpYi8xLjAiPgorICA8bmFtZXNwYWNlIG5hbWU9IkF2YWhpQ29yZSIgdmVyc2lvbj0iMC42IiBzaGFyZWQtbGlicmFyeT0iYXZhaGktY29yZSI+CisgICAgPGFsaWFzIG5hbWU9IklmSW5kZXgiIGM6dHlwZT0iQXZhaGlJZkluZGV4Ij4KKyAgICAgIDx0eXBlIG5hbWU9ImdpbnQiIGM6dHlwZT0iaW50Ii8+CisgICAgPC9hbGlhcz4KKyAgICA8ZW51bWVyYXRpb24gbmFtZT0iUHJvdG9jb2wiIGM6dHlwZT0iQXZhaGlQcm90b2NvbCI+CisgICAgICA8bWVtYmVyIG5hbWU9ImluZXQiCisgICAgICAgICAgICAgIHZhbHVlPSIwIgorICAgICAgICAgICAgICBjOmlkZW50aWZpZXI9IkFWQUhJX1BST1RPX0lORVQiLz4KKyAgICAgIDxtZW1iZXIgbmFtZT0iaW5ldDYiCisgICAgICAgICAgICAgIHZhbHVlPSIxIgorICAgICAgICAgICAgICBjOmlkZW50aWZpZXI9IkFWQUhJX1BST1RPX0lORVQ2Ii8+CisgICAgICA8bWVtYmVyIG5hbWU9InVuc3BlYyIKKyAgICAgICAgICAgICAgdmFsdWU9Ii0xIgorICAgICAgICAgICAgICBjOmlkZW50aWZpZXI9IkFWQUhJX1BST1RPX1VOU1BFQyIvPgorICAgIDwvZW51bWVyYXRpb24+CisgICAgPGJpdGZpZWxkIG5hbWU9IlB1Ymxpc2hGbGFncyIgYzp0eXBlPSJBdmFoaVB1Ymxpc2hGbGFncyI+CisgICAgICA8bWVtYmVyIG5hbWU9InVuaXF1ZSIKKyAgICAgICAgICAgICAgdmFsdWU9IjEiCisgICAgICAgICAgICAgIGM6aWRlbnRpZmllcj0iQVZBSElfUFVCTElTSF9VTklRVUUiLz4KKyAgICAgIDxtZW1iZXIgbmFtZT0ibm9fcHJvYmUiCisgICAgICAgICAgICAgIHZhbHVlPSIyIgorICAgICAgICAgICAgICBjOmlkZW50aWZpZXI9IkFWQUhJX1BVQkxJU0hfTk9fUFJPQkUiLz4KKyAgICAgIDxtZW1iZXIgbmFtZT0ibm9fYW5ub3VuY2UiCisgICAgICAgICAgICAgIHZhbHVlPSI0IgorICAgICAgICAgICAgICBjOmlkZW50aWZpZXI9IkFWQUhJX1BVQkxJU0hfTk9fQU5OT1VOQ0UiLz4KKyAgICAgIDxtZW1iZXIgbmFtZT0iYWxsb3dfbXVsdGlwbGUiCisgICAgICAgICAgICAgIHZhbHVlPSI4IgorICAgICAgICAgICAgICBjOmlkZW50aWZpZXI9IkFWQUhJX1BVQkxJU0hfQUxMT1dfTVVMVElQTEUiLz4KKyAgICAgIDxtZW1iZXIgbmFtZT0ibm9fcmV2ZXJzZSIKKyAgICAgICAgICAgICAgdmFsdWU9IjE2IgorICAgICAgICAgICAgICBjOmlkZW50aWZpZXI9IkFWQUhJX1BVQkxJU0hfTk9fcmV2ZXJzZSIvPgorICAgICAgPG1lbWJlciBuYW1lPSJub19jb29raWUiCisgICAgICAgICAgICAgIHZhbHVlPSIzMiIKKyAgICAgICAgICAgICAgYzppZGVudGlmaWVyPSJBVkFISV9QVUJMSVNIX05PX2Nvb2tpZSIvPgorICAgICAgPG1lbWJlciBuYW1lPSJ1cGRhdGUiCisgICAgICAgICAgICAgIHZhbHVlPSI2NCIKKyAgICAgICAgICAgICAgYzppZGVudGlmaWVyPSJBVkFISV9QVUJMSVNIX1VQREFURSIvPgorICAgICAgPG1lbWJlciBuYW1lPSJ1c2Vfd2lkZV9hcmVhIgorICAgICAgICAgICAgICB2YWx1ZT0iMTI4IgorICAgICAgICAgICAgICBjOmlkZW50aWZpZXI9IkFWQUhJX1BVQkxJU0hfVVNFX1dJREVfQVJFQSIvPgorICAgICAgPG1lbWJlciBuYW1lPSJ1c2VfbXVsdGljYXN0IgorICAgICAgICAgICAgICB2YWx1ZT0iMjU2IgorICAgICAgICAgICAgICBjOmlkZW50aWZpZXI9IkFWQUhJX1BVQkxJU0hfVVNFX01VTFRJQ0FTVCIvPgorICAgIDwvYml0ZmllbGQ+CisgICAgPHJlY29yZCBuYW1lPSJTdHJpbmdMaXN0IiBjOnR5cGU9IkF2YWhpU3RyaW5nTGlzdCIvPgorICAgIDxyZWNvcmQgbmFtZT0iQWRkcmVzcyIgYzp0eXBlPSJBdmFoaUFkZHJlc3MiLz4KKyAgICA8cmVjb3JkIG5hbWU9IkNsaWVudCIgYzp0eXBlPSJBdmFoaUNsaWVudCIvPgorICAgIDxmdW5jdGlvbiBuYW1lPSJzZXJ2ZXJfZ2V0X2hvc3RfbmFtZSIgYzppZGVudGlmaWVyPSJhdmFoaV9zZXJ2ZXJfZ2V0X2hvc3RfbmFtZSI+CisgICAgICA8cmV0dXJuLXZhbHVlIHRyYW5zZmVyLW93bmVyc2hpcD0ibm9uZSI+CisgICAgICAgIDx0eXBlIG5hbWU9InV0ZjgiIGM6dHlwZT0iY2hhcjgiLz4KKyAgICAgIDwvcmV0dXJuLXZhbHVlPgorICAgICAgPHBhcmFtZXRlcnM+CisgICAgICA8L3BhcmFtZXRlcnM+CisgICAgPC9mdW5jdGlvbj4KKyAgPC9uYW1lc3BhY2U+Cis8L3JlcG9zaXRvcnk+CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktZ29iamVjdC9NYWtlZmlsZS5hbSBiL2F2YWhpLTAuNi4zMS9hdmFoaS1nb2JqZWN0L01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyZjJiOTQKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktZ29iamVjdC9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDE0MiBAQAorIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKyMKKyMgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyMgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyMgVVNBLgorCitBTV9DRkxBR1M9LUkkKHRvcF9zcmNkaXIpCisKKyMgVGhpcyBjb29sIGRlYnVnIHRyYXAgd29ya3Mgb24gaTM4Ni9nY2Mgb25seQorQU1fQ0ZMQUdTKz0nLURERUJVR19UUkFQPV9fYXNtX18oImludCAkJDMiKScKKworRVhUUkFfRElTVCA9IFwKKwlBdmFoaUNvcmUtMC42LmdpcgorCitpZiBIQVZFX0dPQkpFQ1QKK2lmIEhBVkVfREJVUworCithdmFoaWdvYmplY3RpbmNsdWRlZGlyPSQoaW5jbHVkZWRpcikvYXZhaGktZ29iamVjdAorCithdmFoaWdvYmplY3RpbmNsdWRlX0hFQURFUlMgPSBcCisJZ2EtY2xpZW50LmggXAorCWdhLWVudHJ5LWdyb3VwLmggXAorCWdhLWVudW1zLmggXAorCWdhLWVycm9yLmggXAorCWdhLXJlY29yZC1icm93c2VyLmggXAorCWdhLXNlcnZpY2UtYnJvd3Nlci5oIFwKKwlnYS1zZXJ2aWNlLXJlc29sdmVyLmgKKworbGliX0xUTElCUkFSSUVTID0gXAorCWxpYmF2YWhpLWdvYmplY3QubGEKKworQlVJTFRfU09VUkNFUyA9IFwKKwlzaWduYWxzLW1hcnNoYWwubGlzdCBcCisJc2lnbmFscy1tYXJzaGFsLmggXAorCXNpZ25hbHMtbWFyc2hhbC5jIFwKKwlnYS1jbGllbnQtZW51bXR5cGVzLmggXAorCWdhLWNsaWVudC1lbnVtdHlwZXMuYyAgXAorCWdhLWVudHJ5LWdyb3VwLWVudW10eXBlcy5oIFwKKwlnYS1lbnRyeS1ncm91cC1lbnVtdHlwZXMuYyAgXAorCWdhLWVudW1zLWVudW10eXBlcy5oIFwKKwlnYS1lbnVtcy1lbnVtdHlwZXMuYworCitDT1JFX1NPVVJDRVMgPSBcCisJZ2EtY2xpZW50LmMgZ2EtY2xpZW50LmggXAorCWdhLWVudHJ5LWdyb3VwLmMgZ2EtZW50cnktZ3JvdXAuaCBcCisJZ2EtZW51bXMuaCBcCisJZ2EtZXJyb3IuYyBnYS1lcnJvci5oIFwKKwlnYS1yZWNvcmQtYnJvd3Nlci5jIGdhLXJlY29yZC1icm93c2VyLmggXAorCWdhLXNlcnZpY2UtYnJvd3Nlci5jIGdhLXNlcnZpY2UtYnJvd3Nlci5oIFwKKwlnYS1zZXJ2aWNlLXJlc29sdmVyLmMgZ2Etc2VydmljZS1yZXNvbHZlci5oCisKK2xpYmF2YWhpX2dvYmplY3RfbGFfU09VUkNFUyA9IFwKKwkkKENPUkVfU09VUkNFUykgXAorCSQoQlVJTFRfU09VUkNFUykKKworbGliYXZhaGlfZ29iamVjdF9sYV9DRkxBR1MgPSAkKEFNX0NGTEFHUykgJChHT0JKRUNUX0NGTEFHUykKK2xpYmF2YWhpX2dvYmplY3RfbGFfTElCQUREID0gJChBTV9MREFERCkgLi4vYXZhaGktY29tbW9uL2xpYmF2YWhpLWNvbW1vbi5sYSAuLi9hdmFoaS1jbGllbnQvbGliYXZhaGktY2xpZW50LmxhIC4uL2F2YWhpLWdsaWIvbGliYXZhaGktZ2xpYi5sYSAkKEdPQkpFQ1RfTElCUykKK2xpYmF2YWhpX2dvYmplY3RfbGFfTERGTEFHUyA9ICQoQU1fTERGTEFHUykgLXZlcnNpb24taW5mbyAkKExJQkFWQUhJX0dPQkpFQ1RfVkVSU0lPTl9JTkZPKSAtZXhwb3J0LXN5bWJvbHMtcmVnZXggJ15nYV8nCisKKyMgY29ycmVjdGx5IGNsZWFuIHRoZSBnZW5lcmF0ZWQgc291cmNlIGZpbGVzCitDTEVBTkZJTEVTID0gJChCVUlMVF9TT1VSQ0VTKQorCitkaXN0LWhvb2s6CisJJChzaGVsbCBmb3IgeCBpbiAkKEJVSUxUX1NPVVJDRVMpOyBkbyBybSAtZiAkKGRpc3RkaXIpLyQkeCA7IGRvbmUpCisKK3NpZ25hbHMtbWFyc2hhbC5saXN0OiAkKENPUkVfU09VUkNFUykgTWFrZWZpbGUuYW0KKwkkKEFNX1ZfR0VOKSggY2QgJChzcmNkaXIpICYmIFwKKwlzZWQgLW4gLWUgJ3MvLipfZ2Ffc2lnbmFsc19tYXJzaGFsX1woW0EtWl0qX19bQS1aX10qXCkuKi9cMS9wJyBcCisJCSQoQ09SRV9TT1VSQ0VTKSApIFwKKwkJfCBzZWQgLWUgJ3MvX18vOi8nIC1lICd5L18vLC8nIHwgc29ydCAtdSA+ICRALnRtcCAmJiBcCisJaWYgY21wIC1zICRALnRtcCAkQDsgdGhlbiBcCisJCXJtICRALnRtcDsgXAorCWVsc2UgXAorCQltdiAkQC50bXAgJEA7IFwKKwlmaQorCitzaWduYWxzLW1hcnNoYWwuaDogc2lnbmFscy1tYXJzaGFsLmxpc3QKKwkkKEFNX1ZfR0VOKWdsaWItZ2VubWFyc2hhbCAtLWhlYWRlciAtLXByZWZpeD1fZ2Ffc2lnbmFsc19tYXJzaGFsICQ8ID4gJEAKKworc2lnbmFscy1tYXJzaGFsLmM6IHNpZ25hbHMtbWFyc2hhbC5saXN0CisJJChBTV9WX0dFTikoZWNobyAiI2luY2x1ZGUgXCJzaWduYWxzLW1hcnNoYWwuaFwiIiA7IGdsaWItZ2VubWFyc2hhbCAtLWJvZHkgLS1wcmVmaXg9X2dhX3NpZ25hbHNfbWFyc2hhbCAkPCApID4gJEAKKworIyBydWxlcyBmb3IgbWFraW5nIHRoZSBnbGliIGVudW0gb2JqZWN0cworJS1lbnVtdHlwZXMuaDogJS5oIE1ha2VmaWxlLmluCisJJChBTV9WX0dFTilnbGliLW1rZW51bXMgXAorCS0tZmhlYWQgIiNpZm5kZWYgX18kKHNoZWxsIGVjaG8gJCogfCB0ciBbOmxvd2VyOl0tIFs6dXBwZXI6XV8pX0VOVU1fVFlQRVNfSF9fXG4jZGVmaW5lIF9fJChzaGVsbCBlY2hvICQqIHwgdHIgWzpsb3dlcjpdLSBbOnVwcGVyOl1fKV9FTlVNX1RZUEVTX0hfX1xuXG4jaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD5cblxuR19CRUdJTl9ERUNMU1xuIiBcCisJLS1mcHJvZCAiLyogZW51bWVyYXRpb25zIGZyb20gXCJAZmlsZW5hbWVAXCIgKi9cbiIgXAorCS0tdmhlYWQgIkdUeXBlIEBlbnVtX25hbWVAX2dldF90eXBlICh2b2lkKTtcbiNkZWZpbmUgJChzaGVsbCBlY2hvICQqIHwgdHIgWzpsb3dlcjpdLSBbOnVwcGVyOl1fIHwgc2VkICdzL18uKi8vJylfVFlQRV9ARU5VTVNIT1JUQCAoQGVudW1fbmFtZUBfZ2V0X3R5cGUoKSlcbiIgICAgICAgICBcCisJLS1mdGFpbCAiR19FTkRfREVDTFNcblxuI2VuZGlmIC8qIF9fJChzaGVsbCBlY2hvICQqIHwgdHIgWzpsb3dlcjpdLSBbOnVwcGVyOl1fKV9FTlVNX1RZUEVTX0hfXyAqLyIgXAorCSQ8ID4gJEAKKworJS1lbnVtdHlwZXMuYzogJS5oIE1ha2VmaWxlLmluCisJJChBTV9WX0dFTilnbGliLW1rZW51bXMgXAorCS0tZmhlYWQgIiNpbmNsdWRlIDwkKi5oPlxuI2luY2x1ZGU8JCotZW51bXR5cGVzLmg+IiBcCisJLS1mcHJvZCAiXG4vKiBlbnVtZXJhdGlvbnMgZnJvbSBcIkBmaWxlbmFtZUBcIiAqLyIgXAorCS0tdmhlYWQgIkdUeXBlXG5AZW51bV9uYW1lQF9nZXRfdHlwZSAodm9pZClcbntcbiAgc3RhdGljIEdUeXBlIGV0eXBlID0gMDtcbiAgaWYgKGV0eXBlID09IDApIHtcbiAgICBzdGF0aWMgY29uc3QgR0BUeXBlQFZhbHVlIHZhbHVlc1tdID0geyIgICAgIFwKKwktLXZwcm9kICIgICAgICB7IEBWQUxVRU5BTUVALCBcIkBWQUxVRU5BTUVAXCIsIFwiQFZBTFVFTkFNRUBcIiB9LCIgXAorCS0tdnRhaWwgIiAgICAgIHsgMCwgTlVMTCwgTlVMTCB9XG4gICAgfTtcbiAgICBldHlwZSA9IGdfQHR5cGVAX3JlZ2lzdGVyX3N0YXRpYyAoXCJARW51bU5hbWVAXCIsIHZhbHVlcyk7XG4gIH1cbiAgcmV0dXJuIGV0eXBlO1xufVxuIiBcCisJJDwgPiAkQAorCistaW5jbHVkZSAkKElOVFJPU1BFQ1RJT05fTUFLRUZJTEUpCitJTlRST1NQRUNUSU9OX0dJUlMgPQorSU5UUk9TUEVDVElPTl9TQ0FOTkVSX0FSR1MgPSAtLWFkZC1pbmNsdWRlLXBhdGg9JChzcmNkaXIpCitJTlRST1NQRUNUSU9OX0NPTVBJTEVSX0FSR1MgPSAtLWluY2x1ZGVkaXI9JChzcmNkaXIpCisKK2lmIEhBVkVfSU5UUk9TUEVDVElPTgoraW50cm9zcGVjdGlvbl9zb3VyY2VzID0gJChsaWJhdmFoaV9nb2JqZWN0X2xhX1NPVVJDRVMpCisKK0F2YWhpLTAuNi5naXI6ICQobGliX0xUTElCUkFSSUVTKQorQXZhaGlfMF82X2dpcl9JTkNMVURFUyA9IEdPYmplY3QtMi4wIEF2YWhpQ29yZS0wLjYKK0F2YWhpXzBfNl9naXJfQ0ZMQUdTID0gJChsaWJhdmFoaV9nb2JqZWN0X2xhX0NGTEFHUykKK0F2YWhpXzBfNl9naXJfTElCUyA9ICQobGliX0xUTElCUkFSSUVTKQorQXZhaGlfMF82X2dpcl9GSUxFUyA9ICQoYWRkcHJlZml4ICQoc3JjZGlyKS8sICQoQ09SRV9TT1VSQ0VTKSkgJChCVUlMVF9TT1VSQ0VTKQorQXZhaGlfMF82X2dpcl9TQ0FOTkVSRkxBR1MgPSAtLXN0cmlwLXByZWZpeD1HYQorSU5UUk9TUEVDVElPTl9HSVJTICs9IEF2YWhpLTAuNi5naXIKK0lOVFJPU1BFQ1RJT05fSU5TVEFMTF9HSVJTID0gQXZhaGlDb3JlLTAuNi5naXIgJChJTlRST1NQRUNUSU9OX0dJUlMpCisKK2dpcmRpciA9ICQoZGF0YWRpcikvZ2lyLTEuMAorZ2lyX0RBVEEgPSAkKElOVFJPU1BFQ1RJT05fSU5TVEFMTF9HSVJTKQorCit0eXBlbGliZGlyID0gJChsaWJkaXIpL2dpcmVwb3NpdG9yeS0xLjAKK3R5cGVsaWJfREFUQSA9ICQoSU5UUk9TUEVDVElPTl9JTlNUQUxMX0dJUlM6Lmdpcj0udHlwZWxpYikKKworQ0xFQU5GSUxFUyArPSAkKElOVFJPU1BFQ1RJT05fR0lSUykgJCh0eXBlbGliX0RBVEEpCitlbmRpZgorCitlbmRpZgorZW5kaWYKKworaW5kZW50OgorCWluZGVudCAtYnJmIC1uYmJvIC1uYmMgLWlwMCAtY3MgLW5iZmRlIC1ucHNsIC1iciAtYnJzIC1iYXAgLWk0IC1icyAtY2R3IC1jZSAtbnBjcyAtaG5sIC1jbGk0IC1udXQgLWNpOCBnYS0qLltjaF0KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1nb2JqZWN0L01ha2VmaWxlLmluIGIvYXZhaGktMC42LjMxL2F2YWhpLWdvYmplY3QvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI2ZmI4YwotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1nb2JqZWN0L01ha2VmaWxlLmluCkBAIC0wLDAgKzEsOTk5IEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjExLjMgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACisKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisjCisjIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisjIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisjIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisjIFVTQS4KKworCisKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HT0JKRUNUX1RSVUVAQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQGFtX19hcHBlbmRfMSA9IEF2YWhpLTAuNi5naXIKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HT0JKRUNUX1RSVUVAQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQGFtX19hcHBlbmRfMiA9ICQoSU5UUk9TUEVDVElPTl9HSVJTKSAkKHR5cGVsaWJfREFUQSkKK3N1YmRpciA9IGF2YWhpLWdvYmplY3QKK0RJU1RfQ09NTU9OID0gJChhbV9fYXZhaGlnb2JqZWN0aW5jbHVkZV9IRUFERVJTX0RJU1QpIFwKKwkkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vYWN4X3B0aHJlYWQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2djY19zdGFja19wcm90ZWN0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9nY2NfdmlzaWJpbGl0eS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vaW50bHRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2ludHJvc3BlY3Rpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2x0b3B0aW9ucy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHR2ZXJzaW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbmxzLm00ICQodG9wX3NyY2RpcikvY29tbW9uL3B5dGhvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9hY2luY2x1ZGUubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vZG94eWdlbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7CithbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAorICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCisgICAgKikgZj0kJHA7OyBcCisgIGVzYWM7CithbV9fc3RyaXBfZGlyID0gZj1gZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7CithbV9faW5zdGFsbF9tYXggPSA0MAorYW1fX25vYmFzZV9zdHJpcF9zZXR1cCA9IFwKKyAgc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYAorYW1fX25vYmFzZV9zdHJpcCA9IFwKKyAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkIC1lICJzfCQkc3JjZGlyc3RyaXAvfHwiCithbV9fbm9iYXNlX2xpc3QgPSAkKGFtX19ub2Jhc2Vfc3RyaXBfc2V0dXApOyBcCisgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCisgIHNlZCAic3wgJCRzcmNkaXJzdHJpcC98IHw7IicgLyAuKlwvLyFzLyAuKi8gLi87IHMsXCggLipcKS9bXi9dKiQkLFwxLCcgfCBcCisgICQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiIgfSB7IGZpbGVzWyQkMl0gPSBmaWxlc1skJDJdICIgIiAkJDE7IFwKKyAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCisgICAgICB7IHByaW50ICQkMiwgZmlsZXNbJCQyXTsgblskJDJdID0gMDsgZmlsZXNbJCQyXSA9ICIiIH0gfSBcCisgICAgRU5EIHsgZm9yIChkaXIgaW4gZmlsZXMpIHByaW50IGRpciwgZmlsZXNbZGlyXSB9JworYW1fX2Jhc2VfbGlzdCA9IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJyB8IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJworYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpciA9IHsgXAorICB0ZXN0IC16ICIkJGZpbGVzIiBcCisgICAgfHwgeyB0ZXN0ICEgLWQgIiQkZGlyIiAmJiB0ZXN0ICEgLWYgIiQkZGlyIiAmJiB0ZXN0ICEgLXIgIiQkZGlyIjsgfSBcCisgICAgfHwgeyBlY2hvICIgKCBjZCAnJCRkaXInICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAorICAgICAgICAgJChhbV9fY2QpICIkJGRpciIgJiYgcm0gLWYgJCRmaWxlczsgfTsgXAorICB9CithbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQobGliZGlyKSIgIiQoREVTVERJUikkKGdpcmRpcikiIFwKKwkiJChERVNURElSKSQodHlwZWxpYmRpcikiIFwKKwkiJChERVNURElSKSQoYXZhaGlnb2JqZWN0aW5jbHVkZWRpcikiCitMVExJQlJBUklFUyA9ICQobGliX0xUTElCUkFSSUVTKQorYW1fX0RFUEVOREVOQ0lFU18xID0KK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HT0JKRUNUX1RSVUVAbGliYXZhaGlfZ29iamVjdF9sYV9ERVBFTkRFTkNJRVMgPSAuLi9hdmFoaS1jb21tb24vbGliYXZhaGktY29tbW9uLmxhIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HT0JKRUNUX1RSVUVACS4uL2F2YWhpLWNsaWVudC9saWJhdmFoaS1jbGllbnQubGEgXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dPQkpFQ1RfVFJVRUAJLi4vYXZhaGktZ2xpYi9saWJhdmFoaS1nbGliLmxhIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HT0JKRUNUX1RSVUVACSQoYW1fX0RFUEVOREVOQ0lFU18xKQorYW1fX2xpYmF2YWhpX2dvYmplY3RfbGFfU09VUkNFU19ESVNUID0gZ2EtY2xpZW50LmMgZ2EtY2xpZW50LmggXAorCWdhLWVudHJ5LWdyb3VwLmMgZ2EtZW50cnktZ3JvdXAuaCBnYS1lbnVtcy5oIGdhLWVycm9yLmMgXAorCWdhLWVycm9yLmggZ2EtcmVjb3JkLWJyb3dzZXIuYyBnYS1yZWNvcmQtYnJvd3Nlci5oIFwKKwlnYS1zZXJ2aWNlLWJyb3dzZXIuYyBnYS1zZXJ2aWNlLWJyb3dzZXIuaCBcCisJZ2Etc2VydmljZS1yZXNvbHZlci5jIGdhLXNlcnZpY2UtcmVzb2x2ZXIuaCBcCisJc2lnbmFscy1tYXJzaGFsLmxpc3Qgc2lnbmFscy1tYXJzaGFsLmggc2lnbmFscy1tYXJzaGFsLmMgXAorCWdhLWNsaWVudC1lbnVtdHlwZXMuaCBnYS1jbGllbnQtZW51bXR5cGVzLmMgXAorCWdhLWVudHJ5LWdyb3VwLWVudW10eXBlcy5oIGdhLWVudHJ5LWdyb3VwLWVudW10eXBlcy5jIFwKKwlnYS1lbnVtcy1lbnVtdHlwZXMuaCBnYS1lbnVtcy1lbnVtdHlwZXMuYworQEhBVkVfREJVU19UUlVFQEBIQVZFX0dPQkpFQ1RfVFJVRUBhbV9fb2JqZWN0c18xID0gbGliYXZhaGlfZ29iamVjdF9sYS1nYS1jbGllbnQubG8gXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dPQkpFQ1RfVFJVRUAJbGliYXZhaGlfZ29iamVjdF9sYS1nYS1lbnRyeS1ncm91cC5sbyBcCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR09CSkVDVF9UUlVFQAlsaWJhdmFoaV9nb2JqZWN0X2xhLWdhLWVycm9yLmxvIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HT0JKRUNUX1RSVUVACWxpYmF2YWhpX2dvYmplY3RfbGEtZ2EtcmVjb3JkLWJyb3dzZXIubG8gXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dPQkpFQ1RfVFJVRUAJbGliYXZhaGlfZ29iamVjdF9sYS1nYS1zZXJ2aWNlLWJyb3dzZXIubG8gXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dPQkpFQ1RfVFJVRUAJbGliYXZhaGlfZ29iamVjdF9sYS1nYS1zZXJ2aWNlLXJlc29sdmVyLmxvCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR09CSkVDVF9UUlVFQGFtX19vYmplY3RzXzIgPSBsaWJhdmFoaV9nb2JqZWN0X2xhLXNpZ25hbHMtbWFyc2hhbC5sbyBcCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR09CSkVDVF9UUlVFQAlsaWJhdmFoaV9nb2JqZWN0X2xhLWdhLWNsaWVudC1lbnVtdHlwZXMubG8gXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dPQkpFQ1RfVFJVRUAJbGliYXZhaGlfZ29iamVjdF9sYS1nYS1lbnRyeS1ncm91cC1lbnVtdHlwZXMubG8gXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dPQkpFQ1RfVFJVRUAJbGliYXZhaGlfZ29iamVjdF9sYS1nYS1lbnVtcy1lbnVtdHlwZXMubG8KK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HT0JKRUNUX1RSVUVAYW1fbGliYXZhaGlfZ29iamVjdF9sYV9PQkpFQ1RTID0gIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HT0JKRUNUX1RSVUVACSQoYW1fX29iamVjdHNfMSkgXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dPQkpFQ1RfVFJVRUAJJChhbV9fb2JqZWN0c18yKQorbGliYXZhaGlfZ29iamVjdF9sYV9PQkpFQ1RTID0gJChhbV9saWJhdmFoaV9nb2JqZWN0X2xhX09CSkVDVFMpCitBTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCithbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfbHRfMCA9IC0tc2lsZW50CitsaWJhdmFoaV9nb2JqZWN0X2xhX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAorCSQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSBcCisJJChsaWJhdmFoaV9nb2JqZWN0X2xhX0NGTEFHUykgJChDRkxBR1MpIFwKKwkkKGxpYmF2YWhpX2dvYmplY3RfbGFfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dPQkpFQ1RfVFJVRUBhbV9saWJhdmFoaV9nb2JqZWN0X2xhX3JwYXRoID0gIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HT0JKRUNUX1RSVUVACS1ycGF0aCAkKGxpYmRpcikKK0RFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpCitkZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCithbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcworYW1fX212ID0gbXYgLWYKK0NPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAorCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0xUQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpIFwKKwkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKKwkkKEFNX0NGTEFHUykgJChDRkxBR1MpCitBTV9WX0NDID0gJChhbV9fdl9DQ19AQU1fVkApCithbV9fdl9DQ18gPSAkKGFtX192X0NDX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICIgJEA7CitBTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCithbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfYXRfMCA9IEAKK0NDTEQgPSAkKENDKQorTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAorCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEX0BBTV9WQCkKK2FtX192X0NDTERfID0gJChhbV9fdl9DQ0xEX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfQ0NMRF8wID0gQGVjaG8gIiAgQ0NMRCAgIiAkQDsKK0FNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQorYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAiICRAOworU09VUkNFUyA9ICQobGliYXZhaGlfZ29iamVjdF9sYV9TT1VSQ0VTKQorRElTVF9TT1VSQ0VTID0gJChhbV9fbGliYXZhaGlfZ29iamVjdF9sYV9TT1VSQ0VTX0RJU1QpCitEQVRBID0gJChnaXJfREFUQSkgJCh0eXBlbGliX0RBVEEpCithbV9fYXZhaGlnb2JqZWN0aW5jbHVkZV9IRUFERVJTX0RJU1QgPSBnYS1jbGllbnQuaCBnYS1lbnRyeS1ncm91cC5oIFwKKwlnYS1lbnVtcy5oIGdhLWVycm9yLmggZ2EtcmVjb3JkLWJyb3dzZXIuaCBnYS1zZXJ2aWNlLWJyb3dzZXIuaCBcCisJZ2Etc2VydmljZS1yZXNvbHZlci5oCitIRUFERVJTID0gJChhdmFoaWdvYmplY3RpbmNsdWRlX0hFQURFUlMpCitFVEFHUyA9IGV0YWdzCitDVEFHUyA9IGN0YWdzCitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQUxMX0xJTkdVQVMgPSBAQUxMX0xJTkdVQVNACitBTVRBUiA9IEBBTVRBUkAKK0FNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAorQVIgPSBAQVJACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVZBSElfQVVUT0lQRF9HUk9VUCA9IEBBVkFISV9BVVRPSVBEX0dST1VQQAorQVZBSElfQVVUT0lQRF9VU0VSID0gQEFWQUhJX0FVVE9JUERfVVNFUkAKK0FWQUhJX0dST1VQID0gQEFWQUhJX0dST1VQQAorQVZBSElfUFJJVl9BQ0NFU1NfR1JPVVAgPSBAQVZBSElfUFJJVl9BQ0NFU1NfR1JPVVBACitBVkFISV9VU0VSID0gQEFWQUhJX1VTRVJACitBV0sgPSBAQVdLQAorQ0FUQUxPR1MgPSBAQ0FUQUxPR1NACitDQVRPQkpFWFQgPSBAQ0FUT0JKRVhUQAorQ0MgPSBAQ0NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREFUQURJUk5BTUUgPSBAREFUQURJUk5BTUVACitEQlVTX0NGTEFHUyA9IEBEQlVTX0NGTEFHU0AKK0RCVVNfTElCUyA9IEBEQlVTX0xJQlNACitEQlVTX1NZU1RFTV9CVVNfREVGQVVMVF9BRERSRVNTID0gQERCVVNfU1lTVEVNX0JVU19ERUZBVUxUX0FERFJFU1NACitEQlVTX1NZU19ESVIgPSBAREJVU19TWVNfRElSQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RMTFRPT0wgPSBARExMVE9PTEAKK0RPWFlHRU5fUEFQRVJfU0laRSA9IEBET1hZR0VOX1BBUEVSX1NJWkVACitEU1lNVVRJTCA9IEBEU1lNVVRJTEAKK0RVTVBCSU4gPSBARFVNUEJJTkAKK0RYX0NPTkZJRyA9IEBEWF9DT05GSUdACitEWF9ET0NESVIgPSBARFhfRE9DRElSQAorRFhfRE9UID0gQERYX0RPVEAKK0RYX0RPWFlHRU4gPSBARFhfRE9YWUdFTkAKK0RYX0RWSVBTID0gQERYX0RWSVBTQAorRFhfRUdSRVAgPSBARFhfRUdSRVBACitEWF9FTlYgPSBARFhfRU5WQAorRFhfRkxBR19jaGkgPSBARFhfRkxBR19jaGlACitEWF9GTEFHX2NobSA9IEBEWF9GTEFHX2NobUAKK0RYX0ZMQUdfZG9jID0gQERYX0ZMQUdfZG9jQAorRFhfRkxBR19kb3QgPSBARFhfRkxBR19kb3RACitEWF9GTEFHX2h0bWwgPSBARFhfRkxBR19odG1sQAorRFhfRkxBR19tYW4gPSBARFhfRkxBR19tYW5ACitEWF9GTEFHX3BkZiA9IEBEWF9GTEFHX3BkZkAKK0RYX0ZMQUdfcHMgPSBARFhfRkxBR19wc0AKK0RYX0ZMQUdfcnRmID0gQERYX0ZMQUdfcnRmQAorRFhfRkxBR194bWwgPSBARFhfRkxBR194bWxACitEWF9ISEMgPSBARFhfSEhDQAorRFhfTEFURVggPSBARFhfTEFURVhACitEWF9NQUtFSU5ERVggPSBARFhfTUFLRUlOREVYQAorRFhfUERGTEFURVggPSBARFhfUERGTEFURVhACitEWF9QRVJMID0gQERYX1BFUkxACitEWF9QUk9KRUNUID0gQERYX1BST0pFQ1RACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VYRUVYVCA9IEBFWEVFWFRACitGR1JFUCA9IEBGR1JFUEAKK0dBQ1VUSUwgPSBAR0FDVVRJTEAKK0dFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACitHTElCMjBfQ0ZMQUdTID0gQEdMSUIyMF9DRkxBR1NACitHTElCMjBfTElCUyA9IEBHTElCMjBfTElCU0AKK0dNT0ZJTEVTID0gQEdNT0ZJTEVTQAorR01TR0ZNVCA9IEBHTVNHRk1UQAorR09CSkVDVF9DRkxBR1MgPSBAR09CSkVDVF9DRkxBR1NACitHT0JKRUNUX0xJQlMgPSBAR09CSkVDVF9MSUJTQAorR1JFUCA9IEBHUkVQQAorR1RLMjBfQ0ZMQUdTID0gQEdUSzIwX0NGTEFHU0AKK0dUSzIwX0xJQlMgPSBAR1RLMjBfTElCU0AKK0dUSzMwX0NGTEFHUyA9IEBHVEszMF9DRkxBR1NACitHVEszMF9MSUJTID0gQEdUSzMwX0xJQlNACitIT1dMX0NPTVBBVF9WRVJTSU9OID0gQEhPV0xfQ09NUEFUX1ZFUlNJT05ACitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lOU1RPQkpFWFQgPSBASU5TVE9CSkVYVEAKK0lOVExMSUJTID0gQElOVExMSUJTQAorSU5UTFRPT0xfRVhUUkFDVCA9IEBJTlRMVE9PTF9FWFRSQUNUQAorSU5UTFRPT0xfTUVSR0UgPSBASU5UTFRPT0xfTUVSR0VACitJTlRMVE9PTF9QRVJMID0gQElOVExUT09MX1BFUkxACitJTlRMVE9PTF9VUERBVEUgPSBASU5UTFRPT0xfVVBEQVRFQAorSU5UUk9TUEVDVElPTl9DRkxBR1MgPSBASU5UUk9TUEVDVElPTl9DRkxBR1NACitJTlRST1NQRUNUSU9OX0NPTVBJTEVSID0gQElOVFJPU1BFQ1RJT05fQ09NUElMRVJACitJTlRST1NQRUNUSU9OX0dFTkVSQVRFID0gQElOVFJPU1BFQ1RJT05fR0VORVJBVEVACitJTlRST1NQRUNUSU9OX0dJUkRJUiA9IEBJTlRST1NQRUNUSU9OX0dJUkRJUkAKK0lOVFJPU1BFQ1RJT05fTElCUyA9IEBJTlRST1NQRUNUSU9OX0xJQlNACitJTlRST1NQRUNUSU9OX01BS0VGSUxFID0gQElOVFJPU1BFQ1RJT05fTUFLRUZJTEVACitJTlRST1NQRUNUSU9OX1NDQU5ORVIgPSBASU5UUk9TUEVDVElPTl9TQ0FOTkVSQAorSU5UUk9TUEVDVElPTl9UWVBFTElCRElSID0gQElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUkAKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCQVZBSElfQ0xJRU5UX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DTElFTlRfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfQ09NTU9OX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DT01NT05fVkVSU0lPTl9JTkZPQAorTElCQVZBSElfQ09NUEFUX0hPV0xfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NPTVBBVF9IT1dMX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPTVBBVF9MSUJETlNfU0RfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NPTVBBVF9MSUJETlNfU0RfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfQ09SRV9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ09SRV9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9HTElCX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9HTElCX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0dPQkpFQ1RfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0dPQkpFQ1RfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfUVQzX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9RVDNfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfUVQ0X1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9RVDRfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfVUlfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX1VJX1ZFUlNJT05fSU5GT0AKK0xJQkRBRU1PTl9DRkxBR1MgPSBATElCREFFTU9OX0NGTEFHU0AKK0xJQkRBRU1PTl9MSUJTID0gQExJQkRBRU1PTl9MSUJTQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAorTUNTID0gQE1DU0AKK01EQVNTRU1CTEVSID0gQE1EQVNTRU1CTEVSQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTUtJTlNUQUxMRElSUyA9IEBNS0lOU1RBTExESVJTQAorTU9DX1FUMyA9IEBNT0NfUVQzQAorTU9DX1FUNCA9IEBNT0NfUVQ0QAorTU9OT0RPQ0VSID0gQE1PTk9ET0NFUkAKK01PTk9ET0NfQ0ZMQUdTID0gQE1PTk9ET0NfQ0ZMQUdTQAorTU9OT0RPQ19ESVIgPSBATU9OT0RPQ19ESVJACitNT05PRE9DX0xJQlMgPSBATU9OT0RPQ19MSUJTQAorTVNHRk1UID0gQE1TR0ZNVEAKK01TR0ZNVF9PUFRTID0gQE1TR0ZNVF9PUFRTQAorTVNHTUVSR0UgPSBATVNHTUVSR0VACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitPQkpEVU1QID0gQE9CSkRVTVBACitPQkpFWFQgPSBAT0JKRVhUQAorT1RPT0wgPSBAT1RPT0xACitPVE9PTDY0ID0gQE9UT09MNjRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK1BLR19DT05GSUdfTElCRElSID0gQFBLR19DT05GSUdfTElCRElSQAorUEtHX0NPTkZJR19QQVRIID0gQFBLR19DT05GSUdfUEFUSEAKK1BPRklMRVMgPSBAUE9GSUxFU0AKK1BPU1VCID0gQFBPU1VCQAorUE9fSU5fREFUQURJUl9GQUxTRSA9IEBQT19JTl9EQVRBRElSX0ZBTFNFQAorUE9fSU5fREFUQURJUl9UUlVFID0gQFBPX0lOX0RBVEFESVJfVFJVRUAKK1BUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKK1BUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAorUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKK1BZVEhPTiA9IEBQWVRIT05ACitQWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAorUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKK1BZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKK1BZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAorUVQzX0NGTEFHUyA9IEBRVDNfQ0ZMQUdTQAorUVQzX0xJQlMgPSBAUVQzX0xJQlNACitRVDRfQ0ZMQUdTID0gQFFUNF9DRkxBR1NACitRVDRfTElCUyA9IEBRVDRfTElCU0AKK1JBTkxJQiA9IEBSQU5MSUJACitTRUQgPSBAU0VEQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NUT1cgPSBAU1RPV0AKK1NUUklQID0gQFNUUklQQAorVVNFX05MUyA9IEBVU0VfTkxTQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorVklTSUJJTElUWV9ISURERU5fQ0ZMQUdTID0gQFZJU0lCSUxJVFlfSElEREVOX0NGTEFHU0AKK1hHRVRURVhUID0gQFhHRVRURVhUQAorWE1MX0NGTEFHUyA9IEBYTUxfQ0ZMQUdTQAorWE1MX0xJQlMgPSBAWE1MX0xJQlNACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9BUiA9IEBhY19jdF9BUkAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKK2FjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK2FjeF9wdGhyZWFkX2NvbmZpZyA9IEBhY3hfcHRocmVhZF9jb25maWdACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2F2YWhpX3J1bnRpbWVfZGlyID0gQGF2YWhpX3J1bnRpbWVfZGlyQAorYXZhaGlfc29ja2V0ID0gQGF2YWhpX3NvY2tldEAKK2F2YWhpbG9jYWxlZGlyID0gQGF2YWhpbG9jYWxlZGlyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitoYXZlX3BrZ19jb25maWcgPSBAaGF2ZV9wa2dfY29uZmlnQAoraGF2ZV94bWx0b21hbiA9IEBoYXZlX3htbHRvbWFuQAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2ludGVyZmFjZXNkaXIgPSBAaW50ZXJmYWNlc2RpckAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAorcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3B5ZXhlY2RpciA9IEBweWV4ZWNkaXJACitweXRob25kaXIgPSBAcHl0aG9uZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzcmNkaXIgPSBAc3JjZGlyQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAorc3lzdGVtZHN5c3RlbXVuaXRkaXIgPSBAc3lzdGVtZHN5c3RlbXVuaXRkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKKworIyBUaGlzIGNvb2wgZGVidWcgdHJhcCB3b3JrcyBvbiBpMzg2L2djYyBvbmx5CitBTV9DRkxBR1MgPSAtSSQodG9wX3NyY2RpcikgJy1EREVCVUdfVFJBUD1fX2FzbV9fKCJpbnQgJCQzIiknCitFWFRSQV9ESVNUID0gXAorCUF2YWhpQ29yZS0wLjYuZ2lyCisKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HT0JKRUNUX1RSVUVAYXZhaGlnb2JqZWN0aW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvYXZhaGktZ29iamVjdAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dPQkpFQ1RfVFJVRUBhdmFoaWdvYmplY3RpbmNsdWRlX0hFQURFUlMgPSBcCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR09CSkVDVF9UUlVFQAlnYS1jbGllbnQuaCBcCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR09CSkVDVF9UUlVFQAlnYS1lbnRyeS1ncm91cC5oIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HT0JKRUNUX1RSVUVACWdhLWVudW1zLmggXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dPQkpFQ1RfVFJVRUAJZ2EtZXJyb3IuaCBcCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR09CSkVDVF9UUlVFQAlnYS1yZWNvcmQtYnJvd3Nlci5oIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HT0JKRUNUX1RSVUVACWdhLXNlcnZpY2UtYnJvd3Nlci5oIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HT0JKRUNUX1RSVUVACWdhLXNlcnZpY2UtcmVzb2x2ZXIuaAorCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR09CSkVDVF9UUlVFQGxpYl9MVExJQlJBUklFUyA9IFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HT0JKRUNUX1RSVUVACWxpYmF2YWhpLWdvYmplY3QubGEKKworQEhBVkVfREJVU19UUlVFQEBIQVZFX0dPQkpFQ1RfVFJVRUBCVUlMVF9TT1VSQ0VTID0gXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dPQkpFQ1RfVFJVRUAJc2lnbmFscy1tYXJzaGFsLmxpc3QgXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dPQkpFQ1RfVFJVRUAJc2lnbmFscy1tYXJzaGFsLmggXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dPQkpFQ1RfVFJVRUAJc2lnbmFscy1tYXJzaGFsLmMgXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dPQkpFQ1RfVFJVRUAJZ2EtY2xpZW50LWVudW10eXBlcy5oIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HT0JKRUNUX1RSVUVACWdhLWNsaWVudC1lbnVtdHlwZXMuYyAgXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dPQkpFQ1RfVFJVRUAJZ2EtZW50cnktZ3JvdXAtZW51bXR5cGVzLmggXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dPQkpFQ1RfVFJVRUAJZ2EtZW50cnktZ3JvdXAtZW51bXR5cGVzLmMgIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HT0JKRUNUX1RSVUVACWdhLWVudW1zLWVudW10eXBlcy5oIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HT0JKRUNUX1RSVUVACWdhLWVudW1zLWVudW10eXBlcy5jCisKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HT0JKRUNUX1RSVUVAQ09SRV9TT1VSQ0VTID0gXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dPQkpFQ1RfVFJVRUAJZ2EtY2xpZW50LmMgZ2EtY2xpZW50LmggXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dPQkpFQ1RfVFJVRUAJZ2EtZW50cnktZ3JvdXAuYyBnYS1lbnRyeS1ncm91cC5oIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HT0JKRUNUX1RSVUVACWdhLWVudW1zLmggXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dPQkpFQ1RfVFJVRUAJZ2EtZXJyb3IuYyBnYS1lcnJvci5oIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HT0JKRUNUX1RSVUVACWdhLXJlY29yZC1icm93c2VyLmMgZ2EtcmVjb3JkLWJyb3dzZXIuaCBcCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR09CSkVDVF9UUlVFQAlnYS1zZXJ2aWNlLWJyb3dzZXIuYyBnYS1zZXJ2aWNlLWJyb3dzZXIuaCBcCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR09CSkVDVF9UUlVFQAlnYS1zZXJ2aWNlLXJlc29sdmVyLmMgZ2Etc2VydmljZS1yZXNvbHZlci5oCisKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HT0JKRUNUX1RSVUVAbGliYXZhaGlfZ29iamVjdF9sYV9TT1VSQ0VTID0gXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dPQkpFQ1RfVFJVRUAJJChDT1JFX1NPVVJDRVMpIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HT0JKRUNUX1RSVUVACSQoQlVJTFRfU09VUkNFUykKKworQEhBVkVfREJVU19UUlVFQEBIQVZFX0dPQkpFQ1RfVFJVRUBsaWJhdmFoaV9nb2JqZWN0X2xhX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAkKEdPQkpFQ1RfQ0ZMQUdTKQorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dPQkpFQ1RfVFJVRUBsaWJhdmFoaV9nb2JqZWN0X2xhX0xJQkFERCA9ICQoQU1fTERBREQpIC4uL2F2YWhpLWNvbW1vbi9saWJhdmFoaS1jb21tb24ubGEgLi4vYXZhaGktY2xpZW50L2xpYmF2YWhpLWNsaWVudC5sYSAuLi9hdmFoaS1nbGliL2xpYmF2YWhpLWdsaWIubGEgJChHT0JKRUNUX0xJQlMpCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR09CSkVDVF9UUlVFQGxpYmF2YWhpX2dvYmplY3RfbGFfTERGTEFHUyA9ICQoQU1fTERGTEFHUykgLXZlcnNpb24taW5mbyAkKExJQkFWQUhJX0dPQkpFQ1RfVkVSU0lPTl9JTkZPKSAtZXhwb3J0LXN5bWJvbHMtcmVnZXggJ15nYV8nCisKKyMgY29ycmVjdGx5IGNsZWFuIHRoZSBnZW5lcmF0ZWQgc291cmNlIGZpbGVzCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR09CSkVDVF9UUlVFQENMRUFORklMRVMgPSAkKEJVSUxUX1NPVVJDRVMpIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HT0JKRUNUX1RSVUVACSQoYW1fX2FwcGVuZF8yKQorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dPQkpFQ1RfVFJVRUBJTlRST1NQRUNUSU9OX0dJUlMgPSAgXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dPQkpFQ1RfVFJVRUAJJChhbV9fYXBwZW5kXzEpCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR09CSkVDVF9UUlVFQElOVFJPU1BFQ1RJT05fU0NBTk5FUl9BUkdTID0gLS1hZGQtaW5jbHVkZS1wYXRoPSQoc3JjZGlyKQorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dPQkpFQ1RfVFJVRUBJTlRST1NQRUNUSU9OX0NPTVBJTEVSX0FSR1MgPSAtLWluY2x1ZGVkaXI9JChzcmNkaXIpCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR09CSkVDVF9UUlVFQEBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUBpbnRyb3NwZWN0aW9uX3NvdXJjZXMgPSAkKGxpYmF2YWhpX2dvYmplY3RfbGFfU09VUkNFUykKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HT0JKRUNUX1RSVUVAQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQEF2YWhpXzBfNl9naXJfSU5DTFVERVMgPSBHT2JqZWN0LTIuMCBBdmFoaUNvcmUtMC42CitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR09CSkVDVF9UUlVFQEBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUBBdmFoaV8wXzZfZ2lyX0NGTEFHUyA9ICQobGliYXZhaGlfZ29iamVjdF9sYV9DRkxBR1MpCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR09CSkVDVF9UUlVFQEBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUBBdmFoaV8wXzZfZ2lyX0xJQlMgPSAkKGxpYl9MVExJQlJBUklFUykKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HT0JKRUNUX1RSVUVAQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQEF2YWhpXzBfNl9naXJfRklMRVMgPSAkKGFkZHByZWZpeCAkKHNyY2RpcikvLCAkKENPUkVfU09VUkNFUykpICQoQlVJTFRfU09VUkNFUykKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HT0JKRUNUX1RSVUVAQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQEF2YWhpXzBfNl9naXJfU0NBTk5FUkZMQUdTID0gLS1zdHJpcC1wcmVmaXg9R2EKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HT0JKRUNUX1RSVUVAQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQElOVFJPU1BFQ1RJT05fSU5TVEFMTF9HSVJTID0gQXZhaGlDb3JlLTAuNi5naXIgJChJTlRST1NQRUNUSU9OX0dJUlMpCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR09CSkVDVF9UUlVFQEBIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRUBnaXJkaXIgPSAkKGRhdGFkaXIpL2dpci0xLjAKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HT0JKRUNUX1RSVUVAQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQGdpcl9EQVRBID0gJChJTlRST1NQRUNUSU9OX0lOU1RBTExfR0lSUykKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HT0JKRUNUX1RSVUVAQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQHR5cGVsaWJkaXIgPSAkKGxpYmRpcikvZ2lyZXBvc2l0b3J5LTEuMAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dPQkpFQ1RfVFJVRUBASEFWRV9JTlRST1NQRUNUSU9OX1RSVUVAdHlwZWxpYl9EQVRBID0gJChJTlRST1NQRUNUSU9OX0lOU1RBTExfR0lSUzouZ2lyPS50eXBlbGliKQorYWxsOiAkKEJVSUxUX1NPVVJDRVMpCisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYWxsLWFtCisKKy5TVUZGSVhFUzoKKy5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCisJICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduIGF2YWhpLWdvYmplY3QvTWFrZWZpbGUnOyBcCisJJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1mb3JlaWduIGF2YWhpLWdvYmplY3QvTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6ICAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6ICAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKGFtX19hY2xvY2FsX200X2RlcHMpOgoraW5zdGFsbC1saWJMVExJQlJBUklFUzogJChsaWJfTFRMSUJSQVJJRVMpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJdGVzdCAteiAiJChsaWJkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChsaWJkaXIpIgorCUBsaXN0PSckKGxpYl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKGxpYmRpcikiIHx8IGxpc3Q9OyBcCisJbGlzdDI9OyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRwOyB0aGVuIFwKKwkgICAgbGlzdDI9IiQkbGlzdDIgJCRwIjsgXAorCSAgZWxzZSA6OyBmaTsgXAorCWRvbmU7IFwKKwl0ZXN0IC16ICIkJGxpc3QyIiB8fCB7IFwKKwkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAnJChERVNURElSKSQobGliZGlyKSciOyBcCisJICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAiJChERVNURElSKSQobGliZGlyKSI7IFwKKwl9CisKK3VuaW5zdGFsbC1saWJMVExJQlJBUklFUzoKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKGxpYl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKGxpYmRpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICAkKGFtX19zdHJpcF9kaXIpIFwKKwkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAnJChERVNURElSKSQobGliZGlyKS8kJGYnIjsgXAorCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgIiQoREVTVERJUikkKGxpYmRpcikvJCRmIjsgXAorCWRvbmUKKworY2xlYW4tbGliTFRMSUJSQVJJRVM6CisJLXRlc3QgLXogIiQobGliX0xUTElCUkFSSUVTKSIgfHwgcm0gLWYgJChsaWJfTFRMSUJSQVJJRVMpCisJQGxpc3Q9JyQobGliX0xUTElCUkFSSUVTKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgZGlyPSJgZWNobyAkJHAgfCBzZWQgLWUgJ3N8L1teL10qJCR8fCdgIjsgXAorCSAgdGVzdCAiJCRkaXIiICE9ICIkJHAiIHx8IGRpcj0uOyBcCisJICBlY2hvICJybSAtZiBcIiQke2Rpcn0vc29fbG9jYXRpb25zXCIiOyBcCisJICBybSAtZiAiJCR7ZGlyfS9zb19sb2NhdGlvbnMiOyBcCisJZG9uZQorbGliYXZhaGktZ29iamVjdC5sYTogJChsaWJhdmFoaV9nb2JqZWN0X2xhX09CSkVDVFMpICQobGliYXZhaGlfZ29iamVjdF9sYV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfbGliYXZhaGlfZ29iamVjdF9sYV9ERVBFTkRFTkNJRVMpIAorCSQoQU1fVl9DQ0xEKSQobGliYXZhaGlfZ29iamVjdF9sYV9MSU5LKSAkKGFtX2xpYmF2YWhpX2dvYmplY3RfbGFfcnBhdGgpICQobGliYXZhaGlfZ29iamVjdF9sYV9PQkpFQ1RTKSAkKGxpYmF2YWhpX2dvYmplY3RfbGFfTElCQUREKSAkKExJQlMpCisKK21vc3RseWNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICouJChPQkpFWFQpCisKK2Rpc3RjbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLnRhYi5jCisKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJhdmFoaV9nb2JqZWN0X2xhLWdhLWNsaWVudC1lbnVtdHlwZXMuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJhdmFoaV9nb2JqZWN0X2xhLWdhLWNsaWVudC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmF2YWhpX2dvYmplY3RfbGEtZ2EtZW50cnktZ3JvdXAtZW51bXR5cGVzLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliYXZhaGlfZ29iamVjdF9sYS1nYS1lbnRyeS1ncm91cC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmF2YWhpX2dvYmplY3RfbGEtZ2EtZW51bXMtZW51bXR5cGVzLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliYXZhaGlfZ29iamVjdF9sYS1nYS1lcnJvci5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmF2YWhpX2dvYmplY3RfbGEtZ2EtcmVjb3JkLWJyb3dzZXIuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJhdmFoaV9nb2JqZWN0X2xhLWdhLXNlcnZpY2UtYnJvd3Nlci5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmF2YWhpX2dvYmplY3RfbGEtZ2Etc2VydmljZS1yZXNvbHZlci5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmF2YWhpX2dvYmplY3RfbGEtc2lnbmFscy1tYXJzaGFsLlBsb0BhbV9fcXVvdGVACisKKy5jLm86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jICQ8CisKKy5jLm9iajoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyBgJChDWUdQQVRIX1cpICckPCdgCisKKy5jLmxvOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAorCitsaWJhdmFoaV9nb2JqZWN0X2xhLWdhLWNsaWVudC5sbzogZ2EtY2xpZW50LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV9nb2JqZWN0X2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJhdmFoaV9nb2JqZWN0X2xhLWdhLWNsaWVudC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliYXZhaGlfZ29iamVjdF9sYS1nYS1jbGllbnQuVHBvIC1jIC1vIGxpYmF2YWhpX2dvYmplY3RfbGEtZ2EtY2xpZW50LmxvIGB0ZXN0IC1mICdnYS1jbGllbnQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ2EtY2xpZW50LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmF2YWhpX2dvYmplY3RfbGEtZ2EtY2xpZW50LlRwbyAkKERFUERJUikvbGliYXZhaGlfZ29iamVjdF9sYS1nYS1jbGllbnQuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ2EtY2xpZW50LmMnIG9iamVjdD0nbGliYXZhaGlfZ29iamVjdF9sYS1nYS1jbGllbnQubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV9nb2JqZWN0X2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmF2YWhpX2dvYmplY3RfbGEtZ2EtY2xpZW50LmxvIGB0ZXN0IC1mICdnYS1jbGllbnQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ2EtY2xpZW50LmMKKworbGliYXZhaGlfZ29iamVjdF9sYS1nYS1lbnRyeS1ncm91cC5sbzogZ2EtZW50cnktZ3JvdXAuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmF2YWhpX2dvYmplY3RfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmF2YWhpX2dvYmplY3RfbGEtZ2EtZW50cnktZ3JvdXAubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmF2YWhpX2dvYmplY3RfbGEtZ2EtZW50cnktZ3JvdXAuVHBvIC1jIC1vIGxpYmF2YWhpX2dvYmplY3RfbGEtZ2EtZW50cnktZ3JvdXAubG8gYHRlc3QgLWYgJ2dhLWVudHJ5LWdyb3VwLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdhLWVudHJ5LWdyb3VwLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmF2YWhpX2dvYmplY3RfbGEtZ2EtZW50cnktZ3JvdXAuVHBvICQoREVQRElSKS9saWJhdmFoaV9nb2JqZWN0X2xhLWdhLWVudHJ5LWdyb3VwLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dhLWVudHJ5LWdyb3VwLmMnIG9iamVjdD0nbGliYXZhaGlfZ29iamVjdF9sYS1nYS1lbnRyeS1ncm91cC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmF2YWhpX2dvYmplY3RfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliYXZhaGlfZ29iamVjdF9sYS1nYS1lbnRyeS1ncm91cC5sbyBgdGVzdCAtZiAnZ2EtZW50cnktZ3JvdXAuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ2EtZW50cnktZ3JvdXAuYworCitsaWJhdmFoaV9nb2JqZWN0X2xhLWdhLWVycm9yLmxvOiBnYS1lcnJvci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliYXZhaGlfZ29iamVjdF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliYXZhaGlfZ29iamVjdF9sYS1nYS1lcnJvci5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliYXZhaGlfZ29iamVjdF9sYS1nYS1lcnJvci5UcG8gLWMgLW8gbGliYXZhaGlfZ29iamVjdF9sYS1nYS1lcnJvci5sbyBgdGVzdCAtZiAnZ2EtZXJyb3IuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ2EtZXJyb3IuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliYXZhaGlfZ29iamVjdF9sYS1nYS1lcnJvci5UcG8gJChERVBESVIpL2xpYmF2YWhpX2dvYmplY3RfbGEtZ2EtZXJyb3IuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ2EtZXJyb3IuYycgb2JqZWN0PSdsaWJhdmFoaV9nb2JqZWN0X2xhLWdhLWVycm9yLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliYXZhaGlfZ29iamVjdF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJhdmFoaV9nb2JqZWN0X2xhLWdhLWVycm9yLmxvIGB0ZXN0IC1mICdnYS1lcnJvci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BnYS1lcnJvci5jCisKK2xpYmF2YWhpX2dvYmplY3RfbGEtZ2EtcmVjb3JkLWJyb3dzZXIubG86IGdhLXJlY29yZC1icm93c2VyLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV9nb2JqZWN0X2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJhdmFoaV9nb2JqZWN0X2xhLWdhLXJlY29yZC1icm93c2VyLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJhdmFoaV9nb2JqZWN0X2xhLWdhLXJlY29yZC1icm93c2VyLlRwbyAtYyAtbyBsaWJhdmFoaV9nb2JqZWN0X2xhLWdhLXJlY29yZC1icm93c2VyLmxvIGB0ZXN0IC1mICdnYS1yZWNvcmQtYnJvd3Nlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BnYS1yZWNvcmQtYnJvd3Nlci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJhdmFoaV9nb2JqZWN0X2xhLWdhLXJlY29yZC1icm93c2VyLlRwbyAkKERFUERJUikvbGliYXZhaGlfZ29iamVjdF9sYS1nYS1yZWNvcmQtYnJvd3Nlci5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnYS1yZWNvcmQtYnJvd3Nlci5jJyBvYmplY3Q9J2xpYmF2YWhpX2dvYmplY3RfbGEtZ2EtcmVjb3JkLWJyb3dzZXIubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV9nb2JqZWN0X2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmF2YWhpX2dvYmplY3RfbGEtZ2EtcmVjb3JkLWJyb3dzZXIubG8gYHRlc3QgLWYgJ2dhLXJlY29yZC1icm93c2VyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdhLXJlY29yZC1icm93c2VyLmMKKworbGliYXZhaGlfZ29iamVjdF9sYS1nYS1zZXJ2aWNlLWJyb3dzZXIubG86IGdhLXNlcnZpY2UtYnJvd3Nlci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliYXZhaGlfZ29iamVjdF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliYXZhaGlfZ29iamVjdF9sYS1nYS1zZXJ2aWNlLWJyb3dzZXIubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmF2YWhpX2dvYmplY3RfbGEtZ2Etc2VydmljZS1icm93c2VyLlRwbyAtYyAtbyBsaWJhdmFoaV9nb2JqZWN0X2xhLWdhLXNlcnZpY2UtYnJvd3Nlci5sbyBgdGVzdCAtZiAnZ2Etc2VydmljZS1icm93c2VyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdhLXNlcnZpY2UtYnJvd3Nlci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJhdmFoaV9nb2JqZWN0X2xhLWdhLXNlcnZpY2UtYnJvd3Nlci5UcG8gJChERVBESVIpL2xpYmF2YWhpX2dvYmplY3RfbGEtZ2Etc2VydmljZS1icm93c2VyLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dhLXNlcnZpY2UtYnJvd3Nlci5jJyBvYmplY3Q9J2xpYmF2YWhpX2dvYmplY3RfbGEtZ2Etc2VydmljZS1icm93c2VyLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliYXZhaGlfZ29iamVjdF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJhdmFoaV9nb2JqZWN0X2xhLWdhLXNlcnZpY2UtYnJvd3Nlci5sbyBgdGVzdCAtZiAnZ2Etc2VydmljZS1icm93c2VyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdhLXNlcnZpY2UtYnJvd3Nlci5jCisKK2xpYmF2YWhpX2dvYmplY3RfbGEtZ2Etc2VydmljZS1yZXNvbHZlci5sbzogZ2Etc2VydmljZS1yZXNvbHZlci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliYXZhaGlfZ29iamVjdF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliYXZhaGlfZ29iamVjdF9sYS1nYS1zZXJ2aWNlLXJlc29sdmVyLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJhdmFoaV9nb2JqZWN0X2xhLWdhLXNlcnZpY2UtcmVzb2x2ZXIuVHBvIC1jIC1vIGxpYmF2YWhpX2dvYmplY3RfbGEtZ2Etc2VydmljZS1yZXNvbHZlci5sbyBgdGVzdCAtZiAnZ2Etc2VydmljZS1yZXNvbHZlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BnYS1zZXJ2aWNlLXJlc29sdmVyLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmF2YWhpX2dvYmplY3RfbGEtZ2Etc2VydmljZS1yZXNvbHZlci5UcG8gJChERVBESVIpL2xpYmF2YWhpX2dvYmplY3RfbGEtZ2Etc2VydmljZS1yZXNvbHZlci5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnYS1zZXJ2aWNlLXJlc29sdmVyLmMnIG9iamVjdD0nbGliYXZhaGlfZ29iamVjdF9sYS1nYS1zZXJ2aWNlLXJlc29sdmVyLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliYXZhaGlfZ29iamVjdF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJhdmFoaV9nb2JqZWN0X2xhLWdhLXNlcnZpY2UtcmVzb2x2ZXIubG8gYHRlc3QgLWYgJ2dhLXNlcnZpY2UtcmVzb2x2ZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ2Etc2VydmljZS1yZXNvbHZlci5jCisKK2xpYmF2YWhpX2dvYmplY3RfbGEtc2lnbmFscy1tYXJzaGFsLmxvOiBzaWduYWxzLW1hcnNoYWwuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmF2YWhpX2dvYmplY3RfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmF2YWhpX2dvYmplY3RfbGEtc2lnbmFscy1tYXJzaGFsLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJhdmFoaV9nb2JqZWN0X2xhLXNpZ25hbHMtbWFyc2hhbC5UcG8gLWMgLW8gbGliYXZhaGlfZ29iamVjdF9sYS1zaWduYWxzLW1hcnNoYWwubG8gYHRlc3QgLWYgJ3NpZ25hbHMtbWFyc2hhbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzaWduYWxzLW1hcnNoYWwuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliYXZhaGlfZ29iamVjdF9sYS1zaWduYWxzLW1hcnNoYWwuVHBvICQoREVQRElSKS9saWJhdmFoaV9nb2JqZWN0X2xhLXNpZ25hbHMtbWFyc2hhbC5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdzaWduYWxzLW1hcnNoYWwuYycgb2JqZWN0PSdsaWJhdmFoaV9nb2JqZWN0X2xhLXNpZ25hbHMtbWFyc2hhbC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmF2YWhpX2dvYmplY3RfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliYXZhaGlfZ29iamVjdF9sYS1zaWduYWxzLW1hcnNoYWwubG8gYHRlc3QgLWYgJ3NpZ25hbHMtbWFyc2hhbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzaWduYWxzLW1hcnNoYWwuYworCitsaWJhdmFoaV9nb2JqZWN0X2xhLWdhLWNsaWVudC1lbnVtdHlwZXMubG86IGdhLWNsaWVudC1lbnVtdHlwZXMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmF2YWhpX2dvYmplY3RfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmF2YWhpX2dvYmplY3RfbGEtZ2EtY2xpZW50LWVudW10eXBlcy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliYXZhaGlfZ29iamVjdF9sYS1nYS1jbGllbnQtZW51bXR5cGVzLlRwbyAtYyAtbyBsaWJhdmFoaV9nb2JqZWN0X2xhLWdhLWNsaWVudC1lbnVtdHlwZXMubG8gYHRlc3QgLWYgJ2dhLWNsaWVudC1lbnVtdHlwZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ2EtY2xpZW50LWVudW10eXBlcy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJhdmFoaV9nb2JqZWN0X2xhLWdhLWNsaWVudC1lbnVtdHlwZXMuVHBvICQoREVQRElSKS9saWJhdmFoaV9nb2JqZWN0X2xhLWdhLWNsaWVudC1lbnVtdHlwZXMuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ2EtY2xpZW50LWVudW10eXBlcy5jJyBvYmplY3Q9J2xpYmF2YWhpX2dvYmplY3RfbGEtZ2EtY2xpZW50LWVudW10eXBlcy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmF2YWhpX2dvYmplY3RfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliYXZhaGlfZ29iamVjdF9sYS1nYS1jbGllbnQtZW51bXR5cGVzLmxvIGB0ZXN0IC1mICdnYS1jbGllbnQtZW51bXR5cGVzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdhLWNsaWVudC1lbnVtdHlwZXMuYworCitsaWJhdmFoaV9nb2JqZWN0X2xhLWdhLWVudHJ5LWdyb3VwLWVudW10eXBlcy5sbzogZ2EtZW50cnktZ3JvdXAtZW51bXR5cGVzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV9nb2JqZWN0X2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJhdmFoaV9nb2JqZWN0X2xhLWdhLWVudHJ5LWdyb3VwLWVudW10eXBlcy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliYXZhaGlfZ29iamVjdF9sYS1nYS1lbnRyeS1ncm91cC1lbnVtdHlwZXMuVHBvIC1jIC1vIGxpYmF2YWhpX2dvYmplY3RfbGEtZ2EtZW50cnktZ3JvdXAtZW51bXR5cGVzLmxvIGB0ZXN0IC1mICdnYS1lbnRyeS1ncm91cC1lbnVtdHlwZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ2EtZW50cnktZ3JvdXAtZW51bXR5cGVzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmF2YWhpX2dvYmplY3RfbGEtZ2EtZW50cnktZ3JvdXAtZW51bXR5cGVzLlRwbyAkKERFUERJUikvbGliYXZhaGlfZ29iamVjdF9sYS1nYS1lbnRyeS1ncm91cC1lbnVtdHlwZXMuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ2EtZW50cnktZ3JvdXAtZW51bXR5cGVzLmMnIG9iamVjdD0nbGliYXZhaGlfZ29iamVjdF9sYS1nYS1lbnRyeS1ncm91cC1lbnVtdHlwZXMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV9nb2JqZWN0X2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmF2YWhpX2dvYmplY3RfbGEtZ2EtZW50cnktZ3JvdXAtZW51bXR5cGVzLmxvIGB0ZXN0IC1mICdnYS1lbnRyeS1ncm91cC1lbnVtdHlwZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ2EtZW50cnktZ3JvdXAtZW51bXR5cGVzLmMKKworbGliYXZhaGlfZ29iamVjdF9sYS1nYS1lbnVtcy1lbnVtdHlwZXMubG86IGdhLWVudW1zLWVudW10eXBlcy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliYXZhaGlfZ29iamVjdF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliYXZhaGlfZ29iamVjdF9sYS1nYS1lbnVtcy1lbnVtdHlwZXMubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmF2YWhpX2dvYmplY3RfbGEtZ2EtZW51bXMtZW51bXR5cGVzLlRwbyAtYyAtbyBsaWJhdmFoaV9nb2JqZWN0X2xhLWdhLWVudW1zLWVudW10eXBlcy5sbyBgdGVzdCAtZiAnZ2EtZW51bXMtZW51bXR5cGVzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdhLWVudW1zLWVudW10eXBlcy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJhdmFoaV9nb2JqZWN0X2xhLWdhLWVudW1zLWVudW10eXBlcy5UcG8gJChERVBESVIpL2xpYmF2YWhpX2dvYmplY3RfbGEtZ2EtZW51bXMtZW51bXR5cGVzLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dhLWVudW1zLWVudW10eXBlcy5jJyBvYmplY3Q9J2xpYmF2YWhpX2dvYmplY3RfbGEtZ2EtZW51bXMtZW51bXR5cGVzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliYXZhaGlfZ29iamVjdF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJhdmFoaV9nb2JqZWN0X2xhLWdhLWVudW1zLWVudW10eXBlcy5sbyBgdGVzdCAtZiAnZ2EtZW51bXMtZW51bXR5cGVzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdhLWVudW1zLWVudW10eXBlcy5jCisKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJzCitpbnN0YWxsLWdpckRBVEE6ICQoZ2lyX0RBVEEpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJdGVzdCAteiAiJChnaXJkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChnaXJkaXIpIgorCUBsaXN0PSckKGdpcl9EQVRBKSc7IHRlc3QgLW4gIiQoZ2lyZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICBlY2hvICIkJGQkJHAiOyBcCisJZG9uZSB8ICQoYW1fX2Jhc2VfbGlzdCkgfCBcCisJd2hpbGUgcmVhZCBmaWxlczsgZG8gXAorCSAgZWNobyAiICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICckKERFU1RESVIpJChnaXJkaXIpJyI7IFwKKwkgICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICIkKERFU1RESVIpJChnaXJkaXIpIiB8fCBleGl0ICQkPzsgXAorCWRvbmUKKwordW5pbnN0YWxsLWdpckRBVEE6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChnaXJfREFUQSknOyB0ZXN0IC1uICIkKGdpcmRpcikiIHx8IGxpc3Q9OyBcCisJZmlsZXM9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7IFwKKwlkaXI9JyQoREVTVERJUikkKGdpcmRpciknOyAkKGFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIpCitpbnN0YWxsLXR5cGVsaWJEQVRBOiAkKHR5cGVsaWJfREFUQSkKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwl0ZXN0IC16ICIkKHR5cGVsaWJkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJCh0eXBlbGliZGlyKSIKKwlAbGlzdD0nJCh0eXBlbGliX0RBVEEpJzsgdGVzdCAtbiAiJCh0eXBlbGliZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICBlY2hvICIkJGQkJHAiOyBcCisJZG9uZSB8ICQoYW1fX2Jhc2VfbGlzdCkgfCBcCisJd2hpbGUgcmVhZCBmaWxlczsgZG8gXAorCSAgZWNobyAiICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICckKERFU1RESVIpJCh0eXBlbGliZGlyKSciOyBcCisJICAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAiJChERVNURElSKSQodHlwZWxpYmRpcikiIHx8IGV4aXQgJCQ/OyBcCisJZG9uZQorCit1bmluc3RhbGwtdHlwZWxpYkRBVEE6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJCh0eXBlbGliX0RBVEEpJzsgdGVzdCAtbiAiJCh0eXBlbGliZGlyKSIgfHwgbGlzdD07IFwKKwlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IHNlZCAtZSAnc3xeLiovfHwnYDsgXAorCWRpcj0nJChERVNURElSKSQodHlwZWxpYmRpciknOyAkKGFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIpCitpbnN0YWxsLWF2YWhpZ29iamVjdGluY2x1ZGVIRUFERVJTOiAkKGF2YWhpZ29iamVjdGluY2x1ZGVfSEVBREVSUykKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwl0ZXN0IC16ICIkKGF2YWhpZ29iamVjdGluY2x1ZGVkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChhdmFoaWdvYmplY3RpbmNsdWRlZGlyKSIKKwlAbGlzdD0nJChhdmFoaWdvYmplY3RpbmNsdWRlX0hFQURFUlMpJzsgdGVzdCAtbiAiJChhdmFoaWdvYmplY3RpbmNsdWRlZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICBlY2hvICIkJGQkJHAiOyBcCisJZG9uZSB8ICQoYW1fX2Jhc2VfbGlzdCkgfCBcCisJd2hpbGUgcmVhZCBmaWxlczsgZG8gXAorCSAgZWNobyAiICQoSU5TVEFMTF9IRUFERVIpICQkZmlsZXMgJyQoREVTVERJUikkKGF2YWhpZ29iamVjdGluY2x1ZGVkaXIpJyI7IFwKKwkgICQoSU5TVEFMTF9IRUFERVIpICQkZmlsZXMgIiQoREVTVERJUikkKGF2YWhpZ29iamVjdGluY2x1ZGVkaXIpIiB8fCBleGl0ICQkPzsgXAorCWRvbmUKKwordW5pbnN0YWxsLWF2YWhpZ29iamVjdGluY2x1ZGVIRUFERVJTOgorCUAkKE5PUk1BTF9VTklOU1RBTEwpCisJQGxpc3Q9JyQoYXZhaGlnb2JqZWN0aW5jbHVkZV9IRUFERVJTKSc7IHRlc3QgLW4gIiQoYXZhaGlnb2JqZWN0aW5jbHVkZWRpcikiIHx8IGxpc3Q9OyBcCisJZmlsZXM9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7IFwKKwlkaXI9JyQoREVTVERJUikkKGF2YWhpZ29iamVjdGluY2x1ZGVkaXIpJzsgJChhbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyKQorCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCW1raWQgLWZJRCAkJHVuaXF1ZQordGFnczogVEFHUworCitUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXNldCB4OyBcCisJaGVyZT1gcHdkYDsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlzaGlmdDsgXAorCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisJICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCisJICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAorCSAgZWxzZSBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAkJHVuaXF1ZTsgXAorCSAgZmk7IFwKKwlmaQorY3RhZ3M6IENUQUdTCitDVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCisJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCisJICAgICAkJHVuaXF1ZQorCitHVEFHUzoKKwloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgorCitkaXN0Y2xlYW4tdGFnczoKKwktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworQEhBVkVfREJVU19GQUxTRUBkaXN0LWhvb2s6CitASEFWRV9HT0JKRUNUX0ZBTFNFQGRpc3QtaG9vazoKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgXAorCSAgdG9wX2Rpc3RkaXI9IiQodG9wX2Rpc3RkaXIpIiBkaXN0ZGlyPSIkKGRpc3RkaXIpIiBcCisJICBkaXN0LWhvb2sKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiAkKEJVSUxUX1NPVVJDRVMpCisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUgJChMVExJQlJBUklFUykgJChEQVRBKSAkKEhFQURFUlMpCitpbnN0YWxsZGlyczoKKwlmb3IgZGlyIGluICIkKERFU1RESVIpJChsaWJkaXIpIiAiJChERVNURElSKSQoZ2lyZGlyKSIgIiQoREVTVERJUikkKHR5cGVsaWJkaXIpIiAiJChERVNURElSKSQoYXZhaGlnb2JqZWN0aW5jbHVkZWRpcikiOyBkbyBcCisJICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCisJZG9uZQoraW5zdGFsbDogJChCVUlMVF9TT1VSQ0VTKQorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgICAgIGluc3RhbGw7IFwKKwllbHNlIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAorCWZpCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENMRUFORklMRVMpIiB8fCBybSAtZiAkKENMRUFORklMRVMpCisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKKwktdGVzdCAteiAiJChCVUlMVF9TT1VSQ0VTKSIgfHwgcm0gLWYgJChCVUlMVF9TT1VSQ0VTKQorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYkxUTElCUkFSSUVTIGNsZWFuLWxpYnRvb2wgXAorCW1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLWF2YWhpZ29iamVjdGluY2x1ZGVIRUFERVJTIGluc3RhbGwtZ2lyREFUQSBcCisJaW5zdGFsbC10eXBlbGliREFUQQorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1kdmktYW06CisKK2luc3RhbGwtZXhlYy1hbTogaW5zdGFsbC1saWJMVExJQlJBUklFUworCitpbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQorCitpbnN0YWxsLWh0bWwtYW06CisKK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisKK2luc3RhbGwtaW5mby1hbToKKworaW5zdGFsbC1tYW46CisKK2luc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQorCitpbnN0YWxsLXBkZi1hbToKKworaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQorCitpbnN0YWxsLXBzLWFtOgorCitpbnN0YWxsY2hlY2stYW06CisKK21haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKKwltb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLWFtCisKK3BkZi1hbToKKworcHM6IHBzLWFtCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06IHVuaW5zdGFsbC1hdmFoaWdvYmplY3RpbmNsdWRlSEVBREVSUyB1bmluc3RhbGwtZ2lyREFUQSBcCisJdW5pbnN0YWxsLWxpYkxUTElCUkFSSUVTIHVuaW5zdGFsbC10eXBlbGliREFUQQorCisuTUFLRTogYWxsIGNoZWNrIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisKKy5QSE9OWTogQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKKwljbGVhbi1saWJMVExJQlJBUklFUyBjbGVhbi1saWJ0b29sIGN0YWdzIGRpc3QtaG9vayBkaXN0Y2xlYW4gXAorCWRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIFwKKwlkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBcCisJaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtYXZhaGlnb2JqZWN0aW5jbHVkZUhFQURFUlMgXAorCWluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gXAorCWluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1naXJEQVRBIGluc3RhbGwtaHRtbCBcCisJaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gXAorCWluc3RhbGwtbGliTFRMSUJSQVJJRVMgaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gXAorCWluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBpbnN0YWxsLXN0cmlwIGluc3RhbGwtdHlwZWxpYkRBVEEgXAorCWluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBcCisJbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWNvbXBpbGUgXAorCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKKwl0YWdzIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gXAorCXVuaW5zdGFsbC1hdmFoaWdvYmplY3RpbmNsdWRlSEVBREVSUyB1bmluc3RhbGwtZ2lyREFUQSBcCisJdW5pbnN0YWxsLWxpYkxUTElCUkFSSUVTIHVuaW5zdGFsbC10eXBlbGliREFUQQorCisKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HT0JKRUNUX1RSVUVAZGlzdC1ob29rOgorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dPQkpFQ1RfVFJVRUAJJChzaGVsbCBmb3IgeCBpbiAkKEJVSUxUX1NPVVJDRVMpOyBkbyBybSAtZiAkKGRpc3RkaXIpLyQkeCA7IGRvbmUpCisKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HT0JKRUNUX1RSVUVAc2lnbmFscy1tYXJzaGFsLmxpc3Q6ICQoQ09SRV9TT1VSQ0VTKSBNYWtlZmlsZS5hbQorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dPQkpFQ1RfVFJVRUAJJChBTV9WX0dFTikoIGNkICQoc3JjZGlyKSAmJiBcCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR09CSkVDVF9UUlVFQAlzZWQgLW4gLWUgJ3MvLipfZ2Ffc2lnbmFsc19tYXJzaGFsX1woW0EtWl0qX19bQS1aX10qXCkuKi9cMS9wJyBcCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR09CSkVDVF9UUlVFQAkJJChDT1JFX1NPVVJDRVMpICkgXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dPQkpFQ1RfVFJVRUAJCXwgc2VkIC1lICdzL19fLzovJyAtZSAneS9fLywvJyB8IHNvcnQgLXUgPiAkQC50bXAgJiYgXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dPQkpFQ1RfVFJVRUAJaWYgY21wIC1zICRALnRtcCAkQDsgdGhlbiBcCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR09CSkVDVF9UUlVFQAkJcm0gJEAudG1wOyBcCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR09CSkVDVF9UUlVFQAllbHNlIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HT0JKRUNUX1RSVUVACQltdiAkQC50bXAgJEA7IFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HT0JKRUNUX1RSVUVACWZpCisKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HT0JKRUNUX1RSVUVAc2lnbmFscy1tYXJzaGFsLmg6IHNpZ25hbHMtbWFyc2hhbC5saXN0CitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR09CSkVDVF9UUlVFQAkkKEFNX1ZfR0VOKWdsaWItZ2VubWFyc2hhbCAtLWhlYWRlciAtLXByZWZpeD1fZ2Ffc2lnbmFsc19tYXJzaGFsICQ8ID4gJEAKKworQEhBVkVfREJVU19UUlVFQEBIQVZFX0dPQkpFQ1RfVFJVRUBzaWduYWxzLW1hcnNoYWwuYzogc2lnbmFscy1tYXJzaGFsLmxpc3QKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HT0JKRUNUX1RSVUVACSQoQU1fVl9HRU4pKGVjaG8gIiNpbmNsdWRlIFwic2lnbmFscy1tYXJzaGFsLmhcIiIgOyBnbGliLWdlbm1hcnNoYWwgLS1ib2R5IC0tcHJlZml4PV9nYV9zaWduYWxzX21hcnNoYWwgJDwgKSA+ICRACisKKyMgcnVsZXMgZm9yIG1ha2luZyB0aGUgZ2xpYiBlbnVtIG9iamVjdHMKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HT0JKRUNUX1RSVUVAJS1lbnVtdHlwZXMuaDogJS5oIE1ha2VmaWxlLmluCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR09CSkVDVF9UUlVFQAkkKEFNX1ZfR0VOKWdsaWItbWtlbnVtcyBcCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR09CSkVDVF9UUlVFQAktLWZoZWFkICIjaWZuZGVmIF9fJChzaGVsbCBlY2hvICQqIHwgdHIgWzpsb3dlcjpdLSBbOnVwcGVyOl1fKV9FTlVNX1RZUEVTX0hfX1xuI2RlZmluZSBfXyQoc2hlbGwgZWNobyAkKiB8IHRyIFs6bG93ZXI6XS0gWzp1cHBlcjpdXylfRU5VTV9UWVBFU19IX19cblxuI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+XG5cbkdfQkVHSU5fREVDTFNcbiIgXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dPQkpFQ1RfVFJVRUAJLS1mcHJvZCAiLyogZW51bWVyYXRpb25zIGZyb20gXCJAZmlsZW5hbWVAXCIgKi9cbiIgXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dPQkpFQ1RfVFJVRUAJLS12aGVhZCAiR1R5cGUgQGVudW1fbmFtZUBfZ2V0X3R5cGUgKHZvaWQpO1xuI2RlZmluZSAkKHNoZWxsIGVjaG8gJCogfCB0ciBbOmxvd2VyOl0tIFs6dXBwZXI6XV8gfCBzZWQgJ3MvXy4qLy8nKV9UWVBFX0BFTlVNU0hPUlRAIChAZW51bV9uYW1lQF9nZXRfdHlwZSgpKVxuIiAgICAgICAgIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HT0JKRUNUX1RSVUVACS0tZnRhaWwgIkdfRU5EX0RFQ0xTXG5cbiNlbmRpZiAvKiBfXyQoc2hlbGwgZWNobyAkKiB8IHRyIFs6bG93ZXI6XS0gWzp1cHBlcjpdXylfRU5VTV9UWVBFU19IX18gKi8iIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HT0JKRUNUX1RSVUVACSQ8ID4gJEAKKworQEhBVkVfREJVU19UUlVFQEBIQVZFX0dPQkpFQ1RfVFJVRUAlLWVudW10eXBlcy5jOiAlLmggTWFrZWZpbGUuaW4KK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HT0JKRUNUX1RSVUVACSQoQU1fVl9HRU4pZ2xpYi1ta2VudW1zIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HT0JKRUNUX1RSVUVACS0tZmhlYWQgIiNpbmNsdWRlIDwkKi5oPlxuI2luY2x1ZGU8JCotZW51bXR5cGVzLmg+IiBcCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR09CSkVDVF9UUlVFQAktLWZwcm9kICJcbi8qIGVudW1lcmF0aW9ucyBmcm9tIFwiQGZpbGVuYW1lQFwiICovIiBcCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR09CSkVDVF9UUlVFQAktLXZoZWFkICJHVHlwZVxuQGVudW1fbmFtZUBfZ2V0X3R5cGUgKHZvaWQpXG57XG4gIHN0YXRpYyBHVHlwZSBldHlwZSA9IDA7XG4gIGlmIChldHlwZSA9PSAwKSB7XG4gICAgc3RhdGljIGNvbnN0IEdAVHlwZUBWYWx1ZSB2YWx1ZXNbXSA9IHsiICAgICBcCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR09CSkVDVF9UUlVFQAktLXZwcm9kICIgICAgICB7IEBWQUxVRU5BTUVALCBcIkBWQUxVRU5BTUVAXCIsIFwiQFZBTFVFTkFNRUBcIiB9LCIgXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dPQkpFQ1RfVFJVRUAJLS12dGFpbCAiICAgICAgeyAwLCBOVUxMLCBOVUxMIH1cbiAgICB9O1xuICAgIGV0eXBlID0gZ19AdHlwZUBfcmVnaXN0ZXJfc3RhdGljIChcIkBFbnVtTmFtZUBcIiwgdmFsdWVzKTtcbiAgfVxuICByZXR1cm4gZXR5cGU7XG59XG4iIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HT0JKRUNUX1RSVUVACSQ8ID4gJEAKKworQEhBVkVfREJVU19UUlVFQEBIQVZFX0dPQkpFQ1RfVFJVRUAtaW5jbHVkZSAkKElOVFJPU1BFQ1RJT05fTUFLRUZJTEUpCisKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HT0JKRUNUX1RSVUVAQEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFQEF2YWhpLTAuNi5naXI6ICQobGliX0xUTElCUkFSSUVTKQorCitpbmRlbnQ6CisJaW5kZW50IC1icmYgLW5iYm8gLW5iYyAtaXAwIC1jcyAtbmJmZGUgLW5wc2wgLWJyIC1icnMgLWJhcCAtaTQgLWJzIC1jZHcgLWNlIC1ucGNzIC1obmwgLWNsaTQgLW51dCAtY2k4IGdhLSouW2NoXQorCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktZ29iamVjdC9nYS1jbGllbnQuYyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1nb2JqZWN0L2dhLWNsaWVudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NzRiYjEKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktZ29iamVjdC9nYS1jbGllbnQuYwpAQCAtMCwwICsxLDI1NiBAQAorLyoKKyAqIGdhLWNsaWVudC5jIC0gU291cmNlIGZvciBHYUNsaWVudAorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDcgQ29sbGFib3JhIEx0ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2luY2x1ZGUgImdhLWNsaWVudC5oIgorCisjaW5jbHVkZSAiZ2EtY2xpZW50LWVudW10eXBlcy5oIgorI2luY2x1ZGUgImdhLWVycm9yLmgiCisKKy8qIEZJWE1FIHdoYXQgdG8gZG8gYWJvdXQgZ2xpYi1tYWxsb2MgPyAqLworI2luY2x1ZGUgPGF2YWhpLWdsaWIvZ2xpYi13YXRjaC5oPgorI2luY2x1ZGUgPGF2YWhpLWdsaWIvZ2xpYi1tYWxsb2MuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vZXJyb3IuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vdGltZXZhbC5oPgorCitHX0RFRklORV9UWVBFKEdhQ2xpZW50LCBnYV9jbGllbnQsIEdfVFlQRV9PQkpFQ1QpCisKKy8qIHNpZ25hbCBlbnVtICovCitlbnVtIHsKKyAgICBTVEFURV9DSEFOR0VELAorICAgIExBU1RfU0lHTkFMCit9OworCitzdGF0aWMgZ3VpbnQgc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAgfTsKKworLyogcHJvcGVydGllcyAqLworZW51bSB7CisgICAgUFJPUF9TVEFURSA9IDEsCisgICAgUFJPUF9GTEFHUworfTsKKworLyogcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KK3R5cGVkZWYgc3RydWN0IF9HYUNsaWVudFByaXZhdGUgR2FDbGllbnRQcml2YXRlOworCitzdHJ1Y3QgX0dhQ2xpZW50UHJpdmF0ZSB7CisgICAgQXZhaGlHTGliUG9sbCAqcG9sbDsKKyAgICBHYUNsaWVudEZsYWdzIGZsYWdzOworICAgIEdhQ2xpZW50U3RhdGUgc3RhdGU7CisgICAgZ2Jvb2xlYW4gZGlzcG9zZV9oYXNfcnVuOworfTsKKworI2RlZmluZSBHQV9DTElFTlRfR0VUX1BSSVZBVEUobykgICAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUgKChvKSwgR0FfVFlQRV9DTElFTlQsIEdhQ2xpZW50UHJpdmF0ZSkpCisKK3N0YXRpYyB2b2lkIGdhX2NsaWVudF9pbml0KEdhQ2xpZW50ICogc2VsZikgeworICAgIEdhQ2xpZW50UHJpdmF0ZSAqcHJpdiA9IEdBX0NMSUVOVF9HRVRfUFJJVkFURShzZWxmKTsKKyAgICAvKiBhbGxvY2F0ZSBhbnkgZGF0YSByZXF1aXJlZCBieSB0aGUgb2JqZWN0IGhlcmUgKi8KKyAgICBzZWxmLT5hdmFoaV9jbGllbnQgPSBOVUxMOworICAgIHByaXYtPnN0YXRlID0gR0FfQ0xJRU5UX1NUQVRFX05PVF9TVEFSVEVEOworICAgIHByaXYtPmZsYWdzID0gR0FfQ0xJRU5UX0ZMQUdfTk9fRkxBR1M7Cit9CisKK3N0YXRpYyB2b2lkIGdhX2NsaWVudF9kaXNwb3NlKEdPYmplY3QgKiBvYmplY3QpOworc3RhdGljIHZvaWQgZ2FfY2xpZW50X2ZpbmFsaXplKEdPYmplY3QgKiBvYmplY3QpOworCitzdGF0aWMgdm9pZCBnYV9jbGllbnRfc2V0X3Byb3BlcnR5KEdPYmplY3QgKiBvYmplY3QsCisgICAgICAgICAgICAgICAgICAgICAgIGd1aW50IHByb3BlcnR5X2lkLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKSB7CisgICAgR2FDbGllbnQgKmNsaWVudCA9IEdBX0NMSUVOVChvYmplY3QpOworICAgIEdhQ2xpZW50UHJpdmF0ZSAqcHJpdiA9IEdBX0NMSUVOVF9HRVRfUFJJVkFURShjbGllbnQpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eV9pZCkgeworICAgICAgICBjYXNlIFBST1BfRkxBR1M6CisgICAgICAgICAgICBnX2Fzc2VydChjbGllbnQtPmF2YWhpX2NsaWVudCA9PSBOVUxMKTsKKyAgICAgICAgICAgIHByaXYtPmZsYWdzID0gZ192YWx1ZV9nZXRfZW51bSh2YWx1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5X2lkLCBwc3BlYyk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGdhX2NsaWVudF9nZXRfcHJvcGVydHkoR09iamVjdCAqIG9iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgcHJvcGVydHlfaWQsCisgICAgICAgICAgICAgICAgICAgICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpIHsKKyAgICBHYUNsaWVudCAqY2xpZW50ID0gR0FfQ0xJRU5UKG9iamVjdCk7CisgICAgR2FDbGllbnRQcml2YXRlICpwcml2ID0gR0FfQ0xJRU5UX0dFVF9QUklWQVRFKGNsaWVudCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5X2lkKSB7CisgICAgICAgIGNhc2UgUFJPUF9TVEFURToKKyAgICAgICAgICAgIGdfdmFsdWVfc2V0X2VudW0odmFsdWUsIHByaXYtPnN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBST1BfRkxBR1M6CisgICAgICAgICAgICBnX3ZhbHVlX3NldF9lbnVtKHZhbHVlLCBwcml2LT5mbGFncyk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eV9pZCwgcHNwZWMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBnYV9jbGllbnRfY2xhc3NfaW5pdChHYUNsaWVudENsYXNzICogZ2FfY2xpZW50X2NsYXNzKSB7CisgICAgR09iamVjdENsYXNzICpvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyhnYV9jbGllbnRfY2xhc3MpOworICAgIEdQYXJhbVNwZWMgKnBhcmFtX3NwZWM7CisKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ2FfY2xpZW50X2NsYXNzLCBzaXplb2YgKEdhQ2xpZW50UHJpdmF0ZSkpOworCisKKyAgICBvYmplY3RfY2xhc3MtPmRpc3Bvc2UgPSBnYV9jbGllbnRfZGlzcG9zZTsKKyAgICBvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ2FfY2xpZW50X2ZpbmFsaXplOworCisgICAgb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnYV9jbGllbnRfc2V0X3Byb3BlcnR5OworICAgIG9iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ2FfY2xpZW50X2dldF9wcm9wZXJ0eTsKKworICAgIHBhcmFtX3NwZWMgPSBnX3BhcmFtX3NwZWNfZW51bSgic3RhdGUiLCAiQ2xpZW50IHN0YXRlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBzdGF0ZSBvZiB0aGUgQXZhaGkgY2xpZW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0FfVFlQRV9DTElFTlRfU1RBVEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdBX0NMSUVOVF9TVEFURV9OT1RfU1RBUlRFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19QQVJBTV9SRUFEQUJMRSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfUEFSQU1fU1RBVElDX05BTUUgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1BBUkFNX1NUQVRJQ19CTFVSQik7CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RfY2xhc3MsIFBST1BfU1RBVEUsIHBhcmFtX3NwZWMpOworCisgICAgcGFyYW1fc3BlYyA9IGdfcGFyYW1fc3BlY19lbnVtKCJmbGFncyIsICJDbGllbnQgZmxhZ3MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIGZsYWdzIHRoZSBBdmFoaSBjbGllbnQgaXMgc3RhcnRlZCB3aXRoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0FfVFlQRV9DTElFTlRfRkxBR1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdBX0NMSUVOVF9GTEFHX05PX0ZMQUdTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfUEFSQU1fQ09OU1RSVUNUX09OTFkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1BBUkFNX1NUQVRJQ19OQU1FIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19QQVJBTV9TVEFUSUNfQkxVUkIpOworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0X2NsYXNzLCBQUk9QX0ZMQUdTLCBwYXJhbV9zcGVjKTsKKworICAgIHNpZ25hbHNbU1RBVEVfQ0hBTkdFRF0gPQorICAgICAgICAgICAgZ19zaWduYWxfbmV3KCJzdGF0ZS1jaGFuZ2VkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHX09CSkVDVF9DTEFTU19UWVBFKGdhX2NsaWVudF9jbGFzcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9ERVRBSUxFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX0VOVU0sCisgICAgICAgICAgICAgICAgICAgICAgICAgR19UWVBFX05PTkUsIDEsIEdBX1RZUEVfQ0xJRU5UX1NUQVRFKTsKKworfQorCit2b2lkIGdhX2NsaWVudF9kaXNwb3NlKEdPYmplY3QgKiBvYmplY3QpIHsKKyAgICBHYUNsaWVudCAqc2VsZiA9IEdBX0NMSUVOVChvYmplY3QpOworICAgIEdhQ2xpZW50UHJpdmF0ZSAqcHJpdiA9IEdBX0NMSUVOVF9HRVRfUFJJVkFURShzZWxmKTsKKworICAgIGlmIChwcml2LT5kaXNwb3NlX2hhc19ydW4pCisgICAgICAgIHJldHVybjsKKworICAgIHByaXYtPmRpc3Bvc2VfaGFzX3J1biA9IFRSVUU7CisKKyAgICBpZiAoc2VsZi0+YXZhaGlfY2xpZW50KSB7CisgICAgICAgIGF2YWhpX2NsaWVudF9mcmVlKHNlbGYtPmF2YWhpX2NsaWVudCk7CisgICAgICAgIHNlbGYtPmF2YWhpX2NsaWVudCA9IE5VTEw7CisgICAgfQorICAgIGlmIChwcml2LT5wb2xsKSB7CisgICAgICAgIGF2YWhpX2dsaWJfcG9sbF9mcmVlKHByaXYtPnBvbGwpOworICAgICAgICBwcml2LT5wb2xsID0gTlVMTDsKKyAgICB9CisKKyAgICAvKiByZWxlYXNlIGFueSByZWZlcmVuY2VzIGhlbGQgYnkgdGhlIG9iamVjdCBoZXJlICovCisgICAgaWYgKEdfT0JKRUNUX0NMQVNTKGdhX2NsaWVudF9wYXJlbnRfY2xhc3MpLT5kaXNwb3NlKQorICAgICAgICBHX09CSkVDVF9DTEFTUyhnYV9jbGllbnRfcGFyZW50X2NsYXNzKS0+ZGlzcG9zZShvYmplY3QpOworfQorCit2b2lkIGdhX2NsaWVudF9maW5hbGl6ZShHT2JqZWN0ICogb2JqZWN0KSB7CisKKyAgICAvKiBmcmVlIGFueSBkYXRhIGhlbGQgZGlyZWN0bHkgYnkgdGhlIG9iamVjdCBoZXJlICovCisgICAgR19PQkpFQ1RfQ0xBU1MoZ2FfY2xpZW50X3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK0dhQ2xpZW50ICpnYV9jbGllbnRfbmV3KEdhQ2xpZW50RmxhZ3MgZmxhZ3MpIHsKKyAgICByZXR1cm4gZ19vYmplY3RfbmV3KEdBX1RZUEVfQ0xJRU5ULCAiZmxhZ3MiLCBmbGFncywgTlVMTCk7Cit9CisKK3N0YXRpYyBHUXVhcmsgZGV0YWlsX2Zvcl9zdGF0ZShBdmFoaUNsaWVudFN0YXRlIHN0YXRlKSB7CisgICAgc3RhdGljIHN0cnVjdCB7CisgICAgICAgIEF2YWhpQ2xpZW50U3RhdGUgc3RhdGU7CisgICAgICAgIGNvbnN0IGdjaGFyICpuYW1lOworICAgICAgICBHUXVhcmsgcXVhcms7CisgICAgfSBzdGF0ZXNbXSA9IHsKKyAgICAgICAgeyBBVkFISV9DTElFTlRfU19SRUdJU1RFUklORywgInJlZ2lzdGVyaW5nIiwgMH0sCisgICAgICAgIHsgQVZBSElfQ0xJRU5UX1NfUlVOTklORywgInJ1bm5pbmciLCAwfSwKKyAgICAgICAgeyBBVkFISV9DTElFTlRfU19DT0xMSVNJT04sICJjb2xsaXN0aW9uIiwgMH0sCisgICAgICAgIHsgQVZBSElfQ0xJRU5UX0ZBSUxVUkUsICJmYWlsdXJlIiwgMH0sCisgICAgICAgIHsgQVZBSElfQ0xJRU5UX0NPTk5FQ1RJTkcsICJjb25uZWN0aW5nIiwgMH0sCisgICAgICAgIHsgMCwgTlVMTCwgMH0KKyAgICB9OworICAgIGludCBpOworCisgICAgZm9yIChpID0gMDsgc3RhdGVzW2ldLm5hbWUgIT0gTlVMTDsgaSsrKSB7CisgICAgICAgIGlmIChzdGF0ZSAhPSBzdGF0ZXNbaV0uc3RhdGUpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoIXN0YXRlc1tpXS5xdWFyaykKKyAgICAgICAgICAgIHN0YXRlc1tpXS5xdWFyayA9IGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nKHN0YXRlc1tpXS5uYW1lKTsKKy8qICAgICAgICAgcHJpbnRmKCJEZXRhaWw6ICVzXG4iLCBzdGF0ZXNbaV0ubmFtZSk7ICovCisgICAgICAgIHJldHVybiBzdGF0ZXNbaV0ucXVhcms7CisgICAgfQorICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Cit9CisKK3N0YXRpYyB2b2lkIF9hdmFoaV9jbGllbnRfY2IoQXZhaGlDbGllbnQgKiBjLCBBdmFoaUNsaWVudFN0YXRlIHN0YXRlLCB2b2lkICpkYXRhKSB7CisgICAgR2FDbGllbnQgKnNlbGYgPSBHQV9DTElFTlQoZGF0YSk7CisgICAgR2FDbGllbnRQcml2YXRlICpwcml2ID0gR0FfQ0xJRU5UX0dFVF9QUklWQVRFKHNlbGYpOworCisvKiAgICAgcHJpbnRmKCJDTElFTlQgQ0I6ICVkXG4iLCBzdGF0ZSk7ICovCisKKyAgICAvKiBBdmFoaSBjYW4gY2FsbCB0aGUgY2FsbGJhY2sgYmVmb3JlIHJldHVybiBmcm9tIF9jbGllbnRfbmV3ICovCisgICAgaWYgKHNlbGYtPmF2YWhpX2NsaWVudCA9PSBOVUxMKQorICAgICAgICBzZWxmLT5hdmFoaV9jbGllbnQgPSBjOworCisgICAgZ19hc3NlcnQoYyA9PSBzZWxmLT5hdmFoaV9jbGllbnQpOworICAgIHByaXYtPnN0YXRlID0gc3RhdGU7CisgICAgZ19zaWduYWxfZW1pdChzZWxmLCBzaWduYWxzW1NUQVRFX0NIQU5HRURdLAorICAgICAgICAgICAgICAgICAgZGV0YWlsX2Zvcl9zdGF0ZShzdGF0ZSksIHN0YXRlKTsKK30KKworZ2Jvb2xlYW4gZ2FfY2xpZW50X3N0YXJ0KEdhQ2xpZW50ICogY2xpZW50LCBHRXJyb3IgKiogZXJyb3IpIHsKKyAgICBHYUNsaWVudFByaXZhdGUgKnByaXYgPSBHQV9DTElFTlRfR0VUX1BSSVZBVEUoY2xpZW50KTsKKyAgICBBdmFoaUNsaWVudCAqYWNsaWVudDsKKyAgICBpbnQgYWVycm9yOworCisgICAgZ19hc3NlcnQoY2xpZW50LT5hdmFoaV9jbGllbnQgPT0gTlVMTCk7CisgICAgZ19hc3NlcnQocHJpdi0+cG9sbCA9PSBOVUxMKTsKKworICAgIGF2YWhpX3NldF9hbGxvY2F0b3IoYXZhaGlfZ2xpYl9hbGxvY2F0b3IoKSk7CisKKyAgICBwcml2LT5wb2xsID0gYXZhaGlfZ2xpYl9wb2xsX25ldyhOVUxMLCBHX1BSSU9SSVRZX0RFRkFVTFQpOworCisgICAgYWNsaWVudCA9IGF2YWhpX2NsaWVudF9uZXcoYXZhaGlfZ2xpYl9wb2xsX2dldChwcml2LT5wb2xsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYXZhaGlfY2xpZW50X2NiLCBjbGllbnQsICZhZXJyb3IpOworICAgIGlmIChhY2xpZW50ID09IE5VTEwpIHsKKyAgICAgICAgaWYgKGVycm9yICE9IE5VTEwpIHsKKyAgICAgICAgICAgICplcnJvciA9IGdfZXJyb3JfbmV3KEdBX0VSUk9SLCBhZXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIGNyZWF0ZSBhdmFoaSBjbGllbnQ6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWhpX3N0cmVycm9yKGFlcnJvcikpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgY2xpZW50LT5hdmFoaV9jbGllbnQgPSBhY2xpZW50OworICAgIHJldHVybiBUUlVFOworfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWdvYmplY3QvZ2EtY2xpZW50LmggYi9hdmFoaS0wLjYuMzEvYXZhaGktZ29iamVjdC9nYS1jbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTdkYjNjCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWdvYmplY3QvZ2EtY2xpZW50LmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIGdhLWNsaWVudC5oIC0gSGVhZGVyIGZvciBHYUNsaWVudAorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDcgQ29sbGFib3JhIEx0ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRlZiBfX0dBX0NMSUVOVF9IX18KKyNkZWZpbmUgX19HQV9DTElFTlRfSF9fCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPGF2YWhpLWNsaWVudC9jbGllbnQuaD4KKworR19CRUdJTl9ERUNMUworCit0eXBlZGVmIGVudW0geworICAgIEdBX0NMSUVOVF9TVEFURV9OT1RfU1RBUlRFRCA9IC0xLAorICAgIEdBX0NMSUVOVF9TVEFURV9TX1JFR0lTVEVSSU5HID0gQVZBSElfQ0xJRU5UX1NfUkVHSVNURVJJTkcsCisgICAgR0FfQ0xJRU5UX1NUQVRFX1NfUlVOTklORyA9IEFWQUhJX0NMSUVOVF9TX1JVTk5JTkcsCisgICAgR0FfQ0xJRU5UX1NUQVRFX1NfQ09MTElTSU9OID0gQVZBSElfQ0xJRU5UX1NfQ09MTElTSU9OLAorICAgIEdBX0NMSUVOVF9TVEFURV9GQUlMVVJFID0gQVZBSElfQ0xJRU5UX0ZBSUxVUkUsCisgICAgR0FfQ0xJRU5UX1NUQVRFX0NPTk5FQ1RJTkcgPSBBVkFISV9DTElFTlRfQ09OTkVDVElORworfSBHYUNsaWVudFN0YXRlOworCit0eXBlZGVmIGVudW0geworICAgIEdBX0NMSUVOVF9GTEFHX05PX0ZMQUdTID0gMCwKKyAgICBHQV9DTElFTlRfRkxBR19JR05PUkVfVVNFUl9DT05GSUcgPSBBVkFISV9DTElFTlRfSUdOT1JFX1VTRVJfQ09ORklHLAorICAgIEdBX0NMSUVOVF9GTEFHX05PX0ZBSUwgPSBBVkFISV9DTElFTlRfTk9fRkFJTAorfSBHYUNsaWVudEZsYWdzOworCit0eXBlZGVmIHN0cnVjdCBfR2FDbGllbnQgR2FDbGllbnQ7Cit0eXBlZGVmIHN0cnVjdCBfR2FDbGllbnRDbGFzcyBHYUNsaWVudENsYXNzOworCitzdHJ1Y3QgX0dhQ2xpZW50Q2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitzdHJ1Y3QgX0dhQ2xpZW50IHsKKyAgICBHT2JqZWN0IHBhcmVudDsKKyAgICAvKiBSYXcgYXZhaGlfY2xpZW50IGhhbmRsZSwgb25seSByZXVzZSBpZiB5b3UgaGF2ZSByZWZmZWQgdGhpcyBpbnN0YW5jZSAqLworICAgIEF2YWhpQ2xpZW50ICphdmFoaV9jbGllbnQ7Cit9OworCitHVHlwZSBnYV9jbGllbnRfZ2V0X3R5cGUodm9pZCk7CisKKy8qIFRZUEUgTUFDUk9TICovCisjZGVmaW5lIEdBX1RZUEVfQ0xJRU5UIFwKKyAgICAoZ2FfY2xpZW50X2dldF90eXBlKCkpCisjZGVmaW5lIEdBX0NMSUVOVChvYmopIFwKKyAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIEdBX1RZUEVfQ0xJRU5ULCBHYUNsaWVudCkpCisjZGVmaW5lIEdBX0NMSUVOVF9DTEFTUyhrbGFzcykgXAorICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCBHQV9UWVBFX0NMSUVOVCwgR2FDbGllbnRDbGFzcykpCisjZGVmaW5lIElTX0dBX0NMSUVOVChvYmopIFwKKyAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIEdBX1RZUEVfQ0xJRU5UKSkKKyNkZWZpbmUgSVNfR0FfQ0xJRU5UX0NMQVNTKGtsYXNzKSBcCisgICAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksIEdBX1RZUEVfQ0xJRU5UKSkKKyNkZWZpbmUgR0FfQ0xJRU5UX0dFVF9DTEFTUyhvYmopIFwKKyAgICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiksIEdBX1RZUEVfQ0xJRU5ULCBHYUNsaWVudENsYXNzKSkKKworR2FDbGllbnQgKmdhX2NsaWVudF9uZXcoR2FDbGllbnRGbGFncyBmbGFncyk7CisKK2dib29sZWFuIGdhX2NsaWVudF9zdGFydChHYUNsaWVudCAqIGNsaWVudCwgR0Vycm9yICoqIGVycm9yKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qICNpZm5kZWYgX19HQV9DTElFTlRfSF9fICovCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktZ29iamVjdC9nYS1lbnRyeS1ncm91cC5jIGIvYXZhaGktMC42LjMxL2F2YWhpLWdvYmplY3QvZ2EtZW50cnktZ3JvdXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDFhY2JmCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWdvYmplY3QvZ2EtZW50cnktZ3JvdXAuYwpAQCAtMCwwICsxLDYyNiBAQAorLyoKKyAqIGdhLWVudHJ5LWdyb3VwLmMgLSBTb3VyY2UgZm9yIEdhRW50cnlHcm91cAorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDcgQ29sbGFib3JhIEx0ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vbWFsbG9jLmg+CisKKyNpbmNsdWRlICJnYS1lcnJvci5oIgorI2luY2x1ZGUgImdhLWVudHJ5LWdyb3VwLmgiCisjaW5jbHVkZSAiZ2EtZW50cnktZ3JvdXAtZW51bXR5cGVzLmgiCisKK0dfREVGSU5FX1RZUEUoR2FFbnRyeUdyb3VwLCBnYV9lbnRyeV9ncm91cCwgR19UWVBFX09CSkVDVCkKKworc3RhdGljIHZvaWQgX2ZyZWVfc2VydmljZShncG9pbnRlciBkYXRhKTsKKworLyogc2lnbmFsIGVudW0gKi8KK2VudW0geworICAgIFNUQVRFX0NIQU5HRUQsCisgICAgTEFTVF9TSUdOQUwKK307CisKK3N0YXRpYyBndWludCBzaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCB9OworCisvKiBwcm9wZXJ0aWVzICovCitlbnVtIHsKKyAgICBQUk9QX1NUQVRFID0gMQorfTsKKworLyogcHJpdmF0ZSBzdHJ1Y3R1cmVzICovCit0eXBlZGVmIHN0cnVjdCBfR2FFbnRyeUdyb3VwUHJpdmF0ZSBHYUVudHJ5R3JvdXBQcml2YXRlOworCitzdHJ1Y3QgX0dhRW50cnlHcm91cFByaXZhdGUgeworICAgIEdhRW50cnlHcm91cFN0YXRlIHN0YXRlOworICAgIEdhQ2xpZW50ICpjbGllbnQ7CisgICAgQXZhaGlFbnRyeUdyb3VwICpncm91cDsKKyAgICBHSGFzaFRhYmxlICpzZXJ2aWNlczsKKyAgICBnYm9vbGVhbiBkaXNwb3NlX2hhc19ydW47Cit9OworCit0eXBlZGVmIHN0cnVjdCBfR2FFbnRyeUdyb3VwU2VydmljZVByaXZhdGUgR2FFbnRyeUdyb3VwU2VydmljZVByaXZhdGU7CisKK3N0cnVjdCBfR2FFbnRyeUdyb3VwU2VydmljZVByaXZhdGUgeworICAgIEdhRW50cnlHcm91cFNlcnZpY2UgcHVibGljOworICAgIEdhRW50cnlHcm91cCAqZ3JvdXA7CisgICAgZ2Jvb2xlYW4gZnJvemVuOworICAgIEdIYXNoVGFibGUgKmVudHJpZXM7Cit9OworCit0eXBlZGVmIHN0cnVjdCBfR2FFbnRyeUdyb3VwU2VydmljZUVudHJ5IEdhRW50cnlHcm91cFNlcnZpY2VFbnRyeTsKKworc3RydWN0IF9HYUVudHJ5R3JvdXBTZXJ2aWNlRW50cnkgeworICAgIGd1aW50OCAqdmFsdWU7CisgICAgZ3NpemUgc2l6ZTsKK307CisKKworI2RlZmluZSBHQV9FTlRSWV9HUk9VUF9HRVRfUFJJVkFURShvKSAgICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSAoKG8pLCBHQV9UWVBFX0VOVFJZX0dST1VQLCBHYUVudHJ5R3JvdXBQcml2YXRlKSkKKworc3RhdGljIHZvaWQgZ2FfZW50cnlfZ3JvdXBfaW5pdChHYUVudHJ5R3JvdXAgKiBvYmopIHsKKyAgICBHYUVudHJ5R3JvdXBQcml2YXRlICpwcml2ID0gR0FfRU5UUllfR1JPVVBfR0VUX1BSSVZBVEUob2JqKTsKKyAgICAvKiBhbGxvY2F0ZSBhbnkgZGF0YSByZXF1aXJlZCBieSB0aGUgb2JqZWN0IGhlcmUgKi8KKyAgICBwcml2LT5zdGF0ZSA9IEdBX0VOVFJZX0dST1VQX1NUQVRFX1VOQ09NTUlURUQ7CisgICAgcHJpdi0+Y2xpZW50ID0gTlVMTDsKKyAgICBwcml2LT5ncm91cCA9IE5VTEw7CisgICAgcHJpdi0+c2VydmljZXMgPSBnX2hhc2hfdGFibGVfbmV3X2Z1bGwoZ19kaXJlY3RfaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX2RpcmVjdF9lcXVhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBfZnJlZV9zZXJ2aWNlKTsKK30KKworc3RhdGljIHZvaWQgZ2FfZW50cnlfZ3JvdXBfZGlzcG9zZShHT2JqZWN0ICogb2JqZWN0KTsKK3N0YXRpYyB2b2lkIGdhX2VudHJ5X2dyb3VwX2ZpbmFsaXplKEdPYmplY3QgKiBvYmplY3QpOworCitzdGF0aWMgdm9pZCBnYV9lbnRyeV9ncm91cF9nZXRfcHJvcGVydHkoR09iamVjdCAqIG9iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCBwcm9wZXJ0eV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKSB7CisgICAgR2FFbnRyeUdyb3VwICpncm91cCA9IEdBX0VOVFJZX0dST1VQKG9iamVjdCk7CisgICAgR2FFbnRyeUdyb3VwUHJpdmF0ZSAqcHJpdiA9IEdBX0VOVFJZX0dST1VQX0dFVF9QUklWQVRFKGdyb3VwKTsKKworICAgIHN3aXRjaCAocHJvcGVydHlfaWQpIHsKKyAgICAgICAgY2FzZSBQUk9QX1NUQVRFOgorICAgICAgICAgICAgZ192YWx1ZV9zZXRfZW51bSh2YWx1ZSwgcHJpdi0+c3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eV9pZCwgcHNwZWMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBnYV9lbnRyeV9ncm91cF9jbGFzc19pbml0KEdhRW50cnlHcm91cENsYXNzICogZ2FfZW50cnlfZ3JvdXBfY2xhc3MpIHsKKyAgICBHT2JqZWN0Q2xhc3MgKm9iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGdhX2VudHJ5X2dyb3VwX2NsYXNzKTsKKyAgICBHUGFyYW1TcGVjICpwYXJhbV9zcGVjOworCisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdhX2VudHJ5X2dyb3VwX2NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKEdhRW50cnlHcm91cFByaXZhdGUpKTsKKworICAgIG9iamVjdF9jbGFzcy0+ZGlzcG9zZSA9IGdhX2VudHJ5X2dyb3VwX2Rpc3Bvc2U7CisgICAgb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdhX2VudHJ5X2dyb3VwX2ZpbmFsaXplOworICAgIG9iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ2FfZW50cnlfZ3JvdXBfZ2V0X3Byb3BlcnR5OworCisgICAgcGFyYW1fc3BlYyA9IGdfcGFyYW1fc3BlY19lbnVtKCJzdGF0ZSIsICJFbnRyeSBHcm91cCBzdGF0ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgc3RhdGUgb2YgdGhlIGF2YWhpIGVudHJ5IGdyb3VwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0FfVFlQRV9FTlRSWV9HUk9VUF9TVEFURSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0FfRU5UUllfR1JPVVBfU1RBVEVfVU5DT01NSVRFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19QQVJBTV9SRUFEQUJMRSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfUEFSQU1fU1RBVElDX05BTUUgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1BBUkFNX1NUQVRJQ19CTFVSQik7CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RfY2xhc3MsIFBST1BfU1RBVEUsIHBhcmFtX3NwZWMpOworCisgICAgc2lnbmFsc1tTVEFURV9DSEFOR0VEXSA9CisgICAgICAgICAgICBnX3NpZ25hbF9uZXcoInN0YXRlLWNoYW5nZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgIEdfT0JKRUNUX0NMQVNTX1RZUEUoZ2FfZW50cnlfZ3JvdXBfY2xhc3MpLAorICAgICAgICAgICAgICAgICAgICAgICAgIEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfREVUQUlMRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19FTlVNLAorICAgICAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9OT05FLCAxLCBHQV9UWVBFX0VOVFJZX0dST1VQX1NUQVRFKTsKK30KKwordm9pZCBnYV9lbnRyeV9ncm91cF9kaXNwb3NlKEdPYmplY3QgKiBvYmplY3QpIHsKKyAgICBHYUVudHJ5R3JvdXAgKnNlbGYgPSBHQV9FTlRSWV9HUk9VUChvYmplY3QpOworICAgIEdhRW50cnlHcm91cFByaXZhdGUgKnByaXYgPSBHQV9FTlRSWV9HUk9VUF9HRVRfUFJJVkFURShzZWxmKTsKKworICAgIGlmIChwcml2LT5kaXNwb3NlX2hhc19ydW4pCisgICAgICAgIHJldHVybjsKKyAgICBwcml2LT5kaXNwb3NlX2hhc19ydW4gPSBUUlVFOworCisgICAgLyogcmVsZWFzZSBhbnkgcmVmZXJlbmNlcyBoZWxkIGJ5IHRoZSBvYmplY3QgaGVyZSAqLworICAgIGlmIChwcml2LT5ncm91cCkgeworICAgICAgICBhdmFoaV9lbnRyeV9ncm91cF9mcmVlKHByaXYtPmdyb3VwKTsKKyAgICAgICAgcHJpdi0+Z3JvdXAgPSBOVUxMOworICAgIH0KKworICAgIGlmIChwcml2LT5jbGllbnQpIHsKKyAgICAgICAgZ19vYmplY3RfdW5yZWYocHJpdi0+Y2xpZW50KTsKKyAgICAgICAgcHJpdi0+Y2xpZW50ID0gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoR19PQkpFQ1RfQ0xBU1MoZ2FfZW50cnlfZ3JvdXBfcGFyZW50X2NsYXNzKS0+ZGlzcG9zZSkKKyAgICAgICAgR19PQkpFQ1RfQ0xBU1MoZ2FfZW50cnlfZ3JvdXBfcGFyZW50X2NsYXNzKS0+ZGlzcG9zZShvYmplY3QpOworfQorCit2b2lkIGdhX2VudHJ5X2dyb3VwX2ZpbmFsaXplKEdPYmplY3QgKiBvYmplY3QpIHsKKyAgICBHYUVudHJ5R3JvdXAgKnNlbGYgPSBHQV9FTlRSWV9HUk9VUChvYmplY3QpOworICAgIEdhRW50cnlHcm91cFByaXZhdGUgKnByaXYgPSBHQV9FTlRSWV9HUk9VUF9HRVRfUFJJVkFURShzZWxmKTsKKworICAgIC8qIGZyZWUgYW55IGRhdGEgaGVsZCBkaXJlY3RseSBieSB0aGUgb2JqZWN0IGhlcmUgKi8KKyAgICBnX2hhc2hfdGFibGVfZGVzdHJveShwcml2LT5zZXJ2aWNlcyk7CisgICAgcHJpdi0+c2VydmljZXMgPSBOVUxMOworCisgICAgR19PQkpFQ1RfQ0xBU1MoZ2FfZW50cnlfZ3JvdXBfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgX2ZyZWVfc2VydmljZShncG9pbnRlciBkYXRhKSB7CisgICAgR2FFbnRyeUdyb3VwU2VydmljZSAqcyA9IChHYUVudHJ5R3JvdXBTZXJ2aWNlICopIGRhdGE7CisgICAgR2FFbnRyeUdyb3VwU2VydmljZVByaXZhdGUgKnAgPSAoR2FFbnRyeUdyb3VwU2VydmljZVByaXZhdGUgKikgczsKKyAgICBnX2ZyZWUocy0+bmFtZSk7CisgICAgZ19mcmVlKHMtPnR5cGUpOworICAgIGdfZnJlZShzLT5kb21haW4pOworICAgIGdfZnJlZShzLT5ob3N0KTsKKyAgICBnX2hhc2hfdGFibGVfZGVzdHJveShwLT5lbnRyaWVzKTsKKyAgICBnX2ZyZWUocyk7Cit9CisKK3N0YXRpYyBHUXVhcmsgZGV0YWlsX2Zvcl9zdGF0ZShBdmFoaUVudHJ5R3JvdXBTdGF0ZSBzdGF0ZSkgeworICAgIHN0YXRpYyBzdHJ1Y3QgeworICAgICAgICBBdmFoaUVudHJ5R3JvdXBTdGF0ZSBzdGF0ZTsKKyAgICAgICAgY29uc3QgZ2NoYXIgKm5hbWU7CisgICAgICAgIEdRdWFyayBxdWFyazsKKyAgICB9IHN0YXRlc1tdID0geworICAgICAgICB7IEFWQUhJX0VOVFJZX0dST1VQX1VOQ09NTUlURUQsICJ1bmNvbW1pdGVkIiwgMH0sCisgICAgICAgIHsgQVZBSElfRU5UUllfR1JPVVBfUkVHSVNURVJJTkcsICJyZWdpc3RlcmluZyIsIDB9LAorICAgICAgICB7IEFWQUhJX0VOVFJZX0dST1VQX0VTVEFCTElTSEVELCAiZXN0YWJsaXNoZWQiLCAwfSwKKyAgICAgICAgeyBBVkFISV9FTlRSWV9HUk9VUF9DT0xMSVNJT04sICJjb2xsaXN0aW9uIiwgMH0sCisgICAgICAgIHsgQVZBSElfRU5UUllfR1JPVVBfRkFJTFVSRSwgImZhaWx1cmUiLCAwfSwKKyAgICAgICAgeyAwLCBOVUxMLCAwfQorICAgIH07CisgICAgaW50IGk7CisKKyAgICBmb3IgKGkgPSAwOyBzdGF0ZXNbaV0ubmFtZSAhPSBOVUxMOyBpKyspIHsKKyAgICAgICAgaWYgKHN0YXRlICE9IHN0YXRlc1tpXS5zdGF0ZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICghc3RhdGVzW2ldLnF1YXJrKQorICAgICAgICAgICAgc3RhdGVzW2ldLnF1YXJrID0gZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcoc3RhdGVzW2ldLm5hbWUpOworICAgICAgICByZXR1cm4gc3RhdGVzW2ldLnF1YXJrOworICAgIH0KKyAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworfQorCitzdGF0aWMgdm9pZCBfYXZhaGlfZW50cnlfZ3JvdXBfY2IoQXZhaGlFbnRyeUdyb3VwICogZywKKyAgICAgICAgICAgICAgICAgICAgICBBdmFoaUVudHJ5R3JvdXBTdGF0ZSBzdGF0ZSwgdm9pZCAqZGF0YSkgeworICAgIEdhRW50cnlHcm91cCAqc2VsZiA9IEdBX0VOVFJZX0dST1VQKGRhdGEpOworICAgIEdhRW50cnlHcm91cFByaXZhdGUgKnByaXYgPSBHQV9FTlRSWV9HUk9VUF9HRVRfUFJJVkFURShzZWxmKTsKKworICAgIC8qIEF2YWhpIGNhbiBjYWxsIHRoZSBjYWxsYmFjayBiZWZvcmUgcmV0dXJuIGZyb20gX2NsaWVudF9uZXcgKi8KKyAgICBpZiAocHJpdi0+Z3JvdXAgPT0gTlVMTCkKKyAgICAgICAgcHJpdi0+Z3JvdXAgPSBnOworCisgICAgZ19hc3NlcnQoZyA9PSBwcml2LT5ncm91cCk7CisgICAgcHJpdi0+c3RhdGUgPSBzdGF0ZTsKKyAgICBnX3NpZ25hbF9lbWl0KHNlbGYsIHNpZ25hbHNbU1RBVEVfQ0hBTkdFRF0sCisgICAgICAgICAgICAgICAgICBkZXRhaWxfZm9yX3N0YXRlKHN0YXRlKSwgc3RhdGUpOworfQorCitHYUVudHJ5R3JvdXAgKmdhX2VudHJ5X2dyb3VwX25ldyh2b2lkKSB7CisgICAgcmV0dXJuIGdfb2JqZWN0X25ldyhHQV9UWVBFX0VOVFJZX0dST1VQLCBOVUxMKTsKK30KKworc3RhdGljIGd1aW50IF9lbnRyeV9oYXNoKGdjb25zdHBvaW50ZXIgdikgeworICAgIGNvbnN0IEdhRW50cnlHcm91cFNlcnZpY2VFbnRyeSAqZW50cnkgPQorICAgICAgICAgICAgKGNvbnN0IEdhRW50cnlHcm91cFNlcnZpY2VFbnRyeSAqKSB2OworICAgIGd1aW50MzIgaCA9IDA7CisgICAgZ3VpbnQgaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBlbnRyeS0+c2l6ZTsgaSsrKSB7CisgICAgICAgIGggPSAoaCA8PCA1KSAtIGggKyBlbnRyeS0+dmFsdWVbaV07CisgICAgfQorCisgICAgcmV0dXJuIGg7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBfZW50cnlfZXF1YWwoZ2NvbnN0cG9pbnRlciBhLCBnY29uc3Rwb2ludGVyIGIpIHsKKyAgICBjb25zdCBHYUVudHJ5R3JvdXBTZXJ2aWNlRW50cnkgKmFlbnRyeSA9CisgICAgICAgICAgICAoY29uc3QgR2FFbnRyeUdyb3VwU2VydmljZUVudHJ5ICopIGE7CisgICAgY29uc3QgR2FFbnRyeUdyb3VwU2VydmljZUVudHJ5ICpiZW50cnkgPQorICAgICAgICAgICAgKGNvbnN0IEdhRW50cnlHcm91cFNlcnZpY2VFbnRyeSAqKSBiOworCisgICAgaWYgKGFlbnRyeS0+c2l6ZSAhPSBiZW50cnktPnNpemUpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIHJldHVybiBtZW1jbXAoYWVudHJ5LT52YWx1ZSwgYmVudHJ5LT52YWx1ZSwgYWVudHJ5LT5zaXplKSA9PSAwOworfQorCitzdGF0aWMgR2FFbnRyeUdyb3VwU2VydmljZUVudHJ5ICpfbmV3X2VudHJ5KGNvbnN0IGd1aW50OCAqIHZhbHVlLCBnc2l6ZSBzaXplKSB7CisgICAgR2FFbnRyeUdyb3VwU2VydmljZUVudHJ5ICplbnRyeTsKKworICAgIGlmICh2YWx1ZSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGVudHJ5ID0gZ19zbGljZV9uZXcoR2FFbnRyeUdyb3VwU2VydmljZUVudHJ5KTsKKyAgICBlbnRyeS0+dmFsdWUgPSBnX21hbGxvYyhzaXplICsgMSk7CisgICAgbWVtY3B5KGVudHJ5LT52YWx1ZSwgdmFsdWUsIHNpemUpOworICAgIC8qIGZvciBzdHJpbmcga2V5cywgbWFrZSBzdXJlIGl0J3MgTlVMLXRlcm1pbmF0ZWQgdG9vICovCisgICAgZW50cnktPnZhbHVlW3NpemVdID0gMDsKKyAgICBlbnRyeS0+c2l6ZSA9IHNpemU7CisKKyAgICByZXR1cm4gZW50cnk7Cit9CisKK3N0YXRpYyB2b2lkIF9zZXRfZW50cnkoR0hhc2hUYWJsZSAqIHRhYmxlLCBjb25zdCBndWludDggKiBrZXksIGdzaXplIGtzaXplLAorICAgICAgICAgICBjb25zdCBndWludDggKiB2YWx1ZSwgZ3NpemUgdnNpemUpIHsKKworICAgIGdfaGFzaF90YWJsZV9pbnNlcnQodGFibGUsIF9uZXdfZW50cnkoa2V5LCBrc2l6ZSksCisgICAgICAgICAgICAgICAgICAgICAgICBfbmV3X2VudHJ5KHZhbHVlLCB2c2l6ZSkpOworfQorCitzdGF0aWMgdm9pZCBfZnJlZV9lbnRyeShncG9pbnRlciBkYXRhKSB7CisgICAgR2FFbnRyeUdyb3VwU2VydmljZUVudHJ5ICplbnRyeSA9IChHYUVudHJ5R3JvdXBTZXJ2aWNlRW50cnkgKikgZGF0YTsKKworICAgIGlmIChlbnRyeSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBnX2ZyZWUoZW50cnktPnZhbHVlKTsKKyAgICBnX3NsaWNlX2ZyZWUoR2FFbnRyeUdyb3VwU2VydmljZUVudHJ5LCBlbnRyeSk7Cit9CisKK3N0YXRpYyBHSGFzaFRhYmxlICpfc3RyaW5nX2xpc3RfdG9faGFzaChBdmFoaVN0cmluZ0xpc3QgKiBsaXN0KSB7CisgICAgR0hhc2hUYWJsZSAqcmV0OworICAgIEF2YWhpU3RyaW5nTGlzdCAqdDsKKworICAgIHJldCA9IGdfaGFzaF90YWJsZV9uZXdfZnVsbChfZW50cnlfaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VudHJ5X2VxdWFsLCBfZnJlZV9lbnRyeSwgX2ZyZWVfZW50cnkpOworCisgICAgZm9yICh0ID0gbGlzdDsgdCAhPSBOVUxMOyB0ID0gYXZhaGlfc3RyaW5nX2xpc3RfZ2V0X25leHQodCkpIHsKKyAgICAgICAgZ2NoYXIgKmtleTsKKyAgICAgICAgZ2NoYXIgKnZhbHVlOworICAgICAgICBnc2l6ZSBzaXplOworICAgICAgICBpbnQgcjsKKworICAgICAgICAvKiBsaXN0X2dldF9wYWlyIG9ubHkgZmFpbHMgaWYgaWYgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMuIE5vcm1hbCBnbGliCisgICAgICAgICAqIGJlaGF2aW91ciBpcyB0byBhc3NlcnQvYWJvcnQgd2hlbiB0aGF0IGhhcHBlbnMgKi8KKyAgICAgICAgciA9IGF2YWhpX3N0cmluZ19saXN0X2dldF9wYWlyKHQsICZrZXksICZ2YWx1ZSwgJnNpemUpOworICAgICAgICBnX2Fzc2VydChyID09IDApOworCisgICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKSB7CisgICAgICAgICAgICBfc2V0X2VudHJ5KHJldCwgdC0+dGV4dCwgdC0+c2l6ZSwgTlVMTCwgMCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBfc2V0X2VudHJ5KHJldCwgKGNvbnN0IGd1aW50OCAqKSBrZXksIHN0cmxlbihrZXkpLAorICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgZ3VpbnQ4ICopIHZhbHVlLCBzaXplKTsKKyAgICAgICAgfQorICAgICAgICBhdmFoaV9mcmVlKGtleSk7CisgICAgICAgIGF2YWhpX2ZyZWUodmFsdWUpOworICAgIH0KKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfaGFzaF90b19zdHJpbmdfbGlzdF9mb3JlYWNoKGdwb2ludGVyIGtleSwgZ3BvaW50ZXIgdmFsdWUsIGdwb2ludGVyIGRhdGEpIHsKKyAgICBBdmFoaVN0cmluZ0xpc3QgKipsaXN0ID0gKEF2YWhpU3RyaW5nTGlzdCAqKikgZGF0YTsKKyAgICBHYUVudHJ5R3JvdXBTZXJ2aWNlRW50cnkgKmtlbnRyeSA9IChHYUVudHJ5R3JvdXBTZXJ2aWNlRW50cnkgKikga2V5OworICAgIEdhRW50cnlHcm91cFNlcnZpY2VFbnRyeSAqdmVudHJ5ID0gKEdhRW50cnlHcm91cFNlcnZpY2VFbnRyeSAqKSB2YWx1ZTsKKworICAgIGlmICh2YWx1ZSAhPSBOVUxMKSB7CisgICAgICAgICpsaXN0ID0gYXZhaGlfc3RyaW5nX2xpc3RfYWRkX3BhaXJfYXJiaXRyYXJ5KCpsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2NoYXIgKikga2VudHJ5LT52YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVudHJ5LT52YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVudHJ5LT5zaXplKTsKKyAgICB9IGVsc2UgeworICAgICAgICAqbGlzdCA9IGF2YWhpX3N0cmluZ19saXN0X2FkZF9hcmJpdHJhcnkoKmxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZW50cnktPnZhbHVlLCBrZW50cnktPnNpemUpOworICAgIH0KK30KKworc3RhdGljIEF2YWhpU3RyaW5nTGlzdCAqX2hhc2hfdG9fc3RyaW5nX2xpc3QoR0hhc2hUYWJsZSAqIHRhYmxlKSB7CisgICAgQXZhaGlTdHJpbmdMaXN0ICpsaXN0ID0gTlVMTDsKKyAgICBnX2hhc2hfdGFibGVfZm9yZWFjaCh0YWJsZSwgX2hhc2hfdG9fc3RyaW5nX2xpc3RfZm9yZWFjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoZ3BvaW50ZXIpICYgbGlzdCk7CisgICAgcmV0dXJuIGxpc3Q7Cit9CisKK0dhRW50cnlHcm91cFNlcnZpY2UgKmdhX2VudHJ5X2dyb3VwX2FkZF9zZXJ2aWNlX3N0cmxpc3QoR2FFbnRyeUdyb3VwICogZ3JvdXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKiB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDE2IHBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAqKiBlcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXZhaGlTdHJpbmdMaXN0ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHh0KSB7CisgICAgcmV0dXJuIGdhX2VudHJ5X2dyb3VwX2FkZF9zZXJ2aWNlX2Z1bGxfc3RybGlzdChncm91cCwgQVZBSElfSUZfVU5TUEVDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZBSElfUFJPVE9fVU5TUEVDLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgdHlwZSwgTlVMTCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQsIGVycm9yLCB0eHQpOworfQorCitHYUVudHJ5R3JvdXBTZXJ2aWNlICpnYV9lbnRyeV9ncm91cF9hZGRfc2VydmljZV9mdWxsX3N0cmxpc3QoR2FFbnRyeUdyb3VwICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdmFoaUlmSW5kZXgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXZhaGlQcm90b2NvbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF2YWhpUHVibGlzaEZsYWdzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDE2IHBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICoqIGVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF2YWhpU3RyaW5nTGlzdCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHh0KSB7CisgICAgR2FFbnRyeUdyb3VwUHJpdmF0ZSAqcHJpdiA9IEdBX0VOVFJZX0dST1VQX0dFVF9QUklWQVRFKGdyb3VwKTsKKyAgICBHYUVudHJ5R3JvdXBTZXJ2aWNlUHJpdmF0ZSAqc2VydmljZSA9IE5VTEw7CisgICAgaW50IHJldDsKKworICAgIHJldCA9IGF2YWhpX2VudHJ5X2dyb3VwX2FkZF9zZXJ2aWNlX3N0cmxzdChwcml2LT5ncm91cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlLCBwcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbiwgaG9zdCwgcG9ydCwgdHh0KTsKKyAgICBpZiAocmV0KSB7CisgICAgICAgIGlmIChlcnJvciAhPSBOVUxMKSB7CisgICAgICAgICAgICAqZXJyb3IgPSBnX2Vycm9yX25ldyhHQV9FUlJPUiwgcmV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFkZGluZyBzZXJ2aWNlIHRvIGdyb3VwIGZhaWxlZDogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaGlfc3RyZXJyb3IocmV0KSk7CisgICAgICAgIH0KKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgc2VydmljZSA9IGdfbmV3MChHYUVudHJ5R3JvdXBTZXJ2aWNlUHJpdmF0ZSwgMSk7CisgICAgc2VydmljZS0+cHVibGljLmludGVyZmFjZSA9IGludGVyZmFjZTsKKyAgICBzZXJ2aWNlLT5wdWJsaWMucHJvdG9jb2wgPSBwcm90b2NvbDsKKyAgICBzZXJ2aWNlLT5wdWJsaWMuZmxhZ3MgPSBmbGFnczsKKyAgICBzZXJ2aWNlLT5wdWJsaWMubmFtZSA9IGdfc3RyZHVwKG5hbWUpOworICAgIHNlcnZpY2UtPnB1YmxpYy50eXBlID0gZ19zdHJkdXAodHlwZSk7CisgICAgc2VydmljZS0+cHVibGljLmRvbWFpbiA9IGdfc3RyZHVwKGRvbWFpbik7CisgICAgc2VydmljZS0+cHVibGljLmhvc3QgPSBnX3N0cmR1cChob3N0KTsKKyAgICBzZXJ2aWNlLT5wdWJsaWMucG9ydCA9IHBvcnQ7CisgICAgc2VydmljZS0+Z3JvdXAgPSBncm91cDsKKyAgICBzZXJ2aWNlLT5mcm96ZW4gPSBGQUxTRTsKKyAgICBzZXJ2aWNlLT5lbnRyaWVzID0gX3N0cmluZ19saXN0X3RvX2hhc2godHh0KTsKKyAgICBnX2hhc2hfdGFibGVfaW5zZXJ0KHByaXYtPnNlcnZpY2VzLCBncm91cCwgc2VydmljZSk7CisgIG91dDoKKyAgICByZXR1cm4gKEdhRW50cnlHcm91cFNlcnZpY2UgKikgc2VydmljZTsKK30KKworR2FFbnRyeUdyb3VwU2VydmljZSAqZ2FfZW50cnlfZ3JvdXBfYWRkX3NlcnZpY2UoR2FFbnRyeUdyb3VwICogZ3JvdXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDE2IHBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgKiogZXJyb3IsIC4uLikgeworICAgIEdhRW50cnlHcm91cFNlcnZpY2UgKnJldDsKKyAgICBBdmFoaVN0cmluZ0xpc3QgKnR4dCA9IE5VTEw7CisgICAgdmFfbGlzdCB2YTsKKyAgICB2YV9zdGFydCh2YSwgZXJyb3IpOworICAgIHR4dCA9IGF2YWhpX3N0cmluZ19saXN0X25ld192YSh2YSk7CisKKyAgICByZXQgPSBnYV9lbnRyeV9ncm91cF9hZGRfc2VydmljZV9mdWxsX3N0cmxpc3QoZ3JvdXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWQUhJX0lGX1VOU1BFQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZBSElfUFJPVE9fVU5TUEVDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLCB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0LCBlcnJvciwgdHh0KTsKKyAgICBhdmFoaV9zdHJpbmdfbGlzdF9mcmVlKHR4dCk7CisgICAgdmFfZW5kKHZhKTsKKyAgICByZXR1cm4gcmV0OworfQorCitHYUVudHJ5R3JvdXBTZXJ2aWNlICpnYV9lbnRyeV9ncm91cF9hZGRfc2VydmljZV9mdWxsKEdhRW50cnlHcm91cCAqIGdyb3VwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdmFoaVByb3RvY29sIHByb3RvY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdmFoaVB1Ymxpc2hGbGFncyBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICogZG9tYWluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqIGhvc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50MTYgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICoqIGVycm9yLCAuLi4pIHsKKyAgICBHYUVudHJ5R3JvdXBTZXJ2aWNlICpyZXQ7CisgICAgQXZhaGlTdHJpbmdMaXN0ICp0eHQgPSBOVUxMOworICAgIHZhX2xpc3QgdmE7CisKKyAgICB2YV9zdGFydCh2YSwgZXJyb3IpOworICAgIHR4dCA9IGF2YWhpX3N0cmluZ19saXN0X25ld192YSh2YSk7CisKKyAgICByZXQgPSBnYV9lbnRyeV9ncm91cF9hZGRfc2VydmljZV9mdWxsX3N0cmxpc3QoZ3JvdXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZSwgcHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLCB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21haW4sIGhvc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQsIGVycm9yLCB0eHQpOworICAgIGF2YWhpX3N0cmluZ19saXN0X2ZyZWUodHh0KTsKKyAgICB2YV9lbmQodmEpOworICAgIHJldHVybiByZXQ7Cit9CisKK2dib29sZWFuIGdhX2VudHJ5X2dyb3VwX2FkZF9yZWNvcmQoR2FFbnRyeUdyb3VwICogZ3JvdXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEF2YWhpUHVibGlzaEZsYWdzIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50MTYgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQzMiB0dGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKnJkYXRhLCBnc2l6ZSBzaXplLCBHRXJyb3IgKiogZXJyb3IpIHsKKyAgICByZXR1cm4gZ2FfZW50cnlfZ3JvdXBfYWRkX3JlY29yZF9mdWxsKGdyb3VwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZBSElfSUZfVU5TUEVDLCBBVkFISV9QUk9UT19VTlNQRUMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncywgbmFtZSwgQVZBSElfRE5TX0NMQVNTX0lOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSwgdHRsLCByZGF0YSwgc2l6ZSwgZXJyb3IpOworfQorCitnYm9vbGVhbiBnYV9lbnRyeV9ncm91cF9hZGRfcmVjb3JkX2Z1bGwoR2FFbnRyeUdyb3VwICogZ3JvdXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXZhaGlJZkluZGV4IGludGVyZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdmFoaVByb3RvY29sIHByb3RvY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF2YWhpUHVibGlzaEZsYWdzIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDE2IGNsYXp6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50MTYgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDMyIHR0bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpyZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc2l6ZSBzaXplLCBHRXJyb3IgKiogZXJyb3IpIHsKKyAgICBpbnQgcmV0OworICAgIEdhRW50cnlHcm91cFByaXZhdGUgKnByaXYgPSBHQV9FTlRSWV9HUk9VUF9HRVRfUFJJVkFURShncm91cCk7CisgICAgZ19hc3NlcnQoZ3JvdXAgIT0gTlVMTCAmJiBwcml2LT5ncm91cCAhPSBOVUxMKTsKKworICAgIHJldCA9IGF2YWhpX2VudHJ5X2dyb3VwX2FkZF9yZWNvcmQocHJpdi0+Z3JvdXAsIGludGVyZmFjZSwgcHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncywgbmFtZSwgY2xhenosIHR5cGUsIHR0bCwgcmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplKTsKKyAgICBpZiAocmV0KSB7CisgICAgICAgIGlmIChlcnJvciAhPSBOVUxMKSB7CisgICAgICAgICAgICAqZXJyb3IgPSBnX2Vycm9yX25ldyhHQV9FUlJPUiwgcmV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNldHRpbmcgcmF3IHJlY29yZCBmYWlsZWQ6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWhpX3N0cmVycm9yKHJldCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CisKKwordm9pZCBnYV9lbnRyeV9ncm91cF9zZXJ2aWNlX2ZyZWV6ZShHYUVudHJ5R3JvdXBTZXJ2aWNlICogc2VydmljZSkgeworICAgIEdhRW50cnlHcm91cFNlcnZpY2VQcml2YXRlICpwID0gKEdhRW50cnlHcm91cFNlcnZpY2VQcml2YXRlICopIHNlcnZpY2U7CisgICAgcC0+ZnJvemVuID0gVFJVRTsKK30KKworZ2Jvb2xlYW4gZ2FfZW50cnlfZ3JvdXBfc2VydmljZV90aGF3KEdhRW50cnlHcm91cFNlcnZpY2UgKiBzZXJ2aWNlLCBHRXJyb3IgKiogZXJyb3IpIHsKKyAgICBHYUVudHJ5R3JvdXBTZXJ2aWNlUHJpdmF0ZSAqcHJpdiA9IChHYUVudHJ5R3JvdXBTZXJ2aWNlUHJpdmF0ZSAqKSBzZXJ2aWNlOworICAgIGludCByZXQ7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gVFJVRTsKKworICAgIEF2YWhpU3RyaW5nTGlzdCAqdHh0ID0gX2hhc2hfdG9fc3RyaW5nX2xpc3QocHJpdi0+ZW50cmllcyk7CisgICAgcmV0ID0gYXZhaGlfZW50cnlfZ3JvdXBfdXBkYXRlX3NlcnZpY2VfdHh0X3N0cmxzdAorICAgICAgICAgICAgKEdBX0VOVFJZX0dST1VQX0dFVF9QUklWQVRFKHByaXYtPmdyb3VwKS0+Z3JvdXAsCisgICAgICAgICAgICAgc2VydmljZS0+aW50ZXJmYWNlLCBzZXJ2aWNlLT5wcm90b2NvbCwgc2VydmljZS0+ZmxhZ3MsCisgICAgICAgICAgICAgc2VydmljZS0+bmFtZSwgc2VydmljZS0+dHlwZSwgc2VydmljZS0+ZG9tYWluLCB0eHQpOworICAgIGlmIChyZXQpIHsKKyAgICAgICAgaWYgKGVycm9yICE9IE5VTEwpIHsKKyAgICAgICAgICAgICplcnJvciA9IGdfZXJyb3JfbmV3KEdBX0VSUk9SLCByZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVXBkYXRpbmcgdHh0IHJlY29yZCBmYWlsZWQ6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWhpX3N0cmVycm9yKHJldCkpOworICAgICAgICB9CisgICAgICAgIHJlc3VsdCA9IEZBTFNFOworICAgIH0KKworICAgIGF2YWhpX3N0cmluZ19saXN0X2ZyZWUodHh0KTsKKyAgICBwcml2LT5mcm96ZW4gPSBGQUxTRTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnYm9vbGVhbiBnYV9lbnRyeV9ncm91cF9zZXJ2aWNlX3NldChHYUVudHJ5R3JvdXBTZXJ2aWNlICogc2VydmljZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICoga2V5LCBjb25zdCBnY2hhciAqIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICoqIGVycm9yKSB7CisgICAgcmV0dXJuIGdhX2VudHJ5X2dyb3VwX3NlcnZpY2Vfc2V0X2FyYml0cmFyeShzZXJ2aWNlLCBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgZ3VpbnQ4ICopIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKHZhbHVlKSwgZXJyb3IpOworCit9CisKK2dib29sZWFuIGdhX2VudHJ5X2dyb3VwX3NlcnZpY2Vfc2V0X2FyYml0cmFyeShHYUVudHJ5R3JvdXBTZXJ2aWNlICogc2VydmljZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqIGtleSwgY29uc3QgZ3VpbnQ4ICogdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NpemUgc2l6ZSwgR0Vycm9yICoqIGVycm9yKSB7CisgICAgR2FFbnRyeUdyb3VwU2VydmljZVByaXZhdGUgKnByaXYgPSAoR2FFbnRyeUdyb3VwU2VydmljZVByaXZhdGUgKikgc2VydmljZTsKKworICAgIF9zZXRfZW50cnkocHJpdi0+ZW50cmllcywgKGNvbnN0IGd1aW50OCAqKSBrZXksIHN0cmxlbihrZXkpLCB2YWx1ZSwgc2l6ZSk7CisKKyAgICBpZiAoIXByaXYtPmZyb3plbikKKyAgICAgICAgcmV0dXJuIGdhX2VudHJ5X2dyb3VwX3NlcnZpY2VfdGhhdyhzZXJ2aWNlLCBlcnJvcik7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gVFJVRTsKK30KKworZ2Jvb2xlYW4gZ2FfZW50cnlfZ3JvdXBfc2VydmljZV9yZW1vdmVfa2V5KEdhRW50cnlHcm91cFNlcnZpY2UgKiBzZXJ2aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICoga2V5LCBHRXJyb3IgKiogZXJyb3IpIHsKKyAgICBHYUVudHJ5R3JvdXBTZXJ2aWNlUHJpdmF0ZSAqcHJpdiA9IChHYUVudHJ5R3JvdXBTZXJ2aWNlUHJpdmF0ZSAqKSBzZXJ2aWNlOworICAgIEdhRW50cnlHcm91cFNlcnZpY2VFbnRyeSBlbnRyeTsKKworICAgIGVudHJ5LnZhbHVlID0gKHZvaWQqKSBrZXk7CisgICAgZW50cnkuc2l6ZSA9IHN0cmxlbihrZXkpOworCisgICAgZ19oYXNoX3RhYmxlX3JlbW92ZShwcml2LT5lbnRyaWVzLCAmZW50cnkpOworCisgICAgaWYgKCFwcml2LT5mcm96ZW4pCisgICAgICAgIHJldHVybiBnYV9lbnRyeV9ncm91cF9zZXJ2aWNlX3RoYXcoc2VydmljZSwgZXJyb3IpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIFRSVUU7Cit9CisKKworZ2Jvb2xlYW4gZ2FfZW50cnlfZ3JvdXBfYXR0YWNoKEdhRW50cnlHcm91cCAqIGdyb3VwLAorICAgICAgICAgICAgICAgICAgICAgIEdhQ2xpZW50ICogY2xpZW50LCBHRXJyb3IgKiogZXJyb3IpIHsKKyAgICBHYUVudHJ5R3JvdXBQcml2YXRlICpwcml2ID0gR0FfRU5UUllfR1JPVVBfR0VUX1BSSVZBVEUoZ3JvdXApOworCisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY2xpZW50LT5hdmFoaV9jbGllbnQsIEZBTFNFKTsKKyAgICBnX2Fzc2VydChwcml2LT5jbGllbnQgPT0gTlVMTCB8fCBwcml2LT5jbGllbnQgPT0gY2xpZW50KTsKKyAgICBnX2Fzc2VydChwcml2LT5ncm91cCA9PSBOVUxMKTsKKworICAgIHByaXYtPmNsaWVudCA9IGNsaWVudDsKKyAgICBnX29iamVjdF9yZWYoY2xpZW50KTsKKworICAgIHByaXYtPmdyb3VwID0gYXZhaGlfZW50cnlfZ3JvdXBfbmV3KGNsaWVudC0+YXZhaGlfY2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hdmFoaV9lbnRyeV9ncm91cF9jYiwgZ3JvdXApOworICAgIGlmIChwcml2LT5ncm91cCA9PSBOVUxMKSB7CisgICAgICAgIGlmIChlcnJvciAhPSBOVUxMKSB7CisgICAgICAgICAgICBpbnQgYWVycm5vID0gYXZhaGlfY2xpZW50X2Vycm5vKGNsaWVudC0+YXZhaGlfY2xpZW50KTsKKyAgICAgICAgICAgICplcnJvciA9IGdfZXJyb3JfbmV3KEdBX0VSUk9SLCBhZXJybm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQXR0YWNoaW5nIGdyb3VwIGZhaWxlZDogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaGlfc3RyZXJyb3IoYWVycm5vKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KKworZ2Jvb2xlYW4gZ2FfZW50cnlfZ3JvdXBfY29tbWl0KEdhRW50cnlHcm91cCAqIGdyb3VwLCBHRXJyb3IgKiogZXJyb3IpIHsKKyAgICBHYUVudHJ5R3JvdXBQcml2YXRlICpwcml2ID0gR0FfRU5UUllfR1JPVVBfR0VUX1BSSVZBVEUoZ3JvdXApOworICAgIGludCByZXQ7CisgICAgcmV0ID0gYXZhaGlfZW50cnlfZ3JvdXBfY29tbWl0KHByaXYtPmdyb3VwKTsKKyAgICBpZiAocmV0KSB7CisgICAgICAgIGlmIChlcnJvciAhPSBOVUxMKSB7CisgICAgICAgICAgICAqZXJyb3IgPSBnX2Vycm9yX25ldyhHQV9FUlJPUiwgcmV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbW1pdHRpbmcgZ3JvdXAgZmFpbGVkOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFoaV9zdHJlcnJvcihyZXQpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQorCitnYm9vbGVhbiBnYV9lbnRyeV9ncm91cF9yZXNldChHYUVudHJ5R3JvdXAgKiBncm91cCwgR0Vycm9yICoqIGVycm9yKSB7CisgICAgR2FFbnRyeUdyb3VwUHJpdmF0ZSAqcHJpdiA9IEdBX0VOVFJZX0dST1VQX0dFVF9QUklWQVRFKGdyb3VwKTsKKyAgICBpbnQgcmV0OworICAgIHJldCA9IGF2YWhpX2VudHJ5X2dyb3VwX3Jlc2V0KHByaXYtPmdyb3VwKTsKKyAgICBpZiAocmV0KSB7CisgICAgICAgIGlmIChlcnJvciAhPSBOVUxMKSB7CisgICAgICAgICAgICAqZXJyb3IgPSBnX2Vycm9yX25ldyhHQV9FUlJPUiwgcmV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJlc2V0dGluZyBncm91cCBmYWlsZWQ6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWhpX3N0cmVycm9yKHJldCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktZ29iamVjdC9nYS1lbnRyeS1ncm91cC5oIGIvYXZhaGktMC42LjMxL2F2YWhpLWdvYmplY3QvZ2EtZW50cnktZ3JvdXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmI2ZWRlCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWdvYmplY3QvZ2EtZW50cnktZ3JvdXAuaApAQCAtMCwwICsxLDE3NCBAQAorLyoKKyAqIGdhLWVudHJ5LWdyb3VwLmggLSBIZWFkZXIgZm9yIEdhRW50cnlHcm91cAorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDcgQ29sbGFib3JhIEx0ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRlZiBfX0dBX0VOVFJZX0dST1VQX0hfXworI2RlZmluZSBfX0dBX0VOVFJZX0dST1VQX0hfXworCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDxhdmFoaS1jbGllbnQvcHVibGlzaC5oPgorI2luY2x1ZGUgPGF2YWhpLWNsaWVudC9jbGllbnQuaD4KKworI2luY2x1ZGUgImdhLWNsaWVudC5oIgorCitHX0JFR0lOX0RFQ0xTCisKK3R5cGVkZWYgZW51bSB7CisgICAgR0FfRU5UUllfR1JPVVBfU1RBVEVfVU5DT01NSVRFRCA9IEFWQUhJX0VOVFJZX0dST1VQX1VOQ09NTUlURUQsCisgICAgR0FfRU5UUllfR1JPVVBfU1RBVEVfUkVHSVNURVJJTkcgPSBBVkFISV9FTlRSWV9HUk9VUF9SRUdJU1RFUklORywKKyAgICBHQV9FTlRSWV9HUk9VUF9TVEFURV9FU1RBQkxJU0hFRCA9IEFWQUhJX0VOVFJZX0dST1VQX0VTVEFCTElTSEVELAorICAgIEdBX0VOVFJZX0dST1VQX1NUQVRFX0NPTExJU1RJT04gPSBBVkFISV9FTlRSWV9HUk9VUF9DT0xMSVNJT04sCisgICAgR0FfRU5UUllfR1JPVVBfU1RBVEVfRkFJTFVSRSA9IEFWQUhJX0VOVFJZX0dST1VQX0ZBSUxVUkUKK30gR2FFbnRyeUdyb3VwU3RhdGU7CisKK3R5cGVkZWYgc3RydWN0IF9HYUVudHJ5R3JvdXBTZXJ2aWNlIEdhRW50cnlHcm91cFNlcnZpY2U7Cit0eXBlZGVmIHN0cnVjdCBfR2FFbnRyeUdyb3VwIEdhRW50cnlHcm91cDsKK3R5cGVkZWYgc3RydWN0IF9HYUVudHJ5R3JvdXBDbGFzcyBHYUVudHJ5R3JvdXBDbGFzczsKKworc3RydWN0IF9HYUVudHJ5R3JvdXBTZXJ2aWNlIHsKKyAgICBBdmFoaUlmSW5kZXggaW50ZXJmYWNlOworICAgIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2w7CisgICAgQXZhaGlQdWJsaXNoRmxhZ3MgZmxhZ3M7CisgICAgZ2NoYXIgKm5hbWU7CisgICAgZ2NoYXIgKnR5cGU7CisgICAgZ2NoYXIgKmRvbWFpbjsKKyAgICBnY2hhciAqaG9zdDsKKyAgICBndWludDE2IHBvcnQ7Cit9OworCitzdHJ1Y3QgX0dhRW50cnlHcm91cENsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworc3RydWN0IF9HYUVudHJ5R3JvdXAgeworICAgIEdPYmplY3QgcGFyZW50OworfTsKKworR1R5cGUgZ2FfZW50cnlfZ3JvdXBfZ2V0X3R5cGUodm9pZCk7CisKKy8qIFRZUEUgTUFDUk9TICovCisjZGVmaW5lIEdBX1RZUEVfRU5UUllfR1JPVVAgXAorICAoZ2FfZW50cnlfZ3JvdXBfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgR0FfRU5UUllfR1JPVVAob2JqKSBcCisgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgR0FfVFlQRV9FTlRSWV9HUk9VUCwgR2FFbnRyeUdyb3VwKSkKKyNkZWZpbmUgR0FfRU5UUllfR1JPVVBfQ0xBU1Moa2xhc3MpIFwKKyAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksIEdBX1RZUEVfRU5UUllfR1JPVVAsIEdhRW50cnlHcm91cENsYXNzKSkKKyNkZWZpbmUgSVNfR0FfRU5UUllfR1JPVVAob2JqKSBcCisgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgR0FfVFlQRV9FTlRSWV9HUk9VUCkpCisjZGVmaW5lIElTX0dBX0VOVFJZX0dST1VQX0NMQVNTKGtsYXNzKSBcCisgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCBHQV9UWVBFX0VOVFJZX0dST1VQKSkKKyNkZWZpbmUgR0FfRU5UUllfR1JPVVBfR0VUX0NMQVNTKG9iaikgXAorICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiksIEdBX1RZUEVfRU5UUllfR1JPVVAsIEdhRW50cnlHcm91cENsYXNzKSkKKworR2FFbnRyeUdyb3VwICpnYV9lbnRyeV9ncm91cF9uZXcodm9pZCk7CisKK2dib29sZWFuIGdhX2VudHJ5X2dyb3VwX2F0dGFjaChHYUVudHJ5R3JvdXAgKiBncm91cCwKKyAgICAgICAgICAgICAgICAgICAgICBHYUNsaWVudCAqIGNsaWVudCwgR0Vycm9yICoqIGVycm9yKTsKKworR2FFbnRyeUdyb3VwU2VydmljZSAqZ2FfZW50cnlfZ3JvdXBfYWRkX3NlcnZpY2Vfc3RybGlzdChHYUVudHJ5R3JvdXAgKiBncm91cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50MTYgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICoqIGVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdmFoaVN0cmluZ0xpc3QgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eHQpOworCitHYUVudHJ5R3JvdXBTZXJ2aWNlICpnYV9lbnRyeV9ncm91cF9hZGRfc2VydmljZV9mdWxsX3N0cmxpc3QoR2FFbnRyeUdyb3VwICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdmFoaUlmSW5kZXgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXZhaGlQcm90b2NvbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF2YWhpUHVibGlzaEZsYWdzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDE2IHBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICoqIGVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF2YWhpU3RyaW5nTGlzdCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHh0KTsKK0dhRW50cnlHcm91cFNlcnZpY2UgKmdhX2VudHJ5X2dyb3VwX2FkZF9zZXJ2aWNlKEdhRW50cnlHcm91cCAqIGdyb3VwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKiB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQxNiBwb3J0LCBHRXJyb3IgKiogZXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pOworCitHYUVudHJ5R3JvdXBTZXJ2aWNlICpnYV9lbnRyeV9ncm91cF9hZGRfc2VydmljZV9mdWxsKEdhRW50cnlHcm91cCAqIGdyb3VwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdmFoaVByb3RvY29sIHByb3RvY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdmFoaVB1Ymxpc2hGbGFncyBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICogZG9tYWluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqIGhvc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50MTYgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICoqIGVycm9yLCAuLi4pOworCisvKiBBZGQgcmF3IHJlY29yZCAqLworZ2Jvb2xlYW4gZ2FfZW50cnlfZ3JvdXBfYWRkX3JlY29yZChHYUVudHJ5R3JvdXAgKiBncm91cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQXZhaGlQdWJsaXNoRmxhZ3MgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQxNiB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDMyIHR0bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqcmRhdGEsIGdzaXplIHNpemUsIEdFcnJvciAqKiBlcnJvcik7CitnYm9vbGVhbiBnYV9lbnRyeV9ncm91cF9hZGRfcmVjb3JkX2Z1bGwoR2FFbnRyeUdyb3VwICogZ3JvdXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXZhaGlJZkluZGV4IGludGVyZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdmFoaVByb3RvY29sIHByb3RvY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF2YWhpUHVibGlzaEZsYWdzIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDE2IGNsYXp6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50MTYgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDMyIHR0bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpyZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc2l6ZSBzaXplLCBHRXJyb3IgKiogZXJyb3IpOworCisKKwordm9pZCBnYV9lbnRyeV9ncm91cF9zZXJ2aWNlX2ZyZWV6ZShHYUVudHJ5R3JvdXBTZXJ2aWNlICogc2VydmljZSk7CisKKy8qIFNldCBhIGtleSBpbiB0aGUgc2VydmljZSByZWNvcmQuIElmIHRoZSBzZXJ2aWNlIGlzbid0IGZyb3plbiBpdCdzIGNvbW1pdHRlZAorICogaW1tZWRpYXRlbHkgKi8KK2dib29sZWFuIGdhX2VudHJ5X2dyb3VwX3NlcnZpY2Vfc2V0KEdhRW50cnlHcm91cFNlcnZpY2UgKiBzZXJ2aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKiBrZXksIGNvbnN0IGdjaGFyICogdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgKiogZXJyb3IpOworCitnYm9vbGVhbiBnYV9lbnRyeV9ncm91cF9zZXJ2aWNlX3NldF9hcmJpdHJhcnkoR2FFbnRyeUdyb3VwU2VydmljZSAqIHNlcnZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKiBrZXksIGNvbnN0IGd1aW50OCAqIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzaXplIHNpemUsIEdFcnJvciAqKiBlcnJvcik7CisKKy8qIFJlbW92ZSBvbmUga2V5IGZyb20gdGhlIHNlcnZpY2UgcmVjb3JkICovCitnYm9vbGVhbiBnYV9lbnRyeV9ncm91cF9zZXJ2aWNlX3JlbW92ZV9rZXkoR2FFbnRyeUdyb3VwU2VydmljZSAqIHNlcnZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKiBrZXksIEdFcnJvciAqKiBlcnJvcik7CisKKy8qIFVwZGF0ZSB0aGUgdHh0IHJlY29yZCBvZiB0aGUgZnJvemVuIHNlcnZpY2UgKi8KK2dib29sZWFuIGdhX2VudHJ5X2dyb3VwX3NlcnZpY2VfdGhhdyhHYUVudHJ5R3JvdXBTZXJ2aWNlICogc2VydmljZSwgR0Vycm9yICoqIGVycm9yKTsKKworLyogQ29tbWl0IGFsbCBuZXdseSBhZGRlZCBzZXJ2aWNlcyAqLworZ2Jvb2xlYW4gZ2FfZW50cnlfZ3JvdXBfY29tbWl0KEdhRW50cnlHcm91cCAqIGdyb3VwLCBHRXJyb3IgKiogZXJyb3IpOworCisvKiBJbnZhbGlkYXRlZCBhbGwgR2FFbnRyeUdyb3VwU2VydmljZXMgKi8KK2dib29sZWFuIGdhX2VudHJ5X2dyb3VwX3Jlc2V0KEdhRW50cnlHcm91cCAqIGdyb3VwLCBHRXJyb3IgKiogZXJyb3IpOworCitHX0VORF9ERUNMUworI2VuZGlmIC8qICNpZm5kZWYgX19HQV9FTlRSWV9HUk9VUF9IX18gKi8KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1nb2JqZWN0L2dhLWVudW1zLmggYi9hdmFoaS0wLjYuMzEvYXZhaGktZ29iamVjdC9nYS1lbnVtcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0YThhYzMKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktZ29iamVjdC9nYS1lbnVtcy5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBnYS1lbnVtcy5oCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwNyBDb2xsYWJvcmEgTHRkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIF9fR0FfRU5VTVNfSF9fCisjZGVmaW5lIF9fR0FfRU5VTVNfSF9fCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9kZWZzLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2FkZHJlc3MuaD4KKworR19CRUdJTl9ERUNMUworLyoqIFZhbHVlcyBmb3IgR2FQcm90b2NvbCAqLworICAgICAgICB0eXBlZGVmIGVudW0geworICAgIEdBX1BST1RPQ09MX0lORVQgPSBBVkFISV9QUk9UT19JTkVULCAgICAgLyoqPCBJUHY0ICovCisgICAgR0FfUFJPVE9DT0xfSU5FVDYgPSBBVkFISV9QUk9UT19JTkVUNiwgICAvKio8IElQdjYgKi8KKyAgICBHQV9QUk9UT0NPTF9VTlNQRUMgPSBBVkFISV9QUk9UT19VTlNQRUMgIC8qKjwgVW5zcGVjaWZpZWQvYWxsIHByb3RvY29sKHMpICovCit9IEdhUHJvdG9jb2w7CisKKworLyoqIFNvbWUgZmxhZ3MgZm9yIGxvb2t1cCBjYWxsYmFjayBmdW5jdGlvbnMgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgR0FfTE9PS1VQX1JFU1VMVF9DQUNIRUQgPSBBVkFISV9MT09LVVBfUkVTVUxUX0NBQ0hFRCwgICAgIC8qKjwgVGhpcyByZXNwb25zZSBvcmlnaW5hdGVzIGZyb20gdGhlIGNhY2hlICovCisgICAgR0FfTE9PS1VQX1JFU1VMVF9XSURFX0FSRUEgPSBBVkFISV9MT09LVVBfUkVTVUxUX1dJREVfQVJFQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUaGlzIHJlc3BvbnNlIG9yaWdpbmF0ZXMgZnJvbSB3aWRlIGFyZWEgRE5TICovCisgICAgR0FfTE9PS1VQX1JFU1VMVF9NVUxUSUNBU1QgPSBBVkFISV9MT09LVVBfUkVTVUxUX01VTFRJQ0FTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBUaGlzIHJlc3BvbnNlIG9yaWdpbmF0ZXMgZnJvbSBtdWx0aWNhc3QgRE5TICovCisgICAgR0FfTE9PS1VQX1JFU1VMVF9MT0NBTCA9IEFWQUhJX0xPT0tVUF9SRVNVTFRfTE9DQUwsICAgICAgIC8qKjwgVGhpcyByZWNvcmQvc2VydmljZSByZXNpZGVzIG9uIGFuZCB3YXMgYW5ub3VuY2VkIGJ5IHRoZSBsb2NhbCBob3N0LiBPbmx5IGF2YWlsYWJsZSBpbiBzZXJ2aWNlIGFuZCByZWNvcmQgYnJvd3NlcnMgYW5kIG9ubHkgb24gQVZBSElfQlJPV1NFUl9ORVcuICovCisgICAgR0FfTE9PS1VQX1JFU1VMVF9PVVJfT1dOID0gQVZBSElfTE9PS1VQX1JFU1VMVF9PVVJfT1dOLCAgIC8qKjwgVGhpcyBzZXJ2aWNlIGJlbG9uZ3MgdG8gdGhlIHNhbWUgbG9jYWwgY2xpZW50IGFzIHRoZSBicm93c2VyIG9iamVjdC4gT25seSBhdmFpbGFibGUgaW4gYXZhaGktY2xpZW50LCBhbmQgb25seSBmb3Igc2VydmljZSBicm93c2VycyBhbmQgb25seSBvbiBBVkFISV9CUk9XU0VSX05FVy4gKi8KKyAgICBHQV9MT09LVVBfUkVTVUxUX1NUQVRJQyA9IEFWQUhJX0xPT0tVUF9SRVNVTFRfU1RBVElDICAgICAgLyoqPCBUaGUgcmV0dXJuZWQgZGF0YSBoYXMgYmVlbiBkZWZpbmVkIHN0YXRpY2FsbHkgYnkgc29tZSBjb25maWd1cmF0aW9uIG9wdGlvbiAqLworfSBHYUxvb2t1cFJlc3VsdEZsYWdzOworCit0eXBlZGVmIGVudW0geworICAgIEdBX0xPT0tVUF9OT19GTEFHUyA9IDAsCisgICAgR0FfTE9PS1VQX1VTRV9XSURFX0FSRUEgPSBBVkFISV9MT09LVVBfVVNFX1dJREVfQVJFQSwgICAgLyoqPCBGb3JjZSBsb29rdXAgdmlhIHdpZGUgYXJlYSBETlMgKi8KKyAgICBHQV9MT09LVVBfVVNFX01VTFRJQ0FTVCA9IEFWQUhJX0xPT0tVUF9VU0VfTVVMVElDQVNULCAgICAvKio8IEZvcmNlIGxvb2t1cCB2aWEgbXVsdGljYXN0IEROUyAqLworICAgIEdBX0xPT0tVUF9OT19UWFQgPSBBVkFISV9MT09LVVBfTk9fVFhULCAgICAgICAgICAgICAgICAgIC8qKjwgV2hlbiBkb2luZyBzZXJ2aWNlIHJlc29sdmluZywgZG9uJ3QgbG9va3VwIFRYVCByZWNvcmQgKi8KKyAgICBHQV9MT09LVVBfTk9fQUREUkVTUyA9IEFWQUhJX0xPT0tVUF9OT19BRERSRVNTICAgICAgICAgICAvKio8IFdoZW4gZG9pbmcgc2VydmljZSByZXNvbHZpbmcsIGRvbid0IGxvb2t1cCBBL0FBQUEgcmVjb3JkICovCit9IEdhTG9va3VwRmxhZ3M7CisKK3R5cGVkZWYgZW51bSB7CisgICAgR0FfUkVTT0xWRVJfRk9VTkQgPSBBVkFISV9SRVNPTFZFUl9GT1VORCwgICAgICAgICAgIC8qKjwgUlIgZm91bmQsIHJlc29sdmluZyBzdWNjZXNzZnVsICovCisgICAgR0FfUkVTT0xWRVJfRkFJTFVSRSA9IEFWQUhJX1JFU09MVkVSX0ZBSUxVUkUgICAgICAgIC8qKjwgUmVzb2x2aW5nIGZhaWxlZCBkdWUgdG8gc29tZSByZWFzb24gd2hpY2ggY2FuIGJlIHJldHJpZXZlZCB1c2luZyBhdmFoaV9zZXJ2ZXJfZXJybm8oKS9hdmFoaV9jbGllbnRfZXJybm8oKSAqLworfSBHYVJlc29sdmVyRXZlbnQ7CisKK3R5cGVkZWYgZW51bSB7CisgICAgR0FfQlJPV1NFUl9ORVcgPSBBVkFISV9CUk9XU0VSX05FVywgICAgICAgICAgICAgLyoqPCBUaGUgb2JqZWN0IGlzIG5ldyBvbiB0aGUgbmV0d29yayAqLworICAgIEdBX0JST1dTRVJfUkVNT1ZFID0gQVZBSElfQlJPV1NFUl9SRU1PVkUsICAgICAgICAgICAgICAgICAgICAgLyoqPCBUaGUgb2JqZWN0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgbmV0d29yayAqLworICAgIEdBX0JST1dTRVJfQ0FDSEVfRVhIQVVTVEVEID0gQVZBSElfQlJPV1NFUl9DQUNIRV9FWEhBVVNURUQsICAgLyoqPCBPbmUtdGltZSBldmVudCwgdG8gbm90aWZ5IHRoZSB1c2VyIHRoYXQgYWxsIGVudHJpZXMgZnJvbSB0aGUgY2FjaGVzIGhhdmUgYmVlbiBzZW5kICovCisgICAgR0FfQlJPV1NFUl9BTExfRk9SX05PVyA9IEFWQUhJX0JST1dTRVJfQUxMX0ZPUl9OT1csICAgICAgICAgICAvKio8IE9uZS10aW1lIGV2ZW50LCB0byBub3RpZnkgdGhlIHVzZXIgdGhhdCBtb3JlIHJlY29yZHMgd2lsbCBwcm9iYWJseSBub3Qgc2hvdyB1cCBpbiB0aGUgbmVhciBmdXR1cmUsIGkuZS4gYWxsIGNhY2hlIGVudHJpZXMgaGF2ZSBiZWVuIHJlYWQgYW5kIGFsbCBzdGF0aWMgc2VydmVycyBiZWVuIHF1ZXJpZWQgKi8KKyAgICBHQV9CUk9XU0VSX0ZBSUxVUkUgPSBBVkFISV9CUk9XU0VSX0ZBSUxVUkUgICAgICAgICAgICAgICAgICAgIC8qKjwgQnJvd3NpbmcgZmFpbGVkIGR1ZSB0byBzb21lIHJlYXNvbiB3aGljaCBjYW4gYmUgcmV0cmlldmVkIHVzaW5nIGF2YWhpX3NlcnZlcl9lcnJubygpL2F2YWhpX2NsaWVudF9lcnJubygpICovCit9IEdhQnJvd3NlckV2ZW50OworCitHX0VORF9ERUNMUworI2VuZGlmIC8qICNpZm5kZWYgX19HQV9DTElFTlRfSF9fICovCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktZ29iamVjdC9nYS1lcnJvci5jIGIvYXZhaGktMC42LjMxL2F2YWhpLWdvYmplY3QvZ2EtZXJyb3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmVhOWFlCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWdvYmplY3QvZ2EtZXJyb3IuYwpAQCAtMCwwICsxLDMyIEBACisvKgorICogZ2EtZXJyb3IuYyAtIFNvdXJjZSBmb3IgZXJyb3IgdHlwZXMgdXNlZAorICogQ29weXJpZ2h0IChDKSAyMDA2IENvbGxhYm9yYSBMdGQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlICJnYS1lcnJvci5oIgorCitHUXVhcmsgZ2FfZXJyb3JfcXVhcmsodm9pZCkgeworICAgIHN0YXRpYyBHUXVhcmsgcXVhcmsgPSAwOworICAgIGlmICghcXVhcmspCisgICAgICAgIHF1YXJrID0gZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcoImdhX2Vycm9yIik7CisgICAgcmV0dXJuIHF1YXJrOworfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWdvYmplY3QvZ2EtZXJyb3IuaCBiL2F2YWhpLTAuNi4zMS9hdmFoaS1nb2JqZWN0L2dhLWVycm9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM4M2VhNwotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1nb2JqZWN0L2dhLWVycm9yLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIGdhLWVycm9yLmggLSBIZWFkZXIgZm9yIEF2YWhpIGVycm9yIHR5cGVzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwNyBDb2xsYWJvcmEgTHRkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIF9fR0FfRVJST1JfSF9fCisjZGVmaW5lIF9fR0FfRVJST1JfSF9fCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorCitHX0JFR0lOX0RFQ0xTCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2Vycm9yLmg+CisKK0dRdWFyayBnYV9lcnJvcl9xdWFyayh2b2lkKTsKKworI2RlZmluZSBHQV9FUlJPUiBnYV9lcnJvcl9xdWFyaygpCisKK0dfRU5EX0RFQ0xTCisjZW5kaWYgLyogI2lmbmRlZiBfX0dBX0VSUk9SX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWdvYmplY3QvZ2EtcmVjb3JkLWJyb3dzZXIuYyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1nb2JqZWN0L2dhLXJlY29yZC1icm93c2VyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMxMDUwNgotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1nb2JqZWN0L2dhLXJlY29yZC1icm93c2VyLmMKQEAgLTAsMCArMSwzODEgQEAKKy8qCisgKiBnYS1yZWNvcmQtYnJvd3Nlci5jIC0gU291cmNlIGZvciBHYVJlY29yZEJyb3dzZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEgTHRkLgorICogQGF1dGhvciBTam9lcmQgU2ltb25zIDxzam9lcmRAbHVvbi5uZXQ+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlICJnYS1yZWNvcmQtYnJvd3Nlci5oIgorI2luY2x1ZGUgInNpZ25hbHMtbWFyc2hhbC5oIgorI2luY2x1ZGUgImdhLWVycm9yLmgiCisjaW5jbHVkZSAiZ2EtZW51bXMtZW51bXR5cGVzLmgiCisKK0dfREVGSU5FX1RZUEUoR2FSZWNvcmRCcm93c2VyLCBnYV9yZWNvcmRfYnJvd3NlciwgR19UWVBFX09CSkVDVCkKKworLyogc2lnbmFsIGVudW0gKi8KK2VudW0geworICAgIE5FVywKKyAgICBSRU1PVkVELAorICAgIEZBSUxVUkUsCisgICAgQUxMX0ZPUl9OT1csCisgICAgQ0FDSEVfRVhIQVVTVEVELAorICAgIExBU1RfU0lHTkFMCit9OworCitzdGF0aWMgZ3VpbnQgc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAgfTsKKworLyogcHJvcGVydGllcyAqLworZW51bSB7CisgICAgUFJPUF9QUk9UT0NPTCA9IDEsCisgICAgUFJPUF9JRklOREVYLAorICAgIFBST1BfTkFNRSwKKyAgICBQUk9QX0NMQVNTLAorICAgIFBST1BfVFlQRSwKKyAgICBQUk9QX0ZMQUdTCit9OworCisvKiBwcml2YXRlIHN0cnVjdHVyZSAqLwordHlwZWRlZiBzdHJ1Y3QgX0dhUmVjb3JkQnJvd3NlclByaXZhdGUgR2FSZWNvcmRCcm93c2VyUHJpdmF0ZTsKKworc3RydWN0IF9HYVJlY29yZEJyb3dzZXJQcml2YXRlIHsKKyAgICBnYm9vbGVhbiBkaXNwb3NlX2hhc19ydW47CisgICAgR2FDbGllbnQgKmNsaWVudDsKKyAgICBBdmFoaVJlY29yZEJyb3dzZXIgKmJyb3dzZXI7CisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbDsKKyAgICBBdmFoaUlmSW5kZXggaW50ZXJmYWNlOworICAgIGdjaGFyICpuYW1lOworICAgIGd1aW50MTYgY2xhc3M7CisgICAgZ3VpbnQxNiB0eXBlOworICAgIEF2YWhpTG9va3VwRmxhZ3MgZmxhZ3M7Cit9OworCisjZGVmaW5lIEdBX1JFQ09SRF9CUk9XU0VSX0dFVF9QUklWQVRFKG8pICAgICAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFICgobyksIEdBX1RZUEVfUkVDT1JEX0JST1dTRVIsIEdhUmVjb3JkQnJvd3NlclByaXZhdGUpKQorCitzdGF0aWMgdm9pZCBnYV9yZWNvcmRfYnJvd3Nlcl9pbml0KEFWQUhJX0dDQ19VTlVTRUQgR2FSZWNvcmRCcm93c2VyICogb2JqKSB7CisgICAgLyogYWxsb2NhdGUgYW55IGRhdGEgcmVxdWlyZWQgYnkgdGhlIG9iamVjdCBoZXJlICovCit9CisKK3N0YXRpYyB2b2lkIGdhX3JlY29yZF9icm93c2VyX2Rpc3Bvc2UoR09iamVjdCAqIG9iamVjdCk7CitzdGF0aWMgdm9pZCBnYV9yZWNvcmRfYnJvd3Nlcl9maW5hbGl6ZShHT2JqZWN0ICogb2JqZWN0KTsKKworc3RhdGljIHZvaWQgZ2FfcmVjb3JkX2Jyb3dzZXJfc2V0X3Byb3BlcnR5KEdPYmplY3QgKiBvYmplY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgcHJvcGVydHlfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykgeworICAgIEdhUmVjb3JkQnJvd3NlciAqYnJvd3NlciA9IEdBX1JFQ09SRF9CUk9XU0VSKG9iamVjdCk7CisgICAgR2FSZWNvcmRCcm93c2VyUHJpdmF0ZSAqcHJpdiA9IEdBX1JFQ09SRF9CUk9XU0VSX0dFVF9QUklWQVRFKGJyb3dzZXIpOworCisgICAgZ19hc3NlcnQocHJpdi0+YnJvd3NlciA9PSBOVUxMKTsKKworICAgIHN3aXRjaCAocHJvcGVydHlfaWQpIHsKKyAgICAgICAgY2FzZSBQUk9QX1BST1RPQ09MOgorICAgICAgICAgICAgcHJpdi0+cHJvdG9jb2wgPSBnX3ZhbHVlX2dldF9lbnVtKHZhbHVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBST1BfSUZJTkRFWDoKKyAgICAgICAgICAgIHByaXYtPmludGVyZmFjZSA9IGdfdmFsdWVfZ2V0X2ludCh2YWx1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQUk9QX05BTUU6CisgICAgICAgICAgICBwcml2LT5uYW1lID0gZ192YWx1ZV9kdXBfc3RyaW5nKHZhbHVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBST1BfQ0xBU1M6CisgICAgICAgICAgICBwcml2LT5jbGFzcyA9IGdfdmFsdWVfZ2V0X3VpbnQodmFsdWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUFJPUF9UWVBFOgorICAgICAgICAgICAgcHJpdi0+dHlwZSA9IGdfdmFsdWVfZ2V0X3VpbnQodmFsdWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUFJPUF9GTEFHUzoKKyAgICAgICAgICAgIHByaXYtPmZsYWdzID0gZ192YWx1ZV9nZXRfZW51bSh2YWx1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5X2lkLCBwc3BlYyk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGdhX3JlY29yZF9icm93c2VyX2dldF9wcm9wZXJ0eShHT2JqZWN0ICogb2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50IHByb3BlcnR5X2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpIHsKKyAgICBHYVJlY29yZEJyb3dzZXIgKmJyb3dzZXIgPSBHQV9SRUNPUkRfQlJPV1NFUihvYmplY3QpOworICAgIEdhUmVjb3JkQnJvd3NlclByaXZhdGUgKnByaXYgPSBHQV9SRUNPUkRfQlJPV1NFUl9HRVRfUFJJVkFURShicm93c2VyKTsKKworICAgIHN3aXRjaCAocHJvcGVydHlfaWQpIHsKKyAgICAgICAgY2FzZSBQUk9QX1BST1RPQ09MOgorICAgICAgICAgICAgZ192YWx1ZV9zZXRfaW50KHZhbHVlLCBwcml2LT5wcm90b2NvbCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQUk9QX0lGSU5ERVg6CisgICAgICAgICAgICBnX3ZhbHVlX3NldF9pbnQodmFsdWUsIHByaXYtPmludGVyZmFjZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQUk9QX1RZUEU6CisgICAgICAgICAgICBnX3ZhbHVlX3NldF91aW50KHZhbHVlLCBwcml2LT50eXBlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBST1BfQ0xBU1M6CisgICAgICAgICAgICBnX3ZhbHVlX3NldF91aW50KHZhbHVlLCBwcml2LT5jbGFzcyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQUk9QX05BTUU6CisgICAgICAgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcodmFsdWUsIHByaXYtPm5hbWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUFJPUF9GTEFHUzoKKyAgICAgICAgICAgIGdfdmFsdWVfc2V0X2VudW0odmFsdWUsIHByaXYtPmZsYWdzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlfaWQsIHBzcGVjKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KK30KKworCitzdGF0aWMgdm9pZCBnYV9yZWNvcmRfYnJvd3Nlcl9jbGFzc19pbml0KEdhUmVjb3JkQnJvd3NlckNsYXNzICogZ2FfcmVjb3JkX2Jyb3dzZXJfY2xhc3MpIHsKKyAgICBHT2JqZWN0Q2xhc3MgKm9iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGdhX3JlY29yZF9icm93c2VyX2NsYXNzKTsKKyAgICBHUGFyYW1TcGVjICpwYXJhbV9zcGVjOworCisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdhX3JlY29yZF9icm93c2VyX2NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKEdhUmVjb3JkQnJvd3NlclByaXZhdGUpKTsKKworICAgIG9iamVjdF9jbGFzcy0+ZGlzcG9zZSA9IGdhX3JlY29yZF9icm93c2VyX2Rpc3Bvc2U7CisgICAgb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdhX3JlY29yZF9icm93c2VyX2ZpbmFsaXplOworCisgICAgb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnYV9yZWNvcmRfYnJvd3Nlcl9zZXRfcHJvcGVydHk7CisgICAgb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnYV9yZWNvcmRfYnJvd3Nlcl9nZXRfcHJvcGVydHk7CisKKyAgICBzaWduYWxzW05FV10gPQorICAgICAgICAgICAgZ19zaWduYWxfbmV3KCJuZXctcmVjb3JkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHX09CSkVDVF9DTEFTU19UWVBFKGdhX3JlY29yZF9icm93c2VyX2NsYXNzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgX2dhX3NpZ25hbHNfbWFyc2hhbF9WT0lEX19JTlRfRU5VTV9TVFJJTkdfVUlOVF9VSU5UX1BPSU5URVJfSU5UX0lOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfTk9ORSwgOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfSU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgIEdBX1RZUEVfUFJPVE9DT0wsCisgICAgICAgICAgICAgICAgICAgICAgICAgR19UWVBFX1NUUklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfVUlOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfVUlOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfUE9JTlRFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfSU5ULCBHQV9UWVBFX0xPT0tVUF9SRVNVTFRfRkxBR1MpOworCisgICAgc2lnbmFsc1tSRU1PVkVEXSA9CisgICAgICAgICAgICBnX3NpZ25hbF9uZXcoInJlbW92ZWQtcmVjb3JkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHX09CSkVDVF9DTEFTU19UWVBFKGdhX3JlY29yZF9icm93c2VyX2NsYXNzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgX2dhX3NpZ25hbHNfbWFyc2hhbF9WT0lEX19JTlRfRU5VTV9TVFJJTkdfVUlOVF9VSU5UX1BPSU5URVJfSU5UX0lOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfTk9ORSwgOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfSU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgIEdBX1RZUEVfUFJPVE9DT0wsCisgICAgICAgICAgICAgICAgICAgICAgICAgR19UWVBFX1NUUklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfVUlOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfVUlOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfUE9JTlRFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfSU5ULCBHQV9UWVBFX0xPT0tVUF9SRVNVTFRfRkxBR1MpOworCisgICAgc2lnbmFsc1tBTExfRk9SX05PV10gPQorICAgICAgICAgICAgZ19zaWduYWxfbmV3KCJhbGwtZm9yLW5vdyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgR19PQkpFQ1RfQ0xBU1NfVFlQRShnYV9yZWNvcmRfYnJvd3Nlcl9jbGFzcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgR19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19WT0lELCBHX1RZUEVfTk9ORSwgMCk7CisKKyAgICBzaWduYWxzW0NBQ0hFX0VYSEFVU1RFRF0gPQorICAgICAgICAgICAgZ19zaWduYWxfbmV3KCJjYWNoZS1leGhhdXN0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgIEdfT0JKRUNUX0NMQVNTX1RZUEUoZ2FfcmVjb3JkX2Jyb3dzZXJfY2xhc3MpLAorICAgICAgICAgICAgICAgICAgICAgICAgIEdfU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fVk9JRCwgR19UWVBFX05PTkUsIDApOworCisgICAgc2lnbmFsc1tGQUlMVVJFXSA9CisgICAgICAgICAgICBnX3NpZ25hbF9uZXcoImZhaWx1cmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgIEdfT0JKRUNUX0NMQVNTX1RZUEUoZ2FfcmVjb3JkX2Jyb3dzZXJfY2xhc3MpLAorICAgICAgICAgICAgICAgICAgICAgICAgIEdfU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fUE9JTlRFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfTk9ORSwgMSwgR19UWVBFX1BPSU5URVIpOworCisgICAgcGFyYW1fc3BlYyA9IGdfcGFyYW1fc3BlY19lbnVtKCJwcm90b2NvbCIsICJBdmFoaSBwcm90b2NvbCB0byBicm93c2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQXZhaGkgcHJvdG9jb2wgdG8gYnJvd3NlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0FfVFlQRV9QUk9UT0NPTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0FfUFJPVE9DT0xfVU5TUEVDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfUEFSQU1fU1RBVElDX05BTUUgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1BBUkFNX1NUQVRJQ19CTFVSQik7CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RfY2xhc3MsIFBST1BfUFJPVE9DT0wsIHBhcmFtX3NwZWMpOworCisgICAgcGFyYW1fc3BlYyA9IGdfcGFyYW1fc3BlY19pbnQoImludGVyZmFjZSIsICJpbnRlcmZhY2UgaW5kZXgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbnRlcmZhY2UgdXNlIGZvciBicm93c2VyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVkFISV9JRl9VTlNQRUMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19NQVhJTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZBSElfSUZfVU5TUEVDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1BBUkFNX1NUQVRJQ19OQU1FIHwgR19QQVJBTV9TVEFUSUNfQkxVUkIpOworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0X2NsYXNzLCBQUk9QX0lGSU5ERVgsIHBhcmFtX3NwZWMpOworCisgICAgcGFyYW1fc3BlYyA9IGdfcGFyYW1fc3BlY19zdHJpbmcoIm5hbWUiLCAicmVjb3JkIG5hbWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSZWNvcmQgbmFtZSB0byBicm93c2UgZm9yIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1BBUkFNX1NUQVRJQ19OQU1FIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1BBUkFNX1NUQVRJQ19CTFVSQik7CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RfY2xhc3MsIFBST1BfTkFNRSwgcGFyYW1fc3BlYyk7CisKKyAgICBwYXJhbV9zcGVjID0gZ19wYXJhbV9zcGVjX3VpbnQoInR5cGUiLCAicmVjb3JkIHR5cGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmVjb3JkIHR5cGUgdG8gYnJvd3NlIGZvciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdfTUFYVUlOVDE2LCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfUEFSQU1fU1RBVElDX05BTUUgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1BBUkFNX1NUQVRJQ19CTFVSQik7CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RfY2xhc3MsIFBST1BfVFlQRSwgcGFyYW1fc3BlYyk7CisKKyAgICBwYXJhbV9zcGVjID0gZ19wYXJhbV9zcGVjX3VpbnQoImNsYXNzIiwgInJlY29yZCBjbGFzcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSZWNvcmQgY2xhc3MgdG8gYnJvd3NlIGZvciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdfTUFYVUlOVDE2LCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfUEFSQU1fU1RBVElDX05BTUUgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1BBUkFNX1NUQVRJQ19CTFVSQik7CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RfY2xhc3MsIFBST1BfQ0xBU1MsIHBhcmFtX3NwZWMpOworCisgICAgcGFyYW1fc3BlYyA9IGdfcGFyYW1fc3BlY19lbnVtKCJmbGFncyIsICJMb29rdXAgZmxhZ3MgZm9yIHRoZSBicm93c2VyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJyb3dzZXIgbG9va3VwIGZsYWdzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0FfVFlQRV9MT09LVVBfRkxBR1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdBX0xPT0tVUF9OT19GTEFHUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1BBUkFNX1NUQVRJQ19OQU1FIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19QQVJBTV9TVEFUSUNfQkxVUkIpOworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0X2NsYXNzLCBQUk9QX0ZMQUdTLCBwYXJhbV9zcGVjKTsKK30KKwordm9pZCBnYV9yZWNvcmRfYnJvd3Nlcl9kaXNwb3NlKEdPYmplY3QgKiBvYmplY3QpIHsKKyAgICBHYVJlY29yZEJyb3dzZXIgKnNlbGYgPSBHQV9SRUNPUkRfQlJPV1NFUihvYmplY3QpOworICAgIEdhUmVjb3JkQnJvd3NlclByaXZhdGUgKnByaXYgPSBHQV9SRUNPUkRfQlJPV1NFUl9HRVRfUFJJVkFURShzZWxmKTsKKworICAgIGlmIChwcml2LT5kaXNwb3NlX2hhc19ydW4pCisgICAgICAgIHJldHVybjsKKworICAgIHByaXYtPmRpc3Bvc2VfaGFzX3J1biA9IFRSVUU7CisKKyAgICAvKiByZWxlYXNlIGFueSByZWZlcmVuY2VzIGhlbGQgYnkgdGhlIG9iamVjdCBoZXJlICovCisgICAgaWYgKHByaXYtPmNsaWVudCkKKyAgICAgICAgZ19vYmplY3RfdW5yZWYocHJpdi0+Y2xpZW50KTsKKyAgICBwcml2LT5jbGllbnQgPSBOVUxMOworCisgICAgaWYgKHByaXYtPmJyb3dzZXIpCisgICAgICAgIGF2YWhpX3JlY29yZF9icm93c2VyX2ZyZWUocHJpdi0+YnJvd3Nlcik7CisgICAgcHJpdi0+YnJvd3NlciA9IE5VTEw7CisKKyAgICBpZiAoR19PQkpFQ1RfQ0xBU1MoZ2FfcmVjb3JkX2Jyb3dzZXJfcGFyZW50X2NsYXNzKS0+ZGlzcG9zZSkKKyAgICAgICAgR19PQkpFQ1RfQ0xBU1MoZ2FfcmVjb3JkX2Jyb3dzZXJfcGFyZW50X2NsYXNzKS0+ZGlzcG9zZShvYmplY3QpOworfQorCit2b2lkIGdhX3JlY29yZF9icm93c2VyX2ZpbmFsaXplKEdPYmplY3QgKiBvYmplY3QpIHsKKyAgICBHYVJlY29yZEJyb3dzZXIgKnNlbGYgPSBHQV9SRUNPUkRfQlJPV1NFUihvYmplY3QpOworICAgIEdhUmVjb3JkQnJvd3NlclByaXZhdGUgKnByaXYgPSBHQV9SRUNPUkRfQlJPV1NFUl9HRVRfUFJJVkFURShzZWxmKTsKKworICAgIC8qIGZyZWUgYW55IGRhdGEgaGVsZCBkaXJlY3RseSBieSB0aGUgb2JqZWN0IGhlcmUgKi8KKyAgICBnX2ZyZWUocHJpdi0+bmFtZSk7CisKKyAgICBHX09CSkVDVF9DTEFTUyhnYV9yZWNvcmRfYnJvd3Nlcl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCisKK0dhUmVjb3JkQnJvd3NlciAqZ2FfcmVjb3JkX2Jyb3dzZXJfbmV3KGNvbnN0IGdjaGFyICogbmFtZSwgZ3VpbnQxNiB0eXBlKSB7CisgICAgcmV0dXJuIGdhX3JlY29yZF9icm93c2VyX25ld19mdWxsKEFWQUhJX0lGX1VOU1BFQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZBSElfUFJPVE9fVU5TUEVDLCBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVkFISV9ETlNfQ0xBU1NfSU4sIHR5cGUsIDApOworfQorCitHYVJlY29yZEJyb3dzZXIgKmdhX3JlY29yZF9icm93c2VyX25ld19mdWxsKEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQxNiBjbGF6eiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQxNiB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHYUxvb2t1cEZsYWdzIGZsYWdzKSB7CisgICAgcmV0dXJuIGdfb2JqZWN0X25ldyhHQV9UWVBFX1JFQ09SRF9CUk9XU0VSLAorICAgICAgICAgICAgICAgICAgICAgICAgImludGVyZmFjZSIsIGludGVyZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJwcm90b2NvbCIsIHByb3RvY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiLCBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgImNsYXNzIiwgY2xhenosICJ0eXBlIiwgdHlwZSwgImZsYWdzIiwgZmxhZ3MsIE5VTEwpOworCit9CisKK3N0YXRpYyB2b2lkIF9hdmFoaV9yZWNvcmRfYnJvd3Nlcl9jYihBVkFISV9HQ0NfVU5VU0VEIEF2YWhpUmVjb3JkQnJvd3NlciAqIHIsIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwgQXZhaGlCcm93c2VyRXZlbnQgZXZlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSwgdWludDE2X3QgY2xhenosIHVpbnQxNl90IHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqcmRhdGEsIHNpemVfdCByZGF0YV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgIEF2YWhpTG9va3VwUmVzdWx0RmxhZ3MgZmxhZ3MsIHZvaWQgKnVzZXJkYXRhKSB7CisgICAgR2FSZWNvcmRCcm93c2VyICpzZWxmID0gR0FfUkVDT1JEX0JST1dTRVIodXNlcmRhdGEpOworICAgIEdhUmVjb3JkQnJvd3NlclByaXZhdGUgKnByaXYgPSBHQV9SRUNPUkRfQlJPV1NFUl9HRVRfUFJJVkFURSh1c2VyZGF0YSk7CisKKyAgICBzd2l0Y2ggKGV2ZW50KSB7CisgICAgICAgIGNhc2UgQVZBSElfQlJPV1NFUl9ORVc6CisgICAgICAgIGNhc2UgQVZBSElfQlJPV1NFUl9SRU1PVkU6eworICAgICAgICAgICAgICAgIGd1aW50IHNpZ25hbGlkID0gKGV2ZW50ID09IEFWQUhJX0JST1dTRVJfTkVXID8gTkVXIDogUkVNT1ZFRCk7CisgICAgICAgICAgICAgICAgZ19zaWduYWxfZW1pdChzZWxmLCBzaWduYWxzW3NpZ25hbGlkXSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZSwgcHJvdG9jb2wsIG5hbWUsIGNsYXp6LCB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRhdGEsIHJkYXRhX3NpemUsIGZsYWdzKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBBVkFISV9CUk9XU0VSX0NBQ0hFX0VYSEFVU1RFRDoKKyAgICAgICAgICAgIGdfc2lnbmFsX2VtaXQoc2VsZiwgc2lnbmFsc1tDQUNIRV9FWEhBVVNURURdLCAwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFWQUhJX0JST1dTRVJfQUxMX0ZPUl9OT1c6CisgICAgICAgICAgICBnX3NpZ25hbF9lbWl0KHNlbGYsIHNpZ25hbHNbQUxMX0ZPUl9OT1ddLCAwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFWQUhJX0JST1dTRVJfRkFJTFVSRTp7CisgICAgICAgICAgICAgICAgR0Vycm9yICplcnJvcjsKKyAgICAgICAgICAgICAgICBpbnQgYWVycm5vID0gYXZhaGlfY2xpZW50X2Vycm5vKHByaXYtPmNsaWVudC0+YXZhaGlfY2xpZW50KTsKKyAgICAgICAgICAgICAgICBlcnJvciA9IGdfZXJyb3JfbmV3KEdBX0VSUk9SLCBhZXJybm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQnJvd3NpbmcgZmFpbGVkOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFoaV9zdHJlcnJvcihhZXJybm8pKTsKKyAgICAgICAgICAgICAgICBnX3NpZ25hbF9lbWl0KHNlbGYsIHNpZ25hbHNbRkFJTFVSRV0sIDAsIGVycm9yKTsKKyAgICAgICAgICAgICAgICBnX2Vycm9yX2ZyZWUoZXJyb3IpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgIH0KK30KKworZ2Jvb2xlYW4gZ2FfcmVjb3JkX2Jyb3dzZXJfYXR0YWNoKEdhUmVjb3JkQnJvd3NlciAqIGJyb3dzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgR2FDbGllbnQgKiBjbGllbnQsIEdFcnJvciAqKiBlcnJvcikgeworICAgIEdhUmVjb3JkQnJvd3NlclByaXZhdGUgKnByaXYgPSBHQV9SRUNPUkRfQlJPV1NFUl9HRVRfUFJJVkFURShicm93c2VyKTsKKworICAgIHByaXYtPmNsaWVudCA9IGdfb2JqZWN0X3JlZihjbGllbnQpOworICAgIHByaXYtPmJyb3dzZXIgPSBhdmFoaV9yZWNvcmRfYnJvd3Nlcl9uZXcoY2xpZW50LT5hdmFoaV9jbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5pbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5wcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5jbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPnR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hdmFoaV9yZWNvcmRfYnJvd3Nlcl9jYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyb3dzZXIpOworICAgIGlmIChwcml2LT5icm93c2VyID09IE5VTEwpIHsKKyAgICAgICAgaWYgKGVycm9yICE9IE5VTEwpIHsKKyAgICAgICAgICAgIGludCBhZXJybm8gPSBhdmFoaV9jbGllbnRfZXJybm8oY2xpZW50LT5hdmFoaV9jbGllbnQpOworICAgICAgICAgICAgKmVycm9yID0gZ19lcnJvcl9uZXcoR0FfRVJST1IsIGFlcnJubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBdHRhY2hpbmcgcmVjb3JkIGJyb3dzZXIgZmFpbGVkOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFoaV9zdHJlcnJvcihhZXJybm8pKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWdvYmplY3QvZ2EtcmVjb3JkLWJyb3dzZXIuaCBiL2F2YWhpLTAuNi4zMS9hdmFoaS1nb2JqZWN0L2dhLXJlY29yZC1icm93c2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI3YzA2MQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1nb2JqZWN0L2dhLXJlY29yZC1icm93c2VyLmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIGdhLXJlY29yZC1icm93c2VyLmggLSBIZWFkZXIgZm9yIEdhUmVjb3JkQnJvd3NlcgorICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSBMdGQuCisgKiBAYXV0aG9yIFNqb2VyZCBTaW1vbnMgPHNqb2VyZEBsdW9uLm5ldD4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRlZiBfX0dBX1JFQ09SRF9CUk9XU0VSX0hfXworI2RlZmluZSBfX0dBX1JFQ09SRF9CUk9XU0VSX0hfXworCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDxhdmFoaS1jbGllbnQvbG9va3VwLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2RlZnMuaD4KKyNpbmNsdWRlICJnYS1jbGllbnQuaCIKKyNpbmNsdWRlICJnYS1lbnVtcy5oIgorCitHX0JFR0lOX0RFQ0xTCisKK3R5cGVkZWYgc3RydWN0IF9HYVJlY29yZEJyb3dzZXIgR2FSZWNvcmRCcm93c2VyOwordHlwZWRlZiBzdHJ1Y3QgX0dhUmVjb3JkQnJvd3NlckNsYXNzIEdhUmVjb3JkQnJvd3NlckNsYXNzOworCitzdHJ1Y3QgX0dhUmVjb3JkQnJvd3NlckNsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworc3RydWN0IF9HYVJlY29yZEJyb3dzZXIgeworICAgIEdPYmplY3QgcGFyZW50OworfTsKKworR1R5cGUgZ2FfcmVjb3JkX2Jyb3dzZXJfZ2V0X3R5cGUodm9pZCk7CisKKy8qIFRZUEUgTUFDUk9TICovCisjZGVmaW5lIEdBX1RZUEVfUkVDT1JEX0JST1dTRVIgXAorICAoZ2FfcmVjb3JkX2Jyb3dzZXJfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgR0FfUkVDT1JEX0JST1dTRVIob2JqKSBcCisgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgR0FfVFlQRV9SRUNPUkRfQlJPV1NFUiwgR2FSZWNvcmRCcm93c2VyKSkKKyNkZWZpbmUgR0FfUkVDT1JEX0JST1dTRVJfQ0xBU1Moa2xhc3MpIFwKKyAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksIEdBX1RZUEVfUkVDT1JEX0JST1dTRVIsIEdhUmVjb3JkQnJvd3NlckNsYXNzKSkKKyNkZWZpbmUgSVNfR0FfUkVDT1JEX0JST1dTRVIob2JqKSBcCisgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgR0FfVFlQRV9SRUNPUkRfQlJPV1NFUikpCisjZGVmaW5lIElTX0dBX1JFQ09SRF9CUk9XU0VSX0NMQVNTKGtsYXNzKSBcCisgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCBHQV9UWVBFX1JFQ09SRF9CUk9XU0VSKSkKKyNkZWZpbmUgR0FfUkVDT1JEX0JST1dTRVJfR0VUX0NMQVNTKG9iaikgXAorICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiksIEdBX1RZUEVfUkVDT1JEX0JST1dTRVIsIEdhUmVjb3JkQnJvd3NlckNsYXNzKSkKKworR2FSZWNvcmRCcm93c2VyICpnYV9yZWNvcmRfYnJvd3Nlcl9uZXcoY29uc3QgZ2NoYXIgKiBuYW1lLCBndWludDE2IHR5cGUpOworCitHYVJlY29yZEJyb3dzZXIgKmdhX3JlY29yZF9icm93c2VyX25ld19mdWxsKEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQxNiBjbGF6eiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQxNiB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHYUxvb2t1cEZsYWdzIGZsYWdzKTsKKworZ2Jvb2xlYW4KK2dhX3JlY29yZF9icm93c2VyX2F0dGFjaChHYVJlY29yZEJyb3dzZXIgKiBicm93c2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgIEdhQ2xpZW50ICogY2xpZW50LCBHRXJyb3IgKiogZXJyb3IpOworCisKK0dfRU5EX0RFQ0xTCisjZW5kaWYgLyogI2lmbmRlZiBfX0dBX1JFQ09SRF9CUk9XU0VSX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWdvYmplY3QvZ2Etc2VydmljZS1icm93c2VyLmMgYi9hdmFoaS0wLjYuMzEvYXZhaGktZ29iamVjdC9nYS1zZXJ2aWNlLWJyb3dzZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzNiODBlCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWdvYmplY3QvZ2Etc2VydmljZS1icm93c2VyLmMKQEAgLTAsMCArMSwzNzIgQEAKKy8qCisgKiBnYS1zZXJ2aWNlLWJyb3dzZXIuYyAtIFNvdXJjZSBmb3IgR2FTZXJ2aWNlQnJvd3NlcgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDcgQ29sbGFib3JhIEx0ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2luY2x1ZGUgPGF2YWhpLWNsaWVudC9jbGllbnQuaD4KKyNpbmNsdWRlIDxhdmFoaS1jbGllbnQvbG9va3VwLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2Vycm9yLmg+CisKKyNpbmNsdWRlICJnYS1zZXJ2aWNlLWJyb3dzZXIuaCIKKyNpbmNsdWRlICJzaWduYWxzLW1hcnNoYWwuaCIKKyNpbmNsdWRlICJnYS1lcnJvci5oIgorI2luY2x1ZGUgImdhLWVudW1zLWVudW10eXBlcy5oIgorCitHX0RFRklORV9UWVBFKEdhU2VydmljZUJyb3dzZXIsIGdhX3NlcnZpY2VfYnJvd3NlciwgR19UWVBFX09CSkVDVCkKKworLyogc2lnbmFsIGVudW0gKi8KK2VudW0geworICAgIE5FVywKKyAgICBSRU1PVkVELAorICAgIENBQ0hFX0VYSEFVU1RFRCwKKyAgICBBTExfRk9SX05PVywKKyAgICBGQUlMVVJFLAorICAgIExBU1RfU0lHTkFMCit9OworCitzdGF0aWMgZ3VpbnQgc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAgfTsKKworLyogcHJvcGVydGllcyAqLworZW51bSB7CisgICAgUFJPUF9QUk9UT0NPTCA9IDEsCisgICAgUFJPUF9JRklOREVYLAorICAgIFBST1BfVFlQRSwKKyAgICBQUk9QX0RPTUFJTiwKKyAgICBQUk9QX0ZMQUdTCit9OworCisvKiBwcml2YXRlIHN0cnVjdHVyZSAqLwordHlwZWRlZiBzdHJ1Y3QgX0dhU2VydmljZUJyb3dzZXJQcml2YXRlIEdhU2VydmljZUJyb3dzZXJQcml2YXRlOworCitzdHJ1Y3QgX0dhU2VydmljZUJyb3dzZXJQcml2YXRlIHsKKyAgICBHYUNsaWVudCAqY2xpZW50OworICAgIEF2YWhpU2VydmljZUJyb3dzZXIgKmJyb3dzZXI7CisgICAgQXZhaGlJZkluZGV4IGludGVyZmFjZTsKKyAgICBBdmFoaVByb3RvY29sIHByb3RvY29sOworICAgIGNoYXIgKnR5cGU7CisgICAgY2hhciAqZG9tYWluOworICAgIEF2YWhpTG9va3VwRmxhZ3MgZmxhZ3M7CisgICAgZ2Jvb2xlYW4gZGlzcG9zZV9oYXNfcnVuOworfTsKKworI2RlZmluZSBHQV9TRVJWSUNFX0JST1dTRVJfR0VUX1BSSVZBVEUobykgICAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUgKChvKSwgR0FfVFlQRV9TRVJWSUNFX0JST1dTRVIsIEdhU2VydmljZUJyb3dzZXJQcml2YXRlKSkKKworc3RhdGljIHZvaWQgZ2Ffc2VydmljZV9icm93c2VyX2luaXQoR2FTZXJ2aWNlQnJvd3NlciAqIG9iaikgeworICAgIEdhU2VydmljZUJyb3dzZXJQcml2YXRlICpwcml2ID0gR0FfU0VSVklDRV9CUk9XU0VSX0dFVF9QUklWQVRFKG9iaik7CisKKyAgICAvKiBhbGxvY2F0ZSBhbnkgZGF0YSByZXF1aXJlZCBieSB0aGUgb2JqZWN0IGhlcmUgKi8KKyAgICBwcml2LT5jbGllbnQgPSBOVUxMOworICAgIHByaXYtPmJyb3dzZXIgPSBOVUxMOworICAgIHByaXYtPnR5cGUgPSBOVUxMOworICAgIHByaXYtPmRvbWFpbiA9IE5VTEw7CisKK30KKworc3RhdGljIHZvaWQgZ2Ffc2VydmljZV9icm93c2VyX2Rpc3Bvc2UoR09iamVjdCAqIG9iamVjdCk7CitzdGF0aWMgdm9pZCBnYV9zZXJ2aWNlX2Jyb3dzZXJfZmluYWxpemUoR09iamVjdCAqIG9iamVjdCk7CisKK3N0YXRpYyB2b2lkIGdhX3NlcnZpY2VfYnJvd3Nlcl9zZXRfcHJvcGVydHkoR09iamVjdCAqIG9iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgcHJvcGVydHlfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpIHsKKyAgICBHYVNlcnZpY2VCcm93c2VyICpicm93c2VyID0gR0FfU0VSVklDRV9CUk9XU0VSKG9iamVjdCk7CisgICAgR2FTZXJ2aWNlQnJvd3NlclByaXZhdGUgKnByaXYgPSBHQV9TRVJWSUNFX0JST1dTRVJfR0VUX1BSSVZBVEUoYnJvd3Nlcik7CisKKyAgICBnX2Fzc2VydChwcml2LT5icm93c2VyID09IE5VTEwpOworICAgIHN3aXRjaCAocHJvcGVydHlfaWQpIHsKKyAgICAgICAgY2FzZSBQUk9QX1BST1RPQ09MOgorICAgICAgICAgICAgcHJpdi0+cHJvdG9jb2wgPSBnX3ZhbHVlX2dldF9lbnVtKHZhbHVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBST1BfSUZJTkRFWDoKKyAgICAgICAgICAgIHByaXYtPmludGVyZmFjZSA9IGdfdmFsdWVfZ2V0X2ludCh2YWx1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQUk9QX1RZUEU6CisgICAgICAgICAgICBwcml2LT50eXBlID0gZ19zdHJkdXAoZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQUk9QX0RPTUFJTjoKKyAgICAgICAgICAgIHByaXYtPmRvbWFpbiA9IGdfc3RyZHVwKGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUFJPUF9GTEFHUzoKKyAgICAgICAgICAgIHByaXYtPmZsYWdzID0gZ192YWx1ZV9nZXRfZW51bSh2YWx1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5X2lkLCBwc3BlYyk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGdhX3NlcnZpY2VfYnJvd3Nlcl9nZXRfcHJvcGVydHkoR09iamVjdCAqIG9iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgcHJvcGVydHlfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpIHsKKyAgICBHYVNlcnZpY2VCcm93c2VyICpicm93c2VyID0gR0FfU0VSVklDRV9CUk9XU0VSKG9iamVjdCk7CisgICAgR2FTZXJ2aWNlQnJvd3NlclByaXZhdGUgKnByaXYgPSBHQV9TRVJWSUNFX0JST1dTRVJfR0VUX1BSSVZBVEUoYnJvd3Nlcik7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5X2lkKSB7CisgICAgICAgIGNhc2UgUFJPUF9QUk9UT0NPTDoKKyAgICAgICAgICAgIGdfdmFsdWVfc2V0X2ludCh2YWx1ZSwgcHJpdi0+cHJvdG9jb2wpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUFJPUF9JRklOREVYOgorICAgICAgICAgICAgZ192YWx1ZV9zZXRfaW50KHZhbHVlLCBwcml2LT5pbnRlcmZhY2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUFJPUF9UWVBFOgorICAgICAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCBwcml2LT50eXBlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBST1BfRE9NQUlOOgorICAgICAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCBwcml2LT5kb21haW4pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUFJPUF9GTEFHUzoKKyAgICAgICAgICAgIGdfdmFsdWVfc2V0X2VudW0odmFsdWUsIHByaXYtPmZsYWdzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlfaWQsIHBzcGVjKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KK30KKworCitzdGF0aWMgdm9pZCBnYV9zZXJ2aWNlX2Jyb3dzZXJfY2xhc3NfaW5pdChHYVNlcnZpY2VCcm93c2VyQ2xhc3MgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Ffc2VydmljZV9icm93c2VyX2NsYXNzKSB7CisgICAgR09iamVjdENsYXNzICpvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyhnYV9zZXJ2aWNlX2Jyb3dzZXJfY2xhc3MpOworICAgIEdQYXJhbVNwZWMgKnBhcmFtX3NwZWM7CisKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ2Ffc2VydmljZV9icm93c2VyX2NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKEdhU2VydmljZUJyb3dzZXJQcml2YXRlKSk7CisKKyAgICBvYmplY3RfY2xhc3MtPmRpc3Bvc2UgPSBnYV9zZXJ2aWNlX2Jyb3dzZXJfZGlzcG9zZTsKKyAgICBvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ2Ffc2VydmljZV9icm93c2VyX2ZpbmFsaXplOworCisgICAgb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnYV9zZXJ2aWNlX2Jyb3dzZXJfc2V0X3Byb3BlcnR5OworICAgIG9iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ2Ffc2VydmljZV9icm93c2VyX2dldF9wcm9wZXJ0eTsKKworICAgIHNpZ25hbHNbTkVXXSA9CisgICAgICAgICAgICBnX3NpZ25hbF9uZXcoIm5ldy1zZXJ2aWNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHX09CSkVDVF9DTEFTU19UWVBFKGdhX3NlcnZpY2VfYnJvd3Nlcl9jbGFzcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgR19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgIF9nYV9zaWduYWxzX21hcnNoYWxfVk9JRF9fSU5UX0VOVU1fU1RSSU5HX1NUUklOR19TVFJJTkdfVUlOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfTk9ORSwgNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfSU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgIEdBX1RZUEVfUFJPVE9DT0wsCisgICAgICAgICAgICAgICAgICAgICAgICAgR19UWVBFX1NUUklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9TVFJJTkcsIEdBX1RZUEVfTE9PS1VQX1JFU1VMVF9GTEFHUyk7CisKKyAgICBzaWduYWxzW1JFTU9WRURdID0KKyAgICAgICAgICAgIGdfc2lnbmFsX25ldygicmVtb3ZlZC1zZXJ2aWNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHX09CSkVDVF9DTEFTU19UWVBFKGdhX3NlcnZpY2VfYnJvd3Nlcl9jbGFzcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgR19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgIF9nYV9zaWduYWxzX21hcnNoYWxfVk9JRF9fSU5UX0VOVU1fU1RSSU5HX1NUUklOR19TVFJJTkdfVUlOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfTk9ORSwgNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfSU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgIEdBX1RZUEVfUFJPVE9DT0wsCisgICAgICAgICAgICAgICAgICAgICAgICAgR19UWVBFX1NUUklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9TVFJJTkcsIEdBX1RZUEVfTE9PS1VQX1JFU1VMVF9GTEFHUyk7CisKKyAgICBzaWduYWxzW0FMTF9GT1JfTk9XXSA9CisgICAgICAgICAgICBnX3NpZ25hbF9uZXcoImFsbC1mb3Itbm93IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHX09CSkVDVF9DTEFTU19UWVBFKGdhX3NlcnZpY2VfYnJvd3Nlcl9jbGFzcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgR19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19WT0lELCBHX1RZUEVfTk9ORSwgMCk7CisKKyAgICBzaWduYWxzW0NBQ0hFX0VYSEFVU1RFRF0gPQorICAgICAgICAgICAgZ19zaWduYWxfbmV3KCJjYWNoZS1leGhhdXN0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgIEdfT0JKRUNUX0NMQVNTX1RZUEUoZ2Ffc2VydmljZV9icm93c2VyX2NsYXNzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX1ZPSUQsIEdfVFlQRV9OT05FLCAwKTsKKworICAgIHNpZ25hbHNbRkFJTFVSRV0gPQorICAgICAgICAgICAgZ19zaWduYWxfbmV3KCJmYWlsdXJlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHX09CSkVDVF9DTEFTU19UWVBFKGdhX3NlcnZpY2VfYnJvd3Nlcl9jbGFzcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgR19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19QT0lOVEVSLAorICAgICAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9OT05FLCAxLCBHX1RZUEVfUE9JTlRFUik7CisKKyAgICBwYXJhbV9zcGVjID0gZ19wYXJhbV9zcGVjX2VudW0oInByb3RvY29sIiwgIkF2YWhpIHByb3RvY29sIHRvIGJyb3dzZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBdmFoaSBwcm90b2NvbCB0byBicm93c2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQV9UWVBFX1BST1RPQ09MLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQV9QUk9UT0NPTF9VTlNQRUMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19QQVJBTV9TVEFUSUNfTkFNRSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfUEFSQU1fU1RBVElDX0JMVVJCKTsKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdF9jbGFzcywgUFJPUF9QUk9UT0NPTCwgcGFyYW1fc3BlYyk7CisKKyAgICBwYXJhbV9zcGVjID0gZ19wYXJhbV9zcGVjX2ludCgiaW50ZXJmYWNlIiwgImludGVyZmFjZSBpbmRleCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkludGVyZmFjZSB1c2UgZm9yIGJyb3dzZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWQUhJX0lGX1VOU1BFQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX01BWElOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVkFISV9JRl9VTlNQRUMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfUEFSQU1fU1RBVElDX05BTUUgfCBHX1BBUkFNX1NUQVRJQ19CTFVSQik7CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RfY2xhc3MsIFBST1BfSUZJTkRFWCwgcGFyYW1fc3BlYyk7CisKKyAgICBwYXJhbV9zcGVjID0gZ19wYXJhbV9zcGVjX3N0cmluZygidHlwZSIsICJzZXJ2aWNlIHR5cGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTZXJ2aWNlIHR5cGUgdG8gYnJvd3NlIGZvciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19QQVJBTV9TVEFUSUNfTkFNRSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19QQVJBTV9TVEFUSUNfQkxVUkIpOworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0X2NsYXNzLCBQUk9QX1RZUEUsIHBhcmFtX3NwZWMpOworCisgICAgcGFyYW1fc3BlYyA9IGdfcGFyYW1fc3BlY19zdHJpbmcoImRvbWFpbiIsICJzZXJ2aWNlIGRvbWFpbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRvbWFpbiB0byBicm93c2UgaW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfUEFSQU1fU1RBVElDX05BTUUgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfUEFSQU1fU1RBVElDX0JMVVJCKTsKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdF9jbGFzcywgUFJPUF9ET01BSU4sIHBhcmFtX3NwZWMpOworCisgICAgcGFyYW1fc3BlYyA9IGdfcGFyYW1fc3BlY19lbnVtKCJmbGFncyIsICJMb29rdXAgZmxhZ3MgZm9yIHRoZSBicm93c2VyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJyb3dzZXIgbG9va3VwIGZsYWdzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0FfVFlQRV9MT09LVVBfRkxBR1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdBX0xPT0tVUF9OT19GTEFHUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1BBUkFNX1NUQVRJQ19OQU1FIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19QQVJBTV9TVEFUSUNfQkxVUkIpOworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0X2NsYXNzLCBQUk9QX0ZMQUdTLCBwYXJhbV9zcGVjKTsKK30KKwordm9pZCBnYV9zZXJ2aWNlX2Jyb3dzZXJfZGlzcG9zZShHT2JqZWN0ICogb2JqZWN0KSB7CisgICAgR2FTZXJ2aWNlQnJvd3NlciAqc2VsZiA9IEdBX1NFUlZJQ0VfQlJPV1NFUihvYmplY3QpOworICAgIEdhU2VydmljZUJyb3dzZXJQcml2YXRlICpwcml2ID0gR0FfU0VSVklDRV9CUk9XU0VSX0dFVF9QUklWQVRFKHNlbGYpOworCisgICAgaWYgKHByaXYtPmRpc3Bvc2VfaGFzX3J1bikKKyAgICAgICAgcmV0dXJuOworCisgICAgcHJpdi0+ZGlzcG9zZV9oYXNfcnVuID0gVFJVRTsKKworICAgIGlmIChwcml2LT5icm93c2VyKQorICAgICAgICBhdmFoaV9zZXJ2aWNlX2Jyb3dzZXJfZnJlZShwcml2LT5icm93c2VyKTsKKyAgICBwcml2LT5icm93c2VyID0gTlVMTDsKKyAgICBpZiAocHJpdi0+Y2xpZW50KQorICAgICAgICBnX29iamVjdF91bnJlZihwcml2LT5jbGllbnQpOworICAgIHByaXYtPmNsaWVudCA9IE5VTEw7CisKKyAgICAvKiByZWxlYXNlIGFueSByZWZlcmVuY2VzIGhlbGQgYnkgdGhlIG9iamVjdCBoZXJlICovCisKKyAgICBpZiAoR19PQkpFQ1RfQ0xBU1MoZ2Ffc2VydmljZV9icm93c2VyX3BhcmVudF9jbGFzcyktPmRpc3Bvc2UpCisgICAgICAgIEdfT0JKRUNUX0NMQVNTKGdhX3NlcnZpY2VfYnJvd3Nlcl9wYXJlbnRfY2xhc3MpLT5kaXNwb3NlKG9iamVjdCk7Cit9CisKK3ZvaWQgZ2Ffc2VydmljZV9icm93c2VyX2ZpbmFsaXplKEdPYmplY3QgKiBvYmplY3QpIHsKKyAgICBHYVNlcnZpY2VCcm93c2VyICpzZWxmID0gR0FfU0VSVklDRV9CUk9XU0VSKG9iamVjdCk7CisgICAgR2FTZXJ2aWNlQnJvd3NlclByaXZhdGUgKnByaXYgPSBHQV9TRVJWSUNFX0JST1dTRVJfR0VUX1BSSVZBVEUoc2VsZik7CisKKyAgICAvKiBmcmVlIGFueSBkYXRhIGhlbGQgZGlyZWN0bHkgYnkgdGhlIG9iamVjdCBoZXJlICovCisgICAgZ19mcmVlKHByaXYtPnR5cGUpOworICAgIHByaXYtPnR5cGUgPSBOVUxMOworICAgIGdfZnJlZShwcml2LT5kb21haW4pOworICAgIHByaXYtPmRvbWFpbiA9IE5VTEw7CisKKyAgICBHX09CSkVDVF9DTEFTUyhnYV9zZXJ2aWNlX2Jyb3dzZXJfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgX2F2YWhpX3NlcnZpY2VfYnJvd3Nlcl9jYihBdmFoaVNlcnZpY2VCcm93c2VyICogYiwgQXZhaGlJZkluZGV4IGludGVyZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwgQXZhaGlCcm93c2VyRXZlbnQgZXZlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwgQXZhaGlMb29rdXBSZXN1bHRGbGFncyBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcmRhdGEpIHsKKyAgICBHYVNlcnZpY2VCcm93c2VyICpzZWxmID0gR0FfU0VSVklDRV9CUk9XU0VSKHVzZXJkYXRhKTsKKyAgICBHYVNlcnZpY2VCcm93c2VyUHJpdmF0ZSAqcHJpdiA9IEdBX1NFUlZJQ0VfQlJPV1NFUl9HRVRfUFJJVkFURShzZWxmKTsKKyAgICBpZiAocHJpdi0+YnJvd3NlciA9PSBOVUxMKSB7CisgICAgICAgIHByaXYtPmJyb3dzZXIgPSBiOworICAgIH0KKyAgICBnX2Fzc2VydChwcml2LT5icm93c2VyID09IGIpOworCisgICAgc3dpdGNoIChldmVudCkgeworICAgICAgICBjYXNlIEFWQUhJX0JST1dTRVJfTkVXOgorICAgICAgICBjYXNlIEFWQUhJX0JST1dTRVJfUkVNT1ZFOnsKKyAgICAgICAgICAgICAgICBndWludCBzaWduYWxpZDsKKyAgICAgICAgICAgICAgICBzaWduYWxpZCA9IChldmVudCA9PSBBVkFISV9CUk9XU0VSX05FVyA/IE5FVyA6IFJFTU9WRUQpOworICAgICAgICAgICAgICAgIGdfc2lnbmFsX2VtaXQoc2VsZiwgc2lnbmFsc1tzaWduYWxpZF0sIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UsIHByb3RvY29sLCBuYW1lLCB0eXBlLCBkb21haW4sIGZsYWdzKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBBVkFISV9CUk9XU0VSX0NBQ0hFX0VYSEFVU1RFRDoKKyAgICAgICAgICAgIGdfc2lnbmFsX2VtaXQoc2VsZiwgc2lnbmFsc1tDQUNIRV9FWEhBVVNURURdLCAwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFWQUhJX0JST1dTRVJfQUxMX0ZPUl9OT1c6CisgICAgICAgICAgICBnX3NpZ25hbF9lbWl0KHNlbGYsIHNpZ25hbHNbQUxMX0ZPUl9OT1ddLCAwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFWQUhJX0JST1dTRVJfRkFJTFVSRTp7CisgICAgICAgICAgICAgICAgR0Vycm9yICplcnJvcjsKKyAgICAgICAgICAgICAgICBpbnQgYWVycm5vID0gYXZhaGlfY2xpZW50X2Vycm5vKHByaXYtPmNsaWVudC0+YXZhaGlfY2xpZW50KTsKKyAgICAgICAgICAgICAgICBlcnJvciA9IGdfZXJyb3JfbmV3KEdBX0VSUk9SLCBhZXJybm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQnJvd3NpbmcgZmFpbGVkOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFoaV9zdHJlcnJvcihhZXJybm8pKTsKKyAgICAgICAgICAgICAgICBnX3NpZ25hbF9lbWl0KHNlbGYsIHNpZ25hbHNbRkFJTFVSRV0sIDAsIGVycm9yKTsKKyAgICAgICAgICAgICAgICBnX2Vycm9yX2ZyZWUoZXJyb3IpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgIH0KK30KKworR2FTZXJ2aWNlQnJvd3NlciAqZ2Ffc2VydmljZV9icm93c2VyX25ldyhjb25zdCBnY2hhciAqIHR5cGUpIHsKKyAgICByZXR1cm4gZ2Ffc2VydmljZV9icm93c2VyX25ld19mdWxsKEFWQUhJX0lGX1VOU1BFQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWQUhJX1BST1RPX1VOU1BFQywgdHlwZSwgTlVMTCwgMCk7Cit9CisKK0dhU2VydmljZUJyb3dzZXIgKmdhX3NlcnZpY2VfYnJvd3Nlcl9uZXdfZnVsbChBdmFoaUlmSW5kZXggaW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKiB0eXBlLCBnY2hhciAqIGRvbWFpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHYUxvb2t1cEZsYWdzIGZsYWdzKSB7CisgICAgcmV0dXJuIGdfb2JqZWN0X25ldyhHQV9UWVBFX1NFUlZJQ0VfQlJPV1NFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJpbnRlcmZhY2UiLCBpbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAicHJvdG9jb2wiLCBwcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIiwgdHlwZSwgImRvbWFpbiIsIGRvbWFpbiwgImZsYWdzIiwgZmxhZ3MsIE5VTEwpOworfQorCitnYm9vbGVhbiBnYV9zZXJ2aWNlX2Jyb3dzZXJfYXR0YWNoKEdhU2VydmljZUJyb3dzZXIgKiBicm93c2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBHYUNsaWVudCAqIGNsaWVudCwgR0Vycm9yICoqIGVycm9yKSB7CisgICAgR2FTZXJ2aWNlQnJvd3NlclByaXZhdGUgKnByaXYgPSBHQV9TRVJWSUNFX0JST1dTRVJfR0VUX1BSSVZBVEUoYnJvd3Nlcik7CisKKyAgICBnX29iamVjdF9yZWYoY2xpZW50KTsKKyAgICBwcml2LT5jbGllbnQgPSBjbGllbnQ7CisKKyAgICBwcml2LT5icm93c2VyID0gYXZhaGlfc2VydmljZV9icm93c2VyX25ldyhjbGllbnQtPmF2YWhpX2NsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5pbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+cHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+dHlwZSwgcHJpdi0+ZG9tYWluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPmZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hdmFoaV9zZXJ2aWNlX2Jyb3dzZXJfY2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJvd3Nlcik7CisgICAgaWYgKHByaXYtPmJyb3dzZXIgPT0gTlVMTCkgeworICAgICAgICBpZiAoZXJyb3IgIT0gTlVMTCkgeworICAgICAgICAgICAgaW50IGFlcnJubyA9IGF2YWhpX2NsaWVudF9lcnJubyhjbGllbnQtPmF2YWhpX2NsaWVudCk7CisgICAgICAgICAgICAqZXJyb3IgPSBnX2Vycm9yX25ldyhHQV9FUlJPUiwgYWVycm5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkF0dGFjaGluZyBncm91cCBmYWlsZWQ6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWhpX3N0cmVycm9yKGFlcnJubykpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktZ29iamVjdC9nYS1zZXJ2aWNlLWJyb3dzZXIuaCBiL2F2YWhpLTAuNi4zMS9hdmFoaS1nb2JqZWN0L2dhLXNlcnZpY2UtYnJvd3Nlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhZWFkNGIKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktZ29iamVjdC9nYS1zZXJ2aWNlLWJyb3dzZXIuaApAQCAtMCwwICsxLDcxIEBACisvKgorICogZ2Etc2VydmljZS1icm93c2VyLmggLSBIZWFkZXIgZm9yIEdhU2VydmljZUJyb3dzZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA3IENvbGxhYm9yYSBMdGQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYgX19HQV9TRVJWSUNFX0JST1dTRVJfSF9fCisjZGVmaW5lIF9fR0FfU0VSVklDRV9CUk9XU0VSX0hfXworCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDxhdmFoaS1jbGllbnQvbG9va3VwLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2RlZnMuaD4KKyNpbmNsdWRlICJnYS1jbGllbnQuaCIKKyNpbmNsdWRlICJnYS1lbnVtcy5oIgorCitHX0JFR0lOX0RFQ0xTCisKK3R5cGVkZWYgc3RydWN0IF9HYVNlcnZpY2VCcm93c2VyIEdhU2VydmljZUJyb3dzZXI7Cit0eXBlZGVmIHN0cnVjdCBfR2FTZXJ2aWNlQnJvd3NlckNsYXNzIEdhU2VydmljZUJyb3dzZXJDbGFzczsKKworc3RydWN0IF9HYVNlcnZpY2VCcm93c2VyQ2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitzdHJ1Y3QgX0dhU2VydmljZUJyb3dzZXIgeworICAgIEdPYmplY3QgcGFyZW50OworfTsKKworR1R5cGUgZ2Ffc2VydmljZV9icm93c2VyX2dldF90eXBlKHZvaWQpOworCisvKiBUWVBFIE1BQ1JPUyAqLworI2RlZmluZSBHQV9UWVBFX1NFUlZJQ0VfQlJPV1NFUiBcCisgIChnYV9zZXJ2aWNlX2Jyb3dzZXJfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgR0FfU0VSVklDRV9CUk9XU0VSKG9iaikgXAorICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIEdBX1RZUEVfU0VSVklDRV9CUk9XU0VSLCBHYVNlcnZpY2VCcm93c2VyKSkKKyNkZWZpbmUgR0FfU0VSVklDRV9CUk9XU0VSX0NMQVNTKGtsYXNzKSBcCisgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCBHQV9UWVBFX1NFUlZJQ0VfQlJPV1NFUiwgR2FTZXJ2aWNlQnJvd3NlckNsYXNzKSkKKyNkZWZpbmUgSVNfR0FfU0VSVklDRV9CUk9XU0VSKG9iaikgXAorICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIEdBX1RZUEVfU0VSVklDRV9CUk9XU0VSKSkKKyNkZWZpbmUgSVNfR0FfU0VSVklDRV9CUk9XU0VSX0NMQVNTKGtsYXNzKSBcCisgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCBHQV9UWVBFX1NFUlZJQ0VfQlJPV1NFUikpCisjZGVmaW5lIEdBX1NFUlZJQ0VfQlJPV1NFUl9HRVRfQ0xBU1Mob2JqKSBcCisgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgR0FfVFlQRV9TRVJWSUNFX0JST1dTRVIsIEdhU2VydmljZUJyb3dzZXJDbGFzcykpCisKK0dhU2VydmljZUJyb3dzZXIgKmdhX3NlcnZpY2VfYnJvd3Nlcl9uZXcoY29uc3QgZ2NoYXIgKiB0eXBlKTsKKworR2FTZXJ2aWNlQnJvd3NlciAqZ2Ffc2VydmljZV9icm93c2VyX25ld19mdWxsKEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqIHR5cGUsIGdjaGFyICogZG9tYWluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdhTG9va3VwRmxhZ3MgZmxhZ3MpOworCitnYm9vbGVhbgorZ2Ffc2VydmljZV9icm93c2VyX2F0dGFjaChHYVNlcnZpY2VCcm93c2VyICogYnJvd3NlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgR2FDbGllbnQgKiBjbGllbnQsIEdFcnJvciAqKiBlcnJvcik7CisKKworR19FTkRfREVDTFMKKyNlbmRpZiAvKiAjaWZuZGVmIF9fR0FfU0VSVklDRV9CUk9XU0VSX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLWdvYmplY3QvZ2Etc2VydmljZS1yZXNvbHZlci5jIGIvYXZhaGktMC42LjMxL2F2YWhpLWdvYmplY3QvZ2Etc2VydmljZS1yZXNvbHZlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzY2ZhYTAKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktZ29iamVjdC9nYS1zZXJ2aWNlLXJlc29sdmVyLmMKQEAgLTAsMCArMSw0MDMgQEAKKy8qCisgKiBnYS1zZXJ2aWNlLXJlc29sdmVyLmMgLSBTb3VyY2UgZm9yIEdhU2VydmljZVJlc29sdmVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwNyBDb2xsYWJvcmEgTHRkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSAiZ2Etc2VydmljZS1yZXNvbHZlci5oIgorI2luY2x1ZGUgInNpZ25hbHMtbWFyc2hhbC5oIgorCisjaW5jbHVkZSAiZ2EtZXJyb3IuaCIKKworI2luY2x1ZGUgImdhLWVudW1zLmgiCisjaW5jbHVkZSAiZ2EtZW51bXMtZW51bXR5cGVzLmgiCisKKyNpbmNsdWRlIDxhdmFoaS1jbGllbnQvbG9va3VwLmg+CisKK0dfREVGSU5FX1RZUEUoR2FTZXJ2aWNlUmVzb2x2ZXIsIGdhX3NlcnZpY2VfcmVzb2x2ZXIsIEdfVFlQRV9PQkpFQ1QpCisKKy8qIHNpZ25hbCBlbnVtICovCitlbnVtIHsKKyAgICBGT1VORCwKKyAgICBGQUlMVVJFLAorICAgIExBU1RfU0lHTkFMCit9OworCitzdGF0aWMgZ3VpbnQgc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAgfTsKKworLyogcHJvcGVydGllcyAqLworZW51bSB7CisgICAgUFJPUF9QUk9UT0NPTCA9IDEsCisgICAgUFJPUF9JRklOREVYLAorICAgIFBST1BfTkFNRSwKKyAgICBQUk9QX1RZUEUsCisgICAgUFJPUF9ET01BSU4sCisgICAgUFJPUF9GTEFHUywKKyAgICBQUk9QX0FQUk9UT0NPTAorfTsKKworLyogcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KK3R5cGVkZWYgc3RydWN0IF9HYVNlcnZpY2VSZXNvbHZlclByaXZhdGUgR2FTZXJ2aWNlUmVzb2x2ZXJQcml2YXRlOworCitzdHJ1Y3QgX0dhU2VydmljZVJlc29sdmVyUHJpdmF0ZSB7CisgICAgR2FDbGllbnQgKmNsaWVudDsKKyAgICBBdmFoaVNlcnZpY2VSZXNvbHZlciAqcmVzb2x2ZXI7CisgICAgQXZhaGlJZkluZGV4IGludGVyZmFjZTsKKyAgICBBdmFoaVByb3RvY29sIHByb3RvY29sOworICAgIEF2YWhpQWRkcmVzcyBhZGRyZXNzOworICAgIHVpbnQxNl90IHBvcnQ7CisgICAgY2hhciAqbmFtZTsKKyAgICBjaGFyICp0eXBlOworICAgIGNoYXIgKmRvbWFpbjsKKyAgICBBdmFoaVByb3RvY29sIGFwcm90b2NvbDsKKyAgICBBdmFoaUxvb2t1cEZsYWdzIGZsYWdzOworICAgIGdib29sZWFuIGRpc3Bvc2VfaGFzX3J1bjsKK307CisKKyNkZWZpbmUgR0FfU0VSVklDRV9SRVNPTFZFUl9HRVRfUFJJVkFURShvKSAgICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSAoKG8pLCBHQV9UWVBFX1NFUlZJQ0VfUkVTT0xWRVIsIEdhU2VydmljZVJlc29sdmVyUHJpdmF0ZSkpCisKK3N0YXRpYyB2b2lkIGdhX3NlcnZpY2VfcmVzb2x2ZXJfaW5pdChHYVNlcnZpY2VSZXNvbHZlciAqIG9iaikgeworICAgIEdhU2VydmljZVJlc29sdmVyUHJpdmF0ZSAqcHJpdiA9IEdBX1NFUlZJQ0VfUkVTT0xWRVJfR0VUX1BSSVZBVEUob2JqKTsKKworICAgIC8qIGFsbG9jYXRlIGFueSBkYXRhIHJlcXVpcmVkIGJ5IHRoZSBvYmplY3QgaGVyZSAqLworICAgIHByaXYtPmNsaWVudCA9IE5VTEw7CisgICAgcHJpdi0+cmVzb2x2ZXIgPSBOVUxMOworICAgIHByaXYtPm5hbWUgPSBOVUxMOworICAgIHByaXYtPnR5cGUgPSBOVUxMOworICAgIHByaXYtPmRvbWFpbiA9IE5VTEw7CisgICAgcHJpdi0+cG9ydCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIGdhX3NlcnZpY2VfcmVzb2x2ZXJfZGlzcG9zZShHT2JqZWN0ICogb2JqZWN0KTsKK3N0YXRpYyB2b2lkIGdhX3NlcnZpY2VfcmVzb2x2ZXJfZmluYWxpemUoR09iamVjdCAqIG9iamVjdCk7CisKK3N0YXRpYyB2b2lkIGdhX3NlcnZpY2VfcmVzb2x2ZXJfc2V0X3Byb3BlcnR5KEdPYmplY3QgKiBvYmplY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCBwcm9wZXJ0eV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpIHsKKyAgICBHYVNlcnZpY2VSZXNvbHZlciAqcmVzb2x2ZXIgPSBHQV9TRVJWSUNFX1JFU09MVkVSKG9iamVjdCk7CisgICAgR2FTZXJ2aWNlUmVzb2x2ZXJQcml2YXRlICpwcml2ID0KKyAgICAgICAgICAgIEdBX1NFUlZJQ0VfUkVTT0xWRVJfR0VUX1BSSVZBVEUocmVzb2x2ZXIpOworCisgICAgZ19hc3NlcnQocHJpdi0+cmVzb2x2ZXIgPT0gTlVMTCk7CisgICAgc3dpdGNoIChwcm9wZXJ0eV9pZCkgeworICAgICAgICBjYXNlIFBST1BfUFJPVE9DT0w6CisgICAgICAgICAgICBwcml2LT5wcm90b2NvbCA9IGdfdmFsdWVfZ2V0X2VudW0odmFsdWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUFJPUF9BUFJPVE9DT0w6CisgICAgICAgICAgICBwcml2LT5hcHJvdG9jb2wgPSBnX3ZhbHVlX2dldF9lbnVtKHZhbHVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBST1BfSUZJTkRFWDoKKyAgICAgICAgICAgIHByaXYtPmludGVyZmFjZSA9IGdfdmFsdWVfZ2V0X2ludCh2YWx1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQUk9QX05BTUU6CisgICAgICAgICAgICBwcml2LT5uYW1lID0gZ19zdHJkdXAoZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQUk9QX1RZUEU6CisgICAgICAgICAgICBwcml2LT50eXBlID0gZ19zdHJkdXAoZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQUk9QX0RPTUFJTjoKKyAgICAgICAgICAgIHByaXYtPmRvbWFpbiA9IGdfc3RyZHVwKGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUFJPUF9GTEFHUzoKKyAgICAgICAgICAgIHByaXYtPmZsYWdzID0gZ192YWx1ZV9nZXRfZW51bSh2YWx1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5X2lkLCBwc3BlYyk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGdhX3NlcnZpY2VfcmVzb2x2ZXJfZ2V0X3Byb3BlcnR5KEdPYmplY3QgKiBvYmplY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCBwcm9wZXJ0eV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpIHsKKyAgICBHYVNlcnZpY2VSZXNvbHZlciAqcmVzb2x2ZXIgPSBHQV9TRVJWSUNFX1JFU09MVkVSKG9iamVjdCk7CisgICAgR2FTZXJ2aWNlUmVzb2x2ZXJQcml2YXRlICpwcml2ID0KKyAgICAgICAgICAgIEdBX1NFUlZJQ0VfUkVTT0xWRVJfR0VUX1BSSVZBVEUocmVzb2x2ZXIpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eV9pZCkgeworICAgICAgICBjYXNlIFBST1BfQVBST1RPQ09MOgorICAgICAgICAgICAgZ192YWx1ZV9zZXRfZW51bSh2YWx1ZSwgcHJpdi0+YXByb3RvY29sKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBST1BfUFJPVE9DT0w6CisgICAgICAgICAgICBnX3ZhbHVlX3NldF9lbnVtKHZhbHVlLCBwcml2LT5wcm90b2NvbCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQUk9QX0lGSU5ERVg6CisgICAgICAgICAgICBnX3ZhbHVlX3NldF9pbnQodmFsdWUsIHByaXYtPmludGVyZmFjZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQUk9QX05BTUU6CisgICAgICAgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcodmFsdWUsIHByaXYtPm5hbWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUFJPUF9UWVBFOgorICAgICAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCBwcml2LT50eXBlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBST1BfRE9NQUlOOgorICAgICAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCBwcml2LT5kb21haW4pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUFJPUF9GTEFHUzoKKyAgICAgICAgICAgIGdfdmFsdWVfc2V0X2VudW0odmFsdWUsIHByaXYtPmZsYWdzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlfaWQsIHBzcGVjKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KK30KKworCitzdGF0aWMgdm9pZCBnYV9zZXJ2aWNlX3Jlc29sdmVyX2NsYXNzX2luaXQoR2FTZXJ2aWNlUmVzb2x2ZXJDbGFzcyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Ffc2VydmljZV9yZXNvbHZlcl9jbGFzcykgeworICAgIEdPYmplY3RDbGFzcyAqb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MoZ2Ffc2VydmljZV9yZXNvbHZlcl9jbGFzcyk7CisgICAgR1BhcmFtU3BlYyAqcGFyYW1fc3BlYzsKKworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnYV9zZXJ2aWNlX3Jlc29sdmVyX2NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKEdhU2VydmljZVJlc29sdmVyUHJpdmF0ZSkpOworCisgICAgb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnYV9zZXJ2aWNlX3Jlc29sdmVyX3NldF9wcm9wZXJ0eTsKKyAgICBvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdhX3NlcnZpY2VfcmVzb2x2ZXJfZ2V0X3Byb3BlcnR5OworCisgICAgb2JqZWN0X2NsYXNzLT5kaXNwb3NlID0gZ2Ffc2VydmljZV9yZXNvbHZlcl9kaXNwb3NlOworICAgIG9iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnYV9zZXJ2aWNlX3Jlc29sdmVyX2ZpbmFsaXplOworCisgICAgc2lnbmFsc1tGT1VORF0gPQorICAgICAgICAgICAgZ19zaWduYWxfbmV3KCJmb3VuZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgR19PQkpFQ1RfQ0xBU1NfVFlQRShnYV9zZXJ2aWNlX3Jlc29sdmVyX2NsYXNzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgX2dhX3NpZ25hbHNfbWFyc2hhbF9WT0lEX19JTlRfRU5VTV9TVFJJTkdfU1RSSU5HX1NUUklOR19TVFJJTkdfUE9JTlRFUl9JTlRfUE9JTlRFUl9JTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgR19UWVBFX05PTkUsIDEwLAorICAgICAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9JTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgR0FfVFlQRV9QUk9UT0NPTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9TVFJJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgR19UWVBFX1NUUklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9QT0lOVEVSLAorICAgICAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9JTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgR19UWVBFX1BPSU5URVIsIEdBX1RZUEVfTE9PS1VQX1JFU1VMVF9GTEFHUyk7CisKKyAgICBzaWduYWxzW0ZBSUxVUkVdID0KKyAgICAgICAgICAgIGdfc2lnbmFsX25ldygiZmFpbHVyZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgR19PQkpFQ1RfQ0xBU1NfVFlQRShnYV9zZXJ2aWNlX3Jlc29sdmVyX2NsYXNzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX1BPSU5URVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgR19UWVBFX05PTkUsIDEsIEdfVFlQRV9QT0lOVEVSKTsKKworICAgIHBhcmFtX3NwZWMgPSBnX3BhcmFtX3NwZWNfZW51bSgicHJvdG9jb2wiLCAiQXZhaGkgcHJvdG9jb2wgdG8gcmVzb2x2ZSBvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBdmFoaSBwcm90b2NvbCB0byByZXNvbHZlIG9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0FfVFlQRV9QUk9UT0NPTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0FfUFJPVE9DT0xfVU5TUEVDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfUEFSQU1fU1RBVElDX05BTUUgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1BBUkFNX1NUQVRJQ19CTFVSQik7CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RfY2xhc3MsIFBST1BfUFJPVE9DT0wsIHBhcmFtX3NwZWMpOworCisgICAgcGFyYW1fc3BlYyA9IGdfcGFyYW1fc3BlY19lbnVtKCJhcHJvdG9jb2wiLCAiQWRkcmVzcyBwcm90b2NvbCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBdmFoaSBwcm90b2NvbCBvZiB0aGUgYWRkcmVzcyB0byBiZSByZXNvbHZlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdBX1RZUEVfUFJPVE9DT0wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdBX1BST1RPQ09MX1VOU1BFQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1BBUkFNX1NUQVRJQ19OQU1FIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19QQVJBTV9TVEFUSUNfQkxVUkIpOworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0X2NsYXNzLCBQUk9QX0FQUk9UT0NPTCwgcGFyYW1fc3BlYyk7CisKKyAgICBwYXJhbV9zcGVjID0gZ19wYXJhbV9zcGVjX2ludCgiaW50ZXJmYWNlIiwgImludGVyZmFjZSBpbmRleCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkludGVyZmFjZSB1c2UgZm9yIHJlc29sdmVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVkFISV9JRl9VTlNQRUMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19NQVhJTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZBSElfSUZfVU5TUEVDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1BBUkFNX1NUQVRJQ19OQU1FIHwgR19QQVJBTV9TVEFUSUNfQkxVUkIpOworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0X2NsYXNzLCBQUk9QX0lGSU5ERVgsIHBhcmFtX3NwZWMpOworCisgICAgcGFyYW1fc3BlYyA9IGdfcGFyYW1fc3BlY19zdHJpbmcoIm5hbWUiLCAic2VydmljZSBuYW1lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSB0byByZXNvbHZlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1BBUkFNX1NUQVRJQ19OQU1FIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1BBUkFNX1NUQVRJQ19CTFVSQik7CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RfY2xhc3MsIFBST1BfTkFNRSwgcGFyYW1fc3BlYyk7CisKKyAgICBwYXJhbV9zcGVjID0gZ19wYXJhbV9zcGVjX3N0cmluZygidHlwZSIsICJzZXJ2aWNlIHR5cGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTZXJ2aWNlIHR5cGUgdG8gYnJvd3NlIGZvciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19QQVJBTV9TVEFUSUNfTkFNRSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19QQVJBTV9TVEFUSUNfQkxVUkIpOworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0X2NsYXNzLCBQUk9QX1RZUEUsIHBhcmFtX3NwZWMpOworCisgICAgcGFyYW1fc3BlYyA9IGdfcGFyYW1fc3BlY19zdHJpbmcoImRvbWFpbiIsICJzZXJ2aWNlIGRvbWFpbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRvbWFpbiB0byBicm93c2UgaW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfUEFSQU1fU1RBVElDX05BTUUgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfUEFSQU1fU1RBVElDX0JMVVJCKTsKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdF9jbGFzcywgUFJPUF9ET01BSU4sIHBhcmFtX3NwZWMpOworCisgICAgcGFyYW1fc3BlYyA9IGdfcGFyYW1fc3BlY19lbnVtKCJmbGFncyIsICJMb29rdXAgZmxhZ3MgZm9yIHRoZSByZXNvbHZlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSZXNvbHZlciBsb29rdXAgZmxhZ3MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQV9UWVBFX0xPT0tVUF9GTEFHUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0FfTE9PS1VQX05PX0ZMQUdTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfUEFSQU1fU1RBVElDX05BTUUgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1BBUkFNX1NUQVRJQ19CTFVSQik7CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RfY2xhc3MsIFBST1BfRkxBR1MsIHBhcmFtX3NwZWMpOworfQorCit2b2lkIGdhX3NlcnZpY2VfcmVzb2x2ZXJfZGlzcG9zZShHT2JqZWN0ICogb2JqZWN0KSB7CisgICAgR2FTZXJ2aWNlUmVzb2x2ZXIgKnNlbGYgPSBHQV9TRVJWSUNFX1JFU09MVkVSKG9iamVjdCk7CisgICAgR2FTZXJ2aWNlUmVzb2x2ZXJQcml2YXRlICpwcml2ID0gR0FfU0VSVklDRV9SRVNPTFZFUl9HRVRfUFJJVkFURShzZWxmKTsKKworICAgIGlmIChwcml2LT5kaXNwb3NlX2hhc19ydW4pCisgICAgICAgIHJldHVybjsKKworICAgIHByaXYtPmRpc3Bvc2VfaGFzX3J1biA9IFRSVUU7CisKKyAgICBpZiAocHJpdi0+Y2xpZW50KQorICAgICAgICBnX29iamVjdF91bnJlZihwcml2LT5jbGllbnQpOworICAgIHByaXYtPmNsaWVudCA9IE5VTEw7CisKKyAgICBpZiAocHJpdi0+cmVzb2x2ZXIpCisgICAgICAgIGF2YWhpX3NlcnZpY2VfcmVzb2x2ZXJfZnJlZShwcml2LT5yZXNvbHZlcik7CisgICAgcHJpdi0+cmVzb2x2ZXIgPSBOVUxMOworCisgICAgLyogcmVsZWFzZSBhbnkgcmVmZXJlbmNlcyBoZWxkIGJ5IHRoZSBvYmplY3QgaGVyZSAqLworCisgICAgaWYgKEdfT0JKRUNUX0NMQVNTKGdhX3NlcnZpY2VfcmVzb2x2ZXJfcGFyZW50X2NsYXNzKS0+ZGlzcG9zZSkKKyAgICAgICAgR19PQkpFQ1RfQ0xBU1MoZ2Ffc2VydmljZV9yZXNvbHZlcl9wYXJlbnRfY2xhc3MpLT5kaXNwb3NlKG9iamVjdCk7Cit9CisKK3ZvaWQgZ2Ffc2VydmljZV9yZXNvbHZlcl9maW5hbGl6ZShHT2JqZWN0ICogb2JqZWN0KSB7CisgICAgR2FTZXJ2aWNlUmVzb2x2ZXIgKnNlbGYgPSBHQV9TRVJWSUNFX1JFU09MVkVSKG9iamVjdCk7CisgICAgR2FTZXJ2aWNlUmVzb2x2ZXJQcml2YXRlICpwcml2ID0gR0FfU0VSVklDRV9SRVNPTFZFUl9HRVRfUFJJVkFURShzZWxmKTsKKworICAgIC8qIGZyZWUgYW55IGRhdGEgaGVsZCBkaXJlY3RseSBieSB0aGUgb2JqZWN0IGhlcmUgKi8KKyAgICBnX2ZyZWUocHJpdi0+bmFtZSk7CisgICAgcHJpdi0+bmFtZSA9IE5VTEw7CisKKyAgICBnX2ZyZWUocHJpdi0+dHlwZSk7CisgICAgcHJpdi0+dHlwZSA9IE5VTEw7CisKKyAgICBnX2ZyZWUocHJpdi0+ZG9tYWluKTsKKyAgICBwcml2LT5kb21haW4gPSBOVUxMOworCisgICAgR19PQkpFQ1RfQ0xBU1MoZ2Ffc2VydmljZV9yZXNvbHZlcl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCBfYXZhaGlfc2VydmljZV9yZXNvbHZlcl9jYihBVkFISV9HQ0NfVU5VU0VEIEF2YWhpU2VydmljZVJlc29sdmVyICogcmVzb2x2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEF2YWhpUmVzb2x2ZXJFdmVudCBldmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkb21haW4sIGNvbnN0IGNoYXIgKmhvc3RfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEF2YWhpQWRkcmVzcyAqIGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgQXZhaGlTdHJpbmdMaXN0ICogdHh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgQXZhaGlMb29rdXBSZXN1bHRGbGFncyBmbGFncywgdm9pZCAqdXNlcmRhdGEpIHsKKyAgICBHYVNlcnZpY2VSZXNvbHZlciAqc2VsZiA9IEdBX1NFUlZJQ0VfUkVTT0xWRVIodXNlcmRhdGEpOworICAgIEdhU2VydmljZVJlc29sdmVyUHJpdmF0ZSAqcHJpdiA9IEdBX1NFUlZJQ0VfUkVTT0xWRVJfR0VUX1BSSVZBVEUoc2VsZik7CisKKyAgICBzd2l0Y2ggKGV2ZW50KSB7CisgICAgICAgIGNhc2UgQVZBSElfUkVTT0xWRVJfRk9VTkQ6eworICAgICAgICAgICAgICAgIC8qIEZJWE1FOiBEb3VibGUgY2hlY2sgaWYgdGhpcyBhZGRyZXNzIGlzIGFsd2F5cyB0aGUgc2FtZSAqLworICAgICAgICAgICAgICAgIHByaXYtPmFkZHJlc3MgPSAqYTsKKyAgICAgICAgICAgICAgICBwcml2LT5wb3J0ID0gcG9ydDsKKyAgICAgICAgICAgICAgICBnX3NpZ25hbF9lbWl0KHNlbGYsIHNpZ25hbHNbRk9VTkRdLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlLCBwcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21haW4sIGhvc3RfbmFtZSwgYSwgcG9ydCwgdHh0LCBmbGFncyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgQVZBSElfUkVTT0xWRVJfRkFJTFVSRTp7CisgICAgICAgICAgICAgICAgR0Vycm9yICplcnJvcjsKKyAgICAgICAgICAgICAgICBpbnQgYWVycm5vID0gYXZhaGlfY2xpZW50X2Vycm5vKHByaXYtPmNsaWVudC0+YXZhaGlfY2xpZW50KTsKKyAgICAgICAgICAgICAgICBlcnJvciA9IGdfZXJyb3JfbmV3KEdBX0VSUk9SLCBhZXJybm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmVzb2x2aW5nIGZhaWxlZDogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaGlfc3RyZXJyb3IoYWVycm5vKSk7CisgICAgICAgICAgICAgICAgZ19zaWduYWxfZW1pdChzZWxmLCBzaWduYWxzW0ZBSUxVUkVdLCAwLCBlcnJvcik7CisgICAgICAgICAgICAgICAgZ19lcnJvcl9mcmVlKGVycm9yKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICB9Cit9CisKKworR2FTZXJ2aWNlUmVzb2x2ZXIgKmdhX3NlcnZpY2VfcmVzb2x2ZXJfbmV3KEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKiB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICogZG9tYWluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF2YWhpUHJvdG9jb2wgYWRkcmVzc19wcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHYUxvb2t1cEZsYWdzIGZsYWdzKSB7CisgICAgcmV0dXJuIGdfb2JqZWN0X25ldyhHQV9UWVBFX1NFUlZJQ0VfUkVTT0xWRVIsICJpbnRlcmZhY2UiLCBpbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAicHJvdG9jb2wiLCBwcm90b2NvbCwgIm5hbWUiLCBuYW1lLCAidHlwZSIsIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAiZG9tYWluIiwgZG9tYWluLCAiYXByb3RvY29sIiwgYWRkcmVzc19wcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICJmbGFncyIsIGZsYWdzLCBOVUxMKTsKK30KKworZ2Jvb2xlYW4gZ2Ffc2VydmljZV9yZXNvbHZlcl9hdHRhY2goR2FTZXJ2aWNlUmVzb2x2ZXIgKiByZXNvbHZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdhQ2xpZW50ICogY2xpZW50LCBHRXJyb3IgKiogZXJyb3IpIHsKKyAgICBHYVNlcnZpY2VSZXNvbHZlclByaXZhdGUgKnByaXYgPQorICAgICAgICAgICAgR0FfU0VSVklDRV9SRVNPTFZFUl9HRVRfUFJJVkFURShyZXNvbHZlcik7CisKKyAgICBnX2Fzc2VydChjbGllbnQgIT0gTlVMTCk7CisgICAgZ19vYmplY3RfcmVmKGNsaWVudCk7CisKKyAgICBwcml2LT5jbGllbnQgPSBjbGllbnQ7CisKKyAgICBwcml2LT5yZXNvbHZlciA9IGF2YWhpX3NlcnZpY2VfcmVzb2x2ZXJfbmV3KGNsaWVudC0+YXZhaGlfY2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+aW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+cHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+dHlwZSwgcHJpdi0+ZG9tYWluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+YXByb3RvY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+ZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYXZhaGlfc2VydmljZV9yZXNvbHZlcl9jYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVyKTsKKyAgICBpZiAocHJpdi0+cmVzb2x2ZXIgPT0gTlVMTCkgeworICAgICAgICBpZiAoZXJyb3IgIT0gTlVMTCkgeworICAgICAgICAgICAgaW50IGFlcnJubyA9IGF2YWhpX2NsaWVudF9lcnJubyhjbGllbnQtPmF2YWhpX2NsaWVudCk7CisgICAgICAgICAgICAqZXJyb3IgPSBnX2Vycm9yX25ldyhHQV9FUlJPUiwgYWVycm5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkF0dGFjaGluZyBncm91cCBmYWlsZWQ6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWhpX3N0cmVycm9yKGFlcnJubykpOworICAgICAgICB9CisvKiAgICAgICAgIHByaW50ZigiRmFpbGVkIHRvIGFkZCByZXNvbHZlclxuIik7ICovCisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK2dib29sZWFuIGdhX3NlcnZpY2VfcmVzb2x2ZXJfZ2V0X2FkZHJlc3MoR2FTZXJ2aWNlUmVzb2x2ZXIgKiByZXNvbHZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXZhaGlBZGRyZXNzICogYWRkcmVzcywgdWludDE2X3QgKiBwb3J0KSB7CisgICAgR2FTZXJ2aWNlUmVzb2x2ZXJQcml2YXRlICpwcml2ID0KKyAgICAgICAgICAgIEdBX1NFUlZJQ0VfUkVTT0xWRVJfR0VUX1BSSVZBVEUocmVzb2x2ZXIpOworICAgIGlmIChwcml2LT5wb3J0ID09IDApIHsKKy8qICAgICAgICAgcHJpbnRmKCJQT1JUID09IDBcbiIpOyAqLworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgKmFkZHJlc3MgPSBwcml2LT5hZGRyZXNzOworICAgICpwb3J0ID0gcHJpdi0+cG9ydDsKKyAgICByZXR1cm4gVFJVRTsKK30KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1nb2JqZWN0L2dhLXNlcnZpY2UtcmVzb2x2ZXIuaCBiL2F2YWhpLTAuNi4zMS9hdmFoaS1nb2JqZWN0L2dhLXNlcnZpY2UtcmVzb2x2ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGI0ZjU4Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLWdvYmplY3QvZ2Etc2VydmljZS1yZXNvbHZlci5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBnYS1zZXJ2aWNlLXJlc29sdmVyLmggLSBIZWFkZXIgZm9yIEdhU2VydmljZVJlc29sdmVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwNyBDb2xsYWJvcmEgTHRkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIF9fR0FfU0VSVklDRV9SRVNPTFZFUl9IX18KKyNkZWZpbmUgX19HQV9TRVJWSUNFX1JFU09MVkVSX0hfXworCisKKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vYWRkcmVzcy5oPgorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlICJnYS1jbGllbnQuaCIKKyNpbmNsdWRlICJnYS1lbnVtcy5oIgorCitHX0JFR0lOX0RFQ0xTCisKK3R5cGVkZWYgc3RydWN0IF9HYVNlcnZpY2VSZXNvbHZlciBHYVNlcnZpY2VSZXNvbHZlcjsKK3R5cGVkZWYgc3RydWN0IF9HYVNlcnZpY2VSZXNvbHZlckNsYXNzIEdhU2VydmljZVJlc29sdmVyQ2xhc3M7CisKK3N0cnVjdCBfR2FTZXJ2aWNlUmVzb2x2ZXJDbGFzcyB7CisgICAgR09iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK3N0cnVjdCBfR2FTZXJ2aWNlUmVzb2x2ZXIgeworICAgIEdPYmplY3QgcGFyZW50OworfTsKKworR1R5cGUgZ2Ffc2VydmljZV9yZXNvbHZlcl9nZXRfdHlwZSh2b2lkKTsKKworLyogVFlQRSBNQUNST1MgKi8KKyNkZWZpbmUgR0FfVFlQRV9TRVJWSUNFX1JFU09MVkVSIFwKKyAgKGdhX3NlcnZpY2VfcmVzb2x2ZXJfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgR0FfU0VSVklDRV9SRVNPTFZFUihvYmopIFwKKyAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBHQV9UWVBFX1NFUlZJQ0VfUkVTT0xWRVIsIEdhU2VydmljZVJlc29sdmVyKSkKKyNkZWZpbmUgR0FfU0VSVklDRV9SRVNPTFZFUl9DTEFTUyhrbGFzcykgXAorICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgR0FfVFlQRV9TRVJWSUNFX1JFU09MVkVSLCBHYVNlcnZpY2VSZXNvbHZlckNsYXNzKSkKKyNkZWZpbmUgSVNfR0FfU0VSVklDRV9SRVNPTFZFUihvYmopIFwKKyAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBHQV9UWVBFX1NFUlZJQ0VfUkVTT0xWRVIpKQorI2RlZmluZSBJU19HQV9TRVJWSUNFX1JFU09MVkVSX0NMQVNTKGtsYXNzKSBcCisgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCBHQV9UWVBFX1NFUlZJQ0VfUkVTT0xWRVIpKQorI2RlZmluZSBHQV9TRVJWSUNFX1JFU09MVkVSX0dFVF9DTEFTUyhvYmopIFwKKyAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBHQV9UWVBFX1NFUlZJQ0VfUkVTT0xWRVIsIEdhU2VydmljZVJlc29sdmVyQ2xhc3MpKQorCitHYVNlcnZpY2VSZXNvbHZlciAqZ2Ffc2VydmljZV9yZXNvbHZlcl9uZXcoQXZhaGlJZkluZGV4IGludGVyZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdmFoaVByb3RvY29sIHByb3RvY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKiBkb21haW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXZhaGlQcm90b2NvbCBhZGRyZXNzX3Byb3RvY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdhTG9va3VwRmxhZ3MgZmxhZ3MpOworCitnYm9vbGVhbgorZ2Ffc2VydmljZV9yZXNvbHZlcl9hdHRhY2goR2FTZXJ2aWNlUmVzb2x2ZXIgKiByZXNvbHZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdhQ2xpZW50ICogY2xpZW50LCBHRXJyb3IgKiogZXJyb3IpOworCitnYm9vbGVhbgorZ2Ffc2VydmljZV9yZXNvbHZlcl9nZXRfYWRkcmVzcyhHYVNlcnZpY2VSZXNvbHZlciAqIHJlc29sdmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdmFoaUFkZHJlc3MgKiBhZGRyZXNzLCB1aW50MTZfdCAqIHBvcnQpOworR19FTkRfREVDTFMKKyNlbmRpZiAvKiAjaWZuZGVmIF9fR0FfU0VSVklDRV9SRVNPTFZFUl9IX18gKi8KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1weXRob24vTWFrZWZpbGUuYW0gYi9hdmFoaS0wLjYuMzEvYXZhaGktcHl0aG9uL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczODFhNDgKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktcHl0aG9uL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsNDIgQEAKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisjCisjIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisjIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisjIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisjIFVTQS4KKworQU1fQ0ZMQUdTPS1JJCh0b3Bfc3JjZGlyKQorCisjIFRoaXMgY29vbCBkZWJ1ZyB0cmFwIHdvcmtzIG9uIGkzODYvZ2NjIG9ubHkKK0FNX0NGTEFHUys9Jy1EREVCVUdfVFJBUD1fX2FzbV9fKCJpbnQgJCQzIiknCisKK0VYVFJBX0RJU1QgPSBcCisJYXZhaGktYm9va21hcmtzLmluCisKK1NVQkRJUlM9YXZhaGkgYXZhaGktZGlzY292ZXIKKworaWYgSEFWRV9QWVRIT04KK2lmIEhBVkVfUFlUSE9OX0RCVVMKKworcHl0aG9uc2NyaXB0cyA9IFwKKwlhdmFoaS1ib29rbWFya3MKKworYXZhaGktYm9va21hcmtzOiBhdmFoaS1ib29rbWFya3MuaW4KKwkkKEFNX1ZfR0VOKXNlZCAtZSAncyxAUFlUSE9OXEAsJChQWVRIT04pLGcnICQ8ID4gJEAgJiYgXAorCWNobW9kICt4ICRACisKK2Jpbl9TQ1JJUFRTID0gJChweXRob25zY3JpcHRzKQorQ0xFQU5GSUxFUyA9ICQocHl0aG9uc2NyaXB0cykKKworZW5kaWYKK2VuZGlmCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktcHl0aG9uL01ha2VmaWxlLmluIGIvYXZhaGktMC42LjMxL2F2YWhpLXB5dGhvbi9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDdmMTNiCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLXB5dGhvbi9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDgwNSBAQAorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xMS4zIGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorIworIyBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworIyBVU0EuCisKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK3N1YmRpciA9IGF2YWhpLXB5dGhvbgorRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vYWN4X3B0aHJlYWQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2djY19zdGFja19wcm90ZWN0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9nY2NfdmlzaWJpbGl0eS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vaW50bHRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2ludHJvc3BlY3Rpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2x0b3B0aW9ucy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHR2ZXJzaW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbmxzLm00ICQodG9wX3NyY2RpcikvY29tbW9uL3B5dGhvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9hY2luY2x1ZGUubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vZG94eWdlbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7CithbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAorICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCisgICAgKikgZj0kJHA7OyBcCisgIGVzYWM7CithbV9fc3RyaXBfZGlyID0gZj1gZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7CithbV9faW5zdGFsbF9tYXggPSA0MAorYW1fX25vYmFzZV9zdHJpcF9zZXR1cCA9IFwKKyAgc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYAorYW1fX25vYmFzZV9zdHJpcCA9IFwKKyAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkIC1lICJzfCQkc3JjZGlyc3RyaXAvfHwiCithbV9fbm9iYXNlX2xpc3QgPSAkKGFtX19ub2Jhc2Vfc3RyaXBfc2V0dXApOyBcCisgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCisgIHNlZCAic3wgJCRzcmNkaXJzdHJpcC98IHw7IicgLyAuKlwvLyFzLyAuKi8gLi87IHMsXCggLipcKS9bXi9dKiQkLFwxLCcgfCBcCisgICQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiIgfSB7IGZpbGVzWyQkMl0gPSBmaWxlc1skJDJdICIgIiAkJDE7IFwKKyAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCisgICAgICB7IHByaW50ICQkMiwgZmlsZXNbJCQyXTsgblskJDJdID0gMDsgZmlsZXNbJCQyXSA9ICIiIH0gfSBcCisgICAgRU5EIHsgZm9yIChkaXIgaW4gZmlsZXMpIHByaW50IGRpciwgZmlsZXNbZGlyXSB9JworYW1fX2Jhc2VfbGlzdCA9IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJyB8IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJworYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpciA9IHsgXAorICB0ZXN0IC16ICIkJGZpbGVzIiBcCisgICAgfHwgeyB0ZXN0ICEgLWQgIiQkZGlyIiAmJiB0ZXN0ICEgLWYgIiQkZGlyIiAmJiB0ZXN0ICEgLXIgIiQkZGlyIjsgfSBcCisgICAgfHwgeyBlY2hvICIgKCBjZCAnJCRkaXInICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAorICAgICAgICAgJChhbV9fY2QpICIkJGRpciIgJiYgcm0gLWYgJCRmaWxlczsgfTsgXAorICB9CithbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQoYmluZGlyKSIKK1NDUklQVFMgPSAkKGJpbl9TQ1JJUFRTKQorQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCithbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCithbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICIgJEA7CitBTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCithbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfYXRfMCA9IEAKK1NPVVJDRVMgPQorRElTVF9TT1VSQ0VTID0KK1JFQ1VSU0lWRV9UQVJHRVRTID0gYWxsLXJlY3Vyc2l2ZSBjaGVjay1yZWN1cnNpdmUgZHZpLXJlY3Vyc2l2ZSBcCisJaHRtbC1yZWN1cnNpdmUgaW5mby1yZWN1cnNpdmUgaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1kdmktcmVjdXJzaXZlIGluc3RhbGwtZXhlYy1yZWN1cnNpdmUgXAorCWluc3RhbGwtaHRtbC1yZWN1cnNpdmUgaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1wZGYtcmVjdXJzaXZlIGluc3RhbGwtcHMtcmVjdXJzaXZlIGluc3RhbGwtcmVjdXJzaXZlIFwKKwlpbnN0YWxsY2hlY2stcmVjdXJzaXZlIGluc3RhbGxkaXJzLXJlY3Vyc2l2ZSBwZGYtcmVjdXJzaXZlIFwKKwlwcy1yZWN1cnNpdmUgdW5pbnN0YWxsLXJlY3Vyc2l2ZQorUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMgPSBtb3N0bHljbGVhbi1yZWN1cnNpdmUgY2xlYW4tcmVjdXJzaXZlCVwKKyAgZGlzdGNsZWFuLXJlY3Vyc2l2ZSBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQorQU1fUkVDVVJTSVZFX1RBUkdFVFMgPSAkKFJFQ1VSU0lWRV9UQVJHRVRTOi1yZWN1cnNpdmU9KSBcCisJJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUzotcmVjdXJzaXZlPSkgdGFncyBUQUdTIGN0YWdzIENUQUdTIFwKKwlkaXN0ZGlyCitFVEFHUyA9IGV0YWdzCitDVEFHUyA9IGN0YWdzCitESVNUX1NVQkRJUlMgPSAkKFNVQkRJUlMpCitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorYW1fX3JlbGF0aXZpemUgPSBcCisgIGRpcjA9YHB3ZGA7IFwKKyAgc2VkX2ZpcnN0PSdzLF5cKFteL10qXCkvLiokJCxcMSwnOyBcCisgIHNlZF9yZXN0PSdzLF5bXi9dKi8qLCwnOyBcCisgIHNlZF9sYXN0PSdzLF4uKi9cKFteL10qXCkkJCxcMSwnOyBcCisgIHNlZF9idXRsYXN0PSdzLC8qW14vXSokJCwsJzsgXAorICB3aGlsZSB0ZXN0IC1uICIkJGRpcjEiOyBkbyBcCisgICAgZmlyc3Q9YGVjaG8gIiQkZGlyMSIgfCBzZWQgLWUgIiQkc2VkX2ZpcnN0ImA7IFwKKyAgICBpZiB0ZXN0ICIkJGZpcnN0IiAhPSAiLiI7IHRoZW4gXAorICAgICAgaWYgdGVzdCAiJCRmaXJzdCIgPSAiLi4iOyB0aGVuIFwKKyAgICAgICAgZGlyMj1gZWNobyAiJCRkaXIwIiB8IHNlZCAtZSAiJCRzZWRfbGFzdCJgLyIkJGRpcjIiOyBcCisgICAgICAgIGRpcjA9YGVjaG8gIiQkZGlyMCIgfCBzZWQgLWUgIiQkc2VkX2J1dGxhc3QiYDsgXAorICAgICAgZWxzZSBcCisgICAgICAgIGZpcnN0Mj1gZWNobyAiJCRkaXIyIiB8IHNlZCAtZSAiJCRzZWRfZmlyc3QiYDsgXAorICAgICAgICBpZiB0ZXN0ICIkJGZpcnN0MiIgPSAiJCRmaXJzdCI7IHRoZW4gXAorICAgICAgICAgIGRpcjI9YGVjaG8gIiQkZGlyMiIgfCBzZWQgLWUgIiQkc2VkX3Jlc3QiYDsgXAorICAgICAgICBlbHNlIFwKKyAgICAgICAgICBkaXIyPSIuLi8kJGRpcjIiOyBcCisgICAgICAgIGZpOyBcCisgICAgICAgIGRpcjA9IiQkZGlyMCIvIiQkZmlyc3QiOyBcCisgICAgICBmaTsgXAorICAgIGZpOyBcCisgICAgZGlyMT1gZWNobyAiJCRkaXIxIiB8IHNlZCAtZSAiJCRzZWRfcmVzdCJgOyBcCisgIGRvbmU7IFwKKyAgcmVsZGlyPSIkJGRpcjIiCitBQ0xPQ0FMID0gQEFDTE9DQUxACitBTExfTElOR1VBUyA9IEBBTExfTElOR1VBU0AKK0FNVEFSID0gQEFNVEFSQAorQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACitBUiA9IEBBUkAKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBVkFISV9BVVRPSVBEX0dST1VQID0gQEFWQUhJX0FVVE9JUERfR1JPVVBACitBVkFISV9BVVRPSVBEX1VTRVIgPSBAQVZBSElfQVVUT0lQRF9VU0VSQAorQVZBSElfR1JPVVAgPSBAQVZBSElfR1JPVVBACitBVkFISV9QUklWX0FDQ0VTU19HUk9VUCA9IEBBVkFISV9QUklWX0FDQ0VTU19HUk9VUEAKK0FWQUhJX1VTRVIgPSBAQVZBSElfVVNFUkAKK0FXSyA9IEBBV0tACitDQVRBTE9HUyA9IEBDQVRBTE9HU0AKK0NBVE9CSkVYVCA9IEBDQVRPQkpFWFRACitDQyA9IEBDQ0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1hYID0gQENYWEAKK0NYWENQUCA9IEBDWFhDUFBACitDWFhERVBNT0RFID0gQENYWERFUE1PREVACitDWFhGTEFHUyA9IEBDWFhGTEFHU0AKK0NZR1BBVEhfVyA9IEBDWUdQQVRIX1dACitEQVRBRElSTkFNRSA9IEBEQVRBRElSTkFNRUAKK0RCVVNfQ0ZMQUdTID0gQERCVVNfQ0ZMQUdTQAorREJVU19MSUJTID0gQERCVVNfTElCU0AKK0RCVVNfU1lTVEVNX0JVU19ERUZBVUxUX0FERFJFU1MgPSBAREJVU19TWVNURU1fQlVTX0RFRkFVTFRfQUREUkVTU0AKK0RCVVNfU1lTX0RJUiA9IEBEQlVTX1NZU19ESVJACitERUZTID0gQERFRlNACitERVBESVIgPSBAREVQRElSQAorRExMVE9PTCA9IEBETExUT09MQAorRE9YWUdFTl9QQVBFUl9TSVpFID0gQERPWFlHRU5fUEFQRVJfU0laRUAKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRFhfQ09ORklHID0gQERYX0NPTkZJR0AKK0RYX0RPQ0RJUiA9IEBEWF9ET0NESVJACitEWF9ET1QgPSBARFhfRE9UQAorRFhfRE9YWUdFTiA9IEBEWF9ET1hZR0VOQAorRFhfRFZJUFMgPSBARFhfRFZJUFNACitEWF9FR1JFUCA9IEBEWF9FR1JFUEAKK0RYX0VOViA9IEBEWF9FTlZACitEWF9GTEFHX2NoaSA9IEBEWF9GTEFHX2NoaUAKK0RYX0ZMQUdfY2htID0gQERYX0ZMQUdfY2htQAorRFhfRkxBR19kb2MgPSBARFhfRkxBR19kb2NACitEWF9GTEFHX2RvdCA9IEBEWF9GTEFHX2RvdEAKK0RYX0ZMQUdfaHRtbCA9IEBEWF9GTEFHX2h0bWxACitEWF9GTEFHX21hbiA9IEBEWF9GTEFHX21hbkAKK0RYX0ZMQUdfcGRmID0gQERYX0ZMQUdfcGRmQAorRFhfRkxBR19wcyA9IEBEWF9GTEFHX3BzQAorRFhfRkxBR19ydGYgPSBARFhfRkxBR19ydGZACitEWF9GTEFHX3htbCA9IEBEWF9GTEFHX3htbEAKK0RYX0hIQyA9IEBEWF9ISENACitEWF9MQVRFWCA9IEBEWF9MQVRFWEAKK0RYX01BS0VJTkRFWCA9IEBEWF9NQUtFSU5ERVhACitEWF9QREZMQVRFWCA9IEBEWF9QREZMQVRFWEAKK0RYX1BFUkwgPSBARFhfUEVSTEAKK0RYX1BST0pFQ1QgPSBARFhfUFJPSkVDVEAKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRVhFRVhUID0gQEVYRUVYVEAKK0ZHUkVQID0gQEZHUkVQQAorR0FDVVRJTCA9IEBHQUNVVElMQAorR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKK0dMSUIyMF9DRkxBR1MgPSBAR0xJQjIwX0NGTEFHU0AKK0dMSUIyMF9MSUJTID0gQEdMSUIyMF9MSUJTQAorR01PRklMRVMgPSBAR01PRklMRVNACitHTVNHRk1UID0gQEdNU0dGTVRACitHT0JKRUNUX0NGTEFHUyA9IEBHT0JKRUNUX0NGTEFHU0AKK0dPQkpFQ1RfTElCUyA9IEBHT0JKRUNUX0xJQlNACitHUkVQID0gQEdSRVBACitHVEsyMF9DRkxBR1MgPSBAR1RLMjBfQ0ZMQUdTQAorR1RLMjBfTElCUyA9IEBHVEsyMF9MSUJTQAorR1RLMzBfQ0ZMQUdTID0gQEdUSzMwX0NGTEFHU0AKK0dUSzMwX0xJQlMgPSBAR1RLMzBfTElCU0AKK0hPV0xfQ09NUEFUX1ZFUlNJT04gPSBASE9XTF9DT01QQVRfVkVSU0lPTkAKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSU5TVE9CSkVYVCA9IEBJTlNUT0JKRVhUQAorSU5UTExJQlMgPSBASU5UTExJQlNACitJTlRMVE9PTF9FWFRSQUNUID0gQElOVExUT09MX0VYVFJBQ1RACitJTlRMVE9PTF9NRVJHRSA9IEBJTlRMVE9PTF9NRVJHRUAKK0lOVExUT09MX1BFUkwgPSBASU5UTFRPT0xfUEVSTEAKK0lOVExUT09MX1VQREFURSA9IEBJTlRMVE9PTF9VUERBVEVACitJTlRST1NQRUNUSU9OX0NGTEFHUyA9IEBJTlRST1NQRUNUSU9OX0NGTEFHU0AKK0lOVFJPU1BFQ1RJT05fQ09NUElMRVIgPSBASU5UUk9TUEVDVElPTl9DT01QSUxFUkAKK0lOVFJPU1BFQ1RJT05fR0VORVJBVEUgPSBASU5UUk9TUEVDVElPTl9HRU5FUkFURUAKK0lOVFJPU1BFQ1RJT05fR0lSRElSID0gQElOVFJPU1BFQ1RJT05fR0lSRElSQAorSU5UUk9TUEVDVElPTl9MSUJTID0gQElOVFJPU1BFQ1RJT05fTElCU0AKK0lOVFJPU1BFQ1RJT05fTUFLRUZJTEUgPSBASU5UUk9TUEVDVElPTl9NQUtFRklMRUAKK0lOVFJPU1BFQ1RJT05fU0NBTk5FUiA9IEBJTlRST1NQRUNUSU9OX1NDQU5ORVJACitJTlRST1NQRUNUSU9OX1RZUEVMSUJESVIgPSBASU5UUk9TUEVDVElPTl9UWVBFTElCRElSQAorTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMSUJBVkFISV9DTElFTlRfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NMSUVOVF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9DT01NT05fVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NPTU1PTl9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9DT01QQVRfSE9XTF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ09NUEFUX0hPV0xfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfQ09NUEFUX0xJQkROU19TRF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ09NUEFUX0xJQkROU19TRF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9DT1JFX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DT1JFX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0dMSUJfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0dMSUJfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfR09CSkVDVF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfR09CSkVDVF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9RVDNfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX1FUM19WRVJTSU9OX0lORk9ACitMSUJBVkFISV9RVDRfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX1FUNF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9VSV9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfVUlfVkVSU0lPTl9JTkZPQAorTElCREFFTU9OX0NGTEFHUyA9IEBMSUJEQUVNT05fQ0ZMQUdTQAorTElCREFFTU9OX0xJQlMgPSBATElCREFFTU9OX0xJQlNACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQExJQlNACitMSUJUT09MID0gQExJQlRPT0xACitMSVBPID0gQExJUE9ACitMTl9TID0gQExOX1NACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACitNQ1MgPSBATUNTQAorTURBU1NFTUJMRVIgPSBATURBU1NFTUJMRVJACitNS0RJUl9QID0gQE1LRElSX1BACitNS0lOU1RBTExESVJTID0gQE1LSU5TVEFMTERJUlNACitNT0NfUVQzID0gQE1PQ19RVDNACitNT0NfUVQ0ID0gQE1PQ19RVDRACitNT05PRE9DRVIgPSBATU9OT0RPQ0VSQAorTU9OT0RPQ19DRkxBR1MgPSBATU9OT0RPQ19DRkxBR1NACitNT05PRE9DX0RJUiA9IEBNT05PRE9DX0RJUkAKK01PTk9ET0NfTElCUyA9IEBNT05PRE9DX0xJQlNACitNU0dGTVQgPSBATVNHRk1UQAorTVNHRk1UX09QVFMgPSBATVNHRk1UX09QVFNACitNU0dNRVJHRSA9IEBNU0dNRVJHRUAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPVE9PTCA9IEBPVE9PTEAKK09UT09MNjQgPSBAT1RPT0w2NEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAorUEtHX0NPTkZJR19MSUJESVIgPSBAUEtHX0NPTkZJR19MSUJESVJACitQS0dfQ09ORklHX1BBVEggPSBAUEtHX0NPTkZJR19QQVRIQAorUE9GSUxFUyA9IEBQT0ZJTEVTQAorUE9TVUIgPSBAUE9TVUJACitQT19JTl9EQVRBRElSX0ZBTFNFID0gQFBPX0lOX0RBVEFESVJfRkFMU0VACitQT19JTl9EQVRBRElSX1RSVUUgPSBAUE9fSU5fREFUQURJUl9UUlVFQAorUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAorUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACitQVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAorUFlUSE9OID0gQFBZVEhPTkAKK1BZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACitQWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAorUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAorUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACitRVDNfQ0ZMQUdTID0gQFFUM19DRkxBR1NACitRVDNfTElCUyA9IEBRVDNfTElCU0AKK1FUNF9DRkxBR1MgPSBAUVQ0X0NGTEFHU0AKK1FUNF9MSUJTID0gQFFUNF9MSUJTQAorUkFOTElCID0gQFJBTkxJQkAKK1NFRCA9IEBTRURACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU1RPVyA9IEBTVE9XQAorU1RSSVAgPSBAU1RSSVBACitVU0VfTkxTID0gQFVTRV9OTFNACitWRVJTSU9OID0gQFZFUlNJT05ACitWSVNJQklMSVRZX0hJRERFTl9DRkxBR1MgPSBAVklTSUJJTElUWV9ISURERU5fQ0ZMQUdTQAorWEdFVFRFWFQgPSBAWEdFVFRFWFRACitYTUxfQ0ZMQUdTID0gQFhNTF9DRkxBR1NACitYTUxfTElCUyA9IEBYTUxfTElCU0AKK2Fic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACithYnNfc3JjZGlyID0gQGFic19zcmNkaXJACithYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACithYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKK2FjX2N0X0FSID0gQGFjX2N0X0FSQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9DWFggPSBAYWNfY3RfQ1hYQAorYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAorYWN4X3B0aHJlYWRfY29uZmlnID0gQGFjeF9wdGhyZWFkX2NvbmZpZ0AKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYXZhaGlfcnVudGltZV9kaXIgPSBAYXZhaGlfcnVudGltZV9kaXJACithdmFoaV9zb2NrZXQgPSBAYXZhaGlfc29ja2V0QAorYXZhaGlsb2NhbGVkaXIgPSBAYXZhaGlsb2NhbGVkaXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitidWlsZGRpciA9IEBidWlsZGRpckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZG9jZGlyID0gQGRvY2RpckAKK2R2aWRpciA9IEBkdmlkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2hhdmVfcGtnX2NvbmZpZyA9IEBoYXZlX3BrZ19jb25maWdACitoYXZlX3htbHRvbWFuID0gQGhhdmVfeG1sdG9tYW5ACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAoraW50ZXJmYWNlc2RpciA9IEBpbnRlcmZhY2VzZGlyQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3BrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACitwa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3BzZGlyID0gQHBzZGlyQAorcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKK3B5dGhvbmRpciA9IEBweXRob25kaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACitzeXN0ZW1kc3lzdGVtdW5pdGRpciA9IEBzeXN0ZW1kc3lzdGVtdW5pdGRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorCisjIFRoaXMgY29vbCBkZWJ1ZyB0cmFwIHdvcmtzIG9uIGkzODYvZ2NjIG9ubHkKK0FNX0NGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKSAnLURERUJVR19UUkFQPV9fYXNtX18oImludCAkJDMiKScKK0VYVFJBX0RJU1QgPSBcCisJYXZhaGktYm9va21hcmtzLmluCisKK1NVQkRJUlMgPSBhdmFoaSBhdmFoaS1kaXNjb3ZlcgorQEhBVkVfUFlUSE9OX0RCVVNfVFJVRUBASEFWRV9QWVRIT05fVFJVRUBweXRob25zY3JpcHRzID0gXAorQEhBVkVfUFlUSE9OX0RCVVNfVFJVRUBASEFWRV9QWVRIT05fVFJVRUAJYXZhaGktYm9va21hcmtzCisKK0BIQVZFX1BZVEhPTl9EQlVTX1RSVUVAQEhBVkVfUFlUSE9OX1RSVUVAYmluX1NDUklQVFMgPSAkKHB5dGhvbnNjcmlwdHMpCitASEFWRV9QWVRIT05fREJVU19UUlVFQEBIQVZFX1BZVEhPTl9UUlVFQENMRUFORklMRVMgPSAkKHB5dGhvbnNjcmlwdHMpCithbGw6IGFsbC1yZWN1cnNpdmUKKworLlNVRkZJWEVTOgorJChzcmNkaXIpL01ha2VmaWxlLmluOiAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gYXZhaGktcHl0aG9uL01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiBhdmFoaS1weXRob24vTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6ICAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6ICAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKGFtX19hY2xvY2FsX200X2RlcHMpOgoraW5zdGFsbC1iaW5TQ1JJUFRTOiAkKGJpbl9TQ1JJUFRTKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQoYmluZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQoYmluZGlyKSIKKwlAbGlzdD0nJChiaW5fU0NSSVBUUyknOyB0ZXN0IC1uICIkKGJpbmRpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAorCSAgaWYgdGVzdCAtZiAiJCRkJCRwIjsgdGhlbiBlY2hvICIkJGQkJHAiOyBlY2hvICIkJHAiOyBlbHNlIDo7IGZpOyBcCisJZG9uZSB8IFwKKwlzZWQgLWUgJ3A7cywuKi8sLDtuJyBcCisJICAgIC1lICdoO3N8Lip8LnwnIFwKKwkgICAgLWUgJ3A7eDtzLC4qLywsOyQodHJhbnNmb3JtKScgfCBzZWQgJ047TjtOO3MsXG4sICxnJyB8IFwKKwkkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiOyBkaXJzWyIuIl0gPSAxOyB9IFwKKwkgIHsgZD0kJDM7IGlmIChkaXJzW2RdICE9IDEpIHsgcHJpbnQgImQiLCBkOyBkaXJzW2RdID0gMSB9IFwKKwkgICAgaWYgKCQkMiA9PSAkJDQpIHsgZmlsZXNbZF0gPSBmaWxlc1tkXSAiICIgJCQxOyBcCisJICAgICAgaWYgKCsrbltkXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIHsgXAorCQlwcmludCAiZiIsIGQsIGZpbGVzW2RdOyBuW2RdID0gMDsgZmlsZXNbZF0gPSAiIiB9IH0gXAorCSAgICBlbHNlIHsgcHJpbnQgImYiLCBkICIvIiAkJDQsICQkMSB9IH0gXAorCSAgRU5EIHsgZm9yIChkIGluIGZpbGVzKSBwcmludCAiZiIsIGQsIGZpbGVzW2RdIH0nIHwgXAorCXdoaWxlIHJlYWQgdHlwZSBkaXIgZmlsZXM7IGRvIFwKKwkgICAgIGlmIHRlc3QgIiQkZGlyIiA9IC47IHRoZW4gZGlyPTsgZWxzZSBkaXI9LyQkZGlyOyBmaTsgXAorCSAgICAgdGVzdCAteiAiJCRmaWxlcyIgfHwgeyBcCisJICAgICAgIGVjaG8gIiAkKElOU1RBTExfU0NSSVBUKSAkJGZpbGVzICckKERFU1RESVIpJChiaW5kaXIpJCRkaXInIjsgXAorCSAgICAgICAkKElOU1RBTExfU0NSSVBUKSAkJGZpbGVzICIkKERFU1RESVIpJChiaW5kaXIpJCRkaXIiIHx8IGV4aXQgJCQ/OyBcCisJICAgICB9IFwKKwk7IGRvbmUKKwordW5pbnN0YWxsLWJpblNDUklQVFM6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChiaW5fU0NSSVBUUyknOyB0ZXN0IC1uICIkKGJpbmRpcikiIHx8IGV4aXQgMDsgXAorCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBcCisJICAgICAgIHNlZCAtZSAncywuKi8sLDskKHRyYW5zZm9ybSknYDsgXAorCWRpcj0nJChERVNURElSKSQoYmluZGlyKSc7ICQoYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpcikKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKKworIyBUaGlzIGRpcmVjdG9yeSdzIHN1YmRpcmVjdG9yaWVzIGFyZSBtb3N0bHkgaW5kZXBlbmRlbnQ7IHlvdSBjYW4gY2QKKyMgaW50byB0aGVtIGFuZCBydW4gYG1ha2UnIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCB0aGlzIE1ha2VmaWxlLgorIyBUbyBjaGFuZ2UgdGhlIHZhbHVlcyBvZiBgbWFrZScgdmFyaWFibGVzOiBpbnN0ZWFkIG9mIGVkaXRpbmcgTWFrZWZpbGVzLAorIyAoMSkgaWYgdGhlIHZhcmlhYmxlIGlzIHNldCBpbiBgY29uZmlnLnN0YXR1cycsIGVkaXQgYGNvbmZpZy5zdGF0dXMnCisjICAgICAod2hpY2ggd2lsbCBjYXVzZSB0aGUgTWFrZWZpbGVzIHRvIGJlIHJlZ2VuZXJhdGVkIHdoZW4geW91IHJ1biBgbWFrZScpOworIyAoMikgb3RoZXJ3aXNlLCBwYXNzIHRoZSBkZXNpcmVkIHZhbHVlcyBvbiB0aGUgYG1ha2UnIGNvbW1hbmQgbGluZS4KKyQoUkVDVVJTSVZFX1RBUkdFVFMpOgorCUBmYWlsPSBmYWlsY29tPSdleGl0IDEnOyBcCisJZm9yIGYgaW4geCAkJE1BS0VGTEFHUzsgZG8gXAorCSAgY2FzZSAkJGYgaW4gXAorCSAgICAqPSogfCAtLVsha10qKTs7IFwKKwkgICAgKmsqKSBmYWlsY29tPSdmYWlsPXllcyc7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWRvdF9zZWVuPW5vOyBcCisJdGFyZ2V0PWBlY2hvICRAIHwgc2VkIHMvLXJlY3Vyc2l2ZS8vYDsgXAorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgZWNobyAiTWFraW5nICQkdGFyZ2V0IGluICQkc3ViZGlyIjsgXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIFwKKwkgICAgZG90X3NlZW49eWVzOyBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQtYW0iOyBcCisJICBlbHNlIFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKKwkgIGZpOyBcCisJICAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCisJICB8fCBldmFsICQkZmFpbGNvbTsgXAorCWRvbmU7IFwKKwlpZiB0ZXN0ICIkJGRvdF9zZWVuIiA9ICJubyI7IHRoZW4gXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgIiQkdGFyZ2V0LWFtIiB8fCBleGl0IDE7IFwKKwlmaTsgdGVzdCAteiAiJCRmYWlsIgorCiskKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTKToKKwlAZmFpbD0gZmFpbGNvbT0nZXhpdCAxJzsgXAorCWZvciBmIGluIHggJCRNQUtFRkxBR1M7IGRvIFwKKwkgIGNhc2UgJCRmIGluIFwKKwkgICAgKj0qIHwgLS1bIWtdKik7OyBcCisJICAgICprKikgZmFpbGNvbT0nZmFpbD15ZXMnOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwlkb3Rfc2Vlbj1ubzsgXAorCWNhc2UgIiRAIiBpbiBcCisJICBkaXN0Y2xlYW4tKiB8IG1haW50YWluZXItY2xlYW4tKikgbGlzdD0nJChESVNUX1NVQkRJUlMpJyA7OyBcCisJICAqKSBsaXN0PSckKFNVQkRJUlMpJyA7OyBcCisJZXNhYzsgXAorCXJldj0nJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgcmV2PSIkJHN1YmRpciAkJHJldiI7IFwKKwkgIGZpOyBcCisJZG9uZTsgXAorCXJldj0iJCRyZXYgLiI7IFwKKwl0YXJnZXQ9YGVjaG8gJEAgfCBzZWQgcy8tcmVjdXJzaXZlLy9gOyBcCisJZm9yIHN1YmRpciBpbiAkJHJldjsgZG8gXAorCSAgZWNobyAiTWFraW5nICQkdGFyZ2V0IGluICQkc3ViZGlyIjsgXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldC1hbSI7IFwKKwkgIGVsc2UgXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0IjsgXAorCSAgZmk7IFwKKwkgICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRsb2NhbF90YXJnZXQpIFwKKwkgIHx8IGV2YWwgJCRmYWlsY29tOyBcCisJZG9uZSAmJiB0ZXN0IC16ICIkJGZhaWwiCit0YWdzLXJlY3Vyc2l2ZToKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB0YWdzKTsgXAorCWRvbmUKK2N0YWdzLXJlY3Vyc2l2ZToKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBjdGFncyk7IFwKKwlkb25lCisKK0lEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJbWtpZCAtZklEICQkdW5pcXVlCit0YWdzOiBUQUdTCisKK1RBR1M6IHRhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlzZXQgeDsgXAorCWhlcmU9YHB3ZGA7IFwKKwlpZiAoJChFVEFHUykgLS1ldGFncy1pbmNsdWRlIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKKwkgIGluY2x1ZGVfb3B0aW9uPS0tZXRhZ3MtaW5jbHVkZTsgXAorCSAgZW1wdHlfZml4PS47IFwKKwllbHNlIFwKKwkgIGluY2x1ZGVfb3B0aW9uPS0taW5jbHVkZTsgXAorCSAgZW1wdHlfZml4PTsgXAorCWZpOyBcCisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAorCSAgICB0ZXN0ICEgLWYgJCRzdWJkaXIvVEFHUyB8fCBcCisJICAgICAgc2V0ICIkJEAiICIkJGluY2x1ZGVfb3B0aW9uPSQkaGVyZS8kJHN1YmRpci9UQUdTIjsgXAorCSAgZmk7IFwKKwlkb25lOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXNoaWZ0OyBcCisJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKwkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKKwkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCisJICBlbHNlIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICQkdW5pcXVlOyBcCisJICBmaTsgXAorCWZpCitjdGFnczogQ1RBR1MKK0NUQUdTOiBjdGFncy1yZWN1cnNpdmUgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKKwkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKKwkgICAgICQkdW5pcXVlCisKK0dUQUdTOgorCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCisJICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCisJICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCisKK2Rpc3RjbGVhbi10YWdzOgorCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgXAorCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKKwkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCisJICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAorCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKKwkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKKwkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKKwkJCSAgIHNvcnQgLXVgIDs7IFwKKwllc2FjOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorCUBsaXN0PSckKERJU1RfU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAorCSAgICB8fCAkKE1LRElSX1ApICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCisJQGxpc3Q9JyQoRElTVF9TVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAorCSAgICBkaXIxPSQkc3ViZGlyOyBkaXIyPSIkKGRpc3RkaXIpLyQkc3ViZGlyIjsgXAorCSAgICAkKGFtX19yZWxhdGl2aXplKTsgXAorCSAgICBuZXdfZGlzdGRpcj0kJHJlbGRpcjsgXAorCSAgICBkaXIxPSQkc3ViZGlyOyBkaXIyPSIkKHRvcF9kaXN0ZGlyKSI7IFwKKwkgICAgJChhbV9fcmVsYXRpdml6ZSk7IFwKKwkgICAgbmV3X3RvcF9kaXN0ZGlyPSQkcmVsZGlyOyBcCisJICAgIGVjaG8gIiAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgdG9wX2Rpc3RkaXI9IiQkbmV3X3RvcF9kaXN0ZGlyIiBkaXN0ZGlyPSIkJG5ld19kaXN0ZGlyIiBcXCI7IFwKKwkgICAgZWNobyAiICAgICBhbV9fcmVtb3ZlX2Rpc3RkaXI9OiBhbV9fc2tpcF9sZW5ndGhfY2hlY2s9OiBhbV9fc2tpcF9tb2RlX2ZpeD06IGRpc3RkaXIpIjsgXAorCSAgICAoJChhbV9fY2QpICQkc3ViZGlyICYmIFwKKwkgICAgICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBcCisJICAgICAgICB0b3BfZGlzdGRpcj0iJCRuZXdfdG9wX2Rpc3RkaXIiIFwKKwkgICAgICAgIGRpc3RkaXI9IiQkbmV3X2Rpc3RkaXIiIFwKKwkJYW1fX3JlbW92ZV9kaXN0ZGlyPTogXAorCQlhbV9fc2tpcF9sZW5ndGhfY2hlY2s9OiBcCisJCWFtX19za2lwX21vZGVfZml4PTogXAorCSAgICAgICAgZGlzdGRpcikgXAorCSAgICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stcmVjdXJzaXZlCithbGwtYW06IE1ha2VmaWxlICQoU0NSSVBUUykKK2luc3RhbGxkaXJzOiBpbnN0YWxsZGlycy1yZWN1cnNpdmUKK2luc3RhbGxkaXJzLWFtOgorCWZvciBkaXIgaW4gIiQoREVTVERJUikkKGJpbmRpcikiOyBkbyBcCisJICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCisJZG9uZQoraW5zdGFsbDogaW5zdGFsbC1yZWN1cnNpdmUKK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtcmVjdXJzaXZlCit1bmluc3RhbGw6IHVuaW5zdGFsbC1yZWN1cnNpdmUKKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stcmVjdXJzaXZlCitpbnN0YWxsLXN0cmlwOgorCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgICAgICBpbnN0YWxsOyBcCisJZWxzZSBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKKwlmaQorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDTEVBTkZJTEVTKSIgfHwgcm0gLWYgJChDTEVBTkZJTEVTKQorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tcmVjdXJzaXZlCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tcmVjdXJzaXZlCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi10YWdzCisKK2R2aTogZHZpLXJlY3Vyc2l2ZQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtcmVjdXJzaXZlCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tcmVjdXJzaXZlCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbToKKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLXJlY3Vyc2l2ZQorCitpbnN0YWxsLWR2aS1hbToKKworaW5zdGFsbC1leGVjLWFtOiBpbnN0YWxsLWJpblNDUklQVFMKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtcmVjdXJzaXZlCisKK2luc3RhbGwtaHRtbC1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tcmVjdXJzaXZlCisKK2luc3RhbGwtaW5mby1hbToKKworaW5zdGFsbC1tYW46CisKK2luc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1yZWN1cnNpdmUKKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtcmVjdXJzaXZlCisKK2luc3RhbGwtcHMtYW06CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUKKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLXJlY3Vyc2l2ZQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLXJlY3Vyc2l2ZQorCitwZGYtYW06CisKK3BzOiBwcy1yZWN1cnNpdmUKKworcHMtYW06CisKK3VuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWJpblNDUklQVFMKKworLk1BS0U6ICQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpICQoUkVDVVJTSVZFX1RBUkdFVFMpIGN0YWdzLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwIHRhZ3MtcmVjdXJzaXZlCisKKy5QSE9OWTogJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUykgJChSRUNVUlNJVkVfVEFSR0VUUykgQ1RBR1MgR1RBR1MgXAorCWFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIFwKKwljdGFncyBjdGFncy1yZWN1cnNpdmUgZGlzdGNsZWFuIGRpc3RjbGVhbi1nZW5lcmljIFwKKwlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCisJaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtYmluU0NSSVBUUyBcCisJaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBcCisJaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIFwKKwlpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIFwKKwlpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBcCisJaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBpbnN0YWxsZGlycy1hbSBcCisJbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAorCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKKwl0YWdzIHRhZ3MtcmVjdXJzaXZlIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gXAorCXVuaW5zdGFsbC1iaW5TQ1JJUFRTCisKKworQEhBVkVfUFlUSE9OX0RCVVNfVFJVRUBASEFWRV9QWVRIT05fVFJVRUBhdmFoaS1ib29rbWFya3M6IGF2YWhpLWJvb2ttYXJrcy5pbgorQEhBVkVfUFlUSE9OX0RCVVNfVFJVRUBASEFWRV9QWVRIT05fVFJVRUAJJChBTV9WX0dFTilzZWQgLWUgJ3MsQFBZVEhPTlxALCQoUFlUSE9OKSxnJyAkPCA+ICRAICYmIFwKK0BIQVZFX1BZVEhPTl9EQlVTX1RSVUVAQEhBVkVfUFlUSE9OX1RSVUVACWNobW9kICt4ICRACisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1weXRob24vYXZhaGktYm9va21hcmtzLmluIGIvYXZhaGktMC42LjMxL2F2YWhpLXB5dGhvbi9hdmFoaS1ib29rbWFya3MuaW4KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGVhN2JlZgotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1weXRob24vYXZhaGktYm9va21hcmtzLmluCkBAIC0wLDAgKzEsMjI3IEBACisjIUBQWVRIT05ACisjIC0qLXB5dGhvbi0qLQorIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKyMKKyMgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyMgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyMgVVNBLgorCitpbXBvcnQgc3lzLCBnZXRvcHQsIG9zCisKK3RyeToKKyAgICBpbXBvcnQgYXZhaGksIGdvYmplY3QsIGRidXMKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBwcmludCAiU29ycnksIHRvIHVzZSB0aGlzIHRvb2wgeW91IG5lZWQgdG8gaW5zdGFsbCBBdmFoaSBhbmQgcHl0aG9uLWRidXMuIgorICAgIHN5cy5leGl0KDEpCisKK3RyeToKKyAgICBpbXBvcnQgZGJ1cy5nbGliCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcGFzcworCit1cmxwcm90byA9IHsgIl9odHRwLl90Y3AiIDogImh0dHAiLCAgIl9odHRwcy5fdGNwIiA6ICJodHRwcyIsICJfZnRwLl90Y3AiIDogImZ0cCIgfQorCitwb3J0ID0gODA4MAorYWRkcmVzcyA9ICIxMjcuMC4wLjEiCit1c2VfaG9zdF9uYW1lcyA9IE5vbmUKK3VzZV9DR0kgPSBOb25lCitkb21haW4gPSAibG9jYWwiCit0aW1lb3V0ID0gMzAwMAorCitjbGFzcyBBdmFoaUJvb2ttYXJrczoKKyAgICBzZXJ2aWNlcyA9IHt9CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdXNlX2hvc3RfbmFtZXMpOgorCisgICAgICAgIHNlbGYuYnVzID0gZGJ1cy5TeXN0ZW1CdXMoKQorICAgICAgICBzZWxmLnNlcnZlciA9IGRidXMuSW50ZXJmYWNlKHNlbGYuYnVzLmdldF9vYmplY3QoYXZhaGkuREJVU19OQU1FLCBhdmFoaS5EQlVTX1BBVEhfU0VSVkVSKSwgYXZhaGkuREJVU19JTlRFUkZBQ0VfU0VSVkVSKQorCisgICAgICAgIHNlbGYudmVyc2lvbl9zdHJpbmcgPSBzZWxmLnNlcnZlci5HZXRWZXJzaW9uU3RyaW5nKCkKKworICAgICAgICBzZWxmLmJyb3dzZV9zZXJ2aWNlX3R5cGUoIl9odHRwLl90Y3AiKQorICAgICAgICBzZWxmLmJyb3dzZV9zZXJ2aWNlX3R5cGUoIl9odHRwcy5fdGNwIikKKyAgICAgICAgc2VsZi5icm93c2Vfc2VydmljZV90eXBlKCJfZnRwLl90Y3AiKQorCisgICAgICAgIGlmIHVzZV9ob3N0X25hbWVzIGlzIE5vbmU6CisgICAgICAgICAgICB0cnk6IAorICAgICAgICAgICAgICAgIHNlbGYudXNlX2hvc3RfbmFtZXMgPSBzZWxmLnNlcnZlci5Jc05TU1N1cHBvcnRBdmFpbGFibGUoKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHNlbGYudXNlX2hvc3RfbmFtZXMgPSBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi51c2VfaG9zdF9uYW1lcyA9IHVzZV9ob3N0X25hbWVzCisKKyAgICBkZWYgYnJvd3NlX3NlcnZpY2VfdHlwZShzZWxmLCBzdHlwZSk6CisKKyAgICAgICAgZ2xvYmFsIGRvbWFpbiwgdXNlX0NHSQorCisgICAgICAgIGJyb3dzZXIgPSBkYnVzLkludGVyZmFjZShzZWxmLmJ1cy5nZXRfb2JqZWN0KGF2YWhpLkRCVVNfTkFNRSwgc2VsZi5zZXJ2ZXIuU2VydmljZUJyb3dzZXJOZXcoYXZhaGkuSUZfVU5TUEVDLCBhdmFoaS5QUk9UT19VTlNQRUMsIHN0eXBlLCBkb21haW4sIGRidXMuVUludDMyKDApKSksIGF2YWhpLkRCVVNfSU5URVJGQUNFX1NFUlZJQ0VfQlJPV1NFUikKKyAgICAgICAgYnJvd3Nlci5jb25uZWN0X3RvX3NpZ25hbCgnSXRlbU5ldycsIHNlbGYubmV3X3NlcnZpY2UpCisgICAgICAgIGJyb3dzZXIuY29ubmVjdF90b19zaWduYWwoJ0l0ZW1SZW1vdmUnLCBzZWxmLnJlbW92ZV9zZXJ2aWNlKQorICAgICAgICBpZiB1c2VfQ0dJOgorICAgICAgICAgICAgYnJvd3Nlci5jb25uZWN0X3RvX3NpZ25hbCgnQWxsRm9yTm93Jywgc2VsZi5hbGxfZm9yX25vdykKKworICAgIGRlZiBmaW5kX3BhdGgoc2VsZiwgdHh0KToKKworICAgICAgICBsID0gYXZhaGkudHh0X2FycmF5X3RvX3N0cmluZ19hcnJheSh0eHQpCisKKyAgICAgICAgZm9yIGsgaW4gbDoKKyAgICAgICAgICAgIGlmIGtbOjVdID09ICJwYXRoPSI6CisgICAgICAgICAgICAgICAgaWYga1s1Ol0uc3RhcnRzd2l0aCgiLyIpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4ga1s1Ol0KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gIi8iICsga1s1Ol0KKworICAgICAgICByZXR1cm4gIi8iCisKKyAgICBkZWYgcmVuZGVyX2h0bWwoc2VsZik6CisKKyAgICAgICAgZ2xvYmFsIGRvbWFpbgorCisgICAgICAgIHQgPSAnPGh0bWw+PGhlYWQ+PHRpdGxlPiVzIFplcm9jb25mIEJvb2ttYXJrczwvdGl0bGU+PC9oZWFkPjxib2R5PjxoMT4lcyBaZXJvY29uZiBCb29rbWFya3M8L2gxPicgJSAoZG9tYWluLCBkb21haW4pCisKKyAgICAgICAgaWYgbGVuKHNlbGYuc2VydmljZXMpID09IDA6CisgICAgICAgICAgICB0ICs9ICc8cD5Tb3JyeSwgbm8gWmVyb2NvbmYgd2ViIHNlcnZpY2VzIGhhdmUgYmVlbiByZWdpc3RlcmVkIG9uIHRoZSAlcyBkb21haW4uPC9wPicgJSBkb21haW4KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHQgKz0gJzx1bCBzdHlsZT0icGFkZGluZzogMHB4OyBtYXJnaW46IDIwcHg7IGxpc3Qtc3R5bGUtdHlwZTogbm9uZSI+JworCisgICAgICAgICAgICBmb3IgaywgdiBpbiBzZWxmLnNlcnZpY2VzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgdlszXSA9PSA4MDoKKyAgICAgICAgICAgICAgICAgICAgcG9ydCA9ICcnCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcG9ydCA9ICc6JWknICUgdlszXQorCisgICAgICAgICAgICAgICAgcGF0aCA9IHNlbGYuZmluZF9wYXRoKHZbNF0pCisgICAgICAgICAgICAgICAgdCArPSAnPGxpPjxhIGhyZWY9IiVzOi8vJXMlcyVzIj4lczwvYT48L2xpPicgJSAodXJscHJvdG9ba1szXV0sIHZbMl0sIHBvcnQsIHBhdGgsIGtbMl0pCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICB0ICs9ICc8L3VsPicKKyAgICAgICAgCisgICAgICAgIHQgKz0gJzxociBub3NoYWRlLz48cCBzdHlsZT0iZm9udC1zaXplOiA4OyBmb250LWZhbWlseTogc2Fucy1zZXJpZiI+U2VydmVkIGJ5ICVzPC9wPjwvYm9keT48L2h0bWw+JyAlIHNlbGYudmVyc2lvbl9zdHJpbmcKKworICAgICAgICByZXR1cm4gc3RyKHQpCisKKworICAgIGRlZiBuZXdfc2VydmljZShzZWxmLCBpbnRlcmZhY2UsIHByb3RvY29sLCBuYW1lLCB0eXBlLCBkb21haW4sIGZsYWdzKToKKworICAgICAgICBpbnRlcmZhY2UsIHByb3RvY29sLCBuYW1lLCB0eXBlLCBkb21haW4sIGhvc3QsIGFwcm90b2NvbCwgYWRkcmVzcywgcG9ydCwgdHh0LCBmbGFncyA9IHNlbGYuc2VydmVyLlJlc29sdmVTZXJ2aWNlKGludGVyZmFjZSwgcHJvdG9jb2wsIG5hbWUsIHR5cGUsIGRvbWFpbiwgYXZhaGkuUFJPVE9fVU5TUEVDLCBkYnVzLlVJbnQzMigwKSkKKworICAgICAgICBpZiBzZWxmLnVzZV9ob3N0X25hbWVzOgorICAgICAgICAgICAgaCA9IGhvc3QKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGFwcm90b2NvbCA9PSBhdmFoaS5QUk9UT19JTkVUNjoKKyAgICAgICAgICAgICAgICBoID0gIlsiICsgYWRkcmVzcyArICJdIgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBoID0gYWRkcmVzcworCisgICAgICAgIHNlbGYuc2VydmljZXNbKGludGVyZmFjZSwgcHJvdG9jb2wsIG5hbWUsIHR5cGUsIGRvbWFpbildID0gKGhvc3QsIGFwcm90b2NvbCwgaCwgcG9ydCwgdHh0KQorCisgICAgZGVmIHJlbW92ZV9zZXJ2aWNlKHNlbGYsIGludGVyZmFjZSwgcHJvdG9jb2wsIG5hbWUsIHR5cGUsIGRvbWFpbik6CisKKyAgICAgICAgZGVsIHNlbGYuc2VydmljZXNbKGludGVyZmFjZSwgcHJvdG9jb2wsIG5hbWUsIHR5cGUsIGRvbWFpbildCisKKworICAgICMgT25seSByZWFjaGFibGUgd2l0aCB1c2VfQ0dJCisgICAgZGVmIGFsbF9mb3Jfbm93KHNlbGYpOgorCisgICAgICAgIG1haW5sb29wLnF1aXQoKQorCitkZWYgdXNhZ2UocmV0dmFsID0gMCk6CisKKyAgICBwcmludCAiJXMgW29wdGlvbnNdXG4iICUgc3lzLmFyZ3ZbMF0KKyAgICBwcmludCAiICAgLWggLS1oZWxwICAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwIgorICAgIHByaW50ICIgICAtYyAtLWNnaSAgICAgICAgICAgICAgUnVuIGFzIGEgQ0dJIGluc3RlYWQgb2YgYXMgYSBzZXJ2ZXIgKGRlZmF1bHQgdG8gc2VydmVyIgorICAgIHByaW50ICIgICAgICAgICAgICAgICAgICAgICAgICAgdW5sZXNzIGVudmlyb25tZW50IHZhcmlhYmxlIEdBVEVXQVlfSU5URVJGQUNFIGlzIHNldCkiCisgICAgcHJpbnQgIiAgIC10IC0tdGltZW91dCBNUyAgICAgICBTcGVjaWZ5IHRoZSBtYXggdGltZSBmb3IgQ0dJIGJyb3dzaW5nIChkZWZhdWx0ICV1KSIgJSB0aW1lb3V0CisgICAgcHJpbnQgIiAgIC1wIC0tcG9ydCBQT1JUICAgICAgICBTcGVjaWZ5IHRoZSBwb3J0IHRvIHVzZSAoZGVmYXVsdCAldSkiICUgcG9ydAorICAgIHByaW50ICIgICAtYSAtLWFkZHJlc3MgQUREUkVTUyAgU3BlY2lmeSB0aGUgYWRkcmVzcyB0byBiaW5kIHRvIChkZWZhdWx0ICVzKSIgJSBhZGRyZXNzCisgICAgcHJpbnQgIiAgIC1IIC0taG9zdC1uYW1lcyAgICAgICBTaG93IGxpbmtzIHdpdGggcmVhbCBob3N0bmFtZXMiCisgICAgcHJpbnQgIiAgIC1BIC0tYWRkcmVzc2VzICAgICAgICBTaG93IGxpbmtzIHdpdGggbnVtZXJpYyBJUCBhZGRyZXNzZXMiCisgICAgcHJpbnQgIiAgIC1kIC0tZG9tYWluIERPTUFJTiAgICBTcGVjaWZ5IHRoZSBkb21haW4gdG8gYnJvd3NlIiAKKyAgICBzeXMuZXhpdChyZXR2YWwpCisKK3RyeToKKyAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdChzeXMuYXJndlsxOl0sICJoY3Q6cDphOkhBZDoiLCBbImhlbHAiLCAiY2dpIiwgInBvcnQ9IiwgInRpbWVvdXQ9IiwgImFkZHJlc3M9IiwgImhvc3QtbmFtZXMiLCAiYWRkcmVzc2VzIiwgImRvbWFpbj0iXSkKK2V4Y2VwdCBnZXRvcHQuR2V0b3B0RXJyb3I6CisgICAgdXNhZ2UoMikKKworZm9yIG8sIGEgaW4gb3B0czoKKyAgICBpZiBvIGluICgiLWgiLCAiLS1oZWxwIik6CisgICAgICAgIHVzYWdlKCkKKworICAgIGlmIG8gaW4gKCItYyIsICItLWNnaSIpOgorICAgICAgICB1c2VfQ0dJID0gVHJ1ZQorCisgICAgaWYgbyBpbiAoIi10IiwgIi0tdGltZW91dCIpOgorICAgICAgICB0aW1lb3V0ID0gaW50KGEpCisKKyAgICBpZiBvIGluICgiLXAiLCAiLS1wb3J0Iik6CisgICAgICAgIHBvcnQgPSBpbnQoYSkKKworICAgIGlmIG8gaW4gKCItYSIsICItLWFkZHJlc3MiKToKKyAgICAgICAgYWRkcmVzcyA9IGEKKworICAgIGlmIG8gaW4gKCItSCIsICItLWhvc3QtbmFtZXMiKToKKyAgICAgICAgdXNlX2hvc3RfbmFtZXMgPSBUcnVlCisKKyAgICBpZiBvIGluICgiLUEiLCAiLS1hZGRyZXNzZXMiKToKKyAgICAgICAgdXNlX2hvc3RfbmFtZXMgPSBGYWxzZQorCisgICAgaWYgbyBpbiAoIi1kIiwgIi0tZG9tYWluIik6CisgICAgICAgIGRvbWFpbiA9IGEKKworaWYgdXNlX0NHSSBpcyBOb25lOgorICAgIHVzZV9DR0kgPSBvcy5lbnZpcm9uLmhhc19rZXkoIkdBVEVXQVlfSU5URVJGQUNFIikKKworaWYgdXNlX0NHSToKKyAgICBjZ2kgPSBBdmFoaUJvb2ttYXJrcyh1c2VfaG9zdF9uYW1lcykKKworICAgIG1haW5sb29wID0gZ29iamVjdC5NYWluTG9vcCgpCisgICAgZ29iamVjdC50aW1lb3V0X2FkZCh0aW1lb3V0LCBtYWlubG9vcC5xdWl0KQorCisgICAgdHJ5OgorICAgICAgICBtYWlubG9vcC5ydW4oKQorICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgcGFzcworICAgICAgICAKKyAgICBwcmludCAnQ29udGVudC10eXBlOiB0ZXh0L2h0bWxcblxuJyArIGNnaS5yZW5kZXJfaHRtbCgpCisKK2Vsc2U6CisgICAgdHJ5OgorICAgICAgICBmcm9tIHR3aXN0ZWQuaW50ZXJuZXQgaW1wb3J0IGdsaWIycmVhY3RvcgorICAgICAgICBnbGliMnJlYWN0b3IuaW5zdGFsbCgpCisgICAgICAgIGZyb20gdHdpc3RlZC5pbnRlcm5ldCBpbXBvcnQgcmVhY3RvcgorICAgICAgICBmcm9tIHR3aXN0ZWQud2ViIGltcG9ydCBzZXJ2ZXIsIHJlc291cmNlCisgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICBwcmludCAiU29ycnksIHRvIHVzZSB0aGlzIHRvb2wgYXMgYSBzZXJ2ZXIgeW91IG5lZWQgdG8gaW5zdGFsbCB0d2lzdGVkIGFuZCB0d2lzdGVkLndlYi5cbiIKKwlzeXMuZXhpdCgxKQorCisgICAgY2xhc3MgQXZhaGlCb29rbWFya3NTZXJ2ZXIoQXZhaGlCb29rbWFya3MsIHJlc291cmNlLlJlc291cmNlKToKKyAgICAgICAgaXNMZWFmID0gVHJ1ZQorCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1c2VfaG9zdF9uYW1lcyk6CisgICAgICAgICAgICByZXNvdXJjZS5SZXNvdXJjZS5fX2luaXRfXyhzZWxmKQorICAgICAgICAgICAgQXZhaGlCb29rbWFya3MuX19pbml0X18oc2VsZiwgdXNlX2hvc3RfbmFtZXMpCisKKyAgICAgICAgZGVmIHJlbmRlcl9HRVQoc2VsZiwgcmVxdWVzdCk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5yZW5kZXJfaHRtbCgpCisKKyAgICBzaXRlID0gc2VydmVyLlNpdGUoQXZhaGlCb29rbWFya3NTZXJ2ZXIodXNlX2hvc3RfbmFtZXMpKQorICAgIHJlYWN0b3IubGlzdGVuVENQKHBvcnQsIHNpdGUsIGludGVyZmFjZT1hZGRyZXNzKQorCisgICAgcHJpbnQgIk5vdyBwb2ludCB5b3VyIHdlYiBicm93c2VyIHRvIGh0dHA6Ly8lczoldS8hIiAlIChhZGRyZXNzLCBwb3J0KQorCisgICAgdHJ5OgorICAgICAgICByZWFjdG9yLnJ1bigpCisgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICBwYXNzCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL01ha2VmaWxlLmFtIGIvYXZhaGktMC42LjMxL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTZiZDExCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDY5IEBACisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorIworIyBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworIyBVU0EuCisKK0FNX0NGTEFHUz0tSSQodG9wX3NyY2RpcikKKworRVhUUkFfRElTVCA9IFwKKwlfX2luaXRfXy5weSBcCisJYXZhaGktZGlzY292ZXIucHkgXAorCWF2YWhpLWRpc2NvdmVyLmRlc2t0b3AuaW4uaW4KKworaWYgSEFWRV9QWVRIT04KK2lmIEhBVkVfUFlUSE9OX0RCVVMKK2lmIEhBVkVfUFlHVEsKKworcHl0aG9uc2NyaXB0cyA9CisKK2Rlc2t0b3BkaXIgPSAkKGRhdGFkaXIpL2FwcGxpY2F0aW9ucworZGVza3RvcF9EQVRBID0KKworYXZhaGlfZGlzY292ZXJkaXIgPSAkKHB5dGhvbmRpcikvYXZhaGlfZGlzY292ZXIKK2F2YWhpX2Rpc2NvdmVyX1BZVEhPTiA9CisKK2lmIEhBVkVfR0RCTQorcHl0aG9uc2NyaXB0cyArPSBcCisJYXZhaGktZGlzY292ZXIKK2Rlc2t0b3BfREFUQSArPSBhdmFoaS1kaXNjb3Zlci5kZXNrdG9wCitASU5UTFRPT0xfREVTS1RPUF9SVUxFQAorYXZhaGlfZGlzY292ZXJfUFlUSE9OICs9IF9faW5pdF9fLnB5CitlbmRpZgorCitpZiBIQVZFX0RCTQorcHl0aG9uc2NyaXB0cyArPSBcCisJYXZhaGktZGlzY292ZXIKK2Rlc2t0b3BfREFUQSArPSBhdmFoaS1kaXNjb3Zlci5kZXNrdG9wCitASU5UTFRPT0xfREVTS1RPUF9SVUxFQAorYXZhaGlfZGlzY292ZXJfUFlUSE9OICs9IF9faW5pdF9fLnB5CitlbmRpZgorCithdmFoaS1kaXNjb3Zlci5kZXNrdG9wLmluOiBhdmFoaS1kaXNjb3Zlci5kZXNrdG9wLmluLmluCisJJChBTV9WX0dFTilzZWQgLWUgJ3MsQGJpbmRpclxALCQoYmluZGlyKSxnJyAkPCA+ICRACisKK2F2YWhpLWRpc2NvdmVyOiBhdmFoaS1kaXNjb3Zlci5weQorCSQoQU1fVl9HRU4pc2VkIC1lICdzLEBQWVRIT05cQCwkKFBZVEhPTiksZycgXAorCQktZSAncyxAR0VUVEVYVF9QQUNLQUdFXEAsIiQoR0VUVEVYVF9QQUNLQUdFKSIsZycgXAorCQktZSAncyxATE9DQUxFRElSXEAsIiQoYXZhaGlsb2NhbGVkaXIpIixnJyBcCisJCS1lICdzLEBpbnRlcmZhY2VzZGlyXEAsJChpbnRlcmZhY2VzZGlyKSxnJyAkPCA+ICRAICYmIFwKKwljaG1vZCAreCAkQAorCitiaW5fU0NSSVBUUyA9ICQocHl0aG9uc2NyaXB0cykKKworQ0xFQU5GSUxFUyA9ICQocHl0aG9uc2NyaXB0cykgJChkZXNrdG9wX0RBVEEpICoucHljICoucHlvIGF2YWhpLWRpc2NvdmVyLmRlc2t0b3AuaW4KKworZW5kaWYKK2VuZGlmCitlbmRpZgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9NYWtlZmlsZS5pbiBiL2F2YWhpLTAuNi4zMS9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAxZmI0NwotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw2ODggQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEuMyBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKyMKKyMgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyMgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyMgVVNBLgorCisKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK0BIQVZFX0dEQk1fVFJVRUBASEFWRV9QWUdUS19UUlVFQEBIQVZFX1BZVEhPTl9EQlVTX1RSVUVAQEhBVkVfUFlUSE9OX1RSVUVAYW1fX2FwcGVuZF8xID0gXAorQEhBVkVfR0RCTV9UUlVFQEBIQVZFX1BZR1RLX1RSVUVAQEhBVkVfUFlUSE9OX0RCVVNfVFJVRUBASEFWRV9QWVRIT05fVFJVRUAJYXZhaGktZGlzY292ZXIKKworQEhBVkVfR0RCTV9UUlVFQEBIQVZFX1BZR1RLX1RSVUVAQEhBVkVfUFlUSE9OX0RCVVNfVFJVRUBASEFWRV9QWVRIT05fVFJVRUBhbV9fYXBwZW5kXzIgPSBhdmFoaS1kaXNjb3Zlci5kZXNrdG9wCitASEFWRV9HREJNX1RSVUVAQEhBVkVfUFlHVEtfVFJVRUBASEFWRV9QWVRIT05fREJVU19UUlVFQEBIQVZFX1BZVEhPTl9UUlVFQGFtX19hcHBlbmRfMyA9IF9faW5pdF9fLnB5CitASEFWRV9EQk1fVFJVRUBASEFWRV9QWUdUS19UUlVFQEBIQVZFX1BZVEhPTl9EQlVTX1RSVUVAQEhBVkVfUFlUSE9OX1RSVUVAYW1fX2FwcGVuZF80ID0gXAorQEhBVkVfREJNX1RSVUVAQEhBVkVfUFlHVEtfVFJVRUBASEFWRV9QWVRIT05fREJVU19UUlVFQEBIQVZFX1BZVEhPTl9UUlVFQAlhdmFoaS1kaXNjb3ZlcgorCitASEFWRV9EQk1fVFJVRUBASEFWRV9QWUdUS19UUlVFQEBIQVZFX1BZVEhPTl9EQlVTX1RSVUVAQEhBVkVfUFlUSE9OX1RSVUVAYW1fX2FwcGVuZF81ID0gYXZhaGktZGlzY292ZXIuZGVza3RvcAorQEhBVkVfREJNX1RSVUVAQEhBVkVfUFlHVEtfVFJVRUBASEFWRV9QWVRIT05fREJVU19UUlVFQEBIQVZFX1BZVEhPTl9UUlVFQGFtX19hcHBlbmRfNiA9IF9faW5pdF9fLnB5CitzdWJkaXIgPSBhdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIKK0RJU1RfQ09NTU9OID0gJChhbV9fYXZhaGlfZGlzY292ZXJfUFlUSE9OX0RJU1QpICQoc3JjZGlyKS9NYWtlZmlsZS5hbSBcCisJJChzcmNkaXIpL01ha2VmaWxlLmluCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vYWN4X3B0aHJlYWQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2djY19zdGFja19wcm90ZWN0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9nY2NfdmlzaWJpbGl0eS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vaW50bHRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2ludHJvc3BlY3Rpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2x0b3B0aW9ucy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHR2ZXJzaW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbmxzLm00ICQodG9wX3NyY2RpcikvY29tbW9uL3B5dGhvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9hY2luY2x1ZGUubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vZG94eWdlbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7CithbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAorICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCisgICAgKikgZj0kJHA7OyBcCisgIGVzYWM7CithbV9fc3RyaXBfZGlyID0gZj1gZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7CithbV9faW5zdGFsbF9tYXggPSA0MAorYW1fX25vYmFzZV9zdHJpcF9zZXR1cCA9IFwKKyAgc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYAorYW1fX25vYmFzZV9zdHJpcCA9IFwKKyAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkIC1lICJzfCQkc3JjZGlyc3RyaXAvfHwiCithbV9fbm9iYXNlX2xpc3QgPSAkKGFtX19ub2Jhc2Vfc3RyaXBfc2V0dXApOyBcCisgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCisgIHNlZCAic3wgJCRzcmNkaXJzdHJpcC98IHw7IicgLyAuKlwvLyFzLyAuKi8gLi87IHMsXCggLipcKS9bXi9dKiQkLFwxLCcgfCBcCisgICQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiIgfSB7IGZpbGVzWyQkMl0gPSBmaWxlc1skJDJdICIgIiAkJDE7IFwKKyAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCisgICAgICB7IHByaW50ICQkMiwgZmlsZXNbJCQyXTsgblskJDJdID0gMDsgZmlsZXNbJCQyXSA9ICIiIH0gfSBcCisgICAgRU5EIHsgZm9yIChkaXIgaW4gZmlsZXMpIHByaW50IGRpciwgZmlsZXNbZGlyXSB9JworYW1fX2Jhc2VfbGlzdCA9IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJyB8IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJworYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpciA9IHsgXAorICB0ZXN0IC16ICIkJGZpbGVzIiBcCisgICAgfHwgeyB0ZXN0ICEgLWQgIiQkZGlyIiAmJiB0ZXN0ICEgLWYgIiQkZGlyIiAmJiB0ZXN0ICEgLXIgIiQkZGlyIjsgfSBcCisgICAgfHwgeyBlY2hvICIgKCBjZCAnJCRkaXInICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAorICAgICAgICAgJChhbV9fY2QpICIkJGRpciIgJiYgcm0gLWYgJCRmaWxlczsgfTsgXAorICB9CithbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQoYmluZGlyKSIgXAorCSIkKERFU1RESVIpJChhdmFoaV9kaXNjb3ZlcmRpcikiICIkKERFU1RESVIpJChkZXNrdG9wZGlyKSIKK1NDUklQVFMgPSAkKGJpbl9TQ1JJUFRTKQorQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCithbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCithbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICIgJEA7CitBTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCithbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfYXRfMCA9IEAKK1NPVVJDRVMgPQorRElTVF9TT1VSQ0VTID0KK2FtX19hdmFoaV9kaXNjb3Zlcl9QWVRIT05fRElTVCA9IF9faW5pdF9fLnB5CithbV9fcHlfY29tcGlsZSA9IFBZVEhPTj0kKFBZVEhPTikgJChTSEVMTCkgJChweV9jb21waWxlKQorcHlfY29tcGlsZSA9ICQodG9wX3NyY2RpcikvcHktY29tcGlsZQorREFUQSA9ICQoZGVza3RvcF9EQVRBKQorRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FMTF9MSU5HVUFTID0gQEFMTF9MSU5HVUFTQAorQU1UQVIgPSBAQU1UQVJACitBTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKK0FSID0gQEFSQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FWQUhJX0FVVE9JUERfR1JPVVAgPSBAQVZBSElfQVVUT0lQRF9HUk9VUEAKK0FWQUhJX0FVVE9JUERfVVNFUiA9IEBBVkFISV9BVVRPSVBEX1VTRVJACitBVkFISV9HUk9VUCA9IEBBVkFISV9HUk9VUEAKK0FWQUhJX1BSSVZfQUNDRVNTX0dST1VQID0gQEFWQUhJX1BSSVZfQUNDRVNTX0dST1VQQAorQVZBSElfVVNFUiA9IEBBVkFISV9VU0VSQAorQVdLID0gQEFXS0AKK0NBVEFMT0dTID0gQENBVEFMT0dTQAorQ0FUT0JKRVhUID0gQENBVE9CSkVYVEAKK0NDID0gQENDQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RBVEFESVJOQU1FID0gQERBVEFESVJOQU1FQAorREJVU19DRkxBR1MgPSBAREJVU19DRkxBR1NACitEQlVTX0xJQlMgPSBAREJVU19MSUJTQAorREJVU19TWVNURU1fQlVTX0RFRkFVTFRfQUREUkVTUyA9IEBEQlVTX1NZU1RFTV9CVVNfREVGQVVMVF9BRERSRVNTQAorREJVU19TWVNfRElSID0gQERCVVNfU1lTX0RJUkAKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitETExUT09MID0gQERMTFRPT0xACitET1hZR0VOX1BBUEVSX1NJWkUgPSBARE9YWUdFTl9QQVBFUl9TSVpFQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitEWF9DT05GSUcgPSBARFhfQ09ORklHQAorRFhfRE9DRElSID0gQERYX0RPQ0RJUkAKK0RYX0RPVCA9IEBEWF9ET1RACitEWF9ET1hZR0VOID0gQERYX0RPWFlHRU5ACitEWF9EVklQUyA9IEBEWF9EVklQU0AKK0RYX0VHUkVQID0gQERYX0VHUkVQQAorRFhfRU5WID0gQERYX0VOVkAKK0RYX0ZMQUdfY2hpID0gQERYX0ZMQUdfY2hpQAorRFhfRkxBR19jaG0gPSBARFhfRkxBR19jaG1ACitEWF9GTEFHX2RvYyA9IEBEWF9GTEFHX2RvY0AKK0RYX0ZMQUdfZG90ID0gQERYX0ZMQUdfZG90QAorRFhfRkxBR19odG1sID0gQERYX0ZMQUdfaHRtbEAKK0RYX0ZMQUdfbWFuID0gQERYX0ZMQUdfbWFuQAorRFhfRkxBR19wZGYgPSBARFhfRkxBR19wZGZACitEWF9GTEFHX3BzID0gQERYX0ZMQUdfcHNACitEWF9GTEFHX3J0ZiA9IEBEWF9GTEFHX3J0ZkAKK0RYX0ZMQUdfeG1sID0gQERYX0ZMQUdfeG1sQAorRFhfSEhDID0gQERYX0hIQ0AKK0RYX0xBVEVYID0gQERYX0xBVEVYQAorRFhfTUFLRUlOREVYID0gQERYX01BS0VJTkRFWEAKK0RYX1BERkxBVEVYID0gQERYX1BERkxBVEVYQAorRFhfUEVSTCA9IEBEWF9QRVJMQAorRFhfUFJPSkVDVCA9IEBEWF9QUk9KRUNUQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFWEVFWFQgPSBARVhFRVhUQAorRkdSRVAgPSBARkdSRVBACitHQUNVVElMID0gQEdBQ1VUSUxACitHRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAorR0xJQjIwX0NGTEFHUyA9IEBHTElCMjBfQ0ZMQUdTQAorR0xJQjIwX0xJQlMgPSBAR0xJQjIwX0xJQlNACitHTU9GSUxFUyA9IEBHTU9GSUxFU0AKK0dNU0dGTVQgPSBAR01TR0ZNVEAKK0dPQkpFQ1RfQ0ZMQUdTID0gQEdPQkpFQ1RfQ0ZMQUdTQAorR09CSkVDVF9MSUJTID0gQEdPQkpFQ1RfTElCU0AKK0dSRVAgPSBAR1JFUEAKK0dUSzIwX0NGTEFHUyA9IEBHVEsyMF9DRkxBR1NACitHVEsyMF9MSUJTID0gQEdUSzIwX0xJQlNACitHVEszMF9DRkxBR1MgPSBAR1RLMzBfQ0ZMQUdTQAorR1RLMzBfTElCUyA9IEBHVEszMF9MSUJTQAorSE9XTF9DT01QQVRfVkVSU0lPTiA9IEBIT1dMX0NPTVBBVF9WRVJTSU9OQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitJTlNUT0JKRVhUID0gQElOU1RPQkpFWFRACitJTlRMTElCUyA9IEBJTlRMTElCU0AKK0lOVExUT09MX0VYVFJBQ1QgPSBASU5UTFRPT0xfRVhUUkFDVEAKK0lOVExUT09MX01FUkdFID0gQElOVExUT09MX01FUkdFQAorSU5UTFRPT0xfUEVSTCA9IEBJTlRMVE9PTF9QRVJMQAorSU5UTFRPT0xfVVBEQVRFID0gQElOVExUT09MX1VQREFURUAKK0lOVFJPU1BFQ1RJT05fQ0ZMQUdTID0gQElOVFJPU1BFQ1RJT05fQ0ZMQUdTQAorSU5UUk9TUEVDVElPTl9DT01QSUxFUiA9IEBJTlRST1NQRUNUSU9OX0NPTVBJTEVSQAorSU5UUk9TUEVDVElPTl9HRU5FUkFURSA9IEBJTlRST1NQRUNUSU9OX0dFTkVSQVRFQAorSU5UUk9TUEVDVElPTl9HSVJESVIgPSBASU5UUk9TUEVDVElPTl9HSVJESVJACitJTlRST1NQRUNUSU9OX0xJQlMgPSBASU5UUk9TUEVDVElPTl9MSUJTQAorSU5UUk9TUEVDVElPTl9NQUtFRklMRSA9IEBJTlRST1NQRUNUSU9OX01BS0VGSUxFQAorSU5UUk9TUEVDVElPTl9TQ0FOTkVSID0gQElOVFJPU1BFQ1RJT05fU0NBTk5FUkAKK0lOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUiA9IEBJTlRST1NQRUNUSU9OX1RZUEVMSUJESVJACitMRCA9IEBMREAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQkFWQUhJX0NMSUVOVF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ0xJRU5UX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPTU1PTl9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ09NTU9OX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPTVBBVF9IT1dMX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DT01QQVRfSE9XTF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9DT01QQVRfTElCRE5TX1NEX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DT01QQVRfTElCRE5TX1NEX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPUkVfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NPUkVfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfR0xJQl9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfR0xJQl9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9HT0JKRUNUX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9HT0JKRUNUX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX1FUM19WRVJTSU9OX0lORk8gPSBATElCQVZBSElfUVQzX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX1FUNF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfUVQ0X1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX1VJX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9VSV9WRVJTSU9OX0lORk9ACitMSUJEQUVNT05fQ0ZMQUdTID0gQExJQkRBRU1PTl9DRkxBR1NACitMSUJEQUVNT05fTElCUyA9IEBMSUJEQUVNT05fTElCU0AKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKK0xOX1MgPSBATE5fU0AKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKK01DUyA9IEBNQ1NACitNREFTU0VNQkxFUiA9IEBNREFTU0VNQkxFUkAKK01LRElSX1AgPSBATUtESVJfUEAKK01LSU5TVEFMTERJUlMgPSBATUtJTlNUQUxMRElSU0AKK01PQ19RVDMgPSBATU9DX1FUM0AKK01PQ19RVDQgPSBATU9DX1FUNEAKK01PTk9ET0NFUiA9IEBNT05PRE9DRVJACitNT05PRE9DX0NGTEFHUyA9IEBNT05PRE9DX0NGTEFHU0AKK01PTk9ET0NfRElSID0gQE1PTk9ET0NfRElSQAorTU9OT0RPQ19MSUJTID0gQE1PTk9ET0NfTElCU0AKK01TR0ZNVCA9IEBNU0dGTVRACitNU0dGTVRfT1BUUyA9IEBNU0dGTVRfT1BUU0AKK01TR01FUkdFID0gQE1TR01FUkdFQAorTk0gPSBATk1ACitOTUVESVQgPSBATk1FRElUQAorT0JKRFVNUCA9IEBPQkpEVU1QQAorT0JKRVhUID0gQE9CSkVYVEAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQS0dfQ09ORklHX0xJQkRJUiA9IEBQS0dfQ09ORklHX0xJQkRJUkAKK1BLR19DT05GSUdfUEFUSCA9IEBQS0dfQ09ORklHX1BBVEhACitQT0ZJTEVTID0gQFBPRklMRVNACitQT1NVQiA9IEBQT1NVQkAKK1BPX0lOX0RBVEFESVJfRkFMU0UgPSBAUE9fSU5fREFUQURJUl9GQUxTRUAKK1BPX0lOX0RBVEFESVJfVFJVRSA9IEBQT19JTl9EQVRBRElSX1RSVUVACitQVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACitQVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKK1BUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACitQWVRIT04gPSBAUFlUSE9OQAorUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKK1BZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACitQWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACitQWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKK1FUM19DRkxBR1MgPSBAUVQzX0NGTEFHU0AKK1FUM19MSUJTID0gQFFUM19MSUJTQAorUVQ0X0NGTEFHUyA9IEBRVDRfQ0ZMQUdTQAorUVQ0X0xJQlMgPSBAUVQ0X0xJQlNACitSQU5MSUIgPSBAUkFOTElCQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTVE9XID0gQFNUT1dACitTVFJJUCA9IEBTVFJJUEAKK1VTRV9OTFMgPSBAVVNFX05MU0AKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1ZJU0lCSUxJVFlfSElEREVOX0NGTEFHUyA9IEBWSVNJQklMSVRZX0hJRERFTl9DRkxBR1NACitYR0VUVEVYVCA9IEBYR0VUVEVYVEAKK1hNTF9DRkxBR1MgPSBAWE1MX0NGTEFHU0AKK1hNTF9MSUJTID0gQFhNTF9MSUJTQAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorYWNfY3RfQVIgPSBAYWNfY3RfQVJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithY3hfcHRocmVhZF9jb25maWcgPSBAYWN4X3B0aHJlYWRfY29uZmlnQAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACithdmFoaV9ydW50aW1lX2RpciA9IEBhdmFoaV9ydW50aW1lX2RpckAKK2F2YWhpX3NvY2tldCA9IEBhdmFoaV9zb2NrZXRACithdmFoaWxvY2FsZWRpciA9IEBhdmFoaWxvY2FsZWRpckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraGF2ZV9wa2dfY29uZmlnID0gQGhhdmVfcGtnX2NvbmZpZ0AKK2hhdmVfeG1sdG9tYW4gPSBAaGF2ZV94bWx0b21hbkAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitpbnRlcmZhY2VzZGlyID0gQGludGVyZmFjZXNkaXJACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKK3BrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitweWV4ZWNkaXIgPSBAcHlleGVjZGlyQAorcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3N5c3RlbWRzeXN0ZW11bml0ZGlyID0gQHN5c3RlbWRzeXN0ZW11bml0ZGlyQAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK3RvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKK3RvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitBTV9DRkxBR1MgPSAtSSQodG9wX3NyY2RpcikKK0VYVFJBX0RJU1QgPSBcCisJX19pbml0X18ucHkgXAorCWF2YWhpLWRpc2NvdmVyLnB5IFwKKwlhdmFoaS1kaXNjb3Zlci5kZXNrdG9wLmluLmluCisKK0BIQVZFX1BZR1RLX1RSVUVAQEhBVkVfUFlUSE9OX0RCVVNfVFJVRUBASEFWRV9QWVRIT05fVFJVRUBweXRob25zY3JpcHRzID0gJChhbV9fYXBwZW5kXzEpIFwKK0BIQVZFX1BZR1RLX1RSVUVAQEhBVkVfUFlUSE9OX0RCVVNfVFJVRUBASEFWRV9QWVRIT05fVFJVRUAJJChhbV9fYXBwZW5kXzQpCitASEFWRV9QWUdUS19UUlVFQEBIQVZFX1BZVEhPTl9EQlVTX1RSVUVAQEhBVkVfUFlUSE9OX1RSVUVAZGVza3RvcGRpciA9ICQoZGF0YWRpcikvYXBwbGljYXRpb25zCitASEFWRV9QWUdUS19UUlVFQEBIQVZFX1BZVEhPTl9EQlVTX1RSVUVAQEhBVkVfUFlUSE9OX1RSVUVAZGVza3RvcF9EQVRBID0gJChhbV9fYXBwZW5kXzIpIFwKK0BIQVZFX1BZR1RLX1RSVUVAQEhBVkVfUFlUSE9OX0RCVVNfVFJVRUBASEFWRV9QWVRIT05fVFJVRUAJJChhbV9fYXBwZW5kXzUpCitASEFWRV9QWUdUS19UUlVFQEBIQVZFX1BZVEhPTl9EQlVTX1RSVUVAQEhBVkVfUFlUSE9OX1RSVUVAYXZhaGlfZGlzY292ZXJkaXIgPSAkKHB5dGhvbmRpcikvYXZhaGlfZGlzY292ZXIKK0BIQVZFX1BZR1RLX1RSVUVAQEhBVkVfUFlUSE9OX0RCVVNfVFJVRUBASEFWRV9QWVRIT05fVFJVRUBhdmFoaV9kaXNjb3Zlcl9QWVRIT04gPSAkKGFtX19hcHBlbmRfMykgXAorQEhBVkVfUFlHVEtfVFJVRUBASEFWRV9QWVRIT05fREJVU19UUlVFQEBIQVZFX1BZVEhPTl9UUlVFQAkkKGFtX19hcHBlbmRfNikKK0BIQVZFX1BZR1RLX1RSVUVAQEhBVkVfUFlUSE9OX0RCVVNfVFJVRUBASEFWRV9QWVRIT05fVFJVRUBiaW5fU0NSSVBUUyA9ICQocHl0aG9uc2NyaXB0cykKK0BIQVZFX1BZR1RLX1RSVUVAQEhBVkVfUFlUSE9OX0RCVVNfVFJVRUBASEFWRV9QWVRIT05fVFJVRUBDTEVBTkZJTEVTID0gJChweXRob25zY3JpcHRzKSAkKGRlc2t0b3BfREFUQSkgKi5weWMgKi5weW8gYXZhaGktZGlzY292ZXIuZGVza3RvcC5pbgorYWxsOiBhbGwtYW0KKworLlNVRkZJWEVTOgorJChzcmNkaXIpL01ha2VmaWxlLmluOiAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiBhdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6ICAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6ICAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKGFtX19hY2xvY2FsX200X2RlcHMpOgoraW5zdGFsbC1iaW5TQ1JJUFRTOiAkKGJpbl9TQ1JJUFRTKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQoYmluZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQoYmluZGlyKSIKKwlAbGlzdD0nJChiaW5fU0NSSVBUUyknOyB0ZXN0IC1uICIkKGJpbmRpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAorCSAgaWYgdGVzdCAtZiAiJCRkJCRwIjsgdGhlbiBlY2hvICIkJGQkJHAiOyBlY2hvICIkJHAiOyBlbHNlIDo7IGZpOyBcCisJZG9uZSB8IFwKKwlzZWQgLWUgJ3A7cywuKi8sLDtuJyBcCisJICAgIC1lICdoO3N8Lip8LnwnIFwKKwkgICAgLWUgJ3A7eDtzLC4qLywsOyQodHJhbnNmb3JtKScgfCBzZWQgJ047TjtOO3MsXG4sICxnJyB8IFwKKwkkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiOyBkaXJzWyIuIl0gPSAxOyB9IFwKKwkgIHsgZD0kJDM7IGlmIChkaXJzW2RdICE9IDEpIHsgcHJpbnQgImQiLCBkOyBkaXJzW2RdID0gMSB9IFwKKwkgICAgaWYgKCQkMiA9PSAkJDQpIHsgZmlsZXNbZF0gPSBmaWxlc1tkXSAiICIgJCQxOyBcCisJICAgICAgaWYgKCsrbltkXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIHsgXAorCQlwcmludCAiZiIsIGQsIGZpbGVzW2RdOyBuW2RdID0gMDsgZmlsZXNbZF0gPSAiIiB9IH0gXAorCSAgICBlbHNlIHsgcHJpbnQgImYiLCBkICIvIiAkJDQsICQkMSB9IH0gXAorCSAgRU5EIHsgZm9yIChkIGluIGZpbGVzKSBwcmludCAiZiIsIGQsIGZpbGVzW2RdIH0nIHwgXAorCXdoaWxlIHJlYWQgdHlwZSBkaXIgZmlsZXM7IGRvIFwKKwkgICAgIGlmIHRlc3QgIiQkZGlyIiA9IC47IHRoZW4gZGlyPTsgZWxzZSBkaXI9LyQkZGlyOyBmaTsgXAorCSAgICAgdGVzdCAteiAiJCRmaWxlcyIgfHwgeyBcCisJICAgICAgIGVjaG8gIiAkKElOU1RBTExfU0NSSVBUKSAkJGZpbGVzICckKERFU1RESVIpJChiaW5kaXIpJCRkaXInIjsgXAorCSAgICAgICAkKElOU1RBTExfU0NSSVBUKSAkJGZpbGVzICIkKERFU1RESVIpJChiaW5kaXIpJCRkaXIiIHx8IGV4aXQgJCQ/OyBcCisJICAgICB9IFwKKwk7IGRvbmUKKwordW5pbnN0YWxsLWJpblNDUklQVFM6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChiaW5fU0NSSVBUUyknOyB0ZXN0IC1uICIkKGJpbmRpcikiIHx8IGV4aXQgMDsgXAorCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBcCisJICAgICAgIHNlZCAtZSAncywuKi8sLDskKHRyYW5zZm9ybSknYDsgXAorCWRpcj0nJChERVNURElSKSQoYmluZGlyKSc7ICQoYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpcikKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKK2luc3RhbGwtYXZhaGlfZGlzY292ZXJQWVRIT046ICQoYXZhaGlfZGlzY292ZXJfUFlUSE9OKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQoYXZhaGlfZGlzY292ZXJkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChhdmFoaV9kaXNjb3ZlcmRpcikiCisJQGxpc3Q9JyQoYXZhaGlfZGlzY292ZXJfUFlUSE9OKSc7IGRsaXN0PTsgbGlzdDI9OyB0ZXN0IC1uICIkKGF2YWhpX2Rpc2NvdmVyZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gYj07IGVsc2UgYj0iJChzcmNkaXIpLyI7IGZpOyBcCisJICBpZiB0ZXN0IC1mICQkYiQkcDsgdGhlbiBcCisJICAgICQoYW1fX3N0cmlwX2RpcikgXAorCSAgICBkbGlzdD0iJCRkbGlzdCAkJGYiOyBcCisJICAgIGxpc3QyPSIkJGxpc3QyICQkYiQkcCI7IFwKKwkgIGVsc2UgOjsgZmk7IFwKKwlkb25lOyBcCisJZm9yIGZpbGUgaW4gJCRsaXN0MjsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAorCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKKwkgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAnJChERVNURElSKSQoYXZhaGlfZGlzY292ZXJkaXIpJyI7IFwKKwkgICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICIkKERFU1RESVIpJChhdmFoaV9kaXNjb3ZlcmRpcikiIHx8IGV4aXQgJCQ/OyBcCisJZG9uZSB8fCBleGl0ICQkPzsgXAorCWlmIHRlc3QgLW4gIiQkZGxpc3QiOyB0aGVuIFwKKwkgICQoYW1fX3B5X2NvbXBpbGUpIC0tZGVzdGRpciAiJChERVNURElSKSIgXAorCSAgICAgICAgICAgICAgICAgICAgLS1iYXNlZGlyICIkKGF2YWhpX2Rpc2NvdmVyZGlyKSIgJCRkbGlzdDsgXAorCWVsc2UgOjsgZmkKKwordW5pbnN0YWxsLWF2YWhpX2Rpc2NvdmVyUFlUSE9OOgorCUAkKE5PUk1BTF9VTklOU1RBTEwpCisJQGxpc3Q9JyQoYXZhaGlfZGlzY292ZXJfUFlUSE9OKSc7IHRlc3QgLW4gIiQoYXZhaGlfZGlzY292ZXJkaXIpIiB8fCBsaXN0PTsgXAorCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgc2VkIC1lICdzfF4uKi98fCdgOyBcCisJdGVzdCAtbiAiJCRmaWxlcyIgfHwgZXhpdCAwOyBcCisJZGlyPSckKERFU1RESVIpJChhdmFoaV9kaXNjb3ZlcmRpciknOyBcCisJZmlsZXNjPWBlY2hvICIkJGZpbGVzIiB8IHNlZCAnc3wkJHxjfCdgOyBcCisJZmlsZXNvPWBlY2hvICIkJGZpbGVzIiB8IHNlZCAnc3wkJHxvfCdgOyBcCisJc3Q9MDsgXAorCWZvciBmaWxlcyBpbiAiJCRmaWxlcyIgIiQkZmlsZXNjIiAiJCRmaWxlc28iOyBkbyBcCisJICAkKGFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIpIHx8IHN0PSQkPzsgXAorCWRvbmU7IFwKKwlleGl0ICQkc3QKK2luc3RhbGwtZGVza3RvcERBVEE6ICQoZGVza3RvcF9EQVRBKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQoZGVza3RvcGRpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKGRlc2t0b3BkaXIpIgorCUBsaXN0PSckKGRlc2t0b3BfREFUQSknOyB0ZXN0IC1uICIkKGRlc2t0b3BkaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKKwkgIGVjaG8gIiQkZCQkcCI7IFwKKwlkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKKwl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCisJICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgJyQoREVTVERJUikkKGRlc2t0b3BkaXIpJyI7IFwKKwkgICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICIkKERFU1RESVIpJChkZXNrdG9wZGlyKSIgfHwgZXhpdCAkJD87IFwKKwlkb25lCisKK3VuaW5zdGFsbC1kZXNrdG9wREFUQToKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKGRlc2t0b3BfREFUQSknOyB0ZXN0IC1uICIkKGRlc2t0b3BkaXIpIiB8fCBsaXN0PTsgXAorCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgc2VkIC1lICdzfF4uKi98fCdgOyBcCisJZGlyPSckKERFU1RESVIpJChkZXNrdG9wZGlyKSc7ICQoYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpcikKK3RhZ3M6IFRBR1MKK1RBR1M6CisKK2N0YWdzOiBDVEFHUworQ1RBR1M6CisKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUgJChTQ1JJUFRTKSAkKERBVEEpCitpbnN0YWxsZGlyczoKKwlmb3IgZGlyIGluICIkKERFU1RESVIpJChiaW5kaXIpIiAiJChERVNURElSKSQoYXZhaGlfZGlzY292ZXJkaXIpIiAiJChERVNURElSKSQoZGVza3RvcGRpcikiOyBkbyBcCisJICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCisJZG9uZQoraW5zdGFsbDogaW5zdGFsbC1hbQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCit1bmluc3RhbGw6IHVuaW5zdGFsbC1hbQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQoraW5zdGFsbC1zdHJpcDoKKwlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICAgICAgaW5zdGFsbDsgXAorCWVsc2UgXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCisJZmkKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ0xFQU5GSUxFUykiIHx8IHJtIC1mICQoQ0xFQU5GSUxFUykKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWdlbmVyaWMKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLWF2YWhpX2Rpc2NvdmVyUFlUSE9OIGluc3RhbGwtZGVza3RvcERBVEEKKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCisKK2luc3RhbGwtZHZpLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06IGluc3RhbGwtYmluU0NSSVBUUworCitpbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQorCitpbnN0YWxsLWh0bWwtYW06CisKK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisKK2luc3RhbGwtaW5mby1hbToKKworaW5zdGFsbC1tYW46CisKK2luc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQorCitpbnN0YWxsLXBkZi1hbToKKworaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQorCitpbnN0YWxsLXBzLWFtOgorCitpbnN0YWxsY2hlY2stYW06CisKK21haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtYW0KKworcGRmLWFtOgorCitwczogcHMtYW0KKworcHMtYW06CisKK3VuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWF2YWhpX2Rpc2NvdmVyUFlUSE9OIHVuaW5zdGFsbC1iaW5TQ1JJUFRTIFwKKwl1bmluc3RhbGwtZGVza3RvcERBVEEKKworLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAorCisuUEhPTlk6IGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIFwKKwlkaXN0Y2xlYW4gZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGRpciBkdmkgXAorCWR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBcCisJaW5zdGFsbC1hdmFoaV9kaXNjb3ZlclBZVEhPTiBpbnN0YWxsLWJpblNDUklQVFMgaW5zdGFsbC1kYXRhIFwKKwlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kZXNrdG9wREFUQSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBcCisJaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIFwKKwlpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIFwKKwlpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBcCisJaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIFwKKwltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gXAorCXVuaW5zdGFsbC1hdmFoaV9kaXNjb3ZlclBZVEhPTiB1bmluc3RhbGwtYmluU0NSSVBUUyBcCisJdW5pbnN0YWxsLWRlc2t0b3BEQVRBCisKK0BIQVZFX0dEQk1fVFJVRUBASEFWRV9QWUdUS19UUlVFQEBIQVZFX1BZVEhPTl9EQlVTX1RSVUVAQEhBVkVfUFlUSE9OX1RSVUVAQElOVExUT09MX0RFU0tUT1BfUlVMRUAKK0BIQVZFX0RCTV9UUlVFQEBIQVZFX1BZR1RLX1RSVUVAQEhBVkVfUFlUSE9OX0RCVVNfVFJVRUBASEFWRV9QWVRIT05fVFJVRUBASU5UTFRPT0xfREVTS1RPUF9SVUxFQAorCitASEFWRV9QWUdUS19UUlVFQEBIQVZFX1BZVEhPTl9EQlVTX1RSVUVAQEhBVkVfUFlUSE9OX1RSVUVAYXZhaGktZGlzY292ZXIuZGVza3RvcC5pbjogYXZhaGktZGlzY292ZXIuZGVza3RvcC5pbi5pbgorQEhBVkVfUFlHVEtfVFJVRUBASEFWRV9QWVRIT05fREJVU19UUlVFQEBIQVZFX1BZVEhPTl9UUlVFQAkkKEFNX1ZfR0VOKXNlZCAtZSAncyxAYmluZGlyXEAsJChiaW5kaXIpLGcnICQ8ID4gJEAKKworQEhBVkVfUFlHVEtfVFJVRUBASEFWRV9QWVRIT05fREJVU19UUlVFQEBIQVZFX1BZVEhPTl9UUlVFQGF2YWhpLWRpc2NvdmVyOiBhdmFoaS1kaXNjb3Zlci5weQorQEhBVkVfUFlHVEtfVFJVRUBASEFWRV9QWVRIT05fREJVU19UUlVFQEBIQVZFX1BZVEhPTl9UUlVFQAkkKEFNX1ZfR0VOKXNlZCAtZSAncyxAUFlUSE9OXEAsJChQWVRIT04pLGcnIFwKK0BIQVZFX1BZR1RLX1RSVUVAQEhBVkVfUFlUSE9OX0RCVVNfVFJVRUBASEFWRV9QWVRIT05fVFJVRUAJCS1lICdzLEBHRVRURVhUX1BBQ0tBR0VcQCwiJChHRVRURVhUX1BBQ0tBR0UpIixnJyBcCitASEFWRV9QWUdUS19UUlVFQEBIQVZFX1BZVEhPTl9EQlVTX1RSVUVAQEhBVkVfUFlUSE9OX1RSVUVACQktZSAncyxATE9DQUxFRElSXEAsIiQoYXZhaGlsb2NhbGVkaXIpIixnJyBcCitASEFWRV9QWUdUS19UUlVFQEBIQVZFX1BZVEhPTl9EQlVTX1RSVUVAQEhBVkVfUFlUSE9OX1RSVUVACQktZSAncyxAaW50ZXJmYWNlc2RpclxALCQoaW50ZXJmYWNlc2RpciksZycgJDwgPiAkQCAmJiBcCitASEFWRV9QWUdUS19UUlVFQEBIQVZFX1BZVEhPTl9EQlVTX1RSVUVAQEhBVkVfUFlUSE9OX1RSVUVACWNobW9kICt4ICRACisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvX19pbml0X18ucHkgYi9hdmFoaS0wLjYuMzEvYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZmM2VjN2YKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMTggQEAKKyMhQFBZVEhPTkAKKyMgLSotcHl0aG9uLSotCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorIworIyBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworIyBVU0EuCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLmRlc2t0b3AuaW4uaW4gYi9hdmFoaS0wLjYuMzEvYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLmRlc2t0b3AuaW4uaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFjOTgxOAotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIuZGVza3RvcC5pbi5pbgpAQCAtMCwwICsxLDExIEBACitbRGVza3RvcCBFbnRyeV0KK1ZlcnNpb249MS4wCitfTmFtZT1BdmFoaSBaZXJvY29uZiBCcm93c2VyCitfQ29tbWVudD1Ccm93c2UgZm9yIFplcm9jb25mIHNlcnZpY2VzIGF2YWlsYWJsZSBvbiB5b3VyIG5ldHdvcmsKK0V4ZWM9QGJpbmRpckAvYXZhaGktZGlzY292ZXIKK1Rlcm1pbmFsPWZhbHNlCitUeXBlPUFwcGxpY2F0aW9uCitJY29uPW5ldHdvcmstd2lyZWQKK0NhdGVnb3JpZXM9R05PTUU7U3lzdGVtOworU3RhcnR1cE5vdGlmeT1mYWxzZQorR2VuZXJpY05hbWU9CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5IGIvYXZhaGktMC42LjMxL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zNjJkM2I2Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weQpAQCAtMCwwICsxLDI4OCBAQAorIyFAUFlUSE9OQAorIyAtKi1weXRob24tKi0KKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisjCisjIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisjIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisjIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisjIFVTQS4KKworaW1wb3J0IG9zLCBzeXMKKwordHJ5OgorICAgIGltcG9ydCBhdmFoaSwgZ2V0dGV4dCwgZ3RrLCBnb2JqZWN0LCBkYnVzLCBhdmFoaS5TZXJ2aWNlVHlwZURhdGFiYXNlCisgICAgZ2V0dGV4dC5iaW5kdGV4dGRvbWFpbihAR0VUVEVYVF9QQUNLQUdFQCwgQExPQ0FMRURJUkApCisgICAgZ2V0dGV4dC50ZXh0ZG9tYWluKEBHRVRURVhUX1BBQ0tBR0VAKQorICAgIF8gPSBnZXR0ZXh0LmdldHRleHQKK2V4Y2VwdCBJbXBvcnRFcnJvciwgZToKKyAgICBwcmludCAiU29ycnksIHRvIHVzZSB0aGlzIHRvb2wgeW91IG5lZWQgdG8gaW5zdGFsbCBBdmFoaSwgcHlndGsgYW5kIHB5dGhvbi1kYnVzLlxuIEVycm9yOiAlcyIgJSBlCisgICAgc3lzLmV4aXQoMSkKK2V4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgcHJpbnQgIkZhaWxlZCB0byBpbml0aWFsaXplOiAlcyIgJSBlCisgICAgc3lzLmV4aXQoMSkKKworCisjIyAhIU5PVEUhISAjIworIyBJdCdzIHJlYWxseSBpbXBvcnRhbnQgdG8gZG8gdGhpcywgZWxzZSB5b3Ugd29uJ3Qgc2VlIGFueSBldmVudHMKKyMjCit0cnk6CisgICAgZnJvbSBkYnVzIGltcG9ydCBEQnVzRXhjZXB0aW9uCisgICAgaW1wb3J0IGRidXMuZ2xpYgorZXhjZXB0IEltcG9ydEVycm9yLCBlOgorICAgIHBhc3MKKworc2VydmljZV90eXBlX2Jyb3dzZXJzID0ge30KK3NlcnZpY2VfYnJvd3NlcnMgPSB7fQorCitkZWYgZXJyb3JfbXNnKG1zZyk6CisgICAgZCA9IGd0ay5NZXNzYWdlRGlhbG9nKHBhcmVudD1Ob25lLCBmbGFncz1ndGsuRElBTE9HX01PREFMLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPWd0ay5NRVNTQUdFX0VSUk9SLCBidXR0b25zPWd0ay5CVVRUT05TX09LKQorICAgIGQuc2V0X21hcmt1cChtc2cpCisgICAgZC5zaG93X2FsbCgpCisgICAgZC5ydW4oKQorICAgIGQuZGVzdHJveSgpCisKK3VpX2RpciA9ICJAaW50ZXJmYWNlc2RpckAiCisKK3NlcnZpY2VfdHlwZV9kYiA9IGF2YWhpLlNlcnZpY2VUeXBlRGF0YWJhc2UuU2VydmljZVR5cGVEYXRhYmFzZSgpCisKK2NsYXNzIE1haW5fd2luZG93OgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoPSJhdmFoaS1kaXNjb3Zlci51aSIsIHJvb3Q9Im1haW5fd2luZG93IiwgZG9tYWluPU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbih1aV9kaXIsIHBhdGgpCisgICAgICAgIGd0ay53aW5kb3dfc2V0X2RlZmF1bHRfaWNvbl9uYW1lKCJuZXR3b3JrLXdpcmVkIikKKyAgICAgICAgc2VsZi51aSA9IGd0ay5CdWlsZGVyKCkKKyAgICAgICAgc2VsZi51aS5hZGRfZnJvbV9maWxlKHBhdGgpCisgICAgICAgIHNlbGYudWkuY29ubmVjdF9zaWduYWxzKHNlbGYpCisgICAgICAgIHNlbGYudHJlZV92aWV3ID0gc2VsZi51aS5nZXRfb2JqZWN0KCJ0cmVlX3ZpZXciKQorICAgICAgICBzZWxmLmluZm9fbGFiZWwgPSBzZWxmLnVpLmdldF9vYmplY3QoImluZm9fbGFiZWwiKQorICAgICAgICBzZWxmLm5ldygpCisKKyAgICBkZWYgb25fdHJlZV92aWV3X2N1cnNvcl9jaGFuZ2VkKHNlbGYsIHdpZGdldCwgKmFyZ3MpOgorICAgICAgICAobW9kZWwsIGl0ZXIpID0gd2lkZ2V0LmdldF9zZWxlY3Rpb24oKS5nZXRfc2VsZWN0ZWQoKQorICAgICAgICBzdHlwZSA9IE5vbmUKKyAgICAgICAgaWYgaXRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIChuYW1lLGludGVyZmFjZSxwcm90b2NvbCxzdHlwZSxkb21haW4pID0gc2VsZi50cmVlbW9kZWwuZ2V0KGl0ZXIsMSwyLDMsNCw1KQorICAgICAgICBpZiBzdHlwZSA9PSBOb25lOgorICAgICAgICAgICAgc2VsZi5pbmZvX2xhYmVsLnNldF9tYXJrdXAoXygiPGk+Tm8gc2VydmljZSBjdXJyZW50bHkgc2VsZWN0ZWQuPC9pPiIpKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICNBc3luY2hyb25vdXMgcmVzb2x2aW5nCisgICAgICAgIHNlbGYuc2VydmVyLlJlc29sdmVTZXJ2aWNlKCBpbnQoaW50ZXJmYWNlKSwgaW50KHByb3RvY29sKSwgbmFtZSwgc3R5cGUsIGRvbWFpbiwgYXZhaGkuUFJPVE9fVU5TUEVDLCBkYnVzLlVJbnQzMigwKSwgcmVwbHlfaGFuZGxlcj1zZWxmLnNlcnZpY2VfcmVzb2x2ZWQsIGVycm9yX2hhbmRsZXI9c2VsZi5wcmludF9lcnJvcikKKworICAgIGRlZiBwcm90b25hbWUoc2VsZixwcm90b2NvbCk6CisgICAgICAgIGlmIHByb3RvY29sID09IGF2YWhpLlBST1RPX0lORVQ6CisgICAgICAgICAgICByZXR1cm4gIklQdjQiCisgICAgICAgIGlmIHByb3RvY29sID09IGF2YWhpLlBST1RPX0lORVQ2OgorICAgICAgICAgICAgcmV0dXJuICJJUHY2IgorICAgICAgICByZXR1cm4gIm4vYSIKKworICAgIGRlZiBzaW9jZ2lmbmFtZShzZWxmLCBpbnRlcmZhY2UpOgorICAgICAgICBpZiBpbnRlcmZhY2UgPD0gMDoKKyAgICAgICAgICAgIHJldHVybiAibi9hIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2VydmVyLkdldE5ldHdvcmtJbnRlcmZhY2VOYW1lQnlJbmRleChpbnRlcmZhY2UpCisKKyAgICBkZWYgZ2V0X2ludGVyZmFjZV9uYW1lKHNlbGYsIGludGVyZmFjZSwgcHJvdG9jb2wpOgorICAgICAgICBpZiBpbnRlcmZhY2UgPT0gYXZhaGkuSUZfVU5TUEVDIGFuZCBwcm90b2NvbCA9PSBhdmFoaS5QUk9UT19VTlNQRUM6CisgICAgICAgICAgICByZXR1cm4gIldpZGUgQXJlYSIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzdHIoc2VsZi5zaW9jZ2lmbmFtZShpbnRlcmZhY2UpKSArICIgIiArIHN0cihzZWxmLnByb3RvbmFtZShwcm90b2NvbCkpCisKKyAgICBkZWYgc2VydmljZV9yZXNvbHZlZChzZWxmLCBpbnRlcmZhY2UsIHByb3RvY29sLCBuYW1lLCBzdHlwZSwgZG9tYWluLCBob3N0LCBhcHJvdG9jb2wsIGFkZHJlc3MsIHBvcnQsIHR4dCwgZmxhZ3MpOgorICAgICAgICBwcmludCAiU2VydmljZSBkYXRhIGZvciBzZXJ2aWNlICclcycgb2YgdHlwZSAnJXMnIGluIGRvbWFpbiAnJXMnIG9uICVpLiVpOiIgJSAobmFtZSwgc3R5cGUsIGRvbWFpbiwgaW50ZXJmYWNlLCBwcm90b2NvbCkKKworICAgICAgICBwcmludCAiXHRIb3N0ICVzICglcyksIHBvcnQgJWksIFRYVCBkYXRhOiAlcyIgJSAoaG9zdCwgYWRkcmVzcywgcG9ydCwgc3RyKGF2YWhpLnR4dF9hcnJheV90b19zdHJpbmdfYXJyYXkodHh0KSkpCisKKyAgICAgICAgc2VsZi51cGRhdGVfbGFiZWwoaW50ZXJmYWNlLCBwcm90b2NvbCwgbmFtZSwgc3R5cGUsIGRvbWFpbiwgaG9zdCwgYXByb3RvY29sLCBhZGRyZXNzLCBwb3J0LCBhdmFoaS50eHRfYXJyYXlfdG9fc3RyaW5nX2FycmF5KHR4dCkpCisKKyAgICBkZWYgcHJpbnRfZXJyb3Ioc2VsZiwgZXJyKToKKyAgICAgICAgZXJyb3JfbGFiZWwgPSAiPGI+RXJyb3I6PC9iPiAlcyIgJSAoZXJyKQorICAgICAgICBzZWxmLmluZm9fbGFiZWwuc2V0X21hcmt1cChlcnJvcl9sYWJlbCkKKyAgICAgICAgcHJpbnQgIkVycm9yOiIsIHN0cihlcnIpCisKKyAgICBkZWYgbG9va3VwX3R5cGUoc2VsZiwgc3R5cGUpOgorICAgICAgICBnbG9iYWwgc2VydmljZV90eXBlX2RiCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2VfdHlwZV9kYltzdHlwZV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIHN0eXBlCisKKyAgICBkZWYgbmV3X3NlcnZpY2Uoc2VsZiwgaW50ZXJmYWNlLCBwcm90b2NvbCwgbmFtZSwgc3R5cGUsIGRvbWFpbiwgZmxhZ3MpOgorICAgICAgICBwcmludCAiRm91bmQgc2VydmljZSAnJXMnIG9mIHR5cGUgJyVzJyBpbiBkb21haW4gJyVzJyBvbiAlaS4laS4iICUgKG5hbWUsIHN0eXBlLCBkb21haW4sIGludGVyZmFjZSwgcHJvdG9jb2wpCisgICAgICAgIGlmIHNlbGYuemNfaWZhY2VzLmhhc19rZXkoKGludGVyZmFjZSxwcm90b2NvbCkpID09IEZhbHNlOgorCisgICAgICAgICAgICBpZm4gPSBzZWxmLmdldF9pbnRlcmZhY2VfbmFtZShpbnRlcmZhY2UsIHByb3RvY29sKQorCisgICAgICAgICAgICBzZWxmLnpjX2lmYWNlc1soaW50ZXJmYWNlLHByb3RvY29sKV0gPSBzZWxmLmluc2VydF9yb3coc2VsZi50cmVlbW9kZWwsIE5vbmUsIGlmbiwgTm9uZSxpbnRlcmZhY2UscHJvdG9jb2wsTm9uZSxkb21haW4pCisgICAgICAgIGlmIHNlbGYuemNfZG9tYWlucy5oYXNfa2V5KChpbnRlcmZhY2UscHJvdG9jb2wsZG9tYWluKSkgPT0gRmFsc2U6CisgICAgICAgICAgICBzZWxmLnpjX2RvbWFpbnNbKGludGVyZmFjZSxwcm90b2NvbCxkb21haW4pXSA9IHNlbGYuaW5zZXJ0X3JvdyhzZWxmLnRyZWVtb2RlbCwgc2VsZi56Y19pZmFjZXNbKGludGVyZmFjZSxwcm90b2NvbCldLCBkb21haW4sTm9uZSxpbnRlcmZhY2UscHJvdG9jb2wsTm9uZSxkb21haW4pCisgICAgICAgIGlmIHNlbGYuemNfdHlwZXMuaGFzX2tleSgoaW50ZXJmYWNlLHByb3RvY29sLHN0eXBlLGRvbWFpbikpID09IEZhbHNlOgorICAgICAgICAgICAgdGhpc0RvbWFpbiA9IHNlbGYuemNfZG9tYWluc1soaW50ZXJmYWNlLHByb3RvY29sLGRvbWFpbildCisgICAgICAgICAgICBzZWxmLnpjX3R5cGVzWyhpbnRlcmZhY2UscHJvdG9jb2wsc3R5cGUsZG9tYWluKV0gPSBzZWxmLmluc2VydF9yb3coc2VsZi50cmVlbW9kZWwsIHRoaXNEb21haW4sIHNlbGYubG9va3VwX3R5cGUoc3R5cGUpLCBuYW1lLCBpbnRlcmZhY2UsTm9uZSxOb25lLE5vbmUpCisgICAgICAgIHRyZWVpdGVyID0gc2VsZi5pbnNlcnRfcm93KHNlbGYudHJlZW1vZGVsLHNlbGYuemNfdHlwZXNbKGludGVyZmFjZSxwcm90b2NvbCxzdHlwZSxkb21haW4pXSwgbmFtZSwgbmFtZSwgaW50ZXJmYWNlLHByb3RvY29sLHN0eXBlLGRvbWFpbikKKyAgICAgICAgc2VsZi5zZXJ2aWNlc19icm93c2VkWyhpbnRlcmZhY2UsIHByb3RvY29sLCBuYW1lLCBzdHlwZSwgZG9tYWluKV0gPSB0cmVlaXRlcgorICAgICAgICAjIGV4cGFuZCB0aGUgdHJlZSBvZiB0aGlzIHBhdGgKKyAgICAgICAgc2VsZi50cmVlX3ZpZXcuZXhwYW5kX3RvX3BhdGgoc2VsZi50cmVlbW9kZWwuZ2V0X3BhdGgodHJlZWl0ZXIpKQorCisgICAgZGVmIHJlbW92ZV9zZXJ2aWNlKHNlbGYsIGludGVyZmFjZSwgcHJvdG9jb2wsIG5hbWUsIHN0eXBlLCBkb21haW4sIGZsYWdzKToKKyAgICAgICAgcHJpbnQgIlNlcnZpY2UgJyVzJyBvZiB0eXBlICclcycgaW4gZG9tYWluICclcycgb24gJWkuJWkgZGlzYXBwZWFyZWQuIiAlIChuYW1lLCBzdHlwZSwgZG9tYWluLCBpbnRlcmZhY2UsIHByb3RvY29sKQorICAgICAgICBzZWxmLmluZm9fbGFiZWwuc2V0X21hcmt1cCgiIikKKyAgICAgICAgdHJlZWl0ZXI9c2VsZi5zZXJ2aWNlc19icm93c2VkWyhpbnRlcmZhY2UsIHByb3RvY29sLCBuYW1lLCBzdHlwZSwgZG9tYWluKV0KKyAgICAgICAgcGFyZW50ID0gc2VsZi50cmVlbW9kZWwuaXRlcl9wYXJlbnQodHJlZWl0ZXIpCisgICAgICAgIHNlbGYudHJlZW1vZGVsLnJlbW92ZSh0cmVlaXRlcikKKyAgICAgICAgZGVsIHNlbGYuc2VydmljZXNfYnJvd3NlZFsoaW50ZXJmYWNlLCBwcm90b2NvbCwgbmFtZSwgc3R5cGUsIGRvbWFpbildCisgICAgICAgIGlmIHNlbGYudHJlZW1vZGVsLml0ZXJfaGFzX2NoaWxkKHBhcmVudCkgPT0gRmFsc2U6CisgICAgICAgICAgICB0cmVlaXRlcj1zZWxmLnpjX3R5cGVzWyhpbnRlcmZhY2UscHJvdG9jb2wsc3R5cGUsZG9tYWluKV0KKyAgICAgICAgICAgIHBhcmVudCA9IHNlbGYudHJlZW1vZGVsLml0ZXJfcGFyZW50KHRyZWVpdGVyKQorICAgICAgICAgICAgc2VsZi50cmVlbW9kZWwucmVtb3ZlKHRyZWVpdGVyKQorICAgICAgICAgICAgZGVsIHNlbGYuemNfdHlwZXNbKGludGVyZmFjZSxwcm90b2NvbCxzdHlwZSxkb21haW4pXQorICAgICAgICAgICAgaWYgc2VsZi50cmVlbW9kZWwuaXRlcl9oYXNfY2hpbGQocGFyZW50KSA9PSBGYWxzZToKKyAgICAgICAgICAgICAgICB0cmVlaXRlcj1zZWxmLnpjX2RvbWFpbnNbKGludGVyZmFjZSxwcm90b2NvbCxkb21haW4pXQorICAgICAgICAgICAgICAgIHBhcmVudCA9IHNlbGYudHJlZW1vZGVsLml0ZXJfcGFyZW50KHRyZWVpdGVyKQorICAgICAgICAgICAgICAgIHNlbGYudHJlZW1vZGVsLnJlbW92ZSh0cmVlaXRlcikKKyAgICAgICAgICAgICAgICBkZWwgc2VsZi56Y19kb21haW5zWyhpbnRlcmZhY2UscHJvdG9jb2wsZG9tYWluKV0KKyAgICAgICAgICAgICAgICBpZiBzZWxmLnRyZWVtb2RlbC5pdGVyX2hhc19jaGlsZChwYXJlbnQpID09IEZhbHNlOgorICAgICAgICAgICAgICAgICAgICB0cmVlaXRlcj1zZWxmLnpjX2lmYWNlc1soaW50ZXJmYWNlLHByb3RvY29sKV0KKyAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gc2VsZi50cmVlbW9kZWwuaXRlcl9wYXJlbnQodHJlZWl0ZXIpCisgICAgICAgICAgICAgICAgICAgIHNlbGYudHJlZW1vZGVsLnJlbW92ZSh0cmVlaXRlcikKKyAgICAgICAgICAgICAgICAgICAgZGVsIHNlbGYuemNfaWZhY2VzWyhpbnRlcmZhY2UscHJvdG9jb2wpXQorCisgICAgZGVmIG5ld19zZXJ2aWNlX3R5cGUoc2VsZiwgaW50ZXJmYWNlLCBwcm90b2NvbCwgc3R5cGUsIGRvbWFpbiwgZmxhZ3MpOgorICAgICAgICBnbG9iYWwgc2VydmljZV9icm93c2VycworCisgICAgICAgICMgQXJlIHdlIGFscmVhZHkgYnJvd3NpbmcgdGhpcyBkb21haW4gZm9yIHRoaXMgdHlwZT8KKyAgICAgICAgaWYgc2VydmljZV9icm93c2Vycy5oYXNfa2V5KChpbnRlcmZhY2UsIHByb3RvY29sLCBzdHlwZSwgZG9tYWluKSk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBwcmludCAiQnJvd3NpbmcgZm9yIHNlcnZpY2VzIG9mIHR5cGUgJyVzJyBpbiBkb21haW4gJyVzJyBvbiAlaS4laSAuLi4iICUgKHN0eXBlLCBkb21haW4sIGludGVyZmFjZSwgcHJvdG9jb2wpCisKKyAgICAgICAgYiA9IGRidXMuSW50ZXJmYWNlKHNlbGYuYnVzLmdldF9vYmplY3QoYXZhaGkuREJVU19OQU1FLCBzZWxmLnNlcnZlci5TZXJ2aWNlQnJvd3Nlck5ldyhpbnRlcmZhY2UsIHByb3RvY29sLCBzdHlwZSwgZG9tYWluLCBkYnVzLlVJbnQzMigwKSkpLCAgYXZhaGkuREJVU19JTlRFUkZBQ0VfU0VSVklDRV9CUk9XU0VSKQorICAgICAgICBiLmNvbm5lY3RfdG9fc2lnbmFsKCdJdGVtTmV3Jywgc2VsZi5uZXdfc2VydmljZSkKKyAgICAgICAgYi5jb25uZWN0X3RvX3NpZ25hbCgnSXRlbVJlbW92ZScsIHNlbGYucmVtb3ZlX3NlcnZpY2UpCisKKyAgICAgICAgc2VydmljZV9icm93c2Vyc1soaW50ZXJmYWNlLCBwcm90b2NvbCwgc3R5cGUsIGRvbWFpbildID0gYgorCisgICAgZGVmIGJyb3dzZV9kb21haW4oc2VsZiwgaW50ZXJmYWNlLCBwcm90b2NvbCwgZG9tYWluKToKKyAgICAgICAgZ2xvYmFsIHNlcnZpY2VfdHlwZV9icm93c2VycworCisgICAgICAgICMgQXJlIHdlIGFscmVhZHkgYnJvd3NpbmcgdGhpcyBkb21haW4/CisgICAgICAgIGlmIHNlcnZpY2VfdHlwZV9icm93c2Vycy5oYXNfa2V5KChpbnRlcmZhY2UsIHByb3RvY29sLCBkb21haW4pKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIHNlbGYuc3R5cGUgaXMgTm9uZToKKyAgICAgICAgICAgIHByaW50ICJCcm93c2luZyBkb21haW4gJyVzJyBvbiAlaS4laSAuLi4iICUgKGRvbWFpbiwgaW50ZXJmYWNlLCBwcm90b2NvbCkKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGIgPSBkYnVzLkludGVyZmFjZShzZWxmLmJ1cy5nZXRfb2JqZWN0KGF2YWhpLkRCVVNfTkFNRSwgc2VsZi5zZXJ2ZXIuU2VydmljZVR5cGVCcm93c2VyTmV3KGludGVyZmFjZSwgcHJvdG9jb2wsIGRvbWFpbiwgZGJ1cy5VSW50MzIoMCkpKSwgIGF2YWhpLkRCVVNfSU5URVJGQUNFX1NFUlZJQ0VfVFlQRV9CUk9XU0VSKQorICAgICAgICAgICAgZXhjZXB0IERCdXNFeGNlcHRpb24sIGU6CisgICAgICAgICAgICAgICAgcHJpbnQgZQorICAgICAgICAgICAgICAgIGVycm9yX21zZygiWW91IHNob3VsZCBjaGVjayB0aGF0IHRoZSBhdmFoaSBkYWVtb24gaXMgcnVubmluZy5cblxuRXJyb3IgOiAlcyIgJSBlKQorICAgICAgICAgICAgICAgIHN5cy5leGl0KDApCisKKyAgICAgICAgICAgIGIuY29ubmVjdF90b19zaWduYWwoJ0l0ZW1OZXcnLCBzZWxmLm5ld19zZXJ2aWNlX3R5cGUpCisKKyAgICAgICAgICAgIHNlcnZpY2VfdHlwZV9icm93c2Vyc1soaW50ZXJmYWNlLCBwcm90b2NvbCwgZG9tYWluKV0gPSBiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBuZXdfc2VydmljZV90eXBlKGludGVyZmFjZSwgcHJvdG9jb2wsIHN0eXBlLCBkb21haW4pCisKKyAgICBkZWYgbmV3X2RvbWFpbihzZWxmLGludGVyZmFjZSwgcHJvdG9jb2wsIGRvbWFpbiwgZmxhZ3MpOgorICAgICAgICBpZiBzZWxmLnpjX2lmYWNlcy5oYXNfa2V5KChpbnRlcmZhY2UscHJvdG9jb2wpKSA9PSBGYWxzZToKKyAgICAgICAgICAgIGlmbiA9IHNlbGYuZ2V0X2ludGVyZmFjZV9uYW1lKGludGVyZmFjZSwgcHJvdG9jb2wpCisgICAgICAgICAgICBzZWxmLnpjX2lmYWNlc1soaW50ZXJmYWNlLHByb3RvY29sKV0gPSBzZWxmLmluc2VydF9yb3coc2VsZi50cmVlbW9kZWwsIE5vbmUsIGlmbixOb25lLGludGVyZmFjZSxwcm90b2NvbCxOb25lLGRvbWFpbikKKyAgICAgICAgaWYgc2VsZi56Y19kb21haW5zLmhhc19rZXkoKGludGVyZmFjZSxwcm90b2NvbCxkb21haW4pKSA9PSBGYWxzZToKKyAgICAgICAgICAgIHNlbGYuemNfZG9tYWluc1soaW50ZXJmYWNlLHByb3RvY29sLGRvbWFpbildID0gc2VsZi5pbnNlcnRfcm93KHNlbGYudHJlZW1vZGVsLCBzZWxmLnpjX2lmYWNlc1soaW50ZXJmYWNlLHByb3RvY29sKV0sIGRvbWFpbixOb25lLGludGVyZmFjZSxwcm90b2NvbCxOb25lLGRvbWFpbikKKyAgICAgICAgaWYgZG9tYWluICE9ICJsb2NhbCI6CisgICAgICAgICAgICBzZWxmLmJyb3dzZV9kb21haW4oaW50ZXJmYWNlLCBwcm90b2NvbCwgZG9tYWluKQorCisgICAgZGVmIHBhaXJfdG9fZGljdChzZWxmLCBsKToKKyAgICAgICAgcmVzID0gZGljdCgpCisgICAgICAgIGZvciBlbCBpbiBsOgorICAgICAgICAgICAgaWYgIj0iIG5vdCBpbiBlbDoKKyAgICAgICAgICAgICAgICByZXNbZWxdPScnCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHRtcCA9IGVsLnNwbGl0KCc9JywxKQorICAgICAgICAgICAgICAgIGlmIGxlbih0bXBbMF0pID4gMDoKKyAgICAgICAgICAgICAgICAgICAgcmVzW3RtcFswXV0gPSB0bXBbMV0KKyAgICAgICAgcmV0dXJuIHJlcworCisKKyAgICBkZWYgdXBkYXRlX2xhYmVsKHNlbGYsaW50ZXJmYWNlLCBwcm90b2NvbCwgbmFtZSwgc3R5cGUsIGRvbWFpbiwgaG9zdCwgYXByb3RvY29sLCBhZGRyZXNzLCBwb3J0LCB0eHQpOgorICAgICAgICBpZiBsZW4odHh0KSAhPSAwOgorICAgICAgICAgICAgdHh0cyA9ICIiCisgICAgICAgICAgICB0eHRkID0gc2VsZi5wYWlyX3RvX2RpY3QodHh0KQorICAgICAgICAgICAgZm9yIGssdiBpbiB0eHRkLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgdHh0cys9IjxiPiIgKyBfKCJUWFQiKSArICIgPGk+JXM8L2k+PC9iPiA9ICVzXG4iICUgKGssdikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHR4dHMgPSAiPGI+IiArIF8oIlRYVCBEYXRhOiIpICsgIjwvYj4gPGk+IiArIF8oImVtcHR5IikgKyAiPC9pPiIKKworICAgICAgICBpbmZvcyA9ICI8Yj4iICsgXygiU2VydmljZSBUeXBlOiIpICsgIjwvYj4gJXNcbiIKKyAgICAgICAgaW5mb3MgKz0gIjxiPiIgKyBfKCJTZXJ2aWNlIE5hbWU6IikgKyAiPC9iPiAlc1xuIgorICAgICAgICBpbmZvcyArPSAiPGI+IiArIF8oIkRvbWFpbiBOYW1lOiIpICsgIjwvYj4gJXNcbiIKKyAgICAgICAgaW5mb3MgKz0gIjxiPiIgKyBfKCJJbnRlcmZhY2U6IikgKyAiPC9iPiAlcyAlc1xuIgorICAgICAgICBpbmZvcyArPSAiPGI+IiArIF8oIkFkZHJlc3M6IikgKyAiPC9iPiAlcy8lczolaVxuJXMiCisgICAgICAgIGluZm9zID0gaW5mb3MgJSAoc3R5cGUsIG5hbWUsIGRvbWFpbiwgc2VsZi5zaW9jZ2lmbmFtZShpbnRlcmZhY2UpLCBzZWxmLnByb3RvbmFtZShwcm90b2NvbCksIGhvc3QsIGFkZHJlc3MsIHBvcnQsIHR4dHMuc3RyaXAoKSkKKyAgICAgICAgc2VsZi5pbmZvX2xhYmVsLnNldF9tYXJrdXAoaW5mb3MpCisKKyAgICBkZWYgaW5zZXJ0X3JvdyhzZWxmLCBtb2RlbCxwYXJlbnQsCisgICAgICAgICAgICAgICAgICAgY29udGVudCwgbmFtZSwgaW50ZXJmYWNlLHByb3RvY29sLHN0eXBlLGRvbWFpbik6CisgICAgICAgIG15aXRlcj1tb2RlbC5pbnNlcnRfYWZ0ZXIocGFyZW50LE5vbmUpCisgICAgICAgIG1vZGVsLnNldChteWl0ZXIsMCxjb250ZW50LDEsbmFtZSwyLHN0cihpbnRlcmZhY2UpLDMsc3RyKHByb3RvY29sKSw0LHN0eXBlLDUsZG9tYWluKQorICAgICAgICByZXR1cm4gbXlpdGVyCisKKyAgICBkZWYgbmV3KHNlbGYpOgorICAgICAgICBzZWxmLnRyZWVtb2RlbD1ndGsuVHJlZVN0b3JlKGdvYmplY3QuVFlQRV9TVFJJTkcsIGdvYmplY3QuVFlQRV9TVFJJTkcsIGdvYmplY3QuVFlQRV9TVFJJTkcsIGdvYmplY3QuVFlQRV9TVFJJTkcsIGdvYmplY3QuVFlQRV9TVFJJTkcsIGdvYmplY3QuVFlQRV9TVFJJTkcpCisgICAgICAgIHNlbGYudHJlZV92aWV3LnNldF9tb2RlbChzZWxmLnRyZWVtb2RlbCkKKworICAgICAgICAjY3JlYXRpbmcgdGhlIGNvbHVtbnMgaGVhZGVycworICAgICAgICBzZWxmLnRyZWVfdmlldy5zZXRfaGVhZGVyc192aXNpYmxlKEZhbHNlKQorICAgICAgICByZW5kZXJlcj1ndGsuQ2VsbFJlbmRlcmVyVGV4dCgpCisgICAgICAgIGNvbHVtbj1ndGsuVHJlZVZpZXdDb2x1bW4oIiIscmVuZGVyZXIsIHRleHQ9MCkKKyAgICAgICAgY29sdW1uLnNldF9yZXNpemFibGUoVHJ1ZSkKKyAgICAgICAgY29sdW1uLnNldF9zaXppbmcoIkdUS19UUkVFX1ZJRVdfQ09MVU1OX0dST1dfT05MWSIpOworICAgICAgICBjb2x1bW4uc2V0X2V4cGFuZChUcnVlKTsKKyAgICAgICAgc2VsZi50cmVlX3ZpZXcuYXBwZW5kX2NvbHVtbihjb2x1bW4pCisKKyAgICAgICAgc2VsZi5kb21haW4gPSBOb25lCisgICAgICAgIHNlbGYuc3R5cGUgPSBOb25lCisgICAgICAgIHNlbGYuemNfaWZhY2VzID0ge30KKyAgICAgICAgc2VsZi56Y19kb21haW5zID0ge30KKyAgICAgICAgc2VsZi56Y190eXBlcyA9IHt9CisgICAgICAgIHNlbGYuc2VydmljZXNfYnJvd3NlZCA9IHt9CisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5idXMgPSBkYnVzLlN5c3RlbUJ1cygpCisgICAgICAgICAgICBzZWxmLnNlcnZlciA9IGRidXMuSW50ZXJmYWNlKHNlbGYuYnVzLmdldF9vYmplY3QoYXZhaGkuREJVU19OQU1FLCBhdmFoaS5EQlVTX1BBVEhfU0VSVkVSKSwgYXZhaGkuREJVU19JTlRFUkZBQ0VfU0VSVkVSKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgcHJpbnQgIkZhaWxlZCB0byBjb25uZWN0IHRvIEF2YWhpIFNlcnZlciAoSXMgaXQgcnVubmluZz8pOiAlcyIgJSBlCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgICAgIGlmIHNlbGYuZG9tYWluIGlzIE5vbmU6CisgICAgICAgICAgICAjIEV4cGxpY2l0bHkgYnJvd3NlIC5sb2NhbAorICAgICAgICAgICAgc2VsZi5icm93c2VfZG9tYWluKGF2YWhpLklGX1VOU1BFQywgYXZhaGkuUFJPVE9fVU5TUEVDLCAibG9jYWwiKQorCisgICAgICAgICAgICAjIEJyb3dzZSBmb3Igb3RoZXIgYnJvd3NhYmxlIGRvbWFpbnMKKyAgICAgICAgICAgIGRiID0gZGJ1cy5JbnRlcmZhY2Uoc2VsZi5idXMuZ2V0X29iamVjdChhdmFoaS5EQlVTX05BTUUsIHNlbGYuc2VydmVyLkRvbWFpbkJyb3dzZXJOZXcoYXZhaGkuSUZfVU5TUEVDLCBhdmFoaS5QUk9UT19VTlNQRUMsICIiLCBhdmFoaS5ET01BSU5fQlJPV1NFUl9CUk9XU0UsIGRidXMuVUludDMyKDApKSksIGF2YWhpLkRCVVNfSU5URVJGQUNFX0RPTUFJTl9CUk9XU0VSKQorICAgICAgICAgICAgZGIuY29ubmVjdF90b19zaWduYWwoJ0l0ZW1OZXcnLCBzZWxmLm5ld19kb21haW4pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIEp1c3QgYnJvd3NlIHRoZSBkb21haW4gdGhlIHVzZXIgd2FudHMgdXMgdG8gYnJvd3NlCisgICAgICAgICAgICBzZWxmLmJyb3dzZV9kb21haW4oYXZhaGkuSUZfVU5TUEVDLCBhdmFoaS5QUk9UT19VTlNQRUMsIGRvbWFpbikKKworICAgIGRlZiBndGtfbWFpbl9xdWl0KHNlbGYsICphcmdzKToKKyAgICAgICAgZ3RrLm1haW5fcXVpdCgpCisKK2RlZiBtYWluKCk6CisgICAgbWFpbl93aW5kb3cgPSBNYWluX3dpbmRvdygpCisgICAgZ3RrLm1haW4oKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLXB5dGhvbi9hdmFoaS9NYWtlZmlsZS5hbSBiL2F2YWhpLTAuNi4zMS9hdmFoaS1weXRob24vYXZhaGkvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ViNjdkMAotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1weXRob24vYXZhaGkvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSw2MSBAQAorIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKyMKKyMgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyMgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyMgVVNBLgorCitFWFRSQV9ESVNUID0gX19pbml0X18ucHkgU2VydmljZVR5cGVEYXRhYmFzZS5weS5pbgorCitwa2dsaWJkYXRhZGlyPSQobGliZGlyKS9hdmFoaQorCitpZiBIQVZFX1BZVEhPTgorCithdmFoaWRpciA9ICQocHl0aG9uZGlyKS9hdmFoaQorCitpZiBIQVZFX0dEQk0KK25vZGlzdF9hdmFoaV9TQ1JJUFRTID0gU2VydmljZVR5cGVEYXRhYmFzZS5weQorCitTZXJ2aWNlVHlwZURhdGFiYXNlLnB5OiBTZXJ2aWNlVHlwZURhdGFiYXNlLnB5LmluCisJJChBTV9WX0dFTilzZWQgLWUgJ3MsQFBZVEhPTlxALCQoUFlUSE9OKSxnJyBcCisJCS1lICdzLEBEQk1cQCxnZGJtLGcnIFwKKwkJLWUgJ3MsQEZJUlNUX0tFWVxALGtleSA9IHNlbGYuZGIuZmlyc3RrZXkoKSxnJyBcCisJCS1lICdzLEBDSEVDS19LRVlcQCx3aGlsZSBrZXkgaXMgbm90IE5vbmU6LGcnIFwKKwkJLWUgJ3MsQE5FWFRfS0VZXEAsa2V5ID0gc2VsZi5kYi5uZXh0a2V5KGtleSksZycgXAorCQktZSAncyxAcGtnbGliZGF0YWRpclxALCQocGtnbGliZGF0YWRpciksZycgJDwgPiAkQCAmJiBcCisJY2htb2QgK3ggJEAKK2VuZGlmCisKK2lmIEhBVkVfREJNCitub2Rpc3RfYXZhaGlfU0NSSVBUUyA9IFNlcnZpY2VUeXBlRGF0YWJhc2UucHkKKworU2VydmljZVR5cGVEYXRhYmFzZS5weTogU2VydmljZVR5cGVEYXRhYmFzZS5weS5pbgorCSQoQU1fVl9HRU4pc2VkIC1lICdzLEBQWVRIT05cQCwkKFBZVEhPTiksZycgXAorCQktZSAncyxAREJNXEAsZGJtLGcnIFwKKwkJLWUgJ3MsQEZJUlNUX0tFWVxALGtleXMgPSBzZWxmLmRiLmtleXMoKSxnJyBcCisJCS1lICdzLEBDSEVDS19LRVlcQCxmb3Iga2V5IGluIGtleXM6LGcnIFwKKwkJLWUgJ3MsQE5FWFRfS0VZXEAsLGcnIFwKKwkJLWUgJ3MsQHBrZ2xpYmRhdGFkaXJcQCwkKHBrZ2xpYmRhdGFkaXIpLGcnICQ8ID4gJEAgJiYgXAorCWNobW9kICt4ICRACitlbmRpZgorCithdmFoaV9QWVRIT04gPSAkKGF2YWhpX1NDUklQVFMpCisKK2lmIEhBVkVfUFlUSE9OX0RCVVMKKworYXZhaGlfUFlUSE9OICs9IF9faW5pdF9fLnB5CisKK2VuZGlmCitlbmRpZgorCitDTEVBTkZJTEVTPSoucHljICoucHlvIFNlcnZpY2VUeXBlRGF0YWJhc2UucHkKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1weXRob24vYXZhaGkvTWFrZWZpbGUuaW4gYi9hdmFoaS0wLjYuMzEvYXZhaGktcHl0aG9uL2F2YWhpL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMWIxMzQKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktcHl0aG9uL2F2YWhpL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNjUzIEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjExLjMgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACisKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisjCisjIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisjIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisjIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisjIFVTQS4KKworVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorQEhBVkVfUFlUSE9OX0RCVVNfVFJVRUBASEFWRV9QWVRIT05fVFJVRUBhbV9fYXBwZW5kXzEgPSBfX2luaXRfXy5weQorc3ViZGlyID0gYXZhaGktcHl0aG9uL2F2YWhpCitESVNUX0NPTU1PTiA9ICQoYW1fX2F2YWhpX1BZVEhPTl9ESVNUKSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gXAorCSQoc3JjZGlyKS9NYWtlZmlsZS5pbgorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL2FjeF9wdGhyZWFkLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9nY2Nfc3RhY2tfcHJvdGVjdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vZ2NjX3Zpc2liaWxpdHkubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2ludGx0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9pbnRyb3NwZWN0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9sdG9wdGlvbnMubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2x0c3VnYXIubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2x0dmVyc2lvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHR+b2Jzb2xldGUubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL25scy5tNCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9weXRob24ubTQgXAorCSQodG9wX3NyY2RpcikvYWNpbmNsdWRlLm00ICQodG9wX3NyY2RpcikvY29tbW9uL2RveHlnZW4ubTQgXAorCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCithbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQoQUNMT0NBTF9NNCkKK21raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCitDT05GSUdfQ0xFQU5fRklMRVMgPQorQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KK2FtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOworYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKKyAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAorICAgICopIGY9JCRwOzsgXAorICBlc2FjOworYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOworYW1fX2luc3RhbGxfbWF4ID0gNDAKK2FtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCisgIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKK2FtX19ub2Jhc2Vfc3RyaXAgPSBcCisgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgorYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAorICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAorICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAorICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCisgICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAorICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAorICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKK2FtX19iYXNlX2xpc3QgPSBcCisgIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCisgIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKK2FtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIgPSB7IFwKKyAgdGVzdCAteiAiJCRmaWxlcyIgXAorICAgIHx8IHsgdGVzdCAhIC1kICIkJGRpciIgJiYgdGVzdCAhIC1mICIkJGRpciIgJiYgdGVzdCAhIC1yICIkJGRpciI7IH0gXAorICAgIHx8IHsgZWNobyAiICggY2QgJyQkZGlyJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKKyAgICAgICAgICQoYW1fX2NkKSAiJCRkaXIiICYmIHJtIC1mICQkZmlsZXM7IH07IFwKKyAgfQorYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKGF2YWhpZGlyKSIgIiQoREVTVERJUikkKGF2YWhpZGlyKSIKK1NDUklQVFMgPSAkKG5vZGlzdF9hdmFoaV9TQ1JJUFRTKQorQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCithbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCithbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICIgJEA7CitBTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCithbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfYXRfMCA9IEAKK1NPVVJDRVMgPQorRElTVF9TT1VSQ0VTID0KK2FtX19hdmFoaV9QWVRIT05fRElTVCA9IF9faW5pdF9fLnB5CithbV9fcHlfY29tcGlsZSA9IFBZVEhPTj0kKFBZVEhPTikgJChTSEVMTCkgJChweV9jb21waWxlKQorcHlfY29tcGlsZSA9ICQodG9wX3NyY2RpcikvcHktY29tcGlsZQorRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FMTF9MSU5HVUFTID0gQEFMTF9MSU5HVUFTQAorQU1UQVIgPSBAQU1UQVJACitBTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKK0FSID0gQEFSQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FWQUhJX0FVVE9JUERfR1JPVVAgPSBAQVZBSElfQVVUT0lQRF9HUk9VUEAKK0FWQUhJX0FVVE9JUERfVVNFUiA9IEBBVkFISV9BVVRPSVBEX1VTRVJACitBVkFISV9HUk9VUCA9IEBBVkFISV9HUk9VUEAKK0FWQUhJX1BSSVZfQUNDRVNTX0dST1VQID0gQEFWQUhJX1BSSVZfQUNDRVNTX0dST1VQQAorQVZBSElfVVNFUiA9IEBBVkFISV9VU0VSQAorQVdLID0gQEFXS0AKK0NBVEFMT0dTID0gQENBVEFMT0dTQAorQ0FUT0JKRVhUID0gQENBVE9CSkVYVEAKK0NDID0gQENDQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RBVEFESVJOQU1FID0gQERBVEFESVJOQU1FQAorREJVU19DRkxBR1MgPSBAREJVU19DRkxBR1NACitEQlVTX0xJQlMgPSBAREJVU19MSUJTQAorREJVU19TWVNURU1fQlVTX0RFRkFVTFRfQUREUkVTUyA9IEBEQlVTX1NZU1RFTV9CVVNfREVGQVVMVF9BRERSRVNTQAorREJVU19TWVNfRElSID0gQERCVVNfU1lTX0RJUkAKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitETExUT09MID0gQERMTFRPT0xACitET1hZR0VOX1BBUEVSX1NJWkUgPSBARE9YWUdFTl9QQVBFUl9TSVpFQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitEWF9DT05GSUcgPSBARFhfQ09ORklHQAorRFhfRE9DRElSID0gQERYX0RPQ0RJUkAKK0RYX0RPVCA9IEBEWF9ET1RACitEWF9ET1hZR0VOID0gQERYX0RPWFlHRU5ACitEWF9EVklQUyA9IEBEWF9EVklQU0AKK0RYX0VHUkVQID0gQERYX0VHUkVQQAorRFhfRU5WID0gQERYX0VOVkAKK0RYX0ZMQUdfY2hpID0gQERYX0ZMQUdfY2hpQAorRFhfRkxBR19jaG0gPSBARFhfRkxBR19jaG1ACitEWF9GTEFHX2RvYyA9IEBEWF9GTEFHX2RvY0AKK0RYX0ZMQUdfZG90ID0gQERYX0ZMQUdfZG90QAorRFhfRkxBR19odG1sID0gQERYX0ZMQUdfaHRtbEAKK0RYX0ZMQUdfbWFuID0gQERYX0ZMQUdfbWFuQAorRFhfRkxBR19wZGYgPSBARFhfRkxBR19wZGZACitEWF9GTEFHX3BzID0gQERYX0ZMQUdfcHNACitEWF9GTEFHX3J0ZiA9IEBEWF9GTEFHX3J0ZkAKK0RYX0ZMQUdfeG1sID0gQERYX0ZMQUdfeG1sQAorRFhfSEhDID0gQERYX0hIQ0AKK0RYX0xBVEVYID0gQERYX0xBVEVYQAorRFhfTUFLRUlOREVYID0gQERYX01BS0VJTkRFWEAKK0RYX1BERkxBVEVYID0gQERYX1BERkxBVEVYQAorRFhfUEVSTCA9IEBEWF9QRVJMQAorRFhfUFJPSkVDVCA9IEBEWF9QUk9KRUNUQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFWEVFWFQgPSBARVhFRVhUQAorRkdSRVAgPSBARkdSRVBACitHQUNVVElMID0gQEdBQ1VUSUxACitHRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAorR0xJQjIwX0NGTEFHUyA9IEBHTElCMjBfQ0ZMQUdTQAorR0xJQjIwX0xJQlMgPSBAR0xJQjIwX0xJQlNACitHTU9GSUxFUyA9IEBHTU9GSUxFU0AKK0dNU0dGTVQgPSBAR01TR0ZNVEAKK0dPQkpFQ1RfQ0ZMQUdTID0gQEdPQkpFQ1RfQ0ZMQUdTQAorR09CSkVDVF9MSUJTID0gQEdPQkpFQ1RfTElCU0AKK0dSRVAgPSBAR1JFUEAKK0dUSzIwX0NGTEFHUyA9IEBHVEsyMF9DRkxBR1NACitHVEsyMF9MSUJTID0gQEdUSzIwX0xJQlNACitHVEszMF9DRkxBR1MgPSBAR1RLMzBfQ0ZMQUdTQAorR1RLMzBfTElCUyA9IEBHVEszMF9MSUJTQAorSE9XTF9DT01QQVRfVkVSU0lPTiA9IEBIT1dMX0NPTVBBVF9WRVJTSU9OQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitJTlNUT0JKRVhUID0gQElOU1RPQkpFWFRACitJTlRMTElCUyA9IEBJTlRMTElCU0AKK0lOVExUT09MX0VYVFJBQ1QgPSBASU5UTFRPT0xfRVhUUkFDVEAKK0lOVExUT09MX01FUkdFID0gQElOVExUT09MX01FUkdFQAorSU5UTFRPT0xfUEVSTCA9IEBJTlRMVE9PTF9QRVJMQAorSU5UTFRPT0xfVVBEQVRFID0gQElOVExUT09MX1VQREFURUAKK0lOVFJPU1BFQ1RJT05fQ0ZMQUdTID0gQElOVFJPU1BFQ1RJT05fQ0ZMQUdTQAorSU5UUk9TUEVDVElPTl9DT01QSUxFUiA9IEBJTlRST1NQRUNUSU9OX0NPTVBJTEVSQAorSU5UUk9TUEVDVElPTl9HRU5FUkFURSA9IEBJTlRST1NQRUNUSU9OX0dFTkVSQVRFQAorSU5UUk9TUEVDVElPTl9HSVJESVIgPSBASU5UUk9TUEVDVElPTl9HSVJESVJACitJTlRST1NQRUNUSU9OX0xJQlMgPSBASU5UUk9TUEVDVElPTl9MSUJTQAorSU5UUk9TUEVDVElPTl9NQUtFRklMRSA9IEBJTlRST1NQRUNUSU9OX01BS0VGSUxFQAorSU5UUk9TUEVDVElPTl9TQ0FOTkVSID0gQElOVFJPU1BFQ1RJT05fU0NBTk5FUkAKK0lOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUiA9IEBJTlRST1NQRUNUSU9OX1RZUEVMSUJESVJACitMRCA9IEBMREAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQkFWQUhJX0NMSUVOVF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ0xJRU5UX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPTU1PTl9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ09NTU9OX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPTVBBVF9IT1dMX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DT01QQVRfSE9XTF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9DT01QQVRfTElCRE5TX1NEX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DT01QQVRfTElCRE5TX1NEX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPUkVfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NPUkVfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfR0xJQl9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfR0xJQl9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9HT0JKRUNUX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9HT0JKRUNUX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX1FUM19WRVJTSU9OX0lORk8gPSBATElCQVZBSElfUVQzX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX1FUNF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfUVQ0X1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX1VJX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9VSV9WRVJTSU9OX0lORk9ACitMSUJEQUVNT05fQ0ZMQUdTID0gQExJQkRBRU1PTl9DRkxBR1NACitMSUJEQUVNT05fTElCUyA9IEBMSUJEQUVNT05fTElCU0AKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKK0xOX1MgPSBATE5fU0AKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKK01DUyA9IEBNQ1NACitNREFTU0VNQkxFUiA9IEBNREFTU0VNQkxFUkAKK01LRElSX1AgPSBATUtESVJfUEAKK01LSU5TVEFMTERJUlMgPSBATUtJTlNUQUxMRElSU0AKK01PQ19RVDMgPSBATU9DX1FUM0AKK01PQ19RVDQgPSBATU9DX1FUNEAKK01PTk9ET0NFUiA9IEBNT05PRE9DRVJACitNT05PRE9DX0NGTEFHUyA9IEBNT05PRE9DX0NGTEFHU0AKK01PTk9ET0NfRElSID0gQE1PTk9ET0NfRElSQAorTU9OT0RPQ19MSUJTID0gQE1PTk9ET0NfTElCU0AKK01TR0ZNVCA9IEBNU0dGTVRACitNU0dGTVRfT1BUUyA9IEBNU0dGTVRfT1BUU0AKK01TR01FUkdFID0gQE1TR01FUkdFQAorTk0gPSBATk1ACitOTUVESVQgPSBATk1FRElUQAorT0JKRFVNUCA9IEBPQkpEVU1QQAorT0JKRVhUID0gQE9CSkVYVEAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQS0dfQ09ORklHX0xJQkRJUiA9IEBQS0dfQ09ORklHX0xJQkRJUkAKK1BLR19DT05GSUdfUEFUSCA9IEBQS0dfQ09ORklHX1BBVEhACitQT0ZJTEVTID0gQFBPRklMRVNACitQT1NVQiA9IEBQT1NVQkAKK1BPX0lOX0RBVEFESVJfRkFMU0UgPSBAUE9fSU5fREFUQURJUl9GQUxTRUAKK1BPX0lOX0RBVEFESVJfVFJVRSA9IEBQT19JTl9EQVRBRElSX1RSVUVACitQVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACitQVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKK1BUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACitQWVRIT04gPSBAUFlUSE9OQAorUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKK1BZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACitQWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACitQWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKK1FUM19DRkxBR1MgPSBAUVQzX0NGTEFHU0AKK1FUM19MSUJTID0gQFFUM19MSUJTQAorUVQ0X0NGTEFHUyA9IEBRVDRfQ0ZMQUdTQAorUVQ0X0xJQlMgPSBAUVQ0X0xJQlNACitSQU5MSUIgPSBAUkFOTElCQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTVE9XID0gQFNUT1dACitTVFJJUCA9IEBTVFJJUEAKK1VTRV9OTFMgPSBAVVNFX05MU0AKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1ZJU0lCSUxJVFlfSElEREVOX0NGTEFHUyA9IEBWSVNJQklMSVRZX0hJRERFTl9DRkxBR1NACitYR0VUVEVYVCA9IEBYR0VUVEVYVEAKK1hNTF9DRkxBR1MgPSBAWE1MX0NGTEFHU0AKK1hNTF9MSUJTID0gQFhNTF9MSUJTQAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorYWNfY3RfQVIgPSBAYWNfY3RfQVJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithY3hfcHRocmVhZF9jb25maWcgPSBAYWN4X3B0aHJlYWRfY29uZmlnQAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACithdmFoaV9ydW50aW1lX2RpciA9IEBhdmFoaV9ydW50aW1lX2RpckAKK2F2YWhpX3NvY2tldCA9IEBhdmFoaV9zb2NrZXRACithdmFoaWxvY2FsZWRpciA9IEBhdmFoaWxvY2FsZWRpckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraGF2ZV9wa2dfY29uZmlnID0gQGhhdmVfcGtnX2NvbmZpZ0AKK2hhdmVfeG1sdG9tYW4gPSBAaGF2ZV94bWx0b21hbkAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitpbnRlcmZhY2VzZGlyID0gQGludGVyZmFjZXNkaXJACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKK3BrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitweWV4ZWNkaXIgPSBAcHlleGVjZGlyQAorcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3N5c3RlbWRzeXN0ZW11bml0ZGlyID0gQHN5c3RlbWRzeXN0ZW11bml0ZGlyQAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK3RvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKK3RvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitFWFRSQV9ESVNUID0gX19pbml0X18ucHkgU2VydmljZVR5cGVEYXRhYmFzZS5weS5pbgorcGtnbGliZGF0YWRpciA9ICQobGliZGlyKS9hdmFoaQorQEhBVkVfUFlUSE9OX1RSVUVAYXZhaGlkaXIgPSAkKHB5dGhvbmRpcikvYXZhaGkKK0BIQVZFX0RCTV9UUlVFQEBIQVZFX1BZVEhPTl9UUlVFQG5vZGlzdF9hdmFoaV9TQ1JJUFRTID0gU2VydmljZVR5cGVEYXRhYmFzZS5weQorQEhBVkVfR0RCTV9UUlVFQEBIQVZFX1BZVEhPTl9UUlVFQG5vZGlzdF9hdmFoaV9TQ1JJUFRTID0gU2VydmljZVR5cGVEYXRhYmFzZS5weQorQEhBVkVfUFlUSE9OX1RSVUVAYXZhaGlfUFlUSE9OID0gJChhdmFoaV9TQ1JJUFRTKSAkKGFtX19hcHBlbmRfMSkKK0NMRUFORklMRVMgPSAqLnB5YyAqLnB5byBTZXJ2aWNlVHlwZURhdGFiYXNlLnB5CithbGw6IGFsbC1hbQorCisuU1VGRklYRVM6CiskKHNyY2RpcikvTWFrZWZpbGUuaW46ICAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAorCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiBhdmFoaS1weXRob24vYXZhaGkvTWFrZWZpbGUnOyBcCisJJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1mb3JlaWduIGF2YWhpLXB5dGhvbi9hdmFoaS9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CitpbnN0YWxsLW5vZGlzdF9hdmFoaVNDUklQVFM6ICQobm9kaXN0X2F2YWhpX1NDUklQVFMpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJdGVzdCAteiAiJChhdmFoaWRpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKGF2YWhpZGlyKSIKKwlAbGlzdD0nJChub2Rpc3RfYXZhaGlfU0NSSVBUUyknOyB0ZXN0IC1uICIkKGF2YWhpZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICBpZiB0ZXN0IC1mICIkJGQkJHAiOyB0aGVuIGVjaG8gIiQkZCQkcCI7IGVjaG8gIiQkcCI7IGVsc2UgOjsgZmk7IFwKKwlkb25lIHwgXAorCXNlZCAtZSAncDtzLC4qLywsO24nIFwKKwkgICAgLWUgJ2g7c3wuKnwufCcgXAorCSAgICAtZSAncDt4O3MsLiovLCw7JCh0cmFuc2Zvcm0pJyB8IHNlZCAnTjtOO047cyxcbiwgLGcnIHwgXAorCSQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiI7IGRpcnNbIi4iXSA9IDE7IH0gXAorCSAgeyBkPSQkMzsgaWYgKGRpcnNbZF0gIT0gMSkgeyBwcmludCAiZCIsIGQ7IGRpcnNbZF0gPSAxIH0gXAorCSAgICBpZiAoJCQyID09ICQkNCkgeyBmaWxlc1tkXSA9IGZpbGVzW2RdICIgIiAkJDE7IFwKKwkgICAgICBpZiAoKytuW2RdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgeyBcCisJCXByaW50ICJmIiwgZCwgZmlsZXNbZF07IG5bZF0gPSAwOyBmaWxlc1tkXSA9ICIiIH0gfSBcCisJICAgIGVsc2UgeyBwcmludCAiZiIsIGQgIi8iICQkNCwgJCQxIH0gfSBcCisJICBFTkQgeyBmb3IgKGQgaW4gZmlsZXMpIHByaW50ICJmIiwgZCwgZmlsZXNbZF0gfScgfCBcCisJd2hpbGUgcmVhZCB0eXBlIGRpciBmaWxlczsgZG8gXAorCSAgICAgaWYgdGVzdCAiJCRkaXIiID0gLjsgdGhlbiBkaXI9OyBlbHNlIGRpcj0vJCRkaXI7IGZpOyBcCisJICAgICB0ZXN0IC16ICIkJGZpbGVzIiB8fCB7IFwKKwkgICAgICAgZWNobyAiICQoSU5TVEFMTF9TQ1JJUFQpICQkZmlsZXMgJyQoREVTVERJUikkKGF2YWhpZGlyKSQkZGlyJyI7IFwKKwkgICAgICAgJChJTlNUQUxMX1NDUklQVCkgJCRmaWxlcyAiJChERVNURElSKSQoYXZhaGlkaXIpJCRkaXIiIHx8IGV4aXQgJCQ/OyBcCisJICAgICB9IFwKKwk7IGRvbmUKKwordW5pbnN0YWxsLW5vZGlzdF9hdmFoaVNDUklQVFM6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChub2Rpc3RfYXZhaGlfU0NSSVBUUyknOyB0ZXN0IC1uICIkKGF2YWhpZGlyKSIgfHwgZXhpdCAwOyBcCisJZmlsZXM9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IFwKKwkgICAgICAgc2VkIC1lICdzLC4qLywsOyQodHJhbnNmb3JtKSdgOyBcCisJZGlyPSckKERFU1RESVIpJChhdmFoaWRpciknOyAkKGFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIpCisKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJzCitpbnN0YWxsLWF2YWhpUFlUSE9OOiAkKGF2YWhpX1BZVEhPTikKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwl0ZXN0IC16ICIkKGF2YWhpZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQoYXZhaGlkaXIpIgorCUBsaXN0PSckKGF2YWhpX1BZVEhPTiknOyBkbGlzdD07IGxpc3QyPTsgdGVzdCAtbiAiJChhdmFoaWRpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGI9OyBlbHNlIGI9IiQoc3JjZGlyKS8iOyBmaTsgXAorCSAgaWYgdGVzdCAtZiAkJGIkJHA7IHRoZW4gXAorCSAgICAkKGFtX19zdHJpcF9kaXIpIFwKKwkgICAgZGxpc3Q9IiQkZGxpc3QgJCRmIjsgXAorCSAgICBsaXN0Mj0iJCRsaXN0MiAkJGIkJHAiOyBcCisJICBlbHNlIDo7IGZpOyBcCisJZG9uZTsgXAorCWZvciBmaWxlIGluICQkbGlzdDI7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKKwl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCisJICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgJyQoREVTVERJUikkKGF2YWhpZGlyKSciOyBcCisJICAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAiJChERVNURElSKSQoYXZhaGlkaXIpIiB8fCBleGl0ICQkPzsgXAorCWRvbmUgfHwgZXhpdCAkJD87IFwKKwlpZiB0ZXN0IC1uICIkJGRsaXN0IjsgdGhlbiBcCisJICAkKGFtX19weV9jb21waWxlKSAtLWRlc3RkaXIgIiQoREVTVERJUikiIFwKKwkgICAgICAgICAgICAgICAgICAgIC0tYmFzZWRpciAiJChhdmFoaWRpcikiICQkZGxpc3Q7IFwKKwllbHNlIDo7IGZpCisKK3VuaW5zdGFsbC1hdmFoaVBZVEhPTjoKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKGF2YWhpX1BZVEhPTiknOyB0ZXN0IC1uICIkKGF2YWhpZGlyKSIgfHwgbGlzdD07IFwKKwlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IHNlZCAtZSAnc3xeLiovfHwnYDsgXAorCXRlc3QgLW4gIiQkZmlsZXMiIHx8IGV4aXQgMDsgXAorCWRpcj0nJChERVNURElSKSQoYXZhaGlkaXIpJzsgXAorCWZpbGVzYz1gZWNobyAiJCRmaWxlcyIgfCBzZWQgJ3N8JCR8Y3wnYDsgXAorCWZpbGVzbz1gZWNobyAiJCRmaWxlcyIgfCBzZWQgJ3N8JCR8b3wnYDsgXAorCXN0PTA7IFwKKwlmb3IgZmlsZXMgaW4gIiQkZmlsZXMiICIkJGZpbGVzYyIgIiQkZmlsZXNvIjsgZG8gXAorCSAgJChhbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyKSB8fCBzdD0kJD87IFwKKwlkb25lOyBcCisJZXhpdCAkJHN0Cit0YWdzOiBUQUdTCitUQUdTOgorCitjdGFnczogQ1RBR1MKK0NUQUdTOgorCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgXAorCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKKwkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCisJICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAorCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKKwkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKKwkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKKwkJCSAgIHNvcnQgLXVgIDs7IFwKKwllc2FjOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorY2hlY2stYW06IGFsbC1hbQorY2hlY2s6IGNoZWNrLWFtCithbGwtYW06IE1ha2VmaWxlICQoU0NSSVBUUykKK2luc3RhbGxkaXJzOgorCWZvciBkaXIgaW4gIiQoREVTVERJUikkKGF2YWhpZGlyKSIgIiQoREVTVERJUikkKGF2YWhpZGlyKSI7IGRvIFwKKwkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKE1LRElSX1ApICIkJGRpciI7IFwKKwlkb25lCitpbnN0YWxsOiBpbnN0YWxsLWFtCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KK3VuaW5zdGFsbDogdW5pbnN0YWxsLWFtCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCitpbnN0YWxsLXN0cmlwOgorCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgICAgICBpbnN0YWxsOyBcCisJZWxzZSBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKKwlmaQorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDTEVBTkZJTEVTKSIgfHwgcm0gLWYgJChDTEVBTkZJTEVTKQorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tYW0KKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBtb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tZ2VuZXJpYworCitkdmk6IGR2aS1hbQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtYW0KKworaHRtbC1hbToKKworaW5mbzogaW5mby1hbQorCitpbmZvLWFtOgorCitpbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtYXZhaGlQWVRIT04gaW5zdGFsbC1ub2Rpc3RfYXZhaGlTQ1JJUFRTCisKK2luc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQorCitpbnN0YWxsLWR2aS1hbToKKworaW5zdGFsbC1leGVjLWFtOgorCitpbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQorCitpbnN0YWxsLWh0bWwtYW06CisKK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisKK2luc3RhbGwtaW5mby1hbToKKworaW5zdGFsbC1tYW46CisKK2luc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQorCitpbnN0YWxsLXBkZi1hbToKKworaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQorCitpbnN0YWxsLXBzLWFtOgorCitpbnN0YWxsY2hlY2stYW06CisKK21haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtYW0KKworcGRmLWFtOgorCitwczogcHMtYW0KKworcHMtYW06CisKK3VuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWF2YWhpUFlUSE9OIHVuaW5zdGFsbC1ub2Rpc3RfYXZhaGlTQ1JJUFRTCisKKy5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKKworLlBIT05ZOiBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBcCisJZGlzdGNsZWFuIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIGRpc3RkaXIgZHZpIFwKKwlkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gXAorCWluc3RhbGwtYXZhaGlQWVRIT04gaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBcCisJaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgXAorCWluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIFwKKwlpbnN0YWxsLW5vZGlzdF9hdmFoaVNDUklQVFMgaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gXAorCWluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBcCisJaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gXAorCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1nZW5lcmljIFwKKwltb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSBcCisJdW5pbnN0YWxsLWF2YWhpUFlUSE9OIHVuaW5zdGFsbC1ub2Rpc3RfYXZhaGlTQ1JJUFRTCisKKworQEhBVkVfR0RCTV9UUlVFQEBIQVZFX1BZVEhPTl9UUlVFQFNlcnZpY2VUeXBlRGF0YWJhc2UucHk6IFNlcnZpY2VUeXBlRGF0YWJhc2UucHkuaW4KK0BIQVZFX0dEQk1fVFJVRUBASEFWRV9QWVRIT05fVFJVRUAJJChBTV9WX0dFTilzZWQgLWUgJ3MsQFBZVEhPTlxALCQoUFlUSE9OKSxnJyBcCitASEFWRV9HREJNX1RSVUVAQEhBVkVfUFlUSE9OX1RSVUVACQktZSAncyxAREJNXEAsZ2RibSxnJyBcCitASEFWRV9HREJNX1RSVUVAQEhBVkVfUFlUSE9OX1RSVUVACQktZSAncyxARklSU1RfS0VZXEAsa2V5ID0gc2VsZi5kYi5maXJzdGtleSgpLGcnIFwKK0BIQVZFX0dEQk1fVFJVRUBASEFWRV9QWVRIT05fVFJVRUAJCS1lICdzLEBDSEVDS19LRVlcQCx3aGlsZSBrZXkgaXMgbm90IE5vbmU6LGcnIFwKK0BIQVZFX0dEQk1fVFJVRUBASEFWRV9QWVRIT05fVFJVRUAJCS1lICdzLEBORVhUX0tFWVxALGtleSA9IHNlbGYuZGIubmV4dGtleShrZXkpLGcnIFwKK0BIQVZFX0dEQk1fVFJVRUBASEFWRV9QWVRIT05fVFJVRUAJCS1lICdzLEBwa2dsaWJkYXRhZGlyXEAsJChwa2dsaWJkYXRhZGlyKSxnJyAkPCA+ICRAICYmIFwKK0BIQVZFX0dEQk1fVFJVRUBASEFWRV9QWVRIT05fVFJVRUAJY2htb2QgK3ggJEAKKworQEhBVkVfREJNX1RSVUVAQEhBVkVfUFlUSE9OX1RSVUVAU2VydmljZVR5cGVEYXRhYmFzZS5weTogU2VydmljZVR5cGVEYXRhYmFzZS5weS5pbgorQEhBVkVfREJNX1RSVUVAQEhBVkVfUFlUSE9OX1RSVUVACSQoQU1fVl9HRU4pc2VkIC1lICdzLEBQWVRIT05cQCwkKFBZVEhPTiksZycgXAorQEhBVkVfREJNX1RSVUVAQEhBVkVfUFlUSE9OX1RSVUVACQktZSAncyxAREJNXEAsZGJtLGcnIFwKK0BIQVZFX0RCTV9UUlVFQEBIQVZFX1BZVEhPTl9UUlVFQAkJLWUgJ3MsQEZJUlNUX0tFWVxALGtleXMgPSBzZWxmLmRiLmtleXMoKSxnJyBcCitASEFWRV9EQk1fVFJVRUBASEFWRV9QWVRIT05fVFJVRUAJCS1lICdzLEBDSEVDS19LRVlcQCxmb3Iga2V5IGluIGtleXM6LGcnIFwKK0BIQVZFX0RCTV9UUlVFQEBIQVZFX1BZVEhPTl9UUlVFQAkJLWUgJ3MsQE5FWFRfS0VZXEAsLGcnIFwKK0BIQVZFX0RCTV9UUlVFQEBIQVZFX1BZVEhPTl9UUlVFQAkJLWUgJ3MsQHBrZ2xpYmRhdGFkaXJcQCwkKHBrZ2xpYmRhdGFkaXIpLGcnICQ8ID4gJEAgJiYgXAorQEhBVkVfREJNX1RSVUVAQEhBVkVfUFlUSE9OX1RSVUVACWNobW9kICt4ICRACisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1weXRob24vYXZhaGkvU2VydmljZVR5cGVEYXRhYmFzZS5weS5pbiBiL2F2YWhpLTAuNi4zMS9hdmFoaS1weXRob24vYXZhaGkvU2VydmljZVR5cGVEYXRhYmFzZS5weS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjAzNWZkCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLXB5dGhvbi9hdmFoaS9TZXJ2aWNlVHlwZURhdGFiYXNlLnB5LmluCkBAIC0wLDAgKzEsMTYxIEBACisjIUBQWVRIT05ACisjIC0qLXB5dGhvbi0qLQorIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKyMKKyMgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyMgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyMgVVNBLgorCitpbXBvcnQgQERCTUAKK2ltcG9ydCBsb2NhbGUKK2ltcG9ydCByZQorCitsb2NhbGUuc2V0bG9jYWxlKGxvY2FsZS5MQ19BTEwsICcnKQorCitjbGFzcyBTZXJ2aWNlVHlwZURhdGFiYXNlOgorICAgICIiIlNlcnZpY2VUeXBlRGF0YWJhc2UgbWFwcyBzZXJ2aWNlIHR5cGVzIHRvIGRlc2NyaXB0aW9ucyIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lID0gIkBwa2dsaWJkYXRhZGlyQC9zZXJ2aWNlLXR5cGVzLmRiIik6CisKKyAgICAgICAgc2VsZi5kYiA9IEBEQk1ALm9wZW4oZmlsZW5hbWUsICJyIikKKworICAgICAgICBsID0gbG9jYWxlLmdldGxvY2FsZShsb2NhbGUuTENfTUVTU0FHRVMpCisKKyAgICAgICAgc2VsZi5zdWZmaXhlcyA9ICgpCisKKyAgICAgICAgaWYgbm90IGxbMF0gaXMgTm9uZToKKworICAgICAgICAgICAgaWYgbm90IGxbMV0gaXMgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLnN1ZmZpeGVzICs9IChsWzBdICsgIkAiICsgbFsxXSwgKQorCisgICAgICAgICAgICBzZWxmLnN1ZmZpeGVzICs9IChsWzBdLCApCisKKyAgICAgICAgICAgIGkgPSBsWzBdLmZpbmQoIl8iKQorCisgICAgICAgICAgICBpZiBpID49IDA6CisKKyAgICAgICAgICAgICAgICBrID0gbFswXVs6aV0KKworICAgICAgICAgICAgICAgIGlmIG5vdCBsWzFdIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuc3VmZml4ZXMgKz0gKGsgKyAiQCIgKyBsWzFdLCApCisKKyAgICAgICAgICAgICAgICBzZWxmLnN1ZmZpeGVzICs9IChrLCApCisKKworICAgICAgICBzZWxmLnN1ZmZpeGVzID0gdHVwbGUobWFwKGxhbWJkYSB4OiAgIlsiK3grIl0iLCBzZWxmLnN1ZmZpeGVzKSkgKyAoIiIsICkKKworICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorCisgICAgICAgIGZvciBzdWZmaXggaW4gc2VsZi5zdWZmaXhlczoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5kYltrZXkgKyBzdWZmaXhdCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHJhaXNlIEtleUVycm9yKCkKKworICAgIGRlZiBpdGVtcyhzZWxmKToKKworICAgICAgICByZXR1cm4gbGlzdChzZWxmLml0ZXJpdGVtcygpKQorCisgICAgZGVmIGhhc19rZXkoc2VsZiwga2V5KToKKworICAgICAgICBmb3Igc3VmZml4IGluIHNlbGYuc3VmZml4ZXM6CisKKyAgICAgICAgICAgIGlmIHNlbGYuZGIuaGFzX2tleShrZXkgKyBzdWZmaXgpOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgX19jb250YWluc19fKHNlbGYsIGl0ZW0pOgorCisgICAgICAgIGZvciBzdWZmaXggaW4gc2VsZi5zdWZmaXhlczoKKworICAgICAgICAgICAgaWYgaXRlbStzdWZmaXggaW4gc2VsZi5kYjoKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIHJldHVybiBGYWxzZQorCisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisKKyAgICAgICAgQEZJUlNUX0tFWUAKKyAgICAgICAgQENIRUNLX0tFWUAKKworICAgICAgICAgICAgaWYgcmUuc2VhcmNoKCdfW2EtekEtWjAtOS1dK1wuX1thLXpBLVowLTktXSsnLCBrZXkpIGFuZCBub3QgcmUuc2VhcmNoKCdfW2EtekEtWjAtOS1dK1wuX1thLXpBLVowLTktXStcWy4qXF0nLCBrZXkpOgorICAgICAgICAgICAgICAgIHlpZWxkIGtleQorCisgICAgICAgICAgICBATkVYVF9LRVlACisKKyAgICBkZWYgX19sZW5fXyhzZWxmKToKKworICAgICAgICBjb3VudCA9IDAKKyAgICAgICAgZm9yIF8gaW4gc2VsZjoKKworICAgICAgICAgICAgY291bnQrPTEKKworICAgICAgICBzZWxmLl9fbGVuX18gPSBsYW1iZGEgOiBjb3VudAorICAgICAgICByZXR1cm4gbGVuKHNlbGYpCisKKyAgICBkZWYgZ2V0KHNlbGYsIGtleSwgZGVmYXVsdD1Ob25lKToKKworICAgICAgICBpZiBrZXkgaW4gc2VsZjoKKyAgICAgICAgICAgIHJldHVybiBzZWxmW2tleV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBkZWZhdWx0CisKKyAgICBkZWYgaXRlcml0ZW1zKHNlbGYpOgorCisgICAgICAgIHJldHVybiAoKGtleSwgc2VsZltrZXldKSBmb3Iga2V5IGluIHNlbGYpCisKKyAgICBkZWYgaXRlcmtleXMoc2VsZik6CisKKyAgICAgICAgcmV0dXJuIHNlbGYuX19pdGVyX18oKQorCisgICAgZGVmIGl0ZXJ2YWx1ZXMoc2VsZik6CisKKyAgICAgICAgcmV0dXJuIChzZWxmW2tleV0gZm9yIGtleSBpbiBzZWxmKQorCisgICAgZGVmIGtleXMoc2VsZik6CisKKyAgICAgICAgcmV0dXJuIGxpc3Qoc2VsZikKKworICAgIGRlZiB2YWx1ZXMoc2VsZik6CisKKyAgICAgICAgcmV0dXJuIGxpc3Qoc2VsZi5pdGVydmFsdWVzKCkpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisKKyAgICBiID0gU2VydmljZVR5cGVEYXRhYmFzZSgpCisgICAgcHJpbnQgYi5pdGVtcygpCisKKyAgICBwcmludCBiWyJfaHR0cC5fdGNwIl0KKyAgICBwcmludCBiWyJfZnRwLl90Y3AiXQorICAgIHByaW50IGJbIl93ZWJkYXYuX3RjcCJdCisgICAgcHJpbnQgYlsiX3dlYmRhdnMuX3RjcCJdCisKKyAgICBwcmludCBiLmdldCgiZ3Vya2kuX3RjcCIpCisgICAgcHJpbnQgbGVuKGIpCisKKyAgICBmb3Iga2V5LCBfIGluIHppcChiLCB4cmFuZ2UoMykpOgorCisgICAgICAgIHByaW50IGtleQorCisgICAgZm9yIGtleSwgXyBpbiB6aXAoYi5pdGVyaXRlbXMoKSwgeHJhbmdlKDMpKToKKworICAgICAgICBwcmludCBrZXkKKworICAgIGZvciBrZXksIF8gaW4gemlwKGIuaXRlcnZhbHVlcygpLCB4cmFuZ2UoMykpOgorCisgICAgICAgIHByaW50IGtleQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLXB5dGhvbi9hdmFoaS9fX2luaXRfXy5weSBiL2F2YWhpLTAuNi4zMS9hdmFoaS1weXRob24vYXZhaGkvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I0NTAyOQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1weXRob24vYXZhaGkvX19pbml0X18ucHkKQEAgLTAsMCArMSwxMTIgQEAKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisjCisjIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisjIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisjIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisjIFVTQS4KKworIyBTb21lIGRlZmluaXRpb25zIG1hdGNoaW5nIHRob3NlIGluIGF2YWhpLWNvbW1vbi9kZWZzLmgKKworaW1wb3J0IGRidXMKKworU0VSVkVSX0lOVkFMSUQsIFNFUlZFUl9SRUdJU1RFUklORywgU0VSVkVSX1JVTk5JTkcsIFNFUlZFUl9DT0xMSVNJT04sIFNFUlZFUl9GQUlMVVJFID0gcmFuZ2UoMCwgNSkKKworRU5UUllfR1JPVVBfVU5DT01NSVRFRCwgRU5UUllfR1JPVVBfUkVHSVNURVJJTkcsIEVOVFJZX0dST1VQX0VTVEFCTElTSEVELCBFTlRSWV9HUk9VUF9DT0xMSVNJT04sIEVOVFJZX0dST1VQX0ZBSUxVUkUgPSByYW5nZSgwLCA1KQorCitET01BSU5fQlJPV1NFUl9CUk9XU0UsIERPTUFJTl9CUk9XU0VSX0JST1dTRV9ERUZBVUxULCBET01BSU5fQlJPV1NFUl9SRUdJU1RFUiwgRE9NQUlOX0JST1dTRVJfUkVHSVNURVJfREVGQVVMVCwgRE9NQUlOX0JST1dTRVJfQlJPV1NFX0xFR0FDWSA9IHJhbmdlKDAsIDUpCisKK1BST1RPX1VOU1BFQywgUFJPVE9fSU5FVCwgUFJPVE9fSU5FVDYgID0gLTEsIDAsIDEKKworSUZfVU5TUEVDID0gLTEKKworUFVCTElTSF9VTklRVUUgPSAxCitQVUJMSVNIX05PX1BST0JFID0gMgorUFVCTElTSF9OT19BTk5PVU5DRSA9IDQKK1BVQkxJU0hfQUxMT1dfTVVMVElQTEUgPSA4CitQVUJMSVNIX05PX1JFVkVSU0UgPSAxNgorUFVCTElTSF9OT19DT09LSUUgPSAzMgorUFVCTElTSF9VUERBVEUgPSA2NAorUFVCTElTSF9VU0VfV0lERV9BUkVBID0gMTI4CitQVUJMSVNIX1VTRV9NVUxUSUNBU1QgPSAyNTYKKworTE9PS1VQX1VTRV9XSURFX0FSRUEgPSAxCitMT09LVVBfVVNFX01VTFRJQ0FTVCA9IDIKK0xPT0tVUF9OT19UWFQgPSA0CitMT09LVVBfTk9fQUREUkVTUyA9IDgKKworTE9PS1VQX1JFU1VMVF9DQUNIRUQgPSAxCitMT09LVVBfUkVTVUxUX1dJREVfQVJFQSA9IDIKK0xPT0tVUF9SRVNVTFRfTVVMVElDQVNUID0gNAorTE9PS1VQX1JFU1VMVF9MT0NBTCA9IDgKK0xPT0tVUF9SRVNVTFRfT1VSX09XTiA9IDE2CitMT09LVVBfUkVTVUxUX1NUQVRJQyA9IDMyCisKK1NFUlZJQ0VfQ09PS0lFID0gIm9yZy5mcmVlZGVza3RvcC5BdmFoaS5jb29raWUiCitTRVJWSUNFX0NPT0tJRV9JTlZBTElEID0gMAorCitEQlVTX05BTUUgPSAib3JnLmZyZWVkZXNrdG9wLkF2YWhpIgorREJVU19JTlRFUkZBQ0VfU0VSVkVSID0gREJVU19OQU1FICsgIi5TZXJ2ZXIiCitEQlVTX1BBVEhfU0VSVkVSID0gIi8iCitEQlVTX0lOVEVSRkFDRV9FTlRSWV9HUk9VUCA9IERCVVNfTkFNRSArICIuRW50cnlHcm91cCIKK0RCVVNfSU5URVJGQUNFX0RPTUFJTl9CUk9XU0VSID0gREJVU19OQU1FICsgIi5Eb21haW5Ccm93c2VyIgorREJVU19JTlRFUkZBQ0VfU0VSVklDRV9UWVBFX0JST1dTRVIgPSBEQlVTX05BTUUgKyAiLlNlcnZpY2VUeXBlQnJvd3NlciIKK0RCVVNfSU5URVJGQUNFX1NFUlZJQ0VfQlJPV1NFUiA9IERCVVNfTkFNRSArICIuU2VydmljZUJyb3dzZXIiCitEQlVTX0lOVEVSRkFDRV9BRERSRVNTX1JFU09MVkVSID0gREJVU19OQU1FICsgIi5BZGRyZXNzUmVzb2x2ZXIiCitEQlVTX0lOVEVSRkFDRV9IT1NUX05BTUVfUkVTT0xWRVIgPSBEQlVTX05BTUUgKyAiLkhvc3ROYW1lUmVzb2x2ZXIiCitEQlVTX0lOVEVSRkFDRV9TRVJWSUNFX1JFU09MVkVSID0gREJVU19OQU1FICsgIi5TZXJ2aWNlUmVzb2x2ZXIiCitEQlVTX0lOVEVSRkFDRV9SRUNPUkRfQlJPV1NFUiA9IERCVVNfTkFNRSArICIuUmVjb3JkQnJvd3NlciIKKworZGVmIGJ5dGVfYXJyYXlfdG9fc3RyaW5nKHMpOgorICAgIHIgPSAiIgorICAgIAorICAgIGZvciBjIGluIHM6CisgICAgICAgIAorICAgICAgICBpZiBjID49IDMyIGFuZCBjIDwgMTI3OgorICAgICAgICAgICAgciArPSAiJWMiICUgYworICAgICAgICBlbHNlOgorICAgICAgICAgICAgciArPSAiLiIKKworICAgIHJldHVybiByCisKK2RlZiB0eHRfYXJyYXlfdG9fc3RyaW5nX2FycmF5KHQpOgorICAgIGwgPSBbXQorCisgICAgZm9yIHMgaW4gdDoKKyAgICAgICAgbC5hcHBlbmQoYnl0ZV9hcnJheV90b19zdHJpbmcocykpCisKKyAgICByZXR1cm4gbAorCisKK2RlZiBzdHJpbmdfdG9fYnl0ZV9hcnJheShzKToKKyAgICByID0gW10KKworICAgIGZvciBjIGluIHM6CisgICAgICAgIHIuYXBwZW5kKGRidXMuQnl0ZShvcmQoYykpKQorCisgICAgcmV0dXJuIHIKKworZGVmIHN0cmluZ19hcnJheV90b190eHRfYXJyYXkodCk6CisgICAgbCA9IFtdCisKKyAgICBmb3IgcyBpbiB0OgorICAgICAgICBsLmFwcGVuZChzdHJpbmdfdG9fYnl0ZV9hcnJheShzKSkKKworICAgIHJldHVybiBsCisKK2RlZiBkaWN0X3RvX3R4dF9hcnJheSh0eHRfZGljdCk6CisgICAgbCA9IFtdCisKKyAgICBmb3Igayx2IGluIHR4dF9kaWN0Lml0ZW1zKCk6CisgICAgICAgIGwuYXBwZW5kKHN0cmluZ190b19ieXRlX2FycmF5KCIlcz0lcyIgJSAoayx2KSkpCisKKyAgICByZXR1cm4gbApkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLXF0L01ha2VmaWxlLmFtIGIvYXZhaGktMC42LjMxL2F2YWhpLXF0L01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MzU2YTUKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktcXQvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSw2OCBAQAorIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKyMKKyMgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyMgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyMgVVNBLgorCitBTV9DRkxBR1M9LUkkKHRvcF9zcmNkaXIpCisKK2xpYl9MVExJQlJBUklFUyA9CitCVUlMVF9TT1VSQ0VTID0KKworaWYgSEFWRV9RVDMKKworYXZhaGlxdDNpbmNsdWRlZGlyPSQoaW5jbHVkZWRpcikvYXZhaGktcXQzCisKK2F2YWhpcXQzaW5jbHVkZV9IRUFERVJTID0gXAorCXF0LXdhdGNoLmgKKworbGliX0xUTElCUkFSSUVTICs9IFwKKwlsaWJhdmFoaS1xdDMubGEKKworQlVJTFRfU09VUkNFUyArPSBxdC13YXRjaC5tb2MzCisKK2xpYmF2YWhpX3F0M19sYV9TT1VSQ0VTID0gXAorCXF0LXdhdGNoLmNwcAorCitxdC13YXRjaC5tb2MzOiBxdC13YXRjaC5jcHAKKwkkKEFNX1ZfR0VOKSQoTU9DX1FUMykgJF4gPiAkQAorCitsaWJhdmFoaV9xdDNfbGFfQ1BQRkxBR1MgPSAkKEFNX0NGTEFHUykgJChRVDNfQ0ZMQUdTKSAkKFZJU0lCSUxJVFlfSElEREVOX0NGTEFHUykKK2xpYmF2YWhpX3F0M19sYV9MSUJBREQgPSAkKEFNX0xEQUREKSAuLi9hdmFoaS1jb21tb24vbGliYXZhaGktY29tbW9uLmxhICQoUVQzX0xJQlMpCitsaWJhdmFoaV9xdDNfbGFfTERGTEFHUyA9ICQoQU1fTERGTEFHUykgLWV4cG9ydC1keW5hbWljIC12ZXJzaW9uLWluZm8gJChMSUJBVkFISV9RVDNfVkVSU0lPTl9JTkZPKQorZW5kaWYKKworaWYgSEFWRV9RVDQKKworYXZhaGlxdDRpbmNsdWRlZGlyPSQoaW5jbHVkZWRpcikvYXZhaGktcXQ0CithdmFoaXF0NGluY2x1ZGVfSEVBREVSUyA9IFwKKwlxdC13YXRjaC5oCisKK2xpYl9MVExJQlJBUklFUyArPSBcCisJbGliYXZhaGktcXQ0LmxhCisKK0JVSUxUX1NPVVJDRVMgKz0gcXQtd2F0Y2gubW9jNAorCitsaWJhdmFoaV9xdDRfbGFfU09VUkNFUyA9IFwKKwlxdC13YXRjaC5jcHAKKworcXQtd2F0Y2gubW9jNDogcXQtd2F0Y2guY3BwCisJJChBTV9WX0dFTikkKE1PQ19RVDQpICReID4gJEAKKworbGliYXZhaGlfcXQ0X2xhX0NQUEZMQUdTID0gJChBTV9DRkxBR1MpICQoUVQ0X0NGTEFHUykgLURRVDQgJChWSVNJQklMSVRZX0hJRERFTl9DRkxBR1MpCitsaWJhdmFoaV9xdDRfbGFfTElCQUREID0gJChBTV9MREFERCkgLi4vYXZhaGktY29tbW9uL2xpYmF2YWhpLWNvbW1vbi5sYSAkKFFUNF9MSUJTKQorbGliYXZhaGlfcXQ0X2xhX0xERkxBR1MgPSAkKEFNX0xERkxBR1MpIC12ZXJzaW9uLWluZm8gJChMSUJBVkFISV9RVDRfVkVSU0lPTl9JTkZPKQorZW5kaWYKKworQ0xFQU5GSUxFUyA9ICQoQlVJTFRfU09VUkNFUykKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1xdC9NYWtlZmlsZS5pbiBiL2F2YWhpLTAuNi4zMS9hdmFoaS1xdC9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDFhMjU1Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLXF0L01ha2VmaWxlLmluCkBAIC0wLDAgKzEsODI5IEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjExLjMgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACisKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisjCisjIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisjIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisjIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisjIFVTQS4KKworCitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitASEFWRV9RVDNfVFJVRUBhbV9fYXBwZW5kXzEgPSBcCitASEFWRV9RVDNfVFJVRUAJbGliYXZhaGktcXQzLmxhCisKK0BIQVZFX1FUM19UUlVFQGFtX19hcHBlbmRfMiA9IHF0LXdhdGNoLm1vYzMKK0BIQVZFX1FUNF9UUlVFQGFtX19hcHBlbmRfMyA9IFwKK0BIQVZFX1FUNF9UUlVFQAlsaWJhdmFoaS1xdDQubGEKKworQEhBVkVfUVQ0X1RSVUVAYW1fX2FwcGVuZF80ID0gcXQtd2F0Y2gubW9jNAorc3ViZGlyID0gYXZhaGktcXQKK0RJU1RfQ09NTU9OID0gJChhbV9fYXZhaGlxdDNpbmNsdWRlX0hFQURFUlNfRElTVCkgXAorCSQoYW1fX2F2YWhpcXQ0aW5jbHVkZV9IRUFERVJTX0RJU1QpICQoc3JjZGlyKS9NYWtlZmlsZS5hbSBcCisJJChzcmNkaXIpL01ha2VmaWxlLmluCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vYWN4X3B0aHJlYWQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2djY19zdGFja19wcm90ZWN0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9nY2NfdmlzaWJpbGl0eS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vaW50bHRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2ludHJvc3BlY3Rpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2x0b3B0aW9ucy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHR2ZXJzaW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbmxzLm00ICQodG9wX3NyY2RpcikvY29tbW9uL3B5dGhvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9hY2luY2x1ZGUubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vZG94eWdlbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7CithbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAorICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCisgICAgKikgZj0kJHA7OyBcCisgIGVzYWM7CithbV9fc3RyaXBfZGlyID0gZj1gZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7CithbV9faW5zdGFsbF9tYXggPSA0MAorYW1fX25vYmFzZV9zdHJpcF9zZXR1cCA9IFwKKyAgc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYAorYW1fX25vYmFzZV9zdHJpcCA9IFwKKyAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkIC1lICJzfCQkc3JjZGlyc3RyaXAvfHwiCithbV9fbm9iYXNlX2xpc3QgPSAkKGFtX19ub2Jhc2Vfc3RyaXBfc2V0dXApOyBcCisgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCisgIHNlZCAic3wgJCRzcmNkaXJzdHJpcC98IHw7IicgLyAuKlwvLyFzLyAuKi8gLi87IHMsXCggLipcKS9bXi9dKiQkLFwxLCcgfCBcCisgICQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiIgfSB7IGZpbGVzWyQkMl0gPSBmaWxlc1skJDJdICIgIiAkJDE7IFwKKyAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCisgICAgICB7IHByaW50ICQkMiwgZmlsZXNbJCQyXTsgblskJDJdID0gMDsgZmlsZXNbJCQyXSA9ICIiIH0gfSBcCisgICAgRU5EIHsgZm9yIChkaXIgaW4gZmlsZXMpIHByaW50IGRpciwgZmlsZXNbZGlyXSB9JworYW1fX2Jhc2VfbGlzdCA9IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJyB8IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJworYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpciA9IHsgXAorICB0ZXN0IC16ICIkJGZpbGVzIiBcCisgICAgfHwgeyB0ZXN0ICEgLWQgIiQkZGlyIiAmJiB0ZXN0ICEgLWYgIiQkZGlyIiAmJiB0ZXN0ICEgLXIgIiQkZGlyIjsgfSBcCisgICAgfHwgeyBlY2hvICIgKCBjZCAnJCRkaXInICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAorICAgICAgICAgJChhbV9fY2QpICIkJGRpciIgJiYgcm0gLWYgJCRmaWxlczsgfTsgXAorICB9CithbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQobGliZGlyKSIgXAorCSIkKERFU1RESVIpJChhdmFoaXF0M2luY2x1ZGVkaXIpIiBcCisJIiQoREVTVERJUikkKGF2YWhpcXQ0aW5jbHVkZWRpcikiCitMVExJQlJBUklFUyA9ICQobGliX0xUTElCUkFSSUVTKQorYW1fX0RFUEVOREVOQ0lFU18xID0KK0BIQVZFX1FUM19UUlVFQGxpYmF2YWhpX3F0M19sYV9ERVBFTkRFTkNJRVMgPSAgXAorQEhBVkVfUVQzX1RSVUVACS4uL2F2YWhpLWNvbW1vbi9saWJhdmFoaS1jb21tb24ubGEgXAorQEhBVkVfUVQzX1RSVUVACSQoYW1fX0RFUEVOREVOQ0lFU18xKQorYW1fX2xpYmF2YWhpX3F0M19sYV9TT1VSQ0VTX0RJU1QgPSBxdC13YXRjaC5jcHAKK0BIQVZFX1FUM19UUlVFQGFtX2xpYmF2YWhpX3F0M19sYV9PQkpFQ1RTID0gIFwKK0BIQVZFX1FUM19UUlVFQAlsaWJhdmFoaV9xdDNfbGEtcXQtd2F0Y2gubG8KK2xpYmF2YWhpX3F0M19sYV9PQkpFQ1RTID0gJChhbV9saWJhdmFoaV9xdDNfbGFfT0JKRUNUUykKK0FNX1ZfbHQgPSAkKGFtX192X2x0X0BBTV9WQCkKK2FtX192X2x0XyA9ICQoYW1fX3ZfbHRfQEFNX0RFRkFVTFRfVkApCithbV9fdl9sdF8wID0gLS1zaWxlbnQKK2xpYmF2YWhpX3F0M19sYV9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNYWCBcCisJJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENYWExEKSBcCisJJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUykgJChsaWJhdmFoaV9xdDNfbGFfTERGTEFHUykgXAorCSQoTERGTEFHUykgLW8gJEAKK0BIQVZFX1FUM19UUlVFQGFtX2xpYmF2YWhpX3F0M19sYV9ycGF0aCA9IC1ycGF0aCAkKGxpYmRpcikKK0BIQVZFX1FUNF9UUlVFQGxpYmF2YWhpX3F0NF9sYV9ERVBFTkRFTkNJRVMgPSAgXAorQEhBVkVfUVQ0X1RSVUVACS4uL2F2YWhpLWNvbW1vbi9saWJhdmFoaS1jb21tb24ubGEgXAorQEhBVkVfUVQ0X1RSVUVACSQoYW1fX0RFUEVOREVOQ0lFU18xKQorYW1fX2xpYmF2YWhpX3F0NF9sYV9TT1VSQ0VTX0RJU1QgPSBxdC13YXRjaC5jcHAKK0BIQVZFX1FUNF9UUlVFQGFtX2xpYmF2YWhpX3F0NF9sYV9PQkpFQ1RTID0gIFwKK0BIQVZFX1FUNF9UUlVFQAlsaWJhdmFoaV9xdDRfbGEtcXQtd2F0Y2gubG8KK2xpYmF2YWhpX3F0NF9sYV9PQkpFQ1RTID0gJChhbV9saWJhdmFoaV9xdDRfbGFfT0JKRUNUUykKK2xpYmF2YWhpX3F0NF9sYV9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNYWCBcCisJJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENYWExEKSBcCisJJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUykgJChsaWJhdmFoaV9xdDRfbGFfTERGTEFHUykgXAorCSQoTERGTEFHUykgLW8gJEAKK0BIQVZFX1FUNF9UUlVFQGFtX2xpYmF2YWhpX3F0NF9sYV9ycGF0aCA9IC1ycGF0aCAkKGxpYmRpcikKK0RFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpCitkZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCithbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcworYW1fX212ID0gbXYgLWYKK0NYWENPTVBJTEUgPSAkKENYWCkgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpIFwKKwkkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NYWEZMQUdTKSAkKENYWEZMQUdTKQorTFRDWFhDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNYWCAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENYWCkgJChERUZTKSBcCisJJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCisJJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUykKK0FNX1ZfQ1hYID0gJChhbV9fdl9DWFhfQEFNX1ZAKQorYW1fX3ZfQ1hYXyA9ICQoYW1fX3ZfQ1hYX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfQ1hYXzAgPSBAZWNobyAiICBDWFggICAiICRAOworQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQorYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKK2FtX192X2F0XzAgPSBACitDWFhMRCA9ICQoQ1hYKQorQ1hYTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DWFggJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDWFhMRCkgJChBTV9DWFhGTEFHUykgXAorCSQoQ1hYRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorQU1fVl9DWFhMRCA9ICQoYW1fX3ZfQ1hYTERfQEFNX1ZAKQorYW1fX3ZfQ1hYTERfID0gJChhbV9fdl9DWFhMRF9AQU1fREVGQVVMVF9WQCkKK2FtX192X0NYWExEXzAgPSBAZWNobyAiICBDWFhMRCAiICRAOworQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCithbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCithbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICIgJEA7CitTT1VSQ0VTID0gJChsaWJhdmFoaV9xdDNfbGFfU09VUkNFUykgJChsaWJhdmFoaV9xdDRfbGFfU09VUkNFUykKK0RJU1RfU09VUkNFUyA9ICQoYW1fX2xpYmF2YWhpX3F0M19sYV9TT1VSQ0VTX0RJU1QpIFwKKwkkKGFtX19saWJhdmFoaV9xdDRfbGFfU09VUkNFU19ESVNUKQorYW1fX2F2YWhpcXQzaW5jbHVkZV9IRUFERVJTX0RJU1QgPSBxdC13YXRjaC5oCithbV9fYXZhaGlxdDRpbmNsdWRlX0hFQURFUlNfRElTVCA9IHF0LXdhdGNoLmgKK0hFQURFUlMgPSAkKGF2YWhpcXQzaW5jbHVkZV9IRUFERVJTKSAkKGF2YWhpcXQ0aW5jbHVkZV9IRUFERVJTKQorRVRBR1MgPSBldGFncworQ1RBR1MgPSBjdGFncworRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FMTF9MSU5HVUFTID0gQEFMTF9MSU5HVUFTQAorQU1UQVIgPSBAQU1UQVJACitBTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKK0FSID0gQEFSQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FWQUhJX0FVVE9JUERfR1JPVVAgPSBAQVZBSElfQVVUT0lQRF9HUk9VUEAKK0FWQUhJX0FVVE9JUERfVVNFUiA9IEBBVkFISV9BVVRPSVBEX1VTRVJACitBVkFISV9HUk9VUCA9IEBBVkFISV9HUk9VUEAKK0FWQUhJX1BSSVZfQUNDRVNTX0dST1VQID0gQEFWQUhJX1BSSVZfQUNDRVNTX0dST1VQQAorQVZBSElfVVNFUiA9IEBBVkFISV9VU0VSQAorQVdLID0gQEFXS0AKK0NBVEFMT0dTID0gQENBVEFMT0dTQAorQ0FUT0JKRVhUID0gQENBVE9CSkVYVEAKK0NDID0gQENDQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RBVEFESVJOQU1FID0gQERBVEFESVJOQU1FQAorREJVU19DRkxBR1MgPSBAREJVU19DRkxBR1NACitEQlVTX0xJQlMgPSBAREJVU19MSUJTQAorREJVU19TWVNURU1fQlVTX0RFRkFVTFRfQUREUkVTUyA9IEBEQlVTX1NZU1RFTV9CVVNfREVGQVVMVF9BRERSRVNTQAorREJVU19TWVNfRElSID0gQERCVVNfU1lTX0RJUkAKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitETExUT09MID0gQERMTFRPT0xACitET1hZR0VOX1BBUEVSX1NJWkUgPSBARE9YWUdFTl9QQVBFUl9TSVpFQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitEWF9DT05GSUcgPSBARFhfQ09ORklHQAorRFhfRE9DRElSID0gQERYX0RPQ0RJUkAKK0RYX0RPVCA9IEBEWF9ET1RACitEWF9ET1hZR0VOID0gQERYX0RPWFlHRU5ACitEWF9EVklQUyA9IEBEWF9EVklQU0AKK0RYX0VHUkVQID0gQERYX0VHUkVQQAorRFhfRU5WID0gQERYX0VOVkAKK0RYX0ZMQUdfY2hpID0gQERYX0ZMQUdfY2hpQAorRFhfRkxBR19jaG0gPSBARFhfRkxBR19jaG1ACitEWF9GTEFHX2RvYyA9IEBEWF9GTEFHX2RvY0AKK0RYX0ZMQUdfZG90ID0gQERYX0ZMQUdfZG90QAorRFhfRkxBR19odG1sID0gQERYX0ZMQUdfaHRtbEAKK0RYX0ZMQUdfbWFuID0gQERYX0ZMQUdfbWFuQAorRFhfRkxBR19wZGYgPSBARFhfRkxBR19wZGZACitEWF9GTEFHX3BzID0gQERYX0ZMQUdfcHNACitEWF9GTEFHX3J0ZiA9IEBEWF9GTEFHX3J0ZkAKK0RYX0ZMQUdfeG1sID0gQERYX0ZMQUdfeG1sQAorRFhfSEhDID0gQERYX0hIQ0AKK0RYX0xBVEVYID0gQERYX0xBVEVYQAorRFhfTUFLRUlOREVYID0gQERYX01BS0VJTkRFWEAKK0RYX1BERkxBVEVYID0gQERYX1BERkxBVEVYQAorRFhfUEVSTCA9IEBEWF9QRVJMQAorRFhfUFJPSkVDVCA9IEBEWF9QUk9KRUNUQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFWEVFWFQgPSBARVhFRVhUQAorRkdSRVAgPSBARkdSRVBACitHQUNVVElMID0gQEdBQ1VUSUxACitHRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAorR0xJQjIwX0NGTEFHUyA9IEBHTElCMjBfQ0ZMQUdTQAorR0xJQjIwX0xJQlMgPSBAR0xJQjIwX0xJQlNACitHTU9GSUxFUyA9IEBHTU9GSUxFU0AKK0dNU0dGTVQgPSBAR01TR0ZNVEAKK0dPQkpFQ1RfQ0ZMQUdTID0gQEdPQkpFQ1RfQ0ZMQUdTQAorR09CSkVDVF9MSUJTID0gQEdPQkpFQ1RfTElCU0AKK0dSRVAgPSBAR1JFUEAKK0dUSzIwX0NGTEFHUyA9IEBHVEsyMF9DRkxBR1NACitHVEsyMF9MSUJTID0gQEdUSzIwX0xJQlNACitHVEszMF9DRkxBR1MgPSBAR1RLMzBfQ0ZMQUdTQAorR1RLMzBfTElCUyA9IEBHVEszMF9MSUJTQAorSE9XTF9DT01QQVRfVkVSU0lPTiA9IEBIT1dMX0NPTVBBVF9WRVJTSU9OQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitJTlNUT0JKRVhUID0gQElOU1RPQkpFWFRACitJTlRMTElCUyA9IEBJTlRMTElCU0AKK0lOVExUT09MX0VYVFJBQ1QgPSBASU5UTFRPT0xfRVhUUkFDVEAKK0lOVExUT09MX01FUkdFID0gQElOVExUT09MX01FUkdFQAorSU5UTFRPT0xfUEVSTCA9IEBJTlRMVE9PTF9QRVJMQAorSU5UTFRPT0xfVVBEQVRFID0gQElOVExUT09MX1VQREFURUAKK0lOVFJPU1BFQ1RJT05fQ0ZMQUdTID0gQElOVFJPU1BFQ1RJT05fQ0ZMQUdTQAorSU5UUk9TUEVDVElPTl9DT01QSUxFUiA9IEBJTlRST1NQRUNUSU9OX0NPTVBJTEVSQAorSU5UUk9TUEVDVElPTl9HRU5FUkFURSA9IEBJTlRST1NQRUNUSU9OX0dFTkVSQVRFQAorSU5UUk9TUEVDVElPTl9HSVJESVIgPSBASU5UUk9TUEVDVElPTl9HSVJESVJACitJTlRST1NQRUNUSU9OX0xJQlMgPSBASU5UUk9TUEVDVElPTl9MSUJTQAorSU5UUk9TUEVDVElPTl9NQUtFRklMRSA9IEBJTlRST1NQRUNUSU9OX01BS0VGSUxFQAorSU5UUk9TUEVDVElPTl9TQ0FOTkVSID0gQElOVFJPU1BFQ1RJT05fU0NBTk5FUkAKK0lOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUiA9IEBJTlRST1NQRUNUSU9OX1RZUEVMSUJESVJACitMRCA9IEBMREAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQkFWQUhJX0NMSUVOVF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ0xJRU5UX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPTU1PTl9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ09NTU9OX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPTVBBVF9IT1dMX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DT01QQVRfSE9XTF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9DT01QQVRfTElCRE5TX1NEX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DT01QQVRfTElCRE5TX1NEX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPUkVfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NPUkVfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfR0xJQl9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfR0xJQl9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9HT0JKRUNUX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9HT0JKRUNUX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX1FUM19WRVJTSU9OX0lORk8gPSBATElCQVZBSElfUVQzX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX1FUNF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfUVQ0X1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX1VJX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9VSV9WRVJTSU9OX0lORk9ACitMSUJEQUVNT05fQ0ZMQUdTID0gQExJQkRBRU1PTl9DRkxBR1NACitMSUJEQUVNT05fTElCUyA9IEBMSUJEQUVNT05fTElCU0AKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKK0xOX1MgPSBATE5fU0AKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKK01DUyA9IEBNQ1NACitNREFTU0VNQkxFUiA9IEBNREFTU0VNQkxFUkAKK01LRElSX1AgPSBATUtESVJfUEAKK01LSU5TVEFMTERJUlMgPSBATUtJTlNUQUxMRElSU0AKK01PQ19RVDMgPSBATU9DX1FUM0AKK01PQ19RVDQgPSBATU9DX1FUNEAKK01PTk9ET0NFUiA9IEBNT05PRE9DRVJACitNT05PRE9DX0NGTEFHUyA9IEBNT05PRE9DX0NGTEFHU0AKK01PTk9ET0NfRElSID0gQE1PTk9ET0NfRElSQAorTU9OT0RPQ19MSUJTID0gQE1PTk9ET0NfTElCU0AKK01TR0ZNVCA9IEBNU0dGTVRACitNU0dGTVRfT1BUUyA9IEBNU0dGTVRfT1BUU0AKK01TR01FUkdFID0gQE1TR01FUkdFQAorTk0gPSBATk1ACitOTUVESVQgPSBATk1FRElUQAorT0JKRFVNUCA9IEBPQkpEVU1QQAorT0JKRVhUID0gQE9CSkVYVEAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQS0dfQ09ORklHX0xJQkRJUiA9IEBQS0dfQ09ORklHX0xJQkRJUkAKK1BLR19DT05GSUdfUEFUSCA9IEBQS0dfQ09ORklHX1BBVEhACitQT0ZJTEVTID0gQFBPRklMRVNACitQT1NVQiA9IEBQT1NVQkAKK1BPX0lOX0RBVEFESVJfRkFMU0UgPSBAUE9fSU5fREFUQURJUl9GQUxTRUAKK1BPX0lOX0RBVEFESVJfVFJVRSA9IEBQT19JTl9EQVRBRElSX1RSVUVACitQVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACitQVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKK1BUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACitQWVRIT04gPSBAUFlUSE9OQAorUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKK1BZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACitQWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACitQWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKK1FUM19DRkxBR1MgPSBAUVQzX0NGTEFHU0AKK1FUM19MSUJTID0gQFFUM19MSUJTQAorUVQ0X0NGTEFHUyA9IEBRVDRfQ0ZMQUdTQAorUVQ0X0xJQlMgPSBAUVQ0X0xJQlNACitSQU5MSUIgPSBAUkFOTElCQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTVE9XID0gQFNUT1dACitTVFJJUCA9IEBTVFJJUEAKK1VTRV9OTFMgPSBAVVNFX05MU0AKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1ZJU0lCSUxJVFlfSElEREVOX0NGTEFHUyA9IEBWSVNJQklMSVRZX0hJRERFTl9DRkxBR1NACitYR0VUVEVYVCA9IEBYR0VUVEVYVEAKK1hNTF9DRkxBR1MgPSBAWE1MX0NGTEFHU0AKK1hNTF9MSUJTID0gQFhNTF9MSUJTQAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorYWNfY3RfQVIgPSBAYWNfY3RfQVJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithY3hfcHRocmVhZF9jb25maWcgPSBAYWN4X3B0aHJlYWRfY29uZmlnQAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACithdmFoaV9ydW50aW1lX2RpciA9IEBhdmFoaV9ydW50aW1lX2RpckAKK2F2YWhpX3NvY2tldCA9IEBhdmFoaV9zb2NrZXRACithdmFoaWxvY2FsZWRpciA9IEBhdmFoaWxvY2FsZWRpckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraGF2ZV9wa2dfY29uZmlnID0gQGhhdmVfcGtnX2NvbmZpZ0AKK2hhdmVfeG1sdG9tYW4gPSBAaGF2ZV94bWx0b21hbkAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitpbnRlcmZhY2VzZGlyID0gQGludGVyZmFjZXNkaXJACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKK3BrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitweWV4ZWNkaXIgPSBAcHlleGVjZGlyQAorcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3N5c3RlbWRzeXN0ZW11bml0ZGlyID0gQHN5c3RlbWRzeXN0ZW11bml0ZGlyQAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK3RvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKK3RvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitBTV9DRkxBR1MgPSAtSSQodG9wX3NyY2RpcikKK2xpYl9MVExJQlJBUklFUyA9ICQoYW1fX2FwcGVuZF8xKSAkKGFtX19hcHBlbmRfMykKK0JVSUxUX1NPVVJDRVMgPSAkKGFtX19hcHBlbmRfMikgJChhbV9fYXBwZW5kXzQpCitASEFWRV9RVDNfVFJVRUBhdmFoaXF0M2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL2F2YWhpLXF0MworQEhBVkVfUVQzX1RSVUVAYXZhaGlxdDNpbmNsdWRlX0hFQURFUlMgPSBcCitASEFWRV9RVDNfVFJVRUAJcXQtd2F0Y2guaAorCitASEFWRV9RVDNfVFJVRUBsaWJhdmFoaV9xdDNfbGFfU09VUkNFUyA9IFwKK0BIQVZFX1FUM19UUlVFQAlxdC13YXRjaC5jcHAKKworQEhBVkVfUVQzX1RSVUVAbGliYXZhaGlfcXQzX2xhX0NQUEZMQUdTID0gJChBTV9DRkxBR1MpICQoUVQzX0NGTEFHUykgJChWSVNJQklMSVRZX0hJRERFTl9DRkxBR1MpCitASEFWRV9RVDNfVFJVRUBsaWJhdmFoaV9xdDNfbGFfTElCQUREID0gJChBTV9MREFERCkgLi4vYXZhaGktY29tbW9uL2xpYmF2YWhpLWNvbW1vbi5sYSAkKFFUM19MSUJTKQorQEhBVkVfUVQzX1RSVUVAbGliYXZhaGlfcXQzX2xhX0xERkxBR1MgPSAkKEFNX0xERkxBR1MpIC1leHBvcnQtZHluYW1pYyAtdmVyc2lvbi1pbmZvICQoTElCQVZBSElfUVQzX1ZFUlNJT05fSU5GTykKK0BIQVZFX1FUNF9UUlVFQGF2YWhpcXQ0aW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvYXZhaGktcXQ0CitASEFWRV9RVDRfVFJVRUBhdmFoaXF0NGluY2x1ZGVfSEVBREVSUyA9IFwKK0BIQVZFX1FUNF9UUlVFQAlxdC13YXRjaC5oCisKK0BIQVZFX1FUNF9UUlVFQGxpYmF2YWhpX3F0NF9sYV9TT1VSQ0VTID0gXAorQEhBVkVfUVQ0X1RSVUVACXF0LXdhdGNoLmNwcAorCitASEFWRV9RVDRfVFJVRUBsaWJhdmFoaV9xdDRfbGFfQ1BQRkxBR1MgPSAkKEFNX0NGTEFHUykgJChRVDRfQ0ZMQUdTKSAtRFFUNCAkKFZJU0lCSUxJVFlfSElEREVOX0NGTEFHUykKK0BIQVZFX1FUNF9UUlVFQGxpYmF2YWhpX3F0NF9sYV9MSUJBREQgPSAkKEFNX0xEQUREKSAuLi9hdmFoaS1jb21tb24vbGliYXZhaGktY29tbW9uLmxhICQoUVQ0X0xJQlMpCitASEFWRV9RVDRfVFJVRUBsaWJhdmFoaV9xdDRfbGFfTERGTEFHUyA9ICQoQU1fTERGTEFHUykgLXZlcnNpb24taW5mbyAkKExJQkFWQUhJX1FUNF9WRVJTSU9OX0lORk8pCitDTEVBTkZJTEVTID0gJChCVUlMVF9TT1VSQ0VTKQorYWxsOiAkKEJVSUxUX1NPVVJDRVMpCisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYWxsLWFtCisKKy5TVUZGSVhFUzoKKy5TVUZGSVhFUzogLmNwcCAubG8gLm8gLm9iagorJChzcmNkaXIpL01ha2VmaWxlLmluOiAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gYXZhaGktcXQvTWFrZWZpbGUnOyBcCisJJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1mb3JlaWduIGF2YWhpLXF0L01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKK2luc3RhbGwtbGliTFRMSUJSQVJJRVM6ICQobGliX0xUTElCUkFSSUVTKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQobGliZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQobGliZGlyKSIKKwlAbGlzdD0nJChsaWJfTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChsaWJkaXIpIiB8fCBsaXN0PTsgXAorCWxpc3QyPTsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICQkcDsgdGhlbiBcCisJICAgIGxpc3QyPSIkJGxpc3QyICQkcCI7IFwKKwkgIGVsc2UgOjsgZmk7IFwKKwlkb25lOyBcCisJdGVzdCAteiAiJCRsaXN0MiIgfHwgeyBcCisJICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgJyQoREVTVERJUikkKGxpYmRpciknIjsgXAorCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgIiQoREVTVERJUikkKGxpYmRpcikiOyBcCisJfQorCit1bmluc3RhbGwtbGliTFRMSUJSQVJJRVM6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChsaWJfTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChsaWJkaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgJChhbV9fc3RyaXBfZGlyKSBcCisJICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgJyQoREVTVERJUikkKGxpYmRpcikvJCRmJyI7IFwKKwkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICIkKERFU1RESVIpJChsaWJkaXIpLyQkZiI7IFwKKwlkb25lCisKK2NsZWFuLWxpYkxUTElCUkFSSUVTOgorCS10ZXN0IC16ICIkKGxpYl9MVExJQlJBUklFUykiIHx8IHJtIC1mICQobGliX0xUTElCUkFSSUVTKQorCUBsaXN0PSckKGxpYl9MVExJQlJBUklFUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGRpcj0iYGVjaG8gJCRwIHwgc2VkIC1lICdzfC9bXi9dKiQkfHwnYCI7IFwKKwkgIHRlc3QgIiQkZGlyIiAhPSAiJCRwIiB8fCBkaXI9LjsgXAorCSAgZWNobyAicm0gLWYgXCIkJHtkaXJ9L3NvX2xvY2F0aW9uc1wiIjsgXAorCSAgcm0gLWYgIiQke2Rpcn0vc29fbG9jYXRpb25zIjsgXAorCWRvbmUKK2xpYmF2YWhpLXF0My5sYTogJChsaWJhdmFoaV9xdDNfbGFfT0JKRUNUUykgJChsaWJhdmFoaV9xdDNfbGFfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYmF2YWhpX3F0M19sYV9ERVBFTkRFTkNJRVMpIAorCSQoQU1fVl9DWFhMRCkkKGxpYmF2YWhpX3F0M19sYV9MSU5LKSAkKGFtX2xpYmF2YWhpX3F0M19sYV9ycGF0aCkgJChsaWJhdmFoaV9xdDNfbGFfT0JKRUNUUykgJChsaWJhdmFoaV9xdDNfbGFfTElCQUREKSAkKExJQlMpCitsaWJhdmFoaS1xdDQubGE6ICQobGliYXZhaGlfcXQ0X2xhX09CSkVDVFMpICQobGliYXZhaGlfcXQ0X2xhX0RFUEVOREVOQ0lFUykgJChFWFRSQV9saWJhdmFoaV9xdDRfbGFfREVQRU5ERU5DSUVTKSAKKwkkKEFNX1ZfQ1hYTEQpJChsaWJhdmFoaV9xdDRfbGFfTElOSykgJChhbV9saWJhdmFoaV9xdDRfbGFfcnBhdGgpICQobGliYXZhaGlfcXQ0X2xhX09CSkVDVFMpICQobGliYXZhaGlfcXQ0X2xhX0xJQkFERCkgJChMSUJTKQorCittb3N0bHljbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLiQoT0JKRVhUKQorCitkaXN0Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi50YWIuYworCitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliYXZhaGlfcXQzX2xhLXF0LXdhdGNoLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliYXZhaGlfcXQ0X2xhLXF0LXdhdGNoLlBsb0BhbV9fcXVvdGVACisKKy5jcHAubzoKK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKEFNX1ZfQ1hYKSQoQ1hYQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoQU1fVl9DWFgpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDWFhERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChBTV9WX0NYWEBhbV9fbm9kZXBAKSQoQ1hYQ09NUElMRSkgLWMgLW8gJEAgJDwKKworLmNwcC5vYmo6CitAYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChBTV9WX0NYWCkkKENYWENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoQU1fVl9DWFgpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDWFhERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChBTV9WX0NYWEBhbV9fbm9kZXBAKSQoQ1hYQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorCisuY3BwLmxvOgorQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoQU1fVl9DWFgpJChMVENYWENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChBTV9WX0NYWClzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDWFhERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChBTV9WX0NYWEBhbV9fbm9kZXBAKSQoTFRDWFhDT01QSUxFKSAtYyAtbyAkQCAkPAorCitsaWJhdmFoaV9xdDNfbGEtcXQtd2F0Y2gubG86IHF0LXdhdGNoLmNwcAorQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoQU1fVl9DWFgpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNYWCAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ1hYKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJhdmFoaV9xdDNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpIC1NVCBsaWJhdmFoaV9xdDNfbGEtcXQtd2F0Y2gubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmF2YWhpX3F0M19sYS1xdC13YXRjaC5UcG8gLWMgLW8gbGliYXZhaGlfcXQzX2xhLXF0LXdhdGNoLmxvIGB0ZXN0IC1mICdxdC13YXRjaC5jcHAnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHF0LXdhdGNoLmNwcAorQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmF2YWhpX3F0M19sYS1xdC13YXRjaC5UcG8gJChERVBESVIpL2xpYmF2YWhpX3F0M19sYS1xdC13YXRjaC5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChBTV9WX0NYWClzb3VyY2U9J3F0LXdhdGNoLmNwcCcgb2JqZWN0PSdsaWJhdmFoaV9xdDNfbGEtcXQtd2F0Y2gubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKEFNX1ZfQ1hYQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNYWCAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ1hYKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChsaWJhdmFoaV9xdDNfbGFfQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpIC1jIC1vIGxpYmF2YWhpX3F0M19sYS1xdC13YXRjaC5sbyBgdGVzdCAtZiAncXQtd2F0Y2guY3BwJyB8fCBlY2hvICckKHNyY2RpcikvJ2BxdC13YXRjaC5jcHAKKworbGliYXZhaGlfcXQ0X2xhLXF0LXdhdGNoLmxvOiBxdC13YXRjaC5jcHAKK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKEFNX1ZfQ1hYKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DWFggJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENYWCkgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliYXZhaGlfcXQ0X2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NYWEZMQUdTKSAkKENYWEZMQUdTKSAtTVQgbGliYXZhaGlfcXQ0X2xhLXF0LXdhdGNoLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJhdmFoaV9xdDRfbGEtcXQtd2F0Y2guVHBvIC1jIC1vIGxpYmF2YWhpX3F0NF9sYS1xdC13YXRjaC5sbyBgdGVzdCAtZiAncXQtd2F0Y2guY3BwJyB8fCBlY2hvICckKHNyY2RpcikvJ2BxdC13YXRjaC5jcHAKK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJhdmFoaV9xdDRfbGEtcXQtd2F0Y2guVHBvICQoREVQRElSKS9saWJhdmFoaV9xdDRfbGEtcXQtd2F0Y2guUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoQU1fVl9DWFgpc291cmNlPSdxdC13YXRjaC5jcHAnIG9iamVjdD0nbGliYXZhaGlfcXQ0X2xhLXF0LXdhdGNoLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDWFhERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChBTV9WX0NYWEBhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DWFggJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENYWCkgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQobGliYXZhaGlfcXQ0X2xhX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NYWEZMQUdTKSAkKENYWEZMQUdTKSAtYyAtbyBsaWJhdmFoaV9xdDRfbGEtcXQtd2F0Y2gubG8gYHRlc3QgLWYgJ3F0LXdhdGNoLmNwcCcgfHwgZWNobyAnJChzcmNkaXIpLydgcXQtd2F0Y2guY3BwCisKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJzCitpbnN0YWxsLWF2YWhpcXQzaW5jbHVkZUhFQURFUlM6ICQoYXZhaGlxdDNpbmNsdWRlX0hFQURFUlMpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJdGVzdCAteiAiJChhdmFoaXF0M2luY2x1ZGVkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChhdmFoaXF0M2luY2x1ZGVkaXIpIgorCUBsaXN0PSckKGF2YWhpcXQzaW5jbHVkZV9IRUFERVJTKSc7IHRlc3QgLW4gIiQoYXZhaGlxdDNpbmNsdWRlZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICBlY2hvICIkJGQkJHAiOyBcCisJZG9uZSB8ICQoYW1fX2Jhc2VfbGlzdCkgfCBcCisJd2hpbGUgcmVhZCBmaWxlczsgZG8gXAorCSAgZWNobyAiICQoSU5TVEFMTF9IRUFERVIpICQkZmlsZXMgJyQoREVTVERJUikkKGF2YWhpcXQzaW5jbHVkZWRpciknIjsgXAorCSAgJChJTlNUQUxMX0hFQURFUikgJCRmaWxlcyAiJChERVNURElSKSQoYXZhaGlxdDNpbmNsdWRlZGlyKSIgfHwgZXhpdCAkJD87IFwKKwlkb25lCisKK3VuaW5zdGFsbC1hdmFoaXF0M2luY2x1ZGVIRUFERVJTOgorCUAkKE5PUk1BTF9VTklOU1RBTEwpCisJQGxpc3Q9JyQoYXZhaGlxdDNpbmNsdWRlX0hFQURFUlMpJzsgdGVzdCAtbiAiJChhdmFoaXF0M2luY2x1ZGVkaXIpIiB8fCBsaXN0PTsgXAorCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgc2VkIC1lICdzfF4uKi98fCdgOyBcCisJZGlyPSckKERFU1RESVIpJChhdmFoaXF0M2luY2x1ZGVkaXIpJzsgJChhbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyKQoraW5zdGFsbC1hdmFoaXF0NGluY2x1ZGVIRUFERVJTOiAkKGF2YWhpcXQ0aW5jbHVkZV9IRUFERVJTKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQoYXZhaGlxdDRpbmNsdWRlZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQoYXZhaGlxdDRpbmNsdWRlZGlyKSIKKwlAbGlzdD0nJChhdmFoaXF0NGluY2x1ZGVfSEVBREVSUyknOyB0ZXN0IC1uICIkKGF2YWhpcXQ0aW5jbHVkZWRpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAorCSAgZWNobyAiJCRkJCRwIjsgXAorCWRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAorCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKKwkgIGVjaG8gIiAkKElOU1RBTExfSEVBREVSKSAkJGZpbGVzICckKERFU1RESVIpJChhdmFoaXF0NGluY2x1ZGVkaXIpJyI7IFwKKwkgICQoSU5TVEFMTF9IRUFERVIpICQkZmlsZXMgIiQoREVTVERJUikkKGF2YWhpcXQ0aW5jbHVkZWRpcikiIHx8IGV4aXQgJCQ/OyBcCisJZG9uZQorCit1bmluc3RhbGwtYXZhaGlxdDRpbmNsdWRlSEVBREVSUzoKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKGF2YWhpcXQ0aW5jbHVkZV9IRUFERVJTKSc7IHRlc3QgLW4gIiQoYXZhaGlxdDRpbmNsdWRlZGlyKSIgfHwgbGlzdD07IFwKKwlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IHNlZCAtZSAnc3xeLiovfHwnYDsgXAorCWRpcj0nJChERVNURElSKSQoYXZhaGlxdDRpbmNsdWRlZGlyKSc7ICQoYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpcikKKworSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlta2lkIC1mSUQgJCR1bmlxdWUKK3RhZ3M6IFRBR1MKKworVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlzZXQgeDsgXAorCWhlcmU9YHB3ZGA7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJc2hpZnQ7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKKwkgIGVsc2UgXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgJCR1bmlxdWU7IFwKKwkgIGZpOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAorCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorCSAgICAgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogJChCVUlMVF9TT1VSQ0VTKQorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGNoZWNrLWFtCithbGwtYW06IE1ha2VmaWxlICQoTFRMSUJSQVJJRVMpICQoSEVBREVSUykKK2luc3RhbGxkaXJzOgorCWZvciBkaXIgaW4gIiQoREVTVERJUikkKGxpYmRpcikiICIkKERFU1RESVIpJChhdmFoaXF0M2luY2x1ZGVkaXIpIiAiJChERVNURElSKSQoYXZhaGlxdDRpbmNsdWRlZGlyKSI7IGRvIFwKKwkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKE1LRElSX1ApICIkJGRpciI7IFwKKwlkb25lCitpbnN0YWxsOiAkKEJVSUxUX1NPVVJDRVMpCisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1hbQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCit1bmluc3RhbGw6IHVuaW5zdGFsbC1hbQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQoraW5zdGFsbC1zdHJpcDoKKwlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICAgICAgaW5zdGFsbDsgXAorCWVsc2UgXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCisJZmkKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ0xFQU5GSUxFUykiIHx8IHJtIC1mICQoQ0xFQU5GSUxFUykKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorCS10ZXN0IC16ICIkKEJVSUxUX1NPVVJDRVMpIiB8fCBybSAtZiAkKEJVSUxUX1NPVVJDRVMpCitjbGVhbjogY2xlYW4tYW0KKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGliTFRMSUJSQVJJRVMgY2xlYW4tbGlidG9vbCBcCisJbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKKwlkaXN0Y2xlYW4tdGFncworCitkdmk6IGR2aS1hbQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtYW0KKworaHRtbC1hbToKKworaW5mbzogaW5mby1hbQorCitpbmZvLWFtOgorCitpbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtYXZhaGlxdDNpbmNsdWRlSEVBREVSUyBcCisJaW5zdGFsbC1hdmFoaXF0NGluY2x1ZGVIRUFERVJTCisKK2luc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQorCitpbnN0YWxsLWR2aS1hbToKKworaW5zdGFsbC1leGVjLWFtOiBpbnN0YWxsLWxpYkxUTElCUkFSSUVTCisKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCisKK2luc3RhbGwtaHRtbC1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1pbmZvLWFtOgorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCisKK2luc3RhbGwtcGRmLWFtOgorCitpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCisKK2luc3RhbGwtcHMtYW06CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtYW0KKworcGRmLWFtOgorCitwczogcHMtYW0KKworcHMtYW06CisKK3VuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWF2YWhpcXQzaW5jbHVkZUhFQURFUlMgXAorCXVuaW5zdGFsbC1hdmFoaXF0NGluY2x1ZGVIRUFERVJTIHVuaW5zdGFsbC1saWJMVExJQlJBUklFUworCisuTUFLRTogYWxsIGNoZWNrIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisKKy5QSE9OWTogQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKKwljbGVhbi1saWJMVExJQlJBUklFUyBjbGVhbi1saWJ0b29sIGN0YWdzIGRpc3RjbGVhbiBcCisJZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgXAorCWRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIFwKKwlpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1hdmFoaXF0M2luY2x1ZGVIRUFERVJTIFwKKwlpbnN0YWxsLWF2YWhpcXQ0aW5jbHVkZUhFQURFUlMgaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBcCisJaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBcCisJaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIFwKKwlpbnN0YWxsLWxpYkxUTElCUkFSSUVTIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKKwlpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgXAorCWluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIFwKKwltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBcCisJbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAorCXRhZ3MgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSB1bmluc3RhbGwtYXZhaGlxdDNpbmNsdWRlSEVBREVSUyBcCisJdW5pbnN0YWxsLWF2YWhpcXQ0aW5jbHVkZUhFQURFUlMgdW5pbnN0YWxsLWxpYkxUTElCUkFSSUVTCisKKworQEhBVkVfUVQzX1RSVUVAcXQtd2F0Y2gubW9jMzogcXQtd2F0Y2guY3BwCitASEFWRV9RVDNfVFJVRUAJJChBTV9WX0dFTikkKE1PQ19RVDMpICReID4gJEAKKworQEhBVkVfUVQ0X1RSVUVAcXQtd2F0Y2gubW9jNDogcXQtd2F0Y2guY3BwCitASEFWRV9RVDRfVFJVRUAJJChBTV9WX0dFTikkKE1PQ19RVDQpICReID4gJEAKKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLXF0L3F0LXdhdGNoLmNwcCBiL2F2YWhpLTAuNi4zMS9hdmFoaS1xdC9xdC13YXRjaC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFjOWRjYwotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1xdC9xdC13YXRjaC5jcHAKQEAgLTAsMCArMSwxOTggQEAKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisgCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIAorICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaWZkZWYgUVQ0CisjaW5jbHVkZSA8UXQvcXNvY2tldG5vdGlmaWVyLmg+CisjaW5jbHVkZSA8UXQvcW9iamVjdC5oPgorI2luY2x1ZGUgPFF0L3F0aW1lci5oPgorI2Vsc2UKKyNpbmNsdWRlIDxxc29ja2V0bm90aWZpZXIuaD4KKyNpbmNsdWRlIDxxb2JqZWN0Lmg+CisjaW5jbHVkZSA8cXRpbWVyLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vdGltZXZhbC5oPgorI2luY2x1ZGUgInF0LXdhdGNoLmgiCisKK2NsYXNzIEF2YWhpV2F0Y2ggOiBwdWJsaWMgUU9iamVjdCAKK3sKKyAgICBRX09CSkVDVAorcHVibGljOgorICAgIEF2YWhpV2F0Y2goaW50IGZkLCBBdmFoaVdhdGNoRXZlbnQgZXZlbnQsIEF2YWhpV2F0Y2hDYWxsYmFjayBjYWxsYmFjaywgdm9pZCogdXNlcmRhdGEpOworICAgIH5BdmFoaVdhdGNoKCkge30KKyAgICBBdmFoaVdhdGNoRXZlbnQgZ2V0RXZlbnRzKCkgY29uc3QgeyByZXR1cm4gbV9pbmNhbGxiYWNrID8gbV9sYXN0RXZlbnQgOiAoQXZhaGlXYXRjaEV2ZW50KTA7IH0KKyAgICB2b2lkIHNldFdhdGNoZWRFdmVudHMoQXZhaGlXYXRjaEV2ZW50IGV2ZW50KTsKKworcHJpdmF0ZSBzbG90czoKKyAgICB2b2lkIGdvdEluKCk7CisgICAgdm9pZCBnb3RPdXQoKTsKKworcHJpdmF0ZToKKyAgICBRU29ja2V0Tm90aWZpZXIqIG1faW47CisgICAgUVNvY2tldE5vdGlmaWVyKiBtX291dDsKKyAgICAvL0ZJWE1FOiBFUlIgYW5kIEhVUD8KKyAgICBBdmFoaVdhdGNoQ2FsbGJhY2sgbV9jYWxsYmFjazsKKyAgICBBdmFoaVdhdGNoRXZlbnQgbV9sYXN0RXZlbnQ7CisgICAgaW50IG1fZmQ7CisgICAgdm9pZCogbV91c2VyZGF0YTsKKyAgICBib29sIG1faW5jYWxsYmFjazsKK307CisKK2NsYXNzIEF2YWhpVGltZW91dCA6IHB1YmxpYyBRT2JqZWN0IAoreworICAgIFFfT0JKRUNUCisgICAgCitwdWJsaWM6CisgICAgQXZhaGlUaW1lb3V0KGNvbnN0IHN0cnVjdCB0aW1ldmFsKiB0diwgQXZhaGlUaW1lb3V0Q2FsbGJhY2sgY2FsbGJhY2ssIHZvaWQqIHVzZXJkYXRhKTsKKyAgICB+QXZhaGlUaW1lb3V0KCkge30KKyAgICB2b2lkIHVwZGF0ZShjb25zdCBzdHJ1Y3QgdGltZXZhbCogdHYpOworICAgIAorcHJpdmF0ZSBzbG90czoKKyAgICB2b2lkIHRpbWVvdXQoKTsKKyAgICAKK3ByaXZhdGU6CisgICAgUVRpbWVyIG1fdGltZXI7CisgICAgQXZhaGlUaW1lb3V0Q2FsbGJhY2sgbV9jYWxsYmFjazsKKyAgICB2b2lkKiBtX3VzZXJkYXRhOworfTsKKworCisKK0F2YWhpV2F0Y2g6OkF2YWhpV2F0Y2goaW50IGZkLCBBdmFoaVdhdGNoRXZlbnQgZXZlbnQsIEF2YWhpV2F0Y2hDYWxsYmFjayBjYWxsYmFjaywgdm9pZCogdXNlcmRhdGEpIDogCisgICAgbV9pbigwKSwgbV9vdXQoMCksICBtX2NhbGxiYWNrKGNhbGxiYWNrKSwgbV9mZChmZCksIG1fdXNlcmRhdGEodXNlcmRhdGEpLCBtX2luY2FsbGJhY2soZmFsc2UpCit7CisgICAgc2V0V2F0Y2hlZEV2ZW50cyhldmVudCk7Cit9CisKK3ZvaWQgQXZhaGlXYXRjaDo6Z290SW4oKQoreworICAgIG1fbGFzdEV2ZW50ID0gQVZBSElfV0FUQ0hfSU47CisgICAgbV9pbmNhbGxiYWNrPXRydWU7CisgICAgbV9jYWxsYmFjayh0aGlzLG1fZmQsbV9sYXN0RXZlbnQsbV91c2VyZGF0YSk7CisgICAgbV9pbmNhbGxiYWNrPWZhbHNlOworfQorCit2b2lkIEF2YWhpV2F0Y2g6OmdvdE91dCgpCit7CisgICAgbV9sYXN0RXZlbnQgPSBBVkFISV9XQVRDSF9JTjsKKyAgICBtX2luY2FsbGJhY2s9dHJ1ZTsKKyAgICBtX2NhbGxiYWNrKHRoaXMsbV9mZCxtX2xhc3RFdmVudCxtX3VzZXJkYXRhKTsKKyAgICBtX2luY2FsbGJhY2s9ZmFsc2U7Cit9CisKK3ZvaWQgQXZhaGlXYXRjaDo6c2V0V2F0Y2hlZEV2ZW50cyhBdmFoaVdhdGNoRXZlbnQgZXZlbnQpIAoreworICAgIGlmICghKGV2ZW50ICYgQVZBSElfV0FUQ0hfSU4pKSB7IGRlbGV0ZSBtX2luOyBtX2luPTA7IH0KKyAgICBpZiAoIShldmVudCAmIEFWQUhJX1dBVENIX09VVCkpIHsgZGVsZXRlIG1fb3V0OyBtX291dD0wOyB9CisgICAgaWYgKGV2ZW50ICYgQVZBSElfV0FUQ0hfSU4pIHsgCisJbV9pbiA9IG5ldyBRU29ja2V0Tm90aWZpZXIobV9mZCxRU29ja2V0Tm90aWZpZXI6OlJlYWQsIHRoaXMpOworCWNvbm5lY3QobV9pbixTSUdOQUwoYWN0aXZhdGVkKGludCkpLFNMT1QoZ290SW4oKSkpOworICAgIH0KKyAgICBpZiAoZXZlbnQgJiBBVkFISV9XQVRDSF9PVVQpIHsgCisJbV9vdXQgPSBuZXcgUVNvY2tldE5vdGlmaWVyKG1fZmQsUVNvY2tldE5vdGlmaWVyOjpXcml0ZSwgdGhpcyk7CisJY29ubmVjdChtX291dCxTSUdOQUwoYWN0aXZhdGVkKGludCkpLFNMT1QoZ290T3V0KCkpKTsKKyAgICB9Cit9ICAgIAorCitBdmFoaVRpbWVvdXQ6OkF2YWhpVGltZW91dChjb25zdCBzdHJ1Y3QgdGltZXZhbCogdHYsIEF2YWhpVGltZW91dENhbGxiYWNrIGNhbGxiYWNrLCB2b2lkICp1c2VyZGF0YSkgOiAKKyAgICBtX2NhbGxiYWNrKGNhbGxiYWNrKSwgbV91c2VyZGF0YSh1c2VyZGF0YSkKK3sKKyAgICBjb25uZWN0KCZtX3RpbWVyLCBTSUdOQUwodGltZW91dCgpKSwgdGhpcywgU0xPVCh0aW1lb3V0KCkpKTsKKyNpZmRlZiBRVDQKKyAgICBtX3RpbWVyLnNldFNpbmdsZVNob3QodHJ1ZSk7CisjZW5kaWYKKyAgICB1cGRhdGUodHYpOworfQorCit2b2lkIEF2YWhpVGltZW91dDo6dXBkYXRlKGNvbnN0IHN0cnVjdCB0aW1ldmFsICp0dikKK3sKKyAgICBtX3RpbWVyLnN0b3AoKTsKKyAgICBpZiAodHYpIHsKKyAgICBBdmFoaVVzZWMgdSA9IGF2YWhpX2FnZSh0dikvMTAwMDsKKyNpZmRlZiBRVDQKKyAgICBtX3RpbWVyLnN0YXJ0KCAodT4wKSA/IDAgOiAtdSk7CisjZWxzZQorICAgIG1fdGltZXIuc3RhcnQoICh1PjApID8gMCA6IC11LHRydWUpOworI2VuZGlmCisgICAgfQorfQorCit2b2lkIEF2YWhpVGltZW91dDo6dGltZW91dCgpCit7CisgICAgbV9jYWxsYmFjayh0aGlzLG1fdXNlcmRhdGEpOworfQorCitzdGF0aWMgQXZhaGlXYXRjaCogcV93YXRjaF9uZXcoY29uc3QgQXZhaGlQb2xsICphcGksIGludCBmZCwgQXZhaGlXYXRjaEV2ZW50IGV2ZW50LCBBdmFoaVdhdGNoQ2FsbGJhY2sgY2FsbGJhY2ssIAorICAgIHZvaWQgKnVzZXJkYXRhKSAKK3sKKyAgICByZXR1cm4gbmV3IEF2YWhpV2F0Y2goZmQsIGV2ZW50LCBjYWxsYmFjaywgdXNlcmRhdGEpOworfQorCitzdGF0aWMgdm9pZCBxX3dhdGNoX3VwZGF0ZShBdmFoaVdhdGNoICp3LCBBdmFoaVdhdGNoRXZlbnQgZXZlbnRzKSAKK3sKKyAgICB3LT5zZXRXYXRjaGVkRXZlbnRzKGV2ZW50cyk7Cit9CisKK3N0YXRpYyBBdmFoaVdhdGNoRXZlbnQgcV93YXRjaF9nZXRfZXZlbnRzKEF2YWhpV2F0Y2ggKncpIAoreworICAgIHJldHVybiB3LT5nZXRFdmVudHMoKTsKK30KKyAgICAKK3N0YXRpYyB2b2lkIHFfd2F0Y2hfZnJlZShBdmFoaVdhdGNoICp3KSAKK3sKKyAgICBkZWxldGUgdzsKK30KKyAgICAKK3N0YXRpYyBBdmFoaVRpbWVvdXQqIHFfdGltZW91dF9uZXcoY29uc3QgQXZhaGlQb2xsICphcGksIGNvbnN0IHN0cnVjdCB0aW1ldmFsICp0diwgQXZhaGlUaW1lb3V0Q2FsbGJhY2sgY2FsbGJhY2ssIAorICAgIHZvaWQgKnVzZXJkYXRhKSAKK3sKKyAgICByZXR1cm4gbmV3IEF2YWhpVGltZW91dCh0diwgY2FsbGJhY2ssIHVzZXJkYXRhKTsKK30KKworc3RhdGljIHZvaWQgcV90aW1lb3V0X3VwZGF0ZShBdmFoaVRpbWVvdXQgKnQsIGNvbnN0IHN0cnVjdCB0aW1ldmFsICp0dikgCit7CisgICAgdC0+dXBkYXRlKHR2KTsKK30KKworc3RhdGljIHZvaWQgcV90aW1lb3V0X2ZyZWUoQXZhaGlUaW1lb3V0ICp0KSAKK3sKKyAgICBkZWxldGUgdDsKK30KKworY29uc3QgQXZhaGlQb2xsKiBhdmFoaV9xdF9wb2xsX2dldCh2b2lkKSAKK3sKKyAgICBzdGF0aWMgY29uc3QgQXZhaGlQb2xsIHF0X3BvbGwgPSB7CisgICAgICAgIE5VTEwsCisgICAgICAgIHFfd2F0Y2hfbmV3LAorICAgICAgICBxX3dhdGNoX3VwZGF0ZSwKKyAgICAgICAgcV93YXRjaF9nZXRfZXZlbnRzLAorICAgICAgICBxX3dhdGNoX2ZyZWUsCisgICAgICAgIHFfdGltZW91dF9uZXcsCisgICAgICAgIHFfdGltZW91dF91cGRhdGUsCisgICAgICAgIHFfdGltZW91dF9mcmVlCisgICAgfTsKKworICAgIHJldHVybiAmcXRfcG9sbDsKK30KKworI2lmZGVmIFFUNAorI2luY2x1ZGUgInF0LXdhdGNoLm1vYzQiCisjZWxzZQorI2luY2x1ZGUgInF0LXdhdGNoLm1vYzMiCisjZW5kaWYKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1xdC9xdC13YXRjaC5oIGIvYXZhaGktMC42LjMxL2F2YWhpLXF0L3F0LXdhdGNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q3MTMwZAotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1xdC9xdC13YXRjaC5oCkBAIC0wLDAgKzEsMzggQEAKKyNpZm5kZWYgUUFWQUhJX0gKKyNkZWZpbmUgUUFWQUhJX0gKKworLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisvKiogXGZpbGUgcXQtd2F0Y2guaCBRdCBtYWluIGxvb3AgYWRhcHRlciAqLworCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL3dhdGNoLmg+CisKK0FWQUhJX0NfREVDTF9CRUdJTgorCisvKiogU2V0dXAgYWJzdHJhY3QgcG9sbCBzdHJ1Y3R1cmUgZm9yIGludGVncmF0aW9uIHdpdGggUXQgbWFpbiBsb29wICAqLworY29uc3QgQXZhaGlQb2xsKiBhdmFoaV9xdF9wb2xsX2dldCh2b2lkKQorI2lmZGVmIEhBVkVfVklTSUJJTElUWV9ISURERU4KK19fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKQorI2VuZGlmCis7CisKK0FWQUhJX0NfREVDTF9FTkQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktcXQzLnBjLmluIGIvYXZhaGktMC42LjMxL2F2YWhpLXF0My5wYy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMThmMDgwCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLXF0My5wYy5pbgpAQCAtMCwwICsxLDExIEBACitwcmVmaXg9QHByZWZpeEAKK2V4ZWNfcHJlZml4PSR7cHJlZml4fQorbGliZGlyPUBsaWJkaXJACitpbmNsdWRlZGlyPSR7cHJlZml4fS9pbmNsdWRlCisKK05hbWU6IGF2YWhpLXF0MworRGVzY3JpcHRpb246IEF2YWhpIE11bHRpY2FzdCBETlMgUmVzcG9uZGVyIChRVDMgU3VwcG9ydCkKK1ZlcnNpb246IEBQQUNLQUdFX1ZFUlNJT05ACitSZXF1aXJlcy5wcml2YXRlOiBxdC1tdCA+PSAzLjAuMAorTGliczogLUwke2xpYmRpcn0gLWxhdmFoaS1xdDMKK0NmbGFnczogLURfUkVFTlRSQU5UIC1JJHtpbmNsdWRlZGlyfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLXF0NC5wYy5pbiBiL2F2YWhpLTAuNi4zMS9hdmFoaS1xdDQucGMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYyZjcxNwotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1xdDQucGMuaW4KQEAgLTAsMCArMSwxMSBAQAorcHJlZml4PUBwcmVmaXhACitleGVjX3ByZWZpeD0ke3ByZWZpeH0KK2xpYmRpcj1AbGliZGlyQAoraW5jbHVkZWRpcj0ke3ByZWZpeH0vaW5jbHVkZQorCitOYW1lOiBhdmFoaS1xdDQKK0Rlc2NyaXB0aW9uOiBBdmFoaSBNdWx0aWNhc3QgRE5TIFJlc3BvbmRlciAoUVQ0IFN1cHBvcnQpCitWZXJzaW9uOiBAUEFDS0FHRV9WRVJTSU9OQAorUmVxdWlyZXMucHJpdmF0ZTogUXRDb3JlID49IDQuMC4wCitMaWJzOiAtTCR7bGliZGlyfSAtbGF2YWhpLXF0NAorQ2ZsYWdzOiAtRF9SRUVOVFJBTlQgLUkke2luY2x1ZGVkaXJ9CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAucGMuaW4gYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAucGMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NjNzhiNgotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC5wYy5pbgpAQCAtMCwwICsxLDggQEAKK3ByZWZpeD1AcHJlZml4QAorZXhlY19wcmVmaXg9QHByZWZpeEAKK2xpYmRpcj1AbGliZGlyQAorCitOYW1lOiBhdmFoaS1zaGFycAorRGVzY3JpcHRpb246IE1vbm8gYmluZGluZ3MgZm9yIHRoZSBBdmFoaSBtRE5TL0ROUy1TRCBzdGFjaworVmVyc2lvbjogQFBBQ0tBR0VfVkVSU0lPTkAKK0xpYnM6IC1yOiR7bGliZGlyfS9tb25vL2F2YWhpLXNoYXJwL2F2YWhpLXNoYXJwLmRsbApkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL0FkZHJlc3NSZXNvbHZlci5jcyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9BZGRyZXNzUmVzb2x2ZXIuY3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzExZTk3ZAotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9BZGRyZXNzUmVzb2x2ZXIuY3MKQEAgLTAsMCArMSwxOTAgQEAKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKwordXNpbmcgU3lzdGVtOwordXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zOwordXNpbmcgU3lzdGVtLk5ldDsKK3VzaW5nIFN5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2aWNlczsKK3VzaW5nIE1vbm8uVW5peDsKKworbmFtZXNwYWNlIEF2YWhpCit7CisKKyAgICBpbnRlcm5hbCBkZWxlZ2F0ZSB2b2lkIEFkZHJlc3NSZXNvbHZlckNhbGxiYWNrIChJbnRQdHIgcmVzb2x2ZXIsIGludCBpZmFjZSwgUHJvdG9jb2wgcHJvdG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzb2x2ZXJFdmVudCByZXZlbnQsIEludFB0ciBhZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFB0ciBob3N0bmFtZSwgTG9va3VwUmVzdWx0RmxhZ3MgZmxhZ3MsIEludFB0ciB1c2VyZGF0YSk7CisKKyAgICBwdWJsaWMgZGVsZWdhdGUgdm9pZCBIb3N0QWRkcmVzc0hhbmRsZXIgKG9iamVjdCBvLCBIb3N0QWRkcmVzc0FyZ3MgYXJncyk7CisKKyAgICBwdWJsaWMgY2xhc3MgSG9zdEFkZHJlc3NBcmdzIDogRXZlbnRBcmdzCisgICAgeworICAgICAgICBwcml2YXRlIHN0cmluZyBob3N0OworICAgICAgICBwcml2YXRlIElQQWRkcmVzcyBhZGRyZXNzOworCisgICAgICAgIHB1YmxpYyBzdHJpbmcgSG9zdAorICAgICAgICB7CisgICAgICAgICAgICBnZXQgeyByZXR1cm4gaG9zdDsgfQorICAgICAgICB9CisKKyAgICAgICAgcHVibGljIElQQWRkcmVzcyBBZGRyZXNzCisgICAgICAgIHsKKyAgICAgICAgICAgIGdldCB7IHJldHVybiBhZGRyZXNzOyB9CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgSG9zdEFkZHJlc3NBcmdzIChzdHJpbmcgaG9zdCwgSVBBZGRyZXNzIGFkZHJlc3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRoaXMuaG9zdCA9IGhvc3Q7CisgICAgICAgICAgICB0aGlzLmFkZHJlc3MgPSBhZGRyZXNzOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIGNsYXNzIEFkZHJlc3NSZXNvbHZlciA6IFJlc29sdmVyQmFzZSwgSURpc3Bvc2FibGUKKyAgICB7CisgICAgICAgIHByaXZhdGUgSW50UHRyIGhhbmRsZTsKKyAgICAgICAgcHJpdmF0ZSBDbGllbnQgY2xpZW50OworICAgICAgICBwcml2YXRlIGludCBpZmFjZTsKKyAgICAgICAgcHJpdmF0ZSBQcm90b2NvbCBwcm90bzsKKyAgICAgICAgcHJpdmF0ZSBJUEFkZHJlc3MgYWRkcmVzczsKKyAgICAgICAgcHJpdmF0ZSBMb29rdXBGbGFncyBmbGFnczsKKyAgICAgICAgcHJpdmF0ZSBBZGRyZXNzUmVzb2x2ZXJDYWxsYmFjayBjYjsKKworICAgICAgICBwcml2YXRlIElQQWRkcmVzcyBjdXJyZW50QWRkcmVzczsKKyAgICAgICAgcHJpdmF0ZSBzdHJpbmcgY3VycmVudEhvc3Q7CisKKyAgICAgICAgcHJpdmF0ZSBBcnJheUxpc3QgZm91bmRMaXN0ZW5lcnMgPSBuZXcgQXJyYXlMaXN0ICgpOworICAgICAgICBwcml2YXRlIEFycmF5TGlzdCB0aW1lb3V0TGlzdGVuZXJzID0gbmV3IEFycmF5TGlzdCAoKTsKKworICAgICAgICBbRGxsSW1wb3J0ICgiYXZhaGktY2xpZW50IildCisgICAgICAgIHByaXZhdGUgc3RhdGljIGV4dGVybiBJbnRQdHIgYXZhaGlfYWRkcmVzc19yZXNvbHZlcl9uZXcgKEludFB0ciBjbGllbnQsIGludCBpZmFjZSwgUHJvdG9jb2wgcHJvdG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFB0ciBhZGRyZXNzLCBMb29rdXBGbGFncyBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzc1Jlc29sdmVyQ2FsbGJhY2sgY2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFB0ciB1c2VyZGF0YSk7CisKKyAgICAgICAgW0RsbEltcG9ydCAoImF2YWhpLWNsaWVudCIpXQorICAgICAgICBwcml2YXRlIHN0YXRpYyBleHRlcm4gdm9pZCBhdmFoaV9hZGRyZXNzX3Jlc29sdmVyX2ZyZWUgKEludFB0ciBoYW5kbGUpOworCisgICAgICAgIHB1YmxpYyBldmVudCBIb3N0QWRkcmVzc0hhbmRsZXIgRm91bmQKKyAgICAgICAgeworICAgICAgICAgICAgYWRkIHsKKyAgICAgICAgICAgICAgICBmb3VuZExpc3RlbmVycy5BZGQgKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBTdGFydCAoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlbW92ZSB7CisgICAgICAgICAgICAgICAgZm91bmRMaXN0ZW5lcnMuUmVtb3ZlICh2YWx1ZSk7CisgICAgICAgICAgICAgICAgU3RvcCAoZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGV2ZW50IEV2ZW50SGFuZGxlciBUaW1lb3V0CisgICAgICAgIHsKKyAgICAgICAgICAgIGFkZCB7CisgICAgICAgICAgICAgICAgdGltZW91dExpc3RlbmVycy5BZGQgKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBTdGFydCAoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlbW92ZSB7CisgICAgICAgICAgICAgICAgdGltZW91dExpc3RlbmVycy5SZW1vdmUgKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBTdG9wIChmYWxzZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgSVBBZGRyZXNzIEFkZHJlc3MKKyAgICAgICAgeworICAgICAgICAgICAgZ2V0IHsgcmV0dXJuIGN1cnJlbnRBZGRyZXNzOyB9CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgc3RyaW5nIEhvc3ROYW1lCisgICAgICAgIHsKKyAgICAgICAgICAgIGdldCB7IHJldHVybiBjdXJyZW50SG9zdDsgfQorICAgICAgICB9CisKKyAgICAgICAgcHVibGljIEFkZHJlc3NSZXNvbHZlciAoQ2xpZW50IGNsaWVudCwgSVBBZGRyZXNzIGFkZHJlc3MpIDogdGhpcyAoY2xpZW50LCAtMSwgUHJvdG9jb2wuVW5zcGVjaWZpZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MsIExvb2t1cEZsYWdzLk5vbmUpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBBZGRyZXNzUmVzb2x2ZXIgKENsaWVudCBjbGllbnQsIGludCBpZmFjZSwgUHJvdG9jb2wgcHJvdG8sIElQQWRkcmVzcyBhZGRyZXNzLCBMb29rdXBGbGFncyBmbGFncykKKyAgICAgICAgeworICAgICAgICAgICAgdGhpcy5jbGllbnQgPSBjbGllbnQ7CisgICAgICAgICAgICB0aGlzLmlmYWNlID0gaWZhY2U7CisgICAgICAgICAgICB0aGlzLnByb3RvID0gcHJvdG87CisgICAgICAgICAgICB0aGlzLmFkZHJlc3MgPSBhZGRyZXNzOworICAgICAgICAgICAgdGhpcy5mbGFncyA9IGZsYWdzOworICAgICAgICAgICAgY2IgPSBPbkFkZHJlc3NSZXNvbHZlckNhbGxiYWNrOworICAgICAgICB9CisKKyAgICAgICAgfkFkZHJlc3NSZXNvbHZlciAoKQorICAgICAgICB7CisgICAgICAgICAgICBEaXNwb3NlICgpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgRGlzcG9zZSAoKQorICAgICAgICB7CisgICAgICAgICAgICBTdG9wICh0cnVlKTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgdm9pZCBTdGFydCAoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY2xpZW50LkhhbmRsZSA9PSBJbnRQdHIuWmVybyB8fCBoYW5kbGUgIT0gSW50UHRyLlplcm8gfHwKKyAgICAgICAgICAgICAgICAoZm91bmRMaXN0ZW5lcnMuQ291bnQgPT0gMCAmJiB0aW1lb3V0TGlzdGVuZXJzLkNvdW50ID09IDApKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgSW50UHRyIGFkZHJQdHIgPSBVdGlsaXR5LkFkZHJlc3NUb1B0ciAoYWRkcmVzcyk7CisKKyAgICAgICAgICAgIGxvY2sgKGNsaWVudCkgeworICAgICAgICAgICAgICAgIGhhbmRsZSA9IGF2YWhpX2FkZHJlc3NfcmVzb2x2ZXJfbmV3IChjbGllbnQuSGFuZGxlLCBpZmFjZSwgcHJvdG8sIGFkZHJQdHIsIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYiwgSW50UHRyLlplcm8pOworCisgICAgICAgICAgICAgICAgaWYgKGhhbmRsZSA9PSBJbnRQdHIuWmVybykKKyAgICAgICAgICAgICAgICAgICAgY2xpZW50LlRocm93RXJyb3IgKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFV0aWxpdHkuRnJlZSAoYWRkclB0cik7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHZvaWQgU3RvcCAoYm9vbCBmb3JjZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNsaWVudC5IYW5kbGUgIT0gSW50UHRyLlplcm8gJiYgaGFuZGxlICE9IEludFB0ci5aZXJvICYmCisgICAgICAgICAgICAgICAgKGZvcmNlIHx8IChmb3VuZExpc3RlbmVycy5Db3VudCA9PSAwICYmIHRpbWVvdXRMaXN0ZW5lcnMuQ291bnQgPT0gMCkpKSB7CisKKyAgICAgICAgICAgICAgICBsb2NrIChjbGllbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgYXZhaGlfYWRkcmVzc19yZXNvbHZlcl9mcmVlIChoYW5kbGUpOworICAgICAgICAgICAgICAgICAgICBoYW5kbGUgPSBJbnRQdHIuWmVybzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHZvaWQgT25BZGRyZXNzUmVzb2x2ZXJDYWxsYmFjayAoSW50UHRyIHJlc29sdmVyLCBpbnQgaWZhY2UsIFByb3RvY29sIHByb3RvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzb2x2ZXJFdmVudCByZXZlbnQsIEludFB0ciBhZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UHRyIGhvc3RuYW1lLCBMb29rdXBSZXN1bHRGbGFncyBmbGFncywgSW50UHRyIHVzZXJkYXRhKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHJldmVudCkgeworICAgICAgICAgICAgY2FzZSBSZXNvbHZlckV2ZW50LkZvdW5kOgorICAgICAgICAgICAgICAgIGN1cnJlbnRBZGRyZXNzID0gVXRpbGl0eS5QdHJUb0FkZHJlc3MgKGFkZHJlc3MpOworICAgICAgICAgICAgICAgIGN1cnJlbnRIb3N0ID0gVXRpbGl0eS5QdHJUb1N0cmluZyAoaG9zdG5hbWUpOworCisgICAgICAgICAgICAgICAgZm9yZWFjaCAoSG9zdEFkZHJlc3NIYW5kbGVyIGhhbmRsZXIgaW4gZm91bmRMaXN0ZW5lcnMpCisgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIgKHRoaXMsIG5ldyBIb3N0QWRkcmVzc0FyZ3MgKGN1cnJlbnRIb3N0LCBjdXJyZW50QWRkcmVzcykpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBSZXNvbHZlckV2ZW50LkZhaWx1cmU6CisgICAgICAgICAgICAgICAgRW1pdEZhaWx1cmUgKGNsaWVudC5MYXN0RXJyb3IpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL0Fzc2VtYmx5SW5mby5jcyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9Bc3NlbWJseUluZm8uY3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZmMDlkOQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9Bc3NlbWJseUluZm8uY3MKQEAgLTAsMCArMSw0OCBAQAorLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCit1c2luZyBTeXN0ZW0uUmVmbGVjdGlvbjsKK3VzaW5nIFN5c3RlbS5SdW50aW1lLkNvbXBpbGVyU2VydmljZXM7CisKKy8vCisvLyBHZW5lcmFsIEluZm9ybWF0aW9uIGFib3V0IGFuIGFzc2VtYmx5IGlzIGNvbnRyb2xsZWQgdGhyb3VnaCB0aGUgZm9sbG93aW5nCisvLyBzZXQgb2YgYXR0cmlidXRlcy4gQ2hhbmdlIHRoZXNlIGF0dHJpYnV0ZSB2YWx1ZXMgdG8gbW9kaWZ5IHRoZSBpbmZvcm1hdGlvbgorLy8gYXNzb2NpYXRlZCB3aXRoIGFuIGFzc2VtYmx5LgorLy8KK1thc3NlbWJseTogQXNzZW1ibHlUaXRsZSgiYXZhaGktc2hhcnAiKV0KK1thc3NlbWJseTogQXNzZW1ibHlEZXNjcmlwdGlvbigiTW9ubyBiaW5kaW5ncyBmb3IgdGhlIEF2YWhpIG1ETlMvRE5TLVNEIHN0YWNrIildCitbYXNzZW1ibHk6IEFzc2VtYmx5Q29uZmlndXJhdGlvbigiIildCitbYXNzZW1ibHk6IEFzc2VtYmx5Q29tcGFueSgiIildCitbYXNzZW1ibHk6IEFzc2VtYmx5UHJvZHVjdCgiIildCitbYXNzZW1ibHk6IEFzc2VtYmx5Q29weXJpZ2h0KCIoQykgMjAwNSBKYW1lcyBXaWxsY294ICA8c25vcnBAc25vcnAubmV0PiIpXQorW2Fzc2VtYmx5OiBBc3NlbWJseVRyYWRlbWFyaygiIildCitbYXNzZW1ibHk6IEFzc2VtYmx5Q3VsdHVyZSgiIildCisKKy8vCisvLyBWZXJzaW9uIGluZm9ybWF0aW9uIGZvciBhbiBhc3NlbWJseSBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nIGZvdXIgdmFsdWVzOgorLy8KKy8vICAgICAgTWFqb3IgVmVyc2lvbgorLy8gICAgICBNaW5vciBWZXJzaW9uCisvLyAgICAgIEJ1aWxkIE51bWJlcgorLy8gICAgICBSZXZpc2lvbgorLy8KKy8vIFlvdSBjYW4gc3BlY2lmeSBhbGwgdGhlIHZhbHVlcyBvciB5b3UgY2FuIGRlZmF1bHQgdGhlIFJldmlzaW9uIGFuZCBCdWlsZCBOdW1iZXJzCisvLyBieSB1c2luZyB0aGUgJyonIGFzIHNob3duIGJlbG93OgorCitbYXNzZW1ibHk6IEFzc2VtYmx5VmVyc2lvbigiMS4wLjAiKV0KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9BdmFoaVRlc3QuY3MgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvQXZhaGlUZXN0LmNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjY2ZkNTcKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvQXZhaGlUZXN0LmNzCkBAIC0wLDAgKzEsMTMxIEBACisvKioqCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICAgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICAgIFVTQS4KKyoqKi8KKwordXNpbmcgU3lzdGVtOwordXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zOwordXNpbmcgU3lzdGVtLlRleHQ7Cit1c2luZyBTeXN0ZW0uTmV0OwordXNpbmcgQXZhaGk7CisKK3B1YmxpYyBjbGFzcyBBdmFoaVRlc3QgeworICAgIHByaXZhdGUgc3RhdGljIENsaWVudCBjbGllbnQ7CisgICAgcHJpdmF0ZSBzdGF0aWMgQXJyYXlMaXN0IG9iamVjdHMgPSBuZXcgQXJyYXlMaXN0ICgpOworCisgICAgcHVibGljIHN0YXRpYyB2b2lkIE1haW4gKCkgeworICAgICAgICBjbGllbnQgPSBuZXcgQ2xpZW50ICgpOworCisJQ29uc29sZS5Xcml0ZUxpbmUgKCJqb2luZWQgc2VydmljZSBuYW1lOiAiICsgQ2xpZW50LkpvaW5TZXJ2aWNlTmFtZSAoIkZvb0JhciIsICJfZm9vIiwgImxvY2FsIikpOworCisgICAgICAgIEVudHJ5R3JvdXAgZWcgPSBuZXcgRW50cnlHcm91cCAoY2xpZW50KTsKKyAgICAgICAgZWcuU3RhdGVDaGFuZ2VkICs9IE9uRW50cnlHcm91cENoYW5nZWQ7CisgICAgICAgIGVnLkFkZFNlcnZpY2UgKCJmb29iYXIyIiwgIl9kaW5nZG9uZy5fdGNwIiwgY2xpZW50LkRvbWFpbk5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgIDQ0NCwgbmV3IHN0cmluZ1tdIHsgImZvbz1zdHVmZiIsICJiYXI9c3R1ZmYyIiwgImJhej1zdHVmZjMiIH0pOworICAgICAgICBlZy5Db21taXQgKCk7CisgICAgICAgIEJyb3dzZVNlcnZpY2VUeXBlcyAoImxvY2FsIik7CisgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lICgiUHJlc3MgZW50ZXIgdG8gcXVpdCIpOworICAgICAgICBDb25zb2xlLlJlYWRMaW5lICgpOworICAgICAgICBjbGllbnQuRGlzcG9zZSAoKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIE9uRW50cnlHcm91cENoYW5nZWQgKG9iamVjdCBvLCBFbnRyeUdyb3VwU3RhdGVBcmdzIGFyZ3MpCisgICAgeworICAgICAgICBDb25zb2xlLldyaXRlTGluZSAoIkVudHJ5IGdyb3VwIHN0YXR1czogIiArIGFyZ3MuU3RhdGUpOworICAgICAgICBpZiAoYXJncy5TdGF0ZSA9PSBFbnRyeUdyb3VwU3RhdGUuRXN0YWJsaXNoZWQpIHsKKyAgICAgICAgICAgIERvbWFpbkJyb3dzZXIgYnJvd3NlciA9IG5ldyBEb21haW5Ccm93c2VyIChjbGllbnQpOworICAgICAgICAgICAgb2JqZWN0cy5BZGQgKGJyb3dzZXIpOworCisgICAgICAgICAgICBicm93c2VyLkRvbWFpbkFkZGVkICs9IE9uRG9tYWluQWRkZWQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIE9uRG9tYWluQWRkZWQgKG9iamVjdCBvLCBEb21haW5JbmZvQXJncyBhcmdzKQorICAgIHsKKyAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUgKCJHb3QgZG9tYWluIGFkZGVkOiAiICsgYXJncy5Eb21haW4uRG9tYWluKTsKKyAgICAgICAgLy8gQnJvd3NlU2VydmljZVR5cGVzIChhcmdzLkRvbWFpbi5Eb21haW4pOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIHZvaWQgQnJvd3NlU2VydmljZVR5cGVzIChzdHJpbmcgZG9tYWluKQorICAgIHsKKyAgICAgICAgU2VydmljZVR5cGVCcm93c2VyIHN0YiA9IG5ldyBTZXJ2aWNlVHlwZUJyb3dzZXIgKGNsaWVudCwgZG9tYWluKTsKKyAgICAgICAgb2JqZWN0cy5BZGQgKHN0Yik7CisKKyAgICAgICAgc3RiLkNhY2hlRXhoYXVzdGVkICs9IE9uQ2FjaGVFeGhhdXN0ZWQ7CisgICAgICAgIHN0Yi5TZXJ2aWNlVHlwZUFkZGVkICs9IE9uU2VydmljZVR5cGVBZGRlZDsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIE9uQ2FjaGVFeGhhdXN0ZWQgKG9iamVjdCBvLCBFdmVudEFyZ3MgYXJncykKKyAgICB7CisgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lICgiQ2FjaGUgaXMgZXhoYXVzdGVkIik7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBPblNlcnZpY2VUeXBlQWRkZWQgKG9iamVjdCBvLCBTZXJ2aWNlVHlwZUluZm9BcmdzIGFyZ3MpCisgICAgeworICAgICAgICBDb25zb2xlLldyaXRlTGluZSAoIkdvdCBzZXJ2aWNlIHR5cGU6ICIgKyBhcmdzLlNlcnZpY2VUeXBlLlNlcnZpY2VUeXBlKTsKKyAgICAgICAgU2VydmljZUJyb3dzZXIgc2IgPSBuZXcgU2VydmljZUJyb3dzZXIgKGNsaWVudCwgYXJncy5TZXJ2aWNlVHlwZS5TZXJ2aWNlVHlwZSwgYXJncy5TZXJ2aWNlVHlwZS5Eb21haW4pOworICAgICAgICBvYmplY3RzLkFkZCAoc2IpOworCisgICAgICAgIHNiLlNlcnZpY2VBZGRlZCArPSBPblNlcnZpY2VBZGRlZDsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIE9uU2VydmljZUFkZGVkIChvYmplY3QgbywgU2VydmljZUluZm9BcmdzIGFyZ3MpCisgICAgeworICAgICAgICAvLyBDb25zb2xlLldyaXRlTGluZSAoIkdvdCBzZXJ2aWNlOiAiICsgaW5mby5OYW1lKTsKKyAgICAgICAgU2VydmljZVJlc29sdmVyIHJlc29sdmVyID0gbmV3IFNlcnZpY2VSZXNvbHZlciAoY2xpZW50LCBhcmdzLlNlcnZpY2UpOworICAgICAgICBvYmplY3RzLkFkZCAocmVzb2x2ZXIpOworICAgICAgICByZXNvbHZlci5Gb3VuZCArPSBPblNlcnZpY2VSZXNvbHZlZDsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIE9uU2VydmljZVJlc29sdmVkIChvYmplY3QgbywgU2VydmljZUluZm9BcmdzIGFyZ3MpCisgICAgeworICAgICAgICBvYmplY3RzLlJlbW92ZSAobyk7CisKKyAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUgKCJTZXJ2aWNlICd7MH0nIGF0IHsxfTp7Mn0iLCBhcmdzLlNlcnZpY2UuTmFtZSwgYXJncy5TZXJ2aWNlLkhvc3ROYW1lLCBhcmdzLlNlcnZpY2UuUG9ydCk7CisgICAgICAgIGZvcmVhY2ggKGJ5dGVbXSBieXRlcyBpbiBhcmdzLlNlcnZpY2UuVGV4dCkgeworICAgICAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUgKCJUZXh0OiAiICsgRW5jb2RpbmcuVVRGOC5HZXRTdHJpbmcgKGJ5dGVzKSk7CisgICAgICAgIH0KKworICAgICAgICBBZGRyZXNzUmVzb2x2ZXIgYXIgPSBuZXcgQWRkcmVzc1Jlc29sdmVyIChjbGllbnQsIGFyZ3MuU2VydmljZS5BZGRyZXNzKTsKKyAgICAgICAgb2JqZWN0cy5BZGQgKGFyKTsKKworICAgICAgICBhci5Gb3VuZCArPSBPbkFkZHJlc3NSZXNvbHZlZDsKKyAgICAgICAgYXIuRmFpbGVkICs9IE9uQWRkcmVzc1Jlc29sdmVyRmFpbGVkOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIHZvaWQgT25BZGRyZXNzUmVzb2x2ZXJGYWlsZWQgKG9iamVjdCBvLCBFcnJvckNvZGVBcmdzIGFyZ3MpCisgICAgeworICAgICAgICBDb25zb2xlLldyaXRlTGluZSAoIkZhaWxlZCB0byByZXNvbHZlICd7MH0nOiB7MX0iLCAobyBhcyBBZGRyZXNzUmVzb2x2ZXIpLkFkZHJlc3MsIGFyZ3MuRXJyb3JDb2RlKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIE9uQWRkcmVzc1Jlc29sdmVkIChvYmplY3QgbywgSG9zdEFkZHJlc3NBcmdzIGFyZ3MpCisgICAgeworICAgICAgICBvYmplY3RzLlJlbW92ZSAobyk7CisKKyAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUgKCJSZXNvbHZlZCB7MH0gdG8gezF9IiwgYXJncy5BZGRyZXNzLCBhcmdzLkhvc3QpOworICAgICAgICBIb3N0TmFtZVJlc29sdmVyIGhyID0gbmV3IEhvc3ROYW1lUmVzb2x2ZXIgKGNsaWVudCwgYXJncy5Ib3N0KTsKKyAgICAgICAgb2JqZWN0cy5BZGQgKGhyKTsKKworICAgICAgICBoci5Gb3VuZCArPSBPbkhvc3ROYW1lUmVzb2x2ZWQ7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBPbkhvc3ROYW1lUmVzb2x2ZWQgKG9iamVjdCBvLCBIb3N0QWRkcmVzc0FyZ3MgYXJncykKKyAgICB7CisgICAgICAgIG9iamVjdHMuUmVtb3ZlIChvKTsKKyAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUgKCJSZXNvbHZlZCB7MH0gdG8gezF9IiwgYXJncy5Ib3N0LCBhcmdzLkFkZHJlc3MpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9Ccm93c2VyQmFzZS5jcyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9Ccm93c2VyQmFzZS5jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWYwMDg2Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL0Jyb3dzZXJCYXNlLmNzCkBAIC0wLDAgKzEsNTAgQEAKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKwordXNpbmcgU3lzdGVtOworCituYW1lc3BhY2UgQXZhaGkKK3sKKyAgICBwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQnJvd3NlckJhc2UKKyAgICB7CisgICAgICAgIHB1YmxpYyBldmVudCBFdmVudEhhbmRsZXIgQ2FjaGVFeGhhdXN0ZWQ7CisgICAgICAgIHB1YmxpYyBldmVudCBFdmVudEhhbmRsZXIgQWxsRm9yTm93OworICAgICAgICBwdWJsaWMgZXZlbnQgRXZlbnRIYW5kbGVyIEZhaWxlZDsKKworICAgICAgICBpbnRlcm5hbCB2b2lkIEVtaXRCcm93c2VyRXZlbnQgKEJyb3dzZXJFdmVudCBiZXZlbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoYmV2ZW50KSB7CisgICAgICAgICAgICBjYXNlIEJyb3dzZXJFdmVudC5DYWNoZUV4aGF1c3RlZDoKKyAgICAgICAgICAgICAgICBpZiAoQ2FjaGVFeGhhdXN0ZWQgIT0gbnVsbCkKKyAgICAgICAgICAgICAgICAgICAgQ2FjaGVFeGhhdXN0ZWQgKHRoaXMsIG5ldyBFdmVudEFyZ3MgKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCcm93c2VyRXZlbnQuQWxsRm9yTm93OgorICAgICAgICAgICAgICAgIGlmIChBbGxGb3JOb3cgIT0gbnVsbCkKKyAgICAgICAgICAgICAgICAgICAgQWxsRm9yTm93ICh0aGlzLCBuZXcgRXZlbnRBcmdzICgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQnJvd3NlckV2ZW50LkZhaWx1cmU6CisgICAgICAgICAgICAgICAgaWYgKEZhaWxlZCAhPSBudWxsKQorICAgICAgICAgICAgICAgICAgICBGYWlsZWQgKHRoaXMsIG5ldyBFdmVudEFyZ3MgKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9DbGllbnQuY3MgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvQ2xpZW50LmNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzODE1YjMKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvQ2xpZW50LmNzCkBAIC0wLDAgKzEsMzgzIEBACisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKwordXNpbmcgU3lzdGVtOwordXNpbmcgU3lzdGVtLlRocmVhZGluZzsKK3VzaW5nIFN5c3RlbS5Db2xsZWN0aW9uczsKK3VzaW5nIFN5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2aWNlczsKK3VzaW5nIE1vbm8uVW5peDsKK3VzaW5nIE1vbm8uVW5peC5OYXRpdmU7CisKK3VzaW5nIFN0ZGxpYiA9IE1vbm8uVW5peC5OYXRpdmUuU3RkbGliOworCituYW1lc3BhY2UgQXZhaGkKK3sKKyAgICBpbnRlcm5hbCBlbnVtIFJlc29sdmVyRXZlbnQgeworICAgICAgICBGb3VuZCwKKyAgICAgICAgRmFpbHVyZQorICAgIH0KKworICAgIGludGVybmFsIGVudW0gQnJvd3NlckV2ZW50IHsKKyAgICAgICAgQWRkZWQsCisgICAgICAgIFJlbW92ZWQsCisgICAgICAgIENhY2hlRXhoYXVzdGVkLAorICAgICAgICBBbGxGb3JOb3csCisgICAgICAgIEZhaWx1cmUKKyAgICB9CisKKyAgICBpbnRlcm5hbCBkZWxlZ2F0ZSBpbnQgUG9sbENhbGxiYWNrIChJbnRQdHIgdWZkcywgdWludCBuZmRzLCBpbnQgdGltZW91dCk7CisgICAgaW50ZXJuYWwgZGVsZWdhdGUgdm9pZCBDbGllbnRDYWxsYmFjayAoSW50UHRyIGNsaWVudCwgQ2xpZW50U3RhdGUgc3RhdGUsIEludFB0ciB1c2VyRGF0YSk7CisKKyAgICBwdWJsaWMgZGVsZWdhdGUgdm9pZCBDbGllbnRTdGF0ZUhhbmRsZXIgKG9iamVjdCBvLCBDbGllbnRTdGF0ZUFyZ3Mgc3RhdGUpOworCisgICAgcHVibGljIGNsYXNzIENsaWVudFN0YXRlQXJncyA6IEV2ZW50QXJncworICAgIHsKKyAgICAgICAgcHJpdmF0ZSBDbGllbnRTdGF0ZSBzdGF0ZTsKKyAgICAgICAgcHJpdmF0ZSBFcnJvckNvZGUgZXJyb3I7CisKKyAgICAgICAgcHVibGljIENsaWVudFN0YXRlIFN0YXRlCisgICAgICAgIHsKKyAgICAgICAgICAgIGdldCB7IHJldHVybiBzdGF0ZTsgfQorICAgICAgICB9CisKKyAgICAgICAgcHVibGljIEVycm9yQ29kZSBFcnJvcgorICAgICAgICB7CisgICAgICAgICAgICBnZXQgeyByZXR1cm4gZXJyb3I7IH0KKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBDbGllbnRTdGF0ZUFyZ3MgKENsaWVudFN0YXRlIHN0YXRlLCBFcnJvckNvZGUgZXJyb3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTsKKyAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBlcnJvcjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBlbnVtIFByb3RvY29sIHsKKyAgICAgICAgVW5zcGVjaWZpZWQgPSAtMSwKKyAgICAgICAgSVB2NCA9IDAsCisgICAgICAgIElQdjYgPSAxCisgICAgfQorCisgICAgaW50ZXJuYWwgZW51bSBTZXJ2ZXJTdGF0ZSB7CisgICAgICAgIEludmFsaWQsCisgICAgICAgIFJlZ2lzdGVyaW5nLAorICAgICAgICBSdW5uaW5nLAorICAgICAgICBDb2xsaXNpb24KKyAgICB9CisKKyAgICBwdWJsaWMgZW51bSBDbGllbnRTdGF0ZSB7CisgICAgICAgIFJlZ2lzdGVyaW5nID0gU2VydmVyU3RhdGUuUmVnaXN0ZXJpbmcsCisgICAgICAgIFJ1bm5pbmcgPSBTZXJ2ZXJTdGF0ZS5SdW5uaW5nLAorICAgICAgICBDb2xsaXNpb24gPSBTZXJ2ZXJTdGF0ZS5Db2xsaXNpb24sCisgICAgICAgIEZhaWx1cmUgPSAxMDAsCisgICAgICAgIENvbm5lY3RpbmcgPSAxMDEKKyAgICB9CisKKyAgICBbRmxhZ3NdCisgICAgcHVibGljIGVudW0gTG9va3VwRmxhZ3MgeworICAgICAgICBOb25lID0gMCwKKyAgICAgICAgVXNlV2lkZUFyZWEgPSAxLAorICAgICAgICBVc2VNdWx0aWNhc3QgPSAyLAorCU5vVHh0ID0gNCwKKyAgICAgICAgTm9BZGRyZXNzID0gOAorICAgIH0KKworICAgIFtGbGFnc10KKyAgICBwdWJsaWMgZW51bSBMb29rdXBSZXN1bHRGbGFncyB7CisgICAgICAgIE5vbmUgPSAwLAorICAgICAgICBDYWNoZWQgPSAxLAorICAgICAgICBXaWRlQXJlYSA9IDIsCisgICAgICAgIE11bHRpY2FzdCA9IDQsCisgICAgICAgIExvY2FsID0gOCwKKyAgICAgICAgT3VyT3duID0gMTYsCisgICAgfQorCisgICAgW0ZsYWdzXQorICAgIHB1YmxpYyBlbnVtIENsaWVudEZsYWdzIHsKKyAgICAgICAgTm9uZSA9IDAsCisgICAgICAgIElnbm9yZVVzZXJDb25maWcgPSAxLAorICAgICAgICBOb0ZhaWwgPSAyCisgICAgfQorCisgICAgcHVibGljIGNsYXNzIENsaWVudCA6IElEaXNwb3NhYmxlCisgICAgeworICAgICAgICBwcml2YXRlIEludFB0ciBoYW5kbGU7CisgICAgICAgIHByaXZhdGUgQ2xpZW50Q2FsbGJhY2sgY2I7CisgICAgICAgIHByaXZhdGUgUG9sbENhbGxiYWNrIHBvbGxjYjsKKyAgICAgICAgcHJpdmF0ZSBJbnRQdHIgc3BvbGw7CisKKyAgICAgICAgcHJpdmF0ZSBUaHJlYWQgdGhyZWFkOworCisgICAgICAgIFtEbGxJbXBvcnQgKCJhdmFoaS1jbGllbnQiKV0KKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZXh0ZXJuIEludFB0ciBhdmFoaV9jbGllbnRfbmV3IChJbnRQdHIgcG9sbCwgQ2xpZW50RmxhZ3MgZmxhZ3MsIENsaWVudENhbGxiYWNrIGhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UHRyIHVzZXJEYXRhLCBvdXQgaW50IGVycm9yKTsKKworICAgICAgICBbRGxsSW1wb3J0ICgiYXZhaGktY2xpZW50IildCisgICAgICAgIHByaXZhdGUgc3RhdGljIGV4dGVybiB2b2lkIGF2YWhpX2NsaWVudF9mcmVlIChJbnRQdHIgaGFuZGxlKTsKKworICAgICAgICBbRGxsSW1wb3J0ICgiYXZhaGktY2xpZW50IildCisgICAgICAgIHByaXZhdGUgc3RhdGljIGV4dGVybiBJbnRQdHIgYXZhaGlfY2xpZW50X2dldF92ZXJzaW9uX3N0cmluZyAoSW50UHRyIGhhbmRsZSk7CisKKyAgICAgICAgW0RsbEltcG9ydCAoImF2YWhpLWNsaWVudCIpXQorICAgICAgICBwcml2YXRlIHN0YXRpYyBleHRlcm4gSW50UHRyIGF2YWhpX2NsaWVudF9nZXRfaG9zdF9uYW1lIChJbnRQdHIgaGFuZGxlKTsKKworICAgICAgICBbRGxsSW1wb3J0ICgiYXZhaGktY2xpZW50IildCisgICAgICAgIHByaXZhdGUgc3RhdGljIGV4dGVybiBJbnRQdHIgYXZhaGlfY2xpZW50X2dldF9kb21haW5fbmFtZSAoSW50UHRyIGhhbmRsZSk7CisKKyAgICAgICAgW0RsbEltcG9ydCAoImF2YWhpLWNsaWVudCIpXQorICAgICAgICBwcml2YXRlIHN0YXRpYyBleHRlcm4gSW50UHRyIGF2YWhpX2NsaWVudF9nZXRfaG9zdF9uYW1lX2ZxZG4gKEludFB0ciBoYW5kbGUpOworCisgICAgICAgIFtEbGxJbXBvcnQgKCJhdmFoaS1jbGllbnQiKV0KKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZXh0ZXJuIENsaWVudFN0YXRlIGF2YWhpX2NsaWVudF9nZXRfc3RhdGUgKEludFB0ciBoYW5kbGUpOworCisgICAgICAgIFtEbGxJbXBvcnQgKCJhdmFoaS1jbGllbnQiKV0KKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZXh0ZXJuIGludCBhdmFoaV9jbGllbnRfZXJybm8gKEludFB0ciBoYW5kbGUpOworCisgICAgICAgIFtEbGxJbXBvcnQgKCJhdmFoaS1jb21tb24iKV0KKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZXh0ZXJuIEludFB0ciBhdmFoaV9zaW1wbGVfcG9sbF9uZXcgKCk7CisKKyAgICAgICAgW0RsbEltcG9ydCAoImF2YWhpLWNvbW1vbiIpXQorICAgICAgICBwcml2YXRlIHN0YXRpYyBleHRlcm4gSW50UHRyIGF2YWhpX3NpbXBsZV9wb2xsX2dldCAoSW50UHRyIHNwb2xsKTsKKworICAgICAgICBbRGxsSW1wb3J0ICgiYXZhaGktY29tbW9uIildCisgICAgICAgIHByaXZhdGUgc3RhdGljIGV4dGVybiB2b2lkIGF2YWhpX3NpbXBsZV9wb2xsX2ZyZWUgKEludFB0ciBzcG9sbCk7CisKKyAgICAgICAgW0RsbEltcG9ydCAoImF2YWhpLWNvbW1vbiIpXQorICAgICAgICBwcml2YXRlIHN0YXRpYyBleHRlcm4gaW50IGF2YWhpX3NpbXBsZV9wb2xsX2xvb3AgKEludFB0ciBzcG9sbCk7CisKKyAgICAgICAgW0RsbEltcG9ydCAoImF2YWhpLWNvbW1vbiIpXQorICAgICAgICBwcml2YXRlIHN0YXRpYyBleHRlcm4gdm9pZCBhdmFoaV9zaW1wbGVfcG9sbF9zZXRfZnVuYyAoSW50UHRyIHNwb2xsLCBQb2xsQ2FsbGJhY2sgY2IpOworCisgICAgICAgIFtEbGxJbXBvcnQgKCJhdmFoaS1jb21tb24iKV0KKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZXh0ZXJuIHZvaWQgYXZhaGlfc2ltcGxlX3BvbGxfcXVpdCAoSW50UHRyIHNwb2xsKTsKKworICAgICAgICBbRGxsSW1wb3J0ICgiYXZhaGktY2xpZW50IildCisgICAgICAgIHByaXZhdGUgc3RhdGljIGV4dGVybiB1aW50IGF2YWhpX2NsaWVudF9nZXRfbG9jYWxfc2VydmljZV9jb29raWUgKEludFB0ciBjbGllbnQpOworCisgICAgICAgIFtEbGxJbXBvcnQgKCJhdmFoaS1jb21tb24iKV0KKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZXh0ZXJuIGludCBhdmFoaV9zZXJ2aWNlX25hbWVfam9pbiAoSW50UHRyIGJ1ZiwgaW50IGxlbiwgYnl0ZVtdIG5hbWUsIGJ5dGVbXSB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlW10gZG9tYWluKTsKKworICAgICAgICBbRGxsSW1wb3J0ICgiYXZhaGktY29tbW9uIildCisgICAgICAgIHByaXZhdGUgc3RhdGljIGV4dGVybiBpbnQgYXZhaGlfc2VydmljZV9uYW1lX3NwbGl0IChieXRlW10gc2VydmljZSwgSW50UHRyIG5hbWUsIGludCBuYW1lX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFB0ciB0eXBlLCBpbnQgdHlwZV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRQdHIgZG9tYWluLCBpbnQgZG9tYWluX2xlbik7CisKKworICAgICAgICBbRGxsSW1wb3J0ICgibGliYyIpXQorICAgICAgICBwcml2YXRlIHN0YXRpYyBleHRlcm4gaW50IHBvbGwoSW50UHRyIHVmZHMsIHVpbnQgbmZkcywgaW50IHRpbWVvdXQpOworCisgICAgICAgIHB1YmxpYyBldmVudCBDbGllbnRTdGF0ZUhhbmRsZXIgU3RhdGVDaGFuZ2VkOworCisgICAgICAgIGludGVybmFsIEludFB0ciBIYW5kbGUKKyAgICAgICAgeworICAgICAgICAgICAgZ2V0IHsgcmV0dXJuIGhhbmRsZTsgfQorICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHN0cmluZyBWZXJzaW9uCisgICAgICAgIHsKKyAgICAgICAgICAgIGdldCB7CisgICAgICAgICAgICAgICAgbG9jayAodGhpcykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gVXRpbGl0eS5QdHJUb1N0cmluZyAoYXZhaGlfY2xpZW50X2dldF92ZXJzaW9uX3N0cmluZyAoaGFuZGxlKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHN0cmluZyBIb3N0TmFtZQorICAgICAgICB7CisgICAgICAgICAgICBnZXQgeworICAgICAgICAgICAgICAgIGxvY2sgKHRoaXMpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFV0aWxpdHkuUHRyVG9TdHJpbmcgKGF2YWhpX2NsaWVudF9nZXRfaG9zdF9uYW1lIChoYW5kbGUpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgc3RyaW5nIERvbWFpbk5hbWUKKyAgICAgICAgeworICAgICAgICAgICAgZ2V0IHsKKyAgICAgICAgICAgICAgICBsb2NrICh0aGlzKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBVdGlsaXR5LlB0clRvU3RyaW5nIChhdmFoaV9jbGllbnRfZ2V0X2RvbWFpbl9uYW1lIChoYW5kbGUpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgc3RyaW5nIEhvc3ROYW1lRnFkbgorICAgICAgICB7CisgICAgICAgICAgICBnZXQgeworICAgICAgICAgICAgICAgIGxvY2sgKHRoaXMpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFV0aWxpdHkuUHRyVG9TdHJpbmcgKGF2YWhpX2NsaWVudF9nZXRfaG9zdF9uYW1lX2ZxZG4gKGhhbmRsZSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBDbGllbnRTdGF0ZSBTdGF0ZQorICAgICAgICB7CisgICAgICAgICAgICBnZXQgeworICAgICAgICAgICAgICAgIGxvY2sgKHRoaXMpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChDbGllbnRTdGF0ZSkgYXZhaGlfY2xpZW50X2dldF9zdGF0ZSAoaGFuZGxlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdWludCBMb2NhbFNlcnZpY2VDb29raWUKKyAgICAgICAgeworICAgICAgICAgICAgZ2V0IHsKKyAgICAgICAgICAgICAgICBsb2NrICh0aGlzKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBhdmFoaV9jbGllbnRfZ2V0X2xvY2FsX3NlcnZpY2VfY29va2llIChoYW5kbGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGludGVybmFsIEVycm9yQ29kZSBMYXN0RXJyb3IKKyAgICAgICAgeworICAgICAgICAgICAgZ2V0IHsKKyAgICAgICAgICAgICAgICBsb2NrICh0aGlzKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAoRXJyb3JDb2RlKSBhdmFoaV9jbGllbnRfZXJybm8gKGhhbmRsZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHVibGljIENsaWVudCAoQ2xpZW50RmxhZ3MgZmxhZ3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNwb2xsID0gYXZhaGlfc2ltcGxlX3BvbGxfbmV3ICgpOworCisgICAgICAgICAgICBwb2xsY2IgPSBPblBvbGxDYWxsYmFjazsKKyAgICAgICAgICAgIGF2YWhpX3NpbXBsZV9wb2xsX3NldF9mdW5jIChzcG9sbCwgcG9sbGNiKTsKKyAgICAgICAgICAgIEludFB0ciBwb2xsID0gYXZhaGlfc2ltcGxlX3BvbGxfZ2V0IChzcG9sbCk7CisgICAgICAgICAgICBjYiA9IE9uQ2xpZW50Q2FsbGJhY2s7CisKKyAgICAgICAgICAgIGludCBlcnJvcjsKKyAgICAgICAgICAgIGhhbmRsZSA9IGF2YWhpX2NsaWVudF9uZXcgKHBvbGwsIGZsYWdzLCBjYiwgSW50UHRyLlplcm8sIG91dCBlcnJvcik7CisgICAgICAgICAgICBpZiAoZXJyb3IgIT0gMCkKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ2xpZW50RXhjZXB0aW9uIChlcnJvcik7CisKKyAgICAgICAgICAgIHRocmVhZCA9IG5ldyBUaHJlYWQgKFBvbGxMb29wKTsKKyAgICAgICAgICAgIHRocmVhZC5Jc0JhY2tncm91bmQgPSB0cnVlOworICAgICAgICAgICAgdGhyZWFkLlN0YXJ0ICgpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIENsaWVudCAoKSA6IHRoaXMgKENsaWVudEZsYWdzLk5vbmUpIHsKKyAgICAgICAgfQorCisgICAgICAgIH5DbGllbnQgKCkKKyAgICAgICAgeworICAgICAgICAgICAgRGlzcG9zZSAoKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIERpc3Bvc2UgKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGhhbmRsZSAhPSBJbnRQdHIuWmVybykgeworICAgICAgICAgICAgICAgIGxvY2sgKHRoaXMpIHsKKyAgICAgICAgICAgICAgICAgICAgYXZhaGlfY2xpZW50X2ZyZWUgKGhhbmRsZSk7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZSA9IEludFB0ci5aZXJvOworCisgICAgICAgICAgICAgICAgICAgIGF2YWhpX3NpbXBsZV9wb2xsX3F1aXQgKHNwb2xsKTsKKyAgICAgICAgICAgICAgICAgICAgTW9uaXRvci5XYWl0ICh0aGlzKTsKKworICAgICAgICAgICAgICAgICAgICBhdmFoaV9zaW1wbGVfcG9sbF9mcmVlIChzcG9sbCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHN0YXRpYyBzdHJpbmcgSm9pblNlcnZpY2VOYW1lIChzdHJpbmcgbmFtZSwgc3RyaW5nIHR5cGUsIHN0cmluZyBkb21haW4pCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBsZW4gPSA0ICogKG5hbWUuTGVuZ3RoICsgdHlwZS5MZW5ndGggKyBkb21haW4uTGVuZ3RoKSArIDQ7CisgICAgICAgICAgICBJbnRQdHIgYnVmID0gU3RkbGliLm1hbGxvYyAoKHVsb25nKSBsZW4pOworCisgICAgICAgICAgICBpbnQgcmV0ID0gYXZhaGlfc2VydmljZV9uYW1lX2pvaW4gKGJ1ZiwgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlsaXR5LlN0cmluZ1RvQnl0ZXMgKG5hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlsaXR5LlN0cmluZ1RvQnl0ZXMgKHR5cGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlsaXR5LlN0cmluZ1RvQnl0ZXMgKGRvbWFpbikpOworCisgICAgICAgICAgICBpZiAocmV0IDwgMCkgeworICAgICAgICAgICAgICAgIFV0aWxpdHkuRnJlZSAoYnVmKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsgLy8gRklYTUUsIHNob3VsZCB0aHJvdyBleGNlcHRpb24KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3RyaW5nIHNlcnZpY2UgPSBVdGlsaXR5LlB0clRvU3RyaW5nIChidWYpOworICAgICAgICAgICAgVXRpbGl0eS5GcmVlIChidWYpOworCisgICAgICAgICAgICByZXR1cm4gc2VydmljZTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBTcGxpdFNlcnZpY2VOYW1lIChzdHJpbmcgc2VydmljZSwgb3V0IHN0cmluZyBuYW1lLCBvdXQgc3RyaW5nIHR5cGUsIG91dCBzdHJpbmcgZG9tYWluKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgbGVuID0gMTAyNDsKKworICAgICAgICAgICAgSW50UHRyIG5hbWVQdHIgPSBTdGRsaWIubWFsbG9jICgodWxvbmcpIGxlbik7CisgICAgICAgICAgICBJbnRQdHIgdHlwZVB0ciA9IFN0ZGxpYi5tYWxsb2MgKCh1bG9uZykgbGVuKTsKKyAgICAgICAgICAgIEludFB0ciBkb21haW5QdHIgPSBTdGRsaWIubWFsbG9jICgodWxvbmcpIGxlbik7CisKKyAgICAgICAgICAgIGludCByZXQgPSBhdmFoaV9zZXJ2aWNlX25hbWVfc3BsaXQgKFV0aWxpdHkuU3RyaW5nVG9CeXRlcyAoc2VydmljZSksIG5hbWVQdHIsIGxlbiwgdHlwZVB0ciwgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tYWluUHRyLCBsZW4pOworCisgICAgICAgICAgICBpZiAocmV0IDwgMCkgeworICAgICAgICAgICAgICAgIFV0aWxpdHkuRnJlZSAobmFtZVB0cik7CisgICAgICAgICAgICAgICAgVXRpbGl0eS5GcmVlICh0eXBlUHRyKTsKKyAgICAgICAgICAgICAgICBVdGlsaXR5LkZyZWUgKGRvbWFpblB0cik7CisKKyAgICAgICAgICAgICAgICBuYW1lID0gbnVsbDsKKyAgICAgICAgICAgICAgICB0eXBlID0gbnVsbDsKKyAgICAgICAgICAgICAgICBkb21haW4gPSBudWxsOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbmFtZSA9IFV0aWxpdHkuUHRyVG9TdHJpbmcgKG5hbWVQdHIpOworICAgICAgICAgICAgdHlwZSA9IFV0aWxpdHkuUHRyVG9TdHJpbmcgKHR5cGVQdHIpOworICAgICAgICAgICAgZG9tYWluID0gVXRpbGl0eS5QdHJUb1N0cmluZyAoZG9tYWluUHRyKTsKKworICAgICAgICAgICAgVXRpbGl0eS5GcmVlIChuYW1lUHRyKTsKKyAgICAgICAgICAgIFV0aWxpdHkuRnJlZSAodHlwZVB0cik7CisgICAgICAgICAgICBVdGlsaXR5LkZyZWUgKGRvbWFpblB0cik7CisgICAgICAgIH0KKworICAgICAgICBpbnRlcm5hbCB2b2lkIFRocm93RXJyb3IgKCkKKyAgICAgICAgeworICAgICAgICAgICAgRXJyb3JDb2RlIGVycm9yID0gTGFzdEVycm9yOworCisgICAgICAgICAgICBpZiAoZXJyb3IgIT0gRXJyb3JDb2RlLk9rKQorICAgICAgICAgICAgICAgIHRocm93IG5ldyBDbGllbnRFeGNlcHRpb24gKGVycm9yKTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgdm9pZCBPbkNsaWVudENhbGxiYWNrIChJbnRQdHIgY2xpZW50LCBDbGllbnRTdGF0ZSBzdGF0ZSwgSW50UHRyIHVzZXJEYXRhKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoU3RhdGVDaGFuZ2VkICE9IG51bGwpCisgICAgICAgICAgICAgICAgU3RhdGVDaGFuZ2VkICh0aGlzLCBuZXcgQ2xpZW50U3RhdGVBcmdzIChzdGF0ZSwgTGFzdEVycm9yKSk7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIGludCBPblBvbGxDYWxsYmFjayAoSW50UHRyIHVmZHMsIHVpbnQgbmZkcywgaW50IHRpbWVvdXQpIHsKKyAgICAgICAgICAgIE1vbml0b3IuRXhpdCAodGhpcyk7CisgICAgICAgICAgICBpbnQgcmVzdWx0ID0gcG9sbCAodWZkcywgbmZkcywgdGltZW91dCk7CisgICAgICAgICAgICBNb25pdG9yLkVudGVyICh0aGlzKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHZvaWQgUG9sbExvb3AgKCkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBsb2NrICh0aGlzKSB7CisgICAgICAgICAgICAgICAgICAgIGF2YWhpX3NpbXBsZV9wb2xsX2xvb3AgKHNwb2xsKTsKKyAgICAgICAgICAgICAgICAgICAgTW9uaXRvci5QdWxzZSAodGhpcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBDb25zb2xlLkVycm9yLldyaXRlTGluZSAoIkVycm9yIGluIGF2YWhpLXNoYXJwIGV2ZW50IGxvb3A6ICIgKyBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9DbGllbnRFeGNlcHRpb24uY3MgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvQ2xpZW50RXhjZXB0aW9uLmNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmNTExYWMKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvQ2xpZW50RXhjZXB0aW9uLmNzCkBAIC0wLDAgKzEsMTIzIEBACisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKwordXNpbmcgU3lzdGVtOwordXNpbmcgU3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzOworCituYW1lc3BhY2UgQXZhaGkKK3sKKyAgICBwdWJsaWMgZW51bSBFcnJvckNvZGUgeworICAgICAgICBPayA9IDAsCisgICAgICAgIEZhaWx1cmUgPSAtMSwKKyAgICAgICAgQmFkU3RhdGUgPSAtMiwKKyAgICAgICAgSW52YWxpZEhvc3ROYW1lID0gLSAzLAorICAgICAgICBJbnZhbGlkRG9tYWluTmFtZSA9IC00LAorICAgICAgICBOb05ldHdvcmsgPSAtNSwKKyAgICAgICAgSW52YWxpZFRUTCA9IC02LAorICAgICAgICBJc1BhdHRlcm4gPSAtNywKKyAgICAgICAgQ29sbGlzaW9uID0gLTgsCisgICAgICAgIEludmFsaWRSZWNvcmQgPSAtOSwKKyAgICAgICAgSW52YWxpZFNlcnZpY2VOYW1lID0gLTEwLAorICAgICAgICBJbnZhbGlkU2VydmljZVR5cGUgPSAtMTEsCisgICAgICAgIEludmFsaWRQb3J0ID0gLTEyLAorICAgICAgICBJbnZhbGlkS2V5ID0gLTEzLAorICAgICAgICBJbnZhbGlkQWRkcmVzcyA9IC0xNCwKKyAgICAgICAgVGltZW91dCA9IC0xNSwKKyAgICAgICAgVG9vTWFueUNsaWVudHMgPSAtMTYsCisgICAgICAgIFRvb01hbnlPYmplY3RzID0gLTE3LAorICAgICAgICBUb29NYW55RW50cmllcyA9IC0xOCwKKyAgICAgICAgT1MgPSAtMTksCisgICAgICAgIEFjY2Vzc0RlbmllZCA9IC0yMCwKKyAgICAgICAgSW52YWxpZE9wZXJhdGlvbiA9IC0yMSwKKyAgICAgICAgREJ1c0Vycm9yID0gLTIyLAorICAgICAgICBEaXNjb25uZWN0ZWQgPSAtMjMsCisgICAgICAgIE5vTWVtb3J5ID0gLTI0LAorICAgICAgICBJbnZhbGlkT2JqZWN0ID0gLTI1LAorICAgICAgICBOb0RhZW1vbiA9IC0yNiwKKyAgICAgICAgSW52YWxpZEludGVyZmFjZSA9IC0yNywKKyAgICAgICAgSW52YWxpZFByb3RvY29sID0gLTI4LAorICAgICAgICBJbnZhbGlkRmxhZ3MgPSAtMjksCisgICAgICAgIE5vdEZvdW5kID0gLTMwLAorICAgICAgICBJbnZhbGlkQ29uZmlnID0gLTMxLAorICAgICAgICBWZXJzaW9uTWlzbWF0Y2ggPSAtMzIsCisgICAgICAgIEludmFsaWRTZXJ2aWNlU3VidHlwZSA9IC0zMywKKyAgICAgICAgSW52YWxpZFBhY2tldCA9IC0zNCwKKyAgICAgICAgSW52YWxpZERuc0Vycm9yID0gLTM1LAorICAgICAgICBEbnNGb3JtRXJyID0gLTM2LAorICAgICAgICBEbnNTZXJ2RmFpbCA9IC0zNywKKyAgICAgICAgRG5zTnhEb21haW4gPSAtMzgsCisgICAgICAgIERuc05vVGltcCA9IC0zOSwKKyAgICAgICAgRG5zUmVmdXNlZCA9IC00MCwKKyAgICAgICAgRG5zWXhEb21haW4gPSAtNDEsCisgICAgICAgIERuc1l4UnJTZXQgPSAtNDIsCisgICAgICAgIERuc054UnJTZXQgPSAtNDMsCisgICAgICAgIERuc05vdEF1dGggPSAtNDQsCisgICAgICAgIERuc05vdFpvbmUgPSAtNDUsCisgICAgICAgIEludmFsaWRSRGF0YSA9IC00NiwKKyAgICAgICAgSW52YWxpZERuc0NsYXNzID0gLTQ3LAorICAgICAgICBJbnZhbGlkRG5zVHlwZSA9IC00OCwKKyAgICAgICAgTm90U3VwcG9ydGVkID0gLTQ5LAorICAgICAgICBOb3RQZXJtaXR0ZWQgPSAtNTAKKyAgICB9CisKKyAgICBwdWJsaWMgZGVsZWdhdGUgdm9pZCBFcnJvckNvZGVIYW5kbGVyIChvYmplY3QgbywgRXJyb3JDb2RlQXJncyBhcmdzKTsKKworICAgIHB1YmxpYyBjbGFzcyBFcnJvckNvZGVBcmdzIDogRXZlbnRBcmdzCisgICAgeworICAgICAgICBwcml2YXRlIEVycm9yQ29kZSBjb2RlOworCisgICAgICAgIHB1YmxpYyBFcnJvckNvZGUgRXJyb3JDb2RlCisgICAgICAgIHsKKyAgICAgICAgICAgIGdldCB7IHJldHVybiBjb2RlOyB9CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgRXJyb3JDb2RlQXJncyAoRXJyb3JDb2RlIGNvZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRoaXMuY29kZSA9IGNvZGU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgY2xhc3MgQ2xpZW50RXhjZXB0aW9uIDogQXBwbGljYXRpb25FeGNlcHRpb24KKyAgICB7CisgICAgICAgIHByaXZhdGUgRXJyb3JDb2RlIGNvZGU7CisKKyAgICAgICAgW0RsbEltcG9ydCAoImF2YWhpLWNvbW1vbiIpXQorICAgICAgICBwcml2YXRlIHN0YXRpYyBleHRlcm4gSW50UHRyIGF2YWhpX3N0cmVycm9yIChFcnJvckNvZGUgY29kZSk7CisKKyAgICAgICAgcHVibGljIEVycm9yQ29kZSBFcnJvckNvZGUKKyAgICAgICAgeworICAgICAgICAgICAgZ2V0IHsgcmV0dXJuIGNvZGU7IH0KKyAgICAgICAgfQorCisgICAgICAgIGludGVybmFsIENsaWVudEV4Y2VwdGlvbiAoaW50IGNvZGUpIDogdGhpcyAoKEVycm9yQ29kZSkgY29kZSkgeworICAgICAgICB9CisKKyAgICAgICAgaW50ZXJuYWwgQ2xpZW50RXhjZXB0aW9uIChFcnJvckNvZGUgY29kZSkgOiBiYXNlIChHZXRFcnJvclN0cmluZyAoY29kZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRoaXMuY29kZSA9IGNvZGU7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHN0YXRpYyBzdHJpbmcgR2V0RXJyb3JTdHJpbmcgKEVycm9yQ29kZSBjb2RlKQorICAgICAgICB7CisgICAgICAgICAgICBJbnRQdHIgc3RyID0gYXZhaGlfc3RyZXJyb3IgKGNvZGUpOworICAgICAgICAgICAgcmV0dXJuIFV0aWxpdHkuUHRyVG9TdHJpbmcgKHN0cik7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvRG9tYWluQnJvd3Nlci5jcyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9Eb21haW5Ccm93c2VyLmNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExMTY1ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvRG9tYWluQnJvd3Nlci5jcwpAQCAtMCwwICsxLDE5OCBAQAorLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCit1c2luZyBTeXN0ZW07Cit1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnM7Cit1c2luZyBTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2VydmljZXM7Cit1c2luZyBTeXN0ZW0uVGV4dDsKKworbmFtZXNwYWNlIEF2YWhpCit7CisgICAgaW50ZXJuYWwgZGVsZWdhdGUgdm9pZCBEb21haW5Ccm93c2VyQ2FsbGJhY2sgKEludFB0ciBicm93c2VyLCBpbnQgaWZhY2UsIFByb3RvY29sIHByb3RvLCBCcm93c2VyRXZlbnQgYmV2ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRQdHIgZG9tYWluLCBMb29rdXBSZXN1bHRGbGFncyBmbGFncywgSW50UHRyIHVzZXJkYXRhKTsKKworICAgIHB1YmxpYyBlbnVtIERvbWFpbkJyb3dzZXJUeXBlIHsKKyAgICAgICAgQnJvd3NlLAorICAgICAgICBCcm93c2VEZWZhdWx0LAorICAgICAgICBSZWdpc3RlciwKKyAgICAgICAgUmVnaXN0ZXJEZWZhdWx0LAorICAgICAgICBCcm93c2VMZWdhY3kKKyAgICB9CisKKyAgICBwdWJsaWMgc3RydWN0IERvbWFpbkluZm8KKyAgICB7CisgICAgICAgIHB1YmxpYyBpbnQgTmV0d29ya0ludGVyZmFjZTsKKyAgICAgICAgcHVibGljIFByb3RvY29sIFByb3RvY29sOworICAgICAgICBwdWJsaWMgc3RyaW5nIERvbWFpbjsKKyAgICAgICAgcHVibGljIExvb2t1cFJlc3VsdEZsYWdzIEZsYWdzOworICAgIH0KKworICAgIHB1YmxpYyBjbGFzcyBEb21haW5JbmZvQXJncyA6IEV2ZW50QXJncworICAgIHsKKyAgICAgICAgcHJpdmF0ZSBEb21haW5JbmZvIGRvbWFpbjsKKworICAgICAgICBwdWJsaWMgRG9tYWluSW5mbyBEb21haW4KKyAgICAgICAgeworICAgICAgICAgICAgZ2V0IHsgcmV0dXJuIGRvbWFpbjsgfQorICAgICAgICB9CisKKyAgICAgICAgcHVibGljIERvbWFpbkluZm9BcmdzIChEb21haW5JbmZvIGRvbWFpbikKKyAgICAgICAgeworICAgICAgICAgICAgdGhpcy5kb21haW4gPSBkb21haW47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgZGVsZWdhdGUgdm9pZCBEb21haW5JbmZvSGFuZGxlciAob2JqZWN0IG8sIERvbWFpbkluZm9BcmdzIGFyZ3MpOworCisgICAgcHVibGljIGNsYXNzIERvbWFpbkJyb3dzZXIgOiBCcm93c2VyQmFzZSwgSURpc3Bvc2FibGUKKyAgICB7CisgICAgICAgIHByaXZhdGUgSW50UHRyIGhhbmRsZTsKKyAgICAgICAgcHJpdmF0ZSBBcnJheUxpc3QgaW5mb3MgPSBuZXcgQXJyYXlMaXN0ICgpOworICAgICAgICBwcml2YXRlIENsaWVudCBjbGllbnQ7CisgICAgICAgIHByaXZhdGUgaW50IGlmYWNlOworICAgICAgICBwcml2YXRlIFByb3RvY29sIHByb3RvOworICAgICAgICBwcml2YXRlIHN0cmluZyBkb21haW47CisgICAgICAgIHByaXZhdGUgRG9tYWluQnJvd3NlclR5cGUgYnR5cGU7CisgICAgICAgIHByaXZhdGUgTG9va3VwRmxhZ3MgZmxhZ3M7CisgICAgICAgIHByaXZhdGUgRG9tYWluQnJvd3NlckNhbGxiYWNrIGNiOworCisgICAgICAgIHByaXZhdGUgQXJyYXlMaXN0IGFkZExpc3RlbmVycyA9IG5ldyBBcnJheUxpc3QgKCk7CisgICAgICAgIHByaXZhdGUgQXJyYXlMaXN0IHJlbW92ZUxpc3RlbmVycyA9IG5ldyBBcnJheUxpc3QgKCk7CisKKyAgICAgICAgW0RsbEltcG9ydCAoImF2YWhpLWNsaWVudCIpXQorICAgICAgICBwcml2YXRlIHN0YXRpYyBleHRlcm4gSW50UHRyIGF2YWhpX2RvbWFpbl9icm93c2VyX25ldyAoSW50UHRyIGNsaWVudCwgaW50IGlmYWNlLCBpbnQgcHJvdG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlW10gZG9tYWluLCBpbnQgYnR5cGUsIExvb2t1cEZsYWdzIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9tYWluQnJvd3NlckNhbGxiYWNrIGNiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UHRyIHVzZXJkYXRhKTsKKworICAgICAgICBbRGxsSW1wb3J0ICgiYXZhaGktY2xpZW50IildCisgICAgICAgIHByaXZhdGUgc3RhdGljIGV4dGVybiB2b2lkIGF2YWhpX2RvbWFpbl9icm93c2VyX2ZyZWUgKEludFB0ciBoYW5kbGUpOworCisgICAgICAgIHB1YmxpYyBldmVudCBEb21haW5JbmZvSGFuZGxlciBEb21haW5BZGRlZAorICAgICAgICB7CisgICAgICAgICAgICBhZGQgeworICAgICAgICAgICAgICAgIGFkZExpc3RlbmVycy5BZGQgKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBTdGFydCAoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlbW92ZSB7CisgICAgICAgICAgICAgICAgYWRkTGlzdGVuZXJzLlJlbW92ZSAodmFsdWUpOworICAgICAgICAgICAgICAgIFN0b3AgKGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBldmVudCBEb21haW5JbmZvSGFuZGxlciBEb21haW5SZW1vdmVkCisgICAgICAgIHsKKyAgICAgICAgICAgIGFkZCB7CisgICAgICAgICAgICAgICAgcmVtb3ZlTGlzdGVuZXJzLkFkZCAodmFsdWUpOworICAgICAgICAgICAgICAgIFN0YXJ0ICgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVtb3ZlIHsKKyAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcnMuUmVtb3ZlICh2YWx1ZSk7CisgICAgICAgICAgICAgICAgU3RvcCAoZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHVibGljIERvbWFpbkluZm9bXSBEb21haW5zCisgICAgICAgIHsKKyAgICAgICAgICAgIGdldCB7IHJldHVybiAoRG9tYWluSW5mb1tdKSBpbmZvcy5Ub0FycmF5ICh0eXBlb2YgKERvbWFpbkluZm8pKTsgfQorICAgICAgICB9CisKKyAgICAgICAgcHVibGljIERvbWFpbkJyb3dzZXIgKENsaWVudCBjbGllbnQpIDogdGhpcyAoY2xpZW50LCAtMSwgUHJvdG9jb2wuVW5zcGVjaWZpZWQsIGNsaWVudC5Eb21haW5OYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEb21haW5Ccm93c2VyVHlwZS5Ccm93c2UsIExvb2t1cEZsYWdzLk5vbmUpIHsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBEb21haW5Ccm93c2VyIChDbGllbnQgY2xpZW50LCBpbnQgaWZhY2UsIFByb3RvY29sIHByb3RvLCBzdHJpbmcgZG9tYWluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9tYWluQnJvd3NlclR5cGUgYnR5cGUsIExvb2t1cEZsYWdzIGZsYWdzKQorICAgICAgICB7CisgICAgICAgICAgICB0aGlzLmNsaWVudCA9IGNsaWVudDsKKyAgICAgICAgICAgIHRoaXMuaWZhY2UgPSBpZmFjZTsKKyAgICAgICAgICAgIHRoaXMucHJvdG8gPSBwcm90bzsKKyAgICAgICAgICAgIHRoaXMuZG9tYWluID0gZG9tYWluOworICAgICAgICAgICAgdGhpcy5idHlwZSA9IGJ0eXBlOworICAgICAgICAgICAgdGhpcy5mbGFncyA9IGZsYWdzOworICAgICAgICAgICAgY2IgPSBPbkRvbWFpbkJyb3dzZXJDYWxsYmFjazsKKyAgICAgICAgfQorCisgICAgICAgIH5Eb21haW5Ccm93c2VyICgpCisgICAgICAgIHsKKyAgICAgICAgICAgIERpc3Bvc2UgKCk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBEaXNwb3NlICgpCisgICAgICAgIHsKKyAgICAgICAgICAgIFN0b3AgKHRydWUpOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSB2b2lkIFN0YXJ0ICgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjbGllbnQuSGFuZGxlID09IEludFB0ci5aZXJvICYmIGhhbmRsZSAhPSBJbnRQdHIuWmVybyB8fAorICAgICAgICAgICAgICAgIChhZGRMaXN0ZW5lcnMuQ291bnQgPT0gMCAmJiByZW1vdmVMaXN0ZW5lcnMuQ291bnQgPT0gMCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBsb2NrIChjbGllbnQpIHsKKyAgICAgICAgICAgICAgICBoYW5kbGUgPSBhdmFoaV9kb21haW5fYnJvd3Nlcl9uZXcgKGNsaWVudC5IYW5kbGUsIGlmYWNlLCAoaW50KSBwcm90bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxpdHkuU3RyaW5nVG9CeXRlcyAoZG9tYWluKSwgKGludCkgYnR5cGUsIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2IsIEludFB0ci5aZXJvKTsKKworICAgICAgICAgICAgICAgIGlmIChoYW5kbGUgPT0gSW50UHRyLlplcm8pCisgICAgICAgICAgICAgICAgICAgIGNsaWVudC5UaHJvd0Vycm9yICgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSB2b2lkIFN0b3AgKGJvb2wgZm9yY2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjbGllbnQuSGFuZGxlICE9IEludFB0ci5aZXJvICYmIGhhbmRsZSAhPSBJbnRQdHIuWmVybyAmJgorICAgICAgICAgICAgICAgIChmb3JjZSB8fCAoYWRkTGlzdGVuZXJzLkNvdW50ID09IDAgJiYgcmVtb3ZlTGlzdGVuZXJzLkNvdW50ID09IDApKSkgeworICAgICAgICAgICAgICAgIGxvY2sgKGNsaWVudCkgeworICAgICAgICAgICAgICAgICAgICBhdmFoaV9kb21haW5fYnJvd3Nlcl9mcmVlIChoYW5kbGUpOworICAgICAgICAgICAgICAgICAgICBoYW5kbGUgPSBJbnRQdHIuWmVybzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHZvaWQgT25Eb21haW5Ccm93c2VyQ2FsbGJhY2sgKEludFB0ciBicm93c2VyLCBpbnQgaWZhY2UsIFByb3RvY29sIHByb3RvLCBCcm93c2VyRXZlbnQgYmV2ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFB0ciBkb21haW4sIExvb2t1cFJlc3VsdEZsYWdzIGZsYWdzLCBJbnRQdHIgdXNlcmRhdGEpCisgICAgICAgIHsKKworICAgICAgICAgICAgRG9tYWluSW5mbyBpbmZvOworICAgICAgICAgICAgaW5mby5OZXR3b3JrSW50ZXJmYWNlID0gaWZhY2U7CisgICAgICAgICAgICBpbmZvLlByb3RvY29sID0gcHJvdG87CisgICAgICAgICAgICBpbmZvLkRvbWFpbiA9IFV0aWxpdHkuUHRyVG9TdHJpbmcgKGRvbWFpbik7CisgICAgICAgICAgICBpbmZvLkZsYWdzID0gZmxhZ3M7CisKKyAgICAgICAgICAgIHN3aXRjaCAoYmV2ZW50KSB7CisgICAgICAgICAgICBjYXNlIEJyb3dzZXJFdmVudC5BZGRlZDoKKyAgICAgICAgICAgICAgICBpbmZvcy5BZGQgKGluZm8pOworCisgICAgICAgICAgICAgICAgZm9yZWFjaCAoRG9tYWluSW5mb0hhbmRsZXIgaGFuZGxlciBpbiBhZGRMaXN0ZW5lcnMpCisgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIgKHRoaXMsIG5ldyBEb21haW5JbmZvQXJncyAoaW5mbykpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCcm93c2VyRXZlbnQuUmVtb3ZlZDoKKyAgICAgICAgICAgICAgICBpbmZvcy5SZW1vdmUgKGluZm8pOworCisgICAgICAgICAgICAgICAgZm9yZWFjaCAoRG9tYWluSW5mb0hhbmRsZXIgaGFuZGxlciBpbiByZW1vdmVMaXN0ZW5lcnMpCisgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIgKHRoaXMsIG5ldyBEb21haW5JbmZvQXJncyAoaW5mbykpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBFbWl0QnJvd3NlckV2ZW50IChiZXZlbnQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL0VudHJ5R3JvdXAuY3MgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvRW50cnlHcm91cC5jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGFiYWU0Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL0VudHJ5R3JvdXAuY3MKQEAgLTAsMCArMSwzNzYgQEAKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKwordXNpbmcgU3lzdGVtOwordXNpbmcgU3lzdGVtLk5ldDsKK3VzaW5nIFN5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2aWNlczsKK3VzaW5nIFN5c3RlbS5UZXh0OwordXNpbmcgTW9uby5Vbml4OworCituYW1lc3BhY2UgQXZhaGkKK3sKKworICAgIFtGbGFnc10KKyAgICBwdWJsaWMgZW51bSBQdWJsaXNoRmxhZ3MgeworICAgICAgICBOb25lID0gMCwKKyAgICAgICAgVW5pcXVlID0gMSwKKyAgICAgICAgTm9Qcm9iZSA9IDIsCisgICAgICAgIE5vQW5ub3VuY2UgPSA0LAorICAgICAgICBBbGxvd011bHRpcGxlID0gOCwKKyAgICAgICAgTm9SZXZlcnNlID0gMTYsCisgICAgICAgIE5vQ29va2llID0gMzIsCisgICAgICAgIFVwZGF0ZSA9IDY0LAorICAgICAgICBVc2VXaWRlQXJlYSA9IDEyOCwKKyAgICAgICAgVXNlTXVsdGljYXN0ID0gMjU2CisgICAgfQorCisgICAgcHVibGljIGVudW0gRW50cnlHcm91cFN0YXRlIHsKKyAgICAgICAgVW5jb21taXRlZCwKKyAgICAgICAgUmVnaXN0ZXJpbmcsCisgICAgICAgIEVzdGFibGlzaGVkLAorICAgICAgICBDb2xsaXNpb24sCisgICAgICAgIEZhaWx1cmUKKyAgICB9CisKKyAgICBwdWJsaWMgY2xhc3MgRW50cnlHcm91cFN0YXRlQXJncyA6IEV2ZW50QXJncworICAgIHsKKyAgICAgICAgcHJpdmF0ZSBFbnRyeUdyb3VwU3RhdGUgc3RhdGU7CisKKyAgICAgICAgcHVibGljIEVudHJ5R3JvdXBTdGF0ZSBTdGF0ZQorICAgICAgICB7CisgICAgICAgICAgICBnZXQgeyByZXR1cm4gc3RhdGU7IH0KKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBFbnRyeUdyb3VwU3RhdGVBcmdzIChFbnRyeUdyb3VwU3RhdGUgc3RhdGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGludGVybmFsIGRlbGVnYXRlIHZvaWQgRW50cnlHcm91cENhbGxiYWNrIChJbnRQdHIgZ3JvdXAsIEVudHJ5R3JvdXBTdGF0ZSBzdGF0ZSwgSW50UHRyIHVzZXJkYXRhKTsKKyAgICBwdWJsaWMgZGVsZWdhdGUgdm9pZCBFbnRyeUdyb3VwU3RhdGVIYW5kbGVyIChvYmplY3QgbywgRW50cnlHcm91cFN0YXRlQXJncyBhcmdzKTsKKworICAgIHB1YmxpYyBjbGFzcyBFbnRyeUdyb3VwIDogSURpc3Bvc2FibGUKKyAgICB7CisgICAgICAgIHByaXZhdGUgQ2xpZW50IGNsaWVudDsKKyAgICAgICAgcHJpdmF0ZSBJbnRQdHIgaGFuZGxlOworICAgICAgICBwcml2YXRlIEVudHJ5R3JvdXBDYWxsYmFjayBjYjsKKworICAgICAgICBbRGxsSW1wb3J0ICgiYXZhaGktY2xpZW50IildCisgICAgICAgIHByaXZhdGUgc3RhdGljIGV4dGVybiBJbnRQdHIgYXZhaGlfZW50cnlfZ3JvdXBfbmV3IChJbnRQdHIgY2xpZW50LCBFbnRyeUdyb3VwQ2FsbGJhY2sgY2IsIEludFB0ciB1c2VyZGF0YSk7CisKKyAgICAgICAgW0RsbEltcG9ydCAoImF2YWhpLWNsaWVudCIpXQorICAgICAgICBwcml2YXRlIHN0YXRpYyBleHRlcm4gaW50IGF2YWhpX2VudHJ5X2dyb3VwX2NvbW1pdCAoSW50UHRyIGdyb3VwKTsKKworICAgICAgICBbRGxsSW1wb3J0ICgiYXZhaGktY2xpZW50IildCisgICAgICAgIHByaXZhdGUgc3RhdGljIGV4dGVybiBpbnQgYXZhaGlfZW50cnlfZ3JvdXBfcmVzZXQgKEludFB0ciBncm91cCk7CisKKyAgICAgICAgW0RsbEltcG9ydCAoImF2YWhpLWNsaWVudCIpXQorICAgICAgICBwcml2YXRlIHN0YXRpYyBleHRlcm4gRW50cnlHcm91cFN0YXRlIGF2YWhpX2VudHJ5X2dyb3VwX2dldF9zdGF0ZSAoSW50UHRyIGdyb3VwKTsKKworICAgICAgICBbRGxsSW1wb3J0ICgiYXZhaGktY2xpZW50IildCisgICAgICAgIHByaXZhdGUgc3RhdGljIGV4dGVybiBib29sIGF2YWhpX2VudHJ5X2dyb3VwX2lzX2VtcHR5IChJbnRQdHIgZ3JvdXApOworCisgICAgICAgIFtEbGxJbXBvcnQgKCJhdmFoaS1jbGllbnQiKV0KKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZXh0ZXJuIGludCBhdmFoaV9lbnRyeV9ncm91cF9hZGRfc2VydmljZV9zdHJsc3QgKEludFB0ciBncm91cCwgaW50IGlmYWNlLCBQcm90b2NvbCBwcm90bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxpc2hGbGFncyBmbGFncywgYnl0ZVtdIG5hbWUsIGJ5dGVbXSB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZVtdIGRvbWFpbiwgYnl0ZVtdIGhvc3QsIFVJbnQxNiBwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UHRyIHN0cmxzdCk7CisKKyAgICAgICAgW0RsbEltcG9ydCAoImF2YWhpLWNsaWVudCIpXQorICAgICAgICBwcml2YXRlIHN0YXRpYyBleHRlcm4gaW50IGF2YWhpX2VudHJ5X2dyb3VwX3VwZGF0ZV9zZXJ2aWNlX3N0cmxzdCAoSW50UHRyIGdyb3VwLCBpbnQgaWZhY2UsIFByb3RvY29sIHByb3RvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlzaEZsYWdzIGZsYWdzLCBieXRlW10gbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVbXSB0eXBlLCBieXRlW10gZG9tYWluLCBJbnRQdHIgc3RybHN0KTsKKworICAgICAgICBbRGxsSW1wb3J0ICgiYXZhaGktY2xpZW50IildCisgICAgICAgIHByaXZhdGUgc3RhdGljIGV4dGVybiBpbnQgYXZhaGlfZW50cnlfZ3JvdXBfYWRkX3NlcnZpY2Vfc3VidHlwZSAoSW50UHRyIGdyb3VwLCBpbnQgaWZhY2UsIFByb3RvY29sIHByb3RvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxpc2hGbGFncyBmbGFncywgYnl0ZVtdIG5hbWUsIGJ5dGVbXSB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVbXSBkb21haW4sIGJ5dGVbXSBzdWJ0eXBlKTsKKworICAgICAgICBbRGxsSW1wb3J0ICgiYXZhaGktY2xpZW50IildCisgICAgICAgIHByaXZhdGUgc3RhdGljIGV4dGVybiBpbnQgYXZhaGlfZW50cnlfZ3JvdXBfYWRkX2FkZHJlc3MgKEludFB0ciBncm91cCwgaW50IGlmYWNlLCBQcm90b2NvbCBwcm90bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlzaEZsYWdzIGZsYWdzLCBieXRlW10gbmFtZSwgSW50UHRyIGFkZHJlc3MpOworCisKKyAgICAgICAgW0RsbEltcG9ydCAoImF2YWhpLWNsaWVudCIpXQorICAgICAgICBwcml2YXRlIHN0YXRpYyBleHRlcm4gaW50IGF2YWhpX2VudHJ5X2dyb3VwX2FkZF9yZWNvcmQgKEludFB0ciBncm91cCwgaW50IGlmYWNlLCBQcm90b2NvbCBwcm90bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaXNoRmxhZ3MgZmxhZ3MsIGJ5dGVbXSBuYW1lLCBSZWNvcmRDbGFzcyBjbGF6eiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWNvcmRUeXBlIHR5cGUsIHVpbnQgdHRsLCBieXRlW10gcmRhdGEsIGludCBzaXplKTsKKworICAgICAgICBbRGxsSW1wb3J0ICgiYXZhaGktY2xpZW50IildCisgICAgICAgIHByaXZhdGUgc3RhdGljIGV4dGVybiB2b2lkIGF2YWhpX2VudHJ5X2dyb3VwX2ZyZWUgKEludFB0ciBncm91cCk7CisKKyAgICAgICAgW0RsbEltcG9ydCAoImF2YWhpLWNvbW1vbiIpXQorICAgICAgICBwcml2YXRlIHN0YXRpYyBleHRlcm4gSW50UHRyIGF2YWhpX3N0cmluZ19saXN0X25ldyAoSW50UHRyIHR4dCk7CisKKyAgICAgICAgW0RsbEltcG9ydCAoImF2YWhpLWNvbW1vbiIpXQorICAgICAgICBwcml2YXRlIHN0YXRpYyBleHRlcm4gSW50UHRyIGF2YWhpX3N0cmluZ19saXN0X2FkZCAoSW50UHRyIGxpc3QsIGJ5dGVbXSB0eHQpOworCisgICAgICAgIFtEbGxJbXBvcnQgKCJhdmFoaS1jb21tb24iKV0KKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZXh0ZXJuIHZvaWQgYXZhaGlfc3RyaW5nX2xpc3RfZnJlZSAoSW50UHRyIGxpc3QpOworCisgICAgICAgIFtEbGxJbXBvcnQgKCJhdmFoaS1jb21tb24iKV0KKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZXh0ZXJuIEludFB0ciBhdmFoaV9hbHRlcm5hdGl2ZV9zZXJ2aWNlX25hbWUgKGJ5dGVbXSBuYW1lKTsKKworICAgICAgICBwdWJsaWMgZXZlbnQgRW50cnlHcm91cFN0YXRlSGFuZGxlciBTdGF0ZUNoYW5nZWQ7CisKKyAgICAgICAgcHVibGljIEVudHJ5R3JvdXBTdGF0ZSBTdGF0ZQorICAgICAgICB7CisgICAgICAgICAgICBnZXQgeworICAgICAgICAgICAgICAgIGxvY2sgKGNsaWVudCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXZhaGlfZW50cnlfZ3JvdXBfZ2V0X3N0YXRlIChoYW5kbGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBib29sIElzRW1wdHkKKyAgICAgICAgeworICAgICAgICAgICAgZ2V0IHsKKyAgICAgICAgICAgICAgICBsb2NrIChjbGllbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF2YWhpX2VudHJ5X2dyb3VwX2lzX2VtcHR5IChoYW5kbGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBFbnRyeUdyb3VwIChDbGllbnQgY2xpZW50KQorICAgICAgICB7CisgICAgICAgICAgICB0aGlzLmNsaWVudCA9IGNsaWVudDsKKyAgICAgICAgICAgIGNiID0gT25FbnRyeUdyb3VwQ2FsbGJhY2s7CisKKyAgICAgICAgICAgIGxvY2sgKGNsaWVudCkgeworICAgICAgICAgICAgICAgIGhhbmRsZSA9IGF2YWhpX2VudHJ5X2dyb3VwX25ldyAoY2xpZW50LkhhbmRsZSwgY2IsIEludFB0ci5aZXJvKTsKKyAgICAgICAgICAgICAgICBpZiAoaGFuZGxlID09IEludFB0ci5aZXJvKQorICAgICAgICAgICAgICAgICAgICBjbGllbnQuVGhyb3dFcnJvciAoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIH5FbnRyeUdyb3VwICgpCisgICAgICAgIHsKKyAgICAgICAgICAgIERpc3Bvc2UgKCk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBEaXNwb3NlICgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjbGllbnQuSGFuZGxlICE9IEludFB0ci5aZXJvICYmIGhhbmRsZSAhPSBJbnRQdHIuWmVybykgeworICAgICAgICAgICAgICAgIGxvY2sgKGNsaWVudCkgeworICAgICAgICAgICAgICAgICAgICBhdmFoaV9lbnRyeV9ncm91cF9mcmVlIChoYW5kbGUpOworICAgICAgICAgICAgICAgICAgICBoYW5kbGUgPSBJbnRQdHIuWmVybzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBDb21taXQgKCkKKyAgICAgICAgeworICAgICAgICAgICAgbG9jayAoY2xpZW50KSB7CisgICAgICAgICAgICAgICAgaWYgKGF2YWhpX2VudHJ5X2dyb3VwX2NvbW1pdCAoaGFuZGxlKSA8IDApCisgICAgICAgICAgICAgICAgICAgIGNsaWVudC5UaHJvd0Vycm9yICgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgUmVzZXQgKCkKKyAgICAgICAgeworICAgICAgICAgICAgbG9jayAoY2xpZW50KSB7CisgICAgICAgICAgICAgICAgaWYgKGF2YWhpX2VudHJ5X2dyb3VwX3Jlc2V0IChoYW5kbGUpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgY2xpZW50LlRocm93RXJyb3IgKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBBZGRTZXJ2aWNlIChzdHJpbmcgbmFtZSwgc3RyaW5nIHR5cGUsIHN0cmluZyBkb21haW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJbnQxNiBwb3J0LCBwYXJhbXMgc3RyaW5nW10gdHh0KQorICAgICAgICB7CisgICAgICAgICAgICBBZGRTZXJ2aWNlIChQdWJsaXNoRmxhZ3MuTm9uZSwgbmFtZSwgdHlwZSwgZG9tYWluLCBwb3J0LCB0eHQpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgQWRkU2VydmljZSAoUHVibGlzaEZsYWdzIGZsYWdzLCBzdHJpbmcgbmFtZSwgc3RyaW5nIHR5cGUsIHN0cmluZyBkb21haW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJbnQxNiBwb3J0LCBwYXJhbXMgc3RyaW5nW10gdHh0KQorICAgICAgICB7CisgICAgICAgICAgICBBZGRTZXJ2aWNlICgtMSwgUHJvdG9jb2wuVW5zcGVjaWZpZWQsIGZsYWdzLCBuYW1lLCB0eXBlLCBkb21haW4sIG51bGwsIHBvcnQsIHR4dCk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBBZGRTZXJ2aWNlIChpbnQgaWZhY2UsIFByb3RvY29sIHByb3RvLCBQdWJsaXNoRmxhZ3MgZmxhZ3MsIHN0cmluZyBuYW1lLCBzdHJpbmcgdHlwZSwgc3RyaW5nIGRvbWFpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nIGhvc3QsIFVJbnQxNiBwb3J0LCBwYXJhbXMgc3RyaW5nW10gdHh0KQorICAgICAgICB7CisgICAgICAgICAgICBJbnRQdHIgbGlzdCA9IGF2YWhpX3N0cmluZ19saXN0X25ldyAoSW50UHRyLlplcm8pOworCisgICAgICAgICAgICBpZiAodHh0ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBmb3JlYWNoIChzdHJpbmcgaXRlbSBpbiB0eHQpIHsKKyAgICAgICAgICAgICAgICAgICAgbGlzdCA9IGF2YWhpX3N0cmluZ19saXN0X2FkZCAobGlzdCwgVXRpbGl0eS5TdHJpbmdUb0J5dGVzIChpdGVtKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBBZGRTZXJ2aWNlIChpZmFjZSwgcHJvdG8sIGZsYWdzLCBuYW1lLCB0eXBlLCBkb21haW4sIGhvc3QsIHBvcnQsIGxpc3QpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgQWRkU2VydmljZSAoaW50IGlmYWNlLCBQcm90b2NvbCBwcm90bywgUHVibGlzaEZsYWdzIGZsYWdzLCBzdHJpbmcgbmFtZSwgc3RyaW5nIHR5cGUsIHN0cmluZyBkb21haW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyBob3N0LCBVSW50MTYgcG9ydCwgcGFyYW1zIGJ5dGVbXVtdIHR4dCkKKyAgICAgICAgeworICAgICAgICAgICAgSW50UHRyIGxpc3QgPSBhdmFoaV9zdHJpbmdfbGlzdF9uZXcgKEludFB0ci5aZXJvKTsKKworICAgICAgICAgICAgaWYgKHR4dCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgZm9yZWFjaCAoYnl0ZVtdIGl0ZW0gaW4gdHh0KSB7CisgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBhdmFoaV9zdHJpbmdfbGlzdF9hZGQgKGxpc3QsIGl0ZW0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQWRkU2VydmljZSAoaWZhY2UsIHByb3RvLCBmbGFncywgbmFtZSwgdHlwZSwgZG9tYWluLCBob3N0LCBwb3J0LCBsaXN0KTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgdm9pZCBBZGRTZXJ2aWNlIChpbnQgaWZhY2UsIFByb3RvY29sIHByb3RvLCBQdWJsaXNoRmxhZ3MgZmxhZ3MsIHN0cmluZyBuYW1lLCBzdHJpbmcgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyBkb21haW4sIHN0cmluZyBob3N0LCBVSW50MTYgcG9ydCwgSW50UHRyIGxpc3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCByZXQ7CisKKyAgICAgICAgICAgIGxvY2sgKGNsaWVudCkgeworICAgICAgICAgICAgICAgIHJldCA9IGF2YWhpX2VudHJ5X2dyb3VwX2FkZF9zZXJ2aWNlX3N0cmxzdCAoaGFuZGxlLCBpZmFjZSwgcHJvdG8sIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXRpbGl0eS5TdHJpbmdUb0J5dGVzIChuYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxpdHkuU3RyaW5nVG9CeXRlcyAodHlwZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlsaXR5LlN0cmluZ1RvQnl0ZXMgKGRvbWFpbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlsaXR5LlN0cmluZ1RvQnl0ZXMgKGhvc3QpLCBwb3J0LCBsaXN0KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYXZhaGlfc3RyaW5nX2xpc3RfZnJlZSAobGlzdCk7CisKKyAgICAgICAgICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgICAgICAgICAgY2xpZW50LlRocm93RXJyb3IgKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBVcGRhdGVTZXJ2aWNlIChzdHJpbmcgbmFtZSwgc3RyaW5nIHR5cGUsIHN0cmluZyBkb21haW4sIHBhcmFtcyBzdHJpbmdbXSB0eHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIFVwZGF0ZVNlcnZpY2UgKC0xLCBQcm90b2NvbC5VbnNwZWNpZmllZCwgUHVibGlzaEZsYWdzLk5vbmUsIG5hbWUsIHR5cGUsIGRvbWFpbiwgdHh0KTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIFVwZGF0ZVNlcnZpY2UgKGludCBpZmFjZSwgUHJvdG9jb2wgcHJvdG8sIFB1Ymxpc2hGbGFncyBmbGFncywgc3RyaW5nIG5hbWUsIHN0cmluZyB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcgZG9tYWluLCBwYXJhbXMgc3RyaW5nW10gdHh0KQorICAgICAgICB7CisgICAgICAgICAgICBJbnRQdHIgbGlzdCA9IGF2YWhpX3N0cmluZ19saXN0X25ldyAoSW50UHRyLlplcm8pOworCisgICAgICAgICAgICBpZiAodHh0ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBmb3JlYWNoIChzdHJpbmcgaXRlbSBpbiB0eHQpIHsKKyAgICAgICAgICAgICAgICAgICAgbGlzdCA9IGF2YWhpX3N0cmluZ19saXN0X2FkZCAobGlzdCwgVXRpbGl0eS5TdHJpbmdUb0J5dGVzIChpdGVtKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBVcGRhdGVTZXJ2aWNlIChpZmFjZSwgcHJvdG8sIGZsYWdzLCBuYW1lLCB0eXBlLCBkb21haW4sIGxpc3QpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgVXBkYXRlU2VydmljZSAoaW50IGlmYWNlLCBQcm90b2NvbCBwcm90bywgUHVibGlzaEZsYWdzIGZsYWdzLCBzdHJpbmcgbmFtZSwgc3RyaW5nIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyBkb21haW4sIHBhcmFtcyBieXRlW11bXSB0eHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEludFB0ciBsaXN0ID0gYXZhaGlfc3RyaW5nX2xpc3RfbmV3IChJbnRQdHIuWmVybyk7CisKKyAgICAgICAgICAgIGlmICh0eHQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGZvcmVhY2ggKGJ5dGVbXSBpdGVtIGluIHR4dCkgeworICAgICAgICAgICAgICAgICAgICBsaXN0ID0gYXZhaGlfc3RyaW5nX2xpc3RfYWRkIChsaXN0LCBpdGVtKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFVwZGF0ZVNlcnZpY2UgKGlmYWNlLCBwcm90bywgZmxhZ3MsIG5hbWUsIHR5cGUsIGRvbWFpbiwgbGlzdCk7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHZvaWQgVXBkYXRlU2VydmljZSAoaW50IGlmYWNlLCBQcm90b2NvbCBwcm90bywgUHVibGlzaEZsYWdzIGZsYWdzLCBzdHJpbmcgbmFtZSwgc3RyaW5nIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcgZG9tYWluLCBJbnRQdHIgbGlzdCkKKyAgICAgICAgeworICAgICAgICAgICAgbG9jayAoY2xpZW50KSB7CisgICAgICAgICAgICAgICAgaW50IHJldCA9IGF2YWhpX2VudHJ5X2dyb3VwX3VwZGF0ZV9zZXJ2aWNlX3N0cmxzdCAoaGFuZGxlLCBpZmFjZSwgcHJvdG8sIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxpdHkuU3RyaW5nVG9CeXRlcyAobmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXRpbGl0eS5TdHJpbmdUb0J5dGVzICh0eXBlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlsaXR5LlN0cmluZ1RvQnl0ZXMgKGRvbWFpbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCk7CisKKyAgICAgICAgICAgICAgICBhdmFoaV9zdHJpbmdfbGlzdF9mcmVlIChsaXN0KTsKKworICAgICAgICAgICAgICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIGNsaWVudC5UaHJvd0Vycm9yICgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIEFkZFNlcnZpY2VTdWJ0eXBlIChzdHJpbmcgbmFtZSwgc3RyaW5nIHR5cGUsIHN0cmluZyBkb21haW4sIHN0cmluZyBzdWJ0eXBlKQorICAgICAgICB7CisgICAgICAgICAgICBBZGRTZXJ2aWNlU3VidHlwZSAoLTEsIFByb3RvY29sLlVuc3BlY2lmaWVkLCBQdWJsaXNoRmxhZ3MuTm9uZSwgbmFtZSwgdHlwZSwgZG9tYWluLCBzdWJ0eXBlKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIEFkZFNlcnZpY2VTdWJ0eXBlIChpbnQgaWZhY2UsIFByb3RvY29sIHByb3RvLCBQdWJsaXNoRmxhZ3MgZmxhZ3MsIHN0cmluZyBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nIHR5cGUsIHN0cmluZyBkb21haW4sIHN0cmluZyBzdWJ0eXBlKQorICAgICAgICB7CisgICAgICAgICAgICBsb2NrIChjbGllbnQpIHsKKyAgICAgICAgICAgICAgICBpbnQgcmV0ID0gYXZhaGlfZW50cnlfZ3JvdXBfYWRkX3NlcnZpY2Vfc3VidHlwZSAoaGFuZGxlLCBpZmFjZSwgcHJvdG8sIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlsaXR5LlN0cmluZ1RvQnl0ZXMgKG5hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlsaXR5LlN0cmluZ1RvQnl0ZXMgKHR5cGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlsaXR5LlN0cmluZ1RvQnl0ZXMgKGRvbWFpbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxpdHkuU3RyaW5nVG9CeXRlcyAoc3VidHlwZSkpOworCisgICAgICAgICAgICAgICAgaWYgKHJldCA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgY2xpZW50LlRocm93RXJyb3IgKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgQWRkQWRkcmVzcyAoc3RyaW5nIG5hbWUsIElQQWRkcmVzcyBhZGRyZXNzKQorICAgICAgICB7CisgICAgICAgICAgICBBZGRBZGRyZXNzICgtMSwgUHJvdG9jb2wuVW5zcGVjaWZpZWQsIFB1Ymxpc2hGbGFncy5Ob25lLCBuYW1lLCBhZGRyZXNzKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIEFkZEFkZHJlc3MgKGludCBpZmFjZSwgUHJvdG9jb2wgcHJvdG8sIFB1Ymxpc2hGbGFncyBmbGFncywgc3RyaW5nIG5hbWUsIElQQWRkcmVzcyBhZGRyZXNzKQorICAgICAgICB7CisgICAgICAgICAgICBJbnRQdHIgYWRkcmVzc1B0ciA9IFV0aWxpdHkuQWRkcmVzc1RvUHRyIChhZGRyZXNzKTsKKworICAgICAgICAgICAgbG9jayAoY2xpZW50KSB7CisgICAgICAgICAgICAgICAgaW50IHJldCA9IGF2YWhpX2VudHJ5X2dyb3VwX2FkZF9hZGRyZXNzIChoYW5kbGUsIGlmYWNlLCBwcm90bywgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlsaXR5LlN0cmluZ1RvQnl0ZXMgKG5hbWUpLCBhZGRyZXNzUHRyKTsKKworICAgICAgICAgICAgICAgIFV0aWxpdHkuRnJlZSAoYWRkcmVzc1B0cik7CisKKyAgICAgICAgICAgICAgICBpZiAocmV0IDwgMCkgeworICAgICAgICAgICAgICAgICAgICBjbGllbnQuVGhyb3dFcnJvciAoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBBZGRSZWNvcmQgKHN0cmluZyBuYW1lLCBSZWNvcmRDbGFzcyBjbGF6eiwgUmVjb3JkVHlwZSB0eXBlLCB1aW50IHR0bCwgYnl0ZVtdIHJkYXRhLCBpbnQgbGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICBBZGRSZWNvcmQgKC0xLCBQcm90b2NvbC5VbnNwZWNpZmllZCwgUHVibGlzaEZsYWdzLk5vbmUsIG5hbWUsIGNsYXp6LCB0eXBlLCB0dGwsIHJkYXRhLCBsZW5ndGgpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgQWRkUmVjb3JkIChpbnQgaWZhY2UsIFByb3RvY29sIHByb3RvLCBQdWJsaXNoRmxhZ3MgZmxhZ3MsIHN0cmluZyBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlY29yZENsYXNzIGNsYXp6LCBSZWNvcmRUeXBlIHR5cGUsIHVpbnQgdHRsLCBieXRlW10gcmRhdGEsIGludCBsZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxvY2sgKGNsaWVudCkgeworICAgICAgICAgICAgICAgIGludCByZXQgPSBhdmFoaV9lbnRyeV9ncm91cF9hZGRfcmVjb3JkIChoYW5kbGUsIGlmYWNlLCBwcm90bywgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxpdHkuU3RyaW5nVG9CeXRlcyAobmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXp6LCB0eXBlLCB0dGwsIHJkYXRhLCBsZW5ndGgpOworCisgICAgICAgICAgICAgICAgaWYgKHJldCA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgY2xpZW50LlRocm93RXJyb3IgKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHN0YXRpYyBzdHJpbmcgR2V0QWx0ZXJuYXRpdmVTZXJ2aWNlTmFtZSAoc3RyaW5nIG5hbWUpIHsKKyAgICAgICAgICAgIHJldHVybiBVdGlsaXR5LlB0clRvU3RyaW5nRnJlZSAoYXZhaGlfYWx0ZXJuYXRpdmVfc2VydmljZV9uYW1lIChVdGlsaXR5LlN0cmluZ1RvQnl0ZXMgKG5hbWUpKSk7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHZvaWQgT25FbnRyeUdyb3VwQ2FsbGJhY2sgKEludFB0ciBncm91cCwgRW50cnlHcm91cFN0YXRlIHN0YXRlLCBJbnRQdHIgdXNlcmRhdGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChTdGF0ZUNoYW5nZWQgIT0gbnVsbCkKKyAgICAgICAgICAgICAgICBTdGF0ZUNoYW5nZWQgKHRoaXMsIG5ldyBFbnRyeUdyb3VwU3RhdGVBcmdzIChzdGF0ZSkpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL0hvc3ROYW1lUmVzb2x2ZXIuY3MgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvSG9zdE5hbWVSZXNvbHZlci5jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWZlN2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL0hvc3ROYW1lUmVzb2x2ZXIuY3MKQEAgLTAsMCArMSwxNjcgQEAKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKwordXNpbmcgU3lzdGVtOwordXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zOwordXNpbmcgU3lzdGVtLk5ldDsKK3VzaW5nIFN5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2aWNlczsKK3VzaW5nIFN5c3RlbS5UZXh0OwordXNpbmcgTW9uby5Vbml4OworCituYW1lc3BhY2UgQXZhaGkKK3sKKworICAgIGludGVybmFsIGRlbGVnYXRlIHZvaWQgSG9zdE5hbWVSZXNvbHZlckNhbGxiYWNrIChJbnRQdHIgcmVzb2x2ZXIsIGludCBpZmFjZSwgUHJvdG9jb2wgcHJvdG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc29sdmVyRXZlbnQgcmV2ZW50LCBJbnRQdHIgaG9zdG5hbWUsIEludFB0ciBhZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb29rdXBSZXN1bHRGbGFncyBmbGFncywgSW50UHRyIHVzZXJkYXRhKTsKKworICAgIHB1YmxpYyBjbGFzcyBIb3N0TmFtZVJlc29sdmVyIDogUmVzb2x2ZXJCYXNlLCBJRGlzcG9zYWJsZQorICAgIHsKKyAgICAgICAgcHJpdmF0ZSBJbnRQdHIgaGFuZGxlOworICAgICAgICBwcml2YXRlIENsaWVudCBjbGllbnQ7CisgICAgICAgIHByaXZhdGUgaW50IGlmYWNlOworICAgICAgICBwcml2YXRlIFByb3RvY29sIHByb3RvOworICAgICAgICBwcml2YXRlIHN0cmluZyBob3N0bmFtZTsKKyAgICAgICAgcHJpdmF0ZSBQcm90b2NvbCBhcHJvdG87CisgICAgICAgIHByaXZhdGUgTG9va3VwRmxhZ3MgZmxhZ3M7CisgICAgICAgIHByaXZhdGUgSG9zdE5hbWVSZXNvbHZlckNhbGxiYWNrIGNiOworCisgICAgICAgIHByaXZhdGUgSVBBZGRyZXNzIGN1cnJlbnRBZGRyZXNzOworICAgICAgICBwcml2YXRlIHN0cmluZyBjdXJyZW50SG9zdDsKKworICAgICAgICBwcml2YXRlIEFycmF5TGlzdCBmb3VuZExpc3RlbmVycyA9IG5ldyBBcnJheUxpc3QgKCk7CisgICAgICAgIHByaXZhdGUgQXJyYXlMaXN0IHRpbWVvdXRMaXN0ZW5lcnMgPSBuZXcgQXJyYXlMaXN0ICgpOworCisgICAgICAgIFtEbGxJbXBvcnQgKCJhdmFoaS1jbGllbnQiKV0KKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZXh0ZXJuIEludFB0ciBhdmFoaV9ob3N0X25hbWVfcmVzb2x2ZXJfbmV3IChJbnRQdHIgY2xpZW50LCBpbnQgaWZhY2UsIFByb3RvY29sIHByb3RvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVbXSBob3N0bmFtZSwgUHJvdG9jb2wgYXByb3RvLCBMb29rdXBGbGFncyBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3N0TmFtZVJlc29sdmVyQ2FsbGJhY2sgY2IsIEludFB0ciB1c2VyZGF0YSk7CisKKyAgICAgICAgW0RsbEltcG9ydCAoImF2YWhpLWNsaWVudCIpXQorICAgICAgICBwcml2YXRlIHN0YXRpYyBleHRlcm4gdm9pZCBhdmFoaV9ob3N0X25hbWVfcmVzb2x2ZXJfZnJlZSAoSW50UHRyIGhhbmRsZSk7CisKKyAgICAgICAgcHVibGljIGV2ZW50IEhvc3RBZGRyZXNzSGFuZGxlciBGb3VuZAorICAgICAgICB7CisgICAgICAgICAgICBhZGQgeworICAgICAgICAgICAgICAgIGZvdW5kTGlzdGVuZXJzLkFkZCAodmFsdWUpOworICAgICAgICAgICAgICAgIFN0YXJ0ICgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVtb3ZlIHsKKyAgICAgICAgICAgICAgICBmb3VuZExpc3RlbmVycy5SZW1vdmUgKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBTdG9wIChmYWxzZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgZXZlbnQgRXZlbnRIYW5kbGVyIFRpbWVvdXQKKyAgICAgICAgeworICAgICAgICAgICAgYWRkIHsKKyAgICAgICAgICAgICAgICB0aW1lb3V0TGlzdGVuZXJzLkFkZCAodmFsdWUpOworICAgICAgICAgICAgICAgIFN0YXJ0ICgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVtb3ZlIHsKKyAgICAgICAgICAgICAgICB0aW1lb3V0TGlzdGVuZXJzLlJlbW92ZSAodmFsdWUpOworICAgICAgICAgICAgICAgIFN0b3AgKGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBJUEFkZHJlc3MgQWRkcmVzcworICAgICAgICB7CisgICAgICAgICAgICBnZXQgeyByZXR1cm4gY3VycmVudEFkZHJlc3M7IH0KKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBzdHJpbmcgSG9zdE5hbWUKKyAgICAgICAgeworICAgICAgICAgICAgZ2V0IHsgcmV0dXJuIGN1cnJlbnRIb3N0OyB9CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgSG9zdE5hbWVSZXNvbHZlciAoQ2xpZW50IGNsaWVudCwgc3RyaW5nIGhvc3RuYW1lKSA6IHRoaXMgKGNsaWVudCwgLTEsIFByb3RvY29sLlVuc3BlY2lmaWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3RuYW1lLCBQcm90b2NvbC5VbnNwZWNpZmllZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb29rdXBGbGFncy5Ob25lKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgSG9zdE5hbWVSZXNvbHZlciAoQ2xpZW50IGNsaWVudCwgaW50IGlmYWNlLCBQcm90b2NvbCBwcm90bywgc3RyaW5nIGhvc3RuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvdG9jb2wgYXByb3RvLCBMb29rdXBGbGFncyBmbGFncykKKyAgICAgICAgeworICAgICAgICAgICAgdGhpcy5jbGllbnQgPSBjbGllbnQ7CisgICAgICAgICAgICB0aGlzLmlmYWNlID0gaWZhY2U7CisgICAgICAgICAgICB0aGlzLnByb3RvID0gcHJvdG87CisgICAgICAgICAgICB0aGlzLmhvc3RuYW1lID0gaG9zdG5hbWU7CisgICAgICAgICAgICB0aGlzLmFwcm90byA9IGFwcm90bzsKKyAgICAgICAgICAgIHRoaXMuZmxhZ3MgPSBmbGFnczsKKyAgICAgICAgICAgIGNiID0gT25Ib3N0TmFtZVJlc29sdmVyQ2FsbGJhY2s7CisgICAgICAgIH0KKworICAgICAgICB+SG9zdE5hbWVSZXNvbHZlciAoKQorICAgICAgICB7CisgICAgICAgICAgICBEaXNwb3NlICgpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgRGlzcG9zZSAoKQorICAgICAgICB7CisgICAgICAgICAgICBTdG9wICh0cnVlKTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgdm9pZCBTdGFydCAoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY2xpZW50LkhhbmRsZSA9PSBJbnRQdHIuWmVybyB8fCBoYW5kbGUgIT0gSW50UHRyLlplcm8gfHwKKyAgICAgICAgICAgICAgICAoZm91bmRMaXN0ZW5lcnMuQ291bnQgPT0gMCAmJiB0aW1lb3V0TGlzdGVuZXJzLkNvdW50ID09IDApKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgbG9jayAoY2xpZW50KSB7CisgICAgICAgICAgICAgICAgaGFuZGxlID0gYXZhaGlfaG9zdF9uYW1lX3Jlc29sdmVyX25ldyAoY2xpZW50LkhhbmRsZSwgaWZhY2UsIHByb3RvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxpdHkuU3RyaW5nVG9CeXRlcyAoaG9zdG5hbWUpLCBhcHJvdG8sIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNiLCBJbnRQdHIuWmVybyk7CisKKyAgICAgICAgICAgICAgICBpZiAoaGFuZGxlID09IEludFB0ci5aZXJvKQorICAgICAgICAgICAgICAgICAgICBjbGllbnQuVGhyb3dFcnJvciAoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgdm9pZCBTdG9wIChib29sIGZvcmNlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY2xpZW50LkhhbmRsZSAhPSBJbnRQdHIuWmVybyAmJiBoYW5kbGUgIT0gSW50UHRyLlplcm8gJiYKKyAgICAgICAgICAgICAgICAoZm9yY2UgfHwgKGZvdW5kTGlzdGVuZXJzLkNvdW50ID09IDAgJiYgdGltZW91dExpc3RlbmVycy5Db3VudCA9PSAwKSkpIHsKKworICAgICAgICAgICAgICAgIGxvY2sgKGNsaWVudCkgeworICAgICAgICAgICAgICAgICAgICBhdmFoaV9ob3N0X25hbWVfcmVzb2x2ZXJfZnJlZSAoaGFuZGxlKTsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlID0gSW50UHRyLlplcm87CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSB2b2lkIE9uSG9zdE5hbWVSZXNvbHZlckNhbGxiYWNrIChJbnRQdHIgcmVzb2x2ZXIsIGludCBpZmFjZSwgUHJvdG9jb2wgcHJvdG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzb2x2ZXJFdmVudCByZXZlbnQsIEludFB0ciBob3N0bmFtZSwgSW50UHRyIGFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9va3VwUmVzdWx0RmxhZ3MgZmxhZ3MsIEludFB0ciB1c2VyZGF0YSkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChyZXZlbnQpIHsKKyAgICAgICAgICAgIGNhc2UgUmVzb2x2ZXJFdmVudC5Gb3VuZDoKKyAgICAgICAgICAgICAgICBjdXJyZW50QWRkcmVzcyA9IFV0aWxpdHkuUHRyVG9BZGRyZXNzIChhZGRyZXNzKTsKKyAgICAgICAgICAgICAgICBjdXJyZW50SG9zdCA9IFV0aWxpdHkuUHRyVG9TdHJpbmcgKGhvc3RuYW1lKTsKKworICAgICAgICAgICAgICAgIGZvcmVhY2ggKEhvc3RBZGRyZXNzSGFuZGxlciBoYW5kbGVyIGluIGZvdW5kTGlzdGVuZXJzKQorICAgICAgICAgICAgICAgICAgICBoYW5kbGVyICh0aGlzLCBuZXcgSG9zdEFkZHJlc3NBcmdzIChjdXJyZW50SG9zdCwgY3VycmVudEFkZHJlc3MpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgUmVzb2x2ZXJFdmVudC5GYWlsdXJlOgorICAgICAgICAgICAgICAgIEVtaXRGYWlsdXJlIChjbGllbnQuTGFzdEVycm9yKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9NYWtlZmlsZS5hbSBiL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmRiMWNhCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsODIgQEAKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisjCisjIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisjIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisjIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisjIFVTQS4KKworQVNTRU1CTFkgPSBhdmFoaS1zaGFycC5kbGwKKworQ0xFQU5GSUxFUyA9ICQoQVNTRU1CTFkpICQoQVNTRU1CTFkpLm1kYiAkKEFTU0VNQkxZKS5jb25maWcKKworQVZBSElTT1VSQ0VTID0gCQkJCVwKKwkkKHNyY2RpcikvQWRkcmVzc1Jlc29sdmVyLmNzCVwKKwkkKHNyY2RpcikvQXNzZW1ibHlJbmZvLmNzCVwKKwkkKHNyY2RpcikvQnJvd3NlckJhc2UuY3MJXAorCSQoc3JjZGlyKS9DbGllbnQuY3MJCVwKKwkkKHNyY2RpcikvQ2xpZW50RXhjZXB0aW9uLmNzCVwKKwkkKHNyY2RpcikvRG9tYWluQnJvd3Nlci5jcwlcCisJJChzcmNkaXIpL0VudHJ5R3JvdXAuY3MJCVwKKwkkKHNyY2RpcikvSG9zdE5hbWVSZXNvbHZlci5jcwlcCisJJChzcmNkaXIpL1JlY29yZEJyb3dzZXIuY3MJXAorCSQoc3JjZGlyKS9SZXNvbHZlckJhc2UuY3MJXAorCSQoc3JjZGlyKS9TZXJ2aWNlQnJvd3Nlci5jcwlcCisJJChzcmNkaXIpL1NlcnZpY2VSZXNvbHZlci5jcwlcCisJJChzcmNkaXIpL1NlcnZpY2VUeXBlQnJvd3Nlci5jcwlcCisJJChzcmNkaXIpL1V0aWxpdHkuY3MKKworRVhUUkFfRElTVCA9CQkJCVwKKwkkKEFWQUhJU09VUkNFUykJCQlcCisJJChzcmNkaXIpL0F2YWhpVGVzdC5jcyAJCVwKKwkkKHNyY2RpcikvYXZhaGkuc25rCQlcCisJJChzcmNkaXIpLyQoQVNTRU1CTFkpLmNvbmZpZy5pbglcCisJJChzcmNkaXIpL2F2YWhpLXNoYXJwLWRvY3Muc291cmNlCVwKKwkkKHNyY2RpcikvZW4vKi54bWwJCVwKKwkkKHNyY2RpcikvZW4vKi8qLnhtbAkJXAorCSQoc3JjZGlyKS9nZW5jZmcuc2gKKworJChBU1NFTUJMWSk6ICQoQVZBSElTT1VSQ0VTKQorCSQoQU1fVl9HRU4pTU9OT19TSEFSRURfRElSPS4gbWNzIC1rZXlmaWxlOiQoc3JjZGlyKS9hdmFoaS5zbmsgLXRhcmdldDpsaWJyYXJ5IC1vdXQ6JEAgLWRlYnVnICQoQVZBSElTT1VSQ0VTKSAtcjpNb25vLlBvc2l4CisKKworJChBU1NFTUJMWSkuY29uZmlnOiAkKEFTU0VNQkxZKS5jb25maWcuaW4KKwkkKEFNX1ZfR0VOKSQoc3JjZGlyKS9nZW5jZmcuc2ggJCh0b3BfYnVpbGRkaXIpL2F2YWhpLWNsaWVudC9saWJhdmFoaS1jbGllbnQubGEgXAorCQkkKHRvcF9idWlsZGRpcikvYXZhaGktY29tbW9uL2xpYmF2YWhpLWNvbW1vbi5sYSBcCisJCSQodG9wX2J1aWxkZGlyKS9hdmFoaS1nbGliL2xpYmF2YWhpLWdsaWIubGEgPCAkPCA+ICRACisKK2lmIEhBVkVfTU9OTworaWYgSEFWRV9EQlVTCithbGw6ICQoQVNTRU1CTFkpICQoQVNTRU1CTFkpLmNvbmZpZworCitpZiBIQVZFX01PTk9ET0MKK3VwZGF0ZS1kb2NzOiAkKEFTU0VNQkxZKQorCSQoQU1fVl9HRU4pJChNT05PRE9DRVIpIC1hc3NlbWJseTokKEFTU0VNQkxZKSAtcGF0aDplbgorCithdmFoaS1zaGFycC1kb2NzLnppcDogYXZhaGktc2hhcnAtZG9jcy50cmVlCisKK2F2YWhpLXNoYXJwLWRvY3MudHJlZTogJChzcmNkaXIpL2VuLyovKgorCSQoQU1fVl9HRU4pJChNREFTU0VNQkxFUikgLS1vdXQgYXZhaGktc2hhcnAtZG9jcyAtLWVjbWEgJChzcmNkaXIpL2VuCisKK21vbm9kb2NkaXIgPSAkKE1PTk9ET0NfRElSKQorbW9ub2RvY19EQVRBID0gYXZhaGktc2hhcnAtZG9jcy56aXAgYXZhaGktc2hhcnAtZG9jcy50cmVlIGF2YWhpLXNoYXJwLWRvY3Muc291cmNlCisKK2VuZGlmCisKK2luc3RhbGwtZGF0YS1ob29rOiAkKEFTU0VNQkxZKQorCSQoQU1fVl9HRU4pTU9OT19TSEFSRURfRElSPS4gJChHQUNVVElMKSAvaSAkKEFTU0VNQkxZKSAvcGFja2FnZSBhdmFoaS1zaGFycCAvZ2FjZGlyICQobGliZGlyKSAvcm9vdCAkKERFU1RESVIpJChsaWJkaXIpCisKK3VuaW5zdGFsbC1ob29rOiAkKEFTU0VNQkxZKQorCSQoQU1fVl9HRU4pTU9OT19TSEFSRURfRElSPS4gJChHQUNVVElMKSAvdSBhdmFoaS1zaGFycCAvcGFja2FnZSBhdmFoaS1zaGFycCAvZ2FjZGlyICQobGliZGlyKSAvcm9vdCAkKERFU1RESVIpJChsaWJkaXIpCisKK2VuZGlmCitlbmRpZgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL01ha2VmaWxlLmluIGIvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzNTM4YjQKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw2MzQgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEuMyBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKyMKKyMgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyMgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyMgVVNBLgorCitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitzdWJkaXIgPSBhdmFoaS1zaGFycAorRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vYWN4X3B0aHJlYWQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2djY19zdGFja19wcm90ZWN0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9nY2NfdmlzaWJpbGl0eS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vaW50bHRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2ludHJvc3BlY3Rpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2x0b3B0aW9ucy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHR2ZXJzaW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbmxzLm00ICQodG9wX3NyY2RpcikvY29tbW9uL3B5dGhvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9hY2luY2x1ZGUubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vZG94eWdlbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCithbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCithbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICIgJEA7CitBTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCithbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfYXRfMCA9IEAKK1NPVVJDRVMgPQorRElTVF9TT1VSQ0VTID0KK2FtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOworYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKKyAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAorICAgICopIGY9JCRwOzsgXAorICBlc2FjOworYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOworYW1fX2luc3RhbGxfbWF4ID0gNDAKK2FtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCisgIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKK2FtX19ub2Jhc2Vfc3RyaXAgPSBcCisgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgorYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAorICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAorICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAorICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCisgICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAorICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAorICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKK2FtX19iYXNlX2xpc3QgPSBcCisgIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCisgIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKK2FtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIgPSB7IFwKKyAgdGVzdCAteiAiJCRmaWxlcyIgXAorICAgIHx8IHsgdGVzdCAhIC1kICIkJGRpciIgJiYgdGVzdCAhIC1mICIkJGRpciIgJiYgdGVzdCAhIC1yICIkJGRpciI7IH0gXAorICAgIHx8IHsgZWNobyAiICggY2QgJyQkZGlyJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKKyAgICAgICAgICQoYW1fX2NkKSAiJCRkaXIiICYmIHJtIC1mICQkZmlsZXM7IH07IFwKKyAgfQorYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKG1vbm9kb2NkaXIpIgorREFUQSA9ICQobW9ub2RvY19EQVRBKQorRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FMTF9MSU5HVUFTID0gQEFMTF9MSU5HVUFTQAorQU1UQVIgPSBAQU1UQVJACitBTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKK0FSID0gQEFSQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FWQUhJX0FVVE9JUERfR1JPVVAgPSBAQVZBSElfQVVUT0lQRF9HUk9VUEAKK0FWQUhJX0FVVE9JUERfVVNFUiA9IEBBVkFISV9BVVRPSVBEX1VTRVJACitBVkFISV9HUk9VUCA9IEBBVkFISV9HUk9VUEAKK0FWQUhJX1BSSVZfQUNDRVNTX0dST1VQID0gQEFWQUhJX1BSSVZfQUNDRVNTX0dST1VQQAorQVZBSElfVVNFUiA9IEBBVkFISV9VU0VSQAorQVdLID0gQEFXS0AKK0NBVEFMT0dTID0gQENBVEFMT0dTQAorQ0FUT0JKRVhUID0gQENBVE9CSkVYVEAKK0NDID0gQENDQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RBVEFESVJOQU1FID0gQERBVEFESVJOQU1FQAorREJVU19DRkxBR1MgPSBAREJVU19DRkxBR1NACitEQlVTX0xJQlMgPSBAREJVU19MSUJTQAorREJVU19TWVNURU1fQlVTX0RFRkFVTFRfQUREUkVTUyA9IEBEQlVTX1NZU1RFTV9CVVNfREVGQVVMVF9BRERSRVNTQAorREJVU19TWVNfRElSID0gQERCVVNfU1lTX0RJUkAKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitETExUT09MID0gQERMTFRPT0xACitET1hZR0VOX1BBUEVSX1NJWkUgPSBARE9YWUdFTl9QQVBFUl9TSVpFQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitEWF9DT05GSUcgPSBARFhfQ09ORklHQAorRFhfRE9DRElSID0gQERYX0RPQ0RJUkAKK0RYX0RPVCA9IEBEWF9ET1RACitEWF9ET1hZR0VOID0gQERYX0RPWFlHRU5ACitEWF9EVklQUyA9IEBEWF9EVklQU0AKK0RYX0VHUkVQID0gQERYX0VHUkVQQAorRFhfRU5WID0gQERYX0VOVkAKK0RYX0ZMQUdfY2hpID0gQERYX0ZMQUdfY2hpQAorRFhfRkxBR19jaG0gPSBARFhfRkxBR19jaG1ACitEWF9GTEFHX2RvYyA9IEBEWF9GTEFHX2RvY0AKK0RYX0ZMQUdfZG90ID0gQERYX0ZMQUdfZG90QAorRFhfRkxBR19odG1sID0gQERYX0ZMQUdfaHRtbEAKK0RYX0ZMQUdfbWFuID0gQERYX0ZMQUdfbWFuQAorRFhfRkxBR19wZGYgPSBARFhfRkxBR19wZGZACitEWF9GTEFHX3BzID0gQERYX0ZMQUdfcHNACitEWF9GTEFHX3J0ZiA9IEBEWF9GTEFHX3J0ZkAKK0RYX0ZMQUdfeG1sID0gQERYX0ZMQUdfeG1sQAorRFhfSEhDID0gQERYX0hIQ0AKK0RYX0xBVEVYID0gQERYX0xBVEVYQAorRFhfTUFLRUlOREVYID0gQERYX01BS0VJTkRFWEAKK0RYX1BERkxBVEVYID0gQERYX1BERkxBVEVYQAorRFhfUEVSTCA9IEBEWF9QRVJMQAorRFhfUFJPSkVDVCA9IEBEWF9QUk9KRUNUQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFWEVFWFQgPSBARVhFRVhUQAorRkdSRVAgPSBARkdSRVBACitHQUNVVElMID0gQEdBQ1VUSUxACitHRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAorR0xJQjIwX0NGTEFHUyA9IEBHTElCMjBfQ0ZMQUdTQAorR0xJQjIwX0xJQlMgPSBAR0xJQjIwX0xJQlNACitHTU9GSUxFUyA9IEBHTU9GSUxFU0AKK0dNU0dGTVQgPSBAR01TR0ZNVEAKK0dPQkpFQ1RfQ0ZMQUdTID0gQEdPQkpFQ1RfQ0ZMQUdTQAorR09CSkVDVF9MSUJTID0gQEdPQkpFQ1RfTElCU0AKK0dSRVAgPSBAR1JFUEAKK0dUSzIwX0NGTEFHUyA9IEBHVEsyMF9DRkxBR1NACitHVEsyMF9MSUJTID0gQEdUSzIwX0xJQlNACitHVEszMF9DRkxBR1MgPSBAR1RLMzBfQ0ZMQUdTQAorR1RLMzBfTElCUyA9IEBHVEszMF9MSUJTQAorSE9XTF9DT01QQVRfVkVSU0lPTiA9IEBIT1dMX0NPTVBBVF9WRVJTSU9OQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitJTlNUT0JKRVhUID0gQElOU1RPQkpFWFRACitJTlRMTElCUyA9IEBJTlRMTElCU0AKK0lOVExUT09MX0VYVFJBQ1QgPSBASU5UTFRPT0xfRVhUUkFDVEAKK0lOVExUT09MX01FUkdFID0gQElOVExUT09MX01FUkdFQAorSU5UTFRPT0xfUEVSTCA9IEBJTlRMVE9PTF9QRVJMQAorSU5UTFRPT0xfVVBEQVRFID0gQElOVExUT09MX1VQREFURUAKK0lOVFJPU1BFQ1RJT05fQ0ZMQUdTID0gQElOVFJPU1BFQ1RJT05fQ0ZMQUdTQAorSU5UUk9TUEVDVElPTl9DT01QSUxFUiA9IEBJTlRST1NQRUNUSU9OX0NPTVBJTEVSQAorSU5UUk9TUEVDVElPTl9HRU5FUkFURSA9IEBJTlRST1NQRUNUSU9OX0dFTkVSQVRFQAorSU5UUk9TUEVDVElPTl9HSVJESVIgPSBASU5UUk9TUEVDVElPTl9HSVJESVJACitJTlRST1NQRUNUSU9OX0xJQlMgPSBASU5UUk9TUEVDVElPTl9MSUJTQAorSU5UUk9TUEVDVElPTl9NQUtFRklMRSA9IEBJTlRST1NQRUNUSU9OX01BS0VGSUxFQAorSU5UUk9TUEVDVElPTl9TQ0FOTkVSID0gQElOVFJPU1BFQ1RJT05fU0NBTk5FUkAKK0lOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUiA9IEBJTlRST1NQRUNUSU9OX1RZUEVMSUJESVJACitMRCA9IEBMREAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQkFWQUhJX0NMSUVOVF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ0xJRU5UX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPTU1PTl9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ09NTU9OX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPTVBBVF9IT1dMX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DT01QQVRfSE9XTF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9DT01QQVRfTElCRE5TX1NEX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DT01QQVRfTElCRE5TX1NEX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPUkVfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NPUkVfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfR0xJQl9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfR0xJQl9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9HT0JKRUNUX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9HT0JKRUNUX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX1FUM19WRVJTSU9OX0lORk8gPSBATElCQVZBSElfUVQzX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX1FUNF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfUVQ0X1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX1VJX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9VSV9WRVJTSU9OX0lORk9ACitMSUJEQUVNT05fQ0ZMQUdTID0gQExJQkRBRU1PTl9DRkxBR1NACitMSUJEQUVNT05fTElCUyA9IEBMSUJEQUVNT05fTElCU0AKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKK0xOX1MgPSBATE5fU0AKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKK01DUyA9IEBNQ1NACitNREFTU0VNQkxFUiA9IEBNREFTU0VNQkxFUkAKK01LRElSX1AgPSBATUtESVJfUEAKK01LSU5TVEFMTERJUlMgPSBATUtJTlNUQUxMRElSU0AKK01PQ19RVDMgPSBATU9DX1FUM0AKK01PQ19RVDQgPSBATU9DX1FUNEAKK01PTk9ET0NFUiA9IEBNT05PRE9DRVJACitNT05PRE9DX0NGTEFHUyA9IEBNT05PRE9DX0NGTEFHU0AKK01PTk9ET0NfRElSID0gQE1PTk9ET0NfRElSQAorTU9OT0RPQ19MSUJTID0gQE1PTk9ET0NfTElCU0AKK01TR0ZNVCA9IEBNU0dGTVRACitNU0dGTVRfT1BUUyA9IEBNU0dGTVRfT1BUU0AKK01TR01FUkdFID0gQE1TR01FUkdFQAorTk0gPSBATk1ACitOTUVESVQgPSBATk1FRElUQAorT0JKRFVNUCA9IEBPQkpEVU1QQAorT0JKRVhUID0gQE9CSkVYVEAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQS0dfQ09ORklHX0xJQkRJUiA9IEBQS0dfQ09ORklHX0xJQkRJUkAKK1BLR19DT05GSUdfUEFUSCA9IEBQS0dfQ09ORklHX1BBVEhACitQT0ZJTEVTID0gQFBPRklMRVNACitQT1NVQiA9IEBQT1NVQkAKK1BPX0lOX0RBVEFESVJfRkFMU0UgPSBAUE9fSU5fREFUQURJUl9GQUxTRUAKK1BPX0lOX0RBVEFESVJfVFJVRSA9IEBQT19JTl9EQVRBRElSX1RSVUVACitQVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACitQVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKK1BUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACitQWVRIT04gPSBAUFlUSE9OQAorUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKK1BZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACitQWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACitQWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKK1FUM19DRkxBR1MgPSBAUVQzX0NGTEFHU0AKK1FUM19MSUJTID0gQFFUM19MSUJTQAorUVQ0X0NGTEFHUyA9IEBRVDRfQ0ZMQUdTQAorUVQ0X0xJQlMgPSBAUVQ0X0xJQlNACitSQU5MSUIgPSBAUkFOTElCQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTVE9XID0gQFNUT1dACitTVFJJUCA9IEBTVFJJUEAKK1VTRV9OTFMgPSBAVVNFX05MU0AKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1ZJU0lCSUxJVFlfSElEREVOX0NGTEFHUyA9IEBWSVNJQklMSVRZX0hJRERFTl9DRkxBR1NACitYR0VUVEVYVCA9IEBYR0VUVEVYVEAKK1hNTF9DRkxBR1MgPSBAWE1MX0NGTEFHU0AKK1hNTF9MSUJTID0gQFhNTF9MSUJTQAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorYWNfY3RfQVIgPSBAYWNfY3RfQVJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithY3hfcHRocmVhZF9jb25maWcgPSBAYWN4X3B0aHJlYWRfY29uZmlnQAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACithdmFoaV9ydW50aW1lX2RpciA9IEBhdmFoaV9ydW50aW1lX2RpckAKK2F2YWhpX3NvY2tldCA9IEBhdmFoaV9zb2NrZXRACithdmFoaWxvY2FsZWRpciA9IEBhdmFoaWxvY2FsZWRpckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraGF2ZV9wa2dfY29uZmlnID0gQGhhdmVfcGtnX2NvbmZpZ0AKK2hhdmVfeG1sdG9tYW4gPSBAaGF2ZV94bWx0b21hbkAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitpbnRlcmZhY2VzZGlyID0gQGludGVyZmFjZXNkaXJACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKK3BrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitweWV4ZWNkaXIgPSBAcHlleGVjZGlyQAorcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3N5c3RlbWRzeXN0ZW11bml0ZGlyID0gQHN5c3RlbWRzeXN0ZW11bml0ZGlyQAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK3RvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKK3RvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitBU1NFTUJMWSA9IGF2YWhpLXNoYXJwLmRsbAorQ0xFQU5GSUxFUyA9ICQoQVNTRU1CTFkpICQoQVNTRU1CTFkpLm1kYiAkKEFTU0VNQkxZKS5jb25maWcKK0FWQUhJU09VUkNFUyA9IFwKKwkkKHNyY2RpcikvQWRkcmVzc1Jlc29sdmVyLmNzCVwKKwkkKHNyY2RpcikvQXNzZW1ibHlJbmZvLmNzCVwKKwkkKHNyY2RpcikvQnJvd3NlckJhc2UuY3MJXAorCSQoc3JjZGlyKS9DbGllbnQuY3MJCVwKKwkkKHNyY2RpcikvQ2xpZW50RXhjZXB0aW9uLmNzCVwKKwkkKHNyY2RpcikvRG9tYWluQnJvd3Nlci5jcwlcCisJJChzcmNkaXIpL0VudHJ5R3JvdXAuY3MJCVwKKwkkKHNyY2RpcikvSG9zdE5hbWVSZXNvbHZlci5jcwlcCisJJChzcmNkaXIpL1JlY29yZEJyb3dzZXIuY3MJXAorCSQoc3JjZGlyKS9SZXNvbHZlckJhc2UuY3MJXAorCSQoc3JjZGlyKS9TZXJ2aWNlQnJvd3Nlci5jcwlcCisJJChzcmNkaXIpL1NlcnZpY2VSZXNvbHZlci5jcwlcCisJJChzcmNkaXIpL1NlcnZpY2VUeXBlQnJvd3Nlci5jcwlcCisJJChzcmNkaXIpL1V0aWxpdHkuY3MKKworRVhUUkFfRElTVCA9IFwKKwkkKEFWQUhJU09VUkNFUykJCQlcCisJJChzcmNkaXIpL0F2YWhpVGVzdC5jcyAJCVwKKwkkKHNyY2RpcikvYXZhaGkuc25rCQlcCisJJChzcmNkaXIpLyQoQVNTRU1CTFkpLmNvbmZpZy5pbglcCisJJChzcmNkaXIpL2F2YWhpLXNoYXJwLWRvY3Muc291cmNlCVwKKwkkKHNyY2RpcikvZW4vKi54bWwJCVwKKwkkKHNyY2RpcikvZW4vKi8qLnhtbAkJXAorCSQoc3JjZGlyKS9nZW5jZmcuc2gKKworQEhBVkVfREJVU19UUlVFQEBIQVZFX01PTk9ET0NfVFJVRUBASEFWRV9NT05PX1RSVUVAbW9ub2RvY2RpciA9ICQoTU9OT0RPQ19ESVIpCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfTU9OT0RPQ19UUlVFQEBIQVZFX01PTk9fVFJVRUBtb25vZG9jX0RBVEEgPSBhdmFoaS1zaGFycC1kb2NzLnppcCBhdmFoaS1zaGFycC1kb2NzLnRyZWUgYXZhaGktc2hhcnAtZG9jcy5zb3VyY2UKK2FsbDogYWxsLWFtCisKKy5TVUZGSVhFUzoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCisJICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduIGF2YWhpLXNoYXJwL01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiBhdmFoaS1zaGFycC9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CisKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJzCitpbnN0YWxsLW1vbm9kb2NEQVRBOiAkKG1vbm9kb2NfREFUQSkKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwl0ZXN0IC16ICIkKG1vbm9kb2NkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChtb25vZG9jZGlyKSIKKwlAbGlzdD0nJChtb25vZG9jX0RBVEEpJzsgdGVzdCAtbiAiJChtb25vZG9jZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICBlY2hvICIkJGQkJHAiOyBcCisJZG9uZSB8ICQoYW1fX2Jhc2VfbGlzdCkgfCBcCisJd2hpbGUgcmVhZCBmaWxlczsgZG8gXAorCSAgZWNobyAiICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICckKERFU1RESVIpJChtb25vZG9jZGlyKSciOyBcCisJICAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAiJChERVNURElSKSQobW9ub2RvY2RpcikiIHx8IGV4aXQgJCQ/OyBcCisJZG9uZQorCit1bmluc3RhbGwtbW9ub2RvY0RBVEE6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChtb25vZG9jX0RBVEEpJzsgdGVzdCAtbiAiJChtb25vZG9jZGlyKSIgfHwgbGlzdD07IFwKKwlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IHNlZCAtZSAnc3xeLiovfHwnYDsgXAorCWRpcj0nJChERVNURElSKSQobW9ub2RvY2RpciknOyAkKGFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIpCit0YWdzOiBUQUdTCitUQUdTOgorCitjdGFnczogQ1RBR1MKK0NUQUdTOgorCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgXAorCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKKwkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCisJICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAorCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKKwkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKKwkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKKwkJCSAgIHNvcnQgLXVgIDs7IFwKKwllc2FjOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorY2hlY2stYW06IGFsbC1hbQorY2hlY2s6IGNoZWNrLWFtCithbGwtYW06IE1ha2VmaWxlICQoREFUQSkKK2luc3RhbGxkaXJzOgorCWZvciBkaXIgaW4gIiQoREVTVERJUikkKG1vbm9kb2NkaXIpIjsgZG8gXAorCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAorCWRvbmUKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgICAgIGluc3RhbGw7IFwKKwllbHNlIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAorCWZpCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENMRUFORklMRVMpIiB8fCBybSAtZiAkKENMRUFORklMRVMpCisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKK0BIQVZFX0RCVVNfRkFMU0VAaW5zdGFsbC1kYXRhLWhvb2s6CitASEFWRV9NT05PX0ZBTFNFQGluc3RhbGwtZGF0YS1ob29rOgorQEhBVkVfREJVU19GQUxTRUB1bmluc3RhbGwtaG9vazoKK0BIQVZFX01PTk9fRkFMU0VAdW5pbnN0YWxsLWhvb2s6CitjbGVhbjogY2xlYW4tYW0KKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBtb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tZ2VuZXJpYworCitkdmk6IGR2aS1hbQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtYW0KKworaHRtbC1hbToKKworaW5mbzogaW5mby1hbQorCitpbmZvLWFtOgorCitpbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtbW9ub2RvY0RBVEEKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWRhdGEtaG9vaworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCisKK2luc3RhbGwtZHZpLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06CisKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCisKK2luc3RhbGwtaHRtbC1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1pbmZvLWFtOgorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCisKK2luc3RhbGwtcGRmLWFtOgorCitpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCisKK2luc3RhbGwtcHMtYW06CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtbW9ub2RvY0RBVEEKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB1bmluc3RhbGwtaG9vaworLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtc3RyaXAgdW5pbnN0YWxsLWFtCisKKy5QSE9OWTogYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgXAorCWRpc3RjbGVhbiBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBkaXN0ZGlyIGR2aSBcCisJZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIFwKKwlpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZGF0YS1ob29rIGluc3RhbGwtZHZpIFwKKwlpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBcCisJaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gXAorCWluc3RhbGwtbW9ub2RvY0RBVEEgaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBcCisJaW5zdGFsbC1wcy1hbSBpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gXAorCWluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIFwKKwltb3N0bHljbGVhbiBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBcCisJcHMgcHMtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSB1bmluc3RhbGwtaG9vayBcCisJdW5pbnN0YWxsLW1vbm9kb2NEQVRBCisKKworJChBU1NFTUJMWSk6ICQoQVZBSElTT1VSQ0VTKQorCSQoQU1fVl9HRU4pTU9OT19TSEFSRURfRElSPS4gbWNzIC1rZXlmaWxlOiQoc3JjZGlyKS9hdmFoaS5zbmsgLXRhcmdldDpsaWJyYXJ5IC1vdXQ6JEAgLWRlYnVnICQoQVZBSElTT1VSQ0VTKSAtcjpNb25vLlBvc2l4CisKKyQoQVNTRU1CTFkpLmNvbmZpZzogJChBU1NFTUJMWSkuY29uZmlnLmluCisJJChBTV9WX0dFTikkKHNyY2RpcikvZ2VuY2ZnLnNoICQodG9wX2J1aWxkZGlyKS9hdmFoaS1jbGllbnQvbGliYXZhaGktY2xpZW50LmxhIFwKKwkJJCh0b3BfYnVpbGRkaXIpL2F2YWhpLWNvbW1vbi9saWJhdmFoaS1jb21tb24ubGEgXAorCQkkKHRvcF9idWlsZGRpcikvYXZhaGktZ2xpYi9saWJhdmFoaS1nbGliLmxhIDwgJDwgPiAkQAorCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfTU9OT19UUlVFQGFsbDogJChBU1NFTUJMWSkgJChBU1NFTUJMWSkuY29uZmlnCisKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9NT05PRE9DX1RSVUVAQEhBVkVfTU9OT19UUlVFQHVwZGF0ZS1kb2NzOiAkKEFTU0VNQkxZKQorQEhBVkVfREJVU19UUlVFQEBIQVZFX01PTk9ET0NfVFJVRUBASEFWRV9NT05PX1RSVUVACSQoQU1fVl9HRU4pJChNT05PRE9DRVIpIC1hc3NlbWJseTokKEFTU0VNQkxZKSAtcGF0aDplbgorCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfTU9OT0RPQ19UUlVFQEBIQVZFX01PTk9fVFJVRUBhdmFoaS1zaGFycC1kb2NzLnppcDogYXZhaGktc2hhcnAtZG9jcy50cmVlCisKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9NT05PRE9DX1RSVUVAQEhBVkVfTU9OT19UUlVFQGF2YWhpLXNoYXJwLWRvY3MudHJlZTogJChzcmNkaXIpL2VuLyovKgorQEhBVkVfREJVU19UUlVFQEBIQVZFX01PTk9ET0NfVFJVRUBASEFWRV9NT05PX1RSVUVACSQoQU1fVl9HRU4pJChNREFTU0VNQkxFUikgLS1vdXQgYXZhaGktc2hhcnAtZG9jcyAtLWVjbWEgJChzcmNkaXIpL2VuCisKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9NT05PX1RSVUVAaW5zdGFsbC1kYXRhLWhvb2s6ICQoQVNTRU1CTFkpCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfTU9OT19UUlVFQAkkKEFNX1ZfR0VOKU1PTk9fU0hBUkVEX0RJUj0uICQoR0FDVVRJTCkgL2kgJChBU1NFTUJMWSkgL3BhY2thZ2UgYXZhaGktc2hhcnAgL2dhY2RpciAkKGxpYmRpcikgL3Jvb3QgJChERVNURElSKSQobGliZGlyKQorCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfTU9OT19UUlVFQHVuaW5zdGFsbC1ob29rOiAkKEFTU0VNQkxZKQorQEhBVkVfREJVU19UUlVFQEBIQVZFX01PTk9fVFJVRUAJJChBTV9WX0dFTilNT05PX1NIQVJFRF9ESVI9LiAkKEdBQ1VUSUwpIC91IGF2YWhpLXNoYXJwIC9wYWNrYWdlIGF2YWhpLXNoYXJwIC9nYWNkaXIgJChsaWJkaXIpIC9yb290ICQoREVTVERJUikkKGxpYmRpcikKKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL1JlY29yZEJyb3dzZXIuY3MgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvUmVjb3JkQnJvd3Nlci5jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTVhOTgzCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL1JlY29yZEJyb3dzZXIuY3MKQEAgLTAsMCArMSwyMjUgQEAKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKwordXNpbmcgU3lzdGVtOwordXNpbmcgU3lzdGVtLk5ldDsKK3VzaW5nIFN5c3RlbS5Db2xsZWN0aW9uczsKK3VzaW5nIFN5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2aWNlczsKK3VzaW5nIFN5c3RlbS5UZXh0OworCituYW1lc3BhY2UgQXZhaGkKK3sKKworICAgIHB1YmxpYyBkZWxlZ2F0ZSB2b2lkIFJlY29yZEluZm9IYW5kbGVyIChvYmplY3QgbywgUmVjb3JkSW5mb0FyZ3MgYXJncyk7CisKKyAgICBpbnRlcm5hbCBkZWxlZ2F0ZSB2b2lkIFJlY29yZEJyb3dzZXJDYWxsYmFjayAoSW50UHRyIGJyb3dzZXIsIGludCBpZmFjZSwgUHJvdG9jb2wgcHJvdG8sIEJyb3dzZXJFdmVudCBiZXZlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFB0ciBuYW1lLCB1c2hvcnQgY2xhenosIHVzaG9ydCB0eXBlLCBJbnRQdHIgcmRhdGEsIGludCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb29rdXBSZXN1bHRGbGFncyBmbGFncywgSW50UHRyIHVzZXJkYXRhKTsKKworICAgIHB1YmxpYyBlbnVtIFJlY29yZENsYXNzIHsKKyAgICAgICAgSW4gPSAxCisgICAgfQorCisgICAgcHVibGljIGVudW0gUmVjb3JkVHlwZSB7CisgICAgICAgIEEgPSAxLAorICAgICAgICBOcyA9IDIsCisgICAgICAgIENuYW1lID0gNSwKKyAgICAgICAgU29hID0gNiwKKyAgICAgICAgUHRyID0gMTIsCisgICAgICAgIEhpbmZvID0gMTMsCisgICAgICAgIE14ID0gMTUsCisgICAgICAgIFR4dCA9IDE2LAorICAgICAgICBBYWEgPSAyOCwKKyAgICAgICAgU3J2ID0gMzMKKyAgICB9CisKKyAgICBwdWJsaWMgc3RydWN0IFJlY29yZEluZm8KKyAgICB7CisgICAgICAgIHB1YmxpYyBpbnQgTmV0d29ya0ludGVyZmFjZTsKKyAgICAgICAgcHVibGljIFByb3RvY29sIFByb3RvY29sOworICAgICAgICBwdWJsaWMgc3RyaW5nIE5hbWU7CisgICAgICAgIHB1YmxpYyBSZWNvcmRDbGFzcyBDbGFzczsKKyAgICAgICAgcHVibGljIFJlY29yZFR5cGUgVHlwZTsKKyAgICAgICAgcHVibGljIGJ5dGVbXSBEYXRhOworICAgICAgICBwdWJsaWMgTG9va3VwUmVzdWx0RmxhZ3MgRmxhZ3M7CisgICAgfQorCisgICAgcHVibGljIGNsYXNzIFJlY29yZEluZm9BcmdzIDogRXZlbnRBcmdzCisgICAgeworICAgICAgICBwcml2YXRlIFJlY29yZEluZm8gcmVjb3JkOworCisgICAgICAgIHB1YmxpYyBSZWNvcmRJbmZvIFJlY29yZCB7CisgICAgICAgICAgICBnZXQgeyByZXR1cm4gcmVjb3JkOyB9CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgUmVjb3JkSW5mb0FyZ3MgKFJlY29yZEluZm8gcmVjb3JkKQorICAgICAgICB7CisgICAgICAgICAgICB0aGlzLnJlY29yZCA9IHJlY29yZDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBjbGFzcyBSZWNvcmRCcm93c2VyIDogQnJvd3NlckJhc2UsIElEaXNwb3NhYmxlCisgICAgeworICAgICAgICBwcml2YXRlIEludFB0ciBoYW5kbGU7CisgICAgICAgIHByaXZhdGUgQXJyYXlMaXN0IGluZm9zID0gbmV3IEFycmF5TGlzdCAoKTsKKyAgICAgICAgcHJpdmF0ZSBDbGllbnQgY2xpZW50OworICAgICAgICBwcml2YXRlIGludCBpZmFjZTsKKyAgICAgICAgcHJpdmF0ZSBQcm90b2NvbCBwcm90bzsKKyAgICAgICAgcHJpdmF0ZSBzdHJpbmcgbmFtZTsKKyAgICAgICAgcHJpdmF0ZSBSZWNvcmRDbGFzcyBjbGF6ejsKKyAgICAgICAgcHJpdmF0ZSBSZWNvcmRUeXBlIHR5cGU7CisgICAgICAgIHByaXZhdGUgTG9va3VwRmxhZ3MgZmxhZ3M7CisgICAgICAgIHByaXZhdGUgUmVjb3JkQnJvd3NlckNhbGxiYWNrIGNiOworCisgICAgICAgIHByaXZhdGUgQXJyYXlMaXN0IGFkZExpc3RlbmVycyA9IG5ldyBBcnJheUxpc3QgKCk7CisgICAgICAgIHByaXZhdGUgQXJyYXlMaXN0IHJlbW92ZUxpc3RlbmVycyA9IG5ldyBBcnJheUxpc3QgKCk7CisKKyAgICAgICAgW0RsbEltcG9ydCAoImF2YWhpLWNsaWVudCIpXQorICAgICAgICBwcml2YXRlIHN0YXRpYyBleHRlcm4gSW50UHRyIGF2YWhpX3JlY29yZF9icm93c2VyX25ldyAoSW50UHRyIGNsaWVudCwgaW50IGlmYWNlLCBQcm90b2NvbCBwcm90bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVbXSBuYW1lLCB1c2hvcnQgY2xhenosIHVzaG9ydCB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9va3VwRmxhZ3MgZmxhZ3MsIFJlY29yZEJyb3dzZXJDYWxsYmFjayBjYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFB0ciB1c2VyZGF0YSk7CisKKworICAgICAgICBbRGxsSW1wb3J0ICgiYXZhaGktY2xpZW50IildCisgICAgICAgIHByaXZhdGUgc3RhdGljIGV4dGVybiB2b2lkIGF2YWhpX3JlY29yZF9icm93c2VyX2ZyZWUgKEludFB0ciBoYW5kbGUpOworCisgICAgICAgIHB1YmxpYyBldmVudCBSZWNvcmRJbmZvSGFuZGxlciBSZWNvcmRBZGRlZAorICAgICAgICB7CisgICAgICAgICAgICBhZGQgeworICAgICAgICAgICAgICAgIGFkZExpc3RlbmVycy5BZGQgKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBTdGFydCAoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlbW92ZSB7CisgICAgICAgICAgICAgICAgYWRkTGlzdGVuZXJzLlJlbW92ZSAodmFsdWUpOworICAgICAgICAgICAgICAgIFN0b3AgKGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBldmVudCBSZWNvcmRJbmZvSGFuZGxlciBSZWNvcmRSZW1vdmVkCisgICAgICAgIHsKKyAgICAgICAgICAgIGFkZCB7CisgICAgICAgICAgICAgICAgcmVtb3ZlTGlzdGVuZXJzLkFkZCAodmFsdWUpOworICAgICAgICAgICAgICAgIFN0YXJ0ICgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVtb3ZlIHsKKyAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcnMuUmVtb3ZlICh2YWx1ZSk7CisgICAgICAgICAgICAgICAgU3RvcCAoZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFJlY29yZEluZm9bXSBSZWNvcmRzCisgICAgICAgIHsKKyAgICAgICAgICAgIGdldCB7IHJldHVybiAoUmVjb3JkSW5mb1tdKSBpbmZvcy5Ub0FycmF5ICh0eXBlb2YgKFJlY29yZEluZm8pKTsgfQorICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFJlY29yZEJyb3dzZXIgKENsaWVudCBjbGllbnQsIHN0cmluZyBuYW1lLCBSZWNvcmRUeXBlIHR5cGUpIDoKKyAgICAgICAgICAgIHRoaXMgKGNsaWVudCwgLTEsIFByb3RvY29sLlVuc3BlY2lmaWVkLCBuYW1lLCBSZWNvcmRDbGFzcy5JbiwgdHlwZSwgTG9va3VwRmxhZ3MuTm9uZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFJlY29yZEJyb3dzZXIgKENsaWVudCBjbGllbnQsIGludCBpZmFjZSwgUHJvdG9jb2wgcHJvdG8sIHN0cmluZyBuYW1lLCBSZWNvcmRDbGFzcyBjbGF6eiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlY29yZFR5cGUgdHlwZSwgTG9va3VwRmxhZ3MgZmxhZ3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRoaXMuY2xpZW50ID0gY2xpZW50OworICAgICAgICAgICAgdGhpcy5pZmFjZSA9IGlmYWNlOworICAgICAgICAgICAgdGhpcy5wcm90byA9IHByb3RvOworICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKKyAgICAgICAgICAgIHRoaXMuY2xhenogPSBjbGF6ejsKKyAgICAgICAgICAgIHRoaXMudHlwZSA9IHR5cGU7CisgICAgICAgICAgICB0aGlzLmZsYWdzID0gZmxhZ3M7CisgICAgICAgICAgICBjYiA9IE9uUmVjb3JkQnJvd3NlckNhbGxiYWNrOworICAgICAgICB9CisKKyAgICAgICAgflJlY29yZEJyb3dzZXIgKCkKKyAgICAgICAgeworICAgICAgICAgICAgRGlzcG9zZSAoKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIERpc3Bvc2UgKCkKKyAgICAgICAgeworICAgICAgICAgICAgU3RvcCAodHJ1ZSk7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHZvaWQgU3RhcnQgKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNsaWVudC5IYW5kbGUgPT0gSW50UHRyLlplcm8gfHwgaGFuZGxlICE9IEludFB0ci5aZXJvIHx8CisgICAgICAgICAgICAgICAgKGFkZExpc3RlbmVycy5Db3VudCA9PSAwICYmIHJlbW92ZUxpc3RlbmVycy5Db3VudCA9PSAwKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGxvY2sgKGNsaWVudCkgeworICAgICAgICAgICAgICAgIGhhbmRsZSA9IGF2YWhpX3JlY29yZF9icm93c2VyX25ldyAoY2xpZW50LkhhbmRsZSwgaWZhY2UsIHByb3RvLCBVdGlsaXR5LlN0cmluZ1RvQnl0ZXMgKG5hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVzaG9ydCkgY2xhenosICh1c2hvcnQpIHR5cGUsIGZsYWdzLCBjYiwgSW50UHRyLlplcm8pOworCisgICAgICAgICAgICAgICAgaWYgKGhhbmRsZSA9PSBJbnRQdHIuWmVybykKKyAgICAgICAgICAgICAgICAgICAgY2xpZW50LlRocm93RXJyb3IgKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHZvaWQgU3RvcCAoYm9vbCBmb3JjZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNsaWVudC5IYW5kbGUgIT0gSW50UHRyLlplcm8gJiYgaGFuZGxlICE9IEludFB0ci5aZXJvICYmCisgICAgICAgICAgICAgICAgKGZvcmNlIHx8IChhZGRMaXN0ZW5lcnMuQ291bnQgPT0gMCAmJiByZW1vdmVMaXN0ZW5lcnMuQ291bnQgPT0gMCkpKSB7CisKKyAgICAgICAgICAgICAgICBsb2NrIChjbGllbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgYXZhaGlfcmVjb3JkX2Jyb3dzZXJfZnJlZSAoaGFuZGxlKTsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlID0gSW50UHRyLlplcm87CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSB2b2lkIE9uUmVjb3JkQnJvd3NlckNhbGxiYWNrIChJbnRQdHIgYnJvd3NlciwgaW50IGlmYWNlLCBQcm90b2NvbCBwcm90bywgQnJvd3NlckV2ZW50IGJldmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRQdHIgbmFtZSwgdXNob3J0IGNsYXp6LCB1c2hvcnQgdHlwZSwgSW50UHRyIHJkYXRhLCBpbnQgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb29rdXBSZXN1bHRGbGFncyBmbGFncywgSW50UHRyIHVzZXJkYXRhKQorICAgICAgICB7CisgICAgICAgICAgICBSZWNvcmRJbmZvIGluZm87CisgICAgICAgICAgICBpbmZvLk5ldHdvcmtJbnRlcmZhY2UgPSBpZmFjZTsKKyAgICAgICAgICAgIGluZm8uUHJvdG9jb2wgPSBwcm90bzsKKyAgICAgICAgICAgIGluZm8uTmFtZSA9IFV0aWxpdHkuUHRyVG9TdHJpbmcgKG5hbWUpOworICAgICAgICAgICAgaW5mby5DbGFzcyA9IChSZWNvcmRDbGFzcykgY2xheno7CisgICAgICAgICAgICBpbmZvLlR5cGUgPSAoUmVjb3JkVHlwZSkgdHlwZTsKKyAgICAgICAgICAgIGluZm8uRmxhZ3MgPSBmbGFnczsKKyAgICAgICAgICAgIGluZm8uRGF0YSA9IG5ldyBieXRlW3NpemVdOworCisgICAgICAgICAgICBpZiAocmRhdGEgIT0gSW50UHRyLlplcm8pIHsKKyAgICAgICAgICAgICAgICBNYXJzaGFsLkNvcHkgKHJkYXRhLCBpbmZvLkRhdGEsIDAsIHNpemUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKGJldmVudCkgeworICAgICAgICAgICAgY2FzZSBCcm93c2VyRXZlbnQuQWRkZWQ6CisgICAgICAgICAgICAgICAgaW5mb3MuQWRkIChpbmZvKTsKKworICAgICAgICAgICAgICAgIGZvcmVhY2ggKFJlY29yZEluZm9IYW5kbGVyIGhhbmRsZXIgaW4gYWRkTGlzdGVuZXJzKQorICAgICAgICAgICAgICAgICAgICBoYW5kbGVyICh0aGlzLCBuZXcgUmVjb3JkSW5mb0FyZ3MgKGluZm8pKTsKKworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCcm93c2VyRXZlbnQuUmVtb3ZlZDoKKyAgICAgICAgICAgICAgICBpbmZvcy5SZW1vdmUgKGluZm8pOworCisgICAgICAgICAgICAgICAgZm9yZWFjaCAoUmVjb3JkSW5mb0hhbmRsZXIgaGFuZGxlciBpbiByZW1vdmVMaXN0ZW5lcnMpCisgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIgKHRoaXMsIG5ldyBSZWNvcmRJbmZvQXJncyAoaW5mbykpOworCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEVtaXRCcm93c2VyRXZlbnQgKGJldmVudCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvUmVzb2x2ZXJCYXNlLmNzIGIvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL1Jlc29sdmVyQmFzZS5jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTQ2YWJhCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL1Jlc29sdmVyQmFzZS5jcwpAQCAtMCwwICsxLDM0IEBACisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKK3VzaW5nIFN5c3RlbTsKKworbmFtZXNwYWNlIEF2YWhpCit7CisgICAgcHVibGljIGFic3RyYWN0IGNsYXNzIFJlc29sdmVyQmFzZQorICAgIHsKKyAgICAgICAgcHVibGljIGV2ZW50IEVycm9yQ29kZUhhbmRsZXIgRmFpbGVkOworCisgICAgICAgIGludGVybmFsIHZvaWQgRW1pdEZhaWx1cmUgKEVycm9yQ29kZSBjb2RlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoRmFpbGVkICE9IG51bGwpCisgICAgICAgICAgICAgICAgRmFpbGVkICh0aGlzLCBuZXcgRXJyb3JDb2RlQXJncyAoY29kZSkpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL1NlcnZpY2VCcm93c2VyLmNzIGIvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL1NlcnZpY2VCcm93c2VyLmNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjMzlhZDQKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvU2VydmljZUJyb3dzZXIuY3MKQEAgLTAsMCArMSwyMTQgQEAKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKwordXNpbmcgU3lzdGVtOwordXNpbmcgU3lzdGVtLk5ldDsKK3VzaW5nIFN5c3RlbS5Db2xsZWN0aW9uczsKK3VzaW5nIFN5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2aWNlczsKK3VzaW5nIFN5c3RlbS5UZXh0OworCituYW1lc3BhY2UgQXZhaGkKK3sKKyAgICBpbnRlcm5hbCBkZWxlZ2F0ZSB2b2lkIFNlcnZpY2VCcm93c2VyQ2FsbGJhY2sgKEludFB0ciBicm93c2VyLCBpbnQgaWZhY2UsIFByb3RvY29sIHByb3RvLCBCcm93c2VyRXZlbnQgYmV2ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UHRyIG5hbWUsIEludFB0ciB0eXBlLCBJbnRQdHIgZG9tYWluLCBMb29rdXBSZXN1bHRGbGFncyBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFB0ciB1c2VyZGF0YSk7CisKKyAgICBwdWJsaWMgc3RydWN0IFNlcnZpY2VJbmZvCisgICAgeworICAgICAgICBwdWJsaWMgaW50IE5ldHdvcmtJbnRlcmZhY2U7CisgICAgICAgIHB1YmxpYyBQcm90b2NvbCBQcm90b2NvbDsKKyAgICAgICAgcHVibGljIHN0cmluZyBEb21haW47CisgICAgICAgIHB1YmxpYyBzdHJpbmcgU2VydmljZVR5cGU7CisgICAgICAgIHB1YmxpYyBzdHJpbmcgTmFtZTsKKworICAgICAgICBwdWJsaWMgc3RyaW5nIEhvc3ROYW1lOworICAgICAgICBwdWJsaWMgSVBBZGRyZXNzIEFkZHJlc3M7CisgICAgICAgIHB1YmxpYyBVSW50MTYgUG9ydDsKKyAgICAgICAgcHVibGljIGJ5dGVbXVtdIFRleHQ7CisgICAgICAgIHB1YmxpYyBMb29rdXBSZXN1bHRGbGFncyBGbGFnczsKKworICAgICAgICBwdWJsaWMgc3RhdGljIFNlcnZpY2VJbmZvIFplcm8gPSBuZXcgU2VydmljZUluZm8gKCk7CisgICAgfQorCisgICAgcHVibGljIGNsYXNzIFNlcnZpY2VJbmZvQXJncyA6IEV2ZW50QXJncworICAgIHsKKyAgICAgICAgcHJpdmF0ZSBTZXJ2aWNlSW5mbyBzZXJ2aWNlOworCisgICAgICAgIHB1YmxpYyBTZXJ2aWNlSW5mbyBTZXJ2aWNlIHsKKyAgICAgICAgICAgIGdldCB7IHJldHVybiBzZXJ2aWNlOyB9CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgU2VydmljZUluZm9BcmdzIChTZXJ2aWNlSW5mbyBzZXJ2aWNlKQorICAgICAgICB7CisgICAgICAgICAgICB0aGlzLnNlcnZpY2UgPSBzZXJ2aWNlOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIGRlbGVnYXRlIHZvaWQgU2VydmljZUluZm9IYW5kbGVyIChvYmplY3QgbywgU2VydmljZUluZm9BcmdzIGFyZ3MpOworCisgICAgcHVibGljIGNsYXNzIFNlcnZpY2VCcm93c2VyIDogQnJvd3NlckJhc2UsIElEaXNwb3NhYmxlCisgICAgeworICAgICAgICBwcml2YXRlIEludFB0ciBoYW5kbGU7CisgICAgICAgIHByaXZhdGUgQXJyYXlMaXN0IGluZm9zID0gbmV3IEFycmF5TGlzdCAoKTsKKyAgICAgICAgcHJpdmF0ZSBDbGllbnQgY2xpZW50OworICAgICAgICBwcml2YXRlIGludCBpZmFjZTsKKyAgICAgICAgcHJpdmF0ZSBQcm90b2NvbCBwcm90bzsKKyAgICAgICAgcHJpdmF0ZSBzdHJpbmcgZG9tYWluOworICAgICAgICBwcml2YXRlIHN0cmluZyB0eXBlOworICAgICAgICBwcml2YXRlIExvb2t1cEZsYWdzIGZsYWdzOworICAgICAgICBwcml2YXRlIFNlcnZpY2VCcm93c2VyQ2FsbGJhY2sgY2I7CisKKyAgICAgICAgcHJpdmF0ZSBBcnJheUxpc3QgYWRkTGlzdGVuZXJzID0gbmV3IEFycmF5TGlzdCAoKTsKKyAgICAgICAgcHJpdmF0ZSBBcnJheUxpc3QgcmVtb3ZlTGlzdGVuZXJzID0gbmV3IEFycmF5TGlzdCAoKTsKKworICAgICAgICBbRGxsSW1wb3J0ICgiYXZhaGktY2xpZW50IildCisgICAgICAgIHByaXZhdGUgc3RhdGljIGV4dGVybiBJbnRQdHIgYXZhaGlfc2VydmljZV9icm93c2VyX25ldyAoSW50UHRyIGNsaWVudCwgaW50IGlmYWNlLCBpbnQgcHJvdG8sIGJ5dGVbXSB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVbXSBkb21haW4sIExvb2t1cEZsYWdzIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlcnZpY2VCcm93c2VyQ2FsbGJhY2sgY2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UHRyIHVzZXJkYXRhKTsKKworICAgICAgICBbRGxsSW1wb3J0ICgiYXZhaGktY2xpZW50IildCisgICAgICAgIHByaXZhdGUgc3RhdGljIGV4dGVybiB2b2lkIGF2YWhpX3NlcnZpY2VfYnJvd3Nlcl9mcmVlIChJbnRQdHIgaGFuZGxlKTsKKworICAgICAgICBwdWJsaWMgZXZlbnQgU2VydmljZUluZm9IYW5kbGVyIFNlcnZpY2VBZGRlZAorICAgICAgICB7CisgICAgICAgICAgICBhZGQgeworICAgICAgICAgICAgICAgIGFkZExpc3RlbmVycy5BZGQgKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBTdGFydCAoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlbW92ZSB7CisgICAgICAgICAgICAgICAgYWRkTGlzdGVuZXJzLlJlbW92ZSAodmFsdWUpOworICAgICAgICAgICAgICAgIFN0b3AgKGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBldmVudCBTZXJ2aWNlSW5mb0hhbmRsZXIgU2VydmljZVJlbW92ZWQKKyAgICAgICAgeworICAgICAgICAgICAgYWRkIHsKKyAgICAgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcnMuQWRkICh2YWx1ZSk7CisgICAgICAgICAgICAgICAgU3RhcnQgKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZW1vdmUgeworICAgICAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVycy5SZW1vdmUgKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBTdG9wIChmYWxzZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgU2VydmljZUluZm9bXSBTZXJ2aWNlcworICAgICAgICB7CisgICAgICAgICAgICBnZXQgeyByZXR1cm4gKFNlcnZpY2VJbmZvW10pIGluZm9zLlRvQXJyYXkgKHR5cGVvZiAoU2VydmljZUluZm8pKTsgfQorICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFNlcnZpY2VCcm93c2VyIChDbGllbnQgY2xpZW50LCBzdHJpbmcgdHlwZSkgOiB0aGlzIChjbGllbnQsIHR5cGUsIGNsaWVudC5Eb21haW5OYW1lKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgU2VydmljZUJyb3dzZXIgKENsaWVudCBjbGllbnQsIHN0cmluZyB0eXBlLCBzdHJpbmcgZG9tYWluKSA6IHRoaXMgKGNsaWVudCwgLTEsIFByb3RvY29sLlVuc3BlY2lmaWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsIGRvbWFpbiwgTG9va3VwRmxhZ3MuTm9uZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFNlcnZpY2VCcm93c2VyIChDbGllbnQgY2xpZW50LCBpbnQgaWZhY2UsIFByb3RvY29sIHByb3RvLCBzdHJpbmcgdHlwZSwgc3RyaW5nIGRvbWFpbiwgTG9va3VwRmxhZ3MgZmxhZ3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRoaXMuY2xpZW50ID0gY2xpZW50OworICAgICAgICAgICAgdGhpcy5pZmFjZSA9IGlmYWNlOworICAgICAgICAgICAgdGhpcy5wcm90byA9IHByb3RvOworICAgICAgICAgICAgdGhpcy5kb21haW4gPSBkb21haW47CisgICAgICAgICAgICB0aGlzLnR5cGUgPSB0eXBlOworICAgICAgICAgICAgdGhpcy5mbGFncyA9IGZsYWdzOworICAgICAgICAgICAgY2IgPSBPblNlcnZpY2VCcm93c2VyQ2FsbGJhY2s7CisgICAgICAgIH0KKworICAgICAgICB+U2VydmljZUJyb3dzZXIgKCkKKyAgICAgICAgeworICAgICAgICAgICAgRGlzcG9zZSAoKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIERpc3Bvc2UgKCkKKyAgICAgICAgeworICAgICAgICAgICAgU3RvcCAodHJ1ZSk7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHZvaWQgU3RhcnQgKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNsaWVudC5IYW5kbGUgPT0gSW50UHRyLlplcm8gfHwgaGFuZGxlICE9IEludFB0ci5aZXJvIHx8CisgICAgICAgICAgICAgICAgKGFkZExpc3RlbmVycy5Db3VudCA9PSAwICYmIHJlbW92ZUxpc3RlbmVycy5Db3VudCA9PSAwKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGxvY2sgKGNsaWVudCkgeworICAgICAgICAgICAgICAgIGhhbmRsZSA9IGF2YWhpX3NlcnZpY2VfYnJvd3Nlcl9uZXcgKGNsaWVudC5IYW5kbGUsIGlmYWNlLCAoaW50KSBwcm90bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlsaXR5LlN0cmluZ1RvQnl0ZXMgKHR5cGUpLCBVdGlsaXR5LlN0cmluZ1RvQnl0ZXMgKGRvbWFpbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsIGNiLCBJbnRQdHIuWmVybyk7CisKKyAgICAgICAgICAgICAgICBpZiAoaGFuZGxlID09IEludFB0ci5aZXJvKQorICAgICAgICAgICAgICAgICAgICBjbGllbnQuVGhyb3dFcnJvciAoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgdm9pZCBTdG9wIChib29sIGZvcmNlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY2xpZW50LkhhbmRsZSAhPSBJbnRQdHIuWmVybyAmJiBoYW5kbGUgIT0gSW50UHRyLlplcm8gJiYKKyAgICAgICAgICAgICAgICAoZm9yY2UgfHwgKGFkZExpc3RlbmVycy5Db3VudCA9PSAwICYmIHJlbW92ZUxpc3RlbmVycy5Db3VudCA9PSAwKSkpIHsKKworICAgICAgICAgICAgICAgIGxvY2sgKGNsaWVudCkgeworICAgICAgICAgICAgICAgICAgICBhdmFoaV9zZXJ2aWNlX2Jyb3dzZXJfZnJlZSAoaGFuZGxlKTsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlID0gSW50UHRyLlplcm87CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSB2b2lkIE9uU2VydmljZUJyb3dzZXJDYWxsYmFjayAoSW50UHRyIGJyb3dzZXIsIGludCBpZmFjZSwgUHJvdG9jb2wgcHJvdG8sIEJyb3dzZXJFdmVudCBiZXZlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFB0ciBuYW1lLCBJbnRQdHIgdHlwZSwgSW50UHRyIGRvbWFpbiwgTG9va3VwUmVzdWx0RmxhZ3MgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFB0ciB1c2VyZGF0YSkKKyAgICAgICAgeworCisgICAgICAgICAgICBTZXJ2aWNlSW5mbyBpbmZvOworICAgICAgICAgICAgaW5mby5OZXR3b3JrSW50ZXJmYWNlID0gaWZhY2U7CisgICAgICAgICAgICBpbmZvLlByb3RvY29sID0gcHJvdG87CisgICAgICAgICAgICBpbmZvLkRvbWFpbiA9IFV0aWxpdHkuUHRyVG9TdHJpbmcgKGRvbWFpbik7CisgICAgICAgICAgICBpbmZvLlNlcnZpY2VUeXBlID0gVXRpbGl0eS5QdHJUb1N0cmluZyAodHlwZSk7CisgICAgICAgICAgICBpbmZvLk5hbWUgPSBVdGlsaXR5LlB0clRvU3RyaW5nIChuYW1lKTsKKyAgICAgICAgICAgIGluZm8uSG9zdE5hbWUgPSBudWxsOworICAgICAgICAgICAgaW5mby5BZGRyZXNzID0gbnVsbDsKKyAgICAgICAgICAgIGluZm8uUG9ydCA9IDA7CisgICAgICAgICAgICBpbmZvLlRleHQgPSBudWxsOworICAgICAgICAgICAgaW5mby5GbGFncyA9IGZsYWdzOworCisgICAgICAgICAgICBzd2l0Y2ggKGJldmVudCkgeworICAgICAgICAgICAgY2FzZSBCcm93c2VyRXZlbnQuQWRkZWQ6CisgICAgICAgICAgICAgICAgaW5mb3MuQWRkIChpbmZvKTsKKworICAgICAgICAgICAgICAgIGZvcmVhY2ggKFNlcnZpY2VJbmZvSGFuZGxlciBoYW5kbGVyIGluIGFkZExpc3RlbmVycykKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlciAodGhpcywgbmV3IFNlcnZpY2VJbmZvQXJncyAoaW5mbykpOworCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEJyb3dzZXJFdmVudC5SZW1vdmVkOgorICAgICAgICAgICAgICAgIGluZm9zLlJlbW92ZSAoaW5mbyk7CisKKyAgICAgICAgICAgICAgICBmb3JlYWNoIChTZXJ2aWNlSW5mb0hhbmRsZXIgaGFuZGxlciBpbiByZW1vdmVMaXN0ZW5lcnMpCisgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIgKHRoaXMsIG5ldyBTZXJ2aWNlSW5mb0FyZ3MgKGluZm8pKTsKKworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBFbWl0QnJvd3NlckV2ZW50IChiZXZlbnQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL1NlcnZpY2VSZXNvbHZlci5jcyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9TZXJ2aWNlUmVzb2x2ZXIuY3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y4OTAxYQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9TZXJ2aWNlUmVzb2x2ZXIuY3MKQEAgLTAsMCArMSwyMjUgQEAKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKwordXNpbmcgU3lzdGVtOwordXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zOwordXNpbmcgU3lzdGVtLk5ldDsKK3VzaW5nIFN5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2aWNlczsKK3VzaW5nIFN5c3RlbS5UZXh0OwordXNpbmcgTW9uby5Vbml4OworCituYW1lc3BhY2UgQXZhaGkKK3sKKworICAgIGludGVybmFsIGRlbGVnYXRlIHZvaWQgU2VydmljZVJlc29sdmVyQ2FsbGJhY2sgKEludFB0ciByZXNvbHZlciwgaW50IGlmYWNlLCBQcm90b2NvbCBwcm90bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNvbHZlckV2ZW50IHJldmVudCwgSW50UHRyIG5hbWUsIEludFB0ciB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFB0ciBkb21haW4sIEludFB0ciBob3N0LCBJbnRQdHIgYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSW50MTYgcG9ydCwgSW50UHRyIHR4dCwgTG9va3VwUmVzdWx0RmxhZ3MgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UHRyIHVzZXJkYXRhKTsKKworICAgIHB1YmxpYyBjbGFzcyBTZXJ2aWNlUmVzb2x2ZXIgOiBSZXNvbHZlckJhc2UsIElEaXNwb3NhYmxlCisgICAgeworICAgICAgICBwcml2YXRlIEludFB0ciBoYW5kbGU7CisgICAgICAgIHByaXZhdGUgU2VydmljZUluZm8gY3VycmVudEluZm87CisgICAgICAgIHByaXZhdGUgQ2xpZW50IGNsaWVudDsKKyAgICAgICAgcHJpdmF0ZSBpbnQgaWZhY2U7CisgICAgICAgIHByaXZhdGUgUHJvdG9jb2wgcHJvdG87CisgICAgICAgIHByaXZhdGUgc3RyaW5nIG5hbWU7CisgICAgICAgIHByaXZhdGUgc3RyaW5nIHR5cGU7CisgICAgICAgIHByaXZhdGUgc3RyaW5nIGRvbWFpbjsKKyAgICAgICAgcHJpdmF0ZSBQcm90b2NvbCBhcHJvdG87CisgICAgICAgIHByaXZhdGUgTG9va3VwRmxhZ3MgZmxhZ3M7CisgICAgICAgIHByaXZhdGUgU2VydmljZVJlc29sdmVyQ2FsbGJhY2sgY2I7CisKKyAgICAgICAgcHJpdmF0ZSBBcnJheUxpc3QgZm91bmRMaXN0ZW5lcnMgPSBuZXcgQXJyYXlMaXN0ICgpOworICAgICAgICBwcml2YXRlIEFycmF5TGlzdCB0aW1lb3V0TGlzdGVuZXJzID0gbmV3IEFycmF5TGlzdCAoKTsKKworICAgICAgICBbRGxsSW1wb3J0ICgiYXZhaGktY2xpZW50IildCisgICAgICAgIHByaXZhdGUgc3RhdGljIGV4dGVybiBJbnRQdHIgYXZhaGlfc2VydmljZV9yZXNvbHZlcl9uZXcgKEludFB0ciBjbGllbnQsIGludCBpZmFjZSwgUHJvdG9jb2wgcHJvdG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVbXSBuYW1lLCBieXRlW10gdHlwZSwgYnl0ZVtdIGRvbWFpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvdG9jb2wgYXByb3RvLCBMb29rdXBGbGFncyBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VydmljZVJlc29sdmVyQ2FsbGJhY2sgY2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFB0ciB1c2VyZGF0YSk7CisKKyAgICAgICAgW0RsbEltcG9ydCAoImF2YWhpLWNvbW1vbiIpXQorICAgICAgICBwcml2YXRlIHN0YXRpYyBleHRlcm4gSW50UHRyIGF2YWhpX3N0cmluZ19saXN0X2dldF9uZXh0IChJbnRQdHIgbGlzdCk7CisKKyAgICAgICAgW0RsbEltcG9ydCAoImF2YWhpLWNvbW1vbiIpXQorICAgICAgICBwcml2YXRlIHN0YXRpYyBleHRlcm4gSW50UHRyIGF2YWhpX3N0cmluZ19saXN0X2dldF90ZXh0IChJbnRQdHIgbGlzdCk7CisKKyAgICAgICAgW0RsbEltcG9ydCAoImF2YWhpLWNvbW1vbiIpXQorICAgICAgICBwcml2YXRlIHN0YXRpYyBleHRlcm4gaW50IGF2YWhpX3N0cmluZ19saXN0X2dldF9zaXplIChJbnRQdHIgbGlzdCk7CisKKyAgICAgICAgW0RsbEltcG9ydCAoImF2YWhpLWNsaWVudCIpXQorICAgICAgICBwcml2YXRlIHN0YXRpYyBleHRlcm4gdm9pZCBhdmFoaV9zZXJ2aWNlX3Jlc29sdmVyX2ZyZWUgKEludFB0ciBoYW5kbGUpOworCisgICAgICAgIHB1YmxpYyBldmVudCBTZXJ2aWNlSW5mb0hhbmRsZXIgRm91bmQKKyAgICAgICAgeworICAgICAgICAgICAgYWRkIHsKKyAgICAgICAgICAgICAgICBmb3VuZExpc3RlbmVycy5BZGQgKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBTdGFydCAoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlbW92ZSB7CisgICAgICAgICAgICAgICAgZm91bmRMaXN0ZW5lcnMuUmVtb3ZlICh2YWx1ZSk7CisgICAgICAgICAgICAgICAgU3RvcCAoZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGV2ZW50IEV2ZW50SGFuZGxlciBUaW1lb3V0CisgICAgICAgIHsKKyAgICAgICAgICAgIGFkZCB7CisgICAgICAgICAgICAgICAgdGltZW91dExpc3RlbmVycy5BZGQgKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBTdGFydCAoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlbW92ZSB7CisgICAgICAgICAgICAgICAgdGltZW91dExpc3RlbmVycy5SZW1vdmUgKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBTdG9wIChmYWxzZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgU2VydmljZUluZm8gU2VydmljZQorICAgICAgICB7CisgICAgICAgICAgICBnZXQgeyByZXR1cm4gY3VycmVudEluZm87IH0KKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBTZXJ2aWNlUmVzb2x2ZXIgKENsaWVudCBjbGllbnQsIHN0cmluZyBuYW1lLCBzdHJpbmcgdHlwZSwgc3RyaW5nIGRvbWFpbikgOiB0aGlzIChjbGllbnQsIC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvdG9jb2wuVW5zcGVjaWZpZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLCB0eXBlLCBkb21haW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm90b2NvbC5VbnNwZWNpZmllZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvb2t1cEZsYWdzLk5vbmUpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBTZXJ2aWNlUmVzb2x2ZXIgKENsaWVudCBjbGllbnQsIFNlcnZpY2VJbmZvIHNlcnZpY2UpIDogdGhpcyAoY2xpZW50LCBzZXJ2aWNlLk5ldHdvcmtJbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS5Qcm90b2NvbCwgc2VydmljZS5OYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UuU2VydmljZVR5cGUsIHNlcnZpY2UuRG9tYWluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb3RvY29sLlVuc3BlY2lmaWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldExvb2t1cEZsYWdzIChzZXJ2aWNlLkZsYWdzKSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFNlcnZpY2VSZXNvbHZlciAoQ2xpZW50IGNsaWVudCwgaW50IGlmYWNlLCBQcm90b2NvbCBwcm90bywgc3RyaW5nIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyB0eXBlLCBzdHJpbmcgZG9tYWluLCBQcm90b2NvbCBhcHJvdG8sIExvb2t1cEZsYWdzIGZsYWdzKQorICAgICAgICB7CisgICAgICAgICAgICB0aGlzLmNsaWVudCA9IGNsaWVudDsKKyAgICAgICAgICAgIHRoaXMuaWZhY2UgPSBpZmFjZTsKKyAgICAgICAgICAgIHRoaXMucHJvdG8gPSBwcm90bzsKKyAgICAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CisgICAgICAgICAgICB0aGlzLnR5cGUgPSB0eXBlOworICAgICAgICAgICAgdGhpcy5kb21haW4gPSBkb21haW47CisgICAgICAgICAgICB0aGlzLmFwcm90byA9IGFwcm90bzsKKyAgICAgICAgICAgIHRoaXMuZmxhZ3MgPSBmbGFnczsKKyAgICAgICAgICAgIGNiID0gT25TZXJ2aWNlUmVzb2x2ZXJDYWxsYmFjazsKKyAgICAgICAgfQorCisgICAgICAgIH5TZXJ2aWNlUmVzb2x2ZXIgKCkKKyAgICAgICAgeworICAgICAgICAgICAgRGlzcG9zZSAoKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIERpc3Bvc2UgKCkKKyAgICAgICAgeworICAgICAgICAgICAgU3RvcCAodHJ1ZSk7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHZvaWQgU3RhcnQgKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNsaWVudC5IYW5kbGUgPT0gSW50UHRyLlplcm8gfHwgaGFuZGxlICE9IEludFB0ci5aZXJvIHx8CisgICAgICAgICAgICAgICAgKGZvdW5kTGlzdGVuZXJzLkNvdW50ID09IDAgJiYgdGltZW91dExpc3RlbmVycy5Db3VudCA9PSAwKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGxvY2sgKGNsaWVudCkgeworICAgICAgICAgICAgICAgIGhhbmRsZSA9IGF2YWhpX3NlcnZpY2VfcmVzb2x2ZXJfbmV3IChjbGllbnQuSGFuZGxlLCBpZmFjZSwgcHJvdG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxpdHkuU3RyaW5nVG9CeXRlcyAobmFtZSksIFV0aWxpdHkuU3RyaW5nVG9CeXRlcyAodHlwZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxpdHkuU3RyaW5nVG9CeXRlcyAoZG9tYWluKSwgYXByb3RvLCBmbGFncywgY2IsIEludFB0ci5aZXJvKTsKKworICAgICAgICAgICAgICAgIGlmIChoYW5kbGUgPT0gSW50UHRyLlplcm8pCisgICAgICAgICAgICAgICAgICAgIGNsaWVudC5UaHJvd0Vycm9yICgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSB2b2lkIFN0b3AgKGJvb2wgZm9yY2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjbGllbnQuSGFuZGxlICE9IEludFB0ci5aZXJvICYmIGhhbmRsZSAhPSBJbnRQdHIuWmVybyAmJgorICAgICAgICAgICAgICAgIChmb3JjZSB8fCAoZm91bmRMaXN0ZW5lcnMuQ291bnQgPT0gMCAmJiB0aW1lb3V0TGlzdGVuZXJzLkNvdW50ID09IDApKSkgeworCisgICAgICAgICAgICAgICAgbG9jayAoY2xpZW50KSB7CisgICAgICAgICAgICAgICAgICAgIGF2YWhpX3NlcnZpY2VfcmVzb2x2ZXJfZnJlZSAoaGFuZGxlKTsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlID0gSW50UHRyLlplcm87CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSB2b2lkIE9uU2VydmljZVJlc29sdmVyQ2FsbGJhY2sgKEludFB0ciByZXNvbHZlciwgaW50IGlmYWNlLCBQcm90b2NvbCBwcm90bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc29sdmVyRXZlbnQgcmV2ZW50LCBJbnRQdHIgbmFtZSwgSW50UHRyIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRQdHIgZG9tYWluLCBJbnRQdHIgaG9zdCwgSW50UHRyIGFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSW50MTYgcG9ydCwgSW50UHRyIHR4dCwgTG9va3VwUmVzdWx0RmxhZ3MgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRQdHIgdXNlcmRhdGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIFNlcnZpY2VJbmZvIGluZm87CisgICAgICAgICAgICBpbmZvLk5ldHdvcmtJbnRlcmZhY2UgPSBpZmFjZTsKKyAgICAgICAgICAgIGluZm8uUHJvdG9jb2wgPSBwcm90bzsKKyAgICAgICAgICAgIGluZm8uRG9tYWluID0gVXRpbGl0eS5QdHJUb1N0cmluZyAoZG9tYWluKTsKKyAgICAgICAgICAgIGluZm8uU2VydmljZVR5cGUgPSBVdGlsaXR5LlB0clRvU3RyaW5nICh0eXBlKTsKKyAgICAgICAgICAgIGluZm8uTmFtZSA9IFV0aWxpdHkuUHRyVG9TdHJpbmcgKG5hbWUpOworICAgICAgICAgICAgaW5mby5Ib3N0TmFtZSA9IFV0aWxpdHkuUHRyVG9TdHJpbmcgKGhvc3QpOworICAgICAgICAgICAgaW5mby5BZGRyZXNzID0gVXRpbGl0eS5QdHJUb0FkZHJlc3MgKGFkZHJlc3MpOworICAgICAgICAgICAgaW5mby5Qb3J0ID0gcG9ydDsKKworICAgICAgICAgICAgaWYgKHByb3RvID09IFByb3RvY29sLklQdjYpCisgICAgICAgICAgICAgIGluZm8uQWRkcmVzcy5TY29wZUlkID0gaWZhY2U7CisKKyAgICAgICAgICAgIEFycmF5TGlzdCB0eHRsaXN0ID0gbmV3IEFycmF5TGlzdCAoKTsKKyAgICAgICAgICAgIGZvciAoSW50UHRyIGwgPSB0eHQ7IGwgIT0gSW50UHRyLlplcm87IGwgPSBhdmFoaV9zdHJpbmdfbGlzdF9nZXRfbmV4dCAobCkpIHsKKyAgICAgICAgICAgICAgICBJbnRQdHIgYnVmID0gYXZhaGlfc3RyaW5nX2xpc3RfZ2V0X3RleHQgKGwpOworICAgICAgICAgICAgICAgIGludCBsZW4gPSBhdmFoaV9zdHJpbmdfbGlzdF9nZXRfc2l6ZSAobCk7CisKKyAgICAgICAgICAgICAgICBieXRlW10gdHh0YnVmID0gbmV3IGJ5dGVbbGVuXTsKKyAgICAgICAgICAgICAgICBNYXJzaGFsLkNvcHkgKGJ1ZiwgdHh0YnVmLCAwLCBsZW4pOworICAgICAgICAgICAgICAgIHR4dGxpc3QuQWRkICh0eHRidWYpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpbmZvLlRleHQgPSAoYnl0ZVtdW10pIHR4dGxpc3QuVG9BcnJheSAodHlwZW9mIChieXRlW10pKTsKKyAgICAgICAgICAgIGluZm8uRmxhZ3MgPSBmbGFnczsKKworICAgICAgICAgICAgc3dpdGNoIChyZXZlbnQpIHsKKyAgICAgICAgICAgIGNhc2UgUmVzb2x2ZXJFdmVudC5Gb3VuZDoKKyAgICAgICAgICAgICAgICBjdXJyZW50SW5mbyA9IGluZm87CisKKyAgICAgICAgICAgICAgICBmb3JlYWNoIChTZXJ2aWNlSW5mb0hhbmRsZXIgaGFuZGxlciBpbiBmb3VuZExpc3RlbmVycykKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlciAodGhpcywgbmV3IFNlcnZpY2VJbmZvQXJncyAoaW5mbykpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBSZXNvbHZlckV2ZW50LkZhaWx1cmU6CisgICAgICAgICAgICAgICAgRW1pdEZhaWx1cmUgKGNsaWVudC5MYXN0RXJyb3IpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgTG9va3VwRmxhZ3MgR2V0TG9va3VwRmxhZ3MgKExvb2t1cFJlc3VsdEZsYWdzIHJmbGFncykgeworICAgICAgICAgICAgTG9va3VwRmxhZ3MgcmV0ID0gTG9va3VwRmxhZ3MuTm9uZTsKKworICAgICAgICAgICAgaWYgKChyZmxhZ3MgJiBMb29rdXBSZXN1bHRGbGFncy5NdWx0aWNhc3QpID4gMCkKKyAgICAgICAgICAgICAgICByZXQgfD0gTG9va3VwRmxhZ3MuVXNlTXVsdGljYXN0OworICAgICAgICAgICAgaWYgKChyZmxhZ3MgJiBMb29rdXBSZXN1bHRGbGFncy5XaWRlQXJlYSkgPiAwKQorICAgICAgICAgICAgICAgIHJldCB8PSBMb29rdXBGbGFncy5Vc2VXaWRlQXJlYTsKKworICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9TZXJ2aWNlVHlwZUJyb3dzZXIuY3MgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvU2VydmljZVR5cGVCcm93c2VyLmNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxMzU2ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvU2VydmljZVR5cGVCcm93c2VyLmNzCkBAIC0wLDAgKzEsMTk3IEBACisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKK3VzaW5nIFN5c3RlbTsKK3VzaW5nIFN5c3RlbS5Db2xsZWN0aW9uczsKK3VzaW5nIFN5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2aWNlczsKK3VzaW5nIFN5c3RlbS5UZXh0OworCituYW1lc3BhY2UgQXZhaGkKK3sKKyAgICBpbnRlcm5hbCBkZWxlZ2F0ZSB2b2lkIFNlcnZpY2VUeXBlQnJvd3NlckNhbGxiYWNrIChJbnRQdHIgYnJvd3NlciwgaW50IGlmYWNlLCBQcm90b2NvbCBwcm90bywgQnJvd3NlckV2ZW50IGJldmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRQdHIgdHlwZSwgSW50UHRyIGRvbWFpbiwgTG9va3VwUmVzdWx0RmxhZ3MgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UHRyIHVzZXJkYXRhKTsKKworICAgIHB1YmxpYyBzdHJ1Y3QgU2VydmljZVR5cGVJbmZvCisgICAgeworICAgICAgICBwdWJsaWMgaW50IE5ldHdvcmtJbnRlcmZhY2U7CisgICAgICAgIHB1YmxpYyBQcm90b2NvbCBQcm90b2NvbDsKKyAgICAgICAgcHVibGljIHN0cmluZyBEb21haW47CisgICAgICAgIHB1YmxpYyBzdHJpbmcgU2VydmljZVR5cGU7CisgICAgICAgIHB1YmxpYyBMb29rdXBSZXN1bHRGbGFncyBGbGFnczsKKyAgICB9CisKKyAgICBwdWJsaWMgY2xhc3MgU2VydmljZVR5cGVJbmZvQXJncyA6IEV2ZW50QXJncworICAgIHsKKyAgICAgICAgcHJpdmF0ZSBTZXJ2aWNlVHlwZUluZm8gdHlwZTsKKworICAgICAgICBwdWJsaWMgU2VydmljZVR5cGVJbmZvIFNlcnZpY2VUeXBlCisgICAgICAgIHsKKyAgICAgICAgICAgIGdldCB7IHJldHVybiB0eXBlOyB9CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgU2VydmljZVR5cGVJbmZvQXJncyAoU2VydmljZVR5cGVJbmZvIHR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRoaXMudHlwZSA9IHR5cGU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgZGVsZWdhdGUgdm9pZCBTZXJ2aWNlVHlwZUluZm9IYW5kbGVyIChvYmplY3QgbywgU2VydmljZVR5cGVJbmZvQXJncyBhcmdzKTsKKworICAgIHB1YmxpYyBjbGFzcyBTZXJ2aWNlVHlwZUJyb3dzZXIgOiBCcm93c2VyQmFzZSwgSURpc3Bvc2FibGUKKyAgICB7CisgICAgICAgIHByaXZhdGUgSW50UHRyIGhhbmRsZTsKKyAgICAgICAgcHJpdmF0ZSBBcnJheUxpc3QgaW5mb3MgPSBuZXcgQXJyYXlMaXN0ICgpOworICAgICAgICBwcml2YXRlIENsaWVudCBjbGllbnQ7CisgICAgICAgIHByaXZhdGUgaW50IGlmYWNlOworICAgICAgICBwcml2YXRlIFByb3RvY29sIHByb3RvOworICAgICAgICBwcml2YXRlIHN0cmluZyBkb21haW47CisgICAgICAgIHByaXZhdGUgTG9va3VwRmxhZ3MgZmxhZ3M7CisgICAgICAgIHByaXZhdGUgU2VydmljZVR5cGVCcm93c2VyQ2FsbGJhY2sgY2I7CisKKyAgICAgICAgcHJpdmF0ZSBBcnJheUxpc3QgYWRkTGlzdGVuZXJzID0gbmV3IEFycmF5TGlzdCAoKTsKKyAgICAgICAgcHJpdmF0ZSBBcnJheUxpc3QgcmVtb3ZlTGlzdGVuZXJzID0gbmV3IEFycmF5TGlzdCAoKTsKKworICAgICAgICBbRGxsSW1wb3J0ICgiYXZhaGktY2xpZW50IildCisgICAgICAgIHByaXZhdGUgc3RhdGljIGV4dGVybiBJbnRQdHIgYXZhaGlfc2VydmljZV90eXBlX2Jyb3dzZXJfbmV3IChJbnRQdHIgY2xpZW50LCBpbnQgaWZhY2UsIGludCBwcm90bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVbXSBkb21haW4sIExvb2t1cEZsYWdzIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VydmljZVR5cGVCcm93c2VyQ2FsbGJhY2sgY2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRQdHIgdXNlcmRhdGEpOworCisgICAgICAgIFtEbGxJbXBvcnQgKCJhdmFoaS1jbGllbnQiKV0KKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZXh0ZXJuIHZvaWQgYXZhaGlfc2VydmljZV90eXBlX2Jyb3dzZXJfZnJlZSAoSW50UHRyIGhhbmRsZSk7CisKKyAgICAgICAgcHVibGljIGV2ZW50IFNlcnZpY2VUeXBlSW5mb0hhbmRsZXIgU2VydmljZVR5cGVBZGRlZAorICAgICAgICB7CisgICAgICAgICAgICBhZGQgeworICAgICAgICAgICAgICAgIGFkZExpc3RlbmVycy5BZGQgKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBTdGFydCAoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlbW92ZSB7CisgICAgICAgICAgICAgICAgYWRkTGlzdGVuZXJzLlJlbW92ZSAodmFsdWUpOworICAgICAgICAgICAgICAgIFN0b3AgKGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBldmVudCBTZXJ2aWNlVHlwZUluZm9IYW5kbGVyIFNlcnZpY2VUeXBlUmVtb3ZlZAorICAgICAgICB7CisgICAgICAgICAgICBhZGQgeworICAgICAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVycy5BZGQgKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBTdGFydCAoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlbW92ZSB7CisgICAgICAgICAgICAgICAgcmVtb3ZlTGlzdGVuZXJzLlJlbW92ZSAodmFsdWUpOworICAgICAgICAgICAgICAgIFN0b3AgKGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBTZXJ2aWNlVHlwZUluZm9bXSBTZXJ2aWNlVHlwZXMKKyAgICAgICAgeworICAgICAgICAgICAgZ2V0IHsgcmV0dXJuIChTZXJ2aWNlVHlwZUluZm9bXSkgaW5mb3MuVG9BcnJheSAodHlwZW9mIChTZXJ2aWNlVHlwZUluZm8pKTsgfQorICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFNlcnZpY2VUeXBlQnJvd3NlciAoQ2xpZW50IGNsaWVudCkgOiB0aGlzIChjbGllbnQsIGNsaWVudC5Eb21haW5OYW1lKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgU2VydmljZVR5cGVCcm93c2VyIChDbGllbnQgY2xpZW50LCBzdHJpbmcgZG9tYWluKSA6IHRoaXMgKGNsaWVudCwgLTEsIFByb3RvY29sLlVuc3BlY2lmaWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbiwgTG9va3VwRmxhZ3MuTm9uZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFNlcnZpY2VUeXBlQnJvd3NlciAoQ2xpZW50IGNsaWVudCwgaW50IGlmYWNlLCBQcm90b2NvbCBwcm90bywgc3RyaW5nIGRvbWFpbiwgTG9va3VwRmxhZ3MgZmxhZ3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRoaXMuY2xpZW50ID0gY2xpZW50OworICAgICAgICAgICAgdGhpcy5pZmFjZSA9IGlmYWNlOworICAgICAgICAgICAgdGhpcy5wcm90byA9IHByb3RvOworICAgICAgICAgICAgdGhpcy5kb21haW4gPSBkb21haW47CisgICAgICAgICAgICB0aGlzLmZsYWdzID0gZmxhZ3M7CisgICAgICAgICAgICBjYiA9IE9uU2VydmljZVR5cGVCcm93c2VyQ2FsbGJhY2s7CisgICAgICAgIH0KKworICAgICAgICB+U2VydmljZVR5cGVCcm93c2VyICgpCisgICAgICAgIHsKKyAgICAgICAgICAgIERpc3Bvc2UgKCk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBEaXNwb3NlICgpCisgICAgICAgIHsKKyAgICAgICAgICAgIFN0b3AgKHRydWUpOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSB2b2lkIFN0YXJ0ICgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjbGllbnQuSGFuZGxlID09IEludFB0ci5aZXJvIHx8IGhhbmRsZSAhPSBJbnRQdHIuWmVybyB8fAorICAgICAgICAgICAgICAgIChhZGRMaXN0ZW5lcnMuQ291bnQgPT0gMCAmJiByZW1vdmVMaXN0ZW5lcnMuQ291bnQgPT0gMCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBsb2NrIChjbGllbnQpIHsKKyAgICAgICAgICAgICAgICBoYW5kbGUgPSBhdmFoaV9zZXJ2aWNlX3R5cGVfYnJvd3Nlcl9uZXcgKGNsaWVudC5IYW5kbGUsIGlmYWNlLCAoaW50KSBwcm90bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxpdHkuU3RyaW5nVG9CeXRlcyAoZG9tYWluKSwgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYiwgSW50UHRyLlplcm8pOworCisgICAgICAgICAgICAgICAgaWYgKGhhbmRsZSA9PSBJbnRQdHIuWmVybykKKyAgICAgICAgICAgICAgICAgICAgY2xpZW50LlRocm93RXJyb3IgKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHZvaWQgU3RvcCAoYm9vbCBmb3JjZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNsaWVudC5IYW5kbGUgIT0gSW50UHRyLlplcm8gJiYgaGFuZGxlICE9IEludFB0ci5aZXJvICYmCisgICAgICAgICAgICAgICAgKGZvcmNlIHx8IChhZGRMaXN0ZW5lcnMuQ291bnQgPT0gMCAmJiByZW1vdmVMaXN0ZW5lcnMuQ291bnQgPT0gMCkpKSB7CisKKyAgICAgICAgICAgICAgICBsb2NrIChjbGllbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgYXZhaGlfc2VydmljZV90eXBlX2Jyb3dzZXJfZnJlZSAoaGFuZGxlKTsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlID0gSW50UHRyLlplcm87CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSB2b2lkIE9uU2VydmljZVR5cGVCcm93c2VyQ2FsbGJhY2sgKEludFB0ciBicm93c2VyLCBpbnQgaWZhY2UsIFByb3RvY29sIHByb3RvLCBCcm93c2VyRXZlbnQgYmV2ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UHRyIHR5cGUsIEludFB0ciBkb21haW4sIExvb2t1cFJlc3VsdEZsYWdzIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UHRyIHVzZXJkYXRhKQorICAgICAgICB7CisKKyAgICAgICAgICAgIFNlcnZpY2VUeXBlSW5mbyBpbmZvOworICAgICAgICAgICAgaW5mby5OZXR3b3JrSW50ZXJmYWNlID0gaWZhY2U7CisgICAgICAgICAgICBpbmZvLlByb3RvY29sID0gcHJvdG87CisgICAgICAgICAgICBpbmZvLkRvbWFpbiA9IFV0aWxpdHkuUHRyVG9TdHJpbmcgKGRvbWFpbik7CisgICAgICAgICAgICBpbmZvLlNlcnZpY2VUeXBlID0gVXRpbGl0eS5QdHJUb1N0cmluZyAodHlwZSk7CisgICAgICAgICAgICBpbmZvLkZsYWdzID0gZmxhZ3M7CisKKyAgICAgICAgICAgIHN3aXRjaCAoYmV2ZW50KSB7CisgICAgICAgICAgICBjYXNlIEJyb3dzZXJFdmVudC5BZGRlZDoKKyAgICAgICAgICAgICAgICBpbmZvcy5BZGQgKGluZm8pOworCisgICAgICAgICAgICAgICAgZm9yZWFjaCAoU2VydmljZVR5cGVJbmZvSGFuZGxlciBoYW5kbGVyIGluIGFkZExpc3RlbmVycykKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlciAodGhpcywgbmV3IFNlcnZpY2VUeXBlSW5mb0FyZ3MgKGluZm8pKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQnJvd3NlckV2ZW50LlJlbW92ZWQ6CisgICAgICAgICAgICAgICAgaW5mb3MuUmVtb3ZlIChpbmZvKTsKKworICAgICAgICAgICAgICAgIGZvcmVhY2ggKFNlcnZpY2VUeXBlSW5mb0hhbmRsZXIgaGFuZGxlciBpbiByZW1vdmVMaXN0ZW5lcnMpCisgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIgKHRoaXMsIG5ldyBTZXJ2aWNlVHlwZUluZm9BcmdzIChpbmZvKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEVtaXRCcm93c2VyRXZlbnQgKGJldmVudCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvVXRpbGl0eS5jcyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9VdGlsaXR5LmNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExZDBhNjYKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvVXRpbGl0eS5jcwpAQCAtMCwwICsxLDExMiBAQAorLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCit1c2luZyBTeXN0ZW07Cit1c2luZyBTeXN0ZW0uTmV0OwordXNpbmcgU3lzdGVtLlRleHQ7Cit1c2luZyBTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2VydmljZXM7Cit1c2luZyBNb25vLlVuaXg7Cit1c2luZyBNb25vLlVuaXguTmF0aXZlOworCit1c2luZyBTdGRsaWIgPSBNb25vLlVuaXguTmF0aXZlLlN0ZGxpYjsKKworbmFtZXNwYWNlIEF2YWhpCit7CisgICAgaW50ZXJuYWwgY2xhc3MgVXRpbGl0eQorICAgIHsKKyAgICAgICAgW0RsbEltcG9ydCAoImxpYmMiKV0KKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZXh0ZXJuIGludCBzdHJsZW4gKEludFB0ciBwdHIpOworCisgICAgICAgIFtEbGxJbXBvcnQgKCJhdmFoaS1jb21tb24iKV0KKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZXh0ZXJuIEludFB0ciBhdmFoaV9hZGRyZXNzX3NucHJpbnQgKEludFB0ciBidWYsIGludCBzaXplLCBJbnRQdHIgYWRkcmVzcyk7CisKKyAgICAgICAgW0RsbEltcG9ydCAoImF2YWhpLWNvbW1vbiIpXQorICAgICAgICBwcml2YXRlIHN0YXRpYyBleHRlcm4gSW50UHRyIGF2YWhpX2FkZHJlc3NfcGFyc2UgKEludFB0ciBzdHIsIFByb3RvY29sIHByb3RvLCBJbnRQdHIgcmV0KTsKKworICAgICAgICBwdWJsaWMgc3RhdGljIHN0cmluZyBQdHJUb1N0cmluZyAoSW50UHRyIHB0cikKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHB0ciA9PSBJbnRQdHIuWmVybykKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKworICAgICAgICAgICAgaW50IGxlbiA9IHN0cmxlbiAocHRyKTsKKyAgICAgICAgICAgIGJ5dGVbXSBieXRlcyA9IG5ldyBieXRlW2xlbl07CisgICAgICAgICAgICBNYXJzaGFsLkNvcHkgKHB0ciwgYnl0ZXMsIDAsIGxlbik7CisgICAgICAgICAgICByZXR1cm4gRW5jb2RpbmcuVVRGOC5HZXRTdHJpbmcgKGJ5dGVzKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBzdGF0aWMgc3RyaW5nIFB0clRvU3RyaW5nRnJlZSAoSW50UHRyIHB0cikKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHB0ciA9PSBJbnRQdHIuWmVybykKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKworICAgICAgICAgICAgc3RyaW5nIHJldCA9IFB0clRvU3RyaW5nIChwdHIpOworICAgICAgICAgICAgRnJlZSAocHRyKTsKKyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgc3RhdGljIGJ5dGVbXSBTdHJpbmdUb0J5dGVzIChzdHJpbmcgc3RyKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoc3RyID09IG51bGwpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisKKyAgICAgICAgICAgIHJldHVybiBFbmNvZGluZy5VVEY4LkdldEJ5dGVzIChzdHIgKyAiXDAiKTsgLy8gbGFtZS4KKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgc3RhdGljIEludFB0ciBTdHJpbmdUb1B0ciAoc3RyaW5nIHN0cikKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHN0ciA9PSBudWxsKQorICAgICAgICAgICAgICAgIHJldHVybiBJbnRQdHIuWmVybzsKKworICAgICAgICAgICAgYnl0ZVtdIGJ5dGVzID0gVXRpbGl0eS5TdHJpbmdUb0J5dGVzIChzdHIpOworICAgICAgICAgICAgSW50UHRyIGJ1ZiA9IFN0ZGxpYi5tYWxsb2MgKCh1aW50KSBieXRlcy5MZW5ndGggKyAxKTsKKyAgICAgICAgICAgIE1hcnNoYWwuQ29weSAoYnl0ZXMsIDAsIGJ1ZiwgYnl0ZXMuTGVuZ3RoKTsKKyAgICAgICAgICAgIE1hcnNoYWwuV3JpdGVCeXRlIChidWYsIGJ5dGVzLkxlbmd0aCwgMCk7CisgICAgICAgICAgICByZXR1cm4gYnVmOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIEZyZWUgKEludFB0ciBwdHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIFN0ZGxpYi5mcmVlIChwdHIpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHN0YXRpYyBJbnRQdHIgQWRkcmVzc1RvUHRyIChJUEFkZHJlc3MgYWRkcmVzcykKKyAgICAgICAgeworICAgICAgICAgICAgSW50UHRyIHN0cmFkZHIgPSBVdGlsaXR5LlN0cmluZ1RvUHRyIChhZGRyZXNzLlRvU3RyaW5nICgpKTsKKyAgICAgICAgICAgIEludFB0ciBhZGRyUHRyID0gU3RkbGliLm1hbGxvYyAoMzIpOworICAgICAgICAgICAgYXZhaGlfYWRkcmVzc19wYXJzZSAoc3RyYWRkciwgUHJvdG9jb2wuVW5zcGVjaWZpZWQsIGFkZHJQdHIpOworICAgICAgICAgICAgVXRpbGl0eS5GcmVlIChzdHJhZGRyKTsKKworICAgICAgICAgICAgcmV0dXJuIGFkZHJQdHI7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgc3RhdGljIElQQWRkcmVzcyBQdHJUb0FkZHJlc3MgKEludFB0ciBwdHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIElQQWRkcmVzcyBhZGRyZXNzID0gbnVsbDsKKworICAgICAgICAgICAgaWYgKHB0ciAhPSBJbnRQdHIuWmVybykgeworICAgICAgICAgICAgICAgIEludFB0ciBidWYgPSBTdGRsaWIubWFsbG9jICgyNTYpOworICAgICAgICAgICAgICAgIEludFB0ciBhZGRyUHRyID0gYXZhaGlfYWRkcmVzc19zbnByaW50IChidWYsIDI1NiwgcHRyKTsKKyAgICAgICAgICAgICAgICBhZGRyZXNzID0gSVBBZGRyZXNzLlBhcnNlIChVdGlsaXR5LlB0clRvU3RyaW5nIChhZGRyUHRyKSk7CisgICAgICAgICAgICAgICAgVXRpbGl0eS5GcmVlIChhZGRyUHRyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGFkZHJlc3M7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvYXZhaGktc2hhcnAtZG9jcy5zb3VyY2UgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvYXZhaGktc2hhcnAtZG9jcy5zb3VyY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNiM2M3NQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9hdmFoaS1zaGFycC1kb2NzLnNvdXJjZQpAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPG1vbm9kb2M+CisgIDxzb3VyY2UgcHJvdmlkZXI9ImVjbWEiIGJhc2VmaWxlPSJhdmFoaS1zaGFycC1kb2NzIiBwYXRoPSJ2YXJpb3VzIiB0aXRsZT0iQXZhaGkiIC8+Cis8L21vbm9kb2M+CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvYXZhaGktc2hhcnAuZGxsLmNvbmZpZy5pbiBiL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9hdmFoaS1zaGFycC5kbGwuY29uZmlnLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViYWU1OGYKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvYXZhaGktc2hhcnAuZGxsLmNvbmZpZy5pbgpAQCAtMCwwICsxLDUgQEAKKzxjb25maWd1cmF0aW9uPgorICA8ZGxsbWFwIGRsbD0iYXZhaGktY2xpZW50IiB0YXJnZXQ9IkBDTElFTlRfRExOQU1FQCIvPgorICA8ZGxsbWFwIGRsbD0iYXZhaGktY29tbW9uIiB0YXJnZXQ9IkBDT01NT05fRExOQU1FQCIvPgorICA8ZGxsbWFwIGRsbD0iYXZhaGktZ2xpYiIgdGFyZ2V0PSJAR0xJQl9ETE5BTUVAIi8+Cis8L2NvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvYXZhaGkuc25rIGIvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL2F2YWhpLnNuawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGMyM2JjCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL2F2YWhpLnNuawpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvZW4vQXZhaGkueG1sIGIvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL2VuL0F2YWhpLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzM5MDEzCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL2VuL0F2YWhpLnhtbApAQCAtMCwwICsxLDYgQEAKKzxOYW1lc3BhY2UgTmFtZT0iQXZhaGkiPgorICA8RG9jcz4KKyAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICA8L0RvY3M+Cis8L05hbWVzcGFjZT4KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9lbi9BdmFoaS9BZGRyZXNzUmVzb2x2ZXIueG1sIGIvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL2VuL0F2YWhpL0FkZHJlc3NSZXNvbHZlci54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY0ZTUwNQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9lbi9BdmFoaS9BZGRyZXNzUmVzb2x2ZXIueG1sCkBAIC0wLDAgKzEsMTEzIEBACis8VHlwZSBOYW1lPSJBZGRyZXNzUmVzb2x2ZXIiIEZ1bGxOYW1lPSJBdmFoaS5BZGRyZXNzUmVzb2x2ZXIiPgorICA8VHlwZVNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgY2xhc3MgQWRkcmVzc1Jlc29sdmVyIDogQXZhaGkuUmVzb2x2ZXJCYXNlLCBTeXN0ZW0uSURpc3Bvc2FibGUiIC8+CisgIDxBc3NlbWJseUluZm8+CisgICAgPEFzc2VtYmx5TmFtZT5hdmFoaS1zaGFycDwvQXNzZW1ibHlOYW1lPgorICAgIDxBc3NlbWJseVZlcnNpb24+MS4wLjAuMDwvQXNzZW1ibHlWZXJzaW9uPgorICA8L0Fzc2VtYmx5SW5mbz4KKyAgPEJhc2U+CisgICAgPEJhc2VUeXBlTmFtZT5BdmFoaS5SZXNvbHZlckJhc2U8L0Jhc2VUeXBlTmFtZT4KKyAgPC9CYXNlPgorICA8SW50ZXJmYWNlcz4KKyAgICA8SW50ZXJmYWNlPgorICAgICAgPEludGVyZmFjZU5hbWU+U3lzdGVtLklEaXNwb3NhYmxlPC9JbnRlcmZhY2VOYW1lPgorICAgIDwvSW50ZXJmYWNlPgorICA8L0ludGVyZmFjZXM+CisgIDxNZW1iZXJzPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iLmN0b3IiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgQWRkcmVzc1Jlc29sdmVyIChBdmFoaS5DbGllbnQgY2xpZW50LCBTeXN0ZW0uTmV0LklQQWRkcmVzcyBhZGRyZXNzKTsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5Db25zdHJ1Y3RvcjwvTWVtYmVyVHlwZT4KKyAgICAgIDxQYXJhbWV0ZXJzPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9ImNsaWVudCIgVHlwZT0iQXZhaGkuQ2xpZW50IiAvPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9ImFkZHJlc3MiIFR5cGU9IlN5c3RlbS5OZXQuSVBBZGRyZXNzIiAvPgorICAgICAgPC9QYXJhbWV0ZXJzPgorICAgICAgPERvY3M+CisgICAgICAgIDxwYXJhbSBuYW1lPSJjbGllbnQiPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgICAgIDxwYXJhbSBuYW1lPSJhZGRyZXNzIj5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IkZvdW5kIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIGV2ZW50IEF2YWhpLkhvc3RBZGRyZXNzSGFuZGxlciBGb3VuZDsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5FdmVudDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+QXZhaGkuSG9zdEFkZHJlc3NIYW5kbGVyPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IlRpbWVvdXQiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgZXZlbnQgRXZlbnRIYW5kbGVyIFRpbWVvdXQ7IiAvPgorICAgICAgPE1lbWJlclR5cGU+RXZlbnQ8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPlN5c3RlbS5FdmVudEhhbmRsZXI8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iRGlzcG9zZSI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyB2b2lkIERpc3Bvc2UgKCk7IiAvPgorICAgICAgPE1lbWJlclR5cGU+TWV0aG9kPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5TeXN0ZW0uVm9pZDwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8UGFyYW1ldGVycyAvPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iQWRkcmVzcyI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBTeXN0ZW0uTmV0LklQQWRkcmVzcyBBZGRyZXNzIHsgZ2V0OyB9OyIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPlByb3BlcnR5PC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5TeXN0ZW0uTmV0LklQQWRkcmVzczwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8dmFsdWU+VG8gYmUgYWRkZWQuPC92YWx1ZT4KKyAgICAgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iSG9zdE5hbWUiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgc3RyaW5nIEhvc3ROYW1lIHsgZ2V0OyB9OyIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPlByb3BlcnR5PC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5TeXN0ZW0uU3RyaW5nPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICAgIDx2YWx1ZT5UbyBiZSBhZGRlZC48L3ZhbHVlPgorICAgICAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSIuY3RvciI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBBZGRyZXNzUmVzb2x2ZXIgKEF2YWhpLkNsaWVudCBjbGllbnQsIGludCBpZmFjZSwgQXZhaGkuUHJvdG9jb2wgcHJvdG8sIFN5c3RlbS5OZXQuSVBBZGRyZXNzIGFkZHJlc3MsIEF2YWhpLkxvb2t1cEZsYWdzIGZsYWdzKTsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5Db25zdHJ1Y3RvcjwvTWVtYmVyVHlwZT4KKyAgICAgIDxQYXJhbWV0ZXJzPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9ImNsaWVudCIgVHlwZT0iQXZhaGkuQ2xpZW50IiAvPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9ImlmYWNlIiBUeXBlPSJTeXN0ZW0uSW50MzIiIC8+CisgICAgICAgIDxQYXJhbWV0ZXIgTmFtZT0icHJvdG8iIFR5cGU9IkF2YWhpLlByb3RvY29sIiAvPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9ImFkZHJlc3MiIFR5cGU9IlN5c3RlbS5OZXQuSVBBZGRyZXNzIiAvPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9ImZsYWdzIiBUeXBlPSJBdmFoaS5Mb29rdXBGbGFncyIgLz4KKyAgICAgIDwvUGFyYW1ldGVycz4KKyAgICAgIDxEb2NzPgorICAgICAgICA8cGFyYW0gbmFtZT0iY2xpZW50Ij5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8cGFyYW0gbmFtZT0iaWZhY2UiPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgICAgIDxwYXJhbSBuYW1lPSJwcm90byI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImFkZHJlc3MiPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgICAgIDxwYXJhbSBuYW1lPSJmbGFncyI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgIDwvTWVtYmVycz4KKyAgPERvY3M+CisgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgPC9Eb2NzPgorPC9UeXBlPgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL2VuL0F2YWhpL0Jyb3dzZXJCYXNlLnhtbCBiL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9lbi9BdmFoaS9Ccm93c2VyQmFzZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE2ZDJhZAotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9lbi9BdmFoaS9Ccm93c2VyQmFzZS54bWwKQEAgLTAsMCArMSw1OSBAQAorPFR5cGUgTmFtZT0iQnJvd3NlckJhc2UiIEZ1bGxOYW1lPSJBdmFoaS5Ccm93c2VyQmFzZSI+CisgIDxUeXBlU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBhYnN0cmFjdCBjbGFzcyBCcm93c2VyQmFzZSIgLz4KKyAgPEFzc2VtYmx5SW5mbz4KKyAgICA8QXNzZW1ibHlOYW1lPmF2YWhpLXNoYXJwPC9Bc3NlbWJseU5hbWU+CisgICAgPEFzc2VtYmx5VmVyc2lvbj4xLjAuMC4wPC9Bc3NlbWJseVZlcnNpb24+CisgIDwvQXNzZW1ibHlJbmZvPgorICA8QmFzZT4KKyAgICA8QmFzZVR5cGVOYW1lPlN5c3RlbS5PYmplY3Q8L0Jhc2VUeXBlTmFtZT4KKyAgPC9CYXNlPgorICA8SW50ZXJmYWNlcyAvPgorICA8TWVtYmVycz4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9Ii5jdG9yIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHJvdGVjdGVkIEJyb3dzZXJCYXNlICgpOyIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkNvbnN0cnVjdG9yPC9NZW1iZXJUeXBlPgorICAgICAgPFBhcmFtZXRlcnMgLz4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IkNhY2hlRXhoYXVzdGVkIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIGV2ZW50IEV2ZW50SGFuZGxlciBDYWNoZUV4aGF1c3RlZDsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5FdmVudDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+U3lzdGVtLkV2ZW50SGFuZGxlcjwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJBbGxGb3JOb3ciPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgZXZlbnQgRXZlbnRIYW5kbGVyIEFsbEZvck5vdzsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5FdmVudDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+U3lzdGVtLkV2ZW50SGFuZGxlcjwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJGYWlsZWQiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgZXZlbnQgRXZlbnRIYW5kbGVyIEZhaWxlZDsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5FdmVudDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+U3lzdGVtLkV2ZW50SGFuZGxlcjwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgIDwvTWVtYmVycz4KKyAgPERvY3M+CisgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgPC9Eb2NzPgorPC9UeXBlPgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL2VuL0F2YWhpL0NsaWVudC54bWwgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvZW4vQXZhaGkvQ2xpZW50LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWJlY2Y3Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL2VuL0F2YWhpL0NsaWVudC54bWwKQEAgLTAsMCArMSwxNzggQEAKKzxUeXBlIE5hbWU9IkNsaWVudCIgRnVsbE5hbWU9IkF2YWhpLkNsaWVudCI+CisgIDxUeXBlU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBjbGFzcyBDbGllbnQgOiBTeXN0ZW0uSURpc3Bvc2FibGUiIC8+CisgIDxBc3NlbWJseUluZm8+CisgICAgPEFzc2VtYmx5TmFtZT5hdmFoaS1zaGFycDwvQXNzZW1ibHlOYW1lPgorICAgIDxBc3NlbWJseVZlcnNpb24+MS4wLjAuMDwvQXNzZW1ibHlWZXJzaW9uPgorICA8L0Fzc2VtYmx5SW5mbz4KKyAgPEJhc2U+CisgICAgPEJhc2VUeXBlTmFtZT5TeXN0ZW0uT2JqZWN0PC9CYXNlVHlwZU5hbWU+CisgIDwvQmFzZT4KKyAgPEludGVyZmFjZXM+CisgICAgPEludGVyZmFjZT4KKyAgICAgIDxJbnRlcmZhY2VOYW1lPlN5c3RlbS5JRGlzcG9zYWJsZTwvSW50ZXJmYWNlTmFtZT4KKyAgICA8L0ludGVyZmFjZT4KKyAgPC9JbnRlcmZhY2VzPgorICA8TWVtYmVycz4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9Ii5jdG9yIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIENsaWVudCAoKTsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5Db25zdHJ1Y3RvcjwvTWVtYmVyVHlwZT4KKyAgICAgIDxQYXJhbWV0ZXJzIC8+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJTdGF0ZUNoYW5nZWQiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgZXZlbnQgQXZhaGkuQ2xpZW50U3RhdGVIYW5kbGVyIFN0YXRlQ2hhbmdlZDsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5FdmVudDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+QXZhaGkuQ2xpZW50U3RhdGVIYW5kbGVyPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IkRpc3Bvc2UiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgdm9pZCBEaXNwb3NlICgpOyIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPk1ldGhvZDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+U3lzdGVtLlZvaWQ8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPFBhcmFtZXRlcnMgLz4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IlZlcnNpb24iPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgc3RyaW5nIFZlcnNpb24geyBnZXQ7IH07IiAvPgorICAgICAgPE1lbWJlclR5cGU+UHJvcGVydHk8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPlN5c3RlbS5TdHJpbmc8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgICAgPHZhbHVlPlRvIGJlIGFkZGVkLjwvdmFsdWU+CisgICAgICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9Ikhvc3ROYW1lIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIHN0cmluZyBIb3N0TmFtZSB7IGdldDsgfTsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5Qcm9wZXJ0eTwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+U3lzdGVtLlN0cmluZzwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8dmFsdWU+VG8gYmUgYWRkZWQuPC92YWx1ZT4KKyAgICAgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iRG9tYWluTmFtZSI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBzdHJpbmcgRG9tYWluTmFtZSB7IGdldDsgfTsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5Qcm9wZXJ0eTwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+U3lzdGVtLlN0cmluZzwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8dmFsdWU+VG8gYmUgYWRkZWQuPC92YWx1ZT4KKyAgICAgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iSG9zdE5hbWVGcWRuIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIHN0cmluZyBIb3N0TmFtZUZxZG4geyBnZXQ7IH07IiAvPgorICAgICAgPE1lbWJlclR5cGU+UHJvcGVydHk8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPlN5c3RlbS5TdHJpbmc8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgICAgPHZhbHVlPlRvIGJlIGFkZGVkLjwvdmFsdWU+CisgICAgICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IlN0YXRlIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIEF2YWhpLkNsaWVudFN0YXRlIFN0YXRlIHsgZ2V0OyB9OyIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPlByb3BlcnR5PC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5BdmFoaS5DbGllbnRTdGF0ZTwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8dmFsdWU+VG8gYmUgYWRkZWQuPC92YWx1ZT4KKyAgICAgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iTG9jYWxTZXJ2aWNlQ29va2llIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIHVpbnQgTG9jYWxTZXJ2aWNlQ29va2llIHsgZ2V0OyB9OyIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPlByb3BlcnR5PC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5TeXN0ZW0uVUludDMyPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICAgIDx2YWx1ZT5UbyBiZSBhZGRlZC48L3ZhbHVlPgorICAgICAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSIuY3RvciI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBDbGllbnQgKEF2YWhpLkNsaWVudEZsYWdzIGZsYWdzKTsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5Db25zdHJ1Y3RvcjwvTWVtYmVyVHlwZT4KKyAgICAgIDxQYXJhbWV0ZXJzPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9ImZsYWdzIiBUeXBlPSJBdmFoaS5DbGllbnRGbGFncyIgLz4KKyAgICAgIDwvUGFyYW1ldGVycz4KKyAgICAgIDxEb2NzPgorICAgICAgICA8cGFyYW0gbmFtZT0iZmxhZ3MiPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iSm9pblNlcnZpY2VOYW1lIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIHN0YXRpYyBzdHJpbmcgSm9pblNlcnZpY2VOYW1lIChzdHJpbmcgbmFtZSwgc3RyaW5nIHR5cGUsIHN0cmluZyBkb21haW4pOyIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPk1ldGhvZDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+U3lzdGVtLlN0cmluZzwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8UGFyYW1ldGVycz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJuYW1lIiBUeXBlPSJTeXN0ZW0uU3RyaW5nIiAvPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9InR5cGUiIFR5cGU9IlN5c3RlbS5TdHJpbmciIC8+CisgICAgICAgIDxQYXJhbWV0ZXIgTmFtZT0iZG9tYWluIiBUeXBlPSJTeXN0ZW0uU3RyaW5nIiAvPgorICAgICAgPC9QYXJhbWV0ZXJzPgorICAgICAgPERvY3M+CisgICAgICAgIDxwYXJhbSBuYW1lPSJuYW1lIj5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8cGFyYW0gbmFtZT0idHlwZSI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImRvbWFpbiI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8cmV0dXJucz5UbyBiZSBhZGRlZC48L3JldHVybnM+CisgICAgICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IlNwbGl0U2VydmljZU5hbWUiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgc3RhdGljIHZvaWQgU3BsaXRTZXJ2aWNlTmFtZSAoc3RyaW5nIHNlcnZpY2UsIG91dCBzdHJpbmcgbmFtZSwgb3V0IHN0cmluZyB0eXBlLCBvdXQgc3RyaW5nIGRvbWFpbik7IiAvPgorICAgICAgPE1lbWJlclR5cGU+TWV0aG9kPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5TeXN0ZW0uVm9pZDwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8UGFyYW1ldGVycz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJzZXJ2aWNlIiBUeXBlPSJTeXN0ZW0uU3RyaW5nIiAvPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9Im5hbWUiIFR5cGU9IlN5c3RlbS5TdHJpbmcmYW1wOyIgUmVmVHlwZT0ib3V0IiAvPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9InR5cGUiIFR5cGU9IlN5c3RlbS5TdHJpbmcmYW1wOyIgUmVmVHlwZT0ib3V0IiAvPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9ImRvbWFpbiIgVHlwZT0iU3lzdGVtLlN0cmluZyZhbXA7IiBSZWZUeXBlPSJvdXQiIC8+CisgICAgICA8L1BhcmFtZXRlcnM+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InNlcnZpY2UiPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgICAgIDxwYXJhbSBuYW1lPSJuYW1lIj5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8cGFyYW0gbmFtZT0idHlwZSI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImRvbWFpbiI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgIDwvTWVtYmVycz4KKyAgPERvY3M+CisgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgPC9Eb2NzPgorPC9UeXBlPgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL2VuL0F2YWhpL0NsaWVudEV4Y2VwdGlvbi54bWwgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvZW4vQXZhaGkvQ2xpZW50RXhjZXB0aW9uLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjgzMTliCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL2VuL0F2YWhpL0NsaWVudEV4Y2VwdGlvbi54bWwKQEAgLTAsMCArMSwyOSBAQAorPFR5cGUgTmFtZT0iQ2xpZW50RXhjZXB0aW9uIiBGdWxsTmFtZT0iQXZhaGkuQ2xpZW50RXhjZXB0aW9uIj4KKyAgPFR5cGVTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIGNsYXNzIENsaWVudEV4Y2VwdGlvbiA6IFN5c3RlbS5BcHBsaWNhdGlvbkV4Y2VwdGlvbiIgLz4KKyAgPEFzc2VtYmx5SW5mbz4KKyAgICA8QXNzZW1ibHlOYW1lPmF2YWhpLXNoYXJwPC9Bc3NlbWJseU5hbWU+CisgICAgPEFzc2VtYmx5VmVyc2lvbj4xLjAuMC4wPC9Bc3NlbWJseVZlcnNpb24+CisgIDwvQXNzZW1ibHlJbmZvPgorICA8QmFzZT4KKyAgICA8QmFzZVR5cGVOYW1lPlN5c3RlbS5BcHBsaWNhdGlvbkV4Y2VwdGlvbjwvQmFzZVR5cGVOYW1lPgorICA8L0Jhc2U+CisgIDxJbnRlcmZhY2VzIC8+CisgIDxNZW1iZXJzPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iRXJyb3JDb2RlIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIEF2YWhpLkVycm9yQ29kZSBFcnJvckNvZGUgeyBnZXQ7IH07IiAvPgorICAgICAgPE1lbWJlclR5cGU+UHJvcGVydHk8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPkF2YWhpLkVycm9yQ29kZTwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8dmFsdWU+VG8gYmUgYWRkZWQuPC92YWx1ZT4KKyAgICAgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICA8L01lbWJlcnM+CisgIDxEb2NzPgorICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgIDwvRG9jcz4KKzwvVHlwZT4KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9lbi9BdmFoaS9DbGllbnRGbGFncy54bWwgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvZW4vQXZhaGkvQ2xpZW50RmxhZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0ZWEyOTEKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvZW4vQXZhaGkvQ2xpZW50RmxhZ3MueG1sCkBAIC0wLDAgKzEsNTEgQEAKKzxUeXBlIE5hbWU9IkNsaWVudEZsYWdzIiBGdWxsTmFtZT0iQXZhaGkuQ2xpZW50RmxhZ3MiPgorICA8VHlwZVNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgZW51bSBDbGllbnRGbGFncyIgLz4KKyAgPEFzc2VtYmx5SW5mbz4KKyAgICA8QXNzZW1ibHlOYW1lPmF2YWhpLXNoYXJwPC9Bc3NlbWJseU5hbWU+CisgICAgPEFzc2VtYmx5VmVyc2lvbj4xLjAuMC4wPC9Bc3NlbWJseVZlcnNpb24+CisgIDwvQXNzZW1ibHlJbmZvPgorICA8QmFzZT4KKyAgICA8QmFzZVR5cGVOYW1lPlN5c3RlbS5FbnVtPC9CYXNlVHlwZU5hbWU+CisgIDwvQmFzZT4KKyAgPEF0dHJpYnV0ZXM+CisgICAgPEF0dHJpYnV0ZT4KKyAgICAgIDxBdHRyaWJ1dGVOYW1lPlN5c3RlbS5GbGFnczwvQXR0cmlidXRlTmFtZT4KKyAgICA8L0F0dHJpYnV0ZT4KKyAgPC9BdHRyaWJ1dGVzPgorICA8TWVtYmVycz4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9Ik5vRmFpbCI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9Ik5vRmFpbCIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkZpZWxkPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5BdmFoaS5DbGllbnRGbGFnczwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iTm9uZSI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9Ik5vbmUiIC8+CisgICAgICA8TWVtYmVyVHlwZT5GaWVsZDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+QXZhaGkuQ2xpZW50RmxhZ3M8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9Iklnbm9yZVVzZXJDb25maWciPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJJZ25vcmVVc2VyQ29uZmlnIiAvPgorICAgICAgPE1lbWJlclR5cGU+RmllbGQ8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPkF2YWhpLkNsaWVudEZsYWdzPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgIDwvTWVtYmVycz4KKyAgPERvY3M+CisgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgPC9Eb2NzPgorPC9UeXBlPgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL2VuL0F2YWhpL0NsaWVudFN0YXRlLnhtbCBiL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9lbi9BdmFoaS9DbGllbnRTdGF0ZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIwYTAyYgotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9lbi9BdmFoaS9DbGllbnRTdGF0ZS54bWwKQEAgLTAsMCArMSw2NiBAQAorPFR5cGUgTmFtZT0iQ2xpZW50U3RhdGUiIEZ1bGxOYW1lPSJBdmFoaS5DbGllbnRTdGF0ZSI+CisgIDxUeXBlU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBlbnVtIENsaWVudFN0YXRlIiAvPgorICA8QXNzZW1ibHlJbmZvPgorICAgIDxBc3NlbWJseU5hbWU+YXZhaGktc2hhcnA8L0Fzc2VtYmx5TmFtZT4KKyAgICA8QXNzZW1ibHlWZXJzaW9uPjEuMC4wLjA8L0Fzc2VtYmx5VmVyc2lvbj4KKyAgPC9Bc3NlbWJseUluZm8+CisgIDxCYXNlPgorICAgIDxCYXNlVHlwZU5hbWU+U3lzdGVtLkVudW08L0Jhc2VUeXBlTmFtZT4KKyAgPC9CYXNlPgorICA8TWVtYmVycz4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IkNvbGxpc2lvbiI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9IkNvbGxpc2lvbiIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkZpZWxkPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5BdmFoaS5DbGllbnRTdGF0ZTwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iUmVnaXN0ZXJpbmciPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJSZWdpc3RlcmluZyIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkZpZWxkPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5BdmFoaS5DbGllbnRTdGF0ZTwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iUnVubmluZyI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9IlJ1bm5pbmciIC8+CisgICAgICA8TWVtYmVyVHlwZT5GaWVsZDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+QXZhaGkuQ2xpZW50U3RhdGU8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IkNvbm5lY3RpbmciPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJDb25uZWN0aW5nIiAvPgorICAgICAgPE1lbWJlclR5cGU+RmllbGQ8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPkF2YWhpLkNsaWVudFN0YXRlPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJGYWlsdXJlIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0iRmFpbHVyZSIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkZpZWxkPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5BdmFoaS5DbGllbnRTdGF0ZTwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICA8L01lbWJlcnM+CisgIDxEb2NzPgorICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgIDwvRG9jcz4KKzwvVHlwZT4KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9lbi9BdmFoaS9DbGllbnRTdGF0ZUFyZ3MueG1sIGIvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL2VuL0F2YWhpL0NsaWVudFN0YXRlQXJncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVkYTExZAotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9lbi9BdmFoaS9DbGllbnRTdGF0ZUFyZ3MueG1sCkBAIC0wLDAgKzEsNDEgQEAKKzxUeXBlIE5hbWU9IkNsaWVudFN0YXRlQXJncyIgRnVsbE5hbWU9IkF2YWhpLkNsaWVudFN0YXRlQXJncyI+CisgIDxUeXBlU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBjbGFzcyBDbGllbnRTdGF0ZUFyZ3MgOiBTeXN0ZW0uRXZlbnRBcmdzIiAvPgorICA8QXNzZW1ibHlJbmZvPgorICAgIDxBc3NlbWJseU5hbWU+YXZhaGktc2hhcnA8L0Fzc2VtYmx5TmFtZT4KKyAgICA8QXNzZW1ibHlWZXJzaW9uPjEuMC4wLjA8L0Fzc2VtYmx5VmVyc2lvbj4KKyAgPC9Bc3NlbWJseUluZm8+CisgIDxCYXNlPgorICAgIDxCYXNlVHlwZU5hbWU+U3lzdGVtLkV2ZW50QXJnczwvQmFzZVR5cGVOYW1lPgorICA8L0Jhc2U+CisgIDxJbnRlcmZhY2VzIC8+CisgIDxNZW1iZXJzPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iLmN0b3IiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgQ2xpZW50U3RhdGVBcmdzIChBdmFoaS5DbGllbnRTdGF0ZSBzdGF0ZSk7IiAvPgorICAgICAgPE1lbWJlclR5cGU+Q29uc3RydWN0b3I8L01lbWJlclR5cGU+CisgICAgICA8UGFyYW1ldGVycz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJzdGF0ZSIgVHlwZT0iQXZhaGkuQ2xpZW50U3RhdGUiIC8+CisgICAgICA8L1BhcmFtZXRlcnM+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InN0YXRlIj5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IlN0YXRlIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIEF2YWhpLkNsaWVudFN0YXRlIFN0YXRlIHsgZ2V0OyB9OyIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPlByb3BlcnR5PC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5BdmFoaS5DbGllbnRTdGF0ZTwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8dmFsdWU+VG8gYmUgYWRkZWQuPC92YWx1ZT4KKyAgICAgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICA8L01lbWJlcnM+CisgIDxEb2NzPgorICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgIDwvRG9jcz4KKzwvVHlwZT4KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9lbi9BdmFoaS9DbGllbnRTdGF0ZUhhbmRsZXIueG1sIGIvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL2VuL0F2YWhpL0NsaWVudFN0YXRlSGFuZGxlci54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU3Njk3NQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9lbi9BdmFoaS9DbGllbnRTdGF0ZUhhbmRsZXIueG1sCkBAIC0wLDAgKzEsMjMgQEAKKzxUeXBlIE5hbWU9IkNsaWVudFN0YXRlSGFuZGxlciIgRnVsbE5hbWU9IkF2YWhpLkNsaWVudFN0YXRlSGFuZGxlciI+CisgIDxUeXBlU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBkZWxlZ2F0ZSB2b2lkIENsaWVudFN0YXRlSGFuZGxlcihvYmplY3QgbywgQXZhaGkuQ2xpZW50U3RhdGVBcmdzIHN0YXRlKTsiIC8+CisgIDxBc3NlbWJseUluZm8+CisgICAgPEFzc2VtYmx5TmFtZT5hdmFoaS1zaGFycDwvQXNzZW1ibHlOYW1lPgorICAgIDxBc3NlbWJseVZlcnNpb24+MS4wLjAuMDwvQXNzZW1ibHlWZXJzaW9uPgorICA8L0Fzc2VtYmx5SW5mbz4KKyAgPEJhc2U+CisgICAgPEJhc2VUeXBlTmFtZT5TeXN0ZW0uRGVsZWdhdGU8L0Jhc2VUeXBlTmFtZT4KKyAgPC9CYXNlPgorICA8UGFyYW1ldGVycz4KKyAgICA8UGFyYW1ldGVyIE5hbWU9Im8iIFR5cGU9IlN5c3RlbS5PYmplY3QiIC8+CisgICAgPFBhcmFtZXRlciBOYW1lPSJzdGF0ZSIgVHlwZT0iQXZhaGkuQ2xpZW50U3RhdGVBcmdzIiAvPgorICA8L1BhcmFtZXRlcnM+CisgIDxSZXR1cm5WYWx1ZT4KKyAgICA8UmV0dXJuVHlwZT5TeXN0ZW0uVm9pZDwvUmV0dXJuVHlwZT4KKyAgPC9SZXR1cm5WYWx1ZT4KKyAgPERvY3M+CisgICAgPHBhcmFtIG5hbWU9Im8iPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgPHBhcmFtIG5hbWU9InN0YXRlIj5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgIDwvRG9jcz4KKzwvVHlwZT4KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9lbi9BdmFoaS9Eb21haW5Ccm93c2VyLnhtbCBiL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9lbi9BdmFoaS9Eb21haW5Ccm93c2VyLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDUzNmUwCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL2VuL0F2YWhpL0RvbWFpbkJyb3dzZXIueG1sCkBAIC0wLDAgKzEsMTAxIEBACis8VHlwZSBOYW1lPSJEb21haW5Ccm93c2VyIiBGdWxsTmFtZT0iQXZhaGkuRG9tYWluQnJvd3NlciI+CisgIDxUeXBlU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBjbGFzcyBEb21haW5Ccm93c2VyIDogQXZhaGkuQnJvd3NlckJhc2UsIFN5c3RlbS5JRGlzcG9zYWJsZSIgLz4KKyAgPEFzc2VtYmx5SW5mbz4KKyAgICA8QXNzZW1ibHlOYW1lPmF2YWhpLXNoYXJwPC9Bc3NlbWJseU5hbWU+CisgICAgPEFzc2VtYmx5VmVyc2lvbj4xLjAuMC4wPC9Bc3NlbWJseVZlcnNpb24+CisgIDwvQXNzZW1ibHlJbmZvPgorICA8QmFzZT4KKyAgICA8QmFzZVR5cGVOYW1lPkF2YWhpLkJyb3dzZXJCYXNlPC9CYXNlVHlwZU5hbWU+CisgIDwvQmFzZT4KKyAgPEludGVyZmFjZXM+CisgICAgPEludGVyZmFjZT4KKyAgICAgIDxJbnRlcmZhY2VOYW1lPlN5c3RlbS5JRGlzcG9zYWJsZTwvSW50ZXJmYWNlTmFtZT4KKyAgICA8L0ludGVyZmFjZT4KKyAgPC9JbnRlcmZhY2VzPgorICA8TWVtYmVycz4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9Ii5jdG9yIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIERvbWFpbkJyb3dzZXIgKEF2YWhpLkNsaWVudCBjbGllbnQpOyIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkNvbnN0cnVjdG9yPC9NZW1iZXJUeXBlPgorICAgICAgPFBhcmFtZXRlcnM+CisgICAgICAgIDxQYXJhbWV0ZXIgTmFtZT0iY2xpZW50IiBUeXBlPSJBdmFoaS5DbGllbnQiIC8+CisgICAgICA8L1BhcmFtZXRlcnM+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImNsaWVudCI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJEb21haW5BZGRlZCI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBldmVudCBBdmFoaS5Eb21haW5JbmZvSGFuZGxlciBEb21haW5BZGRlZDsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5FdmVudDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+QXZhaGkuRG9tYWluSW5mb0hhbmRsZXI8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iRG9tYWluUmVtb3ZlZCI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBldmVudCBBdmFoaS5Eb21haW5JbmZvSGFuZGxlciBEb21haW5SZW1vdmVkOyIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkV2ZW50PC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5BdmFoaS5Eb21haW5JbmZvSGFuZGxlcjwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJEaXNwb3NlIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIHZvaWQgRGlzcG9zZSAoKTsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5NZXRob2Q8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPlN5c3RlbS5Wb2lkPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxQYXJhbWV0ZXJzIC8+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJEb21haW5zIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIEF2YWhpLkRvbWFpbkluZm9bXSBEb21haW5zIHsgZ2V0OyB9OyIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPlByb3BlcnR5PC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5BdmFoaS5Eb21haW5JbmZvW108L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgICAgPHZhbHVlPlRvIGJlIGFkZGVkLjwvdmFsdWU+CisgICAgICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9Ii5jdG9yIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIERvbWFpbkJyb3dzZXIgKEF2YWhpLkNsaWVudCBjbGllbnQsIGludCBpZmFjZSwgQXZhaGkuUHJvdG9jb2wgcHJvdG8sIHN0cmluZyBkb21haW4sIEF2YWhpLkRvbWFpbkJyb3dzZXJUeXBlIGJ0eXBlLCBBdmFoaS5Mb29rdXBGbGFncyBmbGFncyk7IiAvPgorICAgICAgPE1lbWJlclR5cGU+Q29uc3RydWN0b3I8L01lbWJlclR5cGU+CisgICAgICA8UGFyYW1ldGVycz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJjbGllbnQiIFR5cGU9IkF2YWhpLkNsaWVudCIgLz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJpZmFjZSIgVHlwZT0iU3lzdGVtLkludDMyIiAvPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9InByb3RvIiBUeXBlPSJBdmFoaS5Qcm90b2NvbCIgLz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJkb21haW4iIFR5cGU9IlN5c3RlbS5TdHJpbmciIC8+CisgICAgICAgIDxQYXJhbWV0ZXIgTmFtZT0iYnR5cGUiIFR5cGU9IkF2YWhpLkRvbWFpbkJyb3dzZXJUeXBlIiAvPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9ImZsYWdzIiBUeXBlPSJBdmFoaS5Mb29rdXBGbGFncyIgLz4KKyAgICAgIDwvUGFyYW1ldGVycz4KKyAgICAgIDxEb2NzPgorICAgICAgICA8cGFyYW0gbmFtZT0iY2xpZW50Ij5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8cGFyYW0gbmFtZT0iaWZhY2UiPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgICAgIDxwYXJhbSBuYW1lPSJwcm90byI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImRvbWFpbiI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImJ0eXBlIj5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8cGFyYW0gbmFtZT0iZmxhZ3MiPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICA8L01lbWJlcnM+CisgIDxEb2NzPgorICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgIDwvRG9jcz4KKzwvVHlwZT4KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9lbi9BdmFoaS9Eb21haW5Ccm93c2VyVHlwZS54bWwgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvZW4vQXZhaGkvRG9tYWluQnJvd3NlclR5cGUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NDM1MjQKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvZW4vQXZhaGkvRG9tYWluQnJvd3NlclR5cGUueG1sCkBAIC0wLDAgKzEsNjYgQEAKKzxUeXBlIE5hbWU9IkRvbWFpbkJyb3dzZXJUeXBlIiBGdWxsTmFtZT0iQXZhaGkuRG9tYWluQnJvd3NlclR5cGUiPgorICA8VHlwZVNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgZW51bSBEb21haW5Ccm93c2VyVHlwZSIgLz4KKyAgPEFzc2VtYmx5SW5mbz4KKyAgICA8QXNzZW1ibHlOYW1lPmF2YWhpLXNoYXJwPC9Bc3NlbWJseU5hbWU+CisgICAgPEFzc2VtYmx5VmVyc2lvbj4xLjAuMC4wPC9Bc3NlbWJseVZlcnNpb24+CisgIDwvQXNzZW1ibHlJbmZvPgorICA8QmFzZT4KKyAgICA8QmFzZVR5cGVOYW1lPlN5c3RlbS5FbnVtPC9CYXNlVHlwZU5hbWU+CisgIDwvQmFzZT4KKyAgPE1lbWJlcnM+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJSZWdpc3RlckRlZmF1bHQiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJSZWdpc3RlckRlZmF1bHQiIC8+CisgICAgICA8TWVtYmVyVHlwZT5GaWVsZDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+QXZhaGkuRG9tYWluQnJvd3NlclR5cGU8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IkJyb3dzZURlZmF1bHQiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJCcm93c2VEZWZhdWx0IiAvPgorICAgICAgPE1lbWJlclR5cGU+RmllbGQ8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPkF2YWhpLkRvbWFpbkJyb3dzZXJUeXBlPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJSZWdpc3RlciI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9IlJlZ2lzdGVyIiAvPgorICAgICAgPE1lbWJlclR5cGU+RmllbGQ8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPkF2YWhpLkRvbWFpbkJyb3dzZXJUeXBlPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJCcm93c2VMZWdhY3kiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJCcm93c2VMZWdhY3kiIC8+CisgICAgICA8TWVtYmVyVHlwZT5GaWVsZDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+QXZhaGkuRG9tYWluQnJvd3NlclR5cGU8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IkJyb3dzZSI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9IkJyb3dzZSIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkZpZWxkPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5BdmFoaS5Eb21haW5Ccm93c2VyVHlwZTwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICA8L01lbWJlcnM+CisgIDxEb2NzPgorICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgIDwvRG9jcz4KKzwvVHlwZT4KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9lbi9BdmFoaS9Eb21haW5JbmZvLnhtbCBiL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9lbi9BdmFoaS9Eb21haW5JbmZvLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGRmZDYwCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL2VuL0F2YWhpL0RvbWFpbkluZm8ueG1sCkBAIC0wLDAgKzEsNjEgQEAKKzxUeXBlIE5hbWU9IkRvbWFpbkluZm8iIEZ1bGxOYW1lPSJBdmFoaS5Eb21haW5JbmZvIj4KKyAgPFR5cGVTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIHN0cnVjdCBEb21haW5JbmZvIiAvPgorICA8QXNzZW1ibHlJbmZvPgorICAgIDxBc3NlbWJseU5hbWU+YXZhaGktc2hhcnA8L0Fzc2VtYmx5TmFtZT4KKyAgICA8QXNzZW1ibHlWZXJzaW9uPjEuMC4wLjA8L0Fzc2VtYmx5VmVyc2lvbj4KKyAgPC9Bc3NlbWJseUluZm8+CisgIDxCYXNlPgorICAgIDxCYXNlVHlwZU5hbWU+U3lzdGVtLlZhbHVlVHlwZTwvQmFzZVR5cGVOYW1lPgorICA8L0Jhc2U+CisgIDxJbnRlcmZhY2VzIC8+CisgIDxNZW1iZXJzPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iTmV0d29ya0ludGVyZmFjZSI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBpbnQgTmV0d29ya0ludGVyZmFjZTsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5GaWVsZDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+U3lzdGVtLkludDMyPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IlByb3RvY29sIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIEF2YWhpLlByb3RvY29sIFByb3RvY29sOyIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkZpZWxkPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5BdmFoaS5Qcm90b2NvbDwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJEb21haW4iPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgc3RyaW5nIERvbWFpbjsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5GaWVsZDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+U3lzdGVtLlN0cmluZzwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJGbGFncyI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBBdmFoaS5Mb29rdXBSZXN1bHRGbGFncyBGbGFnczsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5GaWVsZDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+QXZhaGkuTG9va3VwUmVzdWx0RmxhZ3M8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICA8L01lbWJlcnM+CisgIDxEb2NzPgorICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgIDwvRG9jcz4KKzwvVHlwZT4KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9lbi9BdmFoaS9Eb21haW5JbmZvQXJncy54bWwgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvZW4vQXZhaGkvRG9tYWluSW5mb0FyZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5Njc0NDcKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvZW4vQXZhaGkvRG9tYWluSW5mb0FyZ3MueG1sCkBAIC0wLDAgKzEsNDEgQEAKKzxUeXBlIE5hbWU9IkRvbWFpbkluZm9BcmdzIiBGdWxsTmFtZT0iQXZhaGkuRG9tYWluSW5mb0FyZ3MiPgorICA8VHlwZVNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgY2xhc3MgRG9tYWluSW5mb0FyZ3MgOiBTeXN0ZW0uRXZlbnRBcmdzIiAvPgorICA8QXNzZW1ibHlJbmZvPgorICAgIDxBc3NlbWJseU5hbWU+YXZhaGktc2hhcnA8L0Fzc2VtYmx5TmFtZT4KKyAgICA8QXNzZW1ibHlWZXJzaW9uPjEuMC4wLjA8L0Fzc2VtYmx5VmVyc2lvbj4KKyAgPC9Bc3NlbWJseUluZm8+CisgIDxCYXNlPgorICAgIDxCYXNlVHlwZU5hbWU+U3lzdGVtLkV2ZW50QXJnczwvQmFzZVR5cGVOYW1lPgorICA8L0Jhc2U+CisgIDxJbnRlcmZhY2VzIC8+CisgIDxNZW1iZXJzPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iLmN0b3IiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgRG9tYWluSW5mb0FyZ3MgKEF2YWhpLkRvbWFpbkluZm8gZG9tYWluKTsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5Db25zdHJ1Y3RvcjwvTWVtYmVyVHlwZT4KKyAgICAgIDxQYXJhbWV0ZXJzPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9ImRvbWFpbiIgVHlwZT0iQXZhaGkuRG9tYWluSW5mbyIgLz4KKyAgICAgIDwvUGFyYW1ldGVycz4KKyAgICAgIDxEb2NzPgorICAgICAgICA8cGFyYW0gbmFtZT0iZG9tYWluIj5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IkRvbWFpbiI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBBdmFoaS5Eb21haW5JbmZvIERvbWFpbiB7IGdldDsgfTsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5Qcm9wZXJ0eTwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+QXZhaGkuRG9tYWluSW5mbzwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8dmFsdWU+VG8gYmUgYWRkZWQuPC92YWx1ZT4KKyAgICAgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICA8L01lbWJlcnM+CisgIDxEb2NzPgorICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgIDwvRG9jcz4KKzwvVHlwZT4KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9lbi9BdmFoaS9Eb21haW5JbmZvSGFuZGxlci54bWwgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvZW4vQXZhaGkvRG9tYWluSW5mb0hhbmRsZXIueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5M2UyYjcKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvZW4vQXZhaGkvRG9tYWluSW5mb0hhbmRsZXIueG1sCkBAIC0wLDAgKzEsMjMgQEAKKzxUeXBlIE5hbWU9IkRvbWFpbkluZm9IYW5kbGVyIiBGdWxsTmFtZT0iQXZhaGkuRG9tYWluSW5mb0hhbmRsZXIiPgorICA8VHlwZVNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgZGVsZWdhdGUgdm9pZCBEb21haW5JbmZvSGFuZGxlcihvYmplY3QgbywgQXZhaGkuRG9tYWluSW5mb0FyZ3MgYXJncyk7IiAvPgorICA8QXNzZW1ibHlJbmZvPgorICAgIDxBc3NlbWJseU5hbWU+YXZhaGktc2hhcnA8L0Fzc2VtYmx5TmFtZT4KKyAgICA8QXNzZW1ibHlWZXJzaW9uPjEuMC4wLjA8L0Fzc2VtYmx5VmVyc2lvbj4KKyAgPC9Bc3NlbWJseUluZm8+CisgIDxCYXNlPgorICAgIDxCYXNlVHlwZU5hbWU+U3lzdGVtLkRlbGVnYXRlPC9CYXNlVHlwZU5hbWU+CisgIDwvQmFzZT4KKyAgPFBhcmFtZXRlcnM+CisgICAgPFBhcmFtZXRlciBOYW1lPSJvIiBUeXBlPSJTeXN0ZW0uT2JqZWN0IiAvPgorICAgIDxQYXJhbWV0ZXIgTmFtZT0iYXJncyIgVHlwZT0iQXZhaGkuRG9tYWluSW5mb0FyZ3MiIC8+CisgIDwvUGFyYW1ldGVycz4KKyAgPFJldHVyblZhbHVlPgorICAgIDxSZXR1cm5UeXBlPlN5c3RlbS5Wb2lkPC9SZXR1cm5UeXBlPgorICA8L1JldHVyblZhbHVlPgorICA8RG9jcz4KKyAgICA8cGFyYW0gbmFtZT0ibyI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICA8cGFyYW0gbmFtZT0iYXJncyI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICA8L0RvY3M+Cis8L1R5cGU+CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvZW4vQXZhaGkvRW50cnlHcm91cC54bWwgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvZW4vQXZhaGkvRW50cnlHcm91cC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNmZWMyMgotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9lbi9BdmFoaS9FbnRyeUdyb3VwLnhtbApAQCAtMCwwICsxLDQ5MSBAQAorPFR5cGUgTmFtZT0iRW50cnlHcm91cCIgRnVsbE5hbWU9IkF2YWhpLkVudHJ5R3JvdXAiPgorICA8VHlwZVNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgY2xhc3MgRW50cnlHcm91cCA6IFN5c3RlbS5JRGlzcG9zYWJsZSIgLz4KKyAgPEFzc2VtYmx5SW5mbz4KKyAgICA8QXNzZW1ibHlOYW1lPmF2YWhpLXNoYXJwPC9Bc3NlbWJseU5hbWU+CisgICAgPEFzc2VtYmx5VmVyc2lvbj4xLjAuMC4wPC9Bc3NlbWJseVZlcnNpb24+CisgIDwvQXNzZW1ibHlJbmZvPgorICA8QmFzZT4KKyAgICA8QmFzZVR5cGVOYW1lPlN5c3RlbS5PYmplY3Q8L0Jhc2VUeXBlTmFtZT4KKyAgPC9CYXNlPgorICA8SW50ZXJmYWNlcz4KKyAgICA8SW50ZXJmYWNlPgorICAgICAgPEludGVyZmFjZU5hbWU+U3lzdGVtLklEaXNwb3NhYmxlPC9JbnRlcmZhY2VOYW1lPgorICAgIDwvSW50ZXJmYWNlPgorICA8L0ludGVyZmFjZXM+CisgIDxNZW1iZXJzPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iLmN0b3IiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgRW50cnlHcm91cCAoQXZhaGkuQ2xpZW50IGNsaWVudCk7IiAvPgorICAgICAgPE1lbWJlclR5cGU+Q29uc3RydWN0b3I8L01lbWJlclR5cGU+CisgICAgICA8UGFyYW1ldGVycz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJjbGllbnQiIFR5cGU9IkF2YWhpLkNsaWVudCIgLz4KKyAgICAgIDwvUGFyYW1ldGVycz4KKyAgICAgIDxEb2NzPgorICAgICAgICA8cGFyYW0gbmFtZT0iY2xpZW50Ij5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IlN0YXRlQ2hhbmdlZCI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBldmVudCBBdmFoaS5FbnRyeUdyb3VwU3RhdGVIYW5kbGVyIFN0YXRlQ2hhbmdlZDsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5FdmVudDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+QXZhaGkuRW50cnlHcm91cFN0YXRlSGFuZGxlcjwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJEaXNwb3NlIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIHZvaWQgRGlzcG9zZSAoKTsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5NZXRob2Q8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPlN5c3RlbS5Wb2lkPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxQYXJhbWV0ZXJzIC8+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJDb21taXQiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgdm9pZCBDb21taXQgKCk7IiAvPgorICAgICAgPE1lbWJlclR5cGU+TWV0aG9kPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5TeXN0ZW0uVm9pZDwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8UGFyYW1ldGVycyAvPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iUmVzZXQiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgdm9pZCBSZXNldCAoKTsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5NZXRob2Q8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPlN5c3RlbS5Wb2lkPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxQYXJhbWV0ZXJzIC8+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJBZGRTZXJ2aWNlIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIHZvaWQgQWRkU2VydmljZSAoc3RyaW5nIG5hbWUsIHN0cmluZyB0eXBlLCBzdHJpbmcgZG9tYWluLCB1c2hvcnQgcG9ydCwgc3RyaW5nW10gdHh0KTsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5NZXRob2Q8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPlN5c3RlbS5Wb2lkPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxQYXJhbWV0ZXJzPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9Im5hbWUiIFR5cGU9IlN5c3RlbS5TdHJpbmciIC8+CisgICAgICAgIDxQYXJhbWV0ZXIgTmFtZT0idHlwZSIgVHlwZT0iU3lzdGVtLlN0cmluZyIgLz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJkb21haW4iIFR5cGU9IlN5c3RlbS5TdHJpbmciIC8+CisgICAgICAgIDxQYXJhbWV0ZXIgTmFtZT0icG9ydCIgVHlwZT0iU3lzdGVtLlVJbnQxNiIgLz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJ0eHQiIFR5cGU9IlN5c3RlbS5TdHJpbmdbXSI+CisgICAgICAgICAgPEF0dHJpYnV0ZXM+CisgICAgICAgICAgICA8QXR0cmlidXRlPgorICAgICAgICAgICAgICA8QXR0cmlidXRlTmFtZT5TeXN0ZW0uUGFyYW1BcnJheTwvQXR0cmlidXRlTmFtZT4KKyAgICAgICAgICAgIDwvQXR0cmlidXRlPgorICAgICAgICAgIDwvQXR0cmlidXRlcz4KKyAgICAgICAgPC9QYXJhbWV0ZXI+CisgICAgICA8L1BhcmFtZXRlcnM+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHBhcmFtIG5hbWU9Im5hbWUiPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgICAgIDxwYXJhbSBuYW1lPSJ0eXBlIj5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8cGFyYW0gbmFtZT0iZG9tYWluIj5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8cGFyYW0gbmFtZT0icG9ydCI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHBhcmFtIG5hbWU9InR4dCI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJTdGF0ZSI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBBdmFoaS5FbnRyeUdyb3VwU3RhdGUgU3RhdGUgeyBnZXQ7IH07IiAvPgorICAgICAgPE1lbWJlclR5cGU+UHJvcGVydHk8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPkF2YWhpLkVudHJ5R3JvdXBTdGF0ZTwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8dmFsdWU+VG8gYmUgYWRkZWQuPC92YWx1ZT4KKyAgICAgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iSXNFbXB0eSI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBib29sIElzRW1wdHkgeyBnZXQ7IH07IiAvPgorICAgICAgPE1lbWJlclR5cGU+UHJvcGVydHk8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPlN5c3RlbS5Cb29sZWFuPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICAgIDx2YWx1ZT5UbyBiZSBhZGRlZC48L3ZhbHVlPgorICAgICAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJHZXRBbHRlcm5hdGl2ZVNlcnZpY2VOYW1lIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIHN0YXRpYyBzdHJpbmcgR2V0QWx0ZXJuYXRpdmVTZXJ2aWNlTmFtZSAoc3RyaW5nIG5hbWUpOyIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPk1ldGhvZDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+U3lzdGVtLlN0cmluZzwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8UGFyYW1ldGVycz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJuYW1lIiBUeXBlPSJTeXN0ZW0uU3RyaW5nIiAvPgorICAgICAgPC9QYXJhbWV0ZXJzPgorICAgICAgPERvY3M+CisgICAgICAgIDxwYXJhbSBuYW1lPSJuYW1lIj5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICAgIDxyZXR1cm5zPlRvIGJlIGFkZGVkLjwvcmV0dXJucz4KKyAgICAgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iQWRkU2VydmljZSI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyB2b2lkIEFkZFNlcnZpY2UgKEF2YWhpLlB1Ymxpc2hGbGFncyBmbGFncywgc3RyaW5nIG5hbWUsIHN0cmluZyB0eXBlLCBzdHJpbmcgZG9tYWluLCB1c2hvcnQgcG9ydCwgc3RyaW5nW10gdHh0KTsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5NZXRob2Q8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPlN5c3RlbS5Wb2lkPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxQYXJhbWV0ZXJzPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9ImZsYWdzIiBUeXBlPSJBdmFoaS5QdWJsaXNoRmxhZ3MiIC8+CisgICAgICAgIDxQYXJhbWV0ZXIgTmFtZT0ibmFtZSIgVHlwZT0iU3lzdGVtLlN0cmluZyIgLz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJ0eXBlIiBUeXBlPSJTeXN0ZW0uU3RyaW5nIiAvPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9ImRvbWFpbiIgVHlwZT0iU3lzdGVtLlN0cmluZyIgLz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJwb3J0IiBUeXBlPSJTeXN0ZW0uVUludDE2IiAvPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9InR4dCIgVHlwZT0iU3lzdGVtLlN0cmluZ1tdIj4KKyAgICAgICAgICA8QXR0cmlidXRlcz4KKyAgICAgICAgICAgIDxBdHRyaWJ1dGU+CisgICAgICAgICAgICAgIDxBdHRyaWJ1dGVOYW1lPlN5c3RlbS5QYXJhbUFycmF5PC9BdHRyaWJ1dGVOYW1lPgorICAgICAgICAgICAgPC9BdHRyaWJ1dGU+CisgICAgICAgICAgPC9BdHRyaWJ1dGVzPgorICAgICAgICA8L1BhcmFtZXRlcj4KKyAgICAgIDwvUGFyYW1ldGVycz4KKyAgICAgIDxEb2NzPgorICAgICAgICA8cGFyYW0gbmFtZT0iZmxhZ3MiPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgICAgIDxwYXJhbSBuYW1lPSJuYW1lIj5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8cGFyYW0gbmFtZT0idHlwZSI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImRvbWFpbiI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHBhcmFtIG5hbWU9InBvcnQiPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgICAgIDxwYXJhbSBuYW1lPSJ0eHQiPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iQWRkU2VydmljZSI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyB2b2lkIEFkZFNlcnZpY2UgKGludCBpZmFjZSwgQXZhaGkuUHJvdG9jb2wgcHJvdG8sIEF2YWhpLlB1Ymxpc2hGbGFncyBmbGFncywgc3RyaW5nIG5hbWUsIHN0cmluZyB0eXBlLCBzdHJpbmcgZG9tYWluLCBzdHJpbmcgaG9zdCwgdXNob3J0IHBvcnQsIHN0cmluZ1tdIHR4dCk7IiAvPgorICAgICAgPE1lbWJlclR5cGU+TWV0aG9kPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5TeXN0ZW0uVm9pZDwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8UGFyYW1ldGVycz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJpZmFjZSIgVHlwZT0iU3lzdGVtLkludDMyIiAvPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9InByb3RvIiBUeXBlPSJBdmFoaS5Qcm90b2NvbCIgLz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJmbGFncyIgVHlwZT0iQXZhaGkuUHVibGlzaEZsYWdzIiAvPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9Im5hbWUiIFR5cGU9IlN5c3RlbS5TdHJpbmciIC8+CisgICAgICAgIDxQYXJhbWV0ZXIgTmFtZT0idHlwZSIgVHlwZT0iU3lzdGVtLlN0cmluZyIgLz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJkb21haW4iIFR5cGU9IlN5c3RlbS5TdHJpbmciIC8+CisgICAgICAgIDxQYXJhbWV0ZXIgTmFtZT0iaG9zdCIgVHlwZT0iU3lzdGVtLlN0cmluZyIgLz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJwb3J0IiBUeXBlPSJTeXN0ZW0uVUludDE2IiAvPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9InR4dCIgVHlwZT0iU3lzdGVtLlN0cmluZ1tdIj4KKyAgICAgICAgICA8QXR0cmlidXRlcz4KKyAgICAgICAgICAgIDxBdHRyaWJ1dGU+CisgICAgICAgICAgICAgIDxBdHRyaWJ1dGVOYW1lPlN5c3RlbS5QYXJhbUFycmF5PC9BdHRyaWJ1dGVOYW1lPgorICAgICAgICAgICAgPC9BdHRyaWJ1dGU+CisgICAgICAgICAgPC9BdHRyaWJ1dGVzPgorICAgICAgICA8L1BhcmFtZXRlcj4KKyAgICAgIDwvUGFyYW1ldGVycz4KKyAgICAgIDxEb2NzPgorICAgICAgICA8cGFyYW0gbmFtZT0iaWZhY2UiPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgICAgIDxwYXJhbSBuYW1lPSJwcm90byI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImZsYWdzIj5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8cGFyYW0gbmFtZT0ibmFtZSI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHBhcmFtIG5hbWU9InR5cGUiPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgICAgIDxwYXJhbSBuYW1lPSJkb21haW4iPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgICAgIDxwYXJhbSBuYW1lPSJob3N0Ij5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8cGFyYW0gbmFtZT0icG9ydCI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHBhcmFtIG5hbWU9InR4dCI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJVcGRhdGVTZXJ2aWNlIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIHZvaWQgVXBkYXRlU2VydmljZSAoc3RyaW5nIG5hbWUsIHN0cmluZyB0eXBlLCBzdHJpbmcgZG9tYWluLCBzdHJpbmdbXSB0eHQpOyIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPk1ldGhvZDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+U3lzdGVtLlZvaWQ8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPFBhcmFtZXRlcnM+CisgICAgICAgIDxQYXJhbWV0ZXIgTmFtZT0ibmFtZSIgVHlwZT0iU3lzdGVtLlN0cmluZyIgLz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJ0eXBlIiBUeXBlPSJTeXN0ZW0uU3RyaW5nIiAvPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9ImRvbWFpbiIgVHlwZT0iU3lzdGVtLlN0cmluZyIgLz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJ0eHQiIFR5cGU9IlN5c3RlbS5TdHJpbmdbXSI+CisgICAgICAgICAgPEF0dHJpYnV0ZXM+CisgICAgICAgICAgICA8QXR0cmlidXRlPgorICAgICAgICAgICAgICA8QXR0cmlidXRlTmFtZT5TeXN0ZW0uUGFyYW1BcnJheTwvQXR0cmlidXRlTmFtZT4KKyAgICAgICAgICAgIDwvQXR0cmlidXRlPgorICAgICAgICAgIDwvQXR0cmlidXRlcz4KKyAgICAgICAgPC9QYXJhbWV0ZXI+CisgICAgICA8L1BhcmFtZXRlcnM+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHBhcmFtIG5hbWU9Im5hbWUiPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgICAgIDxwYXJhbSBuYW1lPSJ0eXBlIj5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8cGFyYW0gbmFtZT0iZG9tYWluIj5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8cGFyYW0gbmFtZT0idHh0Ij5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IlVwZGF0ZVNlcnZpY2UiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgdm9pZCBVcGRhdGVTZXJ2aWNlIChpbnQgaWZhY2UsIEF2YWhpLlByb3RvY29sIHByb3RvLCBBdmFoaS5QdWJsaXNoRmxhZ3MgZmxhZ3MsIHN0cmluZyBuYW1lLCBzdHJpbmcgdHlwZSwgc3RyaW5nIGRvbWFpbiwgc3RyaW5nW10gdHh0KTsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5NZXRob2Q8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPlN5c3RlbS5Wb2lkPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxQYXJhbWV0ZXJzPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9ImlmYWNlIiBUeXBlPSJTeXN0ZW0uSW50MzIiIC8+CisgICAgICAgIDxQYXJhbWV0ZXIgTmFtZT0icHJvdG8iIFR5cGU9IkF2YWhpLlByb3RvY29sIiAvPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9ImZsYWdzIiBUeXBlPSJBdmFoaS5QdWJsaXNoRmxhZ3MiIC8+CisgICAgICAgIDxQYXJhbWV0ZXIgTmFtZT0ibmFtZSIgVHlwZT0iU3lzdGVtLlN0cmluZyIgLz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJ0eXBlIiBUeXBlPSJTeXN0ZW0uU3RyaW5nIiAvPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9ImRvbWFpbiIgVHlwZT0iU3lzdGVtLlN0cmluZyIgLz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJ0eHQiIFR5cGU9IlN5c3RlbS5TdHJpbmdbXSI+CisgICAgICAgICAgPEF0dHJpYnV0ZXM+CisgICAgICAgICAgICA8QXR0cmlidXRlPgorICAgICAgICAgICAgICA8QXR0cmlidXRlTmFtZT5TeXN0ZW0uUGFyYW1BcnJheTwvQXR0cmlidXRlTmFtZT4KKyAgICAgICAgICAgIDwvQXR0cmlidXRlPgorICAgICAgICAgIDwvQXR0cmlidXRlcz4KKyAgICAgICAgPC9QYXJhbWV0ZXI+CisgICAgICA8L1BhcmFtZXRlcnM+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImlmYWNlIj5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8cGFyYW0gbmFtZT0icHJvdG8iPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgICAgIDxwYXJhbSBuYW1lPSJmbGFncyI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHBhcmFtIG5hbWU9Im5hbWUiPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgICAgIDxwYXJhbSBuYW1lPSJ0eXBlIj5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8cGFyYW0gbmFtZT0iZG9tYWluIj5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8cGFyYW0gbmFtZT0idHh0Ij5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IkFkZFNlcnZpY2VTdWJ0eXBlIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIHZvaWQgQWRkU2VydmljZVN1YnR5cGUgKHN0cmluZyBuYW1lLCBzdHJpbmcgdHlwZSwgc3RyaW5nIGRvbWFpbiwgc3RyaW5nIHN1YnR5cGUpOyIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPk1ldGhvZDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+U3lzdGVtLlZvaWQ8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPFBhcmFtZXRlcnM+CisgICAgICAgIDxQYXJhbWV0ZXIgTmFtZT0ibmFtZSIgVHlwZT0iU3lzdGVtLlN0cmluZyIgLz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJ0eXBlIiBUeXBlPSJTeXN0ZW0uU3RyaW5nIiAvPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9ImRvbWFpbiIgVHlwZT0iU3lzdGVtLlN0cmluZyIgLz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJzdWJ0eXBlIiBUeXBlPSJTeXN0ZW0uU3RyaW5nIiAvPgorICAgICAgPC9QYXJhbWV0ZXJzPgorICAgICAgPERvY3M+CisgICAgICAgIDxwYXJhbSBuYW1lPSJuYW1lIj5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8cGFyYW0gbmFtZT0idHlwZSI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImRvbWFpbiI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHBhcmFtIG5hbWU9InN1YnR5cGUiPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iQWRkU2VydmljZVN1YnR5cGUiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgdm9pZCBBZGRTZXJ2aWNlU3VidHlwZSAoaW50IGlmYWNlLCBBdmFoaS5Qcm90b2NvbCBwcm90bywgQXZhaGkuUHVibGlzaEZsYWdzIGZsYWdzLCBzdHJpbmcgbmFtZSwgc3RyaW5nIHR5cGUsIHN0cmluZyBkb21haW4sIHN0cmluZyBzdWJ0eXBlKTsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5NZXRob2Q8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPlN5c3RlbS5Wb2lkPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxQYXJhbWV0ZXJzPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9ImlmYWNlIiBUeXBlPSJTeXN0ZW0uSW50MzIiIC8+CisgICAgICAgIDxQYXJhbWV0ZXIgTmFtZT0icHJvdG8iIFR5cGU9IkF2YWhpLlByb3RvY29sIiAvPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9ImZsYWdzIiBUeXBlPSJBdmFoaS5QdWJsaXNoRmxhZ3MiIC8+CisgICAgICAgIDxQYXJhbWV0ZXIgTmFtZT0ibmFtZSIgVHlwZT0iU3lzdGVtLlN0cmluZyIgLz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJ0eXBlIiBUeXBlPSJTeXN0ZW0uU3RyaW5nIiAvPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9ImRvbWFpbiIgVHlwZT0iU3lzdGVtLlN0cmluZyIgLz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJzdWJ0eXBlIiBUeXBlPSJTeXN0ZW0uU3RyaW5nIiAvPgorICAgICAgPC9QYXJhbWV0ZXJzPgorICAgICAgPERvY3M+CisgICAgICAgIDxwYXJhbSBuYW1lPSJpZmFjZSI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHBhcmFtIG5hbWU9InByb3RvIj5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8cGFyYW0gbmFtZT0iZmxhZ3MiPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgICAgIDxwYXJhbSBuYW1lPSJuYW1lIj5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8cGFyYW0gbmFtZT0idHlwZSI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImRvbWFpbiI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHBhcmFtIG5hbWU9InN1YnR5cGUiPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iQWRkQWRkcmVzcyI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyB2b2lkIEFkZEFkZHJlc3MgKHN0cmluZyBuYW1lLCBTeXN0ZW0uTmV0LklQQWRkcmVzcyBhZGRyZXNzKTsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5NZXRob2Q8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPlN5c3RlbS5Wb2lkPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxQYXJhbWV0ZXJzPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9Im5hbWUiIFR5cGU9IlN5c3RlbS5TdHJpbmciIC8+CisgICAgICAgIDxQYXJhbWV0ZXIgTmFtZT0iYWRkcmVzcyIgVHlwZT0iU3lzdGVtLk5ldC5JUEFkZHJlc3MiIC8+CisgICAgICA8L1BhcmFtZXRlcnM+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHBhcmFtIG5hbWU9Im5hbWUiPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgICAgIDxwYXJhbSBuYW1lPSJhZGRyZXNzIj5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IkFkZEFkZHJlc3MiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgdm9pZCBBZGRBZGRyZXNzIChpbnQgaWZhY2UsIEF2YWhpLlByb3RvY29sIHByb3RvLCBBdmFoaS5QdWJsaXNoRmxhZ3MgZmxhZ3MsIHN0cmluZyBuYW1lLCBTeXN0ZW0uTmV0LklQQWRkcmVzcyBhZGRyZXNzKTsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5NZXRob2Q8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPlN5c3RlbS5Wb2lkPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxQYXJhbWV0ZXJzPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9ImlmYWNlIiBUeXBlPSJTeXN0ZW0uSW50MzIiIC8+CisgICAgICAgIDxQYXJhbWV0ZXIgTmFtZT0icHJvdG8iIFR5cGU9IkF2YWhpLlByb3RvY29sIiAvPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9ImZsYWdzIiBUeXBlPSJBdmFoaS5QdWJsaXNoRmxhZ3MiIC8+CisgICAgICAgIDxQYXJhbWV0ZXIgTmFtZT0ibmFtZSIgVHlwZT0iU3lzdGVtLlN0cmluZyIgLz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJhZGRyZXNzIiBUeXBlPSJTeXN0ZW0uTmV0LklQQWRkcmVzcyIgLz4KKyAgICAgIDwvUGFyYW1ldGVycz4KKyAgICAgIDxEb2NzPgorICAgICAgICA8cGFyYW0gbmFtZT0iaWZhY2UiPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgICAgIDxwYXJhbSBuYW1lPSJwcm90byI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImZsYWdzIj5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8cGFyYW0gbmFtZT0ibmFtZSI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImFkZHJlc3MiPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iQWRkUmVjb3JkIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIHZvaWQgQWRkUmVjb3JkIChzdHJpbmcgbmFtZSwgQXZhaGkuUmVjb3JkQ2xhc3MgY2xhenosIEF2YWhpLlJlY29yZFR5cGUgdHlwZSwgdWludCB0dGwsIGJ5dGVbXSByZGF0YSwgaW50IGxlbmd0aCk7IiAvPgorICAgICAgPE1lbWJlclR5cGU+TWV0aG9kPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5TeXN0ZW0uVm9pZDwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8UGFyYW1ldGVycz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJuYW1lIiBUeXBlPSJTeXN0ZW0uU3RyaW5nIiAvPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9ImNsYXp6IiBUeXBlPSJBdmFoaS5SZWNvcmRDbGFzcyIgLz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJ0eXBlIiBUeXBlPSJBdmFoaS5SZWNvcmRUeXBlIiAvPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9InR0bCIgVHlwZT0iU3lzdGVtLlVJbnQzMiIgLz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJyZGF0YSIgVHlwZT0iU3lzdGVtLkJ5dGVbXSIgLz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJsZW5ndGgiIFR5cGU9IlN5c3RlbS5JbnQzMiIgLz4KKyAgICAgIDwvUGFyYW1ldGVycz4KKyAgICAgIDxEb2NzPgorICAgICAgICA8cGFyYW0gbmFtZT0ibmFtZSI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImNsYXp6Ij5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8cGFyYW0gbmFtZT0idHlwZSI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHBhcmFtIG5hbWU9InR0bCI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHBhcmFtIG5hbWU9InJkYXRhIj5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8cGFyYW0gbmFtZT0ibGVuZ3RoIj5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IkFkZFJlY29yZCI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyB2b2lkIEFkZFJlY29yZCAoaW50IGlmYWNlLCBBdmFoaS5Qcm90b2NvbCBwcm90bywgQXZhaGkuUHVibGlzaEZsYWdzIGZsYWdzLCBzdHJpbmcgbmFtZSwgQXZhaGkuUmVjb3JkQ2xhc3MgY2xhenosIEF2YWhpLlJlY29yZFR5cGUgdHlwZSwgdWludCB0dGwsIGJ5dGVbXSByZGF0YSwgaW50IGxlbmd0aCk7IiAvPgorICAgICAgPE1lbWJlclR5cGU+TWV0aG9kPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5TeXN0ZW0uVm9pZDwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8UGFyYW1ldGVycz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJpZmFjZSIgVHlwZT0iU3lzdGVtLkludDMyIiAvPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9InByb3RvIiBUeXBlPSJBdmFoaS5Qcm90b2NvbCIgLz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJmbGFncyIgVHlwZT0iQXZhaGkuUHVibGlzaEZsYWdzIiAvPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9Im5hbWUiIFR5cGU9IlN5c3RlbS5TdHJpbmciIC8+CisgICAgICAgIDxQYXJhbWV0ZXIgTmFtZT0iY2xhenoiIFR5cGU9IkF2YWhpLlJlY29yZENsYXNzIiAvPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9InR5cGUiIFR5cGU9IkF2YWhpLlJlY29yZFR5cGUiIC8+CisgICAgICAgIDxQYXJhbWV0ZXIgTmFtZT0idHRsIiBUeXBlPSJTeXN0ZW0uVUludDMyIiAvPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9InJkYXRhIiBUeXBlPSJTeXN0ZW0uQnl0ZVtdIiAvPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9Imxlbmd0aCIgVHlwZT0iU3lzdGVtLkludDMyIiAvPgorICAgICAgPC9QYXJhbWV0ZXJzPgorICAgICAgPERvY3M+CisgICAgICAgIDxwYXJhbSBuYW1lPSJpZmFjZSI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHBhcmFtIG5hbWU9InByb3RvIj5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8cGFyYW0gbmFtZT0iZmxhZ3MiPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgICAgIDxwYXJhbSBuYW1lPSJuYW1lIj5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8cGFyYW0gbmFtZT0iY2xhenoiPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgICAgIDxwYXJhbSBuYW1lPSJ0eXBlIj5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8cGFyYW0gbmFtZT0idHRsIj5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8cGFyYW0gbmFtZT0icmRhdGEiPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgICAgIDxwYXJhbSBuYW1lPSJsZW5ndGgiPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iQWRkU2VydmljZSI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyB2b2lkIEFkZFNlcnZpY2UgKGludCBpZmFjZSwgQXZhaGkuUHJvdG9jb2wgcHJvdG8sIEF2YWhpLlB1Ymxpc2hGbGFncyBmbGFncywgc3RyaW5nIG5hbWUsIHN0cmluZyB0eXBlLCBzdHJpbmcgZG9tYWluLCBzdHJpbmcgaG9zdCwgdXNob3J0IHBvcnQsIGJ5dGVbXVtdIHR4dCk7IiAvPgorICAgICAgPE1lbWJlclR5cGU+TWV0aG9kPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5TeXN0ZW0uVm9pZDwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8UGFyYW1ldGVycz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJpZmFjZSIgVHlwZT0iU3lzdGVtLkludDMyIiAvPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9InByb3RvIiBUeXBlPSJBdmFoaS5Qcm90b2NvbCIgLz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJmbGFncyIgVHlwZT0iQXZhaGkuUHVibGlzaEZsYWdzIiAvPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9Im5hbWUiIFR5cGU9IlN5c3RlbS5TdHJpbmciIC8+CisgICAgICAgIDxQYXJhbWV0ZXIgTmFtZT0idHlwZSIgVHlwZT0iU3lzdGVtLlN0cmluZyIgLz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJkb21haW4iIFR5cGU9IlN5c3RlbS5TdHJpbmciIC8+CisgICAgICAgIDxQYXJhbWV0ZXIgTmFtZT0iaG9zdCIgVHlwZT0iU3lzdGVtLlN0cmluZyIgLz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJwb3J0IiBUeXBlPSJTeXN0ZW0uVUludDE2IiAvPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9InR4dCIgVHlwZT0iU3lzdGVtLkJ5dGVbXVtdIj4KKyAgICAgICAgICA8QXR0cmlidXRlcz4KKyAgICAgICAgICAgIDxBdHRyaWJ1dGU+CisgICAgICAgICAgICAgIDxBdHRyaWJ1dGVOYW1lPlN5c3RlbS5QYXJhbUFycmF5PC9BdHRyaWJ1dGVOYW1lPgorICAgICAgICAgICAgPC9BdHRyaWJ1dGU+CisgICAgICAgICAgPC9BdHRyaWJ1dGVzPgorICAgICAgICA8L1BhcmFtZXRlcj4KKyAgICAgIDwvUGFyYW1ldGVycz4KKyAgICAgIDxEb2NzPgorICAgICAgICA8cGFyYW0gbmFtZT0iaWZhY2UiPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgICAgIDxwYXJhbSBuYW1lPSJwcm90byI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImZsYWdzIj5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8cGFyYW0gbmFtZT0ibmFtZSI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHBhcmFtIG5hbWU9InR5cGUiPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgICAgIDxwYXJhbSBuYW1lPSJkb21haW4iPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgICAgIDxwYXJhbSBuYW1lPSJob3N0Ij5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8cGFyYW0gbmFtZT0icG9ydCI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHBhcmFtIG5hbWU9InR4dCI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJVcGRhdGVTZXJ2aWNlIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIHZvaWQgVXBkYXRlU2VydmljZSAoaW50IGlmYWNlLCBBdmFoaS5Qcm90b2NvbCBwcm90bywgQXZhaGkuUHVibGlzaEZsYWdzIGZsYWdzLCBzdHJpbmcgbmFtZSwgc3RyaW5nIHR5cGUsIHN0cmluZyBkb21haW4sIGJ5dGVbXVtdIHR4dCk7IiAvPgorICAgICAgPE1lbWJlclR5cGU+TWV0aG9kPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5TeXN0ZW0uVm9pZDwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8UGFyYW1ldGVycz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJpZmFjZSIgVHlwZT0iU3lzdGVtLkludDMyIiAvPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9InByb3RvIiBUeXBlPSJBdmFoaS5Qcm90b2NvbCIgLz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJmbGFncyIgVHlwZT0iQXZhaGkuUHVibGlzaEZsYWdzIiAvPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9Im5hbWUiIFR5cGU9IlN5c3RlbS5TdHJpbmciIC8+CisgICAgICAgIDxQYXJhbWV0ZXIgTmFtZT0idHlwZSIgVHlwZT0iU3lzdGVtLlN0cmluZyIgLz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJkb21haW4iIFR5cGU9IlN5c3RlbS5TdHJpbmciIC8+CisgICAgICAgIDxQYXJhbWV0ZXIgTmFtZT0idHh0IiBUeXBlPSJTeXN0ZW0uQnl0ZVtdW10iPgorICAgICAgICAgIDxBdHRyaWJ1dGVzPgorICAgICAgICAgICAgPEF0dHJpYnV0ZT4KKyAgICAgICAgICAgICAgPEF0dHJpYnV0ZU5hbWU+U3lzdGVtLlBhcmFtQXJyYXk8L0F0dHJpYnV0ZU5hbWU+CisgICAgICAgICAgICA8L0F0dHJpYnV0ZT4KKyAgICAgICAgICA8L0F0dHJpYnV0ZXM+CisgICAgICAgIDwvUGFyYW1ldGVyPgorICAgICAgPC9QYXJhbWV0ZXJzPgorICAgICAgPERvY3M+CisgICAgICAgIDxwYXJhbSBuYW1lPSJpZmFjZSI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHBhcmFtIG5hbWU9InByb3RvIj5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8cGFyYW0gbmFtZT0iZmxhZ3MiPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgICAgIDxwYXJhbSBuYW1lPSJuYW1lIj5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8cGFyYW0gbmFtZT0idHlwZSI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImRvbWFpbiI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHBhcmFtIG5hbWU9InR4dCI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgIDwvTWVtYmVycz4KKyAgPERvY3M+CisgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgPC9Eb2NzPgorPC9UeXBlPgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL2VuL0F2YWhpL0VudHJ5R3JvdXBTdGF0ZS54bWwgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvZW4vQXZhaGkvRW50cnlHcm91cFN0YXRlLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDFlMWRmCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL2VuL0F2YWhpL0VudHJ5R3JvdXBTdGF0ZS54bWwKQEAgLTAsMCArMSw2NiBAQAorPFR5cGUgTmFtZT0iRW50cnlHcm91cFN0YXRlIiBGdWxsTmFtZT0iQXZhaGkuRW50cnlHcm91cFN0YXRlIj4KKyAgPFR5cGVTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIGVudW0gRW50cnlHcm91cFN0YXRlIiAvPgorICA8QXNzZW1ibHlJbmZvPgorICAgIDxBc3NlbWJseU5hbWU+YXZhaGktc2hhcnA8L0Fzc2VtYmx5TmFtZT4KKyAgICA8QXNzZW1ibHlWZXJzaW9uPjEuMC4wLjA8L0Fzc2VtYmx5VmVyc2lvbj4KKyAgPC9Bc3NlbWJseUluZm8+CisgIDxCYXNlPgorICAgIDxCYXNlVHlwZU5hbWU+U3lzdGVtLkVudW08L0Jhc2VUeXBlTmFtZT4KKyAgPC9CYXNlPgorICA8TWVtYmVycz4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IkNvbGxpc2lvbiI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9IkNvbGxpc2lvbiIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkZpZWxkPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5BdmFoaS5FbnRyeUdyb3VwU3RhdGU8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IlJlZ2lzdGVyaW5nIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0iUmVnaXN0ZXJpbmciIC8+CisgICAgICA8TWVtYmVyVHlwZT5GaWVsZDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+QXZhaGkuRW50cnlHcm91cFN0YXRlPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJVbmNvbW1pdGVkIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0iVW5jb21taXRlZCIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkZpZWxkPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5BdmFoaS5FbnRyeUdyb3VwU3RhdGU8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IkVzdGFibGlzaGVkIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0iRXN0YWJsaXNoZWQiIC8+CisgICAgICA8TWVtYmVyVHlwZT5GaWVsZDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+QXZhaGkuRW50cnlHcm91cFN0YXRlPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJGYWlsdXJlIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0iRmFpbHVyZSIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkZpZWxkPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5BdmFoaS5FbnRyeUdyb3VwU3RhdGU8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgPC9NZW1iZXJzPgorICA8RG9jcz4KKyAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICA8L0RvY3M+Cis8L1R5cGU+CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvZW4vQXZhaGkvRW50cnlHcm91cFN0YXRlQXJncy54bWwgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvZW4vQXZhaGkvRW50cnlHcm91cFN0YXRlQXJncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdkNmY4YwotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9lbi9BdmFoaS9FbnRyeUdyb3VwU3RhdGVBcmdzLnhtbApAQCAtMCwwICsxLDQxIEBACis8VHlwZSBOYW1lPSJFbnRyeUdyb3VwU3RhdGVBcmdzIiBGdWxsTmFtZT0iQXZhaGkuRW50cnlHcm91cFN0YXRlQXJncyI+CisgIDxUeXBlU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBjbGFzcyBFbnRyeUdyb3VwU3RhdGVBcmdzIDogU3lzdGVtLkV2ZW50QXJncyIgLz4KKyAgPEFzc2VtYmx5SW5mbz4KKyAgICA8QXNzZW1ibHlOYW1lPmF2YWhpLXNoYXJwPC9Bc3NlbWJseU5hbWU+CisgICAgPEFzc2VtYmx5VmVyc2lvbj4xLjAuMC4wPC9Bc3NlbWJseVZlcnNpb24+CisgIDwvQXNzZW1ibHlJbmZvPgorICA8QmFzZT4KKyAgICA8QmFzZVR5cGVOYW1lPlN5c3RlbS5FdmVudEFyZ3M8L0Jhc2VUeXBlTmFtZT4KKyAgPC9CYXNlPgorICA8SW50ZXJmYWNlcyAvPgorICA8TWVtYmVycz4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9Ii5jdG9yIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIEVudHJ5R3JvdXBTdGF0ZUFyZ3MgKEF2YWhpLkVudHJ5R3JvdXBTdGF0ZSBzdGF0ZSk7IiAvPgorICAgICAgPE1lbWJlclR5cGU+Q29uc3RydWN0b3I8L01lbWJlclR5cGU+CisgICAgICA8UGFyYW1ldGVycz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJzdGF0ZSIgVHlwZT0iQXZhaGkuRW50cnlHcm91cFN0YXRlIiAvPgorICAgICAgPC9QYXJhbWV0ZXJzPgorICAgICAgPERvY3M+CisgICAgICAgIDxwYXJhbSBuYW1lPSJzdGF0ZSI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJTdGF0ZSI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBBdmFoaS5FbnRyeUdyb3VwU3RhdGUgU3RhdGUgeyBnZXQ7IH07IiAvPgorICAgICAgPE1lbWJlclR5cGU+UHJvcGVydHk8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPkF2YWhpLkVudHJ5R3JvdXBTdGF0ZTwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8dmFsdWU+VG8gYmUgYWRkZWQuPC92YWx1ZT4KKyAgICAgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICA8L01lbWJlcnM+CisgIDxEb2NzPgorICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgIDwvRG9jcz4KKzwvVHlwZT4KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9lbi9BdmFoaS9FbnRyeUdyb3VwU3RhdGVIYW5kbGVyLnhtbCBiL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9lbi9BdmFoaS9FbnRyeUdyb3VwU3RhdGVIYW5kbGVyLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjdjNTE5Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL2VuL0F2YWhpL0VudHJ5R3JvdXBTdGF0ZUhhbmRsZXIueG1sCkBAIC0wLDAgKzEsMjMgQEAKKzxUeXBlIE5hbWU9IkVudHJ5R3JvdXBTdGF0ZUhhbmRsZXIiIEZ1bGxOYW1lPSJBdmFoaS5FbnRyeUdyb3VwU3RhdGVIYW5kbGVyIj4KKyAgPFR5cGVTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIGRlbGVnYXRlIHZvaWQgRW50cnlHcm91cFN0YXRlSGFuZGxlcihvYmplY3QgbywgQXZhaGkuRW50cnlHcm91cFN0YXRlQXJncyBhcmdzKTsiIC8+CisgIDxBc3NlbWJseUluZm8+CisgICAgPEFzc2VtYmx5TmFtZT5hdmFoaS1zaGFycDwvQXNzZW1ibHlOYW1lPgorICAgIDxBc3NlbWJseVZlcnNpb24+MS4wLjAuMDwvQXNzZW1ibHlWZXJzaW9uPgorICA8L0Fzc2VtYmx5SW5mbz4KKyAgPEJhc2U+CisgICAgPEJhc2VUeXBlTmFtZT5TeXN0ZW0uRGVsZWdhdGU8L0Jhc2VUeXBlTmFtZT4KKyAgPC9CYXNlPgorICA8UGFyYW1ldGVycz4KKyAgICA8UGFyYW1ldGVyIE5hbWU9Im8iIFR5cGU9IlN5c3RlbS5PYmplY3QiIC8+CisgICAgPFBhcmFtZXRlciBOYW1lPSJhcmdzIiBUeXBlPSJBdmFoaS5FbnRyeUdyb3VwU3RhdGVBcmdzIiAvPgorICA8L1BhcmFtZXRlcnM+CisgIDxSZXR1cm5WYWx1ZT4KKyAgICA8UmV0dXJuVHlwZT5TeXN0ZW0uVm9pZDwvUmV0dXJuVHlwZT4KKyAgPC9SZXR1cm5WYWx1ZT4KKyAgPERvY3M+CisgICAgPHBhcmFtIG5hbWU9Im8iPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgPHBhcmFtIG5hbWU9ImFyZ3MiPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgPC9Eb2NzPgorPC9UeXBlPgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL2VuL0F2YWhpL0Vycm9yQ29kZS54bWwgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvZW4vQXZhaGkvRXJyb3JDb2RlLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODdmNTI0Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL2VuL0F2YWhpL0Vycm9yQ29kZS54bWwKQEAgLTAsMCArMSw1MjYgQEAKKzxUeXBlIE5hbWU9IkVycm9yQ29kZSIgRnVsbE5hbWU9IkF2YWhpLkVycm9yQ29kZSI+CisgIDxUeXBlU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBlbnVtIEVycm9yQ29kZSIgLz4KKyAgPEFzc2VtYmx5SW5mbz4KKyAgICA8QXNzZW1ibHlOYW1lPmF2YWhpLXNoYXJwPC9Bc3NlbWJseU5hbWU+CisgICAgPEFzc2VtYmx5VmVyc2lvbj4xLjAuMC4wPC9Bc3NlbWJseVZlcnNpb24+CisgIDwvQXNzZW1ibHlJbmZvPgorICA8QmFzZT4KKyAgICA8QmFzZVR5cGVOYW1lPlN5c3RlbS5FbnVtPC9CYXNlVHlwZU5hbWU+CisgIDwvQmFzZT4KKyAgPE1lbWJlcnM+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJUb29NYW55RW50cmllcyI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9IlRvb01hbnlFbnRyaWVzIiAvPgorICAgICAgPE1lbWJlclR5cGU+RmllbGQ8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPkF2YWhpLkVycm9yQ29kZTwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iQWNjZXNzRGVuaWVkIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0iQWNjZXNzRGVuaWVkIiAvPgorICAgICAgPE1lbWJlclR5cGU+RmllbGQ8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPkF2YWhpLkVycm9yQ29kZTwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iTm90Rm91bmQiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJOb3RGb3VuZCIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkZpZWxkPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5BdmFoaS5FcnJvckNvZGU8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IlRvb01hbnlDbGllbnRzIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0iVG9vTWFueUNsaWVudHMiIC8+CisgICAgICA8TWVtYmVyVHlwZT5GaWVsZDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+QXZhaGkuRXJyb3JDb2RlPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJEbnNZeFJyU2V0Ij4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0iRG5zWXhSclNldCIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkZpZWxkPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5BdmFoaS5FcnJvckNvZGU8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IkludmFsaWRGbGFncyI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9IkludmFsaWRGbGFncyIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkZpZWxkPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5BdmFoaS5FcnJvckNvZGU8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IkJhZFN0YXRlIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0iQmFkU3RhdGUiIC8+CisgICAgICA8TWVtYmVyVHlwZT5GaWVsZDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+QXZhaGkuRXJyb3JDb2RlPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJEbnNOeERvbWFpbiI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9IkRuc054RG9tYWluIiAvPgorICAgICAgPE1lbWJlclR5cGU+RmllbGQ8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPkF2YWhpLkVycm9yQ29kZTwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iVG9vTWFueU9iamVjdHMiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJUb29NYW55T2JqZWN0cyIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkZpZWxkPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5BdmFoaS5FcnJvckNvZGU8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IkludmFsaWRPYmplY3QiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJJbnZhbGlkT2JqZWN0IiAvPgorICAgICAgPE1lbWJlclR5cGU+RmllbGQ8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPkF2YWhpLkVycm9yQ29kZTwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iRG5zU2VydkZhaWwiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJEbnNTZXJ2RmFpbCIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkZpZWxkPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5BdmFoaS5FcnJvckNvZGU8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IkRpc2Nvbm5lY3RlZCI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9IkRpc2Nvbm5lY3RlZCIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkZpZWxkPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5BdmFoaS5FcnJvckNvZGU8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IkludmFsaWRQb3J0Ij4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0iSW52YWxpZFBvcnQiIC8+CisgICAgICA8TWVtYmVyVHlwZT5GaWVsZDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+QXZhaGkuRXJyb3JDb2RlPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJDb2xsaXNpb24iPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJDb2xsaXNpb24iIC8+CisgICAgICA8TWVtYmVyVHlwZT5GaWVsZDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+QXZhaGkuRXJyb3JDb2RlPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJJbnZhbGlkVFRMIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0iSW52YWxpZFRUTCIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkZpZWxkPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5BdmFoaS5FcnJvckNvZGU8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9Ik5vTmV0d29yayI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9Ik5vTmV0d29yayIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkZpZWxkPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5BdmFoaS5FcnJvckNvZGU8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IkludmFsaWRPcGVyYXRpb24iPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJJbnZhbGlkT3BlcmF0aW9uIiAvPgorICAgICAgPE1lbWJlclR5cGU+RmllbGQ8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPkF2YWhpLkVycm9yQ29kZTwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iTm90UGVybWl0dGVkIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0iTm90UGVybWl0dGVkIiAvPgorICAgICAgPE1lbWJlclR5cGU+RmllbGQ8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPkF2YWhpLkVycm9yQ29kZTwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iSW52YWxpZERuc1R5cGUiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJJbnZhbGlkRG5zVHlwZSIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkZpZWxkPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5BdmFoaS5FcnJvckNvZGU8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IkludmFsaWREbnNFcnJvciI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9IkludmFsaWREbnNFcnJvciIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkZpZWxkPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5BdmFoaS5FcnJvckNvZGU8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IkRuc05vdEF1dGgiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJEbnNOb3RBdXRoIiAvPgorICAgICAgPE1lbWJlclR5cGU+RmllbGQ8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPkF2YWhpLkVycm9yQ29kZTwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iSW52YWxpZFByb3RvY29sIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0iSW52YWxpZFByb3RvY29sIiAvPgorICAgICAgPE1lbWJlclR5cGU+RmllbGQ8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPkF2YWhpLkVycm9yQ29kZTwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iSW52YWxpZENvbmZpZyI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9IkludmFsaWRDb25maWciIC8+CisgICAgICA8TWVtYmVyVHlwZT5GaWVsZDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+QXZhaGkuRXJyb3JDb2RlPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJEbnNOb3Rab25lIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0iRG5zTm90Wm9uZSIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkZpZWxkPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5BdmFoaS5FcnJvckNvZGU8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9Ik9rIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0iT2siIC8+CisgICAgICA8TWVtYmVyVHlwZT5GaWVsZDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+QXZhaGkuRXJyb3JDb2RlPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJJbnZhbGlkU2VydmljZVN1YnR5cGUiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJJbnZhbGlkU2VydmljZVN1YnR5cGUiIC8+CisgICAgICA8TWVtYmVyVHlwZT5GaWVsZDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+QXZhaGkuRXJyb3JDb2RlPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJEbnNOeFJyU2V0Ij4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0iRG5zTnhSclNldCIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkZpZWxkPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5BdmFoaS5FcnJvckNvZGU8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IkludmFsaWRTZXJ2aWNlVHlwZSI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9IkludmFsaWRTZXJ2aWNlVHlwZSIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkZpZWxkPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5BdmFoaS5FcnJvckNvZGU8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IkRuc0Zvcm1FcnIiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJEbnNGb3JtRXJyIiAvPgorICAgICAgPE1lbWJlclR5cGU+RmllbGQ8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPkF2YWhpLkVycm9yQ29kZTwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iSXNQYXR0ZXJuIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0iSXNQYXR0ZXJuIiAvPgorICAgICAgPE1lbWJlclR5cGU+RmllbGQ8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPkF2YWhpLkVycm9yQ29kZTwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iSW52YWxpZFBhY2tldCI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9IkludmFsaWRQYWNrZXQiIC8+CisgICAgICA8TWVtYmVyVHlwZT5GaWVsZDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+QXZhaGkuRXJyb3JDb2RlPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJJbnZhbGlkUmVjb3JkIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0iSW52YWxpZFJlY29yZCIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkZpZWxkPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5BdmFoaS5FcnJvckNvZGU8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IkludmFsaWRLZXkiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJJbnZhbGlkS2V5IiAvPgorICAgICAgPE1lbWJlclR5cGU+RmllbGQ8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPkF2YWhpLkVycm9yQ29kZTwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iSW52YWxpZFJEYXRhIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0iSW52YWxpZFJEYXRhIiAvPgorICAgICAgPE1lbWJlclR5cGU+RmllbGQ8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPkF2YWhpLkVycm9yQ29kZTwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iVmVyc2lvbk1pc21hdGNoIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0iVmVyc2lvbk1pc21hdGNoIiAvPgorICAgICAgPE1lbWJlclR5cGU+RmllbGQ8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPkF2YWhpLkVycm9yQ29kZTwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iRG5zUmVmdXNlZCI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9IkRuc1JlZnVzZWQiIC8+CisgICAgICA8TWVtYmVyVHlwZT5GaWVsZDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+QXZhaGkuRXJyb3JDb2RlPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJJbnZhbGlkU2VydmljZU5hbWUiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJJbnZhbGlkU2VydmljZU5hbWUiIC8+CisgICAgICA8TWVtYmVyVHlwZT5GaWVsZDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+QXZhaGkuRXJyb3JDb2RlPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJJbnZhbGlkSG9zdE5hbWUiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJJbnZhbGlkSG9zdE5hbWUiIC8+CisgICAgICA8TWVtYmVyVHlwZT5GaWVsZDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+QXZhaGkuRXJyb3JDb2RlPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJJbnZhbGlkQWRkcmVzcyI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9IkludmFsaWRBZGRyZXNzIiAvPgorICAgICAgPE1lbWJlclR5cGU+RmllbGQ8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPkF2YWhpLkVycm9yQ29kZTwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iTm9EYWVtb24iPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJOb0RhZW1vbiIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkZpZWxkPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5BdmFoaS5FcnJvckNvZGU8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IkludmFsaWRJbnRlcmZhY2UiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJJbnZhbGlkSW50ZXJmYWNlIiAvPgorICAgICAgPE1lbWJlclR5cGU+RmllbGQ8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPkF2YWhpLkVycm9yQ29kZTwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iRmFpbHVyZSI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9IkZhaWx1cmUiIC8+CisgICAgICA8TWVtYmVyVHlwZT5GaWVsZDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+QXZhaGkuRXJyb3JDb2RlPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJEbnNZeERvbWFpbiI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9IkRuc1l4RG9tYWluIiAvPgorICAgICAgPE1lbWJlclR5cGU+RmllbGQ8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPkF2YWhpLkVycm9yQ29kZTwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iTm90U3VwcG9ydGVkIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0iTm90U3VwcG9ydGVkIiAvPgorICAgICAgPE1lbWJlclR5cGU+RmllbGQ8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPkF2YWhpLkVycm9yQ29kZTwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iTm9NZW1vcnkiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJOb01lbW9yeSIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkZpZWxkPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5BdmFoaS5FcnJvckNvZGU8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IlRpbWVvdXQiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJUaW1lb3V0IiAvPgorICAgICAgPE1lbWJlclR5cGU+RmllbGQ8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPkF2YWhpLkVycm9yQ29kZTwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iSW52YWxpZERuc0NsYXNzIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0iSW52YWxpZERuc0NsYXNzIiAvPgorICAgICAgPE1lbWJlclR5cGU+RmllbGQ8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPkF2YWhpLkVycm9yQ29kZTwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iREJ1c0Vycm9yIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0iREJ1c0Vycm9yIiAvPgorICAgICAgPE1lbWJlclR5cGU+RmllbGQ8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPkF2YWhpLkVycm9yQ29kZTwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iRG5zTm9UaW1wIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0iRG5zTm9UaW1wIiAvPgorICAgICAgPE1lbWJlclR5cGU+RmllbGQ8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPkF2YWhpLkVycm9yQ29kZTwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iT1MiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJPUyIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkZpZWxkPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5BdmFoaS5FcnJvckNvZGU8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IkludmFsaWREb21haW5OYW1lIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0iSW52YWxpZERvbWFpbk5hbWUiIC8+CisgICAgICA8TWVtYmVyVHlwZT5GaWVsZDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+QXZhaGkuRXJyb3JDb2RlPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgIDwvTWVtYmVycz4KKyAgPERvY3M+CisgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgPC9Eb2NzPgorPC9UeXBlPgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL2VuL0F2YWhpL0Vycm9yQ29kZUFyZ3MueG1sIGIvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL2VuL0F2YWhpL0Vycm9yQ29kZUFyZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4YTdjY2MKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvZW4vQXZhaGkvRXJyb3JDb2RlQXJncy54bWwKQEAgLTAsMCArMSw0MSBAQAorPFR5cGUgTmFtZT0iRXJyb3JDb2RlQXJncyIgRnVsbE5hbWU9IkF2YWhpLkVycm9yQ29kZUFyZ3MiPgorICA8VHlwZVNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgY2xhc3MgRXJyb3JDb2RlQXJncyA6IFN5c3RlbS5FdmVudEFyZ3MiIC8+CisgIDxBc3NlbWJseUluZm8+CisgICAgPEFzc2VtYmx5TmFtZT5hdmFoaS1zaGFycDwvQXNzZW1ibHlOYW1lPgorICAgIDxBc3NlbWJseVZlcnNpb24+MS4wLjAuMDwvQXNzZW1ibHlWZXJzaW9uPgorICA8L0Fzc2VtYmx5SW5mbz4KKyAgPEJhc2U+CisgICAgPEJhc2VUeXBlTmFtZT5TeXN0ZW0uRXZlbnRBcmdzPC9CYXNlVHlwZU5hbWU+CisgIDwvQmFzZT4KKyAgPEludGVyZmFjZXMgLz4KKyAgPE1lbWJlcnM+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSIuY3RvciI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBFcnJvckNvZGVBcmdzIChBdmFoaS5FcnJvckNvZGUgY29kZSk7IiAvPgorICAgICAgPE1lbWJlclR5cGU+Q29uc3RydWN0b3I8L01lbWJlclR5cGU+CisgICAgICA8UGFyYW1ldGVycz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJjb2RlIiBUeXBlPSJBdmFoaS5FcnJvckNvZGUiIC8+CisgICAgICA8L1BhcmFtZXRlcnM+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImNvZGUiPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iRXJyb3JDb2RlIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIEF2YWhpLkVycm9yQ29kZSBFcnJvckNvZGUgeyBnZXQ7IH07IiAvPgorICAgICAgPE1lbWJlclR5cGU+UHJvcGVydHk8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPkF2YWhpLkVycm9yQ29kZTwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8dmFsdWU+VG8gYmUgYWRkZWQuPC92YWx1ZT4KKyAgICAgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICA8L01lbWJlcnM+CisgIDxEb2NzPgorICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgIDwvRG9jcz4KKzwvVHlwZT4KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9lbi9BdmFoaS9FcnJvckNvZGVIYW5kbGVyLnhtbCBiL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9lbi9BdmFoaS9FcnJvckNvZGVIYW5kbGVyLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGUyMmQzCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL2VuL0F2YWhpL0Vycm9yQ29kZUhhbmRsZXIueG1sCkBAIC0wLDAgKzEsMjMgQEAKKzxUeXBlIE5hbWU9IkVycm9yQ29kZUhhbmRsZXIiIEZ1bGxOYW1lPSJBdmFoaS5FcnJvckNvZGVIYW5kbGVyIj4KKyAgPFR5cGVTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIGRlbGVnYXRlIHZvaWQgRXJyb3JDb2RlSGFuZGxlcihvYmplY3QgbywgQXZhaGkuRXJyb3JDb2RlQXJncyBhcmdzKTsiIC8+CisgIDxBc3NlbWJseUluZm8+CisgICAgPEFzc2VtYmx5TmFtZT5hdmFoaS1zaGFycDwvQXNzZW1ibHlOYW1lPgorICAgIDxBc3NlbWJseVZlcnNpb24+MS4wLjAuMDwvQXNzZW1ibHlWZXJzaW9uPgorICA8L0Fzc2VtYmx5SW5mbz4KKyAgPEJhc2U+CisgICAgPEJhc2VUeXBlTmFtZT5TeXN0ZW0uRGVsZWdhdGU8L0Jhc2VUeXBlTmFtZT4KKyAgPC9CYXNlPgorICA8UGFyYW1ldGVycz4KKyAgICA8UGFyYW1ldGVyIE5hbWU9Im8iIFR5cGU9IlN5c3RlbS5PYmplY3QiIC8+CisgICAgPFBhcmFtZXRlciBOYW1lPSJhcmdzIiBUeXBlPSJBdmFoaS5FcnJvckNvZGVBcmdzIiAvPgorICA8L1BhcmFtZXRlcnM+CisgIDxSZXR1cm5WYWx1ZT4KKyAgICA8UmV0dXJuVHlwZT5TeXN0ZW0uVm9pZDwvUmV0dXJuVHlwZT4KKyAgPC9SZXR1cm5WYWx1ZT4KKyAgPERvY3M+CisgICAgPHBhcmFtIG5hbWU9Im8iPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgPHBhcmFtIG5hbWU9ImFyZ3MiPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgPC9Eb2NzPgorPC9UeXBlPgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL2VuL0F2YWhpL0hvc3RBZGRyZXNzQXJncy54bWwgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvZW4vQXZhaGkvSG9zdEFkZHJlc3NBcmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjEyNmUzCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL2VuL0F2YWhpL0hvc3RBZGRyZXNzQXJncy54bWwKQEAgLTAsMCArMSw1NSBAQAorPFR5cGUgTmFtZT0iSG9zdEFkZHJlc3NBcmdzIiBGdWxsTmFtZT0iQXZhaGkuSG9zdEFkZHJlc3NBcmdzIj4KKyAgPFR5cGVTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIGNsYXNzIEhvc3RBZGRyZXNzQXJncyA6IFN5c3RlbS5FdmVudEFyZ3MiIC8+CisgIDxBc3NlbWJseUluZm8+CisgICAgPEFzc2VtYmx5TmFtZT5hdmFoaS1zaGFycDwvQXNzZW1ibHlOYW1lPgorICAgIDxBc3NlbWJseVZlcnNpb24+MS4wLjAuMDwvQXNzZW1ibHlWZXJzaW9uPgorICA8L0Fzc2VtYmx5SW5mbz4KKyAgPEJhc2U+CisgICAgPEJhc2VUeXBlTmFtZT5TeXN0ZW0uRXZlbnRBcmdzPC9CYXNlVHlwZU5hbWU+CisgIDwvQmFzZT4KKyAgPEludGVyZmFjZXMgLz4KKyAgPE1lbWJlcnM+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSIuY3RvciI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBIb3N0QWRkcmVzc0FyZ3MgKHN0cmluZyBob3N0LCBTeXN0ZW0uTmV0LklQQWRkcmVzcyBhZGRyZXNzKTsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5Db25zdHJ1Y3RvcjwvTWVtYmVyVHlwZT4KKyAgICAgIDxQYXJhbWV0ZXJzPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9Imhvc3QiIFR5cGU9IlN5c3RlbS5TdHJpbmciIC8+CisgICAgICAgIDxQYXJhbWV0ZXIgTmFtZT0iYWRkcmVzcyIgVHlwZT0iU3lzdGVtLk5ldC5JUEFkZHJlc3MiIC8+CisgICAgICA8L1BhcmFtZXRlcnM+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHBhcmFtIG5hbWU9Imhvc3QiPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgICAgIDxwYXJhbSBuYW1lPSJhZGRyZXNzIj5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9Ikhvc3QiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgc3RyaW5nIEhvc3QgeyBnZXQ7IH07IiAvPgorICAgICAgPE1lbWJlclR5cGU+UHJvcGVydHk8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPlN5c3RlbS5TdHJpbmc8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgICAgPHZhbHVlPlRvIGJlIGFkZGVkLjwvdmFsdWU+CisgICAgICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IkFkZHJlc3MiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgU3lzdGVtLk5ldC5JUEFkZHJlc3MgQWRkcmVzcyB7IGdldDsgfTsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5Qcm9wZXJ0eTwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+U3lzdGVtLk5ldC5JUEFkZHJlc3M8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgICAgPHZhbHVlPlRvIGJlIGFkZGVkLjwvdmFsdWU+CisgICAgICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgPC9NZW1iZXJzPgorICA8RG9jcz4KKyAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICA8L0RvY3M+Cis8L1R5cGU+CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvZW4vQXZhaGkvSG9zdEFkZHJlc3NIYW5kbGVyLnhtbCBiL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9lbi9BdmFoaS9Ib3N0QWRkcmVzc0hhbmRsZXIueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwYzE5NWUKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvZW4vQXZhaGkvSG9zdEFkZHJlc3NIYW5kbGVyLnhtbApAQCAtMCwwICsxLDIzIEBACis8VHlwZSBOYW1lPSJIb3N0QWRkcmVzc0hhbmRsZXIiIEZ1bGxOYW1lPSJBdmFoaS5Ib3N0QWRkcmVzc0hhbmRsZXIiPgorICA8VHlwZVNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgZGVsZWdhdGUgdm9pZCBIb3N0QWRkcmVzc0hhbmRsZXIob2JqZWN0IG8sIEF2YWhpLkhvc3RBZGRyZXNzQXJncyBhcmdzKTsiIC8+CisgIDxBc3NlbWJseUluZm8+CisgICAgPEFzc2VtYmx5TmFtZT5hdmFoaS1zaGFycDwvQXNzZW1ibHlOYW1lPgorICAgIDxBc3NlbWJseVZlcnNpb24+MS4wLjAuMDwvQXNzZW1ibHlWZXJzaW9uPgorICA8L0Fzc2VtYmx5SW5mbz4KKyAgPEJhc2U+CisgICAgPEJhc2VUeXBlTmFtZT5TeXN0ZW0uRGVsZWdhdGU8L0Jhc2VUeXBlTmFtZT4KKyAgPC9CYXNlPgorICA8UGFyYW1ldGVycz4KKyAgICA8UGFyYW1ldGVyIE5hbWU9Im8iIFR5cGU9IlN5c3RlbS5PYmplY3QiIC8+CisgICAgPFBhcmFtZXRlciBOYW1lPSJhcmdzIiBUeXBlPSJBdmFoaS5Ib3N0QWRkcmVzc0FyZ3MiIC8+CisgIDwvUGFyYW1ldGVycz4KKyAgPFJldHVyblZhbHVlPgorICAgIDxSZXR1cm5UeXBlPlN5c3RlbS5Wb2lkPC9SZXR1cm5UeXBlPgorICA8L1JldHVyblZhbHVlPgorICA8RG9jcz4KKyAgICA8cGFyYW0gbmFtZT0ibyI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICA8cGFyYW0gbmFtZT0iYXJncyI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICA8L0RvY3M+Cis8L1R5cGU+CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvZW4vQXZhaGkvSG9zdE5hbWVSZXNvbHZlci54bWwgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvZW4vQXZhaGkvSG9zdE5hbWVSZXNvbHZlci54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzcxMjRmZAotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9lbi9BdmFoaS9Ib3N0TmFtZVJlc29sdmVyLnhtbApAQCAtMCwwICsxLDExNSBAQAorPFR5cGUgTmFtZT0iSG9zdE5hbWVSZXNvbHZlciIgRnVsbE5hbWU9IkF2YWhpLkhvc3ROYW1lUmVzb2x2ZXIiPgorICA8VHlwZVNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgY2xhc3MgSG9zdE5hbWVSZXNvbHZlciA6IEF2YWhpLlJlc29sdmVyQmFzZSwgU3lzdGVtLklEaXNwb3NhYmxlIiAvPgorICA8QXNzZW1ibHlJbmZvPgorICAgIDxBc3NlbWJseU5hbWU+YXZhaGktc2hhcnA8L0Fzc2VtYmx5TmFtZT4KKyAgICA8QXNzZW1ibHlWZXJzaW9uPjEuMC4wLjA8L0Fzc2VtYmx5VmVyc2lvbj4KKyAgPC9Bc3NlbWJseUluZm8+CisgIDxCYXNlPgorICAgIDxCYXNlVHlwZU5hbWU+QXZhaGkuUmVzb2x2ZXJCYXNlPC9CYXNlVHlwZU5hbWU+CisgIDwvQmFzZT4KKyAgPEludGVyZmFjZXM+CisgICAgPEludGVyZmFjZT4KKyAgICAgIDxJbnRlcmZhY2VOYW1lPlN5c3RlbS5JRGlzcG9zYWJsZTwvSW50ZXJmYWNlTmFtZT4KKyAgICA8L0ludGVyZmFjZT4KKyAgPC9JbnRlcmZhY2VzPgorICA8TWVtYmVycz4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9Ii5jdG9yIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIEhvc3ROYW1lUmVzb2x2ZXIgKEF2YWhpLkNsaWVudCBjbGllbnQsIHN0cmluZyBob3N0bmFtZSk7IiAvPgorICAgICAgPE1lbWJlclR5cGU+Q29uc3RydWN0b3I8L01lbWJlclR5cGU+CisgICAgICA8UGFyYW1ldGVycz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJjbGllbnQiIFR5cGU9IkF2YWhpLkNsaWVudCIgLz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJob3N0bmFtZSIgVHlwZT0iU3lzdGVtLlN0cmluZyIgLz4KKyAgICAgIDwvUGFyYW1ldGVycz4KKyAgICAgIDxEb2NzPgorICAgICAgICA8cGFyYW0gbmFtZT0iY2xpZW50Ij5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8cGFyYW0gbmFtZT0iaG9zdG5hbWUiPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iRm91bmQiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgZXZlbnQgQXZhaGkuSG9zdEFkZHJlc3NIYW5kbGVyIEZvdW5kOyIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkV2ZW50PC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5BdmFoaS5Ib3N0QWRkcmVzc0hhbmRsZXI8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iVGltZW91dCI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBldmVudCBFdmVudEhhbmRsZXIgVGltZW91dDsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5FdmVudDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+U3lzdGVtLkV2ZW50SGFuZGxlcjwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJEaXNwb3NlIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIHZvaWQgRGlzcG9zZSAoKTsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5NZXRob2Q8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPlN5c3RlbS5Wb2lkPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxQYXJhbWV0ZXJzIC8+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJBZGRyZXNzIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIFN5c3RlbS5OZXQuSVBBZGRyZXNzIEFkZHJlc3MgeyBnZXQ7IH07IiAvPgorICAgICAgPE1lbWJlclR5cGU+UHJvcGVydHk8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPlN5c3RlbS5OZXQuSVBBZGRyZXNzPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICAgIDx2YWx1ZT5UbyBiZSBhZGRlZC48L3ZhbHVlPgorICAgICAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJIb3N0TmFtZSI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBzdHJpbmcgSG9zdE5hbWUgeyBnZXQ7IH07IiAvPgorICAgICAgPE1lbWJlclR5cGU+UHJvcGVydHk8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPlN5c3RlbS5TdHJpbmc8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgICAgPHZhbHVlPlRvIGJlIGFkZGVkLjwvdmFsdWU+CisgICAgICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9Ii5jdG9yIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIEhvc3ROYW1lUmVzb2x2ZXIgKEF2YWhpLkNsaWVudCBjbGllbnQsIGludCBpZmFjZSwgQXZhaGkuUHJvdG9jb2wgcHJvdG8sIHN0cmluZyBob3N0bmFtZSwgQXZhaGkuUHJvdG9jb2wgYXByb3RvLCBBdmFoaS5Mb29rdXBGbGFncyBmbGFncyk7IiAvPgorICAgICAgPE1lbWJlclR5cGU+Q29uc3RydWN0b3I8L01lbWJlclR5cGU+CisgICAgICA8UGFyYW1ldGVycz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJjbGllbnQiIFR5cGU9IkF2YWhpLkNsaWVudCIgLz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJpZmFjZSIgVHlwZT0iU3lzdGVtLkludDMyIiAvPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9InByb3RvIiBUeXBlPSJBdmFoaS5Qcm90b2NvbCIgLz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJob3N0bmFtZSIgVHlwZT0iU3lzdGVtLlN0cmluZyIgLz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJhcHJvdG8iIFR5cGU9IkF2YWhpLlByb3RvY29sIiAvPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9ImZsYWdzIiBUeXBlPSJBdmFoaS5Mb29rdXBGbGFncyIgLz4KKyAgICAgIDwvUGFyYW1ldGVycz4KKyAgICAgIDxEb2NzPgorICAgICAgICA8cGFyYW0gbmFtZT0iY2xpZW50Ij5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8cGFyYW0gbmFtZT0iaWZhY2UiPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgICAgIDxwYXJhbSBuYW1lPSJwcm90byI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHBhcmFtIG5hbWU9Imhvc3RuYW1lIj5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8cGFyYW0gbmFtZT0iYXByb3RvIj5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8cGFyYW0gbmFtZT0iZmxhZ3MiPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICA8L01lbWJlcnM+CisgIDxEb2NzPgorICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgIDwvRG9jcz4KKzwvVHlwZT4KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9lbi9BdmFoaS9Mb29rdXBGbGFncy54bWwgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvZW4vQXZhaGkvTG9va3VwRmxhZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ODgyZTAKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvZW4vQXZhaGkvTG9va3VwRmxhZ3MueG1sCkBAIC0wLDAgKzEsNzEgQEAKKzxUeXBlIE5hbWU9Ikxvb2t1cEZsYWdzIiBGdWxsTmFtZT0iQXZhaGkuTG9va3VwRmxhZ3MiPgorICA8VHlwZVNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgZW51bSBMb29rdXBGbGFncyIgLz4KKyAgPEFzc2VtYmx5SW5mbz4KKyAgICA8QXNzZW1ibHlOYW1lPmF2YWhpLXNoYXJwPC9Bc3NlbWJseU5hbWU+CisgICAgPEFzc2VtYmx5VmVyc2lvbj4xLjAuMC4wPC9Bc3NlbWJseVZlcnNpb24+CisgIDwvQXNzZW1ibHlJbmZvPgorICA8QmFzZT4KKyAgICA8QmFzZVR5cGVOYW1lPlN5c3RlbS5FbnVtPC9CYXNlVHlwZU5hbWU+CisgIDwvQmFzZT4KKyAgPEF0dHJpYnV0ZXM+CisgICAgPEF0dHJpYnV0ZT4KKyAgICAgIDxBdHRyaWJ1dGVOYW1lPlN5c3RlbS5GbGFnczwvQXR0cmlidXRlTmFtZT4KKyAgICA8L0F0dHJpYnV0ZT4KKyAgPC9BdHRyaWJ1dGVzPgorICA8TWVtYmVycz4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IlVzZU11bHRpY2FzdCI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9IlVzZU11bHRpY2FzdCIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkZpZWxkPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5BdmFoaS5Mb29rdXBGbGFnczwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iVXNlV2lkZUFyZWEiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJVc2VXaWRlQXJlYSIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkZpZWxkPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5BdmFoaS5Mb29rdXBGbGFnczwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iTm9BZGRyZXNzIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0iTm9BZGRyZXNzIiAvPgorICAgICAgPE1lbWJlclR5cGU+RmllbGQ8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPkF2YWhpLkxvb2t1cEZsYWdzPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJOb25lIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0iTm9uZSIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkZpZWxkPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5BdmFoaS5Mb29rdXBGbGFnczwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iTm9UeHQiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJOb1R4dCIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkZpZWxkPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5BdmFoaS5Mb29rdXBGbGFnczwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICA8L01lbWJlcnM+CisgIDxEb2NzPgorICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgIDwvRG9jcz4KKzwvVHlwZT4KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9lbi9BdmFoaS9Mb29rdXBSZXN1bHRGbGFncy54bWwgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvZW4vQXZhaGkvTG9va3VwUmVzdWx0RmxhZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwNjY0OTMKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvZW4vQXZhaGkvTG9va3VwUmVzdWx0RmxhZ3MueG1sCkBAIC0wLDAgKzEsODEgQEAKKzxUeXBlIE5hbWU9Ikxvb2t1cFJlc3VsdEZsYWdzIiBGdWxsTmFtZT0iQXZhaGkuTG9va3VwUmVzdWx0RmxhZ3MiPgorICA8VHlwZVNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgZW51bSBMb29rdXBSZXN1bHRGbGFncyIgLz4KKyAgPEFzc2VtYmx5SW5mbz4KKyAgICA8QXNzZW1ibHlOYW1lPmF2YWhpLXNoYXJwPC9Bc3NlbWJseU5hbWU+CisgICAgPEFzc2VtYmx5VmVyc2lvbj4xLjAuMC4wPC9Bc3NlbWJseVZlcnNpb24+CisgIDwvQXNzZW1ibHlJbmZvPgorICA8QmFzZT4KKyAgICA8QmFzZVR5cGVOYW1lPlN5c3RlbS5FbnVtPC9CYXNlVHlwZU5hbWU+CisgIDwvQmFzZT4KKyAgPEF0dHJpYnV0ZXM+CisgICAgPEF0dHJpYnV0ZT4KKyAgICAgIDxBdHRyaWJ1dGVOYW1lPlN5c3RlbS5GbGFnczwvQXR0cmlidXRlTmFtZT4KKyAgICA8L0F0dHJpYnV0ZT4KKyAgPC9BdHRyaWJ1dGVzPgorICA8TWVtYmVycz4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9Ik11bHRpY2FzdCI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9Ik11bHRpY2FzdCIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkZpZWxkPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5BdmFoaS5Mb29rdXBSZXN1bHRGbGFnczwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iV2lkZUFyZWEiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJXaWRlQXJlYSIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkZpZWxkPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5BdmFoaS5Mb29rdXBSZXN1bHRGbGFnczwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iQ2FjaGVkIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0iQ2FjaGVkIiAvPgorICAgICAgPE1lbWJlclR5cGU+RmllbGQ8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPkF2YWhpLkxvb2t1cFJlc3VsdEZsYWdzPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJOb25lIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0iTm9uZSIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkZpZWxkPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5BdmFoaS5Mb29rdXBSZXN1bHRGbGFnczwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iTG9jYWwiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJMb2NhbCIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkZpZWxkPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5BdmFoaS5Mb29rdXBSZXN1bHRGbGFnczwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iT3VyT3duIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0iT3VyT3duIiAvPgorICAgICAgPE1lbWJlclR5cGU+RmllbGQ8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPkF2YWhpLkxvb2t1cFJlc3VsdEZsYWdzPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgIDwvTWVtYmVycz4KKyAgPERvY3M+CisgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgPC9Eb2NzPgorPC9UeXBlPgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL2VuL0F2YWhpL1Byb3RvY29sLnhtbCBiL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9lbi9BdmFoaS9Qcm90b2NvbC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzYxZjAzNAotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9lbi9BdmFoaS9Qcm90b2NvbC54bWwKQEAgLTAsMCArMSw0NiBAQAorPFR5cGUgTmFtZT0iUHJvdG9jb2wiIEZ1bGxOYW1lPSJBdmFoaS5Qcm90b2NvbCI+CisgIDxUeXBlU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBlbnVtIFByb3RvY29sIiAvPgorICA8QXNzZW1ibHlJbmZvPgorICAgIDxBc3NlbWJseU5hbWU+YXZhaGktc2hhcnA8L0Fzc2VtYmx5TmFtZT4KKyAgICA8QXNzZW1ibHlWZXJzaW9uPjEuMC4wLjA8L0Fzc2VtYmx5VmVyc2lvbj4KKyAgPC9Bc3NlbWJseUluZm8+CisgIDxCYXNlPgorICAgIDxCYXNlVHlwZU5hbWU+U3lzdGVtLkVudW08L0Jhc2VUeXBlTmFtZT4KKyAgPC9CYXNlPgorICA8TWVtYmVycz4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IklQdjQiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJJUHY0IiAvPgorICAgICAgPE1lbWJlclR5cGU+RmllbGQ8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPkF2YWhpLlByb3RvY29sPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJVbnNwZWNpZmllZCI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9IlVuc3BlY2lmaWVkIiAvPgorICAgICAgPE1lbWJlclR5cGU+RmllbGQ8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPkF2YWhpLlByb3RvY29sPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJJUHY2Ij4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0iSVB2NiIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkZpZWxkPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5BdmFoaS5Qcm90b2NvbDwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICA8L01lbWJlcnM+CisgIDxEb2NzPgorICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgIDwvRG9jcz4KKzwvVHlwZT4KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9lbi9BdmFoaS9QdWJsaXNoRmxhZ3MueG1sIGIvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL2VuL0F2YWhpL1B1Ymxpc2hGbGFncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIxNzc0YwotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9lbi9BdmFoaS9QdWJsaXNoRmxhZ3MueG1sCkBAIC0wLDAgKzEsMTIxIEBACis8VHlwZSBOYW1lPSJQdWJsaXNoRmxhZ3MiIEZ1bGxOYW1lPSJBdmFoaS5QdWJsaXNoRmxhZ3MiPgorICA8VHlwZVNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgZW51bSBQdWJsaXNoRmxhZ3MiIC8+CisgIDxBc3NlbWJseUluZm8+CisgICAgPEFzc2VtYmx5TmFtZT5hdmFoaS1zaGFycDwvQXNzZW1ibHlOYW1lPgorICAgIDxBc3NlbWJseVZlcnNpb24+MS4wLjAuMDwvQXNzZW1ibHlWZXJzaW9uPgorICA8L0Fzc2VtYmx5SW5mbz4KKyAgPEJhc2U+CisgICAgPEJhc2VUeXBlTmFtZT5TeXN0ZW0uRW51bTwvQmFzZVR5cGVOYW1lPgorICA8L0Jhc2U+CisgIDxBdHRyaWJ1dGVzPgorICAgIDxBdHRyaWJ1dGU+CisgICAgICA8QXR0cmlidXRlTmFtZT5TeXN0ZW0uRmxhZ3M8L0F0dHJpYnV0ZU5hbWU+CisgICAgPC9BdHRyaWJ1dGU+CisgIDwvQXR0cmlidXRlcz4KKyAgPE1lbWJlcnM+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJVc2VNdWx0aWNhc3QiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJVc2VNdWx0aWNhc3QiIC8+CisgICAgICA8TWVtYmVyVHlwZT5GaWVsZDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+QXZhaGkuUHVibGlzaEZsYWdzPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJVcGRhdGUiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJVcGRhdGUiIC8+CisgICAgICA8TWVtYmVyVHlwZT5GaWVsZDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+QXZhaGkuUHVibGlzaEZsYWdzPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJBbGxvd011bHRpcGxlIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0iQWxsb3dNdWx0aXBsZSIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkZpZWxkPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5BdmFoaS5QdWJsaXNoRmxhZ3M8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IlVzZVdpZGVBcmVhIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0iVXNlV2lkZUFyZWEiIC8+CisgICAgICA8TWVtYmVyVHlwZT5GaWVsZDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+QXZhaGkuUHVibGlzaEZsYWdzPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJVbmlxdWUiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJVbmlxdWUiIC8+CisgICAgICA8TWVtYmVyVHlwZT5GaWVsZDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+QXZhaGkuUHVibGlzaEZsYWdzPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJOb1JldmVyc2UiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJOb1JldmVyc2UiIC8+CisgICAgICA8TWVtYmVyVHlwZT5GaWVsZDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+QXZhaGkuUHVibGlzaEZsYWdzPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJOb25lIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0iTm9uZSIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkZpZWxkPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5BdmFoaS5QdWJsaXNoRmxhZ3M8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9Ik5vQ29va2llIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0iTm9Db29raWUiIC8+CisgICAgICA8TWVtYmVyVHlwZT5GaWVsZDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+QXZhaGkuUHVibGlzaEZsYWdzPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJOb1Byb2JlIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0iTm9Qcm9iZSIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkZpZWxkPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5BdmFoaS5QdWJsaXNoRmxhZ3M8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9Ik5vQW5ub3VuY2UiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJOb0Fubm91bmNlIiAvPgorICAgICAgPE1lbWJlclR5cGU+RmllbGQ8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPkF2YWhpLlB1Ymxpc2hGbGFnczwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICA8L01lbWJlcnM+CisgIDxEb2NzPgorICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgIDwvRG9jcz4KKzwvVHlwZT4KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9lbi9BdmFoaS9SZWNvcmRCcm93c2VyLnhtbCBiL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9lbi9BdmFoaS9SZWNvcmRCcm93c2VyLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGYzMmNhCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL2VuL0F2YWhpL1JlY29yZEJyb3dzZXIueG1sCkBAIC0wLDAgKzEsMTA3IEBACis8VHlwZSBOYW1lPSJSZWNvcmRCcm93c2VyIiBGdWxsTmFtZT0iQXZhaGkuUmVjb3JkQnJvd3NlciI+CisgIDxUeXBlU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBjbGFzcyBSZWNvcmRCcm93c2VyIDogQXZhaGkuQnJvd3NlckJhc2UsIFN5c3RlbS5JRGlzcG9zYWJsZSIgLz4KKyAgPEFzc2VtYmx5SW5mbz4KKyAgICA8QXNzZW1ibHlOYW1lPmF2YWhpLXNoYXJwPC9Bc3NlbWJseU5hbWU+CisgICAgPEFzc2VtYmx5VmVyc2lvbj4xLjAuMC4wPC9Bc3NlbWJseVZlcnNpb24+CisgIDwvQXNzZW1ibHlJbmZvPgorICA8QmFzZT4KKyAgICA8QmFzZVR5cGVOYW1lPkF2YWhpLkJyb3dzZXJCYXNlPC9CYXNlVHlwZU5hbWU+CisgIDwvQmFzZT4KKyAgPEludGVyZmFjZXM+CisgICAgPEludGVyZmFjZT4KKyAgICAgIDxJbnRlcmZhY2VOYW1lPlN5c3RlbS5JRGlzcG9zYWJsZTwvSW50ZXJmYWNlTmFtZT4KKyAgICA8L0ludGVyZmFjZT4KKyAgPC9JbnRlcmZhY2VzPgorICA8TWVtYmVycz4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9Ii5jdG9yIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIFJlY29yZEJyb3dzZXIgKEF2YWhpLkNsaWVudCBjbGllbnQsIHN0cmluZyBuYW1lLCBBdmFoaS5SZWNvcmRUeXBlIHR5cGUpOyIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkNvbnN0cnVjdG9yPC9NZW1iZXJUeXBlPgorICAgICAgPFBhcmFtZXRlcnM+CisgICAgICAgIDxQYXJhbWV0ZXIgTmFtZT0iY2xpZW50IiBUeXBlPSJBdmFoaS5DbGllbnQiIC8+CisgICAgICAgIDxQYXJhbWV0ZXIgTmFtZT0ibmFtZSIgVHlwZT0iU3lzdGVtLlN0cmluZyIgLz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJ0eXBlIiBUeXBlPSJBdmFoaS5SZWNvcmRUeXBlIiAvPgorICAgICAgPC9QYXJhbWV0ZXJzPgorICAgICAgPERvY3M+CisgICAgICAgIDxwYXJhbSBuYW1lPSJjbGllbnQiPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgICAgIDxwYXJhbSBuYW1lPSJuYW1lIj5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8cGFyYW0gbmFtZT0idHlwZSI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSIuY3RvciI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBSZWNvcmRCcm93c2VyIChBdmFoaS5DbGllbnQgY2xpZW50LCBpbnQgaWZhY2UsIEF2YWhpLlByb3RvY29sIHByb3RvLCBzdHJpbmcgbmFtZSwgQXZhaGkuUmVjb3JkQ2xhc3MgY2xhenosIEF2YWhpLlJlY29yZFR5cGUgdHlwZSwgQXZhaGkuTG9va3VwRmxhZ3MgZmxhZ3MpOyIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkNvbnN0cnVjdG9yPC9NZW1iZXJUeXBlPgorICAgICAgPFBhcmFtZXRlcnM+CisgICAgICAgIDxQYXJhbWV0ZXIgTmFtZT0iY2xpZW50IiBUeXBlPSJBdmFoaS5DbGllbnQiIC8+CisgICAgICAgIDxQYXJhbWV0ZXIgTmFtZT0iaWZhY2UiIFR5cGU9IlN5c3RlbS5JbnQzMiIgLz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJwcm90byIgVHlwZT0iQXZhaGkuUHJvdG9jb2wiIC8+CisgICAgICAgIDxQYXJhbWV0ZXIgTmFtZT0ibmFtZSIgVHlwZT0iU3lzdGVtLlN0cmluZyIgLz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJjbGF6eiIgVHlwZT0iQXZhaGkuUmVjb3JkQ2xhc3MiIC8+CisgICAgICAgIDxQYXJhbWV0ZXIgTmFtZT0idHlwZSIgVHlwZT0iQXZhaGkuUmVjb3JkVHlwZSIgLz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJmbGFncyIgVHlwZT0iQXZhaGkuTG9va3VwRmxhZ3MiIC8+CisgICAgICA8L1BhcmFtZXRlcnM+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImNsaWVudCI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImlmYWNlIj5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8cGFyYW0gbmFtZT0icHJvdG8iPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgICAgIDxwYXJhbSBuYW1lPSJuYW1lIj5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8cGFyYW0gbmFtZT0iY2xhenoiPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgICAgIDxwYXJhbSBuYW1lPSJ0eXBlIj5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8cGFyYW0gbmFtZT0iZmxhZ3MiPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iUmVjb3JkQWRkZWQiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgZXZlbnQgQXZhaGkuUmVjb3JkSW5mb0hhbmRsZXIgUmVjb3JkQWRkZWQ7IiAvPgorICAgICAgPE1lbWJlclR5cGU+RXZlbnQ8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPkF2YWhpLlJlY29yZEluZm9IYW5kbGVyPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IlJlY29yZFJlbW92ZWQiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgZXZlbnQgQXZhaGkuUmVjb3JkSW5mb0hhbmRsZXIgUmVjb3JkUmVtb3ZlZDsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5FdmVudDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+QXZhaGkuUmVjb3JkSW5mb0hhbmRsZXI8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iRGlzcG9zZSI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyB2b2lkIERpc3Bvc2UgKCk7IiAvPgorICAgICAgPE1lbWJlclR5cGU+TWV0aG9kPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5TeXN0ZW0uVm9pZDwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8UGFyYW1ldGVycyAvPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iUmVjb3JkcyI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBBdmFoaS5SZWNvcmRJbmZvW10gUmVjb3JkcyB7IGdldDsgfTsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5Qcm9wZXJ0eTwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+QXZhaGkuUmVjb3JkSW5mb1tdPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICAgIDx2YWx1ZT5UbyBiZSBhZGRlZC48L3ZhbHVlPgorICAgICAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgIDwvTWVtYmVycz4KKyAgPERvY3M+CisgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgPC9Eb2NzPgorPC9UeXBlPgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL2VuL0F2YWhpL1JlY29yZENsYXNzLnhtbCBiL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9lbi9BdmFoaS9SZWNvcmRDbGFzcy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk3ODdjZQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9lbi9BdmFoaS9SZWNvcmRDbGFzcy54bWwKQEAgLTAsMCArMSwyNiBAQAorPFR5cGUgTmFtZT0iUmVjb3JkQ2xhc3MiIEZ1bGxOYW1lPSJBdmFoaS5SZWNvcmRDbGFzcyI+CisgIDxUeXBlU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBlbnVtIFJlY29yZENsYXNzIiAvPgorICA8QXNzZW1ibHlJbmZvPgorICAgIDxBc3NlbWJseU5hbWU+YXZhaGktc2hhcnA8L0Fzc2VtYmx5TmFtZT4KKyAgICA8QXNzZW1ibHlWZXJzaW9uPjEuMC4wLjA8L0Fzc2VtYmx5VmVyc2lvbj4KKyAgPC9Bc3NlbWJseUluZm8+CisgIDxCYXNlPgorICAgIDxCYXNlVHlwZU5hbWU+U3lzdGVtLkVudW08L0Jhc2VUeXBlTmFtZT4KKyAgPC9CYXNlPgorICA8TWVtYmVycz4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IkluIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0iSW4iIC8+CisgICAgICA8TWVtYmVyVHlwZT5GaWVsZDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+QXZhaGkuUmVjb3JkQ2xhc3M8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgPC9NZW1iZXJzPgorICA8RG9jcz4KKyAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICA8L0RvY3M+Cis8L1R5cGU+CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvZW4vQXZhaGkvUmVjb3JkSW5mby54bWwgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvZW4vQXZhaGkvUmVjb3JkSW5mby54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA4Njc4ZQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9lbi9BdmFoaS9SZWNvcmRJbmZvLnhtbApAQCAtMCwwICsxLDk0IEBACis8VHlwZSBOYW1lPSJSZWNvcmRJbmZvIiBGdWxsTmFtZT0iQXZhaGkuUmVjb3JkSW5mbyI+CisgIDxUeXBlU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBzdHJ1Y3QgUmVjb3JkSW5mbyIgLz4KKyAgPEFzc2VtYmx5SW5mbz4KKyAgICA8QXNzZW1ibHlOYW1lPmF2YWhpLXNoYXJwPC9Bc3NlbWJseU5hbWU+CisgICAgPEFzc2VtYmx5VmVyc2lvbj4xLjAuMC4wPC9Bc3NlbWJseVZlcnNpb24+CisgIDwvQXNzZW1ibHlJbmZvPgorICA8QmFzZT4KKyAgICA8QmFzZVR5cGVOYW1lPlN5c3RlbS5WYWx1ZVR5cGU8L0Jhc2VUeXBlTmFtZT4KKyAgPC9CYXNlPgorICA8SW50ZXJmYWNlcyAvPgorICA8TWVtYmVycz4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9Ik5ldHdvcmtJbnRlcmZhY2UiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgaW50IE5ldHdvcmtJbnRlcmZhY2U7IiAvPgorICAgICAgPE1lbWJlclR5cGU+RmllbGQ8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPlN5c3RlbS5JbnQzMjwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJQcm90b2NvbCI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBBdmFoaS5Qcm90b2NvbCBQcm90b2NvbDsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5GaWVsZDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+QXZhaGkuUHJvdG9jb2w8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iTmFtZSI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBzdHJpbmcgTmFtZTsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5GaWVsZDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+U3lzdGVtLlN0cmluZzwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJDbGFzcyI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBBdmFoaS5SZWNvcmRDbGFzcyBDbGFzczsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5GaWVsZDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+QXZhaGkuUmVjb3JkQ2xhc3M8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iVHlwZSI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBBdmFoaS5SZWNvcmRUeXBlIFR5cGU7IiAvPgorICAgICAgPE1lbWJlclR5cGU+RmllbGQ8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPkF2YWhpLlJlY29yZFR5cGU8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iRGF0YSI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBieXRlW10gRGF0YTsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5GaWVsZDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+U3lzdGVtLkJ5dGVbXTwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJGbGFncyI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBBdmFoaS5Mb29rdXBSZXN1bHRGbGFncyBGbGFnczsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5GaWVsZDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+QXZhaGkuTG9va3VwUmVzdWx0RmxhZ3M8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICA8L01lbWJlcnM+CisgIDxEb2NzPgorICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgIDwvRG9jcz4KKzwvVHlwZT4KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9lbi9BdmFoaS9SZWNvcmRJbmZvQXJncy54bWwgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvZW4vQXZhaGkvUmVjb3JkSW5mb0FyZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxZTZlNTcKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvZW4vQXZhaGkvUmVjb3JkSW5mb0FyZ3MueG1sCkBAIC0wLDAgKzEsNDEgQEAKKzxUeXBlIE5hbWU9IlJlY29yZEluZm9BcmdzIiBGdWxsTmFtZT0iQXZhaGkuUmVjb3JkSW5mb0FyZ3MiPgorICA8VHlwZVNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgY2xhc3MgUmVjb3JkSW5mb0FyZ3MgOiBTeXN0ZW0uRXZlbnRBcmdzIiAvPgorICA8QXNzZW1ibHlJbmZvPgorICAgIDxBc3NlbWJseU5hbWU+YXZhaGktc2hhcnA8L0Fzc2VtYmx5TmFtZT4KKyAgICA8QXNzZW1ibHlWZXJzaW9uPjEuMC4wLjA8L0Fzc2VtYmx5VmVyc2lvbj4KKyAgPC9Bc3NlbWJseUluZm8+CisgIDxCYXNlPgorICAgIDxCYXNlVHlwZU5hbWU+U3lzdGVtLkV2ZW50QXJnczwvQmFzZVR5cGVOYW1lPgorICA8L0Jhc2U+CisgIDxJbnRlcmZhY2VzIC8+CisgIDxNZW1iZXJzPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iLmN0b3IiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgUmVjb3JkSW5mb0FyZ3MgKEF2YWhpLlJlY29yZEluZm8gcmVjb3JkKTsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5Db25zdHJ1Y3RvcjwvTWVtYmVyVHlwZT4KKyAgICAgIDxQYXJhbWV0ZXJzPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9InJlY29yZCIgVHlwZT0iQXZhaGkuUmVjb3JkSW5mbyIgLz4KKyAgICAgIDwvUGFyYW1ldGVycz4KKyAgICAgIDxEb2NzPgorICAgICAgICA8cGFyYW0gbmFtZT0icmVjb3JkIj5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IlJlY29yZCI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBBdmFoaS5SZWNvcmRJbmZvIFJlY29yZCB7IGdldDsgfTsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5Qcm9wZXJ0eTwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+QXZhaGkuUmVjb3JkSW5mbzwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8dmFsdWU+VG8gYmUgYWRkZWQuPC92YWx1ZT4KKyAgICAgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICA8L01lbWJlcnM+CisgIDxEb2NzPgorICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgIDwvRG9jcz4KKzwvVHlwZT4KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9lbi9BdmFoaS9SZWNvcmRJbmZvSGFuZGxlci54bWwgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvZW4vQXZhaGkvUmVjb3JkSW5mb0hhbmRsZXIueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5Y2JjMTcKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvZW4vQXZhaGkvUmVjb3JkSW5mb0hhbmRsZXIueG1sCkBAIC0wLDAgKzEsMjMgQEAKKzxUeXBlIE5hbWU9IlJlY29yZEluZm9IYW5kbGVyIiBGdWxsTmFtZT0iQXZhaGkuUmVjb3JkSW5mb0hhbmRsZXIiPgorICA8VHlwZVNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgZGVsZWdhdGUgdm9pZCBSZWNvcmRJbmZvSGFuZGxlcihvYmplY3QgbywgQXZhaGkuUmVjb3JkSW5mb0FyZ3MgYXJncyk7IiAvPgorICA8QXNzZW1ibHlJbmZvPgorICAgIDxBc3NlbWJseU5hbWU+YXZhaGktc2hhcnA8L0Fzc2VtYmx5TmFtZT4KKyAgICA8QXNzZW1ibHlWZXJzaW9uPjEuMC4wLjA8L0Fzc2VtYmx5VmVyc2lvbj4KKyAgPC9Bc3NlbWJseUluZm8+CisgIDxCYXNlPgorICAgIDxCYXNlVHlwZU5hbWU+U3lzdGVtLkRlbGVnYXRlPC9CYXNlVHlwZU5hbWU+CisgIDwvQmFzZT4KKyAgPFBhcmFtZXRlcnM+CisgICAgPFBhcmFtZXRlciBOYW1lPSJvIiBUeXBlPSJTeXN0ZW0uT2JqZWN0IiAvPgorICAgIDxQYXJhbWV0ZXIgTmFtZT0iYXJncyIgVHlwZT0iQXZhaGkuUmVjb3JkSW5mb0FyZ3MiIC8+CisgIDwvUGFyYW1ldGVycz4KKyAgPFJldHVyblZhbHVlPgorICAgIDxSZXR1cm5UeXBlPlN5c3RlbS5Wb2lkPC9SZXR1cm5UeXBlPgorICA8L1JldHVyblZhbHVlPgorICA8RG9jcz4KKyAgICA8cGFyYW0gbmFtZT0ibyI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICA8cGFyYW0gbmFtZT0iYXJncyI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICA8L0RvY3M+Cis8L1R5cGU+CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvZW4vQXZhaGkvUmVjb3JkVHlwZS54bWwgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvZW4vQXZhaGkvUmVjb3JkVHlwZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzkxM2NhZAotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9lbi9BdmFoaS9SZWNvcmRUeXBlLnhtbApAQCAtMCwwICsxLDExNiBAQAorPFR5cGUgTmFtZT0iUmVjb3JkVHlwZSIgRnVsbE5hbWU9IkF2YWhpLlJlY29yZFR5cGUiPgorICA8VHlwZVNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgZW51bSBSZWNvcmRUeXBlIiAvPgorICA8QXNzZW1ibHlJbmZvPgorICAgIDxBc3NlbWJseU5hbWU+YXZhaGktc2hhcnA8L0Fzc2VtYmx5TmFtZT4KKyAgICA8QXNzZW1ibHlWZXJzaW9uPjEuMC4wLjA8L0Fzc2VtYmx5VmVyc2lvbj4KKyAgPC9Bc3NlbWJseUluZm8+CisgIDxCYXNlPgorICAgIDxCYXNlVHlwZU5hbWU+U3lzdGVtLkVudW08L0Jhc2VUeXBlTmFtZT4KKyAgPC9CYXNlPgorICA8TWVtYmVycz4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IkNuYW1lIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0iQ25hbWUiIC8+CisgICAgICA8TWVtYmVyVHlwZT5GaWVsZDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+QXZhaGkuUmVjb3JkVHlwZTwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iUHRyIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0iUHRyIiAvPgorICAgICAgPE1lbWJlclR5cGU+RmllbGQ8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPkF2YWhpLlJlY29yZFR5cGU8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IkFhYSI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9IkFhYSIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkZpZWxkPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5BdmFoaS5SZWNvcmRUeXBlPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJTb2EiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJTb2EiIC8+CisgICAgICA8TWVtYmVyVHlwZT5GaWVsZDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+QXZhaGkuUmVjb3JkVHlwZTwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iVHh0Ij4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0iVHh0IiAvPgorICAgICAgPE1lbWJlclR5cGU+RmllbGQ8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPkF2YWhpLlJlY29yZFR5cGU8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IkhpbmZvIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0iSGluZm8iIC8+CisgICAgICA8TWVtYmVyVHlwZT5GaWVsZDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+QXZhaGkuUmVjb3JkVHlwZTwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iTnMiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJOcyIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkZpZWxkPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5BdmFoaS5SZWNvcmRUeXBlPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJNeCI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9Ik14IiAvPgorICAgICAgPE1lbWJlclR5cGU+RmllbGQ8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPkF2YWhpLlJlY29yZFR5cGU8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IkEiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJBIiAvPgorICAgICAgPE1lbWJlclR5cGU+RmllbGQ8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPkF2YWhpLlJlY29yZFR5cGU8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IlNydiI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9IlNydiIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkZpZWxkPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5BdmFoaS5SZWNvcmRUeXBlPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgIDwvTWVtYmVycz4KKyAgPERvY3M+CisgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgPC9Eb2NzPgorPC9UeXBlPgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL2VuL0F2YWhpL1Jlc29sdmVyQmFzZS54bWwgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvZW4vQXZhaGkvUmVzb2x2ZXJCYXNlLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2Q4NTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL2VuL0F2YWhpL1Jlc29sdmVyQmFzZS54bWwKQEAgLTAsMCArMSwzNyBAQAorPFR5cGUgTmFtZT0iUmVzb2x2ZXJCYXNlIiBGdWxsTmFtZT0iQXZhaGkuUmVzb2x2ZXJCYXNlIj4KKyAgPFR5cGVTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIGFic3RyYWN0IGNsYXNzIFJlc29sdmVyQmFzZSIgLz4KKyAgPEFzc2VtYmx5SW5mbz4KKyAgICA8QXNzZW1ibHlOYW1lPmF2YWhpLXNoYXJwPC9Bc3NlbWJseU5hbWU+CisgICAgPEFzc2VtYmx5VmVyc2lvbj4xLjAuMC4wPC9Bc3NlbWJseVZlcnNpb24+CisgIDwvQXNzZW1ibHlJbmZvPgorICA8QmFzZT4KKyAgICA8QmFzZVR5cGVOYW1lPlN5c3RlbS5PYmplY3Q8L0Jhc2VUeXBlTmFtZT4KKyAgPC9CYXNlPgorICA8SW50ZXJmYWNlcyAvPgorICA8TWVtYmVycz4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9Ii5jdG9yIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHJvdGVjdGVkIFJlc29sdmVyQmFzZSAoKTsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5Db25zdHJ1Y3RvcjwvTWVtYmVyVHlwZT4KKyAgICAgIDxQYXJhbWV0ZXJzIC8+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJGYWlsZWQiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgZXZlbnQgQXZhaGkuRXJyb3JDb2RlSGFuZGxlciBGYWlsZWQ7IiAvPgorICAgICAgPE1lbWJlclR5cGU+RXZlbnQ8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPkF2YWhpLkVycm9yQ29kZUhhbmRsZXI8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICA8L01lbWJlcnM+CisgIDxEb2NzPgorICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgIDwvRG9jcz4KKzwvVHlwZT4KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9lbi9BdmFoaS9TZXJ2aWNlQnJvd3Nlci54bWwgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvZW4vQXZhaGkvU2VydmljZUJyb3dzZXIueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNGVlZGIKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvZW4vQXZhaGkvU2VydmljZUJyb3dzZXIueG1sCkBAIC0wLDAgKzEsMTE5IEBACis8VHlwZSBOYW1lPSJTZXJ2aWNlQnJvd3NlciIgRnVsbE5hbWU9IkF2YWhpLlNlcnZpY2VCcm93c2VyIj4KKyAgPFR5cGVTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIGNsYXNzIFNlcnZpY2VCcm93c2VyIDogQXZhaGkuQnJvd3NlckJhc2UsIFN5c3RlbS5JRGlzcG9zYWJsZSIgLz4KKyAgPEFzc2VtYmx5SW5mbz4KKyAgICA8QXNzZW1ibHlOYW1lPmF2YWhpLXNoYXJwPC9Bc3NlbWJseU5hbWU+CisgICAgPEFzc2VtYmx5VmVyc2lvbj4xLjAuMC4wPC9Bc3NlbWJseVZlcnNpb24+CisgIDwvQXNzZW1ibHlJbmZvPgorICA8QmFzZT4KKyAgICA8QmFzZVR5cGVOYW1lPkF2YWhpLkJyb3dzZXJCYXNlPC9CYXNlVHlwZU5hbWU+CisgIDwvQmFzZT4KKyAgPEludGVyZmFjZXM+CisgICAgPEludGVyZmFjZT4KKyAgICAgIDxJbnRlcmZhY2VOYW1lPlN5c3RlbS5JRGlzcG9zYWJsZTwvSW50ZXJmYWNlTmFtZT4KKyAgICA8L0ludGVyZmFjZT4KKyAgPC9JbnRlcmZhY2VzPgorICA8TWVtYmVycz4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9Ii5jdG9yIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIFNlcnZpY2VCcm93c2VyIChBdmFoaS5DbGllbnQgY2xpZW50LCBzdHJpbmcgdHlwZSk7IiAvPgorICAgICAgPE1lbWJlclR5cGU+Q29uc3RydWN0b3I8L01lbWJlclR5cGU+CisgICAgICA8UGFyYW1ldGVycz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJjbGllbnQiIFR5cGU9IkF2YWhpLkNsaWVudCIgLz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJ0eXBlIiBUeXBlPSJTeXN0ZW0uU3RyaW5nIiAvPgorICAgICAgPC9QYXJhbWV0ZXJzPgorICAgICAgPERvY3M+CisgICAgICAgIDxwYXJhbSBuYW1lPSJjbGllbnQiPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgICAgIDxwYXJhbSBuYW1lPSJ0eXBlIj5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9Ii5jdG9yIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIFNlcnZpY2VCcm93c2VyIChBdmFoaS5DbGllbnQgY2xpZW50LCBzdHJpbmcgdHlwZSwgc3RyaW5nIGRvbWFpbik7IiAvPgorICAgICAgPE1lbWJlclR5cGU+Q29uc3RydWN0b3I8L01lbWJlclR5cGU+CisgICAgICA8UGFyYW1ldGVycz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJjbGllbnQiIFR5cGU9IkF2YWhpLkNsaWVudCIgLz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJ0eXBlIiBUeXBlPSJTeXN0ZW0uU3RyaW5nIiAvPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9ImRvbWFpbiIgVHlwZT0iU3lzdGVtLlN0cmluZyIgLz4KKyAgICAgIDwvUGFyYW1ldGVycz4KKyAgICAgIDxEb2NzPgorICAgICAgICA8cGFyYW0gbmFtZT0iY2xpZW50Ij5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8cGFyYW0gbmFtZT0idHlwZSI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImRvbWFpbiI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJTZXJ2aWNlQWRkZWQiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgZXZlbnQgQXZhaGkuU2VydmljZUluZm9IYW5kbGVyIFNlcnZpY2VBZGRlZDsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5FdmVudDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+QXZhaGkuU2VydmljZUluZm9IYW5kbGVyPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IlNlcnZpY2VSZW1vdmVkIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIGV2ZW50IEF2YWhpLlNlcnZpY2VJbmZvSGFuZGxlciBTZXJ2aWNlUmVtb3ZlZDsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5FdmVudDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+QXZhaGkuU2VydmljZUluZm9IYW5kbGVyPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IkRpc3Bvc2UiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgdm9pZCBEaXNwb3NlICgpOyIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPk1ldGhvZDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+U3lzdGVtLlZvaWQ8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPFBhcmFtZXRlcnMgLz4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IlNlcnZpY2VzIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIEF2YWhpLlNlcnZpY2VJbmZvW10gU2VydmljZXMgeyBnZXQ7IH07IiAvPgorICAgICAgPE1lbWJlclR5cGU+UHJvcGVydHk8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPkF2YWhpLlNlcnZpY2VJbmZvW108L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgICAgPHZhbHVlPlRvIGJlIGFkZGVkLjwvdmFsdWU+CisgICAgICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9Ii5jdG9yIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIFNlcnZpY2VCcm93c2VyIChBdmFoaS5DbGllbnQgY2xpZW50LCBpbnQgaWZhY2UsIEF2YWhpLlByb3RvY29sIHByb3RvLCBzdHJpbmcgdHlwZSwgc3RyaW5nIGRvbWFpbiwgQXZhaGkuTG9va3VwRmxhZ3MgZmxhZ3MpOyIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkNvbnN0cnVjdG9yPC9NZW1iZXJUeXBlPgorICAgICAgPFBhcmFtZXRlcnM+CisgICAgICAgIDxQYXJhbWV0ZXIgTmFtZT0iY2xpZW50IiBUeXBlPSJBdmFoaS5DbGllbnQiIC8+CisgICAgICAgIDxQYXJhbWV0ZXIgTmFtZT0iaWZhY2UiIFR5cGU9IlN5c3RlbS5JbnQzMiIgLz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJwcm90byIgVHlwZT0iQXZhaGkuUHJvdG9jb2wiIC8+CisgICAgICAgIDxQYXJhbWV0ZXIgTmFtZT0idHlwZSIgVHlwZT0iU3lzdGVtLlN0cmluZyIgLz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJkb21haW4iIFR5cGU9IlN5c3RlbS5TdHJpbmciIC8+CisgICAgICAgIDxQYXJhbWV0ZXIgTmFtZT0iZmxhZ3MiIFR5cGU9IkF2YWhpLkxvb2t1cEZsYWdzIiAvPgorICAgICAgPC9QYXJhbWV0ZXJzPgorICAgICAgPERvY3M+CisgICAgICAgIDxwYXJhbSBuYW1lPSJjbGllbnQiPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgICAgIDxwYXJhbSBuYW1lPSJpZmFjZSI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHBhcmFtIG5hbWU9InByb3RvIj5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8cGFyYW0gbmFtZT0idHlwZSI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImRvbWFpbiI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImZsYWdzIj5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgPC9NZW1iZXJzPgorICA8RG9jcz4KKyAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICA8L0RvY3M+Cis8L1R5cGU+CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvZW4vQXZhaGkvU2VydmljZUluZm8ueG1sIGIvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL2VuL0F2YWhpL1NlcnZpY2VJbmZvLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzgwMDg1Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL2VuL0F2YWhpL1NlcnZpY2VJbmZvLnhtbApAQCAtMCwwICsxLDEzOCBAQAorPFR5cGUgTmFtZT0iU2VydmljZUluZm8iIEZ1bGxOYW1lPSJBdmFoaS5TZXJ2aWNlSW5mbyI+CisgIDxUeXBlU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBzdHJ1Y3QgU2VydmljZUluZm8iIC8+CisgIDxBc3NlbWJseUluZm8+CisgICAgPEFzc2VtYmx5TmFtZT5hdmFoaS1zaGFycDwvQXNzZW1ibHlOYW1lPgorICAgIDxBc3NlbWJseVZlcnNpb24+MS4wLjAuMDwvQXNzZW1ibHlWZXJzaW9uPgorICA8L0Fzc2VtYmx5SW5mbz4KKyAgPEJhc2U+CisgICAgPEJhc2VUeXBlTmFtZT5TeXN0ZW0uVmFsdWVUeXBlPC9CYXNlVHlwZU5hbWU+CisgIDwvQmFzZT4KKyAgPEludGVyZmFjZXMgLz4KKyAgPE1lbWJlcnM+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJOZXR3b3JrSW50ZXJmYWNlIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIGludCBOZXR3b3JrSW50ZXJmYWNlOyIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkZpZWxkPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5TeXN0ZW0uSW50MzI8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iUHJvdG9jb2wiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgQXZhaGkuUHJvdG9jb2wgUHJvdG9jb2w7IiAvPgorICAgICAgPE1lbWJlclR5cGU+RmllbGQ8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPkF2YWhpLlByb3RvY29sPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IkRvbWFpbiI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBzdHJpbmcgRG9tYWluOyIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkZpZWxkPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5TeXN0ZW0uU3RyaW5nPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IlNlcnZpY2VUeXBlIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIHN0cmluZyBTZXJ2aWNlVHlwZTsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5GaWVsZDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+U3lzdGVtLlN0cmluZzwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJOYW1lIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIHN0cmluZyBOYW1lOyIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkZpZWxkPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5TeXN0ZW0uU3RyaW5nPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9Ikhvc3ROYW1lIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIHN0cmluZyBIb3N0TmFtZTsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5GaWVsZDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+U3lzdGVtLlN0cmluZzwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJBZGRyZXNzIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIFN5c3RlbS5OZXQuSVBBZGRyZXNzIEFkZHJlc3M7IiAvPgorICAgICAgPE1lbWJlclR5cGU+RmllbGQ8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPlN5c3RlbS5OZXQuSVBBZGRyZXNzPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IlBvcnQiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgdXNob3J0IFBvcnQ7IiAvPgorICAgICAgPE1lbWJlclR5cGU+RmllbGQ8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPlN5c3RlbS5VSW50MTY8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iVGV4dCI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBieXRlW11bXSBUZXh0OyIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkZpZWxkPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5TeXN0ZW0uQnl0ZVtdW108L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iWmVybyI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBzdGF0aWMgQXZhaGkuU2VydmljZUluZm8gWmVybzsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5GaWVsZDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+QXZhaGkuU2VydmljZUluZm88L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iRmxhZ3MiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgQXZhaGkuTG9va3VwUmVzdWx0RmxhZ3MgRmxhZ3M7IiAvPgorICAgICAgPE1lbWJlclR5cGU+RmllbGQ8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPkF2YWhpLkxvb2t1cFJlc3VsdEZsYWdzPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgPC9NZW1iZXJzPgorICA8RG9jcz4KKyAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICA8L0RvY3M+Cis8L1R5cGU+CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvZW4vQXZhaGkvU2VydmljZUluZm9BcmdzLnhtbCBiL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9lbi9BdmFoaS9TZXJ2aWNlSW5mb0FyZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyZWUxNGQKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvZW4vQXZhaGkvU2VydmljZUluZm9BcmdzLnhtbApAQCAtMCwwICsxLDQxIEBACis8VHlwZSBOYW1lPSJTZXJ2aWNlSW5mb0FyZ3MiIEZ1bGxOYW1lPSJBdmFoaS5TZXJ2aWNlSW5mb0FyZ3MiPgorICA8VHlwZVNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgY2xhc3MgU2VydmljZUluZm9BcmdzIDogU3lzdGVtLkV2ZW50QXJncyIgLz4KKyAgPEFzc2VtYmx5SW5mbz4KKyAgICA8QXNzZW1ibHlOYW1lPmF2YWhpLXNoYXJwPC9Bc3NlbWJseU5hbWU+CisgICAgPEFzc2VtYmx5VmVyc2lvbj4xLjAuMC4wPC9Bc3NlbWJseVZlcnNpb24+CisgIDwvQXNzZW1ibHlJbmZvPgorICA8QmFzZT4KKyAgICA8QmFzZVR5cGVOYW1lPlN5c3RlbS5FdmVudEFyZ3M8L0Jhc2VUeXBlTmFtZT4KKyAgPC9CYXNlPgorICA8SW50ZXJmYWNlcyAvPgorICA8TWVtYmVycz4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9Ii5jdG9yIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIFNlcnZpY2VJbmZvQXJncyAoQXZhaGkuU2VydmljZUluZm8gc2VydmljZSk7IiAvPgorICAgICAgPE1lbWJlclR5cGU+Q29uc3RydWN0b3I8L01lbWJlclR5cGU+CisgICAgICA8UGFyYW1ldGVycz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJzZXJ2aWNlIiBUeXBlPSJBdmFoaS5TZXJ2aWNlSW5mbyIgLz4KKyAgICAgIDwvUGFyYW1ldGVycz4KKyAgICAgIDxEb2NzPgorICAgICAgICA8cGFyYW0gbmFtZT0ic2VydmljZSI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJTZXJ2aWNlIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIEF2YWhpLlNlcnZpY2VJbmZvIFNlcnZpY2UgeyBnZXQ7IH07IiAvPgorICAgICAgPE1lbWJlclR5cGU+UHJvcGVydHk8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPkF2YWhpLlNlcnZpY2VJbmZvPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICAgIDx2YWx1ZT5UbyBiZSBhZGRlZC48L3ZhbHVlPgorICAgICAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgIDwvTWVtYmVycz4KKyAgPERvY3M+CisgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgPC9Eb2NzPgorPC9UeXBlPgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL2VuL0F2YWhpL1NlcnZpY2VJbmZvSGFuZGxlci54bWwgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvZW4vQXZhaGkvU2VydmljZUluZm9IYW5kbGVyLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWNmNjMwCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL2VuL0F2YWhpL1NlcnZpY2VJbmZvSGFuZGxlci54bWwKQEAgLTAsMCArMSwyMyBAQAorPFR5cGUgTmFtZT0iU2VydmljZUluZm9IYW5kbGVyIiBGdWxsTmFtZT0iQXZhaGkuU2VydmljZUluZm9IYW5kbGVyIj4KKyAgPFR5cGVTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIGRlbGVnYXRlIHZvaWQgU2VydmljZUluZm9IYW5kbGVyKG9iamVjdCBvLCBBdmFoaS5TZXJ2aWNlSW5mb0FyZ3MgYXJncyk7IiAvPgorICA8QXNzZW1ibHlJbmZvPgorICAgIDxBc3NlbWJseU5hbWU+YXZhaGktc2hhcnA8L0Fzc2VtYmx5TmFtZT4KKyAgICA8QXNzZW1ibHlWZXJzaW9uPjEuMC4wLjA8L0Fzc2VtYmx5VmVyc2lvbj4KKyAgPC9Bc3NlbWJseUluZm8+CisgIDxCYXNlPgorICAgIDxCYXNlVHlwZU5hbWU+U3lzdGVtLkRlbGVnYXRlPC9CYXNlVHlwZU5hbWU+CisgIDwvQmFzZT4KKyAgPFBhcmFtZXRlcnM+CisgICAgPFBhcmFtZXRlciBOYW1lPSJvIiBUeXBlPSJTeXN0ZW0uT2JqZWN0IiAvPgorICAgIDxQYXJhbWV0ZXIgTmFtZT0iYXJncyIgVHlwZT0iQXZhaGkuU2VydmljZUluZm9BcmdzIiAvPgorICA8L1BhcmFtZXRlcnM+CisgIDxSZXR1cm5WYWx1ZT4KKyAgICA8UmV0dXJuVHlwZT5TeXN0ZW0uVm9pZDwvUmV0dXJuVHlwZT4KKyAgPC9SZXR1cm5WYWx1ZT4KKyAgPERvY3M+CisgICAgPHBhcmFtIG5hbWU9Im8iPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgPHBhcmFtIG5hbWU9ImFyZ3MiPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgPC9Eb2NzPgorPC9UeXBlPgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL2VuL0F2YWhpL1NlcnZpY2VSZXNvbHZlci54bWwgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvZW4vQXZhaGkvU2VydmljZVJlc29sdmVyLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGFjNzUwCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL2VuL0F2YWhpL1NlcnZpY2VSZXNvbHZlci54bWwKQEAgLTAsMCArMSwxMjUgQEAKKzxUeXBlIE5hbWU9IlNlcnZpY2VSZXNvbHZlciIgRnVsbE5hbWU9IkF2YWhpLlNlcnZpY2VSZXNvbHZlciI+CisgIDxUeXBlU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBjbGFzcyBTZXJ2aWNlUmVzb2x2ZXIgOiBBdmFoaS5SZXNvbHZlckJhc2UsIFN5c3RlbS5JRGlzcG9zYWJsZSIgLz4KKyAgPEFzc2VtYmx5SW5mbz4KKyAgICA8QXNzZW1ibHlOYW1lPmF2YWhpLXNoYXJwPC9Bc3NlbWJseU5hbWU+CisgICAgPEFzc2VtYmx5VmVyc2lvbj4xLjAuMC4wPC9Bc3NlbWJseVZlcnNpb24+CisgIDwvQXNzZW1ibHlJbmZvPgorICA8QmFzZT4KKyAgICA8QmFzZVR5cGVOYW1lPkF2YWhpLlJlc29sdmVyQmFzZTwvQmFzZVR5cGVOYW1lPgorICA8L0Jhc2U+CisgIDxJbnRlcmZhY2VzPgorICAgIDxJbnRlcmZhY2U+CisgICAgICA8SW50ZXJmYWNlTmFtZT5TeXN0ZW0uSURpc3Bvc2FibGU8L0ludGVyZmFjZU5hbWU+CisgICAgPC9JbnRlcmZhY2U+CisgIDwvSW50ZXJmYWNlcz4KKyAgPE1lbWJlcnM+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSIuY3RvciI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBTZXJ2aWNlUmVzb2x2ZXIgKEF2YWhpLkNsaWVudCBjbGllbnQsIHN0cmluZyBuYW1lLCBzdHJpbmcgdHlwZSwgc3RyaW5nIGRvbWFpbik7IiAvPgorICAgICAgPE1lbWJlclR5cGU+Q29uc3RydWN0b3I8L01lbWJlclR5cGU+CisgICAgICA8UGFyYW1ldGVycz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJjbGllbnQiIFR5cGU9IkF2YWhpLkNsaWVudCIgLz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJuYW1lIiBUeXBlPSJTeXN0ZW0uU3RyaW5nIiAvPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9InR5cGUiIFR5cGU9IlN5c3RlbS5TdHJpbmciIC8+CisgICAgICAgIDxQYXJhbWV0ZXIgTmFtZT0iZG9tYWluIiBUeXBlPSJTeXN0ZW0uU3RyaW5nIiAvPgorICAgICAgPC9QYXJhbWV0ZXJzPgorICAgICAgPERvY3M+CisgICAgICAgIDxwYXJhbSBuYW1lPSJjbGllbnQiPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgICAgIDxwYXJhbSBuYW1lPSJuYW1lIj5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8cGFyYW0gbmFtZT0idHlwZSI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImRvbWFpbiI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSIuY3RvciI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBTZXJ2aWNlUmVzb2x2ZXIgKEF2YWhpLkNsaWVudCBjbGllbnQsIEF2YWhpLlNlcnZpY2VJbmZvIHNlcnZpY2UpOyIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkNvbnN0cnVjdG9yPC9NZW1iZXJUeXBlPgorICAgICAgPFBhcmFtZXRlcnM+CisgICAgICAgIDxQYXJhbWV0ZXIgTmFtZT0iY2xpZW50IiBUeXBlPSJBdmFoaS5DbGllbnQiIC8+CisgICAgICAgIDxQYXJhbWV0ZXIgTmFtZT0ic2VydmljZSIgVHlwZT0iQXZhaGkuU2VydmljZUluZm8iIC8+CisgICAgICA8L1BhcmFtZXRlcnM+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImNsaWVudCI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHBhcmFtIG5hbWU9InNlcnZpY2UiPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iRm91bmQiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgZXZlbnQgQXZhaGkuU2VydmljZUluZm9IYW5kbGVyIEZvdW5kOyIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkV2ZW50PC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5BdmFoaS5TZXJ2aWNlSW5mb0hhbmRsZXI8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iVGltZW91dCI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBldmVudCBFdmVudEhhbmRsZXIgVGltZW91dDsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5FdmVudDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+U3lzdGVtLkV2ZW50SGFuZGxlcjwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJEaXNwb3NlIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIHZvaWQgRGlzcG9zZSAoKTsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5NZXRob2Q8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPlN5c3RlbS5Wb2lkPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxQYXJhbWV0ZXJzIC8+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJTZXJ2aWNlIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIEF2YWhpLlNlcnZpY2VJbmZvIFNlcnZpY2UgeyBnZXQ7IH07IiAvPgorICAgICAgPE1lbWJlclR5cGU+UHJvcGVydHk8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPkF2YWhpLlNlcnZpY2VJbmZvPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICAgIDx2YWx1ZT5UbyBiZSBhZGRlZC48L3ZhbHVlPgorICAgICAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSIuY3RvciI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBTZXJ2aWNlUmVzb2x2ZXIgKEF2YWhpLkNsaWVudCBjbGllbnQsIGludCBpZmFjZSwgQXZhaGkuUHJvdG9jb2wgcHJvdG8sIHN0cmluZyBuYW1lLCBzdHJpbmcgdHlwZSwgc3RyaW5nIGRvbWFpbiwgQXZhaGkuUHJvdG9jb2wgYXByb3RvLCBBdmFoaS5Mb29rdXBGbGFncyBmbGFncyk7IiAvPgorICAgICAgPE1lbWJlclR5cGU+Q29uc3RydWN0b3I8L01lbWJlclR5cGU+CisgICAgICA8UGFyYW1ldGVycz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJjbGllbnQiIFR5cGU9IkF2YWhpLkNsaWVudCIgLz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJpZmFjZSIgVHlwZT0iU3lzdGVtLkludDMyIiAvPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9InByb3RvIiBUeXBlPSJBdmFoaS5Qcm90b2NvbCIgLz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJuYW1lIiBUeXBlPSJTeXN0ZW0uU3RyaW5nIiAvPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9InR5cGUiIFR5cGU9IlN5c3RlbS5TdHJpbmciIC8+CisgICAgICAgIDxQYXJhbWV0ZXIgTmFtZT0iZG9tYWluIiBUeXBlPSJTeXN0ZW0uU3RyaW5nIiAvPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9ImFwcm90byIgVHlwZT0iQXZhaGkuUHJvdG9jb2wiIC8+CisgICAgICAgIDxQYXJhbWV0ZXIgTmFtZT0iZmxhZ3MiIFR5cGU9IkF2YWhpLkxvb2t1cEZsYWdzIiAvPgorICAgICAgPC9QYXJhbWV0ZXJzPgorICAgICAgPERvY3M+CisgICAgICAgIDxwYXJhbSBuYW1lPSJjbGllbnQiPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgICAgIDxwYXJhbSBuYW1lPSJpZmFjZSI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHBhcmFtIG5hbWU9InByb3RvIj5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8cGFyYW0gbmFtZT0ibmFtZSI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHBhcmFtIG5hbWU9InR5cGUiPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgICAgIDxwYXJhbSBuYW1lPSJkb21haW4iPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgICAgIDxwYXJhbSBuYW1lPSJhcHJvdG8iPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgICAgIDxwYXJhbSBuYW1lPSJmbGFncyI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgIDwvTWVtYmVycz4KKyAgPERvY3M+CisgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgPC9Eb2NzPgorPC9UeXBlPgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL2VuL0F2YWhpL1NlcnZpY2VUeXBlQnJvd3Nlci54bWwgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvZW4vQXZhaGkvU2VydmljZVR5cGVCcm93c2VyLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWE2NGFjCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL2VuL0F2YWhpL1NlcnZpY2VUeXBlQnJvd3Nlci54bWwKQEAgLTAsMCArMSwxMTMgQEAKKzxUeXBlIE5hbWU9IlNlcnZpY2VUeXBlQnJvd3NlciIgRnVsbE5hbWU9IkF2YWhpLlNlcnZpY2VUeXBlQnJvd3NlciI+CisgIDxUeXBlU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBjbGFzcyBTZXJ2aWNlVHlwZUJyb3dzZXIgOiBBdmFoaS5Ccm93c2VyQmFzZSwgU3lzdGVtLklEaXNwb3NhYmxlIiAvPgorICA8QXNzZW1ibHlJbmZvPgorICAgIDxBc3NlbWJseU5hbWU+YXZhaGktc2hhcnA8L0Fzc2VtYmx5TmFtZT4KKyAgICA8QXNzZW1ibHlWZXJzaW9uPjEuMC4wLjA8L0Fzc2VtYmx5VmVyc2lvbj4KKyAgPC9Bc3NlbWJseUluZm8+CisgIDxCYXNlPgorICAgIDxCYXNlVHlwZU5hbWU+QXZhaGkuQnJvd3NlckJhc2U8L0Jhc2VUeXBlTmFtZT4KKyAgPC9CYXNlPgorICA8SW50ZXJmYWNlcz4KKyAgICA8SW50ZXJmYWNlPgorICAgICAgPEludGVyZmFjZU5hbWU+U3lzdGVtLklEaXNwb3NhYmxlPC9JbnRlcmZhY2VOYW1lPgorICAgIDwvSW50ZXJmYWNlPgorICA8L0ludGVyZmFjZXM+CisgIDxNZW1iZXJzPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iLmN0b3IiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgU2VydmljZVR5cGVCcm93c2VyIChBdmFoaS5DbGllbnQgY2xpZW50KTsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5Db25zdHJ1Y3RvcjwvTWVtYmVyVHlwZT4KKyAgICAgIDxQYXJhbWV0ZXJzPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9ImNsaWVudCIgVHlwZT0iQXZhaGkuQ2xpZW50IiAvPgorICAgICAgPC9QYXJhbWV0ZXJzPgorICAgICAgPERvY3M+CisgICAgICAgIDxwYXJhbSBuYW1lPSJjbGllbnQiPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iLmN0b3IiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgU2VydmljZVR5cGVCcm93c2VyIChBdmFoaS5DbGllbnQgY2xpZW50LCBzdHJpbmcgZG9tYWluKTsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5Db25zdHJ1Y3RvcjwvTWVtYmVyVHlwZT4KKyAgICAgIDxQYXJhbWV0ZXJzPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9ImNsaWVudCIgVHlwZT0iQXZhaGkuQ2xpZW50IiAvPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9ImRvbWFpbiIgVHlwZT0iU3lzdGVtLlN0cmluZyIgLz4KKyAgICAgIDwvUGFyYW1ldGVycz4KKyAgICAgIDxEb2NzPgorICAgICAgICA8cGFyYW0gbmFtZT0iY2xpZW50Ij5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8cGFyYW0gbmFtZT0iZG9tYWluIj5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IlNlcnZpY2VUeXBlQWRkZWQiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgZXZlbnQgQXZhaGkuU2VydmljZVR5cGVJbmZvSGFuZGxlciBTZXJ2aWNlVHlwZUFkZGVkOyIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkV2ZW50PC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5BdmFoaS5TZXJ2aWNlVHlwZUluZm9IYW5kbGVyPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IlNlcnZpY2VUeXBlUmVtb3ZlZCI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBldmVudCBBdmFoaS5TZXJ2aWNlVHlwZUluZm9IYW5kbGVyIFNlcnZpY2VUeXBlUmVtb3ZlZDsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5FdmVudDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+QXZhaGkuU2VydmljZVR5cGVJbmZvSGFuZGxlcjwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJEaXNwb3NlIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIHZvaWQgRGlzcG9zZSAoKTsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5NZXRob2Q8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPlN5c3RlbS5Wb2lkPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxQYXJhbWV0ZXJzIC8+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJTZXJ2aWNlVHlwZXMiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgQXZhaGkuU2VydmljZVR5cGVJbmZvW10gU2VydmljZVR5cGVzIHsgZ2V0OyB9OyIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPlByb3BlcnR5PC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5BdmFoaS5TZXJ2aWNlVHlwZUluZm9bXTwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8dmFsdWU+VG8gYmUgYWRkZWQuPC92YWx1ZT4KKyAgICAgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iLmN0b3IiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgU2VydmljZVR5cGVCcm93c2VyIChBdmFoaS5DbGllbnQgY2xpZW50LCBpbnQgaWZhY2UsIEF2YWhpLlByb3RvY29sIHByb3RvLCBzdHJpbmcgZG9tYWluLCBBdmFoaS5Mb29rdXBGbGFncyBmbGFncyk7IiAvPgorICAgICAgPE1lbWJlclR5cGU+Q29uc3RydWN0b3I8L01lbWJlclR5cGU+CisgICAgICA8UGFyYW1ldGVycz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJjbGllbnQiIFR5cGU9IkF2YWhpLkNsaWVudCIgLz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJpZmFjZSIgVHlwZT0iU3lzdGVtLkludDMyIiAvPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9InByb3RvIiBUeXBlPSJBdmFoaS5Qcm90b2NvbCIgLz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJkb21haW4iIFR5cGU9IlN5c3RlbS5TdHJpbmciIC8+CisgICAgICAgIDxQYXJhbWV0ZXIgTmFtZT0iZmxhZ3MiIFR5cGU9IkF2YWhpLkxvb2t1cEZsYWdzIiAvPgorICAgICAgPC9QYXJhbWV0ZXJzPgorICAgICAgPERvY3M+CisgICAgICAgIDxwYXJhbSBuYW1lPSJjbGllbnQiPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgICAgIDxwYXJhbSBuYW1lPSJpZmFjZSI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHBhcmFtIG5hbWU9InByb3RvIj5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8cGFyYW0gbmFtZT0iZG9tYWluIj5UbyBiZSBhZGRlZC48L3BhcmFtPgorICAgICAgICA8cGFyYW0gbmFtZT0iZmxhZ3MiPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICA8L01lbWJlcnM+CisgIDxEb2NzPgorICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgIDwvRG9jcz4KKzwvVHlwZT4KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9lbi9BdmFoaS9TZXJ2aWNlVHlwZUluZm8ueG1sIGIvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL2VuL0F2YWhpL1NlcnZpY2VUeXBlSW5mby54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIwOWFlOQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9lbi9BdmFoaS9TZXJ2aWNlVHlwZUluZm8ueG1sCkBAIC0wLDAgKzEsNzIgQEAKKzxUeXBlIE5hbWU9IlNlcnZpY2VUeXBlSW5mbyIgRnVsbE5hbWU9IkF2YWhpLlNlcnZpY2VUeXBlSW5mbyI+CisgIDxUeXBlU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBzdHJ1Y3QgU2VydmljZVR5cGVJbmZvIiAvPgorICA8QXNzZW1ibHlJbmZvPgorICAgIDxBc3NlbWJseU5hbWU+YXZhaGktc2hhcnA8L0Fzc2VtYmx5TmFtZT4KKyAgICA8QXNzZW1ibHlWZXJzaW9uPjEuMC4wLjA8L0Fzc2VtYmx5VmVyc2lvbj4KKyAgPC9Bc3NlbWJseUluZm8+CisgIDxCYXNlPgorICAgIDxCYXNlVHlwZU5hbWU+U3lzdGVtLlZhbHVlVHlwZTwvQmFzZVR5cGVOYW1lPgorICA8L0Jhc2U+CisgIDxJbnRlcmZhY2VzIC8+CisgIDxNZW1iZXJzPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iTmV0d29ya0ludGVyZmFjZSI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBpbnQgTmV0d29ya0ludGVyZmFjZTsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5GaWVsZDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+U3lzdGVtLkludDMyPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IlByb3RvY29sIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIEF2YWhpLlByb3RvY29sIFByb3RvY29sOyIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPkZpZWxkPC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5BdmFoaS5Qcm90b2NvbDwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJEb21haW4iPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgc3RyaW5nIERvbWFpbjsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5GaWVsZDwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+U3lzdGVtLlN0cmluZzwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJTZXJ2aWNlVHlwZSI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBzdHJpbmcgU2VydmljZVR5cGU7IiAvPgorICAgICAgPE1lbWJlclR5cGU+RmllbGQ8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPlN5c3RlbS5TdHJpbmc8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iRmxhZ3MiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgQXZhaGkuTG9va3VwUmVzdWx0RmxhZ3MgRmxhZ3M7IiAvPgorICAgICAgPE1lbWJlclR5cGU+RmllbGQ8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPkF2YWhpLkxvb2t1cFJlc3VsdEZsYWdzPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgPC9NZW1iZXJzPgorICA8RG9jcz4KKyAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICA8L0RvY3M+Cis8L1R5cGU+CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvZW4vQXZhaGkvU2VydmljZVR5cGVJbmZvQXJncy54bWwgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvZW4vQXZhaGkvU2VydmljZVR5cGVJbmZvQXJncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ1ODRjZAotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9lbi9BdmFoaS9TZXJ2aWNlVHlwZUluZm9BcmdzLnhtbApAQCAtMCwwICsxLDQxIEBACis8VHlwZSBOYW1lPSJTZXJ2aWNlVHlwZUluZm9BcmdzIiBGdWxsTmFtZT0iQXZhaGkuU2VydmljZVR5cGVJbmZvQXJncyI+CisgIDxUeXBlU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBjbGFzcyBTZXJ2aWNlVHlwZUluZm9BcmdzIDogU3lzdGVtLkV2ZW50QXJncyIgLz4KKyAgPEFzc2VtYmx5SW5mbz4KKyAgICA8QXNzZW1ibHlOYW1lPmF2YWhpLXNoYXJwPC9Bc3NlbWJseU5hbWU+CisgICAgPEFzc2VtYmx5VmVyc2lvbj4xLjAuMC4wPC9Bc3NlbWJseVZlcnNpb24+CisgIDwvQXNzZW1ibHlJbmZvPgorICA8QmFzZT4KKyAgICA8QmFzZVR5cGVOYW1lPlN5c3RlbS5FdmVudEFyZ3M8L0Jhc2VUeXBlTmFtZT4KKyAgPC9CYXNlPgorICA8SW50ZXJmYWNlcyAvPgorICA8TWVtYmVycz4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9Ii5jdG9yIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIFNlcnZpY2VUeXBlSW5mb0FyZ3MgKEF2YWhpLlNlcnZpY2VUeXBlSW5mbyB0eXBlKTsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5Db25zdHJ1Y3RvcjwvTWVtYmVyVHlwZT4KKyAgICAgIDxQYXJhbWV0ZXJzPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9InR5cGUiIFR5cGU9IkF2YWhpLlNlcnZpY2VUeXBlSW5mbyIgLz4KKyAgICAgIDwvUGFyYW1ldGVycz4KKyAgICAgIDxEb2NzPgorICAgICAgICA8cGFyYW0gbmFtZT0idHlwZSI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJTZXJ2aWNlVHlwZSI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBBdmFoaS5TZXJ2aWNlVHlwZUluZm8gU2VydmljZVR5cGUgeyBnZXQ7IH07IiAvPgorICAgICAgPE1lbWJlclR5cGU+UHJvcGVydHk8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPkF2YWhpLlNlcnZpY2VUeXBlSW5mbzwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8dmFsdWU+VG8gYmUgYWRkZWQuPC92YWx1ZT4KKyAgICAgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICA8L01lbWJlcnM+CisgIDxEb2NzPgorICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgIDwvRG9jcz4KKzwvVHlwZT4KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9lbi9BdmFoaS9TZXJ2aWNlVHlwZUluZm9IYW5kbGVyLnhtbCBiL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9lbi9BdmFoaS9TZXJ2aWNlVHlwZUluZm9IYW5kbGVyLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmQ3NTFmCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL2VuL0F2YWhpL1NlcnZpY2VUeXBlSW5mb0hhbmRsZXIueG1sCkBAIC0wLDAgKzEsMjMgQEAKKzxUeXBlIE5hbWU9IlNlcnZpY2VUeXBlSW5mb0hhbmRsZXIiIEZ1bGxOYW1lPSJBdmFoaS5TZXJ2aWNlVHlwZUluZm9IYW5kbGVyIj4KKyAgPFR5cGVTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIGRlbGVnYXRlIHZvaWQgU2VydmljZVR5cGVJbmZvSGFuZGxlcihvYmplY3QgbywgQXZhaGkuU2VydmljZVR5cGVJbmZvQXJncyBhcmdzKTsiIC8+CisgIDxBc3NlbWJseUluZm8+CisgICAgPEFzc2VtYmx5TmFtZT5hdmFoaS1zaGFycDwvQXNzZW1ibHlOYW1lPgorICAgIDxBc3NlbWJseVZlcnNpb24+MS4wLjAuMDwvQXNzZW1ibHlWZXJzaW9uPgorICA8L0Fzc2VtYmx5SW5mbz4KKyAgPEJhc2U+CisgICAgPEJhc2VUeXBlTmFtZT5TeXN0ZW0uRGVsZWdhdGU8L0Jhc2VUeXBlTmFtZT4KKyAgPC9CYXNlPgorICA8UGFyYW1ldGVycz4KKyAgICA8UGFyYW1ldGVyIE5hbWU9Im8iIFR5cGU9IlN5c3RlbS5PYmplY3QiIC8+CisgICAgPFBhcmFtZXRlciBOYW1lPSJhcmdzIiBUeXBlPSJBdmFoaS5TZXJ2aWNlVHlwZUluZm9BcmdzIiAvPgorICA8L1BhcmFtZXRlcnM+CisgIDxSZXR1cm5WYWx1ZT4KKyAgICA8UmV0dXJuVHlwZT5TeXN0ZW0uVm9pZDwvUmV0dXJuVHlwZT4KKyAgPC9SZXR1cm5WYWx1ZT4KKyAgPERvY3M+CisgICAgPHBhcmFtIG5hbWU9Im8iPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgPHBhcmFtIG5hbWU9ImFyZ3MiPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgPC9Eb2NzPgorPC9UeXBlPgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLXNoYXJwL2VuL2luZGV4LnhtbCBiL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9lbi9pbmRleC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE4MGNkMAotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9lbi9pbmRleC54bWwKQEAgLTAsMCArMSw3OSBAQAorPE92ZXJ2aWV3PgorICA8QXNzZW1ibGllcz4KKyAgICA8QXNzZW1ibHkgTmFtZT0iYXZhaGktc2hhcnAiIFZlcnNpb249IjEuMC4wLjAiPgorICAgICAgPEF0dHJpYnV0ZXM+CisgICAgICAgIDxBdHRyaWJ1dGU+CisgICAgICAgICAgPEF0dHJpYnV0ZU5hbWU+U3lzdGVtLlJlZmxlY3Rpb24uQXNzZW1ibHlUcmFkZW1hcmsoVHJhZGVtYXJrPSIiKTwvQXR0cmlidXRlTmFtZT4KKyAgICAgICAgPC9BdHRyaWJ1dGU+CisgICAgICAgIDxBdHRyaWJ1dGU+CisgICAgICAgICAgPEF0dHJpYnV0ZU5hbWU+U3lzdGVtLlJlZmxlY3Rpb24uQXNzZW1ibHlDb3B5cmlnaHQoQ29weXJpZ2h0PSIoQykgMjAwNSBKYW1lcyBXaWxsY294ICAmbHQ7c25vcnBAc25vcnAubmV0Jmd0OyIpPC9BdHRyaWJ1dGVOYW1lPgorICAgICAgICA8L0F0dHJpYnV0ZT4KKyAgICAgICAgPEF0dHJpYnV0ZT4KKyAgICAgICAgICA8QXR0cmlidXRlTmFtZT5TeXN0ZW0uUmVmbGVjdGlvbi5Bc3NlbWJseVByb2R1Y3QoUHJvZHVjdD0iIik8L0F0dHJpYnV0ZU5hbWU+CisgICAgICAgIDwvQXR0cmlidXRlPgorICAgICAgICA8QXR0cmlidXRlPgorICAgICAgICAgIDxBdHRyaWJ1dGVOYW1lPlN5c3RlbS5SZWZsZWN0aW9uLkFzc2VtYmx5Q29tcGFueShDb21wYW55PSIiKTwvQXR0cmlidXRlTmFtZT4KKyAgICAgICAgPC9BdHRyaWJ1dGU+CisgICAgICAgIDxBdHRyaWJ1dGU+CisgICAgICAgICAgPEF0dHJpYnV0ZU5hbWU+U3lzdGVtLlJlZmxlY3Rpb24uQXNzZW1ibHlDb25maWd1cmF0aW9uKENvbmZpZ3VyYXRpb249IiIpPC9BdHRyaWJ1dGVOYW1lPgorICAgICAgICA8L0F0dHJpYnV0ZT4KKyAgICAgICAgPEF0dHJpYnV0ZT4KKyAgICAgICAgICA8QXR0cmlidXRlTmFtZT5TeXN0ZW0uUmVmbGVjdGlvbi5Bc3NlbWJseURlc2NyaXB0aW9uKERlc2NyaXB0aW9uPSJNb25vIGJpbmRpbmdzIGZvciB0aGUgQXZhaGkgbUROUy9ETlMtU0Qgc3RhY2siKTwvQXR0cmlidXRlTmFtZT4KKyAgICAgICAgPC9BdHRyaWJ1dGU+CisgICAgICAgIDxBdHRyaWJ1dGU+CisgICAgICAgICAgPEF0dHJpYnV0ZU5hbWU+U3lzdGVtLlJlZmxlY3Rpb24uQXNzZW1ibHlUaXRsZShUaXRsZT0iYXZhaGktc2hhcnAiKTwvQXR0cmlidXRlTmFtZT4KKyAgICAgICAgPC9BdHRyaWJ1dGU+CisgICAgICA8L0F0dHJpYnV0ZXM+CisgICAgPC9Bc3NlbWJseT4KKyAgPC9Bc3NlbWJsaWVzPgorICA8UmVtYXJrcz5UbyBiZSBhZGRlZC48L1JlbWFya3M+CisgIDxDb3B5cmlnaHQ+VG8gYmUgYWRkZWQuPC9Db3B5cmlnaHQ+CisgIDxUeXBlcz4KKyAgICA8TmFtZXNwYWNlIE5hbWU9IkF2YWhpIj4KKyAgICAgIDxUeXBlIE5hbWU9IkFkZHJlc3NSZXNvbHZlciIgLz4KKyAgICAgIDxUeXBlIE5hbWU9IkNsaWVudCIgLz4KKyAgICAgIDxUeXBlIE5hbWU9IkNsaWVudEV4Y2VwdGlvbiIgLz4KKyAgICAgIDxUeXBlIE5hbWU9IkRvbWFpbkluZm8iIC8+CisgICAgICA8VHlwZSBOYW1lPSJEb21haW5Ccm93c2VyIiAvPgorICAgICAgPFR5cGUgTmFtZT0iRW50cnlHcm91cCIgLz4KKyAgICAgIDxUeXBlIE5hbWU9Ikhvc3ROYW1lUmVzb2x2ZXIiIC8+CisgICAgICA8VHlwZSBOYW1lPSJTZXJ2aWNlSW5mbyIgLz4KKyAgICAgIDxUeXBlIE5hbWU9IlNlcnZpY2VCcm93c2VyIiAvPgorICAgICAgPFR5cGUgTmFtZT0iU2VydmljZVJlc29sdmVyIiAvPgorICAgICAgPFR5cGUgTmFtZT0iU2VydmljZVR5cGVJbmZvIiAvPgorICAgICAgPFR5cGUgTmFtZT0iU2VydmljZVR5cGVCcm93c2VyIiAvPgorICAgICAgPFR5cGUgTmFtZT0iSG9zdEFkZHJlc3NIYW5kbGVyIiAvPgorICAgICAgPFR5cGUgTmFtZT0iQ2xpZW50U3RhdGVIYW5kbGVyIiAvPgorICAgICAgPFR5cGUgTmFtZT0iRG9tYWluSW5mb0hhbmRsZXIiIC8+CisgICAgICA8VHlwZSBOYW1lPSJFbnRyeUdyb3VwU3RhdGVIYW5kbGVyIiAvPgorICAgICAgPFR5cGUgTmFtZT0iU2VydmljZUluZm9IYW5kbGVyIiAvPgorICAgICAgPFR5cGUgTmFtZT0iU2VydmljZVR5cGVJbmZvSGFuZGxlciIgLz4KKyAgICAgIDxUeXBlIE5hbWU9IlByb3RvY29sIiAvPgorICAgICAgPFR5cGUgTmFtZT0iQ2xpZW50U3RhdGUiIC8+CisgICAgICA8VHlwZSBOYW1lPSJEb21haW5Ccm93c2VyVHlwZSIgLz4KKyAgICAgIDxUeXBlIE5hbWU9IkVudHJ5R3JvdXBTdGF0ZSIgLz4KKyAgICAgIDxUeXBlIE5hbWU9Ikxvb2t1cEZsYWdzIiAvPgorICAgICAgPFR5cGUgTmFtZT0iTG9va3VwUmVzdWx0RmxhZ3MiIC8+CisgICAgICA8VHlwZSBOYW1lPSJIb3N0QWRkcmVzc0FyZ3MiIC8+CisgICAgICA8VHlwZSBOYW1lPSJSZXNvbHZlckJhc2UiIC8+CisgICAgICA8VHlwZSBOYW1lPSJCcm93c2VyQmFzZSIgLz4KKyAgICAgIDxUeXBlIE5hbWU9IkNsaWVudFN0YXRlQXJncyIgLz4KKyAgICAgIDxUeXBlIE5hbWU9IkVycm9yQ29kZUFyZ3MiIC8+CisgICAgICA8VHlwZSBOYW1lPSJEb21haW5JbmZvQXJncyIgLz4KKyAgICAgIDxUeXBlIE5hbWU9IkVudHJ5R3JvdXBTdGF0ZUFyZ3MiIC8+CisgICAgICA8VHlwZSBOYW1lPSJSZWNvcmRJbmZvIiAvPgorICAgICAgPFR5cGUgTmFtZT0iUmVjb3JkSW5mb0FyZ3MiIC8+CisgICAgICA8VHlwZSBOYW1lPSJSZWNvcmRCcm93c2VyIiAvPgorICAgICAgPFR5cGUgTmFtZT0iU2VydmljZUluZm9BcmdzIiAvPgorICAgICAgPFR5cGUgTmFtZT0iU2VydmljZVR5cGVJbmZvQXJncyIgLz4KKyAgICAgIDxUeXBlIE5hbWU9IkVycm9yQ29kZUhhbmRsZXIiIC8+CisgICAgICA8VHlwZSBOYW1lPSJSZWNvcmRJbmZvSGFuZGxlciIgLz4KKyAgICAgIDxUeXBlIE5hbWU9IkNsaWVudEZsYWdzIiAvPgorICAgICAgPFR5cGUgTmFtZT0iRXJyb3JDb2RlIiAvPgorICAgICAgPFR5cGUgTmFtZT0iUHVibGlzaEZsYWdzIiAvPgorICAgICAgPFR5cGUgTmFtZT0iUmVjb3JkQ2xhc3MiIC8+CisgICAgICA8VHlwZSBOYW1lPSJSZWNvcmRUeXBlIiAvPgorICAgIDwvTmFtZXNwYWNlPgorICA8L1R5cGVzPgorICA8VGl0bGU+YXZhaGktc2hhcnA8L1RpdGxlPgorPC9PdmVydmlldz4KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS1zaGFycC9nZW5jZmcuc2ggYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvZ2VuY2ZnLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM0ODYxODcKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktc2hhcnAvZ2VuY2ZnLnNoCkBAIC0wLDAgKzEsMTIgQEAKKyMhL2Jpbi9zaAorCisuICQxCitjbGllbnRfZGxuYW1lPSRkbG5hbWUKKy4gJDIKK2NvbW1vbl9kbG5hbWU9JGRsbmFtZQorLiAkMworZ2xpYl9kbG5hbWU9JGRsbmFtZQorCitleGVjIHNlZCAtZSAicyxAQ0xJRU5UX0RMTkFNRVxALCR7Y2xpZW50X2RsbmFtZX0sZyIgXAorICAgICAgICAgLWUgInMsQENPTU1PTl9ETE5BTUVcQCwke2NvbW1vbl9kbG5hbWV9LGciIFwKKyAgICAgICAgIC1lICJzLEBHTElCX0RMTkFNRVxALCR7Z2xpYl9kbG5hbWV9LGciCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktdWktZ3RrMy5wYy5pbiBiL2F2YWhpLTAuNi4zMS9hdmFoaS11aS1ndGszLnBjLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3YzQzMjIKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktdWktZ3RrMy5wYy5pbgpAQCAtMCwwICsxLDExIEBACitwcmVmaXg9QHByZWZpeEAKK2V4ZWNfcHJlZml4PSR7cHJlZml4fQorbGliZGlyPUBsaWJkaXJACitpbmNsdWRlZGlyPSR7cHJlZml4fS9pbmNsdWRlCisKK05hbWU6IGF2YWhpLXVpCitEZXNjcmlwdGlvbjogQXZhaGkgTXVsdGljYXN0IEROUyBSZXNwb25kZXIgKENvbW1vbiBHVEszIFVJIHN1cHBvcnQpCitSZXF1aXJlczogZ3RrKy0zLjAgYXZhaGktY2xpZW50IGF2YWhpLWdsaWIKK1ZlcnNpb246IEBQQUNLQUdFX1ZFUlNJT05ACitMaWJzOiAtTCR7bGliZGlyfSAtbGF2YWhpLXVpLWd0azMKK0NmbGFnczogLURfUkVFTlRSQU5UIC1JJHtpbmNsdWRlZGlyfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLXVpLXNoYXJwLnBjLmluIGIvYXZhaGktMC42LjMxL2F2YWhpLXVpLXNoYXJwLnBjLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkYzM1ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktdWktc2hhcnAucGMuaW4KQEAgLTAsMCArMSw5IEBACitwcmVmaXg9QHByZWZpeEAKK2V4ZWNfcHJlZml4PUBwcmVmaXhACitsaWJkaXI9QGxpYmRpckAKKworTmFtZTogYXZhaGktdWktc2hhcnAKK0Rlc2NyaXB0aW9uOiBNb25vIGJpbmRpbmdzIGZvciB0aGUgQXZhaGkgbUROUy9ETlMtU0Qgc3RhY2sKK1ZlcnNpb246IEBQQUNLQUdFX1ZFUlNJT05ACitSZXF1aXJlczogZ3RrLXNoYXJwLTIuMAorTGliczogLXI6JHtsaWJkaXJ9L21vbm8vYXZhaGktdWktc2hhcnAvYXZhaGktdWktc2hhcnAuZGxsCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktdWktc2hhcnAvTWFrZWZpbGUuYW0gYi9hdmFoaS0wLjYuMzEvYXZhaGktdWktc2hhcnAvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhlYTY0ZgotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS11aS1zaGFycC9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDcwIEBACisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorIworIyBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworIyBVU0EuCisKK0FTU0VNQkxZID0gYXZhaGktdWktc2hhcnAuZGxsCisKK0NMRUFORklMRVMgPSAkKEFTU0VNQkxZKSAkKEFTU0VNQkxZKS5tZGIgJChBU1NFTUJMWSkuY29uZmlnIGJzc2guZXhlCisKK0FWQUhJU09VUkNFUyA9IAkJCQlcCisJJChzcmNkaXIpL1NlcnZpY2VEaWFsb2cuY3MKKworRVhUUkFfRElTVCA9CQkJCQlcCisJJChBVkFISVNPVVJDRVMpCQkJCVwKKwkkKHNyY2RpcikvYXZhaGktdWktc2hhcnAtZG9jcy5zb3VyY2UJXAorCSQoc3JjZGlyKS9lbi8qLnhtbAkJCVwKKwkkKHNyY2RpcikvZW4vKi8qLnhtbAkJCVwKKwkkKHNyY2RpcikvZ2VuY2ZnLnNoICAgICAgICAgICAgICAgICAgICAgXAorCSQoc3JjZGlyKS8kKEFTU0VNQkxZKS5jb25maWcuaW4gICAgICAgICBcCisJJChzcmNkaXIpL2Jzc2guY3MKKworJChBU1NFTUJMWSk6ICQoQVZBSElTT1VSQ0VTKQorCSQoQU1fVl9HRU4pbWNzIC1rZXlmaWxlOiQodG9wX3NyY2RpcikvYXZhaGktc2hhcnAvYXZhaGkuc25rIC10YXJnZXQ6bGlicmFyeSAtb3V0OiRAIC1kZWJ1ZyAkKEFWQUhJU09VUkNFUykgLXBrZzpndGstc2hhcnAtMi4wIC1yOiQodG9wX2J1aWxkZGlyKS9hdmFoaS1zaGFycC9hdmFoaS1zaGFycC5kbGwgLXI6TW9uby5Qb3NpeAorCiskKEFTU0VNQkxZKS5jb25maWc6ICQoQVNTRU1CTFkpLmNvbmZpZy5pbgorCSQoQU1fVl9HRU4pJChzcmNkaXIpL2dlbmNmZy5zaCAkKHRvcF9idWlsZGRpcikvYXZhaGktY29tbW9uL2xpYmF2YWhpLWNvbW1vbi5sYSA8ICQ8ID4gJEAKKworYnNzaC5leGU6ICQoc3JjZGlyKS9ic3NoLmNzICQoQVNTRU1CTFkpCisJJChBTV9WX0dFTiltY3MgLW91dDokQCAkKHNyY2RpcikvYnNzaC5jcyAtcjouL2F2YWhpLXVpLXNoYXJwLmRsbCAtcjouLi9hdmFoaS1zaGFycC9hdmFoaS1zaGFycC5kbGwgLXBrZzpndGstc2hhcnAtMi4wIC1yOk1vbm8uUG9zaXgKKworaWYgSEFWRV9NT05PCitpZiBIQVZFX0RCVVMKK2lmIEhBVkVfR1RLCithbGw6ICQoQVNTRU1CTFkpICQoQVNTRU1CTFkpLmNvbmZpZyBic3NoLmV4ZQorCitpZiBIQVZFX01PTk9ET0MKK3VwZGF0ZS1kb2NzOiAkKEFTU0VNQkxZKQorCSQoQU1fVl9HRU4pJChNT05PRE9DRVIpIC1hc3NlbWJseTokKEFTU0VNQkxZKSAtcGF0aDplbgorCithdmFoaS11aS1zaGFycC1kb2NzLnppcDogYXZhaGktdWktc2hhcnAtZG9jcy50cmVlCisKK2F2YWhpLXVpLXNoYXJwLWRvY3MudHJlZTogJChzcmNkaXIpL2VuLyovKgorCSQoQU1fVl9HRU4pJChNREFTU0VNQkxFUikgLS1vdXQgYXZhaGktdWktc2hhcnAtZG9jcyAtLWVjbWEgJChzcmNkaXIpL2VuCisKK21vbm9kb2NkaXIgPSAkKE1PTk9ET0NfRElSKQorbW9ub2RvY19EQVRBID0gYXZhaGktdWktc2hhcnAtZG9jcy56aXAgYXZhaGktdWktc2hhcnAtZG9jcy50cmVlIGF2YWhpLXVpLXNoYXJwLWRvY3Muc291cmNlCisKK2VuZGlmCisKK2luc3RhbGwtZGF0YS1ob29rOiAkKEFTU0VNQkxZKQorCSQoR0FDVVRJTCkgL2kgJChBU1NFTUJMWSkgL3BhY2thZ2UgYXZhaGktdWktc2hhcnAgL2dhY2RpciAkKGxpYmRpcikgL3Jvb3QgJChERVNURElSKSQobGliZGlyKQorCit1bmluc3RhbGwtaG9vazogJChBU1NFTUJMWSkKKwkkKEdBQ1VUSUwpIC91IGF2YWhpLXVpLXNoYXJwIC9wYWNrYWdlIGF2YWhpLXVpLXNoYXJwIC9nYWNkaXIgJChsaWJkaXIpIC9yb290ICQoREVTVERJUikkKGxpYmRpcikKKworZW5kaWYKK2VuZGlmCitlbmRpZgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLXVpLXNoYXJwL01ha2VmaWxlLmluIGIvYXZhaGktMC42LjMxL2F2YWhpLXVpLXNoYXJwL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2MTE0NjMKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktdWktc2hhcnAvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw2MjMgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEuMyBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKyMKKyMgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyMgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyMgVVNBLgorCitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitzdWJkaXIgPSBhdmFoaS11aS1zaGFycAorRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vYWN4X3B0aHJlYWQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2djY19zdGFja19wcm90ZWN0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9nY2NfdmlzaWJpbGl0eS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vaW50bHRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2ludHJvc3BlY3Rpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2x0b3B0aW9ucy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHR2ZXJzaW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbmxzLm00ICQodG9wX3NyY2RpcikvY29tbW9uL3B5dGhvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9hY2luY2x1ZGUubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vZG94eWdlbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCithbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCithbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICIgJEA7CitBTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCithbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfYXRfMCA9IEAKK1NPVVJDRVMgPQorRElTVF9TT1VSQ0VTID0KK2FtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOworYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKKyAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAorICAgICopIGY9JCRwOzsgXAorICBlc2FjOworYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOworYW1fX2luc3RhbGxfbWF4ID0gNDAKK2FtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCisgIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKK2FtX19ub2Jhc2Vfc3RyaXAgPSBcCisgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgorYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAorICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAorICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAorICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCisgICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAorICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAorICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKK2FtX19iYXNlX2xpc3QgPSBcCisgIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCisgIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKK2FtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIgPSB7IFwKKyAgdGVzdCAteiAiJCRmaWxlcyIgXAorICAgIHx8IHsgdGVzdCAhIC1kICIkJGRpciIgJiYgdGVzdCAhIC1mICIkJGRpciIgJiYgdGVzdCAhIC1yICIkJGRpciI7IH0gXAorICAgIHx8IHsgZWNobyAiICggY2QgJyQkZGlyJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKKyAgICAgICAgICQoYW1fX2NkKSAiJCRkaXIiICYmIHJtIC1mICQkZmlsZXM7IH07IFwKKyAgfQorYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKG1vbm9kb2NkaXIpIgorREFUQSA9ICQobW9ub2RvY19EQVRBKQorRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FMTF9MSU5HVUFTID0gQEFMTF9MSU5HVUFTQAorQU1UQVIgPSBAQU1UQVJACitBTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKK0FSID0gQEFSQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FWQUhJX0FVVE9JUERfR1JPVVAgPSBAQVZBSElfQVVUT0lQRF9HUk9VUEAKK0FWQUhJX0FVVE9JUERfVVNFUiA9IEBBVkFISV9BVVRPSVBEX1VTRVJACitBVkFISV9HUk9VUCA9IEBBVkFISV9HUk9VUEAKK0FWQUhJX1BSSVZfQUNDRVNTX0dST1VQID0gQEFWQUhJX1BSSVZfQUNDRVNTX0dST1VQQAorQVZBSElfVVNFUiA9IEBBVkFISV9VU0VSQAorQVdLID0gQEFXS0AKK0NBVEFMT0dTID0gQENBVEFMT0dTQAorQ0FUT0JKRVhUID0gQENBVE9CSkVYVEAKK0NDID0gQENDQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RBVEFESVJOQU1FID0gQERBVEFESVJOQU1FQAorREJVU19DRkxBR1MgPSBAREJVU19DRkxBR1NACitEQlVTX0xJQlMgPSBAREJVU19MSUJTQAorREJVU19TWVNURU1fQlVTX0RFRkFVTFRfQUREUkVTUyA9IEBEQlVTX1NZU1RFTV9CVVNfREVGQVVMVF9BRERSRVNTQAorREJVU19TWVNfRElSID0gQERCVVNfU1lTX0RJUkAKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitETExUT09MID0gQERMTFRPT0xACitET1hZR0VOX1BBUEVSX1NJWkUgPSBARE9YWUdFTl9QQVBFUl9TSVpFQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitEWF9DT05GSUcgPSBARFhfQ09ORklHQAorRFhfRE9DRElSID0gQERYX0RPQ0RJUkAKK0RYX0RPVCA9IEBEWF9ET1RACitEWF9ET1hZR0VOID0gQERYX0RPWFlHRU5ACitEWF9EVklQUyA9IEBEWF9EVklQU0AKK0RYX0VHUkVQID0gQERYX0VHUkVQQAorRFhfRU5WID0gQERYX0VOVkAKK0RYX0ZMQUdfY2hpID0gQERYX0ZMQUdfY2hpQAorRFhfRkxBR19jaG0gPSBARFhfRkxBR19jaG1ACitEWF9GTEFHX2RvYyA9IEBEWF9GTEFHX2RvY0AKK0RYX0ZMQUdfZG90ID0gQERYX0ZMQUdfZG90QAorRFhfRkxBR19odG1sID0gQERYX0ZMQUdfaHRtbEAKK0RYX0ZMQUdfbWFuID0gQERYX0ZMQUdfbWFuQAorRFhfRkxBR19wZGYgPSBARFhfRkxBR19wZGZACitEWF9GTEFHX3BzID0gQERYX0ZMQUdfcHNACitEWF9GTEFHX3J0ZiA9IEBEWF9GTEFHX3J0ZkAKK0RYX0ZMQUdfeG1sID0gQERYX0ZMQUdfeG1sQAorRFhfSEhDID0gQERYX0hIQ0AKK0RYX0xBVEVYID0gQERYX0xBVEVYQAorRFhfTUFLRUlOREVYID0gQERYX01BS0VJTkRFWEAKK0RYX1BERkxBVEVYID0gQERYX1BERkxBVEVYQAorRFhfUEVSTCA9IEBEWF9QRVJMQAorRFhfUFJPSkVDVCA9IEBEWF9QUk9KRUNUQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFWEVFWFQgPSBARVhFRVhUQAorRkdSRVAgPSBARkdSRVBACitHQUNVVElMID0gQEdBQ1VUSUxACitHRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAorR0xJQjIwX0NGTEFHUyA9IEBHTElCMjBfQ0ZMQUdTQAorR0xJQjIwX0xJQlMgPSBAR0xJQjIwX0xJQlNACitHTU9GSUxFUyA9IEBHTU9GSUxFU0AKK0dNU0dGTVQgPSBAR01TR0ZNVEAKK0dPQkpFQ1RfQ0ZMQUdTID0gQEdPQkpFQ1RfQ0ZMQUdTQAorR09CSkVDVF9MSUJTID0gQEdPQkpFQ1RfTElCU0AKK0dSRVAgPSBAR1JFUEAKK0dUSzIwX0NGTEFHUyA9IEBHVEsyMF9DRkxBR1NACitHVEsyMF9MSUJTID0gQEdUSzIwX0xJQlNACitHVEszMF9DRkxBR1MgPSBAR1RLMzBfQ0ZMQUdTQAorR1RLMzBfTElCUyA9IEBHVEszMF9MSUJTQAorSE9XTF9DT01QQVRfVkVSU0lPTiA9IEBIT1dMX0NPTVBBVF9WRVJTSU9OQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitJTlNUT0JKRVhUID0gQElOU1RPQkpFWFRACitJTlRMTElCUyA9IEBJTlRMTElCU0AKK0lOVExUT09MX0VYVFJBQ1QgPSBASU5UTFRPT0xfRVhUUkFDVEAKK0lOVExUT09MX01FUkdFID0gQElOVExUT09MX01FUkdFQAorSU5UTFRPT0xfUEVSTCA9IEBJTlRMVE9PTF9QRVJMQAorSU5UTFRPT0xfVVBEQVRFID0gQElOVExUT09MX1VQREFURUAKK0lOVFJPU1BFQ1RJT05fQ0ZMQUdTID0gQElOVFJPU1BFQ1RJT05fQ0ZMQUdTQAorSU5UUk9TUEVDVElPTl9DT01QSUxFUiA9IEBJTlRST1NQRUNUSU9OX0NPTVBJTEVSQAorSU5UUk9TUEVDVElPTl9HRU5FUkFURSA9IEBJTlRST1NQRUNUSU9OX0dFTkVSQVRFQAorSU5UUk9TUEVDVElPTl9HSVJESVIgPSBASU5UUk9TUEVDVElPTl9HSVJESVJACitJTlRST1NQRUNUSU9OX0xJQlMgPSBASU5UUk9TUEVDVElPTl9MSUJTQAorSU5UUk9TUEVDVElPTl9NQUtFRklMRSA9IEBJTlRST1NQRUNUSU9OX01BS0VGSUxFQAorSU5UUk9TUEVDVElPTl9TQ0FOTkVSID0gQElOVFJPU1BFQ1RJT05fU0NBTk5FUkAKK0lOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUiA9IEBJTlRST1NQRUNUSU9OX1RZUEVMSUJESVJACitMRCA9IEBMREAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQkFWQUhJX0NMSUVOVF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ0xJRU5UX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPTU1PTl9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ09NTU9OX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPTVBBVF9IT1dMX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DT01QQVRfSE9XTF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9DT01QQVRfTElCRE5TX1NEX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DT01QQVRfTElCRE5TX1NEX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPUkVfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NPUkVfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfR0xJQl9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfR0xJQl9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9HT0JKRUNUX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9HT0JKRUNUX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX1FUM19WRVJTSU9OX0lORk8gPSBATElCQVZBSElfUVQzX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX1FUNF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfUVQ0X1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX1VJX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9VSV9WRVJTSU9OX0lORk9ACitMSUJEQUVNT05fQ0ZMQUdTID0gQExJQkRBRU1PTl9DRkxBR1NACitMSUJEQUVNT05fTElCUyA9IEBMSUJEQUVNT05fTElCU0AKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKK0xOX1MgPSBATE5fU0AKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKK01DUyA9IEBNQ1NACitNREFTU0VNQkxFUiA9IEBNREFTU0VNQkxFUkAKK01LRElSX1AgPSBATUtESVJfUEAKK01LSU5TVEFMTERJUlMgPSBATUtJTlNUQUxMRElSU0AKK01PQ19RVDMgPSBATU9DX1FUM0AKK01PQ19RVDQgPSBATU9DX1FUNEAKK01PTk9ET0NFUiA9IEBNT05PRE9DRVJACitNT05PRE9DX0NGTEFHUyA9IEBNT05PRE9DX0NGTEFHU0AKK01PTk9ET0NfRElSID0gQE1PTk9ET0NfRElSQAorTU9OT0RPQ19MSUJTID0gQE1PTk9ET0NfTElCU0AKK01TR0ZNVCA9IEBNU0dGTVRACitNU0dGTVRfT1BUUyA9IEBNU0dGTVRfT1BUU0AKK01TR01FUkdFID0gQE1TR01FUkdFQAorTk0gPSBATk1ACitOTUVESVQgPSBATk1FRElUQAorT0JKRFVNUCA9IEBPQkpEVU1QQAorT0JKRVhUID0gQE9CSkVYVEAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQS0dfQ09ORklHX0xJQkRJUiA9IEBQS0dfQ09ORklHX0xJQkRJUkAKK1BLR19DT05GSUdfUEFUSCA9IEBQS0dfQ09ORklHX1BBVEhACitQT0ZJTEVTID0gQFBPRklMRVNACitQT1NVQiA9IEBQT1NVQkAKK1BPX0lOX0RBVEFESVJfRkFMU0UgPSBAUE9fSU5fREFUQURJUl9GQUxTRUAKK1BPX0lOX0RBVEFESVJfVFJVRSA9IEBQT19JTl9EQVRBRElSX1RSVUVACitQVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACitQVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKK1BUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACitQWVRIT04gPSBAUFlUSE9OQAorUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKK1BZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACitQWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACitQWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKK1FUM19DRkxBR1MgPSBAUVQzX0NGTEFHU0AKK1FUM19MSUJTID0gQFFUM19MSUJTQAorUVQ0X0NGTEFHUyA9IEBRVDRfQ0ZMQUdTQAorUVQ0X0xJQlMgPSBAUVQ0X0xJQlNACitSQU5MSUIgPSBAUkFOTElCQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTVE9XID0gQFNUT1dACitTVFJJUCA9IEBTVFJJUEAKK1VTRV9OTFMgPSBAVVNFX05MU0AKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1ZJU0lCSUxJVFlfSElEREVOX0NGTEFHUyA9IEBWSVNJQklMSVRZX0hJRERFTl9DRkxBR1NACitYR0VUVEVYVCA9IEBYR0VUVEVYVEAKK1hNTF9DRkxBR1MgPSBAWE1MX0NGTEFHU0AKK1hNTF9MSUJTID0gQFhNTF9MSUJTQAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorYWNfY3RfQVIgPSBAYWNfY3RfQVJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithY3hfcHRocmVhZF9jb25maWcgPSBAYWN4X3B0aHJlYWRfY29uZmlnQAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACithdmFoaV9ydW50aW1lX2RpciA9IEBhdmFoaV9ydW50aW1lX2RpckAKK2F2YWhpX3NvY2tldCA9IEBhdmFoaV9zb2NrZXRACithdmFoaWxvY2FsZWRpciA9IEBhdmFoaWxvY2FsZWRpckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraGF2ZV9wa2dfY29uZmlnID0gQGhhdmVfcGtnX2NvbmZpZ0AKK2hhdmVfeG1sdG9tYW4gPSBAaGF2ZV94bWx0b21hbkAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitpbnRlcmZhY2VzZGlyID0gQGludGVyZmFjZXNkaXJACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKK3BrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitweWV4ZWNkaXIgPSBAcHlleGVjZGlyQAorcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3N5c3RlbWRzeXN0ZW11bml0ZGlyID0gQHN5c3RlbWRzeXN0ZW11bml0ZGlyQAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK3RvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKK3RvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitBU1NFTUJMWSA9IGF2YWhpLXVpLXNoYXJwLmRsbAorQ0xFQU5GSUxFUyA9ICQoQVNTRU1CTFkpICQoQVNTRU1CTFkpLm1kYiAkKEFTU0VNQkxZKS5jb25maWcgYnNzaC5leGUKK0FWQUhJU09VUkNFUyA9IFwKKwkkKHNyY2RpcikvU2VydmljZURpYWxvZy5jcworCitFWFRSQV9ESVNUID0gXAorCSQoQVZBSElTT1VSQ0VTKQkJCQlcCisJJChzcmNkaXIpL2F2YWhpLXVpLXNoYXJwLWRvY3Muc291cmNlCVwKKwkkKHNyY2RpcikvZW4vKi54bWwJCQlcCisJJChzcmNkaXIpL2VuLyovKi54bWwJCQlcCisJJChzcmNkaXIpL2dlbmNmZy5zaCAgICAgICAgICAgICAgICAgICAgIFwKKwkkKHNyY2RpcikvJChBU1NFTUJMWSkuY29uZmlnLmluICAgICAgICAgXAorCSQoc3JjZGlyKS9ic3NoLmNzCisKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HVEtfVFJVRUBASEFWRV9NT05PRE9DX1RSVUVAQEhBVkVfTU9OT19UUlVFQG1vbm9kb2NkaXIgPSAkKE1PTk9ET0NfRElSKQorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dUS19UUlVFQEBIQVZFX01PTk9ET0NfVFJVRUBASEFWRV9NT05PX1RSVUVAbW9ub2RvY19EQVRBID0gYXZhaGktdWktc2hhcnAtZG9jcy56aXAgYXZhaGktdWktc2hhcnAtZG9jcy50cmVlIGF2YWhpLXVpLXNoYXJwLWRvY3Muc291cmNlCithbGw6IGFsbC1hbQorCisuU1VGRklYRVM6CiskKHNyY2RpcikvTWFrZWZpbGUuaW46ICAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAorCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiBhdmFoaS11aS1zaGFycC9NYWtlZmlsZSc7IFwKKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gYXZhaGktdWktc2hhcnAvTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6ICAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6ICAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKGFtX19hY2xvY2FsX200X2RlcHMpOgorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworaW5zdGFsbC1tb25vZG9jREFUQTogJChtb25vZG9jX0RBVEEpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJdGVzdCAteiAiJChtb25vZG9jZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQobW9ub2RvY2RpcikiCisJQGxpc3Q9JyQobW9ub2RvY19EQVRBKSc7IHRlc3QgLW4gIiQobW9ub2RvY2RpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAorCSAgZWNobyAiJCRkJCRwIjsgXAorCWRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAorCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKKwkgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAnJChERVNURElSKSQobW9ub2RvY2RpciknIjsgXAorCSAgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgIiQoREVTVERJUikkKG1vbm9kb2NkaXIpIiB8fCBleGl0ICQkPzsgXAorCWRvbmUKKwordW5pbnN0YWxsLW1vbm9kb2NEQVRBOgorCUAkKE5PUk1BTF9VTklOU1RBTEwpCisJQGxpc3Q9JyQobW9ub2RvY19EQVRBKSc7IHRlc3QgLW4gIiQobW9ub2RvY2RpcikiIHx8IGxpc3Q9OyBcCisJZmlsZXM9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7IFwKKwlkaXI9JyQoREVTVERJUikkKG1vbm9kb2NkaXIpJzsgJChhbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyKQordGFnczogVEFHUworVEFHUzoKKworY3RhZ3M6IENUQUdTCitDVEFHUzoKKworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1hbQorYWxsLWFtOiBNYWtlZmlsZSAkKERBVEEpCitpbnN0YWxsZGlyczoKKwlmb3IgZGlyIGluICIkKERFU1RESVIpJChtb25vZG9jZGlyKSI7IGRvIFwKKwkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKE1LRElSX1ApICIkJGRpciI7IFwKKwlkb25lCitpbnN0YWxsOiBpbnN0YWxsLWFtCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KK3VuaW5zdGFsbDogdW5pbnN0YWxsLWFtCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCitpbnN0YWxsLXN0cmlwOgorCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgICAgICBpbnN0YWxsOyBcCisJZWxzZSBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKKwlmaQorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDTEVBTkZJTEVTKSIgfHwgcm0gLWYgJChDTEVBTkZJTEVTKQorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitASEFWRV9EQlVTX0ZBTFNFQGluc3RhbGwtZGF0YS1ob29rOgorQEhBVkVfR1RLX0ZBTFNFQGluc3RhbGwtZGF0YS1ob29rOgorQEhBVkVfTU9OT19GQUxTRUBpbnN0YWxsLWRhdGEtaG9vazoKK0BIQVZFX0RCVVNfRkFMU0VAdW5pbnN0YWxsLWhvb2s6CitASEFWRV9HVEtfRkFMU0VAdW5pbnN0YWxsLWhvb2s6CitASEFWRV9NT05PX0ZBTFNFQHVuaW5zdGFsbC1ob29rOgorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWdlbmVyaWMKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLW1vbm9kb2NEQVRBCisJQCQoTk9STUFMX0lOU1RBTEwpCisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1kYXRhLWhvb2sKK2luc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQorCitpbnN0YWxsLWR2aS1hbToKKworaW5zdGFsbC1leGVjLWFtOgorCitpbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQorCitpbnN0YWxsLWh0bWwtYW06CisKK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisKK2luc3RhbGwtaW5mby1hbToKKworaW5zdGFsbC1tYW46CisKK2luc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQorCitpbnN0YWxsLXBkZi1hbToKKworaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQorCitpbnN0YWxsLXBzLWFtOgorCitpbnN0YWxsY2hlY2stYW06CisKK21haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtYW0KKworcGRmLWFtOgorCitwczogcHMtYW0KKworcHMtYW06CisKK3VuaW5zdGFsbC1hbTogdW5pbnN0YWxsLW1vbm9kb2NEQVRBCisJQCQoTk9STUFMX0lOU1RBTEwpCisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgdW5pbnN0YWxsLWhvb2sKKy5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLXN0cmlwIHVuaW5zdGFsbC1hbQorCisuUEhPTlk6IGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIFwKKwlkaXN0Y2xlYW4gZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGRpciBkdmkgXAorCWR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBcCisJaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWRhdGEtaG9vayBpbnN0YWxsLWR2aSBcCisJaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgXAorCWluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIFwKKwlpbnN0YWxsLW1vbm9kb2NEQVRBIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgXAorCWluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIFwKKwlpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gXAorCXBzIHBzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gdW5pbnN0YWxsLWhvb2sgXAorCXVuaW5zdGFsbC1tb25vZG9jREFUQQorCisKKyQoQVNTRU1CTFkpOiAkKEFWQUhJU09VUkNFUykKKwkkKEFNX1ZfR0VOKW1jcyAta2V5ZmlsZTokKHRvcF9zcmNkaXIpL2F2YWhpLXNoYXJwL2F2YWhpLnNuayAtdGFyZ2V0OmxpYnJhcnkgLW91dDokQCAtZGVidWcgJChBVkFISVNPVVJDRVMpIC1wa2c6Z3RrLXNoYXJwLTIuMCAtcjokKHRvcF9idWlsZGRpcikvYXZhaGktc2hhcnAvYXZhaGktc2hhcnAuZGxsIC1yOk1vbm8uUG9zaXgKKworJChBU1NFTUJMWSkuY29uZmlnOiAkKEFTU0VNQkxZKS5jb25maWcuaW4KKwkkKEFNX1ZfR0VOKSQoc3JjZGlyKS9nZW5jZmcuc2ggJCh0b3BfYnVpbGRkaXIpL2F2YWhpLWNvbW1vbi9saWJhdmFoaS1jb21tb24ubGEgPCAkPCA+ICRACisKK2Jzc2guZXhlOiAkKHNyY2RpcikvYnNzaC5jcyAkKEFTU0VNQkxZKQorCSQoQU1fVl9HRU4pbWNzIC1vdXQ6JEAgJChzcmNkaXIpL2Jzc2guY3MgLXI6Li9hdmFoaS11aS1zaGFycC5kbGwgLXI6Li4vYXZhaGktc2hhcnAvYXZhaGktc2hhcnAuZGxsIC1wa2c6Z3RrLXNoYXJwLTIuMCAtcjpNb25vLlBvc2l4CisKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HVEtfVFJVRUBASEFWRV9NT05PX1RSVUVAYWxsOiAkKEFTU0VNQkxZKSAkKEFTU0VNQkxZKS5jb25maWcgYnNzaC5leGUKKworQEhBVkVfREJVU19UUlVFQEBIQVZFX0dUS19UUlVFQEBIQVZFX01PTk9ET0NfVFJVRUBASEFWRV9NT05PX1RSVUVAdXBkYXRlLWRvY3M6ICQoQVNTRU1CTFkpCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR1RLX1RSVUVAQEhBVkVfTU9OT0RPQ19UUlVFQEBIQVZFX01PTk9fVFJVRUAJJChBTV9WX0dFTikkKE1PTk9ET0NFUikgLWFzc2VtYmx5OiQoQVNTRU1CTFkpIC1wYXRoOmVuCisKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HVEtfVFJVRUBASEFWRV9NT05PRE9DX1RSVUVAQEhBVkVfTU9OT19UUlVFQGF2YWhpLXVpLXNoYXJwLWRvY3MuemlwOiBhdmFoaS11aS1zaGFycC1kb2NzLnRyZWUKKworQEhBVkVfREJVU19UUlVFQEBIQVZFX0dUS19UUlVFQEBIQVZFX01PTk9ET0NfVFJVRUBASEFWRV9NT05PX1RSVUVAYXZhaGktdWktc2hhcnAtZG9jcy50cmVlOiAkKHNyY2RpcikvZW4vKi8qCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR1RLX1RSVUVAQEhBVkVfTU9OT0RPQ19UUlVFQEBIQVZFX01PTk9fVFJVRUAJJChBTV9WX0dFTikkKE1EQVNTRU1CTEVSKSAtLW91dCBhdmFoaS11aS1zaGFycC1kb2NzIC0tZWNtYSAkKHNyY2RpcikvZW4KKworQEhBVkVfREJVU19UUlVFQEBIQVZFX0dUS19UUlVFQEBIQVZFX01PTk9fVFJVRUBpbnN0YWxsLWRhdGEtaG9vazogJChBU1NFTUJMWSkKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HVEtfVFJVRUBASEFWRV9NT05PX1RSVUVACSQoR0FDVVRJTCkgL2kgJChBU1NFTUJMWSkgL3BhY2thZ2UgYXZhaGktdWktc2hhcnAgL2dhY2RpciAkKGxpYmRpcikgL3Jvb3QgJChERVNURElSKSQobGliZGlyKQorCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR1RLX1RSVUVAQEhBVkVfTU9OT19UUlVFQHVuaW5zdGFsbC1ob29rOiAkKEFTU0VNQkxZKQorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dUS19UUlVFQEBIQVZFX01PTk9fVFJVRUAJJChHQUNVVElMKSAvdSBhdmFoaS11aS1zaGFycCAvcGFja2FnZSBhdmFoaS11aS1zaGFycCAvZ2FjZGlyICQobGliZGlyKSAvcm9vdCAkKERFU1RESVIpJChsaWJkaXIpCisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS11aS1zaGFycC9TZXJ2aWNlRGlhbG9nLmNzIGIvYXZhaGktMC42LjMxL2F2YWhpLXVpLXNoYXJwL1NlcnZpY2VEaWFsb2cuY3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFmNzQ3OQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS11aS1zaGFycC9TZXJ2aWNlRGlhbG9nLmNzCkBAIC0wLDAgKzEsMjM4IEBACit1c2luZyBTeXN0ZW07Cit1c2luZyBTeXN0ZW0uTmV0OwordXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zOwordXNpbmcgU3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzOwordXNpbmcgR3RrOwordXNpbmcgTW9uby5Vbml4OwordXNpbmcgTW9uby5Vbml4Lk5hdGl2ZTsKKworbmFtZXNwYWNlIEF2YWhpLlVJCit7CisgICAgcHVibGljIGNsYXNzIFNlcnZpY2VEaWFsb2cgOiBEaWFsb2cKKyAgICB7CisgICAgICAgIFtEbGxJbXBvcnQgKCJhdmFoaS11aSIpXQorICAgICAgICBwcml2YXRlIHN0YXRpYyBleHRlcm4gSW50UHRyIGF1aV9zZXJ2aWNlX2RpYWxvZ19uZXcgKHN0cmluZyB0aXRsZSwgSW50UHRyIHBhcmVudCwgSW50UHRyIGR1bW15KTsKKworICAgICAgICBbRGxsSW1wb3J0ICgiYXZhaGktdWkiKV0KKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZXh0ZXJuIHZvaWQgYXVpX3NlcnZpY2VfZGlhbG9nX3NldF9icm93c2Vfc2VydmljZV90eXBlc3YgKEludFB0ciBkaWFsb2csIEludFB0cltdIHR5cGVzKTsKKworICAgICAgICBbRGxsSW1wb3J0ICgiYXZhaGktdWkiKV0KKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZXh0ZXJuIEludFB0ciBhdWlfc2VydmljZV9kaWFsb2dfZ2V0X2Jyb3dzZV9zZXJ2aWNlX3R5cGVzIChJbnRQdHIgZGlhbG9nKTsKKworICAgICAgICBbRGxsSW1wb3J0ICgiYXZhaGktdWkiKV0KKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZXh0ZXJuIEludFB0ciBhdWlfc2VydmljZV9kaWFsb2dfZ2V0X2RvbWFpbiAoSW50UHRyIGRpYWxvZyk7CisKKyAgICAgICAgW0RsbEltcG9ydCAoImF2YWhpLXVpIildCisgICAgICAgIHByaXZhdGUgc3RhdGljIGV4dGVybiB2b2lkIGF1aV9zZXJ2aWNlX2RpYWxvZ19zZXRfZG9tYWluIChJbnRQdHIgZGlhbG9nLCBJbnRQdHIgZG9tYWluKTsKKworICAgICAgICBbRGxsSW1wb3J0ICgiYXZhaGktdWkiKV0KKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZXh0ZXJuIEludFB0ciBhdWlfc2VydmljZV9kaWFsb2dfZ2V0X3NlcnZpY2VfdHlwZSAoSW50UHRyIGRpYWxvZyk7CisKKyAgICAgICAgW0RsbEltcG9ydCAoImF2YWhpLXVpIildCisgICAgICAgIHByaXZhdGUgc3RhdGljIGV4dGVybiB2b2lkIGF1aV9zZXJ2aWNlX2RpYWxvZ19zZXRfc2VydmljZV90eXBlIChJbnRQdHIgZGlhbG9nLCBJbnRQdHIgdHlwZSk7CisKKyAgICAgICAgW0RsbEltcG9ydCAoImF2YWhpLXVpIildCisgICAgICAgIHByaXZhdGUgc3RhdGljIGV4dGVybiBJbnRQdHIgYXVpX3NlcnZpY2VfZGlhbG9nX2dldF9zZXJ2aWNlX25hbWUgKEludFB0ciBkaWFsb2cpOworCisgICAgICAgIFtEbGxJbXBvcnQgKCJhdmFoaS11aSIpXQorICAgICAgICBwcml2YXRlIHN0YXRpYyBleHRlcm4gdm9pZCBhdWlfc2VydmljZV9kaWFsb2dfc2V0X3NlcnZpY2VfbmFtZSAoSW50UHRyIGRpYWxvZywgSW50UHRyIHR5cGUpOworCisgICAgICAgIFtEbGxJbXBvcnQgKCJhdmFoaS11aSIpXQorICAgICAgICBwcml2YXRlIHN0YXRpYyBleHRlcm4gSW50UHRyIGF1aV9zZXJ2aWNlX2RpYWxvZ19nZXRfYWRkcmVzcyAoSW50UHRyIGRpYWxvZyk7CisKKyAgICAgICAgW0RsbEltcG9ydCAoImF2YWhpLXVpIildCisgICAgICAgIHByaXZhdGUgc3RhdGljIGV4dGVybiBVSW50MTYgYXVpX3NlcnZpY2VfZGlhbG9nX2dldF9wb3J0IChJbnRQdHIgZGlhbG9nKTsKKworICAgICAgICBbRGxsSW1wb3J0ICgiYXZhaGktdWkiKV0KKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZXh0ZXJuIEludFB0ciBhdWlfc2VydmljZV9kaWFsb2dfZ2V0X2hvc3RfbmFtZSAoSW50UHRyIGRpYWxvZyk7CisKKyAgICAgICAgW0RsbEltcG9ydCAoImF2YWhpLXVpIildCisgICAgICAgIHByaXZhdGUgc3RhdGljIGV4dGVybiBJbnRQdHIgYXVpX3NlcnZpY2VfZGlhbG9nX2dldF90eHRfZGF0YSAoSW50UHRyIGRpYWxvZyk7CisKKyAgICAgICAgW0RsbEltcG9ydCAoImF2YWhpLXVpIildCisgICAgICAgIHByaXZhdGUgc3RhdGljIGV4dGVybiBib29sIGF1aV9zZXJ2aWNlX2RpYWxvZ19nZXRfcmVzb2x2ZV9zZXJ2aWNlIChJbnRQdHIgZGlhbG9nKTsKKworICAgICAgICBbRGxsSW1wb3J0ICgiYXZhaGktdWkiKV0KKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZXh0ZXJuIHZvaWQgYXVpX3NlcnZpY2VfZGlhbG9nX3NldF9yZXNvbHZlX3NlcnZpY2UgKEludFB0ciBkaWFsb2csIGJvb2wgdmFsKTsKKworICAgICAgICBbRGxsSW1wb3J0ICgiYXZhaGktdWkiKV0KKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZXh0ZXJuIGJvb2wgYXVpX3NlcnZpY2VfZGlhbG9nX2dldF9yZXNvbHZlX2hvc3RfbmFtZSAoSW50UHRyIGRpYWxvZyk7CisKKyAgICAgICAgW0RsbEltcG9ydCAoImF2YWhpLXVpIildCisgICAgICAgIHByaXZhdGUgc3RhdGljIGV4dGVybiB2b2lkIGF1aV9zZXJ2aWNlX2RpYWxvZ19zZXRfcmVzb2x2ZV9ob3N0X25hbWUgKEludFB0ciBkaWFsb2csIGJvb2wgdmFsKTsKKworICAgICAgICBbRGxsSW1wb3J0ICgiYXZhaGktdWkiKV0KKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZXh0ZXJuIFByb3RvY29sIGF1aV9zZXJ2aWNlX2RpYWxvZ19nZXRfYWRkcmVzc19mYW1pbHkgKEludFB0ciBkaWFsb2cpOworCisgICAgICAgIFtEbGxJbXBvcnQgKCJhdmFoaS11aSIpXQorICAgICAgICBwcml2YXRlIHN0YXRpYyBleHRlcm4gdm9pZCBhdWlfc2VydmljZV9kaWFsb2dfc2V0X2FkZHJlc3NfZmFtaWx5IChJbnRQdHIgZGlhbG9nLCBQcm90b2NvbCBwcm90byk7CisKKyAgICAgICAgW0RsbEltcG9ydCAoImF2YWhpLWNvbW1vbiIpXQorICAgICAgICBwcml2YXRlIHN0YXRpYyBleHRlcm4gSW50UHRyIGF2YWhpX2FkZHJlc3Nfc25wcmludCAoSW50UHRyIGJ1ZiwgaW50IHNpemUsIEludFB0ciBhZGRyZXNzKTsKKworICAgICAgICBbRGxsSW1wb3J0ICgiYXZhaGktY29tbW9uIildCisgICAgICAgIHByaXZhdGUgc3RhdGljIGV4dGVybiBJbnRQdHIgYXZhaGlfc3RyaW5nX2xpc3RfZ2V0X25leHQgKEludFB0ciBsaXN0KTsKKworICAgICAgICBbRGxsSW1wb3J0ICgiYXZhaGktY29tbW9uIildCisgICAgICAgIHByaXZhdGUgc3RhdGljIGV4dGVybiBJbnRQdHIgYXZhaGlfc3RyaW5nX2xpc3RfZ2V0X3RleHQgKEludFB0ciBsaXN0KTsKKworICAgICAgICBbRGxsSW1wb3J0ICgiYXZhaGktY29tbW9uIildCisgICAgICAgIHByaXZhdGUgc3RhdGljIGV4dGVybiBpbnQgYXZhaGlfc3RyaW5nX2xpc3RfZ2V0X3NpemUgKEludFB0ciBsaXN0KTsKKworICAgICAgICBwdWJsaWMgc3RyaW5nW10gQnJvd3NlU2VydmljZVR5cGVzIHsKKyAgICAgICAgICAgIGdldCB7CisgICAgICAgICAgICAgICAgSW50UHRyIGFyciA9IGF1aV9zZXJ2aWNlX2RpYWxvZ19nZXRfYnJvd3NlX3NlcnZpY2VfdHlwZXMgKFJhdyk7CisKKyAgICAgICAgICAgICAgICBBcnJheUxpc3QgdmFsdWVzID0gbmV3IEFycmF5TGlzdCAoKTsKKworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOztpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgSW50UHRyIHB0ciA9IE1hcnNoYWwuUmVhZEludFB0ciAoYXJyLCBpICogTWFyc2hhbC5TaXplT2YgKHR5cGVvZiAoSW50UHRyKSkpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChwdHIgPT0gSW50UHRyLlplcm8pCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICB2YWx1ZXMuQWRkIChHTGliLk1hcnNoYWxsZXIuVXRmOFB0clRvU3RyaW5nIChwdHIpKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gKHN0cmluZ1tdKSB2YWx1ZXMuVG9BcnJheSAodHlwZW9mIChzdHJpbmcpKTsKKyAgICAgICAgICAgIH0gc2V0IHsKKyAgICAgICAgICAgICAgICBJbnRQdHJbXSB0eXBlczsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICB0eXBlcyA9IG5ldyBJbnRQdHJbXSB7IEludFB0ci5aZXJvIH07CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdHlwZXMgPSBuZXcgSW50UHRyW3ZhbHVlLkxlbmd0aCArIDFdOworCisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFsdWUuTGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVzW2ldID0gR0xpYi5NYXJzaGFsbGVyLlN0cmluZ1RvUHRyR1N0cmR1cCAodmFsdWVbaV0pOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgdHlwZXNbdmFsdWUuTGVuZ3RoXSA9IEludFB0ci5aZXJvOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGF1aV9zZXJ2aWNlX2RpYWxvZ19zZXRfYnJvd3NlX3NlcnZpY2VfdHlwZXN2IChSYXcsIHR5cGVzKTsKKworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOztpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVzW2ldICE9IEludFB0ci5aZXJvKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgR0xpYi5NYXJzaGFsbGVyLkZyZWUgKHR5cGVzW2ldKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgc3RyaW5nIFNlcnZpY2VUeXBlIHsKKyAgICAgICAgICAgIGdldCB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdMaWIuTWFyc2hhbGxlci5VdGY4UHRyVG9TdHJpbmcgKGF1aV9zZXJ2aWNlX2RpYWxvZ19nZXRfc2VydmljZV90eXBlIChSYXcpKTsKKyAgICAgICAgICAgIH0gc2V0IHsKKyAgICAgICAgICAgICAgICBJbnRQdHIgdHlwZSA9IEdMaWIuTWFyc2hhbGxlci5TdHJpbmdUb1B0ckdTdHJkdXAgKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBhdWlfc2VydmljZV9kaWFsb2dfc2V0X3NlcnZpY2VfdHlwZSAoUmF3LCB0eXBlKTsKKyAgICAgICAgICAgICAgICBHTGliLk1hcnNoYWxsZXIuRnJlZSAodHlwZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgc3RyaW5nIFNlcnZpY2VOYW1lIHsKKyAgICAgICAgICAgIGdldCB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdMaWIuTWFyc2hhbGxlci5VdGY4UHRyVG9TdHJpbmcgKGF1aV9zZXJ2aWNlX2RpYWxvZ19nZXRfc2VydmljZV9uYW1lIChSYXcpKTsKKyAgICAgICAgICAgIH0gc2V0IHsKKyAgICAgICAgICAgICAgICBJbnRQdHIgbmFtZSA9IEdMaWIuTWFyc2hhbGxlci5TdHJpbmdUb1B0ckdTdHJkdXAgKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBhdWlfc2VydmljZV9kaWFsb2dfc2V0X3NlcnZpY2VfbmFtZSAoUmF3LCBuYW1lKTsKKyAgICAgICAgICAgICAgICBHTGliLk1hcnNoYWxsZXIuRnJlZSAobmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgSVBBZGRyZXNzIEFkZHJlc3MgeworICAgICAgICAgICAgZ2V0IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gUHRyVG9BZGRyZXNzIChhdWlfc2VydmljZV9kaWFsb2dfZ2V0X2FkZHJlc3MgKFJhdykpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFVJbnQxNiBQb3J0IHsKKyAgICAgICAgICAgIGdldCB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGF1aV9zZXJ2aWNlX2RpYWxvZ19nZXRfcG9ydCAoUmF3KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBzdHJpbmcgSG9zdE5hbWUgeworICAgICAgICAgICAgZ2V0IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xpYi5NYXJzaGFsbGVyLlV0ZjhQdHJUb1N0cmluZyAoYXVpX3NlcnZpY2VfZGlhbG9nX2dldF9ob3N0X25hbWUgKFJhdykpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHN0cmluZyBEb21haW4geworICAgICAgICAgICAgZ2V0IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xpYi5NYXJzaGFsbGVyLlV0ZjhQdHJUb1N0cmluZyAoYXVpX3NlcnZpY2VfZGlhbG9nX2dldF9kb21haW4gKFJhdykpOworICAgICAgICAgICAgfSBzZXQgeworICAgICAgICAgICAgICAgIEludFB0ciBkb21haW4gPSBHTGliLk1hcnNoYWxsZXIuU3RyaW5nVG9QdHJHU3RyZHVwICh2YWx1ZSk7CisgICAgICAgICAgICAgICAgYXVpX3NlcnZpY2VfZGlhbG9nX3NldF9kb21haW4gKFJhdywgZG9tYWluKTsKKyAgICAgICAgICAgICAgICBHTGliLk1hcnNoYWxsZXIuRnJlZSAoZG9tYWluKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBieXRlW11bXSBUeHREYXRhIHsKKyAgICAgICAgICAgIGdldCB7CisgICAgICAgICAgICAgICAgQXJyYXlMaXN0IHR4dGxpc3QgPSBuZXcgQXJyYXlMaXN0ICgpOworICAgICAgICAgICAgICAgIEludFB0ciB0eHQgPSBhdWlfc2VydmljZV9kaWFsb2dfZ2V0X3R4dF9kYXRhIChSYXcpOworCisgICAgICAgICAgICAgICAgZm9yIChJbnRQdHIgbCA9IHR4dDsgbCAhPSBJbnRQdHIuWmVybzsgbCA9IGF2YWhpX3N0cmluZ19saXN0X2dldF9uZXh0IChsKSkgeworICAgICAgICAgICAgICAgICAgICBJbnRQdHIgYnVmID0gYXZhaGlfc3RyaW5nX2xpc3RfZ2V0X3RleHQgKGwpOworICAgICAgICAgICAgICAgICAgICBpbnQgbGVuID0gYXZhaGlfc3RyaW5nX2xpc3RfZ2V0X3NpemUgKGwpOworCisgICAgICAgICAgICAgICAgICAgIGJ5dGVbXSB0eHRidWYgPSBuZXcgYnl0ZVtsZW5dOworICAgICAgICAgICAgICAgICAgICBNYXJzaGFsLkNvcHkgKGJ1ZiwgdHh0YnVmLCAwLCBsZW4pOworICAgICAgICAgICAgICAgICAgICB0eHRsaXN0LkFkZCAodHh0YnVmKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gKGJ5dGVbXVtdKSB0eHRsaXN0LlRvQXJyYXkgKHR5cGVvZiAoYnl0ZVtdKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgYm9vbCBSZXNvbHZlU2VydmljZUVuYWJsZWQgeworICAgICAgICAgICAgZ2V0IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYXVpX3NlcnZpY2VfZGlhbG9nX2dldF9yZXNvbHZlX3NlcnZpY2UgKFJhdyk7CisgICAgICAgICAgICB9IHNldCB7CisgICAgICAgICAgICAgICAgYXVpX3NlcnZpY2VfZGlhbG9nX3NldF9yZXNvbHZlX3NlcnZpY2UgKFJhdywgdmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGJvb2wgUmVzb2x2ZUhvc3ROYW1lRW5hYmxlZCB7CisgICAgICAgICAgICBnZXQgeworICAgICAgICAgICAgICAgIHJldHVybiBhdWlfc2VydmljZV9kaWFsb2dfZ2V0X3Jlc29sdmVfaG9zdF9uYW1lIChSYXcpOworICAgICAgICAgICAgfSBzZXQgeworICAgICAgICAgICAgICAgIGF1aV9zZXJ2aWNlX2RpYWxvZ19zZXRfcmVzb2x2ZV9ob3N0X25hbWUgKFJhdywgdmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFByb3RvY29sIEFkZHJlc3NGYW1pbHkgeworICAgICAgICAgICAgZ2V0IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYXVpX3NlcnZpY2VfZGlhbG9nX2dldF9hZGRyZXNzX2ZhbWlseSAoUmF3KTsKKyAgICAgICAgICAgIH0gc2V0IHsKKyAgICAgICAgICAgICAgICBhdWlfc2VydmljZV9kaWFsb2dfc2V0X2FkZHJlc3NfZmFtaWx5IChSYXcsIHZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBTZXJ2aWNlRGlhbG9nIChzdHJpbmcgdGl0bGUsIFdpbmRvdyBwYXJlbnQsIHBhcmFtcyBvYmplY3RbXSBidXR0b25EYXRhKQorICAgICAgICB7CisgICAgICAgICAgICBSYXcgPSBhdWlfc2VydmljZV9kaWFsb2dfbmV3ICh0aXRsZSwgcGFyZW50ID09IG51bGwgPyBJbnRQdHIuWmVybyA6IHBhcmVudC5IYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRQdHIuWmVybyk7CisKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYnV0dG9uRGF0YS5MZW5ndGggLSAxOyBpICs9IDIpIHsKKyAgICAgICAgICAgICAgICBBZGRCdXR0b24gKChzdHJpbmcpIGJ1dHRvbkRhdGFbaV0sIChpbnQpIGJ1dHRvbkRhdGFbaSArIDFdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgc3RhdGljIElQQWRkcmVzcyBQdHJUb0FkZHJlc3MgKEludFB0ciBwdHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIElQQWRkcmVzcyBhZGRyZXNzID0gbnVsbDsKKworICAgICAgICAgICAgaWYgKHB0ciAhPSBJbnRQdHIuWmVybykgeworICAgICAgICAgICAgICAgIEludFB0ciBidWYgPSBTdGRsaWIubWFsbG9jICgyNTYpOworICAgICAgICAgICAgICAgIEludFB0ciBhZGRyUHRyID0gYXZhaGlfYWRkcmVzc19zbnByaW50IChidWYsIDI1NiwgcHRyKTsKKyAgICAgICAgICAgICAgICBhZGRyZXNzID0gSVBBZGRyZXNzLlBhcnNlIChHTGliLk1hcnNoYWxsZXIuVXRmOFB0clRvU3RyaW5nIChhZGRyUHRyKSk7CisKKyAgICAgICAgICAgICAgICBTdGRsaWIuZnJlZSAoYWRkclB0cik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBhZGRyZXNzOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLXVpLXNoYXJwL2F2YWhpLXVpLXNoYXJwLWRvY3Muc291cmNlIGIvYXZhaGktMC42LjMxL2F2YWhpLXVpLXNoYXJwL2F2YWhpLXVpLXNoYXJwLWRvY3Muc291cmNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlN2IxNzIKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktdWktc2hhcnAvYXZhaGktdWktc2hhcnAtZG9jcy5zb3VyY2UKQEAgLTAsMCArMSw0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzxtb25vZG9jPgorICA8c291cmNlIHByb3ZpZGVyPSJlY21hIiBiYXNlZmlsZT0iYXZhaGktdWktc2hhcnAtZG9jcyIgcGF0aD0idmFyaW91cyIgdGl0bGU9IkF2YWhpIiAvPgorPC9tb25vZG9jPgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLXVpLXNoYXJwL2F2YWhpLXVpLXNoYXJwLmRsbC5jb25maWcuaW4gYi9hdmFoaS0wLjYuMzEvYXZhaGktdWktc2hhcnAvYXZhaGktdWktc2hhcnAuZGxsLmNvbmZpZy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTk1NzdmCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLXVpLXNoYXJwL2F2YWhpLXVpLXNoYXJwLmRsbC5jb25maWcuaW4KQEAgLTAsMCArMSw0IEBACis8Y29uZmlndXJhdGlvbj4KKyAgPGRsbG1hcCBkbGw9ImF2YWhpLXVpIiB0YXJnZXQ9ImxpYmF2YWhpLXVpLnNvLjAiLz4KKyAgPGRsbG1hcCBkbGw9ImF2YWhpLWNvbW1vbiIgdGFyZ2V0PSJAQ09NTU9OX0RMTkFNRUAiLz4KKzwvY29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS11aS1zaGFycC9ic3NoLmNzIGIvYXZhaGktMC42LjMxL2F2YWhpLXVpLXNoYXJwL2Jzc2guY3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmEzZDRkNAotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS11aS1zaGFycC9ic3NoLmNzCkBAIC0wLDAgKzEsMzkgQEAKK3VzaW5nIFN5c3RlbTsKK3VzaW5nIFN5c3RlbS5EaWFnbm9zdGljczsKK3VzaW5nIEd0azsKK3VzaW5nIEF2YWhpLlVJOworCitwdWJsaWMgY2xhc3MgRW50cnlQb2ludCB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIE1haW4gKCkgeworICAgICAgICBBcHBsaWNhdGlvbi5Jbml0ICgpOworCisgICAgICAgIFNlcnZpY2VEaWFsb2cgZGlhbG9nID0gbmV3IFNlcnZpY2VEaWFsb2cgKCJDaG9vc2UgU1NIIFNlcnZlciIsIG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0b2NrLkNhbmNlbCwgUmVzcG9uc2VUeXBlLkNhbmNlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RvY2suQ29ubmVjdCwgUmVzcG9uc2VUeXBlLkFjY2VwdCk7CisJZGlhbG9nLkJyb3dzZVNlcnZpY2VUeXBlcyA9IG5ldyBzdHJpbmdbXSB7ICJfc3NoLl90Y3AiIH07CisgICAgICAgIGRpYWxvZy5SZXNvbHZlU2VydmljZUVuYWJsZWQgPSB0cnVlOworCisgICAgICAgIGlmIChkaWFsb2cuUnVuICgpID09IChpbnQpIFJlc3BvbnNlVHlwZS5BY2NlcHQpIHsKKyAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lICgiQ29ubmVjdGluZyB0byB7MH06ezF9IiwgZGlhbG9nLkFkZHJlc3MsIGRpYWxvZy5Qb3J0KTsKKworICAgICAgICAgICAgc3RyaW5nIHVzZXIgPSBFbnZpcm9ubWVudC5Vc2VyTmFtZTsKKworICAgICAgICAgICAgZm9yZWFjaCAoYnl0ZVtdIHR4dEJ5dGVzIGluIGRpYWxvZy5UeHREYXRhKSB7CisgICAgICAgICAgICAgICAgc3RyaW5nIHR4dCA9IFN5c3RlbS5UZXh0LkVuY29kaW5nLlVURjguR2V0U3RyaW5nICh0eHRCeXRlcyk7CisgICAgICAgICAgICAgICAgc3RyaW5nW10gc3BsaXRUeHQgPSB0eHQuU3BsaXQobmV3IGNoYXJbXSB7ICc9JyB9LCAyKTsKKworICAgICAgICAgICAgICAgIGlmIChzcGxpdFR4dC5MZW5ndGggIT0gMikKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBpZiAoc3BsaXRUeHRbMF0gPT0gInUiKSB7CisgICAgICAgICAgICAgICAgICAgIHVzZXIgPSBzcGxpdFR4dFsxXTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBzdHJpbmcgYXJncyA9IFN0cmluZy5Gb3JtYXQgKCJnbm9tZS10ZXJtaW5hbCAtdCB7MH0gLXggc3NoIC1wIHsxfSAtbCB7Mn0gezN9IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpYWxvZy5Ib3N0TmFtZSwgZGlhbG9nLlBvcnQsIHVzZXIsIGRpYWxvZy5BZGRyZXNzLlRvU3RyaW5nICgpKTsKKyAgICAgICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZSAoIkxhdW5jaGluZzogIiArIGFyZ3MpOworICAgICAgICAgICAgICAgIFByb2Nlc3MuU3RhcnQgKGFyZ3MpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLXVpLXNoYXJwL2VuL0F2YWhpLlVJLnhtbCBiL2F2YWhpLTAuNi4zMS9hdmFoaS11aS1zaGFycC9lbi9BdmFoaS5VSS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ5NTgxYwotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS11aS1zaGFycC9lbi9BdmFoaS5VSS54bWwKQEAgLTAsMCArMSw2IEBACis8TmFtZXNwYWNlIE5hbWU9IkF2YWhpLlVJIj4KKyAgPERvY3M+CisgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgPC9Eb2NzPgorPC9OYW1lc3BhY2U+CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktdWktc2hhcnAvZW4vQXZhaGkuVUkvU2VydmljZURpYWxvZy54bWwgYi9hdmFoaS0wLjYuMzEvYXZhaGktdWktc2hhcnAvZW4vQXZhaGkuVUkvU2VydmljZURpYWxvZy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJmYThlZAotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS11aS1zaGFycC9lbi9BdmFoaS5VSS9TZXJ2aWNlRGlhbG9nLnhtbApAQCAtMCwwICsxLDE3MSBAQAorPFR5cGUgTmFtZT0iU2VydmljZURpYWxvZyIgRnVsbE5hbWU9IkF2YWhpLlVJLlNlcnZpY2VEaWFsb2ciPgorICA8VHlwZVNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgY2xhc3MgU2VydmljZURpYWxvZyA6IEd0ay5EaWFsb2ciIC8+CisgIDxBc3NlbWJseUluZm8+CisgICAgPEFzc2VtYmx5TmFtZT5hdmFoaS11aS1zaGFycDwvQXNzZW1ibHlOYW1lPgorICAgIDxBc3NlbWJseVZlcnNpb24+MC4wLjAuMDwvQXNzZW1ibHlWZXJzaW9uPgorICA8L0Fzc2VtYmx5SW5mbz4KKyAgPEJhc2U+CisgICAgPEJhc2VUeXBlTmFtZT5HdGsuRGlhbG9nPC9CYXNlVHlwZU5hbWU+CisgIDwvQmFzZT4KKyAgPEludGVyZmFjZXMgLz4KKyAgPE1lbWJlcnM+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSIuY3RvciI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBTZXJ2aWNlRGlhbG9nIChzdHJpbmcgdGl0bGUsIEd0ay5XaW5kb3cgcGFyZW50LCBvYmplY3RbXSBidXR0b25EYXRhKTsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5Db25zdHJ1Y3RvcjwvTWVtYmVyVHlwZT4KKyAgICAgIDxQYXJhbWV0ZXJzPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9InRpdGxlIiBUeXBlPSJTeXN0ZW0uU3RyaW5nIiAvPgorICAgICAgICA8UGFyYW1ldGVyIE5hbWU9InBhcmVudCIgVHlwZT0iR3RrLldpbmRvdyIgLz4KKyAgICAgICAgPFBhcmFtZXRlciBOYW1lPSJidXR0b25EYXRhIiBUeXBlPSJTeXN0ZW0uT2JqZWN0W10iPgorICAgICAgICAgIDxBdHRyaWJ1dGVzPgorICAgICAgICAgICAgPEF0dHJpYnV0ZT4KKyAgICAgICAgICAgICAgPEF0dHJpYnV0ZU5hbWU+U3lzdGVtLlBhcmFtQXJyYXk8L0F0dHJpYnV0ZU5hbWU+CisgICAgICAgICAgICA8L0F0dHJpYnV0ZT4KKyAgICAgICAgICA8L0F0dHJpYnV0ZXM+CisgICAgICAgIDwvUGFyYW1ldGVyPgorICAgICAgPC9QYXJhbWV0ZXJzPgorICAgICAgPERvY3M+CisgICAgICAgIDxwYXJhbSBuYW1lPSJ0aXRsZSI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHBhcmFtIG5hbWU9InBhcmVudCI+VG8gYmUgYWRkZWQuPC9wYXJhbT4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImJ1dHRvbkRhdGEiPlRvIGJlIGFkZGVkLjwvcGFyYW0+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iQWRkcmVzcyI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBTeXN0ZW0uTmV0LklQQWRkcmVzcyBBZGRyZXNzIHsgZ2V0OyB9OyIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPlByb3BlcnR5PC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5TeXN0ZW0uTmV0LklQQWRkcmVzczwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8dmFsdWU+VG8gYmUgYWRkZWQuPC92YWx1ZT4KKyAgICAgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iQWRkcmVzc0ZhbWlseSI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBBdmFoaS5Qcm90b2NvbCBBZGRyZXNzRmFtaWx5IHsgc2V0OyBnZXQ7IH07IiAvPgorICAgICAgPE1lbWJlclR5cGU+UHJvcGVydHk8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPkF2YWhpLlByb3RvY29sPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICAgIDx2YWx1ZT5UbyBiZSBhZGRlZC48L3ZhbHVlPgorICAgICAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJCcm93c2VTZXJ2aWNlVHlwZXMiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgc3RyaW5nW10gQnJvd3NlU2VydmljZVR5cGVzIHsgc2V0OyBnZXQ7IH07IiAvPgorICAgICAgPE1lbWJlclR5cGU+UHJvcGVydHk8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPlN5c3RlbS5TdHJpbmdbXTwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8dmFsdWU+VG8gYmUgYWRkZWQuPC92YWx1ZT4KKyAgICAgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iRG9tYWluIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIHN0cmluZyBEb21haW4geyBzZXQ7IGdldDsgfTsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5Qcm9wZXJ0eTwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+U3lzdGVtLlN0cmluZzwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8dmFsdWU+VG8gYmUgYWRkZWQuPC92YWx1ZT4KKyAgICAgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iSG9zdE5hbWUiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgc3RyaW5nIEhvc3ROYW1lIHsgZ2V0OyB9OyIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPlByb3BlcnR5PC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5TeXN0ZW0uU3RyaW5nPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICAgIDx2YWx1ZT5UbyBiZSBhZGRlZC48L3ZhbHVlPgorICAgICAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJQb3J0Ij4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIHVzaG9ydCBQb3J0IHsgZ2V0OyB9OyIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPlByb3BlcnR5PC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5TeXN0ZW0uVUludDE2PC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICAgIDx2YWx1ZT5UbyBiZSBhZGRlZC48L3ZhbHVlPgorICAgICAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJSZXNvbHZlSG9zdE5hbWVFbmFibGVkIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIGJvb2wgUmVzb2x2ZUhvc3ROYW1lRW5hYmxlZCB7IHNldDsgZ2V0OyB9OyIgLz4KKyAgICAgIDxNZW1iZXJUeXBlPlByb3BlcnR5PC9NZW1iZXJUeXBlPgorICAgICAgPFJldHVyblZhbHVlPgorICAgICAgICA8UmV0dXJuVHlwZT5TeXN0ZW0uQm9vbGVhbjwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8dmFsdWU+VG8gYmUgYWRkZWQuPC92YWx1ZT4KKyAgICAgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iUmVzb2x2ZVNlcnZpY2VFbmFibGVkIj4KKyAgICAgIDxNZW1iZXJTaWduYXR1cmUgTGFuZ3VhZ2U9IkMjIiBWYWx1ZT0icHVibGljIGJvb2wgUmVzb2x2ZVNlcnZpY2VFbmFibGVkIHsgc2V0OyBnZXQ7IH07IiAvPgorICAgICAgPE1lbWJlclR5cGU+UHJvcGVydHk8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPlN5c3RlbS5Cb29sZWFuPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICAgIDx2YWx1ZT5UbyBiZSBhZGRlZC48L3ZhbHVlPgorICAgICAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgICAgPE1lbWJlciBNZW1iZXJOYW1lPSJTZXJ2aWNlTmFtZSI+CisgICAgICA8TWVtYmVyU2lnbmF0dXJlIExhbmd1YWdlPSJDIyIgVmFsdWU9InB1YmxpYyBzdHJpbmcgU2VydmljZU5hbWUgeyBzZXQ7IGdldDsgfTsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5Qcm9wZXJ0eTwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+U3lzdGVtLlN0cmluZzwvUmV0dXJuVHlwZT4KKyAgICAgIDwvUmV0dXJuVmFsdWU+CisgICAgICA8RG9jcz4KKyAgICAgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgICAgICA8dmFsdWU+VG8gYmUgYWRkZWQuPC92YWx1ZT4KKyAgICAgICAgPHJlbWFya3M+VG8gYmUgYWRkZWQuPC9yZW1hcmtzPgorICAgICAgPC9Eb2NzPgorICAgIDwvTWVtYmVyPgorICAgIDxNZW1iZXIgTWVtYmVyTmFtZT0iU2VydmljZVR5cGUiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgc3RyaW5nIFNlcnZpY2VUeXBlIHsgc2V0OyBnZXQ7IH07IiAvPgorICAgICAgPE1lbWJlclR5cGU+UHJvcGVydHk8L01lbWJlclR5cGU+CisgICAgICA8UmV0dXJuVmFsdWU+CisgICAgICAgIDxSZXR1cm5UeXBlPlN5c3RlbS5TdHJpbmc8L1JldHVyblR5cGU+CisgICAgICA8L1JldHVyblZhbHVlPgorICAgICAgPERvY3M+CisgICAgICAgIDxzdW1tYXJ5PlRvIGJlIGFkZGVkLjwvc3VtbWFyeT4KKyAgICAgICAgPHZhbHVlPlRvIGJlIGFkZGVkLjwvdmFsdWU+CisgICAgICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgICAgIDwvRG9jcz4KKyAgICA8L01lbWJlcj4KKyAgICA8TWVtYmVyIE1lbWJlck5hbWU9IlR4dERhdGEiPgorICAgICAgPE1lbWJlclNpZ25hdHVyZSBMYW5ndWFnZT0iQyMiIFZhbHVlPSJwdWJsaWMgYnl0ZVtdW10gVHh0RGF0YSB7IGdldDsgfTsiIC8+CisgICAgICA8TWVtYmVyVHlwZT5Qcm9wZXJ0eTwvTWVtYmVyVHlwZT4KKyAgICAgIDxSZXR1cm5WYWx1ZT4KKyAgICAgICAgPFJldHVyblR5cGU+U3lzdGVtLkJ5dGVbXVtdPC9SZXR1cm5UeXBlPgorICAgICAgPC9SZXR1cm5WYWx1ZT4KKyAgICAgIDxEb2NzPgorICAgICAgICA8c3VtbWFyeT5UbyBiZSBhZGRlZC48L3N1bW1hcnk+CisgICAgICAgIDx2YWx1ZT5UbyBiZSBhZGRlZC48L3ZhbHVlPgorICAgICAgICA8cmVtYXJrcz5UbyBiZSBhZGRlZC48L3JlbWFya3M+CisgICAgICA8L0RvY3M+CisgICAgPC9NZW1iZXI+CisgIDwvTWVtYmVycz4KKyAgPERvY3M+CisgICAgPHN1bW1hcnk+VG8gYmUgYWRkZWQuPC9zdW1tYXJ5PgorICAgIDxyZW1hcmtzPlRvIGJlIGFkZGVkLjwvcmVtYXJrcz4KKyAgPC9Eb2NzPgorPC9UeXBlPgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLXVpLXNoYXJwL2VuL2luZGV4LnhtbCBiL2F2YWhpLTAuNi4zMS9hdmFoaS11aS1zaGFycC9lbi9pbmRleC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFlODA4YwotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS11aS1zaGFycC9lbi9pbmRleC54bWwKQEAgLTAsMCArMSwxMyBAQAorPE92ZXJ2aWV3PgorICA8QXNzZW1ibGllcz4KKyAgICA8QXNzZW1ibHkgTmFtZT0iYXZhaGktdWktc2hhcnAiIFZlcnNpb249IjAuMC4wLjAiIC8+CisgIDwvQXNzZW1ibGllcz4KKyAgPFJlbWFya3M+VG8gYmUgYWRkZWQuPC9SZW1hcmtzPgorICA8Q29weXJpZ2h0PlRvIGJlIGFkZGVkLjwvQ29weXJpZ2h0PgorICA8VHlwZXM+CisgICAgPE5hbWVzcGFjZSBOYW1lPSJBdmFoaS5VSSI+CisgICAgICA8VHlwZSBOYW1lPSJTZXJ2aWNlRGlhbG9nIiAvPgorICAgIDwvTmFtZXNwYWNlPgorICA8L1R5cGVzPgorICA8VGl0bGU+YXZhaGktdWktc2hhcnA8L1RpdGxlPgorPC9PdmVydmlldz4KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS11aS1zaGFycC9nZW5jZmcuc2ggYi9hdmFoaS0wLjYuMzEvYXZhaGktdWktc2hhcnAvZ2VuY2ZnLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ0YTZjODEKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktdWktc2hhcnAvZ2VuY2ZnLnNoCkBAIC0wLDAgKzEsNiBAQAorIyEvYmluL3NoCisKKy4gJDEKK2NvbW1vbl9kbG5hbWU9JGRsbmFtZQorCitleGVjIHNlZCAtZSAicyxAQ09NTU9OX0RMTkFNRVxALCR7Y29tbW9uX2RsbmFtZX0sZyIKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS11aS5wYy5pbiBiL2F2YWhpLTAuNi4zMS9hdmFoaS11aS5wYy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWRlZWE5Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLXVpLnBjLmluCkBAIC0wLDAgKzEsMTEgQEAKK3ByZWZpeD1AcHJlZml4QAorZXhlY19wcmVmaXg9JHtwcmVmaXh9CitsaWJkaXI9QGxpYmRpckAKK2luY2x1ZGVkaXI9JHtwcmVmaXh9L2luY2x1ZGUKKworTmFtZTogYXZhaGktdWkKK0Rlc2NyaXB0aW9uOiBBdmFoaSBNdWx0aWNhc3QgRE5TIFJlc3BvbmRlciAoQ29tbW9uIEdUSzIgVUkgc3VwcG9ydCkKK1JlcXVpcmVzOiBndGsrLTIuMCBhdmFoaS1jbGllbnQgYXZhaGktZ2xpYgorVmVyc2lvbjogQFBBQ0tBR0VfVkVSU0lPTkAKK0xpYnM6IC1MJHtsaWJkaXJ9IC1sYXZhaGktdWkKK0NmbGFnczogLURfUkVFTlRSQU5UIC1JJHtpbmNsdWRlZGlyfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLXVpL01ha2VmaWxlLmFtIGIvYXZhaGktMC42LjMxL2F2YWhpLXVpL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1MjMzMjUKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktdWkvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSwxMTMgQEAKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisjCisjIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisjIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisjIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisjIFVTQS4KKworQU1fQ0ZMQUdTPS1JJCh0b3Bfc3JjZGlyKSAtREdfRElTQUJMRV9ERVBSRUNBVEVEPTEgLURHREtfRElTQUJMRV9ERVBSRUNBVEVEPTEgLURHVEtfRElTQUJMRV9ERVBSRUNBVEVEPTEKKworIyBUaGlzIGNvb2wgZGVidWcgdHJhcCB3b3JrcyBvbiBpMzg2L2djYyBvbmx5CitBTV9DRkxBR1MrPSctRERFQlVHX1RSQVA9X19hc21fXygiaW50ICQkMyIpJworCitwa2dsaWJkYXRhZGlyPSQobGliZGlyKS9hdmFoaQorCitkZXNrdG9wZGlyID0gJChkYXRhZGlyKS9hcHBsaWNhdGlvbnMKK2Rlc2t0b3BfREFUQSA9CitkZXNrdG9wX0RBVEFfaW4gPSAkKGRlc2t0b3BfREFUQV9pbl9pbjouaW4uaW49LmluKQorZGVza3RvcF9EQVRBX2luX2luID0gYnNzaC5kZXNrdG9wLmluLmluIGJ2bmMuZGVza3RvcC5pbi5pbgorCitFWFRSQV9ESVNUID0gJChkZXNrdG9wX0RBVEFfaW5faW4pCisKK2lmIEhBVkVfR1RLMk9SMworQU1fQ0ZMQUdTICs9IC1ER05PTUVMT0NBTEVESVI9XCIkKGRhdGFkaXIpL2xvY2FsZVwiCitpZiBIQVZFX0RCVVMKK2lmIEhBVkVfR0xJQgorCithdmFoaWluY2x1ZGVkaXI9JChpbmNsdWRlZGlyKS9hdmFoaS11aQorCithdmFoaWluY2x1ZGVfSEVBREVSUyA9IFwKKwlhdmFoaS11aS5oCisKK2xpYl9MVExJQlJBUklFUyA9CisKK2lmIEhBVkVfR1RLCitsaWJfTFRMSUJSQVJJRVMgKz0gXAorCWxpYmF2YWhpLXVpLmxhCitlbmRpZgorCitpZiBIQVZFX0dUSzMKK2xpYl9MVExJQlJBUklFUyArPSBcCisJbGliYXZhaGktdWktZ3RrMy5sYQorZW5kaWYKKworbGliYXZhaGlfdWlfbGFfU09VUkNFUyA9IFwKKwlhdmFoaS11aS5oIGF2YWhpLXVpLmMKK2xpYmF2YWhpX3VpX2xhX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAkKEdUSzIwX0NGTEFHUykKK2xpYmF2YWhpX3VpX2xhX0xJQkFERCA9ICQoQU1fTERBREQpIC4uL2F2YWhpLWNvbW1vbi9saWJhdmFoaS1jb21tb24ubGEgLi4vYXZhaGktY2xpZW50L2xpYmF2YWhpLWNsaWVudC5sYSAuLi9hdmFoaS1nbGliL2xpYmF2YWhpLWdsaWIubGEgJChHVEsyMF9MSUJTKQorbGliYXZhaGlfdWlfbGFfTERGTEFHUyA9ICQoQU1fTERGTEFHUykgIC12ZXJzaW9uLWluZm8gJChMSUJBVkFISV9VSV9WRVJTSU9OX0lORk8pCisKK2xpYmF2YWhpX3VpX2d0azNfbGFfU09VUkNFUyA9ICQobGliYXZhaGlfdWlfbGFfU09VUkNFUykKK2xpYmF2YWhpX3VpX2d0azNfbGFfQ0ZMQUdTID0gJChBTV9DRkxBR1MpICQoR1RLMzBfQ0ZMQUdTKQorbGliYXZhaGlfdWlfZ3RrM19sYV9MSUJBREQgPSAkKEFNX0xEQUREKSAuLi9hdmFoaS1jb21tb24vbGliYXZhaGktY29tbW9uLmxhIC4uL2F2YWhpLWNsaWVudC9saWJhdmFoaS1jbGllbnQubGEgLi4vYXZhaGktZ2xpYi9saWJhdmFoaS1nbGliLmxhICQoR1RLMzBfTElCUykKK2xpYmF2YWhpX3VpX2d0azNfbGFfTERGTEFHUyA9ICQoQU1fTERGTEFHUykgIC12ZXJzaW9uLWluZm8gJChMSUJBVkFISV9VSV9WRVJTSU9OX0lORk8pCisKK2lmIEhBVkVfR0RCTQorbGliYXZhaGlfdWlfbGFfU09VUkNFUyArPSAuLi9hdmFoaS11dGlscy9zdGRiLmggLi4vYXZhaGktdXRpbHMvc3RkYi5jCitsaWJhdmFoaV91aV9sYV9DRkxBR1MgKz0gLUREQVRBQkFTRV9GSUxFPVwiJChwa2dsaWJkYXRhZGlyKS9zZXJ2aWNlLXR5cGVzLmRiXCIKK2xpYmF2YWhpX3VpX2xhX0xJQkFERCArPSAtbGdkYm0KKworbGliYXZhaGlfdWlfZ3RrM19sYV9DRkxBR1MgKz0gLUREQVRBQkFTRV9GSUxFPVwiJChwa2dsaWJkYXRhZGlyKS9zZXJ2aWNlLXR5cGVzLmRiXCIKK2xpYmF2YWhpX3VpX2d0azNfbGFfTElCQUREICs9IC1sZ2RibQorZW5kaWYKKworaWYgSEFWRV9EQk0KK2xpYmF2YWhpX3VpX2xhX1NPVVJDRVMgKz0gLi4vYXZhaGktdXRpbHMvc3RkYi5oIC4uL2F2YWhpLXV0aWxzL3N0ZGIuYworbGliYXZhaGlfdWlfbGFfQ0ZMQUdTICs9IC1EREFUQUJBU0VfRklMRT1cIiQocGtnbGliZGF0YWRpcikvc2VydmljZS10eXBlcy5kYlwiCisKK2xpYmF2YWhpX3VpX2d0azNfbGFfQ0ZMQUdTICs9IC1EREFUQUJBU0VfRklMRT1cIiQocGtnbGliZGF0YWRpcikvc2VydmljZS10eXBlcy5kYlwiCitlbmRpZgorCitiaW5fUFJPR1JBTVMgPSBic3NoCitkZXNrdG9wX0RBVEEgKz0gYnNzaC5kZXNrdG9wIGJ2bmMuZGVza3RvcAorQElOVExUT09MX0RFU0tUT1BfUlVMRUAKKworYnNzaF9TT1VSQ0VTID0gYnNzaC5jCisKK2lmIEhBVkVfR1RLMworYnNzaF9DRkxBR1MgPSAkKEFNX0NGTEFHUykgJChHVEszMF9DRkxBR1MpCitic3NoX0xEQUREID0gJChBTV9MREFERCkgJChHVEszMF9MSUJTKSAuLi9hdmFoaS1jbGllbnQvbGliYXZhaGktY2xpZW50LmxhIC4uL2F2YWhpLWNvbW1vbi9saWJhdmFoaS1jb21tb24ubGEgbGliYXZhaGktdWktZ3RrMy5sYQorZWxzZQorYnNzaF9DRkxBR1MgPSAkKEFNX0NGTEFHUykgJChHVEsyMF9DRkxBR1MpCitic3NoX0xEQUREID0gJChBTV9MREFERCkgJChHVEsyMF9MSUJTKSAuLi9hdmFoaS1jbGllbnQvbGliYXZhaGktY2xpZW50LmxhIC4uL2F2YWhpLWNvbW1vbi9saWJhdmFoaS1jb21tb24ubGEgbGliYXZhaGktdWkubGEKK2VuZGlmCisKK2luc3RhbGwtZXhlYy1sb2NhbDoKKwljZCAkKERFU1RESVIpLyQoYmluZGlyKSAmJiBcCisJCXJtIC1mIGJ2bmMgYnNoZWxsICYmIFwKKwkJJChMTl9TKSBic3NoIGJ2bmMgJiYgXAorCQkkKExOX1MpIGJzc2ggYnNoZWxsCisKK2Jzc2guZGVza3RvcC5pbjogYnNzaC5kZXNrdG9wLmluLmluCisJJChBTV9WX0dFTilzZWQgLWUgJ3MsQGJpbmRpclxALCQoYmluZGlyKSxnJyAkPCA+ICRACisKK2J2bmMuZGVza3RvcC5pbjogYnZuYy5kZXNrdG9wLmluLmluCisJJChBTV9WX0dFTilzZWQgLWUgJ3MsQGJpbmRpclxALCQoYmluZGlyKSxnJyAkPCA+ICRACisKK2VuZGlmICMgSEFWRV9HTElCCitlbmRpZgorZW5kaWYKKworQElOVExUT09MX0RFU0tUT1BfUlVMRUAKKworQ0xFQU5GSUxFUyA9ICQoZGVza3RvcF9EQVRBKSAkKGRlc2t0b3BfREFUQV9pbikKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS11aS9NYWtlZmlsZS5pbiBiL2F2YWhpLTAuNi4zMS9hdmFoaS11aS9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWM1ZWEzCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLXVpL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsOTg1IEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjExLjMgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACisKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisjCisjIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisjIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisjIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisjIFVTQS4KKworCisKKworVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorQEhBVkVfR1RLMk9SM19UUlVFQGFtX19hcHBlbmRfMSA9IC1ER05PTUVMT0NBTEVESVI9XCIkKGRhdGFkaXIpL2xvY2FsZVwiCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dUSzJPUjNfVFJVRUBASEFWRV9HVEtfVFJVRUBhbV9fYXBwZW5kXzIgPSBcCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dUSzJPUjNfVFJVRUBASEFWRV9HVEtfVFJVRUAJbGliYXZhaGktdWkubGEKKworQEhBVkVfREJVU19UUlVFQEBIQVZFX0dMSUJfVFJVRUBASEFWRV9HVEsyT1IzX1RSVUVAQEhBVkVfR1RLM19UUlVFQGFtX19hcHBlbmRfMyA9IFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HTElCX1RSVUVAQEhBVkVfR1RLMk9SM19UUlVFQEBIQVZFX0dUSzNfVFJVRUAJbGliYXZhaGktdWktZ3RrMy5sYQorCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR0RCTV9UUlVFQEBIQVZFX0dMSUJfVFJVRUBASEFWRV9HVEsyT1IzX1RSVUVAYW1fX2FwcGVuZF80ID0gLi4vYXZhaGktdXRpbHMvc3RkYi5oIC4uL2F2YWhpLXV0aWxzL3N0ZGIuYworQEhBVkVfREJVU19UUlVFQEBIQVZFX0dEQk1fVFJVRUBASEFWRV9HTElCX1RSVUVAQEhBVkVfR1RLMk9SM19UUlVFQGFtX19hcHBlbmRfNSA9IC1EREFUQUJBU0VfRklMRT1cIiQocGtnbGliZGF0YWRpcikvc2VydmljZS10eXBlcy5kYlwiCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR0RCTV9UUlVFQEBIQVZFX0dMSUJfVFJVRUBASEFWRV9HVEsyT1IzX1RSVUVAYW1fX2FwcGVuZF82ID0gLWxnZGJtCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR0RCTV9UUlVFQEBIQVZFX0dMSUJfVFJVRUBASEFWRV9HVEsyT1IzX1RSVUVAYW1fX2FwcGVuZF83ID0gLUREQVRBQkFTRV9GSUxFPVwiJChwa2dsaWJkYXRhZGlyKS9zZXJ2aWNlLXR5cGVzLmRiXCIKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HREJNX1RSVUVAQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dUSzJPUjNfVFJVRUBhbV9fYXBwZW5kXzggPSAtbGdkYm0KK0BIQVZFX0RCTV9UUlVFQEBIQVZFX0RCVVNfVFJVRUBASEFWRV9HTElCX1RSVUVAQEhBVkVfR1RLMk9SM19UUlVFQGFtX19hcHBlbmRfOSA9IC4uL2F2YWhpLXV0aWxzL3N0ZGIuaCAuLi9hdmFoaS11dGlscy9zdGRiLmMKK0BIQVZFX0RCTV9UUlVFQEBIQVZFX0RCVVNfVFJVRUBASEFWRV9HTElCX1RSVUVAQEhBVkVfR1RLMk9SM19UUlVFQGFtX19hcHBlbmRfMTAgPSAtRERBVEFCQVNFX0ZJTEU9XCIkKHBrZ2xpYmRhdGFkaXIpL3NlcnZpY2UtdHlwZXMuZGJcIgorQEhBVkVfREJNX1RSVUVAQEhBVkVfREJVU19UUlVFQEBIQVZFX0dMSUJfVFJVRUBASEFWRV9HVEsyT1IzX1RSVUVAYW1fX2FwcGVuZF8xMSA9IC1EREFUQUJBU0VfRklMRT1cIiQocGtnbGliZGF0YWRpcikvc2VydmljZS10eXBlcy5kYlwiCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dUSzJPUjNfVFJVRUBiaW5fUFJPR1JBTVMgPSBic3NoJChFWEVFWFQpCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dUSzJPUjNfVFJVRUBhbV9fYXBwZW5kXzEyID0gYnNzaC5kZXNrdG9wIGJ2bmMuZGVza3RvcAorc3ViZGlyID0gYXZhaGktdWkKK0RJU1RfQ09NTU9OID0gJChhbV9fYXZhaGlpbmNsdWRlX0hFQURFUlNfRElTVCkgJChzcmNkaXIpL01ha2VmaWxlLmFtIFwKKwkkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9hY3hfcHRocmVhZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vZ2NjX3N0YWNrX3Byb3RlY3QubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2djY192aXNpYmlsaXR5Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9pbnRsdG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vaW50cm9zcGVjdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbGlidG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHRvcHRpb25zLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9sdHN1Z2FyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9sdHZlcnNpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2x0fm9ic29sZXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9ubHMubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vcHl0aG9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2FjaW5jbHVkZS5tNCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9kb3h5Z2VuLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CithbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKK2FtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCisgICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKKyAgICAqKSBmPSQkcDs7IFwKKyAgZXNhYzsKK2FtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKK2FtX19pbnN0YWxsX21heCA9IDQwCithbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAorICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCithbV9fbm9iYXNlX3N0cmlwID0gXAorICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKK2FtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKKyAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKKyAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMvIC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKKyAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAorICAgIGlmICgrK25bJCQyXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIFwKKyAgICAgIHsgcHJpbnQgJCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKKyAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCithbV9fYmFzZV9saXN0ID0gXAorICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnIHwgXAorICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCithbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyID0geyBcCisgIHRlc3QgLXogIiQkZmlsZXMiIFwKKyAgICB8fCB7IHRlc3QgISAtZCAiJCRkaXIiICYmIHRlc3QgISAtZiAiJCRkaXIiICYmIHRlc3QgISAtciAiJCRkaXIiOyB9IFwKKyAgICB8fCB7IGVjaG8gIiAoIGNkICckJGRpcicgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCisgICAgICAgICAkKGFtX19jZCkgIiQkZGlyIiAmJiBybSAtZiAkJGZpbGVzOyB9OyBcCisgIH0KK2FtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChsaWJkaXIpIiAiJChERVNURElSKSQoYmluZGlyKSIgXAorCSIkKERFU1RESVIpJChkZXNrdG9wZGlyKSIgIiQoREVTVERJUikkKGF2YWhpaW5jbHVkZWRpcikiCitMVExJQlJBUklFUyA9ICQobGliX0xUTElCUkFSSUVTKQorYW1fX0RFUEVOREVOQ0lFU18xID0KK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HTElCX1RSVUVAQEhBVkVfR1RLMk9SM19UUlVFQGxpYmF2YWhpX3VpX2d0azNfbGFfREVQRU5ERU5DSUVTID0gLi4vYXZhaGktY29tbW9uL2xpYmF2YWhpLWNvbW1vbi5sYSBcCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dUSzJPUjNfVFJVRUAJLi4vYXZhaGktY2xpZW50L2xpYmF2YWhpLWNsaWVudC5sYSBcCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dUSzJPUjNfVFJVRUAJLi4vYXZhaGktZ2xpYi9saWJhdmFoaS1nbGliLmxhIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HTElCX1RSVUVAQEhBVkVfR1RLMk9SM19UUlVFQAkkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dMSUJfVFJVRUBASEFWRV9HVEsyT1IzX1RSVUVACSQoYW1fX0RFUEVOREVOQ0lFU18xKQorYW1fX2xpYmF2YWhpX3VpX2d0azNfbGFfU09VUkNFU19ESVNUID0gYXZhaGktdWkuaCBhdmFoaS11aS5jIFwKKwkuLi9hdmFoaS11dGlscy9zdGRiLmggLi4vYXZhaGktdXRpbHMvc3RkYi5jCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR0RCTV9UUlVFQEBIQVZFX0dMSUJfVFJVRUBASEFWRV9HVEsyT1IzX1RSVUVAYW1fX29iamVjdHNfMSA9IGxpYmF2YWhpX3VpX2d0azNfbGEtc3RkYi5sbworQEhBVkVfREJNX1RSVUVAQEhBVkVfREJVU19UUlVFQEBIQVZFX0dMSUJfVFJVRUBASEFWRV9HVEsyT1IzX1RSVUVAYW1fX29iamVjdHNfMiA9IGxpYmF2YWhpX3VpX2d0azNfbGEtc3RkYi5sbworQEhBVkVfREJVU19UUlVFQEBIQVZFX0dMSUJfVFJVRUBASEFWRV9HVEsyT1IzX1RSVUVAYW1fX29iamVjdHNfMyA9IGxpYmF2YWhpX3VpX2d0azNfbGEtYXZhaGktdWkubG8gXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dMSUJfVFJVRUBASEFWRV9HVEsyT1IzX1RSVUVACSQoYW1fX29iamVjdHNfMSkgXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dMSUJfVFJVRUBASEFWRV9HVEsyT1IzX1RSVUVACSQoYW1fX29iamVjdHNfMikKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HTElCX1RSVUVAQEhBVkVfR1RLMk9SM19UUlVFQGFtX2xpYmF2YWhpX3VpX2d0azNfbGFfT0JKRUNUUyA9ICQoYW1fX29iamVjdHNfMykKK2xpYmF2YWhpX3VpX2d0azNfbGFfT0JKRUNUUyA9ICQoYW1fbGliYXZhaGlfdWlfZ3RrM19sYV9PQkpFQ1RTKQorQU1fVl9sdCA9ICQoYW1fX3ZfbHRfQEFNX1ZAKQorYW1fX3ZfbHRfID0gJChhbV9fdl9sdF9AQU1fREVGQVVMVF9WQCkKK2FtX192X2x0XzAgPSAtLXNpbGVudAorbGliYXZhaGlfdWlfZ3RrM19sYV9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKKwkkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgXAorCSQobGliYXZhaGlfdWlfZ3RrM19sYV9DRkxBR1MpICQoQ0ZMQUdTKSBcCisJJChsaWJhdmFoaV91aV9ndGszX2xhX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HTElCX1RSVUVAQEhBVkVfR1RLMk9SM19UUlVFQEBIQVZFX0dUSzNfVFJVRUBhbV9saWJhdmFoaV91aV9ndGszX2xhX3JwYXRoID0gLXJwYXRoIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HTElCX1RSVUVAQEhBVkVfR1RLMk9SM19UUlVFQEBIQVZFX0dUSzNfVFJVRUAJJChsaWJkaXIpCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dUSzJPUjNfVFJVRUBsaWJhdmFoaV91aV9sYV9ERVBFTkRFTkNJRVMgPSAuLi9hdmFoaS1jb21tb24vbGliYXZhaGktY29tbW9uLmxhIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HTElCX1RSVUVAQEhBVkVfR1RLMk9SM19UUlVFQAkuLi9hdmFoaS1jbGllbnQvbGliYXZhaGktY2xpZW50LmxhIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HTElCX1RSVUVAQEhBVkVfR1RLMk9SM19UUlVFQAkuLi9hdmFoaS1nbGliL2xpYmF2YWhpLWdsaWIubGEgXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dMSUJfVFJVRUBASEFWRV9HVEsyT1IzX1RSVUVACSQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dUSzJPUjNfVFJVRUAJJChhbV9fREVQRU5ERU5DSUVTXzEpCithbV9fbGliYXZhaGlfdWlfbGFfU09VUkNFU19ESVNUID0gYXZhaGktdWkuaCBhdmFoaS11aS5jIFwKKwkuLi9hdmFoaS11dGlscy9zdGRiLmggLi4vYXZhaGktdXRpbHMvc3RkYi5jCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR0RCTV9UUlVFQEBIQVZFX0dMSUJfVFJVRUBASEFWRV9HVEsyT1IzX1RSVUVAYW1fX29iamVjdHNfNCA9IGxpYmF2YWhpX3VpX2xhLXN0ZGIubG8KK0BIQVZFX0RCTV9UUlVFQEBIQVZFX0RCVVNfVFJVRUBASEFWRV9HTElCX1RSVUVAQEhBVkVfR1RLMk9SM19UUlVFQGFtX19vYmplY3RzXzUgPSBsaWJhdmFoaV91aV9sYS1zdGRiLmxvCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dUSzJPUjNfVFJVRUBhbV9saWJhdmFoaV91aV9sYV9PQkpFQ1RTID0gbGliYXZhaGlfdWlfbGEtYXZhaGktdWkubG8gXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dMSUJfVFJVRUBASEFWRV9HVEsyT1IzX1RSVUVACSQoYW1fX29iamVjdHNfNCkgXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dMSUJfVFJVRUBASEFWRV9HVEsyT1IzX1RSVUVACSQoYW1fX29iamVjdHNfNSkKK2xpYmF2YWhpX3VpX2xhX09CSkVDVFMgPSAkKGFtX2xpYmF2YWhpX3VpX2xhX09CSkVDVFMpCitsaWJhdmFoaV91aV9sYV9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKKwkkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgXAorCSQobGliYXZhaGlfdWlfbGFfQ0ZMQUdTKSAkKENGTEFHUykgJChsaWJhdmFoaV91aV9sYV9MREZMQUdTKSBcCisJJChMREZMQUdTKSAtbyAkQAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dMSUJfVFJVRUBASEFWRV9HVEsyT1IzX1RSVUVAQEhBVkVfR1RLX1RSVUVAYW1fbGliYXZhaGlfdWlfbGFfcnBhdGggPSAtcnBhdGggXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dMSUJfVFJVRUBASEFWRV9HVEsyT1IzX1RSVUVAQEhBVkVfR1RLX1RSVUVACSQobGliZGlyKQorUFJPR1JBTVMgPSAkKGJpbl9QUk9HUkFNUykKK2FtX19ic3NoX1NPVVJDRVNfRElTVCA9IGJzc2guYworQEhBVkVfREJVU19UUlVFQEBIQVZFX0dMSUJfVFJVRUBASEFWRV9HVEsyT1IzX1RSVUVAYW1fYnNzaF9PQkpFQ1RTID0gYnNzaC1ic3NoLiQoT0JKRVhUKQorYnNzaF9PQkpFQ1RTID0gJChhbV9ic3NoX09CSkVDVFMpCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dUSzJPUjNfVFJVRUBASEFWRV9HVEszX0ZBTFNFQGJzc2hfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HTElCX1RSVUVAQEhBVkVfR1RLMk9SM19UUlVFQEBIQVZFX0dUSzNfRkFMU0VACS4uL2F2YWhpLWNsaWVudC9saWJhdmFoaS1jbGllbnQubGEgXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dMSUJfVFJVRUBASEFWRV9HVEsyT1IzX1RSVUVAQEhBVkVfR1RLM19GQUxTRUAJLi4vYXZhaGktY29tbW9uL2xpYmF2YWhpLWNvbW1vbi5sYSBcCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dUSzJPUjNfVFJVRUBASEFWRV9HVEszX0ZBTFNFQAlsaWJhdmFoaS11aS5sYQorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dMSUJfVFJVRUBASEFWRV9HVEsyT1IzX1RSVUVAQEhBVkVfR1RLM19UUlVFQGJzc2hfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HTElCX1RSVUVAQEhBVkVfR1RLMk9SM19UUlVFQEBIQVZFX0dUSzNfVFJVRUAJLi4vYXZhaGktY2xpZW50L2xpYmF2YWhpLWNsaWVudC5sYSBcCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dUSzJPUjNfVFJVRUBASEFWRV9HVEszX1RSVUVACS4uL2F2YWhpLWNvbW1vbi9saWJhdmFoaS1jb21tb24ubGEgXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dMSUJfVFJVRUBASEFWRV9HVEsyT1IzX1RSVUVAQEhBVkVfR1RLM19UUlVFQAlsaWJhdmFoaS11aS1ndGszLmxhCitic3NoX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKGJzc2hfQ0ZMQUdTKSAkKENGTEFHUykgXAorCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKK2RlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKK2FtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCithbV9fbXYgPSBtdiAtZgorQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCisJJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAorCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAorCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0FNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKK2FtX192X0NDXyA9ICQoYW1fX3ZfQ0NfQEFNX0RFRkFVTFRfVkApCithbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgIiAkQDsKK0FNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKK2FtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCithbV9fdl9hdF8wID0gQAorQ0NMRCA9ICQoQ0MpCitMSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCisJJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACitBTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQorYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfQEFNX0RFRkFVTFRfVkApCithbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAiICRAOworQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCithbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCithbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICIgJEA7CitTT1VSQ0VTID0gJChsaWJhdmFoaV91aV9ndGszX2xhX1NPVVJDRVMpICQobGliYXZhaGlfdWlfbGFfU09VUkNFUykgXAorCSQoYnNzaF9TT1VSQ0VTKQorRElTVF9TT1VSQ0VTID0gJChhbV9fbGliYXZhaGlfdWlfZ3RrM19sYV9TT1VSQ0VTX0RJU1QpIFwKKwkkKGFtX19saWJhdmFoaV91aV9sYV9TT1VSQ0VTX0RJU1QpICQoYW1fX2Jzc2hfU09VUkNFU19ESVNUKQorREFUQSA9ICQoZGVza3RvcF9EQVRBKQorYW1fX2F2YWhpaW5jbHVkZV9IRUFERVJTX0RJU1QgPSBhdmFoaS11aS5oCitIRUFERVJTID0gJChhdmFoaWluY2x1ZGVfSEVBREVSUykKK0VUQUdTID0gZXRhZ3MKK0NUQUdTID0gY3RhZ3MKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitBQ0xPQ0FMID0gQEFDTE9DQUxACitBTExfTElOR1VBUyA9IEBBTExfTElOR1VBU0AKK0FNVEFSID0gQEFNVEFSQAorQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACitBUiA9IEBBUkAKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBVkFISV9BVVRPSVBEX0dST1VQID0gQEFWQUhJX0FVVE9JUERfR1JPVVBACitBVkFISV9BVVRPSVBEX1VTRVIgPSBAQVZBSElfQVVUT0lQRF9VU0VSQAorQVZBSElfR1JPVVAgPSBAQVZBSElfR1JPVVBACitBVkFISV9QUklWX0FDQ0VTU19HUk9VUCA9IEBBVkFISV9QUklWX0FDQ0VTU19HUk9VUEAKK0FWQUhJX1VTRVIgPSBAQVZBSElfVVNFUkAKK0FXSyA9IEBBV0tACitDQVRBTE9HUyA9IEBDQVRBTE9HU0AKK0NBVE9CSkVYVCA9IEBDQVRPQkpFWFRACitDQyA9IEBDQ0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1hYID0gQENYWEAKK0NYWENQUCA9IEBDWFhDUFBACitDWFhERVBNT0RFID0gQENYWERFUE1PREVACitDWFhGTEFHUyA9IEBDWFhGTEFHU0AKK0NZR1BBVEhfVyA9IEBDWUdQQVRIX1dACitEQVRBRElSTkFNRSA9IEBEQVRBRElSTkFNRUAKK0RCVVNfQ0ZMQUdTID0gQERCVVNfQ0ZMQUdTQAorREJVU19MSUJTID0gQERCVVNfTElCU0AKK0RCVVNfU1lTVEVNX0JVU19ERUZBVUxUX0FERFJFU1MgPSBAREJVU19TWVNURU1fQlVTX0RFRkFVTFRfQUREUkVTU0AKK0RCVVNfU1lTX0RJUiA9IEBEQlVTX1NZU19ESVJACitERUZTID0gQERFRlNACitERVBESVIgPSBAREVQRElSQAorRExMVE9PTCA9IEBETExUT09MQAorRE9YWUdFTl9QQVBFUl9TSVpFID0gQERPWFlHRU5fUEFQRVJfU0laRUAKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRFhfQ09ORklHID0gQERYX0NPTkZJR0AKK0RYX0RPQ0RJUiA9IEBEWF9ET0NESVJACitEWF9ET1QgPSBARFhfRE9UQAorRFhfRE9YWUdFTiA9IEBEWF9ET1hZR0VOQAorRFhfRFZJUFMgPSBARFhfRFZJUFNACitEWF9FR1JFUCA9IEBEWF9FR1JFUEAKK0RYX0VOViA9IEBEWF9FTlZACitEWF9GTEFHX2NoaSA9IEBEWF9GTEFHX2NoaUAKK0RYX0ZMQUdfY2htID0gQERYX0ZMQUdfY2htQAorRFhfRkxBR19kb2MgPSBARFhfRkxBR19kb2NACitEWF9GTEFHX2RvdCA9IEBEWF9GTEFHX2RvdEAKK0RYX0ZMQUdfaHRtbCA9IEBEWF9GTEFHX2h0bWxACitEWF9GTEFHX21hbiA9IEBEWF9GTEFHX21hbkAKK0RYX0ZMQUdfcGRmID0gQERYX0ZMQUdfcGRmQAorRFhfRkxBR19wcyA9IEBEWF9GTEFHX3BzQAorRFhfRkxBR19ydGYgPSBARFhfRkxBR19ydGZACitEWF9GTEFHX3htbCA9IEBEWF9GTEFHX3htbEAKK0RYX0hIQyA9IEBEWF9ISENACitEWF9MQVRFWCA9IEBEWF9MQVRFWEAKK0RYX01BS0VJTkRFWCA9IEBEWF9NQUtFSU5ERVhACitEWF9QREZMQVRFWCA9IEBEWF9QREZMQVRFWEAKK0RYX1BFUkwgPSBARFhfUEVSTEAKK0RYX1BST0pFQ1QgPSBARFhfUFJPSkVDVEAKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRVhFRVhUID0gQEVYRUVYVEAKK0ZHUkVQID0gQEZHUkVQQAorR0FDVVRJTCA9IEBHQUNVVElMQAorR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKK0dMSUIyMF9DRkxBR1MgPSBAR0xJQjIwX0NGTEFHU0AKK0dMSUIyMF9MSUJTID0gQEdMSUIyMF9MSUJTQAorR01PRklMRVMgPSBAR01PRklMRVNACitHTVNHRk1UID0gQEdNU0dGTVRACitHT0JKRUNUX0NGTEFHUyA9IEBHT0JKRUNUX0NGTEFHU0AKK0dPQkpFQ1RfTElCUyA9IEBHT0JKRUNUX0xJQlNACitHUkVQID0gQEdSRVBACitHVEsyMF9DRkxBR1MgPSBAR1RLMjBfQ0ZMQUdTQAorR1RLMjBfTElCUyA9IEBHVEsyMF9MSUJTQAorR1RLMzBfQ0ZMQUdTID0gQEdUSzMwX0NGTEFHU0AKK0dUSzMwX0xJQlMgPSBAR1RLMzBfTElCU0AKK0hPV0xfQ09NUEFUX1ZFUlNJT04gPSBASE9XTF9DT01QQVRfVkVSU0lPTkAKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSU5TVE9CSkVYVCA9IEBJTlNUT0JKRVhUQAorSU5UTExJQlMgPSBASU5UTExJQlNACitJTlRMVE9PTF9FWFRSQUNUID0gQElOVExUT09MX0VYVFJBQ1RACitJTlRMVE9PTF9NRVJHRSA9IEBJTlRMVE9PTF9NRVJHRUAKK0lOVExUT09MX1BFUkwgPSBASU5UTFRPT0xfUEVSTEAKK0lOVExUT09MX1VQREFURSA9IEBJTlRMVE9PTF9VUERBVEVACitJTlRST1NQRUNUSU9OX0NGTEFHUyA9IEBJTlRST1NQRUNUSU9OX0NGTEFHU0AKK0lOVFJPU1BFQ1RJT05fQ09NUElMRVIgPSBASU5UUk9TUEVDVElPTl9DT01QSUxFUkAKK0lOVFJPU1BFQ1RJT05fR0VORVJBVEUgPSBASU5UUk9TUEVDVElPTl9HRU5FUkFURUAKK0lOVFJPU1BFQ1RJT05fR0lSRElSID0gQElOVFJPU1BFQ1RJT05fR0lSRElSQAorSU5UUk9TUEVDVElPTl9MSUJTID0gQElOVFJPU1BFQ1RJT05fTElCU0AKK0lOVFJPU1BFQ1RJT05fTUFLRUZJTEUgPSBASU5UUk9TUEVDVElPTl9NQUtFRklMRUAKK0lOVFJPU1BFQ1RJT05fU0NBTk5FUiA9IEBJTlRST1NQRUNUSU9OX1NDQU5ORVJACitJTlRST1NQRUNUSU9OX1RZUEVMSUJESVIgPSBASU5UUk9TUEVDVElPTl9UWVBFTElCRElSQAorTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMSUJBVkFISV9DTElFTlRfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NMSUVOVF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9DT01NT05fVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NPTU1PTl9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9DT01QQVRfSE9XTF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ09NUEFUX0hPV0xfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfQ09NUEFUX0xJQkROU19TRF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ09NUEFUX0xJQkROU19TRF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9DT1JFX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DT1JFX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0dMSUJfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0dMSUJfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfR09CSkVDVF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfR09CSkVDVF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9RVDNfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX1FUM19WRVJTSU9OX0lORk9ACitMSUJBVkFISV9RVDRfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX1FUNF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9VSV9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfVUlfVkVSU0lPTl9JTkZPQAorTElCREFFTU9OX0NGTEFHUyA9IEBMSUJEQUVNT05fQ0ZMQUdTQAorTElCREFFTU9OX0xJQlMgPSBATElCREFFTU9OX0xJQlNACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQExJQlNACitMSUJUT09MID0gQExJQlRPT0xACitMSVBPID0gQExJUE9ACitMTl9TID0gQExOX1NACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACitNQ1MgPSBATUNTQAorTURBU1NFTUJMRVIgPSBATURBU1NFTUJMRVJACitNS0RJUl9QID0gQE1LRElSX1BACitNS0lOU1RBTExESVJTID0gQE1LSU5TVEFMTERJUlNACitNT0NfUVQzID0gQE1PQ19RVDNACitNT0NfUVQ0ID0gQE1PQ19RVDRACitNT05PRE9DRVIgPSBATU9OT0RPQ0VSQAorTU9OT0RPQ19DRkxBR1MgPSBATU9OT0RPQ19DRkxBR1NACitNT05PRE9DX0RJUiA9IEBNT05PRE9DX0RJUkAKK01PTk9ET0NfTElCUyA9IEBNT05PRE9DX0xJQlNACitNU0dGTVQgPSBATVNHRk1UQAorTVNHRk1UX09QVFMgPSBATVNHRk1UX09QVFNACitNU0dNRVJHRSA9IEBNU0dNRVJHRUAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPVE9PTCA9IEBPVE9PTEAKK09UT09MNjQgPSBAT1RPT0w2NEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAorUEtHX0NPTkZJR19MSUJESVIgPSBAUEtHX0NPTkZJR19MSUJESVJACitQS0dfQ09ORklHX1BBVEggPSBAUEtHX0NPTkZJR19QQVRIQAorUE9GSUxFUyA9IEBQT0ZJTEVTQAorUE9TVUIgPSBAUE9TVUJACitQT19JTl9EQVRBRElSX0ZBTFNFID0gQFBPX0lOX0RBVEFESVJfRkFMU0VACitQT19JTl9EQVRBRElSX1RSVUUgPSBAUE9fSU5fREFUQURJUl9UUlVFQAorUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAorUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACitQVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAorUFlUSE9OID0gQFBZVEhPTkAKK1BZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACitQWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAorUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAorUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACitRVDNfQ0ZMQUdTID0gQFFUM19DRkxBR1NACitRVDNfTElCUyA9IEBRVDNfTElCU0AKK1FUNF9DRkxBR1MgPSBAUVQ0X0NGTEFHU0AKK1FUNF9MSUJTID0gQFFUNF9MSUJTQAorUkFOTElCID0gQFJBTkxJQkAKK1NFRCA9IEBTRURACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU1RPVyA9IEBTVE9XQAorU1RSSVAgPSBAU1RSSVBACitVU0VfTkxTID0gQFVTRV9OTFNACitWRVJTSU9OID0gQFZFUlNJT05ACitWSVNJQklMSVRZX0hJRERFTl9DRkxBR1MgPSBAVklTSUJJTElUWV9ISURERU5fQ0ZMQUdTQAorWEdFVFRFWFQgPSBAWEdFVFRFWFRACitYTUxfQ0ZMQUdTID0gQFhNTF9DRkxBR1NACitYTUxfTElCUyA9IEBYTUxfTElCU0AKK2Fic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACithYnNfc3JjZGlyID0gQGFic19zcmNkaXJACithYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACithYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKK2FjX2N0X0FSID0gQGFjX2N0X0FSQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9DWFggPSBAYWNfY3RfQ1hYQAorYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAorYWN4X3B0aHJlYWRfY29uZmlnID0gQGFjeF9wdGhyZWFkX2NvbmZpZ0AKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYXZhaGlfcnVudGltZV9kaXIgPSBAYXZhaGlfcnVudGltZV9kaXJACithdmFoaV9zb2NrZXQgPSBAYXZhaGlfc29ja2V0QAorYXZhaGlsb2NhbGVkaXIgPSBAYXZhaGlsb2NhbGVkaXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitidWlsZGRpciA9IEBidWlsZGRpckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZG9jZGlyID0gQGRvY2RpckAKK2R2aWRpciA9IEBkdmlkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2hhdmVfcGtnX2NvbmZpZyA9IEBoYXZlX3BrZ19jb25maWdACitoYXZlX3htbHRvbWFuID0gQGhhdmVfeG1sdG9tYW5ACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAoraW50ZXJmYWNlc2RpciA9IEBpbnRlcmZhY2VzZGlyQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3BrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACitwa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3BzZGlyID0gQHBzZGlyQAorcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKK3B5dGhvbmRpciA9IEBweXRob25kaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACitzeXN0ZW1kc3lzdGVtdW5pdGRpciA9IEBzeXN0ZW1kc3lzdGVtdW5pdGRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorCisjIFRoaXMgY29vbCBkZWJ1ZyB0cmFwIHdvcmtzIG9uIGkzODYvZ2NjIG9ubHkKK0FNX0NGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKSAtREdfRElTQUJMRV9ERVBSRUNBVEVEPTEgXAorCS1ER0RLX0RJU0FCTEVfREVQUkVDQVRFRD0xIC1ER1RLX0RJU0FCTEVfREVQUkVDQVRFRD0xIFwKKwknLURERUJVR19UUkFQPV9fYXNtX18oImludCAkJDMiKScgJChhbV9fYXBwZW5kXzEpCitwa2dsaWJkYXRhZGlyID0gJChsaWJkaXIpL2F2YWhpCitkZXNrdG9wZGlyID0gJChkYXRhZGlyKS9hcHBsaWNhdGlvbnMKK2Rlc2t0b3BfREFUQSA9ICQoYW1fX2FwcGVuZF8xMikKK2Rlc2t0b3BfREFUQV9pbiA9ICQoZGVza3RvcF9EQVRBX2luX2luOi5pbi5pbj0uaW4pCitkZXNrdG9wX0RBVEFfaW5faW4gPSBic3NoLmRlc2t0b3AuaW4uaW4gYnZuYy5kZXNrdG9wLmluLmluCitFWFRSQV9ESVNUID0gJChkZXNrdG9wX0RBVEFfaW5faW4pCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dUSzJPUjNfVFJVRUBhdmFoaWluY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL2F2YWhpLXVpCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dUSzJPUjNfVFJVRUBhdmFoaWluY2x1ZGVfSEVBREVSUyA9IFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HTElCX1RSVUVAQEhBVkVfR1RLMk9SM19UUlVFQAlhdmFoaS11aS5oCisKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HTElCX1RSVUVAQEhBVkVfR1RLMk9SM19UUlVFQGxpYl9MVExJQlJBUklFUyA9ICQoYW1fX2FwcGVuZF8yKSBcCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dUSzJPUjNfVFJVRUAJJChhbV9fYXBwZW5kXzMpCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dUSzJPUjNfVFJVRUBsaWJhdmFoaV91aV9sYV9TT1VSQ0VTID0gIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HTElCX1RSVUVAQEhBVkVfR1RLMk9SM19UUlVFQAlhdmFoaS11aS5oIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HTElCX1RSVUVAQEhBVkVfR1RLMk9SM19UUlVFQAlhdmFoaS11aS5jIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HTElCX1RSVUVAQEhBVkVfR1RLMk9SM19UUlVFQAkkKGFtX19hcHBlbmRfNCkgXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dMSUJfVFJVRUBASEFWRV9HVEsyT1IzX1RSVUVACSQoYW1fX2FwcGVuZF85KQorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dMSUJfVFJVRUBASEFWRV9HVEsyT1IzX1RSVUVAbGliYXZhaGlfdWlfbGFfQ0ZMQUdTID0gJChBTV9DRkxBR1MpIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HTElCX1RSVUVAQEhBVkVfR1RLMk9SM19UUlVFQAkkKEdUSzIwX0NGTEFHUykgXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dMSUJfVFJVRUBASEFWRV9HVEsyT1IzX1RSVUVACSQoYW1fX2FwcGVuZF81KSBcCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dUSzJPUjNfVFJVRUAJJChhbV9fYXBwZW5kXzEwKQorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dMSUJfVFJVRUBASEFWRV9HVEsyT1IzX1RSVUVAbGliYXZhaGlfdWlfbGFfTElCQUREID0gJChBTV9MREFERCkgXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dMSUJfVFJVRUBASEFWRV9HVEsyT1IzX1RSVUVACS4uL2F2YWhpLWNvbW1vbi9saWJhdmFoaS1jb21tb24ubGEgXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dMSUJfVFJVRUBASEFWRV9HVEsyT1IzX1RSVUVACS4uL2F2YWhpLWNsaWVudC9saWJhdmFoaS1jbGllbnQubGEgXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dMSUJfVFJVRUBASEFWRV9HVEsyT1IzX1RSVUVACS4uL2F2YWhpLWdsaWIvbGliYXZhaGktZ2xpYi5sYSBcCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dUSzJPUjNfVFJVRUAJJChHVEsyMF9MSUJTKSBcCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dUSzJPUjNfVFJVRUAJJChhbV9fYXBwZW5kXzYpCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dUSzJPUjNfVFJVRUBsaWJhdmFoaV91aV9sYV9MREZMQUdTID0gJChBTV9MREZMQUdTKSAgLXZlcnNpb24taW5mbyAkKExJQkFWQUhJX1VJX1ZFUlNJT05fSU5GTykKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HTElCX1RSVUVAQEhBVkVfR1RLMk9SM19UUlVFQGxpYmF2YWhpX3VpX2d0azNfbGFfU09VUkNFUyA9ICQobGliYXZhaGlfdWlfbGFfU09VUkNFUykKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HTElCX1RSVUVAQEhBVkVfR1RLMk9SM19UUlVFQGxpYmF2YWhpX3VpX2d0azNfbGFfQ0ZMQUdTID0gJChBTV9DRkxBR1MpIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HTElCX1RSVUVAQEhBVkVfR1RLMk9SM19UUlVFQAkkKEdUSzMwX0NGTEFHUykgXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dMSUJfVFJVRUBASEFWRV9HVEsyT1IzX1RSVUVACSQoYW1fX2FwcGVuZF83KSBcCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dUSzJPUjNfVFJVRUAJJChhbV9fYXBwZW5kXzExKQorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dMSUJfVFJVRUBASEFWRV9HVEsyT1IzX1RSVUVAbGliYXZhaGlfdWlfZ3RrM19sYV9MSUJBREQgPSAkKEFNX0xEQUREKSBcCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dUSzJPUjNfVFJVRUAJLi4vYXZhaGktY29tbW9uL2xpYmF2YWhpLWNvbW1vbi5sYSBcCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dUSzJPUjNfVFJVRUAJLi4vYXZhaGktY2xpZW50L2xpYmF2YWhpLWNsaWVudC5sYSBcCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dUSzJPUjNfVFJVRUAJLi4vYXZhaGktZ2xpYi9saWJhdmFoaS1nbGliLmxhIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HTElCX1RSVUVAQEhBVkVfR1RLMk9SM19UUlVFQAkkKEdUSzMwX0xJQlMpIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HTElCX1RSVUVAQEhBVkVfR1RLMk9SM19UUlVFQAkkKGFtX19hcHBlbmRfOCkKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HTElCX1RSVUVAQEhBVkVfR1RLMk9SM19UUlVFQGxpYmF2YWhpX3VpX2d0azNfbGFfTERGTEFHUyA9ICQoQU1fTERGTEFHUykgIC12ZXJzaW9uLWluZm8gJChMSUJBVkFISV9VSV9WRVJTSU9OX0lORk8pCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dUSzJPUjNfVFJVRUBic3NoX1NPVVJDRVMgPSBic3NoLmMKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HTElCX1RSVUVAQEhBVkVfR1RLMk9SM19UUlVFQEBIQVZFX0dUSzNfRkFMU0VAYnNzaF9DRkxBR1MgPSAkKEFNX0NGTEFHUykgJChHVEsyMF9DRkxBR1MpCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dUSzJPUjNfVFJVRUBASEFWRV9HVEszX1RSVUVAYnNzaF9DRkxBR1MgPSAkKEFNX0NGTEFHUykgJChHVEszMF9DRkxBR1MpCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dUSzJPUjNfVFJVRUBASEFWRV9HVEszX0ZBTFNFQGJzc2hfTERBREQgPSAkKEFNX0xEQUREKSAkKEdUSzIwX0xJQlMpIC4uL2F2YWhpLWNsaWVudC9saWJhdmFoaS1jbGllbnQubGEgLi4vYXZhaGktY29tbW9uL2xpYmF2YWhpLWNvbW1vbi5sYSBsaWJhdmFoaS11aS5sYQorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dMSUJfVFJVRUBASEFWRV9HVEsyT1IzX1RSVUVAQEhBVkVfR1RLM19UUlVFQGJzc2hfTERBREQgPSAkKEFNX0xEQUREKSAkKEdUSzMwX0xJQlMpIC4uL2F2YWhpLWNsaWVudC9saWJhdmFoaS1jbGllbnQubGEgLi4vYXZhaGktY29tbW9uL2xpYmF2YWhpLWNvbW1vbi5sYSBsaWJhdmFoaS11aS1ndGszLmxhCitDTEVBTkZJTEVTID0gJChkZXNrdG9wX0RBVEEpICQoZGVza3RvcF9EQVRBX2luKQorYWxsOiBhbGwtYW0KKworLlNVRkZJWEVTOgorLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagorJChzcmNkaXIpL01ha2VmaWxlLmluOiAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gYXZhaGktdWkvTWFrZWZpbGUnOyBcCisJJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1mb3JlaWduIGF2YWhpLXVpL01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKK2luc3RhbGwtbGliTFRMSUJSQVJJRVM6ICQobGliX0xUTElCUkFSSUVTKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQobGliZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQobGliZGlyKSIKKwlAbGlzdD0nJChsaWJfTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChsaWJkaXIpIiB8fCBsaXN0PTsgXAorCWxpc3QyPTsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICQkcDsgdGhlbiBcCisJICAgIGxpc3QyPSIkJGxpc3QyICQkcCI7IFwKKwkgIGVsc2UgOjsgZmk7IFwKKwlkb25lOyBcCisJdGVzdCAteiAiJCRsaXN0MiIgfHwgeyBcCisJICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgJyQoREVTVERJUikkKGxpYmRpciknIjsgXAorCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgIiQoREVTVERJUikkKGxpYmRpcikiOyBcCisJfQorCit1bmluc3RhbGwtbGliTFRMSUJSQVJJRVM6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChsaWJfTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChsaWJkaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgJChhbV9fc3RyaXBfZGlyKSBcCisJICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgJyQoREVTVERJUikkKGxpYmRpcikvJCRmJyI7IFwKKwkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICIkKERFU1RESVIpJChsaWJkaXIpLyQkZiI7IFwKKwlkb25lCisKK2NsZWFuLWxpYkxUTElCUkFSSUVTOgorCS10ZXN0IC16ICIkKGxpYl9MVExJQlJBUklFUykiIHx8IHJtIC1mICQobGliX0xUTElCUkFSSUVTKQorCUBsaXN0PSckKGxpYl9MVExJQlJBUklFUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGRpcj0iYGVjaG8gJCRwIHwgc2VkIC1lICdzfC9bXi9dKiQkfHwnYCI7IFwKKwkgIHRlc3QgIiQkZGlyIiAhPSAiJCRwIiB8fCBkaXI9LjsgXAorCSAgZWNobyAicm0gLWYgXCIkJHtkaXJ9L3NvX2xvY2F0aW9uc1wiIjsgXAorCSAgcm0gLWYgIiQke2Rpcn0vc29fbG9jYXRpb25zIjsgXAorCWRvbmUKK2xpYmF2YWhpLXVpLWd0azMubGE6ICQobGliYXZhaGlfdWlfZ3RrM19sYV9PQkpFQ1RTKSAkKGxpYmF2YWhpX3VpX2d0azNfbGFfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYmF2YWhpX3VpX2d0azNfbGFfREVQRU5ERU5DSUVTKSAKKwkkKEFNX1ZfQ0NMRCkkKGxpYmF2YWhpX3VpX2d0azNfbGFfTElOSykgJChhbV9saWJhdmFoaV91aV9ndGszX2xhX3JwYXRoKSAkKGxpYmF2YWhpX3VpX2d0azNfbGFfT0JKRUNUUykgJChsaWJhdmFoaV91aV9ndGszX2xhX0xJQkFERCkgJChMSUJTKQorbGliYXZhaGktdWkubGE6ICQobGliYXZhaGlfdWlfbGFfT0JKRUNUUykgJChsaWJhdmFoaV91aV9sYV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfbGliYXZhaGlfdWlfbGFfREVQRU5ERU5DSUVTKSAKKwkkKEFNX1ZfQ0NMRCkkKGxpYmF2YWhpX3VpX2xhX0xJTkspICQoYW1fbGliYXZhaGlfdWlfbGFfcnBhdGgpICQobGliYXZhaGlfdWlfbGFfT0JKRUNUUykgJChsaWJhdmFoaV91aV9sYV9MSUJBREQpICQoTElCUykKK2luc3RhbGwtYmluUFJPR1JBTVM6ICQoYmluX1BST0dSQU1TKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQoYmluZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQoYmluZGlyKSIKKwlAbGlzdD0nJChiaW5fUFJPR1JBTVMpJzsgdGVzdCAtbiAiJChiaW5kaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCisJc2VkICdzLyQoRVhFRVhUKSQkLy8nIHwgXAorCXdoaWxlIHJlYWQgcCBwMTsgZG8gaWYgdGVzdCAtZiAkJHAgfHwgdGVzdCAtZiAkJHAxOyBcCisJICB0aGVuIGVjaG8gIiQkcCI7IGVjaG8gIiQkcCI7IGVsc2UgOjsgZmk7IFwKKwlkb25lIHwgXAorCXNlZCAtZSAncDtzLC4qLywsO247aCcgLWUgJ3N8Lip8LnwnIFwKKwkgICAgLWUgJ3A7eDtzLC4qLywsO3MvJChFWEVFWFQpJCQvLzskKHRyYW5zZm9ybSk7cy8kJC8kKEVYRUVYVCkvJyB8IFwKKwlzZWQgJ047TjtOO3MsXG4sICxnJyB8IFwKKwkkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiOyBkaXJzWyIuIl0gPSAxIH0gXAorCSAgeyBkPSQkMzsgaWYgKGRpcnNbZF0gIT0gMSkgeyBwcmludCAiZCIsIGQ7IGRpcnNbZF0gPSAxIH0gXAorCSAgICBpZiAoJCQyID09ICQkNCkgZmlsZXNbZF0gPSBmaWxlc1tkXSAiICIgJCQxOyBcCisJICAgIGVsc2UgeyBwcmludCAiZiIsICQkMyAiLyIgJCQ0LCAkJDE7IH0gfSBcCisJICBFTkQgeyBmb3IgKGQgaW4gZmlsZXMpIHByaW50ICJmIiwgZCwgZmlsZXNbZF0gfScgfCBcCisJd2hpbGUgcmVhZCB0eXBlIGRpciBmaWxlczsgZG8gXAorCSAgICBpZiB0ZXN0ICIkJGRpciIgPSAuOyB0aGVuIGRpcj07IGVsc2UgZGlyPS8kJGRpcjsgZmk7IFwKKwkgICAgdGVzdCAteiAiJCRmaWxlcyIgfHwgeyBcCisJICAgIGVjaG8gIiAkKElOU1RBTExfUFJPR1JBTV9FTlYpICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTExfUFJPR1JBTSkgJCRmaWxlcyAnJChERVNURElSKSQoYmluZGlyKSQkZGlyJyI7IFwKKwkgICAgJChJTlNUQUxMX1BST0dSQU1fRU5WKSAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMX1BST0dSQU0pICQkZmlsZXMgIiQoREVTVERJUikkKGJpbmRpcikkJGRpciIgfHwgZXhpdCAkJD87IFwKKwkgICAgfSBcCisJOyBkb25lCisKK3VuaW5zdGFsbC1iaW5QUk9HUkFNUzoKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKGJpbl9QUk9HUkFNUyknOyB0ZXN0IC1uICIkKGJpbmRpcikiIHx8IGxpc3Q9OyBcCisJZmlsZXM9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IFwKKwkgIHNlZCAtZSAnaDtzLF4uKi8sLDtzLyQoRVhFRVhUKSQkLy87JCh0cmFuc2Zvcm0pJyBcCisJICAgICAgLWUgJ3MvJCQvJChFWEVFWFQpLycgYDsgXAorCXRlc3QgLW4gIiQkbGlzdCIgfHwgZXhpdCAwOyBcCisJZWNobyAiICggY2QgJyQoREVTVERJUikkKGJpbmRpciknICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAorCWNkICIkKERFU1RESVIpJChiaW5kaXIpIiAmJiBybSAtZiAkJGZpbGVzCisKK2NsZWFuLWJpblBST0dSQU1TOgorCUBsaXN0PSckKGJpbl9QUk9HUkFNUyknOyB0ZXN0IC1uICIkJGxpc3QiIHx8IGV4aXQgMDsgXAorCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCisJcm0gLWYgJCRsaXN0IHx8IGV4aXQgJCQ/OyBcCisJdGVzdCAtbiAiJChFWEVFWFQpIiB8fCBleGl0IDA7IFwKKwlsaXN0PWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgJ3MvJChFWEVFWFQpJCQvLydgOyBcCisJZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKKwlybSAtZiAkJGxpc3QKK2Jzc2gkKEVYRUVYVCk6ICQoYnNzaF9PQkpFQ1RTKSAkKGJzc2hfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2Jzc2hfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgYnNzaCQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQoYnNzaF9MSU5LKSAkKGJzc2hfT0JKRUNUUykgJChic3NoX0xEQUREKSAkKExJQlMpCisKK21vc3RseWNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICouJChPQkpFWFQpCisKK2Rpc3RjbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLnRhYi5jCisKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9ic3NoLWJzc2guUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmF2YWhpX3VpX2d0azNfbGEtYXZhaGktdWkuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJhdmFoaV91aV9ndGszX2xhLXN0ZGIuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJhdmFoaV91aV9sYS1hdmFoaS11aS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmF2YWhpX3VpX2xhLXN0ZGIuUGxvQGFtX19xdW90ZUAKKworLmMubzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgJDwKKworLmMub2JqOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIGAkKENZR1BBVEhfVykgJyQ8J2AKKworLmMubG86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8CisKK2xpYmF2YWhpX3VpX2d0azNfbGEtYXZhaGktdWkubG86IGF2YWhpLXVpLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV91aV9ndGszX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJhdmFoaV91aV9ndGszX2xhLWF2YWhpLXVpLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJhdmFoaV91aV9ndGszX2xhLWF2YWhpLXVpLlRwbyAtYyAtbyBsaWJhdmFoaV91aV9ndGszX2xhLWF2YWhpLXVpLmxvIGB0ZXN0IC1mICdhdmFoaS11aS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhdmFoaS11aS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJhdmFoaV91aV9ndGszX2xhLWF2YWhpLXVpLlRwbyAkKERFUERJUikvbGliYXZhaGlfdWlfZ3RrM19sYS1hdmFoaS11aS5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhdmFoaS11aS5jJyBvYmplY3Q9J2xpYmF2YWhpX3VpX2d0azNfbGEtYXZhaGktdWkubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV91aV9ndGszX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmF2YWhpX3VpX2d0azNfbGEtYXZhaGktdWkubG8gYHRlc3QgLWYgJ2F2YWhpLXVpLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGF2YWhpLXVpLmMKKworbGliYXZhaGlfdWlfZ3RrM19sYS1zdGRiLmxvOiAuLi9hdmFoaS11dGlscy9zdGRiLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV91aV9ndGszX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJhdmFoaV91aV9ndGszX2xhLXN0ZGIubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmF2YWhpX3VpX2d0azNfbGEtc3RkYi5UcG8gLWMgLW8gbGliYXZhaGlfdWlfZ3RrM19sYS1zdGRiLmxvIGB0ZXN0IC1mICcuLi9hdmFoaS11dGlscy9zdGRiLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYC4uL2F2YWhpLXV0aWxzL3N0ZGIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliYXZhaGlfdWlfZ3RrM19sYS1zdGRiLlRwbyAkKERFUERJUikvbGliYXZhaGlfdWlfZ3RrM19sYS1zdGRiLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9Jy4uL2F2YWhpLXV0aWxzL3N0ZGIuYycgb2JqZWN0PSdsaWJhdmFoaV91aV9ndGszX2xhLXN0ZGIubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV91aV9ndGszX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmF2YWhpX3VpX2d0azNfbGEtc3RkYi5sbyBgdGVzdCAtZiAnLi4vYXZhaGktdXRpbHMvc3RkYi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2AuLi9hdmFoaS11dGlscy9zdGRiLmMKKworbGliYXZhaGlfdWlfbGEtYXZhaGktdWkubG86IGF2YWhpLXVpLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJhdmFoaV91aV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliYXZhaGlfdWlfbGEtYXZhaGktdWkubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmF2YWhpX3VpX2xhLWF2YWhpLXVpLlRwbyAtYyAtbyBsaWJhdmFoaV91aV9sYS1hdmFoaS11aS5sbyBgdGVzdCAtZiAnYXZhaGktdWkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXZhaGktdWkuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliYXZhaGlfdWlfbGEtYXZhaGktdWkuVHBvICQoREVQRElSKS9saWJhdmFoaV91aV9sYS1hdmFoaS11aS5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhdmFoaS11aS5jJyBvYmplY3Q9J2xpYmF2YWhpX3VpX2xhLWF2YWhpLXVpLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliYXZhaGlfdWlfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliYXZhaGlfdWlfbGEtYXZhaGktdWkubG8gYHRlc3QgLWYgJ2F2YWhpLXVpLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGF2YWhpLXVpLmMKKworbGliYXZhaGlfdWlfbGEtc3RkYi5sbzogLi4vYXZhaGktdXRpbHMvc3RkYi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliYXZhaGlfdWlfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmF2YWhpX3VpX2xhLXN0ZGIubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmF2YWhpX3VpX2xhLXN0ZGIuVHBvIC1jIC1vIGxpYmF2YWhpX3VpX2xhLXN0ZGIubG8gYHRlc3QgLWYgJy4uL2F2YWhpLXV0aWxzL3N0ZGIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgLi4vYXZhaGktdXRpbHMvc3RkYi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJhdmFoaV91aV9sYS1zdGRiLlRwbyAkKERFUERJUikvbGliYXZhaGlfdWlfbGEtc3RkYi5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPScuLi9hdmFoaS11dGlscy9zdGRiLmMnIG9iamVjdD0nbGliYXZhaGlfdWlfbGEtc3RkYi5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmF2YWhpX3VpX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmF2YWhpX3VpX2xhLXN0ZGIubG8gYHRlc3QgLWYgJy4uL2F2YWhpLXV0aWxzL3N0ZGIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgLi4vYXZhaGktdXRpbHMvc3RkYi5jCisKK2Jzc2gtYnNzaC5vOiBic3NoLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChic3NoX0NGTEFHUykgJChDRkxBR1MpIC1NVCBic3NoLWJzc2gubyAtTUQgLU1QIC1NRiAkKERFUERJUikvYnNzaC1ic3NoLlRwbyAtYyAtbyBic3NoLWJzc2gubyBgdGVzdCAtZiAnYnNzaC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bic3NoLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2Jzc2gtYnNzaC5UcG8gJChERVBESVIpL2Jzc2gtYnNzaC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2Jzc2guYycgb2JqZWN0PSdic3NoLWJzc2gubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYnNzaF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBic3NoLWJzc2gubyBgdGVzdCAtZiAnYnNzaC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bic3NoLmMKKworYnNzaC1ic3NoLm9iajogYnNzaC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYnNzaF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYnNzaC1ic3NoLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvYnNzaC1ic3NoLlRwbyAtYyAtbyBic3NoLWJzc2gub2JqIGBpZiB0ZXN0IC1mICdic3NoLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnYnNzaC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9ic3NoLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2Jzc2gtYnNzaC5UcG8gJChERVBESVIpL2Jzc2gtYnNzaC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2Jzc2guYycgb2JqZWN0PSdic3NoLWJzc2gub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChic3NoX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGJzc2gtYnNzaC5vYmogYGlmIHRlc3QgLWYgJ2Jzc2guYyc7IHRoZW4gJChDWUdQQVRIX1cpICdic3NoLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2Jzc2guYyc7IGZpYAorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworaW5zdGFsbC1kZXNrdG9wREFUQTogJChkZXNrdG9wX0RBVEEpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJdGVzdCAteiAiJChkZXNrdG9wZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQoZGVza3RvcGRpcikiCisJQGxpc3Q9JyQoZGVza3RvcF9EQVRBKSc7IHRlc3QgLW4gIiQoZGVza3RvcGRpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAorCSAgZWNobyAiJCRkJCRwIjsgXAorCWRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAorCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKKwkgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAnJChERVNURElSKSQoZGVza3RvcGRpciknIjsgXAorCSAgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgIiQoREVTVERJUikkKGRlc2t0b3BkaXIpIiB8fCBleGl0ICQkPzsgXAorCWRvbmUKKwordW5pbnN0YWxsLWRlc2t0b3BEQVRBOgorCUAkKE5PUk1BTF9VTklOU1RBTEwpCisJQGxpc3Q9JyQoZGVza3RvcF9EQVRBKSc7IHRlc3QgLW4gIiQoZGVza3RvcGRpcikiIHx8IGxpc3Q9OyBcCisJZmlsZXM9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7IFwKKwlkaXI9JyQoREVTVERJUikkKGRlc2t0b3BkaXIpJzsgJChhbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyKQoraW5zdGFsbC1hdmFoaWluY2x1ZGVIRUFERVJTOiAkKGF2YWhpaW5jbHVkZV9IRUFERVJTKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQoYXZhaGlpbmNsdWRlZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQoYXZhaGlpbmNsdWRlZGlyKSIKKwlAbGlzdD0nJChhdmFoaWluY2x1ZGVfSEVBREVSUyknOyB0ZXN0IC1uICIkKGF2YWhpaW5jbHVkZWRpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAorCSAgZWNobyAiJCRkJCRwIjsgXAorCWRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAorCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKKwkgIGVjaG8gIiAkKElOU1RBTExfSEVBREVSKSAkJGZpbGVzICckKERFU1RESVIpJChhdmFoaWluY2x1ZGVkaXIpJyI7IFwKKwkgICQoSU5TVEFMTF9IRUFERVIpICQkZmlsZXMgIiQoREVTVERJUikkKGF2YWhpaW5jbHVkZWRpcikiIHx8IGV4aXQgJCQ/OyBcCisJZG9uZQorCit1bmluc3RhbGwtYXZhaGlpbmNsdWRlSEVBREVSUzoKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKGF2YWhpaW5jbHVkZV9IRUFERVJTKSc7IHRlc3QgLW4gIiQoYXZhaGlpbmNsdWRlZGlyKSIgfHwgbGlzdD07IFwKKwlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IHNlZCAtZSAnc3xeLiovfHwnYDsgXAorCWRpcj0nJChERVNURElSKSQoYXZhaGlpbmNsdWRlZGlyKSc7ICQoYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpcikKKworSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlta2lkIC1mSUQgJCR1bmlxdWUKK3RhZ3M6IFRBR1MKKworVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlzZXQgeDsgXAorCWhlcmU9YHB3ZGA7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJc2hpZnQ7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKKwkgIGVsc2UgXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgJCR1bmlxdWU7IFwKKwkgIGZpOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAorCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorCSAgICAgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUgJChMVExJQlJBUklFUykgJChQUk9HUkFNUykgJChEQVRBKSAkKEhFQURFUlMpCitpbnN0YWxsLWJpblBST0dSQU1TOiBpbnN0YWxsLWxpYkxUTElCUkFSSUVTCisKK2luc3RhbGxkaXJzOgorCWZvciBkaXIgaW4gIiQoREVTVERJUikkKGxpYmRpcikiICIkKERFU1RESVIpJChiaW5kaXIpIiAiJChERVNURElSKSQoZGVza3RvcGRpcikiICIkKERFU1RESVIpJChhdmFoaWluY2x1ZGVkaXIpIjsgZG8gXAorCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAorCWRvbmUKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgICAgIGluc3RhbGw7IFwKKwllbHNlIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAorCWZpCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENMRUFORklMRVMpIiB8fCBybSAtZiAkKENMRUFORklMRVMpCisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKK0BIQVZFX0RCVVNfRkFMU0VAaW5zdGFsbC1leGVjLWxvY2FsOgorQEhBVkVfR0xJQl9GQUxTRUBpbnN0YWxsLWV4ZWMtbG9jYWw6CitASEFWRV9HVEsyT1IzX0ZBTFNFQGluc3RhbGwtZXhlYy1sb2NhbDoKK2NsZWFuOiBjbGVhbi1hbQorCitjbGVhbi1hbTogY2xlYW4tYmluUFJPR1JBTVMgY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJMVExJQlJBUklFUyBcCisJY2xlYW4tbGlidG9vbCBtb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi10YWdzCisKK2R2aTogZHZpLWFtCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1hbQorCitodG1sLWFtOgorCitpbmZvOiBpbmZvLWFtCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1hdmFoaWluY2x1ZGVIRUFERVJTIGluc3RhbGwtZGVza3RvcERBVEEKKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCisKK2luc3RhbGwtZHZpLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06IGluc3RhbGwtYmluUFJPR1JBTVMgaW5zdGFsbC1leGVjLWxvY2FsIFwKKwlpbnN0YWxsLWxpYkxUTElCUkFSSUVTCisKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCisKK2luc3RhbGwtaHRtbC1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1pbmZvLWFtOgorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCisKK2luc3RhbGwtcGRmLWFtOgorCitpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCisKK2luc3RhbGwtcHMtYW06CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtYW0KKworcGRmLWFtOgorCitwczogcHMtYW0KKworcHMtYW06CisKK3VuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWF2YWhpaW5jbHVkZUhFQURFUlMgdW5pbnN0YWxsLWJpblBST0dSQU1TIFwKKwl1bmluc3RhbGwtZGVza3RvcERBVEEgdW5pbnN0YWxsLWxpYkxUTElCUkFSSUVTCisKKy5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKKworLlBIT05ZOiBDVEFHUyBHVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWJpblBST0dSQU1TIFwKKwljbGVhbi1nZW5lcmljIGNsZWFuLWxpYkxUTElCUkFSSUVTIGNsZWFuLWxpYnRvb2wgY3RhZ3MgXAorCWRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAorCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBcCisJaW5zdGFsbC1hdmFoaWluY2x1ZGVIRUFERVJTIGluc3RhbGwtYmluUFJPR1JBTVMgaW5zdGFsbC1kYXRhIFwKKwlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kZXNrdG9wREFUQSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBcCisJaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWV4ZWMtbG9jYWwgaW5zdGFsbC1odG1sIFwKKwlpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBcCisJaW5zdGFsbC1saWJMVExJQlJBUklFUyBpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBcCisJaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIFwKKwlpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBcCisJbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWNvbXBpbGUgXAorCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKKwl0YWdzIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gdW5pbnN0YWxsLWF2YWhpaW5jbHVkZUhFQURFUlMgXAorCXVuaW5zdGFsbC1iaW5QUk9HUkFNUyB1bmluc3RhbGwtZGVza3RvcERBVEEgXAorCXVuaW5zdGFsbC1saWJMVExJQlJBUklFUworCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dUSzJPUjNfVFJVRUBASU5UTFRPT0xfREVTS1RPUF9SVUxFQAorCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dUSzJPUjNfVFJVRUBpbnN0YWxsLWV4ZWMtbG9jYWw6CitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dUSzJPUjNfVFJVRUAJY2QgJChERVNURElSKS8kKGJpbmRpcikgJiYgXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dMSUJfVFJVRUBASEFWRV9HVEsyT1IzX1RSVUVACQlybSAtZiBidm5jIGJzaGVsbCAmJiBcCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dUSzJPUjNfVFJVRUAJCSQoTE5fUykgYnNzaCBidm5jICYmIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HTElCX1RSVUVAQEhBVkVfR1RLMk9SM19UUlVFQAkJJChMTl9TKSBic3NoIGJzaGVsbAorCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dUSzJPUjNfVFJVRUBic3NoLmRlc2t0b3AuaW46IGJzc2guZGVza3RvcC5pbi5pbgorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dMSUJfVFJVRUBASEFWRV9HVEsyT1IzX1RSVUVACSQoQU1fVl9HRU4pc2VkIC1lICdzLEBiaW5kaXJcQCwkKGJpbmRpciksZycgJDwgPiAkQAorCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR0xJQl9UUlVFQEBIQVZFX0dUSzJPUjNfVFJVRUBidm5jLmRlc2t0b3AuaW46IGJ2bmMuZGVza3RvcC5pbi5pbgorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dMSUJfVFJVRUBASEFWRV9HVEsyT1IzX1RSVUVACSQoQU1fVl9HRU4pc2VkIC1lICdzLEBiaW5kaXJcQCwkKGJpbmRpciksZycgJDwgPiAkQAorCitASU5UTFRPT0xfREVTS1RPUF9SVUxFQAorCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktdWkvYXZhaGktdWkuYyBiL2F2YWhpLTAuNi4zMS9hdmFoaS11aS9hdmFoaS11aS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyZDc2NWEKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktdWkvYXZhaGktdWkuYwpAQCAtMCwwICsxLDE0NzcgQEAKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPG5ldC9pZi5oPgorCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorCisjaW5jbHVkZSA8YXZhaGktZ2xpYi9nbGliLXdhdGNoLmg+CisjaW5jbHVkZSA8YXZhaGktY2xpZW50L2NsaWVudC5oPgorI2luY2x1ZGUgPGF2YWhpLWNsaWVudC9sb29rdXAuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vZXJyb3IuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vYWRkcmVzcy5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9kb21haW4uaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vaTE4bi5oPgorCisjaW5jbHVkZSAiYXZhaGktdWkuaCIKKworI2lmIGRlZmluZWQoSEFWRV9HREJNKSB8fCBkZWZpbmVkKEhBVkVfREJNKQorI2luY2x1ZGUgIi4uL2F2YWhpLXV0aWxzL3N0ZGIuaCIKKyNlbmRpZgorCisvKiB0b2RvOiBpMThuLCBISUdpZnkgKi8KKworc3RydWN0IF9BdWlTZXJ2aWNlRGlhbG9nUHJpdmF0ZSB7CisgICAgQXZhaGlHTGliUG9sbCAqZ2xpYl9wb2xsOworICAgIEF2YWhpQ2xpZW50ICpjbGllbnQ7CisgICAgQXZhaGlTZXJ2aWNlQnJvd3NlciAqKmJyb3dzZXJzOworICAgIEF2YWhpU2VydmljZVJlc29sdmVyICpyZXNvbHZlcjsKKyAgICBBdmFoaURvbWFpbkJyb3dzZXIgKmRvbWFpbl9icm93c2VyOworCisgICAgZ2NoYXIgKipicm93c2Vfc2VydmljZV90eXBlczsKKyAgICBnY2hhciAqc2VydmljZV90eXBlOworICAgIGdjaGFyICpkb21haW47CisgICAgZ2NoYXIgKnNlcnZpY2VfbmFtZTsKKyAgICBBdmFoaVByb3RvY29sIGFkZHJlc3NfZmFtaWx5OworCisgICAgQXZhaGlBZGRyZXNzIGFkZHJlc3M7CisgICAgZ2NoYXIgKmhvc3RfbmFtZTsKKyAgICBBdmFoaVN0cmluZ0xpc3QgKnR4dF9kYXRhOworICAgIGd1aW50MTYgcG9ydDsKKworICAgIGdib29sZWFuIHJlc29sdmVfc2VydmljZSwgcmVzb2x2ZV9zZXJ2aWNlX2RvbmU7CisgICAgZ2Jvb2xlYW4gcmVzb2x2ZV9ob3N0X25hbWUsIHJlc29sdmVfaG9zdF9uYW1lX2RvbmU7CisKKyAgICBHdGtXaWRnZXQgKmRvbWFpbl9sYWJlbDsKKyAgICBHdGtXaWRnZXQgKmRvbWFpbl9idXR0b247CisgICAgR3RrV2lkZ2V0ICpzZXJ2aWNlX3RyZWVfdmlldzsKKyAgICBHdGtXaWRnZXQgKnNlcnZpY2VfcHJvZ3Jlc3NfYmFyOworCisgICAgR3RrTGlzdFN0b3JlICpzZXJ2aWNlX2xpc3Rfc3RvcmUsICpkb21haW5fbGlzdF9zdG9yZTsKKyAgICBHSGFzaFRhYmxlICpzZXJ2aWNlX3R5cGVfbmFtZXM7CisKKyAgICBndWludCBzZXJ2aWNlX3B1bHNlX3RpbWVvdXQ7CisgICAgZ3VpbnQgZG9tYWluX3B1bHNlX3RpbWVvdXQ7CisgICAgZ3VpbnQgc3RhcnRfaWRsZTsKKworICAgIEF2YWhpSWZJbmRleCBjb21tb25faW50ZXJmYWNlOworICAgIEF2YWhpUHJvdG9jb2wgY29tbW9uX3Byb3RvY29sOworCisgICAgR3RrV2lkZ2V0ICpkb21haW5fZGlhbG9nOworICAgIEd0a1dpZGdldCAqZG9tYWluX2VudHJ5OworICAgIEd0a1dpZGdldCAqZG9tYWluX3RyZWVfdmlldzsKKyAgICBHdGtXaWRnZXQgKmRvbWFpbl9wcm9ncmVzc19iYXI7CisgICAgR3RrV2lkZ2V0ICpkb21haW5fb2tfYnV0dG9uOworCisgICAgZ2ludCBmb3J3YXJkX3Jlc3BvbnNlX2lkOworfTsKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfQlJPV1NFX1NFUlZJQ0VfVFlQRVMsCisgICAgUFJPUF9ET01BSU4sCisgICAgUFJPUF9TRVJWSUNFX1RZUEUsCisgICAgUFJPUF9TRVJWSUNFX05BTUUsCisgICAgUFJPUF9BRERSRVNTLAorICAgIFBST1BfUE9SVCwKKyAgICBQUk9QX0hPU1RfTkFNRSwKKyAgICBQUk9QX1RYVF9EQVRBLAorICAgIFBST1BfUkVTT0xWRV9TRVJWSUNFLAorICAgIFBST1BfUkVTT0xWRV9IT1NUX05BTUUsCisgICAgUFJPUF9BRERSRVNTX0ZBTUlMWQorfTsKKworZW51bSB7CisgICAgU0VSVklDRV9DT0xVTU5fSUZBQ0UsCisgICAgU0VSVklDRV9DT0xVTU5fUFJPVE8sCisgICAgU0VSVklDRV9DT0xVTU5fVFlQRSwKKyAgICBTRVJWSUNFX0NPTFVNTl9OQU1FLAorICAgIFNFUlZJQ0VfQ09MVU1OX1BSRVRUWV9JRkFDRSwKKyAgICBTRVJWSUNFX0NPTFVNTl9QUkVUVFlfVFlQRSwKKyAgICBOX1NFUlZJQ0VfQ09MVU1OUworfTsKKworZW51bSB7CisgICAgRE9NQUlOX0NPTFVNTl9OQU1FLAorICAgIERPTUFJTl9DT0xVTU5fUkVGLAorICAgIE5fRE9NQUlOX0NPTFVNTlMKK307CisKK3N0YXRpYyB2b2lkIGF1aV9zZXJ2aWNlX2RpYWxvZ19maW5hbGl6ZShHT2JqZWN0ICpvYmplY3QpOworc3RhdGljIHZvaWQgYXVpX3NlcnZpY2VfZGlhbG9nX3NldF9wcm9wZXJ0eShHT2JqZWN0ICpvYmplY3QsIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSAqdmFsdWUsIEdQYXJhbVNwZWMgKnBzcGVjKTsKK3N0YXRpYyB2b2lkIGF1aV9zZXJ2aWNlX2RpYWxvZ19nZXRfcHJvcGVydHkoR09iamVjdCAqb2JqZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUgKnZhbHVlLCBHUGFyYW1TcGVjICpwc3BlYyk7CisKK3N0YXRpYyBpbnQgZ2V0X2RlZmF1bHRfcmVzcG9uc2UoR3RrRGlhbG9nICpkbGcpIHsKKyAgICBnaW50IHJldCA9IEdUS19SRVNQT05TRV9OT05FOworCisgICAgaWYgKGd0a193aW5kb3dfZ2V0X2RlZmF1bHRfd2lkZ2V0KEdUS19XSU5ET1coZGxnKSkpCisgICAgICAgIC8qIFVzZSB0aGUgcmVzcG9uc2Ugb2YgdGhlIGRlZmF1bHQgd2lkZ2V0LCBpZiBwb3NzaWJsZSAqLworICAgICAgICByZXQgPSBndGtfZGlhbG9nX2dldF9yZXNwb25zZV9mb3Jfd2lkZ2V0KGRsZywgZ3RrX3dpbmRvd19nZXRfZGVmYXVsdF93aWRnZXQoR1RLX1dJTkRPVyhkbGcpKSk7CisKKyAgICBpZiAocmV0ID09IEdUS19SRVNQT05TRV9OT05FKSB7CisgICAgICAgIC8qIEZhbGwgYmFjayB0byBmaW5kaW5nIHRoZSBmaXJzdCBwb3NpdGl2ZSByZXNwb25zZSAqLworICAgICAgICBHTGlzdCAqY2hpbGRyZW4sICp0OworICAgICAgICBnaW50IGJhZCA9IEdUS19SRVNQT05TRV9OT05FOworCisgICAgICAgIHQgPSBjaGlsZHJlbiA9IGd0a19jb250YWluZXJfZ2V0X2NoaWxkcmVuKEdUS19DT05UQUlORVIoZ3RrX2RpYWxvZ19nZXRfYWN0aW9uX2FyZWEoZGxnKSkpOworCisgICAgICAgIHdoaWxlICh0KSB7CisgICAgICAgICAgICBHdGtXaWRnZXQgKmNoaWxkID0gdC0+ZGF0YTsKKworICAgICAgICAgICAgcmV0ID0gZ3RrX2RpYWxvZ19nZXRfcmVzcG9uc2VfZm9yX3dpZGdldChkbGcsIGNoaWxkKTsKKworICAgICAgICAgICAgaWYgKHJldCA9PSBHVEtfUkVTUE9OU0VfQUNDRVBUIHx8CisgICAgICAgICAgICAgICAgcmV0ID09IEdUS19SRVNQT05TRV9PSyB8fAorICAgICAgICAgICAgICAgIHJldCA9PSBHVEtfUkVTUE9OU0VfWUVTIHx8CisgICAgICAgICAgICAgICAgcmV0ID09IEdUS19SRVNQT05TRV9BUFBMWSkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgaWYgKHJldCAhPSBHVEtfUkVTUE9OU0VfTk9ORSAmJiBiYWQgPT0gR1RLX1JFU1BPTlNFX05PTkUpCisgICAgICAgICAgICAgICAgYmFkID0gcmV0OworCisgICAgICAgICAgICB0ID0gdC0+bmV4dDsKKyAgICAgICAgfQorCisgICAgICAgIGdfbGlzdF9mcmVlIChjaGlsZHJlbik7CisKKyAgICAgICAgLyogRmFsbCBiYWNrIHRvIGZpbmRpbmcgdGhlIGZpcnN0IG5lZ2F0aXZlIHJlc3BvbnNlICovCisgICAgICAgIGlmIChyZXQgPT0gR1RLX1JFU1BPTlNFX05PTkUpCisgICAgICAgICAgICByZXQgPSBiYWQ7CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KKworR19ERUZJTkVfVFlQRShBdWlTZXJ2aWNlRGlhbG9nLCBhdWlfc2VydmljZV9kaWFsb2csIEdUS19UWVBFX0RJQUxPRykKKworc3RhdGljIHZvaWQgYXVpX3NlcnZpY2VfZGlhbG9nX2NsYXNzX2luaXQoQXVpU2VydmljZURpYWxvZ0NsYXNzICprbGFzcykgeworICAgIEdPYmplY3RDbGFzcyAqb2JqZWN0X2NsYXNzOworCisgICAgYXZhaGlfaW5pdF9pMThuKCk7CisKKyAgICBvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzKikga2xhc3M7CisKKyAgICBvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gYXVpX3NlcnZpY2VfZGlhbG9nX2ZpbmFsaXplOworICAgIG9iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gYXVpX3NlcnZpY2VfZGlhbG9nX3NldF9wcm9wZXJ0eTsKKyAgICBvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGF1aV9zZXJ2aWNlX2RpYWxvZ19nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICAgICAgb2JqZWN0X2NsYXNzLAorICAgICAgICAgICAgUFJPUF9CUk9XU0VfU0VSVklDRV9UWVBFUywKKyAgICAgICAgICAgIGdfcGFyYW1fc3BlY19wb2ludGVyKCJicm93c2Vfc2VydmljZV90eXBlcyIsIF8oIkJyb3dzZSBTZXJ2aWNlIFR5cGVzIiksIF8oIkEgTlVMTCB0ZXJtaW5hdGVkIGxpc3Qgb2Ygc2VydmljZSB0eXBlcyB0byBicm93c2UgZm9yIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfUEFSQU1fUkVBREFCTEUgfCBHX1BBUkFNX1dSSVRBQkxFKSk7CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgICAgIG9iamVjdF9jbGFzcywKKyAgICAgICAgICAgIFBST1BfRE9NQUlOLAorICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygiZG9tYWluIiwgXygiRG9tYWluIiksIF8oIlRoZSBkb21haW4gdG8gYnJvd3NlIGluLCBvciBOVUxMIGZvciB0aGUgZGVmYXVsdCBkb21haW4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19QQVJBTV9SRUFEQUJMRSB8IEdfUEFSQU1fV1JJVEFCTEUpKTsKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICAgICAgb2JqZWN0X2NsYXNzLAorICAgICAgICAgICAgUFJPUF9TRVJWSUNFX1RZUEUsCisgICAgICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKCJzZXJ2aWNlX3R5cGUiLCBfKCJTZXJ2aWNlIFR5cGUiKSwgXygiVGhlIHNlcnZpY2UgdHlwZSBvZiB0aGUgc2VsZWN0ZWQgc2VydmljZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1BBUkFNX1JFQURBQkxFIHwgR19QQVJBTV9XUklUQUJMRSkpOworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgICAgICBvYmplY3RfY2xhc3MsCisgICAgICAgICAgICBQUk9QX1NFUlZJQ0VfTkFNRSwKKyAgICAgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoInNlcnZpY2VfbmFtZSIsIF8oIlNlcnZpY2UgTmFtZSIpLCBfKCJUaGUgc2VydmljZSBuYW1lIG9mIHRoZSBzZWxlY3RlZCBzZXJ2aWNlIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfUEFSQU1fUkVBREFCTEUgfCBHX1BBUkFNX1dSSVRBQkxFKSk7CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgICAgIG9iamVjdF9jbGFzcywKKyAgICAgICAgICAgIFBST1BfQUREUkVTUywKKyAgICAgICAgICAgIGdfcGFyYW1fc3BlY19wb2ludGVyKCJhZGRyZXNzIiwgXygiQWRkcmVzcyIpLCBfKCJUaGUgYWRkcmVzcyBvZiB0aGUgcmVzb2x2ZWQgc2VydmljZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1BBUkFNX1JFQURBQkxFKSk7CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgICAgIG9iamVjdF9jbGFzcywKKyAgICAgICAgICAgIFBST1BfUE9SVCwKKyAgICAgICAgICAgIGdfcGFyYW1fc3BlY191aW50KCJwb3J0IiwgXygiUG9ydCIpLCBfKCJUaGUgSVAgcG9ydCBudW1iZXIgb2YgdGhlIHJlc29sdmVkIHNlcnZpY2UiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMHhGRkZGLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1BBUkFNX1JFQURBQkxFKSk7CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgICAgIG9iamVjdF9jbGFzcywKKyAgICAgICAgICAgIFBST1BfSE9TVF9OQU1FLAorICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygiaG9zdF9uYW1lIiwgXygiSG9zdCBOYW1lIiksIF8oIlRoZSBob3N0IG5hbWUgb2YgdGhlIHJlc29sdmVkIHNlcnZpY2UiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19QQVJBTV9SRUFEQUJMRSkpOworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgICAgICBvYmplY3RfY2xhc3MsCisgICAgICAgICAgICBQUk9QX1RYVF9EQVRBLAorICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3BvaW50ZXIoInR4dF9kYXRhIiwgXygiVFhUIERhdGEiKSwgXygiVGhlIFRYVCBkYXRhIG9mIHRoZSByZXNvbHZlZCBzZXJ2aWNlIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfUEFSQU1fUkVBREFCTEUpKTsKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICAgICAgb2JqZWN0X2NsYXNzLAorICAgICAgICAgICAgUFJPUF9SRVNPTFZFX1NFUlZJQ0UsCisgICAgICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigicmVzb2x2ZV9zZXJ2aWNlIiwgXygiUmVzb2x2ZSBTZXJ2aWNlIiksIF8oIlJlc29sdmUgdGhlIHNlbGVjdGVkIHNlcnZpY2UgYXV0b21hdGljYWxseSBiZWZvcmUgcmV0dXJuaW5nIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19QQVJBTV9SRUFEQUJMRSB8IEdfUEFSQU1fV1JJVEFCTEUpKTsKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICAgICAgb2JqZWN0X2NsYXNzLAorICAgICAgICAgICAgUFJPUF9SRVNPTFZFX0hPU1RfTkFNRSwKKyAgICAgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKCJyZXNvbHZlX2hvc3RfbmFtZSIsIF8oIlJlc29sdmUgU2VydmljZSBIb3N0IE5hbWUiKSwgXygiUmVzb2x2ZSB0aGUgaG9zdCBuYW1lIG9mIHRoZSBzZWxlY3RlZCBzZXJ2aWNlIGF1dG9tYXRpY2FsbHkgYmVmb3JlIHJldHVybmluZyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfUEFSQU1fUkVBREFCTEUgfCBHX1BBUkFNX1dSSVRBQkxFKSk7CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgICAgIG9iamVjdF9jbGFzcywKKyAgICAgICAgICAgIFBST1BfQUREUkVTU19GQU1JTFksCisgICAgICAgICAgICBnX3BhcmFtX3NwZWNfaW50KCJhZGRyZXNzX2ZhbWlseSIsIF8oIkFkZHJlc3MgZmFtaWx5IiksIF8oIlRoZSBhZGRyZXNzIGZhbWlseSBmb3IgaG9zdCBuYW1lIHJlc29sdXRpb24iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZBSElfUFJPVE9fVU5TUEVDLCBBVkFISV9QUk9UT19JTkVUNiwgQVZBSElfUFJPVE9fVU5TUEVDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1BBUkFNX1JFQURBQkxFIHwgR19QQVJBTV9XUklUQUJMRSkpOworfQorCisKK0d0a1dpZGdldCAqYXVpX3NlcnZpY2VfZGlhbG9nX25ld192YWxpc3QoCisgICAgICAgIGNvbnN0IGdjaGFyICp0aXRsZSwKKyAgICAgICAgR3RrV2luZG93ICpwYXJlbnQsCisgICAgICAgIGNvbnN0IGdjaGFyICpmaXJzdF9idXR0b25fdGV4dCwKKyAgICAgICAgdmFfbGlzdCB2YXJhcmdzKSB7CisKKyAgICBjb25zdCBnY2hhciAqYnV0dG9uX3RleHQ7CisgICAgZ2ludCBkcjsKKworICAgIEd0a1dpZGdldCAqdyA9IChHdGtXaWRnZXQqKWdfb2JqZWN0X25ldygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVVJX1RZUEVfU0VSVklDRV9ESUFMT0csCisjaWYgIUdUS19DSEVDS19WRVJTSU9OICgyLDIxLDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXMtc2VwYXJhdG9yIiwgRkFMU0UsCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRpdGxlIiwgdGl0bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworCisgICAgaWYgKHBhcmVudCkKKyAgICAgICAgZ3RrX3dpbmRvd19zZXRfdHJhbnNpZW50X2ZvcihHVEtfV0lORE9XKHcpLCBwYXJlbnQpOworCisgICAgYnV0dG9uX3RleHQgPSBmaXJzdF9idXR0b25fdGV4dDsKKyAgICB3aGlsZSAoYnV0dG9uX3RleHQpIHsKKyAgICAgICAgZ2ludCByZXNwb25zZV9pZDsKKworICAgICAgICByZXNwb25zZV9pZCA9IHZhX2FyZyh2YXJhcmdzLCBnaW50KTsKKyAgICAgICAgZ3RrX2RpYWxvZ19hZGRfYnV0dG9uKEdUS19ESUFMT0codyksIGJ1dHRvbl90ZXh0LCByZXNwb25zZV9pZCk7CisgICAgICAgIGJ1dHRvbl90ZXh0ID0gdmFfYXJnKHZhcmFyZ3MsIGNvbnN0IGdjaGFyICopOworICAgIH0KKworICAgIGd0a19kaWFsb2dfc2V0X3Jlc3BvbnNlX3NlbnNpdGl2ZShHVEtfRElBTE9HKHcpLCBHVEtfUkVTUE9OU0VfQUNDRVBULCBGQUxTRSk7CisgICAgZ3RrX2RpYWxvZ19zZXRfcmVzcG9uc2Vfc2Vuc2l0aXZlKEdUS19ESUFMT0codyksIEdUS19SRVNQT05TRV9PSywgRkFMU0UpOworICAgIGd0a19kaWFsb2dfc2V0X3Jlc3BvbnNlX3NlbnNpdGl2ZShHVEtfRElBTE9HKHcpLCBHVEtfUkVTUE9OU0VfWUVTLCBGQUxTRSk7CisgICAgZ3RrX2RpYWxvZ19zZXRfcmVzcG9uc2Vfc2Vuc2l0aXZlKEdUS19ESUFMT0codyksIEdUS19SRVNQT05TRV9BUFBMWSwgRkFMU0UpOworCisgICAgaWYgKChkciA9IGdldF9kZWZhdWx0X3Jlc3BvbnNlKEdUS19ESUFMT0codykpKSAhPSBHVEtfUkVTUE9OU0VfTk9ORSkKKyAgICAgICAgZ3RrX2RpYWxvZ19zZXRfZGVmYXVsdF9yZXNwb25zZShHVEtfRElBTE9HKHcpLCBkcik7CisKKyAgICByZXR1cm4gdzsKK30KKworR3RrV2lkZ2V0KiBhdWlfc2VydmljZV9kaWFsb2dfbmV3KAorICAgICAgICBjb25zdCBnY2hhciAqdGl0bGUsCisgICAgICAgIEd0a1dpbmRvdyAqcGFyZW50LAorICAgICAgICBjb25zdCBnY2hhciAqZmlyc3RfYnV0dG9uX3RleHQsCisgICAgICAgIC4uLikgeworCisgICAgR3RrV2lkZ2V0ICp3OworCisgICAgdmFfbGlzdCB2YXJhcmdzOworICAgIHZhX3N0YXJ0KHZhcmFyZ3MsIGZpcnN0X2J1dHRvbl90ZXh0KTsKKyAgICB3ID0gYXVpX3NlcnZpY2VfZGlhbG9nX25ld192YWxpc3QodGl0bGUsIHBhcmVudCwgZmlyc3RfYnV0dG9uX3RleHQsIHZhcmFyZ3MpOworICAgIHZhX2VuZCh2YXJhcmdzKTsKKworICAgIHJldHVybiB3OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gc2VydmljZV9wdWxzZV9jYWxsYmFjayhncG9pbnRlciBkYXRhKSB7CisgICAgQXVpU2VydmljZURpYWxvZyAqZCA9IEFVSV9TRVJWSUNFX0RJQUxPRyhkYXRhKTsKKworICAgIGd0a19wcm9ncmVzc19iYXJfcHVsc2UoR1RLX1BST0dSRVNTX0JBUihkLT5wcml2LT5zZXJ2aWNlX3Byb2dyZXNzX2JhcikpOworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gZG9tYWluX3B1bHNlX2NhbGxiYWNrKGdwb2ludGVyIGRhdGEpIHsKKyAgICBBdWlTZXJ2aWNlRGlhbG9nICpkID0gQVVJX1NFUlZJQ0VfRElBTE9HKGRhdGEpOworCisgICAgZ3RrX3Byb2dyZXNzX2Jhcl9wdWxzZShHVEtfUFJPR1JFU1NfQkFSKGQtPnByaXYtPmRvbWFpbl9wcm9ncmVzc19iYXIpKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQgY2xpZW50X2NhbGxiYWNrKEF2YWhpQ2xpZW50ICpjLCBBdmFoaUNsaWVudFN0YXRlIHN0YXRlLCB2b2lkICp1c2VyZGF0YSkgeworICAgIEF1aVNlcnZpY2VEaWFsb2cgKmQgPSBBVUlfU0VSVklDRV9ESUFMT0codXNlcmRhdGEpOworCisgICAgaWYgKHN0YXRlID09IEFWQUhJX0NMSUVOVF9GQUlMVVJFKSB7CisgICAgICAgIEd0a1dpZGdldCAqbSA9IGd0a19tZXNzYWdlX2RpYWxvZ19uZXcoR1RLX1dJTkRPVyhkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfRElBTE9HX0RFU1RST1lfV0lUSF9QQVJFTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX01FU1NBR0VfRVJST1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX0JVVFRPTlNfQ0xPU0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiQXZhaGkgY2xpZW50IGZhaWx1cmU6ICVzIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaGlfc3RyZXJyb3IoYXZhaGlfY2xpZW50X2Vycm5vKGMpKSk7CisgICAgICAgIGd0a19kaWFsb2dfcnVuKEdUS19ESUFMT0cobSkpOworICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kobSk7CisKKyAgICAgICAgZ3RrX2RpYWxvZ19yZXNwb25zZShHVEtfRElBTE9HKGQpLCBHVEtfUkVTUE9OU0VfQ0FOQ0VMKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHJlc29sdmVfY2FsbGJhY2soCisgICAgICAgIEF2YWhpU2VydmljZVJlc29sdmVyICpyIEdfR05VQ19VTlVTRUQsCisgICAgICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UgR19HTlVDX1VOVVNFRCwKKyAgICAgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCBHX0dOVUNfVU5VU0VELAorICAgICAgICBBdmFoaVJlc29sdmVyRXZlbnQgZXZlbnQsCisgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCisgICAgICAgIGNvbnN0IGNoYXIgKnR5cGUsCisgICAgICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwKKyAgICAgICAgY29uc3QgY2hhciAqaG9zdF9uYW1lLAorICAgICAgICBjb25zdCBBdmFoaUFkZHJlc3MgKmEsCisgICAgICAgIHVpbnQxNl90IHBvcnQsCisgICAgICAgIEF2YWhpU3RyaW5nTGlzdCAqdHh0LAorICAgICAgICBBdmFoaUxvb2t1cFJlc3VsdEZsYWdzIGZsYWdzIEdfR05VQ19VTlVTRUQsCisgICAgICAgIHZvaWQgKnVzZXJkYXRhKSB7CisKKyAgICBBdWlTZXJ2aWNlRGlhbG9nICpkID0gQVVJX1NFUlZJQ0VfRElBTE9HKHVzZXJkYXRhKTsKKworICAgIHN3aXRjaCAoZXZlbnQpIHsKKyAgICAgICAgY2FzZSBBVkFISV9SRVNPTFZFUl9GT1VORDoKKworICAgICAgICAgICAgZC0+cHJpdi0+cmVzb2x2ZV9zZXJ2aWNlX2RvbmUgPSAxOworCisgICAgICAgICAgICBnX2ZyZWUoZC0+cHJpdi0+c2VydmljZV9uYW1lKTsKKyAgICAgICAgICAgIGQtPnByaXYtPnNlcnZpY2VfbmFtZSA9IGdfc3RyZHVwKG5hbWUpOworCisgICAgICAgICAgICBnX2ZyZWUoZC0+cHJpdi0+c2VydmljZV90eXBlKTsKKyAgICAgICAgICAgIGQtPnByaXYtPnNlcnZpY2VfdHlwZSA9IGdfc3RyZHVwKHR5cGUpOworCisgICAgICAgICAgICBnX2ZyZWUoZC0+cHJpdi0+ZG9tYWluKTsKKyAgICAgICAgICAgIGQtPnByaXYtPmRvbWFpbiA9IGdfc3RyZHVwKGRvbWFpbik7CisKKyAgICAgICAgICAgIGdfZnJlZShkLT5wcml2LT5ob3N0X25hbWUpOworICAgICAgICAgICAgZC0+cHJpdi0+aG9zdF9uYW1lID0gZ19zdHJkdXAoaG9zdF9uYW1lKTsKKworICAgICAgICAgICAgZC0+cHJpdi0+cG9ydCA9IHBvcnQ7CisKKyAgICAgICAgICAgIGF2YWhpX3N0cmluZ19saXN0X2ZyZWUoZC0+cHJpdi0+dHh0X2RhdGEpOworICAgICAgICAgICAgZC0+cHJpdi0+dHh0X2RhdGEgPSBhdmFoaV9zdHJpbmdfbGlzdF9jb3B5KHR4dCk7CisKKyAgICAgICAgICAgIGlmIChhKSB7CisgICAgICAgICAgICAgICAgZC0+cHJpdi0+cmVzb2x2ZV9ob3N0X25hbWVfZG9uZSA9IDE7CisgICAgICAgICAgICAgICAgZC0+cHJpdi0+YWRkcmVzcyA9ICphOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBndGtfZGlhbG9nX3Jlc3BvbnNlKEdUS19ESUFMT0coZCksIGQtPnByaXYtPmZvcndhcmRfcmVzcG9uc2VfaWQpOworCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFWQUhJX1JFU09MVkVSX0ZBSUxVUkU6IHsKKyAgICAgICAgICAgIEd0a1dpZGdldCAqbSA9IGd0a19tZXNzYWdlX2RpYWxvZ19uZXcoR1RLX1dJTkRPVyhkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX0RJQUxPR19ERVNUUk9ZX1dJVEhfUEFSRU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfTUVTU0FHRV9FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX0JVVFRPTlNfQ0xPU0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIkF2YWhpIHJlc29sdmVyIGZhaWx1cmU6ICVzIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWhpX3N0cmVycm9yKGF2YWhpX2NsaWVudF9lcnJubyhkLT5wcml2LT5jbGllbnQpKSk7CisgICAgICAgICAgICBndGtfZGlhbG9nX3J1bihHVEtfRElBTE9HKG0pKTsKKyAgICAgICAgICAgIGd0a193aWRnZXRfZGVzdHJveShtKTsKKworICAgICAgICAgICAgZ3RrX2RpYWxvZ19yZXNwb25zZShHVEtfRElBTE9HKGQpLCBHVEtfUkVTUE9OU0VfQ0FOQ0VMKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCisKK3N0YXRpYyB2b2lkIGJyb3dzZV9jYWxsYmFjaygKKyAgICAgICAgQXZhaGlTZXJ2aWNlQnJvd3NlciAqYiBHX0dOVUNfVU5VU0VELAorICAgICAgICBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLAorICAgICAgICBBdmFoaVByb3RvY29sIHByb3RvY29sLAorICAgICAgICBBdmFoaUJyb3dzZXJFdmVudCBldmVudCwKKyAgICAgICAgY29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgY29uc3QgY2hhciAqdHlwZSwKKyAgICAgICAgY29uc3QgY2hhciAqZG9tYWluLAorICAgICAgICBBVkFISV9HQ0NfVU5VU0VEIEF2YWhpTG9va3VwUmVzdWx0RmxhZ3MgZmxhZ3MsCisgICAgICAgIHZvaWQqIHVzZXJkYXRhKSB7CisKKyAgICBBdWlTZXJ2aWNlRGlhbG9nICpkID0gQVVJX1NFUlZJQ0VfRElBTE9HKHVzZXJkYXRhKTsKKworICAgIHN3aXRjaCAoZXZlbnQpIHsKKworICAgICAgICBjYXNlIEFWQUhJX0JST1dTRVJfTkVXOiB7CisgICAgICAgICAgICBnY2hhciAqaWZzOworICAgICAgICAgICAgY29uc3QgZ2NoYXIgKnByZXR0eV90eXBlID0gTlVMTDsKKyAgICAgICAgICAgIGNoYXIgaWZuYW1lW0lGTkFNU0laXTsKKyAgICAgICAgICAgIEd0a1RyZWVJdGVyIGl0ZXI7CisgICAgICAgICAgICBHdGtUcmVlU2VsZWN0aW9uICpzZWxlY3Rpb247CisKKyAgICAgICAgICAgIGlmICghKGlmX2luZGV4dG9uYW1lKGludGVyZmFjZSwgaWZuYW1lKSkpCisgICAgICAgICAgICAgICAgZ19zbnByaW50ZihpZm5hbWUsIHNpemVvZihpZm5hbWUpLCAiJWkiLCBpbnRlcmZhY2UpOworCisgICAgICAgICAgICBpZnMgPSBnX3N0cmR1cF9wcmludGYoIiVzICVzIiwgaWZuYW1lLCBwcm90b2NvbCA9PSBBVkFISV9QUk9UT19JTkVUID8gIklQdjQiIDogIklQdjYiKTsKKworICAgICAgICAgICAgaWYgKGQtPnByaXYtPnNlcnZpY2VfdHlwZV9uYW1lcykKKyAgICAgICAgICAgICAgICBwcmV0dHlfdHlwZSA9IGdfaGFzaF90YWJsZV9sb29rdXAgKGQtPnByaXYtPnNlcnZpY2VfdHlwZV9uYW1lcywgdHlwZSk7CisKKyAgICAgICAgICAgIGlmICghcHJldHR5X3R5cGUpIHsKKyNpZiBkZWZpbmVkKEhBVkVfR0RCTSkgfHwgZGVmaW5lZChIQVZFX0RCTSkKKyAgICAgICAgICAgICAgICBwcmV0dHlfdHlwZSA9IHN0ZGJfbG9va3VwKHR5cGUpOworI2Vsc2UKKyAgICAgICAgICAgICAgICBwcmV0dHlfdHlwZSA9IHR5cGU7CisjZW5kaWYKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ3RrX2xpc3Rfc3RvcmVfYXBwZW5kKGQtPnByaXYtPnNlcnZpY2VfbGlzdF9zdG9yZSwgJml0ZXIpOworCisgICAgICAgICAgICBndGtfbGlzdF9zdG9yZV9zZXQoZC0+cHJpdi0+c2VydmljZV9saXN0X3N0b3JlLCAmaXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVJWSUNFX0NPTFVNTl9JRkFDRSwgaW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFUlZJQ0VfQ09MVU1OX1BST1RPLCBwcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVJWSUNFX0NPTFVNTl9OQU1FLCBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFUlZJQ0VfQ09MVU1OX1RZUEUsIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VSVklDRV9DT0xVTU5fUFJFVFRZX0lGQUNFLCBpZnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VSVklDRV9DT0xVTU5fUFJFVFRZX1RZUEUsIHByZXR0eV90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xKTsKKworICAgICAgICAgICAgZ19mcmVlKGlmcyk7CisKKyAgICAgICAgICAgIGlmIChkLT5wcml2LT5jb21tb25fcHJvdG9jb2wgPT0gQVZBSElfUFJPVE9fVU5TUEVDKQorICAgICAgICAgICAgICAgIGQtPnByaXYtPmNvbW1vbl9wcm90b2NvbCA9IHByb3RvY29sOworCisgICAgICAgICAgICBpZiAoZC0+cHJpdi0+Y29tbW9uX2ludGVyZmFjZSA9PSBBVkFISV9JRl9VTlNQRUMpCisgICAgICAgICAgICAgICAgZC0+cHJpdi0+Y29tbW9uX2ludGVyZmFjZSA9IGludGVyZmFjZTsKKworICAgICAgICAgICAgaWYgKGQtPnByaXYtPmNvbW1vbl9pbnRlcmZhY2UgIT0gaW50ZXJmYWNlIHx8IGQtPnByaXYtPmNvbW1vbl9wcm90b2NvbCAhPSBwcm90b2NvbCkgeworICAgICAgICAgICAgICAgIGd0a190cmVlX3ZpZXdfY29sdW1uX3NldF92aXNpYmxlKGd0a190cmVlX3ZpZXdfZ2V0X2NvbHVtbihHVEtfVFJFRV9WSUVXKGQtPnByaXYtPnNlcnZpY2VfdHJlZV92aWV3KSwgMCksIFRSVUUpOworICAgICAgICAgICAgICAgIGd0a190cmVlX3ZpZXdfc2V0X2hlYWRlcnNfdmlzaWJsZShHVEtfVFJFRV9WSUVXKGQtPnByaXYtPnNlcnZpY2VfdHJlZV92aWV3KSwgVFJVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNlbGVjdGlvbiA9IGd0a190cmVlX3ZpZXdfZ2V0X3NlbGVjdGlvbihHVEtfVFJFRV9WSUVXKGQtPnByaXYtPnNlcnZpY2VfdHJlZV92aWV3KSk7CisgICAgICAgICAgICBpZiAoIWd0a190cmVlX3NlbGVjdGlvbl9nZXRfc2VsZWN0ZWQoc2VsZWN0aW9uLCBOVUxMLCBOVUxMKSkgeworCisgICAgICAgICAgICAgICAgaWYgKCFkLT5wcml2LT5zZXJ2aWNlX3R5cGUgfHwKKyAgICAgICAgICAgICAgICAgICAgIWQtPnByaXYtPnNlcnZpY2VfbmFtZSB8fAorICAgICAgICAgICAgICAgICAgICAoYXZhaGlfZG9tYWluX2VxdWFsKGQtPnByaXYtPnNlcnZpY2VfdHlwZSwgdHlwZSkgJiYgc3RyY2FzZWNtcChkLT5wcml2LT5zZXJ2aWNlX25hbWUsIG5hbWUpID09IDApKSB7CisgICAgICAgICAgICAgICAgICAgIEd0a1RyZWVQYXRoICpwYXRoOworCisgICAgICAgICAgICAgICAgICAgIGd0a190cmVlX3NlbGVjdGlvbl9zZWxlY3RfaXRlcihzZWxlY3Rpb24sICZpdGVyKTsKKworICAgICAgICAgICAgICAgICAgICBwYXRoID0gZ3RrX3RyZWVfbW9kZWxfZ2V0X3BhdGgoR1RLX1RSRUVfTU9ERUwoZC0+cHJpdi0+c2VydmljZV9saXN0X3N0b3JlKSwgJml0ZXIpOworICAgICAgICAgICAgICAgICAgICBndGtfdHJlZV92aWV3X3NldF9jdXJzb3IoR1RLX1RSRUVfVklFVyhkLT5wcml2LT5zZXJ2aWNlX3RyZWVfdmlldyksIHBhdGgsIE5VTEwsIEZBTFNFKTsKKyAgICAgICAgICAgICAgICAgICAgZ3RrX3RyZWVfcGF0aF9mcmVlKHBhdGgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgQVZBSElfQlJPV1NFUl9SRU1PVkU6IHsKKyAgICAgICAgICAgIEd0a1RyZWVJdGVyIGl0ZXI7CisgICAgICAgICAgICBnYm9vbGVhbiB2YWxpZDsKKworICAgICAgICAgICAgdmFsaWQgPSBndGtfdHJlZV9tb2RlbF9nZXRfaXRlcl9maXJzdChHVEtfVFJFRV9NT0RFTChkLT5wcml2LT5zZXJ2aWNlX2xpc3Rfc3RvcmUpLCAmaXRlcik7CisgICAgICAgICAgICB3aGlsZSAodmFsaWQpIHsKKyAgICAgICAgICAgICAgICBnaW50IF9pbnRlcmZhY2UsIF9wcm90b2NvbDsKKyAgICAgICAgICAgICAgICBnY2hhciAqX25hbWUsICpfdHlwZTsKKyAgICAgICAgICAgICAgICBnYm9vbGVhbiBmb3VuZDsKKworICAgICAgICAgICAgICAgIGd0a190cmVlX21vZGVsX2dldChHVEtfVFJFRV9NT0RFTChkLT5wcml2LT5zZXJ2aWNlX2xpc3Rfc3RvcmUpLCAmaXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VSVklDRV9DT0xVTU5fSUZBQ0UsICZfaW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVJWSUNFX0NPTFVNTl9QUk9UTywgJl9wcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VSVklDRV9DT0xVTU5fTkFNRSwgJl9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVJWSUNFX0NPTFVNTl9UWVBFLCAmX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xKTsKKworICAgICAgICAgICAgICAgIGZvdW5kID0gX2ludGVyZmFjZSA9PSBpbnRlcmZhY2UgJiYgX3Byb3RvY29sID09IHByb3RvY29sICYmIHN0cmNhc2VjbXAoX25hbWUsIG5hbWUpID09IDAgJiYgYXZhaGlfZG9tYWluX2VxdWFsKF90eXBlLCB0eXBlKTsKKyAgICAgICAgICAgICAgICBnX2ZyZWUoX25hbWUpOworCisgICAgICAgICAgICAgICAgaWYgKGZvdW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGd0a19saXN0X3N0b3JlX3JlbW92ZShkLT5wcml2LT5zZXJ2aWNlX2xpc3Rfc3RvcmUsICZpdGVyKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdmFsaWQgPSBndGtfdHJlZV9tb2RlbF9pdGVyX25leHQoR1RLX1RSRUVfTU9ERUwoZC0+cHJpdi0+c2VydmljZV9saXN0X3N0b3JlKSwgJml0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgQVZBSElfQlJPV1NFUl9GQUlMVVJFOiB7CisgICAgICAgICAgICBHdGtXaWRnZXQgKm0gPSBndGtfbWVzc2FnZV9kaWFsb2dfbmV3KEdUS19XSU5ET1coZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19ESUFMT0dfREVTVFJPWV9XSVRIX1BBUkVOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX01FU1NBR0VfRVJST1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19CVVRUT05TX0NMT1NFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJCcm93c2luZyBmb3Igc2VydmljZSB0eXBlICVzIGluIGRvbWFpbiAlcyBmYWlsZWQ6ICVzIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsIGRvbWFpbiA/IGRvbWFpbiA6IF8oIm4vYSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFoaV9zdHJlcnJvcihhdmFoaV9jbGllbnRfZXJybm8oZC0+cHJpdi0+Y2xpZW50KSkpOworICAgICAgICAgICAgZ3RrX2RpYWxvZ19ydW4oR1RLX0RJQUxPRyhtKSk7CisgICAgICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kobSk7CisKKyAgICAgICAgICAgIC8qIEZhbGwgdGhyb3VnaCAqLworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBBVkFISV9CUk9XU0VSX0FMTF9GT1JfTk9XOgorICAgICAgICAgICAgaWYgKGQtPnByaXYtPnNlcnZpY2VfcHVsc2VfdGltZW91dCA+IDApIHsKKyAgICAgICAgICAgICAgICBnX3NvdXJjZV9yZW1vdmUoZC0+cHJpdi0+c2VydmljZV9wdWxzZV90aW1lb3V0KTsKKyAgICAgICAgICAgICAgICBkLT5wcml2LT5zZXJ2aWNlX3B1bHNlX3RpbWVvdXQgPSAwOworICAgICAgICAgICAgICAgIGd0a193aWRnZXRfaGlkZShkLT5wcml2LT5zZXJ2aWNlX3Byb2dyZXNzX2Jhcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFWQUhJX0JST1dTRVJfQ0FDSEVfRVhIQVVTVEVEOgorICAgICAgICAgICAgOworICAgIH0KK30KKworc3RhdGljIHZvaWQgZG9tYWluX21ha2VfZGVmYXVsdF9zZWxlY3Rpb24oQXVpU2VydmljZURpYWxvZyAqZCwgY29uc3QgZ2NoYXIgKm5hbWUsIEd0a1RyZWVJdGVyICppdGVyKSB7CisgICAgR3RrVHJlZVNlbGVjdGlvbiAqc2VsZWN0aW9uOworCisgICAgc2VsZWN0aW9uID0gZ3RrX3RyZWVfdmlld19nZXRfc2VsZWN0aW9uKEdUS19UUkVFX1ZJRVcoZC0+cHJpdi0+ZG9tYWluX3RyZWVfdmlldykpOworICAgIGlmICghZ3RrX3RyZWVfc2VsZWN0aW9uX2dldF9zZWxlY3RlZChzZWxlY3Rpb24sIE5VTEwsIE5VTEwpKSB7CisKKyAgICAgICAgaWYgKGF2YWhpX2RvbWFpbl9lcXVhbChndGtfZW50cnlfZ2V0X3RleHQoR1RLX0VOVFJZKGQtPnByaXYtPmRvbWFpbl9lbnRyeSkpLCBuYW1lKSkgeworICAgICAgICAgICAgR3RrVHJlZVBhdGggKnBhdGg7CisKKyAgICAgICAgICAgIGd0a190cmVlX3NlbGVjdGlvbl9zZWxlY3RfaXRlcihzZWxlY3Rpb24sIGl0ZXIpOworCisgICAgICAgICAgICBwYXRoID0gZ3RrX3RyZWVfbW9kZWxfZ2V0X3BhdGgoR1RLX1RSRUVfTU9ERUwoZC0+cHJpdi0+ZG9tYWluX2xpc3Rfc3RvcmUpLCBpdGVyKTsKKyAgICAgICAgICAgIGd0a190cmVlX3ZpZXdfc2V0X2N1cnNvcihHVEtfVFJFRV9WSUVXKGQtPnByaXYtPmRvbWFpbl90cmVlX3ZpZXcpLCBwYXRoLCBOVUxMLCBGQUxTRSk7CisgICAgICAgICAgICBndGtfdHJlZV9wYXRoX2ZyZWUocGF0aCk7CisgICAgICAgIH0KKworICAgIH0KK30KKworc3RhdGljIHZvaWQgZG9tYWluX2Jyb3dzZV9jYWxsYmFjaygKKyAgICAgICAgQXZhaGlEb21haW5Ccm93c2VyICpiIEdfR05VQ19VTlVTRUQsCisgICAgICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UgR19HTlVDX1VOVVNFRCwKKyAgICAgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCBHX0dOVUNfVU5VU0VELAorICAgICAgICBBdmFoaUJyb3dzZXJFdmVudCBldmVudCwKKyAgICAgICAgY29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgQVZBSElfR0NDX1VOVVNFRCBBdmFoaUxvb2t1cFJlc3VsdEZsYWdzIGZsYWdzLAorICAgICAgICB2b2lkKiB1c2VyZGF0YSkgeworCisgICAgQXVpU2VydmljZURpYWxvZyAqZCA9IEFVSV9TRVJWSUNFX0RJQUxPRyh1c2VyZGF0YSk7CisKKyAgICBzd2l0Y2ggKGV2ZW50KSB7CisKKyAgICAgICAgY2FzZSBBVkFISV9CUk9XU0VSX05FVzogeworICAgICAgICAgICAgR3RrVHJlZUl0ZXIgaXRlcjsKKyAgICAgICAgICAgIGdib29sZWFuIGZvdW5kID0gRkFMU0UsIHZhbGlkOworICAgICAgICAgICAgZ2ludCByZWY7CisKKyAgICAgICAgICAgIHZhbGlkID0gZ3RrX3RyZWVfbW9kZWxfZ2V0X2l0ZXJfZmlyc3QoR1RLX1RSRUVfTU9ERUwoZC0+cHJpdi0+ZG9tYWluX2xpc3Rfc3RvcmUpLCAmaXRlcik7CisgICAgICAgICAgICB3aGlsZSAodmFsaWQpIHsKKyAgICAgICAgICAgICAgICBnY2hhciAqX25hbWU7CisKKyAgICAgICAgICAgICAgICBndGtfdHJlZV9tb2RlbF9nZXQoR1RLX1RSRUVfTU9ERUwoZC0+cHJpdi0+ZG9tYWluX2xpc3Rfc3RvcmUpLCAmaXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRE9NQUlOX0NPTFVNTl9OQU1FLCAmX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERPTUFJTl9DT0xVTU5fUkVGLCAmcmVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSk7CisKKyAgICAgICAgICAgICAgICBmb3VuZCA9IGF2YWhpX2RvbWFpbl9lcXVhbChfbmFtZSwgbmFtZSk7CisgICAgICAgICAgICAgICAgZ19mcmVlKF9uYW1lKTsKKworICAgICAgICAgICAgICAgIGlmIChmb3VuZCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICB2YWxpZCA9IGd0a190cmVlX21vZGVsX2l0ZXJfbmV4dChHVEtfVFJFRV9NT0RFTChkLT5wcml2LT5kb21haW5fbGlzdF9zdG9yZSksICZpdGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGZvdW5kKQorICAgICAgICAgICAgICAgIGd0a19saXN0X3N0b3JlX3NldChkLT5wcml2LT5kb21haW5fbGlzdF9zdG9yZSwgJml0ZXIsIERPTUFJTl9DT0xVTU5fUkVGLCByZWYgKyAxLCAtMSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBndGtfbGlzdF9zdG9yZV9hcHBlbmQoZC0+cHJpdi0+ZG9tYWluX2xpc3Rfc3RvcmUsICZpdGVyKTsKKworICAgICAgICAgICAgICAgIGd0a19saXN0X3N0b3JlX3NldChkLT5wcml2LT5kb21haW5fbGlzdF9zdG9yZSwgJml0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERPTUFJTl9DT0xVTU5fTkFNRSwgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRE9NQUlOX0NPTFVNTl9SRUYsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZG9tYWluX21ha2VfZGVmYXVsdF9zZWxlY3Rpb24oZCwgbmFtZSwgJml0ZXIpOworCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgQVZBSElfQlJPV1NFUl9SRU1PVkU6IHsKKyAgICAgICAgICAgIGdib29sZWFuIHZhbGlkOworICAgICAgICAgICAgR3RrVHJlZUl0ZXIgaXRlcjsKKworICAgICAgICAgICAgdmFsaWQgPSBndGtfdHJlZV9tb2RlbF9nZXRfaXRlcl9maXJzdChHVEtfVFJFRV9NT0RFTChkLT5wcml2LT5kb21haW5fbGlzdF9zdG9yZSksICZpdGVyKTsKKyAgICAgICAgICAgIHdoaWxlICh2YWxpZCkgeworICAgICAgICAgICAgICAgIGdpbnQgcmVmOworICAgICAgICAgICAgICAgIGdjaGFyICpfbmFtZTsKKyAgICAgICAgICAgICAgICBnYm9vbGVhbiBmb3VuZDsKKworICAgICAgICAgICAgICAgIGd0a190cmVlX21vZGVsX2dldChHVEtfVFJFRV9NT0RFTChkLT5wcml2LT5kb21haW5fbGlzdF9zdG9yZSksICZpdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBET01BSU5fQ09MVU1OX05BTUUsICZfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRE9NQUlOX0NPTFVNTl9SRUYsICZyZWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xKTsKKworICAgICAgICAgICAgICAgIGZvdW5kID0gYXZhaGlfZG9tYWluX2VxdWFsKF9uYW1lLCBuYW1lKTsKKyAgICAgICAgICAgICAgICBnX2ZyZWUoX25hbWUpOworCisgICAgICAgICAgICAgICAgaWYgKGZvdW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZWYgPD0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGd0a19saXN0X3N0b3JlX3JlbW92ZShkLT5wcml2LT5zZXJ2aWNlX2xpc3Rfc3RvcmUsICZpdGVyKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgZ3RrX2xpc3Rfc3RvcmVfc2V0KGQtPnByaXYtPmRvbWFpbl9saXN0X3N0b3JlLCAmaXRlciwgRE9NQUlOX0NPTFVNTl9SRUYsIHJlZiAtIDEsIC0xKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdmFsaWQgPSBndGtfdHJlZV9tb2RlbF9pdGVyX25leHQoR1RLX1RSRUVfTU9ERUwoZC0+cHJpdi0+ZG9tYWluX2xpc3Rfc3RvcmUpLCAmaXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKworICAgICAgICBjYXNlIEFWQUhJX0JST1dTRVJfRkFJTFVSRTogeworICAgICAgICAgICAgR3RrV2lkZ2V0ICptID0gZ3RrX21lc3NhZ2VfZGlhbG9nX25ldyhHVEtfV0lORE9XKGQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfRElBTE9HX0RFU1RST1lfV0lUSF9QQVJFTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19NRVNTQUdFX0VSUk9SLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfQlVUVE9OU19DTE9TRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiQXZhaGkgZG9tYWluIGJyb3dzZXIgZmFpbHVyZTogJXMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaGlfc3RyZXJyb3IoYXZhaGlfY2xpZW50X2Vycm5vKGQtPnByaXYtPmNsaWVudCkpKTsKKyAgICAgICAgICAgIGd0a19kaWFsb2dfcnVuKEdUS19ESUFMT0cobSkpOworICAgICAgICAgICAgZ3RrX3dpZGdldF9kZXN0cm95KG0pOworCisgICAgICAgICAgICAvKiBGYWxsIHRocm91Z2ggKi8KKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgQVZBSElfQlJPV1NFUl9BTExfRk9SX05PVzoKKyAgICAgICAgICAgIGlmIChkLT5wcml2LT5kb21haW5fcHVsc2VfdGltZW91dCA+IDApIHsKKyAgICAgICAgICAgICAgICBnX3NvdXJjZV9yZW1vdmUoZC0+cHJpdi0+ZG9tYWluX3B1bHNlX3RpbWVvdXQpOworICAgICAgICAgICAgICAgIGQtPnByaXYtPmRvbWFpbl9wdWxzZV90aW1lb3V0ID0gMDsKKyAgICAgICAgICAgICAgICBndGtfd2lkZ2V0X2hpZGUoZC0+cHJpdi0+ZG9tYWluX3Byb2dyZXNzX2Jhcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFWQUhJX0JST1dTRVJfQ0FDSEVfRVhIQVVTVEVEOgorICAgICAgICAgICAgOworICAgIH0KK30KKworc3RhdGljIGNvbnN0IGdjaGFyICpnZXRfZG9tYWluX25hbWUoQXVpU2VydmljZURpYWxvZyAqZCkgeworICAgIGNvbnN0IGdjaGFyICpkb21haW47CisKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChkLCBOVUxMKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChBVUlfSVNfU0VSVklDRV9ESUFMT0coZCksIE5VTEwpOworCisgICAgaWYgKGQtPnByaXYtPmRvbWFpbikKKyAgICAgICAgcmV0dXJuIGQtPnByaXYtPmRvbWFpbjsKKworICAgIGlmICghKGRvbWFpbiA9IGF2YWhpX2NsaWVudF9nZXRfZG9tYWluX25hbWUoZC0+cHJpdi0+Y2xpZW50KSkpIHsKKyAgICAgICAgR3RrV2lkZ2V0ICptID0gZ3RrX21lc3NhZ2VfZGlhbG9nX25ldyhHVEtfV0lORE9XKGQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19ESUFMT0dfREVTVFJPWV9XSVRIX1BBUkVOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfTUVTU0FHRV9FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfQlVUVE9OU19DTE9TRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJGYWlsZWQgdG8gcmVhZCBBdmFoaSBkb21haW46ICVzIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaGlfc3RyZXJyb3IoYXZhaGlfY2xpZW50X2Vycm5vKGQtPnByaXYtPmNsaWVudCkpKTsKKyAgICAgICAgZ3RrX2RpYWxvZ19ydW4oR1RLX0RJQUxPRyhtKSk7CisgICAgICAgIGd0a193aWRnZXRfZGVzdHJveShtKTsKKworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gZG9tYWluOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gc3RhcnRfY2FsbGJhY2soZ3BvaW50ZXIgZGF0YSkgeworICAgIGludCBlcnJvcjsKKyAgICBBdWlTZXJ2aWNlRGlhbG9nICpkID0gQVVJX1NFUlZJQ0VfRElBTE9HKGRhdGEpOworICAgIGdjaGFyICoqc3Q7CisgICAgQXZhaGlTZXJ2aWNlQnJvd3NlciAqKnNiOworICAgIHVuc2lnbmVkIGk7CisgICAgY29uc3QgY2hhciAqZG9tYWluOworCisgICAgZC0+cHJpdi0+c3RhcnRfaWRsZSA9IDA7CisKKyAgICBpZiAoIWQtPnByaXYtPmJyb3dzZV9zZXJ2aWNlX3R5cGVzIHx8ICEqZC0+cHJpdi0+YnJvd3NlX3NlcnZpY2VfdHlwZXMpIHsKKyAgICAgICAgZ193YXJuaW5nKF8oIkJyb3dzZSBzZXJ2aWNlIHR5cGUgbGlzdCBpcyBlbXB0eSEiKSk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICBpZiAoIWQtPnByaXYtPmNsaWVudCkgeworICAgICAgICBpZiAoIShkLT5wcml2LT5jbGllbnQgPSBhdmFoaV9jbGllbnRfbmV3KGF2YWhpX2dsaWJfcG9sbF9nZXQoZC0+cHJpdi0+Z2xpYl9wb2xsKSwgMCwgY2xpZW50X2NhbGxiYWNrLCBkLCAmZXJyb3IpKSkgeworCisgICAgICAgICAgICBHdGtXaWRnZXQgKm0gPSBndGtfbWVzc2FnZV9kaWFsb2dfbmV3KEdUS19XSU5ET1coZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19ESUFMT0dfREVTVFJPWV9XSVRIX1BBUkVOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX01FU1NBR0VfRVJST1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19CVVRUT05TX0NMT1NFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJGYWlsZWQgdG8gY29ubmVjdCB0byBBdmFoaSBzZXJ2ZXI6ICVzIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWhpX3N0cmVycm9yKGVycm9yKSk7CisgICAgICAgICAgICBndGtfZGlhbG9nX3J1bihHVEtfRElBTE9HKG0pKTsKKyAgICAgICAgICAgIGd0a193aWRnZXRfZGVzdHJveShtKTsKKworICAgICAgICAgICAgZ3RrX2RpYWxvZ19yZXNwb25zZShHVEtfRElBTE9HKGQpLCBHVEtfUkVTUE9OU0VfQ0FOQ0VMKTsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghKGRvbWFpbiA9IGdldF9kb21haW5fbmFtZShkKSkpIHsKKyAgICAgICAgZ3RrX2RpYWxvZ19yZXNwb25zZShHVEtfRElBTE9HKGQpLCBHVEtfUkVTUE9OU0VfQ0FOQ0VMKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIGdfYXNzZXJ0KGRvbWFpbik7CisKKyAgICBpZiAoYXZhaGlfZG9tYWluX2VxdWFsKGRvbWFpbiwgImxvY2FsLiIpKQorICAgICAgICBndGtfbGFiZWxfc2V0X21hcmt1cChHVEtfTEFCRUwoZC0+cHJpdi0+ZG9tYWluX2xhYmVsKSwgXygiQnJvd3NpbmcgZm9yIHNlcnZpY2VzIG9uIDxiPmxvY2FsIG5ldHdvcms8L2I+OiIpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgZ2NoYXIgKnQgPSBnX3N0cmR1cF9wcmludGYoXygiQnJvd3NpbmcgZm9yIHNlcnZpY2VzIGluIGRvbWFpbiA8Yj4lczwvYj46IiksIGRvbWFpbik7CisgICAgICAgIGd0a19sYWJlbF9zZXRfbWFya3VwKEdUS19MQUJFTChkLT5wcml2LT5kb21haW5fbGFiZWwpLCB0KTsKKyAgICAgICAgZ19mcmVlKHQpOworICAgIH0KKworICAgIGlmIChkLT5wcml2LT5icm93c2VycykgeworICAgICAgICBmb3IgKHNiID0gZC0+cHJpdi0+YnJvd3NlcnM7ICpzYjsgc2IrKykKKyAgICAgICAgICAgIGF2YWhpX3NlcnZpY2VfYnJvd3Nlcl9mcmVlKCpzYik7CisKKyAgICAgICAgZ19mcmVlKGQtPnByaXYtPmJyb3dzZXJzKTsKKyAgICAgICAgZC0+cHJpdi0+YnJvd3NlcnMgPSBOVUxMOworICAgIH0KKworICAgIGd0a19saXN0X3N0b3JlX2NsZWFyKEdUS19MSVNUX1NUT1JFKGQtPnByaXYtPnNlcnZpY2VfbGlzdF9zdG9yZSkpOworICAgIGQtPnByaXYtPmNvbW1vbl9pbnRlcmZhY2UgPSBBVkFISV9JRl9VTlNQRUM7CisgICAgZC0+cHJpdi0+Y29tbW9uX3Byb3RvY29sID0gQVZBSElfUFJPVE9fVU5TUEVDOworCisgICAgZ3RrX3RyZWVfdmlld19jb2x1bW5fc2V0X3Zpc2libGUoZ3RrX3RyZWVfdmlld19nZXRfY29sdW1uKEdUS19UUkVFX1ZJRVcoZC0+cHJpdi0+c2VydmljZV90cmVlX3ZpZXcpLCAwKSwgRkFMU0UpOworICAgIGd0a190cmVlX3ZpZXdfc2V0X2hlYWRlcnNfdmlzaWJsZShHVEtfVFJFRV9WSUVXKGQtPnByaXYtPnNlcnZpY2VfdHJlZV92aWV3KSwgRkFMU0UpOworICAgIGd0a193aWRnZXRfc2hvdyhkLT5wcml2LT5zZXJ2aWNlX3Byb2dyZXNzX2Jhcik7CisKKyAgICBpZiAoZC0+cHJpdi0+c2VydmljZV9wdWxzZV90aW1lb3V0IDw9IDApCisgICAgICAgIGQtPnByaXYtPnNlcnZpY2VfcHVsc2VfdGltZW91dCA9IGdfdGltZW91dF9hZGQoMTAwLCBzZXJ2aWNlX3B1bHNlX2NhbGxiYWNrLCBkKTsKKworICAgIGZvciAoaSA9IDA7IGQtPnByaXYtPmJyb3dzZV9zZXJ2aWNlX3R5cGVzW2ldOyBpKyspCisgICAgICAgIDsKKyAgICBnX2Fzc2VydChpID4gMCk7CisKKyAgICBkLT5wcml2LT5icm93c2VycyA9IGdfbmV3MChBdmFoaVNlcnZpY2VCcm93c2VyKiwgaSsxKTsKKyAgICBmb3IgKHN0ID0gZC0+cHJpdi0+YnJvd3NlX3NlcnZpY2VfdHlwZXMsIHNiID0gZC0+cHJpdi0+YnJvd3NlcnM7ICpzdDsgc3QrKywgc2IrKykgeworCisgICAgICAgIGlmICghKCpzYiA9IGF2YWhpX3NlcnZpY2VfYnJvd3Nlcl9uZXcoZC0+cHJpdi0+Y2xpZW50LCBBVkFISV9JRl9VTlNQRUMsIEFWQUhJX1BST1RPX1VOU1BFQywgKnN0LCBkLT5wcml2LT5kb21haW4sIDAsIGJyb3dzZV9jYWxsYmFjaywgZCkpKSB7CisgICAgICAgICAgICBHdGtXaWRnZXQgKm0gPSBndGtfbWVzc2FnZV9kaWFsb2dfbmV3KEdUS19XSU5ET1coZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19ESUFMT0dfREVTVFJPWV9XSVRIX1BBUkVOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX01FU1NBR0VfRVJST1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19CVVRUT05TX0NMT1NFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJGYWlsZWQgdG8gY3JlYXRlIGJyb3dzZXIgZm9yICVzOiAlcyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWhpX3N0cmVycm9yKGF2YWhpX2NsaWVudF9lcnJubyhkLT5wcml2LT5jbGllbnQpKSk7CisgICAgICAgICAgICBndGtfZGlhbG9nX3J1bihHVEtfRElBTE9HKG0pKTsKKyAgICAgICAgICAgIGd0a193aWRnZXRfZGVzdHJveShtKTsKKworICAgICAgICAgICAgZ3RrX2RpYWxvZ19yZXNwb25zZShHVEtfRElBTE9HKGQpLCBHVEtfUkVTUE9OU0VfQ0FOQ0VMKTsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZCBhdWlfc2VydmljZV9kaWFsb2dfZmluYWxpemUoR09iamVjdCAqb2JqZWN0KSB7CisgICAgQXVpU2VydmljZURpYWxvZyAqZCA9IEFVSV9TRVJWSUNFX0RJQUxPRyhvYmplY3QpOworCisgICAgaWYgKGQtPnByaXYtPmRvbWFpbl9wdWxzZV90aW1lb3V0ID4gMCkKKyAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKGQtPnByaXYtPmRvbWFpbl9wdWxzZV90aW1lb3V0KTsKKworICAgIGlmIChkLT5wcml2LT5zZXJ2aWNlX3B1bHNlX3RpbWVvdXQgPiAwKQorICAgICAgICBnX3NvdXJjZV9yZW1vdmUoZC0+cHJpdi0+c2VydmljZV9wdWxzZV90aW1lb3V0KTsKKworICAgIGlmIChkLT5wcml2LT5zdGFydF9pZGxlID4gMCkKKyAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKGQtPnByaXYtPnN0YXJ0X2lkbGUpOworCisgICAgZ19mcmVlKGQtPnByaXYtPmhvc3RfbmFtZSk7CisgICAgZ19mcmVlKGQtPnByaXYtPmRvbWFpbik7CisgICAgZ19mcmVlKGQtPnByaXYtPnNlcnZpY2VfbmFtZSk7CisKKyAgICBhdmFoaV9zdHJpbmdfbGlzdF9mcmVlKGQtPnByaXYtPnR4dF9kYXRhKTsKKworICAgIGdfc3RyZnJlZXYoZC0+cHJpdi0+YnJvd3NlX3NlcnZpY2VfdHlwZXMpOworCisgICAgaWYgKGQtPnByaXYtPmRvbWFpbl9icm93c2VyKQorICAgICAgICBhdmFoaV9kb21haW5fYnJvd3Nlcl9mcmVlKGQtPnByaXYtPmRvbWFpbl9icm93c2VyKTsKKworICAgIGlmIChkLT5wcml2LT5yZXNvbHZlcikKKyAgICAgICAgYXZhaGlfc2VydmljZV9yZXNvbHZlcl9mcmVlKGQtPnByaXYtPnJlc29sdmVyKTsKKworICAgIGlmIChkLT5wcml2LT5icm93c2VycykgeworICAgICAgICBBdmFoaVNlcnZpY2VCcm93c2VyICoqc2I7CisKKyAgICAgICAgZm9yIChzYiA9IGQtPnByaXYtPmJyb3dzZXJzOyAqc2I7IHNiKyspCisgICAgICAgICAgICBhdmFoaV9zZXJ2aWNlX2Jyb3dzZXJfZnJlZSgqc2IpOworCisgICAgICAgIGdfZnJlZShkLT5wcml2LT5icm93c2Vycyk7CisgICAgfQorCisgICAgaWYgKGQtPnByaXYtPmNsaWVudCkKKyAgICAgICAgYXZhaGlfY2xpZW50X2ZyZWUoZC0+cHJpdi0+Y2xpZW50KTsKKworICAgIGlmIChkLT5wcml2LT5nbGliX3BvbGwpCisgICAgICAgIGF2YWhpX2dsaWJfcG9sbF9mcmVlKGQtPnByaXYtPmdsaWJfcG9sbCk7CisKKyAgICBpZiAoZC0+cHJpdi0+c2VydmljZV9saXN0X3N0b3JlKQorICAgICAgICBnX29iamVjdF91bnJlZihkLT5wcml2LT5zZXJ2aWNlX2xpc3Rfc3RvcmUpOworICAgIGlmIChkLT5wcml2LT5kb21haW5fbGlzdF9zdG9yZSkKKyAgICAgICAgZ19vYmplY3RfdW5yZWYoZC0+cHJpdi0+ZG9tYWluX2xpc3Rfc3RvcmUpOworICAgIGlmIChkLT5wcml2LT5zZXJ2aWNlX3R5cGVfbmFtZXMpCisgICAgICAgIGdfaGFzaF90YWJsZV91bnJlZiAoZC0+cHJpdi0+c2VydmljZV90eXBlX25hbWVzKTsKKworICAgIGdfZnJlZShkLT5wcml2KTsKKyAgICBkLT5wcml2ID0gTlVMTDsKKworICAgIEdfT0JKRUNUX0NMQVNTKGF1aV9zZXJ2aWNlX2RpYWxvZ19wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCBzZXJ2aWNlX3Jvd19hY3RpdmF0ZWRfY2FsbGJhY2soR3RrVHJlZVZpZXcgKnRyZWVfdmlldyBHX0dOVUNfVU5VU0VELCBHdGtUcmVlUGF0aCAqcGF0aCBHX0dOVUNfVU5VU0VELCBHdGtUcmVlVmlld0NvbHVtbiAqY29sdW1uIEdfR05VQ19VTlVTRUQsIGdwb2ludGVyIHVzZXJfZGF0YSkgeworICAgIEF1aVNlcnZpY2VEaWFsb2cgKmQgPSBBVUlfU0VSVklDRV9ESUFMT0codXNlcl9kYXRhKTsKKworICAgIGd0a19kaWFsb2dfcmVzcG9uc2UoR1RLX0RJQUxPRyhkKSwgZ2V0X2RlZmF1bHRfcmVzcG9uc2UoR1RLX0RJQUxPRyhkKSkpOworfQorCitzdGF0aWMgdm9pZCBzZXJ2aWNlX3NlbGVjdGlvbl9jaGFuZ2VkX2NhbGxiYWNrKEd0a1RyZWVTZWxlY3Rpb24gKnNlbGVjdGlvbiwgZ3BvaW50ZXIgdXNlcl9kYXRhKSB7CisgICAgQXVpU2VydmljZURpYWxvZyAqZCA9IEFVSV9TRVJWSUNFX0RJQUxPRyh1c2VyX2RhdGEpOworICAgIGdib29sZWFuIGI7CisKKyAgICBiID0gZ3RrX3RyZWVfc2VsZWN0aW9uX2dldF9zZWxlY3RlZChzZWxlY3Rpb24sIE5VTEwsIE5VTEwpOworICAgIGd0a19kaWFsb2dfc2V0X3Jlc3BvbnNlX3NlbnNpdGl2ZShHVEtfRElBTE9HKGQpLCBHVEtfUkVTUE9OU0VfQUNDRVBULCBiKTsKKyAgICBndGtfZGlhbG9nX3NldF9yZXNwb25zZV9zZW5zaXRpdmUoR1RLX0RJQUxPRyhkKSwgR1RLX1JFU1BPTlNFX09LLCBiKTsKKyAgICBndGtfZGlhbG9nX3NldF9yZXNwb25zZV9zZW5zaXRpdmUoR1RLX0RJQUxPRyhkKSwgR1RLX1JFU1BPTlNFX1lFUywgYik7CisgICAgZ3RrX2RpYWxvZ19zZXRfcmVzcG9uc2Vfc2Vuc2l0aXZlKEdUS19ESUFMT0coZCksIEdUS19SRVNQT05TRV9BUFBMWSwgYik7Cit9CisKK3N0YXRpYyB2b2lkIHJlc3BvbnNlX2NhbGxiYWNrKEd0a0RpYWxvZyAqZGlhbG9nLCBnaW50IHJlc3BvbnNlLCBncG9pbnRlciB1c2VyX2RhdGEpIHsKKyAgICBBdWlTZXJ2aWNlRGlhbG9nICpkID0gQVVJX1NFUlZJQ0VfRElBTE9HKHVzZXJfZGF0YSk7CisKKyAgICBpZiAoKHJlc3BvbnNlID09IEdUS19SRVNQT05TRV9BQ0NFUFQgfHwKKyAgICAgICAgcmVzcG9uc2UgPT0gR1RLX1JFU1BPTlNFX09LIHx8CisgICAgICAgIHJlc3BvbnNlID09IEdUS19SRVNQT05TRV9ZRVMgfHwKKyAgICAgICAgcmVzcG9uc2UgPT0gR1RLX1JFU1BPTlNFX0FQUExZKSAmJgorICAgICAgICAoKGQtPnByaXYtPnJlc29sdmVfc2VydmljZSAmJiAhZC0+cHJpdi0+cmVzb2x2ZV9zZXJ2aWNlX2RvbmUpIHx8CisgICAgICAgICAoZC0+cHJpdi0+cmVzb2x2ZV9ob3N0X25hbWUgJiYgIWQtPnByaXYtPnJlc29sdmVfaG9zdF9uYW1lX2RvbmUpKSkgeworCisgICAgICAgIEd0a1RyZWVJdGVyIGl0ZXI7CisgICAgICAgIGdpbnQgaW50ZXJmYWNlLCBwcm90b2NvbDsKKyAgICAgICAgZ2NoYXIgKm5hbWUsICp0eXBlOworICAgICAgICBHZGtDdXJzb3IgKmN1cnNvcjsKKworICAgICAgICBnX3NpZ25hbF9zdG9wX2VtaXNzaW9uKGRpYWxvZywgZ19zaWduYWxfbG9va3VwKCJyZXNwb25zZSIsIGd0a19kaWFsb2dfZ2V0X3R5cGUoKSksIDApOworICAgICAgICBkLT5wcml2LT5mb3J3YXJkX3Jlc3BvbnNlX2lkID0gcmVzcG9uc2U7CisKKyAgICAgICAgaWYgKGQtPnByaXYtPnJlc29sdmVyKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwoZ3RrX3RyZWVfc2VsZWN0aW9uX2dldF9zZWxlY3RlZChndGtfdHJlZV92aWV3X2dldF9zZWxlY3Rpb24oR1RLX1RSRUVfVklFVyhkLT5wcml2LT5zZXJ2aWNlX3RyZWVfdmlldykpLCBOVUxMLCAmaXRlcikpOworCisgICAgICAgIGd0a190cmVlX21vZGVsX2dldChHVEtfVFJFRV9NT0RFTChkLT5wcml2LT5zZXJ2aWNlX2xpc3Rfc3RvcmUpLCAmaXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFUlZJQ0VfQ09MVU1OX0lGQUNFLCAmaW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VSVklDRV9DT0xVTU5fUFJPVE8sICZwcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFUlZJQ0VfQ09MVU1OX05BTUUsICZuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VSVklDRV9DT0xVTU5fVFlQRSwgJnR5cGUsIC0xKTsKKworICAgICAgICBnX3JldHVybl9pZl9mYWlsKGQtPnByaXYtPmNsaWVudCk7CisKKyAgICAgICAgZ3RrX3dpZGdldF9zZXRfc2Vuc2l0aXZlKEdUS19XSURHRVQoZGlhbG9nKSwgRkFMU0UpOworICAgICAgICBjdXJzb3IgPSBnZGtfY3Vyc29yX25ldyhHREtfV0FUQ0gpOworICAgICAgICBnZGtfd2luZG93X3NldF9jdXJzb3IoZ3RrX3dpZGdldF9nZXRfd2luZG93KEdUS19XSURHRVQoZGlhbG9nKSksIGN1cnNvcik7CisgICAgICAgIGdfb2JqZWN0X3VucmVmKEdfT0JKRUNUKGN1cnNvcikpOworCisgICAgICAgIGlmICghKGQtPnByaXYtPnJlc29sdmVyID0gYXZhaGlfc2VydmljZV9yZXNvbHZlcl9uZXcoCisgICAgICAgICAgICAgICAgICAgICAgZC0+cHJpdi0+Y2xpZW50LCBpbnRlcmZhY2UsIHByb3RvY29sLCBuYW1lLCB0eXBlLCBkLT5wcml2LT5kb21haW4sCisgICAgICAgICAgICAgICAgICAgICAgZC0+cHJpdi0+YWRkcmVzc19mYW1pbHksICFkLT5wcml2LT5yZXNvbHZlX2hvc3RfbmFtZSA/IEFWQUhJX0xPT0tVUF9OT19BRERSRVNTIDogMCwgcmVzb2x2ZV9jYWxsYmFjaywgZCkpKSB7CisKKyAgICAgICAgICAgIEd0a1dpZGdldCAqbSA9IGd0a19tZXNzYWdlX2RpYWxvZ19uZXcoR1RLX1dJTkRPVyhkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX0RJQUxPR19ERVNUUk9ZX1dJVEhfUEFSRU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfTUVTU0FHRV9FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX0JVVFRPTlNfQ0xPU0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIkZhaWxlZCB0byBjcmVhdGUgcmVzb2x2ZXIgZm9yICVzIG9mIHR5cGUgJXMgaW4gZG9tYWluICVzOiAlcyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLCB0eXBlLCBkLT5wcml2LT5kb21haW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWhpX3N0cmVycm9yKGF2YWhpX2NsaWVudF9lcnJubyhkLT5wcml2LT5jbGllbnQpKSk7CisgICAgICAgICAgICBndGtfZGlhbG9nX3J1bihHVEtfRElBTE9HKG0pKTsKKyAgICAgICAgICAgIGd0a193aWRnZXRfZGVzdHJveShtKTsKKworICAgICAgICAgICAgZ3RrX2RpYWxvZ19yZXNwb25zZShHVEtfRElBTE9HKGQpLCBHVEtfUkVTUE9OU0VfQ0FOQ0VMKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIGdib29sZWFuIGlzX3ZhbGlkX2RvbWFpbl9zdWZmaXgoY29uc3QgZ2NoYXIgKm4pIHsKKyAgICBnY2hhciBsYWJlbFtBVkFISV9MQUJFTF9NQVhdOworCisgICAgaWYgKCFhdmFoaV9pc192YWxpZF9kb21haW5fbmFtZShuKSkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgaWYgKCFhdmFoaV91bmVzY2FwZV9sYWJlbCgmbiwgbGFiZWwsIHNpemVvZihsYWJlbCkpKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICAvKiBBdCBsZWFzdCBvbmUgbGFiZWwgKi8KKworICAgIHJldHVybiAhIWxhYmVsWzBdOworfQorCitzdGF0aWMgdm9pZCBkb21haW5fcm93X2FjdGl2YXRlZF9jYWxsYmFjayhHdGtUcmVlVmlldyAqdHJlZV92aWV3IEdfR05VQ19VTlVTRUQsIEd0a1RyZWVQYXRoICpwYXRoIEdfR05VQ19VTlVTRUQsIEd0a1RyZWVWaWV3Q29sdW1uICpjb2x1bW4gR19HTlVDX1VOVVNFRCwgZ3BvaW50ZXIgdXNlcl9kYXRhKSB7CisgICAgQXVpU2VydmljZURpYWxvZyAqZCA9IEFVSV9TRVJWSUNFX0RJQUxPRyh1c2VyX2RhdGEpOworCisgICAgaWYgKGlzX3ZhbGlkX2RvbWFpbl9zdWZmaXgoZ3RrX2VudHJ5X2dldF90ZXh0KEdUS19FTlRSWShkLT5wcml2LT5kb21haW5fZW50cnkpKSkpCisgICAgICAgIGd0a19kaWFsb2dfcmVzcG9uc2UoR1RLX0RJQUxPRyhkLT5wcml2LT5kb21haW5fZGlhbG9nKSwgR1RLX1JFU1BPTlNFX0FDQ0VQVCk7Cit9CisKK3N0YXRpYyB2b2lkIGRvbWFpbl9zZWxlY3Rpb25fY2hhbmdlZF9jYWxsYmFjayhHdGtUcmVlU2VsZWN0aW9uICpzZWxlY3Rpb24gR19HTlVDX1VOVVNFRCwgZ3BvaW50ZXIgdXNlcl9kYXRhKSB7CisgICAgR3RrVHJlZUl0ZXIgaXRlcjsKKyAgICBBdWlTZXJ2aWNlRGlhbG9nICpkID0gQVVJX1NFUlZJQ0VfRElBTE9HKHVzZXJfZGF0YSk7CisgICAgZ2NoYXIgKm5hbWU7CisKKyAgICBnX3JldHVybl9pZl9mYWlsKGd0a190cmVlX3NlbGVjdGlvbl9nZXRfc2VsZWN0ZWQoZ3RrX3RyZWVfdmlld19nZXRfc2VsZWN0aW9uKEdUS19UUkVFX1ZJRVcoZC0+cHJpdi0+ZG9tYWluX3RyZWVfdmlldykpLCBOVUxMLCAmaXRlcikpOworCisgICAgZ3RrX3RyZWVfbW9kZWxfZ2V0KEdUS19UUkVFX01PREVMKGQtPnByaXYtPmRvbWFpbl9saXN0X3N0b3JlKSwgJml0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgIERPTUFJTl9DT0xVTU5fTkFNRSwgJm5hbWUsIC0xKTsKKworICAgIGd0a19lbnRyeV9zZXRfdGV4dChHVEtfRU5UUlkoZC0+cHJpdi0+ZG9tYWluX2VudHJ5KSwgbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIGRvbWFpbl9lbnRyeV9jaGFuZ2VkX2NhbGxiYWNrKEd0a0VkaXRhYmxlICplZGl0YWJsZSBHX0dOVUNfVU5VU0VELCBncG9pbnRlciB1c2VyX2RhdGEpIHsKKyAgICBBdWlTZXJ2aWNlRGlhbG9nICpkID0gQVVJX1NFUlZJQ0VfRElBTE9HKHVzZXJfZGF0YSk7CisKKyAgICBndGtfd2lkZ2V0X3NldF9zZW5zaXRpdmUoZC0+cHJpdi0+ZG9tYWluX29rX2J1dHRvbiwgaXNfdmFsaWRfZG9tYWluX3N1ZmZpeChndGtfZW50cnlfZ2V0X3RleHQoR1RLX0VOVFJZKGQtPnByaXYtPmRvbWFpbl9lbnRyeSkpKSk7Cit9CisKK3N0YXRpYyB2b2lkIGRvbWFpbl9idXR0b25fY2xpY2tlZChHdGtCdXR0b24gKmJ1dHRvbiBHX0dOVUNfVU5VU0VELCBncG9pbnRlciB1c2VyX2RhdGEpIHsKKyAgICBHdGtXaWRnZXQgKnZib3gsICp2Ym94MiwgKnNjcm9sbGVkX3dpbmRvdzsKKyAgICBHdGtUcmVlU2VsZWN0aW9uICpzZWxlY3Rpb247CisgICAgR3RrQ2VsbFJlbmRlcmVyICpyZW5kZXJlcjsKKyAgICBHdGtUcmVlVmlld0NvbHVtbiAqY29sdW1uOworICAgIEF1aVNlcnZpY2VEaWFsb2cgKmQgPSBBVUlfU0VSVklDRV9ESUFMT0codXNlcl9kYXRhKTsKKyAgICBBdWlTZXJ2aWNlRGlhbG9nUHJpdmF0ZSAqcCA9IGQtPnByaXY7CisgICAgY29uc3QgZ2NoYXIgKmRvbWFpbjsKKyAgICBHdGtUcmVlSXRlciBpdGVyOworCisgICAgZ19yZXR1cm5faWZfZmFpbCghcC0+ZG9tYWluX2RpYWxvZyk7CisgICAgZ19yZXR1cm5faWZfZmFpbCghcC0+ZG9tYWluX2Jyb3dzZXIpOworCisgICAgaWYgKCEoZG9tYWluID0gZ2V0X2RvbWFpbl9uYW1lKGQpKSkgeworICAgICAgICBndGtfZGlhbG9nX3Jlc3BvbnNlKEdUS19ESUFMT0coZCksIEdUS19SRVNQT05TRV9DQU5DRUwpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCEocC0+ZG9tYWluX2Jyb3dzZXIgPSBhdmFoaV9kb21haW5fYnJvd3Nlcl9uZXcocC0+Y2xpZW50LCBBVkFISV9JRl9VTlNQRUMsIEFWQUhJX1BST1RPX1VOU1BFQywgTlVMTCwgQVZBSElfRE9NQUlOX0JST1dTRVJfQlJPV1NFLCAwLCBkb21haW5fYnJvd3NlX2NhbGxiYWNrLCBkKSkpIHsKKyAgICAgICAgR3RrV2lkZ2V0ICptID0gZ3RrX21lc3NhZ2VfZGlhbG9nX25ldyhHVEtfV0lORE9XKGQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19ESUFMT0dfREVTVFJPWV9XSVRIX1BBUkVOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfTUVTU0FHRV9FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfQlVUVE9OU19DTE9TRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJGYWlsZWQgdG8gY3JlYXRlIGRvbWFpbiBicm93c2VyOiAlcyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWhpX3N0cmVycm9yKGF2YWhpX2NsaWVudF9lcnJubyhwLT5jbGllbnQpKSk7CisgICAgICAgIGd0a19kaWFsb2dfcnVuKEdUS19ESUFMT0cobSkpOworICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kobSk7CisKKyAgICAgICAgZ3RrX2RpYWxvZ19yZXNwb25zZShHVEtfRElBTE9HKGQpLCBHVEtfUkVTUE9OU0VfQ0FOQ0VMKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHAtPmRvbWFpbl9kaWFsb2cgPSBndGtfZGlhbG9nX25ldygpOworICAgIGd0a19jb250YWluZXJfc2V0X2JvcmRlcl93aWR0aChHVEtfQ09OVEFJTkVSKHAtPmRvbWFpbl9kaWFsb2cpLCA1KTsKKyAgICBndGtfd2luZG93X3NldF90aXRsZShHVEtfV0lORE9XKHAtPmRvbWFpbl9kaWFsb2cpLCBfKCJDaGFuZ2UgZG9tYWluIikpOworI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigyLDIxLDgpCisgICAgZ3RrX2RpYWxvZ19zZXRfaGFzX3NlcGFyYXRvcihHVEtfRElBTE9HKHAtPmRvbWFpbl9kaWFsb2cpLCBGQUxTRSk7CisjZW5kaWYKKworICAgIHZib3ggPSBndGtfdmJveF9uZXcoRkFMU0UsIDgpOworICAgIGd0a19jb250YWluZXJfc2V0X2JvcmRlcl93aWR0aChHVEtfQ09OVEFJTkVSKHZib3gpLCA4KTsKKyAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWChndGtfZGlhbG9nX2dldF9jb250ZW50X2FyZWEoR1RLX0RJQUxPRyhwLT5kb21haW5fZGlhbG9nKSkpLCB2Ym94LCBUUlVFLCBUUlVFLCAwKTsKKworICAgIHAtPmRvbWFpbl9lbnRyeSA9IGd0a19lbnRyeV9uZXcoKTsKKyAgICBndGtfZW50cnlfc2V0X21heF9sZW5ndGgoR1RLX0VOVFJZKHAtPmRvbWFpbl9lbnRyeSksIEFWQUhJX0RPTUFJTl9OQU1FX01BWCk7CisgICAgZ3RrX2VudHJ5X3NldF90ZXh0KEdUS19FTlRSWShwLT5kb21haW5fZW50cnkpLCBkb21haW4pOworICAgIGd0a19lbnRyeV9zZXRfYWN0aXZhdGVzX2RlZmF1bHQoR1RLX0VOVFJZKHAtPmRvbWFpbl9lbnRyeSksIFRSVUUpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QocC0+ZG9tYWluX2VudHJ5LCAiY2hhbmdlZCIsIEdfQ0FMTEJBQ0soZG9tYWluX2VudHJ5X2NoYW5nZWRfY2FsbGJhY2spLCBkKTsKKyAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgcC0+ZG9tYWluX2VudHJ5LCBGQUxTRSwgRkFMU0UsIDApOworCisgICAgdmJveDIgPSBndGtfdmJveF9uZXcoRkFMU0UsIDgpOworICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCB2Ym94MiwgVFJVRSwgVFJVRSwgMCk7CisKKyAgICBzY3JvbGxlZF93aW5kb3cgPSBndGtfc2Nyb2xsZWRfd2luZG93X25ldyhOVUxMLCBOVUxMKTsKKyAgICBndGtfc2Nyb2xsZWRfd2luZG93X3NldF9wb2xpY3koR1RLX1NDUk9MTEVEX1dJTkRPVyAoc2Nyb2xsZWRfd2luZG93KSwgR1RLX1BPTElDWV9BVVRPTUFUSUMsIEdUS19QT0xJQ1lfQVVUT01BVElDKTsKKyAgICBndGtfc2Nyb2xsZWRfd2luZG93X3NldF9zaGFkb3dfdHlwZShHVEtfU0NST0xMRURfV0lORE9XIChzY3JvbGxlZF93aW5kb3cpLCBHVEtfU0hBRE9XX0VUQ0hFRF9JTik7CisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveDIpLCBzY3JvbGxlZF93aW5kb3csIFRSVUUsIFRSVUUsIDApOworCisgICAgcC0+ZG9tYWluX2xpc3Rfc3RvcmUgPSBndGtfbGlzdF9zdG9yZV9uZXcoTl9ET01BSU5fQ09MVU1OUywgR19UWVBFX1NUUklORywgR19UWVBFX0lOVCk7CisKKyAgICBwLT5kb21haW5fdHJlZV92aWV3ID0gZ3RrX3RyZWVfdmlld19uZXdfd2l0aF9tb2RlbChHVEtfVFJFRV9NT0RFTChwLT5kb21haW5fbGlzdF9zdG9yZSkpOworICAgIGd0a190cmVlX3ZpZXdfc2V0X2hlYWRlcnNfdmlzaWJsZShHVEtfVFJFRV9WSUVXKHAtPmRvbWFpbl90cmVlX3ZpZXcpLCBGQUxTRSk7CisgICAgZ19zaWduYWxfY29ubmVjdChwLT5kb21haW5fdHJlZV92aWV3LCAicm93LWFjdGl2YXRlZCIsIEdfQ0FMTEJBQ0soZG9tYWluX3Jvd19hY3RpdmF0ZWRfY2FsbGJhY2spLCBkKTsKKyAgICBzZWxlY3Rpb24gPSBndGtfdHJlZV92aWV3X2dldF9zZWxlY3Rpb24oR1RLX1RSRUVfVklFVyhwLT5kb21haW5fdHJlZV92aWV3KSk7CisgICAgZ3RrX3RyZWVfc2VsZWN0aW9uX3NldF9tb2RlKHNlbGVjdGlvbiwgR1RLX1NFTEVDVElPTl9CUk9XU0UpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qoc2VsZWN0aW9uLCAiY2hhbmdlZCIsIEdfQ0FMTEJBQ0soZG9tYWluX3NlbGVjdGlvbl9jaGFuZ2VkX2NhbGxiYWNrKSwgZCk7CisKKyAgICByZW5kZXJlciA9IGd0a19jZWxsX3JlbmRlcmVyX3RleHRfbmV3KCk7CisgICAgY29sdW1uID0gZ3RrX3RyZWVfdmlld19jb2x1bW5fbmV3X3dpdGhfYXR0cmlidXRlcyhfKCJTZXJ2aWNlIE5hbWUiKSwgcmVuZGVyZXIsICJ0ZXh0IiwgRE9NQUlOX0NPTFVNTl9OQU1FLCBOVUxMKTsKKyAgICBndGtfdHJlZV92aWV3X2NvbHVtbl9zZXRfZXhwYW5kKGNvbHVtbiwgVFJVRSk7CisgICAgZ3RrX3RyZWVfdmlld19hcHBlbmRfY29sdW1uKEdUS19UUkVFX1ZJRVcocC0+ZG9tYWluX3RyZWVfdmlldyksIGNvbHVtbik7CisKKyAgICBndGtfdHJlZV92aWV3X3NldF9zZWFyY2hfY29sdW1uKEdUS19UUkVFX1ZJRVcocC0+ZG9tYWluX3RyZWVfdmlldyksIERPTUFJTl9DT0xVTU5fTkFNRSk7CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihzY3JvbGxlZF93aW5kb3cpLCBwLT5kb21haW5fdHJlZV92aWV3KTsKKworICAgIHAtPmRvbWFpbl9wcm9ncmVzc19iYXIgPSBndGtfcHJvZ3Jlc3NfYmFyX25ldygpOworICAgIGd0a19wcm9ncmVzc19iYXJfc2V0X3RleHQoR1RLX1BST0dSRVNTX0JBUihwLT5kb21haW5fcHJvZ3Jlc3NfYmFyKSwgXygiQnJvd3NpbmcuLi4iKSk7CisgICAgZ3RrX3Byb2dyZXNzX2Jhcl9zZXRfcHVsc2Vfc3RlcChHVEtfUFJPR1JFU1NfQkFSKHAtPmRvbWFpbl9wcm9ncmVzc19iYXIpLCAwLjEpOworICAgIGd0a19ib3hfcGFja19lbmQoR1RLX0JPWCh2Ym94MiksIHAtPmRvbWFpbl9wcm9ncmVzc19iYXIsIEZBTFNFLCBGQUxTRSwgMCk7CisKKyAgICBndGtfZGlhbG9nX2FkZF9idXR0b24oR1RLX0RJQUxPRyhwLT5kb21haW5fZGlhbG9nKSwgR1RLX1NUT0NLX0NBTkNFTCwgR1RLX1JFU1BPTlNFX0NBTkNFTCk7CisgICAgcC0+ZG9tYWluX29rX2J1dHRvbiA9IEdUS19XSURHRVQoZ3RrX2RpYWxvZ19hZGRfYnV0dG9uKEdUS19ESUFMT0cocC0+ZG9tYWluX2RpYWxvZyksIEdUS19TVE9DS19PSywgR1RLX1JFU1BPTlNFX0FDQ0VQVCkpOworICAgIGd0a19kaWFsb2dfc2V0X2RlZmF1bHRfcmVzcG9uc2UoR1RLX0RJQUxPRyhwLT5kb21haW5fZGlhbG9nKSwgR1RLX1JFU1BPTlNFX0FDQ0VQVCk7CisgICAgZ3RrX3dpZGdldF9zZXRfc2Vuc2l0aXZlKHAtPmRvbWFpbl9va19idXR0b24sIGlzX3ZhbGlkX2RvbWFpbl9zdWZmaXgoZ3RrX2VudHJ5X2dldF90ZXh0KEdUS19FTlRSWShwLT5kb21haW5fZW50cnkpKSkpOworCisgICAgZ3RrX3dpZGdldF9ncmFiX2RlZmF1bHQocC0+ZG9tYWluX29rX2J1dHRvbik7CisgICAgZ3RrX3dpZGdldF9ncmFiX2ZvY3VzKHAtPmRvbWFpbl9lbnRyeSk7CisKKyAgICBndGtfd2luZG93X3NldF9kZWZhdWx0X3NpemUoR1RLX1dJTkRPVyhwLT5kb21haW5fZGlhbG9nKSwgMzAwLCAzMDApOworCisgICAgZ3RrX3dpZGdldF9zaG93X2FsbCh2Ym94KTsKKworICAgIGd0a19saXN0X3N0b3JlX2FwcGVuZChwLT5kb21haW5fbGlzdF9zdG9yZSwgJml0ZXIpOworICAgIGd0a19saXN0X3N0b3JlX3NldChwLT5kb21haW5fbGlzdF9zdG9yZSwgJml0ZXIsIERPTUFJTl9DT0xVTU5fTkFNRSwgImxvY2FsIiwgRE9NQUlOX0NPTFVNTl9SRUYsIDEsIC0xKTsKKyAgICBkb21haW5fbWFrZV9kZWZhdWx0X3NlbGVjdGlvbihkLCAibG9jYWwiLCAmaXRlcik7CisKKyAgICBwLT5kb21haW5fcHVsc2VfdGltZW91dCA9IGdfdGltZW91dF9hZGQoMTAwLCBkb21haW5fcHVsc2VfY2FsbGJhY2ssIGQpOworCisgICAgaWYgKGd0a19kaWFsb2dfcnVuKEdUS19ESUFMT0cocC0+ZG9tYWluX2RpYWxvZykpID09IEdUS19SRVNQT05TRV9BQ0NFUFQpCisgICAgICAgIGF1aV9zZXJ2aWNlX2RpYWxvZ19zZXRfZG9tYWluKGQsIGd0a19lbnRyeV9nZXRfdGV4dChHVEtfRU5UUlkocC0+ZG9tYWluX2VudHJ5KSkpOworCisgICAgZ3RrX3dpZGdldF9kZXN0cm95KHAtPmRvbWFpbl9kaWFsb2cpOworICAgIHAtPmRvbWFpbl9kaWFsb2cgPSBOVUxMOworCisgICAgaWYgKHAtPmRvbWFpbl9wdWxzZV90aW1lb3V0ID4gMCkgeworICAgICAgICBnX3NvdXJjZV9yZW1vdmUocC0+ZG9tYWluX3B1bHNlX3RpbWVvdXQpOworICAgICAgICBwLT5kb21haW5fcHVsc2VfdGltZW91dCA9IDA7CisgICAgfQorCisgICAgYXZhaGlfZG9tYWluX2Jyb3dzZXJfZnJlZShwLT5kb21haW5fYnJvd3Nlcik7CisgICAgcC0+ZG9tYWluX2Jyb3dzZXIgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZCBhdWlfc2VydmljZV9kaWFsb2dfaW5pdChBdWlTZXJ2aWNlRGlhbG9nICpkKSB7CisgICAgR3RrV2lkZ2V0ICp2Ym94LCAqdmJveDIsICpzY3JvbGxlZF93aW5kb3c7CisgICAgR3RrQ2VsbFJlbmRlcmVyICpyZW5kZXJlcjsKKyAgICBHdGtUcmVlVmlld0NvbHVtbiAqY29sdW1uOworICAgIEd0a1RyZWVTZWxlY3Rpb24gKnNlbGVjdGlvbjsKKyAgICBBdWlTZXJ2aWNlRGlhbG9nUHJpdmF0ZSAqcDsKKworICAgIHAgPSBkLT5wcml2ID0gZ19uZXcoQXVpU2VydmljZURpYWxvZ1ByaXZhdGUsIDEpOworCisgICAgcC0+aG9zdF9uYW1lID0gTlVMTDsKKyAgICBwLT5kb21haW4gPSBOVUxMOworICAgIHAtPnNlcnZpY2VfbmFtZSA9IE5VTEw7CisgICAgcC0+c2VydmljZV90eXBlID0gTlVMTDsKKyAgICBwLT50eHRfZGF0YSA9IE5VTEw7CisgICAgcC0+YnJvd3NlX3NlcnZpY2VfdHlwZXMgPSBOVUxMOworICAgIG1lbXNldCgmcC0+YWRkcmVzcywgMCwgc2l6ZW9mKHAtPmFkZHJlc3MpKTsKKyAgICBwLT5wb3J0ID0gMDsKKyAgICBwLT5yZXNvbHZlX2hvc3RfbmFtZSA9IHAtPnJlc29sdmVfc2VydmljZSA9IFRSVUU7CisgICAgcC0+cmVzb2x2ZV9ob3N0X25hbWVfZG9uZSA9IHAtPnJlc29sdmVfc2VydmljZV9kb25lID0gRkFMU0U7CisgICAgcC0+YWRkcmVzc19mYW1pbHkgPSBBVkFISV9QUk9UT19VTlNQRUM7CisKKyAgICBwLT5nbGliX3BvbGwgPSBOVUxMOworICAgIHAtPmNsaWVudCA9IE5VTEw7CisgICAgcC0+YnJvd3NlcnMgPSBOVUxMOworICAgIHAtPnJlc29sdmVyID0gTlVMTDsKKyAgICBwLT5kb21haW5fYnJvd3NlciA9IE5VTEw7CisKKyAgICBwLT5zZXJ2aWNlX3B1bHNlX3RpbWVvdXQgPSAwOworICAgIHAtPmRvbWFpbl9wdWxzZV90aW1lb3V0ID0gMDsKKyAgICBwLT5zdGFydF9pZGxlID0gMDsKKyAgICBwLT5jb21tb25faW50ZXJmYWNlID0gQVZBSElfSUZfVU5TUEVDOworICAgIHAtPmNvbW1vbl9wcm90b2NvbCA9IEFWQUhJX1BST1RPX1VOU1BFQzsKKworICAgIHAtPmRvbWFpbl9kaWFsb2cgPSBOVUxMOworICAgIHAtPmRvbWFpbl9lbnRyeSA9IE5VTEw7CisgICAgcC0+ZG9tYWluX3RyZWVfdmlldyA9IE5VTEw7CisgICAgcC0+ZG9tYWluX3Byb2dyZXNzX2JhciA9IE5VTEw7CisgICAgcC0+ZG9tYWluX29rX2J1dHRvbiA9IE5VTEw7CisKKyAgICBwLT5mb3J3YXJkX3Jlc3BvbnNlX2lkID0gR1RLX1JFU1BPTlNFX05PTkU7CisKKyAgICBwLT5zZXJ2aWNlX2xpc3Rfc3RvcmUgPSBwLT5kb21haW5fbGlzdF9zdG9yZSA9IE5VTEw7CisgICAgcC0+c2VydmljZV90eXBlX25hbWVzID0gTlVMTDsKKworICAgIGd0a193aWRnZXRfcHVzaF9jb21wb3NpdGVfY2hpbGQoKTsKKworICAgIGd0a19jb250YWluZXJfc2V0X2JvcmRlcl93aWR0aChHVEtfQ09OVEFJTkVSKGQpLCA1KTsKKworICAgIHZib3ggPSBndGtfdmJveF9uZXcoRkFMU0UsIDgpOworICAgIGd0a19jb250YWluZXJfc2V0X2JvcmRlcl93aWR0aChHVEtfQ09OVEFJTkVSKHZib3gpLCA4KTsKKyAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWChndGtfZGlhbG9nX2dldF9jb250ZW50X2FyZWEoR1RLX0RJQUxPRyhkKSkpLCB2Ym94LCBUUlVFLCBUUlVFLCAwKTsKKworICAgIHAtPmRvbWFpbl9sYWJlbCA9IGd0a19sYWJlbF9uZXcoXygiSW5pdGlhbGl6aW5nLi4uIikpOworICAgIGd0a19sYWJlbF9zZXRfZWxsaXBzaXplKEdUS19MQUJFTChwLT5kb21haW5fbGFiZWwpLCBUUlVFKTsKKyAgICBndGtfbWlzY19zZXRfYWxpZ25tZW50KEdUS19NSVNDKHAtPmRvbWFpbl9sYWJlbCksIDAsIDAuNSk7CisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIHAtPmRvbWFpbl9sYWJlbCwgRkFMU0UsIEZBTFNFLCAwKTsKKworCisgICAgdmJveDIgPSBndGtfdmJveF9uZXcoRkFMU0UsIDgpOworICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCB2Ym94MiwgVFJVRSwgVFJVRSwgMCk7CisKKyAgICBzY3JvbGxlZF93aW5kb3cgPSBndGtfc2Nyb2xsZWRfd2luZG93X25ldyhOVUxMLCBOVUxMKTsKKyAgICBndGtfc2Nyb2xsZWRfd2luZG93X3NldF9wb2xpY3koR1RLX1NDUk9MTEVEX1dJTkRPVyAoc2Nyb2xsZWRfd2luZG93KSwgR1RLX1BPTElDWV9BVVRPTUFUSUMsIEdUS19QT0xJQ1lfQVVUT01BVElDKTsKKyAgICBndGtfc2Nyb2xsZWRfd2luZG93X3NldF9zaGFkb3dfdHlwZShHVEtfU0NST0xMRURfV0lORE9XIChzY3JvbGxlZF93aW5kb3cpLCBHVEtfU0hBRE9XX0VUQ0hFRF9JTik7CisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveDIpLCBzY3JvbGxlZF93aW5kb3csIFRSVUUsIFRSVUUsIDApOworCisgICAgcC0+c2VydmljZV9saXN0X3N0b3JlID0gZ3RrX2xpc3Rfc3RvcmVfbmV3KE5fU0VSVklDRV9DT0xVTU5TLCBHX1RZUEVfSU5ULCBHX1RZUEVfSU5ULCBHX1RZUEVfU1RSSU5HLCBHX1RZUEVfU1RSSU5HLCBHX1RZUEVfU1RSSU5HLCBHX1RZUEVfU1RSSU5HKTsKKworICAgIHAtPnNlcnZpY2VfdHJlZV92aWV3ID0gZ3RrX3RyZWVfdmlld19uZXdfd2l0aF9tb2RlbChHVEtfVFJFRV9NT0RFTChwLT5zZXJ2aWNlX2xpc3Rfc3RvcmUpKTsKKyAgICBndGtfdHJlZV92aWV3X3NldF9oZWFkZXJzX3Zpc2libGUoR1RLX1RSRUVfVklFVyhwLT5zZXJ2aWNlX3RyZWVfdmlldyksIEZBTFNFKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KHAtPnNlcnZpY2VfdHJlZV92aWV3LCAicm93LWFjdGl2YXRlZCIsIEdfQ0FMTEJBQ0soc2VydmljZV9yb3dfYWN0aXZhdGVkX2NhbGxiYWNrKSwgZCk7CisgICAgc2VsZWN0aW9uID0gZ3RrX3RyZWVfdmlld19nZXRfc2VsZWN0aW9uKEdUS19UUkVFX1ZJRVcocC0+c2VydmljZV90cmVlX3ZpZXcpKTsKKyAgICBndGtfdHJlZV9zZWxlY3Rpb25fc2V0X21vZGUoc2VsZWN0aW9uLCBHVEtfU0VMRUNUSU9OX0JST1dTRSk7CisgICAgZ19zaWduYWxfY29ubmVjdChzZWxlY3Rpb24sICJjaGFuZ2VkIiwgR19DQUxMQkFDSyhzZXJ2aWNlX3NlbGVjdGlvbl9jaGFuZ2VkX2NhbGxiYWNrKSwgZCk7CisKKyAgICByZW5kZXJlciA9IGd0a19jZWxsX3JlbmRlcmVyX3RleHRfbmV3KCk7CisgICAgY29sdW1uID0gZ3RrX3RyZWVfdmlld19jb2x1bW5fbmV3X3dpdGhfYXR0cmlidXRlcyhfKCJMb2NhdGlvbiIpLCByZW5kZXJlciwgInRleHQiLCBTRVJWSUNFX0NPTFVNTl9QUkVUVFlfSUZBQ0UsIE5VTEwpOworICAgIGd0a190cmVlX3ZpZXdfY29sdW1uX3NldF92aXNpYmxlKGNvbHVtbiwgRkFMU0UpOworICAgIGd0a190cmVlX3ZpZXdfYXBwZW5kX2NvbHVtbihHVEtfVFJFRV9WSUVXKHAtPnNlcnZpY2VfdHJlZV92aWV3KSwgY29sdW1uKTsKKworICAgIHJlbmRlcmVyID0gZ3RrX2NlbGxfcmVuZGVyZXJfdGV4dF9uZXcoKTsKKyAgICBjb2x1bW4gPSBndGtfdHJlZV92aWV3X2NvbHVtbl9uZXdfd2l0aF9hdHRyaWJ1dGVzKF8oIk5hbWUiKSwgcmVuZGVyZXIsICJ0ZXh0IiwgU0VSVklDRV9DT0xVTU5fTkFNRSwgTlVMTCk7CisgICAgZ3RrX3RyZWVfdmlld19jb2x1bW5fc2V0X2V4cGFuZChjb2x1bW4sIFRSVUUpOworICAgIGd0a190cmVlX3ZpZXdfYXBwZW5kX2NvbHVtbihHVEtfVFJFRV9WSUVXKHAtPnNlcnZpY2VfdHJlZV92aWV3KSwgY29sdW1uKTsKKworICAgIHJlbmRlcmVyID0gZ3RrX2NlbGxfcmVuZGVyZXJfdGV4dF9uZXcoKTsKKyAgICBjb2x1bW4gPSBndGtfdHJlZV92aWV3X2NvbHVtbl9uZXdfd2l0aF9hdHRyaWJ1dGVzKF8oIlR5cGUiKSwgcmVuZGVyZXIsICJ0ZXh0IiwgU0VSVklDRV9DT0xVTU5fUFJFVFRZX1RZUEUsIE5VTEwpOworICAgIGd0a190cmVlX3ZpZXdfY29sdW1uX3NldF92aXNpYmxlKGNvbHVtbiwgRkFMU0UpOworICAgIGd0a190cmVlX3ZpZXdfYXBwZW5kX2NvbHVtbihHVEtfVFJFRV9WSUVXKHAtPnNlcnZpY2VfdHJlZV92aWV3KSwgY29sdW1uKTsKKworICAgIGd0a190cmVlX3ZpZXdfc2V0X3NlYXJjaF9jb2x1bW4oR1RLX1RSRUVfVklFVyhwLT5zZXJ2aWNlX3RyZWVfdmlldyksIFNFUlZJQ0VfQ09MVU1OX05BTUUpOworICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIoc2Nyb2xsZWRfd2luZG93KSwgcC0+c2VydmljZV90cmVlX3ZpZXcpOworCisgICAgcC0+c2VydmljZV9wcm9ncmVzc19iYXIgPSBndGtfcHJvZ3Jlc3NfYmFyX25ldygpOworICAgIGd0a19wcm9ncmVzc19iYXJfc2V0X3RleHQoR1RLX1BST0dSRVNTX0JBUihwLT5zZXJ2aWNlX3Byb2dyZXNzX2JhciksIF8oIkJyb3dzaW5nLi4uIikpOworICAgIGd0a19wcm9ncmVzc19iYXJfc2V0X3B1bHNlX3N0ZXAoR1RLX1BST0dSRVNTX0JBUihwLT5zZXJ2aWNlX3Byb2dyZXNzX2JhciksIDAuMSk7CisgICAgZ3RrX2JveF9wYWNrX2VuZChHVEtfQk9YKHZib3gyKSwgcC0+c2VydmljZV9wcm9ncmVzc19iYXIsIEZBTFNFLCBGQUxTRSwgMCk7CisKKyAgICBwLT5kb21haW5fYnV0dG9uID0gZ3RrX2J1dHRvbl9uZXdfd2l0aF9tbmVtb25pYyhfKCJfRG9tYWluLi4uIikpOworICAgIGd0a19idXR0b25fc2V0X2ltYWdlKEdUS19CVVRUT04ocC0+ZG9tYWluX2J1dHRvbiksIGd0a19pbWFnZV9uZXdfZnJvbV9zdG9jayhHVEtfU1RPQ0tfTkVUV09SSywgR1RLX0lDT05fU0laRV9CVVRUT04pKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KHAtPmRvbWFpbl9idXR0b24sICJjbGlja2VkIiwgR19DQUxMQkFDSyhkb21haW5fYnV0dG9uX2NsaWNrZWQpLCBkKTsKKyAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWChndGtfZGlhbG9nX2dldF9hY3Rpb25fYXJlYShHVEtfRElBTE9HKGQpKSksIHAtPmRvbWFpbl9idXR0b24sIEZBTFNFLCBUUlVFLCAwKTsKKyAgICBndGtfYnV0dG9uX2JveF9zZXRfY2hpbGRfc2Vjb25kYXJ5KEdUS19CVVRUT05fQk9YKGd0a19kaWFsb2dfZ2V0X2FjdGlvbl9hcmVhKEdUS19ESUFMT0coZCkpKSwgcC0+ZG9tYWluX2J1dHRvbiwgVFJVRSk7CisgICAgZ3RrX3dpZGdldF9zaG93KHAtPmRvbWFpbl9idXR0b24pOworCisgICAgZ3RrX2RpYWxvZ19zZXRfZGVmYXVsdF9yZXNwb25zZShHVEtfRElBTE9HKGQpLCBHVEtfUkVTUE9OU0VfQUNDRVBUKTsKKworICAgIGd0a193aWRnZXRfZ3JhYl9mb2N1cyhwLT5zZXJ2aWNlX3RyZWVfdmlldyk7CisKKyAgICBndGtfd2luZG93X3NldF9kZWZhdWx0X3NpemUoR1RLX1dJTkRPVyhkKSwgNDAwLCAzMDApOworCisgICAgZ3RrX3dpZGdldF9zaG93X2FsbCh2Ym94KTsKKworICAgIGd0a193aWRnZXRfcG9wX2NvbXBvc2l0ZV9jaGlsZCgpOworCisgICAgcC0+Z2xpYl9wb2xsID0gYXZhaGlfZ2xpYl9wb2xsX25ldyhOVUxMLCBHX1BSSU9SSVRZX0RFRkFVTFQpOworCisgICAgcC0+c2VydmljZV9wdWxzZV90aW1lb3V0ID0gZ190aW1lb3V0X2FkZCgxMDAsIHNlcnZpY2VfcHVsc2VfY2FsbGJhY2ssIGQpOworICAgIHAtPnN0YXJ0X2lkbGUgPSBnX2lkbGVfYWRkKHN0YXJ0X2NhbGxiYWNrLCBkKTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3QoZCwgInJlc3BvbnNlIiwgR19DQUxMQkFDSyhyZXNwb25zZV9jYWxsYmFjayksIGQpOworfQorCitzdGF0aWMgdm9pZCByZXN0YXJ0X2Jyb3dzaW5nKEF1aVNlcnZpY2VEaWFsb2cgKmQpIHsKKyAgICBnX3JldHVybl9pZl9mYWlsKEFVSV9JU19TRVJWSUNFX0RJQUxPRyhkKSk7CisKKyAgICBpZiAoZC0+cHJpdi0+c3RhcnRfaWRsZSA8PSAwKQorICAgICAgICBkLT5wcml2LT5zdGFydF9pZGxlID0gZ19pZGxlX2FkZChzdGFydF9jYWxsYmFjaywgZCk7Cit9CisKK3ZvaWQgYXVpX3NlcnZpY2VfZGlhbG9nX3NldF9icm93c2Vfc2VydmljZV90eXBlcyhBdWlTZXJ2aWNlRGlhbG9nICpkLCBjb25zdCBjaGFyICp0eXBlLCAuLi4pIHsKKyAgICB2YV9saXN0IGFwOworICAgIGNvbnN0IGNoYXIgKnQ7CisgICAgdW5zaWduZWQgdTsKKworICAgIGdfcmV0dXJuX2lmX2ZhaWwoQVVJX0lTX1NFUlZJQ0VfRElBTE9HKGQpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHR5cGUpOworCisgICAgZ19zdHJmcmVldihkLT5wcml2LT5icm93c2Vfc2VydmljZV90eXBlcyk7CisKKyAgICB2YV9zdGFydChhcCwgdHlwZSk7CisgICAgZm9yICh1ID0gMTsgdmFfYXJnKGFwLCBjb25zdCBjaGFyICopOyB1KyspCisgICAgICAgIDsKKyAgICB2YV9lbmQoYXApOworCisgICAgZC0+cHJpdi0+YnJvd3NlX3NlcnZpY2VfdHlwZXMgPSBnX25ldzAoZ2NoYXIqLCB1KzEpOworICAgIGQtPnByaXYtPmJyb3dzZV9zZXJ2aWNlX3R5cGVzWzBdID0gZ19zdHJkdXAodHlwZSk7CisKKyAgICB2YV9zdGFydChhcCwgdHlwZSk7CisgICAgZm9yICh1ID0gMTsgKHQgPSB2YV9hcmcoYXAsIGNvbnN0IGNoYXIqKSk7IHUrKykKKyAgICAgICAgZC0+cHJpdi0+YnJvd3NlX3NlcnZpY2VfdHlwZXNbdV0gPSBnX3N0cmR1cCh0KTsKKyAgICB2YV9lbmQoYXApOworCisgICAgaWYgKGQtPnByaXYtPmJyb3dzZV9zZXJ2aWNlX3R5cGVzWzBdICYmIGQtPnByaXYtPmJyb3dzZV9zZXJ2aWNlX3R5cGVzWzFdKSB7CisgICAgICAgIC8qIE11bHRpcGxlIHNlcnZpY2UgdHlwZXMsIHNob3cgdHlwZS1jb2x1bW4gKi8KKyAgICAgICAgZ3RrX3RyZWVfdmlld19jb2x1bW5fc2V0X3Zpc2libGUoZ3RrX3RyZWVfdmlld19nZXRfY29sdW1uKEdUS19UUkVFX1ZJRVcoZC0+cHJpdi0+c2VydmljZV90cmVlX3ZpZXcpLCAyKSwgVFJVRSk7CisgICAgfQorCisgICAgcmVzdGFydF9icm93c2luZyhkKTsKK30KKwordm9pZCBhdWlfc2VydmljZV9kaWFsb2dfc2V0X2Jyb3dzZV9zZXJ2aWNlX3R5cGVzdihBdWlTZXJ2aWNlRGlhbG9nICpkLCBjb25zdCBjaGFyICpjb25zdCp0eXBlcykgeworCisgICAgZ19yZXR1cm5faWZfZmFpbChBVUlfSVNfU0VSVklDRV9ESUFMT0coZCkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodHlwZXMpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoKnR5cGVzKTsKKworICAgIGdfc3RyZnJlZXYoZC0+cHJpdi0+YnJvd3NlX3NlcnZpY2VfdHlwZXMpOworICAgIGQtPnByaXYtPmJyb3dzZV9zZXJ2aWNlX3R5cGVzID0gZ19zdHJkdXB2KChjaGFyKiopIHR5cGVzKTsKKworICAgIGlmIChkLT5wcml2LT5icm93c2Vfc2VydmljZV90eXBlc1swXSAmJiBkLT5wcml2LT5icm93c2Vfc2VydmljZV90eXBlc1sxXSkgeworICAgICAgICAvKiBNdWx0aXBsZSBzZXJ2aWNlIHR5cGVzLCBzaG93IHR5cGUtY29sdW1uICovCisgICAgICAgIGd0a190cmVlX3ZpZXdfY29sdW1uX3NldF92aXNpYmxlKGd0a190cmVlX3ZpZXdfZ2V0X2NvbHVtbihHVEtfVFJFRV9WSUVXKGQtPnByaXYtPnNlcnZpY2VfdHJlZV92aWV3KSwgMiksIFRSVUUpOworICAgIH0KKworICAgIHJlc3RhcnRfYnJvd3NpbmcoZCk7Cit9CisKK2NvbnN0IGdjaGFyKmNvbnN0KiBhdWlfc2VydmljZV9kaWFsb2dfZ2V0X2Jyb3dzZV9zZXJ2aWNlX3R5cGVzKEF1aVNlcnZpY2VEaWFsb2cgKmQpIHsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChBVUlfSVNfU0VSVklDRV9ESUFMT0coZCksIE5VTEwpOworCisgICAgcmV0dXJuIChjb25zdCBjaGFyKiBjb25zdCopIGQtPnByaXYtPmJyb3dzZV9zZXJ2aWNlX3R5cGVzOworfQorCit2b2lkIGF1aV9zZXJ2aWNlX2RpYWxvZ19zZXRfc2VydmljZV90eXBlX25hbWUoQXVpU2VydmljZURpYWxvZyAqZCwgY29uc3QgZ2NoYXIgKnR5cGUsIGNvbnN0IGdjaGFyICpuYW1lKSB7CisgICAgR3RrVHJlZU1vZGVsICptID0gTlVMTDsKKyAgICBHdGtUcmVlSXRlciBpdGVyOworCisgICAgZ19yZXR1cm5faWZfZmFpbChBVUlfSVNfU0VSVklDRV9ESUFMT0coZCkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoTlVMTCAhPSB0eXBlKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKE5VTEwgIT0gbmFtZSk7CisKKyAgICBpZiAoTlVMTCA9PSBkLT5wcml2LT5zZXJ2aWNlX3R5cGVfbmFtZXMpCisgICAgICAgIGQtPnByaXYtPnNlcnZpY2VfdHlwZV9uYW1lcyA9IGdfaGFzaF90YWJsZV9uZXdfZnVsbChnX3N0cl9oYXNoLCBnX3N0cl9lcXVhbCwgZ19mcmVlLCBnX2ZyZWUpOworCisgICAgZ19oYXNoX3RhYmxlX2luc2VydChkLT5wcml2LT5zZXJ2aWNlX3R5cGVfbmFtZXMsIGdfc3RyZHVwKHR5cGUpLCBnX3N0cmR1cChuYW1lKSk7CisKKyAgICBpZiAoZC0+cHJpdi0+c2VydmljZV9saXN0X3N0b3JlKQorICAgICAgICBtID0gR1RLX1RSRUVfTU9ERUwoZC0+cHJpdi0+c2VydmljZV9saXN0X3N0b3JlKTsKKworICAgIGlmIChtICYmIGd0a190cmVlX21vZGVsX2dldF9pdGVyX2ZpcnN0KG0sICZpdGVyKSkgeworICAgICAgICBkbyB7CisgICAgICAgICAgICBjaGFyICpzdG9yZWRfdHlwZSA9IE5VTEw7CisKKyAgICAgICAgICAgIGd0a190cmVlX21vZGVsX2dldChtLCAmaXRlciwgU0VSVklDRV9DT0xVTU5fVFlQRSwgJnN0b3JlZF90eXBlLCAtMSk7CisKKyAgICAgICAgICAgIGlmIChzdG9yZWRfdHlwZSAmJiBnX3N0cl9lcXVhbChzdG9yZWRfdHlwZSwgdHlwZSkpCisgICAgICAgICAgICAgICAgZ3RrX2xpc3Rfc3RvcmVfc2V0KGQtPnByaXYtPnNlcnZpY2VfbGlzdF9zdG9yZSwgJml0ZXIsIFNFUlZJQ0VfQ09MVU1OX1BSRVRUWV9UWVBFLCBuYW1lLCAtMSk7CisgICAgICAgIH0gd2hpbGUgKGd0a190cmVlX21vZGVsX2l0ZXJfbmV4dChtLCAmaXRlcikpOworICAgIH0KK30KKwordm9pZCBhdWlfc2VydmljZV9kaWFsb2dfc2V0X2RvbWFpbihBdWlTZXJ2aWNlRGlhbG9nICpkLCBjb25zdCBjaGFyICpkb21haW4pIHsKKyAgICBnX3JldHVybl9pZl9mYWlsKEFVSV9JU19TRVJWSUNFX0RJQUxPRyhkKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCghZG9tYWluIHx8IGlzX3ZhbGlkX2RvbWFpbl9zdWZmaXgoZG9tYWluKSk7CisKKyAgICBnX2ZyZWUoZC0+cHJpdi0+ZG9tYWluKTsKKyAgICBkLT5wcml2LT5kb21haW4gPSBkb21haW4gPyBhdmFoaV9ub3JtYWxpemVfbmFtZV9zdHJkdXAoZG9tYWluKSA6IE5VTEw7CisKKyAgICByZXN0YXJ0X2Jyb3dzaW5nKGQpOworfQorCitjb25zdCBjaGFyKiBhdWlfc2VydmljZV9kaWFsb2dfZ2V0X2RvbWFpbihBdWlTZXJ2aWNlRGlhbG9nICpkKSB7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoQVVJX0lTX1NFUlZJQ0VfRElBTE9HKGQpLCBOVUxMKTsKKworICAgIHJldHVybiBkLT5wcml2LT5kb21haW47Cit9CisKK3ZvaWQgYXVpX3NlcnZpY2VfZGlhbG9nX3NldF9zZXJ2aWNlX25hbWUoQXVpU2VydmljZURpYWxvZyAqZCwgY29uc3QgY2hhciAqbmFtZSkgeworICAgIGdfcmV0dXJuX2lmX2ZhaWwoQVVJX0lTX1NFUlZJQ0VfRElBTE9HKGQpKTsKKworICAgIGdfZnJlZShkLT5wcml2LT5zZXJ2aWNlX25hbWUpOworICAgIGQtPnByaXYtPnNlcnZpY2VfbmFtZSA9IGdfc3RyZHVwKG5hbWUpOworfQorCitjb25zdCBjaGFyKiBhdWlfc2VydmljZV9kaWFsb2dfZ2V0X3NlcnZpY2VfbmFtZShBdWlTZXJ2aWNlRGlhbG9nICpkKSB7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoQVVJX0lTX1NFUlZJQ0VfRElBTE9HKGQpLCBOVUxMKTsKKworICAgIHJldHVybiBkLT5wcml2LT5zZXJ2aWNlX25hbWU7Cit9CisKK3ZvaWQgYXVpX3NlcnZpY2VfZGlhbG9nX3NldF9zZXJ2aWNlX3R5cGUoQXVpU2VydmljZURpYWxvZyAqZCwgY29uc3QgY2hhcipzdHlwZSkgeworICAgIGdfcmV0dXJuX2lmX2ZhaWwoQVVJX0lTX1NFUlZJQ0VfRElBTE9HKGQpKTsKKworICAgIGdfZnJlZShkLT5wcml2LT5zZXJ2aWNlX3R5cGUpOworICAgIGQtPnByaXYtPnNlcnZpY2VfdHlwZSA9IGdfc3RyZHVwKHN0eXBlKTsKK30KKworY29uc3QgY2hhciogYXVpX3NlcnZpY2VfZGlhbG9nX2dldF9zZXJ2aWNlX3R5cGUoQXVpU2VydmljZURpYWxvZyAqZCkgeworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEFVSV9JU19TRVJWSUNFX0RJQUxPRyhkKSwgTlVMTCk7CisKKyAgICByZXR1cm4gZC0+cHJpdi0+c2VydmljZV90eXBlOworfQorCitjb25zdCBBdmFoaUFkZHJlc3MqIGF1aV9zZXJ2aWNlX2RpYWxvZ19nZXRfYWRkcmVzcyhBdWlTZXJ2aWNlRGlhbG9nICpkKSB7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoQVVJX0lTX1NFUlZJQ0VfRElBTE9HKGQpLCBOVUxMKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChkLT5wcml2LT5yZXNvbHZlX3NlcnZpY2VfZG9uZSAmJiBkLT5wcml2LT5yZXNvbHZlX2hvc3RfbmFtZV9kb25lLCBOVUxMKTsKKworICAgIHJldHVybiAmZC0+cHJpdi0+YWRkcmVzczsKK30KKworZ3VpbnQxNiBhdWlfc2VydmljZV9kaWFsb2dfZ2V0X3BvcnQoQXVpU2VydmljZURpYWxvZyAqZCkgeworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEFVSV9JU19TRVJWSUNFX0RJQUxPRyhkKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoZC0+cHJpdi0+cmVzb2x2ZV9zZXJ2aWNlX2RvbmUsIDApOworCisgICAgcmV0dXJuIGQtPnByaXYtPnBvcnQ7Cit9CisKK2NvbnN0IGNoYXIqIGF1aV9zZXJ2aWNlX2RpYWxvZ19nZXRfaG9zdF9uYW1lKEF1aVNlcnZpY2VEaWFsb2cgKmQpIHsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChBVUlfSVNfU0VSVklDRV9ESUFMT0coZCksIE5VTEwpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGQtPnByaXYtPnJlc29sdmVfc2VydmljZV9kb25lLCBOVUxMKTsKKworICAgIHJldHVybiBkLT5wcml2LT5ob3N0X25hbWU7Cit9CisKK2NvbnN0IEF2YWhpU3RyaW5nTGlzdCAqYXVpX3NlcnZpY2VfZGlhbG9nX2dldF90eHRfZGF0YShBdWlTZXJ2aWNlRGlhbG9nICpkKSB7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoQVVJX0lTX1NFUlZJQ0VfRElBTE9HKGQpLCBOVUxMKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChkLT5wcml2LT5yZXNvbHZlX3NlcnZpY2VfZG9uZSwgTlVMTCk7CisKKyAgICByZXR1cm4gZC0+cHJpdi0+dHh0X2RhdGE7Cit9CisKK3ZvaWQgYXVpX3NlcnZpY2VfZGlhbG9nX3NldF9yZXNvbHZlX3NlcnZpY2UoQXVpU2VydmljZURpYWxvZyAqZCwgZ2Jvb2xlYW4gcmVzb2x2ZSkgeworICAgIGdfcmV0dXJuX2lmX2ZhaWwoQVVJX0lTX1NFUlZJQ0VfRElBTE9HKGQpKTsKKworICAgIGQtPnByaXYtPnJlc29sdmVfc2VydmljZSA9IHJlc29sdmU7Cit9CisKK2dib29sZWFuIGF1aV9zZXJ2aWNlX2RpYWxvZ19nZXRfcmVzb2x2ZV9zZXJ2aWNlKEF1aVNlcnZpY2VEaWFsb2cgKmQpIHsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChBVUlfSVNfU0VSVklDRV9ESUFMT0coZCksIEZBTFNFKTsKKworICAgIHJldHVybiBkLT5wcml2LT5yZXNvbHZlX3NlcnZpY2U7Cit9CisKK3ZvaWQgYXVpX3NlcnZpY2VfZGlhbG9nX3NldF9yZXNvbHZlX2hvc3RfbmFtZShBdWlTZXJ2aWNlRGlhbG9nICpkLCBnYm9vbGVhbiByZXNvbHZlKSB7CisgICAgZ19yZXR1cm5faWZfZmFpbChBVUlfSVNfU0VSVklDRV9ESUFMT0coZCkpOworCisgICAgZC0+cHJpdi0+cmVzb2x2ZV9ob3N0X25hbWUgPSByZXNvbHZlOworfQorCitnYm9vbGVhbiBhdWlfc2VydmljZV9kaWFsb2dfZ2V0X3Jlc29sdmVfaG9zdF9uYW1lKEF1aVNlcnZpY2VEaWFsb2cgKmQpIHsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChBVUlfSVNfU0VSVklDRV9ESUFMT0coZCksIEZBTFNFKTsKKworICAgIHJldHVybiBkLT5wcml2LT5yZXNvbHZlX2hvc3RfbmFtZTsKK30KKwordm9pZCBhdWlfc2VydmljZV9kaWFsb2dfc2V0X2FkZHJlc3NfZmFtaWx5KEF1aVNlcnZpY2VEaWFsb2cgKmQsIEF2YWhpUHJvdG9jb2wgcHJvdG8pIHsKKyAgICBnX3JldHVybl9pZl9mYWlsKEFVSV9JU19TRVJWSUNFX0RJQUxPRyhkKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChwcm90byA9PSBBVkFISV9QUk9UT19VTlNQRUMgfHwgcHJvdG8gPT0gQVZBSElfUFJPVE9fSU5FVCB8fCBwcm90byA9PSBBVkFISV9QUk9UT19JTkVUNik7CisKKyAgICBkLT5wcml2LT5hZGRyZXNzX2ZhbWlseSA9IHByb3RvOworfQorCitBdmFoaVByb3RvY29sIGF1aV9zZXJ2aWNlX2RpYWxvZ19nZXRfYWRkcmVzc19mYW1pbHkoQXVpU2VydmljZURpYWxvZyAqZCkgeworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEFVSV9JU19TRVJWSUNFX0RJQUxPRyhkKSwgQVZBSElfUFJPVE9fVU5TUEVDKTsKKworICAgIHJldHVybiBkLT5wcml2LT5hZGRyZXNzX2ZhbWlseTsKK30KKworc3RhdGljIHZvaWQgYXVpX3NlcnZpY2VfZGlhbG9nX3NldF9wcm9wZXJ0eShHT2JqZWN0ICpvYmplY3QsIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSAqdmFsdWUsIEdQYXJhbVNwZWMgKnBzcGVjKSB7CisgICAgQXVpU2VydmljZURpYWxvZyAqZCA9IEFVSV9TRVJWSUNFX0RJQUxPRyhvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wX2lkKSB7CisgICAgICAgIGNhc2UgUFJPUF9CUk9XU0VfU0VSVklDRV9UWVBFUzoKKyAgICAgICAgICAgIGF1aV9zZXJ2aWNlX2RpYWxvZ19zZXRfYnJvd3NlX3NlcnZpY2VfdHlwZXN2KGQsIGdfdmFsdWVfZ2V0X3BvaW50ZXIodmFsdWUpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgUFJPUF9ET01BSU46CisgICAgICAgICAgICBhdWlfc2VydmljZV9kaWFsb2dfc2V0X2RvbWFpbihkLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgUFJPUF9TRVJWSUNFX1RZUEU6CisgICAgICAgICAgICBhdWlfc2VydmljZV9kaWFsb2dfc2V0X3NlcnZpY2VfdHlwZShkLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgUFJPUF9TRVJWSUNFX05BTUU6CisgICAgICAgICAgICBhdWlfc2VydmljZV9kaWFsb2dfc2V0X3NlcnZpY2VfbmFtZShkLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgUFJPUF9SRVNPTFZFX1NFUlZJQ0U6CisgICAgICAgICAgICBhdWlfc2VydmljZV9kaWFsb2dfc2V0X3Jlc29sdmVfc2VydmljZShkLCBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFBST1BfUkVTT0xWRV9IT1NUX05BTUU6CisgICAgICAgICAgICBhdWlfc2VydmljZV9kaWFsb2dfc2V0X3Jlc29sdmVfaG9zdF9uYW1lKGQsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgUFJPUF9BRERSRVNTX0ZBTUlMWToKKyAgICAgICAgICAgIGF1aV9zZXJ2aWNlX2RpYWxvZ19zZXRfYWRkcmVzc19mYW1pbHkoZCwgZ192YWx1ZV9nZXRfaW50KHZhbHVlKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBhdWlfc2VydmljZV9kaWFsb2dfZ2V0X3Byb3BlcnR5KEdPYmplY3QgKm9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlICp2YWx1ZSwgR1BhcmFtU3BlYyAqcHNwZWMpIHsKKyAgICBBdWlTZXJ2aWNlRGlhbG9nICpkID0gQVVJX1NFUlZJQ0VfRElBTE9HKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAgICAgICAgY2FzZSBQUk9QX0JST1dTRV9TRVJWSUNFX1RZUEVTOgorICAgICAgICAgICAgZ192YWx1ZV9zZXRfcG9pbnRlcih2YWx1ZSwgKGdwb2ludGVyKSBhdWlfc2VydmljZV9kaWFsb2dfZ2V0X2Jyb3dzZV9zZXJ2aWNlX3R5cGVzKGQpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgUFJPUF9ET01BSU46CisgICAgICAgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcodmFsdWUsIGF1aV9zZXJ2aWNlX2RpYWxvZ19nZXRfZG9tYWluKGQpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgUFJPUF9TRVJWSUNFX1RZUEU6CisgICAgICAgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcodmFsdWUsIGF1aV9zZXJ2aWNlX2RpYWxvZ19nZXRfc2VydmljZV90eXBlKGQpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgUFJPUF9TRVJWSUNFX05BTUU6CisgICAgICAgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcodmFsdWUsIGF1aV9zZXJ2aWNlX2RpYWxvZ19nZXRfc2VydmljZV9uYW1lKGQpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgUFJPUF9BRERSRVNTOgorICAgICAgICAgICAgZ192YWx1ZV9zZXRfcG9pbnRlcih2YWx1ZSwgKGdwb2ludGVyKSBhdWlfc2VydmljZV9kaWFsb2dfZ2V0X2FkZHJlc3MoZCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBQUk9QX1BPUlQ6CisgICAgICAgICAgICBnX3ZhbHVlX3NldF91aW50KHZhbHVlLCBhdWlfc2VydmljZV9kaWFsb2dfZ2V0X3BvcnQoZCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBQUk9QX0hPU1RfTkFNRToKKyAgICAgICAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyh2YWx1ZSwgYXVpX3NlcnZpY2VfZGlhbG9nX2dldF9ob3N0X25hbWUoZCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBQUk9QX1RYVF9EQVRBOgorICAgICAgICAgICAgZ192YWx1ZV9zZXRfcG9pbnRlcih2YWx1ZSwgKGdwb2ludGVyKSBhdWlfc2VydmljZV9kaWFsb2dfZ2V0X3R4dF9kYXRhKGQpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgUFJPUF9SRVNPTFZFX1NFUlZJQ0U6CisgICAgICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCBhdWlfc2VydmljZV9kaWFsb2dfZ2V0X3Jlc29sdmVfc2VydmljZShkKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFBST1BfUkVTT0xWRV9IT1NUX05BTUU6CisgICAgICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCBhdWlfc2VydmljZV9kaWFsb2dfZ2V0X3Jlc29sdmVfaG9zdF9uYW1lKGQpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgUFJPUF9BRERSRVNTX0ZBTUlMWToKKyAgICAgICAgICAgIGdfdmFsdWVfc2V0X2ludCh2YWx1ZSwgYXVpX3NlcnZpY2VfZGlhbG9nX2dldF9hZGRyZXNzX2ZhbWlseShkKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLXVpL2F2YWhpLXVpLmggYi9hdmFoaS0wLjYuMzEvYXZhaGktdWkvYXZhaGktdWkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWU2MWRjCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLXVpL2F2YWhpLXVpLmgKQEAgLTAsMCArMSwxODEgQEAKKyNpZm5kZWYgZm9vYXZhaGl1aWhmb28KKyNkZWZpbmUgZm9vYXZhaGl1aWhmb28KKworLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorCisjaW5jbHVkZSA8YXZhaGktY2xpZW50L2NsaWVudC5oPgorCisvKiogXGZpbGUgYXZhaGktdWkuaCBBIEd0ayBkaWFsb2cgZm9yIGJyb3dzaW5nIGZvciBzZXJ2aWNlcyAqLworCitHX0JFR0lOX0RFQ0xTCisKKyNpZm5kZWYgRE9YWUdFTl9TSE9VTERfU0tJUF9USElTCisKKyNkZWZpbmUgQVVJX1RZUEVfU0VSVklDRV9ESUFMT0cgICAgICAgICAgICAoYXVpX3NlcnZpY2VfZGlhbG9nX2dldF90eXBlKCkpCisjZGVmaW5lIEFVSV9TRVJWSUNFX0RJQUxPRyhvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBBVUlfVFlQRV9TRVJWSUNFX0RJQUxPRywgQXVpU2VydmljZURpYWxvZykpCisjZGVmaW5lIEFVSV9TRVJWSUNFX0RJQUxPR19DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksIEFVSV9UWVBFX1NFUlZJQ0VfRElBTE9HLCBBdWlTZXJ2aWNlRGlhbG9nQ2xhc3MpKQorI2RlZmluZSBBVUlfSVNfU0VSVklDRV9ESUFMT0cob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgQVVJX1RZUEVfU0VSVklDRV9ESUFMT0cpKQorI2RlZmluZSBBVUlfSVNfU0VSVklDRV9ESUFMT0dfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCBBVUlfVFlQRV9TRVJWSUNFX0RJQUxPRykpCisjZGVmaW5lIEFVSV9TRVJWSUNFX0RJQUxPR19HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksIEFVSV9UWVBFX1NFUlZJQ0VfRElBTE9HLCBBdWlTZXJ2aWNlRGlhbG9nQ2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfQXVpU2VydmljZURpYWxvZ1ByaXZhdGUgQXVpU2VydmljZURpYWxvZ1ByaXZhdGU7Cit0eXBlZGVmIHN0cnVjdCBfQXVpU2VydmljZURpYWxvZ0NsYXNzICBBdWlTZXJ2aWNlRGlhbG9nQ2xhc3M7CisKK3N0cnVjdCBfQXVpU2VydmljZURpYWxvZ0NsYXNzIHsKKyAgICBHdGtEaWFsb2dDbGFzcyBwYXJlbnRfY2xhc3M7CisKKyAgICAvKiBQYWRkaW5nIGZvciBmdXR1cmUgZXhwYW5zaW9uICovCisgICAgdm9pZCAoKl9hdWlfcmVzZXJ2ZWQxKSh2b2lkKTsKKyAgICB2b2lkICgqX2F1aV9yZXNlcnZlZDIpKHZvaWQpOworICAgIHZvaWQgKCpfYXVpX3Jlc2VydmVkMykodm9pZCk7CisgICAgdm9pZCAoKl9hdWlfcmVzZXJ2ZWQ0KSh2b2lkKTsKK307CisKK3N0cnVjdCBfQXVpU2VydmljZURpYWxvZyB7CisgICAgR3RrRGlhbG9nIHBhcmVudF9pbnN0YW5jZTsKKyAgICBBdWlTZXJ2aWNlRGlhbG9nUHJpdmF0ZSAqcHJpdjsKK307CisKKy8qIFNlcnZpY2VEaWFsb2cgKi8KK0dUeXBlIGF1aV9zZXJ2aWNlX2RpYWxvZ19nZXRfdHlwZSh2b2lkKSBHX0dOVUNfQ09OU1Q7CisKKyNlbmRpZgorCisvKiogVGhlIEdUSyBzZXJ2aWNlIGRpYWxvZyBzdHJ1Y3R1cmUgKi8KK3R5cGVkZWYgc3RydWN0IF9BdWlTZXJ2aWNlRGlhbG9nIEF1aVNlcnZpY2VEaWFsb2c7CisKKy8qKiBAeyBcbmFtZSBDb25zdHJ1Y3Rpb24gKi8KKworLyoqIENyZWF0ZSBhIG5ldyBzZXJ2aWNlIGJyb3dzZXIgZGlhbG9nIHdpdGggdGhlIHNwZWNpZmljIHRpdGxlLAorICogcGFyZW50IHdpbmRvdyBhbmQgdGhlIHNwZWljaWZpZWQgYnV0dG9ucy4gVGhlIGJ1dHRvbnMgYXJlIHNwZWNpZmllZAorICogaW4gYSBzaW1pbGFyIHdheSB0byBHdGtGaWxlQ2hvb3NlckRpYWxvZy4gUGxlYXNlIG5vdGUgdGhhdCBhdCBsZWFzdAorICogb25lIGJ1dHRvbiBoYXMgdG8gcmVzcG9uZCBHVEtfUkVTUE9OU0VfQUNDRVBULiAqLworR3RrV2lkZ2V0KiBhdWlfc2VydmljZV9kaWFsb2dfbmV3KAorICAgICAgICBjb25zdCBnY2hhciAqdGl0bGUsCisgICAgICAgIEd0a1dpbmRvdyAqcGFyZW50LAorICAgICAgICBjb25zdCBnY2hhciAqZmlyc3RfYnV0dG9uX3RleHQsIC4uLikgR19HTlVDX05VTExfVEVSTUlOQVRFRDsKKworLyoqIFxjb25kIGZ1bGxkb2NzICovCitHdGtXaWRnZXQgKmF1aV9zZXJ2aWNlX2RpYWxvZ19uZXdfdmFsaXN0KAorICAgICAgICBjb25zdCBnY2hhciAqdGl0bGUsCisgICAgICAgIEd0a1dpbmRvdyAqcGFyZW50LAorICAgICAgICBjb25zdCBnY2hhciAqZmlyc3RfYnV0dG9uX3RleHQsCisgICAgICAgIHZhX2xpc3QgdmFyYXJncyk7CisvKiogXGVuZGNvbmQgKi8KKworLyoqIEB9ICovCisKKy8qKiBAeyBcbmFtZSBTZXJ2aWNlIHR5cGVzIHRvIGJyb3dzZSBmb3IgKi8KKworLyoqIFNlbGVjdCB0aGUgc2VydmljZSB0eXBlcyB0byBicm93c2UgZm9yLiBUYWtlcyBhIE5VTEwgdGVybWluYXRlZCBsaXN0IG9mIEROUy1TRCBzZXJ2aWNlIHR5cGVzLiBpLmUuIF9odHRwLl90Y3AgKi8KK3ZvaWQgYXVpX3NlcnZpY2VfZGlhbG9nX3NldF9icm93c2Vfc2VydmljZV90eXBlcyhBdWlTZXJ2aWNlRGlhbG9nICpkLCBjb25zdCBnY2hhciAqdHlwZSwgLi4uKSBHX0dOVUNfTlVMTF9URVJNSU5BVEVEOworLyoqIFNhbWUgYXMgYXVpX3NlcnZpY2VfZGlhbG9nX3NldF9icm93c2Vfc2VydmljZV90eXBlcygpIGJ1dCB0YWtlIGEgTlVMTCB0ZXJtaW5hdGVkIGFycmF5ICovCit2b2lkIGF1aV9zZXJ2aWNlX2RpYWxvZ19zZXRfYnJvd3NlX3NlcnZpY2VfdHlwZXN2KEF1aVNlcnZpY2VEaWFsb2cgKmQsIGNvbnN0IGdjaGFyICpjb25zdCp0eXBlKTsKKy8qKiBSZXR1cm4gdGhlIHNlcnZpY2UgdHlwZXMgY3VycmVudGx5IGJyb3dzZWQgZm9yLiBpLmUuIHdoYXQgd2FzIHByZXZpb3VzbHkgc2V0IHdpdGggYXVpX3NlcnZpY2VfZGlhbG9nX3NldF9icm93c2Vfc2VydmljZV90eXBlcygpICovCitjb25zdCBnY2hhcipjb25zdCogYXVpX3NlcnZpY2VfZGlhbG9nX2dldF9icm93c2Vfc2VydmljZV90eXBlcyhBdWlTZXJ2aWNlRGlhbG9nICpkKTsKKy8qKiBPdmVyd3JpdGUgdGhlIHByZXR0eSBuYW1lIHNob3duIGluIHRoZSBzZXJ2aWNlIHR5cGUgY29sdW1uLiBcc2luY2UgMC42LjIyICovCit2b2lkIGF1aV9zZXJ2aWNlX2RpYWxvZ19zZXRfc2VydmljZV90eXBlX25hbWUoQXVpU2VydmljZURpYWxvZyAqZCwgY29uc3QgZ2NoYXIgKnR5cGUsIGNvbnN0IGdjaGFyICpuYW1lKTsKKworLyoqIEB9ICovCisKKy8qKiBAeyBcbmFtZSBEb21haW4gdG8gYnJvd3NlIGluICovCisKKy8qKiBTZXQgdGhlIGRvbWFpbiB0byBicm93c2UgaW4gKi8KK3ZvaWQgYXVpX3NlcnZpY2VfZGlhbG9nX3NldF9kb21haW4oQXVpU2VydmljZURpYWxvZyAqZCwgY29uc3QgZ2NoYXIgKmRvbWFpbik7CisvKiogUXVlcnkgdGhlIGRvbWFpbiB0aGF0IGlzIGJyb3dzZWQgaW4gKi8KK2NvbnN0IGdjaGFyKiBhdWlfc2VydmljZV9kaWFsb2dfZ2V0X2RvbWFpbihBdWlTZXJ2aWNlRGlhbG9nICpkKTsKKworLyoqIEB9ICovCisKKy8qKiBAeyBcbmFtZSBTZWxlY3RlZCBzZXJ2aWNlIGl0ZW0gKi8KKworLyoqIFNldCB0aGUgc2VydmljZSB0eXBlIGZvciB0aGUgc2VydmljZSB0byBzZWxlY3QgKi8KK3ZvaWQgYXVpX3NlcnZpY2VfZGlhbG9nX3NldF9zZXJ2aWNlX3R5cGUoQXVpU2VydmljZURpYWxvZyAqZCwgY29uc3QgZ2NoYXIgKm5hbWUpOworCisvKiogUXVlcnkgdGhlIHNlcnZpY2UgdHlwZSBvZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHNlcnZpY2UgKi8KK2NvbnN0IGdjaGFyKiBhdWlfc2VydmljZV9kaWFsb2dfZ2V0X3NlcnZpY2VfdHlwZShBdWlTZXJ2aWNlRGlhbG9nICpkKTsKKworLyoqIFNldCB0aGUgc2VydmljZSBuYW1lIGZvciB0aGUgc2VydmljZSB0byBzZWxlY3QgKi8KK3ZvaWQgYXVpX3NlcnZpY2VfZGlhbG9nX3NldF9zZXJ2aWNlX25hbWUoQXVpU2VydmljZURpYWxvZyAqZCwgY29uc3QgZ2NoYXIgKm5hbWUpOworCisvKiogUXVlcnkgdGhlIHNlcnZpY2UgbmFtZSBvZiB0aGUgY3VycmVudGx5IHNlbGVjdCBzZXJ2aWNlICovCitjb25zdCBnY2hhciogYXVpX3NlcnZpY2VfZGlhbG9nX2dldF9zZXJ2aWNlX25hbWUoQXVpU2VydmljZURpYWxvZyAqZCk7CisKKy8qKiBAfSAqLworCisvKiogQHsgXG5hbWUgUmVzb2x2ZWQgc2VydmljZSBpbmZvcm1hdGlvbiAqLworCisvKiogUmV0dXJuIHRoZSBJUCBhZGRyZXNzIG9mIHRoZSBzZWxlY3RlZCBzZXJ2aWNlLiAoT25seSB2YWxpZCBpZiBob3N0IG5hbWUgcmVzb2x2aW5nIGhhcyBub3QgYmVlbiBkaXNhYmxlZCB2aWEgYXVpX3NlcnZpY2VfZGlhbG9nX3NldF9yZXNvbHZlX2hvc3RfbmFtZSgpKSAqLworY29uc3QgQXZhaGlBZGRyZXNzKiBhdWlfc2VydmljZV9kaWFsb2dfZ2V0X2FkZHJlc3MoQXVpU2VydmljZURpYWxvZyAqZCk7CisKKy8qKiBSZXR1cm4gdGhlIElQIHBvcnQgbnVtYmVyIG9mIHRoZSBzZWxlY3RlZCBzZXJ2aWNlICovCitndWludDE2IGF1aV9zZXJ2aWNlX2RpYWxvZ19nZXRfcG9ydChBdWlTZXJ2aWNlRGlhbG9nICpkKTsKKworLyoqIFJldHVybiB0aGUgaG9zdCBuYW1lIG9mIHRoZSBzZWxlY3RlZCBzZXJ2aWNlICovCitjb25zdCBnY2hhciogYXVpX3NlcnZpY2VfZGlhbG9nX2dldF9ob3N0X25hbWUoQXVpU2VydmljZURpYWxvZyAqZCk7CisKKy8qKiBSZXR1cm4gdGhlIFRYVCBtZXRhZGF0YSBvZiB0aGUgc2VsZWN0ZWQgc2VydmljZSAqLworY29uc3QgQXZhaGlTdHJpbmdMaXN0ICphdWlfc2VydmljZV9kaWFsb2dfZ2V0X3R4dF9kYXRhKEF1aVNlcnZpY2VEaWFsb2cgKmQpOworCisvKiogQH0gKi8KKworLyoqIEB7IFxuYW1lIFJlc29sdmluZyBzZXR0aW5ncyAqLworCisvKiogRGlzYWJsZS9FbmFibGUgYXV0b21hdGljIHNlcnZpY2UgcmVzb2x2aW5nLiBEaXNhYmxpbmcgdGhpcyBmZWF0dXJlCisgKiB3aWxsIHJlcXVpcmUgeW91IHRvIHJlc29sdmUgdGhlIHNlbGVjdGVkIHNlcnZpY2Ugb24gb3VyIG93bi4gSS5lLiB0aGUgcG9ydAorICogbnVtYmVyLCB0aGUgVFhUIGRhdGEgYW5kIHRoZSBob3N0IG5hbWUvSVAgYWRkcmVzcyB3aWxsIG5vdCBiZQorICogYXZhaWxhYmxlIGFmdGVyIGEgc2VydmljZSBoYXMgYmVlbiBzZWxlY3RlZC4gVGhpcyBmdW5jdGlvbmFsaXR5CisgKiBvZmZlcnMgYSBjZXJ0YWluIG9wdGltaXphdGlvbiBpbiB0aGUgdHJhZmZpYyBpbXBvc2VkIG9uIHRoZQorICogbmV0d29yay4gTW9zdCBwZW9wbGUgd2lsbCBub3Qgd2FudCB0byB0b3VjaCB0aGlzLiAqLwordm9pZCBhdWlfc2VydmljZV9kaWFsb2dfc2V0X3Jlc29sdmVfc2VydmljZShBdWlTZXJ2aWNlRGlhbG9nICpkLCBnYm9vbGVhbiByZXNvbHZlKTsKKworLyoqIFF1ZXJ5IHRoZSBsYXN0IHN0YXR1cyBvZiBhdWlfc2VydmljZV9kaWFsb2dfc2V0X3Jlc29sdmVfc2VydmljZSgpICovCitnYm9vbGVhbiBhdWlfc2VydmljZV9kaWFsb2dfZ2V0X3Jlc29sdmVfc2VydmljZShBdWlTZXJ2aWNlRGlhbG9nICpkKTsKKworLyoqIERpc2FibGUvRW5hYmxlIGF1dG9tYXRpYyBob3N0IG5hbWUgcmVzb2x2aW5nLiBEaXNhYmxpbmcgdGhpcworICogZmVhdHVyZSB3aWxsIGNhdXNlIGF1aV9zZXJ2aWNlX2RpYWxvZ19nZXRfYWRkcmVzcygpIHJldHVybiBOVUxMIGluCisgKiBhbGwgY2FzZSBiZWNhdXNlIGF2YWhpLXVpIHdpbGwgbm90IHJlc29sdmUgdGhlIGhvc3QgbmFtZSBvZiB0aGUKKyAqIHNlbGVjdGVkIHNlcnZpY2UgdG8gYW4gYWRkcmVzcy4gVGhpcyBpcyBhIHNsaWdodCBvcHRpbWl6YXRpb24KKyAqIHJlZ2FyZGluZyB0aGUgdHJhZmZpYyBpbXBvc2VkIGJ5IHRoaXMgcXVlcnkgdG8gdGhlIG5ldHdvcmsuIEJ5CisgKiBkZWZhdWx0LCBhdmFoaS11aSB3aWxsIHJlc29sdmUgdGhlIGhvc3QgbmFtZXMgb2Ygc2VsZWN0ZWQgc2VydmljZXMuICovCit2b2lkIGF1aV9zZXJ2aWNlX2RpYWxvZ19zZXRfcmVzb2x2ZV9ob3N0X25hbWUoQXVpU2VydmljZURpYWxvZyAqZCwgZ2Jvb2xlYW4gcmVzb2x2ZSk7CisKKy8qKiBRdWVyeSB0aGUgbGFzdCBzdGF0dXMgb2YgYXVpX3NlcnZpY2VfZGlhbG9nX3NldF9yZXNvbHZlX2hvc3RfbmFtZSgpICovCitnYm9vbGVhbiBhdWlfc2VydmljZV9kaWFsb2dfZ2V0X3Jlc29sdmVfaG9zdF9uYW1lKEF1aVNlcnZpY2VEaWFsb2cgKmQpOworCisvKiogQH0gKi8KKworLyoqIEB7IFxuYW1lIEFkZHJlc3MgZmFtaWx5ICovCisKKy8qKiBTZWxlY3QgdGhlIGFkZHJlc3MgZmFtaWx5IHRvIGxvb2sgZm9yIHNlcnZpY2VzIG9mLiBUaGlzIGNhbiBiZQordXNlZCB0byBsb29rIG9ubHkgZm9yIElQdjYgc2VydmljZXMgb3Igb25seSBmb3IgSVB2NCBzZXJ2aWNlcy4gQnkKK2RlZmF1bHQgYXZhaGktdWkgd2lsbCBicm93c2UgZm9yIGJvdGggSVB2NCBhbmQgSVB2NiBzZXJ2aWNlcy4qLwordm9pZCBhdWlfc2VydmljZV9kaWFsb2dfc2V0X2FkZHJlc3NfZmFtaWx5KEF1aVNlcnZpY2VEaWFsb2cgKmQsIEF2YWhpUHJvdG9jb2wgcHJvdG8pOworCisvKiogUXVlcnkgdGhlIGFkZHJlc3MgZmFtaWx5IHdlJ3JlIGxvb2tpbmcgZm9yLiAqLworQXZhaGlQcm90b2NvbCBhdWlfc2VydmljZV9kaWFsb2dfZ2V0X2FkZHJlc3NfZmFtaWx5KEF1aVNlcnZpY2VEaWFsb2cgKmQpOworCisvKiogQH0gKi8KKworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktdWkvYnNzaC5jIGIvYXZhaGktMC42LjMxL2F2YWhpLXVpL2Jzc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTEzODBmCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLXVpL2Jzc2guYwpAQCAtMCwwICsxLDI1NiBAQAorLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGxvY2FsZS5oPgorI2luY2x1ZGUgPGdldG9wdC5oPgorCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorCisjaW5jbHVkZSA8YXZhaGktY2xpZW50L2NsaWVudC5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9zdHJsc3QuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vbWFsbG9jLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2RvbWFpbi5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9pMThuLmg+CisKKyNpbmNsdWRlICJhdmFoaS11aS5oIgorCit0eXBlZGVmIGVudW0geworICAgIENPTU1BTkRfSEVMUCwKKyAgICBDT01NQU5EX1NTSCwKKyAgICBDT01NQU5EX1ZOQywKKyAgICBDT01NQU5EX1NIRUxMCit9IENvbW1hbmQ7CisKK3R5cGVkZWYgc3RydWN0IENvbmZpZyB7CisgICAgY2hhciAqZG9tYWluOworICAgIENvbW1hbmQgY29tbWFuZDsKK30gQ29uZmlnOworCitzdGF0aWMgdm9pZCBoZWxwKEZJTEUgKmYsIGNvbnN0IGNoYXIgKmFyZ3YwKSB7CisgICAgZnByaW50ZihmLAorICAgICAgICAgICAgXygiJXMgW29wdGlvbnNdXG5cbiIKKyAgICAgICAgICAgICAgIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorICAgICAgICAgICAgICAiICAgIC1zIC0tc3NoICAgICAgICAgICAgIEJyb3dzZSBTU0ggc2VydmVyc1xuIgorICAgICAgICAgICAgICAiICAgIC12IC0tdm5jICAgICAgICAgICAgIEJyb3dzZSBWTkMgc2VydmVyc1xuIgorICAgICAgICAgICAgICAiICAgIC1TIC0tc2hlbGwgICAgICAgICAgIEJyb3dzZSBib3RoIFNTSCBhbmQgVk5DXG4iCisgICAgICAgICAgICAgICIgICAgLWQgLS1kb21haW49RE9NQUlOICAgVGhlIGRvbWFpbiB0byBicm93c2UgaW5cbiIpLAorICAgICAgICAgICAgYXJndjApOworfQorCitzdGF0aWMgaW50IHBhcnNlX2NvbW1hbmRfbGluZShDb25maWcgKmMsIGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKKyAgICBpbnQgbzsKKworICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uIGxvbmdfb3B0aW9uc1tdID0geworICAgICAgICB7ICJoZWxwIiwgICAgICAgICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCAnaCcgfSwKKyAgICAgICAgeyAic3NoIiwgICAgICAgICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgJ3MnIH0sCisgICAgICAgIHsgInZuYyIsICAgICAgICAgICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsICd2JyB9LAorICAgICAgICB7ICJzaGVsbCIsICAgICAgICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCAnUycgfSwKKyAgICAgICAgeyAiZG9tYWluIiwgICAgICAgICByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ2QnIH0sCisgICAgICAgIHsgTlVMTCwgMCwgTlVMTCwgMCB9CisgICAgfTsKKworICAgIHdoaWxlICgobyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJoVmQ6c3ZTIiwgbG9uZ19vcHRpb25zLCBOVUxMKSkgPj0gMCkgeworCisgICAgICAgIHN3aXRjaChvKSB7CisgICAgICAgICAgICBjYXNlICdoJzoKKyAgICAgICAgICAgICAgICBjLT5jb21tYW5kID0gQ09NTUFORF9IRUxQOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAncyc6CisgICAgICAgICAgICAgICAgYy0+Y29tbWFuZCA9IENPTU1BTkRfU1NIOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAndic6CisgICAgICAgICAgICAgICAgYy0+Y29tbWFuZCA9IENPTU1BTkRfVk5DOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnUyc6CisgICAgICAgICAgICAgICAgYy0+Y29tbWFuZCA9IENPTU1BTkRfU0hFTEw7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdkJzoKKyAgICAgICAgICAgICAgICBhdmFoaV9mcmVlKGMtPmRvbWFpbik7CisgICAgICAgICAgICAgICAgYy0+ZG9tYWluID0gYXZhaGlfc3RyZHVwKG9wdGFyZyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChvcHRpbmQgPCBhcmdjKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCBfKCJUb28gbWFueSBhcmd1bWVudHNcbiIpKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciphcmd2W10pIHsKKyAgICBHdGtXaWRnZXQgKmQ7CisgICAgQ29uZmlnIGNvbmZpZzsKKyAgICBjb25zdCBjaGFyICphcmd2MDsKKworICAgIGF2YWhpX2luaXRfaTE4bigpOworICAgIHNldGxvY2FsZShMQ19BTEwsICIiKTsKKworICAgIGlmICgoYXJndjAgPSBzdHJyY2hyKGFyZ3ZbMF0sICcvJykpKQorICAgICAgICBhcmd2MCsrOworICAgIGVsc2UKKyAgICAgICAgYXJndjAgPSBhcmd2WzBdOworCisgICAgaWYgKGdfc3RyX2hhc19zdWZmaXgoYXJndlswXSwgImJzaGVsbCIpKQorICAgICAgICBjb25maWcuY29tbWFuZCA9IENPTU1BTkRfU0hFTEw7CisgICAgZWxzZSBpZiAoZ19zdHJfaGFzX3N1ZmZpeChhcmd2WzBdLCAiYnZuYyIpKQorICAgICAgICBjb25maWcuY29tbWFuZCA9IENPTU1BTkRfVk5DOworICAgIGVsc2UKKyAgICAgICAgY29uZmlnLmNvbW1hbmQgPSBDT01NQU5EX1NTSDsKKworICAgIC8qIGRlZmF1bHRzIHRvIGxvY2FsICovCisgICAgY29uZmlnLmRvbWFpbiA9IE5VTEw7CisKKyAgICBpZiAocGFyc2VfY29tbWFuZF9saW5lKCZjb25maWcsIGFyZ2MsIGFyZ3YpIDwgMCkgeworICAgICAgICBoZWxwKHN0ZGVyciwgYXJndjApOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBiaW5kdGV4dGRvbWFpbiAoR0VUVEVYVF9QQUNLQUdFLCBHTk9NRUxPQ0FMRURJUik7CisgICAgYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgKEdFVFRFWFRfUEFDS0FHRSwgIlVURi04Iik7CisgICAgdGV4dGRvbWFpbiAoR0VUVEVYVF9QQUNLQUdFKTsKKworICAgIGd0a19pbml0KCZhcmdjLCAmYXJndik7CisKKyAgICBzd2l0Y2ggKGNvbmZpZy5jb21tYW5kKSB7CisgICAgICAgIGNhc2UgQ09NTUFORF9IRUxQOgorICAgICAgICAgICAgaGVscChzdGRvdXQsIGFyZ3YwKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBDT01NQU5EX1NIRUxMOgorICAgICAgICAgICAgZCA9IGF1aV9zZXJ2aWNlX2RpYWxvZ19uZXcoXygiQ2hvb3NlIFNoZWxsIFNlcnZlciIpLCBOVUxMLCBHVEtfU1RPQ0tfQ0FOQ0VMLCBHVEtfUkVTUE9OU0VfQ0FOQ0VMLCBHVEtfU1RPQ0tfQ09OTkVDVCwgR1RLX1JFU1BPTlNFX0FDQ0VQVCwgTlVMTCk7CisgICAgICAgICAgICBhdWlfc2VydmljZV9kaWFsb2dfc2V0X2Jyb3dzZV9zZXJ2aWNlX3R5cGVzKEFVSV9TRVJWSUNFX0RJQUxPRyhkKSwgIl9yZmIuX3RjcCIsICJfc3NoLl90Y3AiLCBOVUxMKTsKKyAgICAgICAgICAgIGF1aV9zZXJ2aWNlX2RpYWxvZ19zZXRfc2VydmljZV90eXBlX25hbWUoQVVJX1NFUlZJQ0VfRElBTE9HKGQpLCAiX3JmYi5fdGNwIiwgXygiRGVza3RvcCIpKTsKKyAgICAgICAgICAgIGF1aV9zZXJ2aWNlX2RpYWxvZ19zZXRfc2VydmljZV90eXBlX25hbWUoQVVJX1NFUlZJQ0VfRElBTE9HKGQpLCAiX3NzaC5fdGNwIiwgXygiVGVybWluYWwiKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIENPTU1BTkRfVk5DOgorICAgICAgICAgICAgZCA9IGF1aV9zZXJ2aWNlX2RpYWxvZ19uZXcoXygiQ2hvb3NlIFZOQyBzZXJ2ZXIiKSwgTlVMTCwgR1RLX1NUT0NLX0NBTkNFTCwgR1RLX1JFU1BPTlNFX0NBTkNFTCwgR1RLX1NUT0NLX0NPTk5FQ1QsIEdUS19SRVNQT05TRV9BQ0NFUFQsIE5VTEwpOworICAgICAgICAgICAgYXVpX3NlcnZpY2VfZGlhbG9nX3NldF9icm93c2Vfc2VydmljZV90eXBlcyhBVUlfU0VSVklDRV9ESUFMT0coZCksICJfcmZiLl90Y3AiLCBOVUxMKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQ09NTUFORF9TU0g6CisgICAgICAgICAgICBkID0gYXVpX3NlcnZpY2VfZGlhbG9nX25ldyhfKCJDaG9vc2UgU1NIIHNlcnZlciIpLCBOVUxMLCBHVEtfU1RPQ0tfQ0FOQ0VMLCBHVEtfUkVTUE9OU0VfQ0FOQ0VMLCBHVEtfU1RPQ0tfQ09OTkVDVCwgR1RLX1JFU1BPTlNFX0FDQ0VQVCwgTlVMTCk7CisgICAgICAgICAgICBhdWlfc2VydmljZV9kaWFsb2dfc2V0X2Jyb3dzZV9zZXJ2aWNlX3R5cGVzKEFVSV9TRVJWSUNFX0RJQUxPRyhkKSwgIl9zc2guX3RjcCIsIE5VTEwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgYXVpX3NlcnZpY2VfZGlhbG9nX3NldF9kb21haW4gKEFVSV9TRVJWSUNFX0RJQUxPRyhkKSwgY29uZmlnLmRvbWFpbik7CisgICAgYXVpX3NlcnZpY2VfZGlhbG9nX3NldF9yZXNvbHZlX3NlcnZpY2UoQVVJX1NFUlZJQ0VfRElBTE9HKGQpLCBUUlVFKTsKKyAgICBhdWlfc2VydmljZV9kaWFsb2dfc2V0X3Jlc29sdmVfaG9zdF9uYW1lKEFVSV9TRVJWSUNFX0RJQUxPRyhkKSwgIWF2YWhpX25zc19zdXBwb3J0KCkpOworCisgICAgZ3RrX3dpbmRvd19wcmVzZW50KEdUS19XSU5ET1coZCkpOworCisgICAgaWYgKGd0a19kaWFsb2dfcnVuKEdUS19ESUFMT0coZCkpID09IEdUS19SRVNQT05TRV9BQ0NFUFQpIHsKKyAgICAgICAgY2hhciBhW0FWQUhJX0FERFJFU1NfU1RSX01BWF0sICp1ID0gTlVMTCwgKm4gPSBOVUxMOworICAgICAgICBjaGFyICpoID0gTlVMTCwgKnQgPSBOVUxMOworICAgICAgICBjb25zdCBBdmFoaVN0cmluZ0xpc3QgKnR4dDsKKworICAgICAgICB0ID0gZ19zdHJkdXAoYXVpX3NlcnZpY2VfZGlhbG9nX2dldF9zZXJ2aWNlX3R5cGUoQVVJX1NFUlZJQ0VfRElBTE9HKGQpKSk7CisgICAgICAgIG4gPSBnX3N0cmR1cChhdWlfc2VydmljZV9kaWFsb2dfZ2V0X3NlcnZpY2VfbmFtZShBVUlfU0VSVklDRV9ESUFMT0coZCkpKTsKKworICAgICAgICBpZiAoYXZhaGlfbnNzX3N1cHBvcnQoKSkKKyAgICAgICAgICAgIGggPSBnX3N0cmR1cChhdWlfc2VydmljZV9kaWFsb2dfZ2V0X2hvc3RfbmFtZShBVUlfU0VSVklDRV9ESUFMT0coZCkpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaCA9IGdfc3RyZHVwKGF2YWhpX2FkZHJlc3Nfc25wcmludChhLCBzaXplb2YoYSksIGF1aV9zZXJ2aWNlX2RpYWxvZ19nZXRfYWRkcmVzcyhBVUlfU0VSVklDRV9ESUFMT0coZCkpKSk7CisKKyAgICAgICAgZ19wcmludChfKCJDb25uZWN0aW5nIHRvICclcycgLi4uXG4iKSwgbik7CisKKyAgICAgICAgaWYgKGF2YWhpX2RvbWFpbl9lcXVhbCh0LCAiX3JmYi5fdGNwIikpIHsKKyAgICAgICAgICAgIGNoYXIgcFtBVkFISV9ET01BSU5fTkFNRV9NQVgrMTZdOworICAgICAgICAgICAgc25wcmludGYocCwgc2l6ZW9mKHApLCAiJXM6JXUiLCBoLCBhdWlfc2VydmljZV9kaWFsb2dfZ2V0X3BvcnQoQVVJX1NFUlZJQ0VfRElBTE9HKGQpKS01OTAwKTsKKworICAgICAgICAgICAgZ3RrX3dpZGdldF9kZXN0cm95KGQpOworCisgICAgICAgICAgICBnX3ByaW50KCJ2bmN2aWV3ZXIgJXNcbiIsIHApOworICAgICAgICAgICAgZXhlY2xwKCJ4dm5jdmlld2VyIiwgInh2bmN2aWV3ZXIiLCBwLCBOVUxMKTsKKyAgICAgICAgICAgIGV4ZWNscCgidm5jdmlld2VyIiwgInZuY3ZpZXdlciIsIHAsIE5VTEwpOworCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjaGFyIHBbMTZdOworCisgICAgICAgICAgICBzbnByaW50ZihwLCBzaXplb2YocCksICIldSIsIGF1aV9zZXJ2aWNlX2RpYWxvZ19nZXRfcG9ydChBVUlfU0VSVklDRV9ESUFMT0coZCkpKTsKKworICAgICAgICAgICAgZm9yICh0eHQgPSBhdWlfc2VydmljZV9kaWFsb2dfZ2V0X3R4dF9kYXRhKEFVSV9TRVJWSUNFX0RJQUxPRyhkKSk7IHR4dDsgdHh0ID0gdHh0LT5uZXh0KSB7CisgICAgICAgICAgICAgICAgY2hhciAqa2V5LCAqdmFsdWU7CisKKyAgICAgICAgICAgICAgICBpZiAoYXZhaGlfc3RyaW5nX2xpc3RfZ2V0X3BhaXIoKEF2YWhpU3RyaW5nTGlzdCopIHR4dCwgJmtleSwgJnZhbHVlLCBOVUxMKSA8IDApCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgaWYgKHN0cmNtcChrZXksICJ1IikgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgdSA9IGdfc3RyZHVwKHZhbHVlKTsKKworICAgICAgICAgICAgICAgIGF2YWhpX2ZyZWUoa2V5KTsKKyAgICAgICAgICAgICAgICBhdmFoaV9mcmVlKHZhbHVlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ3RrX3dpZGdldF9kZXN0cm95KGQpOworCisgICAgICAgICAgICBpZiAodSkgeworICAgICAgICAgICAgICAgIGdfcHJpbnQoInNzaCAtcCAlcyAtbCAlcyAlc1xuIiwgcCwgdSwgaCk7CisKKyAgICAgICAgICAgICAgICBpZiAoaXNhdHR5KDApIHx8ICFnZXRlbnYoIkRJU1BMQVkiKSkKKyAgICAgICAgICAgICAgICAgICAgZXhlY2xwKCJzc2giLCAic3NoIiwgIi1wIiwgcCwgIi1sIiwgdSwgaCwgTlVMTCk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGV4ZWNscCgieC10ZXJtaW5hbC1lbXVsYXRvciIsICJ4LXRlcm1pbmFsLWVtdWxhdG9yIiwgIi1UIiwgbiwgIi1lIiwgInNzaCIsICItcCIsIHAsICItbCIsIHUsIGgsIE5VTEwpOworICAgICAgICAgICAgICAgICAgICBleGVjbHAoImdub21lLXRlcm1pbmFsIiwgImdub21lLXRlcm1pbmFsIiwgIi10IiwgbiwgIi14IiwgInNzaCIsICItcCIsIHAsICItbCIsIHUsIGgsIE5VTEwpOworICAgICAgICAgICAgICAgICAgICBleGVjbHAoInh0ZXJtIiwgInh0ZXJtIiwgIi1UIiwgbiwgIi1lIiwgInNzaCIsICItcCIsIHAsICItbCIsIHUsIGgsIE5VTEwpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZ19wcmludCgic3NoIC1wICVzICVzXG4iLCBwLCBoKTsKKworICAgICAgICAgICAgICAgIGlmIChpc2F0dHkoMCkgfHwgIWdldGVudigiRElTUExBWSIpKQorICAgICAgICAgICAgICAgICAgICBleGVjbHAoInNzaCIsICJzc2giLCAiLXAiLCBwLCBoLCBOVUxMKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZXhlY2xwKCJ4LXRlcm1pbmFsLWVtdWxhdG9yIiwgIngtdGVybWluYWwtZW11bGF0b3IiLCAiLVQiLCBuLCAiLWUiLCAic3NoIiwgIi1wIiwgcCwgaCwgTlVMTCk7CisgICAgICAgICAgICAgICAgICAgIGV4ZWNscCgiZ25vbWUtdGVybWluYWwiLCAiZ25vbWUtdGVybWluYWwiLCAiLXQiLCBuLCAiLXgiLCAic3NoIiwgIi1wIiwgcCwgaCwgTlVMTCk7CisgICAgICAgICAgICAgICAgICAgIGV4ZWNscCgieHRlcm0iLCAieHRlcm0iLCAiLVQiLCBuLCAiLWUiLCAic3NoIiwgIi1wIiwgcCwgaCwgTlVMTCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZ193YXJuaW5nKF8oImV4ZWNscCgpIGZhaWxlZDogJXNcbiIpLCBzdHJlcnJvcihlcnJubykpOworCisgICAgICAgIGdfZnJlZShoKTsKKyAgICAgICAgZ19mcmVlKHUpOworICAgICAgICBnX2ZyZWUodCk7CisgICAgICAgIGdfZnJlZShuKTsKKworICAgIH0gZWxzZSB7CisgICAgICAgIGd0a193aWRnZXRfZGVzdHJveShkKTsKKworICAgICAgICBnX3ByaW50KF8oIkNhbmNlbGVkLlxuIikpOworICAgIH0KKworICAgIGdfZnJlZShjb25maWcuZG9tYWluKTsKKworICAgIHJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLXVpL2Jzc2guZGVza3RvcC5pbi5pbiBiL2F2YWhpLTAuNi4zMS9hdmFoaS11aS9ic3NoLmRlc2t0b3AuaW4uaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRlNTRmZQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS11aS9ic3NoLmRlc2t0b3AuaW4uaW4KQEAgLTAsMCArMSwxMSBAQAorW0Rlc2t0b3AgRW50cnldCitWZXJzaW9uPTEuMAorX05hbWU9QXZhaGkgU1NIIFNlcnZlciBCcm93c2VyCitfQ29tbWVudD1Ccm93c2UgZm9yIFplcm9jb25mLWVuYWJsZWQgU1NIIFNlcnZlcnMKK0V4ZWM9QGJpbmRpckAvYnNzaAorVGVybWluYWw9ZmFsc2UKK1R5cGU9QXBwbGljYXRpb24KK0ljb249bmV0d29yay13aXJlZAorQ2F0ZWdvcmllcz1HTk9NRTtOZXR3b3JrOworU3RhcnR1cE5vdGlmeT1mYWxzZQorR2VuZXJpY05hbWU9CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktdWkvYnZuYy5kZXNrdG9wLmluLmluIGIvYXZhaGktMC42LjMxL2F2YWhpLXVpL2J2bmMuZGVza3RvcC5pbi5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmI4MjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLXVpL2J2bmMuZGVza3RvcC5pbi5pbgpAQCAtMCwwICsxLDExIEBACitbRGVza3RvcCBFbnRyeV0KK1ZlcnNpb249MS4wCitfTmFtZT1BdmFoaSBWTkMgU2VydmVyIEJyb3dzZXIKK19Db21tZW50PUJyb3dzZSBmb3IgWmVyb2NvbmYtZW5hYmxlZCBWTkMgU2VydmVycworRXhlYz1AYmluZGlyQC9idm5jCitUZXJtaW5hbD1mYWxzZQorVHlwZT1BcHBsaWNhdGlvbgorSWNvbj1uZXR3b3JrLXdpcmVkCitDYXRlZ29yaWVzPUdOT01FO05ldHdvcms7CitTdGFydHVwTm90aWZ5PWZhbHNlCitHZW5lcmljTmFtZT0KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS11dGlscy9NYWtlZmlsZS5hbSBiL2F2YWhpLTAuNi4zMS9hdmFoaS11dGlscy9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjQ0YjRhCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLXV0aWxzL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsNjUgQEAKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisjCisjIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisjIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisjIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisjIFVTQS4KKworQU1fQ0ZMQUdTPS1JJCh0b3Bfc3JjZGlyKQorCisjIFRoaXMgY29vbCBkZWJ1ZyB0cmFwIHdvcmtzIG9uIGkzODYvZ2NjIG9ubHkKK0FNX0NGTEFHUys9Jy1EREVCVUdfVFJBUD1fX2FzbV9fKCJpbnQgJCQzIiknCisKK3BrZ2xpYmRhdGFkaXI9JChsaWJkaXIpL2F2YWhpCisKK2lmIEhBVkVfREJVUworCitiaW5fUFJPR1JBTVMgPSBhdmFoaS1icm93c2UgYXZhaGktcmVzb2x2ZSBhdmFoaS1wdWJsaXNoIGF2YWhpLXNldC1ob3N0LW5hbWUKKworYXZhaGlfYnJvd3NlX1NPVVJDRVMgPSBhdmFoaS1icm93c2UuYyBzaWdpbnQuYyBzaWdpbnQuaAorYXZhaGlfYnJvd3NlX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKQorYXZhaGlfYnJvd3NlX0xEQUREID0gJChBTV9MREFERCkgLi4vYXZhaGktY2xpZW50L2xpYmF2YWhpLWNsaWVudC5sYSAuLi9hdmFoaS1jb21tb24vbGliYXZhaGktY29tbW9uLmxhCisKK2lmIEhBVkVfR0RCTQorYXZhaGlfYnJvd3NlX1NPVVJDRVMgKz0gc3RkYi5oIHN0ZGIuYworYXZhaGlfYnJvd3NlX0NGTEFHUyArPSAtRERBVEFCQVNFX0ZJTEU9XCIkKHBrZ2xpYmRhdGFkaXIpL3NlcnZpY2UtdHlwZXMuZGJcIgorYXZhaGlfYnJvd3NlX0xEQUREICs9IC1sZ2RibQorZW5kaWYKKworaWYgSEFWRV9EQk0KK2F2YWhpX2Jyb3dzZV9TT1VSQ0VTICs9IHN0ZGIuaCBzdGRiLmMKK2F2YWhpX2Jyb3dzZV9DRkxBR1MgKz0gLUREQVRBQkFTRV9GSUxFPVwiJChwa2dsaWJkYXRhZGlyKS9zZXJ2aWNlLXR5cGVzLmRiXCIKK2VuZGlmCisKK2F2YWhpX3Jlc29sdmVfU09VUkNFUyA9IGF2YWhpLXJlc29sdmUuYyBzaWdpbnQuYyBzaWdpbnQuaAorYXZhaGlfcmVzb2x2ZV9DRkxBR1MgPSAkKEFNX0NGTEFHUykKK2F2YWhpX3Jlc29sdmVfTERBREQgPSAkKEFNX0xEQUREKSAuLi9hdmFoaS1jbGllbnQvbGliYXZhaGktY2xpZW50LmxhIC4uL2F2YWhpLWNvbW1vbi9saWJhdmFoaS1jb21tb24ubGEKKworYXZhaGlfcHVibGlzaF9TT1VSQ0VTID0gYXZhaGktcHVibGlzaC5jIHNpZ2ludC5jIHNpZ2ludC5oCithdmFoaV9wdWJsaXNoX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKQorYXZhaGlfcHVibGlzaF9MREFERCA9ICQoQU1fTERBREQpIC4uL2F2YWhpLWNsaWVudC9saWJhdmFoaS1jbGllbnQubGEgLi4vYXZhaGktY29tbW9uL2xpYmF2YWhpLWNvbW1vbi5sYQorCithdmFoaV9zZXRfaG9zdF9uYW1lX1NPVVJDRVMgPSBhdmFoaS1zZXQtaG9zdC1uYW1lLmMgc2lnaW50LmMgc2lnaW50LmgKK2F2YWhpX3NldF9ob3N0X25hbWVfQ0ZMQUdTID0gJChBTV9DRkxBR1MpCithdmFoaV9zZXRfaG9zdF9uYW1lX0xEQUREID0gJChBTV9MREFERCkgLi4vYXZhaGktY2xpZW50L2xpYmF2YWhpLWNsaWVudC5sYSAuLi9hdmFoaS1jb21tb24vbGliYXZhaGktY29tbW9uLmxhCisKK2luc3RhbGwtZXhlYy1sb2NhbDoKKwljZCAkKERFU1RESVIpLyQoYmluZGlyKSAmJiBcCisJCXJtIC1mIGF2YWhpLXJlc29sdmUtaG9zdC1uYW1lIGF2YWhpLXJlc29sdmUtYWRkcmVzcyBhdmFoaS1icm93c2UtZG9tYWlucyBhdmFoaS1wdWJsaXNoLWFkZHJlc3MgYXZhaGktcHVibGlzaC1zZXJ2aWNlICYmIFwKKwkJJChMTl9TKSBhdmFoaS1yZXNvbHZlIGF2YWhpLXJlc29sdmUtaG9zdC1uYW1lICYmIFwKKwkJJChMTl9TKSBhdmFoaS1yZXNvbHZlIGF2YWhpLXJlc29sdmUtYWRkcmVzcyAmJiBcCisJCSQoTE5fUykgYXZhaGktYnJvd3NlIGF2YWhpLWJyb3dzZS1kb21haW5zICYmIFwKKwkJJChMTl9TKSBhdmFoaS1wdWJsaXNoIGF2YWhpLXB1Ymxpc2gtYWRkcmVzcyAmJiBcCisJCSQoTE5fUykgYXZhaGktcHVibGlzaCBhdmFoaS1wdWJsaXNoLXNlcnZpY2UKKworZW5kaWYKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS11dGlscy9NYWtlZmlsZS5pbiBiL2F2YWhpLTAuNi4zMS9hdmFoaS11dGlscy9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODExNWM5Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLXV0aWxzL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsOTE5IEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjExLjMgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACisKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisjCisjIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisjIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisjIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisjIFVTQS4KKworVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorQEhBVkVfREJVU19UUlVFQGJpbl9QUk9HUkFNUyA9IGF2YWhpLWJyb3dzZSQoRVhFRVhUKSBcCitASEFWRV9EQlVTX1RSVUVACWF2YWhpLXJlc29sdmUkKEVYRUVYVCkgYXZhaGktcHVibGlzaCQoRVhFRVhUKSBcCitASEFWRV9EQlVTX1RSVUVACWF2YWhpLXNldC1ob3N0LW5hbWUkKEVYRUVYVCkKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HREJNX1RSVUVAYW1fX2FwcGVuZF8xID0gc3RkYi5oIHN0ZGIuYworQEhBVkVfREJVU19UUlVFQEBIQVZFX0dEQk1fVFJVRUBhbV9fYXBwZW5kXzIgPSAtRERBVEFCQVNFX0ZJTEU9XCIkKHBrZ2xpYmRhdGFkaXIpL3NlcnZpY2UtdHlwZXMuZGJcIgorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dEQk1fVFJVRUBhbV9fYXBwZW5kXzMgPSAtbGdkYm0KK0BIQVZFX0RCTV9UUlVFQEBIQVZFX0RCVVNfVFJVRUBhbV9fYXBwZW5kXzQgPSBzdGRiLmggc3RkYi5jCitASEFWRV9EQk1fVFJVRUBASEFWRV9EQlVTX1RSVUVAYW1fX2FwcGVuZF81ID0gLUREQVRBQkFTRV9GSUxFPVwiJChwa2dsaWJkYXRhZGlyKS9zZXJ2aWNlLXR5cGVzLmRiXCIKK3N1YmRpciA9IGF2YWhpLXV0aWxzCitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9hY3hfcHRocmVhZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vZ2NjX3N0YWNrX3Byb3RlY3QubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2djY192aXNpYmlsaXR5Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9pbnRsdG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vaW50cm9zcGVjdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbGlidG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHRvcHRpb25zLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9sdHN1Z2FyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9sdHZlcnNpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2x0fm9ic29sZXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9ubHMubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vcHl0aG9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2FjaW5jbHVkZS5tNCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9kb3h5Z2VuLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CithbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQoYmluZGlyKSIKK1BST0dSQU1TID0gJChiaW5fUFJPR1JBTVMpCithbV9fYXZhaGlfYnJvd3NlX1NPVVJDRVNfRElTVCA9IGF2YWhpLWJyb3dzZS5jIHNpZ2ludC5jIHNpZ2ludC5oIFwKKwlzdGRiLmggc3RkYi5jCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR0RCTV9UUlVFQGFtX19vYmplY3RzXzEgPSAgXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dEQk1fVFJVRUAJYXZhaGlfYnJvd3NlLXN0ZGIuJChPQkpFWFQpCitASEFWRV9EQk1fVFJVRUBASEFWRV9EQlVTX1RSVUVAYW1fX29iamVjdHNfMiA9ICBcCitASEFWRV9EQk1fVFJVRUBASEFWRV9EQlVTX1RSVUVACWF2YWhpX2Jyb3dzZS1zdGRiLiQoT0JKRVhUKQorQEhBVkVfREJVU19UUlVFQGFtX2F2YWhpX2Jyb3dzZV9PQkpFQ1RTID0gIFwKK0BIQVZFX0RCVVNfVFJVRUAJYXZhaGlfYnJvd3NlLWF2YWhpLWJyb3dzZS4kKE9CSkVYVCkgXAorQEhBVkVfREJVU19UUlVFQAlhdmFoaV9icm93c2Utc2lnaW50LiQoT0JKRVhUKSAkKGFtX19vYmplY3RzXzEpIFwKK0BIQVZFX0RCVVNfVFJVRUAJJChhbV9fb2JqZWN0c18yKQorYXZhaGlfYnJvd3NlX09CSkVDVFMgPSAkKGFtX2F2YWhpX2Jyb3dzZV9PQkpFQ1RTKQorYW1fX0RFUEVOREVOQ0lFU18xID0KK0BIQVZFX0RCVVNfVFJVRUBhdmFoaV9icm93c2VfREVQRU5ERU5DSUVTID0gIFwKK0BIQVZFX0RCVVNfVFJVRUAJLi4vYXZhaGktY2xpZW50L2xpYmF2YWhpLWNsaWVudC5sYSBcCitASEFWRV9EQlVTX1RSVUVACS4uL2F2YWhpLWNvbW1vbi9saWJhdmFoaS1jb21tb24ubGEgXAorQEhBVkVfREJVU19UUlVFQAkkKGFtX19ERVBFTkRFTkNJRVNfMSkKK0FNX1ZfbHQgPSAkKGFtX192X2x0X0BBTV9WQCkKK2FtX192X2x0XyA9ICQoYW1fX3ZfbHRfQEFNX0RFRkFVTFRfVkApCithbV9fdl9sdF8wID0gLS1zaWxlbnQKK2F2YWhpX2Jyb3dzZV9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChhdmFoaV9icm93c2VfQ0ZMQUdTKSBcCisJJChDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorYW1fX2F2YWhpX3B1Ymxpc2hfU09VUkNFU19ESVNUID0gYXZhaGktcHVibGlzaC5jIHNpZ2ludC5jIHNpZ2ludC5oCitASEFWRV9EQlVTX1RSVUVAYW1fYXZhaGlfcHVibGlzaF9PQkpFQ1RTID0gIFwKK0BIQVZFX0RCVVNfVFJVRUAJYXZhaGlfcHVibGlzaC1hdmFoaS1wdWJsaXNoLiQoT0JKRVhUKSBcCitASEFWRV9EQlVTX1RSVUVACWF2YWhpX3B1Ymxpc2gtc2lnaW50LiQoT0JKRVhUKQorYXZhaGlfcHVibGlzaF9PQkpFQ1RTID0gJChhbV9hdmFoaV9wdWJsaXNoX09CSkVDVFMpCitASEFWRV9EQlVTX1RSVUVAYXZhaGlfcHVibGlzaF9ERVBFTkRFTkNJRVMgPSAgXAorQEhBVkVfREJVU19UUlVFQAkuLi9hdmFoaS1jbGllbnQvbGliYXZhaGktY2xpZW50LmxhIFwKK0BIQVZFX0RCVVNfVFJVRUAJLi4vYXZhaGktY29tbW9uL2xpYmF2YWhpLWNvbW1vbi5sYQorYXZhaGlfcHVibGlzaF9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChhdmFoaV9wdWJsaXNoX0NGTEFHUykgXAorCSQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKK2FtX19hdmFoaV9yZXNvbHZlX1NPVVJDRVNfRElTVCA9IGF2YWhpLXJlc29sdmUuYyBzaWdpbnQuYyBzaWdpbnQuaAorQEhBVkVfREJVU19UUlVFQGFtX2F2YWhpX3Jlc29sdmVfT0JKRUNUUyA9ICBcCitASEFWRV9EQlVTX1RSVUVACWF2YWhpX3Jlc29sdmUtYXZhaGktcmVzb2x2ZS4kKE9CSkVYVCkgXAorQEhBVkVfREJVU19UUlVFQAlhdmFoaV9yZXNvbHZlLXNpZ2ludC4kKE9CSkVYVCkKK2F2YWhpX3Jlc29sdmVfT0JKRUNUUyA9ICQoYW1fYXZhaGlfcmVzb2x2ZV9PQkpFQ1RTKQorQEhBVkVfREJVU19UUlVFQGF2YWhpX3Jlc29sdmVfREVQRU5ERU5DSUVTID0gIFwKK0BIQVZFX0RCVVNfVFJVRUAJLi4vYXZhaGktY2xpZW50L2xpYmF2YWhpLWNsaWVudC5sYSBcCitASEFWRV9EQlVTX1RSVUVACS4uL2F2YWhpLWNvbW1vbi9saWJhdmFoaS1jb21tb24ubGEKK2F2YWhpX3Jlc29sdmVfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoYXZhaGlfcmVzb2x2ZV9DRkxBR1MpIFwKKwkkKENGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACithbV9fYXZhaGlfc2V0X2hvc3RfbmFtZV9TT1VSQ0VTX0RJU1QgPSBhdmFoaS1zZXQtaG9zdC1uYW1lLmMgc2lnaW50LmMgXAorCXNpZ2ludC5oCitASEFWRV9EQlVTX1RSVUVAYW1fYXZhaGlfc2V0X2hvc3RfbmFtZV9PQkpFQ1RTID0gYXZhaGlfc2V0X2hvc3RfbmFtZS1hdmFoaS1zZXQtaG9zdC1uYW1lLiQoT0JKRVhUKSBcCitASEFWRV9EQlVTX1RSVUVACWF2YWhpX3NldF9ob3N0X25hbWUtc2lnaW50LiQoT0JKRVhUKQorYXZhaGlfc2V0X2hvc3RfbmFtZV9PQkpFQ1RTID0gJChhbV9hdmFoaV9zZXRfaG9zdF9uYW1lX09CSkVDVFMpCitASEFWRV9EQlVTX1RSVUVAYXZhaGlfc2V0X2hvc3RfbmFtZV9ERVBFTkRFTkNJRVMgPSAgXAorQEhBVkVfREJVU19UUlVFQAkuLi9hdmFoaS1jbGllbnQvbGliYXZhaGktY2xpZW50LmxhIFwKK0BIQVZFX0RCVVNfVFJVRUAJLi4vYXZhaGktY29tbW9uL2xpYmF2YWhpLWNvbW1vbi5sYQorYXZhaGlfc2V0X2hvc3RfbmFtZV9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKKwkkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgXAorCSQoYXZhaGlfc2V0X2hvc3RfbmFtZV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpIFwKKwkkKExERkxBR1MpIC1vICRACitERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQorZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAorYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKK2FtX19tdiA9IG12IC1mCitDT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKKwkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitMVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCisJJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCisJJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfQEFNX1ZAKQorYW1fX3ZfQ0NfID0gJChhbV9fdl9DQ19AQU1fREVGQVVMVF9WQCkKK2FtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAiICRAOworQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQorYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKK2FtX192X2F0XzAgPSBACitDQ0xEID0gJChDQykKK0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKKwkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKK0FNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF9AQU1fVkApCithbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF9AQU1fREVGQVVMVF9WQCkKK2FtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICIgJEA7CitBTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKK2FtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKK2FtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgIiAkQDsKK1NPVVJDRVMgPSAkKGF2YWhpX2Jyb3dzZV9TT1VSQ0VTKSAkKGF2YWhpX3B1Ymxpc2hfU09VUkNFUykgXAorCSQoYXZhaGlfcmVzb2x2ZV9TT1VSQ0VTKSAkKGF2YWhpX3NldF9ob3N0X25hbWVfU09VUkNFUykKK0RJU1RfU09VUkNFUyA9ICQoYW1fX2F2YWhpX2Jyb3dzZV9TT1VSQ0VTX0RJU1QpIFwKKwkkKGFtX19hdmFoaV9wdWJsaXNoX1NPVVJDRVNfRElTVCkgXAorCSQoYW1fX2F2YWhpX3Jlc29sdmVfU09VUkNFU19ESVNUKSBcCisJJChhbV9fYXZhaGlfc2V0X2hvc3RfbmFtZV9TT1VSQ0VTX0RJU1QpCitFVEFHUyA9IGV0YWdzCitDVEFHUyA9IGN0YWdzCitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQUxMX0xJTkdVQVMgPSBAQUxMX0xJTkdVQVNACitBTVRBUiA9IEBBTVRBUkAKK0FNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAorQVIgPSBAQVJACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVZBSElfQVVUT0lQRF9HUk9VUCA9IEBBVkFISV9BVVRPSVBEX0dST1VQQAorQVZBSElfQVVUT0lQRF9VU0VSID0gQEFWQUhJX0FVVE9JUERfVVNFUkAKK0FWQUhJX0dST1VQID0gQEFWQUhJX0dST1VQQAorQVZBSElfUFJJVl9BQ0NFU1NfR1JPVVAgPSBAQVZBSElfUFJJVl9BQ0NFU1NfR1JPVVBACitBVkFISV9VU0VSID0gQEFWQUhJX1VTRVJACitBV0sgPSBAQVdLQAorQ0FUQUxPR1MgPSBAQ0FUQUxPR1NACitDQVRPQkpFWFQgPSBAQ0FUT0JKRVhUQAorQ0MgPSBAQ0NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREFUQURJUk5BTUUgPSBAREFUQURJUk5BTUVACitEQlVTX0NGTEFHUyA9IEBEQlVTX0NGTEFHU0AKK0RCVVNfTElCUyA9IEBEQlVTX0xJQlNACitEQlVTX1NZU1RFTV9CVVNfREVGQVVMVF9BRERSRVNTID0gQERCVVNfU1lTVEVNX0JVU19ERUZBVUxUX0FERFJFU1NACitEQlVTX1NZU19ESVIgPSBAREJVU19TWVNfRElSQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RMTFRPT0wgPSBARExMVE9PTEAKK0RPWFlHRU5fUEFQRVJfU0laRSA9IEBET1hZR0VOX1BBUEVSX1NJWkVACitEU1lNVVRJTCA9IEBEU1lNVVRJTEAKK0RVTVBCSU4gPSBARFVNUEJJTkAKK0RYX0NPTkZJRyA9IEBEWF9DT05GSUdACitEWF9ET0NESVIgPSBARFhfRE9DRElSQAorRFhfRE9UID0gQERYX0RPVEAKK0RYX0RPWFlHRU4gPSBARFhfRE9YWUdFTkAKK0RYX0RWSVBTID0gQERYX0RWSVBTQAorRFhfRUdSRVAgPSBARFhfRUdSRVBACitEWF9FTlYgPSBARFhfRU5WQAorRFhfRkxBR19jaGkgPSBARFhfRkxBR19jaGlACitEWF9GTEFHX2NobSA9IEBEWF9GTEFHX2NobUAKK0RYX0ZMQUdfZG9jID0gQERYX0ZMQUdfZG9jQAorRFhfRkxBR19kb3QgPSBARFhfRkxBR19kb3RACitEWF9GTEFHX2h0bWwgPSBARFhfRkxBR19odG1sQAorRFhfRkxBR19tYW4gPSBARFhfRkxBR19tYW5ACitEWF9GTEFHX3BkZiA9IEBEWF9GTEFHX3BkZkAKK0RYX0ZMQUdfcHMgPSBARFhfRkxBR19wc0AKK0RYX0ZMQUdfcnRmID0gQERYX0ZMQUdfcnRmQAorRFhfRkxBR194bWwgPSBARFhfRkxBR194bWxACitEWF9ISEMgPSBARFhfSEhDQAorRFhfTEFURVggPSBARFhfTEFURVhACitEWF9NQUtFSU5ERVggPSBARFhfTUFLRUlOREVYQAorRFhfUERGTEFURVggPSBARFhfUERGTEFURVhACitEWF9QRVJMID0gQERYX1BFUkxACitEWF9QUk9KRUNUID0gQERYX1BST0pFQ1RACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VYRUVYVCA9IEBFWEVFWFRACitGR1JFUCA9IEBGR1JFUEAKK0dBQ1VUSUwgPSBAR0FDVVRJTEAKK0dFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACitHTElCMjBfQ0ZMQUdTID0gQEdMSUIyMF9DRkxBR1NACitHTElCMjBfTElCUyA9IEBHTElCMjBfTElCU0AKK0dNT0ZJTEVTID0gQEdNT0ZJTEVTQAorR01TR0ZNVCA9IEBHTVNHRk1UQAorR09CSkVDVF9DRkxBR1MgPSBAR09CSkVDVF9DRkxBR1NACitHT0JKRUNUX0xJQlMgPSBAR09CSkVDVF9MSUJTQAorR1JFUCA9IEBHUkVQQAorR1RLMjBfQ0ZMQUdTID0gQEdUSzIwX0NGTEFHU0AKK0dUSzIwX0xJQlMgPSBAR1RLMjBfTElCU0AKK0dUSzMwX0NGTEFHUyA9IEBHVEszMF9DRkxBR1NACitHVEszMF9MSUJTID0gQEdUSzMwX0xJQlNACitIT1dMX0NPTVBBVF9WRVJTSU9OID0gQEhPV0xfQ09NUEFUX1ZFUlNJT05ACitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lOU1RPQkpFWFQgPSBASU5TVE9CSkVYVEAKK0lOVExMSUJTID0gQElOVExMSUJTQAorSU5UTFRPT0xfRVhUUkFDVCA9IEBJTlRMVE9PTF9FWFRSQUNUQAorSU5UTFRPT0xfTUVSR0UgPSBASU5UTFRPT0xfTUVSR0VACitJTlRMVE9PTF9QRVJMID0gQElOVExUT09MX1BFUkxACitJTlRMVE9PTF9VUERBVEUgPSBASU5UTFRPT0xfVVBEQVRFQAorSU5UUk9TUEVDVElPTl9DRkxBR1MgPSBASU5UUk9TUEVDVElPTl9DRkxBR1NACitJTlRST1NQRUNUSU9OX0NPTVBJTEVSID0gQElOVFJPU1BFQ1RJT05fQ09NUElMRVJACitJTlRST1NQRUNUSU9OX0dFTkVSQVRFID0gQElOVFJPU1BFQ1RJT05fR0VORVJBVEVACitJTlRST1NQRUNUSU9OX0dJUkRJUiA9IEBJTlRST1NQRUNUSU9OX0dJUkRJUkAKK0lOVFJPU1BFQ1RJT05fTElCUyA9IEBJTlRST1NQRUNUSU9OX0xJQlNACitJTlRST1NQRUNUSU9OX01BS0VGSUxFID0gQElOVFJPU1BFQ1RJT05fTUFLRUZJTEVACitJTlRST1NQRUNUSU9OX1NDQU5ORVIgPSBASU5UUk9TUEVDVElPTl9TQ0FOTkVSQAorSU5UUk9TUEVDVElPTl9UWVBFTElCRElSID0gQElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUkAKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCQVZBSElfQ0xJRU5UX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DTElFTlRfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfQ09NTU9OX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DT01NT05fVkVSU0lPTl9JTkZPQAorTElCQVZBSElfQ09NUEFUX0hPV0xfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NPTVBBVF9IT1dMX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPTVBBVF9MSUJETlNfU0RfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NPTVBBVF9MSUJETlNfU0RfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfQ09SRV9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ09SRV9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9HTElCX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9HTElCX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0dPQkpFQ1RfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0dPQkpFQ1RfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfUVQzX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9RVDNfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfUVQ0X1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9RVDRfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfVUlfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX1VJX1ZFUlNJT05fSU5GT0AKK0xJQkRBRU1PTl9DRkxBR1MgPSBATElCREFFTU9OX0NGTEFHU0AKK0xJQkRBRU1PTl9MSUJTID0gQExJQkRBRU1PTl9MSUJTQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAorTUNTID0gQE1DU0AKK01EQVNTRU1CTEVSID0gQE1EQVNTRU1CTEVSQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTUtJTlNUQUxMRElSUyA9IEBNS0lOU1RBTExESVJTQAorTU9DX1FUMyA9IEBNT0NfUVQzQAorTU9DX1FUNCA9IEBNT0NfUVQ0QAorTU9OT0RPQ0VSID0gQE1PTk9ET0NFUkAKK01PTk9ET0NfQ0ZMQUdTID0gQE1PTk9ET0NfQ0ZMQUdTQAorTU9OT0RPQ19ESVIgPSBATU9OT0RPQ19ESVJACitNT05PRE9DX0xJQlMgPSBATU9OT0RPQ19MSUJTQAorTVNHRk1UID0gQE1TR0ZNVEAKK01TR0ZNVF9PUFRTID0gQE1TR0ZNVF9PUFRTQAorTVNHTUVSR0UgPSBATVNHTUVSR0VACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitPQkpEVU1QID0gQE9CSkRVTVBACitPQkpFWFQgPSBAT0JKRVhUQAorT1RPT0wgPSBAT1RPT0xACitPVE9PTDY0ID0gQE9UT09MNjRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK1BLR19DT05GSUdfTElCRElSID0gQFBLR19DT05GSUdfTElCRElSQAorUEtHX0NPTkZJR19QQVRIID0gQFBLR19DT05GSUdfUEFUSEAKK1BPRklMRVMgPSBAUE9GSUxFU0AKK1BPU1VCID0gQFBPU1VCQAorUE9fSU5fREFUQURJUl9GQUxTRSA9IEBQT19JTl9EQVRBRElSX0ZBTFNFQAorUE9fSU5fREFUQURJUl9UUlVFID0gQFBPX0lOX0RBVEFESVJfVFJVRUAKK1BUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKK1BUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAorUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKK1BZVEhPTiA9IEBQWVRIT05ACitQWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAorUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKK1BZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKK1BZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAorUVQzX0NGTEFHUyA9IEBRVDNfQ0ZMQUdTQAorUVQzX0xJQlMgPSBAUVQzX0xJQlNACitRVDRfQ0ZMQUdTID0gQFFUNF9DRkxBR1NACitRVDRfTElCUyA9IEBRVDRfTElCU0AKK1JBTkxJQiA9IEBSQU5MSUJACitTRUQgPSBAU0VEQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NUT1cgPSBAU1RPV0AKK1NUUklQID0gQFNUUklQQAorVVNFX05MUyA9IEBVU0VfTkxTQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorVklTSUJJTElUWV9ISURERU5fQ0ZMQUdTID0gQFZJU0lCSUxJVFlfSElEREVOX0NGTEFHU0AKK1hHRVRURVhUID0gQFhHRVRURVhUQAorWE1MX0NGTEFHUyA9IEBYTUxfQ0ZMQUdTQAorWE1MX0xJQlMgPSBAWE1MX0xJQlNACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9BUiA9IEBhY19jdF9BUkAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKK2FjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK2FjeF9wdGhyZWFkX2NvbmZpZyA9IEBhY3hfcHRocmVhZF9jb25maWdACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2F2YWhpX3J1bnRpbWVfZGlyID0gQGF2YWhpX3J1bnRpbWVfZGlyQAorYXZhaGlfc29ja2V0ID0gQGF2YWhpX3NvY2tldEAKK2F2YWhpbG9jYWxlZGlyID0gQGF2YWhpbG9jYWxlZGlyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitoYXZlX3BrZ19jb25maWcgPSBAaGF2ZV9wa2dfY29uZmlnQAoraGF2ZV94bWx0b21hbiA9IEBoYXZlX3htbHRvbWFuQAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2ludGVyZmFjZXNkaXIgPSBAaW50ZXJmYWNlc2RpckAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAorcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3B5ZXhlY2RpciA9IEBweWV4ZWNkaXJACitweXRob25kaXIgPSBAcHl0aG9uZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzcmNkaXIgPSBAc3JjZGlyQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAorc3lzdGVtZHN5c3RlbXVuaXRkaXIgPSBAc3lzdGVtZHN5c3RlbXVuaXRkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKKworIyBUaGlzIGNvb2wgZGVidWcgdHJhcCB3b3JrcyBvbiBpMzg2L2djYyBvbmx5CitBTV9DRkxBR1MgPSAtSSQodG9wX3NyY2RpcikgJy1EREVCVUdfVFJBUD1fX2FzbV9fKCJpbnQgJCQzIiknCitwa2dsaWJkYXRhZGlyID0gJChsaWJkaXIpL2F2YWhpCitASEFWRV9EQlVTX1RSVUVAYXZhaGlfYnJvd3NlX1NPVVJDRVMgPSBhdmFoaS1icm93c2UuYyBzaWdpbnQuYyBcCitASEFWRV9EQlVTX1RSVUVACXNpZ2ludC5oICQoYW1fX2FwcGVuZF8xKSAkKGFtX19hcHBlbmRfNCkKK0BIQVZFX0RCVVNfVFJVRUBhdmFoaV9icm93c2VfQ0ZMQUdTID0gJChBTV9DRkxBR1MpICQoYW1fX2FwcGVuZF8yKSBcCitASEFWRV9EQlVTX1RSVUVACSQoYW1fX2FwcGVuZF81KQorQEhBVkVfREJVU19UUlVFQGF2YWhpX2Jyb3dzZV9MREFERCA9ICQoQU1fTERBREQpIFwKK0BIQVZFX0RCVVNfVFJVRUAJLi4vYXZhaGktY2xpZW50L2xpYmF2YWhpLWNsaWVudC5sYSBcCitASEFWRV9EQlVTX1RSVUVACS4uL2F2YWhpLWNvbW1vbi9saWJhdmFoaS1jb21tb24ubGEgXAorQEhBVkVfREJVU19UUlVFQAkkKGFtX19hcHBlbmRfMykKK0BIQVZFX0RCVVNfVFJVRUBhdmFoaV9yZXNvbHZlX1NPVVJDRVMgPSBhdmFoaS1yZXNvbHZlLmMgc2lnaW50LmMgc2lnaW50LmgKK0BIQVZFX0RCVVNfVFJVRUBhdmFoaV9yZXNvbHZlX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKQorQEhBVkVfREJVU19UUlVFQGF2YWhpX3Jlc29sdmVfTERBREQgPSAkKEFNX0xEQUREKSAuLi9hdmFoaS1jbGllbnQvbGliYXZhaGktY2xpZW50LmxhIC4uL2F2YWhpLWNvbW1vbi9saWJhdmFoaS1jb21tb24ubGEKK0BIQVZFX0RCVVNfVFJVRUBhdmFoaV9wdWJsaXNoX1NPVVJDRVMgPSBhdmFoaS1wdWJsaXNoLmMgc2lnaW50LmMgc2lnaW50LmgKK0BIQVZFX0RCVVNfVFJVRUBhdmFoaV9wdWJsaXNoX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKQorQEhBVkVfREJVU19UUlVFQGF2YWhpX3B1Ymxpc2hfTERBREQgPSAkKEFNX0xEQUREKSAuLi9hdmFoaS1jbGllbnQvbGliYXZhaGktY2xpZW50LmxhIC4uL2F2YWhpLWNvbW1vbi9saWJhdmFoaS1jb21tb24ubGEKK0BIQVZFX0RCVVNfVFJVRUBhdmFoaV9zZXRfaG9zdF9uYW1lX1NPVVJDRVMgPSBhdmFoaS1zZXQtaG9zdC1uYW1lLmMgc2lnaW50LmMgc2lnaW50LmgKK0BIQVZFX0RCVVNfVFJVRUBhdmFoaV9zZXRfaG9zdF9uYW1lX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKQorQEhBVkVfREJVU19UUlVFQGF2YWhpX3NldF9ob3N0X25hbWVfTERBREQgPSAkKEFNX0xEQUREKSAuLi9hdmFoaS1jbGllbnQvbGliYXZhaGktY2xpZW50LmxhIC4uL2F2YWhpLWNvbW1vbi9saWJhdmFoaS1jb21tb24ubGEKK2FsbDogYWxsLWFtCisKKy5TVUZGSVhFUzoKKy5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCisJICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduIGF2YWhpLXV0aWxzL01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiBhdmFoaS11dGlscy9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CitpbnN0YWxsLWJpblBST0dSQU1TOiAkKGJpbl9QUk9HUkFNUykKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwl0ZXN0IC16ICIkKGJpbmRpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKGJpbmRpcikiCisJQGxpc3Q9JyQoYmluX1BST0dSQU1TKSc7IHRlc3QgLW4gIiQoYmluZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAorCXNlZCAncy8kKEVYRUVYVCkkJC8vJyB8IFwKKwl3aGlsZSByZWFkIHAgcDE7IGRvIGlmIHRlc3QgLWYgJCRwIHx8IHRlc3QgLWYgJCRwMTsgXAorCSAgdGhlbiBlY2hvICIkJHAiOyBlY2hvICIkJHAiOyBlbHNlIDo7IGZpOyBcCisJZG9uZSB8IFwKKwlzZWQgLWUgJ3A7cywuKi8sLDtuO2gnIC1lICdzfC4qfC58JyBcCisJICAgIC1lICdwO3g7cywuKi8sLDtzLyQoRVhFRVhUKSQkLy87JCh0cmFuc2Zvcm0pO3MvJCQvJChFWEVFWFQpLycgfCBcCisJc2VkICdOO047TjtzLFxuLCAsZycgfCBcCisJJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIjsgZGlyc1siLiJdID0gMSB9IFwKKwkgIHsgZD0kJDM7IGlmIChkaXJzW2RdICE9IDEpIHsgcHJpbnQgImQiLCBkOyBkaXJzW2RdID0gMSB9IFwKKwkgICAgaWYgKCQkMiA9PSAkJDQpIGZpbGVzW2RdID0gZmlsZXNbZF0gIiAiICQkMTsgXAorCSAgICBlbHNlIHsgcHJpbnQgImYiLCAkJDMgIi8iICQkNCwgJCQxOyB9IH0gXAorCSAgRU5EIHsgZm9yIChkIGluIGZpbGVzKSBwcmludCAiZiIsIGQsIGZpbGVzW2RdIH0nIHwgXAorCXdoaWxlIHJlYWQgdHlwZSBkaXIgZmlsZXM7IGRvIFwKKwkgICAgaWYgdGVzdCAiJCRkaXIiID0gLjsgdGhlbiBkaXI9OyBlbHNlIGRpcj0vJCRkaXI7IGZpOyBcCisJICAgIHRlc3QgLXogIiQkZmlsZXMiIHx8IHsgXAorCSAgICBlY2hvICIgJChJTlNUQUxMX1BST0dSQU1fRU5WKSAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMX1BST0dSQU0pICQkZmlsZXMgJyQoREVTVERJUikkKGJpbmRpcikkJGRpciciOyBcCisJICAgICQoSU5TVEFMTF9QUk9HUkFNX0VOVikgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTF9QUk9HUkFNKSAkJGZpbGVzICIkKERFU1RESVIpJChiaW5kaXIpJCRkaXIiIHx8IGV4aXQgJCQ/OyBcCisJICAgIH0gXAorCTsgZG9uZQorCit1bmluc3RhbGwtYmluUFJPR1JBTVM6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChiaW5fUFJPR1JBTVMpJzsgdGVzdCAtbiAiJChiaW5kaXIpIiB8fCBsaXN0PTsgXAorCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBcCisJICBzZWQgLWUgJ2g7cyxeLiovLCw7cy8kKEVYRUVYVCkkJC8vOyQodHJhbnNmb3JtKScgXAorCSAgICAgIC1lICdzLyQkLyQoRVhFRVhUKS8nIGA7IFwKKwl0ZXN0IC1uICIkJGxpc3QiIHx8IGV4aXQgMDsgXAorCWVjaG8gIiAoIGNkICckKERFU1RESVIpJChiaW5kaXIpJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKKwljZCAiJChERVNURElSKSQoYmluZGlyKSIgJiYgcm0gLWYgJCRmaWxlcworCitjbGVhbi1iaW5QUk9HUkFNUzoKKwlAbGlzdD0nJChiaW5fUFJPR1JBTVMpJzsgdGVzdCAtbiAiJCRsaXN0IiB8fCBleGl0IDA7IFwKKwllY2hvICIgcm0gLWYiICQkbGlzdDsgXAorCXJtIC1mICQkbGlzdCB8fCBleGl0ICQkPzsgXAorCXRlc3QgLW4gIiQoRVhFRVhUKSIgfHwgZXhpdCAwOyBcCisJbGlzdD1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkICdzLyQoRVhFRVhUKSQkLy8nYDsgXAorCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCisJcm0gLWYgJCRsaXN0CithdmFoaS1icm93c2UkKEVYRUVYVCk6ICQoYXZhaGlfYnJvd3NlX09CSkVDVFMpICQoYXZhaGlfYnJvd3NlX0RFUEVOREVOQ0lFUykgJChFWFRSQV9hdmFoaV9icm93c2VfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgYXZhaGktYnJvd3NlJChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChhdmFoaV9icm93c2VfTElOSykgJChhdmFoaV9icm93c2VfT0JKRUNUUykgJChhdmFoaV9icm93c2VfTERBREQpICQoTElCUykKK2F2YWhpLXB1Ymxpc2gkKEVYRUVYVCk6ICQoYXZhaGlfcHVibGlzaF9PQkpFQ1RTKSAkKGF2YWhpX3B1Ymxpc2hfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2F2YWhpX3B1Ymxpc2hfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgYXZhaGktcHVibGlzaCQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQoYXZhaGlfcHVibGlzaF9MSU5LKSAkKGF2YWhpX3B1Ymxpc2hfT0JKRUNUUykgJChhdmFoaV9wdWJsaXNoX0xEQUREKSAkKExJQlMpCithdmFoaS1yZXNvbHZlJChFWEVFWFQpOiAkKGF2YWhpX3Jlc29sdmVfT0JKRUNUUykgJChhdmFoaV9yZXNvbHZlX0RFUEVOREVOQ0lFUykgJChFWFRSQV9hdmFoaV9yZXNvbHZlX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGF2YWhpLXJlc29sdmUkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKGF2YWhpX3Jlc29sdmVfTElOSykgJChhdmFoaV9yZXNvbHZlX09CSkVDVFMpICQoYXZhaGlfcmVzb2x2ZV9MREFERCkgJChMSUJTKQorYXZhaGktc2V0LWhvc3QtbmFtZSQoRVhFRVhUKTogJChhdmFoaV9zZXRfaG9zdF9uYW1lX09CSkVDVFMpICQoYXZhaGlfc2V0X2hvc3RfbmFtZV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfYXZhaGlfc2V0X2hvc3RfbmFtZV9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBhdmFoaS1zZXQtaG9zdC1uYW1lJChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChhdmFoaV9zZXRfaG9zdF9uYW1lX0xJTkspICQoYXZhaGlfc2V0X2hvc3RfbmFtZV9PQkpFQ1RTKSAkKGF2YWhpX3NldF9ob3N0X25hbWVfTERBREQpICQoTElCUykKKworbW9zdGx5Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi4kKE9CSkVYVCkKKworZGlzdGNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICoudGFiLmMKKworQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2F2YWhpX2Jyb3dzZS1hdmFoaS1icm93c2UuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2F2YWhpX2Jyb3dzZS1zaWdpbnQuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2F2YWhpX2Jyb3dzZS1zdGRiLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9hdmFoaV9wdWJsaXNoLWF2YWhpLXB1Ymxpc2guUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2F2YWhpX3B1Ymxpc2gtc2lnaW50LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9hdmFoaV9yZXNvbHZlLWF2YWhpLXJlc29sdmUuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2F2YWhpX3Jlc29sdmUtc2lnaW50LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9hdmFoaV9zZXRfaG9zdF9uYW1lLWF2YWhpLXNldC1ob3N0LW5hbWUuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2F2YWhpX3NldF9ob3N0X25hbWUtc2lnaW50LlBvQGFtX19xdW90ZUAKKworLmMubzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgJDwKKworLmMub2JqOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIGAkKENZR1BBVEhfVykgJyQ8J2AKKworLmMubG86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8CisKK2F2YWhpX2Jyb3dzZS1hdmFoaS1icm93c2UubzogYXZhaGktYnJvd3NlLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9icm93c2VfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGF2YWhpX2Jyb3dzZS1hdmFoaS1icm93c2UubyAtTUQgLU1QIC1NRiAkKERFUERJUikvYXZhaGlfYnJvd3NlLWF2YWhpLWJyb3dzZS5UcG8gLWMgLW8gYXZhaGlfYnJvd3NlLWF2YWhpLWJyb3dzZS5vIGB0ZXN0IC1mICdhdmFoaS1icm93c2UuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXZhaGktYnJvd3NlLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2F2YWhpX2Jyb3dzZS1hdmFoaS1icm93c2UuVHBvICQoREVQRElSKS9hdmFoaV9icm93c2UtYXZhaGktYnJvd3NlLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXZhaGktYnJvd3NlLmMnIG9iamVjdD0nYXZhaGlfYnJvd3NlLWF2YWhpLWJyb3dzZS5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9icm93c2VfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYXZhaGlfYnJvd3NlLWF2YWhpLWJyb3dzZS5vIGB0ZXN0IC1mICdhdmFoaS1icm93c2UuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXZhaGktYnJvd3NlLmMKKworYXZhaGlfYnJvd3NlLWF2YWhpLWJyb3dzZS5vYmo6IGF2YWhpLWJyb3dzZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfYnJvd3NlX0NGTEFHUykgJChDRkxBR1MpIC1NVCBhdmFoaV9icm93c2UtYXZhaGktYnJvd3NlLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvYXZhaGlfYnJvd3NlLWF2YWhpLWJyb3dzZS5UcG8gLWMgLW8gYXZhaGlfYnJvd3NlLWF2YWhpLWJyb3dzZS5vYmogYGlmIHRlc3QgLWYgJ2F2YWhpLWJyb3dzZS5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2F2YWhpLWJyb3dzZS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9hdmFoaS1icm93c2UuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYXZhaGlfYnJvd3NlLWF2YWhpLWJyb3dzZS5UcG8gJChERVBESVIpL2F2YWhpX2Jyb3dzZS1hdmFoaS1icm93c2UuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhdmFoaS1icm93c2UuYycgb2JqZWN0PSdhdmFoaV9icm93c2UtYXZhaGktYnJvd3NlLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfYnJvd3NlX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGF2YWhpX2Jyb3dzZS1hdmFoaS1icm93c2Uub2JqIGBpZiB0ZXN0IC1mICdhdmFoaS1icm93c2UuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdhdmFoaS1icm93c2UuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvYXZhaGktYnJvd3NlLmMnOyBmaWAKKworYXZhaGlfYnJvd3NlLXNpZ2ludC5vOiBzaWdpbnQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX2Jyb3dzZV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYXZhaGlfYnJvd3NlLXNpZ2ludC5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9hdmFoaV9icm93c2Utc2lnaW50LlRwbyAtYyAtbyBhdmFoaV9icm93c2Utc2lnaW50Lm8gYHRlc3QgLWYgJ3NpZ2ludC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzaWdpbnQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYXZhaGlfYnJvd3NlLXNpZ2ludC5UcG8gJChERVBESVIpL2F2YWhpX2Jyb3dzZS1zaWdpbnQuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdzaWdpbnQuYycgb2JqZWN0PSdhdmFoaV9icm93c2Utc2lnaW50Lm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX2Jyb3dzZV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhdmFoaV9icm93c2Utc2lnaW50Lm8gYHRlc3QgLWYgJ3NpZ2ludC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzaWdpbnQuYworCithdmFoaV9icm93c2Utc2lnaW50Lm9iajogc2lnaW50LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9icm93c2VfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGF2YWhpX2Jyb3dzZS1zaWdpbnQub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9hdmFoaV9icm93c2Utc2lnaW50LlRwbyAtYyAtbyBhdmFoaV9icm93c2Utc2lnaW50Lm9iaiBgaWYgdGVzdCAtZiAnc2lnaW50LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnc2lnaW50LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3NpZ2ludC5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9hdmFoaV9icm93c2Utc2lnaW50LlRwbyAkKERFUERJUikvYXZhaGlfYnJvd3NlLXNpZ2ludC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3NpZ2ludC5jJyBvYmplY3Q9J2F2YWhpX2Jyb3dzZS1zaWdpbnQub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9icm93c2VfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYXZhaGlfYnJvd3NlLXNpZ2ludC5vYmogYGlmIHRlc3QgLWYgJ3NpZ2ludC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3NpZ2ludC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9zaWdpbnQuYyc7IGZpYAorCithdmFoaV9icm93c2Utc3RkYi5vOiBzdGRiLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9icm93c2VfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGF2YWhpX2Jyb3dzZS1zdGRiLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2F2YWhpX2Jyb3dzZS1zdGRiLlRwbyAtYyAtbyBhdmFoaV9icm93c2Utc3RkYi5vIGB0ZXN0IC1mICdzdGRiLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHN0ZGIuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYXZhaGlfYnJvd3NlLXN0ZGIuVHBvICQoREVQRElSKS9hdmFoaV9icm93c2Utc3RkYi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3N0ZGIuYycgb2JqZWN0PSdhdmFoaV9icm93c2Utc3RkYi5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9icm93c2VfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYXZhaGlfYnJvd3NlLXN0ZGIubyBgdGVzdCAtZiAnc3RkYi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzdGRiLmMKKworYXZhaGlfYnJvd3NlLXN0ZGIub2JqOiBzdGRiLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9icm93c2VfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGF2YWhpX2Jyb3dzZS1zdGRiLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvYXZhaGlfYnJvd3NlLXN0ZGIuVHBvIC1jIC1vIGF2YWhpX2Jyb3dzZS1zdGRiLm9iaiBgaWYgdGVzdCAtZiAnc3RkYi5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3N0ZGIuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2Rpcikvc3RkYi5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9hdmFoaV9icm93c2Utc3RkYi5UcG8gJChERVBESVIpL2F2YWhpX2Jyb3dzZS1zdGRiLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nc3RkYi5jJyBvYmplY3Q9J2F2YWhpX2Jyb3dzZS1zdGRiLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfYnJvd3NlX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGF2YWhpX2Jyb3dzZS1zdGRiLm9iaiBgaWYgdGVzdCAtZiAnc3RkYi5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3N0ZGIuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2Rpcikvc3RkYi5jJzsgZmlgCisKK2F2YWhpX3B1Ymxpc2gtYXZhaGktcHVibGlzaC5vOiBhdmFoaS1wdWJsaXNoLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9wdWJsaXNoX0NGTEFHUykgJChDRkxBR1MpIC1NVCBhdmFoaV9wdWJsaXNoLWF2YWhpLXB1Ymxpc2gubyAtTUQgLU1QIC1NRiAkKERFUERJUikvYXZhaGlfcHVibGlzaC1hdmFoaS1wdWJsaXNoLlRwbyAtYyAtbyBhdmFoaV9wdWJsaXNoLWF2YWhpLXB1Ymxpc2gubyBgdGVzdCAtZiAnYXZhaGktcHVibGlzaC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhdmFoaS1wdWJsaXNoLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2F2YWhpX3B1Ymxpc2gtYXZhaGktcHVibGlzaC5UcG8gJChERVBESVIpL2F2YWhpX3B1Ymxpc2gtYXZhaGktcHVibGlzaC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2F2YWhpLXB1Ymxpc2guYycgb2JqZWN0PSdhdmFoaV9wdWJsaXNoLWF2YWhpLXB1Ymxpc2gubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfcHVibGlzaF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhdmFoaV9wdWJsaXNoLWF2YWhpLXB1Ymxpc2gubyBgdGVzdCAtZiAnYXZhaGktcHVibGlzaC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhdmFoaS1wdWJsaXNoLmMKKworYXZhaGlfcHVibGlzaC1hdmFoaS1wdWJsaXNoLm9iajogYXZhaGktcHVibGlzaC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfcHVibGlzaF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYXZhaGlfcHVibGlzaC1hdmFoaS1wdWJsaXNoLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvYXZhaGlfcHVibGlzaC1hdmFoaS1wdWJsaXNoLlRwbyAtYyAtbyBhdmFoaV9wdWJsaXNoLWF2YWhpLXB1Ymxpc2gub2JqIGBpZiB0ZXN0IC1mICdhdmFoaS1wdWJsaXNoLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnYXZhaGktcHVibGlzaC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9hdmFoaS1wdWJsaXNoLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2F2YWhpX3B1Ymxpc2gtYXZhaGktcHVibGlzaC5UcG8gJChERVBESVIpL2F2YWhpX3B1Ymxpc2gtYXZhaGktcHVibGlzaC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2F2YWhpLXB1Ymxpc2guYycgb2JqZWN0PSdhdmFoaV9wdWJsaXNoLWF2YWhpLXB1Ymxpc2gub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9wdWJsaXNoX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGF2YWhpX3B1Ymxpc2gtYXZhaGktcHVibGlzaC5vYmogYGlmIHRlc3QgLWYgJ2F2YWhpLXB1Ymxpc2guYyc7IHRoZW4gJChDWUdQQVRIX1cpICdhdmFoaS1wdWJsaXNoLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2F2YWhpLXB1Ymxpc2guYyc7IGZpYAorCithdmFoaV9wdWJsaXNoLXNpZ2ludC5vOiBzaWdpbnQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX3B1Ymxpc2hfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGF2YWhpX3B1Ymxpc2gtc2lnaW50Lm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2F2YWhpX3B1Ymxpc2gtc2lnaW50LlRwbyAtYyAtbyBhdmFoaV9wdWJsaXNoLXNpZ2ludC5vIGB0ZXN0IC1mICdzaWdpbnQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc2lnaW50LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2F2YWhpX3B1Ymxpc2gtc2lnaW50LlRwbyAkKERFUERJUikvYXZhaGlfcHVibGlzaC1zaWdpbnQuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdzaWdpbnQuYycgb2JqZWN0PSdhdmFoaV9wdWJsaXNoLXNpZ2ludC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9wdWJsaXNoX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGF2YWhpX3B1Ymxpc2gtc2lnaW50Lm8gYHRlc3QgLWYgJ3NpZ2ludC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzaWdpbnQuYworCithdmFoaV9wdWJsaXNoLXNpZ2ludC5vYmo6IHNpZ2ludC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfcHVibGlzaF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYXZhaGlfcHVibGlzaC1zaWdpbnQub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9hdmFoaV9wdWJsaXNoLXNpZ2ludC5UcG8gLWMgLW8gYXZhaGlfcHVibGlzaC1zaWdpbnQub2JqIGBpZiB0ZXN0IC1mICdzaWdpbnQuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdzaWdpbnQuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2Rpcikvc2lnaW50LmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2F2YWhpX3B1Ymxpc2gtc2lnaW50LlRwbyAkKERFUERJUikvYXZhaGlfcHVibGlzaC1zaWdpbnQuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdzaWdpbnQuYycgb2JqZWN0PSdhdmFoaV9wdWJsaXNoLXNpZ2ludC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX3B1Ymxpc2hfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYXZhaGlfcHVibGlzaC1zaWdpbnQub2JqIGBpZiB0ZXN0IC1mICdzaWdpbnQuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdzaWdpbnQuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2Rpcikvc2lnaW50LmMnOyBmaWAKKworYXZhaGlfcmVzb2x2ZS1hdmFoaS1yZXNvbHZlLm86IGF2YWhpLXJlc29sdmUuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX3Jlc29sdmVfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGF2YWhpX3Jlc29sdmUtYXZhaGktcmVzb2x2ZS5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9hdmFoaV9yZXNvbHZlLWF2YWhpLXJlc29sdmUuVHBvIC1jIC1vIGF2YWhpX3Jlc29sdmUtYXZhaGktcmVzb2x2ZS5vIGB0ZXN0IC1mICdhdmFoaS1yZXNvbHZlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGF2YWhpLXJlc29sdmUuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYXZhaGlfcmVzb2x2ZS1hdmFoaS1yZXNvbHZlLlRwbyAkKERFUERJUikvYXZhaGlfcmVzb2x2ZS1hdmFoaS1yZXNvbHZlLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXZhaGktcmVzb2x2ZS5jJyBvYmplY3Q9J2F2YWhpX3Jlc29sdmUtYXZhaGktcmVzb2x2ZS5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9yZXNvbHZlX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGF2YWhpX3Jlc29sdmUtYXZhaGktcmVzb2x2ZS5vIGB0ZXN0IC1mICdhdmFoaS1yZXNvbHZlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGF2YWhpLXJlc29sdmUuYworCithdmFoaV9yZXNvbHZlLWF2YWhpLXJlc29sdmUub2JqOiBhdmFoaS1yZXNvbHZlLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9yZXNvbHZlX0NGTEFHUykgJChDRkxBR1MpIC1NVCBhdmFoaV9yZXNvbHZlLWF2YWhpLXJlc29sdmUub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9hdmFoaV9yZXNvbHZlLWF2YWhpLXJlc29sdmUuVHBvIC1jIC1vIGF2YWhpX3Jlc29sdmUtYXZhaGktcmVzb2x2ZS5vYmogYGlmIHRlc3QgLWYgJ2F2YWhpLXJlc29sdmUuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdhdmFoaS1yZXNvbHZlLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2F2YWhpLXJlc29sdmUuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYXZhaGlfcmVzb2x2ZS1hdmFoaS1yZXNvbHZlLlRwbyAkKERFUERJUikvYXZhaGlfcmVzb2x2ZS1hdmFoaS1yZXNvbHZlLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXZhaGktcmVzb2x2ZS5jJyBvYmplY3Q9J2F2YWhpX3Jlc29sdmUtYXZhaGktcmVzb2x2ZS5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX3Jlc29sdmVfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYXZhaGlfcmVzb2x2ZS1hdmFoaS1yZXNvbHZlLm9iaiBgaWYgdGVzdCAtZiAnYXZhaGktcmVzb2x2ZS5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2F2YWhpLXJlc29sdmUuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvYXZhaGktcmVzb2x2ZS5jJzsgZmlgCisKK2F2YWhpX3Jlc29sdmUtc2lnaW50Lm86IHNpZ2ludC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfcmVzb2x2ZV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYXZhaGlfcmVzb2x2ZS1zaWdpbnQubyAtTUQgLU1QIC1NRiAkKERFUERJUikvYXZhaGlfcmVzb2x2ZS1zaWdpbnQuVHBvIC1jIC1vIGF2YWhpX3Jlc29sdmUtc2lnaW50Lm8gYHRlc3QgLWYgJ3NpZ2ludC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzaWdpbnQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYXZhaGlfcmVzb2x2ZS1zaWdpbnQuVHBvICQoREVQRElSKS9hdmFoaV9yZXNvbHZlLXNpZ2ludC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3NpZ2ludC5jJyBvYmplY3Q9J2F2YWhpX3Jlc29sdmUtc2lnaW50Lm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX3Jlc29sdmVfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYXZhaGlfcmVzb2x2ZS1zaWdpbnQubyBgdGVzdCAtZiAnc2lnaW50LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNpZ2ludC5jCisKK2F2YWhpX3Jlc29sdmUtc2lnaW50Lm9iajogc2lnaW50LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9yZXNvbHZlX0NGTEFHUykgJChDRkxBR1MpIC1NVCBhdmFoaV9yZXNvbHZlLXNpZ2ludC5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2F2YWhpX3Jlc29sdmUtc2lnaW50LlRwbyAtYyAtbyBhdmFoaV9yZXNvbHZlLXNpZ2ludC5vYmogYGlmIHRlc3QgLWYgJ3NpZ2ludC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3NpZ2ludC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9zaWdpbnQuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvYXZhaGlfcmVzb2x2ZS1zaWdpbnQuVHBvICQoREVQRElSKS9hdmFoaV9yZXNvbHZlLXNpZ2ludC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3NpZ2ludC5jJyBvYmplY3Q9J2F2YWhpX3Jlc29sdmUtc2lnaW50Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfcmVzb2x2ZV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhdmFoaV9yZXNvbHZlLXNpZ2ludC5vYmogYGlmIHRlc3QgLWYgJ3NpZ2ludC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3NpZ2ludC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9zaWdpbnQuYyc7IGZpYAorCithdmFoaV9zZXRfaG9zdF9uYW1lLWF2YWhpLXNldC1ob3N0LW5hbWUubzogYXZhaGktc2V0LWhvc3QtbmFtZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfc2V0X2hvc3RfbmFtZV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgYXZhaGlfc2V0X2hvc3RfbmFtZS1hdmFoaS1zZXQtaG9zdC1uYW1lLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2F2YWhpX3NldF9ob3N0X25hbWUtYXZhaGktc2V0LWhvc3QtbmFtZS5UcG8gLWMgLW8gYXZhaGlfc2V0X2hvc3RfbmFtZS1hdmFoaS1zZXQtaG9zdC1uYW1lLm8gYHRlc3QgLWYgJ2F2YWhpLXNldC1ob3N0LW5hbWUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXZhaGktc2V0LWhvc3QtbmFtZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9hdmFoaV9zZXRfaG9zdF9uYW1lLWF2YWhpLXNldC1ob3N0LW5hbWUuVHBvICQoREVQRElSKS9hdmFoaV9zZXRfaG9zdF9uYW1lLWF2YWhpLXNldC1ob3N0LW5hbWUuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhdmFoaS1zZXQtaG9zdC1uYW1lLmMnIG9iamVjdD0nYXZhaGlfc2V0X2hvc3RfbmFtZS1hdmFoaS1zZXQtaG9zdC1uYW1lLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX3NldF9ob3N0X25hbWVfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gYXZhaGlfc2V0X2hvc3RfbmFtZS1hdmFoaS1zZXQtaG9zdC1uYW1lLm8gYHRlc3QgLWYgJ2F2YWhpLXNldC1ob3N0LW5hbWUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXZhaGktc2V0LWhvc3QtbmFtZS5jCisKK2F2YWhpX3NldF9ob3N0X25hbWUtYXZhaGktc2V0LWhvc3QtbmFtZS5vYmo6IGF2YWhpLXNldC1ob3N0LW5hbWUuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX3NldF9ob3N0X25hbWVfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGF2YWhpX3NldF9ob3N0X25hbWUtYXZhaGktc2V0LWhvc3QtbmFtZS5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2F2YWhpX3NldF9ob3N0X25hbWUtYXZhaGktc2V0LWhvc3QtbmFtZS5UcG8gLWMgLW8gYXZhaGlfc2V0X2hvc3RfbmFtZS1hdmFoaS1zZXQtaG9zdC1uYW1lLm9iaiBgaWYgdGVzdCAtZiAnYXZhaGktc2V0LWhvc3QtbmFtZS5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2F2YWhpLXNldC1ob3N0LW5hbWUuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvYXZhaGktc2V0LWhvc3QtbmFtZS5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9hdmFoaV9zZXRfaG9zdF9uYW1lLWF2YWhpLXNldC1ob3N0LW5hbWUuVHBvICQoREVQRElSKS9hdmFoaV9zZXRfaG9zdF9uYW1lLWF2YWhpLXNldC1ob3N0LW5hbWUuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhdmFoaS1zZXQtaG9zdC1uYW1lLmMnIG9iamVjdD0nYXZhaGlfc2V0X2hvc3RfbmFtZS1hdmFoaS1zZXQtaG9zdC1uYW1lLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfc2V0X2hvc3RfbmFtZV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhdmFoaV9zZXRfaG9zdF9uYW1lLWF2YWhpLXNldC1ob3N0LW5hbWUub2JqIGBpZiB0ZXN0IC1mICdhdmFoaS1zZXQtaG9zdC1uYW1lLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnYXZhaGktc2V0LWhvc3QtbmFtZS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9hdmFoaS1zZXQtaG9zdC1uYW1lLmMnOyBmaWAKKworYXZhaGlfc2V0X2hvc3RfbmFtZS1zaWdpbnQubzogc2lnaW50LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9zZXRfaG9zdF9uYW1lX0NGTEFHUykgJChDRkxBR1MpIC1NVCBhdmFoaV9zZXRfaG9zdF9uYW1lLXNpZ2ludC5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9hdmFoaV9zZXRfaG9zdF9uYW1lLXNpZ2ludC5UcG8gLWMgLW8gYXZhaGlfc2V0X2hvc3RfbmFtZS1zaWdpbnQubyBgdGVzdCAtZiAnc2lnaW50LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNpZ2ludC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9hdmFoaV9zZXRfaG9zdF9uYW1lLXNpZ2ludC5UcG8gJChERVBESVIpL2F2YWhpX3NldF9ob3N0X25hbWUtc2lnaW50LlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nc2lnaW50LmMnIG9iamVjdD0nYXZhaGlfc2V0X2hvc3RfbmFtZS1zaWdpbnQubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoYXZhaGlfc2V0X2hvc3RfbmFtZV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBhdmFoaV9zZXRfaG9zdF9uYW1lLXNpZ2ludC5vIGB0ZXN0IC1mICdzaWdpbnQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc2lnaW50LmMKKworYXZhaGlfc2V0X2hvc3RfbmFtZS1zaWdpbnQub2JqOiBzaWdpbnQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGF2YWhpX3NldF9ob3N0X25hbWVfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGF2YWhpX3NldF9ob3N0X25hbWUtc2lnaW50Lm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvYXZhaGlfc2V0X2hvc3RfbmFtZS1zaWdpbnQuVHBvIC1jIC1vIGF2YWhpX3NldF9ob3N0X25hbWUtc2lnaW50Lm9iaiBgaWYgdGVzdCAtZiAnc2lnaW50LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnc2lnaW50LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3NpZ2ludC5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9hdmFoaV9zZXRfaG9zdF9uYW1lLXNpZ2ludC5UcG8gJChERVBESVIpL2F2YWhpX3NldF9ob3N0X25hbWUtc2lnaW50LlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nc2lnaW50LmMnIG9iamVjdD0nYXZhaGlfc2V0X2hvc3RfbmFtZS1zaWdpbnQub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChhdmFoaV9zZXRfaG9zdF9uYW1lX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGF2YWhpX3NldF9ob3N0X25hbWUtc2lnaW50Lm9iaiBgaWYgdGVzdCAtZiAnc2lnaW50LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnc2lnaW50LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3NpZ2ludC5jJzsgZmlgCisKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJzCisKK0lEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJbWtpZCAtZklEICQkdW5pcXVlCit0YWdzOiBUQUdTCisKK1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJc2V0IHg7IFwKKwloZXJlPWBwd2RgOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXNoaWZ0OyBcCisJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKwkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKKwkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCisJICBlbHNlIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICQkdW5pcXVlOyBcCisJICBmaTsgXAorCWZpCitjdGFnczogQ1RBR1MKK0NUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKKwkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKKwkgICAgICQkdW5pcXVlCisKK0dUQUdTOgorCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCisJICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCisJICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCisKK2Rpc3RjbGVhbi10YWdzOgorCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgXAorCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKKwkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCisJICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAorCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKKwkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKKwkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKKwkJCSAgIHNvcnQgLXVgIDs7IFwKKwllc2FjOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorY2hlY2stYW06IGFsbC1hbQorY2hlY2s6IGNoZWNrLWFtCithbGwtYW06IE1ha2VmaWxlICQoUFJPR1JBTVMpCitpbnN0YWxsZGlyczoKKwlmb3IgZGlyIGluICIkKERFU1RESVIpJChiaW5kaXIpIjsgZG8gXAorCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAorCWRvbmUKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgICAgIGluc3RhbGw7IFwKKwllbHNlIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAorCWZpCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitASEFWRV9EQlVTX0ZBTFNFQGluc3RhbGwtZXhlYy1sb2NhbDoKK2NsZWFuOiBjbGVhbi1hbQorCitjbGVhbi1hbTogY2xlYW4tYmluUFJPR1JBTVMgY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIG1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1kdmktYW06CisKK2luc3RhbGwtZXhlYy1hbTogaW5zdGFsbC1iaW5QUk9HUkFNUyBpbnN0YWxsLWV4ZWMtbG9jYWwKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtYmluUFJPR1JBTVMKKworLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAorCisuUEhPTlk6IENUQUdTIEdUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tYmluUFJPR1JBTVMgXAorCWNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjdGFncyBkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgXAorCWRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIFwKKwlkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gXAorCWluc3RhbGwtYmluUFJPR1JBTVMgaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBcCisJaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWV4ZWMtbG9jYWwgXAorCWluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBcCisJaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBcCisJaW5zdGFsbC1wcy1hbSBpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gXAorCWluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIFwKKwltb3N0bHljbGVhbiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHVuaW5zdGFsbCBcCisJdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1iaW5QUk9HUkFNUworCisKK0BIQVZFX0RCVVNfVFJVRUBpbnN0YWxsLWV4ZWMtbG9jYWw6CitASEFWRV9EQlVTX1RSVUVACWNkICQoREVTVERJUikvJChiaW5kaXIpICYmIFwKK0BIQVZFX0RCVVNfVFJVRUAJCXJtIC1mIGF2YWhpLXJlc29sdmUtaG9zdC1uYW1lIGF2YWhpLXJlc29sdmUtYWRkcmVzcyBhdmFoaS1icm93c2UtZG9tYWlucyBhdmFoaS1wdWJsaXNoLWFkZHJlc3MgYXZhaGktcHVibGlzaC1zZXJ2aWNlICYmIFwKK0BIQVZFX0RCVVNfVFJVRUAJCSQoTE5fUykgYXZhaGktcmVzb2x2ZSBhdmFoaS1yZXNvbHZlLWhvc3QtbmFtZSAmJiBcCitASEFWRV9EQlVTX1RSVUVACQkkKExOX1MpIGF2YWhpLXJlc29sdmUgYXZhaGktcmVzb2x2ZS1hZGRyZXNzICYmIFwKK0BIQVZFX0RCVVNfVFJVRUAJCSQoTE5fUykgYXZhaGktYnJvd3NlIGF2YWhpLWJyb3dzZS1kb21haW5zICYmIFwKK0BIQVZFX0RCVVNfVFJVRUAJCSQoTE5fUykgYXZhaGktcHVibGlzaCBhdmFoaS1wdWJsaXNoLWFkZHJlc3MgJiYgXAorQEhBVkVfREJVU19UUlVFQAkJJChMTl9TKSBhdmFoaS1wdWJsaXNoIGF2YWhpLXB1Ymxpc2gtc2VydmljZQorCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmMgYi9hdmFoaS0wLjYuMzEvYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDEwMTg5NQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYwpAQCAtMCwwICsxLDg3OSBAQAorLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGdldG9wdC5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNpbmNsdWRlIDxsb2NhbGUuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL3NpbXBsZS13YXRjaC5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9lcnJvci5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9tYWxsb2MuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vZG9tYWluLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2xsaXN0Lmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2kxOG4uaD4KKyNpbmNsdWRlIDxhdmFoaS1jbGllbnQvY2xpZW50Lmg+CisjaW5jbHVkZSA8YXZhaGktY2xpZW50L2xvb2t1cC5oPgorCisjaW5jbHVkZSAic2lnaW50LmgiCisKKyNpZiBkZWZpbmVkKEhBVkVfR0RCTSkgfHwgZGVmaW5lZChIQVZFX0RCTSkKKyNpbmNsdWRlICJzdGRiLmgiCisjZW5kaWYKKwordHlwZWRlZiBlbnVtIHsKKyAgICBDT01NQU5EX0hFTFAsCisgICAgQ09NTUFORF9WRVJTSU9OLAorICAgIENPTU1BTkRfQlJPV1NFX1NFUlZJQ0VTLAorICAgIENPTU1BTkRfQlJPV1NFX0FMTF9TRVJWSUNFUywKKyAgICBDT01NQU5EX0JST1dTRV9ET01BSU5TCisjaWYgZGVmaW5lZChIQVZFX0dEQk0pIHx8IGRlZmluZWQoSEFWRV9EQk0pCisgICAgLCBDT01NQU5EX0RVTVBfU1REQgorI2VuZGlmCit9IENvbW1hbmQ7CisKK3R5cGVkZWYgc3RydWN0IENvbmZpZyB7CisgICAgaW50IHZlcmJvc2U7CisgICAgaW50IHRlcm1pbmF0ZV9vbl9hbGxfZm9yX25vdzsKKyAgICBpbnQgdGVybWluYXRlX29uX2NhY2hlX2V4aGF1c3RlZDsKKyAgICBjaGFyICpkb21haW47CisgICAgY2hhciAqc3R5cGU7CisgICAgaW50IGlnbm9yZV9sb2NhbDsKKyAgICBDb21tYW5kIGNvbW1hbmQ7CisgICAgaW50IHJlc29sdmU7CisgICAgaW50IG5vX2ZhaWw7CisgICAgaW50IHBhcnNhYmxlOworI2lmIGRlZmluZWQoSEFWRV9HREJNKSB8fCBkZWZpbmVkKEhBVkVfREJNKQorICAgIGludCBub19kYl9sb29rdXA7CisjZW5kaWYKK30gQ29uZmlnOworCit0eXBlZGVmIHN0cnVjdCBTZXJ2aWNlSW5mbyBTZXJ2aWNlSW5mbzsKKworc3RydWN0IFNlcnZpY2VJbmZvIHsKKyAgICBBdmFoaUlmSW5kZXggaW50ZXJmYWNlOworICAgIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2w7CisgICAgY2hhciAqbmFtZSwgKnR5cGUsICpkb21haW47CisKKyAgICBBdmFoaVNlcnZpY2VSZXNvbHZlciAqcmVzb2x2ZXI7CisgICAgQ29uZmlnICpjb25maWc7CisKKyAgICBBVkFISV9MTElTVF9GSUVMRFMoU2VydmljZUluZm8sIGluZm8pOworfTsKKworc3RhdGljIEF2YWhpU2ltcGxlUG9sbCAqc2ltcGxlX3BvbGwgPSBOVUxMOworc3RhdGljIEF2YWhpQ2xpZW50ICpjbGllbnQgPSBOVUxMOworc3RhdGljIGludCBuX2FsbF9mb3Jfbm93ID0gMCwgbl9jYWNoZV9leGhhdXN0ZWQgPSAwLCBuX3Jlc29sdmluZyA9IDA7CitzdGF0aWMgQXZhaGlTdHJpbmdMaXN0ICpicm93c2VkX3R5cGVzID0gTlVMTDsKK3N0YXRpYyBTZXJ2aWNlSW5mbyAqc2VydmljZXMgPSBOVUxMOworc3RhdGljIGludCBuX2NvbHVtbnMgPSA4MDsKK3N0YXRpYyBpbnQgYnJvd3NpbmcgPSAwOworCitzdGF0aWMgdm9pZCBjaGVja190ZXJtaW5hdGUoQ29uZmlnICpjKSB7CisKKyAgICBhc3NlcnQobl9hbGxfZm9yX25vdyA+PSAwKTsKKyAgICBhc3NlcnQobl9jYWNoZV9leGhhdXN0ZWQgPj0gMCk7CisgICAgYXNzZXJ0KG5fcmVzb2x2aW5nID49IDApOworCisgICAgaWYgKG5fYWxsX2Zvcl9ub3cgPD0gMCAmJiBuX3Jlc29sdmluZyA8PSAwKSB7CisKKyAgICAgICAgaWYgKGMtPnZlcmJvc2UgJiYgIWMtPnBhcnNhYmxlKSB7CisgICAgICAgICAgICBwcmludGYoXygiOiBBbGwgZm9yIG5vd1xuIikpOworICAgICAgICAgICAgbl9hbGxfZm9yX25vdysrOyAvKiBNYWtlIHN1cmUgdGhhdCB0aGlzIGV2ZW50IGlzIG5vdCByZXBlYXRlZCAqLworICAgICAgICB9CisKKyAgICAgICAgaWYgKGMtPnRlcm1pbmF0ZV9vbl9hbGxfZm9yX25vdykKKyAgICAgICAgICAgIGF2YWhpX3NpbXBsZV9wb2xsX3F1aXQoc2ltcGxlX3BvbGwpOworICAgIH0KKworICAgIGlmIChuX2NhY2hlX2V4aGF1c3RlZCA8PSAwICYmIG5fcmVzb2x2aW5nIDw9IDApIHsKKworICAgICAgICBpZiAoYy0+dmVyYm9zZSAmJiAhYy0+cGFyc2FibGUpIHsKKyAgICAgICAgICAgIHByaW50ZihfKCI6IENhY2hlIGV4aGF1c3RlZFxuIikpOworICAgICAgICAgICAgbl9jYWNoZV9leGhhdXN0ZWQrKzsgLyogTWFrZSBzdXJlIHRoYXQgdGhpcyBldmVudCBpcyBub3QgcmVwZWF0ZWQgKi8KKyAgICAgICAgfQorCisgICAgICAgIGlmIChjLT50ZXJtaW5hdGVfb25fY2FjaGVfZXhoYXVzdGVkKQorICAgICAgICAgICAgYXZhaGlfc2ltcGxlX3BvbGxfcXVpdChzaW1wbGVfcG9sbCk7CisgICAgfQorfQorCitzdGF0aWMgU2VydmljZUluZm8gKmZpbmRfc2VydmljZShBdmFoaUlmSW5kZXggaW50ZXJmYWNlLCBBdmFoaVByb3RvY29sIHByb3RvY29sLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp0eXBlLCBjb25zdCBjaGFyICpkb21haW4pIHsKKyAgICBTZXJ2aWNlSW5mbyAqaTsKKworICAgIGZvciAoaSA9IHNlcnZpY2VzOyBpOyBpID0gaS0+aW5mb19uZXh0KQorICAgICAgICBpZiAoaS0+aW50ZXJmYWNlID09IGludGVyZmFjZSAmJgorICAgICAgICAgICAgaS0+cHJvdG9jb2wgPT0gcHJvdG9jb2wgJiYKKyAgICAgICAgICAgIHN0cmNhc2VjbXAoaS0+bmFtZSwgbmFtZSkgPT0gMCAmJgorICAgICAgICAgICAgYXZhaGlfZG9tYWluX2VxdWFsKGktPnR5cGUsIHR5cGUpICYmCisgICAgICAgICAgICBhdmFoaV9kb21haW5fZXF1YWwoaS0+ZG9tYWluLCBkb21haW4pKQorCisgICAgICAgICAgICByZXR1cm4gaTsKKworICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgY2hhciAqbWFrZV9wcmludGFibGUoY29uc3QgY2hhciAqZnJvbSwgY2hhciAqdG8pIHsKKyAgICBjb25zdCBjaGFyICpmOworICAgIGNoYXIgKnQ7CisKKyAgICBmb3IgKGYgPSBmcm9tLCB0ID0gdG87ICpmOyBmKyssIHQrKykKKyAgICAgICAgKnQgPSBpc3ByaW50KCpmKSA/ICpmIDogJ18nOworCisgICAgKnQgPSAwOworCisgICAgcmV0dXJuIHRvOworfQorCitzdGF0aWMgdm9pZCBwcmludF9zZXJ2aWNlX2xpbmUoQ29uZmlnICpjb25maWcsIGNoYXIgYywgQXZhaGlJZkluZGV4IGludGVyZmFjZSwgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdHlwZSwgY29uc3QgY2hhciAqZG9tYWluLCBpbnQgbmwpIHsKKyAgICBjaGFyIGlmbmFtZVtJRl9OQU1FU0laRV07CisKKyNpZiBkZWZpbmVkKEhBVkVfR0RCTSkgfHwgZGVmaW5lZChIQVZFX0RCTSkKKyAgICBpZiAoIWNvbmZpZy0+bm9fZGJfbG9va3VwKQorICAgICAgICB0eXBlID0gc3RkYl9sb29rdXAodHlwZSk7CisjZW5kaWYKKworICAgIGlmIChjb25maWctPnBhcnNhYmxlKSB7CisgICAgICAgIGNoYXIgc25bQVZBSElfRE9NQUlOX05BTUVfTUFYXSwgKmUgPSBzbjsKKyAgICAgICAgc2l6ZV90IGwgPSBzaXplb2Yoc24pOworCisgICAgICAgIHByaW50ZigiJWM7JXM7JXM7JXM7JXM7JXMlcyIsCisgICAgICAgICAgICAgICBjLAorICAgICAgICAgICAgICAgaW50ZXJmYWNlICE9IEFWQUhJX0lGX1VOU1BFQyA/IGlmX2luZGV4dG9uYW1lKGludGVyZmFjZSwgaWZuYW1lKSA6IF8oIm4vYSIpLAorICAgICAgICAgICAgICAgcHJvdG9jb2wgIT0gQVZBSElfUFJPVE9fVU5TUEVDID8gYXZhaGlfcHJvdG9fdG9fc3RyaW5nKHByb3RvY29sKSA6IF8oIm4vYSIpLAorICAgICAgICAgICAgICAgYXZhaGlfZXNjYXBlX2xhYmVsKG5hbWUsIHN0cmxlbihuYW1lKSwgJmUsICZsKSwgdHlwZSwgZG9tYWluLCBubCA/ICJcbiIgOiAiIik7CisKKyAgICB9IGVsc2UgeworICAgICAgICBjaGFyIGxhYmVsW0FWQUhJX0xBQkVMX01BWF07CisgICAgICAgIG1ha2VfcHJpbnRhYmxlKG5hbWUsIGxhYmVsKTsKKworICAgICAgICBwcmludGYoIiVjICU2cyAlNHMgJS0qcyAlLTIwcyAlc1xuIiwKKyAgICAgICAgICAgICAgIGMsCisgICAgICAgICAgICAgICBpbnRlcmZhY2UgIT0gQVZBSElfSUZfVU5TUEVDID8gaWZfaW5kZXh0b25hbWUoaW50ZXJmYWNlLCBpZm5hbWUpIDogXygibi9hIiksCisgICAgICAgICAgICAgICBwcm90b2NvbCAhPSBBVkFISV9QUk9UT19VTlNQRUMgPyBhdmFoaV9wcm90b190b19zdHJpbmcocHJvdG9jb2wpIDogXygibi9hIiksCisgICAgICAgICAgICAgICBuX2NvbHVtbnMtMzUsIGxhYmVsLCB0eXBlLCBkb21haW4pOworICAgIH0KKworICAgIGZmbHVzaChzdGRvdXQpOworfQorCitzdGF0aWMgdm9pZCBzZXJ2aWNlX3Jlc29sdmVyX2NhbGxiYWNrKAorICAgIEF2YWhpU2VydmljZVJlc29sdmVyICpyLAorICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsCisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICBBdmFoaVJlc29sdmVyRXZlbnQgZXZlbnQsCisgICAgY29uc3QgY2hhciAqbmFtZSwKKyAgICBjb25zdCBjaGFyICp0eXBlLAorICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwKKyAgICBjb25zdCBjaGFyICpob3N0X25hbWUsCisgICAgY29uc3QgQXZhaGlBZGRyZXNzICphLAorICAgIHVpbnQxNl90IHBvcnQsCisgICAgQXZhaGlTdHJpbmdMaXN0ICp0eHQsCisgICAgQVZBSElfR0NDX1VOVVNFRCBBdmFoaUxvb2t1cFJlc3VsdEZsYWdzIGZsYWdzLAorICAgIHZvaWQgKnVzZXJkYXRhKSB7CisKKyAgICBTZXJ2aWNlSW5mbyAqaSA9IHVzZXJkYXRhOworCisgICAgYXNzZXJ0KHIpOworICAgIGFzc2VydChpKTsKKworICAgIHN3aXRjaCAoZXZlbnQpIHsKKyAgICAgICAgY2FzZSBBVkFISV9SRVNPTFZFUl9GT1VORDogeworICAgICAgICAgICAgY2hhciBhZGRyZXNzW0FWQUhJX0FERFJFU1NfU1RSX01BWF0sICp0OworCisgICAgICAgICAgICBhdmFoaV9hZGRyZXNzX3NucHJpbnQoYWRkcmVzcywgc2l6ZW9mKGFkZHJlc3MpLCBhKTsKKworICAgICAgICAgICAgdCA9IGF2YWhpX3N0cmluZ19saXN0X3RvX3N0cmluZyh0eHQpOworCisgICAgICAgICAgICBwcmludF9zZXJ2aWNlX2xpbmUoaS0+Y29uZmlnLCAnPScsIGludGVyZmFjZSwgcHJvdG9jb2wsIG5hbWUsIHR5cGUsIGRvbWFpbiwgMCk7CisKKyAgICAgICAgICAgIGlmIChpLT5jb25maWctPnBhcnNhYmxlKQorICAgICAgICAgICAgICAgIHByaW50ZigiOyVzOyVzOyV1OyVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICBob3N0X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgIHBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgIHQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHByaW50ZigiICAgaG9zdG5hbWUgPSBbJXNdXG4iCisgICAgICAgICAgICAgICAgICAgICAgICIgICBhZGRyZXNzID0gWyVzXVxuIgorICAgICAgICAgICAgICAgICAgICAgICAiICAgcG9ydCA9IFsldV1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIiAgIHR4dCA9IFslc11cbiIsCisgICAgICAgICAgICAgICAgICAgICAgIGhvc3RfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgdCk7CisKKyAgICAgICAgICAgIGF2YWhpX2ZyZWUodCk7CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBBVkFISV9SRVNPTFZFUl9GQUlMVVJFOgorCisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgXygiRmFpbGVkIHRvIHJlc29sdmUgc2VydmljZSAnJXMnIG9mIHR5cGUgJyVzJyBpbiBkb21haW4gJyVzJzogJXNcbiIpLCBuYW1lLCB0eXBlLCBkb21haW4sIGF2YWhpX3N0cmVycm9yKGF2YWhpX2NsaWVudF9lcnJubyhjbGllbnQpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKworICAgIGF2YWhpX3NlcnZpY2VfcmVzb2x2ZXJfZnJlZShpLT5yZXNvbHZlcik7CisgICAgaS0+cmVzb2x2ZXIgPSBOVUxMOworCisgICAgYXNzZXJ0KG5fcmVzb2x2aW5nID4gMCk7CisgICAgbl9yZXNvbHZpbmctLTsKKyAgICBjaGVja190ZXJtaW5hdGUoaS0+Y29uZmlnKTsKKyAgICBmZmx1c2goc3Rkb3V0KTsKK30KKworc3RhdGljIFNlcnZpY2VJbmZvICphZGRfc2VydmljZShDb25maWcgKmMsIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnR5cGUsIGNvbnN0IGNoYXIgKmRvbWFpbikgeworICAgIFNlcnZpY2VJbmZvICppOworCisgICAgaSA9IGF2YWhpX25ldyhTZXJ2aWNlSW5mbywgMSk7CisKKyAgICBpZiAoYy0+cmVzb2x2ZSkgeworICAgICAgICBpZiAoIShpLT5yZXNvbHZlciA9IGF2YWhpX3NlcnZpY2VfcmVzb2x2ZXJfbmV3KGNsaWVudCwgaW50ZXJmYWNlLCBwcm90b2NvbCwgbmFtZSwgdHlwZSwgZG9tYWluLCBBVkFISV9QUk9UT19VTlNQRUMsIDAsIHNlcnZpY2VfcmVzb2x2ZXJfY2FsbGJhY2ssIGkpKSkgeworICAgICAgICAgICAgYXZhaGlfZnJlZShpKTsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCBfKCJGYWlsZWQgdG8gcmVzb2x2ZSBzZXJ2aWNlICclcycgb2YgdHlwZSAnJXMnIGluIGRvbWFpbiAnJXMnOiAlc1xuIiksIG5hbWUsIHR5cGUsIGRvbWFpbiwgYXZhaGlfc3RyZXJyb3IoYXZhaGlfY2xpZW50X2Vycm5vKGNsaWVudCkpKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgbl9yZXNvbHZpbmcrKzsKKyAgICB9IGVsc2UKKyAgICAgICAgaS0+cmVzb2x2ZXIgPSBOVUxMOworCisgICAgaS0+aW50ZXJmYWNlID0gaW50ZXJmYWNlOworICAgIGktPnByb3RvY29sID0gcHJvdG9jb2w7CisgICAgaS0+bmFtZSA9IGF2YWhpX3N0cmR1cChuYW1lKTsKKyAgICBpLT50eXBlID0gYXZhaGlfc3RyZHVwKHR5cGUpOworICAgIGktPmRvbWFpbiA9IGF2YWhpX3N0cmR1cChkb21haW4pOworICAgIGktPmNvbmZpZyA9IGM7CisKKyAgICBBVkFISV9MTElTVF9QUkVQRU5EKFNlcnZpY2VJbmZvLCBpbmZvLCBzZXJ2aWNlcywgaSk7CisKKyAgICByZXR1cm4gaTsKK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX3NlcnZpY2UoQ29uZmlnICpjLCBTZXJ2aWNlSW5mbyAqaSkgeworICAgIGFzc2VydChjKTsKKyAgICBhc3NlcnQoaSk7CisKKyAgICBBVkFISV9MTElTVF9SRU1PVkUoU2VydmljZUluZm8sIGluZm8sIHNlcnZpY2VzLCBpKTsKKworICAgIGlmIChpLT5yZXNvbHZlcikKKyAgICAgICAgYXZhaGlfc2VydmljZV9yZXNvbHZlcl9mcmVlKGktPnJlc29sdmVyKTsKKworICAgIGF2YWhpX2ZyZWUoaS0+bmFtZSk7CisgICAgYXZhaGlfZnJlZShpLT50eXBlKTsKKyAgICBhdmFoaV9mcmVlKGktPmRvbWFpbik7CisgICAgYXZhaGlfZnJlZShpKTsKK30KKworc3RhdGljIHZvaWQgc2VydmljZV9icm93c2VyX2NhbGxiYWNrKAorICAgIEF2YWhpU2VydmljZUJyb3dzZXIgKmIsCisgICAgQXZhaGlJZkluZGV4IGludGVyZmFjZSwKKyAgICBBdmFoaVByb3RvY29sIHByb3RvY29sLAorICAgIEF2YWhpQnJvd3NlckV2ZW50IGV2ZW50LAorICAgIGNvbnN0IGNoYXIgKm5hbWUsCisgICAgY29uc3QgY2hhciAqdHlwZSwKKyAgICBjb25zdCBjaGFyICpkb21haW4sCisgICAgQXZhaGlMb29rdXBSZXN1bHRGbGFncyBmbGFncywKKyAgICB2b2lkICp1c2VyZGF0YSkgeworCisgICAgQ29uZmlnICpjID0gdXNlcmRhdGE7CisKKyAgICBhc3NlcnQoYik7CisgICAgYXNzZXJ0KGMpOworCisgICAgc3dpdGNoIChldmVudCkgeworICAgICAgICBjYXNlIEFWQUhJX0JST1dTRVJfTkVXOiB7CisgICAgICAgICAgICBpZiAoYy0+aWdub3JlX2xvY2FsICYmIChmbGFncyAmIEFWQUhJX0xPT0tVUF9SRVNVTFRfTE9DQUwpKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBpZiAoZmluZF9zZXJ2aWNlKGludGVyZmFjZSwgcHJvdG9jb2wsIG5hbWUsIHR5cGUsIGRvbWFpbikpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBhZGRfc2VydmljZShjLCBpbnRlcmZhY2UsIHByb3RvY29sLCBuYW1lLCB0eXBlLCBkb21haW4pOworCisgICAgICAgICAgICBwcmludF9zZXJ2aWNlX2xpbmUoYywgJysnLCBpbnRlcmZhY2UsIHByb3RvY29sLCBuYW1lLCB0eXBlLCBkb21haW4sIDEpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgQVZBSElfQlJPV1NFUl9SRU1PVkU6IHsKKyAgICAgICAgICAgIFNlcnZpY2VJbmZvICppbmZvOworCisgICAgICAgICAgICBpZiAoIShpbmZvID0gZmluZF9zZXJ2aWNlKGludGVyZmFjZSwgcHJvdG9jb2wsIG5hbWUsIHR5cGUsIGRvbWFpbikpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgcmVtb3ZlX3NlcnZpY2UoYywgaW5mbyk7CisKKyAgICAgICAgICAgIHByaW50X3NlcnZpY2VfbGluZShjLCAnLScsIGludGVyZmFjZSwgcHJvdG9jb2wsIG5hbWUsIHR5cGUsIGRvbWFpbiwgMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgQVZBSElfQlJPV1NFUl9GQUlMVVJFOgorICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIF8oInNlcnZpY2VfYnJvd3NlciBmYWlsZWQ6ICVzXG4iKSwgYXZhaGlfc3RyZXJyb3IoYXZhaGlfY2xpZW50X2Vycm5vKGNsaWVudCkpKTsKKyAgICAgICAgICAgIGF2YWhpX3NpbXBsZV9wb2xsX3F1aXQoc2ltcGxlX3BvbGwpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBVkFISV9CUk9XU0VSX0NBQ0hFX0VYSEFVU1RFRDoKKyAgICAgICAgICAgIG5fY2FjaGVfZXhoYXVzdGVkIC0tOworICAgICAgICAgICAgY2hlY2tfdGVybWluYXRlKGMpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBVkFISV9CUk9XU0VSX0FMTF9GT1JfTk9XOgorICAgICAgICAgICAgbl9hbGxfZm9yX25vdyAtLTsKKyAgICAgICAgICAgIGNoZWNrX3Rlcm1pbmF0ZShjKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgYnJvd3NlX3NlcnZpY2VfdHlwZShDb25maWcgKmMsIGNvbnN0IGNoYXIgKnN0eXBlLCBjb25zdCBjaGFyICpkb21haW4pIHsKKyAgICBBdmFoaVNlcnZpY2VCcm93c2VyICpiOworICAgIEF2YWhpU3RyaW5nTGlzdCAqaTsKKworICAgIGFzc2VydChjKTsKKyAgICBhc3NlcnQoY2xpZW50KTsKKyAgICBhc3NlcnQoc3R5cGUpOworCisgICAgZm9yIChpID0gYnJvd3NlZF90eXBlczsgaTsgaSA9IGktPm5leHQpCisgICAgICAgIGlmIChhdmFoaV9kb21haW5fZXF1YWwoc3R5cGUsIChjaGFyKikgaS0+dGV4dCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIShiID0gYXZhaGlfc2VydmljZV9icm93c2VyX25ldygKKyAgICAgICAgICAgICAgY2xpZW50LAorICAgICAgICAgICAgICBBVkFISV9JRl9VTlNQRUMsCisgICAgICAgICAgICAgIEFWQUhJX1BST1RPX1VOU1BFQywKKyAgICAgICAgICAgICAgc3R5cGUsCisgICAgICAgICAgICAgIGRvbWFpbiwKKyAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgc2VydmljZV9icm93c2VyX2NhbGxiYWNrLAorICAgICAgICAgICAgICBjKSkpIHsKKworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgXygiYXZhaGlfc2VydmljZV9icm93c2VyX25ldygpIGZhaWxlZDogJXNcbiIpLCBhdmFoaV9zdHJlcnJvcihhdmFoaV9jbGllbnRfZXJybm8oY2xpZW50KSkpOworICAgICAgICBhdmFoaV9zaW1wbGVfcG9sbF9xdWl0KHNpbXBsZV9wb2xsKTsKKyAgICB9CisKKyAgICBicm93c2VkX3R5cGVzID0gYXZhaGlfc3RyaW5nX2xpc3RfYWRkKGJyb3dzZWRfdHlwZXMsIHN0eXBlKTsKKworICAgIG5fYWxsX2Zvcl9ub3crKzsKKyAgICBuX2NhY2hlX2V4aGF1c3RlZCsrOworfQorCitzdGF0aWMgdm9pZCBzZXJ2aWNlX3R5cGVfYnJvd3Nlcl9jYWxsYmFjaygKKyAgICBBdmFoaVNlcnZpY2VUeXBlQnJvd3NlciAqYiwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsCisgICAgQVZBSElfR0NDX1VOVVNFRCBBdmFoaVByb3RvY29sIHByb3RvY29sLAorICAgIEF2YWhpQnJvd3NlckV2ZW50IGV2ZW50LAorICAgIGNvbnN0IGNoYXIgKnR5cGUsCisgICAgY29uc3QgY2hhciAqZG9tYWluLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgQXZhaGlMb29rdXBSZXN1bHRGbGFncyBmbGFncywKKyAgICB2b2lkICp1c2VyZGF0YSkgeworCisgICAgQ29uZmlnICpjID0gdXNlcmRhdGE7CisKKyAgICBhc3NlcnQoYik7CisgICAgYXNzZXJ0KGMpOworCisgICAgc3dpdGNoIChldmVudCkgeworCisgICAgICAgIGNhc2UgQVZBSElfQlJPV1NFUl9ORVc6CisgICAgICAgICAgICBicm93c2Vfc2VydmljZV90eXBlKGMsIHR5cGUsIGRvbWFpbik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFWQUhJX0JST1dTRVJfUkVNT1ZFOgorICAgICAgICAgICAgLyogV2UncmUgZGlydHkgYW5kIG5ldmVyIHJlbW92ZSB0aGUgYnJvd3NlciBhZ2FpbiAqLworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBVkFISV9CUk9XU0VSX0ZBSUxVUkU6CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgXygic2VydmljZV90eXBlX2Jyb3dzZXIgZmFpbGVkOiAlc1xuIiksIGF2YWhpX3N0cmVycm9yKGF2YWhpX2NsaWVudF9lcnJubyhjbGllbnQpKSk7CisgICAgICAgICAgICBhdmFoaV9zaW1wbGVfcG9sbF9xdWl0KHNpbXBsZV9wb2xsKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQVZBSElfQlJPV1NFUl9DQUNIRV9FWEhBVVNURUQ6CisgICAgICAgICAgICBuX2NhY2hlX2V4aGF1c3RlZCAtLTsKKyAgICAgICAgICAgIGNoZWNrX3Rlcm1pbmF0ZShjKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQVZBSElfQlJPV1NFUl9BTExfRk9SX05PVzoKKyAgICAgICAgICAgIG5fYWxsX2Zvcl9ub3cgLS07CisgICAgICAgICAgICBjaGVja190ZXJtaW5hdGUoYyk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGJyb3dzZV9hbGwoQ29uZmlnICpjKSB7CisgICAgQXZhaGlTZXJ2aWNlVHlwZUJyb3dzZXIgKmI7CisKKyAgICBhc3NlcnQoYyk7CisKKyAgICBpZiAoIShiID0gYXZhaGlfc2VydmljZV90eXBlX2Jyb3dzZXJfbmV3KAorICAgICAgICAgICAgICBjbGllbnQsCisgICAgICAgICAgICAgIEFWQUhJX0lGX1VOU1BFQywKKyAgICAgICAgICAgICAgQVZBSElfUFJPVE9fVU5TUEVDLAorICAgICAgICAgICAgICBjLT5kb21haW4sCisgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgIHNlcnZpY2VfdHlwZV9icm93c2VyX2NhbGxiYWNrLAorICAgICAgICAgICAgICBjKSkpIHsKKworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgXygiYXZhaGlfc2VydmljZV90eXBlX2Jyb3dzZXJfbmV3KCkgZmFpbGVkOiAlc1xuIiksIGF2YWhpX3N0cmVycm9yKGF2YWhpX2NsaWVudF9lcnJubyhjbGllbnQpKSk7CisgICAgICAgIGF2YWhpX3NpbXBsZV9wb2xsX3F1aXQoc2ltcGxlX3BvbGwpOworICAgIH0KKworICAgIG5fY2FjaGVfZXhoYXVzdGVkKys7CisgICAgbl9hbGxfZm9yX25vdysrOworfQorCitzdGF0aWMgdm9pZCBkb21haW5fYnJvd3Nlcl9jYWxsYmFjaygKKyAgICBBdmFoaURvbWFpbkJyb3dzZXIgKmIsCisgICAgQVZBSElfR0NDX1VOVVNFRCBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICBBdmFoaUJyb3dzZXJFdmVudCBldmVudCwKKyAgICBjb25zdCBjaGFyICpkb21haW4sCisgICAgQVZBSElfR0NDX1VOVVNFRCBBdmFoaUxvb2t1cFJlc3VsdEZsYWdzIGZsYWdzLAorICAgIHZvaWQgKnVzZXJkYXRhKSB7CisKKyAgICBDb25maWcgKmMgPSB1c2VyZGF0YTsKKworICAgIGFzc2VydChiKTsKKyAgICBhc3NlcnQoYyk7CisKKyAgICBzd2l0Y2ggKGV2ZW50KSB7CisKKyAgICAgICAgY2FzZSBBVkFISV9CUk9XU0VSX05FVzoKKyAgICAgICAgY2FzZSBBVkFISV9CUk9XU0VSX1JFTU9WRTogeworICAgICAgICAgICAgY2hhciBpZm5hbWVbSUZfTkFNRVNJWkVdOworCisgICAgICAgICAgICBpZiAoYy0+cGFyc2FibGUpCisgICAgICAgICAgICAgICAgcHJpbnRmKCIlYzslczslczslc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQgPT0gQVZBSElfQlJPV1NFUl9ORVcgPyAnKycgOiAnLScsCisgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZSAhPSBBVkFISV9JRl9VTlNQRUMgPyBpZl9pbmRleHRvbmFtZShpbnRlcmZhY2UsIGlmbmFtZSkgOiAiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2wgIT0gQVZBSElfUFJPVE9fVU5TUEVDID8gYXZhaGlfcHJvdG9fdG9fc3RyaW5nKHByb3RvY29sKSA6ICIiLAorICAgICAgICAgICAgICAgICAgICAgICBkb21haW4pOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHByaW50ZigiJWMgJTRzICU0cyAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQgPT0gQVZBSElfQlJPV1NFUl9ORVcgPyAnKycgOiAnLScsCisgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZSAhPSBBVkFISV9JRl9VTlNQRUMgPyBpZl9pbmRleHRvbmFtZShpbnRlcmZhY2UsIGlmbmFtZSkgOiAibi9hIiwKKyAgICAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2wgIT0gQVZBSElfUFJPVE9fVU5TUEVDID8gYXZhaGlfcHJvdG9fdG9fc3RyaW5nKHByb3RvY29sKSA6ICJuL2EiLAorICAgICAgICAgICAgICAgICAgICAgICBkb21haW4pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEFWQUhJX0JST1dTRVJfRkFJTFVSRToKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAoImRvbWFpbl9icm93c2VyIGZhaWxlZDogJXNcbiIpLCBhdmFoaV9zdHJlcnJvcihhdmFoaV9jbGllbnRfZXJybm8oY2xpZW50KSkpOworICAgICAgICAgICAgYXZhaGlfc2ltcGxlX3BvbGxfcXVpdChzaW1wbGVfcG9sbCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFWQUhJX0JST1dTRVJfQ0FDSEVfRVhIQVVTVEVEOgorICAgICAgICAgICAgbl9jYWNoZV9leGhhdXN0ZWQgLS07CisgICAgICAgICAgICBjaGVja190ZXJtaW5hdGUoYyk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFWQUhJX0JST1dTRVJfQUxMX0ZPUl9OT1c6CisgICAgICAgICAgICBuX2FsbF9mb3Jfbm93IC0tOworICAgICAgICAgICAgY2hlY2tfdGVybWluYXRlKGMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBicm93c2VfZG9tYWlucyhDb25maWcgKmMpIHsKKyAgICBBdmFoaURvbWFpbkJyb3dzZXIgKmI7CisKKyAgICBhc3NlcnQoYyk7CisKKyAgICBpZiAoIShiID0gYXZhaGlfZG9tYWluX2Jyb3dzZXJfbmV3KAorICAgICAgICAgICAgICBjbGllbnQsCisgICAgICAgICAgICAgIEFWQUhJX0lGX1VOU1BFQywKKyAgICAgICAgICAgICAgQVZBSElfUFJPVE9fVU5TUEVDLAorICAgICAgICAgICAgICBjLT5kb21haW4sCisgICAgICAgICAgICAgIEFWQUhJX0RPTUFJTl9CUk9XU0VSX0JST1dTRSwKKyAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgZG9tYWluX2Jyb3dzZXJfY2FsbGJhY2ssCisgICAgICAgICAgICAgIGMpKSkgeworCisgICAgICAgIGZwcmludGYoc3RkZXJyLCBfKCJhdmFoaV9kb21haW5fYnJvd3Nlcl9uZXcoKSBmYWlsZWQ6ICVzXG4iKSwgYXZhaGlfc3RyZXJyb3IoYXZhaGlfY2xpZW50X2Vycm5vKGNsaWVudCkpKTsKKyAgICAgICAgYXZhaGlfc2ltcGxlX3BvbGxfcXVpdChzaW1wbGVfcG9sbCk7CisgICAgfQorCisgICAgbl9jYWNoZV9leGhhdXN0ZWQrKzsKKyAgICBuX2FsbF9mb3Jfbm93Kys7Cit9CisKK3N0YXRpYyBpbnQgc3RhcnQoQ29uZmlnICpjb25maWcpIHsKKworICAgIGFzc2VydCghYnJvd3NpbmcpOworCisgICAgaWYgKGNvbmZpZy0+dmVyYm9zZSAmJiAhY29uZmlnLT5wYXJzYWJsZSkgeworICAgICAgICBjb25zdCBjaGFyICp2ZXJzaW9uLCAqaG47CisKKyAgICAgICAgaWYgKCEodmVyc2lvbiA9IGF2YWhpX2NsaWVudF9nZXRfdmVyc2lvbl9zdHJpbmcoY2xpZW50KSkpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCBfKCJGYWlsZWQgdG8gcXVlcnkgdmVyc2lvbiBzdHJpbmc6ICVzXG4iKSwgYXZhaGlfc3RyZXJyb3IoYXZhaGlfY2xpZW50X2Vycm5vKGNsaWVudCkpKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghKGhuID0gYXZhaGlfY2xpZW50X2dldF9ob3N0X25hbWVfZnFkbihjbGllbnQpKSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIF8oIkZhaWxlZCB0byBxdWVyeSBob3N0IG5hbWU6ICVzXG4iKSwgYXZhaGlfc3RyZXJyb3IoYXZhaGlfY2xpZW50X2Vycm5vKGNsaWVudCkpKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIGZwcmludGYoc3RkZXJyLCBfKCJTZXJ2ZXIgdmVyc2lvbjogJXM7IEhvc3QgbmFtZTogJXNcbiIpLCB2ZXJzaW9uLCBobik7CisKKyAgICAgICAgaWYgKGNvbmZpZy0+Y29tbWFuZCA9PSBDT01NQU5EX0JST1dTRV9ET01BSU5TKSB7CisgICAgICAgICAgICAvKiBUcmFuc2xhdG9yczogVGhpcyBpcyBhIGNvbHVtbiBoZWFkaW5nIHdpdGggYWJicmV2aWF0aW9ucyBmb3IKKyAgICAgICAgICAgICAqICAgRXZlbnQgKCsvLSksIE5ldHdvcmsgSW50ZXJmYWNlLCBQcm90b2NvbCAoSVB2NC92NiksIERvbWFpbiAqLworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIF8oIkUgSWZjZSBQcm90IERvbWFpblxuIikpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyogVHJhbnNsYXRvcnM6IFRoaXMgaXMgYSBjb2x1bW4gaGVhZGluZyB3aXRoIGFiYnJldmlhdGlvbnMgZm9yCisgICAgICAgICAgICAgKiAgIEV2ZW50ICgrLy0pLCBOZXR3b3JrIEludGVyZmFjZSwgUHJvdG9jb2wgKElQdjQvdjYpLCBEb21haW4gKi8KKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCBfKCJFIElmY2UgUHJvdCAlLSpzICUtMjBzIERvbWFpblxuIiksIG5fY29sdW1ucy0zNSwgXygiTmFtZSIpLCBfKCJUeXBlIikpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGNvbmZpZy0+Y29tbWFuZCA9PSBDT01NQU5EX0JST1dTRV9TRVJWSUNFUykKKyAgICAgICAgYnJvd3NlX3NlcnZpY2VfdHlwZShjb25maWcsIGNvbmZpZy0+c3R5cGUsIGNvbmZpZy0+ZG9tYWluKTsKKyAgICBlbHNlIGlmIChjb25maWctPmNvbW1hbmQgPT0gQ09NTUFORF9CUk9XU0VfQUxMX1NFUlZJQ0VTKQorICAgICAgICBicm93c2VfYWxsKGNvbmZpZyk7CisgICAgZWxzZSB7CisgICAgICAgIGFzc2VydChjb25maWctPmNvbW1hbmQgPT0gQ09NTUFORF9CUk9XU0VfRE9NQUlOUyk7CisgICAgICAgIGJyb3dzZV9kb21haW5zKGNvbmZpZyk7CisgICAgfQorCisgICAgYnJvd3NpbmcgPSAxOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjbGllbnRfY2FsbGJhY2soQXZhaGlDbGllbnQgKmMsIEF2YWhpQ2xpZW50U3RhdGUgc3RhdGUsIEFWQUhJX0dDQ19VTlVTRUQgdm9pZCAqIHVzZXJkYXRhKSB7CisgICAgQ29uZmlnICpjb25maWcgPSB1c2VyZGF0YTsKKworICAgIC8qIFRoaXMgZnVuY3Rpb24gbWlnaHQgYmUgY2FsbGVkIHdoZW4gYXZhaGlfY2xpZW50X25ldygpIGhhcyBub3QKKyAgICAgKiByZXR1cm5lZCB5ZXQuKi8KKyAgICBjbGllbnQgPSBjOworCisgICAgc3dpdGNoIChzdGF0ZSkgeworICAgICAgICBjYXNlIEFWQUhJX0NMSUVOVF9GQUlMVVJFOgorCisgICAgICAgICAgICBpZiAoY29uZmlnLT5ub19mYWlsICYmIGF2YWhpX2NsaWVudF9lcnJubyhjKSA9PSBBVkFISV9FUlJfRElTQ09OTkVDVEVEKSB7CisgICAgICAgICAgICAgICAgaW50IGVycm9yOworCisgICAgICAgICAgICAgICAgLyogV2UgaGF2ZSBiZWVuIGRpc2Nvbm5lY3RlZCwgc28gbGV0IHJlY29ubmVjdCAqLworCisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIF8oIkRpc2Nvbm5lY3RlZCwgcmVjb25uZWN0aW5nIC4uLlxuIikpOworCisgICAgICAgICAgICAgICAgYXZhaGlfY2xpZW50X2ZyZWUoY2xpZW50KTsKKyAgICAgICAgICAgICAgICBjbGllbnQgPSBOVUxMOworCisgICAgICAgICAgICAgICAgYXZhaGlfc3RyaW5nX2xpc3RfZnJlZShicm93c2VkX3R5cGVzKTsKKyAgICAgICAgICAgICAgICBicm93c2VkX3R5cGVzID0gTlVMTDsKKworICAgICAgICAgICAgICAgIHdoaWxlIChzZXJ2aWNlcykKKyAgICAgICAgICAgICAgICAgICAgcmVtb3ZlX3NlcnZpY2UoY29uZmlnLCBzZXJ2aWNlcyk7CisKKyAgICAgICAgICAgICAgICBicm93c2luZyA9IDA7CisKKyAgICAgICAgICAgICAgICBpZiAoIShjbGllbnQgPSBhdmFoaV9jbGllbnRfbmV3KGF2YWhpX3NpbXBsZV9wb2xsX2dldChzaW1wbGVfcG9sbCksIEFWQUhJX0NMSUVOVF9OT19GQUlMLCBjbGllbnRfY2FsbGJhY2ssIGNvbmZpZywgJmVycm9yKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIF8oIkZhaWxlZCB0byBjcmVhdGUgY2xpZW50IG9iamVjdDogJXNcbiIpLCBhdmFoaV9zdHJlcnJvcihlcnJvcikpOworICAgICAgICAgICAgICAgICAgICBhdmFoaV9zaW1wbGVfcG9sbF9xdWl0KHNpbXBsZV9wb2xsKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIF8oIkNsaWVudCBmYWlsdXJlLCBleGl0aW5nOiAlc1xuIiksIGF2YWhpX3N0cmVycm9yKGF2YWhpX2NsaWVudF9lcnJubyhjKSkpOworICAgICAgICAgICAgICAgIGF2YWhpX3NpbXBsZV9wb2xsX3F1aXQoc2ltcGxlX3BvbGwpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFWQUhJX0NMSUVOVF9TX1JFR0lTVEVSSU5HOgorICAgICAgICBjYXNlIEFWQUhJX0NMSUVOVF9TX1JVTk5JTkc6CisgICAgICAgIGNhc2UgQVZBSElfQ0xJRU5UX1NfQ09MTElTSU9OOgorCisgICAgICAgICAgICBpZiAoIWJyb3dzaW5nKQorICAgICAgICAgICAgICAgIGlmIChzdGFydChjb25maWcpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgYXZhaGlfc2ltcGxlX3BvbGxfcXVpdChzaW1wbGVfcG9sbCk7CisKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQVZBSElfQ0xJRU5UX0NPTk5FQ1RJTkc6CisKKyAgICAgICAgICAgIGlmIChjb25maWctPnZlcmJvc2UgJiYgIWNvbmZpZy0+cGFyc2FibGUpCisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIF8oIldhaXRpbmcgZm9yIGRhZW1vbiAuLi5cbiIpKTsKKworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBoZWxwKEZJTEUgKmYsIGNvbnN0IGNoYXIgKmFyZ3YwKSB7CisgICAgaWYgKHN0cnN0cihhcmd2MCwgImRvbWFpbiIpKQorICAgICAgICBmcHJpbnRmKGYsICIlcyBbb3B0aW9uc10gXG5cbiIsIGFyZ3YwKTsKKyAgICBlbHNlCisgICAgICAgIGZwcmludGYoZiwKKyAgICAgICAgICAgICAgICAiJXMgW29wdGlvbnNdIDxzZXJ2aWNlIHR5cGU+XG4iCisgICAgICAgICAgICAgICAgIiVzIFtvcHRpb25zXSAtYVxuIgorICAgICAgICAgICAgICAgICIlcyBbb3B0aW9uc10gLURcbiIKKyNpZiBkZWZpbmVkKEhBVkVfR0RCTSkgfHwgZGVmaW5lZChIQVZFX0RCTSkKKyAgICAgICAgICAgICAgICAiJXMgW29wdGlvbnNdIC1iXG4iCisjZW5kaWYKKyAgICAgICAgICAgICAgICAiXG4iLAorI2lmIGRlZmluZWQoSEFWRV9HREJNKSB8fCBkZWZpbmVkKEhBVkVfREJNKQorICAgICAgICAgICAgICAgIGFyZ3YwLAorI2VuZGlmCisgICAgICAgICAgICAgICAgYXJndjAsIGFyZ3YwLCBhcmd2MCk7CisKKyAgICBmcHJpbnRmKGYsICIlcyVzIiwKKyAgICAgICAgICAgIF8oIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorICAgICAgICAgICAgICAiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFNob3cgdmVyc2lvblxuIgorICAgICAgICAgICAgICAiICAgIC1EIC0tYnJvd3NlLWRvbWFpbnMgIEJyb3dzZSBmb3IgYnJvd3NpbmcgZG9tYWlucyBpbnN0ZWFkIG9mIHNlcnZpY2VzXG4iCisgICAgICAgICAgICAgICIgICAgLWEgLS1hbGwgICAgICAgICAgICAgU2hvdyBhbGwgc2VydmljZXMsIHJlZ2FyZGxlc3Mgb2YgdGhlIHR5cGVcbiIKKyAgICAgICAgICAgICAgIiAgICAtZCAtLWRvbWFpbj1ET01BSU4gICBUaGUgZG9tYWluIHRvIGJyb3dzZSBpblxuIgorICAgICAgICAgICAgICAiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKKyAgICAgICAgICAgICAgIiAgICAtdCAtLXRlcm1pbmF0ZSAgICAgICBUZXJtaW5hdGUgYWZ0ZXIgZHVtcGluZyBhIG1vcmUgb3IgbGVzcyBjb21wbGV0ZSBsaXN0XG4iCisgICAgICAgICAgICAgICIgICAgLWMgLS1jYWNoZSAgICAgICAgICAgVGVybWluYXRlIGFmdGVyIGR1bXBpbmcgYWxsIGVudHJpZXMgZnJvbSB0aGUgY2FjaGVcbiIKKyAgICAgICAgICAgICAgIiAgICAtbCAtLWlnbm9yZS1sb2NhbCAgICBJZ25vcmUgbG9jYWwgc2VydmljZXNcbiIKKyAgICAgICAgICAgICAgIiAgICAtciAtLXJlc29sdmUgICAgICAgICBSZXNvbHZlIHNlcnZpY2VzIGZvdW5kXG4iCisgICAgICAgICAgICAgICIgICAgLWYgLS1uby1mYWlsICAgICAgICAgRG9uJ3QgZmFpbCBpZiB0aGUgZGFlbW9uIGlzIG5vdCBhdmFpbGFibGVcbiIKKyAgICAgICAgICAgICAgIiAgICAtcCAtLXBhcnNhYmxlICAgICAgICBPdXRwdXQgaW4gcGFyc2FibGUgZm9ybWF0XG4iKSwKKyNpZiBkZWZpbmVkKEhBVkVfR0RCTSkgfHwgZGVmaW5lZChIQVZFX0RCTSkKKyAgICAgICAgICAgIF8oIiAgICAtayAtLW5vLWRiLWxvb2t1cCAgICBEb24ndCBsb29rdXAgc2VydmljZSB0eXBlc1xuIgorICAgICAgICAgICAgICAiICAgIC1iIC0tZHVtcC1kYiAgICAgICAgIER1bXAgc2VydmljZSB0eXBlIGRhdGFiYXNlXG4iKQorI2Vsc2UKKyAgICAgICAgICAgICIiCisjZW5kaWYKKyAgICAgICAgICAgICk7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfY29tbWFuZF9saW5lKENvbmZpZyAqYywgY29uc3QgY2hhciAqYXJndjAsIGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKKyAgICBpbnQgbzsKKworICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uIGxvbmdfb3B0aW9uc1tdID0geworICAgICAgICB7ICJoZWxwIiwgICAgICAgICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCAnaCcgfSwKKyAgICAgICAgeyAidmVyc2lvbiIsICAgICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgJ1YnIH0sCisgICAgICAgIHsgImJyb3dzZS1kb21haW5zIiwgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsICdEJyB9LAorICAgICAgICB7ICJkb21haW4iLCAgICAgICAgIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnZCcgfSwKKyAgICAgICAgeyAiYWxsIiwgICAgICAgICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgJ2EnIH0sCisgICAgICAgIHsgInZlcmJvc2UiLCAgICAgICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsICd2JyB9LAorICAgICAgICB7ICJ0ZXJtaW5hdGUiLCAgICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCAndCcgfSwKKyAgICAgICAgeyAiY2FjaGUiLCAgICAgICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgJ2MnIH0sCisgICAgICAgIHsgImlnbm9yZS1sb2NhbCIsICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsICdsJyB9LAorICAgICAgICB7ICJyZXNvbHZlIiwgICAgICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCAncicgfSwKKyAgICAgICAgeyAibm8tZmFpbCIsICAgICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgJ2YnIH0sCisgICAgICAgIHsgInBhcnNhYmxlIiwgICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgJ3AnIH0sCisjaWYgZGVmaW5lZChIQVZFX0dEQk0pIHx8IGRlZmluZWQoSEFWRV9EQk0pCisgICAgICAgIHsgIm5vLWRiLWxvb2t1cCIsICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsICdrJyB9LAorICAgICAgICB7ICJkdW1wLWRiIiwgICAgICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCAnYicgfSwKKyNlbmRpZgorICAgICAgICB7IE5VTEwsIDAsIE5VTEwsIDAgfQorICAgIH07CisKKyAgICBhc3NlcnQoYyk7CisKKyAgICBjLT5jb21tYW5kID0gc3Ryc3RyKGFyZ3YwLCAiZG9tYWluIikgPyBDT01NQU5EX0JST1dTRV9ET01BSU5TIDogQ09NTUFORF9CUk9XU0VfU0VSVklDRVM7CisgICAgYy0+dmVyYm9zZSA9CisgICAgICAgIGMtPnRlcm1pbmF0ZV9vbl9jYWNoZV9leGhhdXN0ZWQgPQorICAgICAgICBjLT50ZXJtaW5hdGVfb25fYWxsX2Zvcl9ub3cgPQorICAgICAgICBjLT5pZ25vcmVfbG9jYWwgPQorICAgICAgICBjLT5yZXNvbHZlID0KKyAgICAgICAgYy0+bm9fZmFpbCA9CisgICAgICAgIGMtPnBhcnNhYmxlID0gMDsKKyAgICBjLT5kb21haW4gPSBjLT5zdHlwZSA9IE5VTEw7CisKKyNpZiBkZWZpbmVkKEhBVkVfR0RCTSkgfHwgZGVmaW5lZChIQVZFX0RCTSkKKyAgICBjLT5ub19kYl9sb29rdXAgPSAwOworI2VuZGlmCisKKyAgICB3aGlsZSAoKG8gPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiaFZkOmF2dGNsckRmcCIKKyNpZiBkZWZpbmVkKEhBVkVfR0RCTSkgfHwgZGVmaW5lZChIQVZFX0RCTSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAia2IiCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIGxvbmdfb3B0aW9ucywgTlVMTCkpID49IDApIHsKKworICAgICAgICBzd2l0Y2gobykgeworICAgICAgICAgICAgY2FzZSAnaCc6CisgICAgICAgICAgICAgICAgYy0+Y29tbWFuZCA9IENPTU1BTkRfSEVMUDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ1YnOgorICAgICAgICAgICAgICAgIGMtPmNvbW1hbmQgPSBDT01NQU5EX1ZFUlNJT047CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdhJzoKKyAgICAgICAgICAgICAgICBjLT5jb21tYW5kID0gQ09NTUFORF9CUk9XU0VfQUxMX1NFUlZJQ0VTOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnRCc6CisgICAgICAgICAgICAgICAgYy0+Y29tbWFuZCA9IENPTU1BTkRfQlJPV1NFX0RPTUFJTlM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdkJzoKKyAgICAgICAgICAgICAgICBhdmFoaV9mcmVlKGMtPmRvbWFpbik7CisgICAgICAgICAgICAgICAgYy0+ZG9tYWluID0gYXZhaGlfc3RyZHVwKG9wdGFyZyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICd2JzoKKyAgICAgICAgICAgICAgICBjLT52ZXJib3NlID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ3QnOgorICAgICAgICAgICAgICAgIGMtPnRlcm1pbmF0ZV9vbl9hbGxfZm9yX25vdyA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdjJzoKKyAgICAgICAgICAgICAgICBjLT50ZXJtaW5hdGVfb25fY2FjaGVfZXhoYXVzdGVkID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ2wnOgorICAgICAgICAgICAgICAgIGMtPmlnbm9yZV9sb2NhbCA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdyJzoKKyAgICAgICAgICAgICAgICBjLT5yZXNvbHZlID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ2YnOgorICAgICAgICAgICAgICAgIGMtPm5vX2ZhaWwgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAncCc6CisgICAgICAgICAgICAgICAgYy0+cGFyc2FibGUgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworI2lmIGRlZmluZWQoSEFWRV9HREJNKSB8fCBkZWZpbmVkKEhBVkVfREJNKQorICAgICAgICAgICAgY2FzZSAnayc6CisgICAgICAgICAgICAgICAgYy0+bm9fZGJfbG9va3VwID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ2InOgorICAgICAgICAgICAgICAgIGMtPmNvbW1hbmQgPSBDT01NQU5EX0RVTVBfU1REQjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoYy0+Y29tbWFuZCA9PSBDT01NQU5EX0JST1dTRV9TRVJWSUNFUykgeworICAgICAgICBpZiAob3B0aW5kID49IGFyZ2MpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCBfKCJUb28gZmV3IGFyZ3VtZW50c1xuIikpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgYy0+c3R5cGUgPSBhdmFoaV9zdHJkdXAoYXJndltvcHRpbmRdKTsKKyAgICAgICAgb3B0aW5kKys7CisgICAgfQorCisgICAgaWYgKG9wdGluZCA8IGFyZ2MpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsIF8oIlRvbyBtYW55IGFyZ3VtZW50c1xuIikpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKKyAgICBpbnQgcmV0ID0gMSwgZXJyb3I7CisgICAgQ29uZmlnIGNvbmZpZzsKKyAgICBjb25zdCBjaGFyICphcmd2MDsKKyAgICBjaGFyICplYzsKKworICAgIGF2YWhpX2luaXRfaTE4bigpOworICAgIHNldGxvY2FsZShMQ19BTEwsICIiKTsKKworICAgIGlmICgoYXJndjAgPSBzdHJyY2hyKGFyZ3ZbMF0sICcvJykpKQorICAgICAgICBhcmd2MCsrOworICAgIGVsc2UKKyAgICAgICAgYXJndjAgPSBhcmd2WzBdOworCisgICAgaWYgKChlYyA9IGdldGVudigiQ09MVU1OUyIpKSkKKyAgICAgICAgbl9jb2x1bW5zID0gYXRvaShlYyk7CisKKyAgICBpZiAobl9jb2x1bW5zIDwgNDApCisgICAgICAgIG5fY29sdW1ucyA9IDQwOworCisgICAgaWYgKHBhcnNlX2NvbW1hbmRfbGluZSgmY29uZmlnLCBhcmd2MCwgYXJnYywgYXJndikgPCAwKQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICBzd2l0Y2ggKGNvbmZpZy5jb21tYW5kKSB7CisgICAgICAgIGNhc2UgQ09NTUFORF9IRUxQOgorICAgICAgICAgICAgaGVscChzdGRvdXQsIGFyZ3YwKTsKKyAgICAgICAgICAgIHJldCA9IDA7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIENPTU1BTkRfVkVSU0lPTjoKKyAgICAgICAgICAgIHByaW50ZigiJXMgIlBBQ0tBR0VfVkVSU0lPTiJcbiIsIGFyZ3YwKTsKKyAgICAgICAgICAgIHJldCA9IDA7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIENPTU1BTkRfQlJPV1NFX1NFUlZJQ0VTOgorICAgICAgICBjYXNlIENPTU1BTkRfQlJPV1NFX0FMTF9TRVJWSUNFUzoKKyAgICAgICAgY2FzZSBDT01NQU5EX0JST1dTRV9ET01BSU5TOgorCisgICAgICAgICAgICBpZiAoIShzaW1wbGVfcG9sbCA9IGF2YWhpX3NpbXBsZV9wb2xsX25ldygpKSkgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCBfKCJGYWlsZWQgdG8gY3JlYXRlIHNpbXBsZSBwb2xsIG9iamVjdC5cbiIpKTsKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChzaWdpbnRfaW5zdGFsbChzaW1wbGVfcG9sbCkgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKworICAgICAgICAgICAgaWYgKCEoY2xpZW50ID0gYXZhaGlfY2xpZW50X25ldyhhdmFoaV9zaW1wbGVfcG9sbF9nZXQoc2ltcGxlX3BvbGwpLCBjb25maWcubm9fZmFpbCA/IEFWQUhJX0NMSUVOVF9OT19GQUlMIDogMCwgY2xpZW50X2NhbGxiYWNrLCAmY29uZmlnLCAmZXJyb3IpKSkgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCBfKCJGYWlsZWQgdG8gY3JlYXRlIGNsaWVudCBvYmplY3Q6ICVzXG4iKSwgYXZhaGlfc3RyZXJyb3IoZXJyb3IpKTsKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGF2YWhpX3NpbXBsZV9wb2xsX2xvb3Aoc2ltcGxlX3BvbGwpOworICAgICAgICAgICAgcmV0ID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworCisjaWYgZGVmaW5lZChIQVZFX0dEQk0pIHx8IGRlZmluZWQoSEFWRV9EQk0pCisgICAgICAgIGNhc2UgQ09NTUFORF9EVU1QX1NUREI6IHsKKyAgICAgICAgICAgIGNoYXIgKnQ7CisgICAgICAgICAgICBzdGRiX3NldGVudCgpOworCisgICAgICAgICAgICB3aGlsZSAoKHQgPSBzdGRiX2dldGVudCgpKSkgeworICAgICAgICAgICAgICAgIGlmIChjb25maWcubm9fZGJfbG9va3VwKQorICAgICAgICAgICAgICAgICAgICBwcmludGYoIiVzXG4iLCB0KTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiJXNcbiIsIHN0ZGJfbG9va3VwKHQpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0ID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisjZW5kaWYKKyAgICB9CisKKworZmFpbDoKKworICAgIHdoaWxlIChzZXJ2aWNlcykKKyAgICAgICAgcmVtb3ZlX3NlcnZpY2UoJmNvbmZpZywgc2VydmljZXMpOworCisgICAgaWYgKGNsaWVudCkKKyAgICAgICAgYXZhaGlfY2xpZW50X2ZyZWUoY2xpZW50KTsKKworICAgIHNpZ2ludF91bmluc3RhbGwoKTsKKworICAgIGlmIChzaW1wbGVfcG9sbCkKKyAgICAgICAgYXZhaGlfc2ltcGxlX3BvbGxfZnJlZShzaW1wbGVfcG9sbCk7CisKKyAgICBhdmFoaV9mcmVlKGNvbmZpZy5kb21haW4pOworICAgIGF2YWhpX2ZyZWUoY29uZmlnLnN0eXBlKTsKKworICAgIGF2YWhpX3N0cmluZ19saXN0X2ZyZWUoYnJvd3NlZF90eXBlcyk7CisKKyNpZiBkZWZpbmVkKEhBVkVfR0RCTSkgfHwgZGVmaW5lZChIQVZFX0RCTSkKKyAgICBzdGRiX3NodXRkb3duKCk7CisjZW5kaWYKKworICAgIHJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jIGIvYXZhaGktMC42LjMxL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODVkZTNhCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYwpAQCAtMCwwICsxLDQyOSBAQAorLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGdldG9wdC5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bG9jYWxlLmg+CisKKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vc2ltcGxlLXdhdGNoLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2Vycm9yLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL21hbGxvYy5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9hbHRlcm5hdGl2ZS5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9pMThuLmg+CisjaW5jbHVkZSA8YXZhaGktY2xpZW50L2NsaWVudC5oPgorI2luY2x1ZGUgPGF2YWhpLWNsaWVudC9wdWJsaXNoLmg+CisKKyNpbmNsdWRlICJzaWdpbnQuaCIKKwordHlwZWRlZiBlbnVtIHsKKyAgICBDT01NQU5EX1VOU1BFQywKKyAgICBDT01NQU5EX0hFTFAsCisgICAgQ09NTUFORF9WRVJTSU9OLAorICAgIENPTU1BTkRfUFVCTElTSF9TRVJWSUNFLAorICAgIENPTU1BTkRfUFVCTElTSF9BRERSRVNTCit9IENvbW1hbmQ7CisKK3R5cGVkZWYgc3RydWN0IENvbmZpZyB7CisgICAgaW50IHZlcmJvc2UsIG5vX2ZhaWwsIG5vX3JldmVyc2U7CisgICAgQ29tbWFuZCBjb21tYW5kOworICAgIGNoYXIgKm5hbWUsICpzdHlwZSwgKmRvbWFpbiwgKmhvc3Q7CisgICAgdWludDE2X3QgcG9ydDsKKyAgICBBdmFoaVN0cmluZ0xpc3QgKnR4dCwgKnN1YnR5cGVzOworICAgIEF2YWhpQWRkcmVzcyBhZGRyZXNzOworfSBDb25maWc7CisKK3N0YXRpYyBBdmFoaVNpbXBsZVBvbGwgKnNpbXBsZV9wb2xsID0gTlVMTDsKK3N0YXRpYyBBdmFoaUNsaWVudCAqY2xpZW50ID0gTlVMTDsKK3N0YXRpYyBBdmFoaUVudHJ5R3JvdXAgKmVudHJ5X2dyb3VwID0gTlVMTDsKKworc3RhdGljIGludCByZWdpc3Rlcl9zdHVmZihDb25maWcgKmNvbmZpZyk7CisKK3N0YXRpYyB2b2lkIGVudHJ5X2dyb3VwX2NhbGxiYWNrKEF2YWhpRW50cnlHcm91cCAqZywgQXZhaGlFbnRyeUdyb3VwU3RhdGUgc3RhdGUsIHZvaWQgKnVzZXJkYXRhKSB7CisgICAgQ29uZmlnICpjb25maWcgPSB1c2VyZGF0YTsKKworICAgIGFzc2VydChnKTsKKyAgICBhc3NlcnQoY29uZmlnKTsKKworICAgIHN3aXRjaCAoc3RhdGUpIHsKKworICAgICAgICBjYXNlIEFWQUhJX0VOVFJZX0dST1VQX0VTVEFCTElTSEVEOgorCisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgXygiRXN0YWJsaXNoZWQgdW5kZXIgbmFtZSAnJXMnXG4iKSwgY29uZmlnLT5uYW1lKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQVZBSElfRU5UUllfR1JPVVBfRkFJTFVSRToKKworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIF8oIkZhaWxlZCB0byByZWdpc3RlcjogJXNcbiIpLCBhdmFoaV9zdHJlcnJvcihhdmFoaV9jbGllbnRfZXJybm8oY2xpZW50KSkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBVkFISV9FTlRSWV9HUk9VUF9DT0xMSVNJT046IHsKKyAgICAgICAgICAgIGNoYXIgKm47CisKKyAgICAgICAgICAgIGlmIChjb25maWctPmNvbW1hbmQgPT0gQ09NTUFORF9QVUJMSVNIX1NFUlZJQ0UpCisgICAgICAgICAgICAgICAgbiA9IGF2YWhpX2FsdGVybmF0aXZlX3NlcnZpY2VfbmFtZShjb25maWctPm5hbWUpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgYXNzZXJ0KGNvbmZpZy0+Y29tbWFuZCA9PSBDT01NQU5EX1BVQkxJU0hfQUREUkVTUyk7CisgICAgICAgICAgICAgICAgbiA9IGF2YWhpX2FsdGVybmF0aXZlX2hvc3RfbmFtZShjb25maWctPm5hbWUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgXygiTmFtZSBjb2xsaXNpb24sIHBpY2tpbmcgbmV3IG5hbWUgJyVzJy5cbiIpLCBuKTsKKyAgICAgICAgICAgIGF2YWhpX2ZyZWUoY29uZmlnLT5uYW1lKTsKKyAgICAgICAgICAgIGNvbmZpZy0+bmFtZSA9IG47CisKKyAgICAgICAgICAgIHJlZ2lzdGVyX3N0dWZmKGNvbmZpZyk7CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBBVkFISV9FTlRSWV9HUk9VUF9VTkNPTU1JVEVEOgorICAgICAgICBjYXNlIEFWQUhJX0VOVFJZX0dST1VQX1JFR0lTVEVSSU5HOgorICAgICAgICAgICAgOworICAgIH0KK30KKworc3RhdGljIGludCByZWdpc3Rlcl9zdHVmZihDb25maWcgKmNvbmZpZykgeworICAgIGFzc2VydChjb25maWcpOworCisgICAgaWYgKCFlbnRyeV9ncm91cCkgeworICAgICAgICBpZiAoIShlbnRyeV9ncm91cCA9IGF2YWhpX2VudHJ5X2dyb3VwX25ldyhjbGllbnQsIGVudHJ5X2dyb3VwX2NhbGxiYWNrLCBjb25maWcpKSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIF8oIkZhaWxlZCB0byBjcmVhdGUgZW50cnkgZ3JvdXA6ICVzXG4iKSwgYXZhaGlfc3RyZXJyb3IoYXZhaGlfY2xpZW50X2Vycm5vKGNsaWVudCkpKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGFzc2VydChhdmFoaV9lbnRyeV9ncm91cF9pc19lbXB0eShlbnRyeV9ncm91cCkpOworCisgICAgaWYgKGNvbmZpZy0+Y29tbWFuZCA9PSBDT01NQU5EX1BVQkxJU0hfQUREUkVTUykgeworCisgICAgICAgIGlmIChhdmFoaV9lbnRyeV9ncm91cF9hZGRfYWRkcmVzcyhlbnRyeV9ncm91cCwgQVZBSElfSUZfVU5TUEVDLCBBVkFISV9QUk9UT19VTlNQRUMsIGNvbmZpZy0+bm9fcmV2ZXJzZSA/IEFWQUhJX1BVQkxJU0hfTk9fUkVWRVJTRSA6IDAsIGNvbmZpZy0+bmFtZSwgJmNvbmZpZy0+YWRkcmVzcykgPCAwKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgXygiRmFpbGVkIHRvIGFkZCBhZGRyZXNzOiAlc1xuIiksIGF2YWhpX3N0cmVycm9yKGF2YWhpX2NsaWVudF9lcnJubyhjbGllbnQpKSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgIH0gZWxzZSB7CisgICAgICAgIEF2YWhpU3RyaW5nTGlzdCAqaTsKKworICAgICAgICBhc3NlcnQoY29uZmlnLT5jb21tYW5kID09IENPTU1BTkRfUFVCTElTSF9TRVJWSUNFKTsKKworICAgICAgICBpZiAoYXZhaGlfZW50cnlfZ3JvdXBfYWRkX3NlcnZpY2Vfc3RybHN0KGVudHJ5X2dyb3VwLCBBVkFISV9JRl9VTlNQRUMsIEFWQUhJX1BST1RPX1VOU1BFQywgMCwgY29uZmlnLT5uYW1lLCBjb25maWctPnN0eXBlLCBjb25maWctPmRvbWFpbiwgY29uZmlnLT5ob3N0LCBjb25maWctPnBvcnQsIGNvbmZpZy0+dHh0KSA8IDApIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCBfKCJGYWlsZWQgdG8gYWRkIHNlcnZpY2U6ICVzXG4iKSwgYXZhaGlfc3RyZXJyb3IoYXZhaGlfY2xpZW50X2Vycm5vKGNsaWVudCkpKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoaSA9IGNvbmZpZy0+c3VidHlwZXM7IGk7IGkgPSBpLT5uZXh0KQorICAgICAgICAgICAgaWYgKGF2YWhpX2VudHJ5X2dyb3VwX2FkZF9zZXJ2aWNlX3N1YnR5cGUoZW50cnlfZ3JvdXAsIEFWQUhJX0lGX1VOU1BFQywgQVZBSElfUFJPVE9fVU5TUEVDLCAwLCBjb25maWctPm5hbWUsIGNvbmZpZy0+c3R5cGUsIGNvbmZpZy0+ZG9tYWluLCAoY2hhciopIGktPnRleHQpIDwgMCkgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCBfKCJGYWlsZWQgdG8gYWRkIHN1YnR5cGUgJyVzJzogJXNcbiIpLCBpLT50ZXh0LCBhdmFoaV9zdHJlcnJvcihhdmFoaV9jbGllbnRfZXJybm8oY2xpZW50KSkpOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICB9CisKKyAgICBhdmFoaV9lbnRyeV9ncm91cF9jb21taXQoZW50cnlfZ3JvdXApOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNsaWVudF9jYWxsYmFjayhBdmFoaUNsaWVudCAqYywgQXZhaGlDbGllbnRTdGF0ZSBzdGF0ZSwgQVZBSElfR0NDX1VOVVNFRCB2b2lkICogdXNlcmRhdGEpIHsKKyAgICBDb25maWcgKmNvbmZpZyA9IHVzZXJkYXRhOworCisgICAgY2xpZW50ID0gYzsKKworICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICAgICAgY2FzZSBBVkFISV9DTElFTlRfRkFJTFVSRToKKworICAgICAgICAgICAgaWYgKGNvbmZpZy0+bm9fZmFpbCAmJiBhdmFoaV9jbGllbnRfZXJybm8oYykgPT0gQVZBSElfRVJSX0RJU0NPTk5FQ1RFRCkgeworICAgICAgICAgICAgICAgIGludCBlcnJvcjsKKworICAgICAgICAgICAgICAgIC8qIFdlIGhhdmUgYmVlbiBkaXNjb25uZWN0ZWQsIHNvIGxldCByZWNvbm5lY3QgKi8KKworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCBfKCJEaXNjb25uZWN0ZWQsIHJlY29ubmVjdGluZyAuLi5cbiIpKTsKKworICAgICAgICAgICAgICAgIGF2YWhpX2NsaWVudF9mcmVlKGNsaWVudCk7CisgICAgICAgICAgICAgICAgY2xpZW50ID0gTlVMTDsKKyAgICAgICAgICAgICAgICBlbnRyeV9ncm91cCA9IE5VTEw7CisKKyAgICAgICAgICAgICAgICBpZiAoIShjbGllbnQgPSBhdmFoaV9jbGllbnRfbmV3KGF2YWhpX3NpbXBsZV9wb2xsX2dldChzaW1wbGVfcG9sbCksIEFWQUhJX0NMSUVOVF9OT19GQUlMLCBjbGllbnRfY2FsbGJhY2ssIGNvbmZpZywgJmVycm9yKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIF8oIkZhaWxlZCB0byBjcmVhdGUgY2xpZW50IG9iamVjdDogJXNcbiIpLCBhdmFoaV9zdHJlcnJvcihlcnJvcikpOworICAgICAgICAgICAgICAgICAgICBhdmFoaV9zaW1wbGVfcG9sbF9xdWl0KHNpbXBsZV9wb2xsKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIF8oIkNsaWVudCBmYWlsdXJlLCBleGl0aW5nOiAlc1xuIiksIGF2YWhpX3N0cmVycm9yKGF2YWhpX2NsaWVudF9lcnJubyhjKSkpOworICAgICAgICAgICAgICAgIGF2YWhpX3NpbXBsZV9wb2xsX3F1aXQoc2ltcGxlX3BvbGwpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFWQUhJX0NMSUVOVF9TX1JVTk5JTkc6CisKKyAgICAgICAgICAgIGlmIChyZWdpc3Rlcl9zdHVmZihjb25maWcpIDwgMCkKKyAgICAgICAgICAgICAgICBhdmFoaV9zaW1wbGVfcG9sbF9xdWl0KHNpbXBsZV9wb2xsKTsKKworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBVkFISV9DTElFTlRfU19DT0xMSVNJT046CisKKyAgICAgICAgICAgIGlmIChjb25maWctPnZlcmJvc2UpCisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIF8oIkhvc3QgbmFtZSBjb25mbGljdFxuIikpOworCisgICAgICAgICAgICAvKiBGYWxsIHRocm91Z2ggKi8KKworICAgICAgICBjYXNlIEFWQUhJX0NMSUVOVF9TX1JFR0lTVEVSSU5HOgorCisgICAgICAgICAgICBpZiAoZW50cnlfZ3JvdXApIHsKKyAgICAgICAgICAgICAgICBhdmFoaV9lbnRyeV9ncm91cF9mcmVlKGVudHJ5X2dyb3VwKTsKKyAgICAgICAgICAgICAgICBlbnRyeV9ncm91cCA9IE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFWQUhJX0NMSUVOVF9DT05ORUNUSU5HOgorCisgICAgICAgICAgICBpZiAoY29uZmlnLT52ZXJib3NlKQorICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCBfKCJXYWl0aW5nIGZvciBkYWVtb24gLi4uXG4iKSk7CisKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICA7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBoZWxwKEZJTEUgKmYsIGNvbnN0IGNoYXIgKmFyZ3YwKSB7CisgICAgZnByaW50ZihmLAorICAgICAgICAgICAgXygiJXMgW29wdGlvbnNdICVzIDxuYW1lPiA8dHlwZT4gPHBvcnQ+IFs8dHh0IC4uLj5dXG4iCisgICAgICAgICAgICAgICIlcyBbb3B0aW9uc10gJXMgPGhvc3QtbmFtZT4gPGFkZHJlc3M+XG5cbiIKKyAgICAgICAgICAgICAgIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorICAgICAgICAgICAgICAiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFNob3cgdmVyc2lvblxuIgorICAgICAgICAgICAgICAiICAgIC1zIC0tc2VydmljZSAgICAgICAgIFB1Ymxpc2ggc2VydmljZVxuIgorICAgICAgICAgICAgICAiICAgIC1hIC0tYWRkcmVzcyAgICAgICAgIFB1Ymxpc2ggYWRkcmVzc1xuIgorICAgICAgICAgICAgICAiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKKyAgICAgICAgICAgICAgIiAgICAtZCAtLWRvbWFpbj1ET01BSU4gICBEb21haW4gdG8gcHVibGlzaCBzZXJ2aWNlIGluXG4iCisgICAgICAgICAgICAgICIgICAgLUggLS1ob3N0PURPTUFJTiAgICAgSG9zdCB3aGVyZSBzZXJ2aWNlIHJlc2lkZXNcbiIKKyAgICAgICAgICAgICAgIiAgICAgICAtLXN1YnR5cGU9U1VCVFlQRSBBbiBhZGRpdGlvbmFsIHN1YnR5cGUgdG8gcmVnaXN0ZXIgdGhpcyBzZXJ2aWNlIHdpdGhcbiIKKyAgICAgICAgICAgICAgIiAgICAtUiAtLW5vLXJldmVyc2UgICAgICBEbyBub3QgcHVibGlzaCByZXZlcnNlIGVudHJ5IHdpdGggYWRkcmVzc1xuIgorICAgICAgICAgICAgICAiICAgIC1mIC0tbm8tZmFpbCAgICAgICAgIERvbid0IGZhaWwgaWYgdGhlIGRhZW1vbiBpcyBub3QgYXZhaWxhYmxlXG4iKSwKKyAgICAgICAgICAgICAgYXJndjAsIHN0cnN0cihhcmd2MCwgInNlcnZpY2UiKSA/ICJbLXNdIiA6ICItcyIsCisgICAgICAgICAgICAgIGFyZ3YwLCBzdHJzdHIoYXJndjAsICJhZGRyZXNzIikgPyAiWy1hXSIgOiAiLWEiKTsKK30KKworc3RhdGljIGludCBwYXJzZV9jb21tYW5kX2xpbmUoQ29uZmlnICpjLCBjb25zdCBjaGFyICphcmd2MCwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkgeworICAgIGludCBvOworCisgICAgZW51bSB7CisgICAgICAgIEFSR19TVUJUWVBFID0gMjU2CisgICAgfTsKKworICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uIGxvbmdfb3B0aW9uc1tdID0geworICAgICAgICB7ICJoZWxwIiwgICAgICAgICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCAnaCcgfSwKKyAgICAgICAgeyAidmVyc2lvbiIsICAgICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgJ1YnIH0sCisgICAgICAgIHsgInNlcnZpY2UiLCAgICAgICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsICdzJyB9LAorICAgICAgICB7ICJhZGRyZXNzIiwgICAgICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCAnYScgfSwKKyAgICAgICAgeyAidmVyYm9zZSIsICAgICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgJ3YnIH0sCisgICAgICAgIHsgImRvbWFpbiIsICAgICAgICAgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdkJyB9LAorICAgICAgICB7ICJob3N0IiwgICAgICAgICAgIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnSCcgfSwKKyAgICAgICAgeyAic3VidHlwZSIsICAgICAgICByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgQVJHX1NVQlRZUEV9LAorICAgICAgICB7ICJuby1yZXZlcnNlIiwgICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCAnUicgfSwKKyAgICAgICAgeyAibm8tZmFpbCIsICAgICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgJ2YnIH0sCisgICAgICAgIHsgTlVMTCwgMCwgTlVMTCwgMCB9CisgICAgfTsKKworICAgIGFzc2VydChjKTsKKworICAgIGMtPmNvbW1hbmQgPSBzdHJzdHIoYXJndjAsICJhZGRyZXNzIikgPyBDT01NQU5EX1BVQkxJU0hfQUREUkVTUyA6IChzdHJzdHIoYXJndjAsICJzZXJ2aWNlIikgPyBDT01NQU5EX1BVQkxJU0hfU0VSVklDRSA6IENPTU1BTkRfVU5TUEVDKTsKKyAgICBjLT52ZXJib3NlID0gYy0+bm9fZmFpbCA9IGMtPm5vX3JldmVyc2UgPSAwOworICAgIGMtPmhvc3QgPSBjLT5uYW1lID0gYy0+ZG9tYWluID0gYy0+c3R5cGUgPSBOVUxMOworICAgIGMtPnBvcnQgPSAwOworICAgIGMtPnR4dCA9IGMtPnN1YnR5cGVzID0gTlVMTDsKKworICAgIHdoaWxlICgobyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJoVnNhdlJkOkg6ZiIsIGxvbmdfb3B0aW9ucywgTlVMTCkpID49IDApIHsKKworICAgICAgICBzd2l0Y2gobykgeworICAgICAgICAgICAgY2FzZSAnaCc6CisgICAgICAgICAgICAgICAgYy0+Y29tbWFuZCA9IENPTU1BTkRfSEVMUDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ1YnOgorICAgICAgICAgICAgICAgIGMtPmNvbW1hbmQgPSBDT01NQU5EX1ZFUlNJT047CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdzJzoKKyAgICAgICAgICAgICAgICBjLT5jb21tYW5kID0gQ09NTUFORF9QVUJMSVNIX1NFUlZJQ0U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdhJzoKKyAgICAgICAgICAgICAgICBjLT5jb21tYW5kID0gQ09NTUFORF9QVUJMSVNIX0FERFJFU1M7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICd2JzoKKyAgICAgICAgICAgICAgICBjLT52ZXJib3NlID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ1InOgorICAgICAgICAgICAgICAgIGMtPm5vX3JldmVyc2UgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnZCc6CisgICAgICAgICAgICAgICAgYXZhaGlfZnJlZShjLT5kb21haW4pOworICAgICAgICAgICAgICAgIGMtPmRvbWFpbiA9IGF2YWhpX3N0cmR1cChvcHRhcmcpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnSCc6CisgICAgICAgICAgICAgICAgYXZhaGlfZnJlZShjLT5ob3N0KTsKKyAgICAgICAgICAgICAgICBjLT5ob3N0ID0gYXZhaGlfc3RyZHVwKG9wdGFyZyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdmJzoKKyAgICAgICAgICAgICAgICBjLT5ub19mYWlsID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQVJHX1NVQlRZUEU6CisgICAgICAgICAgICAgICAgYy0+c3VidHlwZXMgPSBhdmFoaV9zdHJpbmdfbGlzdF9hZGQoYy0+c3VidHlwZXMsIG9wdGFyZyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChjLT5jb21tYW5kID09IENPTU1BTkRfUFVCTElTSF9BRERSRVNTKSB7CisgICAgICAgIGlmIChvcHRpbmQrMiAhPSAgYXJnYykgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIF8oIkJhZCBudW1iZXIgb2YgYXJndW1lbnRzXG4iKSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBhdmFoaV9mcmVlKGMtPm5hbWUpOworICAgICAgICBjLT5uYW1lID0gYXZhaGlfc3RyZHVwKGFyZ3Zbb3B0aW5kXSk7CisgICAgICAgIGF2YWhpX2FkZHJlc3NfcGFyc2UoYXJndltvcHRpbmQrMV0sIEFWQUhJX1BST1RPX1VOU1BFQywgJmMtPmFkZHJlc3MpOworCisgICAgfSBlbHNlIGlmIChjLT5jb21tYW5kID09IENPTU1BTkRfUFVCTElTSF9TRVJWSUNFKSB7CisKKyAgICAgICAgY2hhciAqZTsKKyAgICAgICAgbG9uZyBpbnQgcDsKKyAgICAgICAgaW50IGk7CisKKyAgICAgICAgaWYgKG9wdGluZCszID4gYXJnYykgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIF8oIkJhZCBudW1iZXIgb2YgYXJndW1lbnRzXG4iKSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBjLT5uYW1lID0gYXZhaGlfc3RyZHVwKGFyZ3Zbb3B0aW5kXSk7CisgICAgICAgIGMtPnN0eXBlID0gYXZhaGlfc3RyZHVwKGFyZ3Zbb3B0aW5kKzFdKTsKKworICAgICAgICBlcnJubyA9IDA7CisgICAgICAgIHAgPSBzdHJ0b2woYXJndltvcHRpbmQrMl0sICZlLCAwKTsKKworICAgICAgICBpZiAoZXJybm8gIT0gMCB8fCAqZSB8fCBwIDwgMCB8fCBwID4gMHhGRkZGKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgXygiRmFpbGVkIHRvIHBhcnNlIHBvcnQgbnVtYmVyOiAlc1xuIiksIGFyZ3Zbb3B0aW5kKzJdKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIGMtPnBvcnQgPSBwOworCisgICAgICAgIGZvciAoaSA9IG9wdGluZCszOyBpIDwgYXJnYzsgaSsrKQorICAgICAgICAgICAgYy0+dHh0ID0gYXZhaGlfc3RyaW5nX2xpc3RfYWRkKGMtPnR4dCwgYXJndltpXSk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKKyAgICBpbnQgcmV0ID0gMSwgZXJyb3I7CisgICAgQ29uZmlnIGNvbmZpZzsKKyAgICBjb25zdCBjaGFyICphcmd2MDsKKworICAgIGF2YWhpX2luaXRfaTE4bigpOworICAgIHNldGxvY2FsZShMQ19BTEwsICIiKTsKKworICAgIGlmICgoYXJndjAgPSBzdHJyY2hyKGFyZ3ZbMF0sICcvJykpKQorICAgICAgICBhcmd2MCsrOworICAgIGVsc2UKKyAgICAgICAgYXJndjAgPSBhcmd2WzBdOworCisgICAgaWYgKHBhcnNlX2NvbW1hbmRfbGluZSgmY29uZmlnLCBhcmd2MCwgYXJnYywgYXJndikgPCAwKQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICBzd2l0Y2ggKGNvbmZpZy5jb21tYW5kKSB7CisgICAgICAgIGNhc2UgQ09NTUFORF9VTlNQRUM6CisgICAgICAgICAgICByZXQgPSAxOworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIF8oIk5vIGNvbW1hbmQgc3BlY2lmaWVkLlxuIikpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBDT01NQU5EX0hFTFA6CisgICAgICAgICAgICBoZWxwKHN0ZG91dCwgYXJndjApOworICAgICAgICAgICAgcmV0ID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQ09NTUFORF9WRVJTSU9OOgorICAgICAgICAgICAgcHJpbnRmKCIlcyAiUEFDS0FHRV9WRVJTSU9OIlxuIiwgYXJndjApOworICAgICAgICAgICAgcmV0ID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQ09NTUFORF9QVUJMSVNIX1NFUlZJQ0U6CisgICAgICAgIGNhc2UgQ09NTUFORF9QVUJMSVNIX0FERFJFU1M6CisKKyAgICAgICAgICAgIGlmICghKHNpbXBsZV9wb2xsID0gYXZhaGlfc2ltcGxlX3BvbGxfbmV3KCkpKSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIF8oIkZhaWxlZCB0byBjcmVhdGUgc2ltcGxlIHBvbGwgb2JqZWN0LlxuIikpOworICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHNpZ2ludF9pbnN0YWxsKHNpbXBsZV9wb2xsKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBmYWlsOworCisgICAgICAgICAgICBpZiAoIShjbGllbnQgPSBhdmFoaV9jbGllbnRfbmV3KGF2YWhpX3NpbXBsZV9wb2xsX2dldChzaW1wbGVfcG9sbCksIGNvbmZpZy5ub19mYWlsID8gQVZBSElfQ0xJRU5UX05PX0ZBSUwgOiAwLCBjbGllbnRfY2FsbGJhY2ssICZjb25maWcsICZlcnJvcikpKSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIF8oIkZhaWxlZCB0byBjcmVhdGUgY2xpZW50IG9iamVjdDogJXNcbiIpLCBhdmFoaV9zdHJlcnJvcihlcnJvcikpOworICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGF2YWhpX2NsaWVudF9nZXRfc3RhdGUoY2xpZW50KSAhPSBBVkFISV9DTElFTlRfQ09OTkVDVElORyAmJiBjb25maWcudmVyYm9zZSkgeworICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnZlcnNpb24sICpobjsKKworICAgICAgICAgICAgICAgIGlmICghKHZlcnNpb24gPSBhdmFoaV9jbGllbnRfZ2V0X3ZlcnNpb25fc3RyaW5nKGNsaWVudCkpKSB7CisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCBfKCJGYWlsZWQgdG8gcXVlcnkgdmVyc2lvbiBzdHJpbmc6ICVzXG4iKSwgYXZhaGlfc3RyZXJyb3IoYXZhaGlfY2xpZW50X2Vycm5vKGNsaWVudCkpKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICghKGhuID0gYXZhaGlfY2xpZW50X2dldF9ob3N0X25hbWVfZnFkbihjbGllbnQpKSkgeworICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgXygiRmFpbGVkIHRvIHF1ZXJ5IGhvc3QgbmFtZTogJXNcbiIpLCBhdmFoaV9zdHJlcnJvcihhdmFoaV9jbGllbnRfZXJybm8oY2xpZW50KSkpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIF8oIlNlcnZlciB2ZXJzaW9uOiAlczsgSG9zdCBuYW1lOiAlc1xuIiksIHZlcnNpb24sIGhuKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYXZhaGlfc2ltcGxlX3BvbGxfbG9vcChzaW1wbGVfcG9sbCk7CisgICAgICAgICAgICByZXQgPSAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCitmYWlsOgorCisgICAgaWYgKGNsaWVudCkKKyAgICAgICAgYXZhaGlfY2xpZW50X2ZyZWUoY2xpZW50KTsKKworICAgIHNpZ2ludF91bmluc3RhbGwoKTsKKworICAgIGlmIChzaW1wbGVfcG9sbCkKKyAgICAgICAgYXZhaGlfc2ltcGxlX3BvbGxfZnJlZShzaW1wbGVfcG9sbCk7CisKKyAgICBhdmFoaV9mcmVlKGNvbmZpZy5ob3N0KTsKKyAgICBhdmFoaV9mcmVlKGNvbmZpZy5uYW1lKTsKKyAgICBhdmFoaV9mcmVlKGNvbmZpZy5zdHlwZSk7CisgICAgYXZhaGlfZnJlZShjb25maWcuZG9tYWluKTsKKyAgICBhdmFoaV9zdHJpbmdfbGlzdF9mcmVlKGNvbmZpZy5zdWJ0eXBlcyk7CisgICAgYXZhaGlfc3RyaW5nX2xpc3RfZnJlZShjb25maWcudHh0KTsKKworICAgIHJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jIGIvYXZhaGktMC42LjMxL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjE3MzBiCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYwpAQCAtMCwwICsxLDMzOSBAQAorLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGdldG9wdC5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNpbmNsdWRlIDxsb2NhbGUuaD4KKworI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9zaW1wbGUtd2F0Y2guaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vZXJyb3IuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vbWFsbG9jLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2RvbWFpbi5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9sbGlzdC5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9pMThuLmg+CisjaW5jbHVkZSA8YXZhaGktY2xpZW50L2NsaWVudC5oPgorI2luY2x1ZGUgPGF2YWhpLWNsaWVudC9sb29rdXAuaD4KKworI2luY2x1ZGUgInNpZ2ludC5oIgorCit0eXBlZGVmIGVudW0geworICAgIENPTU1BTkRfVU5TUEVDLAorICAgIENPTU1BTkRfSEVMUCwKKyAgICBDT01NQU5EX1ZFUlNJT04sCisgICAgQ09NTUFORF9SRVNPTFZFX0hPU1RfTkFNRSwKKyAgICBDT01NQU5EX1JFU09MVkVfQUREUkVTUworfSBDb21tYW5kOworCit0eXBlZGVmIHN0cnVjdCBDb25maWcgeworICAgIGludCB2ZXJib3NlOworICAgIENvbW1hbmQgY29tbWFuZDsKKyAgICBBdmFoaVByb3RvY29sIHByb3RvOworfSBDb25maWc7CisKK3N0YXRpYyBBdmFoaVNpbXBsZVBvbGwgKnNpbXBsZV9wb2xsID0gTlVMTDsKK3N0YXRpYyBBdmFoaUNsaWVudCAqY2xpZW50ID0gTlVMTDsKKworc3RhdGljIGludCBuX3Jlc29sdmluZyA9IDA7CisKK3N0YXRpYyB2b2lkIGhvc3RfbmFtZV9yZXNvbHZlcl9jYWxsYmFjaygKKyAgICBBdmFoaUhvc3ROYW1lUmVzb2x2ZXIgKnIsCisgICAgQVZBSElfR0NDX1VOVVNFRCBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICBBdmFoaVJlc29sdmVyRXZlbnQgZXZlbnQsCisgICAgY29uc3QgY2hhciAqbmFtZSwKKyAgICBjb25zdCBBdmFoaUFkZHJlc3MgKmEsCisgICAgQVZBSElfR0NDX1VOVVNFRCBBdmFoaUxvb2t1cFJlc3VsdEZsYWdzIGZsYWdzLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgdm9pZCAqdXNlcmRhdGEpIHsKKworICAgIGFzc2VydChyKTsKKworICAgIHN3aXRjaCAoZXZlbnQpIHsKKyAgICAgICAgY2FzZSBBVkFISV9SRVNPTFZFUl9GT1VORDogeworICAgICAgICAgICAgY2hhciBhZGRyZXNzW0FWQUhJX0FERFJFU1NfU1RSX01BWF07CisKKyAgICAgICAgICAgIGF2YWhpX2FkZHJlc3Nfc25wcmludChhZGRyZXNzLCBzaXplb2YoYWRkcmVzcyksIGEpOworCisgICAgICAgICAgICBwcmludGYoIiVzXHQlc1xuIiwgbmFtZSwgYWRkcmVzcyk7CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBBVkFISV9SRVNPTFZFUl9GQUlMVVJFOgorCisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgXygiRmFpbGVkIHRvIHJlc29sdmUgaG9zdCBuYW1lICclcyc6ICVzXG4iKSwgbmFtZSwgYXZhaGlfc3RyZXJyb3IoYXZhaGlfY2xpZW50X2Vycm5vKGNsaWVudCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworCisgICAgYXZhaGlfaG9zdF9uYW1lX3Jlc29sdmVyX2ZyZWUocik7CisKKyAgICBhc3NlcnQobl9yZXNvbHZpbmcgPiAwKTsKKyAgICBuX3Jlc29sdmluZy0tOworCisgICAgaWYgKG5fcmVzb2x2aW5nIDw9IDApCisgICAgICAgIGF2YWhpX3NpbXBsZV9wb2xsX3F1aXQoc2ltcGxlX3BvbGwpOworfQorCitzdGF0aWMgdm9pZCBhZGRyZXNzX3Jlc29sdmVyX2NhbGxiYWNrKAorICAgIEF2YWhpQWRkcmVzc1Jlc29sdmVyICpyLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgQXZhaGlJZkluZGV4IGludGVyZmFjZSwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsCisgICAgQXZhaGlSZXNvbHZlckV2ZW50IGV2ZW50LAorICAgIGNvbnN0IEF2YWhpQWRkcmVzcyAqYSwKKyAgICBjb25zdCBjaGFyICpuYW1lLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgQXZhaGlMb29rdXBSZXN1bHRGbGFncyBmbGFncywKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHZvaWQgKnVzZXJkYXRhKSB7CisKKyAgICBjaGFyIGFkZHJlc3NbQVZBSElfQUREUkVTU19TVFJfTUFYXTsKKyAgICBhc3NlcnQocik7CisKKyAgICBhdmFoaV9hZGRyZXNzX3NucHJpbnQoYWRkcmVzcywgc2l6ZW9mKGFkZHJlc3MpLCBhKTsKKworICAgIHN3aXRjaCAoZXZlbnQpIHsKKyAgICAgICAgY2FzZSBBVkFISV9SRVNPTFZFUl9GT1VORDoKKworICAgICAgICAgICAgcHJpbnRmKCIlc1x0JXNcbiIsIGFkZHJlc3MsIG5hbWUpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBVkFISV9SRVNPTFZFUl9GQUlMVVJFOgorCisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgXygiRmFpbGVkIHRvIHJlc29sdmUgYWRkcmVzcyAnJXMnOiAlc1xuIiksIGFkZHJlc3MsIGF2YWhpX3N0cmVycm9yKGF2YWhpX2NsaWVudF9lcnJubyhjbGllbnQpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKworICAgIGF2YWhpX2FkZHJlc3NfcmVzb2x2ZXJfZnJlZShyKTsKKworICAgIGFzc2VydChuX3Jlc29sdmluZyA+IDApOworICAgIG5fcmVzb2x2aW5nLS07CisKKyAgICBpZiAobl9yZXNvbHZpbmcgPD0gMCkKKyAgICAgICAgYXZhaGlfc2ltcGxlX3BvbGxfcXVpdChzaW1wbGVfcG9sbCk7Cit9CisKK3N0YXRpYyB2b2lkIGNsaWVudF9jYWxsYmFjayhBdmFoaUNsaWVudCAqYywgQXZhaGlDbGllbnRTdGF0ZSBzdGF0ZSwgQVZBSElfR0NDX1VOVVNFRCB2b2lkICogdXNlcmRhdGEpIHsKKyAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgICAgIGNhc2UgQVZBSElfQ0xJRU5UX0ZBSUxVUkU6CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgXygiQ2xpZW50IGZhaWx1cmUsIGV4aXRpbmc6ICVzXG4iKSwgYXZhaGlfc3RyZXJyb3IoYXZhaGlfY2xpZW50X2Vycm5vKGMpKSk7CisgICAgICAgICAgICBhdmFoaV9zaW1wbGVfcG9sbF9xdWl0KHNpbXBsZV9wb2xsKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQVZBSElfQ0xJRU5UX1NfUkVHSVNURVJJTkc6CisgICAgICAgIGNhc2UgQVZBSElfQ0xJRU5UX1NfUlVOTklORzoKKyAgICAgICAgY2FzZSBBVkFISV9DTElFTlRfU19DT0xMSVNJT046CisgICAgICAgIGNhc2UgQVZBSElfQ0xJRU5UX0NPTk5FQ1RJTkc6CisgICAgICAgICAgICA7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBoZWxwKEZJTEUgKmYsIGNvbnN0IGNoYXIgKmFyZ3YwKSB7CisgICAgZnByaW50ZihmLAorICAgICAgICAgICAgXygiJXMgW29wdGlvbnNdICVzIDxob3N0IG5hbWUgLi4uPlxuIgorICAgICAgICAgICAgICAiJXMgW29wdGlvbnNdICVzIDxhZGRyZXNzIC4uLiA+XG5cbiIKKyAgICAgICAgICAgICAgIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorICAgICAgICAgICAgICAiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFNob3cgdmVyc2lvblxuIgorICAgICAgICAgICAgICAiICAgIC1uIC0tbmFtZSAgICAgICAgICAgIFJlc29sdmUgaG9zdCBuYW1lXG4iCisgICAgICAgICAgICAgICIgICAgLWEgLS1hZGRyZXNzICAgICAgICAgUmVzb2x2ZSBhZGRyZXNzXG4iCisgICAgICAgICAgICAgICIgICAgLXYgLS12ZXJib3NlICAgICAgICAgRW5hYmxlIHZlcmJvc2UgbW9kZVxuIgorICAgICAgICAgICAgICAiICAgIC02ICAgICAgICAgICAgICAgICAgIExvb2t1cCBJUHY2IGFkZHJlc3NcbiIKKyAgICAgICAgICAgICAgIiAgICAtNCAgICAgICAgICAgICAgICAgICBMb29rdXAgSVB2NCBhZGRyZXNzXG4iKSwKKyAgICAgICAgICAgIGFyZ3YwLCBzdHJzdHIoYXJndjAsICJob3N0LW5hbWUiKSA/ICJbLW5dIiA6ICItbiIsCisgICAgICAgICAgICBhcmd2MCwgc3Ryc3RyKGFyZ3YwLCAiYWRkcmVzcyIpID8gIlstYV0iIDogIi1hIik7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfY29tbWFuZF9saW5lKENvbmZpZyAqYywgY29uc3QgY2hhciAqYXJndjAsIGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKKyAgICBpbnQgbzsKKworICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uIGxvbmdfb3B0aW9uc1tdID0geworICAgICAgICB7ICJoZWxwIiwgICAgICAgICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCAnaCcgfSwKKyAgICAgICAgeyAidmVyc2lvbiIsICAgICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgJ1YnIH0sCisgICAgICAgIHsgIm5hbWUiLCAgICAgICAgICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsICduJyB9LAorICAgICAgICB7ICJhZGRyZXNzIiwgICAgICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCAnYScgfSwKKyAgICAgICAgeyAidmVyYm9zZSIsICAgICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgJ3YnIH0sCisgICAgICAgIHsgTlVMTCwgMCwgTlVMTCwgMCB9CisgICAgfTsKKworICAgIGFzc2VydChjKTsKKworICAgIGMtPmNvbW1hbmQgPSBzdHJzdHIoYXJndjAsICJhZGRyZXNzIikgPyBDT01NQU5EX1JFU09MVkVfQUREUkVTUyA6IChzdHJzdHIoYXJndjAsICJob3N0LW5hbWUiKSA/IENPTU1BTkRfUkVTT0xWRV9IT1NUX05BTUUgOiBDT01NQU5EX1VOU1BFQyk7CisgICAgYy0+cHJvdG8gPSBBVkFISV9QUk9UT19VTlNQRUM7CisgICAgYy0+dmVyYm9zZSA9IDA7CisKKyAgICB3aGlsZSAoKG8gPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiaFZuYXY0NiIsIGxvbmdfb3B0aW9ucywgTlVMTCkpID49IDApIHsKKworICAgICAgICBzd2l0Y2gobykgeworICAgICAgICAgICAgY2FzZSAnaCc6CisgICAgICAgICAgICAgICAgYy0+Y29tbWFuZCA9IENPTU1BTkRfSEVMUDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ1YnOgorICAgICAgICAgICAgICAgIGMtPmNvbW1hbmQgPSBDT01NQU5EX1ZFUlNJT047CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICduJzoKKyAgICAgICAgICAgICAgICBjLT5jb21tYW5kID0gQ09NTUFORF9SRVNPTFZFX0hPU1RfTkFNRTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ2EnOgorICAgICAgICAgICAgICAgIGMtPmNvbW1hbmQgPSBDT01NQU5EX1JFU09MVkVfQUREUkVTUzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ3YnOgorICAgICAgICAgICAgICAgIGMtPnZlcmJvc2UgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnNCc6CisgICAgICAgICAgICAgICAgYy0+cHJvdG8gPSBBVkFISV9QUk9UT19JTkVUOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnNic6CisgICAgICAgICAgICAgICAgYy0+cHJvdG8gPSBBVkFISV9QUk9UT19JTkVUNjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGMtPmNvbW1hbmQgPT0gQ09NTUFORF9SRVNPTFZFX0FERFJFU1MgfHwgYy0+Y29tbWFuZCA9PSBDT01NQU5EX1JFU09MVkVfSE9TVF9OQU1FKSB7CisgICAgICAgIGlmIChvcHRpbmQgPj0gYXJnYykgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIF8oIlRvbyBmZXcgYXJndW1lbnRzXG4iKSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkgeworICAgIGludCByZXQgPSAxLCBlcnJvcjsKKyAgICBDb25maWcgY29uZmlnOworICAgIGNvbnN0IGNoYXIgKmFyZ3YwOworCisgICAgYXZhaGlfaW5pdF9pMThuKCk7CisgICAgc2V0bG9jYWxlKExDX0FMTCwgIiIpOworCisgICAgaWYgKChhcmd2MCA9IHN0cnJjaHIoYXJndlswXSwgJy8nKSkpCisgICAgICAgIGFyZ3YwKys7CisgICAgZWxzZQorICAgICAgICBhcmd2MCA9IGFyZ3ZbMF07CisKKyAgICBpZiAocGFyc2VfY29tbWFuZF9saW5lKCZjb25maWcsIGFyZ3YwLCBhcmdjLCBhcmd2KSA8IDApCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIHN3aXRjaCAoY29uZmlnLmNvbW1hbmQpIHsKKyAgICAgICAgY2FzZSBDT01NQU5EX1VOU1BFQzoKKyAgICAgICAgICAgIHJldCA9IDE7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgXygiTm8gY29tbWFuZCBzcGVjaWZpZWQuXG4iKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIENPTU1BTkRfSEVMUDoKKyAgICAgICAgICAgIGhlbHAoc3Rkb3V0LCBhcmd2MCk7CisgICAgICAgICAgICByZXQgPSAwOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBDT01NQU5EX1ZFUlNJT046CisgICAgICAgICAgICBwcmludGYoIiVzICJQQUNLQUdFX1ZFUlNJT04iXG4iLCBhcmd2MCk7CisgICAgICAgICAgICByZXQgPSAwOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBDT01NQU5EX1JFU09MVkVfSE9TVF9OQU1FOgorICAgICAgICBjYXNlIENPTU1BTkRfUkVTT0xWRV9BRERSRVNTOiB7CisgICAgICAgICAgICBpbnQgaTsKKworICAgICAgICAgICAgaWYgKCEoc2ltcGxlX3BvbGwgPSBhdmFoaV9zaW1wbGVfcG9sbF9uZXcoKSkpIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgXygiRmFpbGVkIHRvIGNyZWF0ZSBzaW1wbGUgcG9sbCBvYmplY3QuXG4iKSk7CisgICAgICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoc2lnaW50X2luc3RhbGwoc2ltcGxlX3BvbGwpIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisKKyAgICAgICAgICAgIGlmICghKGNsaWVudCA9IGF2YWhpX2NsaWVudF9uZXcoYXZhaGlfc2ltcGxlX3BvbGxfZ2V0KHNpbXBsZV9wb2xsKSwgMCwgY2xpZW50X2NhbGxiYWNrLCBOVUxMLCAmZXJyb3IpKSkgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCBfKCJGYWlsZWQgdG8gY3JlYXRlIGNsaWVudCBvYmplY3Q6ICVzXG4iKSwgYXZhaGlfc3RyZXJyb3IoZXJyb3IpKTsKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjb25maWcudmVyYm9zZSkgeworICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnZlcnNpb24sICpobjsKKworICAgICAgICAgICAgICAgIGlmICghKHZlcnNpb24gPSBhdmFoaV9jbGllbnRfZ2V0X3ZlcnNpb25fc3RyaW5nKGNsaWVudCkpKSB7CisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCBfKCJGYWlsZWQgdG8gcXVlcnkgdmVyc2lvbiBzdHJpbmc6ICVzXG4iKSwgYXZhaGlfc3RyZXJyb3IoYXZhaGlfY2xpZW50X2Vycm5vKGNsaWVudCkpKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICghKGhuID0gYXZhaGlfY2xpZW50X2dldF9ob3N0X25hbWVfZnFkbihjbGllbnQpKSkgeworICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgXygiRmFpbGVkIHRvIHF1ZXJ5IGhvc3QgbmFtZTogJXNcbiIpLCBhdmFoaV9zdHJlcnJvcihhdmFoaV9jbGllbnRfZXJybm8oY2xpZW50KSkpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIF8oIlNlcnZlciB2ZXJzaW9uOiAlczsgSG9zdCBuYW1lOiAlc1xuIiksIHZlcnNpb24sIGhuKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbl9yZXNvbHZpbmcgPSAwOworCisgICAgICAgICAgICBmb3IgKGkgPSBvcHRpbmQ7IGkgPCBhcmdjOyBpKyspIHsKKworICAgICAgICAgICAgICAgIGlmIChjb25maWcuY29tbWFuZCA9PSBDT01NQU5EX1JFU09MVkVfSE9TVF9OQU1FKSB7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCEoYXZhaGlfaG9zdF9uYW1lX3Jlc29sdmVyX25ldyhjbGllbnQsIEFWQUhJX0lGX1VOU1BFQywgQVZBSElfUFJPVE9fVU5TUEVDLCBhcmd2W2ldLCBjb25maWcucHJvdG8sIDAsIGhvc3RfbmFtZV9yZXNvbHZlcl9jYWxsYmFjaywgTlVMTCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgXygiRmFpbGVkIHRvIGNyZWF0ZSBob3N0IG5hbWUgcmVzb2x2ZXI6ICVzXG4iKSwgYXZhaGlfc3RyZXJyb3IoYXZhaGlfY2xpZW50X2Vycm5vKGNsaWVudCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgQXZhaGlBZGRyZXNzIGE7CisKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGNvbmZpZy5jb21tYW5kID09IENPTU1BTkRfUkVTT0xWRV9BRERSRVNTKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoIWF2YWhpX2FkZHJlc3NfcGFyc2UoYXJndltpXSwgQVZBSElfUFJPVE9fVU5TUEVDLCAmYSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCBfKCJGYWlsZWQgdG8gcGFyc2UgYWRkcmVzcyAnJXMnXG4iKSwgYXJndltpXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoIShhdmFoaV9hZGRyZXNzX3Jlc29sdmVyX25ldyhjbGllbnQsIEFWQUhJX0lGX1VOU1BFQywgQVZBSElfUFJPVE9fVU5TUEVDLCAmYSwgMCwgYWRkcmVzc19yZXNvbHZlcl9jYWxsYmFjaywgTlVMTCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgXygiRmFpbGVkIHRvIGNyZWF0ZSBhZGRyZXNzIHJlc29sdmVyOiAlc1xuIiksIGF2YWhpX3N0cmVycm9yKGF2YWhpX2NsaWVudF9lcnJubyhjbGllbnQpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBuX3Jlc29sdmluZysrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBhdmFoaV9zaW1wbGVfcG9sbF9sb29wKHNpbXBsZV9wb2xsKTsKKyAgICAgICAgICAgIHJldCA9IDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworZmFpbDoKKworICAgIGlmIChjbGllbnQpCisgICAgICAgIGF2YWhpX2NsaWVudF9mcmVlKGNsaWVudCk7CisKKyAgICBzaWdpbnRfdW5pbnN0YWxsKCk7CisKKyAgICBpZiAoc2ltcGxlX3BvbGwpCisgICAgICAgIGF2YWhpX3NpbXBsZV9wb2xsX2ZyZWUoc2ltcGxlX3BvbGwpOworCisgICAgcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmMgYi9hdmFoaS0wLjYuMzEvYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ZmJiZWIKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jCkBAIC0wLDAgKzEsMjExIEBACisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8Z2V0b3B0Lmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPGxvY2FsZS5oPgorCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL3NpbXBsZS13YXRjaC5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9lcnJvci5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9tYWxsb2MuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vZG9tYWluLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2kxOG4uaD4KKyNpbmNsdWRlIDxhdmFoaS1jbGllbnQvY2xpZW50Lmg+CisKKyNpbmNsdWRlICJzaWdpbnQuaCIKKwordHlwZWRlZiBlbnVtIHsKKyAgICBDT01NQU5EX1VOU1BFQywKKyAgICBDT01NQU5EX0hFTFAsCisgICAgQ09NTUFORF9WRVJTSU9OCit9IENvbW1hbmQ7CisKK3R5cGVkZWYgc3RydWN0IENvbmZpZyB7CisgICAgaW50IHZlcmJvc2U7CisgICAgQ29tbWFuZCBjb21tYW5kOworfSBDb25maWc7CisKK3N0YXRpYyBBdmFoaVNpbXBsZVBvbGwgKnNpbXBsZV9wb2xsID0gTlVMTDsKK3N0YXRpYyBBdmFoaUNsaWVudCAqY2xpZW50ID0gTlVMTDsKKworc3RhdGljIHZvaWQgY2xpZW50X2NhbGxiYWNrKEF2YWhpQ2xpZW50ICpjLCBBdmFoaUNsaWVudFN0YXRlIHN0YXRlLCBBVkFISV9HQ0NfVU5VU0VEIHZvaWQgKiB1c2VyZGF0YSkgeworICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICAgICAgY2FzZSBBVkFISV9DTElFTlRfRkFJTFVSRToKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCBfKCJDbGllbnQgZmFpbHVyZSwgZXhpdGluZzogJXNcbiIpLCBhdmFoaV9zdHJlcnJvcihhdmFoaV9jbGllbnRfZXJybm8oYykpKTsKKyAgICAgICAgICAgIGF2YWhpX3NpbXBsZV9wb2xsX3F1aXQoc2ltcGxlX3BvbGwpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBVkFISV9DTElFTlRfU19SRUdJU1RFUklORzoKKyAgICAgICAgY2FzZSBBVkFISV9DTElFTlRfU19SVU5OSU5HOgorICAgICAgICBjYXNlIEFWQUhJX0NMSUVOVF9TX0NPTExJU0lPTjoKKyAgICAgICAgY2FzZSBBVkFISV9DTElFTlRfQ09OTkVDVElORzoKKyAgICAgICAgICAgIDsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGhlbHAoRklMRSAqZiwgY29uc3QgY2hhciAqYXJndjApIHsKKyAgICBmcHJpbnRmKGYsCisgICAgICAgICAgICBfKCIlcyBbb3B0aW9uc10gPG5ldyBob3N0IG5hbWU+XG5cbiIKKyAgICAgICAgICAgICAgIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorICAgICAgICAgICAgICAiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFNob3cgdmVyc2lvblxuIgorICAgICAgICAgICAgICAiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIpLAorICAgICAgICAgICAgYXJndjApOworfQorCitzdGF0aWMgaW50IHBhcnNlX2NvbW1hbmRfbGluZShDb25maWcgKmMsIGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKKyAgICBpbnQgbzsKKworICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uIGxvbmdfb3B0aW9uc1tdID0geworICAgICAgICB7ICJoZWxwIiwgICAgICAgICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCAnaCcgfSwKKyAgICAgICAgeyAidmVyc2lvbiIsICAgICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgJ1YnIH0sCisgICAgICAgIHsgInZlcmJvc2UiLCAgICAgICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsICd2JyB9LAorICAgICAgICB7IE5VTEwsIDAsIE5VTEwsIDAgfQorICAgIH07CisKKyAgICBhc3NlcnQoYyk7CisKKyAgICBjLT5jb21tYW5kID0gQ09NTUFORF9VTlNQRUM7CisgICAgYy0+dmVyYm9zZSA9IDA7CisKKyAgICB3aGlsZSAoKG8gPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiaFZ2IiwgbG9uZ19vcHRpb25zLCBOVUxMKSkgPj0gMCkgeworCisgICAgICAgIHN3aXRjaChvKSB7CisgICAgICAgICAgICBjYXNlICdoJzoKKyAgICAgICAgICAgICAgICBjLT5jb21tYW5kID0gQ09NTUFORF9IRUxQOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnVic6CisgICAgICAgICAgICAgICAgYy0+Y29tbWFuZCA9IENPTU1BTkRfVkVSU0lPTjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ3YnOgorICAgICAgICAgICAgICAgIGMtPnZlcmJvc2UgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoYy0+Y29tbWFuZCA9PSBDT01NQU5EX1VOU1BFQykgeworICAgICAgICBpZiAob3B0aW5kICE9IGFyZ2MtMSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIF8oIkludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cywgZXhwZWN0aW5nIGV4YWN0bHkgb25lLlxuIikpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKKyAgICBpbnQgcmV0ID0gMSwgZXJyb3I7CisgICAgQ29uZmlnIGNvbmZpZzsKKyAgICBjb25zdCBjaGFyICphcmd2MDsKKworICAgIGF2YWhpX2luaXRfaTE4bigpOworICAgIHNldGxvY2FsZShMQ19BTEwsICIiKTsKKworICAgIGlmICgoYXJndjAgPSBzdHJyY2hyKGFyZ3ZbMF0sICcvJykpKQorICAgICAgICBhcmd2MCsrOworICAgIGVsc2UKKyAgICAgICAgYXJndjAgPSBhcmd2WzBdOworCisgICAgaWYgKHBhcnNlX2NvbW1hbmRfbGluZSgmY29uZmlnLCBhcmdjLCBhcmd2KSA8IDApCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIHN3aXRjaCAoY29uZmlnLmNvbW1hbmQpIHsKKyAgICAgICAgY2FzZSBDT01NQU5EX0hFTFA6CisgICAgICAgICAgICBoZWxwKHN0ZG91dCwgYXJndjApOworICAgICAgICAgICAgcmV0ID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQ09NTUFORF9WRVJTSU9OOgorICAgICAgICAgICAgcHJpbnRmKCIlcyAiUEFDS0FHRV9WRVJTSU9OIlxuIiwgYXJndjApOworICAgICAgICAgICAgcmV0ID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQ09NTUFORF9VTlNQRUM6CisKKyAgICAgICAgICAgIGlmICghKHNpbXBsZV9wb2xsID0gYXZhaGlfc2ltcGxlX3BvbGxfbmV3KCkpKSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIF8oIkZhaWxlZCB0byBjcmVhdGUgc2ltcGxlIHBvbGwgb2JqZWN0LlxuIikpOworICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHNpZ2ludF9pbnN0YWxsKHNpbXBsZV9wb2xsKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBmYWlsOworCisgICAgICAgICAgICBpZiAoIShjbGllbnQgPSBhdmFoaV9jbGllbnRfbmV3KGF2YWhpX3NpbXBsZV9wb2xsX2dldChzaW1wbGVfcG9sbCksIDAsIGNsaWVudF9jYWxsYmFjaywgTlVMTCwgJmVycm9yKSkpIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgXygiRmFpbGVkIHRvIGNyZWF0ZSBjbGllbnQgb2JqZWN0OiAlc1xuIiksIGF2YWhpX3N0cmVycm9yKGVycm9yKSk7CisgICAgICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoY29uZmlnLnZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp2ZXJzaW9uLCAqaG47CisKKyAgICAgICAgICAgICAgICBpZiAoISh2ZXJzaW9uID0gYXZhaGlfY2xpZW50X2dldF92ZXJzaW9uX3N0cmluZyhjbGllbnQpKSkgeworICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgXygiRmFpbGVkIHRvIHF1ZXJ5IHZlcnNpb24gc3RyaW5nOiAlc1xuIiksIGF2YWhpX3N0cmVycm9yKGF2YWhpX2NsaWVudF9lcnJubyhjbGllbnQpKSk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIShobiA9IGF2YWhpX2NsaWVudF9nZXRfaG9zdF9uYW1lX2ZxZG4oY2xpZW50KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIF8oIkZhaWxlZCB0byBxdWVyeSBob3N0IG5hbWU6ICVzXG4iKSwgYXZhaGlfc3RyZXJyb3IoYXZhaGlfY2xpZW50X2Vycm5vKGNsaWVudCkpKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCBfKCJTZXJ2ZXIgdmVyc2lvbjogJXM7IEhvc3QgbmFtZTogJXNcbiIpLCB2ZXJzaW9uLCBobik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChhdmFoaV9jbGllbnRfc2V0X2hvc3RfbmFtZShjbGllbnQsIGFyZ3Zbb3B0aW5kXSkgPCAwKSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIF8oIkZhaWxlZCB0byBjcmVhdGUgaG9zdCBuYW1lIHJlc29sdmVyOiAlc1xuIiksIGF2YWhpX3N0cmVycm9yKGF2YWhpX2NsaWVudF9lcnJubyhjbGllbnQpKSk7CisgICAgICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoY29uZmlnLnZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpobjsKKworICAgICAgICAgICAgICAgIGlmICghKGhuID0gYXZhaGlfY2xpZW50X2dldF9ob3N0X25hbWVfZnFkbihjbGllbnQpKSkgeworICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgXygiRmFpbGVkIHRvIHF1ZXJ5IGhvc3QgbmFtZTogJXNcbiIpLCBhdmFoaV9zdHJlcnJvcihhdmFoaV9jbGllbnRfZXJybm8oY2xpZW50KSkpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIF8oIkhvc3QgbmFtZSBzdWNjZXNzZnVsbHkgY2hhbmdlZCB0byAlc1xuIiksIGhuKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0ID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworZmFpbDoKKworICAgIGlmIChjbGllbnQpCisgICAgICAgIGF2YWhpX2NsaWVudF9mcmVlKGNsaWVudCk7CisKKyAgICBzaWdpbnRfdW5pbnN0YWxsKCk7CisKKyAgICBpZiAoc2ltcGxlX3BvbGwpCisgICAgICAgIGF2YWhpX3NpbXBsZV9wb2xsX2ZyZWUoc2ltcGxlX3BvbGwpOworCisgICAgcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9hdmFoaS11dGlscy9zaWdpbnQuYyBiL2F2YWhpLTAuNi4zMS9hdmFoaS11dGlscy9zaWdpbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzI2NjU0Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLXV0aWxzL3NpZ2ludC5jCkBAIC0wLDAgKzEsMTQ0IEBACisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2djY21hY3JvLmg+CisjaW5jbHVkZSAic2lnaW50LmgiCisKK3N0YXRpYyBBdmFoaVNpbXBsZVBvbGwgKnNpbXBsZV9wb2xsID0gTlVMTDsKK3N0YXRpYyBzdHJ1Y3Qgc2lnYWN0aW9uIG9sZF9zaWdpbnRfc2EsIG9sZF9zaWd0ZXJtX3NhOworc3RhdGljIGludCBwaXBlX2Zkc1syXSA9IHsgLTEsIC0xIH07CitzdGF0aWMgQXZhaGlXYXRjaCAqd2F0Y2ggPSBOVUxMOworCitzdGF0aWMgaW50IHNldF9ub25ibG9jayhpbnQgZmQpIHsKKyAgICBpbnQgbjsKKworICAgIGFzc2VydChmZCA+PSAwKTsKKworICAgIGlmICgobiA9IGZjbnRsKGZkLCBGX0dFVEZMKSkgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAobiAmIE9fTk9OQkxPQ0spCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGZjbnRsKGZkLCBGX1NFVEZMLCBufE9fTk9OQkxPQ0spOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVyKGludCBzKSB7CisgICAgd3JpdGUocGlwZV9mZHNbMV0sICZzLCBzaXplb2YocykpOworfQorCitzdGF0aWMgdm9pZCBjbG9zZV9waXBlX2Zkcyh2b2lkKSB7CisgICAgaWYgKHBpcGVfZmRzWzBdID49IDApCisgICAgICAgIGNsb3NlKHBpcGVfZmRzWzBdKTsKKyAgICBpZiAocGlwZV9mZHNbMV0gPj0gMCkKKyAgICAgICAgY2xvc2UocGlwZV9mZHNbMV0pOworCisgICAgcGlwZV9mZHNbMF0gPSBwaXBlX2Zkc1sxXSA9IC0xOworfQorCitzdGF0aWMgdm9pZCB3YXRjaF9jYWxsYmFjayhBdmFoaVdhdGNoICp3LCBpbnQgZmQsIEF2YWhpV2F0Y2hFdmVudCBldmVudCwgQVZBSElfR0NDX1VOVVNFRCB2b2lkICp1c2VyZGF0YSkgeworICAgIGludCBzOworICAgIHNzaXplX3QgbDsKKworICAgIGFzc2VydCh3KTsKKyAgICBhc3NlcnQoZmQgPT0gcGlwZV9mZHNbMF0pOworICAgIGFzc2VydChldmVudCA9PSBBVkFISV9XQVRDSF9JTik7CisKKyAgICBsID0gcmVhZChmZCwgJnMsIHNpemVvZihzKSk7CisgICAgYXNzZXJ0KGwgPT0gc2l6ZW9mKHMpKTsKKworICAgIGZwcmludGYoc3RkZXJyLCAiR290ICVzLCBxdWl0dGluZy5cbiIsIHMgPT0gU0lHSU5UID8gIlNJR0lOVCIgOiAiU0lHVEVSTSIpOworICAgIGF2YWhpX3NpbXBsZV9wb2xsX3F1aXQoc2ltcGxlX3BvbGwpOworfQorCitpbnQgc2lnaW50X2luc3RhbGwoQXZhaGlTaW1wbGVQb2xsICpzcG9sbCkgeworICAgIHN0cnVjdCBzaWdhY3Rpb24gc2E7CisgICAgY29uc3QgQXZhaGlQb2xsICpwOworCisgICAgYXNzZXJ0KHNwb2xsKTsKKyAgICBhc3NlcnQoIXNpbXBsZV9wb2xsKTsKKyAgICBhc3NlcnQocGlwZV9mZHNbMF0gPT0gLTEgJiYgcGlwZV9mZHNbMV0gPT0gLTEpOworCisgICAgaWYgKHBpcGUocGlwZV9mZHMpIDwgMCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInBpcGUoKSBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgc2V0X25vbmJsb2NrKHBpcGVfZmRzWzBdKTsKKyAgICBzZXRfbm9uYmxvY2socGlwZV9mZHNbMV0pOworCisgICAgbWVtc2V0KCZzYSwgMCwgc2l6ZW9mKHNhKSk7CisgICAgc2Euc2FfaGFuZGxlciA9IGhhbmRsZXI7CisgICAgc2Euc2FfZmxhZ3MgPSBTQV9SRVNUQVJUOworCisgICAgaWYgKHNpZ2FjdGlvbihTSUdJTlQsICZzYSwgJm9sZF9zaWdpbnRfc2EpIDwgMCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInNpZ2FjdGlvbigpIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIGNsb3NlX3BpcGVfZmRzKCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoc2lnYWN0aW9uKFNJR1RFUk0sICZzYSwgJm9sZF9zaWd0ZXJtX3NhKSA8IDApIHsKKyAgICAgICAgc2lnYWN0aW9uKFNJR0lOVCwgJm9sZF9zaWdpbnRfc2EsIE5VTEwpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInNpZ2FjdGlvbigpIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIGNsb3NlX3BpcGVfZmRzKCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBwID0gYXZhaGlfc2ltcGxlX3BvbGxfZ2V0KHNwb2xsKTsKKyAgICB3YXRjaCA9IHAtPndhdGNoX25ldyhwLCBwaXBlX2Zkc1swXSwgQVZBSElfV0FUQ0hfSU4sIHdhdGNoX2NhbGxiYWNrLCBOVUxMKTsKKyAgICBhc3NlcnQod2F0Y2gpOworCisgICAgc2ltcGxlX3BvbGwgPSBzcG9sbDsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBzaWdpbnRfdW5pbnN0YWxsKHZvaWQpIHsKKworICAgIGlmICghc2ltcGxlX3BvbGwpCisgICAgICAgIHJldHVybjsKKworICAgIHNpZ2FjdGlvbihTSUdURVJNLCAmb2xkX3NpZ3Rlcm1fc2EsIE5VTEwpOworICAgIHNpZ2FjdGlvbihTSUdJTlQsICZvbGRfc2lnaW50X3NhLCBOVUxMKTsKKworICAgIGNsb3NlX3BpcGVfZmRzKCk7CisKKyAgICBpZiAod2F0Y2gpIHsKKyAgICAgICAgY29uc3QgQXZhaGlQb2xsICpwOworCisgICAgICAgIGFzc2VydChzaW1wbGVfcG9sbCk7CisgICAgICAgIHAgPSBhdmFoaV9zaW1wbGVfcG9sbF9nZXQoc2ltcGxlX3BvbGwpOworCisgICAgICAgIHAtPndhdGNoX2ZyZWUod2F0Y2gpOworICAgICAgICB3YXRjaCA9IE5VTEw7CisgICAgfQorCisgICAgc2ltcGxlX3BvbGwgPSBOVUxMOworfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2F2YWhpLXV0aWxzL3NpZ2ludC5oIGIvYXZhaGktMC42LjMxL2F2YWhpLXV0aWxzL3NpZ2ludC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlNjZmZDQKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvYXZhaGktdXRpbHMvc2lnaW50LmgKQEAgLTAsMCArMSwyOCBAQAorI2lmbmRlZiBmb29zaWdjaGZvbworI2RlZmluZSBmb29zaWdjaGZvbworCisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCisqKiovCisKKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vc2ltcGxlLXdhdGNoLmg+CisKK2ludCBzaWdpbnRfaW5zdGFsbChBdmFoaVNpbXBsZVBvbGwgKnNwb2xsKTsKK3ZvaWQgc2lnaW50X3VuaW5zdGFsbCh2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktdXRpbHMvc3RkYi5jIGIvYXZhaGktMC42LjMxL2F2YWhpLXV0aWxzL3N0ZGIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjAyYzk3Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLXV0aWxzL3N0ZGIuYwpAQCAtMCwwICsxLDIxMiBAQAorLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaWZkZWYgSEFWRV9HREJNCisjaW5jbHVkZSA8Z2RibS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9EQk0KKyNpbmNsdWRlIDxuZGJtLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGxvY2FsZS5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vbWFsbG9jLmg+CisKKyNpbmNsdWRlICJzdGRiLmgiCisKKyNpZmRlZiBIQVZFX0dEQk0KK3N0YXRpYyBHREJNX0ZJTEUgZ2RibV9maWxlID0gTlVMTDsKKyNlbmRpZgorI2lmZGVmIEhBVkVfREJNCitzdGF0aWMgREJNICpkYm1fZmlsZSA9IE5VTEw7CisjZW5kaWYKK3N0YXRpYyBjaGFyICpidWZmZXIgPSBOVUxMOworc3RhdGljIGNoYXIgKmVudW1fa2V5ID0gTlVMTDsKKworc3RhdGljIGludCBpbml0KHZvaWQpIHsKKworI2lmZGVmIEhBVkVfR0RCTQorICAgIGlmIChnZGJtX2ZpbGUpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKCEoZ2RibV9maWxlID0gZ2RibV9vcGVuKChjaGFyKikgREFUQUJBU0VfRklMRSwgMCwgR0RCTV9SRUFERVIsIDAsIE5VTEwpKSkKKyAgICAgICAgcmV0dXJuIC0xOworI2VuZGlmCisjaWZkZWYgSEFWRV9EQk0KKyAgICBpZiAoZGJtX2ZpbGUpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKCEoZGJtX2ZpbGUgPSBkYm1fb3BlbigoY2hhciopIERBVEFCQVNFX0ZJTEUsIE9fUkRPTkxZLCAwKSkpCisgICAgICAgIHJldHVybiAtMTsKKyNlbmRpZgorCisgICAgcmV0dXJuIDA7Cit9CisKK2NvbnN0IGNoYXIqIHN0ZGJfbG9va3VwKGNvbnN0IGNoYXIgKm5hbWUpIHsKKyAgICBkYXR1bSBrZXksIGRhdGE7CisgICAgY29uc3QgY2hhciAqbG9jOworCisgICAgaWYgKGluaXQoKSA8IDApCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIGRhdGEuZHB0ciA9IE5VTEw7CisgICAgZGF0YS5kc2l6ZSA9IDA7CisKKyAgICBpZiAoKGxvYyA9IHNldGxvY2FsZShMQ19NRVNTQUdFUywgTlVMTCkpKSB7CisgICAgICAgIGNoYXIga1syNTZdOworCisgICAgICAgIHNucHJpbnRmKGssIHNpemVvZihrKSwgIiVzWyVzXSIsIG5hbWUsIGxvYyk7CisgICAgICAgIGtleS5kcHRyID0gazsKKyAgICAgICAga2V5LmRzaXplID0gc3RybGVuKGspOworI2lmZGVmIEhBVkVfR0RCTQorICAgICAgICBkYXRhID0gZ2RibV9mZXRjaChnZGJtX2ZpbGUsIGtleSk7CisjZW5kaWYKKyNpZmRlZiBIQVZFX0RCTQorICAgICAgICBkYXRhID0gZGJtX2ZldGNoKGRibV9maWxlLCBrZXkpOworI2VuZGlmCisKKyAgICAgICAgaWYgKCFkYXRhLmRwdHIpIHsKKyAgICAgICAgICAgIGNoYXIgbFszMl0sICplOworICAgICAgICAgICAgc25wcmludGYobCwgc2l6ZW9mKGwpLCAiJXMiLCBsb2MpOworCisgICAgICAgICAgICBpZiAoKGUgPSBzdHJjaHIobCwgJ0AnKSkpIHsKKyAgICAgICAgICAgICAgICAqZSA9IDA7CisgICAgICAgICAgICAgICAgc25wcmludGYoaywgc2l6ZW9mKGspLCAiJXNbJXNdIiwgbmFtZSwgbCk7CisgICAgICAgICAgICAgICAga2V5LmRwdHIgPSBrOworICAgICAgICAgICAgICAgIGtleS5kc2l6ZSA9IHN0cmxlbihrKTsKKyNpZmRlZiBIQVZFX0dEQk0KKyAgICAgICAgICAgICAgICBkYXRhID0gZ2RibV9mZXRjaChnZGJtX2ZpbGUsIGtleSk7CisjZW5kaWYKKyNpZmRlZiBIQVZFX0RCTQorICAgICAgICAgICAgICAgIGRhdGEgPSBkYm1fZmV0Y2goZGJtX2ZpbGUsIGtleSk7CisjZW5kaWYKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFkYXRhLmRwdHIpIHsKKyAgICAgICAgICAgICAgICBpZiAoKGUgPSBzdHJjaHIobCwgJ18nKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgKmUgPSAwOworICAgICAgICAgICAgICAgICAgICBzbnByaW50ZihrLCBzaXplb2YoayksICIlc1slc10iLCBuYW1lLCBsKTsKKyAgICAgICAgICAgICAgICAgICAga2V5LmRwdHIgPSBrOworICAgICAgICAgICAgICAgICAgICBrZXkuZHNpemUgPSBzdHJsZW4oayk7CisjaWZkZWYgSEFWRV9HREJNCisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBnZGJtX2ZldGNoKGdkYm1fZmlsZSwga2V5KTsKKyNlbmRpZgorI2lmZGVmIEhBVkVfREJNCisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkYm1fZmV0Y2goZGJtX2ZpbGUsIGtleSk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWRhdGEuZHB0cikgeworICAgICAgICBrZXkuZHB0ciA9IChjaGFyKikgbmFtZTsKKyAgICAgICAga2V5LmRzaXplID0gc3RybGVuKG5hbWUpOworI2lmZGVmIEhBVkVfR0RCTQorICAgICAgICBkYXRhID0gZ2RibV9mZXRjaChnZGJtX2ZpbGUsIGtleSk7CisjZW5kaWYKKyNpZmRlZiBIQVZFX0RCTQorICAgICAgICBkYXRhID0gZGJtX2ZldGNoKGRibV9maWxlLCBrZXkpOworI2VuZGlmCisgICAgfQorCisgICAgaWYgKCFkYXRhLmRwdHIpCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIGF2YWhpX2ZyZWUoYnVmZmVyKTsKKyAgICBidWZmZXIgPSBhdmFoaV9zdHJuZHVwKGRhdGEuZHB0ciwgZGF0YS5kc2l6ZSk7CisgICAgZnJlZShkYXRhLmRwdHIpOworCisgICAgcmV0dXJuIGJ1ZmZlcjsKKworZmFpbDoKKworICAgIHJldHVybiBuYW1lOworfQorCit2b2lkIHN0ZGJfc2h1dGRvd24odm9pZCkgeworI2lmZGVmIEhBVkVfR0RCTQorICAgIGlmIChnZGJtX2ZpbGUpCisgICAgICAgIGdkYm1fY2xvc2UoZ2RibV9maWxlKTsKKworICAgIGdkYm1fZmlsZSA9IE5VTEw7CisjZW5kaWYKKyNpZmRlZiBIQVZFX0RCTQorICAgIGlmIChkYm1fZmlsZSkKKyAgICAgICAgZGJtX2Nsb3NlKGRibV9maWxlKTsKKworICAgIGRibV9maWxlID0gTlVMTDsKKyNlbmRpZgorCisgICAgYXZhaGlfZnJlZShidWZmZXIpOworICAgIGF2YWhpX2ZyZWUoZW51bV9rZXkpOworCisgICAgYnVmZmVyID0gZW51bV9rZXkgPSBOVUxMOworfQorCitjaGFyICpzdGRiX2dldGVudCh2b2lkKSB7CisgICAgZGF0dW0ga2V5OworCisgICAgaWYgKGluaXQoKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZm9yICg7OykgeworCisgICAgICAgIGlmICghZW51bV9rZXkpIHsKKyNpZmRlZiBIQVZFX0dEQk0KKyAgICAgICAgICAgIGtleSA9IGdkYm1fZmlyc3RrZXkoZ2RibV9maWxlKTsKKyNlbmRpZgorI2lmZGVmIEhBVkVfREJNCisgICAgICAgICAgICBrZXkgPSBkYm1fZmlyc3RrZXkoZGJtX2ZpbGUpOworI2VuZGlmCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBrZXkuZHB0ciA9IGVudW1fa2V5OworICAgICAgICAgICAga2V5LmRzaXplID0gc3RybGVuKGVudW1fa2V5KTsKKworI2lmZGVmIEhBVkVfR0RCTQorICAgICAgICAgICAga2V5ID0gZ2RibV9uZXh0a2V5KGdkYm1fZmlsZSwga2V5KTsKKyNlbmRpZgorI2lmZGVmIEhBVkVfREJNCisgICAgICAgICAgICBrZXkgPSBkYm1fbmV4dGtleShkYm1fZmlsZSk7CisjZW5kaWYKKyAgICAgICAgfQorCisgICAgICAgIGF2YWhpX2ZyZWUoZW51bV9rZXkpOworICAgICAgICBlbnVtX2tleSA9IE5VTEw7CisKKyAgICAgICAgaWYgKCFrZXkuZHB0cikKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworCisgICAgICAgIGVudW1fa2V5ID0gYXZhaGlfc3RybmR1cChrZXkuZHB0ciwga2V5LmRzaXplKTsKKyAgICAgICAgZnJlZShrZXkuZHB0cik7CisKKyAgICAgICAgaWYgKCFzdHJjaHIoZW51bV9rZXksICdbJykpCisgICAgICAgICAgICByZXR1cm4gZW51bV9rZXk7CisgICAgfQorfQorCit2b2lkIHN0ZGJfc2V0ZW50KHZvaWQpIHsKKyAgICBhdmFoaV9mcmVlKGVudW1fa2V5KTsKKyAgICBlbnVtX2tleSA9IE5VTEw7Cit9CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvYXZhaGktdXRpbHMvc3RkYi5oIGIvYXZhaGktMC42LjMxL2F2YWhpLXV0aWxzL3N0ZGIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWUxYTkxCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2F2YWhpLXV0aWxzL3N0ZGIuaApAQCAtMCwwICsxLDMwIEBACisjaWZuZGVmIGZvb3N0ZGJoZm9vCisjZGVmaW5lIGZvb3N0ZGJoZm9vCisKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9zaW1wbGUtd2F0Y2guaD4KKworY29uc3QgY2hhciogc3RkYl9sb29rdXAoY29uc3QgY2hhciAqbmFtZSk7Cit2b2lkIHN0ZGJfc2h1dGRvd24odm9pZCk7CitjaGFyICpzdGRiX2dldGVudCh2b2lkKTsKK3ZvaWQgc3RkYl9zZXRlbnQodm9pZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2Jvb3RzdHJhcC5zaCBiL2F2YWhpLTAuNi4zMS9ib290c3RyYXAuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTA1YmRiZgotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9ib290c3RyYXAuc2gKQEAgLTAsMCArMSw2MSBAQAorIyEvYmluL3NoCisKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisjCisjIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisjIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisjIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisjIFVTQS4KKworRkxBR1M9Ii0tc3lzY29uZmRpcj0vZXRjIC0tbG9jYWxzdGF0ZWRpcj0vdmFyIC0tZW5hYmxlLXRlc3RzIC0tZW5hYmxlLWNvbXBhdC1ob3dsIC0tZW5hYmxlLWNvbXBhdC1saWJkbnNfc2QiCisKKyMgRmVlbCBmcmVlIHRvIGFkZCB5b3VyIG93biBjdXN0b20gZmxhZ3MgaW4gaGVyZSAtTGF0aGlhdAorCitjYXNlIGB1bmFtZSAtc2AgaW4KKyAgICBEYXJ3aW4pCisgICAgZXhwb3J0IExJQlRPT0xJWkU9L29wdC9sb2NhbC9iaW4vZ2xpYnRvb2xpemUKKyAgICBleHBvcnQgQ0ZMQUdTPSItSS9vcHQvbG9jYWwvaW5jbHVkZSIKKyAgICBleHBvcnQgTERGTEFHUz0iLUwvb3B0L2xvY2FsL2xpYiIKKyAgICBleHBvcnQgUEtHX0NPTkZJR19QQVRIPSIvb3B0L2xvY2FsL2xpYi9wa2djb25maWciCisgICAgRkxBR1M9IiRGTEFHUyAtLXByZWZpeD0vb3B0L2xvY2FsIC0tZGlzYWJsZS1weWd0ayIKKyAgICA7OworICAgIEZyZWVCU0QpCisgICAgY3AgL3Vzci9sb2NhbC9zaGFyZS9hY2xvY2FsL2xpYnRvb2wxNS5tNCBjb21tb24KKyAgICBjcCAvdXNyL2xvY2FsL3NoYXJlL2FjbG9jYWwvcGtnLm00IGNvbW1vbgorICAgIGV4cG9ydCBMSUJUT09MSVpFPS91c3IvbG9jYWwvYmluL2xpYnRvb2xpemUxNQorICAgIGV4cG9ydCBDRkxBR1M9Ii1JL3Vzci9sb2NhbC9pbmNsdWRlIgorICAgIGV4cG9ydCBMREZMQUdTPSItTC91c3IvbG9jYWwvbGliIgorICAgIGV4cG9ydCBQS0dfQ09ORklHX1BBVEg9Ii91c3IvbG9jYWwvbGliL3BrZ2NvbmZpZyIKKyAgICBGTEFHUz0iJEZMQUdTIC0tcHJlZml4PS9vcHQvIC0td2l0aC1kaXN0cm89bm9uZSAtLWRpc2FibGUtcHl0aG9uIC0tZGlzYWJsZS1kYnVzIC0tZGlzYWJsZS1nbGliIC0tZGlzYWJsZS1ndGsiCisgICAgOzsKKyAgICBOZXRCU0QpCisgICAgZXhwb3J0IExJQlRPT0xJWkU9bGlidG9vbGl6ZQorICAgIGV4cG9ydCBDRkxBR1M9Ii1JL3Vzci9wa2cvaW5jbHVkZSIKKyAgICBleHBvcnQgTERGTEFHUz0iLUwvdXNyL3BrZy9saWIiCisgICAgZXhwb3J0IFBLR19DT05GSUdfUEFUSD0iL3Vzci9sb2NhbC9saWIvcGtnY29uZmlnIgorICAgIEZMQUdTPSIkRkxBR1MgLS1kaXNhYmxlLW1vbm9kb2MgLS1kaXNhYmxlLW1vbm8gLS1kaXNhYmxlLXF0MyAtLWRpc2FibGUtcXQ0IC0tZGlzYWJsZS14bWx0b21hbiAtLXByZWZpeD0vb3B0IC0td2l0aC1kaXN0cm89bm9uZSAtLWRpc2FibGUtcHl0aG9uIC0tZGlzYWJsZS1nbGliIC0tZGlzYWJsZS1ndGsgLS1kaXNhYmxlLW1hbnBhZ2VzIgorICAgIDs7CisgICAgTGludXgpCisgICAgOzsKK2VzYWMKKworY2FzZSAiJFVTRVIiIGluCisgICAgbGF0aGlhdHx0cmVudGwpCisgICAgRkxBR1M9IiRGTEFHUyAtLWRpc2FibGUtcXQ0IgorICAgIDs7CisgICAgc2ViZXN0KQorICAgIEZMQUdTPSIkRkxBR1MgLS1kaXNhYmxlLW1vbm9kb2MgLS1lbmFibGUtZGJ1cz1ubyAtLWVuYWJsZS1tb25vPW5vIC0tZW5hYmxlLXF0Mz1ubyAtLWVuYWJsZS1xdDQ9bm8gIC0tc3lzY29uZmRpcj0vZXRjIC0tbG9jYWxzdGF0ZWRpcj0vdmFyIC0tcHJlZml4PS91c3IgIC0tZGlzYWJsZS1tYW5wYWdlcyAtLWRpc2FibGUteG1sdG9tYW4iCisgICAgOzsKK2VzYWMKKworQ0ZMQUdTPSIkQ0ZMQUdTIC1nIC1PMCIgZXhlYyAuL2F1dG9nZW4uc2ggJEZMQUdTICIkQCIgLS1lbmFibGUtcXQzPW5vCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvY29tbW9uL0NoYW5nZUxvZyBiL2F2YWhpLTAuNi4zMS9jb21tb24vQ2hhbmdlTG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNjVlNjkKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvY29tbW9uL0NoYW5nZUxvZwpAQCAtMCwwICsxLDEyIEBACisyMDEwLTEwLTA0ICBnZXR0ZXh0aXplICA8YnVnLWdudS1nZXR0ZXh0QGdudS5vcmc+CisKKwkqIGdldHRleHQubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xOC4xLgorCSogaWNvbnYubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xOC4xLgorCSogbGliLWxkLm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTguMS4KKwkqIGxpYi1saW5rLm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTguMS4KKwkqIGxpYi1wcmVmaXgubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xOC4xLgorCSogbmxzLm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTguMS4KKwkqIHBvLm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTguMS4KKwkqIHByb2d0ZXN0Lm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTguMS4KKwkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkIHRoZSBuZXcgZmlsZXMuCisKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9jb21tb24vTWFrZWZpbGUuYW0gYi9hdmFoaS0wLjYuMzEvY29tbW9uL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNzk5NjUKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvY29tbW9uL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMjEgQEAKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisjCisjIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisjIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisjIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisjIFVTQS4KKworRVhUUkFfRElTVCA9IGdldHRleHQubTQgaWNvbnYubTQgbGliLWxkLm00IGxpYi1saW5rLm00IGxpYi1wcmVmaXgubTQgbmxzLm00IHBvLm00IHByb2d0ZXN0Lm00IGdldHRleHQubTQgaWNvbnYubTQgbGliLWxkLm00IGxpYi1saW5rLm00IGxpYi1wcmVmaXgubTQgbmxzLm00IHBvLm00IHByb2d0ZXN0Lm00IFwKKyAgICBkb3h5Z2VuLm00IFwKKwlkb3h5Z2VuLm1rIFwKKwlweXRob24ubTQKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9jb21tb24vTWFrZWZpbGUuaW4gYi9hdmFoaS0wLjYuMzEvY29tbW9uL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjOWRiOGUKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvY29tbW9uL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNTI1IEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjExLjMgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACisKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisjCisjIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisjIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisjIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisjIFVTQS4KK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK3N1YmRpciA9IGNvbW1vbgorRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluIENoYW5nZUxvZworQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL2FjeF9wdGhyZWFkLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9nY2Nfc3RhY2tfcHJvdGVjdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vZ2NjX3Zpc2liaWxpdHkubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2ludGx0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9pbnRyb3NwZWN0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9sdG9wdGlvbnMubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2x0c3VnYXIubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2x0dmVyc2lvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHR+b2Jzb2xldGUubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL25scy5tNCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9weXRob24ubTQgXAorCSQodG9wX3NyY2RpcikvYWNpbmNsdWRlLm00ICQodG9wX3NyY2RpcikvY29tbW9uL2RveHlnZW4ubTQgXAorCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCithbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQoQUNMT0NBTF9NNCkKK21raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCitDT05GSUdfQ0xFQU5fRklMRVMgPQorQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KK0FNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQorYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAiICRAOworQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQorYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKK2FtX192X2F0XzAgPSBACitTT1VSQ0VTID0KK0RJU1RfU09VUkNFUyA9CitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQUxMX0xJTkdVQVMgPSBAQUxMX0xJTkdVQVNACitBTVRBUiA9IEBBTVRBUkAKK0FNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAorQVIgPSBAQVJACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVZBSElfQVVUT0lQRF9HUk9VUCA9IEBBVkFISV9BVVRPSVBEX0dST1VQQAorQVZBSElfQVVUT0lQRF9VU0VSID0gQEFWQUhJX0FVVE9JUERfVVNFUkAKK0FWQUhJX0dST1VQID0gQEFWQUhJX0dST1VQQAorQVZBSElfUFJJVl9BQ0NFU1NfR1JPVVAgPSBAQVZBSElfUFJJVl9BQ0NFU1NfR1JPVVBACitBVkFISV9VU0VSID0gQEFWQUhJX1VTRVJACitBV0sgPSBAQVdLQAorQ0FUQUxPR1MgPSBAQ0FUQUxPR1NACitDQVRPQkpFWFQgPSBAQ0FUT0JKRVhUQAorQ0MgPSBAQ0NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREFUQURJUk5BTUUgPSBAREFUQURJUk5BTUVACitEQlVTX0NGTEFHUyA9IEBEQlVTX0NGTEFHU0AKK0RCVVNfTElCUyA9IEBEQlVTX0xJQlNACitEQlVTX1NZU1RFTV9CVVNfREVGQVVMVF9BRERSRVNTID0gQERCVVNfU1lTVEVNX0JVU19ERUZBVUxUX0FERFJFU1NACitEQlVTX1NZU19ESVIgPSBAREJVU19TWVNfRElSQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RMTFRPT0wgPSBARExMVE9PTEAKK0RPWFlHRU5fUEFQRVJfU0laRSA9IEBET1hZR0VOX1BBUEVSX1NJWkVACitEU1lNVVRJTCA9IEBEU1lNVVRJTEAKK0RVTVBCSU4gPSBARFVNUEJJTkAKK0RYX0NPTkZJRyA9IEBEWF9DT05GSUdACitEWF9ET0NESVIgPSBARFhfRE9DRElSQAorRFhfRE9UID0gQERYX0RPVEAKK0RYX0RPWFlHRU4gPSBARFhfRE9YWUdFTkAKK0RYX0RWSVBTID0gQERYX0RWSVBTQAorRFhfRUdSRVAgPSBARFhfRUdSRVBACitEWF9FTlYgPSBARFhfRU5WQAorRFhfRkxBR19jaGkgPSBARFhfRkxBR19jaGlACitEWF9GTEFHX2NobSA9IEBEWF9GTEFHX2NobUAKK0RYX0ZMQUdfZG9jID0gQERYX0ZMQUdfZG9jQAorRFhfRkxBR19kb3QgPSBARFhfRkxBR19kb3RACitEWF9GTEFHX2h0bWwgPSBARFhfRkxBR19odG1sQAorRFhfRkxBR19tYW4gPSBARFhfRkxBR19tYW5ACitEWF9GTEFHX3BkZiA9IEBEWF9GTEFHX3BkZkAKK0RYX0ZMQUdfcHMgPSBARFhfRkxBR19wc0AKK0RYX0ZMQUdfcnRmID0gQERYX0ZMQUdfcnRmQAorRFhfRkxBR194bWwgPSBARFhfRkxBR194bWxACitEWF9ISEMgPSBARFhfSEhDQAorRFhfTEFURVggPSBARFhfTEFURVhACitEWF9NQUtFSU5ERVggPSBARFhfTUFLRUlOREVYQAorRFhfUERGTEFURVggPSBARFhfUERGTEFURVhACitEWF9QRVJMID0gQERYX1BFUkxACitEWF9QUk9KRUNUID0gQERYX1BST0pFQ1RACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VYRUVYVCA9IEBFWEVFWFRACitGR1JFUCA9IEBGR1JFUEAKK0dBQ1VUSUwgPSBAR0FDVVRJTEAKK0dFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACitHTElCMjBfQ0ZMQUdTID0gQEdMSUIyMF9DRkxBR1NACitHTElCMjBfTElCUyA9IEBHTElCMjBfTElCU0AKK0dNT0ZJTEVTID0gQEdNT0ZJTEVTQAorR01TR0ZNVCA9IEBHTVNHRk1UQAorR09CSkVDVF9DRkxBR1MgPSBAR09CSkVDVF9DRkxBR1NACitHT0JKRUNUX0xJQlMgPSBAR09CSkVDVF9MSUJTQAorR1JFUCA9IEBHUkVQQAorR1RLMjBfQ0ZMQUdTID0gQEdUSzIwX0NGTEFHU0AKK0dUSzIwX0xJQlMgPSBAR1RLMjBfTElCU0AKK0dUSzMwX0NGTEFHUyA9IEBHVEszMF9DRkxBR1NACitHVEszMF9MSUJTID0gQEdUSzMwX0xJQlNACitIT1dMX0NPTVBBVF9WRVJTSU9OID0gQEhPV0xfQ09NUEFUX1ZFUlNJT05ACitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lOU1RPQkpFWFQgPSBASU5TVE9CSkVYVEAKK0lOVExMSUJTID0gQElOVExMSUJTQAorSU5UTFRPT0xfRVhUUkFDVCA9IEBJTlRMVE9PTF9FWFRSQUNUQAorSU5UTFRPT0xfTUVSR0UgPSBASU5UTFRPT0xfTUVSR0VACitJTlRMVE9PTF9QRVJMID0gQElOVExUT09MX1BFUkxACitJTlRMVE9PTF9VUERBVEUgPSBASU5UTFRPT0xfVVBEQVRFQAorSU5UUk9TUEVDVElPTl9DRkxBR1MgPSBASU5UUk9TUEVDVElPTl9DRkxBR1NACitJTlRST1NQRUNUSU9OX0NPTVBJTEVSID0gQElOVFJPU1BFQ1RJT05fQ09NUElMRVJACitJTlRST1NQRUNUSU9OX0dFTkVSQVRFID0gQElOVFJPU1BFQ1RJT05fR0VORVJBVEVACitJTlRST1NQRUNUSU9OX0dJUkRJUiA9IEBJTlRST1NQRUNUSU9OX0dJUkRJUkAKK0lOVFJPU1BFQ1RJT05fTElCUyA9IEBJTlRST1NQRUNUSU9OX0xJQlNACitJTlRST1NQRUNUSU9OX01BS0VGSUxFID0gQElOVFJPU1BFQ1RJT05fTUFLRUZJTEVACitJTlRST1NQRUNUSU9OX1NDQU5ORVIgPSBASU5UUk9TUEVDVElPTl9TQ0FOTkVSQAorSU5UUk9TUEVDVElPTl9UWVBFTElCRElSID0gQElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUkAKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCQVZBSElfQ0xJRU5UX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DTElFTlRfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfQ09NTU9OX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DT01NT05fVkVSU0lPTl9JTkZPQAorTElCQVZBSElfQ09NUEFUX0hPV0xfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NPTVBBVF9IT1dMX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPTVBBVF9MSUJETlNfU0RfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NPTVBBVF9MSUJETlNfU0RfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfQ09SRV9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ09SRV9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9HTElCX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9HTElCX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0dPQkpFQ1RfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0dPQkpFQ1RfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfUVQzX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9RVDNfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfUVQ0X1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9RVDRfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfVUlfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX1VJX1ZFUlNJT05fSU5GT0AKK0xJQkRBRU1PTl9DRkxBR1MgPSBATElCREFFTU9OX0NGTEFHU0AKK0xJQkRBRU1PTl9MSUJTID0gQExJQkRBRU1PTl9MSUJTQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAorTUNTID0gQE1DU0AKK01EQVNTRU1CTEVSID0gQE1EQVNTRU1CTEVSQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTUtJTlNUQUxMRElSUyA9IEBNS0lOU1RBTExESVJTQAorTU9DX1FUMyA9IEBNT0NfUVQzQAorTU9DX1FUNCA9IEBNT0NfUVQ0QAorTU9OT0RPQ0VSID0gQE1PTk9ET0NFUkAKK01PTk9ET0NfQ0ZMQUdTID0gQE1PTk9ET0NfQ0ZMQUdTQAorTU9OT0RPQ19ESVIgPSBATU9OT0RPQ19ESVJACitNT05PRE9DX0xJQlMgPSBATU9OT0RPQ19MSUJTQAorTVNHRk1UID0gQE1TR0ZNVEAKK01TR0ZNVF9PUFRTID0gQE1TR0ZNVF9PUFRTQAorTVNHTUVSR0UgPSBATVNHTUVSR0VACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitPQkpEVU1QID0gQE9CSkRVTVBACitPQkpFWFQgPSBAT0JKRVhUQAorT1RPT0wgPSBAT1RPT0xACitPVE9PTDY0ID0gQE9UT09MNjRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK1BLR19DT05GSUdfTElCRElSID0gQFBLR19DT05GSUdfTElCRElSQAorUEtHX0NPTkZJR19QQVRIID0gQFBLR19DT05GSUdfUEFUSEAKK1BPRklMRVMgPSBAUE9GSUxFU0AKK1BPU1VCID0gQFBPU1VCQAorUE9fSU5fREFUQURJUl9GQUxTRSA9IEBQT19JTl9EQVRBRElSX0ZBTFNFQAorUE9fSU5fREFUQURJUl9UUlVFID0gQFBPX0lOX0RBVEFESVJfVFJVRUAKK1BUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKK1BUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAorUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKK1BZVEhPTiA9IEBQWVRIT05ACitQWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAorUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKK1BZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKK1BZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAorUVQzX0NGTEFHUyA9IEBRVDNfQ0ZMQUdTQAorUVQzX0xJQlMgPSBAUVQzX0xJQlNACitRVDRfQ0ZMQUdTID0gQFFUNF9DRkxBR1NACitRVDRfTElCUyA9IEBRVDRfTElCU0AKK1JBTkxJQiA9IEBSQU5MSUJACitTRUQgPSBAU0VEQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NUT1cgPSBAU1RPV0AKK1NUUklQID0gQFNUUklQQAorVVNFX05MUyA9IEBVU0VfTkxTQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorVklTSUJJTElUWV9ISURERU5fQ0ZMQUdTID0gQFZJU0lCSUxJVFlfSElEREVOX0NGTEFHU0AKK1hHRVRURVhUID0gQFhHRVRURVhUQAorWE1MX0NGTEFHUyA9IEBYTUxfQ0ZMQUdTQAorWE1MX0xJQlMgPSBAWE1MX0xJQlNACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9BUiA9IEBhY19jdF9BUkAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKK2FjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK2FjeF9wdGhyZWFkX2NvbmZpZyA9IEBhY3hfcHRocmVhZF9jb25maWdACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2F2YWhpX3J1bnRpbWVfZGlyID0gQGF2YWhpX3J1bnRpbWVfZGlyQAorYXZhaGlfc29ja2V0ID0gQGF2YWhpX3NvY2tldEAKK2F2YWhpbG9jYWxlZGlyID0gQGF2YWhpbG9jYWxlZGlyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitoYXZlX3BrZ19jb25maWcgPSBAaGF2ZV9wa2dfY29uZmlnQAoraGF2ZV94bWx0b21hbiA9IEBoYXZlX3htbHRvbWFuQAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2ludGVyZmFjZXNkaXIgPSBAaW50ZXJmYWNlc2RpckAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAorcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3B5ZXhlY2RpciA9IEBweWV4ZWNkaXJACitweXRob25kaXIgPSBAcHl0aG9uZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzcmNkaXIgPSBAc3JjZGlyQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAorc3lzdGVtZHN5c3RlbXVuaXRkaXIgPSBAc3lzdGVtZHN5c3RlbXVuaXRkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK0VYVFJBX0RJU1QgPSBnZXR0ZXh0Lm00IGljb252Lm00IGxpYi1sZC5tNCBsaWItbGluay5tNCBsaWItcHJlZml4Lm00IG5scy5tNCBwby5tNCBwcm9ndGVzdC5tNCBnZXR0ZXh0Lm00IGljb252Lm00IGxpYi1sZC5tNCBsaWItbGluay5tNCBsaWItcHJlZml4Lm00IG5scy5tNCBwby5tNCBwcm9ndGVzdC5tNCBcCisgICAgZG94eWdlbi5tNCBcCisJZG94eWdlbi5tayBcCisJcHl0aG9uLm00CisKK2FsbDogYWxsLWFtCisKKy5TVUZGSVhFUzoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCisJICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduIGNvbW1vbi9NYWtlZmlsZSc7IFwKKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gY29tbW9uL01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKK3RhZ3M6IFRBR1MKK1RBR1M6CisKK2N0YWdzOiBDVEFHUworQ1RBR1M6CisKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUKK2luc3RhbGxkaXJzOgoraW5zdGFsbDogaW5zdGFsbC1hbQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCit1bmluc3RhbGw6IHVuaW5zdGFsbC1hbQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQoraW5zdGFsbC1zdHJpcDoKKwlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICAgICAgaW5zdGFsbDsgXAorCWVsc2UgXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCisJZmkKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKK2NsZWFuOiBjbGVhbi1hbQorCitjbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIG1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1nZW5lcmljCisKK2R2aTogZHZpLWFtCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1hbQorCitodG1sLWFtOgorCitpbmZvOiBpbmZvLWFtCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbToKKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCisKK2luc3RhbGwtZHZpLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06CisKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCisKK2luc3RhbGwtaHRtbC1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1pbmZvLWFtOgorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCisKK2luc3RhbGwtcGRmLWFtOgorCitpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCisKK2luc3RhbGwtcHMtYW06CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOgorCisuTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisKKy5QSE9OWTogYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgXAorCWRpc3RjbGVhbiBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBkaXN0ZGlyIGR2aSBcCisJZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIFwKKwlpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIFwKKwlpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gXAorCWluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgXAorCWluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBpbnN0YWxsLXN0cmlwIFwKKwlpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gXAorCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1nZW5lcmljIFwKKwltb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbQorCisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9jb21tb24vYWN4X3B0aHJlYWQubTQgYi9hdmFoaS0wLjYuMzEvY29tbW9uL2FjeF9wdGhyZWFkLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjZjYzMzIKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvY29tbW9uL2FjeF9wdGhyZWFkLm00CkBAIC0wLDAgKzEsMzQ4IEBACitkbmwgQHN5bm9wc2lzIEFDWF9QVEhSRUFEKFtBQ1RJT04tSUYtRk9VTkRbLCBBQ1RJT04tSUYtTk9ULUZPVU5EXV0pCitkbmwKK2RubCBAc3VtbWFyeSBmaWd1cmUgb3V0IGhvdyB0byBidWlsZCBDIHByb2dyYW1zIHVzaW5nIFBPU0lYIHRocmVhZHMKK2RubAorZG5sIFRoaXMgbWFjcm8gZmlndXJlcyBvdXQgaG93IHRvIGJ1aWxkIEMgcHJvZ3JhbXMgdXNpbmcgUE9TSVggdGhyZWFkcy4KK2RubCBJdCBzZXRzIHRoZSBQVEhSRUFEX0xJQlMgb3V0cHV0IHZhcmlhYmxlIHRvIHRoZSB0aHJlYWRzIGxpYnJhcnkgYW5kCitkbmwgbGlua2VyIGZsYWdzLCBhbmQgdGhlIFBUSFJFQURfQ0ZMQUdTIG91dHB1dCB2YXJpYWJsZSB0byBhbnkgc3BlY2lhbAorZG5sIEMgY29tcGlsZXIgZmxhZ3MgdGhhdCBhcmUgbmVlZGVkLiAoVGhlIHVzZXIgY2FuIGFsc28gZm9yY2UgY2VydGFpbgorZG5sIGNvbXBpbGVyIGZsYWdzL2xpYnMgdG8gYmUgdGVzdGVkIGJ5IHNldHRpbmcgdGhlc2UgZW52aXJvbm1lbnQKK2RubCB2YXJpYWJsZXMuKQorZG5sCitkbmwgQWxzbyBzZXRzIFBUSFJFQURfQ0MgdG8gYW55IHNwZWNpYWwgQyBjb21waWxlciB0aGF0IGlzIG5lZWRlZCBmb3IKK2RubCBtdWx0aS10aHJlYWRlZCBwcm9ncmFtcyAoZGVmYXVsdHMgdG8gdGhlIHZhbHVlIG9mIENDIG90aGVyd2lzZSkuCitkbmwgKFRoaXMgaXMgbmVjZXNzYXJ5IG9uIEFJWCB0byB1c2UgdGhlIHNwZWNpYWwgY2NfciBjb21waWxlciBhbGlhcy4pCitkbmwKK2RubCBOT1RFOiBZb3UgYXJlIGFzc3VtZWQgdG8gbm90IG9ubHkgY29tcGlsZSB5b3VyIHByb2dyYW0gd2l0aCB0aGVzZQorZG5sIGZsYWdzLCBidXQgYWxzbyBsaW5rIGl0IHdpdGggdGhlbSBhcyB3ZWxsLiBlLmcuIHlvdSBzaG91bGQgbGluaworZG5sIHdpdGggJFBUSFJFQURfQ0MgJENGTEFHUyAkUFRIUkVBRF9DRkxBR1MgJExERkxBR1MgLi4uICRQVEhSRUFEX0xJQlMKK2RubCAkTElCUworZG5sCitkbmwgSWYgeW91IGFyZSBvbmx5IGJ1aWxkaW5nIHRocmVhZHMgcHJvZ3JhbXMsIHlvdSBtYXkgd2lzaCB0byB1c2UKK2RubCB0aGVzZSB2YXJpYWJsZXMgaW4geW91ciBkZWZhdWx0IExJQlMsIENGTEFHUywgYW5kIENDOgorZG5sCitkbmwgICAgICAgIExJQlM9IiRQVEhSRUFEX0xJQlMgJExJQlMiCitkbmwgICAgICAgIENGTEFHUz0iJENGTEFHUyAkUFRIUkVBRF9DRkxBR1MiCitkbmwgICAgICAgIENDPSIkUFRIUkVBRF9DQyIKK2RubAorZG5sIEluIGFkZGl0aW9uLCBpZiB0aGUgUFRIUkVBRF9DUkVBVEVfSk9JTkFCTEUgdGhyZWFkLWF0dHJpYnV0ZQorZG5sIGNvbnN0YW50IGhhcyBhIG5vbnN0YW5kYXJkIG5hbWUsIGRlZmluZXMgUFRIUkVBRF9DUkVBVEVfSk9JTkFCTEUgdG8KK2RubCB0aGF0IG5hbWUgKGUuZy4gUFRIUkVBRF9DUkVBVEVfVU5ERVRBQ0hFRCBvbiBBSVgpLgorZG5sCitkbmwgQUNUSU9OLUlGLUZPVU5EIGlzIGEgbGlzdCBvZiBzaGVsbCBjb21tYW5kcyB0byBydW4gaWYgYSB0aHJlYWRzCitkbmwgbGlicmFyeSBpcyBmb3VuZCwgYW5kIEFDVElPTi1JRi1OT1QtRk9VTkQgaXMgYSBsaXN0IG9mIGNvbW1hbmRzIHRvCitkbmwgcnVuIGl0IGlmIGl0IGlzIG5vdCBmb3VuZC4gSWYgQUNUSU9OLUlGLUZPVU5EIGlzIG5vdCBzcGVjaWZpZWQsIHRoZQorZG5sIGRlZmF1bHQgYWN0aW9uIHdpbGwgZGVmaW5lIEhBVkVfUFRIUkVBRC4KK2RubAorZG5sIFBsZWFzZSBsZXQgdGhlIGF1dGhvcnMga25vdyBpZiB0aGlzIG1hY3JvIGZhaWxzIG9uIGFueSBwbGF0Zm9ybSwgb3IKK2RubCBpZiB5b3UgaGF2ZSBhbnkgb3RoZXIgc3VnZ2VzdGlvbnMgb3IgY29tbWVudHMuIFRoaXMgbWFjcm8gd2FzIGJhc2VkCitkbmwgb24gd29yayBieSBTR0ogb24gYXV0b2NvbmYgc2NyaXB0cyBmb3IgRkZUVyAod3d3LmZmdHcub3JnKSAod2l0aAorZG5sIGhlbHAgZnJvbSBNLiBGcmlnbyksIGFzIHdlbGwgYXMgYWNfcHRocmVhZCBhbmQgaGJfcHRocmVhZCBtYWNyb3MKK2RubCBwb3N0ZWQgYnkgQWxlamFuZHJvIEZvcmVybyBDdWVydm8gdG8gdGhlIGF1dG9jb25mIG1hY3JvIHJlcG9zaXRvcnkuCitkbmwgV2UgYXJlIGFsc28gZ3JhdGVmdWwgZm9yIHRoZSBoZWxwZnVsIGZlZWRiYWNrIG9mIG51bWVyb3VzIHVzZXJzLgorZG5sCitkbmwgQGNhdGVnb3J5IEluc3RhbGxlZFBhY2thZ2VzCitkbmwgQGF1dGhvciBTdGV2ZW4gRy4gSm9obnNvbiA8c3RldmVuakBhbHVtLm1pdC5lZHU+CitkbmwgQHZlcnNpb24gMjAwNi0wNS0yOQorZG5sIEBsaWNlbnNlIEdQTFdpdGhBQ0V4Y2VwdGlvbgorZG5sIAorZG5sIENoZWNrcyBmb3IgR0NDIHNoYXJlZC9wdGhyZWFkIGluY29uc2lzdGVuY3kgYmFzZWQgb24gd29yayBieQorZG5sIE1hcmNpbiBPd3NpYW55IDxtYXJjaW5Ab3dzaWFueS5wbD4KKworCitBQ19ERUZVTihbQUNYX1BUSFJFQURdLCBbCitBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pCitBQ19MQU5HX1NBVkUKK0FDX0xBTkdfQworYWN4X3B0aHJlYWRfb2s9bm8KKworIyBXZSB1c2VkIHRvIGNoZWNrIGZvciBwdGhyZWFkLmggZmlyc3QsIGJ1dCB0aGlzIGZhaWxzIGlmIHB0aHJlYWQuaAorIyByZXF1aXJlcyBzcGVjaWFsIGNvbXBpbGVyIGZsYWdzIChlLmcuIG9uIFRydWU2NCBvciBTZXF1ZW50KS4KKyMgSXQgZ2V0cyBjaGVja2VkIGZvciBpbiB0aGUgbGluayB0ZXN0IGFueXdheS4KKworIyBGaXJzdCBvZiBhbGwsIGNoZWNrIGlmIHRoZSB1c2VyIGhhcyBzZXQgYW55IG9mIHRoZSBQVEhSRUFEX0xJQlMsCisjIGV0Y2V0ZXJhIGVudmlyb25tZW50IHZhcmlhYmxlcywgYW5kIGlmIHRocmVhZHMgbGlua2luZyB3b3JrcyB1c2luZworIyB0aGVtOgoraWYgdGVzdCB4IiRQVEhSRUFEX0xJQlMkUFRIUkVBRF9DRkxBR1MiICE9IHg7IHRoZW4KKyAgICAgICAgc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisgICAgICAgIENGTEFHUz0iJENGTEFHUyAkUFRIUkVBRF9DRkxBR1MiCisgICAgICAgIHNhdmVfTElCUz0iJExJQlMiCisgICAgICAgIExJQlM9IiRQVEhSRUFEX0xJQlMgJExJQlMiCisgICAgICAgIEFDX01TR19DSEVDS0lORyhbZm9yIHB0aHJlYWRfam9pbiBpbiBMSUJTPSRQVEhSRUFEX0xJQlMgd2l0aCBDRkxBR1M9JFBUSFJFQURfQ0ZMQUdTXSkKKyAgICAgICAgQUNfVFJZX0xJTktfRlVOQyhwdGhyZWFkX2pvaW4sIGFjeF9wdGhyZWFkX29rPXllcykKKyAgICAgICAgQUNfTVNHX1JFU1VMVCgkYWN4X3B0aHJlYWRfb2spCisgICAgICAgIGlmIHRlc3QgeCIkYWN4X3B0aHJlYWRfb2siID0geG5vOyB0aGVuCisgICAgICAgICAgICAgICAgUFRIUkVBRF9MSUJTPSIiCisgICAgICAgICAgICAgICAgUFRIUkVBRF9DRkxBR1M9IiIKKyAgICAgICAgZmkKKyAgICAgICAgTElCUz0iJHNhdmVfTElCUyIKKyAgICAgICAgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCitmaQorCisjIFdlIG11c3QgY2hlY2sgZm9yIHRoZSB0aHJlYWRzIGxpYnJhcnkgdW5kZXIgYSBudW1iZXIgb2YgZGlmZmVyZW50CisjIG5hbWVzOyB0aGUgb3JkZXJpbmcgaXMgdmVyeSBpbXBvcnRhbnQgYmVjYXVzZSBzb21lIHN5c3RlbXMKKyMgKGUuZy4gREVDKSBoYXZlIGJvdGggLWxwdGhyZWFkIGFuZCAtbHB0aHJlYWRzLCB3aGVyZSBvbmUgb2YgdGhlCisjIGxpYnJhcmllcyBpcyBicm9rZW4gKG5vbi1QT1NJWCkuCisKKyMgQ3JlYXRlIGEgbGlzdCBvZiB0aHJlYWQgZmxhZ3MgdG8gdHJ5LiAgSXRlbXMgc3RhcnRpbmcgd2l0aCBhICItIiBhcmUKKyMgQyBjb21waWxlciBmbGFncywgYW5kIG90aGVyIGl0ZW1zIGFyZSBsaWJyYXJ5IG5hbWVzLCBleGNlcHQgZm9yICJub25lIgorIyB3aGljaCBpbmRpY2F0ZXMgdGhhdCB3ZSB0cnkgd2l0aG91dCBhbnkgZmxhZ3MgYXQgYWxsLCBhbmQgInB0aHJlYWQtY29uZmlnIgorIyB3aGljaCBpcyBhIHByb2dyYW0gcmV0dXJuaW5nIHRoZSBmbGFncyBmb3IgdGhlIFB0aCBlbXVsYXRpb24gbGlicmFyeS4KKworYWN4X3B0aHJlYWRfZmxhZ3M9InB0aHJlYWRzIG5vbmUgLUt0aHJlYWQgLWt0aHJlYWQgbHRocmVhZCAtcHRocmVhZCAtcHRocmVhZHMgLW10aHJlYWRzIHB0aHJlYWQgLS10aHJlYWQtc2FmZSAtbXQgcHRocmVhZC1jb25maWciCisKKyMgVGhlIG9yZGVyaW5nICppcyogKHNvbWV0aW1lcykgaW1wb3J0YW50LiAgU29tZSBub3RlcyBvbiB0aGUKKyMgaW5kaXZpZHVhbCBpdGVtcyBmb2xsb3c6CisKKyMgcHRocmVhZHM6IEFJWCAobXVzdCBjaGVjayB0aGlzIGJlZm9yZSAtbHB0aHJlYWQpCisjIG5vbmU6IGluIGNhc2UgdGhyZWFkcyBhcmUgaW4gbGliYzsgc2hvdWxkIGJlIHRyaWVkIGJlZm9yZSAtS3RocmVhZCBhbmQKKyMgICAgICAgb3RoZXIgY29tcGlsZXIgZmxhZ3MgdG8gcHJldmVudCBjb250aW51YWwgY29tcGlsZXIgd2FybmluZ3MKKyMgLUt0aHJlYWQ6IFNlcXVlbnQgKHRocmVhZHMgaW4gbGliYywgYnV0IC1LdGhyZWFkIG5lZWRlZCBmb3IgcHRocmVhZC5oKQorIyAta3RocmVhZDogRnJlZUJTRCBrZXJuZWwgdGhyZWFkcyAocHJlZmVycmVkIHRvIC1wdGhyZWFkIHNpbmNlIFNNUC1hYmxlKQorIyBsdGhyZWFkOiBMaW51eFRocmVhZHMgcG9ydCBvbiBGcmVlQlNEIChhbHNvIHByZWZlcnJlZCB0byAtcHRocmVhZCkKKyMgLXB0aHJlYWQ6IExpbnV4L2djYyAoa2VybmVsIHRocmVhZHMpLCBCU0QvZ2NjICh1c2VybGFuZCB0aHJlYWRzKQorIyAtcHRocmVhZHM6IFNvbGFyaXMvZ2NjCisjIC1tdGhyZWFkczogTWluZ3czMi9nY2MsIEx5bngvZ2NjCisjIC1tdDogU3VuIFdvcmtzaG9wIEMgKG1heSBvbmx5IGxpbmsgU3VuT1MgdGhyZWFkcyBbLWx0aHJlYWRdLCBidXQgaXQKKyMgICAgICBkb2Vzbid0IGh1cnQgdG8gY2hlY2sgc2luY2UgdGhpcyBzb21ldGltZXMgZGVmaW5lcyBwdGhyZWFkcyB0b287CisjICAgICAgYWxzbyBkZWZpbmVzIC1EX1JFRU5UUkFOVCkKKyMgICAgICAuLi4gLW10IGlzIGFsc28gdGhlIHB0aHJlYWRzIGZsYWcgZm9yIEhQL2FDQworIyBwdGhyZWFkOiBMaW51eCwgZXRjZXRlcmEKKyMgLS10aHJlYWQtc2FmZTogS0FJIEMrKworIyBwdGhyZWFkLWNvbmZpZzogdXNlIHB0aHJlYWQtY29uZmlnIHByb2dyYW0gKGZvciBHTlUgUHRoIGxpYnJhcnkpCisKK2Nhc2UgIiR7aG9zdF9jcHV9LSR7aG9zdF9vc30iIGluCisgICAgICAgICpzb2xhcmlzKikKKworICAgICAgICAjIE9uIFNvbGFyaXMgKGF0IGxlYXN0LCBmb3Igc29tZSB2ZXJzaW9ucyksIGxpYmMgY29udGFpbnMgc3R1YmJlZAorICAgICAgICAjIChub24tZnVuY3Rpb25hbCkgdmVyc2lvbnMgb2YgdGhlIHB0aHJlYWRzIHJvdXRpbmVzLCBzbyBsaW5rLWJhc2VkCisgICAgICAgICMgdGVzdHMgd2lsbCBlcnJvbmVvdXNseSBzdWNjZWVkLiAgKFdlIG5lZWQgdG8gbGluayB3aXRoIC1wdGhyZWFkcy8tbXQvCisgICAgICAgICMgLWxwdGhyZWFkLikgIChUaGUgc3R1YnMgYXJlIG1pc3NpbmcgcHRocmVhZF9jbGVhbnVwX3B1c2gsIG9yIHJhdGhlcgorICAgICAgICAjIGEgZnVuY3Rpb24gY2FsbGVkIGJ5IHRoaXMgbWFjcm8sIHNvIHdlIGNvdWxkIGNoZWNrIGZvciB0aGF0LCBidXQKKyAgICAgICAgIyB3aG8ga25vd3Mgd2hldGhlciB0aGV5J2xsIHN0dWIgdGhhdCB0b28gaW4gYSBmdXR1cmUgbGliYy4pICBTbywKKyAgICAgICAgIyB3ZSdsbCBqdXN0IGxvb2sgZm9yIC1wdGhyZWFkcyBhbmQgLWxwdGhyZWFkIGZpcnN0OgorCisgICAgICAgIGFjeF9wdGhyZWFkX2ZsYWdzPSItcHRocmVhZHMgcHRocmVhZCAtbXQgLXB0aHJlYWQgJGFjeF9wdGhyZWFkX2ZsYWdzIgorICAgICAgICA7OworZXNhYworCitpZiB0ZXN0IHgiJGFjeF9wdGhyZWFkX29rIiA9IHhubzsgdGhlbgorZm9yIGZsYWcgaW4gJGFjeF9wdGhyZWFkX2ZsYWdzOyBkbworCisgICAgICAgIGNhc2UgJGZsYWcgaW4KKyAgICAgICAgICAgICAgICBub25lKQorICAgICAgICAgICAgICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBwdGhyZWFkcyB3b3JrIHdpdGhvdXQgYW55IGZsYWdzXSkKKyAgICAgICAgICAgICAgICA7OworCisgICAgICAgICAgICAgICAgLSopCisgICAgICAgICAgICAgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHB0aHJlYWRzIHdvcmsgd2l0aCAkZmxhZ10pCisgICAgICAgICAgICAgICAgUFRIUkVBRF9DRkxBR1M9IiRmbGFnIgorICAgICAgICAgICAgICAgIDs7CisKKwkJcHRocmVhZC1jb25maWcpCisJCUFDX0NIRUNLX1BST0coYWN4X3B0aHJlYWRfY29uZmlnLCBwdGhyZWFkLWNvbmZpZywgeWVzLCBubykKKwkJaWYgdGVzdCB4IiRhY3hfcHRocmVhZF9jb25maWciID0geG5vOyB0aGVuIGNvbnRpbnVlOyBmaQorCQlQVEhSRUFEX0NGTEFHUz0iYHB0aHJlYWQtY29uZmlnIC0tY2ZsYWdzYCIKKwkJUFRIUkVBRF9MSUJTPSJgcHRocmVhZC1jb25maWcgLS1sZGZsYWdzYCBgcHRocmVhZC1jb25maWcgLS1saWJzYCIKKwkJOzsKKworICAgICAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgdGhlIHB0aHJlYWRzIGxpYnJhcnkgLWwkZmxhZ10pCisgICAgICAgICAgICAgICAgUFRIUkVBRF9MSUJTPSItbCRmbGFnIgorICAgICAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKworICAgICAgICBzYXZlX0xJQlM9IiRMSUJTIgorICAgICAgICBzYXZlX0NGTEFHUz0iJENGTEFHUyIKKyAgICAgICAgTElCUz0iJFBUSFJFQURfTElCUyAkTElCUyIKKyAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRQVEhSRUFEX0NGTEFHUyIKKworICAgICAgICAjIENoZWNrIGZvciB2YXJpb3VzIGZ1bmN0aW9ucy4gIFdlIG11c3QgaW5jbHVkZSBwdGhyZWFkLmgsCisgICAgICAgICMgc2luY2Ugc29tZSBmdW5jdGlvbnMgbWF5IGJlIG1hY3Jvcy4gIChPbiB0aGUgU2VxdWVudCwgd2UKKyAgICAgICAgIyBuZWVkIGEgc3BlY2lhbCBmbGFnIC1LdGhyZWFkIHRvIG1ha2UgdGhpcyBoZWFkZXIgY29tcGlsZS4pCisgICAgICAgICMgV2UgY2hlY2sgZm9yIHB0aHJlYWRfam9pbiBiZWNhdXNlIGl0IGlzIGluIC1scHRocmVhZCBvbiBJUklYCisgICAgICAgICMgd2hpbGUgcHRocmVhZF9jcmVhdGUgaXMgaW4gbGliYy4gIFdlIGNoZWNrIGZvciBwdGhyZWFkX2F0dHJfaW5pdAorICAgICAgICAjIGR1ZSB0byBERUMgY3JhemluZXNzIHdpdGggLWxwdGhyZWFkcy4gIFdlIGNoZWNrIGZvcgorICAgICAgICAjIHB0aHJlYWRfY2xlYW51cF9wdXNoIGJlY2F1c2UgaXQgaXMgb25lIG9mIHRoZSBmZXcgcHRocmVhZAorICAgICAgICAjIGZ1bmN0aW9ucyBvbiBTb2xhcmlzIHRoYXQgZG9lc24ndCBoYXZlIGEgbm9uLWZ1bmN0aW9uYWwgbGliYyBzdHViLgorICAgICAgICAjIFdlIHRyeSBwdGhyZWFkX2NyZWF0ZSBvbiBnZW5lcmFsIHByaW5jaXBsZXMuCisgICAgICAgIEFDX1RSWV9MSU5LKFsjaW5jbHVkZSA8cHRocmVhZC5oPl0sCisgICAgICAgICAgICAgICAgICAgIFtwdGhyZWFkX3QgdGg7IHB0aHJlYWRfam9pbih0aCwgMCk7CisgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX2F0dHJfaW5pdCgwKTsgcHRocmVhZF9jbGVhbnVwX3B1c2goMCwgMCk7CisgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX2NyZWF0ZSgwLDAsMCwwKTsgcHRocmVhZF9jbGVhbnVwX3BvcCgwKTsgXSwKKyAgICAgICAgICAgICAgICAgICAgW2FjeF9wdGhyZWFkX29rPXllc10pCisKKyAgICAgICAgTElCUz0iJHNhdmVfTElCUyIKKyAgICAgICAgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCisKKyAgICAgICAgQUNfTVNHX1JFU1VMVCgkYWN4X3B0aHJlYWRfb2spCisgICAgICAgIGlmIHRlc3QgIngkYWN4X3B0aHJlYWRfb2siID0geHllczsgdGhlbgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBmaQorCisgICAgICAgIFBUSFJFQURfTElCUz0iIgorICAgICAgICBQVEhSRUFEX0NGTEFHUz0iIgorZG9uZQorZmkKKworIyBWYXJpb3VzIG90aGVyIGNoZWNrczoKK2lmIHRlc3QgIngkYWN4X3B0aHJlYWRfb2siID0geHllczsgdGhlbgorICAgICAgICBzYXZlX0xJQlM9IiRMSUJTIgorICAgICAgICBMSUJTPSIkUFRIUkVBRF9MSUJTICRMSUJTIgorICAgICAgICBzYXZlX0NGTEFHUz0iJENGTEFHUyIKKyAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRQVEhSRUFEX0NGTEFHUyIKKworICAgICAgICAjIERldGVjdCBBSVggbG9zc2FnZTogSk9JTkFCTEUgYXR0cmlidXRlIGlzIGNhbGxlZCBVTkRFVEFDSEVELgorCUFDX01TR19DSEVDS0lORyhbZm9yIGpvaW5hYmxlIHB0aHJlYWQgYXR0cmlidXRlXSkKKwlhdHRyX25hbWU9dW5rbm93bgorCWZvciBhdHRyIGluIFBUSFJFQURfQ1JFQVRFX0pPSU5BQkxFIFBUSFJFQURfQ1JFQVRFX1VOREVUQUNIRUQ7IGRvCisJICAgIEFDX1RSWV9MSU5LKFsjaW5jbHVkZSA8cHRocmVhZC5oPl0sIFtpbnQgYXR0cj0kYXR0cjsgcmV0dXJuIGF0dHI7XSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyX25hbWU9JGF0dHI7IGJyZWFrXSkKKwlkb25lCisgICAgICAgIEFDX01TR19SRVNVTFQoJGF0dHJfbmFtZSkKKyAgICAgICAgaWYgdGVzdCAiJGF0dHJfbmFtZSIgIT0gUFRIUkVBRF9DUkVBVEVfSk9JTkFCTEU7IHRoZW4KKyAgICAgICAgICAgIEFDX0RFRklORV9VTlFVT1RFRChQVEhSRUFEX0NSRUFURV9KT0lOQUJMRSwgJGF0dHJfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbRGVmaW5lIHRvIG5lY2Vzc2FyeSBzeW1ib2wgaWYgdGhpcyBjb25zdGFudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VzIGEgbm9uLXN0YW5kYXJkIG5hbWUgb24geW91ciBzeXN0ZW0uXSkKKyAgICAgICAgZmkKKworICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIG1vcmUgc3BlY2lhbCBmbGFncyBhcmUgcmVxdWlyZWQgZm9yIHB0aHJlYWRzXSkKKyAgICAgICAgZmxhZz1ubworICAgICAgICBjYXNlICIke2hvc3RfY3B1fS0ke2hvc3Rfb3N9IiBpbgorICAgICAgICAgICAgKi1haXgqIHwgKi1mcmVlYnNkKiB8ICotZGFyd2luKikgZmxhZz0iLURfVEhSRUFEX1NBRkUiOzsKKyAgICAgICAgICAgICpzb2xhcmlzKiB8ICotb3NmKiB8ICotaHB1eCopIGZsYWc9Ii1EX1JFRU5UUkFOVCI7OworICAgICAgICBlc2FjCisgICAgICAgIEFDX01TR19SRVNVTFQoJHtmbGFnfSkKKyAgICAgICAgaWYgdGVzdCAieCRmbGFnIiAhPSB4bm87IHRoZW4KKyAgICAgICAgICAgIFBUSFJFQURfQ0ZMQUdTPSIkZmxhZyAkUFRIUkVBRF9DRkxBR1MiCisgICAgICAgIGZpCisKKyAgICAgICAgTElCUz0iJHNhdmVfTElCUyIKKyAgICAgICAgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCisgICAgICAgICMgTW9yZSBBSVggbG9zc2FnZTogbXVzdCBjb21waWxlIHdpdGggeGxjX3Igb3IgY2NfcgorCWlmIHRlc3QgeCIkR0NDIiAhPSB4eWVzOyB0aGVuCisgICAgICAgICAgQUNfQ0hFQ0tfUFJPR1MoUFRIUkVBRF9DQywgeGxjX3IgY2NfciwgJHtDQ30pCisgICAgICAgIGVsc2UKKyAgICAgICAgICBQVEhSRUFEX0NDPSRDQworCWZpCisKKyAgICMgVGhlIG5leHQgcGFydCB0cmllcyB0byBkZXRlY3QgR0NDIGluY29uc2lzdGVuY3kgd2l0aCAtc2hhcmVkIG9uIHNvbWUKKyAgICMgYXJjaGl0ZWN0dXJlcyBhbmQgc3lzdGVtcy4gVGhlIHByb2JsZW0gaXMgdGhhdCBpbiBjZXJ0YWluCisgICAjIGNvbmZpZ3VyYXRpb25zLCB3aGVuIC1zaGFyZWQgaXMgc3BlY2lmaWVkLCBHQ0MgImZvcmdldHMiIHRvCisgICAjIGludGVybmFsbHkgdXNlIHZhcmlvdXMgZmxhZ3Mgd2hpY2ggYXJlIHN0aWxsIG5lY2Vzc2FyeS4KKyAgIAorICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGNoZWNrIGZvciBHQ0MgcHRocmVhZC9zaGFyZWQgaW5jb25zaXN0ZW5jaWVzXSkKKyAgIGNoZWNrX2luY29uc2lzdGVuY2llcz15ZXMKKyAgIGNhc2UgIiR7aG9zdF9jcHV9LSR7aG9zdF9vc30iIGluCisgICAgICotZGFyd2luKikgY2hlY2tfaW5jb25zaXN0ZW5jaWVzPW5vIDs7CisgICBlc2FjCisgICBpZiB0ZXN0IHgiJEdDQyIgIT0geHllcyAtbyAieCRjaGVja19pbmNvbnNpc3RlbmNpZXMiICE9IHh5ZXMgOyB0aGVuCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorCisgICAgICAjIEluIG9yZGVyIG5vdCB0byBjcmVhdGUgc2V2ZXJhbCBsZXZlbHMgb2YgaW5kZW50YXRpb24sIHdlIHRlc3QKKyAgICAgICMgdGhlIHZhbHVlIG9mICIkb2siIHVudGlsIHdlIGZpbmQgb3V0IHRoZSBjdXJlIG9yIHJ1biBvdXQgb2YKKyAgICAgICMgaWRlYXMuCisgICAgICBvaz0ibm8iCisKKyAgICAgICMKKyAgICAgICMgUHJlcGFyZSB0aGUgZmxhZ3MKKyAgICAgICMKKyAgICAgIHNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICAgICAgc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgIHNhdmVfQ0M9IiRDQyIKKyAgICAgICMgVHJ5IHdpdGggdGhlIGZsYWdzIGRldGVybWluZWQgYnkgdGhlIGVhcmxpZXIgY2hlY2tzLgorICAgICAgIworICAgICAgIyAtV2wsLXosZGVmcyBmb3JjZXMgbGluay10aW1lIHN5bWJvbCByZXNvbHV0aW9uLCBzbyB0aGF0IHRoZQorICAgICAgIyBsaW5raW5nIGNoZWNrcyB3aXRoIC1zaGFyZWQgYWN0dWFsbHkgaGF2ZSBhbnkgdmFsdWUKKyAgICAgICMKKyAgICAgICMgRklYTUU6IC1mUElDIGlzIHJlcXVpcmVkIGZvciAtc2hhcmVkIG9uIG1hbnkgYXJjaGl0ZWN0dXJlcywKKyAgICAgICMgc28gd2Ugc3BlY2lmeSBpdCBoZXJlLCBidXQgdGhlIHJpZ2h0IHdheSB3b3VsZCBwcm9iYWJseSBiZSB0bworICAgICAgIyBwcm9wZXJseSBkZXRlY3Qgd2hldGhlciBpdCBpcyBhY3R1YWxseSByZXF1aXJlZC4KKyAgICAgIENGTEFHUz0iLXNoYXJlZCAtZlBJQyAtV2wsLXosZGVmcyAkQ0ZMQUdTICRQVEhSRUFEX0NGTEFHUyIKKyAgICAgIExJQlM9IiRQVEhSRUFEX0xJQlMgJExJQlMiCisgICAgICBDQz0iJFBUSFJFQURfQ0MiCisKKyAgICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciAtcHRocmVhZCBpcyBzdWZmaWNpZW50IHdpdGggLXNoYXJlZF0pCisgICAgICBBQ19UUllfTElOSyhbI2luY2x1ZGUgPHB0aHJlYWQuaD5dLAorICAgICAgICAgW3B0aHJlYWRfdCB0aDsgcHRocmVhZF9qb2luKHRoLCAwKTsKKyAgICAgICAgIHB0aHJlYWRfYXR0cl9pbml0KDApOyBwdGhyZWFkX2NsZWFudXBfcHVzaCgwLCAwKTsKKyAgICAgICAgIHB0aHJlYWRfY3JlYXRlKDAsMCwwLDApOyBwdGhyZWFkX2NsZWFudXBfcG9wKDApOyBdLAorICAgICAgICAgW29rPXllc10pCisgICAgICAKKyAgICAgIGlmIHRlc3QgIngkb2siID0geHllczsgdGhlbgorICAgICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIGVsc2UKKyAgICAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIGZpCisgICAKKyAgICAgICMKKyAgICAgICMgTGludXggZ2NjIG9uIHNvbWUgYXJjaGl0ZWN0dXJlcyBzdWNoIGFzIG1pcHMvbWlwc2VsIGZvcmdldHMKKyAgICAgICMgYWJvdXQgLWxwdGhyZWFkCisgICAgICAjCisgICAgICBpZiB0ZXN0IHgiJG9rIiA9IHhubzsgdGhlbgorICAgICAgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIC1scHRocmVhZCBmaXhlcyB0aGF0XSkKKyAgICAgICAgIExJQlM9Ii1scHRocmVhZCAkUFRIUkVBRF9MSUJTICRzYXZlX0xJQlMiCisgICAgICAgICBBQ19UUllfTElOSyhbI2luY2x1ZGUgPHB0aHJlYWQuaD5dLAorICAgICAgICAgICAgW3B0aHJlYWRfdCB0aDsgcHRocmVhZF9qb2luKHRoLCAwKTsKKyAgICAgICAgICAgIHB0aHJlYWRfYXR0cl9pbml0KDApOyBwdGhyZWFkX2NsZWFudXBfcHVzaCgwLCAwKTsKKyAgICAgICAgICAgIHB0aHJlYWRfY3JlYXRlKDAsMCwwLDApOyBwdGhyZWFkX2NsZWFudXBfcG9wKDApOyBdLAorICAgICAgICAgICAgW29rPXllc10pCisgICAKKyAgICAgICAgIGlmIHRlc3QgIngkb2siID0geHllczsgdGhlbgorICAgICAgICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgICAgICAgIFBUSFJFQURfTElCUz0iLWxwdGhyZWFkICRQVEhSRUFEX0xJQlMiCisgICAgICAgICBlbHNlCisgICAgICAgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICAgICBmaQorICAgICAgZmkKKyAgICAgICMKKyAgICAgICMgRnJlZUJTRCA0LjEwIGdjYyBmb3JnZXRzIHRvIHVzZSAtbGNfciBpbnN0ZWFkIG9mIC1sYworICAgICAgIworICAgICAgaWYgdGVzdCB4IiRvayIgPSB4bm87IHRoZW4KKyAgICAgICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciAtbGNfciBmaXhlcyB0aGF0XSkKKyAgICAgICAgIExJQlM9Ii1sY19yICRQVEhSRUFEX0xJQlMgJHNhdmVfTElCUyIKKyAgICAgICAgIEFDX1RSWV9MSU5LKFsjaW5jbHVkZSA8cHRocmVhZC5oPl0sCisgICAgICAgICAgICAgW3B0aHJlYWRfdCB0aDsgcHRocmVhZF9qb2luKHRoLCAwKTsKKyAgICAgICAgICAgICAgcHRocmVhZF9hdHRyX2luaXQoMCk7IHB0aHJlYWRfY2xlYW51cF9wdXNoKDAsIDApOworICAgICAgICAgICAgICBwdGhyZWFkX2NyZWF0ZSgwLDAsMCwwKTsgcHRocmVhZF9jbGVhbnVwX3BvcCgwKTsgXSwKKyAgICAgICAgICAgICBbb2s9eWVzXSkKKyAgIAorICAgICAgICAgaWYgdGVzdCAieCRvayIgPSB4eWVzOyB0aGVuCisgICAgICAgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgICAgICAgUFRIUkVBRF9MSUJTPSItbGNfciAkUFRIUkVBRF9MSUJTIgorICAgICAgICAgZWxzZQorICAgICAgICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgICAgZmkKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0IHgiJG9rIiA9IHhubzsgdGhlbgorICAgICAgICAgIyBPSywgd2UgaGF2ZSBydW4gb3V0IG9mIGlkZWFzCisgICAgICAgICBBQ19NU0dfV0FSTihbSW1wb3NzaWJsZSB0byBkZXRlcm1pbmUgaG93IHRvIHVzZSBwdGhyZWFkcyB3aXRoIHNoYXJlZCBsaWJyYXJpZXNdKQorCisgICAgICAgICAjIHNvIGl0J3Mgbm90IHNhZmUgdG8gYXNzdW1lIHRoYXQgd2UgbWF5IHVzZSBwdGhyZWFkcworICAgICAgICAgYWN4X3B0aHJlYWRfb2s9bm8KKyAgICAgIGZpCisKKyAgICAgIENGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorICAgICAgTElCUz0iJHNhdmVfTElCUyIKKyAgICAgIENDPSIkc2F2ZV9DQyIKKyAgIGZpCitlbHNlCisgICAgICAgIFBUSFJFQURfQ0M9IiRDQyIKK2ZpCisKK0FDX1NVQlNUKFBUSFJFQURfTElCUykKK0FDX1NVQlNUKFBUSFJFQURfQ0ZMQUdTKQorQUNfU1VCU1QoUFRIUkVBRF9DQykKKworIyBGaW5hbGx5LCBleGVjdXRlIEFDVElPTi1JRi1GT1VORC9BQ1RJT04tSUYtTk9ULUZPVU5EOgoraWYgdGVzdCB4IiRhY3hfcHRocmVhZF9vayIgPSB4eWVzOyB0aGVuCisgICAgICAgIGlmZWxzZShbJDFdLCxBQ19ERUZJTkUoSEFWRV9QVEhSRUFELDEsW0RlZmluZSBpZiB5b3UgaGF2ZSBQT1NJWCB0aHJlYWRzIGxpYnJhcmllcyBhbmQgaGVhZGVyIGZpbGVzLl0pLFskMV0pCisgICAgICAgIDoKK2Vsc2UKKyAgICAgICAgYWN4X3B0aHJlYWRfb2s9bm8KKyAgICAgICAgJDIKK2ZpCitBQ19MQU5HX1JFU1RPUkUKK10pZG5sIEFDWF9QVEhSRUFECmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvY29tbW9uL2RveHlnZW4ubTQgYi9hdmFoaS0wLjYuMzEvY29tbW9uL2RveHlnZW4ubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTljNTZjMgotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9jb21tb24vZG94eWdlbi5tNApAQCAtMCwwICsxLDMxMiBAQAorIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBBdXRvY29uZi4gICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgKEMpIDIwMDQgT3JlbiBCZW4tS2lraQorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgdGhlIEF1dG9jb25mIG1hY3JvIGZpbGVzLgorCisjIEdlbmVyYXRlIGF1dG9tYXRpYyBkb2N1bWVudGF0aW9uIHVzaW5nIERveHlnZW4uIFdvcmtzIGluIGNvbmNlcnQgd2l0aCB0aGUKKyMgYW1pbmNsdWRlLm00IGZpbGUgYW5kIGEgY29tcGF0aWJsZSBkb3h5Z2VuIGNvbmZpZ3VyYXRpb24gZmlsZS4gRGVmaW5lcyB0aGUKKyMgZm9sbG93aW5nIHB1YmxpYyBtYWNyb3M6CisjCisjIERYXz8/P19GRUFUVVJFKE9OfE9GRikgLSBjb250cm9sIHRoZSBkZWZhdWx0IHNldHRpbmcgZm8gYSBEb3h5Z2VuIGZlYXR1cmUuCisjIFN1cHBvcnRlZCBmZWF0dXJlcyBhcmUgJ0RPWFlHRU4nIGl0c2VsZiwgJ0RPVCcgZm9yIGdlbmVyYXRpbmcgZ3JhcGhpY3MsCisjICdIVE1MJyBmb3IgcGxhaW4gSFRNTCwgJ0NITScgZm9yIGNvbXByZXNzZWQgSFRNTCBoZWxwIChmb3IgTVMgdXNlcnMpLCAnQ0hJJworIyBmb3IgZ2VuZXJhdGluZyBhIHNlcGVyYXRlIC5jaGkgZmlsZSBieSB0aGUgLmNobSBmaWxlLCBhbmQgJ01BTicsICdSVEYnLAorIyAnWE1MJywgJ1BERicgYW5kICdQUycgZm9yIHRoZSBhcHByb3ByaWF0ZSBvdXRwdXQgZm9ybWF0cy4gVGhlIGVudmlyb25tZW50CisjIHZhcmlhYmxlIERPWFlHRU5fUEFQRVJfU0laRSBtYXkgYmUgc3BlY2lmaWVkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0ICdhNHdpZGUnCisjIHBhcGVyIHNpemUuCisjCisjIEJ5IGRlZmF1bHQsIEhUTUwsIFBERiBhbmQgUFMgZG9jdW1lbnRhdGlvbiBpcyBnZW5lcmF0ZWQgYXMgdGhpcyBzZWVtcyB0byBiZQorIyB0aGUgbW9zdCBwb3B1bGFyIGFuZCBwb3J0YWJsZSBjb21iaW5hdGlvbi4gTUFOIHBhZ2VzIGNyZWF0ZWQgYnkgRG94eWdlbiBhcmUKKyMgdXN1YWxseSBwcm9ibGVtYXRpYywgdGhvdWdoIGJ5IHBpY2tpbmcgYW4gYXBwcm9wcmlhdGUgc3Vic2V0IGFuZCBkb2luZyBzb21lCisjIG1hc3NhZ2luZyB0aGV5IG1pZ2h0IGJlIGJldHRlciB0aGFuIG5vdGhpbmcuIENITSBhbmQgUlRGIGFyZSBzcGVjaWZpYyBmb3IgTVMKKyMgKG5vdGUgdGhhdCB5b3UgY2FuJ3QgZ2VuZXJhdGUgYm90aCBIVE1MIGFuZCBDSE0gYXQgdGhlIHNhbWUgdGltZSkuIFRoZSBYTUwgaXMKKyMgcmF0aGVyIHVzZWxlc3MgdW5sZXNzIHlvdSBhcHBseSBzcGVjaWFsaXplZCBwb3N0LXByb2Nlc3NpbmcgdG8gaXQuCisjCisjIFRoZSBtYWNybyBtYWlubHkgY29udHJvbHMgdGhlIGRlZmF1bHQgc3RhdGUgb2YgdGhlIGZlYXR1cmUuIFRoZSB1c2UgY2FuCisjIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGJ5IHNwZWNpZnlpbmcgLS1lbmFibGUgb3IgLS1kaXNhYmxlLiBUaGUgbWFjcm9zIGVuc3VyZQorIyB0aGF0IGNvbnRyYWRpY3RvcnkgZmxhZ3MgYXJlIG5vdCBnaXZlbiAoZS5nLiwgLS1lbmFibGUtZG94eWdlbi1odG1sIGFuZAorIyAtLWVuYWJsZS1kb3h5Z2VuLWNobSwgLS1lbmFibGUtZG94eWdlbi1hbnl0aGluZyB3aXRoIC0tZGlzYWJsZS1kb3h5Z2VuLCBldGMuKQorIyBGaW5hbGx5LCBlYWNoIGZlYXR1cmUgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGRpc2FibGVkICh3aXRoIGEgd2FybmluZykgaWYgdGhlCisjIHJlcXVpcmVkIHByb2dyYW1zIGFyZSBtaXNzaW5nLgorIworIyBPbmNlIGFsbCB0aGUgZmVhdHVyZSBkZWZhdWx0cyBoYXZlIGJlZW4gc3BlY2lmaWVkLCBjYWxsIERYX0lOSVRfRE9YWUdFTiB3aXRoCisjIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczogYSBvbmUtd29yZCBuYW1lIGZvciB0aGUgcHJvamVjdCBmb3IgdXNlIGFzIGEKKyMgZmlsZW5hbWUgYmFzZSBldGMuLCBhbiBvcHRpb25hbCBjb25maWd1cmF0aW9uIGZpbGUgbmFtZSAodGhlIGRlZmF1bHQgaXMKKyMgJ0RveHlmaWxlJywgdGhlIHNhbWUgYXMgRG94eWdlbidzIGRlZmF1bHQpLCBhbmQgYW4gb3B0aW9uYWwgb3V0cHV0IGRpcmVjdG9yeQorIyBuYW1lICh0aGUgZGVmYXVsdCBpcyAnZG94eWdlbi1kb2MnKS4KKworIyMgLS0tLS0tLS0tLSMjCisjIyBEZWZhdWx0cy4gIyMKKyMjIC0tLS0tLS0tLS0jIworCitEWF9FTlY9IiIKK0FDX0RFRlVOKFtEWF9GRUFUVVJFX2RvY10sICBPTikKK0FDX0RFRlVOKFtEWF9GRUFUVVJFX2RvdF0sICBPTikKK0FDX0RFRlVOKFtEWF9GRUFUVVJFX21hbl0sICBPRkYpCitBQ19ERUZVTihbRFhfRkVBVFVSRV9odG1sXSwgT04pCitBQ19ERUZVTihbRFhfRkVBVFVSRV9jaG1dLCAgT0ZGKQorQUNfREVGVU4oW0RYX0ZFQVRVUkVfY2hpXSwgIE9GRikKK0FDX0RFRlVOKFtEWF9GRUFUVVJFX3J0Zl0sICBPRkYpCitBQ19ERUZVTihbRFhfRkVBVFVSRV94bWxdLCAgT0ZGKQorQUNfREVGVU4oW0RYX0ZFQVRVUkVfcGRmXSwgIE9OKQorQUNfREVGVU4oW0RYX0ZFQVRVUkVfcHNdLCAgIE9OKQorCisjIyAtLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFByaXZhdGUgbWFjcm9zLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgRFhfRU5WX0FQUEVORChWQVJJQUJMRSwgVkFMVUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBcHBlbmQgVkFSSUFCTEU9IlZBTFVFIiB0byBEWF9FTlYgZm9yIGludm9raW5nIGRveHlnZW4uCitBQ19ERUZVTihbRFhfRU5WX0FQUEVORF0sIFtBQ19TVUJTVChbRFhfRU5WXSwgWyIkRFhfRU5WICQxPSckMiciXSldKQorCisjIERYX0RJUk5BTUVfRVhQUgorIyAtLS0tLS0tLS0tLS0tLS0KKyMgRXhwYW5kIGludG8gYSBzaGVsbCBleHByZXNzaW9uIHByaW50cyB0aGUgZGlyZWN0b3J5IHBhcnQgb2YgYSBwYXRoLgorQUNfREVGVU4oW0RYX0RJUk5BTUVfRVhQUl0sCisgICAgICAgICBbW2V4cHIgIi4kMSIgOiAnXChcLlwpW14vXSokJyBcfCAieCQxIiA6ICd4XCguKlwpL1teL10qJCddXSkKKworIyBEWF9JRl9GRUFUVVJFKEZFQVRVUkUsIElGLU9OLCBJRi1PRkYpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXhwYW5kcyBhY2NvcmRpbmcgdG8gdGhlIE00IChzdGF0aWMpIHN0YXR1cyBvZiB0aGUgZmVhdHVyZS4KK0FDX0RFRlVOKFtEWF9JRl9GRUFUVVJFXSwgW2lmZWxzZShEWF9GRUFUVVJFXyQxLCBPTiwgWyQyXSwgWyQzXSldKQorCisjIERYX1JFUVVJUkVfUFJPRyhWQVJJQUJMRSwgUFJPR1JBTSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZXF1aXJlIHRoZSBzcGVjaWZpZWQgcHJvZ3JhbSB0byBiZSBmb3VuZCBmb3IgdGhlIERYX0NVUlJFTlRfRkVBVFVSRSB0byB3b3JrLgorQUNfREVGVU4oW0RYX1JFUVVJUkVfUFJPR10sIFsKK0FDX1BBVEhfVE9PTChbJDFdLCBbJDJdKQoraWYgdGVzdCAiJERYX0ZMQUdfW11EWF9DVVJSRU5UX0ZFQVRVUkUkJDEiID0gMTsgdGhlbgorICAgIEFDX01TR19XQVJOKFskMiBub3QgZm91bmQgLSB3aWxsIG5vdCBEWF9DVVJSRU5UX0RFU0NSSVBUSU9OXSkKKyAgICBBQ19TVUJTVChbRFhfRkxBR19dRFhfQ1VSUkVOVF9GRUFUVVJFLCAwKQorZmkKK10pCisKKyMgRFhfVEVTVF9GRUFUVVJFKEZFQVRVUkUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFeHBhbmQgdG8gYSBzaGVsbCBleHByZXNzaW9uIHRlc3Rpbmcgd2hldGhlciB0aGUgZmVhdHVyZSBpcyBhY3RpdmUuCitBQ19ERUZVTihbRFhfVEVTVF9GRUFUVVJFXSwgW3Rlc3QgIiREWF9GTEFHXyQxIiA9IDFdKQorCisjIERYX0NIRUNLX0RFUEVORChSRVFVSVJFRF9GRUFUVVJFLCBSRVFVSVJFRF9TVEFURSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBWZXJpZnkgdGhhdCBhIHJlcXVpcmVkIGZlYXR1cmVzIGhhcyB0aGUgcmlnaHQgc3RhdGUgYmVmb3JlIHRyeWluZyB0byB0dXJuIG9uCisjIHRoZSBEWF9DVVJSRU5UX0ZFQVRVUkUuCitBQ19ERUZVTihbRFhfQ0hFQ0tfREVQRU5EXSwgWwordGVzdCAiJERYX0ZMQUdfJDEiID0gIiQyIiBcCit8fCBBQ19NU0dfRVJST1IoW2RveHlnZW4tRFhfQ1VSUkVOVF9GRUFUVVJFIGlmZWxzZShbJDJdLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVzLCBjb250cmFkaWN0cykgZG94eWdlbi1EWF9DVVJSRU5UX0ZFQVRVUkVdKQorXSkKKworIyBEWF9DTEVBUl9ERVBFTkQoRkVBVFVSRSwgUkVRVUlSRURfRkVBVFVSRSwgUkVRVUlSRURfU1RBVEUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHVybiBvZmYgdGhlIERYX0NVUlJFTlRfRkVBVFVSRSBpZiB0aGUgcmVxdWlyZWQgZmVhdHVyZSBpcyBvZmYuCitBQ19ERUZVTihbRFhfQ0xFQVJfREVQRU5EXSwgWwordGVzdCAiJERYX0ZMQUdfJDEiID0gIiQyIiB8fCBBQ19TVUJTVChbRFhfRkxBR19dRFhfQ1VSUkVOVF9GRUFUVVJFLCAwKQorXSkKKworIyBEWF9GRUFUVVJFX0FSRyhGRUFUVVJFLCBERVNDUklQVElPTiwKKyMgICAgICAgICAgICAgICAgQ0hFQ0tfREVQRU5ELCBDTEVBUl9ERVBFTkQsCisjICAgICAgICAgICAgICAgIFJFUVVJUkUsIERPLUlGLU9OLCBETy1JRi1PRkYpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFBhcnNlIHRoZSBjb21tYW5kLWxpbmUgb3B0aW9uIGNvbnRyb2xsaW5nIGEgZmVhdHVyZS4gQ0hFQ0tfREVQRU5EIGlzIGNhbGxlZAorIyBpZiB0aGUgdXNlciBleHBsaWNpdGx5IHR1cm5zIHRoZSBmZWF0dXJlIG9uIChhbmQgaW52b2tlcyBEWF9DSEVDS19ERVBFTkQpLAorIyBvdGhlcndpc2UgQ0xFQVJfREVQRU5EIGlzIGNhbGxlZCB0byB0dXJuIG9mZiB0aGUgZGVmYXVsdCBzdGF0ZSBpZiBhIHJlcXVpcmVkCisjIGZlYXR1cmUgaXMgZGlzYWJsZWQgKHVzaW5nIERYX0NMRUFSX0RFUEVORCkuIFJFUVVJUkUgcGVyZm9ybXMgYWRkaXRpb25hbAorIyByZXF1aXJlbWVudCB0ZXN0cyAoRFhfUkVRVUlSRV9QUk9HKS4gRmluYWxseSwgYW4gYXV0b21ha2UgZmxhZyBpcyBzZXQgYW5kCisjIERPLUlGLU9OIG9yIERPLUlGLU9GRiBhcmUgY2FsbGVkIGFjY29yZGluZyB0byB0aGUgZmluYWwgc3RhdGUgb2YgdGhlIGZlYXR1cmUuCitBQ19ERUZVTihbRFhfQVJHX0FCTEVdLCBbCisgICAgQUNfREVGVU4oW0RYX0NVUlJFTlRfRkVBVFVSRV0sIFskMV0pCisgICAgQUNfREVGVU4oW0RYX0NVUlJFTlRfREVTQ1JJUFRJT05dLCBbJDJdKQorICAgIEFDX0FSR19FTkFCTEUoZG94eWdlbi0kMSwKKyAgICAgICAgICAgICAgICAgIFtBU19IRUxQX1NUUklORyhEWF9JRl9GRUFUVVJFKFskMV0sIFstLWRpc2FibGUtZG94eWdlbi0kMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbLS1lbmFibGUtZG94eWdlbi0kMV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERYX0lGX0ZFQVRVUkUoWyQxXSwgW2Rvbid0ICQyXSwgWyQyXSkpXSwKKyAgICAgICAgICAgICAgICAgIFsKK2Nhc2UgIiRlbmFibGV2YWwiIGluCisjKAoreXxZfHllc3xZZXN8WUVTKQorICAgIEFDX1NVQlNUKFtEWF9GTEFHXyQxXSwgMSkKKyAgICAkMworOzsgIygKK258Tnxub3xOb3xOTykKKyAgICBBQ19TVUJTVChbRFhfRkxBR18kMV0sIDApCis7OyAjKAorKikKKyAgICBBQ19NU0dfRVJST1IoW2ludmFsaWQgdmFsdWUgJyRlbmFibGV2YWwnIGdpdmVuIHRvIGRveHlnZW4tJDFdKQorOzsKK2VzYWMKK10sIFsKK0FDX1NVQlNUKFtEWF9GTEFHXyQxXSwgW0RYX0lGX0ZFQVRVUkUoWyQxXSwgMSwgMCldKQorJDQKK10pCitpZiBEWF9URVNUX0ZFQVRVUkUoWyQxXSk7IHRoZW4KKyAgICAkNQorICAgIDoKK2ZpCitpZiBEWF9URVNUX0ZFQVRVUkUoWyQxXSk7IHRoZW4KKyAgICBBTV9DT05ESVRJT05BTChEWF9DT05EXyQxLCA6KQorICAgICQ2CisgICAgOgorZWxzZQorICAgIEFNX0NPTkRJVElPTkFMKERYX0NPTkRfJDEsIGZhbHNlKQorICAgICQ3CisgICAgOgorZmkKK10pCisKKyMjIC0tLS0tLS0tLS0tLS0tICMjCisjIyBQdWJsaWMgbWFjcm9zLiAjIworIyMgLS0tLS0tLS0tLS0tLS0gIyMKKworIyBEWF9YWFhfRkVBVFVSRShERUZBVUxUX1NUQVRFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0RYX0RPWFlHRU5fRkVBVFVSRV0sIFtBQ19ERUZVTihbRFhfRkVBVFVSRV9kb2NdLCAgWyQxXSldKQorQUNfREVGVU4oW0RYX01BTl9GRUFUVVJFXSwgICAgIFtBQ19ERUZVTihbRFhfRkVBVFVSRV9tYW5dLCAgWyQxXSldKQorQUNfREVGVU4oW0RYX0hUTUxfRkVBVFVSRV0sICAgIFtBQ19ERUZVTihbRFhfRkVBVFVSRV9odG1sXSwgWyQxXSldKQorQUNfREVGVU4oW0RYX0NITV9GRUFUVVJFXSwgICAgIFtBQ19ERUZVTihbRFhfRkVBVFVSRV9jaG1dLCAgWyQxXSldKQorQUNfREVGVU4oW0RYX0NISV9GRUFUVVJFXSwgICAgIFtBQ19ERUZVTihbRFhfRkVBVFVSRV9jaGldLCAgWyQxXSldKQorQUNfREVGVU4oW0RYX1JURl9GRUFUVVJFXSwgICAgIFtBQ19ERUZVTihbRFhfRkVBVFVSRV9ydGZdLCAgWyQxXSldKQorQUNfREVGVU4oW0RYX1hNTF9GRUFUVVJFXSwgICAgIFtBQ19ERUZVTihbRFhfRkVBVFVSRV94bWxdLCAgWyQxXSldKQorQUNfREVGVU4oW0RYX1hNTF9GRUFUVVJFXSwgICAgIFtBQ19ERUZVTihbRFhfRkVBVFVSRV94bWxdLCAgWyQxXSldKQorQUNfREVGVU4oW0RYX1BERl9GRUFUVVJFXSwgICAgIFtBQ19ERUZVTihbRFhfRkVBVFVSRV9wZGZdLCAgWyQxXSldKQorQUNfREVGVU4oW0RYX1BTX0ZFQVRVUkVdLCAgICAgIFtBQ19ERUZVTihbRFhfRkVBVFVSRV9wc10sICAgWyQxXSldKQorCisjIERYX0lOSVRfRE9YWUdFTihQUk9KRUNULCBbQ09ORklHLUZJTEVdLCBbT1VUUFVULURPQy1ESVJdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUFJPSkVDVCBhbHNvIHNlcnZlcyBhcyB0aGUgYmFzZSBuYW1lIGZvciB0aGUgZG9jdW1lbnRhdGlvbiBmaWxlcy4KKyMgVGhlIGRlZmF1bHQgQ09ORklHLUZJTEUgaXMgIkRveHlmaWxlIiBhbmQgT1VUUFVULURPQy1ESVIgaXMgImRveHlnZW4tZG9jIi4KK0FDX0RFRlVOKFtEWF9JTklUX0RPWFlHRU5dLCBbCisKKyMgRmlsZXM6CitBQ19TVUJTVChbRFhfUFJPSkVDVF0sIFskMV0pCitBQ19TVUJTVChbRFhfQ09ORklHXSwgW2lmZWxzZShbJDJdLCBbXSwgRG94eWZpbGUsIFskMl0pXSkKK0FDX1NVQlNUKFtEWF9ET0NESVJdLCBbaWZlbHNlKFskM10sIFtdLCBkb3h5Z2VuLWRvYywgWyQzXSldKQorCisjIEVudmlyb25tZW50IHZhcmlhYmxlcyB1c2VkIGluc2lkZSBkb3h5Z2VuLmNmZzoKK0RYX0VOVl9BUFBFTkQoU1JDRElSLCAkc3JjZGlyKQorRFhfRU5WX0FQUEVORChQUk9KRUNULCAkRFhfUFJPSkVDVCkKK0RYX0VOVl9BUFBFTkQoRE9DRElSLCAkRFhfRE9DRElSKQorRFhfRU5WX0FQUEVORChWRVJTSU9OLCAkUEFDS0FHRV9WRVJTSU9OKQorCisjIERveHlnZW4gaXRzZWxmOgorRFhfQVJHX0FCTEUoZG9jLCBbZ2VuZXJhdGUgYW55IGRveHlnZW4gZG9jdW1lbnRhdGlvbl0sCisgICAgICAgICAgICBbXSwKKyAgICAgICAgICAgIFtdLAorICAgICAgICAgICAgW0RYX1JFUVVJUkVfUFJPRyhbRFhfRE9YWUdFTl0sIGRveHlnZW4pCisgICAgICAgICAgICAgRFhfUkVRVUlSRV9QUk9HKFtEWF9QRVJMXSwgcGVybCldLAorICAgICAgICAgICAgW0RYX0VOVl9BUFBFTkQoUEVSTF9QQVRILCAkRFhfUEVSTCldKQorCisjIERvdCBmb3IgZ3JhcGhpY3M6CitEWF9BUkdfQUJMRShkb3QsIFtnZW5lcmF0ZSBncmFwaGljcyBmb3IgZG94eWdlbiBkb2N1bWVudGF0aW9uXSwKKyAgICAgICAgICAgIFtEWF9DSEVDS19ERVBFTkQoZG9jLCAxKV0sCisgICAgICAgICAgICBbRFhfQ0xFQVJfREVQRU5EKGRvYywgMSldLAorICAgICAgICAgICAgW0RYX1JFUVVJUkVfUFJPRyhbRFhfRE9UXSwgZG90KV0sCisgICAgICAgICAgICBbRFhfRU5WX0FQUEVORChIQVZFX0RPVCwgWUVTKQorICAgICAgICAgICAgIERYX0VOVl9BUFBFTkQoRE9UX1BBVEgsIFtgRFhfRElSTkFNRV9FWFBSKCREWF9ET1QpYF0pXSwKKyAgICAgICAgICAgIFtEWF9FTlZfQVBQRU5EKEhBVkVfRE9ULCBOTyldKQorCisjIE1hbiBwYWdlcyBnZW5lcmF0aW9uOgorRFhfQVJHX0FCTEUobWFuLCBbZ2VuZXJhdGUgZG94eWdlbiBtYW51YWwgcGFnZXNdLAorICAgICAgICAgICAgW0RYX0NIRUNLX0RFUEVORChkb2MsIDEpXSwKKyAgICAgICAgICAgIFtEWF9DTEVBUl9ERVBFTkQoZG9jLCAxKV0sCisgICAgICAgICAgICBbXSwKKyAgICAgICAgICAgIFtEWF9FTlZfQVBQRU5EKEdFTkVSQVRFX01BTiwgWUVTKV0sCisgICAgICAgICAgICBbRFhfRU5WX0FQUEVORChHRU5FUkFURV9NQU4sIE5PKV0pCisKKyMgUlRGIGZpbGUgZ2VuZXJhdGlvbjoKK0RYX0FSR19BQkxFKHJ0ZiwgW2dlbmVyYXRlIGRveHlnZW4gUlRGIGRvY3VtZW50YXRpb25dLAorICAgICAgICAgICAgW0RYX0NIRUNLX0RFUEVORChkb2MsIDEpXSwKKyAgICAgICAgICAgIFtEWF9DTEVBUl9ERVBFTkQoZG9jLCAxKV0sCisgICAgICAgICAgICBbXSwKKyAgICAgICAgICAgIFtEWF9FTlZfQVBQRU5EKEdFTkVSQVRFX1JURiwgWUVTKV0sCisgICAgICAgICAgICBbRFhfRU5WX0FQUEVORChHRU5FUkFURV9SVEYsIE5PKV0pCisKKyMgWE1MIGZpbGUgZ2VuZXJhdGlvbjoKK0RYX0FSR19BQkxFKHhtbCwgW2dlbmVyYXRlIGRveHlnZW4gWE1MIGRvY3VtZW50YXRpb25dLAorICAgICAgICAgICAgW0RYX0NIRUNLX0RFUEVORChkb2MsIDEpXSwKKyAgICAgICAgICAgIFtEWF9DTEVBUl9ERVBFTkQoZG9jLCAxKV0sCisgICAgICAgICAgICBbXSwKKyAgICAgICAgICAgIFtEWF9FTlZfQVBQRU5EKEdFTkVSQVRFX1hNTCwgWUVTKV0sCisgICAgICAgICAgICBbRFhfRU5WX0FQUEVORChHRU5FUkFURV9YTUwsIE5PKV0pCisKKyMgKENvbXByZXNzZWQpIEhUTUwgaGVscCBnZW5lcmF0aW9uOgorRFhfQVJHX0FCTEUoY2htLCBbZ2VuZXJhdGUgZG94eWdlbiBjb21wcmVzc2VkIEhUTUwgaGVscCBkb2N1bWVudGF0aW9uXSwKKyAgICAgICAgICAgIFtEWF9DSEVDS19ERVBFTkQoZG9jLCAxKV0sCisgICAgICAgICAgICBbRFhfQ0xFQVJfREVQRU5EKGRvYywgMSldLAorICAgICAgICAgICAgW0RYX1JFUVVJUkVfUFJPRyhbRFhfSEhDXSwgaGhjKV0sCisgICAgICAgICAgICBbRFhfRU5WX0FQUEVORChISENfUEFUSCwgJERYX0hIQykKKyAgICAgICAgICAgICBEWF9FTlZfQVBQRU5EKEdFTkVSQVRFX0hUTUwsIFlFUykKKyAgICAgICAgICAgICBEWF9FTlZfQVBQRU5EKEdFTkVSQVRFX0hUTUxIRUxQLCBZRVMpXSwKKyAgICAgICAgICAgIFtEWF9FTlZfQVBQRU5EKEdFTkVSQVRFX0hUTUxIRUxQLCBOTyldKQorCisjIFNlcGVyYXRlIENISSBmaWxlIGdlbmVyYXRpb24uCitEWF9BUkdfQUJMRShjaGksIFtnZW5lcmF0ZSBkb3h5Z2VuIHNlcGVyYXRlIGNvbXByZXNzZWQgSFRNTCBoZWxwIGluZGV4IGZpbGVdLAorICAgICAgICAgICAgW0RYX0NIRUNLX0RFUEVORChjaG0sIDEpXSwKKyAgICAgICAgICAgIFtEWF9DTEVBUl9ERVBFTkQoY2htLCAxKV0sCisgICAgICAgICAgICBbXSwKKyAgICAgICAgICAgIFtEWF9FTlZfQVBQRU5EKEdFTkVSQVRFX0NISSwgWUVTKV0sCisgICAgICAgICAgICBbRFhfRU5WX0FQUEVORChHRU5FUkFURV9DSEksIE5PKV0pCisKKyMgUGxhaW4gSFRNTCBwYWdlcyBnZW5lcmF0aW9uOgorRFhfQVJHX0FCTEUoaHRtbCwgW2dlbmVyYXRlIGRveHlnZW4gcGxhaW4gSFRNTCBkb2N1bWVudGF0aW9uXSwKKyAgICAgICAgICAgIFtEWF9DSEVDS19ERVBFTkQoZG9jLCAxKSBEWF9DSEVDS19ERVBFTkQoY2htLCAwKV0sCisgICAgICAgICAgICBbRFhfQ0xFQVJfREVQRU5EKGRvYywgMSkgRFhfQ0xFQVJfREVQRU5EKGNobSwgMCldLAorICAgICAgICAgICAgW10sCisgICAgICAgICAgICBbRFhfRU5WX0FQUEVORChHRU5FUkFURV9IVE1MLCBZRVMpXSwKKyAgICAgICAgICAgIFtEWF9URVNUX0ZFQVRVUkUoY2htKSB8fCBEWF9FTlZfQVBQRU5EKEdFTkVSQVRFX0hUTUwsIE5PKV0pCisKKyMgUG9zdFNjcmlwdCBmaWxlIGdlbmVyYXRpb246CitEWF9BUkdfQUJMRShwcywgW2dlbmVyYXRlIGRveHlnZW4gUG9zdFNjcmlwdCBkb2N1bWVudGF0aW9uXSwKKyAgICAgICAgICAgIFtEWF9DSEVDS19ERVBFTkQoZG9jLCAxKV0sCisgICAgICAgICAgICBbRFhfQ0xFQVJfREVQRU5EKGRvYywgMSldLAorICAgICAgICAgICAgW0RYX1JFUVVJUkVfUFJPRyhbRFhfTEFURVhdLCBsYXRleCkKKyAgICAgICAgICAgICBEWF9SRVFVSVJFX1BST0coW0RYX01BS0VJTkRFWF0sIG1ha2VpbmRleCkKKyAgICAgICAgICAgICBEWF9SRVFVSVJFX1BST0coW0RYX0RWSVBTXSwgZHZpcHMpCisgICAgICAgICAgICAgRFhfUkVRVUlSRV9QUk9HKFtEWF9FR1JFUF0sIGVncmVwKV0pCisKKyMgUERGIGZpbGUgZ2VuZXJhdGlvbjoKK0RYX0FSR19BQkxFKHBkZiwgW2dlbmVyYXRlIGRveHlnZW4gUERGIGRvY3VtZW50YXRpb25dLAorICAgICAgICAgICAgW0RYX0NIRUNLX0RFUEVORChkb2MsIDEpXSwKKyAgICAgICAgICAgIFtEWF9DTEVBUl9ERVBFTkQoZG9jLCAxKV0sCisgICAgICAgICAgICBbRFhfUkVRVUlSRV9QUk9HKFtEWF9QREZMQVRFWF0sIHBkZmxhdGV4KQorICAgICAgICAgICAgIERYX1JFUVVJUkVfUFJPRyhbRFhfTUFLRUlOREVYXSwgbWFrZWluZGV4KQorICAgICAgICAgICAgIERYX1JFUVVJUkVfUFJPRyhbRFhfRUdSRVBdLCBlZ3JlcCldKQorCisjIExhVGVYIGdlbmVyYXRpb24gZm9yIFBTIGFuZC9vciBQREY6CitpZiBEWF9URVNUX0ZFQVRVUkUocHMpIHx8IERYX1RFU1RfRkVBVFVSRShwZGYpOyB0aGVuCisgICAgQU1fQ09ORElUSU9OQUwoRFhfQ09ORF9sYXRleCwgOikKKyAgICBEWF9FTlZfQVBQRU5EKEdFTkVSQVRFX0xBVEVYLCBZRVMpCitlbHNlCisgICAgQU1fQ09ORElUSU9OQUwoRFhfQ09ORF9sYXRleCwgZmFsc2UpCisgICAgRFhfRU5WX0FQUEVORChHRU5FUkFURV9MQVRFWCwgTk8pCitmaQorCisjIFBhcGVyIHNpemUgZm9yIFBTIGFuZC9vciBQREY6CitBQ19BUkdfVkFSKERPWFlHRU5fUEFQRVJfU0laRSwKKyAgICAgICAgICAgW2E0d2lkZSAoZGVmYXVsdCksIGE0LCBsZXR0ZXIsIGxlZ2FsIG9yIGV4ZWN1dGl2ZV0pCitjYXNlICIkRE9YWUdFTl9QQVBFUl9TSVpFIiBpbgorIygKKyIiKQorICAgIEFDX1NVQlNUKERPWFlHRU5fUEFQRVJfU0laRSwgIiIpCis7OyAjKAorYTR3aWRlfGE0fGxldHRlcnxsZWdhbHxleGVjdXRpdmUpCisgICAgRFhfRU5WX0FQUEVORChQQVBFUl9TSVpFLCAkRE9YWUdFTl9QQVBFUl9TSVpFKQorOzsgIygKKyopCisgICAgQUNfTVNHX0VSUk9SKFt1bmtub3duIERPWFlHRU5fUEFQRVJfU0laRT0nJERPWFlHRU5fUEFQRVJfU0laRSddKQorOzsKK2VzYWMKKworI0ZvciBkZWJ1Z2dpbmc6CisjZWNobyBEWF9GTEFHX2RvYz0kRFhfRkxBR19kb2MKKyNlY2hvIERYX0ZMQUdfZG90PSREWF9GTEFHX2RvdAorI2VjaG8gRFhfRkxBR19tYW49JERYX0ZMQUdfbWFuCisjZWNobyBEWF9GTEFHX2h0bWw9JERYX0ZMQUdfaHRtbAorI2VjaG8gRFhfRkxBR19jaG09JERYX0ZMQUdfY2htCisjZWNobyBEWF9GTEFHX2NoaT0kRFhfRkxBR19jaGkKKyNlY2hvIERYX0ZMQUdfcnRmPSREWF9GTEFHX3J0ZgorI2VjaG8gRFhfRkxBR194bWw9JERYX0ZMQUdfeG1sCisjZWNobyBEWF9GTEFHX3BkZj0kRFhfRkxBR19wZGYKKyNlY2hvIERYX0ZMQUdfcHM9JERYX0ZMQUdfcHMKKyNlY2hvIERYX0VOVj0kRFhfRU5WCitdKQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2NvbW1vbi9kb3h5Z2VuLm1rIGIvYXZhaGktMC42LjMxL2NvbW1vbi9kb3h5Z2VuLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjYTkyMzcKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvY29tbW9uL2RveHlnZW4ubWsKQEAgLTAsMCArMSwxODcgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDA0IE9yZW4gQmVuLUtpa2kKKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIHRoZSBBdXRvbWFrZSBtYWNybyBmaWxlcy4KKworIyBHZW5lcmF0ZSBhdXRvbWF0aWMgZG9jdW1lbnRhdGlvbiB1c2luZyBEb3h5Z2VuLiBHb2FscyBhbmQgdmFyaWFibGVzIHZhbHVlcworIyBhcmUgY29udHJvbGxlZCBieSB0aGUgdmFyaW91cyBEWF9DT05EXz8/PyBjb25kaXRpb25hbHMgc2V0IGJ5IGF1dG9jb25mLgorIworIyBUaGUgcHJvdmlkZWQgZ29hbHMgYXJlOgorIyBkb3h5Z2VuLWRvYzogR2VuZXJhdGUgYWxsIGRveHlnZW4gZG9jdW1lbnRhdGlvbi4KKyMgZG94eWdlbi1ydW46IFJ1biBkb3h5Z2VuLCB3aGljaCB3aWxsIGdlbmVyYXRlIHNvbWUgb2YgdGhlIGRvY3VtZW50YXRpb24KKyMgICAgICAgICAgICAgIChIVE1MLCBDSE0sIENISSwgTUFOLCBSVEYsIFhNTCkgYnV0IHdpbGwgbm90IGRvIHRoZSBwb3N0CisjICAgICAgICAgICAgICBwcm9jZXNzaW5nIHJlcXVpcmVkIGZvciB0aGUgcmVzdCBvZiBpdCAoUFMsIFBERiwgYW5kIHNvbWUgTUFOKS4KKyMgZG94eWdlbi1tYW46IFJlbmFtZSBzb21lIGRveHlnZW4gZ2VuZXJhdGVkIG1hbiBwYWdlcy4KKyMgZG94eWdlbi1wczogR2VuZXJhdGUgZG94eWdlbiBQb3N0U2NyaXB0IGRvY3VtZW50YXRpb24uCisjIGRveHlnZW4tcGRmOiBHZW5lcmF0ZSBkb3h5Z2VuIFBERiBkb2N1bWVudGF0aW9uLgorIworIyBOb3RlIHRoYXQgYnkgZGVmYXVsdCB0aGVzZSBhcmUgbm90IGludGVncmF0ZWQgaW50byB0aGUgYXV0b21ha2UgZ29hbHMuIElmCisjIGRveHlnZW4gaXMgdXNlZCB0byBnZW5lcmF0ZSBtYW4gcGFnZXMsIHlvdSBjYW4gYWNoaWV2ZSB0aGlzIGludGVncmF0aW9uIGJ5CisjIHNldHRpbmcgbWFuM19NQU5TIHRvIHRoZSBsaXN0IG9mIG1hbiBwYWdlcyBnZW5lcmF0ZWQgYW5kIHRoZW4gYWRkaW5nIHRoZQorIyBkZXBlbmRlbmN5OgorIworIyAgICQobWFuM19NQU5TKTogZG94eWdlbi1kb2MKKyMKKyMgVGhpcyB3aWxsIGNhdXNlIG1ha2UgdG8gcnVuIGRveHlnZW4gYW5kIGdlbmVyYXRlIGFsbCB0aGUgZG9jdW1lbnRhdGlvbi4KKyMKKyMgVGhlIGZvbGxvd2luZyB2YXJpYWJsZSBpcyBpbnRlbmRlZCBmb3IgdXNlIGluIE1ha2VmaWxlLmFtOgorIworIyBEWF9DTEVBTkZJTEVTID0gZXZlcnl0aGluZyB0byBjbGVhbi4KKyMKKyMgVGhpcyBpcyB1c3VhbGx5IGFkZGVkIHRvIE1PU1RMWUNMRUFORklMRVMuCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgRm9ybWF0LWluZGVwZW5kZW50IERveHlnZW4gcnVsZXMuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworaWYgRFhfQ09ORF9kb2MKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgUnVsZXMgc3BlY2lmaWMgZm9yIEhUTUwgb3V0cHV0LiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCitpZiBEWF9DT05EX2h0bWwKKworRFhfQ0xFQU5fSFRNTCA9IEBEWF9ET0NESVJAL2h0bWwKKworZW5kaWYgRFhfQ09ORF9odG1sCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgUnVsZXMgc3BlY2lmaWMgZm9yIENITSBvdXRwdXQuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworaWYgRFhfQ09ORF9jaG0KKworRFhfQ0xFQU5fQ0hNID0gQERYX0RPQ0RJUkAvY2htCisKK2lmIERYX0NPTkRfY2hpCisKK0RYX0NMRUFOX0NISSA9IEBEWF9ET0NESVJAL0BQQUNLQUdFQC5jaGkKKworZW5kaWYgRFhfQ09ORF9jaGkKKworZW5kaWYgRFhfQ09ORF9jaG0KKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBSdWxlcyBzcGVjaWZpYyBmb3IgTUFOIG91dHB1dC4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCitpZiBEWF9DT05EX21hbgorCitEWF9DTEVBTl9NQU4gPSBARFhfRE9DRElSQC9tYW4KKworZW5kaWYgRFhfQ09ORF9tYW4KKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBSdWxlcyBzcGVjaWZpYyBmb3IgUlRGIG91dHB1dC4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCitpZiBEWF9DT05EX3J0ZgorCitEWF9DTEVBTl9SVEYgPSBARFhfRE9DRElSQC9ydGYKKworZW5kaWYgRFhfQ09ORF9ydGYKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBSdWxlcyBzcGVjaWZpYyBmb3IgWE1MIG91dHB1dC4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCitpZiBEWF9DT05EX3htbAorCitEWF9DTEVBTl9YTUwgPSBARFhfRE9DRElSQC94bWwKKworZW5kaWYgRFhfQ09ORF94bWwKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFJ1bGVzIHNwZWNpZmljIGZvciBQUyBvdXRwdXQuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCitpZiBEWF9DT05EX3BzCisKK0RYX0NMRUFOX1BTID0gQERYX0RPQ0RJUkAvQFBBQ0tBR0VALnBzCisKK0RYX1BTX0dPQUwgPSBkb3h5Z2VuLXBzCisKK2RveHlnZW4tcHM6IEBEWF9ET0NESVJAL0BQQUNLQUdFQC5wcworCitARFhfRE9DRElSQC9AUEFDS0FHRUAucHM6IEBEWF9ET0NESVJAL0BQQUNLQUdFQC50YWcKKwljZCBARFhfRE9DRElSQC9sYXRleDsgXAorCXJtIC1mICouYXV4ICoudG9jICouaWR4ICouaW5kICouaWxnICoubG9nICoub3V0OyBcCisJJChEWF9MQVRFWCkgcmVmbWFuLnRleDsgXAorCSQoTUFLRUlOREVYX1BBVEgpIHJlZm1hbi5pZHg7IFwKKwkkKERYX0xBVEVYKSByZWZtYW4udGV4OyBcCisJY291bnRkb3duPTU7IFwKKwl3aGlsZSAkKERYX0VHUkVQKSAnUmVydW4gKExhVGVYfHRvIGdldCBjcm9zcy1yZWZlcmVuY2VzIHJpZ2h0KScgXAorCSAgICAgICAgICAgICAgICAgIHJlZm1hbi5sb2cgPiAvZGV2L251bGwgMj4mMSBcCisJICAgJiYgdGVzdCAkJGNvdW50ZG93biAtZ3QgMDsgZG8gXAorCSAgICAkKERYX0xBVEVYKSByZWZtYW4udGV4OyBcCisJICAgIGNvdW50ZG93bj1gZXhwciAkJGNvdW50ZG93biAtIDFgOyBcCisJZG9uZTsgXAorCSQoRFhfRFZJUFMpIC1vIC4uL0BQQUNLQUdFQC5wcyByZWZtYW4uZHZpCisKK2VuZGlmIERYX0NPTkRfcHMKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBSdWxlcyBzcGVjaWZpYyBmb3IgUERGIG91dHB1dC4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCitpZiBEWF9DT05EX3BkZgorCitEWF9DTEVBTl9QREYgPSBARFhfRE9DRElSQC9AUEFDS0FHRUAucGRmCisKK0RYX1BERl9HT0FMID0gZG94eWdlbi1wZGYKKworZG94eWdlbi1wZGY6IEBEWF9ET0NESVJAL0BQQUNLQUdFQC5wZGYKKworQERYX0RPQ0RJUkAvQFBBQ0tBR0VALnBkZjogQERYX0RPQ0RJUkAvQFBBQ0tBR0VALnRhZworCWNkIEBEWF9ET0NESVJAL2xhdGV4OyBcCisJcm0gLWYgKi5hdXggKi50b2MgKi5pZHggKi5pbmQgKi5pbGcgKi5sb2cgKi5vdXQ7IFwKKwkkKERYX1BERkxBVEVYKSByZWZtYW4udGV4OyBcCisJJChEWF9NQUtFSU5ERVgpIHJlZm1hbi5pZHg7IFwKKwkkKERYX1BERkxBVEVYKSByZWZtYW4udGV4OyBcCisJY291bnRkb3duPTU7IFwKKwl3aGlsZSAkKERYX0VHUkVQKSAnUmVydW4gKExhVGVYfHRvIGdldCBjcm9zcy1yZWZlcmVuY2VzIHJpZ2h0KScgXAorCSAgICAgICAgICAgICAgICAgIHJlZm1hbi5sb2cgPiAvZGV2L251bGwgMj4mMSBcCisJICAgJiYgdGVzdCAkJGNvdW50ZG93biAtZ3QgMDsgZG8gXAorCSAgICAkKERYX1BERkxBVEVYKSByZWZtYW4udGV4OyBcCisJICAgIGNvdW50ZG93bj1gZXhwciAkJGNvdW50ZG93biAtIDFgOyBcCisJZG9uZTsgXAorCW12IHJlZm1hbi5wZGYgLi4vQFBBQ0tBR0VALnBkZgorCitlbmRpZiBEWF9DT05EX3BkZgorCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBSdWxlcyBzcGVjaWZpYyBmb3IgTGFUZVggKHNoYXJlZCBmb3IgUFMgYW5kIFBERikuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKK2lmIERYX0NPTkRfbGF0ZXgKKworRFhfQ0xFQU5fTEFURVggPSBARFhfRE9DRElSQC9sYXRleAorCitlbmRpZiBEWF9DT05EX2xhdGV4CisKKy5QSE9OWTogZG94eWdlbi1ydW4gZG94eWdlbi1kb2MgJChEWF9QU19HT0FMKSAkKERYX1BERl9HT0FMKQorCisuSU5URVJNRURJQVRFOiBkb3h5Z2VuLXJ1biAkKERYX1BTX0dPQUwpICQoRFhfUERGX0dPQUwpCisKK2RveHlnZW4tcnVuOiBARFhfRE9DRElSQC9AUEFDS0FHRUAudGFnCisKK2RveHlnZW4tZG9jOiBkb3h5Z2VuLXJ1biAkKERYX1BTX0dPQUwpICQoRFhfUERGX0dPQUwpCisKK0BEWF9ET0NESVJAL0BQQUNLQUdFQC50YWc6ICQoRFhfQ09ORklHKSAkKHBrZ2luY2x1ZGVfSEVBREVSUykgJChEWF9JTlBVVCkgJChEWF9FWEFNUExFX1BBVEgpLyQoRFhfRVhBTVBMRV9QQVRURVJOUykKKwlybSAtcmYgQERYX0RPQ0RJUkAKKwlJTlBVVD0nJChEWF9JTlBVVCknIEVYQU1QTEVfUEFUSD0nJChEWF9FWEFNUExFX1BBVEgpJyBFWEFNUExFX1BBVFRFUk5TPSckKERYX0VYQU1QTEVfUEFUVEVSTlMpJyBcCisJJChEWF9FTlYpICQoRFhfRE9YWUdFTikgJChzcmNkaXIpLyQoRFhfQ09ORklHKQorCitEWF9DTEVBTkZJTEVTID0gXAorICAgIEBEWF9ET0NESVJAL0BQQUNLQUdFQC50YWcgXAorICAgIC1yIFwKKyAgICAkKERYX0NMRUFOX0hUTUwpIFwKKyAgICAkKERYX0NMRUFOX0NITSkgXAorICAgICQoRFhfQ0xFQU5fQ0hJKSBcCisgICAgJChEWF9DTEVBTl9NQU4pIFwKKyAgICAkKERYX0NMRUFOX1JURikgXAorICAgICQoRFhfQ0xFQU5fWE1MKSBcCisgICAgJChEWF9DTEVBTl9QUykgXAorICAgICQoRFhfQ0xFQU5fUERGKSBcCisgICAgJChEWF9DTEVBTl9MQVRFWCkKKworZW5kaWYgRFhfQ09ORF9kb2MKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9jb21tb24vZ2NjX3N0YWNrX3Byb3RlY3QubTQgYi9hdmFoaS0wLjYuMzEvY29tbW9uL2djY19zdGFja19wcm90ZWN0Lm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyNDY4NDkKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvY29tbW9uL2djY19zdGFja19wcm90ZWN0Lm00CkBAIC0wLDAgKzEsOTkgQEAKK2RubAorZG5sIFVzZWZ1bCBtYWNyb3MgZm9yIGF1dG9jb25mIHRvIGNoZWNrIGZvciBzc3AtcGF0Y2hlZCBnY2MKK2RubCAxLjAgLSBTZXB0ZW1iZXIgMjAwMyAtIFRpYWdvIFNvdXNhIDxtaXJhZ2VAa2FvdGlrLm9yZz4KK2RubCAxLjEgLSBBdWd1c3QgMjAwNiAtIFRlZCBQZXJjaXZhbCA8dGVkQG1pZGczdC5uZXQ+CitkbmwgICAgICogU3RyaWN0ZXIgbGFuZ3VhZ2UgY2hlY2tpbmcgKEMgb3IgQysrKQorZG5sICAgICAqIEFkZHMgR0NDX1NUQUNLX1BST1RFQ1RfTElCIHRvIGFkZCAtbHNzcCB0byBMREZMQUdTIGFzIG5lY2Vzc2FyeQorZG5sICAgICAqIENhY2hlcyBhbGwgcmVzdWx0cworZG5sICAgICAqIFVzZXMgbWFjcm9zIHRvIGVuc3VyZSBjb3JyZWN0IG91cHV0IGluIHF1aWV0L3NpbGVudCBtb2RlCitkbmwgMS4yIC0gQXByaWwgMjAwNyAtIFRlZCBQZXJjaXZhbCA8dGVkQG1pZGczdC5uZXQ+CitkbmwgICAgICogQWRkZWQgR0NDX1NUQUNLX1BST1RFQ1RPUiBtYWNybyBmb3Igc2ltcGxlciAob25lLWxpbmUpIGludm9jYXRpb24KK2RubCAgICAgKiBHQ0NfU1RBQ0tfUFJPVEVDVF9MSUIgbm93IGFkZHMgLWxzc3AgdG8gTElCUyByYXRoZXIgdGhhbiBMREZMQUdTCitkbmwKK2RubCBBYm91dCBzc3A6CitkbmwgR0NDIGV4dGVuc2lvbiBmb3IgcHJvdGVjdGluZyBhcHBsaWNhdGlvbnMgZnJvbSBzdGFjay1zbWFzaGluZyBhdHRhY2tzCitkbmwgaHR0cDovL3d3dy5yZXNlYXJjaC5pYm0uY29tL3RybC9wcm9qZWN0cy9zZWN1cml0eS9zc3AvCitkbmwKK2RubCBVc2FnZToKK2RubCBNb3N0IHBlb3BsZSB3aWxsIHNpbXBseSBjYWxsIEdDQ19TVEFDS19QUk9URUNUT1IuCitkbmwgSWYgeW91IG9ubHkgdXNlIG9uZSBvZiBDIG9yIEMrKywgeW91IGNhbiBzYXZlIHRpbWUgYnkgb25seSBjYWxsaW5nIHRoZQorZG5sIG1hY3JvIGFwcHJvcHJpYXRlIGZvciB0aGF0IGxhbmd1YWdlLiBJbiB0aGF0IGNhc2UgeW91IHNob3VsZCBhbHNvIGNhbGwKK2RubCBHQ0NfU1RBQ0tfUFJPVEVDVF9MSUIgZmlyc3QuCitkbmwKK2RubCBHQ0NfU1RBQ0tfUFJPVEVDVE9SCitkbmwgVHJpZXMgdG8gdHVybiBvbiBzdGFjayBwcm90ZWN0aW9uIGZvciBDIGFuZCBDKysgYnkgY2FsbGluZyB0aGUgZm9sbG93aW5nCitkbmwgdGhyZWUgbWFjcm9zIHdpdGggdGhlIHJpZ2h0IGxhbmd1YWdlcy4KK2RubAorZG5sIEdDQ19TVEFDS19QUk9URUNUX0NDCitkbmwgY2hlY2tzIC1mc3RhY2stcHJvdGVjdG9yIHdpdGggdGhlIEMgY29tcGlsZXIsIGlmIGl0IGV4aXN0cyB0aGVuIHVwZGF0ZXMKK2RubCBDRkxBR1MgYW5kIGRlZmluZXMgRU5BQkxFX1NTUF9DQworZG5sCitkbmwgR0NDX1NUQUNLX1BST1RFQ1RfQ1hYCitkbmwgY2hlY2tzIC1mc3RhY2stcHJvdGVjdG9yIHdpdGggdGhlIEMrKyBjb21waWxlciwgaWYgaXQgZXhpc3RzIHRoZW4gdXBkYXRlcworZG5sIENYWEZMQUdTIGFuZCBkZWZpbmVzIEVOQUJMRV9TU1BfQ1hYCitkbmwKK2RubCBHQ0NfU1RBQ0tfUFJPVEVDVF9MSUIKK2RubCBhZGRzIC1sc3NwIHRvIExJQlMgaWYgaXQgaXMgYXZhaWxhYmxlCitkbmwgc3NwIGlzIHVzdWFsbHkgcHJvdmlkZWQgYXMgcGFydCBvZiBsaWJjLCBidXQgd2FzIHByZXZpb3VzbHkgYSBzZXBhcmF0ZSBsaWIKK2RubCBJdCBkb2VzIG5vdCBodXJ0IHRvIGFkZCAtbHNzcCBldmVuIGlmIGxpYmMgcHJvdmlkZXMgU1NQIC0gaW4gdGhhdCBjYXNlCitkbmwgbGlic3NwIHdpbGwgc2ltcGx5IGJlIGlnbm9yZWQuCitkbmwKKworQUNfREVGVU4oW0dDQ19TVEFDS19QUk9URUNUX0xJQl0sWworICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBsaWJzc3AgZXhpc3RzXSwgc3NwX2N2X2xpYiwKKyAgICBbc3NwX29sZF9saWJzPSIkTElCUyIKKyAgICAgTElCUz0iJExJQlMgLWxzc3AiCisgICAgIEFDX1RSWV9MSU5LKCwsIHNzcF9jdl9saWI9eWVzLCBzc3BfY3ZfbGliPW5vKQorICAgICBMSUJTPSIkc3NwX29sZF9saWJzIgorICAgIF0pCisgIGlmIHRlc3QgJHNzcF9jdl9saWIgPSB5ZXM7IHRoZW4KKyAgICBMSUJTPSIkTElCUyAtbHNzcCIKKyAgZmkKK10pCisKK0FDX0RFRlVOKFtHQ0NfU1RBQ0tfUFJPVEVDVF9DQ10sWworICBBQ19MQU5HX0FTU0VSVChDKQorICBpZiB0ZXN0ICJYJENDIiAhPSAiWCI7IHRoZW4KKyAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciAke0NDfSBhY2NlcHRzIC1mc3RhY2stcHJvdGVjdG9yXSwKKyAgICAgIHNzcF9jdl9jYywKKyAgICAgIFtzc3Bfb2xkX2NmbGFncz0iJENGTEFHUyIKKyAgICAgICBDRkxBR1M9IiRDRkxBR1MgLWZzdGFjay1wcm90ZWN0b3IgLVdlcnJvciIKKyAgICAgICBBQ19UUllfQ09NUElMRSgsLCBzc3BfY3ZfY2M9eWVzLCBzc3BfY3ZfY2M9bm8pCisgICAgICAgQ0ZMQUdTPSIkc3NwX29sZF9jZmxhZ3MiCisgICAgICBdKQorICAgIGlmIHRlc3QgJHNzcF9jdl9jYyA9IHllczsgdGhlbgorICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1mc3RhY2stcHJvdGVjdG9yIgorICAgICAgQUNfREVGSU5FKFtFTkFCTEVfU1NQX0NDXSwgMSwgW0RlZmluZSBpZiBTU1AgQyBzdXBwb3J0IGlzIGVuYWJsZWQuXSkKKyAgICBmaQorICBmaQorXSkKKworQUNfREVGVU4oW0dDQ19TVEFDS19QUk9URUNUX0NYWF0sWworICBBQ19MQU5HX0FTU0VSVChDKyspCisgIGlmIHRlc3QgIlgkQ1hYIiAhPSAiWCI7IHRoZW4KKyAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciAke0NYWH0gYWNjZXB0cyAtZnN0YWNrLXByb3RlY3Rvcl0sCisgICAgICBzc3BfY3ZfY3h4LAorICAgICAgW3NzcF9vbGRfY3h4ZmxhZ3M9IiRDWFhGTEFHUyIKKyAgICAgICBDWFhGTEFHUz0iJENYWEZMQUdTIC1mc3RhY2stcHJvdGVjdG9yIC1XZXJyb3IiCisgICAgICAgQUNfVFJZX0NPTVBJTEUoLCwgc3NwX2N2X2N4eD15ZXMsIHNzcF9jdl9jeHg9bm8pCisgICAgICAgQ1hYRkxBR1M9IiRzc3Bfb2xkX2N4eGZsYWdzIgorICAgICAgXSkKKyAgICBpZiB0ZXN0ICRzc3BfY3ZfY3h4ID0geWVzOyB0aGVuCisgICAgICBDWFhGTEFHUz0iJENYWEZMQUdTIC1mc3RhY2stcHJvdGVjdG9yIgorICAgICAgQUNfREVGSU5FKFtFTkFCTEVfU1NQX0NYWF0sIDEsIFtEZWZpbmUgaWYgU1NQIEMrKyBzdXBwb3J0IGlzIGVuYWJsZWQuXSkKKyAgICBmaQorICBmaQorXSkKKworQUNfREVGVU4oW0dDQ19TVEFDS19QUk9URUNUT1JdLFsKKyAgR0NDX1NUQUNLX1BST1RFQ1RfTElCCisKKyAgQUNfTEFOR19QVVNIKFtDXSkKKyAgR0NDX1NUQUNLX1BST1RFQ1RfQ0MKKyAgQUNfTEFOR19QT1AoW0NdKQorCisgIEFDX0xBTkdfUFVTSChbQysrXSkKKyAgR0NDX1NUQUNLX1BST1RFQ1RfQ1hYCisgIEFDX0xBTkdfUE9QKFtDKytdKQorXSkKKwpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2NvbW1vbi9nY2NfdmlzaWJpbGl0eS5tNCBiL2F2YWhpLTAuNi4zMS9jb21tb24vZ2NjX3Zpc2liaWxpdHkubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI1YTg5ZAotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9jb21tb24vZ2NjX3Zpc2liaWxpdHkubTQKQEAgLTAsMCArMSwzNiBAQAorZG5sIEBzeW5vcHNpcyBDSEVDS19WSVNJQklMSVRZKFtBQ1RJT04tSUYtRk9VTkRbLCBBQ1RJT04tSUYtTk9ULUZPVU5EXV0pCitkbmwKK2RubCBAc3VtbWFyeSBjaGVjayBmb3IgdGhlIGdjYyAtZnZpc2liaWxpdHkgZmxhZworZG5sCisKK0FDX0RFRlVOKFtDSEVDS19WSVNJQklMSVRZX0hJRERFTl0sIFsKKyAgc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisgIFZJU0lCSUxJVFlfSElEREVOX0NGTEFHUz0iIgorICBPUFRJT049LWZ2aXNpYmlsaXR5PWhpZGRlbgorCisgIEFDX01TR19DSEVDS0lORyhmb3IgZ2NjICRPUFRJT04gc3VwcG9ydCkKKworICBDRkxBR1M9IiRDRkxBR1MgJE9QVElPTiIKKworICBBQ19UUllfQ09NUElMRShbCisgICAgICBpbnQgZGVmYXVsdF92aXMgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworICAgICAgaW50IGhpZGRlbl92aXMgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkoImhpZGRlbiIpKSk7CisgICAgXSwKKyAgICBbXSwKKyAgICBhY192aXNpYmlsaXR5X3N1cHBvcnRlZD15ZXMsCisgICAgYWNfdmlzaWJpbGl0eV9zdXBwb3J0ZWQ9bm8pCisgIEFDX01TR19SRVNVTFQoJGFjX3Zpc2liaWxpdHlfc3VwcG9ydGVkKQorCisgIGlmIHRlc3QgeCIkYWNfdmlzaWJpbGl0eV9zdXBwb3J0ZWQiID0geHllczsgdGhlbgorICAgIGlmZWxzZShbJDFdLCxBQ19ERUZJTkUoSEFWRV9HQ0NfVklTSUJJTElUWSwxLFtEZWZpbmUgaWYgeW91IGhhdmUgZ2NjIC1mdmlzaWJpbGl0eT1oaWRkZW4gc3VwcG9ydCBdKSxbJDFdKQorICAgIFZJU0lCSUxJVFlfSElEREVOX0NGTEFHUz0iJE9QVElPTiAtREhBVkVfVklTSUJJTElUWV9ISURERU4iCisgICAgQUNfREVGSU5FKEhBVkVfVklTSUJJTElUWV9ISURERU4sW10sW1N1cHBvcnQgZm9yIHZpc2liaWxpdHkgaGlkZGVuXSkKKyAgZWxzZQorICAgICQyCisgICAgOgorICBmaQorCisgIEFDX1NVQlNUKFZJU0lCSUxJVFlfSElEREVOX0NGTEFHUykKKworICBDRkxBR1M9IiRzYXZlX0NGTEFHUyIKK10pCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvY29tbW9uL2dldHRleHQubTQgYi9hdmFoaS0wLjYuMzEvY29tbW9uL2dldHRleHQubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg0ZTZhNQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9jb21tb24vZ2V0dGV4dC5tNApAQCAtMCwwICsxLDM4MyBAQAorIyBnZXR0ZXh0Lm00IHNlcmlhbCA2MyAoZ2V0dGV4dC0wLjE4KQorZG5sIENvcHlyaWdodCAoQykgMTk5NS0yMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCitkbmwKK2RubCBUaGlzIGZpbGUgY2FuIGNhbiBiZSB1c2VkIGluIHByb2plY3RzIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIHVuZGVyCitkbmwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIG9yIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworZG5sIExpY2Vuc2UgYnV0IHdoaWNoIHN0aWxsIHdhbnQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgR05VIGdldHRleHQKK2RubCBmdW5jdGlvbmFsaXR5LgorZG5sIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGlzIGNvdmVyZWQKK2RubCBieSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYW5kIHRoZSByZXN0IG9mIHRoZSBHTlUKK2RubCBnZXR0ZXh0IHBhY2thZ2UgcGFja2FnZSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KK2RubCBUaGV5IGFyZSAqbm90KiBpbiB0aGUgcHVibGljIGRvbWFpbi4KKworZG5sIEF1dGhvcnM6CitkbmwgICBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5NS0yMDAwLgorZG5sICAgQnJ1bm8gSGFpYmxlIDxoYWlibGVAY2xpc3AuY29ucy5vcmc+LCAyMDAwLTIwMDYsIDIwMDgtMjAxMC4KKworZG5sIE1hY3JvIHRvIGFkZCBmb3IgdXNpbmcgR05VIGdldHRleHQuCisKK2RubCBVc2FnZTogQU1fR05VX0dFVFRFWFQoW0lOVExTWU1CT0xdLCBbTkVFRFNZTUJPTF0sIFtJTlRMRElSXSkuCitkbmwgSU5UTFNZTUJPTCBjYW4gYmUgb25lIG9mICdleHRlcm5hbCcsICduby1saWJ0b29sJywgJ3VzZS1saWJ0b29sJy4gVGhlCitkbmwgICAgZGVmYXVsdCAoaWYgaXQgaXMgbm90IHNwZWNpZmllZCBvciBlbXB0eSkgaXMgJ25vLWxpYnRvb2wnLgorZG5sICAgIElOVExTWU1CT0wgc2hvdWxkIGJlICdleHRlcm5hbCcgZm9yIHBhY2thZ2VzIHdpdGggbm8gaW50bCBkaXJlY3RvcnksCitkbmwgICAgYW5kICduby1saWJ0b29sJyBvciAndXNlLWxpYnRvb2wnIGZvciBwYWNrYWdlcyB3aXRoIGFuIGludGwgZGlyZWN0b3J5LgorZG5sICAgIElmIElOVExTWU1CT0wgaXMgJ3VzZS1saWJ0b29sJywgdGhlbiBhIGxpYnRvb2wgbGlicmFyeQorZG5sICAgICQodG9wX2J1aWxkZGlyKS9pbnRsL2xpYmludGwubGEgd2lsbCBiZSBjcmVhdGVkIChzaGFyZWQgYW5kL29yIHN0YXRpYywKK2RubCAgICBkZXBlbmRpbmcgb24gLS17ZW5hYmxlLGRpc2FibGV9LXtzaGFyZWQsc3RhdGljfSBhbmQgb24gdGhlIHByZXNlbmNlIG9mCitkbmwgICAgQU0tRElTQUJMRS1TSEFSRUQpLiBJZiBJTlRMU1lNQk9MIGlzICduby1saWJ0b29sJywgYSBzdGF0aWMgbGlicmFyeQorZG5sICAgICQodG9wX2J1aWxkZGlyKS9pbnRsL2xpYmludGwuYSB3aWxsIGJlIGNyZWF0ZWQuCitkbmwgSWYgTkVFRFNZTUJPTCBpcyBzcGVjaWZpZWQgYW5kIGlzICduZWVkLW5nZXR0ZXh0JywgdGhlbiBHTlUgZ2V0dGV4dAorZG5sICAgIGltcGxlbWVudGF0aW9ucyAoaW4gbGliYyBvciBsaWJpbnRsKSB3aXRob3V0IHRoZSBuZ2V0dGV4dCgpIGZ1bmN0aW9uCitkbmwgICAgd2lsbCBiZSBpZ25vcmVkLiAgSWYgTkVFRFNZTUJPTCBpcyBzcGVjaWZpZWQgYW5kIGlzCitkbmwgICAgJ25lZWQtZm9ybWF0c3RyaW5nLW1hY3JvcycsIHRoZW4gR05VIGdldHRleHQgaW1wbGVtZW50YXRpb25zIHRoYXQgZG9uJ3QKK2RubCAgICBzdXBwb3J0IHRoZSBJU08gQyA5OSA8aW50dHlwZXMuaD4gZm9ybWF0c3RyaW5nIG1hY3JvcyB3aWxsIGJlIGlnbm9yZWQuCitkbmwgSU5UTERJUiBpcyB1c2VkIHRvIGZpbmQgdGhlIGludGwgbGlicmFyaWVzLiAgSWYgZW1wdHksCitkbmwgICAgdGhlIHZhbHVlIGAkKHRvcF9idWlsZGRpcikvaW50bC8nIGlzIHVzZWQuCitkbmwKK2RubCBUaGUgcmVzdWx0IG9mIHRoZSBjb25maWd1cmF0aW9uIGlzIG9uZSBvZiB0aHJlZSBjYXNlczoKK2RubCAxKSBHTlUgZ2V0dGV4dCwgYXMgaW5jbHVkZWQgaW4gdGhlIGludGwgc3ViZGlyZWN0b3J5LCB3aWxsIGJlIGNvbXBpbGVkCitkbmwgICAgYW5kIHVzZWQuCitkbmwgICAgQ2F0YWxvZyBmb3JtYXQ6IEdOVSAtLT4gaW5zdGFsbCBpbiAkKGRhdGFkaXIpCitkbmwgICAgQ2F0YWxvZyBleHRlbnNpb246IC5tbyBhZnRlciBpbnN0YWxsYXRpb24sIC5nbW8gaW4gc291cmNlIHRyZWUKK2RubCAyKSBHTlUgZ2V0dGV4dCBoYXMgYmVlbiBmb3VuZCBpbiB0aGUgc3lzdGVtJ3MgQyBsaWJyYXJ5LgorZG5sICAgIENhdGFsb2cgZm9ybWF0OiBHTlUgLS0+IGluc3RhbGwgaW4gJChkYXRhZGlyKQorZG5sICAgIENhdGFsb2cgZXh0ZW5zaW9uOiAubW8gYWZ0ZXIgaW5zdGFsbGF0aW9uLCAuZ21vIGluIHNvdXJjZSB0cmVlCitkbmwgMykgTm8gaW50ZXJuYXRpb25hbGl6YXRpb24sIGFsd2F5cyB1c2UgRW5nbGlzaCBtc2dpZC4KK2RubCAgICBDYXRhbG9nIGZvcm1hdDogbm9uZQorZG5sICAgIENhdGFsb2cgZXh0ZW5zaW9uOiBub25lCitkbmwgSWYgSU5UTFNZTUJPTCBpcyAnZXh0ZXJuYWwnLCBvbmx5IGNhc2VzIDIgYW5kIDMgY2FuIG9jY3VyLgorZG5sIFRoZSB1c2Ugb2YgLmdtbyBpcyBoaXN0b3JpY2FsIChpdCB3YXMgbmVlZGVkIHRvIGF2b2lkIG92ZXJ3cml0aW5nIHRoZQorZG5sIEdOVSBmb3JtYXQgY2F0YWxvZ3Mgd2hlbiBidWlsZGluZyBvbiBhIHBsYXRmb3JtIHdpdGggYW4gWC9PcGVuIGdldHRleHQpLAorZG5sIGJ1dCB3ZSBrZWVwIGl0IGluIG9yZGVyIG5vdCB0byBmb3JjZSBpcnJlbGV2YW50IGZpbGVuYW1lIGNoYW5nZXMgb24gdGhlCitkbmwgbWFpbnRhaW5lcnMuCitkbmwKK0FDX0RFRlVOKFtBTV9HTlVfR0VUVEVYVF0sCitbCisgIGRubCBBcmd1bWVudCBjaGVja2luZy4KKyAgaWZlbHNlKFskMV0sIFtdLCAsIFtpZmVsc2UoWyQxXSwgW2V4dGVybmFsXSwgLCBbaWZlbHNlKFskMV0sIFtuby1saWJ0b29sXSwgLCBbaWZlbHNlKFskMV0sIFt1c2UtbGlidG9vbF0sICwKKyAgICBbZXJycHJpbnQoW0VSUk9SOiBpbnZhbGlkIGZpcnN0IGFyZ3VtZW50IHRvIEFNX0dOVV9HRVRURVhUCitdKV0pXSldKV0pCisgIGlmZWxzZShpZmVsc2UoWyQxXSwgW10sIFtvbGRdKVtdaWZlbHNlKFskMV0sIFtuby1saWJ0b29sXSwgW29sZF0pLCBbb2xkXSwKKyAgICBbQUNfRElBR05PU0UoW29ic29sZXRlXSwgW1VzZSBvZiBBTV9HTlVfR0VUVEVYVCB3aXRob3V0IFtleHRlcm5hbF0gYXJndW1lbnQgaXMgZGVwcmVjYXRlZC5dKV0pCisgIGlmZWxzZShbJDJdLCBbXSwgLCBbaWZlbHNlKFskMl0sIFtuZWVkLW5nZXR0ZXh0XSwgLCBbaWZlbHNlKFskMl0sIFtuZWVkLWZvcm1hdHN0cmluZy1tYWNyb3NdLCAsCisgICAgW2VycnByaW50KFtFUlJPUjogaW52YWxpZCBzZWNvbmQgYXJndW1lbnQgdG8gQU1fR05VX0dFVFRFWFQKK10pXSldKV0pCisgIGRlZmluZShbZ3RfaW5jbHVkZWRfaW50bF0sCisgICAgaWZlbHNlKFskMV0sIFtleHRlcm5hbF0sCisgICAgICBpZmRlZihbQU1fR05VX0dFVFRFWFRfXVtJTlRMX1NVQkRJUl0sIFt5ZXNdLCBbbm9dKSwKKyAgICAgIFt5ZXNdKSkKKyAgZGVmaW5lKFtndF9saWJ0b29sX3N1ZmZpeF9wcmVmaXhdLCBpZmVsc2UoWyQxXSwgW3VzZS1saWJ0b29sXSwgW2xdLCBbXSkpCisgIGd0X05FRURTX0lOSVQKKyAgQU1fR05VX0dFVFRFWFRfTkVFRChbJDJdKQorCisgIEFDX1JFUVVJUkUoW0FNX1BPX1NVQkRJUlNdKWRubAorICBpZmVsc2UoZ3RfaW5jbHVkZWRfaW50bCwgeWVzLCBbCisgICAgQUNfUkVRVUlSRShbQU1fSU5UTF9TVUJESVJdKWRubAorICBdKQorCisgIGRubCBQcmVyZXF1aXNpdGVzIG9mIEFDX0xJQl9MSU5LRkxBR1NfQk9EWS4KKyAgQUNfUkVRVUlSRShbQUNfTElCX1BSRVBBUkVfUFJFRklYXSkKKyAgQUNfUkVRVUlSRShbQUNfTElCX1JQQVRIXSkKKworICBkbmwgU29tZXRpbWVzIGxpYmludGwgcmVxdWlyZXMgbGliaWNvbnYsIHNvIGZpcnN0IHNlYXJjaCBmb3IgbGliaWNvbnYuCisgIGRubCBJZGVhbGx5IHdlIHdvdWxkIGRvIHRoaXMgc2VhcmNoIG9ubHkgYWZ0ZXIgdGhlCisgIGRubCAgICAgIGlmIHRlc3QgIiRVU0VfTkxTIiA9ICJ5ZXMiOyB0aGVuCisgIGRubCAgICAgICAgaWYgeyBldmFsICJndF92YWw9XCQkZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmMiOyB0ZXN0ICIkZ3RfdmFsIiAhPSAieWVzIjsgfTsgdGhlbgorICBkbmwgdGVzdHMuIEJ1dCBpZiBjb25maWd1cmUuaW4gaW52b2tlcyBBTV9JQ09OViBhZnRlciBBTV9HTlVfR0VUVEVYVAorICBkbmwgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgd291bGQgbmVlZCB0byBjb250YWluIHRoZSBzYW1lIHNoZWxsIGNvZGUKKyAgZG5sIGFnYWluLCBvdXRzaWRlIGFueSAnaWYnLiBUaGVyZSBhcmUgdHdvIHNvbHV0aW9uczoKKyAgZG5sIC0gSW52b2tlIEFNX0lDT05WX0xJTktGTEFHU19CT0RZIGhlcmUsIG91dHNpZGUgYW55ICdpZicuCisgIGRubCAtIENvbnRyb2wgdGhlIGV4cGFuc2lvbnMgaW4gbW9yZSBkZXRhaWwgdXNpbmcgQUNfUFJPVklERV9JRkVMU0UuCisgIGRubCBTaW5jZSBBQ19QUk9WSURFX0lGRUxTRSBpcyBvbmx5IGluIGF1dG9jb25mID49IDIuNTIgYW5kIG5vdAorICBkbmwgZG9jdW1lbnRlZCwgd2UgYXZvaWQgaXQuCisgIGlmZWxzZShndF9pbmNsdWRlZF9pbnRsLCB5ZXMsICwgWworICAgIEFDX1JFUVVJUkUoW0FNX0lDT05WX0xJTktGTEFHU19CT0RZXSkKKyAgXSkKKworICBkbmwgU29tZXRpbWVzLCBvbiBNYWNPUyBYLCBsaWJpbnRsIHJlcXVpcmVzIGxpbmtpbmcgd2l0aCBDb3JlRm91bmRhdGlvbi4KKyAgZ3RfSU5UTF9NQUNPU1gKKworICBkbmwgU2V0IFVTRV9OTFMuCisgIEFDX1JFUVVJUkUoW0FNX05MU10pCisKKyAgaWZlbHNlKGd0X2luY2x1ZGVkX2ludGwsIHllcywgWworICAgIEJVSUxEX0lOQ0xVREVEX0xJQklOVEw9bm8KKyAgICBVU0VfSU5DTFVERURfTElCSU5UTD1ubworICBdKQorICBMSUJJTlRMPQorICBMVExJQklOVEw9CisgIFBPU1VCPQorCisgIGRubCBBZGQgYSB2ZXJzaW9uIG51bWJlciB0byB0aGUgY2FjaGUgbWFjcm9zLgorICBjYXNlICIgJGd0X25lZWRzICIgaW4KKyAgICAqIiBuZWVkLWZvcm1hdHN0cmluZy1tYWNyb3MgIiopIGd0X2FwaV92ZXJzaW9uPTMgOzsKKyAgICAqIiBuZWVkLW5nZXR0ZXh0ICIqKSBndF9hcGlfdmVyc2lvbj0yIDs7CisgICAgKikgZ3RfYXBpX3ZlcnNpb249MSA7OworICBlc2FjCisgIGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJjPSJndF9jdl9mdW5jX2dudWdldHRleHQke2d0X2FwaV92ZXJzaW9ufV9saWJjIgorICBndF9mdW5jX2dudWdldHRleHRfbGliaW50bD0iZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0JHtndF9hcGlfdmVyc2lvbn1fbGliaW50bCIKKworICBkbmwgSWYgd2UgdXNlIE5MUyBmaWd1cmUgb3V0IHdoYXQgbWV0aG9kCisgIGlmIHRlc3QgIiRVU0VfTkxTIiA9ICJ5ZXMiOyB0aGVuCisgICAgZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0PW5vCisgICAgaWZlbHNlKGd0X2luY2x1ZGVkX2ludGwsIHllcywgWworICAgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIGluY2x1ZGVkIGdldHRleHQgaXMgcmVxdWVzdGVkXSkKKyAgICAgIEFDX0FSR19XSVRIKFtpbmNsdWRlZC1nZXR0ZXh0XSwKKyAgICAgICAgWyAgLS13aXRoLWluY2x1ZGVkLWdldHRleHQgdXNlIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGluY2x1ZGVkIGhlcmVdLAorICAgICAgICBubHNfY3ZfZm9yY2VfdXNlX2dudV9nZXR0ZXh0PSR3aXRodmFsLAorICAgICAgICBubHNfY3ZfZm9yY2VfdXNlX2dudV9nZXR0ZXh0PW5vKQorICAgICAgQUNfTVNHX1JFU1VMVChbJG5sc19jdl9mb3JjZV91c2VfZ251X2dldHRleHRdKQorCisgICAgICBubHNfY3ZfdXNlX2dudV9nZXR0ZXh0PSIkbmxzX2N2X2ZvcmNlX3VzZV9nbnVfZ2V0dGV4dCIKKyAgICAgIGlmIHRlc3QgIiRubHNfY3ZfZm9yY2VfdXNlX2dudV9nZXR0ZXh0IiAhPSAieWVzIjsgdGhlbgorICAgIF0pCisgICAgICAgIGRubCBVc2VyIGRvZXMgbm90IGluc2lzdCBvbiB1c2luZyBHTlUgTkxTIGxpYnJhcnkuICBGaWd1cmUgb3V0IHdoYXQKKyAgICAgICAgZG5sIHRvIHVzZS4gIElmIEdOVSBnZXR0ZXh0IGlzIGF2YWlsYWJsZSB3ZSB1c2UgdGhpcy4gIEVsc2Ugd2UgaGF2ZQorICAgICAgICBkbmwgdG8gZmFsbCBiYWNrIHRvIEdOVSBOTFMgbGlicmFyeS4KKworICAgICAgICBpZiB0ZXN0ICRndF9hcGlfdmVyc2lvbiAtZ2UgMzsgdGhlbgorICAgICAgICAgIGd0X3JldmlzaW9uX3Rlc3RfY29kZT0nCisjaWZuZGVmIF9fR05VX0dFVFRFWFRfU1VQUE9SVEVEX1JFVklTSU9OCisjZGVmaW5lIF9fR05VX0dFVFRFWFRfU1VQUE9SVEVEX1JFVklTSU9OKG1ham9yKSAoKG1ham9yKSA9PSAwID8gMCA6IC0xKQorI2VuZGlmCitjaGFuZ2VxdW90ZSgsKWRubAordHlwZWRlZiBpbnQgYXJyYXkgWzIgKiAoX19HTlVfR0VUVEVYVF9TVVBQT1JURURfUkVWSVNJT04oMCkgPj0gMSkgLSAxXTsKK2NoYW5nZXF1b3RlKFssXSlkbmwKKycKKyAgICAgICAgZWxzZQorICAgICAgICAgIGd0X3JldmlzaW9uX3Rlc3RfY29kZT0KKyAgICAgICAgZmkKKyAgICAgICAgaWYgdGVzdCAkZ3RfYXBpX3ZlcnNpb24gLWdlIDI7IHRoZW4KKyAgICAgICAgICBndF9leHByZXNzaW9uX3Rlc3RfY29kZT0nICsgKiBuZ2V0dGV4dCAoIiIsICIiLCAwKScKKyAgICAgICAgZWxzZQorICAgICAgICAgIGd0X2V4cHJlc3Npb25fdGVzdF9jb2RlPQorICAgICAgICBmaQorCisgICAgICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgR05VIGdldHRleHQgaW4gbGliY10sIFskZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmNdLAorICAgICAgICAgW0FDX1RSWV9MSU5LKFsjaW5jbHVkZSA8bGliaW50bC5oPgorJGd0X3JldmlzaW9uX3Rlc3RfY29kZQorZXh0ZXJuIGludCBfbmxfbXNnX2NhdF9jbnRyOworZXh0ZXJuIGludCAqX25sX2RvbWFpbl9iaW5kaW5ncztdLAorICAgICAgICAgICAgW2JpbmR0ZXh0ZG9tYWluICgiIiwgIiIpOworcmV0dXJuICogZ2V0dGV4dCAoIiIpJGd0X2V4cHJlc3Npb25fdGVzdF9jb2RlICsgX25sX21zZ19jYXRfY250ciArICpfbmxfZG9tYWluX2JpbmRpbmdzXSwKKyAgICAgICAgICAgIFtldmFsICIkZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmM9eWVzIl0sCisgICAgICAgICAgICBbZXZhbCAiJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJjPW5vIl0pXSkKKworICAgICAgICBpZiB7IGV2YWwgImd0X3ZhbD1cJCRndF9mdW5jX2dudWdldHRleHRfbGliYyI7IHRlc3QgIiRndF92YWwiICE9ICJ5ZXMiOyB9OyB0aGVuCisgICAgICAgICAgZG5sIFNvbWV0aW1lcyBsaWJpbnRsIHJlcXVpcmVzIGxpYmljb252LCBzbyBmaXJzdCBzZWFyY2ggZm9yIGxpYmljb252LgorICAgICAgICAgIGlmZWxzZShndF9pbmNsdWRlZF9pbnRsLCB5ZXMsICwgWworICAgICAgICAgICAgQU1fSUNPTlZfTElOSworICAgICAgICAgIF0pCisgICAgICAgICAgZG5sIFNlYXJjaCBmb3IgbGliaW50bCBhbmQgZGVmaW5lIExJQklOVEwsIExUTElCSU5UTCBhbmQgSU5DSU5UTAorICAgICAgICAgIGRubCBhY2NvcmRpbmdseS4gRG9uJ3QgdXNlIEFDX0xJQl9MSU5LRkxBR1NfQk9EWShbaW50bF0sW2ljb252XSkKKyAgICAgICAgICBkbmwgYmVjYXVzZSB0aGF0IHdvdWxkIGFkZCAiLWxpY29udiIgdG8gTElCSU5UTCBhbmQgTFRMSUJJTlRMCisgICAgICAgICAgZG5sIGV2ZW4gaWYgbGliaWNvbnYgZG9lc24ndCBleGlzdC4KKyAgICAgICAgICBBQ19MSUJfTElOS0ZMQUdTX0JPRFkoW2ludGxdKQorICAgICAgICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgR05VIGdldHRleHQgaW4gbGliaW50bF0sCisgICAgICAgICAgICBbJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsXSwKKyAgICAgICAgICAgW2d0X3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKyAgICAgICAgICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgJElOQ0lOVEwiCisgICAgICAgICAgICBndF9zYXZlX0xJQlM9IiRMSUJTIgorICAgICAgICAgICAgTElCUz0iJExJQlMgJExJQklOVEwiCisgICAgICAgICAgICBkbmwgTm93IHNlZSB3aGV0aGVyIGxpYmludGwgZXhpc3RzIGFuZCBkb2VzIG5vdCBkZXBlbmQgb24gbGliaWNvbnYuCisgICAgICAgICAgICBBQ19UUllfTElOSyhbI2luY2x1ZGUgPGxpYmludGwuaD4KKyRndF9yZXZpc2lvbl90ZXN0X2NvZGUKK2V4dGVybiBpbnQgX25sX21zZ19jYXRfY250cjsKK2V4dGVybgorI2lmZGVmIF9fY3BsdXNwbHVzCisiQyIKKyNlbmRpZgorY29uc3QgY2hhciAqX25sX2V4cGFuZF9hbGlhcyAoY29uc3QgY2hhciAqKTtdLAorICAgICAgICAgICAgICBbYmluZHRleHRkb21haW4gKCIiLCAiIik7CityZXR1cm4gKiBnZXR0ZXh0ICgiIikkZ3RfZXhwcmVzc2lvbl90ZXN0X2NvZGUgKyBfbmxfbXNnX2NhdF9jbnRyICsgKl9ubF9leHBhbmRfYWxpYXMgKCIiKV0sCisgICAgICAgICAgICAgIFtldmFsICIkZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmludGw9eWVzIl0sCisgICAgICAgICAgICAgIFtldmFsICIkZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmludGw9bm8iXSkKKyAgICAgICAgICAgIGRubCBOb3cgc2VlIHdoZXRoZXIgbGliaW50bCBleGlzdHMgYW5kIGRlcGVuZHMgb24gbGliaWNvbnYuCisgICAgICAgICAgICBpZiB7IGV2YWwgImd0X3ZhbD1cJCRndF9mdW5jX2dudWdldHRleHRfbGliaW50bCI7IHRlc3QgIiRndF92YWwiICE9IHllczsgfSAmJiB0ZXN0IC1uICIkTElCSUNPTlYiOyB0aGVuCisgICAgICAgICAgICAgIExJQlM9IiRMSUJTICRMSUJJQ09OViIKKyAgICAgICAgICAgICAgQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxsaWJpbnRsLmg+CiskZ3RfcmV2aXNpb25fdGVzdF9jb2RlCitleHRlcm4gaW50IF9ubF9tc2dfY2F0X2NudHI7CitleHRlcm4KKyNpZmRlZiBfX2NwbHVzcGx1cworIkMiCisjZW5kaWYKK2NvbnN0IGNoYXIgKl9ubF9leHBhbmRfYWxpYXMgKGNvbnN0IGNoYXIgKik7XSwKKyAgICAgICAgICAgICAgICBbYmluZHRleHRkb21haW4gKCIiLCAiIik7CityZXR1cm4gKiBnZXR0ZXh0ICgiIikkZ3RfZXhwcmVzc2lvbl90ZXN0X2NvZGUgKyBfbmxfbXNnX2NhdF9jbnRyICsgKl9ubF9leHBhbmRfYWxpYXMgKCIiKV0sCisgICAgICAgICAgICAgICBbTElCSU5UTD0iJExJQklOVEwgJExJQklDT05WIgorICAgICAgICAgICAgICAgIExUTElCSU5UTD0iJExUTElCSU5UTCAkTFRMSUJJQ09OViIKKyAgICAgICAgICAgICAgICBldmFsICIkZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmludGw9eWVzIgorICAgICAgICAgICAgICAgXSkKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBDUFBGTEFHUz0iJGd0X3NhdmVfQ1BQRkxBR1MiCisgICAgICAgICAgICBMSUJTPSIkZ3Rfc2F2ZV9MSUJTIl0pCisgICAgICAgIGZpCisKKyAgICAgICAgZG5sIElmIGFuIGFscmVhZHkgcHJlc2VudCBvciBwcmVpbnN0YWxsZWQgR05VIGdldHRleHQoKSBpcyBmb3VuZCwKKyAgICAgICAgZG5sIHVzZSBpdC4gIEJ1dCBpZiB0aGlzIG1hY3JvIGlzIHVzZWQgaW4gR05VIGdldHRleHQsIGFuZCBHTlUKKyAgICAgICAgZG5sIGdldHRleHQgaXMgYWxyZWFkeSBwcmVpbnN0YWxsZWQgaW4gbGliaW50bCwgd2UgdXBkYXRlIHRoaXMKKyAgICAgICAgZG5sIGxpYmludGwuICAoQ2YuIHRoZSBpbnN0YWxsIHJ1bGUgaW4gaW50bC9NYWtlZmlsZS5pbi4pCisgICAgICAgIGlmIHsgZXZhbCAiZ3RfdmFsPVwkJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJjIjsgdGVzdCAiJGd0X3ZhbCIgPSAieWVzIjsgfSBcCisgICAgICAgICAgIHx8IHsgeyBldmFsICJndF92YWw9XCQkZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmludGwiOyB0ZXN0ICIkZ3RfdmFsIiA9ICJ5ZXMiOyB9IFwKKyAgICAgICAgICAgICAgICAmJiB0ZXN0ICIkUEFDS0FHRSIgIT0gZ2V0dGV4dC1ydW50aW1lIFwKKyAgICAgICAgICAgICAgICAmJiB0ZXN0ICIkUEFDS0FHRSIgIT0gZ2V0dGV4dC10b29sczsgfTsgdGhlbgorICAgICAgICAgIGd0X3VzZV9wcmVpbnN0YWxsZWRfZ251Z2V0dGV4dD15ZXMKKyAgICAgICAgZWxzZQorICAgICAgICAgIGRubCBSZXNldCB0aGUgdmFsdWVzIHNldCBieSBzZWFyY2hpbmcgZm9yIGxpYmludGwuCisgICAgICAgICAgTElCSU5UTD0KKyAgICAgICAgICBMVExJQklOVEw9CisgICAgICAgICAgSU5DSU5UTD0KKyAgICAgICAgZmkKKworICAgIGlmZWxzZShndF9pbmNsdWRlZF9pbnRsLCB5ZXMsIFsKKyAgICAgICAgaWYgdGVzdCAiJGd0X3VzZV9wcmVpbnN0YWxsZWRfZ251Z2V0dGV4dCIgIT0gInllcyI7IHRoZW4KKyAgICAgICAgICBkbmwgR05VIGdldHRleHQgaXMgbm90IGZvdW5kIGluIHRoZSBDIGxpYnJhcnkuCisgICAgICAgICAgZG5sIEZhbGwgYmFjayBvbiBpbmNsdWRlZCBHTlUgZ2V0dGV4dCBsaWJyYXJ5LgorICAgICAgICAgIG5sc19jdl91c2VfZ251X2dldHRleHQ9eWVzCisgICAgICAgIGZpCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0ICIkbmxzX2N2X3VzZV9nbnVfZ2V0dGV4dCIgPSAieWVzIjsgdGhlbgorICAgICAgICBkbmwgTWFyayBhY3Rpb25zIHVzZWQgdG8gZ2VuZXJhdGUgR05VIE5MUyBsaWJyYXJ5LgorICAgICAgICBCVUlMRF9JTkNMVURFRF9MSUJJTlRMPXllcworICAgICAgICBVU0VfSU5DTFVERURfTElCSU5UTD15ZXMKKyAgICAgICAgTElCSU5UTD0iaWZlbHNlKFskM10sW10sXCR7dG9wX2J1aWxkZGlyfS9pbnRsLFskM10pL2xpYmludGwuW11ndF9saWJ0b29sX3N1ZmZpeF9wcmVmaXhbXWEgJExJQklDT05WICRMSUJUSFJFQUQiCisgICAgICAgIExUTElCSU5UTD0iaWZlbHNlKFskM10sW10sXCR7dG9wX2J1aWxkZGlyfS9pbnRsLFskM10pL2xpYmludGwuW11ndF9saWJ0b29sX3N1ZmZpeF9wcmVmaXhbXWEgJExUTElCSUNPTlYgJExUTElCVEhSRUFEIgorICAgICAgICBMSUJTPWBlY2hvICIgJExJQlMgIiB8IHNlZCAtZSAncy8gLWxpbnRsIC8gLycgLWUgJ3MvXiAvLycgLWUgJ3MvICQvLydgCisgICAgICBmaQorCisgICAgICBDQVRPQkpFWFQ9CisgICAgICBpZiB0ZXN0ICIkZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0IiA9ICJ5ZXMiIFwKKyAgICAgICAgIHx8IHRlc3QgIiRubHNfY3ZfdXNlX2dudV9nZXR0ZXh0IiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgIGRubCBNYXJrIGFjdGlvbnMgdG8gdXNlIEdOVSBnZXR0ZXh0IHRvb2xzLgorICAgICAgICBDQVRPQkpFWFQ9LmdtbworICAgICAgZmkKKyAgICBdKQorCisgICAgaWYgdGVzdCAtbiAiJElOVExfTUFDT1NYX0xJQlMiOyB0aGVuCisgICAgICBpZiB0ZXN0ICIkZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0IiA9ICJ5ZXMiIFwKKyAgICAgICAgIHx8IHRlc3QgIiRubHNfY3ZfdXNlX2dudV9nZXR0ZXh0IiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgIGRubCBTb21lIGV4dHJhIGZsYWdzIGFyZSBuZWVkZWQgZHVyaW5nIGxpbmtpbmcuCisgICAgICAgIExJQklOVEw9IiRMSUJJTlRMICRJTlRMX01BQ09TWF9MSUJTIgorICAgICAgICBMVExJQklOVEw9IiRMVExJQklOVEwgJElOVExfTUFDT1NYX0xJQlMiCisgICAgICBmaQorICAgIGZpCisKKyAgICBpZiB0ZXN0ICIkZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0IiA9ICJ5ZXMiIFwKKyAgICAgICB8fCB0ZXN0ICIkbmxzX2N2X3VzZV9nbnVfZ2V0dGV4dCIgPSAieWVzIjsgdGhlbgorICAgICAgQUNfREVGSU5FKFtFTkFCTEVfTkxTXSwgWzFdLAorICAgICAgICBbRGVmaW5lIHRvIDEgaWYgdHJhbnNsYXRpb24gb2YgcHJvZ3JhbSBtZXNzYWdlcyB0byB0aGUgdXNlcidzIG5hdGl2ZSBsYW5ndWFnZQorICAgaXMgcmVxdWVzdGVkLl0pCisgICAgZWxzZQorICAgICAgVVNFX05MUz1ubworICAgIGZpCisgIGZpCisKKyAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIHVzZSBOTFNdKQorICBBQ19NU0dfUkVTVUxUKFskVVNFX05MU10pCisgIGlmIHRlc3QgIiRVU0VfTkxTIiA9ICJ5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGVyZSB0aGUgZ2V0dGV4dCBmdW5jdGlvbiBjb21lcyBmcm9tXSkKKyAgICBpZiB0ZXN0ICIkZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0IiA9ICJ5ZXMiOyB0aGVuCisgICAgICBpZiB7IGV2YWwgImd0X3ZhbD1cJCRndF9mdW5jX2dudWdldHRleHRfbGliaW50bCI7IHRlc3QgIiRndF92YWwiID0gInllcyI7IH07IHRoZW4KKyAgICAgICAgZ3Rfc291cmNlPSJleHRlcm5hbCBsaWJpbnRsIgorICAgICAgZWxzZQorICAgICAgICBndF9zb3VyY2U9ImxpYmMiCisgICAgICBmaQorICAgIGVsc2UKKyAgICAgIGd0X3NvdXJjZT0iaW5jbHVkZWQgaW50bCBkaXJlY3RvcnkiCisgICAgZmkKKyAgICBBQ19NU0dfUkVTVUxUKFskZ3Rfc291cmNlXSkKKyAgZmkKKworICBpZiB0ZXN0ICIkVVNFX05MUyIgPSAieWVzIjsgdGhlbgorCisgICAgaWYgdGVzdCAiJGd0X3VzZV9wcmVpbnN0YWxsZWRfZ251Z2V0dGV4dCIgPSAieWVzIjsgdGhlbgorICAgICAgaWYgeyBldmFsICJndF92YWw9XCQkZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmludGwiOyB0ZXN0ICIkZ3RfdmFsIiA9ICJ5ZXMiOyB9OyB0aGVuCisgICAgICAgIEFDX01TR19DSEVDS0lORyhbaG93IHRvIGxpbmsgd2l0aCBsaWJpbnRsXSkKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbJExJQklOVExdKQorICAgICAgICBBQ19MSUJfQVBQRU5EVE9WQVIoW0NQUEZMQUdTXSwgWyRJTkNJTlRMXSkKKyAgICAgIGZpCisKKyAgICAgIGRubCBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gU29tZSBwYWNrYWdlcyBtYXkgYmUgdXNpbmcgdGhpcy4KKyAgICAgIEFDX0RFRklORShbSEFWRV9HRVRURVhUXSwgWzFdLAorICAgICAgIFtEZWZpbmUgaWYgdGhlIEdOVSBnZXR0ZXh0KCkgZnVuY3Rpb24gaXMgYWxyZWFkeSBwcmVzZW50IG9yIHByZWluc3RhbGxlZC5dKQorICAgICAgQUNfREVGSU5FKFtIQVZFX0RDR0VUVEVYVF0sIFsxXSwKKyAgICAgICBbRGVmaW5lIGlmIHRoZSBHTlUgZGNnZXR0ZXh0KCkgZnVuY3Rpb24gaXMgYWxyZWFkeSBwcmVzZW50IG9yIHByZWluc3RhbGxlZC5dKQorICAgIGZpCisKKyAgICBkbmwgV2UgbmVlZCB0byBwcm9jZXNzIHRoZSBwby8gZGlyZWN0b3J5LgorICAgIFBPU1VCPXBvCisgIGZpCisKKyAgaWZlbHNlKGd0X2luY2x1ZGVkX2ludGwsIHllcywgWworICAgIGRubCBJZiB0aGlzIGlzIHVzZWQgaW4gR05VIGdldHRleHQgd2UgaGF2ZSB0byBzZXQgQlVJTERfSU5DTFVERURfTElCSU5UTAorICAgIGRubCB0byAneWVzJyBiZWNhdXNlIHNvbWUgb2YgdGhlIHRlc3RzdWl0ZSByZXF1aXJlcyBpdC4KKyAgICBpZiB0ZXN0ICIkUEFDS0FHRSIgPSBnZXR0ZXh0LXJ1bnRpbWUgfHwgdGVzdCAiJFBBQ0tBR0UiID0gZ2V0dGV4dC10b29sczsgdGhlbgorICAgICAgQlVJTERfSU5DTFVERURfTElCSU5UTD15ZXMKKyAgICBmaQorCisgICAgZG5sIE1ha2UgYWxsIHZhcmlhYmxlcyB3ZSB1c2Uga25vd24gdG8gYXV0b2NvbmYuCisgICAgQUNfU1VCU1QoW0JVSUxEX0lOQ0xVREVEX0xJQklOVExdKQorICAgIEFDX1NVQlNUKFtVU0VfSU5DTFVERURfTElCSU5UTF0pCisgICAgQUNfU1VCU1QoW0NBVE9CSkVYVF0pCisKKyAgICBkbmwgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIFNvbWUgY29uZmlndXJlLmlucyBtYXkgYmUgdXNpbmcgdGhpcy4KKyAgICBubHNfY3ZfaGVhZGVyX2ludGw9CisgICAgbmxzX2N2X2hlYWRlcl9saWJndD0KKworICAgIGRubCBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gU29tZSBNYWtlZmlsZXMgbWF5IGJlIHVzaW5nIHRoaXMuCisgICAgREFUQURJUk5BTUU9c2hhcmUKKyAgICBBQ19TVUJTVChbREFUQURJUk5BTUVdKQorCisgICAgZG5sIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiBTb21lIE1ha2VmaWxlcyBtYXkgYmUgdXNpbmcgdGhpcy4KKyAgICBJTlNUT0JKRVhUPS5tbworICAgIEFDX1NVQlNUKFtJTlNUT0JKRVhUXSkKKworICAgIGRubCBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gU29tZSBNYWtlZmlsZXMgbWF5IGJlIHVzaW5nIHRoaXMuCisgICAgR0VOQ0FUPWdlbmNhdAorICAgIEFDX1NVQlNUKFtHRU5DQVRdKQorCisgICAgZG5sIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiBTb21lIE1ha2VmaWxlcyBtYXkgYmUgdXNpbmcgdGhpcy4KKyAgICBJTlRMT0JKUz0KKyAgICBpZiB0ZXN0ICIkVVNFX0lOQ0xVREVEX0xJQklOVEwiID0geWVzOyB0aGVuCisgICAgICBJTlRMT0JKUz0iXCQoR0VUVE9CSlMpIgorICAgIGZpCisgICAgQUNfU1VCU1QoW0lOVExPQkpTXSkKKworICAgIGRubCBFbmFibGUgbGlidG9vbCBzdXBwb3J0IGlmIHRoZSBzdXJyb3VuZGluZyBwYWNrYWdlIHdpc2hlcyBpdC4KKyAgICBJTlRMX0xJQlRPT0xfU1VGRklYX1BSRUZJWD1ndF9saWJ0b29sX3N1ZmZpeF9wcmVmaXgKKyAgICBBQ19TVUJTVChbSU5UTF9MSUJUT09MX1NVRkZJWF9QUkVGSVhdKQorICBdKQorCisgIGRubCBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gU29tZSBNYWtlZmlsZXMgbWF5IGJlIHVzaW5nIHRoaXMuCisgIElOVExMSUJTPSIkTElCSU5UTCIKKyAgQUNfU1VCU1QoW0lOVExMSUJTXSkKKworICBkbmwgTWFrZSBhbGwgZG9jdW1lbnRlZCB2YXJpYWJsZXMga25vd24gdG8gYXV0b2NvbmYuCisgIEFDX1NVQlNUKFtMSUJJTlRMXSkKKyAgQUNfU1VCU1QoW0xUTElCSU5UTF0pCisgIEFDX1NVQlNUKFtQT1NVQl0pCitdKQorCisKK2RubCBndF9ORUVEU19JTklUIGVuc3VyZXMgdGhhdCB0aGUgZ3RfbmVlZHMgdmFyaWFibGUgaXMgaW5pdGlhbGl6ZWQuCittNF9kZWZpbmUoW2d0X05FRURTX0lOSVRdLAorWworICBtNF9kaXZlcnRfdGV4dChbREVGQVVMVFNdLCBbZ3RfbmVlZHM9XSkKKyAgbTRfZGVmaW5lKFtndF9ORUVEU19JTklUXSwgW10pCitdKQorCisKK2RubCBVc2FnZTogQU1fR05VX0dFVFRFWFRfTkVFRChbTkVFRFNZTUJPTF0pCitBQ19ERUZVTihbQU1fR05VX0dFVFRFWFRfTkVFRF0sCitbCisgIG00X2RpdmVydF90ZXh0KFtJTklUX1BSRVBBUkVdLCBbZ3RfbmVlZHM9IiRndF9uZWVkcyAkMSJdKQorXSkKKworCitkbmwgVXNhZ2U6IEFNX0dOVV9HRVRURVhUX1ZFUlNJT04oW2dldHRleHQtdmVyc2lvbl0pCitBQ19ERUZVTihbQU1fR05VX0dFVFRFWFRfVkVSU0lPTl0sIFtdKQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2NvbW1vbi9pY29udi5tNCBiL2F2YWhpLTAuNi4zMS9jb21tb24vaWNvbnYubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIwNDFiOQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9jb21tb24vaWNvbnYubTQKQEAgLTAsMCArMSwyMTQgQEAKKyMgaWNvbnYubTQgc2VyaWFsIDExIChnZXR0ZXh0LTAuMTguMSkKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiwgMjAwNy0yMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK2RubCBGcm9tIEJydW5vIEhhaWJsZS4KKworQUNfREVGVU4oW0FNX0lDT05WX0xJTktGTEFHU19CT0RZXSwKK1sKKyAgZG5sIFByZXJlcXVpc2l0ZXMgb2YgQUNfTElCX0xJTktGTEFHU19CT0RZLgorICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9QUkVGSVhdKQorICBBQ19SRVFVSVJFKFtBQ19MSUJfUlBBVEhdKQorCisgIGRubCBTZWFyY2ggZm9yIGxpYmljb252IGFuZCBkZWZpbmUgTElCSUNPTlYsIExUTElCSUNPTlYgYW5kIElOQ0lDT05WCisgIGRubCBhY2NvcmRpbmdseS4KKyAgQUNfTElCX0xJTktGTEFHU19CT0RZKFtpY29udl0pCitdKQorCitBQ19ERUZVTihbQU1fSUNPTlZfTElOS10sCitbCisgIGRubCBTb21lIHN5c3RlbXMgaGF2ZSBpY29udiBpbiBsaWJjLCBzb21lIGhhdmUgaXQgaW4gbGliaWNvbnYgKE9TRi8xIGFuZAorICBkbmwgdGhvc2Ugd2l0aCB0aGUgc3RhbmRhbG9uZSBwb3J0YWJsZSBHTlUgbGliaWNvbnYgaW5zdGFsbGVkKS4KKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKSBkbmwgZm9yIGNyb3NzLWNvbXBpbGVzCisKKyAgZG5sIFNlYXJjaCBmb3IgbGliaWNvbnYgYW5kIGRlZmluZSBMSUJJQ09OViwgTFRMSUJJQ09OViBhbmQgSU5DSUNPTlYKKyAgZG5sIGFjY29yZGluZ2x5LgorICBBQ19SRVFVSVJFKFtBTV9JQ09OVl9MSU5LRkxBR1NfQk9EWV0pCisKKyAgZG5sIEFkZCAkSU5DSUNPTlYgdG8gQ1BQRkxBR1MgYmVmb3JlIHBlcmZvcm1pbmcgdGhlIGZvbGxvd2luZyBjaGVja3MsCisgIGRubCBiZWNhdXNlIGlmIHRoZSB1c2VyIGhhcyBpbnN0YWxsZWQgbGliaWNvbnYgYW5kIG5vdCBkaXNhYmxlZCBpdHMgdXNlCisgIGRubCB2aWEgLS13aXRob3V0LWxpYmljb252LXByZWZpeCwgaGUgd2FudHMgdG8gdXNlIGl0LiBUaGUgZmlyc3QKKyAgZG5sIEFDX1RSWV9MSU5LIHdpbGwgdGhlbiBmYWlsLCB0aGUgc2Vjb25kIEFDX1RSWV9MSU5LIHdpbGwgc3VjY2VlZC4KKyAgYW1fc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorICBBQ19MSUJfQVBQRU5EVE9WQVIoW0NQUEZMQUdTXSwgWyRJTkNJQ09OVl0pCisKKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBpY29udl0sIFthbV9jdl9mdW5jX2ljb252XSwgWworICAgIGFtX2N2X2Z1bmNfaWNvbnY9Im5vLCBjb25zaWRlciBpbnN0YWxsaW5nIEdOVSBsaWJpY29udiIKKyAgICBhbV9jdl9saWJfaWNvbnY9bm8KKyAgICBBQ19UUllfTElOSyhbI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGljb252Lmg+XSwKKyAgICAgIFtpY29udl90IGNkID0gaWNvbnZfb3BlbigiIiwiIik7CisgICAgICAgaWNvbnYoY2QsTlVMTCxOVUxMLE5VTEwsTlVMTCk7CisgICAgICAgaWNvbnZfY2xvc2UoY2QpO10sCisgICAgICBbYW1fY3ZfZnVuY19pY29udj15ZXNdKQorICAgIGlmIHRlc3QgIiRhbV9jdl9mdW5jX2ljb252IiAhPSB5ZXM7IHRoZW4KKyAgICAgIGFtX3NhdmVfTElCUz0iJExJQlMiCisgICAgICBMSUJTPSIkTElCUyAkTElCSUNPTlYiCisgICAgICBBQ19UUllfTElOSyhbI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGljb252Lmg+XSwKKyAgICAgICAgW2ljb252X3QgY2QgPSBpY29udl9vcGVuKCIiLCIiKTsKKyAgICAgICAgIGljb252KGNkLE5VTEwsTlVMTCxOVUxMLE5VTEwpOworICAgICAgICAgaWNvbnZfY2xvc2UoY2QpO10sCisgICAgICAgIFthbV9jdl9saWJfaWNvbnY9eWVzXQorICAgICAgICBbYW1fY3ZfZnVuY19pY29udj15ZXNdKQorICAgICAgTElCUz0iJGFtX3NhdmVfTElCUyIKKyAgICBmaQorICBdKQorICBpZiB0ZXN0ICIkYW1fY3ZfZnVuY19pY29udiIgPSB5ZXM7IHRoZW4KKyAgICBBQ19DQUNIRV9DSEVDSyhbZm9yIHdvcmtpbmcgaWNvbnZdLCBbYW1fY3ZfZnVuY19pY29udl93b3Jrc10sIFsKKyAgICAgIGRubCBUaGlzIHRlc3RzIGFnYWluc3QgYnVncyBpbiBBSVggNS4xLCBIUC1VWCAxMS4xMSwgU29sYXJpcyAxMC4KKyAgICAgIGFtX3NhdmVfTElCUz0iJExJQlMiCisgICAgICBpZiB0ZXN0ICRhbV9jdl9saWJfaWNvbnYgPSB5ZXM7IHRoZW4KKyAgICAgICAgTElCUz0iJExJQlMgJExJQklDT05WIgorICAgICAgZmkKKyAgICAgIEFDX1RSWV9SVU4oWworI2luY2x1ZGUgPGljb252Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CitpbnQgbWFpbiAoKQoreworICAvKiBUZXN0IGFnYWluc3QgQUlYIDUuMSBidWc6IEZhaWx1cmVzIGFyZSBub3QgZGlzdGluZ3Vpc2hhYmxlIGZyb20gc3VjY2Vzc2Z1bAorICAgICByZXR1cm5zLiAgKi8KKyAgeworICAgIGljb252X3QgY2RfdXRmOF90b184ODU5MSA9IGljb252X29wZW4gKCJJU084ODU5LTEiLCAiVVRGLTgiKTsKKyAgICBpZiAoY2RfdXRmOF90b184ODU5MSAhPSAoaWNvbnZfdCkoLTEpKQorICAgICAgeworICAgICAgICBzdGF0aWMgY29uc3QgY2hhciBpbnB1dFtdID0gIlwzNDJcMjAyXDI1NCI7IC8qIEVVUk8gU0lHTiAqLworICAgICAgICBjaGFyIGJ1ZlsxMF07CisgICAgICAgIGNvbnN0IGNoYXIgKmlucHRyID0gaW5wdXQ7CisgICAgICAgIHNpemVfdCBpbmJ5dGVzbGVmdCA9IHN0cmxlbiAoaW5wdXQpOworICAgICAgICBjaGFyICpvdXRwdHIgPSBidWY7CisgICAgICAgIHNpemVfdCBvdXRieXRlc2xlZnQgPSBzaXplb2YgKGJ1Zik7CisgICAgICAgIHNpemVfdCByZXMgPSBpY29udiAoY2RfdXRmOF90b184ODU5MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKikgJmlucHRyLCAmaW5ieXRlc2xlZnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm91dHB0ciwgJm91dGJ5dGVzbGVmdCk7CisgICAgICAgIGlmIChyZXMgPT0gMCkKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKyAgfQorICAvKiBUZXN0IGFnYWluc3QgU29sYXJpcyAxMCBidWc6IEZhaWx1cmVzIGFyZSBub3QgZGlzdGluZ3Vpc2hhYmxlIGZyb20KKyAgICAgc3VjY2Vzc2Z1bCByZXR1cm5zLiAgKi8KKyAgeworICAgIGljb252X3QgY2RfYXNjaWlfdG9fODg1OTEgPSBpY29udl9vcGVuICgiSVNPODg1OS0xIiwgIjY0NiIpOworICAgIGlmIChjZF9hc2NpaV90b184ODU5MSAhPSAoaWNvbnZfdCkoLTEpKQorICAgICAgeworICAgICAgICBzdGF0aWMgY29uc3QgY2hhciBpbnB1dFtdID0gIlwyNjMiOworICAgICAgICBjaGFyIGJ1ZlsxMF07CisgICAgICAgIGNvbnN0IGNoYXIgKmlucHRyID0gaW5wdXQ7CisgICAgICAgIHNpemVfdCBpbmJ5dGVzbGVmdCA9IHN0cmxlbiAoaW5wdXQpOworICAgICAgICBjaGFyICpvdXRwdHIgPSBidWY7CisgICAgICAgIHNpemVfdCBvdXRieXRlc2xlZnQgPSBzaXplb2YgKGJ1Zik7CisgICAgICAgIHNpemVfdCByZXMgPSBpY29udiAoY2RfYXNjaWlfdG9fODg1OTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKiopICZpbnB0ciwgJmluYnl0ZXNsZWZ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvdXRwdHIsICZvdXRieXRlc2xlZnQpOworICAgICAgICBpZiAocmVzID09IDApCisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisgIH0KKyNpZiAwIC8qIFRoaXMgYnVnIGNvdWxkIGJlIHdvcmtlZCBhcm91bmQgYnkgdGhlIGNhbGxlci4gICovCisgIC8qIFRlc3QgYWdhaW5zdCBIUC1VWCAxMS4xMSBidWc6IFBvc2l0aXZlIHJldHVybiB2YWx1ZSBpbnN0ZWFkIG9mIDAuICAqLworICB7CisgICAgaWNvbnZfdCBjZF84ODU5MV90b191dGY4ID0gaWNvbnZfb3BlbiAoInV0ZjgiLCAiaXNvODg1OTEiKTsKKyAgICBpZiAoY2RfODg1OTFfdG9fdXRmOCAhPSAoaWNvbnZfdCkoLTEpKQorICAgICAgeworICAgICAgICBzdGF0aWMgY29uc3QgY2hhciBpbnB1dFtdID0gIlwzMDRyZ2VyIG1pdCBiXDM2NnNlbiBCXDM3NGJjaGVuIG9obmUgQXVnZW5tYVwzMzciOworICAgICAgICBjaGFyIGJ1Zls1MF07CisgICAgICAgIGNvbnN0IGNoYXIgKmlucHRyID0gaW5wdXQ7CisgICAgICAgIHNpemVfdCBpbmJ5dGVzbGVmdCA9IHN0cmxlbiAoaW5wdXQpOworICAgICAgICBjaGFyICpvdXRwdHIgPSBidWY7CisgICAgICAgIHNpemVfdCBvdXRieXRlc2xlZnQgPSBzaXplb2YgKGJ1Zik7CisgICAgICAgIHNpemVfdCByZXMgPSBpY29udiAoY2RfODg1OTFfdG9fdXRmOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKikgJmlucHRyLCAmaW5ieXRlc2xlZnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm91dHB0ciwgJm91dGJ5dGVzbGVmdCk7CisgICAgICAgIGlmICgoaW50KXJlcyA+IDApCisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisgIH0KKyNlbmRpZgorICAvKiBUZXN0IGFnYWluc3QgSFAtVVggMTEuMTEgYnVnOiBObyBjb252ZXJ0ZXIgZnJvbSBFVUMtSlAgdG8gVVRGLTggaXMKKyAgICAgcHJvdmlkZWQuICAqLworICBpZiAoLyogVHJ5IHN0YW5kYXJkaXplZCBuYW1lcy4gICovCisgICAgICBpY29udl9vcGVuICgiVVRGLTgiLCAiRVVDLUpQIikgPT0gKGljb252X3QpKC0xKQorICAgICAgLyogVHJ5IElSSVgsIE9TRi8xIG5hbWVzLiAgKi8KKyAgICAgICYmIGljb252X29wZW4gKCJVVEYtOCIsICJldWNKUCIpID09IChpY29udl90KSgtMSkKKyAgICAgIC8qIFRyeSBBSVggbmFtZXMuICAqLworICAgICAgJiYgaWNvbnZfb3BlbiAoIlVURi04IiwgIklCTS1ldWNKUCIpID09IChpY29udl90KSgtMSkKKyAgICAgIC8qIFRyeSBIUC1VWCBuYW1lcy4gICovCisgICAgICAmJiBpY29udl9vcGVuICgidXRmOCIsICJldWNKUCIpID09IChpY29udl90KSgtMSkpCisgICAgcmV0dXJuIDE7CisgIHJldHVybiAwOworfV0sIFthbV9jdl9mdW5jX2ljb252X3dvcmtzPXllc10sIFthbV9jdl9mdW5jX2ljb252X3dvcmtzPW5vXSwKKyAgICAgICAgW2Nhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICBhaXgqIHwgaHB1eCopIGFtX2N2X2Z1bmNfaWNvbnZfd29ya3M9Imd1ZXNzaW5nIG5vIiA7OworICAgICAgICAgICAqKSAgICAgICAgICAgIGFtX2N2X2Z1bmNfaWNvbnZfd29ya3M9Imd1ZXNzaW5nIHllcyIgOzsKKyAgICAgICAgIGVzYWNdKQorICAgICAgTElCUz0iJGFtX3NhdmVfTElCUyIKKyAgICBdKQorICAgIGNhc2UgIiRhbV9jdl9mdW5jX2ljb252X3dvcmtzIiBpbgorICAgICAgKm5vKSBhbV9mdW5jX2ljb252PW5vIGFtX2N2X2xpYl9pY29udj1ubyA7OworICAgICAgKikgICBhbV9mdW5jX2ljb252PXllcyA7OworICAgIGVzYWMKKyAgZWxzZQorICAgIGFtX2Z1bmNfaWNvbnY9bm8gYW1fY3ZfbGliX2ljb252PW5vCisgIGZpCisgIGlmIHRlc3QgIiRhbV9mdW5jX2ljb252IiA9IHllczsgdGhlbgorICAgIEFDX0RFRklORShbSEFWRV9JQ09OVl0sIFsxXSwKKyAgICAgIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGljb252KCkgZnVuY3Rpb24gYW5kIGl0IHdvcmtzLl0pCisgIGZpCisgIGlmIHRlc3QgIiRhbV9jdl9saWJfaWNvbnYiID0geWVzOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gbGluayB3aXRoIGxpYmljb252XSkKKyAgICBBQ19NU0dfUkVTVUxUKFskTElCSUNPTlZdKQorICBlbHNlCisgICAgZG5sIElmICRMSUJJQ09OViBkaWRuJ3QgbGVhZCB0byBhIHVzYWJsZSBsaWJyYXJ5LCB3ZSBkb24ndCBuZWVkICRJTkNJQ09OVgorICAgIGRubCBlaXRoZXIuCisgICAgQ1BQRkxBR1M9IiRhbV9zYXZlX0NQUEZMQUdTIgorICAgIExJQklDT05WPQorICAgIExUTElCSUNPTlY9CisgIGZpCisgIEFDX1NVQlNUKFtMSUJJQ09OVl0pCisgIEFDX1NVQlNUKFtMVExJQklDT05WXSkKK10pCisKK2RubCBEZWZpbmUgQU1fSUNPTlYgdXNpbmcgQUNfREVGVU5fT05DRSBmb3IgQXV0b2NvbmYgPj0gMi42NCwgaW4gb3JkZXIgdG8KK2RubCBhdm9pZCB3YXJuaW5ncyBsaWtlCitkbmwgIndhcm5pbmc6IEFDX1JFUVVJUkU6IGBBTV9JQ09OVicgd2FzIGV4cGFuZGVkIGJlZm9yZSBpdCB3YXMgcmVxdWlyZWQiLgorZG5sIFRoaXMgaXMgdHJpY2t5IGJlY2F1c2Ugb2YgdGhlIHdheSAnYWNsb2NhbCcgaXMgaW1wbGVtZW50ZWQ6CitkbmwgLSBJdCByZXF1aXJlcyBkZWZpbmluZyBhbiBhdXhpbGlhcnkgbWFjcm8gd2hvc2UgbmFtZSBlbmRzIGluIEFDX0RFRlVOLgorZG5sICAgT3RoZXJ3aXNlIGFjbG9jYWwncyBpbml0aWFsIHNjYW4gcGFzcyB3b3VsZCBtaXNzIHRoZSBtYWNybyBkZWZpbml0aW9uLgorZG5sIC0gSXQgcmVxdWlyZXMgYSBsaW5lIGJyZWFrIGluc2lkZSB0aGUgQUNfREVGVU5fT05DRSBhbmQgQUNfREVGVU4gZXhwYW5zaW9ucy4KK2RubCAgIE90aGVyd2lzZSBhY2xvY2FsIHdvdWxkIGVtaXQgbWFueSAiVXNlIG9mIHVuaW5pdGlhbGl6ZWQgdmFsdWUgJDEiCitkbmwgICB3YXJuaW5ncy4KK200X2RlZmluZShbZ2xfaWNvbnZfQUNfREVGVU5dLAorICBtNF92ZXJzaW9uX3ByZXJlcShbMi42NF0sCisgICAgW1tBQ19ERUZVTl9PTkNFKAorICAgICAgICBbJDFdLCBbJDJdKV1dLAorICAgIFtbQUNfREVGVU4oCisgICAgICAgIFskMV0sIFskMl0pXV0pKQorZ2xfaWNvbnZfQUNfREVGVU4oW0FNX0lDT05WXSwKK1sKKyAgQU1fSUNPTlZfTElOSworICBpZiB0ZXN0ICIkYW1fY3ZfZnVuY19pY29udiIgPSB5ZXM7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBpY29udiBkZWNsYXJhdGlvbl0pCisgICAgQUNfQ0FDSEVfVkFMKFthbV9jdl9wcm90b19pY29udl0sIFsKKyAgICAgIEFDX1RSWV9DT01QSUxFKFsKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxpY29udi5oPgorZXh0ZXJuCisjaWZkZWYgX19jcGx1c3BsdXMKKyJDIgorI2VuZGlmCisjaWYgZGVmaW5lZChfX1NURENfXykgfHwgZGVmaW5lZChfX2NwbHVzcGx1cykKK3NpemVfdCBpY29udiAoaWNvbnZfdCBjZCwgY2hhciAqICppbmJ1Ziwgc2l6ZV90ICppbmJ5dGVzbGVmdCwgY2hhciAqICpvdXRidWYsIHNpemVfdCAqb3V0Ynl0ZXNsZWZ0KTsKKyNlbHNlCitzaXplX3QgaWNvbnYoKTsKKyNlbmRpZgorXSwgW10sIFthbV9jdl9wcm90b19pY29udl9hcmcxPSIiXSwgW2FtX2N2X3Byb3RvX2ljb252X2FyZzE9ImNvbnN0Il0pCisgICAgICBhbV9jdl9wcm90b19pY29udj0iZXh0ZXJuIHNpemVfdCBpY29udiAoaWNvbnZfdCBjZCwgJGFtX2N2X3Byb3RvX2ljb252X2FyZzEgY2hhciAqICppbmJ1Ziwgc2l6ZV90ICppbmJ5dGVzbGVmdCwgY2hhciAqICpvdXRidWYsIHNpemVfdCAqb3V0Ynl0ZXNsZWZ0KTsiXSkKKyAgICBhbV9jdl9wcm90b19pY29udj1gZWNobyAiWyRdYW1fY3ZfcHJvdG9faWNvbnYiIHwgdHIgLXMgJyAnIHwgc2VkIC1lICdzLyggLygvJ2AKKyAgICBBQ19NU0dfUkVTVUxUKFsKKyAgICAgICAgICRhbV9jdl9wcm90b19pY29udl0pCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKFtJQ09OVl9DT05TVF0sIFskYW1fY3ZfcHJvdG9faWNvbnZfYXJnMV0sCisgICAgICBbRGVmaW5lIGFzIGNvbnN0IGlmIHRoZSBkZWNsYXJhdGlvbiBvZiBpY29udigpIG5lZWRzIGNvbnN0Ll0pCisgIGZpCitdKQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2NvbW1vbi9pbnRsdG9vbC5tNCBiL2F2YWhpLTAuNi4zMS9jb21tb24vaW50bHRvb2wubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdhZjY4YgotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9jb21tb24vaW50bHRvb2wubTQKQEAgLTAsMCArMSwyMTYgQEAKKyMjIGludGx0b29sLm00IC0gQ29uZmlndXJlIGludGx0b29sIGZvciB0aGUgdGFyZ2V0IHN5c3RlbS4gLSotU2hlbGwtc2NyaXB0LSotCisjIyBDb3B5cmlnaHQgKEMpIDIwMDEgRWF6ZWwsIEluYy4KKyMjIEF1dGhvcjogTWFjaWVqIFN0YWNob3dpYWsgPG1qc0Bub2lzZWhhdm9jLm9yZz4KKyMjICAgICAgICAgS2VubmV0aCBDaHJpc3RpYW5zZW4gPGtlbm5ldGhAZ251Lm9yZz4KKyMjCisjIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIyMKKyMjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisjIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjIworIyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorIyMKKyMjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKKyMjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorIyMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKyMjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworZG5sIElUX1BST0dfSU5UTFRPT0woW01JTklNVU0tVkVSU0lPTl0sIFtuby14bWxdKQorIyBzZXJpYWwgNDAgSVRfUFJPR19JTlRMVE9PTAorQUNfREVGVU4oW0lUX1BST0dfSU5UTFRPT0xdLCBbCitBQ19QUkVSRVEoWzIuNTBdKWRubAorQUNfUkVRVUlSRShbQU1fTkxTXSlkbmwKKworY2FzZSAiJGFtX19hcGlfdmVyc2lvbiIgaW4KKyAgICAxLlswMTIzNF0pCisJQUNfTVNHX0VSUk9SKFtBdXRvbWFrZSAxLjUgb3IgbmV3ZXIgaXMgcmVxdWlyZWQgdG8gdXNlIGludGx0b29sXSkKKyAgICA7OworICAgICopCisgICAgOzsKK2VzYWMKKworaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgaW50bHRvb2wgPj0gJDFdKQorCisgICAgSU5UTFRPT0xfUkVRVUlSRURfVkVSU0lPTl9BU19JTlQ9YGVjaG8gJDEgfCBhd2sgLUYuICd7IHByaW50ICQgMSAqIDEwMDAgKyAkIDIgKiAxMDAgKyAkIDM7IH0nYAorICAgIElOVExUT09MX0FQUExJRURfVkVSU0lPTj1gaW50bHRvb2wtdXBkYXRlIC0tdmVyc2lvbiB8IGhlYWQgLTEgfCBjdXQgLWQiICIgLWYzYAorICAgIFtJTlRMVE9PTF9BUFBMSUVEX1ZFUlNJT05fQVNfSU5UPWBlY2hvICRJTlRMVE9PTF9BUFBMSUVEX1ZFUlNJT04gfCBhd2sgLUYuICd7IHByaW50ICQgMSAqIDEwMDAgKyAkIDIgKiAxMDAgKyAkIDM7IH0nYAorICAgIF0KKyAgICBBQ19NU0dfUkVTVUxUKFskSU5UTFRPT0xfQVBQTElFRF9WRVJTSU9OIGZvdW5kXSkKKyAgICB0ZXN0ICIkSU5UTFRPT0xfQVBQTElFRF9WRVJTSU9OX0FTX0lOVCIgLWdlICIkSU5UTFRPT0xfUkVRVUlSRURfVkVSU0lPTl9BU19JTlQiIHx8CisJQUNfTVNHX0VSUk9SKFtZb3VyIGludGx0b29sIGlzIHRvbyBvbGQuICBZb3UgbmVlZCBpbnRsdG9vbCAkMSBvciBsYXRlci5dKQorZmkKKworQUNfUEFUSF9QUk9HKElOVExUT09MX1VQREFURSwgW2ludGx0b29sLXVwZGF0ZV0pCitBQ19QQVRIX1BST0coSU5UTFRPT0xfTUVSR0UsIFtpbnRsdG9vbC1tZXJnZV0pCitBQ19QQVRIX1BST0coSU5UTFRPT0xfRVhUUkFDVCwgW2ludGx0b29sLWV4dHJhY3RdKQoraWYgdGVzdCAteiAiJElOVExUT09MX1VQREFURSIgLW8gLXogIiRJTlRMVE9PTF9NRVJHRSIgLW8gLXogIiRJTlRMVE9PTF9FWFRSQUNUIjsgdGhlbgorICAgIEFDX01TR19FUlJPUihbVGhlIGludGx0b29sIHNjcmlwdHMgd2VyZSBub3QgZm91bmQuIFBsZWFzZSBpbnN0YWxsIGludGx0b29sLl0pCitmaQorCisgIElOVExUT09MX0RFU0tUT1BfUlVMRT0nJS5kZXNrdG9wOiAgICUuZGVza3RvcC5pbiAgICQoSU5UTFRPT0xfTUVSR0UpICQod2lsZGNhcmQgJCh0b3Bfc3JjZGlyKS9wby8qLnBvKSA7IExDX0FMTD1DICQoSU5UTFRPT0xfTUVSR0UpIC1kIC11IC1jICQodG9wX2J1aWxkZGlyKS9wby8uaW50bHRvb2wtbWVyZ2UtY2FjaGUgJCh0b3Bfc3JjZGlyKS9wbyAkPCBbJF1AJyAKK0lOVExUT09MX0RJUkVDVE9SWV9SVUxFPSclLmRpcmVjdG9yeTogJS5kaXJlY3RvcnkuaW4gJChJTlRMVE9PTF9NRVJHRSkgJCh3aWxkY2FyZCAkKHRvcF9zcmNkaXIpL3BvLyoucG8pIDsgTENfQUxMPUMgJChJTlRMVE9PTF9NRVJHRSkgLWQgLXUgLWMgJCh0b3BfYnVpbGRkaXIpL3BvLy5pbnRsdG9vbC1tZXJnZS1jYWNoZSAkKHRvcF9zcmNkaXIpL3BvICQ8IFskXUAnIAorICAgICBJTlRMVE9PTF9LRVlTX1JVTEU9JyUua2V5czogICAgICAlLmtleXMuaW4gICAgICAkKElOVExUT09MX01FUkdFKSAkKHdpbGRjYXJkICQodG9wX3NyY2RpcikvcG8vKi5wbykgOyBMQ19BTEw9QyAkKElOVExUT09MX01FUkdFKSAtayAtdSAtYyAkKHRvcF9idWlsZGRpcikvcG8vLmludGx0b29sLW1lcmdlLWNhY2hlICQodG9wX3NyY2RpcikvcG8gJDwgWyRdQCcgCisgICAgIElOVExUT09MX1BST1BfUlVMRT0nJS5wcm9wOiAgICAgICUucHJvcC5pbiAgICAgICQoSU5UTFRPT0xfTUVSR0UpICQod2lsZGNhcmQgJCh0b3Bfc3JjZGlyKS9wby8qLnBvKSA7IExDX0FMTD1DICQoSU5UTFRPT0xfTUVSR0UpIC1kIC11IC1jICQodG9wX2J1aWxkZGlyKS9wby8uaW50bHRvb2wtbWVyZ2UtY2FjaGUgJCh0b3Bfc3JjZGlyKS9wbyAkPCBbJF1AJyAKKyAgICAgIElOVExUT09MX09BRl9SVUxFPSclLm9hZjogICAgICAgJS5vYWYuaW4gICAgICAgJChJTlRMVE9PTF9NRVJHRSkgJCh3aWxkY2FyZCAkKHRvcF9zcmNkaXIpL3BvLyoucG8pIDsgTENfQUxMPUMgJChJTlRMVE9PTF9NRVJHRSkgLW8gLXAgJCh0b3Bfc3JjZGlyKS9wbyAkPCBbJF1AJworICAgICBJTlRMVE9PTF9QT05HX1JVTEU9JyUucG9uZzogICAgICAlLnBvbmcuaW4gICAgICAkKElOVExUT09MX01FUkdFKSAkKHdpbGRjYXJkICQodG9wX3NyY2RpcikvcG8vKi5wbykgOyBMQ19BTEw9QyAkKElOVExUT09MX01FUkdFKSAteCAtdSAtYyAkKHRvcF9idWlsZGRpcikvcG8vLmludGx0b29sLW1lcmdlLWNhY2hlICQodG9wX3NyY2RpcikvcG8gJDwgWyRdQCcgCisgICBJTlRMVE9PTF9TRVJWRVJfUlVMRT0nJS5zZXJ2ZXI6ICAgICUuc2VydmVyLmluICAgICQoSU5UTFRPT0xfTUVSR0UpICQod2lsZGNhcmQgJCh0b3Bfc3JjZGlyKS9wby8qLnBvKSA7IExDX0FMTD1DICQoSU5UTFRPT0xfTUVSR0UpIC1vIC11IC1jICQodG9wX2J1aWxkZGlyKS9wby8uaW50bHRvb2wtbWVyZ2UtY2FjaGUgJCh0b3Bfc3JjZGlyKS9wbyAkPCBbJF1AJyAKKyAgICBJTlRMVE9PTF9TSEVFVF9SVUxFPSclLnNoZWV0OiAgICAgJS5zaGVldC5pbiAgICAgJChJTlRMVE9PTF9NRVJHRSkgJCh3aWxkY2FyZCAkKHRvcF9zcmNkaXIpL3BvLyoucG8pIDsgTENfQUxMPUMgJChJTlRMVE9PTF9NRVJHRSkgLXggLXUgLWMgJCh0b3BfYnVpbGRkaXIpL3BvLy5pbnRsdG9vbC1tZXJnZS1jYWNoZSAkKHRvcF9zcmNkaXIpL3BvICQ8IFskXUAnIAorSU5UTFRPT0xfU09VTkRMSVNUX1JVTEU9JyUuc291bmRsaXN0OiAlLnNvdW5kbGlzdC5pbiAkKElOVExUT09MX01FUkdFKSAkKHdpbGRjYXJkICQodG9wX3NyY2RpcikvcG8vKi5wbykgOyBMQ19BTEw9QyAkKElOVExUT09MX01FUkdFKSAtZCAtdSAtYyAkKHRvcF9idWlsZGRpcikvcG8vLmludGx0b29sLW1lcmdlLWNhY2hlICQodG9wX3NyY2RpcikvcG8gJDwgWyRdQCcgCisgICAgICAgSU5UTFRPT0xfVUlfUlVMRT0nJS51aTogICAgICAgICUudWkuaW4gICAgICAgICQoSU5UTFRPT0xfTUVSR0UpICQod2lsZGNhcmQgJCh0b3Bfc3JjZGlyKS9wby8qLnBvKSA7IExDX0FMTD1DICQoSU5UTFRPT0xfTUVSR0UpIC14IC11IC1jICQodG9wX2J1aWxkZGlyKS9wby8uaW50bHRvb2wtbWVyZ2UtY2FjaGUgJCh0b3Bfc3JjZGlyKS9wbyAkPCBbJF1AJyAKKyAgICAgIElOVExUT09MX1hNTF9SVUxFPSclLnhtbDogICAgICAgJS54bWwuaW4gICAgICAgJChJTlRMVE9PTF9NRVJHRSkgJCh3aWxkY2FyZCAkKHRvcF9zcmNkaXIpL3BvLyoucG8pIDsgTENfQUxMPUMgJChJTlRMVE9PTF9NRVJHRSkgLXggLXUgLWMgJCh0b3BfYnVpbGRkaXIpL3BvLy5pbnRsdG9vbC1tZXJnZS1jYWNoZSAkKHRvcF9zcmNkaXIpL3BvICQ8IFskXUAnIAorICAgICAgSU5UTFRPT0xfWE1MX05PTUVSR0VfUlVMRT0nJS54bWw6ICAgICAgICUueG1sLmluICAgICAgICQoSU5UTFRPT0xfTUVSR0UpIDsgTENfQUxMPUMgJChJTlRMVE9PTF9NRVJHRSkgLXggLXUgLS1uby10cmFuc2xhdGlvbnMgJDwgWyRdQCcgCisgICAgICBJTlRMVE9PTF9YQU1fUlVMRT0nJS54YW06ICAgICAgICUueG1sLmluICAgICAgICQoSU5UTFRPT0xfTUVSR0UpICQod2lsZGNhcmQgJCh0b3Bfc3JjZGlyKS9wby8qLnBvKSA7IExDX0FMTD1DICQoSU5UTFRPT0xfTUVSR0UpIC14IC11IC1jICQodG9wX2J1aWxkZGlyKS9wby8uaW50bHRvb2wtbWVyZ2UtY2FjaGUgJCh0b3Bfc3JjZGlyKS9wbyAkPCBbJF1AJyAKKyAgICAgIElOVExUT09MX0tCRF9SVUxFPSclLmtiZDogICAgICAgJS5rYmQuaW4gICAgICAgJChJTlRMVE9PTF9NRVJHRSkgJCh3aWxkY2FyZCAkKHRvcF9zcmNkaXIpL3BvLyoucG8pIDsgTENfQUxMPUMgJChJTlRMVE9PTF9NRVJHRSkgLXggLXUgLW0gLWMgJCh0b3BfYnVpbGRkaXIpL3BvLy5pbnRsdG9vbC1tZXJnZS1jYWNoZSAkKHRvcF9zcmNkaXIpL3BvICQ8IFskXUAnIAorICAgIElOVExUT09MX0NBVkVTX1JVTEU9JyUuY2F2ZXM6ICAgICAlLmNhdmVzLmluICAgICAkKElOVExUT09MX01FUkdFKSAkKHdpbGRjYXJkICQodG9wX3NyY2RpcikvcG8vKi5wbykgOyBMQ19BTEw9QyAkKElOVExUT09MX01FUkdFKSAtZCAtdSAtYyAkKHRvcF9idWlsZGRpcikvcG8vLmludGx0b29sLW1lcmdlLWNhY2hlICQodG9wX3NyY2RpcikvcG8gJDwgWyRdQCcgCisgIElOVExUT09MX1NDSEVNQVNfUlVMRT0nJS5zY2hlbWFzOiAgICUuc2NoZW1hcy5pbiAgICQoSU5UTFRPT0xfTUVSR0UpICQod2lsZGNhcmQgJCh0b3Bfc3JjZGlyKS9wby8qLnBvKSA7IExDX0FMTD1DICQoSU5UTFRPT0xfTUVSR0UpIC1zIC11IC1jICQodG9wX2J1aWxkZGlyKS9wby8uaW50bHRvb2wtbWVyZ2UtY2FjaGUgJCh0b3Bfc3JjZGlyKS9wbyAkPCBbJF1AJyAKKyAgICBJTlRMVE9PTF9USEVNRV9SVUxFPSclLnRoZW1lOiAgICAgJS50aGVtZS5pbiAgICAgJChJTlRMVE9PTF9NRVJHRSkgJCh3aWxkY2FyZCAkKHRvcF9zcmNkaXIpL3BvLyoucG8pIDsgTENfQUxMPUMgJChJTlRMVE9PTF9NRVJHRSkgLWQgLXUgLWMgJCh0b3BfYnVpbGRkaXIpL3BvLy5pbnRsdG9vbC1tZXJnZS1jYWNoZSAkKHRvcF9zcmNkaXIpL3BvICQ8IFskXUAnIAorICAgIElOVExUT09MX1NFUlZJQ0VfUlVMRT0nJS5zZXJ2aWNlOiAlLnNlcnZpY2UuaW4gICAkKElOVExUT09MX01FUkdFKSAkKHdpbGRjYXJkICQodG9wX3NyY2RpcikvcG8vKi5wbykgOyBMQ19BTEw9QyAkKElOVExUT09MX01FUkdFKSAtZCAtdSAtYyAkKHRvcF9idWlsZGRpcikvcG8vLmludGx0b29sLW1lcmdlLWNhY2hlICQodG9wX3NyY2RpcikvcG8gJDwgWyRdQCcKKyAgIElOVExUT09MX1BPTElDWV9SVUxFPSclLnBvbGljeTogICAgJS5wb2xpY3kuaW4gICAgJChJTlRMVE9PTF9NRVJHRSkgJCh3aWxkY2FyZCAkKHRvcF9zcmNkaXIpL3BvLyoucG8pIDsgTENfQUxMPUMgJChJTlRMVE9PTF9NRVJHRSkgLXggLXUgLWMgJCh0b3BfYnVpbGRkaXIpL3BvLy5pbnRsdG9vbC1tZXJnZS1jYWNoZSAkKHRvcF9zcmNkaXIpL3BvICQ8IFskXUAnCisKK19JVF9TVUJTVChJTlRMVE9PTF9ERVNLVE9QX1JVTEUpCitfSVRfU1VCU1QoSU5UTFRPT0xfRElSRUNUT1JZX1JVTEUpCitfSVRfU1VCU1QoSU5UTFRPT0xfS0VZU19SVUxFKQorX0lUX1NVQlNUKElOVExUT09MX1BST1BfUlVMRSkKK19JVF9TVUJTVChJTlRMVE9PTF9PQUZfUlVMRSkKK19JVF9TVUJTVChJTlRMVE9PTF9QT05HX1JVTEUpCitfSVRfU1VCU1QoSU5UTFRPT0xfU0VSVkVSX1JVTEUpCitfSVRfU1VCU1QoSU5UTFRPT0xfU0hFRVRfUlVMRSkKK19JVF9TVUJTVChJTlRMVE9PTF9TT1VORExJU1RfUlVMRSkKK19JVF9TVUJTVChJTlRMVE9PTF9VSV9SVUxFKQorX0lUX1NVQlNUKElOVExUT09MX1hBTV9SVUxFKQorX0lUX1NVQlNUKElOVExUT09MX0tCRF9SVUxFKQorX0lUX1NVQlNUKElOVExUT09MX1hNTF9SVUxFKQorX0lUX1NVQlNUKElOVExUT09MX1hNTF9OT01FUkdFX1JVTEUpCitfSVRfU1VCU1QoSU5UTFRPT0xfQ0FWRVNfUlVMRSkKK19JVF9TVUJTVChJTlRMVE9PTF9TQ0hFTUFTX1JVTEUpCitfSVRfU1VCU1QoSU5UTFRPT0xfVEhFTUVfUlVMRSkKK19JVF9TVUJTVChJTlRMVE9PTF9TRVJWSUNFX1JVTEUpCitfSVRfU1VCU1QoSU5UTFRPT0xfUE9MSUNZX1JVTEUpCisKKyMgQ2hlY2sgdGhlIGdldHRleHQgdG9vbHMgdG8gbWFrZSBzdXJlIHRoZXkgYXJlIEdOVQorQUNfUEFUSF9QUk9HKFhHRVRURVhULCB4Z2V0dGV4dCkKK0FDX1BBVEhfUFJPRyhNU0dNRVJHRSwgbXNnbWVyZ2UpCitBQ19QQVRIX1BST0coTVNHRk1ULCBtc2dmbXQpCitBQ19QQVRIX1BST0coR01TR0ZNVCwgZ21zZ2ZtdCwgJE1TR0ZNVCkKK2lmIHRlc3QgLXogIiRYR0VUVEVYVCIgLW8gLXogIiRNU0dNRVJHRSIgLW8gLXogIiRNU0dGTVQiOyB0aGVuCisgICAgQUNfTVNHX0VSUk9SKFtHTlUgZ2V0dGV4dCB0b29scyBub3QgZm91bmQ7IHJlcXVpcmVkIGZvciBpbnRsdG9vbF0pCitmaQoreGd2ZXJzaW9uPSJgJFhHRVRURVhUIC0tdmVyc2lvbnxncmVwICcoR05VICcgMj4gL2Rldi9udWxsYCIKK21tdmVyc2lvbj0iYCRNU0dNRVJHRSAtLXZlcnNpb258Z3JlcCAnKEdOVSAnIDI+IC9kZXYvbnVsbGAiCittZnZlcnNpb249ImAkTVNHRk1UIC0tdmVyc2lvbnxncmVwICcoR05VICcgMj4gL2Rldi9udWxsYCIKK2lmIHRlc3QgLXogIiR4Z3ZlcnNpb24iIC1vIC16ICIkbW12ZXJzaW9uIiAtbyAteiAiJG1mdmVyc2lvbiI7IHRoZW4KKyAgICBBQ19NU0dfRVJST1IoW0dOVSBnZXR0ZXh0IHRvb2xzIG5vdCBmb3VuZDsgcmVxdWlyZWQgZm9yIGludGx0b29sXSkKK2ZpCisKK0FDX1BBVEhfUFJPRyhJTlRMVE9PTF9QRVJMLCBwZXJsKQoraWYgdGVzdCAteiAiJElOVExUT09MX1BFUkwiOyB0aGVuCisgICBBQ19NU0dfRVJST1IoW3Blcmwgbm90IGZvdW5kXSkKK2ZpCitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBwZXJsID49IDUuOC4xXSkKKyRJTlRMVE9PTF9QRVJMIC1lICJ1c2UgNS44LjE7IiA+IC9kZXYvbnVsbCAyPiYxCitpZiB0ZXN0ICQ/IC1uZSAwOyB0aGVuCisgICBBQ19NU0dfRVJST1IoW3BlcmwgNS44LjEgaXMgcmVxdWlyZWQgZm9yIGludGx0b29sXSkKK2Vsc2UKKyAgIElUX1BFUkxfVkVSU0lPTj1gJElOVExUT09MX1BFUkwgLWUgInByaW50ZiAnJXZkJywgJF5WImAKKyAgIEFDX01TR19SRVNVTFQoWyRJVF9QRVJMX1ZFUlNJT05dKQorZmkKK2lmIHRlc3QgIngkMiIgIT0gInhuby14bWwiOyB0aGVuCisgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBYTUw6OlBhcnNlcl0pCisgICBpZiBgJElOVExUT09MX1BFUkwgLWUgInJlcXVpcmUgWE1MOjpQYXJzZXIiIDI+L2Rldi9udWxsYDsgdGhlbgorICAgICAgIEFDX01TR19SRVNVTFQoW29rXSkKKyAgIGVsc2UKKyAgICAgICBBQ19NU0dfRVJST1IoW1hNTDo6UGFyc2VyIHBlcmwgbW9kdWxlIGlzIHJlcXVpcmVkIGZvciBpbnRsdG9vbF0pCisgICBmaQorZmkKKworIyBTdWJzdGl0dXRlIEFMTF9MSU5HVUFTIHNvIHdlIGNhbiB1c2UgaXQgaW4gcG8vTWFrZWZpbGUKK0FDX1NVQlNUKEFMTF9MSU5HVUFTKQorCisjIFNldCBEQVRBRElSTkFNRSBjb3JyZWN0bHkgaWYgaXQgaXMgbm90IHNldCB5ZXQKKyMgKGNvcGllZCBmcm9tIGdsaWItZ2V0dGV4dC5tNCkKK2lmIHRlc3QgLXogIiREQVRBRElSTkFNRSI7IHRoZW4KKyAgQUNfTElOS19JRkVMU0UoCisgICAgW0FDX0xBTkdfUFJPR1JBTShbW11dLAorICAgICAgICAgICAgICAgICAgICAgW1tleHRlcm4gaW50IF9ubF9tc2dfY2F0X2NudHI7CisgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfbmxfbXNnX2NhdF9jbnRyXV0pXSwKKyAgICBbREFUQURJUk5BTUU9c2hhcmVdLAorICAgIFtjYXNlICRob3N0IGluCisgICAgKi0qLXNvbGFyaXMqKQorICAgIGRubCBPbiBTb2xhcmlzLCBpZiBiaW5kX3RleHRkb21haW5fY29kZXNldCBpcyBpbiBsaWJjLAorICAgIGRubCBHTlUgZm9ybWF0IG1lc3NhZ2UgY2F0YWxvZyBpcyBhbHdheXMgc3VwcG9ydGVkLAorICAgIGRubCBzaW5jZSBib3RoIGFyZSBhZGRlZCB0byB0aGUgbGliYyBhbGwgdG9nZXRoZXIuCisgICAgZG5sIEhlbmNlLCB3ZSdkIGxpa2UgdG8gZ28gd2l0aCBEQVRBRElSTkFNRT1zaGFyZQorICAgIGRubCBpbiB0aGlzIGNhc2UuCisgICAgQUNfQ0hFQ0tfRlVOQyhiaW5kX3RleHRkb21haW5fY29kZXNldCwKKyAgICAgIFtEQVRBRElSTkFNRT1zaGFyZV0sIFtEQVRBRElSTkFNRT1saWJdKQorICAgIDs7CisgICAgKikKKyAgICBbREFUQURJUk5BTUU9bGliXQorICAgIDs7CisgICAgZXNhY10pCitmaQorQUNfU1VCU1QoREFUQURJUk5BTUUpCisKK0lUX1BPX1NVQkRJUihbcG9dKQorCitdKQorCisKKyMgSVRfUE9fU1VCRElSKERJUk5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBbGwgcG8gc3ViZGlycyBoYXZlIHRvIGJlIGRlY2xhcmVkIHdpdGggdGhpcyBtYWNybzsgdGhlIHN1YmRpciAicG8iIGlzCisjIGRlY2xhcmVkIGJ5IElUX1BST0dfSU5UTFRPT0wuCisjCitBQ19ERUZVTihbSVRfUE9fU1VCRElSXSwKK1tBQ19QUkVSRVEoWzIuNTNdKWRubCBXZSB1c2UgYWNfdG9wX3NyY2RpciBpbnNpZGUgQUNfQ09ORklHX0NPTU1BTkRTLgorZG5sCitkbmwgVGhlIGZvbGxvd2luZyBDT05GSUdfQ09NTUFORFMgc2hvdWxkIGJlIGV4ZWN1dGVkIGF0IHRoZSB2ZXJ5IGVuZAorZG5sIG9mIGNvbmZpZy5zdGF0dXMuCitBQ19DT05GSUdfQ09NTUFORFNfUFJFKFsKKyAgQUNfQ09ORklHX0NPTU1BTkRTKFskMS9zdGFtcC1pdF0sIFsKKyAgICBpZiBbICEgZ3JlcCAiXiMgSU5UTFRPT0xfTUFLRUZJTEUkIiAiJDEvTWFrZWZpbGUuaW4iID4gL2Rldi9udWxsIF07IHRoZW4KKyAgICAgICBBQ19NU0dfRVJST1IoWyQxL01ha2VmaWxlLmluLmluIHdhcyBub3QgY3JlYXRlZCBieSBpbnRsdG9vbGl6ZS5dKQorICAgIGZpCisgICAgcm0gLWYgIiQxL3N0YW1wLWl0IiAiJDEvc3RhbXAtaXQudG1wIiAiJDEvUE9URklMRVMiICIkMS9NYWtlZmlsZS50bXAiCisgICAgPiIkMS9zdGFtcC1pdC50bXAiCisgICAgW3NlZCAnL14jL2QKKwkgcy9eW1tdLipdICovLworCSAvXlsgCV0qJC9kCisJJyJzfF58CSRhY190b3Bfc3JjZGlyL3wiIFwKKyAgICAgICIkc3JjZGlyLyQxL1BPVEZJTEVTLmluIiB8IHNlZCAnJCFzLyQvIFxcLycgPiIkMS9QT1RGSUxFUyIKKyAgICBdCisgICAgW3NlZCAnL15QT1RGSUxFUyA9LywvW15cXF0kLyB7CisJCS9eUE9URklMRVMgPS8hZAorCQlyICQxL1BPVEZJTEVTCisJICB9CisJICcgIiQxL01ha2VmaWxlLmluIiA+IiQxL01ha2VmaWxlIl0KKyAgICBybSAtZiAiJDEvTWFrZWZpbGUudG1wIgorICAgIG12ICIkMS9zdGFtcC1pdC50bXAiICIkMS9zdGFtcC1pdCIKKyAgXSkKK10pZG5sCitdKQorCisjIF9JVF9TVUJTVChWQVJJQUJMRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBYnN0cmFjdCBtYWNybyB0byBkbyBlaXRoZXIgX0FNX1NVQlNUX05PVE1BS0Ugb3IgQUNfU1VCU1QKKyMKK0FDX0RFRlVOKFtfSVRfU1VCU1RdLAorWworQUNfU1VCU1QoWyQxXSkKK200X2lmZGVmKFtfQU1fU1VCU1RfTk9UTUFLRV0sIFtfQU1fU1VCU1RfTk9UTUFLRShbJDFdKV0pCitdCispCisKKyMgZGVwcmVjYXRlZCBtYWNyb3MKK0FVX0FMSUFTKFtBQ19QUk9HX0lOVExUT09MXSwgW0lUX1BST0dfSU5UTFRPT0xdKQorIyBBIGhpbnQgaXMgbmVlZGVkIGZvciBhY2xvY2FsIGZyb20gQXV0b21ha2UgPD0gMS45LjQ6CisjIEFDX0RFRlVOKFtBQ19QUk9HX0lOVExUT09MXSwgLi4uKQorCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvY29tbW9uL2ludHJvc3BlY3Rpb24ubTQgYi9hdmFoaS0wLjYuMzEvY29tbW9uL2ludHJvc3BlY3Rpb24ubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZjNTJiZQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9jb21tb24vaW50cm9zcGVjdGlvbi5tNApAQCAtMCwwICsxLDk0IEBACitkbmwgLSotIG1vZGU6IGF1dG9jb25mIC0qLQorZG5sIENvcHlyaWdodCAyMDA5IEpvaGFuIERhaGxpbgorZG5sCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBhdXRob3IocykgZ2l2ZXMgdW5saW1pdGVkCitkbmwgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKK2RubCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KK2RubAorCisjIHNlcmlhbCAxCisKK200X2RlZmluZShbX0dPQkpFQ1RfSU5UUk9TUEVDVElPTl9DSEVDS19JTlRFUk5BTF0sCitbCisgICAgQUNfQkVGT1JFKFtBQ19QUk9HX0xJQlRPT0xdLFskMF0pZG5sIHNldHVwIGxpYnRvb2wgZmlyc3QKKyAgICBBQ19CRUZPUkUoW0FNX1BST0dfTElCVE9PTF0sWyQwXSlkbmwgc2V0dXAgbGlidG9vbCBmaXJzdAorICAgIEFDX0JFRk9SRShbTFRfSU5JVF0sWyQwXSlkbmwgc2V0dXAgbGlidG9vbCBmaXJzdAorCisgICAgZG5sIGVuYWJsZS9kaXNhYmxlIGludHJvc3BlY3Rpb24KKyAgICBtNF9pZihbJDJdLCBbcmVxdWlyZV0sCisgICAgW2RubAorICAgICAgICBlbmFibGVfaW50cm9zcGVjdGlvbj15ZXMKKyAgICBdLFtkbmwKKyAgICAgICAgQUNfQVJHX0VOQUJMRShpbnRyb3NwZWN0aW9uLAorICAgICAgICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWludHJvc3BlY3Rpb25bPUA8OkBuby9hdXRvL3llc0A6PkBdXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtFbmFibGUgaW50cm9zcGVjdGlvbiBmb3IgdGhpcyBidWlsZF0pLCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlbmFibGVfaW50cm9zcGVjdGlvbj1hdXRvXSkKKyAgICBdKWRubAorCisgICAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgZ29iamVjdC1pbnRyb3NwZWN0aW9uXSkKKworICAgIGRubCBwcmVzZW5jZS92ZXJzaW9uIGNoZWNraW5nCisgICAgQVNfQ0FTRShbJGVuYWJsZV9pbnRyb3NwZWN0aW9uXSwKKyAgICBbbm9dLCBbZG5sCisgICAgICAgIGZvdW5kX2ludHJvc3BlY3Rpb249Im5vIChkaXNhYmxlZCwgdXNlIC0tZW5hYmxlLWludHJvc3BlY3Rpb24gdG8gZW5hYmxlKSIKKyAgICBdLGRubAorICAgIFt5ZXNdLFtkbmwKKyAgICAgICAgUEtHX0NIRUNLX0VYSVNUUyhbZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMF0sLAorICAgICAgICAgICAgICAgICAgICAgICAgIEFDX01TR19FUlJPUihbZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMCBpcyBub3QgaW5zdGFsbGVkXSkpCisgICAgICAgIFBLR19DSEVDS19FWElTVFMoW2dvYmplY3QtaW50cm9zcGVjdGlvbi0xLjAgPj0gJDFdLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2ludHJvc3BlY3Rpb249eWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgIEFDX01TR19FUlJPUihbWW91IG5lZWQgdG8gaGF2ZSBnb2JqZWN0LWludHJvc3BlY3Rpb24gPj0gJDEgaW5zdGFsbGVkIHRvIGJ1aWxkIEFDX1BBQ0tBR0VfTkFNRV0pKQorICAgIF0sZG5sCisgICAgW2F1dG9dLFtkbmwKKyAgICAgICAgUEtHX0NIRUNLX0VYSVNUUyhbZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMCA+PSAkMV0sIGZvdW5kX2ludHJvc3BlY3Rpb249eWVzLCBmb3VuZF9pbnRyb3NwZWN0aW9uPW5vKQorICAgIF0sZG5sCisgICAgW2RubAorICAgICAgICBBQ19NU0dfRVJST1IoW2ludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIC0tZW5hYmxlLWludHJvc3BlY3Rpb24sIHNob3VsZCBiZSBvbmUgb2YgQDw6QG5vL2F1dG8veWVzQDo+QF0pCisgICAgXSlkbmwKKworICAgIEFDX01TR19SRVNVTFQoWyRmb3VuZF9pbnRyb3NwZWN0aW9uXSkKKworICAgIElOVFJPU1BFQ1RJT05fU0NBTk5FUj0KKyAgICBJTlRST1NQRUNUSU9OX0NPTVBJTEVSPQorICAgIElOVFJPU1BFQ1RJT05fR0VORVJBVEU9CisgICAgSU5UUk9TUEVDVElPTl9HSVJESVI9CisgICAgSU5UUk9TUEVDVElPTl9UWVBFTElCRElSPQorICAgIGlmIHRlc3QgIngkZm91bmRfaW50cm9zcGVjdGlvbiIgPSAieHllcyI7IHRoZW4KKyAgICAgICBJTlRST1NQRUNUSU9OX1NDQU5ORVI9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9Z19pcl9zY2FubmVyIGdvYmplY3QtaW50cm9zcGVjdGlvbi0xLjBgCisgICAgICAgSU5UUk9TUEVDVElPTl9DT01QSUxFUj1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1nX2lyX2NvbXBpbGVyIGdvYmplY3QtaW50cm9zcGVjdGlvbi0xLjBgCisgICAgICAgSU5UUk9TUEVDVElPTl9HRU5FUkFURT1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1nX2lyX2dlbmVyYXRlIGdvYmplY3QtaW50cm9zcGVjdGlvbi0xLjBgCisgICAgICAgSU5UUk9TUEVDVElPTl9HSVJESVI9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9Z2lyZGlyIGdvYmplY3QtaW50cm9zcGVjdGlvbi0xLjBgCisgICAgICAgSU5UUk9TUEVDVElPTl9UWVBFTElCRElSPSIkKCRQS0dfQ09ORklHIC0tdmFyaWFibGU9dHlwZWxpYmRpciBnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wKSIKKyAgICAgICBJTlRST1NQRUNUSU9OX0NGTEFHUz1gJFBLR19DT05GSUcgLS1jZmxhZ3MgZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMGAKKyAgICAgICBJTlRST1NQRUNUSU9OX0xJQlM9YCRQS0dfQ09ORklHIC0tbGlicyBnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wYAorICAgICAgIElOVFJPU1BFQ1RJT05fTUFLRUZJTEU9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9ZGF0YWRpciBnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wYC9nb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wL01ha2VmaWxlLmludHJvc3BlY3Rpb24KKyAgICBmaQorICAgIEFDX1NVQlNUKElOVFJPU1BFQ1RJT05fU0NBTk5FUikKKyAgICBBQ19TVUJTVChJTlRST1NQRUNUSU9OX0NPTVBJTEVSKQorICAgIEFDX1NVQlNUKElOVFJPU1BFQ1RJT05fR0VORVJBVEUpCisgICAgQUNfU1VCU1QoSU5UUk9TUEVDVElPTl9HSVJESVIpCisgICAgQUNfU1VCU1QoSU5UUk9TUEVDVElPTl9UWVBFTElCRElSKQorICAgIEFDX1NVQlNUKElOVFJPU1BFQ1RJT05fQ0ZMQUdTKQorICAgIEFDX1NVQlNUKElOVFJPU1BFQ1RJT05fTElCUykKKyAgICBBQ19TVUJTVChJTlRST1NQRUNUSU9OX01BS0VGSUxFKQorCisgICAgQU1fQ09ORElUSU9OQUwoSEFWRV9JTlRST1NQRUNUSU9OLCB0ZXN0ICJ4JGZvdW5kX2ludHJvc3BlY3Rpb24iID0gInh5ZXMiKQorXSkKKworCitkbmwgVXNhZ2U6CitkbmwgICBHT0JKRUNUX0lOVFJPU1BFQ1RJT05fQ0hFQ0soW21pbmltdW0tZy1pLXZlcnNpb25dKQorCitBQ19ERUZVTihbR09CSkVDVF9JTlRST1NQRUNUSU9OX0NIRUNLXSwKK1sKKyAgX0dPQkpFQ1RfSU5UUk9TUEVDVElPTl9DSEVDS19JTlRFUk5BTChbJDFdKQorXSkKKworZG5sIFVzYWdlOgorZG5sICAgR09CSkVDVF9JTlRST1NQRUNUSU9OX1JFUVVJUkUoW21pbmltdW0tZy1pLXZlcnNpb25dKQorCisKK0FDX0RFRlVOKFtHT0JKRUNUX0lOVFJPU1BFQ1RJT05fUkVRVUlSRV0sCitbCisgIF9HT0JKRUNUX0lOVFJPU1BFQ1RJT05fQ0hFQ0tfSU5URVJOQUwoWyQxXSwgW3JlcXVpcmVdKQorXSkKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9jb21tb24vbGliLWxkLm00IGIvYXZhaGktMC42LjMxL2NvbW1vbi9saWItbGQubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJiMzA1MgotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9jb21tb24vbGliLWxkLm00CkBAIC0wLDAgKzEsMTEwIEBACisjIGxpYi1sZC5tNCBzZXJpYWwgNCAoZ2V0dGV4dC0wLjE4KQorZG5sIENvcHlyaWdodCAoQykgMTk5Ni0yMDAzLCAyMDA5LTIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworZG5sIFN1YnJvdXRpbmVzIG9mIGxpYnRvb2wubTQsCitkbmwgd2l0aCByZXBsYWNlbWVudHMgcy9BQ18vQUNfTElCLyBhbmQgcy9sdF9jdi9hY2xfY3YvIHRvIGF2b2lkIGNvbGxpc2lvbgorZG5sIHdpdGggbGlidG9vbC5tNC4KKworZG5sIEZyb20gbGlidG9vbC0xLjQuIFNldHMgdGhlIHZhcmlhYmxlIHdpdGhfZ251X2xkIHRvIHllcyBvciBuby4KK0FDX0RFRlVOKFtBQ19MSUJfUFJPR19MRF9HTlVdLAorW0FDX0NBQ0hFX0NIRUNLKFtpZiB0aGUgbGlua2VyICgkTEQpIGlzIEdOVSBsZF0sIFthY2xfY3ZfcHJvZ19nbnVfbGRdLAorWyMgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uIGhlcmUsIGJ1dCBhcHBhcmVudGx5IHNvbWUgR05VIGxkJ3Mgb25seSBhY2NlcHQgLXYuCitjYXNlIGAkTEQgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgorKkdOVSogfCAqJ3dpdGggQkZEJyopCisgIGFjbF9jdl9wcm9nX2dudV9sZD15ZXMgOzsKKyopCisgIGFjbF9jdl9wcm9nX2dudV9sZD1ubyA7OworZXNhY10pCit3aXRoX2dudV9sZD0kYWNsX2N2X3Byb2dfZ251X2xkCitdKQorCitkbmwgRnJvbSBsaWJ0b29sLTEuNC4gU2V0cyB0aGUgdmFyaWFibGUgTEQuCitBQ19ERUZVTihbQUNfTElCX1BST0dfTERdLAorW0FDX0FSR19XSVRIKFtnbnUtbGRdLAorWyAgLS13aXRoLWdudS1sZCAgICAgICAgICAgYXNzdW1lIHRoZSBDIGNvbXBpbGVyIHVzZXMgR05VIGxkIFtkZWZhdWx0PW5vXV0sCit0ZXN0ICIkd2l0aHZhbCIgPSBubyB8fCB3aXRoX2dudV9sZD15ZXMsIHdpdGhfZ251X2xkPW5vKQorQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCitBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCisjIFByZXBhcmUgUEFUSF9TRVBBUkFUT1IuCisjIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KK2lmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCisgIGVjaG8gIiMhIC9iaW4vc2giID5jb25mJCQuc2gKKyAgZWNobyAgImV4aXQgMCIgICA+PmNvbmYkJC5zaAorICBjaG1vZCAreCBjb25mJCQuc2gKKyAgaWYgKFBBVEg9Ii9ub25leGlzdGVudDsuIjsgY29uZiQkLnNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICBQQVRIX1NFUEFSQVRPUj0nOycKKyAgZWxzZQorICAgIFBBVEhfU0VQQVJBVE9SPToKKyAgZmkKKyAgcm0gLWYgY29uZiQkLnNoCitmaQorYWNfcHJvZz1sZAoraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgIyBDaGVjayBpZiBnY2MgLXByaW50LXByb2ctbmFtZT1sZCBnaXZlcyBhIHBhdGguCisgIEFDX01TR19DSEVDS0lORyhbZm9yIGxkIHVzZWQgYnkgR0NDXSkKKyAgY2FzZSAkaG9zdCBpbgorICAqLSotbWluZ3cqKQorICAgICMgZ2NjIGxlYXZlcyBhIHRyYWlsaW5nIGNhcnJpYWdlIHJldHVybiB3aGljaCB1cHNldHMgbWluZ3cKKyAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjUgfCB0ciAtZCAnXDAxNSdgIDs7CisgICopCisgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1YCA7OworICBlc2FjCisgIGNhc2UgJGFjX3Byb2cgaW4KKyAgICAjIEFjY2VwdCBhYnNvbHV0ZSBwYXRocy4KKyAgICBbW1xcL10qIHwgW0EtWmEtel06W1xcL10qKV0KKyAgICAgIFtyZV9kaXJlbHQ9Jy9bXi9dW14vXSovXC5cLi8nXQorICAgICAgIyBDYW5vbmljYWxpemUgdGhlIHBhdGggb2YgbGQKKyAgICAgIGFjX3Byb2c9YGVjaG8gJGFjX3Byb2d8IHNlZCAncyVcXFxcJS8lZydgCisgICAgICB3aGlsZSBlY2hvICRhY19wcm9nIHwgZ3JlcCAiJHJlX2RpcmVsdCIgPiAvZGV2L251bGwgMj4mMTsgZG8KKyAgICAgICAgYWNfcHJvZz1gZWNobyAkYWNfcHJvZ3wgc2VkICJzJSRyZV9kaXJlbHQlLyUiYAorICAgICAgZG9uZQorICAgICAgdGVzdCAteiAiJExEIiAmJiBMRD0iJGFjX3Byb2ciCisgICAgICA7OworICAiIikKKyAgICAjIElmIGl0IGZhaWxzLCB0aGVuIHByZXRlbmQgd2UgYXJlbid0IHVzaW5nIEdDQy4KKyAgICBhY19wcm9nPWxkCisgICAgOzsKKyAgKikKKyAgICAjIElmIGl0IGlzIHJlbGF0aXZlLCB0aGVuIHNlYXJjaCBmb3IgdGhlIGZpcnN0IGxkIGluIFBBVEguCisgICAgd2l0aF9nbnVfbGQ9dW5rbm93bgorICAgIDs7CisgIGVzYWMKK2VsaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBHTlUgbGRdKQorZWxzZQorICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBub24tR05VIGxkXSkKK2ZpCitBQ19DQUNIRV9WQUwoW2FjbF9jdl9wYXRoX0xEXSwKK1tpZiB0ZXN0IC16ICIkTEQiOyB0aGVuCisgIElGUz0iJHtJRlM9IAl9IjsgYWNfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSR7UEFUSF9TRVBBUkFUT1ItOn0iCisgIGZvciBhY19kaXIgaW4gJFBBVEg7IGRvCisgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICBpZiB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nIiB8fCB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nJGFjX2V4ZWV4dCI7IHRoZW4KKyAgICAgIGFjbF9jdl9wYXRoX0xEPSIkYWNfZGlyLyRhY19wcm9nIgorICAgICAgIyBDaGVjayB0byBzZWUgaWYgdGhlIHByb2dyYW0gaXMgR05VIGxkLiAgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uLAorICAgICAgIyBidXQgYXBwYXJlbnRseSBzb21lIEdOVSBsZCdzIG9ubHkgYWNjZXB0IC12LgorICAgICAgIyBCcmVhayBvbmx5IGlmIGl0IHdhcyB0aGUgR05VL25vbi1HTlUgbGQgdGhhdCB3ZSBwcmVmZXIuCisgICAgICBjYXNlIGAiJGFjbF9jdl9wYXRoX0xEIiAtdiAyPiYxIDwgL2Rldi9udWxsYCBpbgorICAgICAgKkdOVSogfCAqJ3dpdGggQkZEJyopCisgICAgICAgIHRlc3QgIiR3aXRoX2dudV9sZCIgIT0gbm8gJiYgYnJlYWsgOzsKKyAgICAgICopCisgICAgICAgIHRlc3QgIiR3aXRoX2dudV9sZCIgIT0geWVzICYmIGJyZWFrIDs7CisgICAgICBlc2FjCisgICAgZmkKKyAgZG9uZQorICBJRlM9IiRhY19zYXZlX2lmcyIKK2Vsc2UKKyAgYWNsX2N2X3BhdGhfTEQ9IiRMRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCitmaV0pCitMRD0iJGFjbF9jdl9wYXRoX0xEIgoraWYgdGVzdCAtbiAiJExEIjsgdGhlbgorICBBQ19NU0dfUkVTVUxUKFskTERdKQorZWxzZQorICBBQ19NU0dfUkVTVUxUKFtub10pCitmaQordGVzdCAteiAiJExEIiAmJiBBQ19NU0dfRVJST1IoW25vIGFjY2VwdGFibGUgbGQgZm91bmQgaW4gXCRQQVRIXSkKK0FDX0xJQl9QUk9HX0xEX0dOVQorXSkKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9jb21tb24vbGliLWxpbmsubTQgYi9hdmFoaS0wLjYuMzEvY29tbW9uL2xpYi1saW5rLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3M2JkOGUKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvY29tbW9uL2xpYi1saW5rLm00CkBAIC0wLDAgKzEsNzc0IEBACisjIGxpYi1saW5rLm00IHNlcmlhbCAyMSAoZ2V0dGV4dC0wLjE4KQorZG5sIENvcHlyaWdodCAoQykgMjAwMS0yMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK2RubCBGcm9tIEJydW5vIEhhaWJsZS4KKworQUNfUFJFUkVRKFsyLjU0XSkKKworZG5sIEFDX0xJQl9MSU5LRkxBR1MobmFtZSBbLCBkZXBlbmRlbmNpZXNdKSBzZWFyY2hlcyBmb3IgbGlibmFtZSBhbmQKK2RubCB0aGUgbGlicmFyaWVzIGNvcnJlc3BvbmRpbmcgdG8gZXhwbGljaXQgYW5kIGltcGxpY2l0IGRlcGVuZGVuY2llcy4KK2RubCBTZXRzIGFuZCBBQ19TVUJTVHMgdGhlIExJQiR7TkFNRX0gYW5kIExUTElCJHtOQU1FfSB2YXJpYWJsZXMgYW5kCitkbmwgYXVnbWVudHMgdGhlIENQUEZMQUdTIHZhcmlhYmxlLgorZG5sIFNldHMgYW5kIEFDX1NVQlNUcyB0aGUgTElCJHtOQU1FfV9QUkVGSVggdmFyaWFibGUgdG8gbm9uZW1wdHkgaWYgbGlibmFtZQorZG5sIHdhcyBmb3VuZCBpbiAke0xJQiR7TkFNRX1fUFJFRklYfS8kYWNsX2xpYmRpcnN0ZW0uCitBQ19ERUZVTihbQUNfTElCX0xJTktGTEFHU10sCitbCisgIEFDX1JFUVVJUkUoW0FDX0xJQl9QUkVQQVJFX1BSRUZJWF0pCisgIEFDX1JFUVVJUkUoW0FDX0xJQl9SUEFUSF0pCisgIHB1c2hkZWYoW05hbWVdLFt0cmFuc2xpdChbJDFdLFsuLy1dLCBbX19fXSldKQorICBwdXNoZGVmKFtOQU1FXSxbdHJhbnNsaXQoWyQxXSxbYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX19dKV0pCisgIEFDX0NBQ0hFX0NIRUNLKFtob3cgdG8gbGluayB3aXRoIGxpYltdJDFdLCBbYWNfY3ZfbGliW11OYW1lW11fbGlic10sIFsKKyAgICBBQ19MSUJfTElOS0ZMQUdTX0JPRFkoWyQxXSwgWyQyXSkKKyAgICBhY19jdl9saWJbXU5hbWVbXV9saWJzPSIkTElCW11OQU1FIgorICAgIGFjX2N2X2xpYltdTmFtZVtdX2x0bGlicz0iJExUTElCW11OQU1FIgorICAgIGFjX2N2X2xpYltdTmFtZVtdX2NwcGZsYWdzPSIkSU5DW11OQU1FIgorICAgIGFjX2N2X2xpYltdTmFtZVtdX3ByZWZpeD0iJExJQltdTkFNRVtdX1BSRUZJWCIKKyAgXSkKKyAgTElCW11OQU1FPSIkYWNfY3ZfbGliW11OYW1lW11fbGlicyIKKyAgTFRMSUJbXU5BTUU9IiRhY19jdl9saWJbXU5hbWVbXV9sdGxpYnMiCisgIElOQ1tdTkFNRT0iJGFjX2N2X2xpYltdTmFtZVtdX2NwcGZsYWdzIgorICBMSUJbXU5BTUVbXV9QUkVGSVg9IiRhY19jdl9saWJbXU5hbWVbXV9wcmVmaXgiCisgIEFDX0xJQl9BUFBFTkRUT1ZBUihbQ1BQRkxBR1NdLCBbJElOQ11OQU1FKQorICBBQ19TVUJTVChbTElCXU5BTUUpCisgIEFDX1NVQlNUKFtMVExJQl1OQU1FKQorICBBQ19TVUJTVChbTElCXU5BTUVbX1BSRUZJWF0pCisgIGRubCBBbHNvIHNldCBIQVZFX0xJQltdTkFNRSBzbyB0aGF0IEFDX0xJQl9IQVZFX0xJTktGTEFHUyBjYW4gcmV1c2UgdGhlCisgIGRubCByZXN1bHRzIG9mIHRoaXMgc2VhcmNoIHdoZW4gdGhpcyBsaWJyYXJ5IGFwcGVhcnMgYXMgYSBkZXBlbmRlbmN5LgorICBIQVZFX0xJQltdTkFNRT15ZXMKKyAgcG9wZGVmKFtOQU1FXSkKKyAgcG9wZGVmKFtOYW1lXSkKK10pCisKK2RubCBBQ19MSUJfSEFWRV9MSU5LRkxBR1MobmFtZSwgZGVwZW5kZW5jaWVzLCBpbmNsdWRlcywgdGVzdGNvZGUsIFttaXNzaW5nLW1lc3NhZ2VdKQorZG5sIHNlYXJjaGVzIGZvciBsaWJuYW1lIGFuZCB0aGUgbGlicmFyaWVzIGNvcnJlc3BvbmRpbmcgdG8gZXhwbGljaXQgYW5kCitkbmwgaW1wbGljaXQgZGVwZW5kZW5jaWVzLCB0b2dldGhlciB3aXRoIHRoZSBzcGVjaWZpZWQgaW5jbHVkZSBmaWxlcyBhbmQKK2RubCB0aGUgYWJpbGl0eSB0byBjb21waWxlIGFuZCBsaW5rIHRoZSBzcGVjaWZpZWQgdGVzdGNvZGUuIFRoZSBtaXNzaW5nLW1lc3NhZ2UKK2RubCBkZWZhdWx0cyB0byAnbm8nIGFuZCBtYXkgY29udGFpbiBhZGRpdGlvbmFsIGhpbnRzIGZvciB0aGUgdXNlci4KK2RubCBJZiBmb3VuZCwgaXQgc2V0cyBhbmQgQUNfU1VCU1RzIEhBVkVfTElCJHtOQU1FfT15ZXMgYW5kIHRoZSBMSUIke05BTUV9CitkbmwgYW5kIExUTElCJHtOQU1FfSB2YXJpYWJsZXMgYW5kIGF1Z21lbnRzIHRoZSBDUFBGTEFHUyB2YXJpYWJsZSwgYW5kCitkbmwgI2RlZmluZXMgSEFWRV9MSUIke05BTUV9IHRvIDEuIE90aGVyd2lzZSwgaXQgc2V0cyBhbmQgQUNfU1VCU1RzCitkbmwgSEFWRV9MSUIke05BTUV9PW5vIGFuZCBMSUIke05BTUV9IGFuZCBMVExJQiR7TkFNRX0gdG8gZW1wdHkuCitkbmwgU2V0cyBhbmQgQUNfU1VCU1RzIHRoZSBMSUIke05BTUV9X1BSRUZJWCB2YXJpYWJsZSB0byBub25lbXB0eSBpZiBsaWJuYW1lCitkbmwgd2FzIGZvdW5kIGluICR7TElCJHtOQU1FfV9QUkVGSVh9LyRhY2xfbGliZGlyc3RlbS4KK0FDX0RFRlVOKFtBQ19MSUJfSEFWRV9MSU5LRkxBR1NdLAorWworICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9QUkVGSVhdKQorICBBQ19SRVFVSVJFKFtBQ19MSUJfUlBBVEhdKQorICBwdXNoZGVmKFtOYW1lXSxbdHJhbnNsaXQoWyQxXSxbLi8tXSwgW19fX10pXSkKKyAgcHVzaGRlZihbTkFNRV0sW3RyYW5zbGl0KFskMV0sW2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fXSldKQorCisgIGRubCBTZWFyY2ggZm9yIGxpYltdTmFtZSBhbmQgZGVmaW5lIExJQltdTkFNRSwgTFRMSUJbXU5BTUUgYW5kIElOQ1tdTkFNRQorICBkbmwgYWNjb3JkaW5nbHkuCisgIEFDX0xJQl9MSU5LRkxBR1NfQk9EWShbJDFdLCBbJDJdKQorCisgIGRubCBBZGQgJElOQ1tdTkFNRSB0byBDUFBGTEFHUyBiZWZvcmUgcGVyZm9ybWluZyB0aGUgZm9sbG93aW5nIGNoZWNrcywKKyAgZG5sIGJlY2F1c2UgaWYgdGhlIHVzZXIgaGFzIGluc3RhbGxlZCBsaWJbXU5hbWUgYW5kIG5vdCBkaXNhYmxlZCBpdHMgdXNlCisgIGRubCB2aWEgLS13aXRob3V0LWxpYltdTmFtZS1wcmVmaXgsIGhlIHdhbnRzIHRvIHVzZSBpdC4KKyAgYWNfc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorICBBQ19MSUJfQVBQRU5EVE9WQVIoW0NQUEZMQUdTXSwgWyRJTkNdTkFNRSkKKworICBBQ19DQUNIRV9DSEVDSyhbZm9yIGxpYltdJDFdLCBbYWNfY3ZfbGliW11OYW1lXSwgWworICAgIGFjX3NhdmVfTElCUz0iJExJQlMiCisgICAgZG5sIElmICRMSUJbXU5BTUUgY29udGFpbnMgc29tZSAtbCBvcHRpb25zLCBhZGQgaXQgdG8gdGhlIGVuZCBvZiBMSUJTLAorICAgIGRubCBiZWNhdXNlIHRoZXNlIC1sIG9wdGlvbnMgbWlnaHQgcmVxdWlyZSAtTCBvcHRpb25zIHRoYXQgYXJlIHByZXNlbnQgaW4KKyAgICBkbmwgTElCUy4gLWwgb3B0aW9ucyBiZW5lZml0IG9ubHkgZnJvbSB0aGUgLUwgb3B0aW9ucyBsaXN0ZWQgYmVmb3JlIGl0LgorICAgIGRubCBPdGhlcndpc2UsIGFkZCBpdCB0byB0aGUgZnJvbnQgb2YgTElCUywgYmVjYXVzZSBpdCBtYXkgYmUgYSBzdGF0aWMKKyAgICBkbmwgbGlicmFyeSB0aGF0IGRlcGVuZHMgb24gYW5vdGhlciBzdGF0aWMgbGlicmFyeSB0aGF0IGlzIHByZXNlbnQgaW4gTElCUy4KKyAgICBkbmwgU3RhdGljIGxpYnJhcmllcyBiZW5lZml0IG9ubHkgZnJvbSB0aGUgc3RhdGljIGxpYnJhcmllcyBsaXN0ZWQgYWZ0ZXIKKyAgICBkbmwgaXQuCisgICAgY2FzZSAiICRMSUJbXU5BTUUiIGluCisgICAgICAqIiAtbCIqKSBMSUJTPSIkTElCUyAkTElCW11OQU1FIiA7OworICAgICAgKikgICAgICAgTElCUz0iJExJQltdTkFNRSAkTElCUyIgOzsKKyAgICBlc2FjCisgICAgQUNfVFJZX0xJTksoWyQzXSwgWyQ0XSwKKyAgICAgIFthY19jdl9saWJbXU5hbWU9eWVzXSwKKyAgICAgIFthY19jdl9saWJbXU5hbWU9J200X2lmKFskNV0sIFtdLCBbbm9dLCBbWyQ1XV0pJ10pCisgICAgTElCUz0iJGFjX3NhdmVfTElCUyIKKyAgXSkKKyAgaWYgdGVzdCAiJGFjX2N2X2xpYltdTmFtZSIgPSB5ZXM7IHRoZW4KKyAgICBIQVZFX0xJQltdTkFNRT15ZXMKKyAgICBBQ19ERUZJTkUoW0hBVkVfTElCXU5BTUUsIDEsIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGxpYl1bJDEgbGlicmFyeS5dKQorICAgIEFDX01TR19DSEVDS0lORyhbaG93IHRvIGxpbmsgd2l0aCBsaWJbXSQxXSkKKyAgICBBQ19NU0dfUkVTVUxUKFskTElCW11OQU1FXSkKKyAgZWxzZQorICAgIEhBVkVfTElCW11OQU1FPW5vCisgICAgZG5sIElmICRMSUJbXU5BTUUgZGlkbid0IGxlYWQgdG8gYSB1c2FibGUgbGlicmFyeSwgd2UgZG9uJ3QgbmVlZAorICAgIGRubCAkSU5DW11OQU1FIGVpdGhlci4KKyAgICBDUFBGTEFHUz0iJGFjX3NhdmVfQ1BQRkxBR1MiCisgICAgTElCW11OQU1FPQorICAgIExUTElCW11OQU1FPQorICAgIExJQltdTkFNRVtdX1BSRUZJWD0KKyAgZmkKKyAgQUNfU1VCU1QoW0hBVkVfTElCXU5BTUUpCisgIEFDX1NVQlNUKFtMSUJdTkFNRSkKKyAgQUNfU1VCU1QoW0xUTElCXU5BTUUpCisgIEFDX1NVQlNUKFtMSUJdTkFNRVtfUFJFRklYXSkKKyAgcG9wZGVmKFtOQU1FXSkKKyAgcG9wZGVmKFtOYW1lXSkKK10pCisKK2RubCBEZXRlcm1pbmUgdGhlIHBsYXRmb3JtIGRlcGVuZGVudCBwYXJhbWV0ZXJzIG5lZWRlZCB0byB1c2UgcnBhdGg6CitkbmwgICBhY2xfbGliZXh0LAorZG5sICAgYWNsX3NobGliZXh0LAorZG5sICAgYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsCitkbmwgICBhY2xfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwKK2RubCAgIGFjbF9oYXJkY29kZV9kaXJlY3QsCitkbmwgICBhY2xfaGFyZGNvZGVfbWludXNfTC4KK0FDX0RFRlVOKFtBQ19MSUJfUlBBVEhdLAorWworICBkbmwgVGVsbCBhdXRvbWFrZSA+PSAxLjEwIHRvIGNvbXBsYWluIGlmIGNvbmZpZy5ycGF0aCBpcyBtaXNzaW5nLgorICBtNF9pZmRlZihbQUNfUkVRVUlSRV9BVVhfRklMRV0sIFtBQ19SRVFVSVJFX0FVWF9GSUxFKFtjb25maWcucnBhdGhdKV0pCisgIEFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKSAgICAgICAgICAgICAgICBkbmwgd2UgdXNlICRDQywgJEdDQywgJExERkxBR1MKKyAgQUNfUkVRVUlSRShbQUNfTElCX1BST0dfTERdKSAgICAgICAgICAgIGRubCB3ZSB1c2UgJExELCAkd2l0aF9nbnVfbGQKKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKSAgICAgICAgIGRubCB3ZSB1c2UgJGhvc3QKKyAgQUNfUkVRVUlSRShbQUNfQ09ORklHX0FVWF9ESVJfREVGQVVMVF0pIGRubCB3ZSB1c2UgJGFjX2F1eF9kaXIKKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBzaGFyZWQgbGlicmFyeSBydW4gcGF0aCBvcmlnaW5dLCBbYWNsX2N2X3JwYXRoXSwgWworICAgIENDPSIkQ0MiIEdDQz0iJEdDQyIgTERGTEFHUz0iJExERkxBR1MiIExEPSIkTEQiIHdpdGhfZ251X2xkPSIkd2l0aF9nbnVfbGQiIFwKKyAgICAke0NPTkZJR19TSEVMTC0vYmluL3NofSAiJGFjX2F1eF9kaXIvY29uZmlnLnJwYXRoIiAiJGhvc3QiID4gY29uZnRlc3Quc2gKKyAgICAuIC4vY29uZnRlc3Quc2gKKyAgICBybSAtZiAuL2NvbmZ0ZXN0LnNoCisgICAgYWNsX2N2X3JwYXRoPWRvbmUKKyAgXSkKKyAgd2w9IiRhY2xfY3Zfd2wiCisgIGFjbF9saWJleHQ9IiRhY2xfY3ZfbGliZXh0IgorICBhY2xfc2hsaWJleHQ9IiRhY2xfY3Zfc2hsaWJleHQiCisgIGFjbF9saWJuYW1lX3NwZWM9IiRhY2xfY3ZfbGlibmFtZV9zcGVjIgorICBhY2xfbGlicmFyeV9uYW1lc19zcGVjPSIkYWNsX2N2X2xpYnJhcnlfbmFtZXNfc3BlYyIKKyAgYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9IiRhY2xfY3ZfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIKKyAgYWNsX2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9IiRhY2xfY3ZfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIKKyAgYWNsX2hhcmRjb2RlX2RpcmVjdD0iJGFjbF9jdl9oYXJkY29kZV9kaXJlY3QiCisgIGFjbF9oYXJkY29kZV9taW51c19MPSIkYWNsX2N2X2hhcmRjb2RlX21pbnVzX0wiCisgIGRubCBEZXRlcm1pbmUgd2hldGhlciB0aGUgdXNlciB3YW50cyBycGF0aCBoYW5kbGluZyBhdCBhbGwuCisgIEFDX0FSR19FTkFCTEUoW3JwYXRoXSwKKyAgICBbICAtLWRpc2FibGUtcnBhdGggICAgICAgICBkbyBub3QgaGFyZGNvZGUgcnVudGltZSBsaWJyYXJ5IHBhdGhzXSwKKyAgICA6LCBlbmFibGVfcnBhdGg9eWVzKQorXSkKKworZG5sIEFDX0xJQl9GUk9NUEFDS0FHRShuYW1lLCBwYWNrYWdlKQorZG5sIGRlY2xhcmVzIHRoYXQgbGlibmFtZSBjb21lcyBmcm9tIHRoZSBnaXZlbiBwYWNrYWdlLiBUaGUgY29uZmlndXJlIGZpbGUKK2RubCB3aWxsIHRoZW4gbm90IGhhdmUgYSAtLXdpdGgtbGlibmFtZS1wcmVmaXggb3B0aW9uIGJ1dCBhCitkbmwgLS13aXRoLXBhY2thZ2UtcHJlZml4IG9wdGlvbi4gU2V2ZXJhbCBsaWJyYXJpZXMgY2FuIGNvbWUgZnJvbSB0aGUgc2FtZQorZG5sIHBhY2thZ2UuIFRoaXMgZGVjbGFyYXRpb24gbXVzdCBvY2N1ciBiZWZvcmUgYW4gQUNfTElCX0xJTktGTEFHUyBvciBzaW1pbGFyCitkbmwgbWFjcm8gY2FsbCB0aGF0IHNlYXJjaGVzIGZvciBsaWJuYW1lLgorQUNfREVGVU4oW0FDX0xJQl9GUk9NUEFDS0FHRV0sCitbCisgIHB1c2hkZWYoW05BTUVdLFt0cmFuc2xpdChbJDFdLFthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fX10pXSkKKyAgZGVmaW5lKFthY2xfZnJvbXBhY2thZ2VfXU5BTUUsIFskMl0pCisgIHBvcGRlZihbTkFNRV0pCisgIHB1c2hkZWYoW1BBQ0tdLFskMl0pCisgIHB1c2hkZWYoW1BBQ0tVUF0sW3RyYW5zbGl0KFBBQ0ssW2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX19dKV0pCisgIGRlZmluZShbYWNsX2xpYnNpbnBhY2thZ2VfXVBBQ0tVUCwKKyAgICBtNF9pZmRlZihbYWNsX2xpYnNpbnBhY2thZ2VfXVBBQ0tVUCwgW2FjbF9saWJzaW5wYWNrYWdlX11QQUNLVVBbWywgXV0sKVtsaWIkMV0pCisgIHBvcGRlZihbUEFDS1VQXSkKKyAgcG9wZGVmKFtQQUNLXSkKK10pCisKK2RubCBBQ19MSUJfTElOS0ZMQUdTX0JPRFkobmFtZSBbLCBkZXBlbmRlbmNpZXNdKSBzZWFyY2hlcyBmb3IgbGlibmFtZSBhbmQKK2RubCB0aGUgbGlicmFyaWVzIGNvcnJlc3BvbmRpbmcgdG8gZXhwbGljaXQgYW5kIGltcGxpY2l0IGRlcGVuZGVuY2llcy4KK2RubCBTZXRzIHRoZSBMSUIke05BTUV9LCBMVExJQiR7TkFNRX0gYW5kIElOQyR7TkFNRX0gdmFyaWFibGVzLgorZG5sIEFsc28sIHNldHMgdGhlIExJQiR7TkFNRX1fUFJFRklYIHZhcmlhYmxlIHRvIG5vbmVtcHR5IGlmIGxpYm5hbWUgd2FzIGZvdW5kCitkbmwgaW4gJHtMSUIke05BTUV9X1BSRUZJWH0vJGFjbF9saWJkaXJzdGVtLgorQUNfREVGVU4oW0FDX0xJQl9MSU5LRkxBR1NfQk9EWV0sCitbCisgIEFDX1JFUVVJUkUoW0FDX0xJQl9QUkVQQVJFX01VTFRJTElCXSkKKyAgcHVzaGRlZihbTkFNRV0sW3RyYW5zbGl0KFskMV0sW2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fXSldKQorICBwdXNoZGVmKFtQQUNLXSxbbTRfaWZkZWYoW2FjbF9mcm9tcGFja2FnZV9dTkFNRSwgW2FjbF9mcm9tcGFja2FnZV9dTkFNRSwgbGliWyQxXSldKQorICBwdXNoZGVmKFtQQUNLVVBdLFt0cmFuc2xpdChQQUNLLFthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fXSldKQorICBwdXNoZGVmKFtQQUNLTElCU10sW200X2lmZGVmKFthY2xfZnJvbXBhY2thZ2VfXU5BTUUsIFthY2xfbGlic2lucGFja2FnZV9dUEFDS1VQLCBsaWJbJDFdKV0pCisgIGRubCBBdXRvY29uZiA+PSAyLjYxIHN1cHBvcnRzIGRvdHMgaW4gLS13aXRoIG9wdGlvbnMuCisgIHB1c2hkZWYoW1BfQV9DX0tdLFttNF9pZihtNF92ZXJzaW9uX2NvbXBhcmUobTRfZGVmbihbbTRfUEFDS0FHRV9WRVJTSU9OXSksWzIuNjFdKSxbLTFdLFt0cmFuc2xpdChQQUNLLFsuXSxbX10pXSxQQUNLKV0pCisgIGRubCBCeSBkZWZhdWx0LCBsb29rIGluICRpbmNsdWRlZGlyIGFuZCAkbGliZGlyLgorICB1c2VfYWRkaXRpb25hbD15ZXMKKyAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFsKKyAgICBldmFsIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj1cIiRpbmNsdWRlZGlyXCIKKyAgICBldmFsIGFkZGl0aW9uYWxfbGliZGlyPVwiJGxpYmRpclwiCisgIF0pCisgIEFDX0FSR19XSVRIKFBfQV9DX0tbLXByZWZpeF0sCitbWyAgLS13aXRoLV1dUF9BX0NfS1tbLXByZWZpeFs9RElSXSAgc2VhcmNoIGZvciBdUEFDS0xJQlNbIGluIERJUi9pbmNsdWRlIGFuZCBESVIvbGliCisgIC0td2l0aG91dC1dXVBfQV9DX0tbWy1wcmVmaXggICAgIGRvbid0IHNlYXJjaCBmb3IgXVBBQ0tMSUJTWyBpbiBpbmNsdWRlZGlyIGFuZCBsaWJkaXJdXSwKK1sKKyAgICBpZiB0ZXN0ICJYJHdpdGh2YWwiID0gIlhubyI7IHRoZW4KKyAgICAgIHVzZV9hZGRpdGlvbmFsPW5vCisgICAgZWxzZQorICAgICAgaWYgdGVzdCAiWCR3aXRodmFsIiA9ICJYIjsgdGhlbgorICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoWworICAgICAgICAgIGV2YWwgYWRkaXRpb25hbF9pbmNsdWRlZGlyPVwiJGluY2x1ZGVkaXJcIgorICAgICAgICAgIGV2YWwgYWRkaXRpb25hbF9saWJkaXI9XCIkbGliZGlyXCIKKyAgICAgICAgXSkKKyAgICAgIGVsc2UKKyAgICAgICAgYWRkaXRpb25hbF9pbmNsdWRlZGlyPSIkd2l0aHZhbC9pbmNsdWRlIgorICAgICAgICBhZGRpdGlvbmFsX2xpYmRpcj0iJHdpdGh2YWwvJGFjbF9saWJkaXJzdGVtIgorICAgICAgICBpZiB0ZXN0ICIkYWNsX2xpYmRpcnN0ZW0yIiAhPSAiJGFjbF9saWJkaXJzdGVtIiBcCisgICAgICAgICAgICYmICEgdGVzdCAtZCAiJHdpdGh2YWwvJGFjbF9saWJkaXJzdGVtIjsgdGhlbgorICAgICAgICAgIGFkZGl0aW9uYWxfbGliZGlyPSIkd2l0aHZhbC8kYWNsX2xpYmRpcnN0ZW0yIgorICAgICAgICBmaQorICAgICAgZmkKKyAgICBmaQorXSkKKyAgZG5sIFNlYXJjaCB0aGUgbGlicmFyeSBhbmQgaXRzIGRlcGVuZGVuY2llcyBpbiAkYWRkaXRpb25hbF9saWJkaXIgYW5kCisgIGRubCAkTERGTEFHUy4gVXNpbmcgYnJlYWR0aC1maXJzdC1zZWFjaC4KKyAgTElCW11OQU1FPQorICBMVExJQltdTkFNRT0KKyAgSU5DW11OQU1FPQorICBMSUJbXU5BTUVbXV9QUkVGSVg9CisgIGRubCBIQVZFX0xJQiR7TkFNRX0gaXMgYW4gaW5kaWNhdG9yIHRoYXQgTElCJHtOQU1FfSwgTFRMSUIke05BTUV9IGhhdmUgYmVlbgorICBkbmwgY29tcHV0ZWQuIFNvIGl0IGhhcyB0byBiZSByZXNldCBoZXJlLgorICBIQVZFX0xJQltdTkFNRT0KKyAgcnBhdGhkaXJzPQorICBsdHJwYXRoZGlycz0KKyAgbmFtZXNfYWxyZWFkeV9oYW5kbGVkPQorICBuYW1lc19uZXh0X3JvdW5kPSckMSAkMicKKyAgd2hpbGUgdGVzdCAtbiAiJG5hbWVzX25leHRfcm91bmQiOyBkbworICAgIG5hbWVzX3RoaXNfcm91bmQ9IiRuYW1lc19uZXh0X3JvdW5kIgorICAgIG5hbWVzX25leHRfcm91bmQ9CisgICAgZm9yIG5hbWUgaW4gJG5hbWVzX3RoaXNfcm91bmQ7IGRvCisgICAgICBhbHJlYWR5X2hhbmRsZWQ9CisgICAgICBmb3IgbiBpbiAkbmFtZXNfYWxyZWFkeV9oYW5kbGVkOyBkbworICAgICAgICBpZiB0ZXN0ICIkbiIgPSAiJG5hbWUiOyB0aGVuCisgICAgICAgICAgYWxyZWFkeV9oYW5kbGVkPXllcworICAgICAgICAgIGJyZWFrCisgICAgICAgIGZpCisgICAgICBkb25lCisgICAgICBpZiB0ZXN0IC16ICIkYWxyZWFkeV9oYW5kbGVkIjsgdGhlbgorICAgICAgICBuYW1lc19hbHJlYWR5X2hhbmRsZWQ9IiRuYW1lc19hbHJlYWR5X2hhbmRsZWQgJG5hbWUiCisgICAgICAgIGRubCBTZWUgaWYgaXQgd2FzIGFscmVhZHkgbG9jYXRlZCBieSBhbiBlYXJsaWVyIEFDX0xJQl9MSU5LRkxBR1MKKyAgICAgICAgZG5sIG9yIEFDX0xJQl9IQVZFX0xJTktGTEFHUyBjYWxsLgorICAgICAgICB1cHBlcm5hbWU9YGVjaG8gIiRuYW1lIiB8IHNlZCAtZSAneXxhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLXxBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fX3wnYAorICAgICAgICBldmFsIHZhbHVlPVwiXCRIQVZFX0xJQiR1cHBlcm5hbWVcIgorICAgICAgICBpZiB0ZXN0IC1uICIkdmFsdWUiOyB0aGVuCisgICAgICAgICAgaWYgdGVzdCAiJHZhbHVlIiA9IHllczsgdGhlbgorICAgICAgICAgICAgZXZhbCB2YWx1ZT1cIlwkTElCJHVwcGVybmFtZVwiCisgICAgICAgICAgICB0ZXN0IC16ICIkdmFsdWUiIHx8IExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JHZhbHVlIgorICAgICAgICAgICAgZXZhbCB2YWx1ZT1cIlwkTFRMSUIkdXBwZXJuYW1lXCIKKyAgICAgICAgICAgIHRlc3QgLXogIiR2YWx1ZSIgfHwgTFRMSUJbXU5BTUU9IiR7TFRMSUJbXU5BTUV9JHtMVExJQltdTkFNRTorIH0kdmFsdWUiCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgZG5sIEFuIGVhcmxpZXIgY2FsbCB0byBBQ19MSUJfSEFWRV9MSU5LRkxBR1MgaGFzIGRldGVybWluZWQKKyAgICAgICAgICAgIGRubCB0aGF0IHRoaXMgbGlicmFyeSBkb2Vzbid0IGV4aXN0LiBTbyBqdXN0IGRyb3AgaXQuCisgICAgICAgICAgICA6CisgICAgICAgICAgZmkKKyAgICAgICAgZWxzZQorICAgICAgICAgIGRubCBTZWFyY2ggdGhlIGxpYnJhcnkgbGliJG5hbWUgaW4gJGFkZGl0aW9uYWxfbGliZGlyIGFuZCAkTERGTEFHUworICAgICAgICAgIGRubCBhbmQgdGhlIGFscmVhZHkgY29uc3RydWN0ZWQgJExJQk5BTUUvJExUTElCTkFNRS4KKyAgICAgICAgICBmb3VuZF9kaXI9CisgICAgICAgICAgZm91bmRfbGE9CisgICAgICAgICAgZm91bmRfc289CisgICAgICAgICAgZm91bmRfYT0KKyAgICAgICAgICBldmFsIGxpYm5hbWU9XCIkYWNsX2xpYm5hbWVfc3BlY1wiICAgICMgdHlwaWNhbGx5OiBsaWJuYW1lPWxpYiRuYW1lCisgICAgICAgICAgaWYgdGVzdCAtbiAiJGFjbF9zaGxpYmV4dCI7IHRoZW4KKyAgICAgICAgICAgIHNocmV4dD0iLiRhY2xfc2hsaWJleHQiICAgICAgICAgICAgICMgdHlwaWNhbGx5OiBzaHJleHQ9LnNvCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgc2hyZXh0PQorICAgICAgICAgIGZpCisgICAgICAgICAgaWYgdGVzdCAkdXNlX2FkZGl0aW9uYWwgPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgIGRpcj0iJGFkZGl0aW9uYWxfbGliZGlyIgorICAgICAgICAgICAgZG5sIFRoZSBzYW1lIGNvZGUgYXMgaW4gdGhlIGxvb3AgYmVsb3c6CisgICAgICAgICAgICBkbmwgRmlyc3QgbG9vayBmb3IgYSBzaGFyZWQgbGlicmFyeS4KKyAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY2xfc2hsaWJleHQiOyB0aGVuCisgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUkc2hyZXh0IjsgdGhlbgorICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKyAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kbGlibmFtZSRzaHJleHQiCisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkYWNsX2xpYnJhcnlfbmFtZXNfc3BlYyIgPSAnJGxpYm5hbWUkc2hyZXh0JHZlcnN1ZmZpeCc7IHRoZW4KKyAgICAgICAgICAgICAgICAgIHZlcj1gKGNkICIkZGlyIiAmJiBcCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiAiJGxpYm5hbWUkc2hyZXh0Ii4qOyBkbyBlY2hvICIkZiI7IGRvbmUgXAorICAgICAgICAgICAgICAgICAgICAgICAgfCBzZWQgLWUgInMsXiRsaWJuYW1lJHNocmV4dFxcXFwuLCwiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgc29ydCAtdCAnLicgLW4gLXIgLWsxLDEgLWsyLDIgLWszLDMgLWs0LDQgLWs1LDUgXAorICAgICAgICAgICAgICAgICAgICAgICAgfCBzZWQgMXEgKSAyPi9kZXYvbnVsbGAKKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiR2ZXIiICYmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUkc2hyZXh0LiR2ZXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKyAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGxpYm5hbWUkc2hyZXh0LiR2ZXIiCisgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIGV2YWwgbGlicmFyeV9uYW1lcz1cIiRhY2xfbGlicmFyeV9uYW1lc19zcGVjXCIKKyAgICAgICAgICAgICAgICAgIGZvciBmIGluICRsaWJyYXJ5X25hbWVzOyBkbworICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRmIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kZiIKKyAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgZG5sIFRoZW4gbG9vayBmb3IgYSBzdGF0aWMgbGlicmFyeS4KKyAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiA9ICJYIjsgdGhlbgorICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lLiRhY2xfbGliZXh0IjsgdGhlbgorICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKyAgICAgICAgICAgICAgICBmb3VuZF9hPSIkZGlyLyRsaWJuYW1lLiRhY2xfbGliZXh0IgorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiAhPSAiWCI7IHRoZW4KKyAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZS5sYSI7IHRoZW4KKyAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGRpci8kbGlibmFtZS5sYSIKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgZmkKKyAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWCI7IHRoZW4KKyAgICAgICAgICAgIGZvciB4IGluICRMREZMQUdTICRMVExJQltdTkFNRTsgZG8KKyAgICAgICAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKKyAgICAgICAgICAgICAgY2FzZSAiJHgiIGluCisgICAgICAgICAgICAgICAgLUwqKQorICAgICAgICAgICAgICAgICAgZGlyPWBlY2hvICJYJHgiIHwgc2VkIC1lICdzL15YLUwvLydgCisgICAgICAgICAgICAgICAgICBkbmwgRmlyc3QgbG9vayBmb3IgYSBzaGFyZWQgbGlicmFyeS4KKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY2xfc2hsaWJleHQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUkc2hyZXh0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kbGlibmFtZSRzaHJleHQiCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkYWNsX2xpYnJhcnlfbmFtZXNfc3BlYyIgPSAnJGxpYm5hbWUkc2hyZXh0JHZlcnN1ZmZpeCc7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcj1gKGNkICIkZGlyIiAmJiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiAiJGxpYm5hbWUkc2hyZXh0Ii4qOyBkbyBlY2hvICIkZiI7IGRvbmUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZWQgLWUgInMsXiRsaWJuYW1lJHNocmV4dFxcXFwuLCwiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc29ydCAtdCAnLicgLW4gLXIgLWsxLDEgLWsyLDIgLWszLDMgLWs0LDQgLWs1LDUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZWQgMXEgKSAyPi9kZXYvbnVsbGAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiR2ZXIiICYmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUkc2hyZXh0LiR2ZXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGxpYm5hbWUkc2hyZXh0LiR2ZXIiCisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwgbGlicmFyeV9uYW1lcz1cIiRhY2xfbGlicmFyeV9uYW1lc19zcGVjXCIKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmIGluICRsaWJyYXJ5X25hbWVzOyBkbworICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRmIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kZiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgZG5sIFRoZW4gbG9vayBmb3IgYSBzdGF0aWMgbGlicmFyeS4KKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiA9ICJYIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lLiRhY2xfbGliZXh0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9hPSIkZGlyLyRsaWJuYW1lLiRhY2xfbGliZXh0IgorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiAhPSAiWCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZS5sYSI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGRpci8kbGlibmFtZS5sYSIKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiAhPSAiWCI7IHRoZW4KKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZG9uZQorICAgICAgICAgIGZpCisgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiICE9ICJYIjsgdGhlbgorICAgICAgICAgICAgZG5sIEZvdW5kIHRoZSBsaWJyYXJ5LgorICAgICAgICAgICAgTFRMSUJbXU5BTUU9IiR7TFRMSUJbXU5BTUV9JHtMVExJQltdTkFNRTorIH0tTCRmb3VuZF9kaXIgLWwkbmFtZSIKKyAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfc28iICE9ICJYIjsgdGhlbgorICAgICAgICAgICAgICBkbmwgTGlua2luZyB3aXRoIGEgc2hhcmVkIGxpYnJhcnkuIFdlIGF0dGVtcHQgdG8gaGFyZGNvZGUgaXRzCisgICAgICAgICAgICAgIGRubCBkaXJlY3RvcnkgaW50byB0aGUgZXhlY3V0YWJsZSdzIHJ1bnBhdGgsIHVubGVzcyBpdCdzIHRoZQorICAgICAgICAgICAgICBkbmwgc3RhbmRhcmQgL3Vzci9saWIuCisgICAgICAgICAgICAgIGlmIHRlc3QgIiRlbmFibGVfcnBhdGgiID0gbm8gXAorICAgICAgICAgICAgICAgICB8fCB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWC91c3IvJGFjbF9saWJkaXJzdGVtIiBcCisgICAgICAgICAgICAgICAgIHx8IHRlc3QgIlgkZm91bmRfZGlyIiA9ICJYL3Vzci8kYWNsX2xpYmRpcnN0ZW0yIjsgdGhlbgorICAgICAgICAgICAgICAgIGRubCBObyBoYXJkY29kaW5nIGlzIG5lZWRlZC4KKyAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmb3VuZF9zbyIKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGRubCBVc2UgYW4gZXhwbGljaXQgb3B0aW9uIHRvIGhhcmRjb2RlIERJUiBpbnRvIHRoZSByZXN1bHRpbmcKKyAgICAgICAgICAgICAgICBkbmwgYmluYXJ5LgorICAgICAgICAgICAgICAgIGRubCBQb3RlbnRpYWxseSBhZGQgRElSIHRvIGx0cnBhdGhkaXJzLgorICAgICAgICAgICAgICAgIGRubCBUaGUgbHRycGF0aGRpcnMgd2lsbCBiZSBhcHBlbmRlZCB0byAkTFRMSUJOQU1FIGF0IHRoZSBlbmQuCisgICAgICAgICAgICAgICAgaGF2ZWl0PQorICAgICAgICAgICAgICAgIGZvciB4IGluICRsdHJwYXRoZGlyczsgZG8KKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRmb3VuZF9kaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICBsdHJwYXRoZGlycz0iJGx0cnBhdGhkaXJzICRmb3VuZF9kaXIiCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBkbmwgVGhlIGhhcmRjb2RpbmcgaW50byAkTElCTkFNRSBpcyBzeXN0ZW0gZGVwZW5kZW50LgorICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRhY2xfaGFyZGNvZGVfZGlyZWN0IiA9IHllczsgdGhlbgorICAgICAgICAgICAgICAgICAgZG5sIFVzaW5nIERJUi9saWJOQU1FLnNvIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKKyAgICAgICAgICAgICAgICAgIGRubCByZXN1bHRpbmcgYmluYXJ5LgorICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZm91bmRfc28iCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJGFjbF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIiAmJiB0ZXN0ICIkYWNsX2hhcmRjb2RlX21pbnVzX0wiID0gbm87IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgZG5sIFVzZSBhbiBleHBsaWNpdCBvcHRpb24gdG8gaGFyZGNvZGUgRElSIGludG8gdGhlIHJlc3VsdGluZworICAgICAgICAgICAgICAgICAgICBkbmwgYmluYXJ5LgorICAgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmb3VuZF9zbyIKKyAgICAgICAgICAgICAgICAgICAgZG5sIFBvdGVudGlhbGx5IGFkZCBESVIgdG8gcnBhdGhkaXJzLgorICAgICAgICAgICAgICAgICAgICBkbmwgVGhlIHJwYXRoZGlycyB3aWxsIGJlIGFwcGVuZGVkIHRvICRMSUJOQU1FIGF0IHRoZSBlbmQuCisgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKyAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJHJwYXRoZGlyczsgZG8KKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZm91bmRfZGlyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgcnBhdGhkaXJzPSIkcnBhdGhkaXJzICRmb3VuZF9kaXIiCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGRubCBSZWx5IG9uICItTCRmb3VuZF9kaXIiLgorICAgICAgICAgICAgICAgICAgICBkbmwgQnV0IGRvbid0IGFkZCBpdCBpZiBpdCdzIGFscmVhZHkgY29udGFpbmVkIGluIHRoZSBMREZMQUdTCisgICAgICAgICAgICAgICAgICAgIGRubCBvciB0aGUgYWxyZWFkeSBjb25zdHJ1Y3RlZCAkTElCTkFNRQorICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRMREZMQUdTICRMSUJbXU5BTUU7IGRvCisgICAgICAgICAgICAgICAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtTCRmb3VuZF9kaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfS1MJGZvdW5kX2RpciIKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGFjbF9oYXJkY29kZV9taW51c19MIiAhPSBubzsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIGRubCBGSVhNRTogTm90IHN1cmUgd2hldGhlciB3ZSBzaG91bGQgdXNlCisgICAgICAgICAgICAgICAgICAgICAgZG5sICItTCRmb3VuZF9kaXIgLWwkbmFtZSIgb3IgIi1MJGZvdW5kX2RpciAkZm91bmRfc28iCisgICAgICAgICAgICAgICAgICAgICAgZG5sIGhlcmUuCisgICAgICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZm91bmRfc28iCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICBkbmwgV2UgY2Fubm90IHVzZSAkYWNsX2hhcmRjb2RlX3J1bnBhdGhfdmFyIGFuZCBMRF9SVU5fUEFUSAorICAgICAgICAgICAgICAgICAgICAgIGRubCBoZXJlLCBiZWNhdXNlIHRoaXMgZG9lc24ndCBmaXQgaW4gZmxhZ3MgcGFzc2VkIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgIGRubCBjb21waWxlci4gU28gZ2l2ZSB1cC4gTm8gaGFyZGNvZGluZy4gVGhpcyBhZmZlY3RzIG9ubHkKKyAgICAgICAgICAgICAgICAgICAgICBkbmwgdmVyeSBvbGQgc3lzdGVtcy4KKyAgICAgICAgICAgICAgICAgICAgICBkbmwgRklYTUU6IE5vdCBzdXJlIHdoZXRoZXIgd2Ugc2hvdWxkIHVzZQorICAgICAgICAgICAgICAgICAgICAgIGRubCAiLUwkZm91bmRfZGlyIC1sJG5hbWUiIG9yICItTCRmb3VuZF9kaXIgJGZvdW5kX3NvIgorICAgICAgICAgICAgICAgICAgICAgIGRubCBoZXJlLgorICAgICAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9LWwkbmFtZSIKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9hIiAhPSAiWCI7IHRoZW4KKyAgICAgICAgICAgICAgICBkbmwgTGlua2luZyB3aXRoIGEgc3RhdGljIGxpYnJhcnkuCisgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZm91bmRfYSIKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGRubCBXZSBzaG91bGRuJ3QgY29tZSBoZXJlLCBidXQgYW55d2F5IGl0J3MgZ29vZCB0byBoYXZlIGEKKyAgICAgICAgICAgICAgICBkbmwgZmFsbGJhY2suCisgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0tTCRmb3VuZF9kaXIgLWwkbmFtZSIKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBkbmwgQXNzdW1lIHRoZSBpbmNsdWRlIGZpbGVzIGFyZSBuZWFyYnkuCisgICAgICAgICAgICBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9CisgICAgICAgICAgICBjYXNlICIkZm91bmRfZGlyIiBpbgorICAgICAgICAgICAgICAqLyRhY2xfbGliZGlyc3RlbSB8ICovJGFjbF9saWJkaXJzdGVtLykKKyAgICAgICAgICAgICAgICBiYXNlZGlyPWBlY2hvICJYJGZvdW5kX2RpciIgfCBzZWQgLWUgJ3MsXlgsLCcgLWUgInMsLyRhY2xfbGliZGlyc3RlbS8iJyokLCwnYAorICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRuYW1lIiA9ICckMSc7IHRoZW4KKyAgICAgICAgICAgICAgICAgIExJQltdTkFNRVtdX1BSRUZJWD0iJGJhc2VkaXIiCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9IiRiYXNlZGlyL2luY2x1ZGUiCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgKi8kYWNsX2xpYmRpcnN0ZW0yIHwgKi8kYWNsX2xpYmRpcnN0ZW0yLykKKyAgICAgICAgICAgICAgICBiYXNlZGlyPWBlY2hvICJYJGZvdW5kX2RpciIgfCBzZWQgLWUgJ3MsXlgsLCcgLWUgInMsLyRhY2xfbGliZGlyc3RlbTIvIicqJCwsJ2AKKyAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkbmFtZSIgPSAnJDEnOyB0aGVuCisgICAgICAgICAgICAgICAgICBMSUJbXU5BTUVbXV9QUkVGSVg9IiRiYXNlZGlyIgorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgYWRkaXRpb25hbF9pbmNsdWRlZGlyPSIkYmFzZWRpci9pbmNsdWRlIgorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIgIT0gIlgiOyB0aGVuCisgICAgICAgICAgICAgIGRubCBQb3RlbnRpYWxseSBhZGQgJGFkZGl0aW9uYWxfaW5jbHVkZWRpciB0byAkSU5DTkFNRS4KKyAgICAgICAgICAgICAgZG5sIEJ1dCBkb24ndCBhZGQgaXQKKyAgICAgICAgICAgICAgZG5sICAgMS4gaWYgaXQncyB0aGUgc3RhbmRhcmQgL3Vzci9pbmNsdWRlLAorICAgICAgICAgICAgICBkbmwgICAyLiBpZiBpdCdzIC91c3IvbG9jYWwvaW5jbHVkZSBhbmQgd2UgYXJlIHVzaW5nIEdDQyBvbiBMaW51eCwKKyAgICAgICAgICAgICAgZG5sICAgMy4gaWYgaXQncyBhbHJlYWR5IHByZXNlbnQgaW4gJENQUEZMQUdTIG9yIHRoZSBhbHJlYWR5CisgICAgICAgICAgICAgIGRubCAgICAgIGNvbnN0cnVjdGVkICRJTkNOQU1FLAorICAgICAgICAgICAgICBkbmwgICA0LiBpZiBpdCBkb2Vzbid0IGV4aXN0IGFzIGEgZGlyZWN0b3J5LgorICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIgIT0gIlgvdXNyL2luY2x1ZGUiOyB0aGVuCisgICAgICAgICAgICAgICAgaGF2ZWl0PQorICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiA9ICJYL3Vzci9sb2NhbC9pbmNsdWRlIjsgdGhlbgorICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJEdDQyI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgICAgICAgICAgICAgICAgIGxpbnV4KiB8IGdudSogfCBrKmJzZCotZ251KSBoYXZlaXQ9eWVzOzsKKyAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkQ1BQRkxBR1MgJElOQ1tdTkFNRTsgZG8KKyAgICAgICAgICAgICAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUkkYWRkaXRpb25hbF9pbmNsdWRlZGlyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZCAiJGFkZGl0aW9uYWxfaW5jbHVkZWRpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICBkbmwgUmVhbGx5IGFkZCAkYWRkaXRpb25hbF9pbmNsdWRlZGlyIHRvICRJTkNOQU1FLgorICAgICAgICAgICAgICAgICAgICAgIElOQ1tdTkFNRT0iJHtJTkNbXU5BTUV9JHtJTkNbXU5BTUU6KyB9LUkkYWRkaXRpb25hbF9pbmNsdWRlZGlyIgorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGRubCBMb29rIGZvciBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICBpZiB0ZXN0IC1uICIkZm91bmRfbGEiOyB0aGVuCisgICAgICAgICAgICAgIGRubCBSZWFkIHRoZSAubGEgZmlsZS4gSXQgZGVmaW5lcyB0aGUgdmFyaWFibGVzCisgICAgICAgICAgICAgIGRubCBkbG5hbWUsIGxpYnJhcnlfbmFtZXMsIG9sZF9saWJyYXJ5LCBkZXBlbmRlbmN5X2xpYnMsIGN1cnJlbnQsCisgICAgICAgICAgICAgIGRubCBhZ2UsIHJldmlzaW9uLCBpbnN0YWxsZWQsIGRsb3BlbiwgZGxwcmVvcGVuLCBsaWJkaXIuCisgICAgICAgICAgICAgIHNhdmVfbGliZGlyPSIkbGliZGlyIgorICAgICAgICAgICAgICBjYXNlICIkZm91bmRfbGEiIGluCisgICAgICAgICAgICAgICAgKi8qIHwgKlxcKikgLiAiJGZvdW5kX2xhIiA7OworICAgICAgICAgICAgICAgICopIC4gIi4vJGZvdW5kX2xhIiA7OworICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgIGxpYmRpcj0iJHNhdmVfbGliZGlyIgorICAgICAgICAgICAgICBkbmwgV2UgdXNlIG9ubHkgZGVwZW5kZW5jeV9saWJzLgorICAgICAgICAgICAgICBmb3IgZGVwIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisgICAgICAgICAgICAgICAgY2FzZSAiJGRlcCIgaW4KKyAgICAgICAgICAgICAgICAgIC1MKikKKyAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbF9saWJkaXI9YGVjaG8gIlgkZGVwIiB8IHNlZCAtZSAncy9eWC1MLy8nYAorICAgICAgICAgICAgICAgICAgICBkbmwgUG90ZW50aWFsbHkgYWRkICRhZGRpdGlvbmFsX2xpYmRpciB0byAkTElCTkFNRSBhbmQgJExUTElCTkFNRS4KKyAgICAgICAgICAgICAgICAgICAgZG5sIEJ1dCBkb24ndCBhZGQgaXQKKyAgICAgICAgICAgICAgICAgICAgZG5sICAgMS4gaWYgaXQncyB0aGUgc3RhbmRhcmQgL3Vzci9saWIsCisgICAgICAgICAgICAgICAgICAgIGRubCAgIDIuIGlmIGl0J3MgL3Vzci9sb2NhbC9saWIgYW5kIHdlIGFyZSB1c2luZyBHQ0Mgb24gTGludXgsCisgICAgICAgICAgICAgICAgICAgIGRubCAgIDMuIGlmIGl0J3MgYWxyZWFkeSBwcmVzZW50IGluICRMREZMQUdTIG9yIHRoZSBhbHJlYWR5CisgICAgICAgICAgICAgICAgICAgIGRubCAgICAgIGNvbnN0cnVjdGVkICRMSUJOQU1FLAorICAgICAgICAgICAgICAgICAgICBkbmwgICA0LiBpZiBpdCBkb2Vzbid0IGV4aXN0IGFzIGEgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiAhPSAiWC91c3IvJGFjbF9saWJkaXJzdGVtIiBcCisgICAgICAgICAgICAgICAgICAgICAgICYmIHRlc3QgIlgkYWRkaXRpb25hbF9saWJkaXIiICE9ICJYL3Vzci8kYWNsX2xpYmRpcnN0ZW0yIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiA9ICJYL3Vzci9sb2NhbC8kYWNsX2xpYmRpcnN0ZW0iIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICB8fCB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiA9ICJYL3Vzci9sb2NhbC8kYWNsX2xpYmRpcnN0ZW0yIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJEdDQyI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbnV4KiB8IGdudSogfCBrKmJzZCotZ251KSBoYXZlaXQ9eWVzOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTElCW11OQU1FOyBkbworICAgICAgICAgICAgICAgICAgICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtTCRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbmwgUmVhbGx5IGFkZCAkYWRkaXRpb25hbF9saWJkaXIgdG8gJExJQk5BTUUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0tTCRhZGRpdGlvbmFsX2xpYmRpciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTFRMSUJbXU5BTUU7IGRvCisgICAgICAgICAgICAgICAgICAgICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbZXZhbCB4PVwiJHhcIl0pCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1MJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZCAiJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRubCBSZWFsbHkgYWRkICRhZGRpdGlvbmFsX2xpYmRpciB0byAkTFRMSUJOQU1FLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUTElCW11OQU1FPSIke0xUTElCW11OQU1FfSR7TFRMSUJbXU5BTUU6KyB9LUwkYWRkaXRpb25hbF9saWJkaXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAtUiopCisgICAgICAgICAgICAgICAgICAgIGRpcj1gZWNobyAiWCRkZXAiIHwgc2VkIC1lICdzL15YLVIvLydgCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRlbmFibGVfcnBhdGgiICE9IG5vOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgZG5sIFBvdGVudGlhbGx5IGFkZCBESVIgdG8gcnBhdGhkaXJzLgorICAgICAgICAgICAgICAgICAgICAgIGRubCBUaGUgcnBhdGhkaXJzIHdpbGwgYmUgYXBwZW5kZWQgdG8gJExJQk5BTUUgYXQgdGhlIGVuZC4KKyAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJHJwYXRoZGlyczsgZG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRkaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBycGF0aGRpcnM9IiRycGF0aGRpcnMgJGRpciIKKyAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgIGRubCBQb3RlbnRpYWxseSBhZGQgRElSIHRvIGx0cnBhdGhkaXJzLgorICAgICAgICAgICAgICAgICAgICAgIGRubCBUaGUgbHRycGF0aGRpcnMgd2lsbCBiZSBhcHBlbmRlZCB0byAkTFRMSUJOQU1FIGF0IHRoZSBlbmQuCisgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorICAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRsdHJwYXRoZGlyczsgZG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRkaXIiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBsdHJwYXRoZGlycz0iJGx0cnBhdGhkaXJzICRkaXIiCisgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgIC1sKikKKyAgICAgICAgICAgICAgICAgICAgZG5sIEhhbmRsZSB0aGlzIGluIHRoZSBuZXh0IHJvdW5kLgorICAgICAgICAgICAgICAgICAgICBuYW1lc19uZXh0X3JvdW5kPSIkbmFtZXNfbmV4dF9yb3VuZCAiYGVjaG8gIlgkZGVwIiB8IHNlZCAtZSAncy9eWC1sLy8nYAorICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgKi5sYSkKKyAgICAgICAgICAgICAgICAgICAgZG5sIEhhbmRsZSB0aGlzIGluIHRoZSBuZXh0IHJvdW5kLiBUaHJvdyBhd2F5IHRoZSAubGEncworICAgICAgICAgICAgICAgICAgICBkbmwgZGlyZWN0b3J5OyBpdCBpcyBhbHJlYWR5IGNvbnRhaW5lZCBpbiBhIHByZWNlZGluZyAtTAorICAgICAgICAgICAgICAgICAgICBkbmwgb3B0aW9uLgorICAgICAgICAgICAgICAgICAgICBuYW1lc19uZXh0X3JvdW5kPSIkbmFtZXNfbmV4dF9yb3VuZCAiYGVjaG8gIlgkZGVwIiB8IHNlZCAtZSAncyxeWC4qLywsJyAtZSAncyxebGliLCwnIC1lICdzLFwubGEkLCwnYAorICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICAgICAgZG5sIE1vc3QgbGlrZWx5IGFuIGltbWVkaWF0ZSBsaWJyYXJ5IG5hbWUuCisgICAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGRlcCIKKyAgICAgICAgICAgICAgICAgICAgTFRMSUJbXU5BTUU9IiR7TFRMSUJbXU5BTUV9JHtMVExJQltdTkFNRTorIH0kZGVwIgorICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgZmkKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBkbmwgRGlkbid0IGZpbmQgdGhlIGxpYnJhcnk7IGFzc3VtZSBpdCBpcyBpbiB0aGUgc3lzdGVtIGRpcmVjdG9yaWVzCisgICAgICAgICAgICBkbmwga25vd24gdG8gdGhlIGxpbmtlciBhbmQgcnVudGltZSBsb2FkZXIuIChBbGwgdGhlIHN5c3RlbQorICAgICAgICAgICAgZG5sIGRpcmVjdG9yaWVzIGtub3duIHRvIHRoZSBsaW5rZXIgc2hvdWxkIGFsc28gYmUga25vd24gdG8gdGhlCisgICAgICAgICAgICBkbmwgcnVudGltZSBsb2FkZXIsIG90aGVyd2lzZSB0aGUgc3lzdGVtIGlzIHNldmVyZWx5IG1pc2NvbmZpZ3VyZWQuKQorICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0tbCRuYW1lIgorICAgICAgICAgICAgTFRMSUJbXU5BTUU9IiR7TFRMSUJbXU5BTUV9JHtMVExJQltdTkFNRTorIH0tbCRuYW1lIgorICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICBmaQorICAgIGRvbmUKKyAgZG9uZQorICBpZiB0ZXN0ICJYJHJwYXRoZGlycyIgIT0gIlgiOyB0aGVuCisgICAgaWYgdGVzdCAtbiAiJGFjbF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgorICAgICAgZG5sIFdlaXJkIHBsYXRmb3JtOiBvbmx5IHRoZSBsYXN0IC1ycGF0aCBvcHRpb24gY291bnRzLCB0aGUgdXNlciBtdXN0CisgICAgICBkbmwgcGFzcyBhbGwgcGF0aCBlbGVtZW50cyBpbiBvbmUgb3B0aW9uLiBXZSBjYW4gYXJyYW5nZSB0aGF0IGZvciBhCisgICAgICBkbmwgc2luZ2xlIGxpYnJhcnksIGJ1dCBub3Qgd2hlbiBtb3JlIHRoYW4gb25lICRMSUJOQU1FcyBhcmUgdXNlZC4KKyAgICAgIGFsbGRpcnM9CisgICAgICBmb3IgZm91bmRfZGlyIGluICRycGF0aGRpcnM7IGRvCisgICAgICAgIGFsbGRpcnM9IiR7YWxsZGlyc30ke2FsbGRpcnM6KyRhY2xfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcn0kZm91bmRfZGlyIgorICAgICAgZG9uZQorICAgICAgZG5sIE5vdGU6IGFjbF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIHVzZXMgJGxpYmRpciBhbmQgJHdsLgorICAgICAgYWNsX3NhdmVfbGliZGlyPSIkbGliZGlyIgorICAgICAgbGliZGlyPSIkYWxsZGlycyIKKyAgICAgIGV2YWwgZmxhZz1cIiRhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisgICAgICBsaWJkaXI9IiRhY2xfc2F2ZV9saWJkaXIiCisgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmbGFnIgorICAgIGVsc2UKKyAgICAgIGRubCBUaGUgLXJwYXRoIG9wdGlvbnMgYXJlIGN1bXVsYXRpdmUuCisgICAgICBmb3IgZm91bmRfZGlyIGluICRycGF0aGRpcnM7IGRvCisgICAgICAgIGFjbF9zYXZlX2xpYmRpcj0iJGxpYmRpciIKKyAgICAgICAgbGliZGlyPSIkZm91bmRfZGlyIgorICAgICAgICBldmFsIGZsYWc9XCIkYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorICAgICAgICBsaWJkaXI9IiRhY2xfc2F2ZV9saWJkaXIiCisgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZsYWciCisgICAgICBkb25lCisgICAgZmkKKyAgZmkKKyAgaWYgdGVzdCAiWCRsdHJwYXRoZGlycyIgIT0gIlgiOyB0aGVuCisgICAgZG5sIFdoZW4gdXNpbmcgbGlidG9vbCwgdGhlIG9wdGlvbiB0aGF0IHdvcmtzIGZvciBib3RoIGxpYnJhcmllcyBhbmQKKyAgICBkbmwgZXhlY3V0YWJsZXMgaXMgLVIuIFRoZSAtUiBvcHRpb25zIGFyZSBjdW11bGF0aXZlLgorICAgIGZvciBmb3VuZF9kaXIgaW4gJGx0cnBhdGhkaXJzOyBkbworICAgICAgTFRMSUJbXU5BTUU9IiR7TFRMSUJbXU5BTUV9JHtMVExJQltdTkFNRTorIH0tUiRmb3VuZF9kaXIiCisgICAgZG9uZQorICBmaQorICBwb3BkZWYoW1BfQV9DX0tdKQorICBwb3BkZWYoW1BBQ0tMSUJTXSkKKyAgcG9wZGVmKFtQQUNLVVBdKQorICBwb3BkZWYoW1BBQ0tdKQorICBwb3BkZWYoW05BTUVdKQorXSkKKworZG5sIEFDX0xJQl9BUFBFTkRUT1ZBUihWQVIsIENPTlRFTlRTKSBhcHBlbmRzIHRoZSBlbGVtZW50cyBvZiBDT05URU5UUyB0byBWQVIsCitkbmwgdW5sZXNzIGFscmVhZHkgcHJlc2VudCBpbiBWQVIuCitkbmwgV29ya3Mgb25seSBmb3IgQ1BQRkxBR1MsIG5vdCBmb3IgTElCKiB2YXJpYWJsZXMgYmVjYXVzZSB0aGF0IHNvbWV0aW1lcworZG5sIGNvbnRhaW5zIHR3byBvciB0aHJlZSBjb25zZWN1dGl2ZSBlbGVtZW50cyB0aGF0IGJlbG9uZyB0b2dldGhlci4KK0FDX0RFRlVOKFtBQ19MSUJfQVBQRU5EVE9WQVJdLAorWworICBmb3IgZWxlbWVudCBpbiBbJDJdOyBkbworICAgIGhhdmVpdD0KKyAgICBmb3IgeCBpbiAkWyQxXTsgZG8KKyAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbZXZhbCB4PVwiJHhcIl0pCisgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZWxlbWVudCI7IHRoZW4KKyAgICAgICAgaGF2ZWl0PXllcworICAgICAgICBicmVhaworICAgICAgZmkKKyAgICBkb25lCisgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKyAgICAgIFskMV09IiR7WyQxXX0ke1skMV06KyB9JGVsZW1lbnQiCisgICAgZmkKKyAgZG9uZQorXSkKKworZG5sIEZvciB0aG9zZSBjYXNlcyB3aGVyZSBhIHZhcmlhYmxlIGNvbnRhaW5zIHNldmVyYWwgLUwgYW5kIC1sIG9wdGlvbnMKK2RubCByZWZlcnJpbmcgdG8gdW5rbm93biBsaWJyYXJpZXMgYW5kIGRpcmVjdG9yaWVzLCB0aGlzIG1hY3JvIGRldGVybWluZXMgdGhlCitkbmwgbmVjZXNzYXJ5IGFkZGl0aW9uYWwgbGlua2VyIG9wdGlvbnMgZm9yIHRoZSBydW50aW1lIHBhdGguCitkbmwgQUNfTElCX0xJTktGTEFHU19GUk9NX0xJQlMoW0xEQUREVkFSXSwgW0xJQlNWQUxVRV0sIFtVU0UtTElCVE9PTF0pCitkbmwgc2V0cyBMREFERFZBUiB0byBsaW5rZXIgb3B0aW9ucyBuZWVkZWQgdG9nZXRoZXIgd2l0aCBMSUJTVkFMVUUuCitkbmwgSWYgVVNFLUxJQlRPT0wgZXZhbHVhdGVzIHRvIG5vbi1lbXB0eSwgbGlua2luZyB3aXRoIGxpYnRvb2wgaXMgYXNzdW1lZCwKK2RubCBvdGhlcndpc2UgbGlua2luZyB3aXRob3V0IGxpYnRvb2wgaXMgYXNzdW1lZC4KK0FDX0RFRlVOKFtBQ19MSUJfTElOS0ZMQUdTX0ZST01fTElCU10sCitbCisgIEFDX1JFUVVJUkUoW0FDX0xJQl9SUEFUSF0pCisgIEFDX1JFUVVJUkUoW0FDX0xJQl9QUkVQQVJFX01VTFRJTElCXSkKKyAgJDE9CisgIGlmIHRlc3QgIiRlbmFibGVfcnBhdGgiICE9IG5vOyB0aGVuCisgICAgaWYgdGVzdCAtbiAiJGFjbF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIiAmJiB0ZXN0ICIkYWNsX2hhcmRjb2RlX21pbnVzX0wiID0gbm87IHRoZW4KKyAgICAgIGRubCBVc2UgYW4gZXhwbGljaXQgb3B0aW9uIHRvIGhhcmRjb2RlIGRpcmVjdG9yaWVzIGludG8gdGhlIHJlc3VsdGluZworICAgICAgZG5sIGJpbmFyeS4KKyAgICAgIHJwYXRoZGlycz0KKyAgICAgIG5leHQ9CisgICAgICBmb3Igb3B0IGluICQyOyBkbworICAgICAgICBpZiB0ZXN0IC1uICIkbmV4dCI7IHRoZW4KKyAgICAgICAgICBkaXI9IiRuZXh0IgorICAgICAgICAgIGRubCBObyBuZWVkIHRvIGhhcmRjb2RlIHRoZSBzdGFuZGFyZCAvdXNyL2xpYi4KKyAgICAgICAgICBpZiB0ZXN0ICJYJGRpciIgIT0gIlgvdXNyLyRhY2xfbGliZGlyc3RlbSIgXAorICAgICAgICAgICAgICYmIHRlc3QgIlgkZGlyIiAhPSAiWC91c3IvJGFjbF9saWJkaXJzdGVtMiI7IHRoZW4KKyAgICAgICAgICAgIHJwYXRoZGlycz0iJHJwYXRoZGlycyAkZGlyIgorICAgICAgICAgIGZpCisgICAgICAgICAgbmV4dD0KKyAgICAgICAgZWxzZQorICAgICAgICAgIGNhc2UgJG9wdCBpbgorICAgICAgICAgICAgLUwpIG5leHQ9eWVzIDs7CisgICAgICAgICAgICAtTCopIGRpcj1gZWNobyAiWCRvcHQiIHwgc2VkIC1lICdzLF5YLUwsLCdgCisgICAgICAgICAgICAgICAgIGRubCBObyBuZWVkIHRvIGhhcmRjb2RlIHRoZSBzdGFuZGFyZCAvdXNyL2xpYi4KKyAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRkaXIiICE9ICJYL3Vzci8kYWNsX2xpYmRpcnN0ZW0iIFwKKyAgICAgICAgICAgICAgICAgICAgJiYgdGVzdCAiWCRkaXIiICE9ICJYL3Vzci8kYWNsX2xpYmRpcnN0ZW0yIjsgdGhlbgorICAgICAgICAgICAgICAgICAgIHJwYXRoZGlycz0iJHJwYXRoZGlycyAkZGlyIgorICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICBuZXh0PSA7OworICAgICAgICAgICAgKikgbmV4dD0gOzsKKyAgICAgICAgICBlc2FjCisgICAgICAgIGZpCisgICAgICBkb25lCisgICAgICBpZiB0ZXN0ICJYJHJwYXRoZGlycyIgIT0gIlgiOyB0aGVuCisgICAgICAgIGlmIHRlc3QgLW4gIiIkMyIiOyB0aGVuCisgICAgICAgICAgZG5sIGxpYnRvb2wgaXMgdXNlZCBmb3IgbGlua2luZy4gVXNlIC1SIG9wdGlvbnMuCisgICAgICAgICAgZm9yIGRpciBpbiAkcnBhdGhkaXJzOyBkbworICAgICAgICAgICAgJDE9IiR7JDF9JHskMTorIH0tUiRkaXIiCisgICAgICAgICAgZG9uZQorICAgICAgICBlbHNlCisgICAgICAgICAgZG5sIFRoZSBsaW5rZXIgaXMgdXNlZCBmb3IgbGlua2luZyBkaXJlY3RseS4KKyAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisgICAgICAgICAgICBkbmwgV2VpcmQgcGxhdGZvcm06IG9ubHkgdGhlIGxhc3QgLXJwYXRoIG9wdGlvbiBjb3VudHMsIHRoZSB1c2VyCisgICAgICAgICAgICBkbmwgbXVzdCBwYXNzIGFsbCBwYXRoIGVsZW1lbnRzIGluIG9uZSBvcHRpb24uCisgICAgICAgICAgICBhbGxkaXJzPQorICAgICAgICAgICAgZm9yIGRpciBpbiAkcnBhdGhkaXJzOyBkbworICAgICAgICAgICAgICBhbGxkaXJzPSIke2FsbGRpcnN9JHthbGxkaXJzOiskYWNsX2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3J9JGRpciIKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgIGFjbF9zYXZlX2xpYmRpcj0iJGxpYmRpciIKKyAgICAgICAgICAgIGxpYmRpcj0iJGFsbGRpcnMiCisgICAgICAgICAgICBldmFsIGZsYWc9XCIkYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorICAgICAgICAgICAgbGliZGlyPSIkYWNsX3NhdmVfbGliZGlyIgorICAgICAgICAgICAgJDE9IiRmbGFnIgorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRubCBUaGUgLXJwYXRoIG9wdGlvbnMgYXJlIGN1bXVsYXRpdmUuCisgICAgICAgICAgICBmb3IgZGlyIGluICRycGF0aGRpcnM7IGRvCisgICAgICAgICAgICAgIGFjbF9zYXZlX2xpYmRpcj0iJGxpYmRpciIKKyAgICAgICAgICAgICAgbGliZGlyPSIkZGlyIgorICAgICAgICAgICAgICBldmFsIGZsYWc9XCIkYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorICAgICAgICAgICAgICBsaWJkaXI9IiRhY2xfc2F2ZV9saWJkaXIiCisgICAgICAgICAgICAgICQxPSIkeyQxfSR7JDE6KyB9JGZsYWciCisgICAgICAgICAgICBkb25lCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgZmkKKyAgZmkKKyAgQUNfU1VCU1QoWyQxXSkKK10pCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvY29tbW9uL2xpYi1wcmVmaXgubTQgYi9hdmFoaS0wLjYuMzEvY29tbW9uL2xpYi1wcmVmaXgubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYwMWNlYQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9jb21tb24vbGliLXByZWZpeC5tNApAQCAtMCwwICsxLDIyNCBAQAorIyBsaWItcHJlZml4Lm00IHNlcmlhbCA3IChnZXR0ZXh0LTAuMTgpCitkbmwgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDUsIDIwMDgtMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitkbmwgRnJvbSBCcnVubyBIYWlibGUuCisKK2RubCBBQ19MSUJfQVJHX1dJVEggaXMgc3lub255bW91cyB0byBBQ19BUkdfV0lUSCBpbiBhdXRvY29uZi0yLjEzLCBhbmQKK2RubCBzaW1pbGFyIHRvIEFDX0FSR19XSVRIIGluIGF1dG9jb25mIDIuNTIuLi4yLjU3IGV4Y2VwdCB0aGF0IGlzIGRvZXNuJ3QKK2RubCByZXF1aXJlIGV4Y2Vzc2l2ZSBicmFja2V0aW5nLgoraWZkZWYoW0FDX0hFTFBfU1RSSU5HXSwKK1tBQ19ERUZVTihbQUNfTElCX0FSR19XSVRIXSwgW0FDX0FSR19XSVRIKFskMV0sW1skMl1dLFskM10sWyQ0XSldKV0sCitbQUNfREVGVU4oW0FDX11bTElCX0FSR19XSVRIXSwgW0FDX0FSR19XSVRIKFskMV0sWyQyXSxbJDNdLFskNF0pXSldKQorCitkbmwgQUNfTElCX1BSRUZJWCBhZGRzIHRvIHRoZSBDUFBGTEFHUyBhbmQgTERGTEFHUyB0aGUgZmxhZ3MgdGhhdCBhcmUgbmVlZGVkCitkbmwgdG8gYWNjZXNzIHByZXZpb3VzbHkgaW5zdGFsbGVkIGxpYnJhcmllcy4gVGhlIGJhc2ljIGFzc3VtcHRpb24gaXMgdGhhdAorZG5sIGEgdXNlciB3aWxsIHdhbnQgcGFja2FnZXMgdG8gdXNlIG90aGVyIHBhY2thZ2VzIGhlIHByZXZpb3VzbHkgaW5zdGFsbGVkCitkbmwgd2l0aCB0aGUgc2FtZSAtLXByZWZpeCBvcHRpb24uCitkbmwgVGhpcyBtYWNybyBpcyBub3QgbmVlZGVkIGlmIG9ubHkgQUNfTElCX0xJTktGTEFHUyBpcyB1c2VkIHRvIGxvY2F0ZQorZG5sIGxpYnJhcmllcywgYnV0IGlzIG90aGVyd2lzZSB2ZXJ5IGNvbnZlbmllbnQuCitBQ19ERUZVTihbQUNfTElCX1BSRUZJWF0sCitbCisgIEFDX0JFRk9SRShbJDBdLCBbQUNfTElCX0xJTktGTEFHU10pCisgIEFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKQorICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pCisgIEFDX1JFUVVJUkUoW0FDX0xJQl9QUkVQQVJFX01VTFRJTElCXSkKKyAgQUNfUkVRVUlSRShbQUNfTElCX1BSRVBBUkVfUFJFRklYXSkKKyAgZG5sIEJ5IGRlZmF1bHQsIGxvb2sgaW4gJGluY2x1ZGVkaXIgYW5kICRsaWJkaXIuCisgIHVzZV9hZGRpdGlvbmFsPXllcworICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoWworICAgIGV2YWwgYWRkaXRpb25hbF9pbmNsdWRlZGlyPVwiJGluY2x1ZGVkaXJcIgorICAgIGV2YWwgYWRkaXRpb25hbF9saWJkaXI9XCIkbGliZGlyXCIKKyAgXSkKKyAgQUNfTElCX0FSR19XSVRIKFtsaWItcHJlZml4XSwKK1sgIC0td2l0aC1saWItcHJlZml4Wz1ESVJdIHNlYXJjaCBmb3IgbGlicmFyaWVzIGluIERJUi9pbmNsdWRlIGFuZCBESVIvbGliCisgIC0td2l0aG91dC1saWItcHJlZml4ICAgIGRvbid0IHNlYXJjaCBmb3IgbGlicmFyaWVzIGluIGluY2x1ZGVkaXIgYW5kIGxpYmRpcl0sCitbCisgICAgaWYgdGVzdCAiWCR3aXRodmFsIiA9ICJYbm8iOyB0aGVuCisgICAgICB1c2VfYWRkaXRpb25hbD1ubworICAgIGVsc2UKKyAgICAgIGlmIHRlc3QgIlgkd2l0aHZhbCIgPSAiWCI7IHRoZW4KKyAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFsKKyAgICAgICAgICBldmFsIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj1cIiRpbmNsdWRlZGlyXCIKKyAgICAgICAgICBldmFsIGFkZGl0aW9uYWxfbGliZGlyPVwiJGxpYmRpclwiCisgICAgICAgIF0pCisgICAgICBlbHNlCisgICAgICAgIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj0iJHdpdGh2YWwvaW5jbHVkZSIKKyAgICAgICAgYWRkaXRpb25hbF9saWJkaXI9IiR3aXRodmFsLyRhY2xfbGliZGlyc3RlbSIKKyAgICAgIGZpCisgICAgZmkKK10pCisgIGlmIHRlc3QgJHVzZV9hZGRpdGlvbmFsID0geWVzOyB0aGVuCisgICAgZG5sIFBvdGVudGlhbGx5IGFkZCAkYWRkaXRpb25hbF9pbmNsdWRlZGlyIHRvICRDUFBGTEFHUy4KKyAgICBkbmwgQnV0IGRvbid0IGFkZCBpdAorICAgIGRubCAgIDEuIGlmIGl0J3MgdGhlIHN0YW5kYXJkIC91c3IvaW5jbHVkZSwKKyAgICBkbmwgICAyLiBpZiBpdCdzIGFscmVhZHkgcHJlc2VudCBpbiAkQ1BQRkxBR1MsCisgICAgZG5sICAgMy4gaWYgaXQncyAvdXNyL2xvY2FsL2luY2x1ZGUgYW5kIHdlIGFyZSB1c2luZyBHQ0Mgb24gTGludXgsCisgICAgZG5sICAgNC4gaWYgaXQgZG9lc24ndCBleGlzdCBhcyBhIGRpcmVjdG9yeS4KKyAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIgIT0gIlgvdXNyL2luY2x1ZGUiOyB0aGVuCisgICAgICBoYXZlaXQ9CisgICAgICBmb3IgeCBpbiAkQ1BQRkxBR1M7IGRvCisgICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbZXZhbCB4PVwiJHhcIl0pCisgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1JJGFkZGl0aW9uYWxfaW5jbHVkZWRpciI7IHRoZW4KKyAgICAgICAgICBoYXZlaXQ9eWVzCisgICAgICAgICAgYnJlYWsKKyAgICAgICAgZmkKKyAgICAgIGRvbmUKKyAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiA9ICJYL3Vzci9sb2NhbC9pbmNsdWRlIjsgdGhlbgorICAgICAgICAgIGlmIHRlc3QgLW4gIiRHQ0MiOyB0aGVuCisgICAgICAgICAgICBjYXNlICRob3N0X29zIGluCisgICAgICAgICAgICAgIGxpbnV4KiB8IGdudSogfCBrKmJzZCotZ251KSBoYXZlaXQ9eWVzOzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiOyB0aGVuCisgICAgICAgICAgICBkbmwgUmVhbGx5IGFkZCAkYWRkaXRpb25hbF9pbmNsdWRlZGlyIHRvICRDUFBGTEFHUy4KKyAgICAgICAgICAgIENQUEZMQUdTPSIke0NQUEZMQUdTfSR7Q1BQRkxBR1M6KyB9LUkkYWRkaXRpb25hbF9pbmNsdWRlZGlyIgorICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICBmaQorICAgIGZpCisgICAgZG5sIFBvdGVudGlhbGx5IGFkZCAkYWRkaXRpb25hbF9saWJkaXIgdG8gJExERkxBR1MuCisgICAgZG5sIEJ1dCBkb24ndCBhZGQgaXQKKyAgICBkbmwgICAxLiBpZiBpdCdzIHRoZSBzdGFuZGFyZCAvdXNyL2xpYiwKKyAgICBkbmwgICAyLiBpZiBpdCdzIGFscmVhZHkgcHJlc2VudCBpbiAkTERGTEFHUywKKyAgICBkbmwgICAzLiBpZiBpdCdzIC91c3IvbG9jYWwvbGliIGFuZCB3ZSBhcmUgdXNpbmcgR0NDIG9uIExpbnV4LAorICAgIGRubCAgIDQuIGlmIGl0IGRvZXNuJ3QgZXhpc3QgYXMgYSBkaXJlY3RvcnkuCisgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2xpYmRpciIgIT0gIlgvdXNyLyRhY2xfbGliZGlyc3RlbSI7IHRoZW4KKyAgICAgIGhhdmVpdD0KKyAgICAgIGZvciB4IGluICRMREZMQUdTOyBkbworICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtTCRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKyAgICAgICAgICBoYXZlaXQ9eWVzCisgICAgICAgICAgYnJlYWsKKyAgICAgICAgZmkKKyAgICAgIGRvbmUKKyAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9saWJkaXIiID0gIlgvdXNyL2xvY2FsLyRhY2xfbGliZGlyc3RlbSI7IHRoZW4KKyAgICAgICAgICBpZiB0ZXN0IC1uICIkR0NDIjsgdGhlbgorICAgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgICAgICAgICBsaW51eCopIGhhdmVpdD15ZXM7OworICAgICAgICAgICAgZXNhYworICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisgICAgICAgICAgaWYgdGVzdCAtZCAiJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgorICAgICAgICAgICAgZG5sIFJlYWxseSBhZGQgJGFkZGl0aW9uYWxfbGliZGlyIHRvICRMREZMQUdTLgorICAgICAgICAgICAgTERGTEFHUz0iJHtMREZMQUdTfSR7TERGTEFHUzorIH0tTCRhZGRpdGlvbmFsX2xpYmRpciIKKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgZmkKKyAgICBmaQorICBmaQorXSkKKworZG5sIEFDX0xJQl9QUkVQQVJFX1BSRUZJWCBjcmVhdGVzIHZhcmlhYmxlcyBhY2xfZmluYWxfcHJlZml4LAorZG5sIGFjbF9maW5hbF9leGVjX3ByZWZpeCwgY29udGFpbmluZyB0aGUgdmFsdWVzIHRvIHdoaWNoICRwcmVmaXggYW5kCitkbmwgJGV4ZWNfcHJlZml4IHdpbGwgZXhwYW5kIGF0IHRoZSBlbmQgb2YgdGhlIGNvbmZpZ3VyZSBzY3JpcHQuCitBQ19ERUZVTihbQUNfTElCX1BSRVBBUkVfUFJFRklYXSwKK1sKKyAgZG5sIFVuZm9ydHVuYXRlbHksIHByZWZpeCBhbmQgZXhlY19wcmVmaXggZ2V0IG9ubHkgZmluYWxseSBkZXRlcm1pbmVkCisgIGRubCBhdCB0aGUgZW5kIG9mIGNvbmZpZ3VyZS4KKyAgaWYgdGVzdCAiWCRwcmVmaXgiID0gIlhOT05FIjsgdGhlbgorICAgIGFjbF9maW5hbF9wcmVmaXg9IiRhY19kZWZhdWx0X3ByZWZpeCIKKyAgZWxzZQorICAgIGFjbF9maW5hbF9wcmVmaXg9IiRwcmVmaXgiCisgIGZpCisgIGlmIHRlc3QgIlgkZXhlY19wcmVmaXgiID0gIlhOT05FIjsgdGhlbgorICAgIGFjbF9maW5hbF9leGVjX3ByZWZpeD0nJHtwcmVmaXh9JworICBlbHNlCisgICAgYWNsX2ZpbmFsX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCisgIGZpCisgIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCIKKyAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCIKKyAgZXZhbCBhY2xfZmluYWxfZXhlY19wcmVmaXg9XCIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4XCIKKyAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgorXSkKKworZG5sIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbc3RhdGVtZW50XSkgZXZhbHVhdGVzIHN0YXRlbWVudCwgd2l0aCB0aGUKK2RubCB2YXJpYWJsZXMgcHJlZml4IGFuZCBleGVjX3ByZWZpeCBib3VuZCB0byB0aGUgdmFsdWVzIHRoZXkgd2lsbCBoYXZlCitkbmwgYXQgdGhlIGVuZCBvZiB0aGUgY29uZmlndXJlIHNjcmlwdC4KK0FDX0RFRlVOKFtBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVhdLAorWworICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCisgIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCisgIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCisgIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4IgorICAkMQorICBleGVjX3ByZWZpeD0iJGFjbF9zYXZlX2V4ZWNfcHJlZml4IgorICBwcmVmaXg9IiRhY2xfc2F2ZV9wcmVmaXgiCitdKQorCitkbmwgQUNfTElCX1BSRVBBUkVfTVVMVElMSUIgY3JlYXRlcworZG5sIC0gYSB2YXJpYWJsZSBhY2xfbGliZGlyc3RlbSwgY29udGFpbmluZyB0aGUgYmFzZW5hbWUgb2YgdGhlIGxpYmRpciwgZWl0aGVyCitkbmwgICAibGliIiBvciAibGliNjQiIG9yICJsaWIvNjQiLAorZG5sIC0gYSB2YXJpYWJsZSBhY2xfbGliZGlyc3RlbTIsIGFzIGEgc2Vjb25kYXJ5IHBvc3NpYmxlIHZhbHVlIGZvcgorZG5sICAgYWNsX2xpYmRpcnN0ZW0sIGVpdGhlciB0aGUgc2FtZSBhcyBhY2xfbGliZGlyc3RlbSBvciAibGliL3NwYXJjdjkiIG9yCitkbmwgICAibGliL2FtZDY0Ii4KK0FDX0RFRlVOKFtBQ19MSUJfUFJFUEFSRV9NVUxUSUxJQl0sCitbCisgIGRubCBUaGVyZSBpcyBubyBmb3JtYWwgc3RhbmRhcmQgcmVnYXJkaW5nIGxpYiBhbmQgbGliNjQuCisgIGRubCBPbiBnbGliYyBzeXN0ZW1zLCB0aGUgY3VycmVudCBwcmFjdGljZSBpcyB0aGF0IG9uIGEgc3lzdGVtIHN1cHBvcnRpbmcKKyAgZG5sIDMyLWJpdCBhbmQgNjQtYml0IGluc3RydWN0aW9uIHNldHMgb3IgQUJJcywgNjQtYml0IGxpYnJhcmllcyBnbyB1bmRlcgorICBkbmwgJHByZWZpeC9saWI2NCBhbmQgMzItYml0IGxpYnJhcmllcyBnbyB1bmRlciAkcHJlZml4L2xpYi4gV2UgZGV0ZXJtaW5lCisgIGRubCB0aGUgY29tcGlsZXIncyBkZWZhdWx0IG1vZGUgYnkgbG9va2luZyBhdCB0aGUgY29tcGlsZXIncyBsaWJyYXJ5IHNlYXJjaAorICBkbmwgcGF0aC4gSWYgYXQgbGVhc3Qgb25lIG9mIGl0cyBlbGVtZW50cyBlbmRzIGluIC9saWI2NCBvciBwb2ludHMgdG8gYQorICBkbmwgZGlyZWN0b3J5IHdob3NlIGFic29sdXRlIHBhdGhuYW1lIGVuZHMgaW4gL2xpYjY0LCB3ZSBhc3N1bWUgYSA2NC1iaXQgQUJJLgorICBkbmwgT3RoZXJ3aXNlIHdlIHVzZSB0aGUgZGVmYXVsdCwgbmFtZWx5ICJsaWIiLgorICBkbmwgT24gU29sYXJpcyBzeXN0ZW1zLCB0aGUgY3VycmVudCBwcmFjdGljZSBpcyB0aGF0IG9uIGEgc3lzdGVtIHN1cHBvcnRpbmcKKyAgZG5sIDMyLWJpdCBhbmQgNjQtYml0IGluc3RydWN0aW9uIHNldHMgb3IgQUJJcywgNjQtYml0IGxpYnJhcmllcyBnbyB1bmRlcgorICBkbmwgJHByZWZpeC9saWIvNjQgKHdoaWNoIGlzIGEgc3ltbGluayB0byBlaXRoZXIgJHByZWZpeC9saWIvc3BhcmN2OSBvcgorICBkbmwgJHByZWZpeC9saWIvYW1kNjQpIGFuZCAzMi1iaXQgbGlicmFyaWVzIGdvIHVuZGVyICRwcmVmaXgvbGliLgorICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pCisgIGFjbF9saWJkaXJzdGVtPWxpYgorICBhY2xfbGliZGlyc3RlbTI9CisgIGNhc2UgIiRob3N0X29zIiBpbgorICAgIHNvbGFyaXMqKQorICAgICAgZG5sIFNlZSBTb2xhcmlzIDEwIFNvZnR3YXJlIERldmVsb3BlciBDb2xsZWN0aW9uID4gU29sYXJpcyA2NC1iaXQgRGV2ZWxvcGVyJ3MgR3VpZGUgPiBUaGUgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQKKyAgICAgIGRubCA8aHR0cDovL2RvY3Muc3VuLmNvbS9hcHAvZG9jcy9kb2MvODE2LTUxMzgvZGV2LWVudj9sPWVuJmE9dmlldz4uCisgICAgICBkbmwgIlBvcnRhYmxlIE1ha2VmaWxlcyBzaG91bGQgcmVmZXIgdG8gYW55IGxpYnJhcnkgZGlyZWN0b3JpZXMgdXNpbmcgdGhlIDY0IHN5bWJvbGljIGxpbmsuIgorICAgICAgZG5sIEJ1dCB3ZSB3YW50IHRvIHJlY29nbml6ZSB0aGUgc3BhcmN2OSBvciBhbWQ2NCBzdWJkaXJlY3RvcnkgYWxzbyBpZiB0aGUKKyAgICAgIGRubCBzeW1saW5rIGlzIG1pc3NpbmcsIHNvIHdlIHNldCBhY2xfbGliZGlyc3RlbTIgdG9vLgorICAgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciA2NC1iaXQgaG9zdF0sIFtnbF9jdl9zb2xhcmlzXzY0Yml0XSwKKyAgICAgICAgW0FDX0VHUkVQX0NQUChbc2l4dHlmb3VyIGJpdHNdLCBbCisjaWZkZWYgX0xQNjQKK3NpeHR5Zm91ciBiaXRzCisjZW5kaWYKKyAgICAgICAgICAgXSwgW2dsX2N2X3NvbGFyaXNfNjRiaXQ9eWVzXSwgW2dsX2N2X3NvbGFyaXNfNjRiaXQ9bm9dKQorICAgICAgICBdKQorICAgICAgaWYgdGVzdCAkZ2xfY3Zfc29sYXJpc182NGJpdCA9IHllczsgdGhlbgorICAgICAgICBhY2xfbGliZGlyc3RlbT1saWIvNjQKKyAgICAgICAgY2FzZSAiJGhvc3RfY3B1IiBpbgorICAgICAgICAgIHNwYXJjKikgICAgICAgIGFjbF9saWJkaXJzdGVtMj1saWIvc3BhcmN2OSA7OworICAgICAgICAgIGkqODYgfCB4ODZfNjQpIGFjbF9saWJkaXJzdGVtMj1saWIvYW1kNjQgOzsKKyAgICAgICAgZXNhYworICAgICAgZmkKKyAgICAgIDs7CisgICAgKikKKyAgICAgIHNlYXJjaHBhdGg9YChMQ19BTEw9QyAkQ0MgLXByaW50LXNlYXJjaC1kaXJzKSAyPi9kZXYvbnVsbCB8IHNlZCAtbiAtZSAncyxebGlicmFyaWVzOiAsLHAnIHwgc2VkIC1lICdzLF49LCwnYAorICAgICAgaWYgdGVzdCAtbiAiJHNlYXJjaHBhdGgiOyB0aGVuCisgICAgICAgIGFjbF9zYXZlX0lGUz0iJHtJRlM9IAl9IjsgSUZTPSI6IgorICAgICAgICBmb3Igc2VhcmNoZGlyIGluICRzZWFyY2hwYXRoOyBkbworICAgICAgICAgIGlmIHRlc3QgLWQgIiRzZWFyY2hkaXIiOyB0aGVuCisgICAgICAgICAgICBjYXNlICIkc2VhcmNoZGlyIiBpbgorICAgICAgICAgICAgICAqL2xpYjY0LyB8ICovbGliNjQgKSBhY2xfbGliZGlyc3RlbT1saWI2NCA7OworICAgICAgICAgICAgICAqLy4uLyB8ICovLi4gKQorICAgICAgICAgICAgICAgICMgQmV0dGVyIGlnbm9yZSBkaXJlY3RvcmllcyBvZiB0aGlzIGZvcm0uIFRoZXkgYXJlIG1pc2xlYWRpbmcuCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgKikgc2VhcmNoZGlyPWBjZCAiJHNlYXJjaGRpciIgJiYgcHdkYAorICAgICAgICAgICAgICAgICBjYXNlICIkc2VhcmNoZGlyIiBpbgorICAgICAgICAgICAgICAgICAgICovbGliNjQgKSBhY2xfbGliZGlyc3RlbT1saWI2NCA7OworICAgICAgICAgICAgICAgICBlc2FjIDs7CisgICAgICAgICAgICBlc2FjCisgICAgICAgICAgZmkKKyAgICAgICAgZG9uZQorICAgICAgICBJRlM9IiRhY2xfc2F2ZV9JRlMiCisgICAgICBmaQorICAgICAgOzsKKyAgZXNhYworICB0ZXN0IC1uICIkYWNsX2xpYmRpcnN0ZW0yIiB8fCBhY2xfbGliZGlyc3RlbTI9IiRhY2xfbGliZGlyc3RlbSIKK10pCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvY29tbW9uL2xpYnRvb2wubTQgYi9hdmFoaS0wLjYuMzEvY29tbW9uL2xpYnRvb2wubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY2NjZmMAotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9jb21tb24vbGlidG9vbC5tNApAQCAtMCwwICsxLDc5ODYgQEAKKyMgbGlidG9vbC5tNCAtIENvbmZpZ3VyZSBsaWJ0b29sIGZvciB0aGUgaG9zdCBzeXN0ZW0uIC0qLUF1dG9jb25mLSotCisjCisjICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LAorIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlCisjICAgICAgICAgICAgICAgICBGb3VuZGF0aW9uLCBJbmMuCisjICAgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCwgMTk5NgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcworIyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK200X2RlZmluZShbX0xUX0NPUFlJTkddLCBbZG5sCisjICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LAorIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlCisjICAgICAgICAgICAgICAgICBGb3VuZGF0aW9uLCBJbmMuCisjICAgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCwgMTk5NgorIworIyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBMaWJ0b29sLgorIworIyBHTlUgTGlidG9vbCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorIyBpZiB5b3UgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gb3IgbGlicmFyeSB0aGF0CisjIGlzIGJ1aWx0IHVzaW5nIEdOVSBMaWJ0b29sLCB5b3UgbWF5IGluY2x1ZGUgdGhpcyBmaWxlIHVuZGVyIHRoZQorIyBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKyMKKyMgR05VIExpYnRvb2wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIEdOVSBMaWJ0b29sOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgYSBjb3B5CisjIGNhbiBiZSBkb3dubG9hZGVkIGZyb20gaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC5odG1sLCBvcgorIyBvYnRhaW5lZCBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorXSkKKworIyBzZXJpYWwgNTcgTFRfSU5JVAorCisKKyMgTFRfUFJFUkVRKFZFUlNJT04pCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb21wbGFpbiBhbmQgZXhpdCBpZiB0aGlzIGxpYnRvb2wgdmVyc2lvbiBpcyBsZXNzIHRoYXQgVkVSU0lPTi4KK200X2RlZnVuKFtMVF9QUkVSRVFdLAorW200X2lmKG00X3ZlcnNpb25fY29tcGFyZShtNF9kZWZuKFtMVF9QQUNLQUdFX1ZFUlNJT05dKSwgWyQxXSksIC0xLAorICAgICAgIFttNF9kZWZhdWx0KFskM10sCisJCSAgIFttNF9mYXRhbChbTGlidG9vbCB2ZXJzaW9uICQxIG9yIGhpZ2hlciBpcyByZXF1aXJlZF0sCisJCSAgICAgICAgICAgICA2MyldKV0sCisgICAgICAgWyQyXSldKQorCisKKyMgX0xUX0NIRUNLX0JVSUxERElSCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb21wbGFpbiBpZiB0aGUgYWJzb2x1dGUgYnVpbGQgZGlyZWN0b3J5IG5hbWUgY29udGFpbnMgdW51c3VhbCBjaGFyYWN0ZXJzCittNF9kZWZ1bihbX0xUX0NIRUNLX0JVSUxERElSXSwKK1tjYXNlIGBwd2RgIGluCisgICpcICogfCAqXAkqKQorICAgIEFDX01TR19XQVJOKFtMaWJ0b29sIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHdoaXRlc3BhY2UgaW4gYHB3ZGBdKSA7OworZXNhYworXSkKKworCisjIExUX0lOSVQoW09QVElPTlNdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtMVF9JTklUXSwKK1tBQ19QUkVSRVEoWzIuNThdKWRubCBXZSB1c2UgQUNfSU5DTFVERVNfREVGQVVMVAorQUNfUkVRVUlSRShbQUNfQ09ORklHX0FVWF9ESVJfREVGQVVMVF0pZG5sCitBQ19CRUZPUkUoWyQwXSwgW0xUX0xBTkddKWRubAorQUNfQkVGT1JFKFskMF0sIFtMVF9PVVRQVVRdKWRubAorQUNfQkVGT1JFKFskMF0sIFtMVERMX0lOSVRdKWRubAorbTRfcmVxdWlyZShbX0xUX0NIRUNLX0JVSUxERElSXSlkbmwKKworZG5sIEF1dG9jb25mIGRvZXNuJ3QgY2F0Y2ggdW5leHBhbmRlZCBMVF8gbWFjcm9zIGJ5IGRlZmF1bHQ6CittNF9wYXR0ZXJuX2ZvcmJpZChbXl8/TFRfW0EtWl9dKyRdKWRubAorbTRfcGF0dGVybl9hbGxvdyhbXihfTFRfRU9GfExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1d8TFRfTVVMVElfTU9EVUxFKSRdKWRubAorZG5sIGFjbG9jYWwgZG9lc24ndCBwdWxsIGx0b3B0aW9ucy5tNCwgbHRzdWdhci5tNCwgb3IgbHR2ZXJzaW9uLm00CitkbmwgdW5sZXNzIHdlIHJlcXVpcmUgYW4gQUNfREVGVU5lZCBtYWNybzoKK0FDX1JFUVVJUkUoW0xUT1BUSU9OU19WRVJTSU9OXSlkbmwKK0FDX1JFUVVJUkUoW0xUU1VHQVJfVkVSU0lPTl0pZG5sCitBQ19SRVFVSVJFKFtMVFZFUlNJT05fVkVSU0lPTl0pZG5sCitBQ19SRVFVSVJFKFtMVE9CU09MRVRFX1ZFUlNJT05dKWRubAorbTRfcmVxdWlyZShbX0xUX1BST0dfTFRNQUlOXSlkbmwKKworX0xUX1NIRUxMX0lOSVQoW1NIRUxMPSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9XSkKKworZG5sIFBhcnNlIE9QVElPTlMKK19MVF9TRVRfT1BUSU9OUyhbJDBdLCBbJDFdKQorCisjIFRoaXMgY2FuIGJlIHVzZWQgdG8gcmVidWlsZCBsaWJ0b29sIHdoZW4gbmVlZGVkCitMSUJUT09MX0RFUFM9IiRsdG1haW4iCisKKyMgQWx3YXlzIHVzZSBvdXIgb3duIGxpYnRvb2wuCitMSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpcikvbGlidG9vbCcKK0FDX1NVQlNUKExJQlRPT0wpZG5sCisKK19MVF9TRVRVUAorCisjIE9ubHkgZXhwYW5kIG9uY2U6CittNF9kZWZpbmUoW0xUX0lOSVRdKQorXSkjIExUX0lOSVQKKworIyBPbGQgbmFtZXM6CitBVV9BTElBUyhbQUNfUFJPR19MSUJUT09MXSwgW0xUX0lOSVRdKQorQVVfQUxJQVMoW0FNX1BST0dfTElCVE9PTF0sIFtMVF9JTklUXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfUFJPR19MSUJUT09MXSwgW10pCitkbmwgQUNfREVGVU4oW0FNX1BST0dfTElCVE9PTF0sIFtdKQorCisKKyMgX0xUX0NDX0JBU0VOQU1FKENDKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tCisjIENhbGN1bGF0ZSBjY19iYXNlbmFtZS4gIFNraXAga25vd24gY29tcGlsZXIgd3JhcHBlcnMgYW5kIGNyb3NzLXByZWZpeC4KK200X2RlZnVuKFtfTFRfQ0NfQkFTRU5BTUVdLAorW2ZvciBjY190ZW1wIGluICQxIiI7IGRvCisgIGNhc2UgJGNjX3RlbXAgaW4KKyAgICBjb21waWxlIHwgKltbXFwvXV1jb21waWxlIHwgY2NhY2hlIHwgKltbXFwvXV1jY2FjaGUgKSA7OworICAgIGRpc3RjYyB8ICpbW1xcL11dZGlzdGNjIHwgcHVyaWZ5IHwgKltbXFwvXV1wdXJpZnkgKSA7OworICAgIFwtKikgOzsKKyAgICAqKSBicmVhazs7CisgIGVzYWMKK2RvbmUKK2NjX2Jhc2VuYW1lPWAkRUNITyAiJGNjX3RlbXAiIHwgJFNFRCAicyUuKi8lJTsgcyVeJGhvc3RfYWxpYXMtJSUiYAorXSkKKworCisjIF9MVF9GSUxFVVRJTFNfREVGQVVMVFMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBJdCBpcyBva2F5IHRvIHVzZSB0aGVzZSBmaWxlIGNvbW1hbmRzIGFuZCBhc3N1bWUgdGhleSBoYXZlIGJlZW4gc2V0CisjIHNlbnNpYmx5IGFmdGVyIGBtNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSknLgorbTRfZGVmdW4oW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdLAorWzogJHtDUD0iY3AgLWYifQorOiAke01WPSJtdiAtZiJ9Cis6ICR7Uk09InJtIC1mIn0KK10pIyBfTFRfRklMRVVUSUxTX0RFRkFVTFRTCisKKworIyBfTFRfU0VUVVAKKyMgLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX1NFVFVQXSwKK1tBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCitBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfQlVJTERdKWRubAorQUNfUkVRVUlSRShbX0xUX1BSRVBBUkVfU0VEX1FVT1RFX1ZBUlNdKWRubAorQUNfUkVRVUlSRShbX0xUX1BST0dfRUNIT19CQUNLU0xBU0hdKWRubAorCitfTFRfREVDTChbXSwgW1BBVEhfU0VQQVJBVE9SXSwgWzFdLCBbVGhlIFBBVEggc2VwYXJhdG9yIGZvciB0aGUgYnVpbGQgc3lzdGVtXSlkbmwKK2RubAorX0xUX0RFQ0woW10sIFtob3N0X2FsaWFzXSwgWzBdLCBbVGhlIGhvc3Qgc3lzdGVtXSlkbmwKK19MVF9ERUNMKFtdLCBbaG9zdF0sIFswXSlkbmwKK19MVF9ERUNMKFtdLCBbaG9zdF9vc10sIFswXSlkbmwKK2RubAorX0xUX0RFQ0woW10sIFtidWlsZF9hbGlhc10sIFswXSwgW1RoZSBidWlsZCBzeXN0ZW1dKWRubAorX0xUX0RFQ0woW10sIFtidWlsZF0sIFswXSlkbmwKK19MVF9ERUNMKFtdLCBbYnVpbGRfb3NdLCBbMF0pZG5sCitkbmwKK0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorQUNfUkVRVUlSRShbTFRfUEFUSF9MRF0pZG5sCitBQ19SRVFVSVJFKFtMVF9QQVRIX05NXSlkbmwKK2RubAorQUNfUkVRVUlSRShbQUNfUFJPR19MTl9TXSlkbmwKK3Rlc3QgLXogIiRMTl9TIiAmJiBMTl9TPSJsbiAtcyIKK19MVF9ERUNMKFtdLCBbTE5fU10sIFsxXSwgW1doZXRoZXIgd2UgbmVlZCBzb2Z0IG9yIGhhcmQgbGlua3NdKWRubAorZG5sCitBQ19SRVFVSVJFKFtMVF9DTURfTUFYX0xFTl0pZG5sCitfTFRfREVDTChbb2JqZXh0XSwgW2FjX29iamV4dF0sIFswXSwgW09iamVjdCBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIm8iKV0pZG5sCitfTFRfREVDTChbXSwgW2V4ZWV4dF0sIFswXSwgW0V4ZWN1dGFibGUgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICIiKV0pZG5sCitkbmwKK200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorbTRfcmVxdWlyZShbX0xUX0NIRUNLX1NIRUxMX0ZFQVRVUkVTXSlkbmwKK200X3JlcXVpcmUoW19MVF9QQVRIX0NPTlZFUlNJT05fRlVOQ1RJT05TXSlkbmwKK200X3JlcXVpcmUoW19MVF9DTURfUkVMT0FEXSlkbmwKK200X3JlcXVpcmUoW19MVF9DSEVDS19NQUdJQ19NRVRIT0RdKWRubAorbTRfcmVxdWlyZShbX0xUX0NIRUNLX1NIQVJFRExJQl9GUk9NX0xJTktMSUJdKWRubAorbTRfcmVxdWlyZShbX0xUX0NNRF9PTERfQVJDSElWRV0pZG5sCittNF9yZXF1aXJlKFtfTFRfQ01EX0dMT0JBTF9TWU1CT0xTXSlkbmwKK200X3JlcXVpcmUoW19MVF9XSVRIX1NZU1JPT1RdKWRubAorCitfTFRfQ09ORklHX0xJQlRPT0xfSU5JVChbCisjIFNlZSBpZiB3ZSBhcmUgcnVubmluZyBvbiB6c2gsIGFuZCBzZXQgdGhlIG9wdGlvbnMgd2hpY2ggYWxsb3cgb3VyCisjIGNvbW1hbmRzIHRocm91Z2ggd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcyBJTklULgoraWYgdGVzdCAtbiAiXCR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCisgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZmkKK10pCitpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgorICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2ZpCisKK19MVF9DSEVDS19PQkpESVIKKworbTRfcmVxdWlyZShbX0xUX1RBR19DT01QSUxFUl0pZG5sCisKK2Nhc2UgJGhvc3Rfb3MgaW4KK2FpeDMqKQorICAjIEFJWCBzb21ldGltZXMgaGFzIHByb2JsZW1zIHdpdGggdGhlIEdDQyBjb2xsZWN0MiBwcm9ncmFtLiAgRm9yIHNvbWUKKyAgIyByZWFzb24sIGlmIHdlIHNldCB0aGUgQ09MTEVDVF9OQU1FUyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHByb2JsZW1zCisgICMgdmFuaXNoIGluIGEgcHVmZiBvZiBzbW9rZS4KKyAgaWYgdGVzdCAiWCR7Q09MTEVDVF9OQU1FUytzZXR9IiAhPSBYc2V0OyB0aGVuCisgICAgQ09MTEVDVF9OQU1FUz0KKyAgICBleHBvcnQgQ09MTEVDVF9OQU1FUworICBmaQorICA7OworZXNhYworCisjIEdsb2JhbCB2YXJpYWJsZXM6CitvZmlsZT1saWJ0b29sCitjYW5fYnVpbGRfc2hhcmVkPXllcworCisjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSBgLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKKyMgd2hpY2ggbmVlZHMgJy5saWInKS4KK2xpYmV4dD1hCisKK3dpdGhfZ251X2xkPSIkbHRfY3ZfcHJvZ19nbnVfbGQiCisKK29sZF9DQz0iJENDIgorb2xkX0NGTEFHUz0iJENGTEFHUyIKKworIyBTZXQgc2FuZSBkZWZhdWx0cyBmb3IgdmFyaW91cyB2YXJpYWJsZXMKK3Rlc3QgLXogIiRDQyIgJiYgQ0M9Y2MKK3Rlc3QgLXogIiRMVENDIiAmJiBMVENDPSRDQwordGVzdCAteiAiJExUQ0ZMQUdTIiAmJiBMVENGTEFHUz0kQ0ZMQUdTCit0ZXN0IC16ICIkTEQiICYmIExEPWxkCit0ZXN0IC16ICIkYWNfb2JqZXh0IiAmJiBhY19vYmpleHQ9bworCitfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCisKKyMgT25seSBwZXJmb3JtIHRoZSBjaGVjayBmb3IgZmlsZSwgaWYgdGhlIGNoZWNrIG1ldGhvZCByZXF1aXJlcyBpdAordGVzdCAteiAiJE1BR0lDX0NNRCIgJiYgTUFHSUNfQ01EPWZpbGUKK2Nhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCitmaWxlX21hZ2ljKikKKyAgaWYgdGVzdCAiJGZpbGVfbWFnaWNfY21kIiA9ICckTUFHSUNfQ01EJzsgdGhlbgorICAgIF9MVF9QQVRIX01BR0lDCisgIGZpCisgIDs7Citlc2FjCisKKyMgVXNlIEMgZm9yIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gaW4gdGhlIGxpYnRvb2wgc2NyaXB0CitMVF9TVVBQT1JURURfVEFHKFtDQ10pCitfTFRfTEFOR19DX0NPTkZJRworX0xUX0xBTkdfREVGQVVMVF9DT05GSUcKK19MVF9DT05GSUdfQ09NTUFORFMKK10pIyBfTFRfU0VUVVAKKworCisjIF9MVF9QUkVQQVJFX1NFRF9RVU9URV9WQVJTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIERlZmluZSBhIGZldyBzZWQgc3Vic3RpdHV0aW9uIHRoYXQgaGVscCB1cyBkbyByb2J1c3QgcXVvdGluZy4KK200X2RlZnVuKFtfTFRfUFJFUEFSRV9TRURfUVVPVEVfVkFSU10sCitbIyBCYWNrc2xhc2hpZnkgbWV0YWNoYXJhY3RlcnMgdGhhdCBhcmUgc3RpbGwgYWN0aXZlIHdpdGhpbgorIyBkb3VibGUtcXVvdGVkIHN0cmluZ3MuCitzZWRfcXVvdGVfc3Vic3Q9J3MvXChbWyJgJFxcXV1cKS9cXFwxL2cnCisKKyMgU2FtZSBhcyBhYm92ZSwgYnV0IGRvIG5vdCBxdW90ZSB2YXJpYWJsZSByZWZlcmVuY2VzLgorZG91YmxlX3F1b3RlX3N1YnN0PSdzL1woW1siYFxcXV1cKS9cXFwxL2cnCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0byBkZWxheSBleHBhbnNpb24gb2YgYW4gZXNjYXBlZCBzaGVsbCB2YXJpYWJsZSBpbiBhCisjIGRvdWJsZV9xdW90ZV9zdWJzdCdlZCBzdHJpbmcuCitkZWxheV92YXJpYWJsZV9zdWJzdD0ncy9cXFxcXFxcXFxcXCQvXFxcXFxcJC9nJworCisjIFNlZCBzdWJzdGl0dXRpb24gdG8gZGVsYXkgZXhwYW5zaW9uIG9mIGFuIGVzY2FwZWQgc2luZ2xlIHF1b3RlLgorZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0PSdzLydcJycvJ1wnXFxcXFxcXCdcJycvZycKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGF2b2lkIGFjY2lkZW50YWwgZ2xvYmJpbmcgaW4gZXZhbGVkIGV4cHJlc3Npb25zCitub19nbG9iX3N1YnN0PSdzL1wqL1xcXCovZycKK10pCisKKyMgX0xUX1BST0dfTFRNQUlOCisjIC0tLS0tLS0tLS0tLS0tLQorIyBOb3RlIHRoYXQgdGhpcyBjb2RlIGlzIGNhbGxlZCBib3RoIGZyb20gYGNvbmZpZ3VyZScsIGFuZCBgY29uZmlnLnN0YXR1cycKKyMgbm93IHRoYXQgd2UgdXNlIEFDX0NPTkZJR19DT01NQU5EUyB0byBnZW5lcmF0ZSBsaWJ0b29sLiAgTm90YWJseSwKKyMgYGNvbmZpZy5zdGF0dXMnIGhhcyBubyB2YWx1ZSBmb3IgYWNfYXV4X2RpciB1bmxlc3Mgd2UgYXJlIHVzaW5nIEF1dG9tYWtlLAorIyBzbyB3ZSBwYXNzIGEgY29weSBhbG9uZyB0byBtYWtlIHN1cmUgaXQgaGFzIGEgc2Vuc2libGUgdmFsdWUgYW55d2F5LgorbTRfZGVmdW4oW19MVF9QUk9HX0xUTUFJTl0sCitbbTRfaWZkZWYoW0FDX1JFUVVJUkVfQVVYX0ZJTEVdLCBbQUNfUkVRVUlSRV9BVVhfRklMRShbbHRtYWluLnNoXSldKWRubAorX0xUX0NPTkZJR19MSUJUT09MX0lOSVQoW2FjX2F1eF9kaXI9JyRhY19hdXhfZGlyJ10pCitsdG1haW49IiRhY19hdXhfZGlyL2x0bWFpbi5zaCIKK10pIyBfTFRfUFJPR19MVE1BSU4KKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBBY2N1bXVsYXRlIGNvZGUgZm9yIGNyZWF0aW5nIGxpYnRvb2wuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgU28gdGhhdCB3ZSBjYW4gcmVjcmVhdGUgYSBmdWxsIGxpYnRvb2wgc2NyaXB0IGluY2x1ZGluZyBhZGRpdGlvbmFsCisjIHRhZ3MsIHdlIGFjY3VtdWxhdGUgdGhlIGNodW5rcyBvZiBjb2RlIHRvIHNlbmQgdG8gQUNfQ09ORklHX0NPTU1BTkRTCisjIGluIG1hY3JvcyBhbmQgdGhlbiBtYWtlIGEgc2luZ2xlIGNhbGwgYXQgdGhlIGVuZCB1c2luZyB0aGUgYGxpYnRvb2wnCisjIGxhYmVsLgorCisKKyMgX0xUX0NPTkZJR19MSUJUT09MX0lOSVQoW0lOSVQtQ09NTUFORFNdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJlZ2lzdGVyIElOSVQtQ09NTUFORFMgdG8gYmUgcGFzc2VkIHRvIEFDX0NPTkZJR19DT01NQU5EUyBsYXRlci4KK200X2RlZmluZShbX0xUX0NPTkZJR19MSUJUT09MX0lOSVRdLAorW200X2lmdmFsKFskMV0sCisgICAgICAgICAgW200X2FwcGVuZChbX0xUX09VVFBVVF9MSUJUT09MX0lOSVRdLAorICAgICAgICAgICAgICAgICAgICAgWyQxCitdKV0pXSkKKworIyBJbml0aWFsaXplLgorbTRfZGVmaW5lKFtfTFRfT1VUUFVUX0xJQlRPT0xfSU5JVF0pCisKKworIyBfTFRfQ09ORklHX0xJQlRPT0woW0NPTU1BTkRTXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJlZ2lzdGVyIENPTU1BTkRTIHRvIGJlIHBhc3NlZCB0byBBQ19DT05GSUdfQ09NTUFORFMgbGF0ZXIuCittNF9kZWZpbmUoW19MVF9DT05GSUdfTElCVE9PTF0sCitbbTRfaWZ2YWwoWyQxXSwKKyAgICAgICAgICBbbTRfYXBwZW5kKFtfTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFNdLAorICAgICAgICAgICAgICAgICAgICAgWyQxCitdKV0pXSkKKworIyBJbml0aWFsaXplLgorbTRfZGVmaW5lKFtfTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFNdKQorCisKKyMgX0xUX0NPTkZJR19TQVZFX0NPTU1BTkRTKFtDT01NQU5EU10sIFtJTklUX0NPTU1BTkRTXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfQ09ORklHX1NBVkVfQ09NTUFORFNdLAorW19MVF9DT05GSUdfTElCVE9PTChbJDFdKQorX0xUX0NPTkZJR19MSUJUT09MX0lOSVQoWyQyXSkKK10pCisKKworIyBfTFRfRk9STUFUX0NPTU1FTlQoW0NPTU1FTlRdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBZGQgbGVhZGluZyBjb21tZW50IG1hcmtzIHRvIHRoZSBzdGFydCBvZiBlYWNoIGxpbmUsIGFuZCBhIHRyYWlsaW5nCisjIGZ1bGwtc3RvcCB0byB0aGUgd2hvbGUgY29tbWVudCBpZiBvbmUgaXMgbm90IHByZXNlbnQgYWxyZWFkeS4KK200X2RlZmluZShbX0xUX0ZPUk1BVF9DT01NRU5UXSwKK1ttNF9pZnZhbChbJDFdLCBbCittNF9icGF0c3Vic3QoW200X2JwYXRzdWJzdChbJDFdLCBbXiAqXSwgWyMgXSldLAorICAgICAgICAgICAgICBbWydgJFxdXSwgW1xcXCZdKV1tNF9ibWF0Y2goWyQxXSwgW1shPy5dJF0sIFtdLCBbLl0pCispXSkKKworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgRklYTUU6IEVsaW1pbmF0ZSBWQVJOQU1FICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworCisjIF9MVF9ERUNMKFtDT05GSUdOQU1FXSwgVkFSTkFNRSwgVkFMVUUsIFtERVNDUklQVElPTl0sIFtJUy1UQUdHRUQ/XSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDT05GSUdOQU1FIGlzIHRoZSBuYW1lIGdpdmVuIHRvIHRoZSB2YWx1ZSBpbiB0aGUgbGlidG9vbCBzY3JpcHQuCisjIFZBUk5BTUUgaXMgdGhlIChiYXNlKSBuYW1lIHVzZWQgaW4gdGhlIGNvbmZpZ3VyZSBzY3JpcHQuCisjIFZBTFVFIG1heSBiZSAwLCAxIG9yIDIgZm9yIGEgY29tcHV0ZWQgcXVvdGUgZXNjYXBlZCB2YWx1ZSBiYXNlZCBvbgorIyBWQVJOQU1FLiAgQW55IG90aGVyIHZhbHVlIHdpbGwgYmUgdXNlZCBkaXJlY3RseS4KK200X2RlZmluZShbX0xUX0RFQ0xdLAorW2x0X2lmX2FwcGVuZF91bmlxKFtsdF9kZWNsX3Zhcm5hbWVzXSwgWyQyXSwgWywgXSwKKyAgICBbbHRfZGljdF9hZGRfc3Via2V5KFtsdF9kZWNsX2RpY3RdLCBbJDJdLCBbbGlidG9vbF9uYW1lXSwKKwlbbTRfaWZ2YWwoWyQxXSwgWyQxXSwgWyQyXSldKQorICAgIGx0X2RpY3RfYWRkX3N1YmtleShbbHRfZGVjbF9kaWN0XSwgWyQyXSwgW3ZhbHVlXSwgWyQzXSkKKyAgICBtNF9pZnZhbChbJDRdLAorCVtsdF9kaWN0X2FkZF9zdWJrZXkoW2x0X2RlY2xfZGljdF0sIFskMl0sIFtkZXNjcmlwdGlvbl0sIFskNF0pXSkKKyAgICBsdF9kaWN0X2FkZF9zdWJrZXkoW2x0X2RlY2xfZGljdF0sIFskMl0sCisJW3RhZ2dlZD9dLCBbbTRfaWZ2YWwoWyQ1XSwgW3llc10sIFtub10pXSldKQorXSkKKworCisjIF9MVF9UQUdERUNMKFtDT05GSUdOQU1FXSwgVkFSTkFNRSwgVkFMVUUsIFtERVNDUklQVElPTl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19MVF9UQUdERUNMXSwgW19MVF9ERUNMKFskMV0sIFskMl0sIFskM10sIFskNF0sIFt5ZXNdKV0pCisKKworIyBsdF9kZWNsX3RhZ192YXJuYW1lcyhbU0VQQVJBVE9SXSwgW1ZBUk5BTUUxLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2RlY2xfdGFnX3Zhcm5hbWVzXSwKK1tfbHRfZGVjbF9maWx0ZXIoW3RhZ2dlZD9dLCBbeWVzXSwgJEApXSkKKworCisjIF9sdF9kZWNsX2ZpbHRlcihTVUJLRVksIFZBTFVFLCBbU0VQQVJBVE9SXSwgW1ZBUk5BTUUxLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbX2x0X2RlY2xfZmlsdGVyXSwKK1ttNF9jYXNlKFskI10sCisgIFswXSwgW200X2ZhdGFsKFskMDogdG9vIGZldyBhcmd1bWVudHM6ICQjXSldLAorICBbMV0sIFttNF9mYXRhbChbJDA6IHRvbyBmZXcgYXJndW1lbnRzOiAkIzogJDFdKV0sCisgIFsyXSwgW2x0X2RpY3RfZmlsdGVyKFtsdF9kZWNsX2RpY3RdLCBbJDFdLCBbJDJdLCBbXSwgbHRfZGVjbF92YXJuYW1lcyldLAorICBbM10sIFtsdF9kaWN0X2ZpbHRlcihbbHRfZGVjbF9kaWN0XSwgWyQxXSwgWyQyXSwgWyQzXSwgbHRfZGVjbF92YXJuYW1lcyldLAorICBbbHRfZGljdF9maWx0ZXIoW2x0X2RlY2xfZGljdF0sICRAKV0pW11kbmwKK10pCisKKworIyBsdF9kZWNsX3F1b3RlX3Zhcm5hbWVzKFtTRVBBUkFUT1JdLCBbVkFSTkFNRTEuLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9kZWNsX3F1b3RlX3Zhcm5hbWVzXSwKK1tfbHRfZGVjbF9maWx0ZXIoW3ZhbHVlXSwgWzFdLCAkQCldKQorCisKKyMgbHRfZGVjbF9kcXVvdGVfdmFybmFtZXMoW1NFUEFSQVRPUl0sIFtWQVJOQU1FMS4uLl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9kZWNsX2RxdW90ZV92YXJuYW1lc10sCitbX2x0X2RlY2xfZmlsdGVyKFt2YWx1ZV0sIFsyXSwgJEApXSkKKworCisjIGx0X2RlY2xfdmFybmFtZXNfdGFnZ2VkKFtTRVBBUkFUT1JdLCBbVkFSTkFNRTEuLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGVjbF92YXJuYW1lc190YWdnZWRdLAorW200X2Fzc2VydChbJCMgPD0gMl0pZG5sCitfJDAobTRfcXVvdGUobTRfZGVmYXVsdChbJDFdLCBbWywgXV0pKSwKKyAgICBtNF9pZnZhbChbJDJdLCBbWyQyXV0sIFttNF9kcXVvdGUobHRfZGVjbF90YWdfdmFybmFtZXMpXSksCisgICAgbTRfc3BsaXQobTRfbm9ybWFsaXplKG00X3F1b3RlKF9MVF9UQUdTKSksIFsgXSkpXSkKK200X2RlZmluZShbX2x0X2RlY2xfdmFybmFtZXNfdGFnZ2VkXSwKK1ttNF9pZnZhbChbJDNdLCBbbHRfY29tYmluZShbJDFdLCBbJDJdLCBbX10sICQzKV0pXSkKKworCisjIGx0X2RlY2xfYWxsX3Zhcm5hbWVzKFtTRVBBUkFUT1JdLCBbVkFSTkFNRTEuLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGVjbF9hbGxfdmFybmFtZXNdLAorW18kMChtNF9xdW90ZShtNF9kZWZhdWx0KFskMV0sIFtbLCBdXSkpLAorICAgICBtNF9pZihbJDJdLCBbXSwKKwkgICBtNF9xdW90ZShsdF9kZWNsX3Zhcm5hbWVzKSwKKwltNF9xdW90ZShtNF9zaGlmdCgkQCkpKSlbXWRubAorXSkKK200X2RlZmluZShbX2x0X2RlY2xfYWxsX3Zhcm5hbWVzXSwKK1tsdF9qb2luKCRALCBsdF9kZWNsX3Zhcm5hbWVzX3RhZ2dlZChbJDFdLAorCQkJbHRfZGVjbF90YWdfdmFybmFtZXMoW1ssIF1dLCBtNF9zaGlmdCgkQCkpKSlkbmwKK10pCisKKworIyBfTFRfQ09ORklHX1NUQVRVU19ERUNMQVJFKFtWQVJOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFF1b3RlIGEgdmFyaWFibGUgdmFsdWUsIGFuZCBmb3J3YXJkIGl0IHRvIGBjb25maWcuc3RhdHVzJyBzbyB0aGF0IGl0cworIyBkZWNsYXJhdGlvbiB0aGVyZSB3aWxsIGhhdmUgdGhlIHNhbWUgdmFsdWUgYXMgaW4gYGNvbmZpZ3VyZScuICBWQVJOQU1FCisjIG11c3QgaGF2ZSBhIHNpbmdsZSBxdW90ZSBkZWxpbWl0ZWQgdmFsdWUgZm9yIHRoaXMgdG8gd29yay4KK200X2RlZmluZShbX0xUX0NPTkZJR19TVEFUVVNfREVDTEFSRV0sCitbJDE9J2AkRUNITyAiJF1bJDEiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJ10pCisKKworIyBfTFRfQ09ORklHX1NUQVRVU19ERUNMQVJBVElPTlMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFdlIGRlbGltaXQgbGlidG9vbCBjb25maWcgdmFyaWFibGVzIHdpdGggc2luZ2xlIHF1b3Rlcywgc28gd2hlbgorIyB3ZSB3cml0ZSB0aGVtIHRvIGNvbmZpZy5zdGF0dXMsIHdlIGhhdmUgdG8gYmUgc3VyZSB0byBxdW90ZSBhbGwKKyMgZW1iZWRkZWQgc2luZ2xlIHF1b3RlcyBwcm9wZXJseS4gIEluIGNvbmZpZ3VyZSwgdGhpcyBtYWNybyBleHBhbmRzCisjIGVhY2ggdmFyaWFibGUgZGVjbGFyZWQgd2l0aCBfTFRfREVDTCAoYW5kIF9MVF9UQUdERUNMKSBpbnRvOgorIworIyAgICA8dmFyPj0nYCRFQ0hPICIkPHZhcj4iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbTRfZGVmdW4oW19MVF9DT05GSUdfU1RBVFVTX0RFQ0xBUkFUSU9OU10sCitbbTRfZm9yZWFjaChbX2x0X3Zhcl0sIG00X3F1b3RlKGx0X2RlY2xfYWxsX3Zhcm5hbWVzKSwKKyAgICBbbTRfbihbX0xUX0NPTkZJR19TVEFUVVNfREVDTEFSRShfbHRfdmFyKV0pXSldKQorCisKKyMgX0xUX0xJQlRPT0xfVEFHUworIyAtLS0tLS0tLS0tLS0tLS0tCisjIE91dHB1dCBjb21tZW50IGFuZCBsaXN0IG9mIHRhZ3Mgc3VwcG9ydGVkIGJ5IHRoZSBzY3JpcHQKK200X2RlZnVuKFtfTFRfTElCVE9PTF9UQUdTXSwKK1tfTFRfRk9STUFUX0NPTU1FTlQoW1RoZSBuYW1lcyBvZiB0aGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHN1cHBvcnRlZCBieSB0aGlzIHNjcmlwdF0pZG5sCithdmFpbGFibGVfdGFncz0iX0xUX1RBR1MiZG5sCitdKQorCisKKyMgX0xUX0xJQlRPT0xfREVDTEFSRShWQVJOQU1FLCBbVEFHXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXh0cmFjdCB0aGUgZGljdGlvbmFyeSB2YWx1ZXMgZm9yIFZBUk5BTUUgKG9wdGlvbmFsbHkgd2l0aCBUQUcpIGFuZAorIyBleHBhbmQgdG8gYSBjb21tZW50ZWQgc2hlbGwgdmFyaWFibGUgc2V0dGluZzoKKyMKKyMgICAgIyBTb21lIGNvbW1lbnQgYWJvdXQgd2hhdCBWQVIgaXMgZm9yLgorIyAgICB2aXNpYmxlX25hbWU9JGx0X2ludGVybmFsX25hbWUKK200X2RlZmluZShbX0xUX0xJQlRPT0xfREVDTEFSRV0sCitbX0xUX0ZPUk1BVF9DT01NRU5UKG00X3F1b3RlKGx0X2RpY3RfZmV0Y2goW2x0X2RlY2xfZGljdF0sIFskMV0sCisJCQkJCSAgIFtkZXNjcmlwdGlvbl0pKSlbXWRubAorbTRfcHVzaGRlZihbX2xpYnRvb2xfbmFtZV0sCisgICAgbTRfcXVvdGUobHRfZGljdF9mZXRjaChbbHRfZGVjbF9kaWN0XSwgWyQxXSwgW2xpYnRvb2xfbmFtZV0pKSlbXWRubAorbTRfY2FzZShtNF9xdW90ZShsdF9kaWN0X2ZldGNoKFtsdF9kZWNsX2RpY3RdLCBbJDFdLCBbdmFsdWVdKSksCisgICAgWzBdLCBbX2xpYnRvb2xfbmFtZT1bJF0kMV0sCisgICAgWzFdLCBbX2xpYnRvb2xfbmFtZT0kbHRfW10kMV0sCisgICAgWzJdLCBbX2xpYnRvb2xfbmFtZT0kbHRfW10kMV0sCisgICAgW19saWJ0b29sX25hbWU9bHRfZGljdF9mZXRjaChbbHRfZGVjbF9kaWN0XSwgWyQxXSwgW3ZhbHVlXSldKVtdZG5sCittNF9pZnZhbChbJDJdLCBbXyQyXSlbXW00X3BvcGRlZihbX2xpYnRvb2xfbmFtZV0pW11kbmwKK10pCisKKworIyBfTFRfTElCVE9PTF9DT05GSUdfVkFSUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQcm9kdWNlIGNvbW1lbnRlZCBkZWNsYXJhdGlvbnMgb2Ygbm9uLXRhZ2dlZCBsaWJ0b29sIGNvbmZpZyB2YXJpYWJsZXMKKyMgc3VpdGFibGUgZm9yIGluc2VydGlvbiBpbiB0aGUgTElCVE9PTCBDT05GSUcgc2VjdGlvbiBvZiB0aGUgYGxpYnRvb2wnCisjIHNjcmlwdC4gIFRhZ2dlZCBsaWJ0b29sIGNvbmZpZyB2YXJpYWJsZXMgKGV2ZW4gZm9yIHRoZSBMSUJUT09MIENPTkZJRworIyBzZWN0aW9uKSBhcmUgcHJvZHVjZWQgYnkgX0xUX0xJQlRPT0xfVEFHX1ZBUlMuCittNF9kZWZ1bihbX0xUX0xJQlRPT0xfQ09ORklHX1ZBUlNdLAorW200X2ZvcmVhY2goW19sdF92YXJdLAorICAgIG00X3F1b3RlKF9sdF9kZWNsX2ZpbHRlcihbdGFnZ2VkP10sIFtub10sIFtdLCBsdF9kZWNsX3Zhcm5hbWVzKSksCisgICAgW200X24oW19MVF9MSUJUT09MX0RFQ0xBUkUoX2x0X3ZhcildKV0pXSkKKworCisjIF9MVF9MSUJUT09MX1RBR19WQVJTKFRBRykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtfTFRfTElCVE9PTF9UQUdfVkFSU10sCitbbTRfZm9yZWFjaChbX2x0X3Zhcl0sIG00X3F1b3RlKGx0X2RlY2xfdGFnX3Zhcm5hbWVzKSwKKyAgICBbbTRfbihbX0xUX0xJQlRPT0xfREVDTEFSRShfbHRfdmFyLCBbJDFdKV0pXSldKQorCisKKyMgX0xUX1RBR1ZBUihWQVJOQU1FLCBbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtfTFRfVEFHVkFSXSwgW200X2lmdmFsKFskMl0sIFskMV8kMl0sIFskMV0pXSkKKworCisjIF9MVF9DT05GSUdfQ09NTUFORFMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZW5kIGFjY3VtdWxhdGVkIG91dHB1dCB0byAkQ09ORklHX1NUQVRVUy4gIFRoYW5rcyB0byB0aGUgbGlzdHMgb2YKKyMgdmFyaWFibGVzIGZvciBzaW5nbGUgYW5kIGRvdWJsZSBxdW90ZSBlc2NhcGluZyB3ZSBzYXZlZCBmcm9tIGNhbGxzCisjIHRvIF9MVF9ERUNMLCB3ZSBjYW4gcHV0IHF1b3RlIGVzY2FwZWQgdmFyaWFibGVzIGRlY2xhcmF0aW9ucworIyBpbnRvIGBjb25maWcuc3RhdHVzJywgYW5kIHRoZW4gdGhlIHNoZWxsIGNvZGUgdG8gcXVvdGUgZXNjYXBlIHRoZW0gaW4KKyMgZm9yIGxvb3BzIGluIGBjb25maWcuc3RhdHVzJy4gIEZpbmFsbHksIGFueSBhZGRpdGlvbmFsIGNvZGUgYWNjdW11bGF0ZWQKKyMgZnJvbSBjYWxscyB0byBfTFRfQ09ORklHX0xJQlRPT0xfSU5JVCBpcyBleHBhbmRlZC4KK200X2RlZnVuKFtfTFRfQ09ORklHX0NPTU1BTkRTXSwKK1tBQ19QUk9WSURFX0lGRUxTRShbTFRfT1VUUFVUXSwKKwlkbmwgSWYgdGhlIGxpYnRvb2wgZ2VuZXJhdGlvbiBjb2RlIGhhcyBiZWVuIHBsYWNlZCBpbiAkQ09ORklHX0xULAorCWRubCBpbnN0ZWFkIG9mIGR1cGxpY2F0aW5nIGl0IGFsbCBvdmVyIGFnYWluIGludG8gY29uZmlnLnN0YXR1cywKKwlkbmwgdGhlbiB3ZSB3aWxsIGhhdmUgY29uZmlnLnN0YXR1cyBydW4gJENPTkZJR19MVCBsYXRlciwgc28gaXQKKwlkbmwgbmVlZHMgdG8ga25vdyB3aGF0IG5hbWUgaXMgc3RvcmVkIHRoZXJlOgorICAgICAgICBbQUNfQ09ORklHX0NPTU1BTkRTKFtsaWJ0b29sXSwKKyAgICAgICAgICAgIFskU0hFTEwgJENPTkZJR19MVCB8fCBBU19FWElUKDEpXSwgW0NPTkZJR19MVD0nJENPTkZJR19MVCddKV0sCisgICAgZG5sIElmIHRoZSBsaWJ0b29sIGdlbmVyYXRpb24gY29kZSBpcyBkZXN0aW5lZCBmb3IgY29uZmlnLnN0YXR1cywKKyAgICBkbmwgZXhwYW5kIHRoZSBhY2N1bXVsYXRlZCBjb21tYW5kcyBhbmQgaW5pdCBjb2RlIG5vdzoKKyAgICBbQUNfQ09ORklHX0NPTU1BTkRTKFtsaWJ0b29sXSwKKyAgICAgICAgW19MVF9PVVRQVVRfTElCVE9PTF9DT01NQU5EU10sIFtfTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFNfSU5JVF0pXSkKK10pI19MVF9DT05GSUdfQ09NTUFORFMKKworCisjIEluaXRpYWxpemUuCittNF9kZWZpbmUoW19MVF9PVVRQVVRfTElCVE9PTF9DT01NQU5EU19JTklUXSwKK1sKKworIyBUaGUgSFAtVVgga3NoIGFuZCBQT1NJWCBzaGVsbCBwcmludCB0aGUgdGFyZ2V0IGRpcmVjdG9yeSB0byBzdGRvdXQKKyMgaWYgQ0RQQVRIIGlzIHNldC4KKyh1bnNldCBDRFBBVEgpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBDRFBBVEgKKworc2VkX3F1b3RlX3N1YnN0PSckc2VkX3F1b3RlX3N1YnN0JworZG91YmxlX3F1b3RlX3N1YnN0PSckZG91YmxlX3F1b3RlX3N1YnN0JworZGVsYXlfdmFyaWFibGVfc3Vic3Q9JyRkZWxheV92YXJpYWJsZV9zdWJzdCcKK19MVF9DT05GSUdfU1RBVFVTX0RFQ0xBUkFUSU9OUworTFRDQz0nJExUQ0MnCitMVENGTEFHUz0nJExUQ0ZMQUdTJworY29tcGlsZXI9JyRjb21waWxlcl9ERUZBVUxUJworCisjIEEgZnVuY3Rpb24gdGhhdCBpcyB1c2VkIHdoZW4gdGhlcmUgaXMgbm8gcHJpbnQgYnVpbHRpbiBvciBwcmludGYuCitmdW5jX2ZhbGxiYWNrX2VjaG8gKCkKK3sKKyAgZXZhbCAnY2F0IDw8X0xURUNIT19FT0YKK1wkW10xCitfTFRFQ0hPX0VPRicKK30KKworIyBRdW90ZSBldmFsZWQgc3RyaW5ncy4KK2ZvciB2YXIgaW4gbHRfZGVjbF9hbGxfdmFybmFtZXMoW1sgXAorXV0sIGx0X2RlY2xfcXVvdGVfdmFybmFtZXMpOyBkbworICAgIGNhc2UgXGBldmFsIFxcXFxcJEVDSE8gXFxcXCIiXFxcXFwkXCR2YXIiXFxcXCJcYCBpbgorICAgICpbW1xcXFxcXFxgXFwiXFxcJF1dKikKKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFxgXFxcJEVDSE8gXFwiXFxcJFwkdmFyXFwiIHwgXFxcJFNFRCBcXCJcXFwkc2VkX3F1b3RlX3N1YnN0XFwiXFxcYFxcXFxcXCIiCisgICAgICA7OworICAgICopCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcJFwkdmFyXFxcXFxcIiIKKyAgICAgIDs7CisgICAgZXNhYworZG9uZQorCisjIERvdWJsZS1xdW90ZSBkb3VibGUtZXZhbGVkIHN0cmluZ3MuCitmb3IgdmFyIGluIGx0X2RlY2xfYWxsX3Zhcm5hbWVzKFtbIFwKK11dLCBsdF9kZWNsX2RxdW90ZV92YXJuYW1lcyk7IGRvCisgICAgY2FzZSBcYGV2YWwgXFxcXFwkRUNITyBcXFxcIiJcXFxcXCRcJHZhciJcXFxcIlxgIGluCisgICAgKltbXFxcXFxcXGBcXCJcXFwkXV0qKQorICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXGBcXFwkRUNITyBcXCJcXFwkXCR2YXJcXCIgfCBcXFwkU0VEIC1lIFxcIlxcXCRkb3VibGVfcXVvdGVfc3Vic3RcXCIgLWUgXFwiXFxcJHNlZF9xdW90ZV9zdWJzdFxcIiAtZSBcXCJcXFwkZGVsYXlfdmFyaWFibGVfc3Vic3RcXCJcXFxgXFxcXFxcIiIKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFwkXCR2YXJcXFxcXFwiIgorICAgICAgOzsKKyAgICBlc2FjCitkb25lCisKK19MVF9PVVRQVVRfTElCVE9PTF9JTklUCitdKQorCisjIF9MVF9HRU5FUkFURURfRklMRV9JTklUKEZJTEUsIFtDT01NRU5UXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEdlbmVyYXRlIGEgY2hpbGQgc2NyaXB0IEZJTEUgd2l0aCBhbGwgaW5pdGlhbGl6YXRpb24gbmVjZXNzYXJ5IHRvCisjIHJldXNlIHRoZSBlbnZpcm9ubWVudCBsZWFybmVkIGJ5IHRoZSBwYXJlbnQgc2NyaXB0LCBhbmQgbWFrZSB0aGUKKyMgZmlsZSBleGVjdXRhYmxlLiAgSWYgQ09NTUVOVCBpcyBzdXBwbGllZCwgaXQgaXMgaW5zZXJ0ZWQgYWZ0ZXIgdGhlCisjIGAjIScgc2VxdWVuY2UgYnV0IGJlZm9yZSBpbml0aWFsaXphdGlvbiB0ZXh0IGJlZ2lucy4gIEFmdGVyIHRoaXMKKyMgbWFjcm8sIGFkZGl0aW9uYWwgdGV4dCBjYW4gYmUgYXBwZW5kZWQgdG8gRklMRSB0byBmb3JtIHRoZSBib2R5IG9mCisjIHRoZSBjaGlsZCBzY3JpcHQuICBUaGUgbWFjcm8gZW5kcyB3aXRoIG5vbi16ZXJvIHN0YXR1cyBpZiB0aGUKKyMgZmlsZSBjb3VsZCBub3QgYmUgZnVsbHkgd3JpdHRlbiAoc3VjaCBhcyBpZiB0aGUgZGlzayBpcyBmdWxsKS4KK200X2lmZGVmKFtBU19JTklUX0dFTkVSQVRFRF0sCitbbTRfZGVmdW4oW19MVF9HRU5FUkFURURfRklMRV9JTklUXSxbQVNfSU5JVF9HRU5FUkFURUQoJEApXSldLAorW200X2RlZnVuKFtfTFRfR0VORVJBVEVEX0ZJTEVfSU5JVF0sCitbbTRfcmVxdWlyZShbQVNfUFJFUEFSRV0pXWRubAorW200X3B1c2hkZWYoW0FTX01FU1NBR0VfTE9HX0ZEXSldZG5sCitbbHRfd3JpdGVfZmFpbD0wCitjYXQgPiQxIDw8X0FTRU9GIHx8IGx0X3dyaXRlX2ZhaWw9MQorIyEgJFNIRUxMCisjIEdlbmVyYXRlZCBieSAkYXNfbWUuCiskMgorU0hFTEw9XCR7Q09ORklHX1NIRUxMLSRTSEVMTH0KK2V4cG9ydCBTSEVMTAorX0FTRU9GCitjYXQgPj4kMSA8PFxfQVNFT0YgfHwgbHRfd3JpdGVfZmFpbD0xCitBU19TSEVMTF9TQU5JVElaRQorX0FTX1BSRVBBUkUKK2V4ZWMgQVNfTUVTU0FHRV9GRD4mMQorX0FTRU9GCit0ZXN0ICRsdF93cml0ZV9mYWlsID0gMCAmJiBjaG1vZCAreCAkMVtdZG5sCittNF9wb3BkZWYoW0FTX01FU1NBR0VfTE9HX0ZEXSldKV0pIyBfTFRfR0VORVJBVEVEX0ZJTEVfSU5JVAorCisjIExUX09VVFBVVAorIyAtLS0tLS0tLS0KKyMgVGhpcyBtYWNybyBhbGxvd3MgZWFybHkgZ2VuZXJhdGlvbiBvZiB0aGUgbGlidG9vbCBzY3JpcHQgKGJlZm9yZQorIyBBQ19PVVRQVVQgaXMgY2FsbGVkKSwgaW5jYXNlIGl0IGlzIHVzZWQgaW4gY29uZmlndXJlIGZvciBjb21waWxhdGlvbgorIyB0ZXN0cy4KK0FDX0RFRlVOKFtMVF9PVVRQVVRdLAorWzogJHtDT05GSUdfTFQ9Li9jb25maWcubHR9CitBQ19NU0dfTk9USUNFKFtjcmVhdGluZyAkQ09ORklHX0xUXSkKK19MVF9HRU5FUkFURURfRklMRV9JTklUKFsiJENPTkZJR19MVCJdLAorWyMgUnVuIHRoaXMgZmlsZSB0byByZWNyZWF0ZSBhIGxpYnRvb2wgc3R1YiB3aXRoIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uXSkKKworY2F0ID4+IiRDT05GSUdfTFQiIDw8XF9MVEVPRgorbHRfY2xfc2lsZW50PWZhbHNlCitleGVjIEFTX01FU1NBR0VfTE9HX0ZEPj5jb25maWcubG9nCit7CisgIGVjaG8KKyAgQVNfQk9YKFtSdW5uaW5nICRhc19tZS5dKQorfSA+JkFTX01FU1NBR0VfTE9HX0ZECisKK2x0X2NsX2hlbHA9IlwKK1xgJGFzX21lJyBjcmVhdGVzIGEgbG9jYWwgbGlidG9vbCBzdHViIGZyb20gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiwKK2ZvciB1c2UgaW4gZnVydGhlciBjb25maWd1cmUgdGltZSB0ZXN0cyBiZWZvcmUgdGhlIHJlYWwgbGlidG9vbCBpcworZ2VuZXJhdGVkLgorCitVc2FnZTogJFswXSBbW09QVElPTlNdXQorCisgIC1oLCAtLWhlbHAgICAgICBwcmludCB0aGlzIGhlbHAsIHRoZW4gZXhpdAorICAtViwgLS12ZXJzaW9uICAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAorICAtcSwgLS1xdWlldCAgICAgZG8gbm90IHByaW50IHByb2dyZXNzIG1lc3NhZ2VzCisgIC1kLCAtLWRlYnVnICAgICBkb24ndCByZW1vdmUgdGVtcG9yYXJ5IGZpbGVzCisKK1JlcG9ydCBidWdzIHRvIDxidWctbGlidG9vbEBnbnUub3JnPi4iCisKK2x0X2NsX3ZlcnNpb249IlwKK200X2lmc2V0KFtBQ19QQUNLQUdFX05BTUVdLCBbQUNfUEFDS0FHRV9OQU1FIF0pY29uZmlnLmx0W11kbmwKK200X2lmc2V0KFtBQ19QQUNLQUdFX1ZFUlNJT05dLCBbIEFDX1BBQ0tBR0VfVkVSU0lPTl0pCitjb25maWd1cmVkIGJ5ICRbMF0sIGdlbmVyYXRlZCBieSBtNF9QQUNLQUdFX1NUUklORy4KKworQ29weXJpZ2h0IChDKSAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorVGhpcyBjb25maWcubHQgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2dpdmVzIHVubGltaXRlZCBwZXJtaXNpb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LiIKKword2hpbGUgdGVzdCAkWyNdICE9IDAKK2RvCisgIGNhc2UgJFsxXSBpbgorICAgIC0tdmVyc2lvbiB8IC0tdiogfCAtViApCisgICAgICBlY2hvICIkbHRfY2xfdmVyc2lvbiI7IGV4aXQgMCA7OworICAgIC0taGVscCB8IC0taCogfCAtaCApCisgICAgICBlY2hvICIkbHRfY2xfaGVscCI7IGV4aXQgMCA7OworICAgIC0tZGVidWcgfCAtLWQqIHwgLWQgKQorICAgICAgZGVidWc9OiA7OworICAgIC0tcXVpZXQgfCAtLXEqIHwgLS1zaWxlbnQgfCAtLXMqIHwgLXEgKQorICAgICAgbHRfY2xfc2lsZW50PTogOzsKKworICAgIC0qKSBBQ19NU0dfRVJST1IoW3VucmVjb2duaXplZCBvcHRpb246ICRbMV0KK1RyeSBcYCRbMF0gLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5dKSA7OworCisgICAgKikgQUNfTVNHX0VSUk9SKFt1bnJlY29nbml6ZWQgYXJndW1lbnQ6ICRbMV0KK1RyeSBcYCRbMF0gLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5dKSA7OworICBlc2FjCisgIHNoaWZ0Citkb25lCisKK2lmICRsdF9jbF9zaWxlbnQ7IHRoZW4KKyAgZXhlYyBBU19NRVNTQUdFX0ZEPi9kZXYvbnVsbAorZmkKK19MVEVPRgorCitjYXQgPj4iJENPTkZJR19MVCIgPDxfTFRFT0YKK19MVF9PVVRQVVRfTElCVE9PTF9DT01NQU5EU19JTklUCitfTFRFT0YKKworY2F0ID4+IiRDT05GSUdfTFQiIDw8XF9MVEVPRgorQUNfTVNHX05PVElDRShbY3JlYXRpbmcgJG9maWxlXSkKK19MVF9PVVRQVVRfTElCVE9PTF9DT01NQU5EUworQVNfRVhJVCgwKQorX0xURU9GCitjaG1vZCAreCAiJENPTkZJR19MVCIKKworIyBjb25maWd1cmUgaXMgd3JpdGluZyB0byBjb25maWcubG9nLCBidXQgY29uZmlnLmx0IGRvZXMgaXRzIG93biByZWRpcmVjdGlvbiwKKyMgYXBwZW5kaW5nIHRvIGNvbmZpZy5sb2csIHdoaWNoIGZhaWxzIG9uIERPUywgYXMgY29uZmlnLmxvZyBpcyBzdGlsbCBrZXB0CisjIG9wZW4gYnkgY29uZmlndXJlLiAgSGVyZSB3ZSBleGVjIHRoZSBGRCB0byAvZGV2L251bGwsIGVmZmVjdGl2ZWx5IGNsb3NpbmcKKyMgY29uZmlnLmxvZywgc28gaXQgY2FuIGJlIHByb3Blcmx5IChyZSlvcGVuZWQgYW5kIGFwcGVuZGVkIHRvIGJ5IGNvbmZpZy5sdC4KK2x0X2NsX3N1Y2Nlc3M9OgordGVzdCAiJHNpbGVudCIgPSB5ZXMgJiYKKyAgbHRfY29uZmlnX2x0X2FyZ3M9IiRsdF9jb25maWdfbHRfYXJncyAtLXF1aWV0IgorZXhlYyBBU19NRVNTQUdFX0xPR19GRD4vZGV2L251bGwKKyRTSEVMTCAiJENPTkZJR19MVCIgJGx0X2NvbmZpZ19sdF9hcmdzIHx8IGx0X2NsX3N1Y2Nlc3M9ZmFsc2UKK2V4ZWMgQVNfTUVTU0FHRV9MT0dfRkQ+PmNvbmZpZy5sb2cKKyRsdF9jbF9zdWNjZXNzIHx8IEFTX0VYSVQoMSkKK10pIyBMVF9PVVRQVVQKKworCisjIF9MVF9DT05GSUcoVEFHKQorIyAtLS0tLS0tLS0tLS0tLS0KKyMgSWYgVEFHIGlzIHRoZSBidWlsdC1pbiB0YWcsIGNyZWF0ZSBhbiBpbml0aWFsIGxpYnRvb2wgc2NyaXB0IHdpdGggYQorIyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgdW50YWdnZWQgY29uZmlnIHZhcnMuICBPdGhlcndpc2UgYWRkIGNvZGUKKyMgdG8gY29uZmlnLnN0YXR1cyBmb3IgYXBwZW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIG5hbWVkIGJ5IFRBRyBmcm9tIHRoZQorIyBtYXRjaGluZyB0YWdnZWQgY29uZmlnIHZhcnMuCittNF9kZWZ1bihbX0xUX0NPTkZJR10sCitbbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCitfTFRfQ09ORklHX1NBVkVfQ09NTUFORFMoWworICBtNF9kZWZpbmUoW19MVF9UQUddLCBtNF9pZihbJDFdLCBbXSwgW0NdLCBbJDFdKSlkbmwKKyAgbTRfaWYoX0xUX1RBRywgW0NdLCBbCisgICAgIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHdoaWNoIGFsbG93IG91cgorICAgICMgY29tbWFuZHMgdGhyb3VnaCB3aXRob3V0IHJlbW92YWwgb2YgXCBlc2NhcGVzLgorICAgIGlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCisgICAgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorICAgIGZpCisKKyAgICBjZmdmaWxlPSIke29maWxlfVQiCisgICAgdHJhcCAiJFJNIFwiJGNmZ2ZpbGVcIjsgZXhpdCAxIiAxIDIgMTUKKyAgICAkUk0gIiRjZmdmaWxlIgorCisgICAgY2F0IDw8X0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCisjISAkU0hFTEwKKworIyBgJEVDSE8gIiRvZmlsZSIgfCBzZWQgJ3MlXi4qLyUlJ2AgLSBQcm92aWRlIGdlbmVyYWxpemVkIGxpYnJhcnktYnVpbGRpbmcgc3VwcG9ydCBzZXJ2aWNlcy4KKyMgR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgJGFzX21lICgkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OCisjIExpYnRvb2wgd2FzIGNvbmZpZ3VyZWQgb24gaG9zdCBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWA6CisjIE5PVEU6IENoYW5nZXMgbWFkZSB0byB0aGlzIGZpbGUgd2lsbCBiZSBsb3N0OiBsb29rIGF0IGx0bWFpbi5zaC4KKyMKK19MVF9DT1BZSU5HCitfTFRfTElCVE9PTF9UQUdTCisKKyMgIyMjIEJFR0lOIExJQlRPT0wgQ09ORklHCitfTFRfTElCVE9PTF9DT05GSUdfVkFSUworX0xUX0xJQlRPT0xfVEFHX1ZBUlMKKyMgIyMjIEVORCBMSUJUT09MIENPTkZJRworCitfTFRfRU9GCisKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBhaXgzKikKKyAgICBjYXQgPDxcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCisjIEFJWCBzb21ldGltZXMgaGFzIHByb2JsZW1zIHdpdGggdGhlIEdDQyBjb2xsZWN0MiBwcm9ncmFtLiAgRm9yIHNvbWUKKyMgcmVhc29uLCBpZiB3ZSBzZXQgdGhlIENPTExFQ1RfTkFNRVMgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBwcm9ibGVtcworIyB2YW5pc2ggaW4gYSBwdWZmIG9mIHNtb2tlLgoraWYgdGVzdCAiWCR7Q09MTEVDVF9OQU1FUytzZXR9IiAhPSBYc2V0OyB0aGVuCisgIENPTExFQ1RfTkFNRVM9CisgIGV4cG9ydCBDT0xMRUNUX05BTUVTCitmaQorX0xUX0VPRgorICAgIDs7CisgIGVzYWMKKworICBfTFRfUFJPR19MVE1BSU4KKworICAjIFdlIHVzZSBzZWQgaW5zdGVhZCBvZiBjYXQgYmVjYXVzZSBiYXNoIG9uIERKR1BQIGdldHMgY29uZnVzZWQgaWYKKyAgIyBpZiBmaW5kcyBtaXhlZCBDUi9MRiBhbmQgTEYtb25seSBsaW5lcy4gIFNpbmNlIHNlZCBvcGVyYXRlcyBpbgorICAjIHRleHQgbW9kZSwgaXQgcHJvcGVybHkgY29udmVydHMgbGluZXMgdG8gQ1IvTEYuICBUaGlzIGJhc2ggcHJvYmxlbQorICAjIGlzIHJlcG9ydGVkbHkgZml4ZWQsIGJ1dCB3aHkgbm90IHJ1biBvbiBvbGQgdmVyc2lvbnMgdG9vPworICBzZWQgJyRxJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCisgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCisKKyAgX0xUX1BST0dfUkVQTEFDRV9TSEVMTEZOUworCisgICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8CisgICAgKHJtIC1mICIkb2ZpbGUiICYmIGNwICIkY2ZnZmlsZSIgIiRvZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlIikKKyAgY2htb2QgK3ggIiRvZmlsZSIKK10sCitbY2F0IDw8X0xUX0VPRiA+PiAiJG9maWxlIgorCitkbmwgVW5mb3J0dW5hdGVseSB3ZSBoYXZlIHRvIHVzZSAkMSBoZXJlLCBzaW5jZSBfTFRfVEFHIGlzIG5vdCBleHBhbmRlZAorZG5sIGluIGEgY29tbWVudCAoaWUgYWZ0ZXIgYSAjKS4KKyMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJDEKK19MVF9MSUJUT09MX1RBR19WQVJTKF9MVF9UQUcpCisjICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiAkMQorX0xUX0VPRgorXSlkbmwgL200X2lmCitdLAorW200X2lmKFskMV0sIFtdLCBbCisgICAgUEFDS0FHRT0nJFBBQ0tBR0UnCisgICAgVkVSU0lPTj0nJFZFUlNJT04nCisgICAgVElNRVNUQU1QPSckVElNRVNUQU1QJworICAgIFJNPSckUk0nCisgICAgb2ZpbGU9JyRvZmlsZSddLCBbXSkKK10pZG5sIC9fTFRfQ09ORklHX1NBVkVfQ09NTUFORFMKK10pIyBfTFRfQ09ORklHCisKKworIyBMVF9TVVBQT1JURURfVEFHKFRBRykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyYWNlIHRoaXMgbWFjcm8gdG8gZGlzY292ZXIgd2hhdCB0YWdzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGxpYnRvb2wKKyMgLS10YWcgb3B0aW9uLCB1c2luZzoKKyMgICAgYXV0b2NvbmYgLS10cmFjZSAnTFRfU1VQUE9SVEVEX1RBRzokMScKK0FDX0RFRlVOKFtMVF9TVVBQT1JURURfVEFHXSwgW10pCisKKworIyBDIHN1cHBvcnQgaXMgYnVpbHQtaW4gZm9yIG5vdworbTRfZGVmaW5lKFtfTFRfTEFOR19DX2VuYWJsZWRdLCBbXSkKK200X2RlZmluZShbX0xUX1RBR1NdLCBbXSkKKworCisjIExUX0xBTkcoTEFORykKKyMgLS0tLS0tLS0tLS0tLQorIyBFbmFibGUgbGlidG9vbCBzdXBwb3J0IGZvciB0aGUgZ2l2ZW4gbGFuZ3VhZ2UgaWYgbm90IGFscmVhZHkgZW5hYmxlZC4KK0FDX0RFRlVOKFtMVF9MQU5HXSwKK1tBQ19CRUZPUkUoWyQwXSwgW0xUX09VVFBVVF0pZG5sCittNF9jYXNlKFskMV0sCisgIFtDXSwJCQlbX0xUX0xBTkcoQyldLAorICBbQysrXSwJCVtfTFRfTEFORyhDWFgpXSwKKyAgW0dvXSwJCQlbX0xUX0xBTkcoR08pXSwKKyAgW0phdmFdLAkJW19MVF9MQU5HKEdDSildLAorICBbRm9ydHJhbiA3N10sCQlbX0xUX0xBTkcoRjc3KV0sCisgIFtGb3J0cmFuXSwJCVtfTFRfTEFORyhGQyldLAorICBbV2luZG93cyBSZXNvdXJjZV0sCVtfTFRfTEFORyhSQyldLAorICBbbTRfaWZkZWYoW19MVF9MQU5HX10kMVtfQ09ORklHXSwKKyAgICBbX0xUX0xBTkcoJDEpXSwKKyAgICBbbTRfZmF0YWwoWyQwOiB1bnN1cHBvcnRlZCBsYW5ndWFnZTogIiQxIl0pXSldKWRubAorXSkjIExUX0xBTkcKKworCisjIF9MVF9MQU5HKExBTkdOQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfTEFOR10sCitbbTRfaWZkZWYoW19MVF9MQU5HX10kMVtfZW5hYmxlZF0sIFtdLAorICBbTFRfU1VQUE9SVEVEX1RBRyhbJDFdKWRubAorICBtNF9hcHBlbmQoW19MVF9UQUdTXSwgWyQxIF0pZG5sCisgIG00X2RlZmluZShbX0xUX0xBTkdfXSQxW19lbmFibGVkXSwgW10pZG5sCisgIF9MVF9MQU5HXyQxX0NPTkZJRygkMSldKWRubAorXSkjIF9MVF9MQU5HCisKKworbTRfaWZuZGVmKFtBQ19QUk9HX0dPXSwgWworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE5PVEU6IFRoaXMgbWFjcm8gaGFzIGJlZW4gc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW50byAgICMKKyMgIEdOVSBBdXRvY29uZiBhcyBBQ19QUk9HX0dPLiAgV2hlbiBpdCBpcyBhdmFpbGFibGUgaW4gICAgIworIyAgYSByZWxlYXNlZCB2ZXJzaW9uIG9mIEF1dG9jb25mIHdlIHNob3VsZCByZW1vdmUgdGhpcyAgICAjCisjICBtYWNybyBhbmQgdXNlIGl0IGluc3RlYWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworbTRfZGVmdW4oW0FDX1BST0dfR09dLAorW0FDX0xBTkdfUFVTSChHbylkbmwKK0FDX0FSR19WQVIoW0dPQ10sICAgICBbR28gY29tcGlsZXIgY29tbWFuZF0pZG5sCitBQ19BUkdfVkFSKFtHT0ZMQUdTXSwgW0dvIGNvbXBpbGVyIGZsYWdzXSlkbmwKK19BQ19BUkdfVkFSX0xERkxBR1MoKWRubAorQUNfQ0hFQ0tfVE9PTChHT0MsIGdjY2dvKQoraWYgdGVzdCAteiAiJEdPQyI7IHRoZW4KKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAgIEFDX0NIRUNLX1BST0coR09DLCBbJHthY190b29sX3ByZWZpeH1nY2Nnb10sIFske2FjX3Rvb2xfcHJlZml4fWdjY2dvXSkKKyAgZmkKK2ZpCitpZiB0ZXN0IC16ICIkR09DIjsgdGhlbgorICBBQ19DSEVDS19QUk9HKEdPQywgZ2NjZ28sIGdjY2dvLCBmYWxzZSkKK2ZpCitdKSNtNF9kZWZ1bgorXSkjbTRfaWZuZGVmCisKKworIyBfTFRfTEFOR19ERUZBVUxUX0NPTkZJRworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9MQU5HX0RFRkFVTFRfQ09ORklHXSwKK1tBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19DWFhdLAorICBbTFRfTEFORyhDWFgpXSwKKyAgW200X2RlZmluZShbQUNfUFJPR19DWFhdLCBkZWZuKFtBQ19QUk9HX0NYWF0pW0xUX0xBTkcoQ1hYKV0pXSkKKworQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfRjc3XSwKKyAgW0xUX0xBTkcoRjc3KV0sCisgIFttNF9kZWZpbmUoW0FDX1BST0dfRjc3XSwgZGVmbihbQUNfUFJPR19GNzddKVtMVF9MQU5HKEY3NyldKV0pCisKK0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0ZDXSwKKyAgW0xUX0xBTkcoRkMpXSwKKyAgW200X2RlZmluZShbQUNfUFJPR19GQ10sIGRlZm4oW0FDX1BST0dfRkNdKVtMVF9MQU5HKEZDKV0pXSkKKworZG5sIFRoZSBjYWxsIHRvIFtBXVtNX1BST0dfR0NKXSBpcyBxdW90ZWQgbGlrZSB0aGF0IHRvIHN0b3AgYWNsb2NhbAorZG5sIHB1bGxpbmcgdGhpbmdzIGluIG5lZWRsZXNzbHkuCitBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19HQ0pdLAorICBbTFRfTEFORyhHQ0opXSwKKyAgW0FDX1BST1ZJREVfSUZFTFNFKFtBXVtNX1BST0dfR0NKXSwKKyAgICBbTFRfTEFORyhHQ0opXSwKKyAgICBbQUNfUFJPVklERV9JRkVMU0UoW0xUX1BST0dfR0NKXSwKKyAgICAgIFtMVF9MQU5HKEdDSildLAorICAgICAgW200X2lmZGVmKFtBQ19QUk9HX0dDSl0sCisJW200X2RlZmluZShbQUNfUFJPR19HQ0pdLCBkZWZuKFtBQ19QUk9HX0dDSl0pW0xUX0xBTkcoR0NKKV0pXSkKKyAgICAgICBtNF9pZmRlZihbQV1bTV9QUk9HX0dDSl0sCisJW200X2RlZmluZShbQV1bTV9QUk9HX0dDSl0sIGRlZm4oW0FdW01fUFJPR19HQ0pdKVtMVF9MQU5HKEdDSildKV0pCisgICAgICAgbTRfaWZkZWYoW0xUX1BST0dfR0NKXSwKKwlbbTRfZGVmaW5lKFtMVF9QUk9HX0dDSl0sIGRlZm4oW0xUX1BST0dfR0NKXSlbTFRfTEFORyhHQ0opXSldKV0pXSldKQorCitBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19HT10sCisgIFtMVF9MQU5HKEdPKV0sCisgIFttNF9kZWZpbmUoW0FDX1BST0dfR09dLCBkZWZuKFtBQ19QUk9HX0dPXSlbTFRfTEFORyhHTyldKV0pCisKK0FDX1BST1ZJREVfSUZFTFNFKFtMVF9QUk9HX1JDXSwKKyAgW0xUX0xBTkcoUkMpXSwKKyAgW200X2RlZmluZShbTFRfUFJPR19SQ10sIGRlZm4oW0xUX1BST0dfUkNdKVtMVF9MQU5HKFJDKV0pXSkKK10pIyBfTFRfTEFOR19ERUZBVUxUX0NPTkZJRworCisjIE9ic29sZXRlIG1hY3JvczoKK0FVX0RFRlVOKFtBQ19MSUJUT09MX0NYWF0sIFtMVF9MQU5HKEMrKyldKQorQVVfREVGVU4oW0FDX0xJQlRPT0xfRjc3XSwgW0xUX0xBTkcoRm9ydHJhbiA3NyldKQorQVVfREVGVU4oW0FDX0xJQlRPT0xfRkNdLCBbTFRfTEFORyhGb3J0cmFuKV0pCitBVV9ERUZVTihbQUNfTElCVE9PTF9HQ0pdLCBbTFRfTEFORyhKYXZhKV0pCitBVV9ERUZVTihbQUNfTElCVE9PTF9SQ10sIFtMVF9MQU5HKFdpbmRvd3MgUmVzb3VyY2UpXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9DWFhdLCBbXSkKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9GNzddLCBbXSkKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9GQ10sIFtdKQorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0dDSl0sIFtdKQorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX1JDXSwgW10pCisKKworIyBfTFRfVEFHX0NPTVBJTEVSCisjIC0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfVEFHX0NPTVBJTEVSXSwKK1tBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKKworX0xUX0RFQ0woW0xUQ0NdLCBbQ0NdLCBbMV0sIFtBIEMgY29tcGlsZXJdKWRubAorX0xUX0RFQ0woW0xUQ0ZMQUdTXSwgW0NGTEFHU10sIFsxXSwgW0xUQ0MgY29tcGlsZXIgZmxhZ3NdKWRubAorX0xUX1RBR0RFQ0woW0NDXSwgW2NvbXBpbGVyXSwgWzFdLCBbQSBsYW5ndWFnZSBzcGVjaWZpYyBjb21waWxlcl0pZG5sCitfTFRfVEFHREVDTChbd2l0aF9nY2NdLCBbR0NDXSwgWzBdLCBbSXMgdGhlIGNvbXBpbGVyIHRoZSBHTlUgY29tcGlsZXI/XSlkbmwKKworIyBJZiBubyBDIGNvbXBpbGVyIHdhcyBzcGVjaWZpZWQsIHVzZSBDQy4KK0xUQ0M9JHtMVENDLSIkQ0MifQorCisjIElmIG5vIEMgY29tcGlsZXIgZmxhZ3Mgd2VyZSBzcGVjaWZpZWQsIHVzZSBDRkxBR1MuCitMVENGTEFHUz0ke0xUQ0ZMQUdTLSIkQ0ZMQUdTIn0KKworIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KK2NvbXBpbGVyPSRDQworXSkjIF9MVF9UQUdfQ09NUElMRVIKKworCisjIF9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgZm9yIGNvbXBpbGVyIGJvaWxlcnBsYXRlIG91dHB1dCBvciB3YXJuaW5ncyB3aXRoCisjIHRoZSBzaW1wbGUgY29tcGlsZXIgdGVzdCBjb2RlLgorbTRfZGVmdW4oW19MVF9DT01QSUxFUl9CT0lMRVJQTEFURV0sCitbbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK2FjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKK2V2YWwgIiRhY19jb21waWxlIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgorX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAorJFJNIGNvbmZ0ZXN0KgorXSkjIF9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorCisKKyMgX0xUX0xJTktFUl9CT0lMRVJQTEFURQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIGZvciBsaW5rZXIgYm9pbGVycGxhdGUgb3V0cHV0IG9yIHdhcm5pbmdzIHdpdGgKKyMgdGhlIHNpbXBsZSBsaW5rIHRlc3QgY29kZS4KK200X2RlZnVuKFtfTFRfTElOS0VSX0JPSUxFUlBMQVRFXSwKK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0CitlY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAorZXZhbCAiJGFjX2xpbmsiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCitfbHRfbGlua2VyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAorJFJNIC1yIGNvbmZ0ZXN0KgorXSkjIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworIyBfTFRfUkVRVUlSRURfREFSV0lOX0NIRUNLUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bl9vbmNlKFtfTFRfUkVRVUlSRURfREFSV0lOX0NIRUNLU10sWworICBjYXNlICRob3N0X29zIGluCisgICAgcmhhcHNvZHkqIHwgZGFyd2luKikKKyAgICBBQ19DSEVDS19UT09MKFtEU1lNVVRJTF0sIFtkc3ltdXRpbF0sIFs6XSkKKyAgICBBQ19DSEVDS19UT09MKFtOTUVESVRdLCBbbm1lZGl0XSwgWzpdKQorICAgIEFDX0NIRUNLX1RPT0woW0xJUE9dLCBbbGlwb10sIFs6XSkKKyAgICBBQ19DSEVDS19UT09MKFtPVE9PTF0sIFtvdG9vbF0sIFs6XSkKKyAgICBBQ19DSEVDS19UT09MKFtPVE9PTDY0XSwgW290b29sNjRdLCBbOl0pCisgICAgX0xUX0RFQ0woW10sIFtEU1lNVVRJTF0sIFsxXSwKKyAgICAgIFtUb29sIHRvIG1hbmlwdWxhdGUgYXJjaGl2ZWQgRFdBUkYgZGVidWcgc3ltYm9sIGZpbGVzIG9uIE1hYyBPUyBYXSkKKyAgICBfTFRfREVDTChbXSwgW05NRURJVF0sIFsxXSwKKyAgICAgIFtUb29sIHRvIGNoYW5nZSBnbG9iYWwgdG8gbG9jYWwgc3ltYm9scyBvbiBNYWMgT1MgWF0pCisgICAgX0xUX0RFQ0woW10sIFtMSVBPXSwgWzFdLAorICAgICAgW1Rvb2wgdG8gbWFuaXB1bGF0ZSBmYXQgb2JqZWN0cyBhbmQgYXJjaGl2ZXMgb24gTWFjIE9TIFhdKQorICAgIF9MVF9ERUNMKFtdLCBbT1RPT0xdLCBbMV0sCisgICAgICBbbGRkL3JlYWRlbGYgbGlrZSB0b29sIGZvciBNYWNoLU8gYmluYXJpZXMgb24gTWFjIE9TIFhdKQorICAgIF9MVF9ERUNMKFtdLCBbT1RPT0w2NF0sIFsxXSwKKyAgICAgIFtsZGQvcmVhZGVsZiBsaWtlIHRvb2wgZm9yIDY0IGJpdCBNYWNoLU8gYmluYXJpZXMgb24gTWFjIE9TIFggMTAuNF0pCisKKyAgICBBQ19DQUNIRV9DSEVDSyhbZm9yIC1zaW5nbGVfbW9kdWxlIGxpbmtlciBmbGFnXSxbbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZF0sCisgICAgICBbbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZD1ubworICAgICAgaWYgdGVzdCAteiAiJHtMVF9NVUxUSV9NT0RVTEV9IjsgdGhlbgorCSMgQnkgZGVmYXVsdCB3ZSB3aWxsIGFkZCB0aGUgLXNpbmdsZV9tb2R1bGUgZmxhZy4gWW91IGNhbiBvdmVycmlkZQorCSMgYnkgZWl0aGVyIHNldHRpbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIExUX01VTFRJX01PRFVMRQorCSMgbm9uLWVtcHR5IGF0IGNvbmZpZ3VyZSB0aW1lLCBvciBieSBhZGRpbmcgLW11bHRpX21vZHVsZSB0byB0aGUKKwkjIGxpbmsgZmxhZ3MuCisJcm0gLXJmIGxpYmNvbmZ0ZXN0LmR5bGliKgorCWVjaG8gImludCBmb28odm9pZCl7cmV0dXJuIDE7fSIgPiBjb25mdGVzdC5jCisJZWNobyAiJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGxpYmNvbmZ0ZXN0LmR5bGliIFwKKy1keW5hbWljbGliIC1XbCwtc2luZ2xlX21vZHVsZSBjb25mdGVzdC5jIiA+JkFTX01FU1NBR0VfTE9HX0ZECisJJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGxpYmNvbmZ0ZXN0LmR5bGliIFwKKwkgIC1keW5hbWljbGliIC1XbCwtc2luZ2xlX21vZHVsZSBjb25mdGVzdC5jIDI+Y29uZnRlc3QuZXJyCisgICAgICAgIF9sdF9yZXN1bHQ9JD8KKwkjIElmIHRoZXJlIGlzIGEgbm9uLWVtcHR5IGVycm9yIGxvZywgYW5kICJzaW5nbGVfbW9kdWxlIgorCSMgYXBwZWFycyBpbiBpdCwgYXNzdW1lIHRoZSBmbGFnIGNhdXNlZCBhIGxpbmtlciB3YXJuaW5nCisgICAgICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyICYmICRHUkVQIHNpbmdsZV9tb2R1bGUgY29uZnRlc3QuZXJyOyB0aGVuCisJICBjYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKKwkjIE90aGVyd2lzZSwgaWYgdGhlIG91dHB1dCB3YXMgY3JlYXRlZCB3aXRoIGEgMCBleGl0IGNvZGUgZnJvbQorCSMgdGhlIGNvbXBpbGVyLCBpdCB3b3JrZWQuCisJZWxpZiB0ZXN0IC1mIGxpYmNvbmZ0ZXN0LmR5bGliICYmIHRlc3QgJF9sdF9yZXN1bHQgLWVxIDA7IHRoZW4KKwkgIGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2Q9eWVzCisJZWxzZQorCSAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisJZmkKKwlybSAtcmYgbGliY29uZnRlc3QuZHlsaWIqCisJcm0gLWYgY29uZnRlc3QuKgorICAgICAgZmldKQorCisgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGxpbmtlciBmbGFnXSwKKyAgICAgIFtsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3RdLAorICAgICAgW2x0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD1ubworICAgICAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCisgICAgICBlY2hvICJfbWFpbiIgPiBjb25mdGVzdC5zeW0KKyAgICAgIExERkxBR1M9IiRMREZMQUdTIC1XbCwtZXhwb3J0ZWRfc3ltYm9sc19saXN0LGNvbmZ0ZXN0LnN5bSIKKyAgICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW10sW10pXSwKKwlbbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0PXllc10sCisJW2x0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD1ub10pCisJTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKyAgICBdKQorCisgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciAtZm9yY2VfbG9hZCBsaW5rZXIgZmxhZ10sW2x0X2N2X2xkX2ZvcmNlX2xvYWRdLAorICAgICAgW2x0X2N2X2xkX2ZvcmNlX2xvYWQ9bm8KKyAgICAgIGNhdCA+IGNvbmZ0ZXN0LmMgPDwgX0xUX0VPRgoraW50IGZvcmNlZF9sb2FkZWQoKSB7IHJldHVybiAyO30KK19MVF9FT0YKKyAgICAgIGVjaG8gIiRMVENDICRMVENGTEFHUyAtYyAtbyBjb25mdGVzdC5vIGNvbmZ0ZXN0LmMiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgICRMVENDICRMVENGTEFHUyAtYyAtbyBjb25mdGVzdC5vIGNvbmZ0ZXN0LmMgMj4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgIGVjaG8gIiRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICAkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyAyPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgZWNobyAiJFJBTkxJQiBsaWJjb25mdGVzdC5hIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICAkUkFOTElCIGxpYmNvbmZ0ZXN0LmEgMj4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgIGNhdCA+IGNvbmZ0ZXN0LmMgPDwgX0xUX0VPRgoraW50IG1haW4oKSB7IHJldHVybiAwO30KK19MVF9FT0YKKyAgICAgIGVjaG8gIiRMVENDICRMVENGTEFHUyAkTERGTEFHUyAtbyBjb25mdGVzdCBjb25mdGVzdC5jIC1XbCwtZm9yY2VfbG9hZCwuL2xpYmNvbmZ0ZXN0LmEiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgICRMVENDICRMVENGTEFHUyAkTERGTEFHUyAtbyBjb25mdGVzdCBjb25mdGVzdC5jIC1XbCwtZm9yY2VfbG9hZCwuL2xpYmNvbmZ0ZXN0LmEgMj5jb25mdGVzdC5lcnIKKyAgICAgIF9sdF9yZXN1bHQ9JD8KKyAgICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyICYmICRHUkVQIGZvcmNlX2xvYWQgY29uZnRlc3QuZXJyOyB0aGVuCisJY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICBlbGlmIHRlc3QgLWYgY29uZnRlc3QgJiYgdGVzdCAkX2x0X3Jlc3VsdCAtZXEgMCAmJiAkR1JFUCBmb3JjZWRfbG9hZCBjb25mdGVzdCA+L2Rldi9udWxsIDI+JjEgOyB0aGVuCisJbHRfY3ZfbGRfZm9yY2VfbG9hZD15ZXMKKyAgICAgIGVsc2UKKwljYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgIGZpCisgICAgICAgIHJtIC1mIGNvbmZ0ZXN0LmVyciBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0IGNvbmZ0ZXN0LmMKKyAgICAgICAgcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KKyAgICBdKQorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICByaGFwc29keSogfCBkYXJ3aW4xLltbMDEyXV0pCisgICAgICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CisgICAgZGFyd2luMS4qKQorICAgICAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LWZsYXRfbmFtZXNwYWNlICR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OworICAgIGRhcndpbiopICMgZGFyd2luIDUueCBvbgorICAgICAgIyBpZiBydW5uaW5nIG9uIDEwLjUgb3IgbGF0ZXIsIHRoZSBkZXBsb3ltZW50IHRhcmdldCBkZWZhdWx0cworICAgICAgIyB0byB0aGUgT1MgdmVyc2lvbiwgaWYgb24geDg2LCBhbmQgMTAuNCwgdGhlIGRlcGxveW1lbnQKKyAgICAgICMgdGFyZ2V0IGRlZmF1bHRzIHRvIDEwLjQuIERvbid0IHlvdSBsb3ZlIGl0PworICAgICAgY2FzZSAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVC0xMC4wfSwkaG9zdCBpbgorCTEwLjAsKjg2Ki1kYXJ3aW44KnwxMC4wLCotZGFyd2luW1s5MV1dKikKKwkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS11bmRlZmluZWQgJHt3bH1keW5hbWljX2xvb2t1cCcgOzsKKwkxMC5bWzAxMl1dKikKKwkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKKwkxMC4qKQorCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJyA7OworICAgICAgZXNhYworICAgIDs7CisgIGVzYWMKKyAgICBpZiB0ZXN0ICIkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCIgPSAieWVzIjsgdGhlbgorICAgICAgX2x0X2Rhcl9zaW5nbGVfbW9kPSckc2luZ2xlX21vZHVsZScKKyAgICBmaQorICAgIGlmIHRlc3QgIiRsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3QiID0gInllcyI7IHRoZW4KKyAgICAgIF9sdF9kYXJfZXhwb3J0X3N5bXM9JyAke3dsfS1leHBvcnRlZF9zeW1ib2xzX2xpc3QsJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bScKKyAgICBlbHNlCisgICAgICBfbHRfZGFyX2V4cG9ydF9zeW1zPSd+JE5NRURJVCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKKyAgICBmaQorICAgIGlmIHRlc3QgIiREU1lNVVRJTCIgIT0gIjoiICYmIHRlc3QgIiRsdF9jdl9sZF9mb3JjZV9sb2FkIiA9ICJubyI7IHRoZW4KKyAgICAgIF9sdF9kc3ltdXRpbD0nfiREU1lNVVRJTCAkbGliIHx8IDonCisgICAgZWxzZQorICAgICAgX2x0X2RzeW11dGlsPQorICAgIGZpCisgICAgOzsKKyAgZXNhYworXSkKKworCisjIF9MVF9EQVJXSU5fTElOS0VSX0ZFQVRVUkVTKFtUQUddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2tzIGZvciBsaW5rZXIgYW5kIGNvbXBpbGVyIGZlYXR1cmVzIG9uIGRhcndpbgorbTRfZGVmdW4oW19MVF9EQVJXSU5fTElOS0VSX0ZFQVRVUkVTXSwKK1sKKyAgbTRfcmVxdWlyZShbX0xUX1JFUVVJUkVEX0RBUldJTl9DSEVDS1NdKQorICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworICBfTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPXllcworICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT11bnN1cHBvcnRlZAorICBpZiB0ZXN0ICIkbHRfY3ZfbGRfZm9yY2VfbG9hZCIgPSAieWVzIjsgdGhlbgorICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlICR7d2x9LWZvcmNlX2xvYWQsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAnCisgICAgbTRfY2FzZShbJDFdLCBbRjc3XSwgW19MVF9UQUdWQVIoY29tcGlsZXJfbmVlZHNfb2JqZWN0LCAkMSk9eWVzXSwKKyAgICAgICAgICAgICAgICAgIFtGQ10sICBbX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT15ZXNdKQorICBlbHNlCisgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScnCisgIGZpCisgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9IiRfbHRfZGFyX2FsbG93X3VuZGVmaW5lZCIKKyAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgaWZvcnQqKSBfbHRfZGFyX2Nhbl9zaGFyZWQ9eWVzIDs7CisgICAgICopIF9sdF9kYXJfY2FuX3NoYXJlZD0kR0NDIDs7CisgIGVzYWMKKyAgaWYgdGVzdCAiJF9sdF9kYXJfY2FuX3NoYXJlZCIgPSAieWVzIjsgdGhlbgorICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPWZ1bmNfZWNob19hbGwKKyAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSJcJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAkX2x0X2Rhcl9zaW5nbGVfbW9kJHtfbHRfZHN5bXV0aWx9IgorICAgIF9MVF9UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0iXCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJHtfbHRfZHN5bXV0aWx9IgorICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJzZWQgJ3MsXixfLCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICR7X2x0X2Rhcl9zaW5nbGVfbW9kfSR7X2x0X2Rhcl9leHBvcnRfc3ltc30ke19sdF9kc3ltdXRpbH0iCisgICAgX0xUX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0ic2VkIC1lICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgLWJ1bmRsZSBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3Mke19sdF9kYXJfZXhwb3J0X3N5bXN9JHtfbHRfZHN5bXV0aWx9IgorICAgIG00X2lmKFskMV0sIFtDWFhdLAorWyAgIGlmIHRlc3QgIiRsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kIiAhPSAieWVzIjsgdGhlbgorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0iXCRDQyAtciAta2VlcF9wcml2YXRlX2V4dGVybnMgLW5vc3RkbGliIC1vIFwke2xpYn0tbWFzdGVyLm8gXCRsaWJvYmpzflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJHtsaWJ9LW1hc3Rlci5vIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyR7X2x0X2RzeW11dGlsfSIKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJzZWQgJ3MsXixfLCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltflwkQ0MgLXIgLWtlZXBfcHJpdmF0ZV9leHRlcm5zIC1ub3N0ZGxpYiAtbyBcJHtsaWJ9LW1hc3Rlci5vIFwkbGlib2Jqc35cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCR7bGlifS1tYXN0ZXIubyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcke19sdF9kYXJfZXhwb3J0X3N5bXN9JHtfbHRfZHN5bXV0aWx9IgorICAgIGZpCitdLFtdKQorICBlbHNlCisgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgZmkKK10pCisKKyMgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgoW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIExpbmtzIGEgbWluaW1hbCBwcm9ncmFtIGFuZCBjaGVja3MgdGhlIGV4ZWN1dGFibGUKKyMgZm9yIHRoZSBzeXN0ZW0gZGVmYXVsdCBoYXJkY29kZWQgbGlicmFyeSBwYXRoLiBJbiBtb3N0IGNhc2VzLAorIyB0aGlzIGlzIC91c3IvbGliOi9saWIsIGJ1dCB3aGVuIHRoZSBNUEkgY29tcGlsZXJzIGFyZSB1c2VkCisjIHRoZSBsb2NhdGlvbiBvZiB0aGUgY29tbXVuaWNhdGlvbiBhbmQgTVBJIGxpYnMgYXJlIGluY2x1ZGVkIHRvby4KKyMgSWYgd2UgZG9uJ3QgZmluZCBhbnl0aGluZywgdXNlIHRoZSBkZWZhdWx0IGxpYnJhcnkgcGF0aCBhY2NvcmRpbmcKKyMgdG8gdGhlIGFpeCBsZCBtYW51YWwuCisjIFN0b3JlIHRoZSByZXN1bHRzIGZyb20gdGhlIGRpZmZlcmVudCBjb21waWxlcnMgZm9yIGVhY2ggVEFHTkFNRS4KKyMgQWxsb3cgdG8gb3ZlcnJpZGUgdGhlbSBmb3IgYWxsIHRhZ3MgdGhyb3VnaCBsdF9jdl9haXhfbGlicGF0aC4KK200X2RlZnVuKFtfTFRfU1lTX01PRFVMRV9QQVRIX0FJWF0sCitbbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK2lmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCitlbHNlCisgIEFDX0NBQ0hFX1ZBTChbX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSldLAorICBbQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTV0sWworICBsdF9haXhfbGlicGF0aF9zZWQ9J1sKKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKwkgIC9eMC8geworCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCisJICAgICAgcAorCSAgfQorICAgICAgfV0nCisgIF9MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisgIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKSI7IHRoZW4KKyAgICBfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKT1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKyAgZmldLFtdKQorICBpZiB0ZXN0IC16ICIkX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSkiOyB0aGVuCisgICAgX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSk9Ii91c3IvbGliOi9saWIiCisgIGZpCisgIF0pCisgIGFpeF9saWJwYXRoPSRfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKQorZmkKK10pIyBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWAorCisKKyMgX0xUX1NIRUxMX0lOSVQoQVJHKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19MVF9TSEVMTF9JTklUXSwKK1ttNF9kaXZlcnRfdGV4dChbTTRTSC1JTklUXSwgWyQxCitdKV0pIyBfTFRfU0hFTExfSU5JVAorCisKKworIyBfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBGaW5kIGhvdyB3ZSBjYW4gZmFrZSBhbiBlY2hvIGNvbW1hbmQgdGhhdCBkb2VzIG5vdCBpbnRlcnByZXQgYmFja3NsYXNoLgorIyBJbiBwYXJ0aWN1bGFyLCB3aXRoIEF1dG9jb25mIDIuNjAgb3IgbGF0ZXIgd2UgYWRkIHNvbWUgY29kZSB0byB0aGUgc3RhcnQKKyMgb2YgdGhlIGdlbmVyYXRlZCBjb25maWd1cmUgc2NyaXB0IHdoaWNoIHdpbGwgZmluZCBhIHNoZWxsIHdpdGggYSBidWlsdGluCisjIHByaW50ZiAod2hpY2ggd2UgY2FuIHVzZSBhcyBhbiBlY2hvIGNvbW1hbmQpLgorbTRfZGVmdW4oW19MVF9QUk9HX0VDSE9fQkFDS1NMQVNIXSwKK1tFQ0hPPSdcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcJworRUNITz0kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCitFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworCitBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBwcmludCBzdHJpbmdzXSkKKyMgVGVzdCBwcmludCBmaXJzdCwgYmVjYXVzZSBpdCB3aWxsIGJlIGEgYnVpbHRpbiBpZiBwcmVzZW50LgoraWYgdGVzdCAiWGAoIHByaW50IC1yIC0tIC1uICkgMj4vZGV2L251bGxgIiA9IFgtbiAmJiBcCisgICB0ZXN0ICJYYHByaW50IC1yIC0tICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgorICBFQ0hPPSdwcmludCAtciAtLScKK2VsaWYgdGVzdCAiWGBwcmludGYgJXMgJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCisgIEVDSE89J3ByaW50ZiAlc1xuJworZWxzZQorICAjIFVzZSB0aGlzIGZ1bmN0aW9uIGFzIGEgZmFsbGJhY2sgdGhhdCBhbHdheXMgd29ya3MuCisgIGZ1bmNfZmFsbGJhY2tfZWNobyAoKQorICB7CisgICAgZXZhbCAnY2F0IDw8X0xURUNIT19FT0YKKyRbXTEKK19MVEVDSE9fRU9GJworICB9CisgIEVDSE89J2Z1bmNfZmFsbGJhY2tfZWNobycKK2ZpCisKKyMgZnVuY19lY2hvX2FsbCBhcmcuLi4KKyMgSW52b2tlICRFQ0hPIHdpdGggYWxsIGFyZ3MsIHNwYWNlLXNlcGFyYXRlZC4KK2Z1bmNfZWNob19hbGwgKCkKK3sKKyAgICAkRUNITyAiJCoiIAorfQorCitjYXNlICIkRUNITyIgaW4KKyAgcHJpbnRmKikgQUNfTVNHX1JFU1VMVChbcHJpbnRmXSkgOzsKKyAgcHJpbnQqKSBBQ19NU0dfUkVTVUxUKFtwcmludCAtcl0pIDs7CisgICopIEFDX01TR19SRVNVTFQoW2NhdF0pIDs7Citlc2FjCisKK200X2lmZGVmKFtfQVNfREVURUNUX1NVR0dFU1RFRF0sCitbX0FTX0RFVEVDVF9TVUdHRVNURUQoWworICB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0ke0JBU0hfVkVSU0lPTitzZXR9IiB8fCAoCisgICAgRUNITz0nXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCcKKyAgICBFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8KKyAgICBFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworICAgIFBBVEg9L2VtcHR5IEZQQVRIPS9lbXB0eTsgZXhwb3J0IFBBVEggRlBBVEgKKyAgICB0ZXN0ICJYYHByaW50ZiAlcyAkRUNIT2AiID0gIlgkRUNITyIgXAorICAgICAgfHwgdGVzdCAiWGBwcmludCAtciAtLSAkRUNIT2AiID0gIlgkRUNITyIgKV0pXSkKKworX0xUX0RFQ0woW10sIFtTSEVMTF0sIFsxXSwgW1NoZWxsIHRvIHVzZSB3aGVuIGludm9raW5nIHNoZWxsIHNjcmlwdHNdKQorX0xUX0RFQ0woW10sIFtFQ0hPXSwgWzFdLCBbQW4gZWNobyBwcm9ncmFtIHRoYXQgcHJvdGVjdHMgYmFja3NsYXNoZXNdKQorXSkjIF9MVF9QUk9HX0VDSE9fQkFDS1NMQVNICisKKworIyBfTFRfV0lUSF9TWVNST09UCisjIC0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtfTFRfV0lUSF9TWVNST09UXSwKK1tBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBzeXNyb290XSkKK0FDX0FSR19XSVRIKFtzeXNyb290XSwKK1sgIC0td2l0aC1zeXNyb290Wz1ESVJdIFNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyB3aXRoaW4gRElSCisgICAgICAgICAgICAgICAgICAgICAgICAob3IgdGhlIGNvbXBpbGVyJ3Mgc3lzcm9vdCBpZiBub3Qgc3BlY2lmaWVkKS5dLAorW10sIFt3aXRoX3N5c3Jvb3Q9bm9dKQorCitkbmwgbHRfc3lzcm9vdCB3aWxsIGFsd2F5cyBiZSBwYXNzZWQgdW5xdW90ZWQuICBXZSBxdW90ZSBpdCBoZXJlCitkbmwgaW4gY2FzZSB0aGUgdXNlciBwYXNzZWQgYSBkaXJlY3RvcnkgbmFtZS4KK2x0X3N5c3Jvb3Q9CitjYXNlICR7d2l0aF9zeXNyb290fSBpbiAjKAorIHllcykKKyAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgIGx0X3N5c3Jvb3Q9YCRDQyAtLXByaW50LXN5c3Jvb3QgMj4vZGV2L251bGxgCisgICBmaQorICAgOzsgIygKKyAvKikKKyAgIGx0X3N5c3Jvb3Q9YGVjaG8gIiR3aXRoX3N5c3Jvb3QiIHwgc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKyAgIDs7ICMoCisgbm98JycpCisgICA7OyAjKAorICopCisgICBBQ19NU0dfUkVTVUxUKFske3dpdGhfc3lzcm9vdH1dKQorICAgQUNfTVNHX0VSUk9SKFtUaGUgc3lzcm9vdCBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGguXSkKKyAgIDs7Citlc2FjCisKKyBBQ19NU0dfUkVTVUxUKFske2x0X3N5c3Jvb3Q6LW5vfV0pCitfTFRfREVDTChbXSwgW2x0X3N5c3Jvb3RdLCBbMF0sIFtUaGUgcm9vdCB3aGVyZSB0byBzZWFyY2ggZm9yIF1kbmwKK1tkZXBlbmRlbnQgbGlicmFyaWVzLCBhbmQgaW4gd2hpY2ggb3VyIGxpYnJhcmllcyBzaG91bGQgYmUgaW5zdGFsbGVkLl0pXSkKKworIyBfTFRfRU5BQkxFX0xPQ0sKKyMgLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0VOQUJMRV9MT0NLXSwKK1tBQ19BUkdfRU5BQkxFKFtsaWJ0b29sLWxvY2tdLAorICBbQVNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1saWJ0b29sLWxvY2tdLAorICAgIFthdm9pZCBsb2NraW5nIChtaWdodCBicmVhayBwYXJhbGxlbCBidWlsZHMpXSldKQordGVzdCAieCRlbmFibGVfbGlidG9vbF9sb2NrIiAhPSB4bm8gJiYgZW5hYmxlX2xpYnRvb2xfbG9jaz15ZXMKKworIyBTb21lIGZsYWdzIG5lZWQgdG8gYmUgcHJvcGFnYXRlZCB0byB0aGUgY29tcGlsZXIgb3IgbGlua2VyIGZvciBnb29kCisjIGxpYnRvb2wgc3VwcG9ydC4KK2Nhc2UgJGhvc3QgaW4KK2lhNjQtKi1ocHV4KikKKyAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgorICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAorICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKyAgICAgICpFTEYtMzIqKQorCUhQVVhfSUE2NF9NT0RFPSIzMiIKKwk7OworICAgICAgKkVMRi02NCopCisJSFBVWF9JQTY0X01PREU9IjY0IgorCTs7CisgICAgZXNhYworICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7CisqLSotaXJpeDYqKQorICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCisgIGVjaG8gJ1sjXWxpbmUgJyRMSU5FTk8nICJjb25maWd1cmUiJyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKyAgICBpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19nbnVfbGQiID0geWVzOyB0aGVuCisgICAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisJKjMyLWJpdCopCisJICBMRD0iJHtMRC1sZH0gLW1lbGYzMmJzbWlwIgorCSAgOzsKKwkqTjMyKikKKwkgIExEPSIke0xELWxkfSAtbWVsZjMyYm1pcG4zMiIKKwkgIDs7CisJKjY0LWJpdCopCisJICBMRD0iJHtMRC1sZH0gLW1lbGY2NGJtaXAiCisJOzsKKyAgICAgIGVzYWMKKyAgICBlbHNlCisgICAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisJKjMyLWJpdCopCisJICBMRD0iJHtMRC1sZH0gLTMyIgorCSAgOzsKKwkqTjMyKikKKwkgIExEPSIke0xELWxkfSAtbjMyIgorCSAgOzsKKwkqNjQtYml0KikKKwkgIExEPSIke0xELWxkfSAtNjQiCisJICA7OworICAgICAgZXNhYworICAgIGZpCisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgOzsKKworeDg2XzY0LSprZnJlZWJzZCotZ251fHg4Nl82NC0qbGludXgqfHBwYyotKmxpbnV4Knxwb3dlcnBjKi0qbGludXgqfCBcCitzMzkwKi0qbGludXgqfHMzOTAqLSp0cGYqfHNwYXJjKi0qbGludXgqKQorICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCisgIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC5vYCBpbgorICAgICAgKjMyLWJpdCopCisJY2FzZSAkaG9zdCBpbgorCSAgeDg2XzY0LSprZnJlZWJzZCotZ251KQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX2kzODZfZmJzZCIKKwkgICAgOzsKKwkgIHg4Nl82NC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX2kzODYiCisJICAgIDs7CisJICBwcGM2NC0qbGludXgqfHBvd2VycGM2NC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJwcGNsaW51eCIKKwkgICAgOzsKKwkgIHMzOTB4LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfczM5MCIKKwkgICAgOzsKKwkgIHNwYXJjNjQtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjMyX3NwYXJjIgorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgKjY0LWJpdCopCisJY2FzZSAkaG9zdCBpbgorCSAgeDg2XzY0LSprZnJlZWJzZCotZ251KQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3g4Nl82NF9mYnNkIgorCSAgICA7OworCSAgeDg2XzY0LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfeDg2XzY0IgorCSAgICA7OworCSAgcHBjKi0qbGludXgqfHBvd2VycGMqLSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGY2NHBwYyIKKwkgICAgOzsKKwkgIHMzOTAqLSpsaW51eCp8czM5MCotKnRwZiopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGY2NF9zMzkwIgorCSAgICA7OworCSAgc3BhcmMqLSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGY2NF9zcGFyYyIKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICBlc2FjCisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgOzsKKworKi0qLXNjbzMuMnY1KikKKyAgIyBPbiBTQ08gT3BlblNlcnZlciA1LCB3ZSBuZWVkIC1iZWxmIHRvIGdldCBmdWxsLWZlYXR1cmVkIGJpbmFyaWVzLgorICBTQVZFX0NGTEFHUz0iJENGTEFHUyIKKyAgQ0ZMQUdTPSIkQ0ZMQUdTIC1iZWxmIgorICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciB0aGUgQyBjb21waWxlciBuZWVkcyAtYmVsZl0sIGx0X2N2X2NjX25lZWRzX2JlbGYsCisgICAgW0FDX0xBTkdfUFVTSChDKQorICAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbXV0sW1tdXSldLFtsdF9jdl9jY19uZWVkc19iZWxmPXllc10sW2x0X2N2X2NjX25lZWRzX2JlbGY9bm9dKQorICAgICBBQ19MQU5HX1BPUF0pCisgIGlmIHRlc3QgeCIkbHRfY3ZfY2NfbmVlZHNfYmVsZiIgIT0geCJ5ZXMiOyB0aGVuCisgICAgIyB0aGlzIGlzIHByb2JhYmx5IGdjYyAyLjguMCwgZWdjcyAxLjAgb3IgbmV3ZXI7IG5vIG5lZWQgZm9yIC1iZWxmCisgICAgQ0ZMQUdTPSIkU0FWRV9DRkxBR1MiCisgIGZpCisgIDs7CisqLSpzb2xhcmlzKikKKyAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgorICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAorICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3Qub2AgaW4KKyAgICAqNjQtYml0KikKKyAgICAgIGNhc2UgJGx0X2N2X3Byb2dfZ251X2xkIGluCisgICAgICB5ZXMqKQorICAgICAgICBjYXNlICRob3N0IGluCisgICAgICAgIGk/ODYtKi1zb2xhcmlzKikKKyAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3g4Nl82NCIKKyAgICAgICAgICA7OworICAgICAgICBzcGFyYyotKi1zb2xhcmlzKikKKyAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfc3BhcmMiCisgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICAjIEdOVSBsZCAyLjIxIGludHJvZHVjZWQgX3NvbDIgZW11bGF0aW9ucy4gIFVzZSB0aGVtIGlmIGF2YWlsYWJsZS4KKyAgICAgICAgaWYgJHtMRC1sZH0gLVYgfCBncmVwIF9zb2wyID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgICAgIExEPSIke0xELWxkfV9zb2wyIgorICAgICAgICBmaQorICAgICAgICA7OworICAgICAgKikKKwlpZiAke0xELWxkfSAtNjQgLXIgLW8gY29uZnRlc3QyLm8gY29uZnRlc3QubyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkgIExEPSIke0xELWxkfSAtNjQiCisJZmkKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgOzsKK2VzYWMKKworbmVlZF9sb2Nrcz0iJGVuYWJsZV9saWJ0b29sX2xvY2siCitdKSMgX0xUX0VOQUJMRV9MT0NLCisKKworIyBfTFRfUFJPR19BUgorIyAtLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9QUk9HX0FSXSwKK1tBQ19DSEVDS19UT09MUyhBUiwgW2FyXSwgZmFsc2UpCis6ICR7QVI9YXJ9Cis6ICR7QVJfRkxBR1M9Y3J1fQorX0xUX0RFQ0woW10sIFtBUl0sIFsxXSwgW1RoZSBhcmNoaXZlcl0pCitfTFRfREVDTChbXSwgW0FSX0ZMQUdTXSwgWzFdLCBbRmxhZ3MgdG8gY3JlYXRlIGFuIGFyY2hpdmVdKQorCitBQ19DQUNIRV9DSEVDSyhbZm9yIGFyY2hpdmVyIEBGSUxFIHN1cHBvcnRdLCBbbHRfY3ZfYXJfYXRfZmlsZV0sCisgIFtsdF9jdl9hcl9hdF9maWxlPW5vCisgICBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNXSwKKyAgICAgW2VjaG8gY29uZnRlc3QuJGFjX29iamV4dCA+IGNvbmZ0ZXN0LmxzdAorICAgICAgbHRfYXJfdHJ5PSckQVIgJEFSX0ZMQUdTIGxpYmNvbmZ0ZXN0LmEgQGNvbmZ0ZXN0LmxzdCA+JkFTX01FU1NBR0VfTE9HX0ZEJworICAgICAgQUNfVFJZX0VWQUwoW2x0X2FyX3RyeV0pCisgICAgICBpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtZXEgMDsgdGhlbgorCSMgRW5zdXJlIHRoZSBhcmNoaXZlciBmYWlscyB1cG9uIGJvZ3VzIGZpbGUgbmFtZXMuCisJcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBsaWJjb25mdGVzdC5hCisJQUNfVFJZX0VWQUwoW2x0X2FyX3RyeV0pCisJaWYgdGVzdCAiJGFjX3N0YXR1cyIgLW5lIDA7IHRoZW4KKyAgICAgICAgICBsdF9jdl9hcl9hdF9maWxlPUAKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgICBybSAtZiBjb25mdGVzdC4qIGxpYmNvbmZ0ZXN0LmEKKyAgICAgXSkKKyAgXSkKKworaWYgdGVzdCAieCRsdF9jdl9hcl9hdF9maWxlIiA9IHhubzsgdGhlbgorICBhcmNoaXZlcl9saXN0X3NwZWM9CitlbHNlCisgIGFyY2hpdmVyX2xpc3Rfc3BlYz0kbHRfY3ZfYXJfYXRfZmlsZQorZmkKK19MVF9ERUNMKFtdLCBbYXJjaGl2ZXJfbGlzdF9zcGVjXSwgWzFdLAorICBbSG93IHRvIGZlZWQgYSBmaWxlIGxpc3RpbmcgdG8gdGhlIGFyY2hpdmVyXSkKK10pIyBfTFRfUFJPR19BUgorCisKKyMgX0xUX0NNRF9PTERfQVJDSElWRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0NNRF9PTERfQVJDSElWRV0sCitbX0xUX1BST0dfQVIKKworQUNfQ0hFQ0tfVE9PTChTVFJJUCwgc3RyaXAsIDopCit0ZXN0IC16ICIkU1RSSVAiICYmIFNUUklQPToKK19MVF9ERUNMKFtdLCBbU1RSSVBdLCBbMV0sIFtBIHN5bWJvbCBzdHJpcHBpbmcgcHJvZ3JhbV0pCisKK0FDX0NIRUNLX1RPT0woUkFOTElCLCByYW5saWIsIDopCit0ZXN0IC16ICIkUkFOTElCIiAmJiBSQU5MSUI9OgorX0xUX0RFQ0woW10sIFtSQU5MSUJdLCBbMV0sCisgICAgW0NvbW1hbmRzIHVzZWQgdG8gaW5zdGFsbCBhbiBvbGQtc3R5bGUgYXJjaGl2ZV0pCisKKyMgRGV0ZXJtaW5lIGNvbW1hbmRzIHRvIGNyZWF0ZSBvbGQtc3R5bGUgc3RhdGljIGFyY2hpdmVzLgorb2xkX2FyY2hpdmVfY21kcz0nJEFSICRBUl9GTEFHUyAkb2xkbGliJG9sZG9ianMnCitvbGRfcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNjQ0ICRvbGRsaWInCitvbGRfcG9zdHVuaW5zdGFsbF9jbWRzPQorCitpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICBjYXNlICRob3N0X29zIGluCisgIG9wZW5ic2QqKQorICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSIkb2xkX3Bvc3RpbnN0YWxsX2NtZHN+XCRSQU5MSUIgLXQgXCR0b29sX29sZGxpYiIKKyAgICA7OworICAqKQorICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSIkb2xkX3Bvc3RpbnN0YWxsX2NtZHN+XCRSQU5MSUIgXCR0b29sX29sZGxpYiIKKyAgICA7OworICBlc2FjCisgIG9sZF9hcmNoaXZlX2NtZHM9IiRvbGRfYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkdG9vbF9vbGRsaWIiCitmaQorCitjYXNlICRob3N0X29zIGluCisgIGRhcndpbiopCisgICAgbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uPXllcyA7OworICAqKQorICAgIGxvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbj1ubyA7OworZXNhYworX0xUX0RFQ0woW10sIFtvbGRfcG9zdGluc3RhbGxfY21kc10sIFsyXSkKK19MVF9ERUNMKFtdLCBbb2xkX3Bvc3R1bmluc3RhbGxfY21kc10sIFsyXSkKK19MVF9UQUdERUNMKFtdLCBbb2xkX2FyY2hpdmVfY21kc10sIFsyXSwKKyAgICBbQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhbiBvbGQtc3R5bGUgYXJjaGl2ZV0pCitfTFRfREVDTChbXSwgW2xvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbl0sIFswXSwKKyAgICBbV2hldGhlciB0byB1c2UgYSBsb2NrIGZvciBvbGQgYXJjaGl2ZSBleHRyYWN0aW9uXSkKK10pIyBfTFRfQ01EX09MRF9BUkNISVZFCisKKworIyBfTFRfQ09NUElMRVJfT1BUSU9OKE1FU1NBR0UsIFZBUklBQkxFLU5BTUUsIEZMQUdTLAorIwkJW09VVFBVVC1GSUxFXSwgW0FDVElPTi1TVUNDRVNTXSwgW0FDVElPTi1GQUlMVVJFXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBjb21waWxlciBvcHRpb24gd29ya3MKK0FDX0RFRlVOKFtfTFRfQ09NUElMRVJfT1BUSU9OXSwKK1ttNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCitBQ19DQUNIRV9DSEVDSyhbJDFdLCBbJDJdLAorICBbJDI9bm8KKyAgIG00X2lmKFskNF0sICwgW2FjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dF0sIFthY19vdXRmaWxlPSQ0XSkKKyAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgbHRfY29tcGlsZXJfZmxhZz0iJDMiCisgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgorICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KKyAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKKyAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCisgICAjIFRoZSBvcHRpb24gaXMgcmVmZXJlbmNlZCB2aWEgYSB2YXJpYWJsZSB0byBhdm9pZCBjb25mdXNpbmcgc2VkLgorICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCisgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAtZSAnczogW1teIF1dKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJGx0X2NvbXBpbGVcIiIgPiZBU19NRVNTQUdFX0xPR19GRCkKKyAgIChldmFsICIkbHRfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCisgICBhY19zdGF0dXM9JD8KKyAgIGNhdCBjb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgIiRhY19vdXRmaWxlIjsgdGhlbgorICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3Mgb3RoZXIgdGhhbiB0aGUgdXN1YWwgb3V0cHV0LgorICAgICAkRUNITyAiJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPmNvbmZ0ZXN0LmV4cAorICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKKyAgICAgaWYgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVyMiB8fCBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICQyPXllcworICAgICBmaQorICAgZmkKKyAgICRSTSBjb25mdGVzdCoKK10pCisKK2lmIHRlc3QgeCJbJF0kMiIgPSB4eWVzOyB0aGVuCisgICAgbTRfaWYoWyQ1XSwgLCA6LCBbJDVdKQorZWxzZQorICAgIG00X2lmKFskNl0sICwgOiwgWyQ2XSkKK2ZpCitdKSMgX0xUX0NPTVBJTEVSX09QVElPTgorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0FDX0xJQlRPT0xfQ09NUElMRVJfT1BUSU9OXSwgW19MVF9DT01QSUxFUl9PUFRJT05dKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0NPTVBJTEVSX09QVElPTl0sIFtdKQorCisKKyMgX0xUX0xJTktFUl9PUFRJT04oTUVTU0FHRSwgVkFSSUFCTEUtTkFNRSwgRkxBR1MsCisjICAgICAgICAgICAgICAgICAgW0FDVElPTi1TVUNDRVNTXSwgW0FDVElPTi1GQUlMVVJFXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBsaW5rZXIgb3B0aW9uIHdvcmtzCitBQ19ERUZVTihbX0xUX0xJTktFUl9PUFRJT05dLAorW200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK0FDX0NBQ0hFX0NIRUNLKFskMV0sIFskMl0sCisgIFskMj1ubworICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKyAgIExERkxBR1M9IiRMREZMQUdTICQzIgorICAgZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgICBpZiAoZXZhbCAkYWNfbGluayAyPmNvbmZ0ZXN0LmVycikgJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgICAgIyBUaGUgbGlua2VyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICAgICMgQXBwZW5kIGFueSBlcnJvcnMgdG8gdGhlIGNvbmZpZy5sb2cuCisgICAgICAgY2F0IGNvbmZ0ZXN0LmVyciAxPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgICRFQ0hPICIkX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPiBjb25mdGVzdC5leHAKKyAgICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKKyAgICAgICBpZiBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgJDI9eWVzCisgICAgICAgZmkKKyAgICAgZWxzZQorICAgICAgICQyPXllcworICAgICBmaQorICAgZmkKKyAgICRSTSAtciBjb25mdGVzdCoKKyAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCitdKQorCitpZiB0ZXN0IHgiWyRdJDIiID0geHllczsgdGhlbgorICAgIG00X2lmKFskNF0sICwgOiwgWyQ0XSkKK2Vsc2UKKyAgICBtNF9pZihbJDVdLCAsIDosIFskNV0pCitmaQorXSkjIF9MVF9MSU5LRVJfT1BUSU9OCisKKyMgT2xkIG5hbWU6CitBVV9BTElBUyhbQUNfTElCVE9PTF9MSU5LRVJfT1BUSU9OXSwgW19MVF9MSU5LRVJfT1BUSU9OXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9MSU5LRVJfT1BUSU9OXSwgW10pCisKKworIyBMVF9DTURfTUFYX0xFTgorIy0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0xUX0NNRF9NQVhfTEVOXSwKK1tBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCisjIGZpbmQgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKK0FDX01TR19DSEVDS0lORyhbdGhlIG1heGltdW0gbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHNdKQorQUNfQ0FDSEVfVkFMKFtsdF9jdl9zeXNfbWF4X2NtZF9sZW5dLCBbZG5sCisgIGk9MAorICB0ZXN0c3RyaW5nPSJBQkNEIgorCisgIGNhc2UgJGJ1aWxkX29zIGluCisgIG1zZG9zZGpncHAqKQorICAgICMgT24gREpHUFAsIHRoaXMgdGVzdCBjYW4gYmxvdyB1cCBwcmV0dHkgYmFkbHkgZHVlIHRvIHByb2JsZW1zIGluIGxpYmMKKyAgICAjIChhbnkgc2luZ2xlIGFyZ3VtZW50IGV4Y2VlZGluZyAyMDAwIGJ5dGVzIGNhdXNlcyBhIGJ1ZmZlciBvdmVycnVuCisgICAgIyBkdXJpbmcgZ2xvYiBleHBhbnNpb24pLiAgRXZlbiBpZiBpdCB3ZXJlIGZpeGVkLCB0aGUgcmVzdWx0IG9mIHRoaXMKKyAgICAjIGNoZWNrIHdvdWxkIGJlIGxhcmdlciB0aGFuIGl0IHNob3VsZCBiZS4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTIyODg7ICAgICMgMTJLIGlzIGFib3V0IHJpZ2h0CisgICAgOzsKKworICBnbnUqKQorICAgICMgVW5kZXIgR05VIEh1cmQsIHRoaXMgdGVzdCBpcyBub3QgcmVxdWlyZWQgYmVjYXVzZSB0aGVyZSBpcworICAgICMgbm8gbGltaXQgdG8gdGhlIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgorICAgICMgTGlidG9vbCB3aWxsIGludGVycHJldCAtMSBhcyBubyBsaW1pdCB3aGF0c29ldmVyCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPS0xOworICAgIDs7CisKKyAgY3lnd2luKiB8IG1pbmd3KiB8IGNlZ2NjKikKKyAgICAjIE9uIFdpbjl4L01FLCB0aGlzIHRlc3QgYmxvd3MgdXAgLS0gaXQgc3VjY2VlZHMsIGJ1dCB0YWtlcworICAgICMgYWJvdXQgNSBtaW51dGVzIGFzIHRoZSB0ZXN0c3RyaW5nIGdyb3dzIGV4cG9uZW50aWFsbHkuCisgICAgIyBXb3JzZSwgc2luY2UgOXgvTUUgYXJlIG5vdCBwcmUtZW1wdGl2ZWx5IG11bHRpdGFza2luZywKKyAgICAjIHlvdSBlbmQgdXAgd2l0aCBhICJmcm96ZW4iIGNvbXB1dGVyLCBldmVuIHRob3VnaCB3aXRoIHBhdGllbmNlCisgICAgIyB0aGUgdGVzdCBldmVudHVhbGx5IHN1Y2NlZWRzICh3aXRoIGEgbWF4IGxpbmUgbGVuZ3RoIG9mIDI1NmspLgorICAgICMgSW5zdGVhZCwgbGV0J3MganVzdCBwdW50OiB1c2UgdGhlIG1pbmltdW0gbGluZWxlbmd0aCByZXBvcnRlZCBieQorICAgICMgYWxsIG9mIHRoZSBzdXBwb3J0ZWQgcGxhdGZvcm1zOiA4MTkyIChvbiBOVC8ySy9YUCkuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTgxOTI7CisgICAgOzsKKworICBtaW50KikKKyAgICAjIE9uIE1pTlQgdGhpcyBjYW4gdGFrZSBhIGxvbmcgdGltZSBhbmQgcnVuIG91dCBvZiBtZW1vcnkuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTgxOTI7CisgICAgOzsKKworICBhbWlnYW9zKikKKyAgICAjIE9uIEFtaWdhT1Mgd2l0aCBwZGtzaCwgdGhpcyB0ZXN0IHRha2VzIGhvdXJzLCBsaXRlcmFsbHkuCisgICAgIyBTbyB3ZSBqdXN0IHB1bnQgYW5kIHVzZSBhIG1pbmltdW0gbGluZSBsZW5ndGggb2YgODE5Mi4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKKyAgICA7OworCisgIG5ldGJzZCogfCBmcmVlYnNkKiB8IG9wZW5ic2QqIHwgZGFyd2luKiB8IGRyYWdvbmZseSopCisgICAgIyBUaGlzIGhhcyBiZWVuIGFyb3VuZCBzaW5jZSAzODZCU0QsIGF0IGxlYXN0LiAgTGlrZWx5IGZ1cnRoZXIuCisgICAgaWYgdGVzdCAteCAvc2Jpbi9zeXNjdGw7IHRoZW4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gL3NiaW4vc3lzY3RsIC1uIGtlcm4uYXJnbWF4YAorICAgIGVsaWYgdGVzdCAteCAvdXNyL3NiaW4vc3lzY3RsOyB0aGVuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YC91c3Ivc2Jpbi9zeXNjdGwgLW4ga2Vybi5hcmdtYXhgCisgICAgZWxzZQorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTY1NTM2CSMgdXNhYmxlIGRlZmF1bHQgZm9yIGFsbCBCU0RzCisgICAgZmkKKyAgICAjIEFuZCBhZGQgYSBzYWZldHkgem9uZQorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDRgCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXCogM2AKKyAgICA7OworCisgIGludGVyaXgqKQorICAgICMgV2Uga25vdyB0aGUgdmFsdWUgMjYyMTQ0IGFuZCBoYXJkY29kZSBpdCB3aXRoIGEgc2FmZXR5IHpvbmUgKGxpa2UgQlNEKQorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xOTY2MDgKKyAgICA7OworCisgIG9zMiopCisgICAgIyBUaGUgdGVzdCB0YWtlcyBhIGxvbmcgdGltZSBvbiBPUy8yLgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyCisgICAgOzsKKworICBvc2YqKQorICAgICMgRHIuIEhhbnMgRWtrZWhhcmQgUGxlc3NlciByZXBvcnRzIHNlZWluZyBhIGtlcm5lbCBwYW5pYyBydW5uaW5nIGNvbmZpZ3VyZQorICAgICMgZHVlIHRvIHRoaXMgdGVzdCB3aGVuIGV4ZWNfZGlzYWJsZV9hcmdfbGltaXQgaXMgMSBvbiBUcnU2NC4gSXQgaXMgbm90CisgICAgIyBuaWNlIHRvIGNhdXNlIGtlcm5lbCBwYW5pY3Mgc28gbGV0cyBhdm9pZCB0aGUgbG9vcCBiZWxvdy4KKyAgICAjIEZpcnN0IHNldCBhIHJlYXNvbmFibGUgZGVmYXVsdC4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTYzODQKKyAgICAjCisgICAgaWYgdGVzdCAteCAvc2Jpbi9zeXNjb25maWc7IHRoZW4KKyAgICAgIGNhc2UgYC9zYmluL3N5c2NvbmZpZyAtcSBwcm9jIGV4ZWNfZGlzYWJsZV9hcmdfbGltaXRgIGluCisgICAgICAgICoxKikgbHRfY3Zfc3lzX21heF9jbWRfbGVuPS0xIDs7CisgICAgICBlc2FjCisgICAgZmkKKyAgICA7OworICBzY28zLjJ2NSopCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTEwMjQwMAorICAgIDs7CisgIHN5c3Y1KiB8IHNjbzV2NiogfCBzeXN2NC4ydXcyKikKKyAgICBrYXJnbWF4PWBncmVwIEFSR19NQVggL2V0Yy9jb25mL2NmLmQvc3R1bmUgMj4vZGV2L251bGxgCisgICAgaWYgdGVzdCAtbiAiJGthcmdtYXgiOyB0aGVuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGVjaG8gJGthcmdtYXggfCBzZWQgJ3MvLipbWwkgXV0vLydgCisgICAgZWxzZQorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTMyNzY4CisgICAgZmkKKyAgICA7OworICAqKQorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gKGdldGNvbmYgQVJHX01BWCkgMj4gL2Rldi9udWxsYAorICAgIGlmIHRlc3QgLW4gIiRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iOyB0aGVuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyA0YAorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXCogM2AKKyAgICBlbHNlCisgICAgICAjIE1ha2UgdGVzdHN0cmluZyBhIGxpdHRsZSBiaWdnZXIgYmVmb3JlIHdlIGRvIGFueXRoaW5nIHdpdGggaXQuCisgICAgICAjIGEgMUsgc3RyaW5nIHNob3VsZCBiZSBhIHJlYXNvbmFibGUgc3RhcnQuCisgICAgICBmb3IgaSBpbiAxIDIgMyA0IDUgNiA3IDggOyBkbworICAgICAgICB0ZXN0c3RyaW5nPSR0ZXN0c3RyaW5nJHRlc3RzdHJpbmcKKyAgICAgIGRvbmUKKyAgICAgIFNIRUxMPSR7U0hFTEwtJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH19CisgICAgICAjIElmIHRlc3QgaXMgbm90IGEgc2hlbGwgYnVpbHQtaW4sIHdlJ2xsIHByb2JhYmx5IGVuZCB1cCBjb21wdXRpbmcgYQorICAgICAgIyBtYXhpbXVtIGxlbmd0aCB0aGF0IGlzIG9ubHkgaGFsZiBvZiB0aGUgYWN0dWFsIG1heGltdW0gbGVuZ3RoLCBidXQKKyAgICAgICMgd2UgY2FuJ3QgdGVsbC4KKyAgICAgIHdoaWxlIHsgdGVzdCAiWCJgZW52IGVjaG8gIiR0ZXN0c3RyaW5nJHRlc3RzdHJpbmciIDI+L2Rldi9udWxsYCBcCisJICAgICAgICAgPSAiWCR0ZXN0c3RyaW5nJHRlc3RzdHJpbmciOyB9ID4vZGV2L251bGwgMj4mMSAmJgorCSAgICAgIHRlc3QgJGkgIT0gMTcgIyAxLzIgTUIgc2hvdWxkIGJlIGVub3VnaAorICAgICAgZG8KKyAgICAgICAgaT1gZXhwciAkaSArIDFgCisgICAgICAgIHRlc3RzdHJpbmc9JHRlc3RzdHJpbmckdGVzdHN0cmluZworICAgICAgZG9uZQorICAgICAgIyBPbmx5IGNoZWNrIHRoZSBzdHJpbmcgbGVuZ3RoIG91dHNpZGUgdGhlIGxvb3AuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgIlgkdGVzdHN0cmluZyIgOiAiLioiIDI+JjFgCisgICAgICB0ZXN0c3RyaW5nPQorICAgICAgIyBBZGQgYSBzaWduaWZpY2FudCBzYWZldHkgZmFjdG9yIGJlY2F1c2UgQysrIGNvbXBpbGVycyBjYW4gdGFjayBvbgorICAgICAgIyBtYXNzaXZlIGFtb3VudHMgb2YgYWRkaXRpb25hbCBhcmd1bWVudHMgYmVmb3JlIHBhc3NpbmcgdGhlbSB0byB0aGUKKyAgICAgICMgbGlua2VyLiAgSXQgYXBwZWFycyBhcyB0aG91Z2ggMS8yIGlzIGEgdXNhYmxlIHZhbHVlLgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gMmAKKyAgICBmaQorICAgIDs7CisgIGVzYWMKK10pCitpZiB0ZXN0IC1uICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gOyB0aGVuCisgIEFDX01TR19SRVNVTFQoJGx0X2N2X3N5c19tYXhfY21kX2xlbikKK2Vsc2UKKyAgQUNfTVNHX1JFU1VMVChub25lKQorZmkKK21heF9jbWRfbGVuPSRsdF9jdl9zeXNfbWF4X2NtZF9sZW4KK19MVF9ERUNMKFtdLCBbbWF4X2NtZF9sZW5dLCBbMF0sCisgICAgW1doYXQgaXMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgY29tbWFuZD9dKQorXSkjIExUX0NNRF9NQVhfTEVOCisKKyMgT2xkIG5hbWU6CitBVV9BTElBUyhbQUNfTElCVE9PTF9TWVNfTUFYX0NNRF9MRU5dLCBbTFRfQ01EX01BWF9MRU5dKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX1NZU19NQVhfQ01EX0xFTl0sIFtdKQorCisKKyMgX0xUX0hFQURFUl9ETEZDTgorIyAtLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0hFQURFUl9ETEZDTl0sCitbQUNfQ0hFQ0tfSEVBREVSUyhbZGxmY24uaF0sIFtdLCBbXSwgW0FDX0lOQ0xVREVTX0RFRkFVTFRdKWRubAorXSkjIF9MVF9IRUFERVJfRExGQ04KKworCisjIF9MVF9UUllfRExPUEVOX1NFTEYgKEFDVElPTi1JRi1UUlVFLCBBQ1RJT04tSUYtVFJVRS1XLVVTQ09SRSwKKyMgICAgICAgICAgICAgICAgICAgICAgQUNUSU9OLUlGLUZBTFNFLCBBQ1RJT04tSUYtQ1JPU1MtQ09NUElMSU5HKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX1RSWV9ETE9QRU5fU0VMRl0sCitbbTRfcmVxdWlyZShbX0xUX0hFQURFUl9ETEZDTl0pZG5sCitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIFskNF0KK2Vsc2UKKyAgbHRfZGx1bmtub3duPTA7IGx0X2Rsbm9fdXNjb3JlPTE7IGx0X2RsbmVlZF91c2NvcmU9MgorICBsdF9zdGF0dXM9JGx0X2RsdW5rbm93bgorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorWyNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaWYgSEFWRV9ETEZDTl9ICisjaW5jbHVkZSA8ZGxmY24uaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lmZGVmIFJUTERfR0xPQkFMCisjICBkZWZpbmUgTFRfRExHTE9CQUwJCVJUTERfR0xPQkFMCisjZWxzZQorIyAgaWZkZWYgRExfR0xPQkFMCisjICAgIGRlZmluZSBMVF9ETEdMT0JBTAkJRExfR0xPQkFMCisjICBlbHNlCisjICAgIGRlZmluZSBMVF9ETEdMT0JBTAkJMAorIyAgZW5kaWYKKyNlbmRpZgorCisvKiBXZSBtYXkgaGF2ZSB0byBkZWZpbmUgTFRfRExMQVpZX09SX05PVyBpbiB0aGUgY29tbWFuZCBsaW5lIGlmIHdlCisgICBmaW5kIG91dCBpdCBkb2VzIG5vdCB3b3JrIGluIHNvbWUgcGxhdGZvcm0uICovCisjaWZuZGVmIExUX0RMTEFaWV9PUl9OT1cKKyMgIGlmZGVmIFJUTERfTEFaWQorIyAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkJUlRMRF9MQVpZCisjICBlbHNlCisjICAgIGlmZGVmIERMX0xBWlkKKyMgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkJRExfTEFaWQorIyAgICBlbHNlCisjICAgICAgaWZkZWYgUlRMRF9OT1cKKyMgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCVJUTERfTk9XCisjICAgICAgZWxzZQorIyAgICAgICAgaWZkZWYgRExfTk9XCisjICAgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCURMX05PVworIyAgICAgICAgZWxzZQorIyAgICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkwCisjICAgICAgICBlbmRpZgorIyAgICAgIGVuZGlmCisjICAgIGVuZGlmCisjICBlbmRpZgorI2VuZGlmCisKKy8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKKyAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQoraW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworI2VuZGlmCisKK2ludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQoraW50IG1haW4gKCkKK3sKKyAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CisgIGludCBzdGF0dXMgPSAkbHRfZGx1bmtub3duOworCisgIGlmIChzZWxmKQorICAgIHsKKyAgICAgIGlmIChkbHN5bSAoc2VsZiwiZm5vcmQiKSkgICAgICAgc3RhdHVzID0gJGx0X2Rsbm9fdXNjb3JlOworICAgICAgZWxzZQorICAgICAgICB7CisJICBpZiAoZGxzeW0oIHNlbGYsIl9mbm9yZCIpKSAgc3RhdHVzID0gJGx0X2RsbmVlZF91c2NvcmU7CisgICAgICAgICAgZWxzZSBwdXRzIChkbGVycm9yICgpKTsKKwl9CisgICAgICAvKiBkbGNsb3NlIChzZWxmKTsgKi8KKyAgICB9CisgIGVsc2UKKyAgICBwdXRzIChkbGVycm9yICgpKTsKKworICByZXR1cm4gc3RhdHVzOworfV0KK19MVF9FT0YKKyAgaWYgQUNfVFJZX0VWQUwoYWNfbGluaykgJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAyPi9kZXYvbnVsbDsgdGhlbgorICAgICguL2NvbmZ0ZXN0OyBleGl0OyApID4mQVNfTUVTU0FHRV9MT0dfRkQgMj4vZGV2L251bGwKKyAgICBsdF9zdGF0dXM9JD8KKyAgICBjYXNlIHgkbHRfc3RhdHVzIGluCisgICAgICB4JGx0X2Rsbm9fdXNjb3JlKSAkMSA7OworICAgICAgeCRsdF9kbG5lZWRfdXNjb3JlKSAkMiA7OworICAgICAgeCRsdF9kbHVua25vd258eCopICQzIDs7CisgICAgZXNhYworICBlbHNlIDoKKyAgICAjIGNvbXBpbGF0aW9uIGZhaWxlZAorICAgICQzCisgIGZpCitmaQorcm0gLWZyIGNvbmZ0ZXN0KgorXSkjIF9MVF9UUllfRExPUEVOX1NFTEYKKworCisjIExUX1NZU19ETE9QRU5fU0VMRgorIyAtLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtMVF9TWVNfRExPUEVOX1NFTEZdLAorW200X3JlcXVpcmUoW19MVF9IRUFERVJfRExGQ05dKWRubAoraWYgdGVzdCAieCRlbmFibGVfZGxvcGVuIiAhPSB4eWVzOyB0aGVuCisgIGVuYWJsZV9kbG9wZW49dW5rbm93bgorICBlbmFibGVfZGxvcGVuX3NlbGY9dW5rbm93bgorICBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPXVua25vd24KK2Vsc2UKKyAgbHRfY3ZfZGxvcGVuPW5vCisgIGx0X2N2X2Rsb3Blbl9saWJzPQorCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYmVvcyopCisgICAgbHRfY3ZfZGxvcGVuPSJsb2FkX2FkZF9vbiIKKyAgICBsdF9jdl9kbG9wZW5fbGlicz0KKyAgICBsdF9jdl9kbG9wZW5fc2VsZj15ZXMKKyAgICA7OworCisgIG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgIGx0X2N2X2Rsb3Blbj0iTG9hZExpYnJhcnkiCisgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CisgICAgOzsKKworICBjeWd3aW4qKQorICAgIGx0X2N2X2Rsb3Blbj0iZGxvcGVuIgorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgIDs7CisKKyAgZGFyd2luKikKKyAgIyBpZiBsaWJkbCBpcyBpbnN0YWxsZWQgd2UgbmVlZCB0byBsaW5rIGFnYWluc3QgaXQKKyAgICBBQ19DSEVDS19MSUIoW2RsXSwgW2Rsb3Blbl0sCisJCVtsdF9jdl9kbG9wZW49ImRsb3BlbiIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGwiXSxbCisgICAgbHRfY3ZfZGxvcGVuPSJkeWxkIgorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgIGx0X2N2X2Rsb3Blbl9zZWxmPXllcworICAgIF0pCisgICAgOzsKKworICAqKQorICAgIEFDX0NIRUNLX0ZVTkMoW3NobF9sb2FkXSwKKwkgIFtsdF9jdl9kbG9wZW49InNobF9sb2FkIl0sCisgICAgICBbQUNfQ0hFQ0tfTElCKFtkbGRdLCBbc2hsX2xvYWRdLAorCSAgICBbbHRfY3ZfZGxvcGVuPSJzaGxfbG9hZCIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGxkIl0sCisJW0FDX0NIRUNLX0ZVTkMoW2Rsb3Blbl0sCisJICAgICAgW2x0X2N2X2Rsb3Blbj0iZGxvcGVuIl0sCisJICBbQUNfQ0hFQ0tfTElCKFtkbF0sIFtkbG9wZW5dLAorCQlbbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsIl0sCisJICAgIFtBQ19DSEVDS19MSUIoW3N2bGRdLCBbZGxvcGVuXSwKKwkJICBbbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbHN2bGQiXSwKKwkgICAgICBbQUNfQ0hFQ0tfTElCKFtkbGRdLCBbZGxkX2xpbmtdLAorCQkgICAgW2x0X2N2X2Rsb3Blbj0iZGxkX2xpbmsiIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsZCJdKQorCSAgICAgIF0pCisJICAgIF0pCisJICBdKQorCV0pCisgICAgICBdKQorICAgIDs7CisgIGVzYWMKKworICBpZiB0ZXN0ICJ4JGx0X2N2X2Rsb3BlbiIgIT0geG5vOyB0aGVuCisgICAgZW5hYmxlX2Rsb3Blbj15ZXMKKyAgZWxzZQorICAgIGVuYWJsZV9kbG9wZW49bm8KKyAgZmkKKworICBjYXNlICRsdF9jdl9kbG9wZW4gaW4KKyAgZGxvcGVuKQorICAgIHNhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKyAgICB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9kbGZjbl9oIiA9IHh5ZXMgJiYgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtREhBVkVfRExGQ05fSCIKKworICAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisgICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBMREZMQUdTPVwiXCRMREZMQUdTICRleHBvcnRfZHluYW1pY19mbGFnX3NwZWNcIgorCisgICAgc2F2ZV9MSUJTPSIkTElCUyIKKyAgICBMSUJTPSIkbHRfY3ZfZGxvcGVuX2xpYnMgJExJQlMiCisKKyAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBhIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGZdLAorCSAgbHRfY3ZfZGxvcGVuX3NlbGYsIFtkbmwKKwkgIF9MVF9UUllfRExPUEVOX1NFTEYoCisJICAgIGx0X2N2X2Rsb3Blbl9zZWxmPXllcywgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzLAorCSAgICBsdF9jdl9kbG9wZW5fc2VsZj1ubywgbHRfY3ZfZGxvcGVuX3NlbGY9Y3Jvc3MpCisgICAgXSkKKworICAgIGlmIHRlc3QgIngkbHRfY3ZfZGxvcGVuX3NlbGYiID0geHllczsgdGhlbgorICAgICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBMREZMQUdTPVwiXCRMREZMQUdTICRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY1wiCisgICAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBhIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGZdLAorCSAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljLCBbZG5sCisJICBfTFRfVFJZX0RMT1BFTl9TRUxGKAorCSAgICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9eWVzLCBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9eWVzLAorCSAgICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9bm8sICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9Y3Jvc3MpCisgICAgICBdKQorICAgIGZpCisKKyAgICBDUFBGTEFHUz0iJHNhdmVfQ1BQRkxBR1MiCisgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKyAgICBMSUJTPSIkc2F2ZV9MSUJTIgorICAgIDs7CisgIGVzYWMKKworICBjYXNlICRsdF9jdl9kbG9wZW5fc2VsZiBpbgorICB5ZXN8bm8pIGVuYWJsZV9kbG9wZW5fc2VsZj0kbHRfY3ZfZGxvcGVuX3NlbGYgOzsKKyAgKikgZW5hYmxlX2Rsb3Blbl9zZWxmPXVua25vd24gOzsKKyAgZXNhYworCisgIGNhc2UgJGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYyBpbgorICB5ZXN8bm8pIGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9JGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYyA7OworICAqKSBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPXVua25vd24gOzsKKyAgZXNhYworZmkKK19MVF9ERUNMKFtkbG9wZW5fc3VwcG9ydF0sIFtlbmFibGVfZGxvcGVuXSwgWzBdLAorCSBbV2hldGhlciBkbG9wZW4gaXMgc3VwcG9ydGVkXSkKK19MVF9ERUNMKFtkbG9wZW5fc2VsZl0sIFtlbmFibGVfZGxvcGVuX3NlbGZdLCBbMF0sCisJIFtXaGV0aGVyIGRsb3BlbiBvZiBwcm9ncmFtcyBpcyBzdXBwb3J0ZWRdKQorX0xUX0RFQ0woW2Rsb3Blbl9zZWxmX3N0YXRpY10sIFtlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljXSwgWzBdLAorCSBbV2hldGhlciBkbG9wZW4gb2Ygc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkXSkKK10pIyBMVF9TWVNfRExPUEVOX1NFTEYKKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtBQ19MSUJUT09MX0RMT1BFTl9TRUxGXSwgW0xUX1NZU19ETE9QRU5fU0VMRl0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfRExPUEVOX1NFTEZdLCBbXSkKKworCisjIF9MVF9DT01QSUxFUl9DX08oW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgdG8gc2VlIGlmIG9wdGlvbnMgLWMgYW5kIC1vIGFyZSBzaW11bHRhbmVvdXNseSBzdXBwb3J0ZWQgYnkgY29tcGlsZXIuCisjIFRoaXMgbWFjcm8gZG9lcyBub3QgaGFyZCBjb2RlIHRoZSBjb21waWxlciBsaWtlIEFDX1BST0dfQ0NfQ19PLgorbTRfZGVmdW4oW19MVF9DT01QSUxFUl9DX09dLAorW200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCittNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK200X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAorQUNfQ0FDSEVfQ0hFQ0soW2lmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHRdLAorICBbX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpXSwKKyAgW19MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKT1ubworICAgJFJNIC1yIGNvbmZ0ZXN0IDI+L2Rldi9udWxsCisgICBta2RpciBjb25mdGVzdAorICAgY2QgY29uZnRlc3QKKyAgIG1rZGlyIG91dAorICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisKKyAgIGx0X2NvbXBpbGVyX2ZsYWc9Ii1vIG91dC9jb25mdGVzdDIuJGFjX29iamV4dCIKKyAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCisgICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgorICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucworICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KKyAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAorICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgLWUgJ3M6IFtbXiBdXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCisgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRsdF9jb21waWxlXCIiID4mQVNfTUVTU0FHRV9MT0dfRkQpCisgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+b3V0L2NvbmZ0ZXN0LmVycikKKyAgIGFjX3N0YXR1cz0kPworICAgY2F0IG91dC9jb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0CisgICB0aGVuCisgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICAgICAkRUNITyAiJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBvdXQvY29uZnRlc3QuZXJyID5vdXQvY29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBvdXQvY29uZnRlc3QuZXIyIHx8IGRpZmYgb3V0L2NvbmZ0ZXN0LmV4cCBvdXQvY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICBfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSk9eWVzCisgICAgIGZpCisgICBmaQorICAgY2htb2QgdSt3IC4gMj4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICRSTSBjb25mdGVzdCoKKyAgICMgU0dJIEMrKyBjb21waWxlciB3aWxsIGNyZWF0ZSBkaXJlY3Rvcnkgb3V0L2lpX2ZpbGVzLyBmb3IKKyAgICMgdGVtcGxhdGUgaW5zdGFudGlhdGlvbgorICAgdGVzdCAtZCBvdXQvaWlfZmlsZXMgJiYgJFJNIG91dC9paV9maWxlcy8qICYmIHJtZGlyIG91dC9paV9maWxlcworICAgJFJNIG91dC8qICYmIHJtZGlyIG91dAorICAgY2QgLi4KKyAgICRSTSAtciBjb25mdGVzdAorICAgJFJNIGNvbmZ0ZXN0KgorXSkKK19MVF9UQUdERUNMKFtjb21waWxlcl9jX29dLCBbbHRfY3ZfcHJvZ19jb21waWxlcl9jX29dLCBbMV0sCisJW0RvZXMgY29tcGlsZXIgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydCAtYyBhbmQgLW8gb3B0aW9ucz9dKQorXSkjIF9MVF9DT01QSUxFUl9DX08KKworCisjIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTKFtUQUdOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayB0byBzZWUgaWYgd2UgY2FuIGRvIGhhcmQgbGlua3MgdG8gbG9jayBzb21lIGZpbGVzIGlmIG5lZWRlZAorbTRfZGVmdW4oW19MVF9DT01QSUxFUl9GSUxFX0xPQ0tTXSwKK1ttNF9yZXF1aXJlKFtfTFRfRU5BQkxFX0xPQ0tdKWRubAorbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCitfTFRfQ09NUElMRVJfQ19PKFskMV0pCisKK2hhcmRfbGlua3M9Im5vdHRlc3RlZCIKK2lmIHRlc3QgIiRfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSkiID0gbm8gJiYgdGVzdCAiJG5lZWRfbG9ja3MiICE9IG5vOyB0aGVuCisgICMgZG8gbm90IG92ZXJ3cml0ZSB0aGUgdmFsdWUgb2YgbmVlZF9sb2NrcyBwcm92aWRlZCBieSB0aGUgdXNlcgorICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rc10pCisgIGhhcmRfbGlua3M9eWVzCisgICRSTSBjb25mdGVzdCoKKyAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KKyAgdG91Y2ggY29uZnRlc3QuYQorICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4mNSB8fCBoYXJkX2xpbmtzPW5vCisgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCisgIEFDX01TR19SRVNVTFQoWyRoYXJkX2xpbmtzXSkKKyAgaWYgdGVzdCAiJGhhcmRfbGlua3MiID0gbm87IHRoZW4KKyAgICBBQ19NU0dfV0FSTihbYCRDQycgZG9lcyBub3Qgc3VwcG9ydCBgLWMgLW8nLCBzbyBgbWFrZSAtaicgbWF5IGJlIHVuc2FmZV0pCisgICAgbmVlZF9sb2Nrcz13YXJuCisgIGZpCitlbHNlCisgIG5lZWRfbG9ja3M9bm8KK2ZpCitfTFRfREVDTChbXSwgW25lZWRfbG9ja3NdLCBbMV0sIFtNdXN0IHdlIGxvY2sgZmlsZXMgd2hlbiBkb2luZyBjb21waWxhdGlvbj9dKQorXSkjIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTCisKKworIyBfTFRfQ0hFQ0tfT0JKRElSCisjIC0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfQ0hFQ0tfT0JKRElSXSwKK1tBQ19DQUNIRV9DSEVDSyhbZm9yIG9iamRpcl0sIFtsdF9jdl9vYmpkaXJdLAorW3JtIC1mIC5saWJzIDI+L2Rldi9udWxsCitta2RpciAubGlicyAyPi9kZXYvbnVsbAoraWYgdGVzdCAtZCAubGliczsgdGhlbgorICBsdF9jdl9vYmpkaXI9LmxpYnMKK2Vsc2UKKyAgIyBNUy1ET1MgZG9lcyBub3QgYWxsb3cgZmlsZW5hbWVzIHRoYXQgYmVnaW4gd2l0aCBhIGRvdC4KKyAgbHRfY3Zfb2JqZGlyPV9saWJzCitmaQorcm1kaXIgLmxpYnMgMj4vZGV2L251bGxdKQorb2JqZGlyPSRsdF9jdl9vYmpkaXIKK19MVF9ERUNMKFtdLCBbb2JqZGlyXSwgWzBdLAorICAgICAgICAgW1RoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlc10pZG5sCittNF9wYXR0ZXJuX2FsbG93KFtMVF9PQkpESVJdKWRubAorQUNfREVGSU5FX1VOUVVPVEVEKExUX09CSkRJUiwgIiRsdF9jdl9vYmpkaXIvIiwKKyAgW0RlZmluZSB0byB0aGUgc3ViLWRpcmVjdG9yeSBpbiB3aGljaCBsaWJ0b29sIHN0b3JlcyB1bmluc3RhbGxlZCBsaWJyYXJpZXMuXSkKK10pIyBfTFRfQ0hFQ0tfT0JKRElSCisKKworIyBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayBoYXJkY29kaW5nIGF0dHJpYnV0ZXMuCittNF9kZWZ1bihbX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRIXSwKK1tBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXNdKQorX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT0KK2lmIHRlc3QgLW4gIiRfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKSIgfHwKKyAgIHRlc3QgLW4gIiRfTFRfVEFHVkFSKHJ1bnBhdGhfdmFyLCAkMSkiIHx8CisgICB0ZXN0ICJYJF9MVF9UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSkiID0gIlh5ZXMiIDsgdGhlbgorCisgICMgV2UgY2FuIGhhcmRjb2RlIG5vbi1leGlzdGVudCBkaXJlY3Rvcmllcy4KKyAgaWYgdGVzdCAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSkiICE9IG5vICYmCisgICAgICMgSWYgdGhlIG9ubHkgbWVjaGFuaXNtIHRvIGF2b2lkIGhhcmRjb2RpbmcgaXMgc2hsaWJwYXRoX3Zhciwgd2UKKyAgICAgIyBoYXZlIHRvIHJlbGluaywgb3RoZXJ3aXNlIHdlIG1pZ2h0IGxpbmsgd2l0aCBhbiBpbnN0YWxsZWQgbGlicmFyeQorICAgICAjIHdoZW4gd2Ugc2hvdWxkIGJlIGxpbmtpbmcgd2l0aCBhIHlldC10by1iZS1pbnN0YWxsZWQgb25lCisgICAgICMjIHRlc3QgIiRfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKSIgIT0gbm8gJiYKKyAgICAgdGVzdCAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpIiAhPSBubzsgdGhlbgorICAgICMgTGlua2luZyBhbHdheXMgaGFyZGNvZGVzIHRoZSB0ZW1wb3JhcnkgbGlicmFyeSBkaXJlY3RvcnkuCisgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT1yZWxpbmsKKyAgZWxzZQorICAgICMgV2UgY2FuIGxpbmsgd2l0aG91dCBoYXJkY29kaW5nLCBhbmQgd2UgY2FuIGhhcmRjb2RlIG5vbmV4aXN0aW5nIGRpcnMuCisgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT1pbW1lZGlhdGUKKyAgZmkKK2Vsc2UKKyAgIyBXZSBjYW5ub3QgaGFyZGNvZGUgYW55dGhpbmcsIG9yIGVsc2Ugd2UgY2FuIG9ubHkgaGFyZGNvZGUgZXhpc3RpbmcKKyAgIyBkaXJlY3Rvcmllcy4KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT11bnN1cHBvcnRlZAorZmkKK0FDX01TR19SRVNVTFQoWyRfTFRfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpXSkKKworaWYgdGVzdCAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSkiID0gcmVsaW5rIHx8CisgICB0ZXN0ICIkX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSkiID0geWVzOyB0aGVuCisgICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IHN1cHBvcnRlZAorICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCitlbGlmIHRlc3QgIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiID0geWVzIHx8CisgICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IG5vOyB0aGVuCisgICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IG5lY2Vzc2FyeQorICBlbmFibGVfZmFzdF9pbnN0YWxsPW5lZWRsZXNzCitmaQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9hY3Rpb25dLCBbMF0sCisgICAgW0hvdyB0byBoYXJkY29kZSBhIHNoYXJlZCBsaWJyYXJ5IHBhdGggaW50byBhbiBleGVjdXRhYmxlXSkKK10pIyBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgKKworCisjIF9MVF9DTURfU1RSSVBMSUIKKyMgLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9DTURfU1RSSVBMSUJdLAorW200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSkKK3N0cmlwbGliPQorb2xkX3N0cmlwbGliPQorQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHN0cmlwcGluZyBsaWJyYXJpZXMgaXMgcG9zc2libGVdKQoraWYgdGVzdCAtbiAiJFNUUklQIiAmJiAkU1RSSVAgLVYgMj4mMSB8ICRHUkVQICJHTlUgc3RyaXAiID4vZGV2L251bGw7IHRoZW4KKyAgdGVzdCAteiAiJG9sZF9zdHJpcGxpYiIgJiYgb2xkX3N0cmlwbGliPSIkU1RSSVAgLS1zdHJpcC1kZWJ1ZyIKKyAgdGVzdCAteiAiJHN0cmlwbGliIiAmJiBzdHJpcGxpYj0iJFNUUklQIC0tc3RyaXAtdW5uZWVkZWQiCisgIEFDX01TR19SRVNVTFQoW3llc10pCitlbHNlCisjIEZJWE1FIC0gaW5zZXJ0IHNvbWUgcmVhbCB0ZXN0cywgaG9zdF9vcyBpc24ndCByZWFsbHkgZ29vZCBlbm91Z2gKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBkYXJ3aW4qKQorICAgIGlmIHRlc3QgLW4gIiRTVFJJUCIgOyB0aGVuCisgICAgICBzdHJpcGxpYj0iJFNUUklQIC14IgorICAgICAgb2xkX3N0cmlwbGliPSIkU1RSSVAgLVMiCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIGVsc2UKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBmaQorICAgIDs7CisgICopCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIDs7CisgIGVzYWMKK2ZpCitfTFRfREVDTChbXSwgW29sZF9zdHJpcGxpYl0sIFsxXSwgW0NvbW1hbmRzIHRvIHN0cmlwIGxpYnJhcmllc10pCitfTFRfREVDTChbXSwgW3N0cmlwbGliXSwgWzFdKQorXSkjIF9MVF9DTURfU1RSSVBMSUIKKworCisjIF9MVF9TWVNfRFlOQU1JQ19MSU5LRVIoW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFBPUlRNRSBGaWxsIGluIHlvdXIgbGQuc28gY2hhcmFjdGVyaXN0aWNzCittNF9kZWZ1bihbX0xUX1NZU19EWU5BTUlDX0xJTktFUl0sCitbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAorbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9PQkpEVU1QXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCittNF9yZXF1aXJlKFtfTFRfQ0hFQ0tfU0hFTExfRkVBVFVSRVNdKWRubAorQUNfTVNHX0NIRUNLSU5HKFtkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3NdKQorbTRfaWYoWyQxXSwKKwlbXSwgWworaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGRhcndpbiopIGx0X2F3a19hcmc9Ii9ebGlicmFyaWVzOi8sL0xSLyIgOzsKKyAgICAqKSBsdF9hd2tfYXJnPSIvXmxpYnJhcmllczovIiA7OworICBlc2FjCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBtaW5ndyogfCBjZWdjYyopIGx0X3NlZF9zdHJpcF9lcT0icyw9XChbW0EtWmEtel1dOlwpLFwxLGciIDs7CisgICAgKikgbHRfc2VkX3N0cmlwX2VxPSJzLD0vLC8sZyIgOzsKKyAgZXNhYworICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgYXdrICRsdF9hd2tfYXJnIHwgJFNFRCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAkbHRfc2VkX3N0cmlwX2VxYAorICBjYXNlICRsdF9zZWFyY2hfcGF0aF9zcGVjIGluCisgICpcOyopCisgICAgIyBpZiB0aGUgcGF0aCBjb250YWlucyAiOyIgdGhlbiB3ZSBhc3N1bWUgaXQgdG8gYmUgdGhlIHNlcGFyYXRvcgorICAgICMgb3RoZXJ3aXNlIGRlZmF1bHQgdG8gdGhlIHN0YW5kYXJkIHBhdGggc2VwYXJhdG9yIChpLmUuICI6IikgLSBpdCBpcworICAgICMgYXNzdW1lZCB0aGF0IG5vIHBhcnQgb2YgYSBub3JtYWwgcGF0aG5hbWUgY29udGFpbnMgIjsiIGJ1dCB0aGF0IHNob3VsZAorICAgICMgb2theSBpbiB0aGUgcmVhbCB3b3JsZCB3aGVyZSAiOyIgaW4gZGlycGF0aHMgaXMgaXRzZWxmIHByb2JsZW1hdGljLgorICAgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICdzLzsvIC9nJ2AKKyAgICA7OworICAqKQorICAgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorICAgIDs7CisgIGVzYWMKKyAgIyBPaywgbm93IHdlIGhhdmUgdGhlIHBhdGgsIHNlcGFyYXRlZCBieSBzcGFjZXMsIHdlIGNhbiBzdGVwIHRocm91Z2ggaXQKKyAgIyBhbmQgYWRkIG11bHRpbGliIGRpciBpZiBuZWNlc3NhcnkuCisgIGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPQorICBsdF9tdWx0aV9vc19kaXI9YCRDQyAkQ1BQRkxBR1MgJENGTEFHUyAkTERGTEFHUyAtcHJpbnQtbXVsdGktb3MtZGlyZWN0b3J5IDI+L2Rldi9udWxsYAorICBmb3IgbHRfc3lzX3BhdGggaW4gJGx0X3NlYXJjaF9wYXRoX3NwZWM7IGRvCisgICAgaWYgdGVzdCAtZCAiJGx0X3N5c19wYXRoLyRsdF9tdWx0aV9vc19kaXIiOyB0aGVuCisgICAgICBsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjICRsdF9zeXNfcGF0aC8kbHRfbXVsdGlfb3NfZGlyIgorICAgIGVsc2UKKyAgICAgIHRlc3QgLWQgIiRsdF9zeXNfcGF0aCIgJiYgXAorCWx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMgJGx0X3N5c19wYXRoIgorICAgIGZpCisgIGRvbmUKKyAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCBhd2sgJworQkVHSU4ge1JTPSIgIjsgRlM9Ii98XG4iO30geworICBsdF9mb289IiI7CisgIGx0X2NvdW50PTA7CisgIGZvciAobHRfaSA9IE5GOyBsdF9pID4gMDsgbHRfaS0tKSB7CisgICAgaWYgKCRsdF9pICE9ICIiICYmICRsdF9pICE9ICIuIikgeworICAgICAgaWYgKCRsdF9pID09ICIuLiIpIHsKKyAgICAgICAgbHRfY291bnQrKzsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChsdF9jb3VudCA9PSAwKSB7CisgICAgICAgICAgbHRfZm9vPSIvIiAkbHRfaSBsdF9mb287CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgbHRfY291bnQtLTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorICBpZiAobHRfZm9vICE9ICIiKSB7IGx0X2ZyZXFbW2x0X2Zvb11dKys7IH0KKyAgaWYgKGx0X2ZyZXFbW2x0X2Zvb11dID09IDEpIHsgcHJpbnQgbHRfZm9vOyB9Cit9J2AKKyAgIyBBV0sgcHJvZ3JhbSBhYm92ZSBlcnJvbmVvdXNseSBwcmVwZW5kcyAnLycgdG8gQzovZG9zL3BhdGhzCisgICMgZm9yIHRoZXNlIGhvc3RzLgorICBjYXNlICRob3N0X29zIGluCisgICAgbWluZ3cqIHwgY2VnY2MqKSBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHxcCisgICAgICAkU0VEICdzLC9cKFtbQS1aYS16XV06XCksXDEsZydgIDs7CisgIGVzYWMKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJGx0X05MMlNQYAorZWxzZQorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCitmaV0pCitsaWJyYXJ5X25hbWVzX3NwZWM9CitsaWJuYW1lX3NwZWM9J2xpYiRuYW1lJworc29uYW1lX3NwZWM9CitzaHJleHRfY21kcz0iLnNvIgorcG9zdGluc3RhbGxfY21kcz0KK3Bvc3R1bmluc3RhbGxfY21kcz0KK2ZpbmlzaF9jbWRzPQorZmluaXNoX2V2YWw9CitzaGxpYnBhdGhfdmFyPQorc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXVua25vd24KK3ZlcnNpb25fdHlwZT1ub25lCitkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCitzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiIKK25lZWRfbGliX3ByZWZpeD11bmtub3duCitoYXJkY29kZV9pbnRvX2xpYnM9bm8KKworIyB3aGVuIHlvdSBzZXQgbmVlZF92ZXJzaW9uIHRvIG5vLCBtYWtlIHN1cmUgaXQgZG9lcyBub3QgY2F1c2UgLXNldF92ZXJzaW9uCisjIGZsYWdzIHRvIGJlIGxlZnQgd2l0aG91dCBhcmd1bWVudHMKK25lZWRfdmVyc2lvbj11bmtub3duCisKK2Nhc2UgJGhvc3Rfb3MgaW4KK2FpeDMqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZS5hJworICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKKworICAjIEFJWCAzIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIHdlIGFwcGVuZCBhIG1ham9yIHZlcnNpb24gdG8gdGhlIG5hbWUuCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIDs7CisKK2FpeFtbNC05XV0qKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICAgICMgQUlYIDUgc3VwcG9ydHMgSUE2NAorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGVsc2UKKyAgICAjIFdpdGggR0NDIHVwIHRvIDIuOTUueCwgY29sbGVjdDIgd291bGQgY3JlYXRlIGFuIGltcG9ydCBmaWxlCisgICAgIyBmb3IgZGVwZW5kZW5jZSBsaWJyYXJpZXMuICBUaGUgaW1wb3J0IGZpbGUgd291bGQgc3RhcnQgd2l0aAorICAgICMgdGhlIGxpbmUgYCMhIC4nLiAgVGhpcyB3b3VsZCBjYXVzZSB0aGUgZ2VuZXJhdGVkIGxpYnJhcnkgdG8KKyAgICAjIGRlcGVuZCBvbiBgLicsIGFsd2F5cyBhbiBpbnZhbGlkIGxpYnJhcnkuICBUaGlzIHdhcyBmaXhlZCBpbgorICAgICMgZGV2ZWxvcG1lbnQgc25hcHNob3RzIG9mIEdDQyBwcmlvciB0byAzLjAuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4NCB8IGFpeDQuW1swMV1dIHwgYWl4NC5bWzAxXV0uKikKKyAgICAgIGlmIHsgZWNobyAnI2lmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA5NyknCisJICAgZWNobyAnIHllcyAnCisJICAgZWNobyAnI2VuZGlmJzsgfSB8ICR7Q0N9IC1FIC0gfCAkR1JFUCB5ZXMgPiAvZGV2L251bGw7IHRoZW4KKwk6CisgICAgICBlbHNlCisJY2FuX2J1aWxkX3NoYXJlZD1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgZXNhYworICAgICMgQUlYIChvbiBQb3dlciopIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIGN1cnJlbnRseSB3ZSBjYW4gbm90IGhhcmRjb2RlIGNvcnJlY3QKKyAgICAjIHNvbmFtZSBpbnRvIGV4ZWN1dGFibGUuIFByb2JhYmx5IHdlIGNhbiBhZGQgdmVyc2lvbmluZyBzdXBwb3J0IHRvCisgICAgIyBjb2xsZWN0Miwgc28gYWRkaXRpb25hbCBsaW5rcyBjYW4gYmUgdXNlZnVsIGluIGZ1dHVyZS4KKyAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKyAgICAgICMgSWYgdXNpbmcgcnVuIHRpbWUgbGlua2luZyAob24gQUlYIDQuMiBvciBsYXRlcikgdXNlIGxpYjxuYW1lPi5zbworICAgICAgIyBpbnN0ZWFkIG9mIGxpYjxuYW1lPi5hIHRvIGxldCBwZW9wbGUga25vdyB0aGF0IHRoZXNlIGFyZSBub3QKKyAgICAgICMgdHlwaWNhbCBBSVggc2hhcmVkIGxpYnJhcmllcy4KKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIGVsc2UKKyAgICAgICMgV2UgcHJlc2VydmUgLmEgYXMgZXh0ZW5zaW9uIGZvciBzaGFyZWQgbGlicmFyaWVzIHRocm91Z2ggQUlYNC4yCisgICAgICAjIGFuZCBsYXRlciB3aGVuIHdlIGFyZSBub3QgZG9pbmcgcnVuIHRpbWUgbGlua2luZy4KKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uYSAkbGlibmFtZS5hJworICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICBmaQorICAgIHNobGlicGF0aF92YXI9TElCUEFUSAorICBmaQorICA7OworCithbWlnYW9zKikKKyAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgcG93ZXJwYykKKyAgICAjIFNpbmNlIEp1bHkgMjAwNyBBbWlnYU9TNCBvZmZpY2lhbGx5IHN1cHBvcnRzIC5zbyBsaWJyYXJpZXMuCisgICAgIyBXaGVuIGNvbXBpbGluZyB0aGUgZXhlY3V0YWJsZSwgYWRkIC11c2UtZHlubGQgLUxzb2JqczogdG8gdGhlIGNvbXBpbGVsaW5lLgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIDs7CisgIG02OGspCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5peGxpYnJhcnkgJGxpYm5hbWUuYScKKyAgICAjIENyZWF0ZSAke2xpYm5hbWV9X2l4bGlicmFyeS5hIGVudHJpZXMgaW4gL3N5cy9saWJzLgorICAgIGZpbmlzaF9ldmFsPSdmb3IgbGliIGluIGBscyAkbGliZGlyLyouaXhsaWJyYXJ5IDI+L2Rldi9udWxsYDsgZG8gbGlibmFtZT1gZnVuY19lY2hvX2FsbCAiJGxpYiIgfCAkU0VEICdcJydzJV4uKi9cKFtbXi9dXSpcKVwuaXhsaWJyYXJ5JCVcMSUnXCcnYDsgdGVzdCAkUk0gL3N5cy9saWJzLyR7bGlibmFtZX1faXhsaWJyYXJ5LmE7ICRzaG93ICJjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIjsgY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSB8fCBleGl0IDE7IGRvbmUnCisgICAgOzsKKyAgZXNhYworICA7OworCitiZW9zKikKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgorICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAorICA7OworCitic2RpW1s0NV1dKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvWDExL2xpYiAvdXNyL2NvbnRyaWIvbGliIC9saWIgL3Vzci9sb2NhbC9saWIiCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCisgICMgdGhlIGRlZmF1bHQgbGQuc28uY29uZiBhbHNvIGNvbnRhaW5zIC91c3IvY29udHJpYi9saWIgYW5kCisgICMgL3Vzci9YMTFSNi9saWIgKC91c3IvWDExIGlzIGEgbGluayB0byAvdXNyL1gxMVI2KSwgYnV0IGxldCB1cyBhbGxvdworICAjIGxpYnRvb2wgdG8gaGFyZC1jb2RlIHRoZXNlIGludG8gcHJvZ3JhbXMKKyAgOzsKKworY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICB2ZXJzaW9uX3R5cGU9d2luZG93cworICBzaHJleHRfY21kcz0iLmRsbCIKKyAgbmVlZF92ZXJzaW9uPW5vCisgIG5lZWRfbGliX3ByZWZpeD1ubworCisgIGNhc2UgJEdDQywkY2NfYmFzZW5hbWUgaW4KKyAgeWVzLCopCisgICAgIyBnY2MKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJworICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KKyAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCR7YmFzZV9maWxlfSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KKyAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZX4KKyAgICAgIGNobW9kIGEreCBcJGRsZGlyLyRkbG5hbWV+CisgICAgICBpZiB0ZXN0IC1uICdcJyckc3RyaXBtZSdcJycgJiYgdGVzdCAtbiAnXCcnJHN0cmlwbGliJ1wnJzsgdGhlbgorICAgICAgICBldmFsICdcJyckc3RyaXBsaWIgXCRkbGRpci8kZGxuYW1lJ1wnJyB8fCBleGl0IFwkPzsKKyAgICAgIGZpJworICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgorICAgICAgICRSTSBcJGRscGF0aCcKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgY3lnd2luKikKKyAgICAgICMgQ3lnd2luIERMTHMgdXNlICdjeWcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJworICAgICAgc29uYW1lX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9jeWcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCittNF9pZihbJDFdLCBbXSxbCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgL3Vzci9saWIvdzMyYXBpIl0pCisgICAgICA7OworICAgIG1pbmd3KiB8IGNlZ2NjKikKKyAgICAgICMgTWluR1cgRExMcyB1c2UgdHJhZGl0aW9uYWwgJ2xpYicgcHJlZml4CisgICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKyAgICAgIDs7CisgICAgcHczMiopCisgICAgICAjIHB3MzIgRExMcyB1c2UgJ3B3JyBwcmVmaXggcmF0aGVyIHRoYW4gJ2xpYicKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgOzsKKyAgICBlc2FjCisgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICA7OworCisgICosY2wqKQorICAgICMgTmF0aXZlIE1TVkMKKyAgICBsaWJuYW1lX3NwZWM9JyRuYW1lJworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfS5kbGwubGliJworCisgICAgY2FzZSAkYnVpbGRfb3MgaW4KKyAgICBtaW5ndyopCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9CisgICAgICBsdF9zYXZlX2lmcz0kSUZTCisgICAgICBJRlM9JzsnCisgICAgICBmb3IgbHRfcGF0aCBpbiAkTElCCisgICAgICBkbworICAgICAgICBJRlM9JGx0X3NhdmVfaWZzCisgICAgICAgICMgTGV0IERPUyB2YXJpYWJsZSBleHBhbnNpb24gcHJpbnQgdGhlIHNob3J0IDguMyBzdHlsZSBmaWxlIG5hbWUuCisgICAgICAgIGx0X3BhdGg9YGNkICIkbHRfcGF0aCIgMj4vZGV2L251bGwgJiYgY21kIC8vQyAiZm9yICVpIGluICgiLiIpIGRvIEBlY2hvICV+c2kiYAorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgJGx0X3BhdGgiCisgICAgICBkb25lCisgICAgICBJRlM9JGx0X3NhdmVfaWZzCisgICAgICAjIENvbnZlcnQgdG8gTVNZUyBzdHlsZS4KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgc2VkIC1lICdzfFxcXFx8L3xnJyAtZSAnc3wgXFwoW1thLXpBLVpdXVxcKTp8IC9cXDF8ZycgLWUgJ3N8XiB8fCdgCisgICAgICA7OworICAgIGN5Z3dpbiopCisgICAgICAjIENvbnZlcnQgdG8gdW5peCBmb3JtLCB0aGVuIHRvIGRvcyBmb3JtLCB0aGVuIGJhY2sgdG8gdW5peCBmb3JtCisgICAgICAjIGJ1dCB0aGlzIHRpbWUgZG9zIHN0eWxlIChubyBzcGFjZXMhKSBzbyB0aGF0IHRoZSB1bml4IGZvcm0gbG9va3MKKyAgICAgICMgbGlrZSAvY3lnZHJpdmUvYy9QUk9HUkF+MTovY3lnZHIuLi4KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkTElCImAKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS1kb3MgIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIDI+L2Rldi9udWxsYAorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKyAgICAgIDs7CisgICAgKikKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJExJQiIKKyAgICAgIGlmICRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IFskR1JFUCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGxdOyB0aGVuCisgICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEguCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCisgICAgICBlbHNlCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKyAgICAgIGZpCisgICAgICAjIEZJWE1FOiBmaW5kIHRoZSBzaG9ydCBuYW1lIG9yIHRoZSBwYXRoIGNvbXBvbmVudHMsIGFzIHNwYWNlcyBhcmUKKyAgICAgICMgY29tbW9uLiAoZS5nLiAiUHJvZ3JhbSBGaWxlcyIgLT4gIlBST0dSQX4xIikKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KKyAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgorICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lJworICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgorICAgICAgICRSTSBcJGRscGF0aCcKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxpbmsuZXhlJworICAgIDs7CisKKyAgKikKKyAgICAjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUubGliJworICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAgOzsKKyAgZXNhYworICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KKyAgc2hsaWJwYXRoX3Zhcj1QQVRICisgIDs7CisKK2RhcndpbiogfCByaGFwc29keSopCisgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkeWxkIgorICB2ZXJzaW9uX3R5cGU9ZGFyd2luCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7bWFqb3J9JHNoYXJlZF9leHQgJHtsaWJuYW1lfSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0JworICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIHNobGlicGF0aF92YXI9RFlMRF9MSUJSQVJZX1BBVEgKKyAgc2hyZXh0X2NtZHM9J2B0ZXN0IC4kbW9kdWxlID0gLnllcyAmJiBlY2hvIC5zbyB8fCBlY2hvIC5keWxpYmAnCittNF9pZihbJDFdLCBbXSxbCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAvdXNyL2xvY2FsL2xpYiJdKQorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9sb2NhbC9saWIgL2xpYiAvdXNyL2xpYicKKyAgOzsKKworZGd1eCopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIDs7CisKK2ZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgIyBEcmFnb25GbHkgZG9lcyBub3QgaGF2ZSBhb3V0LiAgV2hlbi9pZiB0aGV5IGltcGxlbWVudCBhIG5ldworICAjIHZlcnNpb25pbmcgbWVjaGFuaXNtLCBhZGp1c3QgdGhpcy4KKyAgaWYgdGVzdCAteCAvdXNyL2Jpbi9vYmpmb3JtYXQ7IHRoZW4KKyAgICBvYmpmb3JtYXQ9YC91c3IvYmluL29iamZvcm1hdGAKKyAgZWxzZQorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBmcmVlYnNkW1syM11dLiopIG9iamZvcm1hdD1hb3V0IDs7CisgICAgKikgb2JqZm9ybWF0PWVsZiA7OworICAgIGVzYWMKKyAgZmkKKyAgdmVyc2lvbl90eXBlPWZyZWVic2QtJG9iamZvcm1hdAorICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KKyAgICBmcmVlYnNkLWVsZiopCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICAgIG5lZWRfdmVyc2lvbj1ubworICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICA7OworICAgIGZyZWVic2QtKikKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICAgICAgbmVlZF92ZXJzaW9uPXllcworICAgICAgOzsKKyAgZXNhYworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBjYXNlICRob3N0X29zIGluCisgIGZyZWVic2QyLiopCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIDs7CisgIGZyZWVic2QzLltbMDFdXSogfCBmcmVlYnNkZWxmMy5bWzAxXV0qKQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgOzsKKyAgZnJlZWJzZDMuW1syLTldXSogfCBmcmVlYnNkZWxmMy5bWzItOV1dKiB8IFwKKyAgZnJlZWJzZDQuW1swLTVdXSB8IGZyZWVic2RlbGY0LltbMC01XV0gfCBmcmVlYnNkNC4xLjEgfCBmcmVlYnNkZWxmNC4xLjEpCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIDs7CisgICopICMgZnJvbSA0LjYgb24sIGFuZCBEcmFnb25GbHkKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIDs7CisgIGVzYWMKKyAgOzsKKworZ251KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0ke21ham9yfSAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworaGFpa3UqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIHJ1bnRpbWVfbG9hZGVyIgorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHttYWpvcn0gJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L3N5c3RlbS9saWInCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisgICMgR2l2ZSBhIHNvbmFtZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBtYWpvciB2ZXJzaW9uIHNvIHRoYXQgZGxkLnNsIHJlZnVzZXMgdG8KKyAgIyBsaW5rIGFnYWluc3Qgb3RoZXIgdmVyc2lvbnMuCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGNhc2UgJGhvc3RfY3B1IGluCisgIGlhNjQqKQorICAgIHNocmV4dF9jbWRzPScuc28nCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc28iCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICBpZiB0ZXN0ICJYJEhQVVhfSUE2NF9NT0RFIiA9IFgzMjsgdGhlbgorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliIgorICAgIGVsc2UKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDY0IC91c3IvbG9jYWwvbGliL2hwdXg2NCIKKyAgICBmaQorICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKKyAgICA7OworICBocHBhKjY0KikKKyAgICBzaHJleHRfY21kcz0nLnNsJworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgorICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRIICMgSG93IHNob3VsZCB3ZSBoYW5kbGUgU0hMSUJfUEFUSAorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvcGEyMF82NCAvdXNyL2Njcy9saWIvcGEyMF82NCIKKyAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisgICAgOzsKKyAgKikKKyAgICBzaHJleHRfY21kcz0nLnNsJworICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCisgICAgc2hsaWJwYXRoX3Zhcj1TSExJQl9QQVRICisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vICMgK3MgaXMgcmVxdWlyZWQgdG8gZW5hYmxlIFNITElCX1BBVEgKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIDs7CisgIGVzYWMKKyAgIyBIUC1VWCBydW5zICpyZWFsbHkqIHNsb3dseSB1bmxlc3Mgc2hhcmVkIGxpYnJhcmllcyBhcmUgbW9kZSA1NTUsIC4uLgorICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA1NTUgJGxpYicKKyAgIyBvciBmYWlscyBvdXRyaWdodCwgc28gb3ZlcnJpZGUgYXRvbWljYWxseToKKyAgaW5zdGFsbF9vdmVycmlkZV9tb2RlPTU1NQorICA7OworCitpbnRlcml4W1szLTldXSopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBkeW5hbWljX2xpbmtlcj0nSW50ZXJpeCAzLnggbGQuc28uMSAoUEUsIGxpa2UgRUxGKScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIG5vbnN0b3B1eCopIHZlcnNpb25fdHlwZT1ub25zdG9wdXggOzsKKyAgICAqKQorCWlmIHRlc3QgIiRsdF9jdl9wcm9nX2dudV9sZCIgPSB5ZXM7IHRoZW4KKwkJdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorCWVsc2UKKwkJdmVyc2lvbl90eXBlPWlyaXgKKwlmaSA7OworICBlc2FjCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBjYXNlICRob3N0X29zIGluCisgIGlyaXg1KiB8IG5vbnN0b3B1eCopCisgICAgbGlic3VmZj0gc2hsaWJzdWZmPQorICAgIDs7CisgICopCisgICAgY2FzZSAkTEQgaW4gIyBsaWJ0b29sLm00IHdpbGwgYWRkIG9uZSBvZiB0aGVzZSBzd2l0Y2hlcyB0byBMRAorICAgICotMzJ8KiItMzIgInwqLW1lbGYzMmJzbWlwfCoiLW1lbGYzMmJzbWlwICIpCisgICAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPTMyLWJpdDs7CisgICAgKi1uMzJ8KiItbjMyICJ8Ki1tZWxmMzJibWlwbjMyfCoiLW1lbGYzMmJtaXBuMzIgIikKKyAgICAgIGxpYnN1ZmY9MzIgc2hsaWJzdWZmPU4zMiBsaWJtYWdpYz1OMzI7OworICAgICotNjR8KiItNjQgInwqLW1lbGY2NGJtaXB8KiItbWVsZjY0Ym1pcCAiKQorICAgICAgbGlic3VmZj02NCBzaGxpYnN1ZmY9NjQgbGlibWFnaWM9NjQtYml0OzsKKyAgICAqKSBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKKyAgICBlc2FjCisgICAgOzsKKyAgZXNhYworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUlkke3NobGlic3VmZn1fUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0gL3Vzci9sb2NhbC9saWIke2xpYnN1ZmZ9IgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IgorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKKyMgTm8gc2hhcmVkIGxpYiBzdXBwb3J0IGZvciBMaW51eCBvbGRsZCwgYW91dCwgb3IgY29mZi4KK2xpbnV4Km9sZGxkKiB8IGxpbnV4KmFvdXQqIHwgbGludXgqY29mZiopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7CisKKyMgVGhpcyBtdXN0IGJlIGdsaWJjL0VMRi4KK2xpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbiAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKworICAjIFNvbWUgYmludXRpbHMgbGQgYXJlIHBhdGNoZWQgdG8gc2V0IERUX1JVTlBBVEgKKyAgQUNfQ0FDSEVfVkFMKFtsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGhdLAorICAgIFtsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICBzYXZlX0xERkxBR1M9JExERkxBR1MKKyAgICBzYXZlX2xpYmRpcj0kbGliZGlyCisgICAgZXZhbCAibGliZGlyPS9mb287IHdsPVwiJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpXCI7IFwKKwkgTERGTEFHUz1cIlwkTERGTEFHUyAkX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSlcIiIKKyAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtdLFtdKV0sCisgICAgICBbQVNfSUYoWyAoJE9CSkRVTVAgLXAgY29uZnRlc3QkYWNfZXhlZXh0KSAyPi9kZXYvbnVsbCB8IGdyZXAgIlJVTlBBVEguKiRsaWJkaXIiID4vZGV2L251bGxdLAorCSBbbHRfY3Zfc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllc10pXSkKKyAgICBMREZMQUdTPSRzYXZlX0xERkxBR1MKKyAgICBsaWJkaXI9JHNhdmVfbGliZGlyCisgICAgXSkKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSRsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgKKworICAjIFRoaXMgaW1wbGllcyBubyBmYXN0X2luc3RhbGwsIHdoaWNoIGlzIHVuYWNjZXB0YWJsZS4KKyAgIyBTb21lIHJld29yayB3aWxsIGJlIG5lZWRlZCB0byBhbGxvdyBmb3IgZmFzdF9pbnN0YWxsCisgICMgYmVmb3JlIHRoaXMgY2FuIGJlIGVuYWJsZWQuCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKworICAjIEFkZCBBQkktc3BlY2lmaWMgZGlyZWN0b3JpZXMgdG8gdGhlIHN5c3RlbSBsaWJyYXJ5IHBhdGguCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliNjQgL3Vzci9saWI2NCAvbGliIC91c3IvbGliIgorCisgICMgQXBwZW5kIGxkLnNvLmNvbmYgY29udGVudHMgdG8gdGhlIHNlYXJjaCBwYXRoCisgIGlmIHRlc3QgLWYgL2V0Yy9sZC5zby5jb25mOyB0aGVuCisgICAgbHRfbGRfZXh0cmE9YGF3ayAnL15pbmNsdWRlIC8geyBzeXN0ZW0oc3ByaW50ZigiY2QgL2V0YzsgY2F0ICVzIDI+L2Rldi9udWxsIiwgXFskXTIpKTsgc2tpcCA9IDE7IH0geyBpZiAoIXNraXApIHByaW50IFxbJF0wOyBza2lwID0gMDsgfScgPCAvZXRjL2xkLnNvLmNvbmYgfCAkU0VEIC1lICdzLyMuKi8vOy9eWwkgXSpod2NhcFsJIF0vZDtzL1s6LAldLyAvZztzLz1bXj1dKiQvLztzLz1bXj0gXSogLyAvZztzLyIvL2c7L14kL2QnIHwgdHIgJ1xuJyAnICdgCisgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyAkbHRfbGRfZXh0cmEiCisKKyAgZmkKKworICAjIFdlIHVzZWQgdG8gdGVzdCBmb3IgL2xpYi9sZC5zby4xIGFuZCBkaXNhYmxlIHNoYXJlZCBsaWJyYXJpZXMgb24KKyAgIyBwb3dlcnBjLCBiZWNhdXNlIE1rTGludXggb25seSBzdXBwb3J0ZWQgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHRoZQorICAjIEdOVSBkeW5hbWljIGxpbmtlci4gIFNpbmNlIHRoaXMgd2FzIGJyb2tlbiB3aXRoIGNyb3NzIGNvbXBpbGVycywKKyAgIyBtb3N0IHBvd2VycGMtbGludXggYm94ZXMgc3VwcG9ydCBkeW5hbWljIGxpbmtpbmcgdGhlc2UgZGF5cyBhbmQKKyAgIyBwZW9wbGUgY2FuIGFsd2F5cyAtLWRpc2FibGUtc2hhcmVkLCB0aGUgdGVzdCB3YXMgcmVtb3ZlZCwgYW5kIHdlCisgICMgYXNzdW1lIHRoZSBHTlUvTGludXggZHluYW1pYyBsaW5rZXIgaXMgaW4gdXNlLgorICBkeW5hbWljX2xpbmtlcj0nR05VL0xpbnV4IGxkLnNvJworICA7OworCituZXRic2QqKQorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisgICAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKKyAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIChhLm91dCkgbGQuc28nCisgIGVsc2UKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgZHluYW1pY19saW5rZXI9J05ldEJTRCBsZC5lbGZfc28nCisgIGZpCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCituZXdzb3M2KQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIDs7CisKKypudG8qIHwgKnFueCopCisgIHZlcnNpb25fdHlwZT1xbngKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgZHluYW1pY19saW5rZXI9J2xkcW54LnNvJworICA7OworCitvcGVuYnNkKikKKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiIKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgICMgU29tZSBvbGRlciB2ZXJzaW9ucyBvZiBPcGVuQlNEICgzLjMgYXQgbGVhc3QpICpkbyogbmVlZCB2ZXJzaW9uZWQgbGlicy4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIG9wZW5ic2QzLjMgfCBvcGVuYnNkMy4zLiopCW5lZWRfdmVyc2lvbj15ZXMgOzsKKyAgICAqKQkJCQluZWVkX3ZlcnNpb249bm8gIDs7CisgIGVzYWMKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIG9wZW5ic2QyLltbODldXSB8IG9wZW5ic2QyLltbODldXS4qKQorCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworCTs7CisgICAgICAqKQorCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKwk7OworICAgICAgZXNhYworICBlbHNlCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBmaQorICA7OworCitvczIqKQorICBsaWJuYW1lX3NwZWM9JyRuYW1lJworICBzaHJleHRfY21kcz0iLmRsbCIKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9ICRsaWJuYW1lLmEnCisgIGR5bmFtaWNfbGlua2VyPSdPUy8yIGxkLmV4ZScKKyAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICisgIDs7CisKK29zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgdmVyc2lvbl90eXBlPW9zZgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3Ivc2hsaWIgL3Vzci9jY3MvbGliIC91c3IvbGliL2NtcGxycy9jYyAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiAvdmFyL3NobGliIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKKyAgOzsKKworcmRvcyopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7CisKK3NvbGFyaXMqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAjIGxkZCBjb21wbGFpbnMgdW5sZXNzIGxpYnJhcmllcyBhcmUgZXhlY3V0YWJsZQorICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCAreCAkbGliJworICA7OworCitzdW5vczQqKQorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovdXNyL2V0YyIgbGRjb25maWcgJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgICAgbmVlZF9saWJfcHJlZml4PW5vCisgIGZpCisgIG5lZWRfdmVyc2lvbj15ZXMKKyAgOzsKKworc3lzdjQgfCBzeXN2NC4zKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKyAgICBzbmkpCisgICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKyAgICAgIDs7CisgICAgc2llbWVucykKKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgOzsKKyAgICBtb3Rvcm9sYSkKKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgbmVlZF92ZXJzaW9uPW5vCisgICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL2xpYiAvdXNyL2xpYiAvdXNyL2Njcy9saWInCisgICAgICA7OworICBlc2FjCisgIDs7CisKK3N5c3Y0Kk1QKikKKyAgaWYgdGVzdCAtZCAvdXNyL25lYyA7dGhlbgorICAgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0uJG1ham9yJworICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGZpCisgIDs7CisKK3N5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQorICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC1lbGYKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC91c3IvZ251L2xpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIgL2xpYicKKyAgZWxzZQorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9jY3MvbGliIC91c3IvbGliJworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIHNjbzMuMnY1KikKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC9saWIiCisJOzsKKyAgICBlc2FjCisgIGZpCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xpYicKKyAgOzsKKwordHBmKikKKyAgIyBUUEYgaXMgYSBjcm9zcy10YXJnZXQgb25seS4gIFByZWZlcnJlZCBjcm9zcy1ob3N0ID0gR05VL0xpbnV4LgorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK3V0czQqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICA7OworCisqKQorICBkeW5hbWljX2xpbmtlcj1ubworICA7OworZXNhYworQUNfTVNHX1JFU1VMVChbJGR5bmFtaWNfbGlua2VyXSkKK3Rlc3QgIiRkeW5hbWljX2xpbmtlciIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCisKK3ZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSJQQVRIICRzaGxpYnBhdGhfdmFyICRydW5wYXRoX3ZhciIKK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsgR0NDX0VYRUNfUFJFRklYIENPTVBJTEVSX1BBVEggTElCUkFSWV9QQVRIIgorZmkKKworaWYgdGVzdCAiJHtsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIgorZmkKK2lmIHRlc3QgIiR7bHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyIKK2ZpCisKK19MVF9ERUNMKFtdLCBbdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmtdLCBbMV0sCisgICAgW1ZhcmlhYmxlcyB3aG9zZSB2YWx1ZXMgc2hvdWxkIGJlIHNhdmVkIGluIGxpYnRvb2wgd3JhcHBlciBzY3JpcHRzIGFuZAorICAgIHJlc3RvcmVkIGF0IGxpbmsgdGltZV0pCitfTFRfREVDTChbXSwgW25lZWRfbGliX3ByZWZpeF0sIFswXSwKKyAgICBbRG8gd2UgbmVlZCB0aGUgImxpYiIgcHJlZml4IGZvciBtb2R1bGVzP10pCitfTFRfREVDTChbXSwgW25lZWRfdmVyc2lvbl0sIFswXSwgW0RvIHdlIG5lZWQgYSB2ZXJzaW9uIGZvciBsaWJyYXJpZXM/XSkKK19MVF9ERUNMKFtdLCBbdmVyc2lvbl90eXBlXSwgWzBdLCBbTGlicmFyeSB2ZXJzaW9uaW5nIHR5cGVdKQorX0xUX0RFQ0woW10sIFtydW5wYXRoX3Zhcl0sIFswXSwgIFtTaGFyZWQgbGlicmFyeSBydW50aW1lIHBhdGggdmFyaWFibGVdKQorX0xUX0RFQ0woW10sIFtzaGxpYnBhdGhfdmFyXSwgWzBdLFtTaGFyZWQgbGlicmFyeSBwYXRoIHZhcmlhYmxlXSkKK19MVF9ERUNMKFtdLCBbc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoXSwgWzBdLAorICAgIFtJcyBzaGxpYnBhdGggc2VhcmNoZWQgYmVmb3JlIHRoZSBoYXJkLWNvZGVkIGxpYnJhcnkgc2VhcmNoIHBhdGg/XSkKK19MVF9ERUNMKFtdLCBbbGlibmFtZV9zcGVjXSwgWzFdLCBbRm9ybWF0IG9mIGxpYnJhcnkgbmFtZSBwcmVmaXhdKQorX0xUX0RFQ0woW10sIFtsaWJyYXJ5X25hbWVzX3NwZWNdLCBbMV0sCisgICAgW1tMaXN0IG9mIGFyY2hpdmUgbmFtZXMuICBGaXJzdCBuYW1lIGlzIHRoZSByZWFsIG9uZSwgdGhlIHJlc3QgYXJlIGxpbmtzLgorICAgIFRoZSBsYXN0IG5hbWUgaXMgdGhlIG9uZSB0aGF0IHRoZSBsaW5rZXIgZmluZHMgd2l0aCAtbE5BTUVdXSkKK19MVF9ERUNMKFtdLCBbc29uYW1lX3NwZWNdLCBbMV0sCisgICAgW1tUaGUgY29kZWQgbmFtZSBvZiB0aGUgbGlicmFyeSwgaWYgZGlmZmVyZW50IGZyb20gdGhlIHJlYWwgbmFtZV1dKQorX0xUX0RFQ0woW10sIFtpbnN0YWxsX292ZXJyaWRlX21vZGVdLCBbMV0sCisgICAgW1Blcm1pc3Npb24gbW9kZSBvdmVycmlkZSBmb3IgaW5zdGFsbGF0aW9uIG9mIHNoYXJlZCBsaWJyYXJpZXNdKQorX0xUX0RFQ0woW10sIFtwb3N0aW5zdGFsbF9jbWRzXSwgWzJdLAorICAgIFtDb21tYW5kIHRvIHVzZSBhZnRlciBpbnN0YWxsYXRpb24gb2YgYSBzaGFyZWQgYXJjaGl2ZV0pCitfTFRfREVDTChbXSwgW3Bvc3R1bmluc3RhbGxfY21kc10sIFsyXSwKKyAgICBbQ29tbWFuZCB0byB1c2UgYWZ0ZXIgdW5pbnN0YWxsYXRpb24gb2YgYSBzaGFyZWQgYXJjaGl2ZV0pCitfTFRfREVDTChbXSwgW2ZpbmlzaF9jbWRzXSwgWzJdLAorICAgIFtDb21tYW5kcyB1c2VkIHRvIGZpbmlzaCBhIGxpYnRvb2wgbGlicmFyeSBpbnN0YWxsYXRpb24gaW4gYSBkaXJlY3RvcnldKQorX0xUX0RFQ0woW10sIFtmaW5pc2hfZXZhbF0sIFsxXSwKKyAgICBbW0FzICJmaW5pc2hfY21kcyIsIGV4Y2VwdCBhIHNpbmdsZSBzY3JpcHQgZnJhZ21lbnQgdG8gYmUgZXZhbGVkIGJ1dAorICAgIG5vdCBzaG93bl1dKQorX0xUX0RFQ0woW10sIFtoYXJkY29kZV9pbnRvX2xpYnNdLCBbMF0sCisgICAgW1doZXRoZXIgd2Ugc2hvdWxkIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBsaWJyYXJpZXNdKQorX0xUX0RFQ0woW10sIFtzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWNdLCBbMl0sCisgICAgW0NvbXBpbGUtdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllc10pCitfTFRfREVDTChbXSwgW3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjXSwgWzJdLAorICAgIFtSdW4tdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllc10pCitdKSMgX0xUX1NZU19EWU5BTUlDX0xJTktFUgorCisKKyMgX0xUX1BBVEhfVE9PTF9QUkVGSVgoVE9PTCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgZmluZCBhIGZpbGUgcHJvZ3JhbSB3aGljaCBjYW4gcmVjb2duaXplIHNoYXJlZCBsaWJyYXJ5CitBQ19ERUZVTihbX0xUX1BBVEhfVE9PTF9QUkVGSVhdLAorW200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKK0FDX01TR19DSEVDS0lORyhbZm9yICQxXSkKK0FDX0NBQ0hFX1ZBTChsdF9jdl9wYXRoX01BR0lDX0NNRCwKK1tjYXNlICRNQUdJQ19DTUQgaW4KK1tbXFwvKl0gfCAgPzpbXFwvXSpdKQorICBsdF9jdl9wYXRoX01BR0lDX0NNRD0iJE1BR0lDX0NNRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisqKQorICBsdF9zYXZlX01BR0lDX0NNRD0iJE1BR0lDX0NNRCIKKyAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitkbmwgJGFjX2R1bW15IGZvcmNlcyBzcGxpdHRpbmcgb24gY29uc3RhbnQgdXNlci1zdXBwbGllZCBwYXRocy4KK2RubCBQT1NJWC4yIHdvcmQgc3BsaXR0aW5nIGlzIGRvbmUgb25seSBvbiB0aGUgb3V0cHV0IG9mIHdvcmQgZXhwYW5zaW9ucywKK2RubCBub3QgZXZlcnkgd29yZC4gIFRoaXMgY2xvc2VzIGEgbG9uZ3N0YW5kaW5nIHNoIHNlY3VyaXR5IGhvbGUuCisgIGFjX2R1bW15PSJtNF9pZihbJDJdLCAsICRQQVRILCBbJDJdKSIKKyAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCisgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICBpZiB0ZXN0IC1mICRhY19kaXIvJDE7IHRoZW4KKyAgICAgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSIkYWNfZGlyLyQxIgorICAgICAgaWYgdGVzdCAtbiAiJGZpbGVfbWFnaWNfdGVzdF9maWxlIjsgdGhlbgorCWNhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCisJImZpbGVfbWFnaWMgIiopCisJICBmaWxlX21hZ2ljX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogImZpbGVfbWFnaWMgXCguKlwpImAKKwkgIE1BR0lDX0NNRD0iJGx0X2N2X3BhdGhfTUFHSUNfQ01EIgorCSAgaWYgZXZhbCAkZmlsZV9tYWdpY19jbWQgXCRmaWxlX21hZ2ljX3Rlc3RfZmlsZSAyPiAvZGV2L251bGwgfAorCSAgICAkRUdSRVAgIiRmaWxlX21hZ2ljX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICA6CisJICBlbHNlCisJICAgIGNhdCA8PF9MVF9FT0YgMT4mMgorCisqKiogV2FybmluZzogdGhlIGNvbW1hbmQgbGlidG9vbCB1c2VzIHRvIGRldGVjdCBzaGFyZWQgbGlicmFyaWVzLAorKioqICRmaWxlX21hZ2ljX2NtZCwgcHJvZHVjZXMgb3V0cHV0IHRoYXQgbGlidG9vbCBjYW5ub3QgcmVjb2duaXplLgorKioqIFRoZSByZXN1bHQgaXMgdGhhdCBsaWJ0b29sIG1heSBmYWlsIHRvIHJlY29nbml6ZSBzaGFyZWQgbGlicmFyaWVzCisqKiogYXMgc3VjaC4gIFRoaXMgd2lsbCBhZmZlY3QgdGhlIGNyZWF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzIHRoYXQKKyoqKiBkZXBlbmQgb24gc2hhcmVkIGxpYnJhcmllcywgYnV0IHByb2dyYW1zIGxpbmtlZCB3aXRoIHN1Y2ggbGlidG9vbAorKioqIGxpYnJhcmllcyB3aWxsIHdvcmsgcmVnYXJkbGVzcyBvZiB0aGlzIHByb2JsZW0uICBOZXZlcnRoZWxlc3MsIHlvdQorKioqIG1heSB3YW50IHRvIHJlcG9ydCB0aGUgcHJvYmxlbSB0byB5b3VyIHN5c3RlbSBtYW5hZ2VyIGFuZC9vciB0bworKioqIGJ1Zy1saWJ0b29sQGdudS5vcmcKKworX0xUX0VPRgorCSAgZmkgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgYnJlYWsKKyAgICBmaQorICBkb25lCisgIElGUz0iJGx0X3NhdmVfaWZzIgorICBNQUdJQ19DTUQ9IiRsdF9zYXZlX01BR0lDX0NNRCIKKyAgOzsKK2VzYWNdKQorTUFHSUNfQ01EPSIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiCitpZiB0ZXN0IC1uICIkTUFHSUNfQ01EIjsgdGhlbgorICBBQ19NU0dfUkVTVUxUKCRNQUdJQ19DTUQpCitlbHNlCisgIEFDX01TR19SRVNVTFQobm8pCitmaQorX0xUX0RFQ0woW10sIFtNQUdJQ19DTURdLCBbMF0sCisJIFtVc2VkIHRvIGV4YW1pbmUgbGlicmFyaWVzIHdoZW4gZmlsZV9tYWdpY19jbWQgYmVnaW5zIHdpdGggImZpbGUiXSlkbmwKK10pIyBfTFRfUEFUSF9UT09MX1BSRUZJWAorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0FDX1BBVEhfVE9PTF9QUkVGSVhdLCBbX0xUX1BBVEhfVE9PTF9QUkVGSVhdKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19QQVRIX1RPT0xfUFJFRklYXSwgW10pCisKKworIyBfTFRfUEFUSF9NQUdJQworIyAtLS0tLS0tLS0tLS0tLQorIyBmaW5kIGEgZmlsZSBwcm9ncmFtIHdoaWNoIGNhbiByZWNvZ25pemUgYSBzaGFyZWQgbGlicmFyeQorbTRfZGVmdW4oW19MVF9QQVRIX01BR0lDXSwKK1tfTFRfUEFUSF9UT09MX1BSRUZJWCgke2FjX3Rvb2xfcHJlZml4fWZpbGUsIC91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgpCitpZiB0ZXN0IC16ICIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiOyB0aGVuCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgICBfTFRfUEFUSF9UT09MX1BSRUZJWChmaWxlLCAvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRIKQorICBlbHNlCisgICAgTUFHSUNfQ01EPToKKyAgZmkKK2ZpCitdKSMgX0xUX1BBVEhfTUFHSUMKKworCisjIExUX1BBVEhfTEQKKyMgLS0tLS0tLS0tLQorIyBmaW5kIHRoZSBwYXRobmFtZSB0byB0aGUgR05VIG9yIG5vbi1HTlUgbGlua2VyCitBQ19ERUZVTihbTFRfUEFUSF9MRF0sCitbQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCitBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCitBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfQlVJTERdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKK200X3JlcXVpcmUoW19MVF9QUk9HX0VDSE9fQkFDS1NMQVNIXSlkbmwKKworQUNfQVJHX1dJVEgoW2dudS1sZF0sCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtZ251LWxkXSwKKwlbYXNzdW1lIHRoZSBDIGNvbXBpbGVyIHVzZXMgR05VIGxkIEA8OkBkZWZhdWx0PW5vQDo+QF0pXSwKKyAgICBbdGVzdCAiJHdpdGh2YWwiID0gbm8gfHwgd2l0aF9nbnVfbGQ9eWVzXSwKKyAgICBbd2l0aF9nbnVfbGQ9bm9dKWRubAorCithY19wcm9nPWxkCitpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAjIENoZWNrIGlmIGdjYyAtcHJpbnQtcHJvZy1uYW1lPWxkIGdpdmVzIGEgcGF0aC4KKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgbGQgdXNlZCBieSAkQ0NdKQorICBjYXNlICRob3N0IGluCisgICotKi1taW5ndyopCisgICAgIyBnY2MgbGVhdmVzIGEgdHJhaWxpbmcgY2FycmlhZ2UgcmV0dXJuIHdoaWNoIHVwc2V0cyBtaW5ndworICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNSB8IHRyIC1kICdcMDE1J2AgOzsKKyAgKikKKyAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjVgIDs7CisgIGVzYWMKKyAgY2FzZSAkYWNfcHJvZyBpbgorICAgICMgQWNjZXB0IGFic29sdXRlIHBhdGhzLgorICAgIFtbXFwvXV0qIHwgPzpbW1xcL11dKikKKyAgICAgIHJlX2RpcmVsdD0nL1tbXi9dXVtbXi9dXSovXC5cLi8nCisgICAgICAjIENhbm9uaWNhbGl6ZSB0aGUgcGF0aG5hbWUgb2YgbGQKKyAgICAgIGFjX3Byb2c9YCRFQ0hPICIkYWNfcHJvZyJ8ICRTRUQgJ3MlXFxcXCUvJWcnYAorICAgICAgd2hpbGUgJEVDSE8gIiRhY19wcm9nIiB8ICRHUkVQICIkcmVfZGlyZWx0IiA+IC9kZXYvbnVsbCAyPiYxOyBkbworCWFjX3Byb2c9YCRFQ0hPICRhY19wcm9nfCAkU0VEICJzJSRyZV9kaXJlbHQlLyUiYAorICAgICAgZG9uZQorICAgICAgdGVzdCAteiAiJExEIiAmJiBMRD0iJGFjX3Byb2ciCisgICAgICA7OworICAiIikKKyAgICAjIElmIGl0IGZhaWxzLCB0aGVuIHByZXRlbmQgd2UgYXJlbid0IHVzaW5nIEdDQy4KKyAgICBhY19wcm9nPWxkCisgICAgOzsKKyAgKikKKyAgICAjIElmIGl0IGlzIHJlbGF0aXZlLCB0aGVuIHNlYXJjaCBmb3IgdGhlIGZpcnN0IGxkIGluIFBBVEguCisgICAgd2l0aF9nbnVfbGQ9dW5rbm93bgorICAgIDs7CisgIGVzYWMKK2VsaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBHTlUgbGRdKQorZWxzZQorICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBub24tR05VIGxkXSkKK2ZpCitBQ19DQUNIRV9WQUwobHRfY3ZfcGF0aF9MRCwKK1tpZiB0ZXN0IC16ICIkTEQiOyB0aGVuCisgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICBmb3IgYWNfZGlyIGluICRQQVRIOyBkbworICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgaWYgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyIgfHwgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyRhY19leGVleHQiOyB0aGVuCisgICAgICBsdF9jdl9wYXRoX0xEPSIkYWNfZGlyLyRhY19wcm9nIgorICAgICAgIyBDaGVjayB0byBzZWUgaWYgdGhlIHByb2dyYW0gaXMgR05VIGxkLiAgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uLAorICAgICAgIyBidXQgYXBwYXJlbnRseSBzb21lIHZhcmlhbnRzIG9mIEdOVSBsZCBvbmx5IGFjY2VwdCAtdi4KKyAgICAgICMgQnJlYWsgb25seSBpZiBpdCB3YXMgdGhlIEdOVS9ub24tR05VIGxkIHRoYXQgd2UgcHJlZmVyLgorICAgICAgY2FzZSBgIiRsdF9jdl9wYXRoX0xEIiAtdiAyPiYxIDwvZGV2L251bGxgIGluCisgICAgICAqR05VKiB8ICond2l0aCBCRkQnKikKKwl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IG5vICYmIGJyZWFrCisJOzsKKyAgICAgICopCisJdGVzdCAiJHdpdGhfZ251X2xkIiAhPSB5ZXMgJiYgYnJlYWsKKwk7OworICAgICAgZXNhYworICAgIGZpCisgIGRvbmUKKyAgSUZTPSIkbHRfc2F2ZV9pZnMiCitlbHNlCisgIGx0X2N2X3BhdGhfTEQ9IiRMRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCitmaV0pCitMRD0iJGx0X2N2X3BhdGhfTEQiCitpZiB0ZXN0IC1uICIkTEQiOyB0aGVuCisgIEFDX01TR19SRVNVTFQoJExEKQorZWxzZQorICBBQ19NU0dfUkVTVUxUKG5vKQorZmkKK3Rlc3QgLXogIiRMRCIgJiYgQUNfTVNHX0VSUk9SKFtubyBhY2NlcHRhYmxlIGxkIGZvdW5kIGluIFwkUEFUSF0pCitfTFRfUEFUSF9MRF9HTlUKK0FDX1NVQlNUKFtMRF0pCisKK19MVF9UQUdERUNMKFtdLCBbTERdLCBbMV0sIFtUaGUgbGlua2VyIHVzZWQgdG8gYnVpbGQgbGlicmFyaWVzXSkKK10pIyBMVF9QQVRIX0xECisKKyMgT2xkIG5hbWVzOgorQVVfQUxJQVMoW0FNX1BST0dfTERdLCBbTFRfUEFUSF9MRF0pCitBVV9BTElBUyhbQUNfUFJPR19MRF0sIFtMVF9QQVRIX0xEXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQU1fUFJPR19MRF0sIFtdKQorZG5sIEFDX0RFRlVOKFtBQ19QUk9HX0xEXSwgW10pCisKKworIyBfTFRfUEFUSF9MRF9HTlUKKyMtIC0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX1BBVEhfTERfR05VXSwKK1tBQ19DQUNIRV9DSEVDSyhbaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGRdLCBsdF9jdl9wcm9nX2dudV9sZCwKK1sjIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiBoZXJlLCBidXQgYXBwYXJlbnRseSBzb21lIEdOVSBsZHMgb25seSBhY2NlcHQgLXYuCitjYXNlIGAkTEQgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgorKkdOVSogfCAqJ3dpdGggQkZEJyopCisgIGx0X2N2X3Byb2dfZ251X2xkPXllcworICA7OworKikKKyAgbHRfY3ZfcHJvZ19nbnVfbGQ9bm8KKyAgOzsKK2VzYWNdKQord2l0aF9nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkCitdKSMgX0xUX1BBVEhfTERfR05VCisKKworIyBfTFRfQ01EX1JFTE9BRAorIyAtLS0tLS0tLS0tLS0tLQorIyBmaW5kIHJlbG9hZCBmbGFnIGZvciBsaW5rZXIKKyMgICAtLSBQT1JUTUUgU29tZSBsaW5rZXJzIG1heSBuZWVkIGEgZGlmZmVyZW50IHJlbG9hZCBmbGFnLgorbTRfZGVmdW4oW19MVF9DTURfUkVMT0FEXSwKK1tBQ19DQUNIRV9DSEVDSyhbZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlc10sCisgIGx0X2N2X2xkX3JlbG9hZF9mbGFnLAorICBbbHRfY3ZfbGRfcmVsb2FkX2ZsYWc9Jy1yJ10pCityZWxvYWRfZmxhZz0kbHRfY3ZfbGRfcmVsb2FkX2ZsYWcKK2Nhc2UgJHJlbG9hZF9mbGFnIGluCisiIiB8ICIgIiopIDs7CisqKSByZWxvYWRfZmxhZz0iICRyZWxvYWRfZmxhZyIgOzsKK2VzYWMKK3JlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKK2Nhc2UgJGhvc3Rfb3MgaW4KKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorICAgICAgcmVsb2FkX2NtZHM9ZmFsc2UKKyAgICBmaQorICAgIDs7CisgIGRhcndpbiopCisgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgIHJlbG9hZF9jbWRzPSckTFRDQyAkTFRDRkxBR1MgLW5vc3RkbGliICR7d2x9LXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKyAgICBlbHNlCisgICAgICByZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisgICAgZmkKKyAgICA7OworZXNhYworX0xUX1RBR0RFQ0woW10sIFtyZWxvYWRfZmxhZ10sIFsxXSwgW0hvdyB0byBjcmVhdGUgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXNdKWRubAorX0xUX1RBR0RFQ0woW10sIFtyZWxvYWRfY21kc10sIFsyXSlkbmwKK10pIyBfTFRfQ01EX1JFTE9BRAorCisKKyMgX0xUX0NIRUNLX01BR0lDX01FVEhPRAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGhvdyB0byBjaGVjayBmb3IgbGlicmFyeSBkZXBlbmRlbmNpZXMKKyMgIC0tIFBPUlRNRSBmaWxsIGluIHdpdGggdGhlIGR5bmFtaWMgbGlicmFyeSBjaGFyYWN0ZXJpc3RpY3MKK200X2RlZnVuKFtfTFRfQ0hFQ0tfTUFHSUNfTUVUSE9EXSwKK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pCittNF9yZXF1aXJlKFtfTFRfREVDTF9PQkpEVU1QXSkKK0FDX0NBQ0hFX0NIRUNLKFtob3cgdG8gcmVjb2duaXplIGRlcGVuZGVudCBsaWJyYXJpZXNdLAorbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QsCitbbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRNQUdJQ19DTUQnCitsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0KK2x0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSd1bmtub3duJworIyBOZWVkIHRvIHNldCB0aGUgcHJlY2VkaW5nIHZhcmlhYmxlIG9uIGFsbCBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0CisjIGludGVybGlicmFyeSBkZXBlbmRlbmNpZXMuCisjICdub25lJyAtLSBkZXBlbmRlbmNpZXMgbm90IHN1cHBvcnRlZC4KKyMgYHVua25vd24nIC0tIHNhbWUgYXMgbm9uZSwgYnV0IGRvY3VtZW50cyB0aGF0IHdlIHJlYWxseSBkb24ndCBrbm93LgorIyAncGFzc19hbGwnIC0tIGFsbCBkZXBlbmRlbmNpZXMgcGFzc2VkIHdpdGggbm8gY2hlY2tzLgorIyAndGVzdF9jb21waWxlJyAtLSBjaGVjayBieSBtYWtpbmcgdGVzdCBwcm9ncmFtLgorIyAnZmlsZV9tYWdpYyBbW3JlZ2V4XV0nIC0tIGNoZWNrIGJ5IGxvb2tpbmcgZm9yIGZpbGVzIGluIGxpYnJhcnkgcGF0aAorIyB3aGljaCByZXNwb25kcyB0byB0aGUgJGZpbGVfbWFnaWNfY21kIHdpdGggYSBnaXZlbiBleHRlbmRlZCByZWdleC4KKyMgSWYgeW91IGhhdmUgYGZpbGUnIG9yIGVxdWl2YWxlbnQgb24geW91ciBzeXN0ZW0gYW5kIHlvdSdyZSBub3Qgc3VyZQorIyB3aGV0aGVyIGBwYXNzX2FsbCcgd2lsbCAqYWx3YXlzKiB3b3JrLCB5b3UgcHJvYmFibHkgd2FudCB0aGlzIG9uZS4KKworY2FzZSAkaG9zdF9vcyBpbgorYWl4W1s0LTldXSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2Jlb3MqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitic2RpW1s0NV1dKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tNTF1dU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIpJworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL3Vzci9iaW4vZmlsZSAtTCcKKyAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3NobGliL2xpYmMuc28KKyAgOzsKKworY3lnd2luKikKKyAgIyBmdW5jX3dpbjMyX2xpYmlkIGlzIGEgc2hlbGwgZnVuY3Rpb24gZGVmaW5lZCBpbiBsdG1haW4uc2gKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCisgIDs7CisKK21pbmd3KiB8IHB3MzIqKQorICAjIEJhc2UgTVNZUy9NaW5HVyBkbyBub3QgcHJvdmlkZSB0aGUgJ2ZpbGUnIGNvbW1hbmQgbmVlZGVkIGJ5CisgICMgZnVuY193aW4zMl9saWJpZCBzaGVsbCBmdW5jdGlvbiwgc28gdXNlIGEgd2Vha2VyIHRlc3QgYmFzZWQgb24gJ29iamR1bXAnLAorICAjIHVubGVzcyB3ZSBmaW5kICdmaWxlJywgZm9yIGV4YW1wbGUgYmVjYXVzZSB3ZSBhcmUgY3Jvc3MtY29tcGlsaW5nLgorICAjIGZ1bmNfd2luMzJfbGliaWQgYXNzdW1lcyBCU0Qgbm0sIHNvIGRpc2FsbG93IGl0IGlmIHVzaW5nIE1TIGR1bXBiaW4uCisgIGlmICggdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiQlNEIG5tIiAmJiBmaWxlIC8gKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJworICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJworICBlbHNlCisgICAgIyBLZWVwIHRoaXMgcGF0dGVybiBpbiBzeW5jIHdpdGggdGhlIG9uZSBpbiBmdW5jX3dpbjMyX2xpYmlkLgorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IChwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpP3xwZS1hcm0td2luY2V8cGUteDg2LTY0KScKKyAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCisgIGZpCisgIDs7CisKK2NlZ2NjKikKKyAgIyB1c2UgdGhlIHdlYWtlciB0ZXN0IGJhc2VkIG9uICdvYmpkdW1wJy4gU2VlIG1pbmd3Ki4KKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgcGUtYXJtLS4qbGl0dGxlKC4qYXJjaGl0ZWN0dXJlOiBhcm0pPycKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRPQkpEVU1QIC1mJworICA7OworCitkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgaSo4NiApCisgICAgICAjIE5vdCBzdXJlIHdoZXRoZXIgdGhlIHByZXNlbmNlIG9mIE9wZW5CU0QgaGVyZSB3YXMgYSBtaXN0YWtlLgorICAgICAgIyBMZXQncyBhY2NlcHQgYm90aCBvZiB0aGVtIHVudGlsIHRoaXMgaXMgY2xlYXJlZCB1cC4KKyAgICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChGcmVlQlNEfE9wZW5CU0R8RHJhZ29uRmx5KS9pW1szLTldXTg2IChjb21wYWN0ICk/ZGVtYW5kIHBhZ2VkIHNoYXJlZCBsaWJyYXJ5JworICAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9L3Vzci9iaW4vZmlsZQorICAgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL3Vzci9saWIvbGliYy5zby4qYAorICAgICAgOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICBmaQorICA7OworCitnbnUqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitoYWlrdSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2hwdXgxMC4yMCogfCBocHV4MTEqKQorICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCisgIGNhc2UgJGhvc3RfY3B1IGluCisgIGlhNjQqKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzW1swLTldXVtbMC05XV1bWzAtOV1dfEVMRi1bWzAtOV1dW1swLTldXSkgc2hhcmVkIG9iamVjdCBmaWxlIC0gSUE2NCcKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9ocHV4MzIvbGliYy5zbworICAgIDs7CisgIGhwcGEqNjQqKQorICAgIFtsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoc1swLTldWzAtOV1bMC05XXxFTEZbIC1dWzAtOV1bMC05XSkoLWJpdCk/KCBbTE1dU0IpPyBzaGFyZWQgb2JqZWN0KCBmaWxlKT9bLCAtXSogUEEtUklTQyBbMC05XVwuWzAtOV0nXQorICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL3BhMjBfNjQvbGliYy5zbAorICAgIDs7CisgICopCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbWzAtOV1dW1swLTldXVtbMC05XV18UEEtUklTQ1tbMC05XV1cLltbMC05XV0pIHNoYXJlZCBsaWJyYXJ5JworICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2xpYmMuc2wKKyAgICA7OworICBlc2FjCisgIDs7CisKK2ludGVyaXhbWzMtOV1dKikKKyAgIyBQSUMgY29kZSBpcyBicm9rZW4gb24gSW50ZXJpeCAzLngsIHRoYXQncyB3aHkgfFwuYSBub3QgfF9waWNcLmEgaGVyZQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW1teL11dKyhcLnNvfFwuYSkkJworICA7OworCitpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICBjYXNlICRMRCBpbgorICAqLTMyfCoiLTMyICIpIGxpYm1hZ2ljPTMyLWJpdDs7CisgICotbjMyfCoiLW4zMiAiKSBsaWJtYWdpYz1OMzI7OworICAqLTY0fCoiLTY0ICIpIGxpYm1hZ2ljPTY0LWJpdDs7CisgICopIGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKKyAgZXNhYworICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCisjIFRoaXMgbXVzdCBiZSBnbGliYy9FTEYuCitsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK25ldGJzZCopCisgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc29cLltbMC05XV0rXC5bWzAtOV1dK3xfcGljXC5hKSQnCisgIGVsc2UKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW1teL11dKyhcLnNvfF9waWNcLmEpJCcKKyAgZmkKKyAgOzsKKworbmV3b3M2KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tNTF1dU0IgKGV4ZWN1dGFibGV8ZHluYW1pYyBsaWIpJworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCisgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2xpYm5scy5zbworICA7OworCisqbnRvKiB8ICpxbngqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitvcGVuYnNkKikKKyAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc29cLltbMC05XV0rXC5bWzAtOV1dK3xcLnNvfF9waWNcLmEpJCcKKyAgZWxzZQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc29cLltbMC05XV0rXC5bWzAtOV1dK3xfcGljXC5hKSQnCisgIGZpCisgIDs7CisKK29zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworcmRvcyopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK3NvbGFyaXMqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworc3lzdjQgfCBzeXN2NC4zKikKKyAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKyAgbW90b3JvbGEpCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tNTF1dU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIpIE1bWzAtOV1dW1swLTldXSogVmVyc2lvbiBbWzAtOV1dJworICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC91c3IvbGliL2xpYmMuc28qYAorICAgIDs7CisgIG5jcikKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgIDs7CisgIHNlcXVlbnQpCisgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy9iaW4vZmlsZScKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgW1swLTldXVtbMC05XV0qLWJpdCBbW0xNXV1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYiApJworICAgIDs7CisgIHNuaSkKKyAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL2Jpbi9maWxlJworICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSJmaWxlX21hZ2ljIEVMRiBbWzAtOV1dW1swLTldXSotYml0IFtbTE1dXVNCIGR5bmFtaWMgbGliIgorICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS9saWIvbGliYy5zbworICAgIDs7CisgIHNpZW1lbnMpCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgICA7OworICBwYykKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgIDs7CisgIGVzYWMKKyAgOzsKKwordHBmKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKK2VzYWMKK10pCisKK2ZpbGVfbWFnaWNfZ2xvYj0KK3dhbnRfbm9jYXNlZ2xvYj1ubworaWYgdGVzdCAiJGJ1aWxkIiA9ICIkaG9zdCI7IHRoZW4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICBtaW5ndyogfCBwdzMyKikKKyAgICBpZiAoIHNob3B0IHwgZ3JlcCBub2Nhc2VnbG9iICkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICB3YW50X25vY2FzZWdsb2I9eWVzCisgICAgZWxzZQorICAgICAgZmlsZV9tYWdpY19nbG9iPWBlY2hvIGFBYkJjQ2REZUVmRmdHaEhpSWpKa0tsTG1Nbk5vT3BQcVFyUnNTdFR1VXZWd1d4WHlZelogfCAkU0VEIC1lICJzL1woLi5cKS9zXC9bW1wxXV1cL1tbXDFdXVwvZzsvZyJgCisgICAgZmkKKyAgICA7OworICBlc2FjCitmaQorCitmaWxlX21hZ2ljX2NtZD0kbHRfY3ZfZmlsZV9tYWdpY19jbWQKK2RlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZAordGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCisKK19MVF9ERUNMKFtdLCBbZGVwbGlic19jaGVja19tZXRob2RdLCBbMV0sCisgICAgW01ldGhvZCB0byBjaGVjayB3aGV0aGVyIGRlcGVuZGVudCBsaWJyYXJpZXMgYXJlIHNoYXJlZCBvYmplY3RzXSkKK19MVF9ERUNMKFtdLCBbZmlsZV9tYWdpY19jbWRdLCBbMV0sCisgICAgW0NvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyJdKQorX0xUX0RFQ0woW10sIFtmaWxlX21hZ2ljX2dsb2JdLCBbMV0sCisgICAgW0hvdyB0byBmaW5kIHBvdGVudGlhbCBmaWxlcyB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiXSkKK19MVF9ERUNMKFtdLCBbd2FudF9ub2Nhc2VnbG9iXSwgWzFdLAorICAgIFtGaW5kIHBvdGVudGlhbCBmaWxlcyB1c2luZyBub2Nhc2VnbG9iIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyJdKQorXSkjIF9MVF9DSEVDS19NQUdJQ19NRVRIT0QKKworCisjIExUX1BBVEhfTk0KKyMgLS0tLS0tLS0tLQorIyBmaW5kIHRoZSBwYXRobmFtZSB0byBhIEJTRC0gb3IgTVMtY29tcGF0aWJsZSBuYW1lIGxpc3RlcgorQUNfREVGVU4oW0xUX1BBVEhfTk1dLAorW0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorQUNfQ0FDSEVfQ0hFQ0soW2ZvciBCU0QtIG9yIE1TLWNvbXBhdGlibGUgbmFtZSBsaXN0ZXIgKG5tKV0sIGx0X2N2X3BhdGhfTk0sCitbaWYgdGVzdCAtbiAiJE5NIjsgdGhlbgorICAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKyAgbHRfY3ZfcGF0aF9OTT0iJE5NIgorZWxzZQorICBsdF9ubV90b19jaGVjaz0iJHthY190b29sX3ByZWZpeH1ubSIKKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IiAmJiB0ZXN0ICIkYnVpbGQiID0gIiRob3N0IjsgdGhlbgorICAgIGx0X25tX3RvX2NoZWNrPSIkbHRfbm1fdG9fY2hlY2sgbm0iCisgIGZpCisgIGZvciBsdF90bXBfbm0gaW4gJGx0X25tX3RvX2NoZWNrOyBkbworICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICAgIGZvciBhY19kaXIgaW4gJFBBVEggL3Vzci9jY3MvYmluL2VsZiAvdXNyL2Njcy9iaW4gL3Vzci91Y2IgL2JpbjsgZG8KKyAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICAgIHRtcF9ubT0iJGFjX2Rpci8kbHRfdG1wX25tIgorICAgICAgaWYgdGVzdCAtZiAiJHRtcF9ubSIgfHwgdGVzdCAtZiAiJHRtcF9ubSRhY19leGVleHQiIDsgdGhlbgorCSMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBubSBhY2NlcHRzIGEgQlNELWNvbXBhdCBmbGFnLgorCSMgQWRkaW5nIHRoZSBgc2VkIDFxJyBwcmV2ZW50cyBmYWxzZSBwb3NpdGl2ZXMgb24gSFAtVVgsIHdoaWNoIHNheXM6CisJIyAgIG5tOiB1bmtub3duIG9wdGlvbiAiQiIgaWdub3JlZAorCSMgVHJ1NjQncyBubSBjb21wbGFpbnMgdGhhdCAvZGV2L251bGwgaXMgYW4gaW52YWxpZCBvYmplY3QgZmlsZQorCWNhc2UgYCIkdG1wX25tIiAtQiAvZGV2L251bGwgMj4mMSB8IHNlZCAnMXEnYCBpbgorCSovZGV2L251bGwqIHwgKidJbnZhbGlkIGZpbGUgb3Igb2JqZWN0IHR5cGUnKikKKwkgIGx0X2N2X3BhdGhfTk09IiR0bXBfbm0gLUIiCisJICBicmVhaworCSAgOzsKKwkqKQorCSAgY2FzZSBgIiR0bXBfbm0iIC1wIC9kZXYvbnVsbCAyPiYxIHwgc2VkICcxcSdgIGluCisJICAqL2Rldi9udWxsKikKKwkgICAgbHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSAtcCIKKwkgICAgYnJlYWsKKwkgICAgOzsKKwkgICopCisJICAgIGx0X2N2X3BhdGhfTk09JHtsdF9jdl9wYXRoX05NPSIkdG1wX25tIn0gIyBrZWVwIHRoZSBmaXJzdCBtYXRjaCwgYnV0CisJICAgIGNvbnRpbnVlICMgc28gdGhhdCB3ZSBjYW4gdHJ5IHRvIGZpbmQgb25lIHRoYXQgc3VwcG9ydHMgQlNEIGZsYWdzCisJICAgIDs7CisJICBlc2FjCisJICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgZG9uZQorICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICBkb25lCisgIDogJHtsdF9jdl9wYXRoX05NPW5vfQorZmldKQoraWYgdGVzdCAiJGx0X2N2X3BhdGhfTk0iICE9ICJubyI7IHRoZW4KKyAgTk09IiRsdF9jdl9wYXRoX05NIgorZWxzZQorICAjIERpZG4ndCBmaW5kIGFueSBCU0QgY29tcGF0aWJsZSBuYW1lIGxpc3RlciwgbG9vayBmb3IgZHVtcGJpbi4KKyAgaWYgdGVzdCAtbiAiJERVTVBCSU4iOyB0aGVuIDoKKyAgICAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKyAgZWxzZQorICAgIEFDX0NIRUNLX1RPT0xTKERVTVBCSU4sIFtkdW1wYmluICJsaW5rIC1kdW1wIl0sIDopCisgICAgY2FzZSBgJERVTVBCSU4gLXN5bWJvbHMgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KKyAgICAqQ09GRiopCisgICAgICBEVU1QQklOPSIkRFVNUEJJTiAtc3ltYm9scyIKKyAgICAgIDs7CisgICAgKikKKyAgICAgIERVTVBCSU49OgorICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisgIEFDX1NVQlNUKFtEVU1QQklOXSkKKyAgaWYgdGVzdCAiJERVTVBCSU4iICE9ICI6IjsgdGhlbgorICAgIE5NPSIkRFVNUEJJTiIKKyAgZmkKK2ZpCit0ZXN0IC16ICIkTk0iICYmIE5NPW5tCitBQ19TVUJTVChbTk1dKQorX0xUX0RFQ0woW10sIFtOTV0sIFsxXSwgW0EgQlNELSBvciBNUy1jb21wYXRpYmxlIG5hbWUgbGlzdGVyXSlkbmwKKworQUNfQ0FDSEVfQ0hFQ0soW3RoZSBuYW1lIGxpc3RlciAoJE5NKSBpbnRlcmZhY2VdLCBbbHRfY3Zfbm1faW50ZXJmYWNlXSwKKyAgW2x0X2N2X25tX2ludGVyZmFjZT0iQlNEIG5tIgorICBlY2hvICJpbnQgc29tZV92YXJpYWJsZSA9IDA7IiA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRhY19jb21waWxlXCIiID4mQVNfTUVTU0FHRV9MT0dfRkQpCisgIChldmFsICIkYWNfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCisgIGNhdCBjb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAorICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJE5NIFxcXCJjb25mdGVzdC4kYWNfb2JqZXh0XFxcIlwiIiA+JkFTX01FU1NBR0VfTE9HX0ZEKQorICAoZXZhbCAiJE5NIFwiY29uZnRlc3QuJGFjX29iamV4dFwiIiAyPmNvbmZ0ZXN0LmVyciA+IGNvbmZ0ZXN0Lm91dCkKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiBvdXRwdXRcIiIgPiZBU19NRVNTQUdFX0xPR19GRCkKKyAgY2F0IGNvbmZ0ZXN0Lm91dCA+JkFTX01FU1NBR0VfTE9HX0ZECisgIGlmICRHUkVQICdFeHRlcm5hbC4qc29tZV92YXJpYWJsZScgY29uZnRlc3Qub3V0ID4gL2Rldi9udWxsOyB0aGVuCisgICAgbHRfY3Zfbm1faW50ZXJmYWNlPSJNUyBkdW1wYmluIgorICBmaQorICBybSAtZiBjb25mdGVzdCpdKQorXSkjIExUX1BBVEhfTk0KKworIyBPbGQgbmFtZXM6CitBVV9BTElBUyhbQU1fUFJPR19OTV0sIFtMVF9QQVRIX05NXSkKK0FVX0FMSUFTKFtBQ19QUk9HX05NXSwgW0xUX1BBVEhfTk1dKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBTV9QUk9HX05NXSwgW10pCitkbmwgQUNfREVGVU4oW0FDX1BST0dfTk1dLCBbXSkKKworIyBfTFRfQ0hFQ0tfU0hBUkVETElCX0ZST01fTElOS0xJQgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBob3cgdG8gZGV0ZXJtaW5lIHRoZSBuYW1lIG9mIHRoZSBzaGFyZWQgbGlicmFyeQorIyBhc3NvY2lhdGVkIHdpdGggYSBzcGVjaWZpYyBsaW5rIGxpYnJhcnkuCisjICAtLSBQT1JUTUUgZmlsbCBpbiB3aXRoIHRoZSBkeW5hbWljIGxpYnJhcnkgY2hhcmFjdGVyaXN0aWNzCittNF9kZWZ1bihbX0xUX0NIRUNLX1NIQVJFRExJQl9GUk9NX0xJTktMSUJdLAorW200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSkKK200X3JlcXVpcmUoW19MVF9ERUNMX09CSkRVTVBdKQorbTRfcmVxdWlyZShbX0xUX0RFQ0xfRExMVE9PTF0pCitBQ19DQUNIRV9DSEVDSyhbaG93IHRvIGFzc29jaWF0ZSBydW50aW1lIGFuZCBsaW5rIGxpYnJhcmllc10sCitsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCwKK1tsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0ndW5rbm93bicKKworY2FzZSAkaG9zdF9vcyBpbgorY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAjIHR3byBkaWZmZXJlbnQgc2hlbGwgZnVuY3Rpb25zIGRlZmluZWQgaW4gbHRtYWluLnNoCisgICMgZGVjaWRlIHdoaWNoIHRvIHVzZSBiYXNlZCBvbiBjYXBhYmlsaXRpZXMgb2YgJERMTFRPT0wKKyAgY2FzZSBgJERMTFRPT0wgLS1oZWxwIDI+JjFgIGluCisgICotLWlkZW50aWZ5LXN0cmljdCopCisgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliCisgICAgOzsKKyAgKikKKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2sKKyAgICA7OworICBlc2FjCisgIDs7CisqKQorICAjIGZhbGxiYWNrOiBhc3N1bWUgbGlua2xpYiBJUyBzaGFyZWRsaWIKKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9IiRFQ0hPIgorICA7OworZXNhYworXSkKK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAordGVzdCAteiAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiAmJiBzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kRUNITworCitfTFRfREVDTChbXSwgW3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kXSwgWzFdLAorICAgIFtDb21tYW5kIHRvIGFzc29jaWF0ZSBzaGFyZWQgYW5kIGxpbmsgbGlicmFyaWVzXSkKK10pIyBfTFRfQ0hFQ0tfU0hBUkVETElCX0ZST01fTElOS0xJQgorCisKKyMgX0xUX1BBVEhfTUFOSUZFU1RfVE9PTAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGxvY2F0ZSB0aGUgbWFuaWZlc3QgdG9vbAorbTRfZGVmdW4oW19MVF9QQVRIX01BTklGRVNUX1RPT0xdLAorW0FDX0NIRUNLX1RPT0woTUFOSUZFU1RfVE9PTCwgbXQsIDopCit0ZXN0IC16ICIkTUFOSUZFU1RfVE9PTCIgJiYgTUFOSUZFU1RfVE9PTD1tdAorQUNfQ0FDSEVfQ0hFQ0soW2lmICRNQU5JRkVTVF9UT09MIGlzIGEgbWFuaWZlc3QgdG9vbF0sIFtsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2xdLAorICBbbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPW5vCisgIGVjaG8gIiRhc19tZTokTElORU5POiAkTUFOSUZFU1RfVE9PTCAnLT8nIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICRNQU5JRkVTVF9UT09MICctPycgMj5jb25mdGVzdC5lcnIgPiBjb25mdGVzdC5vdXQKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisgIGlmICRHUkVQICdNYW5pZmVzdCBUb29sJyBjb25mdGVzdC5vdXQgPiAvZGV2L251bGw7IHRoZW4KKyAgICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9eWVzCisgIGZpCisgIHJtIC1mIGNvbmZ0ZXN0Kl0pCitpZiB0ZXN0ICJ4JGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgIT0geHllczsgdGhlbgorICBNQU5JRkVTVF9UT09MPToKK2ZpCitfTFRfREVDTChbXSwgW01BTklGRVNUX1RPT0xdLCBbMV0sIFtNYW5pZmVzdCB0b29sXSlkbmwKK10pIyBfTFRfUEFUSF9NQU5JRkVTVF9UT09MCisKKworIyBMVF9MSUJfTQorIyAtLS0tLS0tLQorIyBjaGVjayBmb3IgbWF0aCBsaWJyYXJ5CitBQ19ERUZVTihbTFRfTElCX01dLAorW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKK0xJQk09CitjYXNlICRob3N0IGluCisqLSotYmVvcyogfCAqLSotY2VnY2MqIHwgKi0qLWN5Z3dpbiogfCAqLSotaGFpa3UqIHwgKi0qLXB3MzIqIHwgKi0qLWRhcndpbiopCisgICMgVGhlc2Ugc3lzdGVtIGRvbid0IGhhdmUgbGlibSwgb3IgZG9uJ3QgbmVlZCBpdAorICA7OworKi1uY3Itc3lzdjQuMyopCisgIEFDX0NIRUNLX0xJQihtdywgX213dmFsaWRjaGVja2wsIExJQk09Ii1sbXciKQorICBBQ19DSEVDS19MSUIobSwgY29zLCBMSUJNPSIkTElCTSAtbG0iKQorICA7OworKikKKyAgQUNfQ0hFQ0tfTElCKG0sIGNvcywgTElCTT0iLWxtIikKKyAgOzsKK2VzYWMKK0FDX1NVQlNUKFtMSUJNXSkKK10pIyBMVF9MSUJfTQorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0FDX0NIRUNLX0xJQk1dLCBbTFRfTElCX01dKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19DSEVDS19MSUJNXSwgW10pCisKKworIyBfTFRfQ09NUElMRVJfTk9fUlRUSShbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfQ09NUElMRVJfTk9fUlRUSV0sCitbbTRfcmVxdWlyZShbX0xUX1RBR19DT01QSUxFUl0pZG5sCisKK19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0KKworaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgbnZjYyopCisgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPScgLVhjb21waWxlciAtZm5vLWJ1aWx0aW4nIDs7CisgICopCisgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPScgLWZuby1idWlsdGluJyA7OworICBlc2FjCisKKyAgX0xUX0NPTVBJTEVSX09QVElPTihbaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnNdLAorICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zLAorICAgIFstZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zXSwgW10sCisgICAgW19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0iJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKSAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zIl0pCitmaQorX0xUX1RBR0RFQ0woW25vX2J1aWx0aW5fZmxhZ10sIFtsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ10sIFsxXSwKKwlbQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9uc10pCitdKSMgX0xUX0NPTVBJTEVSX05PX1JUVEkKKworCisjIF9MVF9DTURfR0xPQkFMX1NZTUJPTFMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9DTURfR0xPQkFMX1NZTUJPTFNdLAorW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKK0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorQUNfUkVRVUlSRShbQUNfUFJPR19BV0tdKWRubAorQUNfUkVRVUlSRShbTFRfUEFUSF9OTV0pZG5sCitBQ19SRVFVSVJFKFtMVF9QQVRIX0xEXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCittNF9yZXF1aXJlKFtfTFRfVEFHX0NPTVBJTEVSXSlkbmwKKworIyBDaGVjayBmb3IgY29tbWFuZCB0byBncmFiIHRoZSByYXcgc3ltYm9sIG5hbWUgZm9sbG93ZWQgYnkgQyBzeW1ib2wgZnJvbSBubS4KK0FDX01TR19DSEVDS0lORyhbY29tbWFuZCB0byBwYXJzZSAkTk0gb3V0cHV0IGZyb20gJGNvbXBpbGVyIG9iamVjdF0pCitBQ19DQUNIRV9WQUwoW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGVdLAorWworIyBUaGVzZSBhcmUgc2FuZSBkZWZhdWx0cyB0aGF0IHdvcmsgb24gYXQgbGVhc3QgYSBmZXcgb2xkIHN5c3RlbXMuCisjIFtUaGV5IGNvbWUgZnJvbSBVbHRyaXguICBXaGF0IGNvdWxkIGJlIG9sZGVyIHRoYW4gVWx0cml4PyEhIDspXQorCisjIENoYXJhY3RlciBjbGFzcyBkZXNjcmliaW5nIE5NIGdsb2JhbCBzeW1ib2wgY29kZXMuCitzeW1jb2RlPSdbW0JDREVHUlNUXV0nCisKKyMgUmVnZXhwIHRvIG1hdGNoIHN5bWJvbHMgdGhhdCBjYW4gYmUgYWNjZXNzZWQgZGlyZWN0bHkgZnJvbSBDLgorc3ltcGF0PSdcKFtbX0EtWmEtel1dW1tfQS1aYS16MC05XV0qXCknCisKKyMgRGVmaW5lIHN5c3RlbS1zcGVjaWZpYyB2YXJpYWJsZXMuCitjYXNlICRob3N0X29zIGluCithaXgqKQorICBzeW1jb2RlPSdbW0JDRFRdXScKKyAgOzsKK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgc3ltY29kZT0nW1tBQkNER0lTVFddXScKKyAgOzsKK2hwdXgqKQorICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICAgIHN5bWNvZGU9J1tbQUJDREVHUlNUXV0nCisgIGZpCisgIDs7Citpcml4KiB8IG5vbnN0b3B1eCopCisgIHN5bWNvZGU9J1tbQkNERUdSU1RdXScKKyAgOzsKK29zZiopCisgIHN5bWNvZGU9J1tbQkNERUdRUlNUXV0nCisgIDs7Citzb2xhcmlzKikKKyAgc3ltY29kZT0nW1tCRFJUXV0nCisgIDs7CitzY28zLjJ2NSopCisgIHN5bWNvZGU9J1tbRFRdXScKKyAgOzsKK3N5c3Y0LjJ1dzIqKQorICBzeW1jb2RlPSdbW0RUXV0nCisgIDs7CitzeXN2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqKQorICBzeW1jb2RlPSdbW0FCRFRdXScKKyAgOzsKK3N5c3Y0KQorICBzeW1jb2RlPSdbW0RGTlNUVV1dJworICA7OworZXNhYworCisjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB1c2UgaXRzIHN0YW5kYXJkIHN5bWJvbCBjb2Rlcy4KK2Nhc2UgYCROTSAtViAyPiYxYCBpbgorKkdOVSogfCAqJ3dpdGggQkZEJyopCisgIHN5bWNvZGU9J1tbQUJDREdJUlNUV11dJyA7OworZXNhYworCisjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBhIHByb3BlciBDIGRlY2xhcmF0aW9uLgorIyBTb21lIHN5c3RlbXMgKGVzcC4gb24gaWE2NCkgbGluayBkYXRhIGFuZCBjb2RlIHN5bWJvbHMgZGlmZmVyZW50bHksCisjIHNvIHVzZSB0aGlzIGdlbmVyYWwgYXBwcm9hY2guCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIC1lICdzL15UIC4qIFwoLipcKSQvZXh0ZXJuIGludCBcMSgpOy9wJyAtZSAncy9eJHN5bWNvZGUqIC4qIFwoLipcKSQvZXh0ZXJuIGNoYXIgXDE7L3AnIgorCisjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBzeW1ib2wgbmFtZSBhbmQgc3ltYm9sIGFkZHJlc3MKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbW14gXV0qXClbWyBdXSokLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW1teIF1dKlwpIFwoW1teIF1dKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFtbXiBdXSpcKVtbIF1dKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbW14gXV0qXCkgXChsaWJbW14gXV0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIC1lICdzL14kc3ltY29kZSogXChbW14gXV0qXCkgXChbW14gXV0qXCkkLyAge1wibGliXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorCisjIEhhbmRsZSBDUkxGIGluIG1pbmd3IHRvb2wgY2hhaW4KK29wdF9jcj0KK2Nhc2UgJGJ1aWxkX29zIGluCittaW5ndyopCisgIG9wdF9jcj1gJEVDSE8gJ3hcezAsMVx9JyB8IHRyIHggJ1wwMTUnYCAjIG9wdGlvbiBjciBpbiByZWdleHAKKyAgOzsKK2VzYWMKKworIyBUcnkgd2l0aG91dCBhIHByZWZpeCB1bmRlcnNjb3JlLCB0aGVuIHdpdGggaXQuCitmb3IgYWNfc3ltcHJmeCBpbiAiIiAiXyI7IGRvCisKKyAgIyBUcmFuc2Zvcm0gc3ltY29kZSwgc3ltcGF0LCBhbmQgc3ltcHJmeCBpbnRvIGEgcmF3IHN5bWJvbCBhbmQgYSBDIHN5bWJvbC4KKyAgc3lteGZybT0iXFwxICRhY19zeW1wcmZ4XFwyIFxcMiIKKworICAjIFdyaXRlIHRoZSByYXcgYW5kIEMgaWRlbnRpZmllcnMuCisgIGlmIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIk1TIGR1bXBiaW4iOyB0aGVuCisgICAgIyBGYWtlIGl0IGZvciBkdW1wYmluIGFuZCBzYXkgVCBmb3IgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb24KKyAgICAjIGFuZCBEIGZvciBhbnkgZ2xvYmFsIHZhcmlhYmxlLgorICAgICMgQWxzbyBmaW5kIEMrKyBhbmQgX19mYXN0Y2FsbCBzeW1ib2xzIGZyb20gTVNWQysrLAorICAgICMgd2hpY2ggc3RhcnQgd2l0aCBAIG9yID8uCisgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0iJEFXSyBbJyJcCisiICAgICB7bGFzdF9zZWN0aW9uPXNlY3Rpb247IHNlY3Rpb249XCQgM307IlwKKyIgICAgIC9eQ09GRiBTWU1CT0wgVEFCTEUve2ZvcihpIGluIGhpZGUpIGRlbGV0ZSBoaWRlW2ldfTsiXAorIiAgICAgL1NlY3Rpb24gbGVuZ3RoIC4qI3JlbG9jcy4qKHBpY2sgYW55KS97aGlkZVtsYXN0X3NlY3Rpb25dPTF9OyJcCisiICAgICBcJCAwIX4vRXh0ZXJuYWwgKlx8L3tuZXh0fTsiXAorIiAgICAgLyAwKyBVTkRFRiAve25leHR9OyAvIFVOREVGIFwoW158XVwpKigpL3tuZXh0fTsiXAorIiAgICAge2lmKGhpZGVbc2VjdGlvbl0pIG5leHR9OyJcCisiICAgICB7Zj0wfTsgXCQgMH4vXChcKS4qXHwve2Y9MX07IHtwcmludGYgZiA/IFwiVCBcIiA6IFwiRCBcIn07IlwKKyIgICAgIHtzcGxpdChcJCAwLCBhLCAvXHx8XHIvKTsgc3BsaXQoYVsyXSwgcyl9OyJcCisiICAgICBzWzFdfi9eW0A/XS97cHJpbnQgc1sxXSwgc1sxXTsgbmV4dH07IlwKKyIgICAgIHNbMV1+cHJmeCB7c3BsaXQoc1sxXSx0LFwiQFwiKTsgcHJpbnQgdFsxXSwgc3Vic3RyKHRbMV0sbGVuZ3RoKHByZngpKX0iXAorIiAgICAgJyBwcmZ4PV4kYWNfc3ltcHJmeF0iCisgIGVsc2UKKyAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSJzZWQgLW4gLWUgJ3MvXi4qW1sJIF1dXCgkc3ltY29kZSRzeW1jb2RlKlwpW1sJIF1dW1sJIF1dKiRhY19zeW1wcmZ4JHN5bXBhdCRvcHRfY3IkLyRzeW14ZnJtL3AnIgorICBmaQorICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSB8IHNlZCAnLyBfX2dudV9sdG8vZCciCisKKyAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGUgcGlwZSB3b3JrcyBjb3JyZWN0bHkuCisgIHBpcGVfd29ya3M9bm8KKworICBybSAtZiBjb25mdGVzdCoKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKK2NoYXIgbm1fdGVzdF92YXI7Cit2b2lkIG5tX3Rlc3RfZnVuYyh2b2lkKTsKK3ZvaWQgbm1fdGVzdF9mdW5jKHZvaWQpe30KKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCitpbnQgbWFpbigpe25tX3Rlc3RfdmFyPSdhJztubV90ZXN0X2Z1bmMoKTtyZXR1cm4oMCk7fQorX0xUX0VPRgorCisgIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisgICAgIyBOb3cgdHJ5IHRvIGdyYWIgdGhlIHN5bWJvbHMuCisgICAgbmxpc3Q9Y29uZnRlc3Qubm0KKyAgICBpZiBBQ19UUllfRVZBTChOTSBjb25mdGVzdC4kYWNfb2JqZXh0IFx8ICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgXD4gJG5saXN0KSAmJiB0ZXN0IC1zICIkbmxpc3QiOyB0aGVuCisgICAgICAjIFRyeSBzb3J0aW5nIGFuZCB1bmlxdWlmeWluZyB0aGUgb3V0cHV0LgorICAgICAgaWYgc29ydCAiJG5saXN0IiB8IHVuaXEgPiAiJG5saXN0IlQ7IHRoZW4KKwltdiAtZiAiJG5saXN0IlQgIiRubGlzdCIKKyAgICAgIGVsc2UKKwlybSAtZiAiJG5saXN0IlQKKyAgICAgIGZpCisKKyAgICAgICMgTWFrZSBzdXJlIHRoYXQgd2Ugc25hZ2dlZCBhbGwgdGhlIHN5bWJvbHMgd2UgbmVlZC4KKyAgICAgIGlmICRHUkVQICcgbm1fdGVzdF92YXIkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisJaWYgJEdSRVAgJyBubV90ZXN0X2Z1bmMkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisJICBjYXQgPDxfTFRfRU9GID4gY29uZnRlc3QuJGFjX2V4dAorLyogS2VlcCB0aGlzIGNvZGUgaW4gc3luYyBiZXR3ZWVuIGxpYnRvb2wubTQsIGx0bWFpbiwgbHRfc3lzdGVtLmgsIGFuZCB0ZXN0cy4gICovCisjaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfV0lOMzJfV0NFKQorLyogREFUQSBpbXBvcnRzIGZyb20gRExMcyBvbiBXSU4zMiBjb24ndCBiZSBjb25zdCwgYmVjYXVzZSBydW50aW1lCisgICByZWxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIC0tIHNlZSBsZCdzIGRvY3VtZW50YXRpb24gb24gcHNldWRvLXJlbG9jcy4gICovCisjIGRlZmluZSBMVEAmdEBfRExTWU1fQ09OU1QKKyNlbGlmIGRlZmluZWQoX19vc2ZfXykKKy8qIFRoaXMgc3lzdGVtIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHJlbG9jYXRpb25zIGluIGNvbnN0IGRhdGEuICAqLworIyBkZWZpbmUgTFRAJnRAX0RMU1lNX0NPTlNUCisjZWxzZQorIyBkZWZpbmUgTFRAJnRAX0RMU1lNX0NPTlNUIGNvbnN0CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCitfTFRfRU9GCisJICAjIE5vdyBnZW5lcmF0ZSB0aGUgc3ltYm9sIGZpbGUuCisJICBldmFsICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiJyA8ICIkbmxpc3QiIHwgJEdSRVAgLXYgbWFpbiA+PiBjb25mdGVzdC4kYWNfZXh0JworCisJICBjYXQgPDxfTFRfRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKKworLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICAqLworTFRAJnRAX0RMU1lNX0NPTlNUIHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgKm5hbWU7CisgIHZvaWQgICAgICAgKmFkZHJlc3M7Cit9CitsdF9fUFJPR1JBTV9fTFRYX3ByZWxvYWRlZF9zeW1ib2xzW1tdXSA9Cit7CisgIHsgIkBQUk9HUkFNQCIsICh2b2lkICopIDAgfSwKK19MVF9FT0YKKwkgICRTRUQgInMvXiRzeW1jb2RlJHN5bWNvZGUqIFwoLipcKSBcKC4qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sLyIgPCAiJG5saXN0IiB8ICRHUkVQIC12IG1haW4gPj4gY29uZnRlc3QuJGFjX2V4dAorCSAgY2F0IDw8XF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAorICB7MCwgKHZvaWQgKikgMH0KK307CisKKy8qIFRoaXMgd29ya3MgYXJvdW5kIGEgcHJvYmxlbSBpbiBGcmVlQlNEIGxpbmtlciAqLworI2lmZGVmIEZSRUVCU0RfV09SS0FST1VORAorc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKKyAgcmV0dXJuIGx0X19QUk9HUkFNX19MVFhfcHJlbG9hZGVkX3N5bWJvbHM7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKK19MVF9FT0YKKwkgICMgTm93IHRyeSBsaW5raW5nIHRoZSB0d28gZmlsZXMuCisJICBtdiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0c3RtLiRhY19vYmpleHQKKwkgIGx0X2dsb2JzeW1fc2F2ZV9MSUJTPSRMSUJTCisJICBsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKwkgIExJQlM9ImNvbmZ0c3RtLiRhY19vYmpleHQiCisJICBDRkxBR1M9IiRDRkxBR1MkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpIgorCSAgaWYgQUNfVFJZX0VWQUwoYWNfbGluaykgJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorCSAgICBwaXBlX3dvcmtzPXllcworCSAgZmkKKwkgIExJQlM9JGx0X2dsb2JzeW1fc2F2ZV9MSUJTCisJICBDRkxBR1M9JGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1MKKwllbHNlCisJICBlY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X2Z1bmMgaW4gJG5saXN0IiA+JkFTX01FU1NBR0VfTE9HX0ZECisJZmkKKyAgICAgIGVsc2UKKwllY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X3ZhciBpbiAkbmxpc3QiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgIGZpCisgICAgZWxzZQorICAgICAgZWNobyAiY2Fubm90IHJ1biAkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgIGZpCisgIGVsc2UKKyAgICBlY2hvICIkcHJvZ25hbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KiBjb25mdHN0KgorCisgICMgRG8gbm90IHVzZSB0aGUgZ2xvYmFsX3N5bWJvbF9waXBlIHVubGVzcyBpdCB3b3Jrcy4KKyAgaWYgdGVzdCAiJHBpcGVfd29ya3MiID0geWVzOyB0aGVuCisgICAgYnJlYWsKKyAgZWxzZQorICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9CisgIGZpCitkb25lCitdKQoraWYgdGVzdCAteiAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCisgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPQorZmkKK2lmIHRlc3QgLXogIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIjsgdGhlbgorICBBQ19NU0dfUkVTVUxUKGZhaWxlZCkKK2Vsc2UKKyAgQUNfTVNHX1JFU1VMVChvaykKK2ZpCisKKyMgUmVzcG9uc2UgZmlsZSBzdXBwb3J0LgoraWYgdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiTVMgZHVtcGJpbiI7IHRoZW4KKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCitlbGlmICROTSAtLWhlbHAgMj4vZGV2L251bGwgfCBncmVwICdbW0BdXUZJTEUnID4vZGV2L251bGw7IHRoZW4KKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCitmaQorCitfTFRfREVDTChbZ2xvYmFsX3N5bWJvbF9waXBlXSwgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGVdLCBbMV0sCisgICAgW1Rha2UgdGhlIG91dHB1dCBvZiBubSBhbmQgcHJvZHVjZSBhIGxpc3Rpbmcgb2YgcmF3IHN5bWJvbHMgYW5kIEMgbmFtZXNdKQorX0xUX0RFQ0woW2dsb2JhbF9zeW1ib2xfdG9fY2RlY2xdLCBbbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2xdLCBbMV0sCisgICAgW1RyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgcHJvcGVyIEMgZGVjbGFyYXRpb25dKQorX0xUX0RFQ0woW2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NdLAorICAgIFtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc10sIFsxXSwKKyAgICBbVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyXSkKK19MVF9ERUNMKFtnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXhdLAorICAgIFtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4XSwgWzFdLAorICAgIFtUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIgd2hlbiBsaWIgcHJlZml4IGlzIG5lZWRlZF0pCitfTFRfREVDTChbXSwgW25tX2ZpbGVfbGlzdF9zcGVjXSwgWzFdLAorICAgIFtTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMgZm9yICROTV0pCitdKSAjIF9MVF9DTURfR0xPQkFMX1NZTUJPTFMKKworCisjIF9MVF9DT01QSUxFUl9QSUMoW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfQ09NUElMRVJfUElDXSwKK1ttNF9yZXF1aXJlKFtfTFRfVEFHX0NPTVBJTEVSXSlkbmwKK19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPQorX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQorX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPQorCittNF9pZihbJDFdLCBbQ1hYXSwgWworICAjIEMrKyBzcGVjaWZpYyBjYXNlcyBmb3IgcGljLCBzdGF0aWMsIHdsLCBldGMuCisgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJworCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeCopCisgICAgICAjIEFsbCBBSVggY29kZSBpcyBQSUMuCisgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYW1pZ2FvcyopCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgcG93ZXJwYykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKyAgICAgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisgICAgICAgIDs7CisgICAgICBtNjhrKQorICAgICAgICAgICAgIyBGSVhNRTogd2UgbmVlZCBhdCBsZWFzdCA2ODAyMCBjb2RlIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dAorICAgICAgICAgICAgIyBhZGRpbmcgdGhlIGAtbTY4MDIwJyBmbGFnIHRvIEdDQyBwcmV2ZW50cyBidWlsZGluZyBhbnl0aGluZyBiZXR0ZXIsCisgICAgICAgICAgICAjIGxpa2UgYC1tNjgwNDAnLgorICAgICAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctbTY4MDIwIC1yZXNpZGVudDMyIC1tYWx3YXlzLXJlc3RvcmUtYTQnCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgYmVvcyogfCBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqIHwgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIHRoZXNlIE9TZXMuCisgICAgICA7OworICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBvczIqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisgICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorICAgICAgIyBBbHRob3VnaCB0aGUgY3lnd2luIGdjYyBpZ25vcmVzIC1mUElDLCBzdGlsbCBuZWVkIHRoaXMgZm9yIG9sZC1zdHlsZQorICAgICAgIyAoLS1kaXNhYmxlLWF1dG8taW1wb3J0KSBsaWJyYXJpZXMKKyAgICAgIG00X2lmKFskMV0sIFtHQ0pdLCBbXSwKKwlbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctRERMTF9FWFBPUlQnXSkKKyAgICAgIDs7CisgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KKyAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZuby1jb21tb24nCisgICAgICA7OworICAgICpkamdwcCopCisgICAgICAjIERKR1BQIGRvZXMgbm90IHN1cHBvcnQgc2hhcmVkIGxpYnJhcmllcyBhdCBhbGwKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0KKyAgICAgIDs7CisgICAgaGFpa3UqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIEhhaWt1LgorICAgICAgIyBUaGUgIi1zdGF0aWMiIGZsYWcgZXhpc3RzLCBidXQgaXMgYnJva2VuLgorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPQorICAgICAgOzsKKyAgICBpbnRlcml4W1szLTldXSopCisgICAgICAjIEludGVyaXggMy54IGdjYyAtZnBpYy8tZlBJQyBvcHRpb25zIGdlbmVyYXRlIGJyb2tlbiBjb2RlLgorICAgICAgIyBJbnN0ZWFkLCB3ZSByZWxvY2F0ZSBzaGFyZWQgbGlicmFyaWVzIGF0IHJ1bnRpbWUuCisgICAgICA7OworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9LUtjb25mb3JtX3BpYworICAgICAgZmkKKyAgICAgIDs7CisgICAgaHB1eCopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgNjQtYml0IFBBIEhQLVVYLCBidXQgbm90IGZvciAzMi1iaXQKKyAgICAgICMgUEEgSFAtVVguICBPbiBJQTY0IEhQLVVYLCBQSUMgaXMgdGhlIGRlZmF1bHQgYnV0IHRoZSBwaWMgZmxhZworICAgICAgIyBzZXRzIHRoZSBkZWZhdWx0IFRMUyBtb2RlbCBhbmQgYWZmZWN0cyBpbmxpbmluZy4KKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBocHBhKjY0KikKKwk7OworICAgICAgKikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworCTs7CisgICAgICBlc2FjCisgICAgICA7OworICAgICpxbngqIHwgKm50byopCisgICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQorICAgICAgIyBpdCB3aWxsIGNvcmVkdW1wLgorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQyAtc2hhcmVkJworICAgICAgOzsKKyAgICAqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKyAgICAgIDs7CisgICAgZXNhYworICBlbHNlCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4W1s0LTldXSopCisJIyBBbGwgQUlYIGNvZGUgaXMgUElDLgorCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJICAjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgorCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwllbHNlCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ibnNvIC1iSTovbGliL3N5c2NhbGxzLmV4cCcKKwlmaQorCTs7CisgICAgICBjaG9ydXMqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJY3hjaDY4KikKKwkgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJICAjIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0iLS1ub19hdXRvX2luc3RhbnRpYXRpb24gLXUgX19tYWluIC11IF9fcHJlbWFpbiAtdSBfYWJvcnQgLXIgJENPT0xfRElSL2xpYi9saWJPcmIuYSAkTVZNRV9ESVIvbGliL0NDL2xpYkMuYSAkTVZNRV9ESVIvbGliL2NsYXNzaXgvbGliY3gucy5hIgorCSAgOzsKKwllc2FjCisJOzsKKyAgICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBvczIqIHwgcHczMiogfCBjZWdjYyopCisJIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZworCSMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCisJbTRfaWYoWyQxXSwgW0dDSl0sIFtdLAorCSAgW19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLURETExfRVhQT1JUJ10pCisJOzsKKyAgICAgIGRndXgqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBlYysrKikKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgICAgOzsKKwkgIGdoY3gqKQorCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1waWMnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorCSMgRnJlZUJTRCB1c2VzIEdOVSBDKysKKwk7OworICAgICAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIENDKikKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nJHt3bH0tYSAke3dsfWFyY2hpdmUnCisJICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NDsgdGhlbgorCSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nK1onCisJICAgIGZpCisJICAgIDs7CisJICBhQ0MqKQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPScke3dsfS1hICR7d2x9YXJjaGl2ZScKKwkgICAgY2FzZSAkaG9zdF9jcHUgaW4KKwkgICAgaHBwYSo2NCp8aWE2NCopCisJICAgICAgIyArWiB0aGUgZGVmYXVsdAorCSAgICAgIDs7CisJICAgICopCisJICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPScrWicKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgaW50ZXJpeCopCisJIyBUaGlzIGlzIGM4OSwgd2hpY2ggaXMgTVMgVmlzdWFsIEMrKyAobm8gc2hhcmVkIGxpYnMpCisJIyBBbnlvbmUgd2FudHMgdG8gZG8gYSBwb3J0PworCTs7CisgICAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyopCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJworCSAgICAjIENDIHBpYyBmbGFnIC1LUElDIGlzIHRoZSBkZWZhdWx0LgorCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgS0NDKikKKwkgICAgIyBLQUkgQysrIENvbXBpbGVyCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctLWJhY2tlbmQgLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKwkgICAgOzsKKwkgIGVjcGMqICkKKwkgICAgIyBvbGQgSW50ZWwgQysrIGZvciB4ODZfNjQgd2hpY2ggc3RpbGwgc3VwcG9ydGVkIC1LUElDLgorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJworCSAgICA7OworCSAgaWNwYyogKQorCSAgICAjIEludGVsIEMrKywgdXNlZCB0byBiZSBpbmNvbXBhdGlibGUgd2l0aCBHQ0MuCisJICAgICMgSUNDIDEwIGRvZXNuJ3QgYWNjZXB0IC1LUElDIGFueSBtb3JlLgorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJworCSAgICA7OworCSAgcGdDQyogfCBwZ2NwcCopCisJICAgICMgUG9ydGxhbmQgR3JvdXAgQysrIGNvbXBpbGVyCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mcGljJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgICA7OworCSAgY3h4KikKKwkgICAgIyBDb21wYXEgQysrCisJICAgICMgTWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBpcyBlbXB0eS4gIEl0IGFwcGVhcnMgdGhhdCBhbGwgQWxwaGEKKwkgICAgIyBMaW51eCBhbmQgQ29tcGFxIFRydTY0IFVuaXggb2JqZWN0cyBhcmUgUElDLgorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCisJICAgIDs7CisJICB4bGMqIHwgeGxDKiB8IGJneGxbW2NDXV0qIHwgbXBpeGxbW2NDXV0qKQorCSAgICAjIElCTSBYTCA4LjAsIDkuMCBvbiBQUEMgYW5kIEJsdWVHZW5lCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1xcGljJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1xc3RhdGljbGluaycKKwkgICAgOzsKKwkgICopCisJICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorCSAgICAqU3VuXCBDKikKKwkgICAgICAjIFN1biBDKysgNS45CisJICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctUW9wdGlvbiBsZCAnCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgICA7OworCWVzYWMKKwk7OworICAgICAgbHlueG9zKikKKwk7OworICAgICAgbTg4ayopCisJOzsKKyAgICAgIG12cyopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIGN4eCopCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLVcgYyxleHBvcnRhbGwnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgbmV0YnNkKikKKwk7OworICAgICAgKnFueCogfCAqbnRvKikKKyAgICAgICAgIyBRTlggdXNlcyBHTlUgQysrLCBidXQgbmVlZCB0byBkZWZpbmUgLXNoYXJlZCBvcHRpb24gdG9vLCBvdGhlcndpc2UKKyAgICAgICAgIyBpdCB3aWxsIGNvcmVkdW1wLgorICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDIC1zaGFyZWQnCisgICAgICAgIDs7CisgICAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIEtDQyopCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctLWJhY2tlbmQgLVdsLCcKKwkgICAgOzsKKwkgIFJDQyopCisJICAgICMgUmF0aW9uYWwgQysrIDIuNC4xCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKKwkgICAgOzsKKwkgIGN4eCopCisJICAgICMgRGlnaXRhbC9Db21wYXEgQysrCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICAjIE1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgaXMgZW1wdHkuICBJdCBhcHBlYXJzIHRoYXQgYWxsIEFscGhhCisJICAgICMgTGludXggYW5kIENvbXBhcSBUcnU2NCBVbml4IG9iamVjdHMgYXJlIFBJQy4KKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIHBzb3MqKQorCTs7CisgICAgICBzb2xhcmlzKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgQ0MqIHwgc3VuQ0MqKQorCSAgICAjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctUW9wdGlvbiBsZCAnCisJICAgIDs7CisJICBnY3gqKQorCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1QSUMnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgc3Vub3M0KikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgQ0MqKQorCSAgICAjIFN1biBDKysgNC54CisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwkgICAgOzsKKwkgIGxjYyopCisJICAgICMgTHVjaWQKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIHN5c3Y1KiB8IHVuaXh3YXJlKiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCBPcGVuVU5JWCopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIENDKikKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICB0YW5kZW0qKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBOQ0MqKQorCSAgICAjIE5vblN0b3AtVVggTkNDIDMuMjAKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICB2eHdvcmtzKikKKwk7OworICAgICAgKikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZCwgJDEpPW5vCisJOzsKKyAgICBlc2FjCisgIGZpCitdLAorWworICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXN0YXRpYycKKworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeCopCisgICAgICAjIEFsbCBBSVggY29kZSBpcyBQSUMuCisgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYW1pZ2FvcyopCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgcG93ZXJwYykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKyAgICAgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisgICAgICAgIDs7CisgICAgICBtNjhrKQorICAgICAgICAgICAgIyBGSVhNRTogd2UgbmVlZCBhdCBsZWFzdCA2ODAyMCBjb2RlIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dAorICAgICAgICAgICAgIyBhZGRpbmcgdGhlIGAtbTY4MDIwJyBmbGFnIHRvIEdDQyBwcmV2ZW50cyBidWlsZGluZyBhbnl0aGluZyBiZXR0ZXIsCisgICAgICAgICAgICAjIGxpa2UgYC1tNjgwNDAnLgorICAgICAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctbTY4MDIwIC1yZXNpZGVudDMyIC1tYWx3YXlzLXJlc3RvcmUtYTQnCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgYmVvcyogfCBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqIHwgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIHRoZXNlIE9TZXMuCisgICAgICA7OworCisgICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKiB8IGNlZ2NjKikKKyAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKKyAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCisgICAgICAjIEFsdGhvdWdoIHRoZSBjeWd3aW4gZ2NjIGlnbm9yZXMgLWZQSUMsIHN0aWxsIG5lZWQgdGhpcyBmb3Igb2xkLXN0eWxlCisgICAgICAjICgtLWRpc2FibGUtYXV0by1pbXBvcnQpIGxpYnJhcmllcworICAgICAgbTRfaWYoWyQxXSwgW0dDSl0sIFtdLAorCVtfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1ERExMX0VYUE9SVCddKQorICAgICAgOzsKKworICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCisgICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mbm8tY29tbW9uJworICAgICAgOzsKKworICAgIGhhaWt1KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciBIYWlrdS4KKyAgICAgICMgVGhlICItc3RhdGljIiBmbGFnIGV4aXN0cywgYnV0IGlzIGJyb2tlbi4KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0KKyAgICAgIDs7CisKKyAgICBocHV4KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciA2NC1iaXQgUEEgSFAtVVgsIGJ1dCBub3QgZm9yIDMyLWJpdAorICAgICAgIyBQQSBIUC1VWC4gIE9uIElBNjQgSFAtVVgsIFBJQyBpcyB0aGUgZGVmYXVsdCBidXQgdGhlIHBpYyBmbGFnCisgICAgICAjIHNldHMgdGhlIGRlZmF1bHQgVExTIG1vZGVsIGFuZCBhZmZlY3RzIGlubGluaW5nLgorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIGhwcGEqNjQqKQorCSMgK1ogdGhlIGRlZmF1bHQKKwk7OworICAgICAgKikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworCTs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgaW50ZXJpeFtbMy05XV0qKQorICAgICAgIyBJbnRlcml4IDMueCBnY2MgLWZwaWMvLWZQSUMgb3B0aW9ucyBnZW5lcmF0ZSBicm9rZW4gY29kZS4KKyAgICAgICMgSW5zdGVhZCwgd2UgcmVsb2NhdGUgc2hhcmVkIGxpYnJhcmllcyBhdCBydW50aW1lLgorICAgICAgOzsKKworICAgIG1zZG9zZGpncHAqKQorICAgICAgIyBKdXN0IGJlY2F1c2Ugd2UgdXNlIEdDQyBkb2Vzbid0IG1lYW4gd2Ugc3VkZGVubHkgZ2V0IHNoYXJlZCBsaWJyYXJpZXMKKyAgICAgICMgb24gc3lzdGVtcyB0aGF0IGRvbid0IHN1cHBvcnQgdGhlbS4KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm8KKyAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KKyAgICAgIDs7CisKKyAgICAqbnRvKiB8ICpxbngqKQorICAgICAgIyBRTlggdXNlcyBHTlUgQysrLCBidXQgbmVlZCB0byBkZWZpbmUgLXNoYXJlZCBvcHRpb24gdG9vLCBvdGhlcndpc2UKKyAgICAgICMgaXQgd2lsbCBjb3JlZHVtcC4KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMgLXNoYXJlZCcKKyAgICAgIDs7CisKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPS1LY29uZm9ybV9waWMKKyAgICAgIGZpCisgICAgICA7OworCisgICAgKikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisgICAgICA7OworICAgIGVzYWMKKworICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgbnZjYyopICMgQ3VkYSBDb21waWxlciBEcml2ZXIgMi4yCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVhsaW5rZXIgJworICAgICAgaWYgdGVzdCAtbiAiJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKSI7IHRoZW4KKyAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSItWGNvbXBpbGVyICRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkiCisgICAgICBmaQorICAgICAgOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICAjIFBPUlRNRSBDaGVjayBmb3IgZmxhZyB0byBwYXNzIGxpbmtlciBmbGFncyB0aHJvdWdoIHRoZSBzeXN0ZW0gY29tcGlsZXIuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeCopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLWJuc28gLWJJOi9saWIvc3lzY2FsbHMuZXhwJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqIHwgY2VnY2MqKQorICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZworICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KKyAgICAgIG00X2lmKFskMV0sIFtHQ0pdLCBbXSwKKwlbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctRERMTF9FWFBPUlQnXSkKKyAgICAgIDs7CisKKyAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIElBNjQgSFAtVVggYW5kIDY0LWJpdCBIUC1VWCwgYnV0CisgICAgICAjIG5vdCBmb3IgUEEgSFAtVVguCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgaHBwYSo2NCp8aWE2NCopCisJIyArWiB0aGUgZGVmYXVsdAorCTs7CisgICAgICAqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nK1onCisJOzsKKyAgICAgIGVzYWMKKyAgICAgICMgSXMgdGhlcmUgYSBiZXR0ZXIgbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgdGhhdCB3b3JrcyB3aXRoIHRoZSBidW5kbGVkIENDPworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPScke3dsfS1hICR7d2x9YXJjaGl2ZScKKyAgICAgIDs7CisKKyAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICAjIFBJQyAod2l0aCAtS1BJQykgaXMgdGhlIGRlZmF1bHQuCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJworICAgICAgOzsKKworICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAjIG9sZCBJbnRlbCBmb3IgeDg2XzY0IHdoaWNoIHN0aWxsIHN1cHBvcnRlZCAtS1BJQy4KKyAgICAgIGVjYyopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCisgICAgICAgIDs7CisgICAgICAjIGljYyB1c2VkIHRvIGJlIGluY29tcGF0aWJsZSB3aXRoIEdDQy4KKyAgICAgICMgSUNDIDEwIGRvZXNuJ3QgYWNjZXB0IC1LUElDIGFueSBtb3JlLgorICAgICAgaWNjKiB8IGlmb3J0KikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXN0YXRpYycKKyAgICAgICAgOzsKKyAgICAgICMgTGFoZXkgRm9ydHJhbiA4LjEuCisgICAgICBsZjk1KikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy0tc2hhcmVkJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLS1zdGF0aWMnCisJOzsKKyAgICAgIG5hZ2ZvciopCisJIyBOQUcgRm9ydHJhbiBjb21waWxlcgorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsLVdsLCwnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctUElDJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJOzsKKyAgICAgIHBnY2MqIHwgcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqIHwgcGdmb3J0cmFuKikKKyAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBjb21waWxlcnMgKCpub3QqIHRoZSBQZW50aXVtIGdjYyBjb21waWxlciwKKwkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZwaWMnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgICAgOzsKKyAgICAgIGNjYyopCisgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgICAgICAjIEFsbCBBbHBoYSBjb2RlIGlzIFBJQy4KKyAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKKyAgICAgICAgOzsKKyAgICAgIHhsKiB8IGJneGwqIHwgYmdmKiB8IG1waXhsKikKKwkjIElCTSBYTCBDIDguMC9Gb3J0cmFuIDEwLjEsIDExLjEgb24gUFBDIGFuZCBCbHVlR2VuZQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXFwaWMnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctcXN0YXRpY2xpbmsnCisJOzsKKyAgICAgICopCisJY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCisJKlN1blwgQ2VyZXNcIEZvcnRyYW4qIHwgKlN1bipGb3J0cmFuKlwgW1sxLTddXS4qIHwgKlN1bipGb3J0cmFuKlwgOC5bWzAtM11dKikKKwkgICMgU3VuIEZvcnRyYW4gOC4zIHBhc3NlcyBhbGwgdW5yZWNvZ25pemVkIGZsYWdzIHRvIHRoZSBsaW5rZXIKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9JycKKwkgIDs7CisJKlN1blwgRiogfCAqU3VuKkZvcnRyYW4qKQorCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVFvcHRpb24gbGQgJworCSAgOzsKKwkqU3VuXCBDKikKKwkgICMgU3VuIEMgNS45CisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgOzsKKyAgICAgICAgKkludGVsKlwgW1tDRl1dKkNvbXBpbGVyKikKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXN0YXRpYycKKwkgIDs7CisJKlBvcnRsYW5kXCBHcm91cCopCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZwaWMnCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgOzsKKwllc2FjCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBuZXdzb3M2KQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgKm50byogfCAqcW54KikKKyAgICAgICMgUU5YIHVzZXMgR05VIEMrKywgYnV0IG5lZWQgdG8gZGVmaW5lIC1zaGFyZWQgb3B0aW9uIHRvbywgb3RoZXJ3aXNlCisgICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDIC1zaGFyZWQnCisgICAgICA7OworCisgICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICAjIEFsbCBPU0YvMSBjb2RlIGlzIFBJQy4KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCisgICAgICA7OworCisgICAgcmRvcyopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJworICAgICAgOzsKKworICAgIHNvbGFyaXMqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgZjc3KiB8IGY5MCogfCBmOTUqIHwgc3VuZjc3KiB8IHN1bmY5MCogfCBzdW5mOTUqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctUW9wdGlvbiBsZCAnOzsKKyAgICAgICopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBzdW5vczQqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICcKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLVBJQycKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgc3lzdjQgfCBzeXN2NC4ydXcyKiB8IHN5c3Y0LjMqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjIDt0aGVuCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS2NvbmZvcm1fcGljJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICBmaQorICAgICAgOzsKKworICAgIHN5c3Y1KiB8IHVuaXh3YXJlKiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCBPcGVuVU5JWCopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgIHVuaWNvcyopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICB1dHM0KikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgKikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm8KKyAgICAgIDs7CisgICAgZXNhYworICBmaQorXSkKK2Nhc2UgJGhvc3Rfb3MgaW4KKyAgIyBGb3IgcGxhdGZvcm1zIHdoaWNoIGRvIG5vdCBzdXBwb3J0IFBJQywgLURQSUMgaXMgbWVhbmluZ2xlc3M6CisgICpkamdwcCopCisgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQorICAgIDs7CisgICopCisgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSIkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpQCZ0QG00X2lmKFskMV0sW10sWyAtRFBJQ10sW200X2lmKFskMV0sW0NYWF0sWyAtRFBJQ10sW10pXSkiCisgICAgOzsKK2VzYWMKKworQUNfQ0FDSEVfQ0hFQ0soW2ZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDXSwKKyAgW19MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9waWMsICQxKV0sCisgIFtfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9JF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKV0pCitfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9JF9MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9waWMsICQxKQorCisjCisjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCisjCitpZiB0ZXN0IC1uICIkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIjsgdGhlbgorICBfTFRfQ09NUElMRVJfT1BUSU9OKFtpZiAkY29tcGlsZXIgUElDIGZsYWcgJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKSB3b3Jrc10sCisgICAgW19MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3MsICQxKV0sCisgICAgWyRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSlAJnRAbTRfaWYoWyQxXSxbXSxbIC1EUElDXSxbbTRfaWYoWyQxXSxbQ1hYXSxbIC1EUElDXSxbXSldKV0sIFtdLAorICAgIFtjYXNlICRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkgaW4KKyAgICAgIiIgfCAiICIqKSA7OworICAgICAqKSBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9IiAkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIiA7OworICAgICBlc2FjXSwKKyAgICBbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQorICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZCwgJDEpPW5vXSkKK2ZpCitfTFRfVEFHREVDTChbcGljX2ZsYWddLCBbbHRfcHJvZ19jb21waWxlcl9waWNdLCBbMV0sCisJW0FkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0c10pCisKK19MVF9UQUdERUNMKFt3bF0sIFtsdF9wcm9nX2NvbXBpbGVyX3dsXSwgWzFdLAorCVtIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyXSkKKyMKKyMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KKyMKK3dsPSRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKSBldmFsIGx0X3RtcF9zdGF0aWNfZmxhZz1cIiRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSlcIgorX0xUX0xJTktFUl9PUFRJT04oW2lmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzXSwKKyAgX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3JrcywgJDEpLAorICAkbHRfdG1wX3N0YXRpY19mbGFnLAorICBbXSwKKyAgW19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT1dKQorX0xUX1RBR0RFQ0woW2xpbmtfc3RhdGljX2ZsYWddLCBbbHRfcHJvZ19jb21waWxlcl9zdGF0aWNdLCBbMV0sCisJW0NvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmddKQorXSkjIF9MVF9DT01QSUxFUl9QSUMKKworCisjIF9MVF9MSU5LRVJfU0hMSUJTKFtUQUdOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZWUgaWYgdGhlIGxpbmtlciBzdXBwb3J0cyBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzLgorbTRfZGVmdW4oW19MVF9MSU5LRVJfU0hMSUJTXSwKK1tBQ19SRVFVSVJFKFtMVF9QQVRIX0xEXSlkbmwKK0FDX1JFUVVJUkUoW0xUX1BBVEhfTk1dKWRubAorbTRfcmVxdWlyZShbX0xUX1BBVEhfTUFOSUZFU1RfVE9PTF0pZG5sCittNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCittNF9yZXF1aXJlKFtfTFRfQ01EX0dMT0JBTF9TWU1CT0xTXSlkbmwKK200X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAorQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQorbTRfaWYoWyQxXSwgW0NYWF0sIFsKKyAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgX0xUX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT1bJ19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKiddCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYWl4W1s0LTldXSopCisgICAgIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gd2UgZG9uJ3Qgd2FudCB0aGUgIi1DIiBvcHRpb24uCisgICAgIyAtQyBtZWFucyBkZW1hbmdsZSB0byBBSVggbm0sIGJ1dCBtZWFucyBkb24ndCBkZW1hbmdsZSB3aXRoIEdOVSBubQorICAgICMgQWxzbywgQUlYIG5tIHRyZWF0cyB3ZWFrIGRlZmluZWQgc3ltYm9scyBsaWtlIG90aGVyIGdsb2JhbCBkZWZpbmVkCisgICAgIyBzeW1ib2xzLCB3aGVyZWFzIEdOVSBubSBtYXJrcyB0aGVtIGFzICJXIi4KKyAgICBpZiAkTk0gLVYgMj4mMSB8ICRHUkVQICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NIC1CcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikgfHwgKFwkIDIgPT0gIlciKSkgJiYgKFtzdWJzdHJdKFwkIDMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFwkIDMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCisgICAgZWxzZQorICAgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAtQkNwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSkgJiYgKFtzdWJzdHJdKFwkIDMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFwkIDMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCisgICAgZmkKKyAgICA7OworICBwdzMyKikKKyAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0iJGx0ZGxsX2NtZHMiCisgICAgOzsKKyAgY3lnd2luKiB8IG1pbmd3KiB8IGNlZ2NjKikKKyAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgIGNsKikKKyAgICAgIF9MVF9UQUdWQVIoZXhjbHVkZV9leHBzeW1zLCAkMSk9J19OVUxMX0lNUE9SVF9ERVNDUklQVE9SfF9JTVBPUlRfREVTQ1JJUFRPUl8uKicKKyAgICAgIDs7CisgICAgKikKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW1tCQ0RHUlNdXVtbIF1dL3MvLipbWyBdXVwoW1teIF1dKlwpL1wxIERBVEEvO3MvXi4qW1sgXV1fX25tX19cKFtbXiBdXSpcKVtbIF1dW1teIF1dKi9cMSBEQVRBLzsvXklbWyBdXS9kOy9eW1tBSVRXXV1bWyBdXS9zLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworICAgICAgX0xUX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT1bJ1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZSddCisgICAgICA7OworICAgIGVzYWMKKyAgICA7OworICAqKQorICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgICAgOzsKKyAgZXNhYworXSwgWworICBydW5wYXRoX3Zhcj0KKyAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQorICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCisgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9CisgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPQorICBfTFRfVEFHVkFSKGNvbXBpbGVyX25lZWRzX29iamVjdCwgJDEpPW5vCisgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPW5vCisgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9CisgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPW5vCisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPQorICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9dW5zdXBwb3J0ZWQKKyAgX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9dW5rbm93bgorICBfTFRfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9CisgIF9MVF9UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9CisgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpPQorICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzLCAkMSk9CisgIF9MVF9UQUdWQVIodGhyZWFkX3NhZmVfZmxhZ19zcGVjLCAkMSk9CisgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KKyAgIyBpbmNsdWRlX2V4cHN5bXMgc2hvdWxkIGJlIGEgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgc3ltYm9scyB0byBiZSAqYWx3YXlzKgorICAjIGluY2x1ZGVkIGluIHRoZSBzeW1ib2wgbGlzdAorICBfTFRfVEFHVkFSKGluY2x1ZGVfZXhwc3ltcywgJDEpPQorICAjIGV4Y2x1ZGVfZXhwc3ltcyBjYW4gYmUgYW4gZXh0ZW5kZWQgcmVnZXhwIG9mIHN5bWJvbHMgdG8gZXhjbHVkZQorICAjIGl0IHdpbGwgYmUgd3JhcHBlZCBieSBgICgnIGFuZCBgKSQnLCBzbyBvbmUgbXVzdCBub3QgbWF0Y2ggYmVnaW5uaW5nIG9yCisgICMgZW5kIG9mIGxpbmUuICBFeGFtcGxlOiBgYXxiY3wuKmQuKicgd2lsbCBleGNsdWRlIHRoZSBzeW1ib2xzIGBhJyBhbmQgYGJjJywKKyAgIyBhcyB3ZWxsIGFzIGFueSBzeW1ib2wgdGhhdCBjb250YWlucyBgZCcuCisgIF9MVF9UQUdWQVIoZXhjbHVkZV9leHBzeW1zLCAkMSk9WydfR0xPQkFMX09GRlNFVF9UQUJMRV98X0dMT0JBTF9fRltJRF1fLionXQorICAjIEFsdGhvdWdoIF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyBpcyBhIHZhbGlkIHN5bWJvbCBDIG5hbWUsIG1vc3QgYS5vdXQKKyAgIyBwbGF0Zm9ybXMgKGFiKXVzZSBpdCBpbiBQSUMgY29kZSwgYnV0IHRoZWlyIGxpbmtlcnMgZ2V0IGNvbmZ1c2VkIGlmCisgICMgdGhlIHN5bWJvbCBpcyBleHBsaWNpdGx5IHJlZmVyZW5jZWQuICBTaW5jZSBwb3J0YWJsZSBjb2RlIGNhbm5vdAorICAjIHJlbHkgb24gdGhpcyBzeW1ib2wgbmFtZSwgaXQncyBwcm9iYWJseSBmaW5lIHRvIG5ldmVyIGluY2x1ZGUgaXQgaW4KKyAgIyBwcmVsb2FkZWQgc3ltYm9sIHRhYmxlcy4KKyAgIyBFeGNsdWRlIHNoYXJlZCBsaWJyYXJ5IGluaXRpYWxpemF0aW9uL2ZpbmFsaXphdGlvbiBzeW1ib2xzLgorZG5sIE5vdGUgYWxzbyBhZGp1c3QgZXhjbHVkZV9leHBzeW1zIGZvciBDKysgYWJvdmUuCisgIGV4dHJhY3RfZXhwc3ltc19jbWRzPQorCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICMgRklYTUU6IHRoZSBNU1ZDKysgcG9ydCBoYXNuJ3QgYmVlbiB0ZXN0ZWQgaW4gYSBsb29vb25nIHRpbWUKKyAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZworICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisgICAgICB3aXRoX2dudV9sZD1ubworICAgIGZpCisgICAgOzsKKyAgaW50ZXJpeCopCisgICAgIyB3ZSBqdXN0IGhvcGUvYXNzdW1lIHRoaXMgaXMgZ2NjIGFuZCBub3QgYzg5ICg9IE1TVkMrKykKKyAgICB3aXRoX2dudV9sZD15ZXMKKyAgICA7OworICBvcGVuYnNkKikKKyAgICB3aXRoX2dudV9sZD1ubworICAgIDs7CisgIGVzYWMKKworICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcworCisgICMgT24gc29tZSB0YXJnZXRzLCBHTlUgbGQgaXMgY29tcGF0aWJsZSBlbm91Z2ggd2l0aCB0aGUgbmF0aXZlIGxpbmtlcgorICAjIHRoYXQgd2UncmUgYmV0dGVyIG9mZiB1c2luZyB0aGUgbmF0aXZlIGludGVyZmFjZSBmb3IgYm90aC4KKyAgbHRfdXNlX2dudV9sZF9pbnRlcmZhY2U9bm8KKyAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeCopCisJIyBUaGUgQUlYIHBvcnQgb2YgR05VIGxkIGhhcyBhbHdheXMgYXNwaXJlZCB0byBjb21wYXRpYmlsaXR5CisJIyB3aXRoIHRoZSBuYXRpdmUgbGlua2VyLiAgSG93ZXZlciwgYXMgdGhlIHdhcm5pbmcgaW4gdGhlIEdOVSBsZAorCSMgYmxvY2sgc2F5cywgdmVyc2lvbnMgYmVmb3JlIDIuMTkuNSogY291bGRuJ3QgcmVhbGx5IGNyZWF0ZSB3b3JraW5nCisJIyBzaGFyZWQgbGlicmFyaWVzLCByZWdhcmRsZXNzIG9mIHRoZSBpbnRlcmZhY2UgdXNlZC4KKwljYXNlIGAkTEQgLXYgMj4mMWAgaW4KKwkgICpcIFwoR05VXCBCaW51dGlsc1wpXCAyLjE5LjUqKSA7OworCSAgKlwgXChHTlVcIEJpbnV0aWxzXClcIDIuW1syLTldXSopIDs7CisJICAqXCBcKEdOVVwgQmludXRpbHNcKVwgW1szLTldXSopIDs7CisJICAqKQorCSAgICBsdF91c2VfZ251X2xkX2ludGVyZmFjZT15ZXMKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgICopCisJbHRfdXNlX2dudV9sZF9pbnRlcmZhY2U9eWVzCisJOzsKKyAgICBlc2FjCisgIGZpCisKKyAgaWYgdGVzdCAiJGx0X3VzZV9nbnVfbGRfaW50ZXJmYWNlIiA9IHllczsgdGhlbgorICAgICMgSWYgYXJjaGl2ZV9jbWRzIHJ1bnMgTEQsIG5vdCBDQywgd2xhcmMgc2hvdWxkIGJlIGVtcHR5CisgICAgd2xhcmM9JyR7d2x9JworCisgICAgIyBTZXQgc29tZSBkZWZhdWx0cyBmb3IgR05VIGxkIHdpdGggc2hhcmVkIGxpYnJhcnkgc3VwcG9ydC4gVGhlc2UKKyAgICAjIGFyZSByZXNldCBsYXRlciBpZiBzaGFyZWQgbGlicmFyaWVzIGFyZSBub3Qgc3VwcG9ydGVkLiBQdXR0aW5nIHRoZW0KKyAgICAjIGhlcmUgYWxsb3dzIHRoZW0gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWNlc3NhcnkuCisgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKyAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKyAgICAjIGFuY2llbnQgR05VIGxkIGRpZG4ndCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZSBldC4gYWwuCisgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCisgICAgZWxzZQorICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQorICAgIGZpCisgICAgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPW5vCisgICAgY2FzZSBgJExEIC12IDI+JjFgIGluCisgICAgICAqR05VXCBnb2xkKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OworICAgICAgKlwgW1swMV1dLiogfCAqXCAyLltbMC05XV0uKiB8ICpcIDIuMTAuKikgOzsgIyBjYXRjaCB2ZXJzaW9ucyA8IDIuMTEKKyAgICAgICpcIDIuMTEuOTMuMC4yXCAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7ICMgUkg3LjMgLi4uCisgICAgICAqXCAyLjExLjkyLjAuMTJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBNYW5kcmFrZSA4LjIgLi4uCisgICAgICAqXCAyLjExLiopIDs7ICMgb3RoZXIgMi4xMSB2ZXJzaW9ucworICAgICAgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OworICAgIGVzYWMKKworICAgICMgU2VlIGlmIEdOVSBsZCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBhaXhbWzMtOV1dKikKKyAgICAgICMgT24gQUlYL1BQQywgdGhlIEdOVSBsaW5rZXIgaXMgdmVyeSBicm9rZW4KKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NDsgdGhlbgorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwljYXQgPDxfTFRfRU9GIDE+JjIKKworKioqIFdhcm5pbmc6IHRoZSBHTlUgbGlua2VyLCBhdCBsZWFzdCB1cCB0byByZWxlYXNlIDIuMTksIGlzIHJlcG9ydGVkCisqKiogdG8gYmUgdW5hYmxlIHRvIHJlbGlhYmx5IGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIEFJWC4KKyoqKiBUaGVyZWZvcmUsIGxpYnRvb2wgaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIElmIHlvdQorKioqIHJlYWxseSBjYXJlIGZvciBzaGFyZWQgbGlicmFyaWVzLCB5b3UgbWF5IHdhbnQgdG8gaW5zdGFsbCBiaW51dGlscworKioqIDIuMjAgb3IgYWJvdmUsIG9yIG1vZGlmeSB5b3VyIFBBVEggc28gdGhhdCBhIG5vbi1HTlUgbGlua2VyIGlzIGZvdW5kLgorKioqIFlvdSB3aWxsIHRoZW4gbmVlZCB0byByZXN0YXJ0IHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3MuCisKK19MVF9FT0YKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYW1pZ2FvcyopCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgcG93ZXJwYykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JycKKyAgICAgICAgOzsKKyAgICAgIG02OGspCisgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBOQU1FICRsaWJuYW1lIiA+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTElCUkFSWV9JRCAxIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFZFUlNJT04gJG1ham9yIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFJFVklTSU9OICRyZXZpc2lvbiIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kQVIgJEFSX0ZMQUdTICRsaWIgJGxpYm9ianN+JFJBTkxJQiAkbGlifihjZCAkb3V0cHV0X29iamRpciAmJiBhMml4bGlicmFyeSAtMzIpJworICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGJlb3MqKQorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorCSMgSm9zZXBoIEJlY2tlbmJhY2ggPGpyYjNAYmVzdC5jb20+IHNheXMgc29tZSByZWxlYXNlcyBvZiBnY2MKKwkjIHN1cHBvcnQgLS11bmRlZmluZWQuICBUaGlzIGRlc2VydmVzIHNvbWUgaW52ZXN0aWdhdGlvbi4gIEZJWE1FCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1ub3N0YXJ0ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIyBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKKyAgICAgICMgYXMgdGhlcmUgaXMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1hbGwtc3ltYm9scycKKyAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorICAgICAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworICAgICAgX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltbQkNER1JTXV1bWyBdXS9zLy4qW1sgXV1cKFtbXiBdXSpcKS9cMSBEQVRBLztzL14uKltbIF1dX19ubV9fXChbW14gXV0qXClbWyBdXVtbXiBdXSovXDEgREFUQS87L15JW1sgXV0vZDsvXltbQUlUV11dW1sgXV0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgICAgIF9MVF9UQUdWQVIoZXhjbHVkZV9leHBzeW1zLCAkMSk9WydbX10rR0xPQkFMX09GRlNFVF9UQUJMRV98W19dK0dMT0JBTF9fW0ZJRF1fLip8W19dK2hlYWRfW0EtWmEtejAtOV9dK19kbGx8W0EtWmEtejAtOV9dK19kbGxfaW5hbWUnXQorCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworCSMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSAoMXN0IGxpbmUKKwkjIGlzIEVYUE9SVFMpLCB1c2UgaXQgYXMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZC4uLgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorCSAgY3AgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworCWVsc2UKKwkgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworCSAgY2F0ICRleHBvcnRfc3ltYm9scyA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKwlmaX4KKwkkQ0MgLXNoYXJlZCAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIGhhaWt1KikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisgICAgICA7OworCisgICAgaW50ZXJpeFtbMy05XV0qKQorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKyAgICAgICMgSGFjazogT24gSW50ZXJpeCAzLngsIHdlIGNhbm5vdCBjb21waWxlIFBJQyBiZWNhdXNlIG9mIGEgYnJva2VuIGdjYy4KKyAgICAgICMgSW5zdGVhZCwgc2hhcmVkIGxpYnJhcmllcyBhcmUgbG9hZGVkIGF0IGFuIGltYWdlIGJhc2UgKDB4MTAwMDAwMDAgYnkKKyAgICAgICMgZGVmYXVsdCkgYW5kIHJlbG9jYXRlZCBpZiB0aGV5IGNvbmZsaWN0LCB3aGljaCBpcyBhIHNsb3cgdmVyeSBtZW1vcnkKKyAgICAgICMgY29uc3VtaW5nIGFuZCBmcmFnbWVudGluZyBwcm9jZXNzLiAgVG8gYXZvaWQgdGhpcywgd2UgcGljayBhIHJhbmRvbSwKKyAgICAgICMgMjU2IEtpQi1hbGlnbmVkIGltYWdlIGJhc2UgYmV0d2VlbiAweDUwMDAwMDAwIGFuZCAweDZGRkMwMDAwIGF0IGxpbmsKKyAgICAgICMgdGltZS4gIE1vdmluZyB1cCBmcm9tIDB4MTAwMDAwMDAgYWxzbyBhbGxvd3MgbW9yZSBzYnJrKDIpIHNwYWNlLgorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdzZWQgInMsXixfLCIgJGV4cG9ydF9zeW1ib2xzID4kb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0tcmV0YWluLXN5bWJvbHMtZmlsZSwkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJworICAgICAgOzsKKworICAgIGdudSogfCBsaW51eCogfCB0cGYqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorICAgICAgdG1wX2RpZXQ9bm8KKyAgICAgIGlmIHRlc3QgIiRob3N0X29zIiA9IGxpbnV4LWRpZXRsaWJjOyB0aGVuCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIGRpZXRcICopIHRtcF9kaWV0PXllczs7CSMgbGludXgtZGlldGxpYmMgd2l0aCBzdGF0aWMgbGlua2luZyAoIWRpZXQtZHluKQorCWVzYWMKKyAgICAgIGZpCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkRUdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbCBcCisJICYmIHRlc3QgIiR0bXBfZGlldCIgPSBubworICAgICAgdGhlbgorCXRtcF9hZGRmbGFnPScgJHBpY19mbGFnJworCXRtcF9zaGFyZWRmbGFnPSctc2hhcmVkJworCWNhc2UgJGNjX2Jhc2VuYW1lLCRob3N0X2NwdSBpbgorICAgICAgICBwZ2NjKikJCQkJIyBQb3J0bGFuZCBHcm91cCBDIGNvbXBpbGVyCisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCisJICA7OworCXBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCisJCQkJCSMgUG9ydGxhbmQgR3JvdXAgZjc3IGFuZCBmOTAgY29tcGlsZXJzCisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcgLU1ub21haW4nIDs7CisJZWNjKixpYTY0KiB8IGljYyosaWE2NCopCSMgSW50ZWwgQyBjb21waWxlciBvbiBpYTY0CisJICB0bXBfYWRkZmxhZz0nIC1pX2R5bmFtaWMnIDs7CisJZWZjKixpYTY0KiB8IGlmb3J0KixpYTY0KikJIyBJbnRlbCBGb3J0cmFuIGNvbXBpbGVyIG9uIGlhNjQKKwkgIHRtcF9hZGRmbGFnPScgLWlfZHluYW1pYyAtbm9mb3JfbWFpbicgOzsKKwlpZmMqIHwgaWZvcnQqKQkJCSMgSW50ZWwgRm9ydHJhbiBjb21waWxlcgorCSAgdG1wX2FkZGZsYWc9JyAtbm9mb3JfbWFpbicgOzsKKwlsZjk1KikJCQkJIyBMYWhleSBGb3J0cmFuIDguMQorCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQorCSAgdG1wX3NoYXJlZGZsYWc9Jy0tc2hhcmVkJyA7OworCXhsW1tjQ11dKiB8IGJneGxbW2NDXV0qIHwgbXBpeGxbW2NDXV0qKSAjIElCTSBYTCBDIDguMCBvbiBQUEMgKGRlYWwgd2l0aCB4bGYgYmVsb3cpCisJICB0bXBfc2hhcmVkZmxhZz0nLXFta3Nocm9iaicKKwkgIHRtcF9hZGRmbGFnPSA7OworCW52Y2MqKQkjIEN1ZGEgQ29tcGlsZXIgRHJpdmVyIDIuMgorCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIF9MVF9UQUdWQVIoY29tcGlsZXJfbmVlZHNfb2JqZWN0LCAkMSk9eWVzCisJICA7OworCWVzYWMKKwljYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKwkqU3VuXCBDKikJCQkjIFN1biBDIDUuOQorCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZWBuZXdfY29udmVuaWVuY2U9OyBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0IC16IFwiJGNvbnZcIiB8fCBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT15ZXMKKwkgIHRtcF9zaGFyZWRmbGFnPSctRycgOzsKKwkqU3VuXCBGKikJCQkjIFN1biBGb3J0cmFuIDguMworCSAgdG1wX3NoYXJlZGZsYWc9Jy1HJyA7OworCWVzYWMKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCisgICAgICAgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKyAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgJENDICciJHRtcF9zaGFyZWRmbGFnIiIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tdmVyc2lvbi1zY3JpcHQgJHt3bH0kb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKyAgICAgICAgZmkKKworCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJeGxmKiB8IGJnZiogfCBiZ3hsZiogfCBtcGl4bGYqKQorCSAgIyBJQk0gWEwgRm9ydHJhbiAxMC4xIG9uIFBQQyBjYW5ub3QgY3JlYXRlIHNoYXJlZCBsaWJzIGl0c2VsZgorCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSctLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgLS1uby13aG9sZS1hcmNoaXZlJworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC1vICRsaWInCisJICBpZiB0ZXN0ICJ4JHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyIgPSB4eWVzOyB0aGVuCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisJICBmaQorCSAgOzsKKwllc2FjCisgICAgICBlbHNlCisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgbmV0YnNkKikKKyAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW8gJGxpYicKKwl3bGFyYz0KKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGZpCisgICAgICA7OworCisgICAgc29sYXJpcyopCisgICAgICBpZiAkTEQgLXYgMj4mMSB8ICRHUkVQICdCRkQgMlwuOCcgPiAvZGV2L251bGw7IHRoZW4KKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJY2F0IDw8X0xUX0VPRiAxPiYyCisKKyoqKiBXYXJuaW5nOiBUaGUgcmVsZWFzZXMgMi44Liogb2YgdGhlIEdOVSBsaW5rZXIgY2Fubm90IHJlbGlhYmx5CisqKiogY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gU29sYXJpcyBzeXN0ZW1zLiAgVGhlcmVmb3JlLCBsaWJ0b29sCisqKiogaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIFdlIHVyZ2UgeW91IHRvIHVwZ3JhZGUgR05VCisqKiogYmludXRpbHMgdG8gcmVsZWFzZSAyLjkuMSBvciBuZXdlci4gIEFub3RoZXIgb3B0aW9uIGlzIHRvIG1vZGlmeQorKioqIHlvdXIgUEFUSCBvciBjb21waWxlciBjb25maWd1cmF0aW9uIHNvIHRoYXQgdGhlIG5hdGl2ZSBsaW5rZXIgaXMKKyoqKiB1c2VkLCBhbmQgdGhlbiByZXN0YXJ0LgorCitfTFRfRU9GCisgICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCopCisgICAgICBjYXNlIGAkTEQgLXYgMj4mMWAgaW4KKyAgICAgICAgKlwgW1swMV1dLiogfCAqXCAyLltbMC05XV0uKiB8ICpcIDIuMVtbMC01XV0uKikKKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJY2F0IDw8X0xUX0VPRiAxPiYyCisKKyoqKiBXYXJuaW5nOiBSZWxlYXNlcyBvZiB0aGUgR05VIGxpbmtlciBwcmlvciB0byAyLjE2LjkxLjAuMyBjYW4gbm90CisqKiogcmVsaWFibHkgY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gU0NPIHN5c3RlbXMuICBUaGVyZWZvcmUsIGxpYnRvb2wKKyoqKiBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgV2UgdXJnZSB5b3UgdG8gdXBncmFkZSBHTlUKKyoqKiBiaW51dGlscyB0byByZWxlYXNlIDIuMTYuOTEuMC4zIG9yIG5ld2VyLiAgQW5vdGhlciBvcHRpb24gaXMgdG8gbW9kaWZ5CisqKiogeW91ciBQQVRIIG9yIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gc28gdGhhdCB0aGUgbmF0aXZlIGxpbmtlciBpcworKioqIHVzZWQsIGFuZCB0aGVuIHJlc3RhcnQuCisKK19MVF9FT0YKKwk7OworCSopCisJICAjIEZvciBzZWN1cml0eSByZWFzb25zLCBpdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgYWx3YXlzCisJICAjIHVzZSBhYnNvbHV0ZSBwYXRocyBmb3IgbmFtaW5nIHNoYXJlZCBsaWJyYXJpZXMsIGFuZCBleGNsdWRlIHRoZQorCSAgIyBEVF9SVU5QQVRIIHRhZyBmcm9tIGV4ZWN1dGFibGVzIGFuZCBsaWJyYXJpZXMuICBCdXQgZG9pbmcgc28KKwkgICMgcmVxdWlyZXMgdGhhdCB5b3UgY29tcGlsZSBldmVyeXRoaW5nIHR3aWNlLCB3aGljaCBpcyBhIHBhaW4uCisJICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJICBlbHNlCisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgIGZpCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBzdW5vczQqKQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1hc3NlcnQgcHVyZS10ZXh0IC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIHdsYXJjPQorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgKikKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBpZiB0ZXN0ICIkX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKSIgPSBubzsgdGhlbgorICAgICAgcnVucGF0aF92YXI9CisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9CisgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CisgICAgZmkKKyAgZWxzZQorICAgICMgUE9SVE1FIGZpbGwgaW4gYSBkZXNjcmlwdGlvbiBvZiB5b3VyIHN5c3RlbSdzIGxpbmtlciAobm90IEdOVSBsZCkKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgYWl4MyopCisgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKyAgICAgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJExEIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtYkU6JGV4cG9ydF9zeW1ib2xzIC1UNTEyIC1INTEyIC1iTTpTUkV+JEFSICRBUl9GTEFHUyAkbGliICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCisgICAgICAjIE5vdGU6IHRoaXMgbGlua2VyIGhhcmRjb2RlcyB0aGUgZGlyZWN0b3JpZXMgaW4gTElCUEFUSCBpZiB0aGVyZQorICAgICAgIyBhcmUgbm8gZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGJ5IC1MLgorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0IC16ICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWMiOyB0aGVuCisJIyBOZWl0aGVyIGRpcmVjdCBoYXJkY29kaW5nIG5vciBzdGF0aWMgbGlua2luZyBpcyBzdXBwb3J0ZWQgd2l0aCBhCisJIyBicm9rZW4gY29sbGVjdDIuCisJX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT11bnN1cHBvcnRlZAorICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhaXhbWzQtOV1dKikKKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAorCSMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgorCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKwlleHBfc3ltX2ZsYWc9Jy1CZXhwb3J0JworCW5vX2VudHJ5X2ZsYWc9IiIKKyAgICAgIGVsc2UKKwkjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB3ZSBkb24ndCB3YW50IHRoZSAiLUMiIG9wdGlvbi4KKwkjIC1DIG1lYW5zIGRlbWFuZ2xlIHRvIEFJWCBubSwgYnV0IG1lYW5zIGRvbid0IGRlbWFuZ2xlIHdpdGggR05VIG5tCisJIyBBbHNvLCBBSVggbm0gdHJlYXRzIHdlYWsgZGVmaW5lZCBzeW1ib2xzIGxpa2Ugb3RoZXIgZ2xvYmFsCisJIyBkZWZpbmVkIHN5bWJvbHMsIHdoZXJlYXMgR05VIG5tIG1hcmtzIHRoZW0gYXMgIlciLgorCWlmICROTSAtViAyPiYxIHwgJEdSRVAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KKwkgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gLUJwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSB8fCAoXCQgMiA9PSAiVyIpKSAmJiAoW3N1YnN0cl0oXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKwllbHNlCisJICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NIC1CQ3BnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJCAyID09ICJUIikgfHwgKFwkIDIgPT0gIkQiKSB8fCAoXCQgMiA9PSAiQiIpKSAmJiAoW3N1YnN0cl0oXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKwlmaQorCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKworCSMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAorCSMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQorCSMgbmVlZCB0byBkbyBydW50aW1lIGxpbmtpbmcuCisJY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMjNdXXxhaXg0LltbMjNdXS4qfGFpeFtbNS05XV0qKQorCSAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCisJICBpZiAodGVzdCAkbGRfZmxhZyA9ICItYnJ0bCIgfHwgdGVzdCAkbGRfZmxhZyA9ICItV2wsLWJydGwiKTsgdGhlbgorCSAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcworCSAgICBicmVhaworCSAgZmkKKwkgIGRvbmUKKwkgIDs7CisJZXNhYworCisJZXhwX3N5bV9mbGFnPSctYmV4cG9ydCcKKwlub19lbnRyeV9mbGFnPSctYm5vZW50cnknCisgICAgICBmaQorCisgICAgICAjIFdoZW4gbGFyZ2UgZXhlY3V0YWJsZXMgb3Igc2hhcmVkIG9iamVjdHMgYXJlIGJ1aWx0LCBBSVggbGQgY2FuCisgICAgICAjIGhhdmUgcHJvYmxlbXMgY3JlYXRpbmcgdGhlIHRhYmxlIG9mIGNvbnRlbnRzLiAgSWYgbGlua2luZyBhIGxpYnJhcnkKKyAgICAgICMgb3IgcHJvZ3JhbSByZXN1bHRzIGluICJlcnJvciBUT0Mgb3ZlcmZsb3ciIGFkZCAtbW1pbmltYWwtdG9jIHRvCisgICAgICAjIENYWEZMQUdTL0NGTEFHUyBmb3IgZysrL2djYy4gIEluIHRoZSBjYXNlcyB3aGVyZSB0aGF0IGlzIG5vdAorICAgICAgIyBlbm91Z2ggdG8gZml4IHRoZSBwcm9ibGVtLCBhZGQgLVdsLC1iYmlndG9jIHRvIExERkxBR1MuCisKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9JzonCisgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoZmlsZV9saXN0X3NwZWMsICQxKT0nJHt3bH0tZiwnCisKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMDEyXV18YWl4NC5bWzAxMl1dLiopCisJIyBXZSBvbmx5IHdhbnQgdG8gZG8gdGhpcyBvbiBBSVggNC4yIGFuZCBsb3dlciwgdGhlIGNoZWNrCisJIyBiZWxvdyBmb3IgYnJva2VuIGNvbGxlY3QyIGRvZXNuJ3Qgd29yayB1bmRlciA0LjMrCisJICBjb2xsZWN0Mm5hbWU9YCR7Q0N9IC1wcmludC1wcm9nLW5hbWU9Y29sbGVjdDJgCisJICBpZiB0ZXN0IC1mICIkY29sbGVjdDJuYW1lIiAmJgorCSAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgJEdSRVAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCisJICB0aGVuCisJICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKKwkgIDoKKwkgIGVsc2UKKwkgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9dW5zdXBwb3J0ZWQKKwkgICMgSXQgZmFpbHMgdG8gZmluZCB1bmluc3RhbGxlZCBsaWJyYXJpZXMgd2hlbiB0aGUgdW5pbnN0YWxsZWQKKwkgICMgcGF0aCBpcyBub3QgbGlzdGVkIGluIHRoZSBsaWJwYXRoLiAgU2V0dGluZyBoYXJkY29kZV9taW51c19MCisJICAjIHRvIHVuc3VwcG9ydGVkIGZvcmNlcyByZWxpbmtpbmcKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQorCSAgZmkKKwkgIDs7CisJZXNhYworCXNoYXJlZF9mbGFnPSctc2hhcmVkJworCWlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorCSAgc2hhcmVkX2ZsYWc9IiRzaGFyZWRfZmxhZyAiJyR7d2x9LUcnCisJZmkKKyAgICAgIGVsc2UKKwkjIG5vdCB1c2luZyBnY2MKKwlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSMgVmlzdWFsQWdlIEMrKywgVmVyc2lvbiA1LjUgZm9yIEFJWCA1TCBmb3IgSUEtNjQsIEJldGEgMyBSZWxlYXNlCisJIyBjaG9rZXMgb24gLVdsLC1HLiBUaGUgZm9sbG93aW5nIGxpbmUgaXMgY29ycmVjdDoKKwkgIHNoYXJlZF9mbGFnPSctRycKKwllbHNlCisJICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKwkgICAgc2hhcmVkX2ZsYWc9JyR7d2x9LUcnCisJICBlbHNlCisJICAgIHNoYXJlZF9mbGFnPScke3dsfS1iTTpTUkUnCisJICBmaQorCWZpCisgICAgICBmaQorCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1iZXhwYWxsJworICAgICAgIyBJdCBzZWVtcyB0aGF0IC1iZXhwYWxsIGRvZXMgbm90IGV4cG9ydCBzeW1ib2xzIGJlZ2lubmluZyB3aXRoCisgICAgICAjIHVuZGVyc2NvcmUgKF8pLCBzbyBpdCBpcyBiZXR0ZXIgdG8gZ2VuZXJhdGUgYSBsaXN0IG9mIHN5bWJvbHMgdG8gZXhwb3J0LgorICAgICAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKKyAgICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorCSMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1bnRpbWUgbG9hZGluZyBmbGFncyAoLWJydGwpLAorCSMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Jy1iZXJvaycKKyAgICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisgICAgICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KKyAgICAgICAgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgoWyQxXSkKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiBmdW5jX2VjaG9fYWxsICIke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IjsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgorICAgICAgZWxzZQorCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tUiAkbGliZGlyOi91c3IvbGliOi9saWInCisJICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Ii16IG5vZGVmcyIKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyAke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzIgorCWVsc2UKKwkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisJICMgZW1wdHkgZXhlY3V0YWJsZS4KKwkgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgoWyQxXSkKKwkgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisJICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorCSAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorCSAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tYmVybm90b2snCisJICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1iZXJvaycKKwkgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKwkgICAgIyBXZSBvbmx5IHVzZSB0aGlzIGNvZGUgZm9yIEdOVSBsZHMgdGhhdCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZS4KKwkgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIGVsc2UKKwkgICAgIyBFeHBvcnRlZCBzeW1ib2xzIGNhbiBiZSBwdWxsZWQgaW50byBzaGFyZWQgb2JqZWN0cyBmcm9tIGFyY2hpdmVzCisJICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJGNvbnZlbmllbmNlJworCSAgZmkKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT15ZXMKKwkgICMgVGhpcyBpcyBzaW1pbGFyIHRvIGhvdyBBSVggdHJhZGl0aW9uYWxseSBidWlsZHMgaXRzIHNoYXJlZCBsaWJyYXJpZXMuCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR7d2x9LWJub2VudHJ5ICRjb21waWxlcl9mbGFncyAke3dsfS1iRTokZXhwb3J0X3N5bWJvbHMke2FsbG93X3VuZGVmaW5lZF9mbGFnfX4kQVIgJEFSX0ZMQUdTICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lJHJlbGVhc2UuYSAkb3V0cHV0X29iamRpci8kc29uYW1lJworCWZpCisgICAgICBmaQorICAgICAgOzsKKworICAgIGFtaWdhb3MqKQorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIHBvd2VycGMpCisgICAgICAgICAgICAjIHNlZSBjb21tZW50IGFib3V0IEFtaWdhT1M0IC5zbyBzdXBwb3J0CisgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPScnCisgICAgICAgIDs7CisgICAgICBtNjhrKQorICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTkFNRSAkbGlibmFtZSIgPiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIExJQlJBUllfSUQgMSIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBWRVJTSU9OICRtYWpvciIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBSRVZJU0lPTiAkcmV2aXNpb24iID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEFSICRBUl9GTEFHUyAkbGliICRsaWJvYmpzfiRSQU5MSUIgJGxpYn4oY2QgJG91dHB1dF9vYmpkaXIgJiYgYTJpeGxpYnJhcnkgLTMyKScKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBic2RpW1s0NV1dKikKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9LXJkeW5hbWljCisgICAgICA7OworCisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKKyAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisgICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgIGNsKikKKwkjIE5hdGl2ZSBNU1ZDCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyAnCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisJX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKKwlfTFRfVEFHVkFSKGZpbGVfbGlzdF9zcGVjLCAkMSk9J0AnCisJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKwlsaWJleHQ9bGliCisJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisJc2hyZXh0X2NtZHM9Ii5kbGwiCisJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAtV2wsLWRsbH5saW5rbmFtZXM9JworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorCSAgICBzZWQgLW4gLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyAtZSAnMVxcXCFwJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworCSAgZWxzZQorCSAgICBzZWQgLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworCSAgZml+CisJICAkQ0MgLW8gJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzICJAJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZXhwIiAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+CisJICBsaW5rbmFtZXM9JworCSMgVGhlIGxpbmtlciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgc3RhdGljIGxpYiBpZiB3ZSBidWlsZCBhIERMTC4KKwkjIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpPSd0cnVlJworCV9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcworCV9MVF9UQUdWQVIoZXhjbHVkZV9leHBzeW1zLCAkMSk9J19OVUxMX0lNUE9SVF9ERVNDUklQVE9SfF9JTVBPUlRfREVTQ1JJUFRPUl8uKicKKwlfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltbQkNER1JTXV1bWyBdXS9zLy4qW1sgXV1cKFtbXiBdXSpcKS9cMSxEQVRBLydcJycgfCAkU0VEIC1lICdcJycvXltbQUlUV11dW1sgXV0vcy8uKltbIF1dLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisJIyBEb24ndCB1c2UgcmFubGliCisJX0xUX1RBR1ZBUihvbGRfcG9zdGluc3RhbGxfY21kcywgJDEpPSdjaG1vZCA2NDQgJG9sZGxpYicKKwlfTFRfVEFHVkFSKHBvc3RsaW5rX2NtZHMsICQxKT0nbHRfb3V0cHV0ZmlsZT0iQE9VVFBVVEAifgorCSAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KKwkgIGNhc2UgJGx0X291dHB1dGZpbGUgaW4KKwkgICAgKi5leGV8Ki5FWEUpIDs7CisJICAgICopCisJICAgICAgbHRfb3V0cHV0ZmlsZT0iJGx0X291dHB1dGZpbGUuZXhlIgorCSAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iJGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUiCisJICAgICAgOzsKKwkgIGVzYWN+CisJICBpZiB0ZXN0ICIkTUFOSUZFU1RfVE9PTCIgIT0gIjoiICYmIHRlc3QgLWYgIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsgdGhlbgorCSAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOworCSAgICAkUk0gIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsKKwkgIGZpJworCTs7CisgICAgICAqKQorCSMgQXNzdW1lIE1TVkMgd3JhcHBlcgorCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScgJworCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisJbGliZXh0PWxpYgorCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorCXNocmV4dF9jbWRzPSIuZGxsIgorCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGZ1bmNfZWNob19hbGwgIiRkZXBsaWJzIiB8ICRTRUQgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKKwkjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgorCV9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpPSd0cnVlJworCSMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCisJX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKwlfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICBfTFRfREFSV0lOX0xJTktFUl9GRUFUVVJFUygkMSkKKyAgICAgIDs7CisKKyAgICBkZ3V4KikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgICMgRnJlZUJTRCAyLjIuWzAxMl0gYWxsb3dzIHVzIHRvIGluY2x1ZGUgYysrcnQwLm8gdG8gZ2V0IEMrKyBjb25zdHJ1Y3RvcgorICAgICMgc3VwcG9ydC4gIEZ1dHVyZSB2ZXJzaW9ucyBkbyB0aGlzIGF1dG9tYXRpY2FsbHksIGJ1dCBhbiBleHBsaWNpdCBjKytydDAubworICAgICMgZG9lcyBub3QgYnJlYWsgYW55dGhpbmcsIGFuZCBoZWxwcyBzaWduaWZpY2FudGx5IChhdCB0aGUgY29zdCBvZiBhIGxpdHRsZQorICAgICMgZXh0cmEgc3BhY2UpLgorICAgIGZyZWVic2QyLjIqKQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAvdXNyL2xpYi9jKytydDAubycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICAjIFVuZm9ydHVuYXRlbHksIG9sZGVyIHZlcnNpb25zIG9mIEZyZWVCU0QgMiBkbyBub3QgaGF2ZSB0aGlzIGZlYXR1cmUuCisgICAgZnJlZWJzZDIuKikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgICMgRnJlZUJTRCAzIGFuZCBncmVhdGVyIHVzZXMgZ2NjIC1zaGFyZWQgdG8gZG8gc2hhcmVkIGxpYnJhcmllcy4KKyAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgaHB1eDkqKQorICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgIGZpCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworCisgICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisgICAgICA7OworCisgICAgaHB1eDEwKikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBmaQorICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworCV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9eWVzCisJX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKwkjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorCSMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCV9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBocHV4MTEqKQorICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJY2FzZSAkaG9zdF9jcHUgaW4KKwlocHBhKjY0KikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwlpYTY0KikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJKikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwllc2FjCisgICAgICBlbHNlCisJY2FzZSAkaG9zdF9jcHUgaW4KKwlocHBhKjY0KikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJaWE2NCopCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCSopCisJbTRfaWYoJDEsIFtdLCBbCisJICAjIE9sZGVyIHZlcnNpb25zIG9mIHRoZSAxMS4wMCBjb21waWxlciBkbyBub3QgdW5kZXJzdGFuZCAtYiB5ZXQKKwkgICMgKEhQOTI0NTMtMDEgQS4xMS4wMS4yMCBkb2Vzbid0LCBIUDkyNDUzLTAxIEIuMTEuWC4zNTE3NS0zNTE3Ni5HUCBkb2VzKQorCSAgX0xUX0xJTktFUl9PUFRJT04oW2lmICRDQyB1bmRlcnN0YW5kcyAtYl0sCisJICAgIF9MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9fYiwgJDEpLCBbLWJdLAorCSAgICBbX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnXSwKKwkgICAgW19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnXSldLAorCSAgW19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJ10pCisJICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorCisJY2FzZSAkaG9zdF9jcHUgaW4KKwlocHBhKjY0KnxpYTY0KikKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJICA7OworCSopCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKKwkgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisKKwkgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisJICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworCSAgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgOzsKKworICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkjIFRyeSB0byB1c2UgdGhlIC1leHBvcnRlZF9zeW1ib2wgbGQgb3B0aW9uLCBpZiBpdCBkb2VzIG5vdAorCSMgd29yaywgYXNzdW1lIHRoYXQgLWV4cG9ydHNfZmlsZSBkb2VzIG5vdCB3b3JrIGVpdGhlciBhbmQKKwkjIGltcGxpY2l0bHkgZXhwb3J0IGFsbCBzeW1ib2xzLgorCSMgVGhpcyBzaG91bGQgYmUgdGhlIHNhbWUgZm9yIGFsbCBsYW5ndWFnZXMsIHNvIG5vIHBlci10YWcgY2FjaGUgdmFyaWFibGUuCisJQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdGhlICRob3N0X29zIGxpbmtlciBhY2NlcHRzIC1leHBvcnRlZF9zeW1ib2xdLAorCSAgW2x0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sXSwKKwkgIFtzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorCSAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKwkgICBBQ19MSU5LX0lGRUxTRSgKKwkgICAgIFtBQ19MQU5HX1NPVVJDRSgKKwkgICAgICAgIFtBQ19MQU5HX0NBU0UoW0NdLCBbW2ludCBmb28gKHZvaWQpIHsgcmV0dXJuIDA7IH1dXSwKKwkJCSAgICAgIFtDKytdLCBbW2ludCBmb28gKHZvaWQpIHsgcmV0dXJuIDA7IH1dXSwKKwkJCSAgICAgIFtGb3J0cmFuIDc3XSwgW1sKKyAgICAgIHN1YnJvdXRpbmUgZm9vCisgICAgICBlbmRdXSwKKwkJCSAgICAgIFtGb3J0cmFuXSwgW1sKKyAgICAgIHN1YnJvdXRpbmUgZm9vCisgICAgICBlbmRdXSldKV0sCisJICAgICAgW2x0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPXllc10sCisJICAgICAgW2x0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPW5vXSkKKyAgICAgICAgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyJdKQorCWlmIHRlc3QgIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPSB5ZXM7IHRoZW4KKyAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwlmaQorICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLWV4cG9ydHNfZmlsZSAkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGZpCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9J25vJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKyAgICAgIF9MVF9UQUdWQVIoaW5oZXJpdF9ycGF0aCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisgICAgICA7OworCisgICAgbmV0YnNkKikKKyAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycgICMgYS5vdXQKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLXNoYXJlZCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnICAgICAgIyBFTEYKKyAgICAgIGZpCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgbmV3c29zNikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICAqbnRvKiB8ICpxbngqKQorICAgICAgOzsKKworICAgIG9wZW5ic2QqKQorICAgICAgaWYgdGVzdCAtZiAvdXNyL2xpYmV4ZWMvbGQuc287IHRoZW4KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworCV9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKKwlpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzJworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworCWVsc2UKKwkgIGNhc2UgJGhvc3Rfb3MgaW4KKwkgICBvcGVuYnNkW1swMV1dLiogfCBvcGVuYnNkMi5bWzAtN11dIHwgb3BlbmJzZDIuW1swLTddXS4qKQorCSAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisJICAgICA7OworCSAgICopCisJICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwkgICAgIDs7CisJICBlc2FjCisJZmkKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIG9zMiopCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRFQ0hPICJMSUJSQVJZICRsaWJuYW1lIElOSVRJTlNUQU5DRSIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JEVDSE8gIkRFU0NSSVBUSU9OIFwiJGxpYm5hbWVcIiIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfmVjaG8gREFUQSA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+ZWNobyAiIFNJTkdMRSBOT05TSEFSRUQiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn5lY2hvIEVYUE9SVFMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfmVteGV4cCAkbGlib2JqcyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JENDIC1aZGxsIC1aY3J0ZGxsIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKKyAgICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpPSdlbXhpbXAgLW8gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuYSAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCisgICAgICA7OworCisgICAgb3NmMyopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAgICAgIGZpCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9J25vJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKyAgICAgIDs7CisKKyAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2ZvciBpIGluIGBjYXQgJGV4cG9ydF9zeW1ib2xzYDsgZG8gcHJpbnRmICIlcyAlc1xcbiIgLWV4cG9ydGVkX3N5bWJvbCAiXCRpIiA+PiAkbGliLmV4cDsgZG9uZTsgcHJpbnRmICIlc1xcbiIgIi1oaWRkZW4iPj4gJGxpYi5leHB+CisJJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAke3dsfS1pbnB1dCAke3dsfSRsaWIuZXhwICRjb21waWxlcl9mbGFncyAkbGlib2JqcyAkZGVwbGlicyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYn4kUk0gJGxpYi5leHAnCisKKwkjIEJvdGggYyBhbmQgY3h4IGNvbXBpbGVyIHN1cHBvcnQgLXJwYXRoIGRpcmVjdGx5CisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1ycGF0aCAkbGliZGlyJworICAgICAgZmkKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT0nbm8nCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisgICAgICA7OworCisgICAgc29sYXJpcyopCisgICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAteiBkZWZzJworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwl3bGFyYz0nJHt3bH0nCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKyAgICAgIGVsc2UKKwljYXNlIGAkQ0MgLVYgMj4mMWAgaW4KKwkqIkNvbXBpbGVycyA1LjAiKikKKwkgIHdsYXJjPScnCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJICAkTEQgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtTSAkbGliLmV4cCAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc34kUk0gJGxpYi5leHAnCisJICA7OworCSopCisJICB3bGFyYz0nJHt3bH0nCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkgICRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1NICRsaWIuZXhwIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworCSAgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICBjYXNlICRob3N0X29zIGluCisgICAgICBzb2xhcmlzMi5bWzAtNV1dIHwgc29sYXJpczIuW1swLTVdXS4qKSA7OworICAgICAgKikKKwkjIFRoZSBjb21waWxlciBkcml2ZXIgd2lsbCBjb21iaW5lIGFuZCByZW9yZGVyIGxpbmtlciBvcHRpb25zLAorCSMgYnV0IHVuZGVyc3RhbmRzIGAteiBsaW5rZXJfZmxhZycuICBHQ0MgZGlzY2FyZHMgaXQgd2l0aG91dCBgJHdsJywKKwkjIGJ1dCBpcyBjYXJlZnVsIGVub3VnaCBub3QgdG8gcmVvcmRlci4KKwkjIFN1cHBvcnRlZCBzaW5jZSBTb2xhcmlzIDIuNiAobWF5YmUgMi41LjE/KQorCWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXogJHt3bH1hbGxleHRyYWN0JGNvbnZlbmllbmNlICR7d2x9LXogJHt3bH1kZWZhdWx0ZXh0cmFjdCcKKwllbHNlCisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Jy16IGFsbGV4dHJhY3QkY29udmVuaWVuY2UgLXogZGVmYXVsdGV4dHJhY3QnCisJZmkKKwk7OworICAgICAgZXNhYworICAgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisgICAgICA7OworCisgICAgc3Vub3M0KikKKyAgICAgIGlmIHRlc3QgIngkaG9zdF92ZW5kb3IiID0geHNlcXVlbnQ7IHRoZW4KKwkjIFVzZSAkQ0MgdG8gbGluayB1bmRlciBzZXF1ZW50LCBiZWNhdXNlIGl0IHRocm93cyBpbiBzb21lIGV4dHJhIC5vCisJIyBmaWxlcyB0aGF0IG1ha2UgLmluaXQgYW5kIC5maW5pIHNlY3Rpb25zIHdvcmsuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLWFzc2VydCBwdXJlLXRleHQgLUJzdGF0aWMgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgZmkKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgIHN5c3Y0KQorICAgICAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKwlzbmkpCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcyAjIGlzIHRoaXMgcmVhbGx5IHRydWU/Pz8KKwk7OworCXNpZW1lbnMpCisJICAjIyBMRCBpcyBsZCBpdCBtYWtlcyBhIFBMQU1MSUIKKwkgICMjIENDIGp1c3QgbWFrZXMgYSBHcm9zc01vZHVsZS4KKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSk9JyRDQyAtciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworICAgICAgICA7OworCW1vdG9yb2xhKQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubyAjTW90b3JvbGEgbWFudWFsIHNheXMgeWVzLCBidXQgbXkgdGVzdHMgc2F5IHRoZXkgbGllCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgc3lzdjQuMyopCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nLUJleHBvcnQnCisgICAgICA7OworCisgICAgc3lzdjQqTVAqKQorICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworCXJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICisJaGFyZGNvZGVfcnVucGF0aF92YXI9eWVzCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT15ZXMKKyAgICAgIGZpCisgICAgICA7OworCisgICAgc3lzdjQqdXcyKiB8IHN5c3Y1T3BlblVOSVgqIHwgc3lzdjVVbml4V2FyZTcuW1swMV1dLltbMTBdXSogfCB1bml4d2FyZTcqIHwgc2NvMy4ydjUuMC5bWzAyNF1dKikKKyAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0teix0ZXh0JworICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBmaQorICAgICAgOzsKKworICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiopCisgICAgICAjIE5vdGU6IFdlIGNhbiBOT1QgdXNlIC16IGRlZnMgYXMgd2UgbWlnaHQgZGVzaXJlLCBiZWNhdXNlIHdlIGRvIG5vdAorICAgICAgIyBsaW5rIHdpdGggLWxjLCBhbmQgdGhhdCB3b3VsZCBjYXVzZSBhbnkgc3ltYm9scyB1c2VkIGZyb20gbGliYyB0bworICAgICAgIyBhbHdheXMgYmUgdW5yZXNvbHZlZCwgd2hpY2ggbWVhbnMganVzdCBhYm91dCBubyBsaWJyYXJ5IHdvdWxkCisgICAgICAjIGV2ZXIgbGluayBjb3JyZWN0bHkuICBJZiB3ZSdyZSBub3QgdXNpbmcgR05VIGxkIHdlIHVzZSAteiB0ZXh0CisgICAgICAjIHRob3VnaCwgd2hpY2ggZG9lcyBjYXRjaCBzb21lIGJhZCBzeW1ib2xzIGJ1dCBpc24ndCBhcyBoZWF2eS1oYW5kZWQKKyAgICAgICMgYXMgLXogZGVmcy4KKyAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0teix0ZXh0JworICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LG5vZGVmcycKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1SLCRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0nOicKKyAgICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tQmV4cG9ydCcKKyAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKKworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICB1dHM0KikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgICopCisgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICA7OworICAgIGVzYWMKKworICAgIGlmIHRlc3QgeCRob3N0X3ZlbmRvciA9IHhzbmk7IHRoZW4KKyAgICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKiB8IHN5c3Y1KikKKwlfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1CbGFyZ2VkeW5zeW0nCisJOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICBmaQorXSkKK0FDX01TR19SRVNVTFQoWyRfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpXSkKK3Rlc3QgIiRfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KKworX0xUX1RBR1ZBUih3aXRoX2dudV9sZCwgJDEpPSR3aXRoX2dudV9sZAorCitfTFRfREVDTChbXSwgW2xpYmV4dF0sIFswXSwgW09sZCBhcmNoaXZlIHN1ZmZpeCAobm9ybWFsbHkgImEiKV0pZG5sCitfTFRfREVDTChbXSwgW3NocmV4dF9jbWRzXSwgWzFdLCBbU2hhcmVkIGxpYnJhcnkgc3VmZml4IChub3JtYWxseSAiLnNvIildKWRubAorX0xUX0RFQ0woW10sIFtleHRyYWN0X2V4cHN5bXNfY21kc10sIFsyXSwKKyAgICBbVGhlIGNvbW1hbmRzIHRvIGV4dHJhY3QgdGhlIGV4cG9ydGVkIHN5bWJvbCBsaXN0IGZyb20gYSBzaGFyZWQgYXJjaGl2ZV0pCisKKyMKKyMgRG8gd2UgbmVlZCB0byBleHBsaWNpdGx5IGxpbmsgbGliYz8KKyMKK2Nhc2UgIngkX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpIiBpbgoreHx4eWVzKQorICAjIEFzc3VtZSAtbGMgc2hvdWxkIGJlIGFkZGVkCisgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT15ZXMKKworICBpZiB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICBjYXNlICRfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpIGluCisgICAgKid+JyopCisgICAgICAjIEZJWE1FOiB3ZSBtYXkgaGF2ZSB0byBkZWFsIHdpdGggbXVsdGktY29tbWFuZCBzZXF1ZW5jZXMuCisgICAgICA7OworICAgICckQ0MgJyopCisgICAgICAjIFRlc3Qgd2hldGhlciB0aGUgY29tcGlsZXIgaW1wbGljaXRseSBsaW5rcyB3aXRoIC1sYyBzaW5jZSBvbiBzb21lCisgICAgICAjIHN5c3RlbXMsIC1sZ2NjIGhhcyB0byBjb21lIGJlZm9yZSAtbGMuIElmIGdjYyBhbHJlYWR5IHBhc3NlcyAtbGMKKyAgICAgICMgdG8gbGQsIGRvbid0IGFkZCAtbGMgYmVmb3JlIC1sZ2NjLgorICAgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbl0sCisJW2x0X2N2X11fTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSksCisJWyRSTSBjb25mdGVzdCoKKwllY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKworCWlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXJyOyB0aGVuCisJICBzb25hbWU9Y29uZnRlc3QKKwkgIGxpYj1jb25mdGVzdAorCSAgbGlib2Jqcz1jb25mdGVzdC4kYWNfb2JqZXh0CisJICBkZXBsaWJzPQorCSAgd2w9JF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpCisJICBwaWNfZmxhZz0kX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpCisJICBjb21waWxlcl9mbGFncz0tdgorCSAgbGlua2VyX2ZsYWdzPS12CisJICB2ZXJzdHJpbmc9CisJICBvdXRwdXRfb2JqZGlyPS4KKwkgIGxpYm5hbWU9Y29uZnRlc3QKKwkgIGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKQorCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQorCSAgaWYgQUNfVFJZX0VWQUwoX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKSAyXD5cJjEgXHwgJEdSRVAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMSkKKwkgIHRoZW4KKwkgICAgbHRfY3ZfW11fTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKwkgIGVsc2UKKwkgICAgbHRfY3ZfW11fTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9eWVzCisJICBmaQorCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSRsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnCisJZWxzZQorCSAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1CisJZmkKKwkkUk0gY29uZnRlc3QqCisJXSkKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT0kbHRfY3ZfW11fTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSkKKyAgICAgIDs7CisgICAgZXNhYworICBmaQorICA7OworZXNhYworCitfTFRfVEFHREVDTChbYnVpbGRfbGlidG9vbF9uZWVkX2xjXSwgW2FyY2hpdmVfY21kc19uZWVkX2xjXSwgWzBdLAorICAgIFtXaGV0aGVyIG9yIG5vdCB0byBhZGQgLWxjIGZvciBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzXSkKK19MVF9UQUdERUNMKFthbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXNdLAorICAgIFtlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzXSwgWzBdLAorICAgIFtXaGV0aGVyIG9yIG5vdCB0byBkaXNhbGxvdyBzaGFyZWQgbGlicyB3aGVuIHJ1bnRpbWUgbGlicyBhcmUgc3RhdGljXSkKK19MVF9UQUdERUNMKFtdLCBbZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjXSwgWzFdLAorICAgIFtDb21waWxlciBmbGFnIHRvIGFsbG93IHJlZmxleGl2ZSBkbG9wZW5zXSkKK19MVF9UQUdERUNMKFtdLCBbd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNdLCBbMV0sCisgICAgW0NvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgc2hhcmVkIG9iamVjdHMgZGlyZWN0bHkgZnJvbSBhcmNoaXZlc10pCitfTFRfVEFHREVDTChbXSwgW2NvbXBpbGVyX25lZWRzX29iamVjdF0sIFsxXSwKKyAgICBbV2hldGhlciB0aGUgY29tcGlsZXIgY29wZXMgd2l0aCBwYXNzaW5nIG5vIG9iamVjdHMgZGlyZWN0bHldKQorX0xUX1RBR0RFQ0woW10sIFtvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzXSwgWzJdLAorICAgIFtDcmVhdGUgYW4gb2xkLXN0eWxlIGFyY2hpdmUgZnJvbSBhIHNoYXJlZCBhcmNoaXZlXSkKK19MVF9UQUdERUNMKFtdLCBbb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNdLCBbMl0sCisgICAgW0NyZWF0ZSBhIHRlbXBvcmFyeSBvbGQtc3R5bGUgYXJjaGl2ZSB0byBsaW5rIGluc3RlYWQgb2YgYSBzaGFyZWQgYXJjaGl2ZV0pCitfTFRfVEFHREVDTChbXSwgW2FyY2hpdmVfY21kc10sIFsyXSwgW0NvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBzaGFyZWQgYXJjaGl2ZV0pCitfTFRfVEFHREVDTChbXSwgW2FyY2hpdmVfZXhwc3ltX2NtZHNdLCBbMl0pCitfTFRfVEFHREVDTChbXSwgW21vZHVsZV9jbWRzXSwgWzJdLAorICAgIFtDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgbG9hZGFibGUgbW9kdWxlIGlmIGRpZmZlcmVudCBmcm9tIGJ1aWxkaW5nCisgICAgYSBzaGFyZWQgYXJjaGl2ZS5dKQorX0xUX1RBR0RFQ0woW10sIFttb2R1bGVfZXhwc3ltX2NtZHNdLCBbMl0pCitfTFRfVEFHREVDTChbXSwgW3dpdGhfZ251X2xkXSwgWzFdLAorICAgIFtXaGV0aGVyIHdlIGFyZSBidWlsZGluZyB3aXRoIEdOVSBsZCBvciBub3RdKQorX0xUX1RBR0RFQ0woW10sIFthbGxvd191bmRlZmluZWRfZmxhZ10sIFsxXSwKKyAgICBbRmxhZyB0aGF0IGFsbG93cyBzaGFyZWQgbGlicmFyaWVzIHdpdGggdW5kZWZpbmVkIHN5bWJvbHMgdG8gYmUgYnVpbHRdKQorX0xUX1RBR0RFQ0woW10sIFtub191bmRlZmluZWRfZmxhZ10sIFsxXSwKKyAgICBbRmxhZyB0aGF0IGVuZm9yY2VzIG5vIHVuZGVmaW5lZCBzeW1ib2xzXSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY10sIFsxXSwKKyAgICBbRmxhZyB0byBoYXJkY29kZSAkbGliZGlyIGludG8gYSBiaW5hcnkgZHVyaW5nIGxpbmtpbmcuCisgICAgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiAkbGliZGlyIGRvZXMgbm90IGV4aXN0XSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl0sIFsxXSwKKyAgICBbV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlICItcnBhdGgiIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudF0pCitfTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX2RpcmVjdF0sIFswXSwKKyAgICBbU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIERJUi9saWJOQU1FJHtzaGFyZWRfZXh0fSBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMKKyAgICBESVIgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeV0pCitfTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZV0sIFswXSwKKyAgICBbU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIERJUi9saWJOQU1FJHtzaGFyZWRfZXh0fSBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMKKyAgICBESVIgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeSBhbmQgdGhlIHJlc3VsdGluZyBsaWJyYXJ5IGRlcGVuZGVuY3kgaXMKKyAgICAiYWJzb2x1dGUiLCBpLmUgaW1wb3NzaWJsZSB0byBjaGFuZ2UgYnkgc2V0dGluZyAke3NobGlicGF0aF92YXJ9IGlmIHRoZQorICAgIGxpYnJhcnkgaXMgcmVsb2NhdGVkXSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfbWludXNfTF0sIFswXSwKKyAgICBbU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIHRoZSAtTERJUiBmbGFnIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIKKyAgICBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5XSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl0sIFswXSwKKyAgICBbU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIFNITElCUEFUSF9WQVI9RElSIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIKKyAgICBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5XSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfYXV0b21hdGljXSwgWzBdLAorICAgIFtTZXQgdG8gInllcyIgaWYgYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGhhcmRjb2RlcyBESVIKKyAgICBpbnRvIHRoZSBsaWJyYXJ5IGFuZCBhbGwgc3Vic2VxdWVudCBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFibGVzIGxpbmtlZAorICAgIGFnYWluc3QgaXRdKQorX0xUX1RBR0RFQ0woW10sIFtpbmhlcml0X3JwYXRoXSwgWzBdLAorICAgIFtTZXQgdG8geWVzIGlmIGxpbmtlciBhZGRzIHJ1bnRpbWUgcGF0aHMgb2YgZGVwZW5kZW50IGxpYnJhcmllcworICAgIHRvIHJ1bnRpbWUgcGF0aCBsaXN0XSkKK19MVF9UQUdERUNMKFtdLCBbbGlua19hbGxfZGVwbGlic10sIFswXSwKKyAgICBbV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzXSkKK19MVF9UQUdERUNMKFtdLCBbYWx3YXlzX2V4cG9ydF9zeW1ib2xzXSwgWzBdLAorICAgIFtTZXQgdG8gInllcyIgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWRdKQorX0xUX1RBR0RFQ0woW10sIFtleHBvcnRfc3ltYm9sc19jbWRzXSwgWzJdLAorICAgIFtUaGUgY29tbWFuZHMgdG8gbGlzdCBleHBvcnRlZCBzeW1ib2xzXSkKK19MVF9UQUdERUNMKFtdLCBbZXhjbHVkZV9leHBzeW1zXSwgWzFdLAorICAgIFtTeW1ib2xzIHRoYXQgc2hvdWxkIG5vdCBiZSBsaXN0ZWQgaW4gdGhlIHByZWxvYWRlZCBzeW1ib2xzXSkKK19MVF9UQUdERUNMKFtdLCBbaW5jbHVkZV9leHBzeW1zXSwgWzFdLAorICAgIFtTeW1ib2xzIHRoYXQgbXVzdCBhbHdheXMgYmUgZXhwb3J0ZWRdKQorX0xUX1RBR0RFQ0woW10sIFtwcmVsaW5rX2NtZHNdLCBbMl0sCisgICAgW0NvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyBwcm9ncmFtcyAoYWdhaW5zdCBsaWJyYXJpZXMpIHdpdGggdGVtcGxhdGVzXSkKK19MVF9UQUdERUNMKFtdLCBbcG9zdGxpbmtfY21kc10sIFsyXSwKKyAgICBbQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBmaW5pc2hpbmcgbGlua2luZyBwcm9ncmFtc10pCitfTFRfVEFHREVDTChbXSwgW2ZpbGVfbGlzdF9zcGVjXSwgWzFdLAorICAgIFtTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXNdKQorZG5sIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCitkbmwgX0xUX1RBR0RFQ0woW10sIFt0aHJlYWRfc2FmZV9mbGFnX3NwZWNdLCBbMV0sCitkbmwgICAgW0NvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgdGhyZWFkIHNhZmUgb2JqZWN0c10pCitdKSMgX0xUX0xJTktFUl9TSExJQlMKKworCisjIF9MVF9MQU5HX0NfQ09ORklHKFtUQUddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciBhIEMgY29tcGlsZXIgYXJlIHN1aXRhYmx5CisjIGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcgdG8gd3JpdGUKKyMgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgorbTRfZGVmdW4oW19MVF9MQU5HX0NfQ09ORklHXSwKK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCitsdF9zYXZlX0NDPSIkQ0MiCitBQ19MQU5HX1BVU0goQykKKworIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIEMgdGVzdCBzb3VyY2VzLgorYWNfZXh0PWMKKworIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIEMgdGVzdCBzb3VyY2VzLgorb2JqZXh0PW8KK19MVF9UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAorCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJpbnQgc29tZV92YXJpYWJsZSA9IDA7IgorCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cworbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSdpbnQgbWFpbigpe3JldHVybigwKTt9JworCitfTFRfVEFHX0NPTVBJTEVSCisjIFNhdmUgdGhlIGRlZmF1bHQgY29tcGlsZXIsIHNpbmNlIGl0IGdldHMgb3ZlcndyaXR0ZW4gd2hlbiB0aGUgb3RoZXIKKyMgdGFncyBhcmUgYmVpbmcgdGVzdGVkLCBhbmQgX0xUX1RBR1ZBUihjb21waWxlciwgW10pIGlzIGEgTk9QLgorY29tcGlsZXJfREVGQVVMVD0kQ0MKKworIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKK19MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorX0xUX0xJTktFUl9CT0lMRVJQTEFURQorCisjIyBDQVZFQVQgRU1QVE9SOgorIyMgVGhlcmUgaXMgbm8gZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIGZvbGxvd2luZyBtYWNyb3MsIGRvIG5vdCBjaGFuZ2UKKyMjIHRoZSBydW5uaW5nIG9yZGVyIG9yIG90aGVyd2lzZSBtb3ZlIHRoZW0gYXJvdW5kIHVubGVzcyB5b3Uga25vdyBleGFjdGx5CisjIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KK2lmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KKyAgX0xUX0NPTVBJTEVSX05PX1JUVEkoJDEpCisgIF9MVF9DT01QSUxFUl9QSUMoJDEpCisgIF9MVF9DT01QSUxFUl9DX08oJDEpCisgIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTKCQxKQorICBfTFRfTElOS0VSX1NITElCUygkMSkKKyAgX0xUX1NZU19EWU5BTUlDX0xJTktFUigkMSkKKyAgX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRIKCQxKQorICBMVF9TWVNfRExPUEVOX1NFTEYKKyAgX0xUX0NNRF9TVFJJUExJQgorCisgICMgUmVwb3J0IHdoaWNoIGxpYnJhcnkgdHlwZXMgd2lsbCBhY3R1YWxseSBiZSBidWlsdAorICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllc10pCisgIEFDX01TR19SRVNVTFQoWyRjYW5fYnVpbGRfc2hhcmVkXSkKKworICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllc10pCisgIHRlc3QgIiRjYW5fYnVpbGRfc2hhcmVkIiA9ICJubyIgJiYgZW5hYmxlX3NoYXJlZD1ubworCisgICMgT24gQUlYLCBzaGFyZWQgbGlicmFyaWVzIGFuZCBzdGF0aWMgbGlicmFyaWVzIHVzZSB0aGUgc2FtZSBuYW1lc3BhY2UsIGFuZAorICAjIGFyZSBhbGwgYnVpbHQgZnJvbSBQSUMuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYWl4MyopCisgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KKyAgICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICAgICAgYXJjaGl2ZV9jbWRzPSIkYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkbGliIgorICAgICAgcG9zdGluc3RhbGxfY21kcz0nJFJBTkxJQiAkbGliJworICAgIGZpCisgICAgOzsKKworICBhaXhbWzQtOV1dKikKKyAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQgJiYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0gbm8gOyB0aGVuCisgICAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubworICAgIGZpCisgICAgOzsKKyAgZXNhYworICBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3NoYXJlZF0pCisKKyAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXNdKQorICAjIE1ha2Ugc3VyZSBlaXRoZXIgZW5hYmxlX3NoYXJlZCBvciBlbmFibGVfc3RhdGljIGlzIHllcy4KKyAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzIHx8IGVuYWJsZV9zdGF0aWM9eWVzCisgIEFDX01TR19SRVNVTFQoWyRlbmFibGVfc3RhdGljXSkKKworICBfTFRfQ09ORklHKCQxKQorZmkKK0FDX0xBTkdfUE9QCitDQz0iJGx0X3NhdmVfQ0MiCitdKSMgX0xUX0xBTkdfQ19DT05GSUcKKworCisjIF9MVF9MQU5HX0NYWF9DT05GSUcoW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgYSBDKysgY29tcGlsZXIgYXJlIHN1aXRhYmx5CisjIGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcgdG8gd3JpdGUKKyMgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgorbTRfZGVmdW4oW19MVF9MQU5HX0NYWF9DT05GSUddLAorW200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAorbTRfcmVxdWlyZShbX0xUX1BBVEhfTUFOSUZFU1RfVE9PTF0pZG5sCitpZiB0ZXN0IC1uICIkQ1hYIiAmJiAoIHRlc3QgIlgkQ1hYIiAhPSAiWG5vIiAmJgorICAgICggKHRlc3QgIlgkQ1hYIiA9ICJYZysrIiAmJiBgZysrIC12ID4vZGV2L251bGwgMj4mMWAgKSB8fAorICAgICh0ZXN0ICJYJENYWCIgIT0gIlhnKysiKSkpIDsgdGhlbgorICBBQ19QUk9HX0NYWENQUAorZWxzZQorICBfbHRfY2F1Z2h0X0NYWF9lcnJvcj15ZXMKK2ZpCisKK0FDX0xBTkdfUFVTSChDKyspCitfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KK19MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0KK19MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KK19MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPQorX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT1ubworX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9dW5zdXBwb3J0ZWQKK19MVF9UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSk9bm8KK19MVF9UQUdWQVIoaW5oZXJpdF9ycGF0aCwgJDEpPW5vCitfTFRfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPQorX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9dW5rbm93bgorX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JG9sZF9hcmNoaXZlX2NtZHMKK19MVF9UQUdWQVIocmVsb2FkX2ZsYWcsICQxKT0kcmVsb2FkX2ZsYWcKK19MVF9UQUdWQVIocmVsb2FkX2NtZHMsICQxKT0kcmVsb2FkX2NtZHMKK19MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0KK19MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KK19MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPW5vCisKKyMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBDKysgdGVzdCBzb3VyY2VzLgorYWNfZXh0PWNwcAorCisjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgQysrIHRlc3Qgc291cmNlcy4KK29iamV4dD1vCitfTFRfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKKworIyBObyBzZW5zZSBpbiBydW5uaW5nIGFsbCB0aGVzZSB0ZXN0cyBpZiB3ZSBhbHJlYWR5IGRldGVybWluZWQgdGhhdAorIyB0aGUgQ1hYIGNvbXBpbGVyIGlzbid0IHdvcmtpbmcuICBTb21lIHZhcmlhYmxlcyAobGlrZSBlbmFibGVfc2hhcmVkKQorIyBhcmUgY3VycmVudGx5IGFzc3VtZWQgdG8gYXBwbHkgdG8gYWxsIGNvbXBpbGVycyBvbiB0aGlzIHBsYXRmb3JtLAorIyBhbmQgd2lsbCBiZSBjb3JydXB0ZWQgYnkgc2V0dGluZyB0aGVtIGJhc2VkIG9uIGEgbm9uLXdvcmtpbmcgY29tcGlsZXIuCitpZiB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllczsgdGhlbgorICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworICBsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9ImludCBzb21lX3ZhcmlhYmxlID0gMDsiCisKKyAgIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKKyAgbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSdpbnQgbWFpbihpbnQsIGNoYXIgKltbXV0pIHsgcmV0dXJuKDApOyB9JworCisgICMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KKyAgX0xUX1RBR19DT01QSUxFUgorCisgICMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCisgIF9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorICBfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisKKyAgIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KKyAgbHRfc2F2ZV9DQz0kQ0MKKyAgbHRfc2F2ZV9DRkxBR1M9JENGTEFHUworICBsdF9zYXZlX0xEPSRMRAorICBsdF9zYXZlX0dDQz0kR0NDCisgIEdDQz0kR1hYCisgIGx0X3NhdmVfd2l0aF9nbnVfbGQ9JHdpdGhfZ251X2xkCisgIGx0X3NhdmVfcGF0aF9MRD0kbHRfY3ZfcGF0aF9MRAorICBpZiB0ZXN0IC1uICIke2x0X2N2X3Byb2dfZ251X2xkY3h4K3NldH0iOyB0aGVuCisgICAgbHRfY3ZfcHJvZ19nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkY3h4CisgIGVsc2UKKyAgICAkYXNfdW5zZXQgbHRfY3ZfcHJvZ19nbnVfbGQKKyAgZmkKKyAgaWYgdGVzdCAtbiAiJHtsdF9jdl9wYXRoX0xEQ1hYK3NldH0iOyB0aGVuCisgICAgbHRfY3ZfcGF0aF9MRD0kbHRfY3ZfcGF0aF9MRENYWAorICBlbHNlCisgICAgJGFzX3Vuc2V0IGx0X2N2X3BhdGhfTEQKKyAgZmkKKyAgdGVzdCAteiAiJHtMRENYWCtzZXR9IiB8fCBMRD0kTERDWFgKKyAgQ0M9JHtDWFgtImMrKyJ9CisgIENGTEFHUz0kQ1hYRkxBR1MKKyAgY29tcGlsZXI9JENDCisgIF9MVF9UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKKyAgX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorCisgIGlmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KKyAgICAjIFdlIGRvbid0IHdhbnQgLWZuby1leGNlcHRpb24gd2hlbiBjb21waWxpbmcgQysrIGNvZGUsIHNvIHNldCB0aGUKKyAgICAjIG5vX2J1aWx0aW5fZmxhZyBzZXBhcmF0ZWx5CisgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0nIC1mbm8tYnVpbHRpbicKKyAgICBlbHNlCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9CisgICAgZmkKKworICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgICAjIFNldCB1cCBkZWZhdWx0IEdOVSBDKysgY29uZmlndXJhdGlvbgorCisgICAgICBMVF9QQVRIX0xECisKKyAgICAgICMgQ2hlY2sgaWYgR05VIEMrKyB1c2VzIEdOVSBsZCBhcyB0aGUgdW5kZXJseWluZyBsaW5rZXIsIHNpbmNlIHRoZQorICAgICAgIyBhcmNoaXZpbmcgY29tbWFuZHMgYmVsb3cgYXNzdW1lIHRoYXQgR05VIGxkIGlzIGJlaW5nIHVzZWQuCisgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAkcGljX2ZsYWcgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgJHBpY19mbGFnIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKworICAgICAgICAjIElmIGFyY2hpdmVfY21kcyBydW5zIExELCBub3QgQ0MsIHdsYXJjIHNob3VsZCBiZSBlbXB0eQorICAgICAgICAjIFhYWCBJIHRoaW5rIHdsYXJjIGNhbiBiZSBlbGltaW5hdGVkIGluIGx0Y2YtY3h4LCBidXQgSSBuZWVkIHRvCisgICAgICAgICMgICAgIGludmVzdGlnYXRlIGl0IGEgbGl0dGxlIGJpdCBtb3JlLiAoTU0pCisgICAgICAgIHdsYXJjPScke3dsfScKKworICAgICAgICAjIGFuY2llbnQgR05VIGxkIGRpZG4ndCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZSBldC4gYWwuCisgICAgICAgIGlmIGV2YWwgImAkQ0MgLXByaW50LXByb2ctbmFtZT1sZGAgLS1oZWxwIDI+JjEiIHwKKwkgICRHUkVQICduby13aG9sZS1hcmNoaXZlJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0iJHdsYXJjIictLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyIkd2xhcmMiJy0tbm8td2hvbGUtYXJjaGl2ZScKKyAgICAgICAgZWxzZQorICAgICAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KKyAgICAgICAgZmkKKyAgICAgIGVsc2UKKyAgICAgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICAgICAgd2xhcmM9CisKKyAgICAgICAgIyBBIGdlbmVyaWMgYW5kIHZlcnkgc2ltcGxlIGRlZmF1bHQgc2hhcmVkIGxpYnJhcnkgY3JlYXRpb24KKyAgICAgICAgIyBjb21tYW5kIGZvciBHTlUgQysrIGZvciB0aGUgY2FzZSB3aGVyZSBpdCB1c2VzIHRoZSBuYXRpdmUKKyAgICAgICAgIyBsaW5rZXIsIGluc3RlYWQgb2YgR05VIGxkLiAgSWYgcG9zc2libGUsIHRoaXMgc2V0dGluZyBzaG91bGQKKyAgICAgICAgIyBvdmVycmlkZGVuIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZSBuYXRpdmUgbGlua2VyIGZlYXR1cmVzIG9uCisgICAgICAgICMgdGhlIHBsYXRmb3JtIGl0IGlzIGJlaW5nIHVzZWQgb24uCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJGxpYicKKyAgICAgIGZpCisKKyAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKyAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAtdiAiXkNvbmZpZ3VyZWQgd2l0aDoiIHwgJEdSRVAgIlwtTCInCisKKyAgICBlbHNlCisgICAgICBHWFg9bm8KKyAgICAgIHdpdGhfZ251X2xkPW5vCisgICAgICB3bGFyYz0KKyAgICBmaQorCisgICAgIyBQT1JUTUU6IGZpbGwgaW4gYSBkZXNjcmlwdGlvbiBvZiB5b3VyIHN5c3RlbSdzIEMrKyBsaW5rIGNoYXJhY3RlcmlzdGljcworICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKKyAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeDMqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgICA7OworICAgICAgYWl4W1s0LTldXSopCisgICAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgICAgICAgICAgIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAorICAgICAgICAgICMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgorICAgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKyAgICAgICAgICBleHBfc3ltX2ZsYWc9Jy1CZXhwb3J0JworICAgICAgICAgIG5vX2VudHJ5X2ZsYWc9IiIKKyAgICAgICAgZWxzZQorICAgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKworICAgICAgICAgICMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAorICAgICAgICAgICMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQorICAgICAgICAgICMgbmVlZCB0byBkbyBydW50aW1lIGxpbmtpbmcuCisgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMjNdXXxhaXg0LltbMjNdXS4qfGFpeFtbNS05XV0qKQorCSAgICBmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KKwkgICAgICBjYXNlICRsZF9mbGFnIGluCisJICAgICAgKi1icnRsKikKKwkgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCisJICAgICAgICBicmVhaworCSAgICAgICAgOzsKKwkgICAgICBlc2FjCisJICAgIGRvbmUKKwkgICAgOzsKKyAgICAgICAgICBlc2FjCisKKyAgICAgICAgICBleHBfc3ltX2ZsYWc9Jy1iZXhwb3J0JworICAgICAgICAgIG5vX2VudHJ5X2ZsYWc9Jy1ibm9lbnRyeScKKyAgICAgICAgZmkKKworICAgICAgICAjIFdoZW4gbGFyZ2UgZXhlY3V0YWJsZXMgb3Igc2hhcmVkIG9iamVjdHMgYXJlIGJ1aWx0LCBBSVggbGQgY2FuCisgICAgICAgICMgaGF2ZSBwcm9ibGVtcyBjcmVhdGluZyB0aGUgdGFibGUgb2YgY29udGVudHMuICBJZiBsaW5raW5nIGEgbGlicmFyeQorICAgICAgICAjIG9yIHByb2dyYW0gcmVzdWx0cyBpbiAiZXJyb3IgVE9DIG92ZXJmbG93IiBhZGQgLW1taW5pbWFsLXRvYyB0bworICAgICAgICAjIENYWEZMQUdTL0NGTEFHUyBmb3IgZysrL2djYy4gIEluIHRoZSBjYXNlcyB3aGVyZSB0aGF0IGlzIG5vdAorICAgICAgICAjIGVub3VnaCB0byBmaXggdGhlIHByb2JsZW0sIGFkZCAtV2wsLWJiaWd0b2MgdG8gTERGTEFHUy4KKworICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPScnCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9eWVzCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPSc6JworICAgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgICAgICAgX0xUX1RBR1ZBUihmaWxlX2xpc3Rfc3BlYywgJDEpPScke3dsfS1mLCcKKworICAgICAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bWzAxMl1dfGFpeDQuW1swMTJdXS4qKQorICAgICAgICAgICMgV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgb24gQUlYIDQuMiBhbmQgbG93ZXIsIHRoZSBjaGVjaworICAgICAgICAgICMgYmVsb3cgZm9yIGJyb2tlbiBjb2xsZWN0MiBkb2Vzbid0IHdvcmsgdW5kZXIgNC4zKworCSAgY29sbGVjdDJuYW1lPWAke0NDfSAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAorCSAgaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYKKwkgICAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgJEdSRVAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCisJICB0aGVuCisJICAgICMgV2UgaGF2ZSByZXdvcmtlZCBjb2xsZWN0MgorCSAgICA6CisJICBlbHNlCisJICAgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT11bnN1cHBvcnRlZAorCSAgICAjIEl0IGZhaWxzIHRvIGZpbmQgdW5pbnN0YWxsZWQgbGlicmFyaWVzIHdoZW4gdGhlIHVuaW5zdGFsbGVkCisJICAgICMgcGF0aCBpcyBub3QgbGlzdGVkIGluIHRoZSBsaWJwYXRoLiAgU2V0dGluZyBoYXJkY29kZV9taW51c19MCisJICAgICMgdG8gdW5zdXBwb3J0ZWQgZm9yY2VzIHJlbGlua2luZworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9CisJICBmaQorICAgICAgICAgIGVzYWMKKyAgICAgICAgICBzaGFyZWRfZmxhZz0nLXNoYXJlZCcKKwkgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorCSAgICBzaGFyZWRfZmxhZz0iJHNoYXJlZF9mbGFnICInJHt3bH0tRycKKwkgIGZpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAjIG5vdCB1c2luZyBnY2MKKyAgICAgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSAgIyBWaXN1YWxBZ2UgQysrLCBWZXJzaW9uIDUuNSBmb3IgQUlYIDVMIGZvciBJQS02NCwgQmV0YSAzIFJlbGVhc2UKKwkgICMgY2hva2VzIG9uIC1XbCwtRy4gVGhlIGZvbGxvd2luZyBsaW5lIGlzIGNvcnJlY3Q6CisJICBzaGFyZWRfZmxhZz0nLUcnCisgICAgICAgICAgZWxzZQorCSAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKwkgICAgICBzaGFyZWRfZmxhZz0nJHt3bH0tRycKKwkgICAgZWxzZQorCSAgICAgIHNoYXJlZF9mbGFnPScke3dsfS1iTTpTUkUnCisJICAgIGZpCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKworICAgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1iZXhwYWxsJworICAgICAgICAjIEl0IHNlZW1zIHRoYXQgLWJleHBhbGwgZG9lcyBub3QgZXhwb3J0IHN5bWJvbHMgYmVnaW5uaW5nIHdpdGgKKyAgICAgICAgIyB1bmRlcnNjb3JlIChfKSwgc28gaXQgaXMgYmV0dGVyIHRvIGdlbmVyYXRlIGEgbGlzdCBvZiBzeW1ib2xzIHRvCisJIyBleHBvcnQuCisgICAgICAgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9eWVzCisgICAgICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorICAgICAgICAgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1bnRpbWUgbG9hZGluZyBmbGFncyAoLWJydGwpLAorICAgICAgICAgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKyAgICAgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Jy1iZXJvaycKKyAgICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4gZW1wdHkKKyAgICAgICAgICAjIGV4ZWN1dGFibGUuCisgICAgICAgICAgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgoWyQxXSkKKyAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKworICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiBmdW5jX2VjaG9fYWxsICIke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IjsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgorICAgICAgICBlbHNlCisgICAgICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LVIgJGxpYmRpcjovdXNyL2xpYjovbGliJworCSAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Ii16IG5vZGVmcyIKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzICR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30gJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMiCisgICAgICAgICAgZWxzZQorCSAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKwkgICAgIyBlbXB0eSBleGVjdXRhYmxlLgorCSAgICBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWChbJDFdKQorCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKwkgICAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKKwkgICAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorCSAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1iZXJub3RvaycKKwkgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tYmVyb2snCisJICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKwkgICAgICAjIFdlIG9ubHkgdXNlIHRoaXMgY29kZSBmb3IgR05VIGxkcyB0aGF0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlLgorCSAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICAgIGVsc2UKKwkgICAgICAjIEV4cG9ydGVkIHN5bWJvbHMgY2FuIGJlIHB1bGxlZCBpbnRvIHNoYXJlZCBvYmplY3RzIGZyb20gYXJjaGl2ZXMKKwkgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyRjb252ZW5pZW5jZScKKwkgICAgZmkKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPXllcworCSAgICAjIFRoaXMgaXMgc2ltaWxhciB0byBob3cgQUlYIHRyYWRpdGlvbmFsbHkgYnVpbGRzIGl0cyBzaGFyZWQKKwkgICAgIyBsaWJyYXJpZXMuCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHt3bH0tYm5vZW50cnkgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWJFOiRleHBvcnRfc3ltYm9scyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9fiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS5hICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKworICAgICAgYmVvcyopCisJaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisJICAjIEpvc2VwaCBCZWNrZW5iYWNoIDxqcmIzQGJlc3QuY29tPiBzYXlzIHNvbWUgcmVsZWFzZXMgb2YgZ2NjCisJICAjIHN1cHBvcnQgLS11bmRlZmluZWQuICBUaGlzIGRlc2VydmVzIHNvbWUgaW52ZXN0aWdhdGlvbi4gIEZJWE1FCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW5vc3RhcnQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJZWxzZQorCSAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCWZpCisJOzsKKworICAgICAgY2hvcnVzKikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICAqKQorCSAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKwljYXNlICRHWFgsJGNjX2Jhc2VuYW1lIGluCisJLGNsKiB8IG5vLGNsKikKKwkgICMgTmF0aXZlIE1TVkMKKwkgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKKwkgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nICcKKwkgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorCSAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKKwkgIF9MVF9UQUdWQVIoZmlsZV9saXN0X3NwZWMsICQxKT0nQCcKKwkgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisJICBsaWJleHQ9bGliCisJICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKwkgIHNocmV4dF9jbWRzPSIuZGxsIgorCSAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtZGxsfmxpbmtuYW1lcz0nCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKwkgICAgICAkU0VEIC1uIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgLWUgJzFcXFwhcCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKwkgICAgZWxzZQorCSAgICAgICRTRUQgLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworCSAgICBmaX4KKwkgICAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgorCSAgICBsaW5rbmFtZXM9JworCSAgIyBUaGUgbGlua2VyIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgYnVpbGQgYSBzdGF0aWMgbGliIGlmIHdlIGJ1aWxkIGEgRExMLgorCSAgIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICQxKT0ndHJ1ZScKKwkgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcworCSAgIyBEb24ndCB1c2UgcmFubGliCisJICBfTFRfVEFHVkFSKG9sZF9wb3N0aW5zdGFsbF9jbWRzLCAkMSk9J2NobW9kIDY0NCAkb2xkbGliJworCSAgX0xUX1RBR1ZBUihwb3N0bGlua19jbWRzLCAkMSk9J2x0X291dHB1dGZpbGU9IkBPVVRQVVRAIn4KKwkgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KKwkgICAgY2FzZSAkbHRfb3V0cHV0ZmlsZSBpbgorCSAgICAgICouZXhlfCouRVhFKSA7OworCSAgICAgICopCisJCWx0X291dHB1dGZpbGU9IiRsdF9vdXRwdXRmaWxlLmV4ZSIKKwkJbHRfdG9vbF9vdXRwdXRmaWxlPSIkbHRfdG9vbF9vdXRwdXRmaWxlLmV4ZSIKKwkJOzsKKwkgICAgZXNhY34KKwkgICAgZnVuY190b190b29sX2ZpbGUgIiRsdF9vdXRwdXRmaWxlIn4KKwkgICAgaWYgdGVzdCAiJE1BTklGRVNUX1RPT0wiICE9ICI6IiAmJiB0ZXN0IC1mICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7IHRoZW4KKwkgICAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOworCSAgICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOworCSAgICBmaScKKwkgIDs7CisJKikKKwkgICMgZysrCisJICAjIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAorCSAgIyBhcyB0aGVyZSBpcyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisJICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWFsbC1zeW1ib2xzJworCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisJICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCisJICBfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKKworCSAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisJICAgICMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSAoMXN0IGxpbmUKKwkgICAgIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisJICAgICAgY3AgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworCSAgICBlbHNlCisJICAgICAgZWNobyBFWFBPUlRTID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisJICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKwkgICAgZml+CisJICAgICRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKwkgIGVsc2UKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgZmkKKwkgIDs7CisJZXNhYworCTs7CisgICAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICAgICBfTFRfREFSV0lOX0xJTktFUl9GRUFUVVJFUygkMSkKKwk7OworCisgICAgICBkZ3V4KikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBlYysrKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgICBnaGN4KikKKwkgICAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIGZyZWVic2QyLiopCisgICAgICAgICMgQysrIHNoYXJlZCBsaWJyYXJpZXMgcmVwb3J0ZWQgdG8gYmUgZmFpcmx5IGJyb2tlbiBiZWZvcmUKKwkjIHN3aXRjaCB0byBFTEYKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgICA7OworCisgICAgICBmcmVlYnNkLWVsZiopCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworICAgICAgICA7OworCisgICAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICAgICAgICMgRnJlZUJTRCAzIGFuZCBsYXRlciB1c2UgR05VIEMrKyBhbmQgR05VIGxkIHdpdGggc3RhbmRhcmQgRUxGCisgICAgICAgICMgY29udmVudGlvbnMKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT15ZXMKKyAgICAgICAgOzsKKworICAgICAgZ251KikKKyAgICAgICAgOzsKKworICAgICAgaGFpa3UqKQorICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisgICAgICAgIDs7CisKKyAgICAgIGhwdXg5KikKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisgICAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcyAjIE5vdCBpbiB0aGUgc2VhcmNoIFBBVEgsCisJCQkJICAgICAgICAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0CisJCQkJICAgICAgICAgICAgICMgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyopCisgICAgICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgICAgICAgIDs7CisgICAgICAgICAgYUNDKikKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtYiAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworICAgICAgICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisgICAgICAgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKyAgICAgICAgICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCisgICAgICAgICAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisgICAgICAgICAgICAjIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gKCRDQyAtYiAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSkgfCAkRUdSRVAgIlwtTCJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiJGxpc3QiJworICAgICAgICAgICAgOzsKKyAgICAgICAgICAqKQorICAgICAgICAgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgaHB1eDEwKnxocHV4MTEqKQorICAgICAgICBpZiB0ZXN0ICR3aXRoX2dudV9sZCA9IG5vOyB0aGVuCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisKKyAgICAgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgICAgICAgaHBwYSo2NCp8aWE2NCopCisgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAqKQorCSAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisgICAgICAgICAgICAgIDs7CisgICAgICAgICAgZXNhYworICAgICAgICBmaQorICAgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgICAgIGhwcGEqNjQqfGlhNjQqKQorICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgICAgICAgIDs7CisgICAgICAgICAgKikKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcworICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzICMgTm90IGluIHRoZSBzZWFyY2ggUEFUSCwKKwkJCQkJICAgICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQKKwkJCQkJICAgICAgICAgIyBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKworICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgICBhQ0MqKQorCSAgICBjYXNlICRob3N0X2NwdSBpbgorCSAgICAgIGhwcGEqNjQqKQorCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgOzsKKwkgICAgICBpYTY0KikKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICAgIDs7CisJICAgICAgKikKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgOzsKKwkgICAgZXNhYworCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgIworCSAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisJICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCisJICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKwkgICAgIyBkZXBlbmRlbmNpZXMuCisJICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gKCRDQyAtYiAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSkgfCAkR1JFUCAiXC1MImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICIkbGlzdCInCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKwkgICAgICBpZiB0ZXN0ICR3aXRoX2dudV9sZCA9IG5vOyB0aGVuCisJICAgICAgICBjYXNlICRob3N0X2NwdSBpbgorCSAgICAgICAgICBocHBhKjY0KikKKwkgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICAgICAgOzsKKwkgICAgICAgICAgaWE2NCopCisJICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICAgICAgICA7OworCSAgICAgICAgICAqKQorCSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICAgICAgICA7OworCSAgICAgICAgZXNhYworCSAgICAgIGZpCisJICAgIGVsc2UKKwkgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIGZpCisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgaW50ZXJpeFtbMy05XV0qKQorCV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJworCV9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisJIyBIYWNrOiBPbiBJbnRlcml4IDMueCwgd2UgY2Fubm90IGNvbXBpbGUgUElDIGJlY2F1c2Ugb2YgYSBicm9rZW4gZ2NjLgorCSMgSW5zdGVhZCwgc2hhcmVkIGxpYnJhcmllcyBhcmUgbG9hZGVkIGF0IGFuIGltYWdlIGJhc2UgKDB4MTAwMDAwMDAgYnkKKwkjIGRlZmF1bHQpIGFuZCByZWxvY2F0ZWQgaWYgdGhleSBjb25mbGljdCwgd2hpY2ggaXMgYSBzbG93IHZlcnkgbWVtb3J5CisJIyBjb25zdW1pbmcgYW5kIGZyYWdtZW50aW5nIHByb2Nlc3MuICBUbyBhdm9pZCB0aGlzLCB3ZSBwaWNrIGEgcmFuZG9tLAorCSMgMjU2IEtpQi1hbGlnbmVkIGltYWdlIGJhc2UgYmV0d2VlbiAweDUwMDAwMDAwIGFuZCAweDZGRkMwMDAwIGF0IGxpbmsKKwkjIHRpbWUuICBNb3ZpbmcgdXAgZnJvbSAweDEwMDAwMDAwIGFsc28gYWxsb3dzIG1vcmUgc2JyaygyKSBzcGFjZS4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdzZWQgInMsXixfLCIgJGV4cG9ydF9zeW1ib2xzID4kb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0tcmV0YWluLXN5bWJvbHMtZmlsZSwkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJworCTs7CisgICAgICBpcml4NSogfCBpcml4NiopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgQ0MqKQorCSAgICAjIFNHSSBDKysKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLWFsbCAtbXVsdGlnb3QgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisKKwkgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJICAgICMgIkNDIC1hciIsIHdoZXJlICJDQyIgaXMgdGhlIElSSVggQysrIGNvbXBpbGVyLiAgVGhpcyBpcworCSAgICAjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKKwkgICAgIyBpbiB0aGUgYXJjaGl2ZS4KKwkgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYXIgLVdSLC11IC1vICRvbGRsaWIgJG9sZG9ianMnCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKwkgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJICAgICAgZWxzZQorCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgLW8gJGxpYicKKwkgICAgICBmaQorCSAgICBmaQorCSAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisgICAgICAgIF9MVF9UQUdWQVIoaW5oZXJpdF9ycGF0aCwgJDEpPXllcworICAgICAgICA7OworCisgICAgICBsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgS0NDKikKKwkgICAgIyBLdWNrIGFuZCBBc3NvY2lhdGVzLCBJbmMuIChLQUkpIEMrKyBDb21waWxlcgorCisJICAgICMgS0NDIHdpbGwgb25seSBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeSBpZiB0aGUgb3V0cHV0IGZpbGUKKwkgICAgIyBlbmRzIHdpdGggIi5zbyIgKG9yICIuc2wiIGZvciBIUC1VWCksIHNvIHJlbmFtZSB0aGUgbGlicmFyeQorCSAgICAjIHRvIGl0cyBwcm9wZXIgbmFtZSAod2l0aCB2ZXJzaW9uKSBhZnRlciBsaW5raW5nLgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFtbXigpMC05QS1aYS16e31dXVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gJGxpYiB8ICRTRUQgLWUgInMvXCR7dGVtcGV4dH1cLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYjsgbXYgXCR0ZW1wbGliICRsaWInCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFtbXigpMC05QS1aYS16e31dXVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gJGxpYiB8ICRTRUQgLWUgInMvXCR7dGVtcGV4dH1cLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYiAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9sczsgbXYgXCR0ZW1wbGliICRsaWInCisJICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAjCisJICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKwkgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKwkgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorCSAgICAjIGRlcGVuZGVuY2llcy4KKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IC1vIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQgMj4mMSB8ICRHUkVQICJsZCJgOyBybSAtZiBsaWJjb25mdGVzdCRzaGFyZWRfZXh0OyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiJGxpc3QiJworCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCisKKwkgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJICAgICMgIkNDIC1Cc3RhdGljIiwgd2hlcmUgIkNDIiBpcyB0aGUgS0FJIEMrKyBjb21waWxlci4KKwkgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtQnN0YXRpYyAtbyAkb2xkbGliICRvbGRvYmpzJworCSAgICA7OworCSAgaWNwYyogfCBlY3BjKiApCisJICAgICMgSW50ZWwgQysrCisJICAgIHdpdGhfZ251X2xkPXllcworCSAgICAjIHZlcnNpb24gOC4wIGFuZCBhYm92ZSBvZiBpY3BjIGNob2tlIG9uIG11bHRpcGx5IGRlZmluZWQgc3ltYm9scworCSAgICAjIGlmIHdlIGFkZCAkcHJlZGVwX29iamVjdHMgYW5kICRwb3N0ZGVwX29iamVjdHMsIGhvd2V2ZXIgNy4xIGFuZAorCSAgICAjIGVhcmxpZXIgZG8gbm90IGFkZCB0aGUgb2JqZWN0cyB0aGVtc2VsdmVzLgorCSAgICBjYXNlIGAkQ0MgLVYgMj4mMWAgaW4KKwkgICAgICAqIlZlcnNpb24gNy4iKikKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJCTs7CisJICAgICAgKikgICMgVmVyc2lvbiA4LjAgb3IgbmV3ZXIKKwkgICAgICAgIHRtcF9pZHluPQorCSAgICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKwkJICBpYTY0KikgdG1wX2lkeW49JyAtaV9keW5hbWljJzs7CisJCWVzYWMKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJyIkdG1wX2lkeW4iJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJyIkdG1wX2lkeW4iJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkJOzsKKwkgICAgZXNhYworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKwkgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgICAgOzsKKyAgICAgICAgICBwZ0NDKiB8IHBnY3BwKikKKyAgICAgICAgICAgICMgUG9ydGxhbmQgR3JvdXAgQysrIGNvbXBpbGVyCisJICAgIGNhc2UgYCRDQyAtVmAgaW4KKwkgICAgKnBnQ0NcIFtbMS01XV0uKiB8ICpwZ2NwcFwgW1sxLTVdXS4qKQorCSAgICAgIF9MVF9UQUdWQVIocHJlbGlua19jbWRzLCAkMSk9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisJCXJtIC1yZiAkdHBsZGlyfgorCQkkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRvYmpzICRsaWJvYmpzICRjb21waWxlX2RlcGxpYnN+CisJCWNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYCInCisJICAgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisJCXJtIC1yZiAkdHBsZGlyfgorCQkkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRvbGRvYmpzJG9sZF9kZXBsaWJzfgorCQkkQVIgJEFSX0ZMQUdTICRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYH4KKwkJJFJBTkxJQiAkb2xkbGliJworCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisJCXJtIC1yZiAkdHBsZGlyfgorCQkkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkY29udmVuaWVuY2UgJHBvc3RkZXBfb2JqZWN0c34KKwkJJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYCAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIC1vICRsaWInCisJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisJCXJtIC1yZiAkdHBsZGlyfgorCQkkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkY29udmVuaWVuY2UgJHBvc3RkZXBfb2JqZWN0c34KKwkJJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYCAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkgICAgICA7OworCSAgICAqKSAjIFZlcnNpb24gNiBhbmQgYWJvdmUgdXNlIHdlYWsgc3ltYm9scworCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAtbyAkbGliJworCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCSAgICAgIDs7CisJICAgIGVzYWMKKworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXJwYXRoICR7d2x9JGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworCSAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworICAgICAgICAgICAgOzsKKwkgIGN4eCopCisJICAgICMgQ29tcGFxIEMrKworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAgLW8gJGxpYiAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scycKKworCSAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLXJwYXRoICRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKworCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgIworCSAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisJICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCisJICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKwkgICAgIyBkZXBlbmRlbmNpZXMuCisJICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAibGQiYDsgdGVtcGxpc3Q9YGZ1bmNfZWNob19hbGwgIiR0ZW1wbGlzdCIgfCAkU0VEICJzL1woXi4qbGQuKlwpXCggLipsZCAuKiRcKS9cMS8iYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGZ1bmNfZWNob19hbGwgIlgkbGlzdCIgfCAkWHNlZCcKKwkgICAgOzsKKwkgIHhsKiB8IG1waXhsKiB8IGJneGwqKQorCSAgICAjIElCTSBYTCA4LjAgb24gUFBDLCB3aXRoIEdOVSBsZAorCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtcW1rc2hyb2JqICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICBpZiB0ZXN0ICJ4JHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyIgPSB4eWVzOyB0aGVuCisJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJCWNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkJZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJCSRDQyAtcW1rc2hyb2JqICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS12ZXJzaW9uLXNjcmlwdCAke3dsfSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworCSAgICBmaQorCSAgICA7OworCSAgKikKKwkgICAgY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCisJICAgICpTdW5cIEMqKQorCSAgICAgICMgU3VuIEMrKyA1LjkKKwkgICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtemRlZnMnCisJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scycKKwkgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworCSAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgICAgICBfTFRfVEFHVkFSKGNvbXBpbGVyX25lZWRzX29iamVjdCwgJDEpPXllcworCisJICAgICAgIyBOb3Qgc3VyZSB3aGV0aGVyIHNvbWV0aGluZyBiYXNlZCBvbgorCSAgICAgICMgJENDICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAtbyBsaWJjb25mdGVzdCRzaGFyZWRfZXh0IDI+JjEKKwkgICAgICAjIHdvdWxkIGJlIGJldHRlci4KKwkgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZnVuY19lY2hvX2FsbCcKKworCSAgICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZworCSAgICAgICMgIkNDIC14YXIiLCB3aGVyZSAiQ0MiIGlzIHRoZSBTdW4gQysrIGNvbXBpbGVyLiAgVGhpcyBpcworCSAgICAgICMgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VyZSBpbnN0YW50aWF0ZWQgdGVtcGxhdGVzIGFyZSBpbmNsdWRlZAorCSAgICAgICMgaW4gdGhlIGFyY2hpdmUuCisJICAgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAteGFyIC1vICRvbGRsaWIgJG9sZG9ianMnCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgICA7OworCWVzYWMKKwk7OworCisgICAgICBseW54b3MqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJOzsKKworICAgICAgbTg4ayopCisgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJOzsKKworICAgICAgbXZzKikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBjeHgqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworCSAgKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKwllc2FjCisJOzsKKworICAgICAgbmV0YnNkKikKKyAgICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkbGlua2VyX2ZsYWdzJworCSAgd2xhcmM9CisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJZmkKKwkjIFdvcmthcm91bmQgc29tZSBicm9rZW4gcHJlLTEuNSB0b29sY2hhaW5zCisJb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgY29uZnRlc3QuJG9iamV4dCB8ICRTRUQgLWUgInM6LWxnY2MgLWxjIC1sZ2NjOjoiJworCTs7CisKKyAgICAgICpudG8qIHwgKnFueCopCisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9eWVzCisJOzsKKworICAgICAgb3BlbmJzZDIqKQorICAgICAgICAjIEMrKyBzaGFyZWQgbGlicmFyaWVzIGFyZSBmYWlybHkgYnJva2VuCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCTs7CisKKyAgICAgIG9wZW5ic2QqKQorCWlmIHRlc3QgLWYgL3Vzci9saWJleGVjL2xkLnNvOyB0aGVuCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9eWVzCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRsaWInCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwkgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCSAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworCSAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCisJICBmaQorCSAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9ZnVuY19lY2hvX2FsbAorCWVsc2UKKwkgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwlmaQorCTs7CisKKyAgICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBLQ0MqKQorCSAgICAjIEt1Y2sgYW5kIEFzc29jaWF0ZXMsIEluYy4gKEtBSSkgQysrIENvbXBpbGVyCisKKwkgICAgIyBLQ0Mgd2lsbCBvbmx5IGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5IGlmIHRoZSBvdXRwdXQgZmlsZQorCSAgICAjIGVuZHMgd2l0aCAiLnNvIiAob3IgIi5zbCIgZm9yIEhQLVVYKSwgc28gcmVuYW1lIHRoZSBsaWJyYXJ5CisJICAgICMgdG8gaXRzIHByb3BlciBuYW1lICh3aXRoIHZlcnNpb24pIGFmdGVyIGxpbmtpbmcuCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW1teKCkwLTlBLVphLXp7fV1dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAiJGxpYiIgfCAkU0VEIC1lICJzL1wke3RlbXBleHR9XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWI7IG12IFwkdGVtcGxpYiAkbGliJworCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisKKwkgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJICAgICMgdGhlIEtBSSBDKysgY29tcGlsZXIuCisJICAgIGNhc2UgJGhvc3QgaW4KKwkgICAgICBvc2YzKikgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtQnN0YXRpYyAtbyAkb2xkbGliICRvbGRvYmpzJyA7OworCSAgICAgICopIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLW8gJG9sZGxpYiAkb2xkb2JqcycgOzsKKwkgICAgZXNhYworCSAgICA7OworICAgICAgICAgIFJDQyopCisJICAgICMgUmF0aW9uYWwgQysrIDIuNC4xCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgICAgY3h4KikKKwkgICAgY2FzZSAkaG9zdCBpbgorCSAgICAgIG9zZjMqKQorCSAgICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCSAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKwkJOzsKKwkgICAgICAqKQorCSAgICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdmb3IgaSBpbiBgY2F0ICRleHBvcnRfc3ltYm9sc2A7IGRvIHByaW50ZiAiJXMgJXNcXG4iIC1leHBvcnRlZF9zeW1ib2wgIlwkaSIgPj4gJGxpYi5leHA7IGRvbmV+CisJICAgICAgICAgIGVjaG8gIi1oaWRkZW4iPj4gJGxpYi5leHB+CisJICAgICAgICAgICRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgJHt3bH0taW5wdXQgJHt3bH0kbGliLmV4cCAgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYn4KKwkgICAgICAgICAgJFJNICRsaWIuZXhwJworCSAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1ycGF0aCAkbGliZGlyJworCQk7OworCSAgICBlc2FjCisKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorCisJICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAjCisJICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKwkgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKwkgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorCSAgICAjIGRlcGVuZGVuY2llcy4KKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQICJsZCIgfCAkR1JFUCAtdiAibGQ6ImA7IHRlbXBsaXN0PWBmdW5jX2VjaG9fYWxsICIkdGVtcGxpc3QiIHwgJFNFRCAicy9cKF4uKmxkLipcKVwoIC4qbGQuKiRcKS9cMS8iYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGZ1bmNfZWNob19hbGwgIiRsaXN0IicKKwkgICAgOzsKKwkgICopCisJICAgIGlmIHRlc3QgIiRHWFgiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCSAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCisJICAgICAgY2FzZSAkaG9zdCBpbgorCSAgICAgICAgb3NmMyopCisJICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkJICA7OworCSAgICAgICAgKikKKwkgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCQkgIDs7CisJICAgICAgZXNhYworCisJICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKwkgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisKKwkgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgLXYgIl5Db25maWd1cmVkIHdpdGg6IiB8ICRHUkVQICJcLUwiJworCisJICAgIGVsc2UKKwkgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIGZpCisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgcHNvcyopCisgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICAgIDs7CisKKyAgICAgIHN1bm9zNCopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgQ0MqKQorCSAgICAjIFN1biBDKysgNC54CisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgICAgbGNjKikKKwkgICAgIyBMdWNpZAorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICAgICopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgc29sYXJpcyopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgQ0MqIHwgc3VuQ0MqKQorCSAgICAjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCisgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCQxKT15ZXMKKwkgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgLXpkZWZzJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAgLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorCSAgICAgICRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJICAgIGNhc2UgJGhvc3Rfb3MgaW4KKwkgICAgICBzb2xhcmlzMi5bWzAtNV1dIHwgc29sYXJpczIuW1swLTVdXS4qKSA7OworCSAgICAgICopCisJCSMgVGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGNvbWJpbmUgYW5kIHJlb3JkZXIgbGlua2VyIG9wdGlvbnMsCisJCSMgYnV0IHVuZGVyc3RhbmRzIGAteiBsaW5rZXJfZmxhZycuCisJICAgICAgICAjIFN1cHBvcnRlZCBzaW5jZSBTb2xhcmlzIDIuNiAobWF5YmUgMi41LjE/KQorCQlfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Jy16IGFsbGV4dHJhY3QkY29udmVuaWVuY2UgLXogZGVmYXVsdGV4dHJhY3QnCisJICAgICAgICA7OworCSAgICBlc2FjCisJICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworCisJICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdmdW5jX2VjaG9fYWxsJworCisJICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZworCSAgICAjICJDQyAteGFyIiwgd2hlcmUgIkNDIiBpcyB0aGUgU3VuIEMrKyBjb21waWxlci4gIFRoaXMgaXMKKwkgICAgIyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIGluc3RhbnRpYXRlZCB0ZW1wbGF0ZXMgYXJlIGluY2x1ZGVkCisJICAgICMgaW4gdGhlIGFyY2hpdmUuCisJICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLXhhciAtbyAkb2xkbGliICRvbGRvYmpzJworCSAgICA7OworICAgICAgICAgIGdjeCopCisJICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKKworCSAgICAjIFRoZSBDKysgY29tcGlsZXIgbXVzdCBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgYXJjaGl2ZS4KKwkgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAkTERGTEFHUyAtYXJjaGl2ZSAtbyAkb2xkbGliICRvbGRvYmpzJworCSAgICA7OworICAgICAgICAgICopCisJICAgICMgR05VIEMrKyBjb21waWxlciB3aXRoIFNvbGFyaXMgbGlua2VyCisJICAgIGlmIHRlc3QgIiRHWFgiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCSAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LXogJHt3bH1kZWZzJworCSAgICAgIGlmICRDQyAtLXZlcnNpb24gfCAkR1JFUCAtdiAnXjJcLjcnID4gL2Rldi9udWxsOyB0aGVuCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRMREZMQUdTICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJCSAgJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAke3dsfS1NICR3bCRsaWIuZXhwIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKworCSAgICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIC12ICJeQ29uZmlndXJlZCB3aXRoOiIgfCAkR1JFUCAiXC1MIicKKwkgICAgICBlbHNlCisJICAgICAgICAjIGcrKyAyLjcgYXBwZWFycyB0byByZXF1aXJlIGAtRycgTk9UIGAtc2hhcmVkJyBvbiB0aGlzCisJICAgICAgICAjIHBsYXRmb3JtLgorCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HIC1ub3N0ZGxpYiAkTERGTEFHUyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCAkd2wkc29uYW1lIC1vICRsaWInCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorCQkgICRDQyAtRyAtbm9zdGRsaWIgJHt3bH0tTSAkd2wkbGliLmV4cCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisKKwkgICAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1HICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgLXYgIl5Db25maWd1cmVkIHdpdGg6IiB8ICRHUkVQICJcLUwiJworCSAgICAgIGZpCisKKwkgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tUiAkd2wkbGliZGlyJworCSAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKwkJc29sYXJpczIuW1swLTVdXSB8IHNvbGFyaXMyLltbMC01XV0uKikgOzsKKwkJKikKKwkJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXogJHt3bH1hbGxleHRyYWN0JGNvbnZlbmllbmNlICR7d2x9LXogJHt3bH1kZWZhdWx0ZXh0cmFjdCcKKwkJICA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgc3lzdjQqdXcyKiB8IHN5c3Y1T3BlblVOSVgqIHwgc3lzdjVVbml4V2FyZTcuW1swMV1dLltbMTBdXSogfCB1bml4d2FyZTcqIHwgc2NvMy4ydjUuMC5bWzAyNF1dKikKKyAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0teix0ZXh0JworICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICBDQyopCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCSopCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiopCisJIyBOb3RlOiBXZSBjYW4gTk9UIHVzZSAteiBkZWZzIGFzIHdlIG1pZ2h0IGRlc2lyZSwgYmVjYXVzZSB3ZSBkbyBub3QKKwkjIGxpbmsgd2l0aCAtbGMsIGFuZCB0aGF0IHdvdWxkIGNhdXNlIGFueSBzeW1ib2xzIHVzZWQgZnJvbSBsaWJjIHRvCisJIyBhbHdheXMgYmUgdW5yZXNvbHZlZCwgd2hpY2ggbWVhbnMganVzdCBhYm91dCBubyBsaWJyYXJ5IHdvdWxkCisJIyBldmVyIGxpbmsgY29ycmVjdGx5LiAgSWYgd2UncmUgbm90IHVzaW5nIEdOVSBsZCB3ZSB1c2UgLXogdGV4dAorCSMgdGhvdWdoLCB3aGljaCBkb2VzIGNhdGNoIHNvbWUgYmFkIHN5bWJvbHMgYnV0IGlzbid0IGFzIGhlYXZ5LWhhbmRlZAorCSMgYXMgLXogZGVmcy4KKwlfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosdGV4dCcKKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosbm9kZWZzJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworCV9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LVIsJGxpYmRpcicKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0nOicKKwlfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKwlfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1CZXhwb3J0JworCXJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKKworCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgQ0MqKQorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtVHByZWxpbmtfb2JqZWN0cyAkb2xkb2Jqc34KKwkgICAgICAnIiRfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKSIKKwkgICAgX0xUX1RBR1ZBUihyZWxvYWRfY21kcywgJDEpPSckQ0MgLVRwcmVsaW5rX29iamVjdHMgJHJlbG9hZF9vYmpzfgorCSAgICAgICciJF9MVF9UQUdWQVIocmVsb2FkX2NtZHMsICQxKSIKKwkgICAgOzsKKwkgICopCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgICAgOzsKKwllc2FjCisgICAgICA7OworCisgICAgICB0YW5kZW0qKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIE5DQyopCisJICAgICMgTm9uU3RvcC1VWCBOQ0MgMy4yMAorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICAgICopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgdnh3b3JrcyopCisgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICAgIDs7CisKKyAgICAgICopCisgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICAgIDs7CisgICAgZXNhYworCisgICAgQUNfTVNHX1JFU1VMVChbJF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSldKQorICAgIHRlc3QgIiRfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KKworICAgIF9MVF9UQUdWQVIoR0NDLCAkMSk9IiRHWFgiCisgICAgX0xUX1RBR1ZBUihMRCwgJDEpPSIkTEQiCisKKyAgICAjIyBDQVZFQVQgRU1QVE9SOgorICAgICMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCisgICAgIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKKyAgICAjIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KKyAgICBfTFRfU1lTX0hJRERFTl9MSUJERVBTKCQxKQorICAgIF9MVF9DT01QSUxFUl9QSUMoJDEpCisgICAgX0xUX0NPTVBJTEVSX0NfTygkMSkKKyAgICBfTFRfQ09NUElMRVJfRklMRV9MT0NLUygkMSkKKyAgICBfTFRfTElOS0VSX1NITElCUygkMSkKKyAgICBfTFRfU1lTX0RZTkFNSUNfTElOS0VSKCQxKQorICAgIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSCgkMSkKKworICAgIF9MVF9DT05GSUcoJDEpCisgIGZpICMgdGVzdCAtbiAiJGNvbXBpbGVyIgorCisgIENDPSRsdF9zYXZlX0NDCisgIENGTEFHUz0kbHRfc2F2ZV9DRkxBR1MKKyAgTERDWFg9JExECisgIExEPSRsdF9zYXZlX0xECisgIEdDQz0kbHRfc2F2ZV9HQ0MKKyAgd2l0aF9nbnVfbGQ9JGx0X3NhdmVfd2l0aF9nbnVfbGQKKyAgbHRfY3ZfcGF0aF9MRENYWD0kbHRfY3ZfcGF0aF9MRAorICBsdF9jdl9wYXRoX0xEPSRsdF9zYXZlX3BhdGhfTEQKKyAgbHRfY3ZfcHJvZ19nbnVfbGRjeHg9JGx0X2N2X3Byb2dfZ251X2xkCisgIGx0X2N2X3Byb2dfZ251X2xkPSRsdF9zYXZlX3dpdGhfZ251X2xkCitmaSAjIHRlc3QgIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciIgIT0geWVzCisKK0FDX0xBTkdfUE9QCitdKSMgX0xUX0xBTkdfQ1hYX0NPTkZJRworCisKKyMgX0xUX0ZVTkNfU1RSSVBOQU1FX0NORgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGZ1bmNfc3RyaXBuYW1lX2NuZiBwcmVmaXggc3VmZml4IG5hbWUKKyMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCisjIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCisjIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCisjCisjIFRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIHRoZSAobm9uLVhTSSkgdmVyc2lvbiBvZiBmdW5jX3N0cmlwbmFtZSwKKyMgZXhjZXB0IHRoaXMgb25lIGNhbiBiZSB1c2VkIGJ5IG00IGNvZGUgdGhhdCBtYXkgYmUgZXhlY3V0ZWQgYnkgY29uZmlndXJlLAorIyByYXRoZXIgdGhhbiB0aGUgbGlidG9vbCBzY3JpcHQuCittNF9kZWZ1bihbX0xUX0ZVTkNfU1RSSVBOQU1FX0NORl0sW2RubAorQUNfUkVRVUlSRShbX0xUX0RFQ0xfU0VEXSkKK0FDX1JFUVVJUkUoW19MVF9QUk9HX0VDSE9fQkFDS1NMQVNIXSkKK2Z1bmNfc3RyaXBuYW1lX2NuZiAoKQoreworICBjYXNlICR7Mn0gaW4KKyAgLiopIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJVxcXFwkezJ9XCQlJSJgOzsKKyAgKikgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJSR7Mn1cJCUlImA7OworICBlc2FjCit9ICMgZnVuY19zdHJpcG5hbWVfY25mCitdKSMgX0xUX0ZVTkNfU1RSSVBOQU1FX0NORgorCisjIF9MVF9TWVNfSElEREVOX0xJQkRFUFMoW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRmlndXJlIG91dCAiaGlkZGVuIiBsaWJyYXJ5IGRlcGVuZGVuY2llcyBmcm9tIHZlcmJvc2UKKyMgY29tcGlsZXIgb3V0cHV0IHdoZW4gbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorIyBQYXJzZSB0aGUgY29tcGlsZXIgb3V0cHV0IGFuZCBleHRyYWN0IHRoZSBuZWNlc3NhcnkKKyMgb2JqZWN0cywgbGlicmFyaWVzIGFuZCBsaWJyYXJ5IGZsYWdzLgorbTRfZGVmdW4oW19MVF9TWVNfSElEREVOX0xJQkRFUFNdLAorW200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorQUNfUkVRVUlSRShbX0xUX0ZVTkNfU1RSSVBOQU1FX0NORl0pZG5sCisjIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBvYmplY3QgYmVpbmcgbGlua2VkOgorX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpPQorX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKT0KK19MVF9UQUdWQVIocHJlZGVwcywgJDEpPQorX0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpPQorX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKT0KKworZG5sIHdlIGNhbid0IHVzZSB0aGUgbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIGhlcmUsCitkbmwgYmVjYXVzZSBpdCBjb250YWlucyBjb2RlIGludGVuZGVkIGZvciBhbiBleGVjdXRhYmxlLAorZG5sIG5vdCBhIGxpYnJhcnkuICBJdCdzIHBvc3NpYmxlIHdlIHNob3VsZCBsZXQgZWFjaAorZG5sIHRhZyBkZWZpbmUgYSBuZXcgbHRfPz8/P19saW5rX3Rlc3RfY29kZSB2YXJpYWJsZSwKK2RubCBidXQgaXQncyBvbmx5IHVzZWQgaGVyZS4uLgorbTRfaWYoWyQxXSwgW10sIFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgoraW50IGE7Cit2b2lkIGZvbyAodm9pZCkgeyBhID0gMDsgfQorX0xUX0VPRgorXSwgWyQxXSwgW0NYWF0sIFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorY2xhc3MgRm9vCit7CitwdWJsaWM6CisgIEZvbyAodm9pZCkgeyBhID0gMDsgfQorcHJpdmF0ZToKKyAgaW50IGE7Cit9OworX0xUX0VPRgorXSwgWyQxXSwgW0Y3N10sIFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorICAgICAgc3Vicm91dGluZSBmb28KKyAgICAgIGltcGxpY2l0IG5vbmUKKyAgICAgIGludGVnZXIqNCBhCisgICAgICBhPTAKKyAgICAgIHJldHVybgorICAgICAgZW5kCitfTFRfRU9GCitdLCBbJDFdLCBbRkNdLCBbY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKyAgICAgIHN1YnJvdXRpbmUgZm9vCisgICAgICBpbXBsaWNpdCBub25lCisgICAgICBpbnRlZ2VyIGEKKyAgICAgIGE9MAorICAgICAgcmV0dXJuCisgICAgICBlbmQKK19MVF9FT0YKK10sIFskMV0sIFtHQ0pdLCBbY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKK3B1YmxpYyBjbGFzcyBmb28geworICBwcml2YXRlIGludCBhOworICBwdWJsaWMgdm9pZCBiYXIgKHZvaWQpIHsKKyAgICBhID0gMDsKKyAgfQorfTsKK19MVF9FT0YKK10sIFskMV0sIFtHT10sIFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorcGFja2FnZSBmb28KK2Z1bmMgZm9vKCkgeworfQorX0xUX0VPRgorXSkKKworX2x0X2xpYmRlcHNfc2F2ZV9DRkxBR1M9JENGTEFHUworY2FzZSAiJENDICRDRkxBR1MgIiBpbiAjKAorKlwgLWZsdG8qXCAqKSBDRkxBR1M9IiRDRkxBR1MgLWZuby1sdG8iIDs7CisqXCAtZndob3ByKlwgKikgQ0ZMQUdTPSIkQ0ZMQUdTIC1mbm8td2hvcHIiIDs7CisqXCAtZnVzZS1saW5rZXItcGx1Z2luKlwgKikgQ0ZMQUdTPSIkQ0ZMQUdTIC1mbm8tdXNlLWxpbmtlci1wbHVnaW4iIDs7Citlc2FjCisKK2RubCBQYXJzZSB0aGUgY29tcGlsZXIgb3V0cHV0IGFuZCBleHRyYWN0IHRoZSBuZWNlc3NhcnkKK2RubCBvYmplY3RzLCBsaWJyYXJpZXMgYW5kIGxpYnJhcnkgZmxhZ3MuCitpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorICAjIFBhcnNlIHRoZSBjb21waWxlciBvdXRwdXQgYW5kIGV4dHJhY3QgdGhlIG5lY2Vzc2FyeQorICAjIG9iamVjdHMsIGxpYnJhcmllcyBhbmQgbGlicmFyeSBmbGFncy4KKworICAjIFNlbnRpbmVsIHVzZWQgdG8ga2VlcCB0cmFjayBvZiB3aGV0aGVyIG9yIG5vdCB3ZSBhcmUgYmVmb3JlCisgICMgdGhlIGNvbmZ0ZXN0IG9iamVjdCBmaWxlLgorICBwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lPW5vCisKKyAgZm9yIHAgaW4gYGV2YWwgIiRvdXRwdXRfdmVyYm9zZV9saW5rX2NtZCJgOyBkbworICAgIGNhc2UgJHtwcmV2fSR7cH0gaW4KKworICAgIC1MKiB8IC1SKiB8IC1sKikKKyAgICAgICAjIFNvbWUgY29tcGlsZXJzIHBsYWNlIHNwYWNlIGJldHdlZW4gIi17TCxSfSIgYW5kIHRoZSBwYXRoLgorICAgICAgICMgUmVtb3ZlIHRoZSBzcGFjZS4KKyAgICAgICBpZiB0ZXN0ICRwID0gIi1MIiB8fAorICAgICAgICAgIHRlc3QgJHAgPSAiLVIiOyB0aGVuCisJIHByZXY9JHAKKwkgY29udGludWUKKyAgICAgICBmaQorCisgICAgICAgIyBFeHBhbmQgdGhlIHN5c3Jvb3QgdG8gZWFzZSBleHRyYWN0aW5nIHRoZSBkaXJlY3RvcmllcyBsYXRlci4KKyAgICAgICBpZiB0ZXN0IC16ICIkcHJldiI7IHRoZW4KKyAgICAgICAgIGNhc2UgJHAgaW4KKyAgICAgICAgIC1MKikgZnVuY19zdHJpcG5hbWVfY25mICctTCcgJycgIiRwIjsgcHJldj0tTDsgcD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CisgICAgICAgICAtUiopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnLVInICcnICIkcCI7IHByZXY9LVI7IHA9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworICAgICAgICAgLWwqKSBmdW5jX3N0cmlwbmFtZV9jbmYgJy1sJyAnJyAiJHAiOyBwcmV2PS1sOyBwPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKyAgICAgICAgIGVzYWMKKyAgICAgICBmaQorICAgICAgIGNhc2UgJHAgaW4KKyAgICAgICA9KikgZnVuY19zdHJpcG5hbWVfY25mICc9JyAnJyAiJHAiOyBwPSRsdF9zeXNyb290JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworICAgICAgIGVzYWMKKyAgICAgICBpZiB0ZXN0ICIkcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZSIgPSBubzsgdGhlbgorCSBjYXNlICR7cHJldn0gaW4KKwkgLUwgfCAtUikKKwkgICAjIEludGVybmFsIGNvbXBpbGVyIGxpYnJhcnkgcGF0aHMgc2hvdWxkIGNvbWUgYWZ0ZXIgdGhvc2UKKwkgICAjIHByb3ZpZGVkIHRoZSB1c2VyLiAgVGhlIHBvc3RkZXBzIGFscmVhZHkgY29tZSBhZnRlciB0aGUKKwkgICAjIHVzZXIgc3VwcGxpZWQgbGlicyBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIHByb2Nlc3MgdGhlbS4KKwkgICBpZiB0ZXN0IC16ICIkX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKSI7IHRoZW4KKwkgICAgIF9MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSk9IiR7cHJldn0ke3B9IgorCSAgIGVsc2UKKwkgICAgIF9MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSk9IiR7X0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKX0gJHtwcmV2fSR7cH0iCisJICAgZmkKKwkgICA7OworCSAjIFRoZSAiLWwiIGNhc2Ugd291bGQgbmV2ZXIgY29tZSBiZWZvcmUgdGhlIG9iamVjdCBiZWluZworCSAjIGxpbmtlZCwgc28gZG9uJ3QgYm90aGVyIGhhbmRsaW5nIHRoaXMgY2FzZS4KKwkgZXNhYworICAgICAgIGVsc2UKKwkgaWYgdGVzdCAteiAiJF9MVF9UQUdWQVIocG9zdGRlcHMsICQxKSI7IHRoZW4KKwkgICBfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSk9IiR7cHJldn0ke3B9IgorCSBlbHNlCisJICAgX0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpPSIke19MVF9UQUdWQVIocG9zdGRlcHMsICQxKX0gJHtwcmV2fSR7cH0iCisJIGZpCisgICAgICAgZmkKKyAgICAgICBwcmV2PQorICAgICAgIDs7CisKKyAgICAqLmx0by4kb2JqZXh0KSA7OyAjIElnbm9yZSBHQ0MgTFRPIG9iamVjdHMKKyAgICAqLiRvYmpleHQpCisgICAgICAgIyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdGVzdCBvYmplY3QgZmlsZSBvbmx5IHNob3dzIHVwCisgICAgICAgIyBvbmNlIGluIHRoZSBjb21waWxlciBvdXRwdXQuCisgICAgICAgaWYgdGVzdCAiJHAiID0gImNvbmZ0ZXN0LiRvYmpleHQiOyB0aGVuCisJIHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmU9eWVzCisJIGNvbnRpbnVlCisgICAgICAgZmkKKworICAgICAgIGlmIHRlc3QgIiRwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lIiA9IG5vOyB0aGVuCisJIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSkiOyB0aGVuCisJICAgX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpPSIkcCIKKwkgZWxzZQorCSAgIF9MVF9UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKT0iJF9MVF9UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKSAkcCIKKwkgZmkKKyAgICAgICBlbHNlCisJIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpIjsgdGhlbgorCSAgIF9MVF9UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSk9IiRwIgorCSBlbHNlCisJICAgX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKT0iJF9MVF9UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSkgJHAiCisJIGZpCisgICAgICAgZmkKKyAgICAgICA7OworCisgICAgKikgOzsgIyBJZ25vcmUgdGhlIHJlc3QuCisKKyAgICBlc2FjCisgIGRvbmUKKworICAjIENsZWFuIHVwLgorICBybSAtZiBhLm91dCBhLmV4ZQorZWxzZQorICBlY2hvICJsaWJ0b29sLm00OiBlcnJvcjogcHJvYmxlbSBjb21waWxpbmcgJDEgdGVzdCBwcm9ncmFtIgorZmkKKworJFJNIC1mIGNvbmZlc3QuJG9iamV4dAorQ0ZMQUdTPSRfbHRfbGliZGVwc19zYXZlX0NGTEFHUworCisjIFBPUlRNRTogb3ZlcnJpZGUgYWJvdmUgdGVzdCBvbiBzeXN0ZW1zIHdoZXJlIGl0IGlzIGJyb2tlbgorbTRfaWYoWyQxXSwgW0NYWF0sCitbY2FzZSAkaG9zdF9vcyBpbgoraW50ZXJpeFtbMy05XV0qKQorICAjIEludGVyaXggMy41IGluc3RhbGxzIGNvbXBsZXRlbHkgaG9zZWQgLmxhIGZpbGVzIGZvciBDKyssIHNvIHJhdGhlciB0aGFuCisgICMgaGFjayBhbGwgYXJvdW5kIGl0LCBsZXQncyBqdXN0IHRydXN0ICJnKysiIHRvIERUUlQuCisgIF9MVF9UQUdWQVIocHJlZGVwX29iamVjdHMsJDEpPQorICBfTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywkMSk9CisgIF9MVF9UQUdWQVIocG9zdGRlcHMsJDEpPQorICA7OworCitsaW51eCopCisgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorICAqU3VuXCBDKikKKyAgICAjIFN1biBDKysgNS45CisKKyAgICAjIFRoZSBtb3JlIHN0YW5kYXJkcy1jb25mb3JtaW5nIHN0bHBvcnQ0IGxpYnJhcnkgaXMKKyAgICAjIGluY29tcGF0aWJsZSB3aXRoIHRoZSBDc3RkIGxpYnJhcnkuIEF2b2lkIHNwZWNpZnlpbmcKKyAgICAjIGl0IGlmIGl0J3MgaW4gQ1hYRkxBR1MuIElnbm9yZSBsaWJDcnVuIGFzCisgICAgIyAtbGlicmFyeT1zdGxwb3J0NCBkZXBlbmRzIG9uIGl0LgorICAgIGNhc2UgIiAkQ1hYICRDWFhGTEFHUyAiIGluCisgICAgKiIgLWxpYnJhcnk9c3RscG9ydDQgIiopCisgICAgICBzb2xhcmlzX3VzZV9zdGxwb3J0ND15ZXMKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgaWYgdGVzdCAiJHNvbGFyaXNfdXNlX3N0bHBvcnQ0IiAhPSB5ZXM7IHRoZW4KKyAgICAgIF9MVF9UQUdWQVIocG9zdGRlcHMsJDEpPSctbGlicmFyeT1Dc3RkIC1saWJyYXJ5PUNydW4nCisgICAgZmkKKyAgICA7OworICBlc2FjCisgIDs7CisKK3NvbGFyaXMqKQorICBjYXNlICRjY19iYXNlbmFtZSBpbgorICBDQyogfCBzdW5DQyopCisgICAgIyBUaGUgbW9yZSBzdGFuZGFyZHMtY29uZm9ybWluZyBzdGxwb3J0NCBsaWJyYXJ5IGlzCisgICAgIyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgQ3N0ZCBsaWJyYXJ5LiBBdm9pZCBzcGVjaWZ5aW5nCisgICAgIyBpdCBpZiBpdCdzIGluIENYWEZMQUdTLiBJZ25vcmUgbGliQ3J1biBhcworICAgICMgLWxpYnJhcnk9c3RscG9ydDQgZGVwZW5kcyBvbiBpdC4KKyAgICBjYXNlICIgJENYWCAkQ1hYRkxBR1MgIiBpbgorICAgICoiIC1saWJyYXJ5PXN0bHBvcnQ0ICIqKQorICAgICAgc29sYXJpc191c2Vfc3RscG9ydDQ9eWVzCisgICAgICA7OworICAgIGVzYWMKKworICAgICMgQWRkaW5nIHRoaXMgcmVxdWlyZXMgYSBrbm93bi1nb29kIHNldHVwIG9mIHNoYXJlZCBsaWJyYXJpZXMgZm9yCisgICAgIyBTdW4gY29tcGlsZXIgdmVyc2lvbnMgYmVmb3JlIDUuNiwgZWxzZSBQSUMgb2JqZWN0cyBmcm9tIGFuIG9sZAorICAgICMgYXJjaGl2ZSB3aWxsIGJlIGxpbmtlZCBpbnRvIHRoZSBvdXRwdXQsIGxlYWRpbmcgdG8gc3VidGxlIGJ1Z3MuCisgICAgaWYgdGVzdCAiJHNvbGFyaXNfdXNlX3N0bHBvcnQ0IiAhPSB5ZXM7IHRoZW4KKyAgICAgIF9MVF9UQUdWQVIocG9zdGRlcHMsJDEpPSctbGlicmFyeT1Dc3RkIC1saWJyYXJ5PUNydW4nCisgICAgZmkKKyAgICA7OworICBlc2FjCisgIDs7Citlc2FjCitdKQorCitjYXNlICIgJF9MVF9UQUdWQVIocG9zdGRlcHMsICQxKSAiIGluCisqIiAtbGMgIiopIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubyA7OworZXNhYworIF9MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzLCAkMSk9CitpZiB0ZXN0IC1uICIke19MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSl9IjsgdGhlbgorIF9MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzLCAkMSk9YGVjaG8gIiAke19MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSl9IiB8ICR7U0VEfSAtZSAncyEgLUwhICFnJyAtZSAncyFeICEhJ2AKK2ZpCitfTFRfVEFHREVDTChbXSwgW2NvbXBpbGVyX2xpYl9zZWFyY2hfZGlyc10sIFsxXSwKKyAgICBbVGhlIGRpcmVjdG9yaWVzIHNlYXJjaGVkIGJ5IHRoaXMgY29tcGlsZXIgd2hlbiBjcmVhdGluZyBhIHNoYXJlZCBsaWJyYXJ5XSkKK19MVF9UQUdERUNMKFtdLCBbcHJlZGVwX29iamVjdHNdLCBbMV0sCisgICAgW0RlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0bworICAgIGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5XSkKK19MVF9UQUdERUNMKFtdLCBbcG9zdGRlcF9vYmplY3RzXSwgWzFdKQorX0xUX1RBR0RFQ0woW10sIFtwcmVkZXBzXSwgWzFdKQorX0xUX1RBR0RFQ0woW10sIFtwb3N0ZGVwc10sIFsxXSkKK19MVF9UQUdERUNMKFtdLCBbY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoXSwgWzFdLAorICAgIFtUaGUgbGlicmFyeSBzZWFyY2ggcGF0aCB1c2VkIGludGVybmFsbHkgYnkgdGhlIGNvbXBpbGVyIHdoZW4gbGlua2luZworICAgIGEgc2hhcmVkIGxpYnJhcnldKQorXSkjIF9MVF9TWVNfSElEREVOX0xJQkRFUFMKKworCisjIF9MVF9MQU5HX0Y3N19DT05GSUcoW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgYSBGb3J0cmFuIDc3IGNvbXBpbGVyIGFyZQorIyBzdWl0YWJseSBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHCisjIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KK200X2RlZnVuKFtfTFRfTEFOR19GNzdfQ09ORklHXSwKK1tBQ19MQU5HX1BVU0goRm9ydHJhbiA3NykKK2lmIHRlc3QgLXogIiRGNzciIHx8IHRlc3QgIlgkRjc3IiA9ICJYbm8iOyB0aGVuCisgIF9sdF9kaXNhYmxlX0Y3Nz15ZXMKK2ZpCisKK19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQorX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPW5vCitfTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPW5vCitfTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKT1ubworX0xUX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPQorX0xUX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0KK19MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXVua25vd24KK19MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCitfTFRfVEFHVkFSKHJlbG9hZF9mbGFnLCAkMSk9JHJlbG9hZF9mbGFnCitfTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSk9JHJlbG9hZF9jbWRzCitfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9CitfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT1ubworCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgZjc3IHRlc3Qgc291cmNlcy4KK2FjX2V4dD1mCisKKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBmNzcgdGVzdCBzb3VyY2VzLgorb2JqZXh0PW8KK19MVF9UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAorCisjIE5vIHNlbnNlIGluIHJ1bm5pbmcgYWxsIHRoZXNlIHRlc3RzIGlmIHdlIGFscmVhZHkgZGV0ZXJtaW5lZCB0aGF0CisjIHRoZSBGNzcgY29tcGlsZXIgaXNuJ3Qgd29ya2luZy4gIFNvbWUgdmFyaWFibGVzIChsaWtlIGVuYWJsZV9zaGFyZWQpCisjIGFyZSBjdXJyZW50bHkgYXNzdW1lZCB0byBhcHBseSB0byBhbGwgY29tcGlsZXJzIG9uIHRoaXMgcGxhdGZvcm0sCisjIGFuZCB3aWxsIGJlIGNvcnJ1cHRlZCBieSBzZXR0aW5nIHRoZW0gYmFzZWQgb24gYSBub24td29ya2luZyBjb21waWxlci4KK2lmIHRlc3QgIiRfbHRfZGlzYWJsZV9GNzciICE9IHllczsgdGhlbgorICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworICBsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9IlwKKyAgICAgIHN1YnJvdXRpbmUgdAorICAgICAgcmV0dXJuCisgICAgICBlbmQKKyIKKworICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cworICBsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9IlwKKyAgICAgIHByb2dyYW0gdAorICAgICAgZW5kCisiCisKKyAgIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorICBfTFRfVEFHX0NPTVBJTEVSCisKKyAgIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKKyAgX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCisgIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworICAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorICBsdF9zYXZlX0NDPSIkQ0MiCisgIGx0X3NhdmVfR0NDPSRHQ0MKKyAgbHRfc2F2ZV9DRkxBR1M9JENGTEFHUworICBDQz0ke0Y3Ny0iZjc3In0KKyAgQ0ZMQUdTPSRGRkxBR1MKKyAgY29tcGlsZXI9JENDCisgIF9MVF9UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKKyAgX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorICBHQ0M9JEc3NworICBpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQorICAgIEFDX01TR19SRVNVTFQoWyRjYW5fYnVpbGRfc2hhcmVkXSkKKworICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzXSkKKyAgICB0ZXN0ICIkY2FuX2J1aWxkX3NoYXJlZCIgPSAibm8iICYmIGVuYWJsZV9zaGFyZWQ9bm8KKworICAgICMgT24gQUlYLCBzaGFyZWQgbGlicmFyaWVzIGFuZCBzdGF0aWMgbGlicmFyaWVzIHVzZSB0aGUgc2FtZSBuYW1lc3BhY2UsIGFuZAorICAgICMgYXJlIGFsbCBidWlsdCBmcm9tIFBJQy4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXgzKikKKyAgICAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KKyAgICAgICAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgICAgICAgICBhcmNoaXZlX2NtZHM9IiRhcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRsaWIiCisgICAgICAgICAgcG9zdGluc3RhbGxfY21kcz0nJFJBTkxJQiAkbGliJworICAgICAgICBmaQorICAgICAgICA7OworICAgICAgYWl4W1s0LTldXSopCisJaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0ICYmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IG5vIDsgdGhlbgorCSAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KKwlmaQorICAgICAgICA7OworICAgIGVzYWMKKyAgICBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3NoYXJlZF0pCisKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllc10pCisgICAgIyBNYWtlIHN1cmUgZWl0aGVyIGVuYWJsZV9zaGFyZWQgb3IgZW5hYmxlX3N0YXRpYyBpcyB5ZXMuCisgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzIHx8IGVuYWJsZV9zdGF0aWM9eWVzCisgICAgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zdGF0aWNdKQorCisgICAgX0xUX1RBR1ZBUihHQ0MsICQxKT0iJEc3NyIKKyAgICBfTFRfVEFHVkFSKExELCAkMSk9IiRMRCIKKworICAgICMjIENBVkVBVCBFTVBUT1I6CisgICAgIyMgVGhlcmUgaXMgbm8gZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIGZvbGxvd2luZyBtYWNyb3MsIGRvIG5vdCBjaGFuZ2UKKyAgICAjIyB0aGUgcnVubmluZyBvcmRlciBvciBvdGhlcndpc2UgbW92ZSB0aGVtIGFyb3VuZCB1bmxlc3MgeW91IGtub3cgZXhhY3RseQorICAgICMjIHdoYXQgeW91IGFyZSBkb2luZy4uLgorICAgIF9MVF9DT01QSUxFUl9QSUMoJDEpCisgICAgX0xUX0NPTVBJTEVSX0NfTygkMSkKKyAgICBfTFRfQ09NUElMRVJfRklMRV9MT0NLUygkMSkKKyAgICBfTFRfTElOS0VSX1NITElCUygkMSkKKyAgICBfTFRfU1lTX0RZTkFNSUNfTElOS0VSKCQxKQorICAgIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSCgkMSkKKworICAgIF9MVF9DT05GSUcoJDEpCisgIGZpICMgdGVzdCAtbiAiJGNvbXBpbGVyIgorCisgIEdDQz0kbHRfc2F2ZV9HQ0MKKyAgQ0M9IiRsdF9zYXZlX0NDIgorICBDRkxBR1M9IiRsdF9zYXZlX0NGTEFHUyIKK2ZpICMgdGVzdCAiJF9sdF9kaXNhYmxlX0Y3NyIgIT0geWVzCisKK0FDX0xBTkdfUE9QCitdKSMgX0xUX0xBTkdfRjc3X0NPTkZJRworCisKKyMgX0xUX0xBTkdfRkNfQ09ORklHKFtUQUddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgYSBGb3J0cmFuIGNvbXBpbGVyIGFyZQorIyBzdWl0YWJseSBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHCisjIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KK200X2RlZnVuKFtfTFRfTEFOR19GQ19DT05GSUddLAorW0FDX0xBTkdfUFVTSChGb3J0cmFuKQorCitpZiB0ZXN0IC16ICIkRkMiIHx8IHRlc3QgIlgkRkMiID0gIlhubyI7IHRoZW4KKyAgX2x0X2Rpc2FibGVfRkM9eWVzCitmaQorCitfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KK19MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0KK19MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KK19MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPQorX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKT1ubworX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSk9bm8KK19MVF9UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0KK19MVF9UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT11bmtub3duCitfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0kb2xkX2FyY2hpdmVfY21kcworX0xUX1RBR1ZBUihyZWxvYWRfZmxhZywgJDEpPSRyZWxvYWRfZmxhZworX0xUX1RBR1ZBUihyZWxvYWRfY21kcywgJDEpPSRyZWxvYWRfY21kcworX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPQorX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9bm8KKworIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIGZjIHRlc3Qgc291cmNlcy4KK2FjX2V4dD0ke2FjX2ZjX3NyY2V4dC1mfQorCisjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgZmMgdGVzdCBzb3VyY2VzLgorb2JqZXh0PW8KK19MVF9UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAorCisjIE5vIHNlbnNlIGluIHJ1bm5pbmcgYWxsIHRoZXNlIHRlc3RzIGlmIHdlIGFscmVhZHkgZGV0ZXJtaW5lZCB0aGF0CisjIHRoZSBGQyBjb21waWxlciBpc24ndCB3b3JraW5nLiAgU29tZSB2YXJpYWJsZXMgKGxpa2UgZW5hYmxlX3NoYXJlZCkKKyMgYXJlIGN1cnJlbnRseSBhc3N1bWVkIHRvIGFwcGx5IHRvIGFsbCBjb21waWxlcnMgb24gdGhpcyBwbGF0Zm9ybSwKKyMgYW5kIHdpbGwgYmUgY29ycnVwdGVkIGJ5IHNldHRpbmcgdGhlbSBiYXNlZCBvbiBhIG5vbi13b3JraW5nIGNvbXBpbGVyLgoraWYgdGVzdCAiJF9sdF9kaXNhYmxlX0ZDIiAhPSB5ZXM7IHRoZW4KKyAgIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKKyAgbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJcCisgICAgICBzdWJyb3V0aW5lIHQKKyAgICAgIHJldHVybgorICAgICAgZW5kCisiCisKKyAgIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKKyAgbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSJcCisgICAgICBwcm9ncmFtIHQKKyAgICAgIGVuZAorIgorCisgICMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KKyAgX0xUX1RBR19DT01QSUxFUgorCisgICMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCisgIF9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorICBfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisKKyAgIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KKyAgbHRfc2F2ZV9DQz0iJENDIgorICBsdF9zYXZlX0dDQz0kR0NDCisgIGx0X3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKyAgQ0M9JHtGQy0iZjk1In0KKyAgQ0ZMQUdTPSRGQ0ZMQUdTCisgIGNvbXBpbGVyPSRDQworICBHQ0M9JGFjX2N2X2ZjX2NvbXBpbGVyX2dudQorCisgIF9MVF9UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKKyAgX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorCisgIGlmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllc10pCisgICAgQUNfTVNHX1JFU1VMVChbJGNhbl9idWlsZF9zaGFyZWRdKQorCisgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXNdKQorICAgIHRlc3QgIiRjYW5fYnVpbGRfc2hhcmVkIiA9ICJubyIgJiYgZW5hYmxlX3NoYXJlZD1ubworCisgICAgIyBPbiBBSVgsIHNoYXJlZCBsaWJyYXJpZXMgYW5kIHN0YXRpYyBsaWJyYXJpZXMgdXNlIHRoZSBzYW1lIG5hbWVzcGFjZSwgYW5kCisgICAgIyBhcmUgYWxsIGJ1aWx0IGZyb20gUElDLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeDMqKQorICAgICAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubworICAgICAgICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICAgICAgICAgIGFyY2hpdmVfY21kcz0iJGFyY2hpdmVfY21kc35cJFJBTkxJQiBcJGxpYiIKKyAgICAgICAgICBwb3N0aW5zdGFsbF9jbWRzPSckUkFOTElCICRsaWInCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgICBhaXhbWzQtOV1dKikKKwlpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQgJiYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0gbm8gOyB0aGVuCisJICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubworCWZpCisgICAgICAgIDs7CisgICAgZXNhYworICAgIEFDX01TR19SRVNVTFQoWyRlbmFibGVfc2hhcmVkXSkKKworICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzXSkKKyAgICAjIE1ha2Ugc3VyZSBlaXRoZXIgZW5hYmxlX3NoYXJlZCBvciBlbmFibGVfc3RhdGljIGlzIHllcy4KKyAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgfHwgZW5hYmxlX3N0YXRpYz15ZXMKKyAgICBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3N0YXRpY10pCisKKyAgICBfTFRfVEFHVkFSKEdDQywgJDEpPSIkYWNfY3ZfZmNfY29tcGlsZXJfZ251IgorICAgIF9MVF9UQUdWQVIoTEQsICQxKT0iJExEIgorCisgICAgIyMgQ0FWRUFUIEVNUFRPUjoKKyAgICAjIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQorICAgICMjIHRoZSBydW5uaW5nIG9yZGVyIG9yIG90aGVyd2lzZSBtb3ZlIHRoZW0gYXJvdW5kIHVubGVzcyB5b3Uga25vdyBleGFjdGx5CisgICAgIyMgd2hhdCB5b3UgYXJlIGRvaW5nLi4uCisgICAgX0xUX1NZU19ISURERU5fTElCREVQUygkMSkKKyAgICBfTFRfQ09NUElMRVJfUElDKCQxKQorICAgIF9MVF9DT01QSUxFUl9DX08oJDEpCisgICAgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoJDEpCisgICAgX0xUX0xJTktFUl9TSExJQlMoJDEpCisgICAgX0xUX1NZU19EWU5BTUlDX0xJTktFUigkMSkKKyAgICBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoJDEpCisKKyAgICBfTFRfQ09ORklHKCQxKQorICBmaSAjIHRlc3QgLW4gIiRjb21waWxlciIKKworICBHQ0M9JGx0X3NhdmVfR0NDCisgIENDPSRsdF9zYXZlX0NDCisgIENGTEFHUz0kbHRfc2F2ZV9DRkxBR1MKK2ZpICMgdGVzdCAiJF9sdF9kaXNhYmxlX0ZDIiAhPSB5ZXMKKworQUNfTEFOR19QT1AKK10pIyBfTFRfTEFOR19GQ19DT05GSUcKKworCisjIF9MVF9MQU5HX0dDSl9DT05GSUcoW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgdGhlIEdOVSBKYXZhIENvbXBpbGVyIGNvbXBpbGVyCisjIGFyZSBzdWl0YWJseSBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHCisjIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KK200X2RlZnVuKFtfTFRfTEFOR19HQ0pfQ09ORklHXSwKK1tBQ19SRVFVSVJFKFtMVF9QUk9HX0dDSl0pZG5sCitBQ19MQU5HX1NBVkUKKworIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIEphdmEgdGVzdCBzb3VyY2VzLgorYWNfZXh0PWphdmEKKworIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIEphdmEgdGVzdCBzb3VyY2VzLgorb2JqZXh0PW8KK19MVF9UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAorCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJjbGFzcyBmb28ge30iCisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCitsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J3B1YmxpYyBjbGFzcyBjb25mdGVzdCB7IHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tbXV0gYXJndikge307IH0nCisKKyMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KK19MVF9UQUdfQ09NUElMRVIKKworIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKK19MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorX0xUX0xJTktFUl9CT0lMRVJQTEFURQorCisjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorbHRfc2F2ZV9DQz0kQ0MKK2x0X3NhdmVfQ0ZMQUdTPSRDRkxBR1MKK2x0X3NhdmVfR0NDPSRHQ0MKK0dDQz15ZXMKK0NDPSR7R0NKLSJnY2oifQorQ0ZMQUdTPSRHQ0pGTEFHUworY29tcGlsZXI9JENDCitfTFRfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCitfTFRfVEFHVkFSKExELCAkMSk9IiRMRCIKK19MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKKworIyBHQ0ogZGlkIG5vdCBleGlzdCBhdCB0aGUgdGltZSBHQ0MgZGlkbid0IGltcGxpY2l0bHkgbGluayBsaWJjIGluLgorX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisKK19MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCitfTFRfVEFHVkFSKHJlbG9hZF9mbGFnLCAkMSk9JHJlbG9hZF9mbGFnCitfTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSk9JHJlbG9hZF9jbWRzCisKKyMjIENBVkVBVCBFTVBUT1I6CisjIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQorIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKKyMjIHdoYXQgeW91IGFyZSBkb2luZy4uLgoraWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgorICBfTFRfQ09NUElMRVJfTk9fUlRUSSgkMSkKKyAgX0xUX0NPTVBJTEVSX1BJQygkMSkKKyAgX0xUX0NPTVBJTEVSX0NfTygkMSkKKyAgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoJDEpCisgIF9MVF9MSU5LRVJfU0hMSUJTKCQxKQorICBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoJDEpCisKKyAgX0xUX0NPTkZJRygkMSkKK2ZpCisKK0FDX0xBTkdfUkVTVE9SRQorCitHQ0M9JGx0X3NhdmVfR0NDCitDQz0kbHRfc2F2ZV9DQworQ0ZMQUdTPSRsdF9zYXZlX0NGTEFHUworXSkjIF9MVF9MQU5HX0dDSl9DT05GSUcKKworCisjIF9MVF9MQU5HX0dPX0NPTkZJRyhbVEFHXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciB0aGUgR05VIEdvIGNvbXBpbGVyCisjIGFyZSBzdWl0YWJseSBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHCisjIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KK200X2RlZnVuKFtfTFRfTEFOR19HT19DT05GSUddLAorW0FDX1JFUVVJUkUoW0xUX1BST0dfR09dKWRubAorQUNfTEFOR19TQVZFCisKKyMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBHbyB0ZXN0IHNvdXJjZXMuCithY19leHQ9Z28KKworIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIEdvIHRlc3Qgc291cmNlcy4KK29iamV4dD1vCitfTFRfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKK2x0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0icGFja2FnZSBtYWluOyBmdW5jIG1haW4oKSB7IH0iCisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCitsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J3BhY2thZ2UgbWFpbjsgZnVuYyBtYWluKCkgeyB9JworCisjIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCitfTFRfVEFHX0NPTVBJTEVSCisKKyMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCitfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKK19MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KK2x0X3NhdmVfQ0M9JENDCitsdF9zYXZlX0NGTEFHUz0kQ0ZMQUdTCitsdF9zYXZlX0dDQz0kR0NDCitHQ0M9eWVzCitDQz0ke0dPQy0iZ2NjZ28ifQorQ0ZMQUdTPSRHT0ZMQUdTCitjb21waWxlcj0kQ0MKK19MVF9UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKK19MVF9UQUdWQVIoTEQsICQxKT0iJExEIgorX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorCisjIEdvIGRpZCBub3QgZXhpc3QgYXQgdGhlIHRpbWUgR0NDIGRpZG4ndCBpbXBsaWNpdGx5IGxpbmsgbGliYyBpbi4KK19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworCitfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0kb2xkX2FyY2hpdmVfY21kcworX0xUX1RBR1ZBUihyZWxvYWRfZmxhZywgJDEpPSRyZWxvYWRfZmxhZworX0xUX1RBR1ZBUihyZWxvYWRfY21kcywgJDEpPSRyZWxvYWRfY21kcworCisjIyBDQVZFQVQgRU1QVE9SOgorIyMgVGhlcmUgaXMgbm8gZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIGZvbGxvd2luZyBtYWNyb3MsIGRvIG5vdCBjaGFuZ2UKKyMjIHRoZSBydW5uaW5nIG9yZGVyIG9yIG90aGVyd2lzZSBtb3ZlIHRoZW0gYXJvdW5kIHVubGVzcyB5b3Uga25vdyBleGFjdGx5CisjIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KK2lmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KKyAgX0xUX0NPTVBJTEVSX05PX1JUVEkoJDEpCisgIF9MVF9DT01QSUxFUl9QSUMoJDEpCisgIF9MVF9DT01QSUxFUl9DX08oJDEpCisgIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTKCQxKQorICBfTFRfTElOS0VSX1NITElCUygkMSkKKyAgX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRIKCQxKQorCisgIF9MVF9DT05GSUcoJDEpCitmaQorCitBQ19MQU5HX1JFU1RPUkUKKworR0NDPSRsdF9zYXZlX0dDQworQ0M9JGx0X3NhdmVfQ0MKK0NGTEFHUz0kbHRfc2F2ZV9DRkxBR1MKK10pIyBfTFRfTEFOR19HT19DT05GSUcKKworCisjIF9MVF9MQU5HX1JDX0NPTkZJRyhbVEFHXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZm9yIHRoZSBXaW5kb3dzIHJlc291cmNlIGNvbXBpbGVyCisjIGFyZSBzdWl0YWJseSBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHCisjIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KK200X2RlZnVuKFtfTFRfTEFOR19SQ19DT05GSUddLAorW0FDX1JFUVVJUkUoW0xUX1BST0dfUkNdKWRubAorQUNfTEFOR19TQVZFCisKKyMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBSQyB0ZXN0IHNvdXJjZXMuCithY19leHQ9cmMKKworIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIFJDIHRlc3Qgc291cmNlcy4KK29iamV4dD1vCitfTFRfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKK2x0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0nc2FtcGxlIE1FTlUgeyBNRU5VSVRFTSAiJlNvdXAiLCAxMDAsIENIRUNLRUQgfScKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKK2x0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0iJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIKKworIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorX0xUX1RBR19DT01QSUxFUgorCisjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCitfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisKKyMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCitsdF9zYXZlX0NDPSIkQ0MiCitsdF9zYXZlX0NGTEFHUz0kQ0ZMQUdTCitsdF9zYXZlX0dDQz0kR0NDCitHQ0M9CitDQz0ke1JDLSJ3aW5kcmVzIn0KK0NGTEFHUz0KK2NvbXBpbGVyPSRDQworX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpPXllcworCitpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisgIDoKKyAgX0xUX0NPTkZJRygkMSkKK2ZpCisKK0dDQz0kbHRfc2F2ZV9HQ0MKK0FDX0xBTkdfUkVTVE9SRQorQ0M9JGx0X3NhdmVfQ0MKK0NGTEFHUz0kbHRfc2F2ZV9DRkxBR1MKK10pIyBfTFRfTEFOR19SQ19DT05GSUcKKworCisjIExUX1BST0dfR0NKCisjIC0tLS0tLS0tLS0tCitBQ19ERUZVTihbTFRfUFJPR19HQ0pdLAorW200X2lmZGVmKFtBQ19QUk9HX0dDSl0sIFtBQ19QUk9HX0dDSl0sCisgIFttNF9pZmRlZihbQV1bTV9QUk9HX0dDSl0sIFtBXVtNX1BST0dfR0NKXSwKKyAgICBbQUNfQ0hFQ0tfVE9PTChHQ0osIGdjaiwpCisgICAgICB0ZXN0ICJ4JHtHQ0pGTEFHUytzZXR9IiA9IHhzZXQgfHwgR0NKRkxBR1M9Ii1nIC1PMiIKKyAgICAgIEFDX1NVQlNUKEdDSkZMQUdTKV0pXSlbXWRubAorXSkKKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtMVF9BQ19QUk9HX0dDSl0sIFtMVF9QUk9HX0dDSl0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0xUX0FDX1BST0dfR0NKXSwgW10pCisKKworIyBMVF9QUk9HX0dPCisjIC0tLS0tLS0tLS0KK0FDX0RFRlVOKFtMVF9QUk9HX0dPXSwKK1tBQ19DSEVDS19UT09MKEdPQywgZ2NjZ28sKQorXSkKKworCisjIExUX1BST0dfUkMKKyMgLS0tLS0tLS0tLQorQUNfREVGVU4oW0xUX1BST0dfUkNdLAorW0FDX0NIRUNLX1RPT0woUkMsIHdpbmRyZXMsKQorXSkKKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtMVF9BQ19QUk9HX1JDXSwgW0xUX1BST0dfUkNdKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtMVF9BQ19QUk9HX1JDXSwgW10pCisKKworIyBfTFRfREVDTF9FR1JFUAorIyAtLS0tLS0tLS0tLS0tLQorIyBJZiB3ZSBkb24ndCBoYXZlIGEgbmV3IGVub3VnaCBBdXRvY29uZiB0byBjaG9vc2UgdGhlIGJlc3QgZ3JlcAorIyBhdmFpbGFibGUsIGNob29zZSB0aGUgb25lIGZpcnN0IGluIHRoZSB1c2VyJ3MgUEFUSC4KK200X2RlZnVuKFtfTFRfREVDTF9FR1JFUF0sCitbQUNfUkVRVUlSRShbQUNfUFJPR19FR1JFUF0pZG5sCitBQ19SRVFVSVJFKFtBQ19QUk9HX0ZHUkVQXSlkbmwKK3Rlc3QgLXogIiRHUkVQIiAmJiBHUkVQPWdyZXAKK19MVF9ERUNMKFtdLCBbR1JFUF0sIFsxXSwgW0EgZ3JlcCBwcm9ncmFtIHRoYXQgaGFuZGxlcyBsb25nIGxpbmVzXSkKK19MVF9ERUNMKFtdLCBbRUdSRVBdLCBbMV0sIFtBbiBFUkUgbWF0Y2hlcl0pCitfTFRfREVDTChbXSwgW0ZHUkVQXSwgWzFdLCBbQSBsaXRlcmFsIHN0cmluZyBtYXRjaGVyXSkKK2RubCBOb24tYmxlZWRpbmctZWRnZSBhdXRvY29uZiBkb2Vzbid0IHN1YnN0IEdSRVAsIHNvIGRvIGl0IGhlcmUgdG9vCitBQ19TVUJTVChbR1JFUF0pCitdKQorCisKKyMgX0xUX0RFQ0xfT0JKRFVNUAorIyAtLS0tLS0tLS0tLS0tLQorIyBJZiB3ZSBkb24ndCBoYXZlIGEgbmV3IGVub3VnaCBBdXRvY29uZiB0byBjaG9vc2UgdGhlIGJlc3Qgb2JqZHVtcAorIyBhdmFpbGFibGUsIGNob29zZSB0aGUgb25lIGZpcnN0IGluIHRoZSB1c2VyJ3MgUEFUSC4KK200X2RlZnVuKFtfTFRfREVDTF9PQkpEVU1QXSwKK1tBQ19DSEVDS19UT09MKE9CSkRVTVAsIG9iamR1bXAsIGZhbHNlKQordGVzdCAteiAiJE9CSkRVTVAiICYmIE9CSkRVTVA9b2JqZHVtcAorX0xUX0RFQ0woW10sIFtPQkpEVU1QXSwgWzFdLCBbQW4gb2JqZWN0IHN5bWJvbCBkdW1wZXJdKQorQUNfU1VCU1QoW09CSkRVTVBdKQorXSkKKworIyBfTFRfREVDTF9ETExUT09MCisjIC0tLS0tLS0tLS0tLS0tLS0KKyMgRW5zdXJlIERMTFRPT0wgdmFyaWFibGUgaXMgc2V0LgorbTRfZGVmdW4oW19MVF9ERUNMX0RMTFRPT0xdLAorW0FDX0NIRUNLX1RPT0woRExMVE9PTCwgZGxsdG9vbCwgZmFsc2UpCit0ZXN0IC16ICIkRExMVE9PTCIgJiYgRExMVE9PTD1kbGx0b29sCitfTFRfREVDTChbXSwgW0RMTFRPT0xdLCBbMV0sIFtETEwgY3JlYXRpb24gcHJvZ3JhbV0pCitBQ19TVUJTVChbRExMVE9PTF0pCitdKQorCisjIF9MVF9ERUNMX1NFRAorIyAtLS0tLS0tLS0tLS0KKyMgQ2hlY2sgZm9yIGEgZnVsbHktZnVuY3Rpb25hbCBzZWQgcHJvZ3JhbSwgdGhhdCB0cnVuY2F0ZXMKKyMgYXMgZmV3IGNoYXJhY3RlcnMgYXMgcG9zc2libGUuICBQcmVmZXIgR05VIHNlZCBpZiBmb3VuZC4KK200X2RlZnVuKFtfTFRfREVDTF9TRURdLAorW0FDX1BST0dfU0VECit0ZXN0IC16ICIkU0VEIiAmJiBTRUQ9c2VkCitYc2VkPSIkU0VEIC1lIDFzL15YLy8iCitfTFRfREVDTChbXSwgW1NFRF0sIFsxXSwgW0Egc2VkIHByb2dyYW0gdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXRdKQorX0xUX0RFQ0woW10sIFtYc2VkXSwgWyJcJFNFRCAtZSAxcy9eWC8vIl0sCisgICAgW1NlZCB0aGF0IGhlbHBzIHVzIGF2b2lkIGFjY2lkZW50YWxseSB0cmlnZ2VyaW5nIGVjaG8oMSkgb3B0aW9ucyBsaWtlIC1uXSkKK10pIyBfTFRfREVDTF9TRUQKKworbTRfaWZuZGVmKFtBQ19QUk9HX1NFRF0sIFsKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBOT1RFOiBUaGlzIG1hY3JvIGhhcyBiZWVuIHN1Ym1pdHRlZCBmb3IgaW5jbHVzaW9uIGludG8gICAjCisjICBHTlUgQXV0b2NvbmYgYXMgQUNfUFJPR19TRUQuICBXaGVuIGl0IGlzIGF2YWlsYWJsZSBpbiAgICMKKyMgIGEgcmVsZWFzZWQgdmVyc2lvbiBvZiBBdXRvY29uZiB3ZSBzaG91bGQgcmVtb3ZlIHRoaXMgICAgIworIyAgbWFjcm8gYW5kIHVzZSBpdCBpbnN0ZWFkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworbTRfZGVmdW4oW0FDX1BST0dfU0VEXSwKK1tBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBhIHNlZCB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dF0pCitBQ19DQUNIRV9WQUwobHRfY3ZfcGF0aF9TRUQsCitbIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBzZWQgYW5kIGdzZWQuCisjIFRoZW4gdXNlIHRoYXQgbGlzdCBvZiBzZWQncyBhcyBvbmVzIHRvIHRlc3QgZm9yIHRydW5jYXRpb24uCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgIGZvciBsdF9hY19wcm9nIGluIHNlZCBnc2VkOyBkbworICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgICAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kbHRfYWNfcHJvZyRhY19leGVjX2V4dCI7IHRoZW4KKyAgICAgICAgbHRfYWNfc2VkX2xpc3Q9IiRsdF9hY19zZWRfbGlzdCAkYXNfZGlyLyRsdF9hY19wcm9nJGFjX2V4ZWNfZXh0IgorICAgICAgZmkKKyAgICBkb25lCisgIGRvbmUKK2RvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKK2x0X2FjX21heD0wCitsdF9hY19jb3VudD0wCisjIEFkZCAvdXNyL3hwZzQvYmluL3NlZCBhcyBpdCBpcyB0eXBpY2FsbHkgZm91bmQgb24gU29sYXJpcworIyBhbG9uZyB3aXRoIC9iaW4vc2VkIHRoYXQgdHJ1bmNhdGVzIG91dHB1dC4KK2ZvciBsdF9hY19zZWQgaW4gJGx0X2FjX3NlZF9saXN0IC91c3IveHBnNC9iaW4vc2VkOyBkbworICB0ZXN0ICEgLWYgJGx0X2FjX3NlZCAmJiBjb250aW51ZQorICBjYXQgL2Rldi9udWxsID4gY29uZnRlc3QuaW4KKyAgbHRfYWNfY291bnQ9MAorICBlY2hvICRFQ0hPX04gIjAxMjM0NTY3ODkkRUNIT19DIiA+Y29uZnRlc3QuaW4KKyAgIyBDaGVjayBmb3IgR05VIHNlZCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgorICBpZiAiJGx0X2FjX3NlZCIgLS12ZXJzaW9uIDI+JjEgPCAvZGV2L251bGwgfCBncmVwICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCisgICAgbHRfY3ZfcGF0aF9TRUQ9JGx0X2FjX3NlZAorICAgIGJyZWFrCisgIGZpCisgIHdoaWxlIHRydWU7IGRvCisgICAgY2F0IGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LmluID5jb25mdGVzdC50bXAKKyAgICBtdiBjb25mdGVzdC50bXAgY29uZnRlc3QuaW4KKyAgICBjcCBjb25mdGVzdC5pbiBjb25mdGVzdC5ubAorICAgIGVjaG8gPj5jb25mdGVzdC5ubAorICAgICRsdF9hY19zZWQgLWUgJ3MvYSQvLycgPCBjb25mdGVzdC5ubCA+Y29uZnRlc3Qub3V0IHx8IGJyZWFrCisgICAgY21wIC1zIGNvbmZ0ZXN0Lm91dCBjb25mdGVzdC5ubCB8fCBicmVhaworICAgICMgMTAwMDAgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAorICAgIHRlc3QgJGx0X2FjX2NvdW50IC1ndCAxMCAmJiBicmVhaworICAgIGx0X2FjX2NvdW50PWBleHByICRsdF9hY19jb3VudCArIDFgCisgICAgaWYgdGVzdCAkbHRfYWNfY291bnQgLWd0ICRsdF9hY19tYXg7IHRoZW4KKyAgICAgIGx0X2FjX21heD0kbHRfYWNfY291bnQKKyAgICAgIGx0X2N2X3BhdGhfU0VEPSRsdF9hY19zZWQKKyAgICBmaQorICBkb25lCitkb25lCitdKQorU0VEPSRsdF9jdl9wYXRoX1NFRAorQUNfU1VCU1QoW1NFRF0pCitBQ19NU0dfUkVTVUxUKFskU0VEXSkKK10pI0FDX1BST0dfU0VECitdKSNtNF9pZm5kZWYKKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtMVF9BQ19QUk9HX1NFRF0sIFtBQ19QUk9HX1NFRF0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0xUX0FDX1BST0dfU0VEXSwgW10pCisKKworIyBfTFRfQ0hFQ0tfU0hFTExfRkVBVFVSRVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZpbmQgb3V0IHdoZXRoZXIgdGhlIHNoZWxsIGlzIEJvdXJuZSBvciBYU0kgY29tcGF0aWJsZSwKKyMgb3IgaGFzIHNvbWUgb3RoZXIgdXNlZnVsIGZlYXR1cmVzLgorbTRfZGVmdW4oW19MVF9DSEVDS19TSEVMTF9GRUFUVVJFU10sCitbQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBzb21lIFhTSSBjb25zdHJ1Y3RzXSkKKyMgVHJ5IHNvbWUgWFNJIGZlYXR1cmVzCit4c2lfc2hlbGw9bm8KKyggX2x0X2R1bW15PSJhL2IvYyIKKyAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sJHtfbHRfZHVtbXkjPz99IiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKKyAgICAgID0gYyxhL2IsYi9jLCBcCisgICAgJiYgZXZhbCAndGVzdCAkKCggMSArIDEgKSkgLWVxIDIgXAorICAgICYmIHRlc3QgIiR7I19sdF9kdW1teX0iIC1lcSA1JyApID4vZGV2L251bGwgMj4mMSBcCisgICYmIHhzaV9zaGVsbD15ZXMKK0FDX01TR19SRVNVTFQoWyR4c2lfc2hlbGxdKQorX0xUX0NPTkZJR19MSUJUT09MX0lOSVQoW3hzaV9zaGVsbD0nJHhzaV9zaGVsbCddKQorCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzICIrPSJdKQorbHRfc2hlbGxfYXBwZW5kPW5vCisoIGZvbz1iYXI7IHNldCBmb28gYmF6OyBldmFsICIkWzFdKz1cJFsyXSIgJiYgdGVzdCAiJGZvbyIgPSBiYXJiYXogKSBcCisgICAgPi9kZXYvbnVsbCAyPiYxIFwKKyAgJiYgbHRfc2hlbGxfYXBwZW5kPXllcworQUNfTVNHX1JFU1VMVChbJGx0X3NoZWxsX2FwcGVuZF0pCitfTFRfQ09ORklHX0xJQlRPT0xfSU5JVChbbHRfc2hlbGxfYXBwZW5kPSckbHRfc2hlbGxfYXBwZW5kJ10pCisKK2lmICggKE1BSUw9NjA7IHVuc2V0IE1BSUwpIHx8IGV4aXQpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBsdF91bnNldD11bnNldAorZWxzZQorICBsdF91bnNldD1mYWxzZQorZmkKK19MVF9ERUNMKFtdLCBbbHRfdW5zZXRdLCBbMF0sIFt3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyAidW5zZXQiXSlkbmwKKworIyB0ZXN0IEVCQ0RJQyBvciBBU0NJSQorY2FzZSBgZWNobyBYfHRyIFggJ1wxMDEnYCBpbgorIEEpICMgQVNDSUkgYmFzZWQgc3lzdGVtCisgICAgIyBcbiBpcyBub3QgaW50ZXJwcmV0ZWQgY29ycmVjdGx5IGJ5IFNvbGFyaXMgOCAvdXNyL3VjYi90cgorICBsdF9TUDJOTD0ndHIgXDA0MCBcMDEyJworICBsdF9OTDJTUD0ndHIgXDAxNVwwMTIgXDA0MFwwNDAnCisgIDs7CisgKikgIyBFQkNESUMgYmFzZWQgc3lzdGVtCisgIGx0X1NQMk5MPSd0ciBcMTAwIFxuJworICBsdF9OTDJTUD0ndHIgXHJcbiBcMTAwXDEwMCcKKyAgOzsKK2VzYWMKK19MVF9ERUNMKFtTUDJOTF0sIFtsdF9TUDJOTF0sIFsxXSwgW3R1cm4gc3BhY2VzIGludG8gbmV3bGluZXNdKWRubAorX0xUX0RFQ0woW05MMlNQXSwgW2x0X05MMlNQXSwgWzFdLCBbdHVybiBuZXdsaW5lcyBpbnRvIHNwYWNlc10pZG5sCitdKSMgX0xUX0NIRUNLX1NIRUxMX0ZFQVRVUkVTCisKKworIyBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFIChGVU5DTkFNRSwgUkVQTEFDRU1FTlQtQk9EWSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEluIGAkY2ZnZmlsZScsIGxvb2sgZm9yIGZ1bmN0aW9uIEZVTkNOQU1FIGRlbGltaXRlZCBieSBgXkZVTkNOQU1FICgpJCcgYW5kCisjICdefSBGVU5DTkFNRSAnLCBhbmQgcmVwbGFjZSBpdHMgYm9keSB3aXRoIFJFUExBQ0VNRU5ULUJPRFkuCittNF9kZWZ1bihbX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRV0sCitbZG5sIHsKK3NlZCAtZSAnL14kMSAoKSQvLC9efSAjICQxIC9jXAorJDEgKClcCit7XAorbTRfYnBhdHN1YnN0cyhbJDJdLCBbJF0sIFtcXF0sIFteXChbCSBdXCldLCBbXFxcMV0pCit9ICMgRXh0ZW5kZWQtc2hlbGwgJDEgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQordGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKK10pCisKKworIyBfTFRfUFJPR19SRVBMQUNFX1NIRUxMRk5TCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmVwbGFjZSBleGlzdGluZyBwb3J0YWJsZSBpbXBsZW1lbnRhdGlvbnMgb2Ygc2V2ZXJhbCBzaGVsbCBmdW5jdGlvbnMgd2l0aAorIyBlcXVpdmFsZW50IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9ucyB3aGVyZSB0aG9zZSBmZWF0dXJlcyBhcmUgYXZhaWxhYmxlLi4KK200X2RlZnVuKFtfTFRfUFJPR19SRVBMQUNFX1NIRUxMRk5TXSwKK1tpZiB0ZXN0IHgiJHhzaV9zaGVsbCIgPSB4eWVzOyB0aGVuCisgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfZGlybmFtZV0sIFtkbmwKKyAgICBjYXNlICR7MX0gaW4KKyAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7CisgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7CisgICAgZXNhY10pCisKKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19iYXNlbmFtZV0sIFtkbmwKKyAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iXSkKKworICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lXSwgW2RubAorICAgIGNhc2UgJHsxfSBpbgorICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKyAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKyAgICBlc2FjCisgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99Il0pCisKKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19zdHJpcG5hbWVdLCBbZG5sCisgICAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZQorICAgICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHBhcmFtZXRlciBmaXJzdC4KKyAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHszfQorICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9CisgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0JSIkezJ9In1dKQorCisgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfc3BsaXRfbG9uZ19vcHRdLCBbZG5sCisgICAgZnVuY19zcGxpdF9sb25nX29wdF9uYW1lPSR7MSUlPSp9CisgICAgZnVuY19zcGxpdF9sb25nX29wdF9hcmc9JHsxIyo9fV0pCisKKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19zcGxpdF9zaG9ydF9vcHRdLCBbZG5sCisgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnPSR7MSM/P30KKyAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lPSR7MSUiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyJ9XSkKKworICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX2xvMm9dLCBbZG5sCisgICAgY2FzZSAkezF9IGluCisgICAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiR7b2JqZXh0fSA7OworICAgICAgKikgICAgZnVuY19sbzJvX3Jlc3VsdD0kezF9IDs7CisgICAgZXNhY10pCisKKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY194Zm9ybV0sIFsgICAgZnVuY194Zm9ybV9yZXN1bHQ9JHsxJS4qfS5sb10pCisKKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19hcml0aF0sIFsgICAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICRbKl0gKSldKQorCisgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfbGVuXSwgWyAgICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX1dKQorZmkKKworaWYgdGVzdCB4IiRsdF9zaGVsbF9hcHBlbmQiID0geHllczsgdGhlbgorICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX2FwcGVuZF0sIFsgICAgZXZhbCAiJHsxfSs9XFwkezJ9Il0pCisKKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19hcHBlbmRfcXVvdGVkXSwgW2RubAorICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiR7Mn0iCitkbmwgbTQgZXhwYW5zaW9uIHR1cm5zIFxcXFwgaW50byBcXCwgYW5kIHRoZW4gdGhlIHNoZWxsIGV2YWwgdHVybnMgdGhhdCBpbnRvIFwKKyAgICBldmFsICIkezF9Kz1cXFxcIFxcJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0Il0pCisKKyAgIyBTYXZlIGEgYGZ1bmNfYXBwZW5kJyBmdW5jdGlvbiBjYWxsIHdoZXJlIHBvc3NpYmxlIGJ5IGRpcmVjdCB1c2Ugb2YgJys9JworICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbW2EtekEtWl9dXVx7MSxcfVwpICIlXDErPSIlZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAorICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorICAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKK2Vsc2UKKyAgIyBTYXZlIGEgYGZ1bmNfYXBwZW5kJyBmdW5jdGlvbiBjYWxsIGV2ZW4gd2hlbiAnKz0nIGlzIG5vdCBhdmFpbGFibGUKKyAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW1thLXpBLVpfXV1cezEsXH1cKSAiJVwxPSIkXDElZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAorICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorICAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKK2ZpCisKK2lmIHRlc3QgeCIkX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbCIgPSB4IjoiOyB0aGVuCisgIEFDX01TR19XQVJOKFtVbmFibGUgdG8gc3Vic3RpdHV0ZSBleHRlbmRlZCBzaGVsbCBmdW5jdGlvbnMgaW4gJG9maWxlXSkKK2ZpCitdKQorCisjIF9MVF9QQVRIX0NPTlZFUlNJT05fRlVOQ1RJT05TCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIERldGVybWluZSB3aGljaCBmaWxlIG5hbWUgY29udmVyc2lvbiBmdW5jdGlvbnMgc2hvdWxkIGJlIHVzZWQgYnkKKyMgZnVuY190b19ob3N0X2ZpbGUgKGFuZCwgaW1wbGljaXRseSwgYnkgZnVuY190b19ob3N0X3BhdGgpLiAgVGhlc2UgYXJlIG5lZWRlZAorIyBmb3IgY2VydGFpbiBjcm9zcy1jb21waWxlIGNvbmZpZ3VyYXRpb25zIGFuZCBuYXRpdmUgbWluZ3cuCittNF9kZWZ1bihbX0xUX1BBVEhfQ09OVkVSU0lPTl9GVU5DVElPTlNdLAorW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKK0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9CVUlMRF0pZG5sCitBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdF0pCitBQ19DQUNIRV9WQUwobHRfY3ZfdG9faG9zdF9maWxlX2NtZCwKK1tjYXNlICRob3N0IGluCisgICotKi1taW5ndyogKQorICAgIGNhc2UgJGJ1aWxkIGluCisgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKyAgICAgICAgOzsKKyAgICAgICotKi1jeWd3aW4qICkKKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyCisgICAgICAgIDs7CisgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4CisgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMgorICAgICAgICA7OworICAgIGVzYWMKKyAgICA7OworICAqLSotY3lnd2luKiApCisgICAgY2FzZSAkYnVpbGQgaW4KKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX2N5Z3dpbgorICAgICAgICA7OworICAgICAgKi0qLWN5Z3dpbiogKQorICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKyAgICAgICAgOzsKKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luCisgICAgICAgIDs7CisgICAgZXNhYworICAgIDs7CisgICogKSAjIHVuaGFuZGxlZCBob3N0cyAoYW5kICJub3JtYWwiIG5hdGl2ZSBidWlsZHMpCisgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisgICAgOzsKK2VzYWMKK10pCit0b19ob3N0X2ZpbGVfY21kPSRsdF9jdl90b19ob3N0X2ZpbGVfY21kCitBQ19NU0dfUkVTVUxUKFskbHRfY3ZfdG9faG9zdF9maWxlX2NtZF0pCitfTFRfREVDTChbdG9faG9zdF9maWxlX2NtZF0sIFtsdF9jdl90b19ob3N0X2ZpbGVfY21kXSwKKyAgICAgICAgIFswXSwgW2NvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0XSlkbmwKKworQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byB0b29sY2hhaW4gZm9ybWF0XSkKK0FDX0NBQ0hFX1ZBTChsdF9jdl90b190b29sX2ZpbGVfY21kLAorWyNhc3N1bWUgb3JkaW5hcnkgY3Jvc3MgdG9vbHMsIG9yIG5hdGl2ZSBidWlsZC4KK2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorY2FzZSAkaG9zdCBpbgorICAqLSotbWluZ3cqICkKKyAgICBjYXNlICRidWlsZCBpbgorICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworICAgICAgICBsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisgICAgICAgIDs7CisgICAgZXNhYworICAgIDs7Citlc2FjCitdKQordG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAorQUNfTVNHX1JFU1VMVChbJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWRdKQorX0xUX0RFQ0woW3RvX3Rvb2xfZmlsZV9jbWRdLCBbbHRfY3ZfdG9fdG9vbF9maWxlX2NtZF0sCisgICAgICAgICBbMF0sIFtjb252ZXJ0ICRidWlsZCBmaWxlcyB0byB0b29sY2hhaW4gZm9ybWF0XSlkbmwKK10pIyBfTFRfUEFUSF9DT05WRVJTSU9OX0ZVTkNUSU9OUwpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2NvbW1vbi9sdG9wdGlvbnMubTQgYi9hdmFoaS0wLjYuMzEvY29tbW9uL2x0b3B0aW9ucy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDlhY2Q4Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2NvbW1vbi9sdG9wdGlvbnMubTQKQEAgLTAsMCArMSwzODQgQEAKKyMgSGVscGVyIGZ1bmN0aW9ucyBmb3Igb3B0aW9uIGhhbmRsaW5nLiAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorIworIyAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisjICAgSW5jLgorIyAgIFdyaXR0ZW4gYnkgR2FyeSBWLiBWYXVnaGFuLCAyMDA0CisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzCisjIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgNyBsdG9wdGlvbnMubTQKKworIyBUaGlzIGlzIHRvIGhlbHAgYWNsb2NhbCBmaW5kIHRoZXNlIG1hY3JvcywgYXMgaXQgY2FuJ3Qgc2VlIG00X2RlZmluZS4KK0FDX0RFRlVOKFtMVE9QVElPTlNfVkVSU0lPTl0sIFttNF9pZihbMV0pXSkKKworCisjIF9MVF9NQU5HTEVfT1BUSU9OKE1BQ1JPLU5BTUUsIE9QVElPTi1OQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbX0xUX01BTkdMRV9PUFRJT05dLAorW1tfTFRfT1BUSU9OX11tNF9icGF0c3Vic3QoJDFfXyQyLCBbW15hLXpBLVowLTlfXV0sIFtfXSldKQorCisKKyMgX0xUX1NFVF9PUFRJT04oTUFDUk8tTkFNRSwgT1BUSU9OLU5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZXQgb3B0aW9uIE9QVElPTi1OQU1FIGZvciBtYWNybyBNQUNSTy1OQU1FLCBhbmQgaWYgdGhlcmUgaXMgYQorIyBtYXRjaGluZyBoYW5kbGVyIGRlZmluZWQsIGRpc3BhdGNoIHRvIGl0LiAgT3RoZXIgT1BUSU9OLU5BTUVzIGFyZQorIyBzYXZlZCBhcyBhIGZsYWcuCittNF9kZWZpbmUoW19MVF9TRVRfT1BUSU9OXSwKK1ttNF9kZWZpbmUoX0xUX01BTkdMRV9PUFRJT04oWyQxXSwgWyQyXSkpZG5sCittNF9pZmRlZihfTFRfTUFOR0xFX0RFRlVOKFskMV0sIFskMl0pLAorICAgICAgICBfTFRfTUFOR0xFX0RFRlVOKFskMV0sIFskMl0pLAorICAgIFttNF93YXJuaW5nKFtVbmtub3duICQxIG9wdGlvbiBgJDInXSldKVtdZG5sCitdKQorCisKKyMgX0xUX0lGX09QVElPTihNQUNSTy1OQU1FLCBPUFRJT04tTkFNRSwgSUYtU0VULCBbSUYtTk9ULVNFVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFeGVjdXRlIElGLVNFVCBpZiBPUFRJT04gaXMgc2V0LCBJRi1OT1QtU0VUIG90aGVyd2lzZS4KK200X2RlZmluZShbX0xUX0lGX09QVElPTl0sCitbbTRfaWZkZWYoX0xUX01BTkdMRV9PUFRJT04oWyQxXSwgWyQyXSksIFskM10sIFskNF0pXSkKKworCisjIF9MVF9VTkxFU1NfT1BUSU9OUyhNQUNSTy1OQU1FLCBPUFRJT04tTElTVCwgSUYtTk9ULVNFVCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFeGVjdXRlIElGLU5PVC1TRVQgdW5sZXNzIGFsbCBvcHRpb25zIGluIE9QVElPTi1MSVNUIGZvciBNQUNSTy1OQU1FCisjIGFyZSBzZXQuCittNF9kZWZpbmUoW19MVF9VTkxFU1NfT1BUSU9OU10sCitbbTRfZm9yZWFjaChbX0xUX09wdGlvbl0sIG00X3NwbGl0KG00X25vcm1hbGl6ZShbJDJdKSksCisJICAgIFttNF9pZmRlZihfTFRfTUFOR0xFX09QVElPTihbJDFdLCBfTFRfT3B0aW9uKSwKKwkJICAgICAgW200X2RlZmluZShbJDBfZm91bmRdKV0pXSlbXWRubAorbTRfaWZkZWYoWyQwX2ZvdW5kXSwgW200X3VuZGVmaW5lKFskMF9mb3VuZF0pXSwgWyQzCitdKVtdZG5sCitdKQorCisKKyMgX0xUX1NFVF9PUFRJT05TKE1BQ1JPLU5BTUUsIE9QVElPTi1MSVNUKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE9QVElPTi1MSVNUIGlzIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgTGlidG9vbCBvcHRpb25zIGFzc29jaWF0ZWQKKyMgd2l0aCBNQUNSTy1OQU1FLiAgSWYgYW55IE9QVElPTiBoYXMgYSBtYXRjaGluZyBoYW5kbGVyIGRlY2xhcmVkIHdpdGgKKyMgTFRfT1BUSU9OX0RFRklORSwgZGlzcGF0Y2ggdG8gdGhhdCBtYWNybzsgb3RoZXJ3aXNlIGNvbXBsYWluIGFib3V0CisjIHRoZSB1bmtub3duIG9wdGlvbiBhbmQgZXhpdC4KK200X2RlZnVuKFtfTFRfU0VUX09QVElPTlNdLAorWyMgU2V0IG9wdGlvbnMKK200X2ZvcmVhY2goW19MVF9PcHRpb25dLCBtNF9zcGxpdChtNF9ub3JtYWxpemUoWyQyXSkpLAorICAgIFtfTFRfU0VUX09QVElPTihbJDFdLCBfTFRfT3B0aW9uKV0pCisKK200X2lmKFskMV0sW0xUX0lOSVRdLFsKKyAgZG5sCisgIGRubCBTaW1wbHkgc2V0IHNvbWUgZGVmYXVsdCB2YWx1ZXMgKGkuZSBvZmYpIGlmIGJvb2xlYW4gb3B0aW9ucyB3ZXJlIG5vdAorICBkbmwgc3BlY2lmaWVkOgorICBfTFRfVU5MRVNTX09QVElPTlMoW0xUX0lOSVRdLCBbZGxvcGVuXSwgW2VuYWJsZV9kbG9wZW49bm8KKyAgXSkKKyAgX0xUX1VOTEVTU19PUFRJT05TKFtMVF9JTklUXSwgW3dpbjMyLWRsbF0sIFtlbmFibGVfd2luMzJfZGxsPW5vCisgIF0pCisgIGRubAorICBkbmwgSWYgbm8gcmVmZXJlbmNlIHdhcyBtYWRlIHRvIHZhcmlvdXMgcGFpcnMgb2Ygb3Bwb3Npbmcgb3B0aW9ucywgdGhlbgorICBkbmwgd2UgcnVuIHRoZSBkZWZhdWx0IG1vZGUgaGFuZGxlciBmb3IgdGhlIHBhaXIuICBGb3IgZXhhbXBsZSwgaWYgbmVpdGhlcgorICBkbmwgYHNoYXJlZCcgbm9yIGBkaXNhYmxlLXNoYXJlZCcgd2FzIHBhc3NlZCwgd2UgZW5hYmxlIGJ1aWxkaW5nIG9mIHNoYXJlZAorICBkbmwgYXJjaGl2ZXMgYnkgZGVmYXVsdDoKKyAgX0xUX1VOTEVTU19PUFRJT05TKFtMVF9JTklUXSwgW3NoYXJlZCBkaXNhYmxlLXNoYXJlZF0sIFtfTFRfRU5BQkxFX1NIQVJFRF0pCisgIF9MVF9VTkxFU1NfT1BUSU9OUyhbTFRfSU5JVF0sIFtzdGF0aWMgZGlzYWJsZS1zdGF0aWNdLCBbX0xUX0VOQUJMRV9TVEFUSUNdKQorICBfTFRfVU5MRVNTX09QVElPTlMoW0xUX0lOSVRdLCBbcGljLW9ubHkgbm8tcGljXSwgW19MVF9XSVRIX1BJQ10pCisgIF9MVF9VTkxFU1NfT1BUSU9OUyhbTFRfSU5JVF0sIFtmYXN0LWluc3RhbGwgZGlzYWJsZS1mYXN0LWluc3RhbGxdLAorICAJCSAgIFtfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTF0pCisgIF0pCitdKSMgX0xUX1NFVF9PUFRJT05TCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBNYWNyb3MgdG8gaGFuZGxlIExUX0lOSVQgb3B0aW9ucy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIF9MVF9NQU5HTEVfREVGVU4oTUFDUk8tTkFNRSwgT1BUSU9OLU5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19MVF9NQU5HTEVfREVGVU5dLAorW1tfTFRfT1BUSU9OX0RFRlVOX11tNF9icGF0c3Vic3QobTRfdG91cHBlcihbJDFfXyQyXSksIFtbXkEtWjAtOV9dXSwgW19dKV0pCisKKworIyBMVF9PUFRJT05fREVGSU5FKE1BQ1JPLU5BTUUsIE9QVElPTi1OQU1FLCBDT0RFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtMVF9PUFRJT05fREVGSU5FXSwKK1ttNF9kZWZpbmUoX0xUX01BTkdMRV9ERUZVTihbJDFdLCBbJDJdKSwgWyQzXSlbXWRubAorXSkjIExUX09QVElPTl9ERUZJTkUKKworCisjIGRsb3BlbgorIyAtLS0tLS0KK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbZGxvcGVuXSwgW2VuYWJsZV9kbG9wZW49eWVzCitdKQorCitBVV9ERUZVTihbQUNfTElCVE9PTF9ETE9QRU5dLAorW19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgW2Rsb3Blbl0pCitBQ19ESUFHTk9TRShbb2Jzb2xldGVdLAorWyQwOiBSZW1vdmUgdGhpcyB3YXJuaW5nIGFuZCB0aGUgY2FsbCB0byBfTFRfU0VUX09QVElPTiB3aGVuIHlvdQorcHV0IHRoZSBgZGxvcGVuJyBvcHRpb24gaW50byBMVF9JTklUJ3MgZmlyc3QgcGFyYW1ldGVyLl0pCitdKQorCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfRExPUEVOXSwgW10pCisKKworIyB3aW4zMi1kbGwKKyMgLS0tLS0tLS0tCisjIERlY2xhcmUgcGFja2FnZSBzdXBwb3J0IGZvciBidWlsZGluZyB3aW4zMiBkbGwncy4KK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbd2luMzItZGxsXSwKK1tlbmFibGVfd2luMzJfZGxsPXllcworCitjYXNlICRob3N0IGluCisqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotY2VnY2MqKQorICBBQ19DSEVDS19UT09MKEFTLCBhcywgZmFsc2UpCisgIEFDX0NIRUNLX1RPT0woRExMVE9PTCwgZGxsdG9vbCwgZmFsc2UpCisgIEFDX0NIRUNLX1RPT0woT0JKRFVNUCwgb2JqZHVtcCwgZmFsc2UpCisgIDs7Citlc2FjCisKK3Rlc3QgLXogIiRBUyIgJiYgQVM9YXMKK19MVF9ERUNMKFtdLCBbQVNdLCAgICAgIFsxXSwgW0Fzc2VtYmxlciBwcm9ncmFtXSlkbmwKKwordGVzdCAteiAiJERMTFRPT0wiICYmIERMTFRPT0w9ZGxsdG9vbAorX0xUX0RFQ0woW10sIFtETExUT09MXSwgWzFdLCBbRExMIGNyZWF0aW9uIHByb2dyYW1dKWRubAorCit0ZXN0IC16ICIkT0JKRFVNUCIgJiYgT0JKRFVNUD1vYmpkdW1wCitfTFRfREVDTChbXSwgW09CSkRVTVBdLCBbMV0sIFtPYmplY3QgZHVtcGVyIHByb2dyYW1dKWRubAorXSkjIHdpbjMyLWRsbAorCitBVV9ERUZVTihbQUNfTElCVE9PTF9XSU4zMl9ETExdLAorW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKK19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgW3dpbjMyLWRsbF0pCitBQ19ESUFHTk9TRShbb2Jzb2xldGVdLAorWyQwOiBSZW1vdmUgdGhpcyB3YXJuaW5nIGFuZCB0aGUgY2FsbCB0byBfTFRfU0VUX09QVElPTiB3aGVuIHlvdQorcHV0IHRoZSBgd2luMzItZGxsJyBvcHRpb24gaW50byBMVF9JTklUJ3MgZmlyc3QgcGFyYW1ldGVyLl0pCitdKQorCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfV0lOMzJfRExMXSwgW10pCisKKworIyBfTFRfRU5BQkxFX1NIQVJFRChbREVGQVVMVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgaW1wbGVtZW50IHRoZSAtLWVuYWJsZS1zaGFyZWQgZmxhZywgYW5kIHN1cHBvcnRzIHRoZSBgc2hhcmVkJyBhbmQKKyMgYGRpc2FibGUtc2hhcmVkJyBMVF9JTklUIG9wdGlvbnMuCisjIERFRkFVTFQgaXMgZWl0aGVyIGB5ZXMnIG9yIGBubycuICBJZiBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBgeWVzJy4KK200X2RlZmluZShbX0xUX0VOQUJMRV9TSEFSRURdLAorW200X2RlZmluZShbX0xUX0VOQUJMRV9TSEFSRURfREVGQVVMVF0sIFttNF9pZigkMSwgbm8sIG5vLCB5ZXMpXSlkbmwKK0FDX0FSR19FTkFCTEUoW3NoYXJlZF0sCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1zaGFyZWRAPDpAPVBLR1NAOj5AXSwKKwlbYnVpbGQgc2hhcmVkIGxpYnJhcmllcyBAPDpAZGVmYXVsdD1dX0xUX0VOQUJMRV9TSEFSRURfREVGQVVMVFtAOj5AXSldLAorICAgIFtwPSR7UEFDS0FHRS1kZWZhdWx0fQorICAgIGNhc2UgJGVuYWJsZXZhbCBpbgorICAgIHllcykgZW5hYmxlX3NoYXJlZD15ZXMgOzsKKyAgICBubykgZW5hYmxlX3NoYXJlZD1ubyA7OworICAgICopCisgICAgICBlbmFibGVfc2hhcmVkPW5vCisgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisgICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKKyAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKwlJRlM9IiRsdF9zYXZlX2lmcyIKKwlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgorCSAgZW5hYmxlX3NoYXJlZD15ZXMKKwlmaQorICAgICAgZG9uZQorICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICA7OworICAgIGVzYWNdLAorICAgIFtlbmFibGVfc2hhcmVkPV1fTFRfRU5BQkxFX1NIQVJFRF9ERUZBVUxUKQorCisgICAgX0xUX0RFQ0woW2J1aWxkX2xpYnRvb2xfbGlic10sIFtlbmFibGVfc2hhcmVkXSwgWzBdLAorCVtXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzXSkKK10pIyBfTFRfRU5BQkxFX1NIQVJFRAorCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW3NoYXJlZF0sIFtfTFRfRU5BQkxFX1NIQVJFRChbeWVzXSldKQorTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtkaXNhYmxlLXNoYXJlZF0sIFtfTFRfRU5BQkxFX1NIQVJFRChbbm9dKV0pCisKKyMgT2xkIG5hbWVzOgorQUNfREVGVU4oW0FDX0VOQUJMRV9TSEFSRURdLAorW19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgbTRfaWYoWyQxXSwgW25vXSwgW2Rpc2FibGUtXSlbc2hhcmVkXSkKK10pCisKK0FDX0RFRlVOKFtBQ19ESVNBQkxFX1NIQVJFRF0sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbZGlzYWJsZS1zaGFyZWRdKQorXSkKKworQVVfREVGVU4oW0FNX0VOQUJMRV9TSEFSRURdLCBbQUNfRU5BQkxFX1NIQVJFRCgkQCldKQorQVVfREVGVU4oW0FNX0RJU0FCTEVfU0hBUkVEXSwgW0FDX0RJU0FCTEVfU0hBUkVEKCRAKV0pCisKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQU1fRU5BQkxFX1NIQVJFRF0sIFtdKQorZG5sIEFDX0RFRlVOKFtBTV9ESVNBQkxFX1NIQVJFRF0sIFtdKQorCisKKworIyBfTFRfRU5BQkxFX1NUQVRJQyhbREVGQVVMVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgaW1wbGVtZW50IHRoZSAtLWVuYWJsZS1zdGF0aWMgZmxhZywgYW5kIHN1cHBvcnQgdGhlIGBzdGF0aWMnIGFuZAorIyBgZGlzYWJsZS1zdGF0aWMnIExUX0lOSVQgb3B0aW9ucy4KKyMgREVGQVVMVCBpcyBlaXRoZXIgYHllcycgb3IgYG5vJy4gIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGB5ZXMnLgorbTRfZGVmaW5lKFtfTFRfRU5BQkxFX1NUQVRJQ10sCitbbTRfZGVmaW5lKFtfTFRfRU5BQkxFX1NUQVRJQ19ERUZBVUxUXSwgW200X2lmKCQxLCBubywgbm8sIHllcyldKWRubAorQUNfQVJHX0VOQUJMRShbc3RhdGljXSwKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXN0YXRpY0A8OkA9UEtHU0A6PkBdLAorCVtidWlsZCBzdGF0aWMgbGlicmFyaWVzIEA8OkBkZWZhdWx0PV1fTFRfRU5BQkxFX1NUQVRJQ19ERUZBVUxUW0A6PkBdKV0sCisgICAgW3A9JHtQQUNLQUdFLWRlZmF1bHR9CisgICAgY2FzZSAkZW5hYmxldmFsIGluCisgICAgeWVzKSBlbmFibGVfc3RhdGljPXllcyA7OworICAgIG5vKSBlbmFibGVfc3RhdGljPW5vIDs7CisgICAgKikKKyAgICAgZW5hYmxlX3N0YXRpYz1ubworICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgorICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCisgICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCisJSUZTPSIkbHRfc2F2ZV9pZnMiCisJaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KKwkgIGVuYWJsZV9zdGF0aWM9eWVzCisJZmkKKyAgICAgIGRvbmUKKyAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgICAgOzsKKyAgICBlc2FjXSwKKyAgICBbZW5hYmxlX3N0YXRpYz1dX0xUX0VOQUJMRV9TVEFUSUNfREVGQVVMVCkKKworICAgIF9MVF9ERUNMKFtidWlsZF9vbGRfbGlic10sIFtlbmFibGVfc3RhdGljXSwgWzBdLAorCVtXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzXSkKK10pIyBfTFRfRU5BQkxFX1NUQVRJQworCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW3N0YXRpY10sIFtfTFRfRU5BQkxFX1NUQVRJQyhbeWVzXSldKQorTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtkaXNhYmxlLXN0YXRpY10sIFtfTFRfRU5BQkxFX1NUQVRJQyhbbm9dKV0pCisKKyMgT2xkIG5hbWVzOgorQUNfREVGVU4oW0FDX0VOQUJMRV9TVEFUSUNdLAorW19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgbTRfaWYoWyQxXSwgW25vXSwgW2Rpc2FibGUtXSlbc3RhdGljXSkKK10pCisKK0FDX0RFRlVOKFtBQ19ESVNBQkxFX1NUQVRJQ10sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbZGlzYWJsZS1zdGF0aWNdKQorXSkKKworQVVfREVGVU4oW0FNX0VOQUJMRV9TVEFUSUNdLCBbQUNfRU5BQkxFX1NUQVRJQygkQCldKQorQVVfREVGVU4oW0FNX0RJU0FCTEVfU1RBVElDXSwgW0FDX0RJU0FCTEVfU1RBVElDKCRAKV0pCisKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQU1fRU5BQkxFX1NUQVRJQ10sIFtdKQorZG5sIEFDX0RFRlVOKFtBTV9ESVNBQkxFX1NUQVRJQ10sIFtdKQorCisKKworIyBfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTChbREVGQVVMVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgaW1wbGVtZW50IHRoZSAtLWVuYWJsZS1mYXN0LWluc3RhbGwgZmxhZywgYW5kIHN1cHBvcnQgdGhlIGBmYXN0LWluc3RhbGwnCisjIGFuZCBgZGlzYWJsZS1mYXN0LWluc3RhbGwnIExUX0lOSVQgb3B0aW9ucy4KKyMgREVGQVVMVCBpcyBlaXRoZXIgYHllcycgb3IgYG5vJy4gIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGB5ZXMnLgorbTRfZGVmaW5lKFtfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTF0sCitbbTRfZGVmaW5lKFtfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTF9ERUZBVUxUXSwgW200X2lmKCQxLCBubywgbm8sIHllcyldKWRubAorQUNfQVJHX0VOQUJMRShbZmFzdC1pbnN0YWxsXSwKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWZhc3QtaW5zdGFsbEA8OkA9UEtHU0A6PkBdLAorICAgIFtvcHRpbWl6ZSBmb3IgZmFzdCBpbnN0YWxsYXRpb24gQDw6QGRlZmF1bHQ9XV9MVF9FTkFCTEVfRkFTVF9JTlNUQUxMX0RFRkFVTFRbQDo+QF0pXSwKKyAgICBbcD0ke1BBQ0tBR0UtZGVmYXVsdH0KKyAgICBjYXNlICRlbmFibGV2YWwgaW4KKyAgICB5ZXMpIGVuYWJsZV9mYXN0X2luc3RhbGw9eWVzIDs7CisgICAgbm8pIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8gOzsKKyAgICAqKQorICAgICAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubworICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgorICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCisgICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCisJSUZTPSIkbHRfc2F2ZV9pZnMiCisJaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KKwkgIGVuYWJsZV9mYXN0X2luc3RhbGw9eWVzCisJZmkKKyAgICAgIGRvbmUKKyAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgICAgOzsKKyAgICBlc2FjXSwKKyAgICBbZW5hYmxlX2Zhc3RfaW5zdGFsbD1dX0xUX0VOQUJMRV9GQVNUX0lOU1RBTExfREVGQVVMVCkKKworX0xUX0RFQ0woW2Zhc3RfaW5zdGFsbF0sIFtlbmFibGVfZmFzdF9pbnN0YWxsXSwgWzBdLAorCSBbV2hldGhlciBvciBub3QgdG8gb3B0aW1pemUgZm9yIGZhc3QgaW5zdGFsbGF0aW9uXSlkbmwKK10pIyBfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTAorCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW2Zhc3QtaW5zdGFsbF0sIFtfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTChbeWVzXSldKQorTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtkaXNhYmxlLWZhc3QtaW5zdGFsbF0sIFtfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTChbbm9dKV0pCisKKyMgT2xkIG5hbWVzOgorQVVfREVGVU4oW0FDX0VOQUJMRV9GQVNUX0lOU1RBTExdLAorW19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgbTRfaWYoWyQxXSwgW25vXSwgW2Rpc2FibGUtXSlbZmFzdC1pbnN0YWxsXSkKK0FDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sCitbJDA6IFJlbW92ZSB0aGlzIHdhcm5pbmcgYW5kIHRoZSBjYWxsIHRvIF9MVF9TRVRfT1BUSU9OIHdoZW4geW91IHB1dAordGhlIGBmYXN0LWluc3RhbGwnIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKK10pCisKK0FVX0RFRlVOKFtBQ19ESVNBQkxFX0ZBU1RfSU5TVEFMTF0sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbZGlzYWJsZS1mYXN0LWluc3RhbGxdKQorQUNfRElBR05PU0UoW29ic29sZXRlXSwKK1skMDogUmVtb3ZlIHRoaXMgd2FybmluZyBhbmQgdGhlIGNhbGwgdG8gX0xUX1NFVF9PUFRJT04gd2hlbiB5b3UgcHV0Cit0aGUgYGRpc2FibGUtZmFzdC1pbnN0YWxsJyBvcHRpb24gaW50byBMVF9JTklUJ3MgZmlyc3QgcGFyYW1ldGVyLl0pCitdKQorCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0VOQUJMRV9GQVNUX0lOU1RBTExdLCBbXSkKK2RubCBBQ19ERUZVTihbQU1fRElTQUJMRV9GQVNUX0lOU1RBTExdLCBbXSkKKworCisjIF9MVF9XSVRIX1BJQyhbTU9ERV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGltcGxlbWVudCB0aGUgLS13aXRoLXBpYyBmbGFnLCBhbmQgc3VwcG9ydCB0aGUgYHBpYy1vbmx5JyBhbmQgYG5vLXBpYycKKyMgTFRfSU5JVCBvcHRpb25zLgorIyBNT0RFIGlzIGVpdGhlciBgeWVzJyBvciBgbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYGJvdGgnLgorbTRfZGVmaW5lKFtfTFRfV0lUSF9QSUNdLAorW0FDX0FSR19XSVRIKFtwaWNdLAorICAgIFtBU19IRUxQX1NUUklORyhbLS13aXRoLXBpY0A8OkA9UEtHU0A6PkBdLAorCVt0cnkgdG8gdXNlIG9ubHkgUElDL25vbi1QSUMgb2JqZWN0cyBAPDpAZGVmYXVsdD11c2UgYm90aEA6PkBdKV0sCisgICAgW2x0X3A9JHtQQUNLQUdFLWRlZmF1bHR9CisgICAgY2FzZSAkd2l0aHZhbCBpbgorICAgIHllc3xubykgcGljX21vZGU9JHdpdGh2YWwgOzsKKyAgICAqKQorICAgICAgcGljX21vZGU9ZGVmYXVsdAorICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgorICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCisgICAgICBmb3IgbHRfcGtnIGluICR3aXRodmFsOyBkbworCUlGUz0iJGx0X3NhdmVfaWZzIgorCWlmIHRlc3QgIlgkbHRfcGtnIiA9ICJYJGx0X3AiOyB0aGVuCisJICBwaWNfbW9kZT15ZXMKKwlmaQorICAgICAgZG9uZQorICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICA7OworICAgIGVzYWNdLAorICAgIFtwaWNfbW9kZT1kZWZhdWx0XSkKKwordGVzdCAteiAiJHBpY19tb2RlIiAmJiBwaWNfbW9kZT1tNF9kZWZhdWx0KFskMV0sIFtkZWZhdWx0XSkKKworX0xUX0RFQ0woW10sIFtwaWNfbW9kZV0sIFswXSwgW1doYXQgdHlwZSBvZiBvYmplY3RzIHRvIGJ1aWxkXSlkbmwKK10pIyBfTFRfV0lUSF9QSUMKKworTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtwaWMtb25seV0sIFtfTFRfV0lUSF9QSUMoW3llc10pXSkKK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbbm8tcGljXSwgW19MVF9XSVRIX1BJQyhbbm9dKV0pCisKKyMgT2xkIG5hbWU6CitBVV9ERUZVTihbQUNfTElCVE9PTF9QSUNNT0RFXSwKK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtwaWMtb25seV0pCitBQ19ESUFHTk9TRShbb2Jzb2xldGVdLAorWyQwOiBSZW1vdmUgdGhpcyB3YXJuaW5nIGFuZCB0aGUgY2FsbCB0byBfTFRfU0VUX09QVElPTiB3aGVuIHlvdQorcHV0IHRoZSBgcGljLW9ubHknIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKK10pCisKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9QSUNNT0RFXSwgW10pCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBMVERMX0lOSVQgT3B0aW9ucyAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworbTRfZGVmaW5lKFtfTFRETF9NT0RFXSwgW10pCitMVF9PUFRJT05fREVGSU5FKFtMVERMX0lOSVRdLCBbbm9ucmVjdXJzaXZlXSwKKwkJIFttNF9kZWZpbmUoW19MVERMX01PREVdLCBbbm9ucmVjdXJzaXZlXSldKQorTFRfT1BUSU9OX0RFRklORShbTFRETF9JTklUXSwgW3JlY3Vyc2l2ZV0sCisJCSBbbTRfZGVmaW5lKFtfTFRETF9NT0RFXSwgW3JlY3Vyc2l2ZV0pXSkKK0xUX09QVElPTl9ERUZJTkUoW0xURExfSU5JVF0sIFtzdWJwcm9qZWN0XSwKKwkJIFttNF9kZWZpbmUoW19MVERMX01PREVdLCBbc3VicHJvamVjdF0pXSkKKworbTRfZGVmaW5lKFtfTFRETF9UWVBFXSwgW10pCitMVF9PUFRJT05fREVGSU5FKFtMVERMX0lOSVRdLCBbaW5zdGFsbGFibGVdLAorCQkgW200X2RlZmluZShbX0xURExfVFlQRV0sIFtpbnN0YWxsYWJsZV0pXSkKK0xUX09QVElPTl9ERUZJTkUoW0xURExfSU5JVF0sIFtjb252ZW5pZW5jZV0sCisJCSBbbTRfZGVmaW5lKFtfTFRETF9UWVBFXSwgW2NvbnZlbmllbmNlXSldKQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2NvbW1vbi9sdHN1Z2FyLm00IGIvYXZhaGktMC42LjMxL2NvbW1vbi9sdHN1Z2FyLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwMDBhMDUKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvY29tbW9uL2x0c3VnYXIubTQKQEAgLTAsMCArMSwxMjMgQEAKKyMgbHRzdWdhci5tNCAtLSBsaWJ0b29sIG00IGJhc2UgbGF5ZXIuICAgICAgICAgICAgICAgICAgICAgICAgIC0qLUF1dG9jb25mLSotCisjCisjIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgV3JpdHRlbiBieSBHYXJ5IFYuIFZhdWdoYW4sIDIwMDQKKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKKyMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCA2IGx0c3VnYXIubTQKKworIyBUaGlzIGlzIHRvIGhlbHAgYWNsb2NhbCBmaW5kIHRoZXNlIG1hY3JvcywgYXMgaXQgY2FuJ3Qgc2VlIG00X2RlZmluZS4KK0FDX0RFRlVOKFtMVFNVR0FSX1ZFUlNJT05dLCBbbTRfaWYoWzAuMV0pXSkKKworCisjIGx0X2pvaW4oU0VQLCBBUkcxLCBbQVJHMi4uLl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByb2R1Y2UgQVJHMVNFUEFSRzIuLi5TRVBBUkduLCBvbWl0dGluZyBbXSBhcmd1bWVudHMgYW5kIHRoZWlyCisjIGFzc29jaWF0ZWQgc2VwYXJhdG9yLgorIyBOZWVkZWQgdW50aWwgd2UgY2FuIHJlbHkgb24gbTRfam9pbiBmcm9tIEF1dG9jb25mIDIuNjIsIHNpbmNlIGFsbCBlYXJsaWVyCisjIHZlcnNpb25zIGluIG00c3VnYXIgaGFkIGJ1Z3MuCittNF9kZWZpbmUoW2x0X2pvaW5dLAorW200X2lmKFskI10sIFsxXSwgW10sCisgICAgICAgWyQjXSwgWzJdLCBbWyQyXV0sCisgICAgICAgW200X2lmKFskMl0sIFtdLCBbXSwgW1skMl1fXSkkMChbJDFdLCBtNF9zaGlmdChtNF9zaGlmdCgkQCkpKV0pXSkKK200X2RlZmluZShbX2x0X2pvaW5dLAorW200X2lmKFskIyQyXSwgWzJdLCBbXSwKKyAgICAgICBbbTRfaWYoWyQyXSwgW10sIFtdLCBbWyQxJDJdXSkkMChbJDFdLCBtNF9zaGlmdChtNF9zaGlmdCgkQCkpKV0pXSkKKworCisjIGx0X2NhcihMSVNUKQorIyBsdF9jZHIoTElTVCkKKyMgLS0tLS0tLS0tLS0tCisjIE1hbmlwdWxhdGUgbTQgbGlzdHMuCisjIFRoZXNlIG1hY3JvcyBhcmUgbmVjZXNzYXJ5IGFzIGxvbmcgYXMgd2lsbCBzdGlsbCBuZWVkIHRvIHN1cHBvcnQKKyMgQXV0b2NvbmYtMi41OSB3aGljaCBxdW90ZXMgZGlmZmVyZW50bHkuCittNF9kZWZpbmUoW2x0X2Nhcl0sIFtbJDFdXSkKK200X2RlZmluZShbbHRfY2RyXSwKK1ttNF9pZihbJCNdLCAwLCBbbTRfZmF0YWwoWyQwOiBjYW5ub3QgYmUgY2FsbGVkIHdpdGhvdXQgYXJndW1lbnRzXSldLAorICAgICAgIFskI10sIDEsIFtdLAorICAgICAgIFttNF9kcXVvdGUobTRfc2hpZnQoJEApKV0pXSkKK200X2RlZmluZShbbHRfdW5xdW90ZV0sICQxKQorCisKKyMgbHRfYXBwZW5kKE1BQ1JPLU5BTUUsIFNUUklORywgW1NFUEFSQVRPUl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZWRlZmluZSBNQUNSTy1OQU1FIHRvIGhvbGQgaXRzIGZvcm1lciBjb250ZW50IHBsdXMgYFNFUEFSQVRPUidgU1RSSU5HJy4KKyMgTm90ZSB0aGF0IG5laXRoZXIgU0VQQVJBVE9SIG5vciBTVFJJTkcgYXJlIGV4cGFuZGVkOyB0aGV5IGFyZSBhcHBlbmRlZAorIyB0byBNQUNSTy1OQU1FIGFzIGlzIChsZWF2aW5nIHRoZSBleHBhbnNpb24gZm9yIHdoZW4gTUFDUk8tTkFNRSBpcyBpbnZva2VkKS4KKyMgTm8gU0VQQVJBVE9SIGlzIG91dHB1dCBpZiBNQUNSTy1OQU1FIHdhcyBwcmV2aW91c2x5IHVuZGVmaW5lZCAoZGlmZmVyZW50CisjIHRoYW4gZGVmaW5lZCBhbmQgZW1wdHkpLgorIworIyBUaGlzIG1hY3JvIGlzIG5lZWRlZCB1bnRpbCB3ZSBjYW4gcmVseSBvbiBBdXRvY29uZiAyLjYyLCBzaW5jZSBlYXJsaWVyCisjIHZlcnNpb25zIG9mIG00c3VnYXIgbWlzdGFrZW5seSBleHBhbmRlZCBTRVBBUkFUT1IgYnV0IG5vdCBTVFJJTkcuCittNF9kZWZpbmUoW2x0X2FwcGVuZF0sCitbbTRfZGVmaW5lKFskMV0sCisJICAgbTRfaWZkZWYoWyQxXSwgW200X2RlZm4oWyQxXSlbJDNdXSlbJDJdKV0pCisKKworCisjIGx0X2NvbWJpbmUoU0VQLCBQUkVGSVgtTElTVCwgSU5GSVgsIFNVRkZJWDEsIFtTVUZGSVgyLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQcm9kdWNlIGEgU0VQIGRlbGltaXRlZCBsaXN0IG9mIGFsbCBwYWlyZWQgY29tYmluYXRpb25zIG9mIGVsZW1lbnRzIG9mCisjIFBSRUZJWC1MSVNUIHdpdGggU1VGRklYMSB0aHJvdWdoIFNVRkZJWG4uICBFYWNoIGVsZW1lbnQgb2YgdGhlIGxpc3QKKyMgaGFzIHRoZSBmb3JtIFBSRUZJWG1JTkZJWFNVRkZJWG4uCisjIE5lZWRlZCB1bnRpbCB3ZSBjYW4gcmVseSBvbiBtNF9jb21iaW5lIGFkZGVkIGluIEF1dG9jb25mIDIuNjIuCittNF9kZWZpbmUoW2x0X2NvbWJpbmVdLAorW200X2lmKG00X2V2YWwoWyQjID4gM10pLCBbMV0sCisgICAgICAgW200X3B1c2hkZWYoW19MdF9zZXBdLCBbbTRfZGVmaW5lKFtfTHRfc2VwXSwgbTRfZGVmbihbbHRfY2FyXSkpXSldXWRubAorW1ttNF9mb3JlYWNoKFtfTHRfcHJlZml4XSwgWyQyXSwKKwkgICAgIFttNF9mb3JlYWNoKFtfTHRfc3VmZml4XSwKKwkJXW00X2RxdW90ZShtNF9kcXVvdGUobTRfc2hpZnQobTRfc2hpZnQobTRfc2hpZnQoJEApKSkpKVssCisJW19MdF9zZXAoWyQxXSlbXW00X2RlZm4oW19MdF9wcmVmaXhdKVskM11tNF9kZWZuKFtfTHRfc3VmZml4XSldKV0pXSldKQorCisKKyMgbHRfaWZfYXBwZW5kX3VuaXEoTUFDUk8tTkFNRSwgVkFSTkFNRSwgW1NFUEFSQVRPUl0sIFtVTklRXSwgW05PVC1VTklRXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSWZmIE1BQ1JPLU5BTUUgZG9lcyBub3QgeWV0IGNvbnRhaW4gVkFSTkFNRSwgdGhlbiBhcHBlbmQgaXQgKGRlbGltaXRlZAorIyBieSBTRVBBUkFUT1IgaWYgc3VwcGxpZWQpIGFuZCBleHBhbmQgVU5JUSwgZWxzZSBOT1QtVU5JUS4KK200X2RlZmluZShbbHRfaWZfYXBwZW5kX3VuaXFdLAorW200X2lmZGVmKFskMV0sCisJICBbbTRfaWYobTRfaW5kZXgoWyQzXW00X2RlZm4oWyQxXSlbJDNdLCBbJDMkMiQzXSksIFstMV0sCisJCSBbbHRfYXBwZW5kKFskMV0sIFskMl0sIFskM10pJDRdLAorCQkgWyQ1XSldLAorCSAgW2x0X2FwcGVuZChbJDFdLCBbJDJdLCBbJDNdKSQ0XSldKQorCisKKyMgbHRfZGljdF9hZGQoRElDVCwgS0VZLCBWQUxVRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGljdF9hZGRdLAorW200X2RlZmluZShbJDEoJDIpXSwgWyQzXSldKQorCisKKyMgbHRfZGljdF9hZGRfc3Via2V5KERJQ1QsIEtFWSwgU1VCS0VZLCBWQUxVRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGljdF9hZGRfc3Via2V5XSwKK1ttNF9kZWZpbmUoWyQxKCQyOiQzKV0sIFskNF0pXSkKKworCisjIGx0X2RpY3RfZmV0Y2goRElDVCwgS0VZLCBbU1VCS0VZXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9kaWN0X2ZldGNoXSwKK1ttNF9pZnZhbChbJDNdLAorCW00X2lmZGVmKFskMSgkMjokMyldLCBbbTRfZGVmbihbJDEoJDI6JDMpXSldKSwKKyAgICBtNF9pZmRlZihbJDEoJDIpXSwgW200X2RlZm4oWyQxKCQyKV0pXSkpXSkKKworCisjIGx0X2lmX2RpY3RfZmV0Y2goRElDVCwgS0VZLCBbU1VCS0VZXSwgVkFMVUUsIElGLVRSVUUsIFtJRi1GQUxTRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2lmX2RpY3RfZmV0Y2hdLAorW200X2lmKGx0X2RpY3RfZmV0Y2goWyQxXSwgWyQyXSwgWyQzXSksIFskNF0sCisJWyQ1XSwKKyAgICBbJDZdKV0pCisKKworIyBsdF9kaWN0X2ZpbHRlcihESUNULCBbU1VCS0VZXSwgVkFMVUUsIFtTRVBBUkFUT1JdLCBLRVksIFsuLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9kaWN0X2ZpbHRlcl0sCitbbTRfaWYoWyQ1XSwgW10sIFtdLAorICBbbHRfam9pbihtNF9xdW90ZShtNF9kZWZhdWx0KFskNF0sIFtbLCBdXSkpLAorICAgICAgICAgICBsdF91bnF1b3RlKG00X3NwbGl0KG00X25vcm1hbGl6ZShtNF9mb3JlYWNoKF9MdF9rZXksIGx0X2NhcihbbTRfc2hpZnRuKDQsICRAKV0pLAorCQkgICAgICBbbHRfaWZfZGljdF9mZXRjaChbJDFdLCBfTHRfa2V5LCBbJDJdLCBbJDNdLCBbX0x0X2tleSBdKV0pKSkpKV0pW11kbmwKK10pCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvY29tbW9uL2x0dmVyc2lvbi5tNCBiL2F2YWhpLTAuNi4zMS9jb21tb24vbHR2ZXJzaW9uLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3YTg2MDIKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvY29tbW9uL2x0dmVyc2lvbi5tNApAQCAtMCwwICsxLDIzIEBACisjIGx0dmVyc2lvbi5tNCAtLSB2ZXJzaW9uIG51bWJlcnMJCQktKi0gQXV0b2NvbmYgLSotCisjCisjICAgQ29weXJpZ2h0IChDKSAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyAgIFdyaXR0ZW4gYnkgU2NvdHQgSmFtZXMgUmVtbmFudCwgMjAwNAorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcworIyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBzZXJpYWwgMzMzNyBsdHZlcnNpb24ubTQKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2wKKworbTRfZGVmaW5lKFtMVF9QQUNLQUdFX1ZFUlNJT05dLCBbMi40LjJdKQorbTRfZGVmaW5lKFtMVF9QQUNLQUdFX1JFVklTSU9OXSwgWzEuMzMzN10pCisKK0FDX0RFRlVOKFtMVFZFUlNJT05fVkVSU0lPTl0sCitbbWFjcm9fdmVyc2lvbj0nMi40LjInCittYWNyb19yZXZpc2lvbj0nMS4zMzM3JworX0xUX0RFQ0woLCBtYWNyb192ZXJzaW9uLCAwLCBbV2hpY2ggcmVsZWFzZSBvZiBsaWJ0b29sLm00IHdhcyB1c2VkP10pCitfTFRfREVDTCgsIG1hY3JvX3JldmlzaW9uLCAwKQorXSkKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9jb21tb24vbHR+b2Jzb2xldGUubTQgYi9hdmFoaS0wLjYuMzEvY29tbW9uL2x0fm9ic29sZXRlLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NzNkYTkKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvY29tbW9uL2x0fm9ic29sZXRlLm00CkBAIC0wLDAgKzEsOTggQEAKKyMgbHR+b2Jzb2xldGUubTQgLS0gYWNsb2NhbCBzYXRpc2Z5aW5nIG9ic29sZXRlIGRlZmluaXRpb25zLiAgICAtKi1BdXRvY29uZi0qLQorIworIyAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNywgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgICBXcml0dGVuIGJ5IFNjb3R0IEphbWVzIFJlbW5hbnQsIDIwMDQuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzCisjIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgNSBsdH5vYnNvbGV0ZS5tNAorCisjIFRoZXNlIGV4aXN0IGVudGlyZWx5IHRvIGZvb2wgYWNsb2NhbCB3aGVuIGJvb3RzdHJhcHBpbmcgbGlidG9vbC4KKyMKKyMgSW4gdGhlIHBhc3QgbGlidG9vbC5tNCBoYXMgcHJvdmlkZWQgbWFjcm9zIHZpYSBBQ19ERUZVTiAob3IgQVVfREVGVU4pCisjIHdoaWNoIGhhdmUgbGF0ZXIgYmVlbiBjaGFuZ2VkIHRvIG00X2RlZmluZSBhcyB0aGV5IGFyZW4ndCBwYXJ0IG9mIHRoZQorIyBleHBvcnRlZCBBUEksIG9yIG1vdmVkIHRvIEF1dG9jb25mIG9yIEF1dG9tYWtlIHdoZXJlIHRoZXkgYmVsb25nLgorIworIyBUaGUgdHJvdWJsZSBpcywgYWNsb2NhbCBpcyBhIGJpdCB0aGljay4gIEl0J2xsIHNlZSB0aGUgb2xkIEFDX0RFRlVOCisjIGluIC91c3Ivc2hhcmUvYWNsb2NhbC9saWJ0b29sLm00IGFuZCByZW1lbWJlciBpdCwgdGhlbiB3aGVuIGl0IHNlZXMgdXMKKyMgdXNpbmcgYSBtYWNybyB3aXRoIHRoZSBzYW1lIG5hbWUgaW4gb3VyIGxvY2FsIG00L2xpYnRvb2wubTQgaXQnbGwKKyMgcHVsbCB0aGUgb2xkIGxpYnRvb2wubTQgaW4gKGl0IGRvZXNuJ3Qgc2VlIG91ciBzaGlueSBuZXcgbTRfZGVmaW5lCisjIGFuZCBkb2Vzbid0IGtub3cgYWJvdXQgQXV0b2NvbmYgbWFjcm9zIGF0IGFsbC4pCisjCisjIFNvIHdlIHByb3ZpZGUgdGhpcyBmaWxlLCB3aGljaCBoYXMgYSBzaWxseSBmaWxlbmFtZSBzbyBpdCdzIGFsd2F5cworIyBpbmNsdWRlZCBhZnRlciBldmVyeXRoaW5nIGVsc2UuICBUaGlzIHByb3ZpZGVzIGFjbG9jYWwgd2l0aCB0aGUKKyMgQUNfREVGVU5zIGl0IHdhbnRzLCBidXQgd2hlbiBtNCBwcm9jZXNzZXMgaXQsIGl0IGRvZXNuJ3QgZG8gYW55dGhpbmcKKyMgYmVjYXVzZSB0aG9zZSBtYWNyb3MgYWxyZWFkeSBleGlzdCwgb3Igd2lsbCBiZSBvdmVyd3JpdHRlbiBsYXRlci4KKyMgV2UgdXNlIEFDX0RFRlVOIG92ZXIgQVVfREVGVU4gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBhY2xvY2FsLTEuNi4gCisjCisjIEFueXRpbWUgd2Ugd2l0aGRyYXcgYW4gQUNfREVGVU4gb3IgQVVfREVGVU4sIHJlbWVtYmVyIHRvIGFkZCBpdCBoZXJlLgorIyBZZXMsIHRoYXQgbWVhbnMgZXZlcnkgbmFtZSBvbmNlIHRha2VuIHdpbGwgbmVlZCB0byByZW1haW4gaGVyZSB1bnRpbAorIyB3ZSBnaXZlIHVwIGNvbXBhdGliaWxpdHkgd2l0aCB2ZXJzaW9ucyBiZWZvcmUgMS43LCBhdCB3aGljaCBwb2ludAorIyB3ZSBuZWVkIHRvIGtlZXAgb25seSB0aG9zZSBuYW1lcyB3aGljaCB3ZSBzdGlsbCByZWZlciB0by4KKworIyBUaGlzIGlzIHRvIGhlbHAgYWNsb2NhbCBmaW5kIHRoZXNlIG1hY3JvcywgYXMgaXQgY2FuJ3Qgc2VlIG00X2RlZmluZS4KK0FDX0RFRlVOKFtMVE9CU09MRVRFX1ZFUlNJT05dLCBbbTRfaWYoWzFdKV0pCisKK200X2lmbmRlZihbQUNfTElCVE9PTF9MSU5LRVJfT1BUSU9OXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX0xJTktFUl9PUFRJT05dKV0pCittNF9pZm5kZWYoW0FDX1BST0dfRUdSRVBdLAkJW0FDX0RFRlVOKFtBQ19QUk9HX0VHUkVQXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfUFJPR19FQ0hPX0JBQ0tTTEFTSF0sCVtBQ19ERUZVTihbX0xUX0FDX1BST0dfRUNIT19CQUNLU0xBU0hdKV0pCittNF9pZm5kZWYoW19MVF9BQ19TSEVMTF9JTklUXSwJCVtBQ19ERUZVTihbX0xUX0FDX1NIRUxMX0lOSVRdKV0pCittNF9pZm5kZWYoW19MVF9BQ19TWVNfTElCUEFUSF9BSVhdLAlbQUNfREVGVU4oW19MVF9BQ19TWVNfTElCUEFUSF9BSVhdKV0pCittNF9pZm5kZWYoW19MVF9QUk9HX0xUTUFJTl0sCQlbQUNfREVGVU4oW19MVF9QUk9HX0xUTUFJTl0pXSkKK200X2lmbmRlZihbX0xUX0FDX1RBR1ZBUl0sCQlbQUNfREVGVU4oW19MVF9BQ19UQUdWQVJdKV0pCittNF9pZm5kZWYoW0FDX0xURExfRU5BQkxFX0lOU1RBTExdLAlbQUNfREVGVU4oW0FDX0xURExfRU5BQkxFX0lOU1RBTExdKV0pCittNF9pZm5kZWYoW0FDX0xURExfUFJFT1BFTl0sCQlbQUNfREVGVU4oW0FDX0xURExfUFJFT1BFTl0pXSkKK200X2lmbmRlZihbX0xUX0FDX1NZU19DT01QSUxFUl0sCVtBQ19ERUZVTihbX0xUX0FDX1NZU19DT01QSUxFUl0pXSkKK200X2lmbmRlZihbX0xUX0FDX0xPQ0tdLAkJW0FDX0RFRlVOKFtfTFRfQUNfTE9DS10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9TWVNfT0xEX0FSQ0hJVkVdLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX09MRF9BUkNISVZFXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfVFJZX0RMT1BFTl9TRUxGXSwJW0FDX0RFRlVOKFtfTFRfQUNfVFJZX0RMT1BFTl9TRUxGXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfQ0NfQ19PXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1BST0dfQ0NfQ19PXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1NZU19IQVJEX0xJTktfTE9DS1NdLCBbQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX0hBUkRfTElOS19MT0NLU10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9PQkpESVJdLAkJW0FDX0RFRlVOKFtBQ19MSUJUT09MX09CSkRJUl0pXSkKK200X2lmbmRlZihbQUNfTFRETF9PQkpESVJdLAkJW0FDX0RFRlVOKFtBQ19MVERMX09CSkRJUl0pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9QUk9HX0xEX0hBUkRDT0RFX0xJQlBBVEhdLCBbQUNfREVGVU4oW0FDX0xJQlRPT0xfUFJPR19MRF9IQVJEQ09ERV9MSUJQQVRIXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1NZU19MSUJfU1RSSVBdLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX0xJQl9TVFJJUF0pXSkKK200X2lmbmRlZihbQUNfUEFUSF9NQUdJQ10sCQlbQUNfREVGVU4oW0FDX1BBVEhfTUFHSUNdKV0pCittNF9pZm5kZWYoW0FDX1BST0dfTERfR05VXSwJCVtBQ19ERUZVTihbQUNfUFJPR19MRF9HTlVdKV0pCittNF9pZm5kZWYoW0FDX1BST0dfTERfUkVMT0FEX0ZMQUddLAlbQUNfREVGVU4oW0FDX1BST0dfTERfUkVMT0FEX0ZMQUddKV0pCittNF9pZm5kZWYoW0FDX0RFUExJQlNfQ0hFQ0tfTUVUSE9EXSwJW0FDX0RFRlVOKFtBQ19ERVBMSUJTX0NIRUNLX01FVEhPRF0pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX05PX1JUVEldLCBbQUNfREVGVU4oW0FDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9OT19SVFRJXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1NZU19HTE9CQUxfU1lNQk9MX1BJUEVdLCBbQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX0dMT0JBTF9TWU1CT0xfUElQRV0pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX1BJQ10sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX1BJQ10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9QUk9HX0xEX1NITElCU10sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9QUk9HX0xEX1NITElCU10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9QT1NUREVQX1BSRURFUF0sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9QT1NUREVQX1BSRURFUF0pXSkKK200X2lmbmRlZihbTFRfQUNfUFJPR19FR1JFUF0sCQlbQUNfREVGVU4oW0xUX0FDX1BST0dfRUdSRVBdKV0pCittNF9pZm5kZWYoW0xUX0FDX1BST0dfU0VEXSwJCVtBQ19ERUZVTihbTFRfQUNfUFJPR19TRURdKV0pCittNF9pZm5kZWYoW19MVF9DQ19CQVNFTkFNRV0sCQlbQUNfREVGVU4oW19MVF9DQ19CQVNFTkFNRV0pXSkKK200X2lmbmRlZihbX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFXSwJW0FDX0RFRlVOKFtfTFRfQ09NUElMRVJfQk9JTEVSUExBVEVdKV0pCittNF9pZm5kZWYoW19MVF9MSU5LRVJfQk9JTEVSUExBVEVdLAlbQUNfREVGVU4oW19MVF9MSU5LRVJfQk9JTEVSUExBVEVdKV0pCittNF9pZm5kZWYoW19BQ19QUk9HX0xJQlRPT0xdLAkJW0FDX0RFRlVOKFtfQUNfUFJPR19MSUJUT09MXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1NFVFVQXSwJCVtBQ19ERUZVTihbQUNfTElCVE9PTF9TRVRVUF0pXSkKK200X2lmbmRlZihbX0xUX0FDX0NIRUNLX0RMRkNOXSwJCVtBQ19ERUZVTihbX0xUX0FDX0NIRUNLX0RMRkNOXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1NZU19EWU5BTUlDX0xJTktFUl0sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfRFlOQU1JQ19MSU5LRVJdKV0pCittNF9pZm5kZWYoW19MVF9BQ19UQUdDT05GSUddLAkJW0FDX0RFRlVOKFtfTFRfQUNfVEFHQ09ORklHXSldKQorbTRfaWZuZGVmKFtBQ19ESVNBQkxFX0ZBU1RfSU5TVEFMTF0sCVtBQ19ERUZVTihbQUNfRElTQUJMRV9GQVNUX0lOU1RBTExdKV0pCittNF9pZm5kZWYoW19MVF9BQ19MQU5HX0NYWF0sCQlbQUNfREVGVU4oW19MVF9BQ19MQU5HX0NYWF0pXSkKK200X2lmbmRlZihbX0xUX0FDX0xBTkdfRjc3XSwJCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfRjc3XSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19HQ0pdLAkJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19HQ0pdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfTEFOR19DX0NPTkZJR10sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX0NfQ09ORklHXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19DX0NPTkZJR10sCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfQ19DT05GSUddKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfTEFOR19DWFhfQ09ORklHXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX0xBTkdfQ1hYX0NPTkZJR10pXSkKK200X2lmbmRlZihbX0xUX0FDX0xBTkdfQ1hYX0NPTkZJR10sCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfQ1hYX0NPTkZJR10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9MQU5HX0Y3N19DT05GSUddLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfTEFOR19GNzdfQ09ORklHXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19GNzdfQ09ORklHXSwJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19GNzdfQ09ORklHXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX0xBTkdfR0NKX0NPTkZJR10sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX0dDSl9DT05GSUddKV0pCittNF9pZm5kZWYoW19MVF9BQ19MQU5HX0dDSl9DT05GSUddLAlbQUNfREVGVU4oW19MVF9BQ19MQU5HX0dDSl9DT05GSUddKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfTEFOR19SQ19DT05GSUddLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfTEFOR19SQ19DT05GSUddKV0pCittNF9pZm5kZWYoW19MVF9BQ19MQU5HX1JDX0NPTkZJR10sCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfUkNfQ09ORklHXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX0NPTkZJR10sCQlbQUNfREVGVU4oW0FDX0xJQlRPT0xfQ09ORklHXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfRklMRV9MVERMTF9DXSwJW0FDX0RFRlVOKFtfTFRfQUNfRklMRV9MVERMTF9DXSldKQorbTRfaWZuZGVmKFtfTFRfUkVRVUlSRURfREFSV0lOX0NIRUNLU10sCVtBQ19ERUZVTihbX0xUX1JFUVVJUkVEX0RBUldJTl9DSEVDS1NdKV0pCittNF9pZm5kZWYoW19MVF9BQ19QUk9HX0NYWENQUF0sCQlbQUNfREVGVU4oW19MVF9BQ19QUk9HX0NYWENQUF0pXSkKK200X2lmbmRlZihbX0xUX1BSRVBBUkVfU0VEX1FVT1RFX1ZBUlNdLAlbQUNfREVGVU4oW19MVF9QUkVQQVJFX1NFRF9RVU9URV9WQVJTXSldKQorbTRfaWZuZGVmKFtfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSF0sCVtBQ19ERUZVTihbX0xUX1BST0dfRUNIT19CQUNLU0xBU0hdKV0pCittNF9pZm5kZWYoW19MVF9QUk9HX0Y3N10sCQlbQUNfREVGVU4oW19MVF9QUk9HX0Y3N10pXSkKK200X2lmbmRlZihbX0xUX1BST0dfRkNdLAkJW0FDX0RFRlVOKFtfTFRfUFJPR19GQ10pXSkKK200X2lmbmRlZihbX0xUX1BST0dfQ1hYXSwJCVtBQ19ERUZVTihbX0xUX1BST0dfQ1hYXSldKQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2NvbW1vbi9ubHMubTQgYi9hdmFoaS0wLjYuMzEvY29tbW9uL25scy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDM3MDRjCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2NvbW1vbi9ubHMubTQKQEAgLTAsMCArMSwzMiBAQAorIyBubHMubTQgc2VyaWFsIDUgKGdldHRleHQtMC4xOCkKK2RubCBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMywgMjAwNS0yMDA2LCAyMDA4LTIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorZG5sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorZG5sCitkbmwgVGhpcyBmaWxlIGNhbiBjYW4gYmUgdXNlZCBpbiBwcm9qZWN0cyB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSB1bmRlcgorZG5sIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBvciB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKK2RubCBMaWNlbnNlIGJ1dCB3aGljaCBzdGlsbCB3YW50IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdOVSBnZXR0ZXh0CitkbmwgZnVuY3Rpb25hbGl0eS4KK2RubCBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBhY3R1YWwgY29kZSBvZiB0aGUgR05VIGdldHRleHQgbGlicmFyeSBpcyBjb3ZlcmVkCitkbmwgYnkgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB0aGUgcmVzdCBvZiB0aGUgR05VCitkbmwgZ2V0dGV4dCBwYWNrYWdlIHBhY2thZ2UgaXMgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCitkbmwgVGhleSBhcmUgKm5vdCogaW4gdGhlIHB1YmxpYyBkb21haW4uCisKK2RubCBBdXRob3JzOgorZG5sICAgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDE5OTUtMjAwMC4KK2RubCAgIEJydW5vIEhhaWJsZSA8aGFpYmxlQGNsaXNwLmNvbnMub3JnPiwgMjAwMC0yMDAzLgorCitBQ19QUkVSRVEoWzIuNTBdKQorCitBQ19ERUZVTihbQU1fTkxTXSwKK1sKKyAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIE5MUyBpcyByZXF1ZXN0ZWRdKQorICBkbmwgRGVmYXVsdCBpcyBlbmFibGVkIE5MUworICBBQ19BUkdfRU5BQkxFKFtubHNdLAorICAgIFsgIC0tZGlzYWJsZS1ubHMgICAgICAgICAgIGRvIG5vdCB1c2UgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnRdLAorICAgIFVTRV9OTFM9JGVuYWJsZXZhbCwgVVNFX05MUz15ZXMpCisgIEFDX01TR19SRVNVTFQoWyRVU0VfTkxTXSkKKyAgQUNfU1VCU1QoW1VTRV9OTFNdKQorXSkKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9jb21tb24vcG8ubTQgYi9hdmFoaS0wLjYuMzEvY29tbW9uL3BvLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3ZjM2YTQKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvY29tbW9uL3BvLm00CkBAIC0wLDAgKzEsNDQ5IEBACisjIHBvLm00IHNlcmlhbCAxNyAoZ2V0dGV4dC0wLjE4KQorZG5sIENvcHlyaWdodCAoQykgMTk5NS0yMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCitkbmwKK2RubCBUaGlzIGZpbGUgY2FuIGNhbiBiZSB1c2VkIGluIHByb2plY3RzIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIHVuZGVyCitkbmwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIG9yIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworZG5sIExpY2Vuc2UgYnV0IHdoaWNoIHN0aWxsIHdhbnQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgR05VIGdldHRleHQKK2RubCBmdW5jdGlvbmFsaXR5LgorZG5sIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGlzIGNvdmVyZWQKK2RubCBieSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYW5kIHRoZSByZXN0IG9mIHRoZSBHTlUKK2RubCBnZXR0ZXh0IHBhY2thZ2UgcGFja2FnZSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KK2RubCBUaGV5IGFyZSAqbm90KiBpbiB0aGUgcHVibGljIGRvbWFpbi4KKworZG5sIEF1dGhvcnM6CitkbmwgICBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5NS0yMDAwLgorZG5sICAgQnJ1bm8gSGFpYmxlIDxoYWlibGVAY2xpc3AuY29ucy5vcmc+LCAyMDAwLTIwMDMuCisKK0FDX1BSRVJFUShbMi41MF0pCisKK2RubCBDaGVja3MgZm9yIGFsbCBwcmVyZXF1aXNpdGVzIG9mIHRoZSBwbyBzdWJkaXJlY3RvcnkuCitBQ19ERUZVTihbQU1fUE9fU1VCRElSU10sCitbCisgIEFDX1JFUVVJUkUoW0FDX1BST0dfTUFLRV9TRVRdKWRubAorICBBQ19SRVFVSVJFKFtBQ19QUk9HX0lOU1RBTExdKWRubAorICBBQ19SRVFVSVJFKFtBTV9QUk9HX01LRElSX1BdKWRubCBkZWZpbmVkIGJ5IGF1dG9tYWtlCisgIEFDX1JFUVVJUkUoW0FNX05MU10pZG5sCisKKyAgZG5sIFJlbGVhc2UgdmVyc2lvbiBvZiB0aGUgZ2V0dGV4dCBtYWNyb3MuIFRoaXMgaXMgdXNlZCB0byBlbnN1cmUgdGhhdAorICBkbmwgdGhlIGdldHRleHQgbWFjcm9zIGFuZCBwby9NYWtlZmlsZS5pbi5pbiBhcmUgaW4gc3luYy4KKyAgQUNfU1VCU1QoW0dFVFRFWFRfTUFDUk9fVkVSU0lPTl0sIFswLjE4XSkKKworICBkbmwgUGVyZm9ybSB0aGUgZm9sbG93aW5nIHRlc3RzIGFsc28gaWYgLS1kaXNhYmxlLW5scyBoYXMgYmVlbiBnaXZlbiwKKyAgZG5sIGJlY2F1c2UgdGhleSBhcmUgbmVlZGVkIGZvciAibWFrZSBkaXN0IiB0byB3b3JrLgorCisgIGRubCBTZWFyY2ggZm9yIEdOVSBtc2dmbXQgaW4gdGhlIFBBVEguCisgIGRubCBUaGUgZmlyc3QgdGVzdCBleGNsdWRlcyBTb2xhcmlzIG1zZ2ZtdCBhbmQgZWFybHkgR05VIG1zZ2ZtdCB2ZXJzaW9ucy4KKyAgZG5sIFRoZSBzZWNvbmQgdGVzdCBleGNsdWRlcyBGcmVlQlNEIG1zZ2ZtdC4KKyAgQU1fUEFUSF9QUk9HX1dJVEhfVEVTVChNU0dGTVQsIG1zZ2ZtdCwKKyAgICBbJGFjX2Rpci8kYWNfd29yZCAtLXN0YXRpc3RpY3MgL2Rldi9udWxsID4mXUFTX01FU1NBR0VfTE9HX0ZEWyAyPiYxICYmCisgICAgIChpZiAkYWNfZGlyLyRhY193b3JkIC0tc3RhdGlzdGljcyAvZGV2L251bGwgMj4mMSA+L2Rldi9udWxsIHwgZ3JlcCB1c2FnZSA+L2Rldi9udWxsOyB0aGVuIGV4aXQgMTsgZWxzZSBleGl0IDA7IGZpKV0sCisgICAgOikKKyAgQUNfUEFUSF9QUk9HKFtHTVNHRk1UXSwgW2dtc2dmbXRdLCBbJE1TR0ZNVF0pCisKKyAgZG5sIFRlc3Qgd2hldGhlciBpdCBpcyBHTlUgbXNnZm10ID49IDAuMTUuCitjaGFuZ2VxdW90ZSgsKWRubAorICBjYXNlIGAkTVNHRk1UIC0tdmVyc2lvbiB8IHNlZCAxcSB8IHNlZCAtZSAncyxeW14wLTldKiwsJ2AgaW4KKyAgICAnJyB8IDAuWzAtOV0gfCAwLlswLTldLiogfCAwLjFbMC00XSB8IDAuMVswLTRdLiopIE1TR0ZNVF8wMTU9OiA7OworICAgICopIE1TR0ZNVF8wMTU9JE1TR0ZNVCA7OworICBlc2FjCitjaGFuZ2VxdW90ZShbLF0pZG5sCisgIEFDX1NVQlNUKFtNU0dGTVRfMDE1XSkKK2NoYW5nZXF1b3RlKCwpZG5sCisgIGNhc2UgYCRHTVNHRk1UIC0tdmVyc2lvbiB8IHNlZCAxcSB8IHNlZCAtZSAncyxeW14wLTldKiwsJ2AgaW4KKyAgICAnJyB8IDAuWzAtOV0gfCAwLlswLTldLiogfCAwLjFbMC00XSB8IDAuMVswLTRdLiopIEdNU0dGTVRfMDE1PTogOzsKKyAgICAqKSBHTVNHRk1UXzAxNT0kR01TR0ZNVCA7OworICBlc2FjCitjaGFuZ2VxdW90ZShbLF0pZG5sCisgIEFDX1NVQlNUKFtHTVNHRk1UXzAxNV0pCisKKyAgZG5sIFNlYXJjaCBmb3IgR05VIHhnZXR0ZXh0IDAuMTIgb3IgbmV3ZXIgaW4gdGhlIFBBVEguCisgIGRubCBUaGUgZmlyc3QgdGVzdCBleGNsdWRlcyBTb2xhcmlzIHhnZXR0ZXh0IGFuZCBlYXJseSBHTlUgeGdldHRleHQgdmVyc2lvbnMuCisgIGRubCBUaGUgc2Vjb25kIHRlc3QgZXhjbHVkZXMgRnJlZUJTRCB4Z2V0dGV4dC4KKyAgQU1fUEFUSF9QUk9HX1dJVEhfVEVTVChYR0VUVEVYVCwgeGdldHRleHQsCisgICAgWyRhY19kaXIvJGFjX3dvcmQgLS1vbWl0LWhlYWRlciAtLWNvcHlyaWdodC1ob2xkZXI9IC0tbXNnaWQtYnVncy1hZGRyZXNzPSAvZGV2L251bGwgPiZdQVNfTUVTU0FHRV9MT0dfRkRbIDI+JjEgJiYKKyAgICAgKGlmICRhY19kaXIvJGFjX3dvcmQgLS1vbWl0LWhlYWRlciAtLWNvcHlyaWdodC1ob2xkZXI9IC0tbXNnaWQtYnVncy1hZGRyZXNzPSAvZGV2L251bGwgMj4mMSA+L2Rldi9udWxsIHwgZ3JlcCB1c2FnZSA+L2Rldi9udWxsOyB0aGVuIGV4aXQgMTsgZWxzZSBleGl0IDA7IGZpKV0sCisgICAgOikKKyAgZG5sIFJlbW92ZSBsZWZ0b3ZlciBmcm9tIEZyZWVCU0QgeGdldHRleHQgY2FsbC4KKyAgcm0gLWYgbWVzc2FnZXMucG8KKworICBkbmwgVGVzdCB3aGV0aGVyIGl0IGlzIEdOVSB4Z2V0dGV4dCA+PSAwLjE1LgorY2hhbmdlcXVvdGUoLClkbmwKKyAgY2FzZSBgJFhHRVRURVhUIC0tdmVyc2lvbiB8IHNlZCAxcSB8IHNlZCAtZSAncyxeW14wLTldKiwsJ2AgaW4KKyAgICAnJyB8IDAuWzAtOV0gfCAwLlswLTldLiogfCAwLjFbMC00XSB8IDAuMVswLTRdLiopIFhHRVRURVhUXzAxNT06IDs7CisgICAgKikgWEdFVFRFWFRfMDE1PSRYR0VUVEVYVCA7OworICBlc2FjCitjaGFuZ2VxdW90ZShbLF0pZG5sCisgIEFDX1NVQlNUKFtYR0VUVEVYVF8wMTVdKQorCisgIGRubCBTZWFyY2ggZm9yIEdOVSBtc2dtZXJnZSAwLjExIG9yIG5ld2VyIGluIHRoZSBQQVRILgorICBBTV9QQVRIX1BST0dfV0lUSF9URVNUKE1TR01FUkdFLCBtc2dtZXJnZSwKKyAgICBbJGFjX2Rpci8kYWNfd29yZCAtLXVwZGF0ZSAtcSAvZGV2L251bGwgL2Rldi9udWxsID4mXUFTX01FU1NBR0VfTE9HX0ZEWyAyPiYxXSwgOikKKworICBkbmwgSW5zdGFsbGF0aW9uIGRpcmVjdG9yaWVzLgorICBkbmwgQXV0b2NvbmYgPj0gMi42MCBkZWZpbmVzIGxvY2FsZWRpci4gRm9yIG9sZGVyIHZlcnNpb25zIG9mIGF1dG9jb25mLCB3ZQorICBkbmwgaGF2ZSB0byBkZWZpbmUgaXQgaGVyZSwgc28gdGhhdCBpdCBjYW4gYmUgdXNlZCBpbiBwby9NYWtlZmlsZS4KKyAgdGVzdCAtbiAiJGxvY2FsZWRpciIgfHwgbG9jYWxlZGlyPScke2RhdGFkaXJ9L2xvY2FsZScKKyAgQUNfU1VCU1QoW2xvY2FsZWRpcl0pCisKKyAgZG5sIFN1cHBvcnQgZm9yIEFNX1hHRVRURVhUX09QVElPTi4KKyAgdGVzdCAtbiAiJHtYR0VUVEVYVF9FWFRSQV9PUFRJT05TK3NldH0iIHx8IFhHRVRURVhUX0VYVFJBX09QVElPTlM9CisgIEFDX1NVQlNUKFtYR0VUVEVYVF9FWFRSQV9PUFRJT05TXSkKKworICBBQ19DT05GSUdfQ09NTUFORFMoW3BvLWRpcmVjdG9yaWVzXSwgW1sKKyAgICBmb3IgYWNfZmlsZSBpbiAkQ09ORklHX0ZJTEVTOyBkbworICAgICAgIyBTdXBwb3J0ICJvdXRmaWxlWzppbmZpbGVbOmluZmlsZS4uLl1dIgorICAgICAgY2FzZSAiJGFjX2ZpbGUiIGluCisgICAgICAgICo6KikgYWNfZmlsZT1gZWNobyAiJGFjX2ZpbGUifHNlZCAncyU6LiolJSdgIDs7CisgICAgICBlc2FjCisgICAgICAjIFBPIGRpcmVjdG9yaWVzIGhhdmUgYSBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgZnJvbSBNYWtlZmlsZS5pbi5pbi4KKyAgICAgIGNhc2UgIiRhY19maWxlIiBpbiAqL01ha2VmaWxlLmluKQorICAgICAgICAjIEFkanVzdCBhIHJlbGF0aXZlIHNyY2Rpci4KKyAgICAgICAgYWNfZGlyPWBlY2hvICIkYWNfZmlsZSJ8c2VkICdzJS9bXi9dW14vXSokJSUnYAorICAgICAgICBhY19kaXJfc3VmZml4PSIvYGVjaG8gIiRhY19kaXIifHNlZCAncyVeXC4vJSUnYCIKKyAgICAgICAgYWNfZG90cz1gZWNobyAiJGFjX2Rpcl9zdWZmaXgifHNlZCAncyUvW14vXSolLi4vJWcnYAorICAgICAgICAjIEluIGF1dG9jb25mLTIuMTMgaXQgaXMgY2FsbGVkICRhY19naXZlbl9zcmNkaXIuCisgICAgICAgICMgSW4gYXV0b2NvbmYtMi41MCBpdCBpcyBjYWxsZWQgJHNyY2Rpci4KKyAgICAgICAgdGVzdCAtbiAiJGFjX2dpdmVuX3NyY2RpciIgfHwgYWNfZ2l2ZW5fc3JjZGlyPSIkc3JjZGlyIgorICAgICAgICBjYXNlICIkYWNfZ2l2ZW5fc3JjZGlyIiBpbgorICAgICAgICAgIC4pICB0b3Bfc3JjZGlyPWBlY2hvICRhY19kb3RzfHNlZCAncyUvJCUlJ2AgOzsKKyAgICAgICAgICAvKikgdG9wX3NyY2Rpcj0iJGFjX2dpdmVuX3NyY2RpciIgOzsKKyAgICAgICAgICAqKSAgdG9wX3NyY2Rpcj0iJGFjX2RvdHMkYWNfZ2l2ZW5fc3JjZGlyIiA7OworICAgICAgICBlc2FjCisgICAgICAgICMgVHJlYXQgYSBkaXJlY3RvcnkgYXMgYSBQTyBkaXJlY3RvcnkgaWYgYW5kIG9ubHkgaWYgaXQgaGFzIGEKKyAgICAgICAgIyBQT1RGSUxFUy5pbiBmaWxlLiBUaGlzIGFsbG93cyBwYWNrYWdlcyB0byBoYXZlIG11bHRpcGxlIFBPCisgICAgICAgICMgZGlyZWN0b3JpZXMgdW5kZXIgZGlmZmVyZW50IG5hbWVzIG9yIGluIGRpZmZlcmVudCBsb2NhdGlvbnMuCisgICAgICAgIGlmIHRlc3QgLWYgIiRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9QT1RGSUxFUy5pbiI7IHRoZW4KKyAgICAgICAgICBybSAtZiAiJGFjX2Rpci9QT1RGSUxFUyIKKyAgICAgICAgICB0ZXN0IC1uICIkYXNfbWUiICYmIGVjaG8gIiRhc19tZTogY3JlYXRpbmcgJGFjX2Rpci9QT1RGSUxFUyIgfHwgZWNobyAiY3JlYXRpbmcgJGFjX2Rpci9QT1RGSUxFUyIKKyAgICAgICAgICBjYXQgIiRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9QT1RGSUxFUy5pbiIgfCBzZWQgLWUgIi9eIy9kIiAtZSAiL15bIAldKlwkL2QiIC1lICJzLC4qLCAgICAgJHRvcF9zcmNkaXIvJiBcXFxcLCIgfCBzZWQgLWUgIlwkcy9cKC4qXCkgXFxcXC9cMS8iID4gIiRhY19kaXIvUE9URklMRVMiCisgICAgICAgICAgUE9NQUtFRklMRURFUFM9IlBPVEZJTEVTLmluIgorICAgICAgICAgICMgQUxMX0xJTkdVQVMsIFBPRklMRVMsIFVQREFURVBPRklMRVMsIERVTU1ZUE9GSUxFUywgR01PRklMRVMgZGVwZW5kCisgICAgICAgICAgIyBvbiAkYWNfZGlyIGJ1dCBkb24ndCBkZXBlbmQgb24gdXNlci1zcGVjaWZpZWQgY29uZmlndXJhdGlvbgorICAgICAgICAgICMgcGFyYW1ldGVycy4KKyAgICAgICAgICBpZiB0ZXN0IC1mICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvTElOR1VBUyI7IHRoZW4KKyAgICAgICAgICAgICMgVGhlIExJTkdVQVMgZmlsZSBjb250YWlucyB0aGUgc2V0IG9mIGF2YWlsYWJsZSBsYW5ndWFnZXMuCisgICAgICAgICAgICBpZiB0ZXN0IC1uICIkT0JTT0xFVEVfQUxMX0xJTkdVQVMiOyB0aGVuCisgICAgICAgICAgICAgIHRlc3QgLW4gIiRhc19tZSIgJiYgZWNobyAiJGFzX21lOiBzZXR0aW5nIEFMTF9MSU5HVUFTIGluIGNvbmZpZ3VyZS5pbiBpcyBvYnNvbGV0ZSIgfHwgZWNobyAic2V0dGluZyBBTExfTElOR1VBUyBpbiBjb25maWd1cmUuaW4gaXMgb2Jzb2xldGUiCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgQUxMX0xJTkdVQVNfPWBzZWQgLWUgIi9eIy9kIiAtZSAicy8jLiovLyIgIiRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9MSU5HVUFTImAKKyAgICAgICAgICAgICMgSGlkZSB0aGUgQUxMX0xJTkdVQVMgYXNzaWdtZW50IGZyb20gYXV0b21ha2UgPCAxLjUuCisgICAgICAgICAgICBldmFsICdBTExfTElOR1VBUycnPSRBTExfTElOR1VBU18nCisgICAgICAgICAgICBQT01BS0VGSUxFREVQUz0iJFBPTUFLRUZJTEVERVBTIExJTkdVQVMiCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgIyBUaGUgc2V0IG9mIGF2YWlsYWJsZSBsYW5ndWFnZXMgd2FzIGdpdmVuIGluIGNvbmZpZ3VyZS5pbi4KKyAgICAgICAgICAgICMgSGlkZSB0aGUgQUxMX0xJTkdVQVMgYXNzaWdtZW50IGZyb20gYXV0b21ha2UgPCAxLjUuCisgICAgICAgICAgICBldmFsICdBTExfTElOR1VBUycnPSRPQlNPTEVURV9BTExfTElOR1VBUycKKyAgICAgICAgICBmaQorICAgICAgICAgICMgQ29tcHV0ZSBQT0ZJTEVTCisgICAgICAgICAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChzcmNkaXIpLyQobGFuZykucG8pCisgICAgICAgICAgIyBDb21wdXRlIFVQREFURVBPRklMRVMKKyAgICAgICAgICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKGxhbmcpLnBvLXVwZGF0ZSkKKyAgICAgICAgICAjIENvbXB1dGUgRFVNTVlQT0ZJTEVTCisgICAgICAgICAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChsYW5nKS5ub3ApCisgICAgICAgICAgIyBDb21wdXRlIEdNT0ZJTEVTCisgICAgICAgICAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChzcmNkaXIpLyQobGFuZykuZ21vKQorICAgICAgICAgIGNhc2UgIiRhY19naXZlbl9zcmNkaXIiIGluCisgICAgICAgICAgICAuKSBzcmNkaXJwcmU9IDs7CisgICAgICAgICAgICAqKSBzcmNkaXJwcmU9JyQoc3JjZGlyKS8nIDs7CisgICAgICAgICAgZXNhYworICAgICAgICAgIFBPRklMRVM9CisgICAgICAgICAgVVBEQVRFUE9GSUxFUz0KKyAgICAgICAgICBEVU1NWVBPRklMRVM9CisgICAgICAgICAgR01PRklMRVM9CisgICAgICAgICAgZm9yIGxhbmcgaW4gJEFMTF9MSU5HVUFTOyBkbworICAgICAgICAgICAgUE9GSUxFUz0iJFBPRklMRVMgJHNyY2RpcnByZSRsYW5nLnBvIgorICAgICAgICAgICAgVVBEQVRFUE9GSUxFUz0iJFVQREFURVBPRklMRVMgJGxhbmcucG8tdXBkYXRlIgorICAgICAgICAgICAgRFVNTVlQT0ZJTEVTPSIkRFVNTVlQT0ZJTEVTICRsYW5nLm5vcCIKKyAgICAgICAgICAgIEdNT0ZJTEVTPSIkR01PRklMRVMgJHNyY2RpcnByZSRsYW5nLmdtbyIKKyAgICAgICAgICBkb25lCisgICAgICAgICAgIyBDQVRBTE9HUyBkZXBlbmRzIG9uIGJvdGggJGFjX2RpciBhbmQgdGhlIHVzZXIncyBMSU5HVUFTCisgICAgICAgICAgIyBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKyAgICAgICAgICBJTlNUX0xJTkdVQVM9CisgICAgICAgICAgaWYgdGVzdCAtbiAiJEFMTF9MSU5HVUFTIjsgdGhlbgorICAgICAgICAgICAgZm9yIHByZXNlbnRsYW5nIGluICRBTExfTElOR1VBUzsgZG8KKyAgICAgICAgICAgICAgdXNlaXQ9bm8KKyAgICAgICAgICAgICAgaWYgdGVzdCAiJVVOU0VUJSIgIT0gIiRMSU5HVUFTIjsgdGhlbgorICAgICAgICAgICAgICAgIGRlc2lyZWRsYW5ndWFnZXM9IiRMSU5HVUFTIgorICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZGVzaXJlZGxhbmd1YWdlcz0iJEFMTF9MSU5HVUFTIgorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICBmb3IgZGVzaXJlZGxhbmcgaW4gJGRlc2lyZWRsYW5ndWFnZXM7IGRvCisgICAgICAgICAgICAgICAgIyBVc2UgdGhlIHByZXNlbnRsYW5nIGNhdGFsb2cgaWYgZGVzaXJlZGxhbmcgaXMKKyAgICAgICAgICAgICAgICAjICAgYS4gZXF1YWwgdG8gcHJlc2VudGxhbmcsIG9yCisgICAgICAgICAgICAgICAgIyAgIGIuIGEgdmFyaWFudCBvZiBwcmVzZW50bGFuZyAoYmVjYXVzZSBpbiB0aGlzIGNhc2UsCisgICAgICAgICAgICAgICAgIyAgICAgIHByZXNlbnRsYW5nIGNhbiBiZSB1c2VkIGFzIGEgZmFsbGJhY2sgZm9yIG1lc3NhZ2VzCisgICAgICAgICAgICAgICAgIyAgICAgIHdoaWNoIGFyZSBub3QgdHJhbnNsYXRlZCBpbiB0aGUgZGVzaXJlZGxhbmcgY2F0YWxvZykuCisgICAgICAgICAgICAgICAgY2FzZSAiJGRlc2lyZWRsYW5nIiBpbgorICAgICAgICAgICAgICAgICAgIiRwcmVzZW50bGFuZyIqKSB1c2VpdD15ZXM7OworICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICBpZiB0ZXN0ICR1c2VpdCA9IHllczsgdGhlbgorICAgICAgICAgICAgICAgIElOU1RfTElOR1VBUz0iJElOU1RfTElOR1VBUyAkcHJlc2VudGxhbmciCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBkb25lCisgICAgICAgICAgZmkKKyAgICAgICAgICBDQVRBTE9HUz0KKyAgICAgICAgICBpZiB0ZXN0IC1uICIkSU5TVF9MSU5HVUFTIjsgdGhlbgorICAgICAgICAgICAgZm9yIGxhbmcgaW4gJElOU1RfTElOR1VBUzsgZG8KKyAgICAgICAgICAgICAgQ0FUQUxPR1M9IiRDQVRBTE9HUyAkbGFuZy5nbW8iCisgICAgICAgICAgICBkb25lCisgICAgICAgICAgZmkKKyAgICAgICAgICB0ZXN0IC1uICIkYXNfbWUiICYmIGVjaG8gIiRhc19tZTogY3JlYXRpbmcgJGFjX2Rpci9NYWtlZmlsZSIgfHwgZWNobyAiY3JlYXRpbmcgJGFjX2Rpci9NYWtlZmlsZSIKKyAgICAgICAgICBzZWQgLWUgIi9eUE9URklMRVMgPS9yICRhY19kaXIvUE9URklMRVMiIC1lICIvXiMgTWFrZXZhcnMvciAkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvTWFrZXZhcnMiIC1lICJzfEBQT0ZJTEVTQHwkUE9GSUxFU3xnIiAtZSAic3xAVVBEQVRFUE9GSUxFU0B8JFVQREFURVBPRklMRVN8ZyIgLWUgInN8QERVTU1ZUE9GSUxFU0B8JERVTU1ZUE9GSUxFU3xnIiAtZSAic3xAR01PRklMRVNAfCRHTU9GSUxFU3xnIiAtZSAic3xAQ0FUQUxPR1NAfCRDQVRBTE9HU3xnIiAtZSAic3xAUE9NQUtFRklMRURFUFNAfCRQT01BS0VGSUxFREVQU3xnIiAiJGFjX2Rpci9NYWtlZmlsZS5pbiIgPiAiJGFjX2Rpci9NYWtlZmlsZSIKKyAgICAgICAgICBmb3IgZiBpbiAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyIi9SdWxlcy0qOyBkbworICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGYiOyB0aGVuCisgICAgICAgICAgICAgIGNhc2UgIiRmIiBpbgorICAgICAgICAgICAgICAgICoub3JpZyB8ICouYmFrIHwgKn4pIDs7CisgICAgICAgICAgICAgICAgKikgY2F0ICIkZiIgPj4gIiRhY19kaXIvTWFrZWZpbGUiIDs7CisgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgZG9uZQorICAgICAgICBmaQorICAgICAgICA7OworICAgICAgZXNhYworICAgIGRvbmVdXSwKKyAgIFsjIENhcHR1cmUgdGhlIHZhbHVlIG9mIG9ic29sZXRlIEFMTF9MSU5HVUFTIGJlY2F1c2Ugd2UgbmVlZCBpdCB0byBjb21wdXRlCisgICAgIyBQT0ZJTEVTLCBVUERBVEVQT0ZJTEVTLCBEVU1NWVBPRklMRVMsIEdNT0ZJTEVTLCBDQVRBTE9HUy4gQnV0IGhpZGUgaXQKKyAgICAjIGZyb20gYXV0b21ha2UgPCAxLjUuCisgICAgZXZhbCAnT0JTT0xFVEVfQUxMX0xJTkdVQVMnJz0iJEFMTF9MSU5HVUFTIicKKyAgICAjIENhcHR1cmUgdGhlIHZhbHVlIG9mIExJTkdVQVMgYmVjYXVzZSB3ZSBuZWVkIGl0IHRvIGNvbXB1dGUgQ0FUQUxPR1MuCisgICAgTElOR1VBUz0iJHtMSU5HVUFTLSVVTlNFVCV9IgorICAgXSkKK10pCisKK2RubCBQb3N0cHJvY2Vzc2VzIGEgTWFrZWZpbGUgaW4gYSBkaXJlY3RvcnkgY29udGFpbmluZyBQTyBmaWxlcy4KK0FDX0RFRlVOKFtBTV9QT1NUUFJPQ0VTU19QT19NQUtFRklMRV0sCitbCisgICMgV2hlbiB0aGlzIGNvZGUgaXMgcnVuLCBpbiBjb25maWcuc3RhdHVzLCB0d28gdmFyaWFibGVzIGhhdmUgYWxyZWFkeSBiZWVuCisgICMgc2V0OgorICAjIC0gT0JTT0xFVEVfQUxMX0xJTkdVQVMgaXMgdGhlIHZhbHVlIG9mIExJTkdVQVMgc2V0IGluIGNvbmZpZ3VyZS5pbiwKKyAgIyAtIExJTkdVQVMgaXMgdGhlIHZhbHVlIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBMSU5HVUFTIGF0IGNvbmZpZ3VyZQorICAjICAgdGltZS4KKworY2hhbmdlcXVvdGUoLClkbmwKKyAgIyBBZGp1c3QgYSByZWxhdGl2ZSBzcmNkaXIuCisgIGFjX2Rpcj1gZWNobyAiJGFjX2ZpbGUifHNlZCAncyUvW14vXVteL10qJCUlJ2AKKyAgYWNfZGlyX3N1ZmZpeD0iL2BlY2hvICIkYWNfZGlyInxzZWQgJ3MlXlwuLyUlJ2AiCisgIGFjX2RvdHM9YGVjaG8gIiRhY19kaXJfc3VmZml4InxzZWQgJ3MlL1teL10qJS4uLyVnJ2AKKyAgIyBJbiBhdXRvY29uZi0yLjEzIGl0IGlzIGNhbGxlZCAkYWNfZ2l2ZW5fc3JjZGlyLgorICAjIEluIGF1dG9jb25mLTIuNTAgaXQgaXMgY2FsbGVkICRzcmNkaXIuCisgIHRlc3QgLW4gIiRhY19naXZlbl9zcmNkaXIiIHx8IGFjX2dpdmVuX3NyY2Rpcj0iJHNyY2RpciIKKyAgY2FzZSAiJGFjX2dpdmVuX3NyY2RpciIgaW4KKyAgICAuKSAgdG9wX3NyY2Rpcj1gZWNobyAkYWNfZG90c3xzZWQgJ3MlLyQlJSdgIDs7CisgICAgLyopIHRvcF9zcmNkaXI9IiRhY19naXZlbl9zcmNkaXIiIDs7CisgICAgKikgIHRvcF9zcmNkaXI9IiRhY19kb3RzJGFjX2dpdmVuX3NyY2RpciIgOzsKKyAgZXNhYworCisgICMgRmluZCBhIHdheSB0byBlY2hvIHN0cmluZ3Mgd2l0aG91dCBpbnRlcnByZXRpbmcgYmFja3NsYXNoLgorICBpZiB0ZXN0ICJYYChlY2hvICdcdCcpIDI+L2Rldi9udWxsYCIgPSAnWFx0JzsgdGhlbgorICAgIGd0X2VjaG89J2VjaG8nCisgIGVsc2UKKyAgICBpZiB0ZXN0ICJYYChwcmludGYgJyVzXG4nICdcdCcpIDI+L2Rldi9udWxsYCIgPSAnWFx0JzsgdGhlbgorICAgICAgZ3RfZWNobz0ncHJpbnRmICVzXG4nCisgICAgZWxzZQorICAgICAgZWNob19mdW5jICgpIHsKKyAgICAgICAgY2F0IDw8RU9UCiskKgorRU9UCisgICAgICB9CisgICAgICBndF9lY2hvPSdlY2hvX2Z1bmMnCisgICAgZmkKKyAgZmkKKworICAjIEEgc2VkIHNjcmlwdCB0aGF0IGV4dHJhY3RzIHRoZSB2YWx1ZSBvZiBWQVJJQUJMRSBmcm9tIGEgTWFrZWZpbGUuCisgIHNlZF94X3ZhcmlhYmxlPScKKyMgVGVzdCBpZiB0aGUgaG9sZCBzcGFjZSBpcyBlbXB0eS4KK3gKK3MvUC9QLworeAordGEKKyMgWWVzIGl0IHdhcyBlbXB0eS4gTG9vayBpZiB3ZSBoYXZlIHRoZSBleHBlY3RlZCB2YXJpYWJsZSBkZWZpbml0aW9uLgorL15bCSBdKlZBUklBQkxFWwkgXSo9L3sKKyAgIyBTZWVuIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSB2YXJpYWJsZSBkZWZpbml0aW9uLgorICBzL15bCSBdKlZBUklBQkxFWwkgXSo9Ly8KKyAgYmEKK30KK2JkCis6YQorIyBIZXJlIHdlIGFyZSBwcm9jZXNzaW5nIGEgbGluZSBmcm9tIHRoZSB2YXJpYWJsZSBkZWZpbml0aW9uLgorIyBSZW1vdmUgY29tbWVudCwgbW9yZSBwcmVjaXNlbHkgcmVwbGFjZSBpdCB3aXRoIGEgc3BhY2UuCitzLyMuKiQvIC8KKyMgU2VlIGlmIHRoZSBsaW5lIGVuZHMgaW4gYSBiYWNrc2xhc2guCit0YgorOmIKK3MvXFwkLy8KKyMgUHJpbnQgdGhlIGxpbmUsIHdpdGhvdXQgdGhlIHRyYWlsaW5nIGJhY2tzbGFzaC4KK3AKK3RjCisjIFRoZXJlIHdhcyBubyB0cmFpbGluZyBiYWNrc2xhc2guIFRoZSBlbmQgb2YgdGhlIHZhcmlhYmxlIGRlZmluaXRpb24gaXMKKyMgcmVhY2hlZC4gQ2xlYXIgdGhlIGhvbGQgc3BhY2UuCitzL14uKiQvLworeAorYmQKKzpjCisjIEEgdHJhaWxpbmcgYmFja3NsYXNoIG1lYW5zIHRoYXQgdGhlIHZhcmlhYmxlIGRlZmluaXRpb24gY29udGludWVzIGluIHRoZQorIyBuZXh0IGxpbmUuIFB1dCBhIG5vbmVtcHR5IHN0cmluZyBpbnRvIHRoZSBob2xkIHNwYWNlIHRvIGluZGljYXRlIHRoaXMuCitzL14uKiQvUC8KK3gKKzpkCisnCitjaGFuZ2VxdW90ZShbLF0pZG5sCisKKyAgIyBTZXQgUE9URklMRVMgdG8gdGhlIHZhbHVlIG9mIHRoZSBNYWtlZmlsZSB2YXJpYWJsZSBQT1RGSUxFUy4KKyAgc2VkX3hfUE9URklMRVM9YCRndF9lY2hvICIkc2VkX3hfdmFyaWFibGUiIHwgc2VkIC1lICcvXiAqIy9kJyAtZSAncy9WQVJJQUJMRS9QT1RGSUxFUy9nJ2AKKyAgUE9URklMRVM9YHNlZCAtbiAtZSAiJHNlZF94X1BPVEZJTEVTIiA8ICIkYWNfZmlsZSJgCisgICMgQ29tcHV0ZSBQT1RGSUxFU19ERVBTIGFzCisgICMgICAkKGZvcmVhY2ggZmlsZSwgJChQT1RGSUxFUyksICQodG9wX3NyY2RpcikvJChmaWxlKSkKKyAgUE9URklMRVNfREVQUz0KKyAgZm9yIGZpbGUgaW4gJFBPVEZJTEVTOyBkbworICAgIFBPVEZJTEVTX0RFUFM9IiRQT1RGSUxFU19ERVBTICInJCh0b3Bfc3JjZGlyKS8nIiRmaWxlIgorICBkb25lCisgIFBPTUFLRUZJTEVERVBTPSIiCisKKyAgaWYgdGVzdCAtbiAiJE9CU09MRVRFX0FMTF9MSU5HVUFTIjsgdGhlbgorICAgIHRlc3QgLW4gIiRhc19tZSIgJiYgZWNobyAiJGFzX21lOiBzZXR0aW5nIEFMTF9MSU5HVUFTIGluIGNvbmZpZ3VyZS5pbiBpcyBvYnNvbGV0ZSIgfHwgZWNobyAic2V0dGluZyBBTExfTElOR1VBUyBpbiBjb25maWd1cmUuaW4gaXMgb2Jzb2xldGUiCisgIGZpCisgIGlmIHRlc3QgLWYgIiRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9MSU5HVUFTIjsgdGhlbgorICAgICMgVGhlIExJTkdVQVMgZmlsZSBjb250YWlucyB0aGUgc2V0IG9mIGF2YWlsYWJsZSBsYW5ndWFnZXMuCisgICAgQUxMX0xJTkdVQVNfPWBzZWQgLWUgIi9eIy9kIiAtZSAicy8jLiovLyIgIiRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9MSU5HVUFTImAKKyAgICBQT01BS0VGSUxFREVQUz0iJFBPTUFLRUZJTEVERVBTIExJTkdVQVMiCisgIGVsc2UKKyAgICAjIFNldCBBTExfTElOR1VBUyB0byB0aGUgdmFsdWUgb2YgdGhlIE1ha2VmaWxlIHZhcmlhYmxlIExJTkdVQVMuCisgICAgc2VkX3hfTElOR1VBUz1gJGd0X2VjaG8gIiRzZWRfeF92YXJpYWJsZSIgfCBzZWQgLWUgJy9eICojL2QnIC1lICdzL1ZBUklBQkxFL0xJTkdVQVMvZydgCisgICAgQUxMX0xJTkdVQVNfPWBzZWQgLW4gLWUgIiRzZWRfeF9MSU5HVUFTIiA8ICIkYWNfZmlsZSJgCisgIGZpCisgICMgSGlkZSB0aGUgQUxMX0xJTkdVQVMgYXNzaWdtZW50IGZyb20gYXV0b21ha2UgPCAxLjUuCisgIGV2YWwgJ0FMTF9MSU5HVUFTJyc9JEFMTF9MSU5HVUFTXycKKyAgIyBDb21wdXRlIFBPRklMRVMKKyAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChzcmNkaXIpLyQobGFuZykucG8pCisgICMgQ29tcHV0ZSBVUERBVEVQT0ZJTEVTCisgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQobGFuZykucG8tdXBkYXRlKQorICAjIENvbXB1dGUgRFVNTVlQT0ZJTEVTCisgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQobGFuZykubm9wKQorICAjIENvbXB1dGUgR01PRklMRVMKKyAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChzcmNkaXIpLyQobGFuZykuZ21vKQorICAjIENvbXB1dGUgUFJPUEVSVElFU0ZJTEVTCisgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQodG9wX3NyY2RpcikvJChET01BSU4pXyQobGFuZykucHJvcGVydGllcykKKyAgIyBDb21wdXRlIENMQVNTRklMRVMKKyAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJCh0b3Bfc3JjZGlyKS8kKERPTUFJTilfJChsYW5nKS5jbGFzcykKKyAgIyBDb21wdXRlIFFNRklMRVMKKyAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChzcmNkaXIpLyQobGFuZykucW0pCisgICMgQ29tcHV0ZSBNU0dGSUxFUworICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHNyY2RpcikvJChmcm9iICQobGFuZykpLm1zZykKKyAgIyBDb21wdXRlIFJFU09VUkNFU0RMTEZJTEVTCisgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQoc3JjZGlyKS8kKGZyb2IgJChsYW5nKSkvJChET01BSU4pLnJlc291cmNlcy5kbGwpCisgIGNhc2UgIiRhY19naXZlbl9zcmNkaXIiIGluCisgICAgLikgc3JjZGlycHJlPSA7OworICAgICopIHNyY2RpcnByZT0nJChzcmNkaXIpLycgOzsKKyAgZXNhYworICBQT0ZJTEVTPQorICBVUERBVEVQT0ZJTEVTPQorICBEVU1NWVBPRklMRVM9CisgIEdNT0ZJTEVTPQorICBQUk9QRVJUSUVTRklMRVM9CisgIENMQVNTRklMRVM9CisgIFFNRklMRVM9CisgIE1TR0ZJTEVTPQorICBSRVNPVVJDRVNETExGSUxFUz0KKyAgZm9yIGxhbmcgaW4gJEFMTF9MSU5HVUFTOyBkbworICAgIFBPRklMRVM9IiRQT0ZJTEVTICRzcmNkaXJwcmUkbGFuZy5wbyIKKyAgICBVUERBVEVQT0ZJTEVTPSIkVVBEQVRFUE9GSUxFUyAkbGFuZy5wby11cGRhdGUiCisgICAgRFVNTVlQT0ZJTEVTPSIkRFVNTVlQT0ZJTEVTICRsYW5nLm5vcCIKKyAgICBHTU9GSUxFUz0iJEdNT0ZJTEVTICRzcmNkaXJwcmUkbGFuZy5nbW8iCisgICAgUFJPUEVSVElFU0ZJTEVTPSIkUFJPUEVSVElFU0ZJTEVTIFwkKHRvcF9zcmNkaXIpL1wkKERPTUFJTilfJGxhbmcucHJvcGVydGllcyIKKyAgICBDTEFTU0ZJTEVTPSIkQ0xBU1NGSUxFUyBcJCh0b3Bfc3JjZGlyKS9cJChET01BSU4pXyRsYW5nLmNsYXNzIgorICAgIFFNRklMRVM9IiRRTUZJTEVTICRzcmNkaXJwcmUkbGFuZy5xbSIKKyAgICBmcm9iYmVkbGFuZz1gZWNobyAkbGFuZyB8IHNlZCAtZSAncy9cLi4qJC8vJyAtZSAneS9BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei8nYAorICAgIE1TR0ZJTEVTPSIkTVNHRklMRVMgJHNyY2RpcnByZSRmcm9iYmVkbGFuZy5tc2ciCisgICAgZnJvYmJlZGxhbmc9YGVjaG8gJGxhbmcgfCBzZWQgLWUgJ3MvXy8tL2cnIC1lICdzL15zci1DUy9zci1TUC8nIC1lICdzL0BsYXRpbiQvLUxhdG4vJyAtZSAncy9AY3lyaWxsaWMkLy1DeXJsLycgLWUgJ3MvXnNyLVNQJC9zci1TUC1MYXRuLycgLWUgJ3MvXnV6LVVaJC91ei1VWi1MYXRuLydgCisgICAgUkVTT1VSQ0VTRExMRklMRVM9IiRSRVNPVVJDRVNETExGSUxFUyAkc3JjZGlycHJlJGZyb2JiZWRsYW5nL1wkKERPTUFJTikucmVzb3VyY2VzLmRsbCIKKyAgZG9uZQorICAjIENBVEFMT0dTIGRlcGVuZHMgb24gYm90aCAkYWNfZGlyIGFuZCB0aGUgdXNlcidzIExJTkdVQVMKKyAgIyBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKyAgSU5TVF9MSU5HVUFTPQorICBpZiB0ZXN0IC1uICIkQUxMX0xJTkdVQVMiOyB0aGVuCisgICAgZm9yIHByZXNlbnRsYW5nIGluICRBTExfTElOR1VBUzsgZG8KKyAgICAgIHVzZWl0PW5vCisgICAgICBpZiB0ZXN0ICIlVU5TRVQlIiAhPSAiJExJTkdVQVMiOyB0aGVuCisgICAgICAgIGRlc2lyZWRsYW5ndWFnZXM9IiRMSU5HVUFTIgorICAgICAgZWxzZQorICAgICAgICBkZXNpcmVkbGFuZ3VhZ2VzPSIkQUxMX0xJTkdVQVMiCisgICAgICBmaQorICAgICAgZm9yIGRlc2lyZWRsYW5nIGluICRkZXNpcmVkbGFuZ3VhZ2VzOyBkbworICAgICAgICAjIFVzZSB0aGUgcHJlc2VudGxhbmcgY2F0YWxvZyBpZiBkZXNpcmVkbGFuZyBpcworICAgICAgICAjICAgYS4gZXF1YWwgdG8gcHJlc2VudGxhbmcsIG9yCisgICAgICAgICMgICBiLiBhIHZhcmlhbnQgb2YgcHJlc2VudGxhbmcgKGJlY2F1c2UgaW4gdGhpcyBjYXNlLAorICAgICAgICAjICAgICAgcHJlc2VudGxhbmcgY2FuIGJlIHVzZWQgYXMgYSBmYWxsYmFjayBmb3IgbWVzc2FnZXMKKyAgICAgICAgIyAgICAgIHdoaWNoIGFyZSBub3QgdHJhbnNsYXRlZCBpbiB0aGUgZGVzaXJlZGxhbmcgY2F0YWxvZykuCisgICAgICAgIGNhc2UgIiRkZXNpcmVkbGFuZyIgaW4KKyAgICAgICAgICAiJHByZXNlbnRsYW5nIiopIHVzZWl0PXllczs7CisgICAgICAgIGVzYWMKKyAgICAgIGRvbmUKKyAgICAgIGlmIHRlc3QgJHVzZWl0ID0geWVzOyB0aGVuCisgICAgICAgIElOU1RfTElOR1VBUz0iJElOU1RfTElOR1VBUyAkcHJlc2VudGxhbmciCisgICAgICBmaQorICAgIGRvbmUKKyAgZmkKKyAgQ0FUQUxPR1M9CisgIEpBVkFDQVRBTE9HUz0KKyAgUVRDQVRBTE9HUz0KKyAgVENMQ0FUQUxPR1M9CisgIENTSEFSUENBVEFMT0dTPQorICBpZiB0ZXN0IC1uICIkSU5TVF9MSU5HVUFTIjsgdGhlbgorICAgIGZvciBsYW5nIGluICRJTlNUX0xJTkdVQVM7IGRvCisgICAgICBDQVRBTE9HUz0iJENBVEFMT0dTICRsYW5nLmdtbyIKKyAgICAgIEpBVkFDQVRBTE9HUz0iJEpBVkFDQVRBTE9HUyBcJChET01BSU4pXyRsYW5nLnByb3BlcnRpZXMiCisgICAgICBRVENBVEFMT0dTPSIkUVRDQVRBTE9HUyAkbGFuZy5xbSIKKyAgICAgIGZyb2JiZWRsYW5nPWBlY2hvICRsYW5nIHwgc2VkIC1lICdzL1wuLiokLy8nIC1lICd5L0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaL2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6LydgCisgICAgICBUQ0xDQVRBTE9HUz0iJFRDTENBVEFMT0dTICRmcm9iYmVkbGFuZy5tc2ciCisgICAgICBmcm9iYmVkbGFuZz1gZWNobyAkbGFuZyB8IHNlZCAtZSAncy9fLy0vZycgLWUgJ3MvXnNyLUNTL3NyLVNQLycgLWUgJ3MvQGxhdGluJC8tTGF0bi8nIC1lICdzL0BjeXJpbGxpYyQvLUN5cmwvJyAtZSAncy9ec3ItU1AkL3NyLVNQLUxhdG4vJyAtZSAncy9edXotVVokL3V6LVVaLUxhdG4vJ2AKKyAgICAgIENTSEFSUENBVEFMT0dTPSIkQ1NIQVJQQ0FUQUxPR1MgJGZyb2JiZWRsYW5nL1wkKERPTUFJTikucmVzb3VyY2VzLmRsbCIKKyAgICBkb25lCisgIGZpCisKKyAgc2VkIC1lICJzfEBQT1RGSUxFU19ERVBTQHwkUE9URklMRVNfREVQU3xnIiAtZSAic3xAUE9GSUxFU0B8JFBPRklMRVN8ZyIgLWUgInN8QFVQREFURVBPRklMRVNAfCRVUERBVEVQT0ZJTEVTfGciIC1lICJzfEBEVU1NWVBPRklMRVNAfCREVU1NWVBPRklMRVN8ZyIgLWUgInN8QEdNT0ZJTEVTQHwkR01PRklMRVN8ZyIgLWUgInN8QFBST1BFUlRJRVNGSUxFU0B8JFBST1BFUlRJRVNGSUxFU3xnIiAtZSAic3xAQ0xBU1NGSUxFU0B8JENMQVNTRklMRVN8ZyIgLWUgInN8QFFNRklMRVNAfCRRTUZJTEVTfGciIC1lICJzfEBNU0dGSUxFU0B8JE1TR0ZJTEVTfGciIC1lICJzfEBSRVNPVVJDRVNETExGSUxFU0B8JFJFU09VUkNFU0RMTEZJTEVTfGciIC1lICJzfEBDQVRBTE9HU0B8JENBVEFMT0dTfGciIC1lICJzfEBKQVZBQ0FUQUxPR1NAfCRKQVZBQ0FUQUxPR1N8ZyIgLWUgInN8QFFUQ0FUQUxPR1NAfCRRVENBVEFMT0dTfGciIC1lICJzfEBUQ0xDQVRBTE9HU0B8JFRDTENBVEFMT0dTfGciIC1lICJzfEBDU0hBUlBDQVRBTE9HU0B8JENTSEFSUENBVEFMT0dTfGciIC1lICdzLF4jZGlzdGRpcjosZGlzdGRpcjosJyA8ICIkYWNfZmlsZSIgPiAiJGFjX2ZpbGUudG1wIgorICBpZiBncmVwIC1sICdAVENMQ0FUQUxPR1NAJyAiJGFjX2ZpbGUiID4gL2Rldi9udWxsOyB0aGVuCisgICAgIyBBZGQgZGVwZW5kZW5jaWVzIHRoYXQgY2Fubm90IGJlIGZvcm11bGF0ZWQgYXMgYSBzaW1wbGUgc3VmZml4IHJ1bGUuCisgICAgZm9yIGxhbmcgaW4gJEFMTF9MSU5HVUFTOyBkbworICAgICAgZnJvYmJlZGxhbmc9YGVjaG8gJGxhbmcgfCBzZWQgLWUgJ3MvXC4uKiQvLycgLWUgJ3kvQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVovYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXovJ2AKKyAgICAgIGNhdCA+PiAiJGFjX2ZpbGUudG1wIiA8PEVPRgorJGZyb2JiZWRsYW5nLm1zZzogJGxhbmcucG8KKwlAZWNobyAiXCQoTVNHRk1UKSAtYyAtLXRjbCAtZCBcJChzcmNkaXIpIC1sICRsYW5nICRzcmNkaXJwcmUkbGFuZy5wbyI7IFwKKwlcJChNU0dGTVQpIC1jIC0tdGNsIC1kICJcJChzcmNkaXIpIiAtbCAkbGFuZyAkc3JjZGlycHJlJGxhbmcucG8gfHwgeyBybSAtZiAiXCQoc3JjZGlyKS8kZnJvYmJlZGxhbmcubXNnIjsgZXhpdCAxOyB9CitFT0YKKyAgICBkb25lCisgIGZpCisgIGlmIGdyZXAgLWwgJ0BDU0hBUlBDQVRBTE9HU0AnICIkYWNfZmlsZSIgPiAvZGV2L251bGw7IHRoZW4KKyAgICAjIEFkZCBkZXBlbmRlbmNpZXMgdGhhdCBjYW5ub3QgYmUgZm9ybXVsYXRlZCBhcyBhIHNpbXBsZSBzdWZmaXggcnVsZS4KKyAgICBmb3IgbGFuZyBpbiAkQUxMX0xJTkdVQVM7IGRvCisgICAgICBmcm9iYmVkbGFuZz1gZWNobyAkbGFuZyB8IHNlZCAtZSAncy9fLy0vZycgLWUgJ3MvXnNyLUNTL3NyLVNQLycgLWUgJ3MvQGxhdGluJC8tTGF0bi8nIC1lICdzL0BjeXJpbGxpYyQvLUN5cmwvJyAtZSAncy9ec3ItU1AkL3NyLVNQLUxhdG4vJyAtZSAncy9edXotVVokL3V6LVVaLUxhdG4vJ2AKKyAgICAgIGNhdCA+PiAiJGFjX2ZpbGUudG1wIiA8PEVPRgorJGZyb2JiZWRsYW5nL1wkKERPTUFJTikucmVzb3VyY2VzLmRsbDogJGxhbmcucG8KKwlAZWNobyAiXCQoTVNHRk1UKSAtYyAtLWNzaGFycCAtZCBcJChzcmNkaXIpIC1sICRsYW5nICRzcmNkaXJwcmUkbGFuZy5wbyAtciBcJChET01BSU4pIjsgXAorCVwkKE1TR0ZNVCkgLWMgLS1jc2hhcnAgLWQgIlwkKHNyY2RpcikiIC1sICRsYW5nICRzcmNkaXJwcmUkbGFuZy5wbyAtciAiXCQoRE9NQUlOKSIgfHwgeyBybSAtZiAiXCQoc3JjZGlyKS8kZnJvYmJlZGxhbmcubXNnIjsgZXhpdCAxOyB9CitFT0YKKyAgICBkb25lCisgIGZpCisgIGlmIHRlc3QgLW4gIiRQT01BS0VGSUxFREVQUyI7IHRoZW4KKyAgICBjYXQgPj4gIiRhY19maWxlLnRtcCIgPDxFT0YKK01ha2VmaWxlOiAkUE9NQUtFRklMRURFUFMKK0VPRgorICBmaQorICBtdiAiJGFjX2ZpbGUudG1wIiAiJGFjX2ZpbGUiCitdKQorCitkbmwgSW5pdGlhbGl6ZXMgdGhlIGFjY3VtdWxhdG9yIHVzZWQgYnkgQU1fWEdFVFRFWFRfT1BUSU9OLgorQUNfREVGVU4oW0FNX1hHRVRURVhUX09QVElPTl9JTklUXSwKK1sKKyAgWEdFVFRFWFRfRVhUUkFfT1BUSU9OUz0KK10pCisKK2RubCBSZWdpc3RlcnMgYW4gb3B0aW9uIHRvIGJlIHBhc3NlZCB0byB4Z2V0dGV4dCBpbiB0aGUgcG8gc3ViZGlyZWN0b3J5LgorQUNfREVGVU4oW0FNX1hHRVRURVhUX09QVElPTl0sCitbCisgIEFDX1JFUVVJUkUoW0FNX1hHRVRURVhUX09QVElPTl9JTklUXSkKKyAgWEdFVFRFWFRfRVhUUkFfT1BUSU9OUz0iJFhHRVRURVhUX0VYVFJBX09QVElPTlMgJDEiCitdKQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2NvbW1vbi9wcm9ndGVzdC5tNCBiL2F2YWhpLTAuNi4zMS9jb21tb24vcHJvZ3Rlc3QubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ4MDRhYwotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9jb21tb24vcHJvZ3Rlc3QubTQKQEAgLTAsMCArMSw5MiBAQAorIyBwcm9ndGVzdC5tNCBzZXJpYWwgNiAoZ2V0dGV4dC0wLjE4KQorZG5sIENvcHlyaWdodCAoQykgMTk5Ni0yMDAzLCAyMDA1LCAyMDA4LTIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KK2RubAorZG5sIFRoaXMgZmlsZSBjYW4gY2FuIGJlIHVzZWQgaW4gcHJvamVjdHMgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgdW5kZXIKK2RubCB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugb3IgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCitkbmwgTGljZW5zZSBidXQgd2hpY2ggc3RpbGwgd2FudCB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHRoZSBHTlUgZ2V0dGV4dAorZG5sIGZ1bmN0aW9uYWxpdHkuCitkbmwgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYWN0dWFsIGNvZGUgb2YgdGhlIEdOVSBnZXR0ZXh0IGxpYnJhcnkgaXMgY292ZXJlZAorZG5sIGJ5IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhbmQgdGhlIHJlc3Qgb2YgdGhlIEdOVQorZG5sIGdldHRleHQgcGFja2FnZSBwYWNrYWdlIGlzIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorZG5sIFRoZXkgYXJlICpub3QqIGluIHRoZSBwdWJsaWMgZG9tYWluLgorCitkbmwgQXV0aG9yczoKK2RubCAgIFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGN5Z251cy5jb20+LCAxOTk2LgorCitBQ19QUkVSRVEoWzIuNTBdKQorCisjIFNlYXJjaCBwYXRoIGZvciBhIHByb2dyYW0gd2hpY2ggcGFzc2VzIHRoZSBnaXZlbiB0ZXN0LgorCitkbmwgQU1fUEFUSF9QUk9HX1dJVEhfVEVTVChWQVJJQUJMRSwgUFJPRy1UTy1DSEVDSy1GT1IsCitkbmwgICBURVNULVBFUkZPUk1FRC1PTi1GT1VORF9QUk9HUkFNIFssIFZBTFVFLUlGLU5PVC1GT1VORCBbLCBQQVRIXV0pCitBQ19ERUZVTihbQU1fUEFUSF9QUk9HX1dJVEhfVEVTVF0sCitbCisjIFByZXBhcmUgUEFUSF9TRVBBUkFUT1IuCisjIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KK2lmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCisgIGVjaG8gIiMhIC9iaW4vc2giID5jb25mJCQuc2gKKyAgZWNobyAgImV4aXQgMCIgICA+PmNvbmYkJC5zaAorICBjaG1vZCAreCBjb25mJCQuc2gKKyAgaWYgKFBBVEg9Ii9ub25leGlzdGVudDsuIjsgY29uZiQkLnNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICBQQVRIX1NFUEFSQVRPUj0nOycKKyAgZWxzZQorICAgIFBBVEhfU0VQQVJBVE9SPToKKyAgZmkKKyAgcm0gLWYgY29uZiQkLnNoCitmaQorCisjIEZpbmQgb3V0IGhvdyB0byB0ZXN0IGZvciBleGVjdXRhYmxlIGZpbGVzLiBEb24ndCB1c2UgYSB6ZXJvLWJ5dGUgZmlsZSwKKyMgYXMgc3lzdGVtcyBtYXkgdXNlIG1ldGhvZHMgb3RoZXIgdGhhbiBtb2RlIGJpdHMgdG8gZGV0ZXJtaW5lIGV4ZWN1dGFiaWxpdHkuCitjYXQgPmNvbmYkJC5maWxlIDw8X0FTRU9GCisjISAvYmluL3NoCitleGl0IDAKK19BU0VPRgorY2htb2QgK3ggY29uZiQkLmZpbGUKK2lmIHRlc3QgLXggY29uZiQkLmZpbGUgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFjX2V4ZWN1dGFibGVfcD0idGVzdCAteCIKK2Vsc2UKKyAgYWNfZXhlY3V0YWJsZV9wPSJ0ZXN0IC1mIgorZmkKK3JtIC1mIGNvbmYkJC5maWxlCisKKyMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJDIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICQyOyBhY193b3JkPVskXTIKK0FDX01TR19DSEVDS0lORyhbZm9yICRhY193b3JkXSkKK0FDX0NBQ0hFX1ZBTChbYWNfY3ZfcGF0aF8kMV0sCitbY2FzZSAiWyRdJDEiIGluCisgIFtbXFwvXV0qIHwgPzpbW1xcL11dKikKKyAgICBhY19jdl9wYXRoXyQxPSJbJF0kMSIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgICAgOzsKKyAgKikKKyAgICBhY19zYXZlX0lGUz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgICBmb3IgYWNfZGlyIGluIGlmZWxzZShbJDVdLCAsICRQQVRILCBbJDVdKTsgZG8KKyAgICAgIElGUz0iJGFjX3NhdmVfSUZTIgorICAgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgICAgICBpZiAkYWNfZXhlY3V0YWJsZV9wICIkYWNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgICAgICAgIGVjaG8gIiRhc19tZTogdHJ5aW5nICRhY19kaXIvJGFjX3dvcmQuLi4iID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgICAgICBpZiBbJDNdOyB0aGVuCisgICAgICAgICAgICBhY19jdl9wYXRoXyQxPSIkYWNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICAgICAgICAgYnJlYWsgMgorICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICBkb25lCisgICAgZG9uZQorICAgIElGUz0iJGFjX3NhdmVfSUZTIgorZG5sIElmIG5vIDR0aCBhcmcgaXMgZ2l2ZW4sIGxlYXZlIHRoZSBjYWNoZSB2YXJpYWJsZSB1bnNldCwKK2RubCBzbyBBQ19QQVRIX1BST0dTIHdpbGwga2VlcCBsb29raW5nLgoraWZlbHNlKFskNF0sICwgLCBbICB0ZXN0IC16ICJbJF1hY19jdl9wYXRoXyQxIiAmJiBhY19jdl9wYXRoXyQxPSIkNCIKK10pZG5sCisgICAgOzsKK2VzYWNdKWRubAorJDE9IiRhY19jdl9wYXRoXyQxIgoraWYgdGVzdCBpZmVsc2UoWyQ0XSwgLCBbLW4gIlskXSQxIl0sIFsiWyRdJDEiICE9ICIkNCJdKTsgdGhlbgorICBBQ19NU0dfUkVTVUxUKFskXVskMV0pCitlbHNlCisgIEFDX01TR19SRVNVTFQoW25vXSkKK2ZpCitBQ19TVUJTVChbJDFdKWRubAorXSkKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9jb21tb24vcHl0aG9uLm00IGIvYXZhaGktMC42LjMxL2NvbW1vbi9weXRob24ubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFjNTI2NgotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9jb21tb24vcHl0aG9uLm00CkBAIC0wLDAgKzEsNjIgQEAKKyMjIHRoaXMgb25lIGlzIGNvbW1vbmx5IHVzZWQgd2l0aCBBTV9QQVRIX1BZVEhPTkRJUiAuLi4KK2RubCBBTV9DSEVDS19QWU1PRChNT0ROQU1FIFssU1lNQk9MIFssQUNUSU9OLUlGLUZPVU5EIFssQUNUSU9OLUlGLU5PVC1GT1VORF1dXSkKK2RubCBDaGVjayBpZiBhIG1vZHVsZSBjb250YWluaW5nIGEgZ2l2ZW4gc3ltYm9sIGlzIHZpc2libGUgdG8gcHl0aG9uLgorQUNfREVGVU4oW0FNX0NIRUNLX1BZTU9EXSwKK1tBQ19SRVFVSVJFKFtBTV9QQVRIX1BZVEhPTl0pCitweV9tb2RfdmFyPWBlY2hvICQxWydfJ10kMiB8IHNlZCAneSUuLystJV9fcF8lJ2AKK0FDX01TR19DSEVDS0lORyhmb3IgaWZlbHNlKFskMl0sW10sLFskMiBpbiBdKXB5dGhvbiBtb2R1bGUgJDEpCitBQ19DQUNIRV9WQUwocHlfY3ZfbW9kXyRweV9tb2RfdmFyLCBbCitpZmVsc2UoWyQyXSxbXSwgW3Byb2c9IgoraW1wb3J0IHN5cwordHJ5OgorICAgICAgICBpbXBvcnQgJDEKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgc3lzLmV4aXQoMSkKK2V4Y2VwdDoKKyAgICAgICAgc3lzLmV4aXQoMCkKK3N5cy5leGl0KDApIl0sIFtwcm9nPSIKK2ltcG9ydCAkMQorJDEuJDIiXSkKK2lmICRQWVRIT04gLWMgIiRwcm9nIiAxPiZBQ19GRF9DQyAyPiZBQ19GRF9DQworICB0aGVuCisgICAgZXZhbCAicHlfY3ZfbW9kXyRweV9tb2RfdmFyPXllcyIKKyAgZWxzZQorICAgIGV2YWwgInB5X2N2X21vZF8kcHlfbW9kX3Zhcj1ubyIKKyAgZmkKK10pCitweV92YWw9YGV2YWwgImVjaG8gXGBlY2hvICckcHlfY3ZfbW9kXyckcHlfbW9kX3ZhclxgImAKK2lmIHRlc3QgIngkcHlfdmFsIiAhPSB4bm87IHRoZW4KKyAgQUNfTVNHX1JFU1VMVCh5ZXMpCisgIGlmZWxzZShbJDNdLCBbXSwsIFskMworXSlkbmwKK2Vsc2UKKyAgQUNfTVNHX1JFU1VMVChubykKKyAgaWZlbHNlKFskNF0sIFtdLCwgWyQ0CitdKWRubAorZmkKK10pCisKK2RubCBhIG1hY3JvIHRvIGNoZWNrIGZvciBhYmlsaXR5IHRvIGNyZWF0ZSBweXRob24gZXh0ZW5zaW9ucworZG5sICBBTV9DSEVDS19QWVRIT05fSEVBREVSUyhbQUNUSU9OLUlGLVBPU1NJQkxFXSwgW0FDVElPTi1JRi1OT1QtUE9TU0lCTEVdKQorZG5sIGZ1bmN0aW9uIGFsc28gZGVmaW5lcyBQWVRIT05fSU5DTFVERVMKK0FDX0RFRlVOKFtBTV9DSEVDS19QWVRIT05fSEVBREVSU10sCitbQUNfUkVRVUlSRShbQU1fUEFUSF9QWVRIT05dKQorQUNfTVNHX0NIRUNLSU5HKGZvciBoZWFkZXJzIHJlcXVpcmVkIHRvIGNvbXBpbGUgcHl0aG9uIGV4dGVuc2lvbnMpCitkbmwgZGVkdWNlIFBZVEhPTl9JTkNMVURFUworcHlfcHJlZml4PWAkUFlUSE9OIC1jICJpbXBvcnQgc3lzOyBwcmludCBzeXMucHJlZml4ImAKK3B5X2V4ZWNfcHJlZml4PWAkUFlUSE9OIC1jICJpbXBvcnQgc3lzOyBwcmludCBzeXMuZXhlY19wcmVmaXgiYAorUFlUSE9OX0lOQ0xVREVTPSItSSR7cHlfcHJlZml4fS9pbmNsdWRlL3B5dGhvbiR7UFlUSE9OX1ZFUlNJT059IgoraWYgdGVzdCAiJHB5X3ByZWZpeCIgIT0gIiRweV9leGVjX3ByZWZpeCI7IHRoZW4KKyAgUFlUSE9OX0lOQ0xVREVTPSIkUFlUSE9OX0lOQ0xVREVTIC1JJHtweV9leGVjX3ByZWZpeH0vaW5jbHVkZS9weXRob24ke1BZVEhPTl9WRVJTSU9OfSIKK2ZpCitBQ19TVUJTVChQWVRIT05fSU5DTFVERVMpCitkbmwgY2hlY2sgaWYgdGhlIGhlYWRlcnMgZXhpc3Q6CitzYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCitDUFBGTEFHUz0iJENQUEZMQUdTICRQWVRIT05fSU5DTFVERVMiCitBQ19UUllfQ1BQKFsjaW5jbHVkZSA8UHl0aG9uLmg+XSxkbmwKK1tBQ19NU0dfUkVTVUxUKGZvdW5kKQorJDFdLGRubAorW0FDX01TR19SRVNVTFQobm90IGZvdW5kKQorJDJdKQorQ1BQRkxBR1M9IiRzYXZlX0NQUEZMQUdTIgorXSkKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9jb21waWxlIGIvYXZhaGktMC42LjMxL2NvbXBpbGUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzAwOTZhNwotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9jb21waWxlCkBAIC0wLDAgKzEsMTQzIEBACisjISAvYmluL3NoCisjIFdyYXBwZXIgZm9yIGNvbXBpbGVycyB3aGljaCBkbyBub3QgdW5kZXJzdGFuZCBgLWMgLW8nLgorCitzY3JpcHR2ZXJzaW9uPTIwMDktMTAtMDYuMjA7ICMgVVRDCisKKyMgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA5ICBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4KKyMgV3JpdHRlbiBieSBUb20gVHJvbWV5IDx0cm9tZXlAY3lnbnVzLmNvbT4uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKKyMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCisjIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCisjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworIyBUaGlzIGZpbGUgaXMgbWFpbnRhaW5lZCBpbiBBdXRvbWFrZSwgcGxlYXNlIHJlcG9ydAorIyBidWdzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4gb3Igc2VuZCBwYXRjaGVzIHRvCisjIDxhdXRvbWFrZS1wYXRjaGVzQGdudS5vcmc+LgorCitjYXNlICQxIGluCisgICcnKQorICAgICBlY2hvICIkMDogTm8gY29tbWFuZC4gIFRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiAxPiYyCisgICAgIGV4aXQgMTsKKyAgICAgOzsKKyAgLWggfCAtLWgqKQorICAgIGNhdCA8PFxFT0YKK1VzYWdlOiBjb21waWxlIFstLWhlbHBdIFstLXZlcnNpb25dIFBST0dSQU0gW0FSR1NdCisKK1dyYXBwZXIgZm9yIGNvbXBpbGVycyB3aGljaCBkbyBub3QgdW5kZXJzdGFuZCBgLWMgLW8nLgorUmVtb3ZlIGAtbyBkZXN0Lm8nIGZyb20gQVJHUywgcnVuIFBST0dSQU0gd2l0aCB0aGUgcmVtYWluaW5nCithcmd1bWVudHMsIGFuZCByZW5hbWUgdGhlIG91dHB1dCBhcyBleHBlY3RlZC4KKworSWYgeW91IGFyZSB0cnlpbmcgdG8gYnVpbGQgYSB3aG9sZSBwYWNrYWdlIHRoaXMgaXMgbm90IHRoZQorcmlnaHQgc2NyaXB0IHRvIHJ1bjogcGxlYXNlIHN0YXJ0IGJ5IHJlYWRpbmcgdGhlIGZpbGUgYElOU1RBTEwnLgorCitSZXBvcnQgYnVncyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+LgorRU9GCisgICAgZXhpdCAkPworICAgIDs7CisgIC12IHwgLS12KikKKyAgICBlY2hvICJjb21waWxlICRzY3JpcHR2ZXJzaW9uIgorICAgIGV4aXQgJD8KKyAgICA7OworZXNhYworCitvZmlsZT0KK2NmaWxlPQorZWF0PQorCitmb3IgYXJnCitkbworICBpZiB0ZXN0IC1uICIkZWF0IjsgdGhlbgorICAgIGVhdD0KKyAgZWxzZQorICAgIGNhc2UgJDEgaW4KKyAgICAgIC1vKQorCSMgY29uZmlndXJlIG1pZ2h0IGNob29zZSB0byBydW4gY29tcGlsZSBhcyBgY29tcGlsZSBjYyAtbyBmb28gZm9vLmMnLgorCSMgU28gd2Ugc3RyaXAgYC1vIGFyZycgb25seSBpZiBhcmcgaXMgYW4gb2JqZWN0LgorCWVhdD0xCisJY2FzZSAkMiBpbgorCSAgKi5vIHwgKi5vYmopCisJICAgIG9maWxlPSQyCisJICAgIDs7CisJICAqKQorCSAgICBzZXQgeCAiJEAiIC1vICIkMiIKKwkgICAgc2hpZnQKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgICouYykKKwljZmlsZT0kMQorCXNldCB4ICIkQCIgIiQxIgorCXNoaWZ0CisJOzsKKyAgICAgICopCisJc2V0IHggIiRAIiAiJDEiCisJc2hpZnQKKwk7OworICAgIGVzYWMKKyAgZmkKKyAgc2hpZnQKK2RvbmUKKworaWYgdGVzdCAteiAiJG9maWxlIiB8fCB0ZXN0IC16ICIkY2ZpbGUiOyB0aGVuCisgICMgSWYgbm8gYC1vJyBvcHRpb24gd2FzIHNlZW4gdGhlbiB3ZSBtaWdodCBoYXZlIGJlZW4gaW52b2tlZCBmcm9tIGEKKyAgIyBwYXR0ZXJuIHJ1bGUgd2hlcmUgd2UgZG9uJ3QgbmVlZCBvbmUuICBUaGF0IGlzIG9rIC0tIHRoaXMgaXMgYQorICAjIG5vcm1hbCBjb21waWxhdGlvbiB0aGF0IHRoZSBsb3NpbmcgY29tcGlsZXIgY2FuIGhhbmRsZS4gIElmIG5vCisgICMgYC5jJyBmaWxlIHdhcyBzZWVuIHRoZW4gd2UgYXJlIHByb2JhYmx5IGxpbmtpbmcuICBUaGF0IGlzIGFsc28KKyAgIyBvay4KKyAgZXhlYyAiJEAiCitmaQorCisjIE5hbWUgb2YgZmlsZSB3ZSBleHBlY3QgY29tcGlsZXIgdG8gY3JlYXRlLgorY29maWxlPWBlY2hvICIkY2ZpbGUiIHwgc2VkICdzfF4uKltcXC9dfHw7IHN8XlthLXpBLVpdOnx8OyBzL1wuYyQvLm8vJ2AKKworIyBDcmVhdGUgdGhlIGxvY2sgZGlyZWN0b3J5LgorIyBOb3RlOiB1c2UgYFsvXFw6Li1dJyBoZXJlIHRvIGVuc3VyZSB0aGF0IHdlIGRvbid0IHVzZSB0aGUgc2FtZSBuYW1lCisjIHRoYXQgd2UgYXJlIHVzaW5nIGZvciB0aGUgLm8gZmlsZS4gIEFsc28sIGJhc2UgdGhlIG5hbWUgb24gdGhlIGV4cGVjdGVkCisjIG9iamVjdCBmaWxlIG5hbWUsIHNpbmNlIHRoYXQgaXMgd2hhdCBtYXR0ZXJzIHdpdGggYSBwYXJhbGxlbCBidWlsZC4KK2xvY2tkaXI9YGVjaG8gIiRjb2ZpbGUiIHwgc2VkIC1lICdzfFsvXFw6Li1dfF98ZydgLmQKK3doaWxlIHRydWU7IGRvCisgIGlmIG1rZGlyICIkbG9ja2RpciIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgYnJlYWsKKyAgZmkKKyAgc2xlZXAgMQorZG9uZQorIyBGSVhNRTogcmFjZSBjb25kaXRpb24gaGVyZSBpZiB1c2VyIGtpbGxzIGJldHdlZW4gbWtkaXIgYW5kIHRyYXAuCit0cmFwICJybWRpciAnJGxvY2tkaXInOyBleGl0IDEiIDEgMiAxNQorCisjIFJ1biB0aGUgY29tcGlsZS4KKyIkQCIKK3JldD0kPworCitpZiB0ZXN0IC1mICIkY29maWxlIjsgdGhlbgorICB0ZXN0ICIkY29maWxlIiA9ICIkb2ZpbGUiIHx8IG12ICIkY29maWxlIiAiJG9maWxlIgorZWxpZiB0ZXN0IC1mICIke2NvZmlsZX1iaiI7IHRoZW4KKyAgdGVzdCAiJHtjb2ZpbGV9YmoiID0gIiRvZmlsZSIgfHwgbXYgIiR7Y29maWxlfWJqIiAiJG9maWxlIgorZmkKKworcm1kaXIgIiRsb2NrZGlyIgorZXhpdCAkcmV0CisKKyMgTG9jYWwgVmFyaWFibGVzOgorIyBtb2RlOiBzaGVsbC1zY3JpcHQKKyMgc2gtaW5kZW50YXRpb246IDIKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXN0YXJ0OiAic2NyaXB0dmVyc2lvbj0iCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4lMDJIIgorIyB0aW1lLXN0YW1wLXRpbWUtem9uZTogIlVUQyIKKyMgdGltZS1zdGFtcC1lbmQ6ICI7ICMgVVRDIgorIyBFbmQ6CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvY29uZmlnLmd1ZXNzIGIvYXZhaGktMC42LjMxL2NvbmZpZy5ndWVzcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kYzg0YzY4Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2NvbmZpZy5ndWVzcwpAQCAtMCwwICsxLDE1MDEgQEAKKyMhIC9iaW4vc2gKKyMgQXR0ZW1wdCB0byBndWVzcyBhIGNhbm9uaWNhbCBzeXN0ZW0gbmFtZS4KKyMgICBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisjICAgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOQorIyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCit0aW1lc3RhbXA9JzIwMDktMTEtMjAnCisKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisjIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyMgMDIxMTAtMTMwMSwgVVNBLgorIworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKKworIyBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgUGVyIEJvdGhuZXIuICBQbGVhc2Ugc2VuZCBwYXRjaGVzIChjb250ZXh0CisjIGRpZmYgZm9ybWF0KSB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4gYW5kIGluY2x1ZGUgYSBDaGFuZ2VMb2cKKyMgZW50cnkuCisjCisjIFRoaXMgc2NyaXB0IGF0dGVtcHRzIHRvIGd1ZXNzIGEgY2Fub25pY2FsIHN5c3RlbSBuYW1lIHNpbWlsYXIgdG8KKyMgY29uZmlnLnN1Yi4gIElmIGl0IHN1Y2NlZWRzLCBpdCBwcmludHMgdGhlIHN5c3RlbSBuYW1lIG9uIHN0ZG91dCwgYW5kCisjIGV4aXRzIHdpdGggMC4gIE90aGVyd2lzZSwgaXQgZXhpdHMgd2l0aCAxLgorIworIyBZb3UgY2FuIGdldCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBzY3JpcHQgZnJvbToKKyMgaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dpdHdlYi8/cD1jb25maWcuZ2l0O2E9YmxvYl9wbGFpbjtmPWNvbmZpZy5ndWVzcztoYj1IRUFECisKK21lPWBlY2hvICIkMCIgfCBzZWQgLWUgJ3MsLiovLCwnYAorCit1c2FnZT0iXAorVXNhZ2U6ICQwIFtPUFRJT05dCisKK091dHB1dCB0aGUgY29uZmlndXJhdGlvbiBuYW1lIG9mIHRoZSBzeXN0ZW0gXGAkbWUnIGlzIHJ1biBvbi4KKworT3BlcmF0aW9uIG1vZGVzOgorICAtaCwgLS1oZWxwICAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKKyAgLXQsIC0tdGltZS1zdGFtcCAgIHByaW50IGRhdGUgb2YgbGFzdCBtb2RpZmljYXRpb24sIHRoZW4gZXhpdAorICAtdiwgLS12ZXJzaW9uICAgICAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAorCitSZXBvcnQgYnVncyBhbmQgcGF0Y2hlcyB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4uIgorCit2ZXJzaW9uPSJcCitHTlUgY29uZmlnLmd1ZXNzICgkdGltZXN0YW1wKQorCitPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgUGVyIEJvdGhuZXIuCitDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsCisyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTword2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIgorCitoZWxwPSIKK1RyeSBcYCRtZSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKworIyBQYXJzZSBjb21tYW5kIGxpbmUKK3doaWxlIHRlc3QgJCMgLWd0IDAgOyBkbworICBjYXNlICQxIGluCisgICAgLS10aW1lLXN0YW1wIHwgLS10aW1lKiB8IC10ICkKKyAgICAgICBlY2hvICIkdGltZXN0YW1wIiA7IGV4aXQgOzsKKyAgICAtLXZlcnNpb24gfCAtdiApCisgICAgICAgZWNobyAiJHZlcnNpb24iIDsgZXhpdCA7OworICAgIC0taGVscCB8IC0taCogfCAtaCApCisgICAgICAgZWNobyAiJHVzYWdlIjsgZXhpdCA7OworICAgIC0tICkgICAgICMgU3RvcCBvcHRpb24gcHJvY2Vzc2luZworICAgICAgIHNoaWZ0OyBicmVhayA7OworICAgIC0gKQkjIFVzZSBzdGRpbiBhcyBpbnB1dC4KKyAgICAgICBicmVhayA7OworICAgIC0qICkKKyAgICAgICBlY2hvICIkbWU6IGludmFsaWQgb3B0aW9uICQxJGhlbHAiID4mMgorICAgICAgIGV4aXQgMSA7OworICAgICogKQorICAgICAgIGJyZWFrIDs7CisgIGVzYWMKK2RvbmUKKworaWYgdGVzdCAkIyAhPSAwOyB0aGVuCisgIGVjaG8gIiRtZTogdG9vIG1hbnkgYXJndW1lbnRzJGhlbHAiID4mMgorICBleGl0IDEKK2ZpCisKK3RyYXAgJ2V4aXQgMScgMSAyIDE1CisKKyMgQ0NfRk9SX0JVSUxEIC0tIGNvbXBpbGVyIHVzZWQgYnkgdGhpcyBzY3JpcHQuIE5vdGUgdGhhdCB0aGUgdXNlIG9mIGEKKyMgY29tcGlsZXIgdG8gYWlkIGluIHN5c3RlbSBkZXRlY3Rpb24gaXMgZGlzY291cmFnZWQgYXMgaXQgcmVxdWlyZXMKKyMgdGVtcG9yYXJ5IGZpbGVzIHRvIGJlIGNyZWF0ZWQgYW5kLCBhcyB5b3UgY2FuIHNlZSBiZWxvdywgaXQgaXMgYQorIyBoZWFkYWNoZSB0byBkZWFsIHdpdGggaW4gYSBwb3J0YWJsZSBmYXNoaW9uLgorCisjIEhpc3RvcmljYWxseSwgYENDX0ZPUl9CVUlMRCcgdXNlZCB0byBiZSBuYW1lZCBgSE9TVF9DQycuIFdlIHN0aWxsCisjIHVzZSBgSE9TVF9DQycgaWYgZGVmaW5lZCwgYnV0IGl0IGlzIGRlcHJlY2F0ZWQuCisKKyMgUG9ydGFibGUgdG1wIGRpcmVjdG9yeSBjcmVhdGlvbiBpbnNwaXJlZCBieSB0aGUgQXV0b2NvbmYgdGVhbS4KKworc2V0X2NjX2Zvcl9idWlsZD0nCit0cmFwICJleGl0Y29kZT1cJD87IChybSAtZiBcJHRtcGZpbGVzIDI+L2Rldi9udWxsOyBybWRpciBcJHRtcCAyPi9kZXYvbnVsbCkgJiYgZXhpdCBcJGV4aXRjb2RlIiAwIDsKK3RyYXAgInJtIC1mIFwkdG1wZmlsZXMgMj4vZGV2L251bGw7IHJtZGlyIFwkdG1wIDI+L2Rldi9udWxsOyBleGl0IDEiIDEgMiAxMyAxNSA7Cis6ICR7VE1QRElSPS90bXB9IDsKKyB7IHRtcD1gKHVtYXNrIDA3NyAmJiBta3RlbXAgLWQgIiRUTVBESVIvY2dYWFhYWFgiKSAyPi9kZXYvbnVsbGAgJiYgdGVzdCAtbiAiJHRtcCIgJiYgdGVzdCAtZCAiJHRtcCIgOyB9IHx8CisgeyB0ZXN0IC1uICIkUkFORE9NIiAmJiB0bXA9JFRNUERJUi9jZyQkLSRSQU5ET00gJiYgKHVtYXNrIDA3NyAmJiBta2RpciAkdG1wKSA7IH0gfHwKKyB7IHRtcD0kVE1QRElSL2NnLSQkICYmICh1bWFzayAwNzcgJiYgbWtkaXIgJHRtcCkgJiYgZWNobyAiV2FybmluZzogY3JlYXRpbmcgaW5zZWN1cmUgdGVtcCBkaXJlY3RvcnkiID4mMiA7IH0gfHwKKyB7IGVjaG8gIiRtZTogY2Fubm90IGNyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgaW4gJFRNUERJUiIgPiYyIDsgZXhpdCAxIDsgfSA7CitkdW1teT0kdG1wL2R1bW15IDsKK3RtcGZpbGVzPSIkZHVtbXkuYyAkZHVtbXkubyAkZHVtbXkucmVsICRkdW1teSIgOworY2FzZSAkQ0NfRk9SX0JVSUxELCRIT1NUX0NDLCRDQyBpbgorICwsKSAgICBlY2hvICJpbnQgeDsiID4gJGR1bW15LmMgOworCWZvciBjIGluIGNjIGdjYyBjODkgYzk5IDsgZG8KKwkgIGlmICgkYyAtYyAtbyAkZHVtbXkubyAkZHVtbXkuYykgPi9kZXYvbnVsbCAyPiYxIDsgdGhlbgorCSAgICAgQ0NfRk9SX0JVSUxEPSIkYyI7IGJyZWFrIDsKKwkgIGZpIDsKKwlkb25lIDsKKwlpZiB0ZXN0IHgiJENDX0ZPUl9CVUlMRCIgPSB4IDsgdGhlbgorCSAgQ0NfRk9SX0JVSUxEPW5vX2NvbXBpbGVyX2ZvdW5kIDsKKwlmaQorCTs7CisgLCwqKSAgIENDX0ZPUl9CVUlMRD0kQ0MgOzsKKyAsKiwqKSAgQ0NfRk9SX0JVSUxEPSRIT1NUX0NDIDs7Citlc2FjIDsgc2V0X2NjX2Zvcl9idWlsZD0gOycKKworIyBUaGlzIGlzIG5lZWRlZCB0byBmaW5kIHVuYW1lIG9uIGEgUHlyYW1pZCBPU3ggd2hlbiBydW4gaW4gdGhlIEJTRCB1bml2ZXJzZS4KKyMgKGdoYXppQG5vYy5ydXRnZXJzLmVkdSAxOTk0LTA4LTI0KQoraWYgKHRlc3QgLWYgLy5hdHRiaW4vdW5hbWUpID4vZGV2L251bGwgMj4mMSA7IHRoZW4KKwlQQVRIPSRQQVRIOi8uYXR0YmluIDsgZXhwb3J0IFBBVEgKK2ZpCisKK1VOQU1FX01BQ0hJTkU9YCh1bmFtZSAtbSkgMj4vZGV2L251bGxgIHx8IFVOQU1FX01BQ0hJTkU9dW5rbm93bgorVU5BTUVfUkVMRUFTRT1gKHVuYW1lIC1yKSAyPi9kZXYvbnVsbGAgfHwgVU5BTUVfUkVMRUFTRT11bmtub3duCitVTkFNRV9TWVNURU09YCh1bmFtZSAtcykgMj4vZGV2L251bGxgICB8fCBVTkFNRV9TWVNURU09dW5rbm93bgorVU5BTUVfVkVSU0lPTj1gKHVuYW1lIC12KSAyPi9kZXYvbnVsbGAgfHwgVU5BTUVfVkVSU0lPTj11bmtub3duCisKKyMgTm90ZTogb3JkZXIgaXMgc2lnbmlmaWNhbnQgLSB0aGUgY2FzZSBicmFuY2hlcyBhcmUgbm90IGV4Y2x1c2l2ZS4KKworY2FzZSAiJHtVTkFNRV9NQUNISU5FfToke1VOQU1FX1NZU1RFTX06JHtVTkFNRV9SRUxFQVNFfToke1VOQU1FX1ZFUlNJT059IiBpbgorICAgICo6TmV0QlNEOio6KikKKwkjIE5ldEJTRCAobmJzZCkgdGFyZ2V0cyBzaG91bGQgKHdoZXJlIGFwcGxpY2FibGUpIG1hdGNoIG9uZSBvcgorCSMgbW9yZSBvZiB0aGUgdHVwcGxlczogKi0qLW5ldGJzZGVsZiosICotKi1uZXRic2Rhb3V0KiwKKwkjICotKi1uZXRic2RlY29mZiogYW5kICotKi1uZXRic2QqLiAgRm9yIHRhcmdldHMgdGhhdCByZWNlbnRseQorCSMgc3dpdGNoZWQgdG8gRUxGLCAqLSotbmV0YnNkKiB3b3VsZCBzZWxlY3QgdGhlIG9sZAorCSMgb2JqZWN0IGZpbGUgZm9ybWF0LiAgVGhpcyBwcm92aWRlcyBib3RoIGZvcndhcmQKKwkjIGNvbXBhdGliaWxpdHkgYW5kIGEgY29uc2lzdGVudCBtZWNoYW5pc20gZm9yIHNlbGVjdGluZyB0aGUKKwkjIG9iamVjdCBmaWxlIGZvcm1hdC4KKwkjCisJIyBOb3RlOiBOZXRCU0QgZG9lc24ndCBwYXJ0aWN1bGFybHkgY2FyZSBhYm91dCB0aGUgdmVuZG9yCisJIyBwb3J0aW9uIG9mIHRoZSBuYW1lLiAgV2UgYWx3YXlzIHNldCBpdCB0byAidW5rbm93biIuCisJc3lzY3RsPSJzeXNjdGwgLW4gaHcubWFjaGluZV9hcmNoIgorCVVOQU1FX01BQ0hJTkVfQVJDSD1gKC9zYmluLyRzeXNjdGwgMj4vZGV2L251bGwgfHwgXAorCSAgICAvdXNyL3NiaW4vJHN5c2N0bCAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd24pYAorCWNhc2UgIiR7VU5BTUVfTUFDSElORV9BUkNIfSIgaW4KKwkgICAgYXJtZWIpIG1hY2hpbmU9YXJtZWItdW5rbm93biA7OworCSAgICBhcm0qKSBtYWNoaW5lPWFybS11bmtub3duIDs7CisJICAgIHNoM2VsKSBtYWNoaW5lPXNobC11bmtub3duIDs7CisJICAgIHNoM2ViKSBtYWNoaW5lPXNoLXVua25vd24gOzsKKwkgICAgc2g1ZWwpIG1hY2hpbmU9c2g1bGUtdW5rbm93biA7OworCSAgICAqKSBtYWNoaW5lPSR7VU5BTUVfTUFDSElORV9BUkNIfS11bmtub3duIDs7CisJZXNhYworCSMgVGhlIE9wZXJhdGluZyBTeXN0ZW0gaW5jbHVkaW5nIG9iamVjdCBmb3JtYXQsIGlmIGl0IGhhcyBzd2l0Y2hlZAorCSMgdG8gRUxGIHJlY2VudGx5LCBvciB3aWxsIGluIHRoZSBmdXR1cmUuCisJY2FzZSAiJHtVTkFNRV9NQUNISU5FX0FSQ0h9IiBpbgorCSAgICBhcm0qfGkzODZ8bTY4a3xuczMya3xzaDMqfHNwYXJjfHZheCkKKwkJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCQlpZiBlY2hvIF9fRUxGX18gfCAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwgXAorCQkJfCBncmVwIC1xIF9fRUxGX18KKwkJdGhlbgorCQkgICAgIyBPbmNlIGFsbCB1dGlsaXRpZXMgY2FuIGJlIEVDT0ZGIChuZXRic2RlY29mZikgb3IgYS5vdXQgKG5ldGJzZGFvdXQpLgorCQkgICAgIyBSZXR1cm4gbmV0YnNkIGZvciBlaXRoZXIuICBGSVg/CisJCSAgICBvcz1uZXRic2QKKwkJZWxzZQorCQkgICAgb3M9bmV0YnNkZWxmCisJCWZpCisJCTs7CisJICAgICopCisJICAgICAgICBvcz1uZXRic2QKKwkJOzsKKwllc2FjCisJIyBUaGUgT1MgcmVsZWFzZQorCSMgRGViaWFuIEdOVS9OZXRCU0QgbWFjaGluZXMgaGF2ZSBhIGRpZmZlcmVudCB1c2VybGFuZCwgYW5kCisJIyB0aHVzLCBuZWVkIGEgZGlzdGluY3QgdHJpcGxldC4gSG93ZXZlciwgdGhleSBkbyBub3QgbmVlZAorCSMga2VybmVsIHZlcnNpb24gaW5mb3JtYXRpb24sIHNvIGl0IGNhbiBiZSByZXBsYWNlZCB3aXRoIGEKKwkjIHN1aXRhYmxlIHRhZywgaW4gdGhlIHN0eWxlIG9mIGxpbnV4LWdudS4KKwljYXNlICIke1VOQU1FX1ZFUlNJT059IiBpbgorCSAgICBEZWJpYW4qKQorCQlyZWxlYXNlPSctZ251JworCQk7OworCSAgICAqKQorCQlyZWxlYXNlPWBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stX10uKi9cLi8nYAorCQk7OworCWVzYWMKKwkjIFNpbmNlIENQVV9UWVBFLU1BTlVGQUNUVVJFUi1LRVJORUwtT1BFUkFUSU5HX1NZU1RFTToKKwkjIGNvbnRhaW5zIHJlZHVuZGFudCBpbmZvcm1hdGlvbiwgdGhlIHNob3J0ZXIgZm9ybToKKwkjIENQVV9UWVBFLU1BTlVGQUNUVVJFUi1PUEVSQVRJTkdfU1lTVEVNIGlzIHVzZWQuCisJZWNobyAiJHttYWNoaW5lfS0ke29zfSR7cmVsZWFzZX0iCisJZXhpdCA7OworICAgICo6T3BlbkJTRDoqOiopCisJVU5BTUVfTUFDSElORV9BUkNIPWBhcmNoIHwgc2VkICdzL09wZW5CU0QuLy8nYAorCWVjaG8gJHtVTkFNRV9NQUNISU5FX0FSQ0h9LXVua25vd24tb3BlbmJzZCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpla2tvQlNEOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1la2tvYnNkJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOlNvbGlkQlNEOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1zb2xpZGJzZCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgbWFjcHBjOk1pckJTRDoqOiopCisJZWNobyBwb3dlcnBjLXVua25vd24tbWlyYnNkJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOk1pckJTRDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbWlyYnNkJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBhbHBoYTpPU0YxOio6KikKKwljYXNlICRVTkFNRV9SRUxFQVNFIGluCisJKjQuMCkKKwkJVU5BTUVfUkVMRUFTRT1gL3Vzci9zYmluL3NpemVyIC12IHwgYXdrICd7cHJpbnQgJDN9J2AKKwkJOzsKKwkqNS4qKQorCSAgICAgICAgVU5BTUVfUkVMRUFTRT1gL3Vzci9zYmluL3NpemVyIC12IHwgYXdrICd7cHJpbnQgJDR9J2AKKwkJOzsKKwllc2FjCisJIyBBY2NvcmRpbmcgdG8gQ29tcGFxLCAvdXNyL3NiaW4vcHNyaW5mbyBoYXMgYmVlbiBhdmFpbGFibGUgb24KKwkjIE9TRi8xIGFuZCBUcnU2NCBzeXN0ZW1zIHByb2R1Y2VkIHNpbmNlIDE5OTUuICBJIGhvcGUgdGhhdAorCSMgY292ZXJzIG1vc3Qgc3lzdGVtcyBydW5uaW5nIHRvZGF5LiAgVGhpcyBjb2RlIHBpcGVzIHRoZSBDUFUKKwkjIHR5cGVzIHRocm91Z2ggaGVhZCAtbiAxLCBzbyB3ZSBvbmx5IGRldGVjdCB0aGUgdHlwZSBvZiBDUFUgMC4KKwlBTFBIQV9DUFVfVFlQRT1gL3Vzci9zYmluL3BzcmluZm8gLXYgfCBzZWQgLW4gLWUgJ3MvXiAgVGhlIGFscGhhIFwoLipcKSBwcm9jZXNzb3IuKiQvXDEvcCcgfCBoZWFkIC1uIDFgCisJY2FzZSAiJEFMUEhBX0NQVV9UWVBFIiBpbgorCSAgICAiRVY0ICgyMTA2NCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYSIgOzsKKwkgICAgIkVWNC41ICgyMTA2NCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYSIgOzsKKwkgICAgIkxDQTQgKDIxMDY2LzIxMDY4KSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhIiA7OworCSAgICAiRVY1ICgyMTE2NCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NSIgOzsKKwkgICAgIkVWNS42ICgyMTE2NEEpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjU2IiA7OworCSAgICAiRVY1LjYgKDIxMTY0UEMpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFwY2E1NiIgOzsKKwkgICAgIkVWNS43ICgyMTE2NFBDKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhcGNhNTciIDs7CisJICAgICJFVjYgKDIxMjY0KSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2IiA7OworCSAgICAiRVY2LjcgKDIxMjY0QSkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NjciIDs7CisJICAgICJFVjYuOENCICgyMTI2NEMpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjY4IiA7OworCSAgICAiRVY2LjhBTCAoMjEyNjRCKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2OCIgOzsKKwkgICAgIkVWNi44Q1ggKDIxMjY0RCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NjgiIDs7CisJICAgICJFVjYuOUEgKDIxMjY0L0VWNjlBKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2OSIgOzsKKwkgICAgIkVWNyAoMjEzNjQpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjciIDs7CisJICAgICJFVjcuOSAoMjEzNjRBKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY3OSIgOzsKKwllc2FjCisJIyBBIFBuLm4gdmVyc2lvbiBpcyBhIHBhdGNoZWQgdmVyc2lvbi4KKwkjIEEgVm4ubiB2ZXJzaW9uIGlzIGEgcmVsZWFzZWQgdmVyc2lvbi4KKwkjIEEgVG4ubiB2ZXJzaW9uIGlzIGEgcmVsZWFzZWQgZmllbGQgdGVzdCB2ZXJzaW9uLgorCSMgQSBYbi5uIHZlcnNpb24gaXMgYW4gdW5yZWxlYXNlZCBleHBlcmltZW50YWwgYmFzZWxldmVsLgorCSMgMS4yIHVzZXMgIjEuMiIgZm9yIHVuYW1lIC1yLgorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1kZWMtb3NmYGVjaG8gJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9eW1BWVFhdLy8nIHwgdHIgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonYAorCWV4aXQgOzsKKyAgICBBbHBoYVwgKjpXaW5kb3dzX05UKjoqKQorCSMgSG93IGRvIHdlIGtub3cgaXQncyBJbnRlcml4IHJhdGhlciB0aGFuIHRoZSBnZW5lcmljIFBPU0lYIHN1YnN5c3RlbT8KKwkjIFNob3VsZCB3ZSBjaGFuZ2UgVU5BTUVfTUFDSElORSBiYXNlZCBvbiB0aGUgb3V0cHV0IG9mIHVuYW1lIGluc3RlYWQKKwkjIG9mIHRoZSBzcGVjaWZpYyBBbHBoYSBtb2RlbD8KKwllY2hvIGFscGhhLXBjLWludGVyaXgKKwlleGl0IDs7CisgICAgMjEwNjQ6V2luZG93c19OVDo1MDozKQorCWVjaG8gYWxwaGEtZGVjLXdpbm50My41CisJZXhpdCA7OworICAgIEFtaWdhKjpVTklYX1N5c3RlbV9WOjQuMDoqKQorCWVjaG8gbTY4ay11bmtub3duLXN5c3Y0CisJZXhpdCA7OworICAgICo6W0FhXW1pZ2FbT29dW1NzXToqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tYW1pZ2FvcworCWV4aXQgOzsKKyAgICAqOltNbV1vcnBoW09vXVtTc106KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLW1vcnBob3MKKwlleGl0IDs7CisgICAgKjpPUy8zOTA6KjoqKQorCWVjaG8gaTM3MC1pYm0tb3BlbmVkaXRpb24KKwlleGl0IDs7CisgICAgKjp6L1ZNOio6KikKKwllY2hvIHMzOTAtaWJtLXp2bW9lCisJZXhpdCA7OworICAgICo6T1M0MDA6KjoqKQorICAgICAgICBlY2hvIHBvd2VycGMtaWJtLW9zNDAwCisJZXhpdCA7OworICAgIGFybTpSSVNDKjoxLlswMTJdKjoqfGFybTpyaXNjaXg6MS5bMDEyXSo6KikKKwllY2hvIGFybS1hY29ybi1yaXNjaXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIGFybTpyaXNjb3M6KjoqfGFybTpSSVNDT1M6KjoqKQorCWVjaG8gYXJtLXVua25vd24tcmlzY29zCisJZXhpdCA7OworICAgIFNSMj8wMTpISS1VWC9NUFA6KjoqIHwgU1I4MDAwOkhJLVVYL01QUDoqOiopCisJZWNobyBocHBhMS4xLWhpdGFjaGktaGl1eG1wcAorCWV4aXQgOzsKKyAgICBQeXJhbWlkKjpPU3gqOio6KiB8IE1JUyo6T1N4KjoqOiogfCBNSVMqOlNNUF9EQy1PU3gqOio6KikKKwkjIGFrZWVAd3BkaXMwMy53cGFmYi5hZi5taWwgKEVhcmxlIEYuIEFrZSkgY29udHJpYnV0ZWQgTUlTIGFuZCBOSUxFLgorCWlmIHRlc3QgImAoL2Jpbi91bml2ZXJzZSkgMj4vZGV2L251bGxgIiA9IGF0dCA7IHRoZW4KKwkJZWNobyBweXJhbWlkLXB5cmFtaWQtc3lzdjMKKwllbHNlCisJCWVjaG8gcHlyYW1pZC1weXJhbWlkLWJzZAorCWZpCisJZXhpdCA7OworICAgIE5JTEUqOio6KjpkY29zeCkKKwllY2hvIHB5cmFtaWQtcHlyYW1pZC1zdnI0CisJZXhpdCA7OworICAgIERSUz82MDAwOnVuaXg6NC4wOjYqKQorCWVjaG8gc3BhcmMtaWNsLW54NgorCWV4aXQgOzsKKyAgICBEUlM/NjAwMDpVTklYX1NWOjQuMio6NyogfCBEUlM/NjAwMDppc2lzOjQuMio6NyopCisJY2FzZSBgL3Vzci9iaW4vdW5hbWUgLXBgIGluCisJICAgIHNwYXJjKSBlY2hvIHNwYXJjLWljbC1ueDc7IGV4aXQgOzsKKwllc2FjIDs7CisgICAgczM5MHg6U3VuT1M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1pYm0tc29sYXJpczJgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKKwlleGl0IDs7CisgICAgc3VuNEg6U3VuT1M6NS4qOiopCisJZWNobyBzcGFyYy1oYWwtc29sYXJpczJgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKKwlleGl0IDs7CisgICAgc3VuNCo6U3VuT1M6NS4qOiogfCB0YWRwb2xlKjpTdW5PUzo1Lio6KikKKwllY2hvIHNwYXJjLXN1bi1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorCWV4aXQgOzsKKyAgICBpODZwYzpBdXJvcmFVWDo1Lio6KiB8IGk4NnhlbjpBdXJvcmFVWDo1Lio6KikKKwllY2hvIGkzODYtcGMtYXVyb3JhdXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIGk4NnBjOlN1bk9TOjUuKjoqIHwgaTg2eGVuOlN1bk9TOjUuKjoqKQorCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwlTVU5fQVJDSD0iaTM4NiIKKwkjIElmIHRoZXJlIGlzIGEgY29tcGlsZXIsIHNlZSBpZiBpdCBpcyBjb25maWd1cmVkIGZvciA2NC1iaXQgb2JqZWN0cy4KKwkjIE5vdGUgdGhhdCB0aGUgU3VuIGNjIGRvZXMgbm90IHR1cm4gX19MUDY0X18gaW50byAxIGxpa2UgZ2NjIGRvZXMuCisJIyBUaGlzIHRlc3Qgd29ya3MgZm9yIGJvdGggY29tcGlsZXJzLgorCWlmIFsgIiRDQ19GT1JfQlVJTEQiICE9ICdub19jb21waWxlcl9mb3VuZCcgXTsgdGhlbgorCSAgICBpZiAoZWNobyAnI2lmZGVmIF9fYW1kNjQnOyBlY2hvIElTXzY0QklUX0FSQ0g7IGVjaG8gJyNlbmRpZicpIHwgXAorCQkoQ0NPUFRTPSAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwpIHwgXAorCQlncmVwIElTXzY0QklUX0FSQ0ggPi9kZXYvbnVsbAorCSAgICB0aGVuCisJCVNVTl9BUkNIPSJ4ODZfNjQiCisJICAgIGZpCisJZmkKKwllY2hvICR7U1VOX0FSQ0h9LXBjLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCisJZXhpdCA7OworICAgIHN1bjQqOlN1bk9TOjYqOiopCisJIyBBY2NvcmRpbmcgdG8gY29uZmlnLnN1YiwgdGhpcyBpcyB0aGUgcHJvcGVyIHdheSB0byBjYW5vbmljYWxpemUKKwkjIFN1bk9TNi4gIEhhcmQgdG8gZ3Vlc3MgZXhhY3RseSB3aGF0IFN1bk9TNiB3aWxsIGJlIGxpa2UsIGJ1dAorCSMgaXQncyBsaWtlbHkgdG8gYmUgbW9yZSBsaWtlIFNvbGFyaXMgdGhhbiBTdW5PUzQuCisJZWNobyBzcGFyYy1zdW4tc29sYXJpczNgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKKwlleGl0IDs7CisgICAgc3VuNCo6U3VuT1M6KjoqKQorCWNhc2UgImAvdXNyL2Jpbi9hcmNoIC1rYCIgaW4KKwkgICAgU2VyaWVzKnxTNCopCisJCVVOQU1FX1JFTEVBU0U9YHVuYW1lIC12YAorCQk7OworCWVzYWMKKwkjIEphcGFuZXNlIExhbmd1YWdlIHZlcnNpb25zIGhhdmUgYSB2ZXJzaW9uIG51bWJlciBsaWtlIGA0LjEuMy1KTCcuCisJZWNobyBzcGFyYy1zdW4tc3Vub3NgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy8tL18vJ2AKKwlleGl0IDs7CisgICAgc3VuMyo6U3VuT1M6KjoqKQorCWVjaG8gbTY4ay1zdW4tc3Vub3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIHN1bio6Kjo0LjJCU0Q6KikKKwlVTkFNRV9SRUxFQVNFPWAoc2VkIDFxIC9ldGMvbW90ZCB8IGF3ayAne3ByaW50IHN1YnN0cigkNSwxLDMpfScpIDI+L2Rldi9udWxsYAorCXRlc3QgIngke1VOQU1FX1JFTEVBU0V9IiA9ICJ4IiAmJiBVTkFNRV9SRUxFQVNFPTMKKwljYXNlICJgL2Jpbi9hcmNoYCIgaW4KKwkgICAgc3VuMykKKwkJZWNobyBtNjhrLXN1bi1zdW5vcyR7VU5BTUVfUkVMRUFTRX0KKwkJOzsKKwkgICAgc3VuNCkKKwkJZWNobyBzcGFyYy1zdW4tc3Vub3Mke1VOQU1FX1JFTEVBU0V9CisJCTs7CisJZXNhYworCWV4aXQgOzsKKyAgICBhdXNocDpTdW5PUzoqOiopCisJZWNobyBzcGFyYy1hdXNwZXgtc3Vub3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICMgVGhlIHNpdHVhdGlvbiBmb3IgTWlOVCBpcyBhIGxpdHRsZSBjb25mdXNpbmcuICBUaGUgbWFjaGluZSBuYW1lCisgICAgIyBjYW4gYmUgdmlydHVhbGx5IGV2ZXJ5dGhpbmcgKGV2ZXJ5dGhpbmcgd2hpY2ggaXMgbm90CisgICAgIyAiYXRhcmlzdCIgb3IgImF0YXJpc3RlIiBhdCBsZWFzdCBzaG91bGQgaGF2ZSBhIHByb2Nlc3NvcgorICAgICMgPiBtNjgwMDApLiAgVGhlIHN5c3RlbSBuYW1lIHJhbmdlcyBmcm9tICJNaU5UIiBvdmVyICJGcmVlTWlOVCIKKyAgICAjIHRvIHRoZSBsb3dlcmNhc2UgdmVyc2lvbiAibWludCIgKG9yICJmcmVlbWludCIpLiAgRmluYWxseQorICAgICMgdGhlIHN5c3RlbSBuYW1lICJUT1MiIGRlbm90ZXMgYSBzeXN0ZW0gd2hpY2ggaXMgYWN0dWFsbHkgbm90CisgICAgIyBNaU5ULiAgQnV0IE1pTlQgaXMgZG93bndhcmQgY29tcGF0aWJsZSB0byBUT1MsIHNvIHRoaXMgc2hvdWxkCisgICAgIyBiZSBubyBwcm9ibGVtLgorICAgIGF0YXJpc3RbZV06Kk1pTlQ6KjoqIHwgYXRhcmlzdFtlXToqbWludDoqOiogfCBhdGFyaXN0W2VdOipUT1M6KjoqKQorICAgICAgICBlY2hvIG02OGstYXRhcmktbWludCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgYXRhcmkqOipNaU5UOio6KiB8IGF0YXJpKjoqbWludDoqOiogfCBhdGFyaXN0W2VdOipUT1M6KjoqKQorCWVjaG8gbTY4ay1hdGFyaS1taW50JHtVTkFNRV9SRUxFQVNFfQorICAgICAgICBleGl0IDs7CisgICAgKmZhbGNvbio6Kk1pTlQ6KjoqIHwgKmZhbGNvbio6Km1pbnQ6KjoqIHwgKmZhbGNvbio6KlRPUzoqOiopCisgICAgICAgIGVjaG8gbTY4ay1hdGFyaS1taW50JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBtaWxhbio6Kk1pTlQ6KjoqIHwgbWlsYW4qOiptaW50Oio6KiB8ICptaWxhbio6KlRPUzoqOiopCisgICAgICAgIGVjaG8gbTY4ay1taWxhbi1taW50JHtVTkFNRV9SRUxFQVNFfQorICAgICAgICBleGl0IDs7CisgICAgaGFkZXMqOipNaU5UOio6KiB8IGhhZGVzKjoqbWludDoqOiogfCAqaGFkZXMqOipUT1M6KjoqKQorICAgICAgICBlY2hvIG02OGstaGFkZXMtbWludCR7VU5BTUVfUkVMRUFTRX0KKyAgICAgICAgZXhpdCA7OworICAgICo6Kk1pTlQ6KjoqIHwgKjoqbWludDoqOiogfCAqOipUT1M6KjoqKQorICAgICAgICBlY2hvIG02OGstdW5rbm93bi1taW50JHtVTkFNRV9SRUxFQVNFfQorICAgICAgICBleGl0IDs7CisgICAgbTY4azptYWNodGVuOio6KikKKwllY2hvIG02OGstYXBwbGUtbWFjaHRlbiR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgcG93ZXJwYzptYWNodGVuOio6KikKKwllY2hvIHBvd2VycGMtYXBwbGUtbWFjaHRlbiR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgUklTQyo6TWFjaDoqOiopCisJZWNobyBtaXBzLWRlYy1tYWNoX2JzZDQuMworCWV4aXQgOzsKKyAgICBSSVNDKjpVTFRSSVg6KjoqKQorCWVjaG8gbWlwcy1kZWMtdWx0cml4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBWQVgqOlVMVFJJWCo6KjoqKQorCWVjaG8gdmF4LWRlYy11bHRyaXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIDIwMjA6Q0xJWDoqOiogfCAyNDMwOkNMSVg6KjoqKQorCWVjaG8gY2xpcHBlci1pbnRlcmdyYXBoLWNsaXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIG1pcHM6KjoqOlVNSVBTIHwgbWlwczoqOio6UklTQ29zKQorCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwlzZWQgJ3MvXgkvLycgPDwgRU9GID4kZHVtbXkuYworI2lmZGVmIF9fY3BsdXNwbHVzCisjaW5jbHVkZSA8c3RkaW8uaD4gIC8qIGZvciBwcmludGYoKSBwcm90b3R5cGUgKi8KKwlpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkgeworI2Vsc2UKKwlpbnQgbWFpbiAoYXJnYywgYXJndikgaW50IGFyZ2M7IGNoYXIgKmFyZ3ZbXTsgeworI2VuZGlmCisJI2lmIGRlZmluZWQgKGhvc3RfbWlwcykgJiYgZGVmaW5lZCAoTUlQU0VCKQorCSNpZiBkZWZpbmVkIChTWVNUWVBFX1NZU1YpCisJICBwcmludGYgKCJtaXBzLW1pcHMtcmlzY29zJXNzeXN2XG4iLCBhcmd2WzFdKTsgZXhpdCAoMCk7CisJI2VuZGlmCisJI2lmIGRlZmluZWQgKFNZU1RZUEVfU1ZSNCkKKwkgIHByaW50ZiAoIm1pcHMtbWlwcy1yaXNjb3Mlc3N2cjRcbiIsIGFyZ3ZbMV0pOyBleGl0ICgwKTsKKwkjZW5kaWYKKwkjaWYgZGVmaW5lZCAoU1lTVFlQRV9CU0Q0MykgfHwgZGVmaW5lZChTWVNUWVBFX0JTRCkKKwkgIHByaW50ZiAoIm1pcHMtbWlwcy1yaXNjb3Mlc2JzZFxuIiwgYXJndlsxXSk7IGV4aXQgKDApOworCSNlbmRpZgorCSNlbmRpZgorCSAgZXhpdCAoLTEpOworCX0KK0VPRgorCSRDQ19GT1JfQlVJTEQgLW8gJGR1bW15ICRkdW1teS5jICYmCisJICBkdW1teWFyZz1gZWNobyAiJHtVTkFNRV9SRUxFQVNFfSIgfCBzZWQgLW4gJ3MvXChbMC05XSpcKS4qL1wxL3AnYCAmJgorCSAgU1lTVEVNX05BTUU9YCRkdW1teSAkZHVtbXlhcmdgICYmCisJICAgIHsgZWNobyAiJFNZU1RFTV9OQU1FIjsgZXhpdDsgfQorCWVjaG8gbWlwcy1taXBzLXJpc2NvcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgTW90b3JvbGE6UG93ZXJNQVhfT1M6KjoqKQorCWVjaG8gcG93ZXJwYy1tb3Rvcm9sYS1wb3dlcm1heAorCWV4aXQgOzsKKyAgICBNb3Rvcm9sYToqOjQuMzpQTDgtKikKKwllY2hvIHBvd2VycGMtaGFycmlzLXBvd2VybWF4CisJZXhpdCA7OworICAgIE5pZ2h0X0hhd2s6KjoqOlBvd2VyTUFYX09TIHwgU3luZXJneTpQb3dlck1BWF9PUzoqOiopCisJZWNobyBwb3dlcnBjLWhhcnJpcy1wb3dlcm1heAorCWV4aXQgOzsKKyAgICBOaWdodF9IYXdrOlBvd2VyX1VOSVg6KjoqKQorCWVjaG8gcG93ZXJwYy1oYXJyaXMtcG93ZXJ1bml4CisJZXhpdCA7OworICAgIG04OGs6Q1gvVVg6Nyo6KikKKwllY2hvIG04OGstaGFycmlzLWN4dXg3CisJZXhpdCA7OworICAgIG04OGs6Kjo0KjpSNCopCisJZWNobyBtODhrLW1vdG9yb2xhLXN5c3Y0CisJZXhpdCA7OworICAgIG04OGs6KjozKjpSMyopCisJZWNobyBtODhrLW1vdG9yb2xhLXN5c3YzCisJZXhpdCA7OworICAgIEFWaWlPTjpkZ3V4Oio6KikKKyAgICAgICAgIyBERy9VWCByZXR1cm5zIEFWaWlPTiBmb3IgYWxsIGFyY2hpdGVjdHVyZXMKKyAgICAgICAgVU5BTUVfUFJPQ0VTU09SPWAvdXNyL2Jpbi91bmFtZSAtcGAKKwlpZiBbICRVTkFNRV9QUk9DRVNTT1IgPSBtYzg4MTAwIF0gfHwgWyAkVU5BTUVfUFJPQ0VTU09SID0gbWM4ODExMCBdCisJdGhlbgorCSAgICBpZiBbICR7VEFSR0VUX0JJTkFSWV9JTlRFUkZBQ0V9eCA9IG04OGtkZ3V4ZWxmeCBdIHx8IFwKKwkgICAgICAgWyAke1RBUkdFVF9CSU5BUllfSU5URVJGQUNFfXggPSB4IF0KKwkgICAgdGhlbgorCQllY2hvIG04OGstZGctZGd1eCR7VU5BTUVfUkVMRUFTRX0KKwkgICAgZWxzZQorCQllY2hvIG04OGstZGctZGd1eGJjcyR7VU5BTUVfUkVMRUFTRX0KKwkgICAgZmkKKwllbHNlCisJICAgIGVjaG8gaTU4Ni1kZy1kZ3V4JHtVTkFNRV9SRUxFQVNFfQorCWZpCisgCWV4aXQgOzsKKyAgICBNODgqOkRvbHBoaW5PUzoqOiopCSMgRG9scGhpbk9TIChTVlIzKQorCWVjaG8gbTg4ay1kb2xwaGluLXN5c3YzCisJZXhpdCA7OworICAgIE04OCo6KjpSMyo6KikKKwkjIERlbHRhIDg4ayBzeXN0ZW0gcnVubmluZyBTVlIzCisJZWNobyBtODhrLW1vdG9yb2xhLXN5c3YzCisJZXhpdCA7OworICAgIFhEODgqOio6KjoqKSAjIFRla3Ryb25peCBYRDg4IHN5c3RlbSBydW5uaW5nIFVUZWtWIChTVlIzKQorCWVjaG8gbTg4ay10ZWt0cm9uaXgtc3lzdjMKKwlleGl0IDs7CisgICAgVGVrNDNbMC05XVswLTldOlVUZWs6KjoqKSAjIFRla3Ryb25peCA0MzAwIHN5c3RlbSBydW5uaW5nIFVUZWsgKEJTRCkKKwllY2hvIG02OGstdGVrdHJvbml4LWJzZAorCWV4aXQgOzsKKyAgICAqOklSSVgqOio6KikKKwllY2hvIG1pcHMtc2dpLWlyaXhgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy8tL18vZydgCisJZXhpdCA7OworICAgID8/Pz8/Pz8/OkFJWD86WzEyXS4xOjIpICAgIyBBSVggMi4yLjEgb3IgQUlYIDIuMS4xIGlzIFJUL1BDIEFJWC4KKwllY2hvIHJvbXAtaWJtLWFpeCAgICAgIyB1bmFtZSAtbSBnaXZlcyBhbiA4IGhleC1jb2RlIENQVSBpZAorCWV4aXQgOzsgICAgICAgICAgICAgICAjIE5vdGUgdGhhdDogZWNobyAiJ2B1bmFtZSAtc2AnIiBnaXZlcyAnQUlYICcKKyAgICBpKjg2OkFJWDoqOiopCisJZWNobyBpMzg2LWlibS1haXgKKwlleGl0IDs7CisgICAgaWE2NDpBSVg6KjoqKQorCWlmIFsgLXggL3Vzci9iaW4vb3NsZXZlbCBdIDsgdGhlbgorCQlJQk1fUkVWPWAvdXNyL2Jpbi9vc2xldmVsYAorCWVsc2UKKwkJSUJNX1JFVj0ke1VOQU1FX1ZFUlNJT059LiR7VU5BTUVfUkVMRUFTRX0KKwlmaQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1pYm0tYWl4JHtJQk1fUkVWfQorCWV4aXQgOzsKKyAgICAqOkFJWDoyOjMpCisJaWYgZ3JlcCBib3MzMjUgL3Vzci9pbmNsdWRlL3N0ZGlvLmggPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwkJc2VkICdzL14JCS8vJyA8PCBFT0YgPiRkdW1teS5jCisJCSNpbmNsdWRlIDxzeXMvc3lzdGVtY2ZnLmg+CisKKwkJbWFpbigpCisJCQl7CisJCQlpZiAoIV9fcG93ZXJfcGMoKSkKKwkJCQlleGl0KDEpOworCQkJcHV0cygicG93ZXJwYy1pYm0tYWl4My4yLjUiKTsKKwkJCWV4aXQoMCk7CisJCQl9CitFT0YKKwkJaWYgJENDX0ZPUl9CVUlMRCAtbyAkZHVtbXkgJGR1bW15LmMgJiYgU1lTVEVNX05BTUU9YCRkdW1teWAKKwkJdGhlbgorCQkJZWNobyAiJFNZU1RFTV9OQU1FIgorCQllbHNlCisJCQllY2hvIHJzNjAwMC1pYm0tYWl4My4yLjUKKwkJZmkKKwllbGlmIGdyZXAgYm9zMzI0IC91c3IvaW5jbHVkZS9zdGRpby5oID4vZGV2L251bGwgMj4mMTsgdGhlbgorCQllY2hvIHJzNjAwMC1pYm0tYWl4My4yLjQKKwllbHNlCisJCWVjaG8gcnM2MDAwLWlibS1haXgzLjIKKwlmaQorCWV4aXQgOzsKKyAgICAqOkFJWDoqOls0NTZdKQorCUlCTV9DUFVfSUQ9YC91c3Ivc2Jpbi9sc2RldiAtQyAtYyBwcm9jZXNzb3IgLVMgYXZhaWxhYmxlIHwgc2VkIDFxIHwgYXdrICd7IHByaW50ICQxIH0nYAorCWlmIC91c3Ivc2Jpbi9sc2F0dHIgLUVsICR7SUJNX0NQVV9JRH0gfCBncmVwICcgUE9XRVInID4vZGV2L251bGwgMj4mMTsgdGhlbgorCQlJQk1fQVJDSD1yczYwMDAKKwllbHNlCisJCUlCTV9BUkNIPXBvd2VycGMKKwlmaQorCWlmIFsgLXggL3Vzci9iaW4vb3NsZXZlbCBdIDsgdGhlbgorCQlJQk1fUkVWPWAvdXNyL2Jpbi9vc2xldmVsYAorCWVsc2UKKwkJSUJNX1JFVj0ke1VOQU1FX1ZFUlNJT059LiR7VU5BTUVfUkVMRUFTRX0KKwlmaQorCWVjaG8gJHtJQk1fQVJDSH0taWJtLWFpeCR7SUJNX1JFVn0KKwlleGl0IDs7CisgICAgKjpBSVg6KjoqKQorCWVjaG8gcnM2MDAwLWlibS1haXgKKwlleGl0IDs7CisgICAgaWJtcnQ6NC40QlNEOip8cm9tcC1pYm06QlNEOiopCisJZWNobyByb21wLWlibS1ic2Q0LjQKKwlleGl0IDs7CisgICAgaWJtcnQ6KkJTRDoqfHJvbXAtaWJtOkJTRDoqKSAgICAgICAgICAgICMgY292ZXJzIFJUL1BDIEJTRCBhbmQKKwllY2hvIHJvbXAtaWJtLWJzZCR7VU5BTUVfUkVMRUFTRX0gICAjIDQuMyB3aXRoIHVuYW1lIGFkZGVkIHRvCisJZXhpdCA7OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyByZXBvcnQ6IHJvbXAtaWJtIEJTRCA0LjMKKyAgICAqOkJPU1g6KjoqKQorCWVjaG8gcnM2MDAwLWJ1bGwtYm9zeAorCWV4aXQgOzsKKyAgICBEUFgvMj8wMDpCLk8uUy46KjoqKQorCWVjaG8gbTY4ay1idWxsLXN5c3YzCisJZXhpdCA7OworICAgIDkwMDAvWzM0XT8/OjQuM2JzZDoxLio6KikKKwllY2hvIG02OGstaHAtYnNkCisJZXhpdCA7OworICAgIGhwMzAwOjQuNEJTRDoqOiogfCA5MDAwL1szNF0/Pzo0LjNic2Q6Mi4qOiopCisJZWNobyBtNjhrLWhwLWJzZDQuNAorCWV4aXQgOzsKKyAgICA5MDAwL1szNDY3OF0/PzpIUC1VWDoqOiopCisJSFBVWF9SRVY9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSouWzBCXSovLydgCisJY2FzZSAiJHtVTkFNRV9NQUNISU5FfSIgaW4KKwkgICAgOTAwMC8zMT8gKSAgICAgICAgICAgIEhQX0FSQ0g9bTY4MDAwIDs7CisJICAgIDkwMDAvWzM0XT8/ICkgICAgICAgICBIUF9BUkNIPW02OGsgOzsKKwkgICAgOTAwMC9bNjc4XVswLTldWzAtOV0pCisJCWlmIFsgLXggL3Vzci9iaW4vZ2V0Y29uZiBdOyB0aGVuCisJCSAgICBzY19jcHVfdmVyc2lvbj1gL3Vzci9iaW4vZ2V0Y29uZiBTQ19DUFVfVkVSU0lPTiAyPi9kZXYvbnVsbGAKKyAgICAgICAgICAgICAgICAgICAgc2Nfa2VybmVsX2JpdHM9YC91c3IvYmluL2dldGNvbmYgU0NfS0VSTkVMX0JJVFMgMj4vZGV2L251bGxgCisgICAgICAgICAgICAgICAgICAgIGNhc2UgIiR7c2NfY3B1X3ZlcnNpb259IiBpbgorICAgICAgICAgICAgICAgICAgICAgIDUyMykgSFBfQVJDSD0iaHBwYTEuMCIgOzsgIyBDUFVfUEFfUklTQzFfMAorICAgICAgICAgICAgICAgICAgICAgIDUyOCkgSFBfQVJDSD0iaHBwYTEuMSIgOzsgIyBDUFVfUEFfUklTQzFfMQorICAgICAgICAgICAgICAgICAgICAgIDUzMikgICAgICAgICAgICAgICAgICAgICAgIyBDUFVfUEFfUklTQzJfMAorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJHtzY19rZXJuZWxfYml0c30iIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgIDMyKSBIUF9BUkNIPSJocHBhMi4wbiIgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgNjQpIEhQX0FSQ0g9ImhwcGEyLjB3IiA7OworCQkJICAnJykgSFBfQVJDSD0iaHBwYTIuMCIgOzsgICAjIEhQLVVYIDEwLjIwCisgICAgICAgICAgICAgICAgICAgICAgICBlc2FjIDs7CisgICAgICAgICAgICAgICAgICAgIGVzYWMKKwkJZmkKKwkJaWYgWyAiJHtIUF9BUkNIfSIgPSAiIiBdOyB0aGVuCisJCSAgICBldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJCSAgICBzZWQgJ3MvXiAgICAgICAgICAgICAgLy8nIDw8IEVPRiA+JGR1bW15LmMKKworICAgICAgICAgICAgICAjZGVmaW5lIF9IUFVYX1NPVVJDRQorICAgICAgICAgICAgICAjaW5jbHVkZSA8c3RkbGliLmg+CisgICAgICAgICAgICAgICNpbmNsdWRlIDx1bmlzdGQuaD4KKworICAgICAgICAgICAgICBpbnQgbWFpbiAoKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICNpZiBkZWZpbmVkKF9TQ19LRVJORUxfQklUUykKKyAgICAgICAgICAgICAgICAgIGxvbmcgYml0cyA9IHN5c2NvbmYoX1NDX0tFUk5FTF9CSVRTKTsKKyAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgICBsb25nIGNwdSAgPSBzeXNjb25mIChfU0NfQ1BVX1ZFUlNJT04pOworCisgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNwdSkKKyAgICAgICAgICAgICAgCXsKKyAgICAgICAgICAgICAgCWNhc2UgQ1BVX1BBX1JJU0MxXzA6IHB1dHMgKCJocHBhMS4wIik7IGJyZWFrOworICAgICAgICAgICAgICAJY2FzZSBDUFVfUEFfUklTQzFfMTogcHV0cyAoImhwcGExLjEiKTsgYnJlYWs7CisgICAgICAgICAgICAgIAljYXNlIENQVV9QQV9SSVNDMl8wOgorICAgICAgICAgICAgICAjaWYgZGVmaW5lZChfU0NfS0VSTkVMX0JJVFMpCisgICAgICAgICAgICAgIAkgICAgc3dpdGNoIChiaXRzKQorICAgICAgICAgICAgICAJCXsKKyAgICAgICAgICAgICAgCQljYXNlIDY0OiBwdXRzICgiaHBwYTIuMHciKTsgYnJlYWs7CisgICAgICAgICAgICAgIAkJY2FzZSAzMjogcHV0cyAoImhwcGEyLjBuIik7IGJyZWFrOworICAgICAgICAgICAgICAJCWRlZmF1bHQ6IHB1dHMgKCJocHBhMi4wIik7IGJyZWFrOworICAgICAgICAgICAgICAJCX0gYnJlYWs7CisgICAgICAgICAgICAgICNlbHNlICAvKiAhZGVmaW5lZChfU0NfS0VSTkVMX0JJVFMpICovCisgICAgICAgICAgICAgIAkgICAgcHV0cyAoImhwcGEyLjAiKTsgYnJlYWs7CisgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAJZGVmYXVsdDogcHV0cyAoImhwcGExLjAiKTsgYnJlYWs7CisgICAgICAgICAgICAgIAl9CisgICAgICAgICAgICAgICAgICBleGl0ICgwKTsKKyAgICAgICAgICAgICAgfQorRU9GCisJCSAgICAoQ0NPUFRTPSAkQ0NfRk9SX0JVSUxEIC1vICRkdW1teSAkZHVtbXkuYyAyPi9kZXYvbnVsbCkgJiYgSFBfQVJDSD1gJGR1bW15YAorCQkgICAgdGVzdCAteiAiJEhQX0FSQ0giICYmIEhQX0FSQ0g9aHBwYQorCQlmaSA7OworCWVzYWMKKwlpZiBbICR7SFBfQVJDSH0gPSAiaHBwYTIuMHciIF0KKwl0aGVuCisJICAgIGV2YWwgJHNldF9jY19mb3JfYnVpbGQKKworCSAgICAjIGhwcGEyLjB3LWhwLWhwdXgqIGhhcyBhIDY0LWJpdCBrZXJuZWwgYW5kIGEgY29tcGlsZXIgZ2VuZXJhdGluZworCSAgICAjIDMyLWJpdCBjb2RlLiAgaHBwYTY0LWhwLWhwdXgqIGhhcyB0aGUgc2FtZSBrZXJuZWwgYW5kIGEgY29tcGlsZXIKKwkgICAgIyBnZW5lcmF0aW5nIDY0LWJpdCBjb2RlLiAgR05VIGFuZCBIUCB1c2UgZGlmZmVyZW50IG5vbWVuY2xhdHVyZToKKwkgICAgIworCSAgICAjICQgQ0NfRk9SX0JVSUxEPWNjIC4vY29uZmlnLmd1ZXNzCisJICAgICMgPT4gaHBwYTIuMHctaHAtaHB1eDExLjIzCisJICAgICMgJCBDQ19GT1JfQlVJTEQ9ImNjICtEQTIuMHciIC4vY29uZmlnLmd1ZXNzCisJICAgICMgPT4gaHBwYTY0LWhwLWhwdXgxMS4yMworCisJICAgIGlmIGVjaG8gX19MUDY0X18gfCAoQ0NPUFRTPSAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwpIHwKKwkJZ3JlcCAtcSBfX0xQNjRfXworCSAgICB0aGVuCisJCUhQX0FSQ0g9ImhwcGEyLjB3IgorCSAgICBlbHNlCisJCUhQX0FSQ0g9ImhwcGE2NCIKKwkgICAgZmkKKwlmaQorCWVjaG8gJHtIUF9BUkNIfS1ocC1ocHV4JHtIUFVYX1JFVn0KKwlleGl0IDs7CisgICAgaWE2NDpIUC1VWDoqOiopCisJSFBVWF9SRVY9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSouWzBCXSovLydgCisJZWNobyBpYTY0LWhwLWhwdXgke0hQVVhfUkVWfQorCWV4aXQgOzsKKyAgICAzMDUwKjpISS1VWDoqOiopCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCXNlZCAncy9eCS8vJyA8PCBFT0YgPiRkdW1teS5jCisJI2luY2x1ZGUgPHVuaXN0ZC5oPgorCWludAorCW1haW4gKCkKKwl7CisJICBsb25nIGNwdSA9IHN5c2NvbmYgKF9TQ19DUFVfVkVSU0lPTik7CisJICAvKiBUaGUgb3JkZXIgbWF0dGVycywgYmVjYXVzZSBDUFVfSVNfSFBfTUM2OEsgZXJyb25lb3VzbHkgcmV0dXJucworCSAgICAgdHJ1ZSBmb3IgQ1BVX1BBX1JJU0MxXzAuICBDUFVfSVNfUEFfUklTQyByZXR1cm5zIGNvcnJlY3QKKwkgICAgIHJlc3VsdHMsIGhvd2V2ZXIuICAqLworCSAgaWYgKENQVV9JU19QQV9SSVNDIChjcHUpKQorCSAgICB7CisJICAgICAgc3dpdGNoIChjcHUpCisJCXsKKwkJICBjYXNlIENQVV9QQV9SSVNDMV8wOiBwdXRzICgiaHBwYTEuMC1oaXRhY2hpLWhpdXh3ZTIiKTsgYnJlYWs7CisJCSAgY2FzZSBDUFVfUEFfUklTQzFfMTogcHV0cyAoImhwcGExLjEtaGl0YWNoaS1oaXV4d2UyIik7IGJyZWFrOworCQkgIGNhc2UgQ1BVX1BBX1JJU0MyXzA6IHB1dHMgKCJocHBhMi4wLWhpdGFjaGktaGl1eHdlMiIpOyBicmVhazsKKwkJICBkZWZhdWx0OiBwdXRzICgiaHBwYS1oaXRhY2hpLWhpdXh3ZTIiKTsgYnJlYWs7CisJCX0KKwkgICAgfQorCSAgZWxzZSBpZiAoQ1BVX0lTX0hQX01DNjhLIChjcHUpKQorCSAgICBwdXRzICgibTY4ay1oaXRhY2hpLWhpdXh3ZTIiKTsKKwkgIGVsc2UgcHV0cyAoInVua25vd24taGl0YWNoaS1oaXV4d2UyIik7CisJICBleGl0ICgwKTsKKwl9CitFT0YKKwkkQ0NfRk9SX0JVSUxEIC1vICRkdW1teSAkZHVtbXkuYyAmJiBTWVNURU1fTkFNRT1gJGR1bW15YCAmJgorCQl7IGVjaG8gIiRTWVNURU1fTkFNRSI7IGV4aXQ7IH0KKwllY2hvIHVua25vd24taGl0YWNoaS1oaXV4d2UyCisJZXhpdCA7OworICAgIDkwMDAvNz8/OjQuM2JzZDoqOiogfCA5MDAwLzg/Wzc5XTo0LjNic2Q6KjoqICkKKwllY2hvIGhwcGExLjEtaHAtYnNkCisJZXhpdCA7OworICAgIDkwMDAvOD8/OjQuM2JzZDoqOiopCisJZWNobyBocHBhMS4wLWhwLWJzZAorCWV4aXQgOzsKKyAgICAqOT8/KjpNUEUvaVg6KjoqIHwgKjMwMDAqOk1QRS9pWDoqOiopCisJZWNobyBocHBhMS4wLWhwLW1wZWl4CisJZXhpdCA7OworICAgIGhwNz8/Ok9TRjE6KjoqIHwgaHA4P1s3OV06T1NGMToqOiogKQorCWVjaG8gaHBwYTEuMS1ocC1vc2YKKwlleGl0IDs7CisgICAgaHA4Pz86T1NGMToqOiopCisJZWNobyBocHBhMS4wLWhwLW9zZgorCWV4aXQgOzsKKyAgICBpKjg2Ok9TRjE6KjoqKQorCWlmIFsgLXggL3Vzci9zYmluL3N5c3ZlcnNpb24gXSA7IHRoZW4KKwkgICAgZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tb3NmMW1rCisJZWxzZQorCSAgICBlY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1vc2YxCisJZmkKKwlleGl0IDs7CisgICAgcGFyaXNjKjpMaXRlcyo6KjoqKQorCWVjaG8gaHBwYTEuMS1ocC1saXRlcworCWV4aXQgOzsKKyAgICBDMSo6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkMxKjoqKQorCWVjaG8gYzEtY29udmV4LWJzZAorICAgICAgICBleGl0IDs7CisgICAgQzIqOkNvbnZleE9TOio6KiB8IGNvbnZleDpDb252ZXhPUzpDMio6KikKKwlpZiBnZXRzeXNpbmZvIC1mIHNjYWxhcl9hY2MKKwl0aGVuIGVjaG8gYzMyLWNvbnZleC1ic2QKKwllbHNlIGVjaG8gYzItY29udmV4LWJzZAorCWZpCisgICAgICAgIGV4aXQgOzsKKyAgICBDMzQqOkNvbnZleE9TOio6KiB8IGNvbnZleDpDb252ZXhPUzpDMzQqOiopCisJZWNobyBjMzQtY29udmV4LWJzZAorICAgICAgICBleGl0IDs7CisgICAgQzM4KjpDb252ZXhPUzoqOiogfCBjb252ZXg6Q29udmV4T1M6QzM4KjoqKQorCWVjaG8gYzM4LWNvbnZleC1ic2QKKyAgICAgICAgZXhpdCA7OworICAgIEM0KjpDb252ZXhPUzoqOiogfCBjb252ZXg6Q29udmV4T1M6QzQqOiopCisJZWNobyBjNC1jb252ZXgtYnNkCisgICAgICAgIGV4aXQgOzsKKyAgICBDUkFZKlktTVA6KjoqOiopCisJZWNobyB5bXAtY3JheS11bmljb3Mke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL1wuW14uXSokLy5YLycKKwlleGl0IDs7CisgICAgQ1JBWSpbQS1aXTkwOio6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1jcmF5LXVuaWNvcyR7VU5BTUVfUkVMRUFTRX0gXAorCXwgc2VkIC1lICdzL0NSQVkuKlwoW0EtWl05MFwpL1wxLycgXAorCSAgICAgIC1lIHkvQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVovYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXovIFwKKwkgICAgICAtZSAncy9cLlteLl0qJC8uWC8nCisJZXhpdCA7OworICAgIENSQVkqVFM6KjoqOiopCisJZWNobyB0OTAtY3JheS11bmljb3Mke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL1wuW14uXSokLy5YLycKKwlleGl0IDs7CisgICAgQ1JBWSpUM0U6KjoqOiopCisJZWNobyBhbHBoYWV2NS1jcmF5LXVuaWNvc21rJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9cLlteLl0qJC8uWC8nCisJZXhpdCA7OworICAgIENSQVkqU1YxOio6KjoqKQorCWVjaG8gc3YxLWNyYXktdW5pY29zJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9cLlteLl0qJC8uWC8nCisJZXhpdCA7OworICAgICo6VU5JQ09TL21wOio6KikKKwllY2hvIGNyYXludi1jcmF5LXVuaWNvc21wJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9cLlteLl0qJC8uWC8nCisJZXhpdCA7OworICAgIEYzMFswMV06VU5JWF9TeXN0ZW1fVjoqOiogfCBGNzAwOlVOSVhfU3lzdGVtX1Y6KjoqKQorCUZVSklUU1VfUFJPQz1gdW5hbWUgLW0gfCB0ciAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eidgCisgICAgICAgIEZVSklUU1VfU1lTPWB1bmFtZSAtcCB8IHRyICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JyB8IHNlZCAtZSAncy9cLy8vJ2AKKyAgICAgICAgRlVKSVRTVV9SRUw9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy8gL18vJ2AKKyAgICAgICAgZWNobyAiJHtGVUpJVFNVX1BST0N9LWZ1aml0c3UtJHtGVUpJVFNVX1NZU30ke0ZVSklUU1VfUkVMfSIKKyAgICAgICAgZXhpdCA7OworICAgIDUwMDA6VU5JWF9TeXN0ZW1fVjo0Lio6KikKKyAgICAgICAgRlVKSVRTVV9TWVM9YHVuYW1lIC1wIHwgdHIgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonIHwgc2VkIC1lICdzL1wvLy8nYAorICAgICAgICBGVUpJVFNVX1JFTD1gZWNobyAke1VOQU1FX1JFTEVBU0V9IHwgdHIgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonIHwgc2VkIC1lICdzLyAvXy8nYAorICAgICAgICBlY2hvICJzcGFyYy1mdWppdHN1LSR7RlVKSVRTVV9TWVN9JHtGVUpJVFNVX1JFTH0iCisJZXhpdCA7OworICAgIGkqODY6QlNELzM4NjoqOiogfCBpKjg2OkJTRC9PUzoqOiogfCAqOkFzY2VuZFwgRW1iZWRkZWQvT1M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1ic2RpJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBzcGFyYyo6QlNEL09TOio6KikKKwllY2hvIHNwYXJjLXVua25vd24tYnNkaSR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpCU0QvT1M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWJzZGkke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6RnJlZUJTRDoqOiopCisJY2FzZSAke1VOQU1FX01BQ0hJTkV9IGluCisJICAgIHBjOTgpCisJCWVjaG8gaTM4Ni11bmtub3duLWZyZWVic2RgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLShdLiovLydgIDs7CisJICAgIGFtZDY0KQorCQllY2hvIHg4Nl82NC11bmtub3duLWZyZWVic2RgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLShdLiovLydgIDs7CisJICAgICopCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWZyZWVic2RgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLShdLiovLydgIDs7CisJZXNhYworCWV4aXQgOzsKKyAgICBpKjpDWUdXSU4qOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLWN5Z3dpbgorCWV4aXQgOzsKKyAgICAqOk1JTkdXKjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1taW5ndzMyCisJZXhpdCA7OworICAgIGkqOndpbmRvd3MzMio6KikKKyAgICAJIyB1bmFtZSAtbSBpbmNsdWRlcyAiLXBjIiBvbiB0aGlzIHN5c3RlbS4KKyAgICAJZWNobyAke1VOQU1FX01BQ0hJTkV9LW1pbmd3MzIKKwlleGl0IDs7CisgICAgaSo6UFcqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXB3MzIKKwlleGl0IDs7CisgICAgKjpJbnRlcml4KjoqKQorICAgIAljYXNlICR7VU5BTUVfTUFDSElORX0gaW4KKwkgICAgeDg2KQorCQllY2hvIGk1ODYtcGMtaW50ZXJpeCR7VU5BTUVfUkVMRUFTRX0KKwkJZXhpdCA7OworCSAgICBhdXRoZW50aWNhbWQgfCBnZW51aW5laW50ZWwgfCBFTTY0VCkKKwkJZWNobyB4ODZfNjQtdW5rbm93bi1pbnRlcml4JHtVTkFNRV9SRUxFQVNFfQorCQlleGl0IDs7CisJICAgIElBNjQpCisJCWVjaG8gaWE2NC11bmtub3duLWludGVyaXgke1VOQU1FX1JFTEVBU0V9CisJCWV4aXQgOzsKKwllc2FjIDs7CisgICAgWzM0NV04NjpXaW5kb3dzXzk1OiogfCBbMzQ1XTg2OldpbmRvd3NfOTg6KiB8IFszNDVdODY6V2luZG93c19OVDoqKQorCWVjaG8gaSR7VU5BTUVfTUFDSElORX0tcGMtbWtzCisJZXhpdCA7OworICAgIDg2NjQ6V2luZG93c19OVDoqKQorCWVjaG8geDg2XzY0LXBjLW1rcworCWV4aXQgOzsKKyAgICBpKjpXaW5kb3dzX05UKjoqIHwgUGVudGl1bSo6V2luZG93c19OVCo6KikKKwkjIEhvdyBkbyB3ZSBrbm93IGl0J3MgSW50ZXJpeCByYXRoZXIgdGhhbiB0aGUgZ2VuZXJpYyBQT1NJWCBzdWJzeXN0ZW0/CisJIyBJdCBhbHNvIGNvbmZsaWN0cyB3aXRoIHByZS0yLjAgdmVyc2lvbnMgb2YgQVQmVCBVV0lOLiBTaG91bGQgd2UKKwkjIFVOQU1FX01BQ0hJTkUgYmFzZWQgb24gdGhlIG91dHB1dCBvZiB1bmFtZSBpbnN0ZWFkIG9mIGkzODY/CisJZWNobyBpNTg2LXBjLWludGVyaXgKKwlleGl0IDs7CisgICAgaSo6VVdJTio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtdXdpbgorCWV4aXQgOzsKKyAgICBhbWQ2NDpDWUdXSU4qOio6KiB8IHg4Nl82NDpDWUdXSU4qOio6KikKKwllY2hvIHg4Nl82NC11bmtub3duLWN5Z3dpbgorCWV4aXQgOzsKKyAgICBwKjpDWUdXSU4qOiopCisJZWNobyBwb3dlcnBjbGUtdW5rbm93bi1jeWd3aW4KKwlleGl0IDs7CisgICAgcHJlcCo6U3VuT1M6NS4qOiopCisJZWNobyBwb3dlcnBjbGUtdW5rbm93bi1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorCWV4aXQgOzsKKyAgICAqOkdOVToqOiopCisJIyB0aGUgR05VIHN5c3RlbQorCWVjaG8gYGVjaG8gJHtVTkFNRV9NQUNISU5FfXxzZWQgLWUgJ3MsWy0vXS4qJCwsJ2AtdW5rbm93bi1nbnVgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncywvLiokLCwnYAorCWV4aXQgOzsKKyAgICAqOkdOVS8qOio6KikKKwkjIG90aGVyIHN5c3RlbXMgd2l0aCBHTlUgbGliYyBhbmQgdXNlcmxhbmQKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1gZWNobyAke1VOQU1FX1NZU1RFTX0gfCBzZWQgJ3MsXlteL10qLywsJyB8IHRyICdbQS1aXScgJ1thLXpdJ2BgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLShdLiovLydgLWdudQorCWV4aXQgOzsKKyAgICBpKjg2Ok1pbml4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtbWluaXgKKwlleGl0IDs7CisgICAgYWxwaGE6TGludXg6KjoqKQorCWNhc2UgYHNlZCAtbiAnL15jcHUgbW9kZWwvcy9eLio6IFwoLipcKS9cMS9wJyA8IC9wcm9jL2NwdWluZm9gIGluCisJICBFVjUpICAgVU5BTUVfTUFDSElORT1hbHBoYWV2NSA7OworCSAgRVY1NikgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjU2IDs7CisJICBQQ0E1NikgVU5BTUVfTUFDSElORT1hbHBoYXBjYTU2IDs7CisJICBQQ0E1NykgVU5BTUVfTUFDSElORT1hbHBoYXBjYTU2IDs7CisJICBFVjYpICAgVU5BTUVfTUFDSElORT1hbHBoYWV2NiA7OworCSAgRVY2NykgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjY3IDs7CisJICBFVjY4KikgVU5BTUVfTUFDSElORT1hbHBoYWV2NjggOzsKKyAgICAgICAgZXNhYworCW9iamR1bXAgLS1wcml2YXRlLWhlYWRlcnMgL2Jpbi9zaCB8IGdyZXAgLXEgbGQuc28uMQorCWlmIHRlc3QgIiQ/IiA9IDAgOyB0aGVuIExJQkM9ImxpYmMxIiA7IGVsc2UgTElCQz0iIiA7IGZpCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251JHtMSUJDfQorCWV4aXQgOzsKKyAgICBhcm0qOkxpbnV4Oio6KikKKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJaWYgZWNobyBfX0FSTV9FQUJJX18gfCAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwgXAorCSAgICB8IGdyZXAgLXEgX19BUk1fRUFCSV9fCisJdGhlbgorCSAgICBlY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwllbHNlCisJICAgIGVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudWVhYmkKKwlmaQorCWV4aXQgOzsKKyAgICBhdnIzMio6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBjcmlzOkxpbnV4Oio6KikKKwllY2hvIGNyaXMtYXhpcy1saW51eC1nbnUKKwlleGl0IDs7CisgICAgY3Jpc3YzMjpMaW51eDoqOiopCisJZWNobyBjcmlzdjMyLWF4aXMtbGludXgtZ251CisJZXhpdCA7OworICAgIGZydjpMaW51eDoqOiopCisgICAgCWVjaG8gZnJ2LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIGkqODY6TGludXg6KjoqKQorCUxJQkM9Z251CisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCXNlZCAncy9eCS8vJyA8PCBFT0YgPiRkdW1teS5jCisJI2lmZGVmIF9fZGlldGxpYmNfXworCUxJQkM9ZGlldGxpYmMKKwkjZW5kaWYKK0VPRgorCWV2YWwgYCRDQ19GT1JfQlVJTEQgLUUgJGR1bW15LmMgMj4vZGV2L251bGwgfCBncmVwICdeTElCQydgCisJZWNobyAiJHtVTkFNRV9NQUNISU5FfS1wYy1saW51eC0ke0xJQkN9IgorCWV4aXQgOzsKKyAgICBpYTY0OkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgbTMycio6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBtNjgqOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgbWlwczpMaW51eDoqOiogfCBtaXBzNjQ6TGludXg6KjoqKQorCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwlzZWQgJ3MvXgkvLycgPDwgRU9GID4kZHVtbXkuYworCSN1bmRlZiBDUFUKKwkjdW5kZWYgJHtVTkFNRV9NQUNISU5FfQorCSN1bmRlZiAke1VOQU1FX01BQ0hJTkV9ZWwKKwkjaWYgZGVmaW5lZChfX01JUFNFTF9fKSB8fCBkZWZpbmVkKF9fTUlQU0VMKSB8fCBkZWZpbmVkKF9NSVBTRUwpIHx8IGRlZmluZWQoTUlQU0VMKQorCUNQVT0ke1VOQU1FX01BQ0hJTkV9ZWwKKwkjZWxzZQorCSNpZiBkZWZpbmVkKF9fTUlQU0VCX18pIHx8IGRlZmluZWQoX19NSVBTRUIpIHx8IGRlZmluZWQoX01JUFNFQikgfHwgZGVmaW5lZChNSVBTRUIpCisJQ1BVPSR7VU5BTUVfTUFDSElORX0KKwkjZWxzZQorCUNQVT0KKwkjZW5kaWYKKwkjZW5kaWYKK0VPRgorCWV2YWwgYCRDQ19GT1JfQlVJTEQgLUUgJGR1bW15LmMgMj4vZGV2L251bGwgfCBncmVwICdeQ1BVJ2AKKwl0ZXN0IHgiJHtDUFV9IiAhPSB4ICYmIHsgZWNobyAiJHtDUFV9LXVua25vd24tbGludXgtZ251IjsgZXhpdDsgfQorCTs7CisgICAgb3IzMjpMaW51eDoqOiopCisJZWNobyBvcjMyLXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIHBhZHJlOkxpbnV4Oio6KikKKwllY2hvIHNwYXJjLXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIHBhcmlzYzY0OkxpbnV4Oio6KiB8IGhwcGE2NDpMaW51eDoqOiopCisJZWNobyBocHBhNjQtdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgcGFyaXNjOkxpbnV4Oio6KiB8IGhwcGE6TGludXg6KjoqKQorCSMgTG9vayBmb3IgQ1BVIGxldmVsCisJY2FzZSBgZ3JlcCAnXmNwdVteYS16XSo6JyAvcHJvYy9jcHVpbmZvIDI+L2Rldi9udWxsIHwgY3V0IC1kJyAnIC1mMmAgaW4KKwkgIFBBNyopIGVjaG8gaHBwYTEuMS11bmtub3duLWxpbnV4LWdudSA7OworCSAgUEE4KikgZWNobyBocHBhMi4wLXVua25vd24tbGludXgtZ251IDs7CisJICAqKSAgICBlY2hvIGhwcGEtdW5rbm93bi1saW51eC1nbnUgOzsKKwllc2FjCisJZXhpdCA7OworICAgIHBwYzY0OkxpbnV4Oio6KikKKwllY2hvIHBvd2VycGM2NC11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBwcGM6TGludXg6KjoqKQorCWVjaG8gcG93ZXJwYy11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBzMzkwOkxpbnV4Oio6KiB8IHMzOTB4OkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0taWJtLWxpbnV4CisJZXhpdCA7OworICAgIHNoNjQqOkxpbnV4Oio6KikKKyAgICAJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIHNoKjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIHNwYXJjOkxpbnV4Oio6KiB8IHNwYXJjNjQ6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICB2YXg6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1kZWMtbGludXgtZ251CisJZXhpdCA7OworICAgIHg4Nl82NDpMaW51eDoqOiopCisJZWNobyB4ODZfNjQtdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgeHRlbnNhKjpMaW51eDoqOiopCisgICAgCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBpKjg2OkRZTklYL3B0eDo0KjoqKQorCSMgcHR4IDQuMCBkb2VzIHVuYW1lIC1zIGNvcnJlY3RseSwgd2l0aCBEWU5JWC9wdHggaW4gdGhlcmUuCisJIyBlYXJsaWVyIHZlcnNpb25zIGFyZSBtZXNzZWQgdXAgYW5kIHB1dCB0aGUgbm9kZW5hbWUgaW4gYm90aAorCSMgc3lzbmFtZSBhbmQgbm9kZW5hbWUuCisJZWNobyBpMzg2LXNlcXVlbnQtc3lzdjQKKwlleGl0IDs7CisgICAgaSo4NjpVTklYX1NWOjQuMk1QOjIuKikKKyAgICAgICAgIyBVbml4d2FyZSBpcyBhbiBvZmZzaG9vdCBvZiBTVlI0LCBidXQgaXQgaGFzIGl0cyBvd24gdmVyc2lvbgorICAgICAgICAjIG51bWJlciBzZXJpZXMgc3RhcnRpbmcgd2l0aCAyLi4uCisgICAgICAgICMgSSBhbSBub3QgcG9zaXRpdmUgdGhhdCBvdGhlciBTVlI0IHN5c3RlbXMgd29uJ3QgbWF0Y2ggdGhpcywKKwkjIEkganVzdCBoYXZlIHRvIGhvcGUuICAtLSBybXMuCisgICAgICAgICMgVXNlIHN5c3Y0LjJ1dy4uLiBzbyB0aGF0IHN5c3Y0KiBtYXRjaGVzIGl0LgorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1zeXN2NC4ydXcke1VOQU1FX1ZFUlNJT059CisJZXhpdCA7OworICAgIGkqODY6T1MvMjoqOiopCisJIyBJZiB3ZSB3ZXJlIGFibGUgdG8gZmluZCBgdW5hbWUnLCB0aGVuIEVNWCBVbml4IGNvbXBhdGliaWxpdHkKKwkjIGlzIHByb2JhYmx5IGluc3RhbGxlZC4KKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtb3MyLWVteAorCWV4aXQgOzsKKyAgICBpKjg2OlhUUy0zMDA6KjpTVE9QKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLXN0b3AKKwlleGl0IDs7CisgICAgaSo4NjphdGhlb3M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWF0aGVvcworCWV4aXQgOzsKKyAgICBpKjg2OnN5bGxhYmxlOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc3lsbGFibGUKKwlleGl0IDs7CisgICAgaSo4NjpMeW54T1M6Mi4qOiogfCBpKjg2Okx5bnhPUzozLlswMV0qOiogfCBpKjg2Okx5bnhPUzo0LlswMl0qOiopCisJZWNobyBpMzg2LXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBpKjg2OipET1M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1tc2Rvc2RqZ3BwCisJZXhpdCA7OworICAgIGkqODY6Kjo0Lio6KiB8IGkqODY6U1lTVEVNX1Y6NC4qOiopCisJVU5BTUVfUkVMPWBlY2hvICR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgJ3MvXC9NUCQvLydgCisJaWYgZ3JlcCBOb3ZlbGwgL3Vzci9pbmNsdWRlL2xpbmsuaCA+L2Rldi9udWxsIDI+L2Rldi9udWxsOyB0aGVuCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bml2ZWwtc3lzdiR7VU5BTUVfUkVMfQorCWVsc2UKKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXN5c3Yke1VOQU1FX1JFTH0KKwlmaQorCWV4aXQgOzsKKyAgICBpKjg2Oio6NTpbNjc4XSopCisgICAgCSMgVW5peFdhcmUgNy54LCBPcGVuVU5JWCBhbmQgT3BlblNlcnZlciA2LgorCWNhc2UgYC9iaW4vdW5hbWUgLVggfCBncmVwICJeTWFjaGluZSJgIGluCisJICAgICo0ODYqKQkgICAgIFVOQU1FX01BQ0hJTkU9aTQ4NiA7OworCSAgICAqUGVudGl1bSkJICAgICBVTkFNRV9NQUNISU5FPWk1ODYgOzsKKwkgICAgKlBlbnQqfCpDZWxlcm9uKSBVTkFNRV9NQUNISU5FPWk2ODYgOzsKKwllc2FjCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tc3lzdiR7VU5BTUVfUkVMRUFTRX0ke1VOQU1FX1NZU1RFTX0ke1VOQU1FX1ZFUlNJT059CisJZXhpdCA7OworICAgIGkqODY6KjozLjI6KikKKwlpZiB0ZXN0IC1mIC91c3Ivb3B0aW9ucy9jYi5uYW1lOyB0aGVuCisJCVVOQU1FX1JFTD1gc2VkIC1uICdzLy4qVmVyc2lvbiAvL3AnIDwvdXNyL29wdGlvbnMvY2IubmFtZWAKKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLWlzYyRVTkFNRV9SRUwKKwllbGlmIC9iaW4vdW5hbWUgLVggMj4vZGV2L251bGwgPi9kZXYvbnVsbCA7IHRoZW4KKwkJVU5BTUVfUkVMPWAoL2Jpbi91bmFtZSAtWHxncmVwIFJlbGVhc2V8c2VkIC1lICdzLy4qPSAvLycpYAorCQkoL2Jpbi91bmFtZSAtWHxncmVwIGk4MDQ4NiA+L2Rldi9udWxsKSAmJiBVTkFNRV9NQUNISU5FPWk0ODYKKwkJKC9iaW4vdW5hbWUgLVh8Z3JlcCAnXk1hY2hpbmUuKlBlbnRpdW0nID4vZGV2L251bGwpIFwKKwkJCSYmIFVOQU1FX01BQ0hJTkU9aTU4NgorCQkoL2Jpbi91bmFtZSAtWHxncmVwICdeTWFjaGluZS4qUGVudCAqSUknID4vZGV2L251bGwpIFwKKwkJCSYmIFVOQU1FX01BQ0hJTkU9aTY4NgorCQkoL2Jpbi91bmFtZSAtWHxncmVwICdeTWFjaGluZS4qUGVudGl1bSBQcm8nID4vZGV2L251bGwpIFwKKwkJCSYmIFVOQU1FX01BQ0hJTkU9aTY4NgorCQllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc2NvJFVOQU1FX1JFTAorCWVsc2UKKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXN5c3YzMgorCWZpCisJZXhpdCA7OworICAgIHBjOio6KjoqKQorCSMgTGVmdCBoZXJlIGZvciBjb21wYXRpYmlsaXR5OgorICAgICAgICAjIHVuYW1lIC1tIHByaW50cyBmb3IgREpHUFAgYWx3YXlzICdwYycsIGJ1dCBpdCBwcmludHMgbm90aGluZyBhYm91dAorICAgICAgICAjIHRoZSBwcm9jZXNzb3IsIHNvIHdlIHBsYXkgc2FmZSBieSBhc3N1bWluZyBpNTg2LgorCSMgTm90ZTogd2hhdGV2ZXIgdGhpcyBpcywgaXQgTVVTVCBiZSB0aGUgc2FtZSBhcyB3aGF0IGNvbmZpZy5zdWIKKwkjIHByaW50cyBmb3IgdGhlICJkamdwcCIgaG9zdCwgb3IgZWxzZSBHREIgY29uZmlndXJ5IHdpbGwgZGVjaWRlIHRoYXQKKwkjIHRoaXMgaXMgYSBjcm9zcy1idWlsZC4KKwllY2hvIGk1ODYtcGMtbXNkb3NkamdwcAorICAgICAgICBleGl0IDs7CisgICAgSW50ZWw6TWFjaDozKjoqKQorCWVjaG8gaTM4Ni1wYy1tYWNoMworCWV4aXQgOzsKKyAgICBwYXJhZ29uOio6KjoqKQorCWVjaG8gaTg2MC1pbnRlbC1vc2YxCisJZXhpdCA7OworICAgIGk4NjA6Kjo0Lio6KikgIyBpODYwLVNWUjQKKwlpZiBncmVwIFN0YXJkZW50IC91c3IvaW5jbHVkZS9zeXMvdWFkbWluLmggPi9kZXYvbnVsbCAyPiYxIDsgdGhlbgorCSAgZWNobyBpODYwLXN0YXJkZW50LXN5c3Yke1VOQU1FX1JFTEVBU0V9ICMgU3RhcmRlbnQgVmlzdHJhIGk4NjAtU1ZSNAorCWVsc2UgIyBBZGQgb3RoZXIgaTg2MC1TVlI0IHZlbmRvcnMgYmVsb3cgYXMgdGhleSBhcmUgZGlzY292ZXJlZC4KKwkgIGVjaG8gaTg2MC11bmtub3duLXN5c3Yke1VOQU1FX1JFTEVBU0V9ICAjIFVua25vd24gaTg2MC1TVlI0CisJZmkKKwlleGl0IDs7CisgICAgbWluaSo6Q1RJWDpTWVMqNToqKQorCSMgIm1pbmlmcmFtZSIKKwllY2hvIG02ODAxMC1jb252ZXJnZW50LXN5c3YKKwlleGl0IDs7CisgICAgbWM2OGs6VU5JWDpTWVNURU01OjMuNTFtKQorCWVjaG8gbTY4ay1jb252ZXJnZW50LXN5c3YKKwlleGl0IDs7CisgICAgTTY4MD8wOkQtTklYOjUuMzoqKQorCWVjaG8gbTY4ay1kaWFiLWRuaXgKKwlleGl0IDs7CisgICAgTTY4KjoqOlIzVls1Njc4XSo6KikKKwl0ZXN0IC1yIC9zeXNWNjggJiYgeyBlY2hvICdtNjhrLW1vdG9yb2xhLXN5c3YnOyBleGl0OyB9IDs7CisgICAgM1szNDVdPz86Kjo0LjA6My4wIHwgM1szNF0/P0E6Kjo0LjA6My4wIHwgM1szNF0/PywqOio6NC4wOjMuMCB8IDNbMzRdPz8vKjoqOjQuMDozLjAgfCA0NDAwOio6NC4wOjMuMCB8IDQ4NTA6Kjo0LjA6My4wIHwgU0tBNDA6Kjo0LjA6My4wIHwgU0RTMjoqOjQuMDozLjAgfCBTSEcyOio6NC4wOjMuMCB8IFM3NTAxKjoqOjQuMDozLjApCisJT1NfUkVMPScnCisJdGVzdCAtciAvZXRjLy5yZWxpZCBcCisJJiYgT1NfUkVMPS5gc2VkIC1uICdzL1teIF0qIFteIF0qIFwoWzAtOV1bMC05XVwpLiovXDEvcCcgPCAvZXRjLy5yZWxpZGAKKwkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgZ3JlcCA4NiA+L2Rldi9udWxsIFwKKwkgICYmIHsgZWNobyBpNDg2LW5jci1zeXN2NC4zJHtPU19SRUx9OyBleGl0OyB9CisJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IC9iaW4vZ3JlcCBlbnRpdW0gPi9kZXYvbnVsbCBcCisJICAmJiB7IGVjaG8gaTU4Ni1uY3Itc3lzdjQuMyR7T1NfUkVMfTsgZXhpdDsgfSA7OworICAgIDNbMzRdPz86Kjo0LjA6KiB8IDNbMzRdPz8sKjoqOjQuMDoqKQorICAgICAgICAvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgZ3JlcCA4NiA+L2Rldi9udWxsIFwKKyAgICAgICAgICAmJiB7IGVjaG8gaTQ4Ni1uY3Itc3lzdjQ7IGV4aXQ7IH0gOzsKKyAgICBOQ1IqOio6NC4yOiogfCBNUFJBUyo6Kjo0LjI6KikKKwlPU19SRUw9Jy4zJworCXRlc3QgLXIgL2V0Yy8ucmVsaWQgXAorCSAgICAmJiBPU19SRUw9LmBzZWQgLW4gJ3MvW14gXSogW14gXSogXChbMC05XVswLTldXCkuKi9cMS9wJyA8IC9ldGMvLnJlbGlkYAorCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCBncmVwIDg2ID4vZGV2L251bGwgXAorCSAgICAmJiB7IGVjaG8gaTQ4Ni1uY3Itc3lzdjQuMyR7T1NfUkVMfTsgZXhpdDsgfQorCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCAvYmluL2dyZXAgZW50aXVtID4vZGV2L251bGwgXAorCSAgICAmJiB7IGVjaG8gaTU4Ni1uY3Itc3lzdjQuMyR7T1NfUkVMfTsgZXhpdDsgfQorCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCAvYmluL2dyZXAgcHRlcm9uID4vZGV2L251bGwgXAorCSAgICAmJiB7IGVjaG8gaTU4Ni1uY3Itc3lzdjQuMyR7T1NfUkVMfTsgZXhpdDsgfSA7OworICAgIG02OCo6THlueE9TOjIuKjoqIHwgbTY4KjpMeW54T1M6My4wKjoqKQorCWVjaG8gbTY4ay11bmtub3duLWx5bnhvcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgbWM2ODAzMDpVTklYX1N5c3RlbV9WOjQuKjoqKQorCWVjaG8gbTY4ay1hdGFyaS1zeXN2NAorCWV4aXQgOzsKKyAgICBUU1VOQU1JOkx5bnhPUzoyLio6KikKKwllY2hvIHNwYXJjLXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICByczYwMDA6THlueE9TOjIuKjoqKQorCWVjaG8gcnM2MDAwLXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBQb3dlclBDOkx5bnhPUzoyLio6KiB8IFBvd2VyUEM6THlueE9TOjMuWzAxXSo6KiB8IFBvd2VyUEM6THlueE9TOjQuWzAyXSo6KikKKwllY2hvIHBvd2VycGMtdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFNNW0JFXVM6VU5JWF9TVjoqOiopCisJZWNobyBtaXBzLWRkZS1zeXN2JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBSTSo6UmVsaWFudFVOSVgtKjoqOiopCisJZWNobyBtaXBzLXNuaS1zeXN2NAorCWV4aXQgOzsKKyAgICBSTSo6U0lOSVgtKjoqOiopCisJZWNobyBtaXBzLXNuaS1zeXN2NAorCWV4aXQgOzsKKyAgICAqOlNJTklYLSo6KjoqKQorCWlmIHVuYW1lIC1wIDI+L2Rldi9udWxsID4vZGV2L251bGwgOyB0aGVuCisJCVVOQU1FX01BQ0hJTkU9YCh1bmFtZSAtcCkgMj4vZGV2L251bGxgCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1zbmktc3lzdjQKKwllbHNlCisJCWVjaG8gbnMzMmstc25pLXN5c3YKKwlmaQorCWV4aXQgOzsKKyAgICBQRU5USVVNOio6NC4wKjoqKSAjIFVuaXN5cyBgQ2xlYXJQYXRoIEhNUCBJWCA0MDAwJyBTVlI0L01QIGVmZm9ydAorICAgICAgICAgICAgICAgICAgICAgICMgc2F5cyA8UmljaGFyZC5NLkJhcnRlbEBjY01haWwuQ2Vuc3VzLkdPVj4KKyAgICAgICAgZWNobyBpNTg2LXVuaXN5cy1zeXN2NAorICAgICAgICBleGl0IDs7CisgICAgKjpVTklYX1N5c3RlbV9WOjQqOkZUWCopCisJIyBGcm9tIEdlcmFsZCBIZXdlcyA8aGV3ZXNAb3Blbm1hcmtldC5jb20+LgorCSMgSG93IGFib3V0IGRpZmZlcmVudGlhdGluZyBiZXR3ZWVuIHN0cmF0dXMgYXJjaGl0ZWN0dXJlcz8gLWRqbQorCWVjaG8gaHBwYTEuMS1zdHJhdHVzLXN5c3Y0CisJZXhpdCA7OworICAgICo6KjoqOkZUWCopCisJIyBGcm9tIHNlYW5mQHN3ZGMuc3RyYXR1cy5jb20uCisJZWNobyBpODYwLXN0cmF0dXMtc3lzdjQKKwlleGl0IDs7CisgICAgaSo4NjpWT1M6KjoqKQorCSMgRnJvbSBQYXVsLkdyZWVuQHN0cmF0dXMuY29tLgorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1zdHJhdHVzLXZvcworCWV4aXQgOzsKKyAgICAqOlZPUzoqOiopCisJIyBGcm9tIFBhdWwuR3JlZW5Ac3RyYXR1cy5jb20uCisJZWNobyBocHBhMS4xLXN0cmF0dXMtdm9zCisJZXhpdCA7OworICAgIG1jNjgqOkEvVVg6KjoqKQorCWVjaG8gbTY4ay1hcHBsZS1hdXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIG5ld3MqOk5FV1MtT1M6Nio6KikKKwllY2hvIG1pcHMtc29ueS1uZXdzb3M2CisJZXhpdCA7OworICAgIFJbMzRdMDAwOipTeXN0ZW1fVio6KjoqIHwgUjQwMDA6VU5JWF9TWVNWOio6KiB8IFIqMDAwOlVOSVhfU1Y6KjoqKQorCWlmIFsgLWQgL3Vzci9uZWMgXTsgdGhlbgorCSAgICAgICAgZWNobyBtaXBzLW5lYy1zeXN2JHtVTkFNRV9SRUxFQVNFfQorCWVsc2UKKwkgICAgICAgIGVjaG8gbWlwcy11bmtub3duLXN5c3Yke1VOQU1FX1JFTEVBU0V9CisJZmkKKyAgICAgICAgZXhpdCA7OworICAgIEJlQm94OkJlT1M6KjoqKQkjIEJlT1MgcnVubmluZyBvbiBoYXJkd2FyZSBtYWRlIGJ5IEJlLCBQUEMgb25seS4KKwllY2hvIHBvd2VycGMtYmUtYmVvcworCWV4aXQgOzsKKyAgICBCZU1hYzpCZU9TOio6KikJIyBCZU9TIHJ1bm5pbmcgb24gTWFjIG9yIE1hYyBjbG9uZSwgUFBDIG9ubHkuCisJZWNobyBwb3dlcnBjLWFwcGxlLWJlb3MKKwlleGl0IDs7CisgICAgQmVQQzpCZU9TOio6KikJIyBCZU9TIHJ1bm5pbmcgb24gSW50ZWwgUEMgY29tcGF0aWJsZS4KKwllY2hvIGk1ODYtcGMtYmVvcworCWV4aXQgOzsKKyAgICBCZVBDOkhhaWt1Oio6KikJIyBIYWlrdSBydW5uaW5nIG9uIEludGVsIFBDIGNvbXBhdGlibGUuCisJZWNobyBpNTg2LXBjLWhhaWt1CisJZXhpdCA7OworICAgIFNYLTQ6U1VQRVItVVg6KjoqKQorCWVjaG8gc3g0LW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBTWC01OlNVUEVSLVVYOio6KikKKwllY2hvIHN4NS1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgU1gtNjpTVVBFUi1VWDoqOiopCisJZWNobyBzeDYtbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFNYLTc6U1VQRVItVVg6KjoqKQorCWVjaG8gc3g3LW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBTWC04OlNVUEVSLVVYOio6KikKKwllY2hvIHN4OC1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgU1gtOFI6U1VQRVItVVg6KjoqKQorCWVjaG8gc3g4ci1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgUG93ZXIqOlJoYXBzb2R5Oio6KikKKwllY2hvIHBvd2VycGMtYXBwbGUtcmhhcHNvZHkke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6UmhhcHNvZHk6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1hcHBsZS1yaGFwc29keSR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpEYXJ3aW46KjoqKQorCVVOQU1FX1BST0NFU1NPUj1gdW5hbWUgLXBgIHx8IFVOQU1FX1BST0NFU1NPUj11bmtub3duCisJY2FzZSAkVU5BTUVfUFJPQ0VTU09SIGluCisJICAgIGkzODYpCisJCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwkJaWYgWyAiJENDX0ZPUl9CVUlMRCIgIT0gJ25vX2NvbXBpbGVyX2ZvdW5kJyBdOyB0aGVuCisJCSAgaWYgKGVjaG8gJyNpZmRlZiBfX0xQNjRfXyc7IGVjaG8gSVNfNjRCSVRfQVJDSDsgZWNobyAnI2VuZGlmJykgfCBcCisJCSAgICAgIChDQ09QVFM9ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCkgfCBcCisJCSAgICAgIGdyZXAgSVNfNjRCSVRfQVJDSCA+L2Rldi9udWxsCisJCSAgdGhlbgorCQkgICAgICBVTkFNRV9QUk9DRVNTT1I9Ing4Nl82NCIKKwkJICBmaQorCQlmaSA7OworCSAgICB1bmtub3duKSBVTkFNRV9QUk9DRVNTT1I9cG93ZXJwYyA7OworCWVzYWMKKwllY2hvICR7VU5BTUVfUFJPQ0VTU09SfS1hcHBsZS1kYXJ3aW4ke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6cHJvY250byo6KjoqIHwgKjpRTlg6WzAxMjM0NTY3ODldKjoqKQorCVVOQU1FX1BST0NFU1NPUj1gdW5hbWUgLXBgCisJaWYgdGVzdCAiJFVOQU1FX1BST0NFU1NPUiIgPSAieDg2IjsgdGhlbgorCQlVTkFNRV9QUk9DRVNTT1I9aTM4NgorCQlVTkFNRV9NQUNISU5FPXBjCisJZmkKKwllY2hvICR7VU5BTUVfUFJPQ0VTU09SfS0ke1VOQU1FX01BQ0hJTkV9LW50by1xbngke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6UU5YOio6NCopCisJZWNobyBpMzg2LXBjLXFueAorCWV4aXQgOzsKKyAgICBOU0UtPzpOT05TVE9QX0tFUk5FTDoqOiopCisJZWNobyBuc2UtdGFuZGVtLW5zayR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgTlNSLT86Tk9OU1RPUF9LRVJORUw6KjoqKQorCWVjaG8gbnNyLXRhbmRlbS1uc2ske1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6Tm9uU3RvcC1VWDoqOiopCisJZWNobyBtaXBzLWNvbXBhcS1ub25zdG9wdXgKKwlleGl0IDs7CisgICAgQlMyMDAwOlBPU0lYKjoqOiopCisJZWNobyBiczIwMDAtc2llbWVucy1zeXN2CisJZXhpdCA7OworICAgIERTLyo6VU5JWF9TeXN0ZW1fVjoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LSR7VU5BTUVfU1lTVEVNfS0ke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6UGxhbjk6KjoqKQorCSMgInVuYW1lIC1tIiBpcyBub3QgY29uc2lzdGVudCwgc28gdXNlICRjcHV0eXBlIGluc3RlYWQuIDM4NgorCSMgaXMgY29udmVydGVkIHRvIGkzODYgZm9yIGNvbnNpc3RlbmN5IHdpdGggb3RoZXIgeDg2CisJIyBvcGVyYXRpbmcgc3lzdGVtcy4KKwlpZiB0ZXN0ICIkY3B1dHlwZSIgPSAiMzg2IjsgdGhlbgorCSAgICBVTkFNRV9NQUNISU5FPWkzODYKKwllbHNlCisJICAgIFVOQU1FX01BQ0hJTkU9IiRjcHV0eXBlIgorCWZpCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tcGxhbjkKKwlleGl0IDs7CisgICAgKjpUT1BTLTEwOio6KikKKwllY2hvIHBkcDEwLXVua25vd24tdG9wczEwCisJZXhpdCA7OworICAgICo6VEVORVg6KjoqKQorCWVjaG8gcGRwMTAtdW5rbm93bi10ZW5leAorCWV4aXQgOzsKKyAgICBLUzEwOlRPUFMtMjA6KjoqIHwgS0wxMDpUT1BTLTIwOio6KiB8IFRZUEU0OlRPUFMtMjA6KjoqKQorCWVjaG8gcGRwMTAtZGVjLXRvcHMyMAorCWV4aXQgOzsKKyAgICBYS0wtMTpUT1BTLTIwOio6KiB8IFRZUEU1OlRPUFMtMjA6KjoqKQorCWVjaG8gcGRwMTAteGtsLXRvcHMyMAorCWV4aXQgOzsKKyAgICAqOlRPUFMtMjA6KjoqKQorCWVjaG8gcGRwMTAtdW5rbm93bi10b3BzMjAKKwlleGl0IDs7CisgICAgKjpJVFM6KjoqKQorCWVjaG8gcGRwMTAtdW5rbm93bi1pdHMKKwlleGl0IDs7CisgICAgU0VJOio6KjpTRUlVWCkKKyAgICAgICAgZWNobyBtaXBzLXNlaS1zZWl1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpEcmFnb25GbHk6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWRyYWdvbmZseWBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stKF0uKi8vJ2AKKwlleGl0IDs7CisgICAgKjoqVk1TOio6KikKKyAgICAJVU5BTUVfTUFDSElORT1gKHVuYW1lIC1wKSAyPi9kZXYvbnVsbGAKKwljYXNlICIke1VOQU1FX01BQ0hJTkV9IiBpbgorCSAgICBBKikgZWNobyBhbHBoYS1kZWMtdm1zIDsgZXhpdCA7OworCSAgICBJKikgZWNobyBpYTY0LWRlYy12bXMgOyBleGl0IDs7CisJICAgIFYqKSBlY2hvIHZheC1kZWMtdm1zIDsgZXhpdCA7OworCWVzYWMgOzsKKyAgICAqOlhFTklYOio6U3lzVikKKwllY2hvIGkzODYtcGMteGVuaXgKKwlleGl0IDs7CisgICAgaSo4Njpza3lvczoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXNreW9zYGVjaG8gJHtVTkFNRV9SRUxFQVNFfWAgfCBzZWQgLWUgJ3MvIC4qJC8vJworCWV4aXQgOzsKKyAgICBpKjg2OnJkb3M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1yZG9zCisJZXhpdCA7OworICAgIGkqODY6QVJPUzoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLWFyb3MKKwlleGl0IDs7Citlc2FjCisKKyNlY2hvICcoTm8gdW5hbWUgY29tbWFuZCBvciB1bmFtZSBvdXRwdXQgbm90IHJlY29nbml6ZWQuKScgMT4mMgorI2VjaG8gIiR7VU5BTUVfTUFDSElORX06JHtVTkFNRV9TWVNURU19OiR7VU5BTUVfUkVMRUFTRX06JHtVTkFNRV9WRVJTSU9OfSIgMT4mMgorCitldmFsICRzZXRfY2NfZm9yX2J1aWxkCitjYXQgPiRkdW1teS5jIDw8RU9GCisjaWZkZWYgX1NFUVVFTlRfCisjIGluY2x1ZGUgPHN5cy90eXBlcy5oPgorIyBpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgorI2VuZGlmCittYWluICgpCit7CisjaWYgZGVmaW5lZCAoc29ueSkKKyNpZiBkZWZpbmVkIChNSVBTRUIpCisgIC8qIEJGRCB3YW50cyAiYnNkIiBpbnN0ZWFkIG9mICJuZXdzb3MiLiAgUGVyaGFwcyBCRkQgc2hvdWxkIGJlIGNoYW5nZWQsCisgICAgIEkgZG9uJ3Qga25vdy4uLi4gICovCisgIHByaW50ZiAoIm1pcHMtc29ueS1ic2RcbiIpOyBleGl0ICgwKTsKKyNlbHNlCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisgIHByaW50ZiAoIm02OGstc29ueS1uZXdzb3Mlc1xuIiwKKyNpZmRlZiBORVdTT1M0CisgICAgICAgICAgIjQiCisjZWxzZQorCSAgIiIKKyNlbmRpZgorICAgICAgICAgKTsgZXhpdCAoMCk7CisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX19hcm0pICYmIGRlZmluZWQgKF9fYWNvcm4pICYmIGRlZmluZWQgKF9fdW5peCkKKyAgcHJpbnRmICgiYXJtLWFjb3JuLXJpc2NpeFxuIik7IGV4aXQgKDApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChocDMwMCkgJiYgIWRlZmluZWQgKGhwdXgpCisgIHByaW50ZiAoIm02OGstaHAtYnNkXG4iKTsgZXhpdCAoMCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQgKE5lWFQpCisjaWYgIWRlZmluZWQgKF9fQVJDSElURUNUVVJFX18pCisjZGVmaW5lIF9fQVJDSElURUNUVVJFX18gIm02OGsiCisjZW5kaWYKKyAgaW50IHZlcnNpb247CisgIHZlcnNpb249YChob3N0aW5mbyB8IHNlZCAtbiAncy8uKk5lWFQgTWFjaCBcKFswLTldKlwpLiovXDEvcCcpIDI+L2Rldi9udWxsYDsKKyAgaWYgKHZlcnNpb24gPCA0KQorICAgIHByaW50ZiAoIiVzLW5leHQtbmV4dHN0ZXAlZFxuIiwgX19BUkNISVRFQ1RVUkVfXywgdmVyc2lvbik7CisgIGVsc2UKKyAgICBwcmludGYgKCIlcy1uZXh0LW9wZW5zdGVwJWRcbiIsIF9fQVJDSElURUNUVVJFX18sIHZlcnNpb24pOworICBleGl0ICgwKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoTVVMVElNQVgpIHx8IGRlZmluZWQgKG4xNikKKyNpZiBkZWZpbmVkIChVTUFYVikKKyAgcHJpbnRmICgibnMzMmstZW5jb3JlLXN5c3ZcbiIpOyBleGl0ICgwKTsKKyNlbHNlCisjaWYgZGVmaW5lZCAoQ01VKQorICBwcmludGYgKCJuczMyay1lbmNvcmUtbWFjaFxuIik7IGV4aXQgKDApOworI2Vsc2UKKyAgcHJpbnRmICgibnMzMmstZW5jb3JlLWJzZFxuIik7IGV4aXQgKDApOworI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX18zODZCU0RfXykKKyAgcHJpbnRmICgiaTM4Ni1wYy1ic2RcbiIpOyBleGl0ICgwKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoc2VxdWVudCkKKyNpZiBkZWZpbmVkIChpMzg2KQorICBwcmludGYgKCJpMzg2LXNlcXVlbnQtZHluaXhcbiIpOyBleGl0ICgwKTsKKyNlbmRpZgorI2lmIGRlZmluZWQgKG5zMzIwMDApCisgIHByaW50ZiAoIm5zMzJrLXNlcXVlbnQtZHluaXhcbiIpOyBleGl0ICgwKTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfU0VRVUVOVF8pCisgICAgc3RydWN0IHV0c25hbWUgdW47CisKKyAgICB1bmFtZSgmdW4pOworCisgICAgaWYgKHN0cm5jbXAodW4udmVyc2lvbiwgIlYyIiwgMikgPT0gMCkgeworCXByaW50ZiAoImkzODYtc2VxdWVudC1wdHgyXG4iKTsgZXhpdCAoMCk7CisgICAgfQorICAgIGlmIChzdHJuY21wKHVuLnZlcnNpb24sICJWMSIsIDIpID09IDApIHsgLyogWFhYIGlzIFYxIGNvcnJlY3Q/ICovCisJcHJpbnRmICgiaTM4Ni1zZXF1ZW50LXB0eDFcbiIpOyBleGl0ICgwKTsKKyAgICB9CisgICAgcHJpbnRmICgiaTM4Ni1zZXF1ZW50LXB0eFxuIik7IGV4aXQgKDApOworCisjZW5kaWYKKworI2lmIGRlZmluZWQgKHZheCkKKyMgaWYgIWRlZmluZWQgKHVsdHJpeCkKKyMgIGluY2x1ZGUgPHN5cy9wYXJhbS5oPgorIyAgaWYgZGVmaW5lZCAoQlNEKQorIyAgIGlmIEJTRCA9PSA0MworICAgICAgcHJpbnRmICgidmF4LWRlYy1ic2Q0LjNcbiIpOyBleGl0ICgwKTsKKyMgICBlbHNlCisjICAgIGlmIEJTRCA9PSAxOTkwMDYKKyAgICAgIHByaW50ZiAoInZheC1kZWMtYnNkNC4zcmVub1xuIik7IGV4aXQgKDApOworIyAgICBlbHNlCisgICAgICBwcmludGYgKCJ2YXgtZGVjLWJzZFxuIik7IGV4aXQgKDApOworIyAgICBlbmRpZgorIyAgIGVuZGlmCisjICBlbHNlCisgICAgcHJpbnRmICgidmF4LWRlYy1ic2RcbiIpOyBleGl0ICgwKTsKKyMgIGVuZGlmCisjIGVsc2UKKyAgICBwcmludGYgKCJ2YXgtZGVjLXVsdHJpeFxuIik7IGV4aXQgKDApOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChhbGxpYW50KSAmJiBkZWZpbmVkIChpODYwKQorICBwcmludGYgKCJpODYwLWFsbGlhbnQtYnNkXG4iKTsgZXhpdCAoMCk7CisjZW5kaWYKKworICBleGl0ICgxKTsKK30KK0VPRgorCiskQ0NfRk9SX0JVSUxEIC1vICRkdW1teSAkZHVtbXkuYyAyPi9kZXYvbnVsbCAmJiBTWVNURU1fTkFNRT1gJGR1bW15YCAmJgorCXsgZWNobyAiJFNZU1RFTV9OQU1FIjsgZXhpdDsgfQorCisjIEFwb2xsb3MgcHV0IHRoZSBzeXN0ZW0gdHlwZSBpbiB0aGUgZW52aXJvbm1lbnQuCisKK3Rlc3QgLWQgL3Vzci9hcG9sbG8gJiYgeyBlY2hvICR7SVNQfS1hcG9sbG8tJHtTWVNUWVBFfTsgZXhpdDsgfQorCisjIENvbnZleCB2ZXJzaW9ucyB0aGF0IHByZWRhdGUgdW5hbWUgY2FuIHVzZSBnZXRzeXNpbmZvKDEpCisKK2lmIFsgLXggL3Vzci9jb252ZXgvZ2V0c3lzaW5mbyBdCit0aGVuCisgICAgY2FzZSBgZ2V0c3lzaW5mbyAtZiBjcHVfdHlwZWAgaW4KKyAgICBjMSopCisJZWNobyBjMS1jb252ZXgtYnNkCisJZXhpdCA7OworICAgIGMyKikKKwlpZiBnZXRzeXNpbmZvIC1mIHNjYWxhcl9hY2MKKwl0aGVuIGVjaG8gYzMyLWNvbnZleC1ic2QKKwllbHNlIGVjaG8gYzItY29udmV4LWJzZAorCWZpCisJZXhpdCA7OworICAgIGMzNCopCisJZWNobyBjMzQtY29udmV4LWJzZAorCWV4aXQgOzsKKyAgICBjMzgqKQorCWVjaG8gYzM4LWNvbnZleC1ic2QKKwlleGl0IDs7CisgICAgYzQqKQorCWVjaG8gYzQtY29udmV4LWJzZAorCWV4aXQgOzsKKyAgICBlc2FjCitmaQorCitjYXQgPiYyIDw8RU9GCiskMDogdW5hYmxlIHRvIGd1ZXNzIHN5c3RlbSB0eXBlCisKK1RoaXMgc2NyaXB0LCBsYXN0IG1vZGlmaWVkICR0aW1lc3RhbXAsIGhhcyBmYWlsZWQgdG8gcmVjb2duaXplCit0aGUgb3BlcmF0aW5nIHN5c3RlbSB5b3UgYXJlIHVzaW5nLiBJdCBpcyBhZHZpc2VkIHRoYXQgeW91Citkb3dubG9hZCB0aGUgbW9zdCB1cCB0byBkYXRlIHZlcnNpb24gb2YgdGhlIGNvbmZpZyBzY3JpcHRzIGZyb20KKworICBodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvZ2l0d2ViLz9wPWNvbmZpZy5naXQ7YT1ibG9iX3BsYWluO2Y9Y29uZmlnLmd1ZXNzO2hiPUhFQUQKK2FuZAorICBodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvZ2l0d2ViLz9wPWNvbmZpZy5naXQ7YT1ibG9iX3BsYWluO2Y9Y29uZmlnLnN1YjtoYj1IRUFECisKK0lmIHRoZSB2ZXJzaW9uIHlvdSBydW4gKCQwKSBpcyBhbHJlYWR5IHVwIHRvIGRhdGUsIHBsZWFzZQorc2VuZCB0aGUgZm9sbG93aW5nIGRhdGEgYW5kIGFueSBpbmZvcm1hdGlvbiB5b3UgdGhpbmsgbWlnaHQgYmUKK3BlcnRpbmVudCB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4gaW4gb3JkZXIgdG8gcHJvdmlkZSB0aGUgbmVlZGVkCitpbmZvcm1hdGlvbiB0byBoYW5kbGUgeW91ciBzeXN0ZW0uCisKK2NvbmZpZy5ndWVzcyB0aW1lc3RhbXAgPSAkdGltZXN0YW1wCisKK3VuYW1lIC1tID0gYCh1bmFtZSAtbSkgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAordW5hbWUgLXIgPSBgKHVuYW1lIC1yKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCit1bmFtZSAtcyA9IGAodW5hbWUgLXMpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKK3VuYW1lIC12ID0gYCh1bmFtZSAtdikgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAorCisvdXNyL2Jpbi91bmFtZSAtcCA9IGAoL3Vzci9iaW4vdW5hbWUgLXApIDI+L2Rldi9udWxsYAorL2Jpbi91bmFtZSAtWCAgICAgPSBgKC9iaW4vdW5hbWUgLVgpIDI+L2Rldi9udWxsYAorCitob3N0aW5mbyAgICAgICAgICAgICAgID0gYChob3N0aW5mbykgMj4vZGV2L251bGxgCisvYmluL3VuaXZlcnNlICAgICAgICAgID0gYCgvYmluL3VuaXZlcnNlKSAyPi9kZXYvbnVsbGAKKy91c3IvYmluL2FyY2ggLWsgICAgICAgPSBgKC91c3IvYmluL2FyY2ggLWspIDI+L2Rldi9udWxsYAorL2Jpbi9hcmNoICAgICAgICAgICAgICA9IGAoL2Jpbi9hcmNoKSAyPi9kZXYvbnVsbGAKKy91c3IvYmluL29zbGV2ZWwgICAgICAgPSBgKC91c3IvYmluL29zbGV2ZWwpIDI+L2Rldi9udWxsYAorL3Vzci9jb252ZXgvZ2V0c3lzaW5mbyA9IGAoL3Vzci9jb252ZXgvZ2V0c3lzaW5mbykgMj4vZGV2L251bGxgCisKK1VOQU1FX01BQ0hJTkUgPSAke1VOQU1FX01BQ0hJTkV9CitVTkFNRV9SRUxFQVNFID0gJHtVTkFNRV9SRUxFQVNFfQorVU5BTUVfU1lTVEVNICA9ICR7VU5BTUVfU1lTVEVNfQorVU5BTUVfVkVSU0lPTiA9ICR7VU5BTUVfVkVSU0lPTn0KK0VPRgorCitleGl0IDEKKworIyBMb2NhbCB2YXJpYWJsZXM6CisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1zdGFydDogInRpbWVzdGFtcD0nIgorIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQiCisjIHRpbWUtc3RhbXAtZW5kOiAiJyIKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2NvbmZpZy5oLmluIGIvYXZhaGktMC42LjMxL2NvbmZpZy5oLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4NDRkN2EKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvY29uZmlnLmguaW4KQEAgLTAsMCArMSwzOTUgQEAKKy8qIGNvbmZpZy5oLmluLiAgR2VuZXJhdGVkIGZyb20gY29uZmlndXJlLmFjIGJ5IGF1dG9oZWFkZXIuICAqLworCisvKiBHcm91cCBmb3IgcnVubmluZyB0aGUgYXZhaGktYXV0b2lwZCBkYWVtb24gKi8KKyN1bmRlZiBBVkFISV9BVVRPSVBEX0dST1VQCisKKy8qIFVzZXIgZm9yIHJ1bm5pbmcgdGhlIGF2YWhpLWF1dG9pcGQgZGFlbW9uICovCisjdW5kZWYgQVZBSElfQVVUT0lQRF9VU0VSCisKKy8qIEdyb3VwIGZvciBBdmFoaSAqLworI3VuZGVmIEFWQUhJX0dST1VQCisKKy8qIFByaXZpbGVnZWQgYWNjZXNzIGdyb3VwIGZvciBBdmFoaSBjbGllbnRzICovCisjdW5kZWYgQVZBSElfUFJJVl9BQ0NFU1NfR1JPVVAKKworLyogVXNlciBmb3IgcnVubmluZyB0aGUgQXZhaGkgZGFlbW9uICovCisjdW5kZWYgQVZBSElfVVNFUgorCisvKiBFbmFibGUgY2hyb290KCkgdXNhZ2UgKi8KKyN1bmRlZiBFTkFCTEVfQ0hST09UCisKKy8qIGFsd2F5cyBkZWZpbmVkIHRvIGluZGljYXRlIHRoYXQgaTE4biBpcyBlbmFibGVkICovCisjdW5kZWYgRU5BQkxFX05MUworCisvKiBEZWZpbmUgaWYgU1NQIEMgc3VwcG9ydCBpcyBlbmFibGVkLiAqLworI3VuZGVmIEVOQUJMRV9TU1BfQ0MKKworLyogRGVmaW5lIGlmIFNTUCBDKysgc3VwcG9ydCBpcyBlbmFibGVkLiAqLworI3VuZGVmIEVOQUJMRV9TU1BfQ1hYCisKKy8qIEdldHRleHQgcGFja2FnZSAqLworI3VuZGVmIEdFVFRFWFRfUEFDS0FHRQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGFycGEvaW5ldC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0FSUEFfSU5FVF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfQklORF9URVhURE9NQUlOX0NPREVTRVQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxic2R4bWwuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9CU0RYTUxfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3VyIHN5c3RlbSBoYXMgYSB3b3JraW5nIGBjaG93bicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9DSE9XTgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGNocm9vdCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9DSFJPT1QKKworLyogU3VwcG9ydCBmb3IgREJNICovCisjdW5kZWYgSEFWRV9EQk0KKworLyogV2hldGhlciB3ZSBoYXZlIEQtQnVzIG9yIG5vdCAqLworI3VuZGVmIEhBVkVfREJVUworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGRidXNfYnVzX2dldF9wcml2YXRlJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0RCVVNfQlVTX0dFVF9QUklWQVRFCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZGJ1c19jb25uZWN0aW9uX2Nsb3NlJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0RCVVNfQ09OTkVDVElPTl9DTE9TRQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGRjZ2V0dGV4dCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9EQ0dFVFRFWFQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBlbnZpcm9uJywgYW5kIHRvIDAgaWYgeW91CisgICBkb24ndC4gKi8KKyN1bmRlZiBIQVZFX0RFQ0xfRU5WSVJPTgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGRsZmNuLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfRExGQ05fSAorCisvKiBIYXZlIGRsb3BlbigpICovCisjdW5kZWYgSEFWRV9ETE9QRU4KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxleHBhdC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0VYUEFUX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxmY250bC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0ZDTlRMX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIGdjYyAtZnZpc2liaWxpdHk9aGlkZGVuIHN1cHBvcnQgKi8KKyN1bmRlZiBIQVZFX0dDQ19WSVNJQklMSVRZCisKKy8qIFN1cHBvcnQgZm9yIEdEQk0gKi8KKyN1bmRlZiBIQVZFX0dEQk0KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxnZGJtLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfR0RCTV9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0aG9zdGJ5bmFtZScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9HRVRIT1NUQllOQU1FCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0aG9zdG5hbWUnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfR0VUSE9TVE5BTUUKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRwcm9nbmFtZScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9HRVRQUk9HTkFNRQorCisvKiBEZWZpbmUgaWYgdGhlIEdOVSBnZXR0ZXh0KCkgZnVuY3Rpb24gaXMgYWxyZWFkeSBwcmVzZW50IG9yIHByZWluc3RhbGxlZC4gKi8KKyN1bmRlZiBIQVZFX0dFVFRFWFQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXR0aW1lb2ZkYXknIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfR0VUVElNRU9GREFZCisKKy8qIEVuYWJsZSBMaW51eCBpbm90aWZ5KCkgdXNhZ2UgKi8KKyN1bmRlZiBIQVZFX0lOT1RJRlkKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpbnR0eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0lOVFRZUEVTX0gKKworLyogRW5hYmxlIEJTRCBrcXVldWUoKSB1c2FnZSAqLworI3VuZGVmIEhBVkVfS1FVRVVFCisKKy8qIERlZmluZSBpZiB5b3VyIDxsb2NhbGUuaD4gZmlsZSBkZWZpbmVzIExDX01FU1NBR0VTLiAqLworI3VuZGVmIEhBVkVfTENfTUVTU0FHRVMKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaW1pdHMuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9MSU1JVFNfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxvY2FsZS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0xPQ0FMRV9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbWVtY2hyJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX01FTUNIUgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG1lbW1vdmUnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfTUVNTU9WRQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG1lbW9yeS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX01FTU9SWV9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbWVtc2V0JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX01FTVNFVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG1rZGlyJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX01LRElSCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bmRibS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX05EQk1fSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGRiLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfTkVUREJfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGluZXQvaW4uaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9ORVRJTkVUX0lOX0gKKworLyogU3VwcG9ydCBmb3IgTGludXggbmV0bGluayAqLworI3VuZGVmIEhBVkVfTkVUTElOSworCisvKiBTdXBwb3J0IGZvciBQRl9ST1VURSAqLworI3VuZGVmIEhBVkVfUEZfUk9VVEUKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIFBPU0lYIHRocmVhZHMgbGlicmFyaWVzIGFuZCBoZWFkZXIgZmlsZXMuICovCisjdW5kZWYgSEFWRV9QVEhSRUFECisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcHV0ZW52JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1BVVEVOVgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNlbGVjdCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TRUxFQ1QKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZXRlZ2lkJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NFVEVHSUQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZXRldWlkJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NFVEVVSUQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZXRwcm9jdGl0bGUnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU0VUUFJPQ1RJVExFCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0cmVnaWQnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU0VUUkVHSUQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZXRyZXNnaWQnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU0VUUkVTR0lECisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0cmVzdWlkJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NFVFJFU1VJRAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNldHJldWlkJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NFVFJFVUlECisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc29ja2V0JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NPQ0tFVAorCisvKiBEZWZpbmUgdG8gMSBpZiBgc3RhdCcgaGFzIHRoZSBidWcgdGhhdCBpdCBzdWNjZWVkcyB3aGVuIGdpdmVuIHRoZQorICAgemVyby1sZW5ndGggZmlsZSBuYW1lIGFyZ3VtZW50LiAqLworI3VuZGVmIEhBVkVfU1RBVF9FTVBUWV9TVFJJTkdfQlVHCisKKy8qIERlZmluZSB0byAxIGlmIHN0ZGJvb2wuaCBjb25mb3JtcyB0byBDOTkuICovCisjdW5kZWYgSEFWRV9TVERCT09MX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRpbnQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TVERJTlRfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGxpYi5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NURExJQl9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RyY2FzZWNtcCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TVFJDQVNFQ01QCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RyY2hyJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NUUkNIUgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmNzcG4nIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU1RSQ1NQTgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmR1cCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TVFJEVVAKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJlcnJvcicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TVFJFUlJPUgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0cmluZ3MuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TVFJJTkdTX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmcuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TVFJJTkdfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmxjcHknIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU1RSTENQWQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cm5jYXNlY21wJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NUUk5DQVNFQ01QCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RycmNocicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TVFJSQ0hSCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3Ryc3BuJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NUUlNQTgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cnN0cicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TVFJTVFIKKworLyogU3VwcG9ydCBmb3Igc3RydWN0IGlwX21yZXEgKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9JUF9NUkVRCisKKy8qIFN1cHBvcnQgZm9yIHN0cnVjdCBpcF9tcmVxbiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX0lQX01SRVFOCisKKy8qIERlZmluZSBpZiB0aGVyZSBpcyBhIHN0cnVjdCBsaWZjb25mLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX0xJRkNPTkYKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXNsb2cuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNMT0dfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9jYXBhYmlsaXR5Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX0NBUEFCSUxJVFlfSAorCisvKiBTdXBwb3J0IGZvciBzeXMvZmlsaW8uaCAqLworI3VuZGVmIEhBVkVfU1lTX0ZJTElPX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvaW5vdGlmeS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19JTk9USUZZX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvaW9jdGwuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfSU9DVExfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9wcmN0bC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19QUkNUTF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3NlbGVjdC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19TRUxFQ1RfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zb2NrZXQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfU09DS0VUX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvc3RhdC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19TVEFUX0gKKworLyogU3VwcG9ydCBmb3Igc3lzL3N5c2N0bC5oICovCisjdW5kZWYgSEFWRV9TWVNfU1lTQ1RMX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdGltZS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19USU1FX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfVFlQRVNfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSA8c3lzL3dhaXQuaD4gdGhhdCBpcyBQT1NJWC4xIGNvbXBhdGlibGUuICovCisjdW5kZWYgSEFWRV9TWVNfV0FJVF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdW5hbWUnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfVU5BTUUKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1bmlzdGQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9VTklTVERfSAorCisvKiBTdXBwb3J0IGZvciB2aXNpYmlsaXR5IGhpZGRlbiAqLworI3VuZGVmIEhBVkVfVklTSUJJTElUWV9ISURERU4KKworLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYF9Cb29sJy4gKi8KKyN1bmRlZiBIQVZFX19CT09MCisKKy8qIERlZmluZSB0byAxIGlmIGBsc3RhdCcgZGVyZWZlcmVuY2VzIGEgc3ltbGluayBzcGVjaWZpZWQgd2l0aCBhIHRyYWlsaW5nCisgICBzbGFzaC4gKi8KKyN1bmRlZiBMU1RBVF9GT0xMT1dTX1NMQVNIRURfU1lNTElOSworCisvKiBEZWZpbmUgdG8gdGhlIHN1Yi1kaXJlY3RvcnkgaW4gd2hpY2ggbGlidG9vbCBzdG9yZXMgdW5pbnN0YWxsZWQgbGlicmFyaWVzLgorICAgKi8KKyN1bmRlZiBMVF9PQkpESVIKKworLyogRGVmaW5lIHRvIDEgaWYgeW91ciBDIGNvbXBpbGVyIGRvZXNuJ3QgYWNjZXB0IC1jIGFuZCAtbyB0b2dldGhlci4gKi8KKyN1bmRlZiBOT19NSU5VU19DX01JTlVTX08KKworLyogTmFtZSBvZiBwYWNrYWdlICovCisjdW5kZWYgUEFDS0FHRQorCisvKiBEZWZpbmUgdG8gdGhlIGFkZHJlc3Mgd2hlcmUgYnVnIHJlcG9ydHMgZm9yIHRoaXMgcGFja2FnZSBzaG91bGQgYmUgc2VudC4gKi8KKyN1bmRlZiBQQUNLQUdFX0JVR1JFUE9SVAorCisvKiBEZWZpbmUgdG8gdGhlIGZ1bGwgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICovCisjdW5kZWYgUEFDS0FHRV9OQU1FCisKKy8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIGFuZCB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KKyN1bmRlZiBQQUNLQUdFX1NUUklORworCisvKiBEZWZpbmUgdG8gdGhlIG9uZSBzeW1ib2wgc2hvcnQgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICovCisjdW5kZWYgUEFDS0FHRV9UQVJOQU1FCisKKy8qIERlZmluZSB0byB0aGUgaG9tZSBwYWdlIGZvciB0aGlzIHBhY2thZ2UuICovCisjdW5kZWYgUEFDS0FHRV9VUkwKKworLyogRGVmaW5lIHRvIHRoZSB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KKyN1bmRlZiBQQUNLQUdFX1ZFUlNJT04KKworLyogRGVmaW5lIHRvIG5lY2Vzc2FyeSBzeW1ib2wgaWYgdGhpcyBjb25zdGFudCB1c2VzIGEgbm9uLXN0YW5kYXJkIG5hbWUgb24KKyAgIHlvdXIgc3lzdGVtLiAqLworI3VuZGVmIFBUSFJFQURfQ1JFQVRFX0pPSU5BQkxFCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMSBmb3IgYHNlbGVjdCcuICovCisjdW5kZWYgU0VMRUNUX1RZUEVfQVJHMQorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJncyAyLCAzIGFuZCA0IGZvciBgc2VsZWN0Jy4gKi8KKyN1bmRlZiBTRUxFQ1RfVFlQRV9BUkcyMzQKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyA1IGZvciBgc2VsZWN0Jy4gKi8KKyN1bmRlZiBTRUxFQ1RfVFlQRV9BUkc1CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBBTlNJIEMgaGVhZGVyIGZpbGVzLiAqLworI3VuZGVmIFNURENfSEVBREVSUworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgY2FuIHNhZmVseSBpbmNsdWRlIGJvdGggPHN5cy90aW1lLmg+IGFuZCA8dGltZS5oPi4gKi8KKyN1bmRlZiBUSU1FX1dJVEhfU1lTX1RJTUUKKworLyogRW5hYmxlIGV4dGVuc2lvbnMgb24gQUlYIDMsIEludGVyaXguICAqLworI2lmbmRlZiBfQUxMX1NPVVJDRQorIyB1bmRlZiBfQUxMX1NPVVJDRQorI2VuZGlmCisvKiBFbmFibGUgR05VIGV4dGVuc2lvbnMgb24gc3lzdGVtcyB0aGF0IGhhdmUgdGhlbS4gICovCisjaWZuZGVmIF9HTlVfU09VUkNFCisjIHVuZGVmIF9HTlVfU09VUkNFCisjZW5kaWYKKy8qIEVuYWJsZSB0aHJlYWRpbmcgZXh0ZW5zaW9ucyBvbiBTb2xhcmlzLiAgKi8KKyNpZm5kZWYgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTCisjIHVuZGVmIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUworI2VuZGlmCisvKiBFbmFibGUgZXh0ZW5zaW9ucyBvbiBIUCBOb25TdG9wLiAgKi8KKyNpZm5kZWYgX1RBTkRFTV9TT1VSQ0UKKyMgdW5kZWYgX1RBTkRFTV9TT1VSQ0UKKyNlbmRpZgorLyogRW5hYmxlIGdlbmVyYWwgZXh0ZW5zaW9ucyBvbiBTb2xhcmlzLiAgKi8KKyNpZm5kZWYgX19FWFRFTlNJT05TX18KKyMgdW5kZWYgX19FWFRFTlNJT05TX18KKyNlbmRpZgorCisKKy8qIFZlcnNpb24gbnVtYmVyIG9mIHBhY2thZ2UgKi8KKyN1bmRlZiBWRVJTSU9OCisKKy8qIERlZmluZSB0byAxIGlmIG9uIE1JTklYLiAqLworI3VuZGVmIF9NSU5JWAorCisvKiBEZWZpbmUgdG8gMiBpZiB0aGUgc3lzdGVtIGRvZXMgbm90IHByb3ZpZGUgUE9TSVguMSBmZWF0dXJlcyBleGNlcHQgd2l0aAorICAgdGhpcyBkZWZpbmVkLiAqLworI3VuZGVmIF9QT1NJWF8xX1NPVVJDRQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgbmVlZCB0byBpbiBvcmRlciBmb3IgYHN0YXQnIGFuZCBvdGhlciB0aGluZ3MgdG8gd29yay4gKi8KKyN1bmRlZiBfUE9TSVhfU09VUkNFCisKKy8qIERlZmluZSB0byBlbXB0eSBpZiBgY29uc3QnIGRvZXMgbm90IGNvbmZvcm0gdG8gQU5TSSBDLiAqLworI3VuZGVmIGNvbnN0CisKKy8qIERlZmluZSB0byBgaW50JyBpZiA8c3lzL3R5cGVzLmg+IGRvZXNuJ3QgZGVmaW5lLiAqLworI3VuZGVmIGdpZF90CisKKy8qIERlZmluZSB0byBgaW50JyBpZiA8c3lzL3R5cGVzLmg+IGRvZXMgbm90IGRlZmluZS4gKi8KKyN1bmRlZiBtb2RlX3QKKworLyogRGVmaW5lIHRvIGBpbnQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lcyBub3QgZGVmaW5lLiAqLworI3VuZGVmIHBpZF90CisKKy8qIERlZmluZSB0byBgdW5zaWduZWQgaW50JyBpZiA8c3lzL3R5cGVzLmg+IGRvZXMgbm90IGRlZmluZS4gKi8KKyN1bmRlZiBzaXplX3QKKworLyogRGVmaW5lIHRvIGBpbnQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lc24ndCBkZWZpbmUuICovCisjdW5kZWYgdWlkX3QKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9jb25maWcucnBhdGggYi9hdmFoaS0wLjYuMzEvY29uZmlnLnJwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE3Mjk4ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvY29uZmlnLnJwYXRoCkBAIC0wLDAgKzEsNjcyIEBACisjISAvYmluL3NoCisjIE91dHB1dCBhIHN5c3RlbSBkZXBlbmRlbnQgc2V0IG9mIHZhcmlhYmxlcywgZGVzY3JpYmluZyBob3cgdG8gc2V0IHRoZQorIyBydW4gdGltZSBzZWFyY2ggcGF0aCBvZiBzaGFyZWQgbGlicmFyaWVzIGluIGFuIGV4ZWN1dGFibGUuCisjCisjICAgQ29weXJpZ2h0IDE5OTYtMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgICBUYWtlbiBmcm9tIEdOVSBsaWJ0b29sLCAyMDAxCisjICAgT3JpZ2luYWxseSBieSBHb3Jkb24gTWF0emlna2VpdCA8Z29yZEBnbnUuYWkubWl0LmVkdT4sIDE5OTYKKyMKKyMgICBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcworIyAgIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorIyAgIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorIworIyBUaGUgZmlyc3QgYXJndW1lbnQgcGFzc2VkIHRvIHRoaXMgZmlsZSBpcyB0aGUgY2Fub25pY2FsIGhvc3Qgc3BlY2lmaWNhdGlvbiwKKyMgICAgQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLU9QRVJBVElOR19TWVNURU0KKyMgb3IKKyMgICAgQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLUtFUk5FTC1PUEVSQVRJTkdfU1lTVEVNCisjIFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgQ0MsIEdDQywgTERGTEFHUywgTEQsIHdpdGhfZ251X2xkCisjIHNob3VsZCBiZSBzZXQgYnkgdGhlIGNhbGxlci4KKyMKKyMgVGhlIHNldCBvZiBkZWZpbmVkIHZhcmlhYmxlcyBpcyBhdCB0aGUgZW5kIG9mIHRoaXMgc2NyaXB0LgorCisjIEtub3duIGxpbWl0YXRpb25zOgorIyAtIE9uIElSSVggNi41IHdpdGggQ0M9ImNjIiwgdGhlIHJ1biB0aW1lIHNlYXJjaCBwYXRjaCBtdXN0IG5vdCBiZSBsb25nZXIKKyMgICB0aGFuIDI1NiBieXRlcywgb3RoZXJ3aXNlIHRoZSBjb21waWxlciBkcml2ZXIgd2lsbCBkdW1wIGNvcmUuIFRoZSBvbmx5CisjICAga25vd24gd29ya2Fyb3VuZCBpcyB0byBjaG9vc2Ugc2hvcnRlciBkaXJlY3RvcnkgbmFtZXMgZm9yIHRoZSBidWlsZAorIyAgIGRpcmVjdG9yeSBhbmQvb3IgdGhlIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuCisKKyMgQWxsIGtub3duIGxpbmtlcnMgcmVxdWlyZSBhIGAuYScgYXJjaGl2ZSBmb3Igc3RhdGljIGxpbmtpbmcgKGV4Y2VwdCBNU1ZDLAorIyB3aGljaCBuZWVkcyAnLmxpYicpLgorbGliZXh0PWEKK3NocmV4dD0uc28KKworaG9zdD0iJDEiCitob3N0X2NwdT1gZWNobyAiJGhvc3QiIHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDEvJ2AKK2hvc3RfdmVuZG9yPWBlY2hvICIkaG9zdCIgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMi8nYAoraG9zdF9vcz1gZWNobyAiJGhvc3QiIHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDMvJ2AKKworIyBDb2RlIHRha2VuIGZyb20gbGlidG9vbC5tNCdzIF9MVF9DQ19CQVNFTkFNRS4KKworZm9yIGNjX3RlbXAgaW4gJENDIiI7IGRvCisgIGNhc2UgJGNjX3RlbXAgaW4KKyAgICBjb21waWxlIHwgKltcXC9dY29tcGlsZSB8IGNjYWNoZSB8ICpbXFwvXWNjYWNoZSApIDs7CisgICAgZGlzdGNjIHwgKltcXC9dZGlzdGNjIHwgcHVyaWZ5IHwgKltcXC9dcHVyaWZ5ICkgOzsKKyAgICBcLSopIDs7CisgICAgKikgYnJlYWs7OworICBlc2FjCitkb25lCitjY19iYXNlbmFtZT1gZWNobyAiJGNjX3RlbXAiIHwgc2VkIC1lICdzJV4uKi8lJSdgCisKKyMgQ29kZSB0YWtlbiBmcm9tIGxpYnRvb2wubTQncyBfTFRfQ09NUElMRVJfUElDLgorCit3bD0KK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgIHdsPSctV2wsJworZWxzZQorICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICBhaXgqKQorICAgICAgd2w9Jy1XbCwnCisgICAgICA7OworICAgIGRhcndpbiopCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICB4bGMqKQorICAgICAgICAgIHdsPSctV2wsJworICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBwdzMyKiB8IG9zMiogfCBjZWdjYyopCisgICAgICA7OworICAgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorICAgICAgd2w9Jy1XbCwnCisgICAgICA7OworICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgICB3bD0nLVdsLCcKKyAgICAgIDs7CisgICAgbmV3c29zNikKKyAgICAgIDs7CisgICAgbGludXgqIHwgaypic2QqLWdudSkKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgIGVjYyopCisgICAgICAgICAgd2w9Jy1XbCwnCisgICAgICAgICAgOzsKKyAgICAgICAgaWNjKiB8IGlmb3J0KikKKyAgICAgICAgICB3bD0nLVdsLCcKKyAgICAgICAgICA7OworICAgICAgICBsZjk1KikKKyAgICAgICAgICB3bD0nLVdsLCcKKyAgICAgICAgICA7OworICAgICAgICBwZ2NjIHwgcGdmNzcgfCBwZ2Y5MCkKKyAgICAgICAgICB3bD0nLVdsLCcKKyAgICAgICAgICA7OworICAgICAgICBjY2MqKQorICAgICAgICAgIHdsPSctV2wsJworICAgICAgICAgIDs7CisgICAgICAgIGNvbW8pCisgICAgICAgICAgd2w9Jy1sb3B0PScKKyAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorICAgICAgICAgICAgKlN1blwgQyopCisgICAgICAgICAgICAgIHdsPSctV2wsJworICAgICAgICAgICAgICA7OworICAgICAgICAgIGVzYWMKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKyAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICB3bD0nLVdsLCcKKyAgICAgIDs7CisgICAgcmRvcyopCisgICAgICA7OworICAgIHNvbGFyaXMqKQorICAgICAgd2w9Jy1XbCwnCisgICAgICA7OworICAgIHN1bm9zNCopCisgICAgICB3bD0nLVFvcHRpb24gbGQgJworICAgICAgOzsKKyAgICBzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyopCisgICAgICB3bD0nLVdsLCcKKyAgICAgIDs7CisgICAgc3lzdjQqTVAqKQorICAgICAgOzsKKyAgICBzeXN2NSogfCB1bml4d2FyZSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgT3BlblVOSVgqKQorICAgICAgd2w9Jy1XbCwnCisgICAgICA7OworICAgIHVuaWNvcyopCisgICAgICB3bD0nLVdsLCcKKyAgICAgIDs7CisgICAgdXRzNCopCisgICAgICA7OworICBlc2FjCitmaQorCisjIENvZGUgdGFrZW4gZnJvbSBsaWJ0b29sLm00J3MgX0xUX0xJTktFUl9TSExJQlMuCisKK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9CitoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPQoraGFyZGNvZGVfZGlyZWN0PW5vCitoYXJkY29kZV9taW51c19MPW5vCisKK2Nhc2UgIiRob3N0X29zIiBpbgorICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgIyBGSVhNRTogdGhlIE1TVkMrKyBwb3J0IGhhc24ndCBiZWVuIHRlc3RlZCBpbiBhIGxvb29vbmcgdGltZQorICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCisgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKyAgICAgIHdpdGhfZ251X2xkPW5vCisgICAgZmkKKyAgICA7OworICBpbnRlcml4KikKKyAgICAjIHdlIGp1c3QgaG9wZS9hc3N1bWUgdGhpcyBpcyBnY2MgYW5kIG5vdCBjODkgKD0gTVNWQysrKQorICAgIHdpdGhfZ251X2xkPXllcworICAgIDs7CisgIG9wZW5ic2QqKQorICAgIHdpdGhfZ251X2xkPW5vCisgICAgOzsKK2VzYWMKKworbGRfc2hsaWJzPXllcworaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICAjIFNldCBzb21lIGRlZmF1bHRzIGZvciBHTlUgbGQgd2l0aCBzaGFyZWQgbGlicmFyeSBzdXBwb3J0LiBUaGVzZQorICAjIGFyZSByZXNldCBsYXRlciBpZiBzaGFyZWQgbGlicmFyaWVzIGFyZSBub3Qgc3VwcG9ydGVkLiBQdXR0aW5nIHRoZW0KKyAgIyBoZXJlIGFsbG93cyB0aGVtIHRvIGJlIG92ZXJyaWRkZW4gaWYgbmVjZXNzYXJ5LgorICAjIFVubGlrZSBsaWJ0b29sLCB3ZSB1c2UgLXJwYXRoIGhlcmUsIG5vdCAtLXJwYXRoLCBzaW5jZSB0aGUgZG9jdW1lbnRlZAorICAjIG9wdGlvbiBvZiBHTlUgbGQgaXMgY2FsbGVkIC1ycGF0aCwgbm90IC0tcnBhdGguCisgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgYWl4WzMtOV0qKQorICAgICAgIyBPbiBBSVgvUFBDLCB0aGUgR05VIGxpbmtlciBpcyB2ZXJ5IGJyb2tlbgorICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0OyB0aGVuCisgICAgICAgIGxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgYW1pZ2FvcyopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgIyBTYW11ZWwgQS4gRmFsdm8gSUkgPGtjNXRqYUBkb2xwaGluLm9wZW5wcm9qZWN0cy5uZXQ+IHJlcG9ydHMKKyAgICAgICMgdGhhdCB0aGUgc2VtYW50aWNzIG9mIGR5bmFtaWMgbGlicmFyaWVzIG9uIEFtaWdhT1MsIGF0IGxlYXN0IHVwCisgICAgICAjIHRvIHZlcnNpb24gNCwgaXMgdG8gc2hhcmUgZGF0YSBhbW9uZyBtdWx0aXBsZSBwcm9ncmFtcyBsaW5rZWQKKyAgICAgICMgd2l0aCB0aGUgc2FtZSBkeW5hbWljIGxpYnJhcnkuICBTaW5jZSB0aGlzIGRvZXNuJ3QgbWF0Y2ggdGhlCisgICAgICAjIGJlaGF2aW9yIG9mIHNoYXJlZCBsaWJyYXJpZXMgb24gb3RoZXIgcGxhdGZvcm1zLCB3ZSBjYW5ub3QgdXNlCisgICAgICAjIHRoZW0uCisgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIDs7CisgICAgYmVvcyopCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgOgorICAgICAgZWxzZQorICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKKyAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgOgorICAgICAgZWxzZQorICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworICAgIGludGVyaXhbMy05XSopCisgICAgICBoYXJkY29kZV9kaXJlY3Q9bm8KKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisgICAgICA7OworICAgIGdudSogfCBsaW51eCogfCBrKmJzZCotZ251KQorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgIDoKKyAgICAgIGVsc2UKKyAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBuZXRic2QqKQorICAgICAgOzsKKyAgICBzb2xhcmlzKikKKyAgICAgIGlmICRMRCAtdiAyPiYxIHwgZ3JlcCAnQkZEIDJcLjgnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgIGxkX3NobGlicz1ubworICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgOgorICAgICAgZWxzZQorICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCopCisgICAgICBjYXNlIGAkTEQgLXYgMj4mMWAgaW4KKyAgICAgICAgKlwgWzAxXS4qIHwgKlwgMi5bMC05XS4qIHwgKlwgMi4xWzAtNV0uKikKKyAgICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nYHRlc3QgLXogIiRTQ09BQlNQQVRIIiAmJiBlY2hvICR7d2x9LXJwYXRoLCRsaWJkaXJgJworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxkX3NobGlicz1ubworICAgICAgICAgIGZpCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgICAgc3Vub3M0KikKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICA6CisgICAgICBlbHNlCisgICAgICAgIGxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisgIGVzYWMKKyAgaWYgdGVzdCAiJGxkX3NobGlicyIgPSBubzsgdGhlbgorICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9CisgIGZpCitlbHNlCisgIGNhc2UgIiRob3N0X29zIiBpbgorICAgIGFpeDMqKQorICAgICAgIyBOb3RlOiB0aGlzIGxpbmtlciBoYXJkY29kZXMgdGhlIGRpcmVjdG9yaWVzIGluIExJQlBBVEggaWYgdGhlcmUKKyAgICAgICMgYXJlIG5vIGRpcmVjdG9yaWVzIHNwZWNpZmllZCBieSAtTC4KKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICAgICAjIE5laXRoZXIgZGlyZWN0IGhhcmRjb2Rpbmcgbm9yIHN0YXRpYyBsaW5raW5nIGlzIHN1cHBvcnRlZCB3aXRoIGEKKyAgICAgICAgIyBicm9rZW4gY29sbGVjdDIuCisgICAgICAgIGhhcmRjb2RlX2RpcmVjdD11bnN1cHBvcnRlZAorICAgICAgZmkKKyAgICAgIDs7CisgICAgYWl4WzQtOV0qKQorICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICAgICAgIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAorICAgICAgICAjIGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KKyAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworICAgICAgZWxzZQorICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCisgICAgICAgICMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAorICAgICAgICAjIEFJWCBzdHlsZSBsaW5raW5nLiBJZiAtYnJ0bCBpcyBzb21ld2hlcmUgaW4gTERGTEFHUywgd2UKKyAgICAgICAgIyBuZWVkIHRvIGRvIHJ1bnRpbWUgbGlua2luZy4KKyAgICAgICAgY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlsyM118YWl4NC5bMjNdLip8YWl4WzUtOV0qKQorICAgICAgICAgIGZvciBsZF9mbGFnIGluICRMREZMQUdTOyBkbworICAgICAgICAgICAgaWYgKHRlc3QgJGxkX2ZsYWcgPSAiLWJydGwiIHx8IHRlc3QgJGxkX2ZsYWcgPSAiLVdsLC1icnRsIik7IHRoZW4KKyAgICAgICAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKKyAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgZG9uZQorICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgIGZpCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSc6JworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgICAgY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlswMTJdfGFpeDQuWzAxMl0uKikKKyAgICAgICAgICBjb2xsZWN0Mm5hbWU9YCR7Q0N9IC1wcmludC1wcm9nLW5hbWU9Y29sbGVjdDJgCisgICAgICAgICAgaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYgXAorICAgICAgICAgICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCBncmVwIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAorICAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICMgV2UgaGF2ZSByZXdvcmtlZCBjb2xsZWN0MgorICAgICAgICAgICAgOgorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKKyAgICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD11bnN1cHBvcnRlZAorICAgICAgICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9CisgICAgICAgICAgZmkKKyAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgICBmaQorICAgICAgIyBCZWdpbiBfTFRfQUNfU1lTX0xJQlBBVEhfQUlYLgorICAgICAgZWNobyAnaW50IG1haW4gKCkgeyByZXR1cm4gMDsgfScgPiBjb25mdGVzdC5jCisgICAgICAke0NDfSAke0xERkxBR1N9IGNvbmZ0ZXN0LmMgLW8gY29uZnRlc3QKKyAgICAgIGFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0IDI+L2Rldi9udWxsIHwgc2VkIC1uIC1lICcvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7IC9eMC8geyBzL14wICAqXCguKlwpJC9cMS87IHA7IH0KK30nYAorICAgICAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorICAgICAgICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCAyPi9kZXYvbnVsbCB8IHNlZCAtbiAtZSAnL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geyAvXjAvIHsgcy9eMCAgKlwoLipcKSQvXDEvOyBwOyB9Cit9J2AKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCisgICAgICAgIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIgorICAgICAgZmkKKyAgICAgIHJtIC1mIGNvbmZ0ZXN0LmMgY29uZnRlc3QKKyAgICAgICMgRW5kIF9MVF9BQ19TWVNfTElCUEFUSF9BSVguCisgICAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAgICAgIGVsc2UKKyAgICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1SICRsaWJkaXI6L3Vzci9saWI6L2xpYicKKyAgICAgICAgZWxzZQorICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgICAgICAgIGZpCisgICAgICBmaQorICAgICAgOzsKKyAgICBhbWlnYW9zKikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICAjIHNlZSBjb21tZW50IGFib3V0IGRpZmZlcmVudCBzZW1hbnRpY3Mgb24gdGhlIEdOVSBsZCBzZWN0aW9uCisgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIDs7CisgICAgYnNkaVs0NV0qKQorICAgICAgOzsKKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZworICAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICAgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKKyAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworICAgICAgbGliZXh0PWxpYgorICAgICAgOzsKKyAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICAgaGFyZGNvZGVfZGlyZWN0PW5vCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyA7IHRoZW4KKyAgICAgICAgOgorICAgICAgZWxzZQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIHhsYyopCisgICAgICAgICAgICA7OworICAgICAgICAgICopCisgICAgICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgIGZpCisgICAgICA7OworICAgIGRndXgqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgOzsKKyAgICBmcmVlYnNkMSopCisgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIDs7CisgICAgZnJlZWJzZDIuMiopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICA7OworICAgIGZyZWVic2QyKikKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICA7OworICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIDs7CisgICAgaHB1eDkqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICA7OworICAgIGhwdXgxMCopCisgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICAgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisgICAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICAgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgZmkKKyAgICAgIDs7CisgICAgaHB1eDExKikKKyAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfStiICR7d2x9JGxpYmRpcicKKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICAgICAgaHBwYSo2NCp8aWE2NCopCisgICAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9bm8KKyAgICAgICAgICAgIDs7CisgICAgICAgICAgKikKKyAgICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgICAgICAgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisgICAgICAgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKyAgICAgICAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgICBmaQorICAgICAgOzsKKyAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICA7OworICAgIG5ldGJzZCopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICA7OworICAgIG5ld3NvczYpCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgIDs7CisgICAgb3BlbmJzZCopCisgICAgICBpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5zbzsgdGhlbgorICAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICAgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisgICAgICAgIGVsc2UKKyAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgIG9wZW5ic2RbMDFdLiogfCBvcGVuYnNkMi5bMC03XSB8IG9wZW5ic2QyLlswLTddLiopCisgICAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICopCisgICAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisgICAgICAgICAgICAgIDs7CisgICAgICAgICAgZXNhYworICAgICAgICBmaQorICAgICAgZWxzZQorICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworICAgIG9zMiopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgOzsKKyAgICBvc2YzKikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgOzsKKyAgICBvc2Y0KiB8IG9zZjUqKQorICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgZWxzZQorICAgICAgICAjIEJvdGggY2MgYW5kIGN4eCBjb21waWxlciBzdXBwb3J0IC1ycGF0aCBkaXJlY3RseQorICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctcnBhdGggJGxpYmRpcicKKyAgICAgIGZpCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgIDs7CisgICAgc29sYXJpcyopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgICA7OworICAgIHN1bm9zNCopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgOzsKKyAgICBzeXN2NCkKKyAgICAgIGNhc2UgJGhvc3RfdmVuZG9yIGluCisgICAgICAgIHNuaSkKKyAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzICMgaXMgdGhpcyByZWFsbHkgdHJ1ZT8/PworICAgICAgICAgIDs7CisgICAgICAgIHNpZW1lbnMpCisgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0PW5vCisgICAgICAgICAgOzsKKyAgICAgICAgbW90b3JvbGEpCisgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0PW5vICNNb3Rvcm9sYSBtYW51YWwgc2F5cyB5ZXMsIGJ1dCBteSB0ZXN0cyBzYXkgdGhleSBsaWUKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKyAgICBzeXN2NC4zKikKKyAgICAgIDs7CisgICAgc3lzdjQqTVAqKQorICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgorICAgICAgICBsZF9zaGxpYnM9eWVzCisgICAgICBmaQorICAgICAgOzsKKyAgICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bMDFdLlsxMF0qIHwgdW5peHdhcmU3KiB8IHNjbzMuMnY1LjAuWzAyNF0qKQorICAgICAgOzsKKyAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nYHRlc3QgLXogIiRTQ09BQlNQQVRIIiAmJiBlY2hvICR7d2x9LVIsJGxpYmRpcmAnCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSc6JworICAgICAgOzsKKyAgICB1dHM0KikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGxkX3NobGlicz1ubworICAgICAgOzsKKyAgZXNhYworZmkKKworIyBDaGVjayBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MKKyMgQ29kZSB0YWtlbiBmcm9tIGxpYnRvb2wubTQncyBfTFRfU1lTX0RZTkFNSUNfTElOS0VSLgorIyBVbmxpa2UgbGlidG9vbC5tNCwgaGVyZSB3ZSBkb24ndCBjYXJlIGFib3V0IF9hbGxfIG5hbWVzIG9mIHRoZSBsaWJyYXJ5LCBidXQKKyMgb25seSBhYm91dCB0aGUgb25lIHRoZSBsaW5rZXIgZmluZHMgd2hlbiBwYXNzZWQgLWxOQU1FLiBUaGlzIGlzIHRoZSBsYXN0CisjIGVsZW1lbnQgb2YgbGlicmFyeV9uYW1lc19zcGVjIGluIGxpYnRvb2wubTQsIG9yIHBvc3NpYmx5IHR3byBvZiB0aGVtIGlmIHRoZQorIyBsaW5rZXIgaGFzIHNwZWNpYWwgc2VhcmNoIHJ1bGVzLgorbGlicmFyeV9uYW1lc19zcGVjPSAgICAgICMgdGhlIGxhc3QgZWxlbWVudCBvZiBsaWJyYXJ5X25hbWVzX3NwZWMgaW4gbGlidG9vbC5tNAorbGlibmFtZV9zcGVjPSdsaWIkbmFtZScKK2Nhc2UgIiRob3N0X29zIiBpbgorICBhaXgzKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmEnCisgICAgOzsKKyAgYWl4WzQtOV0qKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIGFtaWdhb3MqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuYScKKyAgICA7OworICBiZW9zKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBic2RpWzQ1XSopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgIHNocmV4dD0uZGxsCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYSAkbGlibmFtZS5saWInCisgICAgOzsKKyAgZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgICBzaHJleHQ9LmR5bGliCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgZGd1eCopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgZnJlZWJzZDEqKQorICAgIDs7CisgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgIGZyZWVic2RbMTIzXSopCisgICAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JHZlcnN1ZmZpeCcgOzsKKyAgICAgICopCisgICAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JyA7OworICAgIGVzYWMKKyAgICA7OworICBnbnUqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBpYTY0KikKKyAgICAgICAgc2hyZXh0PS5zbworICAgICAgICA7OworICAgICAgaHBwYSo2NCopCisgICAgICAgIHNocmV4dD0uc2wKKyAgICAgICAgOzsKKyAgICAgICopCisgICAgICAgIHNocmV4dD0uc2wKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgaW50ZXJpeFszLTldKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgaXJpeDUqIHwgbm9uc3RvcHV4KikKKyAgICAgICAgbGlic3VmZj0gc2hsaWJzdWZmPQorICAgICAgICA7OworICAgICAgKikKKyAgICAgICAgY2FzZSAkTEQgaW4KKyAgICAgICAgICAqLTMyfCoiLTMyICJ8Ki1tZWxmMzJic21pcHwqIi1tZWxmMzJic21pcCAiKSBsaWJzdWZmPSBzaGxpYnN1ZmY9IDs7CisgICAgICAgICAgKi1uMzJ8KiItbjMyICJ8Ki1tZWxmMzJibWlwbjMyfCoiLW1lbGYzMmJtaXBuMzIgIikgbGlic3VmZj0zMiBzaGxpYnN1ZmY9TjMyIDs7CisgICAgICAgICAgKi02NHwqIi02NCAifCotbWVsZjY0Ym1pcHwqIi1tZWxmNjRibWlwICIpIGxpYnN1ZmY9NjQgc2hsaWJzdWZmPTY0IDs7CisgICAgICAgICAgKikgbGlic3VmZj0gc2hsaWJzdWZmPSA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisgICAgZXNhYworICAgIDs7CisgIGxpbnV4Km9sZGxkKiB8IGxpbnV4KmFvdXQqIHwgbGludXgqY29mZiopCisgICAgOzsKKyAgbGludXgqIHwgaypic2QqLWdudSkKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBrbmV0YnNkKi1nbnUpCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgbmV0YnNkKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBuZXdzb3M2KQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIG50by1xbngqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIG9wZW5ic2QqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JHZlcnN1ZmZpeCcKKyAgICA7OworICBvczIqKQorICAgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisgICAgc2hyZXh0PS5kbGwKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmEnCisgICAgOzsKKyAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIHJkb3MqKQorICAgIDs7CisgIHNvbGFyaXMqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIHN1bm9zNCopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQkdmVyc3VmZml4JworICAgIDs7CisgIHN5c3Y0IHwgc3lzdjQuMyopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgc3lzdjQqTVAqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIHV0czQqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7Citlc2FjCisKK3NlZF9xdW90ZV9zdWJzdD0ncy9cKFsiYCRcXF1cKS9cXFwxL2cnCitlc2NhcGVkX3dsPWBlY2hvICJYJHdsIiB8IHNlZCAtZSAncy9eWC8vJyAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCitzaGxpYmV4dD1gZWNobyAiJHNocmV4dCIgfCBzZWQgLWUgJ3MsXlwuLCwnYAorZXNjYXBlZF9saWJuYW1lX3NwZWM9YGVjaG8gIlgkbGlibmFtZV9zcGVjIiB8IHNlZCAtZSAncy9eWC8vJyAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCitlc2NhcGVkX2xpYnJhcnlfbmFtZXNfc3BlYz1gZWNobyAiWCRsaWJyYXJ5X25hbWVzX3NwZWMiIHwgc2VkIC1lICdzL15YLy8nIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKK2VzY2FwZWRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz1gZWNobyAiWCRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIiB8IHNlZCAtZSAncy9eWC8vJyAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisKK0xDX0FMTD1DIHNlZCAtZSAncy9eXChbYS16QS1aMC05X10qXCk9L2FjbF9jdl9cMT0vJyA8PEVPRgorCisjIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCit3bD0iJGVzY2FwZWRfd2wiCisKKyMgU3RhdGljIGxpYnJhcnkgc3VmZml4IChub3JtYWxseSAiYSIpLgorbGliZXh0PSIkbGliZXh0IgorCisjIFNoYXJlZCBsaWJyYXJ5IHN1ZmZpeCAobm9ybWFsbHkgInNvIikuCitzaGxpYmV4dD0iJHNobGliZXh0IgorCisjIEZvcm1hdCBvZiBsaWJyYXJ5IG5hbWUgcHJlZml4LgorbGlibmFtZV9zcGVjPSIkZXNjYXBlZF9saWJuYW1lX3NwZWMiCisKKyMgTGlicmFyeSBuYW1lcyB0aGF0IHRoZSBsaW5rZXIgZmluZHMgd2hlbiBwYXNzZWQgLWxOQU1FLgorbGlicmFyeV9uYW1lc19zcGVjPSIkZXNjYXBlZF9saWJyYXJ5X25hbWVzX3NwZWMiCisKKyMgRmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgorIyBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMgbm90IGV4aXN0LgoraGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0iJGVzY2FwZWRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIKKworIyBXaGV0aGVyIHdlIG5lZWQgYSBzaW5nbGUgLXJwYXRoIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudC4KK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9IiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIgorCisjIFNldCB0byB5ZXMgaWYgdXNpbmcgRElSL2xpYk5BTUUuc28gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQorIyByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfZGlyZWN0PSIkaGFyZGNvZGVfZGlyZWN0IgorCisjIFNldCB0byB5ZXMgaWYgdXNpbmcgdGhlIC1MRElSIGZsYWcgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQorIyByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfbWludXNfTD0iJGhhcmRjb2RlX21pbnVzX0wiCisKK0VPRgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2NvbmZpZy5zdWIgYi9hdmFoaS0wLjYuMzEvY29uZmlnLnN1YgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yYTU1YTUwCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2NvbmZpZy5zdWIKQEAgLTAsMCArMSwxNzA1IEBACisjISAvYmluL3NoCisjIENvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiBzdWJyb3V0aW5lIHNjcmlwdC4KKyMgICBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisjICAgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOQorIyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCit0aW1lc3RhbXA9JzIwMDktMTEtMjAnCisKKyMgVGhpcyBmaWxlIGlzIChpbiBwcmluY2lwbGUpIGNvbW1vbiB0byBBTEwgR05VIHNvZnR3YXJlLgorIyBUaGUgcHJlc2VuY2Ugb2YgYSBtYWNoaW5lIGluIHRoaXMgZmlsZSBzdWdnZXN0cyB0aGF0IFNPTUUgR05VIHNvZnR3YXJlCisjIGNhbiBoYW5kbGUgdGhhdCBtYWNoaW5lLiAgSXQgZG9lcyBub3QgaW1wbHkgQUxMIEdOVSBzb2Z0d2FyZSBjYW4uCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisjIDAyMTEwLTEzMDEsIFVTQS4KKyMKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKKyMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKyMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCisKKyMgUGxlYXNlIHNlbmQgcGF0Y2hlcyB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4uICBTdWJtaXQgYSBjb250ZXh0CisjIGRpZmYgYW5kIGEgcHJvcGVybHkgZm9ybWF0dGVkIEdOVSBDaGFuZ2VMb2cgZW50cnkuCisjCisjIENvbmZpZ3VyYXRpb24gc3Vicm91dGluZSB0byB2YWxpZGF0ZSBhbmQgY2Fub25pY2FsaXplIGEgY29uZmlndXJhdGlvbiB0eXBlLgorIyBTdXBwbHkgdGhlIHNwZWNpZmllZCBjb25maWd1cmF0aW9uIHR5cGUgYXMgYW4gYXJndW1lbnQuCisjIElmIGl0IGlzIGludmFsaWQsIHdlIHByaW50IGFuIGVycm9yIG1lc3NhZ2Ugb24gc3RkZXJyIGFuZCBleGl0IHdpdGggY29kZSAxLgorIyBPdGhlcndpc2UsIHdlIHByaW50IHRoZSBjYW5vbmljYWwgY29uZmlnIHR5cGUgb24gc3Rkb3V0IGFuZCBzdWNjZWVkLgorCisjIFlvdSBjYW4gZ2V0IHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIHNjcmlwdCBmcm9tOgorIyBodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvZ2l0d2ViLz9wPWNvbmZpZy5naXQ7YT1ibG9iX3BsYWluO2Y9Y29uZmlnLnN1YjtoYj1IRUFECisKKyMgVGhpcyBmaWxlIGlzIHN1cHBvc2VkIHRvIGJlIHRoZSBzYW1lIGZvciBhbGwgR05VIHBhY2thZ2VzCisjIGFuZCByZWNvZ25pemUgYWxsIHRoZSBDUFUgdHlwZXMsIHN5c3RlbSB0eXBlcyBhbmQgYWxpYXNlcworIyB0aGF0IGFyZSBtZWFuaW5nZnVsIHdpdGggKmFueSogR05VIHNvZnR3YXJlLgorIyBFYWNoIHBhY2thZ2UgaXMgcmVzcG9uc2libGUgZm9yIHJlcG9ydGluZyB3aGljaCB2YWxpZCBjb25maWd1cmF0aW9ucworIyBpdCBkb2VzIG5vdCBzdXBwb3J0LiAgVGhlIHVzZXIgc2hvdWxkIGJlIGFibGUgdG8gZGlzdGluZ3Vpc2gKKyMgYSBmYWlsdXJlIHRvIHN1cHBvcnQgYSB2YWxpZCBjb25maWd1cmF0aW9uIGZyb20gYSBtZWFuaW5nbGVzcworIyBjb25maWd1cmF0aW9uLgorCisjIFRoZSBnb2FsIG9mIHRoaXMgZmlsZSBpcyB0byBtYXAgYWxsIHRoZSB2YXJpb3VzIHZhcmlhdGlvbnMgb2YgYSBnaXZlbgorIyBtYWNoaW5lIHNwZWNpZmljYXRpb24gaW50byBhIHNpbmdsZSBzcGVjaWZpY2F0aW9uIGluIHRoZSBmb3JtOgorIwlDUFVfVFlQRS1NQU5VRkFDVFVSRVItT1BFUkFUSU5HX1NZU1RFTQorIyBvciBpbiBzb21lIGNhc2VzLCB0aGUgbmV3ZXIgZm91ci1wYXJ0IGZvcm06CisjCUNQVV9UWVBFLU1BTlVGQUNUVVJFUi1LRVJORUwtT1BFUkFUSU5HX1NZU1RFTQorIyBJdCBpcyB3cm9uZyB0byBlY2hvIGFueSBvdGhlciB0eXBlIG9mIHNwZWNpZmljYXRpb24uCisKK21lPWBlY2hvICIkMCIgfCBzZWQgLWUgJ3MsLiovLCwnYAorCit1c2FnZT0iXAorVXNhZ2U6ICQwIFtPUFRJT05dIENQVS1NRlItT1BTWVMKKyAgICAgICAkMCBbT1BUSU9OXSBBTElBUworCitDYW5vbmljYWxpemUgYSBjb25maWd1cmF0aW9uIG5hbWUuCisKK09wZXJhdGlvbiBtb2RlczoKKyAgLWgsIC0taGVscCAgICAgICAgIHByaW50IHRoaXMgaGVscCwgdGhlbiBleGl0CisgIC10LCAtLXRpbWUtc3RhbXAgICBwcmludCBkYXRlIG9mIGxhc3QgbW9kaWZpY2F0aW9uLCB0aGVuIGV4aXQKKyAgLXYsIC0tdmVyc2lvbiAgICAgIHByaW50IHZlcnNpb24gbnVtYmVyLCB0aGVuIGV4aXQKKworUmVwb3J0IGJ1Z3MgYW5kIHBhdGNoZXMgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+LiIKKwordmVyc2lvbj0iXAorR05VIGNvbmZpZy5zdWIgKCR0aW1lc3RhbXApCisKK0NvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwKKzIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCit3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4iCisKK2hlbHA9IgorVHJ5IFxgJG1lIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorCisjIFBhcnNlIGNvbW1hbmQgbGluZQord2hpbGUgdGVzdCAkIyAtZ3QgMCA7IGRvCisgIGNhc2UgJDEgaW4KKyAgICAtLXRpbWUtc3RhbXAgfCAtLXRpbWUqIHwgLXQgKQorICAgICAgIGVjaG8gIiR0aW1lc3RhbXAiIDsgZXhpdCA7OworICAgIC0tdmVyc2lvbiB8IC12ICkKKyAgICAgICBlY2hvICIkdmVyc2lvbiIgOyBleGl0IDs7CisgICAgLS1oZWxwIHwgLS1oKiB8IC1oICkKKyAgICAgICBlY2hvICIkdXNhZ2UiOyBleGl0IDs7CisgICAgLS0gKSAgICAgIyBTdG9wIG9wdGlvbiBwcm9jZXNzaW5nCisgICAgICAgc2hpZnQ7IGJyZWFrIDs7CisgICAgLSApCSMgVXNlIHN0ZGluIGFzIGlucHV0LgorICAgICAgIGJyZWFrIDs7CisgICAgLSogKQorICAgICAgIGVjaG8gIiRtZTogaW52YWxpZCBvcHRpb24gJDEkaGVscCIKKyAgICAgICBleGl0IDEgOzsKKworICAgICpsb2NhbCopCisgICAgICAgIyBGaXJzdCBwYXNzIHRocm91Z2ggYW55IGxvY2FsIG1hY2hpbmUgdHlwZXMuCisgICAgICAgZWNobyAkMQorICAgICAgIGV4aXQgOzsKKworICAgICogKQorICAgICAgIGJyZWFrIDs7CisgIGVzYWMKK2RvbmUKKworY2FzZSAkIyBpbgorIDApIGVjaG8gIiRtZTogbWlzc2luZyBhcmd1bWVudCRoZWxwIiA+JjIKKyAgICBleGl0IDE7OworIDEpIDs7CisgKikgZWNobyAiJG1lOiB0b28gbWFueSBhcmd1bWVudHMkaGVscCIgPiYyCisgICAgZXhpdCAxOzsKK2VzYWMKKworIyBTZXBhcmF0ZSB3aGF0IHRoZSB1c2VyIGdhdmUgaW50byBDUFUtQ09NUEFOWSBhbmQgT1Mgb3IgS0VSTkVMLU9TIChpZiBhbnkpLgorIyBIZXJlIHdlIG11c3QgcmVjb2duaXplIGFsbCB0aGUgdmFsaWQgS0VSTkVMLU9TIGNvbWJpbmF0aW9ucy4KK21heWJlX29zPWBlY2hvICQxIHwgc2VkICdzL15cKC4qXCktXChbXi1dKi1bXi1dKlwpJC9cMi8nYAorY2FzZSAkbWF5YmVfb3MgaW4KKyAgbnRvLXFueCogfCBsaW51eC1nbnUqIHwgbGludXgtZGlldGxpYmMgfCBsaW51eC1uZXdsaWIqIHwgbGludXgtdWNsaWJjKiB8IFwKKyAgdWNsaW51eC11Y2xpYmMqIHwgdWNsaW51eC1nbnUqIHwga2ZyZWVic2QqLWdudSogfCBrbmV0YnNkKi1nbnUqIHwgbmV0YnNkKi1nbnUqIHwgXAorICBrb3BlbnNvbGFyaXMqLWdudSogfCBcCisgIHN0b3JtLWNoYW9zKiB8IG9zMi1lbXgqIHwgcnRtay1ub3ZhKikKKyAgICBvcz0tJG1heWJlX29zCisgICAgYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAncy9eXCguKlwpLVwoW14tXSotW14tXSpcKSQvXDEvJ2AKKyAgICA7OworICAqKQorICAgIGJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgJ3MvLVteLV0qJC8vJ2AKKyAgICBpZiBbICRiYXNpY19tYWNoaW5lICE9ICQxIF0KKyAgICB0aGVuIG9zPWBlY2hvICQxIHwgc2VkICdzLy4qLS8tLydgCisgICAgZWxzZSBvcz07IGZpCisgICAgOzsKK2VzYWMKKworIyMjIExldCdzIHJlY29nbml6ZSBjb21tb24gbWFjaGluZXMgYXMgbm90IGJlaW5nIG9wZXJhdGluZyBzeXN0ZW1zIHNvCisjIyMgdGhhdCB0aGluZ3MgbGlrZSBjb25maWcuc3ViIGRlY3N0YXRpb24tMzEwMCB3b3JrLiAgV2UgYWxzbworIyMjIHJlY29nbml6ZSBzb21lIG1hbnVmYWN0dXJlcnMgYXMgbm90IGJlaW5nIG9wZXJhdGluZyBzeXN0ZW1zLCBzbyB3ZQorIyMjIGNhbiBwcm92aWRlIGRlZmF1bHQgb3BlcmF0aW5nIHN5c3RlbXMgYmVsb3cuCitjYXNlICRvcyBpbgorCS1zdW4qb3MqKQorCQkjIFByZXZlbnQgZm9sbG93aW5nIGNsYXVzZSBmcm9tIGhhbmRsaW5nIHRoaXMgaW52YWxpZCBpbnB1dC4KKwkJOzsKKwktZGVjKiB8IC1taXBzKiB8IC1zZXF1ZW50KiB8IC1lbmNvcmUqIHwgLXBjNTMyKiB8IC1zZ2kqIHwgLXNvbnkqIHwgXAorCS1hdHQqIHwgLTczMDAqIHwgLTMzMDAqIHwgLWRlbHRhKiB8IC1tb3Rvcm9sYSogfCAtc3VuWzIzNF0qIHwgXAorCS11bmljb20qIHwgLWlibSogfCAtbmV4dCB8IC1ocCB8IC1pc2kqIHwgLWFwb2xsbyB8IC1hbHRvcyogfCBcCisJLWNvbnZlcmdlbnQqIHwgLW5jciogfCAtbmV3cyB8IC0zMiogfCAtMzYwMCogfCAtMzEwMCogfCAtaGl0YWNoaSogfFwKKwktY1sxMjNdKiB8IC1jb252ZXgqIHwgLXN1biB8IC1jcmRzIHwgLW9tcm9uKiB8IC1kZyB8IC11bHRyYSB8IC10dGkqIHwgXAorCS1oYXJyaXMgfCAtZG9scGhpbiB8IC1oaWdobGV2ZWwgfCAtZ291bGQgfCAtY2JtIHwgLW5zIHwgLW1hc3Njb21wIHwgXAorCS1hcHBsZSB8IC1heGlzIHwgLWtudXRoIHwgLWNyYXkgfCAtbWljcm9ibGF6ZSkKKwkJb3M9CisJCWJhc2ljX21hY2hpbmU9JDEKKwkJOzsKKyAgICAgICAgLWJsdWVnZW5lKikKKwkgICAgICAgIG9zPS1jbmsKKwkJOzsKKwktc2ltIHwgLWNpc2NvIHwgLW9raSB8IC13ZWMgfCAtd2luYm9uZCkKKwkJb3M9CisJCWJhc2ljX21hY2hpbmU9JDEKKwkJOzsKKwktc2NvdXQpCisJCTs7CisJLXdycykKKwkJb3M9LXZ4d29ya3MKKwkJYmFzaWNfbWFjaGluZT0kMQorCQk7OworCS1jaG9ydXNvcyopCisJCW9zPS1jaG9ydXNvcworCQliYXNpY19tYWNoaW5lPSQxCisJCTs7CisgCS1jaG9ydXNyZGIpCisgCQlvcz0tY2hvcnVzcmRiCisJCWJhc2ljX21hY2hpbmU9JDEKKyAJCTs7CisJLWhpdXgqKQorCQlvcz0taGl1eHdlMgorCQk7OworCS1zY282KQorCQlvcz0tc2NvNXY2CisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktc2NvNSkKKwkJb3M9LXNjbzMuMnY1CisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktc2NvNCkKKwkJb3M9LXNjbzMuMnY0CisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktc2NvMy4yLls0LTldKikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzL3NjbzMuMi4vc2NvMy4ydi8nYAorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLXNjbzMuMnZbNC05XSopCisJCSMgRG9uJ3QgZm9yZ2V0IHZlcnNpb24gaWYgaXQgaXMgMy4ydjQgb3IgbmV3ZXIuCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktc2NvNXY2KikKKwkJIyBEb24ndCBmb3JnZXQgdmVyc2lvbiBpZiBpdCBpcyAzLjJ2NCBvciBuZXdlci4KKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1zY28qKQorCQlvcz0tc2NvMy4ydjIKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS11ZGsqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLWlzYykKKwkJb3M9LWlzYzIuMgorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLWNsaXgqKQorCQliYXNpY19tYWNoaW5lPWNsaXBwZXItaW50ZXJncmFwaAorCQk7OworCS1pc2MqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLWx5bngqKQorCQlvcz0tbHlueG9zCisJCTs7CisJLXB0eCopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtc2VxdWVudC8nYAorCQk7OworCS13aW5kb3dzbnQqKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3Mvd2luZG93c250L3dpbm50LydgCisJCTs7CisJLXBzb3MqKQorCQlvcz0tcHNvcworCQk7OworCS1taW50IHwgLW1pbnRbMC05XSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hdGFyaQorCQlvcz0tbWludAorCQk7OworZXNhYworCisjIERlY29kZSBhbGlhc2VzIGZvciBjZXJ0YWluIENQVS1DT01QQU5ZIGNvbWJpbmF0aW9ucy4KK2Nhc2UgJGJhc2ljX21hY2hpbmUgaW4KKwkjIFJlY29nbml6ZSB0aGUgYmFzaWMgQ1BVIHR5cGVzIHdpdGhvdXQgY29tcGFueSBuYW1lLgorCSMgU29tZSBhcmUgb21pdHRlZCBoZXJlIGJlY2F1c2UgdGhleSBoYXZlIHNwZWNpYWwgbWVhbmluZ3MgYmVsb3cuCisJMTc1MGEgfCA1ODAgXAorCXwgYTI5ayBcCisJfCBhbHBoYSB8IGFscGhhZXZbNC04XSB8IGFscGhhZXY1NiB8IGFscGhhZXY2Wzc4XSB8IGFscGhhcGNhNVs2N10gXAorCXwgYWxwaGE2NCB8IGFscGhhNjRldls0LThdIHwgYWxwaGE2NGV2NTYgfCBhbHBoYTY0ZXY2Wzc4XSB8IGFscGhhNjRwY2E1WzY3XSBcCisJfCBhbTMzXzIuMCBcCisJfCBhcmMgfCBhcm0gfCBhcm1bYmxdZSB8IGFybWVbbGJdIHwgYXJtdlsyMzQ1XSB8IGFybXZbMzQ1XVtsYl0gfCBhdnIgfCBhdnIzMiBcCisJfCBiZmluIFwKKwl8IGM0eCB8IGNsaXBwZXIgXAorCXwgZDEwdiB8IGQzMHYgfCBkbHggfCBkc3AxNnh4IFwKKwl8IGZpZG8gfCBmcjMwIHwgZnJ2IFwKKwl8IGg4MzAwIHwgaDg1MDAgfCBocHBhIHwgaHBwYTEuWzAxXSB8IGhwcGEyLjAgfCBocHBhMi4wW253XSB8IGhwcGE2NCBcCisJfCBpMzcwIHwgaTg2MCB8IGk5NjAgfCBpYTY0IFwKKwl8IGlwMmsgfCBpcTIwMDAgXAorCXwgbG0zMiBcCisJfCBtMzJjIHwgbTMyciB8IG0zMnJsZSB8IG02ODAwMCB8IG02OGsgfCBtODhrIFwKKwl8IG1heHEgfCBtYiB8IG1pY3JvYmxhemUgfCBtY29yZSB8IG1lcCB8IG1ldGFnIFwKKwl8IG1pcHMgfCBtaXBzYmUgfCBtaXBzZWIgfCBtaXBzZWwgfCBtaXBzbGUgXAorCXwgbWlwczE2IFwKKwl8IG1pcHM2NCB8IG1pcHM2NGVsIFwKKwl8IG1pcHM2NG9jdGVvbiB8IG1pcHM2NG9jdGVvbmVsIFwKKwl8IG1pcHM2NG9yaW9uIHwgbWlwczY0b3Jpb25lbCBcCisJfCBtaXBzNjRyNTkwMCB8IG1pcHM2NHI1OTAwZWwgXAorCXwgbWlwczY0dnIgfCBtaXBzNjR2cmVsIFwKKwl8IG1pcHM2NHZyNDEwMCB8IG1pcHM2NHZyNDEwMGVsIFwKKwl8IG1pcHM2NHZyNDMwMCB8IG1pcHM2NHZyNDMwMGVsIFwKKwl8IG1pcHM2NHZyNTAwMCB8IG1pcHM2NHZyNTAwMGVsIFwKKwl8IG1pcHM2NHZyNTkwMCB8IG1pcHM2NHZyNTkwMGVsIFwKKwl8IG1pcHNpc2EzMiB8IG1pcHNpc2EzMmVsIFwKKwl8IG1pcHNpc2EzMnIyIHwgbWlwc2lzYTMycjJlbCBcCisJfCBtaXBzaXNhNjQgfCBtaXBzaXNhNjRlbCBcCisJfCBtaXBzaXNhNjRyMiB8IG1pcHNpc2E2NHIyZWwgXAorCXwgbWlwc2lzYTY0c2IxIHwgbWlwc2lzYTY0c2IxZWwgXAorCXwgbWlwc2lzYTY0c3I3MWsgfCBtaXBzaXNhNjRzcjcxa2VsIFwKKwl8IG1pcHN0eDM5IHwgbWlwc3R4MzllbCBcCisJfCBtbjEwMjAwIHwgbW4xMDMwMCBcCisJfCBtb3hpZSBcCisJfCBtdCBcCisJfCBtc3A0MzAgXAorCXwgbmlvcyB8IG5pb3MyIFwKKwl8IG5zMTZrIHwgbnMzMmsgXAorCXwgb3IzMiBcCisJfCBwZHAxMCB8IHBkcDExIHwgcGogfCBwamwgXAorCXwgcG93ZXJwYyB8IHBvd2VycGM2NCB8IHBvd2VycGM2NGxlIHwgcG93ZXJwY2xlIHwgcHBjYmUgXAorCXwgcHlyYW1pZCBcCisJfCByeCBcCisJfCBzY29yZSBcCisJfCBzaCB8IHNoWzEyMzRdIHwgc2hbMjRdYSB8IHNoWzI0XWFlYiB8IHNoWzIzXWUgfCBzaFszNF1lYiB8IHNoZWIgfCBzaGJlIHwgc2hsZSB8IHNoWzEyMzRdbGUgfCBzaDNlbGUgXAorCXwgc2g2NCB8IHNoNjRsZSBcCisJfCBzcGFyYyB8IHNwYXJjNjQgfCBzcGFyYzY0YiB8IHNwYXJjNjR2IHwgc3BhcmM4NnggfCBzcGFyY2xldCB8IHNwYXJjbGl0ZSBcCisJfCBzcGFyY3Y4IHwgc3BhcmN2OSB8IHNwYXJjdjliIHwgc3BhcmN2OXYgXAorCXwgc3B1IHwgc3Ryb25nYXJtIFwKKwl8IHRhaG9lIHwgdGh1bWIgfCB0aWM0eCB8IHRpYzgwIHwgdHJvbiBcCisJfCB1Ymljb20zMiBcCisJfCB2ODUwIHwgdjg1MGUgXAorCXwgd2UzMmsgXAorCXwgeDg2IHwgeGMxNnggfCB4c2NhbGUgfCB4c2NhbGVlW2JsXSB8IHhzdG9ybXkxNiB8IHh0ZW5zYSBcCisJfCB6OGsgfCB6ODApCisJCWJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtdW5rbm93bgorCQk7OworCW02ODExIHwgbTY4aGMxMSB8IG02ODEyIHwgbTY4aGMxMiB8IHBpY29jaGlwKQorCQkjIE1vdG9yb2xhIDY4SEMxMS8xMi4KKwkJYmFzaWNfbWFjaGluZT0kYmFzaWNfbWFjaGluZS11bmtub3duCisJCW9zPS1ub25lCisJCTs7CisJbTg4MTEwIHwgbTY4MFsxMjM0Nl0wIHwgbTY4Mz8yIHwgbTY4MzYwIHwgbTUyMDAgfCB2NzAgfCB3NjUgfCB6OGspCisJCTs7CisJbXMxKQorCQliYXNpY19tYWNoaW5lPW10LXVua25vd24KKwkJOzsKKworCSMgV2UgdXNlIGBwYycgcmF0aGVyIHRoYW4gYHVua25vd24nCisJIyBiZWNhdXNlICgxKSB0aGF0J3Mgd2hhdCB0aGV5IG5vcm1hbGx5IGFyZSwgYW5kCisJIyAoMikgdGhlIHdvcmQgInVua25vd24iIHRlbmRzIHRvIGNvbmZ1c2UgYmVnaW5uaW5nIHVzZXJzLgorCWkqODYgfCB4ODZfNjQpCisJICBiYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXBjCisJICA7OworCSMgT2JqZWN0IGlmIG1vcmUgdGhhbiBvbmUgY29tcGFueSBuYW1lIHdvcmQuCisJKi0qLSopCisJCWVjaG8gSW52YWxpZCBjb25maWd1cmF0aW9uIFxgJDFcJzogbWFjaGluZSBcYCRiYXNpY19tYWNoaW5lXCcgbm90IHJlY29nbml6ZWQgMT4mMgorCQlleGl0IDEKKwkJOzsKKwkjIFJlY29nbml6ZSB0aGUgYmFzaWMgQ1BVIHR5cGVzIHdpdGggY29tcGFueSBuYW1lLgorCTU4MC0qIFwKKwl8IGEyOWstKiBcCisJfCBhbHBoYS0qIHwgYWxwaGFldls0LThdLSogfCBhbHBoYWV2NTYtKiB8IGFscGhhZXY2Wzc4XS0qIFwKKwl8IGFscGhhNjQtKiB8IGFscGhhNjRldls0LThdLSogfCBhbHBoYTY0ZXY1Ni0qIHwgYWxwaGE2NGV2Nls3OF0tKiBcCisJfCBhbHBoYXBjYTVbNjddLSogfCBhbHBoYTY0cGNhNVs2N10tKiB8IGFyYy0qIFwKKwl8IGFybS0qICB8IGFybWJlLSogfCBhcm1sZS0qIHwgYXJtZWItKiB8IGFybXYqLSogXAorCXwgYXZyLSogfCBhdnIzMi0qIFwKKwl8IGJmaW4tKiB8IGJzMjAwMC0qIFwKKwl8IGNbMTIzXSogfCBjMzAtKiB8IFtjanRdOTAtKiB8IGM0eC0qIHwgYzU0eC0qIHwgYzU1eC0qIHwgYzZ4LSogXAorCXwgY2xpcHBlci0qIHwgY3JheW52LSogfCBjeWRyYS0qIFwKKwl8IGQxMHYtKiB8IGQzMHYtKiB8IGRseC0qIFwKKwl8IGVseHNpLSogXAorCXwgZjMwWzAxXS0qIHwgZjcwMC0qIHwgZmlkby0qIHwgZnIzMC0qIHwgZnJ2LSogfCBmeDgwLSogXAorCXwgaDgzMDAtKiB8IGg4NTAwLSogXAorCXwgaHBwYS0qIHwgaHBwYTEuWzAxXS0qIHwgaHBwYTIuMC0qIHwgaHBwYTIuMFtud10tKiB8IGhwcGE2NC0qIFwKKwl8IGkqODYtKiB8IGk4NjAtKiB8IGk5NjAtKiB8IGlhNjQtKiBcCisJfCBpcDJrLSogfCBpcTIwMDAtKiBcCisJfCBsbTMyLSogXAorCXwgbTMyYy0qIHwgbTMyci0qIHwgbTMycmxlLSogXAorCXwgbTY4MDAwLSogfCBtNjgwWzAxMjM0Nl0wLSogfCBtNjgzNjAtKiB8IG02ODM/Mi0qIHwgbTY4ay0qIFwKKwl8IG04ODExMC0qIHwgbTg4ay0qIHwgbWF4cS0qIHwgbWNvcmUtKiB8IG1ldGFnLSogfCBtaWNyb2JsYXplLSogXAorCXwgbWlwcy0qIHwgbWlwc2JlLSogfCBtaXBzZWItKiB8IG1pcHNlbC0qIHwgbWlwc2xlLSogXAorCXwgbWlwczE2LSogXAorCXwgbWlwczY0LSogfCBtaXBzNjRlbC0qIFwKKwl8IG1pcHM2NG9jdGVvbi0qIHwgbWlwczY0b2N0ZW9uZWwtKiBcCisJfCBtaXBzNjRvcmlvbi0qIHwgbWlwczY0b3Jpb25lbC0qIFwKKwl8IG1pcHM2NHI1OTAwLSogfCBtaXBzNjRyNTkwMGVsLSogXAorCXwgbWlwczY0dnItKiB8IG1pcHM2NHZyZWwtKiBcCisJfCBtaXBzNjR2cjQxMDAtKiB8IG1pcHM2NHZyNDEwMGVsLSogXAorCXwgbWlwczY0dnI0MzAwLSogfCBtaXBzNjR2cjQzMDBlbC0qIFwKKwl8IG1pcHM2NHZyNTAwMC0qIHwgbWlwczY0dnI1MDAwZWwtKiBcCisJfCBtaXBzNjR2cjU5MDAtKiB8IG1pcHM2NHZyNTkwMGVsLSogXAorCXwgbWlwc2lzYTMyLSogfCBtaXBzaXNhMzJlbC0qIFwKKwl8IG1pcHNpc2EzMnIyLSogfCBtaXBzaXNhMzJyMmVsLSogXAorCXwgbWlwc2lzYTY0LSogfCBtaXBzaXNhNjRlbC0qIFwKKwl8IG1pcHNpc2E2NHIyLSogfCBtaXBzaXNhNjRyMmVsLSogXAorCXwgbWlwc2lzYTY0c2IxLSogfCBtaXBzaXNhNjRzYjFlbC0qIFwKKwl8IG1pcHNpc2E2NHNyNzFrLSogfCBtaXBzaXNhNjRzcjcxa2VsLSogXAorCXwgbWlwc3R4MzktKiB8IG1pcHN0eDM5ZWwtKiBcCisJfCBtbWl4LSogXAorCXwgbXQtKiBcCisJfCBtc3A0MzAtKiBcCisJfCBuaW9zLSogfCBuaW9zMi0qIFwKKwl8IG5vbmUtKiB8IG5wMS0qIHwgbnMxNmstKiB8IG5zMzJrLSogXAorCXwgb3Jpb24tKiBcCisJfCBwZHAxMC0qIHwgcGRwMTEtKiB8IHBqLSogfCBwamwtKiB8IHBuLSogfCBwb3dlci0qIFwKKwl8IHBvd2VycGMtKiB8IHBvd2VycGM2NC0qIHwgcG93ZXJwYzY0bGUtKiB8IHBvd2VycGNsZS0qIHwgcHBjYmUtKiBcCisJfCBweXJhbWlkLSogXAorCXwgcm9tcC0qIHwgcnM2MDAwLSogfCByeC0qIFwKKwl8IHNoLSogfCBzaFsxMjM0XS0qIHwgc2hbMjRdYS0qIHwgc2hbMjRdYWViLSogfCBzaFsyM11lLSogfCBzaFszNF1lYi0qIHwgc2hlYi0qIHwgc2hiZS0qIFwKKwl8IHNobGUtKiB8IHNoWzEyMzRdbGUtKiB8IHNoM2VsZS0qIHwgc2g2NC0qIHwgc2g2NGxlLSogXAorCXwgc3BhcmMtKiB8IHNwYXJjNjQtKiB8IHNwYXJjNjRiLSogfCBzcGFyYzY0di0qIHwgc3BhcmM4NngtKiB8IHNwYXJjbGV0LSogXAorCXwgc3BhcmNsaXRlLSogXAorCXwgc3BhcmN2OC0qIHwgc3BhcmN2OS0qIHwgc3BhcmN2OWItKiB8IHNwYXJjdjl2LSogfCBzdHJvbmdhcm0tKiB8IHN2MS0qIHwgc3g/LSogXAorCXwgdGFob2UtKiB8IHRodW1iLSogXAorCXwgdGljMzAtKiB8IHRpYzR4LSogfCB0aWM1NHgtKiB8IHRpYzU1eC0qIHwgdGljNngtKiB8IHRpYzgwLSogfCB0aWxlLSogXAorCXwgdHJvbi0qIFwKKwl8IHViaWNvbTMyLSogXAorCXwgdjg1MC0qIHwgdjg1MGUtKiB8IHZheC0qIFwKKwl8IHdlMzJrLSogXAorCXwgeDg2LSogfCB4ODZfNjQtKiB8IHhjMTZ4LSogfCB4cHMxMDAtKiB8IHhzY2FsZS0qIHwgeHNjYWxlZVtibF0tKiBcCisJfCB4c3Rvcm15MTYtKiB8IHh0ZW5zYSotKiBcCisJfCB5bXAtKiBcCisJfCB6OGstKiB8IHo4MC0qKQorCQk7OworCSMgUmVjb2duaXplIHRoZSBiYXNpYyBDUFUgdHlwZXMgd2l0aG91dCBjb21wYW55IG5hbWUsIHdpdGggZ2xvYiBtYXRjaC4KKwl4dGVuc2EqKQorCQliYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXVua25vd24KKwkJOzsKKwkjIFJlY29nbml6ZSB0aGUgdmFyaW91cyBtYWNoaW5lIG5hbWVzIGFuZCBhbGlhc2VzIHdoaWNoIHN0YW5kCisJIyBmb3IgYSBDUFUgdHlwZSBhbmQgYSBjb21wYW55IGFuZCBzb21ldGltZXMgZXZlbiBhbiBPUy4KKwkzODZic2QpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni11bmtub3duCisJCW9zPS1ic2QKKwkJOzsKKwkzYjEgfCA3MzAwIHwgNzMwMC1hdHQgfCBhdHQtNzMwMCB8IHBjNzMwMCB8IHNhZmFyaSB8IHVuaXhwYykKKwkJYmFzaWNfbWFjaGluZT1tNjgwMDAtYXR0CisJCTs7CisJM2IqKQorCQliYXNpY19tYWNoaW5lPXdlMzJrLWF0dAorCQk7OworCWEyOWtoaWYpCisJCWJhc2ljX21hY2hpbmU9YTI5ay1hbWQKKwkJb3M9LXVkaQorCQk7OworICAgIAlhYmFjdXMpCisJCWJhc2ljX21hY2hpbmU9YWJhY3VzLXVua25vd24KKwkJOzsKKwlhZG9iZTY4aykKKwkJYmFzaWNfbWFjaGluZT1tNjgwMTAtYWRvYmUKKwkJb3M9LXNjb3V0CisJCTs7CisJYWxsaWFudCB8IGZ4ODApCisJCWJhc2ljX21hY2hpbmU9Zng4MC1hbGxpYW50CisJCTs7CisJYWx0b3MgfCBhbHRvczMwNjgpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hbHRvcworCQk7OworCWFtMjlrKQorCQliYXNpY19tYWNoaW5lPWEyOWstbm9uZQorCQlvcz0tYnNkCisJCTs7CisJYW1kNjQpCisJCWJhc2ljX21hY2hpbmU9eDg2XzY0LXBjCisJCTs7CisJYW1kNjQtKikKKwkJYmFzaWNfbWFjaGluZT14ODZfNjQtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlhbWRhaGwpCisJCWJhc2ljX21hY2hpbmU9NTgwLWFtZGFobAorCQlvcz0tc3lzdgorCQk7OworCWFtaWdhIHwgYW1pZ2EtKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXVua25vd24KKwkJOzsKKwlhbWlnYW9zIHwgYW1pZ2Fkb3MpCisJCWJhc2ljX21hY2hpbmU9bTY4ay11bmtub3duCisJCW9zPS1hbWlnYW9zCisJCTs7CisJYW1pZ2F1bml4IHwgYW1peCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXVua25vd24KKwkJb3M9LXN5c3Y0CisJCTs7CisJYXBvbGxvNjgpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hcG9sbG8KKwkJb3M9LXN5c3YKKwkJOzsKKwlhcG9sbG82OGJzZCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWFwb2xsbworCQlvcz0tYnNkCisJCTs7CisJYXJvcykKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCW9zPS1hcm9zCisJCTs7CisJYXV4KQorCQliYXNpY19tYWNoaW5lPW02OGstYXBwbGUKKwkJb3M9LWF1eAorCQk7OworCWJhbGFuY2UpCisJCWJhc2ljX21hY2hpbmU9bnMzMmstc2VxdWVudAorCQlvcz0tZHluaXgKKwkJOzsKKwlibGFja2ZpbikKKwkJYmFzaWNfbWFjaGluZT1iZmluLXVua25vd24KKwkJb3M9LWxpbnV4CisJCTs7CisJYmxhY2tmaW4tKikKKwkJYmFzaWNfbWFjaGluZT1iZmluLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCW9zPS1saW51eAorCQk7OworCWJsdWVnZW5lKikKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjLWlibQorCQlvcz0tY25rCisJCTs7CisJYzkwKQorCQliYXNpY19tYWNoaW5lPWM5MC1jcmF5CisJCW9zPS11bmljb3MKKwkJOzsKKyAgICAgICAgY2VnY2MpCisJCWJhc2ljX21hY2hpbmU9YXJtLXVua25vd24KKwkJb3M9LWNlZ2NjCisJCTs7CisJY29udmV4LWMxKQorCQliYXNpY19tYWNoaW5lPWMxLWNvbnZleAorCQlvcz0tYnNkCisJCTs7CisJY29udmV4LWMyKQorCQliYXNpY19tYWNoaW5lPWMyLWNvbnZleAorCQlvcz0tYnNkCisJCTs7CisJY29udmV4LWMzMikKKwkJYmFzaWNfbWFjaGluZT1jMzItY29udmV4CisJCW9zPS1ic2QKKwkJOzsKKwljb252ZXgtYzM0KQorCQliYXNpY19tYWNoaW5lPWMzNC1jb252ZXgKKwkJb3M9LWJzZAorCQk7OworCWNvbnZleC1jMzgpCisJCWJhc2ljX21hY2hpbmU9YzM4LWNvbnZleAorCQlvcz0tYnNkCisJCTs7CisJY3JheSB8IGo5MCkKKwkJYmFzaWNfbWFjaGluZT1qOTAtY3JheQorCQlvcz0tdW5pY29zCisJCTs7CisJY3JheW52KQorCQliYXNpY19tYWNoaW5lPWNyYXludi1jcmF5CisJCW9zPS11bmljb3NtcAorCQk7OworCWNyMTYpCisJCWJhc2ljX21hY2hpbmU9Y3IxNi11bmtub3duCisJCW9zPS1lbGYKKwkJOzsKKwljcmRzIHwgdW5vcykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWNyZHMKKwkJOzsKKwljcmlzdjMyIHwgY3Jpc3YzMi0qIHwgZXRyYXhmcyopCisJCWJhc2ljX21hY2hpbmU9Y3Jpc3YzMi1heGlzCisJCTs7CisJY3JpcyB8IGNyaXMtKiB8IGV0cmF4KikKKwkJYmFzaWNfbWFjaGluZT1jcmlzLWF4aXMKKwkJOzsKKwljcngpCisJCWJhc2ljX21hY2hpbmU9Y3J4LXVua25vd24KKwkJb3M9LWVsZgorCQk7OworCWRhMzAgfCBkYTMwLSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay1kYTMwCisJCTs7CisJZGVjc3RhdGlvbiB8IGRlY3N0YXRpb24tMzEwMCB8IHBtYXggfCBwbWF4LSogfCBwbWluIHwgZGVjMzEwMCB8IGRlY3N0YXRuKQorCQliYXNpY19tYWNoaW5lPW1pcHMtZGVjCisJCTs7CisJZGVjc3lzdGVtMTAqIHwgZGVjMTAqKQorCQliYXNpY19tYWNoaW5lPXBkcDEwLWRlYworCQlvcz0tdG9wczEwCisJCTs7CisJZGVjc3lzdGVtMjAqIHwgZGVjMjAqKQorCQliYXNpY19tYWNoaW5lPXBkcDEwLWRlYworCQlvcz0tdG9wczIwCisJCTs7CisJZGVsdGEgfCAzMzAwIHwgbW90b3JvbGEtMzMwMCB8IG1vdG9yb2xhLWRlbHRhIFwKKwkgICAgICB8IDMzMDAtbW90b3JvbGEgfCBkZWx0YS1tb3Rvcm9sYSkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLW1vdG9yb2xhCisJCTs7CisJZGVsdGE4OCkKKwkJYmFzaWNfbWFjaGluZT1tODhrLW1vdG9yb2xhCisJCW9zPS1zeXN2MworCQk7OworCWRpY29zKQorCQliYXNpY19tYWNoaW5lPWk2ODYtcGMKKwkJb3M9LWRpY29zCisJCTs7CisJZGpncHApCisJCWJhc2ljX21hY2hpbmU9aTU4Ni1wYworCQlvcz0tbXNkb3NkamdwcAorCQk7OworCWRweDIwIHwgZHB4MjAtKikKKwkJYmFzaWNfbWFjaGluZT1yczYwMDAtYnVsbAorCQlvcz0tYm9zeAorCQk7OworCWRweDIqIHwgZHB4MiotYnVsbCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWJ1bGwKKwkJb3M9LXN5c3YzCisJCTs7CisJZWJtb24yOWspCisJCWJhc2ljX21hY2hpbmU9YTI5ay1hbWQKKwkJb3M9LWVibW9uCisJCTs7CisJZWx4c2kpCisJCWJhc2ljX21hY2hpbmU9ZWx4c2ktZWx4c2kKKwkJb3M9LWJzZAorCQk7OworCWVuY29yZSB8IHVtYXggfCBtbWF4KQorCQliYXNpY19tYWNoaW5lPW5zMzJrLWVuY29yZQorCQk7OworCWVzMTgwMCB8IE9TRTY4ayB8IG9zZTY4ayB8IG9zZSB8IE9TRSkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWVyaWNzc29uCisJCW9zPS1vc2UKKwkJOzsKKwlmeDI4MDApCisJCWJhc2ljX21hY2hpbmU9aTg2MC1hbGxpYW50CisJCTs7CisJZ2VuaXgpCisJCWJhc2ljX21hY2hpbmU9bnMzMmstbnMKKwkJOzsKKwlnbWljcm8pCisJCWJhc2ljX21hY2hpbmU9dHJvbi1nbWljcm8KKwkJb3M9LXN5c3YKKwkJOzsKKwlnbzMyKQorCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJb3M9LWdvMzIKKwkJOzsKKwloMzA1MHIqIHwgaGl1eCopCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1oaXRhY2hpCisJCW9zPS1oaXV4d2UyCisJCTs7CisJaDgzMDBobXMpCisJCWJhc2ljX21hY2hpbmU9aDgzMDAtaGl0YWNoaQorCQlvcz0taG1zCisJCTs7CisJaDgzMDB4cmF5KQorCQliYXNpY19tYWNoaW5lPWg4MzAwLWhpdGFjaGkKKwkJb3M9LXhyYXkKKwkJOzsKKwloODUwMGhtcykKKwkJYmFzaWNfbWFjaGluZT1oODUwMC1oaXRhY2hpCisJCW9zPS1obXMKKwkJOzsKKwloYXJyaXMpCisJCWJhc2ljX21hY2hpbmU9bTg4ay1oYXJyaXMKKwkJb3M9LXN5c3YzCisJCTs7CisJaHAzMDAtKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWhwCisJCTs7CisJaHAzMDBic2QpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1ocAorCQlvcz0tYnNkCisJCTs7CisJaHAzMDBocHV4KQorCQliYXNpY19tYWNoaW5lPW02OGstaHAKKwkJb3M9LWhwdXgKKwkJOzsKKwlocDNrOVswLTldWzAtOV0gfCBocDlbMC05XVswLTldKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjAtaHAKKwkJOzsKKwlocDlrMlswLTldWzAtOV0gfCBocDlrMzFbMC05XSkKKwkJYmFzaWNfbWFjaGluZT1tNjgwMDAtaHAKKwkJOzsKKwlocDlrM1syLTldWzAtOV0pCisJCWJhc2ljX21hY2hpbmU9bTY4ay1ocAorCQk7OworCWhwOWs2WzAtOV1bMC05XSB8IGhwNlswLTldWzAtOV0pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMC1ocAorCQk7OworCWhwOWs3WzAtNzldWzAtOV0gfCBocDdbMC03OV1bMC05XSkKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCisJCTs7CisJaHA5azc4WzAtOV0gfCBocDc4WzAtOV0pCisJCSMgRklYTUU6IHJlYWxseSBocHBhMi4wLWhwCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQk7OworCWhwOWs4WzY3XTEgfCBocDhbNjddMSB8IGhwOWs4MFsyNF0gfCBocDgwWzI0XSB8IGhwOWs4Wzc4XTkgfCBocDhbNzhdOSB8IGhwOWs4OTMgfCBocDg5MykKKwkJIyBGSVhNRTogcmVhbGx5IGhwcGEyLjAtaHAKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCisJCTs7CisJaHA5azhbMC05XVsxMzY3OV0gfCBocDhbMC05XVsxMzY3OV0pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQk7OworCWhwOWs4WzAtOV1bMC05XSB8IGhwOFswLTldWzAtOV0pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMC1ocAorCQk7OworCWhwcGEtbmV4dCkKKwkJb3M9LW5leHRzdGVwMworCQk7OworCWhwcGFvc2YpCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQlvcz0tb3NmCisJCTs7CisJaHBwcm8pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQlvcz0tcHJvZWxmCisJCTs7CisJaTM3MC1pYm0qIHwgaWJtKikKKwkJYmFzaWNfbWFjaGluZT1pMzcwLWlibQorCQk7OworIyBJJ20gbm90IHN1cmUgd2hhdCAiU3lzdjMyIiBtZWFucy4gIFNob3VsZCB0aGlzIGJlIHN5c3YzLjI/CisJaSo4NnYzMikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni4qLzg2LXBjLydgCisJCW9zPS1zeXN2MzIKKwkJOzsKKwlpKjg2djQqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LiovODYtcGMvJ2AKKwkJb3M9LXN5c3Y0CisJCTs7CisJaSo4NnYpCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYuKi84Ni1wYy8nYAorCQlvcz0tc3lzdgorCQk7OworCWkqODZzb2wyKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LiovODYtcGMvJ2AKKwkJb3M9LXNvbGFyaXMyCisJCTs7CisJaTM4Nm1hY2gpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1tYWNoCisJCW9zPS1tYWNoCisJCTs7CisJaTM4Ni12c3RhIHwgdnN0YSkKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXVua25vd24KKwkJb3M9LXZzdGEKKwkJOzsKKwlpcmlzIHwgaXJpczRkKQorCQliYXNpY19tYWNoaW5lPW1pcHMtc2dpCisJCWNhc2UgJG9zIGluCisJCSAgICAtaXJpeCopCisJCQk7OworCQkgICAgKikKKwkJCW9zPS1pcml4NAorCQkJOzsKKwkJZXNhYworCQk7OworCWlzaTY4IHwgaXNpKQorCQliYXNpY19tYWNoaW5lPW02OGstaXNpCisJCW9zPS1zeXN2CisJCTs7CisJbTY4a25vbW11KQorCQliYXNpY19tYWNoaW5lPW02OGstdW5rbm93bgorCQlvcz0tbGludXgKKwkJOzsKKwltNjhrbm9tbXUtKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCW9zPS1saW51eAorCQk7OworCW04OGstb21yb24qKQorCQliYXNpY19tYWNoaW5lPW04OGstb21yb24KKwkJOzsKKwltYWdudW0gfCBtMzIzMCkKKwkJYmFzaWNfbWFjaGluZT1taXBzLW1pcHMKKwkJb3M9LXN5c3YKKwkJOzsKKwltZXJsaW4pCisJCWJhc2ljX21hY2hpbmU9bnMzMmstdXRlaworCQlvcz0tc3lzdgorCQk7OworICAgICAgICBtaWNyb2JsYXplKQorCQliYXNpY19tYWNoaW5lPW1pY3JvYmxhemUteGlsaW54CisJCTs7CisJbWluZ3czMikKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCW9zPS1taW5ndzMyCisJCTs7CisJbWluZ3czMmNlKQorCQliYXNpY19tYWNoaW5lPWFybS11bmtub3duCisJCW9zPS1taW5ndzMyY2UKKwkJOzsKKwltaW5pZnJhbWUpCisJCWJhc2ljX21hY2hpbmU9bTY4MDAwLWNvbnZlcmdlbnQKKwkJOzsKKwkqbWludCB8IC1taW50WzAtOV0qIHwgKk1pTlQgfCAqTWlOVFswLTldKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWF0YXJpCisJCW9zPS1taW50CisJCTs7CisJbWlwczMqLSopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgLWUgJ3MvbWlwczMvbWlwczY0LydgCisJCTs7CisJbWlwczMqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkIC1lICdzL21pcHMzL21pcHM2NC8nYC11bmtub3duCisJCTs7CisJbW9uaXRvcikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXJvbTY4aworCQlvcz0tY29mZgorCQk7OworCW1vcnBob3MpCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwYy11bmtub3duCisJCW9zPS1tb3JwaG9zCisJCTs7CisJbXNkb3MpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYworCQlvcz0tbXNkb3MKKwkJOzsKKwltczEtKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAtZSAncy9tczEtL210LS8nYAorCQk7OworCW12cykKKwkJYmFzaWNfbWFjaGluZT1pMzcwLWlibQorCQlvcz0tbXZzCisJCTs7CisJbmNyMzAwMCkKKwkJYmFzaWNfbWFjaGluZT1pNDg2LW5jcgorCQlvcz0tc3lzdjQKKwkJOzsKKwluZXRic2QzODYpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni11bmtub3duCisJCW9zPS1uZXRic2QKKwkJOzsKKwluZXR3aW5kZXIpCisJCWJhc2ljX21hY2hpbmU9YXJtdjRsLXJlYmVsCisJCW9zPS1saW51eAorCQk7OworCW5ld3MgfCBuZXdzNzAwIHwgbmV3czgwMCB8IG5ld3M5MDApCisJCWJhc2ljX21hY2hpbmU9bTY4ay1zb255CisJCW9zPS1uZXdzb3MKKwkJOzsKKwluZXdzMTAwMCkKKwkJYmFzaWNfbWFjaGluZT1tNjgwMzAtc29ueQorCQlvcz0tbmV3c29zCisJCTs7CisJbmV3cy0zNjAwIHwgcmlzYy1uZXdzKQorCQliYXNpY19tYWNoaW5lPW1pcHMtc29ueQorCQlvcz0tbmV3c29zCisJCTs7CisJbmVjdjcwKQorCQliYXNpY19tYWNoaW5lPXY3MC1uZWMKKwkJb3M9LXN5c3YKKwkJOzsKKwluZXh0IHwgbSotbmV4dCApCisJCWJhc2ljX21hY2hpbmU9bTY4ay1uZXh0CisJCWNhc2UgJG9zIGluCisJCSAgICAtbmV4dHN0ZXAqICkKKwkJCTs7CisJCSAgICAtbnMyKikKKwkJICAgICAgb3M9LW5leHRzdGVwMgorCQkJOzsKKwkJICAgICopCisJCSAgICAgIG9zPS1uZXh0c3RlcDMKKwkJCTs7CisJCWVzYWMKKwkJOzsKKwluaDMwMDApCisJCWJhc2ljX21hY2hpbmU9bTY4ay1oYXJyaXMKKwkJb3M9LWN4dXgKKwkJOzsKKwluaFs0NV0wMDApCisJCWJhc2ljX21hY2hpbmU9bTg4ay1oYXJyaXMKKwkJb3M9LWN4dXgKKwkJOzsKKwluaW5keTk2MCkKKwkJYmFzaWNfbWFjaGluZT1pOTYwLWludGVsCisJCW9zPS1uaW5keQorCQk7OworCW1vbjk2MCkKKwkJYmFzaWNfbWFjaGluZT1pOTYwLWludGVsCisJCW9zPS1tb245NjAKKwkJOzsKKwlub25zdG9wdXgpCisJCWJhc2ljX21hY2hpbmU9bWlwcy1jb21wYXEKKwkJb3M9LW5vbnN0b3B1eAorCQk7OworCW5wMSkKKwkJYmFzaWNfbWFjaGluZT1ucDEtZ291bGQKKwkJOzsKKwluc3ItdGFuZGVtKQorCQliYXNpY19tYWNoaW5lPW5zci10YW5kZW0KKwkJOzsKKwlvcDUwbi0qIHwgb3A2MGMtKikKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLW9raQorCQlvcz0tcHJvZWxmCisJCTs7CisJb3BlbnJpc2MgfCBvcGVucmlzYy0qKQorCQliYXNpY19tYWNoaW5lPW9yMzItdW5rbm93bgorCQk7OworCW9zNDAwKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGMtaWJtCisJCW9zPS1vczQwMAorCQk7OworCU9TRTY4MDAwIHwgb3NlNjgwMDApCisJCWJhc2ljX21hY2hpbmU9bTY4MDAwLWVyaWNzc29uCisJCW9zPS1vc2UKKwkJOzsKKwlvczY4aykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLW5vbmUKKwkJb3M9LW9zNjhrCisJCTs7CisJcGEtaGl0YWNoaSkKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhpdGFjaGkKKwkJb3M9LWhpdXh3ZTIKKwkJOzsKKwlwYXJhZ29uKQorCQliYXNpY19tYWNoaW5lPWk4NjAtaW50ZWwKKwkJb3M9LW9zZgorCQk7OworCXBhcmlzYykKKwkJYmFzaWNfbWFjaGluZT1ocHBhLXVua25vd24KKwkJb3M9LWxpbnV4CisJCTs7CisJcGFyaXNjLSopCisJCWJhc2ljX21hY2hpbmU9aHBwYS1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQlvcz0tbGludXgKKwkJOzsKKwlwYmQpCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtdHRpCisJCTs7CisJcGJiKQorCQliYXNpY19tYWNoaW5lPW02OGstdHRpCisJCTs7CisJcGM1MzIgfCBwYzUzMi0qKQorCQliYXNpY19tYWNoaW5lPW5zMzJrLXBjNTMyCisJCTs7CisJcGM5OCkKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCTs7CisJcGM5OC0qKQorCQliYXNpY19tYWNoaW5lPWkzODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwZW50aXVtIHwgcDUgfCBrNSB8IGs2IHwgbmV4Z2VuIHwgdmlhYzMpCisJCWJhc2ljX21hY2hpbmU9aTU4Ni1wYworCQk7OworCXBlbnRpdW1wcm8gfCBwNiB8IDZ4ODYgfCBhdGhsb24gfCBhdGhsb25fKikKKwkJYmFzaWNfbWFjaGluZT1pNjg2LXBjCisJCTs7CisJcGVudGl1bWlpIHwgcGVudGl1bTIgfCBwZW50aXVtaWlpIHwgcGVudGl1bTMpCisJCWJhc2ljX21hY2hpbmU9aTY4Ni1wYworCQk7OworCXBlbnRpdW00KQorCQliYXNpY19tYWNoaW5lPWk3ODYtcGMKKwkJOzsKKwlwZW50aXVtLSogfCBwNS0qIHwgazUtKiB8IGs2LSogfCBuZXhnZW4tKiB8IHZpYWMzLSopCisJCWJhc2ljX21hY2hpbmU9aTU4Ni1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBlbnRpdW1wcm8tKiB8IHA2LSogfCA2eDg2LSogfCBhdGhsb24tKikKKwkJYmFzaWNfbWFjaGluZT1pNjg2LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcGVudGl1bWlpLSogfCBwZW50aXVtMi0qIHwgcGVudGl1bWlpaS0qIHwgcGVudGl1bTMtKikKKwkJYmFzaWNfbWFjaGluZT1pNjg2LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcGVudGl1bTQtKikKKwkJYmFzaWNfbWFjaGluZT1pNzg2LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcG4pCisJCWJhc2ljX21hY2hpbmU9cG4tZ291bGQKKwkJOzsKKwlwb3dlcikJYmFzaWNfbWFjaGluZT1wb3dlci1pYm0KKwkJOzsKKwlwcGMpCWJhc2ljX21hY2hpbmU9cG93ZXJwYy11bmtub3duCisJCTs7CisJcHBjLSopCWJhc2ljX21hY2hpbmU9cG93ZXJwYy1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBwY2xlIHwgcG93ZXJwY2xpdHRsZSB8IHBwYy1sZSB8IHBvd2VycGMtbGl0dGxlKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGNsZS11bmtub3duCisJCTs7CisJcHBjbGUtKiB8IHBvd2VycGNsaXR0bGUtKikKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjbGUtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwcGM2NCkJYmFzaWNfbWFjaGluZT1wb3dlcnBjNjQtdW5rbm93bgorCQk7OworCXBwYzY0LSopIGJhc2ljX21hY2hpbmU9cG93ZXJwYzY0LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcHBjNjRsZSB8IHBvd2VycGM2NGxpdHRsZSB8IHBwYzY0LWxlIHwgcG93ZXJwYzY0LWxpdHRsZSkKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjNjRsZS11bmtub3duCisJCTs7CisJcHBjNjRsZS0qIHwgcG93ZXJwYzY0bGl0dGxlLSopCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwYzY0bGUtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwczIpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1pYm0KKwkJOzsKKwlwdzMyKQorCQliYXNpY19tYWNoaW5lPWk1ODYtdW5rbm93bgorCQlvcz0tcHczMgorCQk7OworCXJkb3MpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYworCQlvcz0tcmRvcworCQk7OworCXJvbTY4aykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXJvbTY4aworCQlvcz0tY29mZgorCQk7OworCXJtWzQ2XTAwKQorCQliYXNpY19tYWNoaW5lPW1pcHMtc2llbWVucworCQk7OworCXJ0cGMgfCBydHBjLSopCisJCWJhc2ljX21hY2hpbmU9cm9tcC1pYm0KKwkJOzsKKwlzMzkwIHwgczM5MC0qKQorCQliYXNpY19tYWNoaW5lPXMzOTAtaWJtCisJCTs7CisJczM5MHggfCBzMzkweC0qKQorCQliYXNpY19tYWNoaW5lPXMzOTB4LWlibQorCQk7OworCXNhMjkyMDApCisJCWJhc2ljX21hY2hpbmU9YTI5ay1hbWQKKwkJb3M9LXVkaQorCQk7OworCXNiMSkKKwkJYmFzaWNfbWFjaGluZT1taXBzaXNhNjRzYjEtdW5rbm93bgorCQk7OworCXNiMWVsKQorCQliYXNpY19tYWNoaW5lPW1pcHNpc2E2NHNiMWVsLXVua25vd24KKwkJOzsKKwlzZGUpCisJCWJhc2ljX21hY2hpbmU9bWlwc2lzYTMyLXNkZQorCQlvcz0tZWxmCisJCTs7CisJc2VpKQorCQliYXNpY19tYWNoaW5lPW1pcHMtc2VpCisJCW9zPS1zZWl1eAorCQk7OworCXNlcXVlbnQpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1zZXF1ZW50CisJCTs7CisJc2gpCisJCWJhc2ljX21hY2hpbmU9c2gtaGl0YWNoaQorCQlvcz0taG1zCisJCTs7CisJc2g1ZWwpCisJCWJhc2ljX21hY2hpbmU9c2g1bGUtdW5rbm93bgorCQk7OworCXNoNjQpCisJCWJhc2ljX21hY2hpbmU9c2g2NC11bmtub3duCisJCTs7CisJc3BhcmNsaXRlLXdycyB8IHNpbXNvLXdycykKKwkJYmFzaWNfbWFjaGluZT1zcGFyY2xpdGUtd3JzCisJCW9zPS12eHdvcmtzCisJCTs7CisJc3BzNykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWJ1bGwKKwkJb3M9LXN5c3YyCisJCTs7CisJc3B1cikKKwkJYmFzaWNfbWFjaGluZT1zcHVyLXVua25vd24KKwkJOzsKKwlzdDIwMDApCisJCWJhc2ljX21hY2hpbmU9bTY4ay10YW5kZW0KKwkJOzsKKwlzdHJhdHVzKQorCQliYXNpY19tYWNoaW5lPWk4NjAtc3RyYXR1cworCQlvcz0tc3lzdjQKKwkJOzsKKwlzdW4yKQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1zdW4KKwkJOzsKKwlzdW4yb3MzKQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1zdW4KKwkJb3M9LXN1bm9zMworCQk7OworCXN1bjJvczQpCisJCWJhc2ljX21hY2hpbmU9bTY4MDAwLXN1bgorCQlvcz0tc3Vub3M0CisJCTs7CisJc3VuM29zMykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXN1bgorCQlvcz0tc3Vub3MzCisJCTs7CisJc3VuM29zNCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXN1bgorCQlvcz0tc3Vub3M0CisJCTs7CisJc3VuNG9zMykKKwkJYmFzaWNfbWFjaGluZT1zcGFyYy1zdW4KKwkJb3M9LXN1bm9zMworCQk7OworCXN1bjRvczQpCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCisJCW9zPS1zdW5vczQKKwkJOzsKKwlzdW40c29sMikKKwkJYmFzaWNfbWFjaGluZT1zcGFyYy1zdW4KKwkJb3M9LXNvbGFyaXMyCisJCTs7CisJc3VuMyB8IHN1bjMtKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXN1bgorCQk7OworCXN1bjQpCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCisJCTs7CisJc3VuMzg2IHwgc3VuMzg2aSB8IHJvYWRydW5uZXIpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1zdW4KKwkJOzsKKwlzdjEpCisJCWJhc2ljX21hY2hpbmU9c3YxLWNyYXkKKwkJb3M9LXVuaWNvcworCQk7OworCXN5bW1ldHJ5KQorCQliYXNpY19tYWNoaW5lPWkzODYtc2VxdWVudAorCQlvcz0tZHluaXgKKwkJOzsKKwl0M2UpCisJCWJhc2ljX21hY2hpbmU9YWxwaGFldjUtY3JheQorCQlvcz0tdW5pY29zCisJCTs7CisJdDkwKQorCQliYXNpY19tYWNoaW5lPXQ5MC1jcmF5CisJCW9zPS11bmljb3MKKwkJOzsKKwl0aWM1NHggfCBjNTR4KikKKwkJYmFzaWNfbWFjaGluZT10aWM1NHgtdW5rbm93bgorCQlvcz0tY29mZgorCQk7OworCXRpYzU1eCB8IGM1NXgqKQorCQliYXNpY19tYWNoaW5lPXRpYzU1eC11bmtub3duCisJCW9zPS1jb2ZmCisJCTs7CisJdGljNnggfCBjNngqKQorCQliYXNpY19tYWNoaW5lPXRpYzZ4LXVua25vd24KKwkJb3M9LWNvZmYKKwkJOzsKKwl0aWxlKikKKwkJYmFzaWNfbWFjaGluZT10aWxlLXVua25vd24KKwkJb3M9LWxpbnV4LWdudQorCQk7OworCXR4MzkpCisJCWJhc2ljX21hY2hpbmU9bWlwc3R4MzktdW5rbm93bgorCQk7OworCXR4MzllbCkKKwkJYmFzaWNfbWFjaGluZT1taXBzdHgzOWVsLXVua25vd24KKwkJOzsKKwl0b2FkMSkKKwkJYmFzaWNfbWFjaGluZT1wZHAxMC14a2wKKwkJb3M9LXRvcHMyMAorCQk7OworCXRvd2VyIHwgdG93ZXItMzIpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1uY3IKKwkJOzsKKwl0cGYpCisJCWJhc2ljX21hY2hpbmU9czM5MHgtaWJtCisJCW9zPS10cGYKKwkJOzsKKwl1ZGkyOWspCisJCWJhc2ljX21hY2hpbmU9YTI5ay1hbWQKKwkJb3M9LXVkaQorCQk7OworCXVsdHJhMykKKwkJYmFzaWNfbWFjaGluZT1hMjlrLW55dQorCQlvcz0tc3ltMQorCQk7OworCXY4MTAgfCBuZWN2ODEwKQorCQliYXNpY19tYWNoaW5lPXY4MTAtbmVjCisJCW9zPS1ub25lCisJCTs7CisJdmF4dikKKwkJYmFzaWNfbWFjaGluZT12YXgtZGVjCisJCW9zPS1zeXN2CisJCTs7CisJdm1zKQorCQliYXNpY19tYWNoaW5lPXZheC1kZWMKKwkJb3M9LXZtcworCQk7OworCXZwcCp8dnh8dngtKikKKwkJYmFzaWNfbWFjaGluZT1mMzAxLWZ1aml0c3UKKwkJOzsKKwl2eHdvcmtzOTYwKQorCQliYXNpY19tYWNoaW5lPWk5NjAtd3JzCisJCW9zPS12eHdvcmtzCisJCTs7CisJdnh3b3JrczY4KQorCQliYXNpY19tYWNoaW5lPW02OGstd3JzCisJCW9zPS12eHdvcmtzCisJCTs7CisJdnh3b3JrczI5aykKKwkJYmFzaWNfbWFjaGluZT1hMjlrLXdycworCQlvcz0tdnh3b3JrcworCQk7OworCXc2NSopCisJCWJhc2ljX21hY2hpbmU9dzY1LXdkYworCQlvcz0tbm9uZQorCQk7OworCXc4OWstKikKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLXdpbmJvbmQKKwkJb3M9LXByb2VsZgorCQk7OworCXhib3gpCisJCWJhc2ljX21hY2hpbmU9aTY4Ni1wYworCQlvcz0tbWluZ3czMgorCQk7OworCXhwcyB8IHhwczEwMCkKKwkJYmFzaWNfbWFjaGluZT14cHMxMDAtaG9uZXl3ZWxsCisJCTs7CisJeW1wKQorCQliYXNpY19tYWNoaW5lPXltcC1jcmF5CisJCW9zPS11bmljb3MKKwkJOzsKKwl6OGstKi1jb2ZmKQorCQliYXNpY19tYWNoaW5lPXo4ay11bmtub3duCisJCW9zPS1zaW0KKwkJOzsKKwl6ODAtKi1jb2ZmKQorCQliYXNpY19tYWNoaW5lPXo4MC11bmtub3duCisJCW9zPS1zaW0KKwkJOzsKKwlub25lKQorCQliYXNpY19tYWNoaW5lPW5vbmUtbm9uZQorCQlvcz0tbm9uZQorCQk7OworCisjIEhlcmUgd2UgaGFuZGxlIHRoZSBkZWZhdWx0IG1hbnVmYWN0dXJlciBvZiBjZXJ0YWluIENQVSB0eXBlcy4gIEl0IGlzIGluCisjIHNvbWUgY2FzZXMgdGhlIG9ubHkgbWFudWZhY3R1cmVyLCBpbiBvdGhlcnMsIGl0IGlzIHRoZSBtb3N0IHBvcHVsYXIuCisJdzg5aykKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLXdpbmJvbmQKKwkJOzsKKwlvcDUwbikKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLW9raQorCQk7OworCW9wNjBjKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtb2tpCisJCTs7CisJcm9tcCkKKwkJYmFzaWNfbWFjaGluZT1yb21wLWlibQorCQk7OworCW1taXgpCisJCWJhc2ljX21hY2hpbmU9bW1peC1rbnV0aAorCQk7OworCXJzNjAwMCkKKwkJYmFzaWNfbWFjaGluZT1yczYwMDAtaWJtCisJCTs7CisJdmF4KQorCQliYXNpY19tYWNoaW5lPXZheC1kZWMKKwkJOzsKKwlwZHAxMCkKKwkJIyB0aGVyZSBhcmUgbWFueSBjbG9uZXMsIHNvIERFQyBpcyBub3QgYSBzYWZlIGJldAorCQliYXNpY19tYWNoaW5lPXBkcDEwLXVua25vd24KKwkJOzsKKwlwZHAxMSkKKwkJYmFzaWNfbWFjaGluZT1wZHAxMS1kZWMKKwkJOzsKKwl3ZTMyaykKKwkJYmFzaWNfbWFjaGluZT13ZTMyay1hdHQKKwkJOzsKKwlzaFsxMjM0XSB8IHNoWzI0XWEgfCBzaFsyNF1hZWIgfCBzaFszNF1lYiB8IHNoWzEyMzRdbGUgfCBzaFsyM11lbGUpCisJCWJhc2ljX21hY2hpbmU9c2gtdW5rbm93bgorCQk7OworCXNwYXJjIHwgc3BhcmN2OCB8IHNwYXJjdjkgfCBzcGFyY3Y5YiB8IHNwYXJjdjl2KQorCQliYXNpY19tYWNoaW5lPXNwYXJjLXN1bgorCQk7OworCWN5ZHJhKQorCQliYXNpY19tYWNoaW5lPWN5ZHJhLWN5ZHJvbWUKKwkJOzsKKwlvcmlvbikKKwkJYmFzaWNfbWFjaGluZT1vcmlvbi1oaWdobGV2ZWwKKwkJOzsKKwlvcmlvbjEwNSkKKwkJYmFzaWNfbWFjaGluZT1jbGlwcGVyLWhpZ2hsZXZlbAorCQk7OworCW1hYyB8IG1wdyB8IG1hYy1tcHcpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hcHBsZQorCQk7OworCXBtYWMgfCBwbWFjLW1wdykKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjLWFwcGxlCisJCTs7CisJKi11bmtub3duKQorCQkjIE1ha2Ugc3VyZSB0byBtYXRjaCBhbiBhbHJlYWR5LWNhbm9uaWNhbGl6ZWQgbWFjaGluZSBuYW1lLgorCQk7OworCSopCisJCWVjaG8gSW52YWxpZCBjb25maWd1cmF0aW9uIFxgJDFcJzogbWFjaGluZSBcYCRiYXNpY19tYWNoaW5lXCcgbm90IHJlY29nbml6ZWQgMT4mMgorCQlleGl0IDEKKwkJOzsKK2VzYWMKKworIyBIZXJlIHdlIGNhbm9uaWNhbGl6ZSBjZXJ0YWluIGFsaWFzZXMgZm9yIG1hbnVmYWN0dXJlcnMuCitjYXNlICRiYXNpY19tYWNoaW5lIGluCisJKi1kaWdpdGFsKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9kaWdpdGFsLiovZGVjLydgCisJCTs7CisJKi1jb21tb2RvcmUqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL2NvbW1vZG9yZS4qL2NibS8nYAorCQk7OworCSopCisJCTs7Citlc2FjCisKKyMgRGVjb2RlIG1hbnVmYWN0dXJlci1zcGVjaWZpYyBhbGlhc2VzIGZvciBjZXJ0YWluIG9wZXJhdGluZyBzeXN0ZW1zLgorCitpZiBbIHgiJG9zIiAhPSB4IiIgXQordGhlbgorY2FzZSAkb3MgaW4KKyAgICAgICAgIyBGaXJzdCBtYXRjaCBzb21lIHN5c3RlbSB0eXBlIGFsaWFzZXMKKyAgICAgICAgIyB0aGF0IG1pZ2h0IGdldCBjb25mdXNlZCB3aXRoIHZhbGlkIHN5c3RlbSB0eXBlcy4KKwkjIC1zb2xhcmlzKiBpcyBhIGJhc2ljIHN5c3RlbSB0eXBlLCB3aXRoIHRoaXMgb25lIGV4Y2VwdGlvbi4KKyAgICAgICAgLWF1cm9yYXV4KQorCSAgICAgICAgb3M9LWF1cm9yYXV4CisJCTs7CisJLXNvbGFyaXMxIHwgLXNvbGFyaXMxLiopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xzb2xhcmlzMXxzdW5vczR8J2AKKwkJOzsKKwktc29sYXJpcykKKwkJb3M9LXNvbGFyaXMyCisJCTs7CisJLXN2cjQqKQorCQlvcz0tc3lzdjQKKwkJOzsKKwktdW5peHdhcmUqKQorCQlvcz0tc3lzdjQuMnV3CisJCTs7CisJLWdudS9saW51eCopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xnbnUvbGludXh8bGludXgtZ251fCdgCisJCTs7CisJIyBGaXJzdCBhY2NlcHQgdGhlIGJhc2ljIHN5c3RlbSB0eXBlcy4KKwkjIFRoZSBwb3J0YWJsZSBzeXN0ZW1zIGNvbWVzIGZpcnN0LgorCSMgRWFjaCBhbHRlcm5hdGl2ZSBNVVNUIEVORCBJTiBBICosIHRvIG1hdGNoIGEgdmVyc2lvbiBudW1iZXIuCisJIyAtc3lzdiogaXMgbm90IGhlcmUgYmVjYXVzZSBpdCBjb21lcyBsYXRlciwgYWZ0ZXIgc3lzdnI0LgorCS1nbnUqIHwgLWJzZCogfCAtbWFjaCogfCAtbWluaXgqIHwgLWdlbml4KiB8IC11bHRyaXgqIHwgLWlyaXgqIFwKKwkgICAgICB8IC0qdm1zKiB8IC1zY28qIHwgLWVzaXgqIHwgLWlzYyogfCAtYWl4KiB8IC1jbmsqIHwgLXN1bm9zIHwgLXN1bm9zWzM0XSpcCisJICAgICAgfCAtaHB1eCogfCAtdW5vcyogfCAtb3NmKiB8IC1sdW5hKiB8IC1kZ3V4KiB8IC1hdXJvcmF1eCogfCAtc29sYXJpcyogXAorCSAgICAgIHwgLXN5bSogfCAta29wZW5zb2xhcmlzKiBcCisJICAgICAgfCAtYW1pZ2FvcyogfCAtYW1pZ2Fkb3MqIHwgLW1zZG9zKiB8IC1uZXdzb3MqIHwgLXVuaWNvcyogfCAtYW9mKiBcCisJICAgICAgfCAtYW9zKiB8IC1hcm9zKiBcCisJICAgICAgfCAtbmluZHkqIHwgLXZ4c2ltKiB8IC12eHdvcmtzKiB8IC1lYm1vbiogfCAtaG1zKiB8IC1tdnMqIFwKKwkgICAgICB8IC1jbGl4KiB8IC1yaXNjb3MqIHwgLXVuaXBsdXMqIHwgLWlyaXMqIHwgLXJ0dSogfCAteGVuaXgqIFwKKwkgICAgICB8IC1oaXV4KiB8IC0zODZic2QqIHwgLWtuZXRic2QqIHwgLW1pcmJzZCogfCAtbmV0YnNkKiBcCisJICAgICAgfCAtb3BlbmJzZCogfCAtc29saWRic2QqIFwKKwkgICAgICB8IC1la2tvYnNkKiB8IC1rZnJlZWJzZCogfCAtZnJlZWJzZCogfCAtcmlzY2l4KiB8IC1seW54b3MqIFwKKwkgICAgICB8IC1ib3N4KiB8IC1uZXh0c3RlcCogfCAtY3h1eCogfCAtYW91dCogfCAtZWxmKiB8IC1vYWJpKiBcCisJICAgICAgfCAtcHR4KiB8IC1jb2ZmKiB8IC1lY29mZiogfCAtd2lubnQqIHwgLWRvbWFpbiogfCAtdnN0YSogXAorCSAgICAgIHwgLXVkaSogfCAtZWFiaSogfCAtbGl0ZXMqIHwgLWllZWUqIHwgLWdvMzIqIHwgLWF1eCogXAorCSAgICAgIHwgLWNob3J1c29zKiB8IC1jaG9ydXNyZGIqIHwgLWNlZ2NjKiBcCisJICAgICAgfCAtY3lnd2luKiB8IC1wZSogfCAtcHNvcyogfCAtbW9zcyogfCAtcHJvZWxmKiB8IC1ydGVtcyogXAorCSAgICAgIHwgLW1pbmd3MzIqIHwgLWxpbnV4LWdudSogfCAtbGludXgtbmV3bGliKiB8IC1saW51eC11Y2xpYmMqIFwKKwkgICAgICB8IC11eHB2KiB8IC1iZW9zKiB8IC1tcGVpeCogfCAtdWRrKiBcCisJICAgICAgfCAtaW50ZXJpeCogfCAtdXdpbiogfCAtbWtzKiB8IC1yaGFwc29keSogfCAtZGFyd2luKiB8IC1vcGVuZWQqIFwKKwkgICAgICB8IC1vcGVuc3RlcCogfCAtb3NraXQqIHwgLWNvbml4KiB8IC1wdzMyKiB8IC1ub25zdG9wdXgqIFwKKwkgICAgICB8IC1zdG9ybS1jaGFvcyogfCAtdG9wczEwKiB8IC10ZW5leCogfCAtdG9wczIwKiB8IC1pdHMqIFwKKwkgICAgICB8IC1vczIqIHwgLXZvcyogfCAtcGFsbW9zKiB8IC11Y2xpbnV4KiB8IC1udWNsZXVzKiBcCisJICAgICAgfCAtbW9ycGhvcyogfCAtc3VwZXJ1eCogfCAtcnRtayogfCAtcnRtay1ub3ZhKiB8IC13aW5kaXNzKiBcCisJICAgICAgfCAtcG93ZXJtYXgqIHwgLWRuaXgqIHwgLW54NiB8IC1ueDcgfCAtc2VpKiB8IC1kcmFnb25mbHkqIFwKKwkgICAgICB8IC1za3lvcyogfCAtaGFpa3UqIHwgLXJkb3MqIHwgLXRvcHBlcnMqIHwgLWRyb3BzKiB8IC1lcyopCisJIyBSZW1lbWJlciwgZWFjaCBhbHRlcm5hdGl2ZSBNVVNUIEVORCBJTiAqLCB0byBtYXRjaCBhIHZlcnNpb24gbnVtYmVyLgorCQk7OworCS1xbngqKQorCQljYXNlICRiYXNpY19tYWNoaW5lIGluCisJCSAgICB4ODYtKiB8IGkqODYtKikKKwkJCTs7CisJCSAgICAqKQorCQkJb3M9LW50byRvcworCQkJOzsKKwkJZXNhYworCQk7OworCS1udG8tcW54KikKKwkJOzsKKwktbnRvKikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfG50b3xudG8tcW54fCdgCisJCTs7CisJLXNpbSB8IC1lczE4MDAqIHwgLWhtcyogfCAteHJheSB8IC1vczY4ayogfCAtbm9uZSogfCAtdjg4ciogXAorCSAgICAgIHwgLXdpbmRvd3MqIHwgLW9zeCB8IC1hYnVnIHwgLW5ldHdhcmUqIHwgLW9zOSogfCAtYmVvcyogfCAtaGFpa3UqIFwKKwkgICAgICB8IC1tYWNvcyogfCAtbXB3KiB8IC1tYWdpYyogfCAtbW1peHdhcmUqIHwgLW1vbjk2MCogfCAtbG5ld3MqKQorCQk7OworCS1tYWMqKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8bWFjfG1hY29zfCdgCisJCTs7CisJLWxpbnV4LWRpZXRsaWJjKQorCQlvcz0tbGludXgtZGlldGxpYmMKKwkJOzsKKwktbGludXgqKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8bGludXh8bGludXgtZ251fCdgCisJCTs7CisJLXN1bm9zNSopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xzdW5vczV8c29sYXJpczJ8J2AKKwkJOzsKKwktc3Vub3M2KikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfHN1bm9zNnxzb2xhcmlzM3wnYAorCQk7OworCS1vcGVuZWQqKQorCQlvcz0tb3BlbmVkaXRpb24KKwkJOzsKKyAgICAgICAgLW9zNDAwKikKKwkJb3M9LW9zNDAwCisJCTs7CisJLXdpbmNlKikKKwkJb3M9LXdpbmNlCisJCTs7CisJLW9zZnJvc2UqKQorCQlvcz0tb3Nmcm9zZQorCQk7OworCS1vc2YqKQorCQlvcz0tb3NmCisJCTs7CisJLXV0ZWsqKQorCQlvcz0tYnNkCisJCTs7CisJLWR5bml4KikKKwkJb3M9LWJzZAorCQk7OworCS1hY2lzKikKKwkJb3M9LWFvcworCQk7OworCS1hdGhlb3MqKQorCQlvcz0tYXRoZW9zCisJCTs7CisJLXN5bGxhYmxlKikKKwkJb3M9LXN5bGxhYmxlCisJCTs7CisJLTM4NmJzZCkKKwkJb3M9LWJzZAorCQk7OworCS1jdGl4KiB8IC11dHMqKQorCQlvcz0tc3lzdgorCQk7OworCS1ub3ZhKikKKwkJb3M9LXJ0bWstbm92YQorCQk7OworCS1uczIgKQorCQlvcz0tbmV4dHN0ZXAyCisJCTs7CisJLW5zayopCisJCW9zPS1uc2sKKwkJOzsKKwkjIFByZXNlcnZlIHRoZSB2ZXJzaW9uIG51bWJlciBvZiBzaW5peDUuCisJLXNpbml4NS4qKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8c2luaXh8c3lzdnwnYAorCQk7OworCS1zaW5peCopCisJCW9zPS1zeXN2NAorCQk7OworICAgICAgICAtdHBmKikKKwkJb3M9LXRwZgorCQk7OworCS10cml0b24qKQorCQlvcz0tc3lzdjMKKwkJOzsKKwktb3NzKikKKwkJb3M9LXN5c3YzCisJCTs7CisJLXN2cjQpCisJCW9zPS1zeXN2NAorCQk7OworCS1zdnIzKQorCQlvcz0tc3lzdjMKKwkJOzsKKwktc3lzdnI0KQorCQlvcz0tc3lzdjQKKwkJOzsKKwkjIFRoaXMgbXVzdCBjb21lIGFmdGVyIC1zeXN2cjQuCisJLXN5c3YqKQorCQk7OworCS1vc2UqKQorCQlvcz0tb3NlCisJCTs7CisJLWVzMTgwMCopCisJCW9zPS1vc2UKKwkJOzsKKwkteGVuaXgpCisJCW9zPS14ZW5peAorCQk7OworCS0qbWludCB8IC1taW50WzAtOV0qIHwgLSpNaU5UIHwgLU1pTlRbMC05XSopCisJCW9zPS1taW50CisJCTs7CisJLWFyb3MqKQorCQlvcz0tYXJvcworCQk7OworCS1rYW9zKikKKwkJb3M9LWthb3MKKwkJOzsKKwktenZtb2UpCisJCW9zPS16dm1vZQorCQk7OworCS1kaWNvcyopCisJCW9zPS1kaWNvcworCQk7OworCS1ub25lKQorCQk7OworCSopCisJCSMgR2V0IHJpZCBvZiB0aGUgYC0nIGF0IHRoZSBiZWdpbm5pbmcgb2YgJG9zLgorCQlvcz1gZWNobyAkb3MgfCBzZWQgJ3MvW14tXSotLy8nYAorCQllY2hvIEludmFsaWQgY29uZmlndXJhdGlvbiBcYCQxXCc6IHN5c3RlbSBcYCRvc1wnIG5vdCByZWNvZ25pemVkIDE+JjIKKwkJZXhpdCAxCisJCTs7Citlc2FjCitlbHNlCisKKyMgSGVyZSB3ZSBoYW5kbGUgdGhlIGRlZmF1bHQgb3BlcmF0aW5nIHN5c3RlbXMgdGhhdCBjb21lIHdpdGggdmFyaW91cyBtYWNoaW5lcy4KKyMgVGhlIHZhbHVlIHNob3VsZCBiZSB3aGF0IHRoZSB2ZW5kb3IgY3VycmVudGx5IHNoaXBzIG91dCB0aGUgZG9vciB3aXRoIHRoZWlyCisjIG1hY2hpbmUgb3IgcHV0IGFub3RoZXIgd2F5LCB0aGUgbW9zdCBwb3B1bGFyIG9zIHByb3ZpZGVkIHdpdGggdGhlIG1hY2hpbmUuCisKKyMgTm90ZSB0aGF0IGlmIHlvdSdyZSBnb2luZyB0byB0cnkgdG8gbWF0Y2ggIi1NQU5VRkFDVFVSRVIiIGhlcmUgKHNheSwKKyMgIi1zdW4iKSwgdGhlbiB5b3UgaGF2ZSB0byB0ZWxsIHRoZSBjYXNlIHN0YXRlbWVudCB1cCB0b3dhcmRzIHRoZSB0b3AKKyMgdGhhdCBNQU5VRkFDVFVSRVIgaXNuJ3QgYW4gb3BlcmF0aW5nIHN5c3RlbS4gIE90aGVyd2lzZSwgY29kZSBhYm92ZQorIyB3aWxsIHNpZ25hbCBhbiBlcnJvciBzYXlpbmcgdGhhdCBNQU5VRkFDVFVSRVIgaXNuJ3QgYW4gb3BlcmF0aW5nCisjIHN5c3RlbSwgYW5kIHdlJ2xsIG5ldmVyIGdldCB0byB0aGlzIHBvaW50LgorCitjYXNlICRiYXNpY19tYWNoaW5lIGluCisgICAgICAgIHNjb3JlLSopCisJCW9zPS1lbGYKKwkJOzsKKyAgICAgICAgc3B1LSopCisJCW9zPS1lbGYKKwkJOzsKKwkqLWFjb3JuKQorCQlvcz0tcmlzY2l4MS4yCisJCTs7CisJYXJtKi1yZWJlbCkKKwkJb3M9LWxpbnV4CisJCTs7CisJYXJtKi1zZW1pKQorCQlvcz0tYW91dAorCQk7OworICAgICAgICBjNHgtKiB8IHRpYzR4LSopCisgICAgICAgIAlvcz0tY29mZgorCQk7OworCSMgVGhpcyBtdXN0IGNvbWUgYmVmb3JlIHRoZSAqLWRlYyBlbnRyeS4KKwlwZHAxMC0qKQorCQlvcz0tdG9wczIwCisJCTs7CisJcGRwMTEtKikKKwkJb3M9LW5vbmUKKwkJOzsKKwkqLWRlYyB8IHZheC0qKQorCQlvcz0tdWx0cml4NC4yCisJCTs7CisJbTY4Ki1hcG9sbG8pCisJCW9zPS1kb21haW4KKwkJOzsKKwlpMzg2LXN1bikKKwkJb3M9LXN1bm9zNC4wLjIKKwkJOzsKKwltNjgwMDAtc3VuKQorCQlvcz0tc3Vub3MzCisJCSMgVGhpcyBhbHNvIGV4aXN0cyBpbiB0aGUgY29uZmlndXJlIHByb2dyYW0sIGJ1dCB3YXMgbm90IHRoZQorCQkjIGRlZmF1bHQuCisJCSMgb3M9LXN1bm9zNAorCQk7OworCW02OCotY2lzY28pCisJCW9zPS1hb3V0CisJCTs7CisgICAgICAgIG1lcC0qKQorCQlvcz0tZWxmCisJCTs7CisJbWlwcyotY2lzY28pCisJCW9zPS1lbGYKKwkJOzsKKwltaXBzKi0qKQorCQlvcz0tZWxmCisJCTs7CisJb3IzMi0qKQorCQlvcz0tY29mZgorCQk7OworCSotdHRpKQkjIG11c3QgYmUgYmVmb3JlIHNwYXJjIGVudHJ5IG9yIHdlIGdldCB0aGUgd3Jvbmcgb3MuCisJCW9zPS1zeXN2MworCQk7OworCXNwYXJjLSogfCAqLXN1bikKKwkJb3M9LXN1bm9zNC4xLjEKKwkJOzsKKwkqLWJlKQorCQlvcz0tYmVvcworCQk7OworCSotaGFpa3UpCisJCW9zPS1oYWlrdQorCQk7OworCSotaWJtKQorCQlvcz0tYWl4CisJCTs7CisgICAgCSota251dGgpCisJCW9zPS1tbWl4d2FyZQorCQk7OworCSotd2VjKQorCQlvcz0tcHJvZWxmCisJCTs7CisJKi13aW5ib25kKQorCQlvcz0tcHJvZWxmCisJCTs7CisJKi1va2kpCisJCW9zPS1wcm9lbGYKKwkJOzsKKwkqLWhwKQorCQlvcz0taHB1eAorCQk7OworCSotaGl0YWNoaSkKKwkJb3M9LWhpdXgKKwkJOzsKKwlpODYwLSogfCAqLWF0dCB8ICotbmNyIHwgKi1hbHRvcyB8ICotbW90b3JvbGEgfCAqLWNvbnZlcmdlbnQpCisJCW9zPS1zeXN2CisJCTs7CisJKi1jYm0pCisJCW9zPS1hbWlnYW9zCisJCTs7CisJKi1kZykKKwkJb3M9LWRndXgKKwkJOzsKKwkqLWRvbHBoaW4pCisJCW9zPS1zeXN2MworCQk7OworCW02OGstY2N1cikKKwkJb3M9LXJ0dQorCQk7OworCW04OGstb21yb24qKQorCQlvcz0tbHVuYQorCQk7OworCSotbmV4dCApCisJCW9zPS1uZXh0c3RlcAorCQk7OworCSotc2VxdWVudCkKKwkJb3M9LXB0eAorCQk7OworCSotY3JkcykKKwkJb3M9LXVub3MKKwkJOzsKKwkqLW5zKQorCQlvcz0tZ2VuaXgKKwkJOzsKKwlpMzcwLSopCisJCW9zPS1tdnMKKwkJOzsKKwkqLW5leHQpCisJCW9zPS1uZXh0c3RlcDMKKwkJOzsKKwkqLWdvdWxkKQorCQlvcz0tc3lzdgorCQk7OworCSotaGlnaGxldmVsKQorCQlvcz0tYnNkCisJCTs7CisJKi1lbmNvcmUpCisJCW9zPS1ic2QKKwkJOzsKKwkqLXNnaSkKKwkJb3M9LWlyaXgKKwkJOzsKKwkqLXNpZW1lbnMpCisJCW9zPS1zeXN2NAorCQk7OworCSotbWFzc2NvbXApCisJCW9zPS1ydHUKKwkJOzsKKwlmMzBbMDFdLWZ1aml0c3UgfCBmNzAwLWZ1aml0c3UpCisJCW9zPS11eHB2CisJCTs7CisJKi1yb202OGspCisJCW9zPS1jb2ZmCisJCTs7CisJKi0qYnVnKQorCQlvcz0tY29mZgorCQk7OworCSotYXBwbGUpCisJCW9zPS1tYWNvcworCQk7OworCSotYXRhcmkqKQorCQlvcz0tbWludAorCQk7OworCSopCisJCW9zPS1ub25lCisJCTs7Citlc2FjCitmaQorCisjIEhlcmUgd2UgaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHdlIGtub3cgdGhlIG9zLCBhbmQgdGhlIENQVSB0eXBlLCBidXQgbm90IHRoZQorIyBtYW51ZmFjdHVyZXIuICBXZSBwaWNrIHRoZSBsb2dpY2FsIG1hbnVmYWN0dXJlci4KK3ZlbmRvcj11bmtub3duCitjYXNlICRiYXNpY19tYWNoaW5lIGluCisJKi11bmtub3duKQorCQljYXNlICRvcyBpbgorCQkJLXJpc2NpeCopCisJCQkJdmVuZG9yPWFjb3JuCisJCQkJOzsKKwkJCS1zdW5vcyopCisJCQkJdmVuZG9yPXN1bgorCQkJCTs7CisJCQktY25rKnwtYWl4KikKKwkJCQl2ZW5kb3I9aWJtCisJCQkJOzsKKwkJCS1iZW9zKikKKwkJCQl2ZW5kb3I9YmUKKwkJCQk7OworCQkJLWhwdXgqKQorCQkJCXZlbmRvcj1ocAorCQkJCTs7CisJCQktbXBlaXgqKQorCQkJCXZlbmRvcj1ocAorCQkJCTs7CisJCQktaGl1eCopCisJCQkJdmVuZG9yPWhpdGFjaGkKKwkJCQk7OworCQkJLXVub3MqKQorCQkJCXZlbmRvcj1jcmRzCisJCQkJOzsKKwkJCS1kZ3V4KikKKwkJCQl2ZW5kb3I9ZGcKKwkJCQk7OworCQkJLWx1bmEqKQorCQkJCXZlbmRvcj1vbXJvbgorCQkJCTs7CisJCQktZ2VuaXgqKQorCQkJCXZlbmRvcj1ucworCQkJCTs7CisJCQktbXZzKiB8IC1vcGVuZWQqKQorCQkJCXZlbmRvcj1pYm0KKwkJCQk7OworCQkJLW9zNDAwKikKKwkJCQl2ZW5kb3I9aWJtCisJCQkJOzsKKwkJCS1wdHgqKQorCQkJCXZlbmRvcj1zZXF1ZW50CisJCQkJOzsKKwkJCS10cGYqKQorCQkJCXZlbmRvcj1pYm0KKwkJCQk7OworCQkJLXZ4c2ltKiB8IC12eHdvcmtzKiB8IC13aW5kaXNzKikKKwkJCQl2ZW5kb3I9d3JzCisJCQkJOzsKKwkJCS1hdXgqKQorCQkJCXZlbmRvcj1hcHBsZQorCQkJCTs7CisJCQktaG1zKikKKwkJCQl2ZW5kb3I9aGl0YWNoaQorCQkJCTs7CisJCQktbXB3KiB8IC1tYWNvcyopCisJCQkJdmVuZG9yPWFwcGxlCisJCQkJOzsKKwkJCS0qbWludCB8IC1taW50WzAtOV0qIHwgLSpNaU5UIHwgLU1pTlRbMC05XSopCisJCQkJdmVuZG9yPWF0YXJpCisJCQkJOzsKKwkJCS12b3MqKQorCQkJCXZlbmRvcj1zdHJhdHVzCisJCQkJOzsKKwkJZXNhYworCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICJzL3Vua25vd24vJHZlbmRvci8iYAorCQk7OworZXNhYworCitlY2hvICRiYXNpY19tYWNoaW5lJG9zCitleGl0CisKKyMgTG9jYWwgdmFyaWFibGVzOgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJ0aW1lc3RhbXA9JyIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkIgorIyB0aW1lLXN0YW1wLWVuZDogIiciCisjIEVuZDoKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9jb25maWd1cmUgYi9hdmFoaS0wLjYuMzEvY29uZmlndXJlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU4ZTg1MzAKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvY29uZmlndXJlCkBAIC0wLDAgKzEsMjc5NTMgQEAKKyMhIC9iaW4vc2gKKyMgR3Vlc3MgdmFsdWVzIGZvciBzeXN0ZW0tZGVwZW5kZW50IHZhcmlhYmxlcyBhbmQgY3JlYXRlIE1ha2VmaWxlcy4KKyMgR2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY4IGZvciBhdmFoaSAwLjYuMzEuCisjCisjIFJlcG9ydCBidWdzIHRvIDxhdmFoaSAoYXQpIGxpc3RzIChkb3QpIGZyZWVkZXNrdG9wIChkb3QpIG9yZz4uCisjCisjCisjIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwKKyMgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4KKyMKKyMKKyMgVGhpcyBjb25maWd1cmUgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LgorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE00c2ggSW5pdGlhbGl6YXRpb24uICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIEJlIG1vcmUgQm91cm5lIGNvbXBhdGlibGUKK0RVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgIGVtdWxhdGUgc2gKKyAgTlVMTENNRD06CisgICMgUHJlLTQuMiB2ZXJzaW9ucyBvZiBac2ggZG8gd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAorICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgorICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKKyAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2Vsc2UKKyAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluICMoCisgICpwb3NpeCopIDoKKyAgICBzZXQgLW8gcG9zaXggOzsgIygKKyAgKikgOgorICAgICA7OworZXNhYworZmkKKworCithc19ubD0nCisnCitleHBvcnQgYXNfbmwKKyMgUHJpbnRpbmcgYSBsb25nIHN0cmluZyBjcmFzaGVzIFNvbGFyaXMgNyAvdXNyL2Jpbi9wcmludGYuCithc19lY2hvPSdcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcJworYXNfZWNobz0kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvCithc19lY2hvPSRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobworIyBQcmVmZXIgYSBrc2ggc2hlbGwgYnVpbHRpbiBvdmVyIGFuIGV4dGVybmFsIHByaW50ZiBwcm9ncmFtIG9uIFNvbGFyaXMsCisjIGJ1dCB3aXRob3V0IHdhc3RpbmcgZm9ya3MgZm9yIGJhc2ggb3IgenNoLgoraWYgdGVzdCAteiAiJEJBU0hfVkVSU0lPTiRaU0hfVkVSU0lPTiIgXAorICAgICYmICh0ZXN0ICJYYHByaW50IC1yIC0tICRhc19lY2hvYCIgPSAiWCRhc19lY2hvIikgMj4vZGV2L251bGw7IHRoZW4KKyAgYXNfZWNobz0ncHJpbnQgLXIgLS0nCisgIGFzX2VjaG9fbj0ncHJpbnQgLXJuIC0tJworZWxpZiAodGVzdCAiWGBwcmludGYgJXMgJGFzX2VjaG9gIiA9ICJYJGFzX2VjaG8iKSAyPi9kZXYvbnVsbDsgdGhlbgorICBhc19lY2hvPSdwcmludGYgJXNcbicKKyAgYXNfZWNob19uPSdwcmludGYgJXMnCitlbHNlCisgIGlmIHRlc3QgIlhgKC91c3IvdWNiL2VjaG8gLW4gLW4gJGFzX2VjaG8pIDI+L2Rldi9udWxsYCIgPSAiWC1uICRhc19lY2hvIjsgdGhlbgorICAgIGFzX2VjaG9fYm9keT0nZXZhbCAvdXNyL3VjYi9lY2hvIC1uICIkMSRhc19ubCInCisgICAgYXNfZWNob19uPScvdXNyL3VjYi9lY2hvIC1uJworICBlbHNlCisgICAgYXNfZWNob19ib2R5PSdldmFsIGV4cHIgIlgkMSIgOiAiWFxcKC4qXFwpIicKKyAgICBhc19lY2hvX25fYm9keT0nZXZhbAorICAgICAgYXJnPSQxOworICAgICAgY2FzZSAkYXJnIGluICMoCisgICAgICAqIiRhc19ubCIqKQorCWV4cHIgIlgkYXJnIiA6ICJYXFwoLipcXCkkYXNfbmwiOworCWFyZz1gZXhwciAiWCRhcmciIDogIi4qJGFzX25sXFwoLipcXCkiYDs7CisgICAgICBlc2FjOworICAgICAgZXhwciAiWCRhcmciIDogIlhcXCguKlxcKSIgfCB0ciAtZCAiJGFzX25sIgorICAgICcKKyAgICBleHBvcnQgYXNfZWNob19uX2JvZHkKKyAgICBhc19lY2hvX249J3NoIC1jICRhc19lY2hvX25fYm9keSBhc19lY2hvJworICBmaQorICBleHBvcnQgYXNfZWNob19ib2R5CisgIGFzX2VjaG89J3NoIC1jICRhc19lY2hvX2JvZHkgYXNfZWNobycKK2ZpCisKKyMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgoraWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KKyAgUEFUSF9TRVBBUkFUT1I9OgorICAoUEFUSD0nL2JpbjsvYmluJzsgRlBBVEg9JFBBVEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSAmJiB7CisgICAgKFBBVEg9Jy9iaW46L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgfHwKKyAgICAgIFBBVEhfU0VQQVJBVE9SPSc7JworICB9CitmaQorCisKKyMgSUZTCisjIFdlIG5lZWQgc3BhY2UsIHRhYiBhbmQgbmV3IGxpbmUsIGluIHByZWNpc2VseSB0aGF0IG9yZGVyLiAgUXVvdGluZyBpcworIyB0aGVyZSB0byBwcmV2ZW50IGVkaXRvcnMgZnJvbSBjb21wbGFpbmluZyBhYm91dCBzcGFjZS10YWIuCisjIChJZiBfQVNfUEFUSF9XQUxLIHdlcmUgY2FsbGVkIHdpdGggSUZTIHVuc2V0LCBpdCB3b3VsZCBkaXNhYmxlIHdvcmQKKyMgc3BsaXR0aW5nIGJ5IHNldHRpbmcgSUZTIHRvIGVtcHR5IHZhbHVlLikKK0lGUz0iICIiCSRhc19ubCIKKworIyBGaW5kIHdobyB3ZSBhcmUuICBMb29rIGluIHRoZSBwYXRoIGlmIHdlIGNvbnRhaW4gbm8gZGlyZWN0b3J5IHNlcGFyYXRvci4KK2FzX215c2VsZj0KK2Nhc2UgJDAgaW4gIygoCisgICpbXFwvXSogKSBhc19teXNlbGY9JDAgOzsKKyAgKikgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIHRlc3QgLXIgIiRhc19kaXIvJDAiICYmIGFzX215c2VsZj0kYXNfZGlyLyQwICYmIGJyZWFrCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICAgICA7OworZXNhYworIyBXZSBkaWQgbm90IGZpbmQgb3Vyc2VsdmVzLCBtb3N0IHByb2JhYmx5IHdlIHdlcmUgcnVuIGFzIGBzaCBDT01NQU5EJworIyBpbiB3aGljaCBjYXNlIHdlIGFyZSBub3QgdG8gYmUgZm91bmQgaW4gdGhlIHBhdGguCitpZiB0ZXN0ICJ4JGFzX215c2VsZiIgPSB4OyB0aGVuCisgIGFzX215c2VsZj0kMAorZmkKK2lmIHRlc3QgISAtZiAiJGFzX215c2VsZiI7IHRoZW4KKyAgJGFzX2VjaG8gIiRhc19teXNlbGY6IGVycm9yOiBjYW5ub3QgZmluZCBteXNlbGY7IHJlcnVuIHdpdGggYW4gYWJzb2x1dGUgZmlsZSBuYW1lIiA+JjIKKyAgZXhpdCAxCitmaQorCisjIFVuc2V0IHZhcmlhYmxlcyB0aGF0IHdlIGRvIG5vdCBuZWVkIGFuZCB3aGljaCBjYXVzZSBidWdzIChlLmcuIGluCisjIHByZS0zLjAgVVdJTiBrc2gpLiAgQnV0IGRvIG5vdCBjYXVzZSBidWdzIGluIGJhc2ggMi4wMTsgdGhlICJ8fCBleGl0IDEiCisjIHN1cHByZXNzZXMgYW55ICJTZWdtZW50YXRpb24gZmF1bHQiIG1lc3NhZ2UgdGhlcmUuICAnKCgnIGNvdWxkCisjIHRyaWdnZXIgYSBidWcgaW4gcGRrc2ggNS4yLjE0LgorZm9yIGFzX3ZhciBpbiBCQVNIX0VOViBFTlYgTUFJTCBNQUlMUEFUSAorZG8gZXZhbCB0ZXN0IHhcJHskYXNfdmFyK3NldH0gPSB4c2V0IFwKKyAgJiYgKCAodW5zZXQgJGFzX3ZhcikgfHwgZXhpdCAxKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgJGFzX3ZhciB8fCA6Citkb25lCitQUzE9JyQgJworUFMyPSc+ICcKK1BTND0nKyAnCisKKyMgTkxTIG51aXNhbmNlcy4KK0xDX0FMTD1DCitleHBvcnQgTENfQUxMCitMQU5HVUFHRT1DCitleHBvcnQgTEFOR1VBR0UKKworIyBDRFBBVEguCisodW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICisKK2lmIHRlc3QgIngkQ09ORklHX1NIRUxMIiA9IHg7IHRoZW4KKyAgYXNfYm91cm5lX2NvbXBhdGlibGU9ImlmIHRlc3QgLW4gXCJcJHtaU0hfVkVSU0lPTitzZXR9XCIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgIGVtdWxhdGUgc2gKKyAgTlVMTENNRD06CisgICMgUHJlLTQuMiB2ZXJzaW9ucyBvZiBac2ggZG8gd29yZCBzcGxpdHRpbmcgb24gXCR7MStcIlwkQFwifSwgd2hpY2gKKyAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KKyAgYWxpYXMgLWcgJ1wkezErXCJcJEBcIn0nPSdcIlwkQFwiJworICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZWxzZQorICBjYXNlIFxgKHNldCAtbykgMj4vZGV2L251bGxcYCBpbiAjKAorICAqcG9zaXgqKSA6CisgICAgc2V0IC1vIHBvc2l4IDs7ICMoCisgICopIDoKKyAgICAgOzsKK2VzYWMKK2ZpCisiCisgIGFzX3JlcXVpcmVkPSJhc19mbl9yZXR1cm4gKCkgeyAoZXhpdCBcJDEpOyB9Cithc19mbl9zdWNjZXNzICgpIHsgYXNfZm5fcmV0dXJuIDA7IH0KK2FzX2ZuX2ZhaWx1cmUgKCkgeyBhc19mbl9yZXR1cm4gMTsgfQorYXNfZm5fcmV0X3N1Y2Nlc3MgKCkgeyByZXR1cm4gMDsgfQorYXNfZm5fcmV0X2ZhaWx1cmUgKCkgeyByZXR1cm4gMTsgfQorCitleGl0Y29kZT0wCithc19mbl9zdWNjZXNzIHx8IHsgZXhpdGNvZGU9MTsgZWNobyBhc19mbl9zdWNjZXNzIGZhaWxlZC47IH0KK2FzX2ZuX2ZhaWx1cmUgJiYgeyBleGl0Y29kZT0xOyBlY2hvIGFzX2ZuX2ZhaWx1cmUgc3VjY2VlZGVkLjsgfQorYXNfZm5fcmV0X3N1Y2Nlc3MgfHwgeyBleGl0Y29kZT0xOyBlY2hvIGFzX2ZuX3JldF9zdWNjZXNzIGZhaWxlZC47IH0KK2FzX2ZuX3JldF9mYWlsdXJlICYmIHsgZXhpdGNvZGU9MTsgZWNobyBhc19mbl9yZXRfZmFpbHVyZSBzdWNjZWVkZWQuOyB9CitpZiAoIHNldCB4OyBhc19mbl9yZXRfc3VjY2VzcyB5ICYmIHRlc3QgeCA9IFwiXCQxXCIgKTsgdGhlbiA6CisKK2Vsc2UKKyAgZXhpdGNvZGU9MTsgZWNobyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgd2VyZSBub3Qgc2F2ZWQuCitmaQordGVzdCB4XCRleGl0Y29kZSA9IHgwIHx8IGV4aXQgMSIKKyAgYXNfc3VnZ2VzdGVkPSIgIGFzX2xpbmVub18xPSI7YXNfc3VnZ2VzdGVkPSRhc19zdWdnZXN0ZWQkTElORU5PO2FzX3N1Z2dlc3RlZD0kYXNfc3VnZ2VzdGVkIiBhc19saW5lbm9fMWE9XCRMSU5FTk8KKyAgYXNfbGluZW5vXzI9Ijthc19zdWdnZXN0ZWQ9JGFzX3N1Z2dlc3RlZCRMSU5FTk87YXNfc3VnZ2VzdGVkPSRhc19zdWdnZXN0ZWQiIGFzX2xpbmVub18yYT1cJExJTkVOTworICBldmFsICd0ZXN0IFwieFwkYXNfbGluZW5vXzEnXCRhc19ydW4nXCIgIT0gXCJ4XCRhc19saW5lbm9fMidcJGFzX3J1bidcIiAmJgorICB0ZXN0IFwieFxgZXhwciBcJGFzX2xpbmVub18xJ1wkYXNfcnVuJyArIDFcYFwiID0gXCJ4XCRhc19saW5lbm9fMidcJGFzX3J1bidcIicgfHwgZXhpdCAxCit0ZXN0IFwkKCggMSArIDEgKSkgPSAyIHx8IGV4aXQgMQorCisgIHRlc3QgLW4gXCJcJHtaU0hfVkVSU0lPTitzZXR9XCR7QkFTSF9WRVJTSU9OK3NldH1cIiB8fCAoCisgICAgRUNITz0nXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFwnCisgICAgRUNITz1cJEVDSE9cJEVDSE9cJEVDSE9cJEVDSE9cJEVDSE8KKyAgICBFQ0hPPVwkRUNIT1wkRUNIT1wkRUNIT1wkRUNIT1wkRUNIT1wkRUNITworICAgIFBBVEg9L2VtcHR5IEZQQVRIPS9lbXB0eTsgZXhwb3J0IFBBVEggRlBBVEgKKyAgICB0ZXN0IFwiWFxgcHJpbnRmICVzIFwkRUNIT1xgXCIgPSBcIlhcJEVDSE9cIiBcXAorICAgICAgfHwgdGVzdCBcIlhcYHByaW50IC1yIC0tIFwkRUNIT1xgXCIgPSBcIlhcJEVDSE9cIiApIHx8IGV4aXQgMSIKKyAgaWYgKGV2YWwgIiRhc19yZXF1aXJlZCIpIDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgYXNfaGF2ZV9yZXF1aXJlZD15ZXMKK2Vsc2UKKyAgYXNfaGF2ZV9yZXF1aXJlZD1ubworZmkKKyAgaWYgdGVzdCB4JGFzX2hhdmVfcmVxdWlyZWQgPSB4eWVzICYmIChldmFsICIkYXNfc3VnZ2VzdGVkIikgMj4vZGV2L251bGw7IHRoZW4gOgorCitlbHNlCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2FzX2ZvdW5kPWZhbHNlCitmb3IgYXNfZGlyIGluIC9iaW4kUEFUSF9TRVBBUkFUT1IvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgIGFzX2ZvdW5kPToKKyAgY2FzZSAkYXNfZGlyIGluICMoCisJIC8qKQorCSAgIGZvciBhc19iYXNlIGluIHNoIGJhc2gga3NoIHNoNTsgZG8KKwkgICAgICMgVHJ5IG9ubHkgc2hlbGxzIHRoYXQgZXhpc3QsIHRvIHNhdmUgc2V2ZXJhbCBmb3Jrcy4KKwkgICAgIGFzX3NoZWxsPSRhc19kaXIvJGFzX2Jhc2UKKwkgICAgIGlmIHsgdGVzdCAtZiAiJGFzX3NoZWxsIiB8fCB0ZXN0IC1mICIkYXNfc2hlbGwuZXhlIjsgfSAmJgorCQkgICAgeyAkYXNfZWNobyAiJGFzX2JvdXJuZV9jb21wYXRpYmxlIiIkYXNfcmVxdWlyZWQiIHwgYXNfcnVuPWEgIiRhc19zaGVsbCI7IH0gMj4vZGV2L251bGw7IHRoZW4gOgorICBDT05GSUdfU0hFTEw9JGFzX3NoZWxsIGFzX2hhdmVfcmVxdWlyZWQ9eWVzCisJCSAgIGlmIHsgJGFzX2VjaG8gIiRhc19ib3VybmVfY29tcGF0aWJsZSIiJGFzX3N1Z2dlc3RlZCIgfCBhc19ydW49YSAiJGFzX3NoZWxsIjsgfSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIGJyZWFrIDIKK2ZpCitmaQorCSAgIGRvbmU7OworICAgICAgIGVzYWMKKyAgYXNfZm91bmQ9ZmFsc2UKK2RvbmUKKyRhc19mb3VuZCB8fCB7IGlmIHsgdGVzdCAtZiAiJFNIRUxMIiB8fCB0ZXN0IC1mICIkU0hFTEwuZXhlIjsgfSAmJgorCSAgICAgIHsgJGFzX2VjaG8gIiRhc19ib3VybmVfY29tcGF0aWJsZSIiJGFzX3JlcXVpcmVkIiB8IGFzX3J1bj1hICIkU0hFTEwiOyB9IDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgQ09ORklHX1NIRUxMPSRTSEVMTCBhc19oYXZlX3JlcXVpcmVkPXllcworZmk7IH0KK0lGUz0kYXNfc2F2ZV9JRlMKKworCisgICAgICBpZiB0ZXN0ICJ4JENPTkZJR19TSEVMTCIgIT0geDsgdGhlbiA6CisgICMgV2UgY2Fubm90IHlldCBhc3N1bWUgYSBkZWNlbnQgc2hlbGwsIHNvIHdlIGhhdmUgdG8gcHJvdmlkZSBhCisJIyBuZXV0cmFsaXphdGlvbiB2YWx1ZSBmb3Igc2hlbGxzIHdpdGhvdXQgdW5zZXQ7IGFuZCB0aGlzIGFsc28KKwkjIHdvcmtzIGFyb3VuZCBzaGVsbHMgdGhhdCBjYW5ub3QgdW5zZXQgbm9uZXhpc3RlbnQgdmFyaWFibGVzLgorCSMgUHJlc2VydmUgLXYgYW5kIC14IHRvIHRoZSByZXBsYWNlbWVudCBzaGVsbC4KKwlCQVNIX0VOVj0vZGV2L251bGwKKwlFTlY9L2Rldi9udWxsCisJKHVuc2V0IEJBU0hfRU5WKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQkFTSF9FTlYgRU5WCisJZXhwb3J0IENPTkZJR19TSEVMTAorCWNhc2UgJC0gaW4gIyAoKCgoCisJICAqdip4KiB8ICp4KnYqICkgYXNfb3B0cz0tdnggOzsKKwkgICp2KiApIGFzX29wdHM9LXYgOzsKKwkgICp4KiApIGFzX29wdHM9LXggOzsKKwkgICogKSBhc19vcHRzPSA7OworCWVzYWMKKwlleGVjICIkQ09ORklHX1NIRUxMIiAkYXNfb3B0cyAiJGFzX215c2VsZiIgJHsxKyIkQCJ9CitmaQorCisgICAgaWYgdGVzdCB4JGFzX2hhdmVfcmVxdWlyZWQgPSB4bm87IHRoZW4gOgorICAkYXNfZWNobyAiJDA6IFRoaXMgc2NyaXB0IHJlcXVpcmVzIGEgc2hlbGwgbW9yZSBtb2Rlcm4gdGhhbiBhbGwiCisgICRhc19lY2hvICIkMDogdGhlIHNoZWxscyB0aGF0IEkgZm91bmQgb24geW91ciBzeXN0ZW0uIgorICBpZiB0ZXN0IHgke1pTSF9WRVJTSU9OK3NldH0gPSB4c2V0IDsgdGhlbgorICAgICRhc19lY2hvICIkMDogSW4gcGFydGljdWxhciwgenNoICRaU0hfVkVSU0lPTiBoYXMgYnVncyBhbmQgc2hvdWxkIgorICAgICRhc19lY2hvICIkMDogYmUgdXBncmFkZWQgdG8genNoIDQuMy40IG9yIGxhdGVyLiIKKyAgZWxzZQorICAgICRhc19lY2hvICIkMDogUGxlYXNlIHRlbGwgYnVnLWF1dG9jb25mQGdudS5vcmcgYW5kIGF2YWhpIChhdCkgbGlzdHMKKyQwOiAoZG90KSBmcmVlZGVza3RvcCAoZG90KSBvcmcgYWJvdXQgeW91ciBzeXN0ZW0sCiskMDogaW5jbHVkaW5nIGFueSBlcnJvciBwb3NzaWJseSBvdXRwdXQgYmVmb3JlIHRoaXMKKyQwOiBtZXNzYWdlLiBUaGVuIGluc3RhbGwgYSBtb2Rlcm4gc2hlbGwsIG9yIG1hbnVhbGx5IHJ1bgorJDA6IHRoZSBzY3JpcHQgdW5kZXIgc3VjaCBhIHNoZWxsIGlmIHlvdSBkbyBoYXZlIG9uZS4iCisgIGZpCisgIGV4aXQgMQorZmkKK2ZpCitmaQorU0hFTEw9JHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0KK2V4cG9ydCBTSEVMTAorIyBVbnNldCBtb3JlIHZhcmlhYmxlcyBrbm93biB0byBpbnRlcmZlcmUgd2l0aCBiZWhhdmlvciBvZiBjb21tb24gdG9vbHMuCitDTElDT0xPUl9GT1JDRT0gR1JFUF9PUFRJT05TPQordW5zZXQgQ0xJQ09MT1JfRk9SQ0UgR1JFUF9PUFRJT05TCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgTTRzaCBTaGVsbCBGdW5jdGlvbnMuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMgYXNfZm5fdW5zZXQgVkFSCisjIC0tLS0tLS0tLS0tLS0tLQorIyBQb3J0YWJseSB1bnNldCBWQVIuCithc19mbl91bnNldCAoKQoreworICB7IGV2YWwgJDE9OyB1bnNldCAkMTt9Cit9Cithc191bnNldD1hc19mbl91bnNldAorCisjIGFzX2ZuX3NldF9zdGF0dXMgU1RBVFVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNldCAkPyB0byBTVEFUVVMsIHdpdGhvdXQgZm9ya2luZy4KK2FzX2ZuX3NldF9zdGF0dXMgKCkKK3sKKyAgcmV0dXJuICQxCit9ICMgYXNfZm5fc2V0X3N0YXR1cworCisjIGFzX2ZuX2V4aXQgU1RBVFVTCisjIC0tLS0tLS0tLS0tLS0tLS0tCisjIEV4aXQgdGhlIHNoZWxsIHdpdGggU1RBVFVTLCBldmVuIGluIGEgInRyYXAgMCIgb3IgInNldCAtZSIgY29udGV4dC4KK2FzX2ZuX2V4aXQgKCkKK3sKKyAgc2V0ICtlCisgIGFzX2ZuX3NldF9zdGF0dXMgJDEKKyAgZXhpdCAkMQorfSAjIGFzX2ZuX2V4aXQKKworIyBhc19mbl9ta2Rpcl9wCisjIC0tLS0tLS0tLS0tLS0KKyMgQ3JlYXRlICIkYXNfZGlyIiBhcyBhIGRpcmVjdG9yeSwgaW5jbHVkaW5nIHBhcmVudHMgaWYgbmVjZXNzYXJ5LgorYXNfZm5fbWtkaXJfcCAoKQoreworCisgIGNhc2UgJGFzX2RpciBpbiAjKAorICAtKikgYXNfZGlyPS4vJGFzX2Rpcjs7CisgIGVzYWMKKyAgdGVzdCAtZCAiJGFzX2RpciIgfHwgZXZhbCAkYXNfbWtkaXJfcCB8fCB7CisgICAgYXNfZGlycz0KKyAgICB3aGlsZSA6OyBkbworICAgICAgY2FzZSAkYXNfZGlyIGluICMoCisgICAgICAqXCcqKSBhc19xZGlyPWAkYXNfZWNobyAiJGFzX2RpciIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OyAjJygKKyAgICAgICopIGFzX3FkaXI9JGFzX2Rpcjs7CisgICAgICBlc2FjCisgICAgICBhc19kaXJzPSInJGFzX3FkaXInICRhc19kaXJzIgorICAgICAgYXNfZGlyPWAkYXNfZGlybmFtZSAtLSAiJGFzX2RpciIgfHwKKyRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYIiRhc19kaXIiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXClbXi9dLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYAorICAgICAgdGVzdCAtZCAiJGFzX2RpciIgJiYgYnJlYWsKKyAgICBkb25lCisgICAgdGVzdCAteiAiJGFzX2RpcnMiIHx8IGV2YWwgIm1rZGlyICRhc19kaXJzIgorICB9IHx8IHRlc3QgLWQgIiRhc19kaXIiIHx8IGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSAkYXNfZGlyIgorCisKK30gIyBhc19mbl9ta2Rpcl9wCisjIGFzX2ZuX2FwcGVuZCBWQVIgVkFMVUUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBcHBlbmQgdGhlIHRleHQgaW4gVkFMVUUgdG8gdGhlIGVuZCBvZiB0aGUgZGVmaW5pdGlvbiBjb250YWluZWQgaW4gVkFSLiBUYWtlCisjIGFkdmFudGFnZSBvZiBhbnkgc2hlbGwgb3B0aW1pemF0aW9ucyB0aGF0IGFsbG93IGFtb3J0aXplZCBsaW5lYXIgZ3Jvd3RoIG92ZXIKKyMgcmVwZWF0ZWQgYXBwZW5kcywgaW5zdGVhZCBvZiB0aGUgdHlwaWNhbCBxdWFkcmF0aWMgZ3Jvd3RoIHByZXNlbnQgaW4gbmFpdmUKKyMgaW1wbGVtZW50YXRpb25zLgoraWYgKGV2YWwgImFzX3Zhcj0xOyBhc192YXIrPTI7IHRlc3QgeFwkYXNfdmFyID0geDEyIikgMj4vZGV2L251bGw7IHRoZW4gOgorICBldmFsICdhc19mbl9hcHBlbmQgKCkKKyAgeworICAgIGV2YWwgJDErPVwkMgorICB9JworZWxzZQorICBhc19mbl9hcHBlbmQgKCkKKyAgeworICAgIGV2YWwgJDE9XCQkMVwkMgorICB9CitmaSAjIGFzX2ZuX2FwcGVuZAorCisjIGFzX2ZuX2FyaXRoIEFSRy4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgUGVyZm9ybSBhcml0aG1ldGljIGV2YWx1YXRpb24gb24gdGhlIEFSR3MsIGFuZCBzdG9yZSB0aGUgcmVzdWx0IGluIHRoZQorIyBnbG9iYWwgJGFzX3ZhbC4gVGFrZSBhZHZhbnRhZ2Ugb2Ygc2hlbGxzIHRoYXQgY2FuIGF2b2lkIGZvcmtzLiBUaGUgYXJndW1lbnRzCisjIG11c3QgYmUgcG9ydGFibGUgYWNyb3NzICQoKCkpIGFuZCBleHByLgoraWYgKGV2YWwgInRlc3QgXCQoKCAxICsgMSApKSA9IDIiKSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIGV2YWwgJ2FzX2ZuX2FyaXRoICgpCisgIHsKKyAgICBhc192YWw9JCgoICQqICkpCisgIH0nCitlbHNlCisgIGFzX2ZuX2FyaXRoICgpCisgIHsKKyAgICBhc192YWw9YGV4cHIgIiRAIiB8fCB0ZXN0ICQ/IC1lcSAxYAorICB9CitmaSAjIGFzX2ZuX2FyaXRoCisKKworIyBhc19mbl9lcnJvciBTVEFUVVMgRVJST1IgW0xJTkVOTyBMT0dfRkRdCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgT3V0cHV0ICJgYmFzZW5hbWUgJDBgOiBlcnJvcjogRVJST1IiIHRvIHN0ZGVyci4gSWYgTElORU5PIGFuZCBMT0dfRkQgYXJlCisjIHByb3ZpZGVkLCBhbHNvIG91dHB1dCB0aGUgZXJyb3IgdG8gTE9HX0ZELCByZWZlcmVuY2luZyBMSU5FTk8uIFRoZW4gZXhpdCB0aGUKKyMgc2NyaXB0IHdpdGggU1RBVFVTLCB1c2luZyAxIGlmIHRoYXQgd2FzIDAuCithc19mbl9lcnJvciAoKQoreworICBhc19zdGF0dXM9JDE7IHRlc3QgJGFzX3N0YXR1cyAtZXEgMCAmJiBhc19zdGF0dXM9MQorICBpZiB0ZXN0ICIkNCI7IHRoZW4KKyAgICBhc19saW5lbm89JHthc19saW5lbm8tIiQzIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6ICQyIiA+JiQ0CisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiAkMiIgPiYyCisgIGFzX2ZuX2V4aXQgJGFzX3N0YXR1cworfSAjIGFzX2ZuX2Vycm9yCisKK2lmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxICYmCisgICB0ZXN0ICJYYGV4cHIgMDAwMDEgOiAnLipcKC4uLlwpJ2AiID0gWDAwMTsgdGhlbgorICBhc19leHByPWV4cHIKK2Vsc2UKKyAgYXNfZXhwcj1mYWxzZQorZmkKKworaWYgKGJhc2VuYW1lIC0tIC8pID4vZGV2L251bGwgMj4mMSAmJiB0ZXN0ICJYYGJhc2VuYW1lIC0tIC8gMj4mMWAiID0gIlgvIjsgdGhlbgorICBhc19iYXNlbmFtZT1iYXNlbmFtZQorZWxzZQorICBhc19iYXNlbmFtZT1mYWxzZQorZmkKKworaWYgKGFzX2Rpcj1gZGlybmFtZSAtLSAvYCAmJiB0ZXN0ICJYJGFzX2RpciIgPSBYLykgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFzX2Rpcm5hbWU9ZGlybmFtZQorZWxzZQorICBhc19kaXJuYW1lPWZhbHNlCitmaQorCithc19tZT1gJGFzX2Jhc2VuYW1lIC0tICIkMCIgfHwKKyRhc19leHByIFgvIiQwIiA6ICcuKi9cKFteL11bXi9dKlwpLyokJyBcfCBcCisJIFgiJDAiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJDAiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWC8iJDAiIHwKKyAgICBzZWQgJy9eLipcL1woW14vXVteL10qXClcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwvXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwvXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCisKKyMgQXZvaWQgZGVwZW5kaW5nIHVwb24gQ2hhcmFjdGVyIFJhbmdlcy4KK2FzX2NyX2xldHRlcnM9J2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JworYXNfY3JfTEVUVEVSUz0nQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonCithc19jcl9MZXR0ZXJzPSRhc19jcl9sZXR0ZXJzJGFzX2NyX0xFVFRFUlMKK2FzX2NyX2RpZ2l0cz0nMDEyMzQ1Njc4OScKK2FzX2NyX2FsbnVtPSRhc19jcl9MZXR0ZXJzJGFzX2NyX2RpZ2l0cworCisKKyAgYXNfbGluZW5vXzE9JExJTkVOTyBhc19saW5lbm9fMWE9JExJTkVOTworICBhc19saW5lbm9fMj0kTElORU5PIGFzX2xpbmVub18yYT0kTElORU5PCisgIGV2YWwgJ3Rlc3QgIngkYXNfbGluZW5vXzEnJGFzX3J1biciICE9ICJ4JGFzX2xpbmVub18yJyRhc19ydW4nIiAmJgorICB0ZXN0ICJ4YGV4cHIgJGFzX2xpbmVub18xJyRhc19ydW4nICsgMWAiID0gIngkYXNfbGluZW5vXzInJGFzX3J1biciJyB8fCB7CisgICMgQmxhbWUgTGVlIEUuIE1jTWFob24gKDE5MzEtMTk4OSkgZm9yIHNlZCdzIHN5bnRheC4gIDotKQorICBzZWQgLW4gJworICAgIHAKKyAgICAvWyRdTElORU5PLz0KKyAgJyA8JGFzX215c2VsZiB8CisgICAgc2VkICcKKyAgICAgIHMvWyRdTElORU5PLiovJi0vCisgICAgICB0IGxpbmVubworICAgICAgYgorICAgICAgOmxpbmVubworICAgICAgTgorICAgICAgOmxvb3AKKyAgICAgIHMvWyRdTElORU5PXChbXickYXNfY3JfYWxudW0nX10uKlxuXClcKC4qXCkvXDJcMVwyLworICAgICAgdCBsb29wCisgICAgICBzLy1cbi4qLy8KKyAgICAnID4kYXNfbWUubGluZW5vICYmCisgIGNobW9kICt4ICIkYXNfbWUubGluZW5vIiB8fAorICAgIHsgJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgJGFzX21lLmxpbmVubzsgcmVydW4gd2l0aCBhIFBPU0lYIHNoZWxsIiA+JjI7IGFzX2ZuX2V4aXQgMTsgfQorCisgICMgRG9uJ3QgdHJ5IHRvIGV4ZWMgYXMgaXQgY2hhbmdlcyAkWzBdLCBjYXVzaW5nIGFsbCBzb3J0IG9mIHByb2JsZW1zCisgICMgKHRoZSBkaXJuYW1lIG9mICRbMF0gaXMgbm90IHRoZSBwbGFjZSB3aGVyZSB3ZSBtaWdodCBmaW5kIHRoZQorICAjIG9yaWdpbmFsIGFuZCBzbyBvbi4gIEF1dG9jb25mIGlzIGVzcGVjaWFsbHkgc2Vuc2l0aXZlIHRvIHRoaXMpLgorICAuICIuLyRhc19tZS5saW5lbm8iCisgICMgRXhpdCBzdGF0dXMgaXMgdGhhdCBvZiB0aGUgbGFzdCBjb21tYW5kLgorICBleGl0Cit9CisKK0VDSE9fQz0gRUNIT19OPSBFQ0hPX1Q9CitjYXNlIGBlY2hvIC1uIHhgIGluICMoKCgoKAorLW4qKQorICBjYXNlIGBlY2hvICd4eVxjJ2AgaW4KKyAgKmMqKSBFQ0hPX1Q9JwknOzsJIyBFQ0hPX1QgaXMgc2luZ2xlIHRhYiBjaGFyYWN0ZXIuCisgIHh5KSAgRUNIT19DPSdcYyc7OworICAqKSAgIGVjaG8gYGVjaG8ga3NoODggYnVnIG9uIEFJWCA2LjFgID4gL2Rldi9udWxsCisgICAgICAgRUNIT19UPScJJzs7CisgIGVzYWM7OworKikKKyAgRUNIT19OPSctbic7OworZXNhYworCitybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZmlsZQoraWYgdGVzdCAtZCBjb25mJCQuZGlyOyB0aGVuCisgIHJtIC1mIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUKK2Vsc2UKKyAgcm0gLWYgY29uZiQkLmRpcgorICBta2RpciBjb25mJCQuZGlyIDI+L2Rldi9udWxsCitmaQoraWYgKGVjaG8gPmNvbmYkJC5maWxlKSAyPi9kZXYvbnVsbDsgdGhlbgorICBpZiBsbiAtcyBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KKyAgICBhc19sbl9zPSdsbiAtcycKKyAgICAjIC4uLiBidXQgdGhlcmUgYXJlIHR3byBnb3RjaGFzOgorICAgICMgMSkgT24gTVNZUywgYm90aCBgbG4gLXMgZmlsZSBkaXInIGFuZCBgbG4gZmlsZSBkaXInIGZhaWwuCisgICAgIyAyKSBESkdQUCA8IDIuMDQgaGFzIG5vIHN5bWxpbmtzOyBgbG4gLXMnIGNyZWF0ZXMgYSB3cmFwcGVyIGV4ZWN1dGFibGUuCisgICAgIyBJbiBib3RoIGNhc2VzLCB3ZSBoYXZlIHRvIGRlZmF1bHQgdG8gYGNwIC1wJy4KKyAgICBsbiAtcyBjb25mJCQuZmlsZSBjb25mJCQuZGlyIDI+L2Rldi9udWxsICYmIHRlc3QgISAtZiBjb25mJCQuZXhlIHx8CisgICAgICBhc19sbl9zPSdjcCAtcCcKKyAgZWxpZiBsbiBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KKyAgICBhc19sbl9zPWxuCisgIGVsc2UKKyAgICBhc19sbl9zPSdjcCAtcCcKKyAgZmkKK2Vsc2UKKyAgYXNfbG5fcz0nY3AgLXAnCitmaQorcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmRpci9jb25mJCQuZmlsZSBjb25mJCQuZmlsZQorcm1kaXIgY29uZiQkLmRpciAyPi9kZXYvbnVsbAorCitpZiBta2RpciAtcCAuIDI+L2Rldi9udWxsOyB0aGVuCisgIGFzX21rZGlyX3A9J21rZGlyIC1wICIkYXNfZGlyIicKK2Vsc2UKKyAgdGVzdCAtZCAuLy1wICYmIHJtZGlyIC4vLXAKKyAgYXNfbWtkaXJfcD1mYWxzZQorZmkKKworaWYgdGVzdCAteCAvID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhc190ZXN0X3g9J3Rlc3QgLXgnCitlbHNlCisgIGlmIGxzIC1kTCAvID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgIGFzX2xzX0xfb3B0aW9uPUwKKyAgZWxzZQorICAgIGFzX2xzX0xfb3B0aW9uPQorICBmaQorICBhc190ZXN0X3g9JworICAgIGV2YWwgc2ggLWMgJ1wnJworICAgICAgaWYgdGVzdCAtZCAiJDEiOyB0aGVuCisJdGVzdCAtZCAiJDEvLiI7CisgICAgICBlbHNlCisJY2FzZSAkMSBpbiAjKAorCS0qKXNldCAiLi8kMSI7OworCWVzYWM7CisJY2FzZSBgbHMgLWxkJyRhc19sc19MX29wdGlvbicgIiQxIiAyPi9kZXYvbnVsbGAgaW4gIygoCisJPz8/W3N4XSopOjs7KilmYWxzZTs7ZXNhYztmaQorICAgICdcJycgc2gKKyAgJworZmkKK2FzX2V4ZWN1dGFibGVfcD0kYXNfdGVzdF94CisKKyMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCBDUFAgbmFtZS4KK2FzX3RyX2NwcD0iZXZhbCBzZWQgJ3klKiRhc19jcl9sZXR0ZXJzJVAkYXNfY3JfTEVUVEVSUyU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCisKKyMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCB2YXJpYWJsZSBuYW1lLgorYXNfdHJfc2g9ImV2YWwgc2VkICd5JSorJXBwJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKKworU0hFTEw9JHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0KKworCit0ZXN0IC1uICIkREpESVIiIHx8IGV4ZWMgNzwmMCA8L2Rldi9udWxsCitleGVjIDY+JjEKKworIyBOYW1lIG9mIHRoZSBob3N0LgorIyBob3N0bmFtZSBvbiBzb21lIHN5c3RlbXMgKFNWUjMuMiwgb2xkIEdOVS9MaW51eCkgcmV0dXJucyBhIGJvZ3VzIGV4aXQgc3RhdHVzLAorIyBzbyB1bmFtZSBnZXRzIHJ1biB0b28uCithY19ob3N0bmFtZT1gKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWAKKworIworIyBJbml0aWFsaXphdGlvbnMuCisjCithY19kZWZhdWx0X3ByZWZpeD0vdXNyL2xvY2FsCithY19jbGVhbl9maWxlcz0KK2FjX2NvbmZpZ19saWJvYmpfZGlyPS4KK0xJQk9CSlM9Citjcm9zc19jb21waWxpbmc9bm8KK3N1YmRpcnM9CitNRkxBR1M9CitNQUtFRkxBR1M9CisKKyMgSWRlbnRpdHkgb2YgdGhpcyBwYWNrYWdlLgorUEFDS0FHRV9OQU1FPSdhdmFoaScKK1BBQ0tBR0VfVEFSTkFNRT0nYXZhaGknCitQQUNLQUdFX1ZFUlNJT049JzAuNi4zMScKK1BBQ0tBR0VfU1RSSU5HPSdhdmFoaSAwLjYuMzEnCitQQUNLQUdFX0JVR1JFUE9SVD0nYXZhaGkgKGF0KSBsaXN0cyAoZG90KSBmcmVlZGVza3RvcCAoZG90KSBvcmcnCitQQUNLQUdFX1VSTD0nJworCithY191bmlxdWVfZmlsZT0iYXZhaGktY29yZS9zZXJ2ZXIuYyIKKyMgRmFjdG9yaW5nIGRlZmF1bHQgaGVhZGVycyBmb3IgbW9zdCB0ZXN0cy4KK2FjX2luY2x1ZGVzX2RlZmF1bHQ9IlwKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyMgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TVEFUX0gKKyMgaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZgorI2lmZGVmIFNURENfSEVBREVSUworIyBpbmNsdWRlIDxzdGRsaWIuaD4KKyMgaW5jbHVkZSA8c3RkZGVmLmg+CisjZWxzZQorIyBpZmRlZiBIQVZFX1NURExJQl9ICisjICBpbmNsdWRlIDxzdGRsaWIuaD4KKyMgZW5kaWYKKyNlbmRpZgorI2lmZGVmIEhBVkVfU1RSSU5HX0gKKyMgaWYgIWRlZmluZWQgU1REQ19IRUFERVJTICYmIGRlZmluZWQgSEFWRV9NRU1PUllfSAorIyAgaW5jbHVkZSA8bWVtb3J5Lmg+CisjIGVuZGlmCisjIGluY2x1ZGUgPHN0cmluZy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TVFJJTkdTX0gKKyMgaW5jbHVkZSA8c3RyaW5ncy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9JTlRUWVBFU19ICisjIGluY2x1ZGUgPGludHR5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NURElOVF9ICisjIGluY2x1ZGUgPHN0ZGludC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9VTklTVERfSAorIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZiIKKworYWNfc3Vic3RfdmFycz0nYW1fX0VYRUVYVF9GQUxTRQorYW1fX0VYRUVYVF9UUlVFCitMVExJQk9CSlMKK0hBVkVfU1lTVEVNRF9GQUxTRQorSEFWRV9TWVNURU1EX1RSVUUKK3N5c3RlbWRzeXN0ZW11bml0ZGlyCitFTkFCTEVfQ09NUEFUX0hPV0xfRkFMU0UKK0VOQUJMRV9DT01QQVRfSE9XTF9UUlVFCitFTkFCTEVfQ09NUEFUX0xJQkROU19TRF9GQUxTRQorRU5BQkxFX0NPTVBBVF9MSUJETlNfU0RfVFJVRQorRU5BQkxFX1RFU1RTX0ZBTFNFCitFTkFCTEVfVEVTVFNfVFJVRQorQlVJTERfTUFOUEFHRVNfRkFMU0UKK0JVSUxEX01BTlBBR0VTX1RSVUUKK1VTRV9YTUxUT01BTl9GQUxTRQorVVNFX1hNTFRPTUFOX1RSVUUKK2hhdmVfeG1sdG9tYW4KK0VOQUJMRV9DT1JFX0RPQ1NfRkFMU0UKK0VOQUJMRV9DT1JFX0RPQ1NfVFJVRQorRE9YWUdFTl9QQVBFUl9TSVpFCitEWF9DT05EX2xhdGV4X0ZBTFNFCitEWF9DT05EX2xhdGV4X1RSVUUKK0RYX0NPTkRfcGRmX0ZBTFNFCitEWF9DT05EX3BkZl9UUlVFCitEWF9QREZMQVRFWAorRFhfRkxBR19wZGYKK0RYX0NPTkRfcHNfRkFMU0UKK0RYX0NPTkRfcHNfVFJVRQorRFhfRUdSRVAKK0RYX0RWSVBTCitEWF9NQUtFSU5ERVgKK0RYX0xBVEVYCitEWF9GTEFHX3BzCitEWF9DT05EX2h0bWxfRkFMU0UKK0RYX0NPTkRfaHRtbF9UUlVFCitEWF9GTEFHX2h0bWwKK0RYX0NPTkRfY2hpX0ZBTFNFCitEWF9DT05EX2NoaV9UUlVFCitEWF9GTEFHX2NoaQorRFhfQ09ORF9jaG1fRkFMU0UKK0RYX0NPTkRfY2htX1RSVUUKK0RYX0hIQworRFhfRkxBR19jaG0KK0RYX0NPTkRfeG1sX0ZBTFNFCitEWF9DT05EX3htbF9UUlVFCitEWF9GTEFHX3htbAorRFhfQ09ORF9ydGZfRkFMU0UKK0RYX0NPTkRfcnRmX1RSVUUKK0RYX0ZMQUdfcnRmCitEWF9DT05EX21hbl9GQUxTRQorRFhfQ09ORF9tYW5fVFJVRQorRFhfRkxBR19tYW4KK0RYX0NPTkRfZG90X0ZBTFNFCitEWF9DT05EX2RvdF9UUlVFCitEWF9ET1QKK0RYX0ZMQUdfZG90CitEWF9DT05EX2RvY19GQUxTRQorRFhfQ09ORF9kb2NfVFJVRQorRFhfUEVSTAorRFhfRE9YWUdFTgorRFhfRkxBR19kb2MKK0RYX0VOVgorRFhfRE9DRElSCitEWF9DT05GSUcKK0RYX1BST0pFQ1QKK2ludGVyZmFjZXNkaXIKK2F2YWhpX3NvY2tldAorYXZhaGlfcnVudGltZV9kaXIKK0FWQUhJX0FVVE9JUERfR1JPVVAKK0FWQUhJX0FVVE9JUERfVVNFUgorQVZBSElfUFJJVl9BQ0NFU1NfR1JPVVAKK0FWQUhJX0dST1VQCitBVkFISV9VU0VSCitFTkFCTEVfQVVUT0lQRF9GQUxTRQorRU5BQkxFX0FVVE9JUERfVFJVRQorSEFWRV9NT05PRE9DX0ZBTFNFCitIQVZFX01PTk9ET0NfVFJVRQorTU9OT0RPQ19ESVIKK01EQVNTRU1CTEVSCitNT05PRE9DRVIKK01PTk9ET0NfTElCUworTU9OT0RPQ19DRkxBR1MKK0hBVkVfTU9OT19GQUxTRQorSEFWRV9NT05PX1RSVUUKK0dBQ1VUSUwKK01DUworSEFWRV9QWVRIT05fREJVU19GQUxTRQorSEFWRV9QWVRIT05fREJVU19UUlVFCitIQVZFX1BZR1RLX0ZBTFNFCitIQVZFX1BZR1RLX1RSVUUKK0hBVkVfUFlUSE9OX0ZBTFNFCitIQVZFX1BZVEhPTl9UUlVFCitwa2dweWV4ZWNkaXIKK3B5ZXhlY2RpcgorcGtncHl0aG9uZGlyCitweXRob25kaXIKK1BZVEhPTl9QTEFURk9STQorUFlUSE9OX0VYRUNfUFJFRklYCitQWVRIT05fUFJFRklYCitQWVRIT05fVkVSU0lPTgorUFlUSE9OCitIQVZFX0xJQkRBRU1PTl9GQUxTRQorSEFWRV9MSUJEQUVNT05fVFJVRQorTElCREFFTU9OX0xJQlMKK0xJQkRBRU1PTl9DRkxBR1MKK0hBVkVfREJNX0ZBTFNFCitIQVZFX0RCTV9UUlVFCitIQVZFX0dEQk1fRkFMU0UKK0hBVkVfR0RCTV9UUlVFCitIQVZFX1hNTF9GQUxTRQorSEFWRV9YTUxfVFJVRQorWE1MX0NGTEFHUworWE1MX0xJQlMKK0hBVkVfREJVU19GQUxTRQorSEFWRV9EQlVTX1RSVUUKK0RCVVNfU1lTVEVNX0JVU19ERUZBVUxUX0FERFJFU1MKK0RCVVNfU1lTX0RJUgorREJVU19MSUJTCitEQlVTX0NGTEFHUworSEFWRV9HVEsyT1IzX0ZBTFNFCitIQVZFX0dUSzJPUjNfVFJVRQorSEFWRV9HVEszX0ZBTFNFCitIQVZFX0dUSzNfVFJVRQorR1RLMzBfTElCUworR1RLMzBfQ0ZMQUdTCitIQVZFX0dUS19GQUxTRQorSEFWRV9HVEtfVFJVRQorR1RLMjBfTElCUworR1RLMjBfQ0ZMQUdTCitIQVZFX1FUNF9GQUxTRQorSEFWRV9RVDRfVFJVRQorTU9DX1FUNAorUVQ0X0xJQlMKK1FUNF9DRkxBR1MKK0hBVkVfUVQzX0ZBTFNFCitIQVZFX1FUM19UUlVFCitNT0NfUVQzCitRVDNfTElCUworUVQzX0NGTEFHUworSEFWRV9JTlRST1NQRUNUSU9OX0ZBTFNFCitIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRQorSU5UUk9TUEVDVElPTl9NQUtFRklMRQorSU5UUk9TUEVDVElPTl9MSUJTCitJTlRST1NQRUNUSU9OX0NGTEFHUworSU5UUk9TUEVDVElPTl9UWVBFTElCRElSCitJTlRST1NQRUNUSU9OX0dJUkRJUgorSU5UUk9TUEVDVElPTl9HRU5FUkFURQorSU5UUk9TUEVDVElPTl9DT01QSUxFUgorSU5UUk9TUEVDVElPTl9TQ0FOTkVSCitIQVZFX0dPQkpFQ1RfRkFMU0UKK0hBVkVfR09CSkVDVF9UUlVFCitHT0JKRUNUX0xJQlMKK0dPQkpFQ1RfQ0ZMQUdTCitIQVZFX0dMSUJfRkFMU0UKK0hBVkVfR0xJQl9UUlVFCitHTElCMjBfTElCUworR0xJQjIwX0NGTEFHUworUEtHX0NPTkZJR19MSUJESVIKK1BLR19DT05GSUdfUEFUSAorUEtHX0NPTkZJRworaGF2ZV9wa2dfY29uZmlnCithdmFoaWxvY2FsZWRpcgorTUtJTlNUQUxMRElSUworUE9TVUIKK1BPRklMRVMKK1BPX0lOX0RBVEFESVJfRkFMU0UKK1BPX0lOX0RBVEFESVJfVFJVRQorSU5UTExJQlMKK0lOU1RPQkpFWFQKK0dNT0ZJTEVTCitDQVRPQkpFWFQKK0NBVEFMT0dTCitNU0dGTVRfT1BUUworR0VUVEVYVF9QQUNLQUdFCitEQVRBRElSTkFNRQorQUxMX0xJTkdVQVMKK0lOVExUT09MX1BFUkwKK0dNU0dGTVQKK01TR0ZNVAorTVNHTUVSR0UKK1hHRVRURVhUCitJTlRMVE9PTF9QT0xJQ1lfUlVMRQorSU5UTFRPT0xfU0VSVklDRV9SVUxFCitJTlRMVE9PTF9USEVNRV9SVUxFCitJTlRMVE9PTF9TQ0hFTUFTX1JVTEUKK0lOVExUT09MX0NBVkVTX1JVTEUKK0lOVExUT09MX1hNTF9OT01FUkdFX1JVTEUKK0lOVExUT09MX1hNTF9SVUxFCitJTlRMVE9PTF9LQkRfUlVMRQorSU5UTFRPT0xfWEFNX1JVTEUKK0lOVExUT09MX1VJX1JVTEUKK0lOVExUT09MX1NPVU5ETElTVF9SVUxFCitJTlRMVE9PTF9TSEVFVF9SVUxFCitJTlRMVE9PTF9TRVJWRVJfUlVMRQorSU5UTFRPT0xfUE9OR19SVUxFCitJTlRMVE9PTF9PQUZfUlVMRQorSU5UTFRPT0xfUFJPUF9SVUxFCitJTlRMVE9PTF9LRVlTX1JVTEUKK0lOVExUT09MX0RJUkVDVE9SWV9SVUxFCitJTlRMVE9PTF9ERVNLVE9QX1JVTEUKK0lOVExUT09MX0VYVFJBQ1QKK0lOVExUT09MX01FUkdFCitJTlRMVE9PTF9VUERBVEUKK1VTRV9OTFMKK0hBVkVfS1FVRVVFX0ZBTFNFCitIQVZFX0tRVUVVRV9UUlVFCitIQVZFX0lOT1RJRllfRkFMU0UKK0hBVkVfSU5PVElGWV9UUlVFCitIQVZFX0RMT1BFTl9GQUxTRQorSEFWRV9ETE9QRU5fVFJVRQorRU5BQkxFX0NIUk9PVF9GQUxTRQorRU5BQkxFX0NIUk9PVF9UUlVFCitWSVNJQklMSVRZX0hJRERFTl9DRkxBR1MKK0xJQk9CSlMKK1RBUkdFVF9TTEFDS1dBUkVfRkFMU0UKK1RBUkdFVF9TTEFDS1dBUkVfVFJVRQorVEFSR0VUX0ZSRUVCU0RfRkFMU0UKK1RBUkdFVF9GUkVFQlNEX1RSVUUKK1RBUkdFVF9ORVRCU0RfRkFMU0UKK1RBUkdFVF9ORVRCU0RfVFJVRQorVEFSR0VUX0RBUldJTl9GQUxTRQorVEFSR0VUX0RBUldJTl9UUlVFCitUQVJHRVRfTUFORFJJVkFfRkFMU0UKK1RBUkdFVF9NQU5EUklWQV9UUlVFCitUQVJHRVRfRkVET1JBX0ZBTFNFCitUQVJHRVRfRkVET1JBX1RSVUUKK1RBUkdFVF9BUkNITElOVVhfRkFMU0UKK1RBUkdFVF9BUkNITElOVVhfVFJVRQorVEFSR0VUX0RFQklBTl9GQUxTRQorVEFSR0VUX0RFQklBTl9UUlVFCitUQVJHRVRfR0VOVE9PX0ZBTFNFCitUQVJHRVRfR0VOVE9PX1RSVUUKK1RBUkdFVF9TVVNFX0ZBTFNFCitUQVJHRVRfU1VTRV9UUlVFCitUQVJHRVRfTEZTX0ZBTFNFCitUQVJHRVRfTEZTX1RSVUUKK0hBVkVfU1lTX1NZU0NUTF9IX0ZBTFNFCitIQVZFX1NZU19TWVNDVExfSF9UUlVFCitIQVZFX1NZU19GSUxJT19IX0ZBTFNFCitIQVZFX1NZU19GSUxJT19IX1RSVUUKK0hBVkVfUEZfUk9VVEVfRkFMU0UKK0hBVkVfUEZfUk9VVEVfVFJVRQorSEFWRV9ORVRMSU5LX0ZBTFNFCitIQVZFX05FVExJTktfVFJVRQorUFRIUkVBRF9DRkxBR1MKK1BUSFJFQURfTElCUworUFRIUkVBRF9DQworYWN4X3B0aHJlYWRfY29uZmlnCitDWFhDUFAKK09UT09MNjQKK09UT09MCitMSVBPCitOTUVESVQKK0RTWU1VVElMCitNQU5JRkVTVF9UT09MCitSQU5MSUIKK2FjX2N0X0FSCitBUgorRExMVE9PTAorT0JKRFVNUAorTk0KK2FjX2N0X0RVTVBCSU4KK0RVTVBCSU4KK0xECitGR1JFUAorU0VECitMSUJUT09MCitMTl9TCitFR1JFUAorR1JFUAorQ1BQCithbV9fZmFzdGRlcENYWF9GQUxTRQorYW1fX2Zhc3RkZXBDWFhfVFJVRQorQ1hYREVQTU9ERQorYWNfY3RfQ1hYCitDWFhGTEFHUworQ1hYCithbV9fZmFzdGRlcENDX0ZBTFNFCithbV9fZmFzdGRlcENDX1RSVUUKK0NDREVQTU9ERQorYW1fX25vZGVwCitBTURFUEJBQ0tTTEFTSAorQU1ERVBfRkFMU0UKK0FNREVQX1RSVUUKK2FtX19xdW90ZQorYW1fX2luY2x1ZGUKK0RFUERJUgorT0JKRVhUCitFWEVFWFQKK2FjX2N0X0NDCitDUFBGTEFHUworTERGTEFHUworQ0ZMQUdTCitDQworU1RPVworaG9zdF9vcworaG9zdF92ZW5kb3IKK2hvc3RfY3B1Citob3N0CitidWlsZF9vcworYnVpbGRfdmVuZG9yCitidWlsZF9jcHUKK2J1aWxkCitIT1dMX0NPTVBBVF9WRVJTSU9OCitMSUJBVkFISV9DT01QQVRfSE9XTF9WRVJTSU9OX0lORk8KK0xJQkFWQUhJX0NPTVBBVF9MSUJETlNfU0RfVkVSU0lPTl9JTkZPCitMSUJBVkFISV9VSV9WRVJTSU9OX0lORk8KK0xJQkFWQUhJX1FUNF9WRVJTSU9OX0lORk8KK0xJQkFWQUhJX1FUM19WRVJTSU9OX0lORk8KK0xJQkFWQUhJX0dPQkpFQ1RfVkVSU0lPTl9JTkZPCitMSUJBVkFISV9HTElCX1ZFUlNJT05fSU5GTworTElCQVZBSElfQ0xJRU5UX1ZFUlNJT05fSU5GTworTElCQVZBSElfQ09SRV9WRVJTSU9OX0lORk8KK0xJQkFWQUhJX0NPTU1PTl9WRVJTSU9OX0lORk8KK0FNX0JBQ0tTTEFTSAorQU1fREVGQVVMVF9WRVJCT1NJVFkKK0FNX0RFRkFVTFRfVgorQU1fVgorYW1fX3VudGFyCithbV9fdGFyCitBTVRBUgorYW1fX2xlYWRpbmdfZG90CitTRVRfTUFLRQorQVdLCitta2Rpcl9wCitNS0RJUl9QCitJTlNUQUxMX1NUUklQX1BST0dSQU0KK1NUUklQCitpbnN0YWxsX3NoCitNQUtFSU5GTworQVVUT0hFQURFUgorQVVUT01BS0UKK0FVVE9DT05GCitBQ0xPQ0FMCitWRVJTSU9OCitQQUNLQUdFCitDWUdQQVRIX1cKK2FtX19pc3JjCitJTlNUQUxMX0RBVEEKK0lOU1RBTExfU0NSSVBUCitJTlNUQUxMX1BST0dSQU0KK3RhcmdldF9hbGlhcworaG9zdF9hbGlhcworYnVpbGRfYWxpYXMKK0xJQlMKK0VDSE9fVAorRUNIT19OCitFQ0hPX0MKK0RFRlMKK21hbmRpcgorbG9jYWxlZGlyCitsaWJkaXIKK3BzZGlyCitwZGZkaXIKK2R2aWRpcgoraHRtbGRpcgoraW5mb2RpcgorZG9jZGlyCitvbGRpbmNsdWRlZGlyCitpbmNsdWRlZGlyCitsb2NhbHN0YXRlZGlyCitzaGFyZWRzdGF0ZWRpcgorc3lzY29uZmRpcgorZGF0YWRpcgorZGF0YXJvb3RkaXIKK2xpYmV4ZWNkaXIKK3NiaW5kaXIKK2JpbmRpcgorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZQorcHJlZml4CitleGVjX3ByZWZpeAorUEFDS0FHRV9VUkwKK1BBQ0tBR0VfQlVHUkVQT1JUCitQQUNLQUdFX1NUUklORworUEFDS0FHRV9WRVJTSU9OCitQQUNLQUdFX1RBUk5BTUUKK1BBQ0tBR0VfTkFNRQorUEFUSF9TRVBBUkFUT1IKK1NIRUxMJworYWNfc3Vic3RfZmlsZXM9JycKK2FjX3VzZXJfb3B0cz0nCitlbmFibGVfb3B0aW9uX2NoZWNraW5nCitlbmFibGVfc2lsZW50X3J1bGVzCitlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZworZW5hYmxlX3N0YWNrX3Byb3RlY3RvcgorZW5hYmxlX3NoYXJlZAorZW5hYmxlX3N0YXRpYword2l0aF9waWMKK2VuYWJsZV9mYXN0X2luc3RhbGwKK3dpdGhfZ251X2xkCit3aXRoX3N5c3Jvb3QKK2VuYWJsZV9saWJ0b29sX2xvY2sKK3dpdGhfZGlzdHJvCitlbmFibGVfbmxzCitlbmFibGVfZ2xpYgorZW5hYmxlX2dvYmplY3QKK2VuYWJsZV9pbnRyb3NwZWN0aW9uCitlbmFibGVfcXQzCitlbmFibGVfcXQ0CitlbmFibGVfZ3RrCitlbmFibGVfZ3RrMworZW5hYmxlX2RidXMKK3dpdGhfZGJ1c19zeXMKK3dpdGhfZGJ1c19zeXN0ZW1fc29ja2V0Cit3aXRoX3htbAorZW5hYmxlX2RibQorZW5hYmxlX2dkYm0KK2VuYWJsZV9saWJkYWVtb24KK2VuYWJsZV9weXRob24KK2VuYWJsZV9weWd0aworZW5hYmxlX3B5dGhvbl9kYnVzCitlbmFibGVfbW9ubworZW5hYmxlX21vbm9kb2MKK2VuYWJsZV9hdXRvaXBkCit3aXRoX2F2YWhpX3VzZXIKK3dpdGhfYXZhaGlfZ3JvdXAKK3dpdGhfYXZhaGlfcHJpdl9hY2Nlc3NfZ3JvdXAKK3dpdGhfYXV0b2lwZF91c2VyCit3aXRoX2F1dG9pcGRfZ3JvdXAKK2VuYWJsZV9kb3h5Z2VuX2RvYworZW5hYmxlX2RveHlnZW5fZG90CitlbmFibGVfZG94eWdlbl9tYW4KK2VuYWJsZV9kb3h5Z2VuX3J0ZgorZW5hYmxlX2RveHlnZW5feG1sCitlbmFibGVfZG94eWdlbl9jaG0KK2VuYWJsZV9kb3h5Z2VuX2NoaQorZW5hYmxlX2RveHlnZW5faHRtbAorZW5hYmxlX2RveHlnZW5fcHMKK2VuYWJsZV9kb3h5Z2VuX3BkZgorZW5hYmxlX2NvcmVfZG9jcworZW5hYmxlX21hbnBhZ2VzCitlbmFibGVfeG1sdG9tYW4KK2VuYWJsZV90ZXN0cworZW5hYmxlX2NvbXBhdF9saWJkbnNfc2QKK2VuYWJsZV9jb21wYXRfaG93bAord2l0aF9zeXN0ZW1kc3lzdGVtdW5pdGRpcgorJworICAgICAgYWNfcHJlY2lvdXNfdmFycz0nYnVpbGRfYWxpYXMKK2hvc3RfYWxpYXMKK3RhcmdldF9hbGlhcworQ0MKK0NGTEFHUworTERGTEFHUworTElCUworQ1BQRkxBR1MKK0NYWAorQ1hYRkxBR1MKK0NDQworQ1BQCitDWFhDUFAKK1BLR19DT05GSUcKK1BLR19DT05GSUdfUEFUSAorUEtHX0NPTkZJR19MSUJESVIKK0dMSUIyMF9DRkxBR1MKK0dMSUIyMF9MSUJTCitHT0JKRUNUX0NGTEFHUworR09CSkVDVF9MSUJTCitRVDNfQ0ZMQUdTCitRVDNfTElCUworUVQ0X0NGTEFHUworUVQ0X0xJQlMKK0dUSzIwX0NGTEFHUworR1RLMjBfTElCUworR1RLMzBfQ0ZMQUdTCitHVEszMF9MSUJTCitEQlVTX0NGTEFHUworREJVU19MSUJTCitMSUJEQUVNT05fQ0ZMQUdTCitMSUJEQUVNT05fTElCUworUFlUSE9OCitNT05PRE9DX0NGTEFHUworTU9OT0RPQ19MSUJTCitET1hZR0VOX1BBUEVSX1NJWkUnCisKKworIyBJbml0aWFsaXplIHNvbWUgdmFyaWFibGVzIHNldCBieSBvcHRpb25zLgorYWNfaW5pdF9oZWxwPQorYWNfaW5pdF92ZXJzaW9uPWZhbHNlCithY191bnJlY29nbml6ZWRfb3B0cz0KK2FjX3VucmVjb2duaXplZF9zZXA9CisjIFRoZSB2YXJpYWJsZXMgaGF2ZSB0aGUgc2FtZSBuYW1lcyBhcyB0aGUgb3B0aW9ucywgd2l0aAorIyBkYXNoZXMgY2hhbmdlZCB0byB1bmRlcmxpbmVzLgorY2FjaGVfZmlsZT0vZGV2L251bGwKK2V4ZWNfcHJlZml4PU5PTkUKK25vX2NyZWF0ZT0KK25vX3JlY3Vyc2lvbj0KK3ByZWZpeD1OT05FCitwcm9ncmFtX3ByZWZpeD1OT05FCitwcm9ncmFtX3N1ZmZpeD1OT05FCitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPXMseCx4LAorc2lsZW50PQorc2l0ZT0KK3NyY2Rpcj0KK3ZlcmJvc2U9Cit4X2luY2x1ZGVzPU5PTkUKK3hfbGlicmFyaWVzPU5PTkUKKworIyBJbnN0YWxsYXRpb24gZGlyZWN0b3J5IG9wdGlvbnMuCisjIFRoZXNlIGFyZSBsZWZ0IHVuZXhwYW5kZWQgc28gdXNlcnMgY2FuICJtYWtlIGluc3RhbGwgZXhlY19wcmVmaXg9L2ZvbyIKKyMgYW5kIGFsbCB0aGUgdmFyaWFibGVzIHRoYXQgYXJlIHN1cHBvc2VkIHRvIGJlIGJhc2VkIG9uIGV4ZWNfcHJlZml4CisjIGJ5IGRlZmF1bHQgd2lsbCBhY3R1YWxseSBjaGFuZ2UuCisjIFVzZSBicmFjZXMgaW5zdGVhZCBvZiBwYXJlbnMgYmVjYXVzZSBzaCwgcGVybCwgZXRjLiBhbHNvIGFjY2VwdCB0aGVtLgorIyAoVGhlIGxpc3QgZm9sbG93cyB0aGUgc2FtZSBvcmRlciBhcyB0aGUgR05VIENvZGluZyBTdGFuZGFyZHMuKQorYmluZGlyPScke2V4ZWNfcHJlZml4fS9iaW4nCitzYmluZGlyPScke2V4ZWNfcHJlZml4fS9zYmluJworbGliZXhlY2Rpcj0nJHtleGVjX3ByZWZpeH0vbGliZXhlYycKK2RhdGFyb290ZGlyPScke3ByZWZpeH0vc2hhcmUnCitkYXRhZGlyPScke2RhdGFyb290ZGlyfScKK3N5c2NvbmZkaXI9JyR7cHJlZml4fS9ldGMnCitzaGFyZWRzdGF0ZWRpcj0nJHtwcmVmaXh9L2NvbScKK2xvY2Fsc3RhdGVkaXI9JyR7cHJlZml4fS92YXInCitpbmNsdWRlZGlyPScke3ByZWZpeH0vaW5jbHVkZScKK29sZGluY2x1ZGVkaXI9Jy91c3IvaW5jbHVkZScKK2RvY2Rpcj0nJHtkYXRhcm9vdGRpcn0vZG9jLyR7UEFDS0FHRV9UQVJOQU1FfScKK2luZm9kaXI9JyR7ZGF0YXJvb3RkaXJ9L2luZm8nCitodG1sZGlyPScke2RvY2Rpcn0nCitkdmlkaXI9JyR7ZG9jZGlyfScKK3BkZmRpcj0nJHtkb2NkaXJ9JworcHNkaXI9JyR7ZG9jZGlyfScKK2xpYmRpcj0nJHtleGVjX3ByZWZpeH0vbGliJworbG9jYWxlZGlyPScke2RhdGFyb290ZGlyfS9sb2NhbGUnCittYW5kaXI9JyR7ZGF0YXJvb3RkaXJ9L21hbicKKworYWNfcHJldj0KK2FjX2Rhc2hkYXNoPQorZm9yIGFjX29wdGlvbgorZG8KKyAgIyBJZiB0aGUgcHJldmlvdXMgb3B0aW9uIG5lZWRzIGFuIGFyZ3VtZW50LCBhc3NpZ24gaXQuCisgIGlmIHRlc3QgLW4gIiRhY19wcmV2IjsgdGhlbgorICAgIGV2YWwgJGFjX3ByZXY9XCRhY19vcHRpb24KKyAgICBhY19wcmV2PQorICAgIGNvbnRpbnVlCisgIGZpCisKKyAgY2FzZSAkYWNfb3B0aW9uIGluCisgICo9PyopIGFjX29wdGFyZz1gZXhwciAiWCRhY19vcHRpb24iIDogJ1tePV0qPVwoLipcKSdgIDs7CisgICo9KSAgIGFjX29wdGFyZz0gOzsKKyAgKikgICAgYWNfb3B0YXJnPXllcyA7OworICBlc2FjCisKKyAgIyBBY2NlcHQgdGhlIGltcG9ydGFudCBDeWdudXMgY29uZmlndXJlIG9wdGlvbnMsIHNvIHdlIGNhbiBkaWFnbm9zZSB0eXBvcy4KKworICBjYXNlICRhY19kYXNoZGFzaCRhY19vcHRpb24gaW4KKyAgLS0pCisgICAgYWNfZGFzaGRhc2g9eWVzIDs7CisKKyAgLWJpbmRpciB8IC0tYmluZGlyIHwgLS1iaW5kaSB8IC0tYmluZCB8IC0tYmluIHwgLS1iaSkKKyAgICBhY19wcmV2PWJpbmRpciA7OworICAtYmluZGlyPSogfCAtLWJpbmRpcj0qIHwgLS1iaW5kaT0qIHwgLS1iaW5kPSogfCAtLWJpbj0qIHwgLS1iaT0qKQorICAgIGJpbmRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWJ1aWxkIHwgLS1idWlsZCB8IC0tYnVpbCB8IC0tYnVpIHwgLS1idSkKKyAgICBhY19wcmV2PWJ1aWxkX2FsaWFzIDs7CisgIC1idWlsZD0qIHwgLS1idWlsZD0qIHwgLS1idWlsPSogfCAtLWJ1aT0qIHwgLS1idT0qKQorICAgIGJ1aWxkX2FsaWFzPSRhY19vcHRhcmcgOzsKKworICAtY2FjaGUtZmlsZSB8IC0tY2FjaGUtZmlsZSB8IC0tY2FjaGUtZmlsIHwgLS1jYWNoZS1maSBcCisgIHwgLS1jYWNoZS1mIHwgLS1jYWNoZS0gfCAtLWNhY2hlIHwgLS1jYWNoIHwgLS1jYWMgfCAtLWNhIHwgLS1jKQorICAgIGFjX3ByZXY9Y2FjaGVfZmlsZSA7OworICAtY2FjaGUtZmlsZT0qIHwgLS1jYWNoZS1maWxlPSogfCAtLWNhY2hlLWZpbD0qIHwgLS1jYWNoZS1maT0qIFwKKyAgfCAtLWNhY2hlLWY9KiB8IC0tY2FjaGUtPSogfCAtLWNhY2hlPSogfCAtLWNhY2g9KiB8IC0tY2FjPSogfCAtLWNhPSogfCAtLWM9KikKKyAgICBjYWNoZV9maWxlPSRhY19vcHRhcmcgOzsKKworICAtLWNvbmZpZy1jYWNoZSB8IC1DKQorICAgIGNhY2hlX2ZpbGU9Y29uZmlnLmNhY2hlIDs7CisKKyAgLWRhdGFkaXIgfCAtLWRhdGFkaXIgfCAtLWRhdGFkaSB8IC0tZGF0YWQpCisgICAgYWNfcHJldj1kYXRhZGlyIDs7CisgIC1kYXRhZGlyPSogfCAtLWRhdGFkaXI9KiB8IC0tZGF0YWRpPSogfCAtLWRhdGFkPSopCisgICAgZGF0YWRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWRhdGFyb290ZGlyIHwgLS1kYXRhcm9vdGRpciB8IC0tZGF0YXJvb3RkaSB8IC0tZGF0YXJvb3RkIHwgLS1kYXRhcm9vdCBcCisgIHwgLS1kYXRhcm9vIHwgLS1kYXRhcm8gfCAtLWRhdGFyKQorICAgIGFjX3ByZXY9ZGF0YXJvb3RkaXIgOzsKKyAgLWRhdGFyb290ZGlyPSogfCAtLWRhdGFyb290ZGlyPSogfCAtLWRhdGFyb290ZGk9KiB8IC0tZGF0YXJvb3RkPSogXAorICB8IC0tZGF0YXJvb3Q9KiB8IC0tZGF0YXJvbz0qIHwgLS1kYXRhcm89KiB8IC0tZGF0YXI9KikKKyAgICBkYXRhcm9vdGRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWRpc2FibGUtKiB8IC0tZGlzYWJsZS0qKQorICAgIGFjX3VzZXJvcHQ9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSpkaXNhYmxlLVwoLipcKSdgCisgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorICAgIGV4cHIgIngkYWNfdXNlcm9wdCIgOiAiLipbXi0rLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisgICAgICBhc19mbl9lcnJvciAkPyAiaW52YWxpZCBmZWF0dXJlIG5hbWU6ICRhY191c2Vyb3B0IgorICAgIGFjX3VzZXJvcHRfb3JpZz0kYWNfdXNlcm9wdAorICAgIGFjX3VzZXJvcHQ9YCRhc19lY2hvICIkYWNfdXNlcm9wdCIgfCBzZWQgJ3MvWy0rLl0vXy9nJ2AKKyAgICBjYXNlICRhY191c2VyX29wdHMgaW4KKyAgICAgICoiCisiZW5hYmxlXyRhY191c2Vyb3B0IgorIiopIDs7CisgICAgICAqKSBhY191bnJlY29nbml6ZWRfb3B0cz0iJGFjX3VucmVjb2duaXplZF9vcHRzJGFjX3VucmVjb2duaXplZF9zZXAtLWRpc2FibGUtJGFjX3VzZXJvcHRfb3JpZyIKKwkgYWNfdW5yZWNvZ25pemVkX3NlcD0nLCAnOzsKKyAgICBlc2FjCisgICAgZXZhbCBlbmFibGVfJGFjX3VzZXJvcHQ9bm8gOzsKKworICAtZG9jZGlyIHwgLS1kb2NkaXIgfCAtLWRvY2RpIHwgLS1kb2MgfCAtLWRvKQorICAgIGFjX3ByZXY9ZG9jZGlyIDs7CisgIC1kb2NkaXI9KiB8IC0tZG9jZGlyPSogfCAtLWRvY2RpPSogfCAtLWRvYz0qIHwgLS1kbz0qKQorICAgIGRvY2Rpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWR2aWRpciB8IC0tZHZpZGlyIHwgLS1kdmlkaSB8IC0tZHZpZCB8IC0tZHZpIHwgLS1kdikKKyAgICBhY19wcmV2PWR2aWRpciA7OworICAtZHZpZGlyPSogfCAtLWR2aWRpcj0qIHwgLS1kdmlkaT0qIHwgLS1kdmlkPSogfCAtLWR2aT0qIHwgLS1kdj0qKQorICAgIGR2aWRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWVuYWJsZS0qIHwgLS1lbmFibGUtKikKKyAgICBhY191c2Vyb3B0PWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qZW5hYmxlLVwoW149XSpcKSdgCisgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorICAgIGV4cHIgIngkYWNfdXNlcm9wdCIgOiAiLipbXi0rLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisgICAgICBhc19mbl9lcnJvciAkPyAiaW52YWxpZCBmZWF0dXJlIG5hbWU6ICRhY191c2Vyb3B0IgorICAgIGFjX3VzZXJvcHRfb3JpZz0kYWNfdXNlcm9wdAorICAgIGFjX3VzZXJvcHQ9YCRhc19lY2hvICIkYWNfdXNlcm9wdCIgfCBzZWQgJ3MvWy0rLl0vXy9nJ2AKKyAgICBjYXNlICRhY191c2VyX29wdHMgaW4KKyAgICAgICoiCisiZW5hYmxlXyRhY191c2Vyb3B0IgorIiopIDs7CisgICAgICAqKSBhY191bnJlY29nbml6ZWRfb3B0cz0iJGFjX3VucmVjb2duaXplZF9vcHRzJGFjX3VucmVjb2duaXplZF9zZXAtLWVuYWJsZS0kYWNfdXNlcm9wdF9vcmlnIgorCSBhY191bnJlY29nbml6ZWRfc2VwPScsICc7OworICAgIGVzYWMKKyAgICBldmFsIGVuYWJsZV8kYWNfdXNlcm9wdD1cJGFjX29wdGFyZyA7OworCisgIC1leGVjLXByZWZpeCB8IC0tZXhlY19wcmVmaXggfCAtLWV4ZWMtcHJlZml4IHwgLS1leGVjLXByZWZpIFwKKyAgfCAtLWV4ZWMtcHJlZiB8IC0tZXhlYy1wcmUgfCAtLWV4ZWMtcHIgfCAtLWV4ZWMtcCB8IC0tZXhlYy0gXAorICB8IC0tZXhlYyB8IC0tZXhlIHwgLS1leCkKKyAgICBhY19wcmV2PWV4ZWNfcHJlZml4IDs7CisgIC1leGVjLXByZWZpeD0qIHwgLS1leGVjX3ByZWZpeD0qIHwgLS1leGVjLXByZWZpeD0qIHwgLS1leGVjLXByZWZpPSogXAorICB8IC0tZXhlYy1wcmVmPSogfCAtLWV4ZWMtcHJlPSogfCAtLWV4ZWMtcHI9KiB8IC0tZXhlYy1wPSogfCAtLWV4ZWMtPSogXAorICB8IC0tZXhlYz0qIHwgLS1leGU9KiB8IC0tZXg9KikKKyAgICBleGVjX3ByZWZpeD0kYWNfb3B0YXJnIDs7CisKKyAgLWdhcyB8IC0tZ2FzIHwgLS1nYSB8IC0tZykKKyAgICAjIE9ic29sZXRlOyB1c2UgLS13aXRoLWdhcy4KKyAgICB3aXRoX2dhcz15ZXMgOzsKKworICAtaGVscCB8IC0taGVscCB8IC0taGVsIHwgLS1oZSB8IC1oKQorICAgIGFjX2luaXRfaGVscD1sb25nIDs7CisgIC1oZWxwPXIqIHwgLS1oZWxwPXIqIHwgLS1oZWw9ciogfCAtLWhlPXIqIHwgLWhyKikKKyAgICBhY19pbml0X2hlbHA9cmVjdXJzaXZlIDs7CisgIC1oZWxwPXMqIHwgLS1oZWxwPXMqIHwgLS1oZWw9cyogfCAtLWhlPXMqIHwgLWhzKikKKyAgICBhY19pbml0X2hlbHA9c2hvcnQgOzsKKworICAtaG9zdCB8IC0taG9zdCB8IC0taG9zIHwgLS1obykKKyAgICBhY19wcmV2PWhvc3RfYWxpYXMgOzsKKyAgLWhvc3Q9KiB8IC0taG9zdD0qIHwgLS1ob3M9KiB8IC0taG89KikKKyAgICBob3N0X2FsaWFzPSRhY19vcHRhcmcgOzsKKworICAtaHRtbGRpciB8IC0taHRtbGRpciB8IC0taHRtbGRpIHwgLS1odG1sZCB8IC0taHRtbCB8IC0taHRtIHwgLS1odCkKKyAgICBhY19wcmV2PWh0bWxkaXIgOzsKKyAgLWh0bWxkaXI9KiB8IC0taHRtbGRpcj0qIHwgLS1odG1sZGk9KiB8IC0taHRtbGQ9KiB8IC0taHRtbD0qIHwgLS1odG09KiBcCisgIHwgLS1odD0qKQorICAgIGh0bWxkaXI9JGFjX29wdGFyZyA7OworCisgIC1pbmNsdWRlZGlyIHwgLS1pbmNsdWRlZGlyIHwgLS1pbmNsdWRlZGkgfCAtLWluY2x1ZGVkIHwgLS1pbmNsdWRlIFwKKyAgfCAtLWluY2x1ZCB8IC0taW5jbHUgfCAtLWluY2wgfCAtLWluYykKKyAgICBhY19wcmV2PWluY2x1ZGVkaXIgOzsKKyAgLWluY2x1ZGVkaXI9KiB8IC0taW5jbHVkZWRpcj0qIHwgLS1pbmNsdWRlZGk9KiB8IC0taW5jbHVkZWQ9KiB8IC0taW5jbHVkZT0qIFwKKyAgfCAtLWluY2x1ZD0qIHwgLS1pbmNsdT0qIHwgLS1pbmNsPSogfCAtLWluYz0qKQorICAgIGluY2x1ZGVkaXI9JGFjX29wdGFyZyA7OworCisgIC1pbmZvZGlyIHwgLS1pbmZvZGlyIHwgLS1pbmZvZGkgfCAtLWluZm9kIHwgLS1pbmZvIHwgLS1pbmYpCisgICAgYWNfcHJldj1pbmZvZGlyIDs7CisgIC1pbmZvZGlyPSogfCAtLWluZm9kaXI9KiB8IC0taW5mb2RpPSogfCAtLWluZm9kPSogfCAtLWluZm89KiB8IC0taW5mPSopCisgICAgaW5mb2Rpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWxpYmRpciB8IC0tbGliZGlyIHwgLS1saWJkaSB8IC0tbGliZCkKKyAgICBhY19wcmV2PWxpYmRpciA7OworICAtbGliZGlyPSogfCAtLWxpYmRpcj0qIHwgLS1saWJkaT0qIHwgLS1saWJkPSopCisgICAgbGliZGlyPSRhY19vcHRhcmcgOzsKKworICAtbGliZXhlY2RpciB8IC0tbGliZXhlY2RpciB8IC0tbGliZXhlY2RpIHwgLS1saWJleGVjZCB8IC0tbGliZXhlYyBcCisgIHwgLS1saWJleGUgfCAtLWxpYmV4IHwgLS1saWJlKQorICAgIGFjX3ByZXY9bGliZXhlY2RpciA7OworICAtbGliZXhlY2Rpcj0qIHwgLS1saWJleGVjZGlyPSogfCAtLWxpYmV4ZWNkaT0qIHwgLS1saWJleGVjZD0qIHwgLS1saWJleGVjPSogXAorICB8IC0tbGliZXhlPSogfCAtLWxpYmV4PSogfCAtLWxpYmU9KikKKyAgICBsaWJleGVjZGlyPSRhY19vcHRhcmcgOzsKKworICAtbG9jYWxlZGlyIHwgLS1sb2NhbGVkaXIgfCAtLWxvY2FsZWRpIHwgLS1sb2NhbGVkIHwgLS1sb2NhbGUpCisgICAgYWNfcHJldj1sb2NhbGVkaXIgOzsKKyAgLWxvY2FsZWRpcj0qIHwgLS1sb2NhbGVkaXI9KiB8IC0tbG9jYWxlZGk9KiB8IC0tbG9jYWxlZD0qIHwgLS1sb2NhbGU9KikKKyAgICBsb2NhbGVkaXI9JGFjX29wdGFyZyA7OworCisgIC1sb2NhbHN0YXRlZGlyIHwgLS1sb2NhbHN0YXRlZGlyIHwgLS1sb2NhbHN0YXRlZGkgfCAtLWxvY2Fsc3RhdGVkIFwKKyAgfCAtLWxvY2Fsc3RhdGUgfCAtLWxvY2Fsc3RhdCB8IC0tbG9jYWxzdGEgfCAtLWxvY2Fsc3QgfCAtLWxvY2FscykKKyAgICBhY19wcmV2PWxvY2Fsc3RhdGVkaXIgOzsKKyAgLWxvY2Fsc3RhdGVkaXI9KiB8IC0tbG9jYWxzdGF0ZWRpcj0qIHwgLS1sb2NhbHN0YXRlZGk9KiB8IC0tbG9jYWxzdGF0ZWQ9KiBcCisgIHwgLS1sb2NhbHN0YXRlPSogfCAtLWxvY2Fsc3RhdD0qIHwgLS1sb2NhbHN0YT0qIHwgLS1sb2NhbHN0PSogfCAtLWxvY2Fscz0qKQorICAgIGxvY2Fsc3RhdGVkaXI9JGFjX29wdGFyZyA7OworCisgIC1tYW5kaXIgfCAtLW1hbmRpciB8IC0tbWFuZGkgfCAtLW1hbmQgfCAtLW1hbiB8IC0tbWEgfCAtLW0pCisgICAgYWNfcHJldj1tYW5kaXIgOzsKKyAgLW1hbmRpcj0qIHwgLS1tYW5kaXI9KiB8IC0tbWFuZGk9KiB8IC0tbWFuZD0qIHwgLS1tYW49KiB8IC0tbWE9KiB8IC0tbT0qKQorICAgIG1hbmRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLW5mcCB8IC0tbmZwIHwgLS1uZikKKyAgICAjIE9ic29sZXRlOyB1c2UgLS13aXRob3V0LWZwLgorICAgIHdpdGhfZnA9bm8gOzsKKworICAtbm8tY3JlYXRlIHwgLS1uby1jcmVhdGUgfCAtLW5vLWNyZWF0IHwgLS1uby1jcmVhIHwgLS1uby1jcmUgXAorICB8IC0tbm8tY3IgfCAtLW5vLWMgfCAtbikKKyAgICBub19jcmVhdGU9eWVzIDs7CisKKyAgLW5vLXJlY3Vyc2lvbiB8IC0tbm8tcmVjdXJzaW9uIHwgLS1uby1yZWN1cnNpbyB8IC0tbm8tcmVjdXJzaSBcCisgIHwgLS1uby1yZWN1cnMgfCAtLW5vLXJlY3VyIHwgLS1uby1yZWN1IHwgLS1uby1yZWMgfCAtLW5vLXJlIHwgLS1uby1yKQorICAgIG5vX3JlY3Vyc2lvbj15ZXMgOzsKKworICAtb2xkaW5jbHVkZWRpciB8IC0tb2xkaW5jbHVkZWRpciB8IC0tb2xkaW5jbHVkZWRpIHwgLS1vbGRpbmNsdWRlZCBcCisgIHwgLS1vbGRpbmNsdWRlIHwgLS1vbGRpbmNsdWQgfCAtLW9sZGluY2x1IHwgLS1vbGRpbmNsIHwgLS1vbGRpbmMgXAorICB8IC0tb2xkaW4gfCAtLW9sZGkgfCAtLW9sZCB8IC0tb2wgfCAtLW8pCisgICAgYWNfcHJldj1vbGRpbmNsdWRlZGlyIDs7CisgIC1vbGRpbmNsdWRlZGlyPSogfCAtLW9sZGluY2x1ZGVkaXI9KiB8IC0tb2xkaW5jbHVkZWRpPSogfCAtLW9sZGluY2x1ZGVkPSogXAorICB8IC0tb2xkaW5jbHVkZT0qIHwgLS1vbGRpbmNsdWQ9KiB8IC0tb2xkaW5jbHU9KiB8IC0tb2xkaW5jbD0qIHwgLS1vbGRpbmM9KiBcCisgIHwgLS1vbGRpbj0qIHwgLS1vbGRpPSogfCAtLW9sZD0qIHwgLS1vbD0qIHwgLS1vPSopCisgICAgb2xkaW5jbHVkZWRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLXByZWZpeCB8IC0tcHJlZml4IHwgLS1wcmVmaSB8IC0tcHJlZiB8IC0tcHJlIHwgLS1wciB8IC0tcCkKKyAgICBhY19wcmV2PXByZWZpeCA7OworICAtcHJlZml4PSogfCAtLXByZWZpeD0qIHwgLS1wcmVmaT0qIHwgLS1wcmVmPSogfCAtLXByZT0qIHwgLS1wcj0qIHwgLS1wPSopCisgICAgcHJlZml4PSRhY19vcHRhcmcgOzsKKworICAtcHJvZ3JhbS1wcmVmaXggfCAtLXByb2dyYW0tcHJlZml4IHwgLS1wcm9ncmFtLXByZWZpIHwgLS1wcm9ncmFtLXByZWYgXAorICB8IC0tcHJvZ3JhbS1wcmUgfCAtLXByb2dyYW0tcHIgfCAtLXByb2dyYW0tcCkKKyAgICBhY19wcmV2PXByb2dyYW1fcHJlZml4IDs7CisgIC1wcm9ncmFtLXByZWZpeD0qIHwgLS1wcm9ncmFtLXByZWZpeD0qIHwgLS1wcm9ncmFtLXByZWZpPSogXAorICB8IC0tcHJvZ3JhbS1wcmVmPSogfCAtLXByb2dyYW0tcHJlPSogfCAtLXByb2dyYW0tcHI9KiB8IC0tcHJvZ3JhbS1wPSopCisgICAgcHJvZ3JhbV9wcmVmaXg9JGFjX29wdGFyZyA7OworCisgIC1wcm9ncmFtLXN1ZmZpeCB8IC0tcHJvZ3JhbS1zdWZmaXggfCAtLXByb2dyYW0tc3VmZmkgfCAtLXByb2dyYW0tc3VmZiBcCisgIHwgLS1wcm9ncmFtLXN1ZiB8IC0tcHJvZ3JhbS1zdSB8IC0tcHJvZ3JhbS1zKQorICAgIGFjX3ByZXY9cHJvZ3JhbV9zdWZmaXggOzsKKyAgLXByb2dyYW0tc3VmZml4PSogfCAtLXByb2dyYW0tc3VmZml4PSogfCAtLXByb2dyYW0tc3VmZmk9KiBcCisgIHwgLS1wcm9ncmFtLXN1ZmY9KiB8IC0tcHJvZ3JhbS1zdWY9KiB8IC0tcHJvZ3JhbS1zdT0qIHwgLS1wcm9ncmFtLXM9KikKKyAgICBwcm9ncmFtX3N1ZmZpeD0kYWNfb3B0YXJnIDs7CisKKyAgLXByb2dyYW0tdHJhbnNmb3JtLW5hbWUgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbWUgXAorICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYSBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS0gXAorICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0gfCAtLXByb2dyYW0tdHJhbnNmb3IgXAorICB8IC0tcHJvZ3JhbS10cmFuc2ZvIHwgLS1wcm9ncmFtLXRyYW5zZiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zIHwgLS1wcm9ncmFtLXRyYW4gXAorICB8IC0tcHJvZ3ItdHJhIHwgLS1wcm9ncmFtLXRyIHwgLS1wcm9ncmFtLXQpCisgICAgYWNfcHJldj1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lIDs7CisgIC1wcm9ncmFtLXRyYW5zZm9ybS1uYW1lPSogfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbWU9KiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW09KiB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmE9KiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uPSogfCAtLXByb2dyYW0tdHJhbnNmb3JtLT0qIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtPSogfCAtLXByb2dyYW0tdHJhbnNmb3I9KiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm89KiB8IC0tcHJvZ3JhbS10cmFuc2Y9KiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zPSogfCAtLXByb2dyYW0tdHJhbj0qIFwKKyAgfCAtLXByb2dyLXRyYT0qIHwgLS1wcm9ncmFtLXRyPSogfCAtLXByb2dyYW0tdD0qKQorICAgIHByb2dyYW1fdHJhbnNmb3JtX25hbWU9JGFjX29wdGFyZyA7OworCisgIC1wZGZkaXIgfCAtLXBkZmRpciB8IC0tcGRmZGkgfCAtLXBkZmQgfCAtLXBkZiB8IC0tcGQpCisgICAgYWNfcHJldj1wZGZkaXIgOzsKKyAgLXBkZmRpcj0qIHwgLS1wZGZkaXI9KiB8IC0tcGRmZGk9KiB8IC0tcGRmZD0qIHwgLS1wZGY9KiB8IC0tcGQ9KikKKyAgICBwZGZkaXI9JGFjX29wdGFyZyA7OworCisgIC1wc2RpciB8IC0tcHNkaXIgfCAtLXBzZGkgfCAtLXBzZCB8IC0tcHMpCisgICAgYWNfcHJldj1wc2RpciA7OworICAtcHNkaXI9KiB8IC0tcHNkaXI9KiB8IC0tcHNkaT0qIHwgLS1wc2Q9KiB8IC0tcHM9KikKKyAgICBwc2Rpcj0kYWNfb3B0YXJnIDs7CisKKyAgLXEgfCAtcXVpZXQgfCAtLXF1aWV0IHwgLS1xdWllIHwgLS1xdWkgfCAtLXF1IHwgLS1xIFwKKyAgfCAtc2lsZW50IHwgLS1zaWxlbnQgfCAtLXNpbGVuIHwgLS1zaWxlIHwgLS1zaWwpCisgICAgc2lsZW50PXllcyA7OworCisgIC1zYmluZGlyIHwgLS1zYmluZGlyIHwgLS1zYmluZGkgfCAtLXNiaW5kIHwgLS1zYmluIHwgLS1zYmkgfCAtLXNiKQorICAgIGFjX3ByZXY9c2JpbmRpciA7OworICAtc2JpbmRpcj0qIHwgLS1zYmluZGlyPSogfCAtLXNiaW5kaT0qIHwgLS1zYmluZD0qIHwgLS1zYmluPSogXAorICB8IC0tc2JpPSogfCAtLXNiPSopCisgICAgc2JpbmRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLXNoYXJlZHN0YXRlZGlyIHwgLS1zaGFyZWRzdGF0ZWRpciB8IC0tc2hhcmVkc3RhdGVkaSBcCisgIHwgLS1zaGFyZWRzdGF0ZWQgfCAtLXNoYXJlZHN0YXRlIHwgLS1zaGFyZWRzdGF0IHwgLS1zaGFyZWRzdGEgXAorICB8IC0tc2hhcmVkc3QgfCAtLXNoYXJlZHMgfCAtLXNoYXJlZCB8IC0tc2hhcmUgfCAtLXNoYXIgXAorICB8IC0tc2hhIHwgLS1zaCkKKyAgICBhY19wcmV2PXNoYXJlZHN0YXRlZGlyIDs7CisgIC1zaGFyZWRzdGF0ZWRpcj0qIHwgLS1zaGFyZWRzdGF0ZWRpcj0qIHwgLS1zaGFyZWRzdGF0ZWRpPSogXAorICB8IC0tc2hhcmVkc3RhdGVkPSogfCAtLXNoYXJlZHN0YXRlPSogfCAtLXNoYXJlZHN0YXQ9KiB8IC0tc2hhcmVkc3RhPSogXAorICB8IC0tc2hhcmVkc3Q9KiB8IC0tc2hhcmVkcz0qIHwgLS1zaGFyZWQ9KiB8IC0tc2hhcmU9KiB8IC0tc2hhcj0qIFwKKyAgfCAtLXNoYT0qIHwgLS1zaD0qKQorICAgIHNoYXJlZHN0YXRlZGlyPSRhY19vcHRhcmcgOzsKKworICAtc2l0ZSB8IC0tc2l0ZSB8IC0tc2l0KQorICAgIGFjX3ByZXY9c2l0ZSA7OworICAtc2l0ZT0qIHwgLS1zaXRlPSogfCAtLXNpdD0qKQorICAgIHNpdGU9JGFjX29wdGFyZyA7OworCisgIC1zcmNkaXIgfCAtLXNyY2RpciB8IC0tc3JjZGkgfCAtLXNyY2QgfCAtLXNyYyB8IC0tc3IpCisgICAgYWNfcHJldj1zcmNkaXIgOzsKKyAgLXNyY2Rpcj0qIHwgLS1zcmNkaXI9KiB8IC0tc3JjZGk9KiB8IC0tc3JjZD0qIHwgLS1zcmM9KiB8IC0tc3I9KikKKyAgICBzcmNkaXI9JGFjX29wdGFyZyA7OworCisgIC1zeXNjb25mZGlyIHwgLS1zeXNjb25mZGlyIHwgLS1zeXNjb25mZGkgfCAtLXN5c2NvbmZkIHwgLS1zeXNjb25mIFwKKyAgfCAtLXN5c2NvbiB8IC0tc3lzY28gfCAtLXN5c2MgfCAtLXN5cyB8IC0tc3kpCisgICAgYWNfcHJldj1zeXNjb25mZGlyIDs7CisgIC1zeXNjb25mZGlyPSogfCAtLXN5c2NvbmZkaXI9KiB8IC0tc3lzY29uZmRpPSogfCAtLXN5c2NvbmZkPSogfCAtLXN5c2NvbmY9KiBcCisgIHwgLS1zeXNjb249KiB8IC0tc3lzY289KiB8IC0tc3lzYz0qIHwgLS1zeXM9KiB8IC0tc3k9KikKKyAgICBzeXNjb25mZGlyPSRhY19vcHRhcmcgOzsKKworICAtdGFyZ2V0IHwgLS10YXJnZXQgfCAtLXRhcmdlIHwgLS10YXJnIHwgLS10YXIgfCAtLXRhIHwgLS10KQorICAgIGFjX3ByZXY9dGFyZ2V0X2FsaWFzIDs7CisgIC10YXJnZXQ9KiB8IC0tdGFyZ2V0PSogfCAtLXRhcmdlPSogfCAtLXRhcmc9KiB8IC0tdGFyPSogfCAtLXRhPSogfCAtLXQ9KikKKyAgICB0YXJnZXRfYWxpYXM9JGFjX29wdGFyZyA7OworCisgIC12IHwgLXZlcmJvc2UgfCAtLXZlcmJvc2UgfCAtLXZlcmJvcyB8IC0tdmVyYm8gfCAtLXZlcmIpCisgICAgdmVyYm9zZT15ZXMgOzsKKworICAtdmVyc2lvbiB8IC0tdmVyc2lvbiB8IC0tdmVyc2lvIHwgLS12ZXJzaSB8IC0tdmVycyB8IC1WKQorICAgIGFjX2luaXRfdmVyc2lvbj06IDs7CisKKyAgLXdpdGgtKiB8IC0td2l0aC0qKQorICAgIGFjX3VzZXJvcHQ9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSp3aXRoLVwoW149XSpcKSdgCisgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorICAgIGV4cHIgIngkYWNfdXNlcm9wdCIgOiAiLipbXi0rLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisgICAgICBhc19mbl9lcnJvciAkPyAiaW52YWxpZCBwYWNrYWdlIG5hbWU6ICRhY191c2Vyb3B0IgorICAgIGFjX3VzZXJvcHRfb3JpZz0kYWNfdXNlcm9wdAorICAgIGFjX3VzZXJvcHQ9YCRhc19lY2hvICIkYWNfdXNlcm9wdCIgfCBzZWQgJ3MvWy0rLl0vXy9nJ2AKKyAgICBjYXNlICRhY191c2VyX29wdHMgaW4KKyAgICAgICoiCisid2l0aF8kYWNfdXNlcm9wdCIKKyIqKSA7OworICAgICAgKikgYWNfdW5yZWNvZ25pemVkX29wdHM9IiRhY191bnJlY29nbml6ZWRfb3B0cyRhY191bnJlY29nbml6ZWRfc2VwLS13aXRoLSRhY191c2Vyb3B0X29yaWciCisJIGFjX3VucmVjb2duaXplZF9zZXA9JywgJzs7CisgICAgZXNhYworICAgIGV2YWwgd2l0aF8kYWNfdXNlcm9wdD1cJGFjX29wdGFyZyA7OworCisgIC13aXRob3V0LSogfCAtLXdpdGhvdXQtKikKKyAgICBhY191c2Vyb3B0PWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qd2l0aG91dC1cKC4qXCknYAorICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KKyAgICBleHByICJ4JGFjX3VzZXJvcHQiIDogIi4qW14tKy5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorICAgICAgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgcGFja2FnZSBuYW1lOiAkYWNfdXNlcm9wdCIKKyAgICBhY191c2Vyb3B0X29yaWc9JGFjX3VzZXJvcHQKKyAgICBhY191c2Vyb3B0PWAkYXNfZWNobyAiJGFjX3VzZXJvcHQiIHwgc2VkICdzL1stKy5dL18vZydgCisgICAgY2FzZSAkYWNfdXNlcl9vcHRzIGluCisgICAgICAqIgorIndpdGhfJGFjX3VzZXJvcHQiCisiKikgOzsKKyAgICAgICopIGFjX3VucmVjb2duaXplZF9vcHRzPSIkYWNfdW5yZWNvZ25pemVkX29wdHMkYWNfdW5yZWNvZ25pemVkX3NlcC0td2l0aG91dC0kYWNfdXNlcm9wdF9vcmlnIgorCSBhY191bnJlY29nbml6ZWRfc2VwPScsICc7OworICAgIGVzYWMKKyAgICBldmFsIHdpdGhfJGFjX3VzZXJvcHQ9bm8gOzsKKworICAtLXgpCisgICAgIyBPYnNvbGV0ZTsgdXNlIC0td2l0aC14LgorICAgIHdpdGhfeD15ZXMgOzsKKworICAteC1pbmNsdWRlcyB8IC0teC1pbmNsdWRlcyB8IC0teC1pbmNsdWRlIHwgLS14LWluY2x1ZCB8IC0teC1pbmNsdSBcCisgIHwgLS14LWluY2wgfCAtLXgtaW5jIHwgLS14LWluIHwgLS14LWkpCisgICAgYWNfcHJldj14X2luY2x1ZGVzIDs7CisgIC14LWluY2x1ZGVzPSogfCAtLXgtaW5jbHVkZXM9KiB8IC0teC1pbmNsdWRlPSogfCAtLXgtaW5jbHVkPSogfCAtLXgtaW5jbHU9KiBcCisgIHwgLS14LWluY2w9KiB8IC0teC1pbmM9KiB8IC0teC1pbj0qIHwgLS14LWk9KikKKyAgICB4X2luY2x1ZGVzPSRhY19vcHRhcmcgOzsKKworICAteC1saWJyYXJpZXMgfCAtLXgtbGlicmFyaWVzIHwgLS14LWxpYnJhcmllIHwgLS14LWxpYnJhcmkgXAorICB8IC0teC1saWJyYXIgfCAtLXgtbGlicmEgfCAtLXgtbGliciB8IC0teC1saWIgfCAtLXgtbGkgfCAtLXgtbCkKKyAgICBhY19wcmV2PXhfbGlicmFyaWVzIDs7CisgIC14LWxpYnJhcmllcz0qIHwgLS14LWxpYnJhcmllcz0qIHwgLS14LWxpYnJhcmllPSogfCAtLXgtbGlicmFyaT0qIFwKKyAgfCAtLXgtbGlicmFyPSogfCAtLXgtbGlicmE9KiB8IC0teC1saWJyPSogfCAtLXgtbGliPSogfCAtLXgtbGk9KiB8IC0teC1sPSopCisgICAgeF9saWJyYXJpZXM9JGFjX29wdGFyZyA7OworCisgIC0qKSBhc19mbl9lcnJvciAkPyAidW5yZWNvZ25pemVkIG9wdGlvbjogXGAkYWNfb3B0aW9uJworVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiIKKyAgICA7OworCisgICo9KikKKyAgICBhY19lbnZ2YXI9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4XChbXj1dKlwpPSdgCisgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorICAgIGNhc2UgJGFjX2VudnZhciBpbiAjKAorICAgICAgJycgfCBbMC05XSogfCAqWyFfJGFzX2NyX2FsbnVtXSogKQorICAgICAgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgdmFyaWFibGUgbmFtZTogXGAkYWNfZW52dmFyJyIgOzsKKyAgICBlc2FjCisgICAgZXZhbCAkYWNfZW52dmFyPVwkYWNfb3B0YXJnCisgICAgZXhwb3J0ICRhY19lbnZ2YXIgOzsKKworICAqKQorICAgICMgRklYTUU6IHNob3VsZCBiZSByZW1vdmVkIGluIGF1dG9jb25mIDMuMC4KKyAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB5b3Ugc2hvdWxkIHVzZSAtLWJ1aWxkLCAtLWhvc3QsIC0tdGFyZ2V0IiA+JjIKKyAgICBleHByICJ4JGFjX29wdGlvbiIgOiAiLipbXi0uXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICAgICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGludmFsaWQgaG9zdCB0eXBlOiAkYWNfb3B0aW9uIiA+JjIKKyAgICA6ICIke2J1aWxkX2FsaWFzPSRhY19vcHRpb259ICR7aG9zdF9hbGlhcz0kYWNfb3B0aW9ufSAke3RhcmdldF9hbGlhcz0kYWNfb3B0aW9ufSIKKyAgICA7OworCisgIGVzYWMKK2RvbmUKKworaWYgdGVzdCAtbiAiJGFjX3ByZXYiOyB0aGVuCisgIGFjX29wdGlvbj0tLWBlY2hvICRhY19wcmV2IHwgc2VkICdzL18vLS9nJ2AKKyAgYXNfZm5fZXJyb3IgJD8gIm1pc3NpbmcgYXJndW1lbnQgdG8gJGFjX29wdGlvbiIKK2ZpCisKK2lmIHRlc3QgLW4gIiRhY191bnJlY29nbml6ZWRfb3B0cyI7IHRoZW4KKyAgY2FzZSAkZW5hYmxlX29wdGlvbl9jaGVja2luZyBpbgorICAgIG5vKSA7OworICAgIGZhdGFsKSBhc19mbl9lcnJvciAkPyAidW5yZWNvZ25pemVkIG9wdGlvbnM6ICRhY191bnJlY29nbml6ZWRfb3B0cyIgOzsKKyAgICAqKSAgICAgJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdW5yZWNvZ25pemVkIG9wdGlvbnM6ICRhY191bnJlY29nbml6ZWRfb3B0cyIgPiYyIDs7CisgIGVzYWMKK2ZpCisKKyMgQ2hlY2sgYWxsIGRpcmVjdG9yeSBhcmd1bWVudHMgZm9yIGNvbnNpc3RlbmN5LgorZm9yIGFjX3ZhciBpbglleGVjX3ByZWZpeCBwcmVmaXggYmluZGlyIHNiaW5kaXIgbGliZXhlY2RpciBkYXRhcm9vdGRpciBcCisJCWRhdGFkaXIgc3lzY29uZmRpciBzaGFyZWRzdGF0ZWRpciBsb2NhbHN0YXRlZGlyIGluY2x1ZGVkaXIgXAorCQlvbGRpbmNsdWRlZGlyIGRvY2RpciBpbmZvZGlyIGh0bWxkaXIgZHZpZGlyIHBkZmRpciBwc2RpciBcCisJCWxpYmRpciBsb2NhbGVkaXIgbWFuZGlyCitkbworICBldmFsIGFjX3ZhbD1cJCRhY192YXIKKyAgIyBSZW1vdmUgdHJhaWxpbmcgc2xhc2hlcy4KKyAgY2FzZSAkYWNfdmFsIGluCisgICAgKi8gKQorICAgICAgYWNfdmFsPWBleHByICJYJGFjX3ZhbCIgOiAnWFwoLipbXi9dXCknIFx8ICJYJGFjX3ZhbCIgOiAnWFwoLipcKSdgCisgICAgICBldmFsICRhY192YXI9XCRhY192YWw7OworICBlc2FjCisgICMgQmUgc3VyZSB0byBoYXZlIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lcy4KKyAgY2FzZSAkYWNfdmFsIGluCisgICAgW1xcLyRdKiB8ID86W1xcL10qICkgIGNvbnRpbnVlOzsKKyAgICBOT05FIHwgJycgKSBjYXNlICRhY192YXIgaW4gKnByZWZpeCApIGNvbnRpbnVlOzsgZXNhYzs7CisgIGVzYWMKKyAgYXNfZm5fZXJyb3IgJD8gImV4cGVjdGVkIGFuIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIGZvciAtLSRhY192YXI6ICRhY192YWwiCitkb25lCisKKyMgVGhlcmUgbWlnaHQgYmUgcGVvcGxlIHdobyBkZXBlbmQgb24gdGhlIG9sZCBicm9rZW4gYmVoYXZpb3I6IGAkaG9zdCcKKyMgdXNlZCB0byBob2xkIHRoZSBhcmd1bWVudCBvZiAtLWhvc3QgZXRjLgorIyBGSVhNRTogVG8gcmVtb3ZlIHNvbWUgZGF5LgorYnVpbGQ9JGJ1aWxkX2FsaWFzCitob3N0PSRob3N0X2FsaWFzCit0YXJnZXQ9JHRhcmdldF9hbGlhcworCisjIEZJWE1FOiBUbyByZW1vdmUgc29tZSBkYXkuCitpZiB0ZXN0ICJ4JGhvc3RfYWxpYXMiICE9IHg7IHRoZW4KKyAgaWYgdGVzdCAieCRidWlsZF9hbGlhcyIgPSB4OyB0aGVuCisgICAgY3Jvc3NfY29tcGlsaW5nPW1heWJlCisgICAgJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogaWYgeW91IHdhbnRlZCB0byBzZXQgdGhlIC0tYnVpbGQgdHlwZSwgZG9uJ3QgdXNlIC0taG9zdC4KKyAgICBJZiBhIGNyb3NzIGNvbXBpbGVyIGlzIGRldGVjdGVkIHRoZW4gY3Jvc3MgY29tcGlsZSBtb2RlIHdpbGwgYmUgdXNlZCIgPiYyCisgIGVsaWYgdGVzdCAieCRidWlsZF9hbGlhcyIgIT0gIngkaG9zdF9hbGlhcyI7IHRoZW4KKyAgICBjcm9zc19jb21waWxpbmc9eWVzCisgIGZpCitmaQorCithY190b29sX3ByZWZpeD0KK3Rlc3QgLW4gIiRob3N0X2FsaWFzIiAmJiBhY190b29sX3ByZWZpeD0kaG9zdF9hbGlhcy0KKwordGVzdCAiJHNpbGVudCIgPSB5ZXMgJiYgZXhlYyA2Pi9kZXYvbnVsbAorCisKK2FjX3B3ZD1gcHdkYCAmJiB0ZXN0IC1uICIkYWNfcHdkIiAmJgorYWNfbHNfZGk9YGxzIC1kaSAuYCAmJgorYWNfcHdkX2xzX2RpPWBjZCAiJGFjX3B3ZCIgJiYgbHMgLWRpIC5gIHx8CisgIGFzX2ZuX2Vycm9yICQ/ICJ3b3JraW5nIGRpcmVjdG9yeSBjYW5ub3QgYmUgZGV0ZXJtaW5lZCIKK3Rlc3QgIlgkYWNfbHNfZGkiID0gIlgkYWNfcHdkX2xzX2RpIiB8fAorICBhc19mbl9lcnJvciAkPyAicHdkIGRvZXMgbm90IHJlcG9ydCBuYW1lIG9mIHdvcmtpbmcgZGlyZWN0b3J5IgorCisKKyMgRmluZCB0aGUgc291cmNlIGZpbGVzLCBpZiBsb2NhdGlvbiB3YXMgbm90IHNwZWNpZmllZC4KK2lmIHRlc3QgLXogIiRzcmNkaXIiOyB0aGVuCisgIGFjX3NyY2Rpcl9kZWZhdWx0ZWQ9eWVzCisgICMgVHJ5IHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGlzIHNjcmlwdCwgdGhlbiB0aGUgcGFyZW50IGRpcmVjdG9yeS4KKyAgYWNfY29uZmRpcj1gJGFzX2Rpcm5hbWUgLS0gIiRhc19teXNlbGYiIHx8CiskYXNfZXhwciBYIiRhc19teXNlbGYiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGFzX215c2VsZiIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYXNfbXlzZWxmIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRhc19teXNlbGYiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWCIkYXNfbXlzZWxmIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2AKKyAgc3JjZGlyPSRhY19jb25mZGlyCisgIGlmIHRlc3QgISAtciAiJHNyY2Rpci8kYWNfdW5pcXVlX2ZpbGUiOyB0aGVuCisgICAgc3JjZGlyPS4uCisgIGZpCitlbHNlCisgIGFjX3NyY2Rpcl9kZWZhdWx0ZWQ9bm8KK2ZpCitpZiB0ZXN0ICEgLXIgIiRzcmNkaXIvJGFjX3VuaXF1ZV9maWxlIjsgdGhlbgorICB0ZXN0ICIkYWNfc3JjZGlyX2RlZmF1bHRlZCIgPSB5ZXMgJiYgc3JjZGlyPSIkYWNfY29uZmRpciBvciAuLiIKKyAgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBmaW5kIHNvdXJjZXMgKCRhY191bmlxdWVfZmlsZSkgaW4gJHNyY2RpciIKK2ZpCithY19tc2c9InNvdXJjZXMgYXJlIGluICRzcmNkaXIsIGJ1dCBcYGNkICRzcmNkaXInIGRvZXMgbm90IHdvcmsiCithY19hYnNfY29uZmRpcj1gKAorCWNkICIkc3JjZGlyIiAmJiB0ZXN0IC1yICIuLyRhY191bmlxdWVfZmlsZSIgfHwgYXNfZm5fZXJyb3IgJD8gIiRhY19tc2ciCisJcHdkKWAKKyMgV2hlbiBidWlsZGluZyBpbiBwbGFjZSwgc2V0IHNyY2Rpcj0uCitpZiB0ZXN0ICIkYWNfYWJzX2NvbmZkaXIiID0gIiRhY19wd2QiOyB0aGVuCisgIHNyY2Rpcj0uCitmaQorIyBSZW1vdmUgdW5uZWNlc3NhcnkgdHJhaWxpbmcgc2xhc2hlcyBmcm9tIHNyY2Rpci4KKyMgRG91YmxlIHNsYXNoZXMgaW4gZmlsZSBuYW1lcyBpbiBvYmplY3QgZmlsZSBkZWJ1Z2dpbmcgaW5mbworIyBtZXNzIHVwIE0teCBnZGIgaW4gRW1hY3MuCitjYXNlICRzcmNkaXIgaW4KKyovKSBzcmNkaXI9YGV4cHIgIlgkc3JjZGlyIiA6ICdYXCguKlteL11cKScgXHwgIlgkc3JjZGlyIiA6ICdYXCguKlwpJ2A7OworZXNhYworZm9yIGFjX3ZhciBpbiAkYWNfcHJlY2lvdXNfdmFyczsgZG8KKyAgZXZhbCBhY19lbnZfJHthY192YXJ9X3NldD1cJHske2FjX3Zhcn0rc2V0fQorICBldmFsIGFjX2Vudl8ke2FjX3Zhcn1fdmFsdWU9XCQke2FjX3Zhcn0KKyAgZXZhbCBhY19jdl9lbnZfJHthY192YXJ9X3NldD1cJHske2FjX3Zhcn0rc2V0fQorICBldmFsIGFjX2N2X2Vudl8ke2FjX3Zhcn1fdmFsdWU9XCQke2FjX3Zhcn0KK2RvbmUKKworIworIyBSZXBvcnQgdGhlIC0taGVscCBtZXNzYWdlLgorIworaWYgdGVzdCAiJGFjX2luaXRfaGVscCIgPSAibG9uZyI7IHRoZW4KKyAgIyBPbWl0IHNvbWUgaW50ZXJuYWwgb3Igb2Jzb2xldGUgb3B0aW9ucyB0byBtYWtlIHRoZSBsaXN0IGxlc3MgaW1wb3NpbmcuCisgICMgVGhpcyBtZXNzYWdlIGlzIHRvbyBsb25nIHRvIGJlIGEgc3RyaW5nIGluIHRoZSBBL1VYIDMuMSBzaC4KKyAgY2F0IDw8X0FDRU9GCitcYGNvbmZpZ3VyZScgY29uZmlndXJlcyBhdmFoaSAwLjYuMzEgdG8gYWRhcHQgdG8gbWFueSBraW5kcyBvZiBzeXN0ZW1zLgorCitVc2FnZTogJDAgW09QVElPTl0uLi4gW1ZBUj1WQUxVRV0uLi4KKworVG8gYXNzaWduIGVudmlyb25tZW50IHZhcmlhYmxlcyAoZS5nLiwgQ0MsIENGTEFHUy4uLiksIHNwZWNpZnkgdGhlbSBhcworVkFSPVZBTFVFLiAgU2VlIGJlbG93IGZvciBkZXNjcmlwdGlvbnMgb2Ygc29tZSBvZiB0aGUgdXNlZnVsIHZhcmlhYmxlcy4KKworRGVmYXVsdHMgZm9yIHRoZSBvcHRpb25zIGFyZSBzcGVjaWZpZWQgaW4gYnJhY2tldHMuCisKK0NvbmZpZ3VyYXRpb246CisgIC1oLCAtLWhlbHAgICAgICAgICAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0CisgICAgICAtLWhlbHA9c2hvcnQgICAgICAgIGRpc3BsYXkgb3B0aW9ucyBzcGVjaWZpYyB0byB0aGlzIHBhY2thZ2UKKyAgICAgIC0taGVscD1yZWN1cnNpdmUgICAgZGlzcGxheSB0aGUgc2hvcnQgaGVscCBvZiBhbGwgdGhlIGluY2x1ZGVkIHBhY2thZ2VzCisgIC1WLCAtLXZlcnNpb24gICAgICAgICAgIGRpc3BsYXkgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdAorICAtcSwgLS1xdWlldCwgLS1zaWxlbnQgICBkbyBub3QgcHJpbnQgXGBjaGVja2luZyAuLi4nIG1lc3NhZ2VzCisgICAgICAtLWNhY2hlLWZpbGU9RklMRSAgIGNhY2hlIHRlc3QgcmVzdWx0cyBpbiBGSUxFIFtkaXNhYmxlZF0KKyAgLUMsIC0tY29uZmlnLWNhY2hlICAgICAgYWxpYXMgZm9yIFxgLS1jYWNoZS1maWxlPWNvbmZpZy5jYWNoZScKKyAgLW4sIC0tbm8tY3JlYXRlICAgICAgICAgZG8gbm90IGNyZWF0ZSBvdXRwdXQgZmlsZXMKKyAgICAgIC0tc3JjZGlyPURJUiAgICAgICAgZmluZCB0aGUgc291cmNlcyBpbiBESVIgW2NvbmZpZ3VyZSBkaXIgb3IgXGAuLiddCisKK0luc3RhbGxhdGlvbiBkaXJlY3RvcmllczoKKyAgLS1wcmVmaXg9UFJFRklYICAgICAgICAgaW5zdGFsbCBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZmlsZXMgaW4gUFJFRklYCisgICAgICAgICAgICAgICAgICAgICAgICAgIFskYWNfZGVmYXVsdF9wcmVmaXhdCisgIC0tZXhlYy1wcmVmaXg9RVBSRUZJWCAgIGluc3RhbGwgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBmaWxlcyBpbiBFUFJFRklYCisgICAgICAgICAgICAgICAgICAgICAgICAgIFtQUkVGSVhdCisKK0J5IGRlZmF1bHQsIFxgbWFrZSBpbnN0YWxsJyB3aWxsIGluc3RhbGwgYWxsIHRoZSBmaWxlcyBpbgorXGAkYWNfZGVmYXVsdF9wcmVmaXgvYmluJywgXGAkYWNfZGVmYXVsdF9wcmVmaXgvbGliJyBldGMuICBZb3UgY2FuIHNwZWNpZnkKK2FuIGluc3RhbGxhdGlvbiBwcmVmaXggb3RoZXIgdGhhbiBcYCRhY19kZWZhdWx0X3ByZWZpeCcgdXNpbmcgXGAtLXByZWZpeCcsCitmb3IgaW5zdGFuY2UgXGAtLXByZWZpeD1cJEhPTUUnLgorCitGb3IgYmV0dGVyIGNvbnRyb2wsIHVzZSB0aGUgb3B0aW9ucyBiZWxvdy4KKworRmluZSB0dW5pbmcgb2YgdGhlIGluc3RhbGxhdGlvbiBkaXJlY3RvcmllczoKKyAgLS1iaW5kaXI9RElSICAgICAgICAgICAgdXNlciBleGVjdXRhYmxlcyBbRVBSRUZJWC9iaW5dCisgIC0tc2JpbmRpcj1ESVIgICAgICAgICAgIHN5c3RlbSBhZG1pbiBleGVjdXRhYmxlcyBbRVBSRUZJWC9zYmluXQorICAtLWxpYmV4ZWNkaXI9RElSICAgICAgICBwcm9ncmFtIGV4ZWN1dGFibGVzIFtFUFJFRklYL2xpYmV4ZWNdCisgIC0tc3lzY29uZmRpcj1ESVIgICAgICAgIHJlYWQtb25seSBzaW5nbGUtbWFjaGluZSBkYXRhIFtQUkVGSVgvZXRjXQorICAtLXNoYXJlZHN0YXRlZGlyPURJUiAgICBtb2RpZmlhYmxlIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBkYXRhIFtQUkVGSVgvY29tXQorICAtLWxvY2Fsc3RhdGVkaXI9RElSICAgICBtb2RpZmlhYmxlIHNpbmdsZS1tYWNoaW5lIGRhdGEgW1BSRUZJWC92YXJdCisgIC0tbGliZGlyPURJUiAgICAgICAgICAgIG9iamVjdCBjb2RlIGxpYnJhcmllcyBbRVBSRUZJWC9saWJdCisgIC0taW5jbHVkZWRpcj1ESVIgICAgICAgIEMgaGVhZGVyIGZpbGVzIFtQUkVGSVgvaW5jbHVkZV0KKyAgLS1vbGRpbmNsdWRlZGlyPURJUiAgICAgQyBoZWFkZXIgZmlsZXMgZm9yIG5vbi1nY2MgWy91c3IvaW5jbHVkZV0KKyAgLS1kYXRhcm9vdGRpcj1ESVIgICAgICAgcmVhZC1vbmx5IGFyY2guLWluZGVwZW5kZW50IGRhdGEgcm9vdCBbUFJFRklYL3NoYXJlXQorICAtLWRhdGFkaXI9RElSICAgICAgICAgICByZWFkLW9ubHkgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGRhdGEgW0RBVEFST09URElSXQorICAtLWluZm9kaXI9RElSICAgICAgICAgICBpbmZvIGRvY3VtZW50YXRpb24gW0RBVEFST09URElSL2luZm9dCisgIC0tbG9jYWxlZGlyPURJUiAgICAgICAgIGxvY2FsZS1kZXBlbmRlbnQgZGF0YSBbREFUQVJPT1RESVIvbG9jYWxlXQorICAtLW1hbmRpcj1ESVIgICAgICAgICAgICBtYW4gZG9jdW1lbnRhdGlvbiBbREFUQVJPT1RESVIvbWFuXQorICAtLWRvY2Rpcj1ESVIgICAgICAgICAgICBkb2N1bWVudGF0aW9uIHJvb3QgW0RBVEFST09URElSL2RvYy9hdmFoaV0KKyAgLS1odG1sZGlyPURJUiAgICAgICAgICAgaHRtbCBkb2N1bWVudGF0aW9uIFtET0NESVJdCisgIC0tZHZpZGlyPURJUiAgICAgICAgICAgIGR2aSBkb2N1bWVudGF0aW9uIFtET0NESVJdCisgIC0tcGRmZGlyPURJUiAgICAgICAgICAgIHBkZiBkb2N1bWVudGF0aW9uIFtET0NESVJdCisgIC0tcHNkaXI9RElSICAgICAgICAgICAgIHBzIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KK19BQ0VPRgorCisgIGNhdCA8PFxfQUNFT0YKKworUHJvZ3JhbSBuYW1lczoKKyAgLS1wcm9ncmFtLXByZWZpeD1QUkVGSVggICAgICAgICAgICBwcmVwZW5kIFBSRUZJWCB0byBpbnN0YWxsZWQgcHJvZ3JhbSBuYW1lcworICAtLXByb2dyYW0tc3VmZml4PVNVRkZJWCAgICAgICAgICAgIGFwcGVuZCBTVUZGSVggdG8gaW5zdGFsbGVkIHByb2dyYW0gbmFtZXMKKyAgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW1lPVBST0dSQU0gICBydW4gc2VkIFBST0dSQU0gb24gaW5zdGFsbGVkIHByb2dyYW0gbmFtZXMKKworU3lzdGVtIHR5cGVzOgorICAtLWJ1aWxkPUJVSUxEICAgICBjb25maWd1cmUgZm9yIGJ1aWxkaW5nIG9uIEJVSUxEIFtndWVzc2VkXQorICAtLWhvc3Q9SE9TVCAgICAgICBjcm9zcy1jb21waWxlIHRvIGJ1aWxkIHByb2dyYW1zIHRvIHJ1biBvbiBIT1NUIFtCVUlMRF0KK19BQ0VPRgorZmkKKworaWYgdGVzdCAtbiAiJGFjX2luaXRfaGVscCI7IHRoZW4KKyAgY2FzZSAkYWNfaW5pdF9oZWxwIGluCisgICAgIHNob3J0IHwgcmVjdXJzaXZlICkgZWNobyAiQ29uZmlndXJhdGlvbiBvZiBhdmFoaSAwLjYuMzE6Ijs7CisgICBlc2FjCisgIGNhdCA8PFxfQUNFT0YKKworT3B0aW9uYWwgRmVhdHVyZXM6CisgIC0tZGlzYWJsZS1vcHRpb24tY2hlY2tpbmcgIGlnbm9yZSB1bnJlY29nbml6ZWQgLS1lbmFibGUvLS13aXRoIG9wdGlvbnMKKyAgLS1kaXNhYmxlLUZFQVRVUkUgICAgICAgZG8gbm90IGluY2x1ZGUgRkVBVFVSRSAoc2FtZSBhcyAtLWVuYWJsZS1GRUFUVVJFPW5vKQorICAtLWVuYWJsZS1GRUFUVVJFWz1BUkddICBpbmNsdWRlIEZFQVRVUkUgW0FSRz15ZXNdCisgIC0tZW5hYmxlLXNpbGVudC1ydWxlcyAgICAgICAgICBsZXNzIHZlcmJvc2UgYnVpbGQgb3V0cHV0ICh1bmRvOiBgbWFrZSBWPTEnKQorICAtLWRpc2FibGUtc2lsZW50LXJ1bGVzICAgICAgICAgdmVyYm9zZSBidWlsZCBvdXRwdXQgKHVuZG86IGBtYWtlIFY9MCcpCisgIC0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nICBzcGVlZHMgdXAgb25lLXRpbWUgYnVpbGQKKyAgLS1lbmFibGUtZGVwZW5kZW5jeS10cmFja2luZyAgIGRvIG5vdCByZWplY3Qgc2xvdyBkZXBlbmRlbmN5IGV4dHJhY3RvcnMKKyAgLS1kaXNhYmxlLXN0YWNrLXByb3RlY3RvcgorICAgICAgICAgICAgICAgICAgICAgICAgICBEaXNhYmxlIEdDQydzL2xpYmMncyBzdGFjay1zbWFzaGluZyBwcm90ZWN0aW9uCisgIC0tZW5hYmxlLXNoYXJlZFs9UEtHU10gIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMgW2RlZmF1bHQ9eWVzXQorICAtLWVuYWJsZS1zdGF0aWNbPVBLR1NdICBidWlsZCBzdGF0aWMgbGlicmFyaWVzIFtkZWZhdWx0PXllc10KKyAgLS1lbmFibGUtZmFzdC1pbnN0YWxsWz1QS0dTXQorICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpbWl6ZSBmb3IgZmFzdCBpbnN0YWxsYXRpb24gW2RlZmF1bHQ9eWVzXQorICAtLWRpc2FibGUtbGlidG9vbC1sb2NrICBhdm9pZCBsb2NraW5nIChtaWdodCBicmVhayBwYXJhbGxlbCBidWlsZHMpCisgIC0tZGlzYWJsZS1ubHMgICAgICAgICAgIGRvIG5vdCB1c2UgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKKyAgLS1kaXNhYmxlLWdsaWIgICAgICAgICAgRGlzYWJsZSB1c2Ugb2YgR0xpYgorICAtLWRpc2FibGUtZ29iamVjdCAgICAgICBEaXNhYmxlIHVzZSBvZiBHTGliIEdPYmplY3QKKyAgLS1lbmFibGUtaW50cm9zcGVjdGlvbj1bbm8vYXV0by95ZXNdCisgICAgICAgICAgICAgICAgICAgICAgICAgIEVuYWJsZSBpbnRyb3NwZWN0aW9uIGZvciB0aGlzIGJ1aWxkCisgIC0tZGlzYWJsZS1xdDMgICAgICAgICAgIERpc2FibGUgYnVpbGRpbmcgb2YgUXQzIG1haW5sb29wIGludGVncmF0aW9uCisgIC0tZGlzYWJsZS1xdDQgICAgICAgICAgIERpc2FibGUgYnVpbGRpbmcgb2YgUXQ0Q29yZSBtYWlubG9vcCBpbnRlZ3JhdGlvbgorICAtLWRpc2FibGUtZ3RrICAgICAgICAgICBEaXNhYmxlIHVzZSBvZiBHVEsrIDIKKyAgLS1kaXNhYmxlLWd0azMgICAgICAgICAgRGlzYWJsZSB1c2Ugb2YgR1RLKyAzCisgIC0tZGlzYWJsZS1kYnVzICAgICAgICAgIERpc2FibGUgdXNlIG9mIEQtQnVzCisgIC0tZW5hYmxlLWRibSAgICAgICAgICAgIEVuYWJsZSB1c2Ugb2YgREJNCisgIC0tZGlzYWJsZS1nZGJtICAgICAgICAgIERpc2FibGUgdXNlIG9mIEdEQk0KKyAgLS1kaXNhYmxlLWxpYmRhZW1vbiAgICAgRGlzYWJsZSB1c2Ugb2YgbGliZGFlbW9uCisgIC0tZGlzYWJsZS1weXRob24gICAgICAgIERpc2FibGUgc2NyaXB0cyB0aGF0IGRlcGVuZHMgb24gcHl0aG9uCisgIC0tZGlzYWJsZS1weWd0ayAgICAgICAgIERpc2FibGUgdXNlIG9mIEdUSyBpbiBQeXRob24KKyAgLS1kaXNhYmxlLXB5dGhvbi1kYnVzICAgRGlzYWJsZSB1c2Ugb2YgRC1CdXMgaW4gUHl0aG9uCisgIC0tZGlzYWJsZS1tb25vICAgICAgICAgIERpc2FibGUgbW9ubyBiaW5kaW5ncworICAtLWRpc2FibGUtbW9ub2RvYyAgICAgICBEaXNhYmxlIGRvY3VtZW50YXRpb24gZm9yIG1vbm8gYmluZGluZ3MKKyAgLS1kaXNhYmxlLWF1dG9pcGQgICAgICAgRGlzYWJsZSBidWlsZGluZyBvZiBhdmFoaS1hdXRvaXBkCisgIC0tZGlzYWJsZS1kb3h5Z2VuLWRvYyAgIGRvbid0IGdlbmVyYXRlIGFueSBkb3h5Z2VuIGRvY3VtZW50YXRpb24KKyAgLS1kaXNhYmxlLWRveHlnZW4tZG90ICAgZG9uJ3QgZ2VuZXJhdGUgZ3JhcGhpY3MgZm9yIGRveHlnZW4gZG9jdW1lbnRhdGlvbgorICAtLWVuYWJsZS1kb3h5Z2VuLW1hbiAgICBnZW5lcmF0ZSBkb3h5Z2VuIG1hbnVhbCBwYWdlcworICAtLWVuYWJsZS1kb3h5Z2VuLXJ0ZiAgICBnZW5lcmF0ZSBkb3h5Z2VuIFJURiBkb2N1bWVudGF0aW9uCisgIC0tZGlzYWJsZS1kb3h5Z2VuLXhtbCAgIGRvbid0IGdlbmVyYXRlIGRveHlnZW4gWE1MIGRvY3VtZW50YXRpb24KKyAgLS1lbmFibGUtZG94eWdlbi1jaG0gICAgZ2VuZXJhdGUgZG94eWdlbiBjb21wcmVzc2VkIEhUTUwgaGVscCBkb2N1bWVudGF0aW9uCisgIC0tZW5hYmxlLWRveHlnZW4tY2hpICAgIGdlbmVyYXRlIGRveHlnZW4gc2VwZXJhdGUgY29tcHJlc3NlZCBIVE1MIGhlbHAgaW5kZXgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZQorICAtLWRpc2FibGUtZG94eWdlbi1odG1sICBkb24ndCBnZW5lcmF0ZSBkb3h5Z2VuIHBsYWluIEhUTUwgZG9jdW1lbnRhdGlvbgorICAtLWVuYWJsZS1kb3h5Z2VuLXBzICAgICBnZW5lcmF0ZSBkb3h5Z2VuIFBvc3RTY3JpcHQgZG9jdW1lbnRhdGlvbgorICAtLWVuYWJsZS1kb3h5Z2VuLXBkZiAgICBnZW5lcmF0ZSBkb3h5Z2VuIFBERiBkb2N1bWVudGF0aW9uCisgIC0tZW5hYmxlLWNvcmUtZG9jcyAgICAgIEVuYWJsZSBidWlsZGluZyBvZiBkb2N1bWVudGF0aW9uIGZvciBhdmFoaS1jb3JlCisgIC0tZGlzYWJsZS1tYW5wYWdlcyAgICAgIERpc2FibGUgYnVpbGRpbmcgYW5kIGluc3RhbGxhdGlvbiBvZiBtYW4gcGFnZXMKKyAgLS1kaXNhYmxlLXhtbHRvbWFuICAgICAgRGlzYWJsZSByZWJ1aWxkaW5nIG9mIG1hbiBwYWdlcyB3aXRoIHhtbHRvbWFuCisgIC0tZW5hYmxlLXRlc3RzICAgICAgICAgIEVuYWJsZSBidWlsZGluZyBvZiB0ZXN0cyBhbmQgZXhhbXBsZXMKKyAgLS1lbmFibGUtY29tcGF0LWxpYmRuc19zZAorICAgICAgICAgICAgICAgICAgICAgICAgICBFbmFibGUgY29tcGF0aWJpbGl0eSBsYXllciBmb3IgbGliZG5zX3NkCisgIC0tZW5hYmxlLWNvbXBhdC1ob3dsICAgIEVuYWJsZSBjb21wYXRpYmlsaXR5IGxheWVyIGZvciBIT1dMCisKK09wdGlvbmFsIFBhY2thZ2VzOgorICAtLXdpdGgtUEFDS0FHRVs9QVJHXSAgICB1c2UgUEFDS0FHRSBbQVJHPXllc10KKyAgLS13aXRob3V0LVBBQ0tBR0UgICAgICAgZG8gbm90IHVzZSBQQUNLQUdFIChzYW1lIGFzIC0td2l0aC1QQUNLQUdFPW5vKQorICAtLXdpdGgtcGljWz1QS0dTXSAgICAgICB0cnkgdG8gdXNlIG9ubHkgUElDL25vbi1QSUMgb2JqZWN0cyBbZGVmYXVsdD11c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYm90aF0KKyAgLS13aXRoLWdudS1sZCAgICAgICAgICAgYXNzdW1lIHRoZSBDIGNvbXBpbGVyIHVzZXMgR05VIGxkIFtkZWZhdWx0PW5vXQorICAtLXdpdGgtc3lzcm9vdD1ESVIgU2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzIHdpdGhpbiBESVIKKyAgICAgICAgICAgICAgICAgICAgICAgIChvciB0aGUgY29tcGlsZXIncyBzeXNyb290IGlmIG5vdCBzcGVjaWZpZWQpLgorICAtLXdpdGgtZGlzdHJvPURJU1RSTyAgICBTcGVjaWZ5IHRoZSBkaXN0cmlidXRpb24gdG8gdGFyZ2V0OiBPbmUgb2YgbGZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJpYW4sIGdlbnRvbywgYXJjaGxpbnV4LCBmZWRvcmEsIG1hbmRyaXZhLCBkYXJ3aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGJzZCwgZnJlZWJzZCwgc2xhY2t3YXJlIG9yIG5vbmUKKyAgLS13aXRoLWRidXMtc3lzPTxkaXI+ICAgUGF0aCB0byBELUJ1cyBzeXN0ZW0uZCBkaXJlY3RvcnkKKyAgLS13aXRoLWRidXMtc3lzdGVtLWFkZHJlc3M9PGFkZHJlc3M+CisgICAgICAgICAgICAgICAgICAgICAgICAgIFBhdGggdG8gdGhlIEQtQnVzIHN5c3RlbSBzb2NrZXQsIHlvdSBwcm9iYWJseSB3YW50CisgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHB1dCB1bml4OnBhdGg9IGF0IHRoZSBzdGFydC4gT25seSBuZWVkZWQgZm9yIHZlcnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkIEQtQnVzIHJlbGVhc2VzCisgIC0td2l0aC14bWw9ZXhwYXQvYnNkeG1sL25vbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MIGxpYnJhcnkgdG8gdXNlCisgIC0td2l0aC1hdmFoaS11c2VyPTx1c2VyPgorICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VyIGZvciBydW5uaW5nIGF2YWhpLWRhZW1vbiAoYXZhaGkpCisgIC0td2l0aC1hdmFoaS1ncm91cD08Z3JvdXA+CisgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIGZvciBydW5uaW5nIGF2YWhpLWRhZW1vbiAoYXZhaGkpCisgIC0td2l0aC1hdmFoaS1wcml2LWFjY2Vzcy1ncm91cD08Z3JvdXA+CisgICAgICAgICAgICAgICAgICAgICAgICAgIFByaXZpbGlnZWQgYWNjZXNzIGdyb3VwIGZvciBBdmFoaSBjbGllbnRzIChuZXRkZXYpCisgIC0td2l0aC1hdXRvaXBkLXVzZXI9PHVzZXI+CisgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXIgZm9yIHJ1bm5pbmcgdGhlIGF2YWhpLWF1dG9pcGQgZGFlbW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgIChhdmFoaS1hdXRvaXBkKQorICAtLXdpdGgtYXV0b2lwZC1ncm91cD08Z3JvdXA+CisgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIGZvciBydW5uaW5nIHRoZSBhdmFoaS1hdXRvaXBkIGRhZW1vbgorICAgICAgICAgICAgICAgICAgICAgICAgICAoYXZhaGktYXV0b2lwZCkKKyAgLS13aXRoLXN5c3RlbWRzeXN0ZW11bml0ZGlyPURJUgorICAgICAgICAgICAgICAgICAgICAgICAgICBEaXJlY3RvcnkgZm9yIHN5c3RlbWQgc2VydmljZSBmaWxlcworCitTb21lIGluZmx1ZW50aWFsIGVudmlyb25tZW50IHZhcmlhYmxlczoKKyAgQ0MgICAgICAgICAgQyBjb21waWxlciBjb21tYW5kCisgIENGTEFHUyAgICAgIEMgY29tcGlsZXIgZmxhZ3MKKyAgTERGTEFHUyAgICAgbGlua2VyIGZsYWdzLCBlLmcuIC1MPGxpYiBkaXI+IGlmIHlvdSBoYXZlIGxpYnJhcmllcyBpbiBhCisgICAgICAgICAgICAgIG5vbnN0YW5kYXJkIGRpcmVjdG9yeSA8bGliIGRpcj4KKyAgTElCUyAgICAgICAgbGlicmFyaWVzIHRvIHBhc3MgdG8gdGhlIGxpbmtlciwgZS5nLiAtbDxsaWJyYXJ5PgorICBDUFBGTEFHUyAgICAoT2JqZWN0aXZlKSBDL0MrKyBwcmVwcm9jZXNzb3IgZmxhZ3MsIGUuZy4gLUk8aW5jbHVkZSBkaXI+IGlmCisgICAgICAgICAgICAgIHlvdSBoYXZlIGhlYWRlcnMgaW4gYSBub25zdGFuZGFyZCBkaXJlY3RvcnkgPGluY2x1ZGUgZGlyPgorICBDWFggICAgICAgICBDKysgY29tcGlsZXIgY29tbWFuZAorICBDWFhGTEFHUyAgICBDKysgY29tcGlsZXIgZmxhZ3MKKyAgQ1BQICAgICAgICAgQyBwcmVwcm9jZXNzb3IKKyAgQ1hYQ1BQICAgICAgQysrIHByZXByb2Nlc3NvcgorICBQS0dfQ09ORklHICBwYXRoIHRvIHBrZy1jb25maWcgdXRpbGl0eQorICBQS0dfQ09ORklHX1BBVEgKKyAgICAgICAgICAgICAgZGlyZWN0b3JpZXMgdG8gYWRkIHRvIHBrZy1jb25maWcncyBzZWFyY2ggcGF0aAorICBQS0dfQ09ORklHX0xJQkRJUgorICAgICAgICAgICAgICBwYXRoIG92ZXJyaWRpbmcgcGtnLWNvbmZpZydzIGJ1aWx0LWluIHNlYXJjaCBwYXRoCisgIEdMSUIyMF9DRkxBR1MKKyAgICAgICAgICAgICAgQyBjb21waWxlciBmbGFncyBmb3IgR0xJQjIwLCBvdmVycmlkaW5nIHBrZy1jb25maWcKKyAgR0xJQjIwX0xJQlMgbGlua2VyIGZsYWdzIGZvciBHTElCMjAsIG92ZXJyaWRpbmcgcGtnLWNvbmZpZworICBHT0JKRUNUX0NGTEFHUworICAgICAgICAgICAgICBDIGNvbXBpbGVyIGZsYWdzIGZvciBHT0JKRUNULCBvdmVycmlkaW5nIHBrZy1jb25maWcKKyAgR09CSkVDVF9MSUJTCisgICAgICAgICAgICAgIGxpbmtlciBmbGFncyBmb3IgR09CSkVDVCwgb3ZlcnJpZGluZyBwa2ctY29uZmlnCisgIFFUM19DRkxBR1MgIEMgY29tcGlsZXIgZmxhZ3MgZm9yIFFUMywgb3ZlcnJpZGluZyBwa2ctY29uZmlnCisgIFFUM19MSUJTICAgIGxpbmtlciBmbGFncyBmb3IgUVQzLCBvdmVycmlkaW5nIHBrZy1jb25maWcKKyAgUVQ0X0NGTEFHUyAgQyBjb21waWxlciBmbGFncyBmb3IgUVQ0LCBvdmVycmlkaW5nIHBrZy1jb25maWcKKyAgUVQ0X0xJQlMgICAgbGlua2VyIGZsYWdzIGZvciBRVDQsIG92ZXJyaWRpbmcgcGtnLWNvbmZpZworICBHVEsyMF9DRkxBR1MKKyAgICAgICAgICAgICAgQyBjb21waWxlciBmbGFncyBmb3IgR1RLMjAsIG92ZXJyaWRpbmcgcGtnLWNvbmZpZworICBHVEsyMF9MSUJTICBsaW5rZXIgZmxhZ3MgZm9yIEdUSzIwLCBvdmVycmlkaW5nIHBrZy1jb25maWcKKyAgR1RLMzBfQ0ZMQUdTCisgICAgICAgICAgICAgIEMgY29tcGlsZXIgZmxhZ3MgZm9yIEdUSzMwLCBvdmVycmlkaW5nIHBrZy1jb25maWcKKyAgR1RLMzBfTElCUyAgbGlua2VyIGZsYWdzIGZvciBHVEszMCwgb3ZlcnJpZGluZyBwa2ctY29uZmlnCisgIERCVVNfQ0ZMQUdTIEMgY29tcGlsZXIgZmxhZ3MgZm9yIERCVVMsIG92ZXJyaWRpbmcgcGtnLWNvbmZpZworICBEQlVTX0xJQlMgICBsaW5rZXIgZmxhZ3MgZm9yIERCVVMsIG92ZXJyaWRpbmcgcGtnLWNvbmZpZworICBMSUJEQUVNT05fQ0ZMQUdTCisgICAgICAgICAgICAgIEMgY29tcGlsZXIgZmxhZ3MgZm9yIExJQkRBRU1PTiwgb3ZlcnJpZGluZyBwa2ctY29uZmlnCisgIExJQkRBRU1PTl9MSUJTCisgICAgICAgICAgICAgIGxpbmtlciBmbGFncyBmb3IgTElCREFFTU9OLCBvdmVycmlkaW5nIHBrZy1jb25maWcKKyAgUFlUSE9OICAgICAgdGhlIFB5dGhvbiBpbnRlcnByZXRlcgorICBNT05PRE9DX0NGTEFHUworICAgICAgICAgICAgICBDIGNvbXBpbGVyIGZsYWdzIGZvciBNT05PRE9DLCBvdmVycmlkaW5nIHBrZy1jb25maWcKKyAgTU9OT0RPQ19MSUJTCisgICAgICAgICAgICAgIGxpbmtlciBmbGFncyBmb3IgTU9OT0RPQywgb3ZlcnJpZGluZyBwa2ctY29uZmlnCisgIERPWFlHRU5fUEFQRVJfU0laRQorICAgICAgICAgICAgICBhNHdpZGUgKGRlZmF1bHQpLCBhNCwgbGV0dGVyLCBsZWdhbCBvciBleGVjdXRpdmUKKworVXNlIHRoZXNlIHZhcmlhYmxlcyB0byBvdmVycmlkZSB0aGUgY2hvaWNlcyBtYWRlIGJ5IGBjb25maWd1cmUnIG9yIHRvIGhlbHAKK2l0IHRvIGZpbmQgbGlicmFyaWVzIGFuZCBwcm9ncmFtcyB3aXRoIG5vbnN0YW5kYXJkIG5hbWVzL2xvY2F0aW9ucy4KKworUmVwb3J0IGJ1Z3MgdG8gPGF2YWhpIChhdCkgbGlzdHMgKGRvdCkgZnJlZWRlc2t0b3AgKGRvdCkgb3JnPi4KK19BQ0VPRgorYWNfc3RhdHVzPSQ/CitmaQorCitpZiB0ZXN0ICIkYWNfaW5pdF9oZWxwIiA9ICJyZWN1cnNpdmUiOyB0aGVuCisgICMgSWYgdGhlcmUgYXJlIHN1YmRpcnMsIHJlcG9ydCB0aGVpciBzcGVjaWZpYyAtLWhlbHAuCisgIGZvciBhY19kaXIgaW4gOiAkYWNfc3ViZGlyc19hbGw7IGRvIHRlc3QgIngkYWNfZGlyIiA9IHg6ICYmIGNvbnRpbnVlCisgICAgdGVzdCAtZCAiJGFjX2RpciIgfHwKKyAgICAgIHsgY2QgIiRzcmNkaXIiICYmIGFjX3B3ZD1gcHdkYCAmJiBzcmNkaXI9LiAmJiB0ZXN0IC1kICIkYWNfZGlyIjsgfSB8fAorICAgICAgY29udGludWUKKyAgICBhY19idWlsZGRpcj0uCisKK2Nhc2UgIiRhY19kaXIiIGluCisuKSBhY19kaXJfc3VmZml4PSBhY190b3BfYnVpbGRkaXJfc3ViPS4gYWNfdG9wX2J1aWxkX3ByZWZpeD0gOzsKKyopCisgIGFjX2Rpcl9zdWZmaXg9L2AkYXNfZWNobyAiJGFjX2RpciIgfCBzZWQgJ3N8XlwuW1xcL118fCdgCisgICMgQSAiLi4iIGZvciBlYWNoIGRpcmVjdG9yeSBpbiAkYWNfZGlyX3N1ZmZpeC4KKyAgYWNfdG9wX2J1aWxkZGlyX3N1Yj1gJGFzX2VjaG8gIiRhY19kaXJfc3VmZml4IiB8IHNlZCAnc3wvW15cXC9dKnwvLi58ZztzfC98fCdgCisgIGNhc2UgJGFjX3RvcF9idWlsZGRpcl9zdWIgaW4KKyAgIiIpIGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OworICAqKSAgYWNfdG9wX2J1aWxkX3ByZWZpeD0kYWNfdG9wX2J1aWxkZGlyX3N1Yi8gOzsKKyAgZXNhYyA7OworZXNhYworYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfcHdkCithY19hYnNfYnVpbGRkaXI9JGFjX3B3ZCRhY19kaXJfc3VmZml4CisjIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5OgorYWNfdG9wX2J1aWxkZGlyPSRhY190b3BfYnVpbGRfcHJlZml4CisKK2Nhc2UgJHNyY2RpciBpbgorICAuKSAgIyBXZSBhcmUgYnVpbGRpbmcgaW4gcGxhY2UuCisgICAgYWNfc3JjZGlyPS4KKyAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRkaXJfc3ViCisgICAgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3B3ZCA7OworICBbXFwvXSogfCA/OltcXC9dKiApICAjIEFic29sdXRlIG5hbWUuCisgICAgYWNfc3JjZGlyPSRzcmNkaXIkYWNfZGlyX3N1ZmZpeDsKKyAgICBhY190b3Bfc3JjZGlyPSRzcmNkaXIKKyAgICBhY19hYnNfdG9wX3NyY2Rpcj0kc3JjZGlyIDs7CisgICopICMgUmVsYXRpdmUgbmFtZS4KKyAgICBhY19zcmNkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgkc3JjZGlyJGFjX2Rpcl9zdWZmaXgKKyAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRfcHJlZml4JHNyY2RpcgorICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QvJHNyY2RpciA7OworZXNhYworYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX3RvcF9zcmNkaXIkYWNfZGlyX3N1ZmZpeAorCisgICAgY2QgIiRhY19kaXIiIHx8IHsgYWNfc3RhdHVzPSQ/OyBjb250aW51ZTsgfQorICAgICMgQ2hlY2sgZm9yIGd1ZXN0ZWQgY29uZmlndXJlLgorICAgIGlmIHRlc3QgLWYgIiRhY19zcmNkaXIvY29uZmlndXJlLmdudSI7IHRoZW4KKyAgICAgIGVjaG8gJiYKKyAgICAgICRTSEVMTCAiJGFjX3NyY2Rpci9jb25maWd1cmUuZ251IiAtLWhlbHA9cmVjdXJzaXZlCisgICAgZWxpZiB0ZXN0IC1mICIkYWNfc3JjZGlyL2NvbmZpZ3VyZSI7IHRoZW4KKyAgICAgIGVjaG8gJiYKKyAgICAgICRTSEVMTCAiJGFjX3NyY2Rpci9jb25maWd1cmUiIC0taGVscD1yZWN1cnNpdmUKKyAgICBlbHNlCisgICAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBubyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGlzIGluICRhY19kaXIiID4mMgorICAgIGZpIHx8IGFjX3N0YXR1cz0kPworICAgIGNkICIkYWNfcHdkIiB8fCB7IGFjX3N0YXR1cz0kPzsgYnJlYWs7IH0KKyAgZG9uZQorZmkKKwordGVzdCAtbiAiJGFjX2luaXRfaGVscCIgJiYgZXhpdCAkYWNfc3RhdHVzCitpZiAkYWNfaW5pdF92ZXJzaW9uOyB0aGVuCisgIGNhdCA8PFxfQUNFT0YKK2F2YWhpIGNvbmZpZ3VyZSAwLjYuMzEKK2dlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OAorCitDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitUaGlzIGNvbmZpZ3VyZSBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LgorX0FDRU9GCisgIGV4aXQKK2ZpCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgQXV0b2NvbmYgaW5pdGlhbGl6YXRpb24uICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBhY19mbl9jX3RyeV9jb21waWxlIExJTkVOTworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcnkgdG8gY29tcGlsZSBjb25mdGVzdC4kYWNfZXh0LCBhbmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuCithY19mbl9jX3RyeV9jb21waWxlICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorICBpZiB7IHsgYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVycgorICBhY19zdGF0dXM9JD8KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQorICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1CisgICAgbXYgLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgorICBmaQorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4gOgorICBhY19yZXR2YWw9MAorZWxzZQorICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX3JldHZhbD0xCitmaQorICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKyAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCisKK30gIyBhY19mbl9jX3RyeV9jb21waWxlCisKKyMgYWNfZm5fY3h4X3RyeV9jb21waWxlIExJTkVOTworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyeSB0byBjb21waWxlIGNvbmZ0ZXN0LiRhY19leHQsIGFuZCByZXR1cm4gd2hldGhlciB0aGlzIHN1Y2NlZWRlZC4KK2FjX2ZuX2N4eF90cnlfY29tcGlsZSAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgaWYgeyB7IGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcnIKKyAgYWNfc3RhdHVzPSQ/CisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjEKKyAgICBjYXQgY29uZnRlc3QuZXIxID4mNQorICAgIG12IC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKKyAgZmkKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY3h4X3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4gOgorICBhY19yZXR2YWw9MAorZWxzZQorICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX3JldHZhbD0xCitmaQorICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKyAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCisKK30gIyBhY19mbl9jeHhfdHJ5X2NvbXBpbGUKKworIyBhY19mbl9jX3RyeV9jcHAgTElORU5PCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJ5IHRvIHByZXByb2Nlc3MgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLgorYWNfZm5fY190cnlfY3BwICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgaWYgeyB7IGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVycgorICBhY19zdGF0dXM9JD8KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQorICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1CisgICAgbXYgLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgorICBmaQorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSA+IGNvbmZ0ZXN0LmkgJiYgeworCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfTsgdGhlbiA6CisgIGFjX3JldHZhbD0wCitlbHNlCisgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisgICAgYWNfcmV0dmFsPTEKK2ZpCisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworICBhc19mbl9zZXRfc3RhdHVzICRhY19yZXR2YWwKKworfSAjIGFjX2ZuX2NfdHJ5X2NwcAorCisjIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgTElORU5PIEhFQURFUiBWQVIgSU5DTFVERVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0cyB3aGV0aGVyIEhFQURFUiBleGlzdHMsIGdpdmluZyBhIHdhcm5pbmcgaWYgaXQgY2Fubm90IGJlIGNvbXBpbGVkIHVzaW5nCisjIHRoZSBpbmNsdWRlIGZpbGVzIGluIElOQ0xVREVTIGFuZCBzZXR0aW5nIHRoZSBjYWNoZSB2YXJpYWJsZSBWQVIKKyMgYWNjb3JkaW5nbHkuCithY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgaWYgZXZhbCBcJHskMys6fSBmYWxzZTsgdGhlbiA6CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICQyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkMi4uLiAiID4mNjsgfQoraWYgZXZhbCBcJHskMys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitmaQorZXZhbCBhY19yZXM9XCQkMworCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CitlbHNlCisgICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyAkMiB1c2FiaWxpdHkiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgJDIgdXNhYmlsaXR5Li4uICIgPiY2OyB9CitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAorI2luY2x1ZGUgPCQyPgorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKK2Vsc2UKKyAgYWNfaGVhZGVyX2NvbXBpbGVyPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CiskYXNfZWNobyAiJGFjX2hlYWRlcl9jb21waWxlciIgPiY2OyB9CisKKyMgSXMgdGhlIGhlYWRlciBwcmVzZW50PworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyAkMiBwcmVzZW5jZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyAkMiBwcmVzZW5jZS4uLiAiID4mNjsgfQorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPCQyPgorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCitlbHNlCisgIGFjX2hlYWRlcl9wcmVwcm9jPW5vCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1CiskYXNfZWNobyAiJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjY7IH0KKworIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CitjYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluICMoKAorICB5ZXM6bm86ICkKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisgICAgOzsKKyAgbm86eWVzOiogKQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkMjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkMjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorKCAkYXNfZWNobyAiIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFJlcG9ydCB0aGlzIHRvIGF2YWhpIChhdCkgbGlzdHMgKGRvdCkgZnJlZWRlc2t0b3AgKGRvdCkgb3JnICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIyIKKyAgICAgKSB8IHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorICAgIDs7Citlc2FjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICQyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkMi4uLiAiID4mNjsgfQoraWYgZXZhbCBcJHskMys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGV2YWwgIiQzPVwkYWNfaGVhZGVyX2NvbXBpbGVyIgorZmkKK2V2YWwgYWNfcmVzPVwkJDMKKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQorJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQorZmkKKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisKK30gIyBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsCisKKyMgYWNfZm5fY190cnlfcnVuIExJTkVOTworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyeSB0byBsaW5rIGNvbmZ0ZXN0LiRhY19leHQsIGFuZCByZXR1cm4gd2hldGhlciB0aGlzIHN1Y2NlZWRlZC4gQXNzdW1lcworIyB0aGF0IGV4ZWN1dGFibGVzICpjYW4qIGJlIHJ1bi4KK2FjX2ZuX2NfdHJ5X3J1biAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIGlmIHsgeyBhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyB7IGNhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB9OyB0aGVuIDoKKyAgYWNfcmV0dmFsPTAKK2Vsc2UKKyAgJGFzX2VjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1CisgICAgICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyAgICAgICBhY19yZXR2YWw9JGFjX3N0YXR1cworZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0LmRTWU0gY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbworICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKyAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCisKK30gIyBhY19mbl9jX3RyeV9ydW4KKworIyBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlIExJTkVOTyBIRUFERVIgVkFSIElOQ0xVREVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdHMgd2hldGhlciBIRUFERVIgZXhpc3RzIGFuZCBjYW4gYmUgY29tcGlsZWQgdXNpbmcgdGhlIGluY2x1ZGUgZmlsZXMgaW4KKyMgSU5DTFVERVMsIHNldHRpbmcgdGhlIGNhY2hlIHZhcmlhYmxlIFZBUiBhY2NvcmRpbmdseS4KK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkMiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJDIuLi4gIiA+JjY7IH0KK2lmIGV2YWwgXCR7JDMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAorI2luY2x1ZGUgPCQyPgorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGV2YWwgIiQzPXllcyIKK2Vsc2UKKyAgZXZhbCAiJDM9bm8iCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZXZhbCBhY19yZXM9XCQkMworCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworCit9ICMgYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZQorCisjIGFjX2ZuX2NfdHJ5X2xpbmsgTElORU5PCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyeSB0byBsaW5rIGNvbmZ0ZXN0LiRhY19leHQsIGFuZCByZXR1cm4gd2hldGhlciB0aGlzIHN1Y2NlZWRlZC4KK2FjX2ZuX2NfdHJ5X2xpbmsgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorICBpZiB7IHsgYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVycgorICBhY19zdGF0dXM9JD8KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQorICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1CisgICAgbXYgLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgorICBmaQorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJiB7CisJIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIHx8CisJICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0CisgICAgICAgfTsgdGhlbiA6CisgIGFjX3JldHZhbD0wCitlbHNlCisgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfcmV0dmFsPTEKK2ZpCisgICMgRGVsZXRlIHRoZSBJUEEvSVBPIChJbnRlciBQcm9jZWR1cmFsIEFuYWx5c2lzL09wdGltaXphdGlvbikgaW5mb3JtYXRpb24KKyAgIyBjcmVhdGVkIGJ5IHRoZSBQR0kgY29tcGlsZXIgKGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28pLCBhcyBpdCB3b3VsZAorICAjIGludGVyZmVyZSB3aXRoIHRoZSBuZXh0IGxpbmsgY29tbWFuZDsgYWxzbyBkZWxldGUgYSBkaXJlY3RvcnkgdGhhdCBpcworICAjIGxlZnQgYmVoaW5kIGJ5IEFwcGxlJ3MgY29tcGlsZXIuICBXZSBkbyB0aGlzIGJlZm9yZSBleGVjdXRpbmcgdGhlIGFjdGlvbnMuCisgIHJtIC1yZiBjb25mdGVzdC5kU1lNIGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisgIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAorCit9ICMgYWNfZm5fY190cnlfbGluaworCisjIGFjX2ZuX2NfY2hlY2tfZnVuYyBMSU5FTk8gRlVOQyBWQVIKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0cyB3aGV0aGVyIEZVTkMgZXhpc3RzLCBzZXR0aW5nIHRoZSBjYWNoZSB2YXJpYWJsZSBWQVIgYWNjb3JkaW5nbHkKK2FjX2ZuX2NfY2hlY2tfZnVuYyAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICQyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkMi4uLiAiID4mNjsgfQoraWYgZXZhbCBcJHskMys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy8qIERlZmluZSAkMiB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICQyLgorICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCisjZGVmaW5lICQyIGlubm9jdW91c18kMgorCisvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkMiAoKTsgYmVsb3cuCisgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisKKyN1bmRlZiAkMgorCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyICQyICgpOworLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCisgICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCisjaWYgZGVmaW5lZCBfX3N0dWJfJDIgfHwgZGVmaW5lZCBfX3N0dWJfX18kMgorY2hva2UgbWUKKyNlbmRpZgorCitpbnQKK21haW4gKCkKK3sKK3JldHVybiAkMiAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBldmFsICIkMz15ZXMiCitlbHNlCisgIGV2YWwgIiQzPW5vIgorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZXZhbCBhY19yZXM9XCQkMworCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworCit9ICMgYWNfZm5fY19jaGVja19mdW5jCisKKyMgYWNfZm5fY3h4X3RyeV9jcHAgTElORU5PCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcnkgdG8gcHJlcHJvY2VzcyBjb25mdGVzdC4kYWNfZXh0LCBhbmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuCithY19mbl9jeHhfdHJ5X2NwcCAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIGlmIHsgeyBhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcnIKKyAgYWNfc3RhdHVzPSQ/CisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjEKKyAgICBjYXQgY29uZnRlc3QuZXIxID4mNQorICAgIG12IC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKKyAgZmkKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gPiBjb25mdGVzdC5pICYmIHsKKwkgdGVzdCAteiAiJGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZyRhY19jeHhfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9OyB0aGVuIDoKKyAgYWNfcmV0dmFsPTAKK2Vsc2UKKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyAgICBhY19yZXR2YWw9MQorZmkKKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisgIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAorCit9ICMgYWNfZm5fY3h4X3RyeV9jcHAKKworIyBhY19mbl9jeHhfdHJ5X2xpbmsgTElORU5PCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJ5IHRvIGxpbmsgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLgorYWNfZm5fY3h4X3RyeV9saW5rICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyAgaWYgeyB7IGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcnIKKyAgYWNfc3RhdHVzPSQ/CisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjEKKyAgICBjYXQgY29uZnRlc3QuZXIxID4mNQorICAgIG12IC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKKyAgZmkKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY3h4X3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJiB7CisJIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIHx8CisJICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0CisgICAgICAgfTsgdGhlbiA6CisgIGFjX3JldHZhbD0wCitlbHNlCisgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfcmV0dmFsPTEKK2ZpCisgICMgRGVsZXRlIHRoZSBJUEEvSVBPIChJbnRlciBQcm9jZWR1cmFsIEFuYWx5c2lzL09wdGltaXphdGlvbikgaW5mb3JtYXRpb24KKyAgIyBjcmVhdGVkIGJ5IHRoZSBQR0kgY29tcGlsZXIgKGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28pLCBhcyBpdCB3b3VsZAorICAjIGludGVyZmVyZSB3aXRoIHRoZSBuZXh0IGxpbmsgY29tbWFuZDsgYWxzbyBkZWxldGUgYSBkaXJlY3RvcnkgdGhhdCBpcworICAjIGxlZnQgYmVoaW5kIGJ5IEFwcGxlJ3MgY29tcGlsZXIuICBXZSBkbyB0aGlzIGJlZm9yZSBleGVjdXRpbmcgdGhlIGFjdGlvbnMuCisgIHJtIC1yZiBjb25mdGVzdC5kU1lNIGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisgIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAorCit9ICMgYWNfZm5fY3h4X3RyeV9saW5rCisKKyMgYWNfZm5fY19jaGVja190eXBlIExJTkVOTyBUWVBFIFZBUiBJTkNMVURFUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3RzIHdoZXRoZXIgVFlQRSBleGlzdHMgYWZ0ZXIgaGF2aW5nIGluY2x1ZGVkIElOQ0xVREVTLCBzZXR0aW5nIGNhY2hlCisjIHZhcmlhYmxlIFZBUiBhY2NvcmRpbmdseS4KK2FjX2ZuX2NfY2hlY2tfdHlwZSAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICQyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkMi4uLiAiID4mNjsgfQoraWYgZXZhbCBcJHskMys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGV2YWwgIiQzPW5vIgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAoraW50CittYWluICgpCit7CitpZiAoc2l6ZW9mICgkMikpCisJIHJldHVybiAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ0CitpbnQKK21haW4gKCkKK3sKK2lmIChzaXplb2YgKCgkMikpKQorCSAgICByZXR1cm4gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCitlbHNlCisgIGV2YWwgIiQzPXllcyIKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitldmFsIGFjX3Jlcz1cJCQzCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisKK30gIyBhY19mbl9jX2NoZWNrX3R5cGUKKworIyBhY19mbl9jX2NoZWNrX2RlY2wgTElORU5PIFNZTUJPTCBWQVIgSU5DTFVERVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3RzIHdoZXRoZXIgU1lNQk9MIGlzIGRlY2xhcmVkIGluIElOQ0xVREVTLCBzZXR0aW5nIGNhY2hlIHZhcmlhYmxlIFZBUgorIyBhY2NvcmRpbmdseS4KK2FjX2ZuX2NfY2hlY2tfZGVjbCAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIGFzX2RlY2xfbmFtZT1gZWNobyAkMnxzZWQgJ3MvICooLiovLydgCisgIGFzX2RlY2xfdXNlPWBlY2hvICQyfHNlZCAtZSAncy8oLygoLycgLWUgJ3MvKS8pIDAmLycgLWUgJ3MvLC8pIDAmICgvZydgCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkYXNfZGVjbF9uYW1lIGlzIGRlY2xhcmVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJGFzX2RlY2xfbmFtZSBpcyBkZWNsYXJlZC4uLiAiID4mNjsgfQoraWYgZXZhbCBcJHskMys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ0CitpbnQKK21haW4gKCkKK3sKKyNpZm5kZWYgJGFzX2RlY2xfbmFtZQorI2lmZGVmIF9fY3BsdXNwbHVzCisgICh2b2lkKSAkYXNfZGVjbF91c2U7CisjZWxzZQorICAodm9pZCkgJGFzX2RlY2xfbmFtZTsKKyNlbmRpZgorI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBldmFsICIkMz15ZXMiCitlbHNlCisgIGV2YWwgIiQzPW5vIgorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2V2YWwgYWNfcmVzPVwkJDMKKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQorJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQorICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKworfSAjIGFjX2ZuX2NfY2hlY2tfZGVjbAorY2F0ID5jb25maWcubG9nIDw8X0FDRU9GCitUaGlzIGZpbGUgY29udGFpbnMgYW55IG1lc3NhZ2VzIHByb2R1Y2VkIGJ5IGNvbXBpbGVycyB3aGlsZQorcnVubmluZyBjb25maWd1cmUsIHRvIGFpZCBkZWJ1Z2dpbmcgaWYgY29uZmlndXJlIG1ha2VzIGEgbWlzdGFrZS4KKworSXQgd2FzIGNyZWF0ZWQgYnkgYXZhaGkgJGFzX21lIDAuNi4zMSwgd2hpY2ggd2FzCitnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjguICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKKworICAkICQwICRACisKK19BQ0VPRgorZXhlYyA1Pj5jb25maWcubG9nCit7CitjYXQgPDxfQVNVTkFNRQorIyMgLS0tLS0tLS0tICMjCisjIyBQbGF0Zm9ybS4gIyMKKyMjIC0tLS0tLS0tLSAjIworCitob3N0bmFtZSA9IGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYAordW5hbWUgLW0gPSBgKHVuYW1lIC1tKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCit1bmFtZSAtciA9IGAodW5hbWUgLXIpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKK3VuYW1lIC1zID0gYCh1bmFtZSAtcykgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAordW5hbWUgLXYgPSBgKHVuYW1lIC12KSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCisKKy91c3IvYmluL3VuYW1lIC1wID0gYCgvdXNyL2Jpbi91bmFtZSAtcCkgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAorL2Jpbi91bmFtZSAtWCAgICAgPSBgKC9iaW4vdW5hbWUgLVgpIDI+L2Rldi9udWxsICAgICB8fCBlY2hvIHVua25vd25gCisKKy9iaW4vYXJjaCAgICAgICAgICAgICAgPSBgKC9iaW4vYXJjaCkgMj4vZGV2L251bGwgICAgICAgICAgICAgIHx8IGVjaG8gdW5rbm93bmAKKy91c3IvYmluL2FyY2ggLWsgICAgICAgPSBgKC91c3IvYmluL2FyY2ggLWspIDI+L2Rldi9udWxsICAgICAgIHx8IGVjaG8gdW5rbm93bmAKKy91c3IvY29udmV4L2dldHN5c2luZm8gPSBgKC91c3IvY29udmV4L2dldHN5c2luZm8pIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKKy91c3IvYmluL2hvc3RpbmZvICAgICAgPSBgKC91c3IvYmluL2hvc3RpbmZvKSAyPi9kZXYvbnVsbCAgICAgIHx8IGVjaG8gdW5rbm93bmAKKy9iaW4vbWFjaGluZSAgICAgICAgICAgPSBgKC9iaW4vbWFjaGluZSkgMj4vZGV2L251bGwgICAgICAgICAgIHx8IGVjaG8gdW5rbm93bmAKKy91c3IvYmluL29zbGV2ZWwgICAgICAgPSBgKC91c3IvYmluL29zbGV2ZWwpIDI+L2Rldi9udWxsICAgICAgIHx8IGVjaG8gdW5rbm93bmAKKy9iaW4vdW5pdmVyc2UgICAgICAgICAgPSBgKC9iaW4vdW5pdmVyc2UpIDI+L2Rldi9udWxsICAgICAgICAgIHx8IGVjaG8gdW5rbm93bmAKKworX0FTVU5BTUUKKworYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgICRhc19lY2hvICJQQVRIOiAkYXNfZGlyIgorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK30gPiY1CisKK2NhdCA+JjUgPDxfQUNFT0YKKworCisjIyAtLS0tLS0tLS0tLSAjIworIyMgQ29yZSB0ZXN0cy4gIyMKKyMjIC0tLS0tLS0tLS0tICMjCisKK19BQ0VPRgorCisKKyMgS2VlcCBhIHRyYWNlIG9mIHRoZSBjb21tYW5kIGxpbmUuCisjIFN0cmlwIG91dCAtLW5vLWNyZWF0ZSBhbmQgLS1uby1yZWN1cnNpb24gc28gdGhleSBkbyBub3QgcGlsZSB1cC4KKyMgU3RyaXAgb3V0IC0tc2lsZW50IGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byByZWNvcmQgaXQgZm9yIGZ1dHVyZSBydW5zLgorIyBBbHNvIHF1b3RlIGFueSBhcmdzIGNvbnRhaW5pbmcgc2hlbGwgbWV0YS1jaGFyYWN0ZXJzLgorIyBNYWtlIHR3byBwYXNzZXMgdG8gYWxsb3cgZm9yIHByb3BlciBkdXBsaWNhdGUtYXJndW1lbnQgc3VwcHJlc3Npb24uCithY19jb25maWd1cmVfYXJncz0KK2FjX2NvbmZpZ3VyZV9hcmdzMD0KK2FjX2NvbmZpZ3VyZV9hcmdzMT0KK2FjX211c3Rfa2VlcF9uZXh0PWZhbHNlCitmb3IgYWNfcGFzcyBpbiAxIDIKK2RvCisgIGZvciBhY19hcmcKKyAgZG8KKyAgICBjYXNlICRhY19hcmcgaW4KKyAgICAtbm8tY3JlYXRlIHwgLS1uby1jKiB8IC1uIHwgLW5vLXJlY3Vyc2lvbiB8IC0tbm8tciopIGNvbnRpbnVlIDs7CisgICAgLXEgfCAtcXVpZXQgfCAtLXF1aWV0IHwgLS1xdWllIHwgLS1xdWkgfCAtLXF1IHwgLS1xIFwKKyAgICB8IC1zaWxlbnQgfCAtLXNpbGVudCB8IC0tc2lsZW4gfCAtLXNpbGUgfCAtLXNpbCkKKyAgICAgIGNvbnRpbnVlIDs7CisgICAgKlwnKikKKyAgICAgIGFjX2FyZz1gJGFzX2VjaG8gIiRhY19hcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgIDs7CisgICAgZXNhYworICAgIGNhc2UgJGFjX3Bhc3MgaW4KKyAgICAxKSBhc19mbl9hcHBlbmQgYWNfY29uZmlndXJlX2FyZ3MwICIgJyRhY19hcmcnIiA7OworICAgIDIpCisgICAgICBhc19mbl9hcHBlbmQgYWNfY29uZmlndXJlX2FyZ3MxICIgJyRhY19hcmcnIgorICAgICAgaWYgdGVzdCAkYWNfbXVzdF9rZWVwX25leHQgPSB0cnVlOyB0aGVuCisJYWNfbXVzdF9rZWVwX25leHQ9ZmFsc2UgIyBHb3QgdmFsdWUsIGJhY2sgdG8gbm9ybWFsLgorICAgICAgZWxzZQorCWNhc2UgJGFjX2FyZyBpbgorCSAgKj0qIHwgLS1jb25maWctY2FjaGUgfCAtQyB8IC1kaXNhYmxlLSogfCAtLWRpc2FibGUtKiBcCisJICB8IC1lbmFibGUtKiB8IC0tZW5hYmxlLSogfCAtZ2FzIHwgLS1nKiB8IC1uZnAgfCAtLW5mKiBcCisJICB8IC1xIHwgLXF1aWV0IHwgLS1xKiB8IC1zaWxlbnQgfCAtLXNpbCogfCAtdiB8IC12ZXJiKiBcCisJICB8IC13aXRoLSogfCAtLXdpdGgtKiB8IC13aXRob3V0LSogfCAtLXdpdGhvdXQtKiB8IC0teCkKKwkgICAgY2FzZSAiJGFjX2NvbmZpZ3VyZV9hcmdzMCAiIGluCisJICAgICAgIiRhY19jb25maWd1cmVfYXJnczEiKiIgJyRhY19hcmcnICIqICkgY29udGludWUgOzsKKwkgICAgZXNhYworCSAgICA7OworCSAgLSogKSBhY19tdXN0X2tlZXBfbmV4dD10cnVlIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGFzX2ZuX2FwcGVuZCBhY19jb25maWd1cmVfYXJncyAiICckYWNfYXJnJyIKKyAgICAgIDs7CisgICAgZXNhYworICBkb25lCitkb25lCit7IGFjX2NvbmZpZ3VyZV9hcmdzMD07IHVuc2V0IGFjX2NvbmZpZ3VyZV9hcmdzMDt9Cit7IGFjX2NvbmZpZ3VyZV9hcmdzMT07IHVuc2V0IGFjX2NvbmZpZ3VyZV9hcmdzMTt9CisKKyMgV2hlbiBpbnRlcnJ1cHRlZCBvciBleGl0J2QsIGNsZWFudXAgdGVtcG9yYXJ5IGZpbGVzLCBhbmQgY29tcGxldGUKKyMgY29uZmlnLmxvZy4gIFdlIHJlbW92ZSBjb21tZW50cyBiZWNhdXNlIGFueXdheSB0aGUgcXVvdGVzIGluIHRoZXJlCisjIHdvdWxkIGNhdXNlIHByb2JsZW1zIG9yIGxvb2sgdWdseS4KKyMgV0FSTklORzogVXNlICdcJycgdG8gcmVwcmVzZW50IGFuIGFwb3N0cm9waGUgd2l0aGluIHRoZSB0cmFwLgorIyBXQVJOSU5HOiBEbyBub3Qgc3RhcnQgdGhlIHRyYXAgY29kZSB3aXRoIGEgbmV3bGluZSwgZHVlIHRvIGEgRnJlZUJTRCA0LjAgYnVnLgordHJhcCAnZXhpdF9zdGF0dXM9JD8KKyAgIyBTYXZlIGludG8gY29uZmlnLmxvZyBzb21lIGluZm9ybWF0aW9uIHRoYXQgbWlnaHQgaGVscCBpbiBkZWJ1Z2dpbmcuCisgIHsKKyAgICBlY2hvCisKKyAgICAkYXNfZWNobyAiIyMgLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgQ2FjaGUgdmFyaWFibGVzLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLSAjIyIKKyAgICBlY2hvCisgICAgIyBUaGUgZm9sbG93aW5nIHdheSBvZiB3cml0aW5nIHRoZSBjYWNoZSBtaXNoYW5kbGVzIG5ld2xpbmVzIGluIHZhbHVlcywKKygKKyAgZm9yIGFjX3ZhciBpbiBgKHNldCkgMj4mMSB8IHNlZCAtbiAnXCcncy9eXChbYS16QS1aX11bYS16QS1aMC05X10qXCk9LiovXDEvcCdcJydgOyBkbworICAgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorICAgIGNhc2UgJGFjX3ZhbCBpbiAjKAorICAgICoke2FzX25sfSopCisgICAgICBjYXNlICRhY192YXIgaW4gIygKKyAgICAgICpfY3ZfKikgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBjYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBjYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZSIgPiYyO30gOzsKKyAgICAgIGVzYWMKKyAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorICAgICAgXyB8IElGUyB8IGFzX25sKSA7OyAjKAorICAgICAgQkFTSF9BUkdWIHwgQkFTSF9TT1VSQ0UpIGV2YWwgJGFjX3Zhcj0gOzsgIygKKyAgICAgICopIHsgZXZhbCAkYWNfdmFyPTsgdW5zZXQgJGFjX3Zhcjt9IDs7CisgICAgICBlc2FjIDs7CisgICAgZXNhYworICBkb25lCisgIChzZXQpIDI+JjEgfAorICAgIGNhc2UgJGFzX25sYChhY19zcGFjZT0nXCcnICdcJyc7IHNldCkgMj4mMWAgaW4gIygKKyAgICAqJHthc19ubH1hY19zcGFjZT1cICopCisgICAgICBzZWQgLW4gXAorCSJzLydcJycvJ1wnJ1xcXFwnXCcnJ1wnJy9nOworCSAgcy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT0nXCcnXFwyJ1wnJy9wIgorICAgICAgOzsgIygKKyAgICAqKQorICAgICAgc2VkIC1uICIvXltfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKj0vcCIKKyAgICAgIDs7CisgICAgZXNhYyB8CisgICAgc29ydAorKQorICAgIGVjaG8KKworICAgICRhc19lY2hvICIjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgT3V0cHV0IHZhcmlhYmxlcy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tICMjIgorICAgIGVjaG8KKyAgICBmb3IgYWNfdmFyIGluICRhY19zdWJzdF92YXJzCisgICAgZG8KKyAgICAgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorICAgICAgY2FzZSAkYWNfdmFsIGluCisgICAgICAqXCdcJycqKSBhY192YWw9YCRhc19lY2hvICIkYWNfdmFsIiB8IHNlZCAicy8nXCcnLydcJydcXFxcXFxcXCdcJycnXCcnL2ciYDs7CisgICAgICBlc2FjCisgICAgICAkYXNfZWNobyAiJGFjX3Zhcj0nXCcnJGFjX3ZhbCdcJyciCisgICAgZG9uZSB8IHNvcnQKKyAgICBlY2hvCisKKyAgICBpZiB0ZXN0IC1uICIkYWNfc3Vic3RfZmlsZXMiOyB0aGVuCisgICAgICAkYXNfZWNobyAiIyMgLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgRmlsZSBzdWJzdGl0dXRpb25zLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLSAjIyIKKyAgICAgIGVjaG8KKyAgICAgIGZvciBhY192YXIgaW4gJGFjX3N1YnN0X2ZpbGVzCisgICAgICBkbworCWV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorCWNhc2UgJGFjX3ZhbCBpbgorCSpcJ1wnJyopIGFjX3ZhbD1gJGFzX2VjaG8gIiRhY192YWwiIHwgc2VkICJzLydcJycvJ1wnJ1xcXFxcXFxcJ1wnJydcJycvZyJgOzsKKwllc2FjCisJJGFzX2VjaG8gIiRhY192YXI9J1wnJyRhY192YWwnXCcnIgorICAgICAgZG9uZSB8IHNvcnQKKyAgICAgIGVjaG8KKyAgICBmaQorCisgICAgaWYgdGVzdCAtcyBjb25mZGVmcy5oOyB0aGVuCisgICAgICAkYXNfZWNobyAiIyMgLS0tLS0tLS0tLS0gIyMKKyMjIGNvbmZkZWZzLmguICMjCisjIyAtLS0tLS0tLS0tLSAjIyIKKyAgICAgIGVjaG8KKyAgICAgIGNhdCBjb25mZGVmcy5oCisgICAgICBlY2hvCisgICAgZmkKKyAgICB0ZXN0ICIkYWNfc2lnbmFsIiAhPSAwICYmCisgICAgICAkYXNfZWNobyAiJGFzX21lOiBjYXVnaHQgc2lnbmFsICRhY19zaWduYWwiCisgICAgJGFzX2VjaG8gIiRhc19tZTogZXhpdCAkZXhpdF9zdGF0dXMiCisgIH0gPiY1CisgIHJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiAmJgorICAgIHJtIC1mIC1yIGNvbmZ0ZXN0KiBjb25mZGVmcyogY29uZiQkKiAkYWNfY2xlYW5fZmlsZXMgJiYKKyAgICBleGl0ICRleGl0X3N0YXR1cworJyAwCitmb3IgYWNfc2lnbmFsIGluIDEgMiAxMyAxNTsgZG8KKyAgdHJhcCAnYWNfc2lnbmFsPSckYWNfc2lnbmFsJzsgYXNfZm5fZXhpdCAxJyAkYWNfc2lnbmFsCitkb25lCithY19zaWduYWw9MAorCisjIGNvbmZkZWZzLmggYXZvaWRzIE9TIGNvbW1hbmQgbGluZSBsZW5ndGggbGltaXRzIHRoYXQgREVGUyBjYW4gZXhjZWVkLgorcm0gLWYgLXIgY29uZnRlc3QqIGNvbmZkZWZzLmgKKworJGFzX2VjaG8gIi8qIGNvbmZkZWZzLmggKi8iID4gY29uZmRlZnMuaAorCisjIFByZWRlZmluZWQgcHJlcHJvY2Vzc29yIHZhcmlhYmxlcy4KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBQQUNLQUdFX05BTUUgIiRQQUNLQUdFX05BTUUiCitfQUNFT0YKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBQQUNLQUdFX1RBUk5BTUUgIiRQQUNLQUdFX1RBUk5BTUUiCitfQUNFT0YKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBQQUNLQUdFX1ZFUlNJT04gIiRQQUNLQUdFX1ZFUlNJT04iCitfQUNFT0YKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBQQUNLQUdFX1NUUklORyAiJFBBQ0tBR0VfU1RSSU5HIgorX0FDRU9GCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUEFDS0FHRV9CVUdSRVBPUlQgIiRQQUNLQUdFX0JVR1JFUE9SVCIKK19BQ0VPRgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFBBQ0tBR0VfVVJMICIkUEFDS0FHRV9VUkwiCitfQUNFT0YKKworCisjIExldCB0aGUgc2l0ZSBmaWxlIHNlbGVjdCBhbiBhbHRlcm5hdGUgY2FjaGUgZmlsZSBpZiBpdCB3YW50cyB0by4KKyMgUHJlZmVyIGFuIGV4cGxpY2l0bHkgc2VsZWN0ZWQgZmlsZSB0byBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkIG9uZXMuCithY19zaXRlX2ZpbGUxPU5PTkUKK2FjX3NpdGVfZmlsZTI9Tk9ORQoraWYgdGVzdCAtbiAiJENPTkZJR19TSVRFIjsgdGhlbgorICAjIFdlIGRvIG5vdCB3YW50IGEgUEFUSCBzZWFyY2ggZm9yIGNvbmZpZy5zaXRlLgorICBjYXNlICRDT05GSUdfU0lURSBpbiAjKCgKKyAgICAtKikgIGFjX3NpdGVfZmlsZTE9Li8kQ09ORklHX1NJVEU7OworICAgICovKikgYWNfc2l0ZV9maWxlMT0kQ09ORklHX1NJVEU7OworICAgICopICAgYWNfc2l0ZV9maWxlMT0uLyRDT05GSUdfU0lURTs7CisgIGVzYWMKK2VsaWYgdGVzdCAieCRwcmVmaXgiICE9IHhOT05FOyB0aGVuCisgIGFjX3NpdGVfZmlsZTE9JHByZWZpeC9zaGFyZS9jb25maWcuc2l0ZQorICBhY19zaXRlX2ZpbGUyPSRwcmVmaXgvZXRjL2NvbmZpZy5zaXRlCitlbHNlCisgIGFjX3NpdGVfZmlsZTE9JGFjX2RlZmF1bHRfcHJlZml4L3NoYXJlL2NvbmZpZy5zaXRlCisgIGFjX3NpdGVfZmlsZTI9JGFjX2RlZmF1bHRfcHJlZml4L2V0Yy9jb25maWcuc2l0ZQorZmkKK2ZvciBhY19zaXRlX2ZpbGUgaW4gIiRhY19zaXRlX2ZpbGUxIiAiJGFjX3NpdGVfZmlsZTIiCitkbworICB0ZXN0ICJ4JGFjX3NpdGVfZmlsZSIgPSB4Tk9ORSAmJiBjb250aW51ZQorICBpZiB0ZXN0IC9kZXYvbnVsbCAhPSAiJGFjX3NpdGVfZmlsZSIgJiYgdGVzdCAtciAiJGFjX3NpdGVfZmlsZSI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGxvYWRpbmcgc2l0ZSBzY3JpcHQgJGFjX3NpdGVfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBsb2FkaW5nIHNpdGUgc2NyaXB0ICRhY19zaXRlX2ZpbGUiID4mNjt9CisgICAgc2VkICdzL14vfCAvJyAiJGFjX3NpdGVfZmlsZSIgPiY1CisgICAgLiAiJGFjX3NpdGVfZmlsZSIgXAorICAgICAgfHwgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAiZmFpbGVkIHRvIGxvYWQgc2l0ZSBzY3JpcHQgJGFjX3NpdGVfZmlsZQorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KKyAgZmkKK2RvbmUKKworaWYgdGVzdCAtciAiJGNhY2hlX2ZpbGUiOyB0aGVuCisgICMgU29tZSB2ZXJzaW9ucyBvZiBiYXNoIHdpbGwgZmFpbCB0byBzb3VyY2UgL2Rldi9udWxsIChzcGVjaWFsIGZpbGVzCisgICMgYWN0dWFsbHkpLCBzbyB3ZSBhdm9pZCBkb2luZyB0aGF0LiAgREpHUFAgZW11bGF0ZXMgaXQgYXMgYSByZWd1bGFyIGZpbGUuCisgIGlmIHRlc3QgL2Rldi9udWxsICE9ICIkY2FjaGVfZmlsZSIgJiYgdGVzdCAtZiAiJGNhY2hlX2ZpbGUiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBsb2FkaW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGxvYWRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CisgICAgY2FzZSAkY2FjaGVfZmlsZSBpbgorICAgICAgW1xcL10qIHwgPzpbXFwvXSogKSAuICIkY2FjaGVfZmlsZSI7OworICAgICAgKikgICAgICAgICAgICAgICAgICAgICAgLiAiLi8kY2FjaGVfZmlsZSI7OworICAgIGVzYWMKKyAgZmkKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjcmVhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBjcmVhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKyAgPiRjYWNoZV9maWxlCitmaQorCisjIENoZWNrIHRoYXQgdGhlIHByZWNpb3VzIHZhcmlhYmxlcyBzYXZlZCBpbiB0aGUgY2FjaGUgaGF2ZSBrZXB0IHRoZSBzYW1lCisjIHZhbHVlLgorYWNfY2FjaGVfY29ycnVwdGVkPWZhbHNlCitmb3IgYWNfdmFyIGluICRhY19wcmVjaW91c192YXJzOyBkbworICBldmFsIGFjX29sZF9zZXQ9XCRhY19jdl9lbnZfJHthY192YXJ9X3NldAorICBldmFsIGFjX25ld19zZXQ9XCRhY19lbnZfJHthY192YXJ9X3NldAorICBldmFsIGFjX29sZF92YWw9XCRhY19jdl9lbnZfJHthY192YXJ9X3ZhbHVlCisgIGV2YWwgYWNfbmV3X3ZhbD1cJGFjX2Vudl8ke2FjX3Zhcn1fdmFsdWUKKyAgY2FzZSAkYWNfb2xkX3NldCwkYWNfbmV3X3NldCBpbgorICAgIHNldCwpCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBcYCRhY192YXInIHdhcyBzZXQgdG8gXGAkYWNfb2xkX3ZhbCcgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgc2V0IHRvIFxgJGFjX29sZF92YWwnIGluIHRoZSBwcmV2aW91cyBydW4iID4mMjt9CisgICAgICBhY19jYWNoZV9jb3JydXB0ZWQ9OiA7OworICAgICxzZXQpCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBcYCRhY192YXInIHdhcyBub3Qgc2V0IGluIHRoZSBwcmV2aW91cyBydW4iID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIG5vdCBzZXQgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiYyO30KKyAgICAgIGFjX2NhY2hlX2NvcnJ1cHRlZD06IDs7CisgICAgLCk7OworICAgICopCisgICAgICBpZiB0ZXN0ICJ4JGFjX29sZF92YWwiICE9ICJ4JGFjX25ld192YWwiOyB0aGVuCisJIyBkaWZmZXJlbmNlcyBpbiB3aGl0ZXNwYWNlIGRvIG5vdCBsZWFkIHRvIGZhaWx1cmUuCisJYWNfb2xkX3ZhbF93PWBlY2hvIHggJGFjX29sZF92YWxgCisJYWNfbmV3X3ZhbF93PWBlY2hvIHggJGFjX25ld192YWxgCisJaWYgdGVzdCAiJGFjX29sZF92YWxfdyIgIT0gIiRhY19uZXdfdmFsX3ciOyB0aGVuCisJICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBcYCRhY192YXInIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBcYCRhY192YXInIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjI7fQorCSAgYWNfY2FjaGVfY29ycnVwdGVkPToKKwllbHNlCisJICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHdhcm5pbmc6IGlnbm9yaW5nIHdoaXRlc3BhY2UgY2hhbmdlcyBpbiBcYCRhY192YXInIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IHdhcm5pbmc6IGlnbm9yaW5nIHdoaXRlc3BhY2UgY2hhbmdlcyBpbiBcYCRhY192YXInIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjI7fQorCSAgZXZhbCAkYWNfdmFyPVwkYWNfb2xkX3ZhbAorCWZpCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAgIGZvcm1lciB2YWx1ZTogIFxgJGFjX29sZF92YWwnIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6ICAgZm9ybWVyIHZhbHVlOiAgXGAkYWNfb2xkX3ZhbCciID4mMjt9CisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAgIGN1cnJlbnQgdmFsdWU6IFxgJGFjX25ld192YWwnIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6ICAgY3VycmVudCB2YWx1ZTogXGAkYWNfbmV3X3ZhbCciID4mMjt9CisgICAgICBmaTs7CisgIGVzYWMKKyAgIyBQYXNzIHByZWNpb3VzIHZhcmlhYmxlcyB0byBjb25maWcuc3RhdHVzLgorICBpZiB0ZXN0ICIkYWNfbmV3X3NldCIgPSBzZXQ7IHRoZW4KKyAgICBjYXNlICRhY19uZXdfdmFsIGluCisgICAgKlwnKikgYWNfYXJnPSRhY192YXI9YCRhc19lY2hvICIkYWNfbmV3X3ZhbCIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKKyAgICAqKSBhY19hcmc9JGFjX3Zhcj0kYWNfbmV3X3ZhbCA7OworICAgIGVzYWMKKyAgICBjYXNlICIgJGFjX2NvbmZpZ3VyZV9hcmdzICIgaW4KKyAgICAgICoiICckYWNfYXJnJyAiKikgOzsgIyBBdm9pZCBkdXBzLiAgVXNlIG9mIHF1b3RlcyBlbnN1cmVzIGFjY3VyYWN5LgorICAgICAgKikgYXNfZm5fYXBwZW5kIGFjX2NvbmZpZ3VyZV9hcmdzICIgJyRhY19hcmcnIiA7OworICAgIGVzYWMKKyAgZmkKK2RvbmUKK2lmICRhY19jYWNoZV9jb3JydXB0ZWQ7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBjaGFuZ2VzIGluIHRoZSBlbnZpcm9ubWVudCBjYW4gY29tcHJvbWlzZSB0aGUgYnVpbGQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNoYW5nZXMgaW4gdGhlIGVudmlyb25tZW50IGNhbiBjb21wcm9taXNlIHRoZSBidWlsZCIgPiYyO30KKyAgYXNfZm5fZXJyb3IgJD8gInJ1biBcYG1ha2UgZGlzdGNsZWFuJyBhbmQvb3IgXGBybSAkY2FjaGVfZmlsZScgYW5kIHN0YXJ0IG92ZXIiICIkTElORU5PIiA1CitmaQorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE1haW4gYm9keSBvZiBzY3JpcHQuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKKworCisKK2FjX2NvbmZpZ19oZWFkZXJzPSIkYWNfY29uZmlnX2hlYWRlcnMgY29uZmlnLmgiCisKK2FtX19hcGlfdmVyc2lvbj0nMS4xMScKKworYWNfYXV4X2Rpcj0KK2ZvciBhY19kaXIgaW4gIiRzcmNkaXIiICIkc3JjZGlyLy4uIiAiJHNyY2Rpci8uLi8uLiI7IGRvCisgIGlmIHRlc3QgLWYgIiRhY19kaXIvaW5zdGFsbC1zaCI7IHRoZW4KKyAgICBhY19hdXhfZGlyPSRhY19kaXIKKyAgICBhY19pbnN0YWxsX3NoPSIkYWNfYXV4X2Rpci9pbnN0YWxsLXNoIC1jIgorICAgIGJyZWFrCisgIGVsaWYgdGVzdCAtZiAiJGFjX2Rpci9pbnN0YWxsLnNoIjsgdGhlbgorICAgIGFjX2F1eF9kaXI9JGFjX2RpcgorICAgIGFjX2luc3RhbGxfc2g9IiRhY19hdXhfZGlyL2luc3RhbGwuc2ggLWMiCisgICAgYnJlYWsKKyAgZWxpZiB0ZXN0IC1mICIkYWNfZGlyL3NodG9vbCI7IHRoZW4KKyAgICBhY19hdXhfZGlyPSRhY19kaXIKKyAgICBhY19pbnN0YWxsX3NoPSIkYWNfYXV4X2Rpci9zaHRvb2wgaW5zdGFsbCAtYyIKKyAgICBicmVhaworICBmaQorZG9uZQoraWYgdGVzdCAteiAiJGFjX2F1eF9kaXIiOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgZmluZCBpbnN0YWxsLXNoLCBpbnN0YWxsLnNoLCBvciBzaHRvb2wgaW4gXCIkc3JjZGlyXCIgXCIkc3JjZGlyLy4uXCIgXCIkc3JjZGlyLy4uLy4uXCIiICIkTElORU5PIiA1CitmaQorCisjIFRoZXNlIHRocmVlIHZhcmlhYmxlcyBhcmUgdW5kb2N1bWVudGVkIGFuZCB1bnN1cHBvcnRlZCwKKyMgYW5kIGFyZSBpbnRlbmRlZCB0byBiZSB3aXRoZHJhd24gaW4gYSBmdXR1cmUgQXV0b2NvbmYgcmVsZWFzZS4KKyMgVGhleSBjYW4gY2F1c2Ugc2VyaW91cyBwcm9ibGVtcyBpZiBhIGJ1aWxkZXIncyBzb3VyY2UgdHJlZSBpcyBpbiBhIGRpcmVjdG9yeQorIyB3aG9zZSBmdWxsIG5hbWUgY29udGFpbnMgdW51c3VhbCBjaGFyYWN0ZXJzLgorYWNfY29uZmlnX2d1ZXNzPSIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLmd1ZXNzIiAgIyBQbGVhc2UgZG9uJ3QgdXNlIHRoaXMgdmFyLgorYWNfY29uZmlnX3N1Yj0iJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIiICAjIFBsZWFzZSBkb24ndCB1c2UgdGhpcyB2YXIuCithY19jb25maWd1cmU9IiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWd1cmUiICAjIFBsZWFzZSBkb24ndCB1c2UgdGhpcyB2YXIuCisKKworIyBGaW5kIGEgZ29vZCBpbnN0YWxsIHByb2dyYW0uICBXZSBwcmVmZXIgYSBDIHByb2dyYW0gKGZhc3RlciksCisjIHNvIG9uZSBzY3JpcHQgaXMgYXMgZ29vZCBhcyBhbm90aGVyLiAgQnV0IGF2b2lkIHRoZSBicm9rZW4gb3IKKyMgaW5jb21wYXRpYmxlIHZlcnNpb25zOgorIyBTeXNWIC9ldGMvaW5zdGFsbCwgL3Vzci9zYmluL2luc3RhbGwKKyMgU3VuT1MgL3Vzci9ldGMvaW5zdGFsbAorIyBJUklYIC9zYmluL2luc3RhbGwKKyMgQUlYIC9iaW4vaW5zdGFsbAorIyBBbWlnYU9TIC9DL2luc3RhbGwsIHdoaWNoIGluc3RhbGxzIGJvb3RibG9ja3Mgb24gZmxvcHB5IGRpc2NzCisjIEFJWCA0IC91c3IvYmluL2luc3RhbGxic2QsIHdoaWNoIGRvZXNuJ3Qgd29yayB3aXRob3V0IGEgLWcgZmxhZworIyBBRlMgL3Vzci9hZnN3cy9iaW4vaW5zdGFsbCwgd2hpY2ggbWlzaGFuZGxlcyBub25leGlzdGVudCBhcmdzCisjIFNWUjQgL3Vzci91Y2IvaW5zdGFsbCwgd2hpY2ggdHJpZXMgdG8gdXNlIHRoZSBub25leGlzdGVudCBncm91cCAic3RhZmYiCisjIE9TLzIncyBzeXN0ZW0gaW5zdGFsbCwgd2hpY2ggaGFzIGEgY29tcGxldGVseSBkaWZmZXJlbnQgc2VtYW50aWMKKyMgLi9pbnN0YWxsLCB3aGljaCBjYW4gYmUgZXJyb25lb3VzbHkgY3JlYXRlZCBieSBtYWtlIGZyb20gLi9pbnN0YWxsLnNoLgorIyBSZWplY3QgaW5zdGFsbCBwcm9ncmFtcyB0aGF0IGNhbm5vdCBpbnN0YWxsIG11bHRpcGxlIGZpbGVzLgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYSBCU0QtY29tcGF0aWJsZSBpbnN0YWxsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhIEJTRC1jb21wYXRpYmxlIGluc3RhbGwuLi4gIiA+JjY7IH0KK2lmIHRlc3QgLXogIiRJTlNUQUxMIjsgdGhlbgoraWYgJHthY19jdl9wYXRoX2luc3RhbGwrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgIyBBY2NvdW50IGZvciBwZW9wbGUgd2hvIHB1dCB0cmFpbGluZyBzbGFzaGVzIGluIFBBVEggZWxlbWVudHMuCitjYXNlICRhc19kaXIvIGluICMoKAorICAuLyB8IC4vLyB8IC9bY0NdLyogfCBcCisgIC9ldGMvKiB8IC91c3Ivc2Jpbi8qIHwgL3Vzci9ldGMvKiB8IC9zYmluLyogfCAvdXNyL2Fmc3dzL2Jpbi8qIHwgXAorICA/OltcXC9db3MyW1xcL11pbnN0YWxsW1xcL10qIHwgPzpbXFwvXU9TMltcXC9dSU5TVEFMTFtcXC9dKiB8IFwKKyAgL3Vzci91Y2IvKiApIDs7CisgICopCisgICAgIyBPU0YxIGFuZCBTQ08gT0RUIDMuMCBoYXZlIHRoZWlyIG93biBuYW1lcyBmb3IgaW5zdGFsbC4KKyAgICAjIERvbid0IHVzZSBpbnN0YWxsYnNkIGZyb20gT1NGIHNpbmNlIGl0IGluc3RhbGxzIHN0dWZmIGFzIHJvb3QKKyAgICAjIGJ5IGRlZmF1bHQuCisgICAgZm9yIGFjX3Byb2cgaW4gZ2luc3RhbGwgc2NvaW5zdCBpbnN0YWxsOyBkbworICAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisJaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorCSAgaWYgdGVzdCAkYWNfcHJvZyA9IGluc3RhbGwgJiYKKwkgICAgZ3JlcCBkc3Btc2cgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiID4vZGV2L251bGwgMj4mMTsgdGhlbgorCSAgICAjIEFJWCBpbnN0YWxsLiAgSXQgaGFzIGFuIGluY29tcGF0aWJsZSBjYWxsaW5nIGNvbnZlbnRpb24uCisJICAgIDoKKwkgIGVsaWYgdGVzdCAkYWNfcHJvZyA9IGluc3RhbGwgJiYKKwkgICAgZ3JlcCBwd3BsdXMgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiID4vZGV2L251bGwgMj4mMTsgdGhlbgorCSAgICAjIHByb2dyYW0tc3BlY2lmaWMgaW5zdGFsbCBzY3JpcHQgdXNlZCBieSBIUCBwd3BsdXMtLWRvbid0IHVzZS4KKwkgICAgOgorCSAgZWxzZQorCSAgICBybSAtcmYgY29uZnRlc3Qub25lIGNvbmZ0ZXN0LnR3byBjb25mdGVzdC5kaXIKKwkgICAgZWNobyBvbmUgPiBjb25mdGVzdC5vbmUKKwkgICAgZWNobyB0d28gPiBjb25mdGVzdC50d28KKwkgICAgbWtkaXIgY29uZnRlc3QuZGlyCisJICAgIGlmICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiAtYyBjb25mdGVzdC5vbmUgY29uZnRlc3QudHdvICJgcHdkYC9jb25mdGVzdC5kaXIiICYmCisJICAgICAgdGVzdCAtcyBjb25mdGVzdC5vbmUgJiYgdGVzdCAtcyBjb25mdGVzdC50d28gJiYKKwkgICAgICB0ZXN0IC1zIGNvbmZ0ZXN0LmRpci9jb25mdGVzdC5vbmUgJiYKKwkgICAgICB0ZXN0IC1zIGNvbmZ0ZXN0LmRpci9jb25mdGVzdC50d28KKwkgICAgdGhlbgorCSAgICAgIGFjX2N2X3BhdGhfaW5zdGFsbD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCAtYyIKKwkgICAgICBicmVhayAzCisJICAgIGZpCisJICBmaQorCWZpCisgICAgICBkb25lCisgICAgZG9uZQorICAgIDs7Citlc2FjCisKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitybSAtcmYgY29uZnRlc3Qub25lIGNvbmZ0ZXN0LnR3byBjb25mdGVzdC5kaXIKKworZmkKKyAgaWYgdGVzdCAiJHthY19jdl9wYXRoX2luc3RhbGwrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgICBJTlNUQUxMPSRhY19jdl9wYXRoX2luc3RhbGwKKyAgZWxzZQorICAgICMgQXMgYSBsYXN0IHJlc29ydCwgdXNlIHRoZSBzbG93IHNoZWxsIHNjcmlwdC4gIERvbid0IGNhY2hlIGEKKyAgICAjIHZhbHVlIGZvciBJTlNUQUxMIHdpdGhpbiBhIHNvdXJjZSBkaXJlY3RvcnksIGJlY2F1c2UgdGhhdCB3aWxsCisgICAgIyBicmVhayBvdGhlciBwYWNrYWdlcyB1c2luZyB0aGUgY2FjaGUgaWYgdGhhdCBkaXJlY3RvcnkgaXMKKyAgICAjIHJlbW92ZWQsIG9yIGlmIHRoZSB2YWx1ZSBpcyBhIHJlbGF0aXZlIG5hbWUuCisgICAgSU5TVEFMTD0kYWNfaW5zdGFsbF9zaAorICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkSU5TVEFMTCIgPiY1CiskYXNfZWNobyAiJElOU1RBTEwiID4mNjsgfQorCisjIFVzZSB0ZXN0IC16IGJlY2F1c2UgU3VuT1M0IHNoIG1pc2hhbmRsZXMgYnJhY2VzIGluICR7dmFyLXZhbH0uCisjIEl0IHRoaW5rcyB0aGUgZmlyc3QgY2xvc2UgYnJhY2UgZW5kcyB0aGUgdmFyaWFibGUgc3Vic3RpdHV0aW9uLgordGVzdCAteiAiJElOU1RBTExfUFJPR1JBTSIgJiYgSU5TVEFMTF9QUk9HUkFNPScke0lOU1RBTEx9JworCit0ZXN0IC16ICIkSU5TVEFMTF9TQ1JJUFQiICYmIElOU1RBTExfU0NSSVBUPScke0lOU1RBTEx9JworCit0ZXN0IC16ICIkSU5TVEFMTF9EQVRBIiAmJiBJTlNUQUxMX0RBVEE9JyR7SU5TVEFMTH0gLW0gNjQ0JworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgYnVpbGQgZW52aXJvbm1lbnQgaXMgc2FuZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGJ1aWxkIGVudmlyb25tZW50IGlzIHNhbmUuLi4gIiA+JjY7IH0KKyMgSnVzdCBpbiBjYXNlCitzbGVlcCAxCitlY2hvIHRpbWVzdGFtcCA+IGNvbmZ0ZXN0LmZpbGUKKyMgUmVqZWN0IHVuc2FmZSBjaGFyYWN0ZXJzIGluICRzcmNkaXIgb3IgdGhlIGFic29sdXRlIHdvcmtpbmcgZGlyZWN0b3J5CisjIG5hbWUuICBBY2NlcHQgc3BhY2UgYW5kIHRhYiBvbmx5IGluIHRoZSBsYXR0ZXIuCithbV9sZj0nCisnCitjYXNlIGBwd2RgIGluCisgICpbXFxcIlwjXCRcJlwnXGAkYW1fbGZdKikKKyAgICBhc19mbl9lcnJvciAkPyAidW5zYWZlIGFic29sdXRlIHdvcmtpbmcgZGlyZWN0b3J5IG5hbWUiICIkTElORU5PIiA1OzsKK2VzYWMKK2Nhc2UgJHNyY2RpciBpbgorICAqW1xcXCJcI1wkXCZcJ1xgJGFtX2xmXCBcCV0qKQorICAgIGFzX2ZuX2Vycm9yICQ/ICJ1bnNhZmUgc3JjZGlyIHZhbHVlOiBcYCRzcmNkaXInIiAiJExJTkVOTyIgNTs7Citlc2FjCisKKyMgRG8gYHNldCcgaW4gYSBzdWJzaGVsbCBzbyB3ZSBkb24ndCBjbG9iYmVyIHRoZSBjdXJyZW50IHNoZWxsJ3MKKyMgYXJndW1lbnRzLiAgTXVzdCB0cnkgLUwgZmlyc3QgaW4gY2FzZSBjb25maWd1cmUgaXMgYWN0dWFsbHkgYQorIyBzeW1saW5rOyBzb21lIHN5c3RlbXMgcGxheSB3ZWlyZCBnYW1lcyB3aXRoIHRoZSBtb2QgdGltZSBvZiBzeW1saW5rcworIyAoZWcgRnJlZUJTRCByZXR1cm5zIHRoZSBtb2QgdGltZSBvZiB0aGUgc3ltbGluaydzIGNvbnRhaW5pbmcKKyMgZGlyZWN0b3J5KS4KK2lmICgKKyAgIHNldCBYIGBscyAtTHQgIiRzcmNkaXIvY29uZmlndXJlIiBjb25mdGVzdC5maWxlIDI+IC9kZXYvbnVsbGAKKyAgIGlmIHRlc3QgIiQqIiA9ICJYIjsgdGhlbgorICAgICAgIyAtTCBkaWRuJ3Qgd29yay4KKyAgICAgIHNldCBYIGBscyAtdCAiJHNyY2Rpci9jb25maWd1cmUiIGNvbmZ0ZXN0LmZpbGVgCisgICBmaQorICAgcm0gLWYgY29uZnRlc3QuZmlsZQorICAgaWYgdGVzdCAiJCoiICE9ICJYICRzcmNkaXIvY29uZmlndXJlIGNvbmZ0ZXN0LmZpbGUiIFwKKyAgICAgICYmIHRlc3QgIiQqIiAhPSAiWCBjb25mdGVzdC5maWxlICRzcmNkaXIvY29uZmlndXJlIjsgdGhlbgorCisgICAgICAjIElmIG5laXRoZXIgbWF0Y2hlZCwgdGhlbiB3ZSBoYXZlIGEgYnJva2VuIGxzLiAgVGhpcyBjYW4gaGFwcGVuCisgICAgICAjIGlmLCBmb3IgaW5zdGFuY2UsIENPTkZJR19TSEVMTCBpcyBiYXNoIGFuZCBpdCBpbmhlcml0cyBhCisgICAgICAjIGJyb2tlbiBscyBhbGlhcyBmcm9tIHRoZSBlbnZpcm9ubWVudC4gIFRoaXMgaGFzIGFjdHVhbGx5CisgICAgICAjIGhhcHBlbmVkLiAgU3VjaCBhIHN5c3RlbSBjb3VsZCBub3QgYmUgY29uc2lkZXJlZCAic2FuZSIuCisgICAgICBhc19mbl9lcnJvciAkPyAibHMgLXQgYXBwZWFycyB0byBmYWlsLiAgTWFrZSBzdXJlIHRoZXJlIGlzIG5vdCBhIGJyb2tlbgorYWxpYXMgaW4geW91ciBlbnZpcm9ubWVudCIgIiRMSU5FTk8iIDUKKyAgIGZpCisKKyAgIHRlc3QgIiQyIiA9IGNvbmZ0ZXN0LmZpbGUKKyAgICkKK3RoZW4KKyAgICMgT2suCisgICA6CitlbHNlCisgICBhc19mbl9lcnJvciAkPyAibmV3bHkgY3JlYXRlZCBmaWxlIGlzIG9sZGVyIHRoYW4gZGlzdHJpYnV0ZWQgZmlsZXMhCitDaGVjayB5b3VyIHN5c3RlbSBjbG9jayIgIiRMSU5FTk8iIDUKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQordGVzdCAiJHByb2dyYW1fcHJlZml4IiAhPSBOT05FICYmCisgIHByb2dyYW1fdHJhbnNmb3JtX25hbWU9InMmXiYkcHJvZ3JhbV9wcmVmaXgmOyRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIgorIyBVc2UgYSBkb3VibGUgJCBzbyBtYWtlIGlnbm9yZXMgaXQuCit0ZXN0ICIkcHJvZ3JhbV9zdWZmaXgiICE9IE5PTkUgJiYKKyAgcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT0icyZcJCYkcHJvZ3JhbV9zdWZmaXgmOyRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIgorIyBEb3VibGUgYW55IFwgb3IgJC4KKyMgQnkgZGVmYXVsdCB3YXMgYHMseCx4JywgcmVtb3ZlIGl0IGlmIHVzZWxlc3MuCithY19zY3JpcHQ9J3MvW1xcJF0vJiYvZztzLztzLHgseCwkLy8nCitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPWAkYXNfZWNobyAiJHByb2dyYW1fdHJhbnNmb3JtX25hbWUiIHwgc2VkICIkYWNfc2NyaXB0ImAKKworIyBleHBhbmQgJGFjX2F1eF9kaXIgdG8gYW4gYWJzb2x1dGUgcGF0aAorYW1fYXV4X2Rpcj1gY2QgJGFjX2F1eF9kaXIgJiYgcHdkYAorCitpZiB0ZXN0IHgiJHtNSVNTSU5HK3NldH0iICE9IHhzZXQ7IHRoZW4KKyAgY2FzZSAkYW1fYXV4X2RpciBpbgorICAqXCAqIHwgKlwJKikKKyAgICBNSVNTSU5HPSJcJHtTSEVMTH0gXCIkYW1fYXV4X2Rpci9taXNzaW5nXCIiIDs7CisgICopCisgICAgTUlTU0lORz0iXCR7U0hFTEx9ICRhbV9hdXhfZGlyL21pc3NpbmciIDs7CisgIGVzYWMKK2ZpCisjIFVzZSBldmFsIHRvIGV4cGFuZCAkU0hFTEwKK2lmIGV2YWwgIiRNSVNTSU5HIC0tcnVuIHRydWUiOyB0aGVuCisgIGFtX21pc3NpbmdfcnVuPSIkTUlTU0lORyAtLXJ1biAiCitlbHNlCisgIGFtX21pc3NpbmdfcnVuPQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IFxgbWlzc2luZycgc2NyaXB0IGlzIHRvbyBvbGQgb3IgbWlzc2luZyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBcYG1pc3NpbmcnIHNjcmlwdCBpcyB0b28gb2xkIG9yIG1pc3NpbmciID4mMjt9CitmaQorCitpZiB0ZXN0IHgiJHtpbnN0YWxsX3NofSIgIT0geHNldDsgdGhlbgorICBjYXNlICRhbV9hdXhfZGlyIGluCisgICpcICogfCAqXAkqKQorICAgIGluc3RhbGxfc2g9Ilwke1NIRUxMfSAnJGFtX2F1eF9kaXIvaW5zdGFsbC1zaCciIDs7CisgICopCisgICAgaW5zdGFsbF9zaD0iXCR7U0hFTEx9ICRhbV9hdXhfZGlyL2luc3RhbGwtc2giCisgIGVzYWMKK2ZpCisKKyMgSW5zdGFsbGVkIGJpbmFyaWVzIGFyZSB1c3VhbGx5IHN0cmlwcGVkIHVzaW5nIGBzdHJpcCcgd2hlbiB0aGUgdXNlcgorIyBydW4gYG1ha2UgaW5zdGFsbC1zdHJpcCcuICBIb3dldmVyIGBzdHJpcCcgbWlnaHQgbm90IGJlIHRoZSByaWdodAorIyB0b29sIHRvIHVzZSBpbiBjcm9zcy1jb21waWxhdGlvbiBlbnZpcm9ubWVudHMsIHRoZXJlZm9yZSBBdXRvbWFrZQorIyB3aWxsIGhvbm9yIHRoZSBgU1RSSVAnIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIG92ZXJydWxlIHRoaXMgcHJvZ3JhbS4KK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciICE9IG5vOyB0aGVuCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXN0cmlwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXN0cmlwOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19TVFJJUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19TVFJJUD0iJFNUUklQIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfU1RSSVA9IiR7YWNfdG9vbF9wcmVmaXh9c3RyaXAiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorU1RSSVA9JGFjX2N2X3Byb2dfU1RSSVAKK2lmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRTVFJJUCIgPiY1CiskYXNfZWNobyAiJFNUUklQIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19TVFJJUCI7IHRoZW4KKyAgYWNfY3RfU1RSSVA9JFNUUklQCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAic3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IHN0cmlwOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9TVFJJUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9TVFJJUCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9TVFJJUD0iJGFjX2N0X1NUUklQIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfU1RSSVA9InN0cmlwIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X1NUUklQPSRhY19jdl9wcm9nX2FjX2N0X1NUUklQCitpZiB0ZXN0IC1uICIkYWNfY3RfU1RSSVAiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfU1RSSVAiID4mNQorJGFzX2VjaG8gIiRhY19jdF9TVFJJUCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X1NUUklQIiA9IHg7IHRoZW4KKyAgICBTVFJJUD0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBTVFJJUD0kYWNfY3RfU1RSSVAKKyAgZmkKK2Vsc2UKKyAgU1RSSVA9IiRhY19jdl9wcm9nX1NUUklQIgorZmkKKworZmkKK0lOU1RBTExfU1RSSVBfUFJPR1JBTT0iXCQoaW5zdGFsbF9zaCkgLWMgLXMiCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGEgdGhyZWFkLXNhZmUgbWtkaXIgLXAiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGEgdGhyZWFkLXNhZmUgbWtkaXIgLXAuLi4gIiA+JjY7IH0KK2lmIHRlc3QgLXogIiRNS0RJUl9QIjsgdGhlbgorICBpZiAke2FjX2N2X3BhdGhfbWtkaXIrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL29wdC9zZncvYmluCitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX3Byb2cgaW4gbWtkaXIgZ21rZGlyOyBkbworCSBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKwkgICB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiOyB9IHx8IGNvbnRpbnVlCisJICAgY2FzZSBgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiIC0tdmVyc2lvbiAyPiYxYCBpbiAjKAorCSAgICAgJ21rZGlyIChHTlUgY29yZXV0aWxzKSAnKiB8IFwKKwkgICAgICdta2RpciAoY29yZXV0aWxzKSAnKiB8IFwKKwkgICAgICdta2RpciAoZmlsZXV0aWxzKSAnNC4xKikKKwkgICAgICAgYWNfY3ZfcGF0aF9ta2Rpcj0kYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0CisJICAgICAgIGJyZWFrIDM7OworCSAgIGVzYWMKKwkgZG9uZQorICAgICAgIGRvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorCisgIHRlc3QgLWQgLi8tLXZlcnNpb24gJiYgcm1kaXIgLi8tLXZlcnNpb24KKyAgaWYgdGVzdCAiJHthY19jdl9wYXRoX21rZGlyK3NldH0iID0gc2V0OyB0aGVuCisgICAgTUtESVJfUD0iJGFjX2N2X3BhdGhfbWtkaXIgLXAiCisgIGVsc2UKKyAgICAjIEFzIGEgbGFzdCByZXNvcnQsIHVzZSB0aGUgc2xvdyBzaGVsbCBzY3JpcHQuICBEb24ndCBjYWNoZSBhCisgICAgIyB2YWx1ZSBmb3IgTUtESVJfUCB3aXRoaW4gYSBzb3VyY2UgZGlyZWN0b3J5LCBiZWNhdXNlIHRoYXQgd2lsbAorICAgICMgYnJlYWsgb3RoZXIgcGFja2FnZXMgdXNpbmcgdGhlIGNhY2hlIGlmIHRoYXQgZGlyZWN0b3J5IGlzCisgICAgIyByZW1vdmVkLCBvciBpZiB0aGUgdmFsdWUgaXMgYSByZWxhdGl2ZSBuYW1lLgorICAgIE1LRElSX1A9IiRhY19pbnN0YWxsX3NoIC1kIgorICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTUtESVJfUCIgPiY1CiskYXNfZWNobyAiJE1LRElSX1AiID4mNjsgfQorCitta2Rpcl9wPSIkTUtESVJfUCIKK2Nhc2UgJG1rZGlyX3AgaW4KKyAgW1xcLyRdKiB8ID86W1xcL10qKSA7OworICAqLyopIG1rZGlyX3A9IlwkKHRvcF9idWlsZGRpcikvJG1rZGlyX3AiIDs7Citlc2FjCisKK2ZvciBhY19wcm9nIGluIGdhd2sgbWF3ayBuYXdrIGF3aworZG8KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX0FXSys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRBV0siOyB0aGVuCisgIGFjX2N2X3Byb2dfQVdLPSIkQVdLIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfQVdLPSIkYWNfcHJvZyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitBV0s9JGFjX2N2X3Byb2dfQVdLCitpZiB0ZXN0IC1uICIkQVdLIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEFXSyIgPiY1CiskYXNfZWNobyAiJEFXSyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgIHRlc3QgLW4gIiRBV0siICYmIGJyZWFrCitkb25lCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAke01BS0UtbWFrZX0gc2V0cyBcJChNQUtFKSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICR7TUFLRS1tYWtlfSBzZXRzIFwkKE1BS0UpLi4uICIgPiY2OyB9CitzZXQgeCAke01BS0UtbWFrZX0KK2FjX21ha2U9YCRhc19lY2hvICIkMiIgfCBzZWQgJ3MvKy9wL2c7IHMvW15hLXpBLVowLTlfXS9fL2cnYAoraWYgZXZhbCBcJHthY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0Lm1ha2UgPDxcX0FDRU9GCitTSEVMTCA9IC9iaW4vc2gKK2FsbDoKKwlAZWNobyAnQEBAJSUlPSQoTUFLRSk9QEBAJSUlJworX0FDRU9GCisjIEdOVSBtYWtlIHNvbWV0aW1lcyBwcmludHMgIm1ha2VbMV06IEVudGVyaW5nIC4uLiIsIHdoaWNoIHdvdWxkIGNvbmZ1c2UgdXMuCitjYXNlIGAke01BS0UtbWFrZX0gLWYgY29uZnRlc3QubWFrZSAyPi9kZXYvbnVsbGAgaW4KKyAgKkBAQCUlJT0/Kj1AQEAlJSUqKQorICAgIGV2YWwgYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0PXllczs7CisgICopCisgICAgZXZhbCBhY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQ9bm87OworZXNhYworcm0gLWYgY29uZnRlc3QubWFrZQorZmkKK2lmIGV2YWwgdGVzdCBcJGFjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldCA9IHllczsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICBTRVRfTUFLRT0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgIFNFVF9NQUtFPSJNQUtFPSR7TUFLRS1tYWtlfSIKK2ZpCisKK3JtIC1yZiAudHN0IDI+L2Rldi9udWxsCitta2RpciAudHN0IDI+L2Rldi9udWxsCitpZiB0ZXN0IC1kIC50c3Q7IHRoZW4KKyAgYW1fX2xlYWRpbmdfZG90PS4KK2Vsc2UKKyAgYW1fX2xlYWRpbmdfZG90PV8KK2ZpCitybWRpciAudHN0IDI+L2Rldi9udWxsCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zaWxlbnQtcnVsZXMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfc2lsZW50X3J1bGVzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfc2lsZW50X3J1bGVzOworZmkKKworY2FzZSAkZW5hYmxlX3NpbGVudF9ydWxlcyBpbgoreWVzKSBBTV9ERUZBVUxUX1ZFUkJPU0lUWT0wOzsKK25vKSAgQU1fREVGQVVMVF9WRVJCT1NJVFk9MTs7CisqKSAgIEFNX0RFRkFVTFRfVkVSQk9TSVRZPTE7OworZXNhYworYW1fbWFrZT0ke01BS0UtbWFrZX0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkYW1fbWFrZSBzdXBwb3J0cyBuZXN0ZWQgdmFyaWFibGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJGFtX21ha2Ugc3VwcG9ydHMgbmVzdGVkIHZhcmlhYmxlcy4uLiAiID4mNjsgfQoraWYgJHthbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlcys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmICRhc19lY2hvICdUUlVFPSQoQkFSJChWKSkKK0JBUjA9ZmFsc2UKK0JBUjE9dHJ1ZQorVj0xCithbV9fZG9pdDoKKwlAJChUUlVFKQorLlBIT05ZOiBhbV9fZG9pdCcgfCAkYW1fbWFrZSAtZiAtID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlcz15ZXMKK2Vsc2UKKyAgYW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXM9bm8KK2ZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlcyIgPiY1CiskYXNfZWNobyAiJGFtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzIiA+JjY7IH0KK2lmIHRlc3QgJGFtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzID0geWVzOyB0aGVuCisgICAgQU1fVj0nJChWKScKKyAgQU1fREVGQVVMVF9WPSckKEFNX0RFRkFVTFRfVkVSQk9TSVRZKScKK2Vsc2UKKyAgQU1fVj0kQU1fREVGQVVMVF9WRVJCT1NJVFkKKyAgQU1fREVGQVVMVF9WPSRBTV9ERUZBVUxUX1ZFUkJPU0lUWQorZmkKK0FNX0JBQ0tTTEFTSD0nXCcKKworaWYgdGVzdCAiYGNkICRzcmNkaXIgJiYgcHdkYCIgIT0gImBwd2RgIjsgdGhlbgorICAjIFVzZSAtSSQoc3JjZGlyKSBvbmx5IHdoZW4gJChzcmNkaXIpICE9IC4sIHNvIHRoYXQgbWFrZSdzIG91dHB1dAorICAjIGlzIG5vdCBwb2xsdXRlZCB3aXRoIHJlcGVhdGVkICItSS4iCisgIGFtX19pc3JjPScgLUkkKHNyY2RpciknCisgICMgdGVzdCB0byBzZWUgaWYgc3JjZGlyIGFscmVhZHkgY29uZmlndXJlZAorICBpZiB0ZXN0IC1mICRzcmNkaXIvY29uZmlnLnN0YXR1czsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJzb3VyY2UgZGlyZWN0b3J5IGFscmVhZHkgY29uZmlndXJlZDsgcnVuIFwibWFrZSBkaXN0Y2xlYW5cIiB0aGVyZSBmaXJzdCIgIiRMSU5FTk8iIDUKKyAgZmkKK2ZpCisKKyMgdGVzdCB3aGV0aGVyIHdlIGhhdmUgY3lncGF0aAoraWYgdGVzdCAteiAiJENZR1BBVEhfVyI7IHRoZW4KKyAgaWYgKGN5Z3BhdGggLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+L2Rldi9udWxsOyB0aGVuCisgICAgQ1lHUEFUSF9XPSdjeWdwYXRoIC13JworICBlbHNlCisgICAgQ1lHUEFUSF9XPWVjaG8KKyAgZmkKK2ZpCisKKworIyBEZWZpbmUgdGhlIGlkZW50aXR5IG9mIHRoZSBwYWNrYWdlLgorIFBBQ0tBR0U9J2F2YWhpJworIFZFUlNJT049JzAuNi4zMScKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFBBQ0tBR0UgIiRQQUNLQUdFIgorX0FDRU9GCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBWRVJTSU9OICIkVkVSU0lPTiIKK19BQ0VPRgorCisjIFNvbWUgdG9vbHMgQXV0b21ha2UgbmVlZHMuCisKK0FDTE9DQUw9JHtBQ0xPQ0FMLSIke2FtX21pc3NpbmdfcnVufWFjbG9jYWwtJHthbV9fYXBpX3ZlcnNpb259In0KKworCitBVVRPQ09ORj0ke0FVVE9DT05GLSIke2FtX21pc3NpbmdfcnVufWF1dG9jb25mIn0KKworCitBVVRPTUFLRT0ke0FVVE9NQUtFLSIke2FtX21pc3NpbmdfcnVufWF1dG9tYWtlLSR7YW1fX2FwaV92ZXJzaW9ufSJ9CisKKworQVVUT0hFQURFUj0ke0FVVE9IRUFERVItIiR7YW1fbWlzc2luZ19ydW59YXV0b2hlYWRlciJ9CisKKworTUFLRUlORk89JHtNQUtFSU5GTy0iJHthbV9taXNzaW5nX3J1bn1tYWtlaW5mbyJ9CisKKyMgV2UgbmVlZCBhd2sgZm9yIHRoZSAiY2hlY2siIHRhcmdldC4gIFRoZSBzeXN0ZW0gImF3ayIgaXMgYmFkIG9uCisjIHNvbWUgcGxhdGZvcm1zLgorIyBBbHdheXMgZGVmaW5lIEFNVEFSIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAgWWVzLCBpdCdzIHN0aWxsIHVzZWQKKyMgaW4gdGhlIHdpbGQgOi0oICBXZSBzaG91bGQgZmluZCBhIHByb3BlciB3YXkgdG8gZGVwcmVjYXRlIGl0IC4uLgorQU1UQVI9JyQke1RBUi10YXJ9JworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGNyZWF0ZSBhIHBheCB0YXIgYXJjaGl2ZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gY3JlYXRlIGEgcGF4IHRhciBhcmNoaXZlLi4uICIgPiY2OyB9CisjIExvb3Agb3ZlciBhbGwga25vd24gbWV0aG9kcyB0byBjcmVhdGUgYSB0YXIgYXJjaGl2ZSB1bnRpbCBvbmUgd29ya3MuCitfYW1fdG9vbHM9J2dudXRhciAgcGF4IGNwaW8gbm9uZScKK19hbV90b29scz0ke2FtX2N2X3Byb2dfdGFyX3BheC0kX2FtX3Rvb2xzfQorIyBEbyBub3QgZm9sZCB0aGUgYWJvdmUgdHdvIGxpbmUgaW50byBvbmUsIGJlY2F1c2UgVHJ1NjQgc2ggYW5kCisjIFNvbGFyaXMgc2ggd2lsbCBub3QgZ3JvayBzcGFjZXMgaW4gdGhlIHJocyBvZiBgLScuCitmb3IgX2FtX3Rvb2wgaW4gJF9hbV90b29scworZG8KKyAgY2FzZSAkX2FtX3Rvb2wgaW4KKyAgZ251dGFyKQorICAgIGZvciBfYW1fdGFyIGluIHRhciBnbnV0YXIgZ3RhcjsKKyAgICBkbworICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogJF9hbV90YXIgLS12ZXJzaW9uIiA+JjUKKyAgICgkX2FtX3RhciAtLXZlcnNpb24pID4mNSAyPiY1CisgICBhY19zdGF0dXM9JD8KKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIGJyZWFrCisgICAgZG9uZQorICAgIGFtX190YXI9IiRfYW1fdGFyIC0tZm9ybWF0PXBvc2l4IC1jaGYgLSAiJyIkJHRhcmRpciInCisgICAgYW1fX3Rhcl89IiRfYW1fdGFyIC0tZm9ybWF0PXBvc2l4IC1jaGYgLSAiJyIkdGFyZGlyIicKKyAgICBhbV9fdW50YXI9IiRfYW1fdGFyIC14ZiAtIgorICAgIDs7CisgIHBsYWludGFyKQorICAgICMgTXVzdCBza2lwIEdOVSB0YXI6IGlmIGl0IGRvZXMgbm90IHN1cHBvcnQgLS1mb3JtYXQ9IGl0IGRvZXNuJ3QgY3JlYXRlCisgICAgIyB1c3RhciB0YXJiYWxsIGVpdGhlci4KKyAgICAodGFyIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxICYmIGNvbnRpbnVlCisgICAgYW1fX3Rhcj0ndGFyIGNoZiAtICIkJHRhcmRpciInCisgICAgYW1fX3Rhcl89J3RhciBjaGYgLSAiJHRhcmRpciInCisgICAgYW1fX3VudGFyPSd0YXIgeGYgLScKKyAgICA7OworICBwYXgpCisgICAgYW1fX3Rhcj0ncGF4IC1MIC14IHBheCAtdyAiJCR0YXJkaXIiJworICAgIGFtX190YXJfPSdwYXggLUwgLXggcGF4IC13ICIkdGFyZGlyIicKKyAgICBhbV9fdW50YXI9J3BheCAtcicKKyAgICA7OworICBjcGlvKQorICAgIGFtX190YXI9J2ZpbmQgIiQkdGFyZGlyIiAtcHJpbnQgfCBjcGlvIC1vIC1IIHBheCAtTCcKKyAgICBhbV9fdGFyXz0nZmluZCAiJHRhcmRpciIgLXByaW50IHwgY3BpbyAtbyAtSCBwYXggLUwnCisgICAgYW1fX3VudGFyPSdjcGlvIC1pIC1IIHBheCAtZCcKKyAgICA7OworICBub25lKQorICAgIGFtX190YXI9ZmFsc2UKKyAgICBhbV9fdGFyXz1mYWxzZQorICAgIGFtX191bnRhcj1mYWxzZQorICAgIDs7CisgIGVzYWMKKworICAjIElmIHRoZSB2YWx1ZSB3YXMgY2FjaGVkLCBzdG9wIG5vdy4gIFdlIGp1c3Qgd2FudGVkIHRvIGhhdmUgYW1fX3RhcgorICAjIGFuZCBhbV9fdW50YXIgc2V0LgorICB0ZXN0IC1uICIke2FtX2N2X3Byb2dfdGFyX3BheH0iICYmIGJyZWFrCisKKyAgIyB0YXIvdW50YXIgYSBkdW1teSBkaXJlY3RvcnksIGFuZCBzdG9wIGlmIHRoZSBjb21tYW5kIHdvcmtzCisgIHJtIC1yZiBjb25mdGVzdC5kaXIKKyAgbWtkaXIgY29uZnRlc3QuZGlyCisgIGVjaG8gR3JlcE1lID4gY29uZnRlc3QuZGlyL2ZpbGUKKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogdGFyZGlyPWNvbmZ0ZXN0LmRpciAmJiBldmFsICRhbV9fdGFyXyA+Y29uZnRlc3QudGFyIiA+JjUKKyAgICh0YXJkaXI9Y29uZnRlc3QuZGlyICYmIGV2YWwgJGFtX190YXJfID5jb25mdGVzdC50YXIpID4mNSAyPiY1CisgICBhY19zdGF0dXM9JD8KKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9CisgIHJtIC1yZiBjb25mdGVzdC5kaXIKKyAgaWYgdGVzdCAtcyBjb25mdGVzdC50YXI7IHRoZW4KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiAkYW1fX3VudGFyIDxjb25mdGVzdC50YXIiID4mNQorICAgKCRhbV9fdW50YXIgPGNvbmZ0ZXN0LnRhcikgPiY1IDI+JjUKKyAgIGFjX3N0YXR1cz0kPworICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KKyAgICBncmVwIEdyZXBNZSBjb25mdGVzdC5kaXIvZmlsZSA+L2Rldi9udWxsIDI+JjEgJiYgYnJlYWsKKyAgZmkKK2RvbmUKK3JtIC1yZiBjb25mdGVzdC5kaXIKKworaWYgJHthbV9jdl9wcm9nX3Rhcl9wYXgrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhbV9jdl9wcm9nX3Rhcl9wYXg9JF9hbV90b29sCitmaQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFtX2N2X3Byb2dfdGFyX3BheCIgPiY1CiskYXNfZWNobyAiJGFtX2N2X3Byb2dfdGFyX3BheCIgPiY2OyB9CisKKworCisKKworCitQQUNLQUdFX1VSTD1odHRwOi8vYXZhaGkub3JnLworCisKK0xJQkFWQUhJX0NPTU1PTl9WRVJTSU9OX0lORk89ODozOjUKKworTElCQVZBSElfQ09SRV9WRVJTSU9OX0lORk89NzoyOjAKKworTElCQVZBSElfQ0xJRU5UX1ZFUlNJT05fSU5GTz01Ojk6MgorCitMSUJBVkFISV9HTElCX1ZFUlNJT05fSU5GTz0xOjI6MAorCitMSUJBVkFISV9HT0JKRUNUX1ZFUlNJT05fSU5GTz0wOjQ6MAorCitMSUJBVkFISV9RVDNfVkVSU0lPTl9JTkZPPTE6MjowCisKK0xJQkFWQUhJX1FUNF9WRVJTSU9OX0lORk89MToyOjAKKworTElCQVZBSElfVUlfVkVSU0lPTl9JTkZPPTE6NDoxCisKKworIyBEbyBub3QgdG91Y2ggdGhlc2UsIHNpbmNlIHRoZXkgd2UgdG9vayB0aGlzIHZlcnNpb24taW5mbyBmcm9tIHVwc3RyZWFtIEhPV0wvQm9uam91cgorTElCQVZBSElfQ09NUEFUX0xJQkROU19TRF9WRVJTSU9OX0lORk89MTowOjAKKworTElCQVZBSElfQ09NUEFUX0hPV0xfVkVSU0lPTl9JTkZPPTA6MDowCisKK0hPV0xfQ09NUEFUX1ZFUlNJT049MC45LjgKKworCisjIE1ha2Ugc3VyZSB3ZSBjYW4gcnVuIGNvbmZpZy5zdWIuCiskU0hFTEwgIiRhY19hdXhfZGlyL2NvbmZpZy5zdWIiIHN1bjQgPi9kZXYvbnVsbCAyPiYxIHx8CisgIGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgcnVuICRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViIiAiJExJTkVOTyIgNQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGJ1aWxkIHN5c3RlbSB0eXBlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGJ1aWxkIHN5c3RlbSB0eXBlLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2J1aWxkKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfYnVpbGRfYWxpYXM9JGJ1aWxkX2FsaWFzCit0ZXN0ICJ4JGFjX2J1aWxkX2FsaWFzIiA9IHggJiYKKyAgYWNfYnVpbGRfYWxpYXM9YCRTSEVMTCAiJGFjX2F1eF9kaXIvY29uZmlnLmd1ZXNzImAKK3Rlc3QgIngkYWNfYnVpbGRfYWxpYXMiID0geCAmJgorICBhc19mbl9lcnJvciAkPyAiY2Fubm90IGd1ZXNzIGJ1aWxkIHR5cGU7IHlvdSBtdXN0IHNwZWNpZnkgb25lIiAiJExJTkVOTyIgNQorYWNfY3ZfYnVpbGQ9YCRTSEVMTCAiJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgJGFjX2J1aWxkX2FsaWFzYCB8fAorICBhc19mbl9lcnJvciAkPyAiJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIgJGFjX2J1aWxkX2FsaWFzIGZhaWxlZCIgIiRMSU5FTk8iIDUKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfYnVpbGQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9idWlsZCIgPiY2OyB9CitjYXNlICRhY19jdl9idWlsZCBpbgorKi0qLSopIDs7CisqKSBhc19mbl9lcnJvciAkPyAiaW52YWxpZCB2YWx1ZSBvZiBjYW5vbmljYWwgYnVpbGQiICIkTElORU5PIiA1OzsKK2VzYWMKK2J1aWxkPSRhY19jdl9idWlsZAorYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSctJworc2V0IHggJGFjX2N2X2J1aWxkCitzaGlmdAorYnVpbGRfY3B1PSQxCitidWlsZF92ZW5kb3I9JDIKK3NoaWZ0OyBzaGlmdAorIyBSZW1lbWJlciwgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBJRlMgaXMgdXNlZCB0byBjcmVhdGUgJCosCisjIGV4Y2VwdCB3aXRoIG9sZCBzaGVsbHM6CitidWlsZF9vcz0kKgorSUZTPSRhY19zYXZlX0lGUworY2FzZSAkYnVpbGRfb3MgaW4gKlwgKikgYnVpbGRfb3M9YGVjaG8gIiRidWlsZF9vcyIgfCBzZWQgJ3MvIC8tL2cnYDs7IGVzYWMKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvc3Qgc3lzdGVtIHR5cGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG9zdCBzeXN0ZW0gdHlwZS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9ob3N0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAieCRob3N0X2FsaWFzIiA9IHg7IHRoZW4KKyAgYWNfY3ZfaG9zdD0kYWNfY3ZfYnVpbGQKK2Vsc2UKKyAgYWNfY3ZfaG9zdD1gJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuc3ViIiAkaG9zdF9hbGlhc2AgfHwKKyAgICBhc19mbl9lcnJvciAkPyAiJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIgJGhvc3RfYWxpYXMgZmFpbGVkIiAiJExJTkVOTyIgNQorZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfaG9zdCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2hvc3QiID4mNjsgfQorY2FzZSAkYWNfY3ZfaG9zdCBpbgorKi0qLSopIDs7CisqKSBhc19mbl9lcnJvciAkPyAiaW52YWxpZCB2YWx1ZSBvZiBjYW5vbmljYWwgaG9zdCIgIiRMSU5FTk8iIDU7OworZXNhYworaG9zdD0kYWNfY3ZfaG9zdAorYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSctJworc2V0IHggJGFjX2N2X2hvc3QKK3NoaWZ0Citob3N0X2NwdT0kMQoraG9zdF92ZW5kb3I9JDIKK3NoaWZ0OyBzaGlmdAorIyBSZW1lbWJlciwgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBJRlMgaXMgdXNlZCB0byBjcmVhdGUgJCosCisjIGV4Y2VwdCB3aXRoIG9sZCBzaGVsbHM6Citob3N0X29zPSQqCitJRlM9JGFjX3NhdmVfSUZTCitjYXNlICRob3N0X29zIGluICpcICopIGhvc3Rfb3M9YGVjaG8gIiRob3N0X29zIiB8IHNlZCAncy8gLy0vZydgOzsgZXNhYworCisKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXNpbGVudC1ydWxlcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9zaWxlbnRfcnVsZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9zaWxlbnRfcnVsZXM7CitmaQorCitjYXNlICRlbmFibGVfc2lsZW50X3J1bGVzIGluCit5ZXMpIEFNX0RFRkFVTFRfVkVSQk9TSVRZPTA7Oworbm8pICBBTV9ERUZBVUxUX1ZFUkJPU0lUWT0xOzsKKyopICAgQU1fREVGQVVMVF9WRVJCT1NJVFk9MDs7Citlc2FjCithbV9tYWtlPSR7TUFLRS1tYWtlfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRhbV9tYWtlIHN1cHBvcnRzIG5lc3RlZCB2YXJpYWJsZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkYW1fbWFrZSBzdXBwb3J0cyBuZXN0ZWQgdmFyaWFibGVzLi4uICIgPiY2OyB9CitpZiAke2FtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgJGFzX2VjaG8gJ1RSVUU9JChCQVIkKFYpKQorQkFSMD1mYWxzZQorQkFSMT10cnVlCitWPTEKK2FtX19kb2l0OgorCUAkKFRSVUUpCisuUEhPTlk6IGFtX19kb2l0JyB8ICRhbV9tYWtlIC1mIC0gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzPXllcworZWxzZQorICBhbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlcz1ubworZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzIiA+JjUKKyRhc19lY2hvICIkYW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXMiID4mNjsgfQoraWYgdGVzdCAkYW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXMgPSB5ZXM7IHRoZW4KKyAgICBBTV9WPSckKFYpJworICBBTV9ERUZBVUxUX1Y9JyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpJworZWxzZQorICBBTV9WPSRBTV9ERUZBVUxUX1ZFUkJPU0lUWQorICBBTV9ERUZBVUxUX1Y9JEFNX0RFRkFVTFRfVkVSQk9TSVRZCitmaQorQU1fQkFDS1NMQVNIPSdcJworCisKKyMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAic3RvdyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgc3RvdzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfU1RPVys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRTVE9XIjsgdGhlbgorICBhY19jdl9wcm9nX1NUT1c9IiRTVE9XIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfU1RPVz0ieWVzIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIHRlc3QgLXogIiRhY19jdl9wcm9nX1NUT1ciICYmIGFjX2N2X3Byb2dfU1RPVz0ibm8iCitmaQorZmkKK1NUT1c9JGFjX2N2X3Byb2dfU1RPVworaWYgdGVzdCAtbiAiJFNUT1ciOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkU1RPVyIgPiY1CiskYXNfZWNobyAiJFNUT1ciID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworCitpZiB0ZXN0ICJ4JFNUT1ciID0gInh5ZXMiICYmIHRlc3QgLWQgL3Vzci9sb2NhbC9zdG93OyB0aGVuIDoKKworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICoqKiBGb3VuZCAvdXNyL2xvY2FsL3N0b3c6IGRlZmF1bHQgaW5zdGFsbCBwcmVmaXggc2V0IHRvIC91c3IvbG9jYWwvc3Rvdy8ke1BBQ0tBR0VfTkFNRX0tJHtQQUNLQUdFX1ZFUlNJT059ICoqKiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiAqKiogRm91bmQgL3Vzci9sb2NhbC9zdG93OiBkZWZhdWx0IGluc3RhbGwgcHJlZml4IHNldCB0byAvdXNyL2xvY2FsL3N0b3cvJHtQQUNLQUdFX05BTUV9LSR7UEFDS0FHRV9WRVJTSU9OfSAqKioiID4mNjt9CisgICAgICAgIGFjX2RlZmF1bHRfcHJlZml4PSIvdXNyL2xvY2FsL3N0b3cvJHtQQUNLQUdFX05BTUV9LSR7UEFDS0FHRV9WRVJTSU9OfSIKKworZmkKKworIyBDaGVja3MgZm9yIHByb2dyYW1zLgorYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQoraWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9Z2NjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWdjYzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfQ0MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX0NDPSIke2FjX3Rvb2xfcHJlZml4fWdjYyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitDQz0kYWNfY3ZfcHJvZ19DQworaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENDIiA+JjUKKyRhc19lY2hvICIkQ0MiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX0NDIjsgdGhlbgorICBhY19jdF9DQz0kQ0MKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJnY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGdjYzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfQ0MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19jdF9DQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0NDPSJnY2MiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfQ0M9JGFjX2N2X3Byb2dfYWNfY3RfQ0MKK2lmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9DQyIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0NDIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfQ0MiID0geDsgdGhlbgorICAgIENDPSIiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgQ0M9JGFjX2N0X0NDCisgIGZpCitlbHNlCisgIENDPSIkYWNfY3ZfcHJvZ19DQyIKK2ZpCisKK2lmIHRlc3QgLXogIiRDQyI7IHRoZW4KKyAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWNjOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19DQys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfQ0M9IiR7YWNfdG9vbF9wcmVmaXh9Y2MiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorQ0M9JGFjX2N2X3Byb2dfQ0MKK2lmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQyIgPiY1CiskYXNfZWNobyAiJENDIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgZmkKK2ZpCitpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGNjOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19DQys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKKyAgYWNfcHJvZ19yZWplY3RlZD1ubworYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgaWYgdGVzdCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPSAiL3Vzci91Y2IvY2MiOyB0aGVuCisgICAgICAgYWNfcHJvZ19yZWplY3RlZD15ZXMKKyAgICAgICBjb250aW51ZQorICAgICBmaQorICAgIGFjX2N2X3Byb2dfQ0M9ImNjIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitpZiB0ZXN0ICRhY19wcm9nX3JlamVjdGVkID0geWVzOyB0aGVuCisgICMgV2UgZm91bmQgYSBib2dvbiBpbiB0aGUgcGF0aCwgc28gbWFrZSBzdXJlIHdlIG5ldmVyIHVzZSBpdC4KKyAgc2V0IGR1bW15ICRhY19jdl9wcm9nX0NDCisgIHNoaWZ0CisgIGlmIHRlc3QgJCMgIT0gMDsgdGhlbgorICAgICMgV2UgY2hvc2UgYSBkaWZmZXJlbnQgY29tcGlsZXIgZnJvbSB0aGUgYm9ndXMgb25lLgorICAgICMgSG93ZXZlciwgaXQgaGFzIHRoZSBzYW1lIGJhc2VuYW1lLCBzbyB0aGUgYm9nb24gd2lsbCBiZSBjaG9zZW4KKyAgICAjIGZpcnN0IGlmIHdlIHNldCBDQyB0byBqdXN0IHRoZSBiYXNlbmFtZTsgdXNlIHRoZSBmdWxsIGZpbGUgbmFtZS4KKyAgICBzaGlmdAorICAgIGFjX2N2X3Byb2dfQ0M9IiRhc19kaXIvJGFjX3dvcmQkezErJyAnfSRAIgorICBmaQorZmkKK2ZpCitmaQorQ0M9JGFjX2N2X3Byb2dfQ0MKK2lmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQyIgPiY1CiskYXNfZWNobyAiJENDIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgZm9yIGFjX3Byb2cgaW4gY2wuZXhlCisgIGRvCisgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX0NDKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19DQz0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorQ0M9JGFjX2N2X3Byb2dfQ0MKK2lmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQyIgPiY1CiskYXNfZWNobyAiJENDIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgICB0ZXN0IC1uICIkQ0MiICYmIGJyZWFrCisgIGRvbmUKK2ZpCitpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCisgIGFjX2N0X0NDPSRDQworICBmb3IgYWNfcHJvZyBpbiBjbC5leGUKK2RvCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9DQys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iJGFjX2N0X0NDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19wcm9nIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0NDPSRhY19jdl9wcm9nX2FjX2N0X0NDCitpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQorJGFzX2VjaG8gIiRhY19jdF9DQyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgIHRlc3QgLW4gIiRhY19jdF9DQyIgJiYgYnJlYWsKK2RvbmUKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0NDIiA9IHg7IHRoZW4KKyAgICBDQz0iIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIENDPSRhY19jdF9DQworICBmaQorZmkKKworZmkKKworCit0ZXN0IC16ICIkQ0MiICYmIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgQyBjb21waWxlciBmb3VuZCBpbiBcJFBBVEgKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CisKKyMgUHJvdmlkZSBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb21waWxlci4KKyRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBDIGNvbXBpbGVyIHZlcnNpb24iID4mNQorc2V0IFggJGFjX2NvbXBpbGUKK2FjX2NvbXBpbGVyPSQyCitmb3IgYWNfb3B0aW9uIGluIC0tdmVyc2lvbiAtdiAtViAtcXZlcnNpb247IGRvCisgIHsgeyBhY190cnk9IiRhY19jb21waWxlciAkYWNfb3B0aW9uID4mNSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGVyICRhY19vcHRpb24gPiY1IikgMj5jb25mdGVzdC5lcnIKKyAgYWNfc3RhdHVzPSQ/CisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgc2VkICcxMGFcCisuLi4gcmVzdCBvZiBzdGRlcnIgb3V0cHV0IGRlbGV0ZWQgLi4uCisgICAgICAgICAxMHEnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCisgICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKKyAgZmkKKyAgcm0gLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorZG9uZQorCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2FjX2NsZWFuX2ZpbGVzX3NhdmU9JGFjX2NsZWFuX2ZpbGVzCithY19jbGVhbl9maWxlcz0iJGFjX2NsZWFuX2ZpbGVzIGEub3V0IGEub3V0LmRTWU0gYS5leGUgYi5vdXQiCisjIFRyeSB0byBjcmVhdGUgYW4gZXhlY3V0YWJsZSB3aXRob3V0IC1vIGZpcnN0LCBkaXNyZWdhcmQgYS5vdXQuCisjIEl0IHdpbGwgaGVscCB1cyBkaWFnbm9zZSBicm9rZW4gY29tcGlsZXJzLCBhbmQgZmluZGluZyBvdXQgYW4gaW50dWl0aW9uCisjIG9mIGV4ZWV4dC4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciB3b3JrcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIHdvcmtzLi4uICIgPiY2OyB9CithY19saW5rX2RlZmF1bHQ9YCRhc19lY2hvICIkYWNfbGluayIgfCBzZWQgJ3MvIC1vICpjb25mdGVzdFteIF0qLy8nYAorCisjIFRoZSBwb3NzaWJsZSBvdXRwdXQgZmlsZXM6CithY19maWxlcz0iYS5vdXQgY29uZnRlc3QuZXhlIGNvbmZ0ZXN0IGEuZXhlIGFfb3V0LmV4ZSBiLm91dCBjb25mdGVzdC4qIgorCithY19ybWZpbGVzPQorZm9yIGFjX2ZpbGUgaW4gJGFjX2ZpbGVzCitkbworICBjYXNlICRhY19maWxlIGluCisgICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm1hcCB8ICouaW5mIHwgKi5kU1lNIHwgKi5vIHwgKi5vYmogKSA7OworICAgICogKSBhY19ybWZpbGVzPSIkYWNfcm1maWxlcyAkYWNfZmlsZSI7OworICBlc2FjCitkb25lCitybSAtZiAkYWNfcm1maWxlcworCitpZiB7IHsgYWNfdHJ5PSIkYWNfbGlua19kZWZhdWx0IgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfbGlua19kZWZhdWx0IikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4gOgorICAjIEF1dG9jb25mLTIuMTMgY291bGQgc2V0IHRoZSBhY19jdl9leGVleHQgdmFyaWFibGUgdG8gYG5vJy4KKyMgU28gaWdub3JlIGEgdmFsdWUgb2YgYG5vJywgb3RoZXJ3aXNlIHRoaXMgd291bGQgbGVhZCB0byBgRVhFRVhUID0gbm8nCisjIGluIGEgTWFrZWZpbGUuICBXZSBzaG91bGQgbm90IG92ZXJyaWRlIGFjX2N2X2V4ZWV4dCBpZiBpdCB3YXMgY2FjaGVkLAorIyBzbyB0aGF0IHRoZSB1c2VyIGNhbiBzaG9ydC1jaXJjdWl0IHRoaXMgdGVzdCBmb3IgY29tcGlsZXJzIHVua25vd24gdG8KKyMgQXV0b2NvbmYuCitmb3IgYWNfZmlsZSBpbiAkYWNfZmlsZXMgJycKK2RvCisgIHRlc3QgLWYgIiRhY19maWxlIiB8fCBjb250aW51ZQorICBjYXNlICRhY19maWxlIGluCisgICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm1hcCB8ICouaW5mIHwgKi5kU1lNIHwgKi5vIHwgKi5vYmogKQorCTs7CisgICAgW2FiXS5vdXQgKQorCSMgV2UgZm91bmQgdGhlIGRlZmF1bHQgZXhlY3V0YWJsZSwgYnV0IGV4ZWV4dD0nJyBpcyBtb3N0CisJIyBjZXJ0YWlubHkgcmlnaHQuCisJYnJlYWs7OworICAgICouKiApCisJaWYgdGVzdCAiJHthY19jdl9leGVleHQrc2V0fSIgPSBzZXQgJiYgdGVzdCAiJGFjX2N2X2V4ZWV4dCIgIT0gbm87CisJdGhlbiA6OyBlbHNlCisJICAgYWNfY3ZfZXhlZXh0PWBleHByICIkYWNfZmlsZSIgOiAnW14uXSpcKFwuLipcKSdgCisJZmkKKwkjIFdlIHNldCBhY19jdl9leGVleHQgaGVyZSBiZWNhdXNlIHRoZSBsYXRlciB0ZXN0IGZvciBpdCBpcyBub3QKKwkjIHNhZmU6IGNyb3NzIGNvbXBpbGVycyBtYXkgbm90IGFkZCB0aGUgc3VmZml4IGlmIGdpdmVuIGFuIGAtbycKKwkjIGFyZ3VtZW50LCBzbyB3ZSBtYXkgbmVlZCB0byBrbm93IGl0IGF0IHRoYXQgcG9pbnQgYWxyZWFkeS4KKwkjIEV2ZW4gaWYgdGhpcyBzZWN0aW9uIGxvb2tzIGNydWZ0eTogaXQgaGFzIHRoZSBhZHZhbnRhZ2Ugb2YKKwkjIGFjdHVhbGx5IHdvcmtpbmcuCisJYnJlYWs7OworICAgICogKQorCWJyZWFrOzsKKyAgZXNhYworZG9uZQordGVzdCAiJGFjX2N2X2V4ZWV4dCIgPSBubyAmJiBhY19jdl9leGVleHQ9CisKK2Vsc2UKKyAgYWNfZmlsZT0nJworZmkKK2lmIHRlc3QgLXogIiRhY19maWxlIjsgdGhlbiA6CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK3sgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgNzcgIkMgY29tcGlsZXIgY2Fubm90IGNyZWF0ZSBleGVjdXRhYmxlcworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBDIGNvbXBpbGVyIGRlZmF1bHQgb3V0cHV0IGZpbGUgbmFtZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgQyBjb21waWxlciBkZWZhdWx0IG91dHB1dCBmaWxlIG5hbWUuLi4gIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFjX2ZpbGUiID4mNjsgfQorYWNfZXhlZXh0PSRhY19jdl9leGVleHQKKworcm0gLWYgLXIgYS5vdXQgYS5vdXQuZFNZTSBhLmV4ZSBjb25mdGVzdCRhY19jdl9leGVleHQgYi5vdXQKK2FjX2NsZWFuX2ZpbGVzPSRhY19jbGVhbl9maWxlc19zYXZlCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzdWZmaXggb2YgZXhlY3V0YWJsZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBleGVjdXRhYmxlcy4uLiAiID4mNjsgfQoraWYgeyB7IGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4gOgorICAjIElmIGJvdGggYGNvbmZ0ZXN0LmV4ZScgYW5kIGBjb25mdGVzdCcgYXJlIGBwcmVzZW50JyAod2VsbCwgb2JzZXJ2YWJsZSkKKyMgY2F0Y2ggYGNvbmZ0ZXN0LmV4ZScuICBGb3IgaW5zdGFuY2Ugd2l0aCBDeWd3aW4sIGBscyBjb25mdGVzdCcgd2lsbAorIyB3b3JrIHByb3Blcmx5IChpLmUuLCByZWZlciB0byBgY29uZnRlc3QuZXhlJyksIHdoaWxlIGl0IHdvbid0IHdpdGgKKyMgYHJtJy4KK2ZvciBhY19maWxlIGluIGNvbmZ0ZXN0LmV4ZSBjb25mdGVzdCBjb25mdGVzdC4qOyBkbworICB0ZXN0IC1mICIkYWNfZmlsZSIgfHwgY29udGludWUKKyAgY2FzZSAkYWNfZmlsZSBpbgorICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5tYXAgfCAqLmluZiB8ICouZFNZTSB8ICoubyB8ICoub2JqICkgOzsKKyAgICAqLiogKSBhY19jdl9leGVleHQ9YGV4cHIgIiRhY19maWxlIiA6ICdbXi5dKlwoXC4uKlwpJ2AKKwkgIGJyZWFrOzsKKyAgICAqICkgYnJlYWs7OworICBlc2FjCitkb25lCitlbHNlCisgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBjb21wdXRlIHN1ZmZpeCBvZiBleGVjdXRhYmxlczogY2Fubm90IGNvbXBpbGUgYW5kIGxpbmsKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CitmaQorcm0gLWYgY29uZnRlc3QgY29uZnRlc3QkYWNfY3ZfZXhlZXh0Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2V4ZWV4dCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2V4ZWV4dCIgPiY2OyB9CisKK3JtIC1mIGNvbmZ0ZXN0LiRhY19leHQKK0VYRUVYVD0kYWNfY3ZfZXhlZXh0CithY19leGVleHQ9JEVYRUVYVAorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0ZGlvLmg+CitpbnQKK21haW4gKCkKK3sKK0ZJTEUgKmYgPSBmb3BlbiAoImNvbmZ0ZXN0Lm91dCIsICJ3Iik7CisgcmV0dXJuIGZlcnJvciAoZikgfHwgZmNsb3NlIChmKSAhPSAwOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2FjX2NsZWFuX2ZpbGVzPSIkYWNfY2xlYW5fZmlsZXMgY29uZnRlc3Qub3V0IgorIyBDaGVjayB0aGF0IHRoZSBjb21waWxlciBwcm9kdWNlcyBleGVjdXRhYmxlcyB3ZSBjYW4gcnVuLiAgSWYgbm90LCBlaXRoZXIKKyMgdGhlIGNvbXBpbGVyIGlzIGJyb2tlbiwgb3Igd2UgY3Jvc3MgY29tcGlsZS4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIGNyb3NzIGNvbXBpbGluZy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgIT0geWVzOyB0aGVuCisgIHsgeyBhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CisgIGlmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2N2X2V4ZWV4dCcKKyAgeyB7IGNhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB9OyB0aGVuCisgICAgY3Jvc3NfY29tcGlsaW5nPW5vCisgIGVsc2UKKyAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IG1heWJlOyB0aGVuCisJY3Jvc3NfY29tcGlsaW5nPXllcworICAgIGVsc2UKKwl7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgcnVuIEMgY29tcGlsZWQgcHJvZ3JhbXMuCitJZiB5b3UgbWVhbnQgdG8gY3Jvc3MgY29tcGlsZSwgdXNlIFxgLS1ob3N0Jy4KK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CisgICAgZmkKKyAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGNyb3NzX2NvbXBpbGluZyIgPiY1CiskYXNfZWNobyAiJGNyb3NzX2NvbXBpbGluZyIgPiY2OyB9CisKK3JtIC1mIGNvbmZ0ZXN0LiRhY19leHQgY29uZnRlc3QkYWNfY3ZfZXhlZXh0IGNvbmZ0ZXN0Lm91dAorYWNfY2xlYW5fZmlsZXM9JGFjX2NsZWFuX2ZpbGVzX3NhdmUKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBvYmplY3QgZmlsZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBvYmplY3QgZmlsZXMuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3Zfb2JqZXh0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC5vIGNvbmZ0ZXN0Lm9iagoraWYgeyB7IGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4gOgorICBmb3IgYWNfZmlsZSBpbiBjb25mdGVzdC5vIGNvbmZ0ZXN0Lm9iaiBjb25mdGVzdC4qOyBkbworICB0ZXN0IC1mICIkYWNfZmlsZSIgfHwgY29udGludWU7CisgIGNhc2UgJGFjX2ZpbGUgaW4KKyAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubWFwIHwgKi5pbmYgfCAqLmRTWU0gKSA7OworICAgICopIGFjX2N2X29iamV4dD1gZXhwciAiJGFjX2ZpbGUiIDogJy4qXC5cKC4qXCknYAorICAgICAgIGJyZWFrOzsKKyAgZXNhYworZG9uZQorZWxzZQorICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAiY2Fubm90IGNvbXB1dGUgc3VmZml4IG9mIG9iamVjdCBmaWxlczogY2Fubm90IGNvbXBpbGUKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CitmaQorcm0gLWYgY29uZnRlc3QuJGFjX2N2X29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9vYmpleHQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9vYmpleHQiID4mNjsgfQorT0JKRVhUPSRhY19jdl9vYmpleHQKK2FjX29iamV4dD0kT0JKRVhUCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBjb21waWxlciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgY29tcGlsZXIuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfY19jb21waWxlcl9nbnUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworI2lmbmRlZiBfX0dOVUNfXworICAgICAgIGNob2tlIG1lCisjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2NvbXBpbGVyX2dudT15ZXMKK2Vsc2UKKyAgYWNfY29tcGlsZXJfZ251PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CithY19jdl9jX2NvbXBpbGVyX2dudT0kYWNfY29tcGlsZXJfZ251CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfY19jb21waWxlcl9nbnUiID4mNjsgfQoraWYgdGVzdCAkYWNfY29tcGlsZXJfZ251ID0geWVzOyB0aGVuCisgIEdDQz15ZXMKK2Vsc2UKKyAgR0NDPQorZmkKK2FjX3Rlc3RfQ0ZMQUdTPSR7Q0ZMQUdTK3NldH0KK2FjX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtZyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1nLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfY2NfZys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX3NhdmVfY193ZXJyb3JfZmxhZz0kYWNfY193ZXJyb3JfZmxhZworICAgYWNfY193ZXJyb3JfZmxhZz15ZXMKKyAgIGFjX2N2X3Byb2dfY2NfZz1ubworICAgQ0ZMQUdTPSItZyIKKyAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9wcm9nX2NjX2c9eWVzCitlbHNlCisgIENGTEFHUz0iIgorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY193ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jX3dlcnJvcl9mbGFnCisJIENGTEFHUz0iLWciCisJIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9wcm9nX2NjX2c9eWVzCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICBhY19jX3dlcnJvcl9mbGFnPSRhY19zYXZlX2Nfd2Vycm9yX2ZsYWcKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3Byb2dfY2NfZyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3Byb2dfY2NfZyIgPiY2OyB9CitpZiB0ZXN0ICIkYWNfdGVzdF9DRkxBR1MiID0gc2V0OyB0aGVuCisgIENGTEFHUz0kYWNfc2F2ZV9DRkxBR1MKK2VsaWYgdGVzdCAkYWNfY3ZfcHJvZ19jY19nID0geWVzOyB0aGVuCisgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgQ0ZMQUdTPSItZyAtTzIiCisgIGVsc2UKKyAgICBDRkxBR1M9Ii1nIgorICBmaQorZWxzZQorICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIENGTEFHUz0iLU8yIgorICBlbHNlCisgICAgQ0ZMQUdTPQorICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBDODkiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBDODkuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19jY19jODkrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jdl9wcm9nX2NjX2M4OT1ubworYWNfc2F2ZV9DQz0kQ0MKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisvKiBNb3N0IG9mIHRoZSBmb2xsb3dpbmcgdGVzdHMgYXJlIHN0b2xlbiBmcm9tIFJDUyA1LjcncyBzcmMvY29uZi5zaC4gICovCitzdHJ1Y3QgYnVmIHsgaW50IHg7IH07CitGSUxFICogKCpyY3NvcGVuKSAoc3RydWN0IGJ1ZiAqLCBzdHJ1Y3Qgc3RhdCAqLCBpbnQpOworc3RhdGljIGNoYXIgKmUgKHAsIGkpCisgICAgIGNoYXIgKipwOworICAgICBpbnQgaTsKK3sKKyAgcmV0dXJuIHBbaV07Cit9CitzdGF0aWMgY2hhciAqZiAoY2hhciAqICgqZykgKGNoYXIgKiosIGludCksIGNoYXIgKipwLCAuLi4pCit7CisgIGNoYXIgKnM7CisgIHZhX2xpc3QgdjsKKyAgdmFfc3RhcnQgKHYscCk7CisgIHMgPSBnIChwLCB2YV9hcmcgKHYsaW50KSk7CisgIHZhX2VuZCAodik7CisgIHJldHVybiBzOworfQorCisvKiBPU0YgNC4wIENvbXBhcSBjYyBpcyBzb21lIHNvcnQgb2YgYWxtb3N0LUFOU0kgYnkgZGVmYXVsdC4gIEl0IGhhcworICAgZnVuY3Rpb24gcHJvdG90eXBlcyBhbmQgc3R1ZmYsIGJ1dCBub3QgJ1x4SEgnIGhleCBjaGFyYWN0ZXIgY29uc3RhbnRzLgorICAgVGhlc2UgZG9uJ3QgcHJvdm9rZSBhbiBlcnJvciB1bmZvcnR1bmF0ZWx5LCBpbnN0ZWFkIGFyZSBzaWxlbnRseSB0cmVhdGVkCisgICBhcyAneCcuICBUaGUgZm9sbG93aW5nIGluZHVjZXMgYW4gZXJyb3IsIHVudGlsIC1zdGQgaXMgYWRkZWQgdG8gZ2V0CisgICBwcm9wZXIgQU5TSSBtb2RlLiAgQ3VyaW91c2x5ICdceDAwJyE9J3gnIGFsd2F5cyBjb21lcyBvdXQgdHJ1ZSwgZm9yIGFuCisgICBhcnJheSBzaXplIGF0IGxlYXN0LiAgSXQncyBuZWNlc3NhcnkgdG8gd3JpdGUgJ1x4MDAnPT0wIHRvIGdldCBzb21ldGhpbmcKKyAgIHRoYXQncyB0cnVlIG9ubHkgd2l0aCAtc3RkLiAgKi8KK2ludCBvc2Y0X2NjX2FycmF5IFsnXHgwMCcgPT0gMCA/IDEgOiAtMV07CisKKy8qIElCTSBDIDYgZm9yIEFJWCBpcyBhbG1vc3QtQU5TSSBieSBkZWZhdWx0LCBidXQgaXQgcmVwbGFjZXMgbWFjcm8gcGFyYW1ldGVycworICAgaW5zaWRlIHN0cmluZ3MgYW5kIGNoYXJhY3RlciBjb25zdGFudHMuICAqLworI2RlZmluZSBGT08oeCkgJ3gnCitpbnQgeGxjNl9jY19hcnJheVtGT08oYSkgPT0gJ3gnID8gMSA6IC0xXTsKKworaW50IHRlc3QgKGludCBpLCBkb3VibGUgeCk7CitzdHJ1Y3QgczEge2ludCAoKmYpIChpbnQgYSk7fTsKK3N0cnVjdCBzMiB7aW50ICgqZikgKGRvdWJsZSBhKTt9OworaW50IHBhaXJuYW1lcyAoaW50LCBjaGFyICoqLCBGSUxFICooKikoc3RydWN0IGJ1ZiAqLCBzdHJ1Y3Qgc3RhdCAqLCBpbnQpLCBpbnQsIGludCk7CitpbnQgYXJnYzsKK2NoYXIgKiphcmd2OworaW50CittYWluICgpCit7CityZXR1cm4gZiAoZSwgYXJndiwgMCkgIT0gYXJndlswXSAgfHwgIGYgKGUsIGFyZ3YsIDEpICE9IGFyZ3ZbMV07CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2ZvciBhY19hcmcgaW4gJycgLXFsYW5nbHZsPWV4dGM4OSAtcWxhbmdsdmw9YW5zaSAtc3RkIFwKKwktQWUgIi1BYSAtRF9IUFVYX1NPVVJDRSIgIi1YYyAtRF9fRVhURU5TSU9OU19fIgorZG8KKyAgQ0M9IiRhY19zYXZlX0NDICRhY19hcmciCisgIGlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfcHJvZ19jY19jODk9JGFjX2FyZworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgdGVzdCAieCRhY19jdl9wcm9nX2NjX2M4OSIgIT0gInhubyIgJiYgYnJlYWsKK2RvbmUKK3JtIC1mIGNvbmZ0ZXN0LiRhY19leHQKK0NDPSRhY19zYXZlX0NDCisKK2ZpCisjIEFDX0NBQ0hFX1ZBTAorY2FzZSAieCRhY19jdl9wcm9nX2NjX2M4OSIgaW4KKyAgeCkKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm9uZSBuZWVkZWQiID4mNQorJGFzX2VjaG8gIm5vbmUgbmVlZGVkIiA+JjY7IH0gOzsKKyAgeG5vKQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB1bnN1cHBvcnRlZCIgPiY1CiskYXNfZWNobyAidW5zdXBwb3J0ZWQiID4mNjsgfSA7OworICAqKQorICAgIENDPSIkQ0MgJGFjX2N2X3Byb2dfY2NfYzg5IgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jY19jODkiID4mNQorJGFzX2VjaG8gIiRhY19jdl9wcm9nX2NjX2M4OSIgPiY2OyB9IDs7Citlc2FjCitpZiB0ZXN0ICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiAhPSB4bm87IHRoZW4gOgorCitmaQorCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CitERVBESVI9IiR7YW1fX2xlYWRpbmdfZG90fWRlcHMiCisKK2FjX2NvbmZpZ19jb21tYW5kcz0iJGFjX2NvbmZpZ19jb21tYW5kcyBkZXBmaWxlcyIKKworCithbV9tYWtlPSR7TUFLRS1tYWtlfQorY2F0ID4gY29uZmluYyA8PCAnRU5EJworYW1fX2RvaXQ6CisJQGVjaG8gdGhpcyBpcyB0aGUgYW1fX2RvaXQgdGFyZ2V0CisuUEhPTlk6IGFtX19kb2l0CitFTkQKKyMgSWYgd2UgZG9uJ3QgZmluZCBhbiBpbmNsdWRlIGRpcmVjdGl2ZSwganVzdCBjb21tZW50IG91dCB0aGUgY29kZS4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN0eWxlIG9mIGluY2x1ZGUgdXNlZCBieSAkYW1fbWFrZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3R5bGUgb2YgaW5jbHVkZSB1c2VkIGJ5ICRhbV9tYWtlLi4uICIgPiY2OyB9CithbV9faW5jbHVkZT0iIyIKK2FtX19xdW90ZT0KK19hbV9yZXN1bHQ9bm9uZQorIyBGaXJzdCB0cnkgR05VIG1ha2Ugc3R5bGUgaW5jbHVkZS4KK2VjaG8gImluY2x1ZGUgY29uZmluYyIgPiBjb25mbWYKKyMgSWdub3JlIGFsbCBraW5kcyBvZiBhZGRpdGlvbmFsIG91dHB1dCBmcm9tIGBtYWtlJy4KK2Nhc2UgYCRhbV9tYWtlIC1zIC1mIGNvbmZtZiAyPiAvZGV2L251bGxgIGluICMoCisqdGhlXCBhbV9fZG9pdFwgdGFyZ2V0KikKKyAgYW1fX2luY2x1ZGU9aW5jbHVkZQorICBhbV9fcXVvdGU9CisgIF9hbV9yZXN1bHQ9R05VCisgIDs7Citlc2FjCisjIE5vdyB0cnkgQlNEIG1ha2Ugc3R5bGUgaW5jbHVkZS4KK2lmIHRlc3QgIiRhbV9faW5jbHVkZSIgPSAiIyI7IHRoZW4KKyAgIGVjaG8gJy5pbmNsdWRlICJjb25maW5jIicgPiBjb25mbWYKKyAgIGNhc2UgYCRhbV9tYWtlIC1zIC1mIGNvbmZtZiAyPiAvZGV2L251bGxgIGluICMoCisgICAqdGhlXCBhbV9fZG9pdFwgdGFyZ2V0KikKKyAgICAgYW1fX2luY2x1ZGU9LmluY2x1ZGUKKyAgICAgYW1fX3F1b3RlPSJcIiIKKyAgICAgX2FtX3Jlc3VsdD1CU0QKKyAgICAgOzsKKyAgIGVzYWMKK2ZpCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRfYW1fcmVzdWx0IiA+JjUKKyRhc19lY2hvICIkX2FtX3Jlc3VsdCIgPiY2OyB9CitybSAtZiBjb25maW5jIGNvbmZtZgorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZGVwZW5kZW5jeS10cmFja2luZyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZzsKK2ZpCisKK2lmIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubzsgdGhlbgorICBhbV9kZXBjb21wPSIkYWNfYXV4X2Rpci9kZXBjb21wIgorICBBTURFUEJBQ0tTTEFTSD0nXCcKKyAgYW1fX25vZGVwPSdfbm8nCitmaQorIGlmIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubzsgdGhlbgorICBBTURFUF9UUlVFPQorICBBTURFUF9GQUxTRT0nIycKK2Vsc2UKKyAgQU1ERVBfVFJVRT0nIycKKyAgQU1ERVBfRkFMU0U9CitmaQorCisKKworZGVwY2M9IiRDQyIgICBhbV9jb21waWxlcl9saXN0PQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjLi4uICIgPiY2OyB9CitpZiAke2FtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAteiAiJEFNREVQX1RSVUUiICYmIHRlc3QgLWYgIiRhbV9kZXBjb21wIjsgdGhlbgorICAjIFdlIG1ha2UgYSBzdWJkaXIgYW5kIGRvIHRoZSB0ZXN0cyB0aGVyZS4gIE90aGVyd2lzZSB3ZSBjYW4gZW5kIHVwCisgICMgbWFraW5nIGJvZ3VzIGZpbGVzIHRoYXQgd2UgZG9uJ3Qga25vdyBhYm91dCBhbmQgbmV2ZXIgcmVtb3ZlLiAgRm9yCisgICMgaW5zdGFuY2UgaXQgd2FzIHJlcG9ydGVkIHRoYXQgb24gSFAtVVggdGhlIGdjYyB0ZXN0IHdpbGwgZW5kIHVwCisgICMgbWFraW5nIGEgZHVtbXkgZmlsZSBuYW1lZCBgRCcgLS0gYmVjYXVzZSBgLU1EJyBtZWFucyBgcHV0IHRoZSBvdXRwdXQKKyAgIyBpbiBEJy4KKyAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgorICBta2RpciBjb25mdGVzdC5kaXIKKyAgIyBDb3B5IGRlcGNvbXAgdG8gc3ViZGlyIGJlY2F1c2Ugb3RoZXJ3aXNlIHdlIHdvbid0IGZpbmQgaXQgaWYgd2UncmUKKyAgIyB1c2luZyBhIHJlbGF0aXZlIGRpcmVjdG9yeS4KKyAgY3AgIiRhbV9kZXBjb21wIiBjb25mdGVzdC5kaXIKKyAgY2QgY29uZnRlc3QuZGlyCisgICMgV2Ugd2lsbCBidWlsZCBvYmplY3RzIGFuZCBkZXBlbmRlbmNpZXMgaW4gYSBzdWJkaXJlY3RvcnkgYmVjYXVzZQorICAjIGl0IGhlbHBzIHRvIGRldGVjdCBpbmFwcGxpY2FibGUgZGVwZW5kZW5jeSBtb2Rlcy4gIEZvciBpbnN0YW5jZQorICAjIGJvdGggVHJ1NjQncyBjYyBhbmQgSUNDIHN1cHBvcnQgLU1EIHRvIG91dHB1dCBkZXBlbmRlbmNpZXMgYXMgYQorICAjIHNpZGUgZWZmZWN0IG9mIGNvbXBpbGF0aW9uLCBidXQgSUNDIHdpbGwgcHV0IHRoZSBkZXBlbmRlbmNpZXMgaW4KKyAgIyB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2hpbGUgVHJ1NjQgd2lsbCBwdXQgdGhlbSBpbiB0aGUgb2JqZWN0CisgICMgZGlyZWN0b3J5LgorICBta2RpciBzdWIKKworICBhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT1ub25lCisgIGlmIHRlc3QgIiRhbV9jb21waWxlcl9saXN0IiA9ICIiOyB0aGVuCisgICAgIGFtX2NvbXBpbGVyX2xpc3Q9YHNlZCAtbiAncy9eIypcKFthLXpBLVowLTldKlwpKSQvXDEvcCcgPCAuL2RlcGNvbXBgCisgIGZpCisgIGFtX191bml2ZXJzYWw9ZmFsc2UKKyAgY2FzZSAiICRkZXBjYyAiIGluICMoCisgICAgICpcIC1hcmNoXCAqXCAtYXJjaFwgKikgYW1fX3VuaXZlcnNhbD10cnVlIDs7CisgICAgIGVzYWMKKworICBmb3IgZGVwbW9kZSBpbiAkYW1fY29tcGlsZXJfbGlzdDsgZG8KKyAgICAjIFNldHVwIGEgc291cmNlIHdpdGggbWFueSBkZXBlbmRlbmNpZXMsIGJlY2F1c2Ugc29tZSBjb21waWxlcnMKKyAgICAjIGxpa2UgdG8gd3JhcCBsYXJnZSBkZXBlbmRlbmN5IGxpc3RzIG9uIGNvbHVtbiA4MCAod2l0aCBcKSwgYW5kCisgICAgIyB3ZSBzaG91bGQgbm90IGNob29zZSBhIGRlcGNvbXAgbW9kZSB3aGljaCBpcyBjb25mdXNlZCBieSB0aGlzLgorICAgICMKKyAgICAjIFdlIG5lZWQgdG8gcmVjcmVhdGUgdGhlc2UgZmlsZXMgZm9yIGVhY2ggdGVzdCwgYXMgdGhlIGNvbXBpbGVyIG1heQorICAgICMgb3ZlcndyaXRlIHNvbWUgb2YgdGhlbSB3aGVuIHRlc3Rpbmcgd2l0aCBvYnNjdXJlIGNvbW1hbmQgbGluZXMuCisgICAgIyBUaGlzIGhhcHBlbnMgYXQgbGVhc3Qgd2l0aCB0aGUgQUlYIEMgY29tcGlsZXIuCisgICAgOiA+IHN1Yi9jb25mdGVzdC5jCisgICAgZm9yIGkgaW4gMSAyIDMgNCA1IDY7IGRvCisgICAgICBlY2hvICcjaW5jbHVkZSAiY29uZnRzdCckaScuaCInID4+IHN1Yi9jb25mdGVzdC5jCisgICAgICAjIFVzaW5nIGA6ID4gc3ViL2NvbmZ0c3QkaS5oJyBjcmVhdGVzIG9ubHkgc3ViL2NvbmZ0c3QxLmggd2l0aAorICAgICAgIyBTb2xhcmlzIDgncyB7L3Vzcix9L2Jpbi9zaC4KKyAgICAgIHRvdWNoIHN1Yi9jb25mdHN0JGkuaAorICAgIGRvbmUKKyAgICBlY2hvICIke2FtX19pbmNsdWRlfSAke2FtX19xdW90ZX1zdWIvY29uZnRlc3QuUG8ke2FtX19xdW90ZX0iID4gY29uZm1mCisKKyAgICAjIFdlIGNoZWNrIHdpdGggYC1jJyBhbmQgYC1vJyBmb3IgdGhlIHNha2Ugb2YgdGhlICJkYXNobXN0ZG91dCIKKyAgICAjIG1vZGUuICBJdCB0dXJucyBvdXQgdGhhdCB0aGUgU3VuUHJvIEMrKyBjb21waWxlciBkb2VzIG5vdCBwcm9wZXJseQorICAgICMgaGFuZGxlIGAtTSAtbycsIGFuZCB3ZSBuZWVkIHRvIGRldGVjdCB0aGlzLiAgQWxzbywgc29tZSBJbnRlbAorICAgICMgdmVyc2lvbnMgaGFkIHRyb3VibGUgd2l0aCBvdXRwdXQgaW4gc3ViZGlycworICAgIGFtX19vYmo9c3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99CisgICAgYW1fX21pbnVzX29iaj0iLW8gJGFtX19vYmoiCisgICAgY2FzZSAkZGVwbW9kZSBpbgorICAgIGdjYykKKyAgICAgICMgVGhpcyBkZXBtb2RlIGNhdXNlcyBhIGNvbXBpbGVyIHJhY2UgaW4gdW5pdmVyc2FsIG1vZGUuCisgICAgICB0ZXN0ICIkYW1fX3VuaXZlcnNhbCIgPSBmYWxzZSB8fCBjb250aW51ZQorICAgICAgOzsKKyAgICBub3NpZGVlZmZlY3QpCisgICAgICAjIGFmdGVyIHRoaXMgdGFnLCBtZWNoYW5pc21zIGFyZSBub3QgYnkgc2lkZS1lZmZlY3QsIHNvIHRoZXknbGwKKyAgICAgICMgb25seSBiZSB1c2VkIHdoZW4gZXhwbGljaXRseSByZXF1ZXN0ZWQKKyAgICAgIGlmIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciID0geHllczsgdGhlbgorCWNvbnRpbnVlCisgICAgICBlbHNlCisJYnJlYWsKKyAgICAgIGZpCisgICAgICA7OworICAgIG1zdmM3IHwgbXN2Yzdtc3lzIHwgbXN2aXN1YWxjcHAgfCBtc3ZjbXN5cykKKyAgICAgICMgVGhpcyBjb21waWxlciB3b24ndCBncm9rIGAtYyAtbycsIGJ1dCBhbHNvLCB0aGUgbWludXNvIHRlc3QgaGFzCisgICAgICAjIG5vdCBydW4geWV0LiAgVGhlc2UgZGVwbW9kZXMgYXJlIGxhdGUgZW5vdWdoIGluIHRoZSBnYW1lLCBhbmQKKyAgICAgICMgc28gd2VhayB0aGF0IHRoZWlyIGZ1bmN0aW9uaW5nIHNob3VsZCBub3QgYmUgaW1wYWN0ZWQuCisgICAgICBhbV9fb2JqPWNvbmZ0ZXN0LiR7T0JKRVhULW99CisgICAgICBhbV9fbWludXNfb2JqPQorICAgICAgOzsKKyAgICBub25lKSBicmVhayA7OworICAgIGVzYWMKKyAgICBpZiBkZXBtb2RlPSRkZXBtb2RlIFwKKyAgICAgICBzb3VyY2U9c3ViL2NvbmZ0ZXN0LmMgb2JqZWN0PSRhbV9fb2JqIFwKKyAgICAgICBkZXBmaWxlPXN1Yi9jb25mdGVzdC5QbyB0bXBkZXBmaWxlPXN1Yi9jb25mdGVzdC5UUG8gXAorICAgICAgICRTSEVMTCAuL2RlcGNvbXAgJGRlcGNjIC1jICRhbV9fbWludXNfb2JqIHN1Yi9jb25mdGVzdC5jIFwKKyAgICAgICAgID4vZGV2L251bGwgMj5jb25mdGVzdC5lcnIgJiYKKyAgICAgICBncmVwIHN1Yi9jb25mdHN0MS5oIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgZ3JlcCBzdWIvY29uZnRzdDYuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorICAgICAgIGdyZXAgJGFtX19vYmogc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKKyAgICAgICAke01BS0UtbWFrZX0gLXMgLWYgY29uZm1mID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgICMgaWNjIGRvZXNuJ3QgY2hva2Ugb24gdW5rbm93biBvcHRpb25zLCBpdCB3aWxsIGp1c3QgaXNzdWUgd2FybmluZ3MKKyAgICAgICMgb3IgcmVtYXJrcyAoZXZlbiB3aXRoIC1XZXJyb3IpLiAgU28gd2UgZ3JlcCBzdGRlcnIgZm9yIGFueSBtZXNzYWdlCisgICAgICAjIHRoYXQgc2F5cyBhbiBvcHRpb24gd2FzIGlnbm9yZWQgb3Igbm90IHN1cHBvcnRlZC4KKyAgICAgICMgV2hlbiBnaXZlbiAtTVAsIGljYyA3LjAgYW5kIDcuMSBjb21wbGFpbiB0aHVzbHk6CisgICAgICAjICAgaWNjOiBDb21tYW5kIGxpbmUgd2FybmluZzogaWdub3Jpbmcgb3B0aW9uICctTSc7IG5vIGFyZ3VtZW50IHJlcXVpcmVkCisgICAgICAjIFRoZSBkaWFnbm9zaXMgY2hhbmdlZCBpbiBpY2MgOC4wOgorICAgICAgIyAgIGljYzogQ29tbWFuZCBsaW5lIHJlbWFyazogb3B0aW9uICctTVAnIG5vdCBzdXBwb3J0ZWQKKyAgICAgIGlmIChncmVwICdpZ25vcmluZyBvcHRpb24nIGNvbmZ0ZXN0LmVyciB8fAorICAgICAgICAgIGdyZXAgJ25vdCBzdXBwb3J0ZWQnIGNvbmZ0ZXN0LmVycikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDo7IGVsc2UKKyAgICAgICAgYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9JGRlcG1vZGUKKyAgICAgICAgYnJlYWsKKyAgICAgIGZpCisgICAgZmkKKyAgZG9uZQorCisgIGNkIC4uCisgIHJtIC1yZiBjb25mdGVzdC5kaXIKK2Vsc2UKKyAgYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9bm9uZQorZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID4mNQorJGFzX2VjaG8gIiRhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY2OyB9CitDQ0RFUE1PREU9ZGVwbW9kZT0kYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUKKworIGlmCisgIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubyBcCisgICYmIHRlc3QgIiRhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPSBnY2MzOyB0aGVuCisgIGFtX19mYXN0ZGVwQ0NfVFJVRT0KKyAgYW1fX2Zhc3RkZXBDQ19GQUxTRT0nIycKK2Vsc2UKKyAgYW1fX2Zhc3RkZXBDQ19UUlVFPScjJworICBhbV9fZmFzdGRlcENDX0ZBTFNFPQorZmkKKworCisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBJU08gQzk5IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBJU08gQzk5Li4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfY2NfYzk5Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY3ZfcHJvZ19jY19jOTk9bm8KK2FjX3NhdmVfQ0M9JENDCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworLy8gQ2hlY2sgdmFyYXJncyBtYWNyb3MuICBUaGVzZSBleGFtcGxlcyBhcmUgdGFrZW4gZnJvbSBDOTkgNi4xMC4zLjUuCisjZGVmaW5lIGRlYnVnKC4uLikgZnByaW50ZiAoc3RkZXJyLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgc2hvd2xpc3QoLi4uKSBwdXRzICgjX19WQV9BUkdTX18pCisjZGVmaW5lIHJlcG9ydCh0ZXN0LC4uLikgKCh0ZXN0KSA/IHB1dHMgKCN0ZXN0KSA6IHByaW50ZiAoX19WQV9BUkdTX18pKQorc3RhdGljIHZvaWQKK3Rlc3RfdmFyYXJnc19tYWNyb3MgKHZvaWQpCit7CisgIGludCB4ID0gMTIzNDsKKyAgaW50IHkgPSA1Njc4OworICBkZWJ1ZyAoIkZsYWciKTsKKyAgZGVidWcgKCJYID0gJWRcbiIsIHgpOworICBzaG93bGlzdCAoVGhlIGZpcnN0LCBzZWNvbmQsIGFuZCB0aGlyZCBpdGVtcy4pOworICByZXBvcnQgKHg+eSwgInggaXMgJWQgYnV0IHkgaXMgJWQiLCB4LCB5KTsKK30KKworLy8gQ2hlY2sgbG9uZyBsb25nIHR5cGVzLgorI2RlZmluZSBCSUc2NCAxODQ0Njc0NDA3MzcwOTU1MTYxNXVsbAorI2RlZmluZSBCSUczMiA0Mjk0OTY3Mjk1dWwKKyNkZWZpbmUgQklHX09LIChCSUc2NCAvIEJJRzMyID09IDQyOTQ5NjcyOTd1bGwgJiYgQklHNjQgJSBCSUczMiA9PSAwKQorI2lmICFCSUdfT0sKKyAgeW91ciBwcmVwcm9jZXNzb3IgaXMgYnJva2VuOworI2VuZGlmCisjaWYgQklHX09LCisjZWxzZQorICB5b3VyIHByZXByb2Nlc3NvciBpcyBicm9rZW47CisjZW5kaWYKK3N0YXRpYyBsb25nIGxvbmcgaW50IGJpZ251bSA9IC05MjIzMzcyMDM2ODU0Nzc1ODA3TEw7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGludCB1YmlnbnVtID0gQklHNjQ7CisKK3N0cnVjdCBpbmNvbXBsZXRlX2FycmF5Cit7CisgIGludCBkYXRhc2l6ZTsKKyAgZG91YmxlIGRhdGFbXTsKK307CisKK3N0cnVjdCBuYW1lZF9pbml0IHsKKyAgaW50IG51bWJlcjsKKyAgY29uc3Qgd2NoYXJfdCAqbmFtZTsKKyAgZG91YmxlIGF2ZXJhZ2U7Cit9OworCit0eXBlZGVmIGNvbnN0IGNoYXIgKmNjcDsKKworc3RhdGljIGlubGluZSBpbnQKK3Rlc3RfcmVzdHJpY3QgKGNjcCByZXN0cmljdCB0ZXh0KQoreworICAvLyBTZWUgaWYgQysrLXN0eWxlIGNvbW1lbnRzIHdvcmsuCisgIC8vIEl0ZXJhdGUgdGhyb3VnaCBpdGVtcyB2aWEgdGhlIHJlc3RyaWN0ZWQgcG9pbnRlci4KKyAgLy8gQWxzbyBjaGVjayBmb3IgZGVjbGFyYXRpb25zIGluIGZvciBsb29wcy4KKyAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7ICoodGV4dCtpKSAhPSAnXDAnOyArK2kpCisgICAgY29udGludWU7CisgIHJldHVybiAwOworfQorCisvLyBDaGVjayB2YXJhcmdzIGFuZCB2YV9jb3B5Lgorc3RhdGljIHZvaWQKK3Rlc3RfdmFyYXJncyAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnczsKKyAgdmFfc3RhcnQgKGFyZ3MsIGZvcm1hdCk7CisgIHZhX2xpc3QgYXJnc19jb3B5OworICB2YV9jb3B5IChhcmdzX2NvcHksIGFyZ3MpOworCisgIGNvbnN0IGNoYXIgKnN0cjsKKyAgaW50IG51bWJlcjsKKyAgZmxvYXQgZm51bWJlcjsKKworICB3aGlsZSAoKmZvcm1hdCkKKyAgICB7CisgICAgICBzd2l0Y2ggKCpmb3JtYXQrKykKKwl7CisJY2FzZSAncyc6IC8vIHN0cmluZworCSAgc3RyID0gdmFfYXJnIChhcmdzX2NvcHksIGNvbnN0IGNoYXIgKik7CisJICBicmVhazsKKwljYXNlICdkJzogLy8gaW50CisJICBudW1iZXIgPSB2YV9hcmcgKGFyZ3NfY29weSwgaW50KTsKKwkgIGJyZWFrOworCWNhc2UgJ2YnOiAvLyBmbG9hdAorCSAgZm51bWJlciA9IHZhX2FyZyAoYXJnc19jb3B5LCBkb3VibGUpOworCSAgYnJlYWs7CisJZGVmYXVsdDoKKwkgIGJyZWFrOworCX0KKyAgICB9CisgIHZhX2VuZCAoYXJnc19jb3B5KTsKKyAgdmFfZW5kIChhcmdzKTsKK30KKworaW50CittYWluICgpCit7CisKKyAgLy8gQ2hlY2sgYm9vbC4KKyAgX0Jvb2wgc3VjY2VzcyA9IGZhbHNlOworCisgIC8vIENoZWNrIHJlc3RyaWN0LgorICBpZiAodGVzdF9yZXN0cmljdCAoIlN0cmluZyBsaXRlcmFsIikgPT0gMCkKKyAgICBzdWNjZXNzID0gdHJ1ZTsKKyAgY2hhciAqcmVzdHJpY3QgbmV3dmFyID0gIkFub3RoZXIgc3RyaW5nIjsKKworICAvLyBDaGVjayB2YXJhcmdzLgorICB0ZXN0X3ZhcmFyZ3MgKCJzLCBkJyBmIC4iLCAic3RyaW5nIiwgNjUsIDM0LjIzNCk7CisgIHRlc3RfdmFyYXJnc19tYWNyb3MgKCk7CisKKyAgLy8gQ2hlY2sgZmxleGlibGUgYXJyYXkgbWVtYmVycy4KKyAgc3RydWN0IGluY29tcGxldGVfYXJyYXkgKmlhID0KKyAgICBtYWxsb2MgKHNpemVvZiAoc3RydWN0IGluY29tcGxldGVfYXJyYXkpICsgKHNpemVvZiAoZG91YmxlKSAqIDEwKSk7CisgIGlhLT5kYXRhc2l6ZSA9IDEwOworICBmb3IgKGludCBpID0gMDsgaSA8IGlhLT5kYXRhc2l6ZTsgKytpKQorICAgIGlhLT5kYXRhW2ldID0gaSAqIDEuMjM0OworCisgIC8vIENoZWNrIG5hbWVkIGluaXRpYWxpemVycy4KKyAgc3RydWN0IG5hbWVkX2luaXQgbmkgPSB7CisgICAgLm51bWJlciA9IDM0LAorICAgIC5uYW1lID0gTCJUZXN0IHdpZGUgc3RyaW5nIiwKKyAgICAuYXZlcmFnZSA9IDU0My4zNDM0MywKKyAgfTsKKworICBuaS5udW1iZXIgPSA1ODsKKworICBpbnQgZHluYW1pY19hcnJheVtuaS5udW1iZXJdOworICBkeW5hbWljX2FycmF5W25pLm51bWJlciAtIDFdID0gNTQzOworCisgIC8vIHdvcmsgYXJvdW5kIHVudXNlZCB2YXJpYWJsZSB3YXJuaW5ncworICByZXR1cm4gKCFzdWNjZXNzIHx8IGJpZ251bSA9PSAwTEwgfHwgdWJpZ251bSA9PSAwdUxMIHx8IG5ld3ZhclswXSA9PSAneCcKKwkgIHx8IGR5bmFtaWNfYXJyYXlbbmkubnVtYmVyIC0gMV0gIT0gNTQzKTsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitmb3IgYWNfYXJnIGluICcnIC1zdGQ9Z251OTkgLXN0ZD1jOTkgLWM5OSAtQUM5OSAteGM5OT1hbGwgLXFsYW5nbHZsPWV4dGM5OQorZG8KKyAgQ0M9IiRhY19zYXZlX0NDICRhY19hcmciCisgIGlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfcHJvZ19jY19jOTk9JGFjX2FyZworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgdGVzdCAieCRhY19jdl9wcm9nX2NjX2M5OSIgIT0gInhubyIgJiYgYnJlYWsKK2RvbmUKK3JtIC1mIGNvbmZ0ZXN0LiRhY19leHQKK0NDPSRhY19zYXZlX0NDCisKK2ZpCisjIEFDX0NBQ0hFX1ZBTAorY2FzZSAieCRhY19jdl9wcm9nX2NjX2M5OSIgaW4KKyAgeCkKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm9uZSBuZWVkZWQiID4mNQorJGFzX2VjaG8gIm5vbmUgbmVlZGVkIiA+JjY7IH0gOzsKKyAgeG5vKQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB1bnN1cHBvcnRlZCIgPiY1CiskYXNfZWNobyAidW5zdXBwb3J0ZWQiID4mNjsgfSA7OworICAqKQorICAgIENDPSIkQ0MgJGFjX2N2X3Byb2dfY2NfYzk5IgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jY19jOTkiID4mNQorJGFzX2VjaG8gIiRhY19jdl9wcm9nX2NjX2M5OSIgPiY2OyB9IDs7Citlc2FjCitpZiB0ZXN0ICJ4JGFjX2N2X3Byb2dfY2NfYzk5IiAhPSB4bm87IHRoZW4gOgorCitmaQorCisKK2FjX2V4dD1jcHAKK2FjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251CitpZiB0ZXN0IC16ICIkQ1hYIjsgdGhlbgorICBpZiB0ZXN0IC1uICIkQ0NDIjsgdGhlbgorICAgIENYWD0kQ0NDCisgIGVsc2UKKyAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgIGZvciBhY19wcm9nIGluIGcrKyBjKysgZ3BwIGFDQyBDQyBjeHggY2MrKyBjbC5leGUgRkNDIEtDQyBSQ0MgeGxDX3IgeGxDCisgIGRvCisgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX0NYWCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRDWFgiOyB0aGVuCisgIGFjX2N2X3Byb2dfQ1hYPSIkQ1hYIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfQ1hYPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitDWFg9JGFjX2N2X3Byb2dfQ1hYCitpZiB0ZXN0IC1uICIkQ1hYIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENYWCIgPiY1CiskYXNfZWNobyAiJENYWCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgICAgdGVzdCAtbiAiJENYWCIgJiYgYnJlYWsKKyAgZG9uZQorZmkKK2lmIHRlc3QgLXogIiRDWFgiOyB0aGVuCisgIGFjX2N0X0NYWD0kQ1hYCisgIGZvciBhY19wcm9nIGluIGcrKyBjKysgZ3BwIGFDQyBDQyBjeHggY2MrKyBjbC5leGUgRkNDIEtDQyBSQ0MgeGxDX3IgeGxDCitkbworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfQ1hYKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0NYWCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9DWFg9IiRhY19jdF9DWFgiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9DWFg9IiRhY19wcm9nIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0NYWD0kYWNfY3ZfcHJvZ19hY19jdF9DWFgKK2lmIHRlc3QgLW4gIiRhY19jdF9DWFgiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfQ1hYIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfQ1hYIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgdGVzdCAtbiAiJGFjX2N0X0NYWCIgJiYgYnJlYWsKK2RvbmUKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0NYWCIgPSB4OyB0aGVuCisgICAgQ1hYPSJnKysiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgQ1hYPSRhY19jdF9DWFgKKyAgZmkKK2ZpCisKKyAgZmkKK2ZpCisjIFByb3ZpZGUgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29tcGlsZXIuCiskYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQysrIGNvbXBpbGVyIHZlcnNpb24iID4mNQorc2V0IFggJGFjX2NvbXBpbGUKK2FjX2NvbXBpbGVyPSQyCitmb3IgYWNfb3B0aW9uIGluIC0tdmVyc2lvbiAtdiAtViAtcXZlcnNpb247IGRvCisgIHsgeyBhY190cnk9IiRhY19jb21waWxlciAkYWNfb3B0aW9uID4mNSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGVyICRhY19vcHRpb24gPiY1IikgMj5jb25mdGVzdC5lcnIKKyAgYWNfc3RhdHVzPSQ/CisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgc2VkICcxMGFcCisuLi4gcmVzdCBvZiBzdGRlcnIgb3V0cHV0IGRlbGV0ZWQgLi4uCisgICAgICAgICAxMHEnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCisgICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKKyAgZmkKKyAgcm0gLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorZG9uZQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQysrIGNvbXBpbGVyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQysrIGNvbXBpbGVyLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2N4eF9jb21waWxlcl9nbnUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworI2lmbmRlZiBfX0dOVUNfXworICAgICAgIGNob2tlIG1lCisjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY29tcGlsZXJfZ251PXllcworZWxzZQorICBhY19jb21waWxlcl9nbnU9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2FjX2N2X2N4eF9jb21waWxlcl9nbnU9JGFjX2NvbXBpbGVyX2dudQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9jeHhfY29tcGlsZXJfZ251IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfY3h4X2NvbXBpbGVyX2dudSIgPiY2OyB9CitpZiB0ZXN0ICRhY19jb21waWxlcl9nbnUgPSB5ZXM7IHRoZW4KKyAgR1hYPXllcworZWxzZQorICBHWFg9CitmaQorYWNfdGVzdF9DWFhGTEFHUz0ke0NYWEZMQUdTK3NldH0KK2FjX3NhdmVfQ1hYRkxBR1M9JENYWEZMQUdTCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJENYWCBhY2NlcHRzIC1nIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJENYWCBhY2NlcHRzIC1nLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfY3h4X2crOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19zYXZlX2N4eF93ZXJyb3JfZmxhZz0kYWNfY3h4X3dlcnJvcl9mbGFnCisgICBhY19jeHhfd2Vycm9yX2ZsYWc9eWVzCisgICBhY19jdl9wcm9nX2N4eF9nPW5vCisgICBDWFhGTEFHUz0iLWciCisgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9wcm9nX2N4eF9nPXllcworZWxzZQorICBDWFhGTEFHUz0iIgorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworZWxzZQorICBhY19jeHhfd2Vycm9yX2ZsYWc9JGFjX3NhdmVfY3h4X3dlcnJvcl9mbGFnCisJIENYWEZMQUdTPSItZyIKKwkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfcHJvZ19jeHhfZz15ZXMKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGFjX2N4eF93ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jeHhfd2Vycm9yX2ZsYWcKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3Byb2dfY3h4X2ciID4mNQorJGFzX2VjaG8gIiRhY19jdl9wcm9nX2N4eF9nIiA+JjY7IH0KK2lmIHRlc3QgIiRhY190ZXN0X0NYWEZMQUdTIiA9IHNldDsgdGhlbgorICBDWFhGTEFHUz0kYWNfc2F2ZV9DWFhGTEFHUworZWxpZiB0ZXN0ICRhY19jdl9wcm9nX2N4eF9nID0geWVzOyB0aGVuCisgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgQ1hYRkxBR1M9Ii1nIC1PMiIKKyAgZWxzZQorICAgIENYWEZMQUdTPSItZyIKKyAgZmkKK2Vsc2UKKyAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICBDWFhGTEFHUz0iLU8yIgorICBlbHNlCisgICAgQ1hYRkxBR1M9CisgIGZpCitmaQorYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCitkZXBjYz0iJENYWCIgIGFtX2NvbXBpbGVyX2xpc3Q9CisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2MuLi4gIiA+JjY7IH0KK2lmICR7YW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAteiAiJEFNREVQX1RSVUUiICYmIHRlc3QgLWYgIiRhbV9kZXBjb21wIjsgdGhlbgorICAjIFdlIG1ha2UgYSBzdWJkaXIgYW5kIGRvIHRoZSB0ZXN0cyB0aGVyZS4gIE90aGVyd2lzZSB3ZSBjYW4gZW5kIHVwCisgICMgbWFraW5nIGJvZ3VzIGZpbGVzIHRoYXQgd2UgZG9uJ3Qga25vdyBhYm91dCBhbmQgbmV2ZXIgcmVtb3ZlLiAgRm9yCisgICMgaW5zdGFuY2UgaXQgd2FzIHJlcG9ydGVkIHRoYXQgb24gSFAtVVggdGhlIGdjYyB0ZXN0IHdpbGwgZW5kIHVwCisgICMgbWFraW5nIGEgZHVtbXkgZmlsZSBuYW1lZCBgRCcgLS0gYmVjYXVzZSBgLU1EJyBtZWFucyBgcHV0IHRoZSBvdXRwdXQKKyAgIyBpbiBEJy4KKyAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgorICBta2RpciBjb25mdGVzdC5kaXIKKyAgIyBDb3B5IGRlcGNvbXAgdG8gc3ViZGlyIGJlY2F1c2Ugb3RoZXJ3aXNlIHdlIHdvbid0IGZpbmQgaXQgaWYgd2UncmUKKyAgIyB1c2luZyBhIHJlbGF0aXZlIGRpcmVjdG9yeS4KKyAgY3AgIiRhbV9kZXBjb21wIiBjb25mdGVzdC5kaXIKKyAgY2QgY29uZnRlc3QuZGlyCisgICMgV2Ugd2lsbCBidWlsZCBvYmplY3RzIGFuZCBkZXBlbmRlbmNpZXMgaW4gYSBzdWJkaXJlY3RvcnkgYmVjYXVzZQorICAjIGl0IGhlbHBzIHRvIGRldGVjdCBpbmFwcGxpY2FibGUgZGVwZW5kZW5jeSBtb2Rlcy4gIEZvciBpbnN0YW5jZQorICAjIGJvdGggVHJ1NjQncyBjYyBhbmQgSUNDIHN1cHBvcnQgLU1EIHRvIG91dHB1dCBkZXBlbmRlbmNpZXMgYXMgYQorICAjIHNpZGUgZWZmZWN0IG9mIGNvbXBpbGF0aW9uLCBidXQgSUNDIHdpbGwgcHV0IHRoZSBkZXBlbmRlbmNpZXMgaW4KKyAgIyB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2hpbGUgVHJ1NjQgd2lsbCBwdXQgdGhlbSBpbiB0aGUgb2JqZWN0CisgICMgZGlyZWN0b3J5LgorICBta2RpciBzdWIKKworICBhbV9jdl9DWFhfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9bm9uZQorICBpZiB0ZXN0ICIkYW1fY29tcGlsZXJfbGlzdCIgPSAiIjsgdGhlbgorICAgICBhbV9jb21waWxlcl9saXN0PWBzZWQgLW4gJ3MvXiMqXChbYS16QS1aMC05XSpcKSkkL1wxL3AnIDwgLi9kZXBjb21wYAorICBmaQorICBhbV9fdW5pdmVyc2FsPWZhbHNlCisgIGNhc2UgIiAkZGVwY2MgIiBpbiAjKAorICAgICAqXCAtYXJjaFwgKlwgLWFyY2hcICopIGFtX191bml2ZXJzYWw9dHJ1ZSA7OworICAgICBlc2FjCisKKyAgZm9yIGRlcG1vZGUgaW4gJGFtX2NvbXBpbGVyX2xpc3Q7IGRvCisgICAgIyBTZXR1cCBhIHNvdXJjZSB3aXRoIG1hbnkgZGVwZW5kZW5jaWVzLCBiZWNhdXNlIHNvbWUgY29tcGlsZXJzCisgICAgIyBsaWtlIHRvIHdyYXAgbGFyZ2UgZGVwZW5kZW5jeSBsaXN0cyBvbiBjb2x1bW4gODAgKHdpdGggXCksIGFuZAorICAgICMgd2Ugc2hvdWxkIG5vdCBjaG9vc2UgYSBkZXBjb21wIG1vZGUgd2hpY2ggaXMgY29uZnVzZWQgYnkgdGhpcy4KKyAgICAjCisgICAgIyBXZSBuZWVkIHRvIHJlY3JlYXRlIHRoZXNlIGZpbGVzIGZvciBlYWNoIHRlc3QsIGFzIHRoZSBjb21waWxlciBtYXkKKyAgICAjIG92ZXJ3cml0ZSBzb21lIG9mIHRoZW0gd2hlbiB0ZXN0aW5nIHdpdGggb2JzY3VyZSBjb21tYW5kIGxpbmVzLgorICAgICMgVGhpcyBoYXBwZW5zIGF0IGxlYXN0IHdpdGggdGhlIEFJWCBDIGNvbXBpbGVyLgorICAgIDogPiBzdWIvY29uZnRlc3QuYworICAgIGZvciBpIGluIDEgMiAzIDQgNSA2OyBkbworICAgICAgZWNobyAnI2luY2x1ZGUgImNvbmZ0c3QnJGknLmgiJyA+PiBzdWIvY29uZnRlc3QuYworICAgICAgIyBVc2luZyBgOiA+IHN1Yi9jb25mdHN0JGkuaCcgY3JlYXRlcyBvbmx5IHN1Yi9jb25mdHN0MS5oIHdpdGgKKyAgICAgICMgU29sYXJpcyA4J3Mgey91c3IsfS9iaW4vc2guCisgICAgICB0b3VjaCBzdWIvY29uZnRzdCRpLmgKKyAgICBkb25lCisgICAgZWNobyAiJHthbV9faW5jbHVkZX0gJHthbV9fcXVvdGV9c3ViL2NvbmZ0ZXN0LlBvJHthbV9fcXVvdGV9IiA+IGNvbmZtZgorCisgICAgIyBXZSBjaGVjayB3aXRoIGAtYycgYW5kIGAtbycgZm9yIHRoZSBzYWtlIG9mIHRoZSAiZGFzaG1zdGRvdXQiCisgICAgIyBtb2RlLiAgSXQgdHVybnMgb3V0IHRoYXQgdGhlIFN1blBybyBDKysgY29tcGlsZXIgZG9lcyBub3QgcHJvcGVybHkKKyAgICAjIGhhbmRsZSBgLU0gLW8nLCBhbmQgd2UgbmVlZCB0byBkZXRlY3QgdGhpcy4gIEFsc28sIHNvbWUgSW50ZWwKKyAgICAjIHZlcnNpb25zIGhhZCB0cm91YmxlIHdpdGggb3V0cHV0IGluIHN1YmRpcnMKKyAgICBhbV9fb2JqPXN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfQorICAgIGFtX19taW51c19vYmo9Ii1vICRhbV9fb2JqIgorICAgIGNhc2UgJGRlcG1vZGUgaW4KKyAgICBnY2MpCisgICAgICAjIFRoaXMgZGVwbW9kZSBjYXVzZXMgYSBjb21waWxlciByYWNlIGluIHVuaXZlcnNhbCBtb2RlLgorICAgICAgdGVzdCAiJGFtX191bml2ZXJzYWwiID0gZmFsc2UgfHwgY29udGludWUKKyAgICAgIDs7CisgICAgbm9zaWRlZWZmZWN0KQorICAgICAgIyBhZnRlciB0aGlzIHRhZywgbWVjaGFuaXNtcyBhcmUgbm90IGJ5IHNpZGUtZWZmZWN0LCBzbyB0aGV5J2xsCisgICAgICAjIG9ubHkgYmUgdXNlZCB3aGVuIGV4cGxpY2l0bHkgcmVxdWVzdGVkCisgICAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiA9IHh5ZXM7IHRoZW4KKwljb250aW51ZQorICAgICAgZWxzZQorCWJyZWFrCisgICAgICBmaQorICAgICAgOzsKKyAgICBtc3ZjNyB8IG1zdmM3bXN5cyB8IG1zdmlzdWFsY3BwIHwgbXN2Y21zeXMpCisgICAgICAjIFRoaXMgY29tcGlsZXIgd29uJ3QgZ3JvayBgLWMgLW8nLCBidXQgYWxzbywgdGhlIG1pbnVzbyB0ZXN0IGhhcworICAgICAgIyBub3QgcnVuIHlldC4gIFRoZXNlIGRlcG1vZGVzIGFyZSBsYXRlIGVub3VnaCBpbiB0aGUgZ2FtZSwgYW5kCisgICAgICAjIHNvIHdlYWsgdGhhdCB0aGVpciBmdW5jdGlvbmluZyBzaG91bGQgbm90IGJlIGltcGFjdGVkLgorICAgICAgYW1fX29iaj1jb25mdGVzdC4ke09CSkVYVC1vfQorICAgICAgYW1fX21pbnVzX29iaj0KKyAgICAgIDs7CisgICAgbm9uZSkgYnJlYWsgOzsKKyAgICBlc2FjCisgICAgaWYgZGVwbW9kZT0kZGVwbW9kZSBcCisgICAgICAgc291cmNlPXN1Yi9jb25mdGVzdC5jIG9iamVjdD0kYW1fX29iaiBcCisgICAgICAgZGVwZmlsZT1zdWIvY29uZnRlc3QuUG8gdG1wZGVwZmlsZT1zdWIvY29uZnRlc3QuVFBvIFwKKyAgICAgICAkU0hFTEwgLi9kZXBjb21wICRkZXBjYyAtYyAkYW1fX21pbnVzX29iaiBzdWIvY29uZnRlc3QuYyBcCisgICAgICAgICA+L2Rldi9udWxsIDI+Y29uZnRlc3QuZXJyICYmCisgICAgICAgZ3JlcCBzdWIvY29uZnRzdDEuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorICAgICAgIGdyZXAgc3ViL2NvbmZ0c3Q2Lmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKKyAgICAgICBncmVwICRhbV9fb2JqIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgJHtNQUtFLW1ha2V9IC1zIC1mIGNvbmZtZiA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAjIGljYyBkb2Vzbid0IGNob2tlIG9uIHVua25vd24gb3B0aW9ucywgaXQgd2lsbCBqdXN0IGlzc3VlIHdhcm5pbmdzCisgICAgICAjIG9yIHJlbWFya3MgKGV2ZW4gd2l0aCAtV2Vycm9yKS4gIFNvIHdlIGdyZXAgc3RkZXJyIGZvciBhbnkgbWVzc2FnZQorICAgICAgIyB0aGF0IHNheXMgYW4gb3B0aW9uIHdhcyBpZ25vcmVkIG9yIG5vdCBzdXBwb3J0ZWQuCisgICAgICAjIFdoZW4gZ2l2ZW4gLU1QLCBpY2MgNy4wIGFuZCA3LjEgY29tcGxhaW4gdGh1c2x5OgorICAgICAgIyAgIGljYzogQ29tbWFuZCBsaW5lIHdhcm5pbmc6IGlnbm9yaW5nIG9wdGlvbiAnLU0nOyBubyBhcmd1bWVudCByZXF1aXJlZAorICAgICAgIyBUaGUgZGlhZ25vc2lzIGNoYW5nZWQgaW4gaWNjIDguMDoKKyAgICAgICMgICBpY2M6IENvbW1hbmQgbGluZSByZW1hcms6IG9wdGlvbiAnLU1QJyBub3Qgc3VwcG9ydGVkCisgICAgICBpZiAoZ3JlcCAnaWdub3Jpbmcgb3B0aW9uJyBjb25mdGVzdC5lcnIgfHwKKyAgICAgICAgICBncmVwICdub3Qgc3VwcG9ydGVkJyBjb25mdGVzdC5lcnIpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6OyBlbHNlCisgICAgICAgIGFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT0kZGVwbW9kZQorICAgICAgICBicmVhaworICAgICAgZmkKKyAgICBmaQorICBkb25lCisKKyAgY2QgLi4KKyAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgorZWxzZQorICBhbV9jdl9DWFhfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9bm9uZQorZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjUKKyRhc19lY2hvICIkYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjY7IH0KK0NYWERFUE1PREU9ZGVwbW9kZT0kYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlCisKKyBpZgorICB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiAhPSB4bm8gXAorICAmJiB0ZXN0ICIkYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA9IGdjYzM7IHRoZW4KKyAgYW1fX2Zhc3RkZXBDWFhfVFJVRT0KKyAgYW1fX2Zhc3RkZXBDWFhfRkFMU0U9JyMnCitlbHNlCisgIGFtX19mYXN0ZGVwQ1hYX1RSVUU9JyMnCisgIGFtX19mYXN0ZGVwQ1hYX0ZBTFNFPQorZmkKKworCitpZiB0ZXN0ICJ4JENDIiAhPSB4Y2M7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRDQyBhbmQgY2MgdW5kZXJzdGFuZCAtYyBhbmQgLW8gdG9nZXRoZXIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkQ0MgYW5kIGNjIHVuZGVyc3RhbmQgLWMgYW5kIC1vIHRvZ2V0aGVyLi4uICIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBjYyB1bmRlcnN0YW5kcyAtYyBhbmQgLW8gdG9nZXRoZXIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBjYyB1bmRlcnN0YW5kcyAtYyBhbmQgLW8gdG9nZXRoZXIuLi4gIiA+JjY7IH0KK2ZpCitzZXQgZHVtbXkgJENDOyBhY19jYz1gJGFzX2VjaG8gIiQyIiB8CisJCSAgICAgIHNlZCAncy9bXmEtekEtWjAtOV9dL18vZztzL15bMC05XS9fLydgCitpZiBldmFsIFwke2FjX2N2X3Byb2dfY2NfJHthY19jY31fY19vKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCisjIE1ha2Ugc3VyZSBpdCB3b3JrcyBib3RoIHdpdGggJENDIGFuZCB3aXRoIHNpbXBsZSBjYy4KKyMgV2UgZG8gdGhlIHRlc3QgdHdpY2UgYmVjYXVzZSBzb21lIGNvbXBpbGVycyByZWZ1c2UgdG8gb3ZlcndyaXRlIGFuCisjIGV4aXN0aW5nIC5vIGZpbGUgd2l0aCAtbywgdGhvdWdoIHRoZXkgd2lsbCBjcmVhdGUgb25lLgorYWNfdHJ5PSckQ0MgLWMgY29uZnRlc3QuJGFjX2V4dCAtbyBjb25mdGVzdDIuJGFjX29iamV4dCA+JjUnCitybSAtZiBjb25mdGVzdDIuKgoraWYgeyB7IGNhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmCisgICB0ZXN0IC1mIGNvbmZ0ZXN0Mi4kYWNfb2JqZXh0ICYmIHsgeyBjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY190cnkiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsKK3RoZW4KKyAgZXZhbCBhY19jdl9wcm9nX2NjXyR7YWNfY2N9X2Nfbz15ZXMKKyAgaWYgdGVzdCAieCRDQyIgIT0geGNjOyB0aGVuCisgICAgIyBUZXN0IGZpcnN0IHRoYXQgY2MgZXhpc3RzIGF0IGFsbC4KKyAgICBpZiB7IGFjX3RyeT0nY2MgLWMgY29uZnRlc3QuJGFjX2V4dCA+JjUnCisgIHsgeyBjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY190cnkiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgfTsgdGhlbgorICAgICAgYWNfdHJ5PSdjYyAtYyBjb25mdGVzdC4kYWNfZXh0IC1vIGNvbmZ0ZXN0Mi4kYWNfb2JqZXh0ID4mNScKKyAgICAgIHJtIC1mIGNvbmZ0ZXN0Mi4qCisgICAgICBpZiB7IHsgY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfdHJ5IikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYKKwkgdGVzdCAtZiBjb25mdGVzdDIuJGFjX29iamV4dCAmJiB7IHsgY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfdHJ5IikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07CisgICAgICB0aGVuCisJIyBjYyB3b3JrcyB0b28uCisJOgorICAgICAgZWxzZQorCSMgY2MgZXhpc3RzIGJ1dCBkb2Vzbid0IGxpa2UgLW8uCisJZXZhbCBhY19jdl9wcm9nX2NjXyR7YWNfY2N9X2Nfbz1ubworICAgICAgZmkKKyAgICBmaQorICBmaQorZWxzZQorICBldmFsIGFjX2N2X3Byb2dfY2NfJHthY19jY31fY19vPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdCoKKworZmkKK2lmIGV2YWwgdGVzdCBcJGFjX2N2X3Byb2dfY2NfJHthY19jY31fY19vID0geWVzOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCiskYXNfZWNobyAiI2RlZmluZSBOT19NSU5VU19DX01JTlVTX08gMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKyMgRklYTUU6IHdlIHJlbHkgb24gdGhlIGNhY2hlIHZhcmlhYmxlIG5hbWUgYmVjYXVzZQorIyB0aGVyZSBpcyBubyBvdGhlciB3YXkuCitzZXQgZHVtbXkgJENDCithbV9jYz1gZWNobyAkMiB8IHNlZCAncy9bXmEtekEtWjAtOV9dL18vZztzL15bMC05XS9fLydgCitldmFsIGFtX3Q9XCRhY19jdl9wcm9nX2NjXyR7YW1fY2N9X2NfbworaWYgdGVzdCAiJGFtX3QiICE9IHllczsgdGhlbgorICAgIyBMb3NpbmcgY29tcGlsZXIsIHNvIG92ZXJyaWRlIHdpdGggdGhlIHNjcmlwdC4KKyAgICMgRklYTUU6IEl0IGlzIHdyb25nIHRvIHJld3JpdGUgQ0MuCisgICAjIEJ1dCBpZiB3ZSBkb24ndCB0aGVuIHdlIGdldCBpbnRvIHRyb3VibGUgb2Ygb25lIHNvcnQgb3IgYW5vdGhlci4KKyAgICMgQSBsb25nZXItdGVybSBmaXggd291bGQgYmUgdG8gaGF2ZSBhdXRvbWFrZSB1c2UgYW1fX0NDIGluIHRoaXMgY2FzZSwKKyAgICMgYW5kIHRoZW4gd2UgY291bGQgc2V0IGFtX19DQz0iXCQodG9wX3NyY2RpcikvY29tcGlsZSBcJChDQykiCisgICBDQz0iJGFtX2F1eF9kaXIvY29tcGlsZSAkQ0MiCitmaQorCisKKworYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3NvciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3Nvci4uLiAiID4mNjsgfQorIyBPbiBTdW5zLCBzb21ldGltZXMgJENQUCBuYW1lcyBhIGRpcmVjdG9yeS4KK2lmIHRlc3QgLW4gIiRDUFAiICYmIHRlc3QgLWQgIiRDUFAiOyB0aGVuCisgIENQUD0KK2ZpCitpZiB0ZXN0IC16ICIkQ1BQIjsgdGhlbgorICBpZiAke2FjX2N2X3Byb2dfQ1BQKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgICAgICMgRG91YmxlIHF1b3RlcyBiZWNhdXNlIENQUCBuZWVkcyB0byBiZSBleHBhbmRlZAorICAgIGZvciBDUFAgaW4gIiRDQyAtRSIgIiRDQyAtRSAtdHJhZGl0aW9uYWwtY3BwIiAiL2xpYi9jcHAiCisgICAgZG8KKyAgICAgIGFjX3ByZXByb2Nfb2s9ZmFsc2UKK2ZvciBhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluICcnIHllcworZG8KKyAgIyBVc2UgYSBoZWFkZXIgZmlsZSB0aGF0IGNvbWVzIHdpdGggZ2NjLCBzbyBjb25maWd1cmluZyBnbGliYworICAjIHdpdGggYSBmcmVzaCBjcm9zcy1jb21waWxlciB3b3Jrcy4KKyAgIyBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICMgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLgorICAjIE9uIHRoZSBOZVhULCBjYyAtRSBydW5zIHRoZSBjb2RlIHRocm91Z2ggdGhlIGNvbXBpbGVyJ3MgcGFyc2VyLAorICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLiAiU3ludGF4IGVycm9yIiBpcyBoZXJlIHRvIGNhdGNoIHRoaXMgY2FzZS4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKwkJICAgICBTeW50YXggZXJyb3IKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisKK2Vsc2UKKyAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgorY29udGludWUKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CisKKyAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMKKyAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgorY29udGludWUKK2Vsc2UKKyAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KK2FjX3ByZXByb2Nfb2s9OgorYnJlYWsKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CisKK2RvbmUKKyMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgorcm0gLWYgY29uZnRlc3QuaSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAoraWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4gOgorICBicmVhaworZmkKKworICAgIGRvbmUKKyAgICBhY19jdl9wcm9nX0NQUD0kQ1BQCisKK2ZpCisgIENQUD0kYWNfY3ZfcHJvZ19DUFAKK2Vsc2UKKyAgYWNfY3ZfcHJvZ19DUFA9JENQUAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ1BQIiA+JjUKKyRhc19lY2hvICIkQ1BQIiA+JjY7IH0KK2FjX3ByZXByb2Nfb2s9ZmFsc2UKK2ZvciBhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluICcnIHllcworZG8KKyAgIyBVc2UgYSBoZWFkZXIgZmlsZSB0aGF0IGNvbWVzIHdpdGggZ2NjLCBzbyBjb25maWd1cmluZyBnbGliYworICAjIHdpdGggYSBmcmVzaCBjcm9zcy1jb21waWxlciB3b3Jrcy4KKyAgIyBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICMgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLgorICAjIE9uIHRoZSBOZVhULCBjYyAtRSBydW5zIHRoZSBjb2RlIHRocm91Z2ggdGhlIGNvbXBpbGVyJ3MgcGFyc2VyLAorICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLiAiU3ludGF4IGVycm9yIiBpcyBoZXJlIHRvIGNhdGNoIHRoaXMgY2FzZS4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKwkJICAgICBTeW50YXggZXJyb3IKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisKK2Vsc2UKKyAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgorY29udGludWUKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CisKKyAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMKKyAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgorY29udGludWUKK2Vsc2UKKyAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KK2FjX3ByZXByb2Nfb2s9OgorYnJlYWsKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CisKK2RvbmUKKyMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgorcm0gLWYgY29uZnRlc3QuaSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAoraWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4gOgorCitlbHNlCisgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgJD8gIkMgcHJlcHJvY2Vzc29yIFwiJENQUFwiIGZhaWxzIHNhbml0eSBjaGVjaworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KK2ZpCisKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBncmVwIHRoYXQgaGFuZGxlcyBsb25nIGxpbmVzIGFuZCAtZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZ3JlcCB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lcyBhbmQgLWUuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9HUkVQKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAteiAiJEdSRVAiOyB0aGVuCisgIGFjX3BhdGhfR1JFUF9mb3VuZD1mYWxzZQorICAjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbgorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19wcm9nIGluIGdyZXAgZ2dyZXA7IGRvCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICAgICBhY19wYXRoX0dSRVA9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCisgICAgICB7IHRlc3QgLWYgIiRhY19wYXRoX0dSRVAiICYmICRhc190ZXN0X3ggIiRhY19wYXRoX0dSRVAiOyB9IHx8IGNvbnRpbnVlCisjIENoZWNrIGZvciBHTlUgYWNfcGF0aF9HUkVQIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCisgICMgQ2hlY2sgZm9yIEdOVSAkYWNfcGF0aF9HUkVQCitjYXNlIGAiJGFjX3BhdGhfR1JFUCIgLS12ZXJzaW9uIDI+JjFgIGluCisqR05VKikKKyAgYWNfY3ZfcGF0aF9HUkVQPSIkYWNfcGF0aF9HUkVQIiBhY19wYXRoX0dSRVBfZm91bmQ9Ojs7CisqKQorICBhY19jb3VudD0wCisgICRhc19lY2hvX24gMDEyMzQ1Njc4OSA+ImNvbmZ0ZXN0LmluIgorICB3aGlsZSA6CisgIGRvCisgICAgY2F0ICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0LmluIiA+ImNvbmZ0ZXN0LnRtcCIKKyAgICBtdiAiY29uZnRlc3QudG1wIiAiY29uZnRlc3QuaW4iCisgICAgY3AgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QubmwiCisgICAgJGFzX2VjaG8gJ0dSRVAnID4+ICJjb25mdGVzdC5ubCIKKyAgICAiJGFjX3BhdGhfR1JFUCIgLWUgJ0dSRVAkJyAtZSAnLShjYW5ub3QgbWF0Y2gpLScgPCAiY29uZnRlc3QubmwiID4iY29uZnRlc3Qub3V0IiAyPi9kZXYvbnVsbCB8fCBicmVhaworICAgIGRpZmYgImNvbmZ0ZXN0Lm91dCIgImNvbmZ0ZXN0Lm5sIiA+L2Rldi9udWxsIDI+JjEgfHwgYnJlYWsKKyAgICBhc19mbl9hcml0aCAkYWNfY291bnQgKyAxICYmIGFjX2NvdW50PSRhc192YWwKKyAgICBpZiB0ZXN0ICRhY19jb3VudCAtZ3QgJHthY19wYXRoX0dSRVBfbWF4LTB9OyB0aGVuCisgICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKKyAgICAgIGFjX2N2X3BhdGhfR1JFUD0iJGFjX3BhdGhfR1JFUCIKKyAgICAgIGFjX3BhdGhfR1JFUF9tYXg9JGFjX2NvdW50CisgICAgZmkKKyAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCisgICAgdGVzdCAkYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCisgIGRvbmUKKyAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7Citlc2FjCisKKyAgICAgICRhY19wYXRoX0dSRVBfZm91bmQgJiYgYnJlYWsgMworICAgIGRvbmUKKyAgZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisgIGlmIHRlc3QgLXogIiRhY19jdl9wYXRoX0dSRVAiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgZ3JlcCBjb3VsZCBiZSBmb3VuZCBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4iICIkTElORU5PIiA1CisgIGZpCitlbHNlCisgIGFjX2N2X3BhdGhfR1JFUD0kR1JFUAorZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcGF0aF9HUkVQIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcGF0aF9HUkVQIiA+JjY7IH0KKyBHUkVQPSIkYWNfY3ZfcGF0aF9HUkVQIgorCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGVncmVwIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBlZ3JlcC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX0VHUkVQKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgZWNobyBhIHwgJEdSRVAgLUUgJyhhfGIpJyA+L2Rldi9udWxsIDI+JjEKKyAgIHRoZW4gYWNfY3ZfcGF0aF9FR1JFUD0iJEdSRVAgLUUiCisgICBlbHNlCisgICAgIGlmIHRlc3QgLXogIiRFR1JFUCI7IHRoZW4KKyAgYWNfcGF0aF9FR1JFUF9mb3VuZD1mYWxzZQorICAjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbgorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19wcm9nIGluIGVncmVwOyBkbworICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgICAgYWNfcGF0aF9FR1JFUD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIKKyAgICAgIHsgdGVzdCAtZiAiJGFjX3BhdGhfRUdSRVAiICYmICRhc190ZXN0X3ggIiRhY19wYXRoX0VHUkVQIjsgfSB8fCBjb250aW51ZQorIyBDaGVjayBmb3IgR05VIGFjX3BhdGhfRUdSRVAgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KKyAgIyBDaGVjayBmb3IgR05VICRhY19wYXRoX0VHUkVQCitjYXNlIGAiJGFjX3BhdGhfRUdSRVAiIC0tdmVyc2lvbiAyPiYxYCBpbgorKkdOVSopCisgIGFjX2N2X3BhdGhfRUdSRVA9IiRhY19wYXRoX0VHUkVQIiBhY19wYXRoX0VHUkVQX2ZvdW5kPTo7OworKikKKyAgYWNfY291bnQ9MAorICAkYXNfZWNob19uIDAxMjM0NTY3ODkgPiJjb25mdGVzdC5pbiIKKyAgd2hpbGUgOgorICBkbworICAgIGNhdCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5pbiIgPiJjb25mdGVzdC50bXAiCisgICAgbXYgImNvbmZ0ZXN0LnRtcCIgImNvbmZ0ZXN0LmluIgorICAgIGNwICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0Lm5sIgorICAgICRhc19lY2hvICdFR1JFUCcgPj4gImNvbmZ0ZXN0Lm5sIgorICAgICIkYWNfcGF0aF9FR1JFUCIgJ0VHUkVQJCcgPCAiY29uZnRlc3QubmwiID4iY29uZnRlc3Qub3V0IiAyPi9kZXYvbnVsbCB8fCBicmVhaworICAgIGRpZmYgImNvbmZ0ZXN0Lm91dCIgImNvbmZ0ZXN0Lm5sIiA+L2Rldi9udWxsIDI+JjEgfHwgYnJlYWsKKyAgICBhc19mbl9hcml0aCAkYWNfY291bnQgKyAxICYmIGFjX2NvdW50PSRhc192YWwKKyAgICBpZiB0ZXN0ICRhY19jb3VudCAtZ3QgJHthY19wYXRoX0VHUkVQX21heC0wfTsgdGhlbgorICAgICAgIyBCZXN0IG9uZSBzbyBmYXIsIHNhdmUgaXQgYnV0IGtlZXAgbG9va2luZyBmb3IgYSBiZXR0ZXIgb25lCisgICAgICBhY19jdl9wYXRoX0VHUkVQPSIkYWNfcGF0aF9FR1JFUCIKKyAgICAgIGFjX3BhdGhfRUdSRVBfbWF4PSRhY19jb3VudAorICAgIGZpCisgICAgIyAxMCooMl4xMCkgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAorICAgIHRlc3QgJGFjX2NvdW50IC1ndCAxMCAmJiBicmVhaworICBkb25lCisgIHJtIC1mIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5ubCBjb25mdGVzdC5vdXQ7OworZXNhYworCisgICAgICAkYWNfcGF0aF9FR1JFUF9mb3VuZCAmJiBicmVhayAzCisgICAgZG9uZQorICBkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKyAgaWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfRUdSRVAiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgZWdyZXAgY291bGQgYmUgZm91bmQgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluIiAiJExJTkVOTyIgNQorICBmaQorZWxzZQorICBhY19jdl9wYXRoX0VHUkVQPSRFR1JFUAorZmkKKworICAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3BhdGhfRUdSRVAiID4mNQorJGFzX2VjaG8gIiRhY19jdl9wYXRoX0VHUkVQIiA+JjY7IH0KKyBFR1JFUD0iJGFjX2N2X3BhdGhfRUdSRVAiCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcy4uLiAiID4mNjsgfQoraWYgJHthY19jdl9oZWFkZXJfc3RkYys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxmbG9hdC5oPgorCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2hlYWRlcl9zdGRjPXllcworZWxzZQorICBhY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICAjIFN1bk9TIDQueCBzdHJpbmcuaCBkb2VzIG5vdCBkZWNsYXJlIG1lbSosIGNvbnRyYXJ5IHRvIEFOU0kuCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAibWVtY2hyIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCitlbHNlCisgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKK2ZpCisKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisgICMgSVNDIDIuMC4yIHN0ZGxpYi5oIGRvZXMgbm90IGRlY2xhcmUgZnJlZSwgY29udHJhcnkgdG8gQU5TSS4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJmcmVlIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCitlbHNlCisgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKK2ZpCisKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisgICMgL2Jpbi9jYyBpbiBJcml4LTQuMC41IGdldHMgbm9uLUFOU0kgY3R5cGUgbWFjcm9zIHVubGVzcyB1c2luZyAtYW5zaS4KKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICA6CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2lmICgoJyAnICYgMHgwRkYpID09IDB4MDIwKQorIyBkZWZpbmUgSVNMT1dFUihjKSAoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ3onKQorIyBkZWZpbmUgVE9VUFBFUihjKSAoSVNMT1dFUihjKSA/ICdBJyArICgoYykgLSAnYScpIDogKGMpKQorI2Vsc2UKKyMgZGVmaW5lIElTTE9XRVIoYykgXAorCQkgICAoKCdhJyA8PSAoYykgJiYgKGMpIDw9ICdpJykgXAorCQkgICAgIHx8ICgnaicgPD0gKGMpICYmIChjKSA8PSAncicpIFwKKwkJICAgICB8fCAoJ3MnIDw9IChjKSAmJiAoYykgPD0gJ3onKSkKKyMgZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykgPyAoKGMpIHwgMHg0MCkgOiAoYykpCisjZW5kaWYKKworI2RlZmluZSBYT1IoZSwgZikgKCgoZSkgJiYgIShmKSkgfHwgKCEoZSkgJiYgKGYpKSkKK2ludAorbWFpbiAoKQoreworICBpbnQgaTsKKyAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQorICAgIGlmIChYT1IgKGlzbG93ZXIgKGkpLCBJU0xPV0VSIChpKSkKKwl8fCB0b3VwcGVyIChpKSAhPSBUT1VQUEVSIChpKSkKKyAgICAgIHJldHVybiAyOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCitmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3N0ZGMiID4mNQorJGFzX2VjaG8gIiRhY19jdl9oZWFkZXJfc3RkYyIgPiY2OyB9CitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBTVERDX0hFQURFUlMgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKyMgT24gSVJJWCA1LjMsIHN5cy90eXBlcyBhbmQgaW50dHlwZXMuaCBhcmUgY29uZmxpY3RpbmcuCitmb3IgYWNfaGVhZGVyIGluIHN5cy90eXBlcy5oIHN5cy9zdGF0Lmggc3RkbGliLmggc3RyaW5nLmggbWVtb3J5Lmggc3RyaW5ncy5oIFwKKwkJICBpbnR0eXBlcy5oIHN0ZGludC5oIHVuaXN0ZC5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRhY19pbmNsdWRlc19kZWZhdWx0CisiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCisKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgIm1pbml4L2NvbmZpZy5oIiAiYWNfY3ZfaGVhZGVyX21pbml4X2NvbmZpZ19oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9taW5peF9jb25maWdfaCIgPSB4eWVzOyB0aGVuIDoKKyAgTUlOSVg9eWVzCitlbHNlCisgIE1JTklYPQorZmkKKworCisgIGlmIHRlc3QgIiRNSU5JWCIgPSB5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgX1BPU0lYX1NPVVJDRSAxIiA+PmNvbmZkZWZzLmgKKworCiskYXNfZWNobyAiI2RlZmluZSBfUE9TSVhfMV9TT1VSQ0UgMiIgPj5jb25mZGVmcy5oCisKKworJGFzX2VjaG8gIiNkZWZpbmUgX01JTklYIDEiID4+Y29uZmRlZnMuaAorCisgIGZpCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgaXQgaXMgc2FmZSB0byBkZWZpbmUgX19FWFRFTlNJT05TX18iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBpdCBpcyBzYWZlIHRvIGRlZmluZSBfX0VYVEVOU0lPTlNfXy4uLiAiID4mNjsgfQoraWYgJHthY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworIwkgIGRlZmluZSBfX0VYVEVOU0lPTlNfXyAxCisJICAkYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXz15ZXMKK2Vsc2UKKyAgYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX189bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fIiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX18iID4mNjsgfQorICB0ZXN0ICRhY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXyA9IHllcyAmJgorICAgICRhc19lY2hvICIjZGVmaW5lIF9fRVhURU5TSU9OU19fIDEiID4+Y29uZmRlZnMuaAorCisgICRhc19lY2hvICIjZGVmaW5lIF9BTExfU09VUkNFIDEiID4+Y29uZmRlZnMuaAorCisgICRhc19lY2hvICIjZGVmaW5lIF9HTlVfU09VUkNFIDEiID4+Y29uZmRlZnMuaAorCisgICRhc19lY2hvICIjZGVmaW5lIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUyAxIiA+PmNvbmZkZWZzLmgKKworICAkYXNfZWNobyAiI2RlZmluZSBfVEFOREVNX1NPVVJDRSAxIiA+PmNvbmZkZWZzLmgKKworCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yLi4uICIgPiY2OyB9CisjIE9uIFN1bnMsIHNvbWV0aW1lcyAkQ1BQIG5hbWVzIGEgZGlyZWN0b3J5LgoraWYgdGVzdCAtbiAiJENQUCIgJiYgdGVzdCAtZCAiJENQUCI7IHRoZW4KKyAgQ1BQPQorZmkKK2lmIHRlc3QgLXogIiRDUFAiOyB0aGVuCisgIGlmICR7YWNfY3ZfcHJvZ19DUFArOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICAgICAgIyBEb3VibGUgcXVvdGVzIGJlY2F1c2UgQ1BQIG5lZWRzIHRvIGJlIGV4cGFuZGVkCisgICAgZm9yIENQUCBpbiAiJENDIC1FIiAiJENDIC1FIC10cmFkaXRpb25hbC1jcHAiICIvbGliL2NwcCIKKyAgICBkbworICAgICAgYWNfcHJlcHJvY19vaz1mYWxzZQorZm9yIGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4gJycgeWVzCitkbworICAjIFVzZSBhIGhlYWRlciBmaWxlIHRoYXQgY29tZXMgd2l0aCBnY2MsIHNvIGNvbmZpZ3VyaW5nIGdsaWJjCisgICMgd2l0aCBhIGZyZXNoIGNyb3NzLWNvbXBpbGVyIHdvcmtzLgorICAjIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgIyA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuCisgICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCisgICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorCQkgICAgIFN5bnRheCBlcnJvcgorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKworZWxzZQorICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQgaW5wdXQuCitjb250aW51ZQorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKKworICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uZXhpc3RlbnQgaGVhZGVycworICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8YWNfbm9uZXhpc3RlbnQuaD4KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisgICMgQnJva2VuOiBzdWNjZXNzIG9uIGludmFsaWQgaW5wdXQuCitjb250aW51ZQorZWxzZQorICAjIFBhc3NlcyBib3RoIHRlc3RzLgorYWNfcHJlcHJvY19vaz06CiticmVhaworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKKworZG9uZQorIyBCZWNhdXNlIG9mIGBicmVhaycsIF9BQ19QUkVQUk9DX0lGRUxTRSdzIGNsZWFuaW5nIGNvZGUgd2FzIHNraXBwZWQuCitybSAtZiBjb25mdGVzdC5pIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CitpZiAkYWNfcHJlcHJvY19vazsgdGhlbiA6CisgIGJyZWFrCitmaQorCisgICAgZG9uZQorICAgIGFjX2N2X3Byb2dfQ1BQPSRDUFAKKworZmkKKyAgQ1BQPSRhY19jdl9wcm9nX0NQUAorZWxzZQorICBhY19jdl9wcm9nX0NQUD0kQ1BQCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDUFAiID4mNQorJGFzX2VjaG8gIiRDUFAiID4mNjsgfQorYWNfcHJlcHJvY19vaz1mYWxzZQorZm9yIGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4gJycgeWVzCitkbworICAjIFVzZSBhIGhlYWRlciBmaWxlIHRoYXQgY29tZXMgd2l0aCBnY2MsIHNvIGNvbmZpZ3VyaW5nIGdsaWJjCisgICMgd2l0aCBhIGZyZXNoIGNyb3NzLWNvbXBpbGVyIHdvcmtzLgorICAjIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgIyA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuCisgICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCisgICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorCQkgICAgIFN5bnRheCBlcnJvcgorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKworZWxzZQorICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQgaW5wdXQuCitjb250aW51ZQorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKKworICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uZXhpc3RlbnQgaGVhZGVycworICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8YWNfbm9uZXhpc3RlbnQuaD4KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisgICMgQnJva2VuOiBzdWNjZXNzIG9uIGludmFsaWQgaW5wdXQuCitjb250aW51ZQorZWxzZQorICAjIFBhc3NlcyBib3RoIHRlc3RzLgorYWNfcHJlcHJvY19vaz06CiticmVhaworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKKworZG9uZQorIyBCZWNhdXNlIG9mIGBicmVhaycsIF9BQ19QUkVQUk9DX0lGRUxTRSdzIGNsZWFuaW5nIGNvZGUgd2FzIHNraXBwZWQuCitybSAtZiBjb25mdGVzdC5pIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CitpZiAkYWNfcHJlcHJvY19vazsgdGhlbiA6CisKK2Vsc2UKKyAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAiQyBwcmVwcm9jZXNzb3IgXCIkQ1BQXCIgZmFpbHMgc2FuaXR5IGNoZWNrCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorZmkKKworYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBsbiAtcyB3b3JrcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGxuIC1zIHdvcmtzLi4uICIgPiY2OyB9CitMTl9TPSRhc19sbl9zCitpZiB0ZXN0ICIkTE5fUyIgPSAibG4gLXMiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubywgdXNpbmcgJExOX1MiID4mNQorJGFzX2VjaG8gIm5vLCB1c2luZyAkTE5fUyIgPiY2OyB9CitmaQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJHtNQUtFLW1ha2V9IHNldHMgXCQoTUFLRSkiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAke01BS0UtbWFrZX0gc2V0cyBcJChNQUtFKS4uLiAiID4mNjsgfQorc2V0IHggJHtNQUtFLW1ha2V9CithY19tYWtlPWAkYXNfZWNobyAiJDIiIHwgc2VkICdzLysvcC9nOyBzL1teYS16QS1aMC05X10vXy9nJ2AKK2lmIGV2YWwgXCR7YWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC5tYWtlIDw8XF9BQ0VPRgorU0hFTEwgPSAvYmluL3NoCithbGw6CisJQGVjaG8gJ0BAQCUlJT0kKE1BS0UpPUBAQCUlJScKK19BQ0VPRgorIyBHTlUgbWFrZSBzb21ldGltZXMgcHJpbnRzICJtYWtlWzFdOiBFbnRlcmluZyAuLi4iLCB3aGljaCB3b3VsZCBjb25mdXNlIHVzLgorY2FzZSBgJHtNQUtFLW1ha2V9IC1mIGNvbmZ0ZXN0Lm1ha2UgMj4vZGV2L251bGxgIGluCisgICpAQEAlJSU9Pyo9QEBAJSUlKikKKyAgICBldmFsIGFjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldD15ZXM7OworICAqKQorICAgIGV2YWwgYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0PW5vOzsKK2VzYWMKK3JtIC1mIGNvbmZ0ZXN0Lm1ha2UKK2ZpCitpZiBldmFsIHRlc3QgXCRhY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQgPSB5ZXM7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgU0VUX01BS0U9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICBTRVRfTUFLRT0iTUFLRT0ke01BS0UtbWFrZX0iCitmaQorCitpZiB0ZXN0ICRhY19jdl9jX2NvbXBpbGVyX2dudSA9IHllczsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkQ0MgbmVlZHMgLXRyYWRpdGlvbmFsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJENDIG5lZWRzIC10cmFkaXRpb25hbC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2djY190cmFkaXRpb25hbCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgICAgYWNfcGF0dGVybj0iQXV0b2NvbmYuKid4JyIKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHNndHR5Lmg+CitBdXRvY29uZiBUSU9DR0VUUAorX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAiJGFjX3BhdHRlcm4iID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgIGFjX2N2X3Byb2dfZ2NjX3RyYWRpdGlvbmFsPXllcworZWxzZQorICBhY19jdl9wcm9nX2djY190cmFkaXRpb25hbD1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisKKyAgaWYgdGVzdCAkYWNfY3ZfcHJvZ19nY2NfdHJhZGl0aW9uYWwgPSBubzsgdGhlbgorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDx0ZXJtaW8uaD4KK0F1dG9jb25mIFRDR0VUQQorX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAiJGFjX3BhdHRlcm4iID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgIGFjX2N2X3Byb2dfZ2NjX3RyYWRpdGlvbmFsPXllcworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisgIGZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wcm9nX2djY190cmFkaXRpb25hbCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3Byb2dfZ2NjX3RyYWRpdGlvbmFsIiA+JjY7IH0KKyAgaWYgdGVzdCAkYWNfY3ZfcHJvZ19nY2NfdHJhZGl0aW9uYWwgPSB5ZXM7IHRoZW4KKyAgICBDQz0iJENDIC10cmFkaXRpb25hbCIKKyAgZmkKK2ZpCisKKworIyAtZnN0YWNrLXByb3RlY3RvcgorIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXN0YWNrLXByb3RlY3RvciB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9zdGFja19wcm90ZWN0b3Irc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9zdGFja19wcm90ZWN0b3I7IGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKyAgICAgICAgIHllcykgZW5hYmxlX3NzcD15ZXMgOzsKKyAgICAgICAgICBubykgZW5hYmxlX3NzcD1ubyA7OworICAgICAgICAgICAqKSBhc19mbl9lcnJvciAkPyAiaW52YWxpZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZGlzYWJsZS1zdGFjay1wcm90ZWN0b3IiICIkTElORU5PIiA1IDs7CisgICAgIGVzYWMKK2Vsc2UKKyAgZW5hYmxlX3NzcD15ZXMKK2ZpCisKKworaWYgdGVzdCB4IiRlbmFibGVfc3NwIiA9IHgieWVzIiAmJiB0ZXN0IHgiJEdDQyIgIT0geCJ5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBEaXNhYmxpbmcgc3RhY2stc21hc2hpbmcgcHJvdGVjdGlvbiBiZWNhdXNlIGNvbXBpbGVyIGlzIG5vdCBHQ0MiID4mNQorJGFzX2VjaG8gIiRhc19tZTogRGlzYWJsaW5nIHN0YWNrLXNtYXNoaW5nIHByb3RlY3Rpb24gYmVjYXVzZSBjb21waWxlciBpcyBub3QgR0NDIiA+JjY7fQorICAgIGVuYWJsZV9zc3A9bm8KK2ZpCisKK2lmIHRlc3QgeCIkZW5hYmxlX3NzcCIgPSB4InllcyI7IHRoZW4KKyAgICAjIENoZWNrIGZvciBicm9rZW4gc3NwIGluIGxpYmM6IGh0dHA6Ly93d3cuYXZhaGkub3JnL3RpY2tldC8xMDUKKyAgICAjIGxpYmMncyBicm9rZW5uZXNzIHdpbGwgZ2V0IGluIHRoZSB3YXkgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIC1sc3NwIGlzCisgICAgIyBwcm92aWRlZCwgYnV0IHByb3ZpZGUgaXQgYW55d2F5IChvdGhlcndpc2Ugbm9uLWxpYmMgc3NwIHdvdWxkIHdyb25nbHkKKyAgICAjIGJyZWFrIGhlcmUpCisKKyAgICAjIEdldCAtbHNzcCBpZiBpdCBleGlzdHMKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgbGlic3NwIGV4aXN0cyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGxpYnNzcCBleGlzdHMuLi4gIiA+JjY7IH0KK2lmICR7c3NwX2N2X2xpYis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIHNzcF9vbGRfbGlicz0iJExJQlMiCisgICAgIExJQlM9IiRMSUJTIC1sc3NwIgorICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgc3NwX2N2X2xpYj15ZXMKK2Vsc2UKKyAgc3NwX2N2X2xpYj1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgIExJQlM9IiRzc3Bfb2xkX2xpYnMiCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHNzcF9jdl9saWIiID4mNQorJGFzX2VjaG8gIiRzc3BfY3ZfbGliIiA+JjY7IH0KKyAgaWYgdGVzdCAkc3NwX2N2X2xpYiA9IHllczsgdGhlbgorICAgIExJQlM9IiRMSUJTIC1sc3NwIgorICBmaQorCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgc3RhY2stc21hc2hpbmcgcHJvdGVjdGlvbiBpcyBhdmFpbGFibGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBzdGFjay1zbWFzaGluZyBwcm90ZWN0aW9uIGlzIGF2YWlsYWJsZS4uLiAiID4mNjsgfQorICAgIHNzcF9vbGRfY2ZsYWdzPSIkQ0ZMQUdTIgorICAgIHNzcF9vbGRfbGRmbGFncz0iJExERkxBR1MiCisgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1XZXJyb3IgLWZzdGFjay1wcm90ZWN0b3ItYWxsIC1mUElDIgorICAgIExERkxBR1M9IiRMREZMQUdTIC1XbCwteixkZWZzIgorICAgIGNhdCBjb25mZGVmcy5oID4gY29uZnRlc3QuYworICAgIGNhdCA+PmNvbmZ0ZXN0LmMgPDxfQUNFT0YKK3ZvaWQgdGVzdF9icm9rZW5fc3NwKGMpCisgICAgY29uc3QgY2hhciAqYzsKK3sKKyAgICBjaGFyIGFyclsxMjNdLCAqcDsgLyogYmV3YXJlIG9mIHBvc3NpYmxlIGRvdWJsZS1icmFjZXMgaWYgY29weWluZyB0aGlzICovCisgICAgZm9yIChwID0gYXJyOyAqYzsgKytwKSB7CisgICAgICAgICpwID0gKmM7CisgICAgICAgICsrYzsKKyAgICB9Cit9CitfQUNFT0YKKyAgICBybSAtZiBjb25mdGVzdC5vCisKKyAgICBpZiAkQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgLW8gY29uZnRlc3QubyBjb25mdGVzdC5jID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgc3RhY2stc21hc2hpbmcgcHJvdGVjdGlvbiBpcyBidWdneSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHN0YWNrLXNtYXNoaW5nIHByb3RlY3Rpb24gaXMgYnVnZ3kuLi4gIiA+JjY7IH0KKyAgICAgICAgaWYgJENDIC1vIGNvbmZ0ZXN0LnNvICRMREZMQUdTIC1zaGFyZWQgY29uZnRlc3QubyAkTElCUyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgICAgICAgZW5hYmxlX3NzcD1ubworICAgICAgICBmaQorICAgIGVsc2UKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgZmkKKworICAgIHJtIC1mIGNvbmZ0ZXN0LmMgY29uZnRlc3QubyBjb25mdGVzdC5zbworCisgICAgQ0ZMQUdTPSIkc3NwX29sZF9jZmxhZ3MiCisgICAgTERGTEFHUz0iJHNzcF9vbGRfbGRmbGFncyIKK2ZpCisKK2lmIHRlc3QgeCIkZW5hYmxlX3NzcCIgPSB4InllcyI7IHRoZW4KKyAgICAjIERvIHRoaXMgdGhlIGxvbmcgd2F5IHNvIHdlIGRvbid0IGNhbGwgR0NDX1NUQUNLX1BST1RFQ1RfTElCIHR3aWNlCisKKworICBpZiB0ZXN0ICJYJENDIiAhPSAiWCI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJHtDQ30gYWNjZXB0cyAtZnN0YWNrLXByb3RlY3RvciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICR7Q0N9IGFjY2VwdHMgLWZzdGFjay1wcm90ZWN0b3IuLi4gIiA+JjY7IH0KK2lmICR7c3NwX2N2X2NjKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgc3NwX29sZF9jZmxhZ3M9IiRDRkxBR1MiCisgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1mc3RhY2stcHJvdGVjdG9yIC1XZXJyb3IiCisgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIHNzcF9jdl9jYz15ZXMKK2Vsc2UKKyAgc3NwX2N2X2NjPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgQ0ZMQUdTPSIkc3NwX29sZF9jZmxhZ3MiCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHNzcF9jdl9jYyIgPiY1CiskYXNfZWNobyAiJHNzcF9jdl9jYyIgPiY2OyB9CisgICAgaWYgdGVzdCAkc3NwX2N2X2NjID0geWVzOyB0aGVuCisgICAgICBDRkxBR1M9IiRDRkxBR1MgLWZzdGFjay1wcm90ZWN0b3IiCisKKyRhc19lY2hvICIjZGVmaW5lIEVOQUJMRV9TU1BfQ0MgMSIgPj5jb25mZGVmcy5oCisKKyAgICBmaQorICBmaQorCisKKyAgICBhY19leHQ9Y3BwCithY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQorCisKKworCisgIGlmIHRlc3QgIlgkQ1hYIiAhPSAiWCI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJHtDWFh9IGFjY2VwdHMgLWZzdGFjay1wcm90ZWN0b3IiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAke0NYWH0gYWNjZXB0cyAtZnN0YWNrLXByb3RlY3Rvci4uLiAiID4mNjsgfQoraWYgJHtzc3BfY3ZfY3h4Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgc3NwX29sZF9jeHhmbGFncz0iJENYWEZMQUdTIgorICAgICAgIENYWEZMQUdTPSIkQ1hYRkxBR1MgLWZzdGFjay1wcm90ZWN0b3IgLVdlcnJvciIKKyAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBzc3BfY3ZfY3h4PXllcworZWxzZQorICBzc3BfY3ZfY3h4PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgQ1hYRkxBR1M9IiRzc3Bfb2xkX2N4eGZsYWdzIgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRzc3BfY3ZfY3h4IiA+JjUKKyRhc19lY2hvICIkc3NwX2N2X2N4eCIgPiY2OyB9CisgICAgaWYgdGVzdCAkc3NwX2N2X2N4eCA9IHllczsgdGhlbgorICAgICAgQ1hYRkxBR1M9IiRDWFhGTEFHUyAtZnN0YWNrLXByb3RlY3RvciIKKworJGFzX2VjaG8gIiNkZWZpbmUgRU5BQkxFX1NTUF9DWFggMSIgPj5jb25mZGVmcy5oCisKKyAgICBmaQorICBmaQorCisgICAgYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCisgICAgIyBYWFg6IFVwZGF0ZSB0aGUgZW5hYmxlX3NzcCB2YWx1ZSBub3cgZm9yIG91dHB1dCBsYXRlcj8KK2ZpCisKKyMgbGlidG9vbCBzdHVmZgorY2FzZSBgcHdkYCBpbgorICAqXCAqIHwgKlwJKikKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IExpYnRvb2wgZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggd2hpdGVzcGFjZSBpbiBcYHB3ZFxgIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IExpYnRvb2wgZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggd2hpdGVzcGFjZSBpbiBcYHB3ZFxgIiA+JjI7fSA7OworZXNhYworCisKKworbWFjcm9fdmVyc2lvbj0nMi40LjInCittYWNyb19yZXZpc2lvbj0nMS4zMzM3JworCisKKworCisKKworCisKKworCisKKworCitsdG1haW49IiRhY19hdXhfZGlyL2x0bWFpbi5zaCIKKworIyBCYWNrc2xhc2hpZnkgbWV0YWNoYXJhY3RlcnMgdGhhdCBhcmUgc3RpbGwgYWN0aXZlIHdpdGhpbgorIyBkb3VibGUtcXVvdGVkIHN0cmluZ3MuCitzZWRfcXVvdGVfc3Vic3Q9J3MvXChbImAkXFxdXCkvXFxcMS9nJworCisjIFNhbWUgYXMgYWJvdmUsIGJ1dCBkbyBub3QgcXVvdGUgdmFyaWFibGUgcmVmZXJlbmNlcy4KK2RvdWJsZV9xdW90ZV9zdWJzdD0ncy9cKFsiYFxcXVwpL1xcXDEvZycKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGRlbGF5IGV4cGFuc2lvbiBvZiBhbiBlc2NhcGVkIHNoZWxsIHZhcmlhYmxlIGluIGEKKyMgZG91YmxlX3F1b3RlX3N1YnN0J2VkIHN0cmluZy4KK2RlbGF5X3ZhcmlhYmxlX3N1YnN0PSdzL1xcXFxcXFxcXFxcJC9cXFxcXFwkL2cnCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0byBkZWxheSBleHBhbnNpb24gb2YgYW4gZXNjYXBlZCBzaW5nbGUgcXVvdGUuCitkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3Q9J3MvJ1wnJy8nXCdcXFxcXFxcJ1wnJy9nJworCisjIFNlZCBzdWJzdGl0dXRpb24gdG8gYXZvaWQgYWNjaWRlbnRhbCBnbG9iYmluZyBpbiBldmFsZWQgZXhwcmVzc2lvbnMKK25vX2dsb2Jfc3Vic3Q9J3MvXCovXFxcKi9nJworCitFQ0hPPSdcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcJworRUNITz0kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCitFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBwcmludCBzdHJpbmdzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBwcmludCBzdHJpbmdzLi4uICIgPiY2OyB9CisjIFRlc3QgcHJpbnQgZmlyc3QsIGJlY2F1c2UgaXQgd2lsbCBiZSBhIGJ1aWx0aW4gaWYgcHJlc2VudC4KK2lmIHRlc3QgIlhgKCBwcmludCAtciAtLSAtbiApIDI+L2Rldi9udWxsYCIgPSBYLW4gJiYgXAorICAgdGVzdCAiWGBwcmludCAtciAtLSAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KKyAgRUNITz0ncHJpbnQgLXIgLS0nCitlbGlmIHRlc3QgIlhgcHJpbnRmICVzICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgorICBFQ0hPPSdwcmludGYgJXNcbicKK2Vsc2UKKyAgIyBVc2UgdGhpcyBmdW5jdGlvbiBhcyBhIGZhbGxiYWNrIHRoYXQgYWx3YXlzIHdvcmtzLgorICBmdW5jX2ZhbGxiYWNrX2VjaG8gKCkKKyAgeworICAgIGV2YWwgJ2NhdCA8PF9MVEVDSE9fRU9GCiskMQorX0xURUNIT19FT0YnCisgIH0KKyAgRUNITz0nZnVuY19mYWxsYmFja19lY2hvJworZmkKKworIyBmdW5jX2VjaG9fYWxsIGFyZy4uLgorIyBJbnZva2UgJEVDSE8gd2l0aCBhbGwgYXJncywgc3BhY2Utc2VwYXJhdGVkLgorZnVuY19lY2hvX2FsbCAoKQoreworICAgICRFQ0hPICIiCit9CisKK2Nhc2UgIiRFQ0hPIiBpbgorICBwcmludGYqKSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogcHJpbnRmIiA+JjUKKyRhc19lY2hvICJwcmludGYiID4mNjsgfSA7OworICBwcmludCopIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBwcmludCAtciIgPiY1CiskYXNfZWNobyAicHJpbnQgLXIiID4mNjsgfSA7OworICAqKSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogY2F0IiA+JjUKKyRhc19lY2hvICJjYXQiID4mNjsgfSA7OworZXNhYworCisKKworCisKKworCisKKworCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGEgc2VkIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhIHNlZCB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX1NFRCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgICAgICAgICAgICBhY19zY3JpcHQ9cy9hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYS9iYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIvCisgICAgIGZvciBhY19pIGluIDEgMiAzIDQgNSA2IDc7IGRvCisgICAgICAgYWNfc2NyaXB0PSIkYWNfc2NyaXB0JGFzX25sJGFjX3NjcmlwdCIKKyAgICAgZG9uZQorICAgICBlY2hvICIkYWNfc2NyaXB0IiAyPi9kZXYvbnVsbCB8IHNlZCA5OXEgPmNvbmZ0ZXN0LnNlZAorICAgICB7IGFjX3NjcmlwdD07IHVuc2V0IGFjX3NjcmlwdDt9CisgICAgIGlmIHRlc3QgLXogIiRTRUQiOyB0aGVuCisgIGFjX3BhdGhfU0VEX2ZvdW5kPWZhbHNlCisgICMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3IgZWFjaCBvZiBQUk9HTkFNRS1MSVNUCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfcHJvZyBpbiBzZWQgZ3NlZDsgZG8KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgICAgIGFjX3BhdGhfU0VEPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IgorICAgICAgeyB0ZXN0IC1mICIkYWNfcGF0aF9TRUQiICYmICRhc190ZXN0X3ggIiRhY19wYXRoX1NFRCI7IH0gfHwgY29udGludWUKKyMgQ2hlY2sgZm9yIEdOVSBhY19wYXRoX1NFRCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgorICAjIENoZWNrIGZvciBHTlUgJGFjX3BhdGhfU0VECitjYXNlIGAiJGFjX3BhdGhfU0VEIiAtLXZlcnNpb24gMj4mMWAgaW4KKypHTlUqKQorICBhY19jdl9wYXRoX1NFRD0iJGFjX3BhdGhfU0VEIiBhY19wYXRoX1NFRF9mb3VuZD06OzsKKyopCisgIGFjX2NvdW50PTAKKyAgJGFzX2VjaG9fbiAwMTIzNDU2Nzg5ID4iY29uZnRlc3QuaW4iCisgIHdoaWxlIDoKKyAgZG8KKyAgICBjYXQgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QuaW4iID4iY29uZnRlc3QudG1wIgorICAgIG12ICJjb25mdGVzdC50bXAiICJjb25mdGVzdC5pbiIKKyAgICBjcCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5ubCIKKyAgICAkYXNfZWNobyAnJyA+PiAiY29uZnRlc3QubmwiCisgICAgIiRhY19wYXRoX1NFRCIgLWYgY29uZnRlc3Quc2VkIDwgImNvbmZ0ZXN0Lm5sIiA+ImNvbmZ0ZXN0Lm91dCIgMj4vZGV2L251bGwgfHwgYnJlYWsKKyAgICBkaWZmICJjb25mdGVzdC5vdXQiICJjb25mdGVzdC5ubCIgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFrCisgICAgYXNfZm5fYXJpdGggJGFjX2NvdW50ICsgMSAmJiBhY19jb3VudD0kYXNfdmFsCisgICAgaWYgdGVzdCAkYWNfY291bnQgLWd0ICR7YWNfcGF0aF9TRURfbWF4LTB9OyB0aGVuCisgICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKKyAgICAgIGFjX2N2X3BhdGhfU0VEPSIkYWNfcGF0aF9TRUQiCisgICAgICBhY19wYXRoX1NFRF9tYXg9JGFjX2NvdW50CisgICAgZmkKKyAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCisgICAgdGVzdCAkYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCisgIGRvbmUKKyAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7Citlc2FjCisKKyAgICAgICRhY19wYXRoX1NFRF9mb3VuZCAmJiBicmVhayAzCisgICAgZG9uZQorICBkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKyAgaWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfU0VEIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIHNlZCBjb3VsZCBiZSBmb3VuZCBpbiBcJFBBVEgiICIkTElORU5PIiA1CisgIGZpCitlbHNlCisgIGFjX2N2X3BhdGhfU0VEPSRTRUQKK2ZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3BhdGhfU0VEIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcGF0aF9TRUQiID4mNjsgfQorIFNFRD0iJGFjX2N2X3BhdGhfU0VEIgorICBybSAtZiBjb25mdGVzdC5zZWQKKwordGVzdCAteiAiJFNFRCIgJiYgU0VEPXNlZAorWHNlZD0iJFNFRCAtZSAxcy9eWC8vIgorCisKKworCisKKworCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGZncmVwIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBmZ3JlcC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX0ZHUkVQKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgZWNobyAnYWIqYycgfCAkR1JFUCAtRiAnYWIqYycgPi9kZXYvbnVsbCAyPiYxCisgICB0aGVuIGFjX2N2X3BhdGhfRkdSRVA9IiRHUkVQIC1GIgorICAgZWxzZQorICAgICBpZiB0ZXN0IC16ICIkRkdSRVAiOyB0aGVuCisgIGFjX3BhdGhfRkdSRVBfZm91bmQ9ZmFsc2UKKyAgIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBlYWNoIG9mIFBST0dOQU1FLUxJU1QKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4KK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfcHJvZyBpbiBmZ3JlcDsgZG8KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgICAgIGFjX3BhdGhfRkdSRVA9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCisgICAgICB7IHRlc3QgLWYgIiRhY19wYXRoX0ZHUkVQIiAmJiAkYXNfdGVzdF94ICIkYWNfcGF0aF9GR1JFUCI7IH0gfHwgY29udGludWUKKyMgQ2hlY2sgZm9yIEdOVSBhY19wYXRoX0ZHUkVQIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCisgICMgQ2hlY2sgZm9yIEdOVSAkYWNfcGF0aF9GR1JFUAorY2FzZSBgIiRhY19wYXRoX0ZHUkVQIiAtLXZlcnNpb24gMj4mMWAgaW4KKypHTlUqKQorICBhY19jdl9wYXRoX0ZHUkVQPSIkYWNfcGF0aF9GR1JFUCIgYWNfcGF0aF9GR1JFUF9mb3VuZD06OzsKKyopCisgIGFjX2NvdW50PTAKKyAgJGFzX2VjaG9fbiAwMTIzNDU2Nzg5ID4iY29uZnRlc3QuaW4iCisgIHdoaWxlIDoKKyAgZG8KKyAgICBjYXQgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QuaW4iID4iY29uZnRlc3QudG1wIgorICAgIG12ICJjb25mdGVzdC50bXAiICJjb25mdGVzdC5pbiIKKyAgICBjcCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5ubCIKKyAgICAkYXNfZWNobyAnRkdSRVAnID4+ICJjb25mdGVzdC5ubCIKKyAgICAiJGFjX3BhdGhfRkdSRVAiIEZHUkVQIDwgImNvbmZ0ZXN0Lm5sIiA+ImNvbmZ0ZXN0Lm91dCIgMj4vZGV2L251bGwgfHwgYnJlYWsKKyAgICBkaWZmICJjb25mdGVzdC5vdXQiICJjb25mdGVzdC5ubCIgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFrCisgICAgYXNfZm5fYXJpdGggJGFjX2NvdW50ICsgMSAmJiBhY19jb3VudD0kYXNfdmFsCisgICAgaWYgdGVzdCAkYWNfY291bnQgLWd0ICR7YWNfcGF0aF9GR1JFUF9tYXgtMH07IHRoZW4KKyAgICAgICMgQmVzdCBvbmUgc28gZmFyLCBzYXZlIGl0IGJ1dCBrZWVwIGxvb2tpbmcgZm9yIGEgYmV0dGVyIG9uZQorICAgICAgYWNfY3ZfcGF0aF9GR1JFUD0iJGFjX3BhdGhfRkdSRVAiCisgICAgICBhY19wYXRoX0ZHUkVQX21heD0kYWNfY291bnQKKyAgICBmaQorICAgICMgMTAqKDJeMTApIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKKyAgICB0ZXN0ICRhY19jb3VudCAtZ3QgMTAgJiYgYnJlYWsKKyAgZG9uZQorICBybSAtZiBjb25mdGVzdC5pbiBjb25mdGVzdC50bXAgY29uZnRlc3QubmwgY29uZnRlc3Qub3V0OzsKK2VzYWMKKworICAgICAgJGFjX3BhdGhfRkdSRVBfZm91bmQgJiYgYnJlYWsgMworICAgIGRvbmUKKyAgZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisgIGlmIHRlc3QgLXogIiRhY19jdl9wYXRoX0ZHUkVQIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIGZncmVwIGNvdWxkIGJlIGZvdW5kIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbiIgIiRMSU5FTk8iIDUKKyAgZmkKK2Vsc2UKKyAgYWNfY3ZfcGF0aF9GR1JFUD0kRkdSRVAKK2ZpCisKKyAgIGZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wYXRoX0ZHUkVQIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcGF0aF9GR1JFUCIgPiY2OyB9CisgRkdSRVA9IiRhY19jdl9wYXRoX0ZHUkVQIgorCisKK3Rlc3QgLXogIiRHUkVQIiAmJiBHUkVQPWdyZXAKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1nbnUtbGQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2dudV9sZCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfZ251X2xkOyB0ZXN0ICIkd2l0aHZhbCIgPSBubyB8fCB3aXRoX2dudV9sZD15ZXMKK2Vsc2UKKyAgd2l0aF9nbnVfbGQ9bm8KK2ZpCisKK2FjX3Byb2c9bGQKK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICMgQ2hlY2sgaWYgZ2NjIC1wcmludC1wcm9nLW5hbWU9bGQgZ2l2ZXMgYSBwYXRoLgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsZCB1c2VkIGJ5ICRDQyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGQgdXNlZCBieSAkQ0MuLi4gIiA+JjY7IH0KKyAgY2FzZSAkaG9zdCBpbgorICAqLSotbWluZ3cqKQorICAgICMgZ2NjIGxlYXZlcyBhIHRyYWlsaW5nIGNhcnJpYWdlIHJldHVybiB3aGljaCB1cHNldHMgbWluZ3cKKyAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjUgfCB0ciAtZCAnXDAxNSdgIDs7CisgICopCisgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1YCA7OworICBlc2FjCisgIGNhc2UgJGFjX3Byb2cgaW4KKyAgICAjIEFjY2VwdCBhYnNvbHV0ZSBwYXRocy4KKyAgICBbXFwvXSogfCA/OltcXC9dKikKKyAgICAgIHJlX2RpcmVsdD0nL1teL11bXi9dKi9cLlwuLycKKyAgICAgICMgQ2Fub25pY2FsaXplIHRoZSBwYXRobmFtZSBvZiBsZAorICAgICAgYWNfcHJvZz1gJEVDSE8gIiRhY19wcm9nInwgJFNFRCAncyVcXFxcJS8lZydgCisgICAgICB3aGlsZSAkRUNITyAiJGFjX3Byb2ciIHwgJEdSRVAgIiRyZV9kaXJlbHQiID4gL2Rldi9udWxsIDI+JjE7IGRvCisJYWNfcHJvZz1gJEVDSE8gJGFjX3Byb2d8ICRTRUQgInMlJHJlX2RpcmVsdCUvJSJgCisgICAgICBkb25lCisgICAgICB0ZXN0IC16ICIkTEQiICYmIExEPSIkYWNfcHJvZyIKKyAgICAgIDs7CisgICIiKQorICAgICMgSWYgaXQgZmFpbHMsIHRoZW4gcHJldGVuZCB3ZSBhcmVuJ3QgdXNpbmcgR0NDLgorICAgIGFjX3Byb2c9bGQKKyAgICA7OworICAqKQorICAgICMgSWYgaXQgaXMgcmVsYXRpdmUsIHRoZW4gc2VhcmNoIGZvciB0aGUgZmlyc3QgbGQgaW4gUEFUSC4KKyAgICB3aXRoX2dudV9sZD11bmtub3duCisgICAgOzsKKyAgZXNhYworZWxpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEdOVSBsZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgR05VIGxkLi4uICIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQuLi4gIiA+JjY7IH0KK2ZpCitpZiAke2x0X2N2X3BhdGhfTEQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC16ICIkTEQiOyB0aGVuCisgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICBmb3IgYWNfZGlyIGluICRQQVRIOyBkbworICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgaWYgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyIgfHwgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyRhY19leGVleHQiOyB0aGVuCisgICAgICBsdF9jdl9wYXRoX0xEPSIkYWNfZGlyLyRhY19wcm9nIgorICAgICAgIyBDaGVjayB0byBzZWUgaWYgdGhlIHByb2dyYW0gaXMgR05VIGxkLiAgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uLAorICAgICAgIyBidXQgYXBwYXJlbnRseSBzb21lIHZhcmlhbnRzIG9mIEdOVSBsZCBvbmx5IGFjY2VwdCAtdi4KKyAgICAgICMgQnJlYWsgb25seSBpZiBpdCB3YXMgdGhlIEdOVS9ub24tR05VIGxkIHRoYXQgd2UgcHJlZmVyLgorICAgICAgY2FzZSBgIiRsdF9jdl9wYXRoX0xEIiAtdiAyPiYxIDwvZGV2L251bGxgIGluCisgICAgICAqR05VKiB8ICond2l0aCBCRkQnKikKKwl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IG5vICYmIGJyZWFrCisJOzsKKyAgICAgICopCisJdGVzdCAiJHdpdGhfZ251X2xkIiAhPSB5ZXMgJiYgYnJlYWsKKwk7OworICAgICAgZXNhYworICAgIGZpCisgIGRvbmUKKyAgSUZTPSIkbHRfc2F2ZV9pZnMiCitlbHNlCisgIGx0X2N2X3BhdGhfTEQ9IiRMRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCitmaQorZmkKKworTEQ9IiRsdF9jdl9wYXRoX0xEIgoraWYgdGVzdCAtbiAiJExEIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJExEIiA+JjUKKyRhc19lY2hvICIkTEQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCit0ZXN0IC16ICIkTEQiICYmIGFzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIGxkIGZvdW5kIGluIFwkUEFUSCIgIiRMSU5FTk8iIDUKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfcHJvZ19nbnVfbGQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICAjIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiBoZXJlLCBidXQgYXBwYXJlbnRseSBzb21lIEdOVSBsZHMgb25seSBhY2NlcHQgLXYuCitjYXNlIGAkTEQgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgorKkdOVSogfCAqJ3dpdGggQkZEJyopCisgIGx0X2N2X3Byb2dfZ251X2xkPXllcworICA7OworKikKKyAgbHRfY3ZfcHJvZ19nbnVfbGQ9bm8KKyAgOzsKK2VzYWMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfZ251X2xkIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19nbnVfbGQiID4mNjsgfQord2l0aF9nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkCisKKworCisKKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBCU0QtIG9yIE1TLWNvbXBhdGlibGUgbmFtZSBsaXN0ZXIgKG5tKSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgQlNELSBvciBNUy1jb21wYXRpYmxlIG5hbWUgbGlzdGVyIChubSkuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfcGF0aF9OTSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiROTSI7IHRoZW4KKyAgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisgIGx0X2N2X3BhdGhfTk09IiROTSIKK2Vsc2UKKyAgbHRfbm1fdG9fY2hlY2s9IiR7YWNfdG9vbF9wcmVmaXh9bm0iCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCIgJiYgdGVzdCAiJGJ1aWxkIiA9ICIkaG9zdCI7IHRoZW4KKyAgICBsdF9ubV90b19jaGVjaz0iJGx0X25tX3RvX2NoZWNrIG5tIgorICBmaQorICBmb3IgbHRfdG1wX25tIGluICRsdF9ubV90b19jaGVjazsgZG8KKyAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgICBmb3IgYWNfZGlyIGluICRQQVRIIC91c3IvY2NzL2Jpbi9lbGYgL3Vzci9jY3MvYmluIC91c3IvdWNiIC9iaW47IGRvCisgICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgICB0bXBfbm09IiRhY19kaXIvJGx0X3RtcF9ubSIKKyAgICAgIGlmIHRlc3QgLWYgIiR0bXBfbm0iIHx8IHRlc3QgLWYgIiR0bXBfbm0kYWNfZXhlZXh0IiA7IHRoZW4KKwkjIENoZWNrIHRvIHNlZSBpZiB0aGUgbm0gYWNjZXB0cyBhIEJTRC1jb21wYXQgZmxhZy4KKwkjIEFkZGluZyB0aGUgYHNlZCAxcScgcHJldmVudHMgZmFsc2UgcG9zaXRpdmVzIG9uIEhQLVVYLCB3aGljaCBzYXlzOgorCSMgICBubTogdW5rbm93biBvcHRpb24gIkIiIGlnbm9yZWQKKwkjIFRydTY0J3Mgbm0gY29tcGxhaW5zIHRoYXQgL2Rldi9udWxsIGlzIGFuIGludmFsaWQgb2JqZWN0IGZpbGUKKwljYXNlIGAiJHRtcF9ubSIgLUIgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KKwkqL2Rldi9udWxsKiB8IConSW52YWxpZCBmaWxlIG9yIG9iamVjdCB0eXBlJyopCisJICBsdF9jdl9wYXRoX05NPSIkdG1wX25tIC1CIgorCSAgYnJlYWsKKwkgIDs7CisJKikKKwkgIGNhc2UgYCIkdG1wX25tIiAtcCAvZGV2L251bGwgMj4mMSB8IHNlZCAnMXEnYCBpbgorCSAgKi9kZXYvbnVsbCopCisJICAgIGx0X2N2X3BhdGhfTk09IiR0bXBfbm0gLXAiCisJICAgIGJyZWFrCisJICAgIDs7CisJICAqKQorCSAgICBsdF9jdl9wYXRoX05NPSR7bHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSJ9ICMga2VlcCB0aGUgZmlyc3QgbWF0Y2gsIGJ1dAorCSAgICBjb250aW51ZSAjIHNvIHRoYXQgd2UgY2FuIHRyeSB0byBmaW5kIG9uZSB0aGF0IHN1cHBvcnRzIEJTRCBmbGFncworCSAgICA7OworCSAgZXNhYworCSAgOzsKKwllc2FjCisgICAgICBmaQorICAgIGRvbmUKKyAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgZG9uZQorICA6ICR7bHRfY3ZfcGF0aF9OTT1ub30KK2ZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wYXRoX05NIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcGF0aF9OTSIgPiY2OyB9CitpZiB0ZXN0ICIkbHRfY3ZfcGF0aF9OTSIgIT0gIm5vIjsgdGhlbgorICBOTT0iJGx0X2N2X3BhdGhfTk0iCitlbHNlCisgICMgRGlkbid0IGZpbmQgYW55IEJTRCBjb21wYXRpYmxlIG5hbWUgbGlzdGVyLCBsb29rIGZvciBkdW1wYmluLgorICBpZiB0ZXN0IC1uICIkRFVNUEJJTiI7IHRoZW4gOgorICAgICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorICBlbHNlCisgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICBmb3IgYWNfcHJvZyBpbiBkdW1wYmluICJsaW5rIC1kdW1wIgorICBkbworICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19EVU1QQklOKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJERVTVBCSU4iOyB0aGVuCisgIGFjX2N2X3Byb2dfRFVNUEJJTj0iJERVTVBCSU4iICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19EVU1QQklOPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitEVU1QQklOPSRhY19jdl9wcm9nX0RVTVBCSU4KK2lmIHRlc3QgLW4gIiREVU1QQklOIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJERVTVBCSU4iID4mNQorJGFzX2VjaG8gIiREVU1QQklOIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgICB0ZXN0IC1uICIkRFVNUEJJTiIgJiYgYnJlYWsKKyAgZG9uZQorZmkKK2lmIHRlc3QgLXogIiREVU1QQklOIjsgdGhlbgorICBhY19jdF9EVU1QQklOPSREVU1QQklOCisgIGZvciBhY19wcm9nIGluIGR1bXBiaW4gImxpbmsgLWR1bXAiCitkbworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfRFVNUEJJTis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9EVU1QQklOIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0RVTVBCSU49IiRhY19jdF9EVU1QQklOIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfRFVNUEJJTj0iJGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfRFVNUEJJTj0kYWNfY3ZfcHJvZ19hY19jdF9EVU1QQklOCitpZiB0ZXN0IC1uICIkYWNfY3RfRFVNUEJJTiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9EVU1QQklOIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfRFVNUEJJTiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgIHRlc3QgLW4gIiRhY19jdF9EVU1QQklOIiAmJiBicmVhaworZG9uZQorCisgIGlmIHRlc3QgIngkYWNfY3RfRFVNUEJJTiIgPSB4OyB0aGVuCisgICAgRFVNUEJJTj0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBEVU1QQklOPSRhY19jdF9EVU1QQklOCisgIGZpCitmaQorCisgICAgY2FzZSBgJERVTVBCSU4gLXN5bWJvbHMgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KKyAgICAqQ09GRiopCisgICAgICBEVU1QQklOPSIkRFVNUEJJTiAtc3ltYm9scyIKKyAgICAgIDs7CisgICAgKikKKyAgICAgIERVTVBCSU49OgorICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisKKyAgaWYgdGVzdCAiJERVTVBCSU4iICE9ICI6IjsgdGhlbgorICAgIE5NPSIkRFVNUEJJTiIKKyAgZmkKK2ZpCit0ZXN0IC16ICIkTk0iICYmIE5NPW5tCisKKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHRoZSBuYW1lIGxpc3RlciAoJE5NKSBpbnRlcmZhY2UiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgdGhlIG5hbWUgbGlzdGVyICgkTk0pIGludGVyZmFjZS4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9ubV9pbnRlcmZhY2UrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9ubV9pbnRlcmZhY2U9IkJTRCBubSIKKyAgZWNobyAiaW50IHNvbWVfdmFyaWFibGUgPSAwOyIgPiBjb25mdGVzdC4kYWNfZXh0CisgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkYWNfY29tcGlsZVwiIiA+JjUpCisgIChldmFsICIkYWNfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkTk0gXFxcImNvbmZ0ZXN0LiRhY19vYmpleHRcXFwiXCIiID4mNSkKKyAgKGV2YWwgIiROTSBcImNvbmZ0ZXN0LiRhY19vYmpleHRcIiIgMj5jb25mdGVzdC5lcnIgPiBjb25mdGVzdC5vdXQpCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiBvdXRwdXRcIiIgPiY1KQorICBjYXQgY29uZnRlc3Qub3V0ID4mNQorICBpZiAkR1JFUCAnRXh0ZXJuYWwuKnNvbWVfdmFyaWFibGUnIGNvbmZ0ZXN0Lm91dCA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGx0X2N2X25tX2ludGVyZmFjZT0iTVMgZHVtcGJpbiIKKyAgZmkKKyAgcm0gLWYgY29uZnRlc3QqCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9ubV9pbnRlcmZhY2UiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9ubV9pbnRlcmZhY2UiID4mNjsgfQorCisjIGZpbmQgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3Zfc3lzX21heF9jbWRfbGVuKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgICBpPTAKKyAgdGVzdHN0cmluZz0iQUJDRCIKKworICBjYXNlICRidWlsZF9vcyBpbgorICBtc2Rvc2RqZ3BwKikKKyAgICAjIE9uIERKR1BQLCB0aGlzIHRlc3QgY2FuIGJsb3cgdXAgcHJldHR5IGJhZGx5IGR1ZSB0byBwcm9ibGVtcyBpbiBsaWJjCisgICAgIyAoYW55IHNpbmdsZSBhcmd1bWVudCBleGNlZWRpbmcgMjAwMCBieXRlcyBjYXVzZXMgYSBidWZmZXIgb3ZlcnJ1bgorICAgICMgZHVyaW5nIGdsb2IgZXhwYW5zaW9uKS4gIEV2ZW4gaWYgaXQgd2VyZSBmaXhlZCwgdGhlIHJlc3VsdCBvZiB0aGlzCisgICAgIyBjaGVjayB3b3VsZCBiZSBsYXJnZXIgdGhhbiBpdCBzaG91bGQgYmUuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTEyMjg4OyAgICAjIDEySyBpcyBhYm91dCByaWdodAorICAgIDs7CisKKyAgZ251KikKKyAgICAjIFVuZGVyIEdOVSBIdXJkLCB0aGlzIHRlc3QgaXMgbm90IHJlcXVpcmVkIGJlY2F1c2UgdGhlcmUgaXMKKyAgICAjIG5vIGxpbWl0IHRvIHRoZSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KKyAgICAjIExpYnRvb2wgd2lsbCBpbnRlcnByZXQgLTEgYXMgbm8gbGltaXQgd2hhdHNvZXZlcgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0tMTsKKyAgICA7OworCisgIGN5Z3dpbiogfCBtaW5ndyogfCBjZWdjYyopCisgICAgIyBPbiBXaW45eC9NRSwgdGhpcyB0ZXN0IGJsb3dzIHVwIC0tIGl0IHN1Y2NlZWRzLCBidXQgdGFrZXMKKyAgICAjIGFib3V0IDUgbWludXRlcyBhcyB0aGUgdGVzdHN0cmluZyBncm93cyBleHBvbmVudGlhbGx5LgorICAgICMgV29yc2UsIHNpbmNlIDl4L01FIGFyZSBub3QgcHJlLWVtcHRpdmVseSBtdWx0aXRhc2tpbmcsCisgICAgIyB5b3UgZW5kIHVwIHdpdGggYSAiZnJvemVuIiBjb21wdXRlciwgZXZlbiB0aG91Z2ggd2l0aCBwYXRpZW5jZQorICAgICMgdGhlIHRlc3QgZXZlbnR1YWxseSBzdWNjZWVkcyAod2l0aCBhIG1heCBsaW5lIGxlbmd0aCBvZiAyNTZrKS4KKyAgICAjIEluc3RlYWQsIGxldCdzIGp1c3QgcHVudDogdXNlIHRoZSBtaW5pbXVtIGxpbmVsZW5ndGggcmVwb3J0ZWQgYnkKKyAgICAjIGFsbCBvZiB0aGUgc3VwcG9ydGVkIHBsYXRmb3JtczogODE5MiAob24gTlQvMksvWFApLgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyOworICAgIDs7CisKKyAgbWludCopCisgICAgIyBPbiBNaU5UIHRoaXMgY2FuIHRha2UgYSBsb25nIHRpbWUgYW5kIHJ1biBvdXQgb2YgbWVtb3J5LgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyOworICAgIDs7CisKKyAgYW1pZ2FvcyopCisgICAgIyBPbiBBbWlnYU9TIHdpdGggcGRrc2gsIHRoaXMgdGVzdCB0YWtlcyBob3VycywgbGl0ZXJhbGx5LgorICAgICMgU28gd2UganVzdCBwdW50IGFuZCB1c2UgYSBtaW5pbXVtIGxpbmUgbGVuZ3RoIG9mIDgxOTIuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTgxOTI7CisgICAgOzsKKworICBuZXRic2QqIHwgZnJlZWJzZCogfCBvcGVuYnNkKiB8IGRhcndpbiogfCBkcmFnb25mbHkqKQorICAgICMgVGhpcyBoYXMgYmVlbiBhcm91bmQgc2luY2UgMzg2QlNELCBhdCBsZWFzdC4gIExpa2VseSBmdXJ0aGVyLgorICAgIGlmIHRlc3QgLXggL3NiaW4vc3lzY3RsOyB0aGVuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YC9zYmluL3N5c2N0bCAtbiBrZXJuLmFyZ21heGAKKyAgICBlbGlmIHRlc3QgLXggL3Vzci9zYmluL3N5c2N0bDsgdGhlbgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWAvdXNyL3NiaW4vc3lzY3RsIC1uIGtlcm4uYXJnbWF4YAorICAgIGVsc2UKKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj02NTUzNgkjIHVzYWJsZSBkZWZhdWx0IGZvciBhbGwgQlNEcworICAgIGZpCisgICAgIyBBbmQgYWRkIGEgc2FmZXR5IHpvbmUKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyA0YAorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwqIDNgCisgICAgOzsKKworICBpbnRlcml4KikKKyAgICAjIFdlIGtub3cgdGhlIHZhbHVlIDI2MjE0NCBhbmQgaGFyZGNvZGUgaXQgd2l0aCBhIHNhZmV0eSB6b25lIChsaWtlIEJTRCkKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTk2NjA4CisgICAgOzsKKworICBvczIqKQorICAgICMgVGhlIHRlc3QgdGFrZXMgYSBsb25nIHRpbWUgb24gT1MvMi4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MgorICAgIDs7CisKKyAgb3NmKikKKyAgICAjIERyLiBIYW5zIEVra2VoYXJkIFBsZXNzZXIgcmVwb3J0cyBzZWVpbmcgYSBrZXJuZWwgcGFuaWMgcnVubmluZyBjb25maWd1cmUKKyAgICAjIGR1ZSB0byB0aGlzIHRlc3Qgd2hlbiBleGVjX2Rpc2FibGVfYXJnX2xpbWl0IGlzIDEgb24gVHJ1NjQuIEl0IGlzIG5vdAorICAgICMgbmljZSB0byBjYXVzZSBrZXJuZWwgcGFuaWNzIHNvIGxldHMgYXZvaWQgdGhlIGxvb3AgYmVsb3cuCisgICAgIyBGaXJzdCBzZXQgYSByZWFzb25hYmxlIGRlZmF1bHQuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTE2Mzg0CisgICAgIworICAgIGlmIHRlc3QgLXggL3NiaW4vc3lzY29uZmlnOyB0aGVuCisgICAgICBjYXNlIGAvc2Jpbi9zeXNjb25maWcgLXEgcHJvYyBleGVjX2Rpc2FibGVfYXJnX2xpbWl0YCBpbgorICAgICAgICAqMSopIGx0X2N2X3N5c19tYXhfY21kX2xlbj0tMSA7OworICAgICAgZXNhYworICAgIGZpCisgICAgOzsKKyAgc2NvMy4ydjUqKQorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xMDI0MDAKKyAgICA7OworICBzeXN2NSogfCBzY281djYqIHwgc3lzdjQuMnV3MiopCisgICAga2FyZ21heD1gZ3JlcCBBUkdfTUFYIC9ldGMvY29uZi9jZi5kL3N0dW5lIDI+L2Rldi9udWxsYAorICAgIGlmIHRlc3QgLW4gIiRrYXJnbWF4IjsgdGhlbgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBlY2hvICRrYXJnbWF4IHwgc2VkICdzLy4qWwkgXS8vJ2AKKyAgICBlbHNlCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MzI3NjgKKyAgICBmaQorICAgIDs7CisgICopCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWAoZ2V0Y29uZiBBUkdfTUFYKSAyPiAvZGV2L251bGxgCisgICAgaWYgdGVzdCAtbiAiJGx0X2N2X3N5c19tYXhfY21kX2xlbiI7IHRoZW4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDRgCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcKiAzYAorICAgIGVsc2UKKyAgICAgICMgTWFrZSB0ZXN0c3RyaW5nIGEgbGl0dGxlIGJpZ2dlciBiZWZvcmUgd2UgZG8gYW55dGhpbmcgd2l0aCBpdC4KKyAgICAgICMgYSAxSyBzdHJpbmcgc2hvdWxkIGJlIGEgcmVhc29uYWJsZSBzdGFydC4KKyAgICAgIGZvciBpIGluIDEgMiAzIDQgNSA2IDcgOCA7IGRvCisgICAgICAgIHRlc3RzdHJpbmc9JHRlc3RzdHJpbmckdGVzdHN0cmluZworICAgICAgZG9uZQorICAgICAgU0hFTEw9JHtTSEVMTC0ke0NPTkZJR19TSEVMTC0vYmluL3NofX0KKyAgICAgICMgSWYgdGVzdCBpcyBub3QgYSBzaGVsbCBidWlsdC1pbiwgd2UnbGwgcHJvYmFibHkgZW5kIHVwIGNvbXB1dGluZyBhCisgICAgICAjIG1heGltdW0gbGVuZ3RoIHRoYXQgaXMgb25seSBoYWxmIG9mIHRoZSBhY3R1YWwgbWF4aW11bSBsZW5ndGgsIGJ1dAorICAgICAgIyB3ZSBjYW4ndCB0ZWxsLgorICAgICAgd2hpbGUgeyB0ZXN0ICJYImBlbnYgZWNobyAiJHRlc3RzdHJpbmckdGVzdHN0cmluZyIgMj4vZGV2L251bGxgIFwKKwkgICAgICAgICA9ICJYJHRlc3RzdHJpbmckdGVzdHN0cmluZyI7IH0gPi9kZXYvbnVsbCAyPiYxICYmCisJICAgICAgdGVzdCAkaSAhPSAxNyAjIDEvMiBNQiBzaG91bGQgYmUgZW5vdWdoCisgICAgICBkbworICAgICAgICBpPWBleHByICRpICsgMWAKKyAgICAgICAgdGVzdHN0cmluZz0kdGVzdHN0cmluZyR0ZXN0c3RyaW5nCisgICAgICBkb25lCisgICAgICAjIE9ubHkgY2hlY2sgdGhlIHN0cmluZyBsZW5ndGggb3V0c2lkZSB0aGUgbG9vcC4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAiWCR0ZXN0c3RyaW5nIiA6ICIuKiIgMj4mMWAKKyAgICAgIHRlc3RzdHJpbmc9CisgICAgICAjIEFkZCBhIHNpZ25pZmljYW50IHNhZmV0eSBmYWN0b3IgYmVjYXVzZSBDKysgY29tcGlsZXJzIGNhbiB0YWNrIG9uCisgICAgICAjIG1hc3NpdmUgYW1vdW50cyBvZiBhZGRpdGlvbmFsIGFyZ3VtZW50cyBiZWZvcmUgcGFzc2luZyB0aGVtIHRvIHRoZQorICAgICAgIyBsaW5rZXIuICBJdCBhcHBlYXJzIGFzIHRob3VnaCAxLzIgaXMgYSB1c2FibGUgdmFsdWUuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyAyYAorICAgIGZpCisgICAgOzsKKyAgZXNhYworCitmaQorCitpZiB0ZXN0IC1uICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIiA+JjUKKyRhc19lY2hvICIkbHRfY3Zfc3lzX21heF9jbWRfbGVuIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vbmUiID4mNQorJGFzX2VjaG8gIm5vbmUiID4mNjsgfQorZmkKK21heF9jbWRfbGVuPSRsdF9jdl9zeXNfbWF4X2NtZF9sZW4KKworCisKKworCisKKzogJHtDUD0iY3AgLWYifQorOiAke01WPSJtdiAtZiJ9Cis6ICR7Uk09InJtIC1mIn0KKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBzb21lIFhTSSBjb25zdHJ1Y3RzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIHNvbWUgWFNJIGNvbnN0cnVjdHMuLi4gIiA+JjY7IH0KKyMgVHJ5IHNvbWUgWFNJIGZlYXR1cmVzCit4c2lfc2hlbGw9bm8KKyggX2x0X2R1bW15PSJhL2IvYyIKKyAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sJHtfbHRfZHVtbXkjPz99IiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKKyAgICAgID0gYyxhL2IsYi9jLCBcCisgICAgJiYgZXZhbCAndGVzdCAkKCggMSArIDEgKSkgLWVxIDIgXAorICAgICYmIHRlc3QgIiR7I19sdF9kdW1teX0iIC1lcSA1JyApID4vZGV2L251bGwgMj4mMSBcCisgICYmIHhzaV9zaGVsbD15ZXMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkeHNpX3NoZWxsIiA+JjUKKyRhc19lY2hvICIkeHNpX3NoZWxsIiA+JjY7IH0KKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIFwiKz1cIiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBcIis9XCIuLi4gIiA+JjY7IH0KK2x0X3NoZWxsX2FwcGVuZD1ubworKCBmb289YmFyOyBzZXQgZm9vIGJhejsgZXZhbCAiJDErPVwkMiIgJiYgdGVzdCAiJGZvbyIgPSBiYXJiYXogKSBcCisgICAgPi9kZXYvbnVsbCAyPiYxIFwKKyAgJiYgbHRfc2hlbGxfYXBwZW5kPXllcworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9zaGVsbF9hcHBlbmQiID4mNQorJGFzX2VjaG8gIiRsdF9zaGVsbF9hcHBlbmQiID4mNjsgfQorCisKK2lmICggKE1BSUw9NjA7IHVuc2V0IE1BSUwpIHx8IGV4aXQpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBsdF91bnNldD11bnNldAorZWxzZQorICBsdF91bnNldD1mYWxzZQorZmkKKworCisKKworCisjIHRlc3QgRUJDRElDIG9yIEFTQ0lJCitjYXNlIGBlY2hvIFh8dHIgWCAnXDEwMSdgIGluCisgQSkgIyBBU0NJSSBiYXNlZCBzeXN0ZW0KKyAgICAjIFxuIGlzIG5vdCBpbnRlcnByZXRlZCBjb3JyZWN0bHkgYnkgU29sYXJpcyA4IC91c3IvdWNiL3RyCisgIGx0X1NQMk5MPSd0ciBcMDQwIFwwMTInCisgIGx0X05MMlNQPSd0ciBcMDE1XDAxMiBcMDQwXDA0MCcKKyAgOzsKKyAqKSAjIEVCQ0RJQyBiYXNlZCBzeXN0ZW0KKyAgbHRfU1AyTkw9J3RyIFwxMDAgXG4nCisgIGx0X05MMlNQPSd0ciBcclxuIFwxMDBcMTAwJworICA7OworZXNhYworCisKKworCisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0Li4uICIgPiY2OyB9CitpZiAke2x0X2N2X3RvX2hvc3RfZmlsZV9jbWQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRob3N0IGluCisgICotKi1taW5ndyogKQorICAgIGNhc2UgJGJ1aWxkIGluCisgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKyAgICAgICAgOzsKKyAgICAgICotKi1jeWd3aW4qICkKKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyCisgICAgICAgIDs7CisgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4CisgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMgorICAgICAgICA7OworICAgIGVzYWMKKyAgICA7OworICAqLSotY3lnd2luKiApCisgICAgY2FzZSAkYnVpbGQgaW4KKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX2N5Z3dpbgorICAgICAgICA7OworICAgICAgKi0qLWN5Z3dpbiogKQorICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKyAgICAgICAgOzsKKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luCisgICAgICAgIDs7CisgICAgZXNhYworICAgIDs7CisgICogKSAjIHVuaGFuZGxlZCBob3N0cyAoYW5kICJub3JtYWwiIG5hdGl2ZSBidWlsZHMpCisgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisgICAgOzsKK2VzYWMKKworZmkKKwordG9faG9zdF9maWxlX2NtZD0kbHRfY3ZfdG9faG9zdF9maWxlX2NtZAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgPiY2OyB9CisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byB0b29sY2hhaW4gZm9ybWF0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvIHRvb2xjaGFpbiBmb3JtYXQuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfdG9fdG9vbF9maWxlX2NtZCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgICNhc3N1bWUgb3JkaW5hcnkgY3Jvc3MgdG9vbHMsIG9yIG5hdGl2ZSBidWlsZC4KK2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorY2FzZSAkaG9zdCBpbgorICAqLSotbWluZ3cqICkKKyAgICBjYXNlICRidWlsZCBpbgorICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworICAgICAgICBsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisgICAgICAgIDs7CisgICAgZXNhYworICAgIDs7Citlc2FjCisKK2ZpCisKK3RvX3Rvb2xfZmlsZV9jbWQ9JGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiID4mNjsgfQorCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X2xkX3JlbG9hZF9mbGFnKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfbGRfcmVsb2FkX2ZsYWc9Jy1yJworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfbGRfcmVsb2FkX2ZsYWciID4mNQorJGFzX2VjaG8gIiRsdF9jdl9sZF9yZWxvYWRfZmxhZyIgPiY2OyB9CityZWxvYWRfZmxhZz0kbHRfY3ZfbGRfcmVsb2FkX2ZsYWcKK2Nhc2UgJHJlbG9hZF9mbGFnIGluCisiIiB8ICIgIiopIDs7CisqKSByZWxvYWRfZmxhZz0iICRyZWxvYWRfZmxhZyIgOzsKK2VzYWMKK3JlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKK2Nhc2UgJGhvc3Rfb3MgaW4KKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorICAgICAgcmVsb2FkX2NtZHM9ZmFsc2UKKyAgICBmaQorICAgIDs7CisgIGRhcndpbiopCisgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgIHJlbG9hZF9jbWRzPSckTFRDQyAkTFRDRkxBR1MgLW5vc3RkbGliICR7d2x9LXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKyAgICBlbHNlCisgICAgICByZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisgICAgZmkKKyAgICA7OworZXNhYworCisKKworCisKKworCisKKworaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9b2JqZHVtcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1vYmpkdW1wOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19PQkpEVU1QKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJE9CSkRVTVAiOyB0aGVuCisgIGFjX2N2X3Byb2dfT0JKRFVNUD0iJE9CSkRVTVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19PQkpEVU1QPSIke2FjX3Rvb2xfcHJlZml4fW9iamR1bXAiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorT0JKRFVNUD0kYWNfY3ZfcHJvZ19PQkpEVU1QCitpZiB0ZXN0IC1uICIkT0JKRFVNUCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRPQkpEVU1QIiA+JjUKKyRhc19lY2hvICIkT0JKRFVNUCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfT0JKRFVNUCI7IHRoZW4KKyAgYWNfY3RfT0JKRFVNUD0kT0JKRFVNUAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm9iamR1bXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IG9iamR1bXA7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X09CSkRVTVArOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfT0JKRFVNUCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QPSIkYWNfY3RfT0JKRFVNUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X09CSkRVTVA9Im9iamR1bXAiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfT0JKRFVNUD0kYWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QCitpZiB0ZXN0IC1uICIkYWNfY3RfT0JKRFVNUCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9PQkpEVU1QIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfT0JKRFVNUCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X09CSkRVTVAiID0geDsgdGhlbgorICAgIE9CSkRVTVA9ImZhbHNlIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIE9CSkRVTVA9JGFjX2N0X09CSkRVTVAKKyAgZmkKK2Vsc2UKKyAgT0JKRFVNUD0iJGFjX2N2X3Byb2dfT0JKRFVNUCIKK2ZpCisKK3Rlc3QgLXogIiRPQkpEVU1QIiAmJiBPQkpEVU1QPW9iamR1bXAKKworCisKKworCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIHJlY29nbml6ZSBkZXBlbmRlbnQgbGlicmFyaWVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byByZWNvZ25pemUgZGVwZW5kZW50IGxpYnJhcmllcy4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckTUFHSUNfQ01EJworbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9CitsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0ndW5rbm93bicKKyMgTmVlZCB0byBzZXQgdGhlIHByZWNlZGluZyB2YXJpYWJsZSBvbiBhbGwgcGxhdGZvcm1zIHRoYXQgc3VwcG9ydAorIyBpbnRlcmxpYnJhcnkgZGVwZW5kZW5jaWVzLgorIyAnbm9uZScgLS0gZGVwZW5kZW5jaWVzIG5vdCBzdXBwb3J0ZWQuCisjIGB1bmtub3duJyAtLSBzYW1lIGFzIG5vbmUsIGJ1dCBkb2N1bWVudHMgdGhhdCB3ZSByZWFsbHkgZG9uJ3Qga25vdy4KKyMgJ3Bhc3NfYWxsJyAtLSBhbGwgZGVwZW5kZW5jaWVzIHBhc3NlZCB3aXRoIG5vIGNoZWNrcy4KKyMgJ3Rlc3RfY29tcGlsZScgLS0gY2hlY2sgYnkgbWFraW5nIHRlc3QgcHJvZ3JhbS4KKyMgJ2ZpbGVfbWFnaWMgW1tyZWdleF1dJyAtLSBjaGVjayBieSBsb29raW5nIGZvciBmaWxlcyBpbiBsaWJyYXJ5IHBhdGgKKyMgd2hpY2ggcmVzcG9uZHMgdG8gdGhlICRmaWxlX21hZ2ljX2NtZCB3aXRoIGEgZ2l2ZW4gZXh0ZW5kZWQgcmVnZXguCisjIElmIHlvdSBoYXZlIGBmaWxlJyBvciBlcXVpdmFsZW50IG9uIHlvdXIgc3lzdGVtIGFuZCB5b3UncmUgbm90IHN1cmUKKyMgd2hldGhlciBgcGFzc19hbGwnIHdpbGwgKmFsd2F5cyogd29yaywgeW91IHByb2JhYmx5IHdhbnQgdGhpcyBvbmUuCisKK2Nhc2UgJGhvc3Rfb3MgaW4KK2FpeFs0LTldKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworYmVvcyopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2JzZGlbNDVdKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFswLTldWzAtOV0qLWJpdCBbTUxdU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIpJworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL3Vzci9iaW4vZmlsZSAtTCcKKyAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3NobGliL2xpYmMuc28KKyAgOzsKKworY3lnd2luKikKKyAgIyBmdW5jX3dpbjMyX2xpYmlkIGlzIGEgc2hlbGwgZnVuY3Rpb24gZGVmaW5lZCBpbiBsdG1haW4uc2gKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCisgIDs7CisKK21pbmd3KiB8IHB3MzIqKQorICAjIEJhc2UgTVNZUy9NaW5HVyBkbyBub3QgcHJvdmlkZSB0aGUgJ2ZpbGUnIGNvbW1hbmQgbmVlZGVkIGJ5CisgICMgZnVuY193aW4zMl9saWJpZCBzaGVsbCBmdW5jdGlvbiwgc28gdXNlIGEgd2Vha2VyIHRlc3QgYmFzZWQgb24gJ29iamR1bXAnLAorICAjIHVubGVzcyB3ZSBmaW5kICdmaWxlJywgZm9yIGV4YW1wbGUgYmVjYXVzZSB3ZSBhcmUgY3Jvc3MtY29tcGlsaW5nLgorICAjIGZ1bmNfd2luMzJfbGliaWQgYXNzdW1lcyBCU0Qgbm0sIHNvIGRpc2FsbG93IGl0IGlmIHVzaW5nIE1TIGR1bXBiaW4uCisgIGlmICggdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiQlNEIG5tIiAmJiBmaWxlIC8gKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJworICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJworICBlbHNlCisgICAgIyBLZWVwIHRoaXMgcGF0dGVybiBpbiBzeW5jIHdpdGggdGhlIG9uZSBpbiBmdW5jX3dpbjMyX2xpYmlkLgorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IChwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpP3xwZS1hcm0td2luY2V8cGUteDg2LTY0KScKKyAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCisgIGZpCisgIDs7CisKK2NlZ2NjKikKKyAgIyB1c2UgdGhlIHdlYWtlciB0ZXN0IGJhc2VkIG9uICdvYmpkdW1wJy4gU2VlIG1pbmd3Ki4KKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgcGUtYXJtLS4qbGl0dGxlKC4qYXJjaGl0ZWN0dXJlOiBhcm0pPycKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRPQkpEVU1QIC1mJworICA7OworCitkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgaSo4NiApCisgICAgICAjIE5vdCBzdXJlIHdoZXRoZXIgdGhlIHByZXNlbmNlIG9mIE9wZW5CU0QgaGVyZSB3YXMgYSBtaXN0YWtlLgorICAgICAgIyBMZXQncyBhY2NlcHQgYm90aCBvZiB0aGVtIHVudGlsIHRoaXMgaXMgY2xlYXJlZCB1cC4KKyAgICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChGcmVlQlNEfE9wZW5CU0R8RHJhZ29uRmx5KS9pWzMtOV04NiAoY29tcGFjdCApP2RlbWFuZCBwYWdlZCBzaGFyZWQgbGlicmFyeScKKyAgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKKyAgICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC91c3IvbGliL2xpYmMuc28uKmAKKyAgICAgIDs7CisgICAgZXNhYworICBlbHNlCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgZmkKKyAgOzsKKworZ251KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworaGFpa3UqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitocHV4MTAuMjAqIHwgaHB1eDExKikKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9L3Vzci9iaW4vZmlsZQorICBjYXNlICRob3N0X2NwdSBpbgorICBpYTY0KikKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoc1swLTldWzAtOV1bMC05XXxFTEYtWzAtOV1bMC05XSkgc2hhcmVkIG9iamVjdCBmaWxlIC0gSUE2NCcKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9ocHV4MzIvbGliYy5zbworICAgIDs7CisgIGhwcGEqNjQqKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzWzAtOV1bMC05XVswLTldfEVMRlsgLV1bMC05XVswLTldKSgtYml0KT8oIFtMTV1TQik/IHNoYXJlZCBvYmplY3QoIGZpbGUpP1ssIC1dKiBQQS1SSVNDIFswLTldXC5bMC05XScKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9wYTIwXzY0L2xpYmMuc2wKKyAgICA7OworICAqKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzWzAtOV1bMC05XVswLTldfFBBLVJJU0NbMC05XVwuWzAtOV0pIHNoYXJlZCBsaWJyYXJ5JworICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2xpYmMuc2wKKyAgICA7OworICBlc2FjCisgIDs7CisKK2ludGVyaXhbMy05XSopCisgICMgUElDIGNvZGUgaXMgYnJva2VuIG9uIEludGVyaXggMy54LCB0aGF0J3Mgd2h5IHxcLmEgbm90IHxfcGljXC5hIGhlcmUKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL10rKFwuc298XC5hKSQnCisgIDs7CisKK2lyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgIGNhc2UgJExEIGluCisgICotMzJ8KiItMzIgIikgbGlibWFnaWM9MzItYml0OzsKKyAgKi1uMzJ8KiItbjMyICIpIGxpYm1hZ2ljPU4zMjs7CisgICotNjR8KiItNjQgIikgbGlibWFnaWM9NjQtYml0OzsKKyAgKikgbGlibWFnaWM9bmV2ZXItbWF0Y2g7OworICBlc2FjCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKKyMgVGhpcyBtdXN0IGJlIGdsaWJjL0VMRi4KK2xpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworbmV0YnNkKikKKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4gL2Rldi9udWxsOyB0aGVuCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL10rKFwuc29cLlswLTldK1wuWzAtOV0rfF9waWNcLmEpJCcKKyAgZWxzZQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9dKyhcLnNvfF9waWNcLmEpJCcKKyAgZmkKKyAgOzsKKworbmV3b3M2KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFswLTldWzAtOV0qLWJpdCBbTUxdU0IgKGV4ZWN1dGFibGV8ZHluYW1pYyBsaWIpJworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCisgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2xpYm5scy5zbworICA7OworCisqbnRvKiB8ICpxbngqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitvcGVuYnNkKikKKyAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9dKyhcLnNvXC5bMC05XStcLlswLTldK3xcLnNvfF9waWNcLmEpJCcKKyAgZWxzZQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9dKyhcLnNvXC5bMC05XStcLlswLTldK3xfcGljXC5hKSQnCisgIGZpCisgIDs7CisKK29zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworcmRvcyopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK3NvbGFyaXMqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworc3lzdjQgfCBzeXN2NC4zKikKKyAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKyAgbW90b3JvbGEpCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFswLTldWzAtOV0qLWJpdCBbTUxdU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIpIE1bMC05XVswLTldKiBWZXJzaW9uIFswLTldJworICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC91c3IvbGliL2xpYmMuc28qYAorICAgIDs7CisgIG5jcikKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgIDs7CisgIHNlcXVlbnQpCisgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy9iaW4vZmlsZScKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgWzAtOV1bMC05XSotYml0IFtMTV1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYiApJworICAgIDs7CisgIHNuaSkKKyAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL2Jpbi9maWxlJworICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSJmaWxlX21hZ2ljIEVMRiBbMC05XVswLTldKi1iaXQgW0xNXVNCIGR5bmFtaWMgbGliIgorICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS9saWIvbGliYy5zbworICAgIDs7CisgIHNpZW1lbnMpCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgICA7OworICBwYykKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgIDs7CisgIGVzYWMKKyAgOzsKKwordHBmKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKK2VzYWMKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY2OyB9CisKK2ZpbGVfbWFnaWNfZ2xvYj0KK3dhbnRfbm9jYXNlZ2xvYj1ubworaWYgdGVzdCAiJGJ1aWxkIiA9ICIkaG9zdCI7IHRoZW4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICBtaW5ndyogfCBwdzMyKikKKyAgICBpZiAoIHNob3B0IHwgZ3JlcCBub2Nhc2VnbG9iICkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICB3YW50X25vY2FzZWdsb2I9eWVzCisgICAgZWxzZQorICAgICAgZmlsZV9tYWdpY19nbG9iPWBlY2hvIGFBYkJjQ2REZUVmRmdHaEhpSWpKa0tsTG1Nbk5vT3BQcVFyUnNTdFR1VXZWd1d4WHlZelogfCAkU0VEIC1lICJzL1woLi5cKS9zXC9bXDFdXC9bXDFdXC9nOy9nImAKKyAgICBmaQorICAgIDs7CisgIGVzYWMKK2ZpCisKK2ZpbGVfbWFnaWNfY21kPSRsdF9jdl9maWxlX21hZ2ljX2NtZAorZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kCit0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1kbGx0b29sOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19ETExUT09MKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCisgIGFjX2N2X3Byb2dfRExMVE9PTD0iJERMTFRPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19ETExUT09MPSIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorRExMVE9PTD0kYWNfY3ZfcHJvZ19ETExUT09MCitpZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRETExUT09MIiA+JjUKKyRhc19lY2hvICIkRExMVE9PTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfRExMVE9PTCI7IHRoZW4KKyAgYWNfY3RfRExMVE9PTD0kRExMVE9PTAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGRsbHRvb2w7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSIkYWNfY3RfRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9ImRsbHRvb2wiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfRExMVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MCitpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9ETExUT09MIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfRExMVE9PTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0RMTFRPT0wiID0geDsgdGhlbgorICAgIERMTFRPT0w9ImZhbHNlIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIERMTFRPT0w9JGFjX2N0X0RMTFRPT0wKKyAgZmkKK2Vsc2UKKyAgRExMVE9PTD0iJGFjX2N2X3Byb2dfRExMVE9PTCIKK2ZpCisKK3Rlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKKworCisKKworCisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gYXNzb2NpYXRlIHJ1bnRpbWUgYW5kIGxpbmsgbGlicmFyaWVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBhc3NvY2lhdGUgcnVudGltZSBhbmQgbGluayBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0ndW5rbm93bicKKworY2FzZSAkaG9zdF9vcyBpbgorY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAjIHR3byBkaWZmZXJlbnQgc2hlbGwgZnVuY3Rpb25zIGRlZmluZWQgaW4gbHRtYWluLnNoCisgICMgZGVjaWRlIHdoaWNoIHRvIHVzZSBiYXNlZCBvbiBjYXBhYmlsaXRpZXMgb2YgJERMTFRPT0wKKyAgY2FzZSBgJERMTFRPT0wgLS1oZWxwIDI+JjFgIGluCisgICotLWlkZW50aWZ5LXN0cmljdCopCisgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliCisgICAgOzsKKyAgKikKKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2sKKyAgICA7OworICBlc2FjCisgIDs7CisqKQorICAjIGZhbGxiYWNrOiBhc3N1bWUgbGlua2xpYiBJUyBzaGFyZWRsaWIKKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9IiRFQ0hPIgorICA7OworZXNhYworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiA+JjY7IH0KK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAordGVzdCAteiAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiAmJiBzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kRUNITworCisKKworCisKKworCitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgIGZvciBhY19wcm9nIGluIGFyCisgIGRvCisgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX0FSKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJEFSIjsgdGhlbgorICBhY19jdl9wcm9nX0FSPSIkQVIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19BUj0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorQVI9JGFjX2N2X3Byb2dfQVIKK2lmIHRlc3QgLW4gIiRBUiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRBUiIgPiY1CiskYXNfZWNobyAiJEFSIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgICB0ZXN0IC1uICIkQVIiICYmIGJyZWFrCisgIGRvbmUKK2ZpCitpZiB0ZXN0IC16ICIkQVIiOyB0aGVuCisgIGFjX2N0X0FSPSRBUgorICBmb3IgYWNfcHJvZyBpbiBhcgorZG8KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X0FSKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0FSIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0FSPSIkYWNfY3RfQVIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iJGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfQVI9JGFjX2N2X3Byb2dfYWNfY3RfQVIKK2lmIHRlc3QgLW4gIiRhY19jdF9BUiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9BUiIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0FSIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgdGVzdCAtbiAiJGFjX2N0X0FSIiAmJiBicmVhaworZG9uZQorCisgIGlmIHRlc3QgIngkYWNfY3RfQVIiID0geDsgdGhlbgorICAgIEFSPSJmYWxzZSIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBBUj0kYWNfY3RfQVIKKyAgZmkKK2ZpCisKKzogJHtBUj1hcn0KKzogJHtBUl9GTEFHUz1jcnV9CisKKworCisKKworCisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYXJjaGl2ZXIgQEZJTEUgc3VwcG9ydCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgYXJjaGl2ZXIgQEZJTEUgc3VwcG9ydC4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9hcl9hdF9maWxlKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfYXJfYXRfZmlsZT1ubworICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGVjaG8gY29uZnRlc3QuJGFjX29iamV4dCA+IGNvbmZ0ZXN0LmxzdAorICAgICAgbHRfYXJfdHJ5PSckQVIgJEFSX0ZMQUdTIGxpYmNvbmZ0ZXN0LmEgQGNvbmZ0ZXN0LmxzdCA+JjUnCisgICAgICB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkbHRfYXJfdHJ5XCIiOyB9ID4mNQorICAoZXZhbCAkbHRfYXJfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorICAgICAgaWYgdGVzdCAiJGFjX3N0YXR1cyIgLWVxIDA7IHRoZW4KKwkjIEVuc3VyZSB0aGUgYXJjaGl2ZXIgZmFpbHMgdXBvbiBib2d1cyBmaWxlIG5hbWVzLgorCXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgbGliY29uZnRlc3QuYQorCXsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRsdF9hcl90cnlcIiI7IH0gPiY1CisgIChldmFsICRsdF9hcl90cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CisJaWYgdGVzdCAiJGFjX3N0YXR1cyIgLW5lIDA7IHRoZW4KKyAgICAgICAgICBsdF9jdl9hcl9hdF9maWxlPUAKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgICBybSAtZiBjb25mdGVzdC4qIGxpYmNvbmZ0ZXN0LmEKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9hcl9hdF9maWxlIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfYXJfYXRfZmlsZSIgPiY2OyB9CisKK2lmIHRlc3QgIngkbHRfY3ZfYXJfYXRfZmlsZSIgPSB4bm87IHRoZW4KKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPQorZWxzZQorICBhcmNoaXZlcl9saXN0X3NwZWM9JGx0X2N2X2FyX2F0X2ZpbGUKK2ZpCisKKworCisKKworCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXN0cmlwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXN0cmlwOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19TVFJJUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19TVFJJUD0iJFNUUklQIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfU1RSSVA9IiR7YWNfdG9vbF9wcmVmaXh9c3RyaXAiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorU1RSSVA9JGFjX2N2X3Byb2dfU1RSSVAKK2lmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRTVFJJUCIgPiY1CiskYXNfZWNobyAiJFNUUklQIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19TVFJJUCI7IHRoZW4KKyAgYWNfY3RfU1RSSVA9JFNUUklQCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAic3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IHN0cmlwOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9TVFJJUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9TVFJJUCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9TVFJJUD0iJGFjX2N0X1NUUklQIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfU1RSSVA9InN0cmlwIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X1NUUklQPSRhY19jdl9wcm9nX2FjX2N0X1NUUklQCitpZiB0ZXN0IC1uICIkYWNfY3RfU1RSSVAiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfU1RSSVAiID4mNQorJGFzX2VjaG8gIiRhY19jdF9TVFJJUCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X1NUUklQIiA9IHg7IHRoZW4KKyAgICBTVFJJUD0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBTVFJJUD0kYWNfY3RfU1RSSVAKKyAgZmkKK2Vsc2UKKyAgU1RSSVA9IiRhY19jdl9wcm9nX1NUUklQIgorZmkKKwordGVzdCAteiAiJFNUUklQIiAmJiBTVFJJUD06CisKKworCisKKworCitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1yYW5saWIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9cmFubGliOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19SQU5MSUIrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICBhY19jdl9wcm9nX1JBTkxJQj0iJFJBTkxJQiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX1JBTkxJQj0iJHthY190b29sX3ByZWZpeH1yYW5saWIiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorUkFOTElCPSRhY19jdl9wcm9nX1JBTkxJQgoraWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRSQU5MSUIiID4mNQorJGFzX2VjaG8gIiRSQU5MSUIiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX1JBTkxJQiI7IHRoZW4KKyAgYWNfY3RfUkFOTElCPSRSQU5MSUIKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJyYW5saWIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IHJhbmxpYjsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfUkFOTElCKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X1JBTkxJQiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUI9IiRhY19jdF9SQU5MSUIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUI9InJhbmxpYiIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9SQU5MSUI9JGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCCitpZiB0ZXN0IC1uICIkYWNfY3RfUkFOTElCIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X1JBTkxJQiIgPiY1CiskYXNfZWNobyAiJGFjX2N0X1JBTkxJQiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X1JBTkxJQiIgPSB4OyB0aGVuCisgICAgUkFOTElCPSI6IgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIFJBTkxJQj0kYWNfY3RfUkFOTElCCisgIGZpCitlbHNlCisgIFJBTkxJQj0iJGFjX2N2X3Byb2dfUkFOTElCIgorZmkKKwordGVzdCAteiAiJFJBTkxJQiIgJiYgUkFOTElCPToKKworCisKKworCisKKyMgRGV0ZXJtaW5lIGNvbW1hbmRzIHRvIGNyZWF0ZSBvbGQtc3R5bGUgc3RhdGljIGFyY2hpdmVzLgorb2xkX2FyY2hpdmVfY21kcz0nJEFSICRBUl9GTEFHUyAkb2xkbGliJG9sZG9ianMnCitvbGRfcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNjQ0ICRvbGRsaWInCitvbGRfcG9zdHVuaW5zdGFsbF9jbWRzPQorCitpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICBjYXNlICRob3N0X29zIGluCisgIG9wZW5ic2QqKQorICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSIkb2xkX3Bvc3RpbnN0YWxsX2NtZHN+XCRSQU5MSUIgLXQgXCR0b29sX29sZGxpYiIKKyAgICA7OworICAqKQorICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSIkb2xkX3Bvc3RpbnN0YWxsX2NtZHN+XCRSQU5MSUIgXCR0b29sX29sZGxpYiIKKyAgICA7OworICBlc2FjCisgIG9sZF9hcmNoaXZlX2NtZHM9IiRvbGRfYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkdG9vbF9vbGRsaWIiCitmaQorCitjYXNlICRob3N0X29zIGluCisgIGRhcndpbiopCisgICAgbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uPXllcyA7OworICAqKQorICAgIGxvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbj1ubyA7OworZXNhYworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworIyBJZiBubyBDIGNvbXBpbGVyIHdhcyBzcGVjaWZpZWQsIHVzZSBDQy4KK0xUQ0M9JHtMVENDLSIkQ0MifQorCisjIElmIG5vIEMgY29tcGlsZXIgZmxhZ3Mgd2VyZSBzcGVjaWZpZWQsIHVzZSBDRkxBR1MuCitMVENGTEFHUz0ke0xUQ0ZMQUdTLSIkQ0ZMQUdTIn0KKworIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KK2NvbXBpbGVyPSRDQworCisKKyMgQ2hlY2sgZm9yIGNvbW1hbmQgdG8gZ3JhYiB0aGUgcmF3IHN5bWJvbCBuYW1lIGZvbGxvd2VkIGJ5IEMgc3ltYm9sIGZyb20gbm0uCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGNvbW1hbmQgdG8gcGFyc2UgJE5NIG91dHB1dCBmcm9tICRjb21waWxlciBvYmplY3QiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgY29tbWFuZCB0byBwYXJzZSAkTk0gb3V0cHV0IGZyb20gJGNvbXBpbGVyIG9iamVjdC4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworIyBUaGVzZSBhcmUgc2FuZSBkZWZhdWx0cyB0aGF0IHdvcmsgb24gYXQgbGVhc3QgYSBmZXcgb2xkIHN5c3RlbXMuCisjIFtUaGV5IGNvbWUgZnJvbSBVbHRyaXguICBXaGF0IGNvdWxkIGJlIG9sZGVyIHRoYW4gVWx0cml4PyEhIDspXQorCisjIENoYXJhY3RlciBjbGFzcyBkZXNjcmliaW5nIE5NIGdsb2JhbCBzeW1ib2wgY29kZXMuCitzeW1jb2RlPSdbQkNERUdSU1RdJworCisjIFJlZ2V4cCB0byBtYXRjaCBzeW1ib2xzIHRoYXQgY2FuIGJlIGFjY2Vzc2VkIGRpcmVjdGx5IGZyb20gQy4KK3N5bXBhdD0nXChbX0EtWmEtel1bX0EtWmEtejAtOV0qXCknCisKKyMgRGVmaW5lIHN5c3RlbS1zcGVjaWZpYyB2YXJpYWJsZXMuCitjYXNlICRob3N0X29zIGluCithaXgqKQorICBzeW1jb2RlPSdbQkNEVF0nCisgIDs7CitjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgIHN5bWNvZGU9J1tBQkNER0lTVFddJworICA7OworaHB1eCopCisgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgICAgc3ltY29kZT0nW0FCQ0RFR1JTVF0nCisgIGZpCisgIDs7Citpcml4KiB8IG5vbnN0b3B1eCopCisgIHN5bWNvZGU9J1tCQ0RFR1JTVF0nCisgIDs7Citvc2YqKQorICBzeW1jb2RlPSdbQkNERUdRUlNUXScKKyAgOzsKK3NvbGFyaXMqKQorICBzeW1jb2RlPSdbQkRSVF0nCisgIDs7CitzY28zLjJ2NSopCisgIHN5bWNvZGU9J1tEVF0nCisgIDs7CitzeXN2NC4ydXcyKikKKyAgc3ltY29kZT0nW0RUXScKKyAgOzsKK3N5c3Y1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCopCisgIHN5bWNvZGU9J1tBQkRUXScKKyAgOzsKK3N5c3Y0KQorICBzeW1jb2RlPSdbREZOU1RVXScKKyAgOzsKK2VzYWMKKworIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gdXNlIGl0cyBzdGFuZGFyZCBzeW1ib2wgY29kZXMuCitjYXNlIGAkTk0gLVYgMj4mMWAgaW4KKypHTlUqIHwgKid3aXRoIEJGRCcqKQorICBzeW1jb2RlPSdbQUJDREdJUlNUV10nIDs7Citlc2FjCisKKyMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIGEgcHJvcGVyIEMgZGVjbGFyYXRpb24uCisjIFNvbWUgc3lzdGVtcyAoZXNwLiBvbiBpYTY0KSBsaW5rIGRhdGEgYW5kIGNvZGUgc3ltYm9scyBkaWZmZXJlbnRseSwKKyMgc28gdXNlIHRoaXMgZ2VuZXJhbCBhcHByb2FjaC4KK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXlQgLiogXCguKlwpJC9leHRlcm4gaW50IFwxKCk7L3AnIC1lICdzL14kc3ltY29kZSogLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCisKKyMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIHN5bWJvbCBuYW1lIGFuZCBzeW1ib2wgYWRkcmVzcworbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXClbIF0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXClbIF0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChsaWJbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wibGliXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorCisjIEhhbmRsZSBDUkxGIGluIG1pbmd3IHRvb2wgY2hhaW4KK29wdF9jcj0KK2Nhc2UgJGJ1aWxkX29zIGluCittaW5ndyopCisgIG9wdF9jcj1gJEVDSE8gJ3hcezAsMVx9JyB8IHRyIHggJ1wwMTUnYCAjIG9wdGlvbiBjciBpbiByZWdleHAKKyAgOzsKK2VzYWMKKworIyBUcnkgd2l0aG91dCBhIHByZWZpeCB1bmRlcnNjb3JlLCB0aGVuIHdpdGggaXQuCitmb3IgYWNfc3ltcHJmeCBpbiAiIiAiXyI7IGRvCisKKyAgIyBUcmFuc2Zvcm0gc3ltY29kZSwgc3ltcGF0LCBhbmQgc3ltcHJmeCBpbnRvIGEgcmF3IHN5bWJvbCBhbmQgYSBDIHN5bWJvbC4KKyAgc3lteGZybT0iXFwxICRhY19zeW1wcmZ4XFwyIFxcMiIKKworICAjIFdyaXRlIHRoZSByYXcgYW5kIEMgaWRlbnRpZmllcnMuCisgIGlmIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIk1TIGR1bXBiaW4iOyB0aGVuCisgICAgIyBGYWtlIGl0IGZvciBkdW1wYmluIGFuZCBzYXkgVCBmb3IgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb24KKyAgICAjIGFuZCBEIGZvciBhbnkgZ2xvYmFsIHZhcmlhYmxlLgorICAgICMgQWxzbyBmaW5kIEMrKyBhbmQgX19mYXN0Y2FsbCBzeW1ib2xzIGZyb20gTVNWQysrLAorICAgICMgd2hpY2ggc3RhcnQgd2l0aCBAIG9yID8uCisgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0iJEFXSyAnIlwKKyIgICAgIHtsYXN0X3NlY3Rpb249c2VjdGlvbjsgc2VjdGlvbj1cJCAzfTsiXAorIiAgICAgL15DT0ZGIFNZTUJPTCBUQUJMRS97Zm9yKGkgaW4gaGlkZSkgZGVsZXRlIGhpZGVbaV19OyJcCisiICAgICAvU2VjdGlvbiBsZW5ndGggLiojcmVsb2NzLioocGljayBhbnkpL3toaWRlW2xhc3Rfc2VjdGlvbl09MX07IlwKKyIgICAgIFwkIDAhfi9FeHRlcm5hbCAqXHwve25leHR9OyJcCisiICAgICAvIDArIFVOREVGIC97bmV4dH07IC8gVU5ERUYgXChbXnxdXCkqKCkve25leHR9OyJcCisiICAgICB7aWYoaGlkZVtzZWN0aW9uXSkgbmV4dH07IlwKKyIgICAgIHtmPTB9OyBcJCAwfi9cKFwpLipcfC97Zj0xfTsge3ByaW50ZiBmID8gXCJUIFwiIDogXCJEIFwifTsiXAorIiAgICAge3NwbGl0KFwkIDAsIGEsIC9cfHxcci8pOyBzcGxpdChhWzJdLCBzKX07IlwKKyIgICAgIHNbMV1+L15bQD9dL3twcmludCBzWzFdLCBzWzFdOyBuZXh0fTsiXAorIiAgICAgc1sxXX5wcmZ4IHtzcGxpdChzWzFdLHQsXCJAXCIpOyBwcmludCB0WzFdLCBzdWJzdHIodFsxXSxsZW5ndGgocHJmeCkpfSJcCisiICAgICAnIHByZng9XiRhY19zeW1wcmZ4IgorICBlbHNlCisgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0ic2VkIC1uIC1lICdzL14uKlsJIF1cKCRzeW1jb2RlJHN5bWNvZGUqXClbCSBdWwkgXSokYWNfc3ltcHJmeCRzeW1wYXQkb3B0X2NyJC8kc3lteGZybS9wJyIKKyAgZmkKKyAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0iJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgfCBzZWQgJy8gX19nbnVfbHRvL2QnIgorCisgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIHBpcGUgd29ya3MgY29ycmVjdGx5LgorICBwaXBlX3dvcmtzPW5vCisKKyAgcm0gLWYgY29uZnRlc3QqCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCitjaGFyIG5tX3Rlc3RfdmFyOwordm9pZCBubV90ZXN0X2Z1bmModm9pZCk7Cit2b2lkIG5tX3Rlc3RfZnVuYyh2b2lkKXt9CisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgoraW50IG1haW4oKXtubV90ZXN0X3Zhcj0nYSc7bm1fdGVzdF9mdW5jKCk7cmV0dXJuKDApO30KK19MVF9FT0YKKworICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCisgICAgIyBOb3cgdHJ5IHRvIGdyYWIgdGhlIHN5bWJvbHMuCisgICAgbmxpc3Q9Y29uZnRlc3Qubm0KKyAgICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkTk0gY29uZnRlc3QuJGFjX29iamV4dCBcfCAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiIFw+ICRubGlzdFwiIjsgfSA+JjUKKyAgKGV2YWwgJE5NIGNvbmZ0ZXN0LiRhY19vYmpleHQgXHwgIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiBcPiAkbmxpc3QpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgIiRubGlzdCI7IHRoZW4KKyAgICAgICMgVHJ5IHNvcnRpbmcgYW5kIHVuaXF1aWZ5aW5nIHRoZSBvdXRwdXQuCisgICAgICBpZiBzb3J0ICIkbmxpc3QiIHwgdW5pcSA+ICIkbmxpc3QiVDsgdGhlbgorCW12IC1mICIkbmxpc3QiVCAiJG5saXN0IgorICAgICAgZWxzZQorCXJtIC1mICIkbmxpc3QiVAorICAgICAgZmkKKworICAgICAgIyBNYWtlIHN1cmUgdGhhdCB3ZSBzbmFnZ2VkIGFsbCB0aGUgc3ltYm9scyB3ZSBuZWVkLgorICAgICAgaWYgJEdSRVAgJyBubV90ZXN0X3ZhciQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKwlpZiAkR1JFUCAnIG5tX3Rlc3RfZnVuYyQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKwkgIGNhdCA8PF9MVF9FT0YgPiBjb25mdGVzdC4kYWNfZXh0CisvKiBLZWVwIHRoaXMgY29kZSBpbiBzeW5jIGJldHdlZW4gbGlidG9vbC5tNCwgbHRtYWluLCBsdF9zeXN0ZW0uaCwgYW5kIHRlc3RzLiAgKi8KKyNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpCisvKiBEQVRBIGltcG9ydHMgZnJvbSBETExzIG9uIFdJTjMyIGNvbid0IGJlIGNvbnN0LCBiZWNhdXNlIHJ1bnRpbWUKKyAgIHJlbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQgLS0gc2VlIGxkJ3MgZG9jdW1lbnRhdGlvbiBvbiBwc2V1ZG8tcmVsb2NzLiAgKi8KKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCisjZWxpZiBkZWZpbmVkKF9fb3NmX18pCisvKiBUaGlzIHN5c3RlbSBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCByZWxvY2F0aW9ucyBpbiBjb25zdCBkYXRhLiAgKi8KKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCisjZWxzZQorIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QgY29uc3QKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK19MVF9FT0YKKwkgICMgTm93IGdlbmVyYXRlIHRoZSBzeW1ib2wgZmlsZS4KKwkgIGV2YWwgIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCInIDwgIiRubGlzdCIgfCAkR1JFUCAtdiBtYWluID4+IGNvbmZ0ZXN0LiRhY19leHQnCisKKwkgIGNhdCA8PF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAorCisvKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gICovCitMVF9ETFNZTV9DT05TVCBzdHJ1Y3QgeworICBjb25zdCBjaGFyICpuYW1lOworICB2b2lkICAgICAgICphZGRyZXNzOworfQorbHRfX1BST0dSQU1fX0xUWF9wcmVsb2FkZWRfc3ltYm9sc1tdID0KK3sKKyAgeyAiQFBST0dSQU1AIiwgKHZvaWQgKikgMCB9LAorX0xUX0VPRgorCSAgJFNFRCAicy9eJHN5bWNvZGUkc3ltY29kZSogXCguKlwpIFwoLipcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvIiA8ICIkbmxpc3QiIHwgJEdSRVAgLXYgbWFpbiA+PiBjb25mdGVzdC4kYWNfZXh0CisJICBjYXQgPDxcX0xUX0VPRiA+PiBjb25mdGVzdC4kYWNfZXh0CisgIHswLCAodm9pZCAqKSAwfQorfTsKKworLyogVGhpcyB3b3JrcyBhcm91bmQgYSBwcm9ibGVtIGluIEZyZWVCU0QgbGlua2VyICovCisjaWZkZWYgRlJFRUJTRF9XT1JLQVJPVU5ECitzdGF0aWMgY29uc3Qgdm9pZCAqbHRfcHJlbG9hZGVkX3NldHVwKCkgeworICByZXR1cm4gbHRfX1BST0dSQU1fX0xUWF9wcmVsb2FkZWRfc3ltYm9sczsKK30KKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorX0xUX0VPRgorCSAgIyBOb3cgdHJ5IGxpbmtpbmcgdGhlIHR3byBmaWxlcy4KKwkgIG12IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRzdG0uJGFjX29iamV4dAorCSAgbHRfZ2xvYnN5bV9zYXZlX0xJQlM9JExJQlMKKwkgIGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1M9JENGTEFHUworCSAgTElCUz0iY29uZnRzdG0uJGFjX29iamV4dCIKKwkgIENGTEFHUz0iJENGTEFHUyRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIKKwkgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19saW5rXCIiOyB9ID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorCSAgICBwaXBlX3dvcmtzPXllcworCSAgZmkKKwkgIExJQlM9JGx0X2dsb2JzeW1fc2F2ZV9MSUJTCisJICBDRkxBR1M9JGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1MKKwllbHNlCisJICBlY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X2Z1bmMgaW4gJG5saXN0IiA+JjUKKwlmaQorICAgICAgZWxzZQorCWVjaG8gImNhbm5vdCBmaW5kIG5tX3Rlc3RfdmFyIGluICRubGlzdCIgPiY1CisgICAgICBmaQorICAgIGVsc2UKKyAgICAgIGVjaG8gImNhbm5vdCBydW4gJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiID4mNQorICAgIGZpCisgIGVsc2UKKyAgICBlY2hvICIkcHJvZ25hbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICAgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBmaQorICBybSAtcmYgY29uZnRlc3QqIGNvbmZ0c3QqCisKKyAgIyBEbyBub3QgdXNlIHRoZSBnbG9iYWxfc3ltYm9sX3BpcGUgdW5sZXNzIGl0IHdvcmtzLgorICBpZiB0ZXN0ICIkcGlwZV93b3JrcyIgPSB5ZXM7IHRoZW4KKyAgICBicmVhaworICBlbHNlCisgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0KKyAgZmkKK2RvbmUKKworZmkKKworaWYgdGVzdCAteiAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCisgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPQorZmkKK2lmIHRlc3QgLXogIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogZmFpbGVkIiA+JjUKKyRhc19lY2hvICJmYWlsZWQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogb2siID4mNQorJGFzX2VjaG8gIm9rIiA+JjY7IH0KK2ZpCisKKyMgUmVzcG9uc2UgZmlsZSBzdXBwb3J0LgoraWYgdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiTVMgZHVtcGJpbiI7IHRoZW4KKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCitlbGlmICROTSAtLWhlbHAgMj4vZGV2L251bGwgfCBncmVwICdbQF1GSUxFJyA+L2Rldi9udWxsOyB0aGVuCisgIG5tX2ZpbGVfbGlzdF9zcGVjPSdAJworZmkKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN5c3Jvb3QiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN5c3Jvb3QuLi4gIiA+JjY7IH0KKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1zeXNyb290IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9zeXNyb290K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9zeXNyb290OworZWxzZQorICB3aXRoX3N5c3Jvb3Q9bm8KK2ZpCisKKworbHRfc3lzcm9vdD0KK2Nhc2UgJHt3aXRoX3N5c3Jvb3R9IGluICMoCisgeWVzKQorICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgbHRfc3lzcm9vdD1gJENDIC0tcHJpbnQtc3lzcm9vdCAyPi9kZXYvbnVsbGAKKyAgIGZpCisgICA7OyAjKAorIC8qKQorICAgbHRfc3lzcm9vdD1gZWNobyAiJHdpdGhfc3lzcm9vdCIgfCBzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorICAgOzsgIygKKyBub3wnJykKKyAgIDs7ICMoCisgKikKKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAke3dpdGhfc3lzcm9vdH0iID4mNQorJGFzX2VjaG8gIiR7d2l0aF9zeXNyb290fSIgPiY2OyB9CisgICBhc19mbl9lcnJvciAkPyAiVGhlIHN5c3Jvb3QgbXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoLiIgIiRMSU5FTk8iIDUKKyAgIDs7Citlc2FjCisKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHtsdF9zeXNyb290Oi1ub30iID4mNQorJGFzX2VjaG8gIiR7bHRfc3lzcm9vdDotbm99IiA+JjY7IH0KKworCisKKworCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGlidG9vbC1sb2NrIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2xpYnRvb2xfbG9jaytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2xpYnRvb2xfbG9jazsKK2ZpCisKK3Rlc3QgIngkZW5hYmxlX2xpYnRvb2xfbG9jayIgIT0geG5vICYmIGVuYWJsZV9saWJ0b29sX2xvY2s9eWVzCisKKyMgU29tZSBmbGFncyBuZWVkIHRvIGJlIHByb3BhZ2F0ZWQgdG8gdGhlIGNvbXBpbGVyIG9yIGxpbmtlciBmb3IgZ29vZAorIyBsaWJ0b29sIHN1cHBvcnQuCitjYXNlICRob3N0IGluCitpYTY0LSotaHB1eCopCisgICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKyAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKyAgICAgICpFTEYtMzIqKQorCUhQVVhfSUE2NF9NT0RFPSIzMiIKKwk7OworICAgICAgKkVMRi02NCopCisJSFBVWF9JQTY0X01PREU9IjY0IgorCTs7CisgICAgZXNhYworICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7CisqLSotaXJpeDYqKQorICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCisgIGVjaG8gJyNsaW5lICckTElORU5PJyAiY29uZmlndXJlIicgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgICBpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19nbnVfbGQiID0geWVzOyB0aGVuCisgICAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisJKjMyLWJpdCopCisJICBMRD0iJHtMRC1sZH0gLW1lbGYzMmJzbWlwIgorCSAgOzsKKwkqTjMyKikKKwkgIExEPSIke0xELWxkfSAtbWVsZjMyYm1pcG4zMiIKKwkgIDs7CisJKjY0LWJpdCopCisJICBMRD0iJHtMRC1sZH0gLW1lbGY2NGJtaXAiCisJOzsKKyAgICAgIGVzYWMKKyAgICBlbHNlCisgICAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisJKjMyLWJpdCopCisJICBMRD0iJHtMRC1sZH0gLTMyIgorCSAgOzsKKwkqTjMyKikKKwkgIExEPSIke0xELWxkfSAtbjMyIgorCSAgOzsKKwkqNjQtYml0KikKKwkgIExEPSIke0xELWxkfSAtNjQiCisJICA7OworICAgICAgZXNhYworICAgIGZpCisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgOzsKKworeDg2XzY0LSprZnJlZWJzZCotZ251fHg4Nl82NC0qbGludXgqfHBwYyotKmxpbnV4Knxwb3dlcnBjKi0qbGludXgqfCBcCitzMzkwKi0qbGludXgqfHMzOTAqLSp0cGYqfHNwYXJjKi0qbGludXgqKQorICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCisgIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0Lm9gIGluCisgICAgICAqMzItYml0KikKKwljYXNlICRob3N0IGluCisJICB4ODZfNjQtKmtmcmVlYnNkKi1nbnUpCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfaTM4Nl9mYnNkIgorCSAgICA7OworCSAgeDg2XzY0LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfaTM4NiIKKwkgICAgOzsKKwkgIHBwYzY0LSpsaW51eCp8cG93ZXJwYzY0LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGYzMnBwY2xpbnV4IgorCSAgICA7OworCSAgczM5MHgtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl9zMzkwIgorCSAgICA7OworCSAgc3BhcmM2NC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJfc3BhcmMiCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICAqNjQtYml0KikKKwljYXNlICRob3N0IGluCisJICB4ODZfNjQtKmtmcmVlYnNkKi1nbnUpCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfeDg2XzY0X2Zic2QiCisJICAgIDs7CisJICB4ODZfNjQtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjQiCisJICAgIDs7CisJICBwcGMqLSpsaW51eCp8cG93ZXJwYyotKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0cHBjIgorCSAgICA7OworCSAgczM5MCotKmxpbnV4KnxzMzkwKi0qdHBmKikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3MzOTAiCisJICAgIDs7CisJICBzcGFyYyotKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3NwYXJjIgorCSAgICA7OworCWVzYWMKKwk7OworICAgIGVzYWMKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworCisqLSotc2NvMy4ydjUqKQorICAjIE9uIFNDTyBPcGVuU2VydmVyIDUsIHdlIG5lZWQgLWJlbGYgdG8gZ2V0IGZ1bGwtZmVhdHVyZWQgYmluYXJpZXMuCisgIFNBVkVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICBDRkxBR1M9IiRDRkxBR1MgLWJlbGYiCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciBuZWVkcyAtYmVsZiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIG5lZWRzIC1iZWxmLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X2NjX25lZWRzX2JlbGYrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKKyAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGx0X2N2X2NjX25lZWRzX2JlbGY9eWVzCitlbHNlCisgIGx0X2N2X2NjX25lZWRzX2JlbGY9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICBhY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2NjX25lZWRzX2JlbGYiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9jY19uZWVkc19iZWxmIiA+JjY7IH0KKyAgaWYgdGVzdCB4IiRsdF9jdl9jY19uZWVkc19iZWxmIiAhPSB4InllcyI7IHRoZW4KKyAgICAjIHRoaXMgaXMgcHJvYmFibHkgZ2NjIDIuOC4wLCBlZ2NzIDEuMCBvciBuZXdlcjsgbm8gbmVlZCBmb3IgLWJlbGYKKyAgICBDRkxBR1M9IiRTQVZFX0NGTEFHUyIKKyAgZmkKKyAgOzsKKyotKnNvbGFyaXMqKQorICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCisgIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0Lm9gIGluCisgICAgKjY0LWJpdCopCisgICAgICBjYXNlICRsdF9jdl9wcm9nX2dudV9sZCBpbgorICAgICAgeWVzKikKKyAgICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgICBpPzg2LSotc29sYXJpcyopCisgICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjQiCisgICAgICAgICAgOzsKKyAgICAgICAgc3BhcmMqLSotc29sYXJpcyopCisgICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3NwYXJjIgorICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgIyBHTlUgbGQgMi4yMSBpbnRyb2R1Y2VkIF9zb2wyIGVtdWxhdGlvbnMuICBVc2UgdGhlbSBpZiBhdmFpbGFibGUuCisgICAgICAgIGlmICR7TEQtbGR9IC1WIHwgZ3JlcCBfc29sMiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgICAgICBMRD0iJHtMRC1sZH1fc29sMiIKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgICopCisJaWYgJHtMRC1sZH0gLTY0IC1yIC1vIGNvbmZ0ZXN0Mi5vIGNvbmZ0ZXN0Lm8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJICBMRD0iJHtMRC1sZH0gLTY0IgorCWZpCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgICAgZXNhYworICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7Citlc2FjCisKK25lZWRfbG9ja3M9IiRlbmFibGVfbGlidG9vbF9sb2NrIgorCitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1tdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1tdDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRNQU5JRkVTVF9UT09MIjsgdGhlbgorICBhY19jdl9wcm9nX01BTklGRVNUX1RPT0w9IiRNQU5JRkVTVF9UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTD0iJHthY190b29sX3ByZWZpeH1tdCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitNQU5JRkVTVF9UT09MPSRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wKK2lmIHRlc3QgLW4gIiRNQU5JRkVTVF9UT09MIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1BTklGRVNUX1RPT0wiID4mNQorJGFzX2VjaG8gIiRNQU5JRkVTVF9UT09MIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MIjsgdGhlbgorICBhY19jdF9NQU5JRkVTVF9UT09MPSRNQU5JRkVTVF9UT09MCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IG10OyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X01BTklGRVNUX1RPT0wiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTD0iJGFjX2N0X01BTklGRVNUX1RPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MPSJtdCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9NQU5JRkVTVF9UT09MPSRhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0wKK2lmIHRlc3QgLW4gIiRhY19jdF9NQU5JRkVTVF9UT09MIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X01BTklGRVNUX1RPT0wiID4mNQorJGFzX2VjaG8gIiRhY19jdF9NQU5JRkVTVF9UT09MIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPSB4OyB0aGVuCisgICAgTUFOSUZFU1RfVE9PTD0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBNQU5JRkVTVF9UT09MPSRhY19jdF9NQU5JRkVTVF9UT09MCisgIGZpCitlbHNlCisgIE1BTklGRVNUX1RPT0w9IiRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wiCitmaQorCit0ZXN0IC16ICIkTUFOSUZFU1RfVE9PTCIgJiYgTUFOSUZFU1RfVE9PTD1tdAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkTUFOSUZFU1RfVE9PTCBpcyBhIG1hbmlmZXN0IHRvb2wiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJE1BTklGRVNUX1RPT0wgaXMgYSBtYW5pZmVzdCB0b29sLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD1ubworICBlY2hvICIkYXNfbWU6JExJTkVOTzogJE1BTklGRVNUX1RPT0wgJy0/JyIgPiY1CisgICRNQU5JRkVTVF9UT09MICctPycgMj5jb25mdGVzdC5lcnIgPiBjb25mdGVzdC5vdXQKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgaWYgJEdSRVAgJ01hbmlmZXN0IFRvb2wnIGNvbmZ0ZXN0Lm91dCA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD15ZXMKKyAgZmkKKyAgcm0gLWYgY29uZnRlc3QqCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiID4mNjsgfQoraWYgdGVzdCAieCRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiICE9IHh5ZXM7IHRoZW4KKyAgTUFOSUZFU1RfVE9PTD06CitmaQorCisKKworCisKKworICBjYXNlICRob3N0X29zIGluCisgICAgcmhhcHNvZHkqIHwgZGFyd2luKikKKyAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1kc3ltdXRpbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1kc3ltdXRpbDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfRFNZTVVUSUwrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkRFNZTVVUSUwiOyB0aGVuCisgIGFjX2N2X3Byb2dfRFNZTVVUSUw9IiREU1lNVVRJTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX0RTWU1VVElMPSIke2FjX3Rvb2xfcHJlZml4fWRzeW11dGlsIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0RTWU1VVElMPSRhY19jdl9wcm9nX0RTWU1VVElMCitpZiB0ZXN0IC1uICIkRFNZTVVUSUwiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkRFNZTVVUSUwiID4mNQorJGFzX2VjaG8gIiREU1lNVVRJTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfRFNZTVVUSUwiOyB0aGVuCisgIGFjX2N0X0RTWU1VVElMPSREU1lNVVRJTAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImRzeW11dGlsIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBkc3ltdXRpbDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfRFNZTVVUSUwrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfRFNZTVVUSUwiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfRFNZTVVUSUw9IiRhY19jdF9EU1lNVVRJTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0RTWU1VVElMPSJkc3ltdXRpbCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9EU1lNVVRJTD0kYWNfY3ZfcHJvZ19hY19jdF9EU1lNVVRJTAoraWYgdGVzdCAtbiAiJGFjX2N0X0RTWU1VVElMIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0RTWU1VVElMIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfRFNZTVVUSUwiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9EU1lNVVRJTCIgPSB4OyB0aGVuCisgICAgRFNZTVVUSUw9IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgRFNZTVVUSUw9JGFjX2N0X0RTWU1VVElMCisgIGZpCitlbHNlCisgIERTWU1VVElMPSIkYWNfY3ZfcHJvZ19EU1lNVVRJTCIKK2ZpCisKKyAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1ubWVkaXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9bm1lZGl0OyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19OTUVESVQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkTk1FRElUIjsgdGhlbgorICBhY19jdl9wcm9nX05NRURJVD0iJE5NRURJVCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX05NRURJVD0iJHthY190b29sX3ByZWZpeH1ubWVkaXQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorTk1FRElUPSRhY19jdl9wcm9nX05NRURJVAoraWYgdGVzdCAtbiAiJE5NRURJVCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICROTUVESVQiID4mNQorJGFzX2VjaG8gIiROTUVESVQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX05NRURJVCI7IHRoZW4KKyAgYWNfY3RfTk1FRElUPSROTUVESVQKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJubWVkaXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IG5tZWRpdDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfTk1FRElUKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X05NRURJVCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9OTUVESVQ9IiRhY19jdF9OTUVESVQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9OTUVESVQ9Im5tZWRpdCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9OTUVESVQ9JGFjX2N2X3Byb2dfYWNfY3RfTk1FRElUCitpZiB0ZXN0IC1uICIkYWNfY3RfTk1FRElUIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X05NRURJVCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X05NRURJVCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X05NRURJVCIgPSB4OyB0aGVuCisgICAgTk1FRElUPSI6IgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIE5NRURJVD0kYWNfY3RfTk1FRElUCisgIGZpCitlbHNlCisgIE5NRURJVD0iJGFjX2N2X3Byb2dfTk1FRElUIgorZmkKKworICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWxpcG8iLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9bGlwbzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfTElQTys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRMSVBPIjsgdGhlbgorICBhY19jdl9wcm9nX0xJUE89IiRMSVBPIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfTElQTz0iJHthY190b29sX3ByZWZpeH1saXBvIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0xJUE89JGFjX2N2X3Byb2dfTElQTworaWYgdGVzdCAtbiAiJExJUE8iOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTElQTyIgPiY1CiskYXNfZWNobyAiJExJUE8iID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX0xJUE8iOyB0aGVuCisgIGFjX2N0X0xJUE89JExJUE8KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJsaXBvIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBsaXBvOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9MSVBPKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0xJUE8iOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfTElQTz0iJGFjX2N0X0xJUE8iICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9MSVBPPSJsaXBvIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0xJUE89JGFjX2N2X3Byb2dfYWNfY3RfTElQTworaWYgdGVzdCAtbiAiJGFjX2N0X0xJUE8iOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfTElQTyIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0xJUE8iID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9MSVBPIiA9IHg7IHRoZW4KKyAgICBMSVBPPSI6IgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIExJUE89JGFjX2N0X0xJUE8KKyAgZmkKK2Vsc2UKKyAgTElQTz0iJGFjX2N2X3Byb2dfTElQTyIKK2ZpCisKKyAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1vdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1vdG9vbDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfT1RPT0wrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkT1RPT0wiOyB0aGVuCisgIGFjX2N2X3Byb2dfT1RPT0w9IiRPVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX09UT09MPSIke2FjX3Rvb2xfcHJlZml4fW90b29sIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK09UT09MPSRhY19jdl9wcm9nX09UT09MCitpZiB0ZXN0IC1uICIkT1RPT0wiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkT1RPT0wiID4mNQorJGFzX2VjaG8gIiRPVE9PTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfT1RPT0wiOyB0aGVuCisgIGFjX2N0X09UT09MPSRPVE9PTAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm90b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBvdG9vbDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfT1RPT0wrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfT1RPT0wiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfT1RPT0w9IiRhY19jdF9PVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X09UT09MPSJvdG9vbCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9PVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9PVE9PTAoraWYgdGVzdCAtbiAiJGFjX2N0X09UT09MIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X09UT09MIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfT1RPT0wiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9PVE9PTCIgPSB4OyB0aGVuCisgICAgT1RPT0w9IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgT1RPT0w9JGFjX2N0X09UT09MCisgIGZpCitlbHNlCisgIE9UT09MPSIkYWNfY3ZfcHJvZ19PVE9PTCIKK2ZpCisKKyAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1vdG9vbDY0Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW90b29sNjQ7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX09UT09MNjQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkT1RPT0w2NCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19PVE9PTDY0PSIkT1RPT0w2NCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX09UT09MNjQ9IiR7YWNfdG9vbF9wcmVmaXh9b3Rvb2w2NCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitPVE9PTDY0PSRhY19jdl9wcm9nX09UT09MNjQKK2lmIHRlc3QgLW4gIiRPVE9PTDY0IjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE9UT09MNjQiID4mNQorJGFzX2VjaG8gIiRPVE9PTDY0IiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19PVE9PTDY0IjsgdGhlbgorICBhY19jdF9PVE9PTDY0PSRPVE9PTDY0CisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAib3Rvb2w2NCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgb3Rvb2w2NDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfT1RPT0w2NCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9PVE9PTDY0IjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X09UT09MNjQ9IiRhY19jdF9PVE9PTDY0IiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfT1RPT0w2ND0ib3Rvb2w2NCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9PVE9PTDY0PSRhY19jdl9wcm9nX2FjX2N0X09UT09MNjQKK2lmIHRlc3QgLW4gIiRhY19jdF9PVE9PTDY0IjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X09UT09MNjQiID4mNQorJGFzX2VjaG8gIiRhY19jdF9PVE9PTDY0IiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfT1RPT0w2NCIgPSB4OyB0aGVuCisgICAgT1RPT0w2ND0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBPVE9PTDY0PSRhY19jdF9PVE9PTDY0CisgIGZpCitlbHNlCisgIE9UT09MNjQ9IiRhY19jdl9wcm9nX09UT09MNjQiCitmaQorCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIC1zaW5nbGVfbW9kdWxlIGxpbmtlciBmbGFnIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAtc2luZ2xlX21vZHVsZSBsaW5rZXIgZmxhZy4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZD1ubworICAgICAgaWYgdGVzdCAteiAiJHtMVF9NVUxUSV9NT0RVTEV9IjsgdGhlbgorCSMgQnkgZGVmYXVsdCB3ZSB3aWxsIGFkZCB0aGUgLXNpbmdsZV9tb2R1bGUgZmxhZy4gWW91IGNhbiBvdmVycmlkZQorCSMgYnkgZWl0aGVyIHNldHRpbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIExUX01VTFRJX01PRFVMRQorCSMgbm9uLWVtcHR5IGF0IGNvbmZpZ3VyZSB0aW1lLCBvciBieSBhZGRpbmcgLW11bHRpX21vZHVsZSB0byB0aGUKKwkjIGxpbmsgZmxhZ3MuCisJcm0gLXJmIGxpYmNvbmZ0ZXN0LmR5bGliKgorCWVjaG8gImludCBmb28odm9pZCl7cmV0dXJuIDE7fSIgPiBjb25mdGVzdC5jCisJZWNobyAiJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGxpYmNvbmZ0ZXN0LmR5bGliIFwKKy1keW5hbWljbGliIC1XbCwtc2luZ2xlX21vZHVsZSBjb25mdGVzdC5jIiA+JjUKKwkkTFRDQyAkTFRDRkxBR1MgJExERkxBR1MgLW8gbGliY29uZnRlc3QuZHlsaWIgXAorCSAgLWR5bmFtaWNsaWIgLVdsLC1zaW5nbGVfbW9kdWxlIGNvbmZ0ZXN0LmMgMj5jb25mdGVzdC5lcnIKKyAgICAgICAgX2x0X3Jlc3VsdD0kPworCSMgSWYgdGhlcmUgaXMgYSBub24tZW1wdHkgZXJyb3IgbG9nLCBhbmQgInNpbmdsZV9tb2R1bGUiCisJIyBhcHBlYXJzIGluIGl0LCBhc3N1bWUgdGhlIGZsYWcgY2F1c2VkIGEgbGlua2VyIHdhcm5pbmcKKyAgICAgICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnIgJiYgJEdSRVAgc2luZ2xlX21vZHVsZSBjb25mdGVzdC5lcnI7IHRoZW4KKwkgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisJIyBPdGhlcndpc2UsIGlmIHRoZSBvdXRwdXQgd2FzIGNyZWF0ZWQgd2l0aCBhIDAgZXhpdCBjb2RlIGZyb20KKwkjIHRoZSBjb21waWxlciwgaXQgd29ya2VkLgorCWVsaWYgdGVzdCAtZiBsaWJjb25mdGVzdC5keWxpYiAmJiB0ZXN0ICRfbHRfcmVzdWx0IC1lcSAwOyB0aGVuCisJICBsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kPXllcworCWVsc2UKKwkgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisJZmkKKwlybSAtcmYgbGliY29uZnRlc3QuZHlsaWIqCisJcm0gLWYgY29uZnRlc3QuKgorICAgICAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kIiA+JjY7IH0KKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgbGlua2VyIGZsYWciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgbGlua2VyIGZsYWcuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0PW5vCisgICAgICBzYXZlX0xERkxBR1M9JExERkxBR1MKKyAgICAgIGVjaG8gIl9tYWluIiA+IGNvbmZ0ZXN0LnN5bQorICAgICAgTERGTEFHUz0iJExERkxBR1MgLVdsLC1leHBvcnRlZF9zeW1ib2xzX2xpc3QsY29uZnRlc3Quc3ltIgorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD15ZXMKK2Vsc2UKKyAgbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKwlMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3QiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3QiID4mNjsgfQorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgLWZvcmNlX2xvYWQgbGlua2VyIGZsYWciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIC1mb3JjZV9sb2FkIGxpbmtlciBmbGFnLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X2xkX2ZvcmNlX2xvYWQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9sZF9mb3JjZV9sb2FkPW5vCisgICAgICBjYXQgPiBjb25mdGVzdC5jIDw8IF9MVF9FT0YKK2ludCBmb3JjZWRfbG9hZGVkKCkgeyByZXR1cm4gMjt9CitfTFRfRU9GCisgICAgICBlY2hvICIkTFRDQyAkTFRDRkxBR1MgLWMgLW8gY29uZnRlc3QubyBjb25mdGVzdC5jIiA+JjUKKyAgICAgICRMVENDICRMVENGTEFHUyAtYyAtbyBjb25mdGVzdC5vIGNvbmZ0ZXN0LmMgMj4mNQorICAgICAgZWNobyAiJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8iID4mNQorICAgICAgJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8gMj4mNQorICAgICAgZWNobyAiJFJBTkxJQiBsaWJjb25mdGVzdC5hIiA+JjUKKyAgICAgICRSQU5MSUIgbGliY29uZnRlc3QuYSAyPiY1CisgICAgICBjYXQgPiBjb25mdGVzdC5jIDw8IF9MVF9FT0YKK2ludCBtYWluKCkgeyByZXR1cm4gMDt9CitfTFRfRU9GCisgICAgICBlY2hvICIkTFRDQyAkTFRDRkxBR1MgJExERkxBR1MgLW8gY29uZnRlc3QgY29uZnRlc3QuYyAtV2wsLWZvcmNlX2xvYWQsLi9saWJjb25mdGVzdC5hIiA+JjUKKyAgICAgICRMVENDICRMVENGTEFHUyAkTERGTEFHUyAtbyBjb25mdGVzdCBjb25mdGVzdC5jIC1XbCwtZm9yY2VfbG9hZCwuL2xpYmNvbmZ0ZXN0LmEgMj5jb25mdGVzdC5lcnIKKyAgICAgIF9sdF9yZXN1bHQ9JD8KKyAgICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyICYmICRHUkVQIGZvcmNlX2xvYWQgY29uZnRlc3QuZXJyOyB0aGVuCisJY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgICAgIGVsaWYgdGVzdCAtZiBjb25mdGVzdCAmJiB0ZXN0ICRfbHRfcmVzdWx0IC1lcSAwICYmICRHUkVQIGZvcmNlZF9sb2FkIGNvbmZ0ZXN0ID4vZGV2L251bGwgMj4mMSA7IHRoZW4KKwlsdF9jdl9sZF9mb3JjZV9sb2FkPXllcworICAgICAgZWxzZQorCWNhdCBjb25mdGVzdC5lcnIgPiY1CisgICAgICBmaQorICAgICAgICBybSAtZiBjb25mdGVzdC5lcnIgbGliY29uZnRlc3QuYSBjb25mdGVzdCBjb25mdGVzdC5jCisgICAgICAgIHJtIC1yZiBjb25mdGVzdC5kU1lNCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2xkX2ZvcmNlX2xvYWQiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9sZF9mb3JjZV9sb2FkIiA+JjY7IH0KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgcmhhcHNvZHkqIHwgZGFyd2luMS5bMDEyXSkKKyAgICAgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKKyAgICBkYXJ3aW4xLiopCisgICAgICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CisgICAgZGFyd2luKikgIyBkYXJ3aW4gNS54IG9uCisgICAgICAjIGlmIHJ1bm5pbmcgb24gMTAuNSBvciBsYXRlciwgdGhlIGRlcGxveW1lbnQgdGFyZ2V0IGRlZmF1bHRzCisgICAgICAjIHRvIHRoZSBPUyB2ZXJzaW9uLCBpZiBvbiB4ODYsIGFuZCAxMC40LCB0aGUgZGVwbG95bWVudAorICAgICAgIyB0YXJnZXQgZGVmYXVsdHMgdG8gMTAuNC4gRG9uJ3QgeW91IGxvdmUgaXQ/CisgICAgICBjYXNlICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VULTEwLjB9LCRob3N0IGluCisJMTAuMCwqODYqLWRhcndpbjgqfDEwLjAsKi1kYXJ3aW5bOTFdKikKKwkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS11bmRlZmluZWQgJHt3bH1keW5hbWljX2xvb2t1cCcgOzsKKwkxMC5bMDEyXSopCisJICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CisJMTAuKikKKwkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS11bmRlZmluZWQgJHt3bH1keW5hbWljX2xvb2t1cCcgOzsKKyAgICAgIGVzYWMKKyAgICA7OworICBlc2FjCisgICAgaWYgdGVzdCAiJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiID0gInllcyI7IHRoZW4KKyAgICAgIF9sdF9kYXJfc2luZ2xlX21vZD0nJHNpbmdsZV9tb2R1bGUnCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0IiA9ICJ5ZXMiOyB0aGVuCisgICAgICBfbHRfZGFyX2V4cG9ydF9zeW1zPScgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sc19saXN0LCRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0nCisgICAgZWxzZQorICAgICAgX2x0X2Rhcl9leHBvcnRfc3ltcz0nfiROTUVESVQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkRFNZTVVUSUwiICE9ICI6IiAmJiB0ZXN0ICIkbHRfY3ZfbGRfZm9yY2VfbG9hZCIgPSAibm8iOyB0aGVuCisgICAgICBfbHRfZHN5bXV0aWw9J34kRFNZTVVUSUwgJGxpYiB8fCA6JworICAgIGVsc2UKKyAgICAgIF9sdF9kc3ltdXRpbD0KKyAgICBmaQorICAgIDs7CisgIGVzYWMKKworZm9yIGFjX2hlYWRlciBpbiBkbGZjbi5oCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICJkbGZjbi5oIiAiYWNfY3ZfaGVhZGVyX2RsZmNuX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdAorIgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfZGxmY25faCIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0RMRkNOX0ggMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCisKK2Z1bmNfc3RyaXBuYW1lX2NuZiAoKQoreworICBjYXNlICR7Mn0gaW4KKyAgLiopIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJVxcXFwkezJ9XCQlJSJgOzsKKyAgKikgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJSR7Mn1cJCUlImA7OworICBlc2FjCit9ICMgZnVuY19zdHJpcG5hbWVfY25mCisKKworCisKKworIyBTZXQgb3B0aW9ucworCisKKworICAgICAgICBlbmFibGVfZGxvcGVuPW5vCisKKworICBlbmFibGVfd2luMzJfZGxsPW5vCisKKworICAgICAgICAgICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXNoYXJlZCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9zaGFyZWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9zaGFyZWQ7IHA9JHtQQUNLQUdFLWRlZmF1bHR9CisgICAgY2FzZSAkZW5hYmxldmFsIGluCisgICAgeWVzKSBlbmFibGVfc2hhcmVkPXllcyA7OworICAgIG5vKSBlbmFibGVfc2hhcmVkPW5vIDs7CisgICAgKikKKyAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KKyAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KKyAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgorICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbworCUlGUz0iJGx0X3NhdmVfaWZzIgorCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCisJICBlbmFibGVfc2hhcmVkPXllcworCWZpCisgICAgICBkb25lCisgICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIDs7CisgICAgZXNhYworZWxzZQorICBlbmFibGVfc2hhcmVkPXllcworZmkKKworCisKKworCisKKworCisKKyAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXN0YXRpYyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9zdGF0aWMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9zdGF0aWM7IHA9JHtQQUNLQUdFLWRlZmF1bHR9CisgICAgY2FzZSAkZW5hYmxldmFsIGluCisgICAgeWVzKSBlbmFibGVfc3RhdGljPXllcyA7OworICAgIG5vKSBlbmFibGVfc3RhdGljPW5vIDs7CisgICAgKikKKyAgICAgZW5hYmxlX3N0YXRpYz1ubworICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgorICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCisgICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCisJSUZTPSIkbHRfc2F2ZV9pZnMiCisJaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KKwkgIGVuYWJsZV9zdGF0aWM9eWVzCisJZmkKKyAgICAgIGRvbmUKKyAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgICAgOzsKKyAgICBlc2FjCitlbHNlCisgIGVuYWJsZV9zdGF0aWM9eWVzCitmaQorCisKKworCisKKworCisKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXBpYyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfcGljK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9waWM7IGx0X3A9JHtQQUNLQUdFLWRlZmF1bHR9CisgICAgY2FzZSAkd2l0aHZhbCBpbgorICAgIHllc3xubykgcGljX21vZGU9JHdpdGh2YWwgOzsKKyAgICAqKQorICAgICAgcGljX21vZGU9ZGVmYXVsdAorICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgorICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCisgICAgICBmb3IgbHRfcGtnIGluICR3aXRodmFsOyBkbworCUlGUz0iJGx0X3NhdmVfaWZzIgorCWlmIHRlc3QgIlgkbHRfcGtnIiA9ICJYJGx0X3AiOyB0aGVuCisJICBwaWNfbW9kZT15ZXMKKwlmaQorICAgICAgZG9uZQorICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICA7OworICAgIGVzYWMKK2Vsc2UKKyAgcGljX21vZGU9ZGVmYXVsdAorZmkKKworCit0ZXN0IC16ICIkcGljX21vZGUiICYmIHBpY19tb2RlPWRlZmF1bHQKKworCisKKworCisKKworICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZmFzdC1pbnN0YWxsIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2Zhc3RfaW5zdGFsbCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2Zhc3RfaW5zdGFsbDsgcD0ke1BBQ0tBR0UtZGVmYXVsdH0KKyAgICBjYXNlICRlbmFibGV2YWwgaW4KKyAgICB5ZXMpIGVuYWJsZV9mYXN0X2luc3RhbGw9eWVzIDs7CisgICAgbm8pIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8gOzsKKyAgICAqKQorICAgICAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubworICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgorICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCisgICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCisJSUZTPSIkbHRfc2F2ZV9pZnMiCisJaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KKwkgIGVuYWJsZV9mYXN0X2luc3RhbGw9eWVzCisJZmkKKyAgICAgIGRvbmUKKyAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgICAgOzsKKyAgICBlc2FjCitlbHNlCisgIGVuYWJsZV9mYXN0X2luc3RhbGw9eWVzCitmaQorCisKKworCisKKworCisKKworCisKKyMgVGhpcyBjYW4gYmUgdXNlZCB0byByZWJ1aWxkIGxpYnRvb2wgd2hlbiBuZWVkZWQKK0xJQlRPT0xfREVQUz0iJGx0bWFpbiIKKworIyBBbHdheXMgdXNlIG91ciBvd24gbGlidG9vbC4KK0xJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKS9saWJ0b29sJworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKwordGVzdCAteiAiJExOX1MiICYmIExOX1M9ImxuIC1zIgorCisKKworCisKKworCisKKworCisKKworCisKK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCisgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZmkKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igb2JqZGlyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBvYmpkaXIuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3Zfb2JqZGlyKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgcm0gLWYgLmxpYnMgMj4vZGV2L251bGwKK21rZGlyIC5saWJzIDI+L2Rldi9udWxsCitpZiB0ZXN0IC1kIC5saWJzOyB0aGVuCisgIGx0X2N2X29iamRpcj0ubGlicworZWxzZQorICAjIE1TLURPUyBkb2VzIG5vdCBhbGxvdyBmaWxlbmFtZXMgdGhhdCBiZWdpbiB3aXRoIGEgZG90LgorICBsdF9jdl9vYmpkaXI9X2xpYnMKK2ZpCitybWRpciAubGlicyAyPi9kZXYvbnVsbAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3Zfb2JqZGlyIiA+JjUKKyRhc19lY2hvICIkbHRfY3Zfb2JqZGlyIiA+JjY7IH0KK29iamRpcj0kbHRfY3Zfb2JqZGlyCisKKworCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBMVF9PQkpESVIgIiRsdF9jdl9vYmpkaXIvIgorX0FDRU9GCisKKworCisKK2Nhc2UgJGhvc3Rfb3MgaW4KK2FpeDMqKQorICAjIEFJWCBzb21ldGltZXMgaGFzIHByb2JsZW1zIHdpdGggdGhlIEdDQyBjb2xsZWN0MiBwcm9ncmFtLiAgRm9yIHNvbWUKKyAgIyByZWFzb24sIGlmIHdlIHNldCB0aGUgQ09MTEVDVF9OQU1FUyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHByb2JsZW1zCisgICMgdmFuaXNoIGluIGEgcHVmZiBvZiBzbW9rZS4KKyAgaWYgdGVzdCAiWCR7Q09MTEVDVF9OQU1FUytzZXR9IiAhPSBYc2V0OyB0aGVuCisgICAgQ09MTEVDVF9OQU1FUz0KKyAgICBleHBvcnQgQ09MTEVDVF9OQU1FUworICBmaQorICA7OworZXNhYworCisjIEdsb2JhbCB2YXJpYWJsZXM6CitvZmlsZT1saWJ0b29sCitjYW5fYnVpbGRfc2hhcmVkPXllcworCisjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSBgLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKKyMgd2hpY2ggbmVlZHMgJy5saWInKS4KK2xpYmV4dD1hCisKK3dpdGhfZ251X2xkPSIkbHRfY3ZfcHJvZ19nbnVfbGQiCisKK29sZF9DQz0iJENDIgorb2xkX0NGTEFHUz0iJENGTEFHUyIKKworIyBTZXQgc2FuZSBkZWZhdWx0cyBmb3IgdmFyaW91cyB2YXJpYWJsZXMKK3Rlc3QgLXogIiRDQyIgJiYgQ0M9Y2MKK3Rlc3QgLXogIiRMVENDIiAmJiBMVENDPSRDQwordGVzdCAteiAiJExUQ0ZMQUdTIiAmJiBMVENGTEFHUz0kQ0ZMQUdTCit0ZXN0IC16ICIkTEQiICYmIExEPWxkCit0ZXN0IC16ICIkYWNfb2JqZXh0IiAmJiBhY19vYmpleHQ9bworCitmb3IgY2NfdGVtcCBpbiAkY29tcGlsZXIiIjsgZG8KKyAgY2FzZSAkY2NfdGVtcCBpbgorICAgIGNvbXBpbGUgfCAqW1xcL11jb21waWxlIHwgY2NhY2hlIHwgKltcXC9dY2NhY2hlICkgOzsKKyAgICBkaXN0Y2MgfCAqW1xcL11kaXN0Y2MgfCBwdXJpZnkgfCAqW1xcL11wdXJpZnkgKSA7OworICAgIFwtKikgOzsKKyAgICAqKSBicmVhazs7CisgIGVzYWMKK2RvbmUKK2NjX2Jhc2VuYW1lPWAkRUNITyAiJGNjX3RlbXAiIHwgJFNFRCAicyUuKi8lJTsgcyVeJGhvc3RfYWxpYXMtJSUiYAorCisKKyMgT25seSBwZXJmb3JtIHRoZSBjaGVjayBmb3IgZmlsZSwgaWYgdGhlIGNoZWNrIG1ldGhvZCByZXF1aXJlcyBpdAordGVzdCAteiAiJE1BR0lDX0NNRCIgJiYgTUFHSUNfQ01EPWZpbGUKK2Nhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCitmaWxlX21hZ2ljKikKKyAgaWYgdGVzdCAiJGZpbGVfbWFnaWNfY21kIiA9ICckTUFHSUNfQ01EJzsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICR7YWNfdG9vbF9wcmVmaXh9ZmlsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJHthY190b29sX3ByZWZpeH1maWxlLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3BhdGhfTUFHSUNfQ01EKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkTUFHSUNfQ01EIGluCitbXFwvKl0gfCAgPzpbXFwvXSopCisgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSIkTUFHSUNfQ01EIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyopCisgIGx0X3NhdmVfTUFHSUNfQ01EPSIkTUFHSUNfQ01EIgorICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgYWNfZHVtbXk9Ii91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgiCisgIGZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbworICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgaWYgdGVzdCAtZiAkYWNfZGlyLyR7YWNfdG9vbF9wcmVmaXh9ZmlsZTsgdGhlbgorICAgICAgbHRfY3ZfcGF0aF9NQUdJQ19DTUQ9IiRhY19kaXIvJHthY190b29sX3ByZWZpeH1maWxlIgorICAgICAgaWYgdGVzdCAtbiAiJGZpbGVfbWFnaWNfdGVzdF9maWxlIjsgdGhlbgorCWNhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCisJImZpbGVfbWFnaWMgIiopCisJICBmaWxlX21hZ2ljX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogImZpbGVfbWFnaWMgXCguKlwpImAKKwkgIE1BR0lDX0NNRD0iJGx0X2N2X3BhdGhfTUFHSUNfQ01EIgorCSAgaWYgZXZhbCAkZmlsZV9tYWdpY19jbWQgXCRmaWxlX21hZ2ljX3Rlc3RfZmlsZSAyPiAvZGV2L251bGwgfAorCSAgICAkRUdSRVAgIiRmaWxlX21hZ2ljX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICA6CisJICBlbHNlCisJICAgIGNhdCA8PF9MVF9FT0YgMT4mMgorCisqKiogV2FybmluZzogdGhlIGNvbW1hbmQgbGlidG9vbCB1c2VzIHRvIGRldGVjdCBzaGFyZWQgbGlicmFyaWVzLAorKioqICRmaWxlX21hZ2ljX2NtZCwgcHJvZHVjZXMgb3V0cHV0IHRoYXQgbGlidG9vbCBjYW5ub3QgcmVjb2duaXplLgorKioqIFRoZSByZXN1bHQgaXMgdGhhdCBsaWJ0b29sIG1heSBmYWlsIHRvIHJlY29nbml6ZSBzaGFyZWQgbGlicmFyaWVzCisqKiogYXMgc3VjaC4gIFRoaXMgd2lsbCBhZmZlY3QgdGhlIGNyZWF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzIHRoYXQKKyoqKiBkZXBlbmQgb24gc2hhcmVkIGxpYnJhcmllcywgYnV0IHByb2dyYW1zIGxpbmtlZCB3aXRoIHN1Y2ggbGlidG9vbAorKioqIGxpYnJhcmllcyB3aWxsIHdvcmsgcmVnYXJkbGVzcyBvZiB0aGlzIHByb2JsZW0uICBOZXZlcnRoZWxlc3MsIHlvdQorKioqIG1heSB3YW50IHRvIHJlcG9ydCB0aGUgcHJvYmxlbSB0byB5b3VyIHN5c3RlbSBtYW5hZ2VyIGFuZC9vciB0bworKioqIGJ1Zy1saWJ0b29sQGdudS5vcmcKKworX0xUX0VPRgorCSAgZmkgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgYnJlYWsKKyAgICBmaQorICBkb25lCisgIElGUz0iJGx0X3NhdmVfaWZzIgorICBNQUdJQ19DTUQ9IiRsdF9zYXZlX01BR0lDX0NNRCIKKyAgOzsKK2VzYWMKK2ZpCisKK01BR0lDX0NNRD0iJGx0X2N2X3BhdGhfTUFHSUNfQ01EIgoraWYgdGVzdCAtbiAiJE1BR0lDX0NNRCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNQUdJQ19DTUQiID4mNQorJGFzX2VjaG8gIiRNQUdJQ19DTUQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworCisKKworaWYgdGVzdCAteiAiJGx0X2N2X3BhdGhfTUFHSUNfQ01EIjsgdGhlbgorICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZmlsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZmlsZS4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9wYXRoX01BR0lDX0NNRCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJE1BR0lDX0NNRCBpbgorW1xcLypdIHwgID86W1xcL10qKQorICBsdF9jdl9wYXRoX01BR0lDX0NNRD0iJE1BR0lDX0NNRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisqKQorICBsdF9zYXZlX01BR0lDX0NNRD0iJE1BR0lDX0NNRCIKKyAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgIGFjX2R1bW15PSIvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRIIgorICBmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKyAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgJGFjX2Rpci9maWxlOyB0aGVuCisgICAgICBsdF9jdl9wYXRoX01BR0lDX0NNRD0iJGFjX2Rpci9maWxlIgorICAgICAgaWYgdGVzdCAtbiAiJGZpbGVfbWFnaWNfdGVzdF9maWxlIjsgdGhlbgorCWNhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCisJImZpbGVfbWFnaWMgIiopCisJICBmaWxlX21hZ2ljX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogImZpbGVfbWFnaWMgXCguKlwpImAKKwkgIE1BR0lDX0NNRD0iJGx0X2N2X3BhdGhfTUFHSUNfQ01EIgorCSAgaWYgZXZhbCAkZmlsZV9tYWdpY19jbWQgXCRmaWxlX21hZ2ljX3Rlc3RfZmlsZSAyPiAvZGV2L251bGwgfAorCSAgICAkRUdSRVAgIiRmaWxlX21hZ2ljX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICA6CisJICBlbHNlCisJICAgIGNhdCA8PF9MVF9FT0YgMT4mMgorCisqKiogV2FybmluZzogdGhlIGNvbW1hbmQgbGlidG9vbCB1c2VzIHRvIGRldGVjdCBzaGFyZWQgbGlicmFyaWVzLAorKioqICRmaWxlX21hZ2ljX2NtZCwgcHJvZHVjZXMgb3V0cHV0IHRoYXQgbGlidG9vbCBjYW5ub3QgcmVjb2duaXplLgorKioqIFRoZSByZXN1bHQgaXMgdGhhdCBsaWJ0b29sIG1heSBmYWlsIHRvIHJlY29nbml6ZSBzaGFyZWQgbGlicmFyaWVzCisqKiogYXMgc3VjaC4gIFRoaXMgd2lsbCBhZmZlY3QgdGhlIGNyZWF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzIHRoYXQKKyoqKiBkZXBlbmQgb24gc2hhcmVkIGxpYnJhcmllcywgYnV0IHByb2dyYW1zIGxpbmtlZCB3aXRoIHN1Y2ggbGlidG9vbAorKioqIGxpYnJhcmllcyB3aWxsIHdvcmsgcmVnYXJkbGVzcyBvZiB0aGlzIHByb2JsZW0uICBOZXZlcnRoZWxlc3MsIHlvdQorKioqIG1heSB3YW50IHRvIHJlcG9ydCB0aGUgcHJvYmxlbSB0byB5b3VyIHN5c3RlbSBtYW5hZ2VyIGFuZC9vciB0bworKioqIGJ1Zy1saWJ0b29sQGdudS5vcmcKKworX0xUX0VPRgorCSAgZmkgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgYnJlYWsKKyAgICBmaQorICBkb25lCisgIElGUz0iJGx0X3NhdmVfaWZzIgorICBNQUdJQ19DTUQ9IiRsdF9zYXZlX01BR0lDX0NNRCIKKyAgOzsKK2VzYWMKK2ZpCisKK01BR0lDX0NNRD0iJGx0X2N2X3BhdGhfTUFHSUNfQ01EIgoraWYgdGVzdCAtbiAiJE1BR0lDX0NNRCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNQUdJQ19DTUQiID4mNQorJGFzX2VjaG8gIiRNQUdJQ19DTUQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICBlbHNlCisgICAgTUFHSUNfQ01EPToKKyAgZmkKK2ZpCisKKyAgZmkKKyAgOzsKK2VzYWMKKworIyBVc2UgQyBmb3IgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBpbiB0aGUgbGlidG9vbCBzY3JpcHQKKworbHRfc2F2ZV9DQz0iJENDIgorYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCisKKyMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBDIHRlc3Qgc291cmNlcy4KK2FjX2V4dD1jCisKKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBDIHRlc3Qgc291cmNlcy4KK29iamV4dD1vCitvYmpleHQ9JG9iamV4dAorCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJpbnQgc29tZV92YXJpYWJsZSA9IDA7IgorCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cworbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSdpbnQgbWFpbigpe3JldHVybigwKTt9JworCisKKworCisKKworCisjIElmIG5vIEMgY29tcGlsZXIgd2FzIHNwZWNpZmllZCwgdXNlIENDLgorTFRDQz0ke0xUQ0MtIiRDQyJ9CisKKyMgSWYgbm8gQyBjb21waWxlciBmbGFncyB3ZXJlIHNwZWNpZmllZCwgdXNlIENGTEFHUy4KK0xUQ0ZMQUdTPSR7TFRDRkxBR1MtIiRDRkxBR1MifQorCisjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorY29tcGlsZXI9JENDCisKKyMgU2F2ZSB0aGUgZGVmYXVsdCBjb21waWxlciwgc2luY2UgaXQgZ2V0cyBvdmVyd3JpdHRlbiB3aGVuIHRoZSBvdGhlcgorIyB0YWdzIGFyZSBiZWluZyB0ZXN0ZWQsIGFuZCBfTFRfVEFHVkFSKGNvbXBpbGVyLCBbXSkgaXMgYSBOT1AuCitjb21waWxlcl9ERUZBVUxUPSRDQworCisjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0CitlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAorZXZhbCAiJGFjX2NvbXBpbGUiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCitfbHRfY29tcGlsZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCiskUk0gY29uZnRlc3QqCisKK2FjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKK2V2YWwgIiRhY19saW5rIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgorX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKKyRSTSAtciBjb25mdGVzdCoKKworCisjIyBDQVZFQVQgRU1QVE9SOgorIyMgVGhlcmUgaXMgbm8gZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIGZvbGxvd2luZyBtYWNyb3MsIGRvIG5vdCBjaGFuZ2UKKyMjIHRoZSBydW5uaW5nIG9yZGVyIG9yIG90aGVyd2lzZSBtb3ZlIHRoZW0gYXJvdW5kIHVubGVzcyB5b3Uga25vdyBleGFjdGx5CisjIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KK2lmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KKworbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9CisKK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgIG52Y2MqKQorICAgIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPScgLVhjb21waWxlciAtZm5vLWJ1aWx0aW4nIDs7CisgICopCisgICAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9JyAtZm5vLWJ1aWx0aW4nIDs7CisgIGVzYWMKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnM9bm8KKyAgIGFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgICBsdF9jb21waWxlcl9mbGFnPSItZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zIgorICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKKyAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCisgICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCisgICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgorICAgIyBUaGUgb3B0aW9uIGlzIHJlZmVyZW5jZWQgdmlhIGEgdmFyaWFibGUgdG8gYXZvaWQgY29uZnVzaW5nIHNlZC4KKyAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAorICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAorICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkbHRfY29tcGlsZVwiIiA+JjUpCisgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyAiJGFjX291dGZpbGUiOyB0aGVuCisgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCisgICAgICRFQ0hPICIkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+Y29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgorICAgICBpZiB0ZXN0ICEgLXMgY29uZnRlc3QuZXIyIHx8IGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnM9eWVzCisgICAgIGZpCisgICBmaQorICAgJFJNIGNvbmZ0ZXN0KgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucyIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zIiA+JjY7IH0KKworaWYgdGVzdCB4IiRsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucyIgPSB4eWVzOyB0aGVuCisgICAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9IiRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zIgorZWxzZQorICAgIDoKK2ZpCisKK2ZpCisKKworCisKKworCisgIGx0X3Byb2dfY29tcGlsZXJfd2w9CitsdF9wcm9nX2NvbXBpbGVyX3BpYz0KK2x0X3Byb2dfY29tcGlsZXJfc3RhdGljPQorCisKKyAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctc3RhdGljJworCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4KikKKyAgICAgICMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICBmaQorICAgICAgOzsKKworICAgIGFtaWdhb3MqKQorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIHBvd2VycGMpCisgICAgICAgICAgICAjIHNlZSBjb21tZW50IGFib3V0IEFtaWdhT1M0IC5zbyBzdXBwb3J0CisgICAgICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMnCisgICAgICAgIDs7CisgICAgICBtNjhrKQorICAgICAgICAgICAgIyBGSVhNRTogd2UgbmVlZCBhdCBsZWFzdCA2ODAyMCBjb2RlIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dAorICAgICAgICAgICAgIyBhZGRpbmcgdGhlIGAtbTY4MDIwJyBmbGFnIHRvIEdDQyBwcmV2ZW50cyBidWlsZGluZyBhbnl0aGluZyBiZXR0ZXIsCisgICAgICAgICAgICAjIGxpa2UgYC1tNjgwNDAnLgorICAgICAgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1tNjgwMjAgLXJlc2lkZW50MzIgLW1hbHdheXMtcmVzdG9yZS1hNCcKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBiZW9zKiB8IGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCogfCBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgT1Nlcy4KKyAgICAgIDs7CisKKyAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqIHwgY2VnY2MqKQorICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZworICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KKyAgICAgICMgQWx0aG91Z2ggdGhlIGN5Z3dpbiBnY2MgaWdub3JlcyAtZlBJQywgc3RpbGwgbmVlZCB0aGlzIGZvciBvbGQtc3R5bGUKKyAgICAgICMgKC0tZGlzYWJsZS1hdXRvLWltcG9ydCkgbGlicmFyaWVzCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLURETExfRVhQT1JUJworICAgICAgOzsKKworICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCisgICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZuby1jb21tb24nCisgICAgICA7OworCisgICAgaGFpa3UqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIEhhaWt1LgorICAgICAgIyBUaGUgIi1zdGF0aWMiIGZsYWcgZXhpc3RzLCBidXQgaXMgYnJva2VuLgorICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9CisgICAgICA7OworCisgICAgaHB1eCopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgNjQtYml0IFBBIEhQLVVYLCBidXQgbm90IGZvciAzMi1iaXQKKyAgICAgICMgUEEgSFAtVVguICBPbiBJQTY0IEhQLVVYLCBQSUMgaXMgdGhlIGRlZmF1bHQgYnV0IHRoZSBwaWMgZmxhZworICAgICAgIyBzZXRzIHRoZSBkZWZhdWx0IFRMUyBtb2RlbCBhbmQgYWZmZWN0cyBpbmxpbmluZy4KKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBocHBhKjY0KikKKwkjICtaIHRoZSBkZWZhdWx0CisJOzsKKyAgICAgICopCisJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mUElDJworCTs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgaW50ZXJpeFszLTldKikKKyAgICAgICMgSW50ZXJpeCAzLnggZ2NjIC1mcGljLy1mUElDIG9wdGlvbnMgZ2VuZXJhdGUgYnJva2VuIGNvZGUuCisgICAgICAjIEluc3RlYWQsIHdlIHJlbG9jYXRlIHNoYXJlZCBsaWJyYXJpZXMgYXQgcnVudGltZS4KKyAgICAgIDs7CisKKyAgICBtc2Rvc2RqZ3BwKikKKyAgICAgICMgSnVzdCBiZWNhdXNlIHdlIHVzZSBHQ0MgZG9lc24ndCBtZWFuIHdlIHN1ZGRlbmx5IGdldCBzaGFyZWQgbGlicmFyaWVzCisgICAgICAjIG9uIHN5c3RlbXMgdGhhdCBkb24ndCBzdXBwb3J0IHRoZW0uCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQ9bm8KKyAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KKyAgICAgIDs7CisKKyAgICAqbnRvKiB8ICpxbngqKQorICAgICAgIyBRTlggdXNlcyBHTlUgQysrLCBidXQgbmVlZCB0byBkZWZpbmUgLXNoYXJlZCBvcHRpb24gdG9vLCBvdGhlcndpc2UKKyAgICAgICMgaXQgd2lsbCBjb3JlZHVtcC4KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctZlBJQyAtc2hhcmVkJworICAgICAgOzsKKworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0tS2NvbmZvcm1fcGljCisgICAgICBmaQorICAgICAgOzsKKworICAgICopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMnCisgICAgICA7OworICAgIGVzYWMKKworICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgbnZjYyopICMgQ3VkYSBDb21waWxlciBEcml2ZXIgMi4yCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctWGxpbmtlciAnCisgICAgICBpZiB0ZXN0IC1uICIkbHRfcHJvZ19jb21waWxlcl9waWMiOyB0aGVuCisgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSItWGNvbXBpbGVyICRsdF9wcm9nX2NvbXBpbGVyX3BpYyIKKyAgICAgIGZpCisgICAgICA7OworICAgIGVzYWMKKyAgZWxzZQorICAgICMgUE9SVE1FIENoZWNrIGZvciBmbGFnIHRvIHBhc3MgbGlua2VyIGZsYWdzIHRocm91Z2ggdGhlIHN5c3RlbSBjb21waWxlci4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgYWl4KikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgZWxzZQorCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctYm5zbyAtYkk6L2xpYi9zeXNjYWxscy5leHAnCisgICAgICBmaQorICAgICAgOzsKKworICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBwdzMyKiB8IG9zMiogfCBjZWdjYyopCisgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisgICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1ERExMX0VYUE9SVCcKKyAgICAgIDs7CisKKyAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSUE2NCBIUC1VWCBhbmQgNjQtYml0IEhQLVVYLCBidXQKKyAgICAgICMgbm90IGZvciBQQSBIUC1VWC4KKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBocHBhKjY0KnxpYTY0KikKKwkjICtaIHRoZSBkZWZhdWx0CisJOzsKKyAgICAgICopCisJbHRfcHJvZ19jb21waWxlcl9waWM9JytaJworCTs7CisgICAgICBlc2FjCisgICAgICAjIElzIHRoZXJlIGEgYmV0dGVyIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIHRoYXQgd29ya3Mgd2l0aCB0aGUgYnVuZGxlZCBDQz8KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPScke3dsfS1hICR7d2x9YXJjaGl2ZScKKyAgICAgIDs7CisKKyAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKyAgICAgICMgUElDICh3aXRoIC1LUElDKSBpcyB0aGUgZGVmYXVsdC4KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctbm9uX3NoYXJlZCcKKyAgICAgIDs7CisKKyAgICBsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgIyBvbGQgSW50ZWwgZm9yIHg4Nl82NCB3aGljaCBzdGlsbCBzdXBwb3J0ZWQgLUtQSUMuCisgICAgICBlY2MqKQorCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctc3RhdGljJworICAgICAgICA7OworICAgICAgIyBpY2MgdXNlZCB0byBiZSBpbmNvbXBhdGlibGUgd2l0aCBHQ0MuCisgICAgICAjIElDQyAxMCBkb2Vzbid0IGFjY2VwdCAtS1BJQyBhbnkgbW9yZS4KKyAgICAgIGljYyogfCBpZm9ydCopCisJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMnCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1zdGF0aWMnCisgICAgICAgIDs7CisgICAgICAjIExhaGV5IEZvcnRyYW4gOC4xLgorICAgICAgbGY5NSopCisJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLS1zaGFyZWQnCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy0tc3RhdGljJworCTs7CisgICAgICBuYWdmb3IqKQorCSMgTkFHIEZvcnRyYW4gY29tcGlsZXIKKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsLVdsLCwnCisJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1QSUMnCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworCTs7CisgICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCisgICAgICAgICMgUG9ydGxhbmQgR3JvdXAgY29tcGlsZXJzICgqbm90KiB0aGUgUGVudGl1bSBnY2MgY29tcGlsZXIsCisJIyB3aGljaCBsb29rcyB0byBiZSBhIGRlYWQgcHJvamVjdCkKKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworCWx0X3Byb2dfY29tcGlsZXJfcGljPSctZnBpYycKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICAgIDs7CisgICAgICBjY2MqKQorICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworICAgICAgICAjIEFsbCBBbHBoYSBjb2RlIGlzIFBJQy4KKyAgICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1ub25fc2hhcmVkJworICAgICAgICA7OworICAgICAgeGwqIHwgYmd4bCogfCBiZ2YqIHwgbXBpeGwqKQorCSMgSUJNIFhMIEMgOC4wL0ZvcnRyYW4gMTAuMSwgMTEuMSBvbiBQUEMgYW5kIEJsdWVHZW5lCisJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLXFwaWMnCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1xc3RhdGljbGluaycKKwk7OworICAgICAgKikKKwljYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKwkqU3VuXCBDZXJlc1wgRm9ydHJhbiogfCAqU3VuKkZvcnRyYW4qXCBbMS03XS4qIHwgKlN1bipGb3J0cmFuKlwgOC5bMC0zXSopCisJICAjIFN1biBGb3J0cmFuIDguMyBwYXNzZXMgYWxsIHVucmVjb2duaXplZCBmbGFncyB0byB0aGUgbGlua2VyCisJICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCisJICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisJICBsdF9wcm9nX2NvbXBpbGVyX3dsPScnCisJICA7OworCSpTdW5cIEYqIHwgKlN1bipGb3J0cmFuKikKKwkgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKKwkgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKwkgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1Rb3B0aW9uIGxkICcKKwkgIDs7CisJKlN1blwgQyopCisJICAjIFN1biBDIDUuOQorCSAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworCSAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworCSAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKwkgIDs7CisgICAgICAgICpJbnRlbCpcIFtDRl0qQ29tcGlsZXIqKQorCSAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKwkgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctZlBJQycKKwkgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctc3RhdGljJworCSAgOzsKKwkqUG9ydGxhbmRcIEdyb3VwKikKKwkgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisJICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZwaWMnCisJICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisJICA7OworCWVzYWMKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIG5ld3NvczYpCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgKm50byogfCAqcW54KikKKyAgICAgICMgUU5YIHVzZXMgR05VIEMrKywgYnV0IG5lZWQgdG8gZGVmaW5lIC1zaGFyZWQgb3B0aW9uIHRvbywgb3RoZXJ3aXNlCisgICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMgLXNoYXJlZCcKKyAgICAgIDs7CisKKyAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworICAgICAgIyBBbGwgT1NGLzEgY29kZSBpcyBQSUMuCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLW5vbl9zaGFyZWQnCisgICAgICA7OworCisgICAgcmRvcyopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLW5vbl9zaGFyZWQnCisgICAgICA7OworCisgICAgc29sYXJpcyopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgZjc3KiB8IGY5MCogfCBmOTUqIHwgc3VuZjc3KiB8IHN1bmY5MCogfCBzdW5mOTUqKQorCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1Rb3B0aW9uIGxkICc7OworICAgICAgKikKKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJzs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgc3Vub3M0KikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1Rb3B0aW9uIGxkICcKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctUElDJworICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgc3lzdjQqTVAqKQorICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYyA7dGhlbgorCWx0X3Byb2dfY29tcGlsZXJfcGljPSctS2NvbmZvcm1fcGljJworCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgc3lzdjUqIHwgdW5peHdhcmUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IE9wZW5VTklYKikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgdW5pY29zKikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQ9bm8KKyAgICAgIDs7CisKKyAgICB1dHM0KikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctcGljJworICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgICopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQ9bm8KKyAgICAgIDs7CisgICAgZXNhYworICBmaQorCitjYXNlICRob3N0X29zIGluCisgICMgRm9yIHBsYXRmb3JtcyB3aGljaCBkbyBub3Qgc3VwcG9ydCBQSUMsIC1EUElDIGlzIG1lYW5pbmdsZXNzOgorICAqZGpncHAqKQorICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPQorICAgIDs7CisgICopCisgICAgbHRfcHJvZ19jb21waWxlcl9waWM9IiRsdF9wcm9nX2NvbXBpbGVyX3BpYyAtRFBJQyIKKyAgICA7OworZXNhYworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWM9JGx0X3Byb2dfY29tcGlsZXJfcGljCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYyIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljIiA+JjY7IH0KK2x0X3Byb2dfY29tcGlsZXJfcGljPSRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYworCisjCisjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCisjCitpZiB0ZXN0IC1uICIkbHRfcHJvZ19jb21waWxlcl9waWMiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRsdF9wcm9nX2NvbXBpbGVyX3BpYyB3b3JrcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgUElDIGZsYWcgJGx0X3Byb2dfY29tcGlsZXJfcGljIHdvcmtzLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3M9bm8KKyAgIGFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgICBsdF9jb21waWxlcl9mbGFnPSIkbHRfcHJvZ19jb21waWxlcl9waWMgLURQSUMiCisgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgorICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KKyAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKKyAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCisgICAjIFRoZSBvcHRpb24gaXMgcmVmZXJlbmNlZCB2aWEgYSB2YXJpYWJsZSB0byBhdm9pZCBjb25mdXNpbmcgc2VkLgorICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCisgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCisgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsICIkbHRfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCisgICBhY19zdGF0dXM9JD8KKyAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KKyAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzIG90aGVyIHRoYW4gdGhlIHVzdWFsIG91dHB1dC4KKyAgICAgJEVDSE8gIiRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID5jb25mdGVzdC5leHAKKyAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBjb25mdGVzdC5lcjIgfHwgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrcz15ZXMKKyAgICAgZmkKKyAgIGZpCisgICAkUk0gY29uZnRlc3QqCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3MiID4mNjsgfQorCitpZiB0ZXN0IHgiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzIiA9IHh5ZXM7IHRoZW4KKyAgICBjYXNlICRsdF9wcm9nX2NvbXBpbGVyX3BpYyBpbgorICAgICAiIiB8ICIgIiopIDs7CisgICAgICopIGx0X3Byb2dfY29tcGlsZXJfcGljPSIgJGx0X3Byb2dfY29tcGlsZXJfcGljIiA7OworICAgICBlc2FjCitlbHNlCisgICAgbHRfcHJvZ19jb21waWxlcl9waWM9CisgICAgIGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZD1ubworZmkKKworZmkKKworCisKKworCisKKworCisKKworCisjCisjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCisjCit3bD0kbHRfcHJvZ19jb21waWxlcl93bCBldmFsIGx0X3RtcF9zdGF0aWNfZmxhZz1cIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY1wiCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3M9bm8KKyAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisgICBMREZMQUdTPSIkTERGTEFHUyAkbHRfdG1wX3N0YXRpY19mbGFnIgorICAgZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgICBpZiAoZXZhbCAkYWNfbGluayAyPmNvbmZ0ZXN0LmVycikgJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgICAgIyBUaGUgbGlua2VyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICAgICMgQXBwZW5kIGFueSBlcnJvcnMgdG8gdGhlIGNvbmZpZy5sb2cuCisgICAgICAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1CisgICAgICAgJEVDSE8gIiRfbHRfbGlua2VyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+IGNvbmZ0ZXN0LmV4cAorICAgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgorICAgICAgIGlmIGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrcz15ZXMKKyAgICAgICBmaQorICAgICBlbHNlCisgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3M9eWVzCisgICAgIGZpCisgICBmaQorICAgJFJNIC1yIGNvbmZ0ZXN0KgorICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3JrcyIgPiY2OyB9CisKK2lmIHRlc3QgeCIkbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MiID0geHllczsgdGhlbgorICAgIDoKK2Vsc2UKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0KK2ZpCisKKworCisKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfcHJvZ19jb21waWxlcl9jX28rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz1ubworICAgJFJNIC1yIGNvbmZ0ZXN0IDI+L2Rldi9udWxsCisgICBta2RpciBjb25mdGVzdAorICAgY2QgY29uZnRlc3QKKyAgIG1rZGlyIG91dAorICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisKKyAgIGx0X2NvbXBpbGVyX2ZsYWc9Ii1vIG91dC9jb25mdGVzdDIuJGFjX29iamV4dCIKKyAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCisgICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgorICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucworICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KKyAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAorICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAorICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkbHRfY29tcGlsZVwiIiA+JjUpCisgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+b3V0L2NvbmZ0ZXN0LmVycikKKyAgIGFjX3N0YXR1cz0kPworICAgY2F0IG91dC9jb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zIG91dC9jb25mdGVzdDIuJGFjX29iamV4dAorICAgdGhlbgorICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKKyAgICAgJEVDSE8gIiRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID4gb3V0L2NvbmZ0ZXN0LmV4cAorICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgb3V0L2NvbmZ0ZXN0LmVyciA+b3V0L2NvbmZ0ZXN0LmVyMgorICAgICBpZiB0ZXN0ICEgLXMgb3V0L2NvbmZ0ZXN0LmVyMiB8fCBkaWZmIG91dC9jb25mdGVzdC5leHAgb3V0L2NvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX289eWVzCisgICAgIGZpCisgICBmaQorICAgY2htb2QgdSt3IC4gMj4mNQorICAgJFJNIGNvbmZ0ZXN0KgorICAgIyBTR0kgQysrIGNvbXBpbGVyIHdpbGwgY3JlYXRlIGRpcmVjdG9yeSBvdXQvaWlfZmlsZXMvIGZvcgorICAgIyB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uCisgICB0ZXN0IC1kIG91dC9paV9maWxlcyAmJiAkUk0gb3V0L2lpX2ZpbGVzLyogJiYgcm1kaXIgb3V0L2lpX2ZpbGVzCisgICAkUk0gb3V0LyogJiYgcm1kaXIgb3V0CisgICBjZCAuLgorICAgJFJNIC1yIGNvbmZ0ZXN0CisgICAkUk0gY29uZnRlc3QqCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID4mNjsgfQorCisKKworCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dC4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vPW5vCisgICAkUk0gLXIgY29uZnRlc3QgMj4vZGV2L251bGwKKyAgIG1rZGlyIGNvbmZ0ZXN0CisgICBjZCBjb25mdGVzdAorICAgbWtkaXIgb3V0CisgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKworICAgbHRfY29tcGlsZXJfZmxhZz0iLW8gb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0IgorICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKKyAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCisgICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCisgICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgorICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCisgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCisgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0CisgICB0aGVuCisgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICAgICAkRUNITyAiJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBvdXQvY29uZnRlc3QuZXJyID5vdXQvY29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBvdXQvY29uZnRlc3QuZXIyIHx8IGRpZmYgb3V0L2NvbmZ0ZXN0LmV4cCBvdXQvY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz15ZXMKKyAgICAgZmkKKyAgIGZpCisgICBjaG1vZCB1K3cgLiAyPiY1CisgICAkUk0gY29uZnRlc3QqCisgICAjIFNHSSBDKysgY29tcGlsZXIgd2lsbCBjcmVhdGUgZGlyZWN0b3J5IG91dC9paV9maWxlcy8gZm9yCisgICAjIHRlbXBsYXRlIGluc3RhbnRpYXRpb24KKyAgIHRlc3QgLWQgb3V0L2lpX2ZpbGVzICYmICRSTSBvdXQvaWlfZmlsZXMvKiAmJiBybWRpciBvdXQvaWlfZmlsZXMKKyAgICRSTSBvdXQvKiAmJiBybWRpciBvdXQKKyAgIGNkIC4uCisgICAkUk0gLXIgY29uZnRlc3QKKyAgICRSTSBjb25mdGVzdCoKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgPiY2OyB9CisKKworCisKK2hhcmRfbGlua3M9Im5vdHRlc3RlZCIKK2lmIHRlc3QgIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgPSBubyAmJiB0ZXN0ICIkbmVlZF9sb2NrcyIgIT0gbm87IHRoZW4KKyAgIyBkbyBub3Qgb3ZlcndyaXRlIHRoZSB2YWx1ZSBvZiBuZWVkX2xvY2tzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcy4uLiAiID4mNjsgfQorICBoYXJkX2xpbmtzPXllcworICAkUk0gY29uZnRlc3QqCisgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCisgIHRvdWNoIGNvbmZ0ZXN0LmEKKyAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+JjUgfHwgaGFyZF9saW5rcz1ubworICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGhhcmRfbGlua3MiID4mNQorJGFzX2VjaG8gIiRoYXJkX2xpbmtzIiA+JjY7IH0KKyAgaWYgdGVzdCAiJGhhcmRfbGlua3MiID0gbm87IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IFxgJENDJyBkb2VzIG5vdCBzdXBwb3J0IFxgLWMgLW8nLCBzbyBcYG1ha2UgLWonIG1heSBiZSB1bnNhZmUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogXGAkQ0MnIGRvZXMgbm90IHN1cHBvcnQgXGAtYyAtbycsIHNvIFxgbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiYyO30KKyAgICBuZWVkX2xvY2tzPXdhcm4KKyAgZmkKK2Vsc2UKKyAgbmVlZF9sb2Nrcz1ubworZmkKKworCisKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLi4uICIgPiY2OyB9CisKKyAgcnVucGF0aF92YXI9CisgIGFsbG93X3VuZGVmaW5lZF9mbGFnPQorICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9bm8KKyAgYXJjaGl2ZV9jbWRzPQorICBhcmNoaXZlX2V4cHN5bV9jbWRzPQorICBjb21waWxlcl9uZWVkc19vYmplY3Q9bm8KKyAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz1ubworICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9CisgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgaGFyZGNvZGVfYXV0b21hdGljPW5vCisgIGhhcmRjb2RlX2RpcmVjdD1ubworICBoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9bm8KKyAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KKyAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0KKyAgaGFyZGNvZGVfbWludXNfTD1ubworICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPXVuc3VwcG9ydGVkCisgIGluaGVyaXRfcnBhdGg9bm8KKyAgbGlua19hbGxfZGVwbGlicz11bmtub3duCisgIG1vZHVsZV9jbWRzPQorICBtb2R1bGVfZXhwc3ltX2NtZHM9CisgIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9CisgIG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzPQorICB0aHJlYWRfc2FmZV9mbGFnX3NwZWM9CisgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPQorICAjIGluY2x1ZGVfZXhwc3ltcyBzaG91bGQgYmUgYSBsaXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBzeW1ib2xzIHRvIGJlICphbHdheXMqCisgICMgaW5jbHVkZWQgaW4gdGhlIHN5bWJvbCBsaXN0CisgIGluY2x1ZGVfZXhwc3ltcz0KKyAgIyBleGNsdWRlX2V4cHN5bXMgY2FuIGJlIGFuIGV4dGVuZGVkIHJlZ2V4cCBvZiBzeW1ib2xzIHRvIGV4Y2x1ZGUKKyAgIyBpdCB3aWxsIGJlIHdyYXBwZWQgYnkgYCAoJyBhbmQgYCkkJywgc28gb25lIG11c3Qgbm90IG1hdGNoIGJlZ2lubmluZyBvcgorICAjIGVuZCBvZiBsaW5lLiAgRXhhbXBsZTogYGF8YmN8LipkLionIHdpbGwgZXhjbHVkZSB0aGUgc3ltYm9scyBgYScgYW5kIGBiYycsCisgICMgYXMgd2VsbCBhcyBhbnkgc3ltYm9sIHRoYXQgY29udGFpbnMgYGQnLgorICBleGNsdWRlX2V4cHN5bXM9J19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKicKKyAgIyBBbHRob3VnaCBfR0xPQkFMX09GRlNFVF9UQUJMRV8gaXMgYSB2YWxpZCBzeW1ib2wgQyBuYW1lLCBtb3N0IGEub3V0CisgICMgcGxhdGZvcm1zIChhYil1c2UgaXQgaW4gUElDIGNvZGUsIGJ1dCB0aGVpciBsaW5rZXJzIGdldCBjb25mdXNlZCBpZgorICAjIHRoZSBzeW1ib2wgaXMgZXhwbGljaXRseSByZWZlcmVuY2VkLiAgU2luY2UgcG9ydGFibGUgY29kZSBjYW5ub3QKKyAgIyByZWx5IG9uIHRoaXMgc3ltYm9sIG5hbWUsIGl0J3MgcHJvYmFibHkgZmluZSB0byBuZXZlciBpbmNsdWRlIGl0IGluCisgICMgcHJlbG9hZGVkIHN5bWJvbCB0YWJsZXMuCisgICMgRXhjbHVkZSBzaGFyZWQgbGlicmFyeSBpbml0aWFsaXphdGlvbi9maW5hbGl6YXRpb24gc3ltYm9scy4KKyAgZXh0cmFjdF9leHBzeW1zX2NtZHM9CisKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgIyBGSVhNRTogdGhlIE1TVkMrKyBwb3J0IGhhc24ndCBiZWVuIHRlc3RlZCBpbiBhIGxvb29vbmcgdGltZQorICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCisgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKyAgICAgIHdpdGhfZ251X2xkPW5vCisgICAgZmkKKyAgICA7OworICBpbnRlcml4KikKKyAgICAjIHdlIGp1c3QgaG9wZS9hc3N1bWUgdGhpcyBpcyBnY2MgYW5kIG5vdCBjODkgKD0gTVNWQysrKQorICAgIHdpdGhfZ251X2xkPXllcworICAgIDs7CisgIG9wZW5ic2QqKQorICAgIHdpdGhfZ251X2xkPW5vCisgICAgOzsKKyAgZXNhYworCisgIGxkX3NobGlicz15ZXMKKworICAjIE9uIHNvbWUgdGFyZ2V0cywgR05VIGxkIGlzIGNvbXBhdGlibGUgZW5vdWdoIHdpdGggdGhlIG5hdGl2ZSBsaW5rZXIKKyAgIyB0aGF0IHdlJ3JlIGJldHRlciBvZmYgdXNpbmcgdGhlIG5hdGl2ZSBpbnRlcmZhY2UgZm9yIGJvdGguCisgIGx0X3VzZV9nbnVfbGRfaW50ZXJmYWNlPW5vCisgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXgqKQorCSMgVGhlIEFJWCBwb3J0IG9mIEdOVSBsZCBoYXMgYWx3YXlzIGFzcGlyZWQgdG8gY29tcGF0aWJpbGl0eQorCSMgd2l0aCB0aGUgbmF0aXZlIGxpbmtlci4gIEhvd2V2ZXIsIGFzIHRoZSB3YXJuaW5nIGluIHRoZSBHTlUgbGQKKwkjIGJsb2NrIHNheXMsIHZlcnNpb25zIGJlZm9yZSAyLjE5LjUqIGNvdWxkbid0IHJlYWxseSBjcmVhdGUgd29ya2luZworCSMgc2hhcmVkIGxpYnJhcmllcywgcmVnYXJkbGVzcyBvZiB0aGUgaW50ZXJmYWNlIHVzZWQuCisJY2FzZSBgJExEIC12IDI+JjFgIGluCisJICAqXCBcKEdOVVwgQmludXRpbHNcKVwgMi4xOS41KikgOzsKKwkgICpcIFwoR05VXCBCaW51dGlsc1wpXCAyLlsyLTldKikgOzsKKwkgICpcIFwoR05VXCBCaW51dGlsc1wpXCBbMy05XSopIDs7CisJICAqKQorCSAgICBsdF91c2VfZ251X2xkX2ludGVyZmFjZT15ZXMKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgICopCisJbHRfdXNlX2dudV9sZF9pbnRlcmZhY2U9eWVzCisJOzsKKyAgICBlc2FjCisgIGZpCisKKyAgaWYgdGVzdCAiJGx0X3VzZV9nbnVfbGRfaW50ZXJmYWNlIiA9IHllczsgdGhlbgorICAgICMgSWYgYXJjaGl2ZV9jbWRzIHJ1bnMgTEQsIG5vdCBDQywgd2xhcmMgc2hvdWxkIGJlIGVtcHR5CisgICAgd2xhcmM9JyR7d2x9JworCisgICAgIyBTZXQgc29tZSBkZWZhdWx0cyBmb3IgR05VIGxkIHdpdGggc2hhcmVkIGxpYnJhcnkgc3VwcG9ydC4gVGhlc2UKKyAgICAjIGFyZSByZXNldCBsYXRlciBpZiBzaGFyZWQgbGlicmFyaWVzIGFyZSBub3Qgc3VwcG9ydGVkLiBQdXR0aW5nIHRoZW0KKyAgICAjIGhlcmUgYWxsb3dzIHRoZW0gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWNlc3NhcnkuCisgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKyAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCisgICAgIyBhbmNpZW50IEdOVSBsZCBkaWRuJ3Qgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUgZXQuIGFsLgorICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICduby13aG9sZS1hcmNoaXZlJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCisgICAgZWxzZQorICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9CisgICAgZmkKKyAgICBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9bm8KKyAgICBjYXNlIGAkTEQgLXYgMj4mMWAgaW4KKyAgICAgICpHTlVcIGdvbGQqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7CisgICAgICAqXCBbMDFdLiogfCAqXCAyLlswLTldLiogfCAqXCAyLjEwLiopIDs7ICMgY2F0Y2ggdmVyc2lvbnMgPCAyLjExCisgICAgICAqXCAyLjExLjkzLjAuMlwgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OyAjIFJINy4zIC4uLgorICAgICAgKlwgMi4xMS45Mi4wLjEyXCAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7ICMgTWFuZHJha2UgOC4yIC4uLgorICAgICAgKlwgMi4xMS4qKSA7OyAjIG90aGVyIDIuMTEgdmVyc2lvbnMKKyAgICAgICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsKKyAgICBlc2FjCisKKyAgICAjIFNlZSBpZiBHTlUgbGQgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgYWl4WzMtOV0qKQorICAgICAgIyBPbiBBSVgvUFBDLCB0aGUgR05VIGxpbmtlciBpcyB2ZXJ5IGJyb2tlbgorICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0OyB0aGVuCisJbGRfc2hsaWJzPW5vCisJY2F0IDw8X0xUX0VPRiAxPiYyCisKKyoqKiBXYXJuaW5nOiB0aGUgR05VIGxpbmtlciwgYXQgbGVhc3QgdXAgdG8gcmVsZWFzZSAyLjE5LCBpcyByZXBvcnRlZAorKioqIHRvIGJlIHVuYWJsZSB0byByZWxpYWJseSBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBBSVguCisqKiogVGhlcmVmb3JlLCBsaWJ0b29sIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBJZiB5b3UKKyoqKiByZWFsbHkgY2FyZSBmb3Igc2hhcmVkIGxpYnJhcmllcywgeW91IG1heSB3YW50IHRvIGluc3RhbGwgYmludXRpbHMKKyoqKiAyLjIwIG9yIGFib3ZlLCBvciBtb2RpZnkgeW91ciBQQVRIIHNvIHRoYXQgYSBub24tR05VIGxpbmtlciBpcyBmb3VuZC4KKyoqKiBZb3Ugd2lsbCB0aGVuIG5lZWQgdG8gcmVzdGFydCB0aGUgY29uZmlndXJhdGlvbiBwcm9jZXNzLgorCitfTFRfRU9GCisgICAgICBmaQorICAgICAgOzsKKworICAgIGFtaWdhb3MqKQorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIHBvd2VycGMpCisgICAgICAgICAgICAjIHNlZSBjb21tZW50IGFib3V0IEFtaWdhT1M0IC5zbyBzdXBwb3J0CisgICAgICAgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJworICAgICAgICA7OworICAgICAgbTY4aykKKyAgICAgICAgICAgIGFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTkFNRSAkbGlibmFtZSIgPiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIExJQlJBUllfSUQgMSIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBWRVJTSU9OICRtYWpvciIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBSRVZJU0lPTiAkcmV2aXNpb24iID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEFSICRBUl9GTEFHUyAkbGliICRsaWJvYmpzfiRSQU5MSUIgJGxpYn4oY2QgJG91dHB1dF9vYmpkaXIgJiYgYTJpeGxpYnJhcnkgLTMyKScKKyAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgICAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgYmVvcyopCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKwkjIEpvc2VwaCBCZWNrZW5iYWNoIDxqcmIzQGJlc3QuY29tPiBzYXlzIHNvbWUgcmVsZWFzZXMgb2YgZ2NjCisJIyBzdXBwb3J0IC0tdW5kZWZpbmVkLiAgVGhpcyBkZXNlcnZlcyBzb21lIGludmVzdGlnYXRpb24uICBGSVhNRQorCWFyY2hpdmVfY21kcz0nJENDIC1ub3N0YXJ0ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgZWxzZQorCWxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAjIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKKyAgICAgICMgYXMgdGhlcmUgaXMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LS1leHBvcnQtYWxsLXN5bWJvbHMnCisgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPW5vCisgICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworICAgICAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS87cy9eLipbIF1fX25tX19cKFteIF0qXClbIF1bXiBdKi9cMSBEQVRBLzsvXklbIF0vZDsvXltBSVRXXVsgXS9zLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworICAgICAgZXhjbHVkZV9leHBzeW1zPSdbX10rR0xPQkFMX09GRlNFVF9UQUJMRV98W19dK0dMT0JBTF9fW0ZJRF1fLip8W19dK2hlYWRfW0EtWmEtejAtOV9dK19kbGx8W0EtWmEtejAtOV9dK19kbGxfaW5hbWUnCisKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKwkjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUgKDFzdCBsaW5lCisJIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorCSAgY3AgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworCWVsc2UKKwkgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworCSAgY2F0ICRleHBvcnRfc3ltYm9scyA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKwlmaX4KKwkkQ0MgLXNoYXJlZCAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKyAgICAgIGVsc2UKKwlsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgaGFpa3UqKQorICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgIGxpbmtfYWxsX2RlcGxpYnM9eWVzCisgICAgICA7OworCisgICAgaW50ZXJpeFszLTldKikKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tRScKKyAgICAgICMgSGFjazogT24gSW50ZXJpeCAzLngsIHdlIGNhbm5vdCBjb21waWxlIFBJQyBiZWNhdXNlIG9mIGEgYnJva2VuIGdjYy4KKyAgICAgICMgSW5zdGVhZCwgc2hhcmVkIGxpYnJhcmllcyBhcmUgbG9hZGVkIGF0IGFuIGltYWdlIGJhc2UgKDB4MTAwMDAwMDAgYnkKKyAgICAgICMgZGVmYXVsdCkgYW5kIHJlbG9jYXRlZCBpZiB0aGV5IGNvbmZsaWN0LCB3aGljaCBpcyBhIHNsb3cgdmVyeSBtZW1vcnkKKyAgICAgICMgY29uc3VtaW5nIGFuZCBmcmFnbWVudGluZyBwcm9jZXNzLiAgVG8gYXZvaWQgdGhpcywgd2UgcGljayBhIHJhbmRvbSwKKyAgICAgICMgMjU2IEtpQi1hbGlnbmVkIGltYWdlIGJhc2UgYmV0d2VlbiAweDUwMDAwMDAwIGFuZCAweDZGRkMwMDAwIGF0IGxpbmsKKyAgICAgICMgdGltZS4gIE1vdmluZyB1cCBmcm9tIDB4MTAwMDAwMDAgYWxzbyBhbGxvd3MgbW9yZSBzYnJrKDIpIHNwYWNlLgorICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJworICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nc2VkICJzLF4sXywiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKyAgICAgIDs7CisKKyAgICBnbnUqIHwgbGludXgqIHwgdHBmKiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgICAgIHRtcF9kaWV0PW5vCisgICAgICBpZiB0ZXN0ICIkaG9zdF9vcyIgPSBsaW51eC1kaWV0bGliYzsgdGhlbgorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBkaWV0XCAqKSB0bXBfZGlldD15ZXM7OwkjIGxpbnV4LWRpZXRsaWJjIHdpdGggc3RhdGljIGxpbmtpbmcgKCFkaWV0LWR5bikKKwllc2FjCisgICAgICBmaQorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEVHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGwgXAorCSAmJiB0ZXN0ICIkdG1wX2RpZXQiID0gbm8KKyAgICAgIHRoZW4KKwl0bXBfYWRkZmxhZz0nICRwaWNfZmxhZycKKwl0bXBfc2hhcmVkZmxhZz0nLXNoYXJlZCcKKwljYXNlICRjY19iYXNlbmFtZSwkaG9zdF9jcHUgaW4KKyAgICAgICAgcGdjYyopCQkJCSMgUG9ydGxhbmQgR3JvdXAgQyBjb21waWxlcgorCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCisJICA7OworCXBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCisJCQkJCSMgUG9ydGxhbmQgR3JvdXAgZjc3IGFuZCBmOTAgY29tcGlsZXJzCisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICB0bXBfYWRkZmxhZz0nICRwaWNfZmxhZyAtTW5vbWFpbicgOzsKKwllY2MqLGlhNjQqIHwgaWNjKixpYTY0KikJIyBJbnRlbCBDIGNvbXBpbGVyIG9uIGlhNjQKKwkgIHRtcF9hZGRmbGFnPScgLWlfZHluYW1pYycgOzsKKwllZmMqLGlhNjQqIHwgaWZvcnQqLGlhNjQqKQkjIEludGVsIEZvcnRyYW4gY29tcGlsZXIgb24gaWE2NAorCSAgdG1wX2FkZGZsYWc9JyAtaV9keW5hbWljIC1ub2Zvcl9tYWluJyA7OworCWlmYyogfCBpZm9ydCopCQkJIyBJbnRlbCBGb3J0cmFuIGNvbXBpbGVyCisJICB0bXBfYWRkZmxhZz0nIC1ub2Zvcl9tYWluJyA7OworCWxmOTUqKQkJCQkjIExhaGV5IEZvcnRyYW4gOC4xCisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0KKwkgIHRtcF9zaGFyZWRmbGFnPSctLXNoYXJlZCcgOzsKKwl4bFtjQ10qIHwgYmd4bFtjQ10qIHwgbXBpeGxbY0NdKikgIyBJQk0gWEwgQyA4LjAgb24gUFBDIChkZWFsIHdpdGggeGxmIGJlbG93KQorCSAgdG1wX3NoYXJlZGZsYWc9Jy1xbWtzaHJvYmonCisJICB0bXBfYWRkZmxhZz0gOzsKKwludmNjKikJIyBDdWRhIENvbXBpbGVyIERyaXZlciAyLjIKKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIGNvbXBpbGVyX25lZWRzX29iamVjdD15ZXMKKwkgIDs7CisJZXNhYworCWNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorCSpTdW5cIEMqKQkJCSMgU3VuIEMgNS45CisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHt3bH0tLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIGNvbXBpbGVyX25lZWRzX29iamVjdD15ZXMKKwkgIHRtcF9zaGFyZWRmbGFnPSctRycgOzsKKwkqU3VuXCBGKikJCQkjIFN1biBGb3J0cmFuIDguMworCSAgdG1wX3NoYXJlZGZsYWc9Jy1HJyA7OworCWVzYWMKKwlhcmNoaXZlX2NtZHM9JyRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisKKyAgICAgICAgaWYgdGVzdCAieCRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciID0geHllczsgdGhlbgorICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgICRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXZlcnNpb24tc2NyaXB0ICR7d2x9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisgICAgICAgIGZpCisKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCXhsZiogfCBiZ2YqIHwgYmd4bGYqIHwgbXBpeGxmKikKKwkgICMgSUJNIFhMIEZvcnRyYW4gMTAuMSBvbiBQUEMgY2Fubm90IGNyZWF0ZSBzaGFyZWQgbGlicyBpdHNlbGYKKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSctLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgLS1uby13aG9sZS1hcmNoaXZlJworCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworCSAgYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJworCSAgaWYgdGVzdCAieCRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciID0geHllczsgdGhlbgorCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisJICBmaQorCSAgOzsKKwllc2FjCisgICAgICBlbHNlCisgICAgICAgIGxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBuZXRic2QqKQorICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKwlhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1vICRsaWInCisJd2xhcmM9CisgICAgICBlbHNlCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzb2xhcmlzKikKKyAgICAgIGlmICRMRCAtdiAyPiYxIHwgJEdSRVAgJ0JGRCAyXC44JyA+IC9kZXYvbnVsbDsgdGhlbgorCWxkX3NobGlicz1ubworCWNhdCA8PF9MVF9FT0YgMT4mMgorCisqKiogV2FybmluZzogVGhlIHJlbGVhc2VzIDIuOC4qIG9mIHRoZSBHTlUgbGlua2VyIGNhbm5vdCByZWxpYWJseQorKioqIGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIFNvbGFyaXMgc3lzdGVtcy4gIFRoZXJlZm9yZSwgbGlidG9vbAorKioqIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBXZSB1cmdlIHlvdSB0byB1cGdyYWRlIEdOVQorKioqIGJpbnV0aWxzIHRvIHJlbGVhc2UgMi45LjEgb3IgbmV3ZXIuICBBbm90aGVyIG9wdGlvbiBpcyB0byBtb2RpZnkKKyoqKiB5b3VyIFBBVEggb3IgY29tcGlsZXIgY29uZmlndXJhdGlvbiBzbyB0aGF0IHRoZSBuYXRpdmUgbGlua2VyIGlzCisqKiogdXNlZCwgYW5kIHRoZW4gcmVzdGFydC4KKworX0xUX0VPRgorICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgZWxzZQorCWxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqKQorICAgICAgY2FzZSBgJExEIC12IDI+JjFgIGluCisgICAgICAgICpcIFswMV0uKiB8ICpcIDIuWzAtOV0uKiB8ICpcIDIuMVswLTVdLiopCisJbGRfc2hsaWJzPW5vCisJY2F0IDw8X0xUX0VPRiAxPiYyCisKKyoqKiBXYXJuaW5nOiBSZWxlYXNlcyBvZiB0aGUgR05VIGxpbmtlciBwcmlvciB0byAyLjE2LjkxLjAuMyBjYW4gbm90CisqKiogcmVsaWFibHkgY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gU0NPIHN5c3RlbXMuICBUaGVyZWZvcmUsIGxpYnRvb2wKKyoqKiBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgV2UgdXJnZSB5b3UgdG8gdXBncmFkZSBHTlUKKyoqKiBiaW51dGlscyB0byByZWxlYXNlIDIuMTYuOTEuMC4zIG9yIG5ld2VyLiAgQW5vdGhlciBvcHRpb24gaXMgdG8gbW9kaWZ5CisqKiogeW91ciBQQVRIIG9yIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gc28gdGhhdCB0aGUgbmF0aXZlIGxpbmtlciBpcworKioqIHVzZWQsIGFuZCB0aGVuIHJlc3RhcnQuCisKK19MVF9FT0YKKwk7OworCSopCisJICAjIEZvciBzZWN1cml0eSByZWFzb25zLCBpdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgYWx3YXlzCisJICAjIHVzZSBhYnNvbHV0ZSBwYXRocyBmb3IgbmFtaW5nIHNoYXJlZCBsaWJyYXJpZXMsIGFuZCBleGNsdWRlIHRoZQorCSAgIyBEVF9SVU5QQVRIIHRhZyBmcm9tIGV4ZWN1dGFibGVzIGFuZCBsaWJyYXJpZXMuICBCdXQgZG9pbmcgc28KKwkgICMgcmVxdWlyZXMgdGhhdCB5b3UgY29tcGlsZSBldmVyeXRoaW5nIHR3aWNlLCB3aGljaCBpcyBhIHBhaW4uCisJICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKwkgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJICBlbHNlCisJICAgIGxkX3NobGlicz1ubworCSAgZmkKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIHN1bm9zNCopCisgICAgICBhcmNoaXZlX2NtZHM9JyRMRCAtYXNzZXJ0IHB1cmUtdGV4dCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICB3bGFyYz0KKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIDs7CisKKyAgICAqKQorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworICAgIGVzYWMKKworICAgIGlmIHRlc3QgIiRsZF9zaGxpYnMiID0gbm87IHRoZW4KKyAgICAgIHJ1bnBhdGhfdmFyPQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0KKyAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPQorICAgIGZpCisgIGVsc2UKKyAgICAjIFBPUlRNRSBmaWxsIGluIGEgZGVzY3JpcHRpb24gb2YgeW91ciBzeXN0ZW0ncyBsaW5rZXIgKG5vdCBHTlUgbGQpCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeDMqKQorICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKyAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKKyAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRMRCAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLWJFOiRleHBvcnRfc3ltYm9scyAtVDUxMiAtSDUxMiAtYk06U1JFfiRBUiAkQVJfRkxBR1MgJGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lJworICAgICAgIyBOb3RlOiB0aGlzIGxpbmtlciBoYXJkY29kZXMgdGhlIGRpcmVjdG9yaWVzIGluIExJQlBBVEggaWYgdGhlcmUKKyAgICAgICMgYXJlIG5vIGRpcmVjdG9yaWVzIHNwZWNpZmllZCBieSAtTC4KKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0IC16ICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWMiOyB0aGVuCisJIyBOZWl0aGVyIGRpcmVjdCBoYXJkY29kaW5nIG5vciBzdGF0aWMgbGlua2luZyBpcyBzdXBwb3J0ZWQgd2l0aCBhCisJIyBicm9rZW4gY29sbGVjdDIuCisJaGFyZGNvZGVfZGlyZWN0PXVuc3VwcG9ydGVkCisgICAgICBmaQorICAgICAgOzsKKworICAgIGFpeFs0LTldKikKKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAorCSMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgorCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKwlleHBfc3ltX2ZsYWc9Jy1CZXhwb3J0JworCW5vX2VudHJ5X2ZsYWc9IiIKKyAgICAgIGVsc2UKKwkjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB3ZSBkb24ndCB3YW50IHRoZSAiLUMiIG9wdGlvbi4KKwkjIC1DIG1lYW5zIGRlbWFuZ2xlIHRvIEFJWCBubSwgYnV0IG1lYW5zIGRvbid0IGRlbWFuZ2xlIHdpdGggR05VIG5tCisJIyBBbHNvLCBBSVggbm0gdHJlYXRzIHdlYWsgZGVmaW5lZCBzeW1ib2xzIGxpa2Ugb3RoZXIgZ2xvYmFsCisJIyBkZWZpbmVkIHN5bWJvbHMsIHdoZXJlYXMgR05VIG5tIG1hcmtzIHRoZW0gYXMgIlciLgorCWlmICROTSAtViAyPiYxIHwgJEdSRVAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KKwkgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAtQnBnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJCAyID09ICJUIikgfHwgKFwkIDIgPT0gIkQiKSB8fCAoXCQgMiA9PSAiQiIpIHx8IChcJCAyID09ICJXIikpICYmIChzdWJzdHIoXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKwllbHNlCisJICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gLUJDcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikpICYmIChzdWJzdHIoXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKwlmaQorCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKworCSMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAorCSMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQorCSMgbmVlZCB0byBkbyBydW50aW1lIGxpbmtpbmcuCisJY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlsyM118YWl4NC5bMjNdLip8YWl4WzUtOV0qKQorCSAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCisJICBpZiAodGVzdCAkbGRfZmxhZyA9ICItYnJ0bCIgfHwgdGVzdCAkbGRfZmxhZyA9ICItV2wsLWJydGwiKTsgdGhlbgorCSAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcworCSAgICBicmVhaworCSAgZmkKKwkgIGRvbmUKKwkgIDs7CisJZXNhYworCisJZXhwX3N5bV9mbGFnPSctYmV4cG9ydCcKKwlub19lbnRyeV9mbGFnPSctYm5vZW50cnknCisgICAgICBmaQorCisgICAgICAjIFdoZW4gbGFyZ2UgZXhlY3V0YWJsZXMgb3Igc2hhcmVkIG9iamVjdHMgYXJlIGJ1aWx0LCBBSVggbGQgY2FuCisgICAgICAjIGhhdmUgcHJvYmxlbXMgY3JlYXRpbmcgdGhlIHRhYmxlIG9mIGNvbnRlbnRzLiAgSWYgbGlua2luZyBhIGxpYnJhcnkKKyAgICAgICMgb3IgcHJvZ3JhbSByZXN1bHRzIGluICJlcnJvciBUT0Mgb3ZlcmZsb3ciIGFkZCAtbW1pbmltYWwtdG9jIHRvCisgICAgICAjIENYWEZMQUdTL0NGTEFHUyBmb3IgZysrL2djYy4gIEluIHRoZSBjYXNlcyB3aGVyZSB0aGF0IGlzIG5vdAorICAgICAgIyBlbm91Z2ggdG8gZml4IHRoZSBwcm9ibGVtLCBhZGQgLVdsLC1iYmlndG9jIHRvIExERkxBR1MuCisKKyAgICAgIGFyY2hpdmVfY21kcz0nJworICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPXllcworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0nOicKKyAgICAgIGxpbmtfYWxsX2RlcGxpYnM9eWVzCisgICAgICBmaWxlX2xpc3Rfc3BlYz0nJHt3bH0tZiwnCisKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlswMTJdfGFpeDQuWzAxMl0uKikKKwkjIFdlIG9ubHkgd2FudCB0byBkbyB0aGlzIG9uIEFJWCA0LjIgYW5kIGxvd2VyLCB0aGUgY2hlY2sKKwkjIGJlbG93IGZvciBicm9rZW4gY29sbGVjdDIgZG9lc24ndCB3b3JrIHVuZGVyIDQuMysKKwkgIGNvbGxlY3QybmFtZT1gJHtDQ30gLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKKwkgIGlmIHRlc3QgLWYgIiRjb2xsZWN0Mm5hbWUiICYmCisJICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCAkR1JFUCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKKwkgIHRoZW4KKwkgICMgV2UgaGF2ZSByZXdvcmtlZCBjb2xsZWN0MgorCSAgOgorCSAgZWxzZQorCSAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgorCSAgaGFyZGNvZGVfZGlyZWN0PXVuc3VwcG9ydGVkCisJICAjIEl0IGZhaWxzIHRvIGZpbmQgdW5pbnN0YWxsZWQgbGlicmFyaWVzIHdoZW4gdGhlIHVuaW5zdGFsbGVkCisJICAjIHBhdGggaXMgbm90IGxpc3RlZCBpbiB0aGUgbGlicGF0aC4gIFNldHRpbmcgaGFyZGNvZGVfbWludXNfTAorCSAgIyB0byB1bnN1cHBvcnRlZCBmb3JjZXMgcmVsaW5raW5nCisJICBoYXJkY29kZV9taW51c19MPXllcworCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworCSAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0KKwkgIGZpCisJICA7OworCWVzYWMKKwlzaGFyZWRfZmxhZz0nLXNoYXJlZCcKKwlpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKwkgIHNoYXJlZF9mbGFnPSIkc2hhcmVkX2ZsYWcgIicke3dsfS1HJworCWZpCisgICAgICBlbHNlCisJIyBub3QgdXNpbmcgZ2NjCisJaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkjIFZpc3VhbEFnZSBDKyssIFZlcnNpb24gNS41IGZvciBBSVggNUwgZm9yIElBLTY0LCBCZXRhIDMgUmVsZWFzZQorCSMgY2hva2VzIG9uIC1XbCwtRy4gVGhlIGZvbGxvd2luZyBsaW5lIGlzIGNvcnJlY3Q6CisJICBzaGFyZWRfZmxhZz0nLUcnCisJZWxzZQorCSAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisJICAgIHNoYXJlZF9mbGFnPScke3dsfS1HJworCSAgZWxzZQorCSAgICBzaGFyZWRfZmxhZz0nJHt3bH0tYk06U1JFJworCSAgZmkKKwlmaQorICAgICAgZmkKKworICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1iZXhwYWxsJworICAgICAgIyBJdCBzZWVtcyB0aGF0IC1iZXhwYWxsIGRvZXMgbm90IGV4cG9ydCBzeW1ib2xzIGJlZ2lubmluZyB3aXRoCisgICAgICAjIHVuZGVyc2NvcmUgKF8pLCBzbyBpdCBpcyBiZXR0ZXIgdG8gZ2VuZXJhdGUgYSBsaXN0IG9mIHN5bWJvbHMgdG8gZXhwb3J0LgorICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPXllcworICAgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisJIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVudGltZSBsb2FkaW5nIGZsYWdzICgtYnJ0bCksCisJIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorCWFsbG93X3VuZGVmaW5lZF9mbGFnPSctYmVyb2snCisgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorICAgICAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCisgICAgICAgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCitlbHNlCisgIGlmICR7bHRfY3ZfYWl4X2xpYnBhdGhfKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgbHRfYWl4X2xpYnBhdGhfc2VkPScKKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKwkgIC9eMC8geworCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCisJICAgICAgcAorCSAgfQorICAgICAgfScKKyAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorICBmaQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPSIvdXNyL2xpYjovbGliIgorICBmaQorCitmaQorCisgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF8KK2ZpCisKKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZnVuY19lY2hvX2FsbCAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKKyAgICAgIGVsc2UKKwlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tUiAkbGliZGlyOi91c3IvbGliOi9saWInCisJICBhbGxvd191bmRlZmluZWRfZmxhZz0iLXogbm9kZWZzIgorCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyIKKwllbHNlCisJICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorCSAjIGVtcHR5IGV4ZWN1dGFibGUuCisJIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCitlbHNlCisgIGlmICR7bHRfY3ZfYWl4X2xpYnBhdGhfKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgbHRfYWl4X2xpYnBhdGhfc2VkPScKKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKwkgIC9eMC8geworCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCisJICAgICAgcAorCSAgfQorICAgICAgfScKKyAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorICBmaQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPSIvdXNyL2xpYjovbGliIgorICBmaQorCitmaQorCisgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF8KK2ZpCisKKwkgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKwkgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCisJICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCisJICBub191bmRlZmluZWRfZmxhZz0nICR7d2x9LWJlcm5vdG9rJworCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAke3dsfS1iZXJvaycKKwkgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKwkgICAgIyBXZSBvbmx5IHVzZSB0aGlzIGNvZGUgZm9yIEdOVSBsZHMgdGhhdCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZS4KKwkgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR7d2x9LS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgZWxzZQorCSAgICAjIEV4cG9ydGVkIHN5bWJvbHMgY2FuIGJlIHB1bGxlZCBpbnRvIHNoYXJlZCBvYmplY3RzIGZyb20gYXJjaGl2ZXMKKwkgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyRjb252ZW5pZW5jZScKKwkgIGZpCisJICBhcmNoaXZlX2NtZHNfbmVlZF9sYz15ZXMKKwkgICMgVGhpcyBpcyBzaW1pbGFyIHRvIGhvdyBBSVggdHJhZGl0aW9uYWxseSBidWlsZHMgaXRzIHNoYXJlZCBsaWJyYXJpZXMuCisJICBhcmNoaXZlX2V4cHN5bV9jbWRzPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHt3bH0tYm5vZW50cnkgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWJFOiRleHBvcnRfc3ltYm9scyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9fiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS5hICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCisJZmkKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYW1pZ2FvcyopCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgcG93ZXJwYykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKyAgICAgICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPScnCisgICAgICAgIDs7CisgICAgICBtNjhrKQorICAgICAgICAgICAgYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBOQU1FICRsaWJuYW1lIiA+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTElCUkFSWV9JRCAxIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFZFUlNJT04gJG1ham9yIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFJFVklTSU9OICRyZXZpc2lvbiIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kQVIgJEFSX0ZMQUdTICRsaWIgJGxpYm9ianN+JFJBTkxJQiAkbGlifihjZCAkb3V0cHV0X29iamRpciAmJiBhMml4bGlicmFyeSAtMzIpJworICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBic2RpWzQ1XSopCisgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9LXJkeW5hbWljCisgICAgICA7OworCisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKKyAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisgICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgIGNsKikKKwkjIE5hdGl2ZSBNU1ZDCisJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKwlhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorCWFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKKwlmaWxlX2xpc3Rfc3BlYz0nQCcKKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorCWxpYmV4dD1saWIKKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKwlzaHJleHRfY21kcz0iLmRsbCIKKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisJYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgLVdsLC1kbGx+bGlua25hbWVzPScKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorCSAgICBzZWQgLW4gLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyAtZSAnMVxcXCFwJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworCSAgZWxzZQorCSAgICBzZWQgLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworCSAgZml+CisJICAkQ0MgLW8gJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzICJAJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZXhwIiAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+CisJICBsaW5rbmFtZXM9JworCSMgVGhlIGxpbmtlciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgc3RhdGljIGxpYiBpZiB3ZSBidWlsZCBhIERMTC4KKwkjIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgKT0ndHJ1ZScKKwllbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworCWV4Y2x1ZGVfZXhwc3ltcz0nX05VTExfSU1QT1JUX0RFU0NSSVBUT1J8X0lNUE9SVF9ERVNDUklQVE9SXy4qJworCWV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxLERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW0FJVFddWyBdL3MvLipbIF0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKwkjIERvbid0IHVzZSByYW5saWIKKwlvbGRfcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNjQ0ICRvbGRsaWInCisJcG9zdGxpbmtfY21kcz0nbHRfb3V0cHV0ZmlsZT0iQE9VVFBVVEAifgorCSAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KKwkgIGNhc2UgJGx0X291dHB1dGZpbGUgaW4KKwkgICAgKi5leGV8Ki5FWEUpIDs7CisJICAgICopCisJICAgICAgbHRfb3V0cHV0ZmlsZT0iJGx0X291dHB1dGZpbGUuZXhlIgorCSAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iJGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUiCisJICAgICAgOzsKKwkgIGVzYWN+CisJICBpZiB0ZXN0ICIkTUFOSUZFU1RfVE9PTCIgIT0gIjoiICYmIHRlc3QgLWYgIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsgdGhlbgorCSAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOworCSAgICAkUk0gIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsKKwkgIGZpJworCTs7CisgICAgICAqKQorCSMgQXNzdW1lIE1TVkMgd3JhcHBlcgorCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCisJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorCWxpYmV4dD1saWIKKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKwlzaHJleHRfY21kcz0iLmRsbCIKKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisJYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGZ1bmNfZWNob19hbGwgIiRkZXBsaWJzIiB8ICRTRUQgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKKwkjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgorCW9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J3RydWUnCisJIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KKwlvbGRfYXJjaGl2ZV9jbWRzPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCisJZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGRhcndpbiogfCByaGFwc29keSopCisKKworICBhcmNoaXZlX2NtZHNfbmVlZF9sYz1ubworICBoYXJkY29kZV9kaXJlY3Q9bm8KKyAgaGFyZGNvZGVfYXV0b21hdGljPXllcworICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPXVuc3VwcG9ydGVkCisgIGlmIHRlc3QgIiRsdF9jdl9sZF9mb3JjZV9sb2FkIiA9ICJ5ZXMiOyB0aGVuCisgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9J2Bmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSAke3dsfS1mb3JjZV9sb2FkLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgJworCisgIGVsc2UKKyAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJworICBmaQorICBsaW5rX2FsbF9kZXBsaWJzPXllcworICBhbGxvd191bmRlZmluZWRfZmxhZz0iJF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkIgorICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICBpZm9ydCopIF9sdF9kYXJfY2FuX3NoYXJlZD15ZXMgOzsKKyAgICAgKikgX2x0X2Rhcl9jYW5fc2hhcmVkPSRHQ0MgOzsKKyAgZXNhYworICBpZiB0ZXN0ICIkX2x0X2Rhcl9jYW5fc2hhcmVkIiA9ICJ5ZXMiOyB0aGVuCisgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9ZnVuY19lY2hvX2FsbAorICAgIGFyY2hpdmVfY21kcz0iXCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJF9sdF9kYXJfc2luZ2xlX21vZCR7X2x0X2RzeW11dGlsfSIKKyAgICBtb2R1bGVfY21kcz0iXCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJHtfbHRfZHN5bXV0aWx9IgorICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9InNlZCAncyxeLF8sJyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJHtfbHRfZGFyX3NpbmdsZV9tb2R9JHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKKyAgICBtb2R1bGVfZXhwc3ltX2NtZHM9InNlZCAtZSAncyxeLF8sJyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+XCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKKworICBlbHNlCisgIGxkX3NobGlicz1ubworICBmaQorCisgICAgICA7OworCisgICAgZGd1eCopCisgICAgICBhcmNoaXZlX2NtZHM9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIDs7CisKKyAgICAjIEZyZWVCU0QgMi4yLlswMTJdIGFsbG93cyB1cyB0byBpbmNsdWRlIGMrK3J0MC5vIHRvIGdldCBDKysgY29uc3RydWN0b3IKKyAgICAjIHN1cHBvcnQuICBGdXR1cmUgdmVyc2lvbnMgZG8gdGhpcyBhdXRvbWF0aWNhbGx5LCBidXQgYW4gZXhwbGljaXQgYysrcnQwLm8KKyAgICAjIGRvZXMgbm90IGJyZWFrIGFueXRoaW5nLCBhbmQgaGVscHMgc2lnbmlmaWNhbnRseSAoYXQgdGhlIGNvc3Qgb2YgYSBsaXR0bGUKKyAgICAjIGV4dHJhIHNwYWNlKS4KKyAgICBmcmVlYnNkMi4yKikKKyAgICAgIGFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAvdXNyL2xpYi9jKytydDAubycKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIDs7CisKKyAgICAjIFVuZm9ydHVuYXRlbHksIG9sZGVyIHZlcnNpb25zIG9mIEZyZWVCU0QgMiBkbyBub3QgaGF2ZSB0aGlzIGZlYXR1cmUuCisgICAgZnJlZWJzZDIuKikKKyAgICAgIGFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICA7OworCisgICAgIyBGcmVlQlNEIDMgYW5kIGdyZWF0ZXIgdXNlcyBnY2MgLXNoYXJlZCB0byBkbyBzaGFyZWQgbGlicmFyaWVzLgorICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgOzsKKworICAgIGhwdXg5KikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgIGVsc2UKKwlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRMRCAtYiArYiAkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgZmkKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisKKyAgICAgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUUnCisgICAgICA7OworCisgICAgaHB1eDEwKikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBlbHNlCisJYXJjaGl2ZV9jbWRzPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworCWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorCWhhcmRjb2RlX2RpcmVjdD15ZXMKKwloYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9eWVzCisJZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1FJworCSMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisJIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisJaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIGZpCisgICAgICA7OworCisgICAgaHB1eDExKikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCWNhc2UgJGhvc3RfY3B1IGluCisJaHBwYSo2NCopCisJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwlpYTY0KikKKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwkqKQorCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJZXNhYworICAgICAgZWxzZQorCWNhc2UgJGhvc3RfY3B1IGluCisJaHBwYSo2NCopCisJICBhcmNoaXZlX2NtZHM9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJaWE2NCopCisJICBhcmNoaXZlX2NtZHM9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJKikKKworCSAgIyBPbGRlciB2ZXJzaW9ucyBvZiB0aGUgMTEuMDAgY29tcGlsZXIgZG8gbm90IHVuZGVyc3RhbmQgLWIgeWV0CisJICAjIChIUDkyNDUzLTAxIEEuMTEuMDEuMjAgZG9lc24ndCwgSFA5MjQ1My0wMSBCLjExLlguMzUxNzUtMzUxNzYuR1AgZG9lcykKKwkgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJENDIHVuZGVyc3RhbmRzIC1iIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRDQyB1bmRlcnN0YW5kcyAtYi4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9wcm9nX2NvbXBpbGVyX19iKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9fYj1ubworICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKyAgIExERkxBR1M9IiRMREZMQUdTIC1iIgorICAgZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgICBpZiAoZXZhbCAkYWNfbGluayAyPmNvbmZ0ZXN0LmVycikgJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgICAgIyBUaGUgbGlua2VyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICAgICMgQXBwZW5kIGFueSBlcnJvcnMgdG8gdGhlIGNvbmZpZy5sb2cuCisgICAgICAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1CisgICAgICAgJEVDSE8gIiRfbHRfbGlua2VyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+IGNvbmZ0ZXN0LmV4cAorICAgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgorICAgICAgIGlmIGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX19iPXllcworICAgICAgIGZpCisgICAgIGVsc2UKKyAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX19iPXllcworICAgICBmaQorICAgZmkKKyAgICRSTSAtciBjb25mdGVzdCoKKyAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfX2IiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX19iIiA+JjY7IH0KKworaWYgdGVzdCB4IiRsdF9jdl9wcm9nX2NvbXBpbGVyX19iIiA9IHh5ZXM7IHRoZW4KKyAgICBhcmNoaXZlX2NtZHM9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworZWxzZQorICAgIGFyY2hpdmVfY21kcz0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKK2ZpCisKKwkgIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworCWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorCisJY2FzZSAkaG9zdF9jcHUgaW4KKwlocHBhKjY0KnxpYTY0KikKKwkgIGhhcmRjb2RlX2RpcmVjdD1ubworCSAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworCSAgOzsKKwkqKQorCSAgaGFyZGNvZGVfZGlyZWN0PXllcworCSAgaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPXllcworCSAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1FJworCisJICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorCSAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisJICBoYXJkY29kZV9taW51c19MPXllcworCSAgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgOzsKKworICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCSMgVHJ5IHRvIHVzZSB0aGUgLWV4cG9ydGVkX3N5bWJvbCBsZCBvcHRpb24sIGlmIGl0IGRvZXMgbm90CisJIyB3b3JrLCBhc3N1bWUgdGhhdCAtZXhwb3J0c19maWxlIGRvZXMgbm90IHdvcmsgZWl0aGVyIGFuZAorCSMgaW1wbGljaXRseSBleHBvcnQgYWxsIHN5bWJvbHMuCisJIyBUaGlzIHNob3VsZCBiZSB0aGUgc2FtZSBmb3IgYWxsIGxhbmd1YWdlcywgc28gbm8gcGVyLXRhZyBjYWNoZSB2YXJpYWJsZS4KKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlICRob3N0X29zIGxpbmtlciBhY2NlcHRzIC1leHBvcnRlZF9zeW1ib2wiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGhvc3Rfb3MgbGlua2VyIGFjY2VwdHMgLWV4cG9ydGVkX3N5bWJvbC4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisJICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAke3dsfS1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9L2Rldi9udWxsIgorCSAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KK2ludCBmb28gKHZvaWQpIHsgcmV0dXJuIDA7IH0KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbD15ZXMKK2Vsc2UKKyAgbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPiY2OyB9CisJaWYgdGVzdCAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA9IHllczsgdGhlbgorICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgJHt3bH0tZXhwb3J0c19maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJZmkKKyAgICAgIGVsc2UKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtZXhwb3J0c19maWxlICRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgZmkKKyAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjPSdubycKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgaW5oZXJpdF9ycGF0aD15ZXMKKyAgICAgIGxpbmtfYWxsX2RlcGxpYnM9eWVzCisgICAgICA7OworCisgICAgbmV0YnNkKikKKyAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJyAgIyBhLm91dAorICAgICAgZWxzZQorCWFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJyAgICAgICMgRUxGCisgICAgICBmaQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgOzsKKworICAgIG5ld3NvczYpCisgICAgICBhcmNoaXZlX2NtZHM9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgOzsKKworICAgICpudG8qIHwgKnFueCopCisgICAgICA7OworCisgICAgb3BlbmJzZCopCisgICAgICBpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5zbzsgdGhlbgorCWhhcmRjb2RlX2RpcmVjdD15ZXMKKwloYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisJaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPXllcworCWlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzJworCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwkgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tRScKKwllbHNlCisJICBjYXNlICRob3N0X29zIGluCisJICAgb3BlbmJzZFswMV0uKiB8IG9wZW5ic2QyLlswLTddIHwgb3BlbmJzZDIuWzAtN10uKikKKwkgICAgIGFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKwkgICAgIDs7CisJICAgKikKKwkgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwkgICAgIDs7CisJICBlc2FjCisJZmkKKyAgICAgIGVsc2UKKwlsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgb3MyKikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorICAgICAgYXJjaGl2ZV9jbWRzPSckRUNITyAiTElCUkFSWSAkbGlibmFtZSBJTklUSU5TVEFOQ0UiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRFQ0hPICJERVNDUklQVElPTiBcIiRsaWJuYW1lXCIiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn5lY2hvIERBVEEgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfmVjaG8gIiBTSU5HTEUgTk9OU0hBUkVEIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+ZWNobyBFWFBPUlRTID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn5lbXhleHAgJGxpYm9ianMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRDQyAtWmRsbCAtWmNydGRsbCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCisgICAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSdlbXhpbXAgLW8gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuYSAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCisgICAgICA7OworCisgICAgb3NmMyopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgICAgICBlbHNlCisJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworICAgICAgZmkKKyAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjPSdubycKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgOzsKKworICAgIG9zZjQqIHwgb3NmNSopCSMgYXMgb3NmMyogd2l0aCB0aGUgYWRkaXRpb24gb2YgLW1zeW0gZmxhZworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwlhbGxvd191bmRlZmluZWRfZmxhZz0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIGVsc2UKKwlhbGxvd191bmRlZmluZWRfZmxhZz0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nZm9yIGkgaW4gYGNhdCAkZXhwb3J0X3N5bWJvbHNgOyBkbyBwcmludGYgIiVzICVzXFxuIiAtZXhwb3J0ZWRfc3ltYm9sICJcJGkiID4+ICRsaWIuZXhwOyBkb25lOyBwcmludGYgIiVzXFxuIiAiLWhpZGRlbiI+PiAkbGliLmV4cH4KKwkkQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICR7d2x9LWlucHV0ICR7d2x9JGxpYi5leHAgJGNvbXBpbGVyX2ZsYWdzICRsaWJvYmpzICRkZXBsaWJzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGlifiRSTSAkbGliLmV4cCcKKworCSMgQm90aCBjIGFuZCBjeHggY29tcGlsZXIgc3VwcG9ydCAtcnBhdGggZGlyZWN0bHkKKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctcnBhdGggJGxpYmRpcicKKyAgICAgIGZpCisgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sYz0nbm8nCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgIDs7CisKKyAgICBzb2xhcmlzKikKKyAgICAgIG5vX3VuZGVmaW5lZF9mbGFnPScgLXogZGVmcycKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJd2xhcmM9JyR7d2x9JworCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworICAgICAgZWxzZQorCWNhc2UgYCRDQyAtViAyPiYxYCBpbgorCSoiQ29tcGlsZXJzIDUuMCIqKQorCSAgd2xhcmM9JycKKwkgIGFyY2hpdmVfY21kcz0nJExEIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJICAkTEQgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtTSAkbGliLmV4cCAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc34kUk0gJGxpYi5leHAnCisJICA7OworCSopCisJICB3bGFyYz0nJHt3bH0nCisJICBhcmNoaXZlX2NtZHM9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJICAkQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtTSAkbGliLmV4cCAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKwkgIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIHNvbGFyaXMyLlswLTVdIHwgc29sYXJpczIuWzAtNV0uKikgOzsKKyAgICAgICopCisJIyBUaGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgY29tYmluZSBhbmQgcmVvcmRlciBsaW5rZXIgb3B0aW9ucywKKwkjIGJ1dCB1bmRlcnN0YW5kcyBgLXogbGlua2VyX2ZsYWcnLiAgR0NDIGRpc2NhcmRzIGl0IHdpdGhvdXQgYCR3bCcsCisJIyBidXQgaXMgY2FyZWZ1bCBlbm91Z2ggbm90IHRvIHJlb3JkZXIuCisJIyBTdXBwb3J0ZWQgc2luY2UgU29sYXJpcyAyLjYgKG1heWJlIDIuNS4xPykKKwlpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR7d2x9LXogJHt3bH1hbGxleHRyYWN0JGNvbnZlbmllbmNlICR7d2x9LXogJHt3bH1kZWZhdWx0ZXh0cmFjdCcKKwllbHNlCisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nLXogYWxsZXh0cmFjdCRjb252ZW5pZW5jZSAteiBkZWZhdWx0ZXh0cmFjdCcKKwlmaQorCTs7CisgICAgICBlc2FjCisgICAgICBsaW5rX2FsbF9kZXBsaWJzPXllcworICAgICAgOzsKKworICAgIHN1bm9zNCopCisgICAgICBpZiB0ZXN0ICJ4JGhvc3RfdmVuZG9yIiA9IHhzZXF1ZW50OyB0aGVuCisJIyBVc2UgJENDIHRvIGxpbmsgdW5kZXIgc2VxdWVudCwgYmVjYXVzZSBpdCB0aHJvd3MgaW4gc29tZSBleHRyYSAubworCSMgZmlsZXMgdGhhdCBtYWtlIC5pbml0IGFuZCAuZmluaSBzZWN0aW9ucyB3b3JrLgorCWFyY2hpdmVfY21kcz0nJENDIC1HICR7d2x9LWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGVsc2UKKwlhcmNoaXZlX2NtZHM9JyRMRCAtYXNzZXJ0IHB1cmUtdGV4dCAtQnN0YXRpYyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBmaQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIDs7CisKKyAgICBzeXN2NCkKKyAgICAgIGNhc2UgJGhvc3RfdmVuZG9yIGluCisJc25pKQorCSAgYXJjaGl2ZV9jbWRzPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICBoYXJkY29kZV9kaXJlY3Q9eWVzICMgaXMgdGhpcyByZWFsbHkgdHJ1ZT8/PworCTs7CisJc2llbWVucykKKwkgICMjIExEIGlzIGxkIGl0IG1ha2VzIGEgUExBTUxJQgorCSAgIyMgQ0MganVzdCBtYWtlcyBhIEdyb3NzTW9kdWxlLgorCSAgYXJjaGl2ZV9jbWRzPSckTEQgLUcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgcmVsb2FkX2NtZHM9JyRDQyAtciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworCSAgaGFyZGNvZGVfZGlyZWN0PW5vCisgICAgICAgIDs7CisJbW90b3JvbGEpCisJICBhcmNoaXZlX2NtZHM9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgIGhhcmRjb2RlX2RpcmVjdD1ubyAjTW90b3JvbGEgbWFudWFsIHNheXMgeWVzLCBidXQgbXkgdGVzdHMgc2F5IHRoZXkgbGllCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIDs7CisKKyAgICBzeXN2NC4zKikKKyAgICAgIGFyY2hpdmVfY21kcz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSctQmV4cG9ydCcKKyAgICAgIDs7CisKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworCXJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICisJaGFyZGNvZGVfcnVucGF0aF92YXI9eWVzCisJbGRfc2hsaWJzPXllcworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bMDFdLlsxMF0qIHwgdW5peHdhcmU3KiB8IHNjbzMuMnY1LjAuWzAyNF0qKQorICAgICAgbm9fdW5kZWZpbmVkX2ZsYWc9JyR7d2x9LXosdGV4dCcKKyAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjPW5vCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCWFyY2hpdmVfY21kcz0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqKQorICAgICAgIyBOb3RlOiBXZSBjYW4gTk9UIHVzZSAteiBkZWZzIGFzIHdlIG1pZ2h0IGRlc2lyZSwgYmVjYXVzZSB3ZSBkbyBub3QKKyAgICAgICMgbGluayB3aXRoIC1sYywgYW5kIHRoYXQgd291bGQgY2F1c2UgYW55IHN5bWJvbHMgdXNlZCBmcm9tIGxpYmMgdG8KKyAgICAgICMgYWx3YXlzIGJlIHVucmVzb2x2ZWQsIHdoaWNoIG1lYW5zIGp1c3QgYWJvdXQgbm8gbGlicmFyeSB3b3VsZAorICAgICAgIyBldmVyIGxpbmsgY29ycmVjdGx5LiAgSWYgd2UncmUgbm90IHVzaW5nIEdOVSBsZCB3ZSB1c2UgLXogdGV4dAorICAgICAgIyB0aG91Z2gsIHdoaWNoIGRvZXMgY2F0Y2ggc29tZSBiYWQgc3ltYm9scyBidXQgaXNuJ3QgYXMgaGVhdnktaGFuZGVkCisgICAgICAjIGFzIC16IGRlZnMuCisgICAgICBub191bmRlZmluZWRfZmxhZz0nJHt3bH0teix0ZXh0JworICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyR7d2x9LXosbm9kZWZzJworICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9bm8KKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LVIsJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JzonCisgICAgICBsaW5rX2FsbF9kZXBsaWJzPXllcworICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1CZXhwb3J0JworICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGVsc2UKKwlhcmNoaXZlX2NtZHM9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgdXRzNCopCisgICAgICBhcmNoaXZlX2NtZHM9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIDs7CisKKyAgICAqKQorICAgICAgbGRfc2hsaWJzPW5vCisgICAgICA7OworICAgIGVzYWMKKworICAgIGlmIHRlc3QgeCRob3N0X3ZlbmRvciA9IHhzbmk7IHRoZW4KKyAgICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKiB8IHN5c3Y1KikKKwlleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUJsYXJnZWR5bnN5bScKKwk7OworICAgICAgZXNhYworICAgIGZpCisgIGZpCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbGRfc2hsaWJzIiA+JjUKKyRhc19lY2hvICIkbGRfc2hsaWJzIiA+JjY7IH0KK3Rlc3QgIiRsZF9zaGxpYnMiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubworCit3aXRoX2dudV9sZD0kd2l0aF9nbnVfbGQKKworCisKKworCisKKworCisKKworCisKKworCisKKyMKKyMgRG8gd2UgbmVlZCB0byBleHBsaWNpdGx5IGxpbmsgbGliYz8KKyMKK2Nhc2UgIngkYXJjaGl2ZV9jbWRzX25lZWRfbGMiIGluCit4fHh5ZXMpCisgICMgQXNzdW1lIC1sYyBzaG91bGQgYmUgYWRkZWQKKyAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9eWVzCisKKyAgaWYgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgY2FzZSAkYXJjaGl2ZV9jbWRzIGluCisgICAgKid+JyopCisgICAgICAjIEZJWE1FOiB3ZSBtYXkgaGF2ZSB0byBkZWFsIHdpdGggbXVsdGktY29tbWFuZCBzZXF1ZW5jZXMuCisgICAgICA7OworICAgICckQ0MgJyopCisgICAgICAjIFRlc3Qgd2hldGhlciB0aGUgY29tcGlsZXIgaW1wbGljaXRseSBsaW5rcyB3aXRoIC1sYyBzaW5jZSBvbiBzb21lCisgICAgICAjIHN5c3RlbXMsIC1sZ2NjIGhhcyB0byBjb21lIGJlZm9yZSAtbGMuIElmIGdjYyBhbHJlYWR5IHBhc3NlcyAtbGMKKyAgICAgICMgdG8gbGQsIGRvbid0IGFkZCAtbGMgYmVmb3JlIC1sZ2NjLgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgJFJNIGNvbmZ0ZXN0KgorCWVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorCisJaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAyPmNvbmZ0ZXN0LmVycjsgdGhlbgorCSAgc29uYW1lPWNvbmZ0ZXN0CisJICBsaWI9Y29uZnRlc3QKKwkgIGxpYm9ianM9Y29uZnRlc3QuJGFjX29iamV4dAorCSAgZGVwbGlicz0KKwkgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsCisJICBwaWNfZmxhZz0kbHRfcHJvZ19jb21waWxlcl9waWMKKwkgIGNvbXBpbGVyX2ZsYWdzPS12CisJICBsaW5rZXJfZmxhZ3M9LXYKKwkgIHZlcnN0cmluZz0KKwkgIG91dHB1dF9vYmpkaXI9LgorCSAgbGlibmFtZT1jb25mdGVzdAorCSAgbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZz0kYWxsb3dfdW5kZWZpbmVkX2ZsYWcKKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnPQorCSAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFyY2hpdmVfY21kcyAyXD5cJjEgXHwgJEdSRVAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMVwiIjsgfSA+JjUKKyAgKGV2YWwgJGFyY2hpdmVfY21kcyAyXD5cJjEgXHwgJEdSRVAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KKwkgIHRoZW4KKwkgICAgbHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGM9bm8KKwkgIGVsc2UKKwkgICAgbHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGM9eWVzCisJICBmaQorCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWcKKwllbHNlCisJICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKKwlmaQorCSRSTSBjb25mdGVzdCoKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGMiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sYyIgPiY2OyB9CisgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sYz0kbHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGMKKyAgICAgIDs7CisgICAgZXNhYworICBmaQorICA7OworZXNhYworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzLi4uICIgPiY2OyB9CisKK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBkYXJ3aW4qKSBsdF9hd2tfYXJnPSIvXmxpYnJhcmllczovLC9MUi8iIDs7CisgICAgKikgbHRfYXdrX2FyZz0iL15saWJyYXJpZXM6LyIgOzsKKyAgZXNhYworICBjYXNlICRob3N0X29zIGluCisgICAgbWluZ3cqIHwgY2VnY2MqKSBsdF9zZWRfc3RyaXBfZXE9InMsPVwoW0EtWmEtel06XCksXDEsZyIgOzsKKyAgICAqKSBsdF9zZWRfc3RyaXBfZXE9InMsPS8sLyxnIiA7OworICBlc2FjCisgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRDQyAtcHJpbnQtc2VhcmNoLWRpcnMgfCBhd2sgJGx0X2F3a19hcmcgfCAkU0VEIC1lICJzL15saWJyYXJpZXM6Ly8iIC1lICRsdF9zZWRfc3RyaXBfZXFgCisgIGNhc2UgJGx0X3NlYXJjaF9wYXRoX3NwZWMgaW4KKyAgKlw7KikKKyAgICAjIGlmIHRoZSBwYXRoIGNvbnRhaW5zICI7IiB0aGVuIHdlIGFzc3VtZSBpdCB0byBiZSB0aGUgc2VwYXJhdG9yCisgICAgIyBvdGhlcndpc2UgZGVmYXVsdCB0byB0aGUgc3RhbmRhcmQgcGF0aCBzZXBhcmF0b3IgKGkuZS4gIjoiKSAtIGl0IGlzCisgICAgIyBhc3N1bWVkIHRoYXQgbm8gcGFydCBvZiBhIG5vcm1hbCBwYXRobmFtZSBjb250YWlucyAiOyIgYnV0IHRoYXQgc2hvdWxkCisgICAgIyBva2F5IGluIHRoZSByZWFsIHdvcmxkIHdoZXJlICI7IiBpbiBkaXJwYXRocyBpcyBpdHNlbGYgcHJvYmxlbWF0aWMuCisgICAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgJ3MvOy8gL2cnYAorICAgIDs7CisgICopCisgICAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisgICAgOzsKKyAgZXNhYworICAjIE9rLCBub3cgd2UgaGF2ZSB0aGUgcGF0aCwgc2VwYXJhdGVkIGJ5IHNwYWNlcywgd2UgY2FuIHN0ZXAgdGhyb3VnaCBpdAorICAjIGFuZCBhZGQgbXVsdGlsaWIgZGlyIGlmIG5lY2Vzc2FyeS4KKyAgbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWM9CisgIGx0X211bHRpX29zX2Rpcj1gJENDICRDUFBGTEFHUyAkQ0ZMQUdTICRMREZMQUdTIC1wcmludC1tdWx0aS1vcy1kaXJlY3RvcnkgMj4vZGV2L251bGxgCisgIGZvciBsdF9zeXNfcGF0aCBpbiAkbHRfc2VhcmNoX3BhdGhfc3BlYzsgZG8KKyAgICBpZiB0ZXN0IC1kICIkbHRfc3lzX3BhdGgvJGx0X211bHRpX29zX2RpciI7IHRoZW4KKyAgICAgIGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMgJGx0X3N5c19wYXRoLyRsdF9tdWx0aV9vc19kaXIiCisgICAgZWxzZQorICAgICAgdGVzdCAtZCAiJGx0X3N5c19wYXRoIiAmJiBcCisJbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWM9IiRsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYyAkbHRfc3lzX3BhdGgiCisgICAgZmkKKyAgZG9uZQorICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjIiB8IGF3ayAnCitCRUdJTiB7UlM9IiAiOyBGUz0iL3xcbiI7fSB7CisgIGx0X2Zvbz0iIjsKKyAgbHRfY291bnQ9MDsKKyAgZm9yIChsdF9pID0gTkY7IGx0X2kgPiAwOyBsdF9pLS0pIHsKKyAgICBpZiAoJGx0X2kgIT0gIiIgJiYgJGx0X2kgIT0gIi4iKSB7CisgICAgICBpZiAoJGx0X2kgPT0gIi4uIikgeworICAgICAgICBsdF9jb3VudCsrOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGx0X2NvdW50ID09IDApIHsKKyAgICAgICAgICBsdF9mb289Ii8iICRsdF9pIGx0X2ZvbzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBsdF9jb3VudC0tOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisgIGlmIChsdF9mb28gIT0gIiIpIHsgbHRfZnJlcVtsdF9mb29dKys7IH0KKyAgaWYgKGx0X2ZyZXFbbHRfZm9vXSA9PSAxKSB7IHByaW50IGx0X2ZvbzsgfQorfSdgCisgICMgQVdLIHByb2dyYW0gYWJvdmUgZXJyb25lb3VzbHkgcHJlcGVuZHMgJy8nIHRvIEM6L2Rvcy9wYXRocworICAjIGZvciB0aGVzZSBob3N0cy4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIG1pbmd3KiB8IGNlZ2NjKikgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8XAorICAgICAgJFNFRCAncywvXChbQS1aYS16XTpcKSxcMSxnJ2AgOzsKKyAgZXNhYworICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkbHRfTkwyU1BgCitlbHNlCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiIKK2ZpCitsaWJyYXJ5X25hbWVzX3NwZWM9CitsaWJuYW1lX3NwZWM9J2xpYiRuYW1lJworc29uYW1lX3NwZWM9CitzaHJleHRfY21kcz0iLnNvIgorcG9zdGluc3RhbGxfY21kcz0KK3Bvc3R1bmluc3RhbGxfY21kcz0KK2ZpbmlzaF9jbWRzPQorZmluaXNoX2V2YWw9CitzaGxpYnBhdGhfdmFyPQorc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXVua25vd24KK3ZlcnNpb25fdHlwZT1ub25lCitkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCitzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiIKK25lZWRfbGliX3ByZWZpeD11bmtub3duCitoYXJkY29kZV9pbnRvX2xpYnM9bm8KKworIyB3aGVuIHlvdSBzZXQgbmVlZF92ZXJzaW9uIHRvIG5vLCBtYWtlIHN1cmUgaXQgZG9lcyBub3QgY2F1c2UgLXNldF92ZXJzaW9uCisjIGZsYWdzIHRvIGJlIGxlZnQgd2l0aG91dCBhcmd1bWVudHMKK25lZWRfdmVyc2lvbj11bmtub3duCisKK2Nhc2UgJGhvc3Rfb3MgaW4KK2FpeDMqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZS5hJworICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKKworICAjIEFJWCAzIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIHdlIGFwcGVuZCBhIG1ham9yIHZlcnNpb24gdG8gdGhlIG5hbWUuCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIDs7CisKK2FpeFs0LTldKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICAjIEFJWCA1IHN1cHBvcnRzIElBNjQKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBlbHNlCisgICAgIyBXaXRoIEdDQyB1cCB0byAyLjk1LngsIGNvbGxlY3QyIHdvdWxkIGNyZWF0ZSBhbiBpbXBvcnQgZmlsZQorICAgICMgZm9yIGRlcGVuZGVuY2UgbGlicmFyaWVzLiAgVGhlIGltcG9ydCBmaWxlIHdvdWxkIHN0YXJ0IHdpdGgKKyAgICAjIHRoZSBsaW5lIGAjISAuJy4gIFRoaXMgd291bGQgY2F1c2UgdGhlIGdlbmVyYXRlZCBsaWJyYXJ5IHRvCisgICAgIyBkZXBlbmQgb24gYC4nLCBhbHdheXMgYW4gaW52YWxpZCBsaWJyYXJ5LiAgVGhpcyB3YXMgZml4ZWQgaW4KKyAgICAjIGRldmVsb3BtZW50IHNuYXBzaG90cyBvZiBHQ0MgcHJpb3IgdG8gMy4wLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeDQgfCBhaXg0LlswMV0gfCBhaXg0LlswMV0uKikKKyAgICAgIGlmIHsgZWNobyAnI2lmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA5NyknCisJICAgZWNobyAnIHllcyAnCisJICAgZWNobyAnI2VuZGlmJzsgfSB8ICR7Q0N9IC1FIC0gfCAkR1JFUCB5ZXMgPiAvZGV2L251bGw7IHRoZW4KKwk6CisgICAgICBlbHNlCisJY2FuX2J1aWxkX3NoYXJlZD1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgZXNhYworICAgICMgQUlYIChvbiBQb3dlciopIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIGN1cnJlbnRseSB3ZSBjYW4gbm90IGhhcmRjb2RlIGNvcnJlY3QKKyAgICAjIHNvbmFtZSBpbnRvIGV4ZWN1dGFibGUuIFByb2JhYmx5IHdlIGNhbiBhZGQgdmVyc2lvbmluZyBzdXBwb3J0IHRvCisgICAgIyBjb2xsZWN0Miwgc28gYWRkaXRpb25hbCBsaW5rcyBjYW4gYmUgdXNlZnVsIGluIGZ1dHVyZS4KKyAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKyAgICAgICMgSWYgdXNpbmcgcnVuIHRpbWUgbGlua2luZyAob24gQUlYIDQuMiBvciBsYXRlcikgdXNlIGxpYjxuYW1lPi5zbworICAgICAgIyBpbnN0ZWFkIG9mIGxpYjxuYW1lPi5hIHRvIGxldCBwZW9wbGUga25vdyB0aGF0IHRoZXNlIGFyZSBub3QKKyAgICAgICMgdHlwaWNhbCBBSVggc2hhcmVkIGxpYnJhcmllcy4KKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIGVsc2UKKyAgICAgICMgV2UgcHJlc2VydmUgLmEgYXMgZXh0ZW5zaW9uIGZvciBzaGFyZWQgbGlicmFyaWVzIHRocm91Z2ggQUlYNC4yCisgICAgICAjIGFuZCBsYXRlciB3aGVuIHdlIGFyZSBub3QgZG9pbmcgcnVuIHRpbWUgbGlua2luZy4KKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uYSAkbGlibmFtZS5hJworICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICBmaQorICAgIHNobGlicGF0aF92YXI9TElCUEFUSAorICBmaQorICA7OworCithbWlnYW9zKikKKyAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgcG93ZXJwYykKKyAgICAjIFNpbmNlIEp1bHkgMjAwNyBBbWlnYU9TNCBvZmZpY2lhbGx5IHN1cHBvcnRzIC5zbyBsaWJyYXJpZXMuCisgICAgIyBXaGVuIGNvbXBpbGluZyB0aGUgZXhlY3V0YWJsZSwgYWRkIC11c2UtZHlubGQgLUxzb2JqczogdG8gdGhlIGNvbXBpbGVsaW5lLgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIDs7CisgIG02OGspCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5peGxpYnJhcnkgJGxpYm5hbWUuYScKKyAgICAjIENyZWF0ZSAke2xpYm5hbWV9X2l4bGlicmFyeS5hIGVudHJpZXMgaW4gL3N5cy9saWJzLgorICAgIGZpbmlzaF9ldmFsPSdmb3IgbGliIGluIGBscyAkbGliZGlyLyouaXhsaWJyYXJ5IDI+L2Rldi9udWxsYDsgZG8gbGlibmFtZT1gZnVuY19lY2hvX2FsbCAiJGxpYiIgfCAkU0VEICdcJydzJV4uKi9cKFteL10qXClcLml4bGlicmFyeSQlXDElJ1wnJ2A7IHRlc3QgJFJNIC9zeXMvbGlicy8ke2xpYm5hbWV9X2l4bGlicmFyeS5hOyAkc2hvdyAiY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSI7IGNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgfHwgZXhpdCAxOyBkb25lJworICAgIDs7CisgIGVzYWMKKyAgOzsKKworYmVvcyopCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKKyAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgOzsKKworYnNkaVs0NV0qKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9YMTEvbGliIC91c3IvY29udHJpYi9saWIgL2xpYiAvdXNyL2xvY2FsL2xpYiIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9zaGxpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiIKKyAgIyB0aGUgZGVmYXVsdCBsZC5zby5jb25mIGFsc28gY29udGFpbnMgL3Vzci9jb250cmliL2xpYiBhbmQKKyAgIyAvdXNyL1gxMVI2L2xpYiAoL3Vzci9YMTEgaXMgYSBsaW5rIHRvIC91c3IvWDExUjYpLCBidXQgbGV0IHVzIGFsbG93CisgICMgbGlidG9vbCB0byBoYXJkLWNvZGUgdGhlc2UgaW50byBwcm9ncmFtcworICA7OworCitjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgIHZlcnNpb25fdHlwZT13aW5kb3dzCisgIHNocmV4dF9jbWRzPSIuZGxsIgorICBuZWVkX3ZlcnNpb249bm8KKyAgbmVlZF9saWJfcHJlZml4PW5vCisKKyAgY2FzZSAkR0NDLCRjY19iYXNlbmFtZSBpbgorICB5ZXMsKikKKyAgICAjIGdjYworICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCisgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KKyAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgorICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lfgorICAgICAgY2htb2QgYSt4IFwkZGxkaXIvJGRsbmFtZX4KKyAgICAgIGlmIHRlc3QgLW4gJ1wnJyRzdHJpcG1lJ1wnJyAmJiB0ZXN0IC1uICdcJyckc3RyaXBsaWInXCcnOyB0aGVuCisgICAgICAgIGV2YWwgJ1wnJyRzdHJpcGxpYiBcJGRsZGlyLyRkbG5hbWUnXCcnIHx8IGV4aXQgXCQ/OworICAgICAgZmknCisgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+CisgICAgICAgJFJNIFwkZGxwYXRoJworICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBjeWd3aW4qKQorICAgICAgIyBDeWd3aW4gRExMcyB1c2UgJ2N5ZycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCisgICAgICBzb25hbWVfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL2N5Zy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAvdXNyL2xpYi93MzJhcGkiCisgICAgICA7OworICAgIG1pbmd3KiB8IGNlZ2NjKikKKyAgICAgICMgTWluR1cgRExMcyB1c2UgdHJhZGl0aW9uYWwgJ2xpYicgcHJlZml4CisgICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICA7OworICAgIHB3MzIqKQorICAgICAgIyBwdzMyIERMTHMgdXNlICdwdycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICA7OworICAgIGVzYWMKKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAgIDs7CisKKyAgKixjbCopCisgICAgIyBOYXRpdmUgTVNWQworICAgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfS5kbGwubGliJworCisgICAgY2FzZSAkYnVpbGRfb3MgaW4KKyAgICBtaW5ndyopCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9CisgICAgICBsdF9zYXZlX2lmcz0kSUZTCisgICAgICBJRlM9JzsnCisgICAgICBmb3IgbHRfcGF0aCBpbiAkTElCCisgICAgICBkbworICAgICAgICBJRlM9JGx0X3NhdmVfaWZzCisgICAgICAgICMgTGV0IERPUyB2YXJpYWJsZSBleHBhbnNpb24gcHJpbnQgdGhlIHNob3J0IDguMyBzdHlsZSBmaWxlIG5hbWUuCisgICAgICAgIGx0X3BhdGg9YGNkICIkbHRfcGF0aCIgMj4vZGV2L251bGwgJiYgY21kIC8vQyAiZm9yICVpIGluICgiLiIpIGRvIEBlY2hvICV+c2kiYAorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgJGx0X3BhdGgiCisgICAgICBkb25lCisgICAgICBJRlM9JGx0X3NhdmVfaWZzCisgICAgICAjIENvbnZlcnQgdG8gTVNZUyBzdHlsZS4KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgc2VkIC1lICdzfFxcXFx8L3xnJyAtZSAnc3wgXFwoW2EtekEtWl1cXCk6fCAvXFwxfGcnIC1lICdzfF4gfHwnYAorICAgICAgOzsKKyAgICBjeWd3aW4qKQorICAgICAgIyBDb252ZXJ0IHRvIHVuaXggZm9ybSwgdGhlbiB0byBkb3MgZm9ybSwgdGhlbiBiYWNrIHRvIHVuaXggZm9ybQorICAgICAgIyBidXQgdGhpcyB0aW1lIGRvcyBzdHlsZSAobm8gc3BhY2VzISkgc28gdGhhdCB0aGUgdW5peCBmb3JtIGxvb2tzCisgICAgICAjIGxpa2UgL2N5Z2RyaXZlL2MvUFJPR1JBfjE6L2N5Z2RyLi4uCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJExJQiJgCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tZG9zICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiAyPi9kZXYvbnVsbGAKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisgICAgICA7OworICAgICopCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRMSUIiCisgICAgICBpZiAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkR1JFUCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSC4KKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKKyAgICAgIGVsc2UKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorICAgICAgZmkKKyAgICAgICMgRklYTUU6IGZpbmQgdGhlIHNob3J0IG5hbWUgb3IgdGhlIHBhdGggY29tcG9uZW50cywgYXMgc3BhY2VzIGFyZQorICAgICAgIyBjb21tb24uIChlLmcuICJQcm9ncmFtIEZpbGVzIiAtPiAiUFJPR1JBfjEiKQorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CisgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgorICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgorICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CisgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWUnCisgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+CisgICAgICAgJFJNIFwkZGxwYXRoJworICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGluay5leGUnCisgICAgOzsKKworICAqKQorICAgICMgQXNzdW1lIE1TVkMgd3JhcHBlcgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUubGliJworICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAgOzsKKyAgZXNhYworICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KKyAgc2hsaWJwYXRoX3Zhcj1QQVRICisgIDs7CisKK2RhcndpbiogfCByaGFwc29keSopCisgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkeWxkIgorICB2ZXJzaW9uX3R5cGU9ZGFyd2luCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7bWFqb3J9JHNoYXJlZF9leHQgJHtsaWJuYW1lfSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0JworICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIHNobGlicGF0aF92YXI9RFlMRF9MSUJSQVJZX1BBVEgKKyAgc2hyZXh0X2NtZHM9J2B0ZXN0IC4kbW9kdWxlID0gLnllcyAmJiBlY2hvIC5zbyB8fCBlY2hvIC5keWxpYmAnCisKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC91c3IvbG9jYWwvbGliIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9sb2NhbC9saWIgL2xpYiAvdXNyL2xpYicKKyAgOzsKKworZGd1eCopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIDs7CisKK2ZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgIyBEcmFnb25GbHkgZG9lcyBub3QgaGF2ZSBhb3V0LiAgV2hlbi9pZiB0aGV5IGltcGxlbWVudCBhIG5ldworICAjIHZlcnNpb25pbmcgbWVjaGFuaXNtLCBhZGp1c3QgdGhpcy4KKyAgaWYgdGVzdCAteCAvdXNyL2Jpbi9vYmpmb3JtYXQ7IHRoZW4KKyAgICBvYmpmb3JtYXQ9YC91c3IvYmluL29iamZvcm1hdGAKKyAgZWxzZQorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBmcmVlYnNkWzIzXS4qKSBvYmpmb3JtYXQ9YW91dCA7OworICAgICopIG9iamZvcm1hdD1lbGYgOzsKKyAgICBlc2FjCisgIGZpCisgIHZlcnNpb25fdHlwZT1mcmVlYnNkLSRvYmpmb3JtYXQKKyAgY2FzZSAkdmVyc2lvbl90eXBlIGluCisgICAgZnJlZWJzZC1lbGYqKQorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgICBuZWVkX3ZlcnNpb249bm8KKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgOzsKKyAgICBmcmVlYnNkLSopCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgICAgIG5lZWRfdmVyc2lvbj15ZXMKKyAgICAgIDs7CisgIGVzYWMKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBmcmVlYnNkMi4qKQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICA7OworICBmcmVlYnNkMy5bMDFdKiB8IGZyZWVic2RlbGYzLlswMV0qKQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgOzsKKyAgZnJlZWJzZDMuWzItOV0qIHwgZnJlZWJzZGVsZjMuWzItOV0qIHwgXAorICBmcmVlYnNkNC5bMC01XSB8IGZyZWVic2RlbGY0LlswLTVdIHwgZnJlZWJzZDQuMS4xIHwgZnJlZWJzZGVsZjQuMS4xKQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICA7OworICAqKSAjIGZyb20gNC42IG9uLCBhbmQgRHJhZ29uRmx5CisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICA7OworICBlc2FjCisgIDs7CisKK2dudSopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHttYWpvcn0gJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK2hhaWt1KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBydW50aW1lX2xvYWRlciIKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR7bWFqb3J9ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9zeXN0ZW0vbGliJworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK2hwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorICAjIEdpdmUgYSBzb25hbWUgY29ycmVzcG9uZGluZyB0byB0aGUgbWFqb3IgdmVyc2lvbiBzbyB0aGF0IGRsZC5zbCByZWZ1c2VzIHRvCisgICMgbGluayBhZ2FpbnN0IG90aGVyIHZlcnNpb25zLgorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBjYXNlICRob3N0X2NwdSBpbgorICBpYTY0KikKKyAgICBzaHJleHRfY21kcz0nLnNvJworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNvIgorICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgaWYgdGVzdCAiWCRIUFVYX0lBNjRfTU9ERSIgPSBYMzI7IHRoZW4KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYiIKKyAgICBlbHNlCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXg2NCAvdXNyL2xvY2FsL2xpYi9ocHV4NjQiCisgICAgZmkKKyAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisgICAgOzsKKyAgaHBwYSo2NCopCisgICAgc2hyZXh0X2NtZHM9Jy5zbCcKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSCAjIEhvdyBzaG91bGQgd2UgaGFuZGxlIFNITElCX1BBVEgKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL3BhMjBfNjQgL3Vzci9jY3MvbGliL3BhMjBfNjQiCisgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYworICAgIDs7CisgICopCisgICAgc2hyZXh0X2NtZHM9Jy5zbCcKKyAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgorICAgIHNobGlicGF0aF92YXI9U0hMSUJfUEFUSAorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubyAjICtzIGlzIHJlcXVpcmVkIHRvIGVuYWJsZSBTSExJQl9QQVRICisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICA7OworICBlc2FjCisgICMgSFAtVVggcnVucyAqcmVhbGx5KiBzbG93bHkgdW5sZXNzIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG1vZGUgNTU1LCAuLi4KKyAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNTU1ICRsaWInCisgICMgb3IgZmFpbHMgb3V0cmlnaHQsIHNvIG92ZXJyaWRlIGF0b21pY2FsbHk6CisgIGluc3RhbGxfb3ZlcnJpZGVfbW9kZT01NTUKKyAgOzsKKworaW50ZXJpeFszLTldKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGR5bmFtaWNfbGlua2VyPSdJbnRlcml4IDMueCBsZC5zby4xIChQRSwgbGlrZSBFTEYpJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCitpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICBjYXNlICRob3N0X29zIGluCisgICAgbm9uc3RvcHV4KikgdmVyc2lvbl90eXBlPW5vbnN0b3B1eCA7OworICAgICopCisJaWYgdGVzdCAiJGx0X2N2X3Byb2dfZ251X2xkIiA9IHllczsgdGhlbgorCQl2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisJZWxzZQorCQl2ZXJzaW9uX3R5cGU9aXJpeAorCWZpIDs7CisgIGVzYWMKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgaXJpeDUqIHwgbm9uc3RvcHV4KikKKyAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9CisgICAgOzsKKyAgKikKKyAgICBjYXNlICRMRCBpbiAjIGxpYnRvb2wubTQgd2lsbCBhZGQgb25lIG9mIHRoZXNlIHN3aXRjaGVzIHRvIExECisgICAgKi0zMnwqIi0zMiAifCotbWVsZjMyYnNtaXB8KiItbWVsZjMyYnNtaXAgIikKKyAgICAgIGxpYnN1ZmY9IHNobGlic3VmZj0gbGlibWFnaWM9MzItYml0OzsKKyAgICAqLW4zMnwqIi1uMzIgInwqLW1lbGYzMmJtaXBuMzJ8KiItbWVsZjMyYm1pcG4zMiAiKQorICAgICAgbGlic3VmZj0zMiBzaGxpYnN1ZmY9TjMyIGxpYm1hZ2ljPU4zMjs7CisgICAgKi02NHwqIi02NCAifCotbWVsZjY0Ym1pcHwqIi1tZWxmNjRibWlwICIpCisgICAgICBsaWJzdWZmPTY0IHNobGlic3VmZj02NCBsaWJtYWdpYz02NC1iaXQ7OworICAgICopIGxpYnN1ZmY9IHNobGlic3VmZj0gbGlibWFnaWM9bmV2ZXItbWF0Y2g7OworICAgIGVzYWMKKyAgICA7OworICBlc2FjCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWSR7c2hsaWJzdWZmfV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJHtsaWJzdWZmfSAvbGliJHtsaWJzdWZmfSAvdXNyL2xvY2FsL2xpYiR7bGlic3VmZn0iCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0iCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworIyBObyBzaGFyZWQgbGliIHN1cHBvcnQgZm9yIExpbnV4IG9sZGxkLCBhb3V0LCBvciBjb2ZmLgorbGludXgqb2xkbGQqIHwgbGludXgqYW91dCogfCBsaW51eCpjb2ZmKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKKworIyBUaGlzIG11c3QgYmUgZ2xpYmMvRUxGLgorbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1uICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworCisgICMgU29tZSBiaW51dGlscyBsZCBhcmUgcGF0Y2hlZCB0byBzZXQgRFRfUlVOUEFUSAorICBpZiAke2x0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgIHNhdmVfTERGTEFHUz0kTERGTEFHUworICAgIHNhdmVfbGliZGlyPSRsaWJkaXIKKyAgICBldmFsICJsaWJkaXI9L2Zvbzsgd2w9XCIkbHRfcHJvZ19jb21waWxlcl93bFwiOyBcCisJIExERkxBR1M9XCJcJExERkxBR1MgJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIiIKKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgaWYgICgkT0JKRFVNUCAtcCBjb25mdGVzdCRhY19leGVleHQpIDI+L2Rldi9udWxsIHwgZ3JlcCAiUlVOUEFUSC4qJGxpYmRpciIgPi9kZXYvbnVsbDsgdGhlbiA6CisgIGx0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKK2ZpCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICBMREZMQUdTPSRzYXZlX0xERkxBR1MKKyAgICBsaWJkaXI9JHNhdmVfbGliZGlyCisKK2ZpCisKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSRsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgKKworICAjIFRoaXMgaW1wbGllcyBubyBmYXN0X2luc3RhbGwsIHdoaWNoIGlzIHVuYWNjZXB0YWJsZS4KKyAgIyBTb21lIHJld29yayB3aWxsIGJlIG5lZWRlZCB0byBhbGxvdyBmb3IgZmFzdF9pbnN0YWxsCisgICMgYmVmb3JlIHRoaXMgY2FuIGJlIGVuYWJsZWQuCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKworICAjIEFkZCBBQkktc3BlY2lmaWMgZGlyZWN0b3JpZXMgdG8gdGhlIHN5c3RlbSBsaWJyYXJ5IHBhdGguCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliNjQgL3Vzci9saWI2NCAvbGliIC91c3IvbGliIgorCisgICMgQXBwZW5kIGxkLnNvLmNvbmYgY29udGVudHMgdG8gdGhlIHNlYXJjaCBwYXRoCisgIGlmIHRlc3QgLWYgL2V0Yy9sZC5zby5jb25mOyB0aGVuCisgICAgbHRfbGRfZXh0cmE9YGF3ayAnL15pbmNsdWRlIC8geyBzeXN0ZW0oc3ByaW50ZigiY2QgL2V0YzsgY2F0ICVzIDI+L2Rldi9udWxsIiwgXCQyKSk7IHNraXAgPSAxOyB9IHsgaWYgKCFza2lwKSBwcmludCBcJDA7IHNraXAgPSAwOyB9JyA8IC9ldGMvbGQuc28uY29uZiB8ICRTRUQgLWUgJ3MvIy4qLy87L15bCSBdKmh3Y2FwWwkgXS9kO3MvWzosCV0vIC9nO3MvPVtePV0qJC8vO3MvPVtePSBdKiAvIC9nO3MvIi8vZzsvXiQvZCcgfCB0ciAnXG4nICcgJ2AKKyAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjICRsdF9sZF9leHRyYSIKKworICBmaQorCisgICMgV2UgdXNlZCB0byB0ZXN0IGZvciAvbGliL2xkLnNvLjEgYW5kIGRpc2FibGUgc2hhcmVkIGxpYnJhcmllcyBvbgorICAjIHBvd2VycGMsIGJlY2F1c2UgTWtMaW51eCBvbmx5IHN1cHBvcnRlZCBzaGFyZWQgbGlicmFyaWVzIHdpdGggdGhlCisgICMgR05VIGR5bmFtaWMgbGlua2VyLiAgU2luY2UgdGhpcyB3YXMgYnJva2VuIHdpdGggY3Jvc3MgY29tcGlsZXJzLAorICAjIG1vc3QgcG93ZXJwYy1saW51eCBib3hlcyBzdXBwb3J0IGR5bmFtaWMgbGlua2luZyB0aGVzZSBkYXlzIGFuZAorICAjIHBlb3BsZSBjYW4gYWx3YXlzIC0tZGlzYWJsZS1zaGFyZWQsIHRoZSB0ZXN0IHdhcyByZW1vdmVkLCBhbmQgd2UKKyAgIyBhc3N1bWUgdGhlIEdOVS9MaW51eCBkeW5hbWljIGxpbmtlciBpcyBpbiB1c2UuCisgIGR5bmFtaWNfbGlua2VyPSdHTlUvTGludXggbGQuc28nCisgIDs7CisKK25ldGJzZCopCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJworICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgKGEub3V0KSBsZC5zbycKKyAgZWxzZQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIGxkLmVsZl9zbycKKyAgZmkKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK25ld3NvczYpCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgOzsKKworKm50byogfCAqcW54KikKKyAgdmVyc2lvbl90eXBlPXFueAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICBkeW5hbWljX2xpbmtlcj0nbGRxbnguc28nCisgIDs7CisKK29wZW5ic2QqKQorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliIgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgIyBTb21lIG9sZGVyIHZlcnNpb25zIG9mIE9wZW5CU0QgKDMuMyBhdCBsZWFzdCkgKmRvKiBuZWVkIHZlcnNpb25lZCBsaWJzLgorICBjYXNlICRob3N0X29zIGluCisgICAgb3BlbmJzZDMuMyB8IG9wZW5ic2QzLjMuKikJbmVlZF92ZXJzaW9uPXllcyA7OworICAgICopCQkJCW5lZWRfdmVyc2lvbj1ubyAgOzsKKyAgZXNhYworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgb3BlbmJzZDIuWzg5XSB8IG9wZW5ic2QyLls4OV0uKikKKwlzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKwk7OworICAgICAgKikKKwlzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisJOzsKKyAgICAgIGVzYWMKKyAgZWxzZQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgZmkKKyAgOzsKKworb3MyKikKKyAgbGlibmFtZV9zcGVjPSckbmFtZScKKyAgc2hyZXh0X2NtZHM9Ii5kbGwiCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fSAkbGlibmFtZS5hJworICBkeW5hbWljX2xpbmtlcj0nT1MvMiBsZC5leGUnCisgIHNobGlicGF0aF92YXI9TElCUEFUSAorICA7OworCitvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgIHZlcnNpb25fdHlwZT1vc2YKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL3NobGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYi9jbXBscnMvY2MgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIgL3Zhci9zaGxpYiIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiCisgIDs7CisKK3Jkb3MqKQorICBkeW5hbWljX2xpbmtlcj1ubworICA7OworCitzb2xhcmlzKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgIyBsZGQgY29tcGxhaW5zIHVubGVzcyBsaWJyYXJpZXMgYXJlIGV4ZWN1dGFibGUKKyAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgK3ggJGxpYicKKyAgOzsKKworc3Vub3M0KikKKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3Vzci9ldGMiIGxkY29uZmlnICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICAgIG5lZWRfbGliX3ByZWZpeD1ubworICBmaQorICBuZWVkX3ZlcnNpb249eWVzCisgIDs7CisKK3N5c3Y0IHwgc3lzdjQuMyopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGNhc2UgJGhvc3RfdmVuZG9yIGluCisgICAgc25pKQorICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICisgICAgICA7OworICAgIHNpZW1lbnMpCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIDs7CisgICAgbW90b3JvbGEpCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIG5lZWRfdmVyc2lvbj1ubworICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy9saWIgL3Vzci9saWIgL3Vzci9jY3MvbGliJworICAgICAgOzsKKyAgZXNhYworICA7OworCitzeXN2NCpNUCopCisgIGlmIHRlc3QgLWQgL3Vzci9uZWMgO3RoZW4KKyAgICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0uJHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0uJG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9LiRtYWpvcicKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBmaQorICA7OworCitzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKKyAgdmVyc2lvbl90eXBlPWZyZWVic2QtZWxmCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvdXNyL2dudS9saWIgL3Vzci9jY3MvbGliIC91c3IvbGliIC9saWInCisgIGVsc2UKKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvY2NzL2xpYiAvdXNyL2xpYicKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBzY28zLjJ2NSopCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAvbGliIgorCTs7CisgICAgZXNhYworICBmaQorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9saWInCisgIDs7CisKK3RwZiopCisgICMgVFBGIGlzIGEgY3Jvc3MtdGFyZ2V0IG9ubHkuICBQcmVmZXJyZWQgY3Jvc3MtaG9zdCA9IEdOVS9MaW51eC4KKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCit1dHM0KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgOzsKKworKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKK2VzYWMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZHluYW1pY19saW5rZXIiID4mNQorJGFzX2VjaG8gIiRkeW5hbWljX2xpbmtlciIgPiY2OyB9Cit0ZXN0ICIkZHluYW1pY19saW5rZXIiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubworCit2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iUEFUSCAkc2hsaWJwYXRoX3ZhciAkcnVucGF0aF92YXIiCitpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIEdDQ19FWEVDX1BSRUZJWCBDT01QSUxFUl9QQVRIIExJQlJBUllfUEFUSCIKK2ZpCisKK2lmIHRlc3QgIiR7bHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjK3NldH0iID0gc2V0OyB0aGVuCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKK2ZpCitpZiB0ZXN0ICIke2x0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjK3NldH0iID0gc2V0OyB0aGVuCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkbHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMiCitmaQorCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXMuLi4gIiA+JjY7IH0KK2hhcmRjb2RlX2FjdGlvbj0KK2lmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIiB8fAorICAgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIiB8fAorICAgdGVzdCAiWCRoYXJkY29kZV9hdXRvbWF0aWMiID0gIlh5ZXMiIDsgdGhlbgorCisgICMgV2UgY2FuIGhhcmRjb2RlIG5vbi1leGlzdGVudCBkaXJlY3Rvcmllcy4KKyAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgIT0gbm8gJiYKKyAgICAgIyBJZiB0aGUgb25seSBtZWNoYW5pc20gdG8gYXZvaWQgaGFyZGNvZGluZyBpcyBzaGxpYnBhdGhfdmFyLCB3ZQorICAgICAjIGhhdmUgdG8gcmVsaW5rLCBvdGhlcndpc2Ugd2UgbWlnaHQgbGluayB3aXRoIGFuIGluc3RhbGxlZCBsaWJyYXJ5CisgICAgICMgd2hlbiB3ZSBzaG91bGQgYmUgbGlua2luZyB3aXRoIGEgeWV0LXRvLWJlLWluc3RhbGxlZCBvbmUKKyAgICAgIyMgdGVzdCAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgKSIgIT0gbm8gJiYKKyAgICAgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiICE9IG5vOyB0aGVuCisgICAgIyBMaW5raW5nIGFsd2F5cyBoYXJkY29kZXMgdGhlIHRlbXBvcmFyeSBsaWJyYXJ5IGRpcmVjdG9yeS4KKyAgICBoYXJkY29kZV9hY3Rpb249cmVsaW5rCisgIGVsc2UKKyAgICAjIFdlIGNhbiBsaW5rIHdpdGhvdXQgaGFyZGNvZGluZywgYW5kIHdlIGNhbiBoYXJkY29kZSBub25leGlzdGluZyBkaXJzLgorICAgIGhhcmRjb2RlX2FjdGlvbj1pbW1lZGlhdGUKKyAgZmkKK2Vsc2UKKyAgIyBXZSBjYW5ub3QgaGFyZGNvZGUgYW55dGhpbmcsIG9yIGVsc2Ugd2UgY2FuIG9ubHkgaGFyZGNvZGUgZXhpc3RpbmcKKyAgIyBkaXJlY3Rvcmllcy4KKyAgaGFyZGNvZGVfYWN0aW9uPXVuc3VwcG9ydGVkCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRoYXJkY29kZV9hY3Rpb24iID4mNQorJGFzX2VjaG8gIiRoYXJkY29kZV9hY3Rpb24iID4mNjsgfQorCitpZiB0ZXN0ICIkaGFyZGNvZGVfYWN0aW9uIiA9IHJlbGluayB8fAorICAgdGVzdCAiJGluaGVyaXRfcnBhdGgiID0geWVzOyB0aGVuCisgICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IHN1cHBvcnRlZAorICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCitlbGlmIHRlc3QgIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiID0geWVzIHx8CisgICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IG5vOyB0aGVuCisgICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IG5lY2Vzc2FyeQorICBlbmFibGVfZmFzdF9pbnN0YWxsPW5lZWRsZXNzCitmaQorCisKKworCisKKworICBpZiB0ZXN0ICJ4JGVuYWJsZV9kbG9wZW4iICE9IHh5ZXM7IHRoZW4KKyAgZW5hYmxlX2Rsb3Blbj11bmtub3duCisgIGVuYWJsZV9kbG9wZW5fc2VsZj11bmtub3duCisgIGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9dW5rbm93bgorZWxzZQorICBsdF9jdl9kbG9wZW49bm8KKyAgbHRfY3ZfZGxvcGVuX2xpYnM9CisKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBiZW9zKikKKyAgICBsdF9jdl9kbG9wZW49ImxvYWRfYWRkX29uIgorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgIGx0X2N2X2Rsb3Blbl9zZWxmPXllcworICAgIDs7CisKKyAgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgbHRfY3ZfZGxvcGVuPSJMb2FkTGlicmFyeSIKKyAgICBsdF9jdl9kbG9wZW5fbGlicz0KKyAgICA7OworCisgIGN5Z3dpbiopCisgICAgbHRfY3ZfZGxvcGVuPSJkbG9wZW4iCisgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CisgICAgOzsKKworICBkYXJ3aW4qKQorICAjIGlmIGxpYmRsIGlzIGluc3RhbGxlZCB3ZSBuZWVkIHRvIGxpbmsgYWdhaW5zdCBpdAorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfZGxfZGxvcGVuKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxkbCAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZGxvcGVuICgpOworaW50CittYWluICgpCit7CityZXR1cm4gZGxvcGVuICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9kbF9kbG9wZW49eWVzCitlbHNlCisgIGFjX2N2X2xpYl9kbF9kbG9wZW49bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfZGxfZGxvcGVuIiA9IHh5ZXM7IHRoZW4gOgorICBsdF9jdl9kbG9wZW49ImRsb3BlbiIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGwiCitlbHNlCisKKyAgICBsdF9jdl9kbG9wZW49ImR5bGQiCisgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CisgICAgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzCisKK2ZpCisKKyAgICA7OworCisgICopCisgICAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAic2hsX2xvYWQiICJhY19jdl9mdW5jX3NobF9sb2FkIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX3NobF9sb2FkIiA9IHh5ZXM7IHRoZW4gOgorICBsdF9jdl9kbG9wZW49InNobF9sb2FkIgorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzaGxfbG9hZCBpbiAtbGRsZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc2hsX2xvYWQgaW4gLWxkbGQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX2RsZF9zaGxfbG9hZCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sZGxkICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBzaGxfbG9hZCAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHNobF9sb2FkICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQ9eWVzCitlbHNlCisgIGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQ9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2RsZF9zaGxfbG9hZCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfZGxkX3NobF9sb2FkIiA9IHh5ZXM7IHRoZW4gOgorICBsdF9jdl9kbG9wZW49InNobF9sb2FkIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbGQiCitlbHNlCisgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImRsb3BlbiIgImFjX2N2X2Z1bmNfZGxvcGVuIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX2Rsb3BlbiIgPSB4eWVzOyB0aGVuIDoKKyAgbHRfY3ZfZGxvcGVuPSJkbG9wZW4iCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfZGxfZGxvcGVuKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxkbCAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZGxvcGVuICgpOworaW50CittYWluICgpCit7CityZXR1cm4gZGxvcGVuICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9kbF9kbG9wZW49eWVzCitlbHNlCisgIGFjX2N2X2xpYl9kbF9kbG9wZW49bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfZGxfZGxvcGVuIiA9IHh5ZXM7IHRoZW4gOgorICBsdF9jdl9kbG9wZW49ImRsb3BlbiIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGwiCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbHN2bGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbHN2bGQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX3N2bGRfZGxvcGVuKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxzdmxkICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBkbG9wZW4gKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBkbG9wZW4gKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX3N2bGRfZGxvcGVuPXllcworZWxzZQorICBhY19jdl9saWJfc3ZsZF9kbG9wZW49bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX3N2bGRfZGxvcGVuIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX3N2bGRfZGxvcGVuIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX3N2bGRfZGxvcGVuIiA9IHh5ZXM7IHRoZW4gOgorICBsdF9jdl9kbG9wZW49ImRsb3BlbiIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sc3ZsZCIKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZGxkX2xpbmsgaW4gLWxkbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGRsZF9saW5rIGluIC1sZGxkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl9kbGRfZGxkX2xpbmsrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGRsZCAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZGxkX2xpbmsgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBkbGRfbGluayAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfZGxkX2RsZF9saW5rPXllcworZWxzZQorICBhY19jdl9saWJfZGxkX2RsZF9saW5rPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9kbGRfZGxkX2xpbmsiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfZGxkX2RsZF9saW5rIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX2RsZF9kbGRfbGluayIgPSB4eWVzOyB0aGVuIDoKKyAgbHRfY3ZfZGxvcGVuPSJkbGRfbGluayIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGxkIgorZmkKKworCitmaQorCisKK2ZpCisKKworZmkKKworCitmaQorCisKK2ZpCisKKyAgICA7OworICBlc2FjCisKKyAgaWYgdGVzdCAieCRsdF9jdl9kbG9wZW4iICE9IHhubzsgdGhlbgorICAgIGVuYWJsZV9kbG9wZW49eWVzCisgIGVsc2UKKyAgICBlbmFibGVfZGxvcGVuPW5vCisgIGZpCisKKyAgY2FzZSAkbHRfY3ZfZGxvcGVuIGluCisgIGRsb3BlbikKKyAgICBzYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisgICAgdGVzdCAieCRhY19jdl9oZWFkZXJfZGxmY25faCIgPSB4eWVzICYmIENQUEZMQUdTPSIkQ1BQRkxBR1MgLURIQVZFX0RMRkNOX0giCisKKyAgICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorICAgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsIGV2YWwgTERGTEFHUz1cIlwkTERGTEFHUyAkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjXCIKKworICAgIHNhdmVfTElCUz0iJExJQlMiCisgICAgTElCUz0iJGx0X2N2X2Rsb3Blbl9saWJzICRMSUJTIgorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGEgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGEgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZi4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9kbG9wZW5fc2VsZis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIAkgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgbHRfY3ZfZGxvcGVuX3NlbGY9Y3Jvc3MKK2Vsc2UKKyAgbHRfZGx1bmtub3duPTA7IGx0X2Rsbm9fdXNjb3JlPTE7IGx0X2RsbmVlZF91c2NvcmU9MgorICBsdF9zdGF0dXM9JGx0X2RsdW5rbm93bgorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpZiBIQVZFX0RMRkNOX0gKKyNpbmNsdWRlIDxkbGZjbi5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaWZkZWYgUlRMRF9HTE9CQUwKKyMgIGRlZmluZSBMVF9ETEdMT0JBTAkJUlRMRF9HTE9CQUwKKyNlbHNlCisjICBpZmRlZiBETF9HTE9CQUwKKyMgICAgZGVmaW5lIExUX0RMR0xPQkFMCQlETF9HTE9CQUwKKyMgIGVsc2UKKyMgICAgZGVmaW5lIExUX0RMR0xPQkFMCQkwCisjICBlbmRpZgorI2VuZGlmCisKKy8qIFdlIG1heSBoYXZlIHRvIGRlZmluZSBMVF9ETExBWllfT1JfTk9XIGluIHRoZSBjb21tYW5kIGxpbmUgaWYgd2UKKyAgIGZpbmQgb3V0IGl0IGRvZXMgbm90IHdvcmsgaW4gc29tZSBwbGF0Zm9ybS4gKi8KKyNpZm5kZWYgTFRfRExMQVpZX09SX05PVworIyAgaWZkZWYgUlRMRF9MQVpZCisjICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCQlSVExEX0xBWlkKKyMgIGVsc2UKKyMgICAgaWZkZWYgRExfTEFaWQorIyAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCQlETF9MQVpZCisjICAgIGVsc2UKKyMgICAgICBpZmRlZiBSVExEX05PVworIyAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJUlRMRF9OT1cKKyMgICAgICBlbHNlCisjICAgICAgICBpZmRlZiBETF9OT1cKKyMgICAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJRExfTk9XCisjICAgICAgICBlbHNlCisjICAgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCTAKKyMgICAgICAgIGVuZGlmCisjICAgICAgZW5kaWYKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZW5kaWYKKworLyogV2hlbiAtZnZpc2JpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAorICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLworI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCitpbnQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisjZW5kaWYKKworaW50IGZub3JkICgpIHsgcmV0dXJuIDQyOyB9CitpbnQgbWFpbiAoKQoreworICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKKyAgaW50IHN0YXR1cyA9ICRsdF9kbHVua25vd247CisKKyAgaWYgKHNlbGYpCisgICAgeworICAgICAgaWYgKGRsc3ltIChzZWxmLCJmbm9yZCIpKSAgICAgICBzdGF0dXMgPSAkbHRfZGxub191c2NvcmU7CisgICAgICBlbHNlCisgICAgICAgIHsKKwkgIGlmIChkbHN5bSggc2VsZiwiX2Zub3JkIikpICBzdGF0dXMgPSAkbHRfZGxuZWVkX3VzY29yZTsKKyAgICAgICAgICBlbHNlIHB1dHMgKGRsZXJyb3IgKCkpOworCX0KKyAgICAgIC8qIGRsY2xvc2UgKHNlbGYpOyAqLworICAgIH0KKyAgZWxzZQorICAgIHB1dHMgKGRsZXJyb3IgKCkpOworCisgIHJldHVybiBzdGF0dXM7Cit9CitfTFRfRU9GCisgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19saW5rXCIiOyB9ID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAyPi9kZXYvbnVsbDsgdGhlbgorICAgICguL2NvbmZ0ZXN0OyBleGl0OyApID4mNSAyPi9kZXYvbnVsbAorICAgIGx0X3N0YXR1cz0kPworICAgIGNhc2UgeCRsdF9zdGF0dXMgaW4KKyAgICAgIHgkbHRfZGxub191c2NvcmUpIGx0X2N2X2Rsb3Blbl9zZWxmPXllcyA7OworICAgICAgeCRsdF9kbG5lZWRfdXNjb3JlKSBsdF9jdl9kbG9wZW5fc2VsZj15ZXMgOzsKKyAgICAgIHgkbHRfZGx1bmtub3dufHgqKSBsdF9jdl9kbG9wZW5fc2VsZj1ubyA7OworICAgIGVzYWMKKyAgZWxzZSA6CisgICAgIyBjb21waWxhdGlvbiBmYWlsZWQKKyAgICBsdF9jdl9kbG9wZW5fc2VsZj1ubworICBmaQorZmkKK3JtIC1mciBjb25mdGVzdCoKKworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9kbG9wZW5fc2VsZiIgPiY1CiskYXNfZWNobyAiJGx0X2N2X2Rsb3Blbl9zZWxmIiA+JjY7IH0KKworICAgIGlmIHRlc3QgIngkbHRfY3ZfZGxvcGVuX3NlbGYiID0geHllczsgdGhlbgorICAgICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBMREZMQUdTPVwiXCRMREZMQUdTICRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY1wiCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgYSBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgYSBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIAkgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPWNyb3NzCitlbHNlCisgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKKyAgbHRfc3RhdHVzPSRsdF9kbHVua25vd24KKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKyNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaWYgSEFWRV9ETEZDTl9ICisjaW5jbHVkZSA8ZGxmY24uaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lmZGVmIFJUTERfR0xPQkFMCisjICBkZWZpbmUgTFRfRExHTE9CQUwJCVJUTERfR0xPQkFMCisjZWxzZQorIyAgaWZkZWYgRExfR0xPQkFMCisjICAgIGRlZmluZSBMVF9ETEdMT0JBTAkJRExfR0xPQkFMCisjICBlbHNlCisjICAgIGRlZmluZSBMVF9ETEdMT0JBTAkJMAorIyAgZW5kaWYKKyNlbmRpZgorCisvKiBXZSBtYXkgaGF2ZSB0byBkZWZpbmUgTFRfRExMQVpZX09SX05PVyBpbiB0aGUgY29tbWFuZCBsaW5lIGlmIHdlCisgICBmaW5kIG91dCBpdCBkb2VzIG5vdCB3b3JrIGluIHNvbWUgcGxhdGZvcm0uICovCisjaWZuZGVmIExUX0RMTEFaWV9PUl9OT1cKKyMgIGlmZGVmIFJUTERfTEFaWQorIyAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkJUlRMRF9MQVpZCisjICBlbHNlCisjICAgIGlmZGVmIERMX0xBWlkKKyMgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkJRExfTEFaWQorIyAgICBlbHNlCisjICAgICAgaWZkZWYgUlRMRF9OT1cKKyMgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCVJUTERfTk9XCisjICAgICAgZWxzZQorIyAgICAgICAgaWZkZWYgRExfTk9XCisjICAgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCURMX05PVworIyAgICAgICAgZWxzZQorIyAgICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkwCisjICAgICAgICBlbmRpZgorIyAgICAgIGVuZGlmCisjICAgIGVuZGlmCisjICBlbmRpZgorI2VuZGlmCisKKy8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKKyAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQoraW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworI2VuZGlmCisKK2ludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQoraW50IG1haW4gKCkKK3sKKyAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CisgIGludCBzdGF0dXMgPSAkbHRfZGx1bmtub3duOworCisgIGlmIChzZWxmKQorICAgIHsKKyAgICAgIGlmIChkbHN5bSAoc2VsZiwiZm5vcmQiKSkgICAgICAgc3RhdHVzID0gJGx0X2Rsbm9fdXNjb3JlOworICAgICAgZWxzZQorICAgICAgICB7CisJICBpZiAoZGxzeW0oIHNlbGYsIl9mbm9yZCIpKSAgc3RhdHVzID0gJGx0X2RsbmVlZF91c2NvcmU7CisgICAgICAgICAgZWxzZSBwdXRzIChkbGVycm9yICgpKTsKKwl9CisgICAgICAvKiBkbGNsb3NlIChzZWxmKTsgKi8KKyAgICB9CisgIGVsc2UKKyAgICBwdXRzIChkbGVycm9yICgpKTsKKworICByZXR1cm4gc3RhdHVzOworfQorX0xUX0VPRgorICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfbGlua1wiIjsgfSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gMj4vZGV2L251bGw7IHRoZW4KKyAgICAoLi9jb25mdGVzdDsgZXhpdDsgKSA+JjUgMj4vZGV2L251bGwKKyAgICBsdF9zdGF0dXM9JD8KKyAgICBjYXNlIHgkbHRfc3RhdHVzIGluCisgICAgICB4JGx0X2Rsbm9fdXNjb3JlKSBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9eWVzIDs7CisgICAgICB4JGx0X2RsbmVlZF91c2NvcmUpIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz15ZXMgOzsKKyAgICAgIHgkbHRfZGx1bmtub3dufHgqKSBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9bm8gOzsKKyAgICBlc2FjCisgIGVsc2UgOgorICAgICMgY29tcGlsYXRpb24gZmFpbGVkCisgICAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPW5vCisgIGZpCitmaQorcm0gLWZyIGNvbmZ0ZXN0KgorCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYyIgPiY1CiskYXNfZWNobyAiJGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYyIgPiY2OyB9CisgICAgZmkKKworICAgIENQUEZMQUdTPSIkc2F2ZV9DUFBGTEFHUyIKKyAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorICAgIExJQlM9IiRzYXZlX0xJQlMiCisgICAgOzsKKyAgZXNhYworCisgIGNhc2UgJGx0X2N2X2Rsb3Blbl9zZWxmIGluCisgIHllc3xubykgZW5hYmxlX2Rsb3Blbl9zZWxmPSRsdF9jdl9kbG9wZW5fc2VsZiA7OworICAqKSBlbmFibGVfZGxvcGVuX3NlbGY9dW5rbm93biA7OworICBlc2FjCisKKyAgY2FzZSAkbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIGluCisgIHllc3xubykgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz0kbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIDs7CisgICopIGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9dW5rbm93biA7OworICBlc2FjCitmaQorCisKKworCisKKworCisKKworCisKKworCisKKworCisKK3N0cmlwbGliPQorb2xkX3N0cmlwbGliPQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHN0cmlwcGluZyBsaWJyYXJpZXMgaXMgcG9zc2libGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBzdHJpcHBpbmcgbGlicmFyaWVzIGlzIHBvc3NpYmxlLi4uICIgPiY2OyB9CitpZiB0ZXN0IC1uICIkU1RSSVAiICYmICRTVFJJUCAtViAyPiYxIHwgJEdSRVAgIkdOVSBzdHJpcCIgPi9kZXYvbnVsbDsgdGhlbgorICB0ZXN0IC16ICIkb2xkX3N0cmlwbGliIiAmJiBvbGRfc3RyaXBsaWI9IiRTVFJJUCAtLXN0cmlwLWRlYnVnIgorICB0ZXN0IC16ICIkc3RyaXBsaWIiICYmIHN0cmlwbGliPSIkU1RSSVAgLS1zdHJpcC11bm5lZWRlZCIKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KK2Vsc2UKKyMgRklYTUUgLSBpbnNlcnQgc29tZSByZWFsIHRlc3RzLCBob3N0X29zIGlzbid0IHJlYWxseSBnb29kIGVub3VnaAorICBjYXNlICRob3N0X29zIGluCisgIGRhcndpbiopCisgICAgaWYgdGVzdCAtbiAiJFNUUklQIiA7IHRoZW4KKyAgICAgIHN0cmlwbGliPSIkU1RSSVAgLXgiCisgICAgICBvbGRfc3RyaXBsaWI9IiRTVFJJUCAtUyIKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgZWxzZQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgZmkKKyAgICA7OworICAqKQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIDs7CisgIGVzYWMKK2ZpCisKKworCisKKworCisKKworCisKKworCisgICMgUmVwb3J0IHdoaWNoIGxpYnJhcnkgdHlwZXMgd2lsbCBhY3R1YWxseSBiZSBidWlsdAorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRjYW5fYnVpbGRfc2hhcmVkIiA+JjUKKyRhc19lY2hvICIkY2FuX2J1aWxkX3NoYXJlZCIgPiY2OyB9CisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLi4uICIgPiY2OyB9CisgIHRlc3QgIiRjYW5fYnVpbGRfc2hhcmVkIiA9ICJubyIgJiYgZW5hYmxlX3NoYXJlZD1ubworCisgICMgT24gQUlYLCBzaGFyZWQgbGlicmFyaWVzIGFuZCBzdGF0aWMgbGlicmFyaWVzIHVzZSB0aGUgc2FtZSBuYW1lc3BhY2UsIGFuZAorICAjIGFyZSBhbGwgYnVpbHQgZnJvbSBQSUMuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYWl4MyopCisgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KKyAgICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICAgICAgYXJjaGl2ZV9jbWRzPSIkYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkbGliIgorICAgICAgcG9zdGluc3RhbGxfY21kcz0nJFJBTkxJQiAkbGliJworICAgIGZpCisgICAgOzsKKworICBhaXhbNC05XSopCisgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0ICYmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IG5vIDsgdGhlbgorICAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KKyAgICBmaQorICAgIDs7CisgIGVzYWMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRlbmFibGVfc2hhcmVkIiA+JjUKKyRhc19lY2hvICIkZW5hYmxlX3NoYXJlZCIgPiY2OyB9CisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzLi4uICIgPiY2OyB9CisgICMgTWFrZSBzdXJlIGVpdGhlciBlbmFibGVfc2hhcmVkIG9yIGVuYWJsZV9zdGF0aWMgaXMgeWVzLgorICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgfHwgZW5hYmxlX3N0YXRpYz15ZXMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRlbmFibGVfc3RhdGljIiA+JjUKKyRhc19lY2hvICIkZW5hYmxlX3N0YXRpYyIgPiY2OyB9CisKKworCisKK2ZpCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKK0NDPSIkbHRfc2F2ZV9DQyIKKworICAgICAgaWYgdGVzdCAtbiAiJENYWCIgJiYgKCB0ZXN0ICJYJENYWCIgIT0gIlhubyIgJiYKKyAgICAoICh0ZXN0ICJYJENYWCIgPSAiWGcrKyIgJiYgYGcrKyAtdiA+L2Rldi9udWxsIDI+JjFgICkgfHwKKyAgICAodGVzdCAiWCRDWFgiICE9ICJYZysrIikpKSA7IHRoZW4KKyAgYWNfZXh0PWNwcAorYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQysrIHByZXByb2Nlc3NvciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDKysgcHJlcHJvY2Vzc29yLi4uICIgPiY2OyB9CitpZiB0ZXN0IC16ICIkQ1hYQ1BQIjsgdGhlbgorICBpZiAke2FjX2N2X3Byb2dfQ1hYQ1BQKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgICAgICMgRG91YmxlIHF1b3RlcyBiZWNhdXNlIENYWENQUCBuZWVkcyB0byBiZSBleHBhbmRlZAorICAgIGZvciBDWFhDUFAgaW4gIiRDWFggLUUiICIvbGliL2NwcCIKKyAgICBkbworICAgICAgYWNfcHJlcHJvY19vaz1mYWxzZQorZm9yIGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKK2RvCisgICMgVXNlIGEgaGVhZGVyIGZpbGUgdGhhdCBjb21lcyB3aXRoIGdjYywgc28gY29uZmlndXJpbmcgZ2xpYmMKKyAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCisgICMgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAjIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4KKyAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKKyAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5bnRheCBlcnJvciIgaXMgaGVyZSB0byBjYXRjaCB0aGlzIGNhc2UuCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisJCSAgICAgU3ludGF4IGVycm9yCitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisKK2Vsc2UKKyAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgorY29udGludWUKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CisKKyAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMKKyAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+CitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisgICMgQnJva2VuOiBzdWNjZXNzIG9uIGludmFsaWQgaW5wdXQuCitjb250aW51ZQorZWxzZQorICAjIFBhc3NlcyBib3RoIHRlc3RzLgorYWNfcHJlcHJvY19vaz06CiticmVhaworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKKworZG9uZQorIyBCZWNhdXNlIG9mIGBicmVhaycsIF9BQ19QUkVQUk9DX0lGRUxTRSdzIGNsZWFuaW5nIGNvZGUgd2FzIHNraXBwZWQuCitybSAtZiBjb25mdGVzdC5pIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CitpZiAkYWNfcHJlcHJvY19vazsgdGhlbiA6CisgIGJyZWFrCitmaQorCisgICAgZG9uZQorICAgIGFjX2N2X3Byb2dfQ1hYQ1BQPSRDWFhDUFAKKworZmkKKyAgQ1hYQ1BQPSRhY19jdl9wcm9nX0NYWENQUAorZWxzZQorICBhY19jdl9wcm9nX0NYWENQUD0kQ1hYQ1BQCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDWFhDUFAiID4mNQorJGFzX2VjaG8gIiRDWFhDUFAiID4mNjsgfQorYWNfcHJlcHJvY19vaz1mYWxzZQorZm9yIGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKK2RvCisgICMgVXNlIGEgaGVhZGVyIGZpbGUgdGhhdCBjb21lcyB3aXRoIGdjYywgc28gY29uZmlndXJpbmcgZ2xpYmMKKyAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCisgICMgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAjIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4KKyAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKKyAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5bnRheCBlcnJvciIgaXMgaGVyZSB0byBjYXRjaCB0aGlzIGNhc2UuCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisJCSAgICAgU3ludGF4IGVycm9yCitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisKK2Vsc2UKKyAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgorY29udGludWUKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CisKKyAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMKKyAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+CitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisgICMgQnJva2VuOiBzdWNjZXNzIG9uIGludmFsaWQgaW5wdXQuCitjb250aW51ZQorZWxzZQorICAjIFBhc3NlcyBib3RoIHRlc3RzLgorYWNfcHJlcHJvY19vaz06CiticmVhaworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKKworZG9uZQorIyBCZWNhdXNlIG9mIGBicmVhaycsIF9BQ19QUkVQUk9DX0lGRUxTRSdzIGNsZWFuaW5nIGNvZGUgd2FzIHNraXBwZWQuCitybSAtZiBjb25mdGVzdC5pIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CitpZiAkYWNfcHJlcHJvY19vazsgdGhlbiA6CisKK2Vsc2UKKyAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAiQysrIHByZXByb2Nlc3NvciBcIiRDWFhDUFBcIiBmYWlscyBzYW5pdHkgY2hlY2sKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CitmaQorCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKK2Vsc2UKKyAgX2x0X2NhdWdodF9DWFhfZXJyb3I9eWVzCitmaQorCithY19leHQ9Y3BwCithY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQorCithcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9bm8KK2FsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0KK2Fsd2F5c19leHBvcnRfc3ltYm9sc19DWFg9bm8KK2FyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPQorY29tcGlsZXJfbmVlZHNfb2JqZWN0X0NYWD1ubworZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0KK2hhcmRjb2RlX2RpcmVjdF9DWFg9bm8KK2hhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZV9DWFg9bm8KK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPQoraGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9CitoYXJkY29kZV9taW51c19MX0NYWD1ubworaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9dW5zdXBwb3J0ZWQKK2hhcmRjb2RlX2F1dG9tYXRpY19DWFg9bm8KK2luaGVyaXRfcnBhdGhfQ1hYPW5vCittb2R1bGVfY21kc19DWFg9Cittb2R1bGVfZXhwc3ltX2NtZHNfQ1hYPQorbGlua19hbGxfZGVwbGlic19DWFg9dW5rbm93bgorb2xkX2FyY2hpdmVfY21kc19DWFg9JG9sZF9hcmNoaXZlX2NtZHMKK3JlbG9hZF9mbGFnX0NYWD0kcmVsb2FkX2ZsYWcKK3JlbG9hZF9jbWRzX0NYWD0kcmVsb2FkX2NtZHMKK25vX3VuZGVmaW5lZF9mbGFnX0NYWD0KK3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0KK2VuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfQ1hYPW5vCisKKyMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBDKysgdGVzdCBzb3VyY2VzLgorYWNfZXh0PWNwcAorCisjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgQysrIHRlc3Qgc291cmNlcy4KK29iamV4dD1vCitvYmpleHRfQ1hYPSRvYmpleHQKKworIyBObyBzZW5zZSBpbiBydW5uaW5nIGFsbCB0aGVzZSB0ZXN0cyBpZiB3ZSBhbHJlYWR5IGRldGVybWluZWQgdGhhdAorIyB0aGUgQ1hYIGNvbXBpbGVyIGlzbid0IHdvcmtpbmcuICBTb21lIHZhcmlhYmxlcyAobGlrZSBlbmFibGVfc2hhcmVkKQorIyBhcmUgY3VycmVudGx5IGFzc3VtZWQgdG8gYXBwbHkgdG8gYWxsIGNvbXBpbGVycyBvbiB0aGlzIHBsYXRmb3JtLAorIyBhbmQgd2lsbCBiZSBjb3JydXB0ZWQgYnkgc2V0dGluZyB0aGVtIGJhc2VkIG9uIGEgbm9uLXdvcmtpbmcgY29tcGlsZXIuCitpZiB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllczsgdGhlbgorICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworICBsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9ImludCBzb21lX3ZhcmlhYmxlID0gMDsiCisKKyAgIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKKyAgbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSdpbnQgbWFpbihpbnQsIGNoYXIgKltdKSB7IHJldHVybigwKTsgfScKKworICAjIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCisKKworCisKKworCisjIElmIG5vIEMgY29tcGlsZXIgd2FzIHNwZWNpZmllZCwgdXNlIENDLgorTFRDQz0ke0xUQ0MtIiRDQyJ9CisKKyMgSWYgbm8gQyBjb21waWxlciBmbGFncyB3ZXJlIHNwZWNpZmllZCwgdXNlIENGTEFHUy4KK0xUQ0ZMQUdTPSR7TFRDRkxBR1MtIiRDRkxBR1MifQorCisjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorY29tcGlsZXI9JENDCisKKworICAjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKK2VjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0CitldmFsICIkYWNfY29tcGlsZSIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKK19sdF9jb21waWxlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKKyRSTSBjb25mdGVzdCoKKworICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKK2VjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0CitldmFsICIkYWNfbGluayIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKK19sdF9saW5rZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCiskUk0gLXIgY29uZnRlc3QqCisKKworICAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorICBsdF9zYXZlX0NDPSRDQworICBsdF9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisgIGx0X3NhdmVfTEQ9JExECisgIGx0X3NhdmVfR0NDPSRHQ0MKKyAgR0NDPSRHWFgKKyAgbHRfc2F2ZV93aXRoX2dudV9sZD0kd2l0aF9nbnVfbGQKKyAgbHRfc2F2ZV9wYXRoX0xEPSRsdF9jdl9wYXRoX0xECisgIGlmIHRlc3QgLW4gIiR7bHRfY3ZfcHJvZ19nbnVfbGRjeHgrc2V0fSI7IHRoZW4KKyAgICBsdF9jdl9wcm9nX2dudV9sZD0kbHRfY3ZfcHJvZ19nbnVfbGRjeHgKKyAgZWxzZQorICAgICRhc191bnNldCBsdF9jdl9wcm9nX2dudV9sZAorICBmaQorICBpZiB0ZXN0IC1uICIke2x0X2N2X3BhdGhfTERDWFgrc2V0fSI7IHRoZW4KKyAgICBsdF9jdl9wYXRoX0xEPSRsdF9jdl9wYXRoX0xEQ1hYCisgIGVsc2UKKyAgICAkYXNfdW5zZXQgbHRfY3ZfcGF0aF9MRAorICBmaQorICB0ZXN0IC16ICIke0xEQ1hYK3NldH0iIHx8IExEPSRMRENYWAorICBDQz0ke0NYWC0iYysrIn0KKyAgQ0ZMQUdTPSRDWFhGTEFHUworICBjb21waWxlcj0kQ0MKKyAgY29tcGlsZXJfQ1hYPSRDQworICBmb3IgY2NfdGVtcCBpbiAkY29tcGlsZXIiIjsgZG8KKyAgY2FzZSAkY2NfdGVtcCBpbgorICAgIGNvbXBpbGUgfCAqW1xcL11jb21waWxlIHwgY2NhY2hlIHwgKltcXC9dY2NhY2hlICkgOzsKKyAgICBkaXN0Y2MgfCAqW1xcL11kaXN0Y2MgfCBwdXJpZnkgfCAqW1xcL11wdXJpZnkgKSA7OworICAgIFwtKikgOzsKKyAgICAqKSBicmVhazs7CisgIGVzYWMKK2RvbmUKK2NjX2Jhc2VuYW1lPWAkRUNITyAiJGNjX3RlbXAiIHwgJFNFRCAicyUuKi8lJTsgcyVeJGhvc3RfYWxpYXMtJSUiYAorCisKKyAgaWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgorICAgICMgV2UgZG9uJ3Qgd2FudCAtZm5vLWV4Y2VwdGlvbiB3aGVuIGNvbXBpbGluZyBDKysgY29kZSwgc28gc2V0IHRoZQorICAgICMgbm9fYnVpbHRpbl9mbGFnIHNlcGFyYXRlbHkKKyAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorICAgICAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfQ1hYPScgLWZuby1idWlsdGluJworICAgIGVsc2UKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWD0KKyAgICBmaQorCisgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICAgICMgU2V0IHVwIGRlZmF1bHQgR05VIEMrKyBjb25maWd1cmF0aW9uCisKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWdudS1sZCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfZ251X2xkK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9nbnVfbGQ7IHRlc3QgIiR3aXRodmFsIiA9IG5vIHx8IHdpdGhfZ251X2xkPXllcworZWxzZQorICB3aXRoX2dudV9sZD1ubworZmkKKworYWNfcHJvZz1sZAoraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgIyBDaGVjayBpZiBnY2MgLXByaW50LXByb2ctbmFtZT1sZCBnaXZlcyBhIHBhdGguCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxkIHVzZWQgYnkgJENDIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsZCB1c2VkIGJ5ICRDQy4uLiAiID4mNjsgfQorICBjYXNlICRob3N0IGluCisgICotKi1taW5ndyopCisgICAgIyBnY2MgbGVhdmVzIGEgdHJhaWxpbmcgY2FycmlhZ2UgcmV0dXJuIHdoaWNoIHVwc2V0cyBtaW5ndworICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNSB8IHRyIC1kICdcMDE1J2AgOzsKKyAgKikKKyAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjVgIDs7CisgIGVzYWMKKyAgY2FzZSAkYWNfcHJvZyBpbgorICAgICMgQWNjZXB0IGFic29sdXRlIHBhdGhzLgorICAgIFtcXC9dKiB8ID86W1xcL10qKQorICAgICAgcmVfZGlyZWx0PScvW14vXVteL10qL1wuXC4vJworICAgICAgIyBDYW5vbmljYWxpemUgdGhlIHBhdGhuYW1lIG9mIGxkCisgICAgICBhY19wcm9nPWAkRUNITyAiJGFjX3Byb2cifCAkU0VEICdzJVxcXFwlLyVnJ2AKKyAgICAgIHdoaWxlICRFQ0hPICIkYWNfcHJvZyIgfCAkR1JFUCAiJHJlX2RpcmVsdCIgPiAvZGV2L251bGwgMj4mMTsgZG8KKwlhY19wcm9nPWAkRUNITyAkYWNfcHJvZ3wgJFNFRCAicyUkcmVfZGlyZWx0JS8lImAKKyAgICAgIGRvbmUKKyAgICAgIHRlc3QgLXogIiRMRCIgJiYgTEQ9IiRhY19wcm9nIgorICAgICAgOzsKKyAgIiIpCisgICAgIyBJZiBpdCBmYWlscywgdGhlbiBwcmV0ZW5kIHdlIGFyZW4ndCB1c2luZyBHQ0MuCisgICAgYWNfcHJvZz1sZAorICAgIDs7CisgICopCisgICAgIyBJZiBpdCBpcyByZWxhdGl2ZSwgdGhlbiBzZWFyY2ggZm9yIHRoZSBmaXJzdCBsZCBpbiBQQVRILgorICAgIHdpdGhfZ251X2xkPXVua25vd24KKyAgICA7OworICBlc2FjCitlbGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgR05VIGxkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBHTlUgbGQuLi4gIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igbm9uLUdOVSBsZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igbm9uLUdOVSBsZC4uLiAiID4mNjsgfQorZmkKK2lmICR7bHRfY3ZfcGF0aF9MRCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLXogIiRMRCI7IHRoZW4KKyAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgIGZvciBhY19kaXIgaW4gJFBBVEg7IGRvCisgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICBpZiB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nIiB8fCB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nJGFjX2V4ZWV4dCI7IHRoZW4KKyAgICAgIGx0X2N2X3BhdGhfTEQ9IiRhY19kaXIvJGFjX3Byb2ciCisgICAgICAjIENoZWNrIHRvIHNlZSBpZiB0aGUgcHJvZ3JhbSBpcyBHTlUgbGQuICBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24sCisgICAgICAjIGJ1dCBhcHBhcmVudGx5IHNvbWUgdmFyaWFudHMgb2YgR05VIGxkIG9ubHkgYWNjZXB0IC12LgorICAgICAgIyBCcmVhayBvbmx5IGlmIGl0IHdhcyB0aGUgR05VL25vbi1HTlUgbGQgdGhhdCB3ZSBwcmVmZXIuCisgICAgICBjYXNlIGAiJGx0X2N2X3BhdGhfTEQiIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KKyAgICAgICpHTlUqIHwgKid3aXRoIEJGRCcqKQorCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0gbm8gJiYgYnJlYWsKKwk7OworICAgICAgKikKKwl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IHllcyAmJiBicmVhaworCTs7CisgICAgICBlc2FjCisgICAgZmkKKyAgZG9uZQorICBJRlM9IiRsdF9zYXZlX2lmcyIKK2Vsc2UKKyAgbHRfY3ZfcGF0aF9MRD0iJExEIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KK2ZpCitmaQorCitMRD0iJGx0X2N2X3BhdGhfTEQiCitpZiB0ZXN0IC1uICIkTEQiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTEQiID4mNQorJGFzX2VjaG8gIiRMRCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKK3Rlc3QgLXogIiRMRCIgJiYgYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgbGQgZm91bmQgaW4gXCRQQVRIIiAiJExJTkVOTyIgNQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiB0aGUgbGlua2VyICgkTEQpIGlzIEdOVSBsZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiB0aGUgbGlua2VyICgkTEQpIGlzIEdOVSBsZC4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9wcm9nX2dudV9sZCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgICMgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uIGhlcmUsIGJ1dCBhcHBhcmVudGx5IHNvbWUgR05VIGxkcyBvbmx5IGFjY2VwdCAtdi4KK2Nhc2UgYCRMRCAtdiAyPiYxIDwvZGV2L251bGxgIGluCisqR05VKiB8ICond2l0aCBCRkQnKikKKyAgbHRfY3ZfcHJvZ19nbnVfbGQ9eWVzCisgIDs7CisqKQorICBsdF9jdl9wcm9nX2dudV9sZD1ubworICA7OworZXNhYworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19nbnVfbGQiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2dudV9sZCIgPiY2OyB9Cit3aXRoX2dudV9sZD0kbHRfY3ZfcHJvZ19nbnVfbGQKKworCisKKworCisKKworICAgICAgIyBDaGVjayBpZiBHTlUgQysrIHVzZXMgR05VIGxkIGFzIHRoZSB1bmRlcmx5aW5nIGxpbmtlciwgc2luY2UgdGhlCisgICAgICAjIGFyY2hpdmluZyBjb21tYW5kcyBiZWxvdyBhc3N1bWUgdGhhdCBHTlUgbGQgaXMgYmVpbmcgdXNlZC4KKyAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDICRwaWNfZmxhZyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAkcGljX2ZsYWcgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisKKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworCisgICAgICAgICMgSWYgYXJjaGl2ZV9jbWRzIHJ1bnMgTEQsIG5vdCBDQywgd2xhcmMgc2hvdWxkIGJlIGVtcHR5CisgICAgICAgICMgWFhYIEkgdGhpbmsgd2xhcmMgY2FuIGJlIGVsaW1pbmF0ZWQgaW4gbHRjZi1jeHgsIGJ1dCBJIG5lZWQgdG8KKyAgICAgICAgIyAgICAgaW52ZXN0aWdhdGUgaXQgYSBsaXR0bGUgYml0IG1vcmUuIChNTSkKKyAgICAgICAgd2xhcmM9JyR7d2x9JworCisgICAgICAgICMgYW5jaWVudCBHTlUgbGQgZGlkbid0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlIGV0LiBhbC4KKyAgICAgICAgaWYgZXZhbCAiYCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkYCAtLWhlbHAgMj4mMSIgfAorCSAgJEdSRVAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPSIkd2xhcmMiJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnIiR3bGFyYyInLS1uby13aG9sZS1hcmNoaXZlJworICAgICAgICBlbHNlCisgICAgICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPQorICAgICAgICBmaQorICAgICAgZWxzZQorICAgICAgICB3aXRoX2dudV9sZD1ubworICAgICAgICB3bGFyYz0KKworICAgICAgICAjIEEgZ2VuZXJpYyBhbmQgdmVyeSBzaW1wbGUgZGVmYXVsdCBzaGFyZWQgbGlicmFyeSBjcmVhdGlvbgorICAgICAgICAjIGNvbW1hbmQgZm9yIEdOVSBDKysgZm9yIHRoZSBjYXNlIHdoZXJlIGl0IHVzZXMgdGhlIG5hdGl2ZQorICAgICAgICAjIGxpbmtlciwgaW5zdGVhZCBvZiBHTlUgbGQuICBJZiBwb3NzaWJsZSwgdGhpcyBzZXR0aW5nIHNob3VsZAorICAgICAgICAjIG92ZXJyaWRkZW4gdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIG5hdGl2ZSBsaW5rZXIgZmVhdHVyZXMgb24KKyAgICAgICAgIyB0aGUgcGxhdGZvcm0gaXQgaXMgYmVpbmcgdXNlZCBvbi4KKyAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkbGliJworICAgICAgZmkKKworICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKyAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIC12ICJeQ29uZmlndXJlZCB3aXRoOiIgfCAkR1JFUCAiXC1MIicKKworICAgIGVsc2UKKyAgICAgIEdYWD1ubworICAgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICAgIHdsYXJjPQorICAgIGZpCisKKyAgICAjIFBPUlRNRTogZmlsbCBpbiBhIGRlc2NyaXB0aW9uIG9mIHlvdXIgc3lzdGVtJ3MgQysrIGxpbmsgY2hhcmFjdGVyaXN0aWNzCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLi4uICIgPiY2OyB9CisgICAgbGRfc2hsaWJzX0NYWD15ZXMKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXgzKikKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgIGxkX3NobGlic19DWFg9bm8KKyAgICAgICAgOzsKKyAgICAgIGFpeFs0LTldKikKKyAgICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICAgICAgICAjIE9uIElBNjQsIHRoZSBsaW5rZXIgZG9lcyBydW4gdGltZSBsaW5raW5nIGJ5IGRlZmF1bHQsIHNvIHdlIGRvbid0CisgICAgICAgICAgIyBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwuCisgICAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworICAgICAgICAgIGV4cF9zeW1fZmxhZz0nLUJleHBvcnQnCisgICAgICAgICAgbm9fZW50cnlfZmxhZz0iIgorICAgICAgICBlbHNlCisgICAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworCisgICAgICAgICAgIyBUZXN0IGlmIHdlIGFyZSB0cnlpbmcgdG8gdXNlIHJ1biB0aW1lIGxpbmtpbmcgb3Igbm9ybWFsCisgICAgICAgICAgIyBBSVggc3R5bGUgbGlua2luZy4gSWYgLWJydGwgaXMgc29tZXdoZXJlIGluIExERkxBR1MsIHdlCisgICAgICAgICAgIyBuZWVkIHRvIGRvIHJ1bnRpbWUgbGlua2luZy4KKyAgICAgICAgICBjYXNlICRob3N0X29zIGluIGFpeDQuWzIzXXxhaXg0LlsyM10uKnxhaXhbNS05XSopCisJICAgIGZvciBsZF9mbGFnIGluICRMREZMQUdTOyBkbworCSAgICAgIGNhc2UgJGxkX2ZsYWcgaW4KKwkgICAgICAqLWJydGwqKQorCSAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKKwkgICAgICAgIGJyZWFrCisJICAgICAgICA7OworCSAgICAgIGVzYWMKKwkgICAgZG9uZQorCSAgICA7OworICAgICAgICAgIGVzYWMKKworICAgICAgICAgIGV4cF9zeW1fZmxhZz0nLWJleHBvcnQnCisgICAgICAgICAgbm9fZW50cnlfZmxhZz0nLWJub2VudHJ5JworICAgICAgICBmaQorCisgICAgICAgICMgV2hlbiBsYXJnZSBleGVjdXRhYmxlcyBvciBzaGFyZWQgb2JqZWN0cyBhcmUgYnVpbHQsIEFJWCBsZCBjYW4KKyAgICAgICAgIyBoYXZlIHByb2JsZW1zIGNyZWF0aW5nIHRoZSB0YWJsZSBvZiBjb250ZW50cy4gIElmIGxpbmtpbmcgYSBsaWJyYXJ5CisgICAgICAgICMgb3IgcHJvZ3JhbSByZXN1bHRzIGluICJlcnJvciBUT0Mgb3ZlcmZsb3ciIGFkZCAtbW1pbmltYWwtdG9jIHRvCisgICAgICAgICMgQ1hYRkxBR1MvQ0ZMQUdTIGZvciBnKysvZ2NjLiAgSW4gdGhlIGNhc2VzIHdoZXJlIHRoYXQgaXMgbm90CisgICAgICAgICMgZW5vdWdoIHRvIGZpeCB0aGUgcHJvYmxlbSwgYWRkIC1XbCwtYmJpZ3RvYyB0byBMREZMQUdTLgorCisgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JycKKyAgICAgICAgaGFyZGNvZGVfZGlyZWN0X0NYWD15ZXMKKyAgICAgICAgaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlX0NYWD15ZXMKKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9JzonCisgICAgICAgIGxpbmtfYWxsX2RlcGxpYnNfQ1hYPXllcworICAgICAgICBmaWxlX2xpc3Rfc3BlY19DWFg9JyR7d2x9LWYsJworCisgICAgICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlswMTJdfGFpeDQuWzAxMl0uKikKKyAgICAgICAgICAjIFdlIG9ubHkgd2FudCB0byBkbyB0aGlzIG9uIEFJWCA0LjIgYW5kIGxvd2VyLCB0aGUgY2hlY2sKKyAgICAgICAgICAjIGJlbG93IGZvciBicm9rZW4gY29sbGVjdDIgZG9lc24ndCB3b3JrIHVuZGVyIDQuMysKKwkgIGNvbGxlY3QybmFtZT1gJHtDQ30gLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKKwkgIGlmIHRlc3QgLWYgIiRjb2xsZWN0Mm5hbWUiICYmCisJICAgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8ICRHUkVQIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAorCSAgdGhlbgorCSAgICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKKwkgICAgOgorCSAgZWxzZQorCSAgICAjIFdlIGhhdmUgb2xkIGNvbGxlY3QyCisJICAgIGhhcmRjb2RlX2RpcmVjdF9DWFg9dW5zdXBwb3J0ZWQKKwkgICAgIyBJdCBmYWlscyB0byBmaW5kIHVuaW5zdGFsbGVkIGxpYnJhcmllcyB3aGVuIHRoZSB1bmluc3RhbGxlZAorCSAgICAjIHBhdGggaXMgbm90IGxpc3RlZCBpbiB0aGUgbGlicGF0aC4gIFNldHRpbmcgaGFyZGNvZGVfbWludXNfTAorCSAgICAjIHRvIHVuc3VwcG9ydGVkIGZvcmNlcyByZWxpbmtpbmcKKwkgICAgaGFyZGNvZGVfbWludXNfTF9DWFg9eWVzCisJICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSctTCRsaWJkaXInCisJICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPQorCSAgZmkKKyAgICAgICAgICBlc2FjCisgICAgICAgICAgc2hhcmVkX2ZsYWc9Jy1zaGFyZWQnCisJICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKwkgICAgc2hhcmVkX2ZsYWc9IiRzaGFyZWRfZmxhZyAiJyR7d2x9LUcnCisJICBmaQorICAgICAgICBlbHNlCisgICAgICAgICAgIyBub3QgdXNpbmcgZ2NjCisgICAgICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkgICMgVmlzdWFsQWdlIEMrKywgVmVyc2lvbiA1LjUgZm9yIEFJWCA1TCBmb3IgSUEtNjQsIEJldGEgMyBSZWxlYXNlCisJICAjIGNob2tlcyBvbiAtV2wsLUcuIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBjb3JyZWN0OgorCSAgc2hhcmVkX2ZsYWc9Jy1HJworICAgICAgICAgIGVsc2UKKwkgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisJICAgICAgc2hhcmVkX2ZsYWc9JyR7d2x9LUcnCisJICAgIGVsc2UKKwkgICAgICBzaGFyZWRfZmxhZz0nJHt3bH0tYk06U1JFJworCSAgICBmaQorICAgICAgICAgIGZpCisgICAgICAgIGZpCisKKyAgICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHt3bH0tYmV4cGFsbCcKKyAgICAgICAgIyBJdCBzZWVtcyB0aGF0IC1iZXhwYWxsIGRvZXMgbm90IGV4cG9ydCBzeW1ib2xzIGJlZ2lubmluZyB3aXRoCisgICAgICAgICMgdW5kZXJzY29yZSAoXyksIHNvIGl0IGlzIGJldHRlciB0byBnZW5lcmF0ZSBhIGxpc3Qgb2Ygc3ltYm9scyB0bworCSMgZXhwb3J0LgorICAgICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHNfQ1hYPXllcworICAgICAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKyAgICAgICAgICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW50aW1lIGxvYWRpbmcgZmxhZ3MgKC1icnRsKSwKKyAgICAgICAgICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCisgICAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPSctYmVyb2snCisgICAgICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuIGVtcHR5CisgICAgICAgICAgIyBleGVjdXRhYmxlLgorICAgICAgICAgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCitlbHNlCisgIGlmICR7bHRfY3ZfYWl4X2xpYnBhdGhfX0NYWCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY3h4X3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgbHRfYWl4X2xpYnBhdGhfc2VkPScKKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKwkgIC9eMC8geworCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCisJICAgICAgcAorCSAgfQorICAgICAgfScKKyAgbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWCI7IHRoZW4KKyAgICBsdF9jdl9haXhfbGlicGF0aF9fQ1hYPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorICBmaQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF9fQ1hYIjsgdGhlbgorICAgIGx0X2N2X2FpeF9saWJwYXRoX19DWFg9Ii91c3IvbGliOi9saWIiCisgIGZpCisKK2ZpCisKKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoX19DWFgKK2ZpCisKKyAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKworICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiBmdW5jX2VjaG9fYWxsICIke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IjsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgorICAgICAgICBlbHNlCisgICAgICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LVIgJGxpYmRpcjovdXNyL2xpYjovbGliJworCSAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9Ii16IG5vZGVmcyIKKwkgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzICR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30gJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMiCisgICAgICAgICAgZWxzZQorCSAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKwkgICAgIyBlbXB0eSBleGVjdXRhYmxlLgorCSAgICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iID0gc2V0OyB0aGVuCisgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorZWxzZQorICBpZiAke2x0X2N2X2FpeF9saWJwYXRoX19DWFgrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgIGx0X2FpeF9saWJwYXRoX3NlZD0nCisgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisJICAvXjAvIHsKKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworCSAgICAgIHAKKwkgIH0KKyAgICAgIH0nCisgIGx0X2N2X2FpeF9saWJwYXRoX19DWFg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisgICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoX19DWFgiOyB0aGVuCisgICAgbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKyAgZmkKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWCI7IHRoZW4KKyAgICBsdF9jdl9haXhfbGlicGF0aF9fQ1hYPSIvdXNyL2xpYjovbGliIgorICBmaQorCitmaQorCisgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF9fQ1hYCitmaQorCisJICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorCSAgICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorCSAgICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCisJICAgIG5vX3VuZGVmaW5lZF9mbGFnX0NYWD0nICR7d2x9LWJlcm5vdG9rJworCSAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9JyAke3dsfS1iZXJvaycKKwkgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorCSAgICAgICMgV2Ugb25seSB1c2UgdGhpcyBjb2RlIGZvciBHTlUgbGRzIHRoYXQgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUuCisJICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPScke3dsfS0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgICAgZWxzZQorCSAgICAgICMgRXhwb3J0ZWQgc3ltYm9scyBjYW4gYmUgcHVsbGVkIGludG8gc2hhcmVkIG9iamVjdHMgZnJvbSBhcmNoaXZlcworCSAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJGNvbnZlbmllbmNlJworCSAgICBmaQorCSAgICBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9eWVzCisJICAgICMgVGhpcyBpcyBzaW1pbGFyIHRvIGhvdyBBSVggdHJhZGl0aW9uYWxseSBidWlsZHMgaXRzIHNoYXJlZAorCSAgICAjIGxpYnJhcmllcy4KKwkgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAke3dsfS1ibm9lbnRyeSAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tYkU6JGV4cG9ydF9zeW1ib2xzJHthbGxvd191bmRlZmluZWRfZmxhZ31+JEFSICRBUl9GTEFHUyAkb3V0cHV0X29iamRpci8kbGlibmFtZSRyZWxlYXNlLmEgJG91dHB1dF9vYmpkaXIvJHNvbmFtZScKKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgICA7OworCisgICAgICBiZW9zKikKKwlpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9dW5zdXBwb3J0ZWQKKwkgICMgSm9zZXBoIEJlY2tlbmJhY2ggPGpyYjNAYmVzdC5jb20+IHNheXMgc29tZSByZWxlYXNlcyBvZiBnY2MKKwkgICMgc3VwcG9ydCAtLXVuZGVmaW5lZC4gIFRoaXMgZGVzZXJ2ZXMgc29tZSBpbnZlc3RpZ2F0aW9uLiAgRklYTUUKKwkgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtbm9zdGFydCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwllbHNlCisJICBsZF9zaGxpYnNfQ1hYPW5vCisJZmkKKwk7OworCisgICAgICBjaG9ydXMqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgICopCisJICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgIGxkX3NobGlic19DWFg9bm8KKwkgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorCWNhc2UgJEdYWCwkY2NfYmFzZW5hbWUgaW4KKwksY2wqIHwgbm8sY2wqKQorCSAgIyBOYXRpdmUgTVNWQworCSAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworCSAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKwkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScgJworCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPXVuc3VwcG9ydGVkCisJICBhbHdheXNfZXhwb3J0X3N5bWJvbHNfQ1hYPXllcworCSAgZmlsZV9saXN0X3NwZWNfQ1hYPSdAJworCSAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKwkgIGxpYmV4dD1saWIKKwkgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorCSAgc2hyZXh0X2NtZHM9Ii5kbGwiCisJICAjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisJICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgLVdsLC1kbGx+bGlua25hbWVzPScKKwkgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorCSAgICAgICRTRUQgLW4gLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyAtZSAnMVxcXCFwJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworCSAgICBlbHNlCisJICAgICAgJFNFRCAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisJICAgIGZpfgorCSAgICAkQ0MgLW8gJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzICJAJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZXhwIiAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+CisJICAgIGxpbmtuYW1lcz0nCisJICAjIFRoZSBsaW5rZXIgd2lsbCBub3QgYXV0b21hdGljYWxseSBidWlsZCBhIHN0YXRpYyBsaWIgaWYgd2UgYnVpbGQgYSBETEwuCisJICAjIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgQ1hYKT0ndHJ1ZScKKwkgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfQ1hYPXllcworCSAgIyBEb24ndCB1c2UgcmFubGliCisJICBvbGRfcG9zdGluc3RhbGxfY21kc19DWFg9J2NobW9kIDY0NCAkb2xkbGliJworCSAgcG9zdGxpbmtfY21kc19DWFg9J2x0X291dHB1dGZpbGU9IkBPVVRQVVRAIn4KKwkgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KKwkgICAgY2FzZSAkbHRfb3V0cHV0ZmlsZSBpbgorCSAgICAgICouZXhlfCouRVhFKSA7OworCSAgICAgICopCisJCWx0X291dHB1dGZpbGU9IiRsdF9vdXRwdXRmaWxlLmV4ZSIKKwkJbHRfdG9vbF9vdXRwdXRmaWxlPSIkbHRfdG9vbF9vdXRwdXRmaWxlLmV4ZSIKKwkJOzsKKwkgICAgZXNhY34KKwkgICAgZnVuY190b190b29sX2ZpbGUgIiRsdF9vdXRwdXRmaWxlIn4KKwkgICAgaWYgdGVzdCAiJE1BTklGRVNUX1RPT0wiICE9ICI6IiAmJiB0ZXN0IC1mICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7IHRoZW4KKwkgICAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOworCSAgICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOworCSAgICBmaScKKwkgIDs7CisJKikKKwkgICMgZysrCisJICAjIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgQ1hYKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKKwkgICMgYXMgdGhlcmUgaXMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nLUwkbGliZGlyJworCSAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLWV4cG9ydC1hbGwtc3ltYm9scycKKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD11bnN1cHBvcnRlZAorCSAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0NYWD1ubworCSAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19DWFg9eWVzCisKKwkgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworCSAgICAjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUgKDFzdCBsaW5lCisJICAgICMgaXMgRVhQT1JUUyksIHVzZSBpdCBhcyBpczsgb3RoZXJ3aXNlLCBwcmVwZW5kLi4uCisJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorCSAgICAgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKwkgICAgZWxzZQorCSAgICAgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworCSAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisJICAgIGZpfgorCSAgICAkQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisJICBlbHNlCisJICAgIGxkX3NobGlic19DWFg9bm8KKwkgIGZpCisJICA7OworCWVzYWMKKwk7OworICAgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKworCisgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubworICBoYXJkY29kZV9kaXJlY3RfQ1hYPW5vCisgIGhhcmRjb2RlX2F1dG9tYXRpY19DWFg9eWVzCisgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPXVuc3VwcG9ydGVkCisgIGlmIHRlc3QgIiRsdF9jdl9sZF9mb3JjZV9sb2FkIiA9ICJ5ZXMiOyB0aGVuCisgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPSdgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UgJHt3bH0tZm9yY2VfbG9hZCwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCcKKworICBlbHNlCisgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPScnCisgIGZpCisgIGxpbmtfYWxsX2RlcGxpYnNfQ1hYPXllcworICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9IiRfbHRfZGFyX2FsbG93X3VuZGVmaW5lZCIKKyAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgaWZvcnQqKSBfbHRfZGFyX2Nhbl9zaGFyZWQ9eWVzIDs7CisgICAgICopIF9sdF9kYXJfY2FuX3NoYXJlZD0kR0NDIDs7CisgIGVzYWMKKyAgaWYgdGVzdCAiJF9sdF9kYXJfY2FuX3NoYXJlZCIgPSAieWVzIjsgdGhlbgorICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPWZ1bmNfZWNob19hbGwKKyAgICBhcmNoaXZlX2NtZHNfQ1hYPSJcJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAkX2x0X2Rhcl9zaW5nbGVfbW9kJHtfbHRfZHN5bXV0aWx9IgorICAgIG1vZHVsZV9jbWRzX0NYWD0iXCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJHtfbHRfZHN5bXV0aWx9IgorICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSJzZWQgJ3MsXixfLCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICR7X2x0X2Rhcl9zaW5nbGVfbW9kfSR7X2x0X2Rhcl9leHBvcnRfc3ltc30ke19sdF9kc3ltdXRpbH0iCisgICAgbW9kdWxlX2V4cHN5bV9jbWRzX0NYWD0ic2VkIC1lICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgLWJ1bmRsZSBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3Mke19sdF9kYXJfZXhwb3J0X3N5bXN9JHtfbHRfZHN5bXV0aWx9IgorICAgICAgIGlmIHRlc3QgIiRsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kIiAhPSAieWVzIjsgdGhlbgorICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0iXCRDQyAtciAta2VlcF9wcml2YXRlX2V4dGVybnMgLW5vc3RkbGliIC1vIFwke2xpYn0tbWFzdGVyLm8gXCRsaWJvYmpzflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJHtsaWJ9LW1hc3Rlci5vIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyR7X2x0X2RzeW11dGlsfSIKKyAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSJzZWQgJ3MsXixfLCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltflwkQ0MgLXIgLWtlZXBfcHJpdmF0ZV9leHRlcm5zIC1ub3N0ZGxpYiAtbyBcJHtsaWJ9LW1hc3Rlci5vIFwkbGlib2Jqc35cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCR7bGlifS1tYXN0ZXIubyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcke19sdF9kYXJfZXhwb3J0X3N5bXN9JHtfbHRfZHN5bXV0aWx9IgorICAgIGZpCisKKyAgZWxzZQorICBsZF9zaGxpYnNfQ1hYPW5vCisgIGZpCisKKwk7OworCisgICAgICBkZ3V4KikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBlYysrKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIGxkX3NobGlic19DWFg9bm8KKwkgICAgOzsKKyAgICAgICAgICBnaGN4KikKKwkgICAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIGxkX3NobGlic19DWFg9bm8KKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgbGRfc2hsaWJzX0NYWD1ubworCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIGZyZWVic2QyLiopCisgICAgICAgICMgQysrIHNoYXJlZCBsaWJyYXJpZXMgcmVwb3J0ZWQgdG8gYmUgZmFpcmx5IGJyb2tlbiBiZWZvcmUKKwkjIHN3aXRjaCB0byBFTEYKKyAgICAgICAgbGRfc2hsaWJzX0NYWD1ubworICAgICAgICA7OworCisgICAgICBmcmVlYnNkLWVsZiopCisgICAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubworICAgICAgICA7OworCisgICAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICAgICAgICMgRnJlZUJTRCAzIGFuZCBsYXRlciB1c2UgR05VIEMrKyBhbmQgR05VIGxkIHdpdGggc3RhbmRhcmQgRUxGCisgICAgICAgICMgY29udmVudGlvbnMKKyAgICAgICAgbGRfc2hsaWJzX0NYWD15ZXMKKyAgICAgICAgOzsKKworICAgICAgZ251KikKKyAgICAgICAgOzsKKworICAgICAgaGFpa3UqKQorICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgICAgbGlua19hbGxfZGVwbGlic19DWFg9eWVzCisgICAgICAgIDs7CisKKyAgICAgIGhwdXg5KikKKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworICAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD06CisgICAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR7d2x9LUUnCisgICAgICAgIGhhcmRjb2RlX2RpcmVjdF9DWFg9eWVzCisgICAgICAgIGhhcmRjb2RlX21pbnVzX0xfQ1hYPXllcyAjIE5vdCBpbiB0aGUgc2VhcmNoIFBBVEgsCisJCQkJICAgICAgICAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0CisJCQkJICAgICAgICAgICAgICMgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyopCisgICAgICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgICAgIGxkX3NobGlic19DWFg9bm8KKyAgICAgICAgICAgIDs7CisgICAgICAgICAgYUNDKikKKyAgICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtYiAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworICAgICAgICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisgICAgICAgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKyAgICAgICAgICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCisgICAgICAgICAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisgICAgICAgICAgICAjIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gKCRDQyAtYiAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSkgfCAkRUdSRVAgIlwtTCJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiJGxpc3QiJworICAgICAgICAgICAgOzsKKyAgICAgICAgICAqKQorICAgICAgICAgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgICAgICAgbGRfc2hsaWJzX0NYWD1ubworICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgaHB1eDEwKnxocHV4MTEqKQorICAgICAgICBpZiB0ZXN0ICR3aXRoX2dudV9sZCA9IG5vOyB0aGVuCisJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisJICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD06CisKKyAgICAgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgICAgICAgaHBwYSo2NCp8aWE2NCopCisgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAqKQorCSAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR7d2x9LUUnCisgICAgICAgICAgICAgIDs7CisgICAgICAgICAgZXNhYworICAgICAgICBmaQorICAgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgICAgIGhwcGEqNjQqfGlhNjQqKQorICAgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0X0NYWD1ubworICAgICAgICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9bm8KKyAgICAgICAgICAgIDs7CisgICAgICAgICAgKikKKyAgICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdF9DWFg9eWVzCisgICAgICAgICAgICBoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGVfQ1hYPXllcworICAgICAgICAgICAgaGFyZGNvZGVfbWludXNfTF9DWFg9eWVzICMgTm90IGluIHRoZSBzZWFyY2ggUEFUSCwKKwkJCQkJICAgICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQKKwkJCQkJICAgICAgICAgIyBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKworICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIGxkX3NobGlic19DWFg9bm8KKwkgICAgOzsKKyAgICAgICAgICBhQ0MqKQorCSAgICBjYXNlICRob3N0X2NwdSBpbgorCSAgICAgIGhwcGEqNjQqKQorCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgOzsKKwkgICAgICBpYTY0KikKKwkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICAgIDs7CisJICAgICAgKikKKwkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgOzsKKwkgICAgZXNhYworCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgIworCSAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisJICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCisJICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKwkgICAgIyBkZXBlbmRlbmNpZXMuCisJICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gKCRDQyAtYiAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSkgfCAkR1JFUCAiXC1MImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICIkbGlzdCInCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKwkgICAgICBpZiB0ZXN0ICR3aXRoX2dudV9sZCA9IG5vOyB0aGVuCisJICAgICAgICBjYXNlICRob3N0X2NwdSBpbgorCSAgICAgICAgICBocHBhKjY0KikKKwkgICAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICAgICAgOzsKKwkgICAgICAgICAgaWE2NCopCisJICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICAgICAgICA7OworCSAgICAgICAgICAqKQorCSAgICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICAgICAgICA7OworCSAgICAgICAgZXNhYworCSAgICAgIGZpCisJICAgIGVsc2UKKwkgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgICBsZF9zaGxpYnNfQ1hYPW5vCisJICAgIGZpCisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgaW50ZXJpeFszLTldKikKKwloYXJkY29kZV9kaXJlY3RfQ1hYPW5vCisJaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9bm8KKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwlleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPScke3dsfS1FJworCSMgSGFjazogT24gSW50ZXJpeCAzLngsIHdlIGNhbm5vdCBjb21waWxlIFBJQyBiZWNhdXNlIG9mIGEgYnJva2VuIGdjYy4KKwkjIEluc3RlYWQsIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGxvYWRlZCBhdCBhbiBpbWFnZSBiYXNlICgweDEwMDAwMDAwIGJ5CisJIyBkZWZhdWx0KSBhbmQgcmVsb2NhdGVkIGlmIHRoZXkgY29uZmxpY3QsIHdoaWNoIGlzIGEgc2xvdyB2ZXJ5IG1lbW9yeQorCSMgY29uc3VtaW5nIGFuZCBmcmFnbWVudGluZyBwcm9jZXNzLiAgVG8gYXZvaWQgdGhpcywgd2UgcGljayBhIHJhbmRvbSwKKwkjIDI1NiBLaUItYWxpZ25lZCBpbWFnZSBiYXNlIGJldHdlZW4gMHg1MDAwMDAwMCBhbmQgMHg2RkZDMDAwMCBhdCBsaW5rCisJIyB0aW1lLiAgTW92aW5nIHVwIGZyb20gMHgxMDAwMDAwMCBhbHNvIGFsbG93cyBtb3JlIHNicmsoMikgc3BhY2UuCisJYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKwlhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nc2VkICJzLF4sXywiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKwk7OworICAgICAgaXJpeDUqIHwgaXJpeDYqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKikKKwkgICAgIyBTR0kgQysrCisJICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1hbGwgLW11bHRpZ290ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCisJICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZworCSAgICAjICJDQyAtYXIiLCB3aGVyZSAiQ0MiIGlzIHRoZSBJUklYIEMrKyBjb21waWxlci4gIFRoaXMgaXMKKwkgICAgIyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIGluc3RhbnRpYXRlZCB0ZW1wbGF0ZXMgYXJlIGluY2x1ZGVkCisJICAgICMgaW4gdGhlIGFyY2hpdmUuCisJICAgIG9sZF9hcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLWFyIC1XUiwtdSAtbyAkb2xkbGliICRvbGRvYmpzJworCSAgICA7OworICAgICAgICAgICopCisJICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisJICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCSAgICAgIGVsc2UKKwkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgIC1vICRsaWInCisJICAgICAgZmkKKwkgICAgZmkKKwkgICAgbGlua19hbGxfZGVwbGlic19DWFg9eWVzCisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9OgorICAgICAgICBpbmhlcml0X3JwYXRoX0NYWD15ZXMKKyAgICAgICAgOzsKKworICAgICAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIEtDQyopCisJICAgICMgS3VjayBhbmQgQXNzb2NpYXRlcywgSW5jLiAoS0FJKSBDKysgQ29tcGlsZXIKKworCSAgICAjIEtDQyB3aWxsIG9ubHkgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkgaWYgdGhlIG91dHB1dCBmaWxlCisJICAgICMgZW5kcyB3aXRoICIuc28iIChvciAiLnNsIiBmb3IgSFAtVVgpLCBzbyByZW5hbWUgdGhlIGxpYnJhcnkKKwkgICAgIyB0byBpdHMgcHJvcGVyIG5hbWUgKHdpdGggdmVyc2lvbikgYWZ0ZXIgbGlua2luZy4KKwkgICAgYXJjaGl2ZV9jbWRzX0NYWD0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbXigpMC05QS1aYS16e31dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAkbGliIHwgJFNFRCAtZSAicy9cJHt0ZW1wZXh0fVwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliOyBtdiBcJHRlbXBsaWIgJGxpYicKKwkgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW14oKTAtOUEtWmEtent9XVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gJGxpYiB8ICRTRUQgLWUgInMvXCR7dGVtcGV4dH1cLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYiAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9sczsgbXYgXCR0ZW1wbGliICRsaWInCisJICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAjCisJICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKwkgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKwkgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorCSAgICAjIGRlcGVuZGVuY2llcy4KKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IC1vIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQgMj4mMSB8ICRHUkVQICJsZCJgOyBybSAtZiBsaWJjb25mdGVzdCRzaGFyZWRfZXh0OyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiJGxpc3QiJworCisJICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ycGF0aCwkbGliZGlyJworCSAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCisKKwkgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJICAgICMgIkNDIC1Cc3RhdGljIiwgd2hlcmUgIkNDIiBpcyB0aGUgS0FJIEMrKyBjb21waWxlci4KKwkgICAgb2xkX2FyY2hpdmVfY21kc19DWFg9JyRDQyAtQnN0YXRpYyAtbyAkb2xkbGliICRvbGRvYmpzJworCSAgICA7OworCSAgaWNwYyogfCBlY3BjKiApCisJICAgICMgSW50ZWwgQysrCisJICAgIHdpdGhfZ251X2xkPXllcworCSAgICAjIHZlcnNpb24gOC4wIGFuZCBhYm92ZSBvZiBpY3BjIGNob2tlIG9uIG11bHRpcGx5IGRlZmluZWQgc3ltYm9scworCSAgICAjIGlmIHdlIGFkZCAkcHJlZGVwX29iamVjdHMgYW5kICRwb3N0ZGVwX29iamVjdHMsIGhvd2V2ZXIgNy4xIGFuZAorCSAgICAjIGVhcmxpZXIgZG8gbm90IGFkZCB0aGUgb2JqZWN0cyB0aGVtc2VsdmVzLgorCSAgICBjYXNlIGAkQ0MgLVYgMj4mMWAgaW4KKwkgICAgICAqIlZlcnNpb24gNy4iKikKKwkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCQlhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJCTs7CisJICAgICAgKikgICMgVmVyc2lvbiA4LjAgb3IgbmV3ZXIKKwkgICAgICAgIHRtcF9pZHluPQorCSAgICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKwkJICBpYTY0KikgdG1wX2lkeW49JyAtaV9keW5hbWljJzs7CisJCWVzYWMKKwkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkJyIkdG1wX2lkeW4iJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkJYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtc2hhcmVkJyIkdG1wX2lkeW4iJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkJOzsKKwkgICAgZXNhYworCSAgICBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9bm8KKwkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKwkgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPScke3dsfS0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgICAgOzsKKyAgICAgICAgICBwZ0NDKiB8IHBnY3BwKikKKyAgICAgICAgICAgICMgUG9ydGxhbmQgR3JvdXAgQysrIGNvbXBpbGVyCisJICAgIGNhc2UgYCRDQyAtVmAgaW4KKwkgICAgKnBnQ0NcIFsxLTVdLiogfCAqcGdjcHBcIFsxLTVdLiopCisJICAgICAgcHJlbGlua19jbWRzX0NYWD0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKwkJcm0gLXJmICR0cGxkaXJ+CisJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJG9ianMgJGxpYm9ianMgJGNvbXBpbGVfZGVwbGlic34KKwkJY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgIicKKwkgICAgICBvbGRfYXJjaGl2ZV9jbWRzX0NYWD0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKwkJcm0gLXJmICR0cGxkaXJ+CisJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJG9sZG9ianMkb2xkX2RlcGxpYnN+CisJCSRBUiAkQVJfRkxBR1MgJG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgfgorCQkkUkFOTElCICRvbGRsaWInCisJICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKwkJcm0gLXJmICR0cGxkaXJ+CisJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRjb252ZW5pZW5jZSAkcG9zdGRlcF9vYmplY3RzfgorCQkkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgLW8gJGxpYicKKwkgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKwkJcm0gLXJmICR0cGxkaXJ+CisJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRjb252ZW5pZW5jZSAkcG9zdGRlcF9vYmplY3RzfgorCQkkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCSAgICAgIDs7CisJICAgICopICMgVmVyc2lvbiA2IGFuZCBhYm92ZSB1c2Ugd2VhayBzeW1ib2xzCisJICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIC1vICRsaWInCisJICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJICAgICAgOzsKKwkgICAgZXNhYworCisJICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS0tcnBhdGggJHt3bH0kbGliZGlyJworCSAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCisJICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisgICAgICAgICAgICA7OworCSAgY3h4KikKKwkgICAgIyBDb21wYXEgQysrCisJICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICAtbyAkbGliICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzJworCisJICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICisJICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSctcnBhdGggJGxpYmRpcicKKwkgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9OgorCisJICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAjCisJICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKwkgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKwkgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorCSAgICAjIGRlcGVuZGVuY2llcy4KKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQICJsZCJgOyB0ZW1wbGlzdD1gZnVuY19lY2hvX2FsbCAiJHRlbXBsaXN0IiB8ICRTRUQgInMvXCheLipsZC4qXClcKCAuKmxkIC4qJFwpL1wxLyJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiWCRsaXN0IiB8ICRYc2VkJworCSAgICA7OworCSAgeGwqIHwgbXBpeGwqIHwgYmd4bCopCisJICAgICMgSUJNIFhMIDguMCBvbiBQUEMsIHdpdGggR05VIGxkCisJICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisJICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKwkgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1xbWtzaHJvYmogJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJICAgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKwkgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkJY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCQllY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkJJENDIC1xbWtzaHJvYmogJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXZlcnNpb24tc2NyaXB0ICR7d2x9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisJICAgIGZpCisJICAgIDs7CisJICAqKQorCSAgICBjYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKwkgICAgKlN1blwgQyopCisJICAgICAgIyBTdW4gQysrIDUuOQorCSAgICAgIG5vX3VuZGVmaW5lZF9mbGFnX0NYWD0nIC16ZGVmcycKKwkgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzJworCSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSctUiRsaWJkaXInCisJICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPScke3dsfS0td2hvbGUtYXJjaGl2ZWBuZXdfY29udmVuaWVuY2U9OyBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0IC16IFwiJGNvbnZcIiB8fCBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgICAgIGNvbXBpbGVyX25lZWRzX29iamVjdF9DWFg9eWVzCisKKwkgICAgICAjIE5vdCBzdXJlIHdoZXRoZXIgc29tZXRoaW5nIGJhc2VkIG9uCisJICAgICAgIyAkQ0MgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IC1vIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQgMj4mMQorCSAgICAgICMgd291bGQgYmUgYmV0dGVyLgorCSAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdmdW5jX2VjaG9fYWxsJworCisJICAgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJICAgICAgIyAiQ0MgLXhhciIsIHdoZXJlICJDQyIgaXMgdGhlIFN1biBDKysgY29tcGlsZXIuICBUaGlzIGlzCisJICAgICAgIyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIGluc3RhbnRpYXRlZCB0ZW1wbGF0ZXMgYXJlIGluY2x1ZGVkCisJICAgICAgIyBpbiB0aGUgYXJjaGl2ZS4KKwkgICAgICBvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC14YXIgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIDs7CisJZXNhYworCTs7CisKKyAgICAgIGx5bnhvcyopCisgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCWxkX3NobGlic19DWFg9bm8KKwk7OworCisgICAgICBtODhrKikKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgIGxkX3NobGlic19DWFg9bm8KKwk7OworCisgICAgICBtdnMqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIGN4eCopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBsZF9zaGxpYnNfQ1hYPW5vCisJICAgIDs7CisJICAqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgbGRfc2hsaWJzX0NYWD1ubworCSAgICA7OworCWVzYWMKKwk7OworCisgICAgICBuZXRic2QqKQorICAgICAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorCSAgYXJjaGl2ZV9jbWRzX0NYWD0nJExEIC1Cc2hhcmVhYmxlICAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRsaW5rZXJfZmxhZ3MnCisJICB3bGFyYz0KKwkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSctUiRsaWJkaXInCisJICBoYXJkY29kZV9kaXJlY3RfQ1hYPXllcworCSAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9bm8KKwlmaQorCSMgV29ya2Fyb3VuZCBzb21lIGJyb2tlbiBwcmUtMS41IHRvb2xjaGFpbnMKKwlvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCBjb25mdGVzdC4kb2JqZXh0IHwgJFNFRCAtZSAiczotbGdjYyAtbGMgLWxnY2M6OiInCisJOzsKKworICAgICAgKm50byogfCAqcW54KikKKyAgICAgICAgbGRfc2hsaWJzX0NYWD15ZXMKKwk7OworCisgICAgICBvcGVuYnNkMiopCisgICAgICAgICMgQysrIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGZhaXJseSBicm9rZW4KKwlsZF9zaGxpYnNfQ1hYPW5vCisJOzsKKworICAgICAgb3BlbmJzZCopCisJaWYgdGVzdCAtZiAvdXNyL2xpYmV4ZWMvbGQuc287IHRoZW4KKwkgIGhhcmRjb2RlX2RpcmVjdF9DWFg9eWVzCisJICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD1ubworCSAgaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlX0NYWD15ZXMKKwkgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJGxpYicKKwkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ycGF0aCwkbGliZGlyJworCSAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR7d2x9LUUnCisJICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0iJHdsYXJjIictLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyIkd2xhcmMiJy0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIGZpCisJICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD1mdW5jX2VjaG9fYWxsCisJZWxzZQorCSAgbGRfc2hsaWJzX0NYWD1ubworCWZpCisJOzsKKworICAgICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIEtDQyopCisJICAgICMgS3VjayBhbmQgQXNzb2NpYXRlcywgSW5jLiAoS0FJKSBDKysgQ29tcGlsZXIKKworCSAgICAjIEtDQyB3aWxsIG9ubHkgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkgaWYgdGhlIG91dHB1dCBmaWxlCisJICAgICMgZW5kcyB3aXRoICIuc28iIChvciAiLnNsIiBmb3IgSFAtVVgpLCBzbyByZW5hbWUgdGhlIGxpYnJhcnkKKwkgICAgIyB0byBpdHMgcHJvcGVyIG5hbWUgKHdpdGggdmVyc2lvbikgYWZ0ZXIgbGlua2luZy4KKwkgICAgYXJjaGl2ZV9jbWRzX0NYWD0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbXigpMC05QS1aYS16e31dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAiJGxpYiIgfCAkU0VEIC1lICJzL1wke3RlbXBleHR9XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWI7IG12IFwkdGVtcGxpYiAkbGliJworCisJICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ycGF0aCwkbGliZGlyJworCSAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD06CisKKwkgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJICAgICMgdGhlIEtBSSBDKysgY29tcGlsZXIuCisJICAgIGNhc2UgJGhvc3QgaW4KKwkgICAgICBvc2YzKikgb2xkX2FyY2hpdmVfY21kc19DWFg9JyRDQyAtQnN0YXRpYyAtbyAkb2xkbGliICRvbGRvYmpzJyA7OworCSAgICAgICopIG9sZF9hcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLW8gJG9sZGxpYiAkb2xkb2JqcycgOzsKKwkgICAgZXNhYworCSAgICA7OworICAgICAgICAgIFJDQyopCisJICAgICMgUmF0aW9uYWwgQysrIDIuNC4xCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBsZF9zaGxpYnNfQ1hYPW5vCisJICAgIDs7CisgICAgICAgICAgY3h4KikKKwkgICAgY2FzZSAkaG9zdCBpbgorCSAgICAgIG9zZjMqKQorCSAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKwkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCSAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKwkJOzsKKwkgICAgICAqKQorCSAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdmb3IgaSBpbiBgY2F0ICRleHBvcnRfc3ltYm9sc2A7IGRvIHByaW50ZiAiJXMgJXNcXG4iIC1leHBvcnRlZF9zeW1ib2wgIlwkaSIgPj4gJGxpYi5leHA7IGRvbmV+CisJICAgICAgICAgIGVjaG8gIi1oaWRkZW4iPj4gJGxpYi5leHB+CisJICAgICAgICAgICRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgJHt3bH0taW5wdXQgJHt3bH0kbGliLmV4cCAgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYn4KKwkgICAgICAgICAgJFJNICRsaWIuZXhwJworCSAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1ycGF0aCAkbGliZGlyJworCQk7OworCSAgICBlc2FjCisKKwkgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9OgorCisJICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAjCisJICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKwkgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKwkgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorCSAgICAjIGRlcGVuZGVuY2llcy4KKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQICJsZCIgfCAkR1JFUCAtdiAibGQ6ImA7IHRlbXBsaXN0PWBmdW5jX2VjaG9fYWxsICIkdGVtcGxpc3QiIHwgJFNFRCAicy9cKF4uKmxkLipcKVwoIC4qbGQuKiRcKS9cMS8iYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGZ1bmNfZWNob19hbGwgIiRsaXN0IicKKwkgICAgOzsKKwkgICopCisJICAgIGlmIHRlc3QgIiRHWFgiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCisJICAgICAgY2FzZSAkaG9zdCBpbgorCSAgICAgICAgb3NmMyopCisJICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkJICA7OworCSAgICAgICAgKikKKwkgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCQkgIDs7CisJICAgICAgZXNhYworCisJICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKwkgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD06CisKKwkgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgLXYgIl5Db25maWd1cmVkIHdpdGg6IiB8ICRHUkVQICJcLUwiJworCisJICAgIGVsc2UKKwkgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgICBsZF9zaGxpYnNfQ1hYPW5vCisJICAgIGZpCisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgcHNvcyopCisgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICBsZF9zaGxpYnNfQ1hYPW5vCisgICAgICAgIDs7CisKKyAgICAgIHN1bm9zNCopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgQ0MqKQorCSAgICAjIFN1biBDKysgNC54CisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBsZF9zaGxpYnNfQ1hYPW5vCisJICAgIDs7CisgICAgICAgICAgbGNjKikKKwkgICAgIyBMdWNpZAorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgbGRfc2hsaWJzX0NYWD1ubworCSAgICA7OworICAgICAgICAgICopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBsZF9zaGxpYnNfQ1hYPW5vCisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgc29sYXJpcyopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgQ0MqIHwgc3VuQ0MqKQorCSAgICAjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCisgICAgICAgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9eWVzCisJICAgIG5vX3VuZGVmaW5lZF9mbGFnX0NYWD0nIC16ZGVmcycKKwkgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gIC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkgICAgICAkQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAke3dsfS1NICR7d2x9JGxpYi5leHAgLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKworCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nLVIkbGliZGlyJworCSAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD1ubworCSAgICBjYXNlICRob3N0X29zIGluCisJICAgICAgc29sYXJpczIuWzAtNV0gfCBzb2xhcmlzMi5bMC01XS4qKSA7OworCSAgICAgICopCisJCSMgVGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGNvbWJpbmUgYW5kIHJlb3JkZXIgbGlua2VyIG9wdGlvbnMsCisJCSMgYnV0IHVuZGVyc3RhbmRzIGAteiBsaW5rZXJfZmxhZycuCisJICAgICAgICAjIFN1cHBvcnRlZCBzaW5jZSBTb2xhcmlzIDIuNiAobWF5YmUgMi41LjE/KQorCQl3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9Jy16IGFsbGV4dHJhY3QkY29udmVuaWVuY2UgLXogZGVmYXVsdGV4dHJhY3QnCisJICAgICAgICA7OworCSAgICBlc2FjCisJICAgIGxpbmtfYWxsX2RlcGxpYnNfQ1hYPXllcworCisJICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdmdW5jX2VjaG9fYWxsJworCisJICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZworCSAgICAjICJDQyAteGFyIiwgd2hlcmUgIkNDIiBpcyB0aGUgU3VuIEMrKyBjb21waWxlci4gIFRoaXMgaXMKKwkgICAgIyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIGluc3RhbnRpYXRlZCB0ZW1wbGF0ZXMgYXJlIGluY2x1ZGVkCisJICAgICMgaW4gdGhlIGFyY2hpdmUuCisJICAgIG9sZF9hcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXhhciAtbyAkb2xkbGliICRvbGRvYmpzJworCSAgICA7OworICAgICAgICAgIGdjeCopCisJICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKKworCSAgICAjIFRoZSBDKysgY29tcGlsZXIgbXVzdCBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgYXJjaGl2ZS4KKwkgICAgb2xkX2FyY2hpdmVfY21kc19DWFg9JyRDQyAkTERGTEFHUyAtYXJjaGl2ZSAtbyAkb2xkbGliICRvbGRvYmpzJworCSAgICA7OworICAgICAgICAgICopCisJICAgICMgR05VIEMrKyBjb21waWxlciB3aXRoIFNvbGFyaXMgbGlua2VyCisJICAgIGlmIHRlc3QgIiRHWFgiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCSAgICAgIG5vX3VuZGVmaW5lZF9mbGFnX0NYWD0nICR7d2x9LXogJHt3bH1kZWZzJworCSAgICAgIGlmICRDQyAtLXZlcnNpb24gfCAkR1JFUCAtdiAnXjJcLjcnID4gL2Rldi9udWxsOyB0aGVuCisJICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRMREZMQUdTICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJCSAgJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAke3dsfS1NICR3bCRsaWIuZXhwIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKworCSAgICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIC12ICJeQ29uZmlndXJlZCB3aXRoOiIgfCAkR1JFUCAiXC1MIicKKwkgICAgICBlbHNlCisJICAgICAgICAjIGcrKyAyLjcgYXBwZWFycyB0byByZXF1aXJlIGAtRycgTk9UIGAtc2hhcmVkJyBvbiB0aGlzCisJICAgICAgICAjIHBsYXRmb3JtLgorCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1HIC1ub3N0ZGxpYiAkTERGTEFHUyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCAkd2wkc29uYW1lIC1vICRsaWInCisJICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorCQkgICRDQyAtRyAtbm9zdGRsaWIgJHt3bH0tTSAkd2wkbGliLmV4cCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisKKwkgICAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1HICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgLXYgIl5Db25maWd1cmVkIHdpdGg6IiB8ICRHUkVQICJcLUwiJworCSAgICAgIGZpCisKKwkgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tUiAkd2wkbGliZGlyJworCSAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKwkJc29sYXJpczIuWzAtNV0gfCBzb2xhcmlzMi5bMC01XS4qKSA7OworCQkqKQorCQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJHt3bH0teiAke3dsfWFsbGV4dHJhY3QkY29udmVuaWVuY2UgJHt3bH0teiAke3dsfWRlZmF1bHRleHRyYWN0JworCQkgIDs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bMDFdLlsxMF0qIHwgdW5peHdhcmU3KiB8IHNjbzMuMnY1LjAuWzAyNF0qKQorICAgICAgbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYPScke3dsfS16LHRleHQnCisgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9bm8KKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPW5vCisgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgIENDKikKKwkgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJKikKKwkgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKKwkjIE5vdGU6IFdlIGNhbiBOT1QgdXNlIC16IGRlZnMgYXMgd2UgbWlnaHQgZGVzaXJlLCBiZWNhdXNlIHdlIGRvIG5vdAorCSMgbGluayB3aXRoIC1sYywgYW5kIHRoYXQgd291bGQgY2F1c2UgYW55IHN5bWJvbHMgdXNlZCBmcm9tIGxpYmMgdG8KKwkjIGFsd2F5cyBiZSB1bnJlc29sdmVkLCB3aGljaCBtZWFucyBqdXN0IGFib3V0IG5vIGxpYnJhcnkgd291bGQKKwkjIGV2ZXIgbGluayBjb3JyZWN0bHkuICBJZiB3ZSdyZSBub3QgdXNpbmcgR05VIGxkIHdlIHVzZSAteiB0ZXh0CisJIyB0aG91Z2gsIHdoaWNoIGRvZXMgY2F0Y2ggc29tZSBiYWQgc3ltYm9scyBidXQgaXNuJ3QgYXMgaGVhdnktaGFuZGVkCisJIyBhcyAteiBkZWZzLgorCW5vX3VuZGVmaW5lZF9mbGFnX0NYWD0nJHt3bH0teix0ZXh0JworCWFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nJHt3bH0teixub2RlZnMnCisJYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vCisJaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9bm8KKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tUiwkbGliZGlyJworCWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPSc6JworCWxpbmtfYWxsX2RlcGxpYnNfQ1hYPXllcworCWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR7d2x9LUJleHBvcnQnCisJcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyopCisJICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICBvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1UcHJlbGlua19vYmplY3RzICRvbGRvYmpzfgorCSAgICAgICciJG9sZF9hcmNoaXZlX2NtZHNfQ1hYIgorCSAgICByZWxvYWRfY21kc19DWFg9JyRDQyAtVHByZWxpbmtfb2JqZWN0cyAkcmVsb2FkX29ianN+CisJICAgICAgJyIkcmVsb2FkX2NtZHNfQ1hYIgorCSAgICA7OworCSAgKikKKwkgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICA7OworCWVzYWMKKyAgICAgIDs7CisKKyAgICAgIHRhbmRlbSopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgTkNDKikKKwkgICAgIyBOb25TdG9wLVVYIE5DQyAzLjIwCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBsZF9zaGxpYnNfQ1hYPW5vCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIGxkX3NobGlic19DWFg9bm8KKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICB2eHdvcmtzKikKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgIGxkX3NobGlic19DWFg9bm8KKyAgICAgICAgOzsKKworICAgICAgKikKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgIGxkX3NobGlic19DWFg9bm8KKyAgICAgICAgOzsKKyAgICBlc2FjCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGxkX3NobGlic19DWFgiID4mNQorJGFzX2VjaG8gIiRsZF9zaGxpYnNfQ1hYIiA+JjY7IH0KKyAgICB0ZXN0ICIkbGRfc2hsaWJzX0NYWCIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCisKKyAgICBHQ0NfQ1hYPSIkR1hYIgorICAgIExEX0NYWD0iJExEIgorCisgICAgIyMgQ0FWRUFUIEVNUFRPUjoKKyAgICAjIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQorICAgICMjIHRoZSBydW5uaW5nIG9yZGVyIG9yIG90aGVyd2lzZSBtb3ZlIHRoZW0gYXJvdW5kIHVubGVzcyB5b3Uga25vdyBleGFjdGx5CisgICAgIyMgd2hhdCB5b3UgYXJlIGRvaW5nLi4uCisgICAgIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIGFuZCBhZnRlciB0aGUgb2JqZWN0IGJlaW5nIGxpbmtlZDoKK3ByZWRlcF9vYmplY3RzX0NYWD0KK3Bvc3RkZXBfb2JqZWN0c19DWFg9CitwcmVkZXBzX0NYWD0KK3Bvc3RkZXBzX0NYWD0KK2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFg9CisKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCitjbGFzcyBGb28KK3sKK3B1YmxpYzoKKyAgRm9vICh2b2lkKSB7IGEgPSAwOyB9Citwcml2YXRlOgorICBpbnQgYTsKK307CitfTFRfRU9GCisKKworX2x0X2xpYmRlcHNfc2F2ZV9DRkxBR1M9JENGTEFHUworY2FzZSAiJENDICRDRkxBR1MgIiBpbiAjKAorKlwgLWZsdG8qXCAqKSBDRkxBR1M9IiRDRkxBR1MgLWZuby1sdG8iIDs7CisqXCAtZndob3ByKlwgKikgQ0ZMQUdTPSIkQ0ZMQUdTIC1mbm8td2hvcHIiIDs7CisqXCAtZnVzZS1saW5rZXItcGx1Z2luKlwgKikgQ0ZMQUdTPSIkQ0ZMQUdTIC1mbm8tdXNlLWxpbmtlci1wbHVnaW4iIDs7Citlc2FjCisKK2lmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgIyBQYXJzZSB0aGUgY29tcGlsZXIgb3V0cHV0IGFuZCBleHRyYWN0IHRoZSBuZWNlc3NhcnkKKyAgIyBvYmplY3RzLCBsaWJyYXJpZXMgYW5kIGxpYnJhcnkgZmxhZ3MuCisKKyAgIyBTZW50aW5lbCB1c2VkIHRvIGtlZXAgdHJhY2sgb2Ygd2hldGhlciBvciBub3Qgd2UgYXJlIGJlZm9yZQorICAjIHRoZSBjb25mdGVzdCBvYmplY3QgZmlsZS4KKyAgcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZT1ubworCisgIGZvciBwIGluIGBldmFsICIkb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQiYDsgZG8KKyAgICBjYXNlICR7cHJldn0ke3B9IGluCisKKyAgICAtTCogfCAtUiogfCAtbCopCisgICAgICAgIyBTb21lIGNvbXBpbGVycyBwbGFjZSBzcGFjZSBiZXR3ZWVuICIte0wsUn0iIGFuZCB0aGUgcGF0aC4KKyAgICAgICAjIFJlbW92ZSB0aGUgc3BhY2UuCisgICAgICAgaWYgdGVzdCAkcCA9ICItTCIgfHwKKyAgICAgICAgICB0ZXN0ICRwID0gIi1SIjsgdGhlbgorCSBwcmV2PSRwCisJIGNvbnRpbnVlCisgICAgICAgZmkKKworICAgICAgICMgRXhwYW5kIHRoZSBzeXNyb290IHRvIGVhc2UgZXh0cmFjdGluZyB0aGUgZGlyZWN0b3JpZXMgbGF0ZXIuCisgICAgICAgaWYgdGVzdCAteiAiJHByZXYiOyB0aGVuCisgICAgICAgICBjYXNlICRwIGluCisgICAgICAgICAtTCopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnLUwnICcnICIkcCI7IHByZXY9LUw7IHA9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworICAgICAgICAgLVIqKSBmdW5jX3N0cmlwbmFtZV9jbmYgJy1SJyAnJyAiJHAiOyBwcmV2PS1SOyBwPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKyAgICAgICAgIC1sKikgZnVuY19zdHJpcG5hbWVfY25mICctbCcgJycgIiRwIjsgcHJldj0tbDsgcD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CisgICAgICAgICBlc2FjCisgICAgICAgZmkKKyAgICAgICBjYXNlICRwIGluCisgICAgICAgPSopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnPScgJycgIiRwIjsgcD0kbHRfc3lzcm9vdCRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKyAgICAgICBlc2FjCisgICAgICAgaWYgdGVzdCAiJHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmUiID0gbm87IHRoZW4KKwkgY2FzZSAke3ByZXZ9IGluCisJIC1MIHwgLVIpCisJICAgIyBJbnRlcm5hbCBjb21waWxlciBsaWJyYXJ5IHBhdGhzIHNob3VsZCBjb21lIGFmdGVyIHRob3NlCisJICAgIyBwcm92aWRlZCB0aGUgdXNlci4gIFRoZSBwb3N0ZGVwcyBhbHJlYWR5IGNvbWUgYWZ0ZXIgdGhlCisJICAgIyB1c2VyIHN1cHBsaWVkIGxpYnMgc28gdGhlcmUgaXMgbm8gbmVlZCB0byBwcm9jZXNzIHRoZW0uCisJICAgaWYgdGVzdCAteiAiJGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFgiOyB0aGVuCisJICAgICBjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYPSIke3ByZXZ9JHtwfSIKKwkgICBlbHNlCisJICAgICBjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYPSIke2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFh9ICR7cHJldn0ke3B9IgorCSAgIGZpCisJICAgOzsKKwkgIyBUaGUgIi1sIiBjYXNlIHdvdWxkIG5ldmVyIGNvbWUgYmVmb3JlIHRoZSBvYmplY3QgYmVpbmcKKwkgIyBsaW5rZWQsIHNvIGRvbid0IGJvdGhlciBoYW5kbGluZyB0aGlzIGNhc2UuCisJIGVzYWMKKyAgICAgICBlbHNlCisJIGlmIHRlc3QgLXogIiRwb3N0ZGVwc19DWFgiOyB0aGVuCisJICAgcG9zdGRlcHNfQ1hYPSIke3ByZXZ9JHtwfSIKKwkgZWxzZQorCSAgIHBvc3RkZXBzX0NYWD0iJHtwb3N0ZGVwc19DWFh9ICR7cHJldn0ke3B9IgorCSBmaQorICAgICAgIGZpCisgICAgICAgcHJldj0KKyAgICAgICA7OworCisgICAgKi5sdG8uJG9iamV4dCkgOzsgIyBJZ25vcmUgR0NDIExUTyBvYmplY3RzCisgICAgKi4kb2JqZXh0KQorICAgICAgICMgVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHRlc3Qgb2JqZWN0IGZpbGUgb25seSBzaG93cyB1cAorICAgICAgICMgb25jZSBpbiB0aGUgY29tcGlsZXIgb3V0cHV0LgorICAgICAgIGlmIHRlc3QgIiRwIiA9ICJjb25mdGVzdC4kb2JqZXh0IjsgdGhlbgorCSBwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lPXllcworCSBjb250aW51ZQorICAgICAgIGZpCisKKyAgICAgICBpZiB0ZXN0ICIkcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZSIgPSBubzsgdGhlbgorCSBpZiB0ZXN0IC16ICIkcHJlZGVwX29iamVjdHNfQ1hYIjsgdGhlbgorCSAgIHByZWRlcF9vYmplY3RzX0NYWD0iJHAiCisJIGVsc2UKKwkgICBwcmVkZXBfb2JqZWN0c19DWFg9IiRwcmVkZXBfb2JqZWN0c19DWFggJHAiCisJIGZpCisgICAgICAgZWxzZQorCSBpZiB0ZXN0IC16ICIkcG9zdGRlcF9vYmplY3RzX0NYWCI7IHRoZW4KKwkgICBwb3N0ZGVwX29iamVjdHNfQ1hYPSIkcCIKKwkgZWxzZQorCSAgIHBvc3RkZXBfb2JqZWN0c19DWFg9IiRwb3N0ZGVwX29iamVjdHNfQ1hYICRwIgorCSBmaQorICAgICAgIGZpCisgICAgICAgOzsKKworICAgICopIDs7ICMgSWdub3JlIHRoZSByZXN0LgorCisgICAgZXNhYworICBkb25lCisKKyAgIyBDbGVhbiB1cC4KKyAgcm0gLWYgYS5vdXQgYS5leGUKK2Vsc2UKKyAgZWNobyAibGlidG9vbC5tNDogZXJyb3I6IHByb2JsZW0gY29tcGlsaW5nIENYWCB0ZXN0IHByb2dyYW0iCitmaQorCiskUk0gLWYgY29uZmVzdC4kb2JqZXh0CitDRkxBR1M9JF9sdF9saWJkZXBzX3NhdmVfQ0ZMQUdTCisKKyMgUE9SVE1FOiBvdmVycmlkZSBhYm92ZSB0ZXN0IG9uIHN5c3RlbXMgd2hlcmUgaXQgaXMgYnJva2VuCitjYXNlICRob3N0X29zIGluCitpbnRlcml4WzMtOV0qKQorICAjIEludGVyaXggMy41IGluc3RhbGxzIGNvbXBsZXRlbHkgaG9zZWQgLmxhIGZpbGVzIGZvciBDKyssIHNvIHJhdGhlciB0aGFuCisgICMgaGFjayBhbGwgYXJvdW5kIGl0LCBsZXQncyBqdXN0IHRydXN0ICJnKysiIHRvIERUUlQuCisgIHByZWRlcF9vYmplY3RzX0NYWD0KKyAgcG9zdGRlcF9vYmplY3RzX0NYWD0KKyAgcG9zdGRlcHNfQ1hYPQorICA7OworCitsaW51eCopCisgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorICAqU3VuXCBDKikKKyAgICAjIFN1biBDKysgNS45CisKKyAgICAjIFRoZSBtb3JlIHN0YW5kYXJkcy1jb25mb3JtaW5nIHN0bHBvcnQ0IGxpYnJhcnkgaXMKKyAgICAjIGluY29tcGF0aWJsZSB3aXRoIHRoZSBDc3RkIGxpYnJhcnkuIEF2b2lkIHNwZWNpZnlpbmcKKyAgICAjIGl0IGlmIGl0J3MgaW4gQ1hYRkxBR1MuIElnbm9yZSBsaWJDcnVuIGFzCisgICAgIyAtbGlicmFyeT1zdGxwb3J0NCBkZXBlbmRzIG9uIGl0LgorICAgIGNhc2UgIiAkQ1hYICRDWFhGTEFHUyAiIGluCisgICAgKiIgLWxpYnJhcnk9c3RscG9ydDQgIiopCisgICAgICBzb2xhcmlzX3VzZV9zdGxwb3J0ND15ZXMKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgaWYgdGVzdCAiJHNvbGFyaXNfdXNlX3N0bHBvcnQ0IiAhPSB5ZXM7IHRoZW4KKyAgICAgIHBvc3RkZXBzX0NYWD0nLWxpYnJhcnk9Q3N0ZCAtbGlicmFyeT1DcnVuJworICAgIGZpCisgICAgOzsKKyAgZXNhYworICA7OworCitzb2xhcmlzKikKKyAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgQ0MqIHwgc3VuQ0MqKQorICAgICMgVGhlIG1vcmUgc3RhbmRhcmRzLWNvbmZvcm1pbmcgc3RscG9ydDQgbGlicmFyeSBpcworICAgICMgaW5jb21wYXRpYmxlIHdpdGggdGhlIENzdGQgbGlicmFyeS4gQXZvaWQgc3BlY2lmeWluZworICAgICMgaXQgaWYgaXQncyBpbiBDWFhGTEFHUy4gSWdub3JlIGxpYkNydW4gYXMKKyAgICAjIC1saWJyYXJ5PXN0bHBvcnQ0IGRlcGVuZHMgb24gaXQuCisgICAgY2FzZSAiICRDWFggJENYWEZMQUdTICIgaW4KKyAgICAqIiAtbGlicmFyeT1zdGxwb3J0NCAiKikKKyAgICAgIHNvbGFyaXNfdXNlX3N0bHBvcnQ0PXllcworICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIEFkZGluZyB0aGlzIHJlcXVpcmVzIGEga25vd24tZ29vZCBzZXR1cCBvZiBzaGFyZWQgbGlicmFyaWVzIGZvcgorICAgICMgU3VuIGNvbXBpbGVyIHZlcnNpb25zIGJlZm9yZSA1LjYsIGVsc2UgUElDIG9iamVjdHMgZnJvbSBhbiBvbGQKKyAgICAjIGFyY2hpdmUgd2lsbCBiZSBsaW5rZWQgaW50byB0aGUgb3V0cHV0LCBsZWFkaW5nIHRvIHN1YnRsZSBidWdzLgorICAgIGlmIHRlc3QgIiRzb2xhcmlzX3VzZV9zdGxwb3J0NCIgIT0geWVzOyB0aGVuCisgICAgICBwb3N0ZGVwc19DWFg9Jy1saWJyYXJ5PUNzdGQgLWxpYnJhcnk9Q3J1bicKKyAgICBmaQorICAgIDs7CisgIGVzYWMKKyAgOzsKK2VzYWMKKworCitjYXNlICIgJHBvc3RkZXBzX0NYWCAiIGluCisqIiAtbGMgIiopIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubyA7OworZXNhYworIGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlyc19DWFg9CitpZiB0ZXN0IC1uICIke2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFh9IjsgdGhlbgorIGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlyc19DWFg9YGVjaG8gIiAke2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFh9IiB8ICR7U0VEfSAtZSAncyEgLUwhICFnJyAtZSAncyFeICEhJ2AKK2ZpCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0KK2x0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0KK2x0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0KKworCisgICMgQysrIHNwZWNpZmljIGNhc2VzIGZvciBwaWMsIHN0YXRpYywgd2wsIGV0Yy4KKyAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1zdGF0aWMnCisKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgYWl4KikKKyAgICAgICMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1Cc3RhdGljJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhbWlnYW9zKikKKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBwb3dlcnBjKQorICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAorICAgICAgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctZlBJQycKKyAgICAgICAgOzsKKyAgICAgIG02OGspCisgICAgICAgICAgICAjIEZJWE1FOiB3ZSBuZWVkIGF0IGxlYXN0IDY4MDIwIGNvZGUgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcywgYnV0CisgICAgICAgICAgICAjIGFkZGluZyB0aGUgYC1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKKyAgICAgICAgICAgICMgbGlrZSBgLW02ODA0MCcuCisgICAgICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1tNjgwMjAgLXJlc2lkZW50MzIgLW1hbHdheXMtcmVzdG9yZS1hNCcKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBiZW9zKiB8IGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCogfCBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgT1Nlcy4KKyAgICAgIDs7CisgICAgbWluZ3cqIHwgY3lnd2luKiB8IG9zMiogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKKyAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCisgICAgICAjIEFsdGhvdWdoIHRoZSBjeWd3aW4gZ2NjIGlnbm9yZXMgLWZQSUMsIHN0aWxsIG5lZWQgdGhpcyBmb3Igb2xkLXN0eWxlCisgICAgICAjICgtLWRpc2FibGUtYXV0by1pbXBvcnQpIGxpYnJhcmllcworICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctRERMTF9FWFBPUlQnCisgICAgICA7OworICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCisgICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1mbm8tY29tbW9uJworICAgICAgOzsKKyAgICAqZGpncHAqKQorICAgICAgIyBESkdQUCBkb2VzIG5vdCBzdXBwb3J0IHNoYXJlZCBsaWJyYXJpZXMgYXQgYWxsCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9CisgICAgICA7OworICAgIGhhaWt1KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciBIYWlrdS4KKyAgICAgICMgVGhlICItc3RhdGljIiBmbGFnIGV4aXN0cywgYnV0IGlzIGJyb2tlbi4KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0KKyAgICAgIDs7CisgICAgaW50ZXJpeFszLTldKikKKyAgICAgICMgSW50ZXJpeCAzLnggZ2NjIC1mcGljLy1mUElDIG9wdGlvbnMgZ2VuZXJhdGUgYnJva2VuIGNvZGUuCisgICAgICAjIEluc3RlYWQsIHdlIHJlbG9jYXRlIHNoYXJlZCBsaWJyYXJpZXMgYXQgcnVudGltZS4KKyAgICAgIDs7CisgICAgc3lzdjQqTVAqKQorICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgorCWx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0tS2NvbmZvcm1fcGljCisgICAgICBmaQorICAgICAgOzsKKyAgICBocHV4KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciA2NC1iaXQgUEEgSFAtVVgsIGJ1dCBub3QgZm9yIDMyLWJpdAorICAgICAgIyBQQSBIUC1VWC4gIE9uIElBNjQgSFAtVVgsIFBJQyBpcyB0aGUgZGVmYXVsdCBidXQgdGhlIHBpYyBmbGFnCisgICAgICAjIHNldHMgdGhlIGRlZmF1bHQgVExTIG1vZGVsIGFuZCBhZmZlY3RzIGlubGluaW5nLgorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIGhwcGEqNjQqKQorCTs7CisgICAgICAqKQorCWx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLWZQSUMnCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgICAgKnFueCogfCAqbnRvKikKKyAgICAgICMgUU5YIHVzZXMgR05VIEMrKywgYnV0IG5lZWQgdG8gZGVmaW5lIC1zaGFyZWQgb3B0aW9uIHRvbywgb3RoZXJ3aXNlCisgICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1mUElDIC1zaGFyZWQnCisgICAgICA7OworICAgICopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1mUElDJworICAgICAgOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXhbNC05XSopCisJIyBBbGwgQUlYIGNvZGUgaXMgUElDLgorCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJICAjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgorCSAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKKwllbHNlCisJICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1ibnNvIC1iSTovbGliL3N5c2NhbGxzLmV4cCcKKwlmaQorCTs7CisgICAgICBjaG9ydXMqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJY3hjaDY4KikKKwkgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJICAjIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsIENYWCk9Ii0tbm9fYXV0b19pbnN0YW50aWF0aW9uIC11IF9fbWFpbiAtdSBfX3ByZW1haW4gLXUgX2Fib3J0IC1yICRDT09MX0RJUi9saWIvbGliT3JiLmEgJE1WTUVfRElSL2xpYi9DQy9saWJDLmEgJE1WTUVfRElSL2xpYi9jbGFzc2l4L2xpYmN4LnMuYSIKKwkgIDs7CisJZXNhYworCTs7CisgICAgICBtaW5ndyogfCBjeWd3aW4qIHwgb3MyKiB8IHB3MzIqIHwgY2VnY2MqKQorCSMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKKwkjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorCWx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLURETExfRVhQT1JUJworCTs7CisgICAgICBkZ3V4KikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgZWMrKyopCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLUtQSUMnCisJICAgIDs7CisJICBnaGN4KikKKwkgICAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctcGljJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKwkjIEZyZWVCU0QgdXNlcyBHTlUgQysrCisJOzsKKyAgICAgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyopCisJICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9JyR7d2x9LWEgJHt3bH1hcmNoaXZlJworCSAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQ7IHRoZW4KKwkgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9JytaJworCSAgICBmaQorCSAgICA7OworCSAgYUNDKikKKwkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nJHt3bH0tYSAke3dsfWFyY2hpdmUnCisJICAgIGNhc2UgJGhvc3RfY3B1IGluCisJICAgIGhwcGEqNjQqfGlhNjQqKQorCSAgICAgICMgK1ogdGhlIGRlZmF1bHQKKwkgICAgICA7OworCSAgICAqKQorCSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nK1onCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIGludGVyaXgqKQorCSMgVGhpcyBpcyBjODksIHdoaWNoIGlzIE1TIFZpc3VhbCBDKysgKG5vIHNoYXJlZCBsaWJzKQorCSMgQW55b25lIHdhbnRzIHRvIGRvIGEgcG9ydD8KKwk7OworICAgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgQ0MqKQorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKKwkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctbm9uX3NoYXJlZCcKKwkgICAgIyBDQyBwaWMgZmxhZyAtS1BJQyBpcyB0aGUgZGVmYXVsdC4KKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIEtDQyopCisJICAgICMgS0FJIEMrKyBDb21waWxlcgorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLS1iYWNrZW5kIC1XbCwnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLWZQSUMnCisJICAgIDs7CisJICBlY3BjKiApCisJICAgICMgb2xkIEludGVsIEMrKyBmb3IgeDg2XzY0IHdoaWNoIHN0aWxsIHN1cHBvcnRlZCAtS1BJQy4KKwkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLUtQSUMnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLXN0YXRpYycKKwkgICAgOzsKKwkgIGljcGMqICkKKwkgICAgIyBJbnRlbCBDKyssIHVzZWQgdG8gYmUgaW5jb21wYXRpYmxlIHdpdGggR0NDLgorCSAgICAjIElDQyAxMCBkb2Vzbid0IGFjY2VwdCAtS1BJQyBhbnkgbW9yZS4KKwkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLWZQSUMnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLXN0YXRpYycKKwkgICAgOzsKKwkgIHBnQ0MqIHwgcGdjcHAqKQorCSAgICAjIFBvcnRsYW5kIEdyb3VwIEMrKyBjb21waWxlcgorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctZnBpYycKKwkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKKwkgICAgOzsKKwkgIGN4eCopCisJICAgICMgQ29tcGFxIEMrKworCSAgICAjIE1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgaXMgZW1wdHkuICBJdCBhcHBlYXJzIHRoYXQgYWxsIEFscGhhCisJICAgICMgTGludXggYW5kIENvbXBhcSBUcnU2NCBVbml4IG9iamVjdHMgYXJlIFBJQy4KKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPQorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1ub25fc2hhcmVkJworCSAgICA7OworCSAgeGxjKiB8IHhsQyogfCBiZ3hsW2NDXSogfCBtcGl4bFtjQ10qKQorCSAgICAjIElCTSBYTCA4LjAsIDkuMCBvbiBQUEMgYW5kIEJsdWVHZW5lCisJICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1xcGljJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1xc3RhdGljbGluaycKKwkgICAgOzsKKwkgICopCisJICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorCSAgICAqU3VuXCBDKikKKwkgICAgICAjIFN1biBDKysgNS45CisJICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctS1BJQycKKwkgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1Cc3RhdGljJworCSAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctUW9wdGlvbiBsZCAnCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgICA7OworCWVzYWMKKwk7OworICAgICAgbHlueG9zKikKKwk7OworICAgICAgbTg4ayopCisJOzsKKyAgICAgIG12cyopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIGN4eCopCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLVcgYyxleHBvcnRhbGwnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgbmV0YnNkKikKKwk7OworICAgICAgKnFueCogfCAqbnRvKikKKyAgICAgICAgIyBRTlggdXNlcyBHTlUgQysrLCBidXQgbmVlZCB0byBkZWZpbmUgLXNoYXJlZCBvcHRpb24gdG9vLCBvdGhlcndpc2UKKyAgICAgICAgIyBpdCB3aWxsIGNvcmVkdW1wLgorICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1mUElDIC1zaGFyZWQnCisgICAgICAgIDs7CisgICAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIEtDQyopCisJICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctLWJhY2tlbmQgLVdsLCcKKwkgICAgOzsKKwkgIFJDQyopCisJICAgICMgUmF0aW9uYWwgQysrIDIuNC4xCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLXBpYycKKwkgICAgOzsKKwkgIGN4eCopCisJICAgICMgRGlnaXRhbC9Db21wYXEgQysrCisJICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJworCSAgICAjIE1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgaXMgZW1wdHkuICBJdCBhcHBlYXJzIHRoYXQgYWxsIEFscGhhCisJICAgICMgTGludXggYW5kIENvbXBhcSBUcnU2NCBVbml4IG9iamVjdHMgYXJlIFBJQy4KKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPQorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1ub25fc2hhcmVkJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIHBzb3MqKQorCTs7CisgICAgICBzb2xhcmlzKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgQ0MqIHwgc3VuQ0MqKQorCSAgICAjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLUtQSUMnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLUJzdGF0aWMnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctUW9wdGlvbiBsZCAnCisJICAgIDs7CisJICBnY3gqKQorCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1QSUMnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgc3Vub3M0KikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgQ0MqKQorCSAgICAjIFN1biBDKysgNC54CisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLXBpYycKKwkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKKwkgICAgOzsKKwkgIGxjYyopCisJICAgICMgTHVjaWQKKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctcGljJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIHN5c3Y1KiB8IHVuaXh3YXJlKiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCBPcGVuVU5JWCopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIENDKikKKwkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLUtQSUMnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLUJzdGF0aWMnCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICB0YW5kZW0qKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBOQ0MqKQorCSAgICAjIE5vblN0b3AtVVggTkNDIDMuMjAKKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctS1BJQycKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICB2eHdvcmtzKikKKwk7OworICAgICAgKikKKwlsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWRfQ1hYPW5vCisJOzsKKyAgICBlc2FjCisgIGZpCisKK2Nhc2UgJGhvc3Rfb3MgaW4KKyAgIyBGb3IgcGxhdGZvcm1zIHdoaWNoIGRvIG5vdCBzdXBwb3J0IFBJQywgLURQSUMgaXMgbWVhbmluZ2xlc3M6CisgICpkamdwcCopCisgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPQorICAgIDs7CisgICopCisgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSIkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIC1EUElDIgorICAgIDs7Citlc2FjCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfcHJvZ19jb21waWxlcl9waWNfQ1hYKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfQ1hYPSRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFgKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX0NYWCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX0NYWCIgPiY2OyB9CitsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9JGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX0NYWAorCisjCisjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCisjCitpZiB0ZXN0IC1uICIkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRjb21waWxlciBQSUMgZmxhZyAkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIHdvcmtzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRjb21waWxlciBQSUMgZmxhZyAkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIHdvcmtzLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0NYWCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0NYWD1ubworICAgYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0CisgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGx0X2NvbXBpbGVyX2ZsYWc9IiRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFggLURQSUMiCisgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgorICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KKyAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKKyAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCisgICAjIFRoZSBvcHRpb24gaXMgcmVmZXJlbmNlZCB2aWEgYSB2YXJpYWJsZSB0byBhdm9pZCBjb25mdXNpbmcgc2VkLgorICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCisgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCisgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsICIkbHRfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCisgICBhY19zdGF0dXM9JD8KKyAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KKyAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzIG90aGVyIHRoYW4gdGhlIHVzdWFsIG91dHB1dC4KKyAgICAgJEVDSE8gIiRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID5jb25mdGVzdC5leHAKKyAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBjb25mdGVzdC5lcjIgfHwgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19DWFg9eWVzCisgICAgIGZpCisgICBmaQorICAgJFJNIGNvbmZ0ZXN0KgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19DWFgiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19DWFgiID4mNjsgfQorCitpZiB0ZXN0IHgiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0NYWCIgPSB4eWVzOyB0aGVuCisgICAgY2FzZSAkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIGluCisgICAgICIiIHwgIiAiKikgOzsKKyAgICAgKikgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSIgJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCIgOzsKKyAgICAgZXNhYworZWxzZQorICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0KKyAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkX0NYWD1ubworZmkKKworZmkKKworCisKKworCisjCisjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCisjCit3bD0kbHRfcHJvZ19jb21waWxlcl93bF9DWFggZXZhbCBsdF90bXBfc3RhdGljX2ZsYWc9XCIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYXCIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3MuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfQ1hYKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfQ1hYPW5vCisgICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorICAgTERGTEFHUz0iJExERkxBR1MgJGx0X3RtcF9zdGF0aWNfZmxhZyIKKyAgIGVjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgaWYgKGV2YWwgJGFjX2xpbmsgMj5jb25mdGVzdC5lcnIpICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgICAgICMgVGhlIGxpbmtlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKKyAgICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgICAjIEFwcGVuZCBhbnkgZXJyb3JzIHRvIHRoZSBjb25maWcubG9nLgorICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQorICAgICAgICRFQ0hPICIkX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPiBjb25mdGVzdC5leHAKKyAgICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKKyAgICAgICBpZiBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfQ1hYPXllcworICAgICAgIGZpCisgICAgIGVsc2UKKyAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19DWFg9eWVzCisgICAgIGZpCisgICBmaQorICAgJFJNIC1yIGNvbmZ0ZXN0KgorICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfQ1hYIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfQ1hYIiA+JjY7IH0KKworaWYgdGVzdCB4IiRsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19DWFgiID0geHllczsgdGhlbgorICAgIDoKK2Vsc2UKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9CitmaQorCisKKworCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYPW5vCisgICAkUk0gLXIgY29uZnRlc3QgMj4vZGV2L251bGwKKyAgIG1rZGlyIGNvbmZ0ZXN0CisgICBjZCBjb25mdGVzdAorICAgbWtkaXIgb3V0CisgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKworICAgbHRfY29tcGlsZXJfZmxhZz0iLW8gb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0IgorICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKKyAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCisgICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCisgICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgorICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCisgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCisgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0CisgICB0aGVuCisgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICAgICAkRUNITyAiJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBvdXQvY29uZnRlc3QuZXJyID5vdXQvY29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBvdXQvY29uZnRlc3QuZXIyIHx8IGRpZmYgb3V0L2NvbmZ0ZXN0LmV4cCBvdXQvY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFg9eWVzCisgICAgIGZpCisgICBmaQorICAgY2htb2QgdSt3IC4gMj4mNQorICAgJFJNIGNvbmZ0ZXN0KgorICAgIyBTR0kgQysrIGNvbXBpbGVyIHdpbGwgY3JlYXRlIGRpcmVjdG9yeSBvdXQvaWlfZmlsZXMvIGZvcgorICAgIyB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uCisgICB0ZXN0IC1kIG91dC9paV9maWxlcyAmJiAkUk0gb3V0L2lpX2ZpbGVzLyogJiYgcm1kaXIgb3V0L2lpX2ZpbGVzCisgICAkUk0gb3V0LyogJiYgcm1kaXIgb3V0CisgICBjZCAuLgorICAgJFJNIC1yIGNvbmZ0ZXN0CisgICAkUk0gY29uZnRlc3QqCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCIgPiY2OyB9CisKKworCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYPW5vCisgICAkUk0gLXIgY29uZnRlc3QgMj4vZGV2L251bGwKKyAgIG1rZGlyIGNvbmZ0ZXN0CisgICBjZCBjb25mdGVzdAorICAgbWtkaXIgb3V0CisgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKworICAgbHRfY29tcGlsZXJfZmxhZz0iLW8gb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0IgorICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKKyAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCisgICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCisgICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgorICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCisgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCisgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0CisgICB0aGVuCisgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICAgICAkRUNITyAiJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBvdXQvY29uZnRlc3QuZXJyID5vdXQvY29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBvdXQvY29uZnRlc3QuZXIyIHx8IGRpZmYgb3V0L2NvbmZ0ZXN0LmV4cCBvdXQvY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFg9eWVzCisgICAgIGZpCisgICBmaQorICAgY2htb2QgdSt3IC4gMj4mNQorICAgJFJNIGNvbmZ0ZXN0KgorICAgIyBTR0kgQysrIGNvbXBpbGVyIHdpbGwgY3JlYXRlIGRpcmVjdG9yeSBvdXQvaWlfZmlsZXMvIGZvcgorICAgIyB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uCisgICB0ZXN0IC1kIG91dC9paV9maWxlcyAmJiAkUk0gb3V0L2lpX2ZpbGVzLyogJiYgcm1kaXIgb3V0L2lpX2ZpbGVzCisgICAkUk0gb3V0LyogJiYgcm1kaXIgb3V0CisgICBjZCAuLgorICAgJFJNIC1yIGNvbmZ0ZXN0CisgICAkUk0gY29uZnRlc3QqCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCIgPiY2OyB9CisKKworCisKK2hhcmRfbGlua3M9Im5vdHRlc3RlZCIKK2lmIHRlc3QgIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFgiID0gbm8gJiYgdGVzdCAiJG5lZWRfbG9ja3MiICE9IG5vOyB0aGVuCisgICMgZG8gbm90IG92ZXJ3cml0ZSB0aGUgdmFsdWUgb2YgbmVlZF9sb2NrcyBwcm92aWRlZCBieSB0aGUgdXNlcgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3MuLi4gIiA+JjY7IH0KKyAgaGFyZF9saW5rcz15ZXMKKyAgJFJNIGNvbmZ0ZXN0KgorICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubworICB0b3VjaCBjb25mdGVzdC5hCisgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPiY1IHx8IGhhcmRfbGlua3M9bm8KKyAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRoYXJkX2xpbmtzIiA+JjUKKyRhc19lY2hvICIkaGFyZF9saW5rcyIgPiY2OyB9CisgIGlmIHRlc3QgIiRoYXJkX2xpbmtzIiA9IG5vOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBcYCRDQycgZG9lcyBub3Qgc3VwcG9ydCBcYC1jIC1vJywgc28gXGBtYWtlIC1qJyBtYXkgYmUgdW5zYWZlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFxgJENDJyBkb2VzIG5vdCBzdXBwb3J0IFxgLWMgLW8nLCBzbyBcYG1ha2UgLWonIG1heSBiZSB1bnNhZmUiID4mMjt9CisgICAgbmVlZF9sb2Nrcz13YXJuCisgIGZpCitlbHNlCisgIG5lZWRfbG9ja3M9bm8KK2ZpCisKKworCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLi4uICIgPiY2OyB9CisKKyAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgZXhjbHVkZV9leHBzeW1zX0NYWD0nX0dMT0JBTF9PRkZTRVRfVEFCTEVffF9HTE9CQUxfX0ZbSURdXy4qJworICBjYXNlICRob3N0X29zIGluCisgIGFpeFs0LTldKikKKyAgICAjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB3ZSBkb24ndCB3YW50IHRoZSAiLUMiIG9wdGlvbi4KKyAgICAjIC1DIG1lYW5zIGRlbWFuZ2xlIHRvIEFJWCBubSwgYnV0IG1lYW5zIGRvbid0IGRlbWFuZ2xlIHdpdGggR05VIG5tCisgICAgIyBBbHNvLCBBSVggbm0gdHJlYXRzIHdlYWsgZGVmaW5lZCBzeW1ib2xzIGxpa2Ugb3RoZXIgZ2xvYmFsIGRlZmluZWQKKyAgICAjIHN5bWJvbHMsIHdoZXJlYXMgR05VIG5tIG1hcmtzIHRoZW0gYXMgIlciLgorICAgIGlmICROTSAtViAyPiYxIHwgJEdSRVAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSckTk0gLUJwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSB8fCAoXCQgMiA9PSAiVyIpKSAmJiAoc3Vic3RyKFwkIDMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFwkIDMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCisgICAgZWxzZQorICAgICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9JyROTSAtQkNwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSkgJiYgKHN1YnN0cihcJCAzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJCAzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJworICAgIGZpCisgICAgOzsKKyAgcHczMiopCisgICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9IiRsdGRsbF9jbWRzIgorICAgIDs7CisgIGN5Z3dpbiogfCBtaW5ndyogfCBjZWdjYyopCisgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICBjbCopCisgICAgICBleGNsdWRlX2V4cHN5bXNfQ1hYPSdfTlVMTF9JTVBPUlRfREVTQ1JJUFRPUnxfSU1QT1JUX0RFU0NSSVBUT1JfLionCisgICAgICA7OworICAgICopCisgICAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS87cy9eLipbIF1fX25tX19cKFteIF0qXClbIF1bXiBdKi9cMSBEQVRBLzsvXklbIF0vZDsvXltBSVRXXVsgXS9zLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworICAgICAgZXhjbHVkZV9leHBzeW1zX0NYWD0nW19dK0dMT0JBTF9PRkZTRVRfVEFCTEVffFtfXStHTE9CQUxfX1tGSURdXy4qfFtfXStoZWFkX1tBLVphLXowLTlfXStfZGxsfFtBLVphLXowLTlfXStfZGxsX2luYW1lJworICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgKikKKyAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworICAgIDs7CisgIGVzYWMKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsZF9zaGxpYnNfQ1hYIiA+JjUKKyRhc19lY2hvICIkbGRfc2hsaWJzX0NYWCIgPiY2OyB9Cit0ZXN0ICIkbGRfc2hsaWJzX0NYWCIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCisKK3dpdGhfZ251X2xkX0NYWD0kd2l0aF9nbnVfbGQKKworCisKKworCisKKyMKKyMgRG8gd2UgbmVlZCB0byBleHBsaWNpdGx5IGxpbmsgbGliYz8KKyMKK2Nhc2UgIngkYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYIiBpbgoreHx4eWVzKQorICAjIEFzc3VtZSAtbGMgc2hvdWxkIGJlIGFkZGVkCisgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD15ZXMKKworICBpZiB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICBjYXNlICRhcmNoaXZlX2NtZHNfQ1hYIGluCisgICAgKid+JyopCisgICAgICAjIEZJWE1FOiB3ZSBtYXkgaGF2ZSB0byBkZWFsIHdpdGggbXVsdGktY29tbWFuZCBzZXF1ZW5jZXMuCisgICAgICA7OworICAgICckQ0MgJyopCisgICAgICAjIFRlc3Qgd2hldGhlciB0aGUgY29tcGlsZXIgaW1wbGljaXRseSBsaW5rcyB3aXRoIC1sYyBzaW5jZSBvbiBzb21lCisgICAgICAjIHN5c3RlbXMsIC1sZ2NjIGhhcyB0byBjb21lIGJlZm9yZSAtbGMuIElmIGdjYyBhbHJlYWR5IHBhc3NlcyAtbGMKKyAgICAgICMgdG8gbGQsIGRvbid0IGFkZCAtbGMgYmVmb3JlIC1sZ2NjLgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjX0NYWCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgICRSTSBjb25mdGVzdCoKKwllY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKworCWlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gMj5jb25mdGVzdC5lcnI7IHRoZW4KKwkgIHNvbmFtZT1jb25mdGVzdAorCSAgbGliPWNvbmZ0ZXN0CisJICBsaWJvYmpzPWNvbmZ0ZXN0LiRhY19vYmpleHQKKwkgIGRlcGxpYnM9CisJICB3bD0kbHRfcHJvZ19jb21waWxlcl93bF9DWFgKKwkgIHBpY19mbGFnPSRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFgKKwkgIGNvbXBpbGVyX2ZsYWdzPS12CisJICBsaW5rZXJfZmxhZ3M9LXYKKwkgIHZlcnN0cmluZz0KKwkgIG91dHB1dF9vYmpkaXI9LgorCSAgbGlibmFtZT1jb25mdGVzdAorCSAgbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZz0kYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYCisJICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9CisJICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYXJjaGl2ZV9jbWRzX0NYWCAyXD5cJjEgXHwgJEdSRVAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMVwiIjsgfSA+JjUKKyAgKGV2YWwgJGFyY2hpdmVfY21kc19DWFggMlw+XCYxIFx8ICRHUkVQIFwiIC1sYyBcIiBcPi9kZXYvbnVsbCAyXD5cJjEpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CisJICB0aGVuCisJICAgIGx0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubworCSAgZWxzZQorCSAgICBsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9eWVzCisJICBmaQorCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPSRsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnCisJZWxzZQorCSAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1CisJZmkKKwkkUk0gY29uZnRlc3QqCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjX0NYWCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjX0NYWCIgPiY2OyB9CisgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9JGx0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjX0NYWAorICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisgIDs7Citlc2FjCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcy4uLiAiID4mNjsgfQorCitsaWJyYXJ5X25hbWVzX3NwZWM9CitsaWJuYW1lX3NwZWM9J2xpYiRuYW1lJworc29uYW1lX3NwZWM9CitzaHJleHRfY21kcz0iLnNvIgorcG9zdGluc3RhbGxfY21kcz0KK3Bvc3R1bmluc3RhbGxfY21kcz0KK2ZpbmlzaF9jbWRzPQorZmluaXNoX2V2YWw9CitzaGxpYnBhdGhfdmFyPQorc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXVua25vd24KK3ZlcnNpb25fdHlwZT1ub25lCitkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCitzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiIKK25lZWRfbGliX3ByZWZpeD11bmtub3duCitoYXJkY29kZV9pbnRvX2xpYnM9bm8KKworIyB3aGVuIHlvdSBzZXQgbmVlZF92ZXJzaW9uIHRvIG5vLCBtYWtlIHN1cmUgaXQgZG9lcyBub3QgY2F1c2UgLXNldF92ZXJzaW9uCisjIGZsYWdzIHRvIGJlIGxlZnQgd2l0aG91dCBhcmd1bWVudHMKK25lZWRfdmVyc2lvbj11bmtub3duCisKK2Nhc2UgJGhvc3Rfb3MgaW4KK2FpeDMqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZS5hJworICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKKworICAjIEFJWCAzIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIHdlIGFwcGVuZCBhIG1ham9yIHZlcnNpb24gdG8gdGhlIG5hbWUuCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIDs7CisKK2FpeFs0LTldKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICAjIEFJWCA1IHN1cHBvcnRzIElBNjQKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBlbHNlCisgICAgIyBXaXRoIEdDQyB1cCB0byAyLjk1LngsIGNvbGxlY3QyIHdvdWxkIGNyZWF0ZSBhbiBpbXBvcnQgZmlsZQorICAgICMgZm9yIGRlcGVuZGVuY2UgbGlicmFyaWVzLiAgVGhlIGltcG9ydCBmaWxlIHdvdWxkIHN0YXJ0IHdpdGgKKyAgICAjIHRoZSBsaW5lIGAjISAuJy4gIFRoaXMgd291bGQgY2F1c2UgdGhlIGdlbmVyYXRlZCBsaWJyYXJ5IHRvCisgICAgIyBkZXBlbmQgb24gYC4nLCBhbHdheXMgYW4gaW52YWxpZCBsaWJyYXJ5LiAgVGhpcyB3YXMgZml4ZWQgaW4KKyAgICAjIGRldmVsb3BtZW50IHNuYXBzaG90cyBvZiBHQ0MgcHJpb3IgdG8gMy4wLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeDQgfCBhaXg0LlswMV0gfCBhaXg0LlswMV0uKikKKyAgICAgIGlmIHsgZWNobyAnI2lmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA5NyknCisJICAgZWNobyAnIHllcyAnCisJICAgZWNobyAnI2VuZGlmJzsgfSB8ICR7Q0N9IC1FIC0gfCAkR1JFUCB5ZXMgPiAvZGV2L251bGw7IHRoZW4KKwk6CisgICAgICBlbHNlCisJY2FuX2J1aWxkX3NoYXJlZD1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgZXNhYworICAgICMgQUlYIChvbiBQb3dlciopIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIGN1cnJlbnRseSB3ZSBjYW4gbm90IGhhcmRjb2RlIGNvcnJlY3QKKyAgICAjIHNvbmFtZSBpbnRvIGV4ZWN1dGFibGUuIFByb2JhYmx5IHdlIGNhbiBhZGQgdmVyc2lvbmluZyBzdXBwb3J0IHRvCisgICAgIyBjb2xsZWN0Miwgc28gYWRkaXRpb25hbCBsaW5rcyBjYW4gYmUgdXNlZnVsIGluIGZ1dHVyZS4KKyAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKyAgICAgICMgSWYgdXNpbmcgcnVuIHRpbWUgbGlua2luZyAob24gQUlYIDQuMiBvciBsYXRlcikgdXNlIGxpYjxuYW1lPi5zbworICAgICAgIyBpbnN0ZWFkIG9mIGxpYjxuYW1lPi5hIHRvIGxldCBwZW9wbGUga25vdyB0aGF0IHRoZXNlIGFyZSBub3QKKyAgICAgICMgdHlwaWNhbCBBSVggc2hhcmVkIGxpYnJhcmllcy4KKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIGVsc2UKKyAgICAgICMgV2UgcHJlc2VydmUgLmEgYXMgZXh0ZW5zaW9uIGZvciBzaGFyZWQgbGlicmFyaWVzIHRocm91Z2ggQUlYNC4yCisgICAgICAjIGFuZCBsYXRlciB3aGVuIHdlIGFyZSBub3QgZG9pbmcgcnVuIHRpbWUgbGlua2luZy4KKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uYSAkbGlibmFtZS5hJworICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICBmaQorICAgIHNobGlicGF0aF92YXI9TElCUEFUSAorICBmaQorICA7OworCithbWlnYW9zKikKKyAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgcG93ZXJwYykKKyAgICAjIFNpbmNlIEp1bHkgMjAwNyBBbWlnYU9TNCBvZmZpY2lhbGx5IHN1cHBvcnRzIC5zbyBsaWJyYXJpZXMuCisgICAgIyBXaGVuIGNvbXBpbGluZyB0aGUgZXhlY3V0YWJsZSwgYWRkIC11c2UtZHlubGQgLUxzb2JqczogdG8gdGhlIGNvbXBpbGVsaW5lLgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIDs7CisgIG02OGspCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5peGxpYnJhcnkgJGxpYm5hbWUuYScKKyAgICAjIENyZWF0ZSAke2xpYm5hbWV9X2l4bGlicmFyeS5hIGVudHJpZXMgaW4gL3N5cy9saWJzLgorICAgIGZpbmlzaF9ldmFsPSdmb3IgbGliIGluIGBscyAkbGliZGlyLyouaXhsaWJyYXJ5IDI+L2Rldi9udWxsYDsgZG8gbGlibmFtZT1gZnVuY19lY2hvX2FsbCAiJGxpYiIgfCAkU0VEICdcJydzJV4uKi9cKFteL10qXClcLml4bGlicmFyeSQlXDElJ1wnJ2A7IHRlc3QgJFJNIC9zeXMvbGlicy8ke2xpYm5hbWV9X2l4bGlicmFyeS5hOyAkc2hvdyAiY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSI7IGNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgfHwgZXhpdCAxOyBkb25lJworICAgIDs7CisgIGVzYWMKKyAgOzsKKworYmVvcyopCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKKyAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgOzsKKworYnNkaVs0NV0qKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9YMTEvbGliIC91c3IvY29udHJpYi9saWIgL2xpYiAvdXNyL2xvY2FsL2xpYiIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9zaGxpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiIKKyAgIyB0aGUgZGVmYXVsdCBsZC5zby5jb25mIGFsc28gY29udGFpbnMgL3Vzci9jb250cmliL2xpYiBhbmQKKyAgIyAvdXNyL1gxMVI2L2xpYiAoL3Vzci9YMTEgaXMgYSBsaW5rIHRvIC91c3IvWDExUjYpLCBidXQgbGV0IHVzIGFsbG93CisgICMgbGlidG9vbCB0byBoYXJkLWNvZGUgdGhlc2UgaW50byBwcm9ncmFtcworICA7OworCitjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgIHZlcnNpb25fdHlwZT13aW5kb3dzCisgIHNocmV4dF9jbWRzPSIuZGxsIgorICBuZWVkX3ZlcnNpb249bm8KKyAgbmVlZF9saWJfcHJlZml4PW5vCisKKyAgY2FzZSAkR0NDLCRjY19iYXNlbmFtZSBpbgorICB5ZXMsKikKKyAgICAjIGdjYworICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCisgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KKyAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgorICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lfgorICAgICAgY2htb2QgYSt4IFwkZGxkaXIvJGRsbmFtZX4KKyAgICAgIGlmIHRlc3QgLW4gJ1wnJyRzdHJpcG1lJ1wnJyAmJiB0ZXN0IC1uICdcJyckc3RyaXBsaWInXCcnOyB0aGVuCisgICAgICAgIGV2YWwgJ1wnJyRzdHJpcGxpYiBcJGRsZGlyLyRkbG5hbWUnXCcnIHx8IGV4aXQgXCQ/OworICAgICAgZmknCisgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+CisgICAgICAgJFJNIFwkZGxwYXRoJworICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBjeWd3aW4qKQorICAgICAgIyBDeWd3aW4gRExMcyB1c2UgJ2N5ZycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCisgICAgICBzb25hbWVfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL2N5Zy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisKKyAgICAgIDs7CisgICAgbWluZ3cqIHwgY2VnY2MqKQorICAgICAgIyBNaW5HVyBETExzIHVzZSB0cmFkaXRpb25hbCAnbGliJyBwcmVmaXgKKyAgICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKyAgICAgIDs7CisgICAgcHczMiopCisgICAgICAjIHB3MzIgRExMcyB1c2UgJ3B3JyBwcmVmaXggcmF0aGVyIHRoYW4gJ2xpYicKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKyAgICAgIDs7CisgICAgZXNhYworICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAgOzsKKworICAqLGNsKikKKyAgICAjIE5hdGl2ZSBNU1ZDCisgICAgbGlibmFtZV9zcGVjPSckbmFtZScKKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9LmRsbC5saWInCisKKyAgICBjYXNlICRidWlsZF9vcyBpbgorICAgIG1pbmd3KikKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0KKyAgICAgIGx0X3NhdmVfaWZzPSRJRlMKKyAgICAgIElGUz0nOycKKyAgICAgIGZvciBsdF9wYXRoIGluICRMSUIKKyAgICAgIGRvCisgICAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKyAgICAgICAgIyBMZXQgRE9TIHZhcmlhYmxlIGV4cGFuc2lvbiBwcmludCB0aGUgc2hvcnQgOC4zIHN0eWxlIGZpbGUgbmFtZS4KKyAgICAgICAgbHRfcGF0aD1gY2QgIiRsdF9wYXRoIiAyPi9kZXYvbnVsbCAmJiBjbWQgLy9DICJmb3IgJWkgaW4gKCIuIikgZG8gQGVjaG8gJX5zaSJgCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAkbHRfcGF0aCIKKyAgICAgIGRvbmUKKyAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKyAgICAgICMgQ29udmVydCB0byBNU1lTIHN0eWxlLgorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBzZWQgLWUgJ3N8XFxcXHwvfGcnIC1lICdzfCBcXChbYS16QS1aXVxcKTp8IC9cXDF8ZycgLWUgJ3N8XiB8fCdgCisgICAgICA7OworICAgIGN5Z3dpbiopCisgICAgICAjIENvbnZlcnQgdG8gdW5peCBmb3JtLCB0aGVuIHRvIGRvcyBmb3JtLCB0aGVuIGJhY2sgdG8gdW5peCBmb3JtCisgICAgICAjIGJ1dCB0aGlzIHRpbWUgZG9zIHN0eWxlIChubyBzcGFjZXMhKSBzbyB0aGF0IHRoZSB1bml4IGZvcm0gbG9va3MKKyAgICAgICMgbGlrZSAvY3lnZHJpdmUvYy9QUk9HUkF+MTovY3lnZHIuLi4KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkTElCImAKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS1kb3MgIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIDI+L2Rldi9udWxsYAorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKyAgICAgIDs7CisgICAgKikKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJExJQiIKKyAgICAgIGlmICRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRHUkVQICc7W2MtekMtWl06LycgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAjIEl0IGlzIG1vc3QgcHJvYmFibHkgYSBXaW5kb3dzIGZvcm1hdCBQQVRILgorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAorICAgICAgZWxzZQorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisgICAgICBmaQorICAgICAgIyBGSVhNRTogZmluZCB0aGUgc2hvcnQgbmFtZSBvciB0aGUgcGF0aCBjb21wb25lbnRzLCBhcyBzcGFjZXMgYXJlCisgICAgICAjIGNvbW1vbi4gKGUuZy4gIlByb2dyYW0gRmlsZXMiIC0+ICJQUk9HUkF+MSIpCisgICAgICA7OworICAgIGVzYWMKKworICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KKyAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCR7YmFzZV9maWxlfSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KKyAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZScKKyAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgorICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KKyAgICAgICAkUk0gXCRkbHBhdGgnCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsaW5rLmV4ZScKKyAgICA7OworCisgICopCisgICAgIyBBc3N1bWUgTVNWQyB3cmFwcGVyCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fSAkbGlibmFtZS5saWInCisgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICA7OworICBlc2FjCisgICMgRklYTUU6IGZpcnN0IHdlIHNob3VsZCBzZWFyY2ggLiBhbmQgdGhlIGRpcmVjdG9yeSB0aGUgZXhlY3V0YWJsZSBpcyBpbgorICBzaGxpYnBhdGhfdmFyPVBBVEgKKyAgOzsKKworZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGR5bGQiCisgIHZlcnNpb25fdHlwZT1kYXJ3aW4KKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCAke2xpYm5hbWV9JHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7bWFqb3J9JHNoYXJlZF9leHQnCisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgc2hsaWJwYXRoX3Zhcj1EWUxEX0xJQlJBUllfUEFUSAorICBzaHJleHRfY21kcz0nYHRlc3QgLiRtb2R1bGUgPSAueWVzICYmIGVjaG8gLnNvIHx8IGVjaG8gLmR5bGliYCcKKworICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9sb2NhbC9saWIgL2xpYiAvdXNyL2xpYicKKyAgOzsKKworZGd1eCopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIDs7CisKK2ZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgIyBEcmFnb25GbHkgZG9lcyBub3QgaGF2ZSBhb3V0LiAgV2hlbi9pZiB0aGV5IGltcGxlbWVudCBhIG5ldworICAjIHZlcnNpb25pbmcgbWVjaGFuaXNtLCBhZGp1c3QgdGhpcy4KKyAgaWYgdGVzdCAteCAvdXNyL2Jpbi9vYmpmb3JtYXQ7IHRoZW4KKyAgICBvYmpmb3JtYXQ9YC91c3IvYmluL29iamZvcm1hdGAKKyAgZWxzZQorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBmcmVlYnNkWzIzXS4qKSBvYmpmb3JtYXQ9YW91dCA7OworICAgICopIG9iamZvcm1hdD1lbGYgOzsKKyAgICBlc2FjCisgIGZpCisgIHZlcnNpb25fdHlwZT1mcmVlYnNkLSRvYmpmb3JtYXQKKyAgY2FzZSAkdmVyc2lvbl90eXBlIGluCisgICAgZnJlZWJzZC1lbGYqKQorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgICBuZWVkX3ZlcnNpb249bm8KKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgOzsKKyAgICBmcmVlYnNkLSopCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgICAgIG5lZWRfdmVyc2lvbj15ZXMKKyAgICAgIDs7CisgIGVzYWMKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBmcmVlYnNkMi4qKQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICA7OworICBmcmVlYnNkMy5bMDFdKiB8IGZyZWVic2RlbGYzLlswMV0qKQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgOzsKKyAgZnJlZWJzZDMuWzItOV0qIHwgZnJlZWJzZGVsZjMuWzItOV0qIHwgXAorICBmcmVlYnNkNC5bMC01XSB8IGZyZWVic2RlbGY0LlswLTVdIHwgZnJlZWJzZDQuMS4xIHwgZnJlZWJzZGVsZjQuMS4xKQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICA7OworICAqKSAjIGZyb20gNC42IG9uLCBhbmQgRHJhZ29uRmx5CisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICA7OworICBlc2FjCisgIDs7CisKK2dudSopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHttYWpvcn0gJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK2hhaWt1KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBydW50aW1lX2xvYWRlciIKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR7bWFqb3J9ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9zeXN0ZW0vbGliJworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK2hwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorICAjIEdpdmUgYSBzb25hbWUgY29ycmVzcG9uZGluZyB0byB0aGUgbWFqb3IgdmVyc2lvbiBzbyB0aGF0IGRsZC5zbCByZWZ1c2VzIHRvCisgICMgbGluayBhZ2FpbnN0IG90aGVyIHZlcnNpb25zLgorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBjYXNlICRob3N0X2NwdSBpbgorICBpYTY0KikKKyAgICBzaHJleHRfY21kcz0nLnNvJworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNvIgorICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgaWYgdGVzdCAiWCRIUFVYX0lBNjRfTU9ERSIgPSBYMzI7IHRoZW4KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYiIKKyAgICBlbHNlCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXg2NCAvdXNyL2xvY2FsL2xpYi9ocHV4NjQiCisgICAgZmkKKyAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisgICAgOzsKKyAgaHBwYSo2NCopCisgICAgc2hyZXh0X2NtZHM9Jy5zbCcKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSCAjIEhvdyBzaG91bGQgd2UgaGFuZGxlIFNITElCX1BBVEgKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL3BhMjBfNjQgL3Vzci9jY3MvbGliL3BhMjBfNjQiCisgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYworICAgIDs7CisgICopCisgICAgc2hyZXh0X2NtZHM9Jy5zbCcKKyAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgorICAgIHNobGlicGF0aF92YXI9U0hMSUJfUEFUSAorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubyAjICtzIGlzIHJlcXVpcmVkIHRvIGVuYWJsZSBTSExJQl9QQVRICisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICA7OworICBlc2FjCisgICMgSFAtVVggcnVucyAqcmVhbGx5KiBzbG93bHkgdW5sZXNzIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG1vZGUgNTU1LCAuLi4KKyAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNTU1ICRsaWInCisgICMgb3IgZmFpbHMgb3V0cmlnaHQsIHNvIG92ZXJyaWRlIGF0b21pY2FsbHk6CisgIGluc3RhbGxfb3ZlcnJpZGVfbW9kZT01NTUKKyAgOzsKKworaW50ZXJpeFszLTldKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGR5bmFtaWNfbGlua2VyPSdJbnRlcml4IDMueCBsZC5zby4xIChQRSwgbGlrZSBFTEYpJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCitpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICBjYXNlICRob3N0X29zIGluCisgICAgbm9uc3RvcHV4KikgdmVyc2lvbl90eXBlPW5vbnN0b3B1eCA7OworICAgICopCisJaWYgdGVzdCAiJGx0X2N2X3Byb2dfZ251X2xkIiA9IHllczsgdGhlbgorCQl2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisJZWxzZQorCQl2ZXJzaW9uX3R5cGU9aXJpeAorCWZpIDs7CisgIGVzYWMKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgaXJpeDUqIHwgbm9uc3RvcHV4KikKKyAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9CisgICAgOzsKKyAgKikKKyAgICBjYXNlICRMRCBpbiAjIGxpYnRvb2wubTQgd2lsbCBhZGQgb25lIG9mIHRoZXNlIHN3aXRjaGVzIHRvIExECisgICAgKi0zMnwqIi0zMiAifCotbWVsZjMyYnNtaXB8KiItbWVsZjMyYnNtaXAgIikKKyAgICAgIGxpYnN1ZmY9IHNobGlic3VmZj0gbGlibWFnaWM9MzItYml0OzsKKyAgICAqLW4zMnwqIi1uMzIgInwqLW1lbGYzMmJtaXBuMzJ8KiItbWVsZjMyYm1pcG4zMiAiKQorICAgICAgbGlic3VmZj0zMiBzaGxpYnN1ZmY9TjMyIGxpYm1hZ2ljPU4zMjs7CisgICAgKi02NHwqIi02NCAifCotbWVsZjY0Ym1pcHwqIi1tZWxmNjRibWlwICIpCisgICAgICBsaWJzdWZmPTY0IHNobGlic3VmZj02NCBsaWJtYWdpYz02NC1iaXQ7OworICAgICopIGxpYnN1ZmY9IHNobGlic3VmZj0gbGlibWFnaWM9bmV2ZXItbWF0Y2g7OworICAgIGVzYWMKKyAgICA7OworICBlc2FjCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWSR7c2hsaWJzdWZmfV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJHtsaWJzdWZmfSAvbGliJHtsaWJzdWZmfSAvdXNyL2xvY2FsL2xpYiR7bGlic3VmZn0iCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0iCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworIyBObyBzaGFyZWQgbGliIHN1cHBvcnQgZm9yIExpbnV4IG9sZGxkLCBhb3V0LCBvciBjb2ZmLgorbGludXgqb2xkbGQqIHwgbGludXgqYW91dCogfCBsaW51eCpjb2ZmKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKKworIyBUaGlzIG11c3QgYmUgZ2xpYmMvRUxGLgorbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1uICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworCisgICMgU29tZSBiaW51dGlscyBsZCBhcmUgcGF0Y2hlZCB0byBzZXQgRFRfUlVOUEFUSAorICBpZiAke2x0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgIHNhdmVfTERGTEFHUz0kTERGTEFHUworICAgIHNhdmVfbGliZGlyPSRsaWJkaXIKKyAgICBldmFsICJsaWJkaXI9L2Zvbzsgd2w9XCIkbHRfcHJvZ19jb21waWxlcl93bF9DWFhcIjsgXAorCSBMREZMQUdTPVwiXCRMREZMQUdTICRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWFwiIgorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY3h4X3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGlmICAoJE9CSkRVTVAgLXAgY29uZnRlc3QkYWNfZXhlZXh0KSAyPi9kZXYvbnVsbCB8IGdyZXAgIlJVTlBBVEguKiRsaWJkaXIiID4vZGV2L251bGw7IHRoZW4gOgorICBsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCitmaQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgTERGTEFHUz0kc2F2ZV9MREZMQUdTCisgICAgbGliZGlyPSRzYXZlX2xpYmRpcgorCitmaQorCisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD0kbHRfY3Zfc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoCisKKyAgIyBUaGlzIGltcGxpZXMgbm8gZmFzdF9pbnN0YWxsLCB3aGljaCBpcyB1bmFjY2VwdGFibGUuCisgICMgU29tZSByZXdvcmsgd2lsbCBiZSBuZWVkZWQgdG8gYWxsb3cgZm9yIGZhc3RfaW5zdGFsbAorICAjIGJlZm9yZSB0aGlzIGNhbiBiZSBlbmFibGVkLgorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisKKyAgIyBBZGQgQUJJLXNwZWNpZmljIGRpcmVjdG9yaWVzIHRvIHRoZSBzeXN0ZW0gbGlicmFyeSBwYXRoLgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYjY0IC91c3IvbGliNjQgL2xpYiAvdXNyL2xpYiIKKworICAjIEFwcGVuZCBsZC5zby5jb25mIGNvbnRlbnRzIHRvIHRoZSBzZWFyY2ggcGF0aAorICBpZiB0ZXN0IC1mIC9ldGMvbGQuc28uY29uZjsgdGhlbgorICAgIGx0X2xkX2V4dHJhPWBhd2sgJy9eaW5jbHVkZSAvIHsgc3lzdGVtKHNwcmludGYoImNkIC9ldGM7IGNhdCAlcyAyPi9kZXYvbnVsbCIsIFwkMikpOyBza2lwID0gMTsgfSB7IGlmICghc2tpcCkgcHJpbnQgXCQwOyBza2lwID0gMDsgfScgPCAvZXRjL2xkLnNvLmNvbmYgfCAkU0VEIC1lICdzLyMuKi8vOy9eWwkgXSpod2NhcFsJIF0vZDtzL1s6LAldLyAvZztzLz1bXj1dKiQvLztzLz1bXj0gXSogLyAvZztzLyIvL2c7L14kL2QnIHwgdHIgJ1xuJyAnICdgCisgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyAkbHRfbGRfZXh0cmEiCisKKyAgZmkKKworICAjIFdlIHVzZWQgdG8gdGVzdCBmb3IgL2xpYi9sZC5zby4xIGFuZCBkaXNhYmxlIHNoYXJlZCBsaWJyYXJpZXMgb24KKyAgIyBwb3dlcnBjLCBiZWNhdXNlIE1rTGludXggb25seSBzdXBwb3J0ZWQgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHRoZQorICAjIEdOVSBkeW5hbWljIGxpbmtlci4gIFNpbmNlIHRoaXMgd2FzIGJyb2tlbiB3aXRoIGNyb3NzIGNvbXBpbGVycywKKyAgIyBtb3N0IHBvd2VycGMtbGludXggYm94ZXMgc3VwcG9ydCBkeW5hbWljIGxpbmtpbmcgdGhlc2UgZGF5cyBhbmQKKyAgIyBwZW9wbGUgY2FuIGFsd2F5cyAtLWRpc2FibGUtc2hhcmVkLCB0aGUgdGVzdCB3YXMgcmVtb3ZlZCwgYW5kIHdlCisgICMgYXNzdW1lIHRoZSBHTlUvTGludXggZHluYW1pYyBsaW5rZXIgaXMgaW4gdXNlLgorICBkeW5hbWljX2xpbmtlcj0nR05VL0xpbnV4IGxkLnNvJworICA7OworCituZXRic2QqKQorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisgICAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKKyAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIChhLm91dCkgbGQuc28nCisgIGVsc2UKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgZHluYW1pY19saW5rZXI9J05ldEJTRCBsZC5lbGZfc28nCisgIGZpCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCituZXdzb3M2KQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIDs7CisKKypudG8qIHwgKnFueCopCisgIHZlcnNpb25fdHlwZT1xbngKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgZHluYW1pY19saW5rZXI9J2xkcW54LnNvJworICA7OworCitvcGVuYnNkKikKKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiIKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgICMgU29tZSBvbGRlciB2ZXJzaW9ucyBvZiBPcGVuQlNEICgzLjMgYXQgbGVhc3QpICpkbyogbmVlZCB2ZXJzaW9uZWQgbGlicy4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIG9wZW5ic2QzLjMgfCBvcGVuYnNkMy4zLiopCW5lZWRfdmVyc2lvbj15ZXMgOzsKKyAgICAqKQkJCQluZWVkX3ZlcnNpb249bm8gIDs7CisgIGVzYWMKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIG9wZW5ic2QyLls4OV0gfCBvcGVuYnNkMi5bODldLiopCisJc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisJOzsKKyAgICAgICopCisJc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworCTs7CisgICAgICBlc2FjCisgIGVsc2UKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGZpCisgIDs7CisKK29zMiopCisgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisgIHNocmV4dF9jbWRzPSIuZGxsIgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUuYScKKyAgZHluYW1pY19saW5rZXI9J09TLzIgbGQuZXhlJworICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKKyAgOzsKKworb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICB2ZXJzaW9uX3R5cGU9b3NmCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9zaGxpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIvY21wbHJzL2NjIC91c3IvbGliIC91c3IvbG9jYWwvbGliIC92YXIvc2hsaWIiCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIgorICA7OworCityZG9zKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKKworc29sYXJpcyopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICMgbGRkIGNvbXBsYWlucyB1bmxlc3MgbGlicmFyaWVzIGFyZSBleGVjdXRhYmxlCisgIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kICt4ICRsaWInCisgIDs7CisKK3N1bm9zNCopCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi91c3IvZXRjIiBsZGNvbmZpZyAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgZmkKKyAgbmVlZF92ZXJzaW9uPXllcworICA7OworCitzeXN2NCB8IHN5c3Y0LjMqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBjYXNlICRob3N0X3ZlbmRvciBpbgorICAgIHNuaSkKKyAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorICAgICAgOzsKKyAgICBzaWVtZW5zKQorICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICA7OworICAgIG1vdG9yb2xhKQorICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICBuZWVkX3ZlcnNpb249bm8KKyAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvbGliIC91c3IvbGliIC91c3IvY2NzL2xpYicKKyAgICAgIDs7CisgIGVzYWMKKyAgOzsKKworc3lzdjQqTVAqKQorICBpZiB0ZXN0IC1kIC91c3IvbmVjIDt0aGVuCisgICAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9LiR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9LiRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kbWFqb3InCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgZmkKKyAgOzsKKworc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKiB8IHN5c3Y0KnV3MiopCisgIHZlcnNpb25fdHlwZT1mcmVlYnNkLWVsZgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9sb2NhbC9saWIgL3Vzci9nbnUvbGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYiAvbGliJworICBlbHNlCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2Njcy9saWIgL3Vzci9saWInCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgc2NvMy4ydjUqKQorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgL2xpYiIKKwk7OworICAgIGVzYWMKKyAgZmkKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbGliJworICA7OworCit0cGYqKQorICAjIFRQRiBpcyBhIGNyb3NzLXRhcmdldCBvbmx5LiAgUHJlZmVycmVkIGNyb3NzLWhvc3QgPSBHTlUvTGludXguCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKwordXRzNCopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIDs7CisKKyopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7Citlc2FjCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGR5bmFtaWNfbGlua2VyIiA+JjUKKyRhc19lY2hvICIkZHluYW1pY19saW5rZXIiID4mNjsgfQordGVzdCAiJGR5bmFtaWNfbGlua2VyIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KKwordmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IlBBVEggJHNobGlicGF0aF92YXIgJHJ1bnBhdGhfdmFyIgoraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayBHQ0NfRVhFQ19QUkVGSVggQ09NUElMRVJfUEFUSCBMSUJSQVJZX1BBVEgiCitmaQorCitpZiB0ZXN0ICIke2x0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYytzZXR9IiA9IHNldDsgdGhlbgorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiCitmaQoraWYgdGVzdCAiJHtsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYytzZXR9IiA9IHNldDsgdGhlbgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJGx0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjIgorZmkKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXMuLi4gIiA+JjY7IH0KK2hhcmRjb2RlX2FjdGlvbl9DWFg9CitpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFgiIHx8CisgICB0ZXN0IC1uICIkcnVucGF0aF92YXJfQ1hYIiB8fAorICAgdGVzdCAiWCRoYXJkY29kZV9hdXRvbWF0aWNfQ1hYIiA9ICJYeWVzIiA7IHRoZW4KKworICAjIFdlIGNhbiBoYXJkY29kZSBub24tZXhpc3RlbnQgZGlyZWN0b3JpZXMuCisgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3RfQ1hYIiAhPSBubyAmJgorICAgICAjIElmIHRoZSBvbmx5IG1lY2hhbmlzbSB0byBhdm9pZCBoYXJkY29kaW5nIGlzIHNobGlicGF0aF92YXIsIHdlCisgICAgICMgaGF2ZSB0byByZWxpbmssIG90aGVyd2lzZSB3ZSBtaWdodCBsaW5rIHdpdGggYW4gaW5zdGFsbGVkIGxpYnJhcnkKKyAgICAgIyB3aGVuIHdlIHNob3VsZCBiZSBsaW5raW5nIHdpdGggYSB5ZXQtdG8tYmUtaW5zdGFsbGVkIG9uZQorICAgICAjIyB0ZXN0ICIkX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCBDWFgpIiAhPSBubyAmJgorICAgICB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTF9DWFgiICE9IG5vOyB0aGVuCisgICAgIyBMaW5raW5nIGFsd2F5cyBoYXJkY29kZXMgdGhlIHRlbXBvcmFyeSBsaWJyYXJ5IGRpcmVjdG9yeS4KKyAgICBoYXJkY29kZV9hY3Rpb25fQ1hYPXJlbGluaworICBlbHNlCisgICAgIyBXZSBjYW4gbGluayB3aXRob3V0IGhhcmRjb2RpbmcsIGFuZCB3ZSBjYW4gaGFyZGNvZGUgbm9uZXhpc3RpbmcgZGlycy4KKyAgICBoYXJkY29kZV9hY3Rpb25fQ1hYPWltbWVkaWF0ZQorICBmaQorZWxzZQorICAjIFdlIGNhbm5vdCBoYXJkY29kZSBhbnl0aGluZywgb3IgZWxzZSB3ZSBjYW4gb25seSBoYXJkY29kZSBleGlzdGluZworICAjIGRpcmVjdG9yaWVzLgorICBoYXJkY29kZV9hY3Rpb25fQ1hYPXVuc3VwcG9ydGVkCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRoYXJkY29kZV9hY3Rpb25fQ1hYIiA+JjUKKyRhc19lY2hvICIkaGFyZGNvZGVfYWN0aW9uX0NYWCIgPiY2OyB9CisKK2lmIHRlc3QgIiRoYXJkY29kZV9hY3Rpb25fQ1hYIiA9IHJlbGluayB8fAorICAgdGVzdCAiJGluaGVyaXRfcnBhdGhfQ1hYIiA9IHllczsgdGhlbgorICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQKKyAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubworZWxpZiB0ZXN0ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiA9IHllcyB8fAorICAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSBubzsgdGhlbgorICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBuZWNlc3NhcnkKKyAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1uZWVkbGVzcworZmkKKworCisKKworCisKKworICBmaSAjIHRlc3QgLW4gIiRjb21waWxlciIKKworICBDQz0kbHRfc2F2ZV9DQworICBDRkxBR1M9JGx0X3NhdmVfQ0ZMQUdTCisgIExEQ1hYPSRMRAorICBMRD0kbHRfc2F2ZV9MRAorICBHQ0M9JGx0X3NhdmVfR0NDCisgIHdpdGhfZ251X2xkPSRsdF9zYXZlX3dpdGhfZ251X2xkCisgIGx0X2N2X3BhdGhfTERDWFg9JGx0X2N2X3BhdGhfTEQKKyAgbHRfY3ZfcGF0aF9MRD0kbHRfc2F2ZV9wYXRoX0xECisgIGx0X2N2X3Byb2dfZ251X2xkY3h4PSRsdF9jdl9wcm9nX2dudV9sZAorICBsdF9jdl9wcm9nX2dudV9sZD0kbHRfc2F2ZV93aXRoX2dudV9sZAorZmkgIyB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllcworCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKKworCisKKworCisKKworCisKKworCisKKworCisgICAgICAgIGFjX2NvbmZpZ19jb21tYW5kcz0iJGFjX2NvbmZpZ19jb21tYW5kcyBsaWJ0b29sIgorCisKKworCisjIE9ubHkgZXhwYW5kIG9uY2U6CisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlIEMrKyBjb21waWxlciB3b3JrcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBDKysgY29tcGlsZXIgd29ya3MuLi4gIiA+JjY7IH0KK2lmICR7YXZhaGlfY3Zfc3lzX2N4eF93b3Jrcys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICBhY19leHQ9Y3BwCithY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQorCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworaW50IG1haW4oKSB7IHJldHVybiAwOyB9CitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhdmFoaV9jdl9zeXNfY3h4X3dvcmtzPXllcworZWxzZQorICBhdmFoaV9jdl9zeXNfY3h4X3dvcmtzPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGF2YWhpX2N2X3N5c19jeHhfd29ya3MiID4mNQorJGFzX2VjaG8gIiRhdmFoaV9jdl9zeXNfY3h4X3dvcmtzIiA+JjY7IH0KKyBpZiBbICJ4JGF2YWhpX2N2X3N5c19jeHhfd29ya3MiID0gInhubyIgXTsgdGhlbgorICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgJD8gIlRoZSBDKysgY29tcGlsZXIgZG9lcyBub3Qgd29yaworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KKyBmaQorCisKKworCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKK2FjeF9wdGhyZWFkX29rPW5vCisKKyMgV2UgdXNlZCB0byBjaGVjayBmb3IgcHRocmVhZC5oIGZpcnN0LCBidXQgdGhpcyBmYWlscyBpZiBwdGhyZWFkLmgKKyMgcmVxdWlyZXMgc3BlY2lhbCBjb21waWxlciBmbGFncyAoZS5nLiBvbiBUcnVlNjQgb3IgU2VxdWVudCkuCisjIEl0IGdldHMgY2hlY2tlZCBmb3IgaW4gdGhlIGxpbmsgdGVzdCBhbnl3YXkuCisKKyMgRmlyc3Qgb2YgYWxsLCBjaGVjayBpZiB0aGUgdXNlciBoYXMgc2V0IGFueSBvZiB0aGUgUFRIUkVBRF9MSUJTLAorIyBldGNldGVyYSBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIGFuZCBpZiB0aHJlYWRzIGxpbmtpbmcgd29ya3MgdXNpbmcKKyMgdGhlbToKK2lmIHRlc3QgeCIkUFRIUkVBRF9MSUJTJFBUSFJFQURfQ0ZMQUdTIiAhPSB4OyB0aGVuCisgICAgICAgIHNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICAgICAgICBDRkxBR1M9IiRDRkxBR1MgJFBUSFJFQURfQ0ZMQUdTIgorICAgICAgICBzYXZlX0xJQlM9IiRMSUJTIgorICAgICAgICBMSUJTPSIkUFRIUkVBRF9MSUJTICRMSUJTIgorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBwdGhyZWFkX2pvaW4gaW4gTElCUz0kUFRIUkVBRF9MSUJTIHdpdGggQ0ZMQUdTPSRQVEhSRUFEX0NGTEFHUyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgcHRocmVhZF9qb2luIGluIExJQlM9JFBUSFJFQURfTElCUyB3aXRoIENGTEFHUz0kUFRIUkVBRF9DRkxBR1MuLi4gIiA+JjY7IH0KKyAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHB0aHJlYWRfam9pbiAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHB0aHJlYWRfam9pbiAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY3hfcHRocmVhZF9vaz15ZXMKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjeF9wdGhyZWFkX29rIiA+JjUKKyRhc19lY2hvICIkYWN4X3B0aHJlYWRfb2siID4mNjsgfQorICAgICAgICBpZiB0ZXN0IHgiJGFjeF9wdGhyZWFkX29rIiA9IHhubzsgdGhlbgorICAgICAgICAgICAgICAgIFBUSFJFQURfTElCUz0iIgorICAgICAgICAgICAgICAgIFBUSFJFQURfQ0ZMQUdTPSIiCisgICAgICAgIGZpCisgICAgICAgIExJQlM9IiRzYXZlX0xJQlMiCisgICAgICAgIENGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorZmkKKworIyBXZSBtdXN0IGNoZWNrIGZvciB0aGUgdGhyZWFkcyBsaWJyYXJ5IHVuZGVyIGEgbnVtYmVyIG9mIGRpZmZlcmVudAorIyBuYW1lczsgdGhlIG9yZGVyaW5nIGlzIHZlcnkgaW1wb3J0YW50IGJlY2F1c2Ugc29tZSBzeXN0ZW1zCisjIChlLmcuIERFQykgaGF2ZSBib3RoIC1scHRocmVhZCBhbmQgLWxwdGhyZWFkcywgd2hlcmUgb25lIG9mIHRoZQorIyBsaWJyYXJpZXMgaXMgYnJva2VuIChub24tUE9TSVgpLgorCisjIENyZWF0ZSBhIGxpc3Qgb2YgdGhyZWFkIGZsYWdzIHRvIHRyeS4gIEl0ZW1zIHN0YXJ0aW5nIHdpdGggYSAiLSIgYXJlCisjIEMgY29tcGlsZXIgZmxhZ3MsIGFuZCBvdGhlciBpdGVtcyBhcmUgbGlicmFyeSBuYW1lcywgZXhjZXB0IGZvciAibm9uZSIKKyMgd2hpY2ggaW5kaWNhdGVzIHRoYXQgd2UgdHJ5IHdpdGhvdXQgYW55IGZsYWdzIGF0IGFsbCwgYW5kICJwdGhyZWFkLWNvbmZpZyIKKyMgd2hpY2ggaXMgYSBwcm9ncmFtIHJldHVybmluZyB0aGUgZmxhZ3MgZm9yIHRoZSBQdGggZW11bGF0aW9uIGxpYnJhcnkuCisKK2FjeF9wdGhyZWFkX2ZsYWdzPSJwdGhyZWFkcyBub25lIC1LdGhyZWFkIC1rdGhyZWFkIGx0aHJlYWQgLXB0aHJlYWQgLXB0aHJlYWRzIC1tdGhyZWFkcyBwdGhyZWFkIC0tdGhyZWFkLXNhZmUgLW10IHB0aHJlYWQtY29uZmlnIgorCisjIFRoZSBvcmRlcmluZyAqaXMqIChzb21ldGltZXMpIGltcG9ydGFudC4gIFNvbWUgbm90ZXMgb24gdGhlCisjIGluZGl2aWR1YWwgaXRlbXMgZm9sbG93OgorCisjIHB0aHJlYWRzOiBBSVggKG11c3QgY2hlY2sgdGhpcyBiZWZvcmUgLWxwdGhyZWFkKQorIyBub25lOiBpbiBjYXNlIHRocmVhZHMgYXJlIGluIGxpYmM7IHNob3VsZCBiZSB0cmllZCBiZWZvcmUgLUt0aHJlYWQgYW5kCisjICAgICAgIG90aGVyIGNvbXBpbGVyIGZsYWdzIHRvIHByZXZlbnQgY29udGludWFsIGNvbXBpbGVyIHdhcm5pbmdzCisjIC1LdGhyZWFkOiBTZXF1ZW50ICh0aHJlYWRzIGluIGxpYmMsIGJ1dCAtS3RocmVhZCBuZWVkZWQgZm9yIHB0aHJlYWQuaCkKKyMgLWt0aHJlYWQ6IEZyZWVCU0Qga2VybmVsIHRocmVhZHMgKHByZWZlcnJlZCB0byAtcHRocmVhZCBzaW5jZSBTTVAtYWJsZSkKKyMgbHRocmVhZDogTGludXhUaHJlYWRzIHBvcnQgb24gRnJlZUJTRCAoYWxzbyBwcmVmZXJyZWQgdG8gLXB0aHJlYWQpCisjIC1wdGhyZWFkOiBMaW51eC9nY2MgKGtlcm5lbCB0aHJlYWRzKSwgQlNEL2djYyAodXNlcmxhbmQgdGhyZWFkcykKKyMgLXB0aHJlYWRzOiBTb2xhcmlzL2djYworIyAtbXRocmVhZHM6IE1pbmd3MzIvZ2NjLCBMeW54L2djYworIyAtbXQ6IFN1biBXb3Jrc2hvcCBDIChtYXkgb25seSBsaW5rIFN1bk9TIHRocmVhZHMgWy1sdGhyZWFkXSwgYnV0IGl0CisjICAgICAgZG9lc24ndCBodXJ0IHRvIGNoZWNrIHNpbmNlIHRoaXMgc29tZXRpbWVzIGRlZmluZXMgcHRocmVhZHMgdG9vOworIyAgICAgIGFsc28gZGVmaW5lcyAtRF9SRUVOVFJBTlQpCisjICAgICAgLi4uIC1tdCBpcyBhbHNvIHRoZSBwdGhyZWFkcyBmbGFnIGZvciBIUC9hQ0MKKyMgcHRocmVhZDogTGludXgsIGV0Y2V0ZXJhCisjIC0tdGhyZWFkLXNhZmU6IEtBSSBDKysKKyMgcHRocmVhZC1jb25maWc6IHVzZSBwdGhyZWFkLWNvbmZpZyBwcm9ncmFtIChmb3IgR05VIFB0aCBsaWJyYXJ5KQorCitjYXNlICIke2hvc3RfY3B1fS0ke2hvc3Rfb3N9IiBpbgorICAgICAgICAqc29sYXJpcyopCisKKyAgICAgICAgIyBPbiBTb2xhcmlzIChhdCBsZWFzdCwgZm9yIHNvbWUgdmVyc2lvbnMpLCBsaWJjIGNvbnRhaW5zIHN0dWJiZWQKKyAgICAgICAgIyAobm9uLWZ1bmN0aW9uYWwpIHZlcnNpb25zIG9mIHRoZSBwdGhyZWFkcyByb3V0aW5lcywgc28gbGluay1iYXNlZAorICAgICAgICAjIHRlc3RzIHdpbGwgZXJyb25lb3VzbHkgc3VjY2VlZC4gIChXZSBuZWVkIHRvIGxpbmsgd2l0aCAtcHRocmVhZHMvLW10LworICAgICAgICAjIC1scHRocmVhZC4pICAoVGhlIHN0dWJzIGFyZSBtaXNzaW5nIHB0aHJlYWRfY2xlYW51cF9wdXNoLCBvciByYXRoZXIKKyAgICAgICAgIyBhIGZ1bmN0aW9uIGNhbGxlZCBieSB0aGlzIG1hY3JvLCBzbyB3ZSBjb3VsZCBjaGVjayBmb3IgdGhhdCwgYnV0CisgICAgICAgICMgd2hvIGtub3dzIHdoZXRoZXIgdGhleSdsbCBzdHViIHRoYXQgdG9vIGluIGEgZnV0dXJlIGxpYmMuKSAgU28sCisgICAgICAgICMgd2UnbGwganVzdCBsb29rIGZvciAtcHRocmVhZHMgYW5kIC1scHRocmVhZCBmaXJzdDoKKworICAgICAgICBhY3hfcHRocmVhZF9mbGFncz0iLXB0aHJlYWRzIHB0aHJlYWQgLW10IC1wdGhyZWFkICRhY3hfcHRocmVhZF9mbGFncyIKKyAgICAgICAgOzsKK2VzYWMKKworaWYgdGVzdCB4IiRhY3hfcHRocmVhZF9vayIgPSB4bm87IHRoZW4KK2ZvciBmbGFnIGluICRhY3hfcHRocmVhZF9mbGFnczsgZG8KKworICAgICAgICBjYXNlICRmbGFnIGluCisgICAgICAgICAgICAgICAgbm9uZSkKKyAgICAgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgcHRocmVhZHMgd29yayB3aXRob3V0IGFueSBmbGFncyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHB0aHJlYWRzIHdvcmsgd2l0aG91dCBhbnkgZmxhZ3MuLi4gIiA+JjY7IH0KKyAgICAgICAgICAgICAgICA7OworCisgICAgICAgICAgICAgICAgLSopCisgICAgICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHB0aHJlYWRzIHdvcmsgd2l0aCAkZmxhZyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHB0aHJlYWRzIHdvcmsgd2l0aCAkZmxhZy4uLiAiID4mNjsgfQorICAgICAgICAgICAgICAgIFBUSFJFQURfQ0ZMQUdTPSIkZmxhZyIKKyAgICAgICAgICAgICAgICA7OworCisJCXB0aHJlYWQtY29uZmlnKQorCQkjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInB0aHJlYWQtY29uZmlnIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBwdGhyZWFkLWNvbmZpZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWN4X3B0aHJlYWRfY29uZmlnKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjeF9wdGhyZWFkX2NvbmZpZyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY3hfcHRocmVhZF9jb25maWc9IiRhY3hfcHRocmVhZF9jb25maWciICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY3hfcHRocmVhZF9jb25maWc9InllcyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19hY3hfcHRocmVhZF9jb25maWciICYmIGFjX2N2X3Byb2dfYWN4X3B0aHJlYWRfY29uZmlnPSJubyIKK2ZpCitmaQorYWN4X3B0aHJlYWRfY29uZmlnPSRhY19jdl9wcm9nX2FjeF9wdGhyZWFkX2NvbmZpZworaWYgdGVzdCAtbiAiJGFjeF9wdGhyZWFkX2NvbmZpZyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY3hfcHRocmVhZF9jb25maWciID4mNQorJGFzX2VjaG8gIiRhY3hfcHRocmVhZF9jb25maWciID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworCQlpZiB0ZXN0IHgiJGFjeF9wdGhyZWFkX2NvbmZpZyIgPSB4bm87IHRoZW4gY29udGludWU7IGZpCisJCVBUSFJFQURfQ0ZMQUdTPSJgcHRocmVhZC1jb25maWcgLS1jZmxhZ3NgIgorCQlQVEhSRUFEX0xJQlM9ImBwdGhyZWFkLWNvbmZpZyAtLWxkZmxhZ3NgIGBwdGhyZWFkLWNvbmZpZyAtLWxpYnNgIgorCQk7OworCisgICAgICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB0aGUgcHRocmVhZHMgbGlicmFyeSAtbCRmbGFnIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciB0aGUgcHRocmVhZHMgbGlicmFyeSAtbCRmbGFnLi4uICIgPiY2OyB9CisgICAgICAgICAgICAgICAgUFRIUkVBRF9MSUJTPSItbCRmbGFnIgorICAgICAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKworICAgICAgICBzYXZlX0xJQlM9IiRMSUJTIgorICAgICAgICBzYXZlX0NGTEFHUz0iJENGTEFHUyIKKyAgICAgICAgTElCUz0iJFBUSFJFQURfTElCUyAkTElCUyIKKyAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRQVEhSRUFEX0NGTEFHUyIKKworICAgICAgICAjIENoZWNrIGZvciB2YXJpb3VzIGZ1bmN0aW9ucy4gIFdlIG11c3QgaW5jbHVkZSBwdGhyZWFkLmgsCisgICAgICAgICMgc2luY2Ugc29tZSBmdW5jdGlvbnMgbWF5IGJlIG1hY3Jvcy4gIChPbiB0aGUgU2VxdWVudCwgd2UKKyAgICAgICAgIyBuZWVkIGEgc3BlY2lhbCBmbGFnIC1LdGhyZWFkIHRvIG1ha2UgdGhpcyBoZWFkZXIgY29tcGlsZS4pCisgICAgICAgICMgV2UgY2hlY2sgZm9yIHB0aHJlYWRfam9pbiBiZWNhdXNlIGl0IGlzIGluIC1scHRocmVhZCBvbiBJUklYCisgICAgICAgICMgd2hpbGUgcHRocmVhZF9jcmVhdGUgaXMgaW4gbGliYy4gIFdlIGNoZWNrIGZvciBwdGhyZWFkX2F0dHJfaW5pdAorICAgICAgICAjIGR1ZSB0byBERUMgY3JhemluZXNzIHdpdGggLWxwdGhyZWFkcy4gIFdlIGNoZWNrIGZvcgorICAgICAgICAjIHB0aHJlYWRfY2xlYW51cF9wdXNoIGJlY2F1c2UgaXQgaXMgb25lIG9mIHRoZSBmZXcgcHRocmVhZAorICAgICAgICAjIGZ1bmN0aW9ucyBvbiBTb2xhcmlzIHRoYXQgZG9lc24ndCBoYXZlIGEgbm9uLWZ1bmN0aW9uYWwgbGliYyBzdHViLgorICAgICAgICAjIFdlIHRyeSBwdGhyZWFkX2NyZWF0ZSBvbiBnZW5lcmFsIHByaW5jaXBsZXMuCisgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxwdGhyZWFkLmg+CitpbnQKK21haW4gKCkKK3sKK3B0aHJlYWRfdCB0aDsgcHRocmVhZF9qb2luKHRoLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgIHB0aHJlYWRfYXR0cl9pbml0KDApOyBwdGhyZWFkX2NsZWFudXBfcHVzaCgwLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgIHB0aHJlYWRfY3JlYXRlKDAsMCwwLDApOyBwdGhyZWFkX2NsZWFudXBfcG9wKDApOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjeF9wdGhyZWFkX29rPXllcworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisKKyAgICAgICAgTElCUz0iJHNhdmVfTElCUyIKKyAgICAgICAgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCisKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY3hfcHRocmVhZF9vayIgPiY1CiskYXNfZWNobyAiJGFjeF9wdGhyZWFkX29rIiA+JjY7IH0KKyAgICAgICAgaWYgdGVzdCAieCRhY3hfcHRocmVhZF9vayIgPSB4eWVzOyB0aGVuCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGZpCisKKyAgICAgICAgUFRIUkVBRF9MSUJTPSIiCisgICAgICAgIFBUSFJFQURfQ0ZMQUdTPSIiCitkb25lCitmaQorCisjIFZhcmlvdXMgb3RoZXIgY2hlY2tzOgoraWYgdGVzdCAieCRhY3hfcHRocmVhZF9vayIgPSB4eWVzOyB0aGVuCisgICAgICAgIHNhdmVfTElCUz0iJExJQlMiCisgICAgICAgIExJQlM9IiRQVEhSRUFEX0xJQlMgJExJQlMiCisgICAgICAgIHNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICAgICAgICBDRkxBR1M9IiRDRkxBR1MgJFBUSFJFQURfQ0ZMQUdTIgorCisgICAgICAgICMgRGV0ZWN0IEFJWCBsb3NzYWdlOiBKT0lOQUJMRSBhdHRyaWJ1dGUgaXMgY2FsbGVkIFVOREVUQUNIRUQuCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igam9pbmFibGUgcHRocmVhZCBhdHRyaWJ1dGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGpvaW5hYmxlIHB0aHJlYWQgYXR0cmlidXRlLi4uICIgPiY2OyB9CisJYXR0cl9uYW1lPXVua25vd24KKwlmb3IgYXR0ciBpbiBQVEhSRUFEX0NSRUFURV9KT0lOQUJMRSBQVEhSRUFEX0NSRUFURV9VTkRFVEFDSEVEOyBkbworCSAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8cHRocmVhZC5oPgoraW50CittYWluICgpCit7CitpbnQgYXR0cj0kYXR0cjsgcmV0dXJuIGF0dHI7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYXR0cl9uYW1lPSRhdHRyOyBicmVhaworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisJZG9uZQorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGF0dHJfbmFtZSIgPiY1CiskYXNfZWNobyAiJGF0dHJfbmFtZSIgPiY2OyB9CisgICAgICAgIGlmIHRlc3QgIiRhdHRyX25hbWUiICE9IFBUSFJFQURfQ1JFQVRFX0pPSU5BQkxFOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUFRIUkVBRF9DUkVBVEVfSk9JTkFCTEUgJGF0dHJfbmFtZQorX0FDRU9GCisKKyAgICAgICAgZmkKKworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIG1vcmUgc3BlY2lhbCBmbGFncyBhcmUgcmVxdWlyZWQgZm9yIHB0aHJlYWRzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIG1vcmUgc3BlY2lhbCBmbGFncyBhcmUgcmVxdWlyZWQgZm9yIHB0aHJlYWRzLi4uICIgPiY2OyB9CisgICAgICAgIGZsYWc9bm8KKyAgICAgICAgY2FzZSAiJHtob3N0X2NwdX0tJHtob3N0X29zfSIgaW4KKyAgICAgICAgICAgICotYWl4KiB8ICotZnJlZWJzZCogfCAqLWRhcndpbiopIGZsYWc9Ii1EX1RIUkVBRF9TQUZFIjs7CisgICAgICAgICAgICAqc29sYXJpcyogfCAqLW9zZiogfCAqLWhwdXgqKSBmbGFnPSItRF9SRUVOVFJBTlQiOzsKKyAgICAgICAgZXNhYworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHtmbGFnfSIgPiY1CiskYXNfZWNobyAiJHtmbGFnfSIgPiY2OyB9CisgICAgICAgIGlmIHRlc3QgIngkZmxhZyIgIT0geG5vOyB0aGVuCisgICAgICAgICAgICBQVEhSRUFEX0NGTEFHUz0iJGZsYWcgJFBUSFJFQURfQ0ZMQUdTIgorICAgICAgICBmaQorCisgICAgICAgIExJQlM9IiRzYXZlX0xJQlMiCisgICAgICAgIENGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorICAgICAgICAjIE1vcmUgQUlYIGxvc3NhZ2U6IG11c3QgY29tcGlsZSB3aXRoIHhsY19yIG9yIGNjX3IKKwlpZiB0ZXN0IHgiJEdDQyIgIT0geHllczsgdGhlbgorICAgICAgICAgIGZvciBhY19wcm9nIGluIHhsY19yIGNjX3IKK2RvCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19QVEhSRUFEX0NDKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJFBUSFJFQURfQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfUFRIUkVBRF9DQz0iJFBUSFJFQURfQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19QVEhSRUFEX0NDPSIkYWNfcHJvZyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitQVEhSRUFEX0NDPSRhY19jdl9wcm9nX1BUSFJFQURfQ0MKK2lmIHRlc3QgLW4gIiRQVEhSRUFEX0NDIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFBUSFJFQURfQ0MiID4mNQorJGFzX2VjaG8gIiRQVEhSRUFEX0NDIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgdGVzdCAtbiAiJFBUSFJFQURfQ0MiICYmIGJyZWFrCitkb25lCit0ZXN0IC1uICIkUFRIUkVBRF9DQyIgfHwgUFRIUkVBRF9DQz0iJHtDQ30iCisKKyAgICAgICAgZWxzZQorICAgICAgICAgIFBUSFJFQURfQ0M9JENDCisJZmkKKworICAgIyBUaGUgbmV4dCBwYXJ0IHRyaWVzIHRvIGRldGVjdCBHQ0MgaW5jb25zaXN0ZW5jeSB3aXRoIC1zaGFyZWQgb24gc29tZQorICAgIyBhcmNoaXRlY3R1cmVzIGFuZCBzeXN0ZW1zLiBUaGUgcHJvYmxlbSBpcyB0aGF0IGluIGNlcnRhaW4KKyAgICMgY29uZmlndXJhdGlvbnMsIHdoZW4gLXNoYXJlZCBpcyBzcGVjaWZpZWQsIEdDQyAiZm9yZ2V0cyIgdG8KKyAgICMgaW50ZXJuYWxseSB1c2UgdmFyaW91cyBmbGFncyB3aGljaCBhcmUgc3RpbGwgbmVjZXNzYXJ5LgorCisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdG8gY2hlY2sgZm9yIEdDQyBwdGhyZWFkL3NoYXJlZCBpbmNvbnNpc3RlbmNpZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBjaGVjayBmb3IgR0NDIHB0aHJlYWQvc2hhcmVkIGluY29uc2lzdGVuY2llcy4uLiAiID4mNjsgfQorICAgY2hlY2tfaW5jb25zaXN0ZW5jaWVzPXllcworICAgY2FzZSAiJHtob3N0X2NwdX0tJHtob3N0X29zfSIgaW4KKyAgICAgKi1kYXJ3aW4qKSBjaGVja19pbmNvbnNpc3RlbmNpZXM9bm8gOzsKKyAgIGVzYWMKKyAgIGlmIHRlc3QgeCIkR0NDIiAhPSB4eWVzIC1vICJ4JGNoZWNrX2luY29uc2lzdGVuY2llcyIgIT0geHllcyA7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgZWxzZQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworICAgICAgIyBJbiBvcmRlciBub3QgdG8gY3JlYXRlIHNldmVyYWwgbGV2ZWxzIG9mIGluZGVudGF0aW9uLCB3ZSB0ZXN0CisgICAgICAjIHRoZSB2YWx1ZSBvZiAiJG9rIiB1bnRpbCB3ZSBmaW5kIG91dCB0aGUgY3VyZSBvciBydW4gb3V0IG9mCisgICAgICAjIGlkZWFzLgorICAgICAgb2s9Im5vIgorCisgICAgICAjCisgICAgICAjIFByZXBhcmUgdGhlIGZsYWdzCisgICAgICAjCisgICAgICBzYXZlX0NGTEFHUz0iJENGTEFHUyIKKyAgICAgIHNhdmVfTElCUz0iJExJQlMiCisgICAgICBzYXZlX0NDPSIkQ0MiCisgICAgICAjIFRyeSB3aXRoIHRoZSBmbGFncyBkZXRlcm1pbmVkIGJ5IHRoZSBlYXJsaWVyIGNoZWNrcy4KKyAgICAgICMKKyAgICAgICMgLVdsLC16LGRlZnMgZm9yY2VzIGxpbmstdGltZSBzeW1ib2wgcmVzb2x1dGlvbiwgc28gdGhhdCB0aGUKKyAgICAgICMgbGlua2luZyBjaGVja3Mgd2l0aCAtc2hhcmVkIGFjdHVhbGx5IGhhdmUgYW55IHZhbHVlCisgICAgICAjCisgICAgICAjIEZJWE1FOiAtZlBJQyBpcyByZXF1aXJlZCBmb3IgLXNoYXJlZCBvbiBtYW55IGFyY2hpdGVjdHVyZXMsCisgICAgICAjIHNvIHdlIHNwZWNpZnkgaXQgaGVyZSwgYnV0IHRoZSByaWdodCB3YXkgd291bGQgcHJvYmFibHkgYmUgdG8KKyAgICAgICMgcHJvcGVybHkgZGV0ZWN0IHdoZXRoZXIgaXQgaXMgYWN0dWFsbHkgcmVxdWlyZWQuCisgICAgICBDRkxBR1M9Ii1zaGFyZWQgLWZQSUMgLVdsLC16LGRlZnMgJENGTEFHUyAkUFRIUkVBRF9DRkxBR1MiCisgICAgICBMSUJTPSIkUFRIUkVBRF9MSUJTICRMSUJTIgorICAgICAgQ0M9IiRQVEhSRUFEX0NDIgorCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgLXB0aHJlYWQgaXMgc3VmZmljaWVudCB3aXRoIC1zaGFyZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAtcHRocmVhZCBpcyBzdWZmaWNpZW50IHdpdGggLXNoYXJlZC4uLiAiID4mNjsgfQorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHB0aHJlYWQuaD4KK2ludAorbWFpbiAoKQoreworcHRocmVhZF90IHRoOyBwdGhyZWFkX2pvaW4odGgsIDApOworICAgICAgICAgcHRocmVhZF9hdHRyX2luaXQoMCk7IHB0aHJlYWRfY2xlYW51cF9wdXNoKDAsIDApOworICAgICAgICAgcHRocmVhZF9jcmVhdGUoMCwwLDAsMCk7IHB0aHJlYWRfY2xlYW51cF9wb3AoMCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgb2s9eWVzCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworICAgICAgaWYgdGVzdCAieCRvayIgPSB4eWVzOyB0aGVuCisgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgZWxzZQorICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICBmaQorCisgICAgICAjCisgICAgICAjIExpbnV4IGdjYyBvbiBzb21lIGFyY2hpdGVjdHVyZXMgc3VjaCBhcyBtaXBzL21pcHNlbCBmb3JnZXRzCisgICAgICAjIGFib3V0IC1scHRocmVhZAorICAgICAgIworICAgICAgaWYgdGVzdCB4IiRvayIgPSB4bm87IHRoZW4KKyAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAtbHB0aHJlYWQgZml4ZXMgdGhhdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIC1scHRocmVhZCBmaXhlcyB0aGF0Li4uICIgPiY2OyB9CisgICAgICAgICBMSUJTPSItbHB0aHJlYWQgJFBUSFJFQURfTElCUyAkc2F2ZV9MSUJTIgorICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHB0aHJlYWQuaD4KK2ludAorbWFpbiAoKQoreworcHRocmVhZF90IHRoOyBwdGhyZWFkX2pvaW4odGgsIDApOworICAgICAgICAgICAgcHRocmVhZF9hdHRyX2luaXQoMCk7IHB0aHJlYWRfY2xlYW51cF9wdXNoKDAsIDApOworICAgICAgICAgICAgcHRocmVhZF9jcmVhdGUoMCwwLDAsMCk7IHB0aHJlYWRfY2xlYW51cF9wb3AoMCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgb2s9eWVzCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworICAgICAgICAgaWYgdGVzdCAieCRvayIgPSB4eWVzOyB0aGVuCisgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgICAgICAgUFRIUkVBRF9MSUJTPSItbHB0aHJlYWQgJFBUSFJFQURfTElCUyIKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgICAgZmkKKyAgICAgIGZpCisgICAgICAjCisgICAgICAjIEZyZWVCU0QgNC4xMCBnY2MgZm9yZ2V0cyB0byB1c2UgLWxjX3IgaW5zdGVhZCBvZiAtbGMKKyAgICAgICMKKyAgICAgIGlmIHRlc3QgeCIkb2siID0geG5vOyB0aGVuCisgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgLWxjX3IgZml4ZXMgdGhhdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIC1sY19yIGZpeGVzIHRoYXQuLi4gIiA+JjY7IH0KKyAgICAgICAgIExJQlM9Ii1sY19yICRQVEhSRUFEX0xJQlMgJHNhdmVfTElCUyIKKyAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxwdGhyZWFkLmg+CitpbnQKK21haW4gKCkKK3sKK3B0aHJlYWRfdCB0aDsgcHRocmVhZF9qb2luKHRoLCAwKTsKKyAgICAgICAgICAgICAgcHRocmVhZF9hdHRyX2luaXQoMCk7IHB0aHJlYWRfY2xlYW51cF9wdXNoKDAsIDApOworICAgICAgICAgICAgICBwdGhyZWFkX2NyZWF0ZSgwLDAsMCwwKTsgcHRocmVhZF9jbGVhbnVwX3BvcCgwKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBvaz15ZXMKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorCisgICAgICAgICBpZiB0ZXN0ICJ4JG9rIiA9IHh5ZXM7IHRoZW4KKyAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICAgICAgICBQVEhSRUFEX0xJQlM9Ii1sY19yICRQVEhSRUFEX0xJQlMiCisgICAgICAgICBlbHNlCisgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgICAgIGZpCisgICAgICBmaQorICAgICAgaWYgdGVzdCB4IiRvayIgPSB4bm87IHRoZW4KKyAgICAgICAgICMgT0ssIHdlIGhhdmUgcnVuIG91dCBvZiBpZGVhcworICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBJbXBvc3NpYmxlIHRvIGRldGVybWluZSBob3cgdG8gdXNlIHB0aHJlYWRzIHdpdGggc2hhcmVkIGxpYnJhcmllcyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJbXBvc3NpYmxlIHRvIGRldGVybWluZSBob3cgdG8gdXNlIHB0aHJlYWRzIHdpdGggc2hhcmVkIGxpYnJhcmllcyIgPiYyO30KKworICAgICAgICAgIyBzbyBpdCdzIG5vdCBzYWZlIHRvIGFzc3VtZSB0aGF0IHdlIG1heSB1c2UgcHRocmVhZHMKKyAgICAgICAgIGFjeF9wdGhyZWFkX29rPW5vCisgICAgICBmaQorCisgICAgICBDRkxBR1M9IiRzYXZlX0NGTEFHUyIKKyAgICAgIExJQlM9IiRzYXZlX0xJQlMiCisgICAgICBDQz0iJHNhdmVfQ0MiCisgICBmaQorZWxzZQorICAgICAgICBQVEhSRUFEX0NDPSIkQ0MiCitmaQorCisKKworCisKKyMgRmluYWxseSwgZXhlY3V0ZSBBQ1RJT04tSUYtRk9VTkQvQUNUSU9OLUlGLU5PVC1GT1VORDoKK2lmIHRlc3QgeCIkYWN4X3B0aHJlYWRfb2siID0geHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX1BUSFJFQUQgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgICAgOgorZWxzZQorICAgICAgICBhY3hfcHRocmVhZF9vaz1ubworICAgICAgICBhc19mbl9lcnJvciAkPyAiTWlzc2luZyBQT1NJWCBUaHJlYWRzIHN1cHBvcnQiICIkTElORU5PIiA1CitmaQorYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCisKKworIworIyBDaGVjayBmb3IgbmV0bGluay5oCisjCithY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAibGludXgvbmV0bGluay5oIiAiYWNfY3ZfaGVhZGVyX2xpbnV4X25ldGxpbmtfaCIgIgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKworIgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfbGludXhfbmV0bGlua19oIiA9IHh5ZXM7IHRoZW4gOgorICBIQVZFX05FVExJTks9eWVzCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfTkVUTElOSyAvKiovIiA+PmNvbmZkZWZzLmgKKworCitmaQorCisKKworIGlmICB0ZXN0IHgiJEhBVkVfTkVUTElOSyIgPSB4eWVzIDsgdGhlbgorICBIQVZFX05FVExJTktfVFJVRT0KKyAgSEFWRV9ORVRMSU5LX0ZBTFNFPScjJworZWxzZQorICBIQVZFX05FVExJTktfVFJVRT0nIycKKyAgSEFWRV9ORVRMSU5LX0ZBTFNFPQorZmkKKworCisjCisjIENoZWNrIGZvciBuZXQvcm91dGUuaAorIworYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgIm5ldC9yb3V0ZS5oIiAiYWNfY3ZfaGVhZGVyX25ldF9yb3V0ZV9oIiAiCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldC9pZl9kbC5oPgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9uZXRfcm91dGVfaCIgPSB4eWVzOyB0aGVuIDoKKyAgSEFWRV9QRl9ST1VURT15ZXMKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9QRl9ST1VURSAvKiovIiA+PmNvbmZkZWZzLmgKKworCitmaQorCisKKworIGlmICB0ZXN0IHgiJEhBVkVfUEZfUk9VVEUiID0geHllcyA7IHRoZW4KKyAgSEFWRV9QRl9ST1VURV9UUlVFPQorICBIQVZFX1BGX1JPVVRFX0ZBTFNFPScjJworZWxzZQorICBIQVZFX1BGX1JPVVRFX1RSVUU9JyMnCisgIEhBVkVfUEZfUk9VVEVfRkFMU0U9CitmaQorCisKKyMKKyMgQ2hlY2sgZm9yIHN5cy9maWxpby5oOyBuZWVkZWQgZm9yIEZJT05SRUFEIG9uIFNvbGFyaXMKKyMKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICJzeXMvZmlsaW8uaCIgImFjX2N2X2hlYWRlcl9zeXNfZmlsaW9faCIgIgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9zeXNfZmlsaW9faCIgPSB4eWVzOyB0aGVuIDoKKyAgSEFWRV9TWVNfRklMSU9fSD15ZXMKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TWVNfRklMSU9fSCAvKiovIiA+PmNvbmZkZWZzLmgKKworCitmaQorCisKKworIGlmICB0ZXN0IHgiJEhBVkVfU1lTX0ZJTElPX0giID0geHllcyA7IHRoZW4KKyAgSEFWRV9TWVNfRklMSU9fSF9UUlVFPQorICBIQVZFX1NZU19GSUxJT19IX0ZBTFNFPScjJworZWxzZQorICBIQVZFX1NZU19GSUxJT19IX1RSVUU9JyMnCisgIEhBVkVfU1lTX0ZJTElPX0hfRkFMU0U9CitmaQorCisKKyMKKyMgQ2hlY2sgZm9yIHN5cy9zeXNjdGwuaDsgbm90IHByZXNlbnQgb24gU29sYXJpcworIworYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgInN5cy9zeXNjdGwuaCIgImFjX2N2X2hlYWRlcl9zeXNfc3lzY3RsX2giICIKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3N5c19zeXNjdGxfaCIgPSB4eWVzOyB0aGVuIDoKKyAgSEFWRV9TWVNfU1lTQ1RMPXllcworCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX1NZU19TWVNDVExfSCAvKiovIiA+PmNvbmZkZWZzLmgKKworCitmaQorCisKKworIGlmICB0ZXN0IHgiJEhBVkVfU1lTX1NZU0NUTF9IIiA9IHh5ZXMgOyB0aGVuCisgIEhBVkVfU1lTX1NZU0NUTF9IX1RSVUU9CisgIEhBVkVfU1lTX1NZU0NUTF9IX0ZBTFNFPScjJworZWxzZQorICBIQVZFX1NZU19TWVNDVExfSF9UUlVFPScjJworICBIQVZFX1NZU19TWVNDVExfSF9GQUxTRT0KK2ZpCisKKworIworIyBDaGVjayBmb3IgbGlmY29uZiBzdHJ1Y3Q7IG9ubHkgcHJlc2VudCBvbiBTb2xhcmlzCisjCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzdHJ1Y3QgbGlmY29uZiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3RydWN0IGxpZmNvbmYuLi4gIiA+JjY7IH0KK2lmICR7YXZhaGlfY3ZfaGFzX3N0cnVjdF9saWZjb25mKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXQvaWYuaD4KKworaW50CittYWluICgpCit7CitzaXplb2YgKHN0cnVjdCBsaWZjb25mKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhdmFoaV9jdl9oYXNfc3RydWN0X2xpZmNvbmY9eWVzCitlbHNlCisgIGF2YWhpX2N2X2hhc19zdHJ1Y3RfbGlmY29uZj1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhdmFoaV9jdl9oYXNfc3RydWN0X2xpZmNvbmYiID4mNQorJGFzX2VjaG8gIiRhdmFoaV9jdl9oYXNfc3RydWN0X2xpZmNvbmYiID4mNjsgfQoraWYgdGVzdCAkYXZhaGlfY3ZfaGFzX3N0cnVjdF9saWZjb25mID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1RSVUNUX0xJRkNPTkYgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKyMKKyMgQ2hlY2sgZm9yIHN0cnVjdCBpcF9tcmVxbgorIworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3RydWN0IGlwX21yZXFuIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdHJ1Y3QgaXBfbXJlcW4uLi4gIiA+JjY7IH0KK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CitpbnQKK21haW4gKCkKK3sKKworCXN0cnVjdCBpcF9tcmVxbiBtcmVxOworCW1yZXEuaW1yX2FkZHJlc3Muc19hZGRyID0gMDsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKwkjIFllcywgd2UgaGF2ZSBpdC4uLgorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1RSVUNUX0lQX01SRVFOIC8qKi8iID4+Y29uZmRlZnMuaAorCisKK2Vsc2UKKworCSMgV2UnbGwganVzdCBoYXZlIHRvIHRyeSBhbmQgdXNlIHN0cnVjdCBpcF9tcmVxCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3RydWN0IGlwX21yZXEiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN0cnVjdCBpcF9tcmVxLi4uICIgPiY2OyB9CisJY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KK2ludAorbWFpbiAoKQoreworCisJCXN0cnVjdCBpcF9tcmVxIG1yZXE7CisJCW1yZXEuaW1yX2ludGVyZmFjZS5zX2FkZHIgPSAwOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworCQkjIFllcywgd2UgaGF2ZSBpdC4uLgorCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX1NUUlVDVF9JUF9NUkVRIC8qKi8iID4+Y29uZmRlZnMuaAorCisKK2Vsc2UKKworCQkjIE5vIG11bHRpY2FzdCBzdXBwb3J0CisJCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKKyMKKyMgRGV0ZWN0aW5nIHRoZSBsaW51eCBkaXN0cmlidXRpb24gZm9yIHNwZWNpZmljIHRoaW5ncyBsaWtlIGluaXQgc2NyaXB0cy4KKyMKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1kaXN0cm8gd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2Rpc3RybytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfZGlzdHJvOworZmkKKworaWYgdGVzdCAieiR3aXRoX2Rpc3RybyIgPSAieiI7IHRoZW4KKyAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IFRhcmdldCBkaXN0cmlidXRpb24gY2Fubm90IGJlIHJlbGlhYmx5IGRldGVjdGVkIHdoZW4gY3Jvc3MtY29tcGlsaW5nLiBZb3Ugc2hvdWxkIHNwZWNpZnkgaXQgd2l0aCAtLXdpdGgtZGlzdHJvIChzZWUgJDAgLS1oZWxwIGZvciByZWNvZ25pemVkIGRpc3Ryb3MpIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFRhcmdldCBkaXN0cmlidXRpb24gY2Fubm90IGJlIHJlbGlhYmx5IGRldGVjdGVkIHdoZW4gY3Jvc3MtY29tcGlsaW5nLiBZb3Ugc2hvdWxkIHNwZWNpZnkgaXQgd2l0aCAtLXdpdGgtZGlzdHJvIChzZWUgJDAgLS1oZWxwIGZvciByZWNvZ25pemVkIGRpc3Ryb3MpIiA+JjI7fQorICAgIGVsc2UKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgL2V0Yy9sZnMtcmVsZWFzZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgL2V0Yy9sZnMtcmVsZWFzZS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9maWxlX19ldGNfbGZzX3JlbGVhc2UrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyAmJgorICBhc19mbl9lcnJvciAkPyAiY2Fubm90IGNoZWNrIGZvciBmaWxlIGV4aXN0ZW5jZSB3aGVuIGNyb3NzIGNvbXBpbGluZyIgIiRMSU5FTk8iIDUKK2lmIHRlc3QgLXIgIi9ldGMvbGZzLXJlbGVhc2UiOyB0aGVuCisgIGFjX2N2X2ZpbGVfX2V0Y19sZnNfcmVsZWFzZT15ZXMKK2Vsc2UKKyAgYWNfY3ZfZmlsZV9fZXRjX2xmc19yZWxlYXNlPW5vCitmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfZmlsZV9fZXRjX2xmc19yZWxlYXNlIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfZmlsZV9fZXRjX2xmc19yZWxlYXNlIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfZmlsZV9fZXRjX2xmc19yZWxlYXNlIiA9IHh5ZXM7IHRoZW4gOgorICB3aXRoX2Rpc3Rybz0ibGZzIgorZmkKKworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAvZXRjL1N1U0UtcmVsZWFzZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgL2V0Yy9TdVNFLXJlbGVhc2UuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfZmlsZV9fZXRjX1N1U0VfcmVsZWFzZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzICYmCisgIGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY2hlY2sgZm9yIGZpbGUgZXhpc3RlbmNlIHdoZW4gY3Jvc3MgY29tcGlsaW5nIiAiJExJTkVOTyIgNQoraWYgdGVzdCAtciAiL2V0Yy9TdVNFLXJlbGVhc2UiOyB0aGVuCisgIGFjX2N2X2ZpbGVfX2V0Y19TdVNFX3JlbGVhc2U9eWVzCitlbHNlCisgIGFjX2N2X2ZpbGVfX2V0Y19TdVNFX3JlbGVhc2U9bm8KK2ZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9maWxlX19ldGNfU3VTRV9yZWxlYXNlIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfZmlsZV9fZXRjX1N1U0VfcmVsZWFzZSIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2ZpbGVfX2V0Y19TdVNFX3JlbGVhc2UiID0geHllczsgdGhlbiA6CisgIHdpdGhfZGlzdHJvPSJzdXNlIgorZmkKKworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAvZXRjL2dlbnRvby1yZWxlYXNlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAvZXRjL2dlbnRvby1yZWxlYXNlLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2ZpbGVfX2V0Y19nZW50b29fcmVsZWFzZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzICYmCisgIGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY2hlY2sgZm9yIGZpbGUgZXhpc3RlbmNlIHdoZW4gY3Jvc3MgY29tcGlsaW5nIiAiJExJTkVOTyIgNQoraWYgdGVzdCAtciAiL2V0Yy9nZW50b28tcmVsZWFzZSI7IHRoZW4KKyAgYWNfY3ZfZmlsZV9fZXRjX2dlbnRvb19yZWxlYXNlPXllcworZWxzZQorICBhY19jdl9maWxlX19ldGNfZ2VudG9vX3JlbGVhc2U9bm8KK2ZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9maWxlX19ldGNfZ2VudG9vX3JlbGVhc2UiID4mNQorJGFzX2VjaG8gIiRhY19jdl9maWxlX19ldGNfZ2VudG9vX3JlbGVhc2UiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9maWxlX19ldGNfZ2VudG9vX3JlbGVhc2UiID0geHllczsgdGhlbiA6CisgIHdpdGhfZGlzdHJvPSJnZW50b28iCitmaQorCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIC9ldGMvYXJjaC1yZWxlYXNlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAvZXRjL2FyY2gtcmVsZWFzZS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9maWxlX19ldGNfYXJjaF9yZWxlYXNlKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXMgJiYKKyAgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBjaGVjayBmb3IgZmlsZSBleGlzdGVuY2Ugd2hlbiBjcm9zcyBjb21waWxpbmciICIkTElORU5PIiA1CitpZiB0ZXN0IC1yICIvZXRjL2FyY2gtcmVsZWFzZSI7IHRoZW4KKyAgYWNfY3ZfZmlsZV9fZXRjX2FyY2hfcmVsZWFzZT15ZXMKK2Vsc2UKKyAgYWNfY3ZfZmlsZV9fZXRjX2FyY2hfcmVsZWFzZT1ubworZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2ZpbGVfX2V0Y19hcmNoX3JlbGVhc2UiID4mNQorJGFzX2VjaG8gIiRhY19jdl9maWxlX19ldGNfYXJjaF9yZWxlYXNlIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfZmlsZV9fZXRjX2FyY2hfcmVsZWFzZSIgPSB4eWVzOyB0aGVuIDoKKyAgd2l0aF9kaXN0cm89ImFyY2hsaW51eCIKK2ZpCisKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgL2V0Yy9kZWJpYW5fdmVyc2lvbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgL2V0Yy9kZWJpYW5fdmVyc2lvbi4uLiAiID4mNjsgfQoraWYgJHthY19jdl9maWxlX19ldGNfZGViaWFuX3ZlcnNpb24rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyAmJgorICBhc19mbl9lcnJvciAkPyAiY2Fubm90IGNoZWNrIGZvciBmaWxlIGV4aXN0ZW5jZSB3aGVuIGNyb3NzIGNvbXBpbGluZyIgIiRMSU5FTk8iIDUKK2lmIHRlc3QgLXIgIi9ldGMvZGViaWFuX3ZlcnNpb24iOyB0aGVuCisgIGFjX2N2X2ZpbGVfX2V0Y19kZWJpYW5fdmVyc2lvbj15ZXMKK2Vsc2UKKyAgYWNfY3ZfZmlsZV9fZXRjX2RlYmlhbl92ZXJzaW9uPW5vCitmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfZmlsZV9fZXRjX2RlYmlhbl92ZXJzaW9uIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfZmlsZV9fZXRjX2RlYmlhbl92ZXJzaW9uIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfZmlsZV9fZXRjX2RlYmlhbl92ZXJzaW9uIiA9IHh5ZXM7IHRoZW4gOgorICB3aXRoX2Rpc3Rybz0iZGViaWFuIgorZmkKKworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAvZXRjL3JlZGhhdC1yZWxlYXNlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAvZXRjL3JlZGhhdC1yZWxlYXNlLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2ZpbGVfX2V0Y19yZWRoYXRfcmVsZWFzZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzICYmCisgIGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY2hlY2sgZm9yIGZpbGUgZXhpc3RlbmNlIHdoZW4gY3Jvc3MgY29tcGlsaW5nIiAiJExJTkVOTyIgNQoraWYgdGVzdCAtciAiL2V0Yy9yZWRoYXQtcmVsZWFzZSI7IHRoZW4KKyAgYWNfY3ZfZmlsZV9fZXRjX3JlZGhhdF9yZWxlYXNlPXllcworZWxzZQorICBhY19jdl9maWxlX19ldGNfcmVkaGF0X3JlbGVhc2U9bm8KK2ZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9maWxlX19ldGNfcmVkaGF0X3JlbGVhc2UiID4mNQorJGFzX2VjaG8gIiRhY19jdl9maWxlX19ldGNfcmVkaGF0X3JlbGVhc2UiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9maWxlX19ldGNfcmVkaGF0X3JlbGVhc2UiID0geHllczsgdGhlbiA6CisgIHdpdGhfZGlzdHJvPSJmZWRvcmEiCitmaQorCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIC9ldGMvbWFuZHJpdmEtcmVsZWFzZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgL2V0Yy9tYW5kcml2YS1yZWxlYXNlLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2ZpbGVfX2V0Y19tYW5kcml2YV9yZWxlYXNlKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXMgJiYKKyAgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBjaGVjayBmb3IgZmlsZSBleGlzdGVuY2Ugd2hlbiBjcm9zcyBjb21waWxpbmciICIkTElORU5PIiA1CitpZiB0ZXN0IC1yICIvZXRjL21hbmRyaXZhLXJlbGVhc2UiOyB0aGVuCisgIGFjX2N2X2ZpbGVfX2V0Y19tYW5kcml2YV9yZWxlYXNlPXllcworZWxzZQorICBhY19jdl9maWxlX19ldGNfbWFuZHJpdmFfcmVsZWFzZT1ubworZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2ZpbGVfX2V0Y19tYW5kcml2YV9yZWxlYXNlIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfZmlsZV9fZXRjX21hbmRyaXZhX3JlbGVhc2UiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9maWxlX19ldGNfbWFuZHJpdmFfcmVsZWFzZSIgPSB4eWVzOyB0aGVuIDoKKyAgd2l0aF9kaXN0cm89Im1hbmRyaXZhIgorZmkKKworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAvZXRjL3NsYWNrd2FyZS12ZXJzaW9uIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAvZXRjL3NsYWNrd2FyZS12ZXJzaW9uLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2ZpbGVfX2V0Y19zbGFja3dhcmVfdmVyc2lvbis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzICYmCisgIGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY2hlY2sgZm9yIGZpbGUgZXhpc3RlbmNlIHdoZW4gY3Jvc3MgY29tcGlsaW5nIiAiJExJTkVOTyIgNQoraWYgdGVzdCAtciAiL2V0Yy9zbGFja3dhcmUtdmVyc2lvbiI7IHRoZW4KKyAgYWNfY3ZfZmlsZV9fZXRjX3NsYWNrd2FyZV92ZXJzaW9uPXllcworZWxzZQorICBhY19jdl9maWxlX19ldGNfc2xhY2t3YXJlX3ZlcnNpb249bm8KK2ZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9maWxlX19ldGNfc2xhY2t3YXJlX3ZlcnNpb24iID4mNQorJGFzX2VjaG8gIiRhY19jdl9maWxlX19ldGNfc2xhY2t3YXJlX3ZlcnNpb24iID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9maWxlX19ldGNfc2xhY2t3YXJlX3ZlcnNpb24iID0geHllczsgdGhlbiA6CisgIHdpdGhfZGlzdHJvPSJzbGFja3dhcmUiCitmaQorCisgICAgZmkKKyAgICBpZiB0ZXN0ICJ6JHdpdGhfZGlzdHJvIiA9ICJ6IjsgdGhlbgorICAgICAgICB3aXRoX2Rpc3Rybz1gdW5hbWUgLXNgCisgICAgZmkKK2ZpCit3aXRoX2Rpc3Rybz1gZWNobyAke3dpdGhfZGlzdHJvfSB8IHRyICdbOnVwcGVyOl0nICdbOmxvd2VyOl0nIGAKKworY2FzZSAkd2l0aF9kaXN0cm8gaW4KKyAgICBsZnN8ZGViaWFufGdlbnRvb3xhcmNobGludXh8c3VzZXxmZWRvcmF8bWFuZHJpdmF8ZGFyd2lufGZyZWVic2R8c2xhY2t3YXJlfG5vbmUpCisgICAgIDs7CisgICAgbmV0YnNkKQorICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IFlvdXIgZGlzdHJpYnV0aW9uICgke3dpdGhfZGlzdHJvfSkgaXMgc3VwcG9ydGVkIGJ1dCBubyBpbml0IHNjcmlwdCBleGlzdCB5ZXQhIChwYXRjaGVzIHdlbGNvbWUpIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFlvdXIgZGlzdHJpYnV0aW9uICgke3dpdGhfZGlzdHJvfSkgaXMgc3VwcG9ydGVkIGJ1dCBubyBpbml0IHNjcmlwdCBleGlzdCB5ZXQhIChwYXRjaGVzIHdlbGNvbWUpIiA+JjI7fQorICAgICA7OworICAgIGxpbnV4KQorICAgICBhc19mbl9lcnJvciAkPyAiTGludXggZGlzdHJpYnV0aW9uIGF1dG9kZXRlY3Rpb24gZmFpbGVkLCB5b3UgbXVzdCBzcGVjaWZ5IHRoZSBkaXN0cmlidXRpb24gdG8gdGFyZ2V0IHVzaW5nIC0td2l0aC1kaXN0cm89RElTVFJPLCBzZXQgRElTVFJPIHRvIG5vbmUgaWYgeW91ciBkaXN0cmlidXRpb24gaXMgbm90IHN1cHBvcnRlZC4iICIkTElORU5PIiA1CisgICAgIDs7CisgICAgKikKKyAgICAgYXNfZm5fZXJyb3IgJD8gIllvdXIgZGlzdHJpYnV0aW9uICgke3dpdGhfZGlzdHJvfSkgaXMgbm90IHlldCBzdXBwb3J0ZWQsIGluaXQgc2NyaXB0cyBhbmQgRC1CdXMgY29uZmlndXJhdGlvbiB3aWxsIG5vdCBiZSBpbnN0YWxsZWQhIChwYXRjaGVzIHdlbGNvbWUpLCB5b3UgY2FuIHNwZWNpZnkgLS13aXRoLWRpc3Rybz1ub25lIHRvIHNraXAgdGhpcyBjaGVjayIgIiRMSU5FTk8iIDUKKyAgICAgOzsKK2VzYWMKKworIGlmIHRlc3QgeCIkd2l0aF9kaXN0cm8iID0geGxmczsgdGhlbgorICBUQVJHRVRfTEZTX1RSVUU9CisgIFRBUkdFVF9MRlNfRkFMU0U9JyMnCitlbHNlCisgIFRBUkdFVF9MRlNfVFJVRT0nIycKKyAgVEFSR0VUX0xGU19GQUxTRT0KK2ZpCisKKyBpZiB0ZXN0IHgiJHdpdGhfZGlzdHJvIiA9IHhzdXNlOyB0aGVuCisgIFRBUkdFVF9TVVNFX1RSVUU9CisgIFRBUkdFVF9TVVNFX0ZBTFNFPScjJworZWxzZQorICBUQVJHRVRfU1VTRV9UUlVFPScjJworICBUQVJHRVRfU1VTRV9GQUxTRT0KK2ZpCisKKyBpZiB0ZXN0IHgiJHdpdGhfZGlzdHJvIiA9IHhnZW50b287IHRoZW4KKyAgVEFSR0VUX0dFTlRPT19UUlVFPQorICBUQVJHRVRfR0VOVE9PX0ZBTFNFPScjJworZWxzZQorICBUQVJHRVRfR0VOVE9PX1RSVUU9JyMnCisgIFRBUkdFVF9HRU5UT09fRkFMU0U9CitmaQorCisgaWYgdGVzdCB4IiR3aXRoX2Rpc3RybyIgPSB4ZGViaWFuOyB0aGVuCisgIFRBUkdFVF9ERUJJQU5fVFJVRT0KKyAgVEFSR0VUX0RFQklBTl9GQUxTRT0nIycKK2Vsc2UKKyAgVEFSR0VUX0RFQklBTl9UUlVFPScjJworICBUQVJHRVRfREVCSUFOX0ZBTFNFPQorZmkKKworIGlmIHRlc3QgeCIkd2l0aF9kaXN0cm8iID0geGFyY2hsaW51eDsgdGhlbgorICBUQVJHRVRfQVJDSExJTlVYX1RSVUU9CisgIFRBUkdFVF9BUkNITElOVVhfRkFMU0U9JyMnCitlbHNlCisgIFRBUkdFVF9BUkNITElOVVhfVFJVRT0nIycKKyAgVEFSR0VUX0FSQ0hMSU5VWF9GQUxTRT0KK2ZpCisKKyBpZiB0ZXN0IHgiJHdpdGhfZGlzdHJvIiA9IHhmZWRvcmE7IHRoZW4KKyAgVEFSR0VUX0ZFRE9SQV9UUlVFPQorICBUQVJHRVRfRkVET1JBX0ZBTFNFPScjJworZWxzZQorICBUQVJHRVRfRkVET1JBX1RSVUU9JyMnCisgIFRBUkdFVF9GRURPUkFfRkFMU0U9CitmaQorCisgaWYgdGVzdCB4IiR3aXRoX2Rpc3RybyIgPSB4bWFuZHJpdmE7IHRoZW4KKyAgVEFSR0VUX01BTkRSSVZBX1RSVUU9CisgIFRBUkdFVF9NQU5EUklWQV9GQUxTRT0nIycKK2Vsc2UKKyAgVEFSR0VUX01BTkRSSVZBX1RSVUU9JyMnCisgIFRBUkdFVF9NQU5EUklWQV9GQUxTRT0KK2ZpCisKKyBpZiB0ZXN0IHgiJHdpdGhfZGlzdHJvIiA9IHhkYXJ3aW47IHRoZW4KKyAgVEFSR0VUX0RBUldJTl9UUlVFPQorICBUQVJHRVRfREFSV0lOX0ZBTFNFPScjJworZWxzZQorICBUQVJHRVRfREFSV0lOX1RSVUU9JyMnCisgIFRBUkdFVF9EQVJXSU5fRkFMU0U9CitmaQorCisgaWYgdGVzdCB4IiR3aXRoX2Rpc3RybyIgPSB4bmV0YnNkOyB0aGVuCisgIFRBUkdFVF9ORVRCU0RfVFJVRT0KKyAgVEFSR0VUX05FVEJTRF9GQUxTRT0nIycKK2Vsc2UKKyAgVEFSR0VUX05FVEJTRF9UUlVFPScjJworICBUQVJHRVRfTkVUQlNEX0ZBTFNFPQorZmkKKworIGlmIHRlc3QgeCIkd2l0aF9kaXN0cm8iID0geGZyZWVic2Q7IHRoZW4KKyAgVEFSR0VUX0ZSRUVCU0RfVFJVRT0KKyAgVEFSR0VUX0ZSRUVCU0RfRkFMU0U9JyMnCitlbHNlCisgIFRBUkdFVF9GUkVFQlNEX1RSVUU9JyMnCisgIFRBUkdFVF9GUkVFQlNEX0ZBTFNFPQorZmkKKworIGlmIHRlc3QgeCIkd2l0aF9kaXN0cm8iID0geHNsYWNrd2FyZTsgdGhlbgorICBUQVJHRVRfU0xBQ0tXQVJFX1RSVUU9CisgIFRBUkdFVF9TTEFDS1dBUkVfRkFMU0U9JyMnCitlbHNlCisgIFRBUkdFVF9TTEFDS1dBUkVfVFJVRT0nIycKKyAgVEFSR0VUX1NMQUNLV0FSRV9GQUxTRT0KK2ZpCisKKwordGVzdF9nY2NfZmxhZygpIHsKKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCitpbnQgbWFpbigpIHt9CitfQUNFT0YKKyAgICAkQ0MgLWMgY29uZnRlc3QuYyAkQ0ZMQUdTICRAID4gL2Rldi9udWxsIDI+IC9kZXYvbnVsbAorICAgIHJldD0kPworICAgIHJtIC1mIGNvbmZ0ZXN0Lm8KKyAgICByZXR1cm4gJHJldAorfQorCisjIElmIHVzaW5nIEdDQyBzcGVjaWZ5IHNvbWUgYWRkaXRpb25hbCBwYXJhbWV0ZXJzCitpZiB0ZXN0ICJ4JEdDQyIgPSAieHllcyIgOyB0aGVuCisKKyAgICBERVNJUkVEX0ZMQUdTPSItV2FsbCAtVyAtV2V4dHJhIC1wZWRhbnRpYyAtcGlwZSAtV2Zvcm1hdCAtV29sZC1zdHlsZS1kZWZpbml0aW9uIC1XZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50IC1XZmxvYXQtZXF1YWwgLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyAtV21pc3NpbmctcHJvdG90eXBlcyAtV3N0cmljdC1wcm90b3R5cGVzIC1XcmVkdW5kYW50LWRlY2xzIC1XbWlzc2luZy1ub3JldHVybiAtV3NoYWRvdyAtV2VuZGlmLWxhYmVscyAtV3BvaW50ZXItYXJpdGggLVdiYWQtZnVuY3Rpb24tY2FzdCAtV2Nhc3QtcXVhbCAtV2Nhc3QtYWxpZ24gLVd3cml0ZS1zdHJpbmdzIC1mZGlhZ25vc3RpY3Mtc2hvdy1vcHRpb24gLVduby1jYXN0LXF1YWwgLWZuby1zdHJpY3QtYWxpYXNpbmciCisKKyAgICBpZiB0ZXN0ICJ4JEhBVkVfTkVUTElOSyIgPSAieHllcyIgOyB0aGVuCisgICAgICAgICMgVGVzdCB3aGV0aGVyIHJ0bmV0bGluay5oIGNhbiBiZSBpbmNsdWRlZCB3aGVuIGNvbXBpbGVkIHdpdGggLXN0ZD1jOTkKKyAgICAgICAgIyBzb21lIGRpc3RyaWJ1dGlvbnMgKGUuZy4gYXJjaGxpbnV4KSBoYXZlIGJyb2tlbiBoZWFkZXJzIHRoYXQgZG9udAorICAgICAgICAjIGRlZmluZSBfX3U2NCB3aXRoIC1zdGQ9Yzk5CisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgY2hlY2tpbmcgd2hldGhlciBydG5ldGxpbmsuaCBjYW4gYmUgaW5jbHVkZWQgd2l0aCAtc3RkPWM5OSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBjaGVja2luZyB3aGV0aGVyIHJ0bmV0bGluay5oIGNhbiBiZSBpbmNsdWRlZCB3aXRoIC1zdGQ9Yzk5Li4uICIgPiY2OyB9CisgICAgICAgIE9MRENGTEFHUz0iJENGTEFHUyIKKyAgICAgICAgQ0ZMQUdTPSItc3RkPWM5OSIKKyAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgoraW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICB1c2Vfc3RkYzk5PXllcworZWxzZQorICB1c2Vfc3RkYzk5PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKKyAgICAgICAgaWYgdGVzdCB4IiR1c2Vfc3RkYzk5IiA9IHh5ZXM7IHRoZW4KKyAgICAgICAgICAgIERFU0lSRURfRkxBR1M9Ii1zdGQ9Yzk5ICRERVNJUkVEX0ZMQUdTIgorICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICAgIGZpCisKKyAgICAgICAgQ0ZMQUdTPSIkT0xEQ0ZMQUdTIgorICAgIGVsc2UKKyAgICAgICAgREVTSVJFRF9GTEFHUz0iLXN0ZD1jOTkgJERFU0lSRURfRkxBR1MiCisgICAgZmkKKworICAgIGZvciBmbGFnIGluICRERVNJUkVEX0ZMQUdTIDsgZG8KKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzICRmbGFnIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgJGZsYWcuLi4gIiA+JjY7IH0KKyAgICAgICAgaWYgdGVzdF9nY2NfZmxhZyAkZmxhZyA7IHRoZW4KKyAgICAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRmbGFnIgorICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgICBlbHNlCisgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgICBmaQorICAgIGRvbmUKK2ZpCisKKyMgQ2hlY2tzIGZvciBoZWFkZXIgZmlsZXMuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2hlYWRlcl9zdGRjKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGZsb2F0Lmg+CisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9eWVzCitlbHNlCisgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisgICMgU3VuT1MgNC54IHN0cmluZy5oIGRvZXMgbm90IGRlY2xhcmUgbWVtKiwgY29udHJhcnkgdG8gQU5TSS4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0cmluZy5oPgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJtZW1jaHIiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKworZmkKKworaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgIyBJU0MgMi4wLjIgc3RkbGliLmggZG9lcyBub3QgZGVjbGFyZSBmcmVlLCBjb250cmFyeSB0byBBTlNJLgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RkbGliLmg+CisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgImZyZWUiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKworZmkKKworaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgIyAvYmluL2NjIGluIElyaXgtNC4wLjUgZ2V0cyBub24tQU5TSSBjdHlwZSBtYWNyb3MgdW5sZXNzIHVzaW5nIC1hbnNpLgorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIDoKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaWYgKCgnICcgJiAweDBGRikgPT0gMHgwMjApCisjIGRlZmluZSBJU0xPV0VSKGMpICgnYScgPD0gKGMpICYmIChjKSA8PSAneicpCisjIGRlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gJ0EnICsgKChjKSAtICdhJykgOiAoYykpCisjZWxzZQorIyBkZWZpbmUgSVNMT1dFUihjKSBcCisJCSAgICgoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ2knKSBcCisJCSAgICAgfHwgKCdqJyA8PSAoYykgJiYgKGMpIDw9ICdyJykgXAorCQkgICAgIHx8ICgncycgPD0gKGMpICYmIChjKSA8PSAneicpKQorIyBkZWZpbmUgVE9VUFBFUihjKSAoSVNMT1dFUihjKSA/ICgoYykgfCAweDQwKSA6IChjKSkKKyNlbmRpZgorCisjZGVmaW5lIFhPUihlLCBmKSAoKChlKSAmJiAhKGYpKSB8fCAoIShlKSAmJiAoZikpKQoraW50CittYWluICgpCit7CisgIGludCBpOworICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCisgICAgaWYgKFhPUiAoaXNsb3dlciAoaSksIElTTE9XRVIgKGkpKQorCXx8IHRvdXBwZXIgKGkpICE9IFRPVVBQRVIgKGkpKQorICAgICAgcmV0dXJuIDI7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKworZWxzZQorICBhY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKK2ZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfc3RkYyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2hlYWRlcl9zdGRjIiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIFNURENfSEVBREVSUyAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworZm9yIGFjX2hlYWRlciBpbiBhcnBhL2luZXQuaCBmY250bC5oIGludHR5cGVzLmggbGltaXRzLmggbmV0aW5ldC9pbi5oIHN0ZGxpYi5oIHN0cmluZy5oIHN5cy9pb2N0bC5oIHN5cy9zb2NrZXQuaCBzeXMvdGltZS5oIHVuaXN0ZC5oIG5ldGRiLmggc3lzbG9nLmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3RkYm9vbC5oIHRoYXQgY29uZm9ybXMgdG8gQzk5IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdGRib29sLmggdGhhdCBjb25mb3JtcyB0byBDOTkuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpZm5kZWYgYm9vbAorICJlcnJvcjogYm9vbCBpcyBub3QgZGVmaW5lZCIKKyNlbmRpZgorI2lmbmRlZiBmYWxzZQorICJlcnJvcjogZmFsc2UgaXMgbm90IGRlZmluZWQiCisjZW5kaWYKKyNpZiBmYWxzZQorICJlcnJvcjogZmFsc2UgaXMgbm90IDAiCisjZW5kaWYKKyNpZm5kZWYgdHJ1ZQorICJlcnJvcjogdHJ1ZSBpcyBub3QgZGVmaW5lZCIKKyNlbmRpZgorI2lmIHRydWUgIT0gMQorICJlcnJvcjogdHJ1ZSBpcyBub3QgMSIKKyNlbmRpZgorI2lmbmRlZiBfX2Jvb2xfdHJ1ZV9mYWxzZV9hcmVfZGVmaW5lZAorICJlcnJvcjogX19ib29sX3RydWVfZmFsc2VfYXJlX2RlZmluZWQgaXMgbm90IGRlZmluZWQiCisjZW5kaWYKKworCXN0cnVjdCBzIHsgX0Jvb2wgczogMTsgX0Jvb2wgdDsgfSBzOworCisJY2hhciBhW3RydWUgPT0gMSA/IDEgOiAtMV07CisJY2hhciBiW2ZhbHNlID09IDAgPyAxIDogLTFdOworCWNoYXIgY1tfX2Jvb2xfdHJ1ZV9mYWxzZV9hcmVfZGVmaW5lZCA9PSAxID8gMSA6IC0xXTsKKwljaGFyIGRbKGJvb2wpIDAuNSA9PSB0cnVlID8gMSA6IC0xXTsKKwkvKiBTZWUgYm9keSBvZiBtYWluIHByb2dyYW0gZm9yICdlJy4gICovCisJY2hhciBmWyhfQm9vbCkgMC4wID09IGZhbHNlID8gMSA6IC0xXTsKKwljaGFyIGdbdHJ1ZV07CisJY2hhciBoW3NpemVvZiAoX0Jvb2wpXTsKKwljaGFyIGlbc2l6ZW9mIHMudF07CisJZW51bSB7IGogPSBmYWxzZSwgayA9IHRydWUsIGwgPSBmYWxzZSAqIHRydWUsIG0gPSB0cnVlICogMjU2IH07CisJLyogVGhlIGZvbGxvd2luZyBmYWlscyBmb3IKKwkgICBIUCBhQysrL0FOU0kgQyBCMzkxMEIgQS4wNS41NSBbRGVjIDA0IDIwMDNdLiAqLworCV9Cb29sIG5bbV07CisJY2hhciBvW3NpemVvZiBuID09IG0gKiBzaXplb2YgblswXSA/IDEgOiAtMV07CisJY2hhciBwWy0xIC0gKF9Cb29sKSAwIDwgMCAmJiAtMSAtIChib29sKSAwIDwgMCA/IDEgOiAtMV07CisJLyogQ2F0Y2ggYSBidWcgaW4gYW4gSFAtVVggQyBjb21waWxlci4gIFNlZQorCSAgIGh0dHA6Ly9nY2MuZ251Lm9yZy9tbC9nY2MtcGF0Y2hlcy8yMDAzLTEyL21zZzAyMzAzLmh0bWwKKwkgICBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWNvcmV1dGlscy8yMDA1LTExL21zZzAwMTYxLmh0bWwKKwkgKi8KKwlfQm9vbCBxID0gdHJ1ZTsKKwlfQm9vbCAqcHEgPSAmcTsKKworaW50CittYWluICgpCit7CisKKwlib29sIGUgPSAmczsKKwkqcHEgfD0gcTsKKwkqcHEgfD0gISBxOworCS8qIFJlZmVyIHRvIGV2ZXJ5IGRlY2xhcmVkIHZhbHVlLCB0byBhdm9pZCBjb21waWxlciBvcHRpbWl6YXRpb25zLiAgKi8KKwlyZXR1cm4gKCFhICsgIWIgKyAhYyArICFkICsgIWUgKyAhZiArICFnICsgIWggKyAhaSArICEhaiArICFrICsgISFsCisJCSsgIW0gKyAhbiArICFvICsgIXAgKyAhcSArICFwcSk7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9oZWFkZXJfc3RkYm9vbF9oPXllcworZWxzZQorICBhY19jdl9oZWFkZXJfc3RkYm9vbF9oPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfc3RkYm9vbF9oIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaCIgPiY2OyB9CithY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJfQm9vbCIgImFjX2N2X3R5cGVfX0Jvb2wiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV9fQm9vbCIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX19CT09MIDEKK19BQ0VPRgorCisKK2ZpCisKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRib29sX2ggPSB5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TVERCT09MX0ggMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKworIyBDaGVja3MgZm9yIHR5cGVkZWZzLCBzdHJ1Y3R1cmVzLCBhbmQgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzLgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYW4gQU5TSSBDLWNvbmZvcm1pbmcgY29uc3QiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGFuIEFOU0kgQy1jb25mb3JtaW5nIGNvbnN0Li4uICIgPiY2OyB9CitpZiAke2FjX2N2X2NfY29uc3QrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworLyogRklYTUU6IEluY2x1ZGUgdGhlIGNvbW1lbnRzIHN1Z2dlc3RlZCBieSBQYXVsLiAqLworI2lmbmRlZiBfX2NwbHVzcGx1cworICAvKiBVbHRyaXggbWlwcyBjYyByZWplY3RzIHRoaXMuICAqLworICB0eXBlZGVmIGludCBjaGFyc2V0WzJdOworICBjb25zdCBjaGFyc2V0IGNzOworICAvKiBTdW5PUyA0LjEuMSBjYyByZWplY3RzIHRoaXMuICAqLworICBjaGFyIGNvbnN0ICpjb25zdCAqcGNwY2M7CisgIGNoYXIgKipwcGM7CisgIC8qIE5FQyBTVlI0LjAuMiBtaXBzIGNjIHJlamVjdHMgdGhpcy4gICovCisgIHN0cnVjdCBwb2ludCB7aW50IHgsIHk7fTsKKyAgc3RhdGljIHN0cnVjdCBwb2ludCBjb25zdCB6ZXJvID0gezAsMH07CisgIC8qIEFJWCBYTCBDIDEuMDIuMC4wIHJlamVjdHMgdGhpcy4KKyAgICAgSXQgZG9lcyBub3QgbGV0IHlvdSBzdWJ0cmFjdCBvbmUgY29uc3QgWCogcG9pbnRlciBmcm9tIGFub3RoZXIgaW4KKyAgICAgYW4gYXJtIG9mIGFuIGlmLWV4cHJlc3Npb24gd2hvc2UgaWYtcGFydCBpcyBub3QgYSBjb25zdGFudAorICAgICBleHByZXNzaW9uICovCisgIGNvbnN0IGNoYXIgKmcgPSAic3RyaW5nIjsKKyAgcGNwY2MgPSAmZyArIChnID8gZy1nIDogMCk7CisgIC8qIEhQVVggNy4wIGNjIHJlamVjdHMgdGhlc2UuICovCisgICsrcGNwY2M7CisgIHBwYyA9IChjaGFyKiopIHBjcGNjOworICBwY3BjYyA9IChjaGFyIGNvbnN0ICpjb25zdCAqKSBwcGM7CisgIHsgLyogU0NPIDMuMnY0IGNjIHJlamVjdHMgdGhpcy4gICovCisgICAgY2hhciAqdDsKKyAgICBjaGFyIGNvbnN0ICpzID0gMCA/IChjaGFyICopIDAgOiAoY2hhciBjb25zdCAqKSAwOworCisgICAgKnQrKyA9IDA7CisgICAgaWYgKHMpIHJldHVybiAwOworICB9CisgIHsgLyogU29tZW9uZSB0aGlua3MgdGhlIFN1biBzdXBwb3NlZGx5LUFOU0kgY29tcGlsZXIgd2lsbCByZWplY3QgdGhpcy4gICovCisgICAgaW50IHhbXSA9IHsyNSwgMTd9OworICAgIGNvbnN0IGludCAqZm9vID0gJnhbMF07CisgICAgKytmb287CisgIH0KKyAgeyAvKiBTdW4gU0MxLjAgQU5TSSBjb21waWxlciByZWplY3RzIHRoaXMgLS0gYnV0IG5vdCB0aGUgYWJvdmUuICovCisgICAgdHlwZWRlZiBjb25zdCBpbnQgKmlwdHI7CisgICAgaXB0ciBwID0gMDsKKyAgICArK3A7CisgIH0KKyAgeyAvKiBBSVggWEwgQyAxLjAyLjAuMCByZWplY3RzIHRoaXMgc2F5aW5nCisgICAgICAgImsuYyIsIGxpbmUgMi4yNzogMTUwNi0wMjUgKFMpIE9wZXJhbmQgbXVzdCBiZSBhIG1vZGlmaWFibGUgbHZhbHVlLiAqLworICAgIHN0cnVjdCBzIHsgaW50IGo7IGNvbnN0IGludCAqYXBbM107IH07CisgICAgc3RydWN0IHMgKmI7IGItPmogPSA1OworICB9CisgIHsgLyogVUxUUklYLTMyIFYzLjEgKFJldiA5KSB2Y2MgcmVqZWN0cyB0aGlzICovCisgICAgY29uc3QgaW50IGZvbyA9IDEwOworICAgIGlmICghZm9vKSByZXR1cm4gMDsKKyAgfQorICByZXR1cm4gIWNzWzBdICYmICF6ZXJvLng7CisjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2NfY29uc3Q9eWVzCitlbHNlCisgIGFjX2N2X2NfY29uc3Q9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2NfY29uc3QiID4mNQorJGFzX2VjaG8gIiRhY19jdl9jX2NvbnN0IiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2NfY29uc3QgPSBubzsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBjb25zdCAvKiovIiA+PmNvbmZkZWZzLmgKKworZmkKKworYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAic2l6ZV90IiAiYWNfY3ZfdHlwZV9zaXplX3QiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV9zaXplX3QiID0geHllczsgdGhlbiA6CisKK2Vsc2UKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBzaXplX3QgdW5zaWduZWQgaW50CitfQUNFT0YKKworZmkKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRpbWUuaCBhbmQgc3lzL3RpbWUuaCBtYXkgYm90aCBiZSBpbmNsdWRlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRpbWUuaCBhbmQgc3lzL3RpbWUuaCBtYXkgYm90aCBiZSBpbmNsdWRlZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9oZWFkZXJfdGltZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKworaW50CittYWluICgpCit7CitpZiAoKHN0cnVjdCB0bSAqKSAwKQorcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfaGVhZGVyX3RpbWU9eWVzCitlbHNlCisgIGFjX2N2X2hlYWRlcl90aW1lPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfdGltZSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2hlYWRlcl90aW1lIiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl90aW1lID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIFRJTUVfV0lUSF9TWVNfVElNRSAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3lzL3dhaXQuaCB0aGF0IGlzIFBPU0lYLjEgY29tcGF0aWJsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3lzL3dhaXQuaCB0aGF0IGlzIFBPU0lYLjEgY29tcGF0aWJsZS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9oZWFkZXJfc3lzX3dhaXRfaCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorI2lmbmRlZiBXRVhJVFNUQVRVUworIyBkZWZpbmUgV0VYSVRTVEFUVVMoc3RhdF92YWwpICgodW5zaWduZWQgaW50KSAoc3RhdF92YWwpID4+IDgpCisjZW5kaWYKKyNpZm5kZWYgV0lGRVhJVEVECisjIGRlZmluZSBXSUZFWElURUQoc3RhdF92YWwpICgoKHN0YXRfdmFsKSAmIDI1NSkgPT0gMCkKKyNlbmRpZgorCitpbnQKK21haW4gKCkKK3sKKyAgaW50IHM7CisgIHdhaXQgKCZzKTsKKyAgcyA9IFdJRkVYSVRFRCAocykgPyBXRVhJVFNUQVRVUyAocykgOiAxOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2hlYWRlcl9zeXNfd2FpdF9oPXllcworZWxzZQorICBhY19jdl9oZWFkZXJfc3lzX3dhaXRfaD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3N5c193YWl0X2giID4mNQorJGFzX2VjaG8gIiRhY19jdl9oZWFkZXJfc3lzX3dhaXRfaCIgPiY2OyB9CitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3lzX3dhaXRfaCA9IHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX1NZU19XQUlUX0ggMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKworICMgU29sYXJpcyBzdHVmZgorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBpbmV0X250b3AiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBpbmV0X250b3AuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3Zfc2VhcmNoX2luZXRfbnRvcCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0kTElCUworY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGluZXRfbnRvcCAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGluZXRfbnRvcCAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorZm9yIGFjX2xpYiBpbiAnJyBuc2w7IGRvCisgIGlmIHRlc3QgLXogIiRhY19saWIiOyB0aGVuCisgICAgYWNfcmVzPSJub25lIHJlcXVpcmVkIgorICBlbHNlCisgICAgYWNfcmVzPS1sJGFjX2xpYgorICAgIExJQlM9Ii1sJGFjX2xpYiAgJGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUyIKKyAgZmkKKyAgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9zZWFyY2hfaW5ldF9udG9wPSRhY19yZXMKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQKKyAgaWYgJHthY19jdl9zZWFyY2hfaW5ldF9udG9wKzp9IGZhbHNlOyB0aGVuIDoKKyAgYnJlYWsKK2ZpCitkb25lCitpZiAke2FjX2N2X3NlYXJjaF9pbmV0X250b3ArOn0gZmFsc2U7IHRoZW4gOgorCitlbHNlCisgIGFjX2N2X3NlYXJjaF9pbmV0X250b3A9bm8KK2ZpCitybSBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3NlYXJjaF9pbmV0X250b3AiID4mNQorJGFzX2VjaG8gIiRhY19jdl9zZWFyY2hfaW5ldF9udG9wIiA+JjY7IH0KK2FjX3Jlcz0kYWNfY3Zfc2VhcmNoX2luZXRfbnRvcAoraWYgdGVzdCAiJGFjX3JlcyIgIT0gbm87IHRoZW4gOgorICB0ZXN0ICIkYWNfcmVzIiA9ICJub25lIHJlcXVpcmVkIiB8fCBMSUJTPSIkYWNfcmVzICRMSUJTIgorCitmaQorCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIHJlY3YiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyByZWN2Li4uICIgPiY2OyB9CitpZiAke2FjX2N2X3NlYXJjaF9yZWN2Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSRMSUJTCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgcmVjdiAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHJlY3YgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2ZvciBhY19saWIgaW4gJycgc29ja2V0OyBkbworICBpZiB0ZXN0IC16ICIkYWNfbGliIjsgdGhlbgorICAgIGFjX3Jlcz0ibm9uZSByZXF1aXJlZCIKKyAgZWxzZQorICAgIGFjX3Jlcz0tbCRhY19saWIKKyAgICBMSUJTPSItbCRhY19saWIgICRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMiCisgIGZpCisgIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3Zfc2VhcmNoX3JlY3Y9JGFjX3JlcworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dAorICBpZiAke2FjX2N2X3NlYXJjaF9yZWN2Kzp9IGZhbHNlOyB0aGVuIDoKKyAgYnJlYWsKK2ZpCitkb25lCitpZiAke2FjX2N2X3NlYXJjaF9yZWN2Kzp9IGZhbHNlOyB0aGVuIDoKKworZWxzZQorICBhY19jdl9zZWFyY2hfcmVjdj1ubworZmkKK3JtIGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc2VhcmNoX3JlY3YiID4mNQorJGFzX2VjaG8gIiRhY19jdl9zZWFyY2hfcmVjdiIgPiY2OyB9CithY19yZXM9JGFjX2N2X3NlYXJjaF9yZWN2CitpZiB0ZXN0ICIkYWNfcmVzIiAhPSBubzsgdGhlbiA6CisgIHRlc3QgIiRhY19yZXMiID0gIm5vbmUgcmVxdWlyZWQiIHx8IExJQlM9IiRhY19yZXMgJExJQlMiCisKK2ZpCisKKyBhY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8iICJDTVNHX1NQQUNFIiAiYWNfY3ZfaGF2ZV9kZWNsX0NNU0dfU1BBQ0UiICIjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorIgoraWYgdGVzdCAieCRhY19jdl9oYXZlX2RlY2xfQ01TR19TUEFDRSIgPSB4eWVzOyB0aGVuIDoKKworZWxzZQorICBDRkxBR1M9IiRDRkxBR1MgLURfWE9QRU5fU09VUkNFPTUwMCAtRF9fRVhURU5TSU9OU19fIgorZmkKKworCisjIENoZWNrcyBmb3IgbGlicmFyeSBmdW5jdGlvbnMuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB3b3JraW5nIG1lbWNtcCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igd29ya2luZyBtZW1jbXAuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfZnVuY19tZW1jbXBfd29ya2luZys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgYWNfY3ZfZnVuY19tZW1jbXBfd29ya2luZz1ubworZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CisKKyAgLyogU29tZSB2ZXJzaW9ucyBvZiBtZW1jbXAgYXJlIG5vdCA4LWJpdCBjbGVhbi4gICovCisgIGNoYXIgYzAgPSAnXDEwMCcsIGMxID0gJ1wyMDAnLCBjMiA9ICdcMjAxJzsKKyAgaWYgKG1lbWNtcCgmYzAsICZjMiwgMSkgPj0gMCB8fCBtZW1jbXAoJmMxLCAmYzIsIDEpID49IDApCisgICAgcmV0dXJuIDE7CisKKyAgLyogVGhlIE5leHQgeDg2IE9wZW5TdGVwIGJ1ZyBzaG93cyB1cCBvbmx5IHdoZW4gY29tcGFyaW5nIDE2IGJ5dGVzCisgICAgIG9yIG1vcmUgYW5kIHdpdGggYXQgbGVhc3Qgb25lIGJ1ZmZlciBub3Qgc3RhcnRpbmcgb24gYSA0LWJ5dGUgYm91bmRhcnkuCisgICAgIFdpbGxpYW0gTGV3aXMgcHJvdmlkZWQgdGhpcyB0ZXN0IHByb2dyYW0uICAgKi8KKyAgeworICAgIGNoYXIgZm9vWzIxXTsKKyAgICBjaGFyIGJhclsyMV07CisgICAgaW50IGk7CisgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKyAgICAgIHsKKwljaGFyICphID0gZm9vICsgaTsKKwljaGFyICpiID0gYmFyICsgaTsKKwlzdHJjcHkgKGEsICItLS0tLS0tLTAxMTExMTExIik7CisJc3RyY3B5IChiLCAiLS0tLS0tLS0xMDAwMDAwMCIpOworCWlmIChtZW1jbXAgKGEsIGIsIDE2KSA+PSAwKQorCSAgcmV0dXJuIDE7CisgICAgICB9CisgICAgcmV0dXJuIDA7CisgIH0KKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfZnVuY19tZW1jbXBfd29ya2luZz15ZXMKK2Vsc2UKKyAgYWNfY3ZfZnVuY19tZW1jbXBfd29ya2luZz1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmciID4mNQorJGFzX2VjaG8gIiRhY19jdl9mdW5jX21lbWNtcF93b3JraW5nIiA+JjY7IH0KK3Rlc3QgJGFjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmcgPSBubyAmJiBjYXNlICIgJExJQk9CSlMgIiBpbgorICAqIiBtZW1jbXAuJGFjX29iamV4dCAiKiApIDs7CisgICopIExJQk9CSlM9IiRMSUJPQkpTIG1lbWNtcC4kYWNfb2JqZXh0IgorIDs7Citlc2FjCisKKworZm9yIGFjX2hlYWRlciBpbiBzeXMvc2VsZWN0Lmggc3lzL3NvY2tldC5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgdHlwZXMgb2YgYXJndW1lbnRzIGZvciBzZWxlY3QiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgdHlwZXMgb2YgYXJndW1lbnRzIGZvciBzZWxlY3QuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfZnVuY19zZWxlY3RfYXJncys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGZvciBhY19hcmcyMzQgaW4gJ2ZkX3NldCAqJyAnaW50IConICd2b2lkIConOyBkbworIGZvciBhY19hcmcxIGluICdpbnQnICdzaXplX3QnICd1bnNpZ25lZCBsb25nIGludCcgJ3Vuc2lnbmVkIGludCc7IGRvCisgIGZvciBhY19hcmc1IGluICdzdHJ1Y3QgdGltZXZhbCAqJyAnY29uc3Qgc3RydWN0IHRpbWV2YWwgKic7IGRvCisgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAorI2lmZGVmIEhBVkVfU1lTX1NFTEVDVF9ICisjIGluY2x1ZGUgPHN5cy9zZWxlY3QuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjIGluY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorCitpbnQKK21haW4gKCkKK3sKK2V4dGVybiBpbnQgc2VsZWN0ICgkYWNfYXJnMSwKKwkJCQkJICAgICRhY19hcmcyMzQsICRhY19hcmcyMzQsICRhY19hcmcyMzQsCisJCQkJCSAgICAkYWNfYXJnNSk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfZnVuY19zZWxlY3RfYXJncz0iJGFjX2FyZzEsJGFjX2FyZzIzNCwkYWNfYXJnNSI7IGJyZWFrIDMKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZG9uZQorIGRvbmUKK2RvbmUKKyMgUHJvdmlkZSBhIHNhZmUgZGVmYXVsdCB2YWx1ZS4KKzogIiR7YWNfY3ZfZnVuY19zZWxlY3RfYXJncz1pbnQsaW50ICosc3RydWN0IHRpbWV2YWwgKn0iCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2Z1bmNfc2VsZWN0X2FyZ3MiID4mNQorJGFzX2VjaG8gIiRhY19jdl9mdW5jX3NlbGVjdF9hcmdzIiA+JjY7IH0KK2FjX3NhdmVfSUZTPSRJRlM7IElGUz0nLCcKK3NldCBkdW1teSBgZWNobyAiJGFjX2N2X2Z1bmNfc2VsZWN0X2FyZ3MiIHwgc2VkICdzL1wqL1wqL2cnYAorSUZTPSRhY19zYXZlX0lGUworc2hpZnQKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBTRUxFQ1RfVFlQRV9BUkcxICQxCitfQUNFT0YKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFNFTEVDVF9UWVBFX0FSRzIzNCAoJDIpCitfQUNFT0YKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFNFTEVDVF9UWVBFX0FSRzUgKCQzKQorX0FDRU9GCisKK3JtIC1mIGNvbmZ0ZXN0KgorCisjIGF2YWhpX21hbGxvYyBhY3R1YWxseSByZXR1cm5zIE5VTEwgZm9yIGF2YWhpX21hbGxvYygwKSwgc28gaXQgZG9lcyBub3QgbWF0dGVyCisjIHdoZXRoZXIgbGliYydzIG1hbGxvYyBkb2VzIHRvby4gKFNhbWUgZm9yIHJlYWxsb2MuKQorI0FDX0ZVTkNfTUFMTE9DCisjQUNfRlVOQ19SRUFMTE9DCitmb3IgYWNfZnVuYyBpbiBnZXRob3N0bmFtZSBtZW1jaHIgbWVtbW92ZSBtZW1zZXQgbWtkaXIgc2VsZWN0IHNvY2tldCBzdHJjaHIgc3RyY3NwbiBzdHJkdXAgc3RyZXJyb3Igc3RycmNociBzdHJzcG4gc3Ryc3RyIHVuYW1lIHNldHJlc3VpZCBzZXRyZXVpZCBzZXRyZXNnaWQgc2V0cmVnaWQgc3RyY2FzZWNtcCBnZXR0aW1lb2ZkYXkgcHV0ZW52IHN0cm5jYXNlY21wIHN0cmxjcHkgZ2V0aG9zdGJ5bmFtZSBzZXRldWlkIHNldGVnaWQgc2V0cHJvY3RpdGxlIGdldHByb2duYW1lCitkbyA6CisgIGFzX2FjX3Zhcj1gJGFzX2VjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiJGFjX2Z1bmMiICIkYXNfYWNfdmFyIgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY192YXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKK2RvbmUKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB1aWRfdCBpbiBzeXMvdHlwZXMuaCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgdWlkX3QgaW4gc3lzL3R5cGVzLmguLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfdHlwZV91aWRfdCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAidWlkX3QiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgIGFjX2N2X3R5cGVfdWlkX3Q9eWVzCitlbHNlCisgIGFjX2N2X3R5cGVfdWlkX3Q9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfdHlwZV91aWRfdCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3R5cGVfdWlkX3QiID4mNjsgfQoraWYgdGVzdCAkYWNfY3ZfdHlwZV91aWRfdCA9IG5vOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIHVpZF90IGludCIgPj5jb25mZGVmcy5oCisKKworJGFzX2VjaG8gIiNkZWZpbmUgZ2lkX3QgaW50IiA+PmNvbmZkZWZzLmgKKworZmkKKworZm9yIGFjX2hlYWRlciBpbiB1bmlzdGQuaAorZG8gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAidW5pc3RkLmgiICJhY19jdl9oZWFkZXJfdW5pc3RkX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3VuaXN0ZF9oIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfVU5JU1REX0ggMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igd29ya2luZyBjaG93biIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igd29ya2luZyBjaG93bi4uLiAiID4mNjsgfQoraWYgJHthY19jdl9mdW5jX2Nob3duX3dvcmtzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICBhY19jdl9mdW5jX2Nob3duX3dvcmtzPW5vCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CisjaW5jbHVkZSA8ZmNudGwuaD4KKworaW50CittYWluICgpCit7CisgIGNoYXIgKmYgPSAiY29uZnRlc3QuY2hvd24iOworICBzdHJ1Y3Qgc3RhdCBiZWZvcmUsIGFmdGVyOworCisgIGlmIChjcmVhdCAoZiwgMDYwMCkgPCAwKQorICAgIHJldHVybiAxOworICBpZiAoc3RhdCAoZiwgJmJlZm9yZSkgPCAwKQorICAgIHJldHVybiAxOworICBpZiAoY2hvd24gKGYsICh1aWRfdCkgLTEsIChnaWRfdCkgLTEpID09IC0xKQorICAgIHJldHVybiAxOworICBpZiAoc3RhdCAoZiwgJmFmdGVyKSA8IDApCisgICAgcmV0dXJuIDE7CisgIHJldHVybiAhIChiZWZvcmUuc3RfdWlkID09IGFmdGVyLnN0X3VpZCAmJiBiZWZvcmUuc3RfZ2lkID09IGFmdGVyLnN0X2dpZCk7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2Z1bmNfY2hvd25fd29ya3M9eWVzCitlbHNlCisgIGFjX2N2X2Z1bmNfY2hvd25fd29ya3M9bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCitybSAtZiBjb25mdGVzdC5jaG93bgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9mdW5jX2Nob3duX3dvcmtzIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfZnVuY19jaG93bl93b3JrcyIgPiY2OyB9CitpZiB0ZXN0ICRhY19jdl9mdW5jX2Nob3duX3dvcmtzID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfQ0hPV04gMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBsc3RhdCBjb3JyZWN0bHkgaGFuZGxlcyB0cmFpbGluZyBzbGFzaCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGxzdGF0IGNvcnJlY3RseSBoYW5kbGVzIHRyYWlsaW5nIHNsYXNoLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluays6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIHJtIC1mIGNvbmZ0ZXN0LnN5bSBjb25mdGVzdC5maWxlCitlY2hvID5jb25mdGVzdC5maWxlCitpZiB0ZXN0ICIkYXNfbG5fcyIgPSAibG4gLXMiICYmIGxuIC1zIGNvbmZ0ZXN0LmZpbGUgY29uZnRlc3Quc3ltOyB0aGVuCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgYWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPW5vCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK3N0cnVjdCBzdGF0IHNidWY7CisgICAgIC8qIExpbnV4IHdpbGwgZGVyZWZlcmVuY2UgdGhlIHN5bWxpbmsgYW5kIGZhaWwsIGFzIHJlcXVpcmVkIGJ5IFBPU0lYLgorCVRoYXQgaXMgYmV0dGVyIGluIHRoZSBzZW5zZSB0aGF0IGl0IG1lYW5zIHdlIHdpbGwgbm90CisJaGF2ZSB0byBjb21waWxlIGFuZCB1c2UgdGhlIGxzdGF0IHdyYXBwZXIuICAqLworICAgICByZXR1cm4gbHN0YXQgKCJjb25mdGVzdC5zeW0vIiwgJnNidWYpID09IDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbms9eWVzCitlbHNlCisgIGFjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluaz1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKK2Vsc2UKKyAgIyBJZiB0aGUgYGxuIC1zJyBjb21tYW5kIGZhaWxlZCwgdGhlbiB3ZSBwcm9iYWJseSBkb24ndCBldmVuCisgICMgaGF2ZSBhbiBsc3RhdCBmdW5jdGlvbi4KKyAgYWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPW5vCitmaQorcm0gLWYgY29uZnRlc3Quc3ltIGNvbmZ0ZXN0LmZpbGUKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rIiA+JjY7IH0KKwordGVzdCAkYWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rID0geWVzICYmCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgTFNUQVRfRk9MTE9XU19TTEFTSEVEX1NZTUxJTksgMQorX0FDRU9GCisKKworaWYgdGVzdCAieCRhY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbmsiID0geG5vOyB0aGVuCisgIGNhc2UgIiAkTElCT0JKUyAiIGluCisgICoiIGxzdGF0LiRhY19vYmpleHQgIiogKSA7OworICAqKSBMSUJPQkpTPSIkTElCT0JKUyBsc3RhdC4kYWNfb2JqZXh0IgorIDs7Citlc2FjCisKK2ZpCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBzdGF0IGFjY2VwdHMgYW4gZW1wdHkgc3RyaW5nIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgc3RhdCBhY2NlcHRzIGFuIGVtcHR5IHN0cmluZy4uLiAiID4mNjsgfQoraWYgJHthY19jdl9mdW5jX3N0YXRfZW1wdHlfc3RyaW5nX2J1Zys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgYWNfY3ZfZnVuY19zdGF0X2VtcHR5X3N0cmluZ19idWc9eWVzCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK3N0cnVjdCBzdGF0IHNidWY7CisgIHJldHVybiBzdGF0ICgiIiwgJnNidWYpID09IDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9mdW5jX3N0YXRfZW1wdHlfc3RyaW5nX2J1Zz1ubworZWxzZQorICBhY19jdl9mdW5jX3N0YXRfZW1wdHlfc3RyaW5nX2J1Zz15ZXMKK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9mdW5jX3N0YXRfZW1wdHlfc3RyaW5nX2J1ZyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2Z1bmNfc3RhdF9lbXB0eV9zdHJpbmdfYnVnIiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2Z1bmNfc3RhdF9lbXB0eV9zdHJpbmdfYnVnID0geWVzOyB0aGVuCisgIGNhc2UgIiAkTElCT0JKUyAiIGluCisgICoiIHN0YXQuJGFjX29iamV4dCAiKiApIDs7CisgICopIExJQk9CSlM9IiRMSUJPQkpTIHN0YXQuJGFjX29iamV4dCIKKyA7OworZXNhYworCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVEFUX0VNUFRZX1NUUklOR19CVUcgMQorX0FDRU9GCisKK2ZpCisKK2FjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgIm1vZGVfdCIgImFjX2N2X3R5cGVfbW9kZV90IiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfbW9kZV90IiA9IHh5ZXM7IHRoZW4gOgorCitlbHNlCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgbW9kZV90IGludAorX0FDRU9GCisKK2ZpCisKK2FjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgInBpZF90IiAiYWNfY3ZfdHlwZV9waWRfdCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl90eXBlX3BpZF90IiA9IHh5ZXM7IHRoZW4gOgorCitlbHNlCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgcGlkX3QgaW50CitfQUNFT0YKKworZmkKKworCithY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8iICJlbnZpcm9uIiAiYWNfY3ZfaGF2ZV9kZWNsX2Vudmlyb24iICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX2Vudmlyb24iID0geHllczsgdGhlbiA6CisgIGFjX2hhdmVfZGVjbD0xCitlbHNlCisgIGFjX2hhdmVfZGVjbD0wCitmaQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfREVDTF9FTlZJUk9OICRhY19oYXZlX2RlY2wKK19BQ0VPRgorCisKKyMgY2hlY2sgaWYgZ2NjJ3MgLWZ2aXNpYmlsaXR5IGlzIHN1cHBvcnRlZAorCisgIHNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICBWSVNJQklMSVRZX0hJRERFTl9DRkxBR1M9IiIKKyAgT1BUSU9OPS1mdmlzaWJpbGl0eT1oaWRkZW4KKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBnY2MgJE9QVElPTiBzdXBwb3J0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBnY2MgJE9QVElPTiBzdXBwb3J0Li4uICIgPiY2OyB9CisKKyAgQ0ZMQUdTPSIkQ0ZMQUdTICRPUFRJT04iCisKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisgICAgICBpbnQgZGVmYXVsdF92aXMgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworICAgICAgaW50IGhpZGRlbl92aXMgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkoImhpZGRlbiIpKSk7CisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfdmlzaWJpbGl0eV9zdXBwb3J0ZWQ9eWVzCitlbHNlCisgIGFjX3Zpc2liaWxpdHlfc3VwcG9ydGVkPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfdmlzaWJpbGl0eV9zdXBwb3J0ZWQiID4mNQorJGFzX2VjaG8gIiRhY192aXNpYmlsaXR5X3N1cHBvcnRlZCIgPiY2OyB9CisKKyAgaWYgdGVzdCB4IiRhY192aXNpYmlsaXR5X3N1cHBvcnRlZCIgPSB4eWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfR0NDX1ZJU0lCSUxJVFkgMSIgPj5jb25mZGVmcy5oCisKKyAgICBWSVNJQklMSVRZX0hJRERFTl9DRkxBR1M9IiRPUFRJT04gLURIQVZFX1ZJU0lCSUxJVFlfSElEREVOIgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX1ZJU0lCSUxJVFlfSElEREVOIC8qKi8iID4+Y29uZmRlZnMuaAorCisgIGVsc2UKKworICAgIDoKKyAgZmkKKworCisKKyAgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCisKKworZW5hYmxlX2Nocm9vdD15ZXMKK2ZvciBhY19oZWFkZXIgaW4gc3lzL2NhcGFiaWxpdHkuaAorZG8gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAic3lzL2NhcGFiaWxpdHkuaCIgImFjX2N2X2hlYWRlcl9zeXNfY2FwYWJpbGl0eV9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9zeXNfY2FwYWJpbGl0eV9oIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1lTX0NBUEFCSUxJVFlfSCAxCitfQUNFT0YKKworZWxzZQorICBlbmFibGVfY2hyb290PW5vCitmaQorCitkb25lCisKK2ZvciBhY19oZWFkZXIgaW4gc3lzL3ByY3RsLmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInN5cy9wcmN0bC5oIiAiYWNfY3ZfaGVhZGVyX3N5c19wcmN0bF9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9zeXNfcHJjdGxfaCIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NZU19QUkNUTF9IIDEKK19BQ0VPRgorCitlbHNlCisgIGVuYWJsZV9jaHJvb3Q9bm8KK2ZpCisKK2RvbmUKKworZm9yIGFjX2Z1bmMgaW4gY2hyb290CitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImNocm9vdCIgImFjX2N2X2Z1bmNfY2hyb290IgoraWYgdGVzdCAieCRhY19jdl9mdW5jX2Nocm9vdCIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0NIUk9PVCAxCitfQUNFT0YKKworZWxzZQorICBlbmFibGVfY2hyb290PW5vCitmaQorZG9uZQorCisKKyBpZiB0ZXN0ICJ4JGVuYWJsZV9jaHJvb3QiID0gInh5ZXMiOyB0aGVuCisgIEVOQUJMRV9DSFJPT1RfVFJVRT0KKyAgRU5BQkxFX0NIUk9PVF9GQUxTRT0nIycKK2Vsc2UKKyAgRU5BQkxFX0NIUk9PVF9UUlVFPScjJworICBFTkFCTEVfQ0hST09UX0ZBTFNFPQorZmkKKworCitpZiB0ZXN0ICJ4JGVuYWJsZV9jaHJvb3QiID0gInh5ZXMiIDsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBFTkFCTEVfQ0hST09UIDEiID4+Y29uZmRlZnMuaAorCitmaQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sZGwuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX2RsX2Rsb3Blbis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sZGwgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGRsb3BlbiAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGRsb3BlbiAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfZGxfZGxvcGVuPXllcworZWxzZQorICBhY19jdl9saWJfZGxfZGxvcGVuPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPSB4eWVzOyB0aGVuIDoKKyAgIGZvciBhY19oZWFkZXIgaW4gZGxmY24uaAorZG8gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiZGxmY24uaCIgImFjX2N2X2hlYWRlcl9kbGZjbl9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9kbGZjbl9oIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfRExGQ05fSCAxCitfQUNFT0YKKyBIQVZFX0RMT1BFTj15ZXMKK2Vsc2UKKyAgSEFWRV9ETE9QRU49bm8KK2ZpCisKK2RvbmUKKworZWxzZQorICBIQVZFX0RMT1BFTj1ubworZmkKKworaWYgdGVzdCAieCRIQVZFX0RMT1BFTiIgPSAieHllcyIgOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfRExPUEVOIDEiID4+Y29uZmRlZnMuaAorCitmaQorIGlmIHRlc3QgIngkSEFWRV9ETE9QRU4iID0gInh5ZXMiOyB0aGVuCisgIEhBVkVfRExPUEVOX1RSVUU9CisgIEhBVkVfRExPUEVOX0ZBTFNFPScjJworZWxzZQorICBIQVZFX0RMT1BFTl9UUlVFPScjJworICBIQVZFX0RMT1BFTl9GQUxTRT0KK2ZpCisKKworaGF2ZV9pbm90aWZ5PW5vCitmb3IgYWNfaGVhZGVyIGluIHN5cy9pbm90aWZ5LmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInN5cy9pbm90aWZ5LmgiICJhY19jdl9oZWFkZXJfc3lzX2lub3RpZnlfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfc3lzX2lub3RpZnlfaCIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NZU19JTk9USUZZX0ggMQorX0FDRU9GCisgaGF2ZV9pbm90aWZ5PXllcworZmkKKworZG9uZQorCisKKyBpZiB0ZXN0ICJ4JGhhdmVfaW5vdGlmeSIgPSAieHllcyI7IHRoZW4KKyAgSEFWRV9JTk9USUZZX1RSVUU9CisgIEhBVkVfSU5PVElGWV9GQUxTRT0nIycKK2Vsc2UKKyAgSEFWRV9JTk9USUZZX1RSVUU9JyMnCisgIEhBVkVfSU5PVElGWV9GQUxTRT0KK2ZpCisKKworaWYgdGVzdCAieCRoYXZlX2lub3RpZnkiID0gInh5ZXMiIDsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0lOT1RJRlkgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKK2hhdmVfa3F1ZXVlPXllcworZm9yIGFjX2Z1bmMgaW4ga3F1ZXVlCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImtxdWV1ZSIgImFjX2N2X2Z1bmNfa3F1ZXVlIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX2txdWV1ZSIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0tRVUVVRSAxCitfQUNFT0YKKworZWxzZQorICBoYXZlX2txdWV1ZT1ubworZmkKK2RvbmUKKworCisgaWYgdGVzdCAieCRoYXZlX2txdWV1ZSIgPSAieHllcyI7IHRoZW4KKyAgSEFWRV9LUVVFVUVfVFJVRT0KKyAgSEFWRV9LUVVFVUVfRkFMU0U9JyMnCitlbHNlCisgIEhBVkVfS1FVRVVFX1RSVUU9JyMnCisgIEhBVkVfS1FVRVVFX0ZBTFNFPQorZmkKKworCitpZiB0ZXN0ICJ4JGhhdmVfa3F1ZXVlIiA9ICJ4eWVzIiA7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9LUVVFVUUgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgTkxTIGlzIHJlcXVlc3RlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIE5MUyBpcyByZXF1ZXN0ZWQuLi4gIiA+JjY7IH0KKyAgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbmxzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX25scytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX25sczsgVVNFX05MUz0kZW5hYmxldmFsCitlbHNlCisgIFVTRV9OTFM9eWVzCitmaQorCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkVVNFX05MUyIgPiY1CiskYXNfZWNobyAiJFVTRV9OTFMiID4mNjsgfQorCisKKworCitjYXNlICIkYW1fX2FwaV92ZXJzaW9uIiBpbgorICAgIDEuMDEyMzQpCisJYXNfZm5fZXJyb3IgJD8gIkF1dG9tYWtlIDEuNSBvciBuZXdlciBpcyByZXF1aXJlZCB0byB1c2UgaW50bHRvb2wiICIkTElORU5PIiA1CisgICAgOzsKKyAgICAqKQorICAgIDs7Citlc2FjCisKK2lmIHRlc3QgLW4gIjAuMzUuMCI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBpbnRsdG9vbCA+PSAwLjM1LjAiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGludGx0b29sID49IDAuMzUuMC4uLiAiID4mNjsgfQorCisgICAgSU5UTFRPT0xfUkVRVUlSRURfVkVSU0lPTl9BU19JTlQ9YGVjaG8gMC4zNS4wIHwgYXdrIC1GLiAneyBwcmludCAkIDEgKiAxMDAwICsgJCAyICogMTAwICsgJCAzOyB9J2AKKyAgICBJTlRMVE9PTF9BUFBMSUVEX1ZFUlNJT049YGludGx0b29sLXVwZGF0ZSAtLXZlcnNpb24gfCBoZWFkIC0xIHwgY3V0IC1kIiAiIC1mM2AKKyAgICBJTlRMVE9PTF9BUFBMSUVEX1ZFUlNJT05fQVNfSU5UPWBlY2hvICRJTlRMVE9PTF9BUFBMSUVEX1ZFUlNJT04gfCBhd2sgLUYuICd7IHByaW50ICQgMSAqIDEwMDAgKyAkIDIgKiAxMDAgKyAkIDM7IH0nYAorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRJTlRMVE9PTF9BUFBMSUVEX1ZFUlNJT04gZm91bmQiID4mNQorJGFzX2VjaG8gIiRJTlRMVE9PTF9BUFBMSUVEX1ZFUlNJT04gZm91bmQiID4mNjsgfQorICAgIHRlc3QgIiRJTlRMVE9PTF9BUFBMSUVEX1ZFUlNJT05fQVNfSU5UIiAtZ2UgIiRJTlRMVE9PTF9SRVFVSVJFRF9WRVJTSU9OX0FTX0lOVCIgfHwKKwlhc19mbl9lcnJvciAkPyAiWW91ciBpbnRsdG9vbCBpcyB0b28gb2xkLiAgWW91IG5lZWQgaW50bHRvb2wgMC4zNS4wIG9yIGxhdGVyLiIgIiRMSU5FTk8iIDUKK2ZpCisKKyMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiaW50bHRvb2wtdXBkYXRlIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBpbnRsdG9vbC11cGRhdGU7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX0lOVExUT09MX1VQREFURSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJElOVExUT09MX1VQREFURSBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9JTlRMVE9PTF9VUERBVEU9IiRJTlRMVE9PTF9VUERBVEUiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX0lOVExUT09MX1VQREFURT0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICA7OworZXNhYworZmkKK0lOVExUT09MX1VQREFURT0kYWNfY3ZfcGF0aF9JTlRMVE9PTF9VUERBVEUKK2lmIHRlc3QgLW4gIiRJTlRMVE9PTF9VUERBVEUiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkSU5UTFRPT0xfVVBEQVRFIiA+JjUKKyRhc19lY2hvICIkSU5UTFRPT0xfVVBEQVRFIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiaW50bHRvb2wtbWVyZ2UiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGludGx0b29sLW1lcmdlOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9JTlRMVE9PTF9NRVJHRSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJElOVExUT09MX01FUkdFIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX0lOVExUT09MX01FUkdFPSIkSU5UTFRPT0xfTUVSR0UiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX0lOVExUT09MX01FUkdFPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIDs7Citlc2FjCitmaQorSU5UTFRPT0xfTUVSR0U9JGFjX2N2X3BhdGhfSU5UTFRPT0xfTUVSR0UKK2lmIHRlc3QgLW4gIiRJTlRMVE9PTF9NRVJHRSI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRJTlRMVE9PTF9NRVJHRSIgPiY1CiskYXNfZWNobyAiJElOVExUT09MX01FUkdFIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiaW50bHRvb2wtZXh0cmFjdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgaW50bHRvb2wtZXh0cmFjdDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfSU5UTFRPT0xfRVhUUkFDVCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJElOVExUT09MX0VYVFJBQ1QgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfSU5UTFRPT0xfRVhUUkFDVD0iJElOVExUT09MX0VYVFJBQ1QiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX0lOVExUT09MX0VYVFJBQ1Q9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgOzsKK2VzYWMKK2ZpCitJTlRMVE9PTF9FWFRSQUNUPSRhY19jdl9wYXRoX0lOVExUT09MX0VYVFJBQ1QKK2lmIHRlc3QgLW4gIiRJTlRMVE9PTF9FWFRSQUNUIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJElOVExUT09MX0VYVFJBQ1QiID4mNQorJGFzX2VjaG8gIiRJTlRMVE9PTF9FWFRSQUNUIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2lmIHRlc3QgLXogIiRJTlRMVE9PTF9VUERBVEUiIC1vIC16ICIkSU5UTFRPT0xfTUVSR0UiIC1vIC16ICIkSU5UTFRPT0xfRVhUUkFDVCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAiVGhlIGludGx0b29sIHNjcmlwdHMgd2VyZSBub3QgZm91bmQuIFBsZWFzZSBpbnN0YWxsIGludGx0b29sLiIgIiRMSU5FTk8iIDUKK2ZpCisKKyAgSU5UTFRPT0xfREVTS1RPUF9SVUxFPSclLmRlc2t0b3A6ICAgJS5kZXNrdG9wLmluICAgJChJTlRMVE9PTF9NRVJHRSkgJCh3aWxkY2FyZCAkKHRvcF9zcmNkaXIpL3BvLyoucG8pIDsgTENfQUxMPUMgJChJTlRMVE9PTF9NRVJHRSkgLWQgLXUgLWMgJCh0b3BfYnVpbGRkaXIpL3BvLy5pbnRsdG9vbC1tZXJnZS1jYWNoZSAkKHRvcF9zcmNkaXIpL3BvICQ8ICRAJworSU5UTFRPT0xfRElSRUNUT1JZX1JVTEU9JyUuZGlyZWN0b3J5OiAlLmRpcmVjdG9yeS5pbiAkKElOVExUT09MX01FUkdFKSAkKHdpbGRjYXJkICQodG9wX3NyY2RpcikvcG8vKi5wbykgOyBMQ19BTEw9QyAkKElOVExUT09MX01FUkdFKSAtZCAtdSAtYyAkKHRvcF9idWlsZGRpcikvcG8vLmludGx0b29sLW1lcmdlLWNhY2hlICQodG9wX3NyY2RpcikvcG8gJDwgJEAnCisgICAgIElOVExUT09MX0tFWVNfUlVMRT0nJS5rZXlzOiAgICAgICUua2V5cy5pbiAgICAgICQoSU5UTFRPT0xfTUVSR0UpICQod2lsZGNhcmQgJCh0b3Bfc3JjZGlyKS9wby8qLnBvKSA7IExDX0FMTD1DICQoSU5UTFRPT0xfTUVSR0UpIC1rIC11IC1jICQodG9wX2J1aWxkZGlyKS9wby8uaW50bHRvb2wtbWVyZ2UtY2FjaGUgJCh0b3Bfc3JjZGlyKS9wbyAkPCAkQCcKKyAgICAgSU5UTFRPT0xfUFJPUF9SVUxFPSclLnByb3A6ICAgICAgJS5wcm9wLmluICAgICAgJChJTlRMVE9PTF9NRVJHRSkgJCh3aWxkY2FyZCAkKHRvcF9zcmNkaXIpL3BvLyoucG8pIDsgTENfQUxMPUMgJChJTlRMVE9PTF9NRVJHRSkgLWQgLXUgLWMgJCh0b3BfYnVpbGRkaXIpL3BvLy5pbnRsdG9vbC1tZXJnZS1jYWNoZSAkKHRvcF9zcmNkaXIpL3BvICQ8ICRAJworICAgICAgSU5UTFRPT0xfT0FGX1JVTEU9JyUub2FmOiAgICAgICAlLm9hZi5pbiAgICAgICAkKElOVExUT09MX01FUkdFKSAkKHdpbGRjYXJkICQodG9wX3NyY2RpcikvcG8vKi5wbykgOyBMQ19BTEw9QyAkKElOVExUT09MX01FUkdFKSAtbyAtcCAkKHRvcF9zcmNkaXIpL3BvICQ8ICRAJworICAgICBJTlRMVE9PTF9QT05HX1JVTEU9JyUucG9uZzogICAgICAlLnBvbmcuaW4gICAgICAkKElOVExUT09MX01FUkdFKSAkKHdpbGRjYXJkICQodG9wX3NyY2RpcikvcG8vKi5wbykgOyBMQ19BTEw9QyAkKElOVExUT09MX01FUkdFKSAteCAtdSAtYyAkKHRvcF9idWlsZGRpcikvcG8vLmludGx0b29sLW1lcmdlLWNhY2hlICQodG9wX3NyY2RpcikvcG8gJDwgJEAnCisgICBJTlRMVE9PTF9TRVJWRVJfUlVMRT0nJS5zZXJ2ZXI6ICAgICUuc2VydmVyLmluICAgICQoSU5UTFRPT0xfTUVSR0UpICQod2lsZGNhcmQgJCh0b3Bfc3JjZGlyKS9wby8qLnBvKSA7IExDX0FMTD1DICQoSU5UTFRPT0xfTUVSR0UpIC1vIC11IC1jICQodG9wX2J1aWxkZGlyKS9wby8uaW50bHRvb2wtbWVyZ2UtY2FjaGUgJCh0b3Bfc3JjZGlyKS9wbyAkPCAkQCcKKyAgICBJTlRMVE9PTF9TSEVFVF9SVUxFPSclLnNoZWV0OiAgICAgJS5zaGVldC5pbiAgICAgJChJTlRMVE9PTF9NRVJHRSkgJCh3aWxkY2FyZCAkKHRvcF9zcmNkaXIpL3BvLyoucG8pIDsgTENfQUxMPUMgJChJTlRMVE9PTF9NRVJHRSkgLXggLXUgLWMgJCh0b3BfYnVpbGRkaXIpL3BvLy5pbnRsdG9vbC1tZXJnZS1jYWNoZSAkKHRvcF9zcmNkaXIpL3BvICQ8ICRAJworSU5UTFRPT0xfU09VTkRMSVNUX1JVTEU9JyUuc291bmRsaXN0OiAlLnNvdW5kbGlzdC5pbiAkKElOVExUT09MX01FUkdFKSAkKHdpbGRjYXJkICQodG9wX3NyY2RpcikvcG8vKi5wbykgOyBMQ19BTEw9QyAkKElOVExUT09MX01FUkdFKSAtZCAtdSAtYyAkKHRvcF9idWlsZGRpcikvcG8vLmludGx0b29sLW1lcmdlLWNhY2hlICQodG9wX3NyY2RpcikvcG8gJDwgJEAnCisgICAgICAgSU5UTFRPT0xfVUlfUlVMRT0nJS51aTogICAgICAgICUudWkuaW4gICAgICAgICQoSU5UTFRPT0xfTUVSR0UpICQod2lsZGNhcmQgJCh0b3Bfc3JjZGlyKS9wby8qLnBvKSA7IExDX0FMTD1DICQoSU5UTFRPT0xfTUVSR0UpIC14IC11IC1jICQodG9wX2J1aWxkZGlyKS9wby8uaW50bHRvb2wtbWVyZ2UtY2FjaGUgJCh0b3Bfc3JjZGlyKS9wbyAkPCAkQCcKKyAgICAgIElOVExUT09MX1hNTF9SVUxFPSclLnhtbDogICAgICAgJS54bWwuaW4gICAgICAgJChJTlRMVE9PTF9NRVJHRSkgJCh3aWxkY2FyZCAkKHRvcF9zcmNkaXIpL3BvLyoucG8pIDsgTENfQUxMPUMgJChJTlRMVE9PTF9NRVJHRSkgLXggLXUgLWMgJCh0b3BfYnVpbGRkaXIpL3BvLy5pbnRsdG9vbC1tZXJnZS1jYWNoZSAkKHRvcF9zcmNkaXIpL3BvICQ8ICRAJworICAgICAgSU5UTFRPT0xfWE1MX05PTUVSR0VfUlVMRT0nJS54bWw6ICAgICAgICUueG1sLmluICAgICAgICQoSU5UTFRPT0xfTUVSR0UpIDsgTENfQUxMPUMgJChJTlRMVE9PTF9NRVJHRSkgLXggLXUgLS1uby10cmFuc2xhdGlvbnMgJDwgJEAnCisgICAgICBJTlRMVE9PTF9YQU1fUlVMRT0nJS54YW06ICAgICAgICUueG1sLmluICAgICAgICQoSU5UTFRPT0xfTUVSR0UpICQod2lsZGNhcmQgJCh0b3Bfc3JjZGlyKS9wby8qLnBvKSA7IExDX0FMTD1DICQoSU5UTFRPT0xfTUVSR0UpIC14IC11IC1jICQodG9wX2J1aWxkZGlyKS9wby8uaW50bHRvb2wtbWVyZ2UtY2FjaGUgJCh0b3Bfc3JjZGlyKS9wbyAkPCAkQCcKKyAgICAgIElOVExUT09MX0tCRF9SVUxFPSclLmtiZDogICAgICAgJS5rYmQuaW4gICAgICAgJChJTlRMVE9PTF9NRVJHRSkgJCh3aWxkY2FyZCAkKHRvcF9zcmNkaXIpL3BvLyoucG8pIDsgTENfQUxMPUMgJChJTlRMVE9PTF9NRVJHRSkgLXggLXUgLW0gLWMgJCh0b3BfYnVpbGRkaXIpL3BvLy5pbnRsdG9vbC1tZXJnZS1jYWNoZSAkKHRvcF9zcmNkaXIpL3BvICQ8ICRAJworICAgIElOVExUT09MX0NBVkVTX1JVTEU9JyUuY2F2ZXM6ICAgICAlLmNhdmVzLmluICAgICAkKElOVExUT09MX01FUkdFKSAkKHdpbGRjYXJkICQodG9wX3NyY2RpcikvcG8vKi5wbykgOyBMQ19BTEw9QyAkKElOVExUT09MX01FUkdFKSAtZCAtdSAtYyAkKHRvcF9idWlsZGRpcikvcG8vLmludGx0b29sLW1lcmdlLWNhY2hlICQodG9wX3NyY2RpcikvcG8gJDwgJEAnCisgIElOVExUT09MX1NDSEVNQVNfUlVMRT0nJS5zY2hlbWFzOiAgICUuc2NoZW1hcy5pbiAgICQoSU5UTFRPT0xfTUVSR0UpICQod2lsZGNhcmQgJCh0b3Bfc3JjZGlyKS9wby8qLnBvKSA7IExDX0FMTD1DICQoSU5UTFRPT0xfTUVSR0UpIC1zIC11IC1jICQodG9wX2J1aWxkZGlyKS9wby8uaW50bHRvb2wtbWVyZ2UtY2FjaGUgJCh0b3Bfc3JjZGlyKS9wbyAkPCAkQCcKKyAgICBJTlRMVE9PTF9USEVNRV9SVUxFPSclLnRoZW1lOiAgICAgJS50aGVtZS5pbiAgICAgJChJTlRMVE9PTF9NRVJHRSkgJCh3aWxkY2FyZCAkKHRvcF9zcmNkaXIpL3BvLyoucG8pIDsgTENfQUxMPUMgJChJTlRMVE9PTF9NRVJHRSkgLWQgLXUgLWMgJCh0b3BfYnVpbGRkaXIpL3BvLy5pbnRsdG9vbC1tZXJnZS1jYWNoZSAkKHRvcF9zcmNkaXIpL3BvICQ8ICRAJworICAgIElOVExUT09MX1NFUlZJQ0VfUlVMRT0nJS5zZXJ2aWNlOiAlLnNlcnZpY2UuaW4gICAkKElOVExUT09MX01FUkdFKSAkKHdpbGRjYXJkICQodG9wX3NyY2RpcikvcG8vKi5wbykgOyBMQ19BTEw9QyAkKElOVExUT09MX01FUkdFKSAtZCAtdSAtYyAkKHRvcF9idWlsZGRpcikvcG8vLmludGx0b29sLW1lcmdlLWNhY2hlICQodG9wX3NyY2RpcikvcG8gJDwgJEAnCisgICBJTlRMVE9PTF9QT0xJQ1lfUlVMRT0nJS5wb2xpY3k6ICAgICUucG9saWN5LmluICAgICQoSU5UTFRPT0xfTUVSR0UpICQod2lsZGNhcmQgJCh0b3Bfc3JjZGlyKS9wby8qLnBvKSA7IExDX0FMTD1DICQoSU5UTFRPT0xfTUVSR0UpIC14IC11IC1jICQodG9wX2J1aWxkZGlyKS9wby8uaW50bHRvb2wtbWVyZ2UtY2FjaGUgJCh0b3Bfc3JjZGlyKS9wbyAkPCAkQCcKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworIyBDaGVjayB0aGUgZ2V0dGV4dCB0b29scyB0byBtYWtlIHN1cmUgdGhleSBhcmUgR05VCisjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInhnZXR0ZXh0Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSB4Z2V0dGV4dDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfWEdFVFRFWFQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRYR0VUVEVYVCBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9YR0VUVEVYVD0iJFhHRVRURVhUIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcGF0aF9YR0VUVEVYVD0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICA7OworZXNhYworZmkKK1hHRVRURVhUPSRhY19jdl9wYXRoX1hHRVRURVhUCitpZiB0ZXN0IC1uICIkWEdFVFRFWFQiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkWEdFVFRFWFQiID4mNQorJGFzX2VjaG8gIiRYR0VUVEVYVCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm1zZ21lcmdlIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBtc2dtZXJnZTsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfTVNHTUVSR0UrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRNU0dNRVJHRSBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9NU0dNRVJHRT0iJE1TR01FUkdFIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcGF0aF9NU0dNRVJHRT0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICA7OworZXNhYworZmkKK01TR01FUkdFPSRhY19jdl9wYXRoX01TR01FUkdFCitpZiB0ZXN0IC1uICIkTVNHTUVSR0UiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTVNHTUVSR0UiID4mNQorJGFzX2VjaG8gIiRNU0dNRVJHRSIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm1zZ2ZtdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgbXNnZm10OyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9NU0dGTVQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRNU0dGTVQgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfTVNHRk1UPSIkTVNHRk1UIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcGF0aF9NU0dGTVQ9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgOzsKK2VzYWMKK2ZpCitNU0dGTVQ9JGFjX2N2X3BhdGhfTVNHRk1UCitpZiB0ZXN0IC1uICIkTVNHRk1UIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1TR0ZNVCIgPiY1CiskYXNfZWNobyAiJE1TR0ZNVCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImdtc2dmbXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGdtc2dmbXQ7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX0dNU0dGTVQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRHTVNHRk1UIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX0dNU0dGTVQ9IiRHTVNHRk1UIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcGF0aF9HTVNHRk1UPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIHRlc3QgLXogIiRhY19jdl9wYXRoX0dNU0dGTVQiICYmIGFjX2N2X3BhdGhfR01TR0ZNVD0iJE1TR0ZNVCIKKyAgOzsKK2VzYWMKK2ZpCitHTVNHRk1UPSRhY19jdl9wYXRoX0dNU0dGTVQKK2lmIHRlc3QgLW4gIiRHTVNHRk1UIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEdNU0dGTVQiID4mNQorJGFzX2VjaG8gIiRHTVNHRk1UIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2lmIHRlc3QgLXogIiRYR0VUVEVYVCIgLW8gLXogIiRNU0dNRVJHRSIgLW8gLXogIiRNU0dGTVQiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIkdOVSBnZXR0ZXh0IHRvb2xzIG5vdCBmb3VuZDsgcmVxdWlyZWQgZm9yIGludGx0b29sIiAiJExJTkVOTyIgNQorZmkKK3hndmVyc2lvbj0iYCRYR0VUVEVYVCAtLXZlcnNpb258Z3JlcCAnKEdOVSAnIDI+IC9kZXYvbnVsbGAiCittbXZlcnNpb249ImAkTVNHTUVSR0UgLS12ZXJzaW9ufGdyZXAgJyhHTlUgJyAyPiAvZGV2L251bGxgIgorbWZ2ZXJzaW9uPSJgJE1TR0ZNVCAtLXZlcnNpb258Z3JlcCAnKEdOVSAnIDI+IC9kZXYvbnVsbGAiCitpZiB0ZXN0IC16ICIkeGd2ZXJzaW9uIiAtbyAteiAiJG1tdmVyc2lvbiIgLW8gLXogIiRtZnZlcnNpb24iOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIkdOVSBnZXR0ZXh0IHRvb2xzIG5vdCBmb3VuZDsgcmVxdWlyZWQgZm9yIGludGx0b29sIiAiJExJTkVOTyIgNQorZmkKKworIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJwZXJsIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBwZXJsOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9JTlRMVE9PTF9QRVJMKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkSU5UTFRPT0xfUEVSTCBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9JTlRMVE9PTF9QRVJMPSIkSU5UTFRPT0xfUEVSTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfSU5UTFRPT0xfUEVSTD0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICA7OworZXNhYworZmkKK0lOVExUT09MX1BFUkw9JGFjX2N2X3BhdGhfSU5UTFRPT0xfUEVSTAoraWYgdGVzdCAtbiAiJElOVExUT09MX1BFUkwiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkSU5UTFRPT0xfUEVSTCIgPiY1CiskYXNfZWNobyAiJElOVExUT09MX1BFUkwiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworaWYgdGVzdCAteiAiJElOVExUT09MX1BFUkwiOyB0aGVuCisgICBhc19mbl9lcnJvciAkPyAicGVybCBub3QgZm91bmQiICIkTElORU5PIiA1CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgcGVybCA+PSA1LjguMSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgcGVybCA+PSA1LjguMS4uLiAiID4mNjsgfQorJElOVExUT09MX1BFUkwgLWUgInVzZSA1LjguMTsiID4gL2Rldi9udWxsIDI+JjEKK2lmIHRlc3QgJD8gLW5lIDA7IHRoZW4KKyAgIGFzX2ZuX2Vycm9yICQ/ICJwZXJsIDUuOC4xIGlzIHJlcXVpcmVkIGZvciBpbnRsdG9vbCIgIiRMSU5FTk8iIDUKK2Vsc2UKKyAgIElUX1BFUkxfVkVSU0lPTj1gJElOVExUT09MX1BFUkwgLWUgInByaW50ZiAnJXZkJywgJF5WImAKKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkSVRfUEVSTF9WRVJTSU9OIiA+JjUKKyRhc19lY2hvICIkSVRfUEVSTF9WRVJTSU9OIiA+JjY7IH0KK2ZpCitpZiB0ZXN0ICJ4IiAhPSAieG5vLXhtbCI7IHRoZW4KKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIFhNTDo6UGFyc2VyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBYTUw6OlBhcnNlci4uLiAiID4mNjsgfQorICAgaWYgYCRJTlRMVE9PTF9QRVJMIC1lICJyZXF1aXJlIFhNTDo6UGFyc2VyIiAyPi9kZXYvbnVsbGA7IHRoZW4KKyAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogb2siID4mNQorJGFzX2VjaG8gIm9rIiA+JjY7IH0KKyAgIGVsc2UKKyAgICAgICBhc19mbl9lcnJvciAkPyAiWE1MOjpQYXJzZXIgcGVybCBtb2R1bGUgaXMgcmVxdWlyZWQgZm9yIGludGx0b29sIiAiJExJTkVOTyIgNQorICAgZmkKK2ZpCisKKyMgU3Vic3RpdHV0ZSBBTExfTElOR1VBUyBzbyB3ZSBjYW4gdXNlIGl0IGluIHBvL01ha2VmaWxlCisKKworIyBTZXQgREFUQURJUk5BTUUgY29ycmVjdGx5IGlmIGl0IGlzIG5vdCBzZXQgeWV0CisjIChjb3BpZWQgZnJvbSBnbGliLWdldHRleHQubTQpCitpZiB0ZXN0IC16ICIkREFUQURJUk5BTUUiOyB0aGVuCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CitleHRlcm4gaW50IF9ubF9tc2dfY2F0X2NudHI7CisgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfbmxfbXNnX2NhdF9jbnRyCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgREFUQURJUk5BTUU9c2hhcmUKK2Vsc2UKKyAgY2FzZSAkaG9zdCBpbgorICAgICotKi1zb2xhcmlzKikKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IiAiYWNfY3ZfZnVuY19iaW5kX3RleHRkb21haW5fY29kZXNldCIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19iaW5kX3RleHRkb21haW5fY29kZXNldCIgPSB4eWVzOyB0aGVuIDoKKyAgREFUQURJUk5BTUU9c2hhcmUKK2Vsc2UKKyAgREFUQURJUk5BTUU9bGliCitmaQorCisgICAgOzsKKyAgICAqKQorICAgIERBVEFESVJOQU1FPWxpYgorICAgIDs7CisgICAgZXNhYworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorCisKKworCisKK0dFVFRFWFRfUEFDS0FHRT1hdmFoaQorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgR0VUVEVYVF9QQUNLQUdFICIkR0VUVEVYVF9QQUNLQUdFIgorX0FDRU9GCisKKworICAgZm9yIGFjX2hlYWRlciBpbiBsb2NhbGUuaAorZG8gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAibG9jYWxlLmgiICJhY19jdl9oZWFkZXJfbG9jYWxlX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2xvY2FsZV9oIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfTE9DQUxFX0ggMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworICAgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9sb2NhbGVfaCA9IHllczsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIExDX01FU1NBR0VTIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBMQ19NRVNTQUdFUy4uLiAiID4mNjsgfQoraWYgJHthbV9jdl92YWxfTENfTUVTU0FHRVMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8bG9jYWxlLmg+CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBMQ19NRVNTQUdFUworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFtX2N2X3ZhbF9MQ19NRVNTQUdFUz15ZXMKK2Vsc2UKKyAgYW1fY3ZfdmFsX0xDX01FU1NBR0VTPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFtX2N2X3ZhbF9MQ19NRVNTQUdFUyIgPiY1CiskYXNfZWNobyAiJGFtX2N2X3ZhbF9MQ19NRVNTQUdFUyIgPiY2OyB9CisgICAgaWYgdGVzdCAkYW1fY3ZfdmFsX0xDX01FU1NBR0VTID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfTENfTUVTU0FHRVMgMSIgPj5jb25mZGVmcy5oCisKKyAgICBmaQorICBmaQorICAgICBVU0VfTkxTPXllcworCisKKyAgICBndF9jdl9oYXZlX2dldHRleHQ9bm8KKworICAgIENBVE9CSkVYVD1OT05FCisgICAgWEdFVFRFWFQ9OgorICAgIElOVExMSUJTPQorCisgICAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgImxpYmludGwuaCIgImFjX2N2X2hlYWRlcl9saWJpbnRsX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2xpYmludGxfaCIgPSB4eWVzOyB0aGVuIDoKKyAgZ3RfY3ZfZnVuY19kZ2V0dGV4dF9saWJpbnRsPSJubyIKKyAgICAgIGxpYmludGxfZXh0cmFfbGlicz0iIgorCisgICAgICAjCisgICAgICAjIEZpcnN0IGNoZWNrIGluIGxpYmMKKyAgICAgICMKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG5nZXR0ZXh0IGluIGxpYmMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIG5nZXR0ZXh0IGluIGxpYmMuLi4gIiA+JjY7IH0KK2lmICR7Z3RfY3ZfZnVuY19uZ2V0dGV4dF9saWJjKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8bGliaW50bC5oPgorCitpbnQKK21haW4gKCkKK3sKK3JldHVybiAhbmdldHRleHQgKCIiLCIiLCAxKQorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGd0X2N2X2Z1bmNfbmdldHRleHRfbGliYz15ZXMKK2Vsc2UKKyAgZ3RfY3ZfZnVuY19uZ2V0dGV4dF9saWJjPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ3RfY3ZfZnVuY19uZ2V0dGV4dF9saWJjIiA+JjUKKyRhc19lY2hvICIkZ3RfY3ZfZnVuY19uZ2V0dGV4dF9saWJjIiA+JjY7IH0KKworICAgICAgaWYgdGVzdCAiJGd0X2N2X2Z1bmNfbmdldHRleHRfbGliYyIgPSAieWVzIiA7IHRoZW4KKwkgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBkZ2V0dGV4dCBpbiBsaWJjIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBkZ2V0dGV4dCBpbiBsaWJjLi4uICIgPiY2OyB9CitpZiAke2d0X2N2X2Z1bmNfZGdldHRleHRfbGliYys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPGxpYmludGwuaD4KKworaW50CittYWluICgpCit7CityZXR1cm4gIWRnZXR0ZXh0ICgiIiwiIikKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBndF9jdl9mdW5jX2RnZXR0ZXh0X2xpYmM9eWVzCitlbHNlCisgIGd0X2N2X2Z1bmNfZGdldHRleHRfbGliYz1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGd0X2N2X2Z1bmNfZGdldHRleHRfbGliYyIgPiY1CiskYXNfZWNobyAiJGd0X2N2X2Z1bmNfZGdldHRleHRfbGliYyIgPiY2OyB9CisgICAgICBmaQorCisgICAgICBpZiB0ZXN0ICIkZ3RfY3ZfZnVuY19uZ2V0dGV4dF9saWJjIiA9ICJ5ZXMiIDsgdGhlbgorICAgICAgICBmb3IgYWNfZnVuYyBpbiBiaW5kX3RleHRkb21haW5fY29kZXNldAorZG8gOgorICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJiaW5kX3RleHRkb21haW5fY29kZXNldCIgImFjX2N2X2Z1bmNfYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQiID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9CSU5EX1RFWFRET01BSU5fQ09ERVNFVCAxCitfQUNFT0YKKworZmkKK2RvbmUKKworICAgICAgZmkKKworICAgICAgIworICAgICAgIyBJZiB3ZSBkb24ndCBoYXZlIGV2ZXJ5dGhpbmcgd2Ugd2FudCwgY2hlY2sgaW4gbGliaW50bAorICAgICAgIworICAgICAgaWYgdGVzdCAiJGd0X2N2X2Z1bmNfZGdldHRleHRfbGliYyIgIT0gInllcyIgXAorCSB8fCB0ZXN0ICIkZ3RfY3ZfZnVuY19uZ2V0dGV4dF9saWJjIiAhPSAieWVzIiBcCisgICAgICAgICB8fCB0ZXN0ICIkYWNfY3ZfZnVuY19iaW5kX3RleHRkb21haW5fY29kZXNldCIgIT0gInllcyIgOyB0aGVuCisKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYmluZHRleHRkb21haW4gaW4gLWxpbnRsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBiaW5kdGV4dGRvbWFpbiBpbiAtbGludGwuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX2ludGxfYmluZHRleHRkb21haW4rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGludGwgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGJpbmR0ZXh0ZG9tYWluICgpOworaW50CittYWluICgpCit7CityZXR1cm4gYmluZHRleHRkb21haW4gKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX2ludGxfYmluZHRleHRkb21haW49eWVzCitlbHNlCisgIGFjX2N2X2xpYl9pbnRsX2JpbmR0ZXh0ZG9tYWluPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9pbnRsX2JpbmR0ZXh0ZG9tYWluIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX2ludGxfYmluZHRleHRkb21haW4iID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfaW50bF9iaW5kdGV4dGRvbWFpbiIgPSB4eWVzOyB0aGVuIDoKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbmdldHRleHQgaW4gLWxpbnRsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBuZ2V0dGV4dCBpbiAtbGludGwuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX2ludGxfbmdldHRleHQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGludGwgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIG5nZXR0ZXh0ICgpOworaW50CittYWluICgpCit7CityZXR1cm4gbmdldHRleHQgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX2ludGxfbmdldHRleHQ9eWVzCitlbHNlCisgIGFjX2N2X2xpYl9pbnRsX25nZXR0ZXh0PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9pbnRsX25nZXR0ZXh0IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX2ludGxfbmdldHRleHQiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfaW50bF9uZ2V0dGV4dCIgPSB4eWVzOyB0aGVuIDoKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZGdldHRleHQgaW4gLWxpbnRsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBkZ2V0dGV4dCBpbiAtbGludGwuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX2ludGxfZGdldHRleHQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGludGwgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGRnZXR0ZXh0ICgpOworaW50CittYWluICgpCit7CityZXR1cm4gZGdldHRleHQgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX2ludGxfZGdldHRleHQ9eWVzCitlbHNlCisgIGFjX2N2X2xpYl9pbnRsX2RnZXR0ZXh0PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9pbnRsX2RnZXR0ZXh0IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX2ludGxfZGdldHRleHQiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfaW50bF9kZ2V0dGV4dCIgPSB4eWVzOyB0aGVuIDoKKyAgZ3RfY3ZfZnVuY19kZ2V0dGV4dF9saWJpbnRsPXllcworZmkKKworZmkKKworZmkKKworCisJaWYgdGVzdCAiJGd0X2N2X2Z1bmNfZGdldHRleHRfbGliaW50bCIgIT0gInllcyIgOyB0aGVuCisJICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIC1saWNvbnYgaXMgbmVlZGVkIHRvIHVzZSBnZXR0ZXh0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIC1saWNvbnYgaXMgbmVlZGVkIHRvIHVzZSBnZXR0ZXh0Li4uICIgPiY2OyB9CisJICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogIiA+JjUKKyRhc19lY2hvICIiID4mNjsgfQorICAJICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBuZ2V0dGV4dCBpbiAtbGludGwiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIG5nZXR0ZXh0IGluIC1saW50bC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfaW50bF9uZ2V0dGV4dCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1saW50bCAtbGljb252ICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIG5nZXR0ZXh0ICgpOworaW50CittYWluICgpCit7CityZXR1cm4gbmdldHRleHQgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX2ludGxfbmdldHRleHQ9eWVzCitlbHNlCisgIGFjX2N2X2xpYl9pbnRsX25nZXR0ZXh0PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9pbnRsX25nZXR0ZXh0IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX2ludGxfbmdldHRleHQiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfaW50bF9uZ2V0dGV4dCIgPSB4eWVzOyB0aGVuIDoKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZGNnZXR0ZXh0IGluIC1saW50bCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZGNnZXR0ZXh0IGluIC1saW50bC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfaW50bF9kY2dldHRleHQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGludGwgLWxpY29udiAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBkY2dldHRleHQgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBkY2dldHRleHQgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX2ludGxfZGNnZXR0ZXh0PXllcworZWxzZQorICBhY19jdl9saWJfaW50bF9kY2dldHRleHQ9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2ludGxfZGNnZXR0ZXh0IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX2ludGxfZGNnZXR0ZXh0IiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX2ludGxfZGNnZXR0ZXh0IiA9IHh5ZXM7IHRoZW4gOgorICBndF9jdl9mdW5jX2RnZXR0ZXh0X2xpYmludGw9eWVzCisJCQlsaWJpbnRsX2V4dHJhX2xpYnM9LWxpY29udgorZWxzZQorICA6CitmaQorCitlbHNlCisgIDoKK2ZpCisKKyAgICAgICAgZmkKKworICAgICAgICAjCisgICAgICAgICMgSWYgd2UgZm91bmQgbGliaW50bCwgdGhlbiBjaGVjayBpbiBpdCBmb3IgYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQoKTsKKyAgICAgICAgIyB3ZSdsbCBwcmVmZXIgbGliYyBpZiBuZWl0aGVyIGhhdmUgYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQoKSwKKyAgICAgICAgIyBhbmQgYm90aCBoYXZlIGRnZXR0ZXh0IGFuZCBuZ2V0dGV4dAorICAgICAgICAjCisgICAgICAgIGlmIHRlc3QgIiRndF9jdl9mdW5jX2RnZXR0ZXh0X2xpYmludGwiID0gInllcyIgOyB0aGVuCisgICAgICAgICAgZ2xpYl9zYXZlX0xJQlM9IiRMSUJTIgorICAgICAgICAgIExJQlM9IiRMSUJTIC1saW50bCAkbGliaW50bF9leHRyYV9saWJzIgorICAgICAgICAgIHVuc2V0IGFjX2N2X2Z1bmNfYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQKKyAgICAgICAgICBmb3IgYWNfZnVuYyBpbiBiaW5kX3RleHRkb21haW5fY29kZXNldAorZG8gOgorICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJiaW5kX3RleHRkb21haW5fY29kZXNldCIgImFjX2N2X2Z1bmNfYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQiID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9CSU5EX1RFWFRET01BSU5fQ09ERVNFVCAxCitfQUNFT0YKKworZmkKK2RvbmUKKworICAgICAgICAgIExJQlM9IiRnbGliX3NhdmVfTElCUyIKKworICAgICAgICAgIGlmIHRlc3QgIiRhY19jdl9mdW5jX2JpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IiA9ICJ5ZXMiIDsgdGhlbgorICAgICAgICAgICAgZ3RfY3ZfZnVuY19kZ2V0dGV4dF9saWJjPW5vCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgaWYgdGVzdCAiJGd0X2N2X2Z1bmNfZGdldHRleHRfbGliYyIgPSAieWVzIiBcCisJCSYmIHRlc3QgIiRndF9jdl9mdW5jX25nZXR0ZXh0X2xpYmMiID0gInllcyI7IHRoZW4KKyAgICAgICAgICAgICAgZ3RfY3ZfZnVuY19kZ2V0dGV4dF9saWJpbnRsPW5vCisgICAgICAgICAgICBmaQorICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0ICIkZ3RfY3ZfZnVuY19kZ2V0dGV4dF9saWJjIiA9ICJ5ZXMiIFwKKwl8fCB0ZXN0ICIkZ3RfY3ZfZnVuY19kZ2V0dGV4dF9saWJpbnRsIiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgIGd0X2N2X2hhdmVfZ2V0dGV4dD15ZXMKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgIiRndF9jdl9mdW5jX2RnZXR0ZXh0X2xpYmludGwiID0gInllcyI7IHRoZW4KKyAgICAgICAgSU5UTExJQlM9Ii1saW50bCAkbGliaW50bF9leHRyYV9saWJzIgorICAgICAgZmkKKworICAgICAgaWYgdGVzdCAiJGd0X2N2X2hhdmVfZ2V0dGV4dCIgPSAieWVzIjsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0dFVFRFWFQgMSIgPj5jb25mZGVmcy5oCisKKwkjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm1zZ2ZtdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgbXNnZm10OyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9NU0dGTVQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICIkTVNHRk1UIiBpbgorICAvKikKKyAgYWNfY3ZfcGF0aF9NU0dGTVQ9IiRNU0dGTVQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU306IgorICBmb3IgYWNfZGlyIGluICRQQVRIOyBkbworICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgaWYgdGVzdCAtZiAkYWNfZGlyLyRhY193b3JkOyB0aGVuCisgICAgICBpZiB0ZXN0IC16ICJgJGFjX2Rpci8kYWNfd29yZCAtaCAyPiYxIHwgZ3JlcCAnZHYgJ2AiOyB0aGVuCisJYWNfY3ZfcGF0aF9NU0dGTVQ9IiRhY19kaXIvJGFjX3dvcmQiCisJYnJlYWsKKyAgICAgIGZpCisgICAgZmkKKyAgZG9uZQorICBJRlM9IiRhY19zYXZlX2lmcyIKKyAgdGVzdCAteiAiJGFjX2N2X3BhdGhfTVNHRk1UIiAmJiBhY19jdl9wYXRoX01TR0ZNVD0ibm8iCisgIDs7Citlc2FjCitmaQorTVNHRk1UPSIkYWNfY3ZfcGF0aF9NU0dGTVQiCitpZiB0ZXN0ICIkTVNHRk1UIiAhPSAibm8iOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTVNHRk1UIiA+JjUKKyRhc19lY2hvICIkTVNHRk1UIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCWlmIHRlc3QgIiRNU0dGTVQiICE9ICJubyI7IHRoZW4KKyAgICAgICAgICBnbGliX3NhdmVfTElCUz0iJExJQlMiCisgICAgICAgICAgTElCUz0iJExJQlMgJElOVExMSUJTIgorCSAgZm9yIGFjX2Z1bmMgaW4gZGNnZXR0ZXh0CitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImRjZ2V0dGV4dCIgImFjX2N2X2Z1bmNfZGNnZXR0ZXh0IgoraWYgdGVzdCAieCRhY19jdl9mdW5jX2RjZ2V0dGV4dCIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0RDR0VUVEVYVCAxCitfQUNFT0YKKworZmkKK2RvbmUKKworCSAgTVNHRk1UX09QVFM9CisJICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIG1zZ2ZtdCBhY2NlcHRzIC1jIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIG1zZ2ZtdCBhY2NlcHRzIC1jLi4uICIgPiY2OyB9CisJICBjYXQgPmNvbmZ0ZXN0LmZvbyA8PF9BQ0VPRgorCittc2dpZCAiIgorbXNnc3RyICIiCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiUHJvamVjdC1JZC1WZXJzaW9uOiB0ZXN0IDEuMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDctMDItMTUgMTI6MDErMDEwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogdGVzdCA8Zm9vQGJhci54eD5cbiIKKyJMYW5ndWFnZS1UZWFtOiBDIDxMTEBsaS5vcmc+XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisKK19BQ0VPRgoraWYgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkTVNHRk1UIC1jIC1vIC9kZXYvbnVsbCBjb25mdGVzdC5mb28iOyB9ID4mNQorICAoJE1TR0ZNVCAtYyAtbyAvZGV2L251bGwgY29uZnRlc3QuZm9vKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICBNU0dGTVRfT1BUUz0tYzsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KK2Vsc2UgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitlY2hvICIkYXNfbWU6IGZhaWxlZCBpbnB1dCB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuZm9vID4mNQorZmkKKworCSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJnbXNnZm10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBnbXNnZm10OyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9HTVNHRk1UKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkR01TR0ZNVCBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9HTVNHRk1UPSIkR01TR0ZNVCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfR01TR0ZNVD0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9HTVNHRk1UIiAmJiBhY19jdl9wYXRoX0dNU0dGTVQ9IiRNU0dGTVQiCisgIDs7Citlc2FjCitmaQorR01TR0ZNVD0kYWNfY3ZfcGF0aF9HTVNHRk1UCitpZiB0ZXN0IC1uICIkR01TR0ZNVCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRHTVNHRk1UIiA+JjUKKyRhc19lY2hvICIkR01TR0ZNVCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisJICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInhnZXR0ZXh0Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSB4Z2V0dGV4dDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfWEdFVFRFWFQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICIkWEdFVFRFWFQiIGluCisgIC8qKQorICBhY19jdl9wYXRoX1hHRVRURVhUPSIkWEdFVFRFWFQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU306IgorICBmb3IgYWNfZGlyIGluICRQQVRIOyBkbworICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgaWYgdGVzdCAtZiAkYWNfZGlyLyRhY193b3JkOyB0aGVuCisgICAgICBpZiB0ZXN0IC16ICJgJGFjX2Rpci8kYWNfd29yZCAtaCAyPiYxIHwgZ3JlcCAnKEhFTFApJ2AiOyB0aGVuCisJYWNfY3ZfcGF0aF9YR0VUVEVYVD0iJGFjX2Rpci8kYWNfd29yZCIKKwlicmVhaworICAgICAgZmkKKyAgICBmaQorICBkb25lCisgIElGUz0iJGFjX3NhdmVfaWZzIgorICB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9YR0VUVEVYVCIgJiYgYWNfY3ZfcGF0aF9YR0VUVEVYVD0iOiIKKyAgOzsKK2VzYWMKK2ZpCitYR0VUVEVYVD0iJGFjX2N2X3BhdGhfWEdFVFRFWFQiCitpZiB0ZXN0ICIkWEdFVFRFWFQiICE9ICI6IjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFhHRVRURVhUIiA+JjUKKyRhc19lY2hvICIkWEdFVFRFWFQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKwkgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CitleHRlcm4gaW50IF9ubF9tc2dfY2F0X2NudHI7CisJCQkgcmV0dXJuIF9ubF9tc2dfY2F0X2NudHIKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBDQVRPQkpFWFQ9LmdtbworICAgICAgICAgICAgIERBVEFESVJOQU1FPXNoYXJlCitlbHNlCisgIGNhc2UgJGhvc3QgaW4KKwkgICAgKi0qLXNvbGFyaXMqKQorCSAgICAJICAgICAgICAgICAgICAgIAkgICAgCSAgICAgICAgICAgICAgICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJiaW5kX3RleHRkb21haW5fY29kZXNldCIgImFjX2N2X2Z1bmNfYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQiID0geHllczsgdGhlbiA6CisgIENBVE9CSkVYVD0uZ21vCisgICAgICAgICAgICAgICBEQVRBRElSTkFNRT1zaGFyZQorZWxzZQorICBDQVRPQkpFWFQ9Lm1vCisgICAgICAgICAgICAgICBEQVRBRElSTkFNRT1saWIKK2ZpCisKKwkgICAgOzsKKwkgICAgKi0qLW9wZW5ic2QqKQorCSAgICBDQVRPQkpFWFQ9Lm1vCisgICAgICAgICAgICBEQVRBRElSTkFNRT1zaGFyZQorCSAgICA7OworCSAgICAqKQorCSAgICBDQVRPQkpFWFQ9Lm1vCisgICAgICAgICAgICBEQVRBRElSTkFNRT1saWIKKwkgICAgOzsKKwkgICAgZXNhYworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgICAgTElCUz0iJGdsaWJfc2F2ZV9MSUJTIgorCSAgSU5TVE9CSkVYVD0ubW8KKwllbHNlCisJICBndF9jdl9oYXZlX2dldHRleHQ9bm8KKwlmaQorICAgICAgZmkKKworZmkKKworCisKKyAgICBpZiB0ZXN0ICIkZ3RfY3ZfaGF2ZV9nZXR0ZXh0IiA9ICJ5ZXMiIDsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBFTkFCTEVfTkxTIDEiID4+Y29uZmRlZnMuaAorCisgICAgZmkKKworICAgICAgICBpZiB0ZXN0ICIkWEdFVFRFWFQiICE9ICI6IjsgdGhlbgorICAgICAgICAgICAgICAgICAgaWYgJFhHRVRURVhUIC0tb21pdC1oZWFkZXIgL2Rldi9udWxsIDI+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICA6IDsKKyAgICAgIGVsc2UKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IGZvdW5kIHhnZXR0ZXh0IHByb2dyYW0gaXMgbm90IEdOVSB4Z2V0dGV4dDsgaWdub3JlIGl0IiA+JjUKKyRhc19lY2hvICJmb3VuZCB4Z2V0dGV4dCBwcm9ncmFtIGlzIG5vdCBHTlUgeGdldHRleHQ7IGlnbm9yZSBpdCIgPiY2OyB9CisgICAgICAgIFhHRVRURVhUPSI6IgorICAgICAgZmkKKyAgICBmaQorCisgICAgIyBXZSBuZWVkIHRvIHByb2Nlc3MgdGhlIHBvLyBkaXJlY3RvcnkuCisgICAgUE9TVUI9cG8KKworICAgIGFjX2NvbmZpZ19jb21tYW5kcz0iJGFjX2NvbmZpZ19jb21tYW5kcyBkZWZhdWx0LTEiCisKKworICAgICAgICAgICAgICAgIGZvciBsYW5nIGluICRBTExfTElOR1VBUzsgZG8KKyAgICAgIEdNT0ZJTEVTPSIkR01PRklMRVMgJGxhbmcuZ21vIgorICAgICAgUE9GSUxFUz0iJFBPRklMRVMgJGxhbmcucG8iCisgICAgZG9uZQorCisKKworCisKKworCisKKworCisKKworCisgICBpZiB0ZXN0ICIkZ3RfY3ZfaGF2ZV9nZXR0ZXh0IiA9ICJ5ZXMiOyB0aGVuCisgICAgIGlmIHRlc3QgIngkQUxMX0xJTkdVQVMiID0gIngiOyB0aGVuCisgICAgICAgTElOR1VBUz0KKyAgICAgZWxzZQorICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGNhdGFsb2dzIHRvIGJlIGluc3RhbGxlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgY2F0YWxvZ3MgdG8gYmUgaW5zdGFsbGVkLi4uICIgPiY2OyB9CisgICAgICAgTkVXX0xJTkdVQVM9CisgICAgICAgZm9yIHByZXNlbnRsYW5nIGluICRBTExfTElOR1VBUzsgZG8KKyAgICAgICAgIHVzZWl0PW5vCisgICAgICAgICBpZiB0ZXN0ICIlVU5TRVQlIiAhPSAiJHtMSU5HVUFTLSVVTlNFVCV9IjsgdGhlbgorICAgICAgICAgICBkZXNpcmVkbGFuZ3VhZ2VzPSIkTElOR1VBUyIKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgZGVzaXJlZGxhbmd1YWdlcz0iJEFMTF9MSU5HVUFTIgorICAgICAgICAgZmkKKyAgICAgICAgIGZvciBkZXNpcmVkbGFuZyBpbiAkZGVzaXJlZGxhbmd1YWdlczsgZG8KKyAJICAgIyBVc2UgdGhlIHByZXNlbnRsYW5nIGNhdGFsb2cgaWYgZGVzaXJlZGxhbmcgaXMKKyAgICAgICAgICAgIyAgIGEuIGVxdWFsIHRvIHByZXNlbnRsYW5nLCBvcgorICAgICAgICAgICAjICAgYi4gYSB2YXJpYW50IG9mIHByZXNlbnRsYW5nIChiZWNhdXNlIGluIHRoaXMgY2FzZSwKKyAgICAgICAgICAgIyAgICAgIHByZXNlbnRsYW5nIGNhbiBiZSB1c2VkIGFzIGEgZmFsbGJhY2sgZm9yIG1lc3NhZ2VzCisgICAgICAgICAgICMgICAgICB3aGljaCBhcmUgbm90IHRyYW5zbGF0ZWQgaW4gdGhlIGRlc2lyZWRsYW5nIGNhdGFsb2cpLgorICAgICAgICAgICBjYXNlICIkZGVzaXJlZGxhbmciIGluCisgICAgICAgICAgICAgIiRwcmVzZW50bGFuZyIqKSB1c2VpdD15ZXM7OworICAgICAgICAgICBlc2FjCisgICAgICAgICBkb25lCisgICAgICAgICBpZiB0ZXN0ICR1c2VpdCA9IHllczsgdGhlbgorICAgICAgICAgICBORVdfTElOR1VBUz0iJE5FV19MSU5HVUFTICRwcmVzZW50bGFuZyIKKyAgICAgICAgIGZpCisgICAgICAgZG9uZQorICAgICAgIExJTkdVQVM9JE5FV19MSU5HVUFTCisgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRMSU5HVUFTIiA+JjUKKyRhc19lY2hvICIkTElOR1VBUyIgPiY2OyB9CisgICAgIGZpCisKKyAgICAgICAgICBpZiB0ZXN0IC1uICIkTElOR1VBUyI7IHRoZW4KKyAgICAgICBmb3IgbGFuZyBpbiAkTElOR1VBUzsgZG8gQ0FUQUxPR1M9IiRDQVRBTE9HUyAkbGFuZyRDQVRPQkpFWFQiOyBkb25lCisgICAgIGZpCisgICBmaQorCisgICAgICAgICAgICBNS0lOU1RBTExESVJTPQorICAgaWYgdGVzdCAtbiAiJGFjX2F1eF9kaXIiOyB0aGVuCisgICAgIE1LSU5TVEFMTERJUlM9IiRhY19hdXhfZGlyL21raW5zdGFsbGRpcnMiCisgICBmaQorICAgaWYgdGVzdCAteiAiJE1LSU5TVEFMTERJUlMiOyB0aGVuCisgICAgIE1LSU5TVEFMTERJUlM9IlwkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMiCisgICBmaQorCisKKyAgICAgICAgIHRlc3QgLWQgcG8gfHwgbWtkaXIgcG8KKyAgIGlmIHRlc3QgIngkc3JjZGlyIiAhPSAieC4iOyB0aGVuCisgICAgIGlmIHRlc3QgInhgZWNobyAkc3JjZGlyIHwgc2VkICdzQC8uKkBAJ2AiID0gIngiOyB0aGVuCisgICAgICAgcG9zcmNwcmVmaXg9IiRzcmNkaXIvIgorICAgICBlbHNlCisgICAgICAgcG9zcmNwcmVmaXg9Ii4uLyRzcmNkaXIvIgorICAgICBmaQorICAgZWxzZQorICAgICBwb3NyY3ByZWZpeD0iLi4vIgorICAgZmkKKyAgIHJtIC1mIHBvL1BPVEZJTEVTCisgICBzZWQgLWUgIi9eIy9kIiAtZSAiL15cJC9kIiAtZSAicywuKiwJJHBvc3JjcHJlZml4JiBcXFxcLCIgLWUgIlwkcy9cKC4qXCkgXFxcXC9cMS8iIFwKKwk8ICRzcmNkaXIvcG8vUE9URklMRVMuaW4gPiBwby9QT1RGSUxFUworCisKK2F2YWhpbG9jYWxlZGlyPScke3ByZWZpeH0vJHtEQVRBRElSTkFNRX0vbG9jYWxlJworCisKKyMgQ2hlY2sgZm9yIHBrZy1jb25maWcgbWFudWFsbHkgZmlyc3QsIGFzIGlmIGl0cyBub3QgaW5zdGFsbGVkIHRoZQorIyBQS0dfUFJPR19QS0dfQ09ORklHIG1hY3JvIHdvbid0IGJlIGRlZmluZWQuCisjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInBrZy1jb25maWciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IHBrZy1jb25maWc7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2hhdmVfcGtnX2NvbmZpZys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRoYXZlX3BrZ19jb25maWciOyB0aGVuCisgIGFjX2N2X3Byb2dfaGF2ZV9wa2dfY29uZmlnPSIkaGF2ZV9wa2dfY29uZmlnIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfaGF2ZV9wa2dfY29uZmlnPSJ5ZXMiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgdGVzdCAteiAiJGFjX2N2X3Byb2dfaGF2ZV9wa2dfY29uZmlnIiAmJiBhY19jdl9wcm9nX2hhdmVfcGtnX2NvbmZpZz0ibm8iCitmaQorZmkKK2hhdmVfcGtnX2NvbmZpZz0kYWNfY3ZfcHJvZ19oYXZlX3BrZ19jb25maWcKK2lmIHRlc3QgLW4gIiRoYXZlX3BrZ19jb25maWciOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkaGF2ZV9wa2dfY29uZmlnIiA+JjUKKyRhc19lY2hvICIkaGF2ZV9wa2dfY29uZmlnIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKworaWYgdGVzdCB4IiRoYXZlX3BrZ19jb25maWciID0gInhubyI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAicGtnLWNvbmZpZyBpcyByZXF1aXJlZCB0byBpbnN0YWxsIHRoaXMgcHJvZ3JhbSIgIiRMSU5FTk8iIDUKK2ZpCisKKworCisKKworCisKK2lmIHRlc3QgIngkYWNfY3ZfZW52X1BLR19DT05GSUdfc2V0IiAhPSAieHNldCI7IHRoZW4KKwlpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1wa2ctY29uZmlnIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXBrZy1jb25maWc7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX1BLR19DT05GSUcrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRQS0dfQ09ORklHIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX1BLR19DT05GSUc9IiRQS0dfQ09ORklHIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcGF0aF9QS0dfQ09ORklHPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIDs7Citlc2FjCitmaQorUEtHX0NPTkZJRz0kYWNfY3ZfcGF0aF9QS0dfQ09ORklHCitpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRQS0dfQ09ORklHIiA+JjUKKyRhc19lY2hvICIkUEtHX0NPTkZJRyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfUEtHX0NPTkZJRyI7IHRoZW4KKyAgYWNfcHRfUEtHX0NPTkZJRz0kUEtHX0NPTkZJRworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInBrZy1jb25maWciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IHBrZy1jb25maWc7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX2FjX3B0X1BLR19DT05GSUcrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRhY19wdF9QS0dfQ09ORklHIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX2FjX3B0X1BLR19DT05GSUc9IiRhY19wdF9QS0dfQ09ORklHIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcGF0aF9hY19wdF9QS0dfQ09ORklHPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIDs7Citlc2FjCitmaQorYWNfcHRfUEtHX0NPTkZJRz0kYWNfY3ZfcGF0aF9hY19wdF9QS0dfQ09ORklHCitpZiB0ZXN0IC1uICIkYWNfcHRfUEtHX0NPTkZJRyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19wdF9QS0dfQ09ORklHIiA+JjUKKyRhc19lY2hvICIkYWNfcHRfUEtHX0NPTkZJRyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX3B0X1BLR19DT05GSUciID0geDsgdGhlbgorICAgIFBLR19DT05GSUc9IiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBQS0dfQ09ORklHPSRhY19wdF9QS0dfQ09ORklHCisgIGZpCitlbHNlCisgIFBLR19DT05GSUc9IiRhY19jdl9wYXRoX1BLR19DT05GSUciCitmaQorCitmaQoraWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCisJX3BrZ19taW5fdmVyc2lvbj0wLjkuMAorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgcGtnLWNvbmZpZyBpcyBhdCBsZWFzdCB2ZXJzaW9uICRfcGtnX21pbl92ZXJzaW9uIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHBrZy1jb25maWcgaXMgYXQgbGVhc3QgdmVyc2lvbiAkX3BrZ19taW5fdmVyc2lvbi4uLiAiID4mNjsgfQorCWlmICRQS0dfQ09ORklHIC0tYXRsZWFzdC1wa2djb25maWctdmVyc2lvbiAkX3BrZ19taW5fdmVyc2lvbjsgdGhlbgorCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCWVsc2UKKwkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisJCVBLR19DT05GSUc9IiIKKwlmaQorZmkKKworIworIyBDaGVjayBmb3IgR0xJQiAyLjAKKyMKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1nbGliIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2dsaWIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9nbGliOyBjYXNlICIke2VuYWJsZXZhbH0iIGluCisgICAgICAgICAgICAgICAgeWVzKSBIQVZFX0dMSUI9eWVzIDs7CisgICAgICAgICAgICAgICAgbm8pICBIQVZFX0dMSUI9bm8gOzsKKyAgICAgICAgICAgICAgICAqKSBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtZ2xpYiIgIiRMSU5FTk8iIDUgOzsKKyAgICAgICAgZXNhYworZWxzZQorICBIQVZFX0dMSUI9eWVzCitmaQorCisKK2lmIHRlc3QgIngkSEFWRV9HTElCIiA9ICJ4eWVzIiA7IHRoZW4KKworcGtnX2ZhaWxlZD1ubworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgR0xJQjIwIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBHTElCMjAuLi4gIiA+JjY7IH0KKworaWYgdGVzdCAtbiAiJEdMSUIyMF9DRkxBR1MiOyB0aGVuCisgICAgcGtnX2N2X0dMSUIyMF9DRkxBR1M9IiRHTElCMjBfQ0ZMQUdTIgorIGVsaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCisgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKKyAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiIGdsaWItMi4wID49IDIuNC4wIFwiIjsgfSA+JjUKKyAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICIgZ2xpYi0yLjAgPj0gMi40LjAgIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgcGtnX2N2X0dMSUIyMF9DRkxBR1M9YCRQS0dfQ09ORklHIC0tY2ZsYWdzICIgZ2xpYi0yLjAgPj0gMi40LjAgIiAyPi9kZXYvbnVsbGAKK2Vsc2UKKyAgcGtnX2ZhaWxlZD15ZXMKK2ZpCisgZWxzZQorICAgIHBrZ19mYWlsZWQ9dW50cmllZAorZmkKK2lmIHRlc3QgLW4gIiRHTElCMjBfTElCUyI7IHRoZW4KKyAgICBwa2dfY3ZfR0xJQjIwX0xJQlM9IiRHTElCMjBfTElCUyIKKyBlbGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgorICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCisgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcIiBnbGliLTIuMCA+PSAyLjQuMCBcIiI7IH0gPiY1CisgICgkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAiIGdsaWItMi4wID49IDIuNC4wICIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCisgIHBrZ19jdl9HTElCMjBfTElCUz1gJFBLR19DT05GSUcgLS1saWJzICIgZ2xpYi0yLjAgPj0gMi40LjAgIiAyPi9kZXYvbnVsbGAKK2Vsc2UKKyAgcGtnX2ZhaWxlZD15ZXMKK2ZpCisgZWxzZQorICAgIHBrZ19mYWlsZWQ9dW50cmllZAorZmkKKworCisKK2lmIHRlc3QgJHBrZ19mYWlsZWQgPSB5ZXM7IHRoZW4KKyAgIAl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKworaWYgJFBLR19DT05GSUcgLS1hdGxlYXN0LXBrZ2NvbmZpZy12ZXJzaW9uIDAuMjA7IHRoZW4KKyAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPXllcworZWxzZQorICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9bm8KK2ZpCisgICAgICAgIGlmIHRlc3QgJF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZCA9IHllczsgdGhlbgorCSAgICAgICAgR0xJQjIwX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tc2hvcnQtZXJyb3JzIC0tcHJpbnQtZXJyb3JzICIgZ2xpYi0yLjAgPj0gMi40LjAgIiAyPiYxYAorICAgICAgICBlbHNlCisJICAgICAgICBHTElCMjBfUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1wcmludC1lcnJvcnMgIiBnbGliLTIuMCA+PSAyLjQuMCAiIDI+JjFgCisgICAgICAgIGZpCisJIyBQdXQgdGhlIG5hc3R5IGVycm9yIG1lc3NhZ2UgaW4gY29uZmlnLmxvZyB3aGVyZSBpdCBiZWxvbmdzCisJZWNobyAiJEdMSUIyMF9QS0dfRVJST1JTIiA+JjUKKworCWFzX2ZuX2Vycm9yICQ/ICJQYWNrYWdlIHJlcXVpcmVtZW50cyAoIGdsaWItMi4wID49IDIuNC4wICkgd2VyZSBub3QgbWV0OgorCiskR0xJQjIwX1BLR19FUlJPUlMKKworQ29uc2lkZXIgYWRqdXN0aW5nIHRoZSBQS0dfQ09ORklHX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUgaWYgeW91CitpbnN0YWxsZWQgc29mdHdhcmUgaW4gYSBub24tc3RhbmRhcmQgcHJlZml4LgorCitBbHRlcm5hdGl2ZWx5LCB5b3UgbWF5IHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIEdMSUIyMF9DRkxBR1MKK2FuZCBHTElCMjBfTElCUyB0byBhdm9pZCB0aGUgbmVlZCB0byBjYWxsIHBrZy1jb25maWcuCitTZWUgdGhlIHBrZy1jb25maWcgbWFuIHBhZ2UgZm9yIG1vcmUgZGV0YWlscy4iICIkTElORU5PIiA1CisKK2VsaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHVudHJpZWQ7IHRoZW4KKyAgICAgCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCXsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgJD8gIlRoZSBwa2ctY29uZmlnIHNjcmlwdCBjb3VsZCBub3QgYmUgZm91bmQgb3IgaXMgdG9vIG9sZC4gIE1ha2Ugc3VyZSBpdAoraXMgaW4geW91ciBQQVRIIG9yIHNldCB0aGUgUEtHX0NPTkZJRyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUgZnVsbAorcGF0aCB0byBwa2ctY29uZmlnLgorCitBbHRlcm5hdGl2ZWx5LCB5b3UgbWF5IHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIEdMSUIyMF9DRkxBR1MKK2FuZCBHTElCMjBfTElCUyB0byBhdm9pZCB0aGUgbmVlZCB0byBjYWxsIHBrZy1jb25maWcuCitTZWUgdGhlIHBrZy1jb25maWcgbWFuIHBhZ2UgZm9yIG1vcmUgZGV0YWlscy4KKworVG8gZ2V0IHBrZy1jb25maWcsIHNlZSA8aHR0cDovL3BrZy1jb25maWcuZnJlZWRlc2t0b3Aub3JnLz4uCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorCitlbHNlCisJR0xJQjIwX0NGTEFHUz0kcGtnX2N2X0dMSUIyMF9DRkxBR1MKKwlHTElCMjBfTElCUz0kcGtnX2N2X0dMSUIyMF9MSUJTCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKK2ZpCisKKworZmkKKyBpZiB0ZXN0ICJ4JEhBVkVfR0xJQiIgPSAieHllcyI7IHRoZW4KKyAgSEFWRV9HTElCX1RSVUU9CisgIEhBVkVfR0xJQl9GQUxTRT0nIycKK2Vsc2UKKyAgSEFWRV9HTElCX1RSVUU9JyMnCisgIEhBVkVfR0xJQl9GQUxTRT0KK2ZpCisKKworIworIyBDaGVjayBmb3IgR0xJQidzIGdvYmplY3QgMi4wCisjCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZ29iamVjdCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9nb2JqZWN0K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfZ29iamVjdDsgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorICAgICAgICAgICAgICAgIHllcykgSEFWRV9HT0JKRUNUPXllcyA7OworICAgICAgICAgICAgICAgIG5vKSAgSEFWRV9HT0JKRUNUPW5vIDs7CisgICAgICAgICAgICAgICAgKikgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLWdvYmplY3QiICIkTElORU5PIiA1IDs7CisgICAgICAgIGVzYWMKK2Vsc2UKKyAgSEFWRV9HT0JKRUNUPXllcworZmkKKworCitpZiB0ZXN0ICJ4JEhBVkVfR09CSkVDVCIgPSAieHllcyIgOyB0aGVuCisKK3BrZ19mYWlsZWQ9bm8KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEdPQkpFQ1QiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEdPQkpFQ1QuLi4gIiA+JjY7IH0KKworaWYgdGVzdCAtbiAiJEdPQkpFQ1RfQ0ZMQUdTIjsgdGhlbgorICAgIHBrZ19jdl9HT0JKRUNUX0NGTEFHUz0iJEdPQkpFQ1RfQ0ZMQUdTIgorIGVsaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCisgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKKyAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiIGdsaWItMi4wID49IDIuNC4wIGdvYmplY3QtMi4wIFwiIjsgfSA+JjUKKyAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICIgZ2xpYi0yLjAgPj0gMi40LjAgZ29iamVjdC0yLjAgIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgcGtnX2N2X0dPQkpFQ1RfQ0ZMQUdTPWAkUEtHX0NPTkZJRyAtLWNmbGFncyAiIGdsaWItMi4wID49IDIuNC4wIGdvYmplY3QtMi4wICIgMj4vZGV2L251bGxgCitlbHNlCisgIHBrZ19mYWlsZWQ9eWVzCitmaQorIGVsc2UKKyAgICBwa2dfZmFpbGVkPXVudHJpZWQKK2ZpCitpZiB0ZXN0IC1uICIkR09CSkVDVF9MSUJTIjsgdGhlbgorICAgIHBrZ19jdl9HT0JKRUNUX0xJQlM9IiRHT0JKRUNUX0xJQlMiCisgZWxpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KKyAgICBpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgXAorICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgXCIgZ2xpYi0yLjAgPj0gMi40LjAgZ29iamVjdC0yLjAgXCIiOyB9ID4mNQorICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgIiBnbGliLTIuMCA+PSAyLjQuMCBnb2JqZWN0LTIuMCAiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICBwa2dfY3ZfR09CSkVDVF9MSUJTPWAkUEtHX0NPTkZJRyAtLWxpYnMgIiBnbGliLTIuMCA+PSAyLjQuMCBnb2JqZWN0LTIuMCAiIDI+L2Rldi9udWxsYAorZWxzZQorICBwa2dfZmFpbGVkPXllcworZmkKKyBlbHNlCisgICAgcGtnX2ZhaWxlZD11bnRyaWVkCitmaQorCisKKworaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHllczsgdGhlbgorICAgCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCitpZiAkUEtHX0NPTkZJRyAtLWF0bGVhc3QtcGtnY29uZmlnLXZlcnNpb24gMC4yMDsgdGhlbgorICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9eWVzCitlbHNlCisgICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD1ubworZmkKKyAgICAgICAgaWYgdGVzdCAkX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkID0geWVzOyB0aGVuCisJICAgICAgICBHT0JKRUNUX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tc2hvcnQtZXJyb3JzIC0tcHJpbnQtZXJyb3JzICIgZ2xpYi0yLjAgPj0gMi40LjAgZ29iamVjdC0yLjAgIiAyPiYxYAorICAgICAgICBlbHNlCisJICAgICAgICBHT0JKRUNUX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tcHJpbnQtZXJyb3JzICIgZ2xpYi0yLjAgPj0gMi40LjAgZ29iamVjdC0yLjAgIiAyPiYxYAorICAgICAgICBmaQorCSMgUHV0IHRoZSBuYXN0eSBlcnJvciBtZXNzYWdlIGluIGNvbmZpZy5sb2cgd2hlcmUgaXQgYmVsb25ncworCWVjaG8gIiRHT0JKRUNUX1BLR19FUlJPUlMiID4mNQorCisJYXNfZm5fZXJyb3IgJD8gIlBhY2thZ2UgcmVxdWlyZW1lbnRzICggZ2xpYi0yLjAgPj0gMi40LjAgZ29iamVjdC0yLjAgKSB3ZXJlIG5vdCBtZXQ6CisKKyRHT0JKRUNUX1BLR19FUlJPUlMKKworQ29uc2lkZXIgYWRqdXN0aW5nIHRoZSBQS0dfQ09ORklHX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUgaWYgeW91CitpbnN0YWxsZWQgc29mdHdhcmUgaW4gYSBub24tc3RhbmRhcmQgcHJlZml4LgorCitBbHRlcm5hdGl2ZWx5LCB5b3UgbWF5IHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIEdPQkpFQ1RfQ0ZMQUdTCithbmQgR09CSkVDVF9MSUJTIHRvIGF2b2lkIHRoZSBuZWVkIHRvIGNhbGwgcGtnLWNvbmZpZy4KK1NlZSB0aGUgcGtnLWNvbmZpZyBtYW4gcGFnZSBmb3IgbW9yZSBkZXRhaWxzLiIgIiRMSU5FTk8iIDUKKworZWxpZiB0ZXN0ICRwa2dfZmFpbGVkID0gdW50cmllZDsgdGhlbgorICAgICAJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisJeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAiVGhlIHBrZy1jb25maWcgc2NyaXB0IGNvdWxkIG5vdCBiZSBmb3VuZCBvciBpcyB0b28gb2xkLiAgTWFrZSBzdXJlIGl0CitpcyBpbiB5b3VyIFBBVEggb3Igc2V0IHRoZSBQS0dfQ09ORklHIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHRoZSBmdWxsCitwYXRoIHRvIHBrZy1jb25maWcuCisKK0FsdGVybmF0aXZlbHksIHlvdSBtYXkgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgR09CSkVDVF9DRkxBR1MKK2FuZCBHT0JKRUNUX0xJQlMgdG8gYXZvaWQgdGhlIG5lZWQgdG8gY2FsbCBwa2ctY29uZmlnLgorU2VlIHRoZSBwa2ctY29uZmlnIG1hbiBwYWdlIGZvciBtb3JlIGRldGFpbHMuCisKK1RvIGdldCBwa2ctY29uZmlnLCBzZWUgPGh0dHA6Ly9wa2ctY29uZmlnLmZyZWVkZXNrdG9wLm9yZy8+LgorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KKworZWxzZQorCUdPQkpFQ1RfQ0ZMQUdTPSRwa2dfY3ZfR09CSkVDVF9DRkxBR1MKKwlHT0JKRUNUX0xJQlM9JHBrZ19jdl9HT0JKRUNUX0xJQlMKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworZmkKKworCitmaQorIGlmIHRlc3QgIngkSEFWRV9HT0JKRUNUIiA9ICJ4eWVzIjsgdGhlbgorICBIQVZFX0dPQkpFQ1RfVFJVRT0KKyAgSEFWRV9HT0JKRUNUX0ZBTFNFPScjJworZWxzZQorICBIQVZFX0dPQkpFQ1RfVFJVRT0nIycKKyAgSEFWRV9HT0JKRUNUX0ZBTFNFPQorZmkKKworCisjCisjIEludHJvc3BlY3Rpb24gc3VwcG9ydC4KKyMKKworCisKKyAgICAgICAgICAgICAgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtaW50cm9zcGVjdGlvbiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9pbnRyb3NwZWN0aW9uK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfaW50cm9zcGVjdGlvbjsKK2Vsc2UKKyAgZW5hYmxlX2ludHJvc3BlY3Rpb249YXV0bworZmkKKworCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZ29iamVjdC1pbnRyb3NwZWN0aW9uIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBnb2JqZWN0LWludHJvc3BlY3Rpb24uLi4gIiA+JjY7IH0KKworICAgICAgICBjYXNlICRlbmFibGVfaW50cm9zcGVjdGlvbiBpbiAjKAorICBubykgOgorICAgICAgICAgICAgZm91bmRfaW50cm9zcGVjdGlvbj0ibm8gKGRpc2FibGVkLCB1c2UgLS1lbmFibGUtaW50cm9zcGVjdGlvbiB0byBlbmFibGUpIgorICAgICA7OyAjKAorICAgICAgeWVzKSA6CisgICAgICAgICAgICBpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgXAorICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgXCJnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wXCIiOyB9ID4mNQorICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgImdvYmplY3QtaW50cm9zcGVjdGlvbi0xLjAiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICA6CitlbHNlCisgIGFzX2ZuX2Vycm9yICQ/ICJnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wIGlzIG5vdCBpbnN0YWxsZWQiICIkTElORU5PIiA1CitmaQorICAgICAgICBpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgXAorICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgXCJnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wID49IDAuOS41XCIiOyB9ID4mNQorICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgImdvYmplY3QtaW50cm9zcGVjdGlvbi0xLjAgPj0gMC45LjUiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICBmb3VuZF9pbnRyb3NwZWN0aW9uPXllcworZWxzZQorICBhc19mbl9lcnJvciAkPyAiWW91IG5lZWQgdG8gaGF2ZSBnb2JqZWN0LWludHJvc3BlY3Rpb24gPj0gMC45LjUgaW5zdGFsbGVkIHRvIGJ1aWxkIGF2YWhpIiAiJExJTkVOTyIgNQorZmkKKyAgICAgOzsgIygKKyAgICAgIGF1dG8pIDoKKyAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCisgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcImdvYmplY3QtaW50cm9zcGVjdGlvbi0xLjAgPj0gMC45LjVcIiI7IH0gPiY1CisgICgkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAiZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMCA+PSAwLjkuNSIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCisgIGZvdW5kX2ludHJvc3BlY3Rpb249eWVzCitlbHNlCisgIGZvdW5kX2ludHJvc3BlY3Rpb249bm8KK2ZpCisgICAgIDs7ICMoCisgICopIDoKKyAgICAgICAgICAgICAgICBhc19mbl9lcnJvciAkPyAiaW52YWxpZCBhcmd1bWVudCBwYXNzZWQgdG8gLS1lbmFibGUtaW50cm9zcGVjdGlvbiwgc2hvdWxkIGJlIG9uZSBvZiBbbm8vYXV0by95ZXNdIiAiJExJTkVOTyIgNQorICAgICA7OworZXNhYworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZm91bmRfaW50cm9zcGVjdGlvbiIgPiY1CiskYXNfZWNobyAiJGZvdW5kX2ludHJvc3BlY3Rpb24iID4mNjsgfQorCisgICAgSU5UUk9TUEVDVElPTl9TQ0FOTkVSPQorICAgIElOVFJPU1BFQ1RJT05fQ09NUElMRVI9CisgICAgSU5UUk9TUEVDVElPTl9HRU5FUkFURT0KKyAgICBJTlRST1NQRUNUSU9OX0dJUkRJUj0KKyAgICBJTlRST1NQRUNUSU9OX1RZUEVMSUJESVI9CisgICAgaWYgdGVzdCAieCRmb3VuZF9pbnRyb3NwZWN0aW9uIiA9ICJ4eWVzIjsgdGhlbgorICAgICAgIElOVFJPU1BFQ1RJT05fU0NBTk5FUj1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1nX2lyX3NjYW5uZXIgZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMGAKKyAgICAgICBJTlRST1NQRUNUSU9OX0NPTVBJTEVSPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWdfaXJfY29tcGlsZXIgZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMGAKKyAgICAgICBJTlRST1NQRUNUSU9OX0dFTkVSQVRFPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWdfaXJfZ2VuZXJhdGUgZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMGAKKyAgICAgICBJTlRST1NQRUNUSU9OX0dJUkRJUj1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1naXJkaXIgZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMGAKKyAgICAgICBJTlRST1NQRUNUSU9OX1RZUEVMSUJESVI9IiQoJFBLR19DT05GSUcgLS12YXJpYWJsZT10eXBlbGliZGlyIGdvYmplY3QtaW50cm9zcGVjdGlvbi0xLjApIgorICAgICAgIElOVFJPU1BFQ1RJT05fQ0ZMQUdTPWAkUEtHX0NPTkZJRyAtLWNmbGFncyBnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wYAorICAgICAgIElOVFJPU1BFQ1RJT05fTElCUz1gJFBLR19DT05GSUcgLS1saWJzIGdvYmplY3QtaW50cm9zcGVjdGlvbi0xLjBgCisgICAgICAgSU5UUk9TUEVDVElPTl9NQUtFRklMRT1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1kYXRhZGlyIGdvYmplY3QtaW50cm9zcGVjdGlvbi0xLjBgL2dvYmplY3QtaW50cm9zcGVjdGlvbi0xLjAvTWFrZWZpbGUuaW50cm9zcGVjdGlvbgorICAgIGZpCisKKworCisKKworCisKKworCisgICAgIGlmIHRlc3QgIngkZm91bmRfaW50cm9zcGVjdGlvbiIgPSAieHllcyI7IHRoZW4KKyAgSEFWRV9JTlRST1NQRUNUSU9OX1RSVUU9CisgIEhBVkVfSU5UUk9TUEVDVElPTl9GQUxTRT0nIycKK2Vsc2UKKyAgSEFWRV9JTlRST1NQRUNUSU9OX1RSVUU9JyMnCisgIEhBVkVfSU5UUk9TUEVDVElPTl9GQUxTRT0KK2ZpCisKKworCisKKyMKKyMgQ2hlY2sgZm9yIFF0IDMKKyMKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1xdDMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfcXQzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfcXQzOyBjYXNlICIke2VuYWJsZXZhbH0iIGluCisgICAgICAgICAgICAgICAgeWVzKSBIQVZFX1FUMz15ZXMgOzsKKyAgICAgICAgICAgICAgICBubykgIEhBVkVfUVQzPW5vIDs7CisgICAgICAgICAgICAgICAgKikgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLXF0MyIgIiRMSU5FTk8iIDUgOzsKKyAgICAgICAgZXNhYworZWxzZQorICBIQVZFX1FUMz15ZXMKK2ZpCisKKworaWYgdGVzdCAieCRIQVZFX1FUMyIgPSAieHllcyIgOyB0aGVuCisKK3BrZ19mYWlsZWQ9bm8KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIFFUMyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgUVQzLi4uICIgPiY2OyB9CisKK2lmIHRlc3QgLW4gIiRRVDNfQ0ZMQUdTIjsgdGhlbgorICAgIHBrZ19jdl9RVDNfQ0ZMQUdTPSIkUVQzX0NGTEFHUyIKKyBlbGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgorICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCisgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcIiBxdC1tdCA+PSAzLjAuMCBcIiI7IH0gPiY1CisgICgkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAiIHF0LW10ID49IDMuMC4wICIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCisgIHBrZ19jdl9RVDNfQ0ZMQUdTPWAkUEtHX0NPTkZJRyAtLWNmbGFncyAiIHF0LW10ID49IDMuMC4wICIgMj4vZGV2L251bGxgCitlbHNlCisgIHBrZ19mYWlsZWQ9eWVzCitmaQorIGVsc2UKKyAgICBwa2dfZmFpbGVkPXVudHJpZWQKK2ZpCitpZiB0ZXN0IC1uICIkUVQzX0xJQlMiOyB0aGVuCisgICAgcGtnX2N2X1FUM19MSUJTPSIkUVQzX0xJQlMiCisgZWxpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KKyAgICBpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgXAorICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgXCIgcXQtbXQgPj0gMy4wLjAgXCIiOyB9ID4mNQorICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgIiBxdC1tdCA+PSAzLjAuMCAiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICBwa2dfY3ZfUVQzX0xJQlM9YCRQS0dfQ09ORklHIC0tbGlicyAiIHF0LW10ID49IDMuMC4wICIgMj4vZGV2L251bGxgCitlbHNlCisgIHBrZ19mYWlsZWQ9eWVzCitmaQorIGVsc2UKKyAgICBwa2dfZmFpbGVkPXVudHJpZWQKK2ZpCisKKworCitpZiB0ZXN0ICRwa2dfZmFpbGVkID0geWVzOyB0aGVuCisgICAJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisKK2lmICRQS0dfQ09ORklHIC0tYXRsZWFzdC1wa2djb25maWctdmVyc2lvbiAwLjIwOyB0aGVuCisgICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD15ZXMKK2Vsc2UKKyAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPW5vCitmaQorICAgICAgICBpZiB0ZXN0ICRfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQgPSB5ZXM7IHRoZW4KKwkgICAgICAgIFFUM19QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLXNob3J0LWVycm9ycyAtLXByaW50LWVycm9ycyAiIHF0LW10ID49IDMuMC4wICIgMj4mMWAKKyAgICAgICAgZWxzZQorCSAgICAgICAgUVQzX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tcHJpbnQtZXJyb3JzICIgcXQtbXQgPj0gMy4wLjAgIiAyPiYxYAorICAgICAgICBmaQorCSMgUHV0IHRoZSBuYXN0eSBlcnJvciBtZXNzYWdlIGluIGNvbmZpZy5sb2cgd2hlcmUgaXQgYmVsb25ncworCWVjaG8gIiRRVDNfUEtHX0VSUk9SUyIgPiY1CisKKwlhc19mbl9lcnJvciAkPyAiUGFja2FnZSByZXF1aXJlbWVudHMgKCBxdC1tdCA+PSAzLjAuMCApIHdlcmUgbm90IG1ldDoKKworJFFUM19QS0dfRVJST1JTCisKK0NvbnNpZGVyIGFkanVzdGluZyB0aGUgUEtHX0NPTkZJR19QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlIGlmIHlvdQoraW5zdGFsbGVkIHNvZnR3YXJlIGluIGEgbm9uLXN0YW5kYXJkIHByZWZpeC4KKworQWx0ZXJuYXRpdmVseSwgeW91IG1heSBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBRVDNfQ0ZMQUdTCithbmQgUVQzX0xJQlMgdG8gYXZvaWQgdGhlIG5lZWQgdG8gY2FsbCBwa2ctY29uZmlnLgorU2VlIHRoZSBwa2ctY29uZmlnIG1hbiBwYWdlIGZvciBtb3JlIGRldGFpbHMuIiAiJExJTkVOTyIgNQorCitlbGlmIHRlc3QgJHBrZ19mYWlsZWQgPSB1bnRyaWVkOyB0aGVuCisgICAgIAl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKwl7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJUaGUgcGtnLWNvbmZpZyBzY3JpcHQgY291bGQgbm90IGJlIGZvdW5kIG9yIGlzIHRvbyBvbGQuICBNYWtlIHN1cmUgaXQKK2lzIGluIHlvdXIgUEFUSCBvciBzZXQgdGhlIFBLR19DT05GSUcgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIGZ1bGwKK3BhdGggdG8gcGtnLWNvbmZpZy4KKworQWx0ZXJuYXRpdmVseSwgeW91IG1heSBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBRVDNfQ0ZMQUdTCithbmQgUVQzX0xJQlMgdG8gYXZvaWQgdGhlIG5lZWQgdG8gY2FsbCBwa2ctY29uZmlnLgorU2VlIHRoZSBwa2ctY29uZmlnIG1hbiBwYWdlIGZvciBtb3JlIGRldGFpbHMuCisKK1RvIGdldCBwa2ctY29uZmlnLCBzZWUgPGh0dHA6Ly9wa2ctY29uZmlnLmZyZWVkZXNrdG9wLm9yZy8+LgorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KKworZWxzZQorCVFUM19DRkxBR1M9JHBrZ19jdl9RVDNfQ0ZMQUdTCisJUVQzX0xJQlM9JHBrZ19jdl9RVDNfTElCUworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCitmaQorCisKKwkgICAgUVQzX1BSRUZJWD0iYCRQS0dfQ09ORklHIC0tdmFyaWFibGU9cHJlZml4IHF0LW10YC9iaW4iCisgICAgICAgIGZvciBhY19wcm9nIGluIG1vYy1xdDMgbW9jCitkbworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfTU9DX1FUMys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJE1PQ19RVDMgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfTU9DX1FUMz0iJE1PQ19RVDMiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRRVDNfUFJFRklYCitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX01PQ19RVDM9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgOzsKK2VzYWMKK2ZpCitNT0NfUVQzPSRhY19jdl9wYXRoX01PQ19RVDMKK2lmIHRlc3QgLW4gIiRNT0NfUVQzIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1PQ19RVDMiID4mNQorJGFzX2VjaG8gIiRNT0NfUVQzIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgdGVzdCAtbiAiJE1PQ19RVDMiICYmIGJyZWFrCitkb25lCit0ZXN0IC1uICIkTU9DX1FUMyIgfHwgTU9DX1FUMz0ibm8iCisKKyAgICAgICAgaWYgdGVzdCAiJE1PQ19RVDMiID0gbm87IHRoZW4KKyAgICAgICAgICAgIGFzX2ZuX2Vycm9yICQ/ICJDb3VsZCBub3QgZmluZCBRVDMgbW9jIiAiJExJTkVOTyIgNQorICAgICAgICBmaQorCitmaQorIGlmIHRlc3QgIngkSEFWRV9RVDMiID0gInh5ZXMiOyB0aGVuCisgIEhBVkVfUVQzX1RSVUU9CisgIEhBVkVfUVQzX0ZBTFNFPScjJworZWxzZQorICBIQVZFX1FUM19UUlVFPScjJworICBIQVZFX1FUM19GQUxTRT0KK2ZpCisKKworIworIyBDaGVjayBmb3IgUXQgNAorIworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXF0NCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9xdDQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9xdDQ7IGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKyAgICAgICAgICAgICAgICB5ZXMpIEhBVkVfUVQ0PXllcyA7OworICAgICAgICAgICAgICAgIG5vKSAgSEFWRV9RVDQ9bm8gOzsKKyAgICAgICAgICAgICAgICAqKSBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtcXQ0IiAiJExJTkVOTyIgNSA7OworICAgICAgICBlc2FjCitlbHNlCisgIEhBVkVfUVQ0PXllcworZmkKKworCitpZiB0ZXN0ICJ4JEhBVkVfUVQ0IiA9ICJ4eWVzIiA7IHRoZW4KKworcGtnX2ZhaWxlZD1ubworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgUVQ0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBRVDQuLi4gIiA+JjY7IH0KKworaWYgdGVzdCAtbiAiJFFUNF9DRkxBR1MiOyB0aGVuCisgICAgcGtnX2N2X1FUNF9DRkxBR1M9IiRRVDRfQ0ZMQUdTIgorIGVsaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCisgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKKyAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiIFF0Q29yZSA+PSA0LjAuMCBcIiI7IH0gPiY1CisgICgkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAiIFF0Q29yZSA+PSA0LjAuMCAiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICBwa2dfY3ZfUVQ0X0NGTEFHUz1gJFBLR19DT05GSUcgLS1jZmxhZ3MgIiBRdENvcmUgPj0gNC4wLjAgIiAyPi9kZXYvbnVsbGAKK2Vsc2UKKyAgcGtnX2ZhaWxlZD15ZXMKK2ZpCisgZWxzZQorICAgIHBrZ19mYWlsZWQ9dW50cmllZAorZmkKK2lmIHRlc3QgLW4gIiRRVDRfTElCUyI7IHRoZW4KKyAgICBwa2dfY3ZfUVQ0X0xJQlM9IiRRVDRfTElCUyIKKyBlbGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgorICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCisgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcIiBRdENvcmUgPj0gNC4wLjAgXCIiOyB9ID4mNQorICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgIiBRdENvcmUgPj0gNC4wLjAgIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgcGtnX2N2X1FUNF9MSUJTPWAkUEtHX0NPTkZJRyAtLWxpYnMgIiBRdENvcmUgPj0gNC4wLjAgIiAyPi9kZXYvbnVsbGAKK2Vsc2UKKyAgcGtnX2ZhaWxlZD15ZXMKK2ZpCisgZWxzZQorICAgIHBrZ19mYWlsZWQ9dW50cmllZAorZmkKKworCisKK2lmIHRlc3QgJHBrZ19mYWlsZWQgPSB5ZXM7IHRoZW4KKyAgIAl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKworaWYgJFBLR19DT05GSUcgLS1hdGxlYXN0LXBrZ2NvbmZpZy12ZXJzaW9uIDAuMjA7IHRoZW4KKyAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPXllcworZWxzZQorICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9bm8KK2ZpCisgICAgICAgIGlmIHRlc3QgJF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZCA9IHllczsgdGhlbgorCSAgICAgICAgUVQ0X1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tc2hvcnQtZXJyb3JzIC0tcHJpbnQtZXJyb3JzICIgUXRDb3JlID49IDQuMC4wICIgMj4mMWAKKyAgICAgICAgZWxzZQorCSAgICAgICAgUVQ0X1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tcHJpbnQtZXJyb3JzICIgUXRDb3JlID49IDQuMC4wICIgMj4mMWAKKyAgICAgICAgZmkKKwkjIFB1dCB0aGUgbmFzdHkgZXJyb3IgbWVzc2FnZSBpbiBjb25maWcubG9nIHdoZXJlIGl0IGJlbG9uZ3MKKwllY2hvICIkUVQ0X1BLR19FUlJPUlMiID4mNQorCisJYXNfZm5fZXJyb3IgJD8gIlBhY2thZ2UgcmVxdWlyZW1lbnRzICggUXRDb3JlID49IDQuMC4wICkgd2VyZSBub3QgbWV0OgorCiskUVQ0X1BLR19FUlJPUlMKKworQ29uc2lkZXIgYWRqdXN0aW5nIHRoZSBQS0dfQ09ORklHX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUgaWYgeW91CitpbnN0YWxsZWQgc29mdHdhcmUgaW4gYSBub24tc3RhbmRhcmQgcHJlZml4LgorCitBbHRlcm5hdGl2ZWx5LCB5b3UgbWF5IHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIFFUNF9DRkxBR1MKK2FuZCBRVDRfTElCUyB0byBhdm9pZCB0aGUgbmVlZCB0byBjYWxsIHBrZy1jb25maWcuCitTZWUgdGhlIHBrZy1jb25maWcgbWFuIHBhZ2UgZm9yIG1vcmUgZGV0YWlscy4iICIkTElORU5PIiA1CisKK2VsaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHVudHJpZWQ7IHRoZW4KKyAgICAgCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCXsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgJD8gIlRoZSBwa2ctY29uZmlnIHNjcmlwdCBjb3VsZCBub3QgYmUgZm91bmQgb3IgaXMgdG9vIG9sZC4gIE1ha2Ugc3VyZSBpdAoraXMgaW4geW91ciBQQVRIIG9yIHNldCB0aGUgUEtHX0NPTkZJRyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUgZnVsbAorcGF0aCB0byBwa2ctY29uZmlnLgorCitBbHRlcm5hdGl2ZWx5LCB5b3UgbWF5IHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIFFUNF9DRkxBR1MKK2FuZCBRVDRfTElCUyB0byBhdm9pZCB0aGUgbmVlZCB0byBjYWxsIHBrZy1jb25maWcuCitTZWUgdGhlIHBrZy1jb25maWcgbWFuIHBhZ2UgZm9yIG1vcmUgZGV0YWlscy4KKworVG8gZ2V0IHBrZy1jb25maWcsIHNlZSA8aHR0cDovL3BrZy1jb25maWcuZnJlZWRlc2t0b3Aub3JnLz4uCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorCitlbHNlCisJUVQ0X0NGTEFHUz0kcGtnX2N2X1FUNF9DRkxBR1MKKwlRVDRfTElCUz0kcGtnX2N2X1FUNF9MSUJTCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKK2ZpCisKKworCSAgICBRVDRfUFJFRklYPSJgJFBLR19DT05GSUcgLS12YXJpYWJsZT1wcmVmaXggUXRDb3JlYC9iaW4iCisgICAgICAgIGZvciBhY19wcm9nIGluIG1vYy1xdDQgbW9jCitkbworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfTU9DX1FUNCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJE1PQ19RVDQgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfTU9DX1FUND0iJE1PQ19RVDQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRRVDRfUFJFRklYCitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX01PQ19RVDQ9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgOzsKK2VzYWMKK2ZpCitNT0NfUVQ0PSRhY19jdl9wYXRoX01PQ19RVDQKK2lmIHRlc3QgLW4gIiRNT0NfUVQ0IjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1PQ19RVDQiID4mNQorJGFzX2VjaG8gIiRNT0NfUVQ0IiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgdGVzdCAtbiAiJE1PQ19RVDQiICYmIGJyZWFrCitkb25lCit0ZXN0IC1uICIkTU9DX1FUNCIgfHwgTU9DX1FUND0ibm8iCisKKyAgICAgICAgaWYgdGVzdCAiJE1PQ19RVDQiID0gbm87IHRoZW4KKyAgICAgICAgICAgIGFzX2ZuX2Vycm9yICQ/ICJDb3VsZCBub3QgZmluZCBRVDQgbW9jIiAiJExJTkVOTyIgNQorICAgICAgICBmaQorCitmaQorIGlmIHRlc3QgIngkSEFWRV9RVDQiID0gInh5ZXMiOyB0aGVuCisgIEhBVkVfUVQ0X1RSVUU9CisgIEhBVkVfUVQ0X0ZBTFNFPScjJworZWxzZQorICBIQVZFX1FUNF9UUlVFPScjJworICBIQVZFX1FUNF9GQUxTRT0KK2ZpCisKKworIworIyBDaGVjayBmb3IgR1RLKyAyLjAKKyMKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1ndGsgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZ3RrK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfZ3RrOyBjYXNlICIke2VuYWJsZXZhbH0iIGluCisgICAgICAgICAgICAgICAgeWVzKSBIQVZFX0dUSz15ZXMgOzsKKyAgICAgICAgICAgICAgICBubykgIEhBVkVfR1RLPW5vIDs7CisgICAgICAgICAgICAgICAgKikgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLWd0ayIgIiRMSU5FTk8iIDUgOzsKKyAgICAgICAgZXNhYworZWxzZQorICBIQVZFX0dUSz15ZXMKK2ZpCisKKworaWYgdGVzdCAieCRIQVZFX0dUSyIgPSAieHllcyIgOyB0aGVuCisgICAgICAgICMgQ2hlY2sgZm9yIEdUSyAyLjAKKworcGtnX2ZhaWxlZD1ubworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgR1RLMjAiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEdUSzIwLi4uICIgPiY2OyB9CisKK2lmIHRlc3QgLW4gIiRHVEsyMF9DRkxBR1MiOyB0aGVuCisgICAgcGtnX2N2X0dUSzIwX0NGTEFHUz0iJEdUSzIwX0NGTEFHUyIKKyBlbGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgorICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCisgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcIiBndGsrLTIuMCA+PSAyLjE0LjAgXCIiOyB9ID4mNQorICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgIiBndGsrLTIuMCA+PSAyLjE0LjAgIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgcGtnX2N2X0dUSzIwX0NGTEFHUz1gJFBLR19DT05GSUcgLS1jZmxhZ3MgIiBndGsrLTIuMCA+PSAyLjE0LjAgIiAyPi9kZXYvbnVsbGAKK2Vsc2UKKyAgcGtnX2ZhaWxlZD15ZXMKK2ZpCisgZWxzZQorICAgIHBrZ19mYWlsZWQ9dW50cmllZAorZmkKK2lmIHRlc3QgLW4gIiRHVEsyMF9MSUJTIjsgdGhlbgorICAgIHBrZ19jdl9HVEsyMF9MSUJTPSIkR1RLMjBfTElCUyIKKyBlbGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgorICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCisgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcIiBndGsrLTIuMCA+PSAyLjE0LjAgXCIiOyB9ID4mNQorICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgIiBndGsrLTIuMCA+PSAyLjE0LjAgIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgcGtnX2N2X0dUSzIwX0xJQlM9YCRQS0dfQ09ORklHIC0tbGlicyAiIGd0aystMi4wID49IDIuMTQuMCAiIDI+L2Rldi9udWxsYAorZWxzZQorICBwa2dfZmFpbGVkPXllcworZmkKKyBlbHNlCisgICAgcGtnX2ZhaWxlZD11bnRyaWVkCitmaQorCisKKworaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHllczsgdGhlbgorICAgCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCitpZiAkUEtHX0NPTkZJRyAtLWF0bGVhc3QtcGtnY29uZmlnLXZlcnNpb24gMC4yMDsgdGhlbgorICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9eWVzCitlbHNlCisgICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD1ubworZmkKKyAgICAgICAgaWYgdGVzdCAkX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkID0geWVzOyB0aGVuCisJICAgICAgICBHVEsyMF9QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLXNob3J0LWVycm9ycyAtLXByaW50LWVycm9ycyAiIGd0aystMi4wID49IDIuMTQuMCAiIDI+JjFgCisgICAgICAgIGVsc2UKKwkgICAgICAgIEdUSzIwX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tcHJpbnQtZXJyb3JzICIgZ3RrKy0yLjAgPj0gMi4xNC4wICIgMj4mMWAKKyAgICAgICAgZmkKKwkjIFB1dCB0aGUgbmFzdHkgZXJyb3IgbWVzc2FnZSBpbiBjb25maWcubG9nIHdoZXJlIGl0IGJlbG9uZ3MKKwllY2hvICIkR1RLMjBfUEtHX0VSUk9SUyIgPiY1CisKKwlhc19mbl9lcnJvciAkPyAiUGFja2FnZSByZXF1aXJlbWVudHMgKCBndGsrLTIuMCA+PSAyLjE0LjAgKSB3ZXJlIG5vdCBtZXQ6CisKKyRHVEsyMF9QS0dfRVJST1JTCisKK0NvbnNpZGVyIGFkanVzdGluZyB0aGUgUEtHX0NPTkZJR19QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlIGlmIHlvdQoraW5zdGFsbGVkIHNvZnR3YXJlIGluIGEgbm9uLXN0YW5kYXJkIHByZWZpeC4KKworQWx0ZXJuYXRpdmVseSwgeW91IG1heSBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBHVEsyMF9DRkxBR1MKK2FuZCBHVEsyMF9MSUJTIHRvIGF2b2lkIHRoZSBuZWVkIHRvIGNhbGwgcGtnLWNvbmZpZy4KK1NlZSB0aGUgcGtnLWNvbmZpZyBtYW4gcGFnZSBmb3IgbW9yZSBkZXRhaWxzLiIgIiRMSU5FTk8iIDUKKworZWxpZiB0ZXN0ICRwa2dfZmFpbGVkID0gdW50cmllZDsgdGhlbgorICAgICAJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisJeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAiVGhlIHBrZy1jb25maWcgc2NyaXB0IGNvdWxkIG5vdCBiZSBmb3VuZCBvciBpcyB0b28gb2xkLiAgTWFrZSBzdXJlIGl0CitpcyBpbiB5b3VyIFBBVEggb3Igc2V0IHRoZSBQS0dfQ09ORklHIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHRoZSBmdWxsCitwYXRoIHRvIHBrZy1jb25maWcuCisKK0FsdGVybmF0aXZlbHksIHlvdSBtYXkgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgR1RLMjBfQ0ZMQUdTCithbmQgR1RLMjBfTElCUyB0byBhdm9pZCB0aGUgbmVlZCB0byBjYWxsIHBrZy1jb25maWcuCitTZWUgdGhlIHBrZy1jb25maWcgbWFuIHBhZ2UgZm9yIG1vcmUgZGV0YWlscy4KKworVG8gZ2V0IHBrZy1jb25maWcsIHNlZSA8aHR0cDovL3BrZy1jb25maWcuZnJlZWRlc2t0b3Aub3JnLz4uCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorCitlbHNlCisJR1RLMjBfQ0ZMQUdTPSRwa2dfY3ZfR1RLMjBfQ0ZMQUdTCisJR1RLMjBfTElCUz0kcGtnX2N2X0dUSzIwX0xJQlMKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworZmkKKworCitmaQorIGlmIHRlc3QgIngkSEFWRV9HVEsiID0gInh5ZXMiOyB0aGVuCisgIEhBVkVfR1RLX1RSVUU9CisgIEhBVkVfR1RLX0ZBTFNFPScjJworZWxzZQorICBIQVZFX0dUS19UUlVFPScjJworICBIQVZFX0dUS19GQUxTRT0KK2ZpCisKKworIworIyBDaGVjayBmb3IgR1RLKyAzLjAKKyMKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1ndGszIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2d0azMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9ndGszOyBjYXNlICIke2VuYWJsZXZhbH0iIGluCisgICAgICAgICAgICAgICAgeWVzKSBIQVZFX0dUSzM9eWVzIDs7CisgICAgICAgICAgICAgICAgbm8pICBIQVZFX0dUSzM9bm8gOzsKKyAgICAgICAgICAgICAgICAqKSBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtZ3RrMyIgIiRMSU5FTk8iIDUgOzsKKyAgICAgICAgZXNhYworZWxzZQorICBIQVZFX0dUSzM9eWVzCitmaQorCisKK2lmIHRlc3QgIngkSEFWRV9HVEszIiA9ICJ4eWVzIiA7IHRoZW4KKyAgICAgICAgIyBDaGVjayBmb3IgR1RLIDMuMAorCitwa2dfZmFpbGVkPW5vCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBHVEszMCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgR1RLMzAuLi4gIiA+JjY7IH0KKworaWYgdGVzdCAtbiAiJEdUSzMwX0NGTEFHUyI7IHRoZW4KKyAgICBwa2dfY3ZfR1RLMzBfQ0ZMQUdTPSIkR1RLMzBfQ0ZMQUdTIgorIGVsaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCisgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKKyAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiIGd0aystMy4wIFwiIjsgfSA+JjUKKyAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICIgZ3RrKy0zLjAgIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgcGtnX2N2X0dUSzMwX0NGTEFHUz1gJFBLR19DT05GSUcgLS1jZmxhZ3MgIiBndGsrLTMuMCAiIDI+L2Rldi9udWxsYAorZWxzZQorICBwa2dfZmFpbGVkPXllcworZmkKKyBlbHNlCisgICAgcGtnX2ZhaWxlZD11bnRyaWVkCitmaQoraWYgdGVzdCAtbiAiJEdUSzMwX0xJQlMiOyB0aGVuCisgICAgcGtnX2N2X0dUSzMwX0xJQlM9IiRHVEszMF9MSUJTIgorIGVsaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCisgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKKyAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiIGd0aystMy4wIFwiIjsgfSA+JjUKKyAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICIgZ3RrKy0zLjAgIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgcGtnX2N2X0dUSzMwX0xJQlM9YCRQS0dfQ09ORklHIC0tbGlicyAiIGd0aystMy4wICIgMj4vZGV2L251bGxgCitlbHNlCisgIHBrZ19mYWlsZWQ9eWVzCitmaQorIGVsc2UKKyAgICBwa2dfZmFpbGVkPXVudHJpZWQKK2ZpCisKKworCitpZiB0ZXN0ICRwa2dfZmFpbGVkID0geWVzOyB0aGVuCisgICAJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisKK2lmICRQS0dfQ09ORklHIC0tYXRsZWFzdC1wa2djb25maWctdmVyc2lvbiAwLjIwOyB0aGVuCisgICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD15ZXMKK2Vsc2UKKyAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPW5vCitmaQorICAgICAgICBpZiB0ZXN0ICRfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQgPSB5ZXM7IHRoZW4KKwkgICAgICAgIEdUSzMwX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tc2hvcnQtZXJyb3JzIC0tcHJpbnQtZXJyb3JzICIgZ3RrKy0zLjAgIiAyPiYxYAorICAgICAgICBlbHNlCisJICAgICAgICBHVEszMF9QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLXByaW50LWVycm9ycyAiIGd0aystMy4wICIgMj4mMWAKKyAgICAgICAgZmkKKwkjIFB1dCB0aGUgbmFzdHkgZXJyb3IgbWVzc2FnZSBpbiBjb25maWcubG9nIHdoZXJlIGl0IGJlbG9uZ3MKKwllY2hvICIkR1RLMzBfUEtHX0VSUk9SUyIgPiY1CisKKwlhc19mbl9lcnJvciAkPyAiUGFja2FnZSByZXF1aXJlbWVudHMgKCBndGsrLTMuMCApIHdlcmUgbm90IG1ldDoKKworJEdUSzMwX1BLR19FUlJPUlMKKworQ29uc2lkZXIgYWRqdXN0aW5nIHRoZSBQS0dfQ09ORklHX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUgaWYgeW91CitpbnN0YWxsZWQgc29mdHdhcmUgaW4gYSBub24tc3RhbmRhcmQgcHJlZml4LgorCitBbHRlcm5hdGl2ZWx5LCB5b3UgbWF5IHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIEdUSzMwX0NGTEFHUworYW5kIEdUSzMwX0xJQlMgdG8gYXZvaWQgdGhlIG5lZWQgdG8gY2FsbCBwa2ctY29uZmlnLgorU2VlIHRoZSBwa2ctY29uZmlnIG1hbiBwYWdlIGZvciBtb3JlIGRldGFpbHMuIiAiJExJTkVOTyIgNQorCitlbGlmIHRlc3QgJHBrZ19mYWlsZWQgPSB1bnRyaWVkOyB0aGVuCisgICAgIAl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKwl7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJUaGUgcGtnLWNvbmZpZyBzY3JpcHQgY291bGQgbm90IGJlIGZvdW5kIG9yIGlzIHRvbyBvbGQuICBNYWtlIHN1cmUgaXQKK2lzIGluIHlvdXIgUEFUSCBvciBzZXQgdGhlIFBLR19DT05GSUcgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIGZ1bGwKK3BhdGggdG8gcGtnLWNvbmZpZy4KKworQWx0ZXJuYXRpdmVseSwgeW91IG1heSBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBHVEszMF9DRkxBR1MKK2FuZCBHVEszMF9MSUJTIHRvIGF2b2lkIHRoZSBuZWVkIHRvIGNhbGwgcGtnLWNvbmZpZy4KK1NlZSB0aGUgcGtnLWNvbmZpZyBtYW4gcGFnZSBmb3IgbW9yZSBkZXRhaWxzLgorCitUbyBnZXQgcGtnLWNvbmZpZywgc2VlIDxodHRwOi8vcGtnLWNvbmZpZy5mcmVlZGVza3RvcC5vcmcvPi4KK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CisKK2Vsc2UKKwlHVEszMF9DRkxBR1M9JHBrZ19jdl9HVEszMF9DRkxBR1MKKwlHVEszMF9MSUJTPSRwa2dfY3ZfR1RLMzBfTElCUworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCitmaQorCisKK2ZpCisgaWYgdGVzdCAieCRIQVZFX0dUSzMiID0gInh5ZXMiOyB0aGVuCisgIEhBVkVfR1RLM19UUlVFPQorICBIQVZFX0dUSzNfRkFMU0U9JyMnCitlbHNlCisgIEhBVkVfR1RLM19UUlVFPScjJworICBIQVZFX0dUSzNfRkFMU0U9CitmaQorCisKKyBpZiB0ZXN0ICJ4JEhBVkVfR1RLMyIgPSAieHllcyIgLW8gIngkSEFWRV9HVEsiID0gInh5ZXMiIDsgdGhlbgorICBIQVZFX0dUSzJPUjNfVFJVRT0KKyAgSEFWRV9HVEsyT1IzX0ZBTFNFPScjJworZWxzZQorICBIQVZFX0dUSzJPUjNfVFJVRT0nIycKKyAgSEFWRV9HVEsyT1IzX0ZBTFNFPQorZmkKKworCisjCisjIEQtQnVzCisjCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZGJ1cyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9kYnVzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfZGJ1czsgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorICAgICAgICAgICAgICAgIHllcykgSEFWRV9EQlVTPXllcyA7OworICAgICAgICAgICAgICAgIG5vKSAgSEFWRV9EQlVTPW5vIDs7CisgICAgICAgICAgICAgICAgKikgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLWRidXMiICIkTElORU5PIiA1IDs7CisgICAgICAgIGVzYWMKK2Vsc2UKKyAgSEFWRV9EQlVTPXllcworZmkKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZGJ1cy1zeXMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2RidXNfc3lzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9kYnVzX3N5czsKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1kYnVzLXN5c3RlbS1zb2NrZXQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2RidXNfc3lzdGVtX3NvY2tldCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfZGJ1c19zeXN0ZW1fc29ja2V0OworZmkKKworCitEQlVTX1NZU19ESVI9IkRpc2FibGVkIgorREJVU19TWVNURU1fQlVTX0RFRkFVTFRfQUREUkVTUz0iRGlzYWJsZWQiCitpZiB0ZXN0ICJ4JEhBVkVfREJVUyIgPSAieHllcyIgOyB0aGVuCisKK3BrZ19mYWlsZWQ9bm8KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIERCVVMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIERCVVMuLi4gIiA+JjY7IH0KKworaWYgdGVzdCAtbiAiJERCVVNfQ0ZMQUdTIjsgdGhlbgorICAgIHBrZ19jdl9EQlVTX0NGTEFHUz0iJERCVVNfQ0ZMQUdTIgorIGVsaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCisgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKKyAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiIGRidXMtMSA+PSAwLjM0IFwiIjsgfSA+JjUKKyAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICIgZGJ1cy0xID49IDAuMzQgIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgcGtnX2N2X0RCVVNfQ0ZMQUdTPWAkUEtHX0NPTkZJRyAtLWNmbGFncyAiIGRidXMtMSA+PSAwLjM0ICIgMj4vZGV2L251bGxgCitlbHNlCisgIHBrZ19mYWlsZWQ9eWVzCitmaQorIGVsc2UKKyAgICBwa2dfZmFpbGVkPXVudHJpZWQKK2ZpCitpZiB0ZXN0IC1uICIkREJVU19MSUJTIjsgdGhlbgorICAgIHBrZ19jdl9EQlVTX0xJQlM9IiREQlVTX0xJQlMiCisgZWxpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KKyAgICBpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgXAorICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgXCIgZGJ1cy0xID49IDAuMzQgXCIiOyB9ID4mNQorICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgIiBkYnVzLTEgPj0gMC4zNCAiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICBwa2dfY3ZfREJVU19MSUJTPWAkUEtHX0NPTkZJRyAtLWxpYnMgIiBkYnVzLTEgPj0gMC4zNCAiIDI+L2Rldi9udWxsYAorZWxzZQorICBwa2dfZmFpbGVkPXllcworZmkKKyBlbHNlCisgICAgcGtnX2ZhaWxlZD11bnRyaWVkCitmaQorCisKKworaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHllczsgdGhlbgorICAgCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCitpZiAkUEtHX0NPTkZJRyAtLWF0bGVhc3QtcGtnY29uZmlnLXZlcnNpb24gMC4yMDsgdGhlbgorICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9eWVzCitlbHNlCisgICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD1ubworZmkKKyAgICAgICAgaWYgdGVzdCAkX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkID0geWVzOyB0aGVuCisJICAgICAgICBEQlVTX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tc2hvcnQtZXJyb3JzIC0tcHJpbnQtZXJyb3JzICIgZGJ1cy0xID49IDAuMzQgIiAyPiYxYAorICAgICAgICBlbHNlCisJICAgICAgICBEQlVTX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tcHJpbnQtZXJyb3JzICIgZGJ1cy0xID49IDAuMzQgIiAyPiYxYAorICAgICAgICBmaQorCSMgUHV0IHRoZSBuYXN0eSBlcnJvciBtZXNzYWdlIGluIGNvbmZpZy5sb2cgd2hlcmUgaXQgYmVsb25ncworCWVjaG8gIiREQlVTX1BLR19FUlJPUlMiID4mNQorCisJYXNfZm5fZXJyb3IgJD8gIlBhY2thZ2UgcmVxdWlyZW1lbnRzICggZGJ1cy0xID49IDAuMzQgKSB3ZXJlIG5vdCBtZXQ6CisKKyREQlVTX1BLR19FUlJPUlMKKworQ29uc2lkZXIgYWRqdXN0aW5nIHRoZSBQS0dfQ09ORklHX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUgaWYgeW91CitpbnN0YWxsZWQgc29mdHdhcmUgaW4gYSBub24tc3RhbmRhcmQgcHJlZml4LgorCitBbHRlcm5hdGl2ZWx5LCB5b3UgbWF5IHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIERCVVNfQ0ZMQUdTCithbmQgREJVU19MSUJTIHRvIGF2b2lkIHRoZSBuZWVkIHRvIGNhbGwgcGtnLWNvbmZpZy4KK1NlZSB0aGUgcGtnLWNvbmZpZyBtYW4gcGFnZSBmb3IgbW9yZSBkZXRhaWxzLiIgIiRMSU5FTk8iIDUKKworZWxpZiB0ZXN0ICRwa2dfZmFpbGVkID0gdW50cmllZDsgdGhlbgorICAgICAJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisJeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAiVGhlIHBrZy1jb25maWcgc2NyaXB0IGNvdWxkIG5vdCBiZSBmb3VuZCBvciBpcyB0b28gb2xkLiAgTWFrZSBzdXJlIGl0CitpcyBpbiB5b3VyIFBBVEggb3Igc2V0IHRoZSBQS0dfQ09ORklHIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHRoZSBmdWxsCitwYXRoIHRvIHBrZy1jb25maWcuCisKK0FsdGVybmF0aXZlbHksIHlvdSBtYXkgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgREJVU19DRkxBR1MKK2FuZCBEQlVTX0xJQlMgdG8gYXZvaWQgdGhlIG5lZWQgdG8gY2FsbCBwa2ctY29uZmlnLgorU2VlIHRoZSBwa2ctY29uZmlnIG1hbiBwYWdlIGZvciBtb3JlIGRldGFpbHMuCisKK1RvIGdldCBwa2ctY29uZmlnLCBzZWUgPGh0dHA6Ly9wa2ctY29uZmlnLmZyZWVkZXNrdG9wLm9yZy8+LgorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KKworZWxzZQorCURCVVNfQ0ZMQUdTPSRwa2dfY3ZfREJVU19DRkxBR1MKKwlEQlVTX0xJQlM9JHBrZ19jdl9EQlVTX0xJQlMKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworZmkKKworCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0RCVVMgMSIgPj5jb25mZGVmcy5oCisKKworICAgIGlmIHRlc3QgInokREJVU19WRVJTSU9OIiA9ICJ6IjsgdGhlbgorICAgICAgICBEQlVTX1ZFUlNJT049YCRQS0dfQ09ORklHIGRidXMtMSAtLW1vZHZlcnNpb25gCisgICAgZmkKKyAgICBEQlVTX1ZFUlNJT05fTUFKT1I9YGVjaG8gJERCVVNfVkVSU0lPTiB8IGF3ayAtRi4gJ3twcmludCAkMX0nYAorICAgIERCVVNfVkVSU0lPTl9NSU5PUj1gZWNobyAkREJVU19WRVJTSU9OIHwgYXdrIC1GLiAne3ByaW50ICQyfSdgCisgICAgREJVU19WRVJTSU9OX01JQ1JPPWBlY2hvICREQlVTX1ZFUlNJT04gfCBhd2sgLUYuICd7cHJpbnQgJDN9J2AKKyAgICBpZiB0ZXN0ICJ6JERCVVNfVkVSU0lPTl9NQUpPUiIgPSAieiI7IHRoZW4KKyAgICAgICAgREJVU19WRVJTSU9OX01BSk9SPSIwIgorICAgIGZpCisgICAgaWYgdGVzdCAieiREQlVTX1ZFUlNJT05fTUlOT1IiID0gInoiOyB0aGVuCisgICAgICAgIERCVVNfVkVSU0lPTl9NSU5PUj0iMCIKKyAgICBmaQorICAgIGlmIHRlc3QgInokREJVU19WRVJTSU9OX01JQ1JPIiA9ICJ6IjsgdGhlbgorICAgICAgICBEQlVTX1ZFUlNJT05fTUlDUk89IjAiCisgICAgZmkKKworICAgIGlmIHRlc3QgInokREJVU19WRVJTSU9OX01BSk9SIiA9ICJ6MCIgLWEgInokREJVU19WRVJTSU9OX01JTk9SIiA9ICJ6MCIgLWEgInokREJVU19WRVJTSU9OX01JQ1JPIiA9ICJ6MCI7IHRoZW4KKyAgICAgICAgZWNobyAiRXJyb3I6IENvdWxkbid0IGRldGVybWluZSB0aGUgdmVyc2lvbiBvZiB5b3VyIEQtQnVzIHBhY2thZ2UuIgorICAgICAgICBlY2hvICIgIFRoaXMgaXMgcHJvYmFibHkgYW4gZXJyb3IgaW4gdGhpcyBzY3JpcHQsIHBsZWFzZSByZXBvcnQgaXQiCisgICAgICAgIGVjaG8gIiAgYWxvbmcgd2l0aCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOiIKKyAgICAgICAgZWNobyAiICAgICAgQmFzZSBELUJ1c3MgdmVyc2lvbiA9JyREQlVTX1ZFUlNJT04nIgorICAgICAgICBlY2hvICIgICAgICBEQlVTX1ZFUlNJT05fTUFKT1I9JyREQlVTX1ZFUlNJT05fTUFKT1InIgorICAgICAgICBlY2hvICIgICAgICBEQlVTX1ZFUlNJT05fTUlOT1I9JyREQlVTX1ZFUlNJT05fTUlOT1InIgorICAgICAgICBlY2hvICIgICAgICBEQlVTX1ZFUlNJT05fTUlDUk89JyREQlVTX1ZFUlNJT05fTUlDUk8nIgorICAgICAgICBleGl0IDEKKyAgICBlbHNlCisgICAgICAgIGVjaG8gIllvdXIgRC1CdXMgdmVyc2lvbiBpcyAkREJVU19WRVJTSU9OX01BSk9SLCREQlVTX1ZFUlNJT05fTUlOT1IsJERCVVNfVkVSU0lPTl9NSUNSTy4iCisgICAgICAgIERCVVNfQ0ZMQUdTPSIkREJVU19DRkxBR1MgLUREQlVTX1ZFUlNJT05fTUFKT1I9JERCVVNfVkVSU0lPTl9NQUpPUiIKKyAgICAgICAgREJVU19DRkxBR1M9IiREQlVTX0NGTEFHUyAtRERCVVNfVkVSU0lPTl9NSU5PUj0kREJVU19WRVJTSU9OX01JTk9SIgorICAgICAgICBEQlVTX0NGTEFHUz0iJERCVVNfQ0ZMQUdTIC1EREJVU19WRVJTSU9OX01JQ1JPPSREQlVTX1ZFUlNJT05fTUlDUk8iCisgICAgZmkKKworICAgIERCVVNfQ0ZMQUdTPSIkREJVU19DRkxBR1MgLUREQlVTX0FQSV9TVUJKRUNUX1RPX0NIQU5HRSIKKworCisKKyAgICBpZiAhIHRlc3QgLXogIiR3aXRoX2RidXNfc3lzIiA7IHRoZW4KKyAgICAgICAgREJVU19TWVNfRElSPSIkd2l0aF9kYnVzX3N5cyIKKyAgICBlbHNlCisgICAgICAgIERCVVNfU1lTX0RJUj0iJHtzeXNjb25mZGlyfS9kYnVzLTEvc3lzdGVtLmQiCisgICAgZmkKKworCisgICAgaWYgISB0ZXN0IC16ICIkd2l0aF9kYnVzX3N5c3RlbV9hZGRyZXNzIiA7IHRoZW4KKyAgICAgICAgREJVU19TWVNURU1fQlVTX0RFRkFVTFRfQUREUkVTUz0iJHdpdGhfZGJ1c19zeXN0ZW1fYWRkcmVzcyIKKyAgICBlbHNlCisgICAgICAgICMgVGhpcyBpcyB1Z2x5LCBidXQgRC1CdXMgZG9lc24ndCBleHBvcnQgdGhpcyBhZGRyZXNzIGZvciB1cworICAgICAgICAjIHNvIHdlIGhhdmUgdG8gZ3Vlc3MsIHByZXR0eSBtdWNoIGFsbCBzZXR1cHMgaSd2ZSBzZWVuIGhhdmUKKyAgICAgICAgIyBpdCBpbiAvdmFyL2xpYi9kYnVzIG9yIC92YXIvcnVuL2RidXMsIGFuZCBpdHMgZGVmYXVsdGVkIHRvCisgICAgICAgICMgL3Zhci9ydW4gdXBzdHJlYW0gc28gd2Ugd2lsbCB0cnkgZ3Vlc3MgZmlyc3QgdGhlbiBkZWZhdWx0CisgICAgICAgICMgdG8gL3Zhci9ydW4vZGJ1cy4KKworICAgICAgICBEQlVTX1NZU1RFTV9CVVNfREVGQVVMVF9BRERSRVNTPSJ1bml4OnBhdGg9L3Zhci9ydW4vZGJ1cy9zeXN0ZW1fYnVzX3NvY2tldCIKKyAgICAgICAgVFJZX1NPQ0tFVFM9Ii92YXIvbGliL2RidXMvc3lzdGVtX2J1c19zb2NrZXQgL3Zhci9ydW4vZGJ1cy9zeXN0ZW1fYnVzX3NvY2tldCAke2xvY2Fsc3RhdGVkaXJ9L3J1bi9kYnVzL3N5c3RlbV9idXNfc29ja2V0ICR7cHJlZml4fS92YXIvcnVuL2RidXMvc3lzdGVtX2J1c19zb2NrZXQiCisgICAgICAgIGZvciBzb2NrIGluICRUUllfU09DS0VUUzsgZG8KKyAgICAgICAgICAgIGlmIHRlc3QgLVMgJHNvY2s7IHRoZW4KKyAgICAgICAgICAgICAgICBEQlVTX1NZU1RFTV9CVVNfREVGQVVMVF9BRERSRVNTPSJ1bml4OnBhdGg9JHNvY2siCisgICAgICAgICAgICBmaQorICAgICAgICBkb25lCisgICAgZmkKKworCisgICAgU0FWRURfTElCUz0iJExJQlMiCisgICAgTElCUz0iJExJQlMgJERCVVNfTElCUyIKKyAgICBmb3IgYWNfZnVuYyBpbiBkYnVzX2Nvbm5lY3Rpb25fY2xvc2UgZGJ1c19idXNfZ2V0X3ByaXZhdGUKK2RvIDoKKyAgYXNfYWNfdmFyPWAkYXNfZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICIkYWNfZnVuYyIgIiRhc19hY192YXIiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX3ZhciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorZG9uZQorCisgICAgTElCUz0iJFNBVkVEX0xJQlMiCitmaQorIGlmIHRlc3QgIngkSEFWRV9EQlVTIiA9ICJ4eWVzIjsgdGhlbgorICBIQVZFX0RCVVNfVFJVRT0KKyAgSEFWRV9EQlVTX0ZBTFNFPScjJworZWxzZQorICBIQVZFX0RCVVNfVFJVRT0nIycKKyAgSEFWRV9EQlVTX0ZBTFNFPQorZmkKKworCisjCisjIEV4cGF0CisjCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgteG1sIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF94bWwrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX3htbDsKK2ZpCisKK3VzZV9leHBhdD1mYWxzZQordXNlX2JzZHhtbD1mYWxzZQorCisjIFNlZSB3aGF0IHdlIGhhdmUKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIFhNTF9QYXJzZXJDcmVhdGUgaW4gLWxleHBhdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgWE1MX1BhcnNlckNyZWF0ZSBpbiAtbGV4cGF0Li4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl9leHBhdF9YTUxfUGFyc2VyQ3JlYXRlKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxleHBhdCAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgWE1MX1BhcnNlckNyZWF0ZSAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIFhNTF9QYXJzZXJDcmVhdGUgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX2V4cGF0X1hNTF9QYXJzZXJDcmVhdGU9eWVzCitlbHNlCisgIGFjX2N2X2xpYl9leHBhdF9YTUxfUGFyc2VyQ3JlYXRlPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9leHBhdF9YTUxfUGFyc2VyQ3JlYXRlIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX2V4cGF0X1hNTF9QYXJzZXJDcmVhdGUiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfZXhwYXRfWE1MX1BhcnNlckNyZWF0ZSIgPSB4eWVzOyB0aGVuIDoKKyAgIGZvciBhY19oZWFkZXIgaW4gZXhwYXQuaAorZG8gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiZXhwYXQuaCIgImFjX2N2X2hlYWRlcl9leHBhdF9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9leHBhdF9oIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfRVhQQVRfSCAxCitfQUNFT0YKKyBoYXZlX2V4cGF0PXRydWUKK2Vsc2UKKyAgaGF2ZV9leHBhdD1mYWxzZQorZmkKKworZG9uZQorCitlbHNlCisgIGhhdmVfZXhwYXQ9ZmFsc2UKK2ZpCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIFhNTF9QYXJzZXJDcmVhdGUgaW4gLWxic2R4bWwiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIFhNTF9QYXJzZXJDcmVhdGUgaW4gLWxic2R4bWwuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX2JzZHhtbF9YTUxfUGFyc2VyQ3JlYXRlKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxic2R4bWwgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIFhNTF9QYXJzZXJDcmVhdGUgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBYTUxfUGFyc2VyQ3JlYXRlICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9ic2R4bWxfWE1MX1BhcnNlckNyZWF0ZT15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX2JzZHhtbF9YTUxfUGFyc2VyQ3JlYXRlPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9ic2R4bWxfWE1MX1BhcnNlckNyZWF0ZSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9ic2R4bWxfWE1MX1BhcnNlckNyZWF0ZSIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9ic2R4bWxfWE1MX1BhcnNlckNyZWF0ZSIgPSB4eWVzOyB0aGVuIDoKKyAgIGZvciBhY19oZWFkZXIgaW4gYnNkeG1sLmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgImJzZHhtbC5oIiAiYWNfY3ZfaGVhZGVyX2JzZHhtbF9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9ic2R4bWxfaCIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0JTRFhNTF9IIDEKK19BQ0VPRgorIGhhdmVfYnNkeG1sPXRydWUKK2Vsc2UKKyAgaGF2ZV9ic2R4bWw9ZmFsc2UKK2ZpCisKK2RvbmUKKworZWxzZQorICBoYXZlX2JzZHhtbD1mYWxzZQorZmkKKworCitpZiB0ZXN0ICJ4JHdpdGhfeG1sIiA9ICJ4bm9uZSI7IHRoZW4KKyAgICAgICAgOgorZWxpZiB0ZXN0ICJ4JHdpdGhfeG1sIiA9ICJ4ZXhwYXQiOyB0aGVuCisJdXNlX2V4cGF0PXRydWUKKwlpZiAhICRoYXZlX2V4cGF0IDsgdGhlbgorCQlhc19mbl9lcnJvciAkPyAiKioqIGxpYmV4cGF0IHJlcXVlc3RlZCwgYnV0IG5vdCBmb3VuZCAqKioiICIkTElORU5PIiA1CisJZmkKK2VsaWYgdGVzdCAieCR3aXRoX3htbCIgPSAieGJzZHhtbCI7IHRoZW4KKwl1c2VfYnNkeG1sPXRydWUKKwlpZiAhICRoYXZlX2JzZHhtbCA7IHRoZW4KKwkJYXNfZm5fZXJyb3IgJD8gIioqKiBsaWJic2R4bWwgcmVxdWVzdGVkLCBidXQgbm90IGZvdW5kICoqKiIgIiRMSU5FTk8iIDUKKwlmaQorZWxpZiB0ZXN0ICJ4JHdpdGhfeG1sIiAhPSAieCI7IHRoZW4KKwlhc19mbl9lcnJvciAkPyAiKioqIHVua25vd24gd2l0aC14bWwgb3B0aW9uICoqKiIgIiRMSU5FTk8iIDUKK2Vsc2UKKwlpZiAkaGF2ZV9leHBhdCA7IHRoZW4KKwkJdXNlX2V4cGF0PXRydWUKKwllbGlmICRoYXZlX2JzZHhtbCA7IHRoZW4KKwkJdXNlX2JzZHhtbD10cnVlCisJZWxzZQorCQlhc19mbl9lcnJvciAkPyAiKioqIG5laXRoZXIgbGliZXhwYXQgbm90IGxpYmJzZHhtbCBjb3VsZCBiZSBmb3VuZCAqKioiICIkTElORU5PIiA1CisJZmkKK2ZpCisKK2lmICR1c2VfZXhwYXQ7IHRoZW4KKwl3aXRoX3htbD1leHBhdAorCVhNTF9DRkxBR1M9LURVU0VfRVhQQVRfSAorCVhNTF9MSUJTPS1sZXhwYXQKK2ZpCitpZiAkdXNlX2JzZHhtbDsgdGhlbgorCXdpdGhfeG1sPWJzZHhtbAorCVhNTF9DRkxBR1M9LURVU0VfQlNEWE1MX0gKKwlYTUxfTElCUz0tbGJzZHhtbAorZmkKKworCisKK2lmICR1c2VfZXhwYXQgfHwgJHVzZV9ic2R4bWw7IHRoZW4KKwlIQVZFX1hNTD15ZXMKK2ZpCisKKyBpZiB0ZXN0ICJ4JEhBVkVfWE1MIiA9ICJ4eWVzIjsgdGhlbgorICBIQVZFX1hNTF9UUlVFPQorICBIQVZFX1hNTF9GQUxTRT0nIycKK2Vsc2UKKyAgSEFWRV9YTUxfVFJVRT0nIycKKyAgSEFWRV9YTUxfRkFMU0U9CitmaQorCisKKyMKKyMgR0RCTQorIworIworIyBDaGVjayBmb3IgZGJtCisjCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZGJtIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2RibStzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2RibTsgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorICAgICAgICAgICAgICAgIHllcykgSEFWRV9EQk09eWVzIDs7CisgICAgICAgICAgICAgICAgbm8pICBIQVZFX0RCTT1ubyA7OworICAgICAgICAgICAgICAgICopIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1kYm0iICIkTElORU5PIiA1IDs7CisgICAgICAgIGVzYWMKK2Vsc2UKKyAgSEFWRV9EQk09bm8KK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWdkYm0gd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZ2RibStzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2dkYm07IGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKyAgICAgICAgICAgICAgICB5ZXMpIEhBVkVfR0RCTT15ZXMgOzsKKyAgICAgICAgICAgICAgICBubykgIEhBVkVfR0RCTT1ubyA7OworICAgICAgICAgICAgICAgICopIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWRpc2FibGUtZ2RibSIgIiRMSU5FTk8iIDUgOzsKKyAgICAgICAgZXNhYworZWxzZQorICBIQVZFX0dEQk09eWVzCitmaQorCisKK2lmIHRlc3QgIngkSEFWRV9HREJNIiA9ICJ4eWVzIiA7IHRoZW4KKyAgICBpZiB0ZXN0ICJ4JEhBVkVfREJNIiA9ICJ4eWVzIiA7IHRoZW4KKyAgICAgICAgYXNfZm5fZXJyb3IgJD8gIioqKiAtLWVuYWJsZS1nZGJtIGFuZCAtLWVuYWJsZS1kYm0gYm90aCBzcGVjaWZpZWQgKioqIiAiJExJTkVOTyIgNQorICAgIGZpCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZ2RibV9vcGVuIGluIC1sZ2RibSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZ2RibV9vcGVuIGluIC1sZ2RibS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfZ2RibV9nZGJtX29wZW4rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGdkYm0gICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGdkYm1fb3BlbiAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGdkYm1fb3BlbiAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfZ2RibV9nZGJtX29wZW49eWVzCitlbHNlCisgIGFjX2N2X2xpYl9nZGJtX2dkYm1fb3Blbj1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfZ2RibV9nZGJtX29wZW4iID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfZ2RibV9nZGJtX29wZW4iID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfZ2RibV9nZGJtX29wZW4iID0geHllczsgdGhlbiA6CisgICBmb3IgYWNfaGVhZGVyIGluIGdkYm0uaAorZG8gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiZ2RibS5oIiAiYWNfY3ZfaGVhZGVyX2dkYm1faCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfZ2RibV9oIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfR0RCTV9IIDEKK19BQ0VPRgorIGhhdmVfZ2RibT10cnVlCitlbHNlCisgIGhhdmVfZ2RibT1mYWxzZQorZmkKKworZG9uZQorCitlbHNlCisgIGhhdmVfZ2RibT1mYWxzZQorZmkKKworCisgICAgaWYgISAkaGF2ZV9nZGJtIDsgdGhlbgorICAgICAgICBhc19mbl9lcnJvciAkPyAiKioqIGxpYmdkYm0gbm90IGZvdW5kICoqKiIgIiRMSU5FTk8iIDUKKyAgICBmaQorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0dEQk0gLyoqLyIgPj5jb25mZGVmcy5oCisKK2Vsc2UKKyAgICBpZiB0ZXN0ICJ4JEhBVkVfREJNIiA9ICJ4eWVzIiA7IHRoZW4KKyAgICAgICAgZm9yIGFjX2hlYWRlciBpbiBuZGJtLmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgIm5kYm0uaCIgImFjX2N2X2hlYWRlcl9uZGJtX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX25kYm1faCIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX05EQk1fSCAxCitfQUNFT0YKKyBoYXZlX2RibT10cnVlCitlbHNlCisgIGhhdmVfZGJtPWZhbHNlCitmaQorCitkb25lCisKKworICAgICAgICBpZiAhICRoYXZlX2RibSA7IHRoZW4KKyAgICAgICAgICAgIGFzX2ZuX2Vycm9yICQ/ICIqKiogZGJtIG5vdCBmb3VuZCAqKioiICIkTElORU5PIiA1CisgICAgICAgIGZpCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfREJNIC8qKi8iID4+Y29uZmRlZnMuaAorCisgICAgZmkKK2ZpCisgaWYgdGVzdCAieCRIQVZFX0dEQk0iID0gInh5ZXMiOyB0aGVuCisgIEhBVkVfR0RCTV9UUlVFPQorICBIQVZFX0dEQk1fRkFMU0U9JyMnCitlbHNlCisgIEhBVkVfR0RCTV9UUlVFPScjJworICBIQVZFX0dEQk1fRkFMU0U9CitmaQorCisgaWYgdGVzdCAieCRIQVZFX0RCTSIgPSAieHllcyI7IHRoZW4KKyAgSEFWRV9EQk1fVFJVRT0KKyAgSEFWRV9EQk1fRkFMU0U9JyMnCitlbHNlCisgIEhBVkVfREJNX1RSVUU9JyMnCisgIEhBVkVfREJNX0ZBTFNFPQorZmkKKworCisjCisjIGxpYmRhZW1vbgorIworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxpYmRhZW1vbiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9saWJkYWVtb24rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9saWJkYWVtb247IGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKyAgICAgICAgICAgICAgICB5ZXMpIEhBVkVfTElCREFFTU9OPXllcyA7OworICAgICAgICAgICAgICAgIG5vKSAgSEFWRV9MSUJEQUVNT049bm8gOzsKKyAgICAgICAgICAgICAgICAqKSBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtbGliZGFlbW9uIiAiJExJTkVOTyIgNSA7OworICAgICAgICBlc2FjCitlbHNlCisgIEhBVkVfTElCREFFTU9OPXllcworZmkKKworCitpZiB0ZXN0ICJ4JEhBVkVfTElCREFFTU9OIiA9ICJ4eWVzIiA7IHRoZW4KKworcGtnX2ZhaWxlZD1ubworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgTElCREFFTU9OIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBMSUJEQUVNT04uLi4gIiA+JjY7IH0KKworaWYgdGVzdCAtbiAiJExJQkRBRU1PTl9DRkxBR1MiOyB0aGVuCisgICAgcGtnX2N2X0xJQkRBRU1PTl9DRkxBR1M9IiRMSUJEQUVNT05fQ0ZMQUdTIgorIGVsaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCisgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKKyAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiIGxpYmRhZW1vbiA+PSAwLjE0IFwiIjsgfSA+JjUKKyAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICIgbGliZGFlbW9uID49IDAuMTQgIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgcGtnX2N2X0xJQkRBRU1PTl9DRkxBR1M9YCRQS0dfQ09ORklHIC0tY2ZsYWdzICIgbGliZGFlbW9uID49IDAuMTQgIiAyPi9kZXYvbnVsbGAKK2Vsc2UKKyAgcGtnX2ZhaWxlZD15ZXMKK2ZpCisgZWxzZQorICAgIHBrZ19mYWlsZWQ9dW50cmllZAorZmkKK2lmIHRlc3QgLW4gIiRMSUJEQUVNT05fTElCUyI7IHRoZW4KKyAgICBwa2dfY3ZfTElCREFFTU9OX0xJQlM9IiRMSUJEQUVNT05fTElCUyIKKyBlbGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgorICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCisgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcIiBsaWJkYWVtb24gPj0gMC4xNCBcIiI7IH0gPiY1CisgICgkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAiIGxpYmRhZW1vbiA+PSAwLjE0ICIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCisgIHBrZ19jdl9MSUJEQUVNT05fTElCUz1gJFBLR19DT05GSUcgLS1saWJzICIgbGliZGFlbW9uID49IDAuMTQgIiAyPi9kZXYvbnVsbGAKK2Vsc2UKKyAgcGtnX2ZhaWxlZD15ZXMKK2ZpCisgZWxzZQorICAgIHBrZ19mYWlsZWQ9dW50cmllZAorZmkKKworCisKK2lmIHRlc3QgJHBrZ19mYWlsZWQgPSB5ZXM7IHRoZW4KKyAgIAl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKworaWYgJFBLR19DT05GSUcgLS1hdGxlYXN0LXBrZ2NvbmZpZy12ZXJzaW9uIDAuMjA7IHRoZW4KKyAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPXllcworZWxzZQorICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9bm8KK2ZpCisgICAgICAgIGlmIHRlc3QgJF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZCA9IHllczsgdGhlbgorCSAgICAgICAgTElCREFFTU9OX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tc2hvcnQtZXJyb3JzIC0tcHJpbnQtZXJyb3JzICIgbGliZGFlbW9uID49IDAuMTQgIiAyPiYxYAorICAgICAgICBlbHNlCisJICAgICAgICBMSUJEQUVNT05fUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1wcmludC1lcnJvcnMgIiBsaWJkYWVtb24gPj0gMC4xNCAiIDI+JjFgCisgICAgICAgIGZpCisJIyBQdXQgdGhlIG5hc3R5IGVycm9yIG1lc3NhZ2UgaW4gY29uZmlnLmxvZyB3aGVyZSBpdCBiZWxvbmdzCisJZWNobyAiJExJQkRBRU1PTl9QS0dfRVJST1JTIiA+JjUKKworCWFzX2ZuX2Vycm9yICQ/ICJQYWNrYWdlIHJlcXVpcmVtZW50cyAoIGxpYmRhZW1vbiA+PSAwLjE0ICkgd2VyZSBub3QgbWV0OgorCiskTElCREFFTU9OX1BLR19FUlJPUlMKKworQ29uc2lkZXIgYWRqdXN0aW5nIHRoZSBQS0dfQ09ORklHX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUgaWYgeW91CitpbnN0YWxsZWQgc29mdHdhcmUgaW4gYSBub24tc3RhbmRhcmQgcHJlZml4LgorCitBbHRlcm5hdGl2ZWx5LCB5b3UgbWF5IHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIExJQkRBRU1PTl9DRkxBR1MKK2FuZCBMSUJEQUVNT05fTElCUyB0byBhdm9pZCB0aGUgbmVlZCB0byBjYWxsIHBrZy1jb25maWcuCitTZWUgdGhlIHBrZy1jb25maWcgbWFuIHBhZ2UgZm9yIG1vcmUgZGV0YWlscy4iICIkTElORU5PIiA1CisKK2VsaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHVudHJpZWQ7IHRoZW4KKyAgICAgCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCXsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgJD8gIlRoZSBwa2ctY29uZmlnIHNjcmlwdCBjb3VsZCBub3QgYmUgZm91bmQgb3IgaXMgdG9vIG9sZC4gIE1ha2Ugc3VyZSBpdAoraXMgaW4geW91ciBQQVRIIG9yIHNldCB0aGUgUEtHX0NPTkZJRyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUgZnVsbAorcGF0aCB0byBwa2ctY29uZmlnLgorCitBbHRlcm5hdGl2ZWx5LCB5b3UgbWF5IHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIExJQkRBRU1PTl9DRkxBR1MKK2FuZCBMSUJEQUVNT05fTElCUyB0byBhdm9pZCB0aGUgbmVlZCB0byBjYWxsIHBrZy1jb25maWcuCitTZWUgdGhlIHBrZy1jb25maWcgbWFuIHBhZ2UgZm9yIG1vcmUgZGV0YWlscy4KKworVG8gZ2V0IHBrZy1jb25maWcsIHNlZSA8aHR0cDovL3BrZy1jb25maWcuZnJlZWRlc2t0b3Aub3JnLz4uCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorCitlbHNlCisJTElCREFFTU9OX0NGTEFHUz0kcGtnX2N2X0xJQkRBRU1PTl9DRkxBR1MKKwlMSUJEQUVNT05fTElCUz0kcGtnX2N2X0xJQkRBRU1PTl9MSUJTCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKK2ZpCisKKworZmkKKyBpZiB0ZXN0ICJ4JEhBVkVfTElCREFFTU9OIiA9ICJ4eWVzIjsgdGhlbgorICBIQVZFX0xJQkRBRU1PTl9UUlVFPQorICBIQVZFX0xJQkRBRU1PTl9GQUxTRT0nIycKK2Vsc2UKKyAgSEFWRV9MSUJEQUVNT05fVFJVRT0nIycKKyAgSEFWRV9MSUJEQUVNT05fRkFMU0U9CitmaQorCisKKyMKKyMgUHl0aG9uIHN0dWZmCisjCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcHl0aG9uIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3B5dGhvbitzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3B5dGhvbjsgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorICAgICAgICAgIHllcykgSEFWRV9QWVRIT049eWVzIDs7CisgICAgICAgICAgbm8pICBIQVZFX1BZVEhPTj1ubyA7OworICAgICAgICAgICopIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1weXRob24iICIkTElORU5PIiA1IDs7CisgICAgZXNhYworZWxzZQorICBIQVZFX1BZVEhPTj15ZXMKK2ZpCisKKworSEFWRV9QWVRIT05fREJVUz1ubworSEFWRV9QWUdUSz1ubworCitpZiB0ZXN0ICJ4JEhBVkVfUFlUSE9OIiA9ICJ4eWVzIiA7IHRoZW4KKworCisKKworCisKKyAgICAgICAgaWYgdGVzdCAtbiAiJFBZVEhPTiI7IHRoZW4KKyAgICAgICMgSWYgdGhlIHVzZXIgc2V0ICRQWVRIT04sIHVzZSBpdCBhbmQgZG9uJ3Qgc2VhcmNoIHNvbWV0aGluZyBlbHNlLgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRQWVRIT04gdmVyc2lvbiA+PSAyLjQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkUFlUSE9OIHZlcnNpb24gPj0gMi40Li4uICIgPiY2OyB9CisgICAgICBwcm9nPSJpbXBvcnQgc3lzCisjIHNwbGl0IHN0cmluZ3MgYnkgJy4nIGFuZCBjb252ZXJ0IHRvIG51bWVyaWMuICBBcHBlbmQgc29tZSB6ZXJvcworIyBiZWNhdXNlIHdlIG5lZWQgYXQgbGVhc3QgNCBkaWdpdHMgZm9yIHRoZSBoZXggY29udmVyc2lvbi4KKyMgbWFwIHJldHVybnMgYW4gaXRlcmF0b3IgaW4gUHl0aG9uIDMuMCBhbmQgYSBsaXN0IGluIDIueAorbWludmVyID0gbGlzdChtYXAoaW50LCAnMi40Jy5zcGxpdCgnLicpKSkgKyBbMCwgMCwgMF0KK21pbnZlcmhleCA9IDAKKyMgeHJhbmdlIGlzIG5vdCBwcmVzZW50IGluIFB5dGhvbiAzLjAgYW5kIHJhbmdlIHJldHVybnMgYW4gaXRlcmF0b3IKK2ZvciBpIGluIGxpc3QocmFuZ2UoMCwgNCkpOiBtaW52ZXJoZXggPSAobWludmVyaGV4IDw8IDgpICsgbWludmVyW2ldCitzeXMuZXhpdChzeXMuaGV4dmVyc2lvbiA8IG1pbnZlcmhleCkiCisgIGlmIHsgZWNobyAiJGFzX21lOiRMSU5FTk86ICRQWVRIT04gLWMgIiRwcm9nIiIgPiY1CisgICAoJFBZVEhPTiAtYyAiJHByb2ciKSA+JjUgMj4mNQorICAgYWNfc3RhdHVzPSQ/CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbiA6CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CitlbHNlCisgIGFzX2ZuX2Vycm9yICQ/ICJ0b28gb2xkIiAiJExJTkVOTyIgNQorZmkKKyAgICAgIGFtX2Rpc3BsYXlfUFlUSE9OPSRQWVRIT04KKyAgICBlbHNlCisgICAgICAjIE90aGVyd2lzZSwgdHJ5IGVhY2ggaW50ZXJwcmV0ZXIgdW50aWwgd2UgZmluZCBvbmUgdGhhdCBzYXRpc2ZpZXMKKyAgICAgICMgVkVSU0lPTi4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGEgUHl0aG9uIGludGVycHJldGVyIHdpdGggdmVyc2lvbiA+PSAyLjQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGEgUHl0aG9uIGludGVycHJldGVyIHdpdGggdmVyc2lvbiA+PSAyLjQuLi4gIiA+JjY7IH0KK2lmICR7YW1fY3ZfcGF0aGxlc3NfUFlUSE9OKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworCWZvciBhbV9jdl9wYXRobGVzc19QWVRIT04gaW4gcHl0aG9uIHB5dGhvbjIgcHl0aG9uMyBweXRob24zLjIgcHl0aG9uMy4xIHB5dGhvbjMuMCBweXRob24yLjcgIHB5dGhvbjIuNiBweXRob24yLjUgcHl0aG9uMi40IHB5dGhvbjIuMyBweXRob24yLjIgcHl0aG9uMi4xIHB5dGhvbjIuMCBub25lOyBkbworCSAgdGVzdCAiJGFtX2N2X3BhdGhsZXNzX1BZVEhPTiIgPSBub25lICYmIGJyZWFrCisJICBwcm9nPSJpbXBvcnQgc3lzCisjIHNwbGl0IHN0cmluZ3MgYnkgJy4nIGFuZCBjb252ZXJ0IHRvIG51bWVyaWMuICBBcHBlbmQgc29tZSB6ZXJvcworIyBiZWNhdXNlIHdlIG5lZWQgYXQgbGVhc3QgNCBkaWdpdHMgZm9yIHRoZSBoZXggY29udmVyc2lvbi4KKyMgbWFwIHJldHVybnMgYW4gaXRlcmF0b3IgaW4gUHl0aG9uIDMuMCBhbmQgYSBsaXN0IGluIDIueAorbWludmVyID0gbGlzdChtYXAoaW50LCAnMi40Jy5zcGxpdCgnLicpKSkgKyBbMCwgMCwgMF0KK21pbnZlcmhleCA9IDAKKyMgeHJhbmdlIGlzIG5vdCBwcmVzZW50IGluIFB5dGhvbiAzLjAgYW5kIHJhbmdlIHJldHVybnMgYW4gaXRlcmF0b3IKK2ZvciBpIGluIGxpc3QocmFuZ2UoMCwgNCkpOiBtaW52ZXJoZXggPSAobWludmVyaGV4IDw8IDgpICsgbWludmVyW2ldCitzeXMuZXhpdChzeXMuaGV4dmVyc2lvbiA8IG1pbnZlcmhleCkiCisgIGlmIHsgZWNobyAiJGFzX21lOiRMSU5FTk86ICRhbV9jdl9wYXRobGVzc19QWVRIT04gLWMgIiRwcm9nIiIgPiY1CisgICAoJGFtX2N2X3BhdGhsZXNzX1BZVEhPTiAtYyAiJHByb2ciKSA+JjUgMj4mNQorICAgYWNfc3RhdHVzPSQ/CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbiA6CisgIGJyZWFrCitmaQorCWRvbmUKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFtX2N2X3BhdGhsZXNzX1BZVEhPTiIgPiY1CiskYXNfZWNobyAiJGFtX2N2X3BhdGhsZXNzX1BZVEhPTiIgPiY2OyB9CisgICAgICAjIFNldCAkUFlUSE9OIHRvIHRoZSBhYnNvbHV0ZSBwYXRoIG9mICRhbV9jdl9wYXRobGVzc19QWVRIT04uCisgICAgICBpZiB0ZXN0ICIkYW1fY3ZfcGF0aGxlc3NfUFlUSE9OIiA9IG5vbmU7IHRoZW4KKwlQWVRIT049OgorICAgICAgZWxzZQorICAgICAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhbV9jdl9wYXRobGVzc19QWVRIT04iLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhbV9jdl9wYXRobGVzc19QWVRIT047IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX1BZVEhPTis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJFBZVEhPTiBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9QWVRIT049IiRQWVRIT04iICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX1BZVEhPTj0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICA7OworZXNhYworZmkKK1BZVEhPTj0kYWNfY3ZfcGF0aF9QWVRIT04KK2lmIHRlc3QgLW4gIiRQWVRIT04iOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkUFlUSE9OIiA+JjUKKyRhc19lY2hvICIkUFlUSE9OIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgICAgIGZpCisgICAgICBhbV9kaXNwbGF5X1BZVEhPTj0kYW1fY3ZfcGF0aGxlc3NfUFlUSE9OCisgICAgZmkKKworCisgIGlmIHRlc3QgIiRQWVRIT04iID0gOjsgdGhlbgorICAgICAgYXNfZm5fZXJyb3IgJD8gIm5vIHN1aXRhYmxlIFB5dGhvbiBpbnRlcnByZXRlciBmb3VuZCIgIiRMSU5FTk8iIDUKKyAgZWxzZQorCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFtX2Rpc3BsYXlfUFlUSE9OIHZlcnNpb24iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhbV9kaXNwbGF5X1BZVEhPTiB2ZXJzaW9uLi4uICIgPiY2OyB9CitpZiAke2FtX2N2X3B5dGhvbl92ZXJzaW9uKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYW1fY3ZfcHl0aG9uX3ZlcnNpb249YCRQWVRIT04gLWMgImltcG9ydCBzeXM7IHN5cy5zdGRvdXQud3JpdGUoc3lzLnZlcnNpb25bOjNdKSJgCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhbV9jdl9weXRob25fdmVyc2lvbiIgPiY1CiskYXNfZWNobyAiJGFtX2N2X3B5dGhvbl92ZXJzaW9uIiA+JjY7IH0KKyAgUFlUSE9OX1ZFUlNJT049JGFtX2N2X3B5dGhvbl92ZXJzaW9uCisKKworCisgIFBZVEhPTl9QUkVGSVg9JyR7cHJlZml4fScKKworICBQWVRIT05fRVhFQ19QUkVGSVg9JyR7ZXhlY19wcmVmaXh9JworCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYW1fZGlzcGxheV9QWVRIT04gcGxhdGZvcm0iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhbV9kaXNwbGF5X1BZVEhPTiBwbGF0Zm9ybS4uLiAiID4mNjsgfQoraWYgJHthbV9jdl9weXRob25fcGxhdGZvcm0rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhbV9jdl9weXRob25fcGxhdGZvcm09YCRQWVRIT04gLWMgImltcG9ydCBzeXM7IHN5cy5zdGRvdXQud3JpdGUoc3lzLnBsYXRmb3JtKSJgCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhbV9jdl9weXRob25fcGxhdGZvcm0iID4mNQorJGFzX2VjaG8gIiRhbV9jdl9weXRob25fcGxhdGZvcm0iID4mNjsgfQorICBQWVRIT05fUExBVEZPUk09JGFtX2N2X3B5dGhvbl9wbGF0Zm9ybQorCisKKworCisgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYW1fZGlzcGxheV9QWVRIT04gc2NyaXB0IGRpcmVjdG9yeSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFtX2Rpc3BsYXlfUFlUSE9OIHNjcmlwdCBkaXJlY3RvcnkuLi4gIiA+JjY7IH0KK2lmICR7YW1fY3ZfcHl0aG9uX3B5dGhvbmRpcis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgIngkcHJlZml4IiA9IHhOT05FCisgICAgIHRoZW4KKyAgICAgICBhbV9weV9wcmVmaXg9JGFjX2RlZmF1bHRfcHJlZml4CisgICAgIGVsc2UKKyAgICAgICBhbV9weV9wcmVmaXg9JHByZWZpeAorICAgICBmaQorICAgICBhbV9jdl9weXRob25fcHl0aG9uZGlyPWAkUFlUSE9OIC1jICJpbXBvcnQgc3lzOyBmcm9tIGRpc3R1dGlscyBpbXBvcnQgc3lzY29uZmlnOyBzeXMuc3Rkb3V0LndyaXRlKHN5c2NvbmZpZy5nZXRfcHl0aG9uX2xpYigwLDAscHJlZml4PSckYW1fcHlfcHJlZml4JykpIiAyPi9kZXYvbnVsbGAKKyAgICAgY2FzZSAkYW1fY3ZfcHl0aG9uX3B5dGhvbmRpciBpbgorICAgICAkYW1fcHlfcHJlZml4KikKKyAgICAgICBhbV9fc3RyaXBfcHJlZml4PWBlY2hvICIkYW1fcHlfcHJlZml4IiB8IHNlZCAnc3wufC58ZydgCisgICAgICAgYW1fY3ZfcHl0aG9uX3B5dGhvbmRpcj1gZWNobyAiJGFtX2N2X3B5dGhvbl9weXRob25kaXIiIHwgc2VkICJzLF4kYW1fX3N0cmlwX3ByZWZpeCwkUFlUSE9OX1BSRUZJWCwiYAorICAgICAgIDs7CisgICAgICopCisgICAgICAgY2FzZSAkYW1fcHlfcHJlZml4IGluCisgICAgICAgICAvdXNyfC9TeXN0ZW0qKSA7OworICAgICAgICAgKikKKwkgIGFtX2N2X3B5dGhvbl9weXRob25kaXI9JFBZVEhPTl9QUkVGSVgvbGliL3B5dGhvbiRQWVRIT05fVkVSU0lPTi9zaXRlLXBhY2thZ2VzCisJICA7OworICAgICAgIGVzYWMKKyAgICAgICA7OworICAgICBlc2FjCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFtX2N2X3B5dGhvbl9weXRob25kaXIiID4mNQorJGFzX2VjaG8gIiRhbV9jdl9weXRob25fcHl0aG9uZGlyIiA+JjY7IH0KKyAgcHl0aG9uZGlyPSRhbV9jdl9weXRob25fcHl0aG9uZGlyCisKKworCisgIHBrZ3B5dGhvbmRpcj1cJHtweXRob25kaXJ9LyRQQUNLQUdFCisKKworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYW1fZGlzcGxheV9QWVRIT04gZXh0ZW5zaW9uIG1vZHVsZSBkaXJlY3RvcnkiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhbV9kaXNwbGF5X1BZVEhPTiBleHRlbnNpb24gbW9kdWxlIGRpcmVjdG9yeS4uLiAiID4mNjsgfQoraWYgJHthbV9jdl9weXRob25fcHlleGVjZGlyKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAieCRleGVjX3ByZWZpeCIgPSB4Tk9ORQorICAgICB0aGVuCisgICAgICAgYW1fcHlfZXhlY19wcmVmaXg9JGFtX3B5X3ByZWZpeAorICAgICBlbHNlCisgICAgICAgYW1fcHlfZXhlY19wcmVmaXg9JGV4ZWNfcHJlZml4CisgICAgIGZpCisgICAgIGFtX2N2X3B5dGhvbl9weWV4ZWNkaXI9YCRQWVRIT04gLWMgImltcG9ydCBzeXM7IGZyb20gZGlzdHV0aWxzIGltcG9ydCBzeXNjb25maWc7IHN5cy5zdGRvdXQud3JpdGUoc3lzY29uZmlnLmdldF9weXRob25fbGliKDEsMCxwcmVmaXg9JyRhbV9weV9leGVjX3ByZWZpeCcpKSIgMj4vZGV2L251bGxgCisgICAgIGNhc2UgJGFtX2N2X3B5dGhvbl9weWV4ZWNkaXIgaW4KKyAgICAgJGFtX3B5X2V4ZWNfcHJlZml4KikKKyAgICAgICBhbV9fc3RyaXBfcHJlZml4PWBlY2hvICIkYW1fcHlfZXhlY19wcmVmaXgiIHwgc2VkICdzfC58LnxnJ2AKKyAgICAgICBhbV9jdl9weXRob25fcHlleGVjZGlyPWBlY2hvICIkYW1fY3ZfcHl0aG9uX3B5ZXhlY2RpciIgfCBzZWQgInMsXiRhbV9fc3RyaXBfcHJlZml4LCRQWVRIT05fRVhFQ19QUkVGSVgsImAKKyAgICAgICA7OworICAgICAqKQorICAgICAgIGNhc2UgJGFtX3B5X2V4ZWNfcHJlZml4IGluCisgICAgICAgICAvdXNyfC9TeXN0ZW0qKSA7OworICAgICAgICAgKikKKwkgICBhbV9jdl9weXRob25fcHlleGVjZGlyPSRQWVRIT05fRVhFQ19QUkVGSVgvbGliL3B5dGhvbiRQWVRIT05fVkVSU0lPTi9zaXRlLXBhY2thZ2VzCisJICAgOzsKKyAgICAgICBlc2FjCisgICAgICAgOzsKKyAgICAgZXNhYworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhbV9jdl9weXRob25fcHlleGVjZGlyIiA+JjUKKyRhc19lY2hvICIkYW1fY3ZfcHl0aG9uX3B5ZXhlY2RpciIgPiY2OyB9CisgIHB5ZXhlY2Rpcj0kYW1fY3ZfcHl0aG9uX3B5ZXhlY2RpcgorCisKKworICBwa2dweWV4ZWNkaXI9XCR7cHlleGVjZGlyfS8kUEFDS0FHRQorCisKKworICBmaQorCisKKworICAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1weWd0ayB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9weWd0aytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3B5Z3RrOyBjYXNlICIke2VuYWJsZXZhbH0iIGluCisgICAgICAgICAgICAgICAgeWVzKSBIQVZFX1BZR1RLPXllcyA7OworICAgICAgICAgICAgICAgIG5vKSAgSEFWRV9QWUdUSz1ubyA7OworICAgICAgICAgICAgICAgICopIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1weWd0ayIgIiRMSU5FTk8iIDUgOzsKKyAgICAgICAgZXNhYworZWxzZQorICBIQVZFX1BZR1RLPXllcworZmkKKworCisgICAgaWYgdGVzdCAieCRIQVZFX1BZR1RLIiA9ICJ4eWVzIiA7IHRoZW4KKworcHlfbW9kX3Zhcj1gZWNobyBndGsnXycgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBweXRob24gbW9kdWxlIGd0ayIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgcHl0aG9uIG1vZHVsZSBndGsuLi4gIiA+JjY7IH0KK2lmIGV2YWwgXCR7cHlfY3ZfbW9kXyRweV9tb2RfdmFyKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworcHJvZz0iCitpbXBvcnQgc3lzCit0cnk6CisgICAgICAgIGltcG9ydCBndGsKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgc3lzLmV4aXQoMSkKK2V4Y2VwdDoKKyAgICAgICAgc3lzLmV4aXQoMCkKK3N5cy5leGl0KDApIgoraWYgJFBZVEhPTiAtYyAiJHByb2ciIDE+JjUgMj4mNQorICB0aGVuCisgICAgZXZhbCAicHlfY3ZfbW9kXyRweV9tb2RfdmFyPXllcyIKKyAgZWxzZQorICAgIGV2YWwgInB5X2N2X21vZF8kcHlfbW9kX3Zhcj1ubyIKKyAgZmkKKworZmkKKworcHlfdmFsPWBldmFsICJlY2hvIFxgZWNobyAnJHB5X2N2X21vZF8nJHB5X21vZF92YXJcYCJgCitpZiB0ZXN0ICJ4JHB5X3ZhbCIgIT0geG5vOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgIGVsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgIGFzX2ZuX2Vycm9yICQ/ICJDb3VsZCBub3QgZmluZCBQeXRob24gbW9kdWxlIGd0ayIgIiRMSU5FTk8iIDUKK2ZpCisKKyAgICBmaQorCisKKyAgICBpZiB0ZXN0ICJ4JEhBVkVfREJVUyIgPSAieHllcyIgOyB0aGVuCisgICAgICAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1weXRob24tZGJ1cyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9weXRob25fZGJ1cytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3B5dGhvbl9kYnVzOyBjYXNlICIke2VuYWJsZXZhbH0iIGluCisgICAgICAgICAgICAgICAgICAgeWVzKSBIQVZFX1BZVEhPTl9EQlVTPXllcyA7OworICAgICAgICAgICAgICAgICAgIG5vKSAgSEFWRV9QWVRIT05fREJVUz1ubyA7OworICAgICAgICAgICAgICAgICAgICopIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1weXRob24tZGJ1cyIgIiRMSU5FTk8iIDUgOzsKKyAgICAgICAgICAgIGVzYWMKK2Vsc2UKKyAgSEFWRV9QWVRIT05fREJVUz15ZXMKK2ZpCisKKworICAgICAgICBpZiB0ZXN0ICJ4JEhBVkVfUFlUSE9OX0RCVVMiID0gInh5ZXMiOyB0aGVuCisKK3B5X21vZF92YXI9YGVjaG8gZGJ1cydfJyB8IHNlZCAneSUuLystJV9fcF8lJ2AKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHB5dGhvbiBtb2R1bGUgZGJ1cyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgcHl0aG9uIG1vZHVsZSBkYnVzLi4uICIgPiY2OyB9CitpZiBldmFsIFwke3B5X2N2X21vZF8kcHlfbW9kX3Zhcis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKK3Byb2c9IgoraW1wb3J0IHN5cwordHJ5OgorICAgICAgICBpbXBvcnQgZGJ1cworZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICBzeXMuZXhpdCgxKQorZXhjZXB0OgorICAgICAgICBzeXMuZXhpdCgwKQorc3lzLmV4aXQoMCkiCitpZiAkUFlUSE9OIC1jICIkcHJvZyIgMT4mNSAyPiY1CisgIHRoZW4KKyAgICBldmFsICJweV9jdl9tb2RfJHB5X21vZF92YXI9eWVzIgorICBlbHNlCisgICAgZXZhbCAicHlfY3ZfbW9kXyRweV9tb2RfdmFyPW5vIgorICBmaQorCitmaQorCitweV92YWw9YGV2YWwgImVjaG8gXGBlY2hvICckcHlfY3ZfbW9kXyckcHlfbW9kX3ZhclxgImAKK2lmIHRlc3QgIngkcHlfdmFsIiAhPSB4bm87IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgYXNfZm5fZXJyb3IgJD8gIkNvdWxkIG5vdCBmaW5kIFB5dGhvbiBtb2R1bGUgZGJ1cyIgIiRMSU5FTk8iIDUKK2ZpCisKKyAgICAgICAgZmkKKworCitweV9tb2RfdmFyPWBlY2hvIHNvY2tldCdfJyB8IHNlZCAneSUuLystJV9fcF8lJ2AKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHB5dGhvbiBtb2R1bGUgc29ja2V0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBweXRob24gbW9kdWxlIHNvY2tldC4uLiAiID4mNjsgfQoraWYgZXZhbCBcJHtweV9jdl9tb2RfJHB5X21vZF92YXIrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCitwcm9nPSIKK2ltcG9ydCBzeXMKK3RyeToKKyAgICAgICAgaW1wb3J0IHNvY2tldAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICBzeXMuZXhpdCgxKQorZXhjZXB0OgorICAgICAgICBzeXMuZXhpdCgwKQorc3lzLmV4aXQoMCkiCitpZiAkUFlUSE9OIC1jICIkcHJvZyIgMT4mNSAyPiY1CisgIHRoZW4KKyAgICBldmFsICJweV9jdl9tb2RfJHB5X21vZF92YXI9eWVzIgorICBlbHNlCisgICAgZXZhbCAicHlfY3ZfbW9kXyRweV9tb2RfdmFyPW5vIgorICBmaQorCitmaQorCitweV92YWw9YGV2YWwgImVjaG8gXGBlY2hvICckcHlfY3ZfbW9kXyckcHlfbW9kX3ZhclxgImAKK2lmIHRlc3QgIngkcHlfdmFsIiAhPSB4bm87IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgYXNfZm5fZXJyb3IgJD8gIkNvdWxkIG5vdCBmaW5kIFB5dGhvbiBtb2R1bGUgc29ja2V0IiAiJExJTkVOTyIgNQorZmkKKworICAgICAgICBpZiB0ZXN0ICJ4JEhBVkVfR0RCTSIgPSAieHllcyI7IHRoZW4KKworcHlfbW9kX3Zhcj1gZWNobyBnZGJtJ18nIHwgc2VkICd5JS4vKy0lX19wXyUnYAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgcHl0aG9uIG1vZHVsZSBnZGJtIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBweXRob24gbW9kdWxlIGdkYm0uLi4gIiA+JjY7IH0KK2lmIGV2YWwgXCR7cHlfY3ZfbW9kXyRweV9tb2RfdmFyKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworcHJvZz0iCitpbXBvcnQgc3lzCit0cnk6CisgICAgICAgIGltcG9ydCBnZGJtCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgIHN5cy5leGl0KDEpCitleGNlcHQ6CisgICAgICAgIHN5cy5leGl0KDApCitzeXMuZXhpdCgwKSIKK2lmICRQWVRIT04gLWMgIiRwcm9nIiAxPiY1IDI+JjUKKyAgdGhlbgorICAgIGV2YWwgInB5X2N2X21vZF8kcHlfbW9kX3Zhcj15ZXMiCisgIGVsc2UKKyAgICBldmFsICJweV9jdl9tb2RfJHB5X21vZF92YXI9bm8iCisgIGZpCisKK2ZpCisKK3B5X3ZhbD1gZXZhbCAiZWNobyBcYGVjaG8gJyRweV9jdl9tb2RfJyRweV9tb2RfdmFyXGAiYAoraWYgdGVzdCAieCRweV92YWwiICE9IHhubzsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICBlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICBhc19mbl9lcnJvciAkPyAiQ291bGQgbm90IGZpbmQgUHl0aG9uIG1vZHVsZSBnZGJtIiAiJExJTkVOTyIgNQorZmkKKworICAgICAgICBmaQorICAgICAgICBpZiB0ZXN0ICJ4JEhBVkVfREJNIiA9ICJ4eWVzIjsgdGhlbgorCitweV9tb2RfdmFyPWBlY2hvIGRibSdfJyB8IHNlZCAneSUuLystJV9fcF8lJ2AKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHB5dGhvbiBtb2R1bGUgZGJtIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBweXRob24gbW9kdWxlIGRibS4uLiAiID4mNjsgfQoraWYgZXZhbCBcJHtweV9jdl9tb2RfJHB5X21vZF92YXIrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCitwcm9nPSIKK2ltcG9ydCBzeXMKK3RyeToKKyAgICAgICAgaW1wb3J0IGRibQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICBzeXMuZXhpdCgxKQorZXhjZXB0OgorICAgICAgICBzeXMuZXhpdCgwKQorc3lzLmV4aXQoMCkiCitpZiAkUFlUSE9OIC1jICIkcHJvZyIgMT4mNSAyPiY1CisgIHRoZW4KKyAgICBldmFsICJweV9jdl9tb2RfJHB5X21vZF92YXI9eWVzIgorICBlbHNlCisgICAgZXZhbCAicHlfY3ZfbW9kXyRweV9tb2RfdmFyPW5vIgorICBmaQorCitmaQorCitweV92YWw9YGV2YWwgImVjaG8gXGBlY2hvICckcHlfY3ZfbW9kXyckcHlfbW9kX3ZhclxgImAKK2lmIHRlc3QgIngkcHlfdmFsIiAhPSB4bm87IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgYXNfZm5fZXJyb3IgJD8gIkNvdWxkIG5vdCBmaW5kIFB5dGhvbiBtb2R1bGUgZGJtIiAiJExJTkVOTyIgNQorZmkKKworICAgICAgICBmaQorICAgIGZpCitmaQorIGlmIHRlc3QgIngkSEFWRV9QWVRIT04iID0gInh5ZXMiIDsgdGhlbgorICBIQVZFX1BZVEhPTl9UUlVFPQorICBIQVZFX1BZVEhPTl9GQUxTRT0nIycKK2Vsc2UKKyAgSEFWRV9QWVRIT05fVFJVRT0nIycKKyAgSEFWRV9QWVRIT05fRkFMU0U9CitmaQorCisgaWYgdGVzdCAieCRIQVZFX1BZR1RLIiA9ICJ4eWVzIjsgdGhlbgorICBIQVZFX1BZR1RLX1RSVUU9CisgIEhBVkVfUFlHVEtfRkFMU0U9JyMnCitlbHNlCisgIEhBVkVfUFlHVEtfVFJVRT0nIycKKyAgSEFWRV9QWUdUS19GQUxTRT0KK2ZpCisKKyBpZiB0ZXN0ICJ4JEhBVkVfUFlUSE9OX0RCVVMiID0gInh5ZXMiOyB0aGVuCisgIEhBVkVfUFlUSE9OX0RCVVNfVFJVRT0KKyAgSEFWRV9QWVRIT05fREJVU19GQUxTRT0nIycKK2Vsc2UKKyAgSEFWRV9QWVRIT05fREJVU19UUlVFPScjJworICBIQVZFX1BZVEhPTl9EQlVTX0ZBTFNFPQorZmkKKworCisjCisjIENoZWNrIGZvciBtb25vIHN0dWZmCisjCitIQVZFX01PTk89bm8KK2lmIHRlc3QgIngkSEFWRV9EQlVTIiA9ICJ4eWVzIiA7IHRoZW4KKyAgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbW9ubyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9tb25vK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfbW9ubzsgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorICAgICAgICAgICAgICAgICAgICB5ZXMpIEhBVkVfTU9OTz15ZXMgOzsKKyAgICAgICAgICAgICAgICAgICAgbm8pICBIQVZFX01PTk89bm8gOzsKKyAgICAgICAgICAgICAgICAgICAgKikgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLW1vbm8iICIkTElORU5PIiA1IDs7CisgICAgICAgICAgICBlc2FjCitlbHNlCisgIEhBVkVfTU9OTz15ZXMKK2ZpCisKKworICAgIGlmIHRlc3QgIngkSEFWRV9NT05PIiA9ICJ4eWVzIiA7IHRoZW4KKyAgICAgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJtY3MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IG1jczsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfTUNTKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkTUNTIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX01DUz0iJE1DUyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfTUNTPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIDs7Citlc2FjCitmaQorTUNTPSRhY19jdl9wYXRoX01DUworaWYgdGVzdCAtbiAiJE1DUyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNQ1MiID4mNQorJGFzX2VjaG8gIiRNQ1MiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICAgICAgICBpZiB0ZXN0ICJ4JE1DUyIgPSAieCIgOyB0aGVuCisgICAgICAgICAgICBhc19mbl9lcnJvciAkPyAiQ2FuIG5vdCBmaW5kIFwibWNzXCIgLSBUaGUgTW9ubyBDLVNoYXJwIENvbXBpbGVyKSBpbiB5b3VyIFBBVEgiICIkTElORU5PIiA1CisgICAgICAgIGZpCisKKyAgICAgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJnYWN1dGlsIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBnYWN1dGlsOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9HQUNVVElMKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkR0FDVVRJTCBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9HQUNVVElMPSIkR0FDVVRJTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfR0FDVVRJTD0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICA7OworZXNhYworZmkKK0dBQ1VUSUw9JGFjX2N2X3BhdGhfR0FDVVRJTAoraWYgdGVzdCAtbiAiJEdBQ1VUSUwiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkR0FDVVRJTCIgPiY1CiskYXNfZWNobyAiJEdBQ1VUSUwiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICAgICAgICBpZiB0ZXN0ICJ4JEdBQ1VUSUwiID0gIngiIDsgdGhlbgorICAgICAgICAgICAgYXNfZm5fZXJyb3IgJD8gIkNhbiBub3QgZmluZCBcImdhY3V0aWxcIiBpbiB5b3VyIFBBVEgiICIkTElORU5PIiA1CisgICAgICAgIGZpCisKKworCisgICAgZmkKK2ZpCisgaWYgdGVzdCAieCRIQVZFX01PTk8iID0gInh5ZXMiOyB0aGVuCisgIEhBVkVfTU9OT19UUlVFPQorICBIQVZFX01PTk9fRkFMU0U9JyMnCitlbHNlCisgIEhBVkVfTU9OT19UUlVFPScjJworICBIQVZFX01PTk9fRkFMU0U9CitmaQorCisKKyMKKyMgQ2hlY2sgZm9yIG1vbm9kb2Mgc3R1ZmYKKyMKK0hBVkVfTU9OT0RPQz1ubworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW1vbm9kb2Mgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbW9ub2RvYytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX21vbm9kb2M7IGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKyAgICAgICAgICAgICAgICB5ZXMpIEhBVkVfTU9OT0RPQz15ZXMgOzsKKyAgICAgICAgICAgICAgICBubykgIEhBVkVfTU9OT0RPQz1ubyA7OworICAgICAgICAgICAgICAgICopIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1tb25vZG9jIiAiJExJTkVOTyIgNSA7OworICAgICAgICBlc2FjCitlbHNlCisgIEhBVkVfTU9OT0RPQz15ZXMKK2ZpCisKKworaWYgdGVzdCAieCRIQVZFX01PTk8iID0gInh5ZXMiICYmIHRlc3QgIngkSEFWRV9NT05PRE9DIiA9ICJ4eWVzIiA7IHRoZW4KKworcGtnX2ZhaWxlZD1ubworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgTU9OT0RPQyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgTU9OT0RPQy4uLiAiID4mNjsgfQorCitpZiB0ZXN0IC1uICIkTU9OT0RPQ19DRkxBR1MiOyB0aGVuCisgICAgcGtnX2N2X01PTk9ET0NfQ0ZMQUdTPSIkTU9OT0RPQ19DRkxBR1MiCisgZWxpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KKyAgICBpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgXAorICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgXCJtb25vZG9jID49IDEuMS44XCIiOyB9ID4mNQorICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgIm1vbm9kb2MgPj0gMS4xLjgiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICBwa2dfY3ZfTU9OT0RPQ19DRkxBR1M9YCRQS0dfQ09ORklHIC0tY2ZsYWdzICJtb25vZG9jID49IDEuMS44IiAyPi9kZXYvbnVsbGAKK2Vsc2UKKyAgcGtnX2ZhaWxlZD15ZXMKK2ZpCisgZWxzZQorICAgIHBrZ19mYWlsZWQ9dW50cmllZAorZmkKK2lmIHRlc3QgLW4gIiRNT05PRE9DX0xJQlMiOyB0aGVuCisgICAgcGtnX2N2X01PTk9ET0NfTElCUz0iJE1PTk9ET0NfTElCUyIKKyBlbGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgorICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCisgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcIm1vbm9kb2MgPj0gMS4xLjhcIiI7IH0gPiY1CisgICgkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAibW9ub2RvYyA+PSAxLjEuOCIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCisgIHBrZ19jdl9NT05PRE9DX0xJQlM9YCRQS0dfQ09ORklHIC0tbGlicyAibW9ub2RvYyA+PSAxLjEuOCIgMj4vZGV2L251bGxgCitlbHNlCisgIHBrZ19mYWlsZWQ9eWVzCitmaQorIGVsc2UKKyAgICBwa2dfZmFpbGVkPXVudHJpZWQKK2ZpCisKKworCitpZiB0ZXN0ICRwa2dfZmFpbGVkID0geWVzOyB0aGVuCisgICAJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisKK2lmICRQS0dfQ09ORklHIC0tYXRsZWFzdC1wa2djb25maWctdmVyc2lvbiAwLjIwOyB0aGVuCisgICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD15ZXMKK2Vsc2UKKyAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPW5vCitmaQorICAgICAgICBpZiB0ZXN0ICRfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQgPSB5ZXM7IHRoZW4KKwkgICAgICAgIE1PTk9ET0NfUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1zaG9ydC1lcnJvcnMgLS1wcmludC1lcnJvcnMgIm1vbm9kb2MgPj0gMS4xLjgiIDI+JjFgCisgICAgICAgIGVsc2UKKwkgICAgICAgIE1PTk9ET0NfUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1wcmludC1lcnJvcnMgIm1vbm9kb2MgPj0gMS4xLjgiIDI+JjFgCisgICAgICAgIGZpCisJIyBQdXQgdGhlIG5hc3R5IGVycm9yIG1lc3NhZ2UgaW4gY29uZmlnLmxvZyB3aGVyZSBpdCBiZWxvbmdzCisJZWNobyAiJE1PTk9ET0NfUEtHX0VSUk9SUyIgPiY1CisKKwlhc19mbl9lcnJvciAkPyAiUGFja2FnZSByZXF1aXJlbWVudHMgKG1vbm9kb2MgPj0gMS4xLjgpIHdlcmUgbm90IG1ldDoKKworJE1PTk9ET0NfUEtHX0VSUk9SUworCitDb25zaWRlciBhZGp1c3RpbmcgdGhlIFBLR19DT05GSUdfUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpZiB5b3UKK2luc3RhbGxlZCBzb2Z0d2FyZSBpbiBhIG5vbi1zdGFuZGFyZCBwcmVmaXguCisKK0FsdGVybmF0aXZlbHksIHlvdSBtYXkgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgTU9OT0RPQ19DRkxBR1MKK2FuZCBNT05PRE9DX0xJQlMgdG8gYXZvaWQgdGhlIG5lZWQgdG8gY2FsbCBwa2ctY29uZmlnLgorU2VlIHRoZSBwa2ctY29uZmlnIG1hbiBwYWdlIGZvciBtb3JlIGRldGFpbHMuIiAiJExJTkVOTyIgNQorCitlbGlmIHRlc3QgJHBrZ19mYWlsZWQgPSB1bnRyaWVkOyB0aGVuCisgICAgIAl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKwl7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJUaGUgcGtnLWNvbmZpZyBzY3JpcHQgY291bGQgbm90IGJlIGZvdW5kIG9yIGlzIHRvbyBvbGQuICBNYWtlIHN1cmUgaXQKK2lzIGluIHlvdXIgUEFUSCBvciBzZXQgdGhlIFBLR19DT05GSUcgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIGZ1bGwKK3BhdGggdG8gcGtnLWNvbmZpZy4KKworQWx0ZXJuYXRpdmVseSwgeW91IG1heSBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBNT05PRE9DX0NGTEFHUworYW5kIE1PTk9ET0NfTElCUyB0byBhdm9pZCB0aGUgbmVlZCB0byBjYWxsIHBrZy1jb25maWcuCitTZWUgdGhlIHBrZy1jb25maWcgbWFuIHBhZ2UgZm9yIG1vcmUgZGV0YWlscy4KKworVG8gZ2V0IHBrZy1jb25maWcsIHNlZSA8aHR0cDovL3BrZy1jb25maWcuZnJlZWRlc2t0b3Aub3JnLz4uCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorCitlbHNlCisJTU9OT0RPQ19DRkxBR1M9JHBrZ19jdl9NT05PRE9DX0NGTEFHUworCU1PTk9ET0NfTElCUz0kcGtnX2N2X01PTk9ET0NfTElCUworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCitmaQorICAgICAgICBNT05PRE9DX0RJUj1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1zb3VyY2VzZGlyIG1vbm9kb2NgCisKKyAgICAgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJtb25vZG9jZXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IG1vbm9kb2NlcjsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfTU9OT0RPQ0VSKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkTU9OT0RPQ0VSIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX01PTk9ET0NFUj0iJE1PTk9ET0NFUiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfTU9OT0RPQ0VSPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIDs7Citlc2FjCitmaQorTU9OT0RPQ0VSPSRhY19jdl9wYXRoX01PTk9ET0NFUgoraWYgdGVzdCAtbiAiJE1PTk9ET0NFUiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNT05PRE9DRVIiID4mNQorJGFzX2VjaG8gIiRNT05PRE9DRVIiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICAgICAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm1kYXNzZW1ibGVyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBtZGFzc2VtYmxlcjsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfTURBU1NFTUJMRVIrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRNREFTU0VNQkxFUiBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9NREFTU0VNQkxFUj0iJE1EQVNTRU1CTEVSIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcGF0aF9NREFTU0VNQkxFUj0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICA7OworZXNhYworZmkKK01EQVNTRU1CTEVSPSRhY19jdl9wYXRoX01EQVNTRU1CTEVSCitpZiB0ZXN0IC1uICIkTURBU1NFTUJMRVIiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTURBU1NFTUJMRVIiID4mNQorJGFzX2VjaG8gIiRNREFTU0VNQkxFUiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisKKworCisKK2ZpCisgaWYgdGVzdCAieCRIQVZFX01PTk9ET0MiID0gInh5ZXMiOyB0aGVuCisgIEhBVkVfTU9OT0RPQ19UUlVFPQorICBIQVZFX01PTk9ET0NfRkFMU0U9JyMnCitlbHNlCisgIEhBVkVfTU9OT0RPQ19UUlVFPScjJworICBIQVZFX01PTk9ET0NfRkFMU0U9CitmaQorCisKKyMKKyMgQnVpbGQgYXV0b2lwZD8KKyMKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1hdXRvaXBkIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2F1dG9pcGQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9hdXRvaXBkOyBjYXNlICIke2VuYWJsZXZhbH0iIGluCisgICAgICAgICAgICAgICAgeWVzKSBFTkFCTEVfQVVUT0lQRD15ZXMgOzsKKyAgICAgICAgICAgICAgICBubykgIEVOQUJMRV9BVVRPSVBEPW5vIDs7CisgICAgICAgICAgICAgICAgKikgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZGlzYWJsZS1hdXRvaXBkIiAiJExJTkVOTyIgNSA7OworICAgICAgICBlc2FjCitlbHNlCisgIEVOQUJMRV9BVVRPSVBEPXllcworZmkKKworCisgaWYgdGVzdCAieCRFTkFCTEVfQVVUT0lQRCIgPSAieHllcyI7IHRoZW4KKyAgRU5BQkxFX0FVVE9JUERfVFJVRT0KKyAgRU5BQkxFX0FVVE9JUERfRkFMU0U9JyMnCitlbHNlCisgIEVOQUJMRV9BVVRPSVBEX1RSVUU9JyMnCisgIEVOQUJMRV9BVVRPSVBEX0ZBTFNFPQorZmkKKworCisjCisjIERlZmluaW5nIHVzZXJzIGFuZCBncm91cHMKKyMKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1hdmFoaV91c2VyIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9hdmFoaV91c2VyK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9hdmFoaV91c2VyOworZmkKKworaWYgdGVzdCAteiAiJHdpdGhfYXZhaGlfdXNlciIgOyB0aGVuCisgICAgQVZBSElfVVNFUj1hdmFoaQorZWxzZQorICAgIEFWQUhJX1VTRVI9JHdpdGhfYXZhaGlfdXNlcgorZmkKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEFWQUhJX1VTRVIgIiRBVkFISV9VU0VSIgorX0FDRU9GCisKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWF2YWhpX2dyb3VwIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9hdmFoaV9ncm91cCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfYXZhaGlfZ3JvdXA7CitmaQorCitpZiB0ZXN0IC16ICIkd2l0aF9hdmFoaV9ncm91cCIgOyB0aGVuCisgICAgQVZBSElfR1JPVVA9YXZhaGkKK2Vsc2UKKyAgICBBVkFISV9HUk9VUD0kd2l0aF9hdmFoaV9ncm91cAorZmkKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEFWQUhJX0dST1VQICIkQVZBSElfR1JPVVAiCitfQUNFT0YKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtYXZhaGlfcHJpdl9hY2Nlc3NfZ3JvdXAgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2F2YWhpX3ByaXZfYWNjZXNzX2dyb3VwK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9hdmFoaV9wcml2X2FjY2Vzc19ncm91cDsKK2ZpCisKK2lmIHRlc3QgLXogIiR3aXRoX2F2YWhpX3ByaXZfYWNjZXNzX2dyb3VwIiA7IHRoZW4KKyAgICBBVkFISV9QUklWX0FDQ0VTU19HUk9VUD1uZXRkZXYKK2Vsc2UKKyAgICBBVkFISV9QUklWX0FDQ0VTU19HUk9VUD0kd2l0aF9hdmFoaV9wcml2X2FjY2Vzc19ncm91cAorZmkKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEFWQUhJX1BSSVZfQUNDRVNTX0dST1VQICIkQVZBSElfUFJJVl9BQ0NFU1NfR1JPVVAiCitfQUNFT0YKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtYXV0b2lwZF91c2VyIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9hdXRvaXBkX3VzZXIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2F1dG9pcGRfdXNlcjsKK2ZpCisKK2lmIHRlc3QgLXogIiR3aXRoX2F1dG9pcGRfdXNlciIgOyB0aGVuCisgICAgQVZBSElfQVVUT0lQRF9VU0VSPWF2YWhpLWF1dG9pcGQKK2Vsc2UKKyAgICBBVkFISV9BVVRPSVBEX1VTRVI9JHdpdGhfYXV0b2lwZF91c2VyCitmaQorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgQVZBSElfQVVUT0lQRF9VU0VSICIkQVZBSElfQVVUT0lQRF9VU0VSIgorX0FDRU9GCisKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWF1dG9pcGRfZ3JvdXAgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2F1dG9pcGRfZ3JvdXArc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2F1dG9pcGRfZ3JvdXA7CitmaQorCitpZiB0ZXN0IC16ICIkd2l0aF9hdXRvaXBkX2dyb3VwIiA7IHRoZW4KKyAgICBBVkFISV9BVVRPSVBEX0dST1VQPWF2YWhpLWF1dG9pcGQKK2Vsc2UKKyAgICBBVkFISV9BVVRPSVBEX0dST1VQPSR3aXRoX2F1dG9pcGRfZ3JvdXAKK2ZpCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBBVkFISV9BVVRPSVBEX0dST1VQICIkQVZBSElfQVVUT0lQRF9HUk9VUCIKK19BQ0VPRgorCisKKyMKKyMgQXZhaGkgcnVudGltZSBkaXIKKyMKK2F2YWhpX3J1bnRpbWVfZGlyPSIke2xvY2Fsc3RhdGVkaXJ9L3J1biIKK2F2YWhpX3NvY2tldD0iJHthdmFoaV9ydW50aW1lX2Rpcn0vYXZhaGktZGFlbW9uL3NvY2tldCIKKworCisKKyMKKyMgQXZhaGkgaW50ZXJmYWNlcyBkaXIKKyMKK2lmIHRlc3QgIngkSEFWRV9QWVRIT05fREJVUyIgPSAieHllcyIgLW8gIngkSEFWRV9HVEsiID0gInh5ZXMiOyB0aGVuCisJaW50ZXJmYWNlc2Rpcj0iJHtkYXRhZGlyfS8ke1BBQ0tBR0V9L2ludGVyZmFjZXMvIgorCitmaQorCisjCisjIERveHlnZW4KKyMKKworCisKKworCisKKworCisKKworIyBGaWxlczoKK0RYX1BST0pFQ1Q9YXZhaGkKKworRFhfQ09ORklHPWRveHlnZW4uY2ZnCisKK0RYX0RPQ0RJUj1kb3h5Z2VuCisKKworIyBFbnZpcm9ubWVudCB2YXJpYWJsZXMgdXNlZCBpbnNpZGUgZG94eWdlbi5jZmc6CitEWF9FTlY9IiREWF9FTlYgU1JDRElSPSckc3JjZGlyJyIKKworRFhfRU5WPSIkRFhfRU5WIFBST0pFQ1Q9JyREWF9QUk9KRUNUJyIKKworRFhfRU5WPSIkRFhfRU5WIERPQ0RJUj0nJERYX0RPQ0RJUiciCisKK0RYX0VOVj0iJERYX0VOViBWRVJTSU9OPSckUEFDS0FHRV9WRVJTSU9OJyIKKworCisjIERveHlnZW4gaXRzZWxmOgorCisKKworICAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1kb3h5Z2VuLWRvYyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9kb3h5Z2VuX2RvYytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2RveHlnZW5fZG9jOworY2FzZSAiJGVuYWJsZXZhbCIgaW4KKyMoCit5fFl8eWVzfFllc3xZRVMpCisgICAgRFhfRkxBR19kb2M9MQorCisKKzs7ICMoCitufE58bm98Tm98Tk8pCisgICAgRFhfRkxBR19kb2M9MAorCis7OyAjKAorKikKKyAgICBhc19mbl9lcnJvciAkPyAiaW52YWxpZCB2YWx1ZSAnJGVuYWJsZXZhbCcgZ2l2ZW4gdG8gZG94eWdlbi1kb2MiICIkTElORU5PIiA1Cis7OworZXNhYworCitlbHNlCisKK0RYX0ZMQUdfZG9jPTEKKworCisKK2ZpCisKK2lmIHRlc3QgIiREWF9GTEFHX2RvYyIgPSAxOyB0aGVuCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWRveHlnZW4iLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9ZG94eWdlbjsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfRFhfRE9YWUdFTis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJERYX0RPWFlHRU4gaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfRFhfRE9YWUdFTj0iJERYX0RPWFlHRU4iICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX0RYX0RPWFlHRU49IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgOzsKK2VzYWMKK2ZpCitEWF9ET1hZR0VOPSRhY19jdl9wYXRoX0RYX0RPWFlHRU4KK2lmIHRlc3QgLW4gIiREWF9ET1hZR0VOIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJERYX0RPWFlHRU4iID4mNQorJGFzX2VjaG8gIiREWF9ET1hZR0VOIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9EWF9ET1hZR0VOIjsgdGhlbgorICBhY19wdF9EWF9ET1hZR0VOPSREWF9ET1hZR0VOCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZG94eWdlbiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgZG94eWdlbjsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfYWNfcHRfRFhfRE9YWUdFTis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJGFjX3B0X0RYX0RPWFlHRU4gaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfYWNfcHRfRFhfRE9YWUdFTj0iJGFjX3B0X0RYX0RPWFlHRU4iICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX2FjX3B0X0RYX0RPWFlHRU49IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgOzsKK2VzYWMKK2ZpCithY19wdF9EWF9ET1hZR0VOPSRhY19jdl9wYXRoX2FjX3B0X0RYX0RPWFlHRU4KK2lmIHRlc3QgLW4gIiRhY19wdF9EWF9ET1hZR0VOIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3B0X0RYX0RPWFlHRU4iID4mNQorJGFzX2VjaG8gIiRhY19wdF9EWF9ET1hZR0VOIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfcHRfRFhfRE9YWUdFTiIgPSB4OyB0aGVuCisgICAgRFhfRE9YWUdFTj0iIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIERYX0RPWFlHRU49JGFjX3B0X0RYX0RPWFlHRU4KKyAgZmkKK2Vsc2UKKyAgRFhfRE9YWUdFTj0iJGFjX2N2X3BhdGhfRFhfRE9YWUdFTiIKK2ZpCisKK2lmIHRlc3QgIiREWF9GTEFHX2RvYyREWF9ET1hZR0VOIiA9IDE7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IGRveHlnZW4gbm90IGZvdW5kIC0gd2lsbCBub3QgZ2VuZXJhdGUgYW55IGRveHlnZW4gZG9jdW1lbnRhdGlvbiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBkb3h5Z2VuIG5vdCBmb3VuZCAtIHdpbGwgbm90IGdlbmVyYXRlIGFueSBkb3h5Z2VuIGRvY3VtZW50YXRpb24iID4mMjt9CisgICAgRFhfRkxBR19kb2M9MAorCitmaQorCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXBlcmwiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9cGVybDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfRFhfUEVSTCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJERYX1BFUkwgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfRFhfUEVSTD0iJERYX1BFUkwiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX0RYX1BFUkw9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgOzsKK2VzYWMKK2ZpCitEWF9QRVJMPSRhY19jdl9wYXRoX0RYX1BFUkwKK2lmIHRlc3QgLW4gIiREWF9QRVJMIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJERYX1BFUkwiID4mNQorJGFzX2VjaG8gIiREWF9QRVJMIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9EWF9QRVJMIjsgdGhlbgorICBhY19wdF9EWF9QRVJMPSREWF9QRVJMCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAicGVybCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgcGVybDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfYWNfcHRfRFhfUEVSTCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJGFjX3B0X0RYX1BFUkwgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfYWNfcHRfRFhfUEVSTD0iJGFjX3B0X0RYX1BFUkwiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX2FjX3B0X0RYX1BFUkw9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgOzsKK2VzYWMKK2ZpCithY19wdF9EWF9QRVJMPSRhY19jdl9wYXRoX2FjX3B0X0RYX1BFUkwKK2lmIHRlc3QgLW4gIiRhY19wdF9EWF9QRVJMIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3B0X0RYX1BFUkwiID4mNQorJGFzX2VjaG8gIiRhY19wdF9EWF9QRVJMIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfcHRfRFhfUEVSTCIgPSB4OyB0aGVuCisgICAgRFhfUEVSTD0iIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIERYX1BFUkw9JGFjX3B0X0RYX1BFUkwKKyAgZmkKK2Vsc2UKKyAgRFhfUEVSTD0iJGFjX2N2X3BhdGhfRFhfUEVSTCIKK2ZpCisKK2lmIHRlc3QgIiREWF9GTEFHX2RvYyREWF9QRVJMIiA9IDE7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHBlcmwgbm90IGZvdW5kIC0gd2lsbCBub3QgZ2VuZXJhdGUgYW55IGRveHlnZW4gZG9jdW1lbnRhdGlvbiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBwZXJsIG5vdCBmb3VuZCAtIHdpbGwgbm90IGdlbmVyYXRlIGFueSBkb3h5Z2VuIGRvY3VtZW50YXRpb24iID4mMjt9CisgICAgRFhfRkxBR19kb2M9MAorCitmaQorCisgICAgOgorZmkKK2lmIHRlc3QgIiREWF9GTEFHX2RvYyIgPSAxOyB0aGVuCisgICAgIGlmIDo7IHRoZW4KKyAgRFhfQ09ORF9kb2NfVFJVRT0KKyAgRFhfQ09ORF9kb2NfRkFMU0U9JyMnCitlbHNlCisgIERYX0NPTkRfZG9jX1RSVUU9JyMnCisgIERYX0NPTkRfZG9jX0ZBTFNFPQorZmkKKworICAgIERYX0VOVj0iJERYX0VOViBQRVJMX1BBVEg9JyREWF9QRVJMJyIKKworICAgIDoKK2Vsc2UKKyAgICAgaWYgZmFsc2U7IHRoZW4KKyAgRFhfQ09ORF9kb2NfVFJVRT0KKyAgRFhfQ09ORF9kb2NfRkFMU0U9JyMnCitlbHNlCisgIERYX0NPTkRfZG9jX1RSVUU9JyMnCisgIERYX0NPTkRfZG9jX0ZBTFNFPQorZmkKKworCisgICAgOgorZmkKKworCisjIERvdCBmb3IgZ3JhcGhpY3M6CisKKworCisgICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRveHlnZW4tZG90IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2RveHlnZW5fZG90K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfZG94eWdlbl9kb3Q7CitjYXNlICIkZW5hYmxldmFsIiBpbgorIygKK3l8WXx5ZXN8WWVzfFlFUykKKyAgICBEWF9GTEFHX2RvdD0xCisKKwordGVzdCAiJERYX0ZMQUdfZG9jIiA9ICIxIiBcCit8fCBhc19mbl9lcnJvciAkPyAiZG94eWdlbi1kb3QgcmVxdWlyZXMgZG94eWdlbi1kb3QiICIkTElORU5PIiA1CisKKzs7ICMoCitufE58bm98Tm98Tk8pCisgICAgRFhfRkxBR19kb3Q9MAorCis7OyAjKAorKikKKyAgICBhc19mbl9lcnJvciAkPyAiaW52YWxpZCB2YWx1ZSAnJGVuYWJsZXZhbCcgZ2l2ZW4gdG8gZG94eWdlbi1kb3QiICIkTElORU5PIiA1Cis7OworZXNhYworCitlbHNlCisKK0RYX0ZMQUdfZG90PTEKKworCit0ZXN0ICIkRFhfRkxBR19kb2MiID0gIjEiIHx8IERYX0ZMQUdfZG90PTAKKworCisKK2ZpCisKK2lmIHRlc3QgIiREWF9GTEFHX2RvdCIgPSAxOyB0aGVuCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWRvdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1kb3Q7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX0RYX0RPVCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJERYX0RPVCBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9EWF9ET1Q9IiREWF9ET1QiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX0RYX0RPVD0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICA7OworZXNhYworZmkKK0RYX0RPVD0kYWNfY3ZfcGF0aF9EWF9ET1QKK2lmIHRlc3QgLW4gIiREWF9ET1QiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkRFhfRE9UIiA+JjUKKyRhc19lY2hvICIkRFhfRE9UIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9EWF9ET1QiOyB0aGVuCisgIGFjX3B0X0RYX0RPVD0kRFhfRE9UCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZG90Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBkb3Q7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX2FjX3B0X0RYX0RPVCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJGFjX3B0X0RYX0RPVCBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9hY19wdF9EWF9ET1Q9IiRhY19wdF9EWF9ET1QiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX2FjX3B0X0RYX0RPVD0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICA7OworZXNhYworZmkKK2FjX3B0X0RYX0RPVD0kYWNfY3ZfcGF0aF9hY19wdF9EWF9ET1QKK2lmIHRlc3QgLW4gIiRhY19wdF9EWF9ET1QiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcHRfRFhfRE9UIiA+JjUKKyRhc19lY2hvICIkYWNfcHRfRFhfRE9UIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfcHRfRFhfRE9UIiA9IHg7IHRoZW4KKyAgICBEWF9ET1Q9IiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBEWF9ET1Q9JGFjX3B0X0RYX0RPVAorICBmaQorZWxzZQorICBEWF9ET1Q9IiRhY19jdl9wYXRoX0RYX0RPVCIKK2ZpCisKK2lmIHRlc3QgIiREWF9GTEFHX2RvdCREWF9ET1QiID0gMTsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogZG90IG5vdCBmb3VuZCAtIHdpbGwgbm90IGdlbmVyYXRlIGdyYXBoaWNzIGZvciBkb3h5Z2VuIGRvY3VtZW50YXRpb24iID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogZG90IG5vdCBmb3VuZCAtIHdpbGwgbm90IGdlbmVyYXRlIGdyYXBoaWNzIGZvciBkb3h5Z2VuIGRvY3VtZW50YXRpb24iID4mMjt9CisgICAgRFhfRkxBR19kb3Q9MAorCitmaQorCisgICAgOgorZmkKK2lmIHRlc3QgIiREWF9GTEFHX2RvdCIgPSAxOyB0aGVuCisgICAgIGlmIDo7IHRoZW4KKyAgRFhfQ09ORF9kb3RfVFJVRT0KKyAgRFhfQ09ORF9kb3RfRkFMU0U9JyMnCitlbHNlCisgIERYX0NPTkRfZG90X1RSVUU9JyMnCisgIERYX0NPTkRfZG90X0ZBTFNFPQorZmkKKworICAgIERYX0VOVj0iJERYX0VOViBIQVZFX0RPVD0nWUVTJyIKKworICAgICAgICAgICAgIERYX0VOVj0iJERYX0VOViBET1RfUEFUSD0nYGV4cHIgIi4kRFhfRE9UIiA6ICdcKFwuXClbXi9dKiQnIFx8ICJ4JERYX0RPVCIgOiAneFwoLipcKS9bXi9dKiQnYCciCisKKyAgICA6CitlbHNlCisgICAgIGlmIGZhbHNlOyB0aGVuCisgIERYX0NPTkRfZG90X1RSVUU9CisgIERYX0NPTkRfZG90X0ZBTFNFPScjJworZWxzZQorICBEWF9DT05EX2RvdF9UUlVFPScjJworICBEWF9DT05EX2RvdF9GQUxTRT0KK2ZpCisKKyAgICBEWF9FTlY9IiREWF9FTlYgSEFWRV9ET1Q9J05PJyIKKworICAgIDoKK2ZpCisKKworIyBNYW4gcGFnZXMgZ2VuZXJhdGlvbjoKKworCisKKyAgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZG94eWdlbi1tYW4gd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZG94eWdlbl9tYW4rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9kb3h5Z2VuX21hbjsKK2Nhc2UgIiRlbmFibGV2YWwiIGluCisjKAoreXxZfHllc3xZZXN8WUVTKQorICAgIERYX0ZMQUdfbWFuPTEKKworCit0ZXN0ICIkRFhfRkxBR19kb2MiID0gIjEiIFwKK3x8IGFzX2ZuX2Vycm9yICQ/ICJkb3h5Z2VuLW1hbiByZXF1aXJlcyBkb3h5Z2VuLW1hbiIgIiRMSU5FTk8iIDUKKworOzsgIygKK258Tnxub3xOb3xOTykKKyAgICBEWF9GTEFHX21hbj0wCisKKzs7ICMoCisqKQorICAgIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIHZhbHVlICckZW5hYmxldmFsJyBnaXZlbiB0byBkb3h5Z2VuLW1hbiIgIiRMSU5FTk8iIDUKKzs7Citlc2FjCisKK2Vsc2UKKworRFhfRkxBR19tYW49MAorCisKK3Rlc3QgIiREWF9GTEFHX2RvYyIgPSAiMSIgfHwgRFhfRkxBR19tYW49MAorCisKKworZmkKKworaWYgdGVzdCAiJERYX0ZMQUdfbWFuIiA9IDE7IHRoZW4KKworICAgIDoKK2ZpCitpZiB0ZXN0ICIkRFhfRkxBR19tYW4iID0gMTsgdGhlbgorICAgICBpZiA6OyB0aGVuCisgIERYX0NPTkRfbWFuX1RSVUU9CisgIERYX0NPTkRfbWFuX0ZBTFNFPScjJworZWxzZQorICBEWF9DT05EX21hbl9UUlVFPScjJworICBEWF9DT05EX21hbl9GQUxTRT0KK2ZpCisKKyAgICBEWF9FTlY9IiREWF9FTlYgR0VORVJBVEVfTUFOPSdZRVMnIgorCisgICAgOgorZWxzZQorICAgICBpZiBmYWxzZTsgdGhlbgorICBEWF9DT05EX21hbl9UUlVFPQorICBEWF9DT05EX21hbl9GQUxTRT0nIycKK2Vsc2UKKyAgRFhfQ09ORF9tYW5fVFJVRT0nIycKKyAgRFhfQ09ORF9tYW5fRkFMU0U9CitmaQorCisgICAgRFhfRU5WPSIkRFhfRU5WIEdFTkVSQVRFX01BTj0nTk8nIgorCisgICAgOgorZmkKKworCisjIFJURiBmaWxlIGdlbmVyYXRpb246CisKKworCisgICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRveHlnZW4tcnRmIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2RveHlnZW5fcnRmK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfZG94eWdlbl9ydGY7CitjYXNlICIkZW5hYmxldmFsIiBpbgorIygKK3l8WXx5ZXN8WWVzfFlFUykKKyAgICBEWF9GTEFHX3J0Zj0xCisKKwordGVzdCAiJERYX0ZMQUdfZG9jIiA9ICIxIiBcCit8fCBhc19mbl9lcnJvciAkPyAiZG94eWdlbi1ydGYgcmVxdWlyZXMgZG94eWdlbi1ydGYiICIkTElORU5PIiA1CisKKzs7ICMoCitufE58bm98Tm98Tk8pCisgICAgRFhfRkxBR19ydGY9MAorCis7OyAjKAorKikKKyAgICBhc19mbl9lcnJvciAkPyAiaW52YWxpZCB2YWx1ZSAnJGVuYWJsZXZhbCcgZ2l2ZW4gdG8gZG94eWdlbi1ydGYiICIkTElORU5PIiA1Cis7OworZXNhYworCitlbHNlCisKK0RYX0ZMQUdfcnRmPTAKKworCit0ZXN0ICIkRFhfRkxBR19kb2MiID0gIjEiIHx8IERYX0ZMQUdfcnRmPTAKKworCisKK2ZpCisKK2lmIHRlc3QgIiREWF9GTEFHX3J0ZiIgPSAxOyB0aGVuCisKKyAgICA6CitmaQoraWYgdGVzdCAiJERYX0ZMQUdfcnRmIiA9IDE7IHRoZW4KKyAgICAgaWYgOjsgdGhlbgorICBEWF9DT05EX3J0Zl9UUlVFPQorICBEWF9DT05EX3J0Zl9GQUxTRT0nIycKK2Vsc2UKKyAgRFhfQ09ORF9ydGZfVFJVRT0nIycKKyAgRFhfQ09ORF9ydGZfRkFMU0U9CitmaQorCisgICAgRFhfRU5WPSIkRFhfRU5WIEdFTkVSQVRFX1JURj0nWUVTJyIKKworICAgIDoKK2Vsc2UKKyAgICAgaWYgZmFsc2U7IHRoZW4KKyAgRFhfQ09ORF9ydGZfVFJVRT0KKyAgRFhfQ09ORF9ydGZfRkFMU0U9JyMnCitlbHNlCisgIERYX0NPTkRfcnRmX1RSVUU9JyMnCisgIERYX0NPTkRfcnRmX0ZBTFNFPQorZmkKKworICAgIERYX0VOVj0iJERYX0VOViBHRU5FUkFURV9SVEY9J05PJyIKKworICAgIDoKK2ZpCisKKworIyBYTUwgZmlsZSBnZW5lcmF0aW9uOgorCisKKworICAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1kb3h5Z2VuLXhtbCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9kb3h5Z2VuX3htbCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2RveHlnZW5feG1sOworY2FzZSAiJGVuYWJsZXZhbCIgaW4KKyMoCit5fFl8eWVzfFllc3xZRVMpCisgICAgRFhfRkxBR194bWw9MQorCisKK3Rlc3QgIiREWF9GTEFHX2RvYyIgPSAiMSIgXAorfHwgYXNfZm5fZXJyb3IgJD8gImRveHlnZW4teG1sIHJlcXVpcmVzIGRveHlnZW4teG1sIiAiJExJTkVOTyIgNQorCis7OyAjKAorbnxOfG5vfE5vfE5PKQorICAgIERYX0ZMQUdfeG1sPTAKKworOzsgIygKKyopCisgICAgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgdmFsdWUgJyRlbmFibGV2YWwnIGdpdmVuIHRvIGRveHlnZW4teG1sIiAiJExJTkVOTyIgNQorOzsKK2VzYWMKKworZWxzZQorCitEWF9GTEFHX3htbD0xCisKKwordGVzdCAiJERYX0ZMQUdfZG9jIiA9ICIxIiB8fCBEWF9GTEFHX3htbD0wCisKKworCitmaQorCitpZiB0ZXN0ICIkRFhfRkxBR194bWwiID0gMTsgdGhlbgorCisgICAgOgorZmkKK2lmIHRlc3QgIiREWF9GTEFHX3htbCIgPSAxOyB0aGVuCisgICAgIGlmIDo7IHRoZW4KKyAgRFhfQ09ORF94bWxfVFJVRT0KKyAgRFhfQ09ORF94bWxfRkFMU0U9JyMnCitlbHNlCisgIERYX0NPTkRfeG1sX1RSVUU9JyMnCisgIERYX0NPTkRfeG1sX0ZBTFNFPQorZmkKKworICAgIERYX0VOVj0iJERYX0VOViBHRU5FUkFURV9YTUw9J1lFUyciCisKKyAgICA6CitlbHNlCisgICAgIGlmIGZhbHNlOyB0aGVuCisgIERYX0NPTkRfeG1sX1RSVUU9CisgIERYX0NPTkRfeG1sX0ZBTFNFPScjJworZWxzZQorICBEWF9DT05EX3htbF9UUlVFPScjJworICBEWF9DT05EX3htbF9GQUxTRT0KK2ZpCisKKyAgICBEWF9FTlY9IiREWF9FTlYgR0VORVJBVEVfWE1MPSdOTyciCisKKyAgICA6CitmaQorCisKKyMgKENvbXByZXNzZWQpIEhUTUwgaGVscCBnZW5lcmF0aW9uOgorCisKKworICAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1kb3h5Z2VuLWNobSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9kb3h5Z2VuX2NobStzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2RveHlnZW5fY2htOworY2FzZSAiJGVuYWJsZXZhbCIgaW4KKyMoCit5fFl8eWVzfFllc3xZRVMpCisgICAgRFhfRkxBR19jaG09MQorCisKK3Rlc3QgIiREWF9GTEFHX2RvYyIgPSAiMSIgXAorfHwgYXNfZm5fZXJyb3IgJD8gImRveHlnZW4tY2htIHJlcXVpcmVzIGRveHlnZW4tY2htIiAiJExJTkVOTyIgNQorCis7OyAjKAorbnxOfG5vfE5vfE5PKQorICAgIERYX0ZMQUdfY2htPTAKKworOzsgIygKKyopCisgICAgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgdmFsdWUgJyRlbmFibGV2YWwnIGdpdmVuIHRvIGRveHlnZW4tY2htIiAiJExJTkVOTyIgNQorOzsKK2VzYWMKKworZWxzZQorCitEWF9GTEFHX2NobT0wCisKKwordGVzdCAiJERYX0ZMQUdfZG9jIiA9ICIxIiB8fCBEWF9GTEFHX2NobT0wCisKKworCitmaQorCitpZiB0ZXN0ICIkRFhfRkxBR19jaG0iID0gMTsgdGhlbgorCitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1oaGMiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9aGhjOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9EWF9ISEMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICREWF9ISEMgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfRFhfSEhDPSIkRFhfSEhDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcGF0aF9EWF9ISEM9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgOzsKK2VzYWMKK2ZpCitEWF9ISEM9JGFjX2N2X3BhdGhfRFhfSEhDCitpZiB0ZXN0IC1uICIkRFhfSEhDIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJERYX0hIQyIgPiY1CiskYXNfZWNobyAiJERYX0hIQyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfRFhfSEhDIjsgdGhlbgorICBhY19wdF9EWF9ISEM9JERYX0hIQworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImhoYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgaGhjOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9hY19wdF9EWF9ISEMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRhY19wdF9EWF9ISEMgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfYWNfcHRfRFhfSEhDPSIkYWNfcHRfRFhfSEhDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcGF0aF9hY19wdF9EWF9ISEM9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgOzsKK2VzYWMKK2ZpCithY19wdF9EWF9ISEM9JGFjX2N2X3BhdGhfYWNfcHRfRFhfSEhDCitpZiB0ZXN0IC1uICIkYWNfcHRfRFhfSEhDIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3B0X0RYX0hIQyIgPiY1CiskYXNfZWNobyAiJGFjX3B0X0RYX0hIQyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX3B0X0RYX0hIQyIgPSB4OyB0aGVuCisgICAgRFhfSEhDPSIiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgRFhfSEhDPSRhY19wdF9EWF9ISEMKKyAgZmkKK2Vsc2UKKyAgRFhfSEhDPSIkYWNfY3ZfcGF0aF9EWF9ISEMiCitmaQorCitpZiB0ZXN0ICIkRFhfRkxBR19jaG0kRFhfSEhDIiA9IDE7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IGhoYyBub3QgZm91bmQgLSB3aWxsIG5vdCBnZW5lcmF0ZSBkb3h5Z2VuIGNvbXByZXNzZWQgSFRNTCBoZWxwIGRvY3VtZW50YXRpb24iID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogaGhjIG5vdCBmb3VuZCAtIHdpbGwgbm90IGdlbmVyYXRlIGRveHlnZW4gY29tcHJlc3NlZCBIVE1MIGhlbHAgZG9jdW1lbnRhdGlvbiIgPiYyO30KKyAgICBEWF9GTEFHX2NobT0wCisKK2ZpCisKKyAgICA6CitmaQoraWYgdGVzdCAiJERYX0ZMQUdfY2htIiA9IDE7IHRoZW4KKyAgICAgaWYgOjsgdGhlbgorICBEWF9DT05EX2NobV9UUlVFPQorICBEWF9DT05EX2NobV9GQUxTRT0nIycKK2Vsc2UKKyAgRFhfQ09ORF9jaG1fVFJVRT0nIycKKyAgRFhfQ09ORF9jaG1fRkFMU0U9CitmaQorCisgICAgRFhfRU5WPSIkRFhfRU5WIEhIQ19QQVRIPSckRFhfSEhDJyIKKworICAgICAgICAgICAgIERYX0VOVj0iJERYX0VOViBHRU5FUkFURV9IVE1MPSdZRVMnIgorCisgICAgICAgICAgICAgRFhfRU5WPSIkRFhfRU5WIEdFTkVSQVRFX0hUTUxIRUxQPSdZRVMnIgorCisgICAgOgorZWxzZQorICAgICBpZiBmYWxzZTsgdGhlbgorICBEWF9DT05EX2NobV9UUlVFPQorICBEWF9DT05EX2NobV9GQUxTRT0nIycKK2Vsc2UKKyAgRFhfQ09ORF9jaG1fVFJVRT0nIycKKyAgRFhfQ09ORF9jaG1fRkFMU0U9CitmaQorCisgICAgRFhfRU5WPSIkRFhfRU5WIEdFTkVSQVRFX0hUTUxIRUxQPSdOTyciCisKKyAgICA6CitmaQorCisKKyMgU2VwZXJhdGUgQ0hJIGZpbGUgZ2VuZXJhdGlvbi4KKworCisKKyAgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZG94eWdlbi1jaGkgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZG94eWdlbl9jaGkrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9kb3h5Z2VuX2NoaTsKK2Nhc2UgIiRlbmFibGV2YWwiIGluCisjKAoreXxZfHllc3xZZXN8WUVTKQorICAgIERYX0ZMQUdfY2hpPTEKKworCit0ZXN0ICIkRFhfRkxBR19jaG0iID0gIjEiIFwKK3x8IGFzX2ZuX2Vycm9yICQ/ICJkb3h5Z2VuLWNoaSByZXF1aXJlcyBkb3h5Z2VuLWNoaSIgIiRMSU5FTk8iIDUKKworOzsgIygKK258Tnxub3xOb3xOTykKKyAgICBEWF9GTEFHX2NoaT0wCisKKzs7ICMoCisqKQorICAgIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIHZhbHVlICckZW5hYmxldmFsJyBnaXZlbiB0byBkb3h5Z2VuLWNoaSIgIiRMSU5FTk8iIDUKKzs7Citlc2FjCisKK2Vsc2UKKworRFhfRkxBR19jaGk9MAorCisKK3Rlc3QgIiREWF9GTEFHX2NobSIgPSAiMSIgfHwgRFhfRkxBR19jaGk9MAorCisKKworZmkKKworaWYgdGVzdCAiJERYX0ZMQUdfY2hpIiA9IDE7IHRoZW4KKworICAgIDoKK2ZpCitpZiB0ZXN0ICIkRFhfRkxBR19jaGkiID0gMTsgdGhlbgorICAgICBpZiA6OyB0aGVuCisgIERYX0NPTkRfY2hpX1RSVUU9CisgIERYX0NPTkRfY2hpX0ZBTFNFPScjJworZWxzZQorICBEWF9DT05EX2NoaV9UUlVFPScjJworICBEWF9DT05EX2NoaV9GQUxTRT0KK2ZpCisKKyAgICBEWF9FTlY9IiREWF9FTlYgR0VORVJBVEVfQ0hJPSdZRVMnIgorCisgICAgOgorZWxzZQorICAgICBpZiBmYWxzZTsgdGhlbgorICBEWF9DT05EX2NoaV9UUlVFPQorICBEWF9DT05EX2NoaV9GQUxTRT0nIycKK2Vsc2UKKyAgRFhfQ09ORF9jaGlfVFJVRT0nIycKKyAgRFhfQ09ORF9jaGlfRkFMU0U9CitmaQorCisgICAgRFhfRU5WPSIkRFhfRU5WIEdFTkVSQVRFX0NIST0nTk8nIgorCisgICAgOgorZmkKKworCisjIFBsYWluIEhUTUwgcGFnZXMgZ2VuZXJhdGlvbjoKKworCisKKyAgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZG94eWdlbi1odG1sIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2RveHlnZW5faHRtbCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2RveHlnZW5faHRtbDsKK2Nhc2UgIiRlbmFibGV2YWwiIGluCisjKAoreXxZfHllc3xZZXN8WUVTKQorICAgIERYX0ZMQUdfaHRtbD0xCisKKwordGVzdCAiJERYX0ZMQUdfZG9jIiA9ICIxIiBcCit8fCBhc19mbl9lcnJvciAkPyAiZG94eWdlbi1odG1sIHJlcXVpcmVzIGRveHlnZW4taHRtbCIgIiRMSU5FTk8iIDUKKwordGVzdCAiJERYX0ZMQUdfY2htIiA9ICIwIiBcCit8fCBhc19mbl9lcnJvciAkPyAiZG94eWdlbi1odG1sIGNvbnRyYWRpY3RzIGRveHlnZW4taHRtbCIgIiRMSU5FTk8iIDUKKworOzsgIygKK258Tnxub3xOb3xOTykKKyAgICBEWF9GTEFHX2h0bWw9MAorCis7OyAjKAorKikKKyAgICBhc19mbl9lcnJvciAkPyAiaW52YWxpZCB2YWx1ZSAnJGVuYWJsZXZhbCcgZ2l2ZW4gdG8gZG94eWdlbi1odG1sIiAiJExJTkVOTyIgNQorOzsKK2VzYWMKKworZWxzZQorCitEWF9GTEFHX2h0bWw9MQorCisKK3Rlc3QgIiREWF9GTEFHX2RvYyIgPSAiMSIgfHwgRFhfRkxBR19odG1sPTAKKworCit0ZXN0ICIkRFhfRkxBR19jaG0iID0gIjAiIHx8IERYX0ZMQUdfaHRtbD0wCisKKworCitmaQorCitpZiB0ZXN0ICIkRFhfRkxBR19odG1sIiA9IDE7IHRoZW4KKworICAgIDoKK2ZpCitpZiB0ZXN0ICIkRFhfRkxBR19odG1sIiA9IDE7IHRoZW4KKyAgICAgaWYgOjsgdGhlbgorICBEWF9DT05EX2h0bWxfVFJVRT0KKyAgRFhfQ09ORF9odG1sX0ZBTFNFPScjJworZWxzZQorICBEWF9DT05EX2h0bWxfVFJVRT0nIycKKyAgRFhfQ09ORF9odG1sX0ZBTFNFPQorZmkKKworICAgIERYX0VOVj0iJERYX0VOViBHRU5FUkFURV9IVE1MPSdZRVMnIgorCisgICAgOgorZWxzZQorICAgICBpZiBmYWxzZTsgdGhlbgorICBEWF9DT05EX2h0bWxfVFJVRT0KKyAgRFhfQ09ORF9odG1sX0ZBTFNFPScjJworZWxzZQorICBEWF9DT05EX2h0bWxfVFJVRT0nIycKKyAgRFhfQ09ORF9odG1sX0ZBTFNFPQorZmkKKworICAgIHRlc3QgIiREWF9GTEFHX2NobSIgPSAxIHx8IERYX0VOVj0iJERYX0VOViBHRU5FUkFURV9IVE1MPSdOTyciCisKKyAgICA6CitmaQorCisKKyMgUG9zdFNjcmlwdCBmaWxlIGdlbmVyYXRpb246CisKKworCisgICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRveHlnZW4tcHMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZG94eWdlbl9wcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2RveHlnZW5fcHM7CitjYXNlICIkZW5hYmxldmFsIiBpbgorIygKK3l8WXx5ZXN8WWVzfFlFUykKKyAgICBEWF9GTEFHX3BzPTEKKworCit0ZXN0ICIkRFhfRkxBR19kb2MiID0gIjEiIFwKK3x8IGFzX2ZuX2Vycm9yICQ/ICJkb3h5Z2VuLXBzIHJlcXVpcmVzIGRveHlnZW4tcHMiICIkTElORU5PIiA1CisKKzs7ICMoCitufE58bm98Tm98Tk8pCisgICAgRFhfRkxBR19wcz0wCisKKzs7ICMoCisqKQorICAgIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIHZhbHVlICckZW5hYmxldmFsJyBnaXZlbiB0byBkb3h5Z2VuLXBzIiAiJExJTkVOTyIgNQorOzsKK2VzYWMKKworZWxzZQorCitEWF9GTEFHX3BzPTAKKworCit0ZXN0ICIkRFhfRkxBR19kb2MiID0gIjEiIHx8IERYX0ZMQUdfcHM9MAorCisKKworZmkKKworaWYgdGVzdCAiJERYX0ZMQUdfcHMiID0gMTsgdGhlbgorCitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1sYXRleCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1sYXRleDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfRFhfTEFURVgrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICREWF9MQVRFWCBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9EWF9MQVRFWD0iJERYX0xBVEVYIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcGF0aF9EWF9MQVRFWD0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICA7OworZXNhYworZmkKK0RYX0xBVEVYPSRhY19jdl9wYXRoX0RYX0xBVEVYCitpZiB0ZXN0IC1uICIkRFhfTEFURVgiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkRFhfTEFURVgiID4mNQorJGFzX2VjaG8gIiREWF9MQVRFWCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfRFhfTEFURVgiOyB0aGVuCisgIGFjX3B0X0RYX0xBVEVYPSREWF9MQVRFWAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImxhdGV4Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBsYXRleDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfYWNfcHRfRFhfTEFURVgrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRhY19wdF9EWF9MQVRFWCBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9hY19wdF9EWF9MQVRFWD0iJGFjX3B0X0RYX0xBVEVYIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcGF0aF9hY19wdF9EWF9MQVRFWD0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICA7OworZXNhYworZmkKK2FjX3B0X0RYX0xBVEVYPSRhY19jdl9wYXRoX2FjX3B0X0RYX0xBVEVYCitpZiB0ZXN0IC1uICIkYWNfcHRfRFhfTEFURVgiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcHRfRFhfTEFURVgiID4mNQorJGFzX2VjaG8gIiRhY19wdF9EWF9MQVRFWCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX3B0X0RYX0xBVEVYIiA9IHg7IHRoZW4KKyAgICBEWF9MQVRFWD0iIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIERYX0xBVEVYPSRhY19wdF9EWF9MQVRFWAorICBmaQorZWxzZQorICBEWF9MQVRFWD0iJGFjX2N2X3BhdGhfRFhfTEFURVgiCitmaQorCitpZiB0ZXN0ICIkRFhfRkxBR19wcyREWF9MQVRFWCIgPSAxOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBsYXRleCBub3QgZm91bmQgLSB3aWxsIG5vdCBnZW5lcmF0ZSBkb3h5Z2VuIFBvc3RTY3JpcHQgZG9jdW1lbnRhdGlvbiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBsYXRleCBub3QgZm91bmQgLSB3aWxsIG5vdCBnZW5lcmF0ZSBkb3h5Z2VuIFBvc3RTY3JpcHQgZG9jdW1lbnRhdGlvbiIgPiYyO30KKyAgICBEWF9GTEFHX3BzPTAKKworZmkKKworCitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1tYWtlaW5kZXgiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9bWFrZWluZGV4OyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9EWF9NQUtFSU5ERVgrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICREWF9NQUtFSU5ERVggaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfRFhfTUFLRUlOREVYPSIkRFhfTUFLRUlOREVYIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcGF0aF9EWF9NQUtFSU5ERVg9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgOzsKK2VzYWMKK2ZpCitEWF9NQUtFSU5ERVg9JGFjX2N2X3BhdGhfRFhfTUFLRUlOREVYCitpZiB0ZXN0IC1uICIkRFhfTUFLRUlOREVYIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJERYX01BS0VJTkRFWCIgPiY1CiskYXNfZWNobyAiJERYX01BS0VJTkRFWCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfRFhfTUFLRUlOREVYIjsgdGhlbgorICBhY19wdF9EWF9NQUtFSU5ERVg9JERYX01BS0VJTkRFWAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm1ha2VpbmRleCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgbWFrZWluZGV4OyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9hY19wdF9EWF9NQUtFSU5ERVgrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRhY19wdF9EWF9NQUtFSU5ERVggaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfYWNfcHRfRFhfTUFLRUlOREVYPSIkYWNfcHRfRFhfTUFLRUlOREVYIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcGF0aF9hY19wdF9EWF9NQUtFSU5ERVg9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgOzsKK2VzYWMKK2ZpCithY19wdF9EWF9NQUtFSU5ERVg9JGFjX2N2X3BhdGhfYWNfcHRfRFhfTUFLRUlOREVYCitpZiB0ZXN0IC1uICIkYWNfcHRfRFhfTUFLRUlOREVYIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3B0X0RYX01BS0VJTkRFWCIgPiY1CiskYXNfZWNobyAiJGFjX3B0X0RYX01BS0VJTkRFWCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX3B0X0RYX01BS0VJTkRFWCIgPSB4OyB0aGVuCisgICAgRFhfTUFLRUlOREVYPSIiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgRFhfTUFLRUlOREVYPSRhY19wdF9EWF9NQUtFSU5ERVgKKyAgZmkKK2Vsc2UKKyAgRFhfTUFLRUlOREVYPSIkYWNfY3ZfcGF0aF9EWF9NQUtFSU5ERVgiCitmaQorCitpZiB0ZXN0ICIkRFhfRkxBR19wcyREWF9NQUtFSU5ERVgiID0gMTsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogbWFrZWluZGV4IG5vdCBmb3VuZCAtIHdpbGwgbm90IGdlbmVyYXRlIGRveHlnZW4gUG9zdFNjcmlwdCBkb2N1bWVudGF0aW9uIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IG1ha2VpbmRleCBub3QgZm91bmQgLSB3aWxsIG5vdCBnZW5lcmF0ZSBkb3h5Z2VuIFBvc3RTY3JpcHQgZG9jdW1lbnRhdGlvbiIgPiYyO30KKyAgICBEWF9GTEFHX3BzPTAKKworZmkKKworCitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1kdmlwcyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1kdmlwczsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfRFhfRFZJUFMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICREWF9EVklQUyBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9EWF9EVklQUz0iJERYX0RWSVBTIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcGF0aF9EWF9EVklQUz0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICA7OworZXNhYworZmkKK0RYX0RWSVBTPSRhY19jdl9wYXRoX0RYX0RWSVBTCitpZiB0ZXN0IC1uICIkRFhfRFZJUFMiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkRFhfRFZJUFMiID4mNQorJGFzX2VjaG8gIiREWF9EVklQUyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfRFhfRFZJUFMiOyB0aGVuCisgIGFjX3B0X0RYX0RWSVBTPSREWF9EVklQUworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImR2aXBzIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBkdmlwczsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfYWNfcHRfRFhfRFZJUFMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRhY19wdF9EWF9EVklQUyBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9hY19wdF9EWF9EVklQUz0iJGFjX3B0X0RYX0RWSVBTIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcGF0aF9hY19wdF9EWF9EVklQUz0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICA7OworZXNhYworZmkKK2FjX3B0X0RYX0RWSVBTPSRhY19jdl9wYXRoX2FjX3B0X0RYX0RWSVBTCitpZiB0ZXN0IC1uICIkYWNfcHRfRFhfRFZJUFMiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcHRfRFhfRFZJUFMiID4mNQorJGFzX2VjaG8gIiRhY19wdF9EWF9EVklQUyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX3B0X0RYX0RWSVBTIiA9IHg7IHRoZW4KKyAgICBEWF9EVklQUz0iIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIERYX0RWSVBTPSRhY19wdF9EWF9EVklQUworICBmaQorZWxzZQorICBEWF9EVklQUz0iJGFjX2N2X3BhdGhfRFhfRFZJUFMiCitmaQorCitpZiB0ZXN0ICIkRFhfRkxBR19wcyREWF9EVklQUyIgPSAxOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBkdmlwcyBub3QgZm91bmQgLSB3aWxsIG5vdCBnZW5lcmF0ZSBkb3h5Z2VuIFBvc3RTY3JpcHQgZG9jdW1lbnRhdGlvbiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBkdmlwcyBub3QgZm91bmQgLSB3aWxsIG5vdCBnZW5lcmF0ZSBkb3h5Z2VuIFBvc3RTY3JpcHQgZG9jdW1lbnRhdGlvbiIgPiYyO30KKyAgICBEWF9GTEFHX3BzPTAKKworZmkKKworCitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1lZ3JlcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1lZ3JlcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfRFhfRUdSRVArOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICREWF9FR1JFUCBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9EWF9FR1JFUD0iJERYX0VHUkVQIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcGF0aF9EWF9FR1JFUD0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICA7OworZXNhYworZmkKK0RYX0VHUkVQPSRhY19jdl9wYXRoX0RYX0VHUkVQCitpZiB0ZXN0IC1uICIkRFhfRUdSRVAiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkRFhfRUdSRVAiID4mNQorJGFzX2VjaG8gIiREWF9FR1JFUCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfRFhfRUdSRVAiOyB0aGVuCisgIGFjX3B0X0RYX0VHUkVQPSREWF9FR1JFUAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImVncmVwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBlZ3JlcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfYWNfcHRfRFhfRUdSRVArOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRhY19wdF9EWF9FR1JFUCBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9hY19wdF9EWF9FR1JFUD0iJGFjX3B0X0RYX0VHUkVQIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcGF0aF9hY19wdF9EWF9FR1JFUD0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICA7OworZXNhYworZmkKK2FjX3B0X0RYX0VHUkVQPSRhY19jdl9wYXRoX2FjX3B0X0RYX0VHUkVQCitpZiB0ZXN0IC1uICIkYWNfcHRfRFhfRUdSRVAiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcHRfRFhfRUdSRVAiID4mNQorJGFzX2VjaG8gIiRhY19wdF9EWF9FR1JFUCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX3B0X0RYX0VHUkVQIiA9IHg7IHRoZW4KKyAgICBEWF9FR1JFUD0iIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIERYX0VHUkVQPSRhY19wdF9EWF9FR1JFUAorICBmaQorZWxzZQorICBEWF9FR1JFUD0iJGFjX2N2X3BhdGhfRFhfRUdSRVAiCitmaQorCitpZiB0ZXN0ICIkRFhfRkxBR19wcyREWF9FR1JFUCIgPSAxOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBlZ3JlcCBub3QgZm91bmQgLSB3aWxsIG5vdCBnZW5lcmF0ZSBkb3h5Z2VuIFBvc3RTY3JpcHQgZG9jdW1lbnRhdGlvbiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBlZ3JlcCBub3QgZm91bmQgLSB3aWxsIG5vdCBnZW5lcmF0ZSBkb3h5Z2VuIFBvc3RTY3JpcHQgZG9jdW1lbnRhdGlvbiIgPiYyO30KKyAgICBEWF9GTEFHX3BzPTAKKworZmkKKworICAgIDoKK2ZpCitpZiB0ZXN0ICIkRFhfRkxBR19wcyIgPSAxOyB0aGVuCisgICAgIGlmIDo7IHRoZW4KKyAgRFhfQ09ORF9wc19UUlVFPQorICBEWF9DT05EX3BzX0ZBTFNFPScjJworZWxzZQorICBEWF9DT05EX3BzX1RSVUU9JyMnCisgIERYX0NPTkRfcHNfRkFMU0U9CitmaQorCisKKyAgICA6CitlbHNlCisgICAgIGlmIGZhbHNlOyB0aGVuCisgIERYX0NPTkRfcHNfVFJVRT0KKyAgRFhfQ09ORF9wc19GQUxTRT0nIycKK2Vsc2UKKyAgRFhfQ09ORF9wc19UUlVFPScjJworICBEWF9DT05EX3BzX0ZBTFNFPQorZmkKKworCisgICAgOgorZmkKKworCisjIFBERiBmaWxlIGdlbmVyYXRpb246CisKKworCisgICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRveHlnZW4tcGRmIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2RveHlnZW5fcGRmK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfZG94eWdlbl9wZGY7CitjYXNlICIkZW5hYmxldmFsIiBpbgorIygKK3l8WXx5ZXN8WWVzfFlFUykKKyAgICBEWF9GTEFHX3BkZj0xCisKKwordGVzdCAiJERYX0ZMQUdfZG9jIiA9ICIxIiBcCit8fCBhc19mbl9lcnJvciAkPyAiZG94eWdlbi1wZGYgcmVxdWlyZXMgZG94eWdlbi1wZGYiICIkTElORU5PIiA1CisKKzs7ICMoCitufE58bm98Tm98Tk8pCisgICAgRFhfRkxBR19wZGY9MAorCis7OyAjKAorKikKKyAgICBhc19mbl9lcnJvciAkPyAiaW52YWxpZCB2YWx1ZSAnJGVuYWJsZXZhbCcgZ2l2ZW4gdG8gZG94eWdlbi1wZGYiICIkTElORU5PIiA1Cis7OworZXNhYworCitlbHNlCisKK0RYX0ZMQUdfcGRmPTAKKworCit0ZXN0ICIkRFhfRkxBR19kb2MiID0gIjEiIHx8IERYX0ZMQUdfcGRmPTAKKworCisKK2ZpCisKK2lmIHRlc3QgIiREWF9GTEFHX3BkZiIgPSAxOyB0aGVuCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXBkZmxhdGV4Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXBkZmxhdGV4OyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9EWF9QREZMQVRFWCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJERYX1BERkxBVEVYIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX0RYX1BERkxBVEVYPSIkRFhfUERGTEFURVgiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX0RYX1BERkxBVEVYPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIDs7Citlc2FjCitmaQorRFhfUERGTEFURVg9JGFjX2N2X3BhdGhfRFhfUERGTEFURVgKK2lmIHRlc3QgLW4gIiREWF9QREZMQVRFWCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICREWF9QREZMQVRFWCIgPiY1CiskYXNfZWNobyAiJERYX1BERkxBVEVYIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9EWF9QREZMQVRFWCI7IHRoZW4KKyAgYWNfcHRfRFhfUERGTEFURVg9JERYX1BERkxBVEVYCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAicGRmbGF0ZXgiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IHBkZmxhdGV4OyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9hY19wdF9EWF9QREZMQVRFWCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJGFjX3B0X0RYX1BERkxBVEVYIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX2FjX3B0X0RYX1BERkxBVEVYPSIkYWNfcHRfRFhfUERGTEFURVgiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX2FjX3B0X0RYX1BERkxBVEVYPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIDs7Citlc2FjCitmaQorYWNfcHRfRFhfUERGTEFURVg9JGFjX2N2X3BhdGhfYWNfcHRfRFhfUERGTEFURVgKK2lmIHRlc3QgLW4gIiRhY19wdF9EWF9QREZMQVRFWCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19wdF9EWF9QREZMQVRFWCIgPiY1CiskYXNfZWNobyAiJGFjX3B0X0RYX1BERkxBVEVYIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfcHRfRFhfUERGTEFURVgiID0geDsgdGhlbgorICAgIERYX1BERkxBVEVYPSIiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgRFhfUERGTEFURVg9JGFjX3B0X0RYX1BERkxBVEVYCisgIGZpCitlbHNlCisgIERYX1BERkxBVEVYPSIkYWNfY3ZfcGF0aF9EWF9QREZMQVRFWCIKK2ZpCisKK2lmIHRlc3QgIiREWF9GTEFHX3BkZiREWF9QREZMQVRFWCIgPSAxOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBwZGZsYXRleCBub3QgZm91bmQgLSB3aWxsIG5vdCBnZW5lcmF0ZSBkb3h5Z2VuIFBERiBkb2N1bWVudGF0aW9uIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHBkZmxhdGV4IG5vdCBmb3VuZCAtIHdpbGwgbm90IGdlbmVyYXRlIGRveHlnZW4gUERGIGRvY3VtZW50YXRpb24iID4mMjt9CisgICAgRFhfRkxBR19wZGY9MAorCitmaQorCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW1ha2VpbmRleCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1tYWtlaW5kZXg7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX0RYX01BS0VJTkRFWCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJERYX01BS0VJTkRFWCBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9EWF9NQUtFSU5ERVg9IiREWF9NQUtFSU5ERVgiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX0RYX01BS0VJTkRFWD0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICA7OworZXNhYworZmkKK0RYX01BS0VJTkRFWD0kYWNfY3ZfcGF0aF9EWF9NQUtFSU5ERVgKK2lmIHRlc3QgLW4gIiREWF9NQUtFSU5ERVgiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkRFhfTUFLRUlOREVYIiA+JjUKKyRhc19lY2hvICIkRFhfTUFLRUlOREVYIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9EWF9NQUtFSU5ERVgiOyB0aGVuCisgIGFjX3B0X0RYX01BS0VJTkRFWD0kRFhfTUFLRUlOREVYCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibWFrZWluZGV4Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBtYWtlaW5kZXg7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX2FjX3B0X0RYX01BS0VJTkRFWCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJGFjX3B0X0RYX01BS0VJTkRFWCBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9hY19wdF9EWF9NQUtFSU5ERVg9IiRhY19wdF9EWF9NQUtFSU5ERVgiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX2FjX3B0X0RYX01BS0VJTkRFWD0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICA7OworZXNhYworZmkKK2FjX3B0X0RYX01BS0VJTkRFWD0kYWNfY3ZfcGF0aF9hY19wdF9EWF9NQUtFSU5ERVgKK2lmIHRlc3QgLW4gIiRhY19wdF9EWF9NQUtFSU5ERVgiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcHRfRFhfTUFLRUlOREVYIiA+JjUKKyRhc19lY2hvICIkYWNfcHRfRFhfTUFLRUlOREVYIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfcHRfRFhfTUFLRUlOREVYIiA9IHg7IHRoZW4KKyAgICBEWF9NQUtFSU5ERVg9IiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBEWF9NQUtFSU5ERVg9JGFjX3B0X0RYX01BS0VJTkRFWAorICBmaQorZWxzZQorICBEWF9NQUtFSU5ERVg9IiRhY19jdl9wYXRoX0RYX01BS0VJTkRFWCIKK2ZpCisKK2lmIHRlc3QgIiREWF9GTEFHX3BkZiREWF9NQUtFSU5ERVgiID0gMTsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogbWFrZWluZGV4IG5vdCBmb3VuZCAtIHdpbGwgbm90IGdlbmVyYXRlIGRveHlnZW4gUERGIGRvY3VtZW50YXRpb24iID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogbWFrZWluZGV4IG5vdCBmb3VuZCAtIHdpbGwgbm90IGdlbmVyYXRlIGRveHlnZW4gUERGIGRvY3VtZW50YXRpb24iID4mMjt9CisgICAgRFhfRkxBR19wZGY9MAorCitmaQorCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWVncmVwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWVncmVwOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9EWF9FR1JFUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJERYX0VHUkVQIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX0RYX0VHUkVQPSIkRFhfRUdSRVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX0RYX0VHUkVQPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIDs7Citlc2FjCitmaQorRFhfRUdSRVA9JGFjX2N2X3BhdGhfRFhfRUdSRVAKK2lmIHRlc3QgLW4gIiREWF9FR1JFUCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICREWF9FR1JFUCIgPiY1CiskYXNfZWNobyAiJERYX0VHUkVQIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9EWF9FR1JFUCI7IHRoZW4KKyAgYWNfcHRfRFhfRUdSRVA9JERYX0VHUkVQCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZWdyZXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGVncmVwOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9hY19wdF9EWF9FR1JFUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJGFjX3B0X0RYX0VHUkVQIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX2FjX3B0X0RYX0VHUkVQPSIkYWNfcHRfRFhfRUdSRVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX2FjX3B0X0RYX0VHUkVQPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIDs7Citlc2FjCitmaQorYWNfcHRfRFhfRUdSRVA9JGFjX2N2X3BhdGhfYWNfcHRfRFhfRUdSRVAKK2lmIHRlc3QgLW4gIiRhY19wdF9EWF9FR1JFUCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19wdF9EWF9FR1JFUCIgPiY1CiskYXNfZWNobyAiJGFjX3B0X0RYX0VHUkVQIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfcHRfRFhfRUdSRVAiID0geDsgdGhlbgorICAgIERYX0VHUkVQPSIiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgRFhfRUdSRVA9JGFjX3B0X0RYX0VHUkVQCisgIGZpCitlbHNlCisgIERYX0VHUkVQPSIkYWNfY3ZfcGF0aF9EWF9FR1JFUCIKK2ZpCisKK2lmIHRlc3QgIiREWF9GTEFHX3BkZiREWF9FR1JFUCIgPSAxOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBlZ3JlcCBub3QgZm91bmQgLSB3aWxsIG5vdCBnZW5lcmF0ZSBkb3h5Z2VuIFBERiBkb2N1bWVudGF0aW9uIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGVncmVwIG5vdCBmb3VuZCAtIHdpbGwgbm90IGdlbmVyYXRlIGRveHlnZW4gUERGIGRvY3VtZW50YXRpb24iID4mMjt9CisgICAgRFhfRkxBR19wZGY9MAorCitmaQorCisgICAgOgorZmkKK2lmIHRlc3QgIiREWF9GTEFHX3BkZiIgPSAxOyB0aGVuCisgICAgIGlmIDo7IHRoZW4KKyAgRFhfQ09ORF9wZGZfVFJVRT0KKyAgRFhfQ09ORF9wZGZfRkFMU0U9JyMnCitlbHNlCisgIERYX0NPTkRfcGRmX1RSVUU9JyMnCisgIERYX0NPTkRfcGRmX0ZBTFNFPQorZmkKKworCisgICAgOgorZWxzZQorICAgICBpZiBmYWxzZTsgdGhlbgorICBEWF9DT05EX3BkZl9UUlVFPQorICBEWF9DT05EX3BkZl9GQUxTRT0nIycKK2Vsc2UKKyAgRFhfQ09ORF9wZGZfVFJVRT0nIycKKyAgRFhfQ09ORF9wZGZfRkFMU0U9CitmaQorCisKKyAgICA6CitmaQorCisKKyMgTGFUZVggZ2VuZXJhdGlvbiBmb3IgUFMgYW5kL29yIFBERjoKK2lmIHRlc3QgIiREWF9GTEFHX3BzIiA9IDEgfHwgdGVzdCAiJERYX0ZMQUdfcGRmIiA9IDE7IHRoZW4KKyAgICAgaWYgOjsgdGhlbgorICBEWF9DT05EX2xhdGV4X1RSVUU9CisgIERYX0NPTkRfbGF0ZXhfRkFMU0U9JyMnCitlbHNlCisgIERYX0NPTkRfbGF0ZXhfVFJVRT0nIycKKyAgRFhfQ09ORF9sYXRleF9GQUxTRT0KK2ZpCisKKyAgICBEWF9FTlY9IiREWF9FTlYgR0VORVJBVEVfTEFURVg9J1lFUyciCisKK2Vsc2UKKyAgICAgaWYgZmFsc2U7IHRoZW4KKyAgRFhfQ09ORF9sYXRleF9UUlVFPQorICBEWF9DT05EX2xhdGV4X0ZBTFNFPScjJworZWxzZQorICBEWF9DT05EX2xhdGV4X1RSVUU9JyMnCisgIERYX0NPTkRfbGF0ZXhfRkFMU0U9CitmaQorCisgICAgRFhfRU5WPSIkRFhfRU5WIEdFTkVSQVRFX0xBVEVYPSdOTyciCisKK2ZpCisKKyMgUGFwZXIgc2l6ZSBmb3IgUFMgYW5kL29yIFBERjoKKworY2FzZSAiJERPWFlHRU5fUEFQRVJfU0laRSIgaW4KKyMoCisiIikKKyAgICBET1hZR0VOX1BBUEVSX1NJWkU9IiIKKworOzsgIygKK2E0d2lkZXxhNHxsZXR0ZXJ8bGVnYWx8ZXhlY3V0aXZlKQorICAgIERYX0VOVj0iJERYX0VOViBQQVBFUl9TSVpFPSckRE9YWUdFTl9QQVBFUl9TSVpFJyIKKworOzsgIygKKyopCisgICAgYXNfZm5fZXJyb3IgJD8gInVua25vd24gRE9YWUdFTl9QQVBFUl9TSVpFPSckRE9YWUdFTl9QQVBFUl9TSVpFJyIgIiRMSU5FTk8iIDUKKzs7Citlc2FjCisKKyNGb3IgZGVidWdnaW5nOgorI2VjaG8gRFhfRkxBR19kb2M9JERYX0ZMQUdfZG9jCisjZWNobyBEWF9GTEFHX2RvdD0kRFhfRkxBR19kb3QKKyNlY2hvIERYX0ZMQUdfbWFuPSREWF9GTEFHX21hbgorI2VjaG8gRFhfRkxBR19odG1sPSREWF9GTEFHX2h0bWwKKyNlY2hvIERYX0ZMQUdfY2htPSREWF9GTEFHX2NobQorI2VjaG8gRFhfRkxBR19jaGk9JERYX0ZMQUdfY2hpCisjZWNobyBEWF9GTEFHX3J0Zj0kRFhfRkxBR19ydGYKKyNlY2hvIERYX0ZMQUdfeG1sPSREWF9GTEFHX3htbAorI2VjaG8gRFhfRkxBR19wZGY9JERYX0ZMQUdfcGRmCisjZWNobyBEWF9GTEFHX3BzPSREWF9GTEFHX3BzCisjZWNobyBEWF9FTlY9JERYX0VOVgorCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1jb3JlLWRvY3Mgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfY29yZV9kb2NzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfY29yZV9kb2NzOyBjYXNlICIke2VuYWJsZXZhbH0iIGluCisgIHllcykgRU5BQkxFX0NPUkVfRE9DUz15ZXMgOzsKKyAgbm8pICBFTkFCTEVfQ09SRV9ET0NTPW5vIDs7CisgICopIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1jb3JlLWRvY3MiICIkTElORU5PIiA1IDs7Citlc2FjCitlbHNlCisgIEVOQUJMRV9DT1JFX0RPQ1M9bm8KK2ZpCisKKworIGlmIHRlc3QgIngkRU5BQkxFX0NPUkVfRE9DUyIgPSB4eWVzOyB0aGVuCisgIEVOQUJMRV9DT1JFX0RPQ1NfVFJVRT0KKyAgRU5BQkxFX0NPUkVfRE9DU19GQUxTRT0nIycKK2Vsc2UKKyAgRU5BQkxFX0NPUkVfRE9DU19UUlVFPScjJworICBFTkFCTEVfQ09SRV9ET0NTX0ZBTFNFPQorZmkKKworCisjCisjIEJ1aWxkIGFuZCBJbnN0YWxsIG1hbiBwYWdlcworIworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW1hbnBhZ2VzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX21hbnBhZ2VzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfbWFucGFnZXM7IGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKyAgeWVzKSBtYW5wYWdlcz15ZXMgOzsKKyAgbm8pICBtYW5wYWdlcz1ubyA7OworICAqKSBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1kaXNhYmxlLW1hbnBhZ2VzIiAiJExJTkVOTyIgNSA7OworZXNhYworZWxzZQorICBtYW5wYWdlcz15ZXMKK2ZpCisKKworaWYgdGVzdCB4JG1hbnBhZ2VzID0geHllcyA7IHRoZW4KKyAgICAjCisgICAgIyBYTUxUT01BTiBtYW5wYWdlIGdlbmVyYXRpb24KKyAgICAjCisgICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXhtbHRvbWFuIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3htbHRvbWFuK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfeG1sdG9tYW47IGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKyAgICAgIHllcykgeG1sdG9tYW49eWVzIDs7CisgICAgICBubykgIHhtbHRvbWFuPW5vIDs7CisgICAgICAqKSBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1kaXNhYmxlLXhtbHRvbWFuIiAiJExJTkVOTyIgNSA7OworICAgIGVzYWMKK2Vsc2UKKyAgeG1sdG9tYW49eWVzCitmaQorCisKKyAgICBpZiB0ZXN0IHgkeG1sdG9tYW4gPSB4eWVzIDsgdGhlbgorICAgICAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInhtbHRvbWFuIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSB4bWx0b21hbjsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfaGF2ZV94bWx0b21hbis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRoYXZlX3htbHRvbWFuIjsgdGhlbgorICBhY19jdl9wcm9nX2hhdmVfeG1sdG9tYW49IiRoYXZlX3htbHRvbWFuIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfaGF2ZV94bWx0b21hbj0ieWVzIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIHRlc3QgLXogIiRhY19jdl9wcm9nX2hhdmVfeG1sdG9tYW4iICYmIGFjX2N2X3Byb2dfaGF2ZV94bWx0b21hbj0ibm8iCitmaQorZmkKK2hhdmVfeG1sdG9tYW49JGFjX2N2X3Byb2dfaGF2ZV94bWx0b21hbgoraWYgdGVzdCAtbiAiJGhhdmVfeG1sdG9tYW4iOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkaGF2ZV94bWx0b21hbiIgPiY1CiskYXNfZWNobyAiJGhhdmVfeG1sdG9tYW4iID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICAgIGZpCisKKyAgICBpZiB0ZXN0IHgkaGF2ZV94bWx0b21hbiA9IHhubyAtbyB4JHhtbHRvbWFuID0geG5vOyB0aGVuCisgICAgICAgIGlmICEgdGVzdCAtZSBtYW4vYXZhaGktZGFlbW9uLjggOyB0aGVuCisgICAgICAgICAgICBhc19mbl9lcnJvciAkPyAiKioqIHhtbHRvbWFuIHdhcyBub3QgZm91bmQgb3Igd2FzIGRpc2FibGVkLCBpdCBpcyByZXF1aXJlZCB0byBidWlsZCB0aGUgbWFucGFnZXMgYXMgdGhleSBoYXZlIG5vdCBiZWVuIHByZS1idWlsdCwgaW5zdGFsbCB4bWx0b21hbiwgcGFzcyAtLWRpc2FibGUtbWFucGFnZXMgb3IgZG9udCBwYXNzIC0tZGlzYWJsZS14bWx0b21hbiIgIiRMSU5FTk8iIDUKKyAgICAgICAgICAgIGV4aXQgMQorICAgICAgICBmaQorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICoqKiBOb3QgcmVidWlsZGluZyBtYW4gcGFnZXMgYXMgeG1sdG9tYW4gaXMgbm90IGZvdW5kICoqKiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAqKiogTm90IHJlYnVpbGRpbmcgbWFuIHBhZ2VzIGFzIHhtbHRvbWFuIGlzIG5vdCBmb3VuZCAqKioiID4mMjt9CisgICAgICAgIHhtbHRvbWFuPW5vCisgICAgZmkKK2ZpCisgaWYgdGVzdCAieCR4bWx0b21hbiIgPSB4eWVzOyB0aGVuCisgIFVTRV9YTUxUT01BTl9UUlVFPQorICBVU0VfWE1MVE9NQU5fRkFMU0U9JyMnCitlbHNlCisgIFVTRV9YTUxUT01BTl9UUlVFPScjJworICBVU0VfWE1MVE9NQU5fRkFMU0U9CitmaQorCisgaWYgdGVzdCAieCRtYW5wYWdlcyIgPSB4eWVzOyB0aGVuCisgIEJVSUxEX01BTlBBR0VTX1RSVUU9CisgIEJVSUxEX01BTlBBR0VTX0ZBTFNFPScjJworZWxzZQorICBCVUlMRF9NQU5QQUdFU19UUlVFPScjJworICBCVUlMRF9NQU5QQUdFU19GQUxTRT0KK2ZpCisKKworIworIyBDb25kaXRpb25hbGx5IGNvbXBpbGUgdGVzdCBhbmQgZXhhbXBsZSBwcm9ncmFtcworIworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXRlc3RzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3Rlc3RzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfdGVzdHM7IGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKyAgICAgICAgICAgICAgICB5ZXMpIEVOQUJMRV9URVNUUz15ZXMgOzsKKyAgICAgICAgICAgICAgICBubykgIEVOQUJMRV9URVNUUz1ubyA7OworICAgICAgICAgICAgICAgICopIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS10ZXN0cyIgIiRMSU5FTk8iIDUgOzsKKyAgICAgICAgZXNhYworZWxzZQorICBFTkFCTEVfVEVTVFM9bm8KK2ZpCisKKworIGlmIHRlc3QgIngkRU5BQkxFX1RFU1RTIiA9ICJ4eWVzIjsgdGhlbgorICBFTkFCTEVfVEVTVFNfVFJVRT0KKyAgRU5BQkxFX1RFU1RTX0ZBTFNFPScjJworZWxzZQorICBFTkFCTEVfVEVTVFNfVFJVRT0nIycKKyAgRU5BQkxFX1RFU1RTX0ZBTFNFPQorZmkKKworCisjCisjIE9wdGlvbmFsbHkgZW5hYmxlIGxpYmRuc19zZCBjb21wYXRpYmlsaXR5IHN1cHBvcnQKKyMKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1jb21wYXQtbGliZG5zX3NkIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2NvbXBhdF9saWJkbnNfc2Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9jb21wYXRfbGliZG5zX3NkOyBjYXNlICIke2VuYWJsZXZhbH0iIGluCisgICAgICAgICAgICAgICAgeWVzKSBFTkFCTEVfQ09NUEFUX0xJQkROU19TRD15ZXMgOzsKKyAgICAgICAgICAgICAgICBubykgIEVOQUJMRV9DT01QQVRfTElCRE5TX1NEPW5vIDs7CisgICAgICAgICAgICAgICAgKikgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLWNvbXBhdC1saWJkbnNfc2QiICIkTElORU5PIiA1IDs7CisgICAgICAgIGVzYWMKK2Vsc2UKKyAgRU5BQkxFX0NPTVBBVF9MSUJETlNfU0Q9bm8KK2ZpCisKKworIGlmIHRlc3QgIngkRU5BQkxFX0NPTVBBVF9MSUJETlNfU0QiID0gInh5ZXMiOyB0aGVuCisgIEVOQUJMRV9DT01QQVRfTElCRE5TX1NEX1RSVUU9CisgIEVOQUJMRV9DT01QQVRfTElCRE5TX1NEX0ZBTFNFPScjJworZWxzZQorICBFTkFCTEVfQ09NUEFUX0xJQkROU19TRF9UUlVFPScjJworICBFTkFCTEVfQ09NUEFUX0xJQkROU19TRF9GQUxTRT0KK2ZpCisKKworIworIyBPcHRpb25hbGx5IGVuYWJsZSBIT1dMIGNvbXBhdGliaWxpdHkgc3VwcG9ydAorIworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWNvbXBhdC1ob3dsIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2NvbXBhdF9ob3dsK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfY29tcGF0X2hvd2w7IGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKyAgICAgICAgICAgICAgICB5ZXMpIEVOQUJMRV9DT01QQVRfSE9XTD15ZXMgOzsKKyAgICAgICAgICAgICAgICBubykgIEVOQUJMRV9DT01QQVRfSE9XTD1ubyA7OworICAgICAgICAgICAgICAgICopIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1jb21wYXQtaG93bCIgIiRMSU5FTk8iIDUgOzsKKyAgICAgICAgZXNhYworZWxzZQorICBFTkFCTEVfQ09NUEFUX0hPV0w9bm8KK2ZpCisKKworIGlmIHRlc3QgIngkRU5BQkxFX0NPTVBBVF9IT1dMIiA9ICJ4eWVzIjsgdGhlbgorICBFTkFCTEVfQ09NUEFUX0hPV0xfVFJVRT0KKyAgRU5BQkxFX0NPTVBBVF9IT1dMX0ZBTFNFPScjJworZWxzZQorICBFTkFCTEVfQ09NUEFUX0hPV0xfVFJVRT0nIycKKyAgRU5BQkxFX0NPTVBBVF9IT1dMX0ZBTFNFPQorZmkKKworCisjCisjIHN5c3RlbWQKKyMKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1zeXN0ZW1kc3lzdGVtdW5pdGRpciB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfc3lzdGVtZHN5c3RlbXVuaXRkaXIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX3N5c3RlbWRzeXN0ZW11bml0ZGlyOworZWxzZQorICB3aXRoX3N5c3RlbWRzeXN0ZW11bml0ZGlyPSQoJFBLR19DT05GSUcgLS12YXJpYWJsZT1zeXN0ZW1kc3lzdGVtdW5pdGRpciBzeXN0ZW1kKQorZmkKKworaWYgdGVzdCAieCR3aXRoX3N5c3RlbWRzeXN0ZW11bml0ZGlyIiAhPSB4bm87IHRoZW4KKyAgICAgICAgc3lzdGVtZHN5c3RlbXVuaXRkaXI9JHdpdGhfc3lzdGVtZHN5c3RlbXVuaXRkaXIKKworZmkKKyBpZiB0ZXN0IC1uICIkd2l0aF9zeXN0ZW1kc3lzdGVtdW5pdGRpciIgLWEgIngkd2l0aF9zeXN0ZW1kc3lzdGVtdW5pdGRpciIgIT0geG5vIDsgdGhlbgorICBIQVZFX1NZU1RFTURfVFJVRT0KKyAgSEFWRV9TWVNURU1EX0ZBTFNFPScjJworZWxzZQorICBIQVZFX1NZU1RFTURfVFJVRT0nIycKKyAgSEFWRV9TWVNURU1EX0ZBTFNFPQorZmkKKworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CithY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgTWFrZWZpbGUgYXZhaGktY29tbW9uL01ha2VmaWxlIGF2YWhpLWNvcmUvTWFrZWZpbGUgYXZhaGktZ2xpYi9NYWtlZmlsZSBhdmFoaS1nb2JqZWN0L01ha2VmaWxlIGF2YWhpLXF0L01ha2VmaWxlIGF2YWhpLWRhZW1vbi9NYWtlZmlsZSBhdmFoaS1kYWVtb24vYXZhaGktZGJ1cy5jb25mIGF2YWhpLWRpc2NvdmVyLXN0YW5kYWxvbmUvTWFrZWZpbGUgYXZhaGktY2xpZW50L01ha2VmaWxlIGluaXRzY3JpcHQvTWFrZWZpbGUgaW5pdHNjcmlwdC9kZWJpYW4vTWFrZWZpbGUgaW5pdHNjcmlwdC9nZW50b28vTWFrZWZpbGUgaW5pdHNjcmlwdC9hcmNobGludXgvTWFrZWZpbGUgaW5pdHNjcmlwdC9zdXNlL01ha2VmaWxlIGluaXRzY3JpcHQvZmVkb3JhL01ha2VmaWxlIGluaXRzY3JpcHQvbGZzL01ha2VmaWxlIGluaXRzY3JpcHQvbWFuZHJpdmEvTWFrZWZpbGUgaW5pdHNjcmlwdC9kYXJ3aW4vTWFrZWZpbGUgaW5pdHNjcmlwdC9mcmVlYnNkL01ha2VmaWxlIGluaXRzY3JpcHQvc2xhY2t3YXJlL01ha2VmaWxlIGF2YWhpLWRuc2NvbmZkL01ha2VmaWxlIGF2YWhpLXV0aWxzL01ha2VmaWxlIGF2YWhpLXB5dGhvbi9NYWtlZmlsZSBhdmFoaS1weXRob24vYXZhaGkvTWFrZWZpbGUgYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL01ha2VmaWxlIGV4YW1wbGVzL01ha2VmaWxlIGNvbW1vbi9NYWtlZmlsZSBtYW4vTWFrZWZpbGUgdGVzdHMvTWFrZWZpbGUgc2VydmljZS10eXBlLWRhdGFiYXNlL01ha2VmaWxlIGF2YWhpLXNoYXJwL01ha2VmaWxlIGF2YWhpLXVpLXNoYXJwL01ha2VmaWxlIGF2YWhpLWNvbXBhdC1saWJkbnNfc2QvTWFrZWZpbGUgYXZhaGktY29tcGF0LWhvd2wvTWFrZWZpbGUgYXZhaGktY29tcGF0LWhvd2wvc2FtcGxlcy9NYWtlZmlsZSBhdmFoaS1hdXRvaXBkL01ha2VmaWxlIGF2YWhpLXVpL01ha2VmaWxlIHBvL01ha2VmaWxlLmluIgorCitjYXQgPmNvbmZjYWNoZSA8PFxfQUNFT0YKKyMgVGhpcyBmaWxlIGlzIGEgc2hlbGwgc2NyaXB0IHRoYXQgY2FjaGVzIHRoZSByZXN1bHRzIG9mIGNvbmZpZ3VyZQorIyB0ZXN0cyBydW4gb24gdGhpcyBzeXN0ZW0gc28gdGhleSBjYW4gYmUgc2hhcmVkIGJldHdlZW4gY29uZmlndXJlCisjIHNjcmlwdHMgYW5kIGNvbmZpZ3VyZSBydW5zLCBzZWUgY29uZmlndXJlJ3Mgb3B0aW9uIC0tY29uZmlnLWNhY2hlLgorIyBJdCBpcyBub3QgdXNlZnVsIG9uIG90aGVyIHN5c3RlbXMuICBJZiBpdCBjb250YWlucyByZXN1bHRzIHlvdSBkb24ndAorIyB3YW50IHRvIGtlZXAsIHlvdSBtYXkgcmVtb3ZlIG9yIGVkaXQgaXQuCisjCisjIGNvbmZpZy5zdGF0dXMgb25seSBwYXlzIGF0dGVudGlvbiB0byB0aGUgY2FjaGUgZmlsZSBpZiB5b3UgZ2l2ZSBpdAorIyB0aGUgLS1yZWNoZWNrIG9wdGlvbiB0byByZXJ1biBjb25maWd1cmUuCisjCisjIGBhY19jdl9lbnZfZm9vJyB2YXJpYWJsZXMgKHNldCBvciB1bnNldCkgd2lsbCBiZSBvdmVycmlkZGVuIHdoZW4KKyMgbG9hZGluZyB0aGlzIGZpbGUsIG90aGVyICp1bnNldCogYGFjX2N2X2Zvbycgd2lsbCBiZSBhc3NpZ25lZCB0aGUKKyMgZm9sbG93aW5nIHZhbHVlcy4KKworX0FDRU9GCisKKyMgVGhlIGZvbGxvd2luZyB3YXkgb2Ygd3JpdGluZyB0aGUgY2FjaGUgbWlzaGFuZGxlcyBuZXdsaW5lcyBpbiB2YWx1ZXMsCisjIGJ1dCB3ZSBrbm93IG9mIG5vIHdvcmthcm91bmQgdGhhdCBpcyBzaW1wbGUsIHBvcnRhYmxlLCBhbmQgZWZmaWNpZW50LgorIyBTbywgd2Uga2lsbCB2YXJpYWJsZXMgY29udGFpbmluZyBuZXdsaW5lcy4KKyMgVWx0cml4IHNoIHNldCB3cml0ZXMgdG8gc3RkZXJyIGFuZCBjYW4ndCBiZSByZWRpcmVjdGVkIGRpcmVjdGx5LAorIyBhbmQgc2V0cyB0aGUgaGlnaCBiaXQgaW4gdGhlIGNhY2hlIGZpbGUgdW5sZXNzIHdlIGFzc2lnbiB0byB0aGUgdmFycy4KKygKKyAgZm9yIGFjX3ZhciBpbiBgKHNldCkgMj4mMSB8IHNlZCAtbiAncy9eXChbYS16QS1aX11bYS16QS1aMC05X10qXCk9LiovXDEvcCdgOyBkbworICAgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorICAgIGNhc2UgJGFjX3ZhbCBpbiAjKAorICAgICoke2FzX25sfSopCisgICAgICBjYXNlICRhY192YXIgaW4gIygKKyAgICAgICpfY3ZfKikgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBjYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBjYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZSIgPiYyO30gOzsKKyAgICAgIGVzYWMKKyAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorICAgICAgXyB8IElGUyB8IGFzX25sKSA7OyAjKAorICAgICAgQkFTSF9BUkdWIHwgQkFTSF9TT1VSQ0UpIGV2YWwgJGFjX3Zhcj0gOzsgIygKKyAgICAgICopIHsgZXZhbCAkYWNfdmFyPTsgdW5zZXQgJGFjX3Zhcjt9IDs7CisgICAgICBlc2FjIDs7CisgICAgZXNhYworICBkb25lCisKKyAgKHNldCkgMj4mMSB8CisgICAgY2FzZSAkYXNfbmxgKGFjX3NwYWNlPScgJzsgc2V0KSAyPiYxYCBpbiAjKAorICAgICoke2FzX25sfWFjX3NwYWNlPVwgKikKKyAgICAgICMgYHNldCcgZG9lcyBub3QgcXVvdGUgY29ycmVjdGx5LCBzbyBhZGQgcXVvdGVzOiBkb3VibGUtcXVvdGUKKyAgICAgICMgc3Vic3RpdHV0aW9uIHR1cm5zIFxcXFwgaW50byBcXCwgYW5kIHNlZCB0dXJucyBcXCBpbnRvIFwuCisgICAgICBzZWQgLW4gXAorCSJzLycvJ1xcXFwnJy9nOworCSAgcy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT0nXFwyJy9wIgorICAgICAgOzsgIygKKyAgICAqKQorICAgICAgIyBgc2V0JyBxdW90ZXMgY29ycmVjdGx5IGFzIHJlcXVpcmVkIGJ5IFBPU0lYLCBzbyBkbyBub3QgYWRkIHF1b3Rlcy4KKyAgICAgIHNlZCAtbiAiL15bXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSo9L3AiCisgICAgICA7OworICAgIGVzYWMgfAorICAgIHNvcnQKKykgfAorICBzZWQgJworICAgICAvXmFjX2N2X2Vudl8vYiBlbmQKKyAgICAgdCBjbGVhcgorICAgICA6Y2xlYXIKKyAgICAgcy9eXChbXj1dKlwpPVwoLipbe31dLipcKSQvdGVzdCAiJHtcMStzZXR9IiA9IHNldCB8fCAmLworICAgICB0IGVuZAorICAgICBzL15cKFtePV0qXCk9XCguKlwpJC9cMT0ke1wxPVwyfS8KKyAgICAgOmVuZCcgPj5jb25mY2FjaGUKK2lmIGRpZmYgIiRjYWNoZV9maWxlIiBjb25mY2FjaGUgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDo7IGVsc2UKKyAgaWYgdGVzdCAtdyAiJGNhY2hlX2ZpbGUiOyB0aGVuCisgICAgaWYgdGVzdCAieCRjYWNoZV9maWxlIiAhPSAieC9kZXYvbnVsbCI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogdXBkYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogdXBkYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CisgICAgICBpZiB0ZXN0ICEgLWYgIiRjYWNoZV9maWxlIiB8fCB0ZXN0IC1oICIkY2FjaGVfZmlsZSI7IHRoZW4KKwljYXQgY29uZmNhY2hlID4iJGNhY2hlX2ZpbGUiCisgICAgICBlbHNlCisgICAgICAgIGNhc2UgJGNhY2hlX2ZpbGUgaW4gIygKKyAgICAgICAgKi8qIHwgPzoqKQorCSAgbXYgLWYgY29uZmNhY2hlICIkY2FjaGVfZmlsZSIkJCAmJgorCSAgbXYgLWYgIiRjYWNoZV9maWxlIiQkICIkY2FjaGVfZmlsZSIgOzsgIygKKyAgICAgICAgKikKKwkgIG12IC1mIGNvbmZjYWNoZSAiJGNhY2hlX2ZpbGUiIDs7CisJZXNhYworICAgICAgZmkKKyAgICBmaQorICBlbHNlCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBub3QgdXBkYXRpbmcgdW53cml0YWJsZSBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBub3QgdXBkYXRpbmcgdW53cml0YWJsZSBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKyAgZmkKK2ZpCitybSAtZiBjb25mY2FjaGUKKwordGVzdCAieCRwcmVmaXgiID0geE5PTkUgJiYgcHJlZml4PSRhY19kZWZhdWx0X3ByZWZpeAorIyBMZXQgbWFrZSBleHBhbmQgZXhlY19wcmVmaXguCit0ZXN0ICJ4JGV4ZWNfcHJlZml4IiA9IHhOT05FICYmIGV4ZWNfcHJlZml4PScke3ByZWZpeH0nCisKK0RFRlM9LURIQVZFX0NPTkZJR19ICisKK2FjX2xpYm9ianM9CithY19sdGxpYm9ianM9CitVPQorZm9yIGFjX2kgaW4gOiAkTElCT0JKUzsgZG8gdGVzdCAieCRhY19pIiA9IHg6ICYmIGNvbnRpbnVlCisgICMgMS4gUmVtb3ZlIHRoZSBleHRlbnNpb24sIGFuZCAkVSBpZiBhbHJlYWR5IGluc3RhbGxlZC4KKyAgYWNfc2NyaXB0PSdzL1wkVVwuLy4vO3MvXC5vJC8vO3MvXC5vYmokLy8nCisgIGFjX2k9YCRhc19lY2hvICIkYWNfaSIgfCBzZWQgIiRhY19zY3JpcHQiYAorICAjIDIuIFByZXBlbmQgTElCT0JKRElSLiAgV2hlbiB1c2VkIHdpdGggYXV0b21ha2U+PTEuMTAgTElCT0JKRElSCisgICMgICAgd2lsbCBiZSBzZXQgdG8gdGhlIGRpcmVjdG9yeSB3aGVyZSBMSUJPQkpTIG9iamVjdHMgYXJlIGJ1aWx0LgorICBhc19mbl9hcHBlbmQgYWNfbGlib2JqcyAiIFwke0xJQk9CSkRJUn0kYWNfaVwkVS4kYWNfb2JqZXh0IgorICBhc19mbl9hcHBlbmQgYWNfbHRsaWJvYmpzICIgXCR7TElCT0JKRElSfSRhY19pIickVS5sbycKK2RvbmUKK0xJQk9CSlM9JGFjX2xpYm9ianMKKworTFRMSUJPQkpTPSRhY19sdGxpYm9ianMKKworCisgaWYgdGVzdCAtbiAiJEVYRUVYVCI7IHRoZW4KKyAgYW1fX0VYRUVYVF9UUlVFPQorICBhbV9fRVhFRVhUX0ZBTFNFPScjJworZWxzZQorICBhbV9fRVhFRVhUX1RSVUU9JyMnCisgIGFtX19FWEVFWFRfRkFMU0U9CitmaQorCitpZiB0ZXN0IC16ICIke0FNREVQX1RSVUV9IiAmJiB0ZXN0IC16ICIke0FNREVQX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiQU1ERVBcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ0NfVFJVRX0iICYmIHRlc3QgLXogIiR7YW1fX2Zhc3RkZXBDQ19GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcImFtX19mYXN0ZGVwQ0NcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ1hYX1RSVUV9IiAmJiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ1hYX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiYW1fX2Zhc3RkZXBDWFhcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0hBVkVfTkVUTElOS19UUlVFfSIgJiYgdGVzdCAteiAiJHtIQVZFX05FVExJTktfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJIQVZFX05FVExJTktcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0hBVkVfUEZfUk9VVEVfVFJVRX0iICYmIHRlc3QgLXogIiR7SEFWRV9QRl9ST1VURV9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkhBVkVfUEZfUk9VVEVcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0hBVkVfU1lTX0ZJTElPX0hfVFJVRX0iICYmIHRlc3QgLXogIiR7SEFWRV9TWVNfRklMSU9fSF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkhBVkVfU1lTX0ZJTElPX0hcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0hBVkVfU1lTX1NZU0NUTF9IX1RSVUV9IiAmJiB0ZXN0IC16ICIke0hBVkVfU1lTX1NZU0NUTF9IX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiSEFWRV9TWVNfU1lTQ1RMX0hcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1RBUkdFVF9MRlNfVFJVRX0iICYmIHRlc3QgLXogIiR7VEFSR0VUX0xGU19GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlRBUkdFVF9MRlNcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1RBUkdFVF9TVVNFX1RSVUV9IiAmJiB0ZXN0IC16ICIke1RBUkdFVF9TVVNFX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiVEFSR0VUX1NVU0VcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1RBUkdFVF9HRU5UT09fVFJVRX0iICYmIHRlc3QgLXogIiR7VEFSR0VUX0dFTlRPT19GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlRBUkdFVF9HRU5UT09cIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1RBUkdFVF9ERUJJQU5fVFJVRX0iICYmIHRlc3QgLXogIiR7VEFSR0VUX0RFQklBTl9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlRBUkdFVF9ERUJJQU5cIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1RBUkdFVF9BUkNITElOVVhfVFJVRX0iICYmIHRlc3QgLXogIiR7VEFSR0VUX0FSQ0hMSU5VWF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlRBUkdFVF9BUkNITElOVVhcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1RBUkdFVF9GRURPUkFfVFJVRX0iICYmIHRlc3QgLXogIiR7VEFSR0VUX0ZFRE9SQV9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlRBUkdFVF9GRURPUkFcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1RBUkdFVF9NQU5EUklWQV9UUlVFfSIgJiYgdGVzdCAteiAiJHtUQVJHRVRfTUFORFJJVkFfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJUQVJHRVRfTUFORFJJVkFcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1RBUkdFVF9EQVJXSU5fVFJVRX0iICYmIHRlc3QgLXogIiR7VEFSR0VUX0RBUldJTl9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlRBUkdFVF9EQVJXSU5cIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1RBUkdFVF9ORVRCU0RfVFJVRX0iICYmIHRlc3QgLXogIiR7VEFSR0VUX05FVEJTRF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlRBUkdFVF9ORVRCU0RcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1RBUkdFVF9GUkVFQlNEX1RSVUV9IiAmJiB0ZXN0IC16ICIke1RBUkdFVF9GUkVFQlNEX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiVEFSR0VUX0ZSRUVCU0RcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1RBUkdFVF9TTEFDS1dBUkVfVFJVRX0iICYmIHRlc3QgLXogIiR7VEFSR0VUX1NMQUNLV0FSRV9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlRBUkdFVF9TTEFDS1dBUkVcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0VOQUJMRV9DSFJPT1RfVFJVRX0iICYmIHRlc3QgLXogIiR7RU5BQkxFX0NIUk9PVF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkVOQUJMRV9DSFJPT1RcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0hBVkVfRExPUEVOX1RSVUV9IiAmJiB0ZXN0IC16ICIke0hBVkVfRExPUEVOX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiSEFWRV9ETE9QRU5cIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0hBVkVfSU5PVElGWV9UUlVFfSIgJiYgdGVzdCAteiAiJHtIQVZFX0lOT1RJRllfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJIQVZFX0lOT1RJRllcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0hBVkVfS1FVRVVFX1RSVUV9IiAmJiB0ZXN0IC16ICIke0hBVkVfS1FVRVVFX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiSEFWRV9LUVVFVUVcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCisKKyAgYWNfY29uZmlnX2NvbW1hbmRzPSIkYWNfY29uZmlnX2NvbW1hbmRzIHBvL3N0YW1wLWl0IgorCisKK2lmIHRlc3QgLXogIiR7SEFWRV9HTElCX1RSVUV9IiAmJiB0ZXN0IC16ICIke0hBVkVfR0xJQl9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkhBVkVfR0xJQlwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7SEFWRV9HT0JKRUNUX1RSVUV9IiAmJiB0ZXN0IC16ICIke0hBVkVfR09CSkVDVF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkhBVkVfR09CSkVDVFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7SEFWRV9JTlRST1NQRUNUSU9OX1RSVUV9IiAmJiB0ZXN0IC16ICIke0hBVkVfSU5UUk9TUEVDVElPTl9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkhBVkVfSU5UUk9TUEVDVElPTlwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7SEFWRV9RVDNfVFJVRX0iICYmIHRlc3QgLXogIiR7SEFWRV9RVDNfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJIQVZFX1FUM1wiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7SEFWRV9RVDRfVFJVRX0iICYmIHRlc3QgLXogIiR7SEFWRV9RVDRfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJIQVZFX1FUNFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7SEFWRV9HVEtfVFJVRX0iICYmIHRlc3QgLXogIiR7SEFWRV9HVEtfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJIQVZFX0dUS1wiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7SEFWRV9HVEszX1RSVUV9IiAmJiB0ZXN0IC16ICIke0hBVkVfR1RLM19GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkhBVkVfR1RLM1wiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7SEFWRV9HVEsyT1IzX1RSVUV9IiAmJiB0ZXN0IC16ICIke0hBVkVfR1RLMk9SM19GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkhBVkVfR1RLMk9SM1wiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7SEFWRV9EQlVTX1RSVUV9IiAmJiB0ZXN0IC16ICIke0hBVkVfREJVU19GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkhBVkVfREJVU1wiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7SEFWRV9YTUxfVFJVRX0iICYmIHRlc3QgLXogIiR7SEFWRV9YTUxfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJIQVZFX1hNTFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7SEFWRV9HREJNX1RSVUV9IiAmJiB0ZXN0IC16ICIke0hBVkVfR0RCTV9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkhBVkVfR0RCTVwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7SEFWRV9EQk1fVFJVRX0iICYmIHRlc3QgLXogIiR7SEFWRV9EQk1fRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJIQVZFX0RCTVwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7SEFWRV9MSUJEQUVNT05fVFJVRX0iICYmIHRlc3QgLXogIiR7SEFWRV9MSUJEQUVNT05fRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJIQVZFX0xJQkRBRU1PTlwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7SEFWRV9QWVRIT05fVFJVRX0iICYmIHRlc3QgLXogIiR7SEFWRV9QWVRIT05fRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJIQVZFX1BZVEhPTlwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7SEFWRV9QWUdUS19UUlVFfSIgJiYgdGVzdCAteiAiJHtIQVZFX1BZR1RLX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiSEFWRV9QWUdUS1wiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7SEFWRV9QWVRIT05fREJVU19UUlVFfSIgJiYgdGVzdCAteiAiJHtIQVZFX1BZVEhPTl9EQlVTX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiSEFWRV9QWVRIT05fREJVU1wiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7SEFWRV9NT05PX1RSVUV9IiAmJiB0ZXN0IC16ICIke0hBVkVfTU9OT19GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkhBVkVfTU9OT1wiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7SEFWRV9NT05PRE9DX1RSVUV9IiAmJiB0ZXN0IC16ICIke0hBVkVfTU9OT0RPQ19GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkhBVkVfTU9OT0RPQ1wiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7RU5BQkxFX0FVVE9JUERfVFJVRX0iICYmIHRlc3QgLXogIiR7RU5BQkxFX0FVVE9JUERfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJFTkFCTEVfQVVUT0lQRFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7RFhfQ09ORF9kb2NfVFJVRX0iICYmIHRlc3QgLXogIiR7RFhfQ09ORF9kb2NfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJEWF9DT05EX2RvY1wiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7RFhfQ09ORF9kb2NfVFJVRX0iICYmIHRlc3QgLXogIiR7RFhfQ09ORF9kb2NfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJEWF9DT05EX2RvY1wiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7RFhfQ09ORF9kb3RfVFJVRX0iICYmIHRlc3QgLXogIiR7RFhfQ09ORF9kb3RfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJEWF9DT05EX2RvdFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7RFhfQ09ORF9kb3RfVFJVRX0iICYmIHRlc3QgLXogIiR7RFhfQ09ORF9kb3RfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJEWF9DT05EX2RvdFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7RFhfQ09ORF9tYW5fVFJVRX0iICYmIHRlc3QgLXogIiR7RFhfQ09ORF9tYW5fRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJEWF9DT05EX21hblwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7RFhfQ09ORF9tYW5fVFJVRX0iICYmIHRlc3QgLXogIiR7RFhfQ09ORF9tYW5fRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJEWF9DT05EX21hblwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7RFhfQ09ORF9ydGZfVFJVRX0iICYmIHRlc3QgLXogIiR7RFhfQ09ORF9ydGZfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJEWF9DT05EX3J0ZlwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7RFhfQ09ORF9ydGZfVFJVRX0iICYmIHRlc3QgLXogIiR7RFhfQ09ORF9ydGZfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJEWF9DT05EX3J0ZlwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7RFhfQ09ORF94bWxfVFJVRX0iICYmIHRlc3QgLXogIiR7RFhfQ09ORF94bWxfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJEWF9DT05EX3htbFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7RFhfQ09ORF94bWxfVFJVRX0iICYmIHRlc3QgLXogIiR7RFhfQ09ORF94bWxfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJEWF9DT05EX3htbFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7RFhfQ09ORF9jaG1fVFJVRX0iICYmIHRlc3QgLXogIiR7RFhfQ09ORF9jaG1fRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJEWF9DT05EX2NobVwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7RFhfQ09ORF9jaG1fVFJVRX0iICYmIHRlc3QgLXogIiR7RFhfQ09ORF9jaG1fRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJEWF9DT05EX2NobVwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7RFhfQ09ORF9jaGlfVFJVRX0iICYmIHRlc3QgLXogIiR7RFhfQ09ORF9jaGlfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJEWF9DT05EX2NoaVwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7RFhfQ09ORF9jaGlfVFJVRX0iICYmIHRlc3QgLXogIiR7RFhfQ09ORF9jaGlfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJEWF9DT05EX2NoaVwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7RFhfQ09ORF9odG1sX1RSVUV9IiAmJiB0ZXN0IC16ICIke0RYX0NPTkRfaHRtbF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkRYX0NPTkRfaHRtbFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7RFhfQ09ORF9odG1sX1RSVUV9IiAmJiB0ZXN0IC16ICIke0RYX0NPTkRfaHRtbF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkRYX0NPTkRfaHRtbFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7RFhfQ09ORF9wc19UUlVFfSIgJiYgdGVzdCAteiAiJHtEWF9DT05EX3BzX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiRFhfQ09ORF9wc1wiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7RFhfQ09ORF9wc19UUlVFfSIgJiYgdGVzdCAteiAiJHtEWF9DT05EX3BzX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiRFhfQ09ORF9wc1wiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7RFhfQ09ORF9wZGZfVFJVRX0iICYmIHRlc3QgLXogIiR7RFhfQ09ORF9wZGZfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJEWF9DT05EX3BkZlwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7RFhfQ09ORF9wZGZfVFJVRX0iICYmIHRlc3QgLXogIiR7RFhfQ09ORF9wZGZfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJEWF9DT05EX3BkZlwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7RFhfQ09ORF9sYXRleF9UUlVFfSIgJiYgdGVzdCAteiAiJHtEWF9DT05EX2xhdGV4X0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiRFhfQ09ORF9sYXRleFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7RFhfQ09ORF9sYXRleF9UUlVFfSIgJiYgdGVzdCAteiAiJHtEWF9DT05EX2xhdGV4X0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiRFhfQ09ORF9sYXRleFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7RU5BQkxFX0NPUkVfRE9DU19UUlVFfSIgJiYgdGVzdCAteiAiJHtFTkFCTEVfQ09SRV9ET0NTX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiRU5BQkxFX0NPUkVfRE9DU1wiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7VVNFX1hNTFRPTUFOX1RSVUV9IiAmJiB0ZXN0IC16ICIke1VTRV9YTUxUT01BTl9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlVTRV9YTUxUT01BTlwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7QlVJTERfTUFOUEFHRVNfVFJVRX0iICYmIHRlc3QgLXogIiR7QlVJTERfTUFOUEFHRVNfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJCVUlMRF9NQU5QQUdFU1wiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7RU5BQkxFX1RFU1RTX1RSVUV9IiAmJiB0ZXN0IC16ICIke0VOQUJMRV9URVNUU19GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkVOQUJMRV9URVNUU1wiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7RU5BQkxFX0NPTVBBVF9MSUJETlNfU0RfVFJVRX0iICYmIHRlc3QgLXogIiR7RU5BQkxFX0NPTVBBVF9MSUJETlNfU0RfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJFTkFCTEVfQ09NUEFUX0xJQkROU19TRFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7RU5BQkxFX0NPTVBBVF9IT1dMX1RSVUV9IiAmJiB0ZXN0IC16ICIke0VOQUJMRV9DT01QQVRfSE9XTF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkVOQUJMRV9DT01QQVRfSE9XTFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7SEFWRV9TWVNURU1EX1RSVUV9IiAmJiB0ZXN0IC16ICIke0hBVkVfU1lTVEVNRF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkhBVkVfU1lTVEVNRFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKKworOiAiJHtDT05GSUdfU1RBVFVTPS4vY29uZmlnLnN0YXR1c30iCithY193cml0ZV9mYWlsPTAKK2FjX2NsZWFuX2ZpbGVzX3NhdmU9JGFjX2NsZWFuX2ZpbGVzCithY19jbGVhbl9maWxlcz0iJGFjX2NsZWFuX2ZpbGVzICRDT05GSUdfU1RBVFVTIgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjcmVhdGluZyAkQ09ORklHX1NUQVRVUyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBjcmVhdGluZyAkQ09ORklHX1NUQVRVUyIgPiY2O30KK2FzX3dyaXRlX2ZhaWw9MAorY2F0ID4kQ09ORklHX1NUQVRVUyA8PF9BU0VPRiB8fCBhc193cml0ZV9mYWlsPTEKKyMhICRTSEVMTAorIyBHZW5lcmF0ZWQgYnkgJGFzX21lLgorIyBSdW4gdGhpcyBmaWxlIHRvIHJlY3JlYXRlIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uCisjIENvbXBpbGVyIG91dHB1dCBwcm9kdWNlZCBieSBjb25maWd1cmUsIHVzZWZ1bCBmb3IgZGVidWdnaW5nCisjIGNvbmZpZ3VyZSwgaXMgaW4gY29uZmlnLmxvZyBpZiBpdCBleGlzdHMuCisKK2RlYnVnPWZhbHNlCithY19jc19yZWNoZWNrPWZhbHNlCithY19jc19zaWxlbnQ9ZmFsc2UKKworU0hFTEw9XCR7Q09ORklHX1NIRUxMLSRTSEVMTH0KK2V4cG9ydCBTSEVMTAorX0FTRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQVNFT0YgfHwgYXNfd3JpdGVfZmFpbD0xCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgTTRzaCBJbml0aWFsaXphdGlvbi4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgQmUgbW9yZSBCb3VybmUgY29tcGF0aWJsZQorRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAoraWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgZW11bGF0ZSBzaAorICBOVUxMQ01EPToKKyAgIyBQcmUtNC4yIHZlcnNpb25zIG9mIFpzaCBkbyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCisgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCisgIGFsaWFzIC1nICckezErIiRAIn0nPSciJEAiJworICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZWxzZQorICBjYXNlIGAoc2V0IC1vKSAyPi9kZXYvbnVsbGAgaW4gIygKKyAgKnBvc2l4KikgOgorICAgIHNldCAtbyBwb3NpeCA7OyAjKAorICAqKSA6CisgICAgIDs7Citlc2FjCitmaQorCisKK2FzX25sPScKKycKK2V4cG9ydCBhc19ubAorIyBQcmludGluZyBhIGxvbmcgc3RyaW5nIGNyYXNoZXMgU29sYXJpcyA3IC91c3IvYmluL3ByaW50Zi4KK2FzX2VjaG89J1xcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFwnCithc19lY2hvPSRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8KK2FzX2VjaG89JGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvCisjIFByZWZlciBhIGtzaCBzaGVsbCBidWlsdGluIG92ZXIgYW4gZXh0ZXJuYWwgcHJpbnRmIHByb2dyYW0gb24gU29sYXJpcywKKyMgYnV0IHdpdGhvdXQgd2FzdGluZyBmb3JrcyBmb3IgYmFzaCBvciB6c2guCitpZiB0ZXN0IC16ICIkQkFTSF9WRVJTSU9OJFpTSF9WRVJTSU9OIiBcCisgICAgJiYgKHRlc3QgIlhgcHJpbnQgLXIgLS0gJGFzX2VjaG9gIiA9ICJYJGFzX2VjaG8iKSAyPi9kZXYvbnVsbDsgdGhlbgorICBhc19lY2hvPSdwcmludCAtciAtLScKKyAgYXNfZWNob19uPSdwcmludCAtcm4gLS0nCitlbGlmICh0ZXN0ICJYYHByaW50ZiAlcyAkYXNfZWNob2AiID0gIlgkYXNfZWNobyIpIDI+L2Rldi9udWxsOyB0aGVuCisgIGFzX2VjaG89J3ByaW50ZiAlc1xuJworICBhc19lY2hvX249J3ByaW50ZiAlcycKK2Vsc2UKKyAgaWYgdGVzdCAiWGAoL3Vzci91Y2IvZWNobyAtbiAtbiAkYXNfZWNobykgMj4vZGV2L251bGxgIiA9ICJYLW4gJGFzX2VjaG8iOyB0aGVuCisgICAgYXNfZWNob19ib2R5PSdldmFsIC91c3IvdWNiL2VjaG8gLW4gIiQxJGFzX25sIicKKyAgICBhc19lY2hvX249Jy91c3IvdWNiL2VjaG8gLW4nCisgIGVsc2UKKyAgICBhc19lY2hvX2JvZHk9J2V2YWwgZXhwciAiWCQxIiA6ICJYXFwoLipcXCkiJworICAgIGFzX2VjaG9fbl9ib2R5PSdldmFsCisgICAgICBhcmc9JDE7CisgICAgICBjYXNlICRhcmcgaW4gIygKKyAgICAgICoiJGFzX25sIiopCisJZXhwciAiWCRhcmciIDogIlhcXCguKlxcKSRhc19ubCI7CisJYXJnPWBleHByICJYJGFyZyIgOiAiLiokYXNfbmxcXCguKlxcKSJgOzsKKyAgICAgIGVzYWM7CisgICAgICBleHByICJYJGFyZyIgOiAiWFxcKC4qXFwpIiB8IHRyIC1kICIkYXNfbmwiCisgICAgJworICAgIGV4cG9ydCBhc19lY2hvX25fYm9keQorICAgIGFzX2VjaG9fbj0nc2ggLWMgJGFzX2VjaG9fbl9ib2R5IGFzX2VjaG8nCisgIGZpCisgIGV4cG9ydCBhc19lY2hvX2JvZHkKKyAgYXNfZWNobz0nc2ggLWMgJGFzX2VjaG9fYm9keSBhc19lY2hvJworZmkKKworIyBUaGUgdXNlciBpcyBhbHdheXMgcmlnaHQuCitpZiB0ZXN0ICIke1BBVEhfU0VQQVJBVE9SK3NldH0iICE9IHNldDsgdGhlbgorICBQQVRIX1NFUEFSQVRPUj06CisgIChQQVRIPScvYmluOy9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9kZXYvbnVsbCAyPiYxICYmIHsKKyAgICAoUEFUSD0nL2JpbjovYmluJzsgRlBBVEg9JFBBVEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSB8fAorICAgICAgUEFUSF9TRVBBUkFUT1I9JzsnCisgIH0KK2ZpCisKKworIyBJRlMKKyMgV2UgbmVlZCBzcGFjZSwgdGFiIGFuZCBuZXcgbGluZSwgaW4gcHJlY2lzZWx5IHRoYXQgb3JkZXIuICBRdW90aW5nIGlzCisjIHRoZXJlIHRvIHByZXZlbnQgZWRpdG9ycyBmcm9tIGNvbXBsYWluaW5nIGFib3V0IHNwYWNlLXRhYi4KKyMgKElmIF9BU19QQVRIX1dBTEsgd2VyZSBjYWxsZWQgd2l0aCBJRlMgdW5zZXQsIGl0IHdvdWxkIGRpc2FibGUgd29yZAorIyBzcGxpdHRpbmcgYnkgc2V0dGluZyBJRlMgdG8gZW1wdHkgdmFsdWUuKQorSUZTPSIgIiIJJGFzX25sIgorCisjIEZpbmQgd2hvIHdlIGFyZS4gIExvb2sgaW4gdGhlIHBhdGggaWYgd2UgY29udGFpbiBubyBkaXJlY3Rvcnkgc2VwYXJhdG9yLgorYXNfbXlzZWxmPQorY2FzZSAkMCBpbiAjKCgKKyAgKltcXC9dKiApIGFzX215c2VsZj0kMCA7OworICAqKSBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgdGVzdCAtciAiJGFzX2Rpci8kMCIgJiYgYXNfbXlzZWxmPSRhc19kaXIvJDAgJiYgYnJlYWsKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgICAgIDs7Citlc2FjCisjIFdlIGRpZCBub3QgZmluZCBvdXJzZWx2ZXMsIG1vc3QgcHJvYmFibHkgd2Ugd2VyZSBydW4gYXMgYHNoIENPTU1BTkQnCisjIGluIHdoaWNoIGNhc2Ugd2UgYXJlIG5vdCB0byBiZSBmb3VuZCBpbiB0aGUgcGF0aC4KK2lmIHRlc3QgIngkYXNfbXlzZWxmIiA9IHg7IHRoZW4KKyAgYXNfbXlzZWxmPSQwCitmaQoraWYgdGVzdCAhIC1mICIkYXNfbXlzZWxmIjsgdGhlbgorICAkYXNfZWNobyAiJGFzX215c2VsZjogZXJyb3I6IGNhbm5vdCBmaW5kIG15c2VsZjsgcmVydW4gd2l0aCBhbiBhYnNvbHV0ZSBmaWxlIG5hbWUiID4mMgorICBleGl0IDEKK2ZpCisKKyMgVW5zZXQgdmFyaWFibGVzIHRoYXQgd2UgZG8gbm90IG5lZWQgYW5kIHdoaWNoIGNhdXNlIGJ1Z3MgKGUuZy4gaW4KKyMgcHJlLTMuMCBVV0lOIGtzaCkuICBCdXQgZG8gbm90IGNhdXNlIGJ1Z3MgaW4gYmFzaCAyLjAxOyB0aGUgInx8IGV4aXQgMSIKKyMgc3VwcHJlc3NlcyBhbnkgIlNlZ21lbnRhdGlvbiBmYXVsdCIgbWVzc2FnZSB0aGVyZS4gICcoKCcgY291bGQKKyMgdHJpZ2dlciBhIGJ1ZyBpbiBwZGtzaCA1LjIuMTQuCitmb3IgYXNfdmFyIGluIEJBU0hfRU5WIEVOViBNQUlMIE1BSUxQQVRICitkbyBldmFsIHRlc3QgeFwkeyRhc192YXIrc2V0fSA9IHhzZXQgXAorICAmJiAoICh1bnNldCAkYXNfdmFyKSB8fCBleGl0IDEpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCAkYXNfdmFyIHx8IDoKK2RvbmUKK1BTMT0nJCAnCitQUzI9Jz4gJworUFM0PScrICcKKworIyBOTFMgbnVpc2FuY2VzLgorTENfQUxMPUMKK2V4cG9ydCBMQ19BTEwKK0xBTkdVQUdFPUMKK2V4cG9ydCBMQU5HVUFHRQorCisjIENEUEFUSC4KKyh1bnNldCBDRFBBVEgpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBDRFBBVEgKKworCisjIGFzX2ZuX2Vycm9yIFNUQVRVUyBFUlJPUiBbTElORU5PIExPR19GRF0KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBPdXRwdXQgImBiYXNlbmFtZSAkMGA6IGVycm9yOiBFUlJPUiIgdG8gc3RkZXJyLiBJZiBMSU5FTk8gYW5kIExPR19GRCBhcmUKKyMgcHJvdmlkZWQsIGFsc28gb3V0cHV0IHRoZSBlcnJvciB0byBMT0dfRkQsIHJlZmVyZW5jaW5nIExJTkVOTy4gVGhlbiBleGl0IHRoZQorIyBzY3JpcHQgd2l0aCBTVEFUVVMsIHVzaW5nIDEgaWYgdGhhdCB3YXMgMC4KK2FzX2ZuX2Vycm9yICgpCit7CisgIGFzX3N0YXR1cz0kMTsgdGVzdCAkYXNfc3RhdHVzIC1lcSAwICYmIGFzX3N0YXR1cz0xCisgIGlmIHRlc3QgIiQ0IjsgdGhlbgorICAgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDMifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogJDIiID4mJDQKKyAgZmkKKyAgJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6ICQyIiA+JjIKKyAgYXNfZm5fZXhpdCAkYXNfc3RhdHVzCit9ICMgYXNfZm5fZXJyb3IKKworCisjIGFzX2ZuX3NldF9zdGF0dXMgU1RBVFVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNldCAkPyB0byBTVEFUVVMsIHdpdGhvdXQgZm9ya2luZy4KK2FzX2ZuX3NldF9zdGF0dXMgKCkKK3sKKyAgcmV0dXJuICQxCit9ICMgYXNfZm5fc2V0X3N0YXR1cworCisjIGFzX2ZuX2V4aXQgU1RBVFVTCisjIC0tLS0tLS0tLS0tLS0tLS0tCisjIEV4aXQgdGhlIHNoZWxsIHdpdGggU1RBVFVTLCBldmVuIGluIGEgInRyYXAgMCIgb3IgInNldCAtZSIgY29udGV4dC4KK2FzX2ZuX2V4aXQgKCkKK3sKKyAgc2V0ICtlCisgIGFzX2ZuX3NldF9zdGF0dXMgJDEKKyAgZXhpdCAkMQorfSAjIGFzX2ZuX2V4aXQKKworIyBhc19mbl91bnNldCBWQVIKKyMgLS0tLS0tLS0tLS0tLS0tCisjIFBvcnRhYmx5IHVuc2V0IFZBUi4KK2FzX2ZuX3Vuc2V0ICgpCit7CisgIHsgZXZhbCAkMT07IHVuc2V0ICQxO30KK30KK2FzX3Vuc2V0PWFzX2ZuX3Vuc2V0CisjIGFzX2ZuX2FwcGVuZCBWQVIgVkFMVUUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBcHBlbmQgdGhlIHRleHQgaW4gVkFMVUUgdG8gdGhlIGVuZCBvZiB0aGUgZGVmaW5pdGlvbiBjb250YWluZWQgaW4gVkFSLiBUYWtlCisjIGFkdmFudGFnZSBvZiBhbnkgc2hlbGwgb3B0aW1pemF0aW9ucyB0aGF0IGFsbG93IGFtb3J0aXplZCBsaW5lYXIgZ3Jvd3RoIG92ZXIKKyMgcmVwZWF0ZWQgYXBwZW5kcywgaW5zdGVhZCBvZiB0aGUgdHlwaWNhbCBxdWFkcmF0aWMgZ3Jvd3RoIHByZXNlbnQgaW4gbmFpdmUKKyMgaW1wbGVtZW50YXRpb25zLgoraWYgKGV2YWwgImFzX3Zhcj0xOyBhc192YXIrPTI7IHRlc3QgeFwkYXNfdmFyID0geDEyIikgMj4vZGV2L251bGw7IHRoZW4gOgorICBldmFsICdhc19mbl9hcHBlbmQgKCkKKyAgeworICAgIGV2YWwgJDErPVwkMgorICB9JworZWxzZQorICBhc19mbl9hcHBlbmQgKCkKKyAgeworICAgIGV2YWwgJDE9XCQkMVwkMgorICB9CitmaSAjIGFzX2ZuX2FwcGVuZAorCisjIGFzX2ZuX2FyaXRoIEFSRy4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgUGVyZm9ybSBhcml0aG1ldGljIGV2YWx1YXRpb24gb24gdGhlIEFSR3MsIGFuZCBzdG9yZSB0aGUgcmVzdWx0IGluIHRoZQorIyBnbG9iYWwgJGFzX3ZhbC4gVGFrZSBhZHZhbnRhZ2Ugb2Ygc2hlbGxzIHRoYXQgY2FuIGF2b2lkIGZvcmtzLiBUaGUgYXJndW1lbnRzCisjIG11c3QgYmUgcG9ydGFibGUgYWNyb3NzICQoKCkpIGFuZCBleHByLgoraWYgKGV2YWwgInRlc3QgXCQoKCAxICsgMSApKSA9IDIiKSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIGV2YWwgJ2FzX2ZuX2FyaXRoICgpCisgIHsKKyAgICBhc192YWw9JCgoICQqICkpCisgIH0nCitlbHNlCisgIGFzX2ZuX2FyaXRoICgpCisgIHsKKyAgICBhc192YWw9YGV4cHIgIiRAIiB8fCB0ZXN0ICQ/IC1lcSAxYAorICB9CitmaSAjIGFzX2ZuX2FyaXRoCisKKworaWYgZXhwciBhIDogJ1woYVwpJyA+L2Rldi9udWxsIDI+JjEgJiYKKyAgIHRlc3QgIlhgZXhwciAwMDAwMSA6ICcuKlwoLi4uXCknYCIgPSBYMDAxOyB0aGVuCisgIGFzX2V4cHI9ZXhwcgorZWxzZQorICBhc19leHByPWZhbHNlCitmaQorCitpZiAoYmFzZW5hbWUgLS0gLykgPi9kZXYvbnVsbCAyPiYxICYmIHRlc3QgIlhgYmFzZW5hbWUgLS0gLyAyPiYxYCIgPSAiWC8iOyB0aGVuCisgIGFzX2Jhc2VuYW1lPWJhc2VuYW1lCitlbHNlCisgIGFzX2Jhc2VuYW1lPWZhbHNlCitmaQorCitpZiAoYXNfZGlyPWBkaXJuYW1lIC0tIC9gICYmIHRlc3QgIlgkYXNfZGlyIiA9IFgvKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYXNfZGlybmFtZT1kaXJuYW1lCitlbHNlCisgIGFzX2Rpcm5hbWU9ZmFsc2UKK2ZpCisKK2FzX21lPWAkYXNfYmFzZW5hbWUgLS0gIiQwIiB8fAorJGFzX2V4cHIgWC8iJDAiIDogJy4qL1woW14vXVteL10qXCkvKiQnIFx8IFwKKwkgWCIkMCIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkMCIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYLyIkMCIgfAorICAgIHNlZCAnL14uKlwvXChbXi9dW14vXSpcKVwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXC9cKFwvXC9cKSQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXC9cKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2AKKworIyBBdm9pZCBkZXBlbmRpbmcgdXBvbiBDaGFyYWN0ZXIgUmFuZ2VzLgorYXNfY3JfbGV0dGVycz0nYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonCithc19jcl9MRVRURVJTPSdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicKK2FzX2NyX0xldHRlcnM9JGFzX2NyX2xldHRlcnMkYXNfY3JfTEVUVEVSUworYXNfY3JfZGlnaXRzPScwMTIzNDU2Nzg5JworYXNfY3JfYWxudW09JGFzX2NyX0xldHRlcnMkYXNfY3JfZGlnaXRzCisKK0VDSE9fQz0gRUNIT19OPSBFQ0hPX1Q9CitjYXNlIGBlY2hvIC1uIHhgIGluICMoKCgoKAorLW4qKQorICBjYXNlIGBlY2hvICd4eVxjJ2AgaW4KKyAgKmMqKSBFQ0hPX1Q9JwknOzsJIyBFQ0hPX1QgaXMgc2luZ2xlIHRhYiBjaGFyYWN0ZXIuCisgIHh5KSAgRUNIT19DPSdcYyc7OworICAqKSAgIGVjaG8gYGVjaG8ga3NoODggYnVnIG9uIEFJWCA2LjFgID4gL2Rldi9udWxsCisgICAgICAgRUNIT19UPScJJzs7CisgIGVzYWM7OworKikKKyAgRUNIT19OPSctbic7OworZXNhYworCitybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZmlsZQoraWYgdGVzdCAtZCBjb25mJCQuZGlyOyB0aGVuCisgIHJtIC1mIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUKK2Vsc2UKKyAgcm0gLWYgY29uZiQkLmRpcgorICBta2RpciBjb25mJCQuZGlyIDI+L2Rldi9udWxsCitmaQoraWYgKGVjaG8gPmNvbmYkJC5maWxlKSAyPi9kZXYvbnVsbDsgdGhlbgorICBpZiBsbiAtcyBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KKyAgICBhc19sbl9zPSdsbiAtcycKKyAgICAjIC4uLiBidXQgdGhlcmUgYXJlIHR3byBnb3RjaGFzOgorICAgICMgMSkgT24gTVNZUywgYm90aCBgbG4gLXMgZmlsZSBkaXInIGFuZCBgbG4gZmlsZSBkaXInIGZhaWwuCisgICAgIyAyKSBESkdQUCA8IDIuMDQgaGFzIG5vIHN5bWxpbmtzOyBgbG4gLXMnIGNyZWF0ZXMgYSB3cmFwcGVyIGV4ZWN1dGFibGUuCisgICAgIyBJbiBib3RoIGNhc2VzLCB3ZSBoYXZlIHRvIGRlZmF1bHQgdG8gYGNwIC1wJy4KKyAgICBsbiAtcyBjb25mJCQuZmlsZSBjb25mJCQuZGlyIDI+L2Rldi9udWxsICYmIHRlc3QgISAtZiBjb25mJCQuZXhlIHx8CisgICAgICBhc19sbl9zPSdjcCAtcCcKKyAgZWxpZiBsbiBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KKyAgICBhc19sbl9zPWxuCisgIGVsc2UKKyAgICBhc19sbl9zPSdjcCAtcCcKKyAgZmkKK2Vsc2UKKyAgYXNfbG5fcz0nY3AgLXAnCitmaQorcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmRpci9jb25mJCQuZmlsZSBjb25mJCQuZmlsZQorcm1kaXIgY29uZiQkLmRpciAyPi9kZXYvbnVsbAorCisKKyMgYXNfZm5fbWtkaXJfcAorIyAtLS0tLS0tLS0tLS0tCisjIENyZWF0ZSAiJGFzX2RpciIgYXMgYSBkaXJlY3RvcnksIGluY2x1ZGluZyBwYXJlbnRzIGlmIG5lY2Vzc2FyeS4KK2FzX2ZuX21rZGlyX3AgKCkKK3sKKworICBjYXNlICRhc19kaXIgaW4gIygKKyAgLSopIGFzX2Rpcj0uLyRhc19kaXI7OworICBlc2FjCisgIHRlc3QgLWQgIiRhc19kaXIiIHx8IGV2YWwgJGFzX21rZGlyX3AgfHwgeworICAgIGFzX2RpcnM9CisgICAgd2hpbGUgOjsgZG8KKyAgICAgIGNhc2UgJGFzX2RpciBpbiAjKAorICAgICAgKlwnKikgYXNfcWRpcj1gJGFzX2VjaG8gIiRhc19kaXIiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsgIycoCisgICAgICAqKSBhc19xZGlyPSRhc19kaXI7OworICAgICAgZXNhYworICAgICAgYXNfZGlycz0iJyRhc19xZGlyJyAkYXNfZGlycyIKKyAgICAgIGFzX2Rpcj1gJGFzX2Rpcm5hbWUgLS0gIiRhc19kaXIiIHx8CiskYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWCIkYXNfZGlyIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2AKKyAgICAgIHRlc3QgLWQgIiRhc19kaXIiICYmIGJyZWFrCisgICAgZG9uZQorICAgIHRlc3QgLXogIiRhc19kaXJzIiB8fCBldmFsICJta2RpciAkYXNfZGlycyIKKyAgfSB8fCB0ZXN0IC1kICIkYXNfZGlyIiB8fCBhc19mbl9lcnJvciAkPyAiY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJGFzX2RpciIKKworCit9ICMgYXNfZm5fbWtkaXJfcAoraWYgbWtkaXIgLXAgLiAyPi9kZXYvbnVsbDsgdGhlbgorICBhc19ta2Rpcl9wPSdta2RpciAtcCAiJGFzX2RpciInCitlbHNlCisgIHRlc3QgLWQgLi8tcCAmJiBybWRpciAuLy1wCisgIGFzX21rZGlyX3A9ZmFsc2UKK2ZpCisKK2lmIHRlc3QgLXggLyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYXNfdGVzdF94PSd0ZXN0IC14JworZWxzZQorICBpZiBscyAtZEwgLyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICBhc19sc19MX29wdGlvbj1MCisgIGVsc2UKKyAgICBhc19sc19MX29wdGlvbj0KKyAgZmkKKyAgYXNfdGVzdF94PScKKyAgICBldmFsIHNoIC1jICdcJycKKyAgICAgIGlmIHRlc3QgLWQgIiQxIjsgdGhlbgorCXRlc3QgLWQgIiQxLy4iOworICAgICAgZWxzZQorCWNhc2UgJDEgaW4gIygKKwktKilzZXQgIi4vJDEiOzsKKwllc2FjOworCWNhc2UgYGxzIC1sZCckYXNfbHNfTF9vcHRpb24nICIkMSIgMj4vZGV2L251bGxgIGluICMoKAorCT8/P1tzeF0qKTo7OyopZmFsc2U7O2VzYWM7ZmkKKyAgICAnXCcnIHNoCisgICcKK2ZpCithc19leGVjdXRhYmxlX3A9JGFzX3Rlc3RfeAorCisjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgQ1BQIG5hbWUuCithc190cl9jcHA9ImV2YWwgc2VkICd5JSokYXNfY3JfbGV0dGVycyVQJGFzX2NyX0xFVFRFUlMlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgorCisjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgdmFyaWFibGUgbmFtZS4KK2FzX3RyX3NoPSJldmFsIHNlZCAneSUqKyVwcCU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCisKKworZXhlYyA2PiYxCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgTWFpbiBib2R5IG9mICRDT05GSUdfU1RBVFVTIHNjcmlwdC4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCitfQVNFT0YKK3Rlc3QgJGFzX3dyaXRlX2ZhaWwgPSAwICYmIGNobW9kICt4ICRDT05GSUdfU1RBVFVTIHx8IGFjX3dyaXRlX2ZhaWw9MQorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisjIFNhdmUgdGhlIGxvZyBtZXNzYWdlLCB0byBrZWVwICQwIGFuZCBzbyBvbiBtZWFuaW5nZnVsLCBhbmQgdG8KKyMgcmVwb3J0IGFjdHVhbCBpbnB1dCB2YWx1ZXMgb2YgQ09ORklHX0ZJTEVTIGV0Yy4gaW5zdGVhZCBvZiB0aGVpcgorIyB2YWx1ZXMgYWZ0ZXIgb3B0aW9ucyBoYW5kbGluZy4KK2FjX2xvZz0iCitUaGlzIGZpbGUgd2FzIGV4dGVuZGVkIGJ5IGF2YWhpICRhc19tZSAwLjYuMzEsIHdoaWNoIHdhcworZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY4LiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCisKKyAgQ09ORklHX0ZJTEVTICAgID0gJENPTkZJR19GSUxFUworICBDT05GSUdfSEVBREVSUyAgPSAkQ09ORklHX0hFQURFUlMKKyAgQ09ORklHX0xJTktTICAgID0gJENPTkZJR19MSU5LUworICBDT05GSUdfQ09NTUFORFMgPSAkQ09ORklHX0NPTU1BTkRTCisgICQgJDAgJEAKKworb24gYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgCisiCisKK19BQ0VPRgorCitjYXNlICRhY19jb25maWdfZmlsZXMgaW4gKiIKKyIqKSBzZXQgeCAkYWNfY29uZmlnX2ZpbGVzOyBzaGlmdDsgYWNfY29uZmlnX2ZpbGVzPSQqOzsKK2VzYWMKKworY2FzZSAkYWNfY29uZmlnX2hlYWRlcnMgaW4gKiIKKyIqKSBzZXQgeCAkYWNfY29uZmlnX2hlYWRlcnM7IHNoaWZ0OyBhY19jb25maWdfaGVhZGVycz0kKjs7Citlc2FjCisKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisjIEZpbGVzIHRoYXQgY29uZmlnLnN0YXR1cyB3YXMgbWFkZSBmb3IuCitjb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMiCitjb25maWdfaGVhZGVycz0iJGFjX2NvbmZpZ19oZWFkZXJzIgorY29uZmlnX2NvbW1hbmRzPSIkYWNfY29uZmlnX2NvbW1hbmRzIgorCitfQUNFT0YKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorYWNfY3NfdXNhZ2U9IlwKK1xgJGFzX21lJyBpbnN0YW50aWF0ZXMgZmlsZXMgYW5kIG90aGVyIGNvbmZpZ3VyYXRpb24gYWN0aW9ucworZnJvbSB0ZW1wbGF0ZXMgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uICBVbmxlc3MgdGhlIGZpbGVzCithbmQgYWN0aW9ucyBhcmUgc3BlY2lmaWVkIGFzIFRBR3MsIGFsbCBhcmUgaW5zdGFudGlhdGVkIGJ5IGRlZmF1bHQuCisKK1VzYWdlOiAkMCBbT1BUSU9OXS4uLiBbVEFHXS4uLgorCisgIC1oLCAtLWhlbHAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKKyAgLVYsIC0tdmVyc2lvbiAgICBwcmludCB2ZXJzaW9uIG51bWJlciBhbmQgY29uZmlndXJhdGlvbiBzZXR0aW5ncywgdGhlbiBleGl0CisgICAgICAtLWNvbmZpZyAgICAgcHJpbnQgY29uZmlndXJhdGlvbiwgdGhlbiBleGl0CisgIC1xLCAtLXF1aWV0LCAtLXNpbGVudAorICAgICAgICAgICAgICAgICAgIGRvIG5vdCBwcmludCBwcm9ncmVzcyBtZXNzYWdlcworICAtZCwgLS1kZWJ1ZyAgICAgIGRvbid0IHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMKKyAgICAgIC0tcmVjaGVjayAgICB1cGRhdGUgJGFzX21lIGJ5IHJlY29uZmlndXJpbmcgaW4gdGhlIHNhbWUgY29uZGl0aW9ucworICAgICAgLS1maWxlPUZJTEVbOlRFTVBMQVRFXQorICAgICAgICAgICAgICAgICAgIGluc3RhbnRpYXRlIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgRklMRQorICAgICAgLS1oZWFkZXI9RklMRVs6VEVNUExBVEVdCisgICAgICAgICAgICAgICAgICAgaW5zdGFudGlhdGUgdGhlIGNvbmZpZ3VyYXRpb24gaGVhZGVyIEZJTEUKKworQ29uZmlndXJhdGlvbiBmaWxlczoKKyRjb25maWdfZmlsZXMKKworQ29uZmlndXJhdGlvbiBoZWFkZXJzOgorJGNvbmZpZ19oZWFkZXJzCisKK0NvbmZpZ3VyYXRpb24gY29tbWFuZHM6CiskY29uZmlnX2NvbW1hbmRzCisKK1JlcG9ydCBidWdzIHRvIDxhdmFoaSAoYXQpIGxpc3RzIChkb3QpIGZyZWVkZXNrdG9wIChkb3QpIG9yZz4uIgorCitfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorYWNfY3NfY29uZmlnPSJgJGFzX2VjaG8gIiRhY19jb25maWd1cmVfYXJncyIgfCBzZWQgJ3MvXiAvLzsgcy9bXFwiIlxgXCRdL1xcXFwmL2cnYCIKK2FjX2NzX3ZlcnNpb249IlxcCithdmFoaSBjb25maWcuc3RhdHVzIDAuNi4zMQorY29uZmlndXJlZCBieSAkMCwgZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY4LAorICB3aXRoIG9wdGlvbnMgXFwiXCRhY19jc19jb25maWdcXCIKKworQ29weXJpZ2h0IChDKSAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorVGhpcyBjb25maWcuc3RhdHVzIHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgaXQuIgorCithY19wd2Q9JyRhY19wd2QnCitzcmNkaXI9JyRzcmNkaXInCitJTlNUQUxMPSckSU5TVEFMTCcKK01LRElSX1A9JyRNS0RJUl9QJworQVdLPSckQVdLJwordGVzdCAtbiAiXCRBV0siIHx8IEFXSz1hd2sKK19BQ0VPRgorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisjIFRoZSBkZWZhdWx0IGxpc3RzIGFwcGx5IGlmIHRoZSB1c2VyIGRvZXMgbm90IHNwZWNpZnkgYW55IGZpbGUuCithY19uZWVkX2RlZmF1bHRzPToKK3doaWxlIHRlc3QgJCMgIT0gMAorZG8KKyAgY2FzZSAkMSBpbgorICAtLSo9PyopCisgICAgYWNfb3B0aW9uPWBleHByICJYJDEiIDogJ1hcKFtePV0qXCk9J2AKKyAgICBhY19vcHRhcmc9YGV4cHIgIlgkMSIgOiAnWFtePV0qPVwoLipcKSdgCisgICAgYWNfc2hpZnQ9OgorICAgIDs7CisgIC0tKj0pCisgICAgYWNfb3B0aW9uPWBleHByICJYJDEiIDogJ1hcKFtePV0qXCk9J2AKKyAgICBhY19vcHRhcmc9CisgICAgYWNfc2hpZnQ9OgorICAgIDs7CisgICopCisgICAgYWNfb3B0aW9uPSQxCisgICAgYWNfb3B0YXJnPSQyCisgICAgYWNfc2hpZnQ9c2hpZnQKKyAgICA7OworICBlc2FjCisKKyAgY2FzZSAkYWNfb3B0aW9uIGluCisgICMgSGFuZGxpbmcgb2YgdGhlIG9wdGlvbnMuCisgIC1yZWNoZWNrIHwgLS1yZWNoZWNrIHwgLS1yZWNoZWMgfCAtLXJlY2hlIHwgLS1yZWNoIHwgLS1yZWMgfCAtLXJlIHwgLS1yKQorICAgIGFjX2NzX3JlY2hlY2s9OiA7OworICAtLXZlcnNpb24gfCAtLXZlcnNpbyB8IC0tdmVyc2kgfCAtLXZlcnMgfCAtLXZlciB8IC0tdmUgfCAtLXYgfCAtViApCisgICAgJGFzX2VjaG8gIiRhY19jc192ZXJzaW9uIjsgZXhpdCA7OworICAtLWNvbmZpZyB8IC0tY29uZmkgfCAtLWNvbmYgfCAtLWNvbiB8IC0tY28gfCAtLWMgKQorICAgICRhc19lY2hvICIkYWNfY3NfY29uZmlnIjsgZXhpdCA7OworICAtLWRlYnVnIHwgLS1kZWJ1IHwgLS1kZWIgfCAtLWRlIHwgLS1kIHwgLWQgKQorICAgIGRlYnVnPTogOzsKKyAgLS1maWxlIHwgLS1maWwgfCAtLWZpIHwgLS1mICkKKyAgICAkYWNfc2hpZnQKKyAgICBjYXNlICRhY19vcHRhcmcgaW4KKyAgICAqXCcqKSBhY19vcHRhcmc9YCRhc19lY2hvICIkYWNfb3B0YXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OworICAgICcnKSBhc19mbl9lcnJvciAkPyAibWlzc2luZyBmaWxlIGFyZ3VtZW50IiA7OworICAgIGVzYWMKKyAgICBhc19mbl9hcHBlbmQgQ09ORklHX0ZJTEVTICIgJyRhY19vcHRhcmcnIgorICAgIGFjX25lZWRfZGVmYXVsdHM9ZmFsc2U7OworICAtLWhlYWRlciB8IC0taGVhZGUgfCAtLWhlYWQgfCAtLWhlYSApCisgICAgJGFjX3NoaWZ0CisgICAgY2FzZSAkYWNfb3B0YXJnIGluCisgICAgKlwnKikgYWNfb3B0YXJnPWAkYXNfZWNobyAiJGFjX29wdGFyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKKyAgICBlc2FjCisgICAgYXNfZm5fYXBwZW5kIENPTkZJR19IRUFERVJTICIgJyRhY19vcHRhcmcnIgorICAgIGFjX25lZWRfZGVmYXVsdHM9ZmFsc2U7OworICAtLWhlIHwgLS1oKQorICAgICMgQ29uZmxpY3QgYmV0d2VlbiAtLWhlbHAgYW5kIC0taGVhZGVyCisgICAgYXNfZm5fZXJyb3IgJD8gImFtYmlndW91cyBvcHRpb246IFxgJDEnCitUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiI7OworICAtLWhlbHAgfCAtLWhlbCB8IC1oICkKKyAgICAkYXNfZWNobyAiJGFjX2NzX3VzYWdlIjsgZXhpdCA7OworICAtcSB8IC1xdWlldCB8IC0tcXVpZXQgfCAtLXF1aWUgfCAtLXF1aSB8IC0tcXUgfCAtLXEgXAorICB8IC1zaWxlbnQgfCAtLXNpbGVudCB8IC0tc2lsZW4gfCAtLXNpbGUgfCAtLXNpbCB8IC0tc2kgfCAtLXMpCisgICAgYWNfY3Nfc2lsZW50PTogOzsKKworICAjIFRoaXMgaXMgYW4gZXJyb3IuCisgIC0qKSBhc19mbl9lcnJvciAkPyAidW5yZWNvZ25pemVkIG9wdGlvbjogXGAkMScKK1RyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiA7OworCisgICopIGFzX2ZuX2FwcGVuZCBhY19jb25maWdfdGFyZ2V0cyAiICQxIgorICAgICBhY19uZWVkX2RlZmF1bHRzPWZhbHNlIDs7CisKKyAgZXNhYworICBzaGlmdAorZG9uZQorCithY19jb25maWd1cmVfZXh0cmFfYXJncz0KKworaWYgJGFjX2NzX3NpbGVudDsgdGhlbgorICBleGVjIDY+L2Rldi9udWxsCisgIGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzPSIkYWNfY29uZmlndXJlX2V4dHJhX2FyZ3MgLS1zaWxlbnQiCitmaQorCitfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQoraWYgXCRhY19jc19yZWNoZWNrOyB0aGVuCisgIHNldCBYICckU0hFTEwnICckMCcgJGFjX2NvbmZpZ3VyZV9hcmdzIFwkYWNfY29uZmlndXJlX2V4dHJhX2FyZ3MgLS1uby1jcmVhdGUgLS1uby1yZWN1cnNpb24KKyAgc2hpZnQKKyAgXCRhc19lY2hvICJydW5uaW5nIENPTkZJR19TSEVMTD0kU0hFTEwgXCQqIiA+JjYKKyAgQ09ORklHX1NIRUxMPSckU0hFTEwnCisgIGV4cG9ydCBDT05GSUdfU0hFTEwKKyAgZXhlYyAiXCRAIgorZmkKKworX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCitleGVjIDU+PmNvbmZpZy5sb2cKK3sKKyAgZWNobworICBzZWQgJ2g7cy8uLy0vZztzL14uLi4vIyMgLztzLy4uLiQvICMjLztwO3g7cDt4JyA8PF9BU0JPWAorIyMgUnVubmluZyAkYXNfbWUuICMjCitfQVNCT1gKKyAgJGFzX2VjaG8gIiRhY19sb2ciCit9ID4mNQorCitfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorIworIyBJTklULUNPTU1BTkRTCisjCitBTURFUF9UUlVFPSIkQU1ERVBfVFJVRSIgYWNfYXV4X2Rpcj0iJGFjX2F1eF9kaXIiCisKKworIyBUaGUgSFAtVVgga3NoIGFuZCBQT1NJWCBzaGVsbCBwcmludCB0aGUgdGFyZ2V0IGRpcmVjdG9yeSB0byBzdGRvdXQKKyMgaWYgQ0RQQVRIIGlzIHNldC4KKyh1bnNldCBDRFBBVEgpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBDRFBBVEgKKworc2VkX3F1b3RlX3N1YnN0PSckc2VkX3F1b3RlX3N1YnN0JworZG91YmxlX3F1b3RlX3N1YnN0PSckZG91YmxlX3F1b3RlX3N1YnN0JworZGVsYXlfdmFyaWFibGVfc3Vic3Q9JyRkZWxheV92YXJpYWJsZV9zdWJzdCcKK21hY3JvX3ZlcnNpb249J2AkRUNITyAiJG1hY3JvX3ZlcnNpb24iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbWFjcm9fcmV2aXNpb249J2AkRUNITyAiJG1hY3JvX3JldmlzaW9uIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2VuYWJsZV9zaGFyZWQ9J2AkRUNITyAiJGVuYWJsZV9zaGFyZWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZW5hYmxlX3N0YXRpYz0nYCRFQ0hPICIkZW5hYmxlX3N0YXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitwaWNfbW9kZT0nYCRFQ0hPICIkcGljX21vZGUiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZW5hYmxlX2Zhc3RfaW5zdGFsbD0nYCRFQ0hPICIkZW5hYmxlX2Zhc3RfaW5zdGFsbCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitTSEVMTD0nYCRFQ0hPICIkU0hFTEwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworRUNITz0nYCRFQ0hPICIkRUNITyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitQQVRIX1NFUEFSQVRPUj0nYCRFQ0hPICIkUEFUSF9TRVBBUkFUT1IiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaG9zdF9hbGlhcz0nYCRFQ0hPICIkaG9zdF9hbGlhcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitob3N0PSdgJEVDSE8gIiRob3N0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hvc3Rfb3M9J2AkRUNITyAiJGhvc3Rfb3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYnVpbGRfYWxpYXM9J2AkRUNITyAiJGJ1aWxkX2FsaWFzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2J1aWxkPSdgJEVDSE8gIiRidWlsZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitidWlsZF9vcz0nYCRFQ0hPICIkYnVpbGRfb3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworU0VEPSdgJEVDSE8gIiRTRUQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworWHNlZD0nYCRFQ0hPICIkWHNlZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitHUkVQPSdgJEVDSE8gIiRHUkVQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0VHUkVQPSdgJEVDSE8gIiRFR1JFUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitGR1JFUD0nYCRFQ0hPICIkRkdSRVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworTEQ9J2AkRUNITyAiJExEIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK05NPSdgJEVDSE8gIiROTSIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitMTl9TPSdgJEVDSE8gIiRMTl9TIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK21heF9jbWRfbGVuPSdgJEVDSE8gIiRtYXhfY21kX2xlbiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithY19vYmpleHQ9J2AkRUNITyAiJGFjX29iamV4dCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitleGVleHQ9J2AkRUNITyAiJGV4ZWV4dCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF91bnNldD0nYCRFQ0hPICIkbHRfdW5zZXQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfU1AyTkw9J2AkRUNITyAiJGx0X1NQMk5MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X05MMlNQPSdgJEVDSE8gIiRsdF9OTDJTUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9jdl90b19ob3N0X2ZpbGVfY21kPSdgJEVDSE8gIiRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9J2AkRUNITyAiJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcmVsb2FkX2ZsYWc9J2AkRUNITyAiJHJlbG9hZF9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3JlbG9hZF9jbWRzPSdgJEVDSE8gIiRyZWxvYWRfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitPQkpEVU1QPSdgJEVDSE8gIiRPQkpEVU1QIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdgJEVDSE8gIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitmaWxlX21hZ2ljX2NtZD0nYCRFQ0hPICIkZmlsZV9tYWdpY19jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZmlsZV9tYWdpY19nbG9iPSdgJEVDSE8gIiRmaWxlX21hZ2ljX2dsb2IiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJword2FudF9ub2Nhc2VnbG9iPSdgJEVDSE8gIiR3YW50X25vY2FzZWdsb2IiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworRExMVE9PTD0nYCRFQ0hPICIkRExMVE9PTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0nYCRFQ0hPICIkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQVI9J2AkRUNITyAiJEFSIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0FSX0ZMQUdTPSdgJEVDSE8gIiRBUl9GTEFHUyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithcmNoaXZlcl9saXN0X3NwZWM9J2AkRUNITyAiJGFyY2hpdmVyX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitTVFJJUD0nYCRFQ0hPICIkU1RSSVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworUkFOTElCPSdgJEVDSE8gIiRSQU5MSUIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2AkRUNITyAiJG9sZF9wb3N0aW5zdGFsbF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK29sZF9wb3N0dW5pbnN0YWxsX2NtZHM9J2AkRUNITyAiJG9sZF9wb3N0dW5pbnN0YWxsX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworb2xkX2FyY2hpdmVfY21kcz0nYCRFQ0hPICIkb2xkX2FyY2hpdmVfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb249J2AkRUNITyAiJGxvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitDQz0nYCRFQ0hPICIkQ0MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQ0ZMQUdTPSdgJEVDSE8gIiRDRkxBR1MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworY29tcGlsZXI9J2AkRUNITyAiJGNvbXBpbGVyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0dDQz0nYCRFQ0hPICIkR0NDIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK25tX2ZpbGVfbGlzdF9zcGVjPSdgJEVDSE8gIiRubV9maWxlX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9zeXNyb290PSdgJEVDSE8gIiRsdF9zeXNyb290IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK29iamRpcj0nYCRFQ0hPICIkb2JqZGlyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK01BR0lDX0NNRD0nYCRFQ0hPICIkTUFHSUNfQ01EIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9wcm9nX2NvbXBpbGVyX3BpYz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9waWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfcHJvZ19jb21waWxlcl93bD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfY3ZfcHJvZ19jb21waWxlcl9jX289J2AkRUNITyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK25lZWRfbG9ja3M9J2AkRUNITyAiJG5lZWRfbG9ja3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworTUFOSUZFU1RfVE9PTD0nYCRFQ0hPICIkTUFOSUZFU1RfVE9PTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitEU1lNVVRJTD0nYCRFQ0hPICIkRFNZTVVUSUwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworTk1FRElUPSdgJEVDSE8gIiROTUVESVQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworTElQTz0nYCRFQ0hPICIkTElQTyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitPVE9PTD0nYCRFQ0hPICIkT1RPT0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworT1RPT0w2ND0nYCRFQ0hPICIkT1RPT0w2NCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsaWJleHQ9J2AkRUNITyAiJGxpYmV4dCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitzaHJleHRfY21kcz0nYCRFQ0hPICIkc2hyZXh0X2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZXh0cmFjdF9leHBzeW1zX2NtZHM9J2AkRUNITyAiJGV4dHJhY3RfZXhwc3ltc19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2FyY2hpdmVfY21kc19uZWVkX2xjPSdgJEVDSE8gIiRhcmNoaXZlX2NtZHNfbmVlZF9sYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPSdgJEVDSE8gIiRlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nYCRFQ0hPICIkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSdgJEVDSE8gIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitjb21waWxlcl9uZWVkc19vYmplY3Q9J2AkRUNITyAiJGNvbXBpbGVyX25lZWRzX29iamVjdCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSdgJEVDSE8gIiRvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzPSdgJEVDSE8gIiRvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithcmNoaXZlX2NtZHM9J2AkRUNITyAiJGFyY2hpdmVfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithcmNoaXZlX2V4cHN5bV9jbWRzPSdgJEVDSE8gIiRhcmNoaXZlX2V4cHN5bV9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK21vZHVsZV9jbWRzPSdgJEVDSE8gIiRtb2R1bGVfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCittb2R1bGVfZXhwc3ltX2NtZHM9J2AkRUNITyAiJG1vZHVsZV9leHBzeW1fY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCit3aXRoX2dudV9sZD0nYCRFQ0hPICIkd2l0aF9nbnVfbGQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYWxsb3dfdW5kZWZpbmVkX2ZsYWc9J2AkRUNITyAiJGFsbG93X3VuZGVmaW5lZF9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK25vX3VuZGVmaW5lZF9mbGFnPSdgJEVDSE8gIiRub191bmRlZmluZWRfZmxhZyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSdgJEVDSE8gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9J2AkRUNITyAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfZGlyZWN0PSdgJEVDSE8gIiRoYXJkY29kZV9kaXJlY3QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPSdgJEVDSE8gIiRoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfbWludXNfTD0nYCRFQ0hPICIkaGFyZGNvZGVfbWludXNfTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9zaGxpYnBhdGhfdmFyPSdgJEVDSE8gIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2F1dG9tYXRpYz0nYCRFQ0hPICIkaGFyZGNvZGVfYXV0b21hdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2luaGVyaXRfcnBhdGg9J2AkRUNITyAiJGluaGVyaXRfcnBhdGgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbGlua19hbGxfZGVwbGlicz0nYCRFQ0hPICIkbGlua19hbGxfZGVwbGlicyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithbHdheXNfZXhwb3J0X3N5bWJvbHM9J2AkRUNITyAiJGFsd2F5c19leHBvcnRfc3ltYm9scyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitleHBvcnRfc3ltYm9sc19jbWRzPSdgJEVDSE8gIiRleHBvcnRfc3ltYm9sc19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2V4Y2x1ZGVfZXhwc3ltcz0nYCRFQ0hPICIkZXhjbHVkZV9leHBzeW1zIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2luY2x1ZGVfZXhwc3ltcz0nYCRFQ0hPICIkaW5jbHVkZV9leHBzeW1zIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3ByZWxpbmtfY21kcz0nYCRFQ0hPICIkcHJlbGlua19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3Bvc3RsaW5rX2NtZHM9J2AkRUNITyAiJHBvc3RsaW5rX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZmlsZV9saXN0X3NwZWM9J2AkRUNITyAiJGZpbGVfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3ZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSdgJEVDSE8gIiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCituZWVkX2xpYl9wcmVmaXg9J2AkRUNITyAiJG5lZWRfbGliX3ByZWZpeCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCituZWVkX3ZlcnNpb249J2AkRUNITyAiJG5lZWRfdmVyc2lvbiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCit2ZXJzaW9uX3R5cGU9J2AkRUNITyAiJHZlcnNpb25fdHlwZSIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitydW5wYXRoX3Zhcj0nYCRFQ0hPICIkcnVucGF0aF92YXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworc2hsaWJwYXRoX3Zhcj0nYCRFQ0hPICIkc2hsaWJwYXRoX3ZhciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9J2AkRUNITyAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsaWJuYW1lX3NwZWM9J2AkRUNITyAiJGxpYm5hbWVfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsaWJyYXJ5X25hbWVzX3NwZWM9J2AkRUNITyAiJGxpYnJhcnlfbmFtZXNfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitzb25hbWVfc3BlYz0nYCRFQ0hPICIkc29uYW1lX3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaW5zdGFsbF9vdmVycmlkZV9tb2RlPSdgJEVDSE8gIiRpbnN0YWxsX292ZXJyaWRlX21vZGUiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcG9zdGluc3RhbGxfY21kcz0nYCRFQ0hPICIkcG9zdGluc3RhbGxfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitwb3N0dW5pbnN0YWxsX2NtZHM9J2AkRUNITyAiJHBvc3R1bmluc3RhbGxfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitmaW5pc2hfY21kcz0nYCRFQ0hPICIkZmluaXNoX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZmluaXNoX2V2YWw9J2AkRUNITyAiJGZpbmlzaF9ldmFsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2ludG9fbGlicz0nYCRFQ0hPICIkaGFyZGNvZGVfaW50b19saWJzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nYCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSdgJEVDSE8gIiRzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9hY3Rpb249J2AkRUNITyAiJGhhcmRjb2RlX2FjdGlvbiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitlbmFibGVfZGxvcGVuPSdgJEVDSE8gIiRlbmFibGVfZGxvcGVuIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2VuYWJsZV9kbG9wZW5fc2VsZj0nYCRFQ0hPICIkZW5hYmxlX2Rsb3Blbl9zZWxmIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2VuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9J2AkRUNITyAiJGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworb2xkX3N0cmlwbGliPSdgJEVDSE8gIiRvbGRfc3RyaXBsaWIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworc3RyaXBsaWI9J2AkRUNITyAiJHN0cmlwbGliIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2NvbXBpbGVyX2xpYl9zZWFyY2hfZGlycz0nYCRFQ0hPICIkY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3ByZWRlcF9vYmplY3RzPSdgJEVDSE8gIiRwcmVkZXBfb2JqZWN0cyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitwb3N0ZGVwX29iamVjdHM9J2AkRUNITyAiJHBvc3RkZXBfb2JqZWN0cyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitwcmVkZXBzPSdgJEVDSE8gIiRwcmVkZXBzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3Bvc3RkZXBzPSdgJEVDSE8gIiRwb3N0ZGVwcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitjb21waWxlcl9saWJfc2VhcmNoX3BhdGg9J2AkRUNITyAiJGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitMRF9DWFg9J2AkRUNITyAiJExEX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCityZWxvYWRfZmxhZ19DWFg9J2AkRUNITyAiJHJlbG9hZF9mbGFnX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCityZWxvYWRfY21kc19DWFg9J2AkRUNITyAiJHJlbG9hZF9jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nYCRFQ0hPICIkb2xkX2FyY2hpdmVfY21kc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworY29tcGlsZXJfQ1hYPSdgJEVDSE8gIiRjb21waWxlcl9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworR0NDX0NYWD0nYCRFQ0hPICIkR0NDX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19DWFg9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bF9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYPSdgJEVDSE8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPSdgJEVDSE8gIiRhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19DWFg9J2AkRUNITyAiJGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9J2AkRUNITyAiJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJword2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPSdgJEVDSE8gIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworY29tcGlsZXJfbmVlZHNfb2JqZWN0X0NYWD0nYCRFQ0hPICIkY29tcGlsZXJfbmVlZHNfb2JqZWN0X0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX0NYWD0nYCRFQ0hPICIkb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNfQ1hYPSdgJEVDSE8gIiRvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYXJjaGl2ZV9jbWRzX0NYWD0nYCRFQ0hPICIkYXJjaGl2ZV9jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nYCRFQ0hPICIkYXJjaGl2ZV9leHBzeW1fY21kc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbW9kdWxlX2NtZHNfQ1hYPSdgJEVDSE8gIiRtb2R1bGVfY21kc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbW9kdWxlX2V4cHN5bV9jbWRzX0NYWD0nYCRFQ0hPICIkbW9kdWxlX2V4cHN5bV9jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCit3aXRoX2dudV9sZF9DWFg9J2AkRUNITyAiJHdpdGhfZ251X2xkX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithbGxvd191bmRlZmluZWRfZmxhZ19DWFg9J2AkRUNITyAiJGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitub191bmRlZmluZWRfZmxhZ19DWFg9J2AkRUNITyAiJG5vX3VuZGVmaW5lZF9mbGFnX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nYCRFQ0hPICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9J2AkRUNITyAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2RpcmVjdF9DWFg9J2AkRUNITyAiJGhhcmRjb2RlX2RpcmVjdF9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlX0NYWD0nYCRFQ0hPICIkaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9taW51c19MX0NYWD0nYCRFQ0hPICIkaGFyZGNvZGVfbWludXNfTF9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9J2AkRUNITyAiJGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2F1dG9tYXRpY19DWFg9J2AkRUNITyAiJGhhcmRjb2RlX2F1dG9tYXRpY19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaW5oZXJpdF9ycGF0aF9DWFg9J2AkRUNITyAiJGluaGVyaXRfcnBhdGhfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2xpbmtfYWxsX2RlcGxpYnNfQ1hYPSdgJEVDSE8gIiRsaW5rX2FsbF9kZXBsaWJzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithbHdheXNfZXhwb3J0X3N5bWJvbHNfQ1hYPSdgJEVDSE8gIiRhbHdheXNfZXhwb3J0X3N5bWJvbHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2V4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSdgJEVDSE8gIiRleHBvcnRfc3ltYm9sc19jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitleGNsdWRlX2V4cHN5bXNfQ1hYPSdgJEVDSE8gIiRleGNsdWRlX2V4cHN5bXNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2luY2x1ZGVfZXhwc3ltc19DWFg9J2AkRUNITyAiJGluY2x1ZGVfZXhwc3ltc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcHJlbGlua19jbWRzX0NYWD0nYCRFQ0hPICIkcHJlbGlua19jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitwb3N0bGlua19jbWRzX0NYWD0nYCRFQ0hPICIkcG9zdGxpbmtfY21kc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZmlsZV9saXN0X3NwZWNfQ1hYPSdgJEVDSE8gIiRmaWxlX2xpc3Rfc3BlY19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfYWN0aW9uX0NYWD0nYCRFQ0hPICIkaGFyZGNvZGVfYWN0aW9uX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitjb21waWxlcl9saWJfc2VhcmNoX2RpcnNfQ1hYPSdgJEVDSE8gIiRjb21waWxlcl9saWJfc2VhcmNoX2RpcnNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3ByZWRlcF9vYmplY3RzX0NYWD0nYCRFQ0hPICIkcHJlZGVwX29iamVjdHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3Bvc3RkZXBfb2JqZWN0c19DWFg9J2AkRUNITyAiJHBvc3RkZXBfb2JqZWN0c19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcHJlZGVwc19DWFg9J2AkRUNITyAiJHByZWRlcHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3Bvc3RkZXBzX0NYWD0nYCRFQ0hPICIkcG9zdGRlcHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFg9J2AkRUNITyAiJGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworCitMVENDPSckTFRDQycKK0xUQ0ZMQUdTPSckTFRDRkxBR1MnCitjb21waWxlcj0nJGNvbXBpbGVyX0RFRkFVTFQnCisKKyMgQSBmdW5jdGlvbiB0aGF0IGlzIHVzZWQgd2hlbiB0aGVyZSBpcyBubyBwcmludCBidWlsdGluIG9yIHByaW50Zi4KK2Z1bmNfZmFsbGJhY2tfZWNobyAoKQoreworICBldmFsICdjYXQgPDxfTFRFQ0hPX0VPRgorXCQxCitfTFRFQ0hPX0VPRicKK30KKworIyBRdW90ZSBldmFsZWQgc3RyaW5ncy4KK2ZvciB2YXIgaW4gU0hFTEwgXAorRUNITyBcCitQQVRIX1NFUEFSQVRPUiBcCitTRUQgXAorR1JFUCBcCitFR1JFUCBcCitGR1JFUCBcCitMRCBcCitOTSBcCitMTl9TIFwKK2x0X1NQMk5MIFwKK2x0X05MMlNQIFwKK3JlbG9hZF9mbGFnIFwKK09CSkRVTVAgXAorZGVwbGlic19jaGVja19tZXRob2QgXAorZmlsZV9tYWdpY19jbWQgXAorZmlsZV9tYWdpY19nbG9iIFwKK3dhbnRfbm9jYXNlZ2xvYiBcCitETExUT09MIFwKK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIFwKK0FSIFwKK0FSX0ZMQUdTIFwKK2FyY2hpdmVyX2xpc3Rfc3BlYyBcCitTVFJJUCBcCitSQU5MSUIgXAorQ0MgXAorQ0ZMQUdTIFwKK2NvbXBpbGVyIFwKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgXAorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wgXAorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MgXAorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCBcCitubV9maWxlX2xpc3Rfc3BlYyBcCitsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyBcCitsdF9wcm9nX2NvbXBpbGVyX3BpYyBcCitsdF9wcm9nX2NvbXBpbGVyX3dsIFwKK2x0X3Byb2dfY29tcGlsZXJfc3RhdGljIFwKK2x0X2N2X3Byb2dfY29tcGlsZXJfY19vIFwKK25lZWRfbG9ja3MgXAorTUFOSUZFU1RfVE9PTCBcCitEU1lNVVRJTCBcCitOTUVESVQgXAorTElQTyBcCitPVE9PTCBcCitPVE9PTDY0IFwKK3NocmV4dF9jbWRzIFwKK2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlYyBcCit3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyBcCitjb21waWxlcl9uZWVkc19vYmplY3QgXAord2l0aF9nbnVfbGQgXAorYWxsb3dfdW5kZWZpbmVkX2ZsYWcgXAorbm9fdW5kZWZpbmVkX2ZsYWcgXAoraGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBcCitoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIFwKK2V4Y2x1ZGVfZXhwc3ltcyBcCitpbmNsdWRlX2V4cHN5bXMgXAorZmlsZV9saXN0X3NwZWMgXAordmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsgXAorbGlibmFtZV9zcGVjIFwKK2xpYnJhcnlfbmFtZXNfc3BlYyBcCitzb25hbWVfc3BlYyBcCitpbnN0YWxsX292ZXJyaWRlX21vZGUgXAorZmluaXNoX2V2YWwgXAorb2xkX3N0cmlwbGliIFwKK3N0cmlwbGliIFwKK2NvbXBpbGVyX2xpYl9zZWFyY2hfZGlycyBcCitwcmVkZXBfb2JqZWN0cyBcCitwb3N0ZGVwX29iamVjdHMgXAorcHJlZGVwcyBcCitwb3N0ZGVwcyBcCitjb21waWxlcl9saWJfc2VhcmNoX3BhdGggXAorTERfQ1hYIFwKK3JlbG9hZF9mbGFnX0NYWCBcCitjb21waWxlcl9DWFggXAorbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfQ1hYIFwKK2x0X3Byb2dfY29tcGlsZXJfcGljX0NYWCBcCitsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWCBcCitsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFggXAorbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYIFwKK2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFggXAord2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYIFwKK2NvbXBpbGVyX25lZWRzX29iamVjdF9DWFggXAord2l0aF9nbnVfbGRfQ1hYIFwKK2FsbG93X3VuZGVmaW5lZF9mbGFnX0NYWCBcCitub191bmRlZmluZWRfZmxhZ19DWFggXAoraGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFggXAoraGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFggXAorZXhjbHVkZV9leHBzeW1zX0NYWCBcCitpbmNsdWRlX2V4cHN5bXNfQ1hYIFwKK2ZpbGVfbGlzdF9zcGVjX0NYWCBcCitjb21waWxlcl9saWJfc2VhcmNoX2RpcnNfQ1hYIFwKK3ByZWRlcF9vYmplY3RzX0NYWCBcCitwb3N0ZGVwX29iamVjdHNfQ1hYIFwKK3ByZWRlcHNfQ1hYIFwKK3Bvc3RkZXBzX0NYWCBcCitjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYOyBkbworICAgIGNhc2UgXGBldmFsIFxcXFxcJEVDSE8gXFxcXCIiXFxcXFwkXCR2YXIiXFxcXCJcYCBpbgorICAgICpbXFxcXFxcXGBcXCJcXFwkXSopCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcYFxcXCRFQ0hPIFxcIlxcXCRcJHZhclxcIiB8IFxcXCRTRUQgXFwiXFxcJHNlZF9xdW90ZV9zdWJzdFxcIlxcXGBcXFxcXFwiIgorICAgICAgOzsKKyAgICAqKQorICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXCRcJHZhclxcXFxcXCIiCisgICAgICA7OworICAgIGVzYWMKK2RvbmUKKworIyBEb3VibGUtcXVvdGUgZG91YmxlLWV2YWxlZCBzdHJpbmdzLgorZm9yIHZhciBpbiByZWxvYWRfY21kcyBcCitvbGRfcG9zdGluc3RhbGxfY21kcyBcCitvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIFwKK29sZF9hcmNoaXZlX2NtZHMgXAorZXh0cmFjdF9leHBzeW1zX2NtZHMgXAorb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcyBcCitvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcyBcCithcmNoaXZlX2NtZHMgXAorYXJjaGl2ZV9leHBzeW1fY21kcyBcCittb2R1bGVfY21kcyBcCittb2R1bGVfZXhwc3ltX2NtZHMgXAorZXhwb3J0X3N5bWJvbHNfY21kcyBcCitwcmVsaW5rX2NtZHMgXAorcG9zdGxpbmtfY21kcyBcCitwb3N0aW5zdGFsbF9jbWRzIFwKK3Bvc3R1bmluc3RhbGxfY21kcyBcCitmaW5pc2hfY21kcyBcCitzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgXAorc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMgXAorcmVsb2FkX2NtZHNfQ1hYIFwKK29sZF9hcmNoaXZlX2NtZHNfQ1hYIFwKK29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNfQ1hYIFwKK29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0NYWCBcCithcmNoaXZlX2NtZHNfQ1hYIFwKK2FyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYIFwKK21vZHVsZV9jbWRzX0NYWCBcCittb2R1bGVfZXhwc3ltX2NtZHNfQ1hYIFwKK2V4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYIFwKK3ByZWxpbmtfY21kc19DWFggXAorcG9zdGxpbmtfY21kc19DWFg7IGRvCisgICAgY2FzZSBcYGV2YWwgXFxcXFwkRUNITyBcXFxcIiJcXFxcXCRcJHZhciJcXFxcIlxgIGluCisgICAgKltcXFxcXFxcYFxcIlxcXCRdKikKKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFxgXFxcJEVDSE8gXFwiXFxcJFwkdmFyXFwiIHwgXFxcJFNFRCAtZSBcXCJcXFwkZG91YmxlX3F1b3RlX3N1YnN0XFwiIC1lIFxcIlxcXCRzZWRfcXVvdGVfc3Vic3RcXCIgLWUgXFwiXFxcJGRlbGF5X3ZhcmlhYmxlX3N1YnN0XFwiXFxcYFxcXFxcXCIiCisgICAgICA7OworICAgICopCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcJFwkdmFyXFxcXFxcIiIKKyAgICAgIDs7CisgICAgZXNhYworZG9uZQorCithY19hdXhfZGlyPSckYWNfYXV4X2RpcicKK3hzaV9zaGVsbD0nJHhzaV9zaGVsbCcKK2x0X3NoZWxsX2FwcGVuZD0nJGx0X3NoZWxsX2FwcGVuZCcKKworIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHdoaWNoIGFsbG93IG91cgorIyBjb21tYW5kcyB0aHJvdWdoIHdpdGhvdXQgcmVtb3ZhbCBvZiBcIGVzY2FwZXMgSU5JVC4KK2lmIHRlc3QgLW4gIlwke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgorICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2ZpCisKKworICAgIFBBQ0tBR0U9JyRQQUNLQUdFJworICAgIFZFUlNJT049JyRWRVJTSU9OJworICAgIFRJTUVTVEFNUD0nJFRJTUVTVEFNUCcKKyAgICBSTT0nJFJNJworICAgIG9maWxlPSckb2ZpbGUnCisKKworCisKKworCisKK19BQ0VPRgorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisKKyMgSGFuZGxpbmcgb2YgYXJndW1lbnRzLgorZm9yIGFjX2NvbmZpZ190YXJnZXQgaW4gJGFjX2NvbmZpZ190YXJnZXRzCitkbworICBjYXNlICRhY19jb25maWdfdGFyZ2V0IGluCisgICAgImNvbmZpZy5oIikgQ09ORklHX0hFQURFUlM9IiRDT05GSUdfSEVBREVSUyBjb25maWcuaCIgOzsKKyAgICAiZGVwZmlsZXMiKSBDT05GSUdfQ09NTUFORFM9IiRDT05GSUdfQ09NTUFORFMgZGVwZmlsZXMiIDs7CisgICAgImxpYnRvb2wiKSBDT05GSUdfQ09NTUFORFM9IiRDT05GSUdfQ09NTUFORFMgbGlidG9vbCIgOzsKKyAgICAiZGVmYXVsdC0xIikgQ09ORklHX0NPTU1BTkRTPSIkQ09ORklHX0NPTU1BTkRTIGRlZmF1bHQtMSIgOzsKKyAgICAiTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgTWFrZWZpbGUiIDs7CisgICAgImF2YWhpLWNvbW1vbi9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBhdmFoaS1jb21tb24vTWFrZWZpbGUiIDs7CisgICAgImF2YWhpLWNvcmUvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgYXZhaGktY29yZS9NYWtlZmlsZSIgOzsKKyAgICAiYXZhaGktZ2xpYi9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBhdmFoaS1nbGliL01ha2VmaWxlIiA7OworICAgICJhdmFoaS1nb2JqZWN0L01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGF2YWhpLWdvYmplY3QvTWFrZWZpbGUiIDs7CisgICAgImF2YWhpLXF0L01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGF2YWhpLXF0L01ha2VmaWxlIiA7OworICAgICJhdmFoaS1kYWVtb24vTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgYXZhaGktZGFlbW9uL01ha2VmaWxlIiA7OworICAgICJhdmFoaS1kYWVtb24vYXZhaGktZGJ1cy5jb25mIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGF2YWhpLWRhZW1vbi9hdmFoaS1kYnVzLmNvbmYiIDs7CisgICAgImF2YWhpLWRpc2NvdmVyLXN0YW5kYWxvbmUvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgYXZhaGktZGlzY292ZXItc3RhbmRhbG9uZS9NYWtlZmlsZSIgOzsKKyAgICAiYXZhaGktY2xpZW50L01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGF2YWhpLWNsaWVudC9NYWtlZmlsZSIgOzsKKyAgICAiaW5pdHNjcmlwdC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBpbml0c2NyaXB0L01ha2VmaWxlIiA7OworICAgICJpbml0c2NyaXB0L2RlYmlhbi9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBpbml0c2NyaXB0L2RlYmlhbi9NYWtlZmlsZSIgOzsKKyAgICAiaW5pdHNjcmlwdC9nZW50b28vTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgaW5pdHNjcmlwdC9nZW50b28vTWFrZWZpbGUiIDs7CisgICAgImluaXRzY3JpcHQvYXJjaGxpbnV4L01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGluaXRzY3JpcHQvYXJjaGxpbnV4L01ha2VmaWxlIiA7OworICAgICJpbml0c2NyaXB0L3N1c2UvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgaW5pdHNjcmlwdC9zdXNlL01ha2VmaWxlIiA7OworICAgICJpbml0c2NyaXB0L2ZlZG9yYS9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBpbml0c2NyaXB0L2ZlZG9yYS9NYWtlZmlsZSIgOzsKKyAgICAiaW5pdHNjcmlwdC9sZnMvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgaW5pdHNjcmlwdC9sZnMvTWFrZWZpbGUiIDs7CisgICAgImluaXRzY3JpcHQvbWFuZHJpdmEvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgaW5pdHNjcmlwdC9tYW5kcml2YS9NYWtlZmlsZSIgOzsKKyAgICAiaW5pdHNjcmlwdC9kYXJ3aW4vTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgaW5pdHNjcmlwdC9kYXJ3aW4vTWFrZWZpbGUiIDs7CisgICAgImluaXRzY3JpcHQvZnJlZWJzZC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBpbml0c2NyaXB0L2ZyZWVic2QvTWFrZWZpbGUiIDs7CisgICAgImluaXRzY3JpcHQvc2xhY2t3YXJlL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGluaXRzY3JpcHQvc2xhY2t3YXJlL01ha2VmaWxlIiA7OworICAgICJhdmFoaS1kbnNjb25mZC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBhdmFoaS1kbnNjb25mZC9NYWtlZmlsZSIgOzsKKyAgICAiYXZhaGktdXRpbHMvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgYXZhaGktdXRpbHMvTWFrZWZpbGUiIDs7CisgICAgImF2YWhpLXB5dGhvbi9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBhdmFoaS1weXRob24vTWFrZWZpbGUiIDs7CisgICAgImF2YWhpLXB5dGhvbi9hdmFoaS9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBhdmFoaS1weXRob24vYXZhaGkvTWFrZWZpbGUiIDs7CisgICAgImF2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBhdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvTWFrZWZpbGUiIDs7CisgICAgImV4YW1wbGVzL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGV4YW1wbGVzL01ha2VmaWxlIiA7OworICAgICJjb21tb24vTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgY29tbW9uL01ha2VmaWxlIiA7OworICAgICJtYW4vTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgbWFuL01ha2VmaWxlIiA7OworICAgICJ0ZXN0cy9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0ZXN0cy9NYWtlZmlsZSIgOzsKKyAgICAic2VydmljZS10eXBlLWRhdGFiYXNlL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHNlcnZpY2UtdHlwZS1kYXRhYmFzZS9NYWtlZmlsZSIgOzsKKyAgICAiYXZhaGktc2hhcnAvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgYXZhaGktc2hhcnAvTWFrZWZpbGUiIDs7CisgICAgImF2YWhpLXVpLXNoYXJwL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGF2YWhpLXVpLXNoYXJwL01ha2VmaWxlIiA7OworICAgICJhdmFoaS1jb21wYXQtbGliZG5zX3NkL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGF2YWhpLWNvbXBhdC1saWJkbnNfc2QvTWFrZWZpbGUiIDs7CisgICAgImF2YWhpLWNvbXBhdC1ob3dsL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGF2YWhpLWNvbXBhdC1ob3dsL01ha2VmaWxlIiA7OworICAgICJhdmFoaS1jb21wYXQtaG93bC9zYW1wbGVzL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGF2YWhpLWNvbXBhdC1ob3dsL3NhbXBsZXMvTWFrZWZpbGUiIDs7CisgICAgImF2YWhpLWF1dG9pcGQvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgYXZhaGktYXV0b2lwZC9NYWtlZmlsZSIgOzsKKyAgICAiYXZhaGktdWkvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgYXZhaGktdWkvTWFrZWZpbGUiIDs7CisgICAgInBvL01ha2VmaWxlLmluIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHBvL01ha2VmaWxlLmluIiA7OworICAgICJwby9zdGFtcC1pdCIpIENPTkZJR19DT01NQU5EUz0iJENPTkZJR19DT01NQU5EUyBwby9zdGFtcC1pdCIgOzsKKworICAqKSBhc19mbl9lcnJvciAkPyAiaW52YWxpZCBhcmd1bWVudDogXGAkYWNfY29uZmlnX3RhcmdldCciICIkTElORU5PIiA1OzsKKyAgZXNhYworZG9uZQorCisKKyMgSWYgdGhlIHVzZXIgZGlkIG5vdCB1c2UgdGhlIGFyZ3VtZW50cyB0byBzcGVjaWZ5IHRoZSBpdGVtcyB0byBpbnN0YW50aWF0ZSwKKyMgdGhlbiB0aGUgZW52dmFyIGludGVyZmFjZSBpcyB1c2VkLiAgU2V0IG9ubHkgdGhvc2UgdGhhdCBhcmUgbm90LgorIyBXZSB1c2UgdGhlIGxvbmcgZm9ybSBmb3IgdGhlIGRlZmF1bHQgYXNzaWdubWVudCBiZWNhdXNlIG9mIGFuIGV4dHJlbWVseQorIyBiaXphcnJlIGJ1ZyBvbiBTdW5PUyA0LjEuMy4KK2lmICRhY19uZWVkX2RlZmF1bHRzOyB0aGVuCisgIHRlc3QgIiR7Q09ORklHX0ZJTEVTK3NldH0iID0gc2V0IHx8IENPTkZJR19GSUxFUz0kY29uZmlnX2ZpbGVzCisgIHRlc3QgIiR7Q09ORklHX0hFQURFUlMrc2V0fSIgPSBzZXQgfHwgQ09ORklHX0hFQURFUlM9JGNvbmZpZ19oZWFkZXJzCisgIHRlc3QgIiR7Q09ORklHX0NPTU1BTkRTK3NldH0iID0gc2V0IHx8IENPTkZJR19DT01NQU5EUz0kY29uZmlnX2NvbW1hbmRzCitmaQorCisjIEhhdmUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGZvciBjb252ZW5pZW5jZS4gIE1ha2UgaXQgaW4gdGhlIGJ1aWxkIHRyZWUKKyMgc2ltcGx5IGJlY2F1c2UgdGhlcmUgaXMgbm8gcmVhc29uIGFnYWluc3QgaGF2aW5nIGl0IGhlcmUsIGFuZCBpbiBhZGRpdGlvbiwKKyMgY3JlYXRpbmcgYW5kIG1vdmluZyBmaWxlcyBmcm9tIC90bXAgY2FuIHNvbWV0aW1lcyBjYXVzZSBwcm9ibGVtcy4KKyMgSG9vayBmb3IgaXRzIHJlbW92YWwgdW5sZXNzIGRlYnVnZ2luZy4KKyMgTm90ZSB0aGF0IHRoZXJlIGlzIGEgc21hbGwgd2luZG93IGluIHdoaWNoIHRoZSBkaXJlY3Rvcnkgd2lsbCBub3QgYmUgY2xlYW5lZDoKKyMgYWZ0ZXIgaXRzIGNyZWF0aW9uIGJ1dCBiZWZvcmUgaXRzIG5hbWUgaGFzIGJlZW4gYXNzaWduZWQgdG8gYCR0bXAnLgorJGRlYnVnIHx8Cit7CisgIHRtcD0gYWNfdG1wPQorICB0cmFwICdleGl0X3N0YXR1cz0kPworICA6ICIke2FjX3RtcDo9JHRtcH0iCisgIHsgdGVzdCAhIC1kICIkYWNfdG1wIiB8fCBybSAtZnIgIiRhY190bXAiOyB9ICYmIGV4aXQgJGV4aXRfc3RhdHVzCisnIDAKKyAgdHJhcCAnYXNfZm5fZXhpdCAxJyAxIDIgMTMgMTUKK30KKyMgQ3JlYXRlIGEgKHNlY3VyZSkgdG1wIGRpcmVjdG9yeSBmb3IgdG1wIGZpbGVzLgorCit7CisgIHRtcD1gKHVtYXNrIDA3NyAmJiBta3RlbXAgLWQgIi4vY29uZlhYWFhYWCIpIDI+L2Rldi9udWxsYCAmJgorICB0ZXN0IC1kICIkdG1wIgorfSAgfHwKK3sKKyAgdG1wPS4vY29uZiQkLSRSQU5ET00KKyAgKHVtYXNrIDA3NyAmJiBta2RpciAiJHRtcCIpCit9IHx8IGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBpbiAuIiAiJExJTkVOTyIgNQorYWNfdG1wPSR0bXAKKworIyBTZXQgdXAgdGhlIHNjcmlwdHMgZm9yIENPTkZJR19GSUxFUyBzZWN0aW9uLgorIyBObyBuZWVkIHRvIGdlbmVyYXRlIHRoZW0gaWYgdGhlcmUgYXJlIG5vIENPTkZJR19GSUxFUy4KKyMgVGhpcyBoYXBwZW5zIGZvciBpbnN0YW5jZSB3aXRoIGAuL2NvbmZpZy5zdGF0dXMgY29uZmlnLmgnLgoraWYgdGVzdCAtbiAiJENPTkZJR19GSUxFUyI7IHRoZW4KKworCithY19jcj1gZWNobyBYIHwgdHIgWCAnXDAxNSdgCisjIE9uIGN5Z3dpbiwgYmFzaCBjYW4gZWF0IFxyIGluc2lkZSBgYCBpZiB0aGUgdXNlciByZXF1ZXN0ZWQgaWduY3IuCisjIEJ1dCB3ZSBrbm93IG9mIG5vIG90aGVyIHNoZWxsIHdoZXJlIGFjX2NyIHdvdWxkIGJlIGVtcHR5IGF0IHRoaXMKKyMgcG9pbnQsIHNvIHdlIGNhbiB1c2UgYSBiYXNoaXNtIGFzIGEgZmFsbGJhY2suCitpZiB0ZXN0ICJ4JGFjX2NyIiA9IHg7IHRoZW4KKyAgZXZhbCBhY19jcj1cJFwnXFxyXCcKK2ZpCithY19jc19hd2tfY3I9YCRBV0sgJ0JFR0lOIHsgcHJpbnQgImFccmIiIH0nIDwvZGV2L251bGwgMj4vZGV2L251bGxgCitpZiB0ZXN0ICIkYWNfY3NfYXdrX2NyIiA9ICJhJHthY19jcn1iIjsgdGhlbgorICBhY19jc19hd2tfY3I9J1xccicKK2Vsc2UKKyAgYWNfY3NfYXdrX2NyPSRhY19jcgorZmkKKworZWNobyAnQkVHSU4geycgPiIkYWNfdG1wL3N1YnMxLmF3ayIgJiYKK19BQ0VPRgorCisKK3sKKyAgZWNobyAiY2F0ID5jb25mJCRzdWJzLmF3ayA8PF9BQ0VPRiIgJiYKKyAgZWNobyAiJGFjX3N1YnN0X3ZhcnMiIHwgc2VkICdzLy4qLyYhJCYkYWNfZGVsaW0vJyAmJgorICBlY2hvICJfQUNFT0YiCit9ID5jb25mJCRzdWJzLnNoIHx8CisgIGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgbWFrZSAkQ09ORklHX1NUQVRVUyIgIiRMSU5FTk8iIDUKK2FjX2RlbGltX251bT1gZWNobyAiJGFjX3N1YnN0X3ZhcnMiIHwgZ3JlcCAtYyAnXidgCithY19kZWxpbT0nJSFfISMgJworZm9yIGFjX2xhc3RfdHJ5IGluIGZhbHNlIGZhbHNlIGZhbHNlIGZhbHNlIGZhbHNlIDo7IGRvCisgIC4gLi9jb25mJCRzdWJzLnNoIHx8CisgICAgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBtYWtlICRDT05GSUdfU1RBVFVTIiAiJExJTkVOTyIgNQorCisgIGFjX2RlbGltX249YHNlZCAtbiAicy8uKiRhY19kZWxpbVwkL1gvcCIgY29uZiQkc3Vicy5hd2sgfCBncmVwIC1jIFhgCisgIGlmIHRlc3QgJGFjX2RlbGltX24gPSAkYWNfZGVsaW1fbnVtOyB0aGVuCisgICAgYnJlYWsKKyAgZWxpZiAkYWNfbGFzdF90cnk7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiICIkTElORU5PIiA1CisgIGVsc2UKKyAgICBhY19kZWxpbT0iJGFjX2RlbGltISRhY19kZWxpbSBfJGFjX2RlbGltISEgIgorICBmaQorZG9uZQorcm0gLWYgY29uZiQkc3Vicy5zaAorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2NhdCA+PiJcJGFjX3RtcC9zdWJzMS5hd2siIDw8XFxfQUNBV0sgJiYKK19BQ0VPRgorc2VkIC1uICcKK2gKK3MvXi9TWyIvOyBzLyEuKi8iXT0vCitwCitnCitzL15bXiFdKiEvLworOnJlcGwKK3QgcmVwbAorcy8nIiRhY19kZWxpbSInJC8vCit0IGRlbGltCis6bmwKK2gKK3MvXCguXHsxNDhcfVwpLi4qL1wxLwordCBtb3JlMQorcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvXFxuIlxcLworcAorbgorYiByZXBsCis6bW9yZTEKK3MvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kLyJcXC8KK3AKK2cKK3MvLlx7MTQ4XH0vLwordCBubAorOmRlbGltCitoCitzL1woLlx7MTQ4XH1cKS4uKi9cMS8KK3QgbW9yZTIKK3MvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kLyIvCitwCitiCis6bW9yZTIKK3MvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kLyJcXC8KK3AKK2cKK3MvLlx7MTQ4XH0vLwordCBkZWxpbQorJyA8Y29uZiQkc3Vicy5hd2sgfCBzZWQgJworL15bXiIiXS97CisgIE4KKyAgcy9cbi8vCit9CisnID4+JENPTkZJR19TVEFUVVMgfHwgYWNfd3JpdGVfZmFpbD0xCitybSAtZiBjb25mJCRzdWJzLmF3aworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCitfQUNBV0sKK2NhdCA+PiJcJGFjX3RtcC9zdWJzMS5hd2siIDw8X0FDQVdLICYmCisgIGZvciAoa2V5IGluIFMpIFNfaXNfc2V0W2tleV0gPSAxCisgIEZTID0gIgciCisKK30KK3sKKyAgbGluZSA9ICQgMAorICBuZmllbGRzID0gc3BsaXQobGluZSwgZmllbGQsICJAIikKKyAgc3Vic3RlZCA9IDAKKyAgbGVuID0gbGVuZ3RoKGZpZWxkWzFdKQorICBmb3IgKGkgPSAyOyBpIDwgbmZpZWxkczsgaSsrKSB7CisgICAga2V5ID0gZmllbGRbaV0KKyAgICBrZXlsZW4gPSBsZW5ndGgoa2V5KQorICAgIGlmIChTX2lzX3NldFtrZXldKSB7CisgICAgICB2YWx1ZSA9IFNba2V5XQorICAgICAgbGluZSA9IHN1YnN0cihsaW5lLCAxLCBsZW4pICIiIHZhbHVlICIiIHN1YnN0cihsaW5lLCBsZW4gKyBrZXlsZW4gKyAzKQorICAgICAgbGVuICs9IGxlbmd0aCh2YWx1ZSkgKyBsZW5ndGgoZmllbGRbKytpXSkKKyAgICAgIHN1YnN0ZWQgPSAxCisgICAgfSBlbHNlCisgICAgICBsZW4gKz0gMSArIGtleWxlbgorICB9CisKKyAgcHJpbnQgbGluZQorfQorCitfQUNBV0sKK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQoraWYgc2VkICJzLyRhY19jci8vIiA8IC9kZXYvbnVsbCA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIHNlZCAicy8kYWNfY3JcJC8vOyBzLyRhY19jci8kYWNfY3NfYXdrX2NyL2ciCitlbHNlCisgIGNhdAorZmkgPCAiJGFjX3RtcC9zdWJzMS5hd2siID4gIiRhY190bXAvc3Vicy5hd2siIFwKKyAgfHwgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBzZXR1cCBjb25maWcgZmlsZXMgbWFjaGluZXJ5IiAiJExJTkVOTyIgNQorX0FDRU9GCisKKyMgVlBBVEggbWF5IGNhdXNlIHRyb3VibGUgd2l0aCBzb21lIG1ha2VzLCBzbyB3ZSByZW1vdmUgc29sZSAkKHNyY2RpciksCisjICR7c3JjZGlyfSBhbmQgQHNyY2RpckAgZW50cmllcyBmcm9tIFZQQVRIIGlmIHNyY2RpciBpcyAiLiIsIHN0cmlwIGxlYWRpbmcgYW5kCisjIHRyYWlsaW5nIGNvbG9ucyBhbmQgdGhlbiByZW1vdmUgdGhlIHdob2xlIGxpbmUgaWYgVlBBVEggYmVjb21lcyBlbXB0eQorIyAoYWN0dWFsbHkgd2UgbGVhdmUgYW4gZW1wdHkgbGluZSB0byBwcmVzZXJ2ZSBsaW5lIG51bWJlcnMpLgoraWYgdGVzdCAieCRzcmNkaXIiID0geC47IHRoZW4KKyAgYWNfdnBzdWI9Jy9eWwkgXSpWUEFUSFsJIF0qPVsJIF0qL3sKK2gKK3MvLy8KK3MvXi86Lworcy9bCSBdKiQvOi8KK3MvOlwkKHNyY2Rpcik6LzovZworcy86XCR7c3JjZGlyfTovOi9nCitzLzpAc3JjZGlyQDovOi9nCitzL146Ki8vCitzLzoqJC8vCit4CitzL1woPVsJIF0qXCkuKi9cMS8KK0cKK3MvXG4vLworcy9eW149XSo9WwkgXSokLy8KK30nCitmaQorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCitmaSAjIHRlc3QgLW4gIiRDT05GSUdfRklMRVMiCisKKyMgU2V0IHVwIHRoZSBzY3JpcHRzIGZvciBDT05GSUdfSEVBREVSUyBzZWN0aW9uLgorIyBObyBuZWVkIHRvIGdlbmVyYXRlIHRoZW0gaWYgdGhlcmUgYXJlIG5vIENPTkZJR19IRUFERVJTLgorIyBUaGlzIGhhcHBlbnMgZm9yIGluc3RhbmNlIHdpdGggYC4vY29uZmlnLnN0YXR1cyBNYWtlZmlsZScuCitpZiB0ZXN0IC1uICIkQ09ORklHX0hFQURFUlMiOyB0aGVuCitjYXQgPiIkYWNfdG1wL2RlZmluZXMuYXdrIiA8PFxfQUNBV0sgfHwKK0JFR0lOIHsKK19BQ0VPRgorCisjIFRyYW5zZm9ybSBjb25mZGVmcy5oIGludG8gYW4gYXdrIHNjcmlwdCBgZGVmaW5lcy5hd2snLCBlbWJlZGRlZCBhcworIyBoZXJlLWRvY3VtZW50IGluIGNvbmZpZy5zdGF0dXMsIHRoYXQgc3Vic3RpdHV0ZXMgdGhlIHByb3BlciB2YWx1ZXMgaW50bworIyBjb25maWcuaC5pbiB0byBwcm9kdWNlIGNvbmZpZy5oLgorCisjIENyZWF0ZSBhIGRlbGltaXRlciBzdHJpbmcgdGhhdCBkb2VzIG5vdCBleGlzdCBpbiBjb25mZGVmcy5oLCB0byBlYXNlCisjIGhhbmRsaW5nIG9mIGxvbmcgbGluZXMuCithY19kZWxpbT0nJSFfISMgJworZm9yIGFjX2xhc3RfdHJ5IGluIGZhbHNlIGZhbHNlIDo7IGRvCisgIGFjX3R0PWBzZWQgLW4gIi8kYWNfZGVsaW0vcCIgY29uZmRlZnMuaGAKKyAgaWYgdGVzdCAteiAiJGFjX3R0IjsgdGhlbgorICAgIGJyZWFrCisgIGVsaWYgJGFjX2xhc3RfdHJ5OyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBtYWtlICRDT05GSUdfSEVBREVSUyIgIiRMSU5FTk8iIDUKKyAgZWxzZQorICAgIGFjX2RlbGltPSIkYWNfZGVsaW0hJGFjX2RlbGltIF8kYWNfZGVsaW0hISAiCisgIGZpCitkb25lCisKKyMgRm9yIHRoZSBhd2sgc2NyaXB0LCBEIGlzIGFuIGFycmF5IG9mIG1hY3JvIHZhbHVlcyBrZXllZCBieSBuYW1lLAorIyBsaWtld2lzZSBQIGNvbnRhaW5zIG1hY3JvIHBhcmFtZXRlcnMgaWYgYW55LiAgUHJlc2VydmUgYmFja3NsYXNoCisjIG5ld2xpbmUgc2VxdWVuY2VzLgorCithY193b3JkX3JlPVtfJGFzX2NyX0xldHRlcnNdW18kYXNfY3JfYWxudW1dKgorc2VkIC1uICcKK3MvLlx7MTQ4XH0vJiciJGFjX2RlbGltIicvZwordCByc2V0Cis6cnNldAorcy9eWwkgXSojWwkgXSpkZWZpbmVbCSBdWwkgXSovIC8KK3QgZGVmCitkCis6ZGVmCitzL1xcJC8vCit0IGJzbmwKK3MvWyJcXF0vXFwmL2cKK3MvXiBcKCciJGFjX3dvcmRfcmUiJ1wpXCgoW14oKV0qKVwpWwkgXSpcKC4qXCkvUFsiXDEiXT0iXDIiXAorRFsiXDEiXT0iIFwzIi9wCitzL14gXCgnIiRhY193b3JkX3JlIidcKVsJIF0qXCguKlwpL0RbIlwxIl09IiBcMiIvcAorZAorOmJzbmwKK3MvWyJcXF0vXFwmL2cKK3MvXiBcKCciJGFjX3dvcmRfcmUiJ1wpXCgoW14oKV0qKVwpWwkgXSpcKC4qXCkvUFsiXDEiXT0iXDIiXAorRFsiXDEiXT0iIFwzXFxcXFxcbiJcXC9wCit0IGNvbnQKK3MvXiBcKCciJGFjX3dvcmRfcmUiJ1wpWwkgXSpcKC4qXCkvRFsiXDEiXT0iIFwyXFxcXFxcbiJcXC9wCit0IGNvbnQKK2QKKzpjb250CituCitzLy5cezE0OFx9LyYnIiRhY19kZWxpbSInL2cKK3QgY2xlYXIKKzpjbGVhcgorcy9cXCQvLwordCBic25sYworcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvIi9wCitkCis6YnNubGMKK3MvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kL1xcXFxcXG4iXFwvcAorYiBjb250CisnIDxjb25mZGVmcy5oIHwgc2VkICcKK3MvJyIkYWNfZGVsaW0iJy8iXFxcCisiL2cnID4+JENPTkZJR19TVEFUVVMgfHwgYWNfd3JpdGVfZmFpbD0xCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorICBmb3IgKGtleSBpbiBEKSBEX2lzX3NldFtrZXldID0gMQorICBGUyA9ICIHIgorfQorL15bXHQgXSojW1x0IF0qKGRlZmluZXx1bmRlZilbXHQgXSskYWNfd29yZF9yZShbXHQgKF18XCQpLyB7CisgIGxpbmUgPSBcJCAwCisgIHNwbGl0KGxpbmUsIGFyZywgIiAiKQorICBpZiAoYXJnWzFdID09ICIjIikgeworICAgIGRlZnVuZGVmID0gYXJnWzJdCisgICAgbWFjMSA9IGFyZ1szXQorICB9IGVsc2UgeworICAgIGRlZnVuZGVmID0gc3Vic3RyKGFyZ1sxXSwgMikKKyAgICBtYWMxID0gYXJnWzJdCisgIH0KKyAgc3BsaXQobWFjMSwgbWFjMiwgIigiKSAjKQorICBtYWNybyA9IG1hYzJbMV0KKyAgcHJlZml4ID0gc3Vic3RyKGxpbmUsIDEsIGluZGV4KGxpbmUsIGRlZnVuZGVmKSAtIDEpCisgIGlmIChEX2lzX3NldFttYWNyb10pIHsKKyAgICAjIFByZXNlcnZlIHRoZSB3aGl0ZSBzcGFjZSBzdXJyb3VuZGluZyB0aGUgIiMiLgorICAgIHByaW50IHByZWZpeCAiZGVmaW5lIiwgbWFjcm8gUFttYWNyb10gRFttYWNyb10KKyAgICBuZXh0CisgIH0gZWxzZSB7CisgICAgIyBSZXBsYWNlICN1bmRlZiB3aXRoIGNvbW1lbnRzLiAgVGhpcyBpcyBuZWNlc3NhcnksIGZvciBleGFtcGxlLAorICAgICMgaW4gdGhlIGNhc2Ugb2YgX1BPU0lYX1NPVVJDRSwgd2hpY2ggaXMgcHJlZGVmaW5lZCBhbmQgcmVxdWlyZWQKKyAgICAjIG9uIHNvbWUgc3lzdGVtcyB3aGVyZSBjb25maWd1cmUgd2lsbCBub3QgZGVjaWRlIHRvIGRlZmluZSBpdC4KKyAgICBpZiAoZGVmdW5kZWYgPT0gInVuZGVmIikgeworICAgICAgcHJpbnQgIi8qIiwgcHJlZml4IGRlZnVuZGVmLCBtYWNybywgIiovIgorICAgICAgbmV4dAorICAgIH0KKyAgfQorfQoreyBwcmludCB9CitfQUNBV0sKK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorICBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IHNldHVwIGNvbmZpZyBoZWFkZXJzIG1hY2hpbmVyeSIgIiRMSU5FTk8iIDUKK2ZpICMgdGVzdCAtbiAiJENPTkZJR19IRUFERVJTIgorCisKK2V2YWwgc2V0IFggIiAgOkYgJENPTkZJR19GSUxFUyAgOkggJENPTkZJR19IRUFERVJTICAgIDpDICRDT05GSUdfQ09NTUFORFMiCitzaGlmdAorZm9yIGFjX3RhZworZG8KKyAgY2FzZSAkYWNfdGFnIGluCisgIDpbRkhMQ10pIGFjX21vZGU9JGFjX3RhZzsgY29udGludWU7OworICBlc2FjCisgIGNhc2UgJGFjX21vZGUkYWNfdGFnIGluCisgIDpbRkhMXSo6Kik7OworICA6TCogfCA6Qyo6KikgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgdGFnIFxgJGFjX3RhZyciICIkTElORU5PIiA1OzsKKyAgOltGSF0tKSBhY190YWc9LTotOzsKKyAgOltGSF0qKSBhY190YWc9JGFjX3RhZzokYWNfdGFnLmluOzsKKyAgZXNhYworICBhY19zYXZlX0lGUz0kSUZTCisgIElGUz06CisgIHNldCB4ICRhY190YWcKKyAgSUZTPSRhY19zYXZlX0lGUworICBzaGlmdAorICBhY19maWxlPSQxCisgIHNoaWZ0CisKKyAgY2FzZSAkYWNfbW9kZSBpbgorICA6TCkgYWNfc291cmNlPSQxOzsKKyAgOltGSF0pCisgICAgYWNfZmlsZV9pbnB1dHM9CisgICAgZm9yIGFjX2YKKyAgICBkbworICAgICAgY2FzZSAkYWNfZiBpbgorICAgICAgLSkgYWNfZj0iJGFjX3RtcC9zdGRpbiI7OworICAgICAgKikgIyBMb29rIGZvciB0aGUgZmlsZSBmaXJzdCBpbiB0aGUgYnVpbGQgdHJlZSwgdGhlbiBpbiB0aGUgc291cmNlIHRyZWUKKwkgIyAoaWYgdGhlIHBhdGggaXMgbm90IGFic29sdXRlKS4gIFRoZSBhYnNvbHV0ZSBwYXRoIGNhbm5vdCBiZSBET1Mtc3R5bGUsCisJICMgYmVjYXVzZSAkYWNfZiBjYW5ub3QgY29udGFpbiBgOicuCisJIHRlc3QgLWYgIiRhY19mIiB8fAorCSAgIGNhc2UgJGFjX2YgaW4KKwkgICBbXFwvJF0qKSBmYWxzZTs7CisJICAgKikgdGVzdCAtZiAiJHNyY2Rpci8kYWNfZiIgJiYgYWNfZj0iJHNyY2Rpci8kYWNfZiI7OworCSAgIGVzYWMgfHwKKwkgICBhc19mbl9lcnJvciAxICJjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiBcYCRhY19mJyIgIiRMSU5FTk8iIDU7OworICAgICAgZXNhYworICAgICAgY2FzZSAkYWNfZiBpbiAqXCcqKSBhY19mPWAkYXNfZWNobyAiJGFjX2YiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsgZXNhYworICAgICAgYXNfZm5fYXBwZW5kIGFjX2ZpbGVfaW5wdXRzICIgJyRhY19mJyIKKyAgICBkb25lCisKKyAgICAjIExldCdzIHN0aWxsIHByZXRlbmQgaXQgaXMgYGNvbmZpZ3VyZScgd2hpY2ggaW5zdGFudGlhdGVzIChpLmUuLCBkb24ndAorICAgICMgdXNlICRhc19tZSksIHBlb3BsZSB3b3VsZCBiZSBzdXJwcmlzZWQgdG8gcmVhZDoKKyAgICAjICAgIC8qIGNvbmZpZy5oLiAgR2VuZXJhdGVkIGJ5IGNvbmZpZy5zdGF0dXMuICAqLworICAgIGNvbmZpZ3VyZV9pbnB1dD0nR2VuZXJhdGVkIGZyb20gJ2AKKwkgICRhc19lY2hvICIkKiIgfCBzZWQgJ3N8XlteOl0qL3x8O3N8OlteOl0qL3wsIHxnJworCWAnIGJ5IGNvbmZpZ3VyZS4nCisgICAgaWYgdGVzdCB4IiRhY19maWxlIiAhPSB4LTsgdGhlbgorICAgICAgY29uZmlndXJlX2lucHV0PSIkYWNfZmlsZS4gICRjb25maWd1cmVfaW5wdXQiCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNyZWF0aW5nICRhY19maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19maWxlIiA+JjY7fQorICAgIGZpCisgICAgIyBOZXV0cmFsaXplIHNwZWNpYWwgY2hhcmFjdGVycyBpbnRlcnByZXRlZCBieSBzZWQgaW4gcmVwbGFjZW1lbnQgc3RyaW5ncy4KKyAgICBjYXNlICRjb25maWd1cmVfaW5wdXQgaW4gIygKKyAgICAqXCYqIHwgKlx8KiB8ICpcXCogKQorICAgICAgIGFjX3NlZF9jb25mX2lucHV0PWAkYXNfZWNobyAiJGNvbmZpZ3VyZV9pbnB1dCIgfAorICAgICAgIHNlZCAncy9bXFxcXCZ8XS9cXFxcJi9nJ2A7OyAjKAorICAgICopIGFjX3NlZF9jb25mX2lucHV0PSRjb25maWd1cmVfaW5wdXQ7OworICAgIGVzYWMKKworICAgIGNhc2UgJGFjX3RhZyBpbgorICAgICo6LToqIHwgKjotKSBjYXQgPiIkYWNfdG1wL3N0ZGluIiBcCisgICAgICB8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgZXNhYworCisgIGFjX2Rpcj1gJGFzX2Rpcm5hbWUgLS0gIiRhY19maWxlIiB8fAorJGFzX2V4cHIgWCIkYWNfZmlsZSIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkYWNfZmlsZSIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYIiRhY19maWxlIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2AKKyAgYXNfZGlyPSIkYWNfZGlyIjsgYXNfZm5fbWtkaXJfcAorICBhY19idWlsZGRpcj0uCisKK2Nhc2UgIiRhY19kaXIiIGluCisuKSBhY19kaXJfc3VmZml4PSBhY190b3BfYnVpbGRkaXJfc3ViPS4gYWNfdG9wX2J1aWxkX3ByZWZpeD0gOzsKKyopCisgIGFjX2Rpcl9zdWZmaXg9L2AkYXNfZWNobyAiJGFjX2RpciIgfCBzZWQgJ3N8XlwuW1xcL118fCdgCisgICMgQSAiLi4iIGZvciBlYWNoIGRpcmVjdG9yeSBpbiAkYWNfZGlyX3N1ZmZpeC4KKyAgYWNfdG9wX2J1aWxkZGlyX3N1Yj1gJGFzX2VjaG8gIiRhY19kaXJfc3VmZml4IiB8IHNlZCAnc3wvW15cXC9dKnwvLi58ZztzfC98fCdgCisgIGNhc2UgJGFjX3RvcF9idWlsZGRpcl9zdWIgaW4KKyAgIiIpIGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OworICAqKSAgYWNfdG9wX2J1aWxkX3ByZWZpeD0kYWNfdG9wX2J1aWxkZGlyX3N1Yi8gOzsKKyAgZXNhYyA7OworZXNhYworYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfcHdkCithY19hYnNfYnVpbGRkaXI9JGFjX3B3ZCRhY19kaXJfc3VmZml4CisjIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5OgorYWNfdG9wX2J1aWxkZGlyPSRhY190b3BfYnVpbGRfcHJlZml4CisKK2Nhc2UgJHNyY2RpciBpbgorICAuKSAgIyBXZSBhcmUgYnVpbGRpbmcgaW4gcGxhY2UuCisgICAgYWNfc3JjZGlyPS4KKyAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRkaXJfc3ViCisgICAgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3B3ZCA7OworICBbXFwvXSogfCA/OltcXC9dKiApICAjIEFic29sdXRlIG5hbWUuCisgICAgYWNfc3JjZGlyPSRzcmNkaXIkYWNfZGlyX3N1ZmZpeDsKKyAgICBhY190b3Bfc3JjZGlyPSRzcmNkaXIKKyAgICBhY19hYnNfdG9wX3NyY2Rpcj0kc3JjZGlyIDs7CisgICopICMgUmVsYXRpdmUgbmFtZS4KKyAgICBhY19zcmNkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgkc3JjZGlyJGFjX2Rpcl9zdWZmaXgKKyAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRfcHJlZml4JHNyY2RpcgorICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QvJHNyY2RpciA7OworZXNhYworYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX3RvcF9zcmNkaXIkYWNfZGlyX3N1ZmZpeAorCisKKyAgY2FzZSAkYWNfbW9kZSBpbgorICA6RikKKyAgIworICAjIENPTkZJR19GSUxFCisgICMKKworICBjYXNlICRJTlNUQUxMIGluCisgIFtcXC8kXSogfCA/OltcXC9dKiApIGFjX0lOU1RBTEw9JElOU1RBTEwgOzsKKyAgKikgYWNfSU5TVEFMTD0kYWNfdG9wX2J1aWxkX3ByZWZpeCRJTlNUQUxMIDs7CisgIGVzYWMKKyAgYWNfTUtESVJfUD0kTUtESVJfUAorICBjYXNlICRNS0RJUl9QIGluCisgIFtcXC8kXSogfCA/OltcXC9dKiApIDs7CisgICovKikgYWNfTUtESVJfUD0kYWNfdG9wX2J1aWxkX3ByZWZpeCRNS0RJUl9QIDs7CisgIGVzYWMKK19BQ0VPRgorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisjIElmIHRoZSB0ZW1wbGF0ZSBkb2VzIG5vdCBrbm93IGFib3V0IGRhdGFyb290ZGlyLCBleHBhbmQgaXQuCisjIEZJWE1FOiBUaGlzIGhhY2sgc2hvdWxkIGJlIHJlbW92ZWQgYSBmZXcgeWVhcnMgYWZ0ZXIgMi42MC4KK2FjX2RhdGFyb290ZGlyX2hhY2s9OyBhY19kYXRhcm9vdGRpcl9zZWVuPQorYWNfc2VkX2RhdGFyb290PScKKy9kYXRhcm9vdGRpci8geworICBwCisgIHEKK30KKy9AZGF0YWRpckAvcAorL0Bkb2NkaXJAL3AKKy9AaW5mb2RpckAvcAorL0Bsb2NhbGVkaXJAL3AKKy9AbWFuZGlyQC9wJworY2FzZSBgZXZhbCAic2VkIC1uIFwiXCRhY19zZWRfZGF0YXJvb3RcIiAkYWNfZmlsZV9pbnB1dHMiYCBpbgorKmRhdGFyb290ZGlyKikgYWNfZGF0YXJvb3RkaXJfc2Vlbj15ZXM7OworKkBkYXRhZGlyQCp8KkBkb2NkaXJAKnwqQGluZm9kaXJAKnwqQGxvY2FsZWRpckAqfCpAbWFuZGlyQCopCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJGFjX2ZpbGVfaW5wdXRzIHNlZW1zIHRvIGlnbm9yZSB0aGUgLS1kYXRhcm9vdGRpciBzZXR0aW5nIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19maWxlX2lucHV0cyBzZWVtcyB0byBpZ25vcmUgdGhlIC0tZGF0YXJvb3RkaXIgc2V0dGluZyIgPiYyO30KK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisgIGFjX2RhdGFyb290ZGlyX2hhY2s9JworICBzJkBkYXRhZGlyQCYkZGF0YWRpciZnCisgIHMmQGRvY2RpckAmJGRvY2RpciZnCisgIHMmQGluZm9kaXJAJiRpbmZvZGlyJmcKKyAgcyZAbG9jYWxlZGlyQCYkbG9jYWxlZGlyJmcKKyAgcyZAbWFuZGlyQCYkbWFuZGlyJmcKKyAgcyZcXFwke2RhdGFyb290ZGlyfSYkZGF0YXJvb3RkaXImZycgOzsKK2VzYWMKK19BQ0VPRgorCisjIE5ldXRyYWxpemUgVlBBVEggd2hlbiBgJHNyY2RpcicgPSBgLicuCisjIFNoZWxsIGNvZGUgaW4gY29uZmlndXJlLmFjIG1pZ2h0IHNldCBleHRyYXN1Yi4KKyMgRklYTUU6IGRvIHdlIHJlYWxseSB3YW50IHRvIG1haW50YWluIHRoaXMgZmVhdHVyZT8KK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorYWNfc2VkX2V4dHJhPSIkYWNfdnBzdWIKKyRleHRyYXN1YgorX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCis6dAorL0BbYS16QS1aX11bYS16QS1aXzAtOV0qQC8hYgorc3xAY29uZmlndXJlX2lucHV0QHwkYWNfc2VkX2NvbmZfaW5wdXR8O3QgdAorcyZAdG9wX2J1aWxkZGlyQCYkYWNfdG9wX2J1aWxkZGlyX3N1YiY7dCB0CitzJkB0b3BfYnVpbGRfcHJlZml4QCYkYWNfdG9wX2J1aWxkX3ByZWZpeCY7dCB0CitzJkBzcmNkaXJAJiRhY19zcmNkaXImO3QgdAorcyZAYWJzX3NyY2RpckAmJGFjX2Fic19zcmNkaXImO3QgdAorcyZAdG9wX3NyY2RpckAmJGFjX3RvcF9zcmNkaXImO3QgdAorcyZAYWJzX3RvcF9zcmNkaXJAJiRhY19hYnNfdG9wX3NyY2RpciY7dCB0CitzJkBidWlsZGRpckAmJGFjX2J1aWxkZGlyJjt0IHQKK3MmQGFic19idWlsZGRpckAmJGFjX2Fic19idWlsZGRpciY7dCB0CitzJkBhYnNfdG9wX2J1aWxkZGlyQCYkYWNfYWJzX3RvcF9idWlsZGRpciY7dCB0CitzJkBJTlNUQUxMQCYkYWNfSU5TVEFMTCY7dCB0CitzJkBNS0RJUl9QQCYkYWNfTUtESVJfUCY7dCB0CiskYWNfZGF0YXJvb3RkaXJfaGFjaworIgorZXZhbCBzZWQgXCJcJGFjX3NlZF9leHRyYVwiICIkYWNfZmlsZV9pbnB1dHMiIHwgJEFXSyAtZiAiJGFjX3RtcC9zdWJzLmF3ayIgXAorICA+JGFjX3RtcC9vdXQgfHwgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGUiICIkTElORU5PIiA1CisKK3Rlc3QgLXogIiRhY19kYXRhcm9vdGRpcl9oYWNrJGFjX2RhdGFyb290ZGlyX3NlZW4iICYmCisgIHsgYWNfb3V0PWBzZWQgLW4gJy9cJHtkYXRhcm9vdGRpcn0vcCcgIiRhY190bXAvb3V0ImA7IHRlc3QgLW4gIiRhY19vdXQiOyB9ICYmCisgIHsgYWNfb3V0PWBzZWQgLW4gJy9eWwkgXSpkYXRhcm9vdGRpclsJIF0qOio9L3AnIFwKKyAgICAgICIkYWNfdG1wL291dCJgOyB0ZXN0IC16ICIkYWNfb3V0IjsgfSAmJgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICRhY19maWxlIGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSB2YXJpYWJsZSBcYGRhdGFyb290ZGlyJword2hpY2ggc2VlbXMgdG8gYmUgdW5kZWZpbmVkLiAgUGxlYXNlIG1ha2Ugc3VyZSBpdCBpcyBkZWZpbmVkIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19maWxlIGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSB2YXJpYWJsZSBcYGRhdGFyb290ZGlyJword2hpY2ggc2VlbXMgdG8gYmUgdW5kZWZpbmVkLiAgUGxlYXNlIG1ha2Ugc3VyZSBpdCBpcyBkZWZpbmVkIiA+JjI7fQorCisgIHJtIC1mICIkYWNfdG1wL3N0ZGluIgorICBjYXNlICRhY19maWxlIGluCisgIC0pIGNhdCAiJGFjX3RtcC9vdXQiICYmIHJtIC1mICIkYWNfdG1wL291dCI7OworICAqKSBybSAtZiAiJGFjX2ZpbGUiICYmIG12ICIkYWNfdG1wL291dCIgIiRhY19maWxlIjs7CisgIGVzYWMgXAorICB8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUKKyA7OworICA6SCkKKyAgIworICAjIENPTkZJR19IRUFERVIKKyAgIworICBpZiB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtOyB0aGVuCisgICAgeworICAgICAgJGFzX2VjaG8gIi8qICRjb25maWd1cmVfaW5wdXQgICovIiBcCisgICAgICAmJiBldmFsICckQVdLIC1mICIkYWNfdG1wL2RlZmluZXMuYXdrIicgIiRhY19maWxlX2lucHV0cyIKKyAgICB9ID4iJGFjX3RtcC9jb25maWcuaCIgXAorICAgICAgfHwgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGUiICIkTElORU5PIiA1CisgICAgaWYgZGlmZiAiJGFjX2ZpbGUiICIkYWNfdG1wL2NvbmZpZy5oIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX2ZpbGUgaXMgdW5jaGFuZ2VkIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6ICRhY19maWxlIGlzIHVuY2hhbmdlZCIgPiY2O30KKyAgICBlbHNlCisgICAgICBybSAtZiAiJGFjX2ZpbGUiCisgICAgICBtdiAiJGFjX3RtcC9jb25maWcuaCIgIiRhY19maWxlIiBcCisJfHwgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGUiICIkTElORU5PIiA1CisgICAgZmkKKyAgZWxzZQorICAgICRhc19lY2hvICIvKiAkY29uZmlndXJlX2lucHV0ICAqLyIgXAorICAgICAgJiYgZXZhbCAnJEFXSyAtZiAiJGFjX3RtcC9kZWZpbmVzLmF3ayInICIkYWNfZmlsZV9pbnB1dHMiIFwKKyAgICAgIHx8IGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgY3JlYXRlIC0iICIkTElORU5PIiA1CisgIGZpCisjIENvbXB1dGUgIiRhY19maWxlIidzIGluZGV4IGluICRjb25maWdfaGVhZGVycy4KK19hbV9hcmc9IiRhY19maWxlIgorX2FtX3N0YW1wX2NvdW50PTEKK2ZvciBfYW1faGVhZGVyIGluICRjb25maWdfaGVhZGVycyA6OyBkbworICBjYXNlICRfYW1faGVhZGVyIGluCisgICAgJF9hbV9hcmcgfCAkX2FtX2FyZzoqICkKKyAgICAgIGJyZWFrIDs7CisgICAgKiApCisgICAgICBfYW1fc3RhbXBfY291bnQ9YGV4cHIgJF9hbV9zdGFtcF9jb3VudCArIDFgIDs7CisgIGVzYWMKK2RvbmUKK2VjaG8gInRpbWVzdGFtcCBmb3IgJF9hbV9hcmciID5gJGFzX2Rpcm5hbWUgLS0gIiRfYW1fYXJnIiB8fAorJGFzX2V4cHIgWCIkX2FtX2FyZyIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkX2FtX2FyZyIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkX2FtX2FyZyIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkX2FtX2FyZyIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYIiRfYW1fYXJnIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2Avc3RhbXAtaCRfYW1fc3RhbXBfY291bnQKKyA7OworCisgIDpDKSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBleGVjdXRpbmcgJGFjX2ZpbGUgY29tbWFuZHMiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXhlY3V0aW5nICRhY19maWxlIGNvbW1hbmRzIiA+JjY7fQorIDs7CisgIGVzYWMKKworCisgIGNhc2UgJGFjX2ZpbGUkYWNfbW9kZSBpbgorICAgICJkZXBmaWxlcyI6QykgdGVzdCB4IiRBTURFUF9UUlVFIiAhPSB4IiIgfHwgeworICAjIEF1dG9jb25mIDIuNjIgcXVvdGVzIC0tZmlsZSBhcmd1bWVudHMgZm9yIGV2YWwsIGJ1dCBub3Qgd2hlbiBmaWxlcworICAjIGFyZSBsaXN0ZWQgd2l0aG91dCAtLWZpbGUuICBMZXQncyBwbGF5IHNhZmUgYW5kIG9ubHkgZW5hYmxlIHRoZSBldmFsCisgICMgaWYgd2UgZGV0ZWN0IHRoZSBxdW90aW5nLgorICBjYXNlICRDT05GSUdfRklMRVMgaW4KKyAgKlwnKikgZXZhbCBzZXQgeCAiJENPTkZJR19GSUxFUyIgOzsKKyAgKikgICBzZXQgeCAkQ09ORklHX0ZJTEVTIDs7CisgIGVzYWMKKyAgc2hpZnQKKyAgZm9yIG1mCisgIGRvCisgICAgIyBTdHJpcCBNRiBzbyB3ZSBlbmQgdXAgd2l0aCB0aGUgbmFtZSBvZiB0aGUgZmlsZS4KKyAgICBtZj1gZWNobyAiJG1mIiB8IHNlZCAtZSAncy86LiokLy8nYAorICAgICMgQ2hlY2sgd2hldGhlciB0aGlzIGlzIGFuIEF1dG9tYWtlIGdlbmVyYXRlZCBNYWtlZmlsZSBvciBub3QuCisgICAgIyBXZSB1c2VkIHRvIG1hdGNoIG9ubHkgdGhlIGZpbGVzIG5hbWVkIGBNYWtlZmlsZS5pbicsIGJ1dAorICAgICMgc29tZSBwZW9wbGUgcmVuYW1lIHRoZW07IHNvIGluc3RlYWQgd2UgbG9vayBhdCB0aGUgZmlsZSBjb250ZW50LgorICAgICMgR3JlcCdpbmcgdGhlIGZpcnN0IGxpbmUgaXMgbm90IGVub3VnaDogc29tZSBwZW9wbGUgcG9zdC1wcm9jZXNzCisgICAgIyBlYWNoIE1ha2VmaWxlLmluIGFuZCBhZGQgYSBuZXcgbGluZSBvbiB0b3Agb2YgZWFjaCBmaWxlIHRvIHNheSBzby4KKyAgICAjIEdyZXAnaW5nIHRoZSB3aG9sZSBmaWxlIGlzIG5vdCBnb29kIGVpdGhlcjogQUlYIGdyZXAgaGFzIGEgbGluZQorICAgICMgbGltaXQgb2YgMjA0OCwgYnV0IGFsbCBzZWQncyB3ZSBrbm93IGhhdmUgdW5kZXJzdGFuZCBhdCBsZWFzdCA0MDAwLgorICAgIGlmIHNlZCAtbiAncyxeIy4qZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlLiosWCxwJyAiJG1mIiB8IGdyZXAgWCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgIGRpcnBhcnQ9YCRhc19kaXJuYW1lIC0tICIkbWYiIHx8CiskYXNfZXhwciBYIiRtZiIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkbWYiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJG1mIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRtZiIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYIiRtZiIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKVteL10uKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKSQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCisgICAgZWxzZQorICAgICAgY29udGludWUKKyAgICBmaQorICAgICMgRXh0cmFjdCB0aGUgZGVmaW5pdGlvbiBvZiBERVBESVIsIGFtX19pbmNsdWRlLCBhbmQgYW1fX3F1b3RlCisgICAgIyBmcm9tIHRoZSBNYWtlZmlsZSB3aXRob3V0IHJ1bm5pbmcgYG1ha2UnLgorICAgIERFUERJUj1gc2VkIC1uICdzL15ERVBESVIgPSAvL3AnIDwgIiRtZiJgCisgICAgdGVzdCAteiAiJERFUERJUiIgJiYgY29udGludWUKKyAgICBhbV9faW5jbHVkZT1gc2VkIC1uICdzL15hbV9faW5jbHVkZSA9IC8vcCcgPCAiJG1mImAKKyAgICB0ZXN0IC16ICJhbV9faW5jbHVkZSIgJiYgY29udGludWUKKyAgICBhbV9fcXVvdGU9YHNlZCAtbiAncy9eYW1fX3F1b3RlID0gLy9wJyA8ICIkbWYiYAorICAgICMgV2hlbiB1c2luZyBhbnNpMmtuciwgVSBtYXkgYmUgZW1wdHkgb3IgYW4gdW5kZXJzY29yZTsgZXhwYW5kIGl0CisgICAgVT1gc2VkIC1uICdzL15VID0gLy9wJyA8ICIkbWYiYAorICAgICMgRmluZCBhbGwgZGVwZW5kZW5jeSBvdXRwdXQgZmlsZXMsIHRoZXkgYXJlIGluY2x1ZGVkIGZpbGVzIHdpdGgKKyAgICAjICQoREVQRElSKSBpbiB0aGVpciBuYW1lcy4gIFdlIGludm9rZSBzZWQgdHdpY2UgYmVjYXVzZSBpdCBpcyB0aGUKKyAgICAjIHNpbXBsZXN0IGFwcHJvYWNoIHRvIGNoYW5naW5nICQoREVQRElSKSB0byBpdHMgYWN0dWFsIHZhbHVlIGluIHRoZQorICAgICMgZXhwYW5zaW9uLgorICAgIGZvciBmaWxlIGluIGBzZWQgLW4gIgorICAgICAgcy9eJGFtX19pbmNsdWRlICRhbV9fcXVvdGVcKC4qKERFUERJUikuKlwpJGFtX19xdW90ZSInJC9cMS9wJyA8IiRtZiIgfCBcCisJIHNlZCAtZSAncy9cJChERVBESVIpLyciJERFUERJUiInL2cnIC1lICdzL1wkVS8nIiRVIicvZydgOyBkbworICAgICAgIyBNYWtlIHN1cmUgdGhlIGRpcmVjdG9yeSBleGlzdHMuCisgICAgICB0ZXN0IC1mICIkZGlycGFydC8kZmlsZSIgJiYgY29udGludWUKKyAgICAgIGZkaXI9YCRhc19kaXJuYW1lIC0tICIkZmlsZSIgfHwKKyRhc19leHByIFgiJGZpbGUiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGZpbGUiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJGZpbGUiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGZpbGUiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWCIkZmlsZSIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKVteL10uKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKSQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCisgICAgICBhc19kaXI9JGRpcnBhcnQvJGZkaXI7IGFzX2ZuX21rZGlyX3AKKyAgICAgICMgZWNobyAiY3JlYXRpbmcgJGRpcnBhcnQvJGZpbGUiCisgICAgICBlY2hvICcjIGR1bW15JyA+ICIkZGlycGFydC8kZmlsZSIKKyAgICBkb25lCisgIGRvbmUKK30KKyA7OworICAgICJsaWJ0b29sIjpDKQorCisgICAgIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHdoaWNoIGFsbG93IG91cgorICAgICMgY29tbWFuZHMgdGhyb3VnaCB3aXRob3V0IHJlbW92YWwgb2YgXCBlc2NhcGVzLgorICAgIGlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCisgICAgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorICAgIGZpCisKKyAgICBjZmdmaWxlPSIke29maWxlfVQiCisgICAgdHJhcCAiJFJNIFwiJGNmZ2ZpbGVcIjsgZXhpdCAxIiAxIDIgMTUKKyAgICAkUk0gIiRjZmdmaWxlIgorCisgICAgY2F0IDw8X0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCisjISAkU0hFTEwKKworIyBgJEVDSE8gIiRvZmlsZSIgfCBzZWQgJ3MlXi4qLyUlJ2AgLSBQcm92aWRlIGdlbmVyYWxpemVkIGxpYnJhcnktYnVpbGRpbmcgc3VwcG9ydCBzZXJ2aWNlcy4KKyMgR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgJGFzX21lICgkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OCisjIExpYnRvb2wgd2FzIGNvbmZpZ3VyZWQgb24gaG9zdCBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWA6CisjIE5PVEU6IENoYW5nZXMgbWFkZSB0byB0aGlzIGZpbGUgd2lsbCBiZSBsb3N0OiBsb29rIGF0IGx0bWFpbi5zaC4KKyMKKyMgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsCisjICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUKKyMgICAgICAgICAgICAgICAgIEZvdW5kYXRpb24sIEluYy4KKyMgICBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0LCAxOTk2CisjCisjICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2wuCisjCisjIEdOVSBMaWJ0b29sIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisjIGlmIHlvdSBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSBvciBsaWJyYXJ5IHRoYXQKKyMgaXMgYnVpbHQgdXNpbmcgR05VIExpYnRvb2wsIHlvdSBtYXkgaW5jbHVkZSB0aGlzIGZpbGUgdW5kZXIgdGhlCisjIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorIworIyBHTlUgTGlidG9vbCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggR05VIExpYnRvb2w7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCBhIGNvcHkKKyMgY2FuIGJlIGRvd25sb2FkZWQgZnJvbSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLmh0bWwsIG9yCisjIG9idGFpbmVkIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKworIyBUaGUgbmFtZXMgb2YgdGhlIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzdXBwb3J0ZWQgYnkgdGhpcyBzY3JpcHQuCithdmFpbGFibGVfdGFncz0iQ1hYICIKKworIyAjIyMgQkVHSU4gTElCVE9PTCBDT05GSUcKKworIyBXaGljaCByZWxlYXNlIG9mIGxpYnRvb2wubTQgd2FzIHVzZWQ/CittYWNyb192ZXJzaW9uPSRtYWNyb192ZXJzaW9uCittYWNyb19yZXZpc2lvbj0kbWFjcm9fcmV2aXNpb24KKworIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLgorYnVpbGRfbGlidG9vbF9saWJzPSRlbmFibGVfc2hhcmVkCisKKyMgV2hldGhlciBvciBub3QgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcy4KK2J1aWxkX29sZF9saWJzPSRlbmFibGVfc3RhdGljCisKKyMgV2hhdCB0eXBlIG9mIG9iamVjdHMgdG8gYnVpbGQuCitwaWNfbW9kZT0kcGljX21vZGUKKworIyBXaGV0aGVyIG9yIG5vdCB0byBvcHRpbWl6ZSBmb3IgZmFzdCBpbnN0YWxsYXRpb24uCitmYXN0X2luc3RhbGw9JGVuYWJsZV9mYXN0X2luc3RhbGwKKworIyBTaGVsbCB0byB1c2Ugd2hlbiBpbnZva2luZyBzaGVsbCBzY3JpcHRzLgorU0hFTEw9JGx0X1NIRUxMCisKKyMgQW4gZWNobyBwcm9ncmFtIHRoYXQgcHJvdGVjdHMgYmFja3NsYXNoZXMuCitFQ0hPPSRsdF9FQ0hPCisKKyMgVGhlIFBBVEggc2VwYXJhdG9yIGZvciB0aGUgYnVpbGQgc3lzdGVtLgorUEFUSF9TRVBBUkFUT1I9JGx0X1BBVEhfU0VQQVJBVE9SCisKKyMgVGhlIGhvc3Qgc3lzdGVtLgoraG9zdF9hbGlhcz0kaG9zdF9hbGlhcworaG9zdD0kaG9zdAoraG9zdF9vcz0kaG9zdF9vcworCisjIFRoZSBidWlsZCBzeXN0ZW0uCitidWlsZF9hbGlhcz0kYnVpbGRfYWxpYXMKK2J1aWxkPSRidWlsZAorYnVpbGRfb3M9JGJ1aWxkX29zCisKKyMgQSBzZWQgcHJvZ3JhbSB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dC4KK1NFRD0kbHRfU0VECisKKyMgU2VkIHRoYXQgaGVscHMgdXMgYXZvaWQgYWNjaWRlbnRhbGx5IHRyaWdnZXJpbmcgZWNobygxKSBvcHRpb25zIGxpa2UgLW4uCitYc2VkPSJcJFNFRCAtZSAxcy9eWC8vIgorCisjIEEgZ3JlcCBwcm9ncmFtIHRoYXQgaGFuZGxlcyBsb25nIGxpbmVzLgorR1JFUD0kbHRfR1JFUAorCisjIEFuIEVSRSBtYXRjaGVyLgorRUdSRVA9JGx0X0VHUkVQCisKKyMgQSBsaXRlcmFsIHN0cmluZyBtYXRjaGVyLgorRkdSRVA9JGx0X0ZHUkVQCisKKyMgQSBCU0QtIG9yIE1TLWNvbXBhdGlibGUgbmFtZSBsaXN0ZXIuCitOTT0kbHRfTk0KKworIyBXaGV0aGVyIHdlIG5lZWQgc29mdCBvciBoYXJkIGxpbmtzLgorTE5fUz0kbHRfTE5fUworCisjIFdoYXQgaXMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgY29tbWFuZD8KK21heF9jbWRfbGVuPSRtYXhfY21kX2xlbgorCisjIE9iamVjdCBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIm8iKS4KK29iamV4dD0kYWNfb2JqZXh0CisKKyMgRXhlY3V0YWJsZSBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIiIpLgorZXhlZXh0PSRleGVleHQKKworIyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyAidW5zZXQiLgorbHRfdW5zZXQ9JGx0X3Vuc2V0CisKKyMgdHVybiBzcGFjZXMgaW50byBuZXdsaW5lcy4KK1NQMk5MPSRsdF9sdF9TUDJOTAorCisjIHR1cm4gbmV3bGluZXMgaW50byBzcGFjZXMuCitOTDJTUD0kbHRfbHRfTkwyU1AKKworIyBjb252ZXJ0IFwkYnVpbGQgZmlsZSBuYW1lcyB0byBcJGhvc3QgZm9ybWF0LgordG9faG9zdF9maWxlX2NtZD0kbHRfY3ZfdG9faG9zdF9maWxlX2NtZAorCisjIGNvbnZlcnQgXCRidWlsZCBmaWxlcyB0byB0b29sY2hhaW4gZm9ybWF0LgordG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAorCisjIEFuIG9iamVjdCBzeW1ib2wgZHVtcGVyLgorT0JKRFVNUD0kbHRfT0JKRFVNUAorCisjIE1ldGhvZCB0byBjaGVjayB3aGV0aGVyIGRlcGVuZGVudCBsaWJyYXJpZXMgYXJlIHNoYXJlZCBvYmplY3RzLgorZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2RlcGxpYnNfY2hlY2tfbWV0aG9kCisKKyMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KK2ZpbGVfbWFnaWNfY21kPSRsdF9maWxlX21hZ2ljX2NtZAorCisjIEhvdyB0byBmaW5kIHBvdGVudGlhbCBmaWxlcyB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgorZmlsZV9tYWdpY19nbG9iPSRsdF9maWxlX21hZ2ljX2dsb2IKKworIyBGaW5kIHBvdGVudGlhbCBmaWxlcyB1c2luZyBub2Nhc2VnbG9iIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCit3YW50X25vY2FzZWdsb2I9JGx0X3dhbnRfbm9jYXNlZ2xvYgorCisjIERMTCBjcmVhdGlvbiBwcm9ncmFtLgorRExMVE9PTD0kbHRfRExMVE9PTAorCisjIENvbW1hbmQgdG8gYXNzb2NpYXRlIHNoYXJlZCBhbmQgbGluayBsaWJyYXJpZXMuCitzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kbHRfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKKworIyBUaGUgYXJjaGl2ZXIuCitBUj0kbHRfQVIKKworIyBGbGFncyB0byBjcmVhdGUgYW4gYXJjaGl2ZS4KK0FSX0ZMQUdTPSRsdF9BUl9GTEFHUworCisjIEhvdyB0byBmZWVkIGEgZmlsZSBsaXN0aW5nIHRvIHRoZSBhcmNoaXZlci4KK2FyY2hpdmVyX2xpc3Rfc3BlYz0kbHRfYXJjaGl2ZXJfbGlzdF9zcGVjCisKKyMgQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW0uCitTVFJJUD0kbHRfU1RSSVAKKworIyBDb21tYW5kcyB1c2VkIHRvIGluc3RhbGwgYW4gb2xkLXN0eWxlIGFyY2hpdmUuCitSQU5MSUI9JGx0X1JBTkxJQgorb2xkX3Bvc3RpbnN0YWxsX2NtZHM9JGx0X29sZF9wb3N0aW5zdGFsbF9jbWRzCitvbGRfcG9zdHVuaW5zdGFsbF9jbWRzPSRsdF9vbGRfcG9zdHVuaW5zdGFsbF9jbWRzCisKKyMgV2hldGhlciB0byB1c2UgYSBsb2NrIGZvciBvbGQgYXJjaGl2ZSBleHRyYWN0aW9uLgorbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uPSRsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb24KKworIyBBIEMgY29tcGlsZXIuCitMVENDPSRsdF9DQworCisjIExUQ0MgY29tcGlsZXIgZmxhZ3MuCitMVENGTEFHUz0kbHRfQ0ZMQUdTCisKKyMgVGFrZSB0aGUgb3V0cHV0IG9mIG5tIGFuZCBwcm9kdWNlIGEgbGlzdGluZyBvZiByYXcgc3ltYm9scyBhbmQgQyBuYW1lcy4KK2dsb2JhbF9zeW1ib2xfcGlwZT0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZQorCisjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgcHJvcGVyIEMgZGVjbGFyYXRpb24uCitnbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbAorCisjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpci4KK2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzCisKKyMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyIHdoZW4gbGliIHByZWZpeCBpcyBuZWVkZWQuCitnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgKKworIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMgZm9yIFwkTk0uCitubV9maWxlX2xpc3Rfc3BlYz0kbHRfbm1fZmlsZV9saXN0X3NwZWMKKworIyBUaGUgcm9vdCB3aGVyZSB0byBzZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMsYW5kIGluIHdoaWNoIG91ciBsaWJyYXJpZXMgc2hvdWxkIGJlIGluc3RhbGxlZC4KK2x0X3N5c3Jvb3Q9JGx0X3N5c3Jvb3QKKworIyBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXMuCitvYmpkaXI9JG9iamRpcgorCisjIFVzZWQgdG8gZXhhbWluZSBsaWJyYXJpZXMgd2hlbiBmaWxlX21hZ2ljX2NtZCBiZWdpbnMgd2l0aCAiZmlsZSIuCitNQUdJQ19DTUQ9JE1BR0lDX0NNRAorCisjIE11c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uPworbmVlZF9sb2Nrcz0kbHRfbmVlZF9sb2NrcworCisjIE1hbmlmZXN0IHRvb2wuCitNQU5JRkVTVF9UT09MPSRsdF9NQU5JRkVTVF9UT09MCisKKyMgVG9vbCB0byBtYW5pcHVsYXRlIGFyY2hpdmVkIERXQVJGIGRlYnVnIHN5bWJvbCBmaWxlcyBvbiBNYWMgT1MgWC4KK0RTWU1VVElMPSRsdF9EU1lNVVRJTAorCisjIFRvb2wgdG8gY2hhbmdlIGdsb2JhbCB0byBsb2NhbCBzeW1ib2xzIG9uIE1hYyBPUyBYLgorTk1FRElUPSRsdF9OTUVESVQKKworIyBUb29sIHRvIG1hbmlwdWxhdGUgZmF0IG9iamVjdHMgYW5kIGFyY2hpdmVzIG9uIE1hYyBPUyBYLgorTElQTz0kbHRfTElQTworCisjIGxkZC9yZWFkZWxmIGxpa2UgdG9vbCBmb3IgTWFjaC1PIGJpbmFyaWVzIG9uIE1hYyBPUyBYLgorT1RPT0w9JGx0X09UT09MCisKKyMgbGRkL3JlYWRlbGYgbGlrZSB0b29sIGZvciA2NCBiaXQgTWFjaC1PIGJpbmFyaWVzIG9uIE1hYyBPUyBYIDEwLjQuCitPVE9PTDY0PSRsdF9PVE9PTDY0CisKKyMgT2xkIGFyY2hpdmUgc3VmZml4IChub3JtYWxseSAiYSIpLgorbGliZXh0PSRsaWJleHQKKworIyBTaGFyZWQgbGlicmFyeSBzdWZmaXggKG5vcm1hbGx5ICIuc28iKS4KK3NocmV4dF9jbWRzPSRsdF9zaHJleHRfY21kcworCisjIFRoZSBjb21tYW5kcyB0byBleHRyYWN0IHRoZSBleHBvcnRlZCBzeW1ib2wgbGlzdCBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCitleHRyYWN0X2V4cHN5bXNfY21kcz0kbHRfZXh0cmFjdF9leHBzeW1zX2NtZHMKKworIyBWYXJpYWJsZXMgd2hvc2UgdmFsdWVzIHNob3VsZCBiZSBzYXZlZCBpbiBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0cyBhbmQKKyMgcmVzdG9yZWQgYXQgbGluayB0aW1lLgordmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9JGx0X3ZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rCisKKyMgRG8gd2UgbmVlZCB0aGUgImxpYiIgcHJlZml4IGZvciBtb2R1bGVzPworbmVlZF9saWJfcHJlZml4PSRuZWVkX2xpYl9wcmVmaXgKKworIyBEbyB3ZSBuZWVkIGEgdmVyc2lvbiBmb3IgbGlicmFyaWVzPworbmVlZF92ZXJzaW9uPSRuZWVkX3ZlcnNpb24KKworIyBMaWJyYXJ5IHZlcnNpb25pbmcgdHlwZS4KK3ZlcnNpb25fdHlwZT0kdmVyc2lvbl90eXBlCisKKyMgU2hhcmVkIGxpYnJhcnkgcnVudGltZSBwYXRoIHZhcmlhYmxlLgorcnVucGF0aF92YXI9JHJ1bnBhdGhfdmFyCisKKyMgU2hhcmVkIGxpYnJhcnkgcGF0aCB2YXJpYWJsZS4KK3NobGlicGF0aF92YXI9JHNobGlicGF0aF92YXIKKworIyBJcyBzaGxpYnBhdGggc2VhcmNoZWQgYmVmb3JlIHRoZSBoYXJkLWNvZGVkIGxpYnJhcnkgc2VhcmNoIHBhdGg/CitzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9JHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aAorCisjIEZvcm1hdCBvZiBsaWJyYXJ5IG5hbWUgcHJlZml4LgorbGlibmFtZV9zcGVjPSRsdF9saWJuYW1lX3NwZWMKKworIyBMaXN0IG9mIGFyY2hpdmUgbmFtZXMuICBGaXJzdCBuYW1lIGlzIHRoZSByZWFsIG9uZSwgdGhlIHJlc3QgYXJlIGxpbmtzLgorIyBUaGUgbGFzdCBuYW1lIGlzIHRoZSBvbmUgdGhhdCB0aGUgbGlua2VyIGZpbmRzIHdpdGggLWxOQU1FCitsaWJyYXJ5X25hbWVzX3NwZWM9JGx0X2xpYnJhcnlfbmFtZXNfc3BlYworCisjIFRoZSBjb2RlZCBuYW1lIG9mIHRoZSBsaWJyYXJ5LCBpZiBkaWZmZXJlbnQgZnJvbSB0aGUgcmVhbCBuYW1lLgorc29uYW1lX3NwZWM9JGx0X3NvbmFtZV9zcGVjCisKKyMgUGVybWlzc2lvbiBtb2RlIG92ZXJyaWRlIGZvciBpbnN0YWxsYXRpb24gb2Ygc2hhcmVkIGxpYnJhcmllcy4KK2luc3RhbGxfb3ZlcnJpZGVfbW9kZT0kbHRfaW5zdGFsbF9vdmVycmlkZV9tb2RlCisKKyMgQ29tbWFuZCB0byB1c2UgYWZ0ZXIgaW5zdGFsbGF0aW9uIG9mIGEgc2hhcmVkIGFyY2hpdmUuCitwb3N0aW5zdGFsbF9jbWRzPSRsdF9wb3N0aW5zdGFsbF9jbWRzCisKKyMgQ29tbWFuZCB0byB1c2UgYWZ0ZXIgdW5pbnN0YWxsYXRpb24gb2YgYSBzaGFyZWQgYXJjaGl2ZS4KK3Bvc3R1bmluc3RhbGxfY21kcz0kbHRfcG9zdHVuaW5zdGFsbF9jbWRzCisKKyMgQ29tbWFuZHMgdXNlZCB0byBmaW5pc2ggYSBsaWJ0b29sIGxpYnJhcnkgaW5zdGFsbGF0aW9uIGluIGEgZGlyZWN0b3J5LgorZmluaXNoX2NtZHM9JGx0X2ZpbmlzaF9jbWRzCisKKyMgQXMgImZpbmlzaF9jbWRzIiwgZXhjZXB0IGEgc2luZ2xlIHNjcmlwdCBmcmFnbWVudCB0byBiZSBldmFsZWQgYnV0CisjIG5vdCBzaG93bi4KK2ZpbmlzaF9ldmFsPSRsdF9maW5pc2hfZXZhbAorCisjIFdoZXRoZXIgd2Ugc2hvdWxkIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBsaWJyYXJpZXMuCitoYXJkY29kZV9pbnRvX2xpYnM9JGhhcmRjb2RlX2ludG9fbGlicworCisjIENvbXBpbGUtdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcy4KK3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0kbHRfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisKKyMgUnVuLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXMuCitzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kbHRfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMKKworIyBXaGV0aGVyIGRsb3BlbiBpcyBzdXBwb3J0ZWQuCitkbG9wZW5fc3VwcG9ydD0kZW5hYmxlX2Rsb3BlbgorCisjIFdoZXRoZXIgZGxvcGVuIG9mIHByb2dyYW1zIGlzIHN1cHBvcnRlZC4KK2Rsb3Blbl9zZWxmPSRlbmFibGVfZGxvcGVuX3NlbGYKKworIyBXaGV0aGVyIGRsb3BlbiBvZiBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtcyBpcyBzdXBwb3J0ZWQuCitkbG9wZW5fc2VsZl9zdGF0aWM9JGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWMKKworIyBDb21tYW5kcyB0byBzdHJpcCBsaWJyYXJpZXMuCitvbGRfc3RyaXBsaWI9JGx0X29sZF9zdHJpcGxpYgorc3RyaXBsaWI9JGx0X3N0cmlwbGliCisKKworIyBUaGUgbGlua2VyIHVzZWQgdG8gYnVpbGQgbGlicmFyaWVzLgorTEQ9JGx0X0xECisKKyMgSG93IHRvIGNyZWF0ZSByZWxvYWRhYmxlIG9iamVjdCBmaWxlcy4KK3JlbG9hZF9mbGFnPSRsdF9yZWxvYWRfZmxhZworcmVsb2FkX2NtZHM9JGx0X3JlbG9hZF9jbWRzCisKKyMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhbiBvbGQtc3R5bGUgYXJjaGl2ZS4KK29sZF9hcmNoaXZlX2NtZHM9JGx0X29sZF9hcmNoaXZlX2NtZHMKKworIyBBIGxhbmd1YWdlIHNwZWNpZmljIGNvbXBpbGVyLgorQ0M9JGx0X2NvbXBpbGVyCisKKyMgSXMgdGhlIGNvbXBpbGVyIHRoZSBHTlUgY29tcGlsZXI/Cit3aXRoX2djYz0kR0NDCisKKyMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4KK25vX2J1aWx0aW5fZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcKKworIyBBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHMuCitwaWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9waWMKKworIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgord2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2wKKworIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgorbGlua19zdGF0aWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9zdGF0aWMKKworIyBEb2VzIGNvbXBpbGVyIHNpbXVsdGFuZW91c2x5IHN1cHBvcnQgLWMgYW5kIC1vIG9wdGlvbnM/Citjb21waWxlcl9jX289JGx0X2x0X2N2X3Byb2dfY29tcGlsZXJfY19vCisKKyMgV2hldGhlciBvciBub3QgdG8gYWRkIC1sYyBmb3IgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcy4KK2J1aWxkX2xpYnRvb2xfbmVlZF9sYz0kYXJjaGl2ZV9jbWRzX25lZWRfbGMKKworIyBXaGV0aGVyIG9yIG5vdCB0byBkaXNhbGxvdyBzaGFyZWQgbGlicyB3aGVuIHJ1bnRpbWUgbGlicyBhcmUgc3RhdGljLgorYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzPSRlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzCisKKyMgQ29tcGlsZXIgZmxhZyB0byBhbGxvdyByZWZsZXhpdmUgZGxvcGVucy4KK2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0kbHRfZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjCisKKyMgQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSBzaGFyZWQgb2JqZWN0cyBkaXJlY3RseSBmcm9tIGFyY2hpdmVzLgord2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JGx0X3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjCisKKyMgV2hldGhlciB0aGUgY29tcGlsZXIgY29wZXMgd2l0aCBwYXNzaW5nIG5vIG9iamVjdHMgZGlyZWN0bHkuCitjb21waWxlcl9uZWVkc19vYmplY3Q9JGx0X2NvbXBpbGVyX25lZWRzX29iamVjdAorCisjIENyZWF0ZSBhbiBvbGQtc3R5bGUgYXJjaGl2ZSBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCitvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSRsdF9vbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzCisKKyMgQ3JlYXRlIGEgdGVtcG9yYXJ5IG9sZC1zdHlsZSBhcmNoaXZlIHRvIGxpbmsgaW5zdGVhZCBvZiBhIHNoYXJlZCBhcmNoaXZlLgorb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHM9JGx0X29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzCisKKyMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIHNoYXJlZCBhcmNoaXZlLgorYXJjaGl2ZV9jbWRzPSRsdF9hcmNoaXZlX2NtZHMKK2FyY2hpdmVfZXhwc3ltX2NtZHM9JGx0X2FyY2hpdmVfZXhwc3ltX2NtZHMKKworIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgbG9hZGFibGUgbW9kdWxlIGlmIGRpZmZlcmVudCBmcm9tIGJ1aWxkaW5nCisjIGEgc2hhcmVkIGFyY2hpdmUuCittb2R1bGVfY21kcz0kbHRfbW9kdWxlX2NtZHMKK21vZHVsZV9leHBzeW1fY21kcz0kbHRfbW9kdWxlX2V4cHN5bV9jbWRzCisKKyMgV2hldGhlciB3ZSBhcmUgYnVpbGRpbmcgd2l0aCBHTlUgbGQgb3Igbm90Lgord2l0aF9nbnVfbGQ9JGx0X3dpdGhfZ251X2xkCisKKyMgRmxhZyB0aGF0IGFsbG93cyBzaGFyZWQgbGlicmFyaWVzIHdpdGggdW5kZWZpbmVkIHN5bWJvbHMgdG8gYmUgYnVpbHQuCithbGxvd191bmRlZmluZWRfZmxhZz0kbHRfYWxsb3dfdW5kZWZpbmVkX2ZsYWcKKworIyBGbGFnIHRoYXQgZW5mb3JjZXMgbm8gdW5kZWZpbmVkIHN5bWJvbHMuCitub191bmRlZmluZWRfZmxhZz0kbHRfbm9fdW5kZWZpbmVkX2ZsYWcKKworIyBGbGFnIHRvIGhhcmRjb2RlIFwkbGliZGlyIGludG8gYSBiaW5hcnkgZHVyaW5nIGxpbmtpbmcuCisjIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgXCRsaWJkaXIgZG9lcyBub3QgZXhpc3QKK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JGx0X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMKKworIyBXaGV0aGVyIHdlIG5lZWQgYSBzaW5nbGUgIi1ycGF0aCIgZmxhZyB3aXRoIGEgc2VwYXJhdGVkIGFyZ3VtZW50LgoraGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0kbHRfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcgorCisjIFNldCB0byAieWVzIiBpZiB1c2luZyBESVIvbGliTkFNRVwke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcworIyBESVIgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX2RpcmVjdD0kaGFyZGNvZGVfZGlyZWN0CisKKyMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIERJUi9saWJOQU1FXCR7c2hhcmVkX2V4dH0gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCisjIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5IGFuZCB0aGUgcmVzdWx0aW5nIGxpYnJhcnkgZGVwZW5kZW5jeSBpcworIyAiYWJzb2x1dGUiLGkuZSBpbXBvc3NpYmxlIHRvIGNoYW5nZSBieSBzZXR0aW5nIFwke3NobGlicGF0aF92YXJ9IGlmIHRoZQorIyBsaWJyYXJ5IGlzIHJlbG9jYXRlZC4KK2hhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT0kaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlCisKKyMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIHRoZSAtTERJUiBmbGFnIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIKKyMgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX21pbnVzX0w9JGhhcmRjb2RlX21pbnVzX0wKKworIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgU0hMSUJQQVRIX1ZBUj1ESVIgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUgorIyBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0kaGFyZGNvZGVfc2hsaWJwYXRoX3ZhcgorCisjIFNldCB0byAieWVzIiBpZiBidWlsZGluZyBhIHNoYXJlZCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgaGFyZGNvZGVzIERJUgorIyBpbnRvIHRoZSBsaWJyYXJ5IGFuZCBhbGwgc3Vic2VxdWVudCBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFibGVzIGxpbmtlZAorIyBhZ2FpbnN0IGl0LgoraGFyZGNvZGVfYXV0b21hdGljPSRoYXJkY29kZV9hdXRvbWF0aWMKKworIyBTZXQgdG8geWVzIGlmIGxpbmtlciBhZGRzIHJ1bnRpbWUgcGF0aHMgb2YgZGVwZW5kZW50IGxpYnJhcmllcworIyB0byBydW50aW1lIHBhdGggbGlzdC4KK2luaGVyaXRfcnBhdGg9JGluaGVyaXRfcnBhdGgKKworIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCitsaW5rX2FsbF9kZXBsaWJzPSRsaW5rX2FsbF9kZXBsaWJzCisKKyMgU2V0IHRvICJ5ZXMiIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgorYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRhbHdheXNfZXhwb3J0X3N5bWJvbHMKKworIyBUaGUgY29tbWFuZHMgdG8gbGlzdCBleHBvcnRlZCBzeW1ib2xzLgorZXhwb3J0X3N5bWJvbHNfY21kcz0kbHRfZXhwb3J0X3N5bWJvbHNfY21kcworCisjIFN5bWJvbHMgdGhhdCBzaG91bGQgbm90IGJlIGxpc3RlZCBpbiB0aGUgcHJlbG9hZGVkIHN5bWJvbHMuCitleGNsdWRlX2V4cHN5bXM9JGx0X2V4Y2x1ZGVfZXhwc3ltcworCisjIFN5bWJvbHMgdGhhdCBtdXN0IGFsd2F5cyBiZSBleHBvcnRlZC4KK2luY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zCisKKyMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHByb2dyYW1zIChhZ2FpbnN0IGxpYnJhcmllcykgd2l0aCB0ZW1wbGF0ZXMuCitwcmVsaW5rX2NtZHM9JGx0X3ByZWxpbmtfY21kcworCisjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgZmluaXNoaW5nIGxpbmtpbmcgcHJvZ3JhbXMuCitwb3N0bGlua19jbWRzPSRsdF9wb3N0bGlua19jbWRzCisKKyMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzLgorZmlsZV9saXN0X3NwZWM9JGx0X2ZpbGVfbGlzdF9zcGVjCisKKyMgSG93IHRvIGhhcmRjb2RlIGEgc2hhcmVkIGxpYnJhcnkgcGF0aCBpbnRvIGFuIGV4ZWN1dGFibGUuCitoYXJkY29kZV9hY3Rpb249JGhhcmRjb2RlX2FjdGlvbgorCisjIFRoZSBkaXJlY3RvcmllcyBzZWFyY2hlZCBieSB0aGlzIGNvbXBpbGVyIHdoZW4gY3JlYXRpbmcgYSBzaGFyZWQgbGlicmFyeS4KK2NvbXBpbGVyX2xpYl9zZWFyY2hfZGlycz0kbHRfY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzCisKKyMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvCisjIGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5LgorcHJlZGVwX29iamVjdHM9JGx0X3ByZWRlcF9vYmplY3RzCitwb3N0ZGVwX29iamVjdHM9JGx0X3Bvc3RkZXBfb2JqZWN0cworcHJlZGVwcz0kbHRfcHJlZGVwcworcG9zdGRlcHM9JGx0X3Bvc3RkZXBzCisKKyMgVGhlIGxpYnJhcnkgc2VhcmNoIHBhdGggdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBjb21waWxlciB3aGVuIGxpbmtpbmcKKyMgYSBzaGFyZWQgbGlicmFyeS4KK2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aD0kbHRfY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoCisKKyMgIyMjIEVORCBMSUJUT09MIENPTkZJRworCitfTFRfRU9GCisKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBhaXgzKikKKyAgICBjYXQgPDxcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCisjIEFJWCBzb21ldGltZXMgaGFzIHByb2JsZW1zIHdpdGggdGhlIEdDQyBjb2xsZWN0MiBwcm9ncmFtLiAgRm9yIHNvbWUKKyMgcmVhc29uLCBpZiB3ZSBzZXQgdGhlIENPTExFQ1RfTkFNRVMgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBwcm9ibGVtcworIyB2YW5pc2ggaW4gYSBwdWZmIG9mIHNtb2tlLgoraWYgdGVzdCAiWCR7Q09MTEVDVF9OQU1FUytzZXR9IiAhPSBYc2V0OyB0aGVuCisgIENPTExFQ1RfTkFNRVM9CisgIGV4cG9ydCBDT0xMRUNUX05BTUVTCitmaQorX0xUX0VPRgorICAgIDs7CisgIGVzYWMKKworCitsdG1haW49IiRhY19hdXhfZGlyL2x0bWFpbi5zaCIKKworCisgICMgV2UgdXNlIHNlZCBpbnN0ZWFkIG9mIGNhdCBiZWNhdXNlIGJhc2ggb24gREpHUFAgZ2V0cyBjb25mdXNlZCBpZgorICAjIGlmIGZpbmRzIG1peGVkIENSL0xGIGFuZCBMRi1vbmx5IGxpbmVzLiAgU2luY2Ugc2VkIG9wZXJhdGVzIGluCisgICMgdGV4dCBtb2RlLCBpdCBwcm9wZXJseSBjb252ZXJ0cyBsaW5lcyB0byBDUi9MRi4gIFRoaXMgYmFzaCBwcm9ibGVtCisgICMgaXMgcmVwb3J0ZWRseSBmaXhlZCwgYnV0IHdoeSBub3QgcnVuIG9uIG9sZCB2ZXJzaW9ucyB0b28/CisgIHNlZCAnJHEnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKyAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKworICBpZiB0ZXN0IHgiJHhzaV9zaGVsbCIgPSB4eWVzOyB0aGVuCisgIHNlZCAtZSAnL15mdW5jX2Rpcm5hbWUgKCkkLywvXn0gIyBmdW5jX2Rpcm5hbWUgL2NcCitmdW5jX2Rpcm5hbWUgKClcCit7XAorXCAgICBjYXNlICR7MX0gaW5cCitcICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOztcCitcICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7O1wKK1wgICAgZXNhY1wKK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Rpcm5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQordGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKworCisgIHNlZCAtZSAnL15mdW5jX2Jhc2VuYW1lICgpJC8sL159ICMgZnVuY19iYXNlbmFtZSAvY1wKK2Z1bmNfYmFzZW5hbWUgKClcCit7XAorXCAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iXAorfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYmFzZW5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQordGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKworCisgIHNlZCAtZSAnL15mdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpJC8sL159ICMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAvY1wKK2Z1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKClcCit7XAorXCAgICBjYXNlICR7MX0gaW5cCitcICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOztcCitcICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7O1wKK1wgICAgZXNhY1wKK1wgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IlwKK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisKKworICBzZWQgLWUgJy9eZnVuY19zdHJpcG5hbWUgKCkkLywvXn0gIyBmdW5jX3N0cmlwbmFtZSAvY1wKK2Z1bmNfc3RyaXBuYW1lICgpXAore1wKK1wgICAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZVwKK1wgICAgIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIHNvIGFzc2lnbiBvbmUgdG8gb3JkaW5hcnkgcGFyYW1ldGVyIGZpcnN0LlwKK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7M31cCitcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9XAorXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiR7Mn0ifVwKK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3N0cmlwbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCit0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorCisKKyAgc2VkIC1lICcvXmZ1bmNfc3BsaXRfbG9uZ19vcHQgKCkkLywvXn0gIyBmdW5jX3NwbGl0X2xvbmdfb3B0IC9jXAorZnVuY19zcGxpdF9sb25nX29wdCAoKVwKK3tcCitcICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfbmFtZT0kezElJT0qfVwKK1wgICAgZnVuY19zcGxpdF9sb25nX29wdF9hcmc9JHsxIyo9fVwKK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3NwbGl0X2xvbmdfb3B0IGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisKKworICBzZWQgLWUgJy9eZnVuY19zcGxpdF9zaG9ydF9vcHQgKCkkLywvXn0gIyBmdW5jX3NwbGl0X3Nob3J0X29wdCAvY1wKK2Z1bmNfc3BsaXRfc2hvcnRfb3B0ICgpXAore1wKK1wgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnPSR7MSM/P31cCitcICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWU9JHsxJSIkZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIn1cCit9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zcGxpdF9zaG9ydF9vcHQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQordGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKworCisgIHNlZCAtZSAnL15mdW5jX2xvMm8gKCkkLywvXn0gIyBmdW5jX2xvMm8gL2NcCitmdW5jX2xvMm8gKClcCit7XAorXCAgICBjYXNlICR7MX0gaW5cCitcICAgICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOztcCitcICAgICAgKikgICAgZnVuY19sbzJvX3Jlc3VsdD0kezF9IDs7XAorXCAgICBlc2FjXAorfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfbG8ybyBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCit0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorCisKKyAgc2VkIC1lICcvXmZ1bmNfeGZvcm0gKCkkLywvXn0gIyBmdW5jX3hmb3JtIC9jXAorZnVuY194Zm9ybSAoKVwKK3tcCisgICAgZnVuY194Zm9ybV9yZXN1bHQ9JHsxJS4qfS5sb1wKK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3hmb3JtIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisKKworICBzZWQgLWUgJy9eZnVuY19hcml0aCAoKSQvLC9efSAjIGZ1bmNfYXJpdGggL2NcCitmdW5jX2FyaXRoICgpXAore1wKKyAgICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJCogKSlcCit9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcml0aCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCit0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorCisKKyAgc2VkIC1lICcvXmZ1bmNfbGVuICgpJC8sL159ICMgZnVuY19sZW4gL2NcCitmdW5jX2xlbiAoKVwKK3tcCisgICAgZnVuY19sZW5fcmVzdWx0PSR7IzF9XAorfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfbGVuIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisKK2ZpCisKK2lmIHRlc3QgeCIkbHRfc2hlbGxfYXBwZW5kIiA9IHh5ZXM7IHRoZW4KKyAgc2VkIC1lICcvXmZ1bmNfYXBwZW5kICgpJC8sL159ICMgZnVuY19hcHBlbmQgL2NcCitmdW5jX2FwcGVuZCAoKVwKK3tcCisgICAgZXZhbCAiJHsxfSs9XFwkezJ9IlwKK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FwcGVuZCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCit0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorCisKKyAgc2VkIC1lICcvXmZ1bmNfYXBwZW5kX3F1b3RlZCAoKSQvLC9efSAjIGZ1bmNfYXBwZW5kX3F1b3RlZCAvY1wKK2Z1bmNfYXBwZW5kX3F1b3RlZCAoKVwKK3tcCitcICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiR7Mn0iXAorXCAgICBldmFsICIkezF9Kz1cXFxcIFxcJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IlwKK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FwcGVuZF9xdW90ZWQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQordGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKworCisgICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCB3aGVyZSBwb3NzaWJsZSBieSBkaXJlY3QgdXNlIG9mICcrPScKKyAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW2EtekEtWl9dXHsxLFx9XCkgIiVcMSs9IiVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCisgICAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisgICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorZWxzZQorICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgZXZlbiB3aGVuICcrPScgaXMgbm90IGF2YWlsYWJsZQorICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbYS16QS1aX11cezEsXH1cKSAiJVwxPSIkXDElZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAorICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorICAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKK2ZpCisKK2lmIHRlc3QgeCIkX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbCIgPSB4IjoiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogVW5hYmxlIHRvIHN1YnN0aXR1dGUgZXh0ZW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluICRvZmlsZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBVbmFibGUgdG8gc3Vic3RpdHV0ZSBleHRlbmRlZCBzaGVsbCBmdW5jdGlvbnMgaW4gJG9maWxlIiA+JjI7fQorZmkKKworCisgICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8CisgICAgKHJtIC1mICIkb2ZpbGUiICYmIGNwICIkY2ZnZmlsZSIgIiRvZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlIikKKyAgY2htb2QgK3ggIiRvZmlsZSIKKworCisgICAgY2F0IDw8X0xUX0VPRiA+PiAiJG9maWxlIgorCisjICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6IENYWAorCisjIFRoZSBsaW5rZXIgdXNlZCB0byBidWlsZCBsaWJyYXJpZXMuCitMRD0kbHRfTERfQ1hYCisKKyMgSG93IHRvIGNyZWF0ZSByZWxvYWRhYmxlIG9iamVjdCBmaWxlcy4KK3JlbG9hZF9mbGFnPSRsdF9yZWxvYWRfZmxhZ19DWFgKK3JlbG9hZF9jbWRzPSRsdF9yZWxvYWRfY21kc19DWFgKKworIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuIG9sZC1zdHlsZSBhcmNoaXZlLgorb2xkX2FyY2hpdmVfY21kcz0kbHRfb2xkX2FyY2hpdmVfY21kc19DWFgKKworIyBBIGxhbmd1YWdlIHNwZWNpZmljIGNvbXBpbGVyLgorQ0M9JGx0X2NvbXBpbGVyX0NYWAorCisjIElzIHRoZSBjb21waWxlciB0aGUgR05VIGNvbXBpbGVyPword2l0aF9nY2M9JEdDQ19DWFgKKworIyBDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zLgorbm9fYnVpbHRpbl9mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19DWFgKKworIyBBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHMuCitwaWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYCisKKyMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KK3dsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsX0NYWAorCisjIENvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmcuCitsaW5rX3N0YXRpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFgKKworIyBEb2VzIGNvbXBpbGVyIHNpbXVsdGFuZW91c2x5IHN1cHBvcnQgLWMgYW5kIC1vIG9wdGlvbnM/Citjb21waWxlcl9jX289JGx0X2x0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWAorCisjIFdoZXRoZXIgb3Igbm90IHRvIGFkZCAtbGMgZm9yIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMuCitidWlsZF9saWJ0b29sX25lZWRfbGM9JGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWAorCisjIFdoZXRoZXIgb3Igbm90IHRvIGRpc2FsbG93IHNoYXJlZCBsaWJzIHdoZW4gcnVudGltZSBsaWJzIGFyZSBzdGF0aWMuCithbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXM9JGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfQ1hYCisKKyMgQ29tcGlsZXIgZmxhZyB0byBhbGxvdyByZWZsZXhpdmUgZGxvcGVucy4KK2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0kbHRfZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWAorCisjIENvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgc2hhcmVkIG9iamVjdHMgZGlyZWN0bHkgZnJvbSBhcmNoaXZlcy4KK3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSRsdF93aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFgKKworIyBXaGV0aGVyIHRoZSBjb21waWxlciBjb3BlcyB3aXRoIHBhc3Npbmcgbm8gb2JqZWN0cyBkaXJlY3RseS4KK2NvbXBpbGVyX25lZWRzX29iamVjdD0kbHRfY29tcGlsZXJfbmVlZHNfb2JqZWN0X0NYWAorCisjIENyZWF0ZSBhbiBvbGQtc3R5bGUgYXJjaGl2ZSBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCitvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSRsdF9vbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX0NYWAorCisjIENyZWF0ZSBhIHRlbXBvcmFyeSBvbGQtc3R5bGUgYXJjaGl2ZSB0byBsaW5rIGluc3RlYWQgb2YgYSBzaGFyZWQgYXJjaGl2ZS4KK29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzPSRsdF9vbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc19DWFgKKworIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgc2hhcmVkIGFyY2hpdmUuCithcmNoaXZlX2NtZHM9JGx0X2FyY2hpdmVfY21kc19DWFgKK2FyY2hpdmVfZXhwc3ltX2NtZHM9JGx0X2FyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYCisKKyMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIGxvYWRhYmxlIG1vZHVsZSBpZiBkaWZmZXJlbnQgZnJvbSBidWlsZGluZworIyBhIHNoYXJlZCBhcmNoaXZlLgorbW9kdWxlX2NtZHM9JGx0X21vZHVsZV9jbWRzX0NYWAorbW9kdWxlX2V4cHN5bV9jbWRzPSRsdF9tb2R1bGVfZXhwc3ltX2NtZHNfQ1hYCisKKyMgV2hldGhlciB3ZSBhcmUgYnVpbGRpbmcgd2l0aCBHTlUgbGQgb3Igbm90Lgord2l0aF9nbnVfbGQ9JGx0X3dpdGhfZ251X2xkX0NYWAorCisjIEZsYWcgdGhhdCBhbGxvd3Mgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHVuZGVmaW5lZCBzeW1ib2xzIHRvIGJlIGJ1aWx0LgorYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGx0X2FsbG93X3VuZGVmaW5lZF9mbGFnX0NYWAorCisjIEZsYWcgdGhhdCBlbmZvcmNlcyBubyB1bmRlZmluZWQgc3ltYm9scy4KK25vX3VuZGVmaW5lZF9mbGFnPSRsdF9ub191bmRlZmluZWRfZmxhZ19DWFgKKworIyBGbGFnIHRvIGhhcmRjb2RlIFwkbGliZGlyIGludG8gYSBiaW5hcnkgZHVyaW5nIGxpbmtpbmcuCisjIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgXCRsaWJkaXIgZG9lcyBub3QgZXhpc3QKK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JGx0X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYCisKKyMgV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlICItcnBhdGgiIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudC4KK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JGx0X2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYCisKKyMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIERJUi9saWJOQU1FXCR7c2hhcmVkX2V4dH0gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCisjIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfZGlyZWN0PSRoYXJkY29kZV9kaXJlY3RfQ1hYCisKKyMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIERJUi9saWJOQU1FXCR7c2hhcmVkX2V4dH0gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCisjIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5IGFuZCB0aGUgcmVzdWx0aW5nIGxpYnJhcnkgZGVwZW5kZW5jeSBpcworIyAiYWJzb2x1dGUiLGkuZSBpbXBvc3NpYmxlIHRvIGNoYW5nZSBieSBzZXR0aW5nIFwke3NobGlicGF0aF92YXJ9IGlmIHRoZQorIyBsaWJyYXJ5IGlzIHJlbG9jYXRlZC4KK2hhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT0kaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlX0NYWAorCisjIFNldCB0byAieWVzIiBpZiB1c2luZyB0aGUgLUxESVIgZmxhZyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSCisjIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkuCitoYXJkY29kZV9taW51c19MPSRoYXJkY29kZV9taW51c19MX0NYWAorCisjIFNldCB0byAieWVzIiBpZiB1c2luZyBTSExJQlBBVEhfVkFSPURJUiBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSCisjIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkuCitoYXJkY29kZV9zaGxpYnBhdGhfdmFyPSRoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWAorCisjIFNldCB0byAieWVzIiBpZiBidWlsZGluZyBhIHNoYXJlZCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgaGFyZGNvZGVzIERJUgorIyBpbnRvIHRoZSBsaWJyYXJ5IGFuZCBhbGwgc3Vic2VxdWVudCBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFibGVzIGxpbmtlZAorIyBhZ2FpbnN0IGl0LgoraGFyZGNvZGVfYXV0b21hdGljPSRoYXJkY29kZV9hdXRvbWF0aWNfQ1hYCisKKyMgU2V0IHRvIHllcyBpZiBsaW5rZXIgYWRkcyBydW50aW1lIHBhdGhzIG9mIGRlcGVuZGVudCBsaWJyYXJpZXMKKyMgdG8gcnVudGltZSBwYXRoIGxpc3QuCitpbmhlcml0X3JwYXRoPSRpbmhlcml0X3JwYXRoX0NYWAorCisjIFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllcy4KK2xpbmtfYWxsX2RlcGxpYnM9JGxpbmtfYWxsX2RlcGxpYnNfQ1hYCisKKyMgU2V0IHRvICJ5ZXMiIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgorYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRhbHdheXNfZXhwb3J0X3N5bWJvbHNfQ1hYCisKKyMgVGhlIGNvbW1hbmRzIHRvIGxpc3QgZXhwb3J0ZWQgc3ltYm9scy4KK2V4cG9ydF9zeW1ib2xzX2NtZHM9JGx0X2V4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYCisKKyMgU3ltYm9scyB0aGF0IHNob3VsZCBub3QgYmUgbGlzdGVkIGluIHRoZSBwcmVsb2FkZWQgc3ltYm9scy4KK2V4Y2x1ZGVfZXhwc3ltcz0kbHRfZXhjbHVkZV9leHBzeW1zX0NYWAorCisjIFN5bWJvbHMgdGhhdCBtdXN0IGFsd2F5cyBiZSBleHBvcnRlZC4KK2luY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zX0NYWAorCisjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyBwcm9ncmFtcyAoYWdhaW5zdCBsaWJyYXJpZXMpIHdpdGggdGVtcGxhdGVzLgorcHJlbGlua19jbWRzPSRsdF9wcmVsaW5rX2NtZHNfQ1hYCisKKyMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBmaW5pc2hpbmcgbGlua2luZyBwcm9ncmFtcy4KK3Bvc3RsaW5rX2NtZHM9JGx0X3Bvc3RsaW5rX2NtZHNfQ1hYCisKKyMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzLgorZmlsZV9saXN0X3NwZWM9JGx0X2ZpbGVfbGlzdF9zcGVjX0NYWAorCisjIEhvdyB0byBoYXJkY29kZSBhIHNoYXJlZCBsaWJyYXJ5IHBhdGggaW50byBhbiBleGVjdXRhYmxlLgoraGFyZGNvZGVfYWN0aW9uPSRoYXJkY29kZV9hY3Rpb25fQ1hYCisKKyMgVGhlIGRpcmVjdG9yaWVzIHNlYXJjaGVkIGJ5IHRoaXMgY29tcGlsZXIgd2hlbiBjcmVhdGluZyBhIHNoYXJlZCBsaWJyYXJ5LgorY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzPSRsdF9jb21waWxlcl9saWJfc2VhcmNoX2RpcnNfQ1hYCisKKyMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvCisjIGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5LgorcHJlZGVwX29iamVjdHM9JGx0X3ByZWRlcF9vYmplY3RzX0NYWAorcG9zdGRlcF9vYmplY3RzPSRsdF9wb3N0ZGVwX29iamVjdHNfQ1hYCitwcmVkZXBzPSRsdF9wcmVkZXBzX0NYWAorcG9zdGRlcHM9JGx0X3Bvc3RkZXBzX0NYWAorCisjIFRoZSBsaWJyYXJ5IHNlYXJjaCBwYXRoIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgY29tcGlsZXIgd2hlbiBsaW5raW5nCisjIGEgc2hhcmVkIGxpYnJhcnkuCitjb21waWxlcl9saWJfc2VhcmNoX3BhdGg9JGx0X2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFgKKworIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogQ1hYCitfTFRfRU9GCisKKyA7OworICAgICJkZWZhdWx0LTEiOkMpIGNhc2UgIiRDT05GSUdfRklMRVMiIGluICpwby9NYWtlZmlsZS5pbiopCisgICAgICAgIHNlZCAtZSAiL1BPVEZJTEVTID0vciBwby9QT1RGSUxFUyIgcG8vTWFrZWZpbGUuaW4gPiBwby9NYWtlZmlsZQorICAgICAgZXNhYyA7OworICAgICJwby9zdGFtcC1pdCI6QykKKyAgICBpZiAgISBncmVwICJeIyBJTlRMVE9PTF9NQUtFRklMRSQiICJwby9NYWtlZmlsZS5pbiIgPiAvZGV2L251bGwgOyB0aGVuCisgICAgICAgYXNfZm5fZXJyb3IgJD8gInBvL01ha2VmaWxlLmluLmluIHdhcyBub3QgY3JlYXRlZCBieSBpbnRsdG9vbGl6ZS4iICIkTElORU5PIiA1CisgICAgZmkKKyAgICBybSAtZiAicG8vc3RhbXAtaXQiICJwby9zdGFtcC1pdC50bXAiICJwby9QT1RGSUxFUyIgInBvL01ha2VmaWxlLnRtcCIKKyAgICA+InBvL3N0YW1wLWl0LnRtcCIKKyAgICBzZWQgJy9eIy9kCisJIHMvXltbXS4qXSAqLy8KKwkgL15bIAldKiQvZAorCScic3xefAkkYWNfdG9wX3NyY2Rpci98IiBcCisgICAgICAiJHNyY2Rpci9wby9QT1RGSUxFUy5pbiIgfCBzZWQgJyQhcy8kLyBcXC8nID4icG8vUE9URklMRVMiCisKKyAgICBzZWQgJy9eUE9URklMRVMgPS8sL1teXFxdJC8geworCQkvXlBPVEZJTEVTID0vIWQKKwkJciBwby9QT1RGSUxFUworCSAgfQorCSAnICJwby9NYWtlZmlsZS5pbiIgPiJwby9NYWtlZmlsZSIKKyAgICBybSAtZiAicG8vTWFrZWZpbGUudG1wIgorICAgIG12ICJwby9zdGFtcC1pdC50bXAiICJwby9zdGFtcC1pdCIKKyAgIDs7CisKKyAgZXNhYworZG9uZSAjIGZvciBhY190YWcKKworCithc19mbl9leGl0IDAKK19BQ0VPRgorYWNfY2xlYW5fZmlsZXM9JGFjX2NsZWFuX2ZpbGVzX3NhdmUKKwordGVzdCAkYWNfd3JpdGVfZmFpbCA9IDAgfHwKKyAgYXNfZm5fZXJyb3IgJD8gIndyaXRlIGZhaWx1cmUgY3JlYXRpbmcgJENPTkZJR19TVEFUVVMiICIkTElORU5PIiA1CisKKworIyBjb25maWd1cmUgaXMgd3JpdGluZyB0byBjb25maWcubG9nLCBhbmQgdGhlbiBjYWxscyBjb25maWcuc3RhdHVzLgorIyBjb25maWcuc3RhdHVzIGRvZXMgaXRzIG93biByZWRpcmVjdGlvbiwgYXBwZW5kaW5nIHRvIGNvbmZpZy5sb2cuCisjIFVuZm9ydHVuYXRlbHksIG9uIERPUyB0aGlzIGZhaWxzLCBhcyBjb25maWcubG9nIGlzIHN0aWxsIGtlcHQgb3BlbgorIyBieSBjb25maWd1cmUsIHNvIGNvbmZpZy5zdGF0dXMgd29uJ3QgYmUgYWJsZSB0byB3cml0ZSB0byBpdDsgaXRzCisjIG91dHB1dCBpcyBzaW1wbHkgZGlzY2FyZGVkLiAgU28gd2UgZXhlYyB0aGUgRkQgdG8gL2Rldi9udWxsLAorIyBlZmZlY3RpdmVseSBjbG9zaW5nIGNvbmZpZy5sb2csIHNvIGl0IGNhbiBiZSBwcm9wZXJseSAocmUpb3BlbmVkIGFuZAorIyBhcHBlbmRlZCB0byBieSBjb25maWcuc3RhdHVzLiAgV2hlbiBjb21pbmcgYmFjayB0byBjb25maWd1cmUsIHdlCisjIG5lZWQgdG8gbWFrZSB0aGUgRkQgYXZhaWxhYmxlIGFnYWluLgoraWYgdGVzdCAiJG5vX2NyZWF0ZSIgIT0geWVzOyB0aGVuCisgIGFjX2NzX3N1Y2Nlc3M9OgorICBhY19jb25maWdfc3RhdHVzX2FyZ3M9CisgIHRlc3QgIiRzaWxlbnQiID0geWVzICYmCisgICAgYWNfY29uZmlnX3N0YXR1c19hcmdzPSIkYWNfY29uZmlnX3N0YXR1c19hcmdzIC0tcXVpZXQiCisgIGV4ZWMgNT4vZGV2L251bGwKKyAgJFNIRUxMICRDT05GSUdfU1RBVFVTICRhY19jb25maWdfc3RhdHVzX2FyZ3MgfHwgYWNfY3Nfc3VjY2Vzcz1mYWxzZQorICBleGVjIDU+PmNvbmZpZy5sb2cKKyAgIyBVc2UgfHwsIG5vdCAmJiwgdG8gYXZvaWQgZXhpdGluZyBmcm9tIHRoZSBpZiB3aXRoICQ/ID0gMSwgd2hpY2gKKyAgIyB3b3VsZCBtYWtlIGNvbmZpZ3VyZSBmYWlsIGlmIHRoaXMgaXMgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24uCisgICRhY19jc19zdWNjZXNzIHx8IGFzX2ZuX2V4aXQgMQorZmkKK2lmIHRlc3QgLW4gIiRhY191bnJlY29nbml6ZWRfb3B0cyIgJiYgdGVzdCAiJGVuYWJsZV9vcHRpb25fY2hlY2tpbmciICE9IG5vOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdW5yZWNvZ25pemVkIG9wdGlvbnM6ICRhY191bnJlY29nbml6ZWRfb3B0cyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1bnJlY29nbml6ZWQgb3B0aW9uczogJGFjX3VucmVjb2duaXplZF9vcHRzIiA+JjI7fQorZmkKKworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitlY2hvICIKKyAtLS17ICRQQUNLQUdFX05BTUUgJFZFUlNJT04gfS0tLQorCisgICAgcHJlZml4OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7cHJlZml4fQorICAgIHN5c2NvbmZkaXI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9CisgICAgbG9jYWxzdGF0ZWRpcjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bG9jYWxzdGF0ZWRpcn0KKyAgICBhdmFoaSBzb2NrZXQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHthdmFoaV9zb2NrZXR9CisgICAgZGJ1cy0xIHN5c3RlbS5kIGRpcjogICAgICAgICAgICAgICAgICAgICAgICR7REJVU19TWVNfRElSfQorICAgIGRidXMtMSB2ZXJzaW9uOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke0RCVVNfVkVSU0lPTn0KKyAgICBkYnVzLTEgc3lzdGVtIHNvY2tldDogICAgICAgICAgICAgICAgICAgICAgJHtEQlVTX1NZU1RFTV9CVVNfREVGQVVMVF9BRERSRVNTfQorICAgIEMgQ29tcGlsZXI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke0NDfQorICAgIENGTEFHUzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke0NGTEFHU30KKyAgICBFbmFibGUgR0xJQjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtIQVZFX0dMSUJ9CisgICAgRW5hYmxlIEdMSUIgR09iamVjdDogICAgICAgICAgICAgICAgICAgICAgICR7SEFWRV9HT0JKRUNUfQorICAgIEVuYWJsZSBHT2JqZWN0IEludHJvc3BlY3Rpb246ICAgICAgICAgICAgICAke2ZvdW5kX2ludHJvc3BlY3Rpb259CisgICAgRW5hYmxlIEdUSyAyLjA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7SEFWRV9HVEt9CisgICAgRW5hYmxlIEdUSyAzLjA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7SEFWRV9HVEszfQorICAgIEVuYWJsZSBELUJ1czogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke0hBVkVfREJVU30KKyAgICBXaXRoIFhNTDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHt3aXRoX3htbH0KKyAgICBFbmFibGUgR0RCTTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtIQVZFX0dEQk19CisgICAgRW5hYmxlIERCTTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7SEFWRV9EQk19CisgICAgRW5hYmxlIGxpYmRhZW1vbjogICAgICAgICAgICAgICAgICAgICAgICAgICR7SEFWRV9MSUJEQUVNT059CisgICAgRW5hYmxlIFB5dGhvbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7SEFWRV9QWVRIT059CisgICAgRW5hYmxlIHB5Z3RrOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7SEFWRV9QWUdUS30KKyAgICBFbmFibGUgcHl0aG9uLWRidXM6ICAgICAgICAgICAgICAgICAgICAgICAgJHtIQVZFX1BZVEhPTl9EQlVTfQorICAgIEVuYWJsZSBRVDM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke0hBVkVfUVQzfQorICAgIEVuYWJsZSBRVDQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke0hBVkVfUVQ0fQorICAgIEVuYWJsZSBNb25vOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke0hBVkVfTU9OT30KKyAgICBFbmFibGUgTW9ub2RvYzogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtIQVZFX01PTk9ET0N9CisgICAgRGlzdHJpYnV0aW9uL09TOiAgICAgICAgICAgICAgICAgICAgICAgICAgICR7d2l0aF9kaXN0cm99CisgICAgVXNlciBmb3IgYXZhaGktZGFlbW9uOiAgICAgICAgICAgICAgICAgICAgICR7QVZBSElfVVNFUn0KKyAgICBHcm91cCBmb3IgYXZhaGktZGFlbW9uOiAgICAgICAgICAgICAgICAgICAgJHtBVkFISV9HUk9VUH0KKyAgICBQcml2aWxpZ2VkIGFjY2VzcyBncm91cCBmb3IgQXZhaGkgY2xpZW50czogJHtBVkFISV9QUklWX0FDQ0VTU19HUk9VUH0KKyAgICBVc2VyIGZvciBhdmFoaS1hdXRvaXBkOiAgICAgICAgICAgICAgICAgICAgJHtBVkFISV9BVVRPSVBEX1VTRVJ9CisgICAgR3JvdXAgZm9yIGF2YWhpLWF1dG9pcGQ6ICAgICAgICAgICAgICAgICAgICR7QVZBSElfQVVUT0lQRF9HUk9VUH0KKyAgICBFbmFibGUgY2hyb290KCk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtlbmFibGVfY2hyb290fQorICAgIEVuYWJsZSBMaW51eCBpbm90aWZ5OiAgICAgICAgICAgICAgICAgICAgICAke2hhdmVfaW5vdGlmeX0KKyAgICBFbmFibGUgc3RhY2stc21hc2hpbmcgcHJvdGVjdGlvbjogICAgICAgICAgJHtlbmFibGVfc3NwfQorICAgIHN5c3RlbWQgdW5pdCBkaXJlY3Rvcnk6ICAgICAgICAgICAgICAgICAgICAke3dpdGhfc3lzdGVtZHN5c3RlbXVuaXRkaXJ9CisiCisKK0JVSUxEX0RBRU1PTj0ibm8gICAoWW91IG5lZWQgbGliZGFlbW9uIGFuZCBleHBhdC9ic2R4bWwhKSIKKworaWYgdGVzdCAieCRIQVZFX1hNTCIgPSAieHllcyIgLWEgIngkSEFWRV9MSUJEQUVNT04iID0gInh5ZXMiIDsgdGhlbgorICAgIEJVSUxEX0RBRU1PTj15ZXMKK2ZpCisKK0JVSUxEX1BZVEhPTj0ibm8gICAoWW91IG5lZWQgcHl0aG9uLCBweWd0ayBhbmQgcHl0aG9uLWRidXMhKSIKKworaWYgdGVzdCAieCRCVUlMRF9EQUVNT04iID0gInh5ZXMiIC1hICJ4JEhBVkVfREJVUyIgPSAieHllcyIgLWEgIngkSEFWRV9QWVRIT04iID0gInh5ZXMiIC1hICJ4JEhBVkVfUFlUSE9OX0RCVVMiID0gInh5ZXMiIC1hICJ4JEhBVkVfUFlHVEsiID0gInh5ZXMiIDsgdGhlbgorICAgIEJVSUxEX1BZVEhPTj15ZXMKK2ZpCisKK0JVSUxEX0NMSUVOVD0ibm8gICAoWW91IG5lZWQgYXZhaGktZGFlbW9uIGFuZCBELUJ1cyEpIgorCitpZiB0ZXN0ICJ4JEJVSUxEX0RBRU1PTiIgPSAieHllcyIgLWEgIngkSEFWRV9EQlVTIiA9ICJ4eWVzIiA7IHRoZW4KKyAgICBCVUlMRF9DTElFTlQ9eWVzCitmaQorCitpZiB0ZXN0ICJ4JEVOQUJMRV9DT01QQVRfTElCRE5TX1NEIiA9ICJ4eWVzIiAtYSAieCRCVUlMRF9DTElFTlQiICE9ICJ4eWVzIiA7IHRoZW4KKyAgIEVOQUJMRV9DT01QQVRfTElCRE5TX1NEPSJubyAgIChZb3UgbmVlZCBsaWJhdmFoaS1jbGllbnQhKSIKK2ZpCitpZiB0ZXN0ICJ4JEVOQUJMRV9DT01QQVRfSE9XTCIgPSAieHllcyIgLWEgIngkQlVJTERfQ0xJRU5UIiAhPSAieHllcyIgOyB0aGVuCisgICBFTkFCTEVfQ09NUEFUX0hPV0w9Im5vICAgKFlvdSBuZWVkIGxpYmF2YWhpLWNsaWVudCEpIgorZmkKK2lmIHRlc3QgIngkRU5BQkxFX0FVVE9JUEQiID0gInh5ZXMiIC1hICJ4JEhBVkVfTElCREFFTU9OIiAhPSAieHllcyIgOyB0aGVuCisgICBFTkFCTEVfQVVUT0lQRD0ibm8gICAoWW91IG5lZWQgbGliZGFlbW9uISkiCitmaQorCitIQVZFX0dUSzJPUjM9bm8KK2lmIHRlc3QgIngkSEFWRV9HVEsiID0gInh5ZXMiIC1vICJ4JEhBVkVfR1RLMyIgPSAieHllcyIgOyB0aGVuCisgICBIQVZFX0dUSzJPUjM9eWVzCitmaQorCitCVUlMRF9VST0ibm8iCitpZiB0ZXN0ICJ4JEhBVkVfR1RLMk9SMyIgPSAieHllcyIgLWEgIngkQlVJTERfQ0xJRU5UIiA9ICJ4eWVzIiA7IHRoZW4KKyAgIEJVSUxEX1VJPSJ5ZXMiCitmaQorCitCVUlMRF9HT0JKRUNUPSJubyIKK2lmIHRlc3QgIngkQlVJTERfQ0xJRU5UIiA9ICJ4eWVzIiAtYSAieCRIQVZFX0dPQkpFQ1QiID0gInh5ZXMiIDsgdGhlbgorICAgQlVJTERfR09CSkVDVD0ieWVzIgorZmkKKworZWNobyAiXAorICAgIEJ1aWxkaW5nIGxpYmF2YWhpLWNvcmUgICAgICAgICAgICAgIHllcworICAgIEJ1aWxkaW5nIGF2YWhpLWRhZW1vbjogICAgICAgICAgICAgICR7QlVJTERfREFFTU9OfQorICAgIEJ1aWxkaW5nIGF2YWhpLWRuc2NvbmZkOiAgICAgICAgICAgICR7QlVJTERfREFFTU9OfQorICAgIEJ1aWxkaW5nIGxpYmF2YWhpLWNsaWVudDogICAgICAgICAgICR7QlVJTERfQ0xJRU5UfQorICAgIEJ1aWxkaW5nIGF2YWhpLXV0aWxzOiAgICAgICAgICAgICAgICR7QlVJTERfQ0xJRU5UfQorICAgIEJ1aWxkaW5nIGF2YWhpLXB5dGhvbjogICAgICAgICAgICAgICR7QlVJTERfUFlUSE9OfQorICAgIEJ1aWxkaW5nIGxpYmF2YWhpLWdsaWI6ICAgICAgICAgICAgICR7SEFWRV9HTElCfQorICAgIEJ1aWxkaW5nIGxpYmF2YWhpLWdvYmplY3Q6ICAgICAgICAgICR7QlVJTERfR09CSkVDVH0KKyAgICBCdWlsZGluZyBhdmFoaS1kaXNjb3Zlci1zdGFuZGFsb25lOiAke0hBVkVfR1RLMk9SM30KKyAgICBCdWlsZGluZyBsaWJhdmFoaS1xdDM6ICAgICAgICAgICAgICAke0hBVkVfUVQzfQorICAgIEJ1aWxkaW5nIGxpYmF2YWhpLXF0NDogICAgICAgICAgICAgICR7SEFWRV9RVDR9CisgICAgQnVpbGRpbmcgYXZhaGktc2hhcnA6ICAgICAgICAgICAgICAgJHtIQVZFX01PTk99CisgICAgQnVpbGRpbmcgYXZhaGktY29tcGF0LWxpYmRuc19zZDogICAgJHtFTkFCTEVfQ09NUEFUX0xJQkROU19TRH0KKyAgICBCdWlsZGluZyBhdmFoaS1jb21wYXQtaG93bDogICAgICAgICAke0VOQUJMRV9DT01QQVRfSE9XTH0KKyAgICBCdWlsZGluZyB0ZXN0czogICAgICAgICAgICAgICAgICAgICAke0VOQUJMRV9URVNUU30KKyAgICBCdWlsZGluZyBhdmFoaS1jb3JlIGRvY3VtZW50YXRpb246ICAke0VOQUJMRV9DT1JFX0RPQ1N9CisgICAgQnVpbGRpbmcgYXZhaGktYXV0b2lwZDogICAgICAgICAgICAgJHtFTkFCTEVfQVVUT0lQRH0KKyAgICBCdWlsZGluZyBsaWJhdmFoaS11aTogICAgICAgICAgICAgICAke0JVSUxEX1VJfQorIgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2NvbmZpZ3VyZS5hYyBiL2F2YWhpLTAuNi4zMS9jb25maWd1cmUuYWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUxOTBiYQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9jb25maWd1cmUuYWMKQEAgLTAsMCArMSwxMjM2IEBACisjIC0qLSBBdXRvY29uZiAtKi0KKyMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvY29uZiB0byBwcm9kdWNlIGEgY29uZmlndXJlIHNjcmlwdC4KKworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKyMKKyMgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyMgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyMgVVNBLgorCitBQ19QUkVSRVEoMi42MykKK0FDX0lOSVQoW2F2YWhpXSxbMC42LjMxXSxbYXZhaGkgKGF0KSBsaXN0cyAoZG90KSBmcmVlZGVza3RvcCAoZG90KSBvcmddKQorQUNfQ09ORklHX1NSQ0RJUihbYXZhaGktY29yZS9zZXJ2ZXIuY10pCitBQ19DT05GSUdfTUFDUk9fRElSKFtjb21tb25dKQorQUNfQ09ORklHX0hFQURFUlMoW2NvbmZpZy5oXSkKK0FNX0lOSVRfQVVUT01BS0UoW2ZvcmVpZ24gMS4xMSAtV2FsbCAtV25vLXBvcnRhYmlsaXR5IHNpbGVudC1ydWxlcyB0YXItcGF4XSkKKworQUNfU1VCU1QoUEFDS0FHRV9VUkwsIFtodHRwOi8vYXZhaGkub3JnL10pCisKK0FDX1NVQlNUKExJQkFWQUhJX0NPTU1PTl9WRVJTSU9OX0lORk8sIFs4OjM6NV0pCitBQ19TVUJTVChMSUJBVkFISV9DT1JFX1ZFUlNJT05fSU5GTywgWzc6MjowXSkKK0FDX1NVQlNUKExJQkFWQUhJX0NMSUVOVF9WRVJTSU9OX0lORk8sIFs1Ojk6Ml0pCitBQ19TVUJTVChMSUJBVkFISV9HTElCX1ZFUlNJT05fSU5GTywgWzE6MjowXSkKK0FDX1NVQlNUKExJQkFWQUhJX0dPQkpFQ1RfVkVSU0lPTl9JTkZPLCBbMDo0OjBdKQorQUNfU1VCU1QoTElCQVZBSElfUVQzX1ZFUlNJT05fSU5GTywgWzE6MjowXSkKK0FDX1NVQlNUKExJQkFWQUhJX1FUNF9WRVJTSU9OX0lORk8sIFsxOjI6MF0pCitBQ19TVUJTVChMSUJBVkFISV9VSV9WRVJTSU9OX0lORk8sIFsxOjQ6MV0pCisKKyMgRG8gbm90IHRvdWNoIHRoZXNlLCBzaW5jZSB0aGV5IHdlIHRvb2sgdGhpcyB2ZXJzaW9uLWluZm8gZnJvbSB1cHN0cmVhbSBIT1dML0JvbmpvdXIKK0FDX1NVQlNUKExJQkFWQUhJX0NPTVBBVF9MSUJETlNfU0RfVkVSU0lPTl9JTkZPLCBbMTowOjBdKQorQUNfU1VCU1QoTElCQVZBSElfQ09NUEFUX0hPV0xfVkVSU0lPTl9JTkZPLCBbMDowOjBdKQorQUNfU1VCU1QoSE9XTF9DT01QQVRfVkVSU0lPTiwgWzAuOS44XSkKKworQUNfQ0FOT05JQ0FMX0hPU1QKKworQU1fU0lMRU5UX1JVTEVTKFt5ZXNdKQorCitBQ19DSEVDS19QUk9HKFtTVE9XXSwgW3N0b3ddLCBbeWVzXSwgW25vXSkKKworQVNfSUYoW3Rlc3QgIngkU1RPVyIgPSAieHllcyIgJiYgdGVzdCAtZCAvdXNyL2xvY2FsL3N0b3ddLCBbCisgICAgICAgIEFDX01TR19OT1RJQ0UoWyoqKiBGb3VuZCAvdXNyL2xvY2FsL3N0b3c6IGRlZmF1bHQgaW5zdGFsbCBwcmVmaXggc2V0IHRvIC91c3IvbG9jYWwvc3Rvdy8ke1BBQ0tBR0VfTkFNRX0tJHtQQUNLQUdFX1ZFUlNJT059ICoqKl0pCisgICAgICAgIGFjX2RlZmF1bHRfcHJlZml4PSIvdXNyL2xvY2FsL3N0b3cvJHtQQUNLQUdFX05BTUV9LSR7UEFDS0FHRV9WRVJTSU9OfSIKK10pCisKKyMgQ2hlY2tzIGZvciBwcm9ncmFtcy4KK0FDX1BST0dfQ0MKK0FDX1BST0dfQ0NfQzk5CitBQ19QUk9HX0NYWAorQU1fUFJPR19DQ19DX08KK0FDX1VTRV9TWVNURU1fRVhURU5TSU9OUworQUNfUFJPR19DUFAKK0FDX1BST0dfSU5TVEFMTAorQUNfUFJPR19MTl9TCitBQ19QUk9HX01BS0VfU0VUCitBQ19QUk9HX0dDQ19UUkFESVRJT05BTAorCisjIC1mc3RhY2stcHJvdGVjdG9yCitBQ19BUkdfRU5BQkxFKFtzdGFjay1wcm90ZWN0b3JdLAorICAgIFtBU19IRUxQX1NUUklORyhbLS1kaXNhYmxlLXN0YWNrLXByb3RlY3Rvcl0sCisgICAgICAgIFtEaXNhYmxlIEdDQydzL2xpYmMncyBzdGFjay1zbWFzaGluZyBwcm90ZWN0aW9uXSldLAorICAgIFtjYXNlICIke2VuYWJsZXZhbH0iIGluCisgICAgICAgICB5ZXMpIGVuYWJsZV9zc3A9eWVzIDs7CisgICAgICAgICAgbm8pIGVuYWJsZV9zc3A9bm8gOzsKKyAgICAgICAgICAgKikgQUNfTVNHX0VSUk9SKFtpbnZhbGlkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1kaXNhYmxlLXN0YWNrLXByb3RlY3Rvcl0pIDs7CisgICAgIGVzYWNdLAorICAgIFtlbmFibGVfc3NwPXllc10pCisKK2lmIHRlc3QgeCIkZW5hYmxlX3NzcCIgPSB4InllcyIgJiYgdGVzdCB4IiRHQ0MiICE9IHgieWVzIjsgdGhlbgorICAgIEFDX01TR19OT1RJQ0UoW0Rpc2FibGluZyBzdGFjay1zbWFzaGluZyBwcm90ZWN0aW9uIGJlY2F1c2UgY29tcGlsZXIgaXMgbm90IEdDQ10pCisgICAgZW5hYmxlX3NzcD1ubworZmkKKworaWYgdGVzdCB4IiRlbmFibGVfc3NwIiA9IHgieWVzIjsgdGhlbgorICAgICMgQ2hlY2sgZm9yIGJyb2tlbiBzc3AgaW4gbGliYzogaHR0cDovL3d3dy5hdmFoaS5vcmcvdGlja2V0LzEwNQorICAgICMgbGliYydzIGJyb2tlbm5lc3Mgd2lsbCBnZXQgaW4gdGhlIHdheSByZWdhcmRsZXNzIG9mIHdoZXRoZXIgLWxzc3AgaXMKKyAgICAjIHByb3ZpZGVkLCBidXQgcHJvdmlkZSBpdCBhbnl3YXkgKG90aGVyd2lzZSBub24tbGliYyBzc3Agd291bGQgd3JvbmdseQorICAgICMgYnJlYWsgaGVyZSkKKworICAgICMgR2V0IC1sc3NwIGlmIGl0IGV4aXN0cworICAgIEdDQ19TVEFDS19QUk9URUNUX0xJQgorCisgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHN0YWNrLXNtYXNoaW5nIHByb3RlY3Rpb24gaXMgYXZhaWxhYmxlXSkKKyAgICBzc3Bfb2xkX2NmbGFncz0iJENGTEFHUyIKKyAgICBzc3Bfb2xkX2xkZmxhZ3M9IiRMREZMQUdTIgorICAgIENGTEFHUz0iJENGTEFHUyAtV2Vycm9yIC1mc3RhY2stcHJvdGVjdG9yLWFsbCAtZlBJQyIKKyAgICBMREZMQUdTPSIkTERGTEFHUyAtV2wsLXosZGVmcyIKKyAgICBjYXQgY29uZmRlZnMuaCA+IGNvbmZ0ZXN0LmMKKyAgICBjYXQgPj5jb25mdGVzdC5jIDw8X0FDRU9GCit2b2lkIHRlc3RfYnJva2VuX3NzcChjKQorICAgIGNvbnN0IGNoYXIgKmM7Cit7CisgICAgY2hhciBhcnJbWzEyM11dLCAqcDsgLyogYmV3YXJlIG9mIHBvc3NpYmxlIGRvdWJsZS1icmFjZXMgaWYgY29weWluZyB0aGlzICovCisgICAgZm9yIChwID0gYXJyOyAqYzsgKytwKSB7CisgICAgICAgICpwID0gKmM7CisgICAgICAgICsrYzsKKyAgICB9Cit9CitfQUNFT0YKKyAgICBybSAtZiBjb25mdGVzdC5vCisKKyAgICBpZiAkQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgLW8gY29uZnRlc3QubyBjb25mdGVzdC5jID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgc3RhY2stc21hc2hpbmcgcHJvdGVjdGlvbiBpcyBidWdneV0pCisgICAgICAgIGlmICRDQyAtbyBjb25mdGVzdC5zbyAkTERGTEFHUyAtc2hhcmVkIGNvbmZ0ZXN0Lm8gJExJQlMgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICAgICAgICBlbmFibGVfc3NwPW5vCisgICAgICAgIGZpCisgICAgZWxzZQorICAgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgZmkKKworICAgIHJtIC1mIGNvbmZ0ZXN0LmMgY29uZnRlc3QubyBjb25mdGVzdC5zbworCisgICAgQ0ZMQUdTPSIkc3NwX29sZF9jZmxhZ3MiCisgICAgTERGTEFHUz0iJHNzcF9vbGRfbGRmbGFncyIKK2ZpCisKK2lmIHRlc3QgeCIkZW5hYmxlX3NzcCIgPSB4InllcyI7IHRoZW4KKyAgICAjIERvIHRoaXMgdGhlIGxvbmcgd2F5IHNvIHdlIGRvbid0IGNhbGwgR0NDX1NUQUNLX1BST1RFQ1RfTElCIHR3aWNlCisgICAgR0NDX1NUQUNLX1BST1RFQ1RfQ0MKKworICAgIEFDX0xBTkdfUFVTSChbQysrXSkKKyAgICBHQ0NfU1RBQ0tfUFJPVEVDVF9DWFgKKyAgICBBQ19MQU5HX1BPUChbQysrXSkKKyAgICAjIFhYWDogVXBkYXRlIHRoZSBlbmFibGVfc3NwIHZhbHVlIG5vdyBmb3Igb3V0cHV0IGxhdGVyPworZmkKKworIyBsaWJ0b29sIHN0dWZmCitBQ19QUk9HX0xJQlRPT0wKKworQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdGhlIEMrKyBjb21waWxlciB3b3Jrc10sIFthdmFoaV9jdl9zeXNfY3h4X3dvcmtzXSwgWworICAgIEFDX0xBTkdfUFVTSChbQysrXSkKKyAgICBBQ19DT01QSUxFX0lGRUxTRShbaW50IG1haW4oKSB7IHJldHVybiAwOyB9XSwgW2F2YWhpX2N2X3N5c19jeHhfd29ya3M9eWVzXSwKKyAgICAgICAgW2F2YWhpX2N2X3N5c19jeHhfd29ya3M9bm9dKQorICAgIEFDX0xBTkdfUE9QKFtDKytdKQorICAgIF0pCitbIGlmIFsgIngkYXZhaGlfY3Zfc3lzX2N4eF93b3JrcyIgPSAieG5vIiBdOyB0aGVuIF0KKyAgICBBQ19NU0dfRkFJTFVSRShbVGhlIEMrKyBjb21waWxlciBkb2VzIG5vdCB3b3JrXSkKK1sgZmkgXQorCitBQ1hfUFRIUkVBRCgsQUNfTVNHX0VSUk9SKFtNaXNzaW5nIFBPU0lYIFRocmVhZHMgc3VwcG9ydF0pKQorCisjCisjIENoZWNrIGZvciBuZXRsaW5rLmgKKyMKK0FDX0NIRUNLX0hFQURFUihsaW51eC9uZXRsaW5rLmgsCitIQVZFX05FVExJTks9eWVzCitBQ19ERUZJTkUoW0hBVkVfTkVUTElOS10sW10sW1N1cHBvcnQgZm9yIExpbnV4IG5ldGxpbmtdKQorLCBbXSwgWworI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KK10pCisKK0FNX0NPTkRJVElPTkFMKEhBVkVfTkVUTElOSywgWyB0ZXN0IHgiJEhBVkVfTkVUTElOSyIgPSB4eWVzIF0pCisKKyMKKyMgQ2hlY2sgZm9yIG5ldC9yb3V0ZS5oCisjCitBQ19DSEVDS19IRUFERVIobmV0L3JvdXRlLmgsCitIQVZFX1BGX1JPVVRFPXllcworQUNfREVGSU5FKFtIQVZFX1BGX1JPVVRFXSxbXSxbU3VwcG9ydCBmb3IgUEZfUk9VVEVdKQorLCBbXSwgWworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXQvaWZfZGwuaD4KK10pCisKK0FNX0NPTkRJVElPTkFMKEhBVkVfUEZfUk9VVEUsIFsgdGVzdCB4IiRIQVZFX1BGX1JPVVRFIiA9IHh5ZXMgXSkKKworIworIyBDaGVjayBmb3Igc3lzL2ZpbGlvLmg7IG5lZWRlZCBmb3IgRklPTlJFQUQgb24gU29sYXJpcworIworQUNfQ0hFQ0tfSEVBREVSKHN5cy9maWxpby5oLAorSEFWRV9TWVNfRklMSU9fSD15ZXMKK0FDX0RFRklORShbSEFWRV9TWVNfRklMSU9fSF0sW10sW1N1cHBvcnQgZm9yIHN5cy9maWxpby5oXSkKKywgW10sIFsKK10pCisKK0FNX0NPTkRJVElPTkFMKEhBVkVfU1lTX0ZJTElPX0gsIFsgdGVzdCB4IiRIQVZFX1NZU19GSUxJT19IIiA9IHh5ZXMgXSkKKworIworIyBDaGVjayBmb3Igc3lzL3N5c2N0bC5oOyBub3QgcHJlc2VudCBvbiBTb2xhcmlzCisjCitBQ19DSEVDS19IRUFERVIoc3lzL3N5c2N0bC5oLAorSEFWRV9TWVNfU1lTQ1RMPXllcworQUNfREVGSU5FKFtIQVZFX1NZU19TWVNDVExfSF0sW10sW1N1cHBvcnQgZm9yIHN5cy9zeXNjdGwuaF0pCissIFtdLCBbCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorXSkKKworQU1fQ09ORElUSU9OQUwoSEFWRV9TWVNfU1lTQ1RMX0gsIFsgdGVzdCB4IiRIQVZFX1NZU19TWVNDVExfSCIgPSB4eWVzIF0pCisKKyMKKyMgQ2hlY2sgZm9yIGxpZmNvbmYgc3RydWN0OyBvbmx5IHByZXNlbnQgb24gU29sYXJpcworIworQUNfTVNHX0NIRUNLSU5HKGZvciBzdHJ1Y3QgbGlmY29uZikKK0FDX0NBQ0hFX1ZBTChhdmFoaV9jdl9oYXNfc3RydWN0X2xpZmNvbmYsCitbQUNfVFJZX0NPTVBJTEUoCitbI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXQvaWYuaD4KK10sW3NpemVvZiAoc3RydWN0IGxpZmNvbmYpO10sCithdmFoaV9jdl9oYXNfc3RydWN0X2xpZmNvbmY9eWVzLGF2YWhpX2N2X2hhc19zdHJ1Y3RfbGlmY29uZj1ubyldKQorQUNfTVNHX1JFU1VMVCgkYXZhaGlfY3ZfaGFzX3N0cnVjdF9saWZjb25mKQoraWYgdGVzdCAkYXZhaGlfY3ZfaGFzX3N0cnVjdF9saWZjb25mID0geWVzOyB0aGVuCisgICAgQUNfREVGSU5FKEhBVkVfU1RSVUNUX0xJRkNPTkYsMSxbRGVmaW5lIGlmIHRoZXJlIGlzIGEgc3RydWN0IGxpZmNvbmYuXSkKK2ZpCisKKyMKKyMgQ2hlY2sgZm9yIHN0cnVjdCBpcF9tcmVxbgorIworQUNfTVNHX0NIRUNLSU5HKGZvciBzdHJ1Y3QgaXBfbXJlcW4pCitBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPG5ldGluZXQvaW4uaD5dLCBbCisJc3RydWN0IGlwX21yZXFuIG1yZXE7CisJbXJlcS5pbXJfYWRkcmVzcy5zX2FkZHIgPSAwOworXSwgWworCSMgWWVzLCB3ZSBoYXZlIGl0Li4uCisJQUNfTVNHX1JFU1VMVCh5ZXMpCisJQUNfREVGSU5FKFtIQVZFX1NUUlVDVF9JUF9NUkVRTl0sW10sW1N1cHBvcnQgZm9yIHN0cnVjdCBpcF9tcmVxbl0pCitdLCBbCisJIyBXZSdsbCBqdXN0IGhhdmUgdG8gdHJ5IGFuZCB1c2Ugc3RydWN0IGlwX21yZXEKKwlBQ19NU0dfUkVTVUxUKG5vKQorCUFDX01TR19DSEVDS0lORyhmb3Igc3RydWN0IGlwX21yZXEpCisJQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+XSwgWworCQlzdHJ1Y3QgaXBfbXJlcSBtcmVxOworCQltcmVxLmltcl9pbnRlcmZhY2Uuc19hZGRyID0gMDsKKwldLCBbCisJCSMgWWVzLCB3ZSBoYXZlIGl0Li4uCisJCUFDX01TR19SRVNVTFQoeWVzKQorCQlBQ19ERUZJTkUoW0hBVkVfU1RSVUNUX0lQX01SRVFdLFtdLFtTdXBwb3J0IGZvciBzdHJ1Y3QgaXBfbXJlcV0pCisJXSwgWworCQkjIE5vIG11bHRpY2FzdCBzdXBwb3J0CisJCQlBQ19NU0dfUkVTVUxUKG5vKQorCV0pCitdKQorCisjCisjIERldGVjdGluZyB0aGUgbGludXggZGlzdHJpYnV0aW9uIGZvciBzcGVjaWZpYyB0aGluZ3MgbGlrZSBpbml0IHNjcmlwdHMuCisjCitBQ19BUkdfV0lUSChkaXN0cm8sIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtZGlzdHJvPURJU1RST10sW1NwZWNpZnkgdGhlIGRpc3RyaWJ1dGlvbiB0byB0YXJnZXQ6IE9uZSBvZiBsZnMsIGRlYmlhbiwgZ2VudG9vLCBhcmNobGludXgsIGZlZG9yYSwgbWFuZHJpdmEsIGRhcndpbiwgbmV0YnNkLCBmcmVlYnNkLCBzbGFja3dhcmUgb3Igbm9uZV0pKQoraWYgdGVzdCAieiR3aXRoX2Rpc3RybyIgPSAieiI7IHRoZW4KKyAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICAgICAgICBBQ19NU0dfV0FSTihbVGFyZ2V0IGRpc3RyaWJ1dGlvbiBjYW5ub3QgYmUgcmVsaWFibHkgZGV0ZWN0ZWQgd2hlbiBjcm9zcy1jb21waWxpbmcuIFlvdSBzaG91bGQgc3BlY2lmeSBpdCB3aXRoIC0td2l0aC1kaXN0cm8gKHNlZSAkMCAtLWhlbHAgZm9yIHJlY29nbml6ZWQgZGlzdHJvcyldKQorICAgIGVsc2UKKyAgICAgICAgQUNfQ0hFQ0tfRklMRSgvZXRjL2xmcy1yZWxlYXNlLHdpdGhfZGlzdHJvPSJsZnMiKQorICAgICAgICBBQ19DSEVDS19GSUxFKC9ldGMvU3VTRS1yZWxlYXNlLHdpdGhfZGlzdHJvPSJzdXNlIikKKyAgICAgICAgQUNfQ0hFQ0tfRklMRSgvZXRjL2dlbnRvby1yZWxlYXNlLHdpdGhfZGlzdHJvPSJnZW50b28iKQorICAgICAgICBBQ19DSEVDS19GSUxFKC9ldGMvYXJjaC1yZWxlYXNlLHdpdGhfZGlzdHJvPSJhcmNobGludXgiKQorICAgICAgICBBQ19DSEVDS19GSUxFKC9ldGMvZGViaWFuX3ZlcnNpb24sd2l0aF9kaXN0cm89ImRlYmlhbiIpCisgICAgICAgIEFDX0NIRUNLX0ZJTEUoL2V0Yy9yZWRoYXQtcmVsZWFzZSx3aXRoX2Rpc3Rybz0iZmVkb3JhIikKKyAgICAgICAgQUNfQ0hFQ0tfRklMRSgvZXRjL21hbmRyaXZhLXJlbGVhc2Usd2l0aF9kaXN0cm89Im1hbmRyaXZhIikKKyAgICAgICAgQUNfQ0hFQ0tfRklMRSgvZXRjL3NsYWNrd2FyZS12ZXJzaW9uLHdpdGhfZGlzdHJvPSJzbGFja3dhcmUiKQorICAgIGZpCisgICAgaWYgdGVzdCAieiR3aXRoX2Rpc3RybyIgPSAieiI7IHRoZW4KKyAgICAgICAgd2l0aF9kaXN0cm89YHVuYW1lIC1zYAorICAgIGZpCitmaQord2l0aF9kaXN0cm89YGVjaG8gJHt3aXRoX2Rpc3Ryb30gfCB0ciAnW1s6dXBwZXI6XV0nICdbWzpsb3dlcjpdXScgYAorCitjYXNlICR3aXRoX2Rpc3RybyBpbgorICAgIGxmc3xkZWJpYW58Z2VudG9vfGFyY2hsaW51eHxzdXNlfGZlZG9yYXxtYW5kcml2YXxkYXJ3aW58ZnJlZWJzZHxzbGFja3dhcmV8bm9uZSkKKyAgICAgOzsKKyAgICBuZXRic2QpCisgICAgIEFDX01TR19XQVJOKFtZb3VyIGRpc3RyaWJ1dGlvbiAoJHt3aXRoX2Rpc3Ryb30pIGlzIHN1cHBvcnRlZCBidXQgbm8gaW5pdCBzY3JpcHQgZXhpc3QgeWV0ISAocGF0Y2hlcyB3ZWxjb21lKV0pCisgICAgIDs7CisgICAgbGludXgpCisgICAgIEFDX01TR19FUlJPUihbTGludXggZGlzdHJpYnV0aW9uIGF1dG9kZXRlY3Rpb24gZmFpbGVkLCB5b3UgbXVzdCBzcGVjaWZ5IHRoZSBkaXN0cmlidXRpb24gdG8gdGFyZ2V0IHVzaW5nIC0td2l0aC1kaXN0cm89RElTVFJPLCBzZXQgRElTVFJPIHRvIG5vbmUgaWYgeW91ciBkaXN0cmlidXRpb24gaXMgbm90IHN1cHBvcnRlZC5dKQorICAgICA7OworICAgICopCisgICAgIEFDX01TR19FUlJPUihbWW91ciBkaXN0cmlidXRpb24gKCR7d2l0aF9kaXN0cm99KSBpcyBub3QgeWV0IHN1cHBvcnRlZCwgaW5pdCBzY3JpcHRzIGFuZCBELUJ1cyBjb25maWd1cmF0aW9uIHdpbGwgbm90IGJlIGluc3RhbGxlZCEgKHBhdGNoZXMgd2VsY29tZSksIHlvdSBjYW4gc3BlY2lmeSAtLXdpdGgtZGlzdHJvPW5vbmUgdG8gc2tpcCB0aGlzIGNoZWNrXSkKKyAgICAgOzsKK2VzYWMKKworQU1fQ09ORElUSU9OQUwoVEFSR0VUX0xGUywgdGVzdCB4IiR3aXRoX2Rpc3RybyIgPSB4bGZzKQorQU1fQ09ORElUSU9OQUwoVEFSR0VUX1NVU0UsIHRlc3QgeCIkd2l0aF9kaXN0cm8iID0geHN1c2UpCitBTV9DT05ESVRJT05BTChUQVJHRVRfR0VOVE9PLCB0ZXN0IHgiJHdpdGhfZGlzdHJvIiA9IHhnZW50b28pCitBTV9DT05ESVRJT05BTChUQVJHRVRfREVCSUFOLCB0ZXN0IHgiJHdpdGhfZGlzdHJvIiA9IHhkZWJpYW4pCitBTV9DT05ESVRJT05BTChUQVJHRVRfQVJDSExJTlVYLCB0ZXN0IHgiJHdpdGhfZGlzdHJvIiA9IHhhcmNobGludXgpCitBTV9DT05ESVRJT05BTChUQVJHRVRfRkVET1JBLCB0ZXN0IHgiJHdpdGhfZGlzdHJvIiA9IHhmZWRvcmEpCitBTV9DT05ESVRJT05BTChUQVJHRVRfTUFORFJJVkEsIHRlc3QgeCIkd2l0aF9kaXN0cm8iID0geG1hbmRyaXZhKQorQU1fQ09ORElUSU9OQUwoVEFSR0VUX0RBUldJTiwgdGVzdCB4IiR3aXRoX2Rpc3RybyIgPSB4ZGFyd2luKQorQU1fQ09ORElUSU9OQUwoVEFSR0VUX05FVEJTRCwgdGVzdCB4IiR3aXRoX2Rpc3RybyIgPSB4bmV0YnNkKQorQU1fQ09ORElUSU9OQUwoVEFSR0VUX0ZSRUVCU0QsIHRlc3QgeCIkd2l0aF9kaXN0cm8iID0geGZyZWVic2QpCitBTV9DT05ESVRJT05BTChUQVJHRVRfU0xBQ0tXQVJFLCB0ZXN0IHgiJHdpdGhfZGlzdHJvIiA9IHhzbGFja3dhcmUpCisKK3Rlc3RfZ2NjX2ZsYWcoKSB7CisgICAgQUNfTEFOR19DT05GVEVTVChbaW50IG1haW4oKSB7fV0pCisgICAgJENDIC1jIGNvbmZ0ZXN0LmMgJENGTEFHUyAkQCA+IC9kZXYvbnVsbCAyPiAvZGV2L251bGwKKyAgICByZXQ9JD8KKyAgICBybSAtZiBjb25mdGVzdC5vCisgICAgcmV0dXJuICRyZXQKK30KKworIyBJZiB1c2luZyBHQ0Mgc3BlY2lmeSBzb21lIGFkZGl0aW9uYWwgcGFyYW1ldGVycworaWYgdGVzdCAieCRHQ0MiID0gInh5ZXMiIDsgdGhlbgorCisgICAgREVTSVJFRF9GTEFHUz0iLVdhbGwgLVcgLVdleHRyYSAtcGVkYW50aWMgLXBpcGUgLVdmb3JtYXQgLVdvbGQtc3R5bGUtZGVmaW5pdGlvbiAtV2RlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudCAtV2Zsb2F0LWVxdWFsIC1XbWlzc2luZy1kZWNsYXJhdGlvbnMgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVdzdHJpY3QtcHJvdG90eXBlcyAtV3JlZHVuZGFudC1kZWNscyAtV21pc3Npbmctbm9yZXR1cm4gLVdzaGFkb3cgLVdlbmRpZi1sYWJlbHMgLVdwb2ludGVyLWFyaXRoIC1XYmFkLWZ1bmN0aW9uLWNhc3QgLVdjYXN0LXF1YWwgLVdjYXN0LWFsaWduIC1Xd3JpdGUtc3RyaW5ncyAtZmRpYWdub3N0aWNzLXNob3ctb3B0aW9uIC1Xbm8tY2FzdC1xdWFsIC1mbm8tc3RyaWN0LWFsaWFzaW5nIgorCisgICAgaWYgdGVzdCAieCRIQVZFX05FVExJTksiID0gInh5ZXMiIDsgdGhlbgorICAgICAgICAjIFRlc3Qgd2hldGhlciBydG5ldGxpbmsuaCBjYW4gYmUgaW5jbHVkZWQgd2hlbiBjb21waWxlZCB3aXRoIC1zdGQ9Yzk5CisgICAgICAgICMgc29tZSBkaXN0cmlidXRpb25zIChlLmcuIGFyY2hsaW51eCkgaGF2ZSBicm9rZW4gaGVhZGVycyB0aGF0IGRvbnQKKyAgICAgICAgIyBkZWZpbmUgX191NjQgd2l0aCAtc3RkPWM5OQorICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2NoZWNraW5nIHdoZXRoZXIgcnRuZXRsaW5rLmggY2FuIGJlIGluY2x1ZGVkIHdpdGggLXN0ZD1jOTldKQorICAgICAgICBPTERDRkxBR1M9IiRDRkxBR1MiCisgICAgICAgIENGTEFHUz0iLXN0ZD1jOTkiCisgICAgICAgIEFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+XSwgW10sCisgICAgICAgICAgICB1c2Vfc3RkYzk5PXllcywgdXNlX3N0ZGM5OT1ubykKKworICAgICAgICBpZiB0ZXN0IHgiJHVzZV9zdGRjOTkiID0geHllczsgdGhlbgorICAgICAgICAgICAgREVTSVJFRF9GTEFHUz0iLXN0ZD1jOTkgJERFU0lSRURfRkxBR1MiCisgICAgICAgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgICBlbHNlCisgICAgICAgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICAgIGZpCisKKyAgICAgICAgQ0ZMQUdTPSIkT0xEQ0ZMQUdTIgorICAgIGVsc2UKKyAgICAgICAgREVTSVJFRF9GTEFHUz0iLXN0ZD1jOTkgJERFU0lSRURfRkxBR1MiCisgICAgZmkKKworICAgIGZvciBmbGFnIGluICRERVNJUkVEX0ZMQUdTIDsgZG8KKyAgICAgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyICRDQyBhY2NlcHRzICRmbGFnXSkKKyAgICAgICAgaWYgdGVzdF9nY2NfZmxhZyAkZmxhZyA7IHRoZW4KKyAgICAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRmbGFnIgorICAgICAgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgICBlbHNlCisgICAgICAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgICAgZmkKKyAgICBkb25lCitmaQorCisjIENoZWNrcyBmb3IgaGVhZGVyIGZpbGVzLgorQUNfSEVBREVSX1NUREMKK0FDX0NIRUNLX0hFQURFUlMoW2FycGEvaW5ldC5oIGZjbnRsLmggaW50dHlwZXMuaCBsaW1pdHMuaCBuZXRpbmV0L2luLmggc3RkbGliLmggc3RyaW5nLmggc3lzL2lvY3RsLmggc3lzL3NvY2tldC5oIHN5cy90aW1lLmggdW5pc3RkLmggbmV0ZGIuaCBzeXNsb2cuaF0pCitBQ19IRUFERVJfU1REQk9PTAorCisjIENoZWNrcyBmb3IgdHlwZWRlZnMsIHN0cnVjdHVyZXMsIGFuZCBjb21waWxlciBjaGFyYWN0ZXJpc3RpY3MuCitBQ19DX0NPTlNUCitBQ19UWVBFX1NJWkVfVAorQUNfSEVBREVSX1RJTUUKK0FDX0hFQURFUl9TWVNfV0FJVAorCisgIyBTb2xhcmlzIHN0dWZmCisgQUNfU0VBUkNIX0xJQlMoW2luZXRfbnRvcF0sW25zbF0pCisgQUNfU0VBUkNIX0xJQlMoW3JlY3ZdLFtzb2NrZXRdKQorIEFDX0NIRUNLX0RFQ0woW0NNU0dfU1BBQ0VdLCxDRkxBR1M9IiRDRkxBR1MgLURfWE9QRU5fU09VUkNFPTUwMCAtRF9fRVhURU5TSU9OU19fIiwgW1sjaW5jbHVkZSA8c3lzL3NvY2tldC5oPl1dKQorCisjIENoZWNrcyBmb3IgbGlicmFyeSBmdW5jdGlvbnMuCitBQ19GVU5DX01FTUNNUAorQUNfRlVOQ19TRUxFQ1RfQVJHVFlQRVMKKyMgYXZhaGlfbWFsbG9jIGFjdHVhbGx5IHJldHVybnMgTlVMTCBmb3IgYXZhaGlfbWFsbG9jKDApLCBzbyBpdCBkb2VzIG5vdCBtYXR0ZXIKKyMgd2hldGhlciBsaWJjJ3MgbWFsbG9jIGRvZXMgdG9vLiAoU2FtZSBmb3IgcmVhbGxvYy4pCisjQUNfRlVOQ19NQUxMT0MKKyNBQ19GVU5DX1JFQUxMT0MKK0FDX0NIRUNLX0ZVTkNTKFtnZXRob3N0bmFtZSBtZW1jaHIgbWVtbW92ZSBtZW1zZXQgbWtkaXIgc2VsZWN0IHNvY2tldCBzdHJjaHIgc3RyY3NwbiBzdHJkdXAgc3RyZXJyb3Igc3RycmNociBzdHJzcG4gc3Ryc3RyIHVuYW1lIHNldHJlc3VpZCBzZXRyZXVpZCBzZXRyZXNnaWQgc2V0cmVnaWQgc3RyY2FzZWNtcCBnZXR0aW1lb2ZkYXkgcHV0ZW52IHN0cm5jYXNlY21wIHN0cmxjcHkgZ2V0aG9zdGJ5bmFtZSBzZXRldWlkIHNldGVnaWQgc2V0cHJvY3RpdGxlIGdldHByb2duYW1lXSkKKworQUNfRlVOQ19DSE9XTgorQUNfRlVOQ19TVEFUCitBQ19UWVBFX01PREVfVAorQUNfVFlQRV9QSURfVAorCitBQ19DSEVDS19ERUNMUyhlbnZpcm9uKQorCisjIGNoZWNrIGlmIGdjYydzIC1mdmlzaWJpbGl0eSBpcyBzdXBwb3J0ZWQKK0NIRUNLX1ZJU0lCSUxJVFlfSElEREVOCisKK2VuYWJsZV9jaHJvb3Q9eWVzCitBQ19DSEVDS19IRUFERVJTKFtzeXMvY2FwYWJpbGl0eS5oXSwsZW5hYmxlX2Nocm9vdD1ubykKK0FDX0NIRUNLX0hFQURFUlMoW3N5cy9wcmN0bC5oXSwsZW5hYmxlX2Nocm9vdD1ubykKK0FDX0NIRUNLX0ZVTkNTKFtjaHJvb3RdLCxlbmFibGVfY2hyb290PW5vKQorCitBTV9DT05ESVRJT05BTChFTkFCTEVfQ0hST09ULCB0ZXN0ICJ4JGVuYWJsZV9jaHJvb3QiID0gInh5ZXMiKQorCitpZiB0ZXN0ICJ4JGVuYWJsZV9jaHJvb3QiID0gInh5ZXMiIDsgdGhlbgorICAgQUNfREVGSU5FKFtFTkFCTEVfQ0hST09UXSwgMSwgW0VuYWJsZSBjaHJvb3QoKSB1c2FnZV0pCitmaQorCitBQ19DSEVDS19MSUIoZGwsIGRsb3BlbiwgWyBBQ19DSEVDS19IRUFERVJTKGRsZmNuLmgsIEhBVkVfRExPUEVOPXllcywgSEFWRV9ETE9QRU49bm8pIF0sIEhBVkVfRExPUEVOPW5vKQoraWYgdGVzdCAieCRIQVZFX0RMT1BFTiIgPSAieHllcyIgOyB0aGVuCisgICAgQUNfREVGSU5FKFtIQVZFX0RMT1BFTl0sMSxbSGF2ZSBkbG9wZW4oKV0pCitmaQorQU1fQ09ORElUSU9OQUwoSEFWRV9ETE9QRU4sIHRlc3QgIngkSEFWRV9ETE9QRU4iID0gInh5ZXMiKQorCitoYXZlX2lub3RpZnk9bm8KK0FDX0NIRUNLX0hFQURFUlMoW3N5cy9pbm90aWZ5LmhdLCBbaGF2ZV9pbm90aWZ5PXllc10pCisKK0FNX0NPTkRJVElPTkFMKEhBVkVfSU5PVElGWSwgdGVzdCAieCRoYXZlX2lub3RpZnkiID0gInh5ZXMiKQorCitpZiB0ZXN0ICJ4JGhhdmVfaW5vdGlmeSIgPSAieHllcyIgOyB0aGVuCisgICBBQ19ERUZJTkUoW0hBVkVfSU5PVElGWV0sIDEsIFtFbmFibGUgTGludXggaW5vdGlmeSgpIHVzYWdlXSkKK2ZpCisKK2hhdmVfa3F1ZXVlPXllcworQUNfQ0hFQ0tfRlVOQ1MoW2txdWV1ZV0sLGhhdmVfa3F1ZXVlPW5vKQorCitBTV9DT05ESVRJT05BTChIQVZFX0tRVUVVRSwgdGVzdCAieCRoYXZlX2txdWV1ZSIgPSAieHllcyIpCisKK2lmIHRlc3QgIngkaGF2ZV9rcXVldWUiID0gInh5ZXMiIDsgdGhlbgorICAgIEFDX0RFRklORShbSEFWRV9LUVVFVUVdLCAxLCBbRW5hYmxlIEJTRCBrcXVldWUoKSB1c2FnZV0pCitmaQorCitJVF9QUk9HX0lOVExUT09MKFswLjM1LjBdKQorR0VUVEVYVF9QQUNLQUdFPWF2YWhpCitBQ19TVUJTVChbR0VUVEVYVF9QQUNLQUdFXSkKK0FDX0RFRklORV9VTlFVT1RFRChbR0VUVEVYVF9QQUNLQUdFXSxbIiRHRVRURVhUX1BBQ0tBR0UiXSxbR2V0dGV4dCBwYWNrYWdlXSkKK0FNX0dMSUJfR05VX0dFVFRFWFQKKworYXZhaGlsb2NhbGVkaXI9JyR7cHJlZml4fS8ke0RBVEFESVJOQU1FfS9sb2NhbGUnCitBQ19TVUJTVChhdmFoaWxvY2FsZWRpcikKKworIyBDaGVjayBmb3IgcGtnLWNvbmZpZyBtYW51YWxseSBmaXJzdCwgYXMgaWYgaXRzIG5vdCBpbnN0YWxsZWQgdGhlCisjIFBLR19QUk9HX1BLR19DT05GSUcgbWFjcm8gd29uJ3QgYmUgZGVmaW5lZC4KK0FDX0NIRUNLX1BST0coaGF2ZV9wa2dfY29uZmlnLCBwa2ctY29uZmlnLCB5ZXMsIG5vKQorCitpZiB0ZXN0IHgiJGhhdmVfcGtnX2NvbmZpZyIgPSAieG5vIjsgdGhlbgorICAgIEFDX01TR19FUlJPUihwa2ctY29uZmlnIGlzIHJlcXVpcmVkIHRvIGluc3RhbGwgdGhpcyBwcm9ncmFtKQorZmkKKworUEtHX1BST0dfUEtHX0NPTkZJRworCisjCisjIENoZWNrIGZvciBHTElCIDIuMAorIworQUNfQVJHX0VOQUJMRShnbGliLAorICAgICAgICBBU19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWdsaWJdLFtEaXNhYmxlIHVzZSBvZiBHTGliXSksCisgICAgICAgIFtjYXNlICIke2VuYWJsZXZhbH0iIGluCisgICAgICAgICAgICAgICAgeWVzKSBIQVZFX0dMSUI9eWVzIDs7CisgICAgICAgICAgICAgICAgbm8pICBIQVZFX0dMSUI9bm8gOzsKKyAgICAgICAgICAgICAgICAqKSBBQ19NU0dfRVJST1IoYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtZ2xpYikgOzsKKyAgICAgICAgZXNhY10sCisgICAgICAgIFtIQVZFX0dMSUI9eWVzXSkKKworaWYgdGVzdCAieCRIQVZFX0dMSUIiID0gInh5ZXMiIDsgdGhlbgorICAgICAgICBQS0dfQ0hFQ0tfTU9EVUxFUyhHTElCMjAsIFsgZ2xpYi0yLjAgPj0gMi40LjAgXSkKKyAgICAgICAgQUNfU1VCU1QoR0xJQjIwX0NGTEFHUykKKyAgICAgICAgQUNfU1VCU1QoR0xJQjIwX0xJQlMpCitmaQorQU1fQ09ORElUSU9OQUwoSEFWRV9HTElCLCB0ZXN0ICJ4JEhBVkVfR0xJQiIgPSAieHllcyIpCisKKyMKKyMgQ2hlY2sgZm9yIEdMSUIncyBnb2JqZWN0IDIuMAorIworQUNfQVJHX0VOQUJMRShnb2JqZWN0LAorICAgICAgICBBU19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWdvYmplY3RdLFtEaXNhYmxlIHVzZSBvZiBHTGliIEdPYmplY3RdKSwKKyAgICAgICAgW2Nhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKyAgICAgICAgICAgICAgICB5ZXMpIEhBVkVfR09CSkVDVD15ZXMgOzsKKyAgICAgICAgICAgICAgICBubykgIEhBVkVfR09CSkVDVD1ubyA7OworICAgICAgICAgICAgICAgICopIEFDX01TR19FUlJPUihiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1nb2JqZWN0KSA7OworICAgICAgICBlc2FjXSwKKyAgICAgICAgW0hBVkVfR09CSkVDVD15ZXNdKQorCitpZiB0ZXN0ICJ4JEhBVkVfR09CSkVDVCIgPSAieHllcyIgOyB0aGVuCisgICAgICAgIFBLR19DSEVDS19NT0RVTEVTKEdPQkpFQ1QsIFsgZ2xpYi0yLjAgPj0gMi40LjAgZ29iamVjdC0yLjAgXSkKKyAgICAgICAgQUNfU1VCU1QoR09CSkVDVF9DRkxBR1MpCisgICAgICAgIEFDX1NVQlNUKEdPQkpFQ1RfTElCUykKK2ZpCitBTV9DT05ESVRJT05BTChIQVZFX0dPQkpFQ1QsIHRlc3QgIngkSEFWRV9HT0JKRUNUIiA9ICJ4eWVzIikKKworIworIyBJbnRyb3NwZWN0aW9uIHN1cHBvcnQuCisjCitHT0JKRUNUX0lOVFJPU1BFQ1RJT05fQ0hFQ0soWzAuOS41XSkKKworIworIyBDaGVjayBmb3IgUXQgMworIworQUNfQVJHX0VOQUJMRShxdDMsCisgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtcXQzXSxbRGlzYWJsZSBidWlsZGluZyBvZiBRdDMgbWFpbmxvb3AgaW50ZWdyYXRpb25dKSwKKyAgICAgICAgW2Nhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKyAgICAgICAgICAgICAgICB5ZXMpIEhBVkVfUVQzPXllcyA7OworICAgICAgICAgICAgICAgIG5vKSAgSEFWRV9RVDM9bm8gOzsKKyAgICAgICAgICAgICAgICAqKSBBQ19NU0dfRVJST1IoYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtcXQzKSA7OworICAgICAgICBlc2FjXSwKKyAgICAgICAgW0hBVkVfUVQzPXllc10pCisKK2lmIHRlc3QgIngkSEFWRV9RVDMiID0gInh5ZXMiIDsgdGhlbgorICAgICAgICBQS0dfQ0hFQ0tfTU9EVUxFUyggUVQzLCBbIHF0LW10ID49IDMuMC4wIF0pCisgICAgICAgIEFDX1NVQlNUKFFUM19DRkxBR1MpCisgICAgICAgIEFDX1NVQlNUKFFUM19MSUJTKQorCSAgICBRVDNfUFJFRklYPSJgJFBLR19DT05GSUcgLS12YXJpYWJsZT1wcmVmaXggcXQtbXRgL2JpbiIKKyAgICAgICAgQUNfUEFUSF9QUk9HUyhNT0NfUVQzLCBbbW9jLXF0MyBtb2NdLCBubywgWyRRVDNfUFJFRklYXSkKKyAgICAgICAgaWYgdGVzdCAiJE1PQ19RVDMiID0gbm87IHRoZW4KKyAgICAgICAgICAgIEFDX01TR19FUlJPUihbQ291bGQgbm90IGZpbmQgUVQzIG1vY10pCisgICAgICAgIGZpCisgICAgICAgIEFDX1NVQlNUKE1PQ19RVDMpCitmaQorQU1fQ09ORElUSU9OQUwoSEFWRV9RVDMsIHRlc3QgIngkSEFWRV9RVDMiID0gInh5ZXMiKQorCisjCisjIENoZWNrIGZvciBRdCA0CisjCitBQ19BUkdfRU5BQkxFKHF0NCwKKyAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1xdDRdLFtEaXNhYmxlIGJ1aWxkaW5nIG9mIFF0NENvcmUgbWFpbmxvb3AgaW50ZWdyYXRpb25dKSwKKyAgICAgICAgW2Nhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKyAgICAgICAgICAgICAgICB5ZXMpIEhBVkVfUVQ0PXllcyA7OworICAgICAgICAgICAgICAgIG5vKSAgSEFWRV9RVDQ9bm8gOzsKKyAgICAgICAgICAgICAgICAqKSBBQ19NU0dfRVJST1IoYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtcXQ0KSA7OworICAgICAgICBlc2FjXSwKKyAgICAgICAgW0hBVkVfUVQ0PXllc10pCisKK2lmIHRlc3QgIngkSEFWRV9RVDQiID0gInh5ZXMiIDsgdGhlbgorICAgICAgICBQS0dfQ0hFQ0tfTU9EVUxFUyggUVQ0LCBbIFF0Q29yZSA+PSA0LjAuMCBdKQorICAgICAgICBBQ19TVUJTVChRVDRfQ0ZMQUdTKQorICAgICAgICBBQ19TVUJTVChRVDRfTElCUykKKwkgICAgUVQ0X1BSRUZJWD0iYCRQS0dfQ09ORklHIC0tdmFyaWFibGU9cHJlZml4IFF0Q29yZWAvYmluIgorICAgICAgICBBQ19QQVRIX1BST0dTKE1PQ19RVDQsIFttb2MtcXQ0IG1vY10sIG5vLCBbJFFUNF9QUkVGSVhdKQorICAgICAgICBpZiB0ZXN0ICIkTU9DX1FUNCIgPSBubzsgdGhlbgorICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFtDb3VsZCBub3QgZmluZCBRVDQgbW9jXSkKKyAgICAgICAgZmkKKyAgICAgICAgQUNfU1VCU1QoTU9DX1FUNCkKK2ZpCitBTV9DT05ESVRJT05BTChIQVZFX1FUNCwgdGVzdCAieCRIQVZFX1FUNCIgPSAieHllcyIpCisKKyMKKyMgQ2hlY2sgZm9yIEdUSysgMi4wCisjCitBQ19BUkdfRU5BQkxFKGd0aywKKyAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1ndGtdLFtEaXNhYmxlIHVzZSBvZiBHVEsrIDJdKSwKKyAgICAgICAgW2Nhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKyAgICAgICAgICAgICAgICB5ZXMpIEhBVkVfR1RLPXllcyA7OworICAgICAgICAgICAgICAgIG5vKSAgSEFWRV9HVEs9bm8gOzsKKyAgICAgICAgICAgICAgICAqKSBBQ19NU0dfRVJST1IoYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtZ3RrKSA7OworICAgICAgICBlc2FjXSwKKyAgICAgICAgW0hBVkVfR1RLPXllc10pCisKK2lmIHRlc3QgIngkSEFWRV9HVEsiID0gInh5ZXMiIDsgdGhlbgorICAgICAgICAjIENoZWNrIGZvciBHVEsgMi4wCisgICAgICAgIFBLR19DSEVDS19NT0RVTEVTKEdUSzIwLCBbIGd0aystMi4wID49IDIuMTQuMCBdKQorICAgICAgICBBQ19TVUJTVChHVEsyMF9DRkxBR1MpCisgICAgICAgIEFDX1NVQlNUKEdUSzIwX0xJQlMpCitmaQorQU1fQ09ORElUSU9OQUwoSEFWRV9HVEssIHRlc3QgIngkSEFWRV9HVEsiID0gInh5ZXMiKQorCisjCisjIENoZWNrIGZvciBHVEsrIDMuMAorIworQUNfQVJHX0VOQUJMRShndGszLAorICAgICAgICBBU19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWd0azNdLFtEaXNhYmxlIHVzZSBvZiBHVEsrIDNdKSwKKyAgICAgICAgW2Nhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKyAgICAgICAgICAgICAgICB5ZXMpIEhBVkVfR1RLMz15ZXMgOzsKKyAgICAgICAgICAgICAgICBubykgIEhBVkVfR1RLMz1ubyA7OworICAgICAgICAgICAgICAgICopIEFDX01TR19FUlJPUihiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1ndGszKSA7OworICAgICAgICBlc2FjXSwKKyAgICAgICAgW0hBVkVfR1RLMz15ZXNdKQorCitpZiB0ZXN0ICJ4JEhBVkVfR1RLMyIgPSAieHllcyIgOyB0aGVuCisgICAgICAgICMgQ2hlY2sgZm9yIEdUSyAzLjAKKyAgICAgICAgUEtHX0NIRUNLX01PRFVMRVMoR1RLMzAsIFsgZ3RrKy0zLjAgXSkKKyAgICAgICAgQUNfU1VCU1QoR1RLMzBfQ0ZMQUdTKQorICAgICAgICBBQ19TVUJTVChHVEszMF9MSUJTKQorZmkKK0FNX0NPTkRJVElPTkFMKEhBVkVfR1RLMywgdGVzdCAieCRIQVZFX0dUSzMiID0gInh5ZXMiKQorCitBTV9DT05ESVRJT05BTChIQVZFX0dUSzJPUjMsIHRlc3QgIngkSEFWRV9HVEszIiA9ICJ4eWVzIiAtbyAieCRIQVZFX0dUSyIgPSAieHllcyIgKQorCisjCisjIEQtQnVzCisjCitBQ19BUkdfRU5BQkxFKGRidXMsCisgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtZGJ1c10sW0Rpc2FibGUgdXNlIG9mIEQtQnVzXSksCisgICAgICAgIFtjYXNlICIke2VuYWJsZXZhbH0iIGluCisgICAgICAgICAgICAgICAgeWVzKSBIQVZFX0RCVVM9eWVzIDs7CisgICAgICAgICAgICAgICAgbm8pICBIQVZFX0RCVVM9bm8gOzsKKyAgICAgICAgICAgICAgICAqKSBBQ19NU0dfRVJST1IoYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtZGJ1cykgOzsKKyAgICAgICAgZXNhY10sCisgICAgICAgIFtIQVZFX0RCVVM9eWVzXSkKKworQUNfQVJHX1dJVEgoZGJ1cy1zeXMsIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtZGJ1cy1zeXM9PGRpcj5dLCBbUGF0aCB0byBELUJ1cyBzeXN0ZW0uZCBkaXJlY3RvcnldKSkKK0FDX0FSR19XSVRIKGRidXMtc3lzdGVtLXNvY2tldCwgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1kYnVzLXN5c3RlbS1hZGRyZXNzPTxhZGRyZXNzPl0sIFtQYXRoIHRvIHRoZSBELUJ1cyBzeXN0ZW0gc29ja2V0LCB5b3UgcHJvYmFibHkgd2FudCB0byBwdXQgdW5peDpwYXRoPSBhdCB0aGUgc3RhcnQuIE9ubHkgbmVlZGVkIGZvciB2ZXJ5IG9sZCBELUJ1cyByZWxlYXNlc10pKQorCitEQlVTX1ZFUlNJT049IkRpc2FibGVkIgorREJVU19TWVNfRElSPSJEaXNhYmxlZCIKK0RCVVNfU1lTVEVNX0JVU19ERUZBVUxUX0FERFJFU1M9IkRpc2FibGVkIgoraWYgdGVzdCAieCRIQVZFX0RCVVMiID0gInh5ZXMiIDsgdGhlbgorICAgIFBLR19DSEVDS19NT0RVTEVTKERCVVMsIFsgZGJ1cy0xID49IDAuMzQgXSkKKworICAgIEFDX0RFRklORShIQVZFX0RCVVMsIDEsIFtXaGV0aGVyIHdlIGhhdmUgRC1CdXMgb3Igbm90XSkKKworICAgIERCVVNfVkVSU0lPTj1gJFBLR19DT05GSUcgZGJ1cy0xIC0tbW9kdmVyc2lvbmAKKyAgICBEQlVTX1ZFUlNJT05fTUFKT1I9YGVjaG8gJERCVVNfVkVSU0lPTiB8IGF3ayAtRi4gJ3twcmludCAkMX0nYAorICAgIERCVVNfVkVSU0lPTl9NSU5PUj1gZWNobyAkREJVU19WRVJTSU9OIHwgYXdrIC1GLiAne3ByaW50ICQyfSdgCisgICAgREJVU19WRVJTSU9OX01JQ1JPPWBlY2hvICREQlVTX1ZFUlNJT04gfCBhd2sgLUYuICd7cHJpbnQgJDN9J2AKKyAgICBpZiB0ZXN0ICJ6JERCVVNfVkVSU0lPTl9NQUpPUiIgPSAieiI7IHRoZW4KKyAgICAgICAgREJVU19WRVJTSU9OX01BSk9SPSIwIgorICAgIGZpCisgICAgaWYgdGVzdCAieiREQlVTX1ZFUlNJT05fTUlOT1IiID0gInoiOyB0aGVuCisgICAgICAgIERCVVNfVkVSU0lPTl9NSU5PUj0iMCIKKyAgICBmaQorICAgIGlmIHRlc3QgInokREJVU19WRVJTSU9OX01JQ1JPIiA9ICJ6IjsgdGhlbgorICAgICAgICBEQlVTX1ZFUlNJT05fTUlDUk89IjAiCisgICAgZmkKKworICAgIGlmIHRlc3QgInokREJVU19WRVJTSU9OX01BSk9SIiA9ICJ6MCIgLWEgInokREJVU19WRVJTSU9OX01JTk9SIiA9ICJ6MCIgLWEgInokREJVU19WRVJTSU9OX01JQ1JPIiA9ICJ6MCI7IHRoZW4KKyAgICAgICAgZWNobyAiRXJyb3I6IENvdWxkbid0IGRldGVybWluZSB0aGUgdmVyc2lvbiBvZiB5b3VyIEQtQnVzIHBhY2thZ2UuIgorICAgICAgICBlY2hvICIgIFRoaXMgaXMgcHJvYmFibHkgYW4gZXJyb3IgaW4gdGhpcyBzY3JpcHQsIHBsZWFzZSByZXBvcnQgaXQiCisgICAgICAgIGVjaG8gIiAgYWxvbmcgd2l0aCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOiIKKyAgICAgICAgZWNobyAiICAgICAgQmFzZSBELUJ1c3MgdmVyc2lvbiA9JyREQlVTX1ZFUlNJT04nIgorICAgICAgICBlY2hvICIgICAgICBEQlVTX1ZFUlNJT05fTUFKT1I9JyREQlVTX1ZFUlNJT05fTUFKT1InIgorICAgICAgICBlY2hvICIgICAgICBEQlVTX1ZFUlNJT05fTUlOT1I9JyREQlVTX1ZFUlNJT05fTUlOT1InIgorICAgICAgICBlY2hvICIgICAgICBEQlVTX1ZFUlNJT05fTUlDUk89JyREQlVTX1ZFUlNJT05fTUlDUk8nIgorICAgICAgICBleGl0IDEKKyAgICBlbHNlCisgICAgICAgIGVjaG8gIllvdXIgRC1CdXMgdmVyc2lvbiBpcyAkREJVU19WRVJTSU9OX01BSk9SLCREQlVTX1ZFUlNJT05fTUlOT1IsJERCVVNfVkVSU0lPTl9NSUNSTy4iCisgICAgICAgIERCVVNfQ0ZMQUdTPSIkREJVU19DRkxBR1MgLUREQlVTX1ZFUlNJT05fTUFKT1I9JERCVVNfVkVSU0lPTl9NQUpPUiIKKyAgICAgICAgREJVU19DRkxBR1M9IiREQlVTX0NGTEFHUyAtRERCVVNfVkVSU0lPTl9NSU5PUj0kREJVU19WRVJTSU9OX01JTk9SIgorICAgICAgICBEQlVTX0NGTEFHUz0iJERCVVNfQ0ZMQUdTIC1EREJVU19WRVJTSU9OX01JQ1JPPSREQlVTX1ZFUlNJT05fTUlDUk8iCisgICAgZmkKKworICAgIERCVVNfQ0ZMQUdTPSIkREJVU19DRkxBR1MgLUREQlVTX0FQSV9TVUJKRUNUX1RPX0NIQU5HRSIKKyAgICBBQ19TVUJTVChEQlVTX0NGTEFHUykKKyAgICBBQ19TVUJTVChEQlVTX0xJQlMpCisKKyAgICBpZiAhIHRlc3QgLXogIiR3aXRoX2RidXNfc3lzIiA7IHRoZW4KKyAgICAgICAgREJVU19TWVNfRElSPSIkd2l0aF9kYnVzX3N5cyIKKyAgICBlbHNlCisgICAgICAgIERCVVNfU1lTX0RJUj0iJHtzeXNjb25mZGlyfS9kYnVzLTEvc3lzdGVtLmQiCisgICAgZmkKKyAgICBBQ19TVUJTVChEQlVTX1NZU19ESVIpCisKKyAgICBpZiAhIHRlc3QgLXogIiR3aXRoX2RidXNfc3lzdGVtX2FkZHJlc3MiIDsgdGhlbgorICAgICAgICBEQlVTX1NZU1RFTV9CVVNfREVGQVVMVF9BRERSRVNTPSIkd2l0aF9kYnVzX3N5c3RlbV9hZGRyZXNzIgorICAgIGVsc2UKKyAgICAgICAgIyBUaGlzIGlzIHVnbHksIGJ1dCBELUJ1cyBkb2Vzbid0IGV4cG9ydCB0aGlzIGFkZHJlc3MgZm9yIHVzCisgICAgICAgICMgc28gd2UgaGF2ZSB0byBndWVzcywgcHJldHR5IG11Y2ggYWxsIHNldHVwcyBpJ3ZlIHNlZW4gaGF2ZQorICAgICAgICAjIGl0IGluIC92YXIvbGliL2RidXMgb3IgL3Zhci9ydW4vZGJ1cywgYW5kIGl0cyBkZWZhdWx0ZWQgdG8KKyAgICAgICAgIyAvdmFyL3J1biB1cHN0cmVhbSBzbyB3ZSB3aWxsIHRyeSBndWVzcyBmaXJzdCB0aGVuIGRlZmF1bHQKKyAgICAgICAgIyB0byAvdmFyL3J1bi9kYnVzLgorCisgICAgICAgIERCVVNfU1lTVEVNX0JVU19ERUZBVUxUX0FERFJFU1M9InVuaXg6cGF0aD0vdmFyL3J1bi9kYnVzL3N5c3RlbV9idXNfc29ja2V0IgorICAgICAgICBUUllfU09DS0VUUz0iL3Zhci9saWIvZGJ1cy9zeXN0ZW1fYnVzX3NvY2tldCAvdmFyL3J1bi9kYnVzL3N5c3RlbV9idXNfc29ja2V0ICR7bG9jYWxzdGF0ZWRpcn0vcnVuL2RidXMvc3lzdGVtX2J1c19zb2NrZXQgJHtwcmVmaXh9L3Zhci9ydW4vZGJ1cy9zeXN0ZW1fYnVzX3NvY2tldCIKKyAgICAgICAgZm9yIHNvY2sgaW4gJFRSWV9TT0NLRVRTOyBkbworICAgICAgICAgICAgaWYgdGVzdCAtUyAkc29jazsgdGhlbgorICAgICAgICAgICAgICAgIERCVVNfU1lTVEVNX0JVU19ERUZBVUxUX0FERFJFU1M9InVuaXg6cGF0aD0kc29jayIKKyAgICAgICAgICAgIGZpCisgICAgICAgIGRvbmUKKyAgICBmaQorICAgIEFDX1NVQlNUKERCVVNfU1lTVEVNX0JVU19ERUZBVUxUX0FERFJFU1MpCisKKyAgICBTQVZFRF9MSUJTPSIkTElCUyIKKyAgICBMSUJTPSIkTElCUyAkREJVU19MSUJTIgorICAgIEFDX0NIRUNLX0ZVTkNTKFtkYnVzX2Nvbm5lY3Rpb25fY2xvc2UgZGJ1c19idXNfZ2V0X3ByaXZhdGVdKQorICAgIExJQlM9IiRTQVZFRF9MSUJTIgorZmkKK0FNX0NPTkRJVElPTkFMKEhBVkVfREJVUywgdGVzdCAieCRIQVZFX0RCVVMiID0gInh5ZXMiKQorCisjCisjIEV4cGF0CisjCitBQ19BUkdfV0lUSCh4bWwsIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgteG1sPVtleHBhdC9ic2R4bWwvbm9uZV1dLFtYTUwgbGlicmFyeSB0byB1c2VdKSkKK3VzZV9leHBhdD1mYWxzZQordXNlX2JzZHhtbD1mYWxzZQorCisjIFNlZSB3aGF0IHdlIGhhdmUKK0FDX0NIRUNLX0xJQihleHBhdCwgWE1MX1BhcnNlckNyZWF0ZSwgWyBBQ19DSEVDS19IRUFERVJTKGV4cGF0LmgsIGhhdmVfZXhwYXQ9dHJ1ZSwgaGF2ZV9leHBhdD1mYWxzZSkgXSwgaGF2ZV9leHBhdD1mYWxzZSkKK0FDX0NIRUNLX0xJQihic2R4bWwsIFhNTF9QYXJzZXJDcmVhdGUsIFsgQUNfQ0hFQ0tfSEVBREVSUyhic2R4bWwuaCwgaGF2ZV9ic2R4bWw9dHJ1ZSwgaGF2ZV9ic2R4bWw9ZmFsc2UpIF0sIGhhdmVfYnNkeG1sPWZhbHNlKQorCitpZiB0ZXN0ICJ4JHdpdGhfeG1sIiA9ICJ4bm9uZSI7IHRoZW4KKyAgICAgICAgOgorZWxpZiB0ZXN0ICJ4JHdpdGhfeG1sIiA9ICJ4ZXhwYXQiOyB0aGVuCisJdXNlX2V4cGF0PXRydWUKKwlpZiAhICRoYXZlX2V4cGF0IDsgdGhlbgorCQlBQ19NU0dfRVJST1IoWyoqKiBsaWJleHBhdCByZXF1ZXN0ZWQsIGJ1dCBub3QgZm91bmQgKioqXSkKKwlmaQorZWxpZiB0ZXN0ICJ4JHdpdGhfeG1sIiA9ICJ4YnNkeG1sIjsgdGhlbgorCXVzZV9ic2R4bWw9dHJ1ZQorCWlmICEgJGhhdmVfYnNkeG1sIDsgdGhlbgorCQlBQ19NU0dfRVJST1IoWyoqKiBsaWJic2R4bWwgcmVxdWVzdGVkLCBidXQgbm90IGZvdW5kICoqKl0pCisJZmkKK2VsaWYgdGVzdCAieCR3aXRoX3htbCIgIT0gIngiOyB0aGVuCisJQUNfTVNHX0VSUk9SKFsqKiogdW5rbm93biB3aXRoLXhtbCBvcHRpb24gKioqXSkKK2Vsc2UKKwlpZiAkaGF2ZV9leHBhdCA7IHRoZW4KKwkJdXNlX2V4cGF0PXRydWUKKwllbGlmICRoYXZlX2JzZHhtbCA7IHRoZW4KKwkJdXNlX2JzZHhtbD10cnVlCisJZWxzZQorCQlBQ19NU0dfRVJST1IoWyoqKiBuZWl0aGVyIGxpYmV4cGF0IG5vdCBsaWJic2R4bWwgY291bGQgYmUgZm91bmQgKioqXSkKKwlmaQorZmkKKworaWYgJHVzZV9leHBhdDsgdGhlbgorCXdpdGhfeG1sPWV4cGF0CisJWE1MX0NGTEFHUz0tRFVTRV9FWFBBVF9ICisJWE1MX0xJQlM9LWxleHBhdAorZmkKK2lmICR1c2VfYnNkeG1sOyB0aGVuCisJd2l0aF94bWw9YnNkeG1sCisJWE1MX0NGTEFHUz0tRFVTRV9CU0RYTUxfSAorCVhNTF9MSUJTPS1sYnNkeG1sCitmaQorQUNfU1VCU1QoWE1MX0xJQlMpCitBQ19TVUJTVChYTUxfQ0ZMQUdTKQorCitpZiAkdXNlX2V4cGF0IHx8ICR1c2VfYnNkeG1sOyB0aGVuCisJSEFWRV9YTUw9eWVzCitmaQorCitBTV9DT05ESVRJT05BTChIQVZFX1hNTCwgdGVzdCAieCRIQVZFX1hNTCIgPSAieHllcyIpCisKKyMKKyMgR0RCTQorIworIworIyBDaGVjayBmb3IgZGJtCisjCitBQ19BUkdfRU5BQkxFKGRibSwKKyAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWRibV0sW0VuYWJsZSB1c2Ugb2YgREJNXSksCisgICAgICAgIFtjYXNlICIke2VuYWJsZXZhbH0iIGluCisgICAgICAgICAgICAgICAgeWVzKSBIQVZFX0RCTT15ZXMgOzsKKyAgICAgICAgICAgICAgICBubykgIEhBVkVfREJNPW5vIDs7CisgICAgICAgICAgICAgICAgKikgQUNfTVNHX0VSUk9SKGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLWRibSkgOzsKKyAgICAgICAgZXNhY10sCisgICAgICAgIFtIQVZFX0RCTT1ub10pCisKK0FDX0FSR19FTkFCTEUoZ2RibSwKKyAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1nZGJtXSxbRGlzYWJsZSB1c2Ugb2YgR0RCTV0pLAorICAgICAgICBbY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorICAgICAgICAgICAgICAgIHllcykgSEFWRV9HREJNPXllcyA7OworICAgICAgICAgICAgICAgIG5vKSAgSEFWRV9HREJNPW5vIDs7CisgICAgICAgICAgICAgICAgKikgQUNfTVNHX0VSUk9SKGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZGlzYWJsZS1nZGJtKSA7OworICAgICAgICBlc2FjXSwKKyAgICAgICAgW0hBVkVfR0RCTT15ZXNdKQorCitpZiB0ZXN0ICJ4JEhBVkVfR0RCTSIgPSAieHllcyIgOyB0aGVuCisgICAgaWYgdGVzdCAieCRIQVZFX0RCTSIgPSAieHllcyIgOyB0aGVuCisgICAgICAgIEFDX01TR19FUlJPUihbKioqIC0tZW5hYmxlLWdkYm0gYW5kIC0tZW5hYmxlLWRibSBib3RoIHNwZWNpZmllZCAqKipdKQorICAgIGZpCisgICAgQUNfQ0hFQ0tfTElCKGdkYm0sIGdkYm1fb3BlbiwgWyBBQ19DSEVDS19IRUFERVJTKGdkYm0uaCwgaGF2ZV9nZGJtPXRydWUsIGhhdmVfZ2RibT1mYWxzZSkgXSwgaGF2ZV9nZGJtPWZhbHNlKQorCisgICAgaWYgISAkaGF2ZV9nZGJtIDsgdGhlbgorICAgICAgICBBQ19NU0dfRVJST1IoWyoqKiBsaWJnZGJtIG5vdCBmb3VuZCAqKipdKQorICAgIGZpCisgICAgQUNfREVGSU5FKFtIQVZFX0dEQk1dLFtdLFtTdXBwb3J0IGZvciBHREJNXSkKK2Vsc2UKKyAgICBpZiB0ZXN0ICJ4JEhBVkVfREJNIiA9ICJ4eWVzIiA7IHRoZW4KKyAgICAgICAgQUNfQ0hFQ0tfSEVBREVSUyhuZGJtLmgsIGhhdmVfZGJtPXRydWUsIGhhdmVfZGJtPWZhbHNlKQorCisgICAgICAgIGlmICEgJGhhdmVfZGJtIDsgdGhlbgorICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFsqKiogZGJtIG5vdCBmb3VuZCAqKipdKQorICAgICAgICBmaQorICAgICAgICBBQ19ERUZJTkUoW0hBVkVfREJNXSxbXSxbU3VwcG9ydCBmb3IgREJNXSkKKyAgICBmaQorZmkKK0FNX0NPTkRJVElPTkFMKEhBVkVfR0RCTSwgdGVzdCAieCRIQVZFX0dEQk0iID0gInh5ZXMiKQorQU1fQ09ORElUSU9OQUwoSEFWRV9EQk0sIHRlc3QgIngkSEFWRV9EQk0iID0gInh5ZXMiKQorCisjCisjIGxpYmRhZW1vbgorIworQUNfQVJHX0VOQUJMRShsaWJkYWVtb24sCisgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtbGliZGFlbW9uXSxbRGlzYWJsZSB1c2Ugb2YgbGliZGFlbW9uXSksCisgICAgICAgIFtjYXNlICIke2VuYWJsZXZhbH0iIGluCisgICAgICAgICAgICAgICAgeWVzKSBIQVZFX0xJQkRBRU1PTj15ZXMgOzsKKyAgICAgICAgICAgICAgICBubykgIEhBVkVfTElCREFFTU9OPW5vIDs7CisgICAgICAgICAgICAgICAgKikgQUNfTVNHX0VSUk9SKGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLWxpYmRhZW1vbikgOzsKKyAgICAgICAgZXNhY10sCisgICAgICAgIFtIQVZFX0xJQkRBRU1PTj15ZXNdKQorCitpZiB0ZXN0ICJ4JEhBVkVfTElCREFFTU9OIiA9ICJ4eWVzIiA7IHRoZW4KKyAgICBQS0dfQ0hFQ0tfTU9EVUxFUyhMSUJEQUVNT04sIFsgbGliZGFlbW9uID49IDAuMTQgXSkKKyAgICBBQ19TVUJTVChMSUJEQUVNT05fQ0ZMQUdTKQorICAgIEFDX1NVQlNUKExJQkRBRU1PTl9MSUJTKQorZmkKK0FNX0NPTkRJVElPTkFMKEhBVkVfTElCREFFTU9OLCB0ZXN0ICJ4JEhBVkVfTElCREFFTU9OIiA9ICJ4eWVzIikKKworIworIyBQeXRob24gc3R1ZmYKKyMKK0FDX0FSR19FTkFCTEUocHl0aG9uLAorICAgIEFTX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtcHl0aG9uXSwgW0Rpc2FibGUgc2NyaXB0cyB0aGF0IGRlcGVuZHMgb24gcHl0aG9uXSksCisgICAgW2Nhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKyAgICAgICAgICB5ZXMpIEhBVkVfUFlUSE9OPXllcyA7OworICAgICAgICAgIG5vKSAgSEFWRV9QWVRIT049bm8gOzsKKyAgICAgICAgICAqKSBBQ19NU0dfRVJST1IoW2JhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLXB5dGhvbl0pIDs7CisgICAgZXNhY10sW0hBVkVfUFlUSE9OPXllc10pCisKK0hBVkVfUFlUSE9OX0RCVVM9bm8KK0hBVkVfUFlHVEs9bm8KKworaWYgdGVzdCAieCRIQVZFX1BZVEhPTiIgPSAieHllcyIgOyB0aGVuCisgICAgQU1fUEFUSF9QWVRIT04oWzIuNF0pCisKKyAgICBBQ19BUkdfRU5BQkxFKHB5Z3RrLAorICAgICAgICBBU19IRUxQX1NUUklORyhbLS1kaXNhYmxlLXB5Z3RrXSxbRGlzYWJsZSB1c2Ugb2YgR1RLIGluIFB5dGhvbl0pLAorICAgICAgICBbY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorICAgICAgICAgICAgICAgIHllcykgSEFWRV9QWUdUSz15ZXMgOzsKKyAgICAgICAgICAgICAgICBubykgIEhBVkVfUFlHVEs9bm8gOzsKKyAgICAgICAgICAgICAgICAqKSBBQ19NU0dfRVJST1IoYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtcHlndGspIDs7CisgICAgICAgIGVzYWNdLAorICAgICAgICBbSEFWRV9QWUdUSz15ZXNdKQorCisgICAgaWYgdGVzdCAieCRIQVZFX1BZR1RLIiA9ICJ4eWVzIiA7IHRoZW4KKyAgICAgICAgQU1fQ0hFQ0tfUFlNT0QoZ3RrLCwsW0FDX01TR19FUlJPUihDb3VsZCBub3QgZmluZCBQeXRob24gbW9kdWxlIGd0ayldKQorICAgIGZpCisKKworICAgIGlmIHRlc3QgIngkSEFWRV9EQlVTIiA9ICJ4eWVzIiA7IHRoZW4KKyAgICAgICAgQUNfQVJHX0VOQUJMRShweXRob24tZGJ1cywKKwkgICAgQVNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1weXRob24tZGJ1c10sW0Rpc2FibGUgdXNlIG9mIEQtQnVzIGluIFB5dGhvbl0pLAorICAgICAgICAgICAgW2Nhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKyAgICAgICAgICAgICAgICAgICB5ZXMpIEhBVkVfUFlUSE9OX0RCVVM9eWVzIDs7CisgICAgICAgICAgICAgICAgICAgbm8pICBIQVZFX1BZVEhPTl9EQlVTPW5vIDs7CisgICAgICAgICAgICAgICAgICAgKikgQUNfTVNHX0VSUk9SKGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLXB5dGhvbi1kYnVzKSA7OworICAgICAgICAgICAgZXNhY10sCisgICAgICAgICAgICBbSEFWRV9QWVRIT05fREJVUz15ZXNdKQorCisgICAgICAgIGlmIHRlc3QgIngkSEFWRV9QWVRIT05fREJVUyIgPSAieHllcyI7IHRoZW4KKyAgICAgICAgICAgIEFNX0NIRUNLX1BZTU9EKGRidXMsLCxbQUNfTVNHX0VSUk9SKENvdWxkIG5vdCBmaW5kIFB5dGhvbiBtb2R1bGUgZGJ1cyldKQorICAgICAgICBmaQorCisgICAgICAgIEFNX0NIRUNLX1BZTU9EKHNvY2tldCwsLFtBQ19NU0dfRVJST1IoQ291bGQgbm90IGZpbmQgUHl0aG9uIG1vZHVsZSBzb2NrZXQpXSkKKyAgICAgICAgaWYgdGVzdCAieCRIQVZFX0dEQk0iID0gInh5ZXMiOyB0aGVuCisgICAgICAgICAgICBBTV9DSEVDS19QWU1PRChnZGJtLCwsW0FDX01TR19FUlJPUihDb3VsZCBub3QgZmluZCBQeXRob24gbW9kdWxlIGdkYm0pXSkKKyAgICAgICAgZmkKKyAgICAgICAgaWYgdGVzdCAieCRIQVZFX0RCTSIgPSAieHllcyI7IHRoZW4KKyAgICAgICAgICAgIEFNX0NIRUNLX1BZTU9EKGRibSwsLFtBQ19NU0dfRVJST1IoQ291bGQgbm90IGZpbmQgUHl0aG9uIG1vZHVsZSBkYm0pXSkKKyAgICAgICAgZmkKKyAgICBmaQorZmkKK0FNX0NPTkRJVElPTkFMKEhBVkVfUFlUSE9OLCBbdGVzdCAieCRIQVZFX1BZVEhPTiIgPSAieHllcyIgXSkKK0FNX0NPTkRJVElPTkFMKEhBVkVfUFlHVEssIHRlc3QgIngkSEFWRV9QWUdUSyIgPSAieHllcyIpCitBTV9DT05ESVRJT05BTChIQVZFX1BZVEhPTl9EQlVTLCB0ZXN0ICJ4JEhBVkVfUFlUSE9OX0RCVVMiID0gInh5ZXMiKQorCisjCisjIENoZWNrIGZvciBtb25vIHN0dWZmCisjCitIQVZFX01PTk89bm8KK2lmIHRlc3QgIngkSEFWRV9EQlVTIiA9ICJ4eWVzIiA7IHRoZW4KKyAgICBBQ19BUkdfRU5BQkxFKG1vbm8sCisgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS1kaXNhYmxlLW1vbm9dLFtEaXNhYmxlIG1vbm8gYmluZGluZ3NdKSwKKyAgICAgICAgICAgIFtjYXNlICIke2VuYWJsZXZhbH0iIGluCisgICAgICAgICAgICAgICAgICAgIHllcykgSEFWRV9NT05PPXllcyA7OworICAgICAgICAgICAgICAgICAgICBubykgIEhBVkVfTU9OTz1ubyA7OworICAgICAgICAgICAgICAgICAgICAqKSBBQ19NU0dfRVJST1IoYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtbW9ubykgOzsKKyAgICAgICAgICAgIGVzYWNdLAorICAgICAgICAgICAgW0hBVkVfTU9OTz15ZXNdKQorCisgICAgaWYgdGVzdCAieCRIQVZFX01PTk8iID0gInh5ZXMiIDsgdGhlbgorICAgICAgICBBQ19QQVRIX1BST0coTUNTLCBtY3MpCisgICAgICAgIGlmIHRlc3QgIngkTUNTIiA9ICJ4IiA7IHRoZW4KKyAgICAgICAgICAgIEFDX01TR19FUlJPUihbQ2FuIG5vdCBmaW5kICJtY3MiIC0gVGhlIE1vbm8gQy1TaGFycCBDb21waWxlcikgaW4geW91ciBQQVRIXSkKKyAgICAgICAgZmkKKworICAgICAgICBBQ19QQVRIX1BST0coR0FDVVRJTCwgZ2FjdXRpbCkKKyAgICAgICAgaWYgdGVzdCAieCRHQUNVVElMIiA9ICJ4IiA7IHRoZW4KKyAgICAgICAgICAgIEFDX01TR19FUlJPUihbQ2FuIG5vdCBmaW5kICJnYWN1dGlsIiBpbiB5b3VyIFBBVEhdKQorICAgICAgICBmaQorCisgICAgICAgIEFDX1NVQlNUKE1DUykKKyAgICAgICAgQUNfU1VCU1QoR0FDVVRJTCkKKyAgICBmaQorZmkKK0FNX0NPTkRJVElPTkFMKEhBVkVfTU9OTywgdGVzdCAieCRIQVZFX01PTk8iID0gInh5ZXMiKQorCisjCisjIENoZWNrIGZvciBtb25vZG9jIHN0dWZmCisjCitIQVZFX01PTk9ET0M9bm8KK0FDX0FSR19FTkFCTEUobW9ub2RvYywKKyAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1tb25vZG9jXSxbRGlzYWJsZSBkb2N1bWVudGF0aW9uIGZvciBtb25vIGJpbmRpbmdzXSksCisgICAgICAgIFtjYXNlICIke2VuYWJsZXZhbH0iIGluCisgICAgICAgICAgICAgICAgeWVzKSBIQVZFX01PTk9ET0M9eWVzIDs7CisgICAgICAgICAgICAgICAgbm8pICBIQVZFX01PTk9ET0M9bm8gOzsKKyAgICAgICAgICAgICAgICAqKSBBQ19NU0dfRVJST1IoYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtbW9ub2RvYykgOzsKKyAgICAgICAgZXNhY10sCisgICAgICAgIFtIQVZFX01PTk9ET0M9eWVzXSkKKworaWYgdGVzdCAieCRIQVZFX01PTk8iID0gInh5ZXMiICYmIHRlc3QgIngkSEFWRV9NT05PRE9DIiA9ICJ4eWVzIiA7IHRoZW4KKyAgICAgICAgUEtHX0NIRUNLX01PRFVMRVMoTU9OT0RPQywgW21vbm9kb2MgPj0gMS4xLjhdKQorICAgICAgICBNT05PRE9DX0RJUj1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1zb3VyY2VzZGlyIG1vbm9kb2NgCisKKyAgICAgICAgQUNfUEFUSF9QUk9HKE1PTk9ET0NFUiwgbW9ub2RvY2VyKQorICAgICAgICBBQ19QQVRIX1BST0coTURBU1NFTUJMRVIsIG1kYXNzZW1ibGVyKQorCisgICAgICAgIEFDX1NVQlNUKE1PTk9ET0NfRElSKQorICAgICAgICBBQ19TVUJTVChNT05PRE9DRVIpCisgICAgICAgIEFDX1NVQlNUKE1EQVNTRU1CTEVSKQorZmkKK0FNX0NPTkRJVElPTkFMKEhBVkVfTU9OT0RPQywgdGVzdCAieCRIQVZFX01PTk9ET0MiID0gInh5ZXMiKQorCisjCisjIEJ1aWxkIGF1dG9pcGQ/CisjCitBQ19BUkdfRU5BQkxFKGF1dG9pcGQsCisgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtYXV0b2lwZF0sW0Rpc2FibGUgYnVpbGRpbmcgb2YgYXZhaGktYXV0b2lwZF0pLAorICAgICAgICBbY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorICAgICAgICAgICAgICAgIHllcykgRU5BQkxFX0FVVE9JUEQ9eWVzIDs7CisgICAgICAgICAgICAgICAgbm8pICBFTkFCTEVfQVVUT0lQRD1ubyA7OworICAgICAgICAgICAgICAgICopIEFDX01TR19FUlJPUihiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWRpc2FibGUtYXV0b2lwZCkgOzsKKyAgICAgICAgZXNhY10sCisgICAgICAgIFtFTkFCTEVfQVVUT0lQRD15ZXNdKQorCitBTV9DT05ESVRJT05BTChFTkFCTEVfQVVUT0lQRCwgdGVzdCAieCRFTkFCTEVfQVVUT0lQRCIgPSAieHllcyIpCisKKyMKKyMgRGVmaW5pbmcgdXNlcnMgYW5kIGdyb3VwcworIworQUNfQVJHX1dJVEgoYXZhaGlfdXNlciwgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1hdmFoaS11c2VyPTx1c2VyPl0sW1VzZXIgZm9yIHJ1bm5pbmcgYXZhaGktZGFlbW9uIChhdmFoaSldKSkKK2lmIHRlc3QgLXogIiR3aXRoX2F2YWhpX3VzZXIiIDsgdGhlbgorICAgIEFWQUhJX1VTRVI9YXZhaGkKK2Vsc2UKKyAgICBBVkFISV9VU0VSPSR3aXRoX2F2YWhpX3VzZXIKK2ZpCitBQ19TVUJTVChBVkFISV9VU0VSKQorQUNfREVGSU5FX1VOUVVPVEVEKEFWQUhJX1VTRVIsIiRBVkFISV9VU0VSIiwgW1VzZXIgZm9yIHJ1bm5pbmcgdGhlIEF2YWhpIGRhZW1vbl0pCisKK0FDX0FSR19XSVRIKGF2YWhpX2dyb3VwLEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtYXZhaGktZ3JvdXA9PGdyb3VwPl0sW0dyb3VwIGZvciBydW5uaW5nIGF2YWhpLWRhZW1vbiAoYXZhaGkpXSkpCitpZiB0ZXN0IC16ICIkd2l0aF9hdmFoaV9ncm91cCIgOyB0aGVuCisgICAgQVZBSElfR1JPVVA9YXZhaGkKK2Vsc2UKKyAgICBBVkFISV9HUk9VUD0kd2l0aF9hdmFoaV9ncm91cAorZmkKK0FDX1NVQlNUKEFWQUhJX0dST1VQKQorQUNfREVGSU5FX1VOUVVPVEVEKEFWQUhJX0dST1VQLCIkQVZBSElfR1JPVVAiLCBbR3JvdXAgZm9yIEF2YWhpXSkKKworQUNfQVJHX1dJVEgoYXZhaGlfcHJpdl9hY2Nlc3NfZ3JvdXAsQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1hdmFoaS1wcml2LWFjY2Vzcy1ncm91cD08Z3JvdXA+XSxbUHJpdmlsaWdlZCBhY2Nlc3MgZ3JvdXAgZm9yIEF2YWhpIGNsaWVudHMgKG5ldGRldildKSkKK2lmIHRlc3QgLXogIiR3aXRoX2F2YWhpX3ByaXZfYWNjZXNzX2dyb3VwIiA7IHRoZW4KKyAgICBBVkFISV9QUklWX0FDQ0VTU19HUk9VUD1uZXRkZXYKK2Vsc2UKKyAgICBBVkFISV9QUklWX0FDQ0VTU19HUk9VUD0kd2l0aF9hdmFoaV9wcml2X2FjY2Vzc19ncm91cAorZmkKK0FDX1NVQlNUKEFWQUhJX1BSSVZfQUNDRVNTX0dST1VQKQorQUNfREVGSU5FX1VOUVVPVEVEKEFWQUhJX1BSSVZfQUNDRVNTX0dST1VQLCIkQVZBSElfUFJJVl9BQ0NFU1NfR1JPVVAiLCBbUHJpdmlsZWdlZCBhY2Nlc3MgZ3JvdXAgZm9yIEF2YWhpIGNsaWVudHNdKQorCitBQ19BUkdfV0lUSChhdXRvaXBkX3VzZXIsIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtYXV0b2lwZC11c2VyPTx1c2VyPl0sW1VzZXIgZm9yIHJ1bm5pbmcgdGhlIGF2YWhpLWF1dG9pcGQgZGFlbW9uIChhdmFoaS1hdXRvaXBkKV0pKQoraWYgdGVzdCAteiAiJHdpdGhfYXV0b2lwZF91c2VyIiA7IHRoZW4KKyAgICBBVkFISV9BVVRPSVBEX1VTRVI9YXZhaGktYXV0b2lwZAorZWxzZQorICAgIEFWQUhJX0FVVE9JUERfVVNFUj0kd2l0aF9hdXRvaXBkX3VzZXIKK2ZpCitBQ19TVUJTVChBVkFISV9BVVRPSVBEX1VTRVIpCitBQ19ERUZJTkVfVU5RVU9URUQoQVZBSElfQVVUT0lQRF9VU0VSLCIkQVZBSElfQVVUT0lQRF9VU0VSIiwgW1VzZXIgZm9yIHJ1bm5pbmcgdGhlIGF2YWhpLWF1dG9pcGQgZGFlbW9uXSkKKworQUNfQVJHX1dJVEgoYXV0b2lwZF9ncm91cCxBU19IRUxQX1NUUklORyhbLS13aXRoLWF1dG9pcGQtZ3JvdXA9PGdyb3VwPl0sW0dyb3VwIGZvciBydW5uaW5nIHRoZSBhdmFoaS1hdXRvaXBkIGRhZW1vbiAoYXZhaGktYXV0b2lwZCldKSkKK2lmIHRlc3QgLXogIiR3aXRoX2F1dG9pcGRfZ3JvdXAiIDsgdGhlbgorICAgIEFWQUhJX0FVVE9JUERfR1JPVVA9YXZhaGktYXV0b2lwZAorZWxzZQorICAgIEFWQUhJX0FVVE9JUERfR1JPVVA9JHdpdGhfYXV0b2lwZF9ncm91cAorZmkKK0FDX1NVQlNUKEFWQUhJX0FVVE9JUERfR1JPVVApCitBQ19ERUZJTkVfVU5RVU9URUQoQVZBSElfQVVUT0lQRF9HUk9VUCwiJEFWQUhJX0FVVE9JUERfR1JPVVAiLCBbR3JvdXAgZm9yIHJ1bm5pbmcgdGhlIGF2YWhpLWF1dG9pcGQgZGFlbW9uXSkKKworIworIyBBdmFoaSBydW50aW1lIGRpcgorIworYXZhaGlfcnVudGltZV9kaXI9IiR7bG9jYWxzdGF0ZWRpcn0vcnVuIgorYXZhaGlfc29ja2V0PSIke2F2YWhpX3J1bnRpbWVfZGlyfS9hdmFoaS1kYWVtb24vc29ja2V0IgorQUNfU1VCU1QoYXZhaGlfcnVudGltZV9kaXIpCitBQ19TVUJTVChhdmFoaV9zb2NrZXQpCisKKyMKKyMgQXZhaGkgaW50ZXJmYWNlcyBkaXIKKyMKK2lmIHRlc3QgIngkSEFWRV9QWVRIT05fREJVUyIgPSAieHllcyIgLW8gIngkSEFWRV9HVEsiID0gInh5ZXMiOyB0aGVuCisJaW50ZXJmYWNlc2Rpcj0iJHtkYXRhZGlyfS8ke1BBQ0tBR0V9L2ludGVyZmFjZXMvIgorCUFDX1NVQlNUKGludGVyZmFjZXNkaXIpCitmaQorCisjCisjIERveHlnZW4KKyMKK0RYX0hUTUxfRkVBVFVSRShPTikKK0RYX0NITV9GRUFUVVJFKE9GRikKK0RYX0NISV9GRUFUVVJFKE9GRikKK0RYX01BTl9GRUFUVVJFKE9GRikKK0RYX1JURl9GRUFUVVJFKE9GRikKK0RYX1hNTF9GRUFUVVJFKE9OKQorRFhfUERGX0ZFQVRVUkUoT0ZGKQorRFhfUFNfRkVBVFVSRShPRkYpCitEWF9JTklUX0RPWFlHRU4oYXZhaGksIGRveHlnZW4uY2ZnLCBkb3h5Z2VuKQorCitBQ19BUkdfRU5BQkxFKGNvcmUtZG9jcywKKyAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWNvcmUtZG9jc10sW0VuYWJsZSBidWlsZGluZyBvZiBkb2N1bWVudGF0aW9uIGZvciBhdmFoaS1jb3JlXSksCitbY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorICB5ZXMpIEVOQUJMRV9DT1JFX0RPQ1M9eWVzIDs7CisgIG5vKSAgRU5BQkxFX0NPUkVfRE9DUz1ubyA7OworICAqKSBBQ19NU0dfRVJST1IoW2JhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLWNvcmUtZG9jc10pIDs7Citlc2FjXSxbRU5BQkxFX0NPUkVfRE9DUz1ub10pCisKK0FNX0NPTkRJVElPTkFMKFtFTkFCTEVfQ09SRV9ET0NTXSwgW3Rlc3QgIngkRU5BQkxFX0NPUkVfRE9DUyIgPSB4eWVzXSkKKworIworIyBCdWlsZCBhbmQgSW5zdGFsbCBtYW4gcGFnZXMKKyMKK0FDX0FSR19FTkFCTEUobWFucGFnZXMsCisgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtbWFucGFnZXNdLFtEaXNhYmxlIGJ1aWxkaW5nIGFuZCBpbnN0YWxsYXRpb24gb2YgbWFuIHBhZ2VzXSksCitbY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorICB5ZXMpIG1hbnBhZ2VzPXllcyA7OworICBubykgIG1hbnBhZ2VzPW5vIDs7CisgICopIEFDX01TR19FUlJPUihbYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1kaXNhYmxlLW1hbnBhZ2VzXSkgOzsKK2VzYWNdLFttYW5wYWdlcz15ZXNdKQorCitpZiB0ZXN0IHgkbWFucGFnZXMgPSB4eWVzIDsgdGhlbgorICAgICMKKyAgICAjIFhNTFRPTUFOIG1hbnBhZ2UgZ2VuZXJhdGlvbgorICAgICMKKyAgICBBQ19BUkdfRU5BQkxFKHhtbHRvbWFuLAorICAgIEFTX0hFTFBfU1RSSU5HKFstLWRpc2FibGUteG1sdG9tYW5dLFtEaXNhYmxlIHJlYnVpbGRpbmcgb2YgbWFuIHBhZ2VzIHdpdGggeG1sdG9tYW5dKSwKKyAgICBbY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorICAgICAgeWVzKSB4bWx0b21hbj15ZXMgOzsKKyAgICAgIG5vKSAgeG1sdG9tYW49bm8gOzsKKyAgICAgICopIEFDX01TR19FUlJPUihbYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1kaXNhYmxlLXhtbHRvbWFuXSkgOzsKKyAgICBlc2FjXSxbeG1sdG9tYW49eWVzXSkKKworICAgIGlmIHRlc3QgeCR4bWx0b21hbiA9IHh5ZXMgOyB0aGVuCisgICAgICAgIEFDX0NIRUNLX1BST0coaGF2ZV94bWx0b21hbiwgeG1sdG9tYW4sIHllcywgbm8pCisgICAgZmkKKworICAgIGlmIHRlc3QgeCRoYXZlX3htbHRvbWFuID0geG5vIC1vIHgkeG1sdG9tYW4gPSB4bm87IHRoZW4KKyAgICAgICAgaWYgISB0ZXN0IC1lIG1hbi9hdmFoaS1kYWVtb24uOCA7IHRoZW4KKyAgICAgICAgICAgIEFDX01TR19FUlJPUihbKioqIHhtbHRvbWFuIHdhcyBub3QgZm91bmQgb3Igd2FzIGRpc2FibGVkLCBpdCBpcyByZXF1aXJlZCB0byBidWlsZCB0aGUgbWFucGFnZXMgYXMgdGhleSBoYXZlIG5vdCBiZWVuIHByZS1idWlsdCwgaW5zdGFsbCB4bWx0b21hbiwgcGFzcyAtLWRpc2FibGUtbWFucGFnZXMgb3IgZG9udCBwYXNzIC0tZGlzYWJsZS14bWx0b21hbl0pCisgICAgICAgICAgICBleGl0IDEKKyAgICAgICAgZmkKKyAgICAgICAgQUNfTVNHX1dBUk4oWyoqKiBOb3QgcmVidWlsZGluZyBtYW4gcGFnZXMgYXMgeG1sdG9tYW4gaXMgbm90IGZvdW5kICoqKl0pCisgICAgICAgIHhtbHRvbWFuPW5vCisgICAgZmkKK2ZpCitBTV9DT05ESVRJT05BTChbVVNFX1hNTFRPTUFOXSwgW3Rlc3QgIngkeG1sdG9tYW4iID0geHllc10pCitBTV9DT05ESVRJT05BTChbQlVJTERfTUFOUEFHRVNdLCBbdGVzdCAieCRtYW5wYWdlcyIgPSB4eWVzXSkKKworIworIyBDb25kaXRpb25hbGx5IGNvbXBpbGUgdGVzdCBhbmQgZXhhbXBsZSBwcm9ncmFtcworIworQUNfQVJHX0VOQUJMRSh0ZXN0cywKKyAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXRlc3RzXSxbRW5hYmxlIGJ1aWxkaW5nIG9mIHRlc3RzIGFuZCBleGFtcGxlc10pLAorICAgICAgICBbY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorICAgICAgICAgICAgICAgIHllcykgRU5BQkxFX1RFU1RTPXllcyA7OworICAgICAgICAgICAgICAgIG5vKSAgRU5BQkxFX1RFU1RTPW5vIDs7CisgICAgICAgICAgICAgICAgKikgQUNfTVNHX0VSUk9SKGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLXRlc3RzKSA7OworICAgICAgICBlc2FjXSwKKyAgICAgICAgW0VOQUJMRV9URVNUUz1ub10pCisKK0FNX0NPTkRJVElPTkFMKFtFTkFCTEVfVEVTVFNdLCBbdGVzdCAieCRFTkFCTEVfVEVTVFMiID0gInh5ZXMiXSkKKworIworIyBPcHRpb25hbGx5IGVuYWJsZSBsaWJkbnNfc2QgY29tcGF0aWJpbGl0eSBzdXBwb3J0CisjCitBQ19BUkdfRU5BQkxFKGNvbXBhdC1saWJkbnNfc2QsCisgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1jb21wYXQtbGliZG5zX3NkXSxbRW5hYmxlIGNvbXBhdGliaWxpdHkgbGF5ZXIgZm9yIGxpYmRuc19zZF0pLAorICAgICAgICBbY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorICAgICAgICAgICAgICAgIHllcykgRU5BQkxFX0NPTVBBVF9MSUJETlNfU0Q9eWVzIDs7CisgICAgICAgICAgICAgICAgbm8pICBFTkFCTEVfQ09NUEFUX0xJQkROU19TRD1ubyA7OworICAgICAgICAgICAgICAgICopIEFDX01TR19FUlJPUihiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1jb21wYXQtbGliZG5zX3NkKSA7OworICAgICAgICBlc2FjXSwKKyAgICAgICAgW0VOQUJMRV9DT01QQVRfTElCRE5TX1NEPW5vXSkKKworQU1fQ09ORElUSU9OQUwoW0VOQUJMRV9DT01QQVRfTElCRE5TX1NEXSwgW3Rlc3QgIngkRU5BQkxFX0NPTVBBVF9MSUJETlNfU0QiID0gInh5ZXMiXSkKKworIworIyBPcHRpb25hbGx5IGVuYWJsZSBIT1dMIGNvbXBhdGliaWxpdHkgc3VwcG9ydAorIworQUNfQVJHX0VOQUJMRShjb21wYXQtaG93bCwKKyAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWNvbXBhdC1ob3dsXSxbRW5hYmxlIGNvbXBhdGliaWxpdHkgbGF5ZXIgZm9yIEhPV0xdKSwKKyAgICAgICAgW2Nhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKyAgICAgICAgICAgICAgICB5ZXMpIEVOQUJMRV9DT01QQVRfSE9XTD15ZXMgOzsKKyAgICAgICAgICAgICAgICBubykgIEVOQUJMRV9DT01QQVRfSE9XTD1ubyA7OworICAgICAgICAgICAgICAgICopIEFDX01TR19FUlJPUihiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1jb21wYXQtaG93bCkgOzsKKyAgICAgICAgZXNhY10sCisgICAgICAgIFtFTkFCTEVfQ09NUEFUX0hPV0w9bm9dKQorCitBTV9DT05ESVRJT05BTChbRU5BQkxFX0NPTVBBVF9IT1dMXSwgW3Rlc3QgIngkRU5BQkxFX0NPTVBBVF9IT1dMIiA9ICJ4eWVzIl0pCisKKyMKKyMgc3lzdGVtZAorIworQUNfQVJHX1dJVEgoW3N5c3RlbWRzeXN0ZW11bml0ZGlyXSwKKyAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1zeXN0ZW1kc3lzdGVtdW5pdGRpcj1ESVJdLCBbRGlyZWN0b3J5IGZvciBzeXN0ZW1kIHNlcnZpY2UgZmlsZXNdKSwKKyAgICAgICAgW10sCisgICAgICAgIFt3aXRoX3N5c3RlbWRzeXN0ZW11bml0ZGlyPSQoJFBLR19DT05GSUcgLS12YXJpYWJsZT1zeXN0ZW1kc3lzdGVtdW5pdGRpciBzeXN0ZW1kKV0pCitpZiB0ZXN0ICJ4JHdpdGhfc3lzdGVtZHN5c3RlbXVuaXRkaXIiICE9IHhubzsgdGhlbgorICAgICAgICBBQ19TVUJTVChbc3lzdGVtZHN5c3RlbXVuaXRkaXJdLCBbJHdpdGhfc3lzdGVtZHN5c3RlbXVuaXRkaXJdKQorZmkKK0FNX0NPTkRJVElPTkFMKEhBVkVfU1lTVEVNRCwgW3Rlc3QgLW4gIiR3aXRoX3N5c3RlbWRzeXN0ZW11bml0ZGlyIiAtYSAieCR3aXRoX3N5c3RlbWRzeXN0ZW11bml0ZGlyIiAhPSB4bm8gXSkKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQUNfQ09ORklHX0ZJTEVTKFsKK01ha2VmaWxlCithdmFoaS1jb21tb24vTWFrZWZpbGUKK2F2YWhpLWNvcmUvTWFrZWZpbGUKK2F2YWhpLWdsaWIvTWFrZWZpbGUKK2F2YWhpLWdvYmplY3QvTWFrZWZpbGUKK2F2YWhpLXF0L01ha2VmaWxlCithdmFoaS1kYWVtb24vTWFrZWZpbGUKK2F2YWhpLWRhZW1vbi9hdmFoaS1kYnVzLmNvbmYKK2F2YWhpLWRpc2NvdmVyLXN0YW5kYWxvbmUvTWFrZWZpbGUKK2F2YWhpLWNsaWVudC9NYWtlZmlsZQoraW5pdHNjcmlwdC9NYWtlZmlsZQoraW5pdHNjcmlwdC9kZWJpYW4vTWFrZWZpbGUKK2luaXRzY3JpcHQvZ2VudG9vL01ha2VmaWxlCitpbml0c2NyaXB0L2FyY2hsaW51eC9NYWtlZmlsZQoraW5pdHNjcmlwdC9zdXNlL01ha2VmaWxlCitpbml0c2NyaXB0L2ZlZG9yYS9NYWtlZmlsZQoraW5pdHNjcmlwdC9sZnMvTWFrZWZpbGUKK2luaXRzY3JpcHQvbWFuZHJpdmEvTWFrZWZpbGUKK2luaXRzY3JpcHQvZGFyd2luL01ha2VmaWxlCitpbml0c2NyaXB0L2ZyZWVic2QvTWFrZWZpbGUKK2luaXRzY3JpcHQvc2xhY2t3YXJlL01ha2VmaWxlCithdmFoaS1kbnNjb25mZC9NYWtlZmlsZQorYXZhaGktdXRpbHMvTWFrZWZpbGUKK2F2YWhpLXB5dGhvbi9NYWtlZmlsZQorYXZhaGktcHl0aG9uL2F2YWhpL01ha2VmaWxlCithdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvTWFrZWZpbGUKK2V4YW1wbGVzL01ha2VmaWxlCitjb21tb24vTWFrZWZpbGUKK21hbi9NYWtlZmlsZQordGVzdHMvTWFrZWZpbGUKK3NlcnZpY2UtdHlwZS1kYXRhYmFzZS9NYWtlZmlsZQorYXZhaGktc2hhcnAvTWFrZWZpbGUKK2F2YWhpLXVpLXNoYXJwL01ha2VmaWxlCithdmFoaS1jb21wYXQtbGliZG5zX3NkL01ha2VmaWxlCithdmFoaS1jb21wYXQtaG93bC9NYWtlZmlsZQorYXZhaGktY29tcGF0LWhvd2wvc2FtcGxlcy9NYWtlZmlsZQorYXZhaGktYXV0b2lwZC9NYWtlZmlsZQorYXZhaGktdWkvTWFrZWZpbGUKK3BvL01ha2VmaWxlLmluCitdKQorQUNfT1VUUFVUCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2VjaG8gIgorIC0tLXsgJFBBQ0tBR0VfTkFNRSAkVkVSU0lPTiB9LS0tCisKKyAgICBwcmVmaXg6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtwcmVmaXh9CisgICAgc3lzY29uZmRpcjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0KKyAgICBsb2NhbHN0YXRlZGlyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsb2NhbHN0YXRlZGlyfQorICAgIGF2YWhpIHNvY2tldDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2F2YWhpX3NvY2tldH0KKyAgICBkYnVzLTEgc3lzdGVtLmQgZGlyOiAgICAgICAgICAgICAgICAgICAgICAgJHtEQlVTX1NZU19ESVJ9CisgICAgZGJ1cy0xIHZlcnNpb246ICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7REJVU19WRVJTSU9OfQorICAgIGRidXMtMSBzeXN0ZW0gc29ja2V0OiAgICAgICAgICAgICAgICAgICAgICAke0RCVVNfU1lTVEVNX0JVU19ERUZBVUxUX0FERFJFU1N9CisgICAgQyBDb21waWxlcjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7Q0N9CisgICAgQ0ZMQUdTOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7Q0ZMQUdTfQorICAgIEVuYWJsZSBHTElCOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke0hBVkVfR0xJQn0KKyAgICBFbmFibGUgR0xJQiBHT2JqZWN0OiAgICAgICAgICAgICAgICAgICAgICAgJHtIQVZFX0dPQkpFQ1R9CisgICAgRW5hYmxlIEdPYmplY3QgSW50cm9zcGVjdGlvbjogICAgICAgICAgICAgICR7Zm91bmRfaW50cm9zcGVjdGlvbn0KKyAgICBFbmFibGUgR1RLIDIuMDogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtIQVZFX0dUS30KKyAgICBFbmFibGUgR1RLIDMuMDogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtIQVZFX0dUSzN9CisgICAgRW5hYmxlIEQtQnVzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7SEFWRV9EQlVTfQorICAgIFdpdGggWE1MOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3dpdGhfeG1sfQorICAgIEVuYWJsZSBHREJNOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke0hBVkVfR0RCTX0KKyAgICBFbmFibGUgREJNOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtIQVZFX0RCTX0KKyAgICBFbmFibGUgbGliZGFlbW9uOiAgICAgICAgICAgICAgICAgICAgICAgICAgJHtIQVZFX0xJQkRBRU1PTn0KKyAgICBFbmFibGUgUHl0aG9uOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtIQVZFX1BZVEhPTn0KKyAgICBFbmFibGUgcHlndGs6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtIQVZFX1BZR1RLfQorICAgIEVuYWJsZSBweXRob24tZGJ1czogICAgICAgICAgICAgICAgICAgICAgICAke0hBVkVfUFlUSE9OX0RCVVN9CisgICAgRW5hYmxlIFFUMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7SEFWRV9RVDN9CisgICAgRW5hYmxlIFFUNDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7SEFWRV9RVDR9CisgICAgRW5hYmxlIE1vbm86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7SEFWRV9NT05PfQorICAgIEVuYWJsZSBNb25vZG9jOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke0hBVkVfTU9OT0RPQ30KKyAgICBEaXN0cmlidXRpb24vT1M6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJHt3aXRoX2Rpc3Ryb30KKyAgICBVc2VyIGZvciBhdmFoaS1kYWVtb246ICAgICAgICAgICAgICAgICAgICAgJHtBVkFISV9VU0VSfQorICAgIEdyb3VwIGZvciBhdmFoaS1kYWVtb246ICAgICAgICAgICAgICAgICAgICAke0FWQUhJX0dST1VQfQorICAgIFByaXZpbGlnZWQgYWNjZXNzIGdyb3VwIGZvciBBdmFoaSBjbGllbnRzOiAke0FWQUhJX1BSSVZfQUNDRVNTX0dST1VQfQorICAgIFVzZXIgZm9yIGF2YWhpLWF1dG9pcGQ6ICAgICAgICAgICAgICAgICAgICAke0FWQUhJX0FVVE9JUERfVVNFUn0KKyAgICBHcm91cCBmb3IgYXZhaGktYXV0b2lwZDogICAgICAgICAgICAgICAgICAgJHtBVkFISV9BVVRPSVBEX0dST1VQfQorICAgIEVuYWJsZSBjaHJvb3QoKTogICAgICAgICAgICAgICAgICAgICAgICAgICAke2VuYWJsZV9jaHJvb3R9CisgICAgRW5hYmxlIExpbnV4IGlub3RpZnk6ICAgICAgICAgICAgICAgICAgICAgICR7aGF2ZV9pbm90aWZ5fQorICAgIEVuYWJsZSBzdGFjay1zbWFzaGluZyBwcm90ZWN0aW9uOiAgICAgICAgICAke2VuYWJsZV9zc3B9CisgICAgc3lzdGVtZCB1bml0IGRpcmVjdG9yeTogICAgICAgICAgICAgICAgICAgICR7d2l0aF9zeXN0ZW1kc3lzdGVtdW5pdGRpcn0KKyIKKworQlVJTERfREFFTU9OPSJubyAgIChZb3UgbmVlZCBsaWJkYWVtb24gYW5kIGV4cGF0L2JzZHhtbCEpIgorCitpZiB0ZXN0ICJ4JEhBVkVfWE1MIiA9ICJ4eWVzIiAtYSAieCRIQVZFX0xJQkRBRU1PTiIgPSAieHllcyIgOyB0aGVuCisgICAgQlVJTERfREFFTU9OPXllcworZmkKKworQlVJTERfUFlUSE9OPSJubyAgIChZb3UgbmVlZCBweXRob24sIHB5Z3RrIGFuZCBweXRob24tZGJ1cyEpIgorCitpZiB0ZXN0ICJ4JEJVSUxEX0RBRU1PTiIgPSAieHllcyIgLWEgIngkSEFWRV9EQlVTIiA9ICJ4eWVzIiAtYSAieCRIQVZFX1BZVEhPTiIgPSAieHllcyIgLWEgIngkSEFWRV9QWVRIT05fREJVUyIgPSAieHllcyIgLWEgIngkSEFWRV9QWUdUSyIgPSAieHllcyIgOyB0aGVuCisgICAgQlVJTERfUFlUSE9OPXllcworZmkKKworQlVJTERfQ0xJRU5UPSJubyAgIChZb3UgbmVlZCBhdmFoaS1kYWVtb24gYW5kIEQtQnVzISkiCisKK2lmIHRlc3QgIngkQlVJTERfREFFTU9OIiA9ICJ4eWVzIiAtYSAieCRIQVZFX0RCVVMiID0gInh5ZXMiIDsgdGhlbgorICAgIEJVSUxEX0NMSUVOVD15ZXMKK2ZpCisKK2lmIHRlc3QgIngkRU5BQkxFX0NPTVBBVF9MSUJETlNfU0QiID0gInh5ZXMiIC1hICJ4JEJVSUxEX0NMSUVOVCIgIT0gInh5ZXMiIDsgdGhlbgorICAgRU5BQkxFX0NPTVBBVF9MSUJETlNfU0Q9Im5vICAgKFlvdSBuZWVkIGxpYmF2YWhpLWNsaWVudCEpIgorZmkKK2lmIHRlc3QgIngkRU5BQkxFX0NPTVBBVF9IT1dMIiA9ICJ4eWVzIiAtYSAieCRCVUlMRF9DTElFTlQiICE9ICJ4eWVzIiA7IHRoZW4KKyAgIEVOQUJMRV9DT01QQVRfSE9XTD0ibm8gICAoWW91IG5lZWQgbGliYXZhaGktY2xpZW50ISkiCitmaQoraWYgdGVzdCAieCRFTkFCTEVfQVVUT0lQRCIgPSAieHllcyIgLWEgIngkSEFWRV9MSUJEQUVNT04iICE9ICJ4eWVzIiA7IHRoZW4KKyAgIEVOQUJMRV9BVVRPSVBEPSJubyAgIChZb3UgbmVlZCBsaWJkYWVtb24hKSIKK2ZpCisKK0hBVkVfR1RLMk9SMz1ubworaWYgdGVzdCAieCRIQVZFX0dUSyIgPSAieHllcyIgLW8gIngkSEFWRV9HVEszIiA9ICJ4eWVzIiA7IHRoZW4KKyAgIEhBVkVfR1RLMk9SMz15ZXMKK2ZpCisKK0JVSUxEX1VJPSJubyIKK2lmIHRlc3QgIngkSEFWRV9HVEsyT1IzIiA9ICJ4eWVzIiAtYSAieCRCVUlMRF9DTElFTlQiID0gInh5ZXMiIDsgdGhlbgorICAgQlVJTERfVUk9InllcyIKK2ZpCisKK0JVSUxEX0dPQkpFQ1Q9Im5vIgoraWYgdGVzdCAieCRCVUlMRF9DTElFTlQiID0gInh5ZXMiIC1hICJ4JEhBVkVfR09CSkVDVCIgPSAieHllcyIgOyB0aGVuCisgICBCVUlMRF9HT0JKRUNUPSJ5ZXMiCitmaQorCitlY2hvICJcCisgICAgQnVpbGRpbmcgbGliYXZhaGktY29yZSAgICAgICAgICAgICAgeWVzCisgICAgQnVpbGRpbmcgYXZhaGktZGFlbW9uOiAgICAgICAgICAgICAgJHtCVUlMRF9EQUVNT059CisgICAgQnVpbGRpbmcgYXZhaGktZG5zY29uZmQ6ICAgICAgICAgICAgJHtCVUlMRF9EQUVNT059CisgICAgQnVpbGRpbmcgbGliYXZhaGktY2xpZW50OiAgICAgICAgICAgJHtCVUlMRF9DTElFTlR9CisgICAgQnVpbGRpbmcgYXZhaGktdXRpbHM6ICAgICAgICAgICAgICAgJHtCVUlMRF9DTElFTlR9CisgICAgQnVpbGRpbmcgYXZhaGktcHl0aG9uOiAgICAgICAgICAgICAgJHtCVUlMRF9QWVRIT059CisgICAgQnVpbGRpbmcgbGliYXZhaGktZ2xpYjogICAgICAgICAgICAgJHtIQVZFX0dMSUJ9CisgICAgQnVpbGRpbmcgbGliYXZhaGktZ29iamVjdDogICAgICAgICAgJHtCVUlMRF9HT0JKRUNUfQorICAgIEJ1aWxkaW5nIGF2YWhpLWRpc2NvdmVyLXN0YW5kYWxvbmU6ICR7SEFWRV9HVEsyT1IzfQorICAgIEJ1aWxkaW5nIGxpYmF2YWhpLXF0MzogICAgICAgICAgICAgICR7SEFWRV9RVDN9CisgICAgQnVpbGRpbmcgbGliYXZhaGktcXQ0OiAgICAgICAgICAgICAgJHtIQVZFX1FUNH0KKyAgICBCdWlsZGluZyBhdmFoaS1zaGFycDogICAgICAgICAgICAgICAke0hBVkVfTU9OT30KKyAgICBCdWlsZGluZyBhdmFoaS1jb21wYXQtbGliZG5zX3NkOiAgICAke0VOQUJMRV9DT01QQVRfTElCRE5TX1NEfQorICAgIEJ1aWxkaW5nIGF2YWhpLWNvbXBhdC1ob3dsOiAgICAgICAgICR7RU5BQkxFX0NPTVBBVF9IT1dMfQorICAgIEJ1aWxkaW5nIHRlc3RzOiAgICAgICAgICAgICAgICAgICAgICR7RU5BQkxFX1RFU1RTfQorICAgIEJ1aWxkaW5nIGF2YWhpLWNvcmUgZG9jdW1lbnRhdGlvbjogICR7RU5BQkxFX0NPUkVfRE9DU30KKyAgICBCdWlsZGluZyBhdmFoaS1hdXRvaXBkOiAgICAgICAgICAgICAke0VOQUJMRV9BVVRPSVBEfQorICAgIEJ1aWxkaW5nIGxpYmF2YWhpLXVpOiAgICAgICAgICAgICAgICR7QlVJTERfVUl9CisiCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvY29uZmlndXJlLm9yaWcgYi9hdmFoaS0wLjYuMzEvY29uZmlndXJlLm9yaWcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWJjNmEzYQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9jb25maWd1cmUub3JpZwpAQCAtMCwwICsxLDI3OTUyIEBACisjISAvYmluL3NoCisjIEd1ZXNzIHZhbHVlcyBmb3Igc3lzdGVtLWRlcGVuZGVudCB2YXJpYWJsZXMgYW5kIGNyZWF0ZSBNYWtlZmlsZXMuCisjIEdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OCBmb3IgYXZhaGkgMC42LjMxLgorIworIyBSZXBvcnQgYnVncyB0byA8YXZhaGkgKGF0KSBsaXN0cyAoZG90KSBmcmVlZGVza3RvcCAoZG90KSBvcmc+LgorIworIworIyBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsCisjIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuCisjCisjCisjIFRoaXMgY29uZmlndXJlIHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4KKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBNNHNoIEluaXRpYWxpemF0aW9uLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBCZSBtb3JlIEJvdXJuZSBjb21wYXRpYmxlCitEVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCitpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICBlbXVsYXRlIHNoCisgIE5VTExDTUQ9OgorICAjIFByZS00LjIgdmVyc2lvbnMgb2YgWnNoIGRvIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gKKyAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KKyAgYWxpYXMgLWcgJyR7MSsiJEAifSc9JyIkQCInCisgIHNldG9wdCBOT19HTE9CX1NVQlNUCitlbHNlCisgIGNhc2UgYChzZXQgLW8pIDI+L2Rldi9udWxsYCBpbiAjKAorICAqcG9zaXgqKSA6CisgICAgc2V0IC1vIHBvc2l4IDs7ICMoCisgICopIDoKKyAgICAgOzsKK2VzYWMKK2ZpCisKKworYXNfbmw9JworJworZXhwb3J0IGFzX25sCisjIFByaW50aW5nIGEgbG9uZyBzdHJpbmcgY3Jhc2hlcyBTb2xhcmlzIDcgL3Vzci9iaW4vcHJpbnRmLgorYXNfZWNobz0nXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCcKK2FzX2VjaG89JGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobworYXNfZWNobz0kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8KKyMgUHJlZmVyIGEga3NoIHNoZWxsIGJ1aWx0aW4gb3ZlciBhbiBleHRlcm5hbCBwcmludGYgcHJvZ3JhbSBvbiBTb2xhcmlzLAorIyBidXQgd2l0aG91dCB3YXN0aW5nIGZvcmtzIGZvciBiYXNoIG9yIHpzaC4KK2lmIHRlc3QgLXogIiRCQVNIX1ZFUlNJT04kWlNIX1ZFUlNJT04iIFwKKyAgICAmJiAodGVzdCAiWGBwcmludCAtciAtLSAkYXNfZWNob2AiID0gIlgkYXNfZWNobyIpIDI+L2Rldi9udWxsOyB0aGVuCisgIGFzX2VjaG89J3ByaW50IC1yIC0tJworICBhc19lY2hvX249J3ByaW50IC1ybiAtLScKK2VsaWYgKHRlc3QgIlhgcHJpbnRmICVzICRhc19lY2hvYCIgPSAiWCRhc19lY2hvIikgMj4vZGV2L251bGw7IHRoZW4KKyAgYXNfZWNobz0ncHJpbnRmICVzXG4nCisgIGFzX2VjaG9fbj0ncHJpbnRmICVzJworZWxzZQorICBpZiB0ZXN0ICJYYCgvdXNyL3VjYi9lY2hvIC1uIC1uICRhc19lY2hvKSAyPi9kZXYvbnVsbGAiID0gIlgtbiAkYXNfZWNobyI7IHRoZW4KKyAgICBhc19lY2hvX2JvZHk9J2V2YWwgL3Vzci91Y2IvZWNobyAtbiAiJDEkYXNfbmwiJworICAgIGFzX2VjaG9fbj0nL3Vzci91Y2IvZWNobyAtbicKKyAgZWxzZQorICAgIGFzX2VjaG9fYm9keT0nZXZhbCBleHByICJYJDEiIDogIlhcXCguKlxcKSInCisgICAgYXNfZWNob19uX2JvZHk9J2V2YWwKKyAgICAgIGFyZz0kMTsKKyAgICAgIGNhc2UgJGFyZyBpbiAjKAorICAgICAgKiIkYXNfbmwiKikKKwlleHByICJYJGFyZyIgOiAiWFxcKC4qXFwpJGFzX25sIjsKKwlhcmc9YGV4cHIgIlgkYXJnIiA6ICIuKiRhc19ubFxcKC4qXFwpImA7OworICAgICAgZXNhYzsKKyAgICAgIGV4cHIgIlgkYXJnIiA6ICJYXFwoLipcXCkiIHwgdHIgLWQgIiRhc19ubCIKKyAgICAnCisgICAgZXhwb3J0IGFzX2VjaG9fbl9ib2R5CisgICAgYXNfZWNob19uPSdzaCAtYyAkYXNfZWNob19uX2JvZHkgYXNfZWNobycKKyAgZmkKKyAgZXhwb3J0IGFzX2VjaG9fYm9keQorICBhc19lY2hvPSdzaCAtYyAkYXNfZWNob19ib2R5IGFzX2VjaG8nCitmaQorCisjIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KK2lmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCisgIFBBVEhfU0VQQVJBVE9SPToKKyAgKFBBVEg9Jy9iaW47L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgJiYgeworICAgIChQQVRIPScvYmluOi9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9kZXYvbnVsbCAyPiYxIHx8CisgICAgICBQQVRIX1NFUEFSQVRPUj0nOycKKyAgfQorZmkKKworCisjIElGUworIyBXZSBuZWVkIHNwYWNlLCB0YWIgYW5kIG5ldyBsaW5lLCBpbiBwcmVjaXNlbHkgdGhhdCBvcmRlci4gIFF1b3RpbmcgaXMKKyMgdGhlcmUgdG8gcHJldmVudCBlZGl0b3JzIGZyb20gY29tcGxhaW5pbmcgYWJvdXQgc3BhY2UtdGFiLgorIyAoSWYgX0FTX1BBVEhfV0FMSyB3ZXJlIGNhbGxlZCB3aXRoIElGUyB1bnNldCwgaXQgd291bGQgZGlzYWJsZSB3b3JkCisjIHNwbGl0dGluZyBieSBzZXR0aW5nIElGUyB0byBlbXB0eSB2YWx1ZS4pCitJRlM9IiAiIgkkYXNfbmwiCisKKyMgRmluZCB3aG8gd2UgYXJlLiAgTG9vayBpbiB0aGUgcGF0aCBpZiB3ZSBjb250YWluIG5vIGRpcmVjdG9yeSBzZXBhcmF0b3IuCithc19teXNlbGY9CitjYXNlICQwIGluICMoKAorICAqW1xcL10qICkgYXNfbXlzZWxmPSQwIDs7CisgICopIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICB0ZXN0IC1yICIkYXNfZGlyLyQwIiAmJiBhc19teXNlbGY9JGFzX2Rpci8kMCAmJiBicmVhaworICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgICAgOzsKK2VzYWMKKyMgV2UgZGlkIG5vdCBmaW5kIG91cnNlbHZlcywgbW9zdCBwcm9iYWJseSB3ZSB3ZXJlIHJ1biBhcyBgc2ggQ09NTUFORCcKKyMgaW4gd2hpY2ggY2FzZSB3ZSBhcmUgbm90IHRvIGJlIGZvdW5kIGluIHRoZSBwYXRoLgoraWYgdGVzdCAieCRhc19teXNlbGYiID0geDsgdGhlbgorICBhc19teXNlbGY9JDAKK2ZpCitpZiB0ZXN0ICEgLWYgIiRhc19teXNlbGYiOyB0aGVuCisgICRhc19lY2hvICIkYXNfbXlzZWxmOiBlcnJvcjogY2Fubm90IGZpbmQgbXlzZWxmOyByZXJ1biB3aXRoIGFuIGFic29sdXRlIGZpbGUgbmFtZSIgPiYyCisgIGV4aXQgMQorZmkKKworIyBVbnNldCB2YXJpYWJsZXMgdGhhdCB3ZSBkbyBub3QgbmVlZCBhbmQgd2hpY2ggY2F1c2UgYnVncyAoZS5nLiBpbgorIyBwcmUtMy4wIFVXSU4ga3NoKS4gIEJ1dCBkbyBub3QgY2F1c2UgYnVncyBpbiBiYXNoIDIuMDE7IHRoZSAifHwgZXhpdCAxIgorIyBzdXBwcmVzc2VzIGFueSAiU2VnbWVudGF0aW9uIGZhdWx0IiBtZXNzYWdlIHRoZXJlLiAgJygoJyBjb3VsZAorIyB0cmlnZ2VyIGEgYnVnIGluIHBka3NoIDUuMi4xNC4KK2ZvciBhc192YXIgaW4gQkFTSF9FTlYgRU5WIE1BSUwgTUFJTFBBVEgKK2RvIGV2YWwgdGVzdCB4XCR7JGFzX3ZhcitzZXR9ID0geHNldCBcCisgICYmICggKHVuc2V0ICRhc192YXIpIHx8IGV4aXQgMSkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0ICRhc192YXIgfHwgOgorZG9uZQorUFMxPSckICcKK1BTMj0nPiAnCitQUzQ9JysgJworCisjIE5MUyBudWlzYW5jZXMuCitMQ19BTEw9QworZXhwb3J0IExDX0FMTAorTEFOR1VBR0U9QworZXhwb3J0IExBTkdVQUdFCisKKyMgQ0RQQVRILgorKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAorCitpZiB0ZXN0ICJ4JENPTkZJR19TSEVMTCIgPSB4OyB0aGVuCisgIGFzX2JvdXJuZV9jb21wYXRpYmxlPSJpZiB0ZXN0IC1uIFwiXCR7WlNIX1ZFUlNJT04rc2V0fVwiICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICBlbXVsYXRlIHNoCisgIE5VTExDTUQ9OgorICAjIFByZS00LjIgdmVyc2lvbnMgb2YgWnNoIGRvIHdvcmQgc3BsaXR0aW5nIG9uIFwkezErXCJcJEBcIn0sIHdoaWNoCisgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCisgIGFsaWFzIC1nICdcJHsxK1wiXCRAXCJ9Jz0nXCJcJEBcIicKKyAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2Vsc2UKKyAgY2FzZSBcYChzZXQgLW8pIDI+L2Rldi9udWxsXGAgaW4gIygKKyAgKnBvc2l4KikgOgorICAgIHNldCAtbyBwb3NpeCA7OyAjKAorICAqKSA6CisgICAgIDs7Citlc2FjCitmaQorIgorICBhc19yZXF1aXJlZD0iYXNfZm5fcmV0dXJuICgpIHsgKGV4aXQgXCQxKTsgfQorYXNfZm5fc3VjY2VzcyAoKSB7IGFzX2ZuX3JldHVybiAwOyB9Cithc19mbl9mYWlsdXJlICgpIHsgYXNfZm5fcmV0dXJuIDE7IH0KK2FzX2ZuX3JldF9zdWNjZXNzICgpIHsgcmV0dXJuIDA7IH0KK2FzX2ZuX3JldF9mYWlsdXJlICgpIHsgcmV0dXJuIDE7IH0KKworZXhpdGNvZGU9MAorYXNfZm5fc3VjY2VzcyB8fCB7IGV4aXRjb2RlPTE7IGVjaG8gYXNfZm5fc3VjY2VzcyBmYWlsZWQuOyB9Cithc19mbl9mYWlsdXJlICYmIHsgZXhpdGNvZGU9MTsgZWNobyBhc19mbl9mYWlsdXJlIHN1Y2NlZWRlZC47IH0KK2FzX2ZuX3JldF9zdWNjZXNzIHx8IHsgZXhpdGNvZGU9MTsgZWNobyBhc19mbl9yZXRfc3VjY2VzcyBmYWlsZWQuOyB9Cithc19mbl9yZXRfZmFpbHVyZSAmJiB7IGV4aXRjb2RlPTE7IGVjaG8gYXNfZm5fcmV0X2ZhaWx1cmUgc3VjY2VlZGVkLjsgfQoraWYgKCBzZXQgeDsgYXNfZm5fcmV0X3N1Y2Nlc3MgeSAmJiB0ZXN0IHggPSBcIlwkMVwiICk7IHRoZW4gOgorCitlbHNlCisgIGV4aXRjb2RlPTE7IGVjaG8gcG9zaXRpb25hbCBwYXJhbWV0ZXJzIHdlcmUgbm90IHNhdmVkLgorZmkKK3Rlc3QgeFwkZXhpdGNvZGUgPSB4MCB8fCBleGl0IDEiCisgIGFzX3N1Z2dlc3RlZD0iICBhc19saW5lbm9fMT0iO2FzX3N1Z2dlc3RlZD0kYXNfc3VnZ2VzdGVkJExJTkVOTzthc19zdWdnZXN0ZWQ9JGFzX3N1Z2dlc3RlZCIgYXNfbGluZW5vXzFhPVwkTElORU5PCisgIGFzX2xpbmVub18yPSI7YXNfc3VnZ2VzdGVkPSRhc19zdWdnZXN0ZWQkTElORU5PO2FzX3N1Z2dlc3RlZD0kYXNfc3VnZ2VzdGVkIiBhc19saW5lbm9fMmE9XCRMSU5FTk8KKyAgZXZhbCAndGVzdCBcInhcJGFzX2xpbmVub18xJ1wkYXNfcnVuJ1wiICE9IFwieFwkYXNfbGluZW5vXzInXCRhc19ydW4nXCIgJiYKKyAgdGVzdCBcInhcYGV4cHIgXCRhc19saW5lbm9fMSdcJGFzX3J1bicgKyAxXGBcIiA9IFwieFwkYXNfbGluZW5vXzInXCRhc19ydW4nXCInIHx8IGV4aXQgMQordGVzdCBcJCgoIDEgKyAxICkpID0gMiB8fCBleGl0IDEKKworICB0ZXN0IC1uIFwiXCR7WlNIX1ZFUlNJT04rc2V0fVwke0JBU0hfVkVSU0lPTitzZXR9XCIgfHwgKAorICAgIEVDSE89J1xcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcJworICAgIEVDSE89XCRFQ0hPXCRFQ0hPXCRFQ0hPXCRFQ0hPXCRFQ0hPCisgICAgRUNITz1cJEVDSE9cJEVDSE9cJEVDSE9cJEVDSE9cJEVDSE9cJEVDSE8KKyAgICBQQVRIPS9lbXB0eSBGUEFUSD0vZW1wdHk7IGV4cG9ydCBQQVRIIEZQQVRICisgICAgdGVzdCBcIlhcYHByaW50ZiAlcyBcJEVDSE9cYFwiID0gXCJYXCRFQ0hPXCIgXFwKKyAgICAgIHx8IHRlc3QgXCJYXGBwcmludCAtciAtLSBcJEVDSE9cYFwiID0gXCJYXCRFQ0hPXCIgKSB8fCBleGl0IDEiCisgIGlmIChldmFsICIkYXNfcmVxdWlyZWQiKSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIGFzX2hhdmVfcmVxdWlyZWQ9eWVzCitlbHNlCisgIGFzX2hhdmVfcmVxdWlyZWQ9bm8KK2ZpCisgIGlmIHRlc3QgeCRhc19oYXZlX3JlcXVpcmVkID0geHllcyAmJiAoZXZhbCAiJGFzX3N1Z2dlc3RlZCIpIDI+L2Rldi9udWxsOyB0aGVuIDoKKworZWxzZQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCithc19mb3VuZD1mYWxzZQorZm9yIGFzX2RpciBpbiAvYmluJFBBVEhfU0VQQVJBVE9SL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICBhc19mb3VuZD06CisgIGNhc2UgJGFzX2RpciBpbiAjKAorCSAvKikKKwkgICBmb3IgYXNfYmFzZSBpbiBzaCBiYXNoIGtzaCBzaDU7IGRvCisJICAgICAjIFRyeSBvbmx5IHNoZWxscyB0aGF0IGV4aXN0LCB0byBzYXZlIHNldmVyYWwgZm9ya3MuCisJICAgICBhc19zaGVsbD0kYXNfZGlyLyRhc19iYXNlCisJICAgICBpZiB7IHRlc3QgLWYgIiRhc19zaGVsbCIgfHwgdGVzdCAtZiAiJGFzX3NoZWxsLmV4ZSI7IH0gJiYKKwkJICAgIHsgJGFzX2VjaG8gIiRhc19ib3VybmVfY29tcGF0aWJsZSIiJGFzX3JlcXVpcmVkIiB8IGFzX3J1bj1hICIkYXNfc2hlbGwiOyB9IDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgQ09ORklHX1NIRUxMPSRhc19zaGVsbCBhc19oYXZlX3JlcXVpcmVkPXllcworCQkgICBpZiB7ICRhc19lY2hvICIkYXNfYm91cm5lX2NvbXBhdGlibGUiIiRhc19zdWdnZXN0ZWQiIHwgYXNfcnVuPWEgIiRhc19zaGVsbCI7IH0gMj4vZGV2L251bGw7IHRoZW4gOgorICBicmVhayAyCitmaQorZmkKKwkgICBkb25lOzsKKyAgICAgICBlc2FjCisgIGFzX2ZvdW5kPWZhbHNlCitkb25lCiskYXNfZm91bmQgfHwgeyBpZiB7IHRlc3QgLWYgIiRTSEVMTCIgfHwgdGVzdCAtZiAiJFNIRUxMLmV4ZSI7IH0gJiYKKwkgICAgICB7ICRhc19lY2hvICIkYXNfYm91cm5lX2NvbXBhdGlibGUiIiRhc19yZXF1aXJlZCIgfCBhc19ydW49YSAiJFNIRUxMIjsgfSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIENPTkZJR19TSEVMTD0kU0hFTEwgYXNfaGF2ZV9yZXF1aXJlZD15ZXMKK2ZpOyB9CitJRlM9JGFzX3NhdmVfSUZTCisKKworICAgICAgaWYgdGVzdCAieCRDT05GSUdfU0hFTEwiICE9IHg7IHRoZW4gOgorICAjIFdlIGNhbm5vdCB5ZXQgYXNzdW1lIGEgZGVjZW50IHNoZWxsLCBzbyB3ZSBoYXZlIHRvIHByb3ZpZGUgYQorCSMgbmV1dHJhbGl6YXRpb24gdmFsdWUgZm9yIHNoZWxscyB3aXRob3V0IHVuc2V0OyBhbmQgdGhpcyBhbHNvCisJIyB3b3JrcyBhcm91bmQgc2hlbGxzIHRoYXQgY2Fubm90IHVuc2V0IG5vbmV4aXN0ZW50IHZhcmlhYmxlcy4KKwkjIFByZXNlcnZlIC12IGFuZCAteCB0byB0aGUgcmVwbGFjZW1lbnQgc2hlbGwuCisJQkFTSF9FTlY9L2Rldi9udWxsCisJRU5WPS9kZXYvbnVsbAorCSh1bnNldCBCQVNIX0VOVikgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IEJBU0hfRU5WIEVOVgorCWV4cG9ydCBDT05GSUdfU0hFTEwKKwljYXNlICQtIGluICMgKCgoKAorCSAgKnYqeCogfCAqeCp2KiApIGFzX29wdHM9LXZ4IDs7CisJICAqdiogKSBhc19vcHRzPS12IDs7CisJICAqeCogKSBhc19vcHRzPS14IDs7CisJICAqICkgYXNfb3B0cz0gOzsKKwllc2FjCisJZXhlYyAiJENPTkZJR19TSEVMTCIgJGFzX29wdHMgIiRhc19teXNlbGYiICR7MSsiJEAifQorZmkKKworICAgIGlmIHRlc3QgeCRhc19oYXZlX3JlcXVpcmVkID0geG5vOyB0aGVuIDoKKyAgJGFzX2VjaG8gIiQwOiBUaGlzIHNjcmlwdCByZXF1aXJlcyBhIHNoZWxsIG1vcmUgbW9kZXJuIHRoYW4gYWxsIgorICAkYXNfZWNobyAiJDA6IHRoZSBzaGVsbHMgdGhhdCBJIGZvdW5kIG9uIHlvdXIgc3lzdGVtLiIKKyAgaWYgdGVzdCB4JHtaU0hfVkVSU0lPTitzZXR9ID0geHNldCA7IHRoZW4KKyAgICAkYXNfZWNobyAiJDA6IEluIHBhcnRpY3VsYXIsIHpzaCAkWlNIX1ZFUlNJT04gaGFzIGJ1Z3MgYW5kIHNob3VsZCIKKyAgICAkYXNfZWNobyAiJDA6IGJlIHVwZ3JhZGVkIHRvIHpzaCA0LjMuNCBvciBsYXRlci4iCisgIGVsc2UKKyAgICAkYXNfZWNobyAiJDA6IFBsZWFzZSB0ZWxsIGJ1Zy1hdXRvY29uZkBnbnUub3JnIGFuZCBhdmFoaSAoYXQpIGxpc3RzCiskMDogKGRvdCkgZnJlZWRlc2t0b3AgKGRvdCkgb3JnIGFib3V0IHlvdXIgc3lzdGVtLAorJDA6IGluY2x1ZGluZyBhbnkgZXJyb3IgcG9zc2libHkgb3V0cHV0IGJlZm9yZSB0aGlzCiskMDogbWVzc2FnZS4gVGhlbiBpbnN0YWxsIGEgbW9kZXJuIHNoZWxsLCBvciBtYW51YWxseSBydW4KKyQwOiB0aGUgc2NyaXB0IHVuZGVyIHN1Y2ggYSBzaGVsbCBpZiB5b3UgZG8gaGF2ZSBvbmUuIgorICBmaQorICBleGl0IDEKK2ZpCitmaQorZmkKK1NIRUxMPSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9CitleHBvcnQgU0hFTEwKKyMgVW5zZXQgbW9yZSB2YXJpYWJsZXMga25vd24gdG8gaW50ZXJmZXJlIHdpdGggYmVoYXZpb3Igb2YgY29tbW9uIHRvb2xzLgorQ0xJQ09MT1JfRk9SQ0U9IEdSRVBfT1BUSU9OUz0KK3Vuc2V0IENMSUNPTE9SX0ZPUkNFIEdSRVBfT1BUSU9OUworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE00c2ggU2hlbGwgRnVuY3Rpb25zLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIGFzX2ZuX3Vuc2V0IFZBUgorIyAtLS0tLS0tLS0tLS0tLS0KKyMgUG9ydGFibHkgdW5zZXQgVkFSLgorYXNfZm5fdW5zZXQgKCkKK3sKKyAgeyBldmFsICQxPTsgdW5zZXQgJDE7fQorfQorYXNfdW5zZXQ9YXNfZm5fdW5zZXQKKworIyBhc19mbl9zZXRfc3RhdHVzIFNUQVRVUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZXQgJD8gdG8gU1RBVFVTLCB3aXRob3V0IGZvcmtpbmcuCithc19mbl9zZXRfc3RhdHVzICgpCit7CisgIHJldHVybiAkMQorfSAjIGFzX2ZuX3NldF9zdGF0dXMKKworIyBhc19mbl9leGl0IFNUQVRVUworIyAtLS0tLS0tLS0tLS0tLS0tLQorIyBFeGl0IHRoZSBzaGVsbCB3aXRoIFNUQVRVUywgZXZlbiBpbiBhICJ0cmFwIDAiIG9yICJzZXQgLWUiIGNvbnRleHQuCithc19mbl9leGl0ICgpCit7CisgIHNldCArZQorICBhc19mbl9zZXRfc3RhdHVzICQxCisgIGV4aXQgJDEKK30gIyBhc19mbl9leGl0CisKKyMgYXNfZm5fbWtkaXJfcAorIyAtLS0tLS0tLS0tLS0tCisjIENyZWF0ZSAiJGFzX2RpciIgYXMgYSBkaXJlY3RvcnksIGluY2x1ZGluZyBwYXJlbnRzIGlmIG5lY2Vzc2FyeS4KK2FzX2ZuX21rZGlyX3AgKCkKK3sKKworICBjYXNlICRhc19kaXIgaW4gIygKKyAgLSopIGFzX2Rpcj0uLyRhc19kaXI7OworICBlc2FjCisgIHRlc3QgLWQgIiRhc19kaXIiIHx8IGV2YWwgJGFzX21rZGlyX3AgfHwgeworICAgIGFzX2RpcnM9CisgICAgd2hpbGUgOjsgZG8KKyAgICAgIGNhc2UgJGFzX2RpciBpbiAjKAorICAgICAgKlwnKikgYXNfcWRpcj1gJGFzX2VjaG8gIiRhc19kaXIiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsgIycoCisgICAgICAqKSBhc19xZGlyPSRhc19kaXI7OworICAgICAgZXNhYworICAgICAgYXNfZGlycz0iJyRhc19xZGlyJyAkYXNfZGlycyIKKyAgICAgIGFzX2Rpcj1gJGFzX2Rpcm5hbWUgLS0gIiRhc19kaXIiIHx8CiskYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWCIkYXNfZGlyIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2AKKyAgICAgIHRlc3QgLWQgIiRhc19kaXIiICYmIGJyZWFrCisgICAgZG9uZQorICAgIHRlc3QgLXogIiRhc19kaXJzIiB8fCBldmFsICJta2RpciAkYXNfZGlycyIKKyAgfSB8fCB0ZXN0IC1kICIkYXNfZGlyIiB8fCBhc19mbl9lcnJvciAkPyAiY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJGFzX2RpciIKKworCit9ICMgYXNfZm5fbWtkaXJfcAorIyBhc19mbl9hcHBlbmQgVkFSIFZBTFVFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQXBwZW5kIHRoZSB0ZXh0IGluIFZBTFVFIHRvIHRoZSBlbmQgb2YgdGhlIGRlZmluaXRpb24gY29udGFpbmVkIGluIFZBUi4gVGFrZQorIyBhZHZhbnRhZ2Ugb2YgYW55IHNoZWxsIG9wdGltaXphdGlvbnMgdGhhdCBhbGxvdyBhbW9ydGl6ZWQgbGluZWFyIGdyb3d0aCBvdmVyCisjIHJlcGVhdGVkIGFwcGVuZHMsIGluc3RlYWQgb2YgdGhlIHR5cGljYWwgcXVhZHJhdGljIGdyb3d0aCBwcmVzZW50IGluIG5haXZlCisjIGltcGxlbWVudGF0aW9ucy4KK2lmIChldmFsICJhc192YXI9MTsgYXNfdmFyKz0yOyB0ZXN0IHhcJGFzX3ZhciA9IHgxMiIpIDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgZXZhbCAnYXNfZm5fYXBwZW5kICgpCisgIHsKKyAgICBldmFsICQxKz1cJDIKKyAgfScKK2Vsc2UKKyAgYXNfZm5fYXBwZW5kICgpCisgIHsKKyAgICBldmFsICQxPVwkJDFcJDIKKyAgfQorZmkgIyBhc19mbl9hcHBlbmQKKworIyBhc19mbl9hcml0aCBBUkcuLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tCisjIFBlcmZvcm0gYXJpdGhtZXRpYyBldmFsdWF0aW9uIG9uIHRoZSBBUkdzLCBhbmQgc3RvcmUgdGhlIHJlc3VsdCBpbiB0aGUKKyMgZ2xvYmFsICRhc192YWwuIFRha2UgYWR2YW50YWdlIG9mIHNoZWxscyB0aGF0IGNhbiBhdm9pZCBmb3Jrcy4gVGhlIGFyZ3VtZW50cworIyBtdXN0IGJlIHBvcnRhYmxlIGFjcm9zcyAkKCgpKSBhbmQgZXhwci4KK2lmIChldmFsICJ0ZXN0IFwkKCggMSArIDEgKSkgPSAyIikgMj4vZGV2L251bGw7IHRoZW4gOgorICBldmFsICdhc19mbl9hcml0aCAoKQorICB7CisgICAgYXNfdmFsPSQoKCAkKiApKQorICB9JworZWxzZQorICBhc19mbl9hcml0aCAoKQorICB7CisgICAgYXNfdmFsPWBleHByICIkQCIgfHwgdGVzdCAkPyAtZXEgMWAKKyAgfQorZmkgIyBhc19mbl9hcml0aAorCisKKyMgYXNfZm5fZXJyb3IgU1RBVFVTIEVSUk9SIFtMSU5FTk8gTE9HX0ZEXQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE91dHB1dCAiYGJhc2VuYW1lICQwYDogZXJyb3I6IEVSUk9SIiB0byBzdGRlcnIuIElmIExJTkVOTyBhbmQgTE9HX0ZEIGFyZQorIyBwcm92aWRlZCwgYWxzbyBvdXRwdXQgdGhlIGVycm9yIHRvIExPR19GRCwgcmVmZXJlbmNpbmcgTElORU5PLiBUaGVuIGV4aXQgdGhlCisjIHNjcmlwdCB3aXRoIFNUQVRVUywgdXNpbmcgMSBpZiB0aGF0IHdhcyAwLgorYXNfZm5fZXJyb3IgKCkKK3sKKyAgYXNfc3RhdHVzPSQxOyB0ZXN0ICRhc19zdGF0dXMgLWVxIDAgJiYgYXNfc3RhdHVzPTEKKyAgaWYgdGVzdCAiJDQiOyB0aGVuCisgICAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMyJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiAkMiIgPiYkNAorICBmaQorICAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogJDIiID4mMgorICBhc19mbl9leGl0ICRhc19zdGF0dXMKK30gIyBhc19mbl9lcnJvcgorCitpZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMSAmJgorICAgdGVzdCAiWGBleHByIDAwMDAxIDogJy4qXCguLi5cKSdgIiA9IFgwMDE7IHRoZW4KKyAgYXNfZXhwcj1leHByCitlbHNlCisgIGFzX2V4cHI9ZmFsc2UKK2ZpCisKK2lmIChiYXNlbmFtZSAtLSAvKSA+L2Rldi9udWxsIDI+JjEgJiYgdGVzdCAiWGBiYXNlbmFtZSAtLSAvIDI+JjFgIiA9ICJYLyI7IHRoZW4KKyAgYXNfYmFzZW5hbWU9YmFzZW5hbWUKK2Vsc2UKKyAgYXNfYmFzZW5hbWU9ZmFsc2UKK2ZpCisKK2lmIChhc19kaXI9YGRpcm5hbWUgLS0gL2AgJiYgdGVzdCAiWCRhc19kaXIiID0gWC8pID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhc19kaXJuYW1lPWRpcm5hbWUKK2Vsc2UKKyAgYXNfZGlybmFtZT1mYWxzZQorZmkKKworYXNfbWU9YCRhc19iYXNlbmFtZSAtLSAiJDAiIHx8CiskYXNfZXhwciBYLyIkMCIgOiAnLiovXChbXi9dW14vXSpcKS8qJCcgXHwgXAorCSBYIiQwIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiQwIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKyRhc19lY2hvIFgvIiQwIiB8CisgICAgc2VkICcvXi4qXC9cKFteL11bXi9dKlwpXC8qJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcL1woXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcL1woXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYAorCisjIEF2b2lkIGRlcGVuZGluZyB1cG9uIENoYXJhY3RlciBSYW5nZXMuCithc19jcl9sZXR0ZXJzPSdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicKK2FzX2NyX0xFVFRFUlM9J0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJworYXNfY3JfTGV0dGVycz0kYXNfY3JfbGV0dGVycyRhc19jcl9MRVRURVJTCithc19jcl9kaWdpdHM9JzAxMjM0NTY3ODknCithc19jcl9hbG51bT0kYXNfY3JfTGV0dGVycyRhc19jcl9kaWdpdHMKKworCisgIGFzX2xpbmVub18xPSRMSU5FTk8gYXNfbGluZW5vXzFhPSRMSU5FTk8KKyAgYXNfbGluZW5vXzI9JExJTkVOTyBhc19saW5lbm9fMmE9JExJTkVOTworICBldmFsICd0ZXN0ICJ4JGFzX2xpbmVub18xJyRhc19ydW4nIiAhPSAieCRhc19saW5lbm9fMickYXNfcnVuJyIgJiYKKyAgdGVzdCAieGBleHByICRhc19saW5lbm9fMSckYXNfcnVuJyArIDFgIiA9ICJ4JGFzX2xpbmVub18yJyRhc19ydW4nIicgfHwgeworICAjIEJsYW1lIExlZSBFLiBNY01haG9uICgxOTMxLTE5ODkpIGZvciBzZWQncyBzeW50YXguICA6LSkKKyAgc2VkIC1uICcKKyAgICBwCisgICAgL1skXUxJTkVOTy89CisgICcgPCRhc19teXNlbGYgfAorICAgIHNlZCAnCisgICAgICBzL1skXUxJTkVOTy4qLyYtLworICAgICAgdCBsaW5lbm8KKyAgICAgIGIKKyAgICAgIDpsaW5lbm8KKyAgICAgIE4KKyAgICAgIDpsb29wCisgICAgICBzL1skXUxJTkVOT1woW14nJGFzX2NyX2FsbnVtJ19dLipcblwpXCguKlwpL1wyXDFcMi8KKyAgICAgIHQgbG9vcAorICAgICAgcy8tXG4uKi8vCisgICAgJyA+JGFzX21lLmxpbmVubyAmJgorICBjaG1vZCAreCAiJGFzX21lLmxpbmVubyIgfHwKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlICRhc19tZS5saW5lbm87IHJlcnVuIHdpdGggYSBQT1NJWCBzaGVsbCIgPiYyOyBhc19mbl9leGl0IDE7IH0KKworICAjIERvbid0IHRyeSB0byBleGVjIGFzIGl0IGNoYW5nZXMgJFswXSwgY2F1c2luZyBhbGwgc29ydCBvZiBwcm9ibGVtcworICAjICh0aGUgZGlybmFtZSBvZiAkWzBdIGlzIG5vdCB0aGUgcGxhY2Ugd2hlcmUgd2UgbWlnaHQgZmluZCB0aGUKKyAgIyBvcmlnaW5hbCBhbmQgc28gb24uICBBdXRvY29uZiBpcyBlc3BlY2lhbGx5IHNlbnNpdGl2ZSB0byB0aGlzKS4KKyAgLiAiLi8kYXNfbWUubGluZW5vIgorICAjIEV4aXQgc3RhdHVzIGlzIHRoYXQgb2YgdGhlIGxhc3QgY29tbWFuZC4KKyAgZXhpdAorfQorCitFQ0hPX0M9IEVDSE9fTj0gRUNIT19UPQorY2FzZSBgZWNobyAtbiB4YCBpbiAjKCgoKCgKKy1uKikKKyAgY2FzZSBgZWNobyAneHlcYydgIGluCisgICpjKikgRUNIT19UPScJJzs7CSMgRUNIT19UIGlzIHNpbmdsZSB0YWIgY2hhcmFjdGVyLgorICB4eSkgIEVDSE9fQz0nXGMnOzsKKyAgKikgICBlY2hvIGBlY2hvIGtzaDg4IGJ1ZyBvbiBBSVggNi4xYCA+IC9kZXYvbnVsbAorICAgICAgIEVDSE9fVD0nCSc7OworICBlc2FjOzsKKyopCisgIEVDSE9fTj0nLW4nOzsKK2VzYWMKKworcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmZpbGUKK2lmIHRlc3QgLWQgY29uZiQkLmRpcjsgdGhlbgorICBybSAtZiBjb25mJCQuZGlyL2NvbmYkJC5maWxlCitlbHNlCisgIHJtIC1mIGNvbmYkJC5kaXIKKyAgbWtkaXIgY29uZiQkLmRpciAyPi9kZXYvbnVsbAorZmkKK2lmIChlY2hvID5jb25mJCQuZmlsZSkgMj4vZGV2L251bGw7IHRoZW4KKyAgaWYgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCisgICAgYXNfbG5fcz0nbG4gLXMnCisgICAgIyAuLi4gYnV0IHRoZXJlIGFyZSB0d28gZ290Y2hhczoKKyAgICAjIDEpIE9uIE1TWVMsIGJvdGggYGxuIC1zIGZpbGUgZGlyJyBhbmQgYGxuIGZpbGUgZGlyJyBmYWlsLgorICAgICMgMikgREpHUFAgPCAyLjA0IGhhcyBubyBzeW1saW5rczsgYGxuIC1zJyBjcmVhdGVzIGEgd3JhcHBlciBleGVjdXRhYmxlLgorICAgICMgSW4gYm90aCBjYXNlcywgd2UgaGF2ZSB0byBkZWZhdWx0IHRvIGBjcCAtcCcuCisgICAgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkLmRpciAyPi9kZXYvbnVsbCAmJiB0ZXN0ICEgLWYgY29uZiQkLmV4ZSB8fAorICAgICAgYXNfbG5fcz0nY3AgLXAnCisgIGVsaWYgbG4gY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCisgICAgYXNfbG5fcz1sbgorICBlbHNlCisgICAgYXNfbG5fcz0nY3AgLXAnCisgIGZpCitlbHNlCisgIGFzX2xuX3M9J2NwIC1wJworZmkKK3JtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUgY29uZiQkLmZpbGUKK3JtZGlyIGNvbmYkJC5kaXIgMj4vZGV2L251bGwKKworaWYgbWtkaXIgLXAgLiAyPi9kZXYvbnVsbDsgdGhlbgorICBhc19ta2Rpcl9wPSdta2RpciAtcCAiJGFzX2RpciInCitlbHNlCisgIHRlc3QgLWQgLi8tcCAmJiBybWRpciAuLy1wCisgIGFzX21rZGlyX3A9ZmFsc2UKK2ZpCisKK2lmIHRlc3QgLXggLyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYXNfdGVzdF94PSd0ZXN0IC14JworZWxzZQorICBpZiBscyAtZEwgLyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICBhc19sc19MX29wdGlvbj1MCisgIGVsc2UKKyAgICBhc19sc19MX29wdGlvbj0KKyAgZmkKKyAgYXNfdGVzdF94PScKKyAgICBldmFsIHNoIC1jICdcJycKKyAgICAgIGlmIHRlc3QgLWQgIiQxIjsgdGhlbgorCXRlc3QgLWQgIiQxLy4iOworICAgICAgZWxzZQorCWNhc2UgJDEgaW4gIygKKwktKilzZXQgIi4vJDEiOzsKKwllc2FjOworCWNhc2UgYGxzIC1sZCckYXNfbHNfTF9vcHRpb24nICIkMSIgMj4vZGV2L251bGxgIGluICMoKAorCT8/P1tzeF0qKTo7OyopZmFsc2U7O2VzYWM7ZmkKKyAgICAnXCcnIHNoCisgICcKK2ZpCithc19leGVjdXRhYmxlX3A9JGFzX3Rlc3RfeAorCisjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgQ1BQIG5hbWUuCithc190cl9jcHA9ImV2YWwgc2VkICd5JSokYXNfY3JfbGV0dGVycyVQJGFzX2NyX0xFVFRFUlMlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgorCisjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgdmFyaWFibGUgbmFtZS4KK2FzX3RyX3NoPSJldmFsIHNlZCAneSUqKyVwcCU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCisKK1NIRUxMPSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9CisKKwordGVzdCAtbiAiJERKRElSIiB8fCBleGVjIDc8JjAgPC9kZXYvbnVsbAorZXhlYyA2PiYxCisKKyMgTmFtZSBvZiB0aGUgaG9zdC4KKyMgaG9zdG5hbWUgb24gc29tZSBzeXN0ZW1zIChTVlIzLjIsIG9sZCBHTlUvTGludXgpIHJldHVybnMgYSBib2d1cyBleGl0IHN0YXR1cywKKyMgc28gdW5hbWUgZ2V0cyBydW4gdG9vLgorYWNfaG9zdG5hbWU9YChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgCisKKyMKKyMgSW5pdGlhbGl6YXRpb25zLgorIworYWNfZGVmYXVsdF9wcmVmaXg9L3Vzci9sb2NhbAorYWNfY2xlYW5fZmlsZXM9CithY19jb25maWdfbGlib2JqX2Rpcj0uCitMSUJPQkpTPQorY3Jvc3NfY29tcGlsaW5nPW5vCitzdWJkaXJzPQorTUZMQUdTPQorTUFLRUZMQUdTPQorCisjIElkZW50aXR5IG9mIHRoaXMgcGFja2FnZS4KK1BBQ0tBR0VfTkFNRT0nYXZhaGknCitQQUNLQUdFX1RBUk5BTUU9J2F2YWhpJworUEFDS0FHRV9WRVJTSU9OPScwLjYuMzEnCitQQUNLQUdFX1NUUklORz0nYXZhaGkgMC42LjMxJworUEFDS0FHRV9CVUdSRVBPUlQ9J2F2YWhpIChhdCkgbGlzdHMgKGRvdCkgZnJlZWRlc2t0b3AgKGRvdCkgb3JnJworUEFDS0FHRV9VUkw9JycKKworYWNfdW5pcXVlX2ZpbGU9ImF2YWhpLWNvcmUvc2VydmVyLmMiCisjIEZhY3RvcmluZyBkZWZhdWx0IGhlYWRlcnMgZm9yIG1vc3QgdGVzdHMuCithY19pbmNsdWRlc19kZWZhdWx0PSJcCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjIGluY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU1RBVF9ICisjIGluY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYKKyNpZmRlZiBTVERDX0hFQURFUlMKKyMgaW5jbHVkZSA8c3RkbGliLmg+CisjIGluY2x1ZGUgPHN0ZGRlZi5oPgorI2Vsc2UKKyMgaWZkZWYgSEFWRV9TVERMSUJfSAorIyAgaW5jbHVkZSA8c3RkbGliLmg+CisjIGVuZGlmCisjZW5kaWYKKyNpZmRlZiBIQVZFX1NUUklOR19ICisjIGlmICFkZWZpbmVkIFNURENfSEVBREVSUyAmJiBkZWZpbmVkIEhBVkVfTUVNT1JZX0gKKyMgIGluY2x1ZGUgPG1lbW9yeS5oPgorIyBlbmRpZgorIyBpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1RSSU5HU19ICisjIGluY2x1ZGUgPHN0cmluZ3MuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfSU5UVFlQRVNfSAorIyBpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TVERJTlRfSAorIyBpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfVU5JU1REX0gKKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYiCisKK2FjX3N1YnN0X3ZhcnM9J2FtX19FWEVFWFRfRkFMU0UKK2FtX19FWEVFWFRfVFJVRQorTFRMSUJPQkpTCitIQVZFX1NZU1RFTURfRkFMU0UKK0hBVkVfU1lTVEVNRF9UUlVFCitzeXN0ZW1kc3lzdGVtdW5pdGRpcgorRU5BQkxFX0NPTVBBVF9IT1dMX0ZBTFNFCitFTkFCTEVfQ09NUEFUX0hPV0xfVFJVRQorRU5BQkxFX0NPTVBBVF9MSUJETlNfU0RfRkFMU0UKK0VOQUJMRV9DT01QQVRfTElCRE5TX1NEX1RSVUUKK0VOQUJMRV9URVNUU19GQUxTRQorRU5BQkxFX1RFU1RTX1RSVUUKK0JVSUxEX01BTlBBR0VTX0ZBTFNFCitCVUlMRF9NQU5QQUdFU19UUlVFCitVU0VfWE1MVE9NQU5fRkFMU0UKK1VTRV9YTUxUT01BTl9UUlVFCitoYXZlX3htbHRvbWFuCitFTkFCTEVfQ09SRV9ET0NTX0ZBTFNFCitFTkFCTEVfQ09SRV9ET0NTX1RSVUUKK0RPWFlHRU5fUEFQRVJfU0laRQorRFhfQ09ORF9sYXRleF9GQUxTRQorRFhfQ09ORF9sYXRleF9UUlVFCitEWF9DT05EX3BkZl9GQUxTRQorRFhfQ09ORF9wZGZfVFJVRQorRFhfUERGTEFURVgKK0RYX0ZMQUdfcGRmCitEWF9DT05EX3BzX0ZBTFNFCitEWF9DT05EX3BzX1RSVUUKK0RYX0VHUkVQCitEWF9EVklQUworRFhfTUFLRUlOREVYCitEWF9MQVRFWAorRFhfRkxBR19wcworRFhfQ09ORF9odG1sX0ZBTFNFCitEWF9DT05EX2h0bWxfVFJVRQorRFhfRkxBR19odG1sCitEWF9DT05EX2NoaV9GQUxTRQorRFhfQ09ORF9jaGlfVFJVRQorRFhfRkxBR19jaGkKK0RYX0NPTkRfY2htX0ZBTFNFCitEWF9DT05EX2NobV9UUlVFCitEWF9ISEMKK0RYX0ZMQUdfY2htCitEWF9DT05EX3htbF9GQUxTRQorRFhfQ09ORF94bWxfVFJVRQorRFhfRkxBR194bWwKK0RYX0NPTkRfcnRmX0ZBTFNFCitEWF9DT05EX3J0Zl9UUlVFCitEWF9GTEFHX3J0ZgorRFhfQ09ORF9tYW5fRkFMU0UKK0RYX0NPTkRfbWFuX1RSVUUKK0RYX0ZMQUdfbWFuCitEWF9DT05EX2RvdF9GQUxTRQorRFhfQ09ORF9kb3RfVFJVRQorRFhfRE9UCitEWF9GTEFHX2RvdAorRFhfQ09ORF9kb2NfRkFMU0UKK0RYX0NPTkRfZG9jX1RSVUUKK0RYX1BFUkwKK0RYX0RPWFlHRU4KK0RYX0ZMQUdfZG9jCitEWF9FTlYKK0RYX0RPQ0RJUgorRFhfQ09ORklHCitEWF9QUk9KRUNUCitpbnRlcmZhY2VzZGlyCithdmFoaV9zb2NrZXQKK2F2YWhpX3J1bnRpbWVfZGlyCitBVkFISV9BVVRPSVBEX0dST1VQCitBVkFISV9BVVRPSVBEX1VTRVIKK0FWQUhJX1BSSVZfQUNDRVNTX0dST1VQCitBVkFISV9HUk9VUAorQVZBSElfVVNFUgorRU5BQkxFX0FVVE9JUERfRkFMU0UKK0VOQUJMRV9BVVRPSVBEX1RSVUUKK0hBVkVfTU9OT0RPQ19GQUxTRQorSEFWRV9NT05PRE9DX1RSVUUKK01PTk9ET0NfRElSCitNREFTU0VNQkxFUgorTU9OT0RPQ0VSCitNT05PRE9DX0xJQlMKK01PTk9ET0NfQ0ZMQUdTCitIQVZFX01PTk9fRkFMU0UKK0hBVkVfTU9OT19UUlVFCitHQUNVVElMCitNQ1MKK0hBVkVfUFlUSE9OX0RCVVNfRkFMU0UKK0hBVkVfUFlUSE9OX0RCVVNfVFJVRQorSEFWRV9QWUdUS19GQUxTRQorSEFWRV9QWUdUS19UUlVFCitIQVZFX1BZVEhPTl9GQUxTRQorSEFWRV9QWVRIT05fVFJVRQorcGtncHlleGVjZGlyCitweWV4ZWNkaXIKK3BrZ3B5dGhvbmRpcgorcHl0aG9uZGlyCitQWVRIT05fUExBVEZPUk0KK1BZVEhPTl9FWEVDX1BSRUZJWAorUFlUSE9OX1BSRUZJWAorUFlUSE9OX1ZFUlNJT04KK1BZVEhPTgorSEFWRV9MSUJEQUVNT05fRkFMU0UKK0hBVkVfTElCREFFTU9OX1RSVUUKK0xJQkRBRU1PTl9MSUJTCitMSUJEQUVNT05fQ0ZMQUdTCitIQVZFX0RCTV9GQUxTRQorSEFWRV9EQk1fVFJVRQorSEFWRV9HREJNX0ZBTFNFCitIQVZFX0dEQk1fVFJVRQorSEFWRV9YTUxfRkFMU0UKK0hBVkVfWE1MX1RSVUUKK1hNTF9DRkxBR1MKK1hNTF9MSUJTCitIQVZFX0RCVVNfRkFMU0UKK0hBVkVfREJVU19UUlVFCitEQlVTX1NZU1RFTV9CVVNfREVGQVVMVF9BRERSRVNTCitEQlVTX1NZU19ESVIKK0RCVVNfTElCUworREJVU19DRkxBR1MKK0hBVkVfR1RLMk9SM19GQUxTRQorSEFWRV9HVEsyT1IzX1RSVUUKK0hBVkVfR1RLM19GQUxTRQorSEFWRV9HVEszX1RSVUUKK0dUSzMwX0xJQlMKK0dUSzMwX0NGTEFHUworSEFWRV9HVEtfRkFMU0UKK0hBVkVfR1RLX1RSVUUKK0dUSzIwX0xJQlMKK0dUSzIwX0NGTEFHUworSEFWRV9RVDRfRkFMU0UKK0hBVkVfUVQ0X1RSVUUKK01PQ19RVDQKK1FUNF9MSUJTCitRVDRfQ0ZMQUdTCitIQVZFX1FUM19GQUxTRQorSEFWRV9RVDNfVFJVRQorTU9DX1FUMworUVQzX0xJQlMKK1FUM19DRkxBR1MKK0hBVkVfSU5UUk9TUEVDVElPTl9GQUxTRQorSEFWRV9JTlRST1NQRUNUSU9OX1RSVUUKK0lOVFJPU1BFQ1RJT05fTUFLRUZJTEUKK0lOVFJPU1BFQ1RJT05fTElCUworSU5UUk9TUEVDVElPTl9DRkxBR1MKK0lOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUgorSU5UUk9TUEVDVElPTl9HSVJESVIKK0lOVFJPU1BFQ1RJT05fR0VORVJBVEUKK0lOVFJPU1BFQ1RJT05fQ09NUElMRVIKK0lOVFJPU1BFQ1RJT05fU0NBTk5FUgorSEFWRV9HT0JKRUNUX0ZBTFNFCitIQVZFX0dPQkpFQ1RfVFJVRQorR09CSkVDVF9MSUJTCitHT0JKRUNUX0NGTEFHUworSEFWRV9HTElCX0ZBTFNFCitIQVZFX0dMSUJfVFJVRQorR0xJQjIwX0xJQlMKK0dMSUIyMF9DRkxBR1MKK1BLR19DT05GSUdfTElCRElSCitQS0dfQ09ORklHX1BBVEgKK1BLR19DT05GSUcKK2hhdmVfcGtnX2NvbmZpZworYXZhaGlsb2NhbGVkaXIKK01LSU5TVEFMTERJUlMKK1BPU1VCCitQT0ZJTEVTCitQT19JTl9EQVRBRElSX0ZBTFNFCitQT19JTl9EQVRBRElSX1RSVUUKK0lOVExMSUJTCitJTlNUT0JKRVhUCitHTU9GSUxFUworQ0FUT0JKRVhUCitDQVRBTE9HUworTVNHRk1UX09QVFMKK0dFVFRFWFRfUEFDS0FHRQorREFUQURJUk5BTUUKK0FMTF9MSU5HVUFTCitJTlRMVE9PTF9QRVJMCitHTVNHRk1UCitNU0dGTVQKK01TR01FUkdFCitYR0VUVEVYVAorSU5UTFRPT0xfUE9MSUNZX1JVTEUKK0lOVExUT09MX1NFUlZJQ0VfUlVMRQorSU5UTFRPT0xfVEhFTUVfUlVMRQorSU5UTFRPT0xfU0NIRU1BU19SVUxFCitJTlRMVE9PTF9DQVZFU19SVUxFCitJTlRMVE9PTF9YTUxfTk9NRVJHRV9SVUxFCitJTlRMVE9PTF9YTUxfUlVMRQorSU5UTFRPT0xfS0JEX1JVTEUKK0lOVExUT09MX1hBTV9SVUxFCitJTlRMVE9PTF9VSV9SVUxFCitJTlRMVE9PTF9TT1VORExJU1RfUlVMRQorSU5UTFRPT0xfU0hFRVRfUlVMRQorSU5UTFRPT0xfU0VSVkVSX1JVTEUKK0lOVExUT09MX1BPTkdfUlVMRQorSU5UTFRPT0xfT0FGX1JVTEUKK0lOVExUT09MX1BST1BfUlVMRQorSU5UTFRPT0xfS0VZU19SVUxFCitJTlRMVE9PTF9ESVJFQ1RPUllfUlVMRQorSU5UTFRPT0xfREVTS1RPUF9SVUxFCitJTlRMVE9PTF9FWFRSQUNUCitJTlRMVE9PTF9NRVJHRQorSU5UTFRPT0xfVVBEQVRFCitVU0VfTkxTCitIQVZFX0tRVUVVRV9GQUxTRQorSEFWRV9LUVVFVUVfVFJVRQorSEFWRV9JTk9USUZZX0ZBTFNFCitIQVZFX0lOT1RJRllfVFJVRQorSEFWRV9ETE9QRU5fRkFMU0UKK0hBVkVfRExPUEVOX1RSVUUKK0VOQUJMRV9DSFJPT1RfRkFMU0UKK0VOQUJMRV9DSFJPT1RfVFJVRQorVklTSUJJTElUWV9ISURERU5fQ0ZMQUdTCitMSUJPQkpTCitUQVJHRVRfU0xBQ0tXQVJFX0ZBTFNFCitUQVJHRVRfU0xBQ0tXQVJFX1RSVUUKK1RBUkdFVF9GUkVFQlNEX0ZBTFNFCitUQVJHRVRfRlJFRUJTRF9UUlVFCitUQVJHRVRfTkVUQlNEX0ZBTFNFCitUQVJHRVRfTkVUQlNEX1RSVUUKK1RBUkdFVF9EQVJXSU5fRkFMU0UKK1RBUkdFVF9EQVJXSU5fVFJVRQorVEFSR0VUX01BTkRSSVZBX0ZBTFNFCitUQVJHRVRfTUFORFJJVkFfVFJVRQorVEFSR0VUX0ZFRE9SQV9GQUxTRQorVEFSR0VUX0ZFRE9SQV9UUlVFCitUQVJHRVRfQVJDSExJTlVYX0ZBTFNFCitUQVJHRVRfQVJDSExJTlVYX1RSVUUKK1RBUkdFVF9ERUJJQU5fRkFMU0UKK1RBUkdFVF9ERUJJQU5fVFJVRQorVEFSR0VUX0dFTlRPT19GQUxTRQorVEFSR0VUX0dFTlRPT19UUlVFCitUQVJHRVRfU1VTRV9GQUxTRQorVEFSR0VUX1NVU0VfVFJVRQorVEFSR0VUX0xGU19GQUxTRQorVEFSR0VUX0xGU19UUlVFCitIQVZFX1NZU19TWVNDVExfSF9GQUxTRQorSEFWRV9TWVNfU1lTQ1RMX0hfVFJVRQorSEFWRV9TWVNfRklMSU9fSF9GQUxTRQorSEFWRV9TWVNfRklMSU9fSF9UUlVFCitIQVZFX1BGX1JPVVRFX0ZBTFNFCitIQVZFX1BGX1JPVVRFX1RSVUUKK0hBVkVfTkVUTElOS19GQUxTRQorSEFWRV9ORVRMSU5LX1RSVUUKK1BUSFJFQURfQ0ZMQUdTCitQVEhSRUFEX0xJQlMKK1BUSFJFQURfQ0MKK2FjeF9wdGhyZWFkX2NvbmZpZworQ1hYQ1BQCitPVE9PTDY0CitPVE9PTAorTElQTworTk1FRElUCitEU1lNVVRJTAorTUFOSUZFU1RfVE9PTAorUkFOTElCCithY19jdF9BUgorQVIKK0RMTFRPT0wKK09CSkRVTVAKK05NCithY19jdF9EVU1QQklOCitEVU1QQklOCitMRAorRkdSRVAKK1NFRAorTElCVE9PTAorTE5fUworRUdSRVAKK0dSRVAKK0NQUAorYW1fX2Zhc3RkZXBDWFhfRkFMU0UKK2FtX19mYXN0ZGVwQ1hYX1RSVUUKK0NYWERFUE1PREUKK2FjX2N0X0NYWAorQ1hYRkxBR1MKK0NYWAorYW1fX2Zhc3RkZXBDQ19GQUxTRQorYW1fX2Zhc3RkZXBDQ19UUlVFCitDQ0RFUE1PREUKK2FtX19ub2RlcAorQU1ERVBCQUNLU0xBU0gKK0FNREVQX0ZBTFNFCitBTURFUF9UUlVFCithbV9fcXVvdGUKK2FtX19pbmNsdWRlCitERVBESVIKK09CSkVYVAorRVhFRVhUCithY19jdF9DQworQ1BQRkxBR1MKK0xERkxBR1MKK0NGTEFHUworQ0MKK1NUT1cKK2hvc3Rfb3MKK2hvc3RfdmVuZG9yCitob3N0X2NwdQoraG9zdAorYnVpbGRfb3MKK2J1aWxkX3ZlbmRvcgorYnVpbGRfY3B1CitidWlsZAorSE9XTF9DT01QQVRfVkVSU0lPTgorTElCQVZBSElfQ09NUEFUX0hPV0xfVkVSU0lPTl9JTkZPCitMSUJBVkFISV9DT01QQVRfTElCRE5TX1NEX1ZFUlNJT05fSU5GTworTElCQVZBSElfVUlfVkVSU0lPTl9JTkZPCitMSUJBVkFISV9RVDRfVkVSU0lPTl9JTkZPCitMSUJBVkFISV9RVDNfVkVSU0lPTl9JTkZPCitMSUJBVkFISV9HT0JKRUNUX1ZFUlNJT05fSU5GTworTElCQVZBSElfR0xJQl9WRVJTSU9OX0lORk8KK0xJQkFWQUhJX0NMSUVOVF9WRVJTSU9OX0lORk8KK0xJQkFWQUhJX0NPUkVfVkVSU0lPTl9JTkZPCitMSUJBVkFISV9DT01NT05fVkVSU0lPTl9JTkZPCitBTV9CQUNLU0xBU0gKK0FNX0RFRkFVTFRfVkVSQk9TSVRZCitBTV9ERUZBVUxUX1YKK0FNX1YKK2FtX191bnRhcgorYW1fX3RhcgorQU1UQVIKK2FtX19sZWFkaW5nX2RvdAorU0VUX01BS0UKK0FXSworbWtkaXJfcAorTUtESVJfUAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNCitTVFJJUAoraW5zdGFsbF9zaAorTUFLRUlORk8KK0FVVE9IRUFERVIKK0FVVE9NQUtFCitBVVRPQ09ORgorQUNMT0NBTAorVkVSU0lPTgorUEFDS0FHRQorQ1lHUEFUSF9XCithbV9faXNyYworSU5TVEFMTF9EQVRBCitJTlNUQUxMX1NDUklQVAorSU5TVEFMTF9QUk9HUkFNCit0YXJnZXRfYWxpYXMKK2hvc3RfYWxpYXMKK2J1aWxkX2FsaWFzCitMSUJTCitFQ0hPX1QKK0VDSE9fTgorRUNIT19DCitERUZTCittYW5kaXIKK2xvY2FsZWRpcgorbGliZGlyCitwc2RpcgorcGRmZGlyCitkdmlkaXIKK2h0bWxkaXIKK2luZm9kaXIKK2RvY2Rpcgorb2xkaW5jbHVkZWRpcgoraW5jbHVkZWRpcgorbG9jYWxzdGF0ZWRpcgorc2hhcmVkc3RhdGVkaXIKK3N5c2NvbmZkaXIKK2RhdGFkaXIKK2RhdGFyb290ZGlyCitsaWJleGVjZGlyCitzYmluZGlyCitiaW5kaXIKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUKK3ByZWZpeAorZXhlY19wcmVmaXgKK1BBQ0tBR0VfVVJMCitQQUNLQUdFX0JVR1JFUE9SVAorUEFDS0FHRV9TVFJJTkcKK1BBQ0tBR0VfVkVSU0lPTgorUEFDS0FHRV9UQVJOQU1FCitQQUNLQUdFX05BTUUKK1BBVEhfU0VQQVJBVE9SCitTSEVMTCcKK2FjX3N1YnN0X2ZpbGVzPScnCithY191c2VyX29wdHM9JworZW5hYmxlX29wdGlvbl9jaGVja2luZworZW5hYmxlX3NpbGVudF9ydWxlcworZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmcKK2VuYWJsZV9zdGFja19wcm90ZWN0b3IKK2VuYWJsZV9zaGFyZWQKK2VuYWJsZV9zdGF0aWMKK3dpdGhfcGljCitlbmFibGVfZmFzdF9pbnN0YWxsCit3aXRoX2dudV9sZAord2l0aF9zeXNyb290CitlbmFibGVfbGlidG9vbF9sb2NrCit3aXRoX2Rpc3RybworZW5hYmxlX25scworZW5hYmxlX2dsaWIKK2VuYWJsZV9nb2JqZWN0CitlbmFibGVfaW50cm9zcGVjdGlvbgorZW5hYmxlX3F0MworZW5hYmxlX3F0NAorZW5hYmxlX2d0aworZW5hYmxlX2d0azMKK2VuYWJsZV9kYnVzCit3aXRoX2RidXNfc3lzCit3aXRoX2RidXNfc3lzdGVtX3NvY2tldAord2l0aF94bWwKK2VuYWJsZV9kYm0KK2VuYWJsZV9nZGJtCitlbmFibGVfbGliZGFlbW9uCitlbmFibGVfcHl0aG9uCitlbmFibGVfcHlndGsKK2VuYWJsZV9weXRob25fZGJ1cworZW5hYmxlX21vbm8KK2VuYWJsZV9tb25vZG9jCitlbmFibGVfYXV0b2lwZAord2l0aF9hdmFoaV91c2VyCit3aXRoX2F2YWhpX2dyb3VwCit3aXRoX2F2YWhpX3ByaXZfYWNjZXNzX2dyb3VwCit3aXRoX2F1dG9pcGRfdXNlcgord2l0aF9hdXRvaXBkX2dyb3VwCitlbmFibGVfZG94eWdlbl9kb2MKK2VuYWJsZV9kb3h5Z2VuX2RvdAorZW5hYmxlX2RveHlnZW5fbWFuCitlbmFibGVfZG94eWdlbl9ydGYKK2VuYWJsZV9kb3h5Z2VuX3htbAorZW5hYmxlX2RveHlnZW5fY2htCitlbmFibGVfZG94eWdlbl9jaGkKK2VuYWJsZV9kb3h5Z2VuX2h0bWwKK2VuYWJsZV9kb3h5Z2VuX3BzCitlbmFibGVfZG94eWdlbl9wZGYKK2VuYWJsZV9jb3JlX2RvY3MKK2VuYWJsZV9tYW5wYWdlcworZW5hYmxlX3htbHRvbWFuCitlbmFibGVfdGVzdHMKK2VuYWJsZV9jb21wYXRfbGliZG5zX3NkCitlbmFibGVfY29tcGF0X2hvd2wKK3dpdGhfc3lzdGVtZHN5c3RlbXVuaXRkaXIKKycKKyAgICAgIGFjX3ByZWNpb3VzX3ZhcnM9J2J1aWxkX2FsaWFzCitob3N0X2FsaWFzCit0YXJnZXRfYWxpYXMKK0NDCitDRkxBR1MKK0xERkxBR1MKK0xJQlMKK0NQUEZMQUdTCitDWFgKK0NYWEZMQUdTCitDQ0MKK0NQUAorQ1hYQ1BQCitQS0dfQ09ORklHCitQS0dfQ09ORklHX1BBVEgKK1BLR19DT05GSUdfTElCRElSCitHTElCMjBfQ0ZMQUdTCitHTElCMjBfTElCUworR09CSkVDVF9DRkxBR1MKK0dPQkpFQ1RfTElCUworUVQzX0NGTEFHUworUVQzX0xJQlMKK1FUNF9DRkxBR1MKK1FUNF9MSUJTCitHVEsyMF9DRkxBR1MKK0dUSzIwX0xJQlMKK0dUSzMwX0NGTEFHUworR1RLMzBfTElCUworREJVU19DRkxBR1MKK0RCVVNfTElCUworTElCREFFTU9OX0NGTEFHUworTElCREFFTU9OX0xJQlMKK1BZVEhPTgorTU9OT0RPQ19DRkxBR1MKK01PTk9ET0NfTElCUworRE9YWUdFTl9QQVBFUl9TSVpFJworCisKKyMgSW5pdGlhbGl6ZSBzb21lIHZhcmlhYmxlcyBzZXQgYnkgb3B0aW9ucy4KK2FjX2luaXRfaGVscD0KK2FjX2luaXRfdmVyc2lvbj1mYWxzZQorYWNfdW5yZWNvZ25pemVkX29wdHM9CithY191bnJlY29nbml6ZWRfc2VwPQorIyBUaGUgdmFyaWFibGVzIGhhdmUgdGhlIHNhbWUgbmFtZXMgYXMgdGhlIG9wdGlvbnMsIHdpdGgKKyMgZGFzaGVzIGNoYW5nZWQgdG8gdW5kZXJsaW5lcy4KK2NhY2hlX2ZpbGU9L2Rldi9udWxsCitleGVjX3ByZWZpeD1OT05FCitub19jcmVhdGU9Citub19yZWN1cnNpb249CitwcmVmaXg9Tk9ORQorcHJvZ3JhbV9wcmVmaXg9Tk9ORQorcHJvZ3JhbV9zdWZmaXg9Tk9ORQorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT1zLHgseCwKK3NpbGVudD0KK3NpdGU9CitzcmNkaXI9Cit2ZXJib3NlPQoreF9pbmNsdWRlcz1OT05FCit4X2xpYnJhcmllcz1OT05FCisKKyMgSW5zdGFsbGF0aW9uIGRpcmVjdG9yeSBvcHRpb25zLgorIyBUaGVzZSBhcmUgbGVmdCB1bmV4cGFuZGVkIHNvIHVzZXJzIGNhbiAibWFrZSBpbnN0YWxsIGV4ZWNfcHJlZml4PS9mb28iCisjIGFuZCBhbGwgdGhlIHZhcmlhYmxlcyB0aGF0IGFyZSBzdXBwb3NlZCB0byBiZSBiYXNlZCBvbiBleGVjX3ByZWZpeAorIyBieSBkZWZhdWx0IHdpbGwgYWN0dWFsbHkgY2hhbmdlLgorIyBVc2UgYnJhY2VzIGluc3RlYWQgb2YgcGFyZW5zIGJlY2F1c2Ugc2gsIHBlcmwsIGV0Yy4gYWxzbyBhY2NlcHQgdGhlbS4KKyMgKFRoZSBsaXN0IGZvbGxvd3MgdGhlIHNhbWUgb3JkZXIgYXMgdGhlIEdOVSBDb2RpbmcgU3RhbmRhcmRzLikKK2JpbmRpcj0nJHtleGVjX3ByZWZpeH0vYmluJworc2JpbmRpcj0nJHtleGVjX3ByZWZpeH0vc2JpbicKK2xpYmV4ZWNkaXI9JyR7ZXhlY19wcmVmaXh9L2xpYmV4ZWMnCitkYXRhcm9vdGRpcj0nJHtwcmVmaXh9L3NoYXJlJworZGF0YWRpcj0nJHtkYXRhcm9vdGRpcn0nCitzeXNjb25mZGlyPScke3ByZWZpeH0vZXRjJworc2hhcmVkc3RhdGVkaXI9JyR7cHJlZml4fS9jb20nCitsb2NhbHN0YXRlZGlyPScke3ByZWZpeH0vdmFyJworaW5jbHVkZWRpcj0nJHtwcmVmaXh9L2luY2x1ZGUnCitvbGRpbmNsdWRlZGlyPScvdXNyL2luY2x1ZGUnCitkb2NkaXI9JyR7ZGF0YXJvb3RkaXJ9L2RvYy8ke1BBQ0tBR0VfVEFSTkFNRX0nCitpbmZvZGlyPScke2RhdGFyb290ZGlyfS9pbmZvJworaHRtbGRpcj0nJHtkb2NkaXJ9JworZHZpZGlyPScke2RvY2Rpcn0nCitwZGZkaXI9JyR7ZG9jZGlyfScKK3BzZGlyPScke2RvY2Rpcn0nCitsaWJkaXI9JyR7ZXhlY19wcmVmaXh9L2xpYicKK2xvY2FsZWRpcj0nJHtkYXRhcm9vdGRpcn0vbG9jYWxlJworbWFuZGlyPScke2RhdGFyb290ZGlyfS9tYW4nCisKK2FjX3ByZXY9CithY19kYXNoZGFzaD0KK2ZvciBhY19vcHRpb24KK2RvCisgICMgSWYgdGhlIHByZXZpb3VzIG9wdGlvbiBuZWVkcyBhbiBhcmd1bWVudCwgYXNzaWduIGl0LgorICBpZiB0ZXN0IC1uICIkYWNfcHJldiI7IHRoZW4KKyAgICBldmFsICRhY19wcmV2PVwkYWNfb3B0aW9uCisgICAgYWNfcHJldj0KKyAgICBjb250aW51ZQorICBmaQorCisgIGNhc2UgJGFjX29wdGlvbiBpbgorICAqPT8qKSBhY19vcHRhcmc9YGV4cHIgIlgkYWNfb3B0aW9uIiA6ICdbXj1dKj1cKC4qXCknYCA7OworICAqPSkgICBhY19vcHRhcmc9IDs7CisgICopICAgIGFjX29wdGFyZz15ZXMgOzsKKyAgZXNhYworCisgICMgQWNjZXB0IHRoZSBpbXBvcnRhbnQgQ3lnbnVzIGNvbmZpZ3VyZSBvcHRpb25zLCBzbyB3ZSBjYW4gZGlhZ25vc2UgdHlwb3MuCisKKyAgY2FzZSAkYWNfZGFzaGRhc2gkYWNfb3B0aW9uIGluCisgIC0tKQorICAgIGFjX2Rhc2hkYXNoPXllcyA7OworCisgIC1iaW5kaXIgfCAtLWJpbmRpciB8IC0tYmluZGkgfCAtLWJpbmQgfCAtLWJpbiB8IC0tYmkpCisgICAgYWNfcHJldj1iaW5kaXIgOzsKKyAgLWJpbmRpcj0qIHwgLS1iaW5kaXI9KiB8IC0tYmluZGk9KiB8IC0tYmluZD0qIHwgLS1iaW49KiB8IC0tYmk9KikKKyAgICBiaW5kaXI9JGFjX29wdGFyZyA7OworCisgIC1idWlsZCB8IC0tYnVpbGQgfCAtLWJ1aWwgfCAtLWJ1aSB8IC0tYnUpCisgICAgYWNfcHJldj1idWlsZF9hbGlhcyA7OworICAtYnVpbGQ9KiB8IC0tYnVpbGQ9KiB8IC0tYnVpbD0qIHwgLS1idWk9KiB8IC0tYnU9KikKKyAgICBidWlsZF9hbGlhcz0kYWNfb3B0YXJnIDs7CisKKyAgLWNhY2hlLWZpbGUgfCAtLWNhY2hlLWZpbGUgfCAtLWNhY2hlLWZpbCB8IC0tY2FjaGUtZmkgXAorICB8IC0tY2FjaGUtZiB8IC0tY2FjaGUtIHwgLS1jYWNoZSB8IC0tY2FjaCB8IC0tY2FjIHwgLS1jYSB8IC0tYykKKyAgICBhY19wcmV2PWNhY2hlX2ZpbGUgOzsKKyAgLWNhY2hlLWZpbGU9KiB8IC0tY2FjaGUtZmlsZT0qIHwgLS1jYWNoZS1maWw9KiB8IC0tY2FjaGUtZmk9KiBcCisgIHwgLS1jYWNoZS1mPSogfCAtLWNhY2hlLT0qIHwgLS1jYWNoZT0qIHwgLS1jYWNoPSogfCAtLWNhYz0qIHwgLS1jYT0qIHwgLS1jPSopCisgICAgY2FjaGVfZmlsZT0kYWNfb3B0YXJnIDs7CisKKyAgLS1jb25maWctY2FjaGUgfCAtQykKKyAgICBjYWNoZV9maWxlPWNvbmZpZy5jYWNoZSA7OworCisgIC1kYXRhZGlyIHwgLS1kYXRhZGlyIHwgLS1kYXRhZGkgfCAtLWRhdGFkKQorICAgIGFjX3ByZXY9ZGF0YWRpciA7OworICAtZGF0YWRpcj0qIHwgLS1kYXRhZGlyPSogfCAtLWRhdGFkaT0qIHwgLS1kYXRhZD0qKQorICAgIGRhdGFkaXI9JGFjX29wdGFyZyA7OworCisgIC1kYXRhcm9vdGRpciB8IC0tZGF0YXJvb3RkaXIgfCAtLWRhdGFyb290ZGkgfCAtLWRhdGFyb290ZCB8IC0tZGF0YXJvb3QgXAorICB8IC0tZGF0YXJvbyB8IC0tZGF0YXJvIHwgLS1kYXRhcikKKyAgICBhY19wcmV2PWRhdGFyb290ZGlyIDs7CisgIC1kYXRhcm9vdGRpcj0qIHwgLS1kYXRhcm9vdGRpcj0qIHwgLS1kYXRhcm9vdGRpPSogfCAtLWRhdGFyb290ZD0qIFwKKyAgfCAtLWRhdGFyb290PSogfCAtLWRhdGFyb289KiB8IC0tZGF0YXJvPSogfCAtLWRhdGFyPSopCisgICAgZGF0YXJvb3RkaXI9JGFjX29wdGFyZyA7OworCisgIC1kaXNhYmxlLSogfCAtLWRpc2FibGUtKikKKyAgICBhY191c2Vyb3B0PWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qZGlzYWJsZS1cKC4qXCknYAorICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KKyAgICBleHByICJ4JGFjX3VzZXJvcHQiIDogIi4qW14tKy5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorICAgICAgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgZmVhdHVyZSBuYW1lOiAkYWNfdXNlcm9wdCIKKyAgICBhY191c2Vyb3B0X29yaWc9JGFjX3VzZXJvcHQKKyAgICBhY191c2Vyb3B0PWAkYXNfZWNobyAiJGFjX3VzZXJvcHQiIHwgc2VkICdzL1stKy5dL18vZydgCisgICAgY2FzZSAkYWNfdXNlcl9vcHRzIGluCisgICAgICAqIgorImVuYWJsZV8kYWNfdXNlcm9wdCIKKyIqKSA7OworICAgICAgKikgYWNfdW5yZWNvZ25pemVkX29wdHM9IiRhY191bnJlY29nbml6ZWRfb3B0cyRhY191bnJlY29nbml6ZWRfc2VwLS1kaXNhYmxlLSRhY191c2Vyb3B0X29yaWciCisJIGFjX3VucmVjb2duaXplZF9zZXA9JywgJzs7CisgICAgZXNhYworICAgIGV2YWwgZW5hYmxlXyRhY191c2Vyb3B0PW5vIDs7CisKKyAgLWRvY2RpciB8IC0tZG9jZGlyIHwgLS1kb2NkaSB8IC0tZG9jIHwgLS1kbykKKyAgICBhY19wcmV2PWRvY2RpciA7OworICAtZG9jZGlyPSogfCAtLWRvY2Rpcj0qIHwgLS1kb2NkaT0qIHwgLS1kb2M9KiB8IC0tZG89KikKKyAgICBkb2NkaXI9JGFjX29wdGFyZyA7OworCisgIC1kdmlkaXIgfCAtLWR2aWRpciB8IC0tZHZpZGkgfCAtLWR2aWQgfCAtLWR2aSB8IC0tZHYpCisgICAgYWNfcHJldj1kdmlkaXIgOzsKKyAgLWR2aWRpcj0qIHwgLS1kdmlkaXI9KiB8IC0tZHZpZGk9KiB8IC0tZHZpZD0qIHwgLS1kdmk9KiB8IC0tZHY9KikKKyAgICBkdmlkaXI9JGFjX29wdGFyZyA7OworCisgIC1lbmFibGUtKiB8IC0tZW5hYmxlLSopCisgICAgYWNfdXNlcm9wdD1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKmVuYWJsZS1cKFtePV0qXCknYAorICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KKyAgICBleHByICJ4JGFjX3VzZXJvcHQiIDogIi4qW14tKy5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorICAgICAgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgZmVhdHVyZSBuYW1lOiAkYWNfdXNlcm9wdCIKKyAgICBhY191c2Vyb3B0X29yaWc9JGFjX3VzZXJvcHQKKyAgICBhY191c2Vyb3B0PWAkYXNfZWNobyAiJGFjX3VzZXJvcHQiIHwgc2VkICdzL1stKy5dL18vZydgCisgICAgY2FzZSAkYWNfdXNlcl9vcHRzIGluCisgICAgICAqIgorImVuYWJsZV8kYWNfdXNlcm9wdCIKKyIqKSA7OworICAgICAgKikgYWNfdW5yZWNvZ25pemVkX29wdHM9IiRhY191bnJlY29nbml6ZWRfb3B0cyRhY191bnJlY29nbml6ZWRfc2VwLS1lbmFibGUtJGFjX3VzZXJvcHRfb3JpZyIKKwkgYWNfdW5yZWNvZ25pemVkX3NlcD0nLCAnOzsKKyAgICBlc2FjCisgICAgZXZhbCBlbmFibGVfJGFjX3VzZXJvcHQ9XCRhY19vcHRhcmcgOzsKKworICAtZXhlYy1wcmVmaXggfCAtLWV4ZWNfcHJlZml4IHwgLS1leGVjLXByZWZpeCB8IC0tZXhlYy1wcmVmaSBcCisgIHwgLS1leGVjLXByZWYgfCAtLWV4ZWMtcHJlIHwgLS1leGVjLXByIHwgLS1leGVjLXAgfCAtLWV4ZWMtIFwKKyAgfCAtLWV4ZWMgfCAtLWV4ZSB8IC0tZXgpCisgICAgYWNfcHJldj1leGVjX3ByZWZpeCA7OworICAtZXhlYy1wcmVmaXg9KiB8IC0tZXhlY19wcmVmaXg9KiB8IC0tZXhlYy1wcmVmaXg9KiB8IC0tZXhlYy1wcmVmaT0qIFwKKyAgfCAtLWV4ZWMtcHJlZj0qIHwgLS1leGVjLXByZT0qIHwgLS1leGVjLXByPSogfCAtLWV4ZWMtcD0qIHwgLS1leGVjLT0qIFwKKyAgfCAtLWV4ZWM9KiB8IC0tZXhlPSogfCAtLWV4PSopCisgICAgZXhlY19wcmVmaXg9JGFjX29wdGFyZyA7OworCisgIC1nYXMgfCAtLWdhcyB8IC0tZ2EgfCAtLWcpCisgICAgIyBPYnNvbGV0ZTsgdXNlIC0td2l0aC1nYXMuCisgICAgd2l0aF9nYXM9eWVzIDs7CisKKyAgLWhlbHAgfCAtLWhlbHAgfCAtLWhlbCB8IC0taGUgfCAtaCkKKyAgICBhY19pbml0X2hlbHA9bG9uZyA7OworICAtaGVscD1yKiB8IC0taGVscD1yKiB8IC0taGVsPXIqIHwgLS1oZT1yKiB8IC1ociopCisgICAgYWNfaW5pdF9oZWxwPXJlY3Vyc2l2ZSA7OworICAtaGVscD1zKiB8IC0taGVscD1zKiB8IC0taGVsPXMqIHwgLS1oZT1zKiB8IC1ocyopCisgICAgYWNfaW5pdF9oZWxwPXNob3J0IDs7CisKKyAgLWhvc3QgfCAtLWhvc3QgfCAtLWhvcyB8IC0taG8pCisgICAgYWNfcHJldj1ob3N0X2FsaWFzIDs7CisgIC1ob3N0PSogfCAtLWhvc3Q9KiB8IC0taG9zPSogfCAtLWhvPSopCisgICAgaG9zdF9hbGlhcz0kYWNfb3B0YXJnIDs7CisKKyAgLWh0bWxkaXIgfCAtLWh0bWxkaXIgfCAtLWh0bWxkaSB8IC0taHRtbGQgfCAtLWh0bWwgfCAtLWh0bSB8IC0taHQpCisgICAgYWNfcHJldj1odG1sZGlyIDs7CisgIC1odG1sZGlyPSogfCAtLWh0bWxkaXI9KiB8IC0taHRtbGRpPSogfCAtLWh0bWxkPSogfCAtLWh0bWw9KiB8IC0taHRtPSogXAorICB8IC0taHQ9KikKKyAgICBodG1sZGlyPSRhY19vcHRhcmcgOzsKKworICAtaW5jbHVkZWRpciB8IC0taW5jbHVkZWRpciB8IC0taW5jbHVkZWRpIHwgLS1pbmNsdWRlZCB8IC0taW5jbHVkZSBcCisgIHwgLS1pbmNsdWQgfCAtLWluY2x1IHwgLS1pbmNsIHwgLS1pbmMpCisgICAgYWNfcHJldj1pbmNsdWRlZGlyIDs7CisgIC1pbmNsdWRlZGlyPSogfCAtLWluY2x1ZGVkaXI9KiB8IC0taW5jbHVkZWRpPSogfCAtLWluY2x1ZGVkPSogfCAtLWluY2x1ZGU9KiBcCisgIHwgLS1pbmNsdWQ9KiB8IC0taW5jbHU9KiB8IC0taW5jbD0qIHwgLS1pbmM9KikKKyAgICBpbmNsdWRlZGlyPSRhY19vcHRhcmcgOzsKKworICAtaW5mb2RpciB8IC0taW5mb2RpciB8IC0taW5mb2RpIHwgLS1pbmZvZCB8IC0taW5mbyB8IC0taW5mKQorICAgIGFjX3ByZXY9aW5mb2RpciA7OworICAtaW5mb2Rpcj0qIHwgLS1pbmZvZGlyPSogfCAtLWluZm9kaT0qIHwgLS1pbmZvZD0qIHwgLS1pbmZvPSogfCAtLWluZj0qKQorICAgIGluZm9kaXI9JGFjX29wdGFyZyA7OworCisgIC1saWJkaXIgfCAtLWxpYmRpciB8IC0tbGliZGkgfCAtLWxpYmQpCisgICAgYWNfcHJldj1saWJkaXIgOzsKKyAgLWxpYmRpcj0qIHwgLS1saWJkaXI9KiB8IC0tbGliZGk9KiB8IC0tbGliZD0qKQorICAgIGxpYmRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWxpYmV4ZWNkaXIgfCAtLWxpYmV4ZWNkaXIgfCAtLWxpYmV4ZWNkaSB8IC0tbGliZXhlY2QgfCAtLWxpYmV4ZWMgXAorICB8IC0tbGliZXhlIHwgLS1saWJleCB8IC0tbGliZSkKKyAgICBhY19wcmV2PWxpYmV4ZWNkaXIgOzsKKyAgLWxpYmV4ZWNkaXI9KiB8IC0tbGliZXhlY2Rpcj0qIHwgLS1saWJleGVjZGk9KiB8IC0tbGliZXhlY2Q9KiB8IC0tbGliZXhlYz0qIFwKKyAgfCAtLWxpYmV4ZT0qIHwgLS1saWJleD0qIHwgLS1saWJlPSopCisgICAgbGliZXhlY2Rpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWxvY2FsZWRpciB8IC0tbG9jYWxlZGlyIHwgLS1sb2NhbGVkaSB8IC0tbG9jYWxlZCB8IC0tbG9jYWxlKQorICAgIGFjX3ByZXY9bG9jYWxlZGlyIDs7CisgIC1sb2NhbGVkaXI9KiB8IC0tbG9jYWxlZGlyPSogfCAtLWxvY2FsZWRpPSogfCAtLWxvY2FsZWQ9KiB8IC0tbG9jYWxlPSopCisgICAgbG9jYWxlZGlyPSRhY19vcHRhcmcgOzsKKworICAtbG9jYWxzdGF0ZWRpciB8IC0tbG9jYWxzdGF0ZWRpciB8IC0tbG9jYWxzdGF0ZWRpIHwgLS1sb2NhbHN0YXRlZCBcCisgIHwgLS1sb2NhbHN0YXRlIHwgLS1sb2NhbHN0YXQgfCAtLWxvY2Fsc3RhIHwgLS1sb2NhbHN0IHwgLS1sb2NhbHMpCisgICAgYWNfcHJldj1sb2NhbHN0YXRlZGlyIDs7CisgIC1sb2NhbHN0YXRlZGlyPSogfCAtLWxvY2Fsc3RhdGVkaXI9KiB8IC0tbG9jYWxzdGF0ZWRpPSogfCAtLWxvY2Fsc3RhdGVkPSogXAorICB8IC0tbG9jYWxzdGF0ZT0qIHwgLS1sb2NhbHN0YXQ9KiB8IC0tbG9jYWxzdGE9KiB8IC0tbG9jYWxzdD0qIHwgLS1sb2NhbHM9KikKKyAgICBsb2NhbHN0YXRlZGlyPSRhY19vcHRhcmcgOzsKKworICAtbWFuZGlyIHwgLS1tYW5kaXIgfCAtLW1hbmRpIHwgLS1tYW5kIHwgLS1tYW4gfCAtLW1hIHwgLS1tKQorICAgIGFjX3ByZXY9bWFuZGlyIDs7CisgIC1tYW5kaXI9KiB8IC0tbWFuZGlyPSogfCAtLW1hbmRpPSogfCAtLW1hbmQ9KiB8IC0tbWFuPSogfCAtLW1hPSogfCAtLW09KikKKyAgICBtYW5kaXI9JGFjX29wdGFyZyA7OworCisgIC1uZnAgfCAtLW5mcCB8IC0tbmYpCisgICAgIyBPYnNvbGV0ZTsgdXNlIC0td2l0aG91dC1mcC4KKyAgICB3aXRoX2ZwPW5vIDs7CisKKyAgLW5vLWNyZWF0ZSB8IC0tbm8tY3JlYXRlIHwgLS1uby1jcmVhdCB8IC0tbm8tY3JlYSB8IC0tbm8tY3JlIFwKKyAgfCAtLW5vLWNyIHwgLS1uby1jIHwgLW4pCisgICAgbm9fY3JlYXRlPXllcyA7OworCisgIC1uby1yZWN1cnNpb24gfCAtLW5vLXJlY3Vyc2lvbiB8IC0tbm8tcmVjdXJzaW8gfCAtLW5vLXJlY3Vyc2kgXAorICB8IC0tbm8tcmVjdXJzIHwgLS1uby1yZWN1ciB8IC0tbm8tcmVjdSB8IC0tbm8tcmVjIHwgLS1uby1yZSB8IC0tbm8tcikKKyAgICBub19yZWN1cnNpb249eWVzIDs7CisKKyAgLW9sZGluY2x1ZGVkaXIgfCAtLW9sZGluY2x1ZGVkaXIgfCAtLW9sZGluY2x1ZGVkaSB8IC0tb2xkaW5jbHVkZWQgXAorICB8IC0tb2xkaW5jbHVkZSB8IC0tb2xkaW5jbHVkIHwgLS1vbGRpbmNsdSB8IC0tb2xkaW5jbCB8IC0tb2xkaW5jIFwKKyAgfCAtLW9sZGluIHwgLS1vbGRpIHwgLS1vbGQgfCAtLW9sIHwgLS1vKQorICAgIGFjX3ByZXY9b2xkaW5jbHVkZWRpciA7OworICAtb2xkaW5jbHVkZWRpcj0qIHwgLS1vbGRpbmNsdWRlZGlyPSogfCAtLW9sZGluY2x1ZGVkaT0qIHwgLS1vbGRpbmNsdWRlZD0qIFwKKyAgfCAtLW9sZGluY2x1ZGU9KiB8IC0tb2xkaW5jbHVkPSogfCAtLW9sZGluY2x1PSogfCAtLW9sZGluY2w9KiB8IC0tb2xkaW5jPSogXAorICB8IC0tb2xkaW49KiB8IC0tb2xkaT0qIHwgLS1vbGQ9KiB8IC0tb2w9KiB8IC0tbz0qKQorICAgIG9sZGluY2x1ZGVkaXI9JGFjX29wdGFyZyA7OworCisgIC1wcmVmaXggfCAtLXByZWZpeCB8IC0tcHJlZmkgfCAtLXByZWYgfCAtLXByZSB8IC0tcHIgfCAtLXApCisgICAgYWNfcHJldj1wcmVmaXggOzsKKyAgLXByZWZpeD0qIHwgLS1wcmVmaXg9KiB8IC0tcHJlZmk9KiB8IC0tcHJlZj0qIHwgLS1wcmU9KiB8IC0tcHI9KiB8IC0tcD0qKQorICAgIHByZWZpeD0kYWNfb3B0YXJnIDs7CisKKyAgLXByb2dyYW0tcHJlZml4IHwgLS1wcm9ncmFtLXByZWZpeCB8IC0tcHJvZ3JhbS1wcmVmaSB8IC0tcHJvZ3JhbS1wcmVmIFwKKyAgfCAtLXByb2dyYW0tcHJlIHwgLS1wcm9ncmFtLXByIHwgLS1wcm9ncmFtLXApCisgICAgYWNfcHJldj1wcm9ncmFtX3ByZWZpeCA7OworICAtcHJvZ3JhbS1wcmVmaXg9KiB8IC0tcHJvZ3JhbS1wcmVmaXg9KiB8IC0tcHJvZ3JhbS1wcmVmaT0qIFwKKyAgfCAtLXByb2dyYW0tcHJlZj0qIHwgLS1wcm9ncmFtLXByZT0qIHwgLS1wcm9ncmFtLXByPSogfCAtLXByb2dyYW0tcD0qKQorICAgIHByb2dyYW1fcHJlZml4PSRhY19vcHRhcmcgOzsKKworICAtcHJvZ3JhbS1zdWZmaXggfCAtLXByb2dyYW0tc3VmZml4IHwgLS1wcm9ncmFtLXN1ZmZpIHwgLS1wcm9ncmFtLXN1ZmYgXAorICB8IC0tcHJvZ3JhbS1zdWYgfCAtLXByb2dyYW0tc3UgfCAtLXByb2dyYW0tcykKKyAgICBhY19wcmV2PXByb2dyYW1fc3VmZml4IDs7CisgIC1wcm9ncmFtLXN1ZmZpeD0qIHwgLS1wcm9ncmFtLXN1ZmZpeD0qIHwgLS1wcm9ncmFtLXN1ZmZpPSogXAorICB8IC0tcHJvZ3JhbS1zdWZmPSogfCAtLXByb2dyYW0tc3VmPSogfCAtLXByb2dyYW0tc3U9KiB8IC0tcHJvZ3JhbS1zPSopCisgICAgcHJvZ3JhbV9zdWZmaXg9JGFjX29wdGFyZyA7OworCisgIC1wcm9ncmFtLXRyYW5zZm9ybS1uYW1lIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW1lIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbSB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmEgXAorICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbiB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtIHwgLS1wcm9ncmFtLXRyYW5zZm9yIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmbyB8IC0tcHJvZ3JhbS10cmFuc2YgXAorICB8IC0tcHJvZ3JhbS10cmFucyB8IC0tcHJvZ3JhbS10cmFuIFwKKyAgfCAtLXByb2dyLXRyYSB8IC0tcHJvZ3JhbS10ciB8IC0tcHJvZ3JhbS10KQorICAgIGFjX3ByZXY9cHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA7OworICAtcHJvZ3JhbS10cmFuc2Zvcm0tbmFtZT0qIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW1lPSogXAorICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtPSogfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hPSogXAorICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbj0qIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS09KiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybT0qIHwgLS1wcm9ncmFtLXRyYW5zZm9yPSogXAorICB8IC0tcHJvZ3JhbS10cmFuc2ZvPSogfCAtLXByb2dyYW0tdHJhbnNmPSogXAorICB8IC0tcHJvZ3JhbS10cmFucz0qIHwgLS1wcm9ncmFtLXRyYW49KiBcCisgIHwgLS1wcm9nci10cmE9KiB8IC0tcHJvZ3JhbS10cj0qIHwgLS1wcm9ncmFtLXQ9KikKKyAgICBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPSRhY19vcHRhcmcgOzsKKworICAtcGRmZGlyIHwgLS1wZGZkaXIgfCAtLXBkZmRpIHwgLS1wZGZkIHwgLS1wZGYgfCAtLXBkKQorICAgIGFjX3ByZXY9cGRmZGlyIDs7CisgIC1wZGZkaXI9KiB8IC0tcGRmZGlyPSogfCAtLXBkZmRpPSogfCAtLXBkZmQ9KiB8IC0tcGRmPSogfCAtLXBkPSopCisgICAgcGRmZGlyPSRhY19vcHRhcmcgOzsKKworICAtcHNkaXIgfCAtLXBzZGlyIHwgLS1wc2RpIHwgLS1wc2QgfCAtLXBzKQorICAgIGFjX3ByZXY9cHNkaXIgOzsKKyAgLXBzZGlyPSogfCAtLXBzZGlyPSogfCAtLXBzZGk9KiB8IC0tcHNkPSogfCAtLXBzPSopCisgICAgcHNkaXI9JGFjX29wdGFyZyA7OworCisgIC1xIHwgLXF1aWV0IHwgLS1xdWlldCB8IC0tcXVpZSB8IC0tcXVpIHwgLS1xdSB8IC0tcSBcCisgIHwgLXNpbGVudCB8IC0tc2lsZW50IHwgLS1zaWxlbiB8IC0tc2lsZSB8IC0tc2lsKQorICAgIHNpbGVudD15ZXMgOzsKKworICAtc2JpbmRpciB8IC0tc2JpbmRpciB8IC0tc2JpbmRpIHwgLS1zYmluZCB8IC0tc2JpbiB8IC0tc2JpIHwgLS1zYikKKyAgICBhY19wcmV2PXNiaW5kaXIgOzsKKyAgLXNiaW5kaXI9KiB8IC0tc2JpbmRpcj0qIHwgLS1zYmluZGk9KiB8IC0tc2JpbmQ9KiB8IC0tc2Jpbj0qIFwKKyAgfCAtLXNiaT0qIHwgLS1zYj0qKQorICAgIHNiaW5kaXI9JGFjX29wdGFyZyA7OworCisgIC1zaGFyZWRzdGF0ZWRpciB8IC0tc2hhcmVkc3RhdGVkaXIgfCAtLXNoYXJlZHN0YXRlZGkgXAorICB8IC0tc2hhcmVkc3RhdGVkIHwgLS1zaGFyZWRzdGF0ZSB8IC0tc2hhcmVkc3RhdCB8IC0tc2hhcmVkc3RhIFwKKyAgfCAtLXNoYXJlZHN0IHwgLS1zaGFyZWRzIHwgLS1zaGFyZWQgfCAtLXNoYXJlIHwgLS1zaGFyIFwKKyAgfCAtLXNoYSB8IC0tc2gpCisgICAgYWNfcHJldj1zaGFyZWRzdGF0ZWRpciA7OworICAtc2hhcmVkc3RhdGVkaXI9KiB8IC0tc2hhcmVkc3RhdGVkaXI9KiB8IC0tc2hhcmVkc3RhdGVkaT0qIFwKKyAgfCAtLXNoYXJlZHN0YXRlZD0qIHwgLS1zaGFyZWRzdGF0ZT0qIHwgLS1zaGFyZWRzdGF0PSogfCAtLXNoYXJlZHN0YT0qIFwKKyAgfCAtLXNoYXJlZHN0PSogfCAtLXNoYXJlZHM9KiB8IC0tc2hhcmVkPSogfCAtLXNoYXJlPSogfCAtLXNoYXI9KiBcCisgIHwgLS1zaGE9KiB8IC0tc2g9KikKKyAgICBzaGFyZWRzdGF0ZWRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLXNpdGUgfCAtLXNpdGUgfCAtLXNpdCkKKyAgICBhY19wcmV2PXNpdGUgOzsKKyAgLXNpdGU9KiB8IC0tc2l0ZT0qIHwgLS1zaXQ9KikKKyAgICBzaXRlPSRhY19vcHRhcmcgOzsKKworICAtc3JjZGlyIHwgLS1zcmNkaXIgfCAtLXNyY2RpIHwgLS1zcmNkIHwgLS1zcmMgfCAtLXNyKQorICAgIGFjX3ByZXY9c3JjZGlyIDs7CisgIC1zcmNkaXI9KiB8IC0tc3JjZGlyPSogfCAtLXNyY2RpPSogfCAtLXNyY2Q9KiB8IC0tc3JjPSogfCAtLXNyPSopCisgICAgc3JjZGlyPSRhY19vcHRhcmcgOzsKKworICAtc3lzY29uZmRpciB8IC0tc3lzY29uZmRpciB8IC0tc3lzY29uZmRpIHwgLS1zeXNjb25mZCB8IC0tc3lzY29uZiBcCisgIHwgLS1zeXNjb24gfCAtLXN5c2NvIHwgLS1zeXNjIHwgLS1zeXMgfCAtLXN5KQorICAgIGFjX3ByZXY9c3lzY29uZmRpciA7OworICAtc3lzY29uZmRpcj0qIHwgLS1zeXNjb25mZGlyPSogfCAtLXN5c2NvbmZkaT0qIHwgLS1zeXNjb25mZD0qIHwgLS1zeXNjb25mPSogXAorICB8IC0tc3lzY29uPSogfCAtLXN5c2NvPSogfCAtLXN5c2M9KiB8IC0tc3lzPSogfCAtLXN5PSopCisgICAgc3lzY29uZmRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLXRhcmdldCB8IC0tdGFyZ2V0IHwgLS10YXJnZSB8IC0tdGFyZyB8IC0tdGFyIHwgLS10YSB8IC0tdCkKKyAgICBhY19wcmV2PXRhcmdldF9hbGlhcyA7OworICAtdGFyZ2V0PSogfCAtLXRhcmdldD0qIHwgLS10YXJnZT0qIHwgLS10YXJnPSogfCAtLXRhcj0qIHwgLS10YT0qIHwgLS10PSopCisgICAgdGFyZ2V0X2FsaWFzPSRhY19vcHRhcmcgOzsKKworICAtdiB8IC12ZXJib3NlIHwgLS12ZXJib3NlIHwgLS12ZXJib3MgfCAtLXZlcmJvIHwgLS12ZXJiKQorICAgIHZlcmJvc2U9eWVzIDs7CisKKyAgLXZlcnNpb24gfCAtLXZlcnNpb24gfCAtLXZlcnNpbyB8IC0tdmVyc2kgfCAtLXZlcnMgfCAtVikKKyAgICBhY19pbml0X3ZlcnNpb249OiA7OworCisgIC13aXRoLSogfCAtLXdpdGgtKikKKyAgICBhY191c2Vyb3B0PWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qd2l0aC1cKFtePV0qXCknYAorICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KKyAgICBleHByICJ4JGFjX3VzZXJvcHQiIDogIi4qW14tKy5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorICAgICAgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgcGFja2FnZSBuYW1lOiAkYWNfdXNlcm9wdCIKKyAgICBhY191c2Vyb3B0X29yaWc9JGFjX3VzZXJvcHQKKyAgICBhY191c2Vyb3B0PWAkYXNfZWNobyAiJGFjX3VzZXJvcHQiIHwgc2VkICdzL1stKy5dL18vZydgCisgICAgY2FzZSAkYWNfdXNlcl9vcHRzIGluCisgICAgICAqIgorIndpdGhfJGFjX3VzZXJvcHQiCisiKikgOzsKKyAgICAgICopIGFjX3VucmVjb2duaXplZF9vcHRzPSIkYWNfdW5yZWNvZ25pemVkX29wdHMkYWNfdW5yZWNvZ25pemVkX3NlcC0td2l0aC0kYWNfdXNlcm9wdF9vcmlnIgorCSBhY191bnJlY29nbml6ZWRfc2VwPScsICc7OworICAgIGVzYWMKKyAgICBldmFsIHdpdGhfJGFjX3VzZXJvcHQ9XCRhY19vcHRhcmcgOzsKKworICAtd2l0aG91dC0qIHwgLS13aXRob3V0LSopCisgICAgYWNfdXNlcm9wdD1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKndpdGhvdXQtXCguKlwpJ2AKKyAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCisgICAgZXhwciAieCRhY191c2Vyb3B0IiA6ICIuKlteLSsuXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICAgIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIHBhY2thZ2UgbmFtZTogJGFjX3VzZXJvcHQiCisgICAgYWNfdXNlcm9wdF9vcmlnPSRhY191c2Vyb3B0CisgICAgYWNfdXNlcm9wdD1gJGFzX2VjaG8gIiRhY191c2Vyb3B0IiB8IHNlZCAncy9bLSsuXS9fL2cnYAorICAgIGNhc2UgJGFjX3VzZXJfb3B0cyBpbgorICAgICAgKiIKKyJ3aXRoXyRhY191c2Vyb3B0IgorIiopIDs7CisgICAgICAqKSBhY191bnJlY29nbml6ZWRfb3B0cz0iJGFjX3VucmVjb2duaXplZF9vcHRzJGFjX3VucmVjb2duaXplZF9zZXAtLXdpdGhvdXQtJGFjX3VzZXJvcHRfb3JpZyIKKwkgYWNfdW5yZWNvZ25pemVkX3NlcD0nLCAnOzsKKyAgICBlc2FjCisgICAgZXZhbCB3aXRoXyRhY191c2Vyb3B0PW5vIDs7CisKKyAgLS14KQorICAgICMgT2Jzb2xldGU7IHVzZSAtLXdpdGgteC4KKyAgICB3aXRoX3g9eWVzIDs7CisKKyAgLXgtaW5jbHVkZXMgfCAtLXgtaW5jbHVkZXMgfCAtLXgtaW5jbHVkZSB8IC0teC1pbmNsdWQgfCAtLXgtaW5jbHUgXAorICB8IC0teC1pbmNsIHwgLS14LWluYyB8IC0teC1pbiB8IC0teC1pKQorICAgIGFjX3ByZXY9eF9pbmNsdWRlcyA7OworICAteC1pbmNsdWRlcz0qIHwgLS14LWluY2x1ZGVzPSogfCAtLXgtaW5jbHVkZT0qIHwgLS14LWluY2x1ZD0qIHwgLS14LWluY2x1PSogXAorICB8IC0teC1pbmNsPSogfCAtLXgtaW5jPSogfCAtLXgtaW49KiB8IC0teC1pPSopCisgICAgeF9pbmNsdWRlcz0kYWNfb3B0YXJnIDs7CisKKyAgLXgtbGlicmFyaWVzIHwgLS14LWxpYnJhcmllcyB8IC0teC1saWJyYXJpZSB8IC0teC1saWJyYXJpIFwKKyAgfCAtLXgtbGlicmFyIHwgLS14LWxpYnJhIHwgLS14LWxpYnIgfCAtLXgtbGliIHwgLS14LWxpIHwgLS14LWwpCisgICAgYWNfcHJldj14X2xpYnJhcmllcyA7OworICAteC1saWJyYXJpZXM9KiB8IC0teC1saWJyYXJpZXM9KiB8IC0teC1saWJyYXJpZT0qIHwgLS14LWxpYnJhcmk9KiBcCisgIHwgLS14LWxpYnJhcj0qIHwgLS14LWxpYnJhPSogfCAtLXgtbGlicj0qIHwgLS14LWxpYj0qIHwgLS14LWxpPSogfCAtLXgtbD0qKQorICAgIHhfbGlicmFyaWVzPSRhY19vcHRhcmcgOzsKKworICAtKikgYXNfZm5fZXJyb3IgJD8gInVucmVjb2duaXplZCBvcHRpb246IFxgJGFjX29wdGlvbicKK1RyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24iCisgICAgOzsKKworICAqPSopCisgICAgYWNfZW52dmFyPWBleHByICJ4JGFjX29wdGlvbiIgOiAneFwoW149XSpcKT0nYAorICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KKyAgICBjYXNlICRhY19lbnZ2YXIgaW4gIygKKyAgICAgICcnIHwgWzAtOV0qIHwgKlshXyRhc19jcl9hbG51bV0qICkKKyAgICAgIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIHZhcmlhYmxlIG5hbWU6IFxgJGFjX2VudnZhciciIDs7CisgICAgZXNhYworICAgIGV2YWwgJGFjX2VudnZhcj1cJGFjX29wdGFyZworICAgIGV4cG9ydCAkYWNfZW52dmFyIDs7CisKKyAgKikKKyAgICAjIEZJWE1FOiBzaG91bGQgYmUgcmVtb3ZlZCBpbiBhdXRvY29uZiAzLjAuCisgICAgJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogeW91IHNob3VsZCB1c2UgLS1idWlsZCwgLS1ob3N0LCAtLXRhcmdldCIgPiYyCisgICAgZXhwciAieCRhY19vcHRpb24iIDogIi4qW14tLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisgICAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBpbnZhbGlkIGhvc3QgdHlwZTogJGFjX29wdGlvbiIgPiYyCisgICAgOiAiJHtidWlsZF9hbGlhcz0kYWNfb3B0aW9ufSAke2hvc3RfYWxpYXM9JGFjX29wdGlvbn0gJHt0YXJnZXRfYWxpYXM9JGFjX29wdGlvbn0iCisgICAgOzsKKworICBlc2FjCitkb25lCisKK2lmIHRlc3QgLW4gIiRhY19wcmV2IjsgdGhlbgorICBhY19vcHRpb249LS1gZWNobyAkYWNfcHJldiB8IHNlZCAncy9fLy0vZydgCisgIGFzX2ZuX2Vycm9yICQ/ICJtaXNzaW5nIGFyZ3VtZW50IHRvICRhY19vcHRpb24iCitmaQorCitpZiB0ZXN0IC1uICIkYWNfdW5yZWNvZ25pemVkX29wdHMiOyB0aGVuCisgIGNhc2UgJGVuYWJsZV9vcHRpb25fY2hlY2tpbmcgaW4KKyAgICBubykgOzsKKyAgICBmYXRhbCkgYXNfZm5fZXJyb3IgJD8gInVucmVjb2duaXplZCBvcHRpb25zOiAkYWNfdW5yZWNvZ25pemVkX29wdHMiIDs7CisgICAgKikgICAgICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVucmVjb2duaXplZCBvcHRpb25zOiAkYWNfdW5yZWNvZ25pemVkX29wdHMiID4mMiA7OworICBlc2FjCitmaQorCisjIENoZWNrIGFsbCBkaXJlY3RvcnkgYXJndW1lbnRzIGZvciBjb25zaXN0ZW5jeS4KK2ZvciBhY192YXIgaW4JZXhlY19wcmVmaXggcHJlZml4IGJpbmRpciBzYmluZGlyIGxpYmV4ZWNkaXIgZGF0YXJvb3RkaXIgXAorCQlkYXRhZGlyIHN5c2NvbmZkaXIgc2hhcmVkc3RhdGVkaXIgbG9jYWxzdGF0ZWRpciBpbmNsdWRlZGlyIFwKKwkJb2xkaW5jbHVkZWRpciBkb2NkaXIgaW5mb2RpciBodG1sZGlyIGR2aWRpciBwZGZkaXIgcHNkaXIgXAorCQlsaWJkaXIgbG9jYWxlZGlyIG1hbmRpcgorZG8KKyAgZXZhbCBhY192YWw9XCQkYWNfdmFyCisgICMgUmVtb3ZlIHRyYWlsaW5nIHNsYXNoZXMuCisgIGNhc2UgJGFjX3ZhbCBpbgorICAgICovICkKKyAgICAgIGFjX3ZhbD1gZXhwciAiWCRhY192YWwiIDogJ1hcKC4qW14vXVwpJyBcfCAiWCRhY192YWwiIDogJ1hcKC4qXCknYAorICAgICAgZXZhbCAkYWNfdmFyPVwkYWNfdmFsOzsKKyAgZXNhYworICAjIEJlIHN1cmUgdG8gaGF2ZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZXMuCisgIGNhc2UgJGFjX3ZhbCBpbgorICAgIFtcXC8kXSogfCA/OltcXC9dKiApICBjb250aW51ZTs7CisgICAgTk9ORSB8ICcnICkgY2FzZSAkYWNfdmFyIGluICpwcmVmaXggKSBjb250aW51ZTs7IGVzYWM7OworICBlc2FjCisgIGFzX2ZuX2Vycm9yICQ/ICJleHBlY3RlZCBhbiBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBmb3IgLS0kYWNfdmFyOiAkYWNfdmFsIgorZG9uZQorCisjIFRoZXJlIG1pZ2h0IGJlIHBlb3BsZSB3aG8gZGVwZW5kIG9uIHRoZSBvbGQgYnJva2VuIGJlaGF2aW9yOiBgJGhvc3QnCisjIHVzZWQgdG8gaG9sZCB0aGUgYXJndW1lbnQgb2YgLS1ob3N0IGV0Yy4KKyMgRklYTUU6IFRvIHJlbW92ZSBzb21lIGRheS4KK2J1aWxkPSRidWlsZF9hbGlhcworaG9zdD0kaG9zdF9hbGlhcwordGFyZ2V0PSR0YXJnZXRfYWxpYXMKKworIyBGSVhNRTogVG8gcmVtb3ZlIHNvbWUgZGF5LgoraWYgdGVzdCAieCRob3N0X2FsaWFzIiAhPSB4OyB0aGVuCisgIGlmIHRlc3QgIngkYnVpbGRfYWxpYXMiID0geDsgdGhlbgorICAgIGNyb3NzX2NvbXBpbGluZz1tYXliZQorICAgICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGlmIHlvdSB3YW50ZWQgdG8gc2V0IHRoZSAtLWJ1aWxkIHR5cGUsIGRvbid0IHVzZSAtLWhvc3QuCisgICAgSWYgYSBjcm9zcyBjb21waWxlciBpcyBkZXRlY3RlZCB0aGVuIGNyb3NzIGNvbXBpbGUgbW9kZSB3aWxsIGJlIHVzZWQiID4mMgorICBlbGlmIHRlc3QgIngkYnVpbGRfYWxpYXMiICE9ICJ4JGhvc3RfYWxpYXMiOyB0aGVuCisgICAgY3Jvc3NfY29tcGlsaW5nPXllcworICBmaQorZmkKKworYWNfdG9vbF9wcmVmaXg9Cit0ZXN0IC1uICIkaG9zdF9hbGlhcyIgJiYgYWNfdG9vbF9wcmVmaXg9JGhvc3RfYWxpYXMtCisKK3Rlc3QgIiRzaWxlbnQiID0geWVzICYmIGV4ZWMgNj4vZGV2L251bGwKKworCithY19wd2Q9YHB3ZGAgJiYgdGVzdCAtbiAiJGFjX3B3ZCIgJiYKK2FjX2xzX2RpPWBscyAtZGkgLmAgJiYKK2FjX3B3ZF9sc19kaT1gY2QgIiRhY19wd2QiICYmIGxzIC1kaSAuYCB8fAorICBhc19mbl9lcnJvciAkPyAid29ya2luZyBkaXJlY3RvcnkgY2Fubm90IGJlIGRldGVybWluZWQiCit0ZXN0ICJYJGFjX2xzX2RpIiA9ICJYJGFjX3B3ZF9sc19kaSIgfHwKKyAgYXNfZm5fZXJyb3IgJD8gInB3ZCBkb2VzIG5vdCByZXBvcnQgbmFtZSBvZiB3b3JraW5nIGRpcmVjdG9yeSIKKworCisjIEZpbmQgdGhlIHNvdXJjZSBmaWxlcywgaWYgbG9jYXRpb24gd2FzIG5vdCBzcGVjaWZpZWQuCitpZiB0ZXN0IC16ICIkc3JjZGlyIjsgdGhlbgorICBhY19zcmNkaXJfZGVmYXVsdGVkPXllcworICAjIFRyeSB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhpcyBzY3JpcHQsIHRoZW4gdGhlIHBhcmVudCBkaXJlY3RvcnkuCisgIGFjX2NvbmZkaXI9YCRhc19kaXJuYW1lIC0tICIkYXNfbXlzZWxmIiB8fAorJGFzX2V4cHIgWCIkYXNfbXlzZWxmIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorCSBYIiRhc19teXNlbGYiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJGFzX215c2VsZiIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkYXNfbXlzZWxmIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKyRhc19lY2hvIFgiJGFzX215c2VsZiIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKVteL10uKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKSQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCisgIHNyY2Rpcj0kYWNfY29uZmRpcgorICBpZiB0ZXN0ICEgLXIgIiRzcmNkaXIvJGFjX3VuaXF1ZV9maWxlIjsgdGhlbgorICAgIHNyY2Rpcj0uLgorICBmaQorZWxzZQorICBhY19zcmNkaXJfZGVmYXVsdGVkPW5vCitmaQoraWYgdGVzdCAhIC1yICIkc3JjZGlyLyRhY191bmlxdWVfZmlsZSI7IHRoZW4KKyAgdGVzdCAiJGFjX3NyY2Rpcl9kZWZhdWx0ZWQiID0geWVzICYmIHNyY2Rpcj0iJGFjX2NvbmZkaXIgb3IgLi4iCisgIGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgZmluZCBzb3VyY2VzICgkYWNfdW5pcXVlX2ZpbGUpIGluICRzcmNkaXIiCitmaQorYWNfbXNnPSJzb3VyY2VzIGFyZSBpbiAkc3JjZGlyLCBidXQgXGBjZCAkc3JjZGlyJyBkb2VzIG5vdCB3b3JrIgorYWNfYWJzX2NvbmZkaXI9YCgKKwljZCAiJHNyY2RpciIgJiYgdGVzdCAtciAiLi8kYWNfdW5pcXVlX2ZpbGUiIHx8IGFzX2ZuX2Vycm9yICQ/ICIkYWNfbXNnIgorCXB3ZClgCisjIFdoZW4gYnVpbGRpbmcgaW4gcGxhY2UsIHNldCBzcmNkaXI9LgoraWYgdGVzdCAiJGFjX2Fic19jb25mZGlyIiA9ICIkYWNfcHdkIjsgdGhlbgorICBzcmNkaXI9LgorZmkKKyMgUmVtb3ZlIHVubmVjZXNzYXJ5IHRyYWlsaW5nIHNsYXNoZXMgZnJvbSBzcmNkaXIuCisjIERvdWJsZSBzbGFzaGVzIGluIGZpbGUgbmFtZXMgaW4gb2JqZWN0IGZpbGUgZGVidWdnaW5nIGluZm8KKyMgbWVzcyB1cCBNLXggZ2RiIGluIEVtYWNzLgorY2FzZSAkc3JjZGlyIGluCisqLykgc3JjZGlyPWBleHByICJYJHNyY2RpciIgOiAnWFwoLipbXi9dXCknIFx8ICJYJHNyY2RpciIgOiAnWFwoLipcKSdgOzsKK2VzYWMKK2ZvciBhY192YXIgaW4gJGFjX3ByZWNpb3VzX3ZhcnM7IGRvCisgIGV2YWwgYWNfZW52XyR7YWNfdmFyfV9zZXQ9XCR7JHthY192YXJ9K3NldH0KKyAgZXZhbCBhY19lbnZfJHthY192YXJ9X3ZhbHVlPVwkJHthY192YXJ9CisgIGV2YWwgYWNfY3ZfZW52XyR7YWNfdmFyfV9zZXQ9XCR7JHthY192YXJ9K3NldH0KKyAgZXZhbCBhY19jdl9lbnZfJHthY192YXJ9X3ZhbHVlPVwkJHthY192YXJ9Citkb25lCisKKyMKKyMgUmVwb3J0IHRoZSAtLWhlbHAgbWVzc2FnZS4KKyMKK2lmIHRlc3QgIiRhY19pbml0X2hlbHAiID0gImxvbmciOyB0aGVuCisgICMgT21pdCBzb21lIGludGVybmFsIG9yIG9ic29sZXRlIG9wdGlvbnMgdG8gbWFrZSB0aGUgbGlzdCBsZXNzIGltcG9zaW5nLgorICAjIFRoaXMgbWVzc2FnZSBpcyB0b28gbG9uZyB0byBiZSBhIHN0cmluZyBpbiB0aGUgQS9VWCAzLjEgc2guCisgIGNhdCA8PF9BQ0VPRgorXGBjb25maWd1cmUnIGNvbmZpZ3VyZXMgYXZhaGkgMC42LjMxIHRvIGFkYXB0IHRvIG1hbnkga2luZHMgb2Ygc3lzdGVtcy4KKworVXNhZ2U6ICQwIFtPUFRJT05dLi4uIFtWQVI9VkFMVUVdLi4uCisKK1RvIGFzc2lnbiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgKGUuZy4sIENDLCBDRkxBR1MuLi4pLCBzcGVjaWZ5IHRoZW0gYXMKK1ZBUj1WQUxVRS4gIFNlZSBiZWxvdyBmb3IgZGVzY3JpcHRpb25zIG9mIHNvbWUgb2YgdGhlIHVzZWZ1bCB2YXJpYWJsZXMuCisKK0RlZmF1bHRzIGZvciB0aGUgb3B0aW9ucyBhcmUgc3BlY2lmaWVkIGluIGJyYWNrZXRzLgorCitDb25maWd1cmF0aW9uOgorICAtaCwgLS1oZWxwICAgICAgICAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdAorICAgICAgLS1oZWxwPXNob3J0ICAgICAgICBkaXNwbGF5IG9wdGlvbnMgc3BlY2lmaWMgdG8gdGhpcyBwYWNrYWdlCisgICAgICAtLWhlbHA9cmVjdXJzaXZlICAgIGRpc3BsYXkgdGhlIHNob3J0IGhlbHAgb2YgYWxsIHRoZSBpbmNsdWRlZCBwYWNrYWdlcworICAtViwgLS12ZXJzaW9uICAgICAgICAgICBkaXNwbGF5IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQKKyAgLXEsIC0tcXVpZXQsIC0tc2lsZW50ICAgZG8gbm90IHByaW50IFxgY2hlY2tpbmcgLi4uJyBtZXNzYWdlcworICAgICAgLS1jYWNoZS1maWxlPUZJTEUgICBjYWNoZSB0ZXN0IHJlc3VsdHMgaW4gRklMRSBbZGlzYWJsZWRdCisgIC1DLCAtLWNvbmZpZy1jYWNoZSAgICAgIGFsaWFzIGZvciBcYC0tY2FjaGUtZmlsZT1jb25maWcuY2FjaGUnCisgIC1uLCAtLW5vLWNyZWF0ZSAgICAgICAgIGRvIG5vdCBjcmVhdGUgb3V0cHV0IGZpbGVzCisgICAgICAtLXNyY2Rpcj1ESVIgICAgICAgIGZpbmQgdGhlIHNvdXJjZXMgaW4gRElSIFtjb25maWd1cmUgZGlyIG9yIFxgLi4nXQorCitJbnN0YWxsYXRpb24gZGlyZWN0b3JpZXM6CisgIC0tcHJlZml4PVBSRUZJWCAgICAgICAgIGluc3RhbGwgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGZpbGVzIGluIFBSRUZJWAorICAgICAgICAgICAgICAgICAgICAgICAgICBbJGFjX2RlZmF1bHRfcHJlZml4XQorICAtLWV4ZWMtcHJlZml4PUVQUkVGSVggICBpbnN0YWxsIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgZmlsZXMgaW4gRVBSRUZJWAorICAgICAgICAgICAgICAgICAgICAgICAgICBbUFJFRklYXQorCitCeSBkZWZhdWx0LCBcYG1ha2UgaW5zdGFsbCcgd2lsbCBpbnN0YWxsIGFsbCB0aGUgZmlsZXMgaW4KK1xgJGFjX2RlZmF1bHRfcHJlZml4L2JpbicsIFxgJGFjX2RlZmF1bHRfcHJlZml4L2xpYicgZXRjLiAgWW91IGNhbiBzcGVjaWZ5CithbiBpbnN0YWxsYXRpb24gcHJlZml4IG90aGVyIHRoYW4gXGAkYWNfZGVmYXVsdF9wcmVmaXgnIHVzaW5nIFxgLS1wcmVmaXgnLAorZm9yIGluc3RhbmNlIFxgLS1wcmVmaXg9XCRIT01FJy4KKworRm9yIGJldHRlciBjb250cm9sLCB1c2UgdGhlIG9wdGlvbnMgYmVsb3cuCisKK0ZpbmUgdHVuaW5nIG9mIHRoZSBpbnN0YWxsYXRpb24gZGlyZWN0b3JpZXM6CisgIC0tYmluZGlyPURJUiAgICAgICAgICAgIHVzZXIgZXhlY3V0YWJsZXMgW0VQUkVGSVgvYmluXQorICAtLXNiaW5kaXI9RElSICAgICAgICAgICBzeXN0ZW0gYWRtaW4gZXhlY3V0YWJsZXMgW0VQUkVGSVgvc2Jpbl0KKyAgLS1saWJleGVjZGlyPURJUiAgICAgICAgcHJvZ3JhbSBleGVjdXRhYmxlcyBbRVBSRUZJWC9saWJleGVjXQorICAtLXN5c2NvbmZkaXI9RElSICAgICAgICByZWFkLW9ubHkgc2luZ2xlLW1hY2hpbmUgZGF0YSBbUFJFRklYL2V0Y10KKyAgLS1zaGFyZWRzdGF0ZWRpcj1ESVIgICAgbW9kaWZpYWJsZSBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZGF0YSBbUFJFRklYL2NvbV0KKyAgLS1sb2NhbHN0YXRlZGlyPURJUiAgICAgbW9kaWZpYWJsZSBzaW5nbGUtbWFjaGluZSBkYXRhIFtQUkVGSVgvdmFyXQorICAtLWxpYmRpcj1ESVIgICAgICAgICAgICBvYmplY3QgY29kZSBsaWJyYXJpZXMgW0VQUkVGSVgvbGliXQorICAtLWluY2x1ZGVkaXI9RElSICAgICAgICBDIGhlYWRlciBmaWxlcyBbUFJFRklYL2luY2x1ZGVdCisgIC0tb2xkaW5jbHVkZWRpcj1ESVIgICAgIEMgaGVhZGVyIGZpbGVzIGZvciBub24tZ2NjIFsvdXNyL2luY2x1ZGVdCisgIC0tZGF0YXJvb3RkaXI9RElSICAgICAgIHJlYWQtb25seSBhcmNoLi1pbmRlcGVuZGVudCBkYXRhIHJvb3QgW1BSRUZJWC9zaGFyZV0KKyAgLS1kYXRhZGlyPURJUiAgICAgICAgICAgcmVhZC1vbmx5IGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBkYXRhIFtEQVRBUk9PVERJUl0KKyAgLS1pbmZvZGlyPURJUiAgICAgICAgICAgaW5mbyBkb2N1bWVudGF0aW9uIFtEQVRBUk9PVERJUi9pbmZvXQorICAtLWxvY2FsZWRpcj1ESVIgICAgICAgICBsb2NhbGUtZGVwZW5kZW50IGRhdGEgW0RBVEFST09URElSL2xvY2FsZV0KKyAgLS1tYW5kaXI9RElSICAgICAgICAgICAgbWFuIGRvY3VtZW50YXRpb24gW0RBVEFST09URElSL21hbl0KKyAgLS1kb2NkaXI9RElSICAgICAgICAgICAgZG9jdW1lbnRhdGlvbiByb290IFtEQVRBUk9PVERJUi9kb2MvYXZhaGldCisgIC0taHRtbGRpcj1ESVIgICAgICAgICAgIGh0bWwgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQorICAtLWR2aWRpcj1ESVIgICAgICAgICAgICBkdmkgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQorICAtLXBkZmRpcj1ESVIgICAgICAgICAgICBwZGYgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQorICAtLXBzZGlyPURJUiAgICAgICAgICAgICBwcyBkb2N1bWVudGF0aW9uIFtET0NESVJdCitfQUNFT0YKKworICBjYXQgPDxcX0FDRU9GCisKK1Byb2dyYW0gbmFtZXM6CisgIC0tcHJvZ3JhbS1wcmVmaXg9UFJFRklYICAgICAgICAgICAgcHJlcGVuZCBQUkVGSVggdG8gaW5zdGFsbGVkIHByb2dyYW0gbmFtZXMKKyAgLS1wcm9ncmFtLXN1ZmZpeD1TVUZGSVggICAgICAgICAgICBhcHBlbmQgU1VGRklYIHRvIGluc3RhbGxlZCBwcm9ncmFtIG5hbWVzCisgIC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtZT1QUk9HUkFNICAgcnVuIHNlZCBQUk9HUkFNIG9uIGluc3RhbGxlZCBwcm9ncmFtIG5hbWVzCisKK1N5c3RlbSB0eXBlczoKKyAgLS1idWlsZD1CVUlMRCAgICAgY29uZmlndXJlIGZvciBidWlsZGluZyBvbiBCVUlMRCBbZ3Vlc3NlZF0KKyAgLS1ob3N0PUhPU1QgICAgICAgY3Jvc3MtY29tcGlsZSB0byBidWlsZCBwcm9ncmFtcyB0byBydW4gb24gSE9TVCBbQlVJTERdCitfQUNFT0YKK2ZpCisKK2lmIHRlc3QgLW4gIiRhY19pbml0X2hlbHAiOyB0aGVuCisgIGNhc2UgJGFjX2luaXRfaGVscCBpbgorICAgICBzaG9ydCB8IHJlY3Vyc2l2ZSApIGVjaG8gIkNvbmZpZ3VyYXRpb24gb2YgYXZhaGkgMC42LjMxOiI7OworICAgZXNhYworICBjYXQgPDxcX0FDRU9GCisKK09wdGlvbmFsIEZlYXR1cmVzOgorICAtLWRpc2FibGUtb3B0aW9uLWNoZWNraW5nICBpZ25vcmUgdW5yZWNvZ25pemVkIC0tZW5hYmxlLy0td2l0aCBvcHRpb25zCisgIC0tZGlzYWJsZS1GRUFUVVJFICAgICAgIGRvIG5vdCBpbmNsdWRlIEZFQVRVUkUgKHNhbWUgYXMgLS1lbmFibGUtRkVBVFVSRT1ubykKKyAgLS1lbmFibGUtRkVBVFVSRVs9QVJHXSAgaW5jbHVkZSBGRUFUVVJFIFtBUkc9eWVzXQorICAtLWVuYWJsZS1zaWxlbnQtcnVsZXMgICAgICAgICAgbGVzcyB2ZXJib3NlIGJ1aWxkIG91dHB1dCAodW5kbzogYG1ha2UgVj0xJykKKyAgLS1kaXNhYmxlLXNpbGVudC1ydWxlcyAgICAgICAgIHZlcmJvc2UgYnVpbGQgb3V0cHV0ICh1bmRvOiBgbWFrZSBWPTAnKQorICAtLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZyAgc3BlZWRzIHVwIG9uZS10aW1lIGJ1aWxkCisgIC0tZW5hYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgICBkbyBub3QgcmVqZWN0IHNsb3cgZGVwZW5kZW5jeSBleHRyYWN0b3JzCisgIC0tZGlzYWJsZS1zdGFjay1wcm90ZWN0b3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRGlzYWJsZSBHQ0Mncy9saWJjJ3Mgc3RhY2stc21hc2hpbmcgcHJvdGVjdGlvbgorICAtLWVuYWJsZS1zaGFyZWRbPVBLR1NdICBidWlsZCBzaGFyZWQgbGlicmFyaWVzIFtkZWZhdWx0PXllc10KKyAgLS1lbmFibGUtc3RhdGljWz1QS0dTXSAgYnVpbGQgc3RhdGljIGxpYnJhcmllcyBbZGVmYXVsdD15ZXNdCisgIC0tZW5hYmxlLWZhc3QtaW5zdGFsbFs9UEtHU10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW1pemUgZm9yIGZhc3QgaW5zdGFsbGF0aW9uIFtkZWZhdWx0PXllc10KKyAgLS1kaXNhYmxlLWxpYnRvb2wtbG9jayAgYXZvaWQgbG9ja2luZyAobWlnaHQgYnJlYWsgcGFyYWxsZWwgYnVpbGRzKQorICAtLWRpc2FibGUtbmxzICAgICAgICAgICBkbyBub3QgdXNlIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0CisgIC0tZGlzYWJsZS1nbGliICAgICAgICAgIERpc2FibGUgdXNlIG9mIEdMaWIKKyAgLS1kaXNhYmxlLWdvYmplY3QgICAgICAgRGlzYWJsZSB1c2Ugb2YgR0xpYiBHT2JqZWN0CisgIC0tZW5hYmxlLWludHJvc3BlY3Rpb249W25vL2F1dG8veWVzXQorICAgICAgICAgICAgICAgICAgICAgICAgICBFbmFibGUgaW50cm9zcGVjdGlvbiBmb3IgdGhpcyBidWlsZAorICAtLWRpc2FibGUtcXQzICAgICAgICAgICBEaXNhYmxlIGJ1aWxkaW5nIG9mIFF0MyBtYWlubG9vcCBpbnRlZ3JhdGlvbgorICAtLWRpc2FibGUtcXQ0ICAgICAgICAgICBEaXNhYmxlIGJ1aWxkaW5nIG9mIFF0NENvcmUgbWFpbmxvb3AgaW50ZWdyYXRpb24KKyAgLS1kaXNhYmxlLWd0ayAgICAgICAgICAgRGlzYWJsZSB1c2Ugb2YgR1RLKyAyCisgIC0tZGlzYWJsZS1ndGszICAgICAgICAgIERpc2FibGUgdXNlIG9mIEdUSysgMworICAtLWRpc2FibGUtZGJ1cyAgICAgICAgICBEaXNhYmxlIHVzZSBvZiBELUJ1cworICAtLWVuYWJsZS1kYm0gICAgICAgICAgICBFbmFibGUgdXNlIG9mIERCTQorICAtLWRpc2FibGUtZ2RibSAgICAgICAgICBEaXNhYmxlIHVzZSBvZiBHREJNCisgIC0tZGlzYWJsZS1saWJkYWVtb24gICAgIERpc2FibGUgdXNlIG9mIGxpYmRhZW1vbgorICAtLWRpc2FibGUtcHl0aG9uICAgICAgICBEaXNhYmxlIHNjcmlwdHMgdGhhdCBkZXBlbmRzIG9uIHB5dGhvbgorICAtLWRpc2FibGUtcHlndGsgICAgICAgICBEaXNhYmxlIHVzZSBvZiBHVEsgaW4gUHl0aG9uCisgIC0tZGlzYWJsZS1weXRob24tZGJ1cyAgIERpc2FibGUgdXNlIG9mIEQtQnVzIGluIFB5dGhvbgorICAtLWRpc2FibGUtbW9ubyAgICAgICAgICBEaXNhYmxlIG1vbm8gYmluZGluZ3MKKyAgLS1kaXNhYmxlLW1vbm9kb2MgICAgICAgRGlzYWJsZSBkb2N1bWVudGF0aW9uIGZvciBtb25vIGJpbmRpbmdzCisgIC0tZGlzYWJsZS1hdXRvaXBkICAgICAgIERpc2FibGUgYnVpbGRpbmcgb2YgYXZhaGktYXV0b2lwZAorICAtLWRpc2FibGUtZG94eWdlbi1kb2MgICBkb24ndCBnZW5lcmF0ZSBhbnkgZG94eWdlbiBkb2N1bWVudGF0aW9uCisgIC0tZGlzYWJsZS1kb3h5Z2VuLWRvdCAgIGRvbid0IGdlbmVyYXRlIGdyYXBoaWNzIGZvciBkb3h5Z2VuIGRvY3VtZW50YXRpb24KKyAgLS1lbmFibGUtZG94eWdlbi1tYW4gICAgZ2VuZXJhdGUgZG94eWdlbiBtYW51YWwgcGFnZXMKKyAgLS1lbmFibGUtZG94eWdlbi1ydGYgICAgZ2VuZXJhdGUgZG94eWdlbiBSVEYgZG9jdW1lbnRhdGlvbgorICAtLWRpc2FibGUtZG94eWdlbi14bWwgICBkb24ndCBnZW5lcmF0ZSBkb3h5Z2VuIFhNTCBkb2N1bWVudGF0aW9uCisgIC0tZW5hYmxlLWRveHlnZW4tY2htICAgIGdlbmVyYXRlIGRveHlnZW4gY29tcHJlc3NlZCBIVE1MIGhlbHAgZG9jdW1lbnRhdGlvbgorICAtLWVuYWJsZS1kb3h5Z2VuLWNoaSAgICBnZW5lcmF0ZSBkb3h5Z2VuIHNlcGVyYXRlIGNvbXByZXNzZWQgSFRNTCBoZWxwIGluZGV4CisgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUKKyAgLS1kaXNhYmxlLWRveHlnZW4taHRtbCAgZG9uJ3QgZ2VuZXJhdGUgZG94eWdlbiBwbGFpbiBIVE1MIGRvY3VtZW50YXRpb24KKyAgLS1lbmFibGUtZG94eWdlbi1wcyAgICAgZ2VuZXJhdGUgZG94eWdlbiBQb3N0U2NyaXB0IGRvY3VtZW50YXRpb24KKyAgLS1lbmFibGUtZG94eWdlbi1wZGYgICAgZ2VuZXJhdGUgZG94eWdlbiBQREYgZG9jdW1lbnRhdGlvbgorICAtLWVuYWJsZS1jb3JlLWRvY3MgICAgICBFbmFibGUgYnVpbGRpbmcgb2YgZG9jdW1lbnRhdGlvbiBmb3IgYXZhaGktY29yZQorICAtLWRpc2FibGUtbWFucGFnZXMgICAgICBEaXNhYmxlIGJ1aWxkaW5nIGFuZCBpbnN0YWxsYXRpb24gb2YgbWFuIHBhZ2VzCisgIC0tZGlzYWJsZS14bWx0b21hbiAgICAgIERpc2FibGUgcmVidWlsZGluZyBvZiBtYW4gcGFnZXMgd2l0aCB4bWx0b21hbgorICAtLWVuYWJsZS10ZXN0cyAgICAgICAgICBFbmFibGUgYnVpbGRpbmcgb2YgdGVzdHMgYW5kIGV4YW1wbGVzCisgIC0tZW5hYmxlLWNvbXBhdC1saWJkbnNfc2QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlIGNvbXBhdGliaWxpdHkgbGF5ZXIgZm9yIGxpYmRuc19zZAorICAtLWVuYWJsZS1jb21wYXQtaG93bCAgICBFbmFibGUgY29tcGF0aWJpbGl0eSBsYXllciBmb3IgSE9XTAorCitPcHRpb25hbCBQYWNrYWdlczoKKyAgLS13aXRoLVBBQ0tBR0VbPUFSR10gICAgdXNlIFBBQ0tBR0UgW0FSRz15ZXNdCisgIC0td2l0aG91dC1QQUNLQUdFICAgICAgIGRvIG5vdCB1c2UgUEFDS0FHRSAoc2FtZSBhcyAtLXdpdGgtUEFDS0FHRT1ubykKKyAgLS13aXRoLXBpY1s9UEtHU10gICAgICAgdHJ5IHRvIHVzZSBvbmx5IFBJQy9ub24tUElDIG9iamVjdHMgW2RlZmF1bHQ9dXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdGhdCisgIC0td2l0aC1nbnUtbGQgICAgICAgICAgIGFzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBbZGVmYXVsdD1ub10KKyAgLS13aXRoLXN5c3Jvb3Q9RElSIFNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyB3aXRoaW4gRElSCisgICAgICAgICAgICAgICAgICAgICAgICAob3IgdGhlIGNvbXBpbGVyJ3Mgc3lzcm9vdCBpZiBub3Qgc3BlY2lmaWVkKS4KKyAgLS13aXRoLWRpc3Rybz1ESVNUUk8gICAgU3BlY2lmeSB0aGUgZGlzdHJpYnV0aW9uIHRvIHRhcmdldDogT25lIG9mIGxmcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGViaWFuLCBnZW50b28sIGFyY2hsaW51eCwgZmVkb3JhLCBtYW5kcml2YSwgZGFyd2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRic2QsIGZyZWVic2QsIHNsYWNrd2FyZSBvciBub25lCisgIC0td2l0aC1kYnVzLXN5cz08ZGlyPiAgIFBhdGggdG8gRC1CdXMgc3lzdGVtLmQgZGlyZWN0b3J5CisgIC0td2l0aC1kYnVzLXN5c3RlbS1hZGRyZXNzPTxhZGRyZXNzPgorICAgICAgICAgICAgICAgICAgICAgICAgICBQYXRoIHRvIHRoZSBELUJ1cyBzeXN0ZW0gc29ja2V0LCB5b3UgcHJvYmFibHkgd2FudAorICAgICAgICAgICAgICAgICAgICAgICAgICB0byBwdXQgdW5peDpwYXRoPSBhdCB0aGUgc3RhcnQuIE9ubHkgbmVlZGVkIGZvciB2ZXJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZCBELUJ1cyByZWxlYXNlcworICAtLXdpdGgteG1sPWV4cGF0L2JzZHhtbC9ub25lCisgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTCBsaWJyYXJ5IHRvIHVzZQorICAtLXdpdGgtYXZhaGktdXNlcj08dXNlcj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlciBmb3IgcnVubmluZyBhdmFoaS1kYWVtb24gKGF2YWhpKQorICAtLXdpdGgtYXZhaGktZ3JvdXA9PGdyb3VwPgorICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBmb3IgcnVubmluZyBhdmFoaS1kYWVtb24gKGF2YWhpKQorICAtLXdpdGgtYXZhaGktcHJpdi1hY2Nlc3MtZ3JvdXA9PGdyb3VwPgorICAgICAgICAgICAgICAgICAgICAgICAgICBQcml2aWxpZ2VkIGFjY2VzcyBncm91cCBmb3IgQXZhaGkgY2xpZW50cyAobmV0ZGV2KQorICAtLXdpdGgtYXV0b2lwZC11c2VyPTx1c2VyPgorICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VyIGZvciBydW5uaW5nIHRoZSBhdmFoaS1hdXRvaXBkIGRhZW1vbgorICAgICAgICAgICAgICAgICAgICAgICAgICAoYXZhaGktYXV0b2lwZCkKKyAgLS13aXRoLWF1dG9pcGQtZ3JvdXA9PGdyb3VwPgorICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBmb3IgcnVubmluZyB0aGUgYXZhaGktYXV0b2lwZCBkYWVtb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGF2YWhpLWF1dG9pcGQpCisgIC0td2l0aC1zeXN0ZW1kc3lzdGVtdW5pdGRpcj1ESVIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRGlyZWN0b3J5IGZvciBzeXN0ZW1kIHNlcnZpY2UgZmlsZXMKKworU29tZSBpbmZsdWVudGlhbCBlbnZpcm9ubWVudCB2YXJpYWJsZXM6CisgIENDICAgICAgICAgIEMgY29tcGlsZXIgY29tbWFuZAorICBDRkxBR1MgICAgICBDIGNvbXBpbGVyIGZsYWdzCisgIExERkxBR1MgICAgIGxpbmtlciBmbGFncywgZS5nLiAtTDxsaWIgZGlyPiBpZiB5b3UgaGF2ZSBsaWJyYXJpZXMgaW4gYQorICAgICAgICAgICAgICBub25zdGFuZGFyZCBkaXJlY3RvcnkgPGxpYiBkaXI+CisgIExJQlMgICAgICAgIGxpYnJhcmllcyB0byBwYXNzIHRvIHRoZSBsaW5rZXIsIGUuZy4gLWw8bGlicmFyeT4KKyAgQ1BQRkxBR1MgICAgKE9iamVjdGl2ZSkgQy9DKysgcHJlcHJvY2Vzc29yIGZsYWdzLCBlLmcuIC1JPGluY2x1ZGUgZGlyPiBpZgorICAgICAgICAgICAgICB5b3UgaGF2ZSBoZWFkZXJzIGluIGEgbm9uc3RhbmRhcmQgZGlyZWN0b3J5IDxpbmNsdWRlIGRpcj4KKyAgQ1hYICAgICAgICAgQysrIGNvbXBpbGVyIGNvbW1hbmQKKyAgQ1hYRkxBR1MgICAgQysrIGNvbXBpbGVyIGZsYWdzCisgIENQUCAgICAgICAgIEMgcHJlcHJvY2Vzc29yCisgIENYWENQUCAgICAgIEMrKyBwcmVwcm9jZXNzb3IKKyAgUEtHX0NPTkZJRyAgcGF0aCB0byBwa2ctY29uZmlnIHV0aWxpdHkKKyAgUEtHX0NPTkZJR19QQVRICisgICAgICAgICAgICAgIGRpcmVjdG9yaWVzIHRvIGFkZCB0byBwa2ctY29uZmlnJ3Mgc2VhcmNoIHBhdGgKKyAgUEtHX0NPTkZJR19MSUJESVIKKyAgICAgICAgICAgICAgcGF0aCBvdmVycmlkaW5nIHBrZy1jb25maWcncyBidWlsdC1pbiBzZWFyY2ggcGF0aAorICBHTElCMjBfQ0ZMQUdTCisgICAgICAgICAgICAgIEMgY29tcGlsZXIgZmxhZ3MgZm9yIEdMSUIyMCwgb3ZlcnJpZGluZyBwa2ctY29uZmlnCisgIEdMSUIyMF9MSUJTIGxpbmtlciBmbGFncyBmb3IgR0xJQjIwLCBvdmVycmlkaW5nIHBrZy1jb25maWcKKyAgR09CSkVDVF9DRkxBR1MKKyAgICAgICAgICAgICAgQyBjb21waWxlciBmbGFncyBmb3IgR09CSkVDVCwgb3ZlcnJpZGluZyBwa2ctY29uZmlnCisgIEdPQkpFQ1RfTElCUworICAgICAgICAgICAgICBsaW5rZXIgZmxhZ3MgZm9yIEdPQkpFQ1QsIG92ZXJyaWRpbmcgcGtnLWNvbmZpZworICBRVDNfQ0ZMQUdTICBDIGNvbXBpbGVyIGZsYWdzIGZvciBRVDMsIG92ZXJyaWRpbmcgcGtnLWNvbmZpZworICBRVDNfTElCUyAgICBsaW5rZXIgZmxhZ3MgZm9yIFFUMywgb3ZlcnJpZGluZyBwa2ctY29uZmlnCisgIFFUNF9DRkxBR1MgIEMgY29tcGlsZXIgZmxhZ3MgZm9yIFFUNCwgb3ZlcnJpZGluZyBwa2ctY29uZmlnCisgIFFUNF9MSUJTICAgIGxpbmtlciBmbGFncyBmb3IgUVQ0LCBvdmVycmlkaW5nIHBrZy1jb25maWcKKyAgR1RLMjBfQ0ZMQUdTCisgICAgICAgICAgICAgIEMgY29tcGlsZXIgZmxhZ3MgZm9yIEdUSzIwLCBvdmVycmlkaW5nIHBrZy1jb25maWcKKyAgR1RLMjBfTElCUyAgbGlua2VyIGZsYWdzIGZvciBHVEsyMCwgb3ZlcnJpZGluZyBwa2ctY29uZmlnCisgIEdUSzMwX0NGTEFHUworICAgICAgICAgICAgICBDIGNvbXBpbGVyIGZsYWdzIGZvciBHVEszMCwgb3ZlcnJpZGluZyBwa2ctY29uZmlnCisgIEdUSzMwX0xJQlMgIGxpbmtlciBmbGFncyBmb3IgR1RLMzAsIG92ZXJyaWRpbmcgcGtnLWNvbmZpZworICBEQlVTX0NGTEFHUyBDIGNvbXBpbGVyIGZsYWdzIGZvciBEQlVTLCBvdmVycmlkaW5nIHBrZy1jb25maWcKKyAgREJVU19MSUJTICAgbGlua2VyIGZsYWdzIGZvciBEQlVTLCBvdmVycmlkaW5nIHBrZy1jb25maWcKKyAgTElCREFFTU9OX0NGTEFHUworICAgICAgICAgICAgICBDIGNvbXBpbGVyIGZsYWdzIGZvciBMSUJEQUVNT04sIG92ZXJyaWRpbmcgcGtnLWNvbmZpZworICBMSUJEQUVNT05fTElCUworICAgICAgICAgICAgICBsaW5rZXIgZmxhZ3MgZm9yIExJQkRBRU1PTiwgb3ZlcnJpZGluZyBwa2ctY29uZmlnCisgIFBZVEhPTiAgICAgIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIKKyAgTU9OT0RPQ19DRkxBR1MKKyAgICAgICAgICAgICAgQyBjb21waWxlciBmbGFncyBmb3IgTU9OT0RPQywgb3ZlcnJpZGluZyBwa2ctY29uZmlnCisgIE1PTk9ET0NfTElCUworICAgICAgICAgICAgICBsaW5rZXIgZmxhZ3MgZm9yIE1PTk9ET0MsIG92ZXJyaWRpbmcgcGtnLWNvbmZpZworICBET1hZR0VOX1BBUEVSX1NJWkUKKyAgICAgICAgICAgICAgYTR3aWRlIChkZWZhdWx0KSwgYTQsIGxldHRlciwgbGVnYWwgb3IgZXhlY3V0aXZlCisKK1VzZSB0aGVzZSB2YXJpYWJsZXMgdG8gb3ZlcnJpZGUgdGhlIGNob2ljZXMgbWFkZSBieSBgY29uZmlndXJlJyBvciB0byBoZWxwCitpdCB0byBmaW5kIGxpYnJhcmllcyBhbmQgcHJvZ3JhbXMgd2l0aCBub25zdGFuZGFyZCBuYW1lcy9sb2NhdGlvbnMuCisKK1JlcG9ydCBidWdzIHRvIDxhdmFoaSAoYXQpIGxpc3RzIChkb3QpIGZyZWVkZXNrdG9wIChkb3QpIG9yZz4uCitfQUNFT0YKK2FjX3N0YXR1cz0kPworZmkKKworaWYgdGVzdCAiJGFjX2luaXRfaGVscCIgPSAicmVjdXJzaXZlIjsgdGhlbgorICAjIElmIHRoZXJlIGFyZSBzdWJkaXJzLCByZXBvcnQgdGhlaXIgc3BlY2lmaWMgLS1oZWxwLgorICBmb3IgYWNfZGlyIGluIDogJGFjX3N1YmRpcnNfYWxsOyBkbyB0ZXN0ICJ4JGFjX2RpciIgPSB4OiAmJiBjb250aW51ZQorICAgIHRlc3QgLWQgIiRhY19kaXIiIHx8CisgICAgICB7IGNkICIkc3JjZGlyIiAmJiBhY19wd2Q9YHB3ZGAgJiYgc3JjZGlyPS4gJiYgdGVzdCAtZCAiJGFjX2RpciI7IH0gfHwKKyAgICAgIGNvbnRpbnVlCisgICAgYWNfYnVpbGRkaXI9LgorCitjYXNlICIkYWNfZGlyIiBpbgorLikgYWNfZGlyX3N1ZmZpeD0gYWNfdG9wX2J1aWxkZGlyX3N1Yj0uIGFjX3RvcF9idWlsZF9wcmVmaXg9IDs7CisqKQorICBhY19kaXJfc3VmZml4PS9gJGFzX2VjaG8gIiRhY19kaXIiIHwgc2VkICdzfF5cLltcXC9dfHwnYAorICAjIEEgIi4uIiBmb3IgZWFjaCBkaXJlY3RvcnkgaW4gJGFjX2Rpcl9zdWZmaXguCisgIGFjX3RvcF9idWlsZGRpcl9zdWI9YCRhc19lY2hvICIkYWNfZGlyX3N1ZmZpeCIgfCBzZWQgJ3N8L1teXFwvXSp8Ly4ufGc7c3wvfHwnYAorICBjYXNlICRhY190b3BfYnVpbGRkaXJfc3ViIGluCisgICIiKSBhY190b3BfYnVpbGRkaXJfc3ViPS4gYWNfdG9wX2J1aWxkX3ByZWZpeD0gOzsKKyAgKikgIGFjX3RvcF9idWlsZF9wcmVmaXg9JGFjX3RvcF9idWlsZGRpcl9zdWIvIDs7CisgIGVzYWMgOzsKK2VzYWMKK2FjX2Fic190b3BfYnVpbGRkaXI9JGFjX3B3ZAorYWNfYWJzX2J1aWxkZGlyPSRhY19wd2QkYWNfZGlyX3N1ZmZpeAorIyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eToKK2FjX3RvcF9idWlsZGRpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeAorCitjYXNlICRzcmNkaXIgaW4KKyAgLikgICMgV2UgYXJlIGJ1aWxkaW5nIGluIHBsYWNlLgorICAgIGFjX3NyY2Rpcj0uCisgICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyX3N1YgorICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QgOzsKKyAgW1xcL10qIHwgPzpbXFwvXSogKSAgIyBBYnNvbHV0ZSBuYW1lLgorICAgIGFjX3NyY2Rpcj0kc3JjZGlyJGFjX2Rpcl9zdWZmaXg7CisgICAgYWNfdG9wX3NyY2Rpcj0kc3JjZGlyCisgICAgYWNfYWJzX3RvcF9zcmNkaXI9JHNyY2RpciA7OworICAqKSAjIFJlbGF0aXZlIG5hbWUuCisgICAgYWNfc3JjZGlyPSRhY190b3BfYnVpbGRfcHJlZml4JHNyY2RpciRhY19kaXJfc3VmZml4CisgICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeCRzcmNkaXIKKyAgICBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfcHdkLyRzcmNkaXIgOzsKK2VzYWMKK2FjX2Fic19zcmNkaXI9JGFjX2Fic190b3Bfc3JjZGlyJGFjX2Rpcl9zdWZmaXgKKworICAgIGNkICIkYWNfZGlyIiB8fCB7IGFjX3N0YXR1cz0kPzsgY29udGludWU7IH0KKyAgICAjIENoZWNrIGZvciBndWVzdGVkIGNvbmZpZ3VyZS4KKyAgICBpZiB0ZXN0IC1mICIkYWNfc3JjZGlyL2NvbmZpZ3VyZS5nbnUiOyB0aGVuCisgICAgICBlY2hvICYmCisgICAgICAkU0hFTEwgIiRhY19zcmNkaXIvY29uZmlndXJlLmdudSIgLS1oZWxwPXJlY3Vyc2l2ZQorICAgIGVsaWYgdGVzdCAtZiAiJGFjX3NyY2Rpci9jb25maWd1cmUiOyB0aGVuCisgICAgICBlY2hvICYmCisgICAgICAkU0hFTEwgIiRhY19zcmNkaXIvY29uZmlndXJlIiAtLWhlbHA9cmVjdXJzaXZlCisgICAgZWxzZQorICAgICAgJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogbm8gY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBpcyBpbiAkYWNfZGlyIiA+JjIKKyAgICBmaSB8fCBhY19zdGF0dXM9JD8KKyAgICBjZCAiJGFjX3B3ZCIgfHwgeyBhY19zdGF0dXM9JD87IGJyZWFrOyB9CisgIGRvbmUKK2ZpCisKK3Rlc3QgLW4gIiRhY19pbml0X2hlbHAiICYmIGV4aXQgJGFjX3N0YXR1cworaWYgJGFjX2luaXRfdmVyc2lvbjsgdGhlbgorICBjYXQgPDxcX0FDRU9GCithdmFoaSBjb25maWd1cmUgMC42LjMxCitnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjgKKworQ29weXJpZ2h0IChDKSAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorVGhpcyBjb25maWd1cmUgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2dpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4KK19BQ0VPRgorICBleGl0CitmaQorCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEF1dG9jb25mIGluaXRpYWxpemF0aW9uLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgYWNfZm5fY190cnlfY29tcGlsZSBMSU5FTk8KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJ5IHRvIGNvbXBpbGUgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLgorYWNfZm5fY190cnlfY29tcGlsZSAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgaWYgeyB7IGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcnIKKyAgYWNfc3RhdHVzPSQ/CisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjEKKyAgICBjYXQgY29uZnRlc3QuZXIxID4mNQorICAgIG12IC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKKyAgZmkKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuIDoKKyAgYWNfcmV0dmFsPTAKK2Vsc2UKKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19yZXR2YWw9MQorZmkKKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisgIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAorCit9ICMgYWNfZm5fY190cnlfY29tcGlsZQorCisjIGFjX2ZuX2N4eF90cnlfY29tcGlsZSBMSU5FTk8KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcnkgdG8gY29tcGlsZSBjb25mdGVzdC4kYWNfZXh0LCBhbmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuCithY19mbl9jeHhfdHJ5X2NvbXBpbGUgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgIGlmIHsgeyBhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXJyCisgIGFjX3N0YXR1cz0kPworICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCisgICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKKyAgICBtdiAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuIDoKKyAgYWNfcmV0dmFsPTAKK2Vsc2UKKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19yZXR2YWw9MQorZmkKKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisgIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAorCit9ICMgYWNfZm5fY3h4X3RyeV9jb21waWxlCisKKyMgYWNfZm5fY190cnlfY3BwIExJTkVOTworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyeSB0byBwcmVwcm9jZXNzIGNvbmZ0ZXN0LiRhY19leHQsIGFuZCByZXR1cm4gd2hldGhlciB0aGlzIHN1Y2NlZWRlZC4KK2FjX2ZuX2NfdHJ5X2NwcCAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIGlmIHsgeyBhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcnIKKyAgYWNfc3RhdHVzPSQ/CisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjEKKyAgICBjYXQgY29uZnRlc3QuZXIxID4mNQorICAgIG12IC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKKyAgZmkKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gPiBjb25mdGVzdC5pICYmIHsKKwkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH07IHRoZW4gOgorICBhY19yZXR2YWw9MAorZWxzZQorICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworICAgIGFjX3JldHZhbD0xCitmaQorICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKyAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCisKK30gIyBhY19mbl9jX3RyeV9jcHAKKworIyBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsIExJTkVOTyBIRUFERVIgVkFSIElOQ0xVREVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdHMgd2hldGhlciBIRUFERVIgZXhpc3RzLCBnaXZpbmcgYSB3YXJuaW5nIGlmIGl0IGNhbm5vdCBiZSBjb21waWxlZCB1c2luZworIyB0aGUgaW5jbHVkZSBmaWxlcyBpbiBJTkNMVURFUyBhbmQgc2V0dGluZyB0aGUgY2FjaGUgdmFyaWFibGUgVkFSCisjIGFjY29yZGluZ2x5LgorYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIGlmIGV2YWwgXCR7JDMrOn0gZmFsc2U7IHRoZW4gOgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkMiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJDIuLi4gIiA+JjY7IH0KK2lmIGV2YWwgXCR7JDMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZmkKK2V2YWwgYWNfcmVzPVwkJDMKKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQorJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQorZWxzZQorICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgJDIgdXNhYmlsaXR5IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nICQyIHVzYWJpbGl0eS4uLiAiID4mNjsgfQorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKKyNpbmNsdWRlIDwkMj4KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCitlbHNlCisgIGFjX2hlYWRlcl9jb21waWxlcj1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorJGFzX2VjaG8gIiRhY19oZWFkZXJfY29tcGlsZXIiID4mNjsgfQorCisjIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgJDIgcHJlc2VuY2UiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgJDIgcHJlc2VuY2UuLi4gIiA+JjY7IH0KK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDwkMj4KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworZWxzZQorICBhY19oZWFkZXJfcHJlcHJvYz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQorJGFzX2VjaG8gIiRhY19oZWFkZXJfcHJlcHJvYyIgPiY2OyB9CisKKyMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbiAjKCgKKyAgeWVzOm5vOiApCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkMjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorICAgIDs7CisgIG5vOnllczoqICkKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkMjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKyggJGFzX2VjaG8gIiMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBSZXBvcnQgdGhpcyB0byBhdmFoaSAoYXQpIGxpc3RzIChkb3QpIGZyZWVkZXNrdG9wIChkb3QpIG9yZyAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMiCisgICAgICkgfCBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKyAgICA7OworZXNhYworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkMiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJDIuLi4gIiA+JjY7IH0KK2lmIGV2YWwgXCR7JDMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBldmFsICIkMz1cJGFjX2hlYWRlcl9jb21waWxlciIKK2ZpCitldmFsIGFjX3Jlcz1cJCQzCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KK2ZpCisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworCit9ICMgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbAorCisjIGFjX2ZuX2NfdHJ5X3J1biBMSU5FTk8KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcnkgdG8gbGluayBjb25mdGVzdC4kYWNfZXh0LCBhbmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuIEFzc3VtZXMKKyMgdGhhdCBleGVjdXRhYmxlcyAqY2FuKiBiZSBydW4uCithY19mbl9jX3RyeV9ydW4gKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBpZiB7IHsgYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCisgIHsgeyBjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY190cnkiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgfTsgdGhlbiA6CisgIGFjX3JldHZhbD0wCitlbHNlCisgICRhc19lY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorICAgICAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisgICAgICAgYWNfcmV0dmFsPSRhY19zdGF0dXMKK2ZpCisgIHJtIC1yZiBjb25mdGVzdC5kU1lNIGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisgIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAorCit9ICMgYWNfZm5fY190cnlfcnVuCisKKyMgYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSBMSU5FTk8gSEVBREVSIFZBUiBJTkNMVURFUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3RzIHdoZXRoZXIgSEVBREVSIGV4aXN0cyBhbmQgY2FuIGJlIGNvbXBpbGVkIHVzaW5nIHRoZSBpbmNsdWRlIGZpbGVzIGluCisjIElOQ0xVREVTLCBzZXR0aW5nIHRoZSBjYWNoZSB2YXJpYWJsZSBWQVIgYWNjb3JkaW5nbHkuCithY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJDIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICQyLi4uICIgPiY2OyB9CitpZiBldmFsIFwkeyQzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKKyNpbmNsdWRlIDwkMj4KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBldmFsICIkMz15ZXMiCitlbHNlCisgIGV2YWwgIiQzPW5vIgorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2V2YWwgYWNfcmVzPVwkJDMKKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQorJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQorICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKworfSAjIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUKKworIyBhY19mbl9jX3RyeV9saW5rIExJTkVOTworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcnkgdG8gbGluayBjb25mdGVzdC4kYWNfZXh0LCBhbmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuCithY19mbl9jX3RyeV9saW5rICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyAgaWYgeyB7IGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcnIKKyAgYWNfc3RhdHVzPSQ/CisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjEKKyAgICBjYXQgY29uZnRlc3QuZXIxID4mNQorICAgIG12IC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKKyAgZmkKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYgeworCSB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyB8fAorCSAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorICAgICAgIH07IHRoZW4gOgorICBhY19yZXR2YWw9MAorZWxzZQorICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX3JldHZhbD0xCitmaQorICAjIERlbGV0ZSB0aGUgSVBBL0lQTyAoSW50ZXIgUHJvY2VkdXJhbCBBbmFseXNpcy9PcHRpbWl6YXRpb24pIGluZm9ybWF0aW9uCisgICMgY3JlYXRlZCBieSB0aGUgUEdJIGNvbXBpbGVyIChjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vKSwgYXMgaXQgd291bGQKKyAgIyBpbnRlcmZlcmUgd2l0aCB0aGUgbmV4dCBsaW5rIGNvbW1hbmQ7IGFsc28gZGVsZXRlIGEgZGlyZWN0b3J5IHRoYXQgaXMKKyAgIyBsZWZ0IGJlaGluZCBieSBBcHBsZSdzIGNvbXBpbGVyLiAgV2UgZG8gdGhpcyBiZWZvcmUgZXhlY3V0aW5nIHRoZSBhY3Rpb25zLgorICBybSAtcmYgY29uZnRlc3QuZFNZTSBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vCisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworICBhc19mbl9zZXRfc3RhdHVzICRhY19yZXR2YWwKKworfSAjIGFjX2ZuX2NfdHJ5X2xpbmsKKworIyBhY19mbl9jX2NoZWNrX2Z1bmMgTElORU5PIEZVTkMgVkFSCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdHMgd2hldGhlciBGVU5DIGV4aXN0cywgc2V0dGluZyB0aGUgY2FjaGUgdmFyaWFibGUgVkFSIGFjY29yZGluZ2x5CithY19mbl9jX2NoZWNrX2Z1bmMgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkMiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJDIuLi4gIiA+JjY7IH0KK2lmIGV2YWwgXCR7JDMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisvKiBEZWZpbmUgJDIgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkMi4KKyAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworI2RlZmluZSAkMiBpbm5vY3VvdXNfJDIKKworLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJDIgKCk7IGJlbG93LgorICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorCisjdW5kZWYgJDIKKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciAkMiAoKTsKKy8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKKyAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAorICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworI2lmIGRlZmluZWQgX19zdHViXyQyIHx8IGRlZmluZWQgX19zdHViX19fJDIKK2Nob2tlIG1lCisjZW5kaWYKKworaW50CittYWluICgpCit7CityZXR1cm4gJDIgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZXZhbCAiJDM9eWVzIgorZWxzZQorICBldmFsICIkMz1ubyIKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2V2YWwgYWNfcmVzPVwkJDMKKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQorJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQorICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKworfSAjIGFjX2ZuX2NfY2hlY2tfZnVuYworCisjIGFjX2ZuX2N4eF90cnlfY3BwIExJTkVOTworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJ5IHRvIHByZXByb2Nlc3MgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLgorYWNfZm5fY3h4X3RyeV9jcHAgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBpZiB7IHsgYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXJyCisgIGFjX3N0YXR1cz0kPworICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCisgICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKKyAgICBtdiAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ID4gY29uZnRlc3QuaSAmJiB7CisJIHRlc3QgLXogIiRhY19jeHhfcHJlcHJvY193YXJuX2ZsYWckYWNfY3h4X3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfTsgdGhlbiA6CisgIGFjX3JldHZhbD0wCitlbHNlCisgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisgICAgYWNfcmV0dmFsPTEKK2ZpCisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworICBhc19mbl9zZXRfc3RhdHVzICRhY19yZXR2YWwKKworfSAjIGFjX2ZuX2N4eF90cnlfY3BwCisKKyMgYWNfZm5fY3h4X3RyeV9saW5rIExJTkVOTworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyeSB0byBsaW5rIGNvbmZ0ZXN0LiRhY19leHQsIGFuZCByZXR1cm4gd2hldGhlciB0aGlzIHN1Y2NlZWRlZC4KK2FjX2ZuX2N4eF90cnlfbGluayAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgIGlmIHsgeyBhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXJyCisgIGFjX3N0YXR1cz0kPworICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCisgICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKKyAgICBtdiAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYgeworCSB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyB8fAorCSAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorICAgICAgIH07IHRoZW4gOgorICBhY19yZXR2YWw9MAorZWxzZQorICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX3JldHZhbD0xCitmaQorICAjIERlbGV0ZSB0aGUgSVBBL0lQTyAoSW50ZXIgUHJvY2VkdXJhbCBBbmFseXNpcy9PcHRpbWl6YXRpb24pIGluZm9ybWF0aW9uCisgICMgY3JlYXRlZCBieSB0aGUgUEdJIGNvbXBpbGVyIChjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vKSwgYXMgaXQgd291bGQKKyAgIyBpbnRlcmZlcmUgd2l0aCB0aGUgbmV4dCBsaW5rIGNvbW1hbmQ7IGFsc28gZGVsZXRlIGEgZGlyZWN0b3J5IHRoYXQgaXMKKyAgIyBsZWZ0IGJlaGluZCBieSBBcHBsZSdzIGNvbXBpbGVyLiAgV2UgZG8gdGhpcyBiZWZvcmUgZXhlY3V0aW5nIHRoZSBhY3Rpb25zLgorICBybSAtcmYgY29uZnRlc3QuZFNZTSBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vCisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworICBhc19mbl9zZXRfc3RhdHVzICRhY19yZXR2YWwKKworfSAjIGFjX2ZuX2N4eF90cnlfbGluaworCisjIGFjX2ZuX2NfY2hlY2tfdHlwZSBMSU5FTk8gVFlQRSBWQVIgSU5DTFVERVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0cyB3aGV0aGVyIFRZUEUgZXhpc3RzIGFmdGVyIGhhdmluZyBpbmNsdWRlZCBJTkNMVURFUywgc2V0dGluZyBjYWNoZQorIyB2YXJpYWJsZSBWQVIgYWNjb3JkaW5nbHkuCithY19mbl9jX2NoZWNrX3R5cGUgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkMiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJDIuLi4gIiA+JjY7IH0KK2lmIGV2YWwgXCR7JDMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBldmFsICIkMz1ubyIKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKK2ludAorbWFpbiAoKQoreworaWYgKHNpemVvZiAoJDIpKQorCSByZXR1cm4gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAoraW50CittYWluICgpCit7CitpZiAoc2l6ZW9mICgoJDIpKSkKKwkgICAgcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworZWxzZQorICBldmFsICIkMz15ZXMiCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZXZhbCBhY19yZXM9XCQkMworCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworCit9ICMgYWNfZm5fY19jaGVja190eXBlCisKKyMgYWNfZm5fY19jaGVja19kZWNsIExJTkVOTyBTWU1CT0wgVkFSIElOQ0xVREVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0cyB3aGV0aGVyIFNZTUJPTCBpcyBkZWNsYXJlZCBpbiBJTkNMVURFUywgc2V0dGluZyBjYWNoZSB2YXJpYWJsZSBWQVIKKyMgYWNjb3JkaW5nbHkuCithY19mbl9jX2NoZWNrX2RlY2wgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBhc19kZWNsX25hbWU9YGVjaG8gJDJ8c2VkICdzLyAqKC4qLy8nYAorICBhc19kZWNsX3VzZT1gZWNobyAkMnxzZWQgLWUgJ3MvKC8oKC8nIC1lICdzLykvKSAwJi8nIC1lICdzLywvKSAwJiAoL2cnYAorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJGFzX2RlY2xfbmFtZSBpcyBkZWNsYXJlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRhc19kZWNsX25hbWUgaXMgZGVjbGFyZWQuLi4gIiA+JjY7IH0KK2lmIGV2YWwgXCR7JDMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAoraW50CittYWluICgpCit7CisjaWZuZGVmICRhc19kZWNsX25hbWUKKyNpZmRlZiBfX2NwbHVzcGx1cworICAodm9pZCkgJGFzX2RlY2xfdXNlOworI2Vsc2UKKyAgKHZvaWQpICRhc19kZWNsX25hbWU7CisjZW5kaWYKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZXZhbCAiJDM9eWVzIgorZWxzZQorICBldmFsICIkMz1ubyIKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitldmFsIGFjX3Jlcz1cJCQzCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisKK30gIyBhY19mbl9jX2NoZWNrX2RlY2wKK2NhdCA+Y29uZmlnLmxvZyA8PF9BQ0VPRgorVGhpcyBmaWxlIGNvbnRhaW5zIGFueSBtZXNzYWdlcyBwcm9kdWNlZCBieSBjb21waWxlcnMgd2hpbGUKK3J1bm5pbmcgY29uZmlndXJlLCB0byBhaWQgZGVidWdnaW5nIGlmIGNvbmZpZ3VyZSBtYWtlcyBhIG1pc3Rha2UuCisKK0l0IHdhcyBjcmVhdGVkIGJ5IGF2YWhpICRhc19tZSAwLjYuMzEsIHdoaWNoIHdhcworZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY4LiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCisKKyAgJCAkMCAkQAorCitfQUNFT0YKK2V4ZWMgNT4+Y29uZmlnLmxvZworeworY2F0IDw8X0FTVU5BTUUKKyMjIC0tLS0tLS0tLSAjIworIyMgUGxhdGZvcm0uICMjCisjIyAtLS0tLS0tLS0gIyMKKworaG9zdG5hbWUgPSBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWAKK3VuYW1lIC1tID0gYCh1bmFtZSAtbSkgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAordW5hbWUgLXIgPSBgKHVuYW1lIC1yKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCit1bmFtZSAtcyA9IGAodW5hbWUgLXMpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKK3VuYW1lIC12ID0gYCh1bmFtZSAtdikgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAorCisvdXNyL2Jpbi91bmFtZSAtcCA9IGAoL3Vzci9iaW4vdW5hbWUgLXApIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKKy9iaW4vdW5hbWUgLVggICAgID0gYCgvYmluL3VuYW1lIC1YKSAyPi9kZXYvbnVsbCAgICAgfHwgZWNobyB1bmtub3duYAorCisvYmluL2FyY2ggICAgICAgICAgICAgID0gYCgvYmluL2FyY2gpIDI+L2Rldi9udWxsICAgICAgICAgICAgICB8fCBlY2hvIHVua25vd25gCisvdXNyL2Jpbi9hcmNoIC1rICAgICAgID0gYCgvdXNyL2Jpbi9hcmNoIC1rKSAyPi9kZXYvbnVsbCAgICAgICB8fCBlY2hvIHVua25vd25gCisvdXNyL2NvbnZleC9nZXRzeXNpbmZvID0gYCgvdXNyL2NvbnZleC9nZXRzeXNpbmZvKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCisvdXNyL2Jpbi9ob3N0aW5mbyAgICAgID0gYCgvdXNyL2Jpbi9ob3N0aW5mbykgMj4vZGV2L251bGwgICAgICB8fCBlY2hvIHVua25vd25gCisvYmluL21hY2hpbmUgICAgICAgICAgID0gYCgvYmluL21hY2hpbmUpIDI+L2Rldi9udWxsICAgICAgICAgICB8fCBlY2hvIHVua25vd25gCisvdXNyL2Jpbi9vc2xldmVsICAgICAgID0gYCgvdXNyL2Jpbi9vc2xldmVsKSAyPi9kZXYvbnVsbCAgICAgICB8fCBlY2hvIHVua25vd25gCisvYmluL3VuaXZlcnNlICAgICAgICAgID0gYCgvYmluL3VuaXZlcnNlKSAyPi9kZXYvbnVsbCAgICAgICAgICB8fCBlY2hvIHVua25vd25gCisKK19BU1VOQU1FCisKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICAkYXNfZWNobyAiUEFUSDogJGFzX2RpciIKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCit9ID4mNQorCitjYXQgPiY1IDw8X0FDRU9GCisKKworIyMgLS0tLS0tLS0tLS0gIyMKKyMjIENvcmUgdGVzdHMuICMjCisjIyAtLS0tLS0tLS0tLSAjIworCitfQUNFT0YKKworCisjIEtlZXAgYSB0cmFjZSBvZiB0aGUgY29tbWFuZCBsaW5lLgorIyBTdHJpcCBvdXQgLS1uby1jcmVhdGUgYW5kIC0tbm8tcmVjdXJzaW9uIHNvIHRoZXkgZG8gbm90IHBpbGUgdXAuCisjIFN0cmlwIG91dCAtLXNpbGVudCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gcmVjb3JkIGl0IGZvciBmdXR1cmUgcnVucy4KKyMgQWxzbyBxdW90ZSBhbnkgYXJncyBjb250YWluaW5nIHNoZWxsIG1ldGEtY2hhcmFjdGVycy4KKyMgTWFrZSB0d28gcGFzc2VzIHRvIGFsbG93IGZvciBwcm9wZXIgZHVwbGljYXRlLWFyZ3VtZW50IHN1cHByZXNzaW9uLgorYWNfY29uZmlndXJlX2FyZ3M9CithY19jb25maWd1cmVfYXJnczA9CithY19jb25maWd1cmVfYXJnczE9CithY19tdXN0X2tlZXBfbmV4dD1mYWxzZQorZm9yIGFjX3Bhc3MgaW4gMSAyCitkbworICBmb3IgYWNfYXJnCisgIGRvCisgICAgY2FzZSAkYWNfYXJnIGluCisgICAgLW5vLWNyZWF0ZSB8IC0tbm8tYyogfCAtbiB8IC1uby1yZWN1cnNpb24gfCAtLW5vLXIqKSBjb250aW51ZSA7OworICAgIC1xIHwgLXF1aWV0IHwgLS1xdWlldCB8IC0tcXVpZSB8IC0tcXVpIHwgLS1xdSB8IC0tcSBcCisgICAgfCAtc2lsZW50IHwgLS1zaWxlbnQgfCAtLXNpbGVuIHwgLS1zaWxlIHwgLS1zaWwpCisgICAgICBjb250aW51ZSA7OworICAgICpcJyopCisgICAgICBhY19hcmc9YCRhc19lY2hvICIkYWNfYXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OworICAgIGVzYWMKKyAgICBjYXNlICRhY19wYXNzIGluCisgICAgMSkgYXNfZm5fYXBwZW5kIGFjX2NvbmZpZ3VyZV9hcmdzMCAiICckYWNfYXJnJyIgOzsKKyAgICAyKQorICAgICAgYXNfZm5fYXBwZW5kIGFjX2NvbmZpZ3VyZV9hcmdzMSAiICckYWNfYXJnJyIKKyAgICAgIGlmIHRlc3QgJGFjX211c3Rfa2VlcF9uZXh0ID0gdHJ1ZTsgdGhlbgorCWFjX211c3Rfa2VlcF9uZXh0PWZhbHNlICMgR290IHZhbHVlLCBiYWNrIHRvIG5vcm1hbC4KKyAgICAgIGVsc2UKKwljYXNlICRhY19hcmcgaW4KKwkgICo9KiB8IC0tY29uZmlnLWNhY2hlIHwgLUMgfCAtZGlzYWJsZS0qIHwgLS1kaXNhYmxlLSogXAorCSAgfCAtZW5hYmxlLSogfCAtLWVuYWJsZS0qIHwgLWdhcyB8IC0tZyogfCAtbmZwIHwgLS1uZiogXAorCSAgfCAtcSB8IC1xdWlldCB8IC0tcSogfCAtc2lsZW50IHwgLS1zaWwqIHwgLXYgfCAtdmVyYiogXAorCSAgfCAtd2l0aC0qIHwgLS13aXRoLSogfCAtd2l0aG91dC0qIHwgLS13aXRob3V0LSogfCAtLXgpCisJICAgIGNhc2UgIiRhY19jb25maWd1cmVfYXJnczAgIiBpbgorCSAgICAgICIkYWNfY29uZmlndXJlX2FyZ3MxIioiICckYWNfYXJnJyAiKiApIGNvbnRpbnVlIDs7CisJICAgIGVzYWMKKwkgICAgOzsKKwkgIC0qICkgYWNfbXVzdF9rZWVwX25leHQ9dHJ1ZSA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBhc19mbl9hcHBlbmQgYWNfY29uZmlndXJlX2FyZ3MgIiAnJGFjX2FyZyciCisgICAgICA7OworICAgIGVzYWMKKyAgZG9uZQorZG9uZQoreyBhY19jb25maWd1cmVfYXJnczA9OyB1bnNldCBhY19jb25maWd1cmVfYXJnczA7fQoreyBhY19jb25maWd1cmVfYXJnczE9OyB1bnNldCBhY19jb25maWd1cmVfYXJnczE7fQorCisjIFdoZW4gaW50ZXJydXB0ZWQgb3IgZXhpdCdkLCBjbGVhbnVwIHRlbXBvcmFyeSBmaWxlcywgYW5kIGNvbXBsZXRlCisjIGNvbmZpZy5sb2cuICBXZSByZW1vdmUgY29tbWVudHMgYmVjYXVzZSBhbnl3YXkgdGhlIHF1b3RlcyBpbiB0aGVyZQorIyB3b3VsZCBjYXVzZSBwcm9ibGVtcyBvciBsb29rIHVnbHkuCisjIFdBUk5JTkc6IFVzZSAnXCcnIHRvIHJlcHJlc2VudCBhbiBhcG9zdHJvcGhlIHdpdGhpbiB0aGUgdHJhcC4KKyMgV0FSTklORzogRG8gbm90IHN0YXJ0IHRoZSB0cmFwIGNvZGUgd2l0aCBhIG5ld2xpbmUsIGR1ZSB0byBhIEZyZWVCU0QgNC4wIGJ1Zy4KK3RyYXAgJ2V4aXRfc3RhdHVzPSQ/CisgICMgU2F2ZSBpbnRvIGNvbmZpZy5sb2cgc29tZSBpbmZvcm1hdGlvbiB0aGF0IG1pZ2h0IGhlbHAgaW4gZGVidWdnaW5nLgorICB7CisgICAgZWNobworCisgICAgJGFzX2VjaG8gIiMjIC0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIENhY2hlIHZhcmlhYmxlcy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0gIyMiCisgICAgZWNobworICAgICMgVGhlIGZvbGxvd2luZyB3YXkgb2Ygd3JpdGluZyB0aGUgY2FjaGUgbWlzaGFuZGxlcyBuZXdsaW5lcyBpbiB2YWx1ZXMsCisoCisgIGZvciBhY192YXIgaW4gYChzZXQpIDI+JjEgfCBzZWQgLW4gJ1wnJ3MvXlwoW2EtekEtWl9dW2EtekEtWjAtOV9dKlwpPS4qL1wxL3AnXCcnYDsgZG8KKyAgICBldmFsIGFjX3ZhbD1cJCRhY192YXIKKyAgICBjYXNlICRhY192YWwgaW4gIygKKyAgICAqJHthc19ubH0qKQorICAgICAgY2FzZSAkYWNfdmFyIGluICMoCisgICAgICAqX2N2XyopIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogY2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogY2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUiID4mMjt9IDs7CisgICAgICBlc2FjCisgICAgICBjYXNlICRhY192YXIgaW4gIygKKyAgICAgIF8gfCBJRlMgfCBhc19ubCkgOzsgIygKKyAgICAgIEJBU0hfQVJHViB8IEJBU0hfU09VUkNFKSBldmFsICRhY192YXI9IDs7ICMoCisgICAgICAqKSB7IGV2YWwgJGFjX3Zhcj07IHVuc2V0ICRhY192YXI7fSA7OworICAgICAgZXNhYyA7OworICAgIGVzYWMKKyAgZG9uZQorICAoc2V0KSAyPiYxIHwKKyAgICBjYXNlICRhc19ubGAoYWNfc3BhY2U9J1wnJyAnXCcnOyBzZXQpIDI+JjFgIGluICMoCisgICAgKiR7YXNfbmx9YWNfc3BhY2U9XCAqKQorICAgICAgc2VkIC1uIFwKKwkicy8nXCcnLydcJydcXFxcJ1wnJydcJycvZzsKKwkgIHMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9J1wnJ1xcMidcJycvcCIKKyAgICAgIDs7ICMoCisgICAgKikKKyAgICAgIHNlZCAtbiAiL15bXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSo9L3AiCisgICAgICA7OworICAgIGVzYWMgfAorICAgIHNvcnQKKykKKyAgICBlY2hvCisKKyAgICAkYXNfZWNobyAiIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE91dHB1dCB2YXJpYWJsZXMuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIyIKKyAgICBlY2hvCisgICAgZm9yIGFjX3ZhciBpbiAkYWNfc3Vic3RfdmFycworICAgIGRvCisgICAgICBldmFsIGFjX3ZhbD1cJCRhY192YXIKKyAgICAgIGNhc2UgJGFjX3ZhbCBpbgorICAgICAgKlwnXCcnKikgYWNfdmFsPWAkYXNfZWNobyAiJGFjX3ZhbCIgfCBzZWQgInMvJ1wnJy8nXCcnXFxcXFxcXFwnXCcnJ1wnJy9nImA7OworICAgICAgZXNhYworICAgICAgJGFzX2VjaG8gIiRhY192YXI9J1wnJyRhY192YWwnXCcnIgorICAgIGRvbmUgfCBzb3J0CisgICAgZWNobworCisgICAgaWYgdGVzdCAtbiAiJGFjX3N1YnN0X2ZpbGVzIjsgdGhlbgorICAgICAgJGFzX2VjaG8gIiMjIC0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEZpbGUgc3Vic3RpdHV0aW9ucy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0gIyMiCisgICAgICBlY2hvCisgICAgICBmb3IgYWNfdmFyIGluICRhY19zdWJzdF9maWxlcworICAgICAgZG8KKwlldmFsIGFjX3ZhbD1cJCRhY192YXIKKwljYXNlICRhY192YWwgaW4KKwkqXCdcJycqKSBhY192YWw9YCRhc19lY2hvICIkYWNfdmFsIiB8IHNlZCAicy8nXCcnLydcJydcXFxcXFxcXCdcJycnXCcnL2ciYDs7CisJZXNhYworCSRhc19lY2hvICIkYWNfdmFyPSdcJyckYWNfdmFsJ1wnJyIKKyAgICAgIGRvbmUgfCBzb3J0CisgICAgICBlY2hvCisgICAgZmkKKworICAgIGlmIHRlc3QgLXMgY29uZmRlZnMuaDsgdGhlbgorICAgICAgJGFzX2VjaG8gIiMjIC0tLS0tLS0tLS0tICMjCisjIyBjb25mZGVmcy5oLiAjIworIyMgLS0tLS0tLS0tLS0gIyMiCisgICAgICBlY2hvCisgICAgICBjYXQgY29uZmRlZnMuaAorICAgICAgZWNobworICAgIGZpCisgICAgdGVzdCAiJGFjX3NpZ25hbCIgIT0gMCAmJgorICAgICAgJGFzX2VjaG8gIiRhc19tZTogY2F1Z2h0IHNpZ25hbCAkYWNfc2lnbmFsIgorICAgICRhc19lY2hvICIkYXNfbWU6IGV4aXQgJGV4aXRfc3RhdHVzIgorICB9ID4mNQorICBybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogJiYKKyAgICBybSAtZiAtciBjb25mdGVzdCogY29uZmRlZnMqIGNvbmYkJCogJGFjX2NsZWFuX2ZpbGVzICYmCisgICAgZXhpdCAkZXhpdF9zdGF0dXMKKycgMAorZm9yIGFjX3NpZ25hbCBpbiAxIDIgMTMgMTU7IGRvCisgIHRyYXAgJ2FjX3NpZ25hbD0nJGFjX3NpZ25hbCc7IGFzX2ZuX2V4aXQgMScgJGFjX3NpZ25hbAorZG9uZQorYWNfc2lnbmFsPTAKKworIyBjb25mZGVmcy5oIGF2b2lkcyBPUyBjb21tYW5kIGxpbmUgbGVuZ3RoIGxpbWl0cyB0aGF0IERFRlMgY2FuIGV4Y2VlZC4KK3JtIC1mIC1yIGNvbmZ0ZXN0KiBjb25mZGVmcy5oCisKKyRhc19lY2hvICIvKiBjb25mZGVmcy5oICovIiA+IGNvbmZkZWZzLmgKKworIyBQcmVkZWZpbmVkIHByZXByb2Nlc3NvciB2YXJpYWJsZXMuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUEFDS0FHRV9OQU1FICIkUEFDS0FHRV9OQU1FIgorX0FDRU9GCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUEFDS0FHRV9UQVJOQU1FICIkUEFDS0FHRV9UQVJOQU1FIgorX0FDRU9GCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUEFDS0FHRV9WRVJTSU9OICIkUEFDS0FHRV9WRVJTSU9OIgorX0FDRU9GCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUEFDS0FHRV9TVFJJTkcgIiRQQUNLQUdFX1NUUklORyIKK19BQ0VPRgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFBBQ0tBR0VfQlVHUkVQT1JUICIkUEFDS0FHRV9CVUdSRVBPUlQiCitfQUNFT0YKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBQQUNLQUdFX1VSTCAiJFBBQ0tBR0VfVVJMIgorX0FDRU9GCisKKworIyBMZXQgdGhlIHNpdGUgZmlsZSBzZWxlY3QgYW4gYWx0ZXJuYXRlIGNhY2hlIGZpbGUgaWYgaXQgd2FudHMgdG8uCisjIFByZWZlciBhbiBleHBsaWNpdGx5IHNlbGVjdGVkIGZpbGUgdG8gYXV0b21hdGljYWxseSBzZWxlY3RlZCBvbmVzLgorYWNfc2l0ZV9maWxlMT1OT05FCithY19zaXRlX2ZpbGUyPU5PTkUKK2lmIHRlc3QgLW4gIiRDT05GSUdfU0lURSI7IHRoZW4KKyAgIyBXZSBkbyBub3Qgd2FudCBhIFBBVEggc2VhcmNoIGZvciBjb25maWcuc2l0ZS4KKyAgY2FzZSAkQ09ORklHX1NJVEUgaW4gIygoCisgICAgLSopICBhY19zaXRlX2ZpbGUxPS4vJENPTkZJR19TSVRFOzsKKyAgICAqLyopIGFjX3NpdGVfZmlsZTE9JENPTkZJR19TSVRFOzsKKyAgICAqKSAgIGFjX3NpdGVfZmlsZTE9Li8kQ09ORklHX1NJVEU7OworICBlc2FjCitlbGlmIHRlc3QgIngkcHJlZml4IiAhPSB4Tk9ORTsgdGhlbgorICBhY19zaXRlX2ZpbGUxPSRwcmVmaXgvc2hhcmUvY29uZmlnLnNpdGUKKyAgYWNfc2l0ZV9maWxlMj0kcHJlZml4L2V0Yy9jb25maWcuc2l0ZQorZWxzZQorICBhY19zaXRlX2ZpbGUxPSRhY19kZWZhdWx0X3ByZWZpeC9zaGFyZS9jb25maWcuc2l0ZQorICBhY19zaXRlX2ZpbGUyPSRhY19kZWZhdWx0X3ByZWZpeC9ldGMvY29uZmlnLnNpdGUKK2ZpCitmb3IgYWNfc2l0ZV9maWxlIGluICIkYWNfc2l0ZV9maWxlMSIgIiRhY19zaXRlX2ZpbGUyIgorZG8KKyAgdGVzdCAieCRhY19zaXRlX2ZpbGUiID0geE5PTkUgJiYgY29udGludWUKKyAgaWYgdGVzdCAvZGV2L251bGwgIT0gIiRhY19zaXRlX2ZpbGUiICYmIHRlc3QgLXIgIiRhY19zaXRlX2ZpbGUiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBsb2FkaW5nIHNpdGUgc2NyaXB0ICRhY19zaXRlX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogbG9hZGluZyBzaXRlIHNjcmlwdCAkYWNfc2l0ZV9maWxlIiA+JjY7fQorICAgIHNlZCAncy9eL3wgLycgIiRhY19zaXRlX2ZpbGUiID4mNQorICAgIC4gIiRhY19zaXRlX2ZpbGUiIFwKKyAgICAgIHx8IHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgJD8gImZhaWxlZCB0byBsb2FkIHNpdGUgc2NyaXB0ICRhY19zaXRlX2ZpbGUKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CisgIGZpCitkb25lCisKK2lmIHRlc3QgLXIgIiRjYWNoZV9maWxlIjsgdGhlbgorICAjIFNvbWUgdmVyc2lvbnMgb2YgYmFzaCB3aWxsIGZhaWwgdG8gc291cmNlIC9kZXYvbnVsbCAoc3BlY2lhbCBmaWxlcworICAjIGFjdHVhbGx5KSwgc28gd2UgYXZvaWQgZG9pbmcgdGhhdC4gIERKR1BQIGVtdWxhdGVzIGl0IGFzIGEgcmVndWxhciBmaWxlLgorICBpZiB0ZXN0IC9kZXYvbnVsbCAhPSAiJGNhY2hlX2ZpbGUiICYmIHRlc3QgLWYgIiRjYWNoZV9maWxlIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogbG9hZGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBsb2FkaW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQorICAgIGNhc2UgJGNhY2hlX2ZpbGUgaW4KKyAgICAgIFtcXC9dKiB8ID86W1xcL10qICkgLiAiJGNhY2hlX2ZpbGUiOzsKKyAgICAgICopICAgICAgICAgICAgICAgICAgICAgIC4gIi4vJGNhY2hlX2ZpbGUiOzsKKyAgICBlc2FjCisgIGZpCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY3JlYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogY3JlYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CisgID4kY2FjaGVfZmlsZQorZmkKKworIyBDaGVjayB0aGF0IHRoZSBwcmVjaW91cyB2YXJpYWJsZXMgc2F2ZWQgaW4gdGhlIGNhY2hlIGhhdmUga2VwdCB0aGUgc2FtZQorIyB2YWx1ZS4KK2FjX2NhY2hlX2NvcnJ1cHRlZD1mYWxzZQorZm9yIGFjX3ZhciBpbiAkYWNfcHJlY2lvdXNfdmFyczsgZG8KKyAgZXZhbCBhY19vbGRfc2V0PVwkYWNfY3ZfZW52XyR7YWNfdmFyfV9zZXQKKyAgZXZhbCBhY19uZXdfc2V0PVwkYWNfZW52XyR7YWNfdmFyfV9zZXQKKyAgZXZhbCBhY19vbGRfdmFsPVwkYWNfY3ZfZW52XyR7YWNfdmFyfV92YWx1ZQorICBldmFsIGFjX25ld192YWw9XCRhY19lbnZfJHthY192YXJ9X3ZhbHVlCisgIGNhc2UgJGFjX29sZF9zZXQsJGFjX25ld19zZXQgaW4KKyAgICBzZXQsKQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgc2V0IHRvIFxgJGFjX29sZF92YWwnIGluIHRoZSBwcmV2aW91cyBydW4iID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIHNldCB0byBcYCRhY19vbGRfdmFsJyBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjI7fQorICAgICAgYWNfY2FjaGVfY29ycnVwdGVkPTogOzsKKyAgICAsc2V0KQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgbm90IHNldCBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBcYCRhY192YXInIHdhcyBub3Qgc2V0IGluIHRoZSBwcmV2aW91cyBydW4iID4mMjt9CisgICAgICBhY19jYWNoZV9jb3JydXB0ZWQ9OiA7OworICAgICwpOzsKKyAgICAqKQorICAgICAgaWYgdGVzdCAieCRhY19vbGRfdmFsIiAhPSAieCRhY19uZXdfdmFsIjsgdGhlbgorCSMgZGlmZmVyZW5jZXMgaW4gd2hpdGVzcGFjZSBkbyBub3QgbGVhZCB0byBmYWlsdXJlLgorCWFjX29sZF92YWxfdz1gZWNobyB4ICRhY19vbGRfdmFsYAorCWFjX25ld192YWxfdz1gZWNobyB4ICRhY19uZXdfdmFsYAorCWlmIHRlc3QgIiRhY19vbGRfdmFsX3ciICE9ICIkYWNfbmV3X3ZhbF93IjsgdGhlbgorCSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogXGAkYWNfdmFyJyBoYXMgY2hhbmdlZCBzaW5jZSB0aGUgcHJldmlvdXMgcnVuOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogXGAkYWNfdmFyJyBoYXMgY2hhbmdlZCBzaW5jZSB0aGUgcHJldmlvdXMgcnVuOiIgPiYyO30KKwkgIGFjX2NhY2hlX2NvcnJ1cHRlZD06CisJZWxzZQorCSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiB3YXJuaW5nOiBpZ25vcmluZyB3aGl0ZXNwYWNlIGNoYW5nZXMgaW4gXGAkYWNfdmFyJyBzaW5jZSB0aGUgcHJldmlvdXMgcnVuOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiB3YXJuaW5nOiBpZ25vcmluZyB3aGl0ZXNwYWNlIGNoYW5nZXMgaW4gXGAkYWNfdmFyJyBzaW5jZSB0aGUgcHJldmlvdXMgcnVuOiIgPiYyO30KKwkgIGV2YWwgJGFjX3Zhcj1cJGFjX29sZF92YWwKKwlmaQorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogICBmb3JtZXIgdmFsdWU6ICBcYCRhY19vbGRfdmFsJyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiAgIGZvcm1lciB2YWx1ZTogIFxgJGFjX29sZF92YWwnIiA+JjI7fQorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogICBjdXJyZW50IHZhbHVlOiBcYCRhY19uZXdfdmFsJyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiAgIGN1cnJlbnQgdmFsdWU6IFxgJGFjX25ld192YWwnIiA+JjI7fQorICAgICAgZmk7OworICBlc2FjCisgICMgUGFzcyBwcmVjaW91cyB2YXJpYWJsZXMgdG8gY29uZmlnLnN0YXR1cy4KKyAgaWYgdGVzdCAiJGFjX25ld19zZXQiID0gc2V0OyB0aGVuCisgICAgY2FzZSAkYWNfbmV3X3ZhbCBpbgorICAgICpcJyopIGFjX2FyZz0kYWNfdmFyPWAkYXNfZWNobyAiJGFjX25ld192YWwiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgIDs7CisgICAgKikgYWNfYXJnPSRhY192YXI9JGFjX25ld192YWwgOzsKKyAgICBlc2FjCisgICAgY2FzZSAiICRhY19jb25maWd1cmVfYXJncyAiIGluCisgICAgICAqIiAnJGFjX2FyZycgIiopIDs7ICMgQXZvaWQgZHVwcy4gIFVzZSBvZiBxdW90ZXMgZW5zdXJlcyBhY2N1cmFjeS4KKyAgICAgICopIGFzX2ZuX2FwcGVuZCBhY19jb25maWd1cmVfYXJncyAiICckYWNfYXJnJyIgOzsKKyAgICBlc2FjCisgIGZpCitkb25lCitpZiAkYWNfY2FjaGVfY29ycnVwdGVkOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogY2hhbmdlcyBpbiB0aGUgZW52aXJvbm1lbnQgY2FuIGNvbXByb21pc2UgdGhlIGJ1aWxkIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjaGFuZ2VzIGluIHRoZSBlbnZpcm9ubWVudCBjYW4gY29tcHJvbWlzZSB0aGUgYnVpbGQiID4mMjt9CisgIGFzX2ZuX2Vycm9yICQ/ICJydW4gXGBtYWtlIGRpc3RjbGVhbicgYW5kL29yIFxgcm0gJGNhY2hlX2ZpbGUnIGFuZCBzdGFydCBvdmVyIiAiJExJTkVOTyIgNQorZmkKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBNYWluIGJvZHkgb2Ygc2NyaXB0LiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCisKKworCithY19jb25maWdfaGVhZGVycz0iJGFjX2NvbmZpZ19oZWFkZXJzIGNvbmZpZy5oIgorCithbV9fYXBpX3ZlcnNpb249JzEuMTEnCisKK2FjX2F1eF9kaXI9Citmb3IgYWNfZGlyIGluICIkc3JjZGlyIiAiJHNyY2Rpci8uLiIgIiRzcmNkaXIvLi4vLi4iOyBkbworICBpZiB0ZXN0IC1mICIkYWNfZGlyL2luc3RhbGwtc2giOyB0aGVuCisgICAgYWNfYXV4X2Rpcj0kYWNfZGlyCisgICAgYWNfaW5zdGFsbF9zaD0iJGFjX2F1eF9kaXIvaW5zdGFsbC1zaCAtYyIKKyAgICBicmVhaworICBlbGlmIHRlc3QgLWYgIiRhY19kaXIvaW5zdGFsbC5zaCI7IHRoZW4KKyAgICBhY19hdXhfZGlyPSRhY19kaXIKKyAgICBhY19pbnN0YWxsX3NoPSIkYWNfYXV4X2Rpci9pbnN0YWxsLnNoIC1jIgorICAgIGJyZWFrCisgIGVsaWYgdGVzdCAtZiAiJGFjX2Rpci9zaHRvb2wiOyB0aGVuCisgICAgYWNfYXV4X2Rpcj0kYWNfZGlyCisgICAgYWNfaW5zdGFsbF9zaD0iJGFjX2F1eF9kaXIvc2h0b29sIGluc3RhbGwgLWMiCisgICAgYnJlYWsKKyAgZmkKK2RvbmUKK2lmIHRlc3QgLXogIiRhY19hdXhfZGlyIjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY2Fubm90IGZpbmQgaW5zdGFsbC1zaCwgaW5zdGFsbC5zaCwgb3Igc2h0b29sIGluIFwiJHNyY2RpclwiIFwiJHNyY2Rpci8uLlwiIFwiJHNyY2Rpci8uLi8uLlwiIiAiJExJTkVOTyIgNQorZmkKKworIyBUaGVzZSB0aHJlZSB2YXJpYWJsZXMgYXJlIHVuZG9jdW1lbnRlZCBhbmQgdW5zdXBwb3J0ZWQsCisjIGFuZCBhcmUgaW50ZW5kZWQgdG8gYmUgd2l0aGRyYXduIGluIGEgZnV0dXJlIEF1dG9jb25mIHJlbGVhc2UuCisjIFRoZXkgY2FuIGNhdXNlIHNlcmlvdXMgcHJvYmxlbXMgaWYgYSBidWlsZGVyJ3Mgc291cmNlIHRyZWUgaXMgaW4gYSBkaXJlY3RvcnkKKyMgd2hvc2UgZnVsbCBuYW1lIGNvbnRhaW5zIHVudXN1YWwgY2hhcmFjdGVycy4KK2FjX2NvbmZpZ19ndWVzcz0iJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5ndWVzcyIgICMgUGxlYXNlIGRvbid0IHVzZSB0aGlzIHZhci4KK2FjX2NvbmZpZ19zdWI9IiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViIiAgIyBQbGVhc2UgZG9uJ3QgdXNlIHRoaXMgdmFyLgorYWNfY29uZmlndXJlPSIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlndXJlIiAgIyBQbGVhc2UgZG9uJ3QgdXNlIHRoaXMgdmFyLgorCisKKyMgRmluZCBhIGdvb2QgaW5zdGFsbCBwcm9ncmFtLiAgV2UgcHJlZmVyIGEgQyBwcm9ncmFtIChmYXN0ZXIpLAorIyBzbyBvbmUgc2NyaXB0IGlzIGFzIGdvb2QgYXMgYW5vdGhlci4gIEJ1dCBhdm9pZCB0aGUgYnJva2VuIG9yCisjIGluY29tcGF0aWJsZSB2ZXJzaW9uczoKKyMgU3lzViAvZXRjL2luc3RhbGwsIC91c3Ivc2Jpbi9pbnN0YWxsCisjIFN1bk9TIC91c3IvZXRjL2luc3RhbGwKKyMgSVJJWCAvc2Jpbi9pbnN0YWxsCisjIEFJWCAvYmluL2luc3RhbGwKKyMgQW1pZ2FPUyAvQy9pbnN0YWxsLCB3aGljaCBpbnN0YWxscyBib290YmxvY2tzIG9uIGZsb3BweSBkaXNjcworIyBBSVggNCAvdXNyL2Jpbi9pbnN0YWxsYnNkLCB3aGljaCBkb2Vzbid0IHdvcmsgd2l0aG91dCBhIC1nIGZsYWcKKyMgQUZTIC91c3IvYWZzd3MvYmluL2luc3RhbGwsIHdoaWNoIG1pc2hhbmRsZXMgbm9uZXhpc3RlbnQgYXJncworIyBTVlI0IC91c3IvdWNiL2luc3RhbGwsIHdoaWNoIHRyaWVzIHRvIHVzZSB0aGUgbm9uZXhpc3RlbnQgZ3JvdXAgInN0YWZmIgorIyBPUy8yJ3Mgc3lzdGVtIGluc3RhbGwsIHdoaWNoIGhhcyBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IHNlbWFudGljCisjIC4vaW5zdGFsbCwgd2hpY2ggY2FuIGJlIGVycm9uZW91c2x5IGNyZWF0ZWQgYnkgbWFrZSBmcm9tIC4vaW5zdGFsbC5zaC4KKyMgUmVqZWN0IGluc3RhbGwgcHJvZ3JhbXMgdGhhdCBjYW5ub3QgaW5zdGFsbCBtdWx0aXBsZSBmaWxlcy4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGEgQlNELWNvbXBhdGlibGUgaW5zdGFsbCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgYSBCU0QtY29tcGF0aWJsZSBpbnN0YWxsLi4uICIgPiY2OyB9CitpZiB0ZXN0IC16ICIkSU5TVEFMTCI7IHRoZW4KK2lmICR7YWNfY3ZfcGF0aF9pbnN0YWxsKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgICMgQWNjb3VudCBmb3IgcGVvcGxlIHdobyBwdXQgdHJhaWxpbmcgc2xhc2hlcyBpbiBQQVRIIGVsZW1lbnRzLgorY2FzZSAkYXNfZGlyLyBpbiAjKCgKKyAgLi8gfCAuLy8gfCAvW2NDXS8qIHwgXAorICAvZXRjLyogfCAvdXNyL3NiaW4vKiB8IC91c3IvZXRjLyogfCAvc2Jpbi8qIHwgL3Vzci9hZnN3cy9iaW4vKiB8IFwKKyAgPzpbXFwvXW9zMltcXC9daW5zdGFsbFtcXC9dKiB8ID86W1xcL11PUzJbXFwvXUlOU1RBTExbXFwvXSogfCBcCisgIC91c3IvdWNiLyogKSA7OworICAqKQorICAgICMgT1NGMSBhbmQgU0NPIE9EVCAzLjAgaGF2ZSB0aGVpciBvd24gbmFtZXMgZm9yIGluc3RhbGwuCisgICAgIyBEb24ndCB1c2UgaW5zdGFsbGJzZCBmcm9tIE9TRiBzaW5jZSBpdCBpbnN0YWxscyBzdHVmZiBhcyByb290CisgICAgIyBieSBkZWZhdWx0LgorICAgIGZvciBhY19wcm9nIGluIGdpbnN0YWxsIHNjb2luc3QgaW5zdGFsbDsgZG8KKyAgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworCWlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCI7IH07IHRoZW4KKwkgIGlmIHRlc3QgJGFjX3Byb2cgPSBpbnN0YWxsICYmCisJICAgIGdyZXAgZHNwbXNnICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkgICAgIyBBSVggaW5zdGFsbC4gIEl0IGhhcyBhbiBpbmNvbXBhdGlibGUgY2FsbGluZyBjb252ZW50aW9uLgorCSAgICA6CisJICBlbGlmIHRlc3QgJGFjX3Byb2cgPSBpbnN0YWxsICYmCisJICAgIGdyZXAgcHdwbHVzICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkgICAgIyBwcm9ncmFtLXNwZWNpZmljIGluc3RhbGwgc2NyaXB0IHVzZWQgYnkgSFAgcHdwbHVzLS1kb24ndCB1c2UuCisJICAgIDoKKwkgIGVsc2UKKwkgICAgcm0gLXJmIGNvbmZ0ZXN0Lm9uZSBjb25mdGVzdC50d28gY29uZnRlc3QuZGlyCisJICAgIGVjaG8gb25lID4gY29uZnRlc3Qub25lCisJICAgIGVjaG8gdHdvID4gY29uZnRlc3QudHdvCisJICAgIG1rZGlyIGNvbmZ0ZXN0LmRpcgorCSAgICBpZiAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgLWMgY29uZnRlc3Qub25lIGNvbmZ0ZXN0LnR3byAiYHB3ZGAvY29uZnRlc3QuZGlyIiAmJgorCSAgICAgIHRlc3QgLXMgY29uZnRlc3Qub25lICYmIHRlc3QgLXMgY29uZnRlc3QudHdvICYmCisJICAgICAgdGVzdCAtcyBjb25mdGVzdC5kaXIvY29uZnRlc3Qub25lICYmCisJICAgICAgdGVzdCAtcyBjb25mdGVzdC5kaXIvY29uZnRlc3QudHdvCisJICAgIHRoZW4KKwkgICAgICBhY19jdl9wYXRoX2luc3RhbGw9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQgLWMiCisJICAgICAgYnJlYWsgMworCSAgICBmaQorCSAgZmkKKwlmaQorICAgICAgZG9uZQorICAgIGRvbmUKKyAgICA7OworZXNhYworCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworcm0gLXJmIGNvbmZ0ZXN0Lm9uZSBjb25mdGVzdC50d28gY29uZnRlc3QuZGlyCisKK2ZpCisgIGlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9pbnN0YWxsK3NldH0iID0gc2V0OyB0aGVuCisgICAgSU5TVEFMTD0kYWNfY3ZfcGF0aF9pbnN0YWxsCisgIGVsc2UKKyAgICAjIEFzIGEgbGFzdCByZXNvcnQsIHVzZSB0aGUgc2xvdyBzaGVsbCBzY3JpcHQuICBEb24ndCBjYWNoZSBhCisgICAgIyB2YWx1ZSBmb3IgSU5TVEFMTCB3aXRoaW4gYSBzb3VyY2UgZGlyZWN0b3J5LCBiZWNhdXNlIHRoYXQgd2lsbAorICAgICMgYnJlYWsgb3RoZXIgcGFja2FnZXMgdXNpbmcgdGhlIGNhY2hlIGlmIHRoYXQgZGlyZWN0b3J5IGlzCisgICAgIyByZW1vdmVkLCBvciBpZiB0aGUgdmFsdWUgaXMgYSByZWxhdGl2ZSBuYW1lLgorICAgIElOU1RBTEw9JGFjX2luc3RhbGxfc2gKKyAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJElOU1RBTEwiID4mNQorJGFzX2VjaG8gIiRJTlNUQUxMIiA+JjY7IH0KKworIyBVc2UgdGVzdCAteiBiZWNhdXNlIFN1bk9TNCBzaCBtaXNoYW5kbGVzIGJyYWNlcyBpbiAke3Zhci12YWx9LgorIyBJdCB0aGlua3MgdGhlIGZpcnN0IGNsb3NlIGJyYWNlIGVuZHMgdGhlIHZhcmlhYmxlIHN1YnN0aXR1dGlvbi4KK3Rlc3QgLXogIiRJTlNUQUxMX1BST0dSQU0iICYmIElOU1RBTExfUFJPR1JBTT0nJHtJTlNUQUxMfScKKwordGVzdCAteiAiJElOU1RBTExfU0NSSVBUIiAmJiBJTlNUQUxMX1NDUklQVD0nJHtJTlNUQUxMfScKKwordGVzdCAteiAiJElOU1RBTExfREFUQSIgJiYgSU5TVEFMTF9EQVRBPScke0lOU1RBTEx9IC1tIDY0NCcKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGJ1aWxkIGVudmlyb25tZW50IGlzIHNhbmUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBidWlsZCBlbnZpcm9ubWVudCBpcyBzYW5lLi4uICIgPiY2OyB9CisjIEp1c3QgaW4gY2FzZQorc2xlZXAgMQorZWNobyB0aW1lc3RhbXAgPiBjb25mdGVzdC5maWxlCisjIFJlamVjdCB1bnNhZmUgY2hhcmFjdGVycyBpbiAkc3JjZGlyIG9yIHRoZSBhYnNvbHV0ZSB3b3JraW5nIGRpcmVjdG9yeQorIyBuYW1lLiAgQWNjZXB0IHNwYWNlIGFuZCB0YWIgb25seSBpbiB0aGUgbGF0dGVyLgorYW1fbGY9JworJworY2FzZSBgcHdkYCBpbgorICAqW1xcXCJcI1wkXCZcJ1xgJGFtX2xmXSopCisgICAgYXNfZm5fZXJyb3IgJD8gInVuc2FmZSBhYnNvbHV0ZSB3b3JraW5nIGRpcmVjdG9yeSBuYW1lIiAiJExJTkVOTyIgNTs7Citlc2FjCitjYXNlICRzcmNkaXIgaW4KKyAgKltcXFwiXCNcJFwmXCdcYCRhbV9sZlwgXAldKikKKyAgICBhc19mbl9lcnJvciAkPyAidW5zYWZlIHNyY2RpciB2YWx1ZTogXGAkc3JjZGlyJyIgIiRMSU5FTk8iIDU7OworZXNhYworCisjIERvIGBzZXQnIGluIGEgc3Vic2hlbGwgc28gd2UgZG9uJ3QgY2xvYmJlciB0aGUgY3VycmVudCBzaGVsbCdzCisjIGFyZ3VtZW50cy4gIE11c3QgdHJ5IC1MIGZpcnN0IGluIGNhc2UgY29uZmlndXJlIGlzIGFjdHVhbGx5IGEKKyMgc3ltbGluazsgc29tZSBzeXN0ZW1zIHBsYXkgd2VpcmQgZ2FtZXMgd2l0aCB0aGUgbW9kIHRpbWUgb2Ygc3ltbGlua3MKKyMgKGVnIEZyZWVCU0QgcmV0dXJucyB0aGUgbW9kIHRpbWUgb2YgdGhlIHN5bWxpbmsncyBjb250YWluaW5nCisjIGRpcmVjdG9yeSkuCitpZiAoCisgICBzZXQgWCBgbHMgLUx0ICIkc3JjZGlyL2NvbmZpZ3VyZSIgY29uZnRlc3QuZmlsZSAyPiAvZGV2L251bGxgCisgICBpZiB0ZXN0ICIkKiIgPSAiWCI7IHRoZW4KKyAgICAgICMgLUwgZGlkbid0IHdvcmsuCisgICAgICBzZXQgWCBgbHMgLXQgIiRzcmNkaXIvY29uZmlndXJlIiBjb25mdGVzdC5maWxlYAorICAgZmkKKyAgIHJtIC1mIGNvbmZ0ZXN0LmZpbGUKKyAgIGlmIHRlc3QgIiQqIiAhPSAiWCAkc3JjZGlyL2NvbmZpZ3VyZSBjb25mdGVzdC5maWxlIiBcCisgICAgICAmJiB0ZXN0ICIkKiIgIT0gIlggY29uZnRlc3QuZmlsZSAkc3JjZGlyL2NvbmZpZ3VyZSI7IHRoZW4KKworICAgICAgIyBJZiBuZWl0aGVyIG1hdGNoZWQsIHRoZW4gd2UgaGF2ZSBhIGJyb2tlbiBscy4gIFRoaXMgY2FuIGhhcHBlbgorICAgICAgIyBpZiwgZm9yIGluc3RhbmNlLCBDT05GSUdfU0hFTEwgaXMgYmFzaCBhbmQgaXQgaW5oZXJpdHMgYQorICAgICAgIyBicm9rZW4gbHMgYWxpYXMgZnJvbSB0aGUgZW52aXJvbm1lbnQuICBUaGlzIGhhcyBhY3R1YWxseQorICAgICAgIyBoYXBwZW5lZC4gIFN1Y2ggYSBzeXN0ZW0gY291bGQgbm90IGJlIGNvbnNpZGVyZWQgInNhbmUiLgorICAgICAgYXNfZm5fZXJyb3IgJD8gImxzIC10IGFwcGVhcnMgdG8gZmFpbC4gIE1ha2Ugc3VyZSB0aGVyZSBpcyBub3QgYSBicm9rZW4KK2FsaWFzIGluIHlvdXIgZW52aXJvbm1lbnQiICIkTElORU5PIiA1CisgICBmaQorCisgICB0ZXN0ICIkMiIgPSBjb25mdGVzdC5maWxlCisgICApCit0aGVuCisgICAjIE9rLgorICAgOgorZWxzZQorICAgYXNfZm5fZXJyb3IgJD8gIm5ld2x5IGNyZWF0ZWQgZmlsZSBpcyBvbGRlciB0aGFuIGRpc3RyaWJ1dGVkIGZpbGVzIQorQ2hlY2sgeW91ciBzeXN0ZW0gY2xvY2siICIkTElORU5PIiA1CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KK3Rlc3QgIiRwcm9ncmFtX3ByZWZpeCIgIT0gTk9ORSAmJgorICBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPSJzJl4mJHByb2dyYW1fcHJlZml4JjskcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSIKKyMgVXNlIGEgZG91YmxlICQgc28gbWFrZSBpZ25vcmVzIGl0LgordGVzdCAiJHByb2dyYW1fc3VmZml4IiAhPSBOT05FICYmCisgIHByb2dyYW1fdHJhbnNmb3JtX25hbWU9InMmXCQmJHByb2dyYW1fc3VmZml4JjskcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSIKKyMgRG91YmxlIGFueSBcIG9yICQuCisjIEJ5IGRlZmF1bHQgd2FzIGBzLHgseCcsIHJlbW92ZSBpdCBpZiB1c2VsZXNzLgorYWNfc2NyaXB0PSdzL1tcXCRdLyYmL2c7cy87cyx4LHgsJC8vJworcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT1gJGFzX2VjaG8gIiRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIiB8IHNlZCAiJGFjX3NjcmlwdCJgCisKKyMgZXhwYW5kICRhY19hdXhfZGlyIHRvIGFuIGFic29sdXRlIHBhdGgKK2FtX2F1eF9kaXI9YGNkICRhY19hdXhfZGlyICYmIHB3ZGAKKworaWYgdGVzdCB4IiR7TUlTU0lORytzZXR9IiAhPSB4c2V0OyB0aGVuCisgIGNhc2UgJGFtX2F1eF9kaXIgaW4KKyAgKlwgKiB8ICpcCSopCisgICAgTUlTU0lORz0iXCR7U0hFTEx9IFwiJGFtX2F1eF9kaXIvbWlzc2luZ1wiIiA7OworICAqKQorICAgIE1JU1NJTkc9Ilwke1NIRUxMfSAkYW1fYXV4X2Rpci9taXNzaW5nIiA7OworICBlc2FjCitmaQorIyBVc2UgZXZhbCB0byBleHBhbmQgJFNIRUxMCitpZiBldmFsICIkTUlTU0lORyAtLXJ1biB0cnVlIjsgdGhlbgorICBhbV9taXNzaW5nX3J1bj0iJE1JU1NJTkcgLS1ydW4gIgorZWxzZQorICBhbV9taXNzaW5nX3J1bj0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBcYG1pc3NpbmcnIHNjcmlwdCBpcyB0b28gb2xkIG9yIG1pc3NpbmciID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogXGBtaXNzaW5nJyBzY3JpcHQgaXMgdG9vIG9sZCBvciBtaXNzaW5nIiA+JjI7fQorZmkKKworaWYgdGVzdCB4IiR7aW5zdGFsbF9zaH0iICE9IHhzZXQ7IHRoZW4KKyAgY2FzZSAkYW1fYXV4X2RpciBpbgorICAqXCAqIHwgKlwJKikKKyAgICBpbnN0YWxsX3NoPSJcJHtTSEVMTH0gJyRhbV9hdXhfZGlyL2luc3RhbGwtc2gnIiA7OworICAqKQorICAgIGluc3RhbGxfc2g9Ilwke1NIRUxMfSAkYW1fYXV4X2Rpci9pbnN0YWxsLXNoIgorICBlc2FjCitmaQorCisjIEluc3RhbGxlZCBiaW5hcmllcyBhcmUgdXN1YWxseSBzdHJpcHBlZCB1c2luZyBgc3RyaXAnIHdoZW4gdGhlIHVzZXIKKyMgcnVuIGBtYWtlIGluc3RhbGwtc3RyaXAnLiAgSG93ZXZlciBgc3RyaXAnIG1pZ2h0IG5vdCBiZSB0aGUgcmlnaHQKKyMgdG9vbCB0byB1c2UgaW4gY3Jvc3MtY29tcGlsYXRpb24gZW52aXJvbm1lbnRzLCB0aGVyZWZvcmUgQXV0b21ha2UKKyMgd2lsbCBob25vciB0aGUgYFNUUklQJyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBvdmVycnVsZSB0aGlzIHByb2dyYW0uCitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiAhPSBubzsgdGhlbgorICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1zdHJpcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1zdHJpcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfU1RSSVArOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCisgIGFjX2N2X3Byb2dfU1RSSVA9IiRTVFJJUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX1NUUklQPSIke2FjX3Rvb2xfcHJlZml4fXN0cmlwIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK1NUUklQPSRhY19jdl9wcm9nX1NUUklQCitpZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkU1RSSVAiID4mNQorJGFzX2VjaG8gIiRTVFJJUCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfU1RSSVAiOyB0aGVuCisgIGFjX2N0X1NUUklQPSRTVFJJUAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInN0cmlwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBzdHJpcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfU1RSSVArOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfU1RSSVAiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfU1RSSVA9IiRhY19jdF9TVFJJUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X1NUUklQPSJzdHJpcCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9TVFJJUD0kYWNfY3ZfcHJvZ19hY19jdF9TVFJJUAoraWYgdGVzdCAtbiAiJGFjX2N0X1NUUklQIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X1NUUklQIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfU1RSSVAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9TVFJJUCIgPSB4OyB0aGVuCisgICAgU1RSSVA9IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgU1RSSVA9JGFjX2N0X1NUUklQCisgIGZpCitlbHNlCisgIFNUUklQPSIkYWNfY3ZfcHJvZ19TVFJJUCIKK2ZpCisKK2ZpCitJTlNUQUxMX1NUUklQX1BST0dSQU09IlwkKGluc3RhbGxfc2gpIC1jIC1zIgorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhIHRocmVhZC1zYWZlIG1rZGlyIC1wIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhIHRocmVhZC1zYWZlIG1rZGlyIC1wLi4uICIgPiY2OyB9CitpZiB0ZXN0IC16ICIkTUtESVJfUCI7IHRoZW4KKyAgaWYgJHthY19jdl9wYXRoX21rZGlyKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi9vcHQvc2Z3L2JpbgorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19wcm9nIGluIG1rZGlyIGdta2RpcjsgZG8KKwkgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisJICAgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IjsgfSB8fCBjb250aW51ZQorCSAgIGNhc2UgYCIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiAtLXZlcnNpb24gMj4mMWAgaW4gIygKKwkgICAgICdta2RpciAoR05VIGNvcmV1dGlscykgJyogfCBcCisJICAgICAnbWtkaXIgKGNvcmV1dGlscykgJyogfCBcCisJICAgICAnbWtkaXIgKGZpbGV1dGlscykgJzQuMSopCisJICAgICAgIGFjX2N2X3BhdGhfbWtkaXI9JGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dAorCSAgICAgICBicmVhayAzOzsKKwkgICBlc2FjCisJIGRvbmUKKyAgICAgICBkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKKworICB0ZXN0IC1kIC4vLS12ZXJzaW9uICYmIHJtZGlyIC4vLS12ZXJzaW9uCisgIGlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9ta2RpcitzZXR9IiA9IHNldDsgdGhlbgorICAgIE1LRElSX1A9IiRhY19jdl9wYXRoX21rZGlyIC1wIgorICBlbHNlCisgICAgIyBBcyBhIGxhc3QgcmVzb3J0LCB1c2UgdGhlIHNsb3cgc2hlbGwgc2NyaXB0LiAgRG9uJ3QgY2FjaGUgYQorICAgICMgdmFsdWUgZm9yIE1LRElSX1Agd2l0aGluIGEgc291cmNlIGRpcmVjdG9yeSwgYmVjYXVzZSB0aGF0IHdpbGwKKyAgICAjIGJyZWFrIG90aGVyIHBhY2thZ2VzIHVzaW5nIHRoZSBjYWNoZSBpZiB0aGF0IGRpcmVjdG9yeSBpcworICAgICMgcmVtb3ZlZCwgb3IgaWYgdGhlIHZhbHVlIGlzIGEgcmVsYXRpdmUgbmFtZS4KKyAgICBNS0RJUl9QPSIkYWNfaW5zdGFsbF9zaCAtZCIKKyAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1LRElSX1AiID4mNQorJGFzX2VjaG8gIiRNS0RJUl9QIiA+JjY7IH0KKworbWtkaXJfcD0iJE1LRElSX1AiCitjYXNlICRta2Rpcl9wIGluCisgIFtcXC8kXSogfCA/OltcXC9dKikgOzsKKyAgKi8qKSBta2Rpcl9wPSJcJCh0b3BfYnVpbGRkaXIpLyRta2Rpcl9wIiA7OworZXNhYworCitmb3IgYWNfcHJvZyBpbiBnYXdrIG1hd2sgbmF3ayBhd2sKK2RvCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19BV0srOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQVdLIjsgdGhlbgorICBhY19jdl9wcm9nX0FXSz0iJEFXSyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX0FXSz0iJGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorQVdLPSRhY19jdl9wcm9nX0FXSworaWYgdGVzdCAtbiAiJEFXSyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRBV0siID4mNQorJGFzX2VjaG8gIiRBV0siID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICB0ZXN0IC1uICIkQVdLIiAmJiBicmVhaworZG9uZQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJHtNQUtFLW1ha2V9IHNldHMgXCQoTUFLRSkiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAke01BS0UtbWFrZX0gc2V0cyBcJChNQUtFKS4uLiAiID4mNjsgfQorc2V0IHggJHtNQUtFLW1ha2V9CithY19tYWtlPWAkYXNfZWNobyAiJDIiIHwgc2VkICdzLysvcC9nOyBzL1teYS16QS1aMC05X10vXy9nJ2AKK2lmIGV2YWwgXCR7YWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC5tYWtlIDw8XF9BQ0VPRgorU0hFTEwgPSAvYmluL3NoCithbGw6CisJQGVjaG8gJ0BAQCUlJT0kKE1BS0UpPUBAQCUlJScKK19BQ0VPRgorIyBHTlUgbWFrZSBzb21ldGltZXMgcHJpbnRzICJtYWtlWzFdOiBFbnRlcmluZyAuLi4iLCB3aGljaCB3b3VsZCBjb25mdXNlIHVzLgorY2FzZSBgJHtNQUtFLW1ha2V9IC1mIGNvbmZ0ZXN0Lm1ha2UgMj4vZGV2L251bGxgIGluCisgICpAQEAlJSU9Pyo9QEBAJSUlKikKKyAgICBldmFsIGFjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldD15ZXM7OworICAqKQorICAgIGV2YWwgYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0PW5vOzsKK2VzYWMKK3JtIC1mIGNvbmZ0ZXN0Lm1ha2UKK2ZpCitpZiBldmFsIHRlc3QgXCRhY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQgPSB5ZXM7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgU0VUX01BS0U9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICBTRVRfTUFLRT0iTUFLRT0ke01BS0UtbWFrZX0iCitmaQorCitybSAtcmYgLnRzdCAyPi9kZXYvbnVsbAorbWtkaXIgLnRzdCAyPi9kZXYvbnVsbAoraWYgdGVzdCAtZCAudHN0OyB0aGVuCisgIGFtX19sZWFkaW5nX2RvdD0uCitlbHNlCisgIGFtX19sZWFkaW5nX2RvdD1fCitmaQorcm1kaXIgLnRzdCAyPi9kZXYvbnVsbAorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc2lsZW50LXJ1bGVzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3NpbGVudF9ydWxlcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3NpbGVudF9ydWxlczsKK2ZpCisKK2Nhc2UgJGVuYWJsZV9zaWxlbnRfcnVsZXMgaW4KK3llcykgQU1fREVGQVVMVF9WRVJCT1NJVFk9MDs7CitubykgIEFNX0RFRkFVTFRfVkVSQk9TSVRZPTE7OworKikgICBBTV9ERUZBVUxUX1ZFUkJPU0lUWT0xOzsKK2VzYWMKK2FtX21ha2U9JHtNQUtFLW1ha2V9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJGFtX21ha2Ugc3VwcG9ydHMgbmVzdGVkIHZhcmlhYmxlcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRhbV9tYWtlIHN1cHBvcnRzIG5lc3RlZCB2YXJpYWJsZXMuLi4gIiA+JjY7IH0KK2lmICR7YW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiAkYXNfZWNobyAnVFJVRT0kKEJBUiQoVikpCitCQVIwPWZhbHNlCitCQVIxPXRydWUKK1Y9MQorYW1fX2RvaXQ6CisJQCQoVFJVRSkKKy5QSE9OWTogYW1fX2RvaXQnIHwgJGFtX21ha2UgLWYgLSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXM9eWVzCitlbHNlCisgIGFtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzPW5vCitmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXMiID4mNQorJGFzX2VjaG8gIiRhbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlcyIgPiY2OyB9CitpZiB0ZXN0ICRhbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlcyA9IHllczsgdGhlbgorICAgIEFNX1Y9JyQoViknCisgIEFNX0RFRkFVTFRfVj0nJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSknCitlbHNlCisgIEFNX1Y9JEFNX0RFRkFVTFRfVkVSQk9TSVRZCisgIEFNX0RFRkFVTFRfVj0kQU1fREVGQVVMVF9WRVJCT1NJVFkKK2ZpCitBTV9CQUNLU0xBU0g9J1wnCisKK2lmIHRlc3QgImBjZCAkc3JjZGlyICYmIHB3ZGAiICE9ICJgcHdkYCI7IHRoZW4KKyAgIyBVc2UgLUkkKHNyY2Rpcikgb25seSB3aGVuICQoc3JjZGlyKSAhPSAuLCBzbyB0aGF0IG1ha2UncyBvdXRwdXQKKyAgIyBpcyBub3QgcG9sbHV0ZWQgd2l0aCByZXBlYXRlZCAiLUkuIgorICBhbV9faXNyYz0nIC1JJChzcmNkaXIpJworICAjIHRlc3QgdG8gc2VlIGlmIHNyY2RpciBhbHJlYWR5IGNvbmZpZ3VyZWQKKyAgaWYgdGVzdCAtZiAkc3JjZGlyL2NvbmZpZy5zdGF0dXM7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAic291cmNlIGRpcmVjdG9yeSBhbHJlYWR5IGNvbmZpZ3VyZWQ7IHJ1biBcIm1ha2UgZGlzdGNsZWFuXCIgdGhlcmUgZmlyc3QiICIkTElORU5PIiA1CisgIGZpCitmaQorCisjIHRlc3Qgd2hldGhlciB3ZSBoYXZlIGN5Z3BhdGgKK2lmIHRlc3QgLXogIiRDWUdQQVRIX1ciOyB0aGVuCisgIGlmIChjeWdwYXRoIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbDsgdGhlbgorICAgIENZR1BBVEhfVz0nY3lncGF0aCAtdycKKyAgZWxzZQorICAgIENZR1BBVEhfVz1lY2hvCisgIGZpCitmaQorCisKKyMgRGVmaW5lIHRoZSBpZGVudGl0eSBvZiB0aGUgcGFja2FnZS4KKyBQQUNLQUdFPSdhdmFoaScKKyBWRVJTSU9OPScwLjYuMzEnCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBQQUNLQUdFICIkUEFDS0FHRSIKK19BQ0VPRgorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgVkVSU0lPTiAiJFZFUlNJT04iCitfQUNFT0YKKworIyBTb21lIHRvb2xzIEF1dG9tYWtlIG5lZWRzLgorCitBQ0xPQ0FMPSR7QUNMT0NBTC0iJHthbV9taXNzaW5nX3J1bn1hY2xvY2FsLSR7YW1fX2FwaV92ZXJzaW9ufSJ9CisKKworQVVUT0NPTkY9JHtBVVRPQ09ORi0iJHthbV9taXNzaW5nX3J1bn1hdXRvY29uZiJ9CisKKworQVVUT01BS0U9JHtBVVRPTUFLRS0iJHthbV9taXNzaW5nX3J1bn1hdXRvbWFrZS0ke2FtX19hcGlfdmVyc2lvbn0ifQorCisKK0FVVE9IRUFERVI9JHtBVVRPSEVBREVSLSIke2FtX21pc3NpbmdfcnVufWF1dG9oZWFkZXIifQorCisKK01BS0VJTkZPPSR7TUFLRUlORk8tIiR7YW1fbWlzc2luZ19ydW59bWFrZWluZm8ifQorCisjIFdlIG5lZWQgYXdrIGZvciB0aGUgImNoZWNrIiB0YXJnZXQuICBUaGUgc3lzdGVtICJhd2siIGlzIGJhZCBvbgorIyBzb21lIHBsYXRmb3Jtcy4KKyMgQWx3YXlzIGRlZmluZSBBTVRBUiBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gIFllcywgaXQncyBzdGlsbCB1c2VkCisjIGluIHRoZSB3aWxkIDotKCAgV2Ugc2hvdWxkIGZpbmQgYSBwcm9wZXIgd2F5IHRvIGRlcHJlY2F0ZSBpdCAuLi4KK0FNVEFSPSckJHtUQVItdGFyfScKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBjcmVhdGUgYSBwYXggdGFyIGFyY2hpdmUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGNyZWF0ZSBhIHBheCB0YXIgYXJjaGl2ZS4uLiAiID4mNjsgfQorIyBMb29wIG92ZXIgYWxsIGtub3duIG1ldGhvZHMgdG8gY3JlYXRlIGEgdGFyIGFyY2hpdmUgdW50aWwgb25lIHdvcmtzLgorX2FtX3Rvb2xzPSdnbnV0YXIgIHBheCBjcGlvIG5vbmUnCitfYW1fdG9vbHM9JHthbV9jdl9wcm9nX3Rhcl9wYXgtJF9hbV90b29sc30KKyMgRG8gbm90IGZvbGQgdGhlIGFib3ZlIHR3byBsaW5lIGludG8gb25lLCBiZWNhdXNlIFRydTY0IHNoIGFuZAorIyBTb2xhcmlzIHNoIHdpbGwgbm90IGdyb2sgc3BhY2VzIGluIHRoZSByaHMgb2YgYC0nLgorZm9yIF9hbV90b29sIGluICRfYW1fdG9vbHMKK2RvCisgIGNhc2UgJF9hbV90b29sIGluCisgIGdudXRhcikKKyAgICBmb3IgX2FtX3RhciBpbiB0YXIgZ251dGFyIGd0YXI7CisgICAgZG8KKyAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86ICRfYW1fdGFyIC0tdmVyc2lvbiIgPiY1CisgICAoJF9hbV90YXIgLS12ZXJzaW9uKSA+JjUgMj4mNQorICAgYWNfc3RhdHVzPSQ/CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiBicmVhaworICAgIGRvbmUKKyAgICBhbV9fdGFyPSIkX2FtX3RhciAtLWZvcm1hdD1wb3NpeCAtY2hmIC0gIiciJCR0YXJkaXIiJworICAgIGFtX190YXJfPSIkX2FtX3RhciAtLWZvcm1hdD1wb3NpeCAtY2hmIC0gIiciJHRhcmRpciInCisgICAgYW1fX3VudGFyPSIkX2FtX3RhciAteGYgLSIKKyAgICA7OworICBwbGFpbnRhcikKKyAgICAjIE11c3Qgc2tpcCBHTlUgdGFyOiBpZiBpdCBkb2VzIG5vdCBzdXBwb3J0IC0tZm9ybWF0PSBpdCBkb2Vzbid0IGNyZWF0ZQorICAgICMgdXN0YXIgdGFyYmFsbCBlaXRoZXIuCisgICAgKHRhciAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMSAmJiBjb250aW51ZQorICAgIGFtX190YXI9J3RhciBjaGYgLSAiJCR0YXJkaXIiJworICAgIGFtX190YXJfPSd0YXIgY2hmIC0gIiR0YXJkaXIiJworICAgIGFtX191bnRhcj0ndGFyIHhmIC0nCisgICAgOzsKKyAgcGF4KQorICAgIGFtX190YXI9J3BheCAtTCAteCBwYXggLXcgIiQkdGFyZGlyIicKKyAgICBhbV9fdGFyXz0ncGF4IC1MIC14IHBheCAtdyAiJHRhcmRpciInCisgICAgYW1fX3VudGFyPSdwYXggLXInCisgICAgOzsKKyAgY3BpbykKKyAgICBhbV9fdGFyPSdmaW5kICIkJHRhcmRpciIgLXByaW50IHwgY3BpbyAtbyAtSCBwYXggLUwnCisgICAgYW1fX3Rhcl89J2ZpbmQgIiR0YXJkaXIiIC1wcmludCB8IGNwaW8gLW8gLUggcGF4IC1MJworICAgIGFtX191bnRhcj0nY3BpbyAtaSAtSCBwYXggLWQnCisgICAgOzsKKyAgbm9uZSkKKyAgICBhbV9fdGFyPWZhbHNlCisgICAgYW1fX3Rhcl89ZmFsc2UKKyAgICBhbV9fdW50YXI9ZmFsc2UKKyAgICA7OworICBlc2FjCisKKyAgIyBJZiB0aGUgdmFsdWUgd2FzIGNhY2hlZCwgc3RvcCBub3cuICBXZSBqdXN0IHdhbnRlZCB0byBoYXZlIGFtX190YXIKKyAgIyBhbmQgYW1fX3VudGFyIHNldC4KKyAgdGVzdCAtbiAiJHthbV9jdl9wcm9nX3Rhcl9wYXh9IiAmJiBicmVhaworCisgICMgdGFyL3VudGFyIGEgZHVtbXkgZGlyZWN0b3J5LCBhbmQgc3RvcCBpZiB0aGUgY29tbWFuZCB3b3JrcworICBybSAtcmYgY29uZnRlc3QuZGlyCisgIG1rZGlyIGNvbmZ0ZXN0LmRpcgorICBlY2hvIEdyZXBNZSA+IGNvbmZ0ZXN0LmRpci9maWxlCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHRhcmRpcj1jb25mdGVzdC5kaXIgJiYgZXZhbCAkYW1fX3Rhcl8gPmNvbmZ0ZXN0LnRhciIgPiY1CisgICAodGFyZGlyPWNvbmZ0ZXN0LmRpciAmJiBldmFsICRhbV9fdGFyXyA+Y29uZnRlc3QudGFyKSA+JjUgMj4mNQorICAgYWNfc3RhdHVzPSQ/CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfQorICBybSAtcmYgY29uZnRlc3QuZGlyCisgIGlmIHRlc3QgLXMgY29uZnRlc3QudGFyOyB0aGVuCisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogJGFtX191bnRhciA8Y29uZnRlc3QudGFyIiA+JjUKKyAgICgkYW1fX3VudGFyIDxjb25mdGVzdC50YXIpID4mNSAyPiY1CisgICBhY19zdGF0dXM9JD8KKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9CisgICAgZ3JlcCBHcmVwTWUgY29uZnRlc3QuZGlyL2ZpbGUgPi9kZXYvbnVsbCAyPiYxICYmIGJyZWFrCisgIGZpCitkb25lCitybSAtcmYgY29uZnRlc3QuZGlyCisKK2lmICR7YW1fY3ZfcHJvZ190YXJfcGF4Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYW1fY3ZfcHJvZ190YXJfcGF4PSRfYW1fdG9vbAorZmkKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhbV9jdl9wcm9nX3Rhcl9wYXgiID4mNQorJGFzX2VjaG8gIiRhbV9jdl9wcm9nX3Rhcl9wYXgiID4mNjsgfQorCisKKworCisKKworUEFDS0FHRV9VUkw9aHR0cDovL2F2YWhpLm9yZy8KKworCitMSUJBVkFISV9DT01NT05fVkVSU0lPTl9JTkZPPTg6Mzo1CisKK0xJQkFWQUhJX0NPUkVfVkVSU0lPTl9JTkZPPTc6MjowCisKK0xJQkFWQUhJX0NMSUVOVF9WRVJTSU9OX0lORk89NTo5OjIKKworTElCQVZBSElfR0xJQl9WRVJTSU9OX0lORk89MToyOjAKKworTElCQVZBSElfR09CSkVDVF9WRVJTSU9OX0lORk89MDo0OjAKKworTElCQVZBSElfUVQzX1ZFUlNJT05fSU5GTz0xOjI6MAorCitMSUJBVkFISV9RVDRfVkVSU0lPTl9JTkZPPTE6MjowCisKK0xJQkFWQUhJX1VJX1ZFUlNJT05fSU5GTz0xOjQ6MQorCisKKyMgRG8gbm90IHRvdWNoIHRoZXNlLCBzaW5jZSB0aGV5IHdlIHRvb2sgdGhpcyB2ZXJzaW9uLWluZm8gZnJvbSB1cHN0cmVhbSBIT1dML0JvbmpvdXIKK0xJQkFWQUhJX0NPTVBBVF9MSUJETlNfU0RfVkVSU0lPTl9JTkZPPTE6MDowCisKK0xJQkFWQUhJX0NPTVBBVF9IT1dMX1ZFUlNJT05fSU5GTz0wOjA6MAorCitIT1dMX0NPTVBBVF9WRVJTSU9OPTAuOS44CisKKworIyBNYWtlIHN1cmUgd2UgY2FuIHJ1biBjb25maWcuc3ViLgorJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuc3ViIiBzdW40ID4vZGV2L251bGwgMj4mMSB8fAorICBhc19mbl9lcnJvciAkPyAiY2Fubm90IHJ1biAkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgIiRMSU5FTk8iIDUKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBidWlsZCBzeXN0ZW0gdHlwZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBidWlsZCBzeXN0ZW0gdHlwZS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9idWlsZCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2J1aWxkX2FsaWFzPSRidWlsZF9hbGlhcwordGVzdCAieCRhY19idWlsZF9hbGlhcyIgPSB4ICYmCisgIGFjX2J1aWxkX2FsaWFzPWAkU0hFTEwgIiRhY19hdXhfZGlyL2NvbmZpZy5ndWVzcyJgCit0ZXN0ICJ4JGFjX2J1aWxkX2FsaWFzIiA9IHggJiYKKyAgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBndWVzcyBidWlsZCB0eXBlOyB5b3UgbXVzdCBzcGVjaWZ5IG9uZSIgIiRMSU5FTk8iIDUKK2FjX2N2X2J1aWxkPWAkU0hFTEwgIiRhY19hdXhfZGlyL2NvbmZpZy5zdWIiICRhY19idWlsZF9hbGlhc2AgfHwKKyAgYXNfZm5fZXJyb3IgJD8gIiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViICRhY19idWlsZF9hbGlhcyBmYWlsZWQiICIkTElORU5PIiA1CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2J1aWxkIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfYnVpbGQiID4mNjsgfQorY2FzZSAkYWNfY3ZfYnVpbGQgaW4KKyotKi0qKSA7OworKikgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgdmFsdWUgb2YgY2Fub25pY2FsIGJ1aWxkIiAiJExJTkVOTyIgNTs7Citlc2FjCitidWlsZD0kYWNfY3ZfYnVpbGQKK2FjX3NhdmVfSUZTPSRJRlM7IElGUz0nLScKK3NldCB4ICRhY19jdl9idWlsZAorc2hpZnQKK2J1aWxkX2NwdT0kMQorYnVpbGRfdmVuZG9yPSQyCitzaGlmdDsgc2hpZnQKKyMgUmVtZW1iZXIsIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgSUZTIGlzIHVzZWQgdG8gY3JlYXRlICQqLAorIyBleGNlcHQgd2l0aCBvbGQgc2hlbGxzOgorYnVpbGRfb3M9JCoKK0lGUz0kYWNfc2F2ZV9JRlMKK2Nhc2UgJGJ1aWxkX29zIGluICpcICopIGJ1aWxkX29zPWBlY2hvICIkYnVpbGRfb3MiIHwgc2VkICdzLyAvLS9nJ2A7OyBlc2FjCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3N0IHN5c3RlbSB0eXBlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvc3Qgc3lzdGVtIHR5cGUuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfaG9zdCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgIngkaG9zdF9hbGlhcyIgPSB4OyB0aGVuCisgIGFjX2N2X2hvc3Q9JGFjX2N2X2J1aWxkCitlbHNlCisgIGFjX2N2X2hvc3Q9YCRTSEVMTCAiJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgJGhvc3RfYWxpYXNgIHx8CisgICAgYXNfZm5fZXJyb3IgJD8gIiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViICRob3N0X2FsaWFzIGZhaWxlZCIgIiRMSU5FTk8iIDUKK2ZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hvc3QiID4mNQorJGFzX2VjaG8gIiRhY19jdl9ob3N0IiA+JjY7IH0KK2Nhc2UgJGFjX2N2X2hvc3QgaW4KKyotKi0qKSA7OworKikgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgdmFsdWUgb2YgY2Fub25pY2FsIGhvc3QiICIkTElORU5PIiA1OzsKK2VzYWMKK2hvc3Q9JGFjX2N2X2hvc3QKK2FjX3NhdmVfSUZTPSRJRlM7IElGUz0nLScKK3NldCB4ICRhY19jdl9ob3N0CitzaGlmdAoraG9zdF9jcHU9JDEKK2hvc3RfdmVuZG9yPSQyCitzaGlmdDsgc2hpZnQKKyMgUmVtZW1iZXIsIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgSUZTIGlzIHVzZWQgdG8gY3JlYXRlICQqLAorIyBleGNlcHQgd2l0aCBvbGQgc2hlbGxzOgoraG9zdF9vcz0kKgorSUZTPSRhY19zYXZlX0lGUworY2FzZSAkaG9zdF9vcyBpbiAqXCAqKSBob3N0X29zPWBlY2hvICIkaG9zdF9vcyIgfCBzZWQgJ3MvIC8tL2cnYDs7IGVzYWMKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zaWxlbnQtcnVsZXMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfc2lsZW50X3J1bGVzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfc2lsZW50X3J1bGVzOworZmkKKworY2FzZSAkZW5hYmxlX3NpbGVudF9ydWxlcyBpbgoreWVzKSBBTV9ERUZBVUxUX1ZFUkJPU0lUWT0wOzsKK25vKSAgQU1fREVGQVVMVF9WRVJCT1NJVFk9MTs7CisqKSAgIEFNX0RFRkFVTFRfVkVSQk9TSVRZPTA7OworZXNhYworYW1fbWFrZT0ke01BS0UtbWFrZX0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkYW1fbWFrZSBzdXBwb3J0cyBuZXN0ZWQgdmFyaWFibGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJGFtX21ha2Ugc3VwcG9ydHMgbmVzdGVkIHZhcmlhYmxlcy4uLiAiID4mNjsgfQoraWYgJHthbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlcys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmICRhc19lY2hvICdUUlVFPSQoQkFSJChWKSkKK0JBUjA9ZmFsc2UKK0JBUjE9dHJ1ZQorVj0xCithbV9fZG9pdDoKKwlAJChUUlVFKQorLlBIT05ZOiBhbV9fZG9pdCcgfCAkYW1fbWFrZSAtZiAtID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlcz15ZXMKK2Vsc2UKKyAgYW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXM9bm8KK2ZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlcyIgPiY1CiskYXNfZWNobyAiJGFtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzIiA+JjY7IH0KK2lmIHRlc3QgJGFtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzID0geWVzOyB0aGVuCisgICAgQU1fVj0nJChWKScKKyAgQU1fREVGQVVMVF9WPSckKEFNX0RFRkFVTFRfVkVSQk9TSVRZKScKK2Vsc2UKKyAgQU1fVj0kQU1fREVGQVVMVF9WRVJCT1NJVFkKKyAgQU1fREVGQVVMVF9WPSRBTV9ERUZBVUxUX1ZFUkJPU0lUWQorZmkKK0FNX0JBQ0tTTEFTSD0nXCcKKworCisjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInN0b3ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IHN0b3c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX1NUT1crOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkU1RPVyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19TVE9XPSIkU1RPVyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX1NUT1c9InllcyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19TVE9XIiAmJiBhY19jdl9wcm9nX1NUT1c9Im5vIgorZmkKK2ZpCitTVE9XPSRhY19jdl9wcm9nX1NUT1cKK2lmIHRlc3QgLW4gIiRTVE9XIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFNUT1ciID4mNQorJGFzX2VjaG8gIiRTVE9XIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKworaWYgdGVzdCAieCRTVE9XIiA9ICJ4eWVzIiAmJiB0ZXN0IC1kIC91c3IvbG9jYWwvc3RvdzsgdGhlbiA6CisKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAqKiogRm91bmQgL3Vzci9sb2NhbC9zdG93OiBkZWZhdWx0IGluc3RhbGwgcHJlZml4IHNldCB0byAvdXNyL2xvY2FsL3N0b3cvJHtQQUNLQUdFX05BTUV9LSR7UEFDS0FHRV9WRVJTSU9OfSAqKioiID4mNQorJGFzX2VjaG8gIiRhc19tZTogKioqIEZvdW5kIC91c3IvbG9jYWwvc3RvdzogZGVmYXVsdCBpbnN0YWxsIHByZWZpeCBzZXQgdG8gL3Vzci9sb2NhbC9zdG93LyR7UEFDS0FHRV9OQU1FfS0ke1BBQ0tBR0VfVkVSU0lPTn0gKioqIiA+JjY7fQorICAgICAgICBhY19kZWZhdWx0X3ByZWZpeD0iL3Vzci9sb2NhbC9zdG93LyR7UEFDS0FHRV9OQU1FfS0ke1BBQ0tBR0VfVkVSU0lPTn0iCisKK2ZpCisKKyMgQ2hlY2tzIGZvciBwcm9ncmFtcy4KK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWdjYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1nY2M7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX0NDKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19DQz0iJHthY190b29sX3ByZWZpeH1nY2MiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorQ0M9JGFjX2N2X3Byb2dfQ0MKK2lmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQyIgPiY1CiskYXNfZWNobyAiJENDIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19DQyI7IHRoZW4KKyAgYWNfY3RfQ0M9JENDCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZ2NjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBnY2M7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X0NDKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfY3RfQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iZ2NjIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0NDPSRhY19jdl9wcm9nX2FjX2N0X0NDCitpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQorJGFzX2VjaG8gIiRhY19jdF9DQyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0NDIiA9IHg7IHRoZW4KKyAgICBDQz0iIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIENDPSRhY19jdF9DQworICBmaQorZWxzZQorICBDQz0iJGFjX2N2X3Byb2dfQ0MiCitmaQorCitpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCisgICAgICAgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1jYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1jYzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfQ0MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX0NDPSIke2FjX3Rvb2xfcHJlZml4fWNjIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0NDPSRhY19jdl9wcm9nX0NDCitpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQorJGFzX2VjaG8gIiRDQyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgIGZpCitmaQoraWYgdGVzdCAteiAiJENDIjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBjYzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfQ0MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCisgIGFjX3Byb2dfcmVqZWN0ZWQ9bm8KK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGlmIHRlc3QgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID0gIi91c3IvdWNiL2NjIjsgdGhlbgorICAgICAgIGFjX3Byb2dfcmVqZWN0ZWQ9eWVzCisgICAgICAgY29udGludWUKKyAgICAgZmkKKyAgICBhY19jdl9wcm9nX0NDPSJjYyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworaWYgdGVzdCAkYWNfcHJvZ19yZWplY3RlZCA9IHllczsgdGhlbgorICAjIFdlIGZvdW5kIGEgYm9nb24gaW4gdGhlIHBhdGgsIHNvIG1ha2Ugc3VyZSB3ZSBuZXZlciB1c2UgaXQuCisgIHNldCBkdW1teSAkYWNfY3ZfcHJvZ19DQworICBzaGlmdAorICBpZiB0ZXN0ICQjICE9IDA7IHRoZW4KKyAgICAjIFdlIGNob3NlIGEgZGlmZmVyZW50IGNvbXBpbGVyIGZyb20gdGhlIGJvZ3VzIG9uZS4KKyAgICAjIEhvd2V2ZXIsIGl0IGhhcyB0aGUgc2FtZSBiYXNlbmFtZSwgc28gdGhlIGJvZ29uIHdpbGwgYmUgY2hvc2VuCisgICAgIyBmaXJzdCBpZiB3ZSBzZXQgQ0MgdG8ganVzdCB0aGUgYmFzZW5hbWU7IHVzZSB0aGUgZnVsbCBmaWxlIG5hbWUuCisgICAgc2hpZnQKKyAgICBhY19jdl9wcm9nX0NDPSIkYXNfZGlyLyRhY193b3JkJHsxKycgJ30kQCIKKyAgZmkKK2ZpCitmaQorZmkKK0NDPSRhY19jdl9wcm9nX0NDCitpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQorJGFzX2VjaG8gIiRDQyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJENDIjsgdGhlbgorICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgIGZvciBhY19wcm9nIGluIGNsLmV4ZQorICBkbworICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19DQys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfQ0M9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0NDPSRhY19jdl9wcm9nX0NDCitpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQorJGFzX2VjaG8gIiRDQyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgICAgdGVzdCAtbiAiJENDIiAmJiBicmVhaworICBkb25lCitmaQoraWYgdGVzdCAteiAiJENDIjsgdGhlbgorICBhY19jdF9DQz0kQ0MKKyAgZm9yIGFjX3Byb2cgaW4gY2wuZXhlCitkbworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfQ0MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19jdF9DQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfcHJvZyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9DQz0kYWNfY3ZfcHJvZ19hY19jdF9DQworaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0NDIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfQ0MiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICB0ZXN0IC1uICIkYWNfY3RfQ0MiICYmIGJyZWFrCitkb25lCisKKyAgaWYgdGVzdCAieCRhY19jdF9DQyIgPSB4OyB0aGVuCisgICAgQ0M9IiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBDQz0kYWNfY3RfQ0MKKyAgZmkKK2ZpCisKK2ZpCisKKwordGVzdCAteiAiJENDIiAmJiB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIEMgY29tcGlsZXIgZm91bmQgaW4gXCRQQVRICitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorCisjIFByb3ZpZGUgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29tcGlsZXIuCiskYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQyBjb21waWxlciB2ZXJzaW9uIiA+JjUKK3NldCBYICRhY19jb21waWxlCithY19jb21waWxlcj0kMgorZm9yIGFjX29wdGlvbiBpbiAtLXZlcnNpb24gLXYgLVYgLXF2ZXJzaW9uOyBkbworICB7IHsgYWNfdHJ5PSIkYWNfY29tcGlsZXIgJGFjX29wdGlvbiA+JjUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlciAkYWNfb3B0aW9uID4mNSIpIDI+Y29uZnRlc3QuZXJyCisgIGFjX3N0YXR1cz0kPworICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIHNlZCAnMTBhXAorLi4uIHJlc3Qgb2Ygc3RkZXJyIG91dHB1dCBkZWxldGVkIC4uLgorICAgICAgICAgMTBxJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQorICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1CisgIGZpCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KK2RvbmUKKworY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCithY19jbGVhbl9maWxlc19zYXZlPSRhY19jbGVhbl9maWxlcworYWNfY2xlYW5fZmlsZXM9IiRhY19jbGVhbl9maWxlcyBhLm91dCBhLm91dC5kU1lNIGEuZXhlIGIub3V0IgorIyBUcnkgdG8gY3JlYXRlIGFuIGV4ZWN1dGFibGUgd2l0aG91dCAtbyBmaXJzdCwgZGlzcmVnYXJkIGEub3V0LgorIyBJdCB3aWxsIGhlbHAgdXMgZGlhZ25vc2UgYnJva2VuIGNvbXBpbGVycywgYW5kIGZpbmRpbmcgb3V0IGFuIGludHVpdGlvbgorIyBvZiBleGVleHQuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciB3b3Jrcy4uLiAiID4mNjsgfQorYWNfbGlua19kZWZhdWx0PWAkYXNfZWNobyAiJGFjX2xpbmsiIHwgc2VkICdzLyAtbyAqY29uZnRlc3RbXiBdKi8vJ2AKKworIyBUaGUgcG9zc2libGUgb3V0cHV0IGZpbGVzOgorYWNfZmlsZXM9ImEub3V0IGNvbmZ0ZXN0LmV4ZSBjb25mdGVzdCBhLmV4ZSBhX291dC5leGUgYi5vdXQgY29uZnRlc3QuKiIKKworYWNfcm1maWxlcz0KK2ZvciBhY19maWxlIGluICRhY19maWxlcworZG8KKyAgY2FzZSAkYWNfZmlsZSBpbgorICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5tYXAgfCAqLmluZiB8ICouZFNZTSB8ICoubyB8ICoub2JqICkgOzsKKyAgICAqICkgYWNfcm1maWxlcz0iJGFjX3JtZmlsZXMgJGFjX2ZpbGUiOzsKKyAgZXNhYworZG9uZQorcm0gLWYgJGFjX3JtZmlsZXMKKworaWYgeyB7IGFjX3RyeT0iJGFjX2xpbmtfZGVmYXVsdCIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2xpbmtfZGVmYXVsdCIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuIDoKKyAgIyBBdXRvY29uZi0yLjEzIGNvdWxkIHNldCB0aGUgYWNfY3ZfZXhlZXh0IHZhcmlhYmxlIHRvIGBubycuCisjIFNvIGlnbm9yZSBhIHZhbHVlIG9mIGBubycsIG90aGVyd2lzZSB0aGlzIHdvdWxkIGxlYWQgdG8gYEVYRUVYVCA9IG5vJworIyBpbiBhIE1ha2VmaWxlLiAgV2Ugc2hvdWxkIG5vdCBvdmVycmlkZSBhY19jdl9leGVleHQgaWYgaXQgd2FzIGNhY2hlZCwKKyMgc28gdGhhdCB0aGUgdXNlciBjYW4gc2hvcnQtY2lyY3VpdCB0aGlzIHRlc3QgZm9yIGNvbXBpbGVycyB1bmtub3duIHRvCisjIEF1dG9jb25mLgorZm9yIGFjX2ZpbGUgaW4gJGFjX2ZpbGVzICcnCitkbworICB0ZXN0IC1mICIkYWNfZmlsZSIgfHwgY29udGludWUKKyAgY2FzZSAkYWNfZmlsZSBpbgorICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5tYXAgfCAqLmluZiB8ICouZFNZTSB8ICoubyB8ICoub2JqICkKKwk7OworICAgIFthYl0ub3V0ICkKKwkjIFdlIGZvdW5kIHRoZSBkZWZhdWx0IGV4ZWN1dGFibGUsIGJ1dCBleGVleHQ9JycgaXMgbW9zdAorCSMgY2VydGFpbmx5IHJpZ2h0LgorCWJyZWFrOzsKKyAgICAqLiogKQorCWlmIHRlc3QgIiR7YWNfY3ZfZXhlZXh0K3NldH0iID0gc2V0ICYmIHRlc3QgIiRhY19jdl9leGVleHQiICE9IG5vOworCXRoZW4gOjsgZWxzZQorCSAgIGFjX2N2X2V4ZWV4dD1gZXhwciAiJGFjX2ZpbGUiIDogJ1teLl0qXChcLi4qXCknYAorCWZpCisJIyBXZSBzZXQgYWNfY3ZfZXhlZXh0IGhlcmUgYmVjYXVzZSB0aGUgbGF0ZXIgdGVzdCBmb3IgaXQgaXMgbm90CisJIyBzYWZlOiBjcm9zcyBjb21waWxlcnMgbWF5IG5vdCBhZGQgdGhlIHN1ZmZpeCBpZiBnaXZlbiBhbiBgLW8nCisJIyBhcmd1bWVudCwgc28gd2UgbWF5IG5lZWQgdG8ga25vdyBpdCBhdCB0aGF0IHBvaW50IGFscmVhZHkuCisJIyBFdmVuIGlmIHRoaXMgc2VjdGlvbiBsb29rcyBjcnVmdHk6IGl0IGhhcyB0aGUgYWR2YW50YWdlIG9mCisJIyBhY3R1YWxseSB3b3JraW5nLgorCWJyZWFrOzsKKyAgICAqICkKKwlicmVhazs7CisgIGVzYWMKK2RvbmUKK3Rlc3QgIiRhY19jdl9leGVleHQiID0gbm8gJiYgYWNfY3ZfZXhlZXh0PQorCitlbHNlCisgIGFjX2ZpbGU9JycKK2ZpCitpZiB0ZXN0IC16ICIkYWNfZmlsZSI7IHRoZW4gOgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCit7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yIDc3ICJDIGNvbXBpbGVyIGNhbm5vdCBjcmVhdGUgZXhlY3V0YWJsZXMKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQyBjb21waWxlciBkZWZhdWx0IG91dHB1dCBmaWxlIG5hbWUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgZGVmYXVsdCBvdXRwdXQgZmlsZSBuYW1lLi4uICIgPiY2OyB9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhY19maWxlIiA+JjY7IH0KK2FjX2V4ZWV4dD0kYWNfY3ZfZXhlZXh0CisKK3JtIC1mIC1yIGEub3V0IGEub3V0LmRTWU0gYS5leGUgY29uZnRlc3QkYWNfY3ZfZXhlZXh0IGIub3V0CithY19jbGVhbl9maWxlcz0kYWNfY2xlYW5fZmlsZXNfc2F2ZQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3VmZml4IG9mIGV4ZWN1dGFibGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdWZmaXggb2YgZXhlY3V0YWJsZXMuLi4gIiA+JjY7IH0KK2lmIHsgeyBhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuIDoKKyAgIyBJZiBib3RoIGBjb25mdGVzdC5leGUnIGFuZCBgY29uZnRlc3QnIGFyZSBgcHJlc2VudCcgKHdlbGwsIG9ic2VydmFibGUpCisjIGNhdGNoIGBjb25mdGVzdC5leGUnLiAgRm9yIGluc3RhbmNlIHdpdGggQ3lnd2luLCBgbHMgY29uZnRlc3QnIHdpbGwKKyMgd29yayBwcm9wZXJseSAoaS5lLiwgcmVmZXIgdG8gYGNvbmZ0ZXN0LmV4ZScpLCB3aGlsZSBpdCB3b24ndCB3aXRoCisjIGBybScuCitmb3IgYWNfZmlsZSBpbiBjb25mdGVzdC5leGUgY29uZnRlc3QgY29uZnRlc3QuKjsgZG8KKyAgdGVzdCAtZiAiJGFjX2ZpbGUiIHx8IGNvbnRpbnVlCisgIGNhc2UgJGFjX2ZpbGUgaW4KKyAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubWFwIHwgKi5pbmYgfCAqLmRTWU0gfCAqLm8gfCAqLm9iaiApIDs7CisgICAgKi4qICkgYWNfY3ZfZXhlZXh0PWBleHByICIkYWNfZmlsZSIgOiAnW14uXSpcKFwuLipcKSdgCisJICBicmVhazs7CisgICAgKiApIGJyZWFrOzsKKyAgZXNhYworZG9uZQorZWxzZQorICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY29tcHV0ZSBzdWZmaXggb2YgZXhlY3V0YWJsZXM6IGNhbm5vdCBjb21waWxlIGFuZCBsaW5rCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorZmkKK3JtIC1mIGNvbmZ0ZXN0IGNvbmZ0ZXN0JGFjX2N2X2V4ZWV4dAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9leGVleHQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9leGVleHQiID4mNjsgfQorCitybSAtZiBjb25mdGVzdC4kYWNfZXh0CitFWEVFWFQ9JGFjX2N2X2V4ZWV4dAorYWNfZXhlZXh0PSRFWEVFWFQKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRpby5oPgoraW50CittYWluICgpCit7CitGSUxFICpmID0gZm9wZW4gKCJjb25mdGVzdC5vdXQiLCAidyIpOworIHJldHVybiBmZXJyb3IgKGYpIHx8IGZjbG9zZSAoZikgIT0gMDsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCithY19jbGVhbl9maWxlcz0iJGFjX2NsZWFuX2ZpbGVzIGNvbmZ0ZXN0Lm91dCIKKyMgQ2hlY2sgdGhhdCB0aGUgY29tcGlsZXIgcHJvZHVjZXMgZXhlY3V0YWJsZXMgd2UgY2FuIHJ1bi4gIElmIG5vdCwgZWl0aGVyCisjIHRoZSBjb21waWxlciBpcyBicm9rZW4sIG9yIHdlIGNyb3NzIGNvbXBpbGUuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIGNyb3NzIGNvbXBpbGluZyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSBjcm9zcyBjb21waWxpbmcuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciICE9IHllczsgdGhlbgorICB7IHsgYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorICBpZiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19jdl9leGVleHQnCisgIHsgeyBjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY190cnkiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgfTsgdGhlbgorICAgIGNyb3NzX2NvbXBpbGluZz1ubworICBlbHNlCisgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSBtYXliZTsgdGhlbgorCWNyb3NzX2NvbXBpbGluZz15ZXMKKyAgICBlbHNlCisJeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAiY2Fubm90IHJ1biBDIGNvbXBpbGVkIHByb2dyYW1zLgorSWYgeW91IG1lYW50IHRvIGNyb3NzIGNvbXBpbGUsIHVzZSBcYC0taG9zdCcuCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorICAgIGZpCisgIGZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRjcm9zc19jb21waWxpbmciID4mNQorJGFzX2VjaG8gIiRjcm9zc19jb21waWxpbmciID4mNjsgfQorCitybSAtZiBjb25mdGVzdC4kYWNfZXh0IGNvbmZ0ZXN0JGFjX2N2X2V4ZWV4dCBjb25mdGVzdC5vdXQKK2FjX2NsZWFuX2ZpbGVzPSRhY19jbGVhbl9maWxlc19zYXZlCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X29iamV4dCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QubyBjb25mdGVzdC5vYmoKK2lmIHsgeyBhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuIDoKKyAgZm9yIGFjX2ZpbGUgaW4gY29uZnRlc3QubyBjb25mdGVzdC5vYmogY29uZnRlc3QuKjsgZG8KKyAgdGVzdCAtZiAiJGFjX2ZpbGUiIHx8IGNvbnRpbnVlOworICBjYXNlICRhY19maWxlIGluCisgICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm1hcCB8ICouaW5mIHwgKi5kU1lNICkgOzsKKyAgICAqKSBhY19jdl9vYmpleHQ9YGV4cHIgIiRhY19maWxlIiA6ICcuKlwuXCguKlwpJ2AKKyAgICAgICBicmVhazs7CisgIGVzYWMKK2RvbmUKK2Vsc2UKKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK3sgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBjb21wdXRlIHN1ZmZpeCBvZiBvYmplY3QgZmlsZXM6IGNhbm5vdCBjb21waWxlCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19jdl9vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfb2JqZXh0IiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfb2JqZXh0IiA+JjY7IH0KK09CSkVYVD0kYWNfY3Zfb2JqZXh0CithY19vYmpleHQ9JE9CSkVYVAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgY29tcGlsZXIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIGNvbXBpbGVyLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2NfY29tcGlsZXJfZ251Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKyNpZm5kZWYgX19HTlVDX18KKyAgICAgICBjaG9rZSBtZQorI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jb21waWxlcl9nbnU9eWVzCitlbHNlCisgIGFjX2NvbXBpbGVyX2dudT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorYWNfY3ZfY19jb21waWxlcl9nbnU9JGFjX2NvbXBpbGVyX2dudQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9jX2NvbXBpbGVyX2dudSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjY7IH0KK2lmIHRlc3QgJGFjX2NvbXBpbGVyX2dudSA9IHllczsgdGhlbgorICBHQ0M9eWVzCitlbHNlCisgIEdDQz0KK2ZpCithY190ZXN0X0NGTEFHUz0ke0NGTEFHUytzZXR9CithY19zYXZlX0NGTEFHUz0kQ0ZMQUdTCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLWciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtZy4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2NjX2crOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19zYXZlX2Nfd2Vycm9yX2ZsYWc9JGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGFjX2Nfd2Vycm9yX2ZsYWc9eWVzCisgICBhY19jdl9wcm9nX2NjX2c9bm8KKyAgIENGTEFHUz0iLWciCisgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfcHJvZ19jY19nPXllcworZWxzZQorICBDRkxBR1M9IiIKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCitlbHNlCisgIGFjX2Nfd2Vycm9yX2ZsYWc9JGFjX3NhdmVfY193ZXJyb3JfZmxhZworCSBDRkxBR1M9Ii1nIgorCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfcHJvZ19jY19nPXllcworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgYWNfY193ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jX3dlcnJvcl9mbGFnCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX2ciID4mNQorJGFzX2VjaG8gIiRhY19jdl9wcm9nX2NjX2ciID4mNjsgfQoraWYgdGVzdCAiJGFjX3Rlc3RfQ0ZMQUdTIiA9IHNldDsgdGhlbgorICBDRkxBR1M9JGFjX3NhdmVfQ0ZMQUdTCitlbGlmIHRlc3QgJGFjX2N2X3Byb2dfY2NfZyA9IHllczsgdGhlbgorICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIENGTEFHUz0iLWcgLU8yIgorICBlbHNlCisgICAgQ0ZMQUdTPSItZyIKKyAgZmkKK2Vsc2UKKyAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICBDRkxBR1M9Ii1PMiIKKyAgZWxzZQorICAgIENGTEFHUz0KKyAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBJU08gQzg5IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBJU08gQzg5Li4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfY2NfYzg5Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY3ZfcHJvZ19jY19jODk9bm8KK2FjX3NhdmVfQ0M9JENDCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorLyogTW9zdCBvZiB0aGUgZm9sbG93aW5nIHRlc3RzIGFyZSBzdG9sZW4gZnJvbSBSQ1MgNS43J3Mgc3JjL2NvbmYuc2guICAqLworc3RydWN0IGJ1ZiB7IGludCB4OyB9OworRklMRSAqICgqcmNzb3BlbikgKHN0cnVjdCBidWYgKiwgc3RydWN0IHN0YXQgKiwgaW50KTsKK3N0YXRpYyBjaGFyICplIChwLCBpKQorICAgICBjaGFyICoqcDsKKyAgICAgaW50IGk7Cit7CisgIHJldHVybiBwW2ldOworfQorc3RhdGljIGNoYXIgKmYgKGNoYXIgKiAoKmcpIChjaGFyICoqLCBpbnQpLCBjaGFyICoqcCwgLi4uKQoreworICBjaGFyICpzOworICB2YV9saXN0IHY7CisgIHZhX3N0YXJ0ICh2LHApOworICBzID0gZyAocCwgdmFfYXJnICh2LGludCkpOworICB2YV9lbmQgKHYpOworICByZXR1cm4gczsKK30KKworLyogT1NGIDQuMCBDb21wYXEgY2MgaXMgc29tZSBzb3J0IG9mIGFsbW9zdC1BTlNJIGJ5IGRlZmF1bHQuICBJdCBoYXMKKyAgIGZ1bmN0aW9uIHByb3RvdHlwZXMgYW5kIHN0dWZmLCBidXQgbm90ICdceEhIJyBoZXggY2hhcmFjdGVyIGNvbnN0YW50cy4KKyAgIFRoZXNlIGRvbid0IHByb3Zva2UgYW4gZXJyb3IgdW5mb3J0dW5hdGVseSwgaW5zdGVhZCBhcmUgc2lsZW50bHkgdHJlYXRlZAorICAgYXMgJ3gnLiAgVGhlIGZvbGxvd2luZyBpbmR1Y2VzIGFuIGVycm9yLCB1bnRpbCAtc3RkIGlzIGFkZGVkIHRvIGdldAorICAgcHJvcGVyIEFOU0kgbW9kZS4gIEN1cmlvdXNseSAnXHgwMCchPSd4JyBhbHdheXMgY29tZXMgb3V0IHRydWUsIGZvciBhbgorICAgYXJyYXkgc2l6ZSBhdCBsZWFzdC4gIEl0J3MgbmVjZXNzYXJ5IHRvIHdyaXRlICdceDAwJz09MCB0byBnZXQgc29tZXRoaW5nCisgICB0aGF0J3MgdHJ1ZSBvbmx5IHdpdGggLXN0ZC4gICovCitpbnQgb3NmNF9jY19hcnJheSBbJ1x4MDAnID09IDAgPyAxIDogLTFdOworCisvKiBJQk0gQyA2IGZvciBBSVggaXMgYWxtb3N0LUFOU0kgYnkgZGVmYXVsdCwgYnV0IGl0IHJlcGxhY2VzIG1hY3JvIHBhcmFtZXRlcnMKKyAgIGluc2lkZSBzdHJpbmdzIGFuZCBjaGFyYWN0ZXIgY29uc3RhbnRzLiAgKi8KKyNkZWZpbmUgRk9PKHgpICd4JworaW50IHhsYzZfY2NfYXJyYXlbRk9PKGEpID09ICd4JyA/IDEgOiAtMV07CisKK2ludCB0ZXN0IChpbnQgaSwgZG91YmxlIHgpOworc3RydWN0IHMxIHtpbnQgKCpmKSAoaW50IGEpO307CitzdHJ1Y3QgczIge2ludCAoKmYpIChkb3VibGUgYSk7fTsKK2ludCBwYWlybmFtZXMgKGludCwgY2hhciAqKiwgRklMRSAqKCopKHN0cnVjdCBidWYgKiwgc3RydWN0IHN0YXQgKiwgaW50KSwgaW50LCBpbnQpOworaW50IGFyZ2M7CitjaGFyICoqYXJndjsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGYgKGUsIGFyZ3YsIDApICE9IGFyZ3ZbMF0gIHx8ICBmIChlLCBhcmd2LCAxKSAhPSBhcmd2WzFdOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitmb3IgYWNfYXJnIGluICcnIC1xbGFuZ2x2bD1leHRjODkgLXFsYW5nbHZsPWFuc2kgLXN0ZCBcCisJLUFlICItQWEgLURfSFBVWF9TT1VSQ0UiICItWGMgLURfX0VYVEVOU0lPTlNfXyIKK2RvCisgIENDPSIkYWNfc2F2ZV9DQyAkYWNfYXJnIgorICBpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3Byb2dfY2NfYzg5PSRhY19hcmcKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0CisgIHRlc3QgIngkYWNfY3ZfcHJvZ19jY19jODkiICE9ICJ4bm8iICYmIGJyZWFrCitkb25lCitybSAtZiBjb25mdGVzdC4kYWNfZXh0CitDQz0kYWNfc2F2ZV9DQworCitmaQorIyBBQ19DQUNIRV9WQUwKK2Nhc2UgIngkYWNfY3ZfcHJvZ19jY19jODkiIGluCisgIHgpCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vbmUgbmVlZGVkIiA+JjUKKyRhc19lY2hvICJub25lIG5lZWRlZCIgPiY2OyB9IDs7CisgIHhubykKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogdW5zdXBwb3J0ZWQiID4mNQorJGFzX2VjaG8gInVuc3VwcG9ydGVkIiA+JjY7IH0gOzsKKyAgKikKKyAgICBDQz0iJENDICRhY19jdl9wcm9nX2NjX2M4OSIKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3Byb2dfY2NfYzg5IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcHJvZ19jY19jODkiID4mNjsgfSA7OworZXNhYworaWYgdGVzdCAieCRhY19jdl9wcm9nX2NjX2M4OSIgIT0geG5vOyB0aGVuIDoKKworZmkKKworYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorREVQRElSPSIke2FtX19sZWFkaW5nX2RvdH1kZXBzIgorCithY19jb25maWdfY29tbWFuZHM9IiRhY19jb25maWdfY29tbWFuZHMgZGVwZmlsZXMiCisKKworYW1fbWFrZT0ke01BS0UtbWFrZX0KK2NhdCA+IGNvbmZpbmMgPDwgJ0VORCcKK2FtX19kb2l0OgorCUBlY2hvIHRoaXMgaXMgdGhlIGFtX19kb2l0IHRhcmdldAorLlBIT05ZOiBhbV9fZG9pdAorRU5ECisjIElmIHdlIGRvbid0IGZpbmQgYW4gaW5jbHVkZSBkaXJlY3RpdmUsIGp1c3QgY29tbWVudCBvdXQgdGhlIGNvZGUuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzdHlsZSBvZiBpbmNsdWRlIHVzZWQgYnkgJGFtX21ha2UiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN0eWxlIG9mIGluY2x1ZGUgdXNlZCBieSAkYW1fbWFrZS4uLiAiID4mNjsgfQorYW1fX2luY2x1ZGU9IiMiCithbV9fcXVvdGU9CitfYW1fcmVzdWx0PW5vbmUKKyMgRmlyc3QgdHJ5IEdOVSBtYWtlIHN0eWxlIGluY2x1ZGUuCitlY2hvICJpbmNsdWRlIGNvbmZpbmMiID4gY29uZm1mCisjIElnbm9yZSBhbGwga2luZHMgb2YgYWRkaXRpb25hbCBvdXRwdXQgZnJvbSBgbWFrZScuCitjYXNlIGAkYW1fbWFrZSAtcyAtZiBjb25mbWYgMj4gL2Rldi9udWxsYCBpbiAjKAorKnRoZVwgYW1fX2RvaXRcIHRhcmdldCopCisgIGFtX19pbmNsdWRlPWluY2x1ZGUKKyAgYW1fX3F1b3RlPQorICBfYW1fcmVzdWx0PUdOVQorICA7OworZXNhYworIyBOb3cgdHJ5IEJTRCBtYWtlIHN0eWxlIGluY2x1ZGUuCitpZiB0ZXN0ICIkYW1fX2luY2x1ZGUiID0gIiMiOyB0aGVuCisgICBlY2hvICcuaW5jbHVkZSAiY29uZmluYyInID4gY29uZm1mCisgICBjYXNlIGAkYW1fbWFrZSAtcyAtZiBjb25mbWYgMj4gL2Rldi9udWxsYCBpbiAjKAorICAgKnRoZVwgYW1fX2RvaXRcIHRhcmdldCopCisgICAgIGFtX19pbmNsdWRlPS5pbmNsdWRlCisgICAgIGFtX19xdW90ZT0iXCIiCisgICAgIF9hbV9yZXN1bHQ9QlNECisgICAgIDs7CisgICBlc2FjCitmaQorCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkX2FtX3Jlc3VsdCIgPiY1CiskYXNfZWNobyAiJF9hbV9yZXN1bHQiID4mNjsgfQorcm0gLWYgY29uZmluYyBjb25mbWYKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmc7CitmaQorCitpZiB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiAhPSB4bm87IHRoZW4KKyAgYW1fZGVwY29tcD0iJGFjX2F1eF9kaXIvZGVwY29tcCIKKyAgQU1ERVBCQUNLU0xBU0g9J1wnCisgIGFtX19ub2RlcD0nX25vJworZmkKKyBpZiB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiAhPSB4bm87IHRoZW4KKyAgQU1ERVBfVFJVRT0KKyAgQU1ERVBfRkFMU0U9JyMnCitlbHNlCisgIEFNREVQX1RSVUU9JyMnCisgIEFNREVQX0ZBTFNFPQorZmkKKworCisKK2RlcGNjPSIkQ0MiICAgYW1fY29tcGlsZXJfbGlzdD0KKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYy4uLiAiID4mNjsgfQoraWYgJHthbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLXogIiRBTURFUF9UUlVFIiAmJiB0ZXN0IC1mICIkYW1fZGVwY29tcCI7IHRoZW4KKyAgIyBXZSBtYWtlIGEgc3ViZGlyIGFuZCBkbyB0aGUgdGVzdHMgdGhlcmUuICBPdGhlcndpc2Ugd2UgY2FuIGVuZCB1cAorICAjIG1ha2luZyBib2d1cyBmaWxlcyB0aGF0IHdlIGRvbid0IGtub3cgYWJvdXQgYW5kIG5ldmVyIHJlbW92ZS4gIEZvcgorICAjIGluc3RhbmNlIGl0IHdhcyByZXBvcnRlZCB0aGF0IG9uIEhQLVVYIHRoZSBnY2MgdGVzdCB3aWxsIGVuZCB1cAorICAjIG1ha2luZyBhIGR1bW15IGZpbGUgbmFtZWQgYEQnIC0tIGJlY2F1c2UgYC1NRCcgbWVhbnMgYHB1dCB0aGUgb3V0cHV0CisgICMgaW4gRCcuCisgIHJtIC1yZiBjb25mdGVzdC5kaXIKKyAgbWtkaXIgY29uZnRlc3QuZGlyCisgICMgQ29weSBkZXBjb21wIHRvIHN1YmRpciBiZWNhdXNlIG90aGVyd2lzZSB3ZSB3b24ndCBmaW5kIGl0IGlmIHdlJ3JlCisgICMgdXNpbmcgYSByZWxhdGl2ZSBkaXJlY3RvcnkuCisgIGNwICIkYW1fZGVwY29tcCIgY29uZnRlc3QuZGlyCisgIGNkIGNvbmZ0ZXN0LmRpcgorICAjIFdlIHdpbGwgYnVpbGQgb2JqZWN0cyBhbmQgZGVwZW5kZW5jaWVzIGluIGEgc3ViZGlyZWN0b3J5IGJlY2F1c2UKKyAgIyBpdCBoZWxwcyB0byBkZXRlY3QgaW5hcHBsaWNhYmxlIGRlcGVuZGVuY3kgbW9kZXMuICBGb3IgaW5zdGFuY2UKKyAgIyBib3RoIFRydTY0J3MgY2MgYW5kIElDQyBzdXBwb3J0IC1NRCB0byBvdXRwdXQgZGVwZW5kZW5jaWVzIGFzIGEKKyAgIyBzaWRlIGVmZmVjdCBvZiBjb21waWxhdGlvbiwgYnV0IElDQyB3aWxsIHB1dCB0aGUgZGVwZW5kZW5jaWVzIGluCisgICMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHdoaWxlIFRydTY0IHdpbGwgcHV0IHRoZW0gaW4gdGhlIG9iamVjdAorICAjIGRpcmVjdG9yeS4KKyAgbWtkaXIgc3ViCisKKyAgYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9bm9uZQorICBpZiB0ZXN0ICIkYW1fY29tcGlsZXJfbGlzdCIgPSAiIjsgdGhlbgorICAgICBhbV9jb21waWxlcl9saXN0PWBzZWQgLW4gJ3MvXiMqXChbYS16QS1aMC05XSpcKSkkL1wxL3AnIDwgLi9kZXBjb21wYAorICBmaQorICBhbV9fdW5pdmVyc2FsPWZhbHNlCisgIGNhc2UgIiAkZGVwY2MgIiBpbiAjKAorICAgICAqXCAtYXJjaFwgKlwgLWFyY2hcICopIGFtX191bml2ZXJzYWw9dHJ1ZSA7OworICAgICBlc2FjCisKKyAgZm9yIGRlcG1vZGUgaW4gJGFtX2NvbXBpbGVyX2xpc3Q7IGRvCisgICAgIyBTZXR1cCBhIHNvdXJjZSB3aXRoIG1hbnkgZGVwZW5kZW5jaWVzLCBiZWNhdXNlIHNvbWUgY29tcGlsZXJzCisgICAgIyBsaWtlIHRvIHdyYXAgbGFyZ2UgZGVwZW5kZW5jeSBsaXN0cyBvbiBjb2x1bW4gODAgKHdpdGggXCksIGFuZAorICAgICMgd2Ugc2hvdWxkIG5vdCBjaG9vc2UgYSBkZXBjb21wIG1vZGUgd2hpY2ggaXMgY29uZnVzZWQgYnkgdGhpcy4KKyAgICAjCisgICAgIyBXZSBuZWVkIHRvIHJlY3JlYXRlIHRoZXNlIGZpbGVzIGZvciBlYWNoIHRlc3QsIGFzIHRoZSBjb21waWxlciBtYXkKKyAgICAjIG92ZXJ3cml0ZSBzb21lIG9mIHRoZW0gd2hlbiB0ZXN0aW5nIHdpdGggb2JzY3VyZSBjb21tYW5kIGxpbmVzLgorICAgICMgVGhpcyBoYXBwZW5zIGF0IGxlYXN0IHdpdGggdGhlIEFJWCBDIGNvbXBpbGVyLgorICAgIDogPiBzdWIvY29uZnRlc3QuYworICAgIGZvciBpIGluIDEgMiAzIDQgNSA2OyBkbworICAgICAgZWNobyAnI2luY2x1ZGUgImNvbmZ0c3QnJGknLmgiJyA+PiBzdWIvY29uZnRlc3QuYworICAgICAgIyBVc2luZyBgOiA+IHN1Yi9jb25mdHN0JGkuaCcgY3JlYXRlcyBvbmx5IHN1Yi9jb25mdHN0MS5oIHdpdGgKKyAgICAgICMgU29sYXJpcyA4J3Mgey91c3IsfS9iaW4vc2guCisgICAgICB0b3VjaCBzdWIvY29uZnRzdCRpLmgKKyAgICBkb25lCisgICAgZWNobyAiJHthbV9faW5jbHVkZX0gJHthbV9fcXVvdGV9c3ViL2NvbmZ0ZXN0LlBvJHthbV9fcXVvdGV9IiA+IGNvbmZtZgorCisgICAgIyBXZSBjaGVjayB3aXRoIGAtYycgYW5kIGAtbycgZm9yIHRoZSBzYWtlIG9mIHRoZSAiZGFzaG1zdGRvdXQiCisgICAgIyBtb2RlLiAgSXQgdHVybnMgb3V0IHRoYXQgdGhlIFN1blBybyBDKysgY29tcGlsZXIgZG9lcyBub3QgcHJvcGVybHkKKyAgICAjIGhhbmRsZSBgLU0gLW8nLCBhbmQgd2UgbmVlZCB0byBkZXRlY3QgdGhpcy4gIEFsc28sIHNvbWUgSW50ZWwKKyAgICAjIHZlcnNpb25zIGhhZCB0cm91YmxlIHdpdGggb3V0cHV0IGluIHN1YmRpcnMKKyAgICBhbV9fb2JqPXN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfQorICAgIGFtX19taW51c19vYmo9Ii1vICRhbV9fb2JqIgorICAgIGNhc2UgJGRlcG1vZGUgaW4KKyAgICBnY2MpCisgICAgICAjIFRoaXMgZGVwbW9kZSBjYXVzZXMgYSBjb21waWxlciByYWNlIGluIHVuaXZlcnNhbCBtb2RlLgorICAgICAgdGVzdCAiJGFtX191bml2ZXJzYWwiID0gZmFsc2UgfHwgY29udGludWUKKyAgICAgIDs7CisgICAgbm9zaWRlZWZmZWN0KQorICAgICAgIyBhZnRlciB0aGlzIHRhZywgbWVjaGFuaXNtcyBhcmUgbm90IGJ5IHNpZGUtZWZmZWN0LCBzbyB0aGV5J2xsCisgICAgICAjIG9ubHkgYmUgdXNlZCB3aGVuIGV4cGxpY2l0bHkgcmVxdWVzdGVkCisgICAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiA9IHh5ZXM7IHRoZW4KKwljb250aW51ZQorICAgICAgZWxzZQorCWJyZWFrCisgICAgICBmaQorICAgICAgOzsKKyAgICBtc3ZjNyB8IG1zdmM3bXN5cyB8IG1zdmlzdWFsY3BwIHwgbXN2Y21zeXMpCisgICAgICAjIFRoaXMgY29tcGlsZXIgd29uJ3QgZ3JvayBgLWMgLW8nLCBidXQgYWxzbywgdGhlIG1pbnVzbyB0ZXN0IGhhcworICAgICAgIyBub3QgcnVuIHlldC4gIFRoZXNlIGRlcG1vZGVzIGFyZSBsYXRlIGVub3VnaCBpbiB0aGUgZ2FtZSwgYW5kCisgICAgICAjIHNvIHdlYWsgdGhhdCB0aGVpciBmdW5jdGlvbmluZyBzaG91bGQgbm90IGJlIGltcGFjdGVkLgorICAgICAgYW1fX29iaj1jb25mdGVzdC4ke09CSkVYVC1vfQorICAgICAgYW1fX21pbnVzX29iaj0KKyAgICAgIDs7CisgICAgbm9uZSkgYnJlYWsgOzsKKyAgICBlc2FjCisgICAgaWYgZGVwbW9kZT0kZGVwbW9kZSBcCisgICAgICAgc291cmNlPXN1Yi9jb25mdGVzdC5jIG9iamVjdD0kYW1fX29iaiBcCisgICAgICAgZGVwZmlsZT1zdWIvY29uZnRlc3QuUG8gdG1wZGVwZmlsZT1zdWIvY29uZnRlc3QuVFBvIFwKKyAgICAgICAkU0hFTEwgLi9kZXBjb21wICRkZXBjYyAtYyAkYW1fX21pbnVzX29iaiBzdWIvY29uZnRlc3QuYyBcCisgICAgICAgICA+L2Rldi9udWxsIDI+Y29uZnRlc3QuZXJyICYmCisgICAgICAgZ3JlcCBzdWIvY29uZnRzdDEuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorICAgICAgIGdyZXAgc3ViL2NvbmZ0c3Q2Lmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKKyAgICAgICBncmVwICRhbV9fb2JqIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgJHtNQUtFLW1ha2V9IC1zIC1mIGNvbmZtZiA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAjIGljYyBkb2Vzbid0IGNob2tlIG9uIHVua25vd24gb3B0aW9ucywgaXQgd2lsbCBqdXN0IGlzc3VlIHdhcm5pbmdzCisgICAgICAjIG9yIHJlbWFya3MgKGV2ZW4gd2l0aCAtV2Vycm9yKS4gIFNvIHdlIGdyZXAgc3RkZXJyIGZvciBhbnkgbWVzc2FnZQorICAgICAgIyB0aGF0IHNheXMgYW4gb3B0aW9uIHdhcyBpZ25vcmVkIG9yIG5vdCBzdXBwb3J0ZWQuCisgICAgICAjIFdoZW4gZ2l2ZW4gLU1QLCBpY2MgNy4wIGFuZCA3LjEgY29tcGxhaW4gdGh1c2x5OgorICAgICAgIyAgIGljYzogQ29tbWFuZCBsaW5lIHdhcm5pbmc6IGlnbm9yaW5nIG9wdGlvbiAnLU0nOyBubyBhcmd1bWVudCByZXF1aXJlZAorICAgICAgIyBUaGUgZGlhZ25vc2lzIGNoYW5nZWQgaW4gaWNjIDguMDoKKyAgICAgICMgICBpY2M6IENvbW1hbmQgbGluZSByZW1hcms6IG9wdGlvbiAnLU1QJyBub3Qgc3VwcG9ydGVkCisgICAgICBpZiAoZ3JlcCAnaWdub3Jpbmcgb3B0aW9uJyBjb25mdGVzdC5lcnIgfHwKKyAgICAgICAgICBncmVwICdub3Qgc3VwcG9ydGVkJyBjb25mdGVzdC5lcnIpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6OyBlbHNlCisgICAgICAgIGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPSRkZXBtb2RlCisgICAgICAgIGJyZWFrCisgICAgICBmaQorICAgIGZpCisgIGRvbmUKKworICBjZCAuLgorICBybSAtcmYgY29uZnRlc3QuZGlyCitlbHNlCisgIGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPW5vbmUKK2ZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjUKKyRhc19lY2hvICIkYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID4mNjsgfQorQ0NERVBNT0RFPWRlcG1vZGU9JGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlCisKKyBpZgorICB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiAhPSB4bm8gXAorICAmJiB0ZXN0ICIkYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID0gZ2NjMzsgdGhlbgorICBhbV9fZmFzdGRlcENDX1RSVUU9CisgIGFtX19mYXN0ZGVwQ0NfRkFMU0U9JyMnCitlbHNlCisgIGFtX19mYXN0ZGVwQ0NfVFJVRT0nIycKKyAgYW1fX2Zhc3RkZXBDQ19GQUxTRT0KK2ZpCisKKworICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgSVNPIEM5OSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgSVNPIEM5OS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2NjX2M5OSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2N2X3Byb2dfY2NfYzk5PW5vCithY19zYXZlX0NDPSRDQworY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx3Y2hhci5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKy8vIENoZWNrIHZhcmFyZ3MgbWFjcm9zLiAgVGhlc2UgZXhhbXBsZXMgYXJlIHRha2VuIGZyb20gQzk5IDYuMTAuMy41LgorI2RlZmluZSBkZWJ1ZyguLi4pIGZwcmludGYgKHN0ZGVyciwgX19WQV9BUkdTX18pCisjZGVmaW5lIHNob3dsaXN0KC4uLikgcHV0cyAoI19fVkFfQVJHU19fKQorI2RlZmluZSByZXBvcnQodGVzdCwuLi4pICgodGVzdCkgPyBwdXRzICgjdGVzdCkgOiBwcmludGYgKF9fVkFfQVJHU19fKSkKK3N0YXRpYyB2b2lkCit0ZXN0X3ZhcmFyZ3NfbWFjcm9zICh2b2lkKQoreworICBpbnQgeCA9IDEyMzQ7CisgIGludCB5ID0gNTY3ODsKKyAgZGVidWcgKCJGbGFnIik7CisgIGRlYnVnICgiWCA9ICVkXG4iLCB4KTsKKyAgc2hvd2xpc3QgKFRoZSBmaXJzdCwgc2Vjb25kLCBhbmQgdGhpcmQgaXRlbXMuKTsKKyAgcmVwb3J0ICh4PnksICJ4IGlzICVkIGJ1dCB5IGlzICVkIiwgeCwgeSk7Cit9CisKKy8vIENoZWNrIGxvbmcgbG9uZyB0eXBlcy4KKyNkZWZpbmUgQklHNjQgMTg0NDY3NDQwNzM3MDk1NTE2MTV1bGwKKyNkZWZpbmUgQklHMzIgNDI5NDk2NzI5NXVsCisjZGVmaW5lIEJJR19PSyAoQklHNjQgLyBCSUczMiA9PSA0Mjk0OTY3Mjk3dWxsICYmIEJJRzY0ICUgQklHMzIgPT0gMCkKKyNpZiAhQklHX09LCisgIHlvdXIgcHJlcHJvY2Vzc29yIGlzIGJyb2tlbjsKKyNlbmRpZgorI2lmIEJJR19PSworI2Vsc2UKKyAgeW91ciBwcmVwcm9jZXNzb3IgaXMgYnJva2VuOworI2VuZGlmCitzdGF0aWMgbG9uZyBsb25nIGludCBiaWdudW0gPSAtOTIyMzM3MjAzNjg1NDc3NTgwN0xMOworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgdWJpZ251bSA9IEJJRzY0OworCitzdHJ1Y3QgaW5jb21wbGV0ZV9hcnJheQoreworICBpbnQgZGF0YXNpemU7CisgIGRvdWJsZSBkYXRhW107Cit9OworCitzdHJ1Y3QgbmFtZWRfaW5pdCB7CisgIGludCBudW1iZXI7CisgIGNvbnN0IHdjaGFyX3QgKm5hbWU7CisgIGRvdWJsZSBhdmVyYWdlOworfTsKKwordHlwZWRlZiBjb25zdCBjaGFyICpjY3A7CisKK3N0YXRpYyBpbmxpbmUgaW50Cit0ZXN0X3Jlc3RyaWN0IChjY3AgcmVzdHJpY3QgdGV4dCkKK3sKKyAgLy8gU2VlIGlmIEMrKy1zdHlsZSBjb21tZW50cyB3b3JrLgorICAvLyBJdGVyYXRlIHRocm91Z2ggaXRlbXMgdmlhIHRoZSByZXN0cmljdGVkIHBvaW50ZXIuCisgIC8vIEFsc28gY2hlY2sgZm9yIGRlY2xhcmF0aW9ucyBpbiBmb3IgbG9vcHMuCisgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyAqKHRleHQraSkgIT0gJ1wwJzsgKytpKQorICAgIGNvbnRpbnVlOworICByZXR1cm4gMDsKK30KKworLy8gQ2hlY2sgdmFyYXJncyBhbmQgdmFfY29weS4KK3N0YXRpYyB2b2lkCit0ZXN0X3ZhcmFyZ3MgKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICB2YV9saXN0IGFyZ3M7CisgIHZhX3N0YXJ0IChhcmdzLCBmb3JtYXQpOworICB2YV9saXN0IGFyZ3NfY29weTsKKyAgdmFfY29weSAoYXJnc19jb3B5LCBhcmdzKTsKKworICBjb25zdCBjaGFyICpzdHI7CisgIGludCBudW1iZXI7CisgIGZsb2F0IGZudW1iZXI7CisKKyAgd2hpbGUgKCpmb3JtYXQpCisgICAgeworICAgICAgc3dpdGNoICgqZm9ybWF0KyspCisJeworCWNhc2UgJ3MnOiAvLyBzdHJpbmcKKwkgIHN0ciA9IHZhX2FyZyAoYXJnc19jb3B5LCBjb25zdCBjaGFyICopOworCSAgYnJlYWs7CisJY2FzZSAnZCc6IC8vIGludAorCSAgbnVtYmVyID0gdmFfYXJnIChhcmdzX2NvcHksIGludCk7CisJICBicmVhazsKKwljYXNlICdmJzogLy8gZmxvYXQKKwkgIGZudW1iZXIgPSB2YV9hcmcgKGFyZ3NfY29weSwgZG91YmxlKTsKKwkgIGJyZWFrOworCWRlZmF1bHQ6CisJICBicmVhazsKKwl9CisgICAgfQorICB2YV9lbmQgKGFyZ3NfY29weSk7CisgIHZhX2VuZCAoYXJncyk7Cit9CisKK2ludAorbWFpbiAoKQoreworCisgIC8vIENoZWNrIGJvb2wuCisgIF9Cb29sIHN1Y2Nlc3MgPSBmYWxzZTsKKworICAvLyBDaGVjayByZXN0cmljdC4KKyAgaWYgKHRlc3RfcmVzdHJpY3QgKCJTdHJpbmcgbGl0ZXJhbCIpID09IDApCisgICAgc3VjY2VzcyA9IHRydWU7CisgIGNoYXIgKnJlc3RyaWN0IG5ld3ZhciA9ICJBbm90aGVyIHN0cmluZyI7CisKKyAgLy8gQ2hlY2sgdmFyYXJncy4KKyAgdGVzdF92YXJhcmdzICgicywgZCcgZiAuIiwgInN0cmluZyIsIDY1LCAzNC4yMzQpOworICB0ZXN0X3ZhcmFyZ3NfbWFjcm9zICgpOworCisgIC8vIENoZWNrIGZsZXhpYmxlIGFycmF5IG1lbWJlcnMuCisgIHN0cnVjdCBpbmNvbXBsZXRlX2FycmF5ICppYSA9CisgICAgbWFsbG9jIChzaXplb2YgKHN0cnVjdCBpbmNvbXBsZXRlX2FycmF5KSArIChzaXplb2YgKGRvdWJsZSkgKiAxMCkpOworICBpYS0+ZGF0YXNpemUgPSAxMDsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBpYS0+ZGF0YXNpemU7ICsraSkKKyAgICBpYS0+ZGF0YVtpXSA9IGkgKiAxLjIzNDsKKworICAvLyBDaGVjayBuYW1lZCBpbml0aWFsaXplcnMuCisgIHN0cnVjdCBuYW1lZF9pbml0IG5pID0geworICAgIC5udW1iZXIgPSAzNCwKKyAgICAubmFtZSA9IEwiVGVzdCB3aWRlIHN0cmluZyIsCisgICAgLmF2ZXJhZ2UgPSA1NDMuMzQzNDMsCisgIH07CisKKyAgbmkubnVtYmVyID0gNTg7CisKKyAgaW50IGR5bmFtaWNfYXJyYXlbbmkubnVtYmVyXTsKKyAgZHluYW1pY19hcnJheVtuaS5udW1iZXIgLSAxXSA9IDU0MzsKKworICAvLyB3b3JrIGFyb3VuZCB1bnVzZWQgdmFyaWFibGUgd2FybmluZ3MKKyAgcmV0dXJuICghc3VjY2VzcyB8fCBiaWdudW0gPT0gMExMIHx8IHViaWdudW0gPT0gMHVMTCB8fCBuZXd2YXJbMF0gPT0gJ3gnCisJICB8fCBkeW5hbWljX2FycmF5W25pLm51bWJlciAtIDFdICE9IDU0Myk7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorZm9yIGFjX2FyZyBpbiAnJyAtc3RkPWdudTk5IC1zdGQ9Yzk5IC1jOTkgLUFDOTkgLXhjOTk9YWxsIC1xbGFuZ2x2bD1leHRjOTkKK2RvCisgIENDPSIkYWNfc2F2ZV9DQyAkYWNfYXJnIgorICBpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3Byb2dfY2NfYzk5PSRhY19hcmcKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0CisgIHRlc3QgIngkYWNfY3ZfcHJvZ19jY19jOTkiICE9ICJ4bm8iICYmIGJyZWFrCitkb25lCitybSAtZiBjb25mdGVzdC4kYWNfZXh0CitDQz0kYWNfc2F2ZV9DQworCitmaQorIyBBQ19DQUNIRV9WQUwKK2Nhc2UgIngkYWNfY3ZfcHJvZ19jY19jOTkiIGluCisgIHgpCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vbmUgbmVlZGVkIiA+JjUKKyRhc19lY2hvICJub25lIG5lZWRlZCIgPiY2OyB9IDs7CisgIHhubykKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogdW5zdXBwb3J0ZWQiID4mNQorJGFzX2VjaG8gInVuc3VwcG9ydGVkIiA+JjY7IH0gOzsKKyAgKikKKyAgICBDQz0iJENDICRhY19jdl9wcm9nX2NjX2M5OSIKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3Byb2dfY2NfYzk5IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcHJvZ19jY19jOTkiID4mNjsgfSA7OworZXNhYworaWYgdGVzdCAieCRhY19jdl9wcm9nX2NjX2M5OSIgIT0geG5vOyB0aGVuIDoKKworZmkKKworCithY19leHQ9Y3BwCithY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQoraWYgdGVzdCAteiAiJENYWCI7IHRoZW4KKyAgaWYgdGVzdCAtbiAiJENDQyI7IHRoZW4KKyAgICBDWFg9JENDQworICBlbHNlCisgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICBmb3IgYWNfcHJvZyBpbiBnKysgYysrIGdwcCBhQ0MgQ0MgY3h4IGNjKysgY2wuZXhlIEZDQyBLQ0MgUkNDIHhsQ19yIHhsQworICBkbworICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19DWFgrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQ1hYIjsgdGhlbgorICBhY19jdl9wcm9nX0NYWD0iJENYWCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX0NYWD0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorQ1hYPSRhY19jdl9wcm9nX0NYWAoraWYgdGVzdCAtbiAiJENYWCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDWFgiID4mNQorJGFzX2VjaG8gIiRDWFgiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICAgIHRlc3QgLW4gIiRDWFgiICYmIGJyZWFrCisgIGRvbmUKK2ZpCitpZiB0ZXN0IC16ICIkQ1hYIjsgdGhlbgorICBhY19jdF9DWFg9JENYWAorICBmb3IgYWNfcHJvZyBpbiBnKysgYysrIGdwcCBhQ0MgQ0MgY3h4IGNjKysgY2wuZXhlIEZDQyBLQ0MgUkNDIHhsQ19yIHhsQworZG8KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X0NYWCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9DWFgiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfQ1hYPSIkYWNfY3RfQ1hYIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfQ1hYPSIkYWNfcHJvZyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9DWFg9JGFjX2N2X3Byb2dfYWNfY3RfQ1hYCitpZiB0ZXN0IC1uICIkYWNfY3RfQ1hYIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0NYWCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0NYWCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgIHRlc3QgLW4gIiRhY19jdF9DWFgiICYmIGJyZWFrCitkb25lCisKKyAgaWYgdGVzdCAieCRhY19jdF9DWFgiID0geDsgdGhlbgorICAgIENYWD0iZysrIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIENYWD0kYWNfY3RfQ1hYCisgIGZpCitmaQorCisgIGZpCitmaQorIyBQcm92aWRlIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbXBpbGVyLgorJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEMrKyBjb21waWxlciB2ZXJzaW9uIiA+JjUKK3NldCBYICRhY19jb21waWxlCithY19jb21waWxlcj0kMgorZm9yIGFjX29wdGlvbiBpbiAtLXZlcnNpb24gLXYgLVYgLXF2ZXJzaW9uOyBkbworICB7IHsgYWNfdHJ5PSIkYWNfY29tcGlsZXIgJGFjX29wdGlvbiA+JjUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlciAkYWNfb3B0aW9uID4mNSIpIDI+Y29uZnRlc3QuZXJyCisgIGFjX3N0YXR1cz0kPworICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIHNlZCAnMTBhXAorLi4uIHJlc3Qgb2Ygc3RkZXJyIG91dHB1dCBkZWxldGVkIC4uLgorICAgICAgICAgMTBxJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQorICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1CisgIGZpCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KK2RvbmUKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMrKyBjb21waWxlciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMrKyBjb21waWxlci4uLiAiID4mNjsgfQoraWYgJHthY19jdl9jeHhfY29tcGlsZXJfZ251Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKyNpZm5kZWYgX19HTlVDX18KKyAgICAgICBjaG9rZSBtZQorI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY3h4X3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2NvbXBpbGVyX2dudT15ZXMKK2Vsc2UKKyAgYWNfY29tcGlsZXJfZ251PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CithY19jdl9jeHhfY29tcGlsZXJfZ251PSRhY19jb21waWxlcl9nbnUKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfY3h4X2NvbXBpbGVyX2dudSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2N4eF9jb21waWxlcl9nbnUiID4mNjsgfQoraWYgdGVzdCAkYWNfY29tcGlsZXJfZ251ID0geWVzOyB0aGVuCisgIEdYWD15ZXMKK2Vsc2UKKyAgR1hYPQorZmkKK2FjX3Rlc3RfQ1hYRkxBR1M9JHtDWFhGTEFHUytzZXR9CithY19zYXZlX0NYWEZMQUdTPSRDWFhGTEFHUworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRDWFggYWNjZXB0cyAtZyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRDWFggYWNjZXB0cyAtZy4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2N4eF9nKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfc2F2ZV9jeHhfd2Vycm9yX2ZsYWc9JGFjX2N4eF93ZXJyb3JfZmxhZworICAgYWNfY3h4X3dlcnJvcl9mbGFnPXllcworICAgYWNfY3ZfcHJvZ19jeHhfZz1ubworICAgQ1hYRkxBR1M9Ii1nIgorICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfcHJvZ19jeHhfZz15ZXMKK2Vsc2UKKyAgQ1hYRkxBR1M9IiIKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY3h4X3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY3h4X3dlcnJvcl9mbGFnPSRhY19zYXZlX2N4eF93ZXJyb3JfZmxhZworCSBDWFhGTEFHUz0iLWciCisJIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY3h4X3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3Byb2dfY3h4X2c9eWVzCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICBhY19jeHhfd2Vycm9yX2ZsYWc9JGFjX3NhdmVfY3h4X3dlcnJvcl9mbGFnCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wcm9nX2N4eF9nIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcHJvZ19jeHhfZyIgPiY2OyB9CitpZiB0ZXN0ICIkYWNfdGVzdF9DWFhGTEFHUyIgPSBzZXQ7IHRoZW4KKyAgQ1hYRkxBR1M9JGFjX3NhdmVfQ1hYRkxBR1MKK2VsaWYgdGVzdCAkYWNfY3ZfcHJvZ19jeHhfZyA9IHllczsgdGhlbgorICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorICAgIENYWEZMQUdTPSItZyAtTzIiCisgIGVsc2UKKyAgICBDWFhGTEFHUz0iLWciCisgIGZpCitlbHNlCisgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgQ1hYRkxBR1M9Ii1PMiIKKyAgZWxzZQorICAgIENYWEZMQUdTPQorICBmaQorZmkKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworZGVwY2M9IiRDWFgiICBhbV9jb21waWxlcl9saXN0PQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjLi4uICIgPiY2OyB9CitpZiAke2FtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLXogIiRBTURFUF9UUlVFIiAmJiB0ZXN0IC1mICIkYW1fZGVwY29tcCI7IHRoZW4KKyAgIyBXZSBtYWtlIGEgc3ViZGlyIGFuZCBkbyB0aGUgdGVzdHMgdGhlcmUuICBPdGhlcndpc2Ugd2UgY2FuIGVuZCB1cAorICAjIG1ha2luZyBib2d1cyBmaWxlcyB0aGF0IHdlIGRvbid0IGtub3cgYWJvdXQgYW5kIG5ldmVyIHJlbW92ZS4gIEZvcgorICAjIGluc3RhbmNlIGl0IHdhcyByZXBvcnRlZCB0aGF0IG9uIEhQLVVYIHRoZSBnY2MgdGVzdCB3aWxsIGVuZCB1cAorICAjIG1ha2luZyBhIGR1bW15IGZpbGUgbmFtZWQgYEQnIC0tIGJlY2F1c2UgYC1NRCcgbWVhbnMgYHB1dCB0aGUgb3V0cHV0CisgICMgaW4gRCcuCisgIHJtIC1yZiBjb25mdGVzdC5kaXIKKyAgbWtkaXIgY29uZnRlc3QuZGlyCisgICMgQ29weSBkZXBjb21wIHRvIHN1YmRpciBiZWNhdXNlIG90aGVyd2lzZSB3ZSB3b24ndCBmaW5kIGl0IGlmIHdlJ3JlCisgICMgdXNpbmcgYSByZWxhdGl2ZSBkaXJlY3RvcnkuCisgIGNwICIkYW1fZGVwY29tcCIgY29uZnRlc3QuZGlyCisgIGNkIGNvbmZ0ZXN0LmRpcgorICAjIFdlIHdpbGwgYnVpbGQgb2JqZWN0cyBhbmQgZGVwZW5kZW5jaWVzIGluIGEgc3ViZGlyZWN0b3J5IGJlY2F1c2UKKyAgIyBpdCBoZWxwcyB0byBkZXRlY3QgaW5hcHBsaWNhYmxlIGRlcGVuZGVuY3kgbW9kZXMuICBGb3IgaW5zdGFuY2UKKyAgIyBib3RoIFRydTY0J3MgY2MgYW5kIElDQyBzdXBwb3J0IC1NRCB0byBvdXRwdXQgZGVwZW5kZW5jaWVzIGFzIGEKKyAgIyBzaWRlIGVmZmVjdCBvZiBjb21waWxhdGlvbiwgYnV0IElDQyB3aWxsIHB1dCB0aGUgZGVwZW5kZW5jaWVzIGluCisgICMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHdoaWxlIFRydTY0IHdpbGwgcHV0IHRoZW0gaW4gdGhlIG9iamVjdAorICAjIGRpcmVjdG9yeS4KKyAgbWtkaXIgc3ViCisKKyAgYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPW5vbmUKKyAgaWYgdGVzdCAiJGFtX2NvbXBpbGVyX2xpc3QiID0gIiI7IHRoZW4KKyAgICAgYW1fY29tcGlsZXJfbGlzdD1gc2VkIC1uICdzL14jKlwoW2EtekEtWjAtOV0qXCkpJC9cMS9wJyA8IC4vZGVwY29tcGAKKyAgZmkKKyAgYW1fX3VuaXZlcnNhbD1mYWxzZQorICBjYXNlICIgJGRlcGNjICIgaW4gIygKKyAgICAgKlwgLWFyY2hcICpcIC1hcmNoXCAqKSBhbV9fdW5pdmVyc2FsPXRydWUgOzsKKyAgICAgZXNhYworCisgIGZvciBkZXBtb2RlIGluICRhbV9jb21waWxlcl9saXN0OyBkbworICAgICMgU2V0dXAgYSBzb3VyY2Ugd2l0aCBtYW55IGRlcGVuZGVuY2llcywgYmVjYXVzZSBzb21lIGNvbXBpbGVycworICAgICMgbGlrZSB0byB3cmFwIGxhcmdlIGRlcGVuZGVuY3kgbGlzdHMgb24gY29sdW1uIDgwICh3aXRoIFwpLCBhbmQKKyAgICAjIHdlIHNob3VsZCBub3QgY2hvb3NlIGEgZGVwY29tcCBtb2RlIHdoaWNoIGlzIGNvbmZ1c2VkIGJ5IHRoaXMuCisgICAgIworICAgICMgV2UgbmVlZCB0byByZWNyZWF0ZSB0aGVzZSBmaWxlcyBmb3IgZWFjaCB0ZXN0LCBhcyB0aGUgY29tcGlsZXIgbWF5CisgICAgIyBvdmVyd3JpdGUgc29tZSBvZiB0aGVtIHdoZW4gdGVzdGluZyB3aXRoIG9ic2N1cmUgY29tbWFuZCBsaW5lcy4KKyAgICAjIFRoaXMgaGFwcGVucyBhdCBsZWFzdCB3aXRoIHRoZSBBSVggQyBjb21waWxlci4KKyAgICA6ID4gc3ViL2NvbmZ0ZXN0LmMKKyAgICBmb3IgaSBpbiAxIDIgMyA0IDUgNjsgZG8KKyAgICAgIGVjaG8gJyNpbmNsdWRlICJjb25mdHN0JyRpJy5oIicgPj4gc3ViL2NvbmZ0ZXN0LmMKKyAgICAgICMgVXNpbmcgYDogPiBzdWIvY29uZnRzdCRpLmgnIGNyZWF0ZXMgb25seSBzdWIvY29uZnRzdDEuaCB3aXRoCisgICAgICAjIFNvbGFyaXMgOCdzIHsvdXNyLH0vYmluL3NoLgorICAgICAgdG91Y2ggc3ViL2NvbmZ0c3QkaS5oCisgICAgZG9uZQorICAgIGVjaG8gIiR7YW1fX2luY2x1ZGV9ICR7YW1fX3F1b3RlfXN1Yi9jb25mdGVzdC5QbyR7YW1fX3F1b3RlfSIgPiBjb25mbWYKKworICAgICMgV2UgY2hlY2sgd2l0aCBgLWMnIGFuZCBgLW8nIGZvciB0aGUgc2FrZSBvZiB0aGUgImRhc2htc3Rkb3V0IgorICAgICMgbW9kZS4gIEl0IHR1cm5zIG91dCB0aGF0IHRoZSBTdW5Qcm8gQysrIGNvbXBpbGVyIGRvZXMgbm90IHByb3Blcmx5CisgICAgIyBoYW5kbGUgYC1NIC1vJywgYW5kIHdlIG5lZWQgdG8gZGV0ZWN0IHRoaXMuICBBbHNvLCBzb21lIEludGVsCisgICAgIyB2ZXJzaW9ucyBoYWQgdHJvdWJsZSB3aXRoIG91dHB1dCBpbiBzdWJkaXJzCisgICAgYW1fX29iaj1zdWIvY29uZnRlc3QuJHtPQkpFWFQtb30KKyAgICBhbV9fbWludXNfb2JqPSItbyAkYW1fX29iaiIKKyAgICBjYXNlICRkZXBtb2RlIGluCisgICAgZ2NjKQorICAgICAgIyBUaGlzIGRlcG1vZGUgY2F1c2VzIGEgY29tcGlsZXIgcmFjZSBpbiB1bml2ZXJzYWwgbW9kZS4KKyAgICAgIHRlc3QgIiRhbV9fdW5pdmVyc2FsIiA9IGZhbHNlIHx8IGNvbnRpbnVlCisgICAgICA7OworICAgIG5vc2lkZWVmZmVjdCkKKyAgICAgICMgYWZ0ZXIgdGhpcyB0YWcsIG1lY2hhbmlzbXMgYXJlIG5vdCBieSBzaWRlLWVmZmVjdCwgc28gdGhleSdsbAorICAgICAgIyBvbmx5IGJlIHVzZWQgd2hlbiBleHBsaWNpdGx5IHJlcXVlc3RlZAorICAgICAgaWYgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgPSB4eWVzOyB0aGVuCisJY29udGludWUKKyAgICAgIGVsc2UKKwlicmVhaworICAgICAgZmkKKyAgICAgIDs7CisgICAgbXN2YzcgfCBtc3ZjN21zeXMgfCBtc3Zpc3VhbGNwcCB8IG1zdmNtc3lzKQorICAgICAgIyBUaGlzIGNvbXBpbGVyIHdvbid0IGdyb2sgYC1jIC1vJywgYnV0IGFsc28sIHRoZSBtaW51c28gdGVzdCBoYXMKKyAgICAgICMgbm90IHJ1biB5ZXQuICBUaGVzZSBkZXBtb2RlcyBhcmUgbGF0ZSBlbm91Z2ggaW4gdGhlIGdhbWUsIGFuZAorICAgICAgIyBzbyB3ZWFrIHRoYXQgdGhlaXIgZnVuY3Rpb25pbmcgc2hvdWxkIG5vdCBiZSBpbXBhY3RlZC4KKyAgICAgIGFtX19vYmo9Y29uZnRlc3QuJHtPQkpFWFQtb30KKyAgICAgIGFtX19taW51c19vYmo9CisgICAgICA7OworICAgIG5vbmUpIGJyZWFrIDs7CisgICAgZXNhYworICAgIGlmIGRlcG1vZGU9JGRlcG1vZGUgXAorICAgICAgIHNvdXJjZT1zdWIvY29uZnRlc3QuYyBvYmplY3Q9JGFtX19vYmogXAorICAgICAgIGRlcGZpbGU9c3ViL2NvbmZ0ZXN0LlBvIHRtcGRlcGZpbGU9c3ViL2NvbmZ0ZXN0LlRQbyBcCisgICAgICAgJFNIRUxMIC4vZGVwY29tcCAkZGVwY2MgLWMgJGFtX19taW51c19vYmogc3ViL2NvbmZ0ZXN0LmMgXAorICAgICAgICAgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0LmVyciAmJgorICAgICAgIGdyZXAgc3ViL2NvbmZ0c3QxLmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKKyAgICAgICBncmVwIHN1Yi9jb25mdHN0Ni5oIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgZ3JlcCAkYW1fX29iaiBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorICAgICAgICR7TUFLRS1tYWtlfSAtcyAtZiBjb25mbWYgPiAvZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgIyBpY2MgZG9lc24ndCBjaG9rZSBvbiB1bmtub3duIG9wdGlvbnMsIGl0IHdpbGwganVzdCBpc3N1ZSB3YXJuaW5ncworICAgICAgIyBvciByZW1hcmtzIChldmVuIHdpdGggLVdlcnJvcikuICBTbyB3ZSBncmVwIHN0ZGVyciBmb3IgYW55IG1lc3NhZ2UKKyAgICAgICMgdGhhdCBzYXlzIGFuIG9wdGlvbiB3YXMgaWdub3JlZCBvciBub3Qgc3VwcG9ydGVkLgorICAgICAgIyBXaGVuIGdpdmVuIC1NUCwgaWNjIDcuMCBhbmQgNy4xIGNvbXBsYWluIHRodXNseToKKyAgICAgICMgICBpY2M6IENvbW1hbmQgbGluZSB3YXJuaW5nOiBpZ25vcmluZyBvcHRpb24gJy1NJzsgbm8gYXJndW1lbnQgcmVxdWlyZWQKKyAgICAgICMgVGhlIGRpYWdub3NpcyBjaGFuZ2VkIGluIGljYyA4LjA6CisgICAgICAjICAgaWNjOiBDb21tYW5kIGxpbmUgcmVtYXJrOiBvcHRpb24gJy1NUCcgbm90IHN1cHBvcnRlZAorICAgICAgaWYgKGdyZXAgJ2lnbm9yaW5nIG9wdGlvbicgY29uZnRlc3QuZXJyIHx8CisgICAgICAgICAgZ3JlcCAnbm90IHN1cHBvcnRlZCcgY29uZnRlc3QuZXJyKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOjsgZWxzZQorICAgICAgICBhbV9jdl9DWFhfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9JGRlcG1vZGUKKyAgICAgICAgYnJlYWsKKyAgICAgIGZpCisgICAgZmkKKyAgZG9uZQorCisgIGNkIC4uCisgIHJtIC1yZiBjb25mdGVzdC5kaXIKK2Vsc2UKKyAgYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPW5vbmUKK2ZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY1CiskYXNfZWNobyAiJGFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY2OyB9CitDWFhERVBNT0RFPWRlcG1vZGU9JGFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZQorCisgaWYKKyAgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgIT0geG5vIFwKKyAgJiYgdGVzdCAiJGFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPSBnY2MzOyB0aGVuCisgIGFtX19mYXN0ZGVwQ1hYX1RSVUU9CisgIGFtX19mYXN0ZGVwQ1hYX0ZBTFNFPScjJworZWxzZQorICBhbV9fZmFzdGRlcENYWF9UUlVFPScjJworICBhbV9fZmFzdGRlcENYWF9GQUxTRT0KK2ZpCisKKworaWYgdGVzdCAieCRDQyIgIT0geGNjOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkQ0MgYW5kIGNjIHVuZGVyc3RhbmQgLWMgYW5kIC1vIHRvZ2V0aGVyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJENDIGFuZCBjYyB1bmRlcnN0YW5kIC1jIGFuZCAtbyB0b2dldGhlci4uLiAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgY2MgdW5kZXJzdGFuZHMgLWMgYW5kIC1vIHRvZ2V0aGVyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgY2MgdW5kZXJzdGFuZHMgLWMgYW5kIC1vIHRvZ2V0aGVyLi4uICIgPiY2OyB9CitmaQorc2V0IGR1bW15ICRDQzsgYWNfY2M9YCRhc19lY2hvICIkMiIgfAorCQkgICAgICBzZWQgJ3MvW15hLXpBLVowLTlfXS9fL2c7cy9eWzAtOV0vXy8nYAoraWYgZXZhbCBcJHthY19jdl9wcm9nX2NjXyR7YWNfY2N9X2Nfbys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorIyBNYWtlIHN1cmUgaXQgd29ya3MgYm90aCB3aXRoICRDQyBhbmQgd2l0aCBzaW1wbGUgY2MuCisjIFdlIGRvIHRoZSB0ZXN0IHR3aWNlIGJlY2F1c2Ugc29tZSBjb21waWxlcnMgcmVmdXNlIHRvIG92ZXJ3cml0ZSBhbgorIyBleGlzdGluZyAubyBmaWxlIHdpdGggLW8sIHRob3VnaCB0aGV5IHdpbGwgY3JlYXRlIG9uZS4KK2FjX3RyeT0nJENDIC1jIGNvbmZ0ZXN0LiRhY19leHQgLW8gY29uZnRlc3QyLiRhY19vYmpleHQgPiY1Jworcm0gLWYgY29uZnRlc3QyLioKK2lmIHsgeyBjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY190cnkiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJgorICAgdGVzdCAtZiBjb25mdGVzdDIuJGFjX29iamV4dCAmJiB7IHsgY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfdHJ5IikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07Cit0aGVuCisgIGV2YWwgYWNfY3ZfcHJvZ19jY18ke2FjX2NjfV9jX289eWVzCisgIGlmIHRlc3QgIngkQ0MiICE9IHhjYzsgdGhlbgorICAgICMgVGVzdCBmaXJzdCB0aGF0IGNjIGV4aXN0cyBhdCBhbGwuCisgICAgaWYgeyBhY190cnk9J2NjIC1jIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworICB7IHsgY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfdHJ5IikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IH07IHRoZW4KKyAgICAgIGFjX3RyeT0nY2MgLWMgY29uZnRlc3QuJGFjX2V4dCAtbyBjb25mdGVzdDIuJGFjX29iamV4dCA+JjUnCisgICAgICBybSAtZiBjb25mdGVzdDIuKgorICAgICAgaWYgeyB7IGNhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmCisJIHRlc3QgLWYgY29uZnRlc3QyLiRhY19vYmpleHQgJiYgeyB7IGNhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OworICAgICAgdGhlbgorCSMgY2Mgd29ya3MgdG9vLgorCToKKyAgICAgIGVsc2UKKwkjIGNjIGV4aXN0cyBidXQgZG9lc24ndCBsaWtlIC1vLgorCWV2YWwgYWNfY3ZfcHJvZ19jY18ke2FjX2NjfV9jX289bm8KKyAgICAgIGZpCisgICAgZmkKKyAgZmkKK2Vsc2UKKyAgZXZhbCBhY19jdl9wcm9nX2NjXyR7YWNfY2N9X2Nfbz1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QqCisKK2ZpCitpZiBldmFsIHRlc3QgXCRhY19jdl9wcm9nX2NjXyR7YWNfY2N9X2NfbyA9IHllczsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKworJGFzX2VjaG8gIiNkZWZpbmUgTk9fTUlOVVNfQ19NSU5VU19PIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisjIEZJWE1FOiB3ZSByZWx5IG9uIHRoZSBjYWNoZSB2YXJpYWJsZSBuYW1lIGJlY2F1c2UKKyMgdGhlcmUgaXMgbm8gb3RoZXIgd2F5Lgorc2V0IGR1bW15ICRDQworYW1fY2M9YGVjaG8gJDIgfCBzZWQgJ3MvW15hLXpBLVowLTlfXS9fL2c7cy9eWzAtOV0vXy8nYAorZXZhbCBhbV90PVwkYWNfY3ZfcHJvZ19jY18ke2FtX2NjfV9jX28KK2lmIHRlc3QgIiRhbV90IiAhPSB5ZXM7IHRoZW4KKyAgICMgTG9zaW5nIGNvbXBpbGVyLCBzbyBvdmVycmlkZSB3aXRoIHRoZSBzY3JpcHQuCisgICAjIEZJWE1FOiBJdCBpcyB3cm9uZyB0byByZXdyaXRlIENDLgorICAgIyBCdXQgaWYgd2UgZG9uJ3QgdGhlbiB3ZSBnZXQgaW50byB0cm91YmxlIG9mIG9uZSBzb3J0IG9yIGFub3RoZXIuCisgICAjIEEgbG9uZ2VyLXRlcm0gZml4IHdvdWxkIGJlIHRvIGhhdmUgYXV0b21ha2UgdXNlIGFtX19DQyBpbiB0aGlzIGNhc2UsCisgICAjIGFuZCB0aGVuIHdlIGNvdWxkIHNldCBhbV9fQ0M9IlwkKHRvcF9zcmNkaXIpL2NvbXBpbGUgXCQoQ0MpIgorICAgQ0M9IiRhbV9hdXhfZGlyL2NvbXBpbGUgJENDIgorZmkKKworCisKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IuLi4gIiA+JjY7IH0KKyMgT24gU3Vucywgc29tZXRpbWVzICRDUFAgbmFtZXMgYSBkaXJlY3RvcnkuCitpZiB0ZXN0IC1uICIkQ1BQIiAmJiB0ZXN0IC1kICIkQ1BQIjsgdGhlbgorICBDUFA9CitmaQoraWYgdGVzdCAteiAiJENQUCI7IHRoZW4KKyAgaWYgJHthY19jdl9wcm9nX0NQUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgICAgICAjIERvdWJsZSBxdW90ZXMgYmVjYXVzZSBDUFAgbmVlZHMgdG8gYmUgZXhwYW5kZWQKKyAgICBmb3IgQ1BQIGluICIkQ0MgLUUiICIkQ0MgLUUgLXRyYWRpdGlvbmFsLWNwcCIgIi9saWIvY3BwIgorICAgIGRvCisgICAgICBhY19wcmVwcm9jX29rPWZhbHNlCitmb3IgYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKK2RvCisgICMgVXNlIGEgaGVhZGVyIGZpbGUgdGhhdCBjb21lcyB3aXRoIGdjYywgc28gY29uZmlndXJpbmcgZ2xpYmMKKyAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCisgICMgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAjIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4KKyAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKKyAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5bnRheCBlcnJvciIgaXMgaGVyZSB0byBjYXRjaCB0aGlzIGNhc2UuCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisJCSAgICAgU3ludGF4IGVycm9yCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorCitlbHNlCisgICMgQnJva2VuOiBmYWlscyBvbiB2YWxpZCBpbnB1dC4KK2NvbnRpbnVlCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAorCisgICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub25leGlzdGVudCBoZWFkZXJzCisgICMgY2FuIGJlIGRldGVjdGVkIGFuZCBob3cuCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKyAgIyBCcm9rZW46IHN1Y2Nlc3Mgb24gaW52YWxpZCBpbnB1dC4KK2NvbnRpbnVlCitlbHNlCisgICMgUGFzc2VzIGJvdGggdGVzdHMuCithY19wcmVwcm9jX29rPToKK2JyZWFrCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAorCitkb25lCisjIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BSRVBST0NfSUZFTFNFJ3MgY2xlYW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KK3JtIC1mIGNvbmZ0ZXN0LmkgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK2lmICRhY19wcmVwcm9jX29rOyB0aGVuIDoKKyAgYnJlYWsKK2ZpCisKKyAgICBkb25lCisgICAgYWNfY3ZfcHJvZ19DUFA9JENQUAorCitmaQorICBDUFA9JGFjX2N2X3Byb2dfQ1BQCitlbHNlCisgIGFjX2N2X3Byb2dfQ1BQPSRDUFAKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENQUCIgPiY1CiskYXNfZWNobyAiJENQUCIgPiY2OyB9CithY19wcmVwcm9jX29rPWZhbHNlCitmb3IgYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKK2RvCisgICMgVXNlIGEgaGVhZGVyIGZpbGUgdGhhdCBjb21lcyB3aXRoIGdjYywgc28gY29uZmlndXJpbmcgZ2xpYmMKKyAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCisgICMgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAjIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4KKyAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKKyAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5bnRheCBlcnJvciIgaXMgaGVyZSB0byBjYXRjaCB0aGlzIGNhc2UuCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisJCSAgICAgU3ludGF4IGVycm9yCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorCitlbHNlCisgICMgQnJva2VuOiBmYWlscyBvbiB2YWxpZCBpbnB1dC4KK2NvbnRpbnVlCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAorCisgICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub25leGlzdGVudCBoZWFkZXJzCisgICMgY2FuIGJlIGRldGVjdGVkIGFuZCBob3cuCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKyAgIyBCcm9rZW46IHN1Y2Nlc3Mgb24gaW52YWxpZCBpbnB1dC4KK2NvbnRpbnVlCitlbHNlCisgICMgUGFzc2VzIGJvdGggdGVzdHMuCithY19wcmVwcm9jX29rPToKK2JyZWFrCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAorCitkb25lCisjIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BSRVBST0NfSUZFTFNFJ3MgY2xlYW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KK3JtIC1mIGNvbmZ0ZXN0LmkgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK2lmICRhY19wcmVwcm9jX29rOyB0aGVuIDoKKworZWxzZQorICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJDIHByZXByb2Nlc3NvciBcIiRDUFBcIiBmYWlscyBzYW5pdHkgY2hlY2sKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CitmaQorCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZ3JlcCB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lcyBhbmQgLWUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGdyZXAgdGhhdCBoYW5kbGVzIGxvbmcgbGluZXMgYW5kIC1lLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfR1JFUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLXogIiRHUkVQIjsgdGhlbgorICBhY19wYXRoX0dSRVBfZm91bmQ9ZmFsc2UKKyAgIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBlYWNoIG9mIFBST0dOQU1FLUxJU1QKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4KK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfcHJvZyBpbiBncmVwIGdncmVwOyBkbworICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgICAgYWNfcGF0aF9HUkVQPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IgorICAgICAgeyB0ZXN0IC1mICIkYWNfcGF0aF9HUkVQIiAmJiAkYXNfdGVzdF94ICIkYWNfcGF0aF9HUkVQIjsgfSB8fCBjb250aW51ZQorIyBDaGVjayBmb3IgR05VIGFjX3BhdGhfR1JFUCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgorICAjIENoZWNrIGZvciBHTlUgJGFjX3BhdGhfR1JFUAorY2FzZSBgIiRhY19wYXRoX0dSRVAiIC0tdmVyc2lvbiAyPiYxYCBpbgorKkdOVSopCisgIGFjX2N2X3BhdGhfR1JFUD0iJGFjX3BhdGhfR1JFUCIgYWNfcGF0aF9HUkVQX2ZvdW5kPTo7OworKikKKyAgYWNfY291bnQ9MAorICAkYXNfZWNob19uIDAxMjM0NTY3ODkgPiJjb25mdGVzdC5pbiIKKyAgd2hpbGUgOgorICBkbworICAgIGNhdCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5pbiIgPiJjb25mdGVzdC50bXAiCisgICAgbXYgImNvbmZ0ZXN0LnRtcCIgImNvbmZ0ZXN0LmluIgorICAgIGNwICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0Lm5sIgorICAgICRhc19lY2hvICdHUkVQJyA+PiAiY29uZnRlc3QubmwiCisgICAgIiRhY19wYXRoX0dSRVAiIC1lICdHUkVQJCcgLWUgJy0oY2Fubm90IG1hdGNoKS0nIDwgImNvbmZ0ZXN0Lm5sIiA+ImNvbmZ0ZXN0Lm91dCIgMj4vZGV2L251bGwgfHwgYnJlYWsKKyAgICBkaWZmICJjb25mdGVzdC5vdXQiICJjb25mdGVzdC5ubCIgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFrCisgICAgYXNfZm5fYXJpdGggJGFjX2NvdW50ICsgMSAmJiBhY19jb3VudD0kYXNfdmFsCisgICAgaWYgdGVzdCAkYWNfY291bnQgLWd0ICR7YWNfcGF0aF9HUkVQX21heC0wfTsgdGhlbgorICAgICAgIyBCZXN0IG9uZSBzbyBmYXIsIHNhdmUgaXQgYnV0IGtlZXAgbG9va2luZyBmb3IgYSBiZXR0ZXIgb25lCisgICAgICBhY19jdl9wYXRoX0dSRVA9IiRhY19wYXRoX0dSRVAiCisgICAgICBhY19wYXRoX0dSRVBfbWF4PSRhY19jb3VudAorICAgIGZpCisgICAgIyAxMCooMl4xMCkgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAorICAgIHRlc3QgJGFjX2NvdW50IC1ndCAxMCAmJiBicmVhaworICBkb25lCisgIHJtIC1mIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5ubCBjb25mdGVzdC5vdXQ7OworZXNhYworCisgICAgICAkYWNfcGF0aF9HUkVQX2ZvdW5kICYmIGJyZWFrIDMKKyAgICBkb25lCisgIGRvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworICBpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9HUkVQIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIGdyZXAgY291bGQgYmUgZm91bmQgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluIiAiJExJTkVOTyIgNQorICBmaQorZWxzZQorICBhY19jdl9wYXRoX0dSRVA9JEdSRVAKK2ZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3BhdGhfR1JFUCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3BhdGhfR1JFUCIgPiY2OyB9CisgR1JFUD0iJGFjX2N2X3BhdGhfR1JFUCIKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBlZ3JlcCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZWdyZXAuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9FR1JFUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIGVjaG8gYSB8ICRHUkVQIC1FICcoYXxiKScgPi9kZXYvbnVsbCAyPiYxCisgICB0aGVuIGFjX2N2X3BhdGhfRUdSRVA9IiRHUkVQIC1FIgorICAgZWxzZQorICAgICBpZiB0ZXN0IC16ICIkRUdSRVAiOyB0aGVuCisgIGFjX3BhdGhfRUdSRVBfZm91bmQ9ZmFsc2UKKyAgIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBlYWNoIG9mIFBST0dOQU1FLUxJU1QKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4KK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfcHJvZyBpbiBlZ3JlcDsgZG8KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgICAgIGFjX3BhdGhfRUdSRVA9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCisgICAgICB7IHRlc3QgLWYgIiRhY19wYXRoX0VHUkVQIiAmJiAkYXNfdGVzdF94ICIkYWNfcGF0aF9FR1JFUCI7IH0gfHwgY29udGludWUKKyMgQ2hlY2sgZm9yIEdOVSBhY19wYXRoX0VHUkVQIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCisgICMgQ2hlY2sgZm9yIEdOVSAkYWNfcGF0aF9FR1JFUAorY2FzZSBgIiRhY19wYXRoX0VHUkVQIiAtLXZlcnNpb24gMj4mMWAgaW4KKypHTlUqKQorICBhY19jdl9wYXRoX0VHUkVQPSIkYWNfcGF0aF9FR1JFUCIgYWNfcGF0aF9FR1JFUF9mb3VuZD06OzsKKyopCisgIGFjX2NvdW50PTAKKyAgJGFzX2VjaG9fbiAwMTIzNDU2Nzg5ID4iY29uZnRlc3QuaW4iCisgIHdoaWxlIDoKKyAgZG8KKyAgICBjYXQgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QuaW4iID4iY29uZnRlc3QudG1wIgorICAgIG12ICJjb25mdGVzdC50bXAiICJjb25mdGVzdC5pbiIKKyAgICBjcCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5ubCIKKyAgICAkYXNfZWNobyAnRUdSRVAnID4+ICJjb25mdGVzdC5ubCIKKyAgICAiJGFjX3BhdGhfRUdSRVAiICdFR1JFUCQnIDwgImNvbmZ0ZXN0Lm5sIiA+ImNvbmZ0ZXN0Lm91dCIgMj4vZGV2L251bGwgfHwgYnJlYWsKKyAgICBkaWZmICJjb25mdGVzdC5vdXQiICJjb25mdGVzdC5ubCIgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFrCisgICAgYXNfZm5fYXJpdGggJGFjX2NvdW50ICsgMSAmJiBhY19jb3VudD0kYXNfdmFsCisgICAgaWYgdGVzdCAkYWNfY291bnQgLWd0ICR7YWNfcGF0aF9FR1JFUF9tYXgtMH07IHRoZW4KKyAgICAgICMgQmVzdCBvbmUgc28gZmFyLCBzYXZlIGl0IGJ1dCBrZWVwIGxvb2tpbmcgZm9yIGEgYmV0dGVyIG9uZQorICAgICAgYWNfY3ZfcGF0aF9FR1JFUD0iJGFjX3BhdGhfRUdSRVAiCisgICAgICBhY19wYXRoX0VHUkVQX21heD0kYWNfY291bnQKKyAgICBmaQorICAgICMgMTAqKDJeMTApIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKKyAgICB0ZXN0ICRhY19jb3VudCAtZ3QgMTAgJiYgYnJlYWsKKyAgZG9uZQorICBybSAtZiBjb25mdGVzdC5pbiBjb25mdGVzdC50bXAgY29uZnRlc3QubmwgY29uZnRlc3Qub3V0OzsKK2VzYWMKKworICAgICAgJGFjX3BhdGhfRUdSRVBfZm91bmQgJiYgYnJlYWsgMworICAgIGRvbmUKKyAgZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisgIGlmIHRlc3QgLXogIiRhY19jdl9wYXRoX0VHUkVQIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIGVncmVwIGNvdWxkIGJlIGZvdW5kIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbiIgIiRMSU5FTk8iIDUKKyAgZmkKK2Vsc2UKKyAgYWNfY3ZfcGF0aF9FR1JFUD0kRUdSRVAKK2ZpCisKKyAgIGZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wYXRoX0VHUkVQIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcGF0aF9FR1JFUCIgPiY2OyB9CisgRUdSRVA9IiRhY19jdl9wYXRoX0VHUkVQIgorCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfaGVhZGVyX3N0ZGMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZmxvYXQuaD4KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9oZWFkZXJfc3RkYz15ZXMKK2Vsc2UKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgIyBTdW5PUyA0Lnggc3RyaW5nLmggZG9lcyBub3QgZGVjbGFyZSBtZW0qLCBjb250cmFyeSB0byBBTlNJLgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgIm1lbWNociIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworZWxzZQorICBhY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCitmaQorCitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICAjIElTQyAyLjAuMiBzdGRsaWIuaCBkb2VzIG5vdCBkZWNsYXJlIGZyZWUsIGNvbnRyYXJ5IHRvIEFOU0kuCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAiZnJlZSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworZWxzZQorICBhY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCitmaQorCitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICAjIC9iaW4vY2MgaW4gSXJpeC00LjAuNSBnZXRzIG5vbi1BTlNJIGN0eXBlIG1hY3JvcyB1bmxlc3MgdXNpbmcgLWFuc2kuCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgOgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpZiAoKCcgJyAmIDB4MEZGKSA9PSAweDAyMCkKKyMgZGVmaW5lIElTTE9XRVIoYykgKCdhJyA8PSAoYykgJiYgKGMpIDw9ICd6JykKKyMgZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykgPyAnQScgKyAoKGMpIC0gJ2EnKSA6IChjKSkKKyNlbHNlCisjIGRlZmluZSBJU0xPV0VSKGMpIFwKKwkJICAgKCgnYScgPD0gKGMpICYmIChjKSA8PSAnaScpIFwKKwkJICAgICB8fCAoJ2onIDw9IChjKSAmJiAoYykgPD0gJ3InKSBcCisJCSAgICAgfHwgKCdzJyA8PSAoYykgJiYgKGMpIDw9ICd6JykpCisjIGRlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gKChjKSB8IDB4NDApIDogKGMpKQorI2VuZGlmCisKKyNkZWZpbmUgWE9SKGUsIGYpICgoKGUpICYmICEoZikpIHx8ICghKGUpICYmIChmKSkpCitpbnQKK21haW4gKCkKK3sKKyAgaW50IGk7CisgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKKyAgICBpZiAoWE9SIChpc2xvd2VyIChpKSwgSVNMT1dFUiAoaSkpCisJfHwgdG91cHBlciAoaSkgIT0gVE9VUFBFUiAoaSkpCisgICAgICByZXR1cm4gMjsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorCitlbHNlCisgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9zdGRjIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfaGVhZGVyX3N0ZGMiID4mNjsgfQoraWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgU1REQ19IRUFERVJTIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisjIE9uIElSSVggNS4zLCBzeXMvdHlwZXMgYW5kIGludHR5cGVzLmggYXJlIGNvbmZsaWN0aW5nLgorZm9yIGFjX2hlYWRlciBpbiBzeXMvdHlwZXMuaCBzeXMvc3RhdC5oIHN0ZGxpYi5oIHN0cmluZy5oIG1lbW9yeS5oIHN0cmluZ3MuaCBcCisJCSAgaW50dHlwZXMuaCBzdGRpbnQuaCB1bmlzdGQuaAorZG8gOgorICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkYWNfaW5jbHVkZXNfZGVmYXVsdAorIgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworCisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJtaW5peC9jb25maWcuaCIgImFjX2N2X2hlYWRlcl9taW5peF9jb25maWdfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfbWluaXhfY29uZmlnX2giID0geHllczsgdGhlbiA6CisgIE1JTklYPXllcworZWxzZQorICBNSU5JWD0KK2ZpCisKKworICBpZiB0ZXN0ICIkTUlOSVgiID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIF9QT1NJWF9TT1VSQ0UgMSIgPj5jb25mZGVmcy5oCisKKworJGFzX2VjaG8gIiNkZWZpbmUgX1BPU0lYXzFfU09VUkNFIDIiID4+Y29uZmRlZnMuaAorCisKKyRhc19lY2hvICIjZGVmaW5lIF9NSU5JWCAxIiA+PmNvbmZkZWZzLmgKKworICBmaQorCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGl0IGlzIHNhZmUgdG8gZGVmaW5lIF9fRVhURU5TSU9OU19fIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgaXQgaXMgc2FmZSB0byBkZWZpbmUgX19FWFRFTlNJT05TX18uLi4gIiA+JjY7IH0KK2lmICR7YWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX18rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyMJICBkZWZpbmUgX19FWFRFTlNJT05TX18gMQorCSAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX189eWVzCitlbHNlCisgIGFjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fIiA+JjY7IH0KKyAgdGVzdCAkYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX18gPSB5ZXMgJiYKKyAgICAkYXNfZWNobyAiI2RlZmluZSBfX0VYVEVOU0lPTlNfXyAxIiA+PmNvbmZkZWZzLmgKKworICAkYXNfZWNobyAiI2RlZmluZSBfQUxMX1NPVVJDRSAxIiA+PmNvbmZkZWZzLmgKKworICAkYXNfZWNobyAiI2RlZmluZSBfR05VX1NPVVJDRSAxIiA+PmNvbmZkZWZzLmgKKworICAkYXNfZWNobyAiI2RlZmluZSBfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MgMSIgPj5jb25mZGVmcy5oCisKKyAgJGFzX2VjaG8gIiNkZWZpbmUgX1RBTkRFTV9TT1VSQ0UgMSIgPj5jb25mZGVmcy5oCisKKworYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3NvciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3Nvci4uLiAiID4mNjsgfQorIyBPbiBTdW5zLCBzb21ldGltZXMgJENQUCBuYW1lcyBhIGRpcmVjdG9yeS4KK2lmIHRlc3QgLW4gIiRDUFAiICYmIHRlc3QgLWQgIiRDUFAiOyB0aGVuCisgIENQUD0KK2ZpCitpZiB0ZXN0IC16ICIkQ1BQIjsgdGhlbgorICBpZiAke2FjX2N2X3Byb2dfQ1BQKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgICAgICMgRG91YmxlIHF1b3RlcyBiZWNhdXNlIENQUCBuZWVkcyB0byBiZSBleHBhbmRlZAorICAgIGZvciBDUFAgaW4gIiRDQyAtRSIgIiRDQyAtRSAtdHJhZGl0aW9uYWwtY3BwIiAiL2xpYi9jcHAiCisgICAgZG8KKyAgICAgIGFjX3ByZXByb2Nfb2s9ZmFsc2UKK2ZvciBhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluICcnIHllcworZG8KKyAgIyBVc2UgYSBoZWFkZXIgZmlsZSB0aGF0IGNvbWVzIHdpdGggZ2NjLCBzbyBjb25maWd1cmluZyBnbGliYworICAjIHdpdGggYSBmcmVzaCBjcm9zcy1jb21waWxlciB3b3Jrcy4KKyAgIyBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICMgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLgorICAjIE9uIHRoZSBOZVhULCBjYyAtRSBydW5zIHRoZSBjb2RlIHRocm91Z2ggdGhlIGNvbXBpbGVyJ3MgcGFyc2VyLAorICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLiAiU3ludGF4IGVycm9yIiBpcyBoZXJlIHRvIGNhdGNoIHRoaXMgY2FzZS4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKwkJICAgICBTeW50YXggZXJyb3IKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisKK2Vsc2UKKyAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgorY29udGludWUKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CisKKyAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMKKyAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgorY29udGludWUKK2Vsc2UKKyAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KK2FjX3ByZXByb2Nfb2s9OgorYnJlYWsKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CisKK2RvbmUKKyMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgorcm0gLWYgY29uZnRlc3QuaSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAoraWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4gOgorICBicmVhaworZmkKKworICAgIGRvbmUKKyAgICBhY19jdl9wcm9nX0NQUD0kQ1BQCisKK2ZpCisgIENQUD0kYWNfY3ZfcHJvZ19DUFAKK2Vsc2UKKyAgYWNfY3ZfcHJvZ19DUFA9JENQUAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ1BQIiA+JjUKKyRhc19lY2hvICIkQ1BQIiA+JjY7IH0KK2FjX3ByZXByb2Nfb2s9ZmFsc2UKK2ZvciBhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluICcnIHllcworZG8KKyAgIyBVc2UgYSBoZWFkZXIgZmlsZSB0aGF0IGNvbWVzIHdpdGggZ2NjLCBzbyBjb25maWd1cmluZyBnbGliYworICAjIHdpdGggYSBmcmVzaCBjcm9zcy1jb21waWxlciB3b3Jrcy4KKyAgIyBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICMgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLgorICAjIE9uIHRoZSBOZVhULCBjYyAtRSBydW5zIHRoZSBjb2RlIHRocm91Z2ggdGhlIGNvbXBpbGVyJ3MgcGFyc2VyLAorICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLiAiU3ludGF4IGVycm9yIiBpcyBoZXJlIHRvIGNhdGNoIHRoaXMgY2FzZS4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKwkJICAgICBTeW50YXggZXJyb3IKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisKK2Vsc2UKKyAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgorY29udGludWUKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CisKKyAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMKKyAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgorY29udGludWUKK2Vsc2UKKyAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KK2FjX3ByZXByb2Nfb2s9OgorYnJlYWsKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CisKK2RvbmUKKyMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgorcm0gLWYgY29uZnRlc3QuaSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAoraWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4gOgorCitlbHNlCisgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgJD8gIkMgcHJlcHJvY2Vzc29yIFwiJENQUFwiIGZhaWxzIHNhbml0eSBjaGVjaworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KK2ZpCisKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgbG4gLXMgd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBsbiAtcyB3b3Jrcy4uLiAiID4mNjsgfQorTE5fUz0kYXNfbG5fcworaWYgdGVzdCAiJExOX1MiID0gImxuIC1zIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8sIHVzaW5nICRMTl9TIiA+JjUKKyRhc19lY2hvICJubywgdXNpbmcgJExOX1MiID4mNjsgfQorZmkKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICR7TUFLRS1tYWtlfSBzZXRzIFwkKE1BS0UpIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJHtNQUtFLW1ha2V9IHNldHMgXCQoTUFLRSkuLi4gIiA+JjY7IH0KK3NldCB4ICR7TUFLRS1tYWtlfQorYWNfbWFrZT1gJGFzX2VjaG8gIiQyIiB8IHNlZCAncy8rL3AvZzsgcy9bXmEtekEtWjAtOV9dL18vZydgCitpZiBldmFsIFwke2FjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QubWFrZSA8PFxfQUNFT0YKK1NIRUxMID0gL2Jpbi9zaAorYWxsOgorCUBlY2hvICdAQEAlJSU9JChNQUtFKT1AQEAlJSUnCitfQUNFT0YKKyMgR05VIG1ha2Ugc29tZXRpbWVzIHByaW50cyAibWFrZVsxXTogRW50ZXJpbmcgLi4uIiwgd2hpY2ggd291bGQgY29uZnVzZSB1cy4KK2Nhc2UgYCR7TUFLRS1tYWtlfSAtZiBjb25mdGVzdC5tYWtlIDI+L2Rldi9udWxsYCBpbgorICAqQEBAJSUlPT8qPUBAQCUlJSopCisgICAgZXZhbCBhY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQ9eWVzOzsKKyAgKikKKyAgICBldmFsIGFjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldD1ubzs7Citlc2FjCitybSAtZiBjb25mdGVzdC5tYWtlCitmaQoraWYgZXZhbCB0ZXN0IFwkYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0ID0geWVzOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgIFNFVF9NQUtFPQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgU0VUX01BS0U9Ik1BS0U9JHtNQUtFLW1ha2V9IgorZmkKKworaWYgdGVzdCAkYWNfY3ZfY19jb21waWxlcl9nbnUgPSB5ZXM7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJENDIG5lZWRzIC10cmFkaXRpb25hbCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRDQyBuZWVkcyAtdHJhZGl0aW9uYWwuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19nY2NfdHJhZGl0aW9uYWwrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICAgIGFjX3BhdHRlcm49IkF1dG9jb25mLioneCciCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzZ3R0eS5oPgorQXV0b2NvbmYgVElPQ0dFVFAKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgIiRhY19wYXR0ZXJuIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICBhY19jdl9wcm9nX2djY190cmFkaXRpb25hbD15ZXMKK2Vsc2UKKyAgYWNfY3ZfcHJvZ19nY2NfdHJhZGl0aW9uYWw9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKworCisgIGlmIHRlc3QgJGFjX2N2X3Byb2dfZ2NjX3RyYWRpdGlvbmFsID0gbm87IHRoZW4KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8dGVybWlvLmg+CitBdXRvY29uZiBUQ0dFVEEKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgIiRhY19wYXR0ZXJuIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICBhY19jdl9wcm9nX2djY190cmFkaXRpb25hbD15ZXMKK2ZpCitybSAtZiBjb25mdGVzdCoKKworICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcHJvZ19nY2NfdHJhZGl0aW9uYWwiID4mNQorJGFzX2VjaG8gIiRhY19jdl9wcm9nX2djY190cmFkaXRpb25hbCIgPiY2OyB9CisgIGlmIHRlc3QgJGFjX2N2X3Byb2dfZ2NjX3RyYWRpdGlvbmFsID0geWVzOyB0aGVuCisgICAgQ0M9IiRDQyAtdHJhZGl0aW9uYWwiCisgIGZpCitmaQorCisKKyMgLWZzdGFjay1wcm90ZWN0b3IKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zdGFjay1wcm90ZWN0b3Igd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfc3RhY2tfcHJvdGVjdG9yK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfc3RhY2tfcHJvdGVjdG9yOyBjYXNlICIke2VuYWJsZXZhbH0iIGluCisgICAgICAgICB5ZXMpIGVuYWJsZV9zc3A9eWVzIDs7CisgICAgICAgICAgbm8pIGVuYWJsZV9zc3A9bm8gOzsKKyAgICAgICAgICAgKikgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWRpc2FibGUtc3RhY2stcHJvdGVjdG9yIiAiJExJTkVOTyIgNSA7OworICAgICBlc2FjCitlbHNlCisgIGVuYWJsZV9zc3A9eWVzCitmaQorCisKK2lmIHRlc3QgeCIkZW5hYmxlX3NzcCIgPSB4InllcyIgJiYgdGVzdCB4IiRHQ0MiICE9IHgieWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogRGlzYWJsaW5nIHN0YWNrLXNtYXNoaW5nIHByb3RlY3Rpb24gYmVjYXVzZSBjb21waWxlciBpcyBub3QgR0NDIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IERpc2FibGluZyBzdGFjay1zbWFzaGluZyBwcm90ZWN0aW9uIGJlY2F1c2UgY29tcGlsZXIgaXMgbm90IEdDQyIgPiY2O30KKyAgICBlbmFibGVfc3NwPW5vCitmaQorCitpZiB0ZXN0IHgiJGVuYWJsZV9zc3AiID0geCJ5ZXMiOyB0aGVuCisgICAgIyBDaGVjayBmb3IgYnJva2VuIHNzcCBpbiBsaWJjOiBodHRwOi8vd3d3LmF2YWhpLm9yZy90aWNrZXQvMTA1CisgICAgIyBsaWJjJ3MgYnJva2VubmVzcyB3aWxsIGdldCBpbiB0aGUgd2F5IHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciAtbHNzcCBpcworICAgICMgcHJvdmlkZWQsIGJ1dCBwcm92aWRlIGl0IGFueXdheSAob3RoZXJ3aXNlIG5vbi1saWJjIHNzcCB3b3VsZCB3cm9uZ2x5CisgICAgIyBicmVhayBoZXJlKQorCisgICAgIyBHZXQgLWxzc3AgaWYgaXQgZXhpc3RzCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGxpYnNzcCBleGlzdHMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBsaWJzc3AgZXhpc3RzLi4uICIgPiY2OyB9CitpZiAke3NzcF9jdl9saWIrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBzc3Bfb2xkX2xpYnM9IiRMSUJTIgorICAgICBMSUJTPSIkTElCUyAtbHNzcCIKKyAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIHNzcF9jdl9saWI9eWVzCitlbHNlCisgIHNzcF9jdl9saWI9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICBMSUJTPSIkc3NwX29sZF9saWJzIgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRzc3BfY3ZfbGliIiA+JjUKKyRhc19lY2hvICIkc3NwX2N2X2xpYiIgPiY2OyB9CisgIGlmIHRlc3QgJHNzcF9jdl9saWIgPSB5ZXM7IHRoZW4KKyAgICBMSUJTPSIkTElCUyAtbHNzcCIKKyAgZmkKKworCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHN0YWNrLXNtYXNoaW5nIHByb3RlY3Rpb24gaXMgYXZhaWxhYmxlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgc3RhY2stc21hc2hpbmcgcHJvdGVjdGlvbiBpcyBhdmFpbGFibGUuLi4gIiA+JjY7IH0KKyAgICBzc3Bfb2xkX2NmbGFncz0iJENGTEFHUyIKKyAgICBzc3Bfb2xkX2xkZmxhZ3M9IiRMREZMQUdTIgorICAgIENGTEFHUz0iJENGTEFHUyAtV2Vycm9yIC1mc3RhY2stcHJvdGVjdG9yLWFsbCAtZlBJQyIKKyAgICBMREZMQUdTPSIkTERGTEFHUyAtV2wsLXosZGVmcyIKKyAgICBjYXQgY29uZmRlZnMuaCA+IGNvbmZ0ZXN0LmMKKyAgICBjYXQgPj5jb25mdGVzdC5jIDw8X0FDRU9GCit2b2lkIHRlc3RfYnJva2VuX3NzcChjKQorICAgIGNvbnN0IGNoYXIgKmM7Cit7CisgICAgY2hhciBhcnJbMTIzXSwgKnA7IC8qIGJld2FyZSBvZiBwb3NzaWJsZSBkb3VibGUtYnJhY2VzIGlmIGNvcHlpbmcgdGhpcyAqLworICAgIGZvciAocCA9IGFycjsgKmM7ICsrcCkgeworICAgICAgICAqcCA9ICpjOworICAgICAgICArK2M7CisgICAgfQorfQorX0FDRU9GCisgICAgcm0gLWYgY29uZnRlc3QubworCisgICAgaWYgJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QuYyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHN0YWNrLXNtYXNoaW5nIHByb3RlY3Rpb24gaXMgYnVnZ3kiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBzdGFjay1zbWFzaGluZyBwcm90ZWN0aW9uIGlzIGJ1Z2d5Li4uICIgPiY2OyB9CisgICAgICAgIGlmICRDQyAtbyBjb25mdGVzdC5zbyAkTERGTEFHUyAtc2hhcmVkIGNvbmZ0ZXN0Lm8gJExJQlMgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgICAgICAgIGVuYWJsZV9zc3A9bm8KKyAgICAgICAgZmkKKyAgICBlbHNlCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIGZpCisKKyAgICBybSAtZiBjb25mdGVzdC5jIGNvbmZ0ZXN0Lm8gY29uZnRlc3Quc28KKworICAgIENGTEFHUz0iJHNzcF9vbGRfY2ZsYWdzIgorICAgIExERkxBR1M9IiRzc3Bfb2xkX2xkZmxhZ3MiCitmaQorCitpZiB0ZXN0IHgiJGVuYWJsZV9zc3AiID0geCJ5ZXMiOyB0aGVuCisgICAgIyBEbyB0aGlzIHRoZSBsb25nIHdheSBzbyB3ZSBkb24ndCBjYWxsIEdDQ19TVEFDS19QUk9URUNUX0xJQiB0d2ljZQorCisKKyAgaWYgdGVzdCAiWCRDQyIgIT0gIlgiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICR7Q0N9IGFjY2VwdHMgLWZzdGFjay1wcm90ZWN0b3IiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAke0NDfSBhY2NlcHRzIC1mc3RhY2stcHJvdGVjdG9yLi4uICIgPiY2OyB9CitpZiAke3NzcF9jdl9jYys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIHNzcF9vbGRfY2ZsYWdzPSIkQ0ZMQUdTIgorICAgICAgIENGTEFHUz0iJENGTEFHUyAtZnN0YWNrLXByb3RlY3RvciAtV2Vycm9yIgorICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBzc3BfY3ZfY2M9eWVzCitlbHNlCisgIHNzcF9jdl9jYz1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgIENGTEFHUz0iJHNzcF9vbGRfY2ZsYWdzIgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRzc3BfY3ZfY2MiID4mNQorJGFzX2VjaG8gIiRzc3BfY3ZfY2MiID4mNjsgfQorICAgIGlmIHRlc3QgJHNzcF9jdl9jYyA9IHllczsgdGhlbgorICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1mc3RhY2stcHJvdGVjdG9yIgorCiskYXNfZWNobyAiI2RlZmluZSBFTkFCTEVfU1NQX0NDIDEiID4+Y29uZmRlZnMuaAorCisgICAgZmkKKyAgZmkKKworCisgICAgYWNfZXh0PWNwcAorYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKKworCisKKworICBpZiB0ZXN0ICJYJENYWCIgIT0gIlgiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICR7Q1hYfSBhY2NlcHRzIC1mc3RhY2stcHJvdGVjdG9yIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJHtDWFh9IGFjY2VwdHMgLWZzdGFjay1wcm90ZWN0b3IuLi4gIiA+JjY7IH0KK2lmICR7c3NwX2N2X2N4eCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIHNzcF9vbGRfY3h4ZmxhZ3M9IiRDWFhGTEFHUyIKKyAgICAgICBDWFhGTEFHUz0iJENYWEZMQUdTIC1mc3RhY2stcHJvdGVjdG9yIC1XZXJyb3IiCisgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgc3NwX2N2X2N4eD15ZXMKK2Vsc2UKKyAgc3NwX2N2X2N4eD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgIENYWEZMQUdTPSIkc3NwX29sZF9jeHhmbGFncyIKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkc3NwX2N2X2N4eCIgPiY1CiskYXNfZWNobyAiJHNzcF9jdl9jeHgiID4mNjsgfQorICAgIGlmIHRlc3QgJHNzcF9jdl9jeHggPSB5ZXM7IHRoZW4KKyAgICAgIENYWEZMQUdTPSIkQ1hYRkxBR1MgLWZzdGFjay1wcm90ZWN0b3IiCisKKyRhc19lY2hvICIjZGVmaW5lIEVOQUJMRV9TU1BfQ1hYIDEiID4+Y29uZmRlZnMuaAorCisgICAgZmkKKyAgZmkKKworICAgIGFjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworICAgICMgWFhYOiBVcGRhdGUgdGhlIGVuYWJsZV9zc3AgdmFsdWUgbm93IGZvciBvdXRwdXQgbGF0ZXI/CitmaQorCisjIGxpYnRvb2wgc3R1ZmYKK2Nhc2UgYHB3ZGAgaW4KKyAgKlwgKiB8ICpcCSopCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBMaWJ0b29sIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHdoaXRlc3BhY2UgaW4gXGBwd2RcYCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBMaWJ0b29sIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHdoaXRlc3BhY2UgaW4gXGBwd2RcYCIgPiYyO30gOzsKK2VzYWMKKworCisKK21hY3JvX3ZlcnNpb249JzIuNC4yJworbWFjcm9fcmV2aXNpb249JzEuMzMzNycKKworCisKKworCisKKworCisKKworCisKKworbHRtYWluPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCisKKyMgQmFja3NsYXNoaWZ5IG1ldGFjaGFyYWN0ZXJzIHRoYXQgYXJlIHN0aWxsIGFjdGl2ZSB3aXRoaW4KKyMgZG91YmxlLXF1b3RlZCBzdHJpbmdzLgorc2VkX3F1b3RlX3N1YnN0PSdzL1woWyJgJFxcXVwpL1xcXDEvZycKKworIyBTYW1lIGFzIGFib3ZlLCBidXQgZG8gbm90IHF1b3RlIHZhcmlhYmxlIHJlZmVyZW5jZXMuCitkb3VibGVfcXVvdGVfc3Vic3Q9J3MvXChbImBcXF1cKS9cXFwxL2cnCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0byBkZWxheSBleHBhbnNpb24gb2YgYW4gZXNjYXBlZCBzaGVsbCB2YXJpYWJsZSBpbiBhCisjIGRvdWJsZV9xdW90ZV9zdWJzdCdlZCBzdHJpbmcuCitkZWxheV92YXJpYWJsZV9zdWJzdD0ncy9cXFxcXFxcXFxcXCQvXFxcXFxcJC9nJworCisjIFNlZCBzdWJzdGl0dXRpb24gdG8gZGVsYXkgZXhwYW5zaW9uIG9mIGFuIGVzY2FwZWQgc2luZ2xlIHF1b3RlLgorZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0PSdzLydcJycvJ1wnXFxcXFxcXCdcJycvZycKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGF2b2lkIGFjY2lkZW50YWwgZ2xvYmJpbmcgaW4gZXZhbGVkIGV4cHJlc3Npb25zCitub19nbG9iX3N1YnN0PSdzL1wqL1xcXCovZycKKworRUNITz0nXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCcKK0VDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworRUNITz0kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8KKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gcHJpbnQgc3RyaW5ncyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gcHJpbnQgc3RyaW5ncy4uLiAiID4mNjsgfQorIyBUZXN0IHByaW50IGZpcnN0LCBiZWNhdXNlIGl0IHdpbGwgYmUgYSBidWlsdGluIGlmIHByZXNlbnQuCitpZiB0ZXN0ICJYYCggcHJpbnQgLXIgLS0gLW4gKSAyPi9kZXYvbnVsbGAiID0gWC1uICYmIFwKKyAgIHRlc3QgIlhgcHJpbnQgLXIgLS0gJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCisgIEVDSE89J3ByaW50IC1yIC0tJworZWxpZiB0ZXN0ICJYYHByaW50ZiAlcyAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KKyAgRUNITz0ncHJpbnRmICVzXG4nCitlbHNlCisgICMgVXNlIHRoaXMgZnVuY3Rpb24gYXMgYSBmYWxsYmFjayB0aGF0IGFsd2F5cyB3b3Jrcy4KKyAgZnVuY19mYWxsYmFja19lY2hvICgpCisgIHsKKyAgICBldmFsICdjYXQgPDxfTFRFQ0hPX0VPRgorJDEKK19MVEVDSE9fRU9GJworICB9CisgIEVDSE89J2Z1bmNfZmFsbGJhY2tfZWNobycKK2ZpCisKKyMgZnVuY19lY2hvX2FsbCBhcmcuLi4KKyMgSW52b2tlICRFQ0hPIHdpdGggYWxsIGFyZ3MsIHNwYWNlLXNlcGFyYXRlZC4KK2Z1bmNfZWNob19hbGwgKCkKK3sKKyAgICAkRUNITyAiIgorfQorCitjYXNlICIkRUNITyIgaW4KKyAgcHJpbnRmKikgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHByaW50ZiIgPiY1CiskYXNfZWNobyAicHJpbnRmIiA+JjY7IH0gOzsKKyAgcHJpbnQqKSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogcHJpbnQgLXIiID4mNQorJGFzX2VjaG8gInByaW50IC1yIiA+JjY7IH0gOzsKKyAgKikgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IGNhdCIgPiY1CiskYXNfZWNobyAiY2F0IiA+JjY7IH0gOzsKK2VzYWMKKworCisKKworCisKKworCisKKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhIHNlZCB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgYSBzZWQgdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9TRUQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICAgICAgICAgICAgYWNfc2NyaXB0PXMvYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEvYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiLworICAgICBmb3IgYWNfaSBpbiAxIDIgMyA0IDUgNiA3OyBkbworICAgICAgIGFjX3NjcmlwdD0iJGFjX3NjcmlwdCRhc19ubCRhY19zY3JpcHQiCisgICAgIGRvbmUKKyAgICAgZWNobyAiJGFjX3NjcmlwdCIgMj4vZGV2L251bGwgfCBzZWQgOTlxID5jb25mdGVzdC5zZWQKKyAgICAgeyBhY19zY3JpcHQ9OyB1bnNldCBhY19zY3JpcHQ7fQorICAgICBpZiB0ZXN0IC16ICIkU0VEIjsgdGhlbgorICBhY19wYXRoX1NFRF9mb3VuZD1mYWxzZQorICAjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX3Byb2cgaW4gc2VkIGdzZWQ7IGRvCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICAgICBhY19wYXRoX1NFRD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIKKyAgICAgIHsgdGVzdCAtZiAiJGFjX3BhdGhfU0VEIiAmJiAkYXNfdGVzdF94ICIkYWNfcGF0aF9TRUQiOyB9IHx8IGNvbnRpbnVlCisjIENoZWNrIGZvciBHTlUgYWNfcGF0aF9TRUQgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KKyAgIyBDaGVjayBmb3IgR05VICRhY19wYXRoX1NFRAorY2FzZSBgIiRhY19wYXRoX1NFRCIgLS12ZXJzaW9uIDI+JjFgIGluCisqR05VKikKKyAgYWNfY3ZfcGF0aF9TRUQ9IiRhY19wYXRoX1NFRCIgYWNfcGF0aF9TRURfZm91bmQ9Ojs7CisqKQorICBhY19jb3VudD0wCisgICRhc19lY2hvX24gMDEyMzQ1Njc4OSA+ImNvbmZ0ZXN0LmluIgorICB3aGlsZSA6CisgIGRvCisgICAgY2F0ICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0LmluIiA+ImNvbmZ0ZXN0LnRtcCIKKyAgICBtdiAiY29uZnRlc3QudG1wIiAiY29uZnRlc3QuaW4iCisgICAgY3AgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QubmwiCisgICAgJGFzX2VjaG8gJycgPj4gImNvbmZ0ZXN0Lm5sIgorICAgICIkYWNfcGF0aF9TRUQiIC1mIGNvbmZ0ZXN0LnNlZCA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5vdXQiIDI+L2Rldi9udWxsIHx8IGJyZWFrCisgICAgZGlmZiAiY29uZnRlc3Qub3V0IiAiY29uZnRlc3QubmwiID4vZGV2L251bGwgMj4mMSB8fCBicmVhaworICAgIGFzX2ZuX2FyaXRoICRhY19jb3VudCArIDEgJiYgYWNfY291bnQ9JGFzX3ZhbAorICAgIGlmIHRlc3QgJGFjX2NvdW50IC1ndCAke2FjX3BhdGhfU0VEX21heC0wfTsgdGhlbgorICAgICAgIyBCZXN0IG9uZSBzbyBmYXIsIHNhdmUgaXQgYnV0IGtlZXAgbG9va2luZyBmb3IgYSBiZXR0ZXIgb25lCisgICAgICBhY19jdl9wYXRoX1NFRD0iJGFjX3BhdGhfU0VEIgorICAgICAgYWNfcGF0aF9TRURfbWF4PSRhY19jb3VudAorICAgIGZpCisgICAgIyAxMCooMl4xMCkgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAorICAgIHRlc3QgJGFjX2NvdW50IC1ndCAxMCAmJiBicmVhaworICBkb25lCisgIHJtIC1mIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5ubCBjb25mdGVzdC5vdXQ7OworZXNhYworCisgICAgICAkYWNfcGF0aF9TRURfZm91bmQgJiYgYnJlYWsgMworICAgIGRvbmUKKyAgZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisgIGlmIHRlc3QgLXogIiRhY19jdl9wYXRoX1NFRCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBzZWQgY291bGQgYmUgZm91bmQgaW4gXCRQQVRIIiAiJExJTkVOTyIgNQorICBmaQorZWxzZQorICBhY19jdl9wYXRoX1NFRD0kU0VECitmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wYXRoX1NFRCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3BhdGhfU0VEIiA+JjY7IH0KKyBTRUQ9IiRhY19jdl9wYXRoX1NFRCIKKyAgcm0gLWYgY29uZnRlc3Quc2VkCisKK3Rlc3QgLXogIiRTRUQiICYmIFNFRD1zZWQKK1hzZWQ9IiRTRUQgLWUgMXMvXlgvLyIKKworCisKKworCisKKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBmZ3JlcCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZmdyZXAuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9GR1JFUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIGVjaG8gJ2FiKmMnIHwgJEdSRVAgLUYgJ2FiKmMnID4vZGV2L251bGwgMj4mMQorICAgdGhlbiBhY19jdl9wYXRoX0ZHUkVQPSIkR1JFUCAtRiIKKyAgIGVsc2UKKyAgICAgaWYgdGVzdCAteiAiJEZHUkVQIjsgdGhlbgorICBhY19wYXRoX0ZHUkVQX2ZvdW5kPWZhbHNlCisgICMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3IgZWFjaCBvZiBQUk9HTkFNRS1MSVNUCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluCitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX3Byb2cgaW4gZmdyZXA7IGRvCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICAgICBhY19wYXRoX0ZHUkVQPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IgorICAgICAgeyB0ZXN0IC1mICIkYWNfcGF0aF9GR1JFUCIgJiYgJGFzX3Rlc3RfeCAiJGFjX3BhdGhfRkdSRVAiOyB9IHx8IGNvbnRpbnVlCisjIENoZWNrIGZvciBHTlUgYWNfcGF0aF9GR1JFUCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgorICAjIENoZWNrIGZvciBHTlUgJGFjX3BhdGhfRkdSRVAKK2Nhc2UgYCIkYWNfcGF0aF9GR1JFUCIgLS12ZXJzaW9uIDI+JjFgIGluCisqR05VKikKKyAgYWNfY3ZfcGF0aF9GR1JFUD0iJGFjX3BhdGhfRkdSRVAiIGFjX3BhdGhfRkdSRVBfZm91bmQ9Ojs7CisqKQorICBhY19jb3VudD0wCisgICRhc19lY2hvX24gMDEyMzQ1Njc4OSA+ImNvbmZ0ZXN0LmluIgorICB3aGlsZSA6CisgIGRvCisgICAgY2F0ICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0LmluIiA+ImNvbmZ0ZXN0LnRtcCIKKyAgICBtdiAiY29uZnRlc3QudG1wIiAiY29uZnRlc3QuaW4iCisgICAgY3AgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QubmwiCisgICAgJGFzX2VjaG8gJ0ZHUkVQJyA+PiAiY29uZnRlc3QubmwiCisgICAgIiRhY19wYXRoX0ZHUkVQIiBGR1JFUCA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5vdXQiIDI+L2Rldi9udWxsIHx8IGJyZWFrCisgICAgZGlmZiAiY29uZnRlc3Qub3V0IiAiY29uZnRlc3QubmwiID4vZGV2L251bGwgMj4mMSB8fCBicmVhaworICAgIGFzX2ZuX2FyaXRoICRhY19jb3VudCArIDEgJiYgYWNfY291bnQ9JGFzX3ZhbAorICAgIGlmIHRlc3QgJGFjX2NvdW50IC1ndCAke2FjX3BhdGhfRkdSRVBfbWF4LTB9OyB0aGVuCisgICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKKyAgICAgIGFjX2N2X3BhdGhfRkdSRVA9IiRhY19wYXRoX0ZHUkVQIgorICAgICAgYWNfcGF0aF9GR1JFUF9tYXg9JGFjX2NvdW50CisgICAgZmkKKyAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCisgICAgdGVzdCAkYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCisgIGRvbmUKKyAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7Citlc2FjCisKKyAgICAgICRhY19wYXRoX0ZHUkVQX2ZvdW5kICYmIGJyZWFrIDMKKyAgICBkb25lCisgIGRvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworICBpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9GR1JFUCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBmZ3JlcCBjb3VsZCBiZSBmb3VuZCBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4iICIkTElORU5PIiA1CisgIGZpCitlbHNlCisgIGFjX2N2X3BhdGhfRkdSRVA9JEZHUkVQCitmaQorCisgICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcGF0aF9GR1JFUCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3BhdGhfRkdSRVAiID4mNjsgfQorIEZHUkVQPSIkYWNfY3ZfcGF0aF9GR1JFUCIKKworCit0ZXN0IC16ICIkR1JFUCIgJiYgR1JFUD1ncmVwCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZ251LWxkIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9nbnVfbGQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2dudV9sZDsgdGVzdCAiJHdpdGh2YWwiID0gbm8gfHwgd2l0aF9nbnVfbGQ9eWVzCitlbHNlCisgIHdpdGhfZ251X2xkPW5vCitmaQorCithY19wcm9nPWxkCitpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAjIENoZWNrIGlmIGdjYyAtcHJpbnQtcHJvZy1uYW1lPWxkIGdpdmVzIGEgcGF0aC4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGQgdXNlZCBieSAkQ0MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxkIHVzZWQgYnkgJENDLi4uICIgPiY2OyB9CisgIGNhc2UgJGhvc3QgaW4KKyAgKi0qLW1pbmd3KikKKyAgICAjIGdjYyBsZWF2ZXMgYSB0cmFpbGluZyBjYXJyaWFnZSByZXR1cm4gd2hpY2ggdXBzZXRzIG1pbmd3CisgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1IHwgdHIgLWQgJ1wwMTUnYCA7OworICAqKQorICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNWAgOzsKKyAgZXNhYworICBjYXNlICRhY19wcm9nIGluCisgICAgIyBBY2NlcHQgYWJzb2x1dGUgcGF0aHMuCisgICAgW1xcL10qIHwgPzpbXFwvXSopCisgICAgICByZV9kaXJlbHQ9Jy9bXi9dW14vXSovXC5cLi8nCisgICAgICAjIENhbm9uaWNhbGl6ZSB0aGUgcGF0aG5hbWUgb2YgbGQKKyAgICAgIGFjX3Byb2c9YCRFQ0hPICIkYWNfcHJvZyJ8ICRTRUQgJ3MlXFxcXCUvJWcnYAorICAgICAgd2hpbGUgJEVDSE8gIiRhY19wcm9nIiB8ICRHUkVQICIkcmVfZGlyZWx0IiA+IC9kZXYvbnVsbCAyPiYxOyBkbworCWFjX3Byb2c9YCRFQ0hPICRhY19wcm9nfCAkU0VEICJzJSRyZV9kaXJlbHQlLyUiYAorICAgICAgZG9uZQorICAgICAgdGVzdCAteiAiJExEIiAmJiBMRD0iJGFjX3Byb2ciCisgICAgICA7OworICAiIikKKyAgICAjIElmIGl0IGZhaWxzLCB0aGVuIHByZXRlbmQgd2UgYXJlbid0IHVzaW5nIEdDQy4KKyAgICBhY19wcm9nPWxkCisgICAgOzsKKyAgKikKKyAgICAjIElmIGl0IGlzIHJlbGF0aXZlLCB0aGVuIHNlYXJjaCBmb3IgdGhlIGZpcnN0IGxkIGluIFBBVEguCisgICAgd2l0aF9nbnVfbGQ9dW5rbm93bgorICAgIDs7CisgIGVzYWMKK2VsaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBHTlUgbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEdOVSBsZC4uLiAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBub24tR05VIGxkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBub24tR05VIGxkLi4uICIgPiY2OyB9CitmaQoraWYgJHtsdF9jdl9wYXRoX0xEKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAteiAiJExEIjsgdGhlbgorICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KKyAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ciIHx8IHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ckYWNfZXhlZXh0IjsgdGhlbgorICAgICAgbHRfY3ZfcGF0aF9MRD0iJGFjX2Rpci8kYWNfcHJvZyIKKyAgICAgICMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBwcm9ncmFtIGlzIEdOVSBsZC4gIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiwKKyAgICAgICMgYnV0IGFwcGFyZW50bHkgc29tZSB2YXJpYW50cyBvZiBHTlUgbGQgb25seSBhY2NlcHQgLXYuCisgICAgICAjIEJyZWFrIG9ubHkgaWYgaXQgd2FzIHRoZSBHTlUvbm9uLUdOVSBsZCB0aGF0IHdlIHByZWZlci4KKyAgICAgIGNhc2UgYCIkbHRfY3ZfcGF0aF9MRCIgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgorICAgICAgKkdOVSogfCAqJ3dpdGggQkZEJyopCisJdGVzdCAiJHdpdGhfZ251X2xkIiAhPSBubyAmJiBicmVhaworCTs7CisgICAgICAqKQorCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0geWVzICYmIGJyZWFrCisJOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICBkb25lCisgIElGUz0iJGx0X3NhdmVfaWZzIgorZWxzZQorICBsdF9jdl9wYXRoX0xEPSIkTEQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorZmkKK2ZpCisKK0xEPSIkbHRfY3ZfcGF0aF9MRCIKK2lmIHRlc3QgLW4gIiRMRCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRMRCIgPiY1CiskYXNfZWNobyAiJExEIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQordGVzdCAteiAiJExEIiAmJiBhc19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBsZCBmb3VuZCBpbiBcJFBBVEgiICIkTElORU5PIiA1Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3Byb2dfZ251X2xkKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgIyBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24gaGVyZSwgYnV0IGFwcGFyZW50bHkgc29tZSBHTlUgbGRzIG9ubHkgYWNjZXB0IC12LgorY2FzZSBgJExEIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KKypHTlUqIHwgKid3aXRoIEJGRCcqKQorICBsdF9jdl9wcm9nX2dudV9sZD15ZXMKKyAgOzsKKyopCisgIGx0X2N2X3Byb2dfZ251X2xkPW5vCisgIDs7Citlc2FjCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2dudV9sZCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfZ251X2xkIiA+JjY7IH0KK3dpdGhfZ251X2xkPSRsdF9jdl9wcm9nX2dudV9sZAorCisKKworCisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQlNELSBvciBNUy1jb21wYXRpYmxlIG5hbWUgbGlzdGVyIChubSkiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEJTRC0gb3IgTVMtY29tcGF0aWJsZSBuYW1lIGxpc3RlciAobm0pLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3BhdGhfTk0rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkTk0iOyB0aGVuCisgICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorICBsdF9jdl9wYXRoX05NPSIkTk0iCitlbHNlCisgIGx0X25tX3RvX2NoZWNrPSIke2FjX3Rvb2xfcHJlZml4fW5tIgorICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiICYmIHRlc3QgIiRidWlsZCIgPSAiJGhvc3QiOyB0aGVuCisgICAgbHRfbm1fdG9fY2hlY2s9IiRsdF9ubV90b19jaGVjayBubSIKKyAgZmkKKyAgZm9yIGx0X3RtcF9ubSBpbiAkbHRfbm1fdG9fY2hlY2s7IGRvCisgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgICAgZm9yIGFjX2RpciBpbiAkUEFUSCAvdXNyL2Njcy9iaW4vZWxmIC91c3IvY2NzL2JpbiAvdXNyL3VjYiAvYmluOyBkbworICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgICAgdG1wX25tPSIkYWNfZGlyLyRsdF90bXBfbm0iCisgICAgICBpZiB0ZXN0IC1mICIkdG1wX25tIiB8fCB0ZXN0IC1mICIkdG1wX25tJGFjX2V4ZWV4dCIgOyB0aGVuCisJIyBDaGVjayB0byBzZWUgaWYgdGhlIG5tIGFjY2VwdHMgYSBCU0QtY29tcGF0IGZsYWcuCisJIyBBZGRpbmcgdGhlIGBzZWQgMXEnIHByZXZlbnRzIGZhbHNlIHBvc2l0aXZlcyBvbiBIUC1VWCwgd2hpY2ggc2F5czoKKwkjICAgbm06IHVua25vd24gb3B0aW9uICJCIiBpZ25vcmVkCisJIyBUcnU2NCdzIG5tIGNvbXBsYWlucyB0aGF0IC9kZXYvbnVsbCBpcyBhbiBpbnZhbGlkIG9iamVjdCBmaWxlCisJY2FzZSBgIiR0bXBfbm0iIC1CIC9kZXYvbnVsbCAyPiYxIHwgc2VkICcxcSdgIGluCisJKi9kZXYvbnVsbCogfCAqJ0ludmFsaWQgZmlsZSBvciBvYmplY3QgdHlwZScqKQorCSAgbHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSAtQiIKKwkgIGJyZWFrCisJICA7OworCSopCisJICBjYXNlIGAiJHRtcF9ubSIgLXAgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KKwkgICovZGV2L251bGwqKQorCSAgICBsdF9jdl9wYXRoX05NPSIkdG1wX25tIC1wIgorCSAgICBicmVhaworCSAgICA7OworCSAgKikKKwkgICAgbHRfY3ZfcGF0aF9OTT0ke2x0X2N2X3BhdGhfTk09IiR0bXBfbm0ifSAjIGtlZXAgdGhlIGZpcnN0IG1hdGNoLCBidXQKKwkgICAgY29udGludWUgIyBzbyB0aGF0IHdlIGNhbiB0cnkgdG8gZmluZCBvbmUgdGhhdCBzdXBwb3J0cyBCU0QgZmxhZ3MKKwkgICAgOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworICAgICAgZmkKKyAgICBkb25lCisgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgIGRvbmUKKyAgOiAke2x0X2N2X3BhdGhfTk09bm99CitmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcGF0aF9OTSIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3BhdGhfTk0iID4mNjsgfQoraWYgdGVzdCAiJGx0X2N2X3BhdGhfTk0iICE9ICJubyI7IHRoZW4KKyAgTk09IiRsdF9jdl9wYXRoX05NIgorZWxzZQorICAjIERpZG4ndCBmaW5kIGFueSBCU0QgY29tcGF0aWJsZSBuYW1lIGxpc3RlciwgbG9vayBmb3IgZHVtcGJpbi4KKyAgaWYgdGVzdCAtbiAiJERVTVBCSU4iOyB0aGVuIDoKKyAgICAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKyAgZWxzZQorICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgZm9yIGFjX3Byb2cgaW4gZHVtcGJpbiAibGluayAtZHVtcCIKKyAgZG8KKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY190b29sX3ByZWZpeCRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfRFVNUEJJTis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiREVU1QQklOIjsgdGhlbgorICBhY19jdl9wcm9nX0RVTVBCSU49IiREVU1QQklOIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfRFVNUEJJTj0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorRFVNUEJJTj0kYWNfY3ZfcHJvZ19EVU1QQklOCitpZiB0ZXN0IC1uICIkRFVNUEJJTiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICREVU1QQklOIiA+JjUKKyRhc19lY2hvICIkRFVNUEJJTiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgICAgdGVzdCAtbiAiJERVTVBCSU4iICYmIGJyZWFrCisgIGRvbmUKK2ZpCitpZiB0ZXN0IC16ICIkRFVNUEJJTiI7IHRoZW4KKyAgYWNfY3RfRFVNUEJJTj0kRFVNUEJJTgorICBmb3IgYWNfcHJvZyBpbiBkdW1wYmluICJsaW5rIC1kdW1wIgorZG8KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X0RVTVBCSU4rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfRFVNUEJJTiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9EVU1QQklOPSIkYWNfY3RfRFVNUEJJTiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0RVTVBCSU49IiRhY19wcm9nIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0RVTVBCSU49JGFjX2N2X3Byb2dfYWNfY3RfRFVNUEJJTgoraWYgdGVzdCAtbiAiJGFjX2N0X0RVTVBCSU4iOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfRFVNUEJJTiIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0RVTVBCSU4iID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICB0ZXN0IC1uICIkYWNfY3RfRFVNUEJJTiIgJiYgYnJlYWsKK2RvbmUKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0RVTVBCSU4iID0geDsgdGhlbgorICAgIERVTVBCSU49IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgRFVNUEJJTj0kYWNfY3RfRFVNUEJJTgorICBmaQorZmkKKworICAgIGNhc2UgYCREVU1QQklOIC1zeW1ib2xzIC9kZXYvbnVsbCAyPiYxIHwgc2VkICcxcSdgIGluCisgICAgKkNPRkYqKQorICAgICAgRFVNUEJJTj0iJERVTVBCSU4gLXN5bWJvbHMiCisgICAgICA7OworICAgICopCisgICAgICBEVU1QQklOPToKKyAgICAgIDs7CisgICAgZXNhYworICBmaQorCisgIGlmIHRlc3QgIiREVU1QQklOIiAhPSAiOiI7IHRoZW4KKyAgICBOTT0iJERVTVBCSU4iCisgIGZpCitmaQordGVzdCAteiAiJE5NIiAmJiBOTT1ubQorCisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB0aGUgbmFtZSBsaXN0ZXIgKCROTSkgaW50ZXJmYWNlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHRoZSBuYW1lIGxpc3RlciAoJE5NKSBpbnRlcmZhY2UuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3Zfbm1faW50ZXJmYWNlKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3Zfbm1faW50ZXJmYWNlPSJCU0Qgbm0iCisgIGVjaG8gImludCBzb21lX3ZhcmlhYmxlID0gMDsiID4gY29uZnRlc3QuJGFjX2V4dAorICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJGFjX2NvbXBpbGVcIiIgPiY1KQorICAoZXZhbCAiJGFjX2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJE5NIFxcXCJjb25mdGVzdC4kYWNfb2JqZXh0XFxcIlwiIiA+JjUpCisgIChldmFsICIkTk0gXCJjb25mdGVzdC4kYWNfb2JqZXh0XCIiIDI+Y29uZnRlc3QuZXJyID4gY29uZnRlc3Qub3V0KQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogb3V0cHV0XCIiID4mNSkKKyAgY2F0IGNvbmZ0ZXN0Lm91dCA+JjUKKyAgaWYgJEdSRVAgJ0V4dGVybmFsLipzb21lX3ZhcmlhYmxlJyBjb25mdGVzdC5vdXQgPiAvZGV2L251bGw7IHRoZW4KKyAgICBsdF9jdl9ubV9pbnRlcmZhY2U9Ik1TIGR1bXBiaW4iCisgIGZpCisgIHJtIC1mIGNvbmZ0ZXN0KgorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3Zfbm1faW50ZXJmYWNlIiA+JjUKKyRhc19lY2hvICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA+JjY7IH0KKworIyBmaW5kIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3N5c19tYXhfY21kX2xlbis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgICAgaT0wCisgIHRlc3RzdHJpbmc9IkFCQ0QiCisKKyAgY2FzZSAkYnVpbGRfb3MgaW4KKyAgbXNkb3NkamdwcCopCisgICAgIyBPbiBESkdQUCwgdGhpcyB0ZXN0IGNhbiBibG93IHVwIHByZXR0eSBiYWRseSBkdWUgdG8gcHJvYmxlbXMgaW4gbGliYworICAgICMgKGFueSBzaW5nbGUgYXJndW1lbnQgZXhjZWVkaW5nIDIwMDAgYnl0ZXMgY2F1c2VzIGEgYnVmZmVyIG92ZXJydW4KKyAgICAjIGR1cmluZyBnbG9iIGV4cGFuc2lvbikuICBFdmVuIGlmIGl0IHdlcmUgZml4ZWQsIHRoZSByZXN1bHQgb2YgdGhpcworICAgICMgY2hlY2sgd291bGQgYmUgbGFyZ2VyIHRoYW4gaXQgc2hvdWxkIGJlLgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xMjI4ODsgICAgIyAxMksgaXMgYWJvdXQgcmlnaHQKKyAgICA7OworCisgIGdudSopCisgICAgIyBVbmRlciBHTlUgSHVyZCwgdGhpcyB0ZXN0IGlzIG5vdCByZXF1aXJlZCBiZWNhdXNlIHRoZXJlIGlzCisgICAgIyBubyBsaW1pdCB0byB0aGUgbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCisgICAgIyBMaWJ0b29sIHdpbGwgaW50ZXJwcmV0IC0xIGFzIG5vIGxpbWl0IHdoYXRzb2V2ZXIKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49LTE7CisgICAgOzsKKworICBjeWd3aW4qIHwgbWluZ3cqIHwgY2VnY2MqKQorICAgICMgT24gV2luOXgvTUUsIHRoaXMgdGVzdCBibG93cyB1cCAtLSBpdCBzdWNjZWVkcywgYnV0IHRha2VzCisgICAgIyBhYm91dCA1IG1pbnV0ZXMgYXMgdGhlIHRlc3RzdHJpbmcgZ3Jvd3MgZXhwb25lbnRpYWxseS4KKyAgICAjIFdvcnNlLCBzaW5jZSA5eC9NRSBhcmUgbm90IHByZS1lbXB0aXZlbHkgbXVsdGl0YXNraW5nLAorICAgICMgeW91IGVuZCB1cCB3aXRoIGEgImZyb3plbiIgY29tcHV0ZXIsIGV2ZW4gdGhvdWdoIHdpdGggcGF0aWVuY2UKKyAgICAjIHRoZSB0ZXN0IGV2ZW50dWFsbHkgc3VjY2VlZHMgKHdpdGggYSBtYXggbGluZSBsZW5ndGggb2YgMjU2aykuCisgICAgIyBJbnN0ZWFkLCBsZXQncyBqdXN0IHB1bnQ6IHVzZSB0aGUgbWluaW11bSBsaW5lbGVuZ3RoIHJlcG9ydGVkIGJ5CisgICAgIyBhbGwgb2YgdGhlIHN1cHBvcnRlZCBwbGF0Zm9ybXM6IDgxOTIgKG9uIE5ULzJLL1hQKS4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKKyAgICA7OworCisgIG1pbnQqKQorICAgICMgT24gTWlOVCB0aGlzIGNhbiB0YWtlIGEgbG9uZyB0aW1lIGFuZCBydW4gb3V0IG9mIG1lbW9yeS4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKKyAgICA7OworCisgIGFtaWdhb3MqKQorICAgICMgT24gQW1pZ2FPUyB3aXRoIHBka3NoLCB0aGlzIHRlc3QgdGFrZXMgaG91cnMsIGxpdGVyYWxseS4KKyAgICAjIFNvIHdlIGp1c3QgcHVudCBhbmQgdXNlIGEgbWluaW11bSBsaW5lIGxlbmd0aCBvZiA4MTkyLgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyOworICAgIDs7CisKKyAgbmV0YnNkKiB8IGZyZWVic2QqIHwgb3BlbmJzZCogfCBkYXJ3aW4qIHwgZHJhZ29uZmx5KikKKyAgICAjIFRoaXMgaGFzIGJlZW4gYXJvdW5kIHNpbmNlIDM4NkJTRCwgYXQgbGVhc3QuICBMaWtlbHkgZnVydGhlci4KKyAgICBpZiB0ZXN0IC14IC9zYmluL3N5c2N0bDsgdGhlbgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWAvc2Jpbi9zeXNjdGwgLW4ga2Vybi5hcmdtYXhgCisgICAgZWxpZiB0ZXN0IC14IC91c3Ivc2Jpbi9zeXNjdGw7IHRoZW4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gL3Vzci9zYmluL3N5c2N0bCAtbiBrZXJuLmFyZ21heGAKKyAgICBlbHNlCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49NjU1MzYJIyB1c2FibGUgZGVmYXVsdCBmb3IgYWxsIEJTRHMKKyAgICBmaQorICAgICMgQW5kIGFkZCBhIHNhZmV0eSB6b25lCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gNGAKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcKiAzYAorICAgIDs7CisKKyAgaW50ZXJpeCopCisgICAgIyBXZSBrbm93IHRoZSB2YWx1ZSAyNjIxNDQgYW5kIGhhcmRjb2RlIGl0IHdpdGggYSBzYWZldHkgem9uZSAobGlrZSBCU0QpCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTE5NjYwOAorICAgIDs7CisKKyAgb3MyKikKKyAgICAjIFRoZSB0ZXN0IHRha2VzIGEgbG9uZyB0aW1lIG9uIE9TLzIuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTgxOTIKKyAgICA7OworCisgIG9zZiopCisgICAgIyBEci4gSGFucyBFa2tlaGFyZCBQbGVzc2VyIHJlcG9ydHMgc2VlaW5nIGEga2VybmVsIHBhbmljIHJ1bm5pbmcgY29uZmlndXJlCisgICAgIyBkdWUgdG8gdGhpcyB0ZXN0IHdoZW4gZXhlY19kaXNhYmxlX2FyZ19saW1pdCBpcyAxIG9uIFRydTY0LiBJdCBpcyBub3QKKyAgICAjIG5pY2UgdG8gY2F1c2Uga2VybmVsIHBhbmljcyBzbyBsZXRzIGF2b2lkIHRoZSBsb29wIGJlbG93LgorICAgICMgRmlyc3Qgc2V0IGEgcmVhc29uYWJsZSBkZWZhdWx0LgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xNjM4NAorICAgICMKKyAgICBpZiB0ZXN0IC14IC9zYmluL3N5c2NvbmZpZzsgdGhlbgorICAgICAgY2FzZSBgL3NiaW4vc3lzY29uZmlnIC1xIHByb2MgZXhlY19kaXNhYmxlX2FyZ19saW1pdGAgaW4KKyAgICAgICAgKjEqKSBsdF9jdl9zeXNfbWF4X2NtZF9sZW49LTEgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICAgIDs7CisgIHNjbzMuMnY1KikKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTAyNDAwCisgICAgOzsKKyAgc3lzdjUqIHwgc2NvNXY2KiB8IHN5c3Y0LjJ1dzIqKQorICAgIGthcmdtYXg9YGdyZXAgQVJHX01BWCAvZXRjL2NvbmYvY2YuZC9zdHVuZSAyPi9kZXYvbnVsbGAKKyAgICBpZiB0ZXN0IC1uICIka2FyZ21heCI7IHRoZW4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZWNobyAka2FyZ21heCB8IHNlZCAncy8uKlsJIF0vLydgCisgICAgZWxzZQorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTMyNzY4CisgICAgZmkKKyAgICA7OworICAqKQorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gKGdldGNvbmYgQVJHX01BWCkgMj4gL2Rldi9udWxsYAorICAgIGlmIHRlc3QgLW4gIiRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iOyB0aGVuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyA0YAorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXCogM2AKKyAgICBlbHNlCisgICAgICAjIE1ha2UgdGVzdHN0cmluZyBhIGxpdHRsZSBiaWdnZXIgYmVmb3JlIHdlIGRvIGFueXRoaW5nIHdpdGggaXQuCisgICAgICAjIGEgMUsgc3RyaW5nIHNob3VsZCBiZSBhIHJlYXNvbmFibGUgc3RhcnQuCisgICAgICBmb3IgaSBpbiAxIDIgMyA0IDUgNiA3IDggOyBkbworICAgICAgICB0ZXN0c3RyaW5nPSR0ZXN0c3RyaW5nJHRlc3RzdHJpbmcKKyAgICAgIGRvbmUKKyAgICAgIFNIRUxMPSR7U0hFTEwtJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH19CisgICAgICAjIElmIHRlc3QgaXMgbm90IGEgc2hlbGwgYnVpbHQtaW4sIHdlJ2xsIHByb2JhYmx5IGVuZCB1cCBjb21wdXRpbmcgYQorICAgICAgIyBtYXhpbXVtIGxlbmd0aCB0aGF0IGlzIG9ubHkgaGFsZiBvZiB0aGUgYWN0dWFsIG1heGltdW0gbGVuZ3RoLCBidXQKKyAgICAgICMgd2UgY2FuJ3QgdGVsbC4KKyAgICAgIHdoaWxlIHsgdGVzdCAiWCJgZW52IGVjaG8gIiR0ZXN0c3RyaW5nJHRlc3RzdHJpbmciIDI+L2Rldi9udWxsYCBcCisJICAgICAgICAgPSAiWCR0ZXN0c3RyaW5nJHRlc3RzdHJpbmciOyB9ID4vZGV2L251bGwgMj4mMSAmJgorCSAgICAgIHRlc3QgJGkgIT0gMTcgIyAxLzIgTUIgc2hvdWxkIGJlIGVub3VnaAorICAgICAgZG8KKyAgICAgICAgaT1gZXhwciAkaSArIDFgCisgICAgICAgIHRlc3RzdHJpbmc9JHRlc3RzdHJpbmckdGVzdHN0cmluZworICAgICAgZG9uZQorICAgICAgIyBPbmx5IGNoZWNrIHRoZSBzdHJpbmcgbGVuZ3RoIG91dHNpZGUgdGhlIGxvb3AuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgIlgkdGVzdHN0cmluZyIgOiAiLioiIDI+JjFgCisgICAgICB0ZXN0c3RyaW5nPQorICAgICAgIyBBZGQgYSBzaWduaWZpY2FudCBzYWZldHkgZmFjdG9yIGJlY2F1c2UgQysrIGNvbXBpbGVycyBjYW4gdGFjayBvbgorICAgICAgIyBtYXNzaXZlIGFtb3VudHMgb2YgYWRkaXRpb25hbCBhcmd1bWVudHMgYmVmb3JlIHBhc3NpbmcgdGhlbSB0byB0aGUKKyAgICAgICMgbGlua2VyLiAgSXQgYXBwZWFycyBhcyB0aG91Z2ggMS8yIGlzIGEgdXNhYmxlIHZhbHVlLgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gMmAKKyAgICBmaQorICAgIDs7CisgIGVzYWMKKworZmkKKworaWYgdGVzdCAtbiAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIDsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3N5c19tYXhfY21kX2xlbiIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3N5c19tYXhfY21kX2xlbiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBub25lIiA+JjUKKyRhc19lY2hvICJub25lIiA+JjY7IH0KK2ZpCittYXhfY21kX2xlbj0kbHRfY3Zfc3lzX21heF9jbWRfbGVuCisKKworCisKKworCis6ICR7Q1A9ImNwIC1mIn0KKzogJHtNVj0ibXYgLWYifQorOiAke1JNPSJybSAtZiJ9CisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgc29tZSBYU0kgY29uc3RydWN0cyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBzb21lIFhTSSBjb25zdHJ1Y3RzLi4uICIgPiY2OyB9CisjIFRyeSBzb21lIFhTSSBmZWF0dXJlcworeHNpX3NoZWxsPW5vCisoIF9sdF9kdW1teT0iYS9iL2MiCisgIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCR7X2x0X2R1bW15Iz8/fSIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCisgICAgICA9IGMsYS9iLGIvYywgXAorICAgICYmIGV2YWwgJ3Rlc3QgJCgoIDEgKyAxICkpIC1lcSAyIFwKKyAgICAmJiB0ZXN0ICIkeyNfbHRfZHVtbXl9IiAtZXEgNScgKSA+L2Rldi9udWxsIDI+JjEgXAorICAmJiB4c2lfc2hlbGw9eWVzCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHhzaV9zaGVsbCIgPiY1CiskYXNfZWNobyAiJHhzaV9zaGVsbCIgPiY2OyB9CisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBcIis9XCIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgXCIrPVwiLi4uICIgPiY2OyB9CitsdF9zaGVsbF9hcHBlbmQ9bm8KKyggZm9vPWJhcjsgc2V0IGZvbyBiYXo7IGV2YWwgIiQxKz1cJDIiICYmIHRlc3QgIiRmb28iID0gYmFyYmF6ICkgXAorICAgID4vZGV2L251bGwgMj4mMSBcCisgICYmIGx0X3NoZWxsX2FwcGVuZD15ZXMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfc2hlbGxfYXBwZW5kIiA+JjUKKyRhc19lY2hvICIkbHRfc2hlbGxfYXBwZW5kIiA+JjY7IH0KKworCitpZiAoIChNQUlMPTYwOyB1bnNldCBNQUlMKSB8fCBleGl0KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgbHRfdW5zZXQ9dW5zZXQKK2Vsc2UKKyAgbHRfdW5zZXQ9ZmFsc2UKK2ZpCisKKworCisKKworIyB0ZXN0IEVCQ0RJQyBvciBBU0NJSQorY2FzZSBgZWNobyBYfHRyIFggJ1wxMDEnYCBpbgorIEEpICMgQVNDSUkgYmFzZWQgc3lzdGVtCisgICAgIyBcbiBpcyBub3QgaW50ZXJwcmV0ZWQgY29ycmVjdGx5IGJ5IFNvbGFyaXMgOCAvdXNyL3VjYi90cgorICBsdF9TUDJOTD0ndHIgXDA0MCBcMDEyJworICBsdF9OTDJTUD0ndHIgXDAxNVwwMTIgXDA0MFwwNDAnCisgIDs7CisgKikgIyBFQkNESUMgYmFzZWQgc3lzdGVtCisgIGx0X1NQMk5MPSd0ciBcMTAwIFxuJworICBsdF9OTDJTUD0ndHIgXHJcbiBcMTAwXDEwMCcKKyAgOzsKK2VzYWMKKworCisKKworCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdC4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl90b19ob3N0X2ZpbGVfY21kKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkaG9zdCBpbgorICAqLSotbWluZ3cqICkKKyAgICBjYXNlICRidWlsZCBpbgorICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisgICAgICAgIDs7CisgICAgICAqLSotY3lnd2luKiApCisgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMgorICAgICAgICA7OworICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAorICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b193MzIKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgKi0qLWN5Z3dpbiogKQorICAgIGNhc2UgJGJ1aWxkIGluCisgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4KKyAgICAgICAgOzsKKyAgICAgICotKi1jeWd3aW4qICkKKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisgICAgICAgIDs7CisgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4CisgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbgorICAgICAgICA7OworICAgIGVzYWMKKyAgICA7OworICAqICkgIyB1bmhhbmRsZWQgaG9zdHMgKGFuZCAibm9ybWFsIiBuYXRpdmUgYnVpbGRzKQorICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorICAgIDs7Citlc2FjCisKK2ZpCisKK3RvX2hvc3RfZmlsZV9jbWQ9JGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiID4mNjsgfQorCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gdG9vbGNoYWluIGZvcm1hdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byB0b29sY2hhaW4gZm9ybWF0Li4uICIgPiY2OyB9CitpZiAke2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICAjYXNzdW1lIG9yZGluYXJ5IGNyb3NzIHRvb2xzLCBvciBuYXRpdmUgYnVpbGQuCitsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKK2Nhc2UgJGhvc3QgaW4KKyAgKi0qLW1pbmd3KiApCisgICAgY2FzZSAkYnVpbGQgaW4KKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKyAgICAgICAgbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorICAgICAgICA7OworICAgIGVzYWMKKyAgICA7OworZXNhYworCitmaQorCit0b190b29sX2ZpbGVfY21kPSRsdF9jdl90b190b29sX2ZpbGVfY21kCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiID4mNQorJGFzX2VjaG8gIiRsdF9jdl90b190b29sX2ZpbGVfY21kIiA+JjY7IH0KKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcy4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9sZF9yZWxvYWRfZmxhZys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X2xkX3JlbG9hZF9mbGFnPSctcicKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2xkX3JlbG9hZF9mbGFnIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfbGRfcmVsb2FkX2ZsYWciID4mNjsgfQorcmVsb2FkX2ZsYWc9JGx0X2N2X2xkX3JlbG9hZF9mbGFnCitjYXNlICRyZWxvYWRfZmxhZyBpbgorIiIgfCAiICIqKSA7OworKikgcmVsb2FkX2ZsYWc9IiAkcmVsb2FkX2ZsYWciIDs7Citlc2FjCityZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCitjYXNlICRob3N0X29zIGluCisgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKyAgICAgIHJlbG9hZF9jbWRzPWZhbHNlCisgICAgZmkKKyAgICA7OworICBkYXJ3aW4qKQorICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICByZWxvYWRfY21kcz0nJExUQ0MgJExUQ0ZMQUdTIC1ub3N0ZGxpYiAke3dsfS1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisgICAgZWxzZQorICAgICAgcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworICAgIGZpCisgICAgOzsKK2VzYWMKKworCisKKworCisKKworCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW9iamR1bXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9b2JqZHVtcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfT0JKRFVNUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRPQkpEVU1QIjsgdGhlbgorICBhY19jdl9wcm9nX09CSkRVTVA9IiRPQkpEVU1QIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfT0JKRFVNUD0iJHthY190b29sX3ByZWZpeH1vYmpkdW1wIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK09CSkRVTVA9JGFjX2N2X3Byb2dfT0JKRFVNUAoraWYgdGVzdCAtbiAiJE9CSkRVTVAiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkT0JKRFVNUCIgPiY1CiskYXNfZWNobyAiJE9CSkRVTVAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX09CSkRVTVAiOyB0aGVuCisgIGFjX2N0X09CSkRVTVA9JE9CSkRVTVAKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJvYmpkdW1wIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBvYmpkdW1wOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X09CSkRVTVAiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUD0iJGFjX2N0X09CSkRVTVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QPSJvYmpkdW1wIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X09CSkRVTVA9JGFjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUAoraWYgdGVzdCAtbiAiJGFjX2N0X09CSkRVTVAiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfT0JKRFVNUCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X09CSkRVTVAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9PQkpEVU1QIiA9IHg7IHRoZW4KKyAgICBPQkpEVU1QPSJmYWxzZSIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBPQkpEVU1QPSRhY19jdF9PQkpEVU1QCisgIGZpCitlbHNlCisgIE9CSkRVTVA9IiRhY19jdl9wcm9nX09CSkRVTVAiCitmaQorCit0ZXN0IC16ICIkT0JKRFVNUCIgJiYgT0JKRFVNUD1vYmpkdW1wCisKKworCisKKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byByZWNvZ25pemUgZGVwZW5kZW50IGxpYnJhcmllcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gcmVjb2duaXplIGRlcGVuZGVudCBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE1BR0lDX0NNRCcKK2x0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPQorbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J3Vua25vd24nCisjIE5lZWQgdG8gc2V0IHRoZSBwcmVjZWRpbmcgdmFyaWFibGUgb24gYWxsIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQKKyMgaW50ZXJsaWJyYXJ5IGRlcGVuZGVuY2llcy4KKyMgJ25vbmUnIC0tIGRlcGVuZGVuY2llcyBub3Qgc3VwcG9ydGVkLgorIyBgdW5rbm93bicgLS0gc2FtZSBhcyBub25lLCBidXQgZG9jdW1lbnRzIHRoYXQgd2UgcmVhbGx5IGRvbid0IGtub3cuCisjICdwYXNzX2FsbCcgLS0gYWxsIGRlcGVuZGVuY2llcyBwYXNzZWQgd2l0aCBubyBjaGVja3MuCisjICd0ZXN0X2NvbXBpbGUnIC0tIGNoZWNrIGJ5IG1ha2luZyB0ZXN0IHByb2dyYW0uCisjICdmaWxlX21hZ2ljIFtbcmVnZXhdXScgLS0gY2hlY2sgYnkgbG9va2luZyBmb3IgZmlsZXMgaW4gbGlicmFyeSBwYXRoCisjIHdoaWNoIHJlc3BvbmRzIHRvIHRoZSAkZmlsZV9tYWdpY19jbWQgd2l0aCBhIGdpdmVuIGV4dGVuZGVkIHJlZ2V4LgorIyBJZiB5b3UgaGF2ZSBgZmlsZScgb3IgZXF1aXZhbGVudCBvbiB5b3VyIHN5c3RlbSBhbmQgeW91J3JlIG5vdCBzdXJlCisjIHdoZXRoZXIgYHBhc3NfYWxsJyB3aWxsICphbHdheXMqIHdvcmssIHlvdSBwcm9iYWJseSB3YW50IHRoaXMgb25lLgorCitjYXNlICRob3N0X29zIGluCithaXhbNC05XSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2Jlb3MqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitic2RpWzQ1XSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbMC05XVswLTldKi1iaXQgW01MXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliKScKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy91c3IvYmluL2ZpbGUgLUwnCisgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS9zaGxpYi9saWJjLnNvCisgIDs7CisKK2N5Z3dpbiopCisgICMgZnVuY193aW4zMl9saWJpZCBpcyBhIHNoZWxsIGZ1bmN0aW9uIGRlZmluZWQgaW4gbHRtYWluLnNoCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJworICA7OworCittaW5ndyogfCBwdzMyKikKKyAgIyBCYXNlIE1TWVMvTWluR1cgZG8gbm90IHByb3ZpZGUgdGhlICdmaWxlJyBjb21tYW5kIG5lZWRlZCBieQorICAjIGZ1bmNfd2luMzJfbGliaWQgc2hlbGwgZnVuY3Rpb24sIHNvIHVzZSBhIHdlYWtlciB0ZXN0IGJhc2VkIG9uICdvYmpkdW1wJywKKyAgIyB1bmxlc3Mgd2UgZmluZCAnZmlsZScsIGZvciBleGFtcGxlIGJlY2F1c2Ugd2UgYXJlIGNyb3NzLWNvbXBpbGluZy4KKyAgIyBmdW5jX3dpbjMyX2xpYmlkIGFzc3VtZXMgQlNEIG5tLCBzbyBkaXNhbGxvdyBpdCBpZiB1c2luZyBNUyBkdW1wYmluLgorICBpZiAoIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIkJTRCBubSIgJiYgZmlsZSAvICkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKKyAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKKyAgZWxzZQorICAgICMgS2VlcCB0aGlzIHBhdHRlcm4gaW4gc3luYyB3aXRoIHRoZSBvbmUgaW4gZnVuY193aW4zMl9saWJpZC4KKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCAocGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT98cGUtYXJtLXdpbmNlfHBlLXg4Ni02NCknCisgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRPQkpEVU1QIC1mJworICBmaQorICA7OworCitjZWdjYyopCisgICMgdXNlIHRoZSB3ZWFrZXIgdGVzdCBiYXNlZCBvbiAnb2JqZHVtcCcuIFNlZSBtaW5ndyouCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IHBlLWFybS0uKmxpdHRsZSguKmFyY2hpdGVjdHVyZTogYXJtKT8nCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKKyAgOzsKKworZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworZnJlZWJzZCogfCBkcmFnb25mbHkqKQorICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KKyAgICBjYXNlICRob3N0X2NwdSBpbgorICAgIGkqODYgKQorICAgICAgIyBOb3Qgc3VyZSB3aGV0aGVyIHRoZSBwcmVzZW5jZSBvZiBPcGVuQlNEIGhlcmUgd2FzIGEgbWlzdGFrZS4KKyAgICAgICMgTGV0J3MgYWNjZXB0IGJvdGggb2YgdGhlbSB1bnRpbCB0aGlzIGlzIGNsZWFyZWQgdXAuCisgICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoRnJlZUJTRHxPcGVuQlNEfERyYWdvbkZseSkvaVszLTldODYgKGNvbXBhY3QgKT9kZW1hbmQgcGFnZWQgc2hhcmVkIGxpYnJhcnknCisgICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCisgICAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvdXNyL2xpYi9saWJjLnNvLipgCisgICAgICA7OworICAgIGVzYWMKKyAgZWxzZQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIGZpCisgIDs7CisKK2dudSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2hhaWt1KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworaHB1eDEwLjIwKiB8IGhwdXgxMSopCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKKyAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgaWE2NCopCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbMC05XVswLTldWzAtOV18RUxGLVswLTldWzAtOV0pIHNoYXJlZCBvYmplY3QgZmlsZSAtIElBNjQnCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvaHB1eDMyL2xpYmMuc28KKyAgICA7OworICBocHBhKjY0KikKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoc1swLTldWzAtOV1bMC05XXxFTEZbIC1dWzAtOV1bMC05XSkoLWJpdCk/KCBbTE1dU0IpPyBzaGFyZWQgb2JqZWN0KCBmaWxlKT9bLCAtXSogUEEtUklTQyBbMC05XVwuWzAtOV0nCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvcGEyMF82NC9saWJjLnNsCisgICAgOzsKKyAgKikKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoc1swLTldWzAtOV1bMC05XXxQQS1SSVNDWzAtOV1cLlswLTldKSBzaGFyZWQgbGlicmFyeScKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9saWJjLnNsCisgICAgOzsKKyAgZXNhYworICA7OworCitpbnRlcml4WzMtOV0qKQorICAjIFBJQyBjb2RlIGlzIGJyb2tlbiBvbiBJbnRlcml4IDMueCwgdGhhdCdzIHdoeSB8XC5hIG5vdCB8X3BpY1wuYSBoZXJlCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9dKyhcLnNvfFwuYSkkJworICA7OworCitpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICBjYXNlICRMRCBpbgorICAqLTMyfCoiLTMyICIpIGxpYm1hZ2ljPTMyLWJpdDs7CisgICotbjMyfCoiLW4zMiAiKSBsaWJtYWdpYz1OMzI7OworICAqLTY0fCoiLTY0ICIpIGxpYm1hZ2ljPTY0LWJpdDs7CisgICopIGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKKyAgZXNhYworICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCisjIFRoaXMgbXVzdCBiZSBnbGliYy9FTEYuCitsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK25ldGJzZCopCisgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9dKyhcLnNvXC5bMC05XStcLlswLTldK3xfcGljXC5hKSQnCisgIGVsc2UKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb3xfcGljXC5hKSQnCisgIGZpCisgIDs7CisKK25ld29zNiopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbMC05XVswLTldKi1iaXQgW01MXVNCIChleGVjdXRhYmxlfGR5bmFtaWMgbGliKScKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9L3Vzci9iaW4vZmlsZQorICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9saWJubHMuc28KKyAgOzsKKworKm50byogfCAqcW54KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworb3BlbmJzZCopCisgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb1wuWzAtOV0rXC5bMC05XSt8XC5zb3xfcGljXC5hKSQnCisgIGVsc2UKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb1wuWzAtOV0rXC5bMC05XSt8X3BpY1wuYSkkJworICBmaQorICA7OworCitvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK3Jkb3MqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitzb2xhcmlzKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKiB8IHN5c3Y0KnV3MiopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK3N5c3Y0IHwgc3lzdjQuMyopCisgIGNhc2UgJGhvc3RfdmVuZG9yIGluCisgIG1vdG9yb2xhKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbMC05XVswLTldKi1iaXQgW01MXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliKSBNWzAtOV1bMC05XSogVmVyc2lvbiBbMC05XScKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvdXNyL2xpYi9saWJjLnNvKmAKKyAgICA7OworICBuY3IpCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgICA7OworICBzZXF1ZW50KQorICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvYmluL2ZpbGUnCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFswLTldWzAtOV0qLWJpdCBbTE1dU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIgKScKKyAgICA7OworICBzbmkpCisgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy9iaW4vZmlsZScKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0iZmlsZV9tYWdpYyBFTEYgWzAtOV1bMC05XSotYml0IFtMTV1TQiBkeW5hbWljIGxpYiIKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vbGliL2xpYmMuc28KKyAgICA7OworICBzaWVtZW5zKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICAgOzsKKyAgcGMpCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgICA7OworICBlc2FjCisgIDs7CisKK3RwZiopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7Citlc2FjCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNjsgfQorCitmaWxlX21hZ2ljX2dsb2I9Cit3YW50X25vY2FzZWdsb2I9bm8KK2lmIHRlc3QgIiRidWlsZCIgPSAiJGhvc3QiOyB0aGVuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgbWluZ3cqIHwgcHczMiopCisgICAgaWYgKCBzaG9wdCB8IGdyZXAgbm9jYXNlZ2xvYiApID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgd2FudF9ub2Nhc2VnbG9iPXllcworICAgIGVsc2UKKyAgICAgIGZpbGVfbWFnaWNfZ2xvYj1gZWNobyBhQWJCY0NkRGVFZkZnR2hIaUlqSmtLbExtTW5Ob09wUHFRclJzU3RUdVV2VndXeFh5WXpaIHwgJFNFRCAtZSAicy9cKC4uXCkvc1wvW1wxXVwvW1wxXVwvZzsvZyJgCisgICAgZmkKKyAgICA7OworICBlc2FjCitmaQorCitmaWxlX21hZ2ljX2NtZD0kbHRfY3ZfZmlsZV9tYWdpY19jbWQKK2RlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZAordGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfRExMVE9PTCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgorICBhY19jdl9wcm9nX0RMTFRPT0w9IiRETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfRExMVE9PTD0iJHthY190b29sX3ByZWZpeH1kbGx0b29sIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0RMTFRPT0w9JGFjX2N2X3Byb2dfRExMVE9PTAoraWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkRExMVE9PTCIgPiY1CiskYXNfZWNobyAiJERMTFRPT0wiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX0RMTFRPT0wiOyB0aGVuCisgIGFjX2N0X0RMTFRPT0w9JERMTFRPT0wKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJkbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBkbGx0b29sOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9ETExUT09MKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTD0iJGFjX2N0X0RMTFRPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSJkbGx0b29sIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0RMTFRPT0w9JGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTAoraWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfRExMVE9PTCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0RMTFRPT0wiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9ETExUT09MIiA9IHg7IHRoZW4KKyAgICBETExUT09MPSJmYWxzZSIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBETExUT09MPSRhY19jdF9ETExUT09MCisgIGZpCitlbHNlCisgIERMTFRPT0w9IiRhY19jdl9wcm9nX0RMTFRPT0wiCitmaQorCit0ZXN0IC16ICIkRExMVE9PTCIgJiYgRExMVE9PTD1kbGx0b29sCisKKworCisKKworCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGFzc29jaWF0ZSBydW50aW1lIGFuZCBsaW5rIGxpYnJhcmllcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gYXNzb2NpYXRlIHJ1bnRpbWUgYW5kIGxpbmsgbGlicmFyaWVzLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9J3Vua25vd24nCisKK2Nhc2UgJGhvc3Rfb3MgaW4KK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgIyB0d28gZGlmZmVyZW50IHNoZWxsIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGx0bWFpbi5zaAorICAjIGRlY2lkZSB3aGljaCB0byB1c2UgYmFzZWQgb24gY2FwYWJpbGl0aWVzIG9mICRETExUT09MCisgIGNhc2UgYCRETExUT09MIC0taGVscCAyPiYxYCBpbgorICAqLS1pZGVudGlmeS1zdHJpY3QqKQorICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYgorICAgIDs7CisgICopCisgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrCisgICAgOzsKKyAgZXNhYworICA7OworKikKKyAgIyBmYWxsYmFjazogYXNzdW1lIGxpbmtsaWIgSVMgc2hhcmVkbGliCisgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSIkRUNITyIKKyAgOzsKK2VzYWMKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgPiY2OyB9CitzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKK3Rlc3QgLXogIiRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgJiYgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JEVDSE8KKworCisKKworCisKKworaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICBmb3IgYWNfcHJvZyBpbiBhcgorICBkbworICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19BUis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRBUiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19BUj0iJEFSIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfQVI9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0FSPSRhY19jdl9wcm9nX0FSCitpZiB0ZXN0IC1uICIkQVIiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQVIiID4mNQorJGFzX2VjaG8gIiRBUiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgICAgdGVzdCAtbiAiJEFSIiAmJiBicmVhaworICBkb25lCitmaQoraWYgdGVzdCAteiAiJEFSIjsgdGhlbgorICBhY19jdF9BUj0kQVIKKyAgZm9yIGFjX3Byb2cgaW4gYXIKK2RvCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9BUis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9BUiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iJGFjX2N0X0FSIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfQVI9IiRhY19wcm9nIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0FSPSRhY19jdl9wcm9nX2FjX2N0X0FSCitpZiB0ZXN0IC1uICIkYWNfY3RfQVIiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfQVIiID4mNQorJGFzX2VjaG8gIiRhY19jdF9BUiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgIHRlc3QgLW4gIiRhY19jdF9BUiIgJiYgYnJlYWsKK2RvbmUKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0FSIiA9IHg7IHRoZW4KKyAgICBBUj0iZmFsc2UiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgQVI9JGFjX2N0X0FSCisgIGZpCitmaQorCis6ICR7QVI9YXJ9Cis6ICR7QVJfRkxBR1M9Y3J1fQorCisKKworCisKKworCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGFyY2hpdmVyIEBGSUxFIHN1cHBvcnQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGFyY2hpdmVyIEBGSUxFIHN1cHBvcnQuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfYXJfYXRfZmlsZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X2FyX2F0X2ZpbGU9bm8KKyAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBlY2hvIGNvbmZ0ZXN0LiRhY19vYmpleHQgPiBjb25mdGVzdC5sc3QKKyAgICAgIGx0X2FyX3RyeT0nJEFSICRBUl9GTEFHUyBsaWJjb25mdGVzdC5hIEBjb25mdGVzdC5sc3QgPiY1JworICAgICAgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGx0X2FyX3RyeVwiIjsgfSA+JjUKKyAgKGV2YWwgJGx0X2FyX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KKyAgICAgIGlmIHRlc3QgIiRhY19zdGF0dXMiIC1lcSAwOyB0aGVuCisJIyBFbnN1cmUgdGhlIGFyY2hpdmVyIGZhaWxzIHVwb24gYm9ndXMgZmlsZSBuYW1lcy4KKwlybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGxpYmNvbmZ0ZXN0LmEKKwl7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkbHRfYXJfdHJ5XCIiOyB9ID4mNQorICAoZXZhbCAkbHRfYXJfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorCWlmIHRlc3QgIiRhY19zdGF0dXMiIC1uZSAwOyB0aGVuCisgICAgICAgICAgbHRfY3ZfYXJfYXRfZmlsZT1ACisgICAgICAgIGZpCisgICAgICBmaQorICAgICAgcm0gLWYgY29uZnRlc3QuKiBsaWJjb25mdGVzdC5hCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfYXJfYXRfZmlsZSIgPiY1CiskYXNfZWNobyAiJGx0X2N2X2FyX2F0X2ZpbGUiID4mNjsgfQorCitpZiB0ZXN0ICJ4JGx0X2N2X2FyX2F0X2ZpbGUiID0geG5vOyB0aGVuCisgIGFyY2hpdmVyX2xpc3Rfc3BlYz0KK2Vsc2UKKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPSRsdF9jdl9hcl9hdF9maWxlCitmaQorCisKKworCisKKworCitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1zdHJpcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1zdHJpcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfU1RSSVArOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCisgIGFjX2N2X3Byb2dfU1RSSVA9IiRTVFJJUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX1NUUklQPSIke2FjX3Rvb2xfcHJlZml4fXN0cmlwIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK1NUUklQPSRhY19jdl9wcm9nX1NUUklQCitpZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkU1RSSVAiID4mNQorJGFzX2VjaG8gIiRTVFJJUCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfU1RSSVAiOyB0aGVuCisgIGFjX2N0X1NUUklQPSRTVFJJUAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInN0cmlwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBzdHJpcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfU1RSSVArOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfU1RSSVAiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfU1RSSVA9IiRhY19jdF9TVFJJUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X1NUUklQPSJzdHJpcCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9TVFJJUD0kYWNfY3ZfcHJvZ19hY19jdF9TVFJJUAoraWYgdGVzdCAtbiAiJGFjX2N0X1NUUklQIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X1NUUklQIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfU1RSSVAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9TVFJJUCIgPSB4OyB0aGVuCisgICAgU1RSSVA9IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgU1RSSVA9JGFjX2N0X1NUUklQCisgIGZpCitlbHNlCisgIFNUUklQPSIkYWNfY3ZfcHJvZ19TVFJJUCIKK2ZpCisKK3Rlc3QgLXogIiRTVFJJUCIgJiYgU1RSSVA9OgorCisKKworCisKKworaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9cmFubGliIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXJhbmxpYjsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfUkFOTElCKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19SQU5MSUI9IiRSQU5MSUIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19SQU5MSUI9IiR7YWNfdG9vbF9wcmVmaXh9cmFubGliIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK1JBTkxJQj0kYWNfY3ZfcHJvZ19SQU5MSUIKK2lmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkUkFOTElCIiA+JjUKKyRhc19lY2hvICIkUkFOTElCIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19SQU5MSUIiOyB0aGVuCisgIGFjX2N0X1JBTkxJQj0kUkFOTElCCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAicmFubGliIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSByYW5saWI7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X1JBTkxJQis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9SQU5MSUIiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCPSIkYWNfY3RfUkFOTElCIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCPSJyYW5saWIiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfUkFOTElCPSRhY19jdl9wcm9nX2FjX2N0X1JBTkxJQgoraWYgdGVzdCAtbiAiJGFjX2N0X1JBTkxJQiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9SQU5MSUIiID4mNQorJGFzX2VjaG8gIiRhY19jdF9SQU5MSUIiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9SQU5MSUIiID0geDsgdGhlbgorICAgIFJBTkxJQj0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBSQU5MSUI9JGFjX2N0X1JBTkxJQgorICBmaQorZWxzZQorICBSQU5MSUI9IiRhY19jdl9wcm9nX1JBTkxJQiIKK2ZpCisKK3Rlc3QgLXogIiRSQU5MSUIiICYmIFJBTkxJQj06CisKKworCisKKworCisjIERldGVybWluZSBjb21tYW5kcyB0byBjcmVhdGUgb2xkLXN0eWxlIHN0YXRpYyBhcmNoaXZlcy4KK29sZF9hcmNoaXZlX2NtZHM9JyRBUiAkQVJfRkxBR1MgJG9sZGxpYiRvbGRvYmpzJworb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDY0NCAkb2xkbGliJworb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0KKworaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICBvcGVuYnNkKikKKyAgICBvbGRfcG9zdGluc3RhbGxfY21kcz0iJG9sZF9wb3N0aW5zdGFsbF9jbWRzflwkUkFOTElCIC10IFwkdG9vbF9vbGRsaWIiCisgICAgOzsKKyAgKikKKyAgICBvbGRfcG9zdGluc3RhbGxfY21kcz0iJG9sZF9wb3N0aW5zdGFsbF9jbWRzflwkUkFOTElCIFwkdG9vbF9vbGRsaWIiCisgICAgOzsKKyAgZXNhYworICBvbGRfYXJjaGl2ZV9jbWRzPSIkb2xkX2FyY2hpdmVfY21kc35cJFJBTkxJQiBcJHRvb2xfb2xkbGliIgorZmkKKworY2FzZSAkaG9zdF9vcyBpbgorICBkYXJ3aW4qKQorICAgIGxvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbj15ZXMgOzsKKyAgKikKKyAgICBsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb249bm8gOzsKK2VzYWMKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyMgSWYgbm8gQyBjb21waWxlciB3YXMgc3BlY2lmaWVkLCB1c2UgQ0MuCitMVENDPSR7TFRDQy0iJENDIn0KKworIyBJZiBubyBDIGNvbXBpbGVyIGZsYWdzIHdlcmUgc3BlY2lmaWVkLCB1c2UgQ0ZMQUdTLgorTFRDRkxBR1M9JHtMVENGTEFHUy0iJENGTEFHUyJ9CisKKyMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCitjb21waWxlcj0kQ0MKKworCisjIENoZWNrIGZvciBjb21tYW5kIHRvIGdyYWIgdGhlIHJhdyBzeW1ib2wgbmFtZSBmb2xsb3dlZCBieSBDIHN5bWJvbCBmcm9tIG5tLgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBjb21tYW5kIHRvIHBhcnNlICROTSBvdXRwdXQgZnJvbSAkY29tcGlsZXIgb2JqZWN0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGNvbW1hbmQgdG8gcGFyc2UgJE5NIG91dHB1dCBmcm9tICRjb21waWxlciBvYmplY3QuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyMgVGhlc2UgYXJlIHNhbmUgZGVmYXVsdHMgdGhhdCB3b3JrIG9uIGF0IGxlYXN0IGEgZmV3IG9sZCBzeXN0ZW1zLgorIyBbVGhleSBjb21lIGZyb20gVWx0cml4LiAgV2hhdCBjb3VsZCBiZSBvbGRlciB0aGFuIFVsdHJpeD8hISA7KV0KKworIyBDaGFyYWN0ZXIgY2xhc3MgZGVzY3JpYmluZyBOTSBnbG9iYWwgc3ltYm9sIGNvZGVzLgorc3ltY29kZT0nW0JDREVHUlNUXScKKworIyBSZWdleHAgdG8gbWF0Y2ggc3ltYm9scyB0aGF0IGNhbiBiZSBhY2Nlc3NlZCBkaXJlY3RseSBmcm9tIEMuCitzeW1wYXQ9J1woW19BLVphLXpdW19BLVphLXowLTldKlwpJworCisjIERlZmluZSBzeXN0ZW0tc3BlY2lmaWMgdmFyaWFibGVzLgorY2FzZSAkaG9zdF9vcyBpbgorYWl4KikKKyAgc3ltY29kZT0nW0JDRFRdJworICA7OworY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICBzeW1jb2RlPSdbQUJDREdJU1RXXScKKyAgOzsKK2hwdXgqKQorICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICAgIHN5bWNvZGU9J1tBQkNERUdSU1RdJworICBmaQorICA7OworaXJpeCogfCBub25zdG9wdXgqKQorICBzeW1jb2RlPSdbQkNERUdSU1RdJworICA7Oworb3NmKikKKyAgc3ltY29kZT0nW0JDREVHUVJTVF0nCisgIDs7Citzb2xhcmlzKikKKyAgc3ltY29kZT0nW0JEUlRdJworICA7Oworc2NvMy4ydjUqKQorICBzeW1jb2RlPSdbRFRdJworICA7Oworc3lzdjQuMnV3MiopCisgIHN5bWNvZGU9J1tEVF0nCisgIDs7CitzeXN2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqKQorICBzeW1jb2RlPSdbQUJEVF0nCisgIDs7CitzeXN2NCkKKyAgc3ltY29kZT0nW0RGTlNUVV0nCisgIDs7Citlc2FjCisKKyMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHVzZSBpdHMgc3RhbmRhcmQgc3ltYm9sIGNvZGVzLgorY2FzZSBgJE5NIC1WIDI+JjFgIGluCisqR05VKiB8ICond2l0aCBCRkQnKikKKyAgc3ltY29kZT0nW0FCQ0RHSVJTVFddJyA7OworZXNhYworCisjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBhIHByb3BlciBDIGRlY2xhcmF0aW9uLgorIyBTb21lIHN5c3RlbXMgKGVzcC4gb24gaWE2NCkgbGluayBkYXRhIGFuZCBjb2RlIHN5bWJvbHMgZGlmZmVyZW50bHksCisjIHNvIHVzZSB0aGlzIGdlbmVyYWwgYXBwcm9hY2guCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIC1lICdzL15UIC4qIFwoLipcKSQvZXh0ZXJuIGludCBcMSgpOy9wJyAtZSAncy9eJHN5bWNvZGUqIC4qIFwoLipcKSQvZXh0ZXJuIGNoYXIgXDE7L3AnIgorCisjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBzeW1ib2wgbmFtZSBhbmQgc3ltYm9sIGFkZHJlc3MKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpWyBdKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpWyBdKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwobGliW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKworIyBIYW5kbGUgQ1JMRiBpbiBtaW5ndyB0b29sIGNoYWluCitvcHRfY3I9CitjYXNlICRidWlsZF9vcyBpbgorbWluZ3cqKQorICBvcHRfY3I9YCRFQ0hPICd4XHswLDFcfScgfCB0ciB4ICdcMDE1J2AgIyBvcHRpb24gY3IgaW4gcmVnZXhwCisgIDs7Citlc2FjCisKKyMgVHJ5IHdpdGhvdXQgYSBwcmVmaXggdW5kZXJzY29yZSwgdGhlbiB3aXRoIGl0LgorZm9yIGFjX3N5bXByZnggaW4gIiIgIl8iOyBkbworCisgICMgVHJhbnNmb3JtIHN5bWNvZGUsIHN5bXBhdCwgYW5kIHN5bXByZnggaW50byBhIHJhdyBzeW1ib2wgYW5kIGEgQyBzeW1ib2wuCisgIHN5bXhmcm09IlxcMSAkYWNfc3ltcHJmeFxcMiBcXDIiCisKKyAgIyBXcml0ZSB0aGUgcmF3IGFuZCBDIGlkZW50aWZpZXJzLgorICBpZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgorICAgICMgRmFrZSBpdCBmb3IgZHVtcGJpbiBhbmQgc2F5IFQgZm9yIGFueSBub24tc3RhdGljIGZ1bmN0aW9uCisgICAgIyBhbmQgRCBmb3IgYW55IGdsb2JhbCB2YXJpYWJsZS4KKyAgICAjIEFsc28gZmluZCBDKysgYW5kIF9fZmFzdGNhbGwgc3ltYm9scyBmcm9tIE1TVkMrKywKKyAgICAjIHdoaWNoIHN0YXJ0IHdpdGggQCBvciA/LgorICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9IiRBV0sgJyJcCisiICAgICB7bGFzdF9zZWN0aW9uPXNlY3Rpb247IHNlY3Rpb249XCQgM307IlwKKyIgICAgIC9eQ09GRiBTWU1CT0wgVEFCTEUve2ZvcihpIGluIGhpZGUpIGRlbGV0ZSBoaWRlW2ldfTsiXAorIiAgICAgL1NlY3Rpb24gbGVuZ3RoIC4qI3JlbG9jcy4qKHBpY2sgYW55KS97aGlkZVtsYXN0X3NlY3Rpb25dPTF9OyJcCisiICAgICBcJCAwIX4vRXh0ZXJuYWwgKlx8L3tuZXh0fTsiXAorIiAgICAgLyAwKyBVTkRFRiAve25leHR9OyAvIFVOREVGIFwoW158XVwpKigpL3tuZXh0fTsiXAorIiAgICAge2lmKGhpZGVbc2VjdGlvbl0pIG5leHR9OyJcCisiICAgICB7Zj0wfTsgXCQgMH4vXChcKS4qXHwve2Y9MX07IHtwcmludGYgZiA/IFwiVCBcIiA6IFwiRCBcIn07IlwKKyIgICAgIHtzcGxpdChcJCAwLCBhLCAvXHx8XHIvKTsgc3BsaXQoYVsyXSwgcyl9OyJcCisiICAgICBzWzFdfi9eW0A/XS97cHJpbnQgc1sxXSwgc1sxXTsgbmV4dH07IlwKKyIgICAgIHNbMV1+cHJmeCB7c3BsaXQoc1sxXSx0LFwiQFwiKTsgcHJpbnQgdFsxXSwgc3Vic3RyKHRbMV0sbGVuZ3RoKHByZngpKX0iXAorIiAgICAgJyBwcmZ4PV4kYWNfc3ltcHJmeCIKKyAgZWxzZQorICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9InNlZCAtbiAtZSAncy9eLipbCSBdXCgkc3ltY29kZSRzeW1jb2RlKlwpWwkgXVsJIF0qJGFjX3N5bXByZngkc3ltcGF0JG9wdF9jciQvJHN5bXhmcm0vcCciCisgIGZpCisgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9IiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIHwgc2VkICcvIF9fZ251X2x0by9kJyIKKworICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBwaXBlIHdvcmtzIGNvcnJlY3RseS4KKyAgcGlwZV93b3Jrcz1ubworCisgIHJtIC1mIGNvbmZ0ZXN0KgorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorY2hhciBubV90ZXN0X3ZhcjsKK3ZvaWQgbm1fdGVzdF9mdW5jKHZvaWQpOwordm9pZCBubV90ZXN0X2Z1bmModm9pZCl7fQorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKK2ludCBtYWluKCl7bm1fdGVzdF92YXI9J2EnO25tX3Rlc3RfZnVuYygpO3JldHVybigwKTt9CitfTFRfRU9GCisKKyAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICAgICMgTm93IHRyeSB0byBncmFiIHRoZSBzeW1ib2xzLgorICAgIG5saXN0PWNvbmZ0ZXN0Lm5tCisgICAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJE5NIGNvbmZ0ZXN0LiRhY19vYmpleHQgXHwgIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiBcPiAkbmxpc3RcIiI7IH0gPiY1CisgIChldmFsICROTSBjb25mdGVzdC4kYWNfb2JqZXh0IFx8ICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgXD4gJG5saXN0KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zICIkbmxpc3QiOyB0aGVuCisgICAgICAjIFRyeSBzb3J0aW5nIGFuZCB1bmlxdWlmeWluZyB0aGUgb3V0cHV0LgorICAgICAgaWYgc29ydCAiJG5saXN0IiB8IHVuaXEgPiAiJG5saXN0IlQ7IHRoZW4KKwltdiAtZiAiJG5saXN0IlQgIiRubGlzdCIKKyAgICAgIGVsc2UKKwlybSAtZiAiJG5saXN0IlQKKyAgICAgIGZpCisKKyAgICAgICMgTWFrZSBzdXJlIHRoYXQgd2Ugc25hZ2dlZCBhbGwgdGhlIHN5bWJvbHMgd2UgbmVlZC4KKyAgICAgIGlmICRHUkVQICcgbm1fdGVzdF92YXIkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisJaWYgJEdSRVAgJyBubV90ZXN0X2Z1bmMkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisJICBjYXQgPDxfTFRfRU9GID4gY29uZnRlc3QuJGFjX2V4dAorLyogS2VlcCB0aGlzIGNvZGUgaW4gc3luYyBiZXR3ZWVuIGxpYnRvb2wubTQsIGx0bWFpbiwgbHRfc3lzdGVtLmgsIGFuZCB0ZXN0cy4gICovCisjaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfV0lOMzJfV0NFKQorLyogREFUQSBpbXBvcnRzIGZyb20gRExMcyBvbiBXSU4zMiBjb24ndCBiZSBjb25zdCwgYmVjYXVzZSBydW50aW1lCisgICByZWxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIC0tIHNlZSBsZCdzIGRvY3VtZW50YXRpb24gb24gcHNldWRvLXJlbG9jcy4gICovCisjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorI2VsaWYgZGVmaW5lZChfX29zZl9fKQorLyogVGhpcyBzeXN0ZW0gZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggcmVsb2NhdGlvbnMgaW4gY29uc3QgZGF0YS4gICovCisjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorI2Vsc2UKKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUIGNvbnN0CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCitfTFRfRU9GCisJICAjIE5vdyBnZW5lcmF0ZSB0aGUgc3ltYm9sIGZpbGUuCisJICBldmFsICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiJyA8ICIkbmxpc3QiIHwgJEdSRVAgLXYgbWFpbiA+PiBjb25mdGVzdC4kYWNfZXh0JworCisJICBjYXQgPDxfTFRfRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKKworLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICAqLworTFRfRExTWU1fQ09OU1Qgc3RydWN0IHsKKyAgY29uc3QgY2hhciAqbmFtZTsKKyAgdm9pZCAgICAgICAqYWRkcmVzczsKK30KK2x0X19QUk9HUkFNX19MVFhfcHJlbG9hZGVkX3N5bWJvbHNbXSA9Cit7CisgIHsgIkBQUk9HUkFNQCIsICh2b2lkICopIDAgfSwKK19MVF9FT0YKKwkgICRTRUQgInMvXiRzeW1jb2RlJHN5bWNvZGUqIFwoLipcKSBcKC4qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sLyIgPCAiJG5saXN0IiB8ICRHUkVQIC12IG1haW4gPj4gY29uZnRlc3QuJGFjX2V4dAorCSAgY2F0IDw8XF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAorICB7MCwgKHZvaWQgKikgMH0KK307CisKKy8qIFRoaXMgd29ya3MgYXJvdW5kIGEgcHJvYmxlbSBpbiBGcmVlQlNEIGxpbmtlciAqLworI2lmZGVmIEZSRUVCU0RfV09SS0FST1VORAorc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKKyAgcmV0dXJuIGx0X19QUk9HUkFNX19MVFhfcHJlbG9hZGVkX3N5bWJvbHM7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKK19MVF9FT0YKKwkgICMgTm93IHRyeSBsaW5raW5nIHRoZSB0d28gZmlsZXMuCisJICBtdiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0c3RtLiRhY19vYmpleHQKKwkgIGx0X2dsb2JzeW1fc2F2ZV9MSUJTPSRMSUJTCisJICBsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKwkgIExJQlM9ImNvbmZ0c3RtLiRhY19vYmpleHQiCisJICBDRkxBR1M9IiRDRkxBR1MkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWciCisJICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfbGlua1wiIjsgfSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKwkgICAgcGlwZV93b3Jrcz15ZXMKKwkgIGZpCisJICBMSUJTPSRsdF9nbG9ic3ltX3NhdmVfTElCUworCSAgQ0ZMQUdTPSRsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTCisJZWxzZQorCSAgZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF9mdW5jIGluICRubGlzdCIgPiY1CisJZmkKKyAgICAgIGVsc2UKKwllY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X3ZhciBpbiAkbmxpc3QiID4mNQorICAgICAgZmkKKyAgICBlbHNlCisgICAgICBlY2hvICJjYW5ub3QgcnVuICRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiA+JjUKKyAgICBmaQorICBlbHNlCisgICAgZWNobyAiJHByb2duYW1lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyAgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KiBjb25mdHN0KgorCisgICMgRG8gbm90IHVzZSB0aGUgZ2xvYmFsX3N5bWJvbF9waXBlIHVubGVzcyBpdCB3b3Jrcy4KKyAgaWYgdGVzdCAiJHBpcGVfd29ya3MiID0geWVzOyB0aGVuCisgICAgYnJlYWsKKyAgZWxzZQorICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9CisgIGZpCitkb25lCisKK2ZpCisKK2lmIHRlc3QgLXogIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIjsgdGhlbgorICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0KK2ZpCitpZiB0ZXN0IC16ICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IGZhaWxlZCIgPiY1CiskYXNfZWNobyAiZmFpbGVkIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG9rIiA+JjUKKyRhc19lY2hvICJvayIgPiY2OyB9CitmaQorCisjIFJlc3BvbnNlIGZpbGUgc3VwcG9ydC4KK2lmIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIk1TIGR1bXBiaW4iOyB0aGVuCisgIG5tX2ZpbGVfbGlzdF9zcGVjPSdAJworZWxpZiAkTk0gLS1oZWxwIDI+L2Rldi9udWxsIHwgZ3JlcCAnW0BdRklMRScgPi9kZXYvbnVsbDsgdGhlbgorICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKK2ZpCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzeXNyb290IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzeXNyb290Li4uICIgPiY2OyB9CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtc3lzcm9vdCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfc3lzcm9vdCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfc3lzcm9vdDsKK2Vsc2UKKyAgd2l0aF9zeXNyb290PW5vCitmaQorCisKK2x0X3N5c3Jvb3Q9CitjYXNlICR7d2l0aF9zeXNyb290fSBpbiAjKAorIHllcykKKyAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgIGx0X3N5c3Jvb3Q9YCRDQyAtLXByaW50LXN5c3Jvb3QgMj4vZGV2L251bGxgCisgICBmaQorICAgOzsgIygKKyAvKikKKyAgIGx0X3N5c3Jvb3Q9YGVjaG8gIiR3aXRoX3N5c3Jvb3QiIHwgc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKyAgIDs7ICMoCisgbm98JycpCisgICA7OyAjKAorICopCisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHt3aXRoX3N5c3Jvb3R9IiA+JjUKKyRhc19lY2hvICIke3dpdGhfc3lzcm9vdH0iID4mNjsgfQorICAgYXNfZm5fZXJyb3IgJD8gIlRoZSBzeXNyb290IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aC4iICIkTElORU5PIiA1CisgICA7OworZXNhYworCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR7bHRfc3lzcm9vdDotbm99IiA+JjUKKyRhc19lY2hvICIke2x0X3N5c3Jvb3Q6LW5vfSIgPiY2OyB9CisKKworCisKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxpYnRvb2wtbG9jayB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9saWJ0b29sX2xvY2src2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9saWJ0b29sX2xvY2s7CitmaQorCit0ZXN0ICJ4JGVuYWJsZV9saWJ0b29sX2xvY2siICE9IHhubyAmJiBlbmFibGVfbGlidG9vbF9sb2NrPXllcworCisjIFNvbWUgZmxhZ3MgbmVlZCB0byBiZSBwcm9wYWdhdGVkIHRvIHRoZSBjb21waWxlciBvciBsaW5rZXIgZm9yIGdvb2QKKyMgbGlidG9vbCBzdXBwb3J0LgorY2FzZSAkaG9zdCBpbgoraWE2NC0qLWhwdXgqKQorICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCisgIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisgICAgICAqRUxGLTMyKikKKwlIUFVYX0lBNjRfTU9ERT0iMzIiCisJOzsKKyAgICAgICpFTEYtNjQqKQorCUhQVVhfSUE2NF9NT0RFPSI2NCIKKwk7OworICAgIGVzYWMKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworKi0qLWlyaXg2KikKKyAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgorICBlY2hvICcjbGluZSAnJExJTkVOTycgImNvbmZpZ3VyZSInID4gY29uZnRlc3QuJGFjX2V4dAorICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCisgICAgaWYgdGVzdCAiJGx0X2N2X3Byb2dfZ251X2xkIiA9IHllczsgdGhlbgorICAgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgorCSozMi1iaXQqKQorCSAgTEQ9IiR7TEQtbGR9IC1tZWxmMzJic21pcCIKKwkgIDs7CisJKk4zMiopCisJICBMRD0iJHtMRC1sZH0gLW1lbGYzMmJtaXBuMzIiCisJICA7OworCSo2NC1iaXQqKQorCSAgTEQ9IiR7TEQtbGR9IC1tZWxmNjRibWlwIgorCTs7CisgICAgICBlc2FjCisgICAgZWxzZQorICAgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgorCSozMi1iaXQqKQorCSAgTEQ9IiR7TEQtbGR9IC0zMiIKKwkgIDs7CisJKk4zMiopCisJICBMRD0iJHtMRC1sZH0gLW4zMiIKKwkgIDs7CisJKjY0LWJpdCopCisJICBMRD0iJHtMRC1sZH0gLTY0IgorCSAgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7CisKK3g4Nl82NC0qa2ZyZWVic2QqLWdudXx4ODZfNjQtKmxpbnV4KnxwcGMqLSpsaW51eCp8cG93ZXJwYyotKmxpbnV4KnwgXAorczM5MCotKmxpbnV4KnxzMzkwKi0qdHBmKnxzcGFyYyotKmxpbnV4KikKKyAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgorICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAorICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCisgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC5vYCBpbgorICAgICAgKjMyLWJpdCopCisJY2FzZSAkaG9zdCBpbgorCSAgeDg2XzY0LSprZnJlZWJzZCotZ251KQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX2kzODZfZmJzZCIKKwkgICAgOzsKKwkgIHg4Nl82NC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX2kzODYiCisJICAgIDs7CisJICBwcGM2NC0qbGludXgqfHBvd2VycGM2NC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJwcGNsaW51eCIKKwkgICAgOzsKKwkgIHMzOTB4LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfczM5MCIKKwkgICAgOzsKKwkgIHNwYXJjNjQtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjMyX3NwYXJjIgorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgKjY0LWJpdCopCisJY2FzZSAkaG9zdCBpbgorCSAgeDg2XzY0LSprZnJlZWJzZCotZ251KQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3g4Nl82NF9mYnNkIgorCSAgICA7OworCSAgeDg2XzY0LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfeDg2XzY0IgorCSAgICA7OworCSAgcHBjKi0qbGludXgqfHBvd2VycGMqLSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGY2NHBwYyIKKwkgICAgOzsKKwkgIHMzOTAqLSpsaW51eCp8czM5MCotKnRwZiopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGY2NF9zMzkwIgorCSAgICA7OworCSAgc3BhcmMqLSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGY2NF9zcGFyYyIKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICBlc2FjCisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgOzsKKworKi0qLXNjbzMuMnY1KikKKyAgIyBPbiBTQ08gT3BlblNlcnZlciA1LCB3ZSBuZWVkIC1iZWxmIHRvIGdldCBmdWxsLWZlYXR1cmVkIGJpbmFyaWVzLgorICBTQVZFX0NGTEFHUz0iJENGTEFHUyIKKyAgQ0ZMQUdTPSIkQ0ZMQUdTIC1iZWxmIgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgbmVlZHMgLWJlbGYiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciBuZWVkcyAtYmVsZi4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9jY19uZWVkc19iZWxmKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCisgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBsdF9jdl9jY19uZWVkc19iZWxmPXllcworZWxzZQorICBsdF9jdl9jY19uZWVkc19iZWxmPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9jY19uZWVkc19iZWxmIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfY2NfbmVlZHNfYmVsZiIgPiY2OyB9CisgIGlmIHRlc3QgeCIkbHRfY3ZfY2NfbmVlZHNfYmVsZiIgIT0geCJ5ZXMiOyB0aGVuCisgICAgIyB0aGlzIGlzIHByb2JhYmx5IGdjYyAyLjguMCwgZWdjcyAxLjAgb3IgbmV3ZXI7IG5vIG5lZWQgZm9yIC1iZWxmCisgICAgQ0ZMQUdTPSIkU0FWRV9DRkxBR1MiCisgIGZpCisgIDs7CisqLSpzb2xhcmlzKikKKyAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgorICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAorICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCisgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC5vYCBpbgorICAgICo2NC1iaXQqKQorICAgICAgY2FzZSAkbHRfY3ZfcHJvZ19nbnVfbGQgaW4KKyAgICAgIHllcyopCisgICAgICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgICAgaT84Ni0qLXNvbGFyaXMqKQorICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGZfeDg2XzY0IgorICAgICAgICAgIDs7CisgICAgICAgIHNwYXJjKi0qLXNvbGFyaXMqKQorICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGY2NF9zcGFyYyIKKyAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgICAgICMgR05VIGxkIDIuMjEgaW50cm9kdWNlZCBfc29sMiBlbXVsYXRpb25zLiAgVXNlIHRoZW0gaWYgYXZhaWxhYmxlLgorICAgICAgICBpZiAke0xELWxkfSAtViB8IGdyZXAgX3NvbDIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAgICAgTEQ9IiR7TEQtbGR9X3NvbDIiCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgICAqKQorCWlmICR7TEQtbGR9IC02NCAtciAtbyBjb25mdGVzdDIubyBjb25mdGVzdC5vID4vZGV2L251bGwgMj4mMTsgdGhlbgorCSAgTEQ9IiR7TEQtbGR9IC02NCIKKwlmaQorCTs7CisgICAgICBlc2FjCisgICAgICA7OworICAgIGVzYWMKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworZXNhYworCituZWVkX2xvY2tzPSIkZW5hYmxlX2xpYnRvb2xfbG9jayIKKworaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9bXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9bXQ7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX01BTklGRVNUX1RPT0wrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkTUFOSUZFU1RfVE9PTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MPSIkTUFOSUZFU1RfVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX01BTklGRVNUX1RPT0w9IiR7YWNfdG9vbF9wcmVmaXh9bXQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorTUFOSUZFU1RfVE9PTD0kYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MCitpZiB0ZXN0IC1uICIkTUFOSUZFU1RfVE9PTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNQU5JRkVTVF9UT09MIiA+JjUKKyRhc19lY2hvICIkTUFOSUZFU1RfVE9PTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKyAgYWNfY3RfTUFOSUZFU1RfVE9PTD0kTUFOSUZFU1RfVE9PTAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBtdDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9NQU5JRkVTVF9UT09MIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0w9IiRhY19jdF9NQU5JRkVTVF9UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTD0ibXQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfTUFOSUZFU1RfVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MCitpZiB0ZXN0IC1uICIkYWNfY3RfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9NQU5JRkVTVF9UT09MIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X01BTklGRVNUX1RPT0wiID0geDsgdGhlbgorICAgIE1BTklGRVNUX1RPT0w9IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgTUFOSUZFU1RfVE9PTD0kYWNfY3RfTUFOSUZFU1RfVE9PTAorICBmaQorZWxzZQorICBNQU5JRkVTVF9UT09MPSIkYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MIgorZmkKKwordGVzdCAteiAiJE1BTklGRVNUX1RPT0wiICYmIE1BTklGRVNUX1RPT0w9bXQKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJE1BTklGRVNUX1RPT0wgaXMgYSBtYW5pZmVzdCB0b29sIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRNQU5JRkVTVF9UT09MIGlzIGEgbWFuaWZlc3QgdG9vbC4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9bm8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86ICRNQU5JRkVTVF9UT09MICctPyciID4mNQorICAkTUFOSUZFU1RfVE9PTCAnLT8nIDI+Y29uZnRlc3QuZXJyID4gY29uZnRlc3Qub3V0CisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGlmICRHUkVQICdNYW5pZmVzdCBUb29sJyBjb25mdGVzdC5vdXQgPiAvZGV2L251bGw7IHRoZW4KKyAgICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9eWVzCisgIGZpCisgIHJtIC1mIGNvbmZ0ZXN0KgorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiA+JjY7IH0KK2lmIHRlc3QgIngkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiAhPSB4eWVzOyB0aGVuCisgIE1BTklGRVNUX1RPT0w9OgorZmkKKworCisKKworCisKKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIHJoYXBzb2R5KiB8IGRhcndpbiopCisgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9ZHN5bXV0aWwiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9ZHN5bXV0aWw7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX0RTWU1VVElMKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJERTWU1VVElMIjsgdGhlbgorICBhY19jdl9wcm9nX0RTWU1VVElMPSIkRFNZTVVUSUwiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19EU1lNVVRJTD0iJHthY190b29sX3ByZWZpeH1kc3ltdXRpbCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitEU1lNVVRJTD0kYWNfY3ZfcHJvZ19EU1lNVVRJTAoraWYgdGVzdCAtbiAiJERTWU1VVElMIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJERTWU1VVElMIiA+JjUKKyRhc19lY2hvICIkRFNZTVVUSUwiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX0RTWU1VVElMIjsgdGhlbgorICBhY19jdF9EU1lNVVRJTD0kRFNZTVVUSUwKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJkc3ltdXRpbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgZHN5bXV0aWw7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X0RTWU1VVElMKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0RTWU1VVElMIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0RTWU1VVElMPSIkYWNfY3RfRFNZTVVUSUwiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9EU1lNVVRJTD0iZHN5bXV0aWwiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfRFNZTVVUSUw9JGFjX2N2X3Byb2dfYWNfY3RfRFNZTVVUSUwKK2lmIHRlc3QgLW4gIiRhY19jdF9EU1lNVVRJTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9EU1lNVVRJTCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0RTWU1VVElMIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfRFNZTVVUSUwiID0geDsgdGhlbgorICAgIERTWU1VVElMPSI6IgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIERTWU1VVElMPSRhY19jdF9EU1lNVVRJTAorICBmaQorZWxzZQorICBEU1lNVVRJTD0iJGFjX2N2X3Byb2dfRFNZTVVUSUwiCitmaQorCisgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9bm1lZGl0Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW5tZWRpdDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfTk1FRElUKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJE5NRURJVCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19OTUVESVQ9IiROTUVESVQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19OTUVESVQ9IiR7YWNfdG9vbF9wcmVmaXh9bm1lZGl0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK05NRURJVD0kYWNfY3ZfcHJvZ19OTUVESVQKK2lmIHRlc3QgLW4gIiROTUVESVQiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTk1FRElUIiA+JjUKKyRhc19lY2hvICIkTk1FRElUIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19OTUVESVQiOyB0aGVuCisgIGFjX2N0X05NRURJVD0kTk1FRElUCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibm1lZGl0Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBubWVkaXQ7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X05NRURJVCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9OTUVESVQiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfTk1FRElUPSIkYWNfY3RfTk1FRElUIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfTk1FRElUPSJubWVkaXQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfTk1FRElUPSRhY19jdl9wcm9nX2FjX2N0X05NRURJVAoraWYgdGVzdCAtbiAiJGFjX2N0X05NRURJVCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9OTUVESVQiID4mNQorJGFzX2VjaG8gIiRhY19jdF9OTUVESVQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9OTUVESVQiID0geDsgdGhlbgorICAgIE5NRURJVD0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBOTUVESVQ9JGFjX2N0X05NRURJVAorICBmaQorZWxzZQorICBOTUVESVQ9IiRhY19jdl9wcm9nX05NRURJVCIKK2ZpCisKKyAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1saXBvIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWxpcG87IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX0xJUE8rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkTElQTyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19MSVBPPSIkTElQTyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX0xJUE89IiR7YWNfdG9vbF9wcmVmaXh9bGlwbyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitMSVBPPSRhY19jdl9wcm9nX0xJUE8KK2lmIHRlc3QgLW4gIiRMSVBPIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJExJUE8iID4mNQorJGFzX2VjaG8gIiRMSVBPIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19MSVBPIjsgdGhlbgorICBhY19jdF9MSVBPPSRMSVBPCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibGlwbyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgbGlwbzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfTElQTys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9MSVBPIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0xJUE89IiRhY19jdF9MSVBPIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfTElQTz0ibGlwbyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9MSVBPPSRhY19jdl9wcm9nX2FjX2N0X0xJUE8KK2lmIHRlc3QgLW4gIiRhY19jdF9MSVBPIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0xJUE8iID4mNQorJGFzX2VjaG8gIiRhY19jdF9MSVBPIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfTElQTyIgPSB4OyB0aGVuCisgICAgTElQTz0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBMSVBPPSRhY19jdF9MSVBPCisgIGZpCitlbHNlCisgIExJUE89IiRhY19jdl9wcm9nX0xJUE8iCitmaQorCisgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9b3Rvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9b3Rvb2w7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX09UT09MKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJE9UT09MIjsgdGhlbgorICBhY19jdl9wcm9nX09UT09MPSIkT1RPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19PVE9PTD0iJHthY190b29sX3ByZWZpeH1vdG9vbCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitPVE9PTD0kYWNfY3ZfcHJvZ19PVE9PTAoraWYgdGVzdCAtbiAiJE9UT09MIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE9UT09MIiA+JjUKKyRhc19lY2hvICIkT1RPT0wiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX09UT09MIjsgdGhlbgorICBhY19jdF9PVE9PTD0kT1RPT0wKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJvdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgb3Rvb2w7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X09UT09MKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X09UT09MIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X09UT09MPSIkYWNfY3RfT1RPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9PVE9PTD0ib3Rvb2wiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfT1RPT0w9JGFjX2N2X3Byb2dfYWNfY3RfT1RPT0wKK2lmIHRlc3QgLW4gIiRhY19jdF9PVE9PTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9PVE9PTCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X09UT09MIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfT1RPT0wiID0geDsgdGhlbgorICAgIE9UT09MPSI6IgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIE9UT09MPSRhY19jdF9PVE9PTAorICBmaQorZWxzZQorICBPVE9PTD0iJGFjX2N2X3Byb2dfT1RPT0wiCitmaQorCisgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9b3Rvb2w2NCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1vdG9vbDY0OyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19PVE9PTDY0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJE9UT09MNjQiOyB0aGVuCisgIGFjX2N2X3Byb2dfT1RPT0w2ND0iJE9UT09MNjQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19PVE9PTDY0PSIke2FjX3Rvb2xfcHJlZml4fW90b29sNjQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorT1RPT0w2ND0kYWNfY3ZfcHJvZ19PVE9PTDY0CitpZiB0ZXN0IC1uICIkT1RPT0w2NCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRPVE9PTDY0IiA+JjUKKyRhc19lY2hvICIkT1RPT0w2NCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfT1RPT0w2NCI7IHRoZW4KKyAgYWNfY3RfT1RPT0w2ND0kT1RPT0w2NAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm90b29sNjQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IG90b29sNjQ7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X09UT09MNjQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfT1RPT0w2NCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9PVE9PTDY0PSIkYWNfY3RfT1RPT0w2NCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X09UT09MNjQ9Im90b29sNjQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfT1RPT0w2ND0kYWNfY3ZfcHJvZ19hY19jdF9PVE9PTDY0CitpZiB0ZXN0IC1uICIkYWNfY3RfT1RPT0w2NCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9PVE9PTDY0IiA+JjUKKyRhc19lY2hvICIkYWNfY3RfT1RPT0w2NCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X09UT09MNjQiID0geDsgdGhlbgorICAgIE9UT09MNjQ9IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgT1RPT0w2ND0kYWNfY3RfT1RPT0w2NAorICBmaQorZWxzZQorICBPVE9PTDY0PSIkYWNfY3ZfcHJvZ19PVE9PTDY0IgorZmkKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAtc2luZ2xlX21vZHVsZSBsaW5rZXIgZmxhZyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgLXNpbmdsZV9tb2R1bGUgbGlua2VyIGZsYWcuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2Q9bm8KKyAgICAgIGlmIHRlc3QgLXogIiR7TFRfTVVMVElfTU9EVUxFfSI7IHRoZW4KKwkjIEJ5IGRlZmF1bHQgd2Ugd2lsbCBhZGQgdGhlIC1zaW5nbGVfbW9kdWxlIGZsYWcuIFlvdSBjYW4gb3ZlcnJpZGUKKwkjIGJ5IGVpdGhlciBzZXR0aW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBMVF9NVUxUSV9NT0RVTEUKKwkjIG5vbi1lbXB0eSBhdCBjb25maWd1cmUgdGltZSwgb3IgYnkgYWRkaW5nIC1tdWx0aV9tb2R1bGUgdG8gdGhlCisJIyBsaW5rIGZsYWdzLgorCXJtIC1yZiBsaWJjb25mdGVzdC5keWxpYioKKwllY2hvICJpbnQgZm9vKHZvaWQpe3JldHVybiAxO30iID4gY29uZnRlc3QuYworCWVjaG8gIiRMVENDICRMVENGTEFHUyAkTERGTEFHUyAtbyBsaWJjb25mdGVzdC5keWxpYiBcCistZHluYW1pY2xpYiAtV2wsLXNpbmdsZV9tb2R1bGUgY29uZnRlc3QuYyIgPiY1CisJJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGxpYmNvbmZ0ZXN0LmR5bGliIFwKKwkgIC1keW5hbWljbGliIC1XbCwtc2luZ2xlX21vZHVsZSBjb25mdGVzdC5jIDI+Y29uZnRlc3QuZXJyCisgICAgICAgIF9sdF9yZXN1bHQ9JD8KKwkjIElmIHRoZXJlIGlzIGEgbm9uLWVtcHR5IGVycm9yIGxvZywgYW5kICJzaW5nbGVfbW9kdWxlIgorCSMgYXBwZWFycyBpbiBpdCwgYXNzdW1lIHRoZSBmbGFnIGNhdXNlZCBhIGxpbmtlciB3YXJuaW5nCisgICAgICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyICYmICRHUkVQIHNpbmdsZV9tb2R1bGUgY29uZnRlc3QuZXJyOyB0aGVuCisJICBjYXQgY29uZnRlc3QuZXJyID4mNQorCSMgT3RoZXJ3aXNlLCBpZiB0aGUgb3V0cHV0IHdhcyBjcmVhdGVkIHdpdGggYSAwIGV4aXQgY29kZSBmcm9tCisJIyB0aGUgY29tcGlsZXIsIGl0IHdvcmtlZC4KKwllbGlmIHRlc3QgLWYgbGliY29uZnRlc3QuZHlsaWIgJiYgdGVzdCAkX2x0X3Jlc3VsdCAtZXEgMDsgdGhlbgorCSAgbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZD15ZXMKKwllbHNlCisJICBjYXQgY29uZnRlc3QuZXJyID4mNQorCWZpCisJcm0gLXJmIGxpYmNvbmZ0ZXN0LmR5bGliKgorCXJtIC1mIGNvbmZ0ZXN0LioKKyAgICAgIGZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCIgPiY2OyB9CisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGxpbmtlciBmbGFnIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGxpbmtlciBmbGFnLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD1ubworICAgICAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCisgICAgICBlY2hvICJfbWFpbiIgPiBjb25mdGVzdC5zeW0KKyAgICAgIExERkxBR1M9IiRMREZMQUdTIC1XbCwtZXhwb3J0ZWRfc3ltYm9sc19saXN0LGNvbmZ0ZXN0LnN5bSIKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Q9eWVzCitlbHNlCisgIGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisJTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0IiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0IiA+JjY7IH0KKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIC1mb3JjZV9sb2FkIGxpbmtlciBmbGFnIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAtZm9yY2VfbG9hZCBsaW5rZXIgZmxhZy4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9sZF9mb3JjZV9sb2FkKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfbGRfZm9yY2VfbG9hZD1ubworICAgICAgY2F0ID4gY29uZnRlc3QuYyA8PCBfTFRfRU9GCitpbnQgZm9yY2VkX2xvYWRlZCgpIHsgcmV0dXJuIDI7fQorX0xUX0VPRgorICAgICAgZWNobyAiJExUQ0MgJExUQ0ZMQUdTIC1jIC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QuYyIgPiY1CisgICAgICAkTFRDQyAkTFRDRkxBR1MgLWMgLW8gY29uZnRlc3QubyBjb25mdGVzdC5jIDI+JjUKKyAgICAgIGVjaG8gIiRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIiA+JjUKKyAgICAgICRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIDI+JjUKKyAgICAgIGVjaG8gIiRSQU5MSUIgbGliY29uZnRlc3QuYSIgPiY1CisgICAgICAkUkFOTElCIGxpYmNvbmZ0ZXN0LmEgMj4mNQorICAgICAgY2F0ID4gY29uZnRlc3QuYyA8PCBfTFRfRU9GCitpbnQgbWFpbigpIHsgcmV0dXJuIDA7fQorX0xUX0VPRgorICAgICAgZWNobyAiJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGNvbmZ0ZXN0IGNvbmZ0ZXN0LmMgLVdsLC1mb3JjZV9sb2FkLC4vbGliY29uZnRlc3QuYSIgPiY1CisgICAgICAkTFRDQyAkTFRDRkxBR1MgJExERkxBR1MgLW8gY29uZnRlc3QgY29uZnRlc3QuYyAtV2wsLWZvcmNlX2xvYWQsLi9saWJjb25mdGVzdC5hIDI+Y29uZnRlc3QuZXJyCisgICAgICBfbHRfcmVzdWx0PSQ/CisgICAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVyciAmJiAkR1JFUCBmb3JjZV9sb2FkIGNvbmZ0ZXN0LmVycjsgdGhlbgorCWNhdCBjb25mdGVzdC5lcnIgPiY1CisgICAgICBlbGlmIHRlc3QgLWYgY29uZnRlc3QgJiYgdGVzdCAkX2x0X3Jlc3VsdCAtZXEgMCAmJiAkR1JFUCBmb3JjZWRfbG9hZCBjb25mdGVzdCA+L2Rldi9udWxsIDI+JjEgOyB0aGVuCisJbHRfY3ZfbGRfZm9yY2VfbG9hZD15ZXMKKyAgICAgIGVsc2UKKwljYXQgY29uZnRlc3QuZXJyID4mNQorICAgICAgZmkKKyAgICAgICAgcm0gLWYgY29uZnRlc3QuZXJyIGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QgY29uZnRlc3QuYworICAgICAgICBybSAtcmYgY29uZnRlc3QuZFNZTQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9sZF9mb3JjZV9sb2FkIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfbGRfZm9yY2VfbG9hZCIgPiY2OyB9CisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIHJoYXBzb2R5KiB8IGRhcndpbjEuWzAxMl0pCisgICAgICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CisgICAgZGFyd2luMS4qKQorICAgICAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LWZsYXRfbmFtZXNwYWNlICR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OworICAgIGRhcndpbiopICMgZGFyd2luIDUueCBvbgorICAgICAgIyBpZiBydW5uaW5nIG9uIDEwLjUgb3IgbGF0ZXIsIHRoZSBkZXBsb3ltZW50IHRhcmdldCBkZWZhdWx0cworICAgICAgIyB0byB0aGUgT1MgdmVyc2lvbiwgaWYgb24geDg2LCBhbmQgMTAuNCwgdGhlIGRlcGxveW1lbnQKKyAgICAgICMgdGFyZ2V0IGRlZmF1bHRzIHRvIDEwLjQuIERvbid0IHlvdSBsb3ZlIGl0PworICAgICAgY2FzZSAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVC0xMC4wfSwkaG9zdCBpbgorCTEwLjAsKjg2Ki1kYXJ3aW44KnwxMC4wLCotZGFyd2luWzkxXSopCisJICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnIDs7CisJMTAuWzAxMl0qKQorCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LWZsYXRfbmFtZXNwYWNlICR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OworCTEwLiopCisJICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnIDs7CisgICAgICBlc2FjCisgICAgOzsKKyAgZXNhYworICAgIGlmIHRlc3QgIiRsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kIiA9ICJ5ZXMiOyB0aGVuCisgICAgICBfbHRfZGFyX3NpbmdsZV9tb2Q9JyRzaW5nbGVfbW9kdWxlJworICAgIGZpCisgICAgaWYgdGVzdCAiJGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdCIgPSAieWVzIjsgdGhlbgorICAgICAgX2x0X2Rhcl9leHBvcnRfc3ltcz0nICR7d2x9LWV4cG9ydGVkX3N5bWJvbHNfbGlzdCwkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltJworICAgIGVsc2UKKyAgICAgIF9sdF9kYXJfZXhwb3J0X3N5bXM9J34kTk1FRElUIC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JworICAgIGZpCisgICAgaWYgdGVzdCAiJERTWU1VVElMIiAhPSAiOiIgJiYgdGVzdCAiJGx0X2N2X2xkX2ZvcmNlX2xvYWQiID0gIm5vIjsgdGhlbgorICAgICAgX2x0X2RzeW11dGlsPSd+JERTWU1VVElMICRsaWIgfHwgOicKKyAgICBlbHNlCisgICAgICBfbHRfZHN5bXV0aWw9CisgICAgZmkKKyAgICA7OworICBlc2FjCisKK2ZvciBhY19oZWFkZXIgaW4gZGxmY24uaAorZG8gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAiZGxmY24uaCIgImFjX2N2X2hlYWRlcl9kbGZjbl9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQKKyIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2RsZmNuX2giID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9ETEZDTl9IIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworCitmdW5jX3N0cmlwbmFtZV9jbmYgKCkKK3sKKyAgY2FzZSAkezJ9IGluCisgIC4qKSBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyVcXFxcJHsyfVwkJSUiYDs7CisgICopICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyUkezJ9XCQlJSJgOzsKKyAgZXNhYworfSAjIGZ1bmNfc3RyaXBuYW1lX2NuZgorCisKKworCisKKyMgU2V0IG9wdGlvbnMKKworCisKKyAgICAgICAgZW5hYmxlX2Rsb3Blbj1ubworCisKKyAgZW5hYmxlX3dpbjMyX2RsbD1ubworCisKKyAgICAgICAgICAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zaGFyZWQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfc2hhcmVkK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfc2hhcmVkOyBwPSR7UEFDS0FHRS1kZWZhdWx0fQorICAgIGNhc2UgJGVuYWJsZXZhbCBpbgorICAgIHllcykgZW5hYmxlX3NoYXJlZD15ZXMgOzsKKyAgICBubykgZW5hYmxlX3NoYXJlZD1ubyA7OworICAgICopCisgICAgICBlbmFibGVfc2hhcmVkPW5vCisgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisgICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKKyAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKwlJRlM9IiRsdF9zYXZlX2lmcyIKKwlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgorCSAgZW5hYmxlX3NoYXJlZD15ZXMKKwlmaQorICAgICAgZG9uZQorICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICA7OworICAgIGVzYWMKK2Vsc2UKKyAgZW5hYmxlX3NoYXJlZD15ZXMKK2ZpCisKKworCisKKworCisKKworCisgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zdGF0aWMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfc3RhdGljK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfc3RhdGljOyBwPSR7UEFDS0FHRS1kZWZhdWx0fQorICAgIGNhc2UgJGVuYWJsZXZhbCBpbgorICAgIHllcykgZW5hYmxlX3N0YXRpYz15ZXMgOzsKKyAgICBubykgZW5hYmxlX3N0YXRpYz1ubyA7OworICAgICopCisgICAgIGVuYWJsZV9zdGF0aWM9bm8KKyAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KKyAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgorICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbworCUlGUz0iJGx0X3NhdmVfaWZzIgorCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCisJICBlbmFibGVfc3RhdGljPXllcworCWZpCisgICAgICBkb25lCisgICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIDs7CisgICAgZXNhYworZWxzZQorICBlbmFibGVfc3RhdGljPXllcworZmkKKworCisKKworCisKKworCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1waWMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3BpYytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfcGljOyBsdF9wPSR7UEFDS0FHRS1kZWZhdWx0fQorICAgIGNhc2UgJHdpdGh2YWwgaW4KKyAgICB5ZXN8bm8pIHBpY19tb2RlPSR3aXRodmFsIDs7CisgICAgKikKKyAgICAgIHBpY19tb2RlPWRlZmF1bHQKKyAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KKyAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgorICAgICAgZm9yIGx0X3BrZyBpbiAkd2l0aHZhbDsgZG8KKwlJRlM9IiRsdF9zYXZlX2lmcyIKKwlpZiB0ZXN0ICJYJGx0X3BrZyIgPSAiWCRsdF9wIjsgdGhlbgorCSAgcGljX21vZGU9eWVzCisJZmkKKyAgICAgIGRvbmUKKyAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgICAgOzsKKyAgICBlc2FjCitlbHNlCisgIHBpY19tb2RlPWRlZmF1bHQKK2ZpCisKKwordGVzdCAteiAiJHBpY19tb2RlIiAmJiBwaWNfbW9kZT1kZWZhdWx0CisKKworCisKKworCisKKyAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWZhc3QtaW5zdGFsbCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9mYXN0X2luc3RhbGwrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9mYXN0X2luc3RhbGw7IHA9JHtQQUNLQUdFLWRlZmF1bHR9CisgICAgY2FzZSAkZW5hYmxldmFsIGluCisgICAgeWVzKSBlbmFibGVfZmFzdF9pbnN0YWxsPXllcyA7OworICAgIG5vKSBlbmFibGVfZmFzdF9pbnN0YWxsPW5vIDs7CisgICAgKikKKyAgICAgIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8KKyAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KKyAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgorICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbworCUlGUz0iJGx0X3NhdmVfaWZzIgorCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCisJICBlbmFibGVfZmFzdF9pbnN0YWxsPXllcworCWZpCisgICAgICBkb25lCisgICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIDs7CisgICAgZXNhYworZWxzZQorICBlbmFibGVfZmFzdF9pbnN0YWxsPXllcworZmkKKworCisKKworCisKKworCisKKworCisjIFRoaXMgY2FuIGJlIHVzZWQgdG8gcmVidWlsZCBsaWJ0b29sIHdoZW4gbmVlZGVkCitMSUJUT09MX0RFUFM9IiRsdG1haW4iCisKKyMgQWx3YXlzIHVzZSBvdXIgb3duIGxpYnRvb2wuCitMSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpcikvbGlidG9vbCcKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKK3Rlc3QgLXogIiRMTl9TIiAmJiBMTl9TPSJsbiAtcyIKKworCisKKworCisKKworCisKKworCisKKworCitpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgorICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2ZpCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG9iamRpciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igb2JqZGlyLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X29iamRpcis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIHJtIC1mIC5saWJzIDI+L2Rldi9udWxsCitta2RpciAubGlicyAyPi9kZXYvbnVsbAoraWYgdGVzdCAtZCAubGliczsgdGhlbgorICBsdF9jdl9vYmpkaXI9LmxpYnMKK2Vsc2UKKyAgIyBNUy1ET1MgZG9lcyBub3QgYWxsb3cgZmlsZW5hbWVzIHRoYXQgYmVnaW4gd2l0aCBhIGRvdC4KKyAgbHRfY3Zfb2JqZGlyPV9saWJzCitmaQorcm1kaXIgLmxpYnMgMj4vZGV2L251bGwKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X29iamRpciIgPiY1CiskYXNfZWNobyAiJGx0X2N2X29iamRpciIgPiY2OyB9CitvYmpkaXI9JGx0X2N2X29iamRpcgorCisKKworCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgTFRfT0JKRElSICIkbHRfY3Zfb2JqZGlyLyIKK19BQ0VPRgorCisKKworCitjYXNlICRob3N0X29zIGluCithaXgzKikKKyAgIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCisgICMgcmVhc29uLCBpZiB3ZSBzZXQgdGhlIENPTExFQ1RfTkFNRVMgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBwcm9ibGVtcworICAjIHZhbmlzaCBpbiBhIHB1ZmYgb2Ygc21va2UuCisgIGlmIHRlc3QgIlgke0NPTExFQ1RfTkFNRVMrc2V0fSIgIT0gWHNldDsgdGhlbgorICAgIENPTExFQ1RfTkFNRVM9CisgICAgZXhwb3J0IENPTExFQ1RfTkFNRVMKKyAgZmkKKyAgOzsKK2VzYWMKKworIyBHbG9iYWwgdmFyaWFibGVzOgorb2ZpbGU9bGlidG9vbAorY2FuX2J1aWxkX3NoYXJlZD15ZXMKKworIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgYC5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCisjIHdoaWNoIG5lZWRzICcubGliJykuCitsaWJleHQ9YQorCit3aXRoX2dudV9sZD0iJGx0X2N2X3Byb2dfZ251X2xkIgorCitvbGRfQ0M9IiRDQyIKK29sZF9DRkxBR1M9IiRDRkxBR1MiCisKKyMgU2V0IHNhbmUgZGVmYXVsdHMgZm9yIHZhcmlvdXMgdmFyaWFibGVzCit0ZXN0IC16ICIkQ0MiICYmIENDPWNjCit0ZXN0IC16ICIkTFRDQyIgJiYgTFRDQz0kQ0MKK3Rlc3QgLXogIiRMVENGTEFHUyIgJiYgTFRDRkxBR1M9JENGTEFHUwordGVzdCAteiAiJExEIiAmJiBMRD1sZAordGVzdCAteiAiJGFjX29iamV4dCIgJiYgYWNfb2JqZXh0PW8KKworZm9yIGNjX3RlbXAgaW4gJGNvbXBpbGVyIiI7IGRvCisgIGNhc2UgJGNjX3RlbXAgaW4KKyAgICBjb21waWxlIHwgKltcXC9dY29tcGlsZSB8IGNjYWNoZSB8ICpbXFwvXWNjYWNoZSApIDs7CisgICAgZGlzdGNjIHwgKltcXC9dZGlzdGNjIHwgcHVyaWZ5IHwgKltcXC9dcHVyaWZ5ICkgOzsKKyAgICBcLSopIDs7CisgICAgKikgYnJlYWs7OworICBlc2FjCitkb25lCitjY19iYXNlbmFtZT1gJEVDSE8gIiRjY190ZW1wIiB8ICRTRUQgInMlLiovJSU7IHMlXiRob3N0X2FsaWFzLSUlImAKKworCisjIE9ubHkgcGVyZm9ybSB0aGUgY2hlY2sgZm9yIGZpbGUsIGlmIHRoZSBjaGVjayBtZXRob2QgcmVxdWlyZXMgaXQKK3Rlc3QgLXogIiRNQUdJQ19DTUQiICYmIE1BR0lDX0NNRD1maWxlCitjYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgorZmlsZV9tYWdpYyopCisgIGlmIHRlc3QgIiRmaWxlX21hZ2ljX2NtZCIgPSAnJE1BR0lDX0NNRCc7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAke2FjX3Rvb2xfcHJlZml4fWZpbGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICR7YWNfdG9vbF9wcmVmaXh9ZmlsZS4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9wYXRoX01BR0lDX0NNRCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJE1BR0lDX0NNRCBpbgorW1xcLypdIHwgID86W1xcL10qKQorICBsdF9jdl9wYXRoX01BR0lDX0NNRD0iJE1BR0lDX0NNRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisqKQorICBsdF9zYXZlX01BR0lDX0NNRD0iJE1BR0lDX0NNRCIKKyAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgIGFjX2R1bW15PSIvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRIIgorICBmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKyAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgJGFjX2Rpci8ke2FjX3Rvb2xfcHJlZml4fWZpbGU7IHRoZW4KKyAgICAgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSIkYWNfZGlyLyR7YWNfdG9vbF9wcmVmaXh9ZmlsZSIKKyAgICAgIGlmIHRlc3QgLW4gIiRmaWxlX21hZ2ljX3Rlc3RfZmlsZSI7IHRoZW4KKwljYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgorCSJmaWxlX21hZ2ljICIqKQorCSAgZmlsZV9tYWdpY19yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICJmaWxlX21hZ2ljIFwoLipcKSJgCisJICBNQUdJQ19DTUQ9IiRsdF9jdl9wYXRoX01BR0lDX0NNRCIKKwkgIGlmIGV2YWwgJGZpbGVfbWFnaWNfY21kIFwkZmlsZV9tYWdpY190ZXN0X2ZpbGUgMj4gL2Rldi9udWxsIHwKKwkgICAgJEVHUkVQICIkZmlsZV9tYWdpY19yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgOgorCSAgZWxzZQorCSAgICBjYXQgPDxfTFRfRU9GIDE+JjIKKworKioqIFdhcm5pbmc6IHRoZSBjb21tYW5kIGxpYnRvb2wgdXNlcyB0byBkZXRlY3Qgc2hhcmVkIGxpYnJhcmllcywKKyoqKiAkZmlsZV9tYWdpY19jbWQsIHByb2R1Y2VzIG91dHB1dCB0aGF0IGxpYnRvb2wgY2Fubm90IHJlY29nbml6ZS4KKyoqKiBUaGUgcmVzdWx0IGlzIHRoYXQgbGlidG9vbCBtYXkgZmFpbCB0byByZWNvZ25pemUgc2hhcmVkIGxpYnJhcmllcworKioqIGFzIHN1Y2guICBUaGlzIHdpbGwgYWZmZWN0IHRoZSBjcmVhdGlvbiBvZiBsaWJ0b29sIGxpYnJhcmllcyB0aGF0CisqKiogZGVwZW5kIG9uIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dCBwcm9ncmFtcyBsaW5rZWQgd2l0aCBzdWNoIGxpYnRvb2wKKyoqKiBsaWJyYXJpZXMgd2lsbCB3b3JrIHJlZ2FyZGxlc3Mgb2YgdGhpcyBwcm9ibGVtLiAgTmV2ZXJ0aGVsZXNzLCB5b3UKKyoqKiBtYXkgd2FudCB0byByZXBvcnQgdGhlIHByb2JsZW0gdG8geW91ciBzeXN0ZW0gbWFuYWdlciBhbmQvb3IgdG8KKyoqKiBidWctbGlidG9vbEBnbnUub3JnCisKK19MVF9FT0YKKwkgIGZpIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGJyZWFrCisgICAgZmkKKyAgZG9uZQorICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgTUFHSUNfQ01EPSIkbHRfc2F2ZV9NQUdJQ19DTUQiCisgIDs7Citlc2FjCitmaQorCitNQUdJQ19DTUQ9IiRsdF9jdl9wYXRoX01BR0lDX0NNRCIKK2lmIHRlc3QgLW4gIiRNQUdJQ19DTUQiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTUFHSUNfQ01EIiA+JjUKKyRhc19lY2hvICIkTUFHSUNfQ01EIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKworCisKK2lmIHRlc3QgLXogIiRsdF9jdl9wYXRoX01BR0lDX0NNRCI7IHRoZW4KKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGZpbGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGZpbGUuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfcGF0aF9NQUdJQ19DTUQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRNQUdJQ19DTUQgaW4KK1tcXC8qXSB8ICA/OltcXC9dKikKKyAgbHRfY3ZfcGF0aF9NQUdJQ19DTUQ9IiRNQUdJQ19DTUQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworKikKKyAgbHRfc2F2ZV9NQUdJQ19DTUQ9IiRNQUdJQ19DTUQiCisgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICBhY19kdW1teT0iL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSCIKKyAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCisgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICBpZiB0ZXN0IC1mICRhY19kaXIvZmlsZTsgdGhlbgorICAgICAgbHRfY3ZfcGF0aF9NQUdJQ19DTUQ9IiRhY19kaXIvZmlsZSIKKyAgICAgIGlmIHRlc3QgLW4gIiRmaWxlX21hZ2ljX3Rlc3RfZmlsZSI7IHRoZW4KKwljYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgorCSJmaWxlX21hZ2ljICIqKQorCSAgZmlsZV9tYWdpY19yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICJmaWxlX21hZ2ljIFwoLipcKSJgCisJICBNQUdJQ19DTUQ9IiRsdF9jdl9wYXRoX01BR0lDX0NNRCIKKwkgIGlmIGV2YWwgJGZpbGVfbWFnaWNfY21kIFwkZmlsZV9tYWdpY190ZXN0X2ZpbGUgMj4gL2Rldi9udWxsIHwKKwkgICAgJEVHUkVQICIkZmlsZV9tYWdpY19yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgOgorCSAgZWxzZQorCSAgICBjYXQgPDxfTFRfRU9GIDE+JjIKKworKioqIFdhcm5pbmc6IHRoZSBjb21tYW5kIGxpYnRvb2wgdXNlcyB0byBkZXRlY3Qgc2hhcmVkIGxpYnJhcmllcywKKyoqKiAkZmlsZV9tYWdpY19jbWQsIHByb2R1Y2VzIG91dHB1dCB0aGF0IGxpYnRvb2wgY2Fubm90IHJlY29nbml6ZS4KKyoqKiBUaGUgcmVzdWx0IGlzIHRoYXQgbGlidG9vbCBtYXkgZmFpbCB0byByZWNvZ25pemUgc2hhcmVkIGxpYnJhcmllcworKioqIGFzIHN1Y2guICBUaGlzIHdpbGwgYWZmZWN0IHRoZSBjcmVhdGlvbiBvZiBsaWJ0b29sIGxpYnJhcmllcyB0aGF0CisqKiogZGVwZW5kIG9uIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dCBwcm9ncmFtcyBsaW5rZWQgd2l0aCBzdWNoIGxpYnRvb2wKKyoqKiBsaWJyYXJpZXMgd2lsbCB3b3JrIHJlZ2FyZGxlc3Mgb2YgdGhpcyBwcm9ibGVtLiAgTmV2ZXJ0aGVsZXNzLCB5b3UKKyoqKiBtYXkgd2FudCB0byByZXBvcnQgdGhlIHByb2JsZW0gdG8geW91ciBzeXN0ZW0gbWFuYWdlciBhbmQvb3IgdG8KKyoqKiBidWctbGlidG9vbEBnbnUub3JnCisKK19MVF9FT0YKKwkgIGZpIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGJyZWFrCisgICAgZmkKKyAgZG9uZQorICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgTUFHSUNfQ01EPSIkbHRfc2F2ZV9NQUdJQ19DTUQiCisgIDs7Citlc2FjCitmaQorCitNQUdJQ19DTUQ9IiRsdF9jdl9wYXRoX01BR0lDX0NNRCIKK2lmIHRlc3QgLW4gIiRNQUdJQ19DTUQiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTUFHSUNfQ01EIiA+JjUKKyRhc19lY2hvICIkTUFHSUNfQ01EIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgZWxzZQorICAgIE1BR0lDX0NNRD06CisgIGZpCitmaQorCisgIGZpCisgIDs7Citlc2FjCisKKyMgVXNlIEMgZm9yIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gaW4gdGhlIGxpYnRvb2wgc2NyaXB0CisKK2x0X3NhdmVfQ0M9IiRDQyIKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgQyB0ZXN0IHNvdXJjZXMuCithY19leHQ9YworCisjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgQyB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworb2JqZXh0PSRvYmpleHQKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKK2x0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iaW50IHNvbWVfdmFyaWFibGUgPSAwOyIKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKK2x0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0naW50IG1haW4oKXtyZXR1cm4oMCk7fScKKworCisKKworCisKKworIyBJZiBubyBDIGNvbXBpbGVyIHdhcyBzcGVjaWZpZWQsIHVzZSBDQy4KK0xUQ0M9JHtMVENDLSIkQ0MifQorCisjIElmIG5vIEMgY29tcGlsZXIgZmxhZ3Mgd2VyZSBzcGVjaWZpZWQsIHVzZSBDRkxBR1MuCitMVENGTEFHUz0ke0xUQ0ZMQUdTLSIkQ0ZMQUdTIn0KKworIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KK2NvbXBpbGVyPSRDQworCisjIFNhdmUgdGhlIGRlZmF1bHQgY29tcGlsZXIsIHNpbmNlIGl0IGdldHMgb3ZlcndyaXR0ZW4gd2hlbiB0aGUgb3RoZXIKKyMgdGFncyBhcmUgYmVpbmcgdGVzdGVkLCBhbmQgX0xUX1RBR1ZBUihjb21waWxlciwgW10pIGlzIGEgTk9QLgorY29tcGlsZXJfREVGQVVMVD0kQ0MKKworIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKK2FjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKK2V2YWwgIiRhY19jb21waWxlIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgorX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAorJFJNIGNvbmZ0ZXN0KgorCithY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKK2VjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0CitldmFsICIkYWNfbGluayIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKK19sdF9saW5rZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCiskUk0gLXIgY29uZnRlc3QqCisKKworIyMgQ0FWRUFUIEVNUFRPUjoKKyMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCisjIyB0aGUgcnVubmluZyBvcmRlciBvciBvdGhlcndpc2UgbW92ZSB0aGVtIGFyb3VuZCB1bmxlc3MgeW91IGtub3cgZXhhY3RseQorIyMgd2hhdCB5b3UgYXJlIGRvaW5nLi4uCitpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisKK2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPQorCitpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICBjYXNlICRjY19iYXNlbmFtZSBpbgorICBudmNjKikKKyAgICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0nIC1YY29tcGlsZXIgLWZuby1idWlsdGluJyA7OworICAqKQorICAgIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPScgLWZuby1idWlsdGluJyA7OworICBlc2FjCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucy4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zPW5vCisgICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgbHRfY29tcGlsZXJfZmxhZz0iLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyIKKyAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCisgICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgorICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucworICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KKyAgICMgVGhlIG9wdGlvbiBpcyByZWZlcmVuY2VkIHZpYSBhIHZhcmlhYmxlIHRvIGF2b2lkIGNvbmZ1c2luZyBzZWQuCisgICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKKyAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKKyAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJGx0X2NvbXBpbGVcIiIgPiY1KQorICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKKyAgIGFjX3N0YXR1cz0kPworICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgIiRhY19vdXRmaWxlIjsgdGhlbgorICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3Mgb3RoZXIgdGhhbiB0aGUgdXN1YWwgb3V0cHV0LgorICAgICAkRUNITyAiJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPmNvbmZ0ZXN0LmV4cAorICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKKyAgICAgaWYgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVyMiB8fCBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zPXllcworICAgICBmaQorICAgZmkKKyAgICRSTSBjb25mdGVzdCoKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucyIgPiY2OyB9CisKK2lmIHRlc3QgeCIkbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMiID0geHllczsgdGhlbgorICAgIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPSIkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyIKK2Vsc2UKKyAgICA6CitmaQorCitmaQorCisKKworCisKKworICBsdF9wcm9nX2NvbXBpbGVyX3dsPQorbHRfcHJvZ19jb21waWxlcl9waWM9CitsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0KKworCisgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLXN0YXRpYycKKworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeCopCisgICAgICAjIEFsbCBBSVggY29kZSBpcyBQSUMuCisgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhbWlnYW9zKikKKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBwb3dlcnBjKQorICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAorICAgICAgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mUElDJworICAgICAgICA7OworICAgICAgbTY4aykKKyAgICAgICAgICAgICMgRklYTUU6IHdlIG5lZWQgYXQgbGVhc3QgNjgwMjAgY29kZSB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLCBidXQKKyAgICAgICAgICAgICMgYWRkaW5nIHRoZSBgLW02ODAyMCcgZmxhZyB0byBHQ0MgcHJldmVudHMgYnVpbGRpbmcgYW55dGhpbmcgYmV0dGVyLAorICAgICAgICAgICAgIyBsaWtlIGAtbTY4MDQwJy4KKyAgICAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctbTY4MDIwIC1yZXNpZGVudDMyIC1tYWx3YXlzLXJlc3RvcmUtYTQnCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgYmVvcyogfCBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqIHwgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIHRoZXNlIE9TZXMuCisgICAgICA7OworCisgICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKiB8IGNlZ2NjKikKKyAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKKyAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCisgICAgICAjIEFsdGhvdWdoIHRoZSBjeWd3aW4gZ2NjIGlnbm9yZXMgLWZQSUMsIHN0aWxsIG5lZWQgdGhpcyBmb3Igb2xkLXN0eWxlCisgICAgICAjICgtLWRpc2FibGUtYXV0by1pbXBvcnQpIGxpYnJhcmllcworICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1ERExMX0VYUE9SVCcKKyAgICAgIDs7CisKKyAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQorICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcworICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mbm8tY29tbW9uJworICAgICAgOzsKKworICAgIGhhaWt1KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciBIYWlrdS4KKyAgICAgICMgVGhlICItc3RhdGljIiBmbGFnIGV4aXN0cywgYnV0IGlzIGJyb2tlbi4KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPQorICAgICAgOzsKKworICAgIGhwdXgqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIDY0LWJpdCBQQSBIUC1VWCwgYnV0IG5vdCBmb3IgMzItYml0CisgICAgICAjIFBBIEhQLVVYLiAgT24gSUE2NCBIUC1VWCwgUElDIGlzIHRoZSBkZWZhdWx0IGJ1dCB0aGUgcGljIGZsYWcKKyAgICAgICMgc2V0cyB0aGUgZGVmYXVsdCBUTFMgbW9kZWwgYW5kIGFmZmVjdHMgaW5saW5pbmcuCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgaHBwYSo2NCopCisJIyArWiB0aGUgZGVmYXVsdAorCTs7CisgICAgICAqKQorCWx0X3Byb2dfY29tcGlsZXJfcGljPSctZlBJQycKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGludGVyaXhbMy05XSopCisgICAgICAjIEludGVyaXggMy54IGdjYyAtZnBpYy8tZlBJQyBvcHRpb25zIGdlbmVyYXRlIGJyb2tlbiBjb2RlLgorICAgICAgIyBJbnN0ZWFkLCB3ZSByZWxvY2F0ZSBzaGFyZWQgbGlicmFyaWVzIGF0IHJ1bnRpbWUuCisgICAgICA7OworCisgICAgbXNkb3NkamdwcCopCisgICAgICAjIEp1c3QgYmVjYXVzZSB3ZSB1c2UgR0NDIGRvZXNuJ3QgbWVhbiB3ZSBzdWRkZW5seSBnZXQgc2hhcmVkIGxpYnJhcmllcworICAgICAgIyBvbiBzeXN0ZW1zIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0aGVtLgorICAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkPW5vCisgICAgICBlbmFibGVfc2hhcmVkPW5vCisgICAgICA7OworCisgICAgKm50byogfCAqcW54KikKKyAgICAgICMgUU5YIHVzZXMgR05VIEMrKywgYnV0IG5lZWQgdG8gZGVmaW5lIC1zaGFyZWQgb3B0aW9uIHRvbywgb3RoZXJ3aXNlCisgICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMgLXNoYXJlZCcKKyAgICAgIDs7CisKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisJbHRfcHJvZ19jb21waWxlcl9waWM9LUtjb25mb3JtX3BpYworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICAqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mUElDJworICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgIG52Y2MqKSAjIEN1ZGEgQ29tcGlsZXIgRHJpdmVyIDIuMgorICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVhsaW5rZXIgJworICAgICAgaWYgdGVzdCAtbiAiJGx0X3Byb2dfY29tcGlsZXJfcGljIjsgdGhlbgorICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0iLVhjb21waWxlciAkbHRfcHJvZ19jb21waWxlcl9waWMiCisgICAgICBmaQorICAgICAgOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICAjIFBPUlRNRSBDaGVjayBmb3IgZmxhZyB0byBwYXNzIGxpbmtlciBmbGFncyB0aHJvdWdoIHRoZSBzeXN0ZW0gY29tcGlsZXIuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeCopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgorCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgIGVsc2UKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLWJuc28gLWJJOi9saWIvc3lzY2FsbHMuZXhwJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqIHwgY2VnY2MqKQorICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZworICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctRERMTF9FWFBPUlQnCisgICAgICA7OworCisgICAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIElBNjQgSFAtVVggYW5kIDY0LWJpdCBIUC1VWCwgYnV0CisgICAgICAjIG5vdCBmb3IgUEEgSFAtVVguCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgaHBwYSo2NCp8aWE2NCopCisJIyArWiB0aGUgZGVmYXVsdAorCTs7CisgICAgICAqKQorCWx0X3Byb2dfY29tcGlsZXJfcGljPScrWicKKwk7OworICAgICAgZXNhYworICAgICAgIyBJcyB0aGVyZSBhIGJldHRlciBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyB0aGF0IHdvcmtzIHdpdGggdGhlIGJ1bmRsZWQgQ0M/CisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nJHt3bH0tYSAke3dsfWFyY2hpdmUnCisgICAgICA7OworCisgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisgICAgICAjIFBJQyAod2l0aCAtS1BJQykgaXMgdGhlIGRlZmF1bHQuCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLW5vbl9zaGFyZWQnCisgICAgICA7OworCisgICAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICMgb2xkIEludGVsIGZvciB4ODZfNjQgd2hpY2ggc3RpbGwgc3VwcG9ydGVkIC1LUElDLgorICAgICAgZWNjKikKKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworCWx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLXN0YXRpYycKKyAgICAgICAgOzsKKyAgICAgICMgaWNjIHVzZWQgdG8gYmUgaW5jb21wYXRpYmxlIHdpdGggR0NDLgorICAgICAgIyBJQ0MgMTAgZG9lc24ndCBhY2NlcHQgLUtQSUMgYW55IG1vcmUuCisgICAgICBpY2MqIHwgaWZvcnQqKQorCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mUElDJworCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctc3RhdGljJworICAgICAgICA7OworICAgICAgIyBMYWhleSBGb3J0cmFuIDguMS4KKyAgICAgIGxmOTUqKQorCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisJbHRfcHJvZ19jb21waWxlcl9waWM9Jy0tc2hhcmVkJworCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctLXN0YXRpYycKKwk7OworICAgICAgbmFnZm9yKikKKwkjIE5BRyBGb3J0cmFuIGNvbXBpbGVyCisJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLC1XbCwsJworCWx0X3Byb2dfY29tcGlsZXJfcGljPSctUElDJworCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKwk7OworICAgICAgcGdjYyogfCBwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSogfCBwZ2ZvcnRyYW4qKQorICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAorCSMgd2hpY2ggbG9va3MgdG8gYmUgYSBkZWFkIHByb2plY3QpCisJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZwaWMnCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgICA7OworICAgICAgY2NjKikKKyAgICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKyAgICAgICAgIyBBbGwgQWxwaGEgY29kZSBpcyBQSUMuCisgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctbm9uX3NoYXJlZCcKKyAgICAgICAgOzsKKyAgICAgIHhsKiB8IGJneGwqIHwgYmdmKiB8IG1waXhsKikKKwkjIElCTSBYTCBDIDguMC9Gb3J0cmFuIDEwLjEsIDExLjEgb24gUFBDIGFuZCBCbHVlR2VuZQorCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1xcGljJworCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctcXN0YXRpY2xpbmsnCisJOzsKKyAgICAgICopCisJY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCisJKlN1blwgQ2VyZXNcIEZvcnRyYW4qIHwgKlN1bipGb3J0cmFuKlwgWzEtN10uKiB8ICpTdW4qRm9ydHJhbipcIDguWzAtM10qKQorCSAgIyBTdW4gRm9ydHJhbiA4LjMgcGFzc2VzIGFsbCB1bnJlY29nbml6ZWQgZmxhZ3MgdG8gdGhlIGxpbmtlcgorCSAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworCSAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworCSAgbHRfcHJvZ19jb21waWxlcl93bD0nJworCSAgOzsKKwkqU3VuXCBGKiB8ICpTdW4qRm9ydHJhbiopCisJICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCisJICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisJICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctUW9wdGlvbiBsZCAnCisJICA7OworCSpTdW5cIEMqKQorCSAgIyBTdW4gQyA1LjkKKwkgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKKwkgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKwkgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisJICA7OworICAgICAgICAqSW50ZWwqXCBbQ0ZdKkNvbXBpbGVyKikKKwkgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisJICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMnCisJICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLXN0YXRpYycKKwkgIDs7CisJKlBvcnRsYW5kXCBHcm91cCopCisJICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworCSAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mcGljJworCSAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworCSAgOzsKKwllc2FjCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBuZXdzb3M2KQorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgICpudG8qIHwgKnFueCopCisgICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQorICAgICAgIyBpdCB3aWxsIGNvcmVkdW1wLgorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mUElDIC1zaGFyZWQnCisgICAgICA7OworCisgICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKyAgICAgICMgQWxsIE9TRi8xIGNvZGUgaXMgUElDLgorICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1ub25fc2hhcmVkJworICAgICAgOzsKKworICAgIHJkb3MqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1ub25fc2hhcmVkJworICAgICAgOzsKKworICAgIHNvbGFyaXMqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgIGY3NyogfCBmOTAqIHwgZjk1KiB8IHN1bmY3NyogfCBzdW5mOTAqIHwgc3VuZjk1KikKKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctUW9wdGlvbiBsZCAnOzsKKyAgICAgICopCisJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCc7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIHN1bm9zNCopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctUW9wdGlvbiBsZCAnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLVBJQycKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICBzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWMgO3RoZW4KKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtjb25mb3JtX3BpYycKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICBmaQorICAgICAgOzsKKworICAgIHN5c3Y1KiB8IHVuaXh3YXJlKiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCBPcGVuVU5JWCopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgIHVuaWNvcyopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworICAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkPW5vCisgICAgICA7OworCisgICAgdXRzNCopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLXBpYycKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICAqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkPW5vCisgICAgICA7OworICAgIGVzYWMKKyAgZmkKKworY2FzZSAkaG9zdF9vcyBpbgorICAjIEZvciBwbGF0Zm9ybXMgd2hpY2ggZG8gbm90IHN1cHBvcnQgUElDLCAtRFBJQyBpcyBtZWFuaW5nbGVzczoKKyAgKmRqZ3BwKikKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0KKyAgICA7OworICAqKQorICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSIkbHRfcHJvZ19jb21waWxlcl9waWMgLURQSUMiCisgICAgOzsKK2VzYWMKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljPSRsdF9wcm9nX2NvbXBpbGVyX3BpYworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9waWMiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYyIgPiY2OyB9CitsdF9wcm9nX2NvbXBpbGVyX3BpYz0kbHRfY3ZfcHJvZ19jb21waWxlcl9waWMKKworIworIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorIworaWYgdGVzdCAtbiAiJGx0X3Byb2dfY29tcGlsZXJfcGljIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRjb21waWxlciBQSUMgZmxhZyAkbHRfcHJvZ19jb21waWxlcl9waWMgd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRsdF9wcm9nX2NvbXBpbGVyX3BpYyB3b3Jrcy4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrcys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzPW5vCisgICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgbHRfY29tcGlsZXJfZmxhZz0iJGx0X3Byb2dfY29tcGlsZXJfcGljIC1EUElDIgorICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKKyAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCisgICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCisgICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgorICAgIyBUaGUgb3B0aW9uIGlzIHJlZmVyZW5jZWQgdmlhIGEgdmFyaWFibGUgdG8gYXZvaWQgY29uZnVzaW5nIHNlZC4KKyAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAorICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAorICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkbHRfY29tcGlsZVwiIiA+JjUpCisgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyAiJGFjX291dGZpbGUiOyB0aGVuCisgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCisgICAgICRFQ0hPICIkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+Y29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgorICAgICBpZiB0ZXN0ICEgLXMgY29uZnRlc3QuZXIyIHx8IGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3M9eWVzCisgICAgIGZpCisgICBmaQorICAgJFJNIGNvbmZ0ZXN0KgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3JrcyIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzIiA+JjY7IH0KKworaWYgdGVzdCB4IiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3JrcyIgPSB4eWVzOyB0aGVuCisgICAgY2FzZSAkbHRfcHJvZ19jb21waWxlcl9waWMgaW4KKyAgICAgIiIgfCAiICIqKSA7OworICAgICAqKSBsdF9wcm9nX2NvbXBpbGVyX3BpYz0iICRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgOzsKKyAgICAgZXNhYworZWxzZQorICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPQorICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQ9bm8KK2ZpCisKK2ZpCisKKworCisKKworCisKKworCisKKworIworIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIHN0YXRpYyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorIword2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBsdF90bXBfc3RhdGljX2ZsYWc9XCIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNcIgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X3RtcF9zdGF0aWNfZmxhZyB3b3JrcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X3RtcF9zdGF0aWNfZmxhZyB3b3Jrcy4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrcys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzPW5vCisgICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorICAgTERGTEFHUz0iJExERkxBR1MgJGx0X3RtcF9zdGF0aWNfZmxhZyIKKyAgIGVjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgaWYgKGV2YWwgJGFjX2xpbmsgMj5jb25mdGVzdC5lcnIpICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgICAgICMgVGhlIGxpbmtlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKKyAgICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgICAjIEFwcGVuZCBhbnkgZXJyb3JzIHRvIHRoZSBjb25maWcubG9nLgorICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQorICAgICAgICRFQ0hPICIkX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPiBjb25mdGVzdC5leHAKKyAgICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKKyAgICAgICBpZiBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3M9eWVzCisgICAgICAgZmkKKyAgICAgZWxzZQorICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzPXllcworICAgICBmaQorICAgZmkKKyAgICRSTSAtciBjb25mdGVzdCoKKyAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MiID4mNjsgfQorCitpZiB0ZXN0IHgiJGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzIiA9IHh5ZXM7IHRoZW4KKyAgICA6CitlbHNlCisgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9CitmaQorCisKKworCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0Li4uICIgPiY2OyB9CitpZiAke2x0X2N2X3Byb2dfY29tcGlsZXJfY19vKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX289bm8KKyAgICRSTSAtciBjb25mdGVzdCAyPi9kZXYvbnVsbAorICAgbWtkaXIgY29uZnRlc3QKKyAgIGNkIGNvbmZ0ZXN0CisgICBta2RpciBvdXQKKyAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorCisgICBsdF9jb21waWxlcl9mbGFnPSItbyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQiCisgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgorICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KKyAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKKyAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCisgICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKKyAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKKyAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJGx0X2NvbXBpbGVcIiIgPiY1KQorICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPm91dC9jb25mdGVzdC5lcnIpCisgICBhY19zdGF0dXM9JD8KKyAgIGNhdCBvdXQvY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQKKyAgIHRoZW4KKyAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCisgICAgICRFQ0hPICIkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+IG91dC9jb25mdGVzdC5leHAKKyAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIG91dC9jb25mdGVzdC5lcnIgPm91dC9jb25mdGVzdC5lcjIKKyAgICAgaWYgdGVzdCAhIC1zIG91dC9jb25mdGVzdC5lcjIgfHwgZGlmZiBvdXQvY29uZnRlc3QuZXhwIG91dC9jb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vPXllcworICAgICBmaQorICAgZmkKKyAgIGNobW9kIHUrdyAuIDI+JjUKKyAgICRSTSBjb25mdGVzdCoKKyAgICMgU0dJIEMrKyBjb21waWxlciB3aWxsIGNyZWF0ZSBkaXJlY3Rvcnkgb3V0L2lpX2ZpbGVzLyBmb3IKKyAgICMgdGVtcGxhdGUgaW5zdGFudGlhdGlvbgorICAgdGVzdCAtZCBvdXQvaWlfZmlsZXMgJiYgJFJNIG91dC9paV9maWxlcy8qICYmIHJtZGlyIG91dC9paV9maWxlcworICAgJFJNIG91dC8qICYmIHJtZGlyIG91dAorICAgY2QgLi4KKyAgICRSTSAtciBjb25mdGVzdAorICAgJFJNIGNvbmZ0ZXN0KgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiA+JjY7IH0KKworCisKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfcHJvZ19jb21waWxlcl9jX28rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz1ubworICAgJFJNIC1yIGNvbmZ0ZXN0IDI+L2Rldi9udWxsCisgICBta2RpciBjb25mdGVzdAorICAgY2QgY29uZnRlc3QKKyAgIG1rZGlyIG91dAorICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisKKyAgIGx0X2NvbXBpbGVyX2ZsYWc9Ii1vIG91dC9jb25mdGVzdDIuJGFjX29iamV4dCIKKyAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCisgICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgorICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucworICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KKyAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAorICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAorICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkbHRfY29tcGlsZVwiIiA+JjUpCisgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+b3V0L2NvbmZ0ZXN0LmVycikKKyAgIGFjX3N0YXR1cz0kPworICAgY2F0IG91dC9jb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zIG91dC9jb25mdGVzdDIuJGFjX29iamV4dAorICAgdGhlbgorICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKKyAgICAgJEVDSE8gIiRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID4gb3V0L2NvbmZ0ZXN0LmV4cAorICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgb3V0L2NvbmZ0ZXN0LmVyciA+b3V0L2NvbmZ0ZXN0LmVyMgorICAgICBpZiB0ZXN0ICEgLXMgb3V0L2NvbmZ0ZXN0LmVyMiB8fCBkaWZmIG91dC9jb25mdGVzdC5leHAgb3V0L2NvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX289eWVzCisgICAgIGZpCisgICBmaQorICAgY2htb2QgdSt3IC4gMj4mNQorICAgJFJNIGNvbmZ0ZXN0KgorICAgIyBTR0kgQysrIGNvbXBpbGVyIHdpbGwgY3JlYXRlIGRpcmVjdG9yeSBvdXQvaWlfZmlsZXMvIGZvcgorICAgIyB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uCisgICB0ZXN0IC1kIG91dC9paV9maWxlcyAmJiAkUk0gb3V0L2lpX2ZpbGVzLyogJiYgcm1kaXIgb3V0L2lpX2ZpbGVzCisgICAkUk0gb3V0LyogJiYgcm1kaXIgb3V0CisgICBjZCAuLgorICAgJFJNIC1yIGNvbmZ0ZXN0CisgICAkUk0gY29uZnRlc3QqCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID4mNjsgfQorCisKKworCitoYXJkX2xpbmtzPSJub3R0ZXN0ZWQiCitpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID0gbm8gJiYgdGVzdCAiJG5lZWRfbG9ja3MiICE9IG5vOyB0aGVuCisgICMgZG8gbm90IG92ZXJ3cml0ZSB0aGUgdmFsdWUgb2YgbmVlZF9sb2NrcyBwcm92aWRlZCBieSB0aGUgdXNlcgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3MuLi4gIiA+JjY7IH0KKyAgaGFyZF9saW5rcz15ZXMKKyAgJFJNIGNvbmZ0ZXN0KgorICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubworICB0b3VjaCBjb25mdGVzdC5hCisgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPiY1IHx8IGhhcmRfbGlua3M9bm8KKyAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRoYXJkX2xpbmtzIiA+JjUKKyRhc19lY2hvICIkaGFyZF9saW5rcyIgPiY2OyB9CisgIGlmIHRlc3QgIiRoYXJkX2xpbmtzIiA9IG5vOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBcYCRDQycgZG9lcyBub3Qgc3VwcG9ydCBcYC1jIC1vJywgc28gXGBtYWtlIC1qJyBtYXkgYmUgdW5zYWZlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFxgJENDJyBkb2VzIG5vdCBzdXBwb3J0IFxgLWMgLW8nLCBzbyBcYG1ha2UgLWonIG1heSBiZSB1bnNhZmUiID4mMjt9CisgICAgbmVlZF9sb2Nrcz13YXJuCisgIGZpCitlbHNlCisgIG5lZWRfbG9ja3M9bm8KK2ZpCisKKworCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAiID4mNjsgfQorCisgIHJ1bnBhdGhfdmFyPQorICBhbGxvd191bmRlZmluZWRfZmxhZz0KKyAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPW5vCisgIGFyY2hpdmVfY21kcz0KKyAgYXJjaGl2ZV9leHBzeW1fY21kcz0KKyAgY29tcGlsZXJfbmVlZHNfb2JqZWN0PW5vCisgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9bm8KKyAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPQorICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgIGhhcmRjb2RlX2F1dG9tYXRpYz1ubworICBoYXJkY29kZV9kaXJlY3Q9bm8KKyAgaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPW5vCisgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9CisgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9CisgIGhhcmRjb2RlX21pbnVzX0w9bm8KKyAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj11bnN1cHBvcnRlZAorICBpbmhlcml0X3JwYXRoPW5vCisgIGxpbmtfYWxsX2RlcGxpYnM9dW5rbm93bgorICBtb2R1bGVfY21kcz0KKyAgbW9kdWxlX2V4cHN5bV9jbWRzPQorICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPQorICBvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcz0KKyAgdGhyZWFkX3NhZmVfZmxhZ19zcGVjPQorICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0KKyAgIyBpbmNsdWRlX2V4cHN5bXMgc2hvdWxkIGJlIGEgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgc3ltYm9scyB0byBiZSAqYWx3YXlzKgorICAjIGluY2x1ZGVkIGluIHRoZSBzeW1ib2wgbGlzdAorICBpbmNsdWRlX2V4cHN5bXM9CisgICMgZXhjbHVkZV9leHBzeW1zIGNhbiBiZSBhbiBleHRlbmRlZCByZWdleHAgb2Ygc3ltYm9scyB0byBleGNsdWRlCisgICMgaXQgd2lsbCBiZSB3cmFwcGVkIGJ5IGAgKCcgYW5kIGApJCcsIHNvIG9uZSBtdXN0IG5vdCBtYXRjaCBiZWdpbm5pbmcgb3IKKyAgIyBlbmQgb2YgbGluZS4gIEV4YW1wbGU6IGBhfGJjfC4qZC4qJyB3aWxsIGV4Y2x1ZGUgdGhlIHN5bWJvbHMgYGEnIGFuZCBgYmMnLAorICAjIGFzIHdlbGwgYXMgYW55IHN5bWJvbCB0aGF0IGNvbnRhaW5zIGBkJy4KKyAgZXhjbHVkZV9leHBzeW1zPSdfR0xPQkFMX09GRlNFVF9UQUJMRV98X0dMT0JBTF9fRltJRF1fLionCisgICMgQWx0aG91Z2ggX0dMT0JBTF9PRkZTRVRfVEFCTEVfIGlzIGEgdmFsaWQgc3ltYm9sIEMgbmFtZSwgbW9zdCBhLm91dAorICAjIHBsYXRmb3JtcyAoYWIpdXNlIGl0IGluIFBJQyBjb2RlLCBidXQgdGhlaXIgbGlua2VycyBnZXQgY29uZnVzZWQgaWYKKyAgIyB0aGUgc3ltYm9sIGlzIGV4cGxpY2l0bHkgcmVmZXJlbmNlZC4gIFNpbmNlIHBvcnRhYmxlIGNvZGUgY2Fubm90CisgICMgcmVseSBvbiB0aGlzIHN5bWJvbCBuYW1lLCBpdCdzIHByb2JhYmx5IGZpbmUgdG8gbmV2ZXIgaW5jbHVkZSBpdCBpbgorICAjIHByZWxvYWRlZCBzeW1ib2wgdGFibGVzLgorICAjIEV4Y2x1ZGUgc2hhcmVkIGxpYnJhcnkgaW5pdGlhbGl6YXRpb24vZmluYWxpemF0aW9uIHN5bWJvbHMuCisgIGV4dHJhY3RfZXhwc3ltc19jbWRzPQorCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICMgRklYTUU6IHRoZSBNU1ZDKysgcG9ydCBoYXNuJ3QgYmVlbiB0ZXN0ZWQgaW4gYSBsb29vb25nIHRpbWUKKyAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZworICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisgICAgICB3aXRoX2dudV9sZD1ubworICAgIGZpCisgICAgOzsKKyAgaW50ZXJpeCopCisgICAgIyB3ZSBqdXN0IGhvcGUvYXNzdW1lIHRoaXMgaXMgZ2NjIGFuZCBub3QgYzg5ICg9IE1TVkMrKykKKyAgICB3aXRoX2dudV9sZD15ZXMKKyAgICA7OworICBvcGVuYnNkKikKKyAgICB3aXRoX2dudV9sZD1ubworICAgIDs7CisgIGVzYWMKKworICBsZF9zaGxpYnM9eWVzCisKKyAgIyBPbiBzb21lIHRhcmdldHMsIEdOVSBsZCBpcyBjb21wYXRpYmxlIGVub3VnaCB3aXRoIHRoZSBuYXRpdmUgbGlua2VyCisgICMgdGhhdCB3ZSdyZSBiZXR0ZXIgb2ZmIHVzaW5nIHRoZSBuYXRpdmUgaW50ZXJmYWNlIGZvciBib3RoLgorICBsdF91c2VfZ251X2xkX2ludGVyZmFjZT1ubworICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4KikKKwkjIFRoZSBBSVggcG9ydCBvZiBHTlUgbGQgaGFzIGFsd2F5cyBhc3BpcmVkIHRvIGNvbXBhdGliaWxpdHkKKwkjIHdpdGggdGhlIG5hdGl2ZSBsaW5rZXIuICBIb3dldmVyLCBhcyB0aGUgd2FybmluZyBpbiB0aGUgR05VIGxkCisJIyBibG9jayBzYXlzLCB2ZXJzaW9ucyBiZWZvcmUgMi4xOS41KiBjb3VsZG4ndCByZWFsbHkgY3JlYXRlIHdvcmtpbmcKKwkjIHNoYXJlZCBsaWJyYXJpZXMsIHJlZ2FyZGxlc3Mgb2YgdGhlIGludGVyZmFjZSB1c2VkLgorCWNhc2UgYCRMRCAtdiAyPiYxYCBpbgorCSAgKlwgXChHTlVcIEJpbnV0aWxzXClcIDIuMTkuNSopIDs7CisJICAqXCBcKEdOVVwgQmludXRpbHNcKVwgMi5bMi05XSopIDs7CisJICAqXCBcKEdOVVwgQmludXRpbHNcKVwgWzMtOV0qKSA7OworCSAgKikKKwkgICAgbHRfdXNlX2dudV9sZF9pbnRlcmZhY2U9eWVzCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICAqKQorCWx0X3VzZV9nbnVfbGRfaW50ZXJmYWNlPXllcworCTs7CisgICAgZXNhYworICBmaQorCisgIGlmIHRlc3QgIiRsdF91c2VfZ251X2xkX2ludGVyZmFjZSIgPSB5ZXM7IHRoZW4KKyAgICAjIElmIGFyY2hpdmVfY21kcyBydW5zIExELCBub3QgQ0MsIHdsYXJjIHNob3VsZCBiZSBlbXB0eQorICAgIHdsYXJjPScke3dsfScKKworICAgICMgU2V0IHNvbWUgZGVmYXVsdHMgZm9yIEdOVSBsZCB3aXRoIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQuIFRoZXNlCisgICAgIyBhcmUgcmVzZXQgbGF0ZXIgaWYgc2hhcmVkIGxpYnJhcmllcyBhcmUgbm90IHN1cHBvcnRlZC4gUHV0dGluZyB0aGVtCisgICAgIyBoZXJlIGFsbG93cyB0aGVtIHRvIGJlIG92ZXJyaWRkZW4gaWYgbmVjZXNzYXJ5LgorICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICisgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworICAgICMgYW5jaWVudCBHTlUgbGQgZGlkbid0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlIGV0LiBhbC4KKyAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnbm8td2hvbGUtYXJjaGl2ZScgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSIkd2xhcmMiJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnIiR3bGFyYyInLS1uby13aG9sZS1hcmNoaXZlJworICAgIGVsc2UKKyAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPQorICAgIGZpCisgICAgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPW5vCisgICAgY2FzZSBgJExEIC12IDI+JjFgIGluCisgICAgICAqR05VXCBnb2xkKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OworICAgICAgKlwgWzAxXS4qIHwgKlwgMi5bMC05XS4qIHwgKlwgMi4xMC4qKSA7OyAjIGNhdGNoIHZlcnNpb25zIDwgMi4xMQorICAgICAgKlwgMi4xMS45My4wLjJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBSSDcuMyAuLi4KKyAgICAgICpcIDIuMTEuOTIuMC4xMlwgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OyAjIE1hbmRyYWtlIDguMiAuLi4KKyAgICAgICpcIDIuMTEuKikgOzsgIyBvdGhlciAyLjExIHZlcnNpb25zCisgICAgICAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7CisgICAgZXNhYworCisgICAgIyBTZWUgaWYgR05VIGxkIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeFszLTldKikKKyAgICAgICMgT24gQUlYL1BQQywgdGhlIEdOVSBsaW5rZXIgaXMgdmVyeSBicm9rZW4KKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NDsgdGhlbgorCWxkX3NobGlicz1ubworCWNhdCA8PF9MVF9FT0YgMT4mMgorCisqKiogV2FybmluZzogdGhlIEdOVSBsaW5rZXIsIGF0IGxlYXN0IHVwIHRvIHJlbGVhc2UgMi4xOSwgaXMgcmVwb3J0ZWQKKyoqKiB0byBiZSB1bmFibGUgdG8gcmVsaWFibHkgY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gQUlYLgorKioqIFRoZXJlZm9yZSwgbGlidG9vbCBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgSWYgeW91CisqKiogcmVhbGx5IGNhcmUgZm9yIHNoYXJlZCBsaWJyYXJpZXMsIHlvdSBtYXkgd2FudCB0byBpbnN0YWxsIGJpbnV0aWxzCisqKiogMi4yMCBvciBhYm92ZSwgb3IgbW9kaWZ5IHlvdXIgUEFUSCBzbyB0aGF0IGEgbm9uLUdOVSBsaW5rZXIgaXMgZm91bmQuCisqKiogWW91IHdpbGwgdGhlbiBuZWVkIHRvIHJlc3RhcnQgdGhlIGNvbmZpZ3VyYXRpb24gcHJvY2Vzcy4KKworX0xUX0VPRgorICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhbWlnYW9zKikKKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBwb3dlcnBjKQorICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAorICAgICAgICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JycKKyAgICAgICAgOzsKKyAgICAgIG02OGspCisgICAgICAgICAgICBhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCisgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICAgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGJlb3MqKQorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisJIyBKb3NlcGggQmVja2VuYmFjaCA8anJiM0BiZXN0LmNvbT4gc2F5cyBzb21lIHJlbGVhc2VzIG9mIGdjYworCSMgc3VwcG9ydCAtLXVuZGVmaW5lZC4gIFRoaXMgZGVzZXJ2ZXMgc29tZSBpbnZlc3RpZ2F0aW9uLiAgRklYTUUKKwlhcmNoaXZlX2NtZHM9JyRDQyAtbm9zdGFydCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIyBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICkgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCisgICAgICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS0tZXhwb3J0LWFsbC1zeW1ib2xzJworICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKyAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz1ubworICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKyAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvO3MvXi4qWyBdX19ubV9fXChbXiBdKlwpWyBdW14gXSovXDEgREFUQS87L15JWyBdL2Q7L15bQUlUV11bIF0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgICAgIGV4Y2x1ZGVfZXhwc3ltcz0nW19dK0dMT0JBTF9PRkZTRVRfVEFCTEVffFtfXStHTE9CQUxfX1tGSURdXy4qfFtfXStoZWFkX1tBLVphLXowLTlfXStfZGxsfFtBLVphLXowLTlfXStfZGxsX2luYW1lJworCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisJIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlICgxc3QgbGluZQorCSMgaXMgRVhQT1JUUyksIHVzZSBpdCBhcyBpczsgb3RoZXJ3aXNlLCBwcmVwZW5kLi4uCisJYXJjaGl2ZV9leHBzeW1fY21kcz0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKwkgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKwllbHNlCisJICBlY2hvIEVYUE9SVFMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKwkgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisJZml+CisJJENDIC1zaGFyZWQgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisgICAgICBlbHNlCisJbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIGhhaWt1KikKKyAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICBsaW5rX2FsbF9kZXBsaWJzPXllcworICAgICAgOzsKKworICAgIGludGVyaXhbMy05XSopCisgICAgICBoYXJkY29kZV9kaXJlY3Q9bm8KKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUUnCisgICAgICAjIEhhY2s6IE9uIEludGVyaXggMy54LCB3ZSBjYW5ub3QgY29tcGlsZSBQSUMgYmVjYXVzZSBvZiBhIGJyb2tlbiBnY2MuCisgICAgICAjIEluc3RlYWQsIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGxvYWRlZCBhdCBhbiBpbWFnZSBiYXNlICgweDEwMDAwMDAwIGJ5CisgICAgICAjIGRlZmF1bHQpIGFuZCByZWxvY2F0ZWQgaWYgdGhleSBjb25mbGljdCwgd2hpY2ggaXMgYSBzbG93IHZlcnkgbWVtb3J5CisgICAgICAjIGNvbnN1bWluZyBhbmQgZnJhZ21lbnRpbmcgcHJvY2Vzcy4gIFRvIGF2b2lkIHRoaXMsIHdlIHBpY2sgYSByYW5kb20sCisgICAgICAjIDI1NiBLaUItYWxpZ25lZCBpbWFnZSBiYXNlIGJldHdlZW4gMHg1MDAwMDAwMCBhbmQgMHg2RkZDMDAwMCBhdCBsaW5rCisgICAgICAjIHRpbWUuICBNb3ZpbmcgdXAgZnJvbSAweDEwMDAwMDAwIGFsc28gYWxsb3dzIG1vcmUgc2JyaygyKSBzcGFjZS4KKyAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKyAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J3NlZCAicyxeLF8sIiAkZXhwb3J0X3N5bWJvbHMgPiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1yZXRhaW4tc3ltYm9scy1maWxlLCRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisgICAgICA7OworCisgICAgZ251KiB8IGxpbnV4KiB8IHRwZiogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgICAgICB0bXBfZGlldD1ubworICAgICAgaWYgdGVzdCAiJGhvc3Rfb3MiID0gbGludXgtZGlldGxpYmM7IHRoZW4KKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgZGlldFwgKikgdG1wX2RpZXQ9eWVzOzsJIyBsaW51eC1kaWV0bGliYyB3aXRoIHN0YXRpYyBsaW5raW5nICghZGlldC1keW4pCisJZXNhYworICAgICAgZmkKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRFR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsIFwKKwkgJiYgdGVzdCAiJHRtcF9kaWV0IiA9IG5vCisgICAgICB0aGVuCisJdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCisJdG1wX3NoYXJlZGZsYWc9Jy1zaGFyZWQnCisJY2FzZSAkY2NfYmFzZW5hbWUsJGhvc3RfY3B1IGluCisgICAgICAgIHBnY2MqKQkJCQkjIFBvcnRsYW5kIEdyb3VwIEMgY29tcGlsZXIKKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIHRtcF9hZGRmbGFnPScgJHBpY19mbGFnJworCSAgOzsKKwlwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSogfCBwZ2ZvcnRyYW4qKQorCQkJCQkjIFBvcnRsYW5kIEdyb3VwIGY3NyBhbmQgZjkwIGNvbXBpbGVycworCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcgLU1ub21haW4nIDs7CisJZWNjKixpYTY0KiB8IGljYyosaWE2NCopCSMgSW50ZWwgQyBjb21waWxlciBvbiBpYTY0CisJICB0bXBfYWRkZmxhZz0nIC1pX2R5bmFtaWMnIDs7CisJZWZjKixpYTY0KiB8IGlmb3J0KixpYTY0KikJIyBJbnRlbCBGb3J0cmFuIGNvbXBpbGVyIG9uIGlhNjQKKwkgIHRtcF9hZGRmbGFnPScgLWlfZHluYW1pYyAtbm9mb3JfbWFpbicgOzsKKwlpZmMqIHwgaWZvcnQqKQkJCSMgSW50ZWwgRm9ydHJhbiBjb21waWxlcgorCSAgdG1wX2FkZGZsYWc9JyAtbm9mb3JfbWFpbicgOzsKKwlsZjk1KikJCQkJIyBMYWhleSBGb3J0cmFuIDguMQorCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9CisJICB0bXBfc2hhcmVkZmxhZz0nLS1zaGFyZWQnIDs7CisJeGxbY0NdKiB8IGJneGxbY0NdKiB8IG1waXhsW2NDXSopICMgSUJNIFhMIEMgOC4wIG9uIFBQQyAoZGVhbCB3aXRoIHhsZiBiZWxvdykKKwkgIHRtcF9zaGFyZWRmbGFnPSctcW1rc2hyb2JqJworCSAgdG1wX2FkZGZsYWc9IDs7CisJbnZjYyopCSMgQ3VkYSBDb21waWxlciBEcml2ZXIgMi4yCisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICBjb21waWxlcl9uZWVkc19vYmplY3Q9eWVzCisJICA7OworCWVzYWMKKwljYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKwkqU3VuXCBDKikJCQkjIFN1biBDIDUuOQorCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR7d2x9LS13aG9sZS1hcmNoaXZlYG5ld19jb252ZW5pZW5jZT07IGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgLXogXCIkY29udlwiIHx8IG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICBjb21waWxlcl9uZWVkc19vYmplY3Q9eWVzCisJICB0bXBfc2hhcmVkZmxhZz0nLUcnIDs7CisJKlN1blwgRiopCQkJIyBTdW4gRm9ydHJhbiA4LjMKKwkgIHRtcF9zaGFyZWRmbGFnPSctRycgOzsKKwllc2FjCisJYXJjaGl2ZV9jbWRzPSckQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCisgICAgICAgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKyAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICAkQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS12ZXJzaW9uLXNjcmlwdCAke3dsfSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworICAgICAgICBmaQorCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwl4bGYqIHwgYmdmKiB8IGJneGxmKiB8IG1waXhsZiopCisJICAjIElCTSBYTCBGb3J0cmFuIDEwLjEgb24gUFBDIGNhbm5vdCBjcmVhdGUgc2hhcmVkIGxpYnMgaXRzZWxmCisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlIC0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKwkgIGFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKKwkgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKwkgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworCSAgZmkKKwkgIDs7CisJZXNhYworICAgICAgZWxzZQorICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgbmV0YnNkKikKKyAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckTEQgLUJzaGFyZWFibGUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbyAkbGliJworCXdsYXJjPQorICAgICAgZWxzZQorCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGZpCisgICAgICA7OworCisgICAgc29sYXJpcyopCisgICAgICBpZiAkTEQgLXYgMj4mMSB8ICRHUkVQICdCRkQgMlwuOCcgPiAvZGV2L251bGw7IHRoZW4KKwlsZF9zaGxpYnM9bm8KKwljYXQgPDxfTFRfRU9GIDE+JjIKKworKioqIFdhcm5pbmc6IFRoZSByZWxlYXNlcyAyLjguKiBvZiB0aGUgR05VIGxpbmtlciBjYW5ub3QgcmVsaWFibHkKKyoqKiBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBTb2xhcmlzIHN5c3RlbXMuICBUaGVyZWZvcmUsIGxpYnRvb2wKKyoqKiBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgV2UgdXJnZSB5b3UgdG8gdXBncmFkZSBHTlUKKyoqKiBiaW51dGlscyB0byByZWxlYXNlIDIuOS4xIG9yIG5ld2VyLiAgQW5vdGhlciBvcHRpb24gaXMgdG8gbW9kaWZ5CisqKiogeW91ciBQQVRIIG9yIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gc28gdGhhdCB0aGUgbmF0aXZlIGxpbmtlciBpcworKioqIHVzZWQsIGFuZCB0aGVuIHJlc3RhcnQuCisKK19MVF9FT0YKKyAgICAgIGVsaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKikKKyAgICAgIGNhc2UgYCRMRCAtdiAyPiYxYCBpbgorICAgICAgICAqXCBbMDFdLiogfCAqXCAyLlswLTldLiogfCAqXCAyLjFbMC01XS4qKQorCWxkX3NobGlicz1ubworCWNhdCA8PF9MVF9FT0YgMT4mMgorCisqKiogV2FybmluZzogUmVsZWFzZXMgb2YgdGhlIEdOVSBsaW5rZXIgcHJpb3IgdG8gMi4xNi45MS4wLjMgY2FuIG5vdAorKioqIHJlbGlhYmx5IGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIFNDTyBzeXN0ZW1zLiAgVGhlcmVmb3JlLCBsaWJ0b29sCisqKiogaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIFdlIHVyZ2UgeW91IHRvIHVwZ3JhZGUgR05VCisqKiogYmludXRpbHMgdG8gcmVsZWFzZSAyLjE2LjkxLjAuMyBvciBuZXdlci4gIEFub3RoZXIgb3B0aW9uIGlzIHRvIG1vZGlmeQorKioqIHlvdXIgUEFUSCBvciBjb21waWxlciBjb25maWd1cmF0aW9uIHNvIHRoYXQgdGhlIG5hdGl2ZSBsaW5rZXIgaXMKKyoqKiB1c2VkLCBhbmQgdGhlbiByZXN0YXJ0LgorCitfTFRfRU9GCisJOzsKKwkqKQorCSAgIyBGb3Igc2VjdXJpdHkgcmVhc29ucywgaXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRoYXQgeW91IGFsd2F5cworCSAgIyB1c2UgYWJzb2x1dGUgcGF0aHMgZm9yIG5hbWluZyBzaGFyZWQgbGlicmFyaWVzLCBhbmQgZXhjbHVkZSB0aGUKKwkgICMgRFRfUlVOUEFUSCB0YWcgZnJvbSBleGVjdXRhYmxlcyBhbmQgbGlicmFyaWVzLiAgQnV0IGRvaW5nIHNvCisJICAjIHJlcXVpcmVzIHRoYXQgeW91IGNvbXBpbGUgZXZlcnl0aGluZyB0d2ljZSwgd2hpY2ggaXMgYSBwYWluLgorCSAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisJICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCSAgZWxzZQorCSAgICBsZF9zaGxpYnM9bm8KKwkgIGZpCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBzdW5vczQqKQorICAgICAgYXJjaGl2ZV9jbWRzPSckTEQgLWFzc2VydCBwdXJlLXRleHQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgd2xhcmM9CisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICA7OworCisgICAgKikKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICBlbHNlCisJbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBpZiB0ZXN0ICIkbGRfc2hsaWJzIiA9IG5vOyB0aGVuCisgICAgICBydW5wYXRoX3Zhcj0KKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9CisgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9CisgICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0KKyAgICBmaQorICBlbHNlCisgICAgIyBQT1JUTUUgZmlsbCBpbiBhIGRlc2NyaXB0aW9uIG9mIHlvdXIgc3lzdGVtJ3MgbGlua2VyIChub3QgR05VIGxkKQorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBhaXgzKikKKyAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisgICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9eWVzCisgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckTEQgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1iRTokZXhwb3J0X3N5bWJvbHMgLVQ1MTIgLUg1MTIgLWJNOlNSRX4kQVIgJEFSX0ZMQUdTICRsaWIgJG91dHB1dF9vYmpkaXIvJHNvbmFtZScKKyAgICAgICMgTm90ZTogdGhpcyBsaW5rZXIgaGFyZGNvZGVzIHRoZSBkaXJlY3RvcmllcyBpbiBMSUJQQVRIIGlmIHRoZXJlCisgICAgICAjIGFyZSBubyBkaXJlY3RvcmllcyBzcGVjaWZpZWQgYnkgLUwuCisgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAteiAiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIjsgdGhlbgorCSMgTmVpdGhlciBkaXJlY3QgaGFyZGNvZGluZyBub3Igc3RhdGljIGxpbmtpbmcgaXMgc3VwcG9ydGVkIHdpdGggYQorCSMgYnJva2VuIGNvbGxlY3QyLgorCWhhcmRjb2RlX2RpcmVjdD11bnN1cHBvcnRlZAorICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhaXhbNC05XSopCisgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSMgT24gSUE2NCwgdGhlIGxpbmtlciBkb2VzIHJ1biB0aW1lIGxpbmtpbmcgYnkgZGVmYXVsdCwgc28gd2UgZG9uJ3QKKwkjIGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KKwlhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCisJZXhwX3N5bV9mbGFnPSctQmV4cG9ydCcKKwlub19lbnRyeV9mbGFnPSIiCisgICAgICBlbHNlCisJIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gd2UgZG9uJ3Qgd2FudCB0aGUgIi1DIiBvcHRpb24uCisJIyAtQyBtZWFucyBkZW1hbmdsZSB0byBBSVggbm0sIGJ1dCBtZWFucyBkb24ndCBkZW1hbmdsZSB3aXRoIEdOVSBubQorCSMgQWxzbywgQUlYIG5tIHRyZWF0cyB3ZWFrIGRlZmluZWQgc3ltYm9scyBsaWtlIG90aGVyIGdsb2JhbAorCSMgZGVmaW5lZCBzeW1ib2xzLCB3aGVyZWFzIEdOVSBubSBtYXJrcyB0aGVtIGFzICJXIi4KKwlpZiAkTk0gLVYgMj4mMSB8ICRHUkVQICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCisJICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gLUJwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSB8fCAoXCQgMiA9PSAiVyIpKSAmJiAoc3Vic3RyKFwkIDMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFwkIDMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCisJZWxzZQorCSAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NIC1CQ3BnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJCAyID09ICJUIikgfHwgKFwkIDIgPT0gIkQiKSB8fCAoXCQgMiA9PSAiQiIpKSAmJiAoc3Vic3RyKFwkIDMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFwkIDMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCisJZmkKKwlhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCisKKwkjIFRlc3QgaWYgd2UgYXJlIHRyeWluZyB0byB1c2UgcnVuIHRpbWUgbGlua2luZyBvciBub3JtYWwKKwkjIEFJWCBzdHlsZSBsaW5raW5nLiBJZiAtYnJ0bCBpcyBzb21ld2hlcmUgaW4gTERGTEFHUywgd2UKKwkjIG5lZWQgdG8gZG8gcnVudGltZSBsaW5raW5nLgorCWNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMjNdfGFpeDQuWzIzXS4qfGFpeFs1LTldKikKKwkgIGZvciBsZF9mbGFnIGluICRMREZMQUdTOyBkbworCSAgaWYgKHRlc3QgJGxkX2ZsYWcgPSAiLWJydGwiIHx8IHRlc3QgJGxkX2ZsYWcgPSAiLVdsLC1icnRsIik7IHRoZW4KKwkgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKKwkgICAgYnJlYWsKKwkgIGZpCisJICBkb25lCisJICA7OworCWVzYWMKKworCWV4cF9zeW1fZmxhZz0nLWJleHBvcnQnCisJbm9fZW50cnlfZmxhZz0nLWJub2VudHJ5JworICAgICAgZmkKKworICAgICAgIyBXaGVuIGxhcmdlIGV4ZWN1dGFibGVzIG9yIHNoYXJlZCBvYmplY3RzIGFyZSBidWlsdCwgQUlYIGxkIGNhbgorICAgICAgIyBoYXZlIHByb2JsZW1zIGNyZWF0aW5nIHRoZSB0YWJsZSBvZiBjb250ZW50cy4gIElmIGxpbmtpbmcgYSBsaWJyYXJ5CisgICAgICAjIG9yIHByb2dyYW0gcmVzdWx0cyBpbiAiZXJyb3IgVE9DIG92ZXJmbG93IiBhZGQgLW1taW5pbWFsLXRvYyB0bworICAgICAgIyBDWFhGTEFHUy9DRkxBR1MgZm9yIGcrKy9nY2MuICBJbiB0aGUgY2FzZXMgd2hlcmUgdGhhdCBpcyBub3QKKyAgICAgICMgZW5vdWdoIHRvIGZpeCB0aGUgcHJvYmxlbSwgYWRkIC1XbCwtYmJpZ3RvYyB0byBMREZMQUdTLgorCisgICAgICBhcmNoaXZlX2NtZHM9JycKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT15ZXMKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JzonCisgICAgICBsaW5rX2FsbF9kZXBsaWJzPXllcworICAgICAgZmlsZV9saXN0X3NwZWM9JyR7d2x9LWYsJworCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCWNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMDEyXXxhaXg0LlswMTJdLiopCisJIyBXZSBvbmx5IHdhbnQgdG8gZG8gdGhpcyBvbiBBSVggNC4yIGFuZCBsb3dlciwgdGhlIGNoZWNrCisJIyBiZWxvdyBmb3IgYnJva2VuIGNvbGxlY3QyIGRvZXNuJ3Qgd29yayB1bmRlciA0LjMrCisJICBjb2xsZWN0Mm5hbWU9YCR7Q0N9IC1wcmludC1wcm9nLW5hbWU9Y29sbGVjdDJgCisJICBpZiB0ZXN0IC1mICIkY29sbGVjdDJuYW1lIiAmJgorCSAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgJEdSRVAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCisJICB0aGVuCisJICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKKwkgIDoKKwkgIGVsc2UKKwkgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKKwkgIGhhcmRjb2RlX2RpcmVjdD11bnN1cHBvcnRlZAorCSAgIyBJdCBmYWlscyB0byBmaW5kIHVuaW5zdGFsbGVkIGxpYnJhcmllcyB3aGVuIHRoZSB1bmluc3RhbGxlZAorCSAgIyBwYXRoIGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGxpYnBhdGguICBTZXR0aW5nIGhhcmRjb2RlX21pbnVzX0wKKwkgICMgdG8gdW5zdXBwb3J0ZWQgZm9yY2VzIHJlbGlua2luZworCSAgaGFyZGNvZGVfbWludXNfTD15ZXMKKwkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKwkgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9CisJICBmaQorCSAgOzsKKwllc2FjCisJc2hhcmVkX2ZsYWc9Jy1zaGFyZWQnCisJaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisJICBzaGFyZWRfZmxhZz0iJHNoYXJlZF9mbGFnICInJHt3bH0tRycKKwlmaQorICAgICAgZWxzZQorCSMgbm90IHVzaW5nIGdjYworCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBWaXN1YWxBZ2UgQysrLCBWZXJzaW9uIDUuNSBmb3IgQUlYIDVMIGZvciBJQS02NCwgQmV0YSAzIFJlbGVhc2UKKwkjIGNob2tlcyBvbiAtV2wsLUcuIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBjb3JyZWN0OgorCSAgc2hhcmVkX2ZsYWc9Jy1HJworCWVsc2UKKwkgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorCSAgICBzaGFyZWRfZmxhZz0nJHt3bH0tRycKKwkgIGVsc2UKKwkgICAgc2hhcmVkX2ZsYWc9JyR7d2x9LWJNOlNSRScKKwkgIGZpCisJZmkKKyAgICAgIGZpCisKKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tYmV4cGFsbCcKKyAgICAgICMgSXQgc2VlbXMgdGhhdCAtYmV4cGFsbCBkb2VzIG5vdCBleHBvcnQgc3ltYm9scyBiZWdpbm5pbmcgd2l0aAorICAgICAgIyB1bmRlcnNjb3JlIChfKSwgc28gaXQgaXMgYmV0dGVyIHRvIGdlbmVyYXRlIGEgbGlzdCBvZiBzeW1ib2xzIHRvIGV4cG9ydC4KKyAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKKyAgICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorCSMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1bnRpbWUgbG9hZGluZyBmbGFncyAoLWJydGwpLAorCSMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKwlhbGxvd191bmRlZmluZWRfZmxhZz0nLWJlcm9rJworICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAgICAgICAgIyBlbXB0eSBleGVjdXRhYmxlLgorICAgICAgICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iID0gc2V0OyB0aGVuCisgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorZWxzZQorICBpZiAke2x0X2N2X2FpeF9saWJwYXRoXys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgIGx0X2FpeF9saWJwYXRoX3NlZD0nCisgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisJICAvXjAvIHsKKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworCSAgICAgIHAKKwkgIH0KKyAgICAgIH0nCisgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorICAgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKyAgZmkKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorICAgIGx0X2N2X2FpeF9saWJwYXRoXz0iL3Vzci9saWI6L2xpYiIKKyAgZmkKKworZmkKKworICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfCitmaQorCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGZ1bmNfZWNob19hbGwgIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCisgICAgICBlbHNlCisJaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LVIgJGxpYmRpcjovdXNyL2xpYjovbGliJworCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9Ii16IG5vZGVmcyIKKwkgIGFyY2hpdmVfZXhwc3ltX2NtZHM9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzICR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30gJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMiCisJZWxzZQorCSAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKwkgIyBlbXB0eSBleGVjdXRhYmxlLgorCSBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iID0gc2V0OyB0aGVuCisgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorZWxzZQorICBpZiAke2x0X2N2X2FpeF9saWJwYXRoXys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgIGx0X2FpeF9saWJwYXRoX3NlZD0nCisgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisJICAvXjAvIHsKKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworCSAgICAgIHAKKwkgIH0KKyAgICAgIH0nCisgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorICAgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKyAgZmkKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorICAgIGx0X2N2X2FpeF9saWJwYXRoXz0iL3Vzci9saWI6L2xpYiIKKyAgZmkKKworZmkKKworICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfCitmaQorCisJIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisJICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorCSAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorCSAgbm9fdW5kZWZpbmVkX2ZsYWc9JyAke3dsfS1iZXJub3RvaycKKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnPScgJHt3bH0tYmVyb2snCisJICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisJICAgICMgV2Ugb25seSB1c2UgdGhpcyBjb2RlIGZvciBHTlUgbGRzIHRoYXQgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUuCisJICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScke3dsfS0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIGVsc2UKKwkgICAgIyBFeHBvcnRlZCBzeW1ib2xzIGNhbiBiZSBwdWxsZWQgaW50byBzaGFyZWQgb2JqZWN0cyBmcm9tIGFyY2hpdmVzCisJICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSckY29udmVuaWVuY2UnCisJICBmaQorCSAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9eWVzCisJICAjIFRoaXMgaXMgc2ltaWxhciB0byBob3cgQUlYIHRyYWRpdGlvbmFsbHkgYnVpbGRzIGl0cyBzaGFyZWQgbGlicmFyaWVzLgorCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR7d2x9LWJub2VudHJ5ICRjb21waWxlcl9mbGFncyAke3dsfS1iRTokZXhwb3J0X3N5bWJvbHMke2FsbG93X3VuZGVmaW5lZF9mbGFnfX4kQVIgJEFSX0ZMQUdTICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lJHJlbGVhc2UuYSAkb3V0cHV0X29iamRpci8kc29uYW1lJworCWZpCisgICAgICBmaQorICAgICAgOzsKKworICAgIGFtaWdhb3MqKQorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIHBvd2VycGMpCisgICAgICAgICAgICAjIHNlZSBjb21tZW50IGFib3V0IEFtaWdhT1M0IC5zbyBzdXBwb3J0CisgICAgICAgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJworICAgICAgICA7OworICAgICAgbTY4aykKKyAgICAgICAgICAgIGFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTkFNRSAkbGlibmFtZSIgPiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIExJQlJBUllfSUQgMSIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBWRVJTSU9OICRtYWpvciIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBSRVZJU0lPTiAkcmV2aXNpb24iID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEFSICRBUl9GTEFHUyAkbGliICRsaWJvYmpzfiRSQU5MSUIgJGxpYn4oY2QgJG91dHB1dF9vYmpkaXIgJiYgYTJpeGxpYnJhcnkgLTMyKScKKyAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgICAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgYnNkaVs0NV0qKQorICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPS1yZHluYW1pYworICAgICAgOzsKKworICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCisgICAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgorICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICBjbCopCisJIyBOYXRpdmUgTVNWQworCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCisJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKwlhbHdheXNfZXhwb3J0X3N5bWJvbHM9eWVzCisJZmlsZV9saXN0X3NwZWM9J0AnCisJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKwlsaWJleHQ9bGliCisJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisJc2hyZXh0X2NtZHM9Ii5kbGwiCisJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorCWFyY2hpdmVfY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtZGxsfmxpbmtuYW1lcz0nCisJYXJjaGl2ZV9leHBzeW1fY21kcz0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKwkgICAgc2VkIC1uIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgLWUgJzFcXFwhcCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKwkgIGVsc2UKKwkgICAgc2VkIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKwkgIGZpfgorCSAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgorCSAgbGlua25hbWVzPScKKwkjIFRoZSBsaW5rZXIgd2lsbCBub3QgYXV0b21hdGljYWxseSBidWlsZCBhIHN0YXRpYyBsaWIgaWYgd2UgYnVpbGQgYSBETEwuCisJIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICk9J3RydWUnCisJZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKwlleGNsdWRlX2V4cHN5bXM9J19OVUxMX0lNUE9SVF9ERVNDUklQVE9SfF9JTVBPUlRfREVTQ1JJUFRPUl8uKicKKwlleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSxEQVRBLydcJycgfCAkU0VEIC1lICdcJycvXltBSVRXXVsgXS9zLy4qWyBdLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisJIyBEb24ndCB1c2UgcmFubGliCisJb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDY0NCAkb2xkbGliJworCXBvc3RsaW5rX2NtZHM9J2x0X291dHB1dGZpbGU9IkBPVVRQVVRAIn4KKwkgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iQFRPT0xfT1VUUFVUQCJ+CisJICBjYXNlICRsdF9vdXRwdXRmaWxlIGluCisJICAgICouZXhlfCouRVhFKSA7OworCSAgICAqKQorCSAgICAgIGx0X291dHB1dGZpbGU9IiRsdF9vdXRwdXRmaWxlLmV4ZSIKKwkgICAgICBsdF90b29sX291dHB1dGZpbGU9IiRsdF90b29sX291dHB1dGZpbGUuZXhlIgorCSAgICAgIDs7CisJICBlc2FjfgorCSAgaWYgdGVzdCAiJE1BTklGRVNUX1RPT0wiICE9ICI6IiAmJiB0ZXN0IC1mICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7IHRoZW4KKwkgICAgJE1BTklGRVNUX1RPT0wgLW1hbmlmZXN0ICIkbHRfdG9vbF9vdXRwdXRmaWxlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6IiRsdF90b29sX291dHB1dGZpbGUiIHx8IGV4aXQgMTsKKwkgICAgJFJNICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7CisJICBmaScKKwk7OworICAgICAgKikKKwkjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKwlsaWJleHQ9bGliCisJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisJc2hyZXh0X2NtZHM9Ii5kbGwiCisJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorCWFyY2hpdmVfY21kcz0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCisJIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KKwlvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSd0cnVlJworCSMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCisJb2xkX2FyY2hpdmVfY21kcz0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJworCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorCisKKyAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9bm8KKyAgaGFyZGNvZGVfZGlyZWN0PW5vCisgIGhhcmRjb2RlX2F1dG9tYXRpYz15ZXMKKyAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj11bnN1cHBvcnRlZAorICBpZiB0ZXN0ICIkbHRfY3ZfbGRfZm9yY2VfbG9hZCIgPSAieWVzIjsgdGhlbgorICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSdgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UgJHt3bH0tZm9yY2VfbG9hZCwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCcKKworICBlbHNlCisgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JycKKyAgZmkKKyAgbGlua19hbGxfZGVwbGlicz15ZXMKKyAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9IiRfbHRfZGFyX2FsbG93X3VuZGVmaW5lZCIKKyAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgaWZvcnQqKSBfbHRfZGFyX2Nhbl9zaGFyZWQ9eWVzIDs7CisgICAgICopIF9sdF9kYXJfY2FuX3NoYXJlZD0kR0NDIDs7CisgIGVzYWMKKyAgaWYgdGVzdCAiJF9sdF9kYXJfY2FuX3NoYXJlZCIgPSAieWVzIjsgdGhlbgorICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPWZ1bmNfZWNob19hbGwKKyAgICBhcmNoaXZlX2NtZHM9IlwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICRfbHRfZGFyX3NpbmdsZV9tb2Qke19sdF9kc3ltdXRpbH0iCisgICAgbW9kdWxlX2NtZHM9IlwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyR7X2x0X2RzeW11dGlsfSIKKyAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSJzZWQgJ3MsXixfLCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICR7X2x0X2Rhcl9zaW5nbGVfbW9kfSR7X2x0X2Rhcl9leHBvcnRfc3ltc30ke19sdF9kc3ltdXRpbH0iCisgICAgbW9kdWxlX2V4cHN5bV9jbWRzPSJzZWQgLWUgJ3MsXixfLCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltflwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyR7X2x0X2Rhcl9leHBvcnRfc3ltc30ke19sdF9kc3ltdXRpbH0iCisKKyAgZWxzZQorICBsZF9zaGxpYnM9bm8KKyAgZmkKKworICAgICAgOzsKKworICAgIGRndXgqKQorICAgICAgYXJjaGl2ZV9jbWRzPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICA7OworCisgICAgIyBGcmVlQlNEIDIuMi5bMDEyXSBhbGxvd3MgdXMgdG8gaW5jbHVkZSBjKytydDAubyB0byBnZXQgQysrIGNvbnN0cnVjdG9yCisgICAgIyBzdXBwb3J0LiAgRnV0dXJlIHZlcnNpb25zIGRvIHRoaXMgYXV0b21hdGljYWxseSwgYnV0IGFuIGV4cGxpY2l0IGMrK3J0MC5vCisgICAgIyBkb2VzIG5vdCBicmVhayBhbnl0aGluZywgYW5kIGhlbHBzIHNpZ25pZmljYW50bHkgKGF0IHRoZSBjb3N0IG9mIGEgbGl0dGxlCisgICAgIyBleHRyYSBzcGFjZSkuCisgICAgZnJlZWJzZDIuMiopCisgICAgICBhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgL3Vzci9saWIvYysrcnQwLm8nCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICA7OworCisgICAgIyBVbmZvcnR1bmF0ZWx5LCBvbGRlciB2ZXJzaW9ucyBvZiBGcmVlQlNEIDIgZG8gbm90IGhhdmUgdGhpcyBmZWF0dXJlLgorICAgIGZyZWVic2QyLiopCisgICAgICBhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgOzsKKworICAgICMgRnJlZUJTRCAzIGFuZCBncmVhdGVyIHVzZXMgZ2NjIC1zaGFyZWQgdG8gZG8gc2hhcmVkIGxpYnJhcmllcy4KKyAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIDs7CisKKyAgICBocHV4OSopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICBlbHNlCisJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgIGZpCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfStiICR7d2x9JGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworCisgICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1FJworICAgICAgOzsKKworICAgIGhwdXgxMCopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCWFyY2hpdmVfY21kcz0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfStiICR7d2x9JGxpYmRpcicKKwloYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKwloYXJkY29kZV9kaXJlY3Q9eWVzCisJaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPXllcworCWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tRScKKwkjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorCSMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCWhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICBmaQorICAgICAgOzsKKworICAgIGhwdXgxMSopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwljYXNlICRob3N0X2NwdSBpbgorCWhwcGEqNjQqKQorCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJaWE2NCopCisJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJKikKKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCWVzYWMKKyAgICAgIGVsc2UKKwljYXNlICRob3N0X2NwdSBpbgorCWhwcGEqNjQqKQorCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCWlhNjQqKQorCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCSopCisKKwkgICMgT2xkZXIgdmVyc2lvbnMgb2YgdGhlIDExLjAwIGNvbXBpbGVyIGRvIG5vdCB1bmRlcnN0YW5kIC1iIHlldAorCSAgIyAoSFA5MjQ1My0wMSBBLjExLjAxLjIwIGRvZXNuJ3QsIEhQOTI0NTMtMDEgQi4xMS5YLjM1MTc1LTM1MTc2LkdQIGRvZXMpCisJICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRDQyB1bmRlcnN0YW5kcyAtYiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAkQ0MgdW5kZXJzdGFuZHMgLWIuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfcHJvZ19jb21waWxlcl9fYis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3Byb2dfY29tcGlsZXJfX2I9bm8KKyAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisgICBMREZMQUdTPSIkTERGTEFHUyAtYiIKKyAgIGVjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgaWYgKGV2YWwgJGFjX2xpbmsgMj5jb25mdGVzdC5lcnIpICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgICAgICMgVGhlIGxpbmtlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKKyAgICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgICAjIEFwcGVuZCBhbnkgZXJyb3JzIHRvIHRoZSBjb25maWcubG9nLgorICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQorICAgICAgICRFQ0hPICIkX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPiBjb25mdGVzdC5leHAKKyAgICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKKyAgICAgICBpZiBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9fYj15ZXMKKyAgICAgICBmaQorICAgICBlbHNlCisgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9fYj15ZXMKKyAgICAgZmkKKyAgIGZpCisgICAkUk0gLXIgY29uZnRlc3QqCisgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX19iIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9fYiIgPiY2OyB9CisKK2lmIHRlc3QgeCIkbHRfY3ZfcHJvZ19jb21waWxlcl9fYiIgPSB4eWVzOyB0aGVuCisgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKK2Vsc2UKKyAgICBhcmNoaXZlX2NtZHM9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCitmaQorCisJICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfStiICR7d2x9JGxpYmRpcicKKwloYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKworCWNhc2UgJGhvc3RfY3B1IGluCisJaHBwYSo2NCp8aWE2NCopCisJICBoYXJkY29kZV9kaXJlY3Q9bm8KKwkgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKwkgIDs7CisJKikKKwkgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKwkgIGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT15ZXMKKwkgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tRScKKworCSAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKKwkgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCSAgaGFyZGNvZGVfbWludXNfTD15ZXMKKwkgIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkjIFRyeSB0byB1c2UgdGhlIC1leHBvcnRlZF9zeW1ib2wgbGQgb3B0aW9uLCBpZiBpdCBkb2VzIG5vdAorCSMgd29yaywgYXNzdW1lIHRoYXQgLWV4cG9ydHNfZmlsZSBkb2VzIG5vdCB3b3JrIGVpdGhlciBhbmQKKwkjIGltcGxpY2l0bHkgZXhwb3J0IGFsbCBzeW1ib2xzLgorCSMgVGhpcyBzaG91bGQgYmUgdGhlIHNhbWUgZm9yIGFsbCBsYW5ndWFnZXMsIHNvIG5vIHBlci10YWcgY2FjaGUgdmFyaWFibGUuCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSAkaG9zdF9vcyBsaW5rZXIgYWNjZXB0cyAtZXhwb3J0ZWRfc3ltYm9sIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRob3N0X29zIGxpbmtlciBhY2NlcHRzIC1leHBvcnRlZF9zeW1ib2wuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorCSAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKwkgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCitpbnQgZm9vICh2b2lkKSB7IHJldHVybiAwOyB9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9eWVzCitlbHNlCisgIGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID4mNjsgfQorCWlmIHRlc3QgIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPSB5ZXM7IHRoZW4KKyAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCWZpCisgICAgICBlbHNlCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLWV4cG9ydHNfZmlsZSAkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGZpCisgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sYz0nbm8nCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgIGluaGVyaXRfcnBhdGg9eWVzCisgICAgICBsaW5rX2FsbF9kZXBsaWJzPXllcworICAgICAgOzsKKworICAgIG5ldGJzZCopCisgICAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorCWFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycgICMgYS5vdXQKKyAgICAgIGVsc2UKKwlhcmNoaXZlX2NtZHM9JyRMRCAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycgICAgICAjIEVMRgorICAgICAgZmkKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIDs7CisKKyAgICBuZXdzb3M2KQorICAgICAgYXJjaGl2ZV9jbWRzPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIDs7CisKKyAgICAqbnRvKiB8ICpxbngqKQorICAgICAgOzsKKworICAgIG9wZW5ic2QqKQorICAgICAgaWYgdGVzdCAtZiAvdXNyL2xpYmV4ZWMvbGQuc287IHRoZW4KKwloYXJkY29kZV9kaXJlY3Q9eWVzCisJaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworCWhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT15ZXMKKwlpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scycKKwkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUUnCisJZWxzZQorCSAgY2FzZSAkaG9zdF9vcyBpbgorCSAgIG9wZW5ic2RbMDFdLiogfCBvcGVuYnNkMi5bMC03XSB8IG9wZW5ic2QyLlswLTddLiopCisJICAgICBhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisJICAgICA7OworCSAgICopCisJICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJICAgICA7OworCSAgZXNhYworCWZpCisgICAgICBlbHNlCisJbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIG9zMiopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKyAgICAgIGFyY2hpdmVfY21kcz0nJEVDSE8gIkxJQlJBUlkgJGxpYm5hbWUgSU5JVElOU1RBTkNFIiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kRUNITyAiREVTQ1JJUFRJT04gXCIkbGlibmFtZVwiIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+ZWNobyBEQVRBID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn5lY2hvICIgU0lOR0xFIE5PTlNIQVJFRCIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfmVjaG8gRVhQT1JUUyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+ZW14ZXhwICRsaWJvYmpzID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kQ0MgLVpkbGwgLVpjcnRkbGwgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJworICAgICAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0nZW14aW1wIC1vICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmEgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJworICAgICAgOzsKKworICAgIG9zZjMqKQorICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwlhbGxvd191bmRlZmluZWRfZmxhZz0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworICAgICAgZWxzZQorCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAgICAgIGZpCisgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sYz0nbm8nCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgIDs7CisKKyAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBlbHNlCisJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2ZvciBpIGluIGBjYXQgJGV4cG9ydF9zeW1ib2xzYDsgZG8gcHJpbnRmICIlcyAlc1xcbiIgLWV4cG9ydGVkX3N5bWJvbCAiXCRpIiA+PiAkbGliLmV4cDsgZG9uZTsgcHJpbnRmICIlc1xcbiIgIi1oaWRkZW4iPj4gJGxpYi5leHB+CisJJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAke3dsfS1pbnB1dCAke3dsfSRsaWIuZXhwICRjb21waWxlcl9mbGFncyAkbGlib2JqcyAkZGVwbGlicyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYn4kUk0gJGxpYi5leHAnCisKKwkjIEJvdGggYyBhbmQgY3h4IGNvbXBpbGVyIHN1cHBvcnQgLXJwYXRoIGRpcmVjdGx5CisJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLXJwYXRoICRsaWJkaXInCisgICAgICBmaQorICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9J25vJworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICA7OworCisgICAgc29sYXJpcyopCisgICAgICBub191bmRlZmluZWRfZmxhZz0nIC16IGRlZnMnCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCXdsYXJjPScke3dsfScKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKyAgICAgIGVsc2UKKwljYXNlIGAkQ0MgLVYgMj4mMWAgaW4KKwkqIkNvbXBpbGVycyA1LjAiKikKKwkgIHdsYXJjPScnCisJICBhcmNoaXZlX2NtZHM9JyRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorCSAgJExEIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLU0gJGxpYi5leHAgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworCSAgOzsKKwkqKQorCSAgd2xhcmM9JyR7d2x9JworCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorCSAgJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLU0gJGxpYi5leHAgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisJICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICBjYXNlICRob3N0X29zIGluCisgICAgICBzb2xhcmlzMi5bMC01XSB8IHNvbGFyaXMyLlswLTVdLiopIDs7CisgICAgICAqKQorCSMgVGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGNvbWJpbmUgYW5kIHJlb3JkZXIgbGlua2VyIG9wdGlvbnMsCisJIyBidXQgdW5kZXJzdGFuZHMgYC16IGxpbmtlcl9mbGFnJy4gIEdDQyBkaXNjYXJkcyBpdCB3aXRob3V0IGAkd2wnLAorCSMgYnV0IGlzIGNhcmVmdWwgZW5vdWdoIG5vdCB0byByZW9yZGVyLgorCSMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCisJaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScke3dsfS16ICR7d2x9YWxsZXh0cmFjdCRjb252ZW5pZW5jZSAke3dsfS16ICR7d2x9ZGVmYXVsdGV4dHJhY3QnCisJZWxzZQorCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9Jy16IGFsbGV4dHJhY3QkY29udmVuaWVuY2UgLXogZGVmYXVsdGV4dHJhY3QnCisJZmkKKwk7OworICAgICAgZXNhYworICAgICAgbGlua19hbGxfZGVwbGlicz15ZXMKKyAgICAgIDs7CisKKyAgICBzdW5vczQqKQorICAgICAgaWYgdGVzdCAieCRob3N0X3ZlbmRvciIgPSB4c2VxdWVudDsgdGhlbgorCSMgVXNlICRDQyB0byBsaW5rIHVuZGVyIHNlcXVlbnQsIGJlY2F1c2UgaXQgdGhyb3dzIGluIHNvbWUgZXh0cmEgLm8KKwkjIGZpbGVzIHRoYXQgbWFrZSAuaW5pdCBhbmQgLmZpbmkgc2VjdGlvbnMgd29yay4KKwlhcmNoaXZlX2NtZHM9JyRDQyAtRyAke3dsfS1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBlbHNlCisJYXJjaGl2ZV9jbWRzPSckTEQgLWFzc2VydCBwdXJlLXRleHQgLUJzdGF0aWMgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgZmkKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICA7OworCisgICAgc3lzdjQpCisgICAgICBjYXNlICRob3N0X3ZlbmRvciBpbgorCXNuaSkKKwkgIGFyY2hpdmVfY21kcz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgaGFyZGNvZGVfZGlyZWN0PXllcyAjIGlzIHRoaXMgcmVhbGx5IHRydWU/Pz8KKwk7OworCXNpZW1lbnMpCisJICAjIyBMRCBpcyBsZCBpdCBtYWtlcyBhIFBMQU1MSUIKKwkgICMjIENDIGp1c3QgbWFrZXMgYSBHcm9zc01vZHVsZS4KKwkgIGFyY2hpdmVfY21kcz0nJExEIC1HIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgIHJlbG9hZF9jbWRzPSckQ0MgLXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKwkgIGhhcmRjb2RlX2RpcmVjdD1ubworICAgICAgICA7OworCW1vdG9yb2xhKQorCSAgYXJjaGl2ZV9jbWRzPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICBoYXJkY29kZV9kaXJlY3Q9bm8gI01vdG9yb2xhIG1hbnVhbCBzYXlzIHllcywgYnV0IG15IHRlc3RzIHNheSB0aGV5IGxpZQorCTs7CisgICAgICBlc2FjCisgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICA7OworCisgICAgc3lzdjQuMyopCisgICAgICBhcmNoaXZlX2NtZHM9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nLUJleHBvcnQnCisgICAgICA7OworCisgICAgc3lzdjQqTVAqKQorICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgorCWFyY2hpdmVfY21kcz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCWhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKwlydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorCWhhcmRjb2RlX3J1bnBhdGhfdmFyPXllcworCWxkX3NobGlicz15ZXMKKyAgICAgIGZpCisgICAgICA7OworCisgICAgc3lzdjQqdXcyKiB8IHN5c3Y1T3BlblVOSVgqIHwgc3lzdjVVbml4V2FyZTcuWzAxXS5bMTBdKiB8IHVuaXh3YXJlNyogfCBzY28zLjJ2NS4wLlswMjRdKikKKyAgICAgIG5vX3VuZGVmaW5lZF9mbGFnPScke3dsfS16LHRleHQnCisgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sYz1ubworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGVsc2UKKwlhcmNoaXZlX2NtZHM9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKKyAgICAgICMgTm90ZTogV2UgY2FuIE5PVCB1c2UgLXogZGVmcyBhcyB3ZSBtaWdodCBkZXNpcmUsIGJlY2F1c2Ugd2UgZG8gbm90CisgICAgICAjIGxpbmsgd2l0aCAtbGMsIGFuZCB0aGF0IHdvdWxkIGNhdXNlIGFueSBzeW1ib2xzIHVzZWQgZnJvbSBsaWJjIHRvCisgICAgICAjIGFsd2F5cyBiZSB1bnJlc29sdmVkLCB3aGljaCBtZWFucyBqdXN0IGFib3V0IG5vIGxpYnJhcnkgd291bGQKKyAgICAgICMgZXZlciBsaW5rIGNvcnJlY3RseS4gIElmIHdlJ3JlIG5vdCB1c2luZyBHTlUgbGQgd2UgdXNlIC16IHRleHQKKyAgICAgICMgdGhvdWdoLCB3aGljaCBkb2VzIGNhdGNoIHNvbWUgYmFkIHN5bWJvbHMgYnV0IGlzbid0IGFzIGhlYXZ5LWhhbmRlZAorICAgICAgIyBhcyAteiBkZWZzLgorICAgICAgbm9fdW5kZWZpbmVkX2ZsYWc9JyR7d2x9LXosdGV4dCcKKyAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPScke3dsfS16LG5vZGVmcycKKyAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjPW5vCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1SLCRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSc6JworICAgICAgbGlua19hbGxfZGVwbGlicz15ZXMKKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tQmV4cG9ydCcKKyAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKKworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBlbHNlCisJYXJjaGl2ZV9jbWRzPSckQ0MgLUcgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBmaQorICAgICAgOzsKKworICAgIHV0czQqKQorICAgICAgYXJjaGl2ZV9jbWRzPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICA7OworCisgICAgKikKKyAgICAgIGxkX3NobGlicz1ubworICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBpZiB0ZXN0IHgkaG9zdF92ZW5kb3IgPSB4c25pOyB0aGVuCisgICAgICBjYXNlICRob3N0IGluCisgICAgICBzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyogfCBzeXN2NSopCisJZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1CbGFyZ2VkeW5zeW0nCisJOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICBmaQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGxkX3NobGlicyIgPiY1CiskYXNfZWNobyAiJGxkX3NobGlicyIgPiY2OyB9Cit0ZXN0ICIkbGRfc2hsaWJzIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KKword2l0aF9nbnVfbGQ9JHdpdGhfZ251X2xkCisKKworCisKKworCisKKworCisKKworCisKKworCisjCisjIERvIHdlIG5lZWQgdG8gZXhwbGljaXRseSBsaW5rIGxpYmM/CisjCitjYXNlICJ4JGFyY2hpdmVfY21kc19uZWVkX2xjIiBpbgoreHx4eWVzKQorICAjIEFzc3VtZSAtbGMgc2hvdWxkIGJlIGFkZGVkCisgIGFyY2hpdmVfY21kc19uZWVkX2xjPXllcworCisgIGlmIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIGNhc2UgJGFyY2hpdmVfY21kcyBpbgorICAgIConficqKQorICAgICAgIyBGSVhNRTogd2UgbWF5IGhhdmUgdG8gZGVhbCB3aXRoIG11bHRpLWNvbW1hbmQgc2VxdWVuY2VzLgorICAgICAgOzsKKyAgICAnJENDICcqKQorICAgICAgIyBUZXN0IHdoZXRoZXIgdGhlIGNvbXBpbGVyIGltcGxpY2l0bHkgbGlua3Mgd2l0aCAtbGMgc2luY2Ugb24gc29tZQorICAgICAgIyBzeXN0ZW1zLCAtbGdjYyBoYXMgdG8gY29tZSBiZWZvcmUgLWxjLiBJZiBnY2MgYWxyZWFkeSBwYXNzZXMgLWxjCisgICAgICAjIHRvIGxkLCBkb24ndCBhZGQgLWxjIGJlZm9yZSAtbGdjYy4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbi4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sYys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgICRSTSBjb25mdGVzdCoKKwllY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKworCWlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gMj5jb25mdGVzdC5lcnI7IHRoZW4KKwkgIHNvbmFtZT1jb25mdGVzdAorCSAgbGliPWNvbmZ0ZXN0CisJICBsaWJvYmpzPWNvbmZ0ZXN0LiRhY19vYmpleHQKKwkgIGRlcGxpYnM9CisJICB3bD0kbHRfcHJvZ19jb21waWxlcl93bAorCSAgcGljX2ZsYWc9JGx0X3Byb2dfY29tcGlsZXJfcGljCisJICBjb21waWxlcl9mbGFncz0tdgorCSAgbGlua2VyX2ZsYWdzPS12CisJICB2ZXJzdHJpbmc9CisJICBvdXRwdXRfb2JqZGlyPS4KKwkgIGxpYm5hbWU9Y29uZnRlc3QKKwkgIGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGFsbG93X3VuZGVmaW5lZF9mbGFnCisJICBhbGxvd191bmRlZmluZWRfZmxhZz0KKwkgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhcmNoaXZlX2NtZHMgMlw+XCYxIFx8ICRHUkVQIFwiIC1sYyBcIiBcPi9kZXYvbnVsbCAyXD5cJjFcIiI7IH0gPiY1CisgIChldmFsICRhcmNoaXZlX2NtZHMgMlw+XCYxIFx8ICRHUkVQIFwiIC1sYyBcIiBcPi9kZXYvbnVsbCAyXD5cJjEpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CisJICB0aGVuCisJICAgIGx0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjPW5vCisJICBlbHNlCisJICAgIGx0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjPXllcworCSAgZmkKKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnPSRsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnCisJZWxzZQorCSAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1CisJZmkKKwkkUk0gY29uZnRlc3QqCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGMiID4mNjsgfQorICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9JGx0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjCisgICAgICA7OworICAgIGVzYWMKKyAgZmkKKyAgOzsKK2VzYWMKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcy4uLiAiID4mNjsgfQorCitpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICBjYXNlICRob3N0X29zIGluCisgICAgZGFyd2luKikgbHRfYXdrX2FyZz0iL15saWJyYXJpZXM6LywvTFIvIiA7OworICAgICopIGx0X2F3a19hcmc9Ii9ebGlicmFyaWVzOi8iIDs7CisgIGVzYWMKKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIG1pbmd3KiB8IGNlZ2NjKikgbHRfc2VkX3N0cmlwX2VxPSJzLD1cKFtBLVphLXpdOlwpLFwxLGciIDs7CisgICAgKikgbHRfc2VkX3N0cmlwX2VxPSJzLD0vLC8sZyIgOzsKKyAgZXNhYworICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgYXdrICRsdF9hd2tfYXJnIHwgJFNFRCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAkbHRfc2VkX3N0cmlwX2VxYAorICBjYXNlICRsdF9zZWFyY2hfcGF0aF9zcGVjIGluCisgICpcOyopCisgICAgIyBpZiB0aGUgcGF0aCBjb250YWlucyAiOyIgdGhlbiB3ZSBhc3N1bWUgaXQgdG8gYmUgdGhlIHNlcGFyYXRvcgorICAgICMgb3RoZXJ3aXNlIGRlZmF1bHQgdG8gdGhlIHN0YW5kYXJkIHBhdGggc2VwYXJhdG9yIChpLmUuICI6IikgLSBpdCBpcworICAgICMgYXNzdW1lZCB0aGF0IG5vIHBhcnQgb2YgYSBub3JtYWwgcGF0aG5hbWUgY29udGFpbnMgIjsiIGJ1dCB0aGF0IHNob3VsZAorICAgICMgb2theSBpbiB0aGUgcmVhbCB3b3JsZCB3aGVyZSAiOyIgaW4gZGlycGF0aHMgaXMgaXRzZWxmIHByb2JsZW1hdGljLgorICAgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICdzLzsvIC9nJ2AKKyAgICA7OworICAqKQorICAgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorICAgIDs7CisgIGVzYWMKKyAgIyBPaywgbm93IHdlIGhhdmUgdGhlIHBhdGgsIHNlcGFyYXRlZCBieSBzcGFjZXMsIHdlIGNhbiBzdGVwIHRocm91Z2ggaXQKKyAgIyBhbmQgYWRkIG11bHRpbGliIGRpciBpZiBuZWNlc3NhcnkuCisgIGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPQorICBsdF9tdWx0aV9vc19kaXI9YCRDQyAkQ1BQRkxBR1MgJENGTEFHUyAkTERGTEFHUyAtcHJpbnQtbXVsdGktb3MtZGlyZWN0b3J5IDI+L2Rldi9udWxsYAorICBmb3IgbHRfc3lzX3BhdGggaW4gJGx0X3NlYXJjaF9wYXRoX3NwZWM7IGRvCisgICAgaWYgdGVzdCAtZCAiJGx0X3N5c19wYXRoLyRsdF9tdWx0aV9vc19kaXIiOyB0aGVuCisgICAgICBsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjICRsdF9zeXNfcGF0aC8kbHRfbXVsdGlfb3NfZGlyIgorICAgIGVsc2UKKyAgICAgIHRlc3QgLWQgIiRsdF9zeXNfcGF0aCIgJiYgXAorCWx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMgJGx0X3N5c19wYXRoIgorICAgIGZpCisgIGRvbmUKKyAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCBhd2sgJworQkVHSU4ge1JTPSIgIjsgRlM9Ii98XG4iO30geworICBsdF9mb289IiI7CisgIGx0X2NvdW50PTA7CisgIGZvciAobHRfaSA9IE5GOyBsdF9pID4gMDsgbHRfaS0tKSB7CisgICAgaWYgKCRsdF9pICE9ICIiICYmICRsdF9pICE9ICIuIikgeworICAgICAgaWYgKCRsdF9pID09ICIuLiIpIHsKKyAgICAgICAgbHRfY291bnQrKzsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChsdF9jb3VudCA9PSAwKSB7CisgICAgICAgICAgbHRfZm9vPSIvIiAkbHRfaSBsdF9mb287CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgbHRfY291bnQtLTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorICBpZiAobHRfZm9vICE9ICIiKSB7IGx0X2ZyZXFbbHRfZm9vXSsrOyB9CisgIGlmIChsdF9mcmVxW2x0X2Zvb10gPT0gMSkgeyBwcmludCBsdF9mb287IH0KK30nYAorICAjIEFXSyBwcm9ncmFtIGFib3ZlIGVycm9uZW91c2x5IHByZXBlbmRzICcvJyB0byBDOi9kb3MvcGF0aHMKKyAgIyBmb3IgdGhlc2UgaG9zdHMuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBtaW5ndyogfCBjZWdjYyopIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfFwKKyAgICAgICRTRUQgJ3MsL1woW0EtWmEtel06XCksXDEsZydgIDs7CisgIGVzYWMKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJGx0X05MMlNQYAorZWxzZQorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCitmaQorbGlicmFyeV9uYW1lc19zcGVjPQorbGlibmFtZV9zcGVjPSdsaWIkbmFtZScKK3NvbmFtZV9zcGVjPQorc2hyZXh0X2NtZHM9Ii5zbyIKK3Bvc3RpbnN0YWxsX2NtZHM9Citwb3N0dW5pbnN0YWxsX2NtZHM9CitmaW5pc2hfY21kcz0KK2ZpbmlzaF9ldmFsPQorc2hsaWJwYXRoX3Zhcj0KK3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD11bmtub3duCit2ZXJzaW9uX3R5cGU9bm9uZQorZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgorc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIiCituZWVkX2xpYl9wcmVmaXg9dW5rbm93bgoraGFyZGNvZGVfaW50b19saWJzPW5vCisKKyMgd2hlbiB5b3Ugc2V0IG5lZWRfdmVyc2lvbiB0byBubywgbWFrZSBzdXJlIGl0IGRvZXMgbm90IGNhdXNlIC1zZXRfdmVyc2lvbgorIyBmbGFncyB0byBiZSBsZWZ0IHdpdGhvdXQgYXJndW1lbnRzCituZWVkX3ZlcnNpb249dW5rbm93bgorCitjYXNlICRob3N0X29zIGluCithaXgzKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUuYScKKyAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICisKKyAgIyBBSVggMyBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyB3ZSBhcHBlbmQgYSBtYWpvciB2ZXJzaW9uIHRvIHRoZSBuYW1lLgorICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICA7OworCithaXhbNC05XSopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgICAgIyBBSVggNSBzdXBwb3J0cyBJQTY0CisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgZWxzZQorICAgICMgV2l0aCBHQ0MgdXAgdG8gMi45NS54LCBjb2xsZWN0MiB3b3VsZCBjcmVhdGUgYW4gaW1wb3J0IGZpbGUKKyAgICAjIGZvciBkZXBlbmRlbmNlIGxpYnJhcmllcy4gIFRoZSBpbXBvcnQgZmlsZSB3b3VsZCBzdGFydCB3aXRoCisgICAgIyB0aGUgbGluZSBgIyEgLicuICBUaGlzIHdvdWxkIGNhdXNlIHRoZSBnZW5lcmF0ZWQgbGlicmFyeSB0bworICAgICMgZGVwZW5kIG9uIGAuJywgYWx3YXlzIGFuIGludmFsaWQgbGlicmFyeS4gIFRoaXMgd2FzIGZpeGVkIGluCisgICAgIyBkZXZlbG9wbWVudCBzbmFwc2hvdHMgb2YgR0NDIHByaW9yIHRvIDMuMC4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXg0IHwgYWl4NC5bMDFdIHwgYWl4NC5bMDFdLiopCisgICAgICBpZiB7IGVjaG8gJyNpZiBfX0dOVUNfXyA+IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gOTcpJworCSAgIGVjaG8gJyB5ZXMgJworCSAgIGVjaG8gJyNlbmRpZic7IH0gfCAke0NDfSAtRSAtIHwgJEdSRVAgeWVzID4gL2Rldi9udWxsOyB0aGVuCisJOgorICAgICAgZWxzZQorCWNhbl9idWlsZF9zaGFyZWQ9bm8KKyAgICAgIGZpCisgICAgICA7OworICAgIGVzYWMKKyAgICAjIEFJWCAob24gUG93ZXIqKSBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyBjdXJyZW50bHkgd2UgY2FuIG5vdCBoYXJkY29kZSBjb3JyZWN0CisgICAgIyBzb25hbWUgaW50byBleGVjdXRhYmxlLiBQcm9iYWJseSB3ZSBjYW4gYWRkIHZlcnNpb25pbmcgc3VwcG9ydCB0bworICAgICMgY29sbGVjdDIsIHNvIGFkZGl0aW9uYWwgbGlua3MgY2FuIGJlIHVzZWZ1bCBpbiBmdXR1cmUuCisgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisgICAgICAjIElmIHVzaW5nIHJ1biB0aW1lIGxpbmtpbmcgKG9uIEFJWCA0LjIgb3IgbGF0ZXIpIHVzZSBsaWI8bmFtZT4uc28KKyAgICAgICMgaW5zdGVhZCBvZiBsaWI8bmFtZT4uYSB0byBsZXQgcGVvcGxlIGtub3cgdGhhdCB0aGVzZSBhcmUgbm90CisgICAgICAjIHR5cGljYWwgQUlYIHNoYXJlZCBsaWJyYXJpZXMuCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBlbHNlCisgICAgICAjIFdlIHByZXNlcnZlIC5hIGFzIGV4dGVuc2lvbiBmb3Igc2hhcmVkIGxpYnJhcmllcyB0aHJvdWdoIEFJWDQuMgorICAgICAgIyBhbmQgbGF0ZXIgd2hlbiB3ZSBhcmUgbm90IGRvaW5nIHJ1biB0aW1lIGxpbmtpbmcuCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LmEgJGxpYm5hbWUuYScKKyAgICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgZmkKKyAgICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKKyAgZmkKKyAgOzsKKworYW1pZ2FvcyopCisgIGNhc2UgJGhvc3RfY3B1IGluCisgIHBvd2VycGMpCisgICAgIyBTaW5jZSBKdWx5IDIwMDcgQW1pZ2FPUzQgb2ZmaWNpYWxseSBzdXBwb3J0cyAuc28gbGlicmFyaWVzLgorICAgICMgV2hlbiBjb21waWxpbmcgdGhlIGV4ZWN1dGFibGUsIGFkZCAtdXNlLWR5bmxkIC1Mc29ianM6IHRvIHRoZSBjb21waWxlbGluZS4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICA7OworICBtNjhrKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuaXhsaWJyYXJ5ICRsaWJuYW1lLmEnCisgICAgIyBDcmVhdGUgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSBlbnRyaWVzIGluIC9zeXMvbGlicy4KKyAgICBmaW5pc2hfZXZhbD0nZm9yIGxpYiBpbiBgbHMgJGxpYmRpci8qLml4bGlicmFyeSAyPi9kZXYvbnVsbGA7IGRvIGxpYm5hbWU9YGZ1bmNfZWNob19hbGwgIiRsaWIiIHwgJFNFRCAnXCcncyVeLiovXChbXi9dKlwpXC5peGxpYnJhcnkkJVwxJSdcJydgOyB0ZXN0ICRSTSAvc3lzL2xpYnMvJHtsaWJuYW1lfV9peGxpYnJhcnkuYTsgJHNob3cgImNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEiOyBjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIHx8IGV4aXQgMTsgZG9uZScKKyAgICA7OworICBlc2FjCisgIDs7CisKK2Jlb3MqKQorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCisgIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICisgIDs7CisKK2JzZGlbNDVdKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvWDExL2xpYiAvdXNyL2NvbnRyaWIvbGliIC9saWIgL3Vzci9sb2NhbC9saWIiCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCisgICMgdGhlIGRlZmF1bHQgbGQuc28uY29uZiBhbHNvIGNvbnRhaW5zIC91c3IvY29udHJpYi9saWIgYW5kCisgICMgL3Vzci9YMTFSNi9saWIgKC91c3IvWDExIGlzIGEgbGluayB0byAvdXNyL1gxMVI2KSwgYnV0IGxldCB1cyBhbGxvdworICAjIGxpYnRvb2wgdG8gaGFyZC1jb2RlIHRoZXNlIGludG8gcHJvZ3JhbXMKKyAgOzsKKworY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICB2ZXJzaW9uX3R5cGU9d2luZG93cworICBzaHJleHRfY21kcz0iLmRsbCIKKyAgbmVlZF92ZXJzaW9uPW5vCisgIG5lZWRfbGliX3ByZWZpeD1ubworCisgIGNhc2UgJEdDQywkY2NfYmFzZW5hbWUgaW4KKyAgeWVzLCopCisgICAgIyBnY2MKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJworICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KKyAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCR7YmFzZV9maWxlfSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KKyAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZX4KKyAgICAgIGNobW9kIGEreCBcJGRsZGlyLyRkbG5hbWV+CisgICAgICBpZiB0ZXN0IC1uICdcJyckc3RyaXBtZSdcJycgJiYgdGVzdCAtbiAnXCcnJHN0cmlwbGliJ1wnJzsgdGhlbgorICAgICAgICBldmFsICdcJyckc3RyaXBsaWIgXCRkbGRpci8kZGxuYW1lJ1wnJyB8fCBleGl0IFwkPzsKKyAgICAgIGZpJworICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgorICAgICAgICRSTSBcJGRscGF0aCcKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgY3lnd2luKikKKyAgICAgICMgQ3lnd2luIERMTHMgdXNlICdjeWcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJworICAgICAgc29uYW1lX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9jeWcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgL3Vzci9saWIvdzMyYXBpIgorICAgICAgOzsKKyAgICBtaW5ndyogfCBjZWdjYyopCisgICAgICAjIE1pbkdXIERMTHMgdXNlIHRyYWRpdGlvbmFsICdsaWInIHByZWZpeAorICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgOzsKKyAgICBwdzMyKikKKyAgICAgICMgcHczMiBETExzIHVzZSAncHcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJworICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgOzsKKyAgICBlc2FjCisgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICA7OworCisgICosY2wqKQorICAgICMgTmF0aXZlIE1TVkMKKyAgICBsaWJuYW1lX3NwZWM9JyRuYW1lJworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0uZGxsLmxpYicKKworICAgIGNhc2UgJGJ1aWxkX29zIGluCisgICAgbWluZ3cqKQorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPQorICAgICAgbHRfc2F2ZV9pZnM9JElGUworICAgICAgSUZTPSc7JworICAgICAgZm9yIGx0X3BhdGggaW4gJExJQgorICAgICAgZG8KKyAgICAgICAgSUZTPSRsdF9zYXZlX2lmcworICAgICAgICAjIExldCBET1MgdmFyaWFibGUgZXhwYW5zaW9uIHByaW50IHRoZSBzaG9ydCA4LjMgc3R5bGUgZmlsZSBuYW1lLgorICAgICAgICBsdF9wYXRoPWBjZCAiJGx0X3BhdGgiIDI+L2Rldi9udWxsICYmIGNtZCAvL0MgImZvciAlaSBpbiAoIi4iKSBkbyBAZWNobyAlfnNpImAKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjICRsdF9wYXRoIgorICAgICAgZG9uZQorICAgICAgSUZTPSRsdF9zYXZlX2lmcworICAgICAgIyBDb252ZXJ0IHRvIE1TWVMgc3R5bGUuCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IHNlZCAtZSAnc3xcXFxcfC98ZycgLWUgJ3N8IFxcKFthLXpBLVpdXFwpOnwgL1xcMXxnJyAtZSAnc3xeIHx8J2AKKyAgICAgIDs7CisgICAgY3lnd2luKikKKyAgICAgICMgQ29udmVydCB0byB1bml4IGZvcm0sIHRoZW4gdG8gZG9zIGZvcm0sIHRoZW4gYmFjayB0byB1bml4IGZvcm0KKyAgICAgICMgYnV0IHRoaXMgdGltZSBkb3Mgc3R5bGUgKG5vIHNwYWNlcyEpIHNvIHRoYXQgdGhlIHVuaXggZm9ybSBsb29rcworICAgICAgIyBsaWtlIC9jeWdkcml2ZS9jL1BST0dSQX4xOi9jeWdkci4uLgorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRMSUIiYAorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLWRvcyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgMj4vZGV2L251bGxgCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorICAgICAgOzsKKyAgICAqKQorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkTElCIgorICAgICAgaWYgJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJEdSRVAgJztbYy16Qy1aXTovJyA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEguCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCisgICAgICBlbHNlCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKyAgICAgIGZpCisgICAgICAjIEZJWE1FOiBmaW5kIHRoZSBzaG9ydCBuYW1lIG9yIHRoZSBwYXRoIGNvbXBvbmVudHMsIGFzIHNwYWNlcyBhcmUKKyAgICAgICMgY29tbW9uLiAoZS5nLiAiUHJvZ3JhbSBGaWxlcyIgLT4gIlBST0dSQX4xIikKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KKyAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgorICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lJworICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgorICAgICAgICRSTSBcJGRscGF0aCcKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxpbmsuZXhlJworICAgIDs7CisKKyAgKikKKyAgICAjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAgIDs7CisgIGVzYWMKKyAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCisgIHNobGlicGF0aF92YXI9UEFUSAorICA7OworCitkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZHlsZCIKKyAgdmVyc2lvbl90eXBlPWRhcndpbgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0ICR7bGlibmFtZX0kc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCcKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBzaGxpYnBhdGhfdmFyPURZTERfTElCUkFSWV9QQVRICisgIHNocmV4dF9jbWRzPSdgdGVzdCAuJG1vZHVsZSA9IC55ZXMgJiYgZWNobyAuc28gfHwgZWNobyAuZHlsaWJgJworCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAvdXNyL2xvY2FsL2xpYiIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC9saWIgL3Vzci9saWInCisgIDs7CisKK2RndXgqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICA7OworCitmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICMgRHJhZ29uRmx5IGRvZXMgbm90IGhhdmUgYW91dC4gIFdoZW4vaWYgdGhleSBpbXBsZW1lbnQgYSBuZXcKKyAgIyB2ZXJzaW9uaW5nIG1lY2hhbmlzbSwgYWRqdXN0IHRoaXMuCisgIGlmIHRlc3QgLXggL3Vzci9iaW4vb2JqZm9ybWF0OyB0aGVuCisgICAgb2JqZm9ybWF0PWAvdXNyL2Jpbi9vYmpmb3JtYXRgCisgIGVsc2UKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgZnJlZWJzZFsyM10uKikgb2JqZm9ybWF0PWFvdXQgOzsKKyAgICAqKSBvYmpmb3JtYXQ9ZWxmIDs7CisgICAgZXNhYworICBmaQorICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC0kb2JqZm9ybWF0CisgIGNhc2UgJHZlcnNpb25fdHlwZSBpbgorICAgIGZyZWVic2QtZWxmKikKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgICAgbmVlZF92ZXJzaW9uPW5vCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIDs7CisgICAgZnJlZWJzZC0qKQorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisgICAgICBuZWVkX3ZlcnNpb249eWVzCisgICAgICA7OworICBlc2FjCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgZnJlZWJzZDIuKikKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgOzsKKyAgZnJlZWJzZDMuWzAxXSogfCBmcmVlYnNkZWxmMy5bMDFdKikKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIDs7CisgIGZyZWVic2QzLlsyLTldKiB8IGZyZWVic2RlbGYzLlsyLTldKiB8IFwKKyAgZnJlZWJzZDQuWzAtNV0gfCBmcmVlYnNkZWxmNC5bMC01XSB8IGZyZWVic2Q0LjEuMSB8IGZyZWVic2RlbGY0LjEuMSkKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgOzsKKyAgKikgIyBmcm9tIDQuNiBvbiwgYW5kIERyYWdvbkZseQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgOzsKKyAgZXNhYworICA7OworCitnbnUqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR7bWFqb3J9ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCitoYWlrdSopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgcnVudGltZV9sb2FkZXIiCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0ke21ham9yfSAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3Qvc3lzdGVtL2xpYicKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCitocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKyAgIyBHaXZlIGEgc29uYW1lIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1ham9yIHZlcnNpb24gc28gdGhhdCBkbGQuc2wgcmVmdXNlcyB0bworICAjIGxpbmsgYWdhaW5zdCBvdGhlciB2ZXJzaW9ucy4KKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgaWE2NCopCisgICAgc2hyZXh0X2NtZHM9Jy5zbycKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbyIKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIGlmIHRlc3QgIlgkSFBVWF9JQTY0X01PREUiID0gWDMyOyB0aGVuCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIiCisgICAgZWxzZQorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4NjQgL3Vzci9sb2NhbC9saWIvaHB1eDY0IgorICAgIGZpCisgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYworICAgIDs7CisgIGhwcGEqNjQqKQorICAgIHNocmV4dF9jbWRzPScuc2wnCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEggIyBIb3cgc2hvdWxkIHdlIGhhbmRsZSBTSExJQl9QQVRICisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9wYTIwXzY0IC91c3IvY2NzL2xpYi9wYTIwXzY0IgorICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKKyAgICA7OworICAqKQorICAgIHNocmV4dF9jbWRzPScuc2wnCisgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKKyAgICBzaGxpYnBhdGhfdmFyPVNITElCX1BBVEgKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8gIyArcyBpcyByZXF1aXJlZCB0byBlbmFibGUgU0hMSUJfUEFUSAorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgOzsKKyAgZXNhYworICAjIEhQLVVYIHJ1bnMgKnJlYWxseSogc2xvd2x5IHVubGVzcyBzaGFyZWQgbGlicmFyaWVzIGFyZSBtb2RlIDU1NSwgLi4uCisgIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDU1NSAkbGliJworICAjIG9yIGZhaWxzIG91dHJpZ2h0LCBzbyBvdmVycmlkZSBhdG9taWNhbGx5OgorICBpbnN0YWxsX292ZXJyaWRlX21vZGU9NTU1CisgIDs7CisKK2ludGVyaXhbMy05XSopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBkeW5hbWljX2xpbmtlcj0nSW50ZXJpeCAzLnggbGQuc28uMSAoUEUsIGxpa2UgRUxGKScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIG5vbnN0b3B1eCopIHZlcnNpb25fdHlwZT1ub25zdG9wdXggOzsKKyAgICAqKQorCWlmIHRlc3QgIiRsdF9jdl9wcm9nX2dudV9sZCIgPSB5ZXM7IHRoZW4KKwkJdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorCWVsc2UKKwkJdmVyc2lvbl90eXBlPWlyaXgKKwlmaSA7OworICBlc2FjCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBjYXNlICRob3N0X29zIGluCisgIGlyaXg1KiB8IG5vbnN0b3B1eCopCisgICAgbGlic3VmZj0gc2hsaWJzdWZmPQorICAgIDs7CisgICopCisgICAgY2FzZSAkTEQgaW4gIyBsaWJ0b29sLm00IHdpbGwgYWRkIG9uZSBvZiB0aGVzZSBzd2l0Y2hlcyB0byBMRAorICAgICotMzJ8KiItMzIgInwqLW1lbGYzMmJzbWlwfCoiLW1lbGYzMmJzbWlwICIpCisgICAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPTMyLWJpdDs7CisgICAgKi1uMzJ8KiItbjMyICJ8Ki1tZWxmMzJibWlwbjMyfCoiLW1lbGYzMmJtaXBuMzIgIikKKyAgICAgIGxpYnN1ZmY9MzIgc2hsaWJzdWZmPU4zMiBsaWJtYWdpYz1OMzI7OworICAgICotNjR8KiItNjQgInwqLW1lbGY2NGJtaXB8KiItbWVsZjY0Ym1pcCAiKQorICAgICAgbGlic3VmZj02NCBzaGxpYnN1ZmY9NjQgbGlibWFnaWM9NjQtYml0OzsKKyAgICAqKSBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKKyAgICBlc2FjCisgICAgOzsKKyAgZXNhYworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUlkke3NobGlic3VmZn1fUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0gL3Vzci9sb2NhbC9saWIke2xpYnN1ZmZ9IgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IgorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKKyMgTm8gc2hhcmVkIGxpYiBzdXBwb3J0IGZvciBMaW51eCBvbGRsZCwgYW91dCwgb3IgY29mZi4KK2xpbnV4Km9sZGxkKiB8IGxpbnV4KmFvdXQqIHwgbGludXgqY29mZiopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7CisKKyMgVGhpcyBtdXN0IGJlIGdsaWJjL0VMRi4KK2xpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbiAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKworICAjIFNvbWUgYmludXRpbHMgbGQgYXJlIHBhdGNoZWQgdG8gc2V0IERUX1JVTlBBVEgKKyAgaWYgJHtsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICBzYXZlX0xERkxBR1M9JExERkxBR1MKKyAgICBzYXZlX2xpYmRpcj0kbGliZGlyCisgICAgZXZhbCAibGliZGlyPS9mb287IHdsPVwiJGx0X3Byb2dfY29tcGlsZXJfd2xcIjsgXAorCSBMREZMQUdTPVwiXCRMREZMQUdTICRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIiCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGlmICAoJE9CSkRVTVAgLXAgY29uZnRlc3QkYWNfZXhlZXh0KSAyPi9kZXYvbnVsbCB8IGdyZXAgIlJVTlBBVEguKiRsaWJkaXIiID4vZGV2L251bGw7IHRoZW4gOgorICBsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCitmaQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgTERGTEFHUz0kc2F2ZV9MREZMQUdTCisgICAgbGliZGlyPSRzYXZlX2xpYmRpcgorCitmaQorCisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD0kbHRfY3Zfc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoCisKKyAgIyBUaGlzIGltcGxpZXMgbm8gZmFzdF9pbnN0YWxsLCB3aGljaCBpcyB1bmFjY2VwdGFibGUuCisgICMgU29tZSByZXdvcmsgd2lsbCBiZSBuZWVkZWQgdG8gYWxsb3cgZm9yIGZhc3RfaW5zdGFsbAorICAjIGJlZm9yZSB0aGlzIGNhbiBiZSBlbmFibGVkLgorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisKKyAgIyBBZGQgQUJJLXNwZWNpZmljIGRpcmVjdG9yaWVzIHRvIHRoZSBzeXN0ZW0gbGlicmFyeSBwYXRoLgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYjY0IC91c3IvbGliNjQgL2xpYiAvdXNyL2xpYiIKKworICAjIEFwcGVuZCBsZC5zby5jb25mIGNvbnRlbnRzIHRvIHRoZSBzZWFyY2ggcGF0aAorICBpZiB0ZXN0IC1mIC9ldGMvbGQuc28uY29uZjsgdGhlbgorICAgIGx0X2xkX2V4dHJhPWBhd2sgJy9eaW5jbHVkZSAvIHsgc3lzdGVtKHNwcmludGYoImNkIC9ldGM7IGNhdCAlcyAyPi9kZXYvbnVsbCIsIFwkMikpOyBza2lwID0gMTsgfSB7IGlmICghc2tpcCkgcHJpbnQgXCQwOyBza2lwID0gMDsgfScgPCAvZXRjL2xkLnNvLmNvbmYgfCAkU0VEIC1lICdzLyMuKi8vOy9eWwkgXSpod2NhcFsJIF0vZDtzL1s6LAldLyAvZztzLz1bXj1dKiQvLztzLz1bXj0gXSogLyAvZztzLyIvL2c7L14kL2QnIHwgdHIgJ1xuJyAnICdgCisgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyAkbHRfbGRfZXh0cmEiCisKKyAgZmkKKworICAjIFdlIHVzZWQgdG8gdGVzdCBmb3IgL2xpYi9sZC5zby4xIGFuZCBkaXNhYmxlIHNoYXJlZCBsaWJyYXJpZXMgb24KKyAgIyBwb3dlcnBjLCBiZWNhdXNlIE1rTGludXggb25seSBzdXBwb3J0ZWQgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHRoZQorICAjIEdOVSBkeW5hbWljIGxpbmtlci4gIFNpbmNlIHRoaXMgd2FzIGJyb2tlbiB3aXRoIGNyb3NzIGNvbXBpbGVycywKKyAgIyBtb3N0IHBvd2VycGMtbGludXggYm94ZXMgc3VwcG9ydCBkeW5hbWljIGxpbmtpbmcgdGhlc2UgZGF5cyBhbmQKKyAgIyBwZW9wbGUgY2FuIGFsd2F5cyAtLWRpc2FibGUtc2hhcmVkLCB0aGUgdGVzdCB3YXMgcmVtb3ZlZCwgYW5kIHdlCisgICMgYXNzdW1lIHRoZSBHTlUvTGludXggZHluYW1pYyBsaW5rZXIgaXMgaW4gdXNlLgorICBkeW5hbWljX2xpbmtlcj0nR05VL0xpbnV4IGxkLnNvJworICA7OworCituZXRic2QqKQorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisgICAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKKyAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIChhLm91dCkgbGQuc28nCisgIGVsc2UKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgZHluYW1pY19saW5rZXI9J05ldEJTRCBsZC5lbGZfc28nCisgIGZpCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCituZXdzb3M2KQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIDs7CisKKypudG8qIHwgKnFueCopCisgIHZlcnNpb25fdHlwZT1xbngKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgZHluYW1pY19saW5rZXI9J2xkcW54LnNvJworICA7OworCitvcGVuYnNkKikKKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiIKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgICMgU29tZSBvbGRlciB2ZXJzaW9ucyBvZiBPcGVuQlNEICgzLjMgYXQgbGVhc3QpICpkbyogbmVlZCB2ZXJzaW9uZWQgbGlicy4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIG9wZW5ic2QzLjMgfCBvcGVuYnNkMy4zLiopCW5lZWRfdmVyc2lvbj15ZXMgOzsKKyAgICAqKQkJCQluZWVkX3ZlcnNpb249bm8gIDs7CisgIGVzYWMKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIG9wZW5ic2QyLls4OV0gfCBvcGVuYnNkMi5bODldLiopCisJc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisJOzsKKyAgICAgICopCisJc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworCTs7CisgICAgICBlc2FjCisgIGVsc2UKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGZpCisgIDs7CisKK29zMiopCisgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisgIHNocmV4dF9jbWRzPSIuZGxsIgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUuYScKKyAgZHluYW1pY19saW5rZXI9J09TLzIgbGQuZXhlJworICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKKyAgOzsKKworb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICB2ZXJzaW9uX3R5cGU9b3NmCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9zaGxpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIvY21wbHJzL2NjIC91c3IvbGliIC91c3IvbG9jYWwvbGliIC92YXIvc2hsaWIiCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIgorICA7OworCityZG9zKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKKworc29sYXJpcyopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICMgbGRkIGNvbXBsYWlucyB1bmxlc3MgbGlicmFyaWVzIGFyZSBleGVjdXRhYmxlCisgIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kICt4ICRsaWInCisgIDs7CisKK3N1bm9zNCopCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi91c3IvZXRjIiBsZGNvbmZpZyAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgZmkKKyAgbmVlZF92ZXJzaW9uPXllcworICA7OworCitzeXN2NCB8IHN5c3Y0LjMqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBjYXNlICRob3N0X3ZlbmRvciBpbgorICAgIHNuaSkKKyAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorICAgICAgOzsKKyAgICBzaWVtZW5zKQorICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICA7OworICAgIG1vdG9yb2xhKQorICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICBuZWVkX3ZlcnNpb249bm8KKyAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvbGliIC91c3IvbGliIC91c3IvY2NzL2xpYicKKyAgICAgIDs7CisgIGVzYWMKKyAgOzsKKworc3lzdjQqTVAqKQorICBpZiB0ZXN0IC1kIC91c3IvbmVjIDt0aGVuCisgICAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9LiR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9LiRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kbWFqb3InCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgZmkKKyAgOzsKKworc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKiB8IHN5c3Y0KnV3MiopCisgIHZlcnNpb25fdHlwZT1mcmVlYnNkLWVsZgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9sb2NhbC9saWIgL3Vzci9nbnUvbGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYiAvbGliJworICBlbHNlCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2Njcy9saWIgL3Vzci9saWInCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgc2NvMy4ydjUqKQorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgL2xpYiIKKwk7OworICAgIGVzYWMKKyAgZmkKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbGliJworICA7OworCit0cGYqKQorICAjIFRQRiBpcyBhIGNyb3NzLXRhcmdldCBvbmx5LiAgUHJlZmVycmVkIGNyb3NzLWhvc3QgPSBHTlUvTGludXguCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKwordXRzNCopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIDs7CisKKyopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7Citlc2FjCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGR5bmFtaWNfbGlua2VyIiA+JjUKKyRhc19lY2hvICIkZHluYW1pY19saW5rZXIiID4mNjsgfQordGVzdCAiJGR5bmFtaWNfbGlua2VyIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KKwordmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IlBBVEggJHNobGlicGF0aF92YXIgJHJ1bnBhdGhfdmFyIgoraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayBHQ0NfRVhFQ19QUkVGSVggQ09NUElMRVJfUEFUSCBMSUJSQVJZX1BBVEgiCitmaQorCitpZiB0ZXN0ICIke2x0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYytzZXR9IiA9IHNldDsgdGhlbgorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiCitmaQoraWYgdGVzdCAiJHtsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYytzZXR9IiA9IHNldDsgdGhlbgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJGx0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjIgorZmkKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zLi4uICIgPiY2OyB9CitoYXJkY29kZV9hY3Rpb249CitpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgfHwKKyAgIHRlc3QgLW4gIiRydW5wYXRoX3ZhciIgfHwKKyAgIHRlc3QgIlgkaGFyZGNvZGVfYXV0b21hdGljIiA9ICJYeWVzIiA7IHRoZW4KKworICAjIFdlIGNhbiBoYXJkY29kZSBub24tZXhpc3RlbnQgZGlyZWN0b3JpZXMuCisgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiICE9IG5vICYmCisgICAgICMgSWYgdGhlIG9ubHkgbWVjaGFuaXNtIHRvIGF2b2lkIGhhcmRjb2RpbmcgaXMgc2hsaWJwYXRoX3Zhciwgd2UKKyAgICAgIyBoYXZlIHRvIHJlbGluaywgb3RoZXJ3aXNlIHdlIG1pZ2h0IGxpbmsgd2l0aCBhbiBpbnN0YWxsZWQgbGlicmFyeQorICAgICAjIHdoZW4gd2Ugc2hvdWxkIGJlIGxpbmtpbmcgd2l0aCBhIHlldC10by1iZS1pbnN0YWxsZWQgb25lCisgICAgICMjIHRlc3QgIiRfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICkiICE9IG5vICYmCisgICAgIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiAhPSBubzsgdGhlbgorICAgICMgTGlua2luZyBhbHdheXMgaGFyZGNvZGVzIHRoZSB0ZW1wb3JhcnkgbGlicmFyeSBkaXJlY3RvcnkuCisgICAgaGFyZGNvZGVfYWN0aW9uPXJlbGluaworICBlbHNlCisgICAgIyBXZSBjYW4gbGluayB3aXRob3V0IGhhcmRjb2RpbmcsIGFuZCB3ZSBjYW4gaGFyZGNvZGUgbm9uZXhpc3RpbmcgZGlycy4KKyAgICBoYXJkY29kZV9hY3Rpb249aW1tZWRpYXRlCisgIGZpCitlbHNlCisgICMgV2UgY2Fubm90IGhhcmRjb2RlIGFueXRoaW5nLCBvciBlbHNlIHdlIGNhbiBvbmx5IGhhcmRjb2RlIGV4aXN0aW5nCisgICMgZGlyZWN0b3JpZXMuCisgIGhhcmRjb2RlX2FjdGlvbj11bnN1cHBvcnRlZAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkaGFyZGNvZGVfYWN0aW9uIiA+JjUKKyRhc19lY2hvICIkaGFyZGNvZGVfYWN0aW9uIiA+JjY7IH0KKworaWYgdGVzdCAiJGhhcmRjb2RlX2FjdGlvbiIgPSByZWxpbmsgfHwKKyAgIHRlc3QgIiRpbmhlcml0X3JwYXRoIiA9IHllczsgdGhlbgorICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQKKyAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubworZWxpZiB0ZXN0ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiA9IHllcyB8fAorICAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSBubzsgdGhlbgorICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBuZWNlc3NhcnkKKyAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1uZWVkbGVzcworZmkKKworCisKKworCisKKyAgaWYgdGVzdCAieCRlbmFibGVfZGxvcGVuIiAhPSB4eWVzOyB0aGVuCisgIGVuYWJsZV9kbG9wZW49dW5rbm93bgorICBlbmFibGVfZGxvcGVuX3NlbGY9dW5rbm93bgorICBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPXVua25vd24KK2Vsc2UKKyAgbHRfY3ZfZGxvcGVuPW5vCisgIGx0X2N2X2Rsb3Blbl9saWJzPQorCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYmVvcyopCisgICAgbHRfY3ZfZGxvcGVuPSJsb2FkX2FkZF9vbiIKKyAgICBsdF9jdl9kbG9wZW5fbGlicz0KKyAgICBsdF9jdl9kbG9wZW5fc2VsZj15ZXMKKyAgICA7OworCisgIG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgIGx0X2N2X2Rsb3Blbj0iTG9hZExpYnJhcnkiCisgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CisgICAgOzsKKworICBjeWd3aW4qKQorICAgIGx0X2N2X2Rsb3Blbj0iZGxvcGVuIgorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgIDs7CisKKyAgZGFyd2luKikKKyAgIyBpZiBsaWJkbCBpcyBpbnN0YWxsZWQgd2UgbmVlZCB0byBsaW5rIGFnYWluc3QgaXQKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sZGwuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX2RsX2Rsb3Blbis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sZGwgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGRsb3BlbiAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGRsb3BlbiAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfZGxfZGxvcGVuPXllcworZWxzZQorICBhY19jdl9saWJfZGxfZGxvcGVuPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPSB4eWVzOyB0aGVuIDoKKyAgbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsIgorZWxzZQorCisgICAgbHRfY3ZfZGxvcGVuPSJkeWxkIgorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgIGx0X2N2X2Rsb3Blbl9zZWxmPXllcworCitmaQorCisgICAgOzsKKworICAqKQorICAgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgInNobF9sb2FkIiAiYWNfY3ZfZnVuY19zaGxfbG9hZCIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19zaGxfbG9hZCIgPSB4eWVzOyB0aGVuIDoKKyAgbHRfY3ZfZGxvcGVuPSJzaGxfbG9hZCIKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc2hsX2xvYWQgaW4gLWxkbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHNobF9sb2FkIGluIC1sZGxkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl9kbGRfc2hsX2xvYWQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGRsZCAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgc2hsX2xvYWQgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBzaGxfbG9hZCAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfZGxkX3NobF9sb2FkPXllcworZWxzZQorICBhY19jdl9saWJfZGxkX3NobF9sb2FkPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfZGxkX3NobF9sb2FkIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX2RsZF9zaGxfbG9hZCIgPSB4eWVzOyB0aGVuIDoKKyAgbHRfY3ZfZGxvcGVuPSJzaGxfbG9hZCIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGxkIgorZWxzZQorICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJkbG9wZW4iICJhY19jdl9mdW5jX2Rsb3BlbiIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19kbG9wZW4iID0geHllczsgdGhlbiA6CisgIGx0X2N2X2Rsb3Blbj0iZGxvcGVuIgorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sZGwuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX2RsX2Rsb3Blbis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sZGwgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGRsb3BlbiAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGRsb3BlbiAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfZGxfZGxvcGVuPXllcworZWxzZQorICBhY19jdl9saWJfZGxfZGxvcGVuPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPSB4eWVzOyB0aGVuIDoKKyAgbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsIgorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxzdmxkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxzdmxkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl9zdmxkX2Rsb3Blbis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sc3ZsZCAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZGxvcGVuICgpOworaW50CittYWluICgpCit7CityZXR1cm4gZGxvcGVuICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9zdmxkX2Rsb3Blbj15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX3N2bGRfZGxvcGVuPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9zdmxkX2Rsb3BlbiIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9zdmxkX2Rsb3BlbiIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9zdmxkX2Rsb3BlbiIgPSB4eWVzOyB0aGVuIDoKKyAgbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbHN2bGQiCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRsZF9saW5rIGluIC1sZGxkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBkbGRfbGluayBpbiAtbGRsZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfZGxkX2RsZF9saW5rKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxkbGQgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGRsZF9saW5rICgpOworaW50CittYWluICgpCit7CityZXR1cm4gZGxkX2xpbmsgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX2RsZF9kbGRfbGluaz15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX2RsZF9kbGRfbGluaz1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfZGxkX2RsZF9saW5rIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX2RsZF9kbGRfbGluayIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9kbGRfZGxkX2xpbmsiID0geHllczsgdGhlbiA6CisgIGx0X2N2X2Rsb3Blbj0iZGxkX2xpbmsiIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsZCIKK2ZpCisKKworZmkKKworCitmaQorCisKK2ZpCisKKworZmkKKworCitmaQorCisgICAgOzsKKyAgZXNhYworCisgIGlmIHRlc3QgIngkbHRfY3ZfZGxvcGVuIiAhPSB4bm87IHRoZW4KKyAgICBlbmFibGVfZGxvcGVuPXllcworICBlbHNlCisgICAgZW5hYmxlX2Rsb3Blbj1ubworICBmaQorCisgIGNhc2UgJGx0X2N2X2Rsb3BlbiBpbgorICBkbG9wZW4pCisgICAgc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorICAgIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2RsZmNuX2giID0geHllcyAmJiBDUFBGTEFHUz0iJENQUEZMQUdTIC1ESEFWRV9ETEZDTl9IIgorCisgICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKyAgICB3bD0kbHRfcHJvZ19jb21waWxlcl93bCBldmFsIExERkxBR1M9XCJcJExERkxBR1MgJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY1wiCisKKyAgICBzYXZlX0xJQlM9IiRMSUJTIgorICAgIExJQlM9IiRsdF9jdl9kbG9wZW5fbGlicyAkTElCUyIKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBhIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGYiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBhIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGYuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfZGxvcGVuX3NlbGYrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICAJICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIGx0X2N2X2Rsb3Blbl9zZWxmPWNyb3NzCitlbHNlCisgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKKyAgbHRfc3RhdHVzPSRsdF9kbHVua25vd24KKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKyNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaWYgSEFWRV9ETEZDTl9ICisjaW5jbHVkZSA8ZGxmY24uaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lmZGVmIFJUTERfR0xPQkFMCisjICBkZWZpbmUgTFRfRExHTE9CQUwJCVJUTERfR0xPQkFMCisjZWxzZQorIyAgaWZkZWYgRExfR0xPQkFMCisjICAgIGRlZmluZSBMVF9ETEdMT0JBTAkJRExfR0xPQkFMCisjICBlbHNlCisjICAgIGRlZmluZSBMVF9ETEdMT0JBTAkJMAorIyAgZW5kaWYKKyNlbmRpZgorCisvKiBXZSBtYXkgaGF2ZSB0byBkZWZpbmUgTFRfRExMQVpZX09SX05PVyBpbiB0aGUgY29tbWFuZCBsaW5lIGlmIHdlCisgICBmaW5kIG91dCBpdCBkb2VzIG5vdCB3b3JrIGluIHNvbWUgcGxhdGZvcm0uICovCisjaWZuZGVmIExUX0RMTEFaWV9PUl9OT1cKKyMgIGlmZGVmIFJUTERfTEFaWQorIyAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkJUlRMRF9MQVpZCisjICBlbHNlCisjICAgIGlmZGVmIERMX0xBWlkKKyMgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkJRExfTEFaWQorIyAgICBlbHNlCisjICAgICAgaWZkZWYgUlRMRF9OT1cKKyMgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCVJUTERfTk9XCisjICAgICAgZWxzZQorIyAgICAgICAgaWZkZWYgRExfTk9XCisjICAgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCURMX05PVworIyAgICAgICAgZWxzZQorIyAgICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkwCisjICAgICAgICBlbmRpZgorIyAgICAgIGVuZGlmCisjICAgIGVuZGlmCisjICBlbmRpZgorI2VuZGlmCisKKy8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKKyAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQoraW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworI2VuZGlmCisKK2ludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQoraW50IG1haW4gKCkKK3sKKyAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CisgIGludCBzdGF0dXMgPSAkbHRfZGx1bmtub3duOworCisgIGlmIChzZWxmKQorICAgIHsKKyAgICAgIGlmIChkbHN5bSAoc2VsZiwiZm5vcmQiKSkgICAgICAgc3RhdHVzID0gJGx0X2Rsbm9fdXNjb3JlOworICAgICAgZWxzZQorICAgICAgICB7CisJICBpZiAoZGxzeW0oIHNlbGYsIl9mbm9yZCIpKSAgc3RhdHVzID0gJGx0X2RsbmVlZF91c2NvcmU7CisgICAgICAgICAgZWxzZSBwdXRzIChkbGVycm9yICgpKTsKKwl9CisgICAgICAvKiBkbGNsb3NlIChzZWxmKTsgKi8KKyAgICB9CisgIGVsc2UKKyAgICBwdXRzIChkbGVycm9yICgpKTsKKworICByZXR1cm4gc3RhdHVzOworfQorX0xUX0VPRgorICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfbGlua1wiIjsgfSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gMj4vZGV2L251bGw7IHRoZW4KKyAgICAoLi9jb25mdGVzdDsgZXhpdDsgKSA+JjUgMj4vZGV2L251bGwKKyAgICBsdF9zdGF0dXM9JD8KKyAgICBjYXNlIHgkbHRfc3RhdHVzIGluCisgICAgICB4JGx0X2Rsbm9fdXNjb3JlKSBsdF9jdl9kbG9wZW5fc2VsZj15ZXMgOzsKKyAgICAgIHgkbHRfZGxuZWVkX3VzY29yZSkgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzIDs7CisgICAgICB4JGx0X2RsdW5rbm93bnx4KikgbHRfY3ZfZGxvcGVuX3NlbGY9bm8gOzsKKyAgICBlc2FjCisgIGVsc2UgOgorICAgICMgY29tcGlsYXRpb24gZmFpbGVkCisgICAgbHRfY3ZfZGxvcGVuX3NlbGY9bm8KKyAgZmkKK2ZpCitybSAtZnIgY29uZnRlc3QqCisKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfZGxvcGVuX3NlbGYiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9kbG9wZW5fc2VsZiIgPiY2OyB9CisKKyAgICBpZiB0ZXN0ICJ4JGx0X2N2X2Rsb3Blbl9zZWxmIiA9IHh5ZXM7IHRoZW4KKyAgICAgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsIGV2YWwgTERGTEFHUz1cIlwkTERGTEFHUyAkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNcIgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGEgc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGEgc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZi4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICAJICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz1jcm9zcworZWxzZQorICBsdF9kbHVua25vd249MDsgbHRfZGxub191c2NvcmU9MTsgbHRfZGxuZWVkX3VzY29yZT0yCisgIGx0X3N0YXR1cz0kbHRfZGx1bmtub3duCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCisjbGluZSAkTElORU5PICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2lmIEhBVkVfRExGQ05fSAorI2luY2x1ZGUgPGRsZmNuLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpZmRlZiBSVExEX0dMT0JBTAorIyAgZGVmaW5lIExUX0RMR0xPQkFMCQlSVExEX0dMT0JBTAorI2Vsc2UKKyMgIGlmZGVmIERMX0dMT0JBTAorIyAgICBkZWZpbmUgTFRfRExHTE9CQUwJCURMX0dMT0JBTAorIyAgZWxzZQorIyAgICBkZWZpbmUgTFRfRExHTE9CQUwJCTAKKyMgIGVuZGlmCisjZW5kaWYKKworLyogV2UgbWF5IGhhdmUgdG8gZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cgaW4gdGhlIGNvbW1hbmQgbGluZSBpZiB3ZQorICAgZmluZCBvdXQgaXQgZG9lcyBub3Qgd29yayBpbiBzb21lIHBsYXRmb3JtLiAqLworI2lmbmRlZiBMVF9ETExBWllfT1JfTk9XCisjICBpZmRlZiBSVExEX0xBWlkKKyMgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJCVJUTERfTEFaWQorIyAgZWxzZQorIyAgICBpZmRlZiBETF9MQVpZCisjICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJCURMX0xBWlkKKyMgICAgZWxzZQorIyAgICAgIGlmZGVmIFJUTERfTk9XCisjICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwlSVExEX05PVworIyAgICAgIGVsc2UKKyMgICAgICAgIGlmZGVmIERMX05PVworIyAgICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwlETF9OT1cKKyMgICAgICAgIGVsc2UKKyMgICAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJMAorIyAgICAgICAgZW5kaWYKKyMgICAgICBlbmRpZgorIyAgICBlbmRpZgorIyAgZW5kaWYKKyNlbmRpZgorCisvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCisgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKK2ludCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKyNlbmRpZgorCitpbnQgZm5vcmQgKCkgeyByZXR1cm4gNDI7IH0KK2ludCBtYWluICgpCit7CisgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOworICBpbnQgc3RhdHVzID0gJGx0X2RsdW5rbm93bjsKKworICBpZiAoc2VsZikKKyAgICB7CisgICAgICBpZiAoZGxzeW0gKHNlbGYsImZub3JkIikpICAgICAgIHN0YXR1cyA9ICRsdF9kbG5vX3VzY29yZTsKKyAgICAgIGVsc2UKKyAgICAgICAgeworCSAgaWYgKGRsc3ltKCBzZWxmLCJfZm5vcmQiKSkgIHN0YXR1cyA9ICRsdF9kbG5lZWRfdXNjb3JlOworICAgICAgICAgIGVsc2UgcHV0cyAoZGxlcnJvciAoKSk7CisJfQorICAgICAgLyogZGxjbG9zZSAoc2VsZik7ICovCisgICAgfQorICBlbHNlCisgICAgcHV0cyAoZGxlcnJvciAoKSk7CisKKyAgcmV0dXJuIHN0YXR1czsKK30KK19MVF9FT0YKKyAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2xpbmtcIiI7IH0gPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9IDI+L2Rldi9udWxsOyB0aGVuCisgICAgKC4vY29uZnRlc3Q7IGV4aXQ7ICkgPiY1IDI+L2Rldi9udWxsCisgICAgbHRfc3RhdHVzPSQ/CisgICAgY2FzZSB4JGx0X3N0YXR1cyBpbgorICAgICAgeCRsdF9kbG5vX3VzY29yZSkgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPXllcyA7OworICAgICAgeCRsdF9kbG5lZWRfdXNjb3JlKSBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9eWVzIDs7CisgICAgICB4JGx0X2RsdW5rbm93bnx4KikgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPW5vIDs7CisgICAgZXNhYworICBlbHNlIDoKKyAgICAjIGNvbXBpbGF0aW9uIGZhaWxlZAorICAgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz1ubworICBmaQorZmkKK3JtIC1mciBjb25mdGVzdCoKKworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMiID4mNjsgfQorICAgIGZpCisKKyAgICBDUFBGTEFHUz0iJHNhdmVfQ1BQRkxBR1MiCisgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKyAgICBMSUJTPSIkc2F2ZV9MSUJTIgorICAgIDs7CisgIGVzYWMKKworICBjYXNlICRsdF9jdl9kbG9wZW5fc2VsZiBpbgorICB5ZXN8bm8pIGVuYWJsZV9kbG9wZW5fc2VsZj0kbHRfY3ZfZGxvcGVuX3NlbGYgOzsKKyAgKikgZW5hYmxlX2Rsb3Blbl9zZWxmPXVua25vd24gOzsKKyAgZXNhYworCisgIGNhc2UgJGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYyBpbgorICB5ZXN8bm8pIGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9JGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYyA7OworICAqKSBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPXVua25vd24gOzsKKyAgZXNhYworZmkKKworCisKKworCisKKworCisKKworCisKKworCisKKworCitzdHJpcGxpYj0KK29sZF9zdHJpcGxpYj0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBzdHJpcHBpbmcgbGlicmFyaWVzIGlzIHBvc3NpYmxlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgc3RyaXBwaW5nIGxpYnJhcmllcyBpcyBwb3NzaWJsZS4uLiAiID4mNjsgfQoraWYgdGVzdCAtbiAiJFNUUklQIiAmJiAkU1RSSVAgLVYgMj4mMSB8ICRHUkVQICJHTlUgc3RyaXAiID4vZGV2L251bGw7IHRoZW4KKyAgdGVzdCAteiAiJG9sZF9zdHJpcGxpYiIgJiYgb2xkX3N0cmlwbGliPSIkU1RSSVAgLS1zdHJpcC1kZWJ1ZyIKKyAgdGVzdCAteiAiJHN0cmlwbGliIiAmJiBzdHJpcGxpYj0iJFNUUklQIC0tc3RyaXAtdW5uZWVkZWQiCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CitlbHNlCisjIEZJWE1FIC0gaW5zZXJ0IHNvbWUgcmVhbCB0ZXN0cywgaG9zdF9vcyBpc24ndCByZWFsbHkgZ29vZCBlbm91Z2gKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBkYXJ3aW4qKQorICAgIGlmIHRlc3QgLW4gIiRTVFJJUCIgOyB0aGVuCisgICAgICBzdHJpcGxpYj0iJFNUUklQIC14IgorICAgICAgb2xkX3N0cmlwbGliPSIkU1RSSVAgLVMiCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgIGVsc2UKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIGZpCisgICAgOzsKKyAgKikKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICA7OworICBlc2FjCitmaQorCisKKworCisKKworCisKKworCisKKworICAjIFJlcG9ydCB3aGljaCBsaWJyYXJ5IHR5cGVzIHdpbGwgYWN0dWFsbHkgYmUgYnVpbHQKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLi4uICIgPiY2OyB9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkY2FuX2J1aWxkX3NoYXJlZCIgPiY1CiskYXNfZWNobyAiJGNhbl9idWlsZF9zaGFyZWQiID4mNjsgfQorCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcy4uLiAiID4mNjsgfQorICB0ZXN0ICIkY2FuX2J1aWxkX3NoYXJlZCIgPSAibm8iICYmIGVuYWJsZV9zaGFyZWQ9bm8KKworICAjIE9uIEFJWCwgc2hhcmVkIGxpYnJhcmllcyBhbmQgc3RhdGljIGxpYnJhcmllcyB1c2UgdGhlIHNhbWUgbmFtZXNwYWNlLCBhbmQKKyAgIyBhcmUgYWxsIGJ1aWx0IGZyb20gUElDLgorICBjYXNlICRob3N0X29zIGluCisgIGFpeDMqKQorICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisgICAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgICAgIGFyY2hpdmVfY21kcz0iJGFyY2hpdmVfY21kc35cJFJBTkxJQiBcJGxpYiIKKyAgICAgIHBvc3RpbnN0YWxsX2NtZHM9JyRSQU5MSUIgJGxpYicKKyAgICBmaQorICAgIDs7CisKKyAgYWl4WzQtOV0qKQorICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NCAmJiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSBubyA7IHRoZW4KKyAgICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisgICAgZmkKKyAgICA7OworICBlc2FjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZW5hYmxlX3NoYXJlZCIgPiY1CiskYXNfZWNobyAiJGVuYWJsZV9zaGFyZWQiID4mNjsgfQorCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcy4uLiAiID4mNjsgfQorICAjIE1ha2Ugc3VyZSBlaXRoZXIgZW5hYmxlX3NoYXJlZCBvciBlbmFibGVfc3RhdGljIGlzIHllcy4KKyAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzIHx8IGVuYWJsZV9zdGF0aWM9eWVzCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZW5hYmxlX3N0YXRpYyIgPiY1CiskYXNfZWNobyAiJGVuYWJsZV9zdGF0aWMiID4mNjsgfQorCisKKworCitmaQorYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCitDQz0iJGx0X3NhdmVfQ0MiCisKKyAgICAgIGlmIHRlc3QgLW4gIiRDWFgiICYmICggdGVzdCAiWCRDWFgiICE9ICJYbm8iICYmCisgICAgKCAodGVzdCAiWCRDWFgiID0gIlhnKysiICYmIGBnKysgLXYgPi9kZXYvbnVsbCAyPiYxYCApIHx8CisgICAgKHRlc3QgIlgkQ1hYIiAhPSAiWGcrKyIpKSkgOyB0aGVuCisgIGFjX2V4dD1jcHAKK2FjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMrKyBwcmVwcm9jZXNzb3IiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQysrIHByZXByb2Nlc3Nvci4uLiAiID4mNjsgfQoraWYgdGVzdCAteiAiJENYWENQUCI7IHRoZW4KKyAgaWYgJHthY19jdl9wcm9nX0NYWENQUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgICAgICAjIERvdWJsZSBxdW90ZXMgYmVjYXVzZSBDWFhDUFAgbmVlZHMgdG8gYmUgZXhwYW5kZWQKKyAgICBmb3IgQ1hYQ1BQIGluICIkQ1hYIC1FIiAiL2xpYi9jcHAiCisgICAgZG8KKyAgICAgIGFjX3ByZXByb2Nfb2s9ZmFsc2UKK2ZvciBhY19jeHhfcHJlcHJvY193YXJuX2ZsYWcgaW4gJycgeWVzCitkbworICAjIFVzZSBhIGhlYWRlciBmaWxlIHRoYXQgY29tZXMgd2l0aCBnY2MsIHNvIGNvbmZpZ3VyaW5nIGdsaWJjCisgICMgd2l0aCBhIGZyZXNoIGNyb3NzLWNvbXBpbGVyIHdvcmtzLgorICAjIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgIyA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuCisgICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCisgICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorCQkgICAgIFN5bnRheCBlcnJvcgorX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorCitlbHNlCisgICMgQnJva2VuOiBmYWlscyBvbiB2YWxpZCBpbnB1dC4KK2NvbnRpbnVlCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAorCisgICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub25leGlzdGVudCBoZWFkZXJzCisgICMgY2FuIGJlIGRldGVjdGVkIGFuZCBob3cuCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgorX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgorY29udGludWUKK2Vsc2UKKyAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KK2FjX3ByZXByb2Nfb2s9OgorYnJlYWsKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CisKK2RvbmUKKyMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgorcm0gLWYgY29uZnRlc3QuaSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAoraWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4gOgorICBicmVhaworZmkKKworICAgIGRvbmUKKyAgICBhY19jdl9wcm9nX0NYWENQUD0kQ1hYQ1BQCisKK2ZpCisgIENYWENQUD0kYWNfY3ZfcHJvZ19DWFhDUFAKK2Vsc2UKKyAgYWNfY3ZfcHJvZ19DWFhDUFA9JENYWENQUAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ1hYQ1BQIiA+JjUKKyRhc19lY2hvICIkQ1hYQ1BQIiA+JjY7IH0KK2FjX3ByZXByb2Nfb2s9ZmFsc2UKK2ZvciBhY19jeHhfcHJlcHJvY193YXJuX2ZsYWcgaW4gJycgeWVzCitkbworICAjIFVzZSBhIGhlYWRlciBmaWxlIHRoYXQgY29tZXMgd2l0aCBnY2MsIHNvIGNvbmZpZ3VyaW5nIGdsaWJjCisgICMgd2l0aCBhIGZyZXNoIGNyb3NzLWNvbXBpbGVyIHdvcmtzLgorICAjIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgIyA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuCisgICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCisgICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorCQkgICAgIFN5bnRheCBlcnJvcgorX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorCitlbHNlCisgICMgQnJva2VuOiBmYWlscyBvbiB2YWxpZCBpbnB1dC4KK2NvbnRpbnVlCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAorCisgICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub25leGlzdGVudCBoZWFkZXJzCisgICMgY2FuIGJlIGRldGVjdGVkIGFuZCBob3cuCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgorX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgorY29udGludWUKK2Vsc2UKKyAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KK2FjX3ByZXByb2Nfb2s9OgorYnJlYWsKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CisKK2RvbmUKKyMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgorcm0gLWYgY29uZnRlc3QuaSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAoraWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4gOgorCitlbHNlCisgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgJD8gIkMrKyBwcmVwcm9jZXNzb3IgXCIkQ1hYQ1BQXCIgZmFpbHMgc2FuaXR5IGNoZWNrCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorZmkKKworYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCitlbHNlCisgIF9sdF9jYXVnaHRfQ1hYX2Vycm9yPXllcworZmkKKworYWNfZXh0PWNwcAorYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKKworYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vCithbGxvd191bmRlZmluZWRfZmxhZ19DWFg9CithbHdheXNfZXhwb3J0X3N5bWJvbHNfQ1hYPW5vCithcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0KK2NvbXBpbGVyX25lZWRzX29iamVjdF9DWFg9bm8KK2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9CitoYXJkY29kZV9kaXJlY3RfQ1hYPW5vCitoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGVfQ1hYPW5vCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0KK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPQoraGFyZGNvZGVfbWludXNfTF9DWFg9bm8KK2hhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPXVuc3VwcG9ydGVkCitoYXJkY29kZV9hdXRvbWF0aWNfQ1hYPW5vCitpbmhlcml0X3JwYXRoX0NYWD1ubworbW9kdWxlX2NtZHNfQ1hYPQorbW9kdWxlX2V4cHN5bV9jbWRzX0NYWD0KK2xpbmtfYWxsX2RlcGxpYnNfQ1hYPXVua25vd24KK29sZF9hcmNoaXZlX2NtZHNfQ1hYPSRvbGRfYXJjaGl2ZV9jbWRzCityZWxvYWRfZmxhZ19DWFg9JHJlbG9hZF9mbGFnCityZWxvYWRfY21kc19DWFg9JHJlbG9hZF9jbWRzCitub191bmRlZmluZWRfZmxhZ19DWFg9Cit3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9CitlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0NYWD1ubworCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgQysrIHRlc3Qgc291cmNlcy4KK2FjX2V4dD1jcHAKKworIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIEMrKyB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworb2JqZXh0X0NYWD0kb2JqZXh0CisKKyMgTm8gc2Vuc2UgaW4gcnVubmluZyBhbGwgdGhlc2UgdGVzdHMgaWYgd2UgYWxyZWFkeSBkZXRlcm1pbmVkIHRoYXQKKyMgdGhlIENYWCBjb21waWxlciBpc24ndCB3b3JraW5nLiAgU29tZSB2YXJpYWJsZXMgKGxpa2UgZW5hYmxlX3NoYXJlZCkKKyMgYXJlIGN1cnJlbnRseSBhc3N1bWVkIHRvIGFwcGx5IHRvIGFsbCBjb21waWxlcnMgb24gdGhpcyBwbGF0Zm9ybSwKKyMgYW5kIHdpbGwgYmUgY29ycnVwdGVkIGJ5IHNldHRpbmcgdGhlbSBiYXNlZCBvbiBhIG5vbi13b3JraW5nIGNvbXBpbGVyLgoraWYgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXM7IHRoZW4KKyAgIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKKyAgbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJpbnQgc29tZV92YXJpYWJsZSA9IDA7IgorCisgICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCisgIGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0naW50IG1haW4oaW50LCBjaGFyICpbXSkgeyByZXR1cm4oMCk7IH0nCisKKyAgIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorCisKKworCisKKworIyBJZiBubyBDIGNvbXBpbGVyIHdhcyBzcGVjaWZpZWQsIHVzZSBDQy4KK0xUQ0M9JHtMVENDLSIkQ0MifQorCisjIElmIG5vIEMgY29tcGlsZXIgZmxhZ3Mgd2VyZSBzcGVjaWZpZWQsIHVzZSBDRkxBR1MuCitMVENGTEFHUz0ke0xUQ0ZMQUdTLSIkQ0ZMQUdTIn0KKworIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KK2NvbXBpbGVyPSRDQworCisKKyAgIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKKyAgYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0CitlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAorZXZhbCAiJGFjX2NvbXBpbGUiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCitfbHRfY29tcGlsZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCiskUk0gY29uZnRlc3QqCisKKyAgYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0CitlY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAorZXZhbCAiJGFjX2xpbmsiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCitfbHRfbGlua2VyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAorJFJNIC1yIGNvbmZ0ZXN0KgorCisKKyAgIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KKyAgbHRfc2F2ZV9DQz0kQ0MKKyAgbHRfc2F2ZV9DRkxBR1M9JENGTEFHUworICBsdF9zYXZlX0xEPSRMRAorICBsdF9zYXZlX0dDQz0kR0NDCisgIEdDQz0kR1hYCisgIGx0X3NhdmVfd2l0aF9nbnVfbGQ9JHdpdGhfZ251X2xkCisgIGx0X3NhdmVfcGF0aF9MRD0kbHRfY3ZfcGF0aF9MRAorICBpZiB0ZXN0IC1uICIke2x0X2N2X3Byb2dfZ251X2xkY3h4K3NldH0iOyB0aGVuCisgICAgbHRfY3ZfcHJvZ19nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkY3h4CisgIGVsc2UKKyAgICAkYXNfdW5zZXQgbHRfY3ZfcHJvZ19nbnVfbGQKKyAgZmkKKyAgaWYgdGVzdCAtbiAiJHtsdF9jdl9wYXRoX0xEQ1hYK3NldH0iOyB0aGVuCisgICAgbHRfY3ZfcGF0aF9MRD0kbHRfY3ZfcGF0aF9MRENYWAorICBlbHNlCisgICAgJGFzX3Vuc2V0IGx0X2N2X3BhdGhfTEQKKyAgZmkKKyAgdGVzdCAteiAiJHtMRENYWCtzZXR9IiB8fCBMRD0kTERDWFgKKyAgQ0M9JHtDWFgtImMrKyJ9CisgIENGTEFHUz0kQ1hYRkxBR1MKKyAgY29tcGlsZXI9JENDCisgIGNvbXBpbGVyX0NYWD0kQ0MKKyAgZm9yIGNjX3RlbXAgaW4gJGNvbXBpbGVyIiI7IGRvCisgIGNhc2UgJGNjX3RlbXAgaW4KKyAgICBjb21waWxlIHwgKltcXC9dY29tcGlsZSB8IGNjYWNoZSB8ICpbXFwvXWNjYWNoZSApIDs7CisgICAgZGlzdGNjIHwgKltcXC9dZGlzdGNjIHwgcHVyaWZ5IHwgKltcXC9dcHVyaWZ5ICkgOzsKKyAgICBcLSopIDs7CisgICAgKikgYnJlYWs7OworICBlc2FjCitkb25lCitjY19iYXNlbmFtZT1gJEVDSE8gIiRjY190ZW1wIiB8ICRTRUQgInMlLiovJSU7IHMlXiRob3N0X2FsaWFzLSUlImAKKworCisgIGlmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KKyAgICAjIFdlIGRvbid0IHdhbnQgLWZuby1leGNlcHRpb24gd2hlbiBjb21waWxpbmcgQysrIGNvZGUsIHNvIHNldCB0aGUKKyAgICAjIG5vX2J1aWx0aW5fZmxhZyBzZXBhcmF0ZWx5CisgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWD0nIC1mbm8tYnVpbHRpbicKKyAgICBlbHNlCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19DWFg9CisgICAgZmkKKworICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgICAjIFNldCB1cCBkZWZhdWx0IEdOVSBDKysgY29uZmlndXJhdGlvbgorCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1nbnUtbGQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2dudV9sZCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfZ251X2xkOyB0ZXN0ICIkd2l0aHZhbCIgPSBubyB8fCB3aXRoX2dudV9sZD15ZXMKK2Vsc2UKKyAgd2l0aF9nbnVfbGQ9bm8KK2ZpCisKK2FjX3Byb2c9bGQKK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICMgQ2hlY2sgaWYgZ2NjIC1wcmludC1wcm9nLW5hbWU9bGQgZ2l2ZXMgYSBwYXRoLgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsZCB1c2VkIGJ5ICRDQyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGQgdXNlZCBieSAkQ0MuLi4gIiA+JjY7IH0KKyAgY2FzZSAkaG9zdCBpbgorICAqLSotbWluZ3cqKQorICAgICMgZ2NjIGxlYXZlcyBhIHRyYWlsaW5nIGNhcnJpYWdlIHJldHVybiB3aGljaCB1cHNldHMgbWluZ3cKKyAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjUgfCB0ciAtZCAnXDAxNSdgIDs7CisgICopCisgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1YCA7OworICBlc2FjCisgIGNhc2UgJGFjX3Byb2cgaW4KKyAgICAjIEFjY2VwdCBhYnNvbHV0ZSBwYXRocy4KKyAgICBbXFwvXSogfCA/OltcXC9dKikKKyAgICAgIHJlX2RpcmVsdD0nL1teL11bXi9dKi9cLlwuLycKKyAgICAgICMgQ2Fub25pY2FsaXplIHRoZSBwYXRobmFtZSBvZiBsZAorICAgICAgYWNfcHJvZz1gJEVDSE8gIiRhY19wcm9nInwgJFNFRCAncyVcXFxcJS8lZydgCisgICAgICB3aGlsZSAkRUNITyAiJGFjX3Byb2ciIHwgJEdSRVAgIiRyZV9kaXJlbHQiID4gL2Rldi9udWxsIDI+JjE7IGRvCisJYWNfcHJvZz1gJEVDSE8gJGFjX3Byb2d8ICRTRUQgInMlJHJlX2RpcmVsdCUvJSJgCisgICAgICBkb25lCisgICAgICB0ZXN0IC16ICIkTEQiICYmIExEPSIkYWNfcHJvZyIKKyAgICAgIDs7CisgICIiKQorICAgICMgSWYgaXQgZmFpbHMsIHRoZW4gcHJldGVuZCB3ZSBhcmVuJ3QgdXNpbmcgR0NDLgorICAgIGFjX3Byb2c9bGQKKyAgICA7OworICAqKQorICAgICMgSWYgaXQgaXMgcmVsYXRpdmUsIHRoZW4gc2VhcmNoIGZvciB0aGUgZmlyc3QgbGQgaW4gUEFUSC4KKyAgICB3aXRoX2dudV9sZD11bmtub3duCisgICAgOzsKKyAgZXNhYworZWxpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEdOVSBsZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgR05VIGxkLi4uICIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQuLi4gIiA+JjY7IH0KK2ZpCitpZiAke2x0X2N2X3BhdGhfTEQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC16ICIkTEQiOyB0aGVuCisgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICBmb3IgYWNfZGlyIGluICRQQVRIOyBkbworICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgaWYgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyIgfHwgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyRhY19leGVleHQiOyB0aGVuCisgICAgICBsdF9jdl9wYXRoX0xEPSIkYWNfZGlyLyRhY19wcm9nIgorICAgICAgIyBDaGVjayB0byBzZWUgaWYgdGhlIHByb2dyYW0gaXMgR05VIGxkLiAgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uLAorICAgICAgIyBidXQgYXBwYXJlbnRseSBzb21lIHZhcmlhbnRzIG9mIEdOVSBsZCBvbmx5IGFjY2VwdCAtdi4KKyAgICAgICMgQnJlYWsgb25seSBpZiBpdCB3YXMgdGhlIEdOVS9ub24tR05VIGxkIHRoYXQgd2UgcHJlZmVyLgorICAgICAgY2FzZSBgIiRsdF9jdl9wYXRoX0xEIiAtdiAyPiYxIDwvZGV2L251bGxgIGluCisgICAgICAqR05VKiB8ICond2l0aCBCRkQnKikKKwl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IG5vICYmIGJyZWFrCisJOzsKKyAgICAgICopCisJdGVzdCAiJHdpdGhfZ251X2xkIiAhPSB5ZXMgJiYgYnJlYWsKKwk7OworICAgICAgZXNhYworICAgIGZpCisgIGRvbmUKKyAgSUZTPSIkbHRfc2F2ZV9pZnMiCitlbHNlCisgIGx0X2N2X3BhdGhfTEQ9IiRMRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCitmaQorZmkKKworTEQ9IiRsdF9jdl9wYXRoX0xEIgoraWYgdGVzdCAtbiAiJExEIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJExEIiA+JjUKKyRhc19lY2hvICIkTEQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCit0ZXN0IC16ICIkTEQiICYmIGFzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIGxkIGZvdW5kIGluIFwkUEFUSCIgIiRMSU5FTk8iIDUKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfcHJvZ19nbnVfbGQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICAjIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiBoZXJlLCBidXQgYXBwYXJlbnRseSBzb21lIEdOVSBsZHMgb25seSBhY2NlcHQgLXYuCitjYXNlIGAkTEQgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgorKkdOVSogfCAqJ3dpdGggQkZEJyopCisgIGx0X2N2X3Byb2dfZ251X2xkPXllcworICA7OworKikKKyAgbHRfY3ZfcHJvZ19nbnVfbGQ9bm8KKyAgOzsKK2VzYWMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfZ251X2xkIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19nbnVfbGQiID4mNjsgfQord2l0aF9nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkCisKKworCisKKworCisKKyAgICAgICMgQ2hlY2sgaWYgR05VIEMrKyB1c2VzIEdOVSBsZCBhcyB0aGUgdW5kZXJseWluZyBsaW5rZXIsIHNpbmNlIHRoZQorICAgICAgIyBhcmNoaXZpbmcgY29tbWFuZHMgYmVsb3cgYXNzdW1lIHRoYXQgR05VIGxkIGlzIGJlaW5nIHVzZWQuCisgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAkcGljX2ZsYWcgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgJHBpY19mbGFnIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKworICAgICAgICAjIElmIGFyY2hpdmVfY21kcyBydW5zIExELCBub3QgQ0MsIHdsYXJjIHNob3VsZCBiZSBlbXB0eQorICAgICAgICAjIFhYWCBJIHRoaW5rIHdsYXJjIGNhbiBiZSBlbGltaW5hdGVkIGluIGx0Y2YtY3h4LCBidXQgSSBuZWVkIHRvCisgICAgICAgICMgICAgIGludmVzdGlnYXRlIGl0IGEgbGl0dGxlIGJpdCBtb3JlLiAoTU0pCisgICAgICAgIHdsYXJjPScke3dsfScKKworICAgICAgICAjIGFuY2llbnQgR05VIGxkIGRpZG4ndCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZSBldC4gYWwuCisgICAgICAgIGlmIGV2YWwgImAkQ0MgLXByaW50LXByb2ctbmFtZT1sZGAgLS1oZWxwIDI+JjEiIHwKKwkgICRHUkVQICduby13aG9sZS1hcmNoaXZlJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0iJHdsYXJjIictLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyIkd2xhcmMiJy0tbm8td2hvbGUtYXJjaGl2ZScKKyAgICAgICAgZWxzZQorICAgICAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0KKyAgICAgICAgZmkKKyAgICAgIGVsc2UKKyAgICAgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICAgICAgd2xhcmM9CisKKyAgICAgICAgIyBBIGdlbmVyaWMgYW5kIHZlcnkgc2ltcGxlIGRlZmF1bHQgc2hhcmVkIGxpYnJhcnkgY3JlYXRpb24KKyAgICAgICAgIyBjb21tYW5kIGZvciBHTlUgQysrIGZvciB0aGUgY2FzZSB3aGVyZSBpdCB1c2VzIHRoZSBuYXRpdmUKKyAgICAgICAgIyBsaW5rZXIsIGluc3RlYWQgb2YgR05VIGxkLiAgSWYgcG9zc2libGUsIHRoaXMgc2V0dGluZyBzaG91bGQKKyAgICAgICAgIyBvdmVycmlkZGVuIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZSBuYXRpdmUgbGlua2VyIGZlYXR1cmVzIG9uCisgICAgICAgICMgdGhlIHBsYXRmb3JtIGl0IGlzIGJlaW5nIHVzZWQgb24uCisgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJGxpYicKKyAgICAgIGZpCisKKyAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKyAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAtdiAiXkNvbmZpZ3VyZWQgd2l0aDoiIHwgJEdSRVAgIlwtTCInCisKKyAgICBlbHNlCisgICAgICBHWFg9bm8KKyAgICAgIHdpdGhfZ251X2xkPW5vCisgICAgICB3bGFyYz0KKyAgICBmaQorCisgICAgIyBQT1JUTUU6IGZpbGwgaW4gYSBkZXNjcmlwdGlvbiBvZiB5b3VyIHN5c3RlbSdzIEMrKyBsaW5rIGNoYXJhY3RlcmlzdGljcworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAiID4mNjsgfQorICAgIGxkX3NobGlic19DWFg9eWVzCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4MyopCisgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICBsZF9zaGxpYnNfQ1hYPW5vCisgICAgICAgIDs7CisgICAgICBhaXhbNC05XSopCisgICAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgICAgICAgICAgIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAorICAgICAgICAgICMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgorICAgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKyAgICAgICAgICBleHBfc3ltX2ZsYWc9Jy1CZXhwb3J0JworICAgICAgICAgIG5vX2VudHJ5X2ZsYWc9IiIKKyAgICAgICAgZWxzZQorICAgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKworICAgICAgICAgICMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAorICAgICAgICAgICMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQorICAgICAgICAgICMgbmVlZCB0byBkbyBydW50aW1lIGxpbmtpbmcuCisgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlsyM118YWl4NC5bMjNdLip8YWl4WzUtOV0qKQorCSAgICBmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KKwkgICAgICBjYXNlICRsZF9mbGFnIGluCisJICAgICAgKi1icnRsKikKKwkgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCisJICAgICAgICBicmVhaworCSAgICAgICAgOzsKKwkgICAgICBlc2FjCisJICAgIGRvbmUKKwkgICAgOzsKKyAgICAgICAgICBlc2FjCisKKyAgICAgICAgICBleHBfc3ltX2ZsYWc9Jy1iZXhwb3J0JworICAgICAgICAgIG5vX2VudHJ5X2ZsYWc9Jy1ibm9lbnRyeScKKyAgICAgICAgZmkKKworICAgICAgICAjIFdoZW4gbGFyZ2UgZXhlY3V0YWJsZXMgb3Igc2hhcmVkIG9iamVjdHMgYXJlIGJ1aWx0LCBBSVggbGQgY2FuCisgICAgICAgICMgaGF2ZSBwcm9ibGVtcyBjcmVhdGluZyB0aGUgdGFibGUgb2YgY29udGVudHMuICBJZiBsaW5raW5nIGEgbGlicmFyeQorICAgICAgICAjIG9yIHByb2dyYW0gcmVzdWx0cyBpbiAiZXJyb3IgVE9DIG92ZXJmbG93IiBhZGQgLW1taW5pbWFsLXRvYyB0bworICAgICAgICAjIENYWEZMQUdTL0NGTEFHUyBmb3IgZysrL2djYy4gIEluIHRoZSBjYXNlcyB3aGVyZSB0aGF0IGlzIG5vdAorICAgICAgICAjIGVub3VnaCB0byBmaXggdGhlIHByb2JsZW0sIGFkZCAtV2wsLWJiaWd0b2MgdG8gTERGTEFHUy4KKworICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPScnCisgICAgICAgIGhhcmRjb2RlX2RpcmVjdF9DWFg9eWVzCisgICAgICAgIGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZV9DWFg9eWVzCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPSc6JworICAgICAgICBsaW5rX2FsbF9kZXBsaWJzX0NYWD15ZXMKKyAgICAgICAgZmlsZV9saXN0X3NwZWNfQ1hYPScke3dsfS1mLCcKKworICAgICAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMDEyXXxhaXg0LlswMTJdLiopCisgICAgICAgICAgIyBXZSBvbmx5IHdhbnQgdG8gZG8gdGhpcyBvbiBBSVggNC4yIGFuZCBsb3dlciwgdGhlIGNoZWNrCisgICAgICAgICAgIyBiZWxvdyBmb3IgYnJva2VuIGNvbGxlY3QyIGRvZXNuJ3Qgd29yayB1bmRlciA0LjMrCisJICBjb2xsZWN0Mm5hbWU9YCR7Q0N9IC1wcmludC1wcm9nLW5hbWU9Y29sbGVjdDJgCisJICBpZiB0ZXN0IC1mICIkY29sbGVjdDJuYW1lIiAmJgorCSAgICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCAkR1JFUCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKKwkgIHRoZW4KKwkgICAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCisJICAgIDoKKwkgIGVsc2UKKwkgICAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgorCSAgICBoYXJkY29kZV9kaXJlY3RfQ1hYPXVuc3VwcG9ydGVkCisJICAgICMgSXQgZmFpbHMgdG8gZmluZCB1bmluc3RhbGxlZCBsaWJyYXJpZXMgd2hlbiB0aGUgdW5pbnN0YWxsZWQKKwkgICAgIyBwYXRoIGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGxpYnBhdGguICBTZXR0aW5nIGhhcmRjb2RlX21pbnVzX0wKKwkgICAgIyB0byB1bnN1cHBvcnRlZCBmb3JjZXMgcmVsaW5raW5nCisJICAgIGhhcmRjb2RlX21pbnVzX0xfQ1hYPXllcworCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nLUwkbGliZGlyJworCSAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD0KKwkgIGZpCisgICAgICAgICAgZXNhYworICAgICAgICAgIHNoYXJlZF9mbGFnPSctc2hhcmVkJworCSAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisJICAgIHNoYXJlZF9mbGFnPSIkc2hhcmVkX2ZsYWcgIicke3dsfS1HJworCSAgZmkKKyAgICAgICAgZWxzZQorICAgICAgICAgICMgbm90IHVzaW5nIGdjYworICAgICAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJICAjIFZpc3VhbEFnZSBDKyssIFZlcnNpb24gNS41IGZvciBBSVggNUwgZm9yIElBLTY0LCBCZXRhIDMgUmVsZWFzZQorCSAgIyBjaG9rZXMgb24gLVdsLC1HLiBUaGUgZm9sbG93aW5nIGxpbmUgaXMgY29ycmVjdDoKKwkgIHNoYXJlZF9mbGFnPSctRycKKyAgICAgICAgICBlbHNlCisJICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorCSAgICAgIHNoYXJlZF9mbGFnPScke3dsfS1HJworCSAgICBlbHNlCisJICAgICAgc2hhcmVkX2ZsYWc9JyR7d2x9LWJNOlNSRScKKwkgICAgZmkKKyAgICAgICAgICBmaQorICAgICAgICBmaQorCisgICAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR7d2x9LWJleHBhbGwnCisgICAgICAgICMgSXQgc2VlbXMgdGhhdCAtYmV4cGFsbCBkb2VzIG5vdCBleHBvcnQgc3ltYm9scyBiZWdpbm5pbmcgd2l0aAorICAgICAgICAjIHVuZGVyc2NvcmUgKF8pLCBzbyBpdCBpcyBiZXR0ZXIgdG8gZ2VuZXJhdGUgYSBsaXN0IG9mIHN5bWJvbHMgdG8KKwkjIGV4cG9ydC4KKyAgICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0NYWD15ZXMKKyAgICAgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisgICAgICAgICAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVudGltZSBsb2FkaW5nIGZsYWdzICgtYnJ0bCksCisgICAgICAgICAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorICAgICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nLWJlcm9rJworICAgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbiBlbXB0eQorICAgICAgICAgICMgZXhlY3V0YWJsZS4KKyAgICAgICAgICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iID0gc2V0OyB0aGVuCisgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorZWxzZQorICBpZiAke2x0X2N2X2FpeF9saWJwYXRoX19DWFgrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgIGx0X2FpeF9saWJwYXRoX3NlZD0nCisgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisJICAvXjAvIHsKKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworCSAgICAgIHAKKwkgIH0KKyAgICAgIH0nCisgIGx0X2N2X2FpeF9saWJwYXRoX19DWFg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisgICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoX19DWFgiOyB0aGVuCisgICAgbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKyAgZmkKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWCI7IHRoZW4KKyAgICBsdF9jdl9haXhfbGlicGF0aF9fQ1hYPSIvdXNyL2xpYjovbGliIgorICBmaQorCitmaQorCisgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF9fQ1hYCitmaQorCisgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisKKyAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZnVuY19lY2hvX2FsbCAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKKyAgICAgICAgZWxzZQorICAgICAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1SICRsaWJkaXI6L3Vzci9saWI6L2xpYicKKwkgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPSIteiBub2RlZnMiCisJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyAke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzIgorICAgICAgICAgIGVsc2UKKwkgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisJICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KKwkgICAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgorICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKK2Vsc2UKKyAgaWYgJHtsdF9jdl9haXhfbGlicGF0aF9fQ1hYKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICBsdF9haXhfbGlicGF0aF9zZWQ9JworICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworCSAgL14wLyB7CisJICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KKwkgICAgICBwCisJICB9CisgICAgICB9JworICBsdF9jdl9haXhfbGlicGF0aF9fQ1hYPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF9fQ1hYIjsgdGhlbgorICAgIGx0X2N2X2FpeF9saWJwYXRoX19DWFg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisgIGZpCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoX19DWFgiOyB0aGVuCisgICAgbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWD0iL3Vzci9saWI6L2xpYiIKKyAgZmkKKworZmkKKworICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWAorZmkKKworCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKwkgICAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKKwkgICAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorCSAgICBub191bmRlZmluZWRfZmxhZ19DWFg9JyAke3dsfS1iZXJub3RvaycKKwkgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPScgJHt3bH0tYmVyb2snCisJICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKwkgICAgICAjIFdlIG9ubHkgdXNlIHRoaXMgY29kZSBmb3IgR05VIGxkcyB0aGF0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlLgorCSAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICAgIGVsc2UKKwkgICAgICAjIEV4cG9ydGVkIHN5bWJvbHMgY2FuIGJlIHB1bGxlZCBpbnRvIHNoYXJlZCBvYmplY3RzIGZyb20gYXJjaGl2ZXMKKwkgICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9JyRjb252ZW5pZW5jZScKKwkgICAgZmkKKwkgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPXllcworCSAgICAjIFRoaXMgaXMgc2ltaWxhciB0byBob3cgQUlYIHRyYWRpdGlvbmFsbHkgYnVpbGRzIGl0cyBzaGFyZWQKKwkgICAgIyBsaWJyYXJpZXMuCisJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHt3bH0tYm5vZW50cnkgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWJFOiRleHBvcnRfc3ltYm9scyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9fiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS5hICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKworICAgICAgYmVvcyopCisJaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPXVuc3VwcG9ydGVkCisJICAjIEpvc2VwaCBCZWNrZW5iYWNoIDxqcmIzQGJlc3QuY29tPiBzYXlzIHNvbWUgcmVsZWFzZXMgb2YgZ2NjCisJICAjIHN1cHBvcnQgLS11bmRlZmluZWQuICBUaGlzIGRlc2VydmVzIHNvbWUgaW52ZXN0aWdhdGlvbi4gIEZJWE1FCisJICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLW5vc3RhcnQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJZWxzZQorCSAgbGRfc2hsaWJzX0NYWD1ubworCWZpCisJOzsKKworICAgICAgY2hvcnVzKikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICAqKQorCSAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICBsZF9zaGxpYnNfQ1hYPW5vCisJICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKwljYXNlICRHWFgsJGNjX2Jhc2VuYW1lIGluCisJLGNsKiB8IG5vLGNsKikKKwkgICMgTmF0aXZlIE1TVkMKKwkgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKKwkgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nICcKKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD11bnN1cHBvcnRlZAorCSAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0NYWD15ZXMKKwkgIGZpbGVfbGlzdF9zcGVjX0NYWD0nQCcKKwkgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisJICBsaWJleHQ9bGliCisJICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKwkgIHNocmV4dF9jbWRzPSIuZGxsIgorCSAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorCSAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtZGxsfmxpbmtuYW1lcz0nCisJICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKwkgICAgICAkU0VEIC1uIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgLWUgJzFcXFwhcCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKwkgICAgZWxzZQorCSAgICAgICRTRUQgLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworCSAgICBmaX4KKwkgICAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgorCSAgICBsaW5rbmFtZXM9JworCSAgIyBUaGUgbGlua2VyIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgYnVpbGQgYSBzdGF0aWMgbGliIGlmIHdlIGJ1aWxkIGEgRExMLgorCSAgIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsIENYWCk9J3RydWUnCisJICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0NYWD15ZXMKKwkgICMgRG9uJ3QgdXNlIHJhbmxpYgorCSAgb2xkX3Bvc3RpbnN0YWxsX2NtZHNfQ1hYPSdjaG1vZCA2NDQgJG9sZGxpYicKKwkgIHBvc3RsaW5rX2NtZHNfQ1hYPSdsdF9vdXRwdXRmaWxlPSJAT1VUUFVUQCJ+CisJICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iQFRPT0xfT1VUUFVUQCJ+CisJICAgIGNhc2UgJGx0X291dHB1dGZpbGUgaW4KKwkgICAgICAqLmV4ZXwqLkVYRSkgOzsKKwkgICAgICAqKQorCQlsdF9vdXRwdXRmaWxlPSIkbHRfb3V0cHV0ZmlsZS5leGUiCisJCWx0X3Rvb2xfb3V0cHV0ZmlsZT0iJGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUiCisJCTs7CisJICAgIGVzYWN+CisJICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkbHRfb3V0cHV0ZmlsZSJ+CisJICAgIGlmIHRlc3QgIiRNQU5JRkVTVF9UT09MIiAhPSAiOiIgJiYgdGVzdCAtZiAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOyB0aGVuCisJICAgICAgJE1BTklGRVNUX1RPT0wgLW1hbmlmZXN0ICIkbHRfdG9vbF9vdXRwdXRmaWxlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6IiRsdF90b29sX291dHB1dGZpbGUiIHx8IGV4aXQgMTsKKwkgICAgICAkUk0gIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsKKwkgICAgZmknCisJICA7OworCSopCisJICAjIGcrKworCSAgIyBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsIENYWCkgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCisJICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1MJGxpYmRpcicKKwkgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR7d2x9LS1leHBvcnQtYWxsLXN5bWJvbHMnCisJICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9dW5zdXBwb3J0ZWQKKwkgIGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFg9bm8KKwkgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfQ1hYPXllcworCisJICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisJICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKwkgICAgIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlICgxc3QgbGluZQorCSAgICAjIGlzIEVYUE9SVFMpLCB1c2UgaXQgYXMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZC4uLgorCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKwkgICAgICBjcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisJICAgIGVsc2UKKwkgICAgICBlY2hvIEVYUE9SVFMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKwkgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworCSAgICBmaX4KKwkgICAgJENDIC1zaGFyZWQgLW5vc3RkbGliICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworCSAgZWxzZQorCSAgICBsZF9zaGxpYnNfQ1hYPW5vCisJICBmaQorCSAgOzsKKwllc2FjCisJOzsKKyAgICAgIGRhcndpbiogfCByaGFwc29keSopCisKKworICBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9bm8KKyAgaGFyZGNvZGVfZGlyZWN0X0NYWD1ubworICBoYXJkY29kZV9hdXRvbWF0aWNfQ1hYPXllcworICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD11bnN1cHBvcnRlZAorICBpZiB0ZXN0ICIkbHRfY3ZfbGRfZm9yY2VfbG9hZCIgPSAieWVzIjsgdGhlbgorICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlICR7d2x9LWZvcmNlX2xvYWQsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAnCisKKyAgZWxzZQorICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJworICBmaQorICBsaW5rX2FsbF9kZXBsaWJzX0NYWD15ZXMKKyAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPSIkX2x0X2Rhcl9hbGxvd191bmRlZmluZWQiCisgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgIGlmb3J0KikgX2x0X2Rhcl9jYW5fc2hhcmVkPXllcyA7OworICAgICAqKSBfbHRfZGFyX2Nhbl9zaGFyZWQ9JEdDQyA7OworICBlc2FjCisgIGlmIHRlc3QgIiRfbHRfZGFyX2Nhbl9zaGFyZWQiID0gInllcyI7IHRoZW4KKyAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD1mdW5jX2VjaG9fYWxsCisgICAgYXJjaGl2ZV9jbWRzX0NYWD0iXCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJF9sdF9kYXJfc2luZ2xlX21vZCR7X2x0X2RzeW11dGlsfSIKKyAgICBtb2R1bGVfY21kc19DWFg9IlwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyR7X2x0X2RzeW11dGlsfSIKKyAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0ic2VkICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAke19sdF9kYXJfc2luZ2xlX21vZH0ke19sdF9kYXJfZXhwb3J0X3N5bXN9JHtfbHRfZHN5bXV0aWx9IgorICAgIG1vZHVsZV9leHBzeW1fY21kc19DWFg9InNlZCAtZSAncyxeLF8sJyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+XCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKKyAgICAgICBpZiB0ZXN0ICIkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCIgIT0gInllcyI7IHRoZW4KKyAgICAgIGFyY2hpdmVfY21kc19DWFg9IlwkQ0MgLXIgLWtlZXBfcHJpdmF0ZV9leHRlcm5zIC1ub3N0ZGxpYiAtbyBcJHtsaWJ9LW1hc3Rlci5vIFwkbGlib2Jqc35cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCR7bGlifS1tYXN0ZXIubyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcke19sdF9kc3ltdXRpbH0iCisgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0ic2VkICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIC1yIC1rZWVwX3ByaXZhdGVfZXh0ZXJucyAtbm9zdGRsaWIgLW8gXCR7bGlifS1tYXN0ZXIubyBcJGxpYm9ianN+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwke2xpYn0tbWFzdGVyLm8gXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nJHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKKyAgICBmaQorCisgIGVsc2UKKyAgbGRfc2hsaWJzX0NYWD1ubworICBmaQorCisJOzsKKworICAgICAgZGd1eCopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgZWMrKyopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBsZF9zaGxpYnNfQ1hYPW5vCisJICAgIDs7CisgICAgICAgICAgZ2hjeCopCisJICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBsZF9zaGxpYnNfQ1hYPW5vCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIGxkX3NobGlic19DWFg9bm8KKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICBmcmVlYnNkMi4qKQorICAgICAgICAjIEMrKyBzaGFyZWQgbGlicmFyaWVzIHJlcG9ydGVkIHRvIGJlIGZhaXJseSBicm9rZW4gYmVmb3JlCisJIyBzd2l0Y2ggdG8gRUxGCisgICAgICAgIGxkX3NobGlic19DWFg9bm8KKyAgICAgICAgOzsKKworICAgICAgZnJlZWJzZC1lbGYqKQorICAgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9bm8KKyAgICAgICAgOzsKKworICAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorICAgICAgICAjIEZyZWVCU0QgMyBhbmQgbGF0ZXIgdXNlIEdOVSBDKysgYW5kIEdOVSBsZCB3aXRoIHN0YW5kYXJkIEVMRgorICAgICAgICAjIGNvbnZlbnRpb25zCisgICAgICAgIGxkX3NobGlic19DWFg9eWVzCisgICAgICAgIDs7CisKKyAgICAgIGdudSopCisgICAgICAgIDs7CisKKyAgICAgIGhhaWt1KikKKyAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICAgIGxpbmtfYWxsX2RlcGxpYnNfQ1hYPXllcworICAgICAgICA7OworCisgICAgICBocHV4OSopCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfStiICR7d2x9JGxpYmRpcicKKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9OgorICAgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPScke3dsfS1FJworICAgICAgICBoYXJkY29kZV9kaXJlY3RfQ1hYPXllcworICAgICAgICBoYXJkY29kZV9taW51c19MX0NYWD15ZXMgIyBOb3QgaW4gdGhlIHNlYXJjaCBQQVRILAorCQkJCSAgICAgICAgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdAorCQkJCSAgICAgICAgICAgICAjIGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgQ0MqKQorICAgICAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgICAgICBsZF9zaGxpYnNfQ1hYPW5vCisgICAgICAgICAgICA7OworICAgICAgICAgIGFDQyopCisgICAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLWIgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKyAgICAgICAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorICAgICAgICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisgICAgICAgICAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorICAgICAgICAgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorICAgICAgICAgICAgIyBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCgkQ0MgLWIgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEpIHwgJEVHUkVQICJcLUwiYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGZ1bmNfZWNob19hbGwgIiRsaXN0IicKKyAgICAgICAgICAgIDs7CisgICAgICAgICAgKikKKyAgICAgICAgICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcGljX2ZsYWcgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgICAgICAgIGxkX3NobGlic19DWFg9bm8KKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIGhwdXgxMCp8aHB1eDExKikKKyAgICAgICAgaWYgdGVzdCAkd2l0aF9nbnVfbGQgPSBubzsgdGhlbgorCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworCSAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9OgorCisgICAgICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgICAgICAgIGhwcGEqNjQqfGlhNjQqKQorICAgICAgICAgICAgICA7OworICAgICAgICAgICAgKikKKwkgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPScke3dsfS1FJworICAgICAgICAgICAgICA7OworICAgICAgICAgIGVzYWMKKyAgICAgICAgZmkKKyAgICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgICAgICBocHBhKjY0KnxpYTY0KikKKyAgICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdF9DWFg9bm8KKyAgICAgICAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPW5vCisgICAgICAgICAgICA7OworICAgICAgICAgICopCisgICAgICAgICAgICBoYXJkY29kZV9kaXJlY3RfQ1hYPXllcworICAgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlX0NYWD15ZXMKKyAgICAgICAgICAgIGhhcmRjb2RlX21pbnVzX0xfQ1hYPXllcyAjIE5vdCBpbiB0aGUgc2VhcmNoIFBBVEgsCisJCQkJCSAgICAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0CisJCQkJCSAgICAgICAgICMgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBsZF9zaGxpYnNfQ1hYPW5vCisJICAgIDs7CisgICAgICAgICAgYUNDKikKKwkgICAgY2FzZSAkaG9zdF9jcHUgaW4KKwkgICAgICBocHBhKjY0KikKKwkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICAgIDs7CisJICAgICAgaWE2NCopCisJICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICA7OworCSAgICAgICopCisJICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICMKKwkgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQorCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorCSAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisJICAgICMgZGVwZW5kZW5jaWVzLgorCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCgkQ0MgLWIgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEpIHwgJEdSRVAgIlwtTCJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiJGxpc3QiJworCSAgICA7OworICAgICAgICAgICopCisJICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisJICAgICAgaWYgdGVzdCAkd2l0aF9nbnVfbGQgPSBubzsgdGhlbgorCSAgICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKwkgICAgICAgICAgaHBwYSo2NCopCisJICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgICAgIDs7CisJICAgICAgICAgIGlhNjQqKQorCSAgICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICAgICAgOzsKKwkgICAgICAgICAgKikKKwkgICAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICAgICAgOzsKKwkgICAgICAgIGVzYWMKKwkgICAgICBmaQorCSAgICBlbHNlCisJICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgICAgbGRfc2hsaWJzX0NYWD1ubworCSAgICBmaQorCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIGludGVyaXhbMy05XSopCisJaGFyZGNvZGVfZGlyZWN0X0NYWD1ubworCWhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPW5vCisJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHt3bH0tRScKKwkjIEhhY2s6IE9uIEludGVyaXggMy54LCB3ZSBjYW5ub3QgY29tcGlsZSBQSUMgYmVjYXVzZSBvZiBhIGJyb2tlbiBnY2MuCisJIyBJbnN0ZWFkLCBzaGFyZWQgbGlicmFyaWVzIGFyZSBsb2FkZWQgYXQgYW4gaW1hZ2UgYmFzZSAoMHgxMDAwMDAwMCBieQorCSMgZGVmYXVsdCkgYW5kIHJlbG9jYXRlZCBpZiB0aGV5IGNvbmZsaWN0LCB3aGljaCBpcyBhIHNsb3cgdmVyeSBtZW1vcnkKKwkjIGNvbnN1bWluZyBhbmQgZnJhZ21lbnRpbmcgcHJvY2Vzcy4gIFRvIGF2b2lkIHRoaXMsIHdlIHBpY2sgYSByYW5kb20sCisJIyAyNTYgS2lCLWFsaWduZWQgaW1hZ2UgYmFzZSBiZXR3ZWVuIDB4NTAwMDAwMDAgYW5kIDB4NkZGQzAwMDAgYXQgbGluaworCSMgdGltZS4gIE1vdmluZyB1cCBmcm9tIDB4MTAwMDAwMDAgYWxzbyBhbGxvd3MgbW9yZSBzYnJrKDIpIHNwYWNlLgorCWFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisJYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J3NlZCAicyxeLF8sIiAkZXhwb3J0X3N5bWJvbHMgPiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1yZXRhaW4tc3ltYm9scy1maWxlLCRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisJOzsKKyAgICAgIGlyaXg1KiB8IGlyaXg2KikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyopCisJICAgICMgU0dJIEMrKworCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtYWxsIC1tdWx0aWdvdCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKworCSAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKwkgICAgIyAiQ0MgLWFyIiwgd2hlcmUgIkNDIiBpcyB0aGUgSVJJWCBDKysgY29tcGlsZXIuICBUaGlzIGlzCisJICAgICMgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VyZSBpbnN0YW50aWF0ZWQgdGVtcGxhdGVzIGFyZSBpbmNsdWRlZAorCSAgICAjIGluIHRoZSBhcmNoaXZlLgorCSAgICBvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1hciAtV1IsLXUgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorCSAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkgICAgICBlbHNlCisJICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAtbyAkbGliJworCSAgICAgIGZpCisJICAgIGZpCisJICAgIGxpbmtfYWxsX2RlcGxpYnNfQ1hYPXllcworCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKKyAgICAgICAgaW5oZXJpdF9ycGF0aF9DWFg9eWVzCisgICAgICAgIDs7CisKKyAgICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBLQ0MqKQorCSAgICAjIEt1Y2sgYW5kIEFzc29jaWF0ZXMsIEluYy4gKEtBSSkgQysrIENvbXBpbGVyCisKKwkgICAgIyBLQ0Mgd2lsbCBvbmx5IGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5IGlmIHRoZSBvdXRwdXQgZmlsZQorCSAgICAjIGVuZHMgd2l0aCAiLnNvIiAob3IgIi5zbCIgZm9yIEhQLVVYKSwgc28gcmVuYW1lIHRoZSBsaWJyYXJ5CisJICAgICMgdG8gaXRzIHByb3BlciBuYW1lICh3aXRoIHZlcnNpb24pIGFmdGVyIGxpbmtpbmcuCisJICAgIGFyY2hpdmVfY21kc19DWFg9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW14oKTAtOUEtWmEtent9XVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gJGxpYiB8ICRTRUQgLWUgInMvXCR7dGVtcGV4dH1cLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYjsgbXYgXCR0ZW1wbGliICRsaWInCisJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFteKCkwLTlBLVphLXp7fV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICRsaWIgfCAkU0VEIC1lICJzL1wke3RlbXBleHR9XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWIgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHM7IG12IFwkdGVtcGxpYiAkbGliJworCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgIworCSAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisJICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCisJICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKwkgICAgIyBkZXBlbmRlbmNpZXMuCisJICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAtbyBsaWJjb25mdGVzdCRzaGFyZWRfZXh0IDI+JjEgfCAkR1JFUCAibGQiYDsgcm0gLWYgbGliY29uZnRlc3Qkc2hhcmVkX2V4dDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGZ1bmNfZWNob19hbGwgIiRsaXN0IicKKworCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwkgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworCisJICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZworCSAgICAjICJDQyAtQnN0YXRpYyIsIHdoZXJlICJDQyIgaXMgdGhlIEtBSSBDKysgY29tcGlsZXIuCisJICAgIG9sZF9hcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLUJzdGF0aWMgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwkgICAgOzsKKwkgIGljcGMqIHwgZWNwYyogKQorCSAgICAjIEludGVsIEMrKworCSAgICB3aXRoX2dudV9sZD15ZXMKKwkgICAgIyB2ZXJzaW9uIDguMCBhbmQgYWJvdmUgb2YgaWNwYyBjaG9rZSBvbiBtdWx0aXBseSBkZWZpbmVkIHN5bWJvbHMKKwkgICAgIyBpZiB3ZSBhZGQgJHByZWRlcF9vYmplY3RzIGFuZCAkcG9zdGRlcF9vYmplY3RzLCBob3dldmVyIDcuMSBhbmQKKwkgICAgIyBlYXJsaWVyIGRvIG5vdCBhZGQgdGhlIG9iamVjdHMgdGhlbXNlbHZlcy4KKwkgICAgY2FzZSBgJENDIC1WIDI+JjFgIGluCisJICAgICAgKiJWZXJzaW9uIDcuIiopCisJICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkJYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCQk7OworCSAgICAgICopICAjIFZlcnNpb24gOC4wIG9yIG5ld2VyCisJICAgICAgICB0bXBfaWR5bj0KKwkgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisJCSAgaWE2NCopIHRtcF9pZHluPScgLWlfZHluYW1pYyc7OworCQllc2FjCisJICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCciJHRtcF9pZHluIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJCWFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCciJHRtcF9pZHluIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJCTs7CisJICAgIGVzYWMKKwkgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vCisJICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ycGF0aCwkbGliZGlyJworCSAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCisJICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICAgIDs7CisgICAgICAgICAgcGdDQyogfCBwZ2NwcCopCisgICAgICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIEMrKyBjb21waWxlcgorCSAgICBjYXNlIGAkQ0MgLVZgIGluCisJICAgICpwZ0NDXCBbMS01XS4qIHwgKnBnY3BwXCBbMS01XS4qKQorCSAgICAgIHByZWxpbmtfY21kc19DWFg9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisJCXJtIC1yZiAkdHBsZGlyfgorCQkkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRvYmpzICRsaWJvYmpzICRjb21waWxlX2RlcGxpYnN+CisJCWNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYCInCisJICAgICAgb2xkX2FyY2hpdmVfY21kc19DWFg9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisJCXJtIC1yZiAkdHBsZGlyfgorCQkkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRvbGRvYmpzJG9sZF9kZXBsaWJzfgorCQkkQVIgJEFSX0ZMQUdTICRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYH4KKwkJJFJBTkxJQiAkb2xkbGliJworCSAgICAgIGFyY2hpdmVfY21kc19DWFg9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisJCXJtIC1yZiAkdHBsZGlyfgorCQkkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkY29udmVuaWVuY2UgJHBvc3RkZXBfb2JqZWN0c34KKwkJJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYCAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIC1vICRsaWInCisJICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisJCXJtIC1yZiAkdHBsZGlyfgorCQkkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkY29udmVuaWVuY2UgJHBvc3RkZXBfb2JqZWN0c34KKwkJJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYCAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkgICAgICA7OworCSAgICAqKSAjIFZlcnNpb24gNiBhbmQgYWJvdmUgdXNlIHdlYWsgc3ltYm9scworCSAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAtbyAkbGliJworCSAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCSAgICAgIDs7CisJICAgIGVzYWMKKworCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLXJwYXRoICR7d2x9JGxpYmRpcicKKwkgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworCSAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworICAgICAgICAgICAgOzsKKwkgIGN4eCopCisJICAgICMgQ29tcGFxIEMrKworCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAgLW8gJGxpYiAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scycKKworCSAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nLXJwYXRoICRsaWJkaXInCisJICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKKworCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgIworCSAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisJICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCisJICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKwkgICAgIyBkZXBlbmRlbmNpZXMuCisJICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAibGQiYDsgdGVtcGxpc3Q9YGZ1bmNfZWNob19hbGwgIiR0ZW1wbGlzdCIgfCAkU0VEICJzL1woXi4qbGQuKlwpXCggLipsZCAuKiRcKS9cMS8iYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGZ1bmNfZWNob19hbGwgIlgkbGlzdCIgfCAkWHNlZCcKKwkgICAgOzsKKwkgIHhsKiB8IG1waXhsKiB8IGJneGwqKQorCSAgICAjIElCTSBYTCA4LjAgb24gUFBDLCB3aXRoIEdOVSBsZAorCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworCSAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCisJICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtcW1rc2hyb2JqICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICBpZiB0ZXN0ICJ4JHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyIgPSB4eWVzOyB0aGVuCisJICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJCWNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkJZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJCSRDQyAtcW1rc2hyb2JqICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS12ZXJzaW9uLXNjcmlwdCAke3dsfSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworCSAgICBmaQorCSAgICA7OworCSAgKikKKwkgICAgY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCisJICAgICpTdW5cIEMqKQorCSAgICAgICMgU3VuIEMrKyA1LjkKKwkgICAgICBub191bmRlZmluZWRfZmxhZ19DWFg9JyAtemRlZnMnCisJICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scycKKwkgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nLVIkbGliZGlyJworCSAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgICAgICBjb21waWxlcl9uZWVkc19vYmplY3RfQ1hYPXllcworCisJICAgICAgIyBOb3Qgc3VyZSB3aGV0aGVyIHNvbWV0aGluZyBiYXNlZCBvbgorCSAgICAgICMgJENDICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAtbyBsaWJjb25mdGVzdCRzaGFyZWRfZXh0IDI+JjEKKwkgICAgICAjIHdvdWxkIGJlIGJldHRlci4KKwkgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZnVuY19lY2hvX2FsbCcKKworCSAgICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZworCSAgICAgICMgIkNDIC14YXIiLCB3aGVyZSAiQ0MiIGlzIHRoZSBTdW4gQysrIGNvbXBpbGVyLiAgVGhpcyBpcworCSAgICAgICMgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VyZSBpbnN0YW50aWF0ZWQgdGVtcGxhdGVzIGFyZSBpbmNsdWRlZAorCSAgICAgICMgaW4gdGhlIGFyY2hpdmUuCisJICAgICAgb2xkX2FyY2hpdmVfY21kc19DWFg9JyRDQyAteGFyIC1vICRvbGRsaWIgJG9sZG9ianMnCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgICA7OworCWVzYWMKKwk7OworCisgICAgICBseW54b3MqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwlsZF9zaGxpYnNfQ1hYPW5vCisJOzsKKworICAgICAgbTg4ayopCisgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICBsZF9zaGxpYnNfQ1hYPW5vCisJOzsKKworICAgICAgbXZzKikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBjeHgqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgbGRfc2hsaWJzX0NYWD1ubworCSAgICA7OworCSAgKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIGxkX3NobGlic19DWFg9bm8KKwkgICAgOzsKKwllc2FjCisJOzsKKworICAgICAgbmV0YnNkKikKKyAgICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKwkgIGFyY2hpdmVfY21kc19DWFg9JyRMRCAtQnNoYXJlYWJsZSAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkbGlua2VyX2ZsYWdzJworCSAgd2xhcmM9CisJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nLVIkbGliZGlyJworCSAgaGFyZGNvZGVfZGlyZWN0X0NYWD15ZXMKKwkgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPW5vCisJZmkKKwkjIFdvcmthcm91bmQgc29tZSBicm9rZW4gcHJlLTEuNSB0b29sY2hhaW5zCisJb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgY29uZnRlc3QuJG9iamV4dCB8ICRTRUQgLWUgInM6LWxnY2MgLWxjIC1sZ2NjOjoiJworCTs7CisKKyAgICAgICpudG8qIHwgKnFueCopCisgICAgICAgIGxkX3NobGlic19DWFg9eWVzCisJOzsKKworICAgICAgb3BlbmJzZDIqKQorICAgICAgICAjIEMrKyBzaGFyZWQgbGlicmFyaWVzIGFyZSBmYWlybHkgYnJva2VuCisJbGRfc2hsaWJzX0NYWD1ubworCTs7CisKKyAgICAgIG9wZW5ic2QqKQorCWlmIHRlc3QgLWYgL3Vzci9saWJleGVjL2xkLnNvOyB0aGVuCisJICBoYXJkY29kZV9kaXJlY3RfQ1hYPXllcworCSAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9bm8KKwkgIGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZV9DWFg9eWVzCisJICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRsaWInCisJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwkgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCSAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPScke3dsfS1FJworCSAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCisJICBmaQorCSAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9ZnVuY19lY2hvX2FsbAorCWVsc2UKKwkgIGxkX3NobGlic19DWFg9bm8KKwlmaQorCTs7CisKKyAgICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBLQ0MqKQorCSAgICAjIEt1Y2sgYW5kIEFzc29jaWF0ZXMsIEluYy4gKEtBSSkgQysrIENvbXBpbGVyCisKKwkgICAgIyBLQ0Mgd2lsbCBvbmx5IGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5IGlmIHRoZSBvdXRwdXQgZmlsZQorCSAgICAjIGVuZHMgd2l0aCAiLnNvIiAob3IgIi5zbCIgZm9yIEhQLVVYKSwgc28gcmVuYW1lIHRoZSBsaWJyYXJ5CisJICAgICMgdG8gaXRzIHByb3BlciBuYW1lICh3aXRoIHZlcnNpb24pIGFmdGVyIGxpbmtpbmcuCisJICAgIGFyY2hpdmVfY21kc19DWFg9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW14oKTAtOUEtWmEtent9XVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gIiRsaWIiIHwgJFNFRCAtZSAicy9cJHt0ZW1wZXh0fVwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliOyBtdiBcJHRlbXBsaWIgJGxpYicKKworCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwkgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9OgorCisJICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZworCSAgICAjIHRoZSBLQUkgQysrIGNvbXBpbGVyLgorCSAgICBjYXNlICRob3N0IGluCisJICAgICAgb3NmMyopIG9sZF9hcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLUJzdGF0aWMgLW8gJG9sZGxpYiAkb2xkb2JqcycgOzsKKwkgICAgICAqKSBvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1vICRvbGRsaWIgJG9sZG9ianMnIDs7CisJICAgIGVzYWMKKwkgICAgOzsKKyAgICAgICAgICBSQ0MqKQorCSAgICAjIFJhdGlvbmFsIEMrKyAyLjQuMQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgbGRfc2hsaWJzX0NYWD1ubworCSAgICA7OworICAgICAgICAgIGN4eCopCisJICAgIGNhc2UgJGhvc3QgaW4KKwkgICAgICBvc2YzKikKKwkgICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCisJICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisJCTs7CisJICAgICAgKikKKwkgICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKKwkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nZm9yIGkgaW4gYGNhdCAkZXhwb3J0X3N5bWJvbHNgOyBkbyBwcmludGYgIiVzICVzXFxuIiAtZXhwb3J0ZWRfc3ltYm9sICJcJGkiID4+ICRsaWIuZXhwOyBkb25lfgorCSAgICAgICAgICBlY2hvICItaGlkZGVuIj4+ICRsaWIuZXhwfgorCSAgICAgICAgICAkQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lICR7d2x9LWlucHV0ICR7d2x9JGxpYi5leHAgIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWJ+CisJICAgICAgICAgICRSTSAkbGliLmV4cCcKKwkgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSctcnBhdGggJGxpYmRpcicKKwkJOzsKKwkgICAgZXNhYworCisJICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKKworCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgIworCSAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisJICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCisJICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKwkgICAgIyBkZXBlbmRlbmNpZXMuCisJICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAibGQiIHwgJEdSRVAgLXYgImxkOiJgOyB0ZW1wbGlzdD1gZnVuY19lY2hvX2FsbCAiJHRlbXBsaXN0IiB8ICRTRUQgInMvXCheLipsZC4qXClcKCAuKmxkLiokXCkvXDEvImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICIkbGlzdCInCisJICAgIDs7CisJICAqKQorCSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwkgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworCSAgICAgIGNhc2UgJGhvc3QgaW4KKwkgICAgICAgIG9zZjMqKQorCSAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJCSAgOzsKKwkgICAgICAgICopCisJICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkJICA7OworCSAgICAgIGVzYWMKKworCSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisJICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9OgorCisJICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIC12ICJeQ29uZmlndXJlZCB3aXRoOiIgfCAkR1JFUCAiXC1MIicKKworCSAgICBlbHNlCisJICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgICAgbGRfc2hsaWJzX0NYWD1ubworCSAgICBmaQorCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIHBzb3MqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgbGRfc2hsaWJzX0NYWD1ubworICAgICAgICA7OworCisgICAgICBzdW5vczQqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKikKKwkgICAgIyBTdW4gQysrIDQueAorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgbGRfc2hsaWJzX0NYWD1ubworCSAgICA7OworICAgICAgICAgIGxjYyopCisJICAgICMgTHVjaWQKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIGxkX3NobGlic19DWFg9bm8KKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgbGRfc2hsaWJzX0NYWD1ubworCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIHNvbGFyaXMqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKiB8IHN1bkNDKikKKwkgICAgIyBTdW4gQysrIDQuMiwgNS54IGFuZCBDZW50ZXJsaW5lIEMrKworICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPXllcworCSAgICBub191bmRlZmluZWRfZmxhZ19DWFg9JyAtemRlZnMnCisJICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJICAgICAgJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHt3bH0tTSAke3dsfSRsaWIuZXhwIC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisKKwkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1SJGxpYmRpcicKKwkgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9bm8KKwkgICAgY2FzZSAkaG9zdF9vcyBpbgorCSAgICAgIHNvbGFyaXMyLlswLTVdIHwgc29sYXJpczIuWzAtNV0uKikgOzsKKwkgICAgICAqKQorCQkjIFRoZSBjb21waWxlciBkcml2ZXIgd2lsbCBjb21iaW5lIGFuZCByZW9yZGVyIGxpbmtlciBvcHRpb25zLAorCQkjIGJ1dCB1bmRlcnN0YW5kcyBgLXogbGlua2VyX2ZsYWcnLgorCSAgICAgICAgIyBTdXBwb3J0ZWQgc2luY2UgU29sYXJpcyAyLjYgKG1heWJlIDIuNS4xPykKKwkJd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPScteiBhbGxleHRyYWN0JGNvbnZlbmllbmNlIC16IGRlZmF1bHRleHRyYWN0JworCSAgICAgICAgOzsKKwkgICAgZXNhYworCSAgICBsaW5rX2FsbF9kZXBsaWJzX0NYWD15ZXMKKworCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZnVuY19lY2hvX2FsbCcKKworCSAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKwkgICAgIyAiQ0MgLXhhciIsIHdoZXJlICJDQyIgaXMgdGhlIFN1biBDKysgY29tcGlsZXIuICBUaGlzIGlzCisJICAgICMgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VyZSBpbnN0YW50aWF0ZWQgdGVtcGxhdGVzIGFyZSBpbmNsdWRlZAorCSAgICAjIGluIHRoZSBhcmNoaXZlLgorCSAgICBvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC14YXIgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwkgICAgOzsKKyAgICAgICAgICBnY3gqKQorCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCAkd2wkc29uYW1lIC1vICRsaWInCisKKwkgICAgIyBUaGUgQysrIGNvbXBpbGVyIG11c3QgYmUgdXNlZCB0byBjcmVhdGUgdGhlIGFyY2hpdmUuCisJICAgIG9sZF9hcmNoaXZlX2NtZHNfQ1hYPSckQ0MgJExERkxBR1MgLWFyY2hpdmUgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICAjIEdOVSBDKysgY29tcGlsZXIgd2l0aCBTb2xhcmlzIGxpbmtlcgorCSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwkgICAgICBub191bmRlZmluZWRfZmxhZ19DWFg9JyAke3dsfS16ICR7d2x9ZGVmcycKKwkgICAgICBpZiAkQ0MgLS12ZXJzaW9uIHwgJEdSRVAgLXYgJ14yXC43JyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkTERGTEFHUyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCAkd2wkc29uYW1lIC1vICRsaWInCisJICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorCQkgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHt3bH0tTSAkd2wkbGliLmV4cCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisKKwkgICAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAtdiAiXkNvbmZpZ3VyZWQgd2l0aDoiIHwgJEdSRVAgIlwtTCInCisJICAgICAgZWxzZQorCSAgICAgICAgIyBnKysgMi43IGFwcGVhcnMgdG8gcmVxdWlyZSBgLUcnIE5PVCBgLXNoYXJlZCcgb24gdGhpcworCSAgICAgICAgIyBwbGF0Zm9ybS4KKwkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtRyAtbm9zdGRsaWIgJExERkxBR1MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWggJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkJICAkQ0MgLUcgLW5vc3RkbGliICR7d2x9LU0gJHdsJGxpYi5leHAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworCisJICAgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtRyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIC12ICJeQ29uZmlndXJlZCB3aXRoOiIgfCAkR1JFUCAiXC1MIicKKwkgICAgICBmaQorCisJICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LVIgJHdsJGxpYmRpcicKKwkgICAgICBjYXNlICRob3N0X29zIGluCisJCXNvbGFyaXMyLlswLTVdIHwgc29sYXJpczIuWzAtNV0uKikgOzsKKwkJKikKKwkJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9JyR7d2x9LXogJHt3bH1hbGxleHRyYWN0JGNvbnZlbmllbmNlICR7d2x9LXogJHt3bH1kZWZhdWx0ZXh0cmFjdCcKKwkJICA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgc3lzdjQqdXcyKiB8IHN5c3Y1T3BlblVOSVgqIHwgc3lzdjVVbml4V2FyZTcuWzAxXS5bMTBdKiB8IHVuaXh3YXJlNyogfCBzY28zLjJ2NS4wLlswMjRdKikKKyAgICAgIG5vX3VuZGVmaW5lZF9mbGFnX0NYWD0nJHt3bH0teix0ZXh0JworICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD1ubworICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICBDQyopCisJICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLUcgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCSopCisJICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiopCisJIyBOb3RlOiBXZSBjYW4gTk9UIHVzZSAteiBkZWZzIGFzIHdlIG1pZ2h0IGRlc2lyZSwgYmVjYXVzZSB3ZSBkbyBub3QKKwkjIGxpbmsgd2l0aCAtbGMsIGFuZCB0aGF0IHdvdWxkIGNhdXNlIGFueSBzeW1ib2xzIHVzZWQgZnJvbSBsaWJjIHRvCisJIyBhbHdheXMgYmUgdW5yZXNvbHZlZCwgd2hpY2ggbWVhbnMganVzdCBhYm91dCBubyBsaWJyYXJ5IHdvdWxkCisJIyBldmVyIGxpbmsgY29ycmVjdGx5LiAgSWYgd2UncmUgbm90IHVzaW5nIEdOVSBsZCB3ZSB1c2UgLXogdGV4dAorCSMgdGhvdWdoLCB3aGljaCBkb2VzIGNhdGNoIHNvbWUgYmFkIHN5bWJvbHMgYnV0IGlzbid0IGFzIGhlYXZ5LWhhbmRlZAorCSMgYXMgLXogZGVmcy4KKwlub191bmRlZmluZWRfZmxhZ19DWFg9JyR7d2x9LXosdGV4dCcKKwlhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9JyR7d2x9LXosbm9kZWZzJworCWFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubworCWhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPW5vCisJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LVIsJGxpYmRpcicKKwloYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD0nOicKKwlsaW5rX2FsbF9kZXBsaWJzX0NYWD15ZXMKKwlleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPScke3dsfS1CZXhwb3J0JworCXJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKKworCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgQ0MqKQorCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLUcgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgICAgb2xkX2FyY2hpdmVfY21kc19DWFg9JyRDQyAtVHByZWxpbmtfb2JqZWN0cyAkb2xkb2Jqc34KKwkgICAgICAnIiRvbGRfYXJjaGl2ZV9jbWRzX0NYWCIKKwkgICAgcmVsb2FkX2NtZHNfQ1hYPSckQ0MgLVRwcmVsaW5rX29iamVjdHMgJHJlbG9hZF9vYmpzfgorCSAgICAgICciJHJlbG9hZF9jbWRzX0NYWCIKKwkgICAgOzsKKwkgICopCisJICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgICAgOzsKKwllc2FjCisgICAgICA7OworCisgICAgICB0YW5kZW0qKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIE5DQyopCisJICAgICMgTm9uU3RvcC1VWCBOQ0MgMy4yMAorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgbGRfc2hsaWJzX0NYWD1ubworCSAgICA7OworICAgICAgICAgICopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBsZF9zaGxpYnNfQ1hYPW5vCisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgdnh3b3JrcyopCisgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICBsZF9zaGxpYnNfQ1hYPW5vCisgICAgICAgIDs7CisKKyAgICAgICopCisgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICBsZF9zaGxpYnNfQ1hYPW5vCisgICAgICAgIDs7CisgICAgZXNhYworCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsZF9zaGxpYnNfQ1hYIiA+JjUKKyRhc19lY2hvICIkbGRfc2hsaWJzX0NYWCIgPiY2OyB9CisgICAgdGVzdCAiJGxkX3NobGlic19DWFgiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubworCisgICAgR0NDX0NYWD0iJEdYWCIKKyAgICBMRF9DWFg9IiRMRCIKKworICAgICMjIENBVkVBVCBFTVBUT1I6CisgICAgIyMgVGhlcmUgaXMgbm8gZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIGZvbGxvd2luZyBtYWNyb3MsIGRvIG5vdCBjaGFuZ2UKKyAgICAjIyB0aGUgcnVubmluZyBvcmRlciBvciBvdGhlcndpc2UgbW92ZSB0aGVtIGFyb3VuZCB1bmxlc3MgeW91IGtub3cgZXhhY3RseQorICAgICMjIHdoYXQgeW91IGFyZSBkb2luZy4uLgorICAgICMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG9iamVjdCBiZWluZyBsaW5rZWQ6CitwcmVkZXBfb2JqZWN0c19DWFg9Citwb3N0ZGVwX29iamVjdHNfQ1hYPQorcHJlZGVwc19DWFg9Citwb3N0ZGVwc19DWFg9Citjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYPQorCitjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorY2xhc3MgRm9vCit7CitwdWJsaWM6CisgIEZvbyAodm9pZCkgeyBhID0gMDsgfQorcHJpdmF0ZToKKyAgaW50IGE7Cit9OworX0xUX0VPRgorCisKK19sdF9saWJkZXBzX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKK2Nhc2UgIiRDQyAkQ0ZMQUdTICIgaW4gIygKKypcIC1mbHRvKlwgKikgQ0ZMQUdTPSIkQ0ZMQUdTIC1mbm8tbHRvIiA7OworKlwgLWZ3aG9wcipcICopIENGTEFHUz0iJENGTEFHUyAtZm5vLXdob3ByIiA7OworKlwgLWZ1c2UtbGlua2VyLXBsdWdpbipcICopIENGTEFHUz0iJENGTEFHUyAtZm5vLXVzZS1saW5rZXItcGx1Z2luIiA7OworZXNhYworCitpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCisgICMgUGFyc2UgdGhlIGNvbXBpbGVyIG91dHB1dCBhbmQgZXh0cmFjdCB0aGUgbmVjZXNzYXJ5CisgICMgb2JqZWN0cywgbGlicmFyaWVzIGFuZCBsaWJyYXJ5IGZsYWdzLgorCisgICMgU2VudGluZWwgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHdoZXRoZXIgb3Igbm90IHdlIGFyZSBiZWZvcmUKKyAgIyB0aGUgY29uZnRlc3Qgb2JqZWN0IGZpbGUuCisgIHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmU9bm8KKworICBmb3IgcCBpbiBgZXZhbCAiJG91dHB1dF92ZXJib3NlX2xpbmtfY21kImA7IGRvCisgICAgY2FzZSAke3ByZXZ9JHtwfSBpbgorCisgICAgLUwqIHwgLVIqIHwgLWwqKQorICAgICAgICMgU29tZSBjb21waWxlcnMgcGxhY2Ugc3BhY2UgYmV0d2VlbiAiLXtMLFJ9IiBhbmQgdGhlIHBhdGguCisgICAgICAgIyBSZW1vdmUgdGhlIHNwYWNlLgorICAgICAgIGlmIHRlc3QgJHAgPSAiLUwiIHx8CisgICAgICAgICAgdGVzdCAkcCA9ICItUiI7IHRoZW4KKwkgcHJldj0kcAorCSBjb250aW51ZQorICAgICAgIGZpCisKKyAgICAgICAjIEV4cGFuZCB0aGUgc3lzcm9vdCB0byBlYXNlIGV4dHJhY3RpbmcgdGhlIGRpcmVjdG9yaWVzIGxhdGVyLgorICAgICAgIGlmIHRlc3QgLXogIiRwcmV2IjsgdGhlbgorICAgICAgICAgY2FzZSAkcCBpbgorICAgICAgICAgLUwqKSBmdW5jX3N0cmlwbmFtZV9jbmYgJy1MJyAnJyAiJHAiOyBwcmV2PS1MOyBwPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKyAgICAgICAgIC1SKikgZnVuY19zdHJpcG5hbWVfY25mICctUicgJycgIiRwIjsgcHJldj0tUjsgcD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CisgICAgICAgICAtbCopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnLWwnICcnICIkcCI7IHByZXY9LWw7IHA9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworICAgICAgICAgZXNhYworICAgICAgIGZpCisgICAgICAgY2FzZSAkcCBpbgorICAgICAgID0qKSBmdW5jX3N0cmlwbmFtZV9jbmYgJz0nICcnICIkcCI7IHA9JGx0X3N5c3Jvb3QkZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CisgICAgICAgZXNhYworICAgICAgIGlmIHRlc3QgIiRwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lIiA9IG5vOyB0aGVuCisJIGNhc2UgJHtwcmV2fSBpbgorCSAtTCB8IC1SKQorCSAgICMgSW50ZXJuYWwgY29tcGlsZXIgbGlicmFyeSBwYXRocyBzaG91bGQgY29tZSBhZnRlciB0aG9zZQorCSAgICMgcHJvdmlkZWQgdGhlIHVzZXIuICBUaGUgcG9zdGRlcHMgYWxyZWFkeSBjb21lIGFmdGVyIHRoZQorCSAgICMgdXNlciBzdXBwbGllZCBsaWJzIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gcHJvY2VzcyB0aGVtLgorCSAgIGlmIHRlc3QgLXogIiRjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYIjsgdGhlbgorCSAgICAgY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWD0iJHtwcmV2fSR7cH0iCisJICAgZWxzZQorCSAgICAgY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWD0iJHtjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYfSAke3ByZXZ9JHtwfSIKKwkgICBmaQorCSAgIDs7CisJICMgVGhlICItbCIgY2FzZSB3b3VsZCBuZXZlciBjb21lIGJlZm9yZSB0aGUgb2JqZWN0IGJlaW5nCisJICMgbGlua2VkLCBzbyBkb24ndCBib3RoZXIgaGFuZGxpbmcgdGhpcyBjYXNlLgorCSBlc2FjCisgICAgICAgZWxzZQorCSBpZiB0ZXN0IC16ICIkcG9zdGRlcHNfQ1hYIjsgdGhlbgorCSAgIHBvc3RkZXBzX0NYWD0iJHtwcmV2fSR7cH0iCisJIGVsc2UKKwkgICBwb3N0ZGVwc19DWFg9IiR7cG9zdGRlcHNfQ1hYfSAke3ByZXZ9JHtwfSIKKwkgZmkKKyAgICAgICBmaQorICAgICAgIHByZXY9CisgICAgICAgOzsKKworICAgICoubHRvLiRvYmpleHQpIDs7ICMgSWdub3JlIEdDQyBMVE8gb2JqZWN0cworICAgICouJG9iamV4dCkKKyAgICAgICAjIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSB0ZXN0IG9iamVjdCBmaWxlIG9ubHkgc2hvd3MgdXAKKyAgICAgICAjIG9uY2UgaW4gdGhlIGNvbXBpbGVyIG91dHB1dC4KKyAgICAgICBpZiB0ZXN0ICIkcCIgPSAiY29uZnRlc3QuJG9iamV4dCI7IHRoZW4KKwkgcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZT15ZXMKKwkgY29udGludWUKKyAgICAgICBmaQorCisgICAgICAgaWYgdGVzdCAiJHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmUiID0gbm87IHRoZW4KKwkgaWYgdGVzdCAteiAiJHByZWRlcF9vYmplY3RzX0NYWCI7IHRoZW4KKwkgICBwcmVkZXBfb2JqZWN0c19DWFg9IiRwIgorCSBlbHNlCisJICAgcHJlZGVwX29iamVjdHNfQ1hYPSIkcHJlZGVwX29iamVjdHNfQ1hYICRwIgorCSBmaQorICAgICAgIGVsc2UKKwkgaWYgdGVzdCAteiAiJHBvc3RkZXBfb2JqZWN0c19DWFgiOyB0aGVuCisJICAgcG9zdGRlcF9vYmplY3RzX0NYWD0iJHAiCisJIGVsc2UKKwkgICBwb3N0ZGVwX29iamVjdHNfQ1hYPSIkcG9zdGRlcF9vYmplY3RzX0NYWCAkcCIKKwkgZmkKKyAgICAgICBmaQorICAgICAgIDs7CisKKyAgICAqKSA7OyAjIElnbm9yZSB0aGUgcmVzdC4KKworICAgIGVzYWMKKyAgZG9uZQorCisgICMgQ2xlYW4gdXAuCisgIHJtIC1mIGEub3V0IGEuZXhlCitlbHNlCisgIGVjaG8gImxpYnRvb2wubTQ6IGVycm9yOiBwcm9ibGVtIGNvbXBpbGluZyBDWFggdGVzdCBwcm9ncmFtIgorZmkKKworJFJNIC1mIGNvbmZlc3QuJG9iamV4dAorQ0ZMQUdTPSRfbHRfbGliZGVwc19zYXZlX0NGTEFHUworCisjIFBPUlRNRTogb3ZlcnJpZGUgYWJvdmUgdGVzdCBvbiBzeXN0ZW1zIHdoZXJlIGl0IGlzIGJyb2tlbgorY2FzZSAkaG9zdF9vcyBpbgoraW50ZXJpeFszLTldKikKKyAgIyBJbnRlcml4IDMuNSBpbnN0YWxscyBjb21wbGV0ZWx5IGhvc2VkIC5sYSBmaWxlcyBmb3IgQysrLCBzbyByYXRoZXIgdGhhbgorICAjIGhhY2sgYWxsIGFyb3VuZCBpdCwgbGV0J3MganVzdCB0cnVzdCAiZysrIiB0byBEVFJULgorICBwcmVkZXBfb2JqZWN0c19DWFg9CisgIHBvc3RkZXBfb2JqZWN0c19DWFg9CisgIHBvc3RkZXBzX0NYWD0KKyAgOzsKKworbGludXgqKQorICBjYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKyAgKlN1blwgQyopCisgICAgIyBTdW4gQysrIDUuOQorCisgICAgIyBUaGUgbW9yZSBzdGFuZGFyZHMtY29uZm9ybWluZyBzdGxwb3J0NCBsaWJyYXJ5IGlzCisgICAgIyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgQ3N0ZCBsaWJyYXJ5LiBBdm9pZCBzcGVjaWZ5aW5nCisgICAgIyBpdCBpZiBpdCdzIGluIENYWEZMQUdTLiBJZ25vcmUgbGliQ3J1biBhcworICAgICMgLWxpYnJhcnk9c3RscG9ydDQgZGVwZW5kcyBvbiBpdC4KKyAgICBjYXNlICIgJENYWCAkQ1hYRkxBR1MgIiBpbgorICAgICoiIC1saWJyYXJ5PXN0bHBvcnQ0ICIqKQorICAgICAgc29sYXJpc191c2Vfc3RscG9ydDQ9eWVzCisgICAgICA7OworICAgIGVzYWMKKworICAgIGlmIHRlc3QgIiRzb2xhcmlzX3VzZV9zdGxwb3J0NCIgIT0geWVzOyB0aGVuCisgICAgICBwb3N0ZGVwc19DWFg9Jy1saWJyYXJ5PUNzdGQgLWxpYnJhcnk9Q3J1bicKKyAgICBmaQorICAgIDs7CisgIGVzYWMKKyAgOzsKKworc29sYXJpcyopCisgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgIENDKiB8IHN1bkNDKikKKyAgICAjIFRoZSBtb3JlIHN0YW5kYXJkcy1jb25mb3JtaW5nIHN0bHBvcnQ0IGxpYnJhcnkgaXMKKyAgICAjIGluY29tcGF0aWJsZSB3aXRoIHRoZSBDc3RkIGxpYnJhcnkuIEF2b2lkIHNwZWNpZnlpbmcKKyAgICAjIGl0IGlmIGl0J3MgaW4gQ1hYRkxBR1MuIElnbm9yZSBsaWJDcnVuIGFzCisgICAgIyAtbGlicmFyeT1zdGxwb3J0NCBkZXBlbmRzIG9uIGl0LgorICAgIGNhc2UgIiAkQ1hYICRDWFhGTEFHUyAiIGluCisgICAgKiIgLWxpYnJhcnk9c3RscG9ydDQgIiopCisgICAgICBzb2xhcmlzX3VzZV9zdGxwb3J0ND15ZXMKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgIyBBZGRpbmcgdGhpcyByZXF1aXJlcyBhIGtub3duLWdvb2Qgc2V0dXAgb2Ygc2hhcmVkIGxpYnJhcmllcyBmb3IKKyAgICAjIFN1biBjb21waWxlciB2ZXJzaW9ucyBiZWZvcmUgNS42LCBlbHNlIFBJQyBvYmplY3RzIGZyb20gYW4gb2xkCisgICAgIyBhcmNoaXZlIHdpbGwgYmUgbGlua2VkIGludG8gdGhlIG91dHB1dCwgbGVhZGluZyB0byBzdWJ0bGUgYnVncy4KKyAgICBpZiB0ZXN0ICIkc29sYXJpc191c2Vfc3RscG9ydDQiICE9IHllczsgdGhlbgorICAgICAgcG9zdGRlcHNfQ1hYPSctbGlicmFyeT1Dc3RkIC1saWJyYXJ5PUNydW4nCisgICAgZmkKKyAgICA7OworICBlc2FjCisgIDs7Citlc2FjCisKKworY2FzZSAiICRwb3N0ZGVwc19DWFggIiBpbgorKiIgLWxjICIqKSBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9bm8gOzsKK2VzYWMKKyBjb21waWxlcl9saWJfc2VhcmNoX2RpcnNfQ1hYPQoraWYgdGVzdCAtbiAiJHtjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYfSI7IHRoZW4KKyBjb21waWxlcl9saWJfc2VhcmNoX2RpcnNfQ1hYPWBlY2hvICIgJHtjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYfSIgfCAke1NFRH0gLWUgJ3MhIC1MISAhZycgLWUgJ3MhXiAhISdgCitmaQorCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9CitsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9CitsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9CisKKworICAjIEMrKyBzcGVjaWZpYyBjYXNlcyBmb3IgcGljLCBzdGF0aWMsIHdsLCBldGMuCisgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCisgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctc3RhdGljJworCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeCopCisgICAgICAjIEFsbCBBSVggY29kZSBpcyBQSUMuCisgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYW1pZ2FvcyopCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgcG93ZXJwYykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKyAgICAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLWZQSUMnCisgICAgICAgIDs7CisgICAgICBtNjhrKQorICAgICAgICAgICAgIyBGSVhNRTogd2UgbmVlZCBhdCBsZWFzdCA2ODAyMCBjb2RlIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dAorICAgICAgICAgICAgIyBhZGRpbmcgdGhlIGAtbTY4MDIwJyBmbGFnIHRvIEdDQyBwcmV2ZW50cyBidWlsZGluZyBhbnl0aGluZyBiZXR0ZXIsCisgICAgICAgICAgICAjIGxpa2UgYC1tNjgwNDAnLgorICAgICAgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctbTY4MDIwIC1yZXNpZGVudDMyIC1tYWx3YXlzLXJlc3RvcmUtYTQnCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgYmVvcyogfCBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqIHwgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIHRoZXNlIE9TZXMuCisgICAgICA7OworICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBvczIqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisgICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorICAgICAgIyBBbHRob3VnaCB0aGUgY3lnd2luIGdjYyBpZ25vcmVzIC1mUElDLCBzdGlsbCBuZWVkIHRoaXMgZm9yIG9sZC1zdHlsZQorICAgICAgIyAoLS1kaXNhYmxlLWF1dG8taW1wb3J0KSBsaWJyYXJpZXMKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLURETExfRVhQT1JUJworICAgICAgOzsKKyAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQorICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcworICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctZm5vLWNvbW1vbicKKyAgICAgIDs7CisgICAgKmRqZ3BwKikKKyAgICAgICMgREpHUFAgZG9lcyBub3Qgc3VwcG9ydCBzaGFyZWQgbGlicmFyaWVzIGF0IGFsbAorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPQorICAgICAgOzsKKyAgICBoYWlrdSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSGFpa3UuCisgICAgICAjIFRoZSAiLXN0YXRpYyIgZmxhZyBleGlzdHMsIGJ1dCBpcyBicm9rZW4uCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9CisgICAgICA7OworICAgIGludGVyaXhbMy05XSopCisgICAgICAjIEludGVyaXggMy54IGdjYyAtZnBpYy8tZlBJQyBvcHRpb25zIGdlbmVyYXRlIGJyb2tlbiBjb2RlLgorICAgICAgIyBJbnN0ZWFkLCB3ZSByZWxvY2F0ZSBzaGFyZWQgbGlicmFyaWVzIGF0IHJ1bnRpbWUuCisgICAgICA7OworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKwlsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9LUtjb25mb3JtX3BpYworICAgICAgZmkKKyAgICAgIDs7CisgICAgaHB1eCopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgNjQtYml0IFBBIEhQLVVYLCBidXQgbm90IGZvciAzMi1iaXQKKyAgICAgICMgUEEgSFAtVVguICBPbiBJQTY0IEhQLVVYLCBQSUMgaXMgdGhlIGRlZmF1bHQgYnV0IHRoZSBwaWMgZmxhZworICAgICAgIyBzZXRzIHRoZSBkZWZhdWx0IFRMUyBtb2RlbCBhbmQgYWZmZWN0cyBpbmxpbmluZy4KKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBocHBhKjY0KikKKwk7OworICAgICAgKikKKwlsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1mUElDJworCTs7CisgICAgICBlc2FjCisgICAgICA7OworICAgICpxbngqIHwgKm50byopCisgICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQorICAgICAgIyBpdCB3aWxsIGNvcmVkdW1wLgorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctZlBJQyAtc2hhcmVkJworICAgICAgOzsKKyAgICAqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctZlBJQycKKyAgICAgIDs7CisgICAgZXNhYworICBlbHNlCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4WzQtOV0qKQorCSMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KKwlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSAgIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwkgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLUJzdGF0aWMnCisJZWxzZQorCSAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctYm5zbyAtYkk6L2xpYi9zeXNjYWxscy5leHAnCisJZmkKKwk7OworICAgICAgY2hvcnVzKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCWN4Y2g2OCopCisJICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorCSAgIyBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCBDWFgpPSItLW5vX2F1dG9faW5zdGFudGlhdGlvbiAtdSBfX21haW4gLXUgX19wcmVtYWluIC11IF9hYm9ydCAtciAkQ09PTF9ESVIvbGliL2xpYk9yYi5hICRNVk1FX0RJUi9saWIvQ0MvbGliQy5hICRNVk1FX0RJUi9saWIvY2xhc3NpeC9saWJjeC5zLmEiCisJICA7OworCWVzYWMKKwk7OworICAgICAgbWluZ3cqIHwgY3lnd2luKiB8IG9zMiogfCBwdzMyKiB8IGNlZ2NjKikKKwkjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisJIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KKwlsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1ERExMX0VYUE9SVCcKKwk7OworICAgICAgZGd1eCopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIGVjKysqKQorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1LUElDJworCSAgICA7OworCSAgZ2hjeCopCisJICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLXBpYycKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisJIyBGcmVlQlNEIHVzZXMgR05VIEMrKworCTs7CisgICAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgQ0MqKQorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKKwkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPScke3dsfS1hICR7d2x9YXJjaGl2ZScKKwkgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0OyB0aGVuCisJICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPScrWicKKwkgICAgZmkKKwkgICAgOzsKKwkgIGFDQyopCisJICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9JyR7d2x9LWEgJHt3bH1hcmNoaXZlJworCSAgICBjYXNlICRob3N0X2NwdSBpbgorCSAgICBocHBhKjY0KnxpYTY0KikKKwkgICAgICAjICtaIHRoZSBkZWZhdWx0CisJICAgICAgOzsKKwkgICAgKikKKwkgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9JytaJworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBpbnRlcml4KikKKwkjIFRoaXMgaXMgYzg5LCB3aGljaCBpcyBNUyBWaXN1YWwgQysrIChubyBzaGFyZWQgbGlicykKKwkjIEFueW9uZSB3YW50cyB0byBkbyBhIHBvcnQ/CisJOzsKKyAgICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIENDKikKKwkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLW5vbl9zaGFyZWQnCisJICAgICMgQ0MgcGljIGZsYWcgLUtQSUMgaXMgdGhlIGRlZmF1bHQuCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBLQ0MqKQorCSAgICAjIEtBSSBDKysgQ29tcGlsZXIKKwkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy0tYmFja2VuZCAtV2wsJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1mUElDJworCSAgICA7OworCSAgZWNwYyogKQorCSAgICAjIG9sZCBJbnRlbCBDKysgZm9yIHg4Nl82NCB3aGljaCBzdGlsbCBzdXBwb3J0ZWQgLUtQSUMuCisJICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1LUElDJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1zdGF0aWMnCisJICAgIDs7CisJICBpY3BjKiApCisJICAgICMgSW50ZWwgQysrLCB1c2VkIHRvIGJlIGluY29tcGF0aWJsZSB3aXRoIEdDQy4KKwkgICAgIyBJQ0MgMTAgZG9lc24ndCBhY2NlcHQgLUtQSUMgYW55IG1vcmUuCisJICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1mUElDJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1zdGF0aWMnCisJICAgIDs7CisJICBwZ0NDKiB8IHBnY3BwKikKKwkgICAgIyBQb3J0bGFuZCBHcm91cCBDKysgY29tcGlsZXIKKwkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLWZwaWMnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLUJzdGF0aWMnCisJICAgIDs7CisJICBjeHgqKQorCSAgICAjIENvbXBhcSBDKysKKwkgICAgIyBNYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGlzIGVtcHR5LiAgSXQgYXBwZWFycyB0aGF0IGFsbCBBbHBoYQorCSAgICAjIExpbnV4IGFuZCBDb21wYXEgVHJ1NjQgVW5peCBvYmplY3RzIGFyZSBQSUMuCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0KKwkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctbm9uX3NoYXJlZCcKKwkgICAgOzsKKwkgIHhsYyogfCB4bEMqIHwgYmd4bFtjQ10qIHwgbXBpeGxbY0NdKikKKwkgICAgIyBJQk0gWEwgOC4wLCA5LjAgb24gUFBDIGFuZCBCbHVlR2VuZQorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctcXBpYycKKwkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctcXN0YXRpY2xpbmsnCisJICAgIDs7CisJICAqKQorCSAgICBjYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKwkgICAgKlN1blwgQyopCisJICAgICAgIyBTdW4gQysrIDUuOQorCSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLUtQSUMnCisJICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKKwkgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVFvcHRpb24gbGQgJworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIGx5bnhvcyopCisJOzsKKyAgICAgIG04OGsqKQorCTs7CisgICAgICBtdnMqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBjeHgqKQorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1XIGMsZXhwb3J0YWxsJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIG5ldGJzZCopCisJOzsKKyAgICAgICpxbngqIHwgKm50byopCisgICAgICAgICMgUU5YIHVzZXMgR05VIEMrKywgYnV0IG5lZWQgdG8gZGVmaW5lIC1zaGFyZWQgb3B0aW9uIHRvbywgb3RoZXJ3aXNlCisgICAgICAgICMgaXQgd2lsbCBjb3JlZHVtcC4KKyAgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctZlBJQyAtc2hhcmVkJworICAgICAgICA7OworICAgICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBLQ0MqKQorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLS1iYWNrZW5kIC1XbCwnCisJICAgIDs7CisJICBSQ0MqKQorCSAgICAjIFJhdGlvbmFsIEMrKyAyLjQuMQorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1waWMnCisJICAgIDs7CisJICBjeHgqKQorCSAgICAjIERpZ2l0YWwvQ29tcGFxIEMrKworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKKwkgICAgIyBNYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGlzIGVtcHR5LiAgSXQgYXBwZWFycyB0aGF0IGFsbCBBbHBoYQorCSAgICAjIExpbnV4IGFuZCBDb21wYXEgVHJ1NjQgVW5peCBvYmplY3RzIGFyZSBQSUMuCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0KKwkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctbm9uX3NoYXJlZCcKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBwc29zKikKKwk7OworICAgICAgc29sYXJpcyopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIENDKiB8IHN1bkNDKikKKwkgICAgIyBTdW4gQysrIDQuMiwgNS54IGFuZCBDZW50ZXJsaW5lIEMrKworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1LUElDJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1Cc3RhdGljJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVFvcHRpb24gbGQgJworCSAgICA7OworCSAgZ2N4KikKKwkgICAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctUElDJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIHN1bm9zNCopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIENDKikKKwkgICAgIyBTdW4gQysrIDQueAorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1waWMnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLUJzdGF0aWMnCisJICAgIDs7CisJICBsY2MqKQorCSAgICAjIEx1Y2lkCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLXBpYycKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBzeXN2NSogfCB1bml4d2FyZSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgT3BlblVOSVgqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyopCisJICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1LUElDJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1Cc3RhdGljJworCSAgICA7OworCWVzYWMKKwk7OworICAgICAgdGFuZGVtKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgTkNDKikKKwkgICAgIyBOb25TdG9wLVVYIE5DQyAzLjIwCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLUtQSUMnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgdnh3b3JrcyopCisJOzsKKyAgICAgICopCisJbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkX0NYWD1ubworCTs7CisgICAgZXNhYworICBmaQorCitjYXNlICRob3N0X29zIGluCisgICMgRm9yIHBsYXRmb3JtcyB3aGljaCBkbyBub3Qgc3VwcG9ydCBQSUMsIC1EUElDIGlzIG1lYW5pbmdsZXNzOgorICAqZGpncHAqKQorICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0KKyAgICA7OworICAqKQorICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0iJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCAtRFBJQyIKKyAgICA7OworZXNhYworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljX0NYWCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX0NYWD0kbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY19DWFgiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY19DWFgiID4mNjsgfQorbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY19DWFgKKworIworIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorIworaWYgdGVzdCAtbiAiJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkY29tcGlsZXIgUElDIGZsYWcgJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCB3b3JrcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgUElDIGZsYWcgJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCB3b3Jrcy4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19DWFgrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19DWFg9bm8KKyAgIGFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgICBsdF9jb21waWxlcl9mbGFnPSIkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIC1EUElDIgorICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKKyAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCisgICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCisgICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgorICAgIyBUaGUgb3B0aW9uIGlzIHJlZmVyZW5jZWQgdmlhIGEgdmFyaWFibGUgdG8gYXZvaWQgY29uZnVzaW5nIHNlZC4KKyAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAorICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAorICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkbHRfY29tcGlsZVwiIiA+JjUpCisgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyAiJGFjX291dGZpbGUiOyB0aGVuCisgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCisgICAgICRFQ0hPICIkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+Y29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgorICAgICBpZiB0ZXN0ICEgLXMgY29uZnRlc3QuZXIyIHx8IGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3NfQ1hYPXllcworICAgICBmaQorICAgZmkKKyAgICRSTSBjb25mdGVzdCoKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3NfQ1hYIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3NfQ1hYIiA+JjY7IH0KKworaWYgdGVzdCB4IiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19DWFgiID0geHllczsgdGhlbgorICAgIGNhc2UgJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCBpbgorICAgICAiIiB8ICIgIiopIDs7CisgICAgICopIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0iICRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFgiIDs7CisgICAgIGVzYWMKK2Vsc2UKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9CisgICAgIGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZF9DWFg9bm8KK2ZpCisKK2ZpCisKKworCisKKworIworIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIHN0YXRpYyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorIword2w9JGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYIGV2YWwgbHRfdG1wX3N0YXRpY19mbGFnPVwiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWFwiCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0NYWCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0NYWD1ubworICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKyAgIExERkxBR1M9IiRMREZMQUdTICRsdF90bXBfc3RhdGljX2ZsYWciCisgICBlY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGlmIChldmFsICRhY19saW5rIDI+Y29uZnRlc3QuZXJyKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorICAgICAjIFRoZSBsaW5rZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCisgICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgICAgIyBBcHBlbmQgYW55IGVycm9ycyB0byB0aGUgY29uZmlnLmxvZy4KKyAgICAgICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKKyAgICAgICAkRUNITyAiJF9sdF9saW5rZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID4gY29uZnRlc3QuZXhwCisgICAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCisgICAgICAgaWYgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0NYWD15ZXMKKyAgICAgICBmaQorICAgICBlbHNlCisgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfQ1hYPXllcworICAgICBmaQorICAgZmkKKyAgICRSTSAtciBjb25mdGVzdCoKKyAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0NYWCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0NYWCIgPiY2OyB9CisKK2lmIHRlc3QgeCIkbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfQ1hYIiA9IHh5ZXM7IHRoZW4KKyAgICA6CitlbHNlCisgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPQorZmkKKworCisKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0Li4uICIgPiY2OyB9CitpZiAke2x0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWD1ubworICAgJFJNIC1yIGNvbmZ0ZXN0IDI+L2Rldi9udWxsCisgICBta2RpciBjb25mdGVzdAorICAgY2QgY29uZnRlc3QKKyAgIG1rZGlyIG91dAorICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisKKyAgIGx0X2NvbXBpbGVyX2ZsYWc9Ii1vIG91dC9jb25mdGVzdDIuJGFjX29iamV4dCIKKyAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCisgICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgorICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucworICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KKyAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAorICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAorICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkbHRfY29tcGlsZVwiIiA+JjUpCisgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+b3V0L2NvbmZ0ZXN0LmVycikKKyAgIGFjX3N0YXR1cz0kPworICAgY2F0IG91dC9jb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zIG91dC9jb25mdGVzdDIuJGFjX29iamV4dAorICAgdGhlbgorICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKKyAgICAgJEVDSE8gIiRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID4gb3V0L2NvbmZ0ZXN0LmV4cAorICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgb3V0L2NvbmZ0ZXN0LmVyciA+b3V0L2NvbmZ0ZXN0LmVyMgorICAgICBpZiB0ZXN0ICEgLXMgb3V0L2NvbmZ0ZXN0LmVyMiB8fCBkaWZmIG91dC9jb25mdGVzdC5leHAgb3V0L2NvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYPXllcworICAgICBmaQorICAgZmkKKyAgIGNobW9kIHUrdyAuIDI+JjUKKyAgICRSTSBjb25mdGVzdCoKKyAgICMgU0dJIEMrKyBjb21waWxlciB3aWxsIGNyZWF0ZSBkaXJlY3Rvcnkgb3V0L2lpX2ZpbGVzLyBmb3IKKyAgICMgdGVtcGxhdGUgaW5zdGFudGlhdGlvbgorICAgdGVzdCAtZCBvdXQvaWlfZmlsZXMgJiYgJFJNIG91dC9paV9maWxlcy8qICYmIHJtZGlyIG91dC9paV9maWxlcworICAgJFJNIG91dC8qICYmIHJtZGlyIG91dAorICAgY2QgLi4KKyAgICRSTSAtciBjb25mdGVzdAorICAgJFJNIGNvbmZ0ZXN0KgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFgiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFgiID4mNjsgfQorCisKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0Li4uICIgPiY2OyB9CitpZiAke2x0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWD1ubworICAgJFJNIC1yIGNvbmZ0ZXN0IDI+L2Rldi9udWxsCisgICBta2RpciBjb25mdGVzdAorICAgY2QgY29uZnRlc3QKKyAgIG1rZGlyIG91dAorICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisKKyAgIGx0X2NvbXBpbGVyX2ZsYWc9Ii1vIG91dC9jb25mdGVzdDIuJGFjX29iamV4dCIKKyAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCisgICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgorICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucworICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KKyAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAorICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAorICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkbHRfY29tcGlsZVwiIiA+JjUpCisgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+b3V0L2NvbmZ0ZXN0LmVycikKKyAgIGFjX3N0YXR1cz0kPworICAgY2F0IG91dC9jb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zIG91dC9jb25mdGVzdDIuJGFjX29iamV4dAorICAgdGhlbgorICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKKyAgICAgJEVDSE8gIiRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID4gb3V0L2NvbmZ0ZXN0LmV4cAorICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgb3V0L2NvbmZ0ZXN0LmVyciA+b3V0L2NvbmZ0ZXN0LmVyMgorICAgICBpZiB0ZXN0ICEgLXMgb3V0L2NvbmZ0ZXN0LmVyMiB8fCBkaWZmIG91dC9jb25mdGVzdC5leHAgb3V0L2NvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYPXllcworICAgICBmaQorICAgZmkKKyAgIGNobW9kIHUrdyAuIDI+JjUKKyAgICRSTSBjb25mdGVzdCoKKyAgICMgU0dJIEMrKyBjb21waWxlciB3aWxsIGNyZWF0ZSBkaXJlY3Rvcnkgb3V0L2lpX2ZpbGVzLyBmb3IKKyAgICMgdGVtcGxhdGUgaW5zdGFudGlhdGlvbgorICAgdGVzdCAtZCBvdXQvaWlfZmlsZXMgJiYgJFJNIG91dC9paV9maWxlcy8qICYmIHJtZGlyIG91dC9paV9maWxlcworICAgJFJNIG91dC8qICYmIHJtZGlyIG91dAorICAgY2QgLi4KKyAgICRSTSAtciBjb25mdGVzdAorICAgJFJNIGNvbmZ0ZXN0KgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFgiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFgiID4mNjsgfQorCisKKworCitoYXJkX2xpbmtzPSJub3R0ZXN0ZWQiCitpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYIiA9IG5vICYmIHRlc3QgIiRuZWVkX2xvY2tzIiAhPSBubzsgdGhlbgorICAjIGRvIG5vdCBvdmVyd3JpdGUgdGhlIHZhbHVlIG9mIG5lZWRfbG9ja3MgcHJvdmlkZWQgYnkgdGhlIHVzZXIKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzLi4uICIgPiY2OyB9CisgIGhhcmRfbGlua3M9eWVzCisgICRSTSBjb25mdGVzdCoKKyAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KKyAgdG91Y2ggY29uZnRlc3QuYQorICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4mNSB8fCBoYXJkX2xpbmtzPW5vCisgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkaGFyZF9saW5rcyIgPiY1CiskYXNfZWNobyAiJGhhcmRfbGlua3MiID4mNjsgfQorICBpZiB0ZXN0ICIkaGFyZF9saW5rcyIgPSBubzsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogXGAkQ0MnIGRvZXMgbm90IHN1cHBvcnQgXGAtYyAtbycsIHNvIFxgbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBcYCRDQycgZG9lcyBub3Qgc3VwcG9ydCBcYC1jIC1vJywgc28gXGBtYWtlIC1qJyBtYXkgYmUgdW5zYWZlIiA+JjI7fQorICAgIG5lZWRfbG9ja3M9d2FybgorICBmaQorZWxzZQorICBuZWVkX2xvY2tzPW5vCitmaQorCisKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAiID4mNjsgfQorCisgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgIGV4Y2x1ZGVfZXhwc3ltc19DWFg9J19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKicKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBhaXhbNC05XSopCisgICAgIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gd2UgZG9uJ3Qgd2FudCB0aGUgIi1DIiBvcHRpb24uCisgICAgIyAtQyBtZWFucyBkZW1hbmdsZSB0byBBSVggbm0sIGJ1dCBtZWFucyBkb24ndCBkZW1hbmdsZSB3aXRoIEdOVSBubQorICAgICMgQWxzbywgQUlYIG5tIHRyZWF0cyB3ZWFrIGRlZmluZWQgc3ltYm9scyBsaWtlIG90aGVyIGdsb2JhbCBkZWZpbmVkCisgICAgIyBzeW1ib2xzLCB3aGVyZWFzIEdOVSBubSBtYXJrcyB0aGVtIGFzICJXIi4KKyAgICBpZiAkTk0gLVYgMj4mMSB8ICRHUkVQICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0nJE5NIC1CcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikgfHwgKFwkIDIgPT0gIlciKSkgJiYgKHN1YnN0cihcJCAzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJCAzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJworICAgIGVsc2UKKyAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSckTk0gLUJDcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikpICYmIChzdWJzdHIoXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKyAgICBmaQorICAgIDs7CisgIHB3MzIqKQorICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSIkbHRkbGxfY21kcyIKKyAgICA7OworICBjeWd3aW4qIHwgbWluZ3cqIHwgY2VnY2MqKQorICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgY2wqKQorICAgICAgZXhjbHVkZV9leHBzeW1zX0NYWD0nX05VTExfSU1QT1JUX0RFU0NSSVBUT1J8X0lNUE9SVF9ERVNDUklQVE9SXy4qJworICAgICAgOzsKKyAgICAqKQorICAgICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvO3MvXi4qWyBdX19ubV9fXChbXiBdKlwpWyBdW14gXSovXDEgREFUQS87L15JWyBdL2Q7L15bQUlUV11bIF0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgICAgIGV4Y2x1ZGVfZXhwc3ltc19DWFg9J1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZScKKyAgICAgIDs7CisgICAgZXNhYworICAgIDs7CisgICopCisgICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgICA7OworICBlc2FjCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbGRfc2hsaWJzX0NYWCIgPiY1CiskYXNfZWNobyAiJGxkX3NobGlic19DWFgiID4mNjsgfQordGVzdCAiJGxkX3NobGlic19DWFgiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubworCit3aXRoX2dudV9sZF9DWFg9JHdpdGhfZ251X2xkCisKKworCisKKworCisjCisjIERvIHdlIG5lZWQgdG8gZXhwbGljaXRseSBsaW5rIGxpYmM/CisjCitjYXNlICJ4JGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWCIgaW4KK3h8eHllcykKKyAgIyBBc3N1bWUgLWxjIHNob3VsZCBiZSBhZGRlZAorICBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9eWVzCisKKyAgaWYgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgY2FzZSAkYXJjaGl2ZV9jbWRzX0NYWCBpbgorICAgIConficqKQorICAgICAgIyBGSVhNRTogd2UgbWF5IGhhdmUgdG8gZGVhbCB3aXRoIG11bHRpLWNvbW1hbmQgc2VxdWVuY2VzLgorICAgICAgOzsKKyAgICAnJENDICcqKQorICAgICAgIyBUZXN0IHdoZXRoZXIgdGhlIGNvbXBpbGVyIGltcGxpY2l0bHkgbGlua3Mgd2l0aCAtbGMgc2luY2Ugb24gc29tZQorICAgICAgIyBzeXN0ZW1zLCAtbGdjYyBoYXMgdG8gY29tZSBiZWZvcmUgLWxjLiBJZiBnY2MgYWxyZWFkeSBwYXNzZXMgLWxjCisgICAgICAjIHRvIGxkLCBkb24ndCBhZGQgLWxjIGJlZm9yZSAtbGdjYy4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbi4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sY19DWFgrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICAkUk0gY29uZnRlc3QqCisJZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisKKwlpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9IDI+Y29uZnRlc3QuZXJyOyB0aGVuCisJICBzb25hbWU9Y29uZnRlc3QKKwkgIGxpYj1jb25mdGVzdAorCSAgbGlib2Jqcz1jb25mdGVzdC4kYWNfb2JqZXh0CisJICBkZXBsaWJzPQorCSAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYCisJICBwaWNfZmxhZz0kbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYCisJICBjb21waWxlcl9mbGFncz0tdgorCSAgbGlua2VyX2ZsYWdzPS12CisJICB2ZXJzdHJpbmc9CisJICBvdXRwdXRfb2JqZGlyPS4KKwkgIGxpYm5hbWU9Y29uZnRlc3QKKwkgIGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWAorCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPQorCSAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFyY2hpdmVfY21kc19DWFggMlw+XCYxIFx8ICRHUkVQIFwiIC1sYyBcIiBcPi9kZXYvbnVsbCAyXD5cJjFcIiI7IH0gPiY1CisgIChldmFsICRhcmNoaXZlX2NtZHNfQ1hYIDJcPlwmMSBcfCAkR1JFUCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorCSAgdGhlbgorCSAgICBsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9bm8KKwkgIGVsc2UKKwkgICAgbHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPXllcworCSAgZmkKKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0kbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZworCWVsc2UKKwkgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQorCWZpCisJJFJNIGNvbmZ0ZXN0KgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sY19DWFgiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sY19DWFgiID4mNjsgfQorICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPSRsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sY19DWFgKKyAgICAgIDs7CisgICAgZXNhYworICBmaQorICA7OworZXNhYworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MuLi4gIiA+JjY7IH0KKworbGlicmFyeV9uYW1lc19zcGVjPQorbGlibmFtZV9zcGVjPSdsaWIkbmFtZScKK3NvbmFtZV9zcGVjPQorc2hyZXh0X2NtZHM9Ii5zbyIKK3Bvc3RpbnN0YWxsX2NtZHM9Citwb3N0dW5pbnN0YWxsX2NtZHM9CitmaW5pc2hfY21kcz0KK2ZpbmlzaF9ldmFsPQorc2hsaWJwYXRoX3Zhcj0KK3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD11bmtub3duCit2ZXJzaW9uX3R5cGU9bm9uZQorZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgorc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIiCituZWVkX2xpYl9wcmVmaXg9dW5rbm93bgoraGFyZGNvZGVfaW50b19saWJzPW5vCisKKyMgd2hlbiB5b3Ugc2V0IG5lZWRfdmVyc2lvbiB0byBubywgbWFrZSBzdXJlIGl0IGRvZXMgbm90IGNhdXNlIC1zZXRfdmVyc2lvbgorIyBmbGFncyB0byBiZSBsZWZ0IHdpdGhvdXQgYXJndW1lbnRzCituZWVkX3ZlcnNpb249dW5rbm93bgorCitjYXNlICRob3N0X29zIGluCithaXgzKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUuYScKKyAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICisKKyAgIyBBSVggMyBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyB3ZSBhcHBlbmQgYSBtYWpvciB2ZXJzaW9uIHRvIHRoZSBuYW1lLgorICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICA7OworCithaXhbNC05XSopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgICAgIyBBSVggNSBzdXBwb3J0cyBJQTY0CisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgZWxzZQorICAgICMgV2l0aCBHQ0MgdXAgdG8gMi45NS54LCBjb2xsZWN0MiB3b3VsZCBjcmVhdGUgYW4gaW1wb3J0IGZpbGUKKyAgICAjIGZvciBkZXBlbmRlbmNlIGxpYnJhcmllcy4gIFRoZSBpbXBvcnQgZmlsZSB3b3VsZCBzdGFydCB3aXRoCisgICAgIyB0aGUgbGluZSBgIyEgLicuICBUaGlzIHdvdWxkIGNhdXNlIHRoZSBnZW5lcmF0ZWQgbGlicmFyeSB0bworICAgICMgZGVwZW5kIG9uIGAuJywgYWx3YXlzIGFuIGludmFsaWQgbGlicmFyeS4gIFRoaXMgd2FzIGZpeGVkIGluCisgICAgIyBkZXZlbG9wbWVudCBzbmFwc2hvdHMgb2YgR0NDIHByaW9yIHRvIDMuMC4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXg0IHwgYWl4NC5bMDFdIHwgYWl4NC5bMDFdLiopCisgICAgICBpZiB7IGVjaG8gJyNpZiBfX0dOVUNfXyA+IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gOTcpJworCSAgIGVjaG8gJyB5ZXMgJworCSAgIGVjaG8gJyNlbmRpZic7IH0gfCAke0NDfSAtRSAtIHwgJEdSRVAgeWVzID4gL2Rldi9udWxsOyB0aGVuCisJOgorICAgICAgZWxzZQorCWNhbl9idWlsZF9zaGFyZWQ9bm8KKyAgICAgIGZpCisgICAgICA7OworICAgIGVzYWMKKyAgICAjIEFJWCAob24gUG93ZXIqKSBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyBjdXJyZW50bHkgd2UgY2FuIG5vdCBoYXJkY29kZSBjb3JyZWN0CisgICAgIyBzb25hbWUgaW50byBleGVjdXRhYmxlLiBQcm9iYWJseSB3ZSBjYW4gYWRkIHZlcnNpb25pbmcgc3VwcG9ydCB0bworICAgICMgY29sbGVjdDIsIHNvIGFkZGl0aW9uYWwgbGlua3MgY2FuIGJlIHVzZWZ1bCBpbiBmdXR1cmUuCisgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisgICAgICAjIElmIHVzaW5nIHJ1biB0aW1lIGxpbmtpbmcgKG9uIEFJWCA0LjIgb3IgbGF0ZXIpIHVzZSBsaWI8bmFtZT4uc28KKyAgICAgICMgaW5zdGVhZCBvZiBsaWI8bmFtZT4uYSB0byBsZXQgcGVvcGxlIGtub3cgdGhhdCB0aGVzZSBhcmUgbm90CisgICAgICAjIHR5cGljYWwgQUlYIHNoYXJlZCBsaWJyYXJpZXMuCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBlbHNlCisgICAgICAjIFdlIHByZXNlcnZlIC5hIGFzIGV4dGVuc2lvbiBmb3Igc2hhcmVkIGxpYnJhcmllcyB0aHJvdWdoIEFJWDQuMgorICAgICAgIyBhbmQgbGF0ZXIgd2hlbiB3ZSBhcmUgbm90IGRvaW5nIHJ1biB0aW1lIGxpbmtpbmcuCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LmEgJGxpYm5hbWUuYScKKyAgICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgZmkKKyAgICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKKyAgZmkKKyAgOzsKKworYW1pZ2FvcyopCisgIGNhc2UgJGhvc3RfY3B1IGluCisgIHBvd2VycGMpCisgICAgIyBTaW5jZSBKdWx5IDIwMDcgQW1pZ2FPUzQgb2ZmaWNpYWxseSBzdXBwb3J0cyAuc28gbGlicmFyaWVzLgorICAgICMgV2hlbiBjb21waWxpbmcgdGhlIGV4ZWN1dGFibGUsIGFkZCAtdXNlLWR5bmxkIC1Mc29ianM6IHRvIHRoZSBjb21waWxlbGluZS4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICA7OworICBtNjhrKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuaXhsaWJyYXJ5ICRsaWJuYW1lLmEnCisgICAgIyBDcmVhdGUgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSBlbnRyaWVzIGluIC9zeXMvbGlicy4KKyAgICBmaW5pc2hfZXZhbD0nZm9yIGxpYiBpbiBgbHMgJGxpYmRpci8qLml4bGlicmFyeSAyPi9kZXYvbnVsbGA7IGRvIGxpYm5hbWU9YGZ1bmNfZWNob19hbGwgIiRsaWIiIHwgJFNFRCAnXCcncyVeLiovXChbXi9dKlwpXC5peGxpYnJhcnkkJVwxJSdcJydgOyB0ZXN0ICRSTSAvc3lzL2xpYnMvJHtsaWJuYW1lfV9peGxpYnJhcnkuYTsgJHNob3cgImNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEiOyBjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIHx8IGV4aXQgMTsgZG9uZScKKyAgICA7OworICBlc2FjCisgIDs7CisKK2Jlb3MqKQorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCisgIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICisgIDs7CisKK2JzZGlbNDVdKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvWDExL2xpYiAvdXNyL2NvbnRyaWIvbGliIC9saWIgL3Vzci9sb2NhbC9saWIiCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCisgICMgdGhlIGRlZmF1bHQgbGQuc28uY29uZiBhbHNvIGNvbnRhaW5zIC91c3IvY29udHJpYi9saWIgYW5kCisgICMgL3Vzci9YMTFSNi9saWIgKC91c3IvWDExIGlzIGEgbGluayB0byAvdXNyL1gxMVI2KSwgYnV0IGxldCB1cyBhbGxvdworICAjIGxpYnRvb2wgdG8gaGFyZC1jb2RlIHRoZXNlIGludG8gcHJvZ3JhbXMKKyAgOzsKKworY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICB2ZXJzaW9uX3R5cGU9d2luZG93cworICBzaHJleHRfY21kcz0iLmRsbCIKKyAgbmVlZF92ZXJzaW9uPW5vCisgIG5lZWRfbGliX3ByZWZpeD1ubworCisgIGNhc2UgJEdDQywkY2NfYmFzZW5hbWUgaW4KKyAgeWVzLCopCisgICAgIyBnY2MKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJworICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KKyAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCR7YmFzZV9maWxlfSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KKyAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZX4KKyAgICAgIGNobW9kIGEreCBcJGRsZGlyLyRkbG5hbWV+CisgICAgICBpZiB0ZXN0IC1uICdcJyckc3RyaXBtZSdcJycgJiYgdGVzdCAtbiAnXCcnJHN0cmlwbGliJ1wnJzsgdGhlbgorICAgICAgICBldmFsICdcJyckc3RyaXBsaWIgXCRkbGRpci8kZGxuYW1lJ1wnJyB8fCBleGl0IFwkPzsKKyAgICAgIGZpJworICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgorICAgICAgICRSTSBcJGRscGF0aCcKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgY3lnd2luKikKKyAgICAgICMgQ3lnd2luIERMTHMgdXNlICdjeWcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJworICAgICAgc29uYW1lX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9jeWcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworCisgICAgICA7OworICAgIG1pbmd3KiB8IGNlZ2NjKikKKyAgICAgICMgTWluR1cgRExMcyB1c2UgdHJhZGl0aW9uYWwgJ2xpYicgcHJlZml4CisgICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICA7OworICAgIHB3MzIqKQorICAgICAgIyBwdzMyIERMTHMgdXNlICdwdycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICA7OworICAgIGVzYWMKKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAgIDs7CisKKyAgKixjbCopCisgICAgIyBOYXRpdmUgTVNWQworICAgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfS5kbGwubGliJworCisgICAgY2FzZSAkYnVpbGRfb3MgaW4KKyAgICBtaW5ndyopCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9CisgICAgICBsdF9zYXZlX2lmcz0kSUZTCisgICAgICBJRlM9JzsnCisgICAgICBmb3IgbHRfcGF0aCBpbiAkTElCCisgICAgICBkbworICAgICAgICBJRlM9JGx0X3NhdmVfaWZzCisgICAgICAgICMgTGV0IERPUyB2YXJpYWJsZSBleHBhbnNpb24gcHJpbnQgdGhlIHNob3J0IDguMyBzdHlsZSBmaWxlIG5hbWUuCisgICAgICAgIGx0X3BhdGg9YGNkICIkbHRfcGF0aCIgMj4vZGV2L251bGwgJiYgY21kIC8vQyAiZm9yICVpIGluICgiLiIpIGRvIEBlY2hvICV+c2kiYAorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgJGx0X3BhdGgiCisgICAgICBkb25lCisgICAgICBJRlM9JGx0X3NhdmVfaWZzCisgICAgICAjIENvbnZlcnQgdG8gTVNZUyBzdHlsZS4KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgc2VkIC1lICdzfFxcXFx8L3xnJyAtZSAnc3wgXFwoW2EtekEtWl1cXCk6fCAvXFwxfGcnIC1lICdzfF4gfHwnYAorICAgICAgOzsKKyAgICBjeWd3aW4qKQorICAgICAgIyBDb252ZXJ0IHRvIHVuaXggZm9ybSwgdGhlbiB0byBkb3MgZm9ybSwgdGhlbiBiYWNrIHRvIHVuaXggZm9ybQorICAgICAgIyBidXQgdGhpcyB0aW1lIGRvcyBzdHlsZSAobm8gc3BhY2VzISkgc28gdGhhdCB0aGUgdW5peCBmb3JtIGxvb2tzCisgICAgICAjIGxpa2UgL2N5Z2RyaXZlL2MvUFJPR1JBfjE6L2N5Z2RyLi4uCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJExJQiJgCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tZG9zICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiAyPi9kZXYvbnVsbGAKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisgICAgICA7OworICAgICopCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRMSUIiCisgICAgICBpZiAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkR1JFUCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSC4KKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKKyAgICAgIGVsc2UKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorICAgICAgZmkKKyAgICAgICMgRklYTUU6IGZpbmQgdGhlIHNob3J0IG5hbWUgb3IgdGhlIHBhdGggY29tcG9uZW50cywgYXMgc3BhY2VzIGFyZQorICAgICAgIyBjb21tb24uIChlLmcuICJQcm9ncmFtIEZpbGVzIiAtPiAiUFJPR1JBfjEiKQorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CisgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgorICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgorICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CisgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWUnCisgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+CisgICAgICAgJFJNIFwkZGxwYXRoJworICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGluay5leGUnCisgICAgOzsKKworICAqKQorICAgICMgQXNzdW1lIE1TVkMgd3JhcHBlcgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUubGliJworICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAgOzsKKyAgZXNhYworICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KKyAgc2hsaWJwYXRoX3Zhcj1QQVRICisgIDs7CisKK2RhcndpbiogfCByaGFwc29keSopCisgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkeWxkIgorICB2ZXJzaW9uX3R5cGU9ZGFyd2luCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7bWFqb3J9JHNoYXJlZF9leHQgJHtsaWJuYW1lfSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0JworICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIHNobGlicGF0aF92YXI9RFlMRF9MSUJSQVJZX1BBVEgKKyAgc2hyZXh0X2NtZHM9J2B0ZXN0IC4kbW9kdWxlID0gLnllcyAmJiBlY2hvIC5zbyB8fCBlY2hvIC5keWxpYmAnCisKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC9saWIgL3Vzci9saWInCisgIDs7CisKK2RndXgqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICA7OworCitmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICMgRHJhZ29uRmx5IGRvZXMgbm90IGhhdmUgYW91dC4gIFdoZW4vaWYgdGhleSBpbXBsZW1lbnQgYSBuZXcKKyAgIyB2ZXJzaW9uaW5nIG1lY2hhbmlzbSwgYWRqdXN0IHRoaXMuCisgIGlmIHRlc3QgLXggL3Vzci9iaW4vb2JqZm9ybWF0OyB0aGVuCisgICAgb2JqZm9ybWF0PWAvdXNyL2Jpbi9vYmpmb3JtYXRgCisgIGVsc2UKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgZnJlZWJzZFsyM10uKikgb2JqZm9ybWF0PWFvdXQgOzsKKyAgICAqKSBvYmpmb3JtYXQ9ZWxmIDs7CisgICAgZXNhYworICBmaQorICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC0kb2JqZm9ybWF0CisgIGNhc2UgJHZlcnNpb25fdHlwZSBpbgorICAgIGZyZWVic2QtZWxmKikKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgICAgbmVlZF92ZXJzaW9uPW5vCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIDs7CisgICAgZnJlZWJzZC0qKQorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisgICAgICBuZWVkX3ZlcnNpb249eWVzCisgICAgICA7OworICBlc2FjCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgZnJlZWJzZDIuKikKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgOzsKKyAgZnJlZWJzZDMuWzAxXSogfCBmcmVlYnNkZWxmMy5bMDFdKikKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIDs7CisgIGZyZWVic2QzLlsyLTldKiB8IGZyZWVic2RlbGYzLlsyLTldKiB8IFwKKyAgZnJlZWJzZDQuWzAtNV0gfCBmcmVlYnNkZWxmNC5bMC01XSB8IGZyZWVic2Q0LjEuMSB8IGZyZWVic2RlbGY0LjEuMSkKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgOzsKKyAgKikgIyBmcm9tIDQuNiBvbiwgYW5kIERyYWdvbkZseQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgOzsKKyAgZXNhYworICA7OworCitnbnUqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR7bWFqb3J9ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCitoYWlrdSopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgcnVudGltZV9sb2FkZXIiCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0ke21ham9yfSAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3Qvc3lzdGVtL2xpYicKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCitocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKyAgIyBHaXZlIGEgc29uYW1lIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1ham9yIHZlcnNpb24gc28gdGhhdCBkbGQuc2wgcmVmdXNlcyB0bworICAjIGxpbmsgYWdhaW5zdCBvdGhlciB2ZXJzaW9ucy4KKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgaWE2NCopCisgICAgc2hyZXh0X2NtZHM9Jy5zbycKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbyIKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIGlmIHRlc3QgIlgkSFBVWF9JQTY0X01PREUiID0gWDMyOyB0aGVuCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIiCisgICAgZWxzZQorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4NjQgL3Vzci9sb2NhbC9saWIvaHB1eDY0IgorICAgIGZpCisgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYworICAgIDs7CisgIGhwcGEqNjQqKQorICAgIHNocmV4dF9jbWRzPScuc2wnCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEggIyBIb3cgc2hvdWxkIHdlIGhhbmRsZSBTSExJQl9QQVRICisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9wYTIwXzY0IC91c3IvY2NzL2xpYi9wYTIwXzY0IgorICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKKyAgICA7OworICAqKQorICAgIHNocmV4dF9jbWRzPScuc2wnCisgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKKyAgICBzaGxpYnBhdGhfdmFyPVNITElCX1BBVEgKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8gIyArcyBpcyByZXF1aXJlZCB0byBlbmFibGUgU0hMSUJfUEFUSAorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgOzsKKyAgZXNhYworICAjIEhQLVVYIHJ1bnMgKnJlYWxseSogc2xvd2x5IHVubGVzcyBzaGFyZWQgbGlicmFyaWVzIGFyZSBtb2RlIDU1NSwgLi4uCisgIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDU1NSAkbGliJworICAjIG9yIGZhaWxzIG91dHJpZ2h0LCBzbyBvdmVycmlkZSBhdG9taWNhbGx5OgorICBpbnN0YWxsX292ZXJyaWRlX21vZGU9NTU1CisgIDs7CisKK2ludGVyaXhbMy05XSopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBkeW5hbWljX2xpbmtlcj0nSW50ZXJpeCAzLnggbGQuc28uMSAoUEUsIGxpa2UgRUxGKScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIG5vbnN0b3B1eCopIHZlcnNpb25fdHlwZT1ub25zdG9wdXggOzsKKyAgICAqKQorCWlmIHRlc3QgIiRsdF9jdl9wcm9nX2dudV9sZCIgPSB5ZXM7IHRoZW4KKwkJdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorCWVsc2UKKwkJdmVyc2lvbl90eXBlPWlyaXgKKwlmaSA7OworICBlc2FjCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBjYXNlICRob3N0X29zIGluCisgIGlyaXg1KiB8IG5vbnN0b3B1eCopCisgICAgbGlic3VmZj0gc2hsaWJzdWZmPQorICAgIDs7CisgICopCisgICAgY2FzZSAkTEQgaW4gIyBsaWJ0b29sLm00IHdpbGwgYWRkIG9uZSBvZiB0aGVzZSBzd2l0Y2hlcyB0byBMRAorICAgICotMzJ8KiItMzIgInwqLW1lbGYzMmJzbWlwfCoiLW1lbGYzMmJzbWlwICIpCisgICAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPTMyLWJpdDs7CisgICAgKi1uMzJ8KiItbjMyICJ8Ki1tZWxmMzJibWlwbjMyfCoiLW1lbGYzMmJtaXBuMzIgIikKKyAgICAgIGxpYnN1ZmY9MzIgc2hsaWJzdWZmPU4zMiBsaWJtYWdpYz1OMzI7OworICAgICotNjR8KiItNjQgInwqLW1lbGY2NGJtaXB8KiItbWVsZjY0Ym1pcCAiKQorICAgICAgbGlic3VmZj02NCBzaGxpYnN1ZmY9NjQgbGlibWFnaWM9NjQtYml0OzsKKyAgICAqKSBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKKyAgICBlc2FjCisgICAgOzsKKyAgZXNhYworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUlkke3NobGlic3VmZn1fUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0gL3Vzci9sb2NhbC9saWIke2xpYnN1ZmZ9IgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IgorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKKyMgTm8gc2hhcmVkIGxpYiBzdXBwb3J0IGZvciBMaW51eCBvbGRsZCwgYW91dCwgb3IgY29mZi4KK2xpbnV4Km9sZGxkKiB8IGxpbnV4KmFvdXQqIHwgbGludXgqY29mZiopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7CisKKyMgVGhpcyBtdXN0IGJlIGdsaWJjL0VMRi4KK2xpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbiAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKworICAjIFNvbWUgYmludXRpbHMgbGQgYXJlIHBhdGNoZWQgdG8gc2V0IERUX1JVTlBBVEgKKyAgaWYgJHtsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICBzYXZlX0xERkxBR1M9JExERkxBR1MKKyAgICBzYXZlX2xpYmRpcj0kbGliZGlyCisgICAgZXZhbCAibGliZGlyPS9mb287IHdsPVwiJGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYXCI7IFwKKwkgTERGTEFHUz1cIlwkTERGTEFHUyAkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFhcIiIKKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBpZiAgKCRPQkpEVU1QIC1wIGNvbmZ0ZXN0JGFjX2V4ZWV4dCkgMj4vZGV2L251bGwgfCBncmVwICJSVU5QQVRILiokbGliZGlyIiA+L2Rldi9udWxsOyB0aGVuIDoKKyAgbHRfY3Zfc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworZmkKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgIExERkxBR1M9JHNhdmVfTERGTEFHUworICAgIGxpYmRpcj0kc2F2ZV9saWJkaXIKKworZmkKKworICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9JGx0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aAorCisgICMgVGhpcyBpbXBsaWVzIG5vIGZhc3RfaW5zdGFsbCwgd2hpY2ggaXMgdW5hY2NlcHRhYmxlLgorICAjIFNvbWUgcmV3b3JrIHdpbGwgYmUgbmVlZGVkIHRvIGFsbG93IGZvciBmYXN0X2luc3RhbGwKKyAgIyBiZWZvcmUgdGhpcyBjYW4gYmUgZW5hYmxlZC4KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworCisgICMgQWRkIEFCSS1zcGVjaWZpYyBkaXJlY3RvcmllcyB0byB0aGUgc3lzdGVtIGxpYnJhcnkgcGF0aC4KKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWI2NCAvdXNyL2xpYjY0IC9saWIgL3Vzci9saWIiCisKKyAgIyBBcHBlbmQgbGQuc28uY29uZiBjb250ZW50cyB0byB0aGUgc2VhcmNoIHBhdGgKKyAgaWYgdGVzdCAtZiAvZXRjL2xkLnNvLmNvbmY7IHRoZW4KKyAgICBsdF9sZF9leHRyYT1gYXdrICcvXmluY2x1ZGUgLyB7IHN5c3RlbShzcHJpbnRmKCJjZCAvZXRjOyBjYXQgJXMgMj4vZGV2L251bGwiLCBcJDIpKTsgc2tpcCA9IDE7IH0geyBpZiAoIXNraXApIHByaW50IFwkMDsgc2tpcCA9IDA7IH0nIDwgL2V0Yy9sZC5zby5jb25mIHwgJFNFRCAtZSAncy8jLiovLzsvXlsJIF0qaHdjYXBbCSBdL2Q7cy9bOiwJXS8gL2c7cy89W149XSokLy87cy89W149IF0qIC8gL2c7cy8iLy9nOy9eJC9kJyB8IHRyICdcbicgJyAnYAorICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMgJGx0X2xkX2V4dHJhIgorCisgIGZpCisKKyAgIyBXZSB1c2VkIHRvIHRlc3QgZm9yIC9saWIvbGQuc28uMSBhbmQgZGlzYWJsZSBzaGFyZWQgbGlicmFyaWVzIG9uCisgICMgcG93ZXJwYywgYmVjYXVzZSBNa0xpbnV4IG9ubHkgc3VwcG9ydGVkIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB0aGUKKyAgIyBHTlUgZHluYW1pYyBsaW5rZXIuICBTaW5jZSB0aGlzIHdhcyBicm9rZW4gd2l0aCBjcm9zcyBjb21waWxlcnMsCisgICMgbW9zdCBwb3dlcnBjLWxpbnV4IGJveGVzIHN1cHBvcnQgZHluYW1pYyBsaW5raW5nIHRoZXNlIGRheXMgYW5kCisgICMgcGVvcGxlIGNhbiBhbHdheXMgLS1kaXNhYmxlLXNoYXJlZCwgdGhlIHRlc3Qgd2FzIHJlbW92ZWQsIGFuZCB3ZQorICAjIGFzc3VtZSB0aGUgR05VL0xpbnV4IGR5bmFtaWMgbGlua2VyIGlzIGluIHVzZS4KKyAgZHluYW1pY19saW5rZXI9J0dOVS9MaW51eCBsZC5zbycKKyAgOzsKKworbmV0YnNkKikKKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICAgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCisgICAgZHluYW1pY19saW5rZXI9J05ldEJTRCAoYS5vdXQpIGxkLnNvJworICBlbHNlCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgbGQuZWxmX3NvJworICBmaQorICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworbmV3c29zNikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICA7OworCisqbnRvKiB8ICpxbngqKQorICB2ZXJzaW9uX3R5cGU9cW54CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGR5bmFtaWNfbGlua2VyPSdsZHFueC5zbycKKyAgOzsKKworb3BlbmJzZCopCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIiCisgIG5lZWRfbGliX3ByZWZpeD1ubworICAjIFNvbWUgb2xkZXIgdmVyc2lvbnMgb2YgT3BlbkJTRCAoMy4zIGF0IGxlYXN0KSAqZG8qIG5lZWQgdmVyc2lvbmVkIGxpYnMuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBvcGVuYnNkMy4zIHwgb3BlbmJzZDMuMy4qKQluZWVkX3ZlcnNpb249eWVzIDs7CisgICAgKikJCQkJbmVlZF92ZXJzaW9uPW5vICA7OworICBlc2FjCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBvcGVuYnNkMi5bODldIHwgb3BlbmJzZDIuWzg5XS4qKQorCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworCTs7CisgICAgICAqKQorCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKwk7OworICAgICAgZXNhYworICBlbHNlCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBmaQorICA7OworCitvczIqKQorICBsaWJuYW1lX3NwZWM9JyRuYW1lJworICBzaHJleHRfY21kcz0iLmRsbCIKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9ICRsaWJuYW1lLmEnCisgIGR5bmFtaWNfbGlua2VyPSdPUy8yIGxkLmV4ZScKKyAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICisgIDs7CisKK29zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgdmVyc2lvbl90eXBlPW9zZgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3Ivc2hsaWIgL3Vzci9jY3MvbGliIC91c3IvbGliL2NtcGxycy9jYyAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiAvdmFyL3NobGliIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKKyAgOzsKKworcmRvcyopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7CisKK3NvbGFyaXMqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAjIGxkZCBjb21wbGFpbnMgdW5sZXNzIGxpYnJhcmllcyBhcmUgZXhlY3V0YWJsZQorICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCAreCAkbGliJworICA7OworCitzdW5vczQqKQorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovdXNyL2V0YyIgbGRjb25maWcgJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgICAgbmVlZF9saWJfcHJlZml4PW5vCisgIGZpCisgIG5lZWRfdmVyc2lvbj15ZXMKKyAgOzsKKworc3lzdjQgfCBzeXN2NC4zKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKyAgICBzbmkpCisgICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKyAgICAgIDs7CisgICAgc2llbWVucykKKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgOzsKKyAgICBtb3Rvcm9sYSkKKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgbmVlZF92ZXJzaW9uPW5vCisgICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL2xpYiAvdXNyL2xpYiAvdXNyL2Njcy9saWInCisgICAgICA7OworICBlc2FjCisgIDs7CisKK3N5c3Y0Kk1QKikKKyAgaWYgdGVzdCAtZCAvdXNyL25lYyA7dGhlbgorICAgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0uJG1ham9yJworICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGZpCisgIDs7CisKK3N5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQorICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC1lbGYKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC91c3IvZ251L2xpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIgL2xpYicKKyAgZWxzZQorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9jY3MvbGliIC91c3IvbGliJworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIHNjbzMuMnY1KikKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC9saWIiCisJOzsKKyAgICBlc2FjCisgIGZpCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xpYicKKyAgOzsKKwordHBmKikKKyAgIyBUUEYgaXMgYSBjcm9zcy10YXJnZXQgb25seS4gIFByZWZlcnJlZCBjcm9zcy1ob3N0ID0gR05VL0xpbnV4LgorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK3V0czQqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICA7OworCisqKQorICBkeW5hbWljX2xpbmtlcj1ubworICA7OworZXNhYworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRkeW5hbWljX2xpbmtlciIgPiY1CiskYXNfZWNobyAiJGR5bmFtaWNfbGlua2VyIiA+JjY7IH0KK3Rlc3QgIiRkeW5hbWljX2xpbmtlciIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCisKK3ZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSJQQVRIICRzaGxpYnBhdGhfdmFyICRydW5wYXRoX3ZhciIKK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsgR0NDX0VYRUNfUFJFRklYIENPTVBJTEVSX1BBVEggTElCUkFSWV9QQVRIIgorZmkKKworaWYgdGVzdCAiJHtsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIgorZmkKK2lmIHRlc3QgIiR7bHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyIKK2ZpCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zLi4uICIgPiY2OyB9CitoYXJkY29kZV9hY3Rpb25fQ1hYPQoraWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYIiB8fAorICAgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyX0NYWCIgfHwKKyAgIHRlc3QgIlgkaGFyZGNvZGVfYXV0b21hdGljX0NYWCIgPSAiWHllcyIgOyB0aGVuCisKKyAgIyBXZSBjYW4gaGFyZGNvZGUgbm9uLWV4aXN0ZW50IGRpcmVjdG9yaWVzLgorICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0X0NYWCIgIT0gbm8gJiYKKyAgICAgIyBJZiB0aGUgb25seSBtZWNoYW5pc20gdG8gYXZvaWQgaGFyZGNvZGluZyBpcyBzaGxpYnBhdGhfdmFyLCB3ZQorICAgICAjIGhhdmUgdG8gcmVsaW5rLCBvdGhlcndpc2Ugd2UgbWlnaHQgbGluayB3aXRoIGFuIGluc3RhbGxlZCBsaWJyYXJ5CisgICAgICMgd2hlbiB3ZSBzaG91bGQgYmUgbGlua2luZyB3aXRoIGEgeWV0LXRvLWJlLWluc3RhbGxlZCBvbmUKKyAgICAgIyMgdGVzdCAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgQ1hYKSIgIT0gbm8gJiYKKyAgICAgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0xfQ1hYIiAhPSBubzsgdGhlbgorICAgICMgTGlua2luZyBhbHdheXMgaGFyZGNvZGVzIHRoZSB0ZW1wb3JhcnkgbGlicmFyeSBkaXJlY3RvcnkuCisgICAgaGFyZGNvZGVfYWN0aW9uX0NYWD1yZWxpbmsKKyAgZWxzZQorICAgICMgV2UgY2FuIGxpbmsgd2l0aG91dCBoYXJkY29kaW5nLCBhbmQgd2UgY2FuIGhhcmRjb2RlIG5vbmV4aXN0aW5nIGRpcnMuCisgICAgaGFyZGNvZGVfYWN0aW9uX0NYWD1pbW1lZGlhdGUKKyAgZmkKK2Vsc2UKKyAgIyBXZSBjYW5ub3QgaGFyZGNvZGUgYW55dGhpbmcsIG9yIGVsc2Ugd2UgY2FuIG9ubHkgaGFyZGNvZGUgZXhpc3RpbmcKKyAgIyBkaXJlY3Rvcmllcy4KKyAgaGFyZGNvZGVfYWN0aW9uX0NYWD11bnN1cHBvcnRlZAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkaGFyZGNvZGVfYWN0aW9uX0NYWCIgPiY1CiskYXNfZWNobyAiJGhhcmRjb2RlX2FjdGlvbl9DWFgiID4mNjsgfQorCitpZiB0ZXN0ICIkaGFyZGNvZGVfYWN0aW9uX0NYWCIgPSByZWxpbmsgfHwKKyAgIHRlc3QgIiRpbmhlcml0X3JwYXRoX0NYWCIgPSB5ZXM7IHRoZW4KKyAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3Qgc3VwcG9ydGVkCisgIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8KK2VsaWYgdGVzdCAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgPSB5ZXMgfHwKKyAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0gbm87IHRoZW4KKyAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3QgbmVjZXNzYXJ5CisgIGVuYWJsZV9mYXN0X2luc3RhbGw9bmVlZGxlc3MKK2ZpCisKKworCisKKworCisKKyAgZmkgIyB0ZXN0IC1uICIkY29tcGlsZXIiCisKKyAgQ0M9JGx0X3NhdmVfQ0MKKyAgQ0ZMQUdTPSRsdF9zYXZlX0NGTEFHUworICBMRENYWD0kTEQKKyAgTEQ9JGx0X3NhdmVfTEQKKyAgR0NDPSRsdF9zYXZlX0dDQworICB3aXRoX2dudV9sZD0kbHRfc2F2ZV93aXRoX2dudV9sZAorICBsdF9jdl9wYXRoX0xEQ1hYPSRsdF9jdl9wYXRoX0xECisgIGx0X2N2X3BhdGhfTEQ9JGx0X3NhdmVfcGF0aF9MRAorICBsdF9jdl9wcm9nX2dudV9sZGN4eD0kbHRfY3ZfcHJvZ19nbnVfbGQKKyAgbHRfY3ZfcHJvZ19nbnVfbGQ9JGx0X3NhdmVfd2l0aF9nbnVfbGQKK2ZpICMgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXMKKworYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCisKKworCisKKworCisKKworCisKKworCisKKworICAgICAgICBhY19jb25maWdfY29tbWFuZHM9IiRhY19jb25maWdfY29tbWFuZHMgbGlidG9vbCIKKworCisKKworIyBPbmx5IGV4cGFuZCBvbmNlOgorCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSBDKysgY29tcGlsZXIgd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgQysrIGNvbXBpbGVyIHdvcmtzLi4uICIgPiY2OyB9CitpZiAke2F2YWhpX2N2X3N5c19jeHhfd29ya3MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgYWNfZXh0PWNwcAorYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKKworICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KK2ludCBtYWluKCkgeyByZXR1cm4gMDsgfQorX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYXZhaGlfY3Zfc3lzX2N4eF93b3Jrcz15ZXMKK2Vsc2UKKyAgYXZhaGlfY3Zfc3lzX2N4eF93b3Jrcz1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgIGFjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhdmFoaV9jdl9zeXNfY3h4X3dvcmtzIiA+JjUKKyRhc19lY2hvICIkYXZhaGlfY3Zfc3lzX2N4eF93b3JrcyIgPiY2OyB9CisgaWYgWyAieCRhdmFoaV9jdl9zeXNfY3h4X3dvcmtzIiA9ICJ4bm8iIF07IHRoZW4KKyAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJUaGUgQysrIGNvbXBpbGVyIGRvZXMgbm90IHdvcmsKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CisgZmkKKworCisKKworYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCithY3hfcHRocmVhZF9vaz1ubworCisjIFdlIHVzZWQgdG8gY2hlY2sgZm9yIHB0aHJlYWQuaCBmaXJzdCwgYnV0IHRoaXMgZmFpbHMgaWYgcHRocmVhZC5oCisjIHJlcXVpcmVzIHNwZWNpYWwgY29tcGlsZXIgZmxhZ3MgKGUuZy4gb24gVHJ1ZTY0IG9yIFNlcXVlbnQpLgorIyBJdCBnZXRzIGNoZWNrZWQgZm9yIGluIHRoZSBsaW5rIHRlc3QgYW55d2F5LgorCisjIEZpcnN0IG9mIGFsbCwgY2hlY2sgaWYgdGhlIHVzZXIgaGFzIHNldCBhbnkgb2YgdGhlIFBUSFJFQURfTElCUywKKyMgZXRjZXRlcmEgZW52aXJvbm1lbnQgdmFyaWFibGVzLCBhbmQgaWYgdGhyZWFkcyBsaW5raW5nIHdvcmtzIHVzaW5nCisjIHRoZW06CitpZiB0ZXN0IHgiJFBUSFJFQURfTElCUyRQVEhSRUFEX0NGTEFHUyIgIT0geDsgdGhlbgorICAgICAgICBzYXZlX0NGTEFHUz0iJENGTEFHUyIKKyAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRQVEhSRUFEX0NGTEFHUyIKKyAgICAgICAgc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgICAgTElCUz0iJFBUSFJFQURfTElCUyAkTElCUyIKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgcHRocmVhZF9qb2luIGluIExJQlM9JFBUSFJFQURfTElCUyB3aXRoIENGTEFHUz0kUFRIUkVBRF9DRkxBR1MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHB0aHJlYWRfam9pbiBpbiBMSUJTPSRQVEhSRUFEX0xJQlMgd2l0aCBDRkxBR1M9JFBUSFJFQURfQ0ZMQUdTLi4uICIgPiY2OyB9CisgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBwdGhyZWFkX2pvaW4gKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBwdGhyZWFkX2pvaW4gKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWN4X3B0aHJlYWRfb2s9eWVzCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY3hfcHRocmVhZF9vayIgPiY1CiskYXNfZWNobyAiJGFjeF9wdGhyZWFkX29rIiA+JjY7IH0KKyAgICAgICAgaWYgdGVzdCB4IiRhY3hfcHRocmVhZF9vayIgPSB4bm87IHRoZW4KKyAgICAgICAgICAgICAgICBQVEhSRUFEX0xJQlM9IiIKKyAgICAgICAgICAgICAgICBQVEhSRUFEX0NGTEFHUz0iIgorICAgICAgICBmaQorICAgICAgICBMSUJTPSIkc2F2ZV9MSUJTIgorICAgICAgICBDRkxBR1M9IiRzYXZlX0NGTEFHUyIKK2ZpCisKKyMgV2UgbXVzdCBjaGVjayBmb3IgdGhlIHRocmVhZHMgbGlicmFyeSB1bmRlciBhIG51bWJlciBvZiBkaWZmZXJlbnQKKyMgbmFtZXM7IHRoZSBvcmRlcmluZyBpcyB2ZXJ5IGltcG9ydGFudCBiZWNhdXNlIHNvbWUgc3lzdGVtcworIyAoZS5nLiBERUMpIGhhdmUgYm90aCAtbHB0aHJlYWQgYW5kIC1scHRocmVhZHMsIHdoZXJlIG9uZSBvZiB0aGUKKyMgbGlicmFyaWVzIGlzIGJyb2tlbiAobm9uLVBPU0lYKS4KKworIyBDcmVhdGUgYSBsaXN0IG9mIHRocmVhZCBmbGFncyB0byB0cnkuICBJdGVtcyBzdGFydGluZyB3aXRoIGEgIi0iIGFyZQorIyBDIGNvbXBpbGVyIGZsYWdzLCBhbmQgb3RoZXIgaXRlbXMgYXJlIGxpYnJhcnkgbmFtZXMsIGV4Y2VwdCBmb3IgIm5vbmUiCisjIHdoaWNoIGluZGljYXRlcyB0aGF0IHdlIHRyeSB3aXRob3V0IGFueSBmbGFncyBhdCBhbGwsIGFuZCAicHRocmVhZC1jb25maWciCisjIHdoaWNoIGlzIGEgcHJvZ3JhbSByZXR1cm5pbmcgdGhlIGZsYWdzIGZvciB0aGUgUHRoIGVtdWxhdGlvbiBsaWJyYXJ5LgorCithY3hfcHRocmVhZF9mbGFncz0icHRocmVhZHMgbm9uZSAtS3RocmVhZCAta3RocmVhZCBsdGhyZWFkIC1wdGhyZWFkIC1wdGhyZWFkcyAtbXRocmVhZHMgcHRocmVhZCAtLXRocmVhZC1zYWZlIC1tdCBwdGhyZWFkLWNvbmZpZyIKKworIyBUaGUgb3JkZXJpbmcgKmlzKiAoc29tZXRpbWVzKSBpbXBvcnRhbnQuICBTb21lIG5vdGVzIG9uIHRoZQorIyBpbmRpdmlkdWFsIGl0ZW1zIGZvbGxvdzoKKworIyBwdGhyZWFkczogQUlYIChtdXN0IGNoZWNrIHRoaXMgYmVmb3JlIC1scHRocmVhZCkKKyMgbm9uZTogaW4gY2FzZSB0aHJlYWRzIGFyZSBpbiBsaWJjOyBzaG91bGQgYmUgdHJpZWQgYmVmb3JlIC1LdGhyZWFkIGFuZAorIyAgICAgICBvdGhlciBjb21waWxlciBmbGFncyB0byBwcmV2ZW50IGNvbnRpbnVhbCBjb21waWxlciB3YXJuaW5ncworIyAtS3RocmVhZDogU2VxdWVudCAodGhyZWFkcyBpbiBsaWJjLCBidXQgLUt0aHJlYWQgbmVlZGVkIGZvciBwdGhyZWFkLmgpCisjIC1rdGhyZWFkOiBGcmVlQlNEIGtlcm5lbCB0aHJlYWRzIChwcmVmZXJyZWQgdG8gLXB0aHJlYWQgc2luY2UgU01QLWFibGUpCisjIGx0aHJlYWQ6IExpbnV4VGhyZWFkcyBwb3J0IG9uIEZyZWVCU0QgKGFsc28gcHJlZmVycmVkIHRvIC1wdGhyZWFkKQorIyAtcHRocmVhZDogTGludXgvZ2NjIChrZXJuZWwgdGhyZWFkcyksIEJTRC9nY2MgKHVzZXJsYW5kIHRocmVhZHMpCisjIC1wdGhyZWFkczogU29sYXJpcy9nY2MKKyMgLW10aHJlYWRzOiBNaW5ndzMyL2djYywgTHlueC9nY2MKKyMgLW10OiBTdW4gV29ya3Nob3AgQyAobWF5IG9ubHkgbGluayBTdW5PUyB0aHJlYWRzIFstbHRocmVhZF0sIGJ1dCBpdAorIyAgICAgIGRvZXNuJ3QgaHVydCB0byBjaGVjayBzaW5jZSB0aGlzIHNvbWV0aW1lcyBkZWZpbmVzIHB0aHJlYWRzIHRvbzsKKyMgICAgICBhbHNvIGRlZmluZXMgLURfUkVFTlRSQU5UKQorIyAgICAgIC4uLiAtbXQgaXMgYWxzbyB0aGUgcHRocmVhZHMgZmxhZyBmb3IgSFAvYUNDCisjIHB0aHJlYWQ6IExpbnV4LCBldGNldGVyYQorIyAtLXRocmVhZC1zYWZlOiBLQUkgQysrCisjIHB0aHJlYWQtY29uZmlnOiB1c2UgcHRocmVhZC1jb25maWcgcHJvZ3JhbSAoZm9yIEdOVSBQdGggbGlicmFyeSkKKworY2FzZSAiJHtob3N0X2NwdX0tJHtob3N0X29zfSIgaW4KKyAgICAgICAgKnNvbGFyaXMqKQorCisgICAgICAgICMgT24gU29sYXJpcyAoYXQgbGVhc3QsIGZvciBzb21lIHZlcnNpb25zKSwgbGliYyBjb250YWlucyBzdHViYmVkCisgICAgICAgICMgKG5vbi1mdW5jdGlvbmFsKSB2ZXJzaW9ucyBvZiB0aGUgcHRocmVhZHMgcm91dGluZXMsIHNvIGxpbmstYmFzZWQKKyAgICAgICAgIyB0ZXN0cyB3aWxsIGVycm9uZW91c2x5IHN1Y2NlZWQuICAoV2UgbmVlZCB0byBsaW5rIHdpdGggLXB0aHJlYWRzLy1tdC8KKyAgICAgICAgIyAtbHB0aHJlYWQuKSAgKFRoZSBzdHVicyBhcmUgbWlzc2luZyBwdGhyZWFkX2NsZWFudXBfcHVzaCwgb3IgcmF0aGVyCisgICAgICAgICMgYSBmdW5jdGlvbiBjYWxsZWQgYnkgdGhpcyBtYWNybywgc28gd2UgY291bGQgY2hlY2sgZm9yIHRoYXQsIGJ1dAorICAgICAgICAjIHdobyBrbm93cyB3aGV0aGVyIHRoZXknbGwgc3R1YiB0aGF0IHRvbyBpbiBhIGZ1dHVyZSBsaWJjLikgIFNvLAorICAgICAgICAjIHdlJ2xsIGp1c3QgbG9vayBmb3IgLXB0aHJlYWRzIGFuZCAtbHB0aHJlYWQgZmlyc3Q6CisKKyAgICAgICAgYWN4X3B0aHJlYWRfZmxhZ3M9Ii1wdGhyZWFkcyBwdGhyZWFkIC1tdCAtcHRocmVhZCAkYWN4X3B0aHJlYWRfZmxhZ3MiCisgICAgICAgIDs7Citlc2FjCisKK2lmIHRlc3QgeCIkYWN4X3B0aHJlYWRfb2siID0geG5vOyB0aGVuCitmb3IgZmxhZyBpbiAkYWN4X3B0aHJlYWRfZmxhZ3M7IGRvCisKKyAgICAgICAgY2FzZSAkZmxhZyBpbgorICAgICAgICAgICAgICAgIG5vbmUpCisgICAgICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHB0aHJlYWRzIHdvcmsgd2l0aG91dCBhbnkgZmxhZ3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBwdGhyZWFkcyB3b3JrIHdpdGhvdXQgYW55IGZsYWdzLi4uICIgPiY2OyB9CisgICAgICAgICAgICAgICAgOzsKKworICAgICAgICAgICAgICAgIC0qKQorICAgICAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBwdGhyZWFkcyB3b3JrIHdpdGggJGZsYWciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBwdGhyZWFkcyB3b3JrIHdpdGggJGZsYWcuLi4gIiA+JjY7IH0KKyAgICAgICAgICAgICAgICBQVEhSRUFEX0NGTEFHUz0iJGZsYWciCisgICAgICAgICAgICAgICAgOzsKKworCQlwdGhyZWFkLWNvbmZpZykKKwkJIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJwdGhyZWFkLWNvbmZpZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgcHRocmVhZC1jb25maWc7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjeF9wdGhyZWFkX2NvbmZpZys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY3hfcHRocmVhZF9jb25maWciOyB0aGVuCisgIGFjX2N2X3Byb2dfYWN4X3B0aHJlYWRfY29uZmlnPSIkYWN4X3B0aHJlYWRfY29uZmlnIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWN4X3B0aHJlYWRfY29uZmlnPSJ5ZXMiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgdGVzdCAteiAiJGFjX2N2X3Byb2dfYWN4X3B0aHJlYWRfY29uZmlnIiAmJiBhY19jdl9wcm9nX2FjeF9wdGhyZWFkX2NvbmZpZz0ibm8iCitmaQorZmkKK2FjeF9wdGhyZWFkX2NvbmZpZz0kYWNfY3ZfcHJvZ19hY3hfcHRocmVhZF9jb25maWcKK2lmIHRlc3QgLW4gIiRhY3hfcHRocmVhZF9jb25maWciOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWN4X3B0aHJlYWRfY29uZmlnIiA+JjUKKyRhc19lY2hvICIkYWN4X3B0aHJlYWRfY29uZmlnIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKwkJaWYgdGVzdCB4IiRhY3hfcHRocmVhZF9jb25maWciID0geG5vOyB0aGVuIGNvbnRpbnVlOyBmaQorCQlQVEhSRUFEX0NGTEFHUz0iYHB0aHJlYWQtY29uZmlnIC0tY2ZsYWdzYCIKKwkJUFRIUkVBRF9MSUJTPSJgcHRocmVhZC1jb25maWcgLS1sZGZsYWdzYCBgcHRocmVhZC1jb25maWcgLS1saWJzYCIKKwkJOzsKKworICAgICAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgdGhlIHB0aHJlYWRzIGxpYnJhcnkgLWwkZmxhZyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgdGhlIHB0aHJlYWRzIGxpYnJhcnkgLWwkZmxhZy4uLiAiID4mNjsgfQorICAgICAgICAgICAgICAgIFBUSFJFQURfTElCUz0iLWwkZmxhZyIKKyAgICAgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisKKyAgICAgICAgc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgICAgc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisgICAgICAgIExJQlM9IiRQVEhSRUFEX0xJQlMgJExJQlMiCisgICAgICAgIENGTEFHUz0iJENGTEFHUyAkUFRIUkVBRF9DRkxBR1MiCisKKyAgICAgICAgIyBDaGVjayBmb3IgdmFyaW91cyBmdW5jdGlvbnMuICBXZSBtdXN0IGluY2x1ZGUgcHRocmVhZC5oLAorICAgICAgICAjIHNpbmNlIHNvbWUgZnVuY3Rpb25zIG1heSBiZSBtYWNyb3MuICAoT24gdGhlIFNlcXVlbnQsIHdlCisgICAgICAgICMgbmVlZCBhIHNwZWNpYWwgZmxhZyAtS3RocmVhZCB0byBtYWtlIHRoaXMgaGVhZGVyIGNvbXBpbGUuKQorICAgICAgICAjIFdlIGNoZWNrIGZvciBwdGhyZWFkX2pvaW4gYmVjYXVzZSBpdCBpcyBpbiAtbHB0aHJlYWQgb24gSVJJWAorICAgICAgICAjIHdoaWxlIHB0aHJlYWRfY3JlYXRlIGlzIGluIGxpYmMuICBXZSBjaGVjayBmb3IgcHRocmVhZF9hdHRyX2luaXQKKyAgICAgICAgIyBkdWUgdG8gREVDIGNyYXppbmVzcyB3aXRoIC1scHRocmVhZHMuICBXZSBjaGVjayBmb3IKKyAgICAgICAgIyBwdGhyZWFkX2NsZWFudXBfcHVzaCBiZWNhdXNlIGl0IGlzIG9uZSBvZiB0aGUgZmV3IHB0aHJlYWQKKyAgICAgICAgIyBmdW5jdGlvbnMgb24gU29sYXJpcyB0aGF0IGRvZXNuJ3QgaGF2ZSBhIG5vbi1mdW5jdGlvbmFsIGxpYmMgc3R1Yi4KKyAgICAgICAgIyBXZSB0cnkgcHRocmVhZF9jcmVhdGUgb24gZ2VuZXJhbCBwcmluY2lwbGVzLgorICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8cHRocmVhZC5oPgoraW50CittYWluICgpCit7CitwdGhyZWFkX3QgdGg7IHB0aHJlYWRfam9pbih0aCwgMCk7CisgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX2F0dHJfaW5pdCgwKTsgcHRocmVhZF9jbGVhbnVwX3B1c2goMCwgMCk7CisgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX2NyZWF0ZSgwLDAsMCwwKTsgcHRocmVhZF9jbGVhbnVwX3BvcCgwKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY3hfcHRocmVhZF9vaz15ZXMKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorCisgICAgICAgIExJQlM9IiRzYXZlX0xJQlMiCisgICAgICAgIENGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWN4X3B0aHJlYWRfb2siID4mNQorJGFzX2VjaG8gIiRhY3hfcHRocmVhZF9vayIgPiY2OyB9CisgICAgICAgIGlmIHRlc3QgIngkYWN4X3B0aHJlYWRfb2siID0geHllczsgdGhlbgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBmaQorCisgICAgICAgIFBUSFJFQURfTElCUz0iIgorICAgICAgICBQVEhSRUFEX0NGTEFHUz0iIgorZG9uZQorZmkKKworIyBWYXJpb3VzIG90aGVyIGNoZWNrczoKK2lmIHRlc3QgIngkYWN4X3B0aHJlYWRfb2siID0geHllczsgdGhlbgorICAgICAgICBzYXZlX0xJQlM9IiRMSUJTIgorICAgICAgICBMSUJTPSIkUFRIUkVBRF9MSUJTICRMSUJTIgorICAgICAgICBzYXZlX0NGTEFHUz0iJENGTEFHUyIKKyAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRQVEhSRUFEX0NGTEFHUyIKKworICAgICAgICAjIERldGVjdCBBSVggbG9zc2FnZTogSk9JTkFCTEUgYXR0cmlidXRlIGlzIGNhbGxlZCBVTkRFVEFDSEVELgorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGpvaW5hYmxlIHB0aHJlYWQgYXR0cmlidXRlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBqb2luYWJsZSBwdGhyZWFkIGF0dHJpYnV0ZS4uLiAiID4mNjsgfQorCWF0dHJfbmFtZT11bmtub3duCisJZm9yIGF0dHIgaW4gUFRIUkVBRF9DUkVBVEVfSk9JTkFCTEUgUFRIUkVBRF9DUkVBVEVfVU5ERVRBQ0hFRDsgZG8KKwkgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHB0aHJlYWQuaD4KK2ludAorbWFpbiAoKQoreworaW50IGF0dHI9JGF0dHI7IHJldHVybiBhdHRyOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGF0dHJfbmFtZT0kYXR0cjsgYnJlYWsKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorCWRvbmUKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhdHRyX25hbWUiID4mNQorJGFzX2VjaG8gIiRhdHRyX25hbWUiID4mNjsgfQorICAgICAgICBpZiB0ZXN0ICIkYXR0cl9uYW1lIiAhPSBQVEhSRUFEX0NSRUFURV9KT0lOQUJMRTsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFBUSFJFQURfQ1JFQVRFX0pPSU5BQkxFICRhdHRyX25hbWUKK19BQ0VPRgorCisgICAgICAgIGZpCisKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBtb3JlIHNwZWNpYWwgZmxhZ3MgYXJlIHJlcXVpcmVkIGZvciBwdGhyZWFkcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBtb3JlIHNwZWNpYWwgZmxhZ3MgYXJlIHJlcXVpcmVkIGZvciBwdGhyZWFkcy4uLiAiID4mNjsgfQorICAgICAgICBmbGFnPW5vCisgICAgICAgIGNhc2UgIiR7aG9zdF9jcHV9LSR7aG9zdF9vc30iIGluCisgICAgICAgICAgICAqLWFpeCogfCAqLWZyZWVic2QqIHwgKi1kYXJ3aW4qKSBmbGFnPSItRF9USFJFQURfU0FGRSI7OworICAgICAgICAgICAgKnNvbGFyaXMqIHwgKi1vc2YqIHwgKi1ocHV4KikgZmxhZz0iLURfUkVFTlRSQU5UIjs7CisgICAgICAgIGVzYWMKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR7ZmxhZ30iID4mNQorJGFzX2VjaG8gIiR7ZmxhZ30iID4mNjsgfQorICAgICAgICBpZiB0ZXN0ICJ4JGZsYWciICE9IHhubzsgdGhlbgorICAgICAgICAgICAgUFRIUkVBRF9DRkxBR1M9IiRmbGFnICRQVEhSRUFEX0NGTEFHUyIKKyAgICAgICAgZmkKKworICAgICAgICBMSUJTPSIkc2F2ZV9MSUJTIgorICAgICAgICBDRkxBR1M9IiRzYXZlX0NGTEFHUyIKKyAgICAgICAgIyBNb3JlIEFJWCBsb3NzYWdlOiBtdXN0IGNvbXBpbGUgd2l0aCB4bGNfciBvciBjY19yCisJaWYgdGVzdCB4IiRHQ0MiICE9IHh5ZXM7IHRoZW4KKyAgICAgICAgICBmb3IgYWNfcHJvZyBpbiB4bGNfciBjY19yCitkbworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfUFRIUkVBRF9DQys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRQVEhSRUFEX0NDIjsgdGhlbgorICBhY19jdl9wcm9nX1BUSFJFQURfQ0M9IiRQVEhSRUFEX0NDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfUFRIUkVBRF9DQz0iJGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorUFRIUkVBRF9DQz0kYWNfY3ZfcHJvZ19QVEhSRUFEX0NDCitpZiB0ZXN0IC1uICIkUFRIUkVBRF9DQyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRQVEhSRUFEX0NDIiA+JjUKKyRhc19lY2hvICIkUFRIUkVBRF9DQyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgIHRlc3QgLW4gIiRQVEhSRUFEX0NDIiAmJiBicmVhaworZG9uZQordGVzdCAtbiAiJFBUSFJFQURfQ0MiIHx8IFBUSFJFQURfQ0M9IiR7Q0N9IgorCisgICAgICAgIGVsc2UKKyAgICAgICAgICBQVEhSRUFEX0NDPSRDQworCWZpCisKKyAgICMgVGhlIG5leHQgcGFydCB0cmllcyB0byBkZXRlY3QgR0NDIGluY29uc2lzdGVuY3kgd2l0aCAtc2hhcmVkIG9uIHNvbWUKKyAgICMgYXJjaGl0ZWN0dXJlcyBhbmQgc3lzdGVtcy4gVGhlIHByb2JsZW0gaXMgdGhhdCBpbiBjZXJ0YWluCisgICAjIGNvbmZpZ3VyYXRpb25zLCB3aGVuIC1zaGFyZWQgaXMgc3BlY2lmaWVkLCBHQ0MgImZvcmdldHMiIHRvCisgICAjIGludGVybmFsbHkgdXNlIHZhcmlvdXMgZmxhZ3Mgd2hpY2ggYXJlIHN0aWxsIG5lY2Vzc2FyeS4KKworICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIGNoZWNrIGZvciBHQ0MgcHRocmVhZC9zaGFyZWQgaW5jb25zaXN0ZW5jaWVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gY2hlY2sgZm9yIEdDQyBwdGhyZWFkL3NoYXJlZCBpbmNvbnNpc3RlbmNpZXMuLi4gIiA+JjY7IH0KKyAgIGNoZWNrX2luY29uc2lzdGVuY2llcz15ZXMKKyAgIGNhc2UgIiR7aG9zdF9jcHV9LSR7aG9zdF9vc30iIGluCisgICAgICotZGFyd2luKikgY2hlY2tfaW5jb25zaXN0ZW5jaWVzPW5vIDs7CisgICBlc2FjCisgICBpZiB0ZXN0IHgiJEdDQyIgIT0geHllcyAtbyAieCRjaGVja19pbmNvbnNpc3RlbmNpZXMiICE9IHh5ZXMgOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgIGVsc2UKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKKyAgICAgICMgSW4gb3JkZXIgbm90IHRvIGNyZWF0ZSBzZXZlcmFsIGxldmVscyBvZiBpbmRlbnRhdGlvbiwgd2UgdGVzdAorICAgICAgIyB0aGUgdmFsdWUgb2YgIiRvayIgdW50aWwgd2UgZmluZCBvdXQgdGhlIGN1cmUgb3IgcnVuIG91dCBvZgorICAgICAgIyBpZGVhcy4KKyAgICAgIG9rPSJubyIKKworICAgICAgIworICAgICAgIyBQcmVwYXJlIHRoZSBmbGFncworICAgICAgIworICAgICAgc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisgICAgICBzYXZlX0xJQlM9IiRMSUJTIgorICAgICAgc2F2ZV9DQz0iJENDIgorICAgICAgIyBUcnkgd2l0aCB0aGUgZmxhZ3MgZGV0ZXJtaW5lZCBieSB0aGUgZWFybGllciBjaGVja3MuCisgICAgICAjCisgICAgICAjIC1XbCwteixkZWZzIGZvcmNlcyBsaW5rLXRpbWUgc3ltYm9sIHJlc29sdXRpb24sIHNvIHRoYXQgdGhlCisgICAgICAjIGxpbmtpbmcgY2hlY2tzIHdpdGggLXNoYXJlZCBhY3R1YWxseSBoYXZlIGFueSB2YWx1ZQorICAgICAgIworICAgICAgIyBGSVhNRTogLWZQSUMgaXMgcmVxdWlyZWQgZm9yIC1zaGFyZWQgb24gbWFueSBhcmNoaXRlY3R1cmVzLAorICAgICAgIyBzbyB3ZSBzcGVjaWZ5IGl0IGhlcmUsIGJ1dCB0aGUgcmlnaHQgd2F5IHdvdWxkIHByb2JhYmx5IGJlIHRvCisgICAgICAjIHByb3Blcmx5IGRldGVjdCB3aGV0aGVyIGl0IGlzIGFjdHVhbGx5IHJlcXVpcmVkLgorICAgICAgQ0ZMQUdTPSItc2hhcmVkIC1mUElDIC1XbCwteixkZWZzICRDRkxBR1MgJFBUSFJFQURfQ0ZMQUdTIgorICAgICAgTElCUz0iJFBUSFJFQURfTElCUyAkTElCUyIKKyAgICAgIENDPSIkUFRIUkVBRF9DQyIKKworICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIC1wdGhyZWFkIGlzIHN1ZmZpY2llbnQgd2l0aCAtc2hhcmVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgLXB0aHJlYWQgaXMgc3VmZmljaWVudCB3aXRoIC1zaGFyZWQuLi4gIiA+JjY7IH0KKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxwdGhyZWFkLmg+CitpbnQKK21haW4gKCkKK3sKK3B0aHJlYWRfdCB0aDsgcHRocmVhZF9qb2luKHRoLCAwKTsKKyAgICAgICAgIHB0aHJlYWRfYXR0cl9pbml0KDApOyBwdGhyZWFkX2NsZWFudXBfcHVzaCgwLCAwKTsKKyAgICAgICAgIHB0aHJlYWRfY3JlYXRlKDAsMCwwLDApOyBwdGhyZWFkX2NsZWFudXBfcG9wKDApOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIG9rPXllcworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisKKyAgICAgIGlmIHRlc3QgIngkb2siID0geHllczsgdGhlbgorICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgIGVsc2UKKyAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgZmkKKworICAgICAgIworICAgICAgIyBMaW51eCBnY2Mgb24gc29tZSBhcmNoaXRlY3R1cmVzIHN1Y2ggYXMgbWlwcy9taXBzZWwgZm9yZ2V0cworICAgICAgIyBhYm91dCAtbHB0aHJlYWQKKyAgICAgICMKKyAgICAgIGlmIHRlc3QgeCIkb2siID0geG5vOyB0aGVuCisgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgLWxwdGhyZWFkIGZpeGVzIHRoYXQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAtbHB0aHJlYWQgZml4ZXMgdGhhdC4uLiAiID4mNjsgfQorICAgICAgICAgTElCUz0iLWxwdGhyZWFkICRQVEhSRUFEX0xJQlMgJHNhdmVfTElCUyIKKyAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxwdGhyZWFkLmg+CitpbnQKK21haW4gKCkKK3sKK3B0aHJlYWRfdCB0aDsgcHRocmVhZF9qb2luKHRoLCAwKTsKKyAgICAgICAgICAgIHB0aHJlYWRfYXR0cl9pbml0KDApOyBwdGhyZWFkX2NsZWFudXBfcHVzaCgwLCAwKTsKKyAgICAgICAgICAgIHB0aHJlYWRfY3JlYXRlKDAsMCwwLDApOyBwdGhyZWFkX2NsZWFudXBfcG9wKDApOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIG9rPXllcworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisKKyAgICAgICAgIGlmIHRlc3QgIngkb2siID0geHllczsgdGhlbgorICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgICAgICAgIFBUSFJFQURfTElCUz0iLWxwdGhyZWFkICRQVEhSRUFEX0xJQlMiCisgICAgICAgICBlbHNlCisgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgICAgIGZpCisgICAgICBmaQorICAgICAgIworICAgICAgIyBGcmVlQlNEIDQuMTAgZ2NjIGZvcmdldHMgdG8gdXNlIC1sY19yIGluc3RlYWQgb2YgLWxjCisgICAgICAjCisgICAgICBpZiB0ZXN0IHgiJG9rIiA9IHhubzsgdGhlbgorICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIC1sY19yIGZpeGVzIHRoYXQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAtbGNfciBmaXhlcyB0aGF0Li4uICIgPiY2OyB9CisgICAgICAgICBMSUJTPSItbGNfciAkUFRIUkVBRF9MSUJTICRzYXZlX0xJQlMiCisgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8cHRocmVhZC5oPgoraW50CittYWluICgpCit7CitwdGhyZWFkX3QgdGg7IHB0aHJlYWRfam9pbih0aCwgMCk7CisgICAgICAgICAgICAgIHB0aHJlYWRfYXR0cl9pbml0KDApOyBwdGhyZWFkX2NsZWFudXBfcHVzaCgwLCAwKTsKKyAgICAgICAgICAgICAgcHRocmVhZF9jcmVhdGUoMCwwLDAsMCk7IHB0aHJlYWRfY2xlYW51cF9wb3AoMCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgb2s9eWVzCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworICAgICAgICAgaWYgdGVzdCAieCRvayIgPSB4eWVzOyB0aGVuCisgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAgICAgICAgUFRIUkVBRF9MSUJTPSItbGNfciAkUFRIUkVBRF9MSUJTIgorICAgICAgICAgZWxzZQorICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICAgICBmaQorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgeCIkb2siID0geG5vOyB0aGVuCisgICAgICAgICAjIE9LLCB3ZSBoYXZlIHJ1biBvdXQgb2YgaWRlYXMKKyAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogSW1wb3NzaWJsZSB0byBkZXRlcm1pbmUgaG93IHRvIHVzZSBwdGhyZWFkcyB3aXRoIHNoYXJlZCBsaWJyYXJpZXMiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogSW1wb3NzaWJsZSB0byBkZXRlcm1pbmUgaG93IHRvIHVzZSBwdGhyZWFkcyB3aXRoIHNoYXJlZCBsaWJyYXJpZXMiID4mMjt9CisKKyAgICAgICAgICMgc28gaXQncyBub3Qgc2FmZSB0byBhc3N1bWUgdGhhdCB3ZSBtYXkgdXNlIHB0aHJlYWRzCisgICAgICAgICBhY3hfcHRocmVhZF9vaz1ubworICAgICAgZmkKKworICAgICAgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCisgICAgICBMSUJTPSIkc2F2ZV9MSUJTIgorICAgICAgQ0M9IiRzYXZlX0NDIgorICAgZmkKK2Vsc2UKKyAgICAgICAgUFRIUkVBRF9DQz0iJENDIgorZmkKKworCisKKworCisjIEZpbmFsbHksIGV4ZWN1dGUgQUNUSU9OLUlGLUZPVU5EL0FDVElPTi1JRi1OT1QtRk9VTkQ6CitpZiB0ZXN0IHgiJGFjeF9wdGhyZWFkX29rIiA9IHh5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9QVEhSRUFEIDEiID4+Y29uZmRlZnMuaAorCisgICAgICAgIDoKK2Vsc2UKKyAgICAgICAgYWN4X3B0aHJlYWRfb2s9bm8KKyAgICAgICAgYXNfZm5fZXJyb3IgJD8gIk1pc3NpbmcgUE9TSVggVGhyZWFkcyBzdXBwb3J0IiAiJExJTkVOTyIgNQorZmkKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworCisKKyMKKyMgQ2hlY2sgZm9yIG5ldGxpbmsuaAorIworYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgImxpbnV4L25ldGxpbmsuaCIgImFjX2N2X2hlYWRlcl9saW51eF9uZXRsaW5rX2giICIKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2xpbnV4X25ldGxpbmtfaCIgPSB4eWVzOyB0aGVuIDoKKyAgSEFWRV9ORVRMSU5LPXllcworCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX05FVExJTksgLyoqLyIgPj5jb25mZGVmcy5oCisKKworZmkKKworCisKKyBpZiAgdGVzdCB4IiRIQVZFX05FVExJTksiID0geHllcyA7IHRoZW4KKyAgSEFWRV9ORVRMSU5LX1RSVUU9CisgIEhBVkVfTkVUTElOS19GQUxTRT0nIycKK2Vsc2UKKyAgSEFWRV9ORVRMSU5LX1RSVUU9JyMnCisgIEhBVkVfTkVUTElOS19GQUxTRT0KK2ZpCisKKworIworIyBDaGVjayBmb3IgbmV0L3JvdXRlLmgKKyMKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICJuZXQvcm91dGUuaCIgImFjX2N2X2hlYWRlcl9uZXRfcm91dGVfaCIgIgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXQvaWZfZGwuaD4KKworIgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfbmV0X3JvdXRlX2giID0geHllczsgdGhlbiA6CisgIEhBVkVfUEZfUk9VVEU9eWVzCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfUEZfUk9VVEUgLyoqLyIgPj5jb25mZGVmcy5oCisKKworZmkKKworCisKKyBpZiAgdGVzdCB4IiRIQVZFX1BGX1JPVVRFIiA9IHh5ZXMgOyB0aGVuCisgIEhBVkVfUEZfUk9VVEVfVFJVRT0KKyAgSEFWRV9QRl9ST1VURV9GQUxTRT0nIycKK2Vsc2UKKyAgSEFWRV9QRl9ST1VURV9UUlVFPScjJworICBIQVZFX1BGX1JPVVRFX0ZBTFNFPQorZmkKKworCisjCisjIENoZWNrIGZvciBzeXMvZmlsaW8uaDsgbmVlZGVkIGZvciBGSU9OUkVBRCBvbiBTb2xhcmlzCisjCithY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAic3lzL2ZpbGlvLmgiICJhY19jdl9oZWFkZXJfc3lzX2ZpbGlvX2giICIKKworIgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfc3lzX2ZpbGlvX2giID0geHllczsgdGhlbiA6CisgIEhBVkVfU1lTX0ZJTElPX0g9eWVzCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1lTX0ZJTElPX0ggLyoqLyIgPj5jb25mZGVmcy5oCisKKworZmkKKworCisKKyBpZiAgdGVzdCB4IiRIQVZFX1NZU19GSUxJT19IIiA9IHh5ZXMgOyB0aGVuCisgIEhBVkVfU1lTX0ZJTElPX0hfVFJVRT0KKyAgSEFWRV9TWVNfRklMSU9fSF9GQUxTRT0nIycKK2Vsc2UKKyAgSEFWRV9TWVNfRklMSU9fSF9UUlVFPScjJworICBIQVZFX1NZU19GSUxJT19IX0ZBTFNFPQorZmkKKworCisjCisjIENoZWNrIGZvciBzeXMvc3lzY3RsLmg7IG5vdCBwcmVzZW50IG9uIFNvbGFyaXMKKyMKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICJzeXMvc3lzY3RsLmgiICJhY19jdl9oZWFkZXJfc3lzX3N5c2N0bF9oIiAiCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9zeXNfc3lzY3RsX2giID0geHllczsgdGhlbiA6CisgIEhBVkVfU1lTX1NZU0NUTD15ZXMKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TWVNfU1lTQ1RMX0ggLyoqLyIgPj5jb25mZGVmcy5oCisKKworZmkKKworCisKKyBpZiAgdGVzdCB4IiRIQVZFX1NZU19TWVNDVExfSCIgPSB4eWVzIDsgdGhlbgorICBIQVZFX1NZU19TWVNDVExfSF9UUlVFPQorICBIQVZFX1NZU19TWVNDVExfSF9GQUxTRT0nIycKK2Vsc2UKKyAgSEFWRV9TWVNfU1lTQ1RMX0hfVFJVRT0nIycKKyAgSEFWRV9TWVNfU1lTQ1RMX0hfRkFMU0U9CitmaQorCisKKyMKKyMgQ2hlY2sgZm9yIGxpZmNvbmYgc3RydWN0OyBvbmx5IHByZXNlbnQgb24gU29sYXJpcworIworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3RydWN0IGxpZmNvbmYiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN0cnVjdCBsaWZjb25mLi4uICIgPiY2OyB9CitpZiAke2F2YWhpX2N2X2hhc19zdHJ1Y3RfbGlmY29uZis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0L2lmLmg+CisKK2ludAorbWFpbiAoKQoreworc2l6ZW9mIChzdHJ1Y3QgbGlmY29uZik7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYXZhaGlfY3ZfaGFzX3N0cnVjdF9saWZjb25mPXllcworZWxzZQorICBhdmFoaV9jdl9oYXNfc3RydWN0X2xpZmNvbmY9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYXZhaGlfY3ZfaGFzX3N0cnVjdF9saWZjb25mIiA+JjUKKyRhc19lY2hvICIkYXZhaGlfY3ZfaGFzX3N0cnVjdF9saWZjb25mIiA+JjY7IH0KK2lmIHRlc3QgJGF2YWhpX2N2X2hhc19zdHJ1Y3RfbGlmY29uZiA9IHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX1NUUlVDVF9MSUZDT05GIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisjCisjIENoZWNrIGZvciBzdHJ1Y3QgaXBfbXJlcW4KKyMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN0cnVjdCBpcF9tcmVxbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3RydWN0IGlwX21yZXFuLi4uICIgPiY2OyB9CitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgoraW50CittYWluICgpCit7CisKKwlzdHJ1Y3QgaXBfbXJlcW4gbXJlcTsKKwltcmVxLmltcl9hZGRyZXNzLnNfYWRkciA9IDA7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisJIyBZZXMsIHdlIGhhdmUgaXQuLi4KKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX1NUUlVDVF9JUF9NUkVRTiAvKiovIiA+PmNvbmZkZWZzLmgKKworCitlbHNlCisKKwkjIFdlJ2xsIGp1c3QgaGF2ZSB0byB0cnkgYW5kIHVzZSBzdHJ1Y3QgaXBfbXJlcQorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN0cnVjdCBpcF9tcmVxIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdHJ1Y3QgaXBfbXJlcS4uLiAiID4mNjsgfQorCWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CitpbnQKK21haW4gKCkKK3sKKworCQlzdHJ1Y3QgaXBfbXJlcSBtcmVxOworCQltcmVxLmltcl9pbnRlcmZhY2Uuc19hZGRyID0gMDsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKwkJIyBZZXMsIHdlIGhhdmUgaXQuLi4KKwkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TVFJVQ1RfSVBfTVJFUSAvKiovIiA+PmNvbmZkZWZzLmgKKworCitlbHNlCisKKwkJIyBObyBtdWx0aWNhc3Qgc3VwcG9ydAorCQkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCisjCisjIERldGVjdGluZyB0aGUgbGludXggZGlzdHJpYnV0aW9uIGZvciBzcGVjaWZpYyB0aGluZ3MgbGlrZSBpbml0IHNjcmlwdHMuCisjCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZGlzdHJvIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9kaXN0cm8rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2Rpc3RybzsKK2ZpCisKK2lmIHRlc3QgInokd2l0aF9kaXN0cm8iID0gInoiOyB0aGVuCisgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBUYXJnZXQgZGlzdHJpYnV0aW9uIGNhbm5vdCBiZSByZWxpYWJseSBkZXRlY3RlZCB3aGVuIGNyb3NzLWNvbXBpbGluZy4gWW91IHNob3VsZCBzcGVjaWZ5IGl0IHdpdGggLS13aXRoLWRpc3RybyAoc2VlICQwIC0taGVscCBmb3IgcmVjb2duaXplZCBkaXN0cm9zKSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBUYXJnZXQgZGlzdHJpYnV0aW9uIGNhbm5vdCBiZSByZWxpYWJseSBkZXRlY3RlZCB3aGVuIGNyb3NzLWNvbXBpbGluZy4gWW91IHNob3VsZCBzcGVjaWZ5IGl0IHdpdGggLS13aXRoLWRpc3RybyAoc2VlICQwIC0taGVscCBmb3IgcmVjb2duaXplZCBkaXN0cm9zKSIgPiYyO30KKyAgICBlbHNlCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIC9ldGMvbGZzLXJlbGVhc2UiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIC9ldGMvbGZzLXJlbGVhc2UuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfZmlsZV9fZXRjX2xmc19yZWxlYXNlKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXMgJiYKKyAgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBjaGVjayBmb3IgZmlsZSBleGlzdGVuY2Ugd2hlbiBjcm9zcyBjb21waWxpbmciICIkTElORU5PIiA1CitpZiB0ZXN0IC1yICIvZXRjL2xmcy1yZWxlYXNlIjsgdGhlbgorICBhY19jdl9maWxlX19ldGNfbGZzX3JlbGVhc2U9eWVzCitlbHNlCisgIGFjX2N2X2ZpbGVfX2V0Y19sZnNfcmVsZWFzZT1ubworZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2ZpbGVfX2V0Y19sZnNfcmVsZWFzZSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2ZpbGVfX2V0Y19sZnNfcmVsZWFzZSIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2ZpbGVfX2V0Y19sZnNfcmVsZWFzZSIgPSB4eWVzOyB0aGVuIDoKKyAgd2l0aF9kaXN0cm89ImxmcyIKK2ZpCisKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgL2V0Yy9TdVNFLXJlbGVhc2UiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIC9ldGMvU3VTRS1yZWxlYXNlLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2ZpbGVfX2V0Y19TdVNFX3JlbGVhc2UrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyAmJgorICBhc19mbl9lcnJvciAkPyAiY2Fubm90IGNoZWNrIGZvciBmaWxlIGV4aXN0ZW5jZSB3aGVuIGNyb3NzIGNvbXBpbGluZyIgIiRMSU5FTk8iIDUKK2lmIHRlc3QgLXIgIi9ldGMvU3VTRS1yZWxlYXNlIjsgdGhlbgorICBhY19jdl9maWxlX19ldGNfU3VTRV9yZWxlYXNlPXllcworZWxzZQorICBhY19jdl9maWxlX19ldGNfU3VTRV9yZWxlYXNlPW5vCitmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfZmlsZV9fZXRjX1N1U0VfcmVsZWFzZSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2ZpbGVfX2V0Y19TdVNFX3JlbGVhc2UiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9maWxlX19ldGNfU3VTRV9yZWxlYXNlIiA9IHh5ZXM7IHRoZW4gOgorICB3aXRoX2Rpc3Rybz0ic3VzZSIKK2ZpCisKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgL2V0Yy9nZW50b28tcmVsZWFzZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgL2V0Yy9nZW50b28tcmVsZWFzZS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9maWxlX19ldGNfZ2VudG9vX3JlbGVhc2UrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyAmJgorICBhc19mbl9lcnJvciAkPyAiY2Fubm90IGNoZWNrIGZvciBmaWxlIGV4aXN0ZW5jZSB3aGVuIGNyb3NzIGNvbXBpbGluZyIgIiRMSU5FTk8iIDUKK2lmIHRlc3QgLXIgIi9ldGMvZ2VudG9vLXJlbGVhc2UiOyB0aGVuCisgIGFjX2N2X2ZpbGVfX2V0Y19nZW50b29fcmVsZWFzZT15ZXMKK2Vsc2UKKyAgYWNfY3ZfZmlsZV9fZXRjX2dlbnRvb19yZWxlYXNlPW5vCitmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfZmlsZV9fZXRjX2dlbnRvb19yZWxlYXNlIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfZmlsZV9fZXRjX2dlbnRvb19yZWxlYXNlIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfZmlsZV9fZXRjX2dlbnRvb19yZWxlYXNlIiA9IHh5ZXM7IHRoZW4gOgorICB3aXRoX2Rpc3Rybz0iZ2VudG9vIgorZmkKKworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAvZXRjL2FyY2gtcmVsZWFzZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgL2V0Yy9hcmNoLXJlbGVhc2UuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfZmlsZV9fZXRjX2FyY2hfcmVsZWFzZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzICYmCisgIGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY2hlY2sgZm9yIGZpbGUgZXhpc3RlbmNlIHdoZW4gY3Jvc3MgY29tcGlsaW5nIiAiJExJTkVOTyIgNQoraWYgdGVzdCAtciAiL2V0Yy9hcmNoLXJlbGVhc2UiOyB0aGVuCisgIGFjX2N2X2ZpbGVfX2V0Y19hcmNoX3JlbGVhc2U9eWVzCitlbHNlCisgIGFjX2N2X2ZpbGVfX2V0Y19hcmNoX3JlbGVhc2U9bm8KK2ZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9maWxlX19ldGNfYXJjaF9yZWxlYXNlIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfZmlsZV9fZXRjX2FyY2hfcmVsZWFzZSIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2ZpbGVfX2V0Y19hcmNoX3JlbGVhc2UiID0geHllczsgdGhlbiA6CisgIHdpdGhfZGlzdHJvPSJhcmNobGludXgiCitmaQorCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIC9ldGMvZGViaWFuX3ZlcnNpb24iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIC9ldGMvZGViaWFuX3ZlcnNpb24uLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfZmlsZV9fZXRjX2RlYmlhbl92ZXJzaW9uKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXMgJiYKKyAgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBjaGVjayBmb3IgZmlsZSBleGlzdGVuY2Ugd2hlbiBjcm9zcyBjb21waWxpbmciICIkTElORU5PIiA1CitpZiB0ZXN0IC1yICIvZXRjL2RlYmlhbl92ZXJzaW9uIjsgdGhlbgorICBhY19jdl9maWxlX19ldGNfZGViaWFuX3ZlcnNpb249eWVzCitlbHNlCisgIGFjX2N2X2ZpbGVfX2V0Y19kZWJpYW5fdmVyc2lvbj1ubworZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2ZpbGVfX2V0Y19kZWJpYW5fdmVyc2lvbiIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2ZpbGVfX2V0Y19kZWJpYW5fdmVyc2lvbiIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2ZpbGVfX2V0Y19kZWJpYW5fdmVyc2lvbiIgPSB4eWVzOyB0aGVuIDoKKyAgd2l0aF9kaXN0cm89ImRlYmlhbiIKK2ZpCisKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgL2V0Yy9yZWRoYXQtcmVsZWFzZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgL2V0Yy9yZWRoYXQtcmVsZWFzZS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9maWxlX19ldGNfcmVkaGF0X3JlbGVhc2UrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyAmJgorICBhc19mbl9lcnJvciAkPyAiY2Fubm90IGNoZWNrIGZvciBmaWxlIGV4aXN0ZW5jZSB3aGVuIGNyb3NzIGNvbXBpbGluZyIgIiRMSU5FTk8iIDUKK2lmIHRlc3QgLXIgIi9ldGMvcmVkaGF0LXJlbGVhc2UiOyB0aGVuCisgIGFjX2N2X2ZpbGVfX2V0Y19yZWRoYXRfcmVsZWFzZT15ZXMKK2Vsc2UKKyAgYWNfY3ZfZmlsZV9fZXRjX3JlZGhhdF9yZWxlYXNlPW5vCitmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfZmlsZV9fZXRjX3JlZGhhdF9yZWxlYXNlIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfZmlsZV9fZXRjX3JlZGhhdF9yZWxlYXNlIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfZmlsZV9fZXRjX3JlZGhhdF9yZWxlYXNlIiA9IHh5ZXM7IHRoZW4gOgorICB3aXRoX2Rpc3Rybz0iZmVkb3JhIgorZmkKKworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAvZXRjL21hbmRyaXZhLXJlbGVhc2UiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIC9ldGMvbWFuZHJpdmEtcmVsZWFzZS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9maWxlX19ldGNfbWFuZHJpdmFfcmVsZWFzZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzICYmCisgIGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY2hlY2sgZm9yIGZpbGUgZXhpc3RlbmNlIHdoZW4gY3Jvc3MgY29tcGlsaW5nIiAiJExJTkVOTyIgNQoraWYgdGVzdCAtciAiL2V0Yy9tYW5kcml2YS1yZWxlYXNlIjsgdGhlbgorICBhY19jdl9maWxlX19ldGNfbWFuZHJpdmFfcmVsZWFzZT15ZXMKK2Vsc2UKKyAgYWNfY3ZfZmlsZV9fZXRjX21hbmRyaXZhX3JlbGVhc2U9bm8KK2ZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9maWxlX19ldGNfbWFuZHJpdmFfcmVsZWFzZSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2ZpbGVfX2V0Y19tYW5kcml2YV9yZWxlYXNlIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfZmlsZV9fZXRjX21hbmRyaXZhX3JlbGVhc2UiID0geHllczsgdGhlbiA6CisgIHdpdGhfZGlzdHJvPSJtYW5kcml2YSIKK2ZpCisKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgL2V0Yy9zbGFja3dhcmUtdmVyc2lvbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgL2V0Yy9zbGFja3dhcmUtdmVyc2lvbi4uLiAiID4mNjsgfQoraWYgJHthY19jdl9maWxlX19ldGNfc2xhY2t3YXJlX3ZlcnNpb24rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyAmJgorICBhc19mbl9lcnJvciAkPyAiY2Fubm90IGNoZWNrIGZvciBmaWxlIGV4aXN0ZW5jZSB3aGVuIGNyb3NzIGNvbXBpbGluZyIgIiRMSU5FTk8iIDUKK2lmIHRlc3QgLXIgIi9ldGMvc2xhY2t3YXJlLXZlcnNpb24iOyB0aGVuCisgIGFjX2N2X2ZpbGVfX2V0Y19zbGFja3dhcmVfdmVyc2lvbj15ZXMKK2Vsc2UKKyAgYWNfY3ZfZmlsZV9fZXRjX3NsYWNrd2FyZV92ZXJzaW9uPW5vCitmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfZmlsZV9fZXRjX3NsYWNrd2FyZV92ZXJzaW9uIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfZmlsZV9fZXRjX3NsYWNrd2FyZV92ZXJzaW9uIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfZmlsZV9fZXRjX3NsYWNrd2FyZV92ZXJzaW9uIiA9IHh5ZXM7IHRoZW4gOgorICB3aXRoX2Rpc3Rybz0ic2xhY2t3YXJlIgorZmkKKworICAgIGZpCisgICAgaWYgdGVzdCAieiR3aXRoX2Rpc3RybyIgPSAieiI7IHRoZW4KKyAgICAgICAgd2l0aF9kaXN0cm89YHVuYW1lIC1zYAorICAgIGZpCitmaQord2l0aF9kaXN0cm89YGVjaG8gJHt3aXRoX2Rpc3Ryb30gfCB0ciAnWzp1cHBlcjpdJyAnWzpsb3dlcjpdJyBgCisKK2Nhc2UgJHdpdGhfZGlzdHJvIGluCisgICAgbGZzfGRlYmlhbnxnZW50b298YXJjaGxpbnV4fHN1c2V8ZmVkb3JhfG1hbmRyaXZhfGRhcndpbnxmcmVlYnNkfHNsYWNrd2FyZXxub25lKQorICAgICA7OworICAgIG5ldGJzZCkKKyAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBZb3VyIGRpc3RyaWJ1dGlvbiAoJHt3aXRoX2Rpc3Ryb30pIGlzIHN1cHBvcnRlZCBidXQgbm8gaW5pdCBzY3JpcHQgZXhpc3QgeWV0ISAocGF0Y2hlcyB3ZWxjb21lKSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBZb3VyIGRpc3RyaWJ1dGlvbiAoJHt3aXRoX2Rpc3Ryb30pIGlzIHN1cHBvcnRlZCBidXQgbm8gaW5pdCBzY3JpcHQgZXhpc3QgeWV0ISAocGF0Y2hlcyB3ZWxjb21lKSIgPiYyO30KKyAgICAgOzsKKyAgICBsaW51eCkKKyAgICAgYXNfZm5fZXJyb3IgJD8gIkxpbnV4IGRpc3RyaWJ1dGlvbiBhdXRvZGV0ZWN0aW9uIGZhaWxlZCwgeW91IG11c3Qgc3BlY2lmeSB0aGUgZGlzdHJpYnV0aW9uIHRvIHRhcmdldCB1c2luZyAtLXdpdGgtZGlzdHJvPURJU1RSTywgc2V0IERJU1RSTyB0byBub25lIGlmIHlvdXIgZGlzdHJpYnV0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuIiAiJExJTkVOTyIgNQorICAgICA7OworICAgICopCisgICAgIGFzX2ZuX2Vycm9yICQ/ICJZb3VyIGRpc3RyaWJ1dGlvbiAoJHt3aXRoX2Rpc3Ryb30pIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLCBpbml0IHNjcmlwdHMgYW5kIEQtQnVzIGNvbmZpZ3VyYXRpb24gd2lsbCBub3QgYmUgaW5zdGFsbGVkISAocGF0Y2hlcyB3ZWxjb21lKSwgeW91IGNhbiBzcGVjaWZ5IC0td2l0aC1kaXN0cm89bm9uZSB0byBza2lwIHRoaXMgY2hlY2siICIkTElORU5PIiA1CisgICAgIDs7Citlc2FjCisKKyBpZiB0ZXN0IHgiJHdpdGhfZGlzdHJvIiA9IHhsZnM7IHRoZW4KKyAgVEFSR0VUX0xGU19UUlVFPQorICBUQVJHRVRfTEZTX0ZBTFNFPScjJworZWxzZQorICBUQVJHRVRfTEZTX1RSVUU9JyMnCisgIFRBUkdFVF9MRlNfRkFMU0U9CitmaQorCisgaWYgdGVzdCB4IiR3aXRoX2Rpc3RybyIgPSB4c3VzZTsgdGhlbgorICBUQVJHRVRfU1VTRV9UUlVFPQorICBUQVJHRVRfU1VTRV9GQUxTRT0nIycKK2Vsc2UKKyAgVEFSR0VUX1NVU0VfVFJVRT0nIycKKyAgVEFSR0VUX1NVU0VfRkFMU0U9CitmaQorCisgaWYgdGVzdCB4IiR3aXRoX2Rpc3RybyIgPSB4Z2VudG9vOyB0aGVuCisgIFRBUkdFVF9HRU5UT09fVFJVRT0KKyAgVEFSR0VUX0dFTlRPT19GQUxTRT0nIycKK2Vsc2UKKyAgVEFSR0VUX0dFTlRPT19UUlVFPScjJworICBUQVJHRVRfR0VOVE9PX0ZBTFNFPQorZmkKKworIGlmIHRlc3QgeCIkd2l0aF9kaXN0cm8iID0geGRlYmlhbjsgdGhlbgorICBUQVJHRVRfREVCSUFOX1RSVUU9CisgIFRBUkdFVF9ERUJJQU5fRkFMU0U9JyMnCitlbHNlCisgIFRBUkdFVF9ERUJJQU5fVFJVRT0nIycKKyAgVEFSR0VUX0RFQklBTl9GQUxTRT0KK2ZpCisKKyBpZiB0ZXN0IHgiJHdpdGhfZGlzdHJvIiA9IHhhcmNobGludXg7IHRoZW4KKyAgVEFSR0VUX0FSQ0hMSU5VWF9UUlVFPQorICBUQVJHRVRfQVJDSExJTlVYX0ZBTFNFPScjJworZWxzZQorICBUQVJHRVRfQVJDSExJTlVYX1RSVUU9JyMnCisgIFRBUkdFVF9BUkNITElOVVhfRkFMU0U9CitmaQorCisgaWYgdGVzdCB4IiR3aXRoX2Rpc3RybyIgPSB4ZmVkb3JhOyB0aGVuCisgIFRBUkdFVF9GRURPUkFfVFJVRT0KKyAgVEFSR0VUX0ZFRE9SQV9GQUxTRT0nIycKK2Vsc2UKKyAgVEFSR0VUX0ZFRE9SQV9UUlVFPScjJworICBUQVJHRVRfRkVET1JBX0ZBTFNFPQorZmkKKworIGlmIHRlc3QgeCIkd2l0aF9kaXN0cm8iID0geG1hbmRyaXZhOyB0aGVuCisgIFRBUkdFVF9NQU5EUklWQV9UUlVFPQorICBUQVJHRVRfTUFORFJJVkFfRkFMU0U9JyMnCitlbHNlCisgIFRBUkdFVF9NQU5EUklWQV9UUlVFPScjJworICBUQVJHRVRfTUFORFJJVkFfRkFMU0U9CitmaQorCisgaWYgdGVzdCB4IiR3aXRoX2Rpc3RybyIgPSB4ZGFyd2luOyB0aGVuCisgIFRBUkdFVF9EQVJXSU5fVFJVRT0KKyAgVEFSR0VUX0RBUldJTl9GQUxTRT0nIycKK2Vsc2UKKyAgVEFSR0VUX0RBUldJTl9UUlVFPScjJworICBUQVJHRVRfREFSV0lOX0ZBTFNFPQorZmkKKworIGlmIHRlc3QgeCIkd2l0aF9kaXN0cm8iID0geG5ldGJzZDsgdGhlbgorICBUQVJHRVRfTkVUQlNEX1RSVUU9CisgIFRBUkdFVF9ORVRCU0RfRkFMU0U9JyMnCitlbHNlCisgIFRBUkdFVF9ORVRCU0RfVFJVRT0nIycKKyAgVEFSR0VUX05FVEJTRF9GQUxTRT0KK2ZpCisKKyBpZiB0ZXN0IHgiJHdpdGhfZGlzdHJvIiA9IHhmcmVlYnNkOyB0aGVuCisgIFRBUkdFVF9GUkVFQlNEX1RSVUU9CisgIFRBUkdFVF9GUkVFQlNEX0ZBTFNFPScjJworZWxzZQorICBUQVJHRVRfRlJFRUJTRF9UUlVFPScjJworICBUQVJHRVRfRlJFRUJTRF9GQUxTRT0KK2ZpCisKKyBpZiB0ZXN0IHgiJHdpdGhfZGlzdHJvIiA9IHhzbGFja3dhcmU7IHRoZW4KKyAgVEFSR0VUX1NMQUNLV0FSRV9UUlVFPQorICBUQVJHRVRfU0xBQ0tXQVJFX0ZBTFNFPScjJworZWxzZQorICBUQVJHRVRfU0xBQ0tXQVJFX1RSVUU9JyMnCisgIFRBUkdFVF9TTEFDS1dBUkVfRkFMU0U9CitmaQorCisKK3Rlc3RfZ2NjX2ZsYWcoKSB7CisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworaW50IG1haW4oKSB7fQorX0FDRU9GCisgICAgJENDIC1jIGNvbmZ0ZXN0LmMgJENGTEFHUyAkQCA+IC9kZXYvbnVsbCAyPiAvZGV2L251bGwKKyAgICByZXQ9JD8KKyAgICBybSAtZiBjb25mdGVzdC5vCisgICAgcmV0dXJuICRyZXQKK30KKworIyBJZiB1c2luZyBHQ0Mgc3BlY2lmeSBzb21lIGFkZGl0aW9uYWwgcGFyYW1ldGVycworaWYgdGVzdCAieCRHQ0MiID0gInh5ZXMiIDsgdGhlbgorCisgICAgREVTSVJFRF9GTEFHUz0iLVdhbGwgLVcgLVdleHRyYSAtcGVkYW50aWMgLXBpcGUgLVdmb3JtYXQgLVdvbGQtc3R5bGUtZGVmaW5pdGlvbiAtV2RlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudCAtV2Zsb2F0LWVxdWFsIC1XbWlzc2luZy1kZWNsYXJhdGlvbnMgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVdzdHJpY3QtcHJvdG90eXBlcyAtV3JlZHVuZGFudC1kZWNscyAtV21pc3Npbmctbm9yZXR1cm4gLVdzaGFkb3cgLVdlbmRpZi1sYWJlbHMgLVdwb2ludGVyLWFyaXRoIC1XYmFkLWZ1bmN0aW9uLWNhc3QgLVdjYXN0LXF1YWwgLVdjYXN0LWFsaWduIC1Xd3JpdGUtc3RyaW5ncyAtZmRpYWdub3N0aWNzLXNob3ctb3B0aW9uIC1Xbm8tY2FzdC1xdWFsIC1mbm8tc3RyaWN0LWFsaWFzaW5nIgorCisgICAgaWYgdGVzdCAieCRIQVZFX05FVExJTksiID0gInh5ZXMiIDsgdGhlbgorICAgICAgICAjIFRlc3Qgd2hldGhlciBydG5ldGxpbmsuaCBjYW4gYmUgaW5jbHVkZWQgd2hlbiBjb21waWxlZCB3aXRoIC1zdGQ9Yzk5CisgICAgICAgICMgc29tZSBkaXN0cmlidXRpb25zIChlLmcuIGFyY2hsaW51eCkgaGF2ZSBicm9rZW4gaGVhZGVycyB0aGF0IGRvbnQKKyAgICAgICAgIyBkZWZpbmUgX191NjQgd2l0aCAtc3RkPWM5OQorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGNoZWNraW5nIHdoZXRoZXIgcnRuZXRsaW5rLmggY2FuIGJlIGluY2x1ZGVkIHdpdGggLXN0ZD1jOTkiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgY2hlY2tpbmcgd2hldGhlciBydG5ldGxpbmsuaCBjYW4gYmUgaW5jbHVkZWQgd2l0aCAtc3RkPWM5OS4uLiAiID4mNjsgfQorICAgICAgICBPTERDRkxBR1M9IiRDRkxBR1MiCisgICAgICAgIENGTEFHUz0iLXN0ZD1jOTkiCisgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgdXNlX3N0ZGM5OT15ZXMKK2Vsc2UKKyAgdXNlX3N0ZGM5OT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCisgICAgICAgIGlmIHRlc3QgeCIkdXNlX3N0ZGM5OSIgPSB4eWVzOyB0aGVuCisgICAgICAgICAgICBERVNJUkVEX0ZMQUdTPSItc3RkPWM5OSAkREVTSVJFRF9GTEFHUyIKKyAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgICBmaQorCisgICAgICAgIENGTEFHUz0iJE9MRENGTEFHUyIKKyAgICBlbHNlCisgICAgICAgIERFU0lSRURfRkxBR1M9Ii1zdGQ9Yzk5ICRERVNJUkVEX0ZMQUdTIgorICAgIGZpCisKKyAgICBmb3IgZmxhZyBpbiAkREVTSVJFRF9GTEFHUyA7IGRvCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAkZmxhZyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzICRmbGFnLi4uICIgPiY2OyB9CisgICAgICAgIGlmIHRlc3RfZ2NjX2ZsYWcgJGZsYWcgOyB0aGVuCisgICAgICAgICAgIENGTEFHUz0iJENGTEFHUyAkZmxhZyIKKyAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgICAgZmkKKyAgICBkb25lCitmaQorCisjIENoZWNrcyBmb3IgaGVhZGVyIGZpbGVzLgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcy4uLiAiID4mNjsgfQoraWYgJHthY19jdl9oZWFkZXJfc3RkYys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxmbG9hdC5oPgorCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2hlYWRlcl9zdGRjPXllcworZWxzZQorICBhY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICAjIFN1bk9TIDQueCBzdHJpbmcuaCBkb2VzIG5vdCBkZWNsYXJlIG1lbSosIGNvbnRyYXJ5IHRvIEFOU0kuCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAibWVtY2hyIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCitlbHNlCisgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKK2ZpCisKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisgICMgSVNDIDIuMC4yIHN0ZGxpYi5oIGRvZXMgbm90IGRlY2xhcmUgZnJlZSwgY29udHJhcnkgdG8gQU5TSS4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJmcmVlIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCitlbHNlCisgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKK2ZpCisKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisgICMgL2Jpbi9jYyBpbiBJcml4LTQuMC41IGdldHMgbm9uLUFOU0kgY3R5cGUgbWFjcm9zIHVubGVzcyB1c2luZyAtYW5zaS4KKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICA6CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2lmICgoJyAnICYgMHgwRkYpID09IDB4MDIwKQorIyBkZWZpbmUgSVNMT1dFUihjKSAoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ3onKQorIyBkZWZpbmUgVE9VUFBFUihjKSAoSVNMT1dFUihjKSA/ICdBJyArICgoYykgLSAnYScpIDogKGMpKQorI2Vsc2UKKyMgZGVmaW5lIElTTE9XRVIoYykgXAorCQkgICAoKCdhJyA8PSAoYykgJiYgKGMpIDw9ICdpJykgXAorCQkgICAgIHx8ICgnaicgPD0gKGMpICYmIChjKSA8PSAncicpIFwKKwkJICAgICB8fCAoJ3MnIDw9IChjKSAmJiAoYykgPD0gJ3onKSkKKyMgZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykgPyAoKGMpIHwgMHg0MCkgOiAoYykpCisjZW5kaWYKKworI2RlZmluZSBYT1IoZSwgZikgKCgoZSkgJiYgIShmKSkgfHwgKCEoZSkgJiYgKGYpKSkKK2ludAorbWFpbiAoKQoreworICBpbnQgaTsKKyAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQorICAgIGlmIChYT1IgKGlzbG93ZXIgKGkpLCBJU0xPV0VSIChpKSkKKwl8fCB0b3VwcGVyIChpKSAhPSBUT1VQUEVSIChpKSkKKyAgICAgIHJldHVybiAyOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCitmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3N0ZGMiID4mNQorJGFzX2VjaG8gIiRhY19jdl9oZWFkZXJfc3RkYyIgPiY2OyB9CitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBTVERDX0hFQURFUlMgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKK2ZvciBhY19oZWFkZXIgaW4gYXJwYS9pbmV0LmggZmNudGwuaCBpbnR0eXBlcy5oIGxpbWl0cy5oIG5ldGluZXQvaW4uaCBzdGRsaWIuaCBzdHJpbmcuaCBzeXMvaW9jdGwuaCBzeXMvc29ja2V0Lmggc3lzL3RpbWUuaCB1bmlzdGQuaCBuZXRkYi5oIHN5c2xvZy5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN0ZGJvb2wuaCB0aGF0IGNvbmZvcm1zIHRvIEM5OSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3RkYm9vbC5oIHRoYXQgY29uZm9ybXMgdG8gQzk5Li4uICIgPiY2OyB9CitpZiAke2FjX2N2X2hlYWRlcl9zdGRib29sX2grOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaWZuZGVmIGJvb2wKKyAiZXJyb3I6IGJvb2wgaXMgbm90IGRlZmluZWQiCisjZW5kaWYKKyNpZm5kZWYgZmFsc2UKKyAiZXJyb3I6IGZhbHNlIGlzIG5vdCBkZWZpbmVkIgorI2VuZGlmCisjaWYgZmFsc2UKKyAiZXJyb3I6IGZhbHNlIGlzIG5vdCAwIgorI2VuZGlmCisjaWZuZGVmIHRydWUKKyAiZXJyb3I6IHRydWUgaXMgbm90IGRlZmluZWQiCisjZW5kaWYKKyNpZiB0cnVlICE9IDEKKyAiZXJyb3I6IHRydWUgaXMgbm90IDEiCisjZW5kaWYKKyNpZm5kZWYgX19ib29sX3RydWVfZmFsc2VfYXJlX2RlZmluZWQKKyAiZXJyb3I6IF9fYm9vbF90cnVlX2ZhbHNlX2FyZV9kZWZpbmVkIGlzIG5vdCBkZWZpbmVkIgorI2VuZGlmCisKKwlzdHJ1Y3QgcyB7IF9Cb29sIHM6IDE7IF9Cb29sIHQ7IH0gczsKKworCWNoYXIgYVt0cnVlID09IDEgPyAxIDogLTFdOworCWNoYXIgYltmYWxzZSA9PSAwID8gMSA6IC0xXTsKKwljaGFyIGNbX19ib29sX3RydWVfZmFsc2VfYXJlX2RlZmluZWQgPT0gMSA/IDEgOiAtMV07CisJY2hhciBkWyhib29sKSAwLjUgPT0gdHJ1ZSA/IDEgOiAtMV07CisJLyogU2VlIGJvZHkgb2YgbWFpbiBwcm9ncmFtIGZvciAnZScuICAqLworCWNoYXIgZlsoX0Jvb2wpIDAuMCA9PSBmYWxzZSA/IDEgOiAtMV07CisJY2hhciBnW3RydWVdOworCWNoYXIgaFtzaXplb2YgKF9Cb29sKV07CisJY2hhciBpW3NpemVvZiBzLnRdOworCWVudW0geyBqID0gZmFsc2UsIGsgPSB0cnVlLCBsID0gZmFsc2UgKiB0cnVlLCBtID0gdHJ1ZSAqIDI1NiB9OworCS8qIFRoZSBmb2xsb3dpbmcgZmFpbHMgZm9yCisJICAgSFAgYUMrKy9BTlNJIEMgQjM5MTBCIEEuMDUuNTUgW0RlYyAwNCAyMDAzXS4gKi8KKwlfQm9vbCBuW21dOworCWNoYXIgb1tzaXplb2YgbiA9PSBtICogc2l6ZW9mIG5bMF0gPyAxIDogLTFdOworCWNoYXIgcFstMSAtIChfQm9vbCkgMCA8IDAgJiYgLTEgLSAoYm9vbCkgMCA8IDAgPyAxIDogLTFdOworCS8qIENhdGNoIGEgYnVnIGluIGFuIEhQLVVYIEMgY29tcGlsZXIuICBTZWUKKwkgICBodHRwOi8vZ2NjLmdudS5vcmcvbWwvZ2NjLXBhdGNoZXMvMjAwMy0xMi9tc2cwMjMwMy5odG1sCisJICAgaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1jb3JldXRpbHMvMjAwNS0xMS9tc2cwMDE2MS5odG1sCisJICovCisJX0Jvb2wgcSA9IHRydWU7CisJX0Jvb2wgKnBxID0gJnE7CisKK2ludAorbWFpbiAoKQoreworCisJYm9vbCBlID0gJnM7CisJKnBxIHw9IHE7CisJKnBxIHw9ICEgcTsKKwkvKiBSZWZlciB0byBldmVyeSBkZWNsYXJlZCB2YWx1ZSwgdG8gYXZvaWQgY29tcGlsZXIgb3B0aW1pemF0aW9ucy4gICovCisJcmV0dXJuICghYSArICFiICsgIWMgKyAhZCArICFlICsgIWYgKyAhZyArICFoICsgIWkgKyAhIWogKyAhayArICEhbAorCQkrICFtICsgIW4gKyAhbyArICFwICsgIXEgKyAhcHEpOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaD15ZXMKK2Vsc2UKKyAgYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2hlYWRlcl9zdGRib29sX2giID4mNjsgfQorYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAiX0Jvb2wiICJhY19jdl90eXBlX19Cb29sIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfX0Jvb2wiID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9fQk9PTCAxCitfQUNFT0YKKworCitmaQorCitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYm9vbF9oID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1REQk9PTF9IIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisKKyMgQ2hlY2tzIGZvciB0eXBlZGVmcywgc3RydWN0dXJlcywgYW5kIGNvbXBpbGVyIGNoYXJhY3RlcmlzdGljcy4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGFuIEFOU0kgQy1jb25mb3JtaW5nIGNvbnN0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhbiBBTlNJIEMtY29uZm9ybWluZyBjb25zdC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9jX2NvbnN0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKy8qIEZJWE1FOiBJbmNsdWRlIHRoZSBjb21tZW50cyBzdWdnZXN0ZWQgYnkgUGF1bC4gKi8KKyNpZm5kZWYgX19jcGx1c3BsdXMKKyAgLyogVWx0cml4IG1pcHMgY2MgcmVqZWN0cyB0aGlzLiAgKi8KKyAgdHlwZWRlZiBpbnQgY2hhcnNldFsyXTsKKyAgY29uc3QgY2hhcnNldCBjczsKKyAgLyogU3VuT1MgNC4xLjEgY2MgcmVqZWN0cyB0aGlzLiAgKi8KKyAgY2hhciBjb25zdCAqY29uc3QgKnBjcGNjOworICBjaGFyICoqcHBjOworICAvKiBORUMgU1ZSNC4wLjIgbWlwcyBjYyByZWplY3RzIHRoaXMuICAqLworICBzdHJ1Y3QgcG9pbnQge2ludCB4LCB5O307CisgIHN0YXRpYyBzdHJ1Y3QgcG9pbnQgY29uc3QgemVybyA9IHswLDB9OworICAvKiBBSVggWEwgQyAxLjAyLjAuMCByZWplY3RzIHRoaXMuCisgICAgIEl0IGRvZXMgbm90IGxldCB5b3Ugc3VidHJhY3Qgb25lIGNvbnN0IFgqIHBvaW50ZXIgZnJvbSBhbm90aGVyIGluCisgICAgIGFuIGFybSBvZiBhbiBpZi1leHByZXNzaW9uIHdob3NlIGlmLXBhcnQgaXMgbm90IGEgY29uc3RhbnQKKyAgICAgZXhwcmVzc2lvbiAqLworICBjb25zdCBjaGFyICpnID0gInN0cmluZyI7CisgIHBjcGNjID0gJmcgKyAoZyA/IGctZyA6IDApOworICAvKiBIUFVYIDcuMCBjYyByZWplY3RzIHRoZXNlLiAqLworICArK3BjcGNjOworICBwcGMgPSAoY2hhcioqKSBwY3BjYzsKKyAgcGNwY2MgPSAoY2hhciBjb25zdCAqY29uc3QgKikgcHBjOworICB7IC8qIFNDTyAzLjJ2NCBjYyByZWplY3RzIHRoaXMuICAqLworICAgIGNoYXIgKnQ7CisgICAgY2hhciBjb25zdCAqcyA9IDAgPyAoY2hhciAqKSAwIDogKGNoYXIgY29uc3QgKikgMDsKKworICAgICp0KysgPSAwOworICAgIGlmIChzKSByZXR1cm4gMDsKKyAgfQorICB7IC8qIFNvbWVvbmUgdGhpbmtzIHRoZSBTdW4gc3VwcG9zZWRseS1BTlNJIGNvbXBpbGVyIHdpbGwgcmVqZWN0IHRoaXMuICAqLworICAgIGludCB4W10gPSB7MjUsIDE3fTsKKyAgICBjb25zdCBpbnQgKmZvbyA9ICZ4WzBdOworICAgICsrZm9vOworICB9CisgIHsgLyogU3VuIFNDMS4wIEFOU0kgY29tcGlsZXIgcmVqZWN0cyB0aGlzIC0tIGJ1dCBub3QgdGhlIGFib3ZlLiAqLworICAgIHR5cGVkZWYgY29uc3QgaW50ICppcHRyOworICAgIGlwdHIgcCA9IDA7CisgICAgKytwOworICB9CisgIHsgLyogQUlYIFhMIEMgMS4wMi4wLjAgcmVqZWN0cyB0aGlzIHNheWluZworICAgICAgICJrLmMiLCBsaW5lIDIuMjc6IDE1MDYtMDI1IChTKSBPcGVyYW5kIG11c3QgYmUgYSBtb2RpZmlhYmxlIGx2YWx1ZS4gKi8KKyAgICBzdHJ1Y3QgcyB7IGludCBqOyBjb25zdCBpbnQgKmFwWzNdOyB9OworICAgIHN0cnVjdCBzICpiOyBiLT5qID0gNTsKKyAgfQorICB7IC8qIFVMVFJJWC0zMiBWMy4xIChSZXYgOSkgdmNjIHJlamVjdHMgdGhpcyAqLworICAgIGNvbnN0IGludCBmb28gPSAxMDsKKyAgICBpZiAoIWZvbykgcmV0dXJuIDA7CisgIH0KKyAgcmV0dXJuICFjc1swXSAmJiAhemVyby54OworI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9jX2NvbnN0PXllcworZWxzZQorICBhY19jdl9jX2NvbnN0PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9jX2NvbnN0IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfY19jb25zdCIgPiY2OyB9CitpZiB0ZXN0ICRhY19jdl9jX2NvbnN0ID0gbm87IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgY29uc3QgLyoqLyIgPj5jb25mZGVmcy5oCisKK2ZpCisKK2FjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgInNpemVfdCIgImFjX2N2X3R5cGVfc2l6ZV90IiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfc2l6ZV90IiA9IHh5ZXM7IHRoZW4gOgorCitlbHNlCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgc2l6ZV90IHVuc2lnbmVkIGludAorX0FDRU9GCisKK2ZpCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aW1lLmggYW5kIHN5cy90aW1lLmggbWF5IGJvdGggYmUgaW5jbHVkZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aW1lLmggYW5kIHN5cy90aW1lLmggbWF5IGJvdGggYmUgaW5jbHVkZWQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfaGVhZGVyX3RpbWUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisKK2ludAorbWFpbiAoKQoreworaWYgKChzdHJ1Y3QgdG0gKikgMCkKK3JldHVybiAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2hlYWRlcl90aW1lPXllcworZWxzZQorICBhY19jdl9oZWFkZXJfdGltZT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3RpbWUiID4mNQorJGFzX2VjaG8gIiRhY19jdl9oZWFkZXJfdGltZSIgPiY2OyB9CitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfdGltZSA9IHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBUSU1FX1dJVEhfU1lTX1RJTUUgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN5cy93YWl0LmggdGhhdCBpcyBQT1NJWC4xIGNvbXBhdGlibGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN5cy93YWl0LmggdGhhdCBpcyBQT1NJWC4xIGNvbXBhdGlibGUuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfaGVhZGVyX3N5c193YWl0X2grOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKyNpZm5kZWYgV0VYSVRTVEFUVVMKKyMgZGVmaW5lIFdFWElUU1RBVFVTKHN0YXRfdmFsKSAoKHVuc2lnbmVkIGludCkgKHN0YXRfdmFsKSA+PiA4KQorI2VuZGlmCisjaWZuZGVmIFdJRkVYSVRFRAorIyBkZWZpbmUgV0lGRVhJVEVEKHN0YXRfdmFsKSAoKChzdGF0X3ZhbCkgJiAyNTUpID09IDApCisjZW5kaWYKKworaW50CittYWluICgpCit7CisgIGludCBzOworICB3YWl0ICgmcyk7CisgIHMgPSBXSUZFWElURUQgKHMpID8gV0VYSVRTVEFUVVMgKHMpIDogMTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9oZWFkZXJfc3lzX3dhaXRfaD15ZXMKK2Vsc2UKKyAgYWNfY3ZfaGVhZGVyX3N5c193YWl0X2g9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9zeXNfd2FpdF9oIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfaGVhZGVyX3N5c193YWl0X2giID4mNjsgfQoraWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N5c193YWl0X2ggPSB5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TWVNfV0FJVF9IIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisKKyAjIFNvbGFyaXMgc3R1ZmYKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgaW5ldF9udG9wIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgaW5ldF9udG9wLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3NlYXJjaF9pbmV0X250b3ArOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlM9JExJQlMKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBpbmV0X250b3AgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBpbmV0X250b3AgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2ZvciBhY19saWIgaW4gJycgbnNsOyBkbworICBpZiB0ZXN0IC16ICIkYWNfbGliIjsgdGhlbgorICAgIGFjX3Jlcz0ibm9uZSByZXF1aXJlZCIKKyAgZWxzZQorICAgIGFjX3Jlcz0tbCRhY19saWIKKyAgICBMSUJTPSItbCRhY19saWIgICRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMiCisgIGZpCisgIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3Zfc2VhcmNoX2luZXRfbnRvcD0kYWNfcmVzCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0CisgIGlmICR7YWNfY3Zfc2VhcmNoX2luZXRfbnRvcCs6fSBmYWxzZTsgdGhlbiA6CisgIGJyZWFrCitmaQorZG9uZQoraWYgJHthY19jdl9zZWFyY2hfaW5ldF9udG9wKzp9IGZhbHNlOyB0aGVuIDoKKworZWxzZQorICBhY19jdl9zZWFyY2hfaW5ldF9udG9wPW5vCitmaQorcm0gY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zZWFyY2hfaW5ldF9udG9wIiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfc2VhcmNoX2luZXRfbnRvcCIgPiY2OyB9CithY19yZXM9JGFjX2N2X3NlYXJjaF9pbmV0X250b3AKK2lmIHRlc3QgIiRhY19yZXMiICE9IG5vOyB0aGVuIDoKKyAgdGVzdCAiJGFjX3JlcyIgPSAibm9uZSByZXF1aXJlZCIgfHwgTElCUz0iJGFjX3JlcyAkTElCUyIKKworZmkKKworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyByZWN2IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgcmVjdi4uLiAiID4mNjsgfQoraWYgJHthY19jdl9zZWFyY2hfcmVjdis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0kTElCUworY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHJlY3YgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiByZWN2ICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitmb3IgYWNfbGliIGluICcnIHNvY2tldDsgZG8KKyAgaWYgdGVzdCAteiAiJGFjX2xpYiI7IHRoZW4KKyAgICBhY19yZXM9Im5vbmUgcmVxdWlyZWQiCisgIGVsc2UKKyAgICBhY19yZXM9LWwkYWNfbGliCisgICAgTElCUz0iLWwkYWNfbGliICAkYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTIgorICBmaQorICBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3NlYXJjaF9yZWN2PSRhY19yZXMKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQKKyAgaWYgJHthY19jdl9zZWFyY2hfcmVjdis6fSBmYWxzZTsgdGhlbiA6CisgIGJyZWFrCitmaQorZG9uZQoraWYgJHthY19jdl9zZWFyY2hfcmVjdis6fSBmYWxzZTsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY3Zfc2VhcmNoX3JlY3Y9bm8KK2ZpCitybSBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3NlYXJjaF9yZWN2IiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfc2VhcmNoX3JlY3YiID4mNjsgfQorYWNfcmVzPSRhY19jdl9zZWFyY2hfcmVjdgoraWYgdGVzdCAiJGFjX3JlcyIgIT0gbm87IHRoZW4gOgorICB0ZXN0ICIkYWNfcmVzIiA9ICJub25lIHJlcXVpcmVkIiB8fCBMSUJTPSIkYWNfcmVzICRMSUJTIgorCitmaQorCisgYWNfZm5fY19jaGVja19kZWNsICIkTElORU5PIiAiQ01TR19TUEFDRSIgImFjX2N2X2hhdmVfZGVjbF9DTVNHX1NQQUNFIiAiI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyIKK2lmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX0NNU0dfU1BBQ0UiID0geHllczsgdGhlbiA6CisKK2Vsc2UKKyAgQ0ZMQUdTPSIkQ0ZMQUdTIC1EX1hPUEVOX1NPVVJDRT01MDAgLURfX0VYVEVOU0lPTlNfXyIKK2ZpCisKKworIyBDaGVja3MgZm9yIGxpYnJhcnkgZnVuY3Rpb25zLgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igd29ya2luZyBtZW1jbXAiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHdvcmtpbmcgbWVtY21wLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmcrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIGFjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmc9bm8KK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworCisgIC8qIFNvbWUgdmVyc2lvbnMgb2YgbWVtY21wIGFyZSBub3QgOC1iaXQgY2xlYW4uICAqLworICBjaGFyIGMwID0gJ1wxMDAnLCBjMSA9ICdcMjAwJywgYzIgPSAnXDIwMSc7CisgIGlmIChtZW1jbXAoJmMwLCAmYzIsIDEpID49IDAgfHwgbWVtY21wKCZjMSwgJmMyLCAxKSA+PSAwKQorICAgIHJldHVybiAxOworCisgIC8qIFRoZSBOZXh0IHg4NiBPcGVuU3RlcCBidWcgc2hvd3MgdXAgb25seSB3aGVuIGNvbXBhcmluZyAxNiBieXRlcworICAgICBvciBtb3JlIGFuZCB3aXRoIGF0IGxlYXN0IG9uZSBidWZmZXIgbm90IHN0YXJ0aW5nIG9uIGEgNC1ieXRlIGJvdW5kYXJ5LgorICAgICBXaWxsaWFtIExld2lzIHByb3ZpZGVkIHRoaXMgdGVzdCBwcm9ncmFtLiAgICovCisgIHsKKyAgICBjaGFyIGZvb1syMV07CisgICAgY2hhciBiYXJbMjFdOworICAgIGludCBpOworICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisgICAgICB7CisJY2hhciAqYSA9IGZvbyArIGk7CisJY2hhciAqYiA9IGJhciArIGk7CisJc3RyY3B5IChhLCAiLS0tLS0tLS0wMTExMTExMSIpOworCXN0cmNweSAoYiwgIi0tLS0tLS0tMTAwMDAwMDAiKTsKKwlpZiAobWVtY21wIChhLCBiLCAxNikgPj0gMCkKKwkgIHJldHVybiAxOworICAgICAgfQorICAgIHJldHVybiAwOworICB9CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmc9eWVzCitlbHNlCisgIGFjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmc9bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9mdW5jX21lbWNtcF93b3JraW5nIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfZnVuY19tZW1jbXBfd29ya2luZyIgPiY2OyB9Cit0ZXN0ICRhY19jdl9mdW5jX21lbWNtcF93b3JraW5nID0gbm8gJiYgY2FzZSAiICRMSUJPQkpTICIgaW4KKyAgKiIgbWVtY21wLiRhY19vYmpleHQgIiogKSA7OworICAqKSBMSUJPQkpTPSIkTElCT0JKUyBtZW1jbXAuJGFjX29iamV4dCIKKyA7OworZXNhYworCisKK2ZvciBhY19oZWFkZXIgaW4gc3lzL3NlbGVjdC5oIHN5cy9zb2NrZXQuaAorZG8gOgorICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfSGVhZGVyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHR5cGVzIG9mIGFyZ3VtZW50cyBmb3Igc2VsZWN0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHR5cGVzIG9mIGFyZ3VtZW50cyBmb3Igc2VsZWN0Li4uICIgPiY2OyB9CitpZiAke2FjX2N2X2Z1bmNfc2VsZWN0X2FyZ3MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBmb3IgYWNfYXJnMjM0IGluICdmZF9zZXQgKicgJ2ludCAqJyAndm9pZCAqJzsgZG8KKyBmb3IgYWNfYXJnMSBpbiAnaW50JyAnc2l6ZV90JyAndW5zaWduZWQgbG9uZyBpbnQnICd1bnNpZ25lZCBpbnQnOyBkbworICBmb3IgYWNfYXJnNSBpbiAnc3RydWN0IHRpbWV2YWwgKicgJ2NvbnN0IHN0cnVjdCB0aW1ldmFsIConOyBkbworICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKKyNpZmRlZiBIQVZFX1NZU19TRUxFQ1RfSAorIyBpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorIyBpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKworaW50CittYWluICgpCit7CitleHRlcm4gaW50IHNlbGVjdCAoJGFjX2FyZzEsCisJCQkJCSAgICAkYWNfYXJnMjM0LCAkYWNfYXJnMjM0LCAkYWNfYXJnMjM0LAorCQkJCQkgICAgJGFjX2FyZzUpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2Z1bmNfc2VsZWN0X2FyZ3M9IiRhY19hcmcxLCRhY19hcmcyMzQsJGFjX2FyZzUiOyBicmVhayAzCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGRvbmUKKyBkb25lCitkb25lCisjIFByb3ZpZGUgYSBzYWZlIGRlZmF1bHQgdmFsdWUuCis6ICIke2FjX2N2X2Z1bmNfc2VsZWN0X2FyZ3M9aW50LGludCAqLHN0cnVjdCB0aW1ldmFsICp9IgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9mdW5jX3NlbGVjdF9hcmdzIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfZnVuY19zZWxlY3RfYXJncyIgPiY2OyB9CithY19zYXZlX0lGUz0kSUZTOyBJRlM9JywnCitzZXQgZHVtbXkgYGVjaG8gIiRhY19jdl9mdW5jX3NlbGVjdF9hcmdzIiB8IHNlZCAncy9cKi9cKi9nJ2AKK0lGUz0kYWNfc2F2ZV9JRlMKK3NoaWZ0CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgU0VMRUNUX1RZUEVfQVJHMSAkMQorX0FDRU9GCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBTRUxFQ1RfVFlQRV9BUkcyMzQgKCQyKQorX0FDRU9GCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBTRUxFQ1RfVFlQRV9BUkc1ICgkMykKK19BQ0VPRgorCitybSAtZiBjb25mdGVzdCoKKworIyBhdmFoaV9tYWxsb2MgYWN0dWFsbHkgcmV0dXJucyBOVUxMIGZvciBhdmFoaV9tYWxsb2MoMCksIHNvIGl0IGRvZXMgbm90IG1hdHRlcgorIyB3aGV0aGVyIGxpYmMncyBtYWxsb2MgZG9lcyB0b28uIChTYW1lIGZvciByZWFsbG9jLikKKyNBQ19GVU5DX01BTExPQworI0FDX0ZVTkNfUkVBTExPQworZm9yIGFjX2Z1bmMgaW4gZ2V0aG9zdG5hbWUgbWVtY2hyIG1lbW1vdmUgbWVtc2V0IG1rZGlyIHNlbGVjdCBzb2NrZXQgc3RyY2hyIHN0cmNzcG4gc3RyZHVwIHN0cmVycm9yIHN0cnJjaHIgc3Ryc3BuIHN0cnN0ciB1bmFtZSBzZXRyZXN1aWQgc2V0cmV1aWQgc2V0cmVzZ2lkIHNldHJlZ2lkIHN0cmNhc2VjbXAgZ2V0dGltZW9mZGF5IHB1dGVudiBzdHJuY2FzZWNtcCBzdHJsY3B5IGdldGhvc3RieW5hbWUgc2V0ZXVpZCBzZXRlZ2lkIHNldHByb2N0aXRsZSBnZXRwcm9nbmFtZQorZG8gOgorICBhc19hY192YXI9YCRhc19lY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgIiRhY19mdW5jIiAiJGFzX2FjX3ZhciIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfdmFyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCitkb25lCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgdWlkX3QgaW4gc3lzL3R5cGVzLmgiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHVpZF90IGluIHN5cy90eXBlcy5oLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3R5cGVfdWlkX3QrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgInVpZF90IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICBhY19jdl90eXBlX3VpZF90PXllcworZWxzZQorICBhY19jdl90eXBlX3VpZF90PW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3R5cGVfdWlkX3QiID4mNQorJGFzX2VjaG8gIiRhY19jdl90eXBlX3VpZF90IiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X3R5cGVfdWlkX3QgPSBubzsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSB1aWRfdCBpbnQiID4+Y29uZmRlZnMuaAorCisKKyRhc19lY2hvICIjZGVmaW5lIGdpZF90IGludCIgPj5jb25mZGVmcy5oCisKK2ZpCisKK2ZvciBhY19oZWFkZXIgaW4gdW5pc3RkLmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInVuaXN0ZC5oIiAiYWNfY3ZfaGVhZGVyX3VuaXN0ZF9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl91bmlzdGRfaCIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1VOSVNURF9IIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHdvcmtpbmcgY2hvd24iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHdvcmtpbmcgY2hvd24uLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfZnVuY19jaG93bl93b3Jrcys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgYWNfY3ZfZnVuY19jaG93bl93b3Jrcz1ubworZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAorI2luY2x1ZGUgPGZjbnRsLmg+CisKK2ludAorbWFpbiAoKQoreworICBjaGFyICpmID0gImNvbmZ0ZXN0LmNob3duIjsKKyAgc3RydWN0IHN0YXQgYmVmb3JlLCBhZnRlcjsKKworICBpZiAoY3JlYXQgKGYsIDA2MDApIDwgMCkKKyAgICByZXR1cm4gMTsKKyAgaWYgKHN0YXQgKGYsICZiZWZvcmUpIDwgMCkKKyAgICByZXR1cm4gMTsKKyAgaWYgKGNob3duIChmLCAodWlkX3QpIC0xLCAoZ2lkX3QpIC0xKSA9PSAtMSkKKyAgICByZXR1cm4gMTsKKyAgaWYgKHN0YXQgKGYsICZhZnRlcikgPCAwKQorICAgIHJldHVybiAxOworICByZXR1cm4gISAoYmVmb3JlLnN0X3VpZCA9PSBhZnRlci5zdF91aWQgJiYgYmVmb3JlLnN0X2dpZCA9PSBhZnRlci5zdF9naWQpOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9mdW5jX2Nob3duX3dvcmtzPXllcworZWxzZQorICBhY19jdl9mdW5jX2Nob3duX3dvcmtzPW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworcm0gLWYgY29uZnRlc3QuY2hvd24KKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfZnVuY19jaG93bl93b3JrcyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2Z1bmNfY2hvd25fd29ya3MiID4mNjsgfQoraWYgdGVzdCAkYWNfY3ZfZnVuY19jaG93bl93b3JrcyA9IHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0NIT1dOIDEiID4+Y29uZmRlZnMuaAorCitmaQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgbHN0YXQgY29ycmVjdGx5IGhhbmRsZXMgdHJhaWxpbmcgc2xhc2giID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBsc3RhdCBjb3JyZWN0bHkgaGFuZGxlcyB0cmFpbGluZyBzbGFzaC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbmsrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBybSAtZiBjb25mdGVzdC5zeW0gY29uZnRlc3QuZmlsZQorZWNobyA+Y29uZnRlc3QuZmlsZQoraWYgdGVzdCAiJGFzX2xuX3MiID0gImxuIC1zIiAmJiBsbiAtcyBjb25mdGVzdC5maWxlIGNvbmZ0ZXN0LnN5bTsgdGhlbgorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIGFjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluaz1ubworZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitzdHJ1Y3Qgc3RhdCBzYnVmOworICAgICAvKiBMaW51eCB3aWxsIGRlcmVmZXJlbmNlIHRoZSBzeW1saW5rIGFuZCBmYWlsLCBhcyByZXF1aXJlZCBieSBQT1NJWC4KKwlUaGF0IGlzIGJldHRlciBpbiB0aGUgc2Vuc2UgdGhhdCBpdCBtZWFucyB3ZSB3aWxsIG5vdAorCWhhdmUgdG8gY29tcGlsZSBhbmQgdXNlIHRoZSBsc3RhdCB3cmFwcGVyLiAgKi8KKyAgICAgcmV0dXJuIGxzdGF0ICgiY29uZnRlc3Quc3ltLyIsICZzYnVmKSA9PSAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPXllcworZWxzZQorICBhY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbms9bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCitlbHNlCisgICMgSWYgdGhlIGBsbiAtcycgY29tbWFuZCBmYWlsZWQsIHRoZW4gd2UgcHJvYmFibHkgZG9uJ3QgZXZlbgorICAjIGhhdmUgYW4gbHN0YXQgZnVuY3Rpb24uCisgIGFjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluaz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LnN5bSBjb25mdGVzdC5maWxlCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluayIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluayIgPiY2OyB9CisKK3Rlc3QgJGFjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluayA9IHllcyAmJgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIExTVEFUX0ZPTExPV1NfU0xBU0hFRF9TWU1MSU5LIDEKK19BQ0VPRgorCisKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rIiA9IHhubzsgdGhlbgorICBjYXNlICIgJExJQk9CSlMgIiBpbgorICAqIiBsc3RhdC4kYWNfb2JqZXh0ICIqICkgOzsKKyAgKikgTElCT0JKUz0iJExJQk9CSlMgbHN0YXQuJGFjX29iamV4dCIKKyA7OworZXNhYworCitmaQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgc3RhdCBhY2NlcHRzIGFuIGVtcHR5IHN0cmluZyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHN0YXQgYWNjZXB0cyBhbiBlbXB0eSBzdHJpbmcuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfZnVuY19zdGF0X2VtcHR5X3N0cmluZ19idWcrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIGFjX2N2X2Z1bmNfc3RhdF9lbXB0eV9zdHJpbmdfYnVnPXllcworZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitzdHJ1Y3Qgc3RhdCBzYnVmOworICByZXR1cm4gc3RhdCAoIiIsICZzYnVmKSA9PSAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfZnVuY19zdGF0X2VtcHR5X3N0cmluZ19idWc9bm8KK2Vsc2UKKyAgYWNfY3ZfZnVuY19zdGF0X2VtcHR5X3N0cmluZ19idWc9eWVzCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfZnVuY19zdGF0X2VtcHR5X3N0cmluZ19idWciID4mNQorJGFzX2VjaG8gIiRhY19jdl9mdW5jX3N0YXRfZW1wdHlfc3RyaW5nX2J1ZyIgPiY2OyB9CitpZiB0ZXN0ICRhY19jdl9mdW5jX3N0YXRfZW1wdHlfc3RyaW5nX2J1ZyA9IHllczsgdGhlbgorICBjYXNlICIgJExJQk9CSlMgIiBpbgorICAqIiBzdGF0LiRhY19vYmpleHQgIiogKSA7OworICAqKSBMSUJPQkpTPSIkTElCT0JKUyBzdGF0LiRhY19vYmpleHQiCisgOzsKK2VzYWMKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RBVF9FTVBUWV9TVFJJTkdfQlVHIDEKK19BQ0VPRgorCitmaQorCithY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJtb2RlX3QiICJhY19jdl90eXBlX21vZGVfdCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl90eXBlX21vZGVfdCIgPSB4eWVzOyB0aGVuIDoKKworZWxzZQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIG1vZGVfdCBpbnQKK19BQ0VPRgorCitmaQorCithY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJwaWRfdCIgImFjX2N2X3R5cGVfcGlkX3QiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV9waWRfdCIgPSB4eWVzOyB0aGVuIDoKKworZWxzZQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIHBpZF90IGludAorX0FDRU9GCisKK2ZpCisKKworYWNfZm5fY19jaGVja19kZWNsICIkTElORU5PIiAiZW52aXJvbiIgImFjX2N2X2hhdmVfZGVjbF9lbnZpcm9uIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF9lbnZpcm9uIiA9IHh5ZXM7IHRoZW4gOgorICBhY19oYXZlX2RlY2w9MQorZWxzZQorICBhY19oYXZlX2RlY2w9MAorZmkKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0RFQ0xfRU5WSVJPTiAkYWNfaGF2ZV9kZWNsCitfQUNFT0YKKworCisjIGNoZWNrIGlmIGdjYydzIC1mdmlzaWJpbGl0eSBpcyBzdXBwb3J0ZWQKKworICBzYXZlX0NGTEFHUz0iJENGTEFHUyIKKyAgVklTSUJJTElUWV9ISURERU5fQ0ZMQUdTPSIiCisgIE9QVElPTj0tZnZpc2liaWxpdHk9aGlkZGVuCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZ2NjICRPUFRJT04gc3VwcG9ydCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZ2NjICRPUFRJT04gc3VwcG9ydC4uLiAiID4mNjsgfQorCisgIENGTEFHUz0iJENGTEFHUyAkT1BUSU9OIgorCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAgICAgaW50IGRlZmF1bHRfdmlzIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKyAgICAgIGludCBoaWRkZW5fdmlzIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5KCJoaWRkZW4iKSkpOworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX3Zpc2liaWxpdHlfc3VwcG9ydGVkPXllcworZWxzZQorICBhY192aXNpYmlsaXR5X3N1cHBvcnRlZD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3Zpc2liaWxpdHlfc3VwcG9ydGVkIiA+JjUKKyRhc19lY2hvICIkYWNfdmlzaWJpbGl0eV9zdXBwb3J0ZWQiID4mNjsgfQorCisgIGlmIHRlc3QgeCIkYWNfdmlzaWJpbGl0eV9zdXBwb3J0ZWQiID0geHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0dDQ19WSVNJQklMSVRZIDEiID4+Y29uZmRlZnMuaAorCisgICAgVklTSUJJTElUWV9ISURERU5fQ0ZMQUdTPSIkT1BUSU9OIC1ESEFWRV9WSVNJQklMSVRZX0hJRERFTiIKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9WSVNJQklMSVRZX0hJRERFTiAvKiovIiA+PmNvbmZkZWZzLmgKKworICBlbHNlCisKKyAgICA6CisgIGZpCisKKworCisgIENGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorCisKK2VuYWJsZV9jaHJvb3Q9eWVzCitmb3IgYWNfaGVhZGVyIGluIHN5cy9jYXBhYmlsaXR5LmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInN5cy9jYXBhYmlsaXR5LmgiICJhY19jdl9oZWFkZXJfc3lzX2NhcGFiaWxpdHlfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfc3lzX2NhcGFiaWxpdHlfaCIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NZU19DQVBBQklMSVRZX0ggMQorX0FDRU9GCisKK2Vsc2UKKyAgZW5hYmxlX2Nocm9vdD1ubworZmkKKworZG9uZQorCitmb3IgYWNfaGVhZGVyIGluIHN5cy9wcmN0bC5oCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJzeXMvcHJjdGwuaCIgImFjX2N2X2hlYWRlcl9zeXNfcHJjdGxfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfc3lzX3ByY3RsX2giID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TWVNfUFJDVExfSCAxCitfQUNFT0YKKworZWxzZQorICBlbmFibGVfY2hyb290PW5vCitmaQorCitkb25lCisKK2ZvciBhY19mdW5jIGluIGNocm9vdAorZG8gOgorICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJjaHJvb3QiICJhY19jdl9mdW5jX2Nocm9vdCIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19jaHJvb3QiID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9DSFJPT1QgMQorX0FDRU9GCisKK2Vsc2UKKyAgZW5hYmxlX2Nocm9vdD1ubworZmkKK2RvbmUKKworCisgaWYgdGVzdCAieCRlbmFibGVfY2hyb290IiA9ICJ4eWVzIjsgdGhlbgorICBFTkFCTEVfQ0hST09UX1RSVUU9CisgIEVOQUJMRV9DSFJPT1RfRkFMU0U9JyMnCitlbHNlCisgIEVOQUJMRV9DSFJPT1RfVFJVRT0nIycKKyAgRU5BQkxFX0NIUk9PVF9GQUxTRT0KK2ZpCisKKworaWYgdGVzdCAieCRlbmFibGVfY2hyb290IiA9ICJ4eWVzIiA7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgRU5BQkxFX0NIUk9PVCAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sZGwiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl9kbF9kbG9wZW4rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGRsICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBkbG9wZW4gKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBkbG9wZW4gKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX2RsX2Rsb3Blbj15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX2RsX2Rsb3Blbj1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9kbF9kbG9wZW4iID0geHllczsgdGhlbiA6CisgICBmb3IgYWNfaGVhZGVyIGluIGRsZmNuLmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgImRsZmNuLmgiICJhY19jdl9oZWFkZXJfZGxmY25faCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfZGxmY25faCIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0RMRkNOX0ggMQorX0FDRU9GCisgSEFWRV9ETE9QRU49eWVzCitlbHNlCisgIEhBVkVfRExPUEVOPW5vCitmaQorCitkb25lCisKK2Vsc2UKKyAgSEFWRV9ETE9QRU49bm8KK2ZpCisKK2lmIHRlc3QgIngkSEFWRV9ETE9QRU4iID0gInh5ZXMiIDsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0RMT1BFTiAxIiA+PmNvbmZkZWZzLmgKKworZmkKKyBpZiB0ZXN0ICJ4JEhBVkVfRExPUEVOIiA9ICJ4eWVzIjsgdGhlbgorICBIQVZFX0RMT1BFTl9UUlVFPQorICBIQVZFX0RMT1BFTl9GQUxTRT0nIycKK2Vsc2UKKyAgSEFWRV9ETE9QRU5fVFJVRT0nIycKKyAgSEFWRV9ETE9QRU5fRkFMU0U9CitmaQorCisKK2hhdmVfaW5vdGlmeT1ubworZm9yIGFjX2hlYWRlciBpbiBzeXMvaW5vdGlmeS5oCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJzeXMvaW5vdGlmeS5oIiAiYWNfY3ZfaGVhZGVyX3N5c19pbm90aWZ5X2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3N5c19pbm90aWZ5X2giID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TWVNfSU5PVElGWV9IIDEKK19BQ0VPRgorIGhhdmVfaW5vdGlmeT15ZXMKK2ZpCisKK2RvbmUKKworCisgaWYgdGVzdCAieCRoYXZlX2lub3RpZnkiID0gInh5ZXMiOyB0aGVuCisgIEhBVkVfSU5PVElGWV9UUlVFPQorICBIQVZFX0lOT1RJRllfRkFMU0U9JyMnCitlbHNlCisgIEhBVkVfSU5PVElGWV9UUlVFPScjJworICBIQVZFX0lOT1RJRllfRkFMU0U9CitmaQorCisKK2lmIHRlc3QgIngkaGF2ZV9pbm90aWZ5IiA9ICJ4eWVzIiA7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9JTk9USUZZIDEiID4+Y29uZmRlZnMuaAorCitmaQorCitoYXZlX2txdWV1ZT15ZXMKK2ZvciBhY19mdW5jIGluIGtxdWV1ZQorZG8gOgorICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJrcXVldWUiICJhY19jdl9mdW5jX2txdWV1ZSIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19rcXVldWUiID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9LUVVFVUUgMQorX0FDRU9GCisKK2Vsc2UKKyAgaGF2ZV9rcXVldWU9bm8KK2ZpCitkb25lCisKKworIGlmIHRlc3QgIngkaGF2ZV9rcXVldWUiID0gInh5ZXMiOyB0aGVuCisgIEhBVkVfS1FVRVVFX1RSVUU9CisgIEhBVkVfS1FVRVVFX0ZBTFNFPScjJworZWxzZQorICBIQVZFX0tRVUVVRV9UUlVFPScjJworICBIQVZFX0tRVUVVRV9GQUxTRT0KK2ZpCisKKworaWYgdGVzdCAieCRoYXZlX2txdWV1ZSIgPSAieHllcyIgOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfS1FVRVVFIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIE5MUyBpcyByZXF1ZXN0ZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBOTFMgaXMgcmVxdWVzdGVkLi4uICIgPiY2OyB9CisgICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW5scyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9ubHMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9ubHM7IFVTRV9OTFM9JGVuYWJsZXZhbAorZWxzZQorICBVU0VfTkxTPXllcworZmkKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFVTRV9OTFMiID4mNQorJGFzX2VjaG8gIiRVU0VfTkxTIiA+JjY7IH0KKworCisKKworY2FzZSAiJGFtX19hcGlfdmVyc2lvbiIgaW4KKyAgICAxLjAxMjM0KQorCWFzX2ZuX2Vycm9yICQ/ICJBdXRvbWFrZSAxLjUgb3IgbmV3ZXIgaXMgcmVxdWlyZWQgdG8gdXNlIGludGx0b29sIiAiJExJTkVOTyIgNQorICAgIDs7CisgICAgKikKKyAgICA7OworZXNhYworCitpZiB0ZXN0IC1uICIwLjM1LjAiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgaW50bHRvb2wgPj0gMC4zNS4wIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBpbnRsdG9vbCA+PSAwLjM1LjAuLi4gIiA+JjY7IH0KKworICAgIElOVExUT09MX1JFUVVJUkVEX1ZFUlNJT05fQVNfSU5UPWBlY2hvIDAuMzUuMCB8IGF3ayAtRi4gJ3sgcHJpbnQgJCAxICogMTAwMCArICQgMiAqIDEwMCArICQgMzsgfSdgCisgICAgSU5UTFRPT0xfQVBQTElFRF9WRVJTSU9OPWBpbnRsdG9vbC11cGRhdGUgLS12ZXJzaW9uIHwgaGVhZCAtMSB8IGN1dCAtZCIgIiAtZjNgCisgICAgSU5UTFRPT0xfQVBQTElFRF9WRVJTSU9OX0FTX0lOVD1gZWNobyAkSU5UTFRPT0xfQVBQTElFRF9WRVJTSU9OIHwgYXdrIC1GLiAneyBwcmludCAkIDEgKiAxMDAwICsgJCAyICogMTAwICsgJCAzOyB9J2AKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkSU5UTFRPT0xfQVBQTElFRF9WRVJTSU9OIGZvdW5kIiA+JjUKKyRhc19lY2hvICIkSU5UTFRPT0xfQVBQTElFRF9WRVJTSU9OIGZvdW5kIiA+JjY7IH0KKyAgICB0ZXN0ICIkSU5UTFRPT0xfQVBQTElFRF9WRVJTSU9OX0FTX0lOVCIgLWdlICIkSU5UTFRPT0xfUkVRVUlSRURfVkVSU0lPTl9BU19JTlQiIHx8CisJYXNfZm5fZXJyb3IgJD8gIllvdXIgaW50bHRvb2wgaXMgdG9vIG9sZC4gIFlvdSBuZWVkIGludGx0b29sIDAuMzUuMCBvciBsYXRlci4iICIkTElORU5PIiA1CitmaQorCisjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImludGx0b29sLXVwZGF0ZSIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgaW50bHRvb2wtdXBkYXRlOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9JTlRMVE9PTF9VUERBVEUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRJTlRMVE9PTF9VUERBVEUgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfSU5UTFRPT0xfVVBEQVRFPSIkSU5UTFRPT0xfVVBEQVRFIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcGF0aF9JTlRMVE9PTF9VUERBVEU9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgOzsKK2VzYWMKK2ZpCitJTlRMVE9PTF9VUERBVEU9JGFjX2N2X3BhdGhfSU5UTFRPT0xfVVBEQVRFCitpZiB0ZXN0IC1uICIkSU5UTFRPT0xfVVBEQVRFIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJElOVExUT09MX1VQREFURSIgPiY1CiskYXNfZWNobyAiJElOVExUT09MX1VQREFURSIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImludGx0b29sLW1lcmdlIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBpbnRsdG9vbC1tZXJnZTsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfSU5UTFRPT0xfTUVSR0UrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRJTlRMVE9PTF9NRVJHRSBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9JTlRMVE9PTF9NRVJHRT0iJElOVExUT09MX01FUkdFIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcGF0aF9JTlRMVE9PTF9NRVJHRT0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICA7OworZXNhYworZmkKK0lOVExUT09MX01FUkdFPSRhY19jdl9wYXRoX0lOVExUT09MX01FUkdFCitpZiB0ZXN0IC1uICIkSU5UTFRPT0xfTUVSR0UiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkSU5UTFRPT0xfTUVSR0UiID4mNQorJGFzX2VjaG8gIiRJTlRMVE9PTF9NRVJHRSIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImludGx0b29sLWV4dHJhY3QiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGludGx0b29sLWV4dHJhY3Q7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX0lOVExUT09MX0VYVFJBQ1QrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRJTlRMVE9PTF9FWFRSQUNUIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX0lOVExUT09MX0VYVFJBQ1Q9IiRJTlRMVE9PTF9FWFRSQUNUIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcGF0aF9JTlRMVE9PTF9FWFRSQUNUPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIDs7Citlc2FjCitmaQorSU5UTFRPT0xfRVhUUkFDVD0kYWNfY3ZfcGF0aF9JTlRMVE9PTF9FWFRSQUNUCitpZiB0ZXN0IC1uICIkSU5UTFRPT0xfRVhUUkFDVCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRJTlRMVE9PTF9FWFRSQUNUIiA+JjUKKyRhc19lY2hvICIkSU5UTFRPT0xfRVhUUkFDVCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitpZiB0ZXN0IC16ICIkSU5UTFRPT0xfVVBEQVRFIiAtbyAteiAiJElOVExUT09MX01FUkdFIiAtbyAteiAiJElOVExUT09MX0VYVFJBQ1QiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIlRoZSBpbnRsdG9vbCBzY3JpcHRzIHdlcmUgbm90IGZvdW5kLiBQbGVhc2UgaW5zdGFsbCBpbnRsdG9vbC4iICIkTElORU5PIiA1CitmaQorCisgIElOVExUT09MX0RFU0tUT1BfUlVMRT0nJS5kZXNrdG9wOiAgICUuZGVza3RvcC5pbiAgICQoSU5UTFRPT0xfTUVSR0UpICQod2lsZGNhcmQgJCh0b3Bfc3JjZGlyKS9wby8qLnBvKSA7IExDX0FMTD1DICQoSU5UTFRPT0xfTUVSR0UpIC1kIC11IC1jICQodG9wX2J1aWxkZGlyKS9wby8uaW50bHRvb2wtbWVyZ2UtY2FjaGUgJCh0b3Bfc3JjZGlyKS9wbyAkPCAkQCcKK0lOVExUT09MX0RJUkVDVE9SWV9SVUxFPSclLmRpcmVjdG9yeTogJS5kaXJlY3RvcnkuaW4gJChJTlRMVE9PTF9NRVJHRSkgJCh3aWxkY2FyZCAkKHRvcF9zcmNkaXIpL3BvLyoucG8pIDsgTENfQUxMPUMgJChJTlRMVE9PTF9NRVJHRSkgLWQgLXUgLWMgJCh0b3BfYnVpbGRkaXIpL3BvLy5pbnRsdG9vbC1tZXJnZS1jYWNoZSAkKHRvcF9zcmNkaXIpL3BvICQ8ICRAJworICAgICBJTlRMVE9PTF9LRVlTX1JVTEU9JyUua2V5czogICAgICAlLmtleXMuaW4gICAgICAkKElOVExUT09MX01FUkdFKSAkKHdpbGRjYXJkICQodG9wX3NyY2RpcikvcG8vKi5wbykgOyBMQ19BTEw9QyAkKElOVExUT09MX01FUkdFKSAtayAtdSAtYyAkKHRvcF9idWlsZGRpcikvcG8vLmludGx0b29sLW1lcmdlLWNhY2hlICQodG9wX3NyY2RpcikvcG8gJDwgJEAnCisgICAgIElOVExUT09MX1BST1BfUlVMRT0nJS5wcm9wOiAgICAgICUucHJvcC5pbiAgICAgICQoSU5UTFRPT0xfTUVSR0UpICQod2lsZGNhcmQgJCh0b3Bfc3JjZGlyKS9wby8qLnBvKSA7IExDX0FMTD1DICQoSU5UTFRPT0xfTUVSR0UpIC1kIC11IC1jICQodG9wX2J1aWxkZGlyKS9wby8uaW50bHRvb2wtbWVyZ2UtY2FjaGUgJCh0b3Bfc3JjZGlyKS9wbyAkPCAkQCcKKyAgICAgIElOVExUT09MX09BRl9SVUxFPSclLm9hZjogICAgICAgJS5vYWYuaW4gICAgICAgJChJTlRMVE9PTF9NRVJHRSkgJCh3aWxkY2FyZCAkKHRvcF9zcmNkaXIpL3BvLyoucG8pIDsgTENfQUxMPUMgJChJTlRMVE9PTF9NRVJHRSkgLW8gLXAgJCh0b3Bfc3JjZGlyKS9wbyAkPCAkQCcKKyAgICAgSU5UTFRPT0xfUE9OR19SVUxFPSclLnBvbmc6ICAgICAgJS5wb25nLmluICAgICAgJChJTlRMVE9PTF9NRVJHRSkgJCh3aWxkY2FyZCAkKHRvcF9zcmNkaXIpL3BvLyoucG8pIDsgTENfQUxMPUMgJChJTlRMVE9PTF9NRVJHRSkgLXggLXUgLWMgJCh0b3BfYnVpbGRkaXIpL3BvLy5pbnRsdG9vbC1tZXJnZS1jYWNoZSAkKHRvcF9zcmNkaXIpL3BvICQ8ICRAJworICAgSU5UTFRPT0xfU0VSVkVSX1JVTEU9JyUuc2VydmVyOiAgICAlLnNlcnZlci5pbiAgICAkKElOVExUT09MX01FUkdFKSAkKHdpbGRjYXJkICQodG9wX3NyY2RpcikvcG8vKi5wbykgOyBMQ19BTEw9QyAkKElOVExUT09MX01FUkdFKSAtbyAtdSAtYyAkKHRvcF9idWlsZGRpcikvcG8vLmludGx0b29sLW1lcmdlLWNhY2hlICQodG9wX3NyY2RpcikvcG8gJDwgJEAnCisgICAgSU5UTFRPT0xfU0hFRVRfUlVMRT0nJS5zaGVldDogICAgICUuc2hlZXQuaW4gICAgICQoSU5UTFRPT0xfTUVSR0UpICQod2lsZGNhcmQgJCh0b3Bfc3JjZGlyKS9wby8qLnBvKSA7IExDX0FMTD1DICQoSU5UTFRPT0xfTUVSR0UpIC14IC11IC1jICQodG9wX2J1aWxkZGlyKS9wby8uaW50bHRvb2wtbWVyZ2UtY2FjaGUgJCh0b3Bfc3JjZGlyKS9wbyAkPCAkQCcKK0lOVExUT09MX1NPVU5ETElTVF9SVUxFPSclLnNvdW5kbGlzdDogJS5zb3VuZGxpc3QuaW4gJChJTlRMVE9PTF9NRVJHRSkgJCh3aWxkY2FyZCAkKHRvcF9zcmNkaXIpL3BvLyoucG8pIDsgTENfQUxMPUMgJChJTlRMVE9PTF9NRVJHRSkgLWQgLXUgLWMgJCh0b3BfYnVpbGRkaXIpL3BvLy5pbnRsdG9vbC1tZXJnZS1jYWNoZSAkKHRvcF9zcmNkaXIpL3BvICQ8ICRAJworICAgICAgIElOVExUT09MX1VJX1JVTEU9JyUudWk6ICAgICAgICAlLnVpLmluICAgICAgICAkKElOVExUT09MX01FUkdFKSAkKHdpbGRjYXJkICQodG9wX3NyY2RpcikvcG8vKi5wbykgOyBMQ19BTEw9QyAkKElOVExUT09MX01FUkdFKSAteCAtdSAtYyAkKHRvcF9idWlsZGRpcikvcG8vLmludGx0b29sLW1lcmdlLWNhY2hlICQodG9wX3NyY2RpcikvcG8gJDwgJEAnCisgICAgICBJTlRMVE9PTF9YTUxfUlVMRT0nJS54bWw6ICAgICAgICUueG1sLmluICAgICAgICQoSU5UTFRPT0xfTUVSR0UpICQod2lsZGNhcmQgJCh0b3Bfc3JjZGlyKS9wby8qLnBvKSA7IExDX0FMTD1DICQoSU5UTFRPT0xfTUVSR0UpIC14IC11IC1jICQodG9wX2J1aWxkZGlyKS9wby8uaW50bHRvb2wtbWVyZ2UtY2FjaGUgJCh0b3Bfc3JjZGlyKS9wbyAkPCAkQCcKKyAgICAgIElOVExUT09MX1hNTF9OT01FUkdFX1JVTEU9JyUueG1sOiAgICAgICAlLnhtbC5pbiAgICAgICAkKElOVExUT09MX01FUkdFKSA7IExDX0FMTD1DICQoSU5UTFRPT0xfTUVSR0UpIC14IC11IC0tbm8tdHJhbnNsYXRpb25zICQ8ICRAJworICAgICAgSU5UTFRPT0xfWEFNX1JVTEU9JyUueGFtOiAgICAgICAlLnhtbC5pbiAgICAgICAkKElOVExUT09MX01FUkdFKSAkKHdpbGRjYXJkICQodG9wX3NyY2RpcikvcG8vKi5wbykgOyBMQ19BTEw9QyAkKElOVExUT09MX01FUkdFKSAteCAtdSAtYyAkKHRvcF9idWlsZGRpcikvcG8vLmludGx0b29sLW1lcmdlLWNhY2hlICQodG9wX3NyY2RpcikvcG8gJDwgJEAnCisgICAgICBJTlRMVE9PTF9LQkRfUlVMRT0nJS5rYmQ6ICAgICAgICUua2JkLmluICAgICAgICQoSU5UTFRPT0xfTUVSR0UpICQod2lsZGNhcmQgJCh0b3Bfc3JjZGlyKS9wby8qLnBvKSA7IExDX0FMTD1DICQoSU5UTFRPT0xfTUVSR0UpIC14IC11IC1tIC1jICQodG9wX2J1aWxkZGlyKS9wby8uaW50bHRvb2wtbWVyZ2UtY2FjaGUgJCh0b3Bfc3JjZGlyKS9wbyAkPCAkQCcKKyAgICBJTlRMVE9PTF9DQVZFU19SVUxFPSclLmNhdmVzOiAgICAgJS5jYXZlcy5pbiAgICAgJChJTlRMVE9PTF9NRVJHRSkgJCh3aWxkY2FyZCAkKHRvcF9zcmNkaXIpL3BvLyoucG8pIDsgTENfQUxMPUMgJChJTlRMVE9PTF9NRVJHRSkgLWQgLXUgLWMgJCh0b3BfYnVpbGRkaXIpL3BvLy5pbnRsdG9vbC1tZXJnZS1jYWNoZSAkKHRvcF9zcmNkaXIpL3BvICQ8ICRAJworICBJTlRMVE9PTF9TQ0hFTUFTX1JVTEU9JyUuc2NoZW1hczogICAlLnNjaGVtYXMuaW4gICAkKElOVExUT09MX01FUkdFKSAkKHdpbGRjYXJkICQodG9wX3NyY2RpcikvcG8vKi5wbykgOyBMQ19BTEw9QyAkKElOVExUT09MX01FUkdFKSAtcyAtdSAtYyAkKHRvcF9idWlsZGRpcikvcG8vLmludGx0b29sLW1lcmdlLWNhY2hlICQodG9wX3NyY2RpcikvcG8gJDwgJEAnCisgICAgSU5UTFRPT0xfVEhFTUVfUlVMRT0nJS50aGVtZTogICAgICUudGhlbWUuaW4gICAgICQoSU5UTFRPT0xfTUVSR0UpICQod2lsZGNhcmQgJCh0b3Bfc3JjZGlyKS9wby8qLnBvKSA7IExDX0FMTD1DICQoSU5UTFRPT0xfTUVSR0UpIC1kIC11IC1jICQodG9wX2J1aWxkZGlyKS9wby8uaW50bHRvb2wtbWVyZ2UtY2FjaGUgJCh0b3Bfc3JjZGlyKS9wbyAkPCAkQCcKKyAgICBJTlRMVE9PTF9TRVJWSUNFX1JVTEU9JyUuc2VydmljZTogJS5zZXJ2aWNlLmluICAgJChJTlRMVE9PTF9NRVJHRSkgJCh3aWxkY2FyZCAkKHRvcF9zcmNkaXIpL3BvLyoucG8pIDsgTENfQUxMPUMgJChJTlRMVE9PTF9NRVJHRSkgLWQgLXUgLWMgJCh0b3BfYnVpbGRkaXIpL3BvLy5pbnRsdG9vbC1tZXJnZS1jYWNoZSAkKHRvcF9zcmNkaXIpL3BvICQ8ICRAJworICAgSU5UTFRPT0xfUE9MSUNZX1JVTEU9JyUucG9saWN5OiAgICAlLnBvbGljeS5pbiAgICAkKElOVExUT09MX01FUkdFKSAkKHdpbGRjYXJkICQodG9wX3NyY2RpcikvcG8vKi5wbykgOyBMQ19BTEw9QyAkKElOVExUT09MX01FUkdFKSAteCAtdSAtYyAkKHRvcF9idWlsZGRpcikvcG8vLmludGx0b29sLW1lcmdlLWNhY2hlICQodG9wX3NyY2RpcikvcG8gJDwgJEAnCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyMgQ2hlY2sgdGhlIGdldHRleHQgdG9vbHMgdG8gbWFrZSBzdXJlIHRoZXkgYXJlIEdOVQorIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJ4Z2V0dGV4dCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgeGdldHRleHQ7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX1hHRVRURVhUKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkWEdFVFRFWFQgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfWEdFVFRFWFQ9IiRYR0VUVEVYVCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfWEdFVFRFWFQ9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgOzsKK2VzYWMKK2ZpCitYR0VUVEVYVD0kYWNfY3ZfcGF0aF9YR0VUVEVYVAoraWYgdGVzdCAtbiAiJFhHRVRURVhUIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFhHRVRURVhUIiA+JjUKKyRhc19lY2hvICIkWEdFVFRFWFQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJtc2dtZXJnZSIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgbXNnbWVyZ2U7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX01TR01FUkdFKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkTVNHTUVSR0UgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfTVNHTUVSR0U9IiRNU0dNRVJHRSIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfTVNHTUVSR0U9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgOzsKK2VzYWMKK2ZpCitNU0dNRVJHRT0kYWNfY3ZfcGF0aF9NU0dNRVJHRQoraWYgdGVzdCAtbiAiJE1TR01FUkdFIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1TR01FUkdFIiA+JjUKKyRhc19lY2hvICIkTVNHTUVSR0UiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJtc2dmbXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IG1zZ2ZtdDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfTVNHRk1UKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkTVNHRk1UIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX01TR0ZNVD0iJE1TR0ZNVCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfTVNHRk1UPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIDs7Citlc2FjCitmaQorTVNHRk1UPSRhY19jdl9wYXRoX01TR0ZNVAoraWYgdGVzdCAtbiAiJE1TR0ZNVCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNU0dGTVQiID4mNQorJGFzX2VjaG8gIiRNU0dGTVQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJnbXNnZm10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBnbXNnZm10OyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9HTVNHRk1UKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkR01TR0ZNVCBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9HTVNHRk1UPSIkR01TR0ZNVCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfR01TR0ZNVD0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9HTVNHRk1UIiAmJiBhY19jdl9wYXRoX0dNU0dGTVQ9IiRNU0dGTVQiCisgIDs7Citlc2FjCitmaQorR01TR0ZNVD0kYWNfY3ZfcGF0aF9HTVNHRk1UCitpZiB0ZXN0IC1uICIkR01TR0ZNVCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRHTVNHRk1UIiA+JjUKKyRhc19lY2hvICIkR01TR0ZNVCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitpZiB0ZXN0IC16ICIkWEdFVFRFWFQiIC1vIC16ICIkTVNHTUVSR0UiIC1vIC16ICIkTVNHRk1UIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJHTlUgZ2V0dGV4dCB0b29scyBub3QgZm91bmQ7IHJlcXVpcmVkIGZvciBpbnRsdG9vbCIgIiRMSU5FTk8iIDUKK2ZpCit4Z3ZlcnNpb249ImAkWEdFVFRFWFQgLS12ZXJzaW9ufGdyZXAgJyhHTlUgJyAyPiAvZGV2L251bGxgIgorbW12ZXJzaW9uPSJgJE1TR01FUkdFIC0tdmVyc2lvbnxncmVwICcoR05VICcgMj4gL2Rldi9udWxsYCIKK21mdmVyc2lvbj0iYCRNU0dGTVQgLS12ZXJzaW9ufGdyZXAgJyhHTlUgJyAyPiAvZGV2L251bGxgIgoraWYgdGVzdCAteiAiJHhndmVyc2lvbiIgLW8gLXogIiRtbXZlcnNpb24iIC1vIC16ICIkbWZ2ZXJzaW9uIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJHTlUgZ2V0dGV4dCB0b29scyBub3QgZm91bmQ7IHJlcXVpcmVkIGZvciBpbnRsdG9vbCIgIiRMSU5FTk8iIDUKK2ZpCisKKyMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAicGVybCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgcGVybDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfSU5UTFRPT0xfUEVSTCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJElOVExUT09MX1BFUkwgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfSU5UTFRPT0xfUEVSTD0iJElOVExUT09MX1BFUkwiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX0lOVExUT09MX1BFUkw9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgOzsKK2VzYWMKK2ZpCitJTlRMVE9PTF9QRVJMPSRhY19jdl9wYXRoX0lOVExUT09MX1BFUkwKK2lmIHRlc3QgLW4gIiRJTlRMVE9PTF9QRVJMIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJElOVExUT09MX1BFUkwiID4mNQorJGFzX2VjaG8gIiRJTlRMVE9PTF9QRVJMIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2lmIHRlc3QgLXogIiRJTlRMVE9PTF9QRVJMIjsgdGhlbgorICAgYXNfZm5fZXJyb3IgJD8gInBlcmwgbm90IGZvdW5kIiAiJExJTkVOTyIgNQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHBlcmwgPj0gNS44LjEiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHBlcmwgPj0gNS44LjEuLi4gIiA+JjY7IH0KKyRJTlRMVE9PTF9QRVJMIC1lICJ1c2UgNS44LjE7IiA+IC9kZXYvbnVsbCAyPiYxCitpZiB0ZXN0ICQ/IC1uZSAwOyB0aGVuCisgICBhc19mbl9lcnJvciAkPyAicGVybCA1LjguMSBpcyByZXF1aXJlZCBmb3IgaW50bHRvb2wiICIkTElORU5PIiA1CitlbHNlCisgICBJVF9QRVJMX1ZFUlNJT049YCRJTlRMVE9PTF9QRVJMIC1lICJwcmludGYgJyV2ZCcsICReViJgCisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJElUX1BFUkxfVkVSU0lPTiIgPiY1CiskYXNfZWNobyAiJElUX1BFUkxfVkVSU0lPTiIgPiY2OyB9CitmaQoraWYgdGVzdCAieCIgIT0gInhuby14bWwiOyB0aGVuCisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBYTUw6OlBhcnNlciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgWE1MOjpQYXJzZXIuLi4gIiA+JjY7IH0KKyAgIGlmIGAkSU5UTFRPT0xfUEVSTCAtZSAicmVxdWlyZSBYTUw6OlBhcnNlciIgMj4vZGV2L251bGxgOyB0aGVuCisgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG9rIiA+JjUKKyRhc19lY2hvICJvayIgPiY2OyB9CisgICBlbHNlCisgICAgICAgYXNfZm5fZXJyb3IgJD8gIlhNTDo6UGFyc2VyIHBlcmwgbW9kdWxlIGlzIHJlcXVpcmVkIGZvciBpbnRsdG9vbCIgIiRMSU5FTk8iIDUKKyAgIGZpCitmaQorCisjIFN1YnN0aXR1dGUgQUxMX0xJTkdVQVMgc28gd2UgY2FuIHVzZSBpdCBpbiBwby9NYWtlZmlsZQorCisKKyMgU2V0IERBVEFESVJOQU1FIGNvcnJlY3RseSBpZiBpdCBpcyBub3Qgc2V0IHlldAorIyAoY29waWVkIGZyb20gZ2xpYi1nZXR0ZXh0Lm00KQoraWYgdGVzdCAteiAiJERBVEFESVJOQU1FIjsgdGhlbgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworZXh0ZXJuIGludCBfbmxfbXNnX2NhdF9jbnRyOworICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX25sX21zZ19jYXRfY250cgorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIERBVEFESVJOQU1FPXNoYXJlCitlbHNlCisgIGNhc2UgJGhvc3QgaW4KKyAgICAqLSotc29sYXJpcyopCisgICAgICAgICAgICAgICAgICAgICAgICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJiaW5kX3RleHRkb21haW5fY29kZXNldCIgImFjX2N2X2Z1bmNfYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQiID0geHllczsgdGhlbiA6CisgIERBVEFESVJOQU1FPXNoYXJlCitlbHNlCisgIERBVEFESVJOQU1FPWxpYgorZmkKKworICAgIDs7CisgICAgKikKKyAgICBEQVRBRElSTkFNRT1saWIKKyAgICA7OworICAgIGVzYWMKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKKworCisKKworCitHRVRURVhUX1BBQ0tBR0U9YXZhaGkKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEdFVFRFWFRfUEFDS0FHRSAiJEdFVFRFWFRfUEFDS0FHRSIKK19BQ0VPRgorCisKKyAgIGZvciBhY19oZWFkZXIgaW4gbG9jYWxlLmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgImxvY2FsZS5oIiAiYWNfY3ZfaGVhZGVyX2xvY2FsZV9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9sb2NhbGVfaCIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0xPQ0FMRV9IIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKyAgICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfbG9jYWxlX2ggPSB5ZXM7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBMQ19NRVNTQUdFUyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgTENfTUVTU0FHRVMuLi4gIiA+JjY7IH0KK2lmICR7YW1fY3ZfdmFsX0xDX01FU1NBR0VTKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGxvY2FsZS5oPgoraW50CittYWluICgpCit7CityZXR1cm4gTENfTUVTU0FHRVMKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhbV9jdl92YWxfTENfTUVTU0FHRVM9eWVzCitlbHNlCisgIGFtX2N2X3ZhbF9MQ19NRVNTQUdFUz1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhbV9jdl92YWxfTENfTUVTU0FHRVMiID4mNQorJGFzX2VjaG8gIiRhbV9jdl92YWxfTENfTUVTU0FHRVMiID4mNjsgfQorICAgIGlmIHRlc3QgJGFtX2N2X3ZhbF9MQ19NRVNTQUdFUyA9IHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0xDX01FU1NBR0VTIDEiID4+Y29uZmRlZnMuaAorCisgICAgZmkKKyAgZmkKKyAgICAgVVNFX05MUz15ZXMKKworCisgICAgZ3RfY3ZfaGF2ZV9nZXR0ZXh0PW5vCisKKyAgICBDQVRPQkpFWFQ9Tk9ORQorICAgIFhHRVRURVhUPToKKyAgICBJTlRMTElCUz0KKworICAgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJsaWJpbnRsLmgiICJhY19jdl9oZWFkZXJfbGliaW50bF9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9saWJpbnRsX2giID0geHllczsgdGhlbiA6CisgIGd0X2N2X2Z1bmNfZGdldHRleHRfbGliaW50bD0ibm8iCisgICAgICBsaWJpbnRsX2V4dHJhX2xpYnM9IiIKKworICAgICAgIworICAgICAgIyBGaXJzdCBjaGVjayBpbiBsaWJjCisgICAgICAjCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBuZ2V0dGV4dCBpbiBsaWJjIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBuZ2V0dGV4dCBpbiBsaWJjLi4uICIgPiY2OyB9CitpZiAke2d0X2N2X2Z1bmNfbmdldHRleHRfbGliYys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPGxpYmludGwuaD4KKworaW50CittYWluICgpCit7CityZXR1cm4gIW5nZXR0ZXh0ICgiIiwiIiwgMSkKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBndF9jdl9mdW5jX25nZXR0ZXh0X2xpYmM9eWVzCitlbHNlCisgIGd0X2N2X2Z1bmNfbmdldHRleHRfbGliYz1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGd0X2N2X2Z1bmNfbmdldHRleHRfbGliYyIgPiY1CiskYXNfZWNobyAiJGd0X2N2X2Z1bmNfbmdldHRleHRfbGliYyIgPiY2OyB9CisKKyAgICAgIGlmIHRlc3QgIiRndF9jdl9mdW5jX25nZXR0ZXh0X2xpYmMiID0gInllcyIgOyB0aGVuCisJICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZGdldHRleHQgaW4gbGliYyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZGdldHRleHQgaW4gbGliYy4uLiAiID4mNjsgfQoraWYgJHtndF9jdl9mdW5jX2RnZXR0ZXh0X2xpYmMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxsaWJpbnRsLmg+CisKK2ludAorbWFpbiAoKQoreworcmV0dXJuICFkZ2V0dGV4dCAoIiIsIiIpCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZ3RfY3ZfZnVuY19kZ2V0dGV4dF9saWJjPXllcworZWxzZQorICBndF9jdl9mdW5jX2RnZXR0ZXh0X2xpYmM9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRndF9jdl9mdW5jX2RnZXR0ZXh0X2xpYmMiID4mNQorJGFzX2VjaG8gIiRndF9jdl9mdW5jX2RnZXR0ZXh0X2xpYmMiID4mNjsgfQorICAgICAgZmkKKworICAgICAgaWYgdGVzdCAiJGd0X2N2X2Z1bmNfbmdldHRleHRfbGliYyIgPSAieWVzIiA7IHRoZW4KKyAgICAgICAgZm9yIGFjX2Z1bmMgaW4gYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQKK2RvIDoKKyAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQiICJhY19jdl9mdW5jX2JpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IgoraWYgdGVzdCAieCRhY19jdl9mdW5jX2JpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfQklORF9URVhURE9NQUlOX0NPREVTRVQgMQorX0FDRU9GCisKK2ZpCitkb25lCisKKyAgICAgIGZpCisKKyAgICAgICMKKyAgICAgICMgSWYgd2UgZG9uJ3QgaGF2ZSBldmVyeXRoaW5nIHdlIHdhbnQsIGNoZWNrIGluIGxpYmludGwKKyAgICAgICMKKyAgICAgIGlmIHRlc3QgIiRndF9jdl9mdW5jX2RnZXR0ZXh0X2xpYmMiICE9ICJ5ZXMiIFwKKwkgfHwgdGVzdCAiJGd0X2N2X2Z1bmNfbmdldHRleHRfbGliYyIgIT0gInllcyIgXAorICAgICAgICAgfHwgdGVzdCAiJGFjX2N2X2Z1bmNfYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQiICE9ICJ5ZXMiIDsgdGhlbgorCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGJpbmR0ZXh0ZG9tYWluIGluIC1saW50bCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgYmluZHRleHRkb21haW4gaW4gLWxpbnRsLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl9pbnRsX2JpbmR0ZXh0ZG9tYWluKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxpbnRsICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBiaW5kdGV4dGRvbWFpbiAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGJpbmR0ZXh0ZG9tYWluICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9pbnRsX2JpbmR0ZXh0ZG9tYWluPXllcworZWxzZQorICBhY19jdl9saWJfaW50bF9iaW5kdGV4dGRvbWFpbj1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfaW50bF9iaW5kdGV4dGRvbWFpbiIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9pbnRsX2JpbmR0ZXh0ZG9tYWluIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX2ludGxfYmluZHRleHRkb21haW4iID0geHllczsgdGhlbiA6CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG5nZXR0ZXh0IGluIC1saW50bCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbmdldHRleHQgaW4gLWxpbnRsLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl9pbnRsX25nZXR0ZXh0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxpbnRsICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBuZ2V0dGV4dCAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIG5nZXR0ZXh0ICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9pbnRsX25nZXR0ZXh0PXllcworZWxzZQorICBhY19jdl9saWJfaW50bF9uZ2V0dGV4dD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfaW50bF9uZ2V0dGV4dCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9pbnRsX25nZXR0ZXh0IiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX2ludGxfbmdldHRleHQiID0geHllczsgdGhlbiA6CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRnZXR0ZXh0IGluIC1saW50bCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZGdldHRleHQgaW4gLWxpbnRsLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl9pbnRsX2RnZXR0ZXh0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxpbnRsICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBkZ2V0dGV4dCAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGRnZXR0ZXh0ICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9pbnRsX2RnZXR0ZXh0PXllcworZWxzZQorICBhY19jdl9saWJfaW50bF9kZ2V0dGV4dD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfaW50bF9kZ2V0dGV4dCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9pbnRsX2RnZXR0ZXh0IiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX2ludGxfZGdldHRleHQiID0geHllczsgdGhlbiA6CisgIGd0X2N2X2Z1bmNfZGdldHRleHRfbGliaW50bD15ZXMKK2ZpCisKK2ZpCisKK2ZpCisKKworCWlmIHRlc3QgIiRndF9jdl9mdW5jX2RnZXR0ZXh0X2xpYmludGwiICE9ICJ5ZXMiIDsgdGhlbgorCSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAtbGljb252IGlzIG5lZWRlZCB0byB1c2UgZ2V0dGV4dCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAtbGljb252IGlzIG5lZWRlZCB0byB1c2UgZ2V0dGV4dC4uLiAiID4mNjsgfQorCSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICIgPiY1CiskYXNfZWNobyAiIiA+JjY7IH0KKyAgCSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbmdldHRleHQgaW4gLWxpbnRsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBuZ2V0dGV4dCBpbiAtbGludGwuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX2ludGxfbmdldHRleHQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGludGwgLWxpY29udiAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBuZ2V0dGV4dCAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIG5nZXR0ZXh0ICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9pbnRsX25nZXR0ZXh0PXllcworZWxzZQorICBhY19jdl9saWJfaW50bF9uZ2V0dGV4dD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfaW50bF9uZ2V0dGV4dCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9pbnRsX25nZXR0ZXh0IiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX2ludGxfbmdldHRleHQiID0geHllczsgdGhlbiA6CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRjZ2V0dGV4dCBpbiAtbGludGwiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGRjZ2V0dGV4dCBpbiAtbGludGwuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX2ludGxfZGNnZXR0ZXh0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxpbnRsIC1saWNvbnYgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZGNnZXR0ZXh0ICgpOworaW50CittYWluICgpCit7CityZXR1cm4gZGNnZXR0ZXh0ICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9pbnRsX2RjZ2V0dGV4dD15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX2ludGxfZGNnZXR0ZXh0PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9pbnRsX2RjZ2V0dGV4dCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9pbnRsX2RjZ2V0dGV4dCIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9pbnRsX2RjZ2V0dGV4dCIgPSB4eWVzOyB0aGVuIDoKKyAgZ3RfY3ZfZnVuY19kZ2V0dGV4dF9saWJpbnRsPXllcworCQkJbGliaW50bF9leHRyYV9saWJzPS1saWNvbnYKK2Vsc2UKKyAgOgorZmkKKworZWxzZQorICA6CitmaQorCisgICAgICAgIGZpCisKKyAgICAgICAgIworICAgICAgICAjIElmIHdlIGZvdW5kIGxpYmludGwsIHRoZW4gY2hlY2sgaW4gaXQgZm9yIGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0KCk7CisgICAgICAgICMgd2UnbGwgcHJlZmVyIGxpYmMgaWYgbmVpdGhlciBoYXZlIGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0KCksCisgICAgICAgICMgYW5kIGJvdGggaGF2ZSBkZ2V0dGV4dCBhbmQgbmdldHRleHQKKyAgICAgICAgIworICAgICAgICBpZiB0ZXN0ICIkZ3RfY3ZfZnVuY19kZ2V0dGV4dF9saWJpbnRsIiA9ICJ5ZXMiIDsgdGhlbgorICAgICAgICAgIGdsaWJfc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgICAgICBMSUJTPSIkTElCUyAtbGludGwgJGxpYmludGxfZXh0cmFfbGlicyIKKyAgICAgICAgICB1bnNldCBhY19jdl9mdW5jX2JpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0CisgICAgICAgICAgZm9yIGFjX2Z1bmMgaW4gYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQKK2RvIDoKKyAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQiICJhY19jdl9mdW5jX2JpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IgoraWYgdGVzdCAieCRhY19jdl9mdW5jX2JpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfQklORF9URVhURE9NQUlOX0NPREVTRVQgMQorX0FDRU9GCisKK2ZpCitkb25lCisKKyAgICAgICAgICBMSUJTPSIkZ2xpYl9zYXZlX0xJQlMiCisKKyAgICAgICAgICBpZiB0ZXN0ICIkYWNfY3ZfZnVuY19iaW5kX3RleHRkb21haW5fY29kZXNldCIgPSAieWVzIiA7IHRoZW4KKyAgICAgICAgICAgIGd0X2N2X2Z1bmNfZGdldHRleHRfbGliYz1ubworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmIHRlc3QgIiRndF9jdl9mdW5jX2RnZXR0ZXh0X2xpYmMiID0gInllcyIgXAorCQkmJiB0ZXN0ICIkZ3RfY3ZfZnVuY19uZ2V0dGV4dF9saWJjIiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgICAgICAgIGd0X2N2X2Z1bmNfZGdldHRleHRfbGliaW50bD1ubworICAgICAgICAgICAgZmkKKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgZmkKKworICAgICAgaWYgdGVzdCAiJGd0X2N2X2Z1bmNfZGdldHRleHRfbGliYyIgPSAieWVzIiBcCisJfHwgdGVzdCAiJGd0X2N2X2Z1bmNfZGdldHRleHRfbGliaW50bCIgPSAieWVzIjsgdGhlbgorICAgICAgICBndF9jdl9oYXZlX2dldHRleHQ9eWVzCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0ICIkZ3RfY3ZfZnVuY19kZ2V0dGV4dF9saWJpbnRsIiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgIElOVExMSUJTPSItbGludGwgJGxpYmludGxfZXh0cmFfbGlicyIKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgIiRndF9jdl9oYXZlX2dldHRleHQiID0gInllcyI7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9HRVRURVhUIDEiID4+Y29uZmRlZnMuaAorCisJIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJtc2dmbXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IG1zZ2ZtdDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfTVNHRk1UKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAiJE1TR0ZNVCIgaW4KKyAgLyopCisgIGFjX2N2X3BhdGhfTVNHRk1UPSIkTVNHRk1UIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgSUZTPSIke0lGUz0gCX0iOyBhY19zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9OiIKKyAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgJGFjX2Rpci8kYWNfd29yZDsgdGhlbgorICAgICAgaWYgdGVzdCAteiAiYCRhY19kaXIvJGFjX3dvcmQgLWggMj4mMSB8IGdyZXAgJ2R2ICdgIjsgdGhlbgorCWFjX2N2X3BhdGhfTVNHRk1UPSIkYWNfZGlyLyRhY193b3JkIgorCWJyZWFrCisgICAgICBmaQorICAgIGZpCisgIGRvbmUKKyAgSUZTPSIkYWNfc2F2ZV9pZnMiCisgIHRlc3QgLXogIiRhY19jdl9wYXRoX01TR0ZNVCIgJiYgYWNfY3ZfcGF0aF9NU0dGTVQ9Im5vIgorICA7OworZXNhYworZmkKK01TR0ZNVD0iJGFjX2N2X3BhdGhfTVNHRk1UIgoraWYgdGVzdCAiJE1TR0ZNVCIgIT0gIm5vIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1TR0ZNVCIgPiY1CiskYXNfZWNobyAiJE1TR0ZNVCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKwlpZiB0ZXN0ICIkTVNHRk1UIiAhPSAibm8iOyB0aGVuCisgICAgICAgICAgZ2xpYl9zYXZlX0xJQlM9IiRMSUJTIgorICAgICAgICAgIExJQlM9IiRMSUJTICRJTlRMTElCUyIKKwkgIGZvciBhY19mdW5jIGluIGRjZ2V0dGV4dAorZG8gOgorICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJkY2dldHRleHQiICJhY19jdl9mdW5jX2RjZ2V0dGV4dCIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19kY2dldHRleHQiID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9EQ0dFVFRFWFQgMQorX0FDRU9GCisKK2ZpCitkb25lCisKKwkgIE1TR0ZNVF9PUFRTPQorCSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBtc2dmbXQgYWNjZXB0cyAtYyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBtc2dmbXQgYWNjZXB0cyAtYy4uLiAiID4mNjsgfQorCSAgY2F0ID5jb25mdGVzdC5mb28gPDxfQUNFT0YKKworbXNnaWQgIiIKK21zZ3N0ciAiIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIlByb2plY3QtSWQtVmVyc2lvbjogdGVzdCAxLjBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDA3LTAyLTE1IDEyOjAxKzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IHRlc3QgPGZvb0BiYXIueHg+XG4iCisiTGFuZ3VhZ2UtVGVhbTogQyA8TExAbGkub3JnPlxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorCitfQUNFT0YKK2lmIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJE1TR0ZNVCAtYyAtbyAvZGV2L251bGwgY29uZnRlc3QuZm9vIjsgfSA+JjUKKyAgKCRNU0dGTVQgLWMgLW8gL2Rldi9udWxsIGNvbmZ0ZXN0LmZvbykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgTVNHRk1UX09QVFM9LWM7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CitlbHNlIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZWNobyAiJGFzX21lOiBmYWlsZWQgaW5wdXQgd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LmZvbyA+JjUKK2ZpCisKKwkgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZ21zZ2ZtdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgZ21zZ2ZtdDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfR01TR0ZNVCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJEdNU0dGTVQgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfR01TR0ZNVD0iJEdNU0dGTVQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX0dNU0dGTVQ9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgdGVzdCAteiAiJGFjX2N2X3BhdGhfR01TR0ZNVCIgJiYgYWNfY3ZfcGF0aF9HTVNHRk1UPSIkTVNHRk1UIgorICA7OworZXNhYworZmkKK0dNU0dGTVQ9JGFjX2N2X3BhdGhfR01TR0ZNVAoraWYgdGVzdCAtbiAiJEdNU0dGTVQiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkR01TR0ZNVCIgPiY1CiskYXNfZWNobyAiJEdNU0dGTVQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworCSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJ4Z2V0dGV4dCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgeGdldHRleHQ7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX1hHRVRURVhUKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAiJFhHRVRURVhUIiBpbgorICAvKikKKyAgYWNfY3ZfcGF0aF9YR0VUVEVYVD0iJFhHRVRURVhUIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgSUZTPSIke0lGUz0gCX0iOyBhY19zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9OiIKKyAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgJGFjX2Rpci8kYWNfd29yZDsgdGhlbgorICAgICAgaWYgdGVzdCAteiAiYCRhY19kaXIvJGFjX3dvcmQgLWggMj4mMSB8IGdyZXAgJyhIRUxQKSdgIjsgdGhlbgorCWFjX2N2X3BhdGhfWEdFVFRFWFQ9IiRhY19kaXIvJGFjX3dvcmQiCisJYnJlYWsKKyAgICAgIGZpCisgICAgZmkKKyAgZG9uZQorICBJRlM9IiRhY19zYXZlX2lmcyIKKyAgdGVzdCAteiAiJGFjX2N2X3BhdGhfWEdFVFRFWFQiICYmIGFjX2N2X3BhdGhfWEdFVFRFWFQ9IjoiCisgIDs7Citlc2FjCitmaQorWEdFVFRFWFQ9IiRhY19jdl9wYXRoX1hHRVRURVhUIgoraWYgdGVzdCAiJFhHRVRURVhUIiAhPSAiOiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRYR0VUVEVYVCIgPiY1CiskYXNfZWNobyAiJFhHRVRURVhUIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisJICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworZXh0ZXJuIGludCBfbmxfbXNnX2NhdF9jbnRyOworCQkJIHJldHVybiBfbmxfbXNnX2NhdF9jbnRyCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgQ0FUT0JKRVhUPS5nbW8KKyAgICAgICAgICAgICBEQVRBRElSTkFNRT1zaGFyZQorZWxzZQorICBjYXNlICRob3N0IGluCisJICAgICotKi1zb2xhcmlzKikKKwkgICAgCSAgICAgICAgICAgICAgICAJICAgIAkgICAgICAgICAgICAgICAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQiICJhY19jdl9mdW5jX2JpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IgoraWYgdGVzdCAieCRhY19jdl9mdW5jX2JpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IiA9IHh5ZXM7IHRoZW4gOgorICBDQVRPQkpFWFQ9LmdtbworICAgICAgICAgICAgICAgREFUQURJUk5BTUU9c2hhcmUKK2Vsc2UKKyAgQ0FUT0JKRVhUPS5tbworICAgICAgICAgICAgICAgREFUQURJUk5BTUU9bGliCitmaQorCisJICAgIDs7CisJICAgICotKi1vcGVuYnNkKikKKwkgICAgQ0FUT0JKRVhUPS5tbworICAgICAgICAgICAgREFUQURJUk5BTUU9c2hhcmUKKwkgICAgOzsKKwkgICAgKikKKwkgICAgQ0FUT0JKRVhUPS5tbworICAgICAgICAgICAgREFUQURJUk5BTUU9bGliCisJICAgIDs7CisJICAgIGVzYWMKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICAgIExJQlM9IiRnbGliX3NhdmVfTElCUyIKKwkgIElOU1RPQkpFWFQ9Lm1vCisJZWxzZQorCSAgZ3RfY3ZfaGF2ZV9nZXR0ZXh0PW5vCisJZmkKKyAgICAgIGZpCisKK2ZpCisKKworCisgICAgaWYgdGVzdCAiJGd0X2N2X2hhdmVfZ2V0dGV4dCIgPSAieWVzIiA7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgRU5BQkxFX05MUyAxIiA+PmNvbmZkZWZzLmgKKworICAgIGZpCisKKyAgICAgICAgaWYgdGVzdCAiJFhHRVRURVhUIiAhPSAiOiI7IHRoZW4KKyAgICAgICAgICAgICAgICAgIGlmICRYR0VUVEVYVCAtLW9taXQtaGVhZGVyIC9kZXYvbnVsbCAyPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgOiA7CisgICAgICBlbHNlCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBmb3VuZCB4Z2V0dGV4dCBwcm9ncmFtIGlzIG5vdCBHTlUgeGdldHRleHQ7IGlnbm9yZSBpdCIgPiY1CiskYXNfZWNobyAiZm91bmQgeGdldHRleHQgcHJvZ3JhbSBpcyBub3QgR05VIHhnZXR0ZXh0OyBpZ25vcmUgaXQiID4mNjsgfQorICAgICAgICBYR0VUVEVYVD0iOiIKKyAgICAgIGZpCisgICAgZmkKKworICAgICMgV2UgbmVlZCB0byBwcm9jZXNzIHRoZSBwby8gZGlyZWN0b3J5LgorICAgIFBPU1VCPXBvCisKKyAgICBhY19jb25maWdfY29tbWFuZHM9IiRhY19jb25maWdfY29tbWFuZHMgZGVmYXVsdC0xIgorCisKKyAgICAgICAgICAgICAgICBmb3IgbGFuZyBpbiAkQUxMX0xJTkdVQVM7IGRvCisgICAgICBHTU9GSUxFUz0iJEdNT0ZJTEVTICRsYW5nLmdtbyIKKyAgICAgIFBPRklMRVM9IiRQT0ZJTEVTICRsYW5nLnBvIgorICAgIGRvbmUKKworCisKKworCisKKworCisKKworCisKKworICAgaWYgdGVzdCAiJGd0X2N2X2hhdmVfZ2V0dGV4dCIgPSAieWVzIjsgdGhlbgorICAgICBpZiB0ZXN0ICJ4JEFMTF9MSU5HVUFTIiA9ICJ4IjsgdGhlbgorICAgICAgIExJTkdVQVM9CisgICAgIGVsc2UKKyAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBjYXRhbG9ncyB0byBiZSBpbnN0YWxsZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGNhdGFsb2dzIHRvIGJlIGluc3RhbGxlZC4uLiAiID4mNjsgfQorICAgICAgIE5FV19MSU5HVUFTPQorICAgICAgIGZvciBwcmVzZW50bGFuZyBpbiAkQUxMX0xJTkdVQVM7IGRvCisgICAgICAgICB1c2VpdD1ubworICAgICAgICAgaWYgdGVzdCAiJVVOU0VUJSIgIT0gIiR7TElOR1VBUy0lVU5TRVQlfSI7IHRoZW4KKyAgICAgICAgICAgZGVzaXJlZGxhbmd1YWdlcz0iJExJTkdVQVMiCisgICAgICAgICBlbHNlCisgICAgICAgICAgIGRlc2lyZWRsYW5ndWFnZXM9IiRBTExfTElOR1VBUyIKKyAgICAgICAgIGZpCisgICAgICAgICBmb3IgZGVzaXJlZGxhbmcgaW4gJGRlc2lyZWRsYW5ndWFnZXM7IGRvCisgCSAgICMgVXNlIHRoZSBwcmVzZW50bGFuZyBjYXRhbG9nIGlmIGRlc2lyZWRsYW5nIGlzCisgICAgICAgICAgICMgICBhLiBlcXVhbCB0byBwcmVzZW50bGFuZywgb3IKKyAgICAgICAgICAgIyAgIGIuIGEgdmFyaWFudCBvZiBwcmVzZW50bGFuZyAoYmVjYXVzZSBpbiB0aGlzIGNhc2UsCisgICAgICAgICAgICMgICAgICBwcmVzZW50bGFuZyBjYW4gYmUgdXNlZCBhcyBhIGZhbGxiYWNrIGZvciBtZXNzYWdlcworICAgICAgICAgICAjICAgICAgd2hpY2ggYXJlIG5vdCB0cmFuc2xhdGVkIGluIHRoZSBkZXNpcmVkbGFuZyBjYXRhbG9nKS4KKyAgICAgICAgICAgY2FzZSAiJGRlc2lyZWRsYW5nIiBpbgorICAgICAgICAgICAgICIkcHJlc2VudGxhbmciKikgdXNlaXQ9eWVzOzsKKyAgICAgICAgICAgZXNhYworICAgICAgICAgZG9uZQorICAgICAgICAgaWYgdGVzdCAkdXNlaXQgPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgTkVXX0xJTkdVQVM9IiRORVdfTElOR1VBUyAkcHJlc2VudGxhbmciCisgICAgICAgICBmaQorICAgICAgIGRvbmUKKyAgICAgICBMSU5HVUFTPSRORVdfTElOR1VBUworICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTElOR1VBUyIgPiY1CiskYXNfZWNobyAiJExJTkdVQVMiID4mNjsgfQorICAgICBmaQorCisgICAgICAgICAgaWYgdGVzdCAtbiAiJExJTkdVQVMiOyB0aGVuCisgICAgICAgZm9yIGxhbmcgaW4gJExJTkdVQVM7IGRvIENBVEFMT0dTPSIkQ0FUQUxPR1MgJGxhbmckQ0FUT0JKRVhUIjsgZG9uZQorICAgICBmaQorICAgZmkKKworICAgICAgICAgICAgTUtJTlNUQUxMRElSUz0KKyAgIGlmIHRlc3QgLW4gIiRhY19hdXhfZGlyIjsgdGhlbgorICAgICBNS0lOU1RBTExESVJTPSIkYWNfYXV4X2Rpci9ta2luc3RhbGxkaXJzIgorICAgZmkKKyAgIGlmIHRlc3QgLXogIiRNS0lOU1RBTExESVJTIjsgdGhlbgorICAgICBNS0lOU1RBTExESVJTPSJcJCh0b3Bfc3JjZGlyKS9ta2luc3RhbGxkaXJzIgorICAgZmkKKworCisgICAgICAgICB0ZXN0IC1kIHBvIHx8IG1rZGlyIHBvCisgICBpZiB0ZXN0ICJ4JHNyY2RpciIgIT0gInguIjsgdGhlbgorICAgICBpZiB0ZXN0ICJ4YGVjaG8gJHNyY2RpciB8IHNlZCAnc0AvLipAQCdgIiA9ICJ4IjsgdGhlbgorICAgICAgIHBvc3JjcHJlZml4PSIkc3JjZGlyLyIKKyAgICAgZWxzZQorICAgICAgIHBvc3JjcHJlZml4PSIuLi8kc3JjZGlyLyIKKyAgICAgZmkKKyAgIGVsc2UKKyAgICAgcG9zcmNwcmVmaXg9Ii4uLyIKKyAgIGZpCisgICBybSAtZiBwby9QT1RGSUxFUworICAgc2VkIC1lICIvXiMvZCIgLWUgIi9eXCQvZCIgLWUgInMsLiosCSRwb3NyY3ByZWZpeCYgXFxcXCwiIC1lICJcJHMvXCguKlwpIFxcXFwvXDEvIiBcCisJPCAkc3JjZGlyL3BvL1BPVEZJTEVTLmluID4gcG8vUE9URklMRVMKKworCithdmFoaWxvY2FsZWRpcj0nJHtwcmVmaXh9LyR7REFUQURJUk5BTUV9L2xvY2FsZScKKworCisjIENoZWNrIGZvciBwa2ctY29uZmlnIG1hbnVhbGx5IGZpcnN0LCBhcyBpZiBpdHMgbm90IGluc3RhbGxlZCB0aGUKKyMgUEtHX1BST0dfUEtHX0NPTkZJRyBtYWNybyB3b24ndCBiZSBkZWZpbmVkLgorIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJwa2ctY29uZmlnIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBwa2ctY29uZmlnOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19oYXZlX3BrZ19jb25maWcrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkaGF2ZV9wa2dfY29uZmlnIjsgdGhlbgorICBhY19jdl9wcm9nX2hhdmVfcGtnX2NvbmZpZz0iJGhhdmVfcGtnX2NvbmZpZyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2hhdmVfcGtnX2NvbmZpZz0ieWVzIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIHRlc3QgLXogIiRhY19jdl9wcm9nX2hhdmVfcGtnX2NvbmZpZyIgJiYgYWNfY3ZfcHJvZ19oYXZlX3BrZ19jb25maWc9Im5vIgorZmkKK2ZpCitoYXZlX3BrZ19jb25maWc9JGFjX2N2X3Byb2dfaGF2ZV9wa2dfY29uZmlnCitpZiB0ZXN0IC1uICIkaGF2ZV9wa2dfY29uZmlnIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGhhdmVfcGtnX2NvbmZpZyIgPiY1CiskYXNfZWNobyAiJGhhdmVfcGtnX2NvbmZpZyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisKK2lmIHRlc3QgeCIkaGF2ZV9wa2dfY29uZmlnIiA9ICJ4bm8iOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gInBrZy1jb25maWcgaXMgcmVxdWlyZWQgdG8gaW5zdGFsbCB0aGlzIHByb2dyYW0iICIkTElORU5PIiA1CitmaQorCisKKworCisKKworCitpZiB0ZXN0ICJ4JGFjX2N2X2Vudl9QS0dfQ09ORklHX3NldCIgIT0gInhzZXQiOyB0aGVuCisJaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9cGtnLWNvbmZpZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1wa2ctY29uZmlnOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9QS0dfQ09ORklHKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkUEtHX0NPTkZJRyBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9QS0dfQ09ORklHPSIkUEtHX0NPTkZJRyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfUEtHX0NPTkZJRz0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICA7OworZXNhYworZmkKK1BLR19DT05GSUc9JGFjX2N2X3BhdGhfUEtHX0NPTkZJRworaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkUEtHX0NPTkZJRyIgPiY1CiskYXNfZWNobyAiJFBLR19DT05GSUciID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wYXRoX1BLR19DT05GSUciOyB0aGVuCisgIGFjX3B0X1BLR19DT05GSUc9JFBLR19DT05GSUcKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJwa2ctY29uZmlnIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBwa2ctY29uZmlnOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9hY19wdF9QS0dfQ09ORklHKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkYWNfcHRfUEtHX0NPTkZJRyBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9hY19wdF9QS0dfQ09ORklHPSIkYWNfcHRfUEtHX0NPTkZJRyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfYWNfcHRfUEtHX0NPTkZJRz0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICA7OworZXNhYworZmkKK2FjX3B0X1BLR19DT05GSUc9JGFjX2N2X3BhdGhfYWNfcHRfUEtHX0NPTkZJRworaWYgdGVzdCAtbiAiJGFjX3B0X1BLR19DT05GSUciOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcHRfUEtHX0NPTkZJRyIgPiY1CiskYXNfZWNobyAiJGFjX3B0X1BLR19DT05GSUciID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19wdF9QS0dfQ09ORklHIiA9IHg7IHRoZW4KKyAgICBQS0dfQ09ORklHPSIiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgUEtHX0NPTkZJRz0kYWNfcHRfUEtHX0NPTkZJRworICBmaQorZWxzZQorICBQS0dfQ09ORklHPSIkYWNfY3ZfcGF0aF9QS0dfQ09ORklHIgorZmkKKworZmkKK2lmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgorCV9wa2dfbWluX3ZlcnNpb249MC45LjAKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHBrZy1jb25maWcgaXMgYXQgbGVhc3QgdmVyc2lvbiAkX3BrZ19taW5fdmVyc2lvbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBwa2ctY29uZmlnIGlzIGF0IGxlYXN0IHZlcnNpb24gJF9wa2dfbWluX3ZlcnNpb24uLi4gIiA+JjY7IH0KKwlpZiAkUEtHX0NPTkZJRyAtLWF0bGVhc3QtcGtnY29uZmlnLXZlcnNpb24gJF9wa2dfbWluX3ZlcnNpb247IHRoZW4KKwkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKwllbHNlCisJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCQlQS0dfQ09ORklHPSIiCisJZmkKK2ZpCisKKyMKKyMgQ2hlY2sgZm9yIEdMSUIgMi4wCisjCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZ2xpYiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9nbGliK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfZ2xpYjsgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorICAgICAgICAgICAgICAgIHllcykgSEFWRV9HTElCPXllcyA7OworICAgICAgICAgICAgICAgIG5vKSAgSEFWRV9HTElCPW5vIDs7CisgICAgICAgICAgICAgICAgKikgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLWdsaWIiICIkTElORU5PIiA1IDs7CisgICAgICAgIGVzYWMKK2Vsc2UKKyAgSEFWRV9HTElCPXllcworZmkKKworCitpZiB0ZXN0ICJ4JEhBVkVfR0xJQiIgPSAieHllcyIgOyB0aGVuCisKK3BrZ19mYWlsZWQ9bm8KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEdMSUIyMCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgR0xJQjIwLi4uICIgPiY2OyB9CisKK2lmIHRlc3QgLW4gIiRHTElCMjBfQ0ZMQUdTIjsgdGhlbgorICAgIHBrZ19jdl9HTElCMjBfQ0ZMQUdTPSIkR0xJQjIwX0NGTEFHUyIKKyBlbGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgorICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCisgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcIiBnbGliLTIuMCA+PSAyLjQuMCBcIiI7IH0gPiY1CisgICgkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAiIGdsaWItMi4wID49IDIuNC4wICIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCisgIHBrZ19jdl9HTElCMjBfQ0ZMQUdTPWAkUEtHX0NPTkZJRyAtLWNmbGFncyAiIGdsaWItMi4wID49IDIuNC4wICIgMj4vZGV2L251bGxgCitlbHNlCisgIHBrZ19mYWlsZWQ9eWVzCitmaQorIGVsc2UKKyAgICBwa2dfZmFpbGVkPXVudHJpZWQKK2ZpCitpZiB0ZXN0IC1uICIkR0xJQjIwX0xJQlMiOyB0aGVuCisgICAgcGtnX2N2X0dMSUIyMF9MSUJTPSIkR0xJQjIwX0xJQlMiCisgZWxpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KKyAgICBpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgXAorICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgXCIgZ2xpYi0yLjAgPj0gMi40LjAgXCIiOyB9ID4mNQorICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgIiBnbGliLTIuMCA+PSAyLjQuMCAiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICBwa2dfY3ZfR0xJQjIwX0xJQlM9YCRQS0dfQ09ORklHIC0tbGlicyAiIGdsaWItMi4wID49IDIuNC4wICIgMj4vZGV2L251bGxgCitlbHNlCisgIHBrZ19mYWlsZWQ9eWVzCitmaQorIGVsc2UKKyAgICBwa2dfZmFpbGVkPXVudHJpZWQKK2ZpCisKKworCitpZiB0ZXN0ICRwa2dfZmFpbGVkID0geWVzOyB0aGVuCisgICAJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisKK2lmICRQS0dfQ09ORklHIC0tYXRsZWFzdC1wa2djb25maWctdmVyc2lvbiAwLjIwOyB0aGVuCisgICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD15ZXMKK2Vsc2UKKyAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPW5vCitmaQorICAgICAgICBpZiB0ZXN0ICRfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQgPSB5ZXM7IHRoZW4KKwkgICAgICAgIEdMSUIyMF9QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLXNob3J0LWVycm9ycyAtLXByaW50LWVycm9ycyAiIGdsaWItMi4wID49IDIuNC4wICIgMj4mMWAKKyAgICAgICAgZWxzZQorCSAgICAgICAgR0xJQjIwX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tcHJpbnQtZXJyb3JzICIgZ2xpYi0yLjAgPj0gMi40LjAgIiAyPiYxYAorICAgICAgICBmaQorCSMgUHV0IHRoZSBuYXN0eSBlcnJvciBtZXNzYWdlIGluIGNvbmZpZy5sb2cgd2hlcmUgaXQgYmVsb25ncworCWVjaG8gIiRHTElCMjBfUEtHX0VSUk9SUyIgPiY1CisKKwlhc19mbl9lcnJvciAkPyAiUGFja2FnZSByZXF1aXJlbWVudHMgKCBnbGliLTIuMCA+PSAyLjQuMCApIHdlcmUgbm90IG1ldDoKKworJEdMSUIyMF9QS0dfRVJST1JTCisKK0NvbnNpZGVyIGFkanVzdGluZyB0aGUgUEtHX0NPTkZJR19QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlIGlmIHlvdQoraW5zdGFsbGVkIHNvZnR3YXJlIGluIGEgbm9uLXN0YW5kYXJkIHByZWZpeC4KKworQWx0ZXJuYXRpdmVseSwgeW91IG1heSBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBHTElCMjBfQ0ZMQUdTCithbmQgR0xJQjIwX0xJQlMgdG8gYXZvaWQgdGhlIG5lZWQgdG8gY2FsbCBwa2ctY29uZmlnLgorU2VlIHRoZSBwa2ctY29uZmlnIG1hbiBwYWdlIGZvciBtb3JlIGRldGFpbHMuIiAiJExJTkVOTyIgNQorCitlbGlmIHRlc3QgJHBrZ19mYWlsZWQgPSB1bnRyaWVkOyB0aGVuCisgICAgIAl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKwl7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJUaGUgcGtnLWNvbmZpZyBzY3JpcHQgY291bGQgbm90IGJlIGZvdW5kIG9yIGlzIHRvbyBvbGQuICBNYWtlIHN1cmUgaXQKK2lzIGluIHlvdXIgUEFUSCBvciBzZXQgdGhlIFBLR19DT05GSUcgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIGZ1bGwKK3BhdGggdG8gcGtnLWNvbmZpZy4KKworQWx0ZXJuYXRpdmVseSwgeW91IG1heSBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBHTElCMjBfQ0ZMQUdTCithbmQgR0xJQjIwX0xJQlMgdG8gYXZvaWQgdGhlIG5lZWQgdG8gY2FsbCBwa2ctY29uZmlnLgorU2VlIHRoZSBwa2ctY29uZmlnIG1hbiBwYWdlIGZvciBtb3JlIGRldGFpbHMuCisKK1RvIGdldCBwa2ctY29uZmlnLCBzZWUgPGh0dHA6Ly9wa2ctY29uZmlnLmZyZWVkZXNrdG9wLm9yZy8+LgorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KKworZWxzZQorCUdMSUIyMF9DRkxBR1M9JHBrZ19jdl9HTElCMjBfQ0ZMQUdTCisJR0xJQjIwX0xJQlM9JHBrZ19jdl9HTElCMjBfTElCUworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCitmaQorCisKK2ZpCisgaWYgdGVzdCAieCRIQVZFX0dMSUIiID0gInh5ZXMiOyB0aGVuCisgIEhBVkVfR0xJQl9UUlVFPQorICBIQVZFX0dMSUJfRkFMU0U9JyMnCitlbHNlCisgIEhBVkVfR0xJQl9UUlVFPScjJworICBIQVZFX0dMSUJfRkFMU0U9CitmaQorCisKKyMKKyMgQ2hlY2sgZm9yIEdMSUIncyBnb2JqZWN0IDIuMAorIworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWdvYmplY3Qgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZ29iamVjdCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2dvYmplY3Q7IGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKyAgICAgICAgICAgICAgICB5ZXMpIEhBVkVfR09CSkVDVD15ZXMgOzsKKyAgICAgICAgICAgICAgICBubykgIEhBVkVfR09CSkVDVD1ubyA7OworICAgICAgICAgICAgICAgICopIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1nb2JqZWN0IiAiJExJTkVOTyIgNSA7OworICAgICAgICBlc2FjCitlbHNlCisgIEhBVkVfR09CSkVDVD15ZXMKK2ZpCisKKworaWYgdGVzdCAieCRIQVZFX0dPQkpFQ1QiID0gInh5ZXMiIDsgdGhlbgorCitwa2dfZmFpbGVkPW5vCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBHT0JKRUNUIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBHT0JKRUNULi4uICIgPiY2OyB9CisKK2lmIHRlc3QgLW4gIiRHT0JKRUNUX0NGTEFHUyI7IHRoZW4KKyAgICBwa2dfY3ZfR09CSkVDVF9DRkxBR1M9IiRHT0JKRUNUX0NGTEFHUyIKKyBlbGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgorICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCisgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcIiBnbGliLTIuMCA+PSAyLjQuMCBnb2JqZWN0LTIuMCBcIiI7IH0gPiY1CisgICgkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAiIGdsaWItMi4wID49IDIuNC4wIGdvYmplY3QtMi4wICIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCisgIHBrZ19jdl9HT0JKRUNUX0NGTEFHUz1gJFBLR19DT05GSUcgLS1jZmxhZ3MgIiBnbGliLTIuMCA+PSAyLjQuMCBnb2JqZWN0LTIuMCAiIDI+L2Rldi9udWxsYAorZWxzZQorICBwa2dfZmFpbGVkPXllcworZmkKKyBlbHNlCisgICAgcGtnX2ZhaWxlZD11bnRyaWVkCitmaQoraWYgdGVzdCAtbiAiJEdPQkpFQ1RfTElCUyI7IHRoZW4KKyAgICBwa2dfY3ZfR09CSkVDVF9MSUJTPSIkR09CSkVDVF9MSUJTIgorIGVsaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCisgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKKyAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiIGdsaWItMi4wID49IDIuNC4wIGdvYmplY3QtMi4wIFwiIjsgfSA+JjUKKyAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICIgZ2xpYi0yLjAgPj0gMi40LjAgZ29iamVjdC0yLjAgIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgcGtnX2N2X0dPQkpFQ1RfTElCUz1gJFBLR19DT05GSUcgLS1saWJzICIgZ2xpYi0yLjAgPj0gMi40LjAgZ29iamVjdC0yLjAgIiAyPi9kZXYvbnVsbGAKK2Vsc2UKKyAgcGtnX2ZhaWxlZD15ZXMKK2ZpCisgZWxzZQorICAgIHBrZ19mYWlsZWQ9dW50cmllZAorZmkKKworCisKK2lmIHRlc3QgJHBrZ19mYWlsZWQgPSB5ZXM7IHRoZW4KKyAgIAl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKworaWYgJFBLR19DT05GSUcgLS1hdGxlYXN0LXBrZ2NvbmZpZy12ZXJzaW9uIDAuMjA7IHRoZW4KKyAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPXllcworZWxzZQorICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9bm8KK2ZpCisgICAgICAgIGlmIHRlc3QgJF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZCA9IHllczsgdGhlbgorCSAgICAgICAgR09CSkVDVF9QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLXNob3J0LWVycm9ycyAtLXByaW50LWVycm9ycyAiIGdsaWItMi4wID49IDIuNC4wIGdvYmplY3QtMi4wICIgMj4mMWAKKyAgICAgICAgZWxzZQorCSAgICAgICAgR09CSkVDVF9QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLXByaW50LWVycm9ycyAiIGdsaWItMi4wID49IDIuNC4wIGdvYmplY3QtMi4wICIgMj4mMWAKKyAgICAgICAgZmkKKwkjIFB1dCB0aGUgbmFzdHkgZXJyb3IgbWVzc2FnZSBpbiBjb25maWcubG9nIHdoZXJlIGl0IGJlbG9uZ3MKKwllY2hvICIkR09CSkVDVF9QS0dfRVJST1JTIiA+JjUKKworCWFzX2ZuX2Vycm9yICQ/ICJQYWNrYWdlIHJlcXVpcmVtZW50cyAoIGdsaWItMi4wID49IDIuNC4wIGdvYmplY3QtMi4wICkgd2VyZSBub3QgbWV0OgorCiskR09CSkVDVF9QS0dfRVJST1JTCisKK0NvbnNpZGVyIGFkanVzdGluZyB0aGUgUEtHX0NPTkZJR19QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlIGlmIHlvdQoraW5zdGFsbGVkIHNvZnR3YXJlIGluIGEgbm9uLXN0YW5kYXJkIHByZWZpeC4KKworQWx0ZXJuYXRpdmVseSwgeW91IG1heSBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBHT0JKRUNUX0NGTEFHUworYW5kIEdPQkpFQ1RfTElCUyB0byBhdm9pZCB0aGUgbmVlZCB0byBjYWxsIHBrZy1jb25maWcuCitTZWUgdGhlIHBrZy1jb25maWcgbWFuIHBhZ2UgZm9yIG1vcmUgZGV0YWlscy4iICIkTElORU5PIiA1CisKK2VsaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHVudHJpZWQ7IHRoZW4KKyAgICAgCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCXsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgJD8gIlRoZSBwa2ctY29uZmlnIHNjcmlwdCBjb3VsZCBub3QgYmUgZm91bmQgb3IgaXMgdG9vIG9sZC4gIE1ha2Ugc3VyZSBpdAoraXMgaW4geW91ciBQQVRIIG9yIHNldCB0aGUgUEtHX0NPTkZJRyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUgZnVsbAorcGF0aCB0byBwa2ctY29uZmlnLgorCitBbHRlcm5hdGl2ZWx5LCB5b3UgbWF5IHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIEdPQkpFQ1RfQ0ZMQUdTCithbmQgR09CSkVDVF9MSUJTIHRvIGF2b2lkIHRoZSBuZWVkIHRvIGNhbGwgcGtnLWNvbmZpZy4KK1NlZSB0aGUgcGtnLWNvbmZpZyBtYW4gcGFnZSBmb3IgbW9yZSBkZXRhaWxzLgorCitUbyBnZXQgcGtnLWNvbmZpZywgc2VlIDxodHRwOi8vcGtnLWNvbmZpZy5mcmVlZGVza3RvcC5vcmcvPi4KK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CisKK2Vsc2UKKwlHT0JKRUNUX0NGTEFHUz0kcGtnX2N2X0dPQkpFQ1RfQ0ZMQUdTCisJR09CSkVDVF9MSUJTPSRwa2dfY3ZfR09CSkVDVF9MSUJTCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKK2ZpCisKKworZmkKKyBpZiB0ZXN0ICJ4JEhBVkVfR09CSkVDVCIgPSAieHllcyI7IHRoZW4KKyAgSEFWRV9HT0JKRUNUX1RSVUU9CisgIEhBVkVfR09CSkVDVF9GQUxTRT0nIycKK2Vsc2UKKyAgSEFWRV9HT0JKRUNUX1RSVUU9JyMnCisgIEhBVkVfR09CSkVDVF9GQUxTRT0KK2ZpCisKKworIworIyBJbnRyb3NwZWN0aW9uIHN1cHBvcnQuCisjCisKKworCisgICAgICAgICAgICAgICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWludHJvc3BlY3Rpb24gd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfaW50cm9zcGVjdGlvbitzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2ludHJvc3BlY3Rpb247CitlbHNlCisgIGVuYWJsZV9pbnRyb3NwZWN0aW9uPWF1dG8KK2ZpCisKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGdvYmplY3QtaW50cm9zcGVjdGlvbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZ29iamVjdC1pbnRyb3NwZWN0aW9uLi4uICIgPiY2OyB9CisKKyAgICAgICAgY2FzZSAkZW5hYmxlX2ludHJvc3BlY3Rpb24gaW4gIygKKyAgbm8pIDoKKyAgICAgICAgICAgIGZvdW5kX2ludHJvc3BlY3Rpb249Im5vIChkaXNhYmxlZCwgdXNlIC0tZW5hYmxlLWludHJvc3BlY3Rpb24gdG8gZW5hYmxlKSIKKyAgICAgOzsgIygKKyAgICAgIHllcykgOgorICAgICAgICAgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKKyAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMFwiIjsgfSA+JjUKKyAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICJnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgOgorZWxzZQorICBhc19mbl9lcnJvciAkPyAiZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMCBpcyBub3QgaW5zdGFsbGVkIiAiJExJTkVOTyIgNQorZmkKKyAgICAgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKKyAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMCA+PSAwLjkuNVwiIjsgfSA+JjUKKyAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICJnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wID49IDAuOS41IikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgZm91bmRfaW50cm9zcGVjdGlvbj15ZXMKK2Vsc2UKKyAgYXNfZm5fZXJyb3IgJD8gIllvdSBuZWVkIHRvIGhhdmUgZ29iamVjdC1pbnRyb3NwZWN0aW9uID49IDAuOS41IGluc3RhbGxlZCB0byBidWlsZCBhdmFoaSIgIiRMSU5FTk8iIDUKK2ZpCisgICAgIDs7ICMoCisgICAgICBhdXRvKSA6CisgICAgICAgICAgICBpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgXAorICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgXCJnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wID49IDAuOS41XCIiOyB9ID4mNQorICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgImdvYmplY3QtaW50cm9zcGVjdGlvbi0xLjAgPj0gMC45LjUiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICBmb3VuZF9pbnRyb3NwZWN0aW9uPXllcworZWxzZQorICBmb3VuZF9pbnRyb3NwZWN0aW9uPW5vCitmaQorICAgICA7OyAjKAorICAqKSA6CisgICAgICAgICAgICAgICAgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIC0tZW5hYmxlLWludHJvc3BlY3Rpb24sIHNob3VsZCBiZSBvbmUgb2YgW25vL2F1dG8veWVzXSIgIiRMSU5FTk8iIDUKKyAgICAgOzsKK2VzYWMKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGZvdW5kX2ludHJvc3BlY3Rpb24iID4mNQorJGFzX2VjaG8gIiRmb3VuZF9pbnRyb3NwZWN0aW9uIiA+JjY7IH0KKworICAgIElOVFJPU1BFQ1RJT05fU0NBTk5FUj0KKyAgICBJTlRST1NQRUNUSU9OX0NPTVBJTEVSPQorICAgIElOVFJPU1BFQ1RJT05fR0VORVJBVEU9CisgICAgSU5UUk9TUEVDVElPTl9HSVJESVI9CisgICAgSU5UUk9TUEVDVElPTl9UWVBFTElCRElSPQorICAgIGlmIHRlc3QgIngkZm91bmRfaW50cm9zcGVjdGlvbiIgPSAieHllcyI7IHRoZW4KKyAgICAgICBJTlRST1NQRUNUSU9OX1NDQU5ORVI9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9Z19pcl9zY2FubmVyIGdvYmplY3QtaW50cm9zcGVjdGlvbi0xLjBgCisgICAgICAgSU5UUk9TUEVDVElPTl9DT01QSUxFUj1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1nX2lyX2NvbXBpbGVyIGdvYmplY3QtaW50cm9zcGVjdGlvbi0xLjBgCisgICAgICAgSU5UUk9TUEVDVElPTl9HRU5FUkFURT1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1nX2lyX2dlbmVyYXRlIGdvYmplY3QtaW50cm9zcGVjdGlvbi0xLjBgCisgICAgICAgSU5UUk9TUEVDVElPTl9HSVJESVI9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9Z2lyZGlyIGdvYmplY3QtaW50cm9zcGVjdGlvbi0xLjBgCisgICAgICAgSU5UUk9TUEVDVElPTl9UWVBFTElCRElSPSIkKCRQS0dfQ09ORklHIC0tdmFyaWFibGU9dHlwZWxpYmRpciBnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wKSIKKyAgICAgICBJTlRST1NQRUNUSU9OX0NGTEFHUz1gJFBLR19DT05GSUcgLS1jZmxhZ3MgZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMGAKKyAgICAgICBJTlRST1NQRUNUSU9OX0xJQlM9YCRQS0dfQ09ORklHIC0tbGlicyBnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wYAorICAgICAgIElOVFJPU1BFQ1RJT05fTUFLRUZJTEU9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9ZGF0YWRpciBnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wYC9nb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wL01ha2VmaWxlLmludHJvc3BlY3Rpb24KKyAgICBmaQorCisKKworCisKKworCisKKworICAgICBpZiB0ZXN0ICJ4JGZvdW5kX2ludHJvc3BlY3Rpb24iID0gInh5ZXMiOyB0aGVuCisgIEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFPQorICBIQVZFX0lOVFJPU1BFQ1RJT05fRkFMU0U9JyMnCitlbHNlCisgIEhBVkVfSU5UUk9TUEVDVElPTl9UUlVFPScjJworICBIQVZFX0lOVFJPU1BFQ1RJT05fRkFMU0U9CitmaQorCisKKworCisjCisjIENoZWNrIGZvciBRdCAzCisjCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcXQzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3F0MytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3F0MzsgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorICAgICAgICAgICAgICAgIHllcykgSEFWRV9RVDM9eWVzIDs7CisgICAgICAgICAgICAgICAgbm8pICBIQVZFX1FUMz1ubyA7OworICAgICAgICAgICAgICAgICopIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1xdDMiICIkTElORU5PIiA1IDs7CisgICAgICAgIGVzYWMKK2Vsc2UKKyAgSEFWRV9RVDM9eWVzCitmaQorCisKK2lmIHRlc3QgIngkSEFWRV9RVDMiID0gInh5ZXMiIDsgdGhlbgorCitwa2dfZmFpbGVkPW5vCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBRVDMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIFFUMy4uLiAiID4mNjsgfQorCitpZiB0ZXN0IC1uICIkUVQzX0NGTEFHUyI7IHRoZW4KKyAgICBwa2dfY3ZfUVQzX0NGTEFHUz0iJFFUM19DRkxBR1MiCisgZWxpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KKyAgICBpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgXAorICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgXCIgcXQtbXQgPj0gMy4wLjAgXCIiOyB9ID4mNQorICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgIiBxdC1tdCA+PSAzLjAuMCAiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICBwa2dfY3ZfUVQzX0NGTEFHUz1gJFBLR19DT05GSUcgLS1jZmxhZ3MgIiBxdC1tdCA+PSAzLjAuMCAiIDI+L2Rldi9udWxsYAorZWxzZQorICBwa2dfZmFpbGVkPXllcworZmkKKyBlbHNlCisgICAgcGtnX2ZhaWxlZD11bnRyaWVkCitmaQoraWYgdGVzdCAtbiAiJFFUM19MSUJTIjsgdGhlbgorICAgIHBrZ19jdl9RVDNfTElCUz0iJFFUM19MSUJTIgorIGVsaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCisgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKKyAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiIHF0LW10ID49IDMuMC4wIFwiIjsgfSA+JjUKKyAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICIgcXQtbXQgPj0gMy4wLjAgIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgcGtnX2N2X1FUM19MSUJTPWAkUEtHX0NPTkZJRyAtLWxpYnMgIiBxdC1tdCA+PSAzLjAuMCAiIDI+L2Rldi9udWxsYAorZWxzZQorICBwa2dfZmFpbGVkPXllcworZmkKKyBlbHNlCisgICAgcGtnX2ZhaWxlZD11bnRyaWVkCitmaQorCisKKworaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHllczsgdGhlbgorICAgCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCitpZiAkUEtHX0NPTkZJRyAtLWF0bGVhc3QtcGtnY29uZmlnLXZlcnNpb24gMC4yMDsgdGhlbgorICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9eWVzCitlbHNlCisgICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD1ubworZmkKKyAgICAgICAgaWYgdGVzdCAkX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkID0geWVzOyB0aGVuCisJICAgICAgICBRVDNfUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1zaG9ydC1lcnJvcnMgLS1wcmludC1lcnJvcnMgIiBxdC1tdCA+PSAzLjAuMCAiIDI+JjFgCisgICAgICAgIGVsc2UKKwkgICAgICAgIFFUM19QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLXByaW50LWVycm9ycyAiIHF0LW10ID49IDMuMC4wICIgMj4mMWAKKyAgICAgICAgZmkKKwkjIFB1dCB0aGUgbmFzdHkgZXJyb3IgbWVzc2FnZSBpbiBjb25maWcubG9nIHdoZXJlIGl0IGJlbG9uZ3MKKwllY2hvICIkUVQzX1BLR19FUlJPUlMiID4mNQorCisJYXNfZm5fZXJyb3IgJD8gIlBhY2thZ2UgcmVxdWlyZW1lbnRzICggcXQtbXQgPj0gMy4wLjAgKSB3ZXJlIG5vdCBtZXQ6CisKKyRRVDNfUEtHX0VSUk9SUworCitDb25zaWRlciBhZGp1c3RpbmcgdGhlIFBLR19DT05GSUdfUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpZiB5b3UKK2luc3RhbGxlZCBzb2Z0d2FyZSBpbiBhIG5vbi1zdGFuZGFyZCBwcmVmaXguCisKK0FsdGVybmF0aXZlbHksIHlvdSBtYXkgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgUVQzX0NGTEFHUworYW5kIFFUM19MSUJTIHRvIGF2b2lkIHRoZSBuZWVkIHRvIGNhbGwgcGtnLWNvbmZpZy4KK1NlZSB0aGUgcGtnLWNvbmZpZyBtYW4gcGFnZSBmb3IgbW9yZSBkZXRhaWxzLiIgIiRMSU5FTk8iIDUKKworZWxpZiB0ZXN0ICRwa2dfZmFpbGVkID0gdW50cmllZDsgdGhlbgorICAgICAJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisJeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAiVGhlIHBrZy1jb25maWcgc2NyaXB0IGNvdWxkIG5vdCBiZSBmb3VuZCBvciBpcyB0b28gb2xkLiAgTWFrZSBzdXJlIGl0CitpcyBpbiB5b3VyIFBBVEggb3Igc2V0IHRoZSBQS0dfQ09ORklHIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHRoZSBmdWxsCitwYXRoIHRvIHBrZy1jb25maWcuCisKK0FsdGVybmF0aXZlbHksIHlvdSBtYXkgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgUVQzX0NGTEFHUworYW5kIFFUM19MSUJTIHRvIGF2b2lkIHRoZSBuZWVkIHRvIGNhbGwgcGtnLWNvbmZpZy4KK1NlZSB0aGUgcGtnLWNvbmZpZyBtYW4gcGFnZSBmb3IgbW9yZSBkZXRhaWxzLgorCitUbyBnZXQgcGtnLWNvbmZpZywgc2VlIDxodHRwOi8vcGtnLWNvbmZpZy5mcmVlZGVza3RvcC5vcmcvPi4KK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CisKK2Vsc2UKKwlRVDNfQ0ZMQUdTPSRwa2dfY3ZfUVQzX0NGTEFHUworCVFUM19MSUJTPSRwa2dfY3ZfUVQzX0xJQlMKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworZmkKKworCisJICAgIFFUM19QUkVGSVg9ImAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXByZWZpeCBxdC1tdGAvYmluIgorICAgICAgICBmb3IgYWNfcHJvZyBpbiBtb2MtcXQzIG1vYworZG8KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX01PQ19RVDMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRNT0NfUVQzIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX01PQ19RVDM9IiRNT0NfUVQzIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUVQzX1BSRUZJWAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcGF0aF9NT0NfUVQzPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIDs7Citlc2FjCitmaQorTU9DX1FUMz0kYWNfY3ZfcGF0aF9NT0NfUVQzCitpZiB0ZXN0IC1uICIkTU9DX1FUMyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNT0NfUVQzIiA+JjUKKyRhc19lY2hvICIkTU9DX1FUMyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgIHRlc3QgLW4gIiRNT0NfUVQzIiAmJiBicmVhaworZG9uZQordGVzdCAtbiAiJE1PQ19RVDMiIHx8IE1PQ19RVDM9Im5vIgorCisgICAgICAgIGlmIHRlc3QgIiRNT0NfUVQzIiA9IG5vOyB0aGVuCisgICAgICAgICAgICBhc19mbl9lcnJvciAkPyAiQ291bGQgbm90IGZpbmQgUVQzIG1vYyIgIiRMSU5FTk8iIDUKKyAgICAgICAgZmkKKworZmkKKyBpZiB0ZXN0ICJ4JEhBVkVfUVQzIiA9ICJ4eWVzIjsgdGhlbgorICBIQVZFX1FUM19UUlVFPQorICBIQVZFX1FUM19GQUxTRT0nIycKK2Vsc2UKKyAgSEFWRV9RVDNfVFJVRT0nIycKKyAgSEFWRV9RVDNfRkFMU0U9CitmaQorCisKKyMKKyMgQ2hlY2sgZm9yIFF0IDQKKyMKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1xdDQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfcXQ0K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfcXQ0OyBjYXNlICIke2VuYWJsZXZhbH0iIGluCisgICAgICAgICAgICAgICAgeWVzKSBIQVZFX1FUND15ZXMgOzsKKyAgICAgICAgICAgICAgICBubykgIEhBVkVfUVQ0PW5vIDs7CisgICAgICAgICAgICAgICAgKikgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLXF0NCIgIiRMSU5FTk8iIDUgOzsKKyAgICAgICAgZXNhYworZWxzZQorICBIQVZFX1FUND15ZXMKK2ZpCisKKworaWYgdGVzdCAieCRIQVZFX1FUNCIgPSAieHllcyIgOyB0aGVuCisKK3BrZ19mYWlsZWQ9bm8KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIFFUNCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgUVQ0Li4uICIgPiY2OyB9CisKK2lmIHRlc3QgLW4gIiRRVDRfQ0ZMQUdTIjsgdGhlbgorICAgIHBrZ19jdl9RVDRfQ0ZMQUdTPSIkUVQ0X0NGTEFHUyIKKyBlbGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgorICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCisgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcIiBRdENvcmUgPj0gNC4wLjAgXCIiOyB9ID4mNQorICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgIiBRdENvcmUgPj0gNC4wLjAgIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgcGtnX2N2X1FUNF9DRkxBR1M9YCRQS0dfQ09ORklHIC0tY2ZsYWdzICIgUXRDb3JlID49IDQuMC4wICIgMj4vZGV2L251bGxgCitlbHNlCisgIHBrZ19mYWlsZWQ9eWVzCitmaQorIGVsc2UKKyAgICBwa2dfZmFpbGVkPXVudHJpZWQKK2ZpCitpZiB0ZXN0IC1uICIkUVQ0X0xJQlMiOyB0aGVuCisgICAgcGtnX2N2X1FUNF9MSUJTPSIkUVQ0X0xJQlMiCisgZWxpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KKyAgICBpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgXAorICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgXCIgUXRDb3JlID49IDQuMC4wIFwiIjsgfSA+JjUKKyAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICIgUXRDb3JlID49IDQuMC4wICIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCisgIHBrZ19jdl9RVDRfTElCUz1gJFBLR19DT05GSUcgLS1saWJzICIgUXRDb3JlID49IDQuMC4wICIgMj4vZGV2L251bGxgCitlbHNlCisgIHBrZ19mYWlsZWQ9eWVzCitmaQorIGVsc2UKKyAgICBwa2dfZmFpbGVkPXVudHJpZWQKK2ZpCisKKworCitpZiB0ZXN0ICRwa2dfZmFpbGVkID0geWVzOyB0aGVuCisgICAJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisKK2lmICRQS0dfQ09ORklHIC0tYXRsZWFzdC1wa2djb25maWctdmVyc2lvbiAwLjIwOyB0aGVuCisgICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD15ZXMKK2Vsc2UKKyAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPW5vCitmaQorICAgICAgICBpZiB0ZXN0ICRfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQgPSB5ZXM7IHRoZW4KKwkgICAgICAgIFFUNF9QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLXNob3J0LWVycm9ycyAtLXByaW50LWVycm9ycyAiIFF0Q29yZSA+PSA0LjAuMCAiIDI+JjFgCisgICAgICAgIGVsc2UKKwkgICAgICAgIFFUNF9QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLXByaW50LWVycm9ycyAiIFF0Q29yZSA+PSA0LjAuMCAiIDI+JjFgCisgICAgICAgIGZpCisJIyBQdXQgdGhlIG5hc3R5IGVycm9yIG1lc3NhZ2UgaW4gY29uZmlnLmxvZyB3aGVyZSBpdCBiZWxvbmdzCisJZWNobyAiJFFUNF9QS0dfRVJST1JTIiA+JjUKKworCWFzX2ZuX2Vycm9yICQ/ICJQYWNrYWdlIHJlcXVpcmVtZW50cyAoIFF0Q29yZSA+PSA0LjAuMCApIHdlcmUgbm90IG1ldDoKKworJFFUNF9QS0dfRVJST1JTCisKK0NvbnNpZGVyIGFkanVzdGluZyB0aGUgUEtHX0NPTkZJR19QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlIGlmIHlvdQoraW5zdGFsbGVkIHNvZnR3YXJlIGluIGEgbm9uLXN0YW5kYXJkIHByZWZpeC4KKworQWx0ZXJuYXRpdmVseSwgeW91IG1heSBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBRVDRfQ0ZMQUdTCithbmQgUVQ0X0xJQlMgdG8gYXZvaWQgdGhlIG5lZWQgdG8gY2FsbCBwa2ctY29uZmlnLgorU2VlIHRoZSBwa2ctY29uZmlnIG1hbiBwYWdlIGZvciBtb3JlIGRldGFpbHMuIiAiJExJTkVOTyIgNQorCitlbGlmIHRlc3QgJHBrZ19mYWlsZWQgPSB1bnRyaWVkOyB0aGVuCisgICAgIAl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKwl7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJUaGUgcGtnLWNvbmZpZyBzY3JpcHQgY291bGQgbm90IGJlIGZvdW5kIG9yIGlzIHRvbyBvbGQuICBNYWtlIHN1cmUgaXQKK2lzIGluIHlvdXIgUEFUSCBvciBzZXQgdGhlIFBLR19DT05GSUcgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIGZ1bGwKK3BhdGggdG8gcGtnLWNvbmZpZy4KKworQWx0ZXJuYXRpdmVseSwgeW91IG1heSBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBRVDRfQ0ZMQUdTCithbmQgUVQ0X0xJQlMgdG8gYXZvaWQgdGhlIG5lZWQgdG8gY2FsbCBwa2ctY29uZmlnLgorU2VlIHRoZSBwa2ctY29uZmlnIG1hbiBwYWdlIGZvciBtb3JlIGRldGFpbHMuCisKK1RvIGdldCBwa2ctY29uZmlnLCBzZWUgPGh0dHA6Ly9wa2ctY29uZmlnLmZyZWVkZXNrdG9wLm9yZy8+LgorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KKworZWxzZQorCVFUNF9DRkxBR1M9JHBrZ19jdl9RVDRfQ0ZMQUdTCisJUVQ0X0xJQlM9JHBrZ19jdl9RVDRfTElCUworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCitmaQorCisKKwkgICAgUVQ0X1BSRUZJWD0iYCRQS0dfQ09ORklHIC0tdmFyaWFibGU9cHJlZml4IFF0Q29yZWAvYmluIgorICAgICAgICBmb3IgYWNfcHJvZyBpbiBtb2MtcXQ0IG1vYworZG8KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX01PQ19RVDQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRNT0NfUVQ0IGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX01PQ19RVDQ9IiRNT0NfUVQ0IiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUVQ0X1BSRUZJWAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcGF0aF9NT0NfUVQ0PSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIDs7Citlc2FjCitmaQorTU9DX1FUND0kYWNfY3ZfcGF0aF9NT0NfUVQ0CitpZiB0ZXN0IC1uICIkTU9DX1FUNCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNT0NfUVQ0IiA+JjUKKyRhc19lY2hvICIkTU9DX1FUNCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgIHRlc3QgLW4gIiRNT0NfUVQ0IiAmJiBicmVhaworZG9uZQordGVzdCAtbiAiJE1PQ19RVDQiIHx8IE1PQ19RVDQ9Im5vIgorCisgICAgICAgIGlmIHRlc3QgIiRNT0NfUVQ0IiA9IG5vOyB0aGVuCisgICAgICAgICAgICBhc19mbl9lcnJvciAkPyAiQ291bGQgbm90IGZpbmQgUVQ0IG1vYyIgIiRMSU5FTk8iIDUKKyAgICAgICAgZmkKKworZmkKKyBpZiB0ZXN0ICJ4JEhBVkVfUVQ0IiA9ICJ4eWVzIjsgdGhlbgorICBIQVZFX1FUNF9UUlVFPQorICBIQVZFX1FUNF9GQUxTRT0nIycKK2Vsc2UKKyAgSEFWRV9RVDRfVFJVRT0nIycKKyAgSEFWRV9RVDRfRkFMU0U9CitmaQorCisKKyMKKyMgQ2hlY2sgZm9yIEdUSysgMi4wCisjCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZ3RrIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2d0aytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2d0azsgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorICAgICAgICAgICAgICAgIHllcykgSEFWRV9HVEs9eWVzIDs7CisgICAgICAgICAgICAgICAgbm8pICBIQVZFX0dUSz1ubyA7OworICAgICAgICAgICAgICAgICopIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1ndGsiICIkTElORU5PIiA1IDs7CisgICAgICAgIGVzYWMKK2Vsc2UKKyAgSEFWRV9HVEs9eWVzCitmaQorCisKK2lmIHRlc3QgIngkSEFWRV9HVEsiID0gInh5ZXMiIDsgdGhlbgorICAgICAgICAjIENoZWNrIGZvciBHVEsgMi4wCisKK3BrZ19mYWlsZWQ9bm8KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEdUSzIwIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBHVEsyMC4uLiAiID4mNjsgfQorCitpZiB0ZXN0IC1uICIkR1RLMjBfQ0ZMQUdTIjsgdGhlbgorICAgIHBrZ19jdl9HVEsyMF9DRkxBR1M9IiRHVEsyMF9DRkxBR1MiCisgZWxpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KKyAgICBpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgXAorICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgXCIgZ3RrKy0yLjAgPj0gMi4xNC4wIFwiIjsgfSA+JjUKKyAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICIgZ3RrKy0yLjAgPj0gMi4xNC4wICIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCisgIHBrZ19jdl9HVEsyMF9DRkxBR1M9YCRQS0dfQ09ORklHIC0tY2ZsYWdzICIgZ3RrKy0yLjAgPj0gMi4xNC4wICIgMj4vZGV2L251bGxgCitlbHNlCisgIHBrZ19mYWlsZWQ9eWVzCitmaQorIGVsc2UKKyAgICBwa2dfZmFpbGVkPXVudHJpZWQKK2ZpCitpZiB0ZXN0IC1uICIkR1RLMjBfTElCUyI7IHRoZW4KKyAgICBwa2dfY3ZfR1RLMjBfTElCUz0iJEdUSzIwX0xJQlMiCisgZWxpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KKyAgICBpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgXAorICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgXCIgZ3RrKy0yLjAgPj0gMi4xNC4wIFwiIjsgfSA+JjUKKyAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICIgZ3RrKy0yLjAgPj0gMi4xNC4wICIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCisgIHBrZ19jdl9HVEsyMF9MSUJTPWAkUEtHX0NPTkZJRyAtLWxpYnMgIiBndGsrLTIuMCA+PSAyLjE0LjAgIiAyPi9kZXYvbnVsbGAKK2Vsc2UKKyAgcGtnX2ZhaWxlZD15ZXMKK2ZpCisgZWxzZQorICAgIHBrZ19mYWlsZWQ9dW50cmllZAorZmkKKworCisKK2lmIHRlc3QgJHBrZ19mYWlsZWQgPSB5ZXM7IHRoZW4KKyAgIAl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKworaWYgJFBLR19DT05GSUcgLS1hdGxlYXN0LXBrZ2NvbmZpZy12ZXJzaW9uIDAuMjA7IHRoZW4KKyAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPXllcworZWxzZQorICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9bm8KK2ZpCisgICAgICAgIGlmIHRlc3QgJF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZCA9IHllczsgdGhlbgorCSAgICAgICAgR1RLMjBfUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1zaG9ydC1lcnJvcnMgLS1wcmludC1lcnJvcnMgIiBndGsrLTIuMCA+PSAyLjE0LjAgIiAyPiYxYAorICAgICAgICBlbHNlCisJICAgICAgICBHVEsyMF9QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLXByaW50LWVycm9ycyAiIGd0aystMi4wID49IDIuMTQuMCAiIDI+JjFgCisgICAgICAgIGZpCisJIyBQdXQgdGhlIG5hc3R5IGVycm9yIG1lc3NhZ2UgaW4gY29uZmlnLmxvZyB3aGVyZSBpdCBiZWxvbmdzCisJZWNobyAiJEdUSzIwX1BLR19FUlJPUlMiID4mNQorCisJYXNfZm5fZXJyb3IgJD8gIlBhY2thZ2UgcmVxdWlyZW1lbnRzICggZ3RrKy0yLjAgPj0gMi4xNC4wICkgd2VyZSBub3QgbWV0OgorCiskR1RLMjBfUEtHX0VSUk9SUworCitDb25zaWRlciBhZGp1c3RpbmcgdGhlIFBLR19DT05GSUdfUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpZiB5b3UKK2luc3RhbGxlZCBzb2Z0d2FyZSBpbiBhIG5vbi1zdGFuZGFyZCBwcmVmaXguCisKK0FsdGVybmF0aXZlbHksIHlvdSBtYXkgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgR1RLMjBfQ0ZMQUdTCithbmQgR1RLMjBfTElCUyB0byBhdm9pZCB0aGUgbmVlZCB0byBjYWxsIHBrZy1jb25maWcuCitTZWUgdGhlIHBrZy1jb25maWcgbWFuIHBhZ2UgZm9yIG1vcmUgZGV0YWlscy4iICIkTElORU5PIiA1CisKK2VsaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHVudHJpZWQ7IHRoZW4KKyAgICAgCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCXsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgJD8gIlRoZSBwa2ctY29uZmlnIHNjcmlwdCBjb3VsZCBub3QgYmUgZm91bmQgb3IgaXMgdG9vIG9sZC4gIE1ha2Ugc3VyZSBpdAoraXMgaW4geW91ciBQQVRIIG9yIHNldCB0aGUgUEtHX0NPTkZJRyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUgZnVsbAorcGF0aCB0byBwa2ctY29uZmlnLgorCitBbHRlcm5hdGl2ZWx5LCB5b3UgbWF5IHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIEdUSzIwX0NGTEFHUworYW5kIEdUSzIwX0xJQlMgdG8gYXZvaWQgdGhlIG5lZWQgdG8gY2FsbCBwa2ctY29uZmlnLgorU2VlIHRoZSBwa2ctY29uZmlnIG1hbiBwYWdlIGZvciBtb3JlIGRldGFpbHMuCisKK1RvIGdldCBwa2ctY29uZmlnLCBzZWUgPGh0dHA6Ly9wa2ctY29uZmlnLmZyZWVkZXNrdG9wLm9yZy8+LgorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KKworZWxzZQorCUdUSzIwX0NGTEFHUz0kcGtnX2N2X0dUSzIwX0NGTEFHUworCUdUSzIwX0xJQlM9JHBrZ19jdl9HVEsyMF9MSUJTCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKK2ZpCisKKworZmkKKyBpZiB0ZXN0ICJ4JEhBVkVfR1RLIiA9ICJ4eWVzIjsgdGhlbgorICBIQVZFX0dUS19UUlVFPQorICBIQVZFX0dUS19GQUxTRT0nIycKK2Vsc2UKKyAgSEFWRV9HVEtfVFJVRT0nIycKKyAgSEFWRV9HVEtfRkFMU0U9CitmaQorCisKKyMKKyMgQ2hlY2sgZm9yIEdUSysgMy4wCisjCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZ3RrMyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9ndGszK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfZ3RrMzsgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorICAgICAgICAgICAgICAgIHllcykgSEFWRV9HVEszPXllcyA7OworICAgICAgICAgICAgICAgIG5vKSAgSEFWRV9HVEszPW5vIDs7CisgICAgICAgICAgICAgICAgKikgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLWd0azMiICIkTElORU5PIiA1IDs7CisgICAgICAgIGVzYWMKK2Vsc2UKKyAgSEFWRV9HVEszPXllcworZmkKKworCitpZiB0ZXN0ICJ4JEhBVkVfR1RLMyIgPSAieHllcyIgOyB0aGVuCisgICAgICAgICMgQ2hlY2sgZm9yIEdUSyAzLjAKKworcGtnX2ZhaWxlZD1ubworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgR1RLMzAiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEdUSzMwLi4uICIgPiY2OyB9CisKK2lmIHRlc3QgLW4gIiRHVEszMF9DRkxBR1MiOyB0aGVuCisgICAgcGtnX2N2X0dUSzMwX0NGTEFHUz0iJEdUSzMwX0NGTEFHUyIKKyBlbGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgorICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCisgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcIiBndGsrLTMuMCBcIiI7IH0gPiY1CisgICgkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAiIGd0aystMy4wICIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCisgIHBrZ19jdl9HVEszMF9DRkxBR1M9YCRQS0dfQ09ORklHIC0tY2ZsYWdzICIgZ3RrKy0zLjAgIiAyPi9kZXYvbnVsbGAKK2Vsc2UKKyAgcGtnX2ZhaWxlZD15ZXMKK2ZpCisgZWxzZQorICAgIHBrZ19mYWlsZWQ9dW50cmllZAorZmkKK2lmIHRlc3QgLW4gIiRHVEszMF9MSUJTIjsgdGhlbgorICAgIHBrZ19jdl9HVEszMF9MSUJTPSIkR1RLMzBfTElCUyIKKyBlbGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgorICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCisgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcIiBndGsrLTMuMCBcIiI7IH0gPiY1CisgICgkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAiIGd0aystMy4wICIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCisgIHBrZ19jdl9HVEszMF9MSUJTPWAkUEtHX0NPTkZJRyAtLWxpYnMgIiBndGsrLTMuMCAiIDI+L2Rldi9udWxsYAorZWxzZQorICBwa2dfZmFpbGVkPXllcworZmkKKyBlbHNlCisgICAgcGtnX2ZhaWxlZD11bnRyaWVkCitmaQorCisKKworaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHllczsgdGhlbgorICAgCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCitpZiAkUEtHX0NPTkZJRyAtLWF0bGVhc3QtcGtnY29uZmlnLXZlcnNpb24gMC4yMDsgdGhlbgorICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9eWVzCitlbHNlCisgICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD1ubworZmkKKyAgICAgICAgaWYgdGVzdCAkX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkID0geWVzOyB0aGVuCisJICAgICAgICBHVEszMF9QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLXNob3J0LWVycm9ycyAtLXByaW50LWVycm9ycyAiIGd0aystMy4wICIgMj4mMWAKKyAgICAgICAgZWxzZQorCSAgICAgICAgR1RLMzBfUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1wcmludC1lcnJvcnMgIiBndGsrLTMuMCAiIDI+JjFgCisgICAgICAgIGZpCisJIyBQdXQgdGhlIG5hc3R5IGVycm9yIG1lc3NhZ2UgaW4gY29uZmlnLmxvZyB3aGVyZSBpdCBiZWxvbmdzCisJZWNobyAiJEdUSzMwX1BLR19FUlJPUlMiID4mNQorCisJYXNfZm5fZXJyb3IgJD8gIlBhY2thZ2UgcmVxdWlyZW1lbnRzICggZ3RrKy0zLjAgKSB3ZXJlIG5vdCBtZXQ6CisKKyRHVEszMF9QS0dfRVJST1JTCisKK0NvbnNpZGVyIGFkanVzdGluZyB0aGUgUEtHX0NPTkZJR19QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlIGlmIHlvdQoraW5zdGFsbGVkIHNvZnR3YXJlIGluIGEgbm9uLXN0YW5kYXJkIHByZWZpeC4KKworQWx0ZXJuYXRpdmVseSwgeW91IG1heSBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBHVEszMF9DRkxBR1MKK2FuZCBHVEszMF9MSUJTIHRvIGF2b2lkIHRoZSBuZWVkIHRvIGNhbGwgcGtnLWNvbmZpZy4KK1NlZSB0aGUgcGtnLWNvbmZpZyBtYW4gcGFnZSBmb3IgbW9yZSBkZXRhaWxzLiIgIiRMSU5FTk8iIDUKKworZWxpZiB0ZXN0ICRwa2dfZmFpbGVkID0gdW50cmllZDsgdGhlbgorICAgICAJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisJeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAiVGhlIHBrZy1jb25maWcgc2NyaXB0IGNvdWxkIG5vdCBiZSBmb3VuZCBvciBpcyB0b28gb2xkLiAgTWFrZSBzdXJlIGl0CitpcyBpbiB5b3VyIFBBVEggb3Igc2V0IHRoZSBQS0dfQ09ORklHIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHRoZSBmdWxsCitwYXRoIHRvIHBrZy1jb25maWcuCisKK0FsdGVybmF0aXZlbHksIHlvdSBtYXkgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgR1RLMzBfQ0ZMQUdTCithbmQgR1RLMzBfTElCUyB0byBhdm9pZCB0aGUgbmVlZCB0byBjYWxsIHBrZy1jb25maWcuCitTZWUgdGhlIHBrZy1jb25maWcgbWFuIHBhZ2UgZm9yIG1vcmUgZGV0YWlscy4KKworVG8gZ2V0IHBrZy1jb25maWcsIHNlZSA8aHR0cDovL3BrZy1jb25maWcuZnJlZWRlc2t0b3Aub3JnLz4uCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorCitlbHNlCisJR1RLMzBfQ0ZMQUdTPSRwa2dfY3ZfR1RLMzBfQ0ZMQUdTCisJR1RLMzBfTElCUz0kcGtnX2N2X0dUSzMwX0xJQlMKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworZmkKKworCitmaQorIGlmIHRlc3QgIngkSEFWRV9HVEszIiA9ICJ4eWVzIjsgdGhlbgorICBIQVZFX0dUSzNfVFJVRT0KKyAgSEFWRV9HVEszX0ZBTFNFPScjJworZWxzZQorICBIQVZFX0dUSzNfVFJVRT0nIycKKyAgSEFWRV9HVEszX0ZBTFNFPQorZmkKKworCisgaWYgdGVzdCAieCRIQVZFX0dUSzMiID0gInh5ZXMiIC1vICJ4JEhBVkVfR1RLIiA9ICJ4eWVzIiA7IHRoZW4KKyAgSEFWRV9HVEsyT1IzX1RSVUU9CisgIEhBVkVfR1RLMk9SM19GQUxTRT0nIycKK2Vsc2UKKyAgSEFWRV9HVEsyT1IzX1RSVUU9JyMnCisgIEhBVkVfR1RLMk9SM19GQUxTRT0KK2ZpCisKKworIworIyBELUJ1cworIworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRidXMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZGJ1cytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2RidXM7IGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKyAgICAgICAgICAgICAgICB5ZXMpIEhBVkVfREJVUz15ZXMgOzsKKyAgICAgICAgICAgICAgICBubykgIEhBVkVfREJVUz1ubyA7OworICAgICAgICAgICAgICAgICopIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1kYnVzIiAiJExJTkVOTyIgNSA7OworICAgICAgICBlc2FjCitlbHNlCisgIEhBVkVfREJVUz15ZXMKK2ZpCisKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWRidXMtc3lzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9kYnVzX3N5cytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfZGJ1c19zeXM7CitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZGJ1cy1zeXN0ZW0tc29ja2V0IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9kYnVzX3N5c3RlbV9zb2NrZXQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2RidXNfc3lzdGVtX3NvY2tldDsKK2ZpCisKKworREJVU19WRVJTSU9OPSJEaXNhYmxlZCIKK0RCVVNfU1lTX0RJUj0iRGlzYWJsZWQiCitEQlVTX1NZU1RFTV9CVVNfREVGQVVMVF9BRERSRVNTPSJEaXNhYmxlZCIKK2lmIHRlc3QgIngkSEFWRV9EQlVTIiA9ICJ4eWVzIiA7IHRoZW4KKworcGtnX2ZhaWxlZD1ubworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgREJVUyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgREJVUy4uLiAiID4mNjsgfQorCitpZiB0ZXN0IC1uICIkREJVU19DRkxBR1MiOyB0aGVuCisgICAgcGtnX2N2X0RCVVNfQ0ZMQUdTPSIkREJVU19DRkxBR1MiCisgZWxpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KKyAgICBpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgXAorICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgXCIgZGJ1cy0xID49IDAuMzQgXCIiOyB9ID4mNQorICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgIiBkYnVzLTEgPj0gMC4zNCAiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICBwa2dfY3ZfREJVU19DRkxBR1M9YCRQS0dfQ09ORklHIC0tY2ZsYWdzICIgZGJ1cy0xID49IDAuMzQgIiAyPi9kZXYvbnVsbGAKK2Vsc2UKKyAgcGtnX2ZhaWxlZD15ZXMKK2ZpCisgZWxzZQorICAgIHBrZ19mYWlsZWQ9dW50cmllZAorZmkKK2lmIHRlc3QgLW4gIiREQlVTX0xJQlMiOyB0aGVuCisgICAgcGtnX2N2X0RCVVNfTElCUz0iJERCVVNfTElCUyIKKyBlbGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgorICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCisgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcIiBkYnVzLTEgPj0gMC4zNCBcIiI7IH0gPiY1CisgICgkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAiIGRidXMtMSA+PSAwLjM0ICIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCisgIHBrZ19jdl9EQlVTX0xJQlM9YCRQS0dfQ09ORklHIC0tbGlicyAiIGRidXMtMSA+PSAwLjM0ICIgMj4vZGV2L251bGxgCitlbHNlCisgIHBrZ19mYWlsZWQ9eWVzCitmaQorIGVsc2UKKyAgICBwa2dfZmFpbGVkPXVudHJpZWQKK2ZpCisKKworCitpZiB0ZXN0ICRwa2dfZmFpbGVkID0geWVzOyB0aGVuCisgICAJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisKK2lmICRQS0dfQ09ORklHIC0tYXRsZWFzdC1wa2djb25maWctdmVyc2lvbiAwLjIwOyB0aGVuCisgICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD15ZXMKK2Vsc2UKKyAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPW5vCitmaQorICAgICAgICBpZiB0ZXN0ICRfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQgPSB5ZXM7IHRoZW4KKwkgICAgICAgIERCVVNfUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1zaG9ydC1lcnJvcnMgLS1wcmludC1lcnJvcnMgIiBkYnVzLTEgPj0gMC4zNCAiIDI+JjFgCisgICAgICAgIGVsc2UKKwkgICAgICAgIERCVVNfUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1wcmludC1lcnJvcnMgIiBkYnVzLTEgPj0gMC4zNCAiIDI+JjFgCisgICAgICAgIGZpCisJIyBQdXQgdGhlIG5hc3R5IGVycm9yIG1lc3NhZ2UgaW4gY29uZmlnLmxvZyB3aGVyZSBpdCBiZWxvbmdzCisJZWNobyAiJERCVVNfUEtHX0VSUk9SUyIgPiY1CisKKwlhc19mbl9lcnJvciAkPyAiUGFja2FnZSByZXF1aXJlbWVudHMgKCBkYnVzLTEgPj0gMC4zNCApIHdlcmUgbm90IG1ldDoKKworJERCVVNfUEtHX0VSUk9SUworCitDb25zaWRlciBhZGp1c3RpbmcgdGhlIFBLR19DT05GSUdfUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpZiB5b3UKK2luc3RhbGxlZCBzb2Z0d2FyZSBpbiBhIG5vbi1zdGFuZGFyZCBwcmVmaXguCisKK0FsdGVybmF0aXZlbHksIHlvdSBtYXkgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgREJVU19DRkxBR1MKK2FuZCBEQlVTX0xJQlMgdG8gYXZvaWQgdGhlIG5lZWQgdG8gY2FsbCBwa2ctY29uZmlnLgorU2VlIHRoZSBwa2ctY29uZmlnIG1hbiBwYWdlIGZvciBtb3JlIGRldGFpbHMuIiAiJExJTkVOTyIgNQorCitlbGlmIHRlc3QgJHBrZ19mYWlsZWQgPSB1bnRyaWVkOyB0aGVuCisgICAgIAl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKwl7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJUaGUgcGtnLWNvbmZpZyBzY3JpcHQgY291bGQgbm90IGJlIGZvdW5kIG9yIGlzIHRvbyBvbGQuICBNYWtlIHN1cmUgaXQKK2lzIGluIHlvdXIgUEFUSCBvciBzZXQgdGhlIFBLR19DT05GSUcgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIGZ1bGwKK3BhdGggdG8gcGtnLWNvbmZpZy4KKworQWx0ZXJuYXRpdmVseSwgeW91IG1heSBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBEQlVTX0NGTEFHUworYW5kIERCVVNfTElCUyB0byBhdm9pZCB0aGUgbmVlZCB0byBjYWxsIHBrZy1jb25maWcuCitTZWUgdGhlIHBrZy1jb25maWcgbWFuIHBhZ2UgZm9yIG1vcmUgZGV0YWlscy4KKworVG8gZ2V0IHBrZy1jb25maWcsIHNlZSA8aHR0cDovL3BrZy1jb25maWcuZnJlZWRlc2t0b3Aub3JnLz4uCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorCitlbHNlCisJREJVU19DRkxBR1M9JHBrZ19jdl9EQlVTX0NGTEFHUworCURCVVNfTElCUz0kcGtnX2N2X0RCVVNfTElCUworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCitmaQorCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfREJVUyAxIiA+PmNvbmZkZWZzLmgKKworCisgICAgREJVU19WRVJTSU9OPWAkUEtHX0NPTkZJRyBkYnVzLTEgLS1tb2R2ZXJzaW9uYAorICAgIERCVVNfVkVSU0lPTl9NQUpPUj1gZWNobyAkREJVU19WRVJTSU9OIHwgYXdrIC1GLiAne3ByaW50ICQxfSdgCisgICAgREJVU19WRVJTSU9OX01JTk9SPWBlY2hvICREQlVTX1ZFUlNJT04gfCBhd2sgLUYuICd7cHJpbnQgJDJ9J2AKKyAgICBEQlVTX1ZFUlNJT05fTUlDUk89YGVjaG8gJERCVVNfVkVSU0lPTiB8IGF3ayAtRi4gJ3twcmludCAkM30nYAorICAgIGlmIHRlc3QgInokREJVU19WRVJTSU9OX01BSk9SIiA9ICJ6IjsgdGhlbgorICAgICAgICBEQlVTX1ZFUlNJT05fTUFKT1I9IjAiCisgICAgZmkKKyAgICBpZiB0ZXN0ICJ6JERCVVNfVkVSU0lPTl9NSU5PUiIgPSAieiI7IHRoZW4KKyAgICAgICAgREJVU19WRVJTSU9OX01JTk9SPSIwIgorICAgIGZpCisgICAgaWYgdGVzdCAieiREQlVTX1ZFUlNJT05fTUlDUk8iID0gInoiOyB0aGVuCisgICAgICAgIERCVVNfVkVSU0lPTl9NSUNSTz0iMCIKKyAgICBmaQorCisgICAgaWYgdGVzdCAieiREQlVTX1ZFUlNJT05fTUFKT1IiID0gInowIiAtYSAieiREQlVTX1ZFUlNJT05fTUlOT1IiID0gInowIiAtYSAieiREQlVTX1ZFUlNJT05fTUlDUk8iID0gInowIjsgdGhlbgorICAgICAgICBlY2hvICJFcnJvcjogQ291bGRuJ3QgZGV0ZXJtaW5lIHRoZSB2ZXJzaW9uIG9mIHlvdXIgRC1CdXMgcGFja2FnZS4iCisgICAgICAgIGVjaG8gIiAgVGhpcyBpcyBwcm9iYWJseSBhbiBlcnJvciBpbiB0aGlzIHNjcmlwdCwgcGxlYXNlIHJlcG9ydCBpdCIKKyAgICAgICAgZWNobyAiICBhbG9uZyB3aXRoIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246IgorICAgICAgICBlY2hvICIgICAgICBCYXNlIEQtQnVzcyB2ZXJzaW9uID0nJERCVVNfVkVSU0lPTiciCisgICAgICAgIGVjaG8gIiAgICAgIERCVVNfVkVSU0lPTl9NQUpPUj0nJERCVVNfVkVSU0lPTl9NQUpPUiciCisgICAgICAgIGVjaG8gIiAgICAgIERCVVNfVkVSU0lPTl9NSU5PUj0nJERCVVNfVkVSU0lPTl9NSU5PUiciCisgICAgICAgIGVjaG8gIiAgICAgIERCVVNfVkVSU0lPTl9NSUNSTz0nJERCVVNfVkVSU0lPTl9NSUNSTyciCisgICAgICAgIGV4aXQgMQorICAgIGVsc2UKKyAgICAgICAgZWNobyAiWW91ciBELUJ1cyB2ZXJzaW9uIGlzICREQlVTX1ZFUlNJT05fTUFKT1IsJERCVVNfVkVSU0lPTl9NSU5PUiwkREJVU19WRVJTSU9OX01JQ1JPLiIKKyAgICAgICAgREJVU19DRkxBR1M9IiREQlVTX0NGTEFHUyAtRERCVVNfVkVSU0lPTl9NQUpPUj0kREJVU19WRVJTSU9OX01BSk9SIgorICAgICAgICBEQlVTX0NGTEFHUz0iJERCVVNfQ0ZMQUdTIC1EREJVU19WRVJTSU9OX01JTk9SPSREQlVTX1ZFUlNJT05fTUlOT1IiCisgICAgICAgIERCVVNfQ0ZMQUdTPSIkREJVU19DRkxBR1MgLUREQlVTX1ZFUlNJT05fTUlDUk89JERCVVNfVkVSU0lPTl9NSUNSTyIKKyAgICBmaQorCisgICAgREJVU19DRkxBR1M9IiREQlVTX0NGTEFHUyAtRERCVVNfQVBJX1NVQkpFQ1RfVE9fQ0hBTkdFIgorCisKKworICAgIGlmICEgdGVzdCAteiAiJHdpdGhfZGJ1c19zeXMiIDsgdGhlbgorICAgICAgICBEQlVTX1NZU19ESVI9IiR3aXRoX2RidXNfc3lzIgorICAgIGVsc2UKKyAgICAgICAgREJVU19TWVNfRElSPSIke3N5c2NvbmZkaXJ9L2RidXMtMS9zeXN0ZW0uZCIKKyAgICBmaQorCisKKyAgICBpZiAhIHRlc3QgLXogIiR3aXRoX2RidXNfc3lzdGVtX2FkZHJlc3MiIDsgdGhlbgorICAgICAgICBEQlVTX1NZU1RFTV9CVVNfREVGQVVMVF9BRERSRVNTPSIkd2l0aF9kYnVzX3N5c3RlbV9hZGRyZXNzIgorICAgIGVsc2UKKyAgICAgICAgIyBUaGlzIGlzIHVnbHksIGJ1dCBELUJ1cyBkb2Vzbid0IGV4cG9ydCB0aGlzIGFkZHJlc3MgZm9yIHVzCisgICAgICAgICMgc28gd2UgaGF2ZSB0byBndWVzcywgcHJldHR5IG11Y2ggYWxsIHNldHVwcyBpJ3ZlIHNlZW4gaGF2ZQorICAgICAgICAjIGl0IGluIC92YXIvbGliL2RidXMgb3IgL3Zhci9ydW4vZGJ1cywgYW5kIGl0cyBkZWZhdWx0ZWQgdG8KKyAgICAgICAgIyAvdmFyL3J1biB1cHN0cmVhbSBzbyB3ZSB3aWxsIHRyeSBndWVzcyBmaXJzdCB0aGVuIGRlZmF1bHQKKyAgICAgICAgIyB0byAvdmFyL3J1bi9kYnVzLgorCisgICAgICAgIERCVVNfU1lTVEVNX0JVU19ERUZBVUxUX0FERFJFU1M9InVuaXg6cGF0aD0vdmFyL3J1bi9kYnVzL3N5c3RlbV9idXNfc29ja2V0IgorICAgICAgICBUUllfU09DS0VUUz0iL3Zhci9saWIvZGJ1cy9zeXN0ZW1fYnVzX3NvY2tldCAvdmFyL3J1bi9kYnVzL3N5c3RlbV9idXNfc29ja2V0ICR7bG9jYWxzdGF0ZWRpcn0vcnVuL2RidXMvc3lzdGVtX2J1c19zb2NrZXQgJHtwcmVmaXh9L3Zhci9ydW4vZGJ1cy9zeXN0ZW1fYnVzX3NvY2tldCIKKyAgICAgICAgZm9yIHNvY2sgaW4gJFRSWV9TT0NLRVRTOyBkbworICAgICAgICAgICAgaWYgdGVzdCAtUyAkc29jazsgdGhlbgorICAgICAgICAgICAgICAgIERCVVNfU1lTVEVNX0JVU19ERUZBVUxUX0FERFJFU1M9InVuaXg6cGF0aD0kc29jayIKKyAgICAgICAgICAgIGZpCisgICAgICAgIGRvbmUKKyAgICBmaQorCisKKyAgICBTQVZFRF9MSUJTPSIkTElCUyIKKyAgICBMSUJTPSIkTElCUyAkREJVU19MSUJTIgorICAgIGZvciBhY19mdW5jIGluIGRidXNfY29ubmVjdGlvbl9jbG9zZSBkYnVzX2J1c19nZXRfcHJpdmF0ZQorZG8gOgorICBhc19hY192YXI9YCRhc19lY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgIiRhY19mdW5jIiAiJGFzX2FjX3ZhciIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfdmFyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCitkb25lCisKKyAgICBMSUJTPSIkU0FWRURfTElCUyIKK2ZpCisgaWYgdGVzdCAieCRIQVZFX0RCVVMiID0gInh5ZXMiOyB0aGVuCisgIEhBVkVfREJVU19UUlVFPQorICBIQVZFX0RCVVNfRkFMU0U9JyMnCitlbHNlCisgIEhBVkVfREJVU19UUlVFPScjJworICBIQVZFX0RCVVNfRkFMU0U9CitmaQorCisKKyMKKyMgRXhwYXQKKyMKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC14bWwgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3htbCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfeG1sOworZmkKKwordXNlX2V4cGF0PWZhbHNlCit1c2VfYnNkeG1sPWZhbHNlCisKKyMgU2VlIHdoYXQgd2UgaGF2ZQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgWE1MX1BhcnNlckNyZWF0ZSBpbiAtbGV4cGF0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBYTUxfUGFyc2VyQ3JlYXRlIGluIC1sZXhwYXQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX2V4cGF0X1hNTF9QYXJzZXJDcmVhdGUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGV4cGF0ICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBYTUxfUGFyc2VyQ3JlYXRlICgpOworaW50CittYWluICgpCit7CityZXR1cm4gWE1MX1BhcnNlckNyZWF0ZSAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfZXhwYXRfWE1MX1BhcnNlckNyZWF0ZT15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX2V4cGF0X1hNTF9QYXJzZXJDcmVhdGU9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2V4cGF0X1hNTF9QYXJzZXJDcmVhdGUiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfZXhwYXRfWE1MX1BhcnNlckNyZWF0ZSIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9leHBhdF9YTUxfUGFyc2VyQ3JlYXRlIiA9IHh5ZXM7IHRoZW4gOgorICAgZm9yIGFjX2hlYWRlciBpbiBleHBhdC5oCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJleHBhdC5oIiAiYWNfY3ZfaGVhZGVyX2V4cGF0X2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2V4cGF0X2giID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9FWFBBVF9IIDEKK19BQ0VPRgorIGhhdmVfZXhwYXQ9dHJ1ZQorZWxzZQorICBoYXZlX2V4cGF0PWZhbHNlCitmaQorCitkb25lCisKK2Vsc2UKKyAgaGF2ZV9leHBhdD1mYWxzZQorZmkKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgWE1MX1BhcnNlckNyZWF0ZSBpbiAtbGJzZHhtbCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgWE1MX1BhcnNlckNyZWF0ZSBpbiAtbGJzZHhtbC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfYnNkeG1sX1hNTF9QYXJzZXJDcmVhdGUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGJzZHhtbCAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgWE1MX1BhcnNlckNyZWF0ZSAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIFhNTF9QYXJzZXJDcmVhdGUgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX2JzZHhtbF9YTUxfUGFyc2VyQ3JlYXRlPXllcworZWxzZQorICBhY19jdl9saWJfYnNkeG1sX1hNTF9QYXJzZXJDcmVhdGU9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2JzZHhtbF9YTUxfUGFyc2VyQ3JlYXRlIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX2JzZHhtbF9YTUxfUGFyc2VyQ3JlYXRlIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX2JzZHhtbF9YTUxfUGFyc2VyQ3JlYXRlIiA9IHh5ZXM7IHRoZW4gOgorICAgZm9yIGFjX2hlYWRlciBpbiBic2R4bWwuaAorZG8gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiYnNkeG1sLmgiICJhY19jdl9oZWFkZXJfYnNkeG1sX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2JzZHhtbF9oIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfQlNEWE1MX0ggMQorX0FDRU9GCisgaGF2ZV9ic2R4bWw9dHJ1ZQorZWxzZQorICBoYXZlX2JzZHhtbD1mYWxzZQorZmkKKworZG9uZQorCitlbHNlCisgIGhhdmVfYnNkeG1sPWZhbHNlCitmaQorCisKK2lmIHRlc3QgIngkd2l0aF94bWwiID0gInhub25lIjsgdGhlbgorICAgICAgICA6CitlbGlmIHRlc3QgIngkd2l0aF94bWwiID0gInhleHBhdCI7IHRoZW4KKwl1c2VfZXhwYXQ9dHJ1ZQorCWlmICEgJGhhdmVfZXhwYXQgOyB0aGVuCisJCWFzX2ZuX2Vycm9yICQ/ICIqKiogbGliZXhwYXQgcmVxdWVzdGVkLCBidXQgbm90IGZvdW5kICoqKiIgIiRMSU5FTk8iIDUKKwlmaQorZWxpZiB0ZXN0ICJ4JHdpdGhfeG1sIiA9ICJ4YnNkeG1sIjsgdGhlbgorCXVzZV9ic2R4bWw9dHJ1ZQorCWlmICEgJGhhdmVfYnNkeG1sIDsgdGhlbgorCQlhc19mbl9lcnJvciAkPyAiKioqIGxpYmJzZHhtbCByZXF1ZXN0ZWQsIGJ1dCBub3QgZm91bmQgKioqIiAiJExJTkVOTyIgNQorCWZpCitlbGlmIHRlc3QgIngkd2l0aF94bWwiICE9ICJ4IjsgdGhlbgorCWFzX2ZuX2Vycm9yICQ/ICIqKiogdW5rbm93biB3aXRoLXhtbCBvcHRpb24gKioqIiAiJExJTkVOTyIgNQorZWxzZQorCWlmICRoYXZlX2V4cGF0IDsgdGhlbgorCQl1c2VfZXhwYXQ9dHJ1ZQorCWVsaWYgJGhhdmVfYnNkeG1sIDsgdGhlbgorCQl1c2VfYnNkeG1sPXRydWUKKwllbHNlCisJCWFzX2ZuX2Vycm9yICQ/ICIqKiogbmVpdGhlciBsaWJleHBhdCBub3QgbGliYnNkeG1sIGNvdWxkIGJlIGZvdW5kICoqKiIgIiRMSU5FTk8iIDUKKwlmaQorZmkKKworaWYgJHVzZV9leHBhdDsgdGhlbgorCXdpdGhfeG1sPWV4cGF0CisJWE1MX0NGTEFHUz0tRFVTRV9FWFBBVF9ICisJWE1MX0xJQlM9LWxleHBhdAorZmkKK2lmICR1c2VfYnNkeG1sOyB0aGVuCisJd2l0aF94bWw9YnNkeG1sCisJWE1MX0NGTEFHUz0tRFVTRV9CU0RYTUxfSAorCVhNTF9MSUJTPS1sYnNkeG1sCitmaQorCisKKworaWYgJHVzZV9leHBhdCB8fCAkdXNlX2JzZHhtbDsgdGhlbgorCUhBVkVfWE1MPXllcworZmkKKworIGlmIHRlc3QgIngkSEFWRV9YTUwiID0gInh5ZXMiOyB0aGVuCisgIEhBVkVfWE1MX1RSVUU9CisgIEhBVkVfWE1MX0ZBTFNFPScjJworZWxzZQorICBIQVZFX1hNTF9UUlVFPScjJworICBIQVZFX1hNTF9GQUxTRT0KK2ZpCisKKworIworIyBHREJNCisjCisjCisjIENoZWNrIGZvciBkYm0KKyMKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1kYm0gd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZGJtK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfZGJtOyBjYXNlICIke2VuYWJsZXZhbH0iIGluCisgICAgICAgICAgICAgICAgeWVzKSBIQVZFX0RCTT15ZXMgOzsKKyAgICAgICAgICAgICAgICBubykgIEhBVkVfREJNPW5vIDs7CisgICAgICAgICAgICAgICAgKikgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLWRibSIgIiRMSU5FTk8iIDUgOzsKKyAgICAgICAgZXNhYworZWxzZQorICBIQVZFX0RCTT1ubworZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZ2RibSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9nZGJtK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfZ2RibTsgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorICAgICAgICAgICAgICAgIHllcykgSEFWRV9HREJNPXllcyA7OworICAgICAgICAgICAgICAgIG5vKSAgSEFWRV9HREJNPW5vIDs7CisgICAgICAgICAgICAgICAgKikgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZGlzYWJsZS1nZGJtIiAiJExJTkVOTyIgNSA7OworICAgICAgICBlc2FjCitlbHNlCisgIEhBVkVfR0RCTT15ZXMKK2ZpCisKKworaWYgdGVzdCAieCRIQVZFX0dEQk0iID0gInh5ZXMiIDsgdGhlbgorICAgIGlmIHRlc3QgIngkSEFWRV9EQk0iID0gInh5ZXMiIDsgdGhlbgorICAgICAgICBhc19mbl9lcnJvciAkPyAiKioqIC0tZW5hYmxlLWdkYm0gYW5kIC0tZW5hYmxlLWRibSBib3RoIHNwZWNpZmllZCAqKioiICIkTElORU5PIiA1CisgICAgZmkKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBnZGJtX29wZW4gaW4gLWxnZGJtIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBnZGJtX29wZW4gaW4gLWxnZGJtLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl9nZGJtX2dkYm1fb3Blbis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sZ2RibSAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZ2RibV9vcGVuICgpOworaW50CittYWluICgpCit7CityZXR1cm4gZ2RibV9vcGVuICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9nZGJtX2dkYm1fb3Blbj15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX2dkYm1fZ2RibV9vcGVuPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9nZGJtX2dkYm1fb3BlbiIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9nZGJtX2dkYm1fb3BlbiIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9nZGJtX2dkYm1fb3BlbiIgPSB4eWVzOyB0aGVuIDoKKyAgIGZvciBhY19oZWFkZXIgaW4gZ2RibS5oCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJnZGJtLmgiICJhY19jdl9oZWFkZXJfZ2RibV9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9nZGJtX2giID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9HREJNX0ggMQorX0FDRU9GCisgaGF2ZV9nZGJtPXRydWUKK2Vsc2UKKyAgaGF2ZV9nZGJtPWZhbHNlCitmaQorCitkb25lCisKK2Vsc2UKKyAgaGF2ZV9nZGJtPWZhbHNlCitmaQorCisKKyAgICBpZiAhICRoYXZlX2dkYm0gOyB0aGVuCisgICAgICAgIGFzX2ZuX2Vycm9yICQ/ICIqKiogbGliZ2RibSBub3QgZm91bmQgKioqIiAiJExJTkVOTyIgNQorICAgIGZpCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfR0RCTSAvKiovIiA+PmNvbmZkZWZzLmgKKworZWxzZQorICAgIGlmIHRlc3QgIngkSEFWRV9EQk0iID0gInh5ZXMiIDsgdGhlbgorICAgICAgICBmb3IgYWNfaGVhZGVyIGluIG5kYm0uaAorZG8gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAibmRibS5oIiAiYWNfY3ZfaGVhZGVyX25kYm1faCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfbmRibV9oIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfTkRCTV9IIDEKK19BQ0VPRgorIGhhdmVfZGJtPXRydWUKK2Vsc2UKKyAgaGF2ZV9kYm09ZmFsc2UKK2ZpCisKK2RvbmUKKworCisgICAgICAgIGlmICEgJGhhdmVfZGJtIDsgdGhlbgorICAgICAgICAgICAgYXNfZm5fZXJyb3IgJD8gIioqKiBkYm0gbm90IGZvdW5kICoqKiIgIiRMSU5FTk8iIDUKKyAgICAgICAgZmkKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9EQk0gLyoqLyIgPj5jb25mZGVmcy5oCisKKyAgICBmaQorZmkKKyBpZiB0ZXN0ICJ4JEhBVkVfR0RCTSIgPSAieHllcyI7IHRoZW4KKyAgSEFWRV9HREJNX1RSVUU9CisgIEhBVkVfR0RCTV9GQUxTRT0nIycKK2Vsc2UKKyAgSEFWRV9HREJNX1RSVUU9JyMnCisgIEhBVkVfR0RCTV9GQUxTRT0KK2ZpCisKKyBpZiB0ZXN0ICJ4JEhBVkVfREJNIiA9ICJ4eWVzIjsgdGhlbgorICBIQVZFX0RCTV9UUlVFPQorICBIQVZFX0RCTV9GQUxTRT0nIycKK2Vsc2UKKyAgSEFWRV9EQk1fVFJVRT0nIycKKyAgSEFWRV9EQk1fRkFMU0U9CitmaQorCisKKyMKKyMgbGliZGFlbW9uCisjCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGliZGFlbW9uIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2xpYmRhZW1vbitzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2xpYmRhZW1vbjsgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorICAgICAgICAgICAgICAgIHllcykgSEFWRV9MSUJEQUVNT049eWVzIDs7CisgICAgICAgICAgICAgICAgbm8pICBIQVZFX0xJQkRBRU1PTj1ubyA7OworICAgICAgICAgICAgICAgICopIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1saWJkYWVtb24iICIkTElORU5PIiA1IDs7CisgICAgICAgIGVzYWMKK2Vsc2UKKyAgSEFWRV9MSUJEQUVNT049eWVzCitmaQorCisKK2lmIHRlc3QgIngkSEFWRV9MSUJEQUVNT04iID0gInh5ZXMiIDsgdGhlbgorCitwa2dfZmFpbGVkPW5vCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBMSUJEQUVNT04iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIExJQkRBRU1PTi4uLiAiID4mNjsgfQorCitpZiB0ZXN0IC1uICIkTElCREFFTU9OX0NGTEFHUyI7IHRoZW4KKyAgICBwa2dfY3ZfTElCREFFTU9OX0NGTEFHUz0iJExJQkRBRU1PTl9DRkxBR1MiCisgZWxpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KKyAgICBpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgXAorICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgXCIgbGliZGFlbW9uID49IDAuMTQgXCIiOyB9ID4mNQorICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgIiBsaWJkYWVtb24gPj0gMC4xNCAiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICBwa2dfY3ZfTElCREFFTU9OX0NGTEFHUz1gJFBLR19DT05GSUcgLS1jZmxhZ3MgIiBsaWJkYWVtb24gPj0gMC4xNCAiIDI+L2Rldi9udWxsYAorZWxzZQorICBwa2dfZmFpbGVkPXllcworZmkKKyBlbHNlCisgICAgcGtnX2ZhaWxlZD11bnRyaWVkCitmaQoraWYgdGVzdCAtbiAiJExJQkRBRU1PTl9MSUJTIjsgdGhlbgorICAgIHBrZ19jdl9MSUJEQUVNT05fTElCUz0iJExJQkRBRU1PTl9MSUJTIgorIGVsaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCisgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKKyAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiIGxpYmRhZW1vbiA+PSAwLjE0IFwiIjsgfSA+JjUKKyAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICIgbGliZGFlbW9uID49IDAuMTQgIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgcGtnX2N2X0xJQkRBRU1PTl9MSUJTPWAkUEtHX0NPTkZJRyAtLWxpYnMgIiBsaWJkYWVtb24gPj0gMC4xNCAiIDI+L2Rldi9udWxsYAorZWxzZQorICBwa2dfZmFpbGVkPXllcworZmkKKyBlbHNlCisgICAgcGtnX2ZhaWxlZD11bnRyaWVkCitmaQorCisKKworaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHllczsgdGhlbgorICAgCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCitpZiAkUEtHX0NPTkZJRyAtLWF0bGVhc3QtcGtnY29uZmlnLXZlcnNpb24gMC4yMDsgdGhlbgorICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9eWVzCitlbHNlCisgICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD1ubworZmkKKyAgICAgICAgaWYgdGVzdCAkX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkID0geWVzOyB0aGVuCisJICAgICAgICBMSUJEQUVNT05fUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1zaG9ydC1lcnJvcnMgLS1wcmludC1lcnJvcnMgIiBsaWJkYWVtb24gPj0gMC4xNCAiIDI+JjFgCisgICAgICAgIGVsc2UKKwkgICAgICAgIExJQkRBRU1PTl9QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLXByaW50LWVycm9ycyAiIGxpYmRhZW1vbiA+PSAwLjE0ICIgMj4mMWAKKyAgICAgICAgZmkKKwkjIFB1dCB0aGUgbmFzdHkgZXJyb3IgbWVzc2FnZSBpbiBjb25maWcubG9nIHdoZXJlIGl0IGJlbG9uZ3MKKwllY2hvICIkTElCREFFTU9OX1BLR19FUlJPUlMiID4mNQorCisJYXNfZm5fZXJyb3IgJD8gIlBhY2thZ2UgcmVxdWlyZW1lbnRzICggbGliZGFlbW9uID49IDAuMTQgKSB3ZXJlIG5vdCBtZXQ6CisKKyRMSUJEQUVNT05fUEtHX0VSUk9SUworCitDb25zaWRlciBhZGp1c3RpbmcgdGhlIFBLR19DT05GSUdfUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpZiB5b3UKK2luc3RhbGxlZCBzb2Z0d2FyZSBpbiBhIG5vbi1zdGFuZGFyZCBwcmVmaXguCisKK0FsdGVybmF0aXZlbHksIHlvdSBtYXkgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgTElCREFFTU9OX0NGTEFHUworYW5kIExJQkRBRU1PTl9MSUJTIHRvIGF2b2lkIHRoZSBuZWVkIHRvIGNhbGwgcGtnLWNvbmZpZy4KK1NlZSB0aGUgcGtnLWNvbmZpZyBtYW4gcGFnZSBmb3IgbW9yZSBkZXRhaWxzLiIgIiRMSU5FTk8iIDUKKworZWxpZiB0ZXN0ICRwa2dfZmFpbGVkID0gdW50cmllZDsgdGhlbgorICAgICAJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisJeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAiVGhlIHBrZy1jb25maWcgc2NyaXB0IGNvdWxkIG5vdCBiZSBmb3VuZCBvciBpcyB0b28gb2xkLiAgTWFrZSBzdXJlIGl0CitpcyBpbiB5b3VyIFBBVEggb3Igc2V0IHRoZSBQS0dfQ09ORklHIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHRoZSBmdWxsCitwYXRoIHRvIHBrZy1jb25maWcuCisKK0FsdGVybmF0aXZlbHksIHlvdSBtYXkgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgTElCREFFTU9OX0NGTEFHUworYW5kIExJQkRBRU1PTl9MSUJTIHRvIGF2b2lkIHRoZSBuZWVkIHRvIGNhbGwgcGtnLWNvbmZpZy4KK1NlZSB0aGUgcGtnLWNvbmZpZyBtYW4gcGFnZSBmb3IgbW9yZSBkZXRhaWxzLgorCitUbyBnZXQgcGtnLWNvbmZpZywgc2VlIDxodHRwOi8vcGtnLWNvbmZpZy5mcmVlZGVza3RvcC5vcmcvPi4KK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CisKK2Vsc2UKKwlMSUJEQUVNT05fQ0ZMQUdTPSRwa2dfY3ZfTElCREFFTU9OX0NGTEFHUworCUxJQkRBRU1PTl9MSUJTPSRwa2dfY3ZfTElCREFFTU9OX0xJQlMKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworZmkKKworCitmaQorIGlmIHRlc3QgIngkSEFWRV9MSUJEQUVNT04iID0gInh5ZXMiOyB0aGVuCisgIEhBVkVfTElCREFFTU9OX1RSVUU9CisgIEhBVkVfTElCREFFTU9OX0ZBTFNFPScjJworZWxzZQorICBIQVZFX0xJQkRBRU1PTl9UUlVFPScjJworICBIQVZFX0xJQkRBRU1PTl9GQUxTRT0KK2ZpCisKKworIworIyBQeXRob24gc3R1ZmYKKyMKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1weXRob24gd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfcHl0aG9uK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfcHl0aG9uOyBjYXNlICIke2VuYWJsZXZhbH0iIGluCisgICAgICAgICAgeWVzKSBIQVZFX1BZVEhPTj15ZXMgOzsKKyAgICAgICAgICBubykgIEhBVkVfUFlUSE9OPW5vIDs7CisgICAgICAgICAgKikgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLXB5dGhvbiIgIiRMSU5FTk8iIDUgOzsKKyAgICBlc2FjCitlbHNlCisgIEhBVkVfUFlUSE9OPXllcworZmkKKworCitIQVZFX1BZVEhPTl9EQlVTPW5vCitIQVZFX1BZR1RLPW5vCisKK2lmIHRlc3QgIngkSEFWRV9QWVRIT04iID0gInh5ZXMiIDsgdGhlbgorCisKKworCisKKworICAgICAgICBpZiB0ZXN0IC1uICIkUFlUSE9OIjsgdGhlbgorICAgICAgIyBJZiB0aGUgdXNlciBzZXQgJFBZVEhPTiwgdXNlIGl0IGFuZCBkb24ndCBzZWFyY2ggc29tZXRoaW5nIGVsc2UuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJFBZVEhPTiB2ZXJzaW9uID49IDIuNCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRQWVRIT04gdmVyc2lvbiA+PSAyLjQuLi4gIiA+JjY7IH0KKyAgICAgIHByb2c9ImltcG9ydCBzeXMKKyMgc3BsaXQgc3RyaW5ncyBieSAnLicgYW5kIGNvbnZlcnQgdG8gbnVtZXJpYy4gIEFwcGVuZCBzb21lIHplcm9zCisjIGJlY2F1c2Ugd2UgbmVlZCBhdCBsZWFzdCA0IGRpZ2l0cyBmb3IgdGhlIGhleCBjb252ZXJzaW9uLgorIyBtYXAgcmV0dXJucyBhbiBpdGVyYXRvciBpbiBQeXRob24gMy4wIGFuZCBhIGxpc3QgaW4gMi54CittaW52ZXIgPSBsaXN0KG1hcChpbnQsICcyLjQnLnNwbGl0KCcuJykpKSArIFswLCAwLCAwXQorbWludmVyaGV4ID0gMAorIyB4cmFuZ2UgaXMgbm90IHByZXNlbnQgaW4gUHl0aG9uIDMuMCBhbmQgcmFuZ2UgcmV0dXJucyBhbiBpdGVyYXRvcgorZm9yIGkgaW4gbGlzdChyYW5nZSgwLCA0KSk6IG1pbnZlcmhleCA9IChtaW52ZXJoZXggPDwgOCkgKyBtaW52ZXJbaV0KK3N5cy5leGl0KHN5cy5oZXh2ZXJzaW9uIDwgbWludmVyaGV4KSIKKyAgaWYgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogJFBZVEhPTiAtYyAiJHByb2ciIiA+JjUKKyAgICgkUFlUSE9OIC1jICIkcHJvZyIpID4mNSAyPiY1CisgICBhY19zdGF0dXM9JD8KKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9OyB0aGVuIDoKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KK2Vsc2UKKyAgYXNfZm5fZXJyb3IgJD8gInRvbyBvbGQiICIkTElORU5PIiA1CitmaQorICAgICAgYW1fZGlzcGxheV9QWVRIT049JFBZVEhPTgorICAgIGVsc2UKKyAgICAgICMgT3RoZXJ3aXNlLCB0cnkgZWFjaCBpbnRlcnByZXRlciB1bnRpbCB3ZSBmaW5kIG9uZSB0aGF0IHNhdGlzZmllcworICAgICAgIyBWRVJTSU9OLgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYSBQeXRob24gaW50ZXJwcmV0ZXIgd2l0aCB2ZXJzaW9uID49IDIuNCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgYSBQeXRob24gaW50ZXJwcmV0ZXIgd2l0aCB2ZXJzaW9uID49IDIuNC4uLiAiID4mNjsgfQoraWYgJHthbV9jdl9wYXRobGVzc19QWVRIT04rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisJZm9yIGFtX2N2X3BhdGhsZXNzX1BZVEhPTiBpbiBweXRob24gcHl0aG9uMiBweXRob24zIHB5dGhvbjMuMiBweXRob24zLjEgcHl0aG9uMy4wIHB5dGhvbjIuNyAgcHl0aG9uMi42IHB5dGhvbjIuNSBweXRob24yLjQgcHl0aG9uMi4zIHB5dGhvbjIuMiBweXRob24yLjEgcHl0aG9uMi4wIG5vbmU7IGRvCisJICB0ZXN0ICIkYW1fY3ZfcGF0aGxlc3NfUFlUSE9OIiA9IG5vbmUgJiYgYnJlYWsKKwkgIHByb2c9ImltcG9ydCBzeXMKKyMgc3BsaXQgc3RyaW5ncyBieSAnLicgYW5kIGNvbnZlcnQgdG8gbnVtZXJpYy4gIEFwcGVuZCBzb21lIHplcm9zCisjIGJlY2F1c2Ugd2UgbmVlZCBhdCBsZWFzdCA0IGRpZ2l0cyBmb3IgdGhlIGhleCBjb252ZXJzaW9uLgorIyBtYXAgcmV0dXJucyBhbiBpdGVyYXRvciBpbiBQeXRob24gMy4wIGFuZCBhIGxpc3QgaW4gMi54CittaW52ZXIgPSBsaXN0KG1hcChpbnQsICcyLjQnLnNwbGl0KCcuJykpKSArIFswLCAwLCAwXQorbWludmVyaGV4ID0gMAorIyB4cmFuZ2UgaXMgbm90IHByZXNlbnQgaW4gUHl0aG9uIDMuMCBhbmQgcmFuZ2UgcmV0dXJucyBhbiBpdGVyYXRvcgorZm9yIGkgaW4gbGlzdChyYW5nZSgwLCA0KSk6IG1pbnZlcmhleCA9IChtaW52ZXJoZXggPDwgOCkgKyBtaW52ZXJbaV0KK3N5cy5leGl0KHN5cy5oZXh2ZXJzaW9uIDwgbWludmVyaGV4KSIKKyAgaWYgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogJGFtX2N2X3BhdGhsZXNzX1BZVEhPTiAtYyAiJHByb2ciIiA+JjUKKyAgICgkYW1fY3ZfcGF0aGxlc3NfUFlUSE9OIC1jICIkcHJvZyIpID4mNSAyPiY1CisgICBhY19zdGF0dXM9JD8KKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9OyB0aGVuIDoKKyAgYnJlYWsKK2ZpCisJZG9uZQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYW1fY3ZfcGF0aGxlc3NfUFlUSE9OIiA+JjUKKyRhc19lY2hvICIkYW1fY3ZfcGF0aGxlc3NfUFlUSE9OIiA+JjY7IH0KKyAgICAgICMgU2V0ICRQWVRIT04gdG8gdGhlIGFic29sdXRlIHBhdGggb2YgJGFtX2N2X3BhdGhsZXNzX1BZVEhPTi4KKyAgICAgIGlmIHRlc3QgIiRhbV9jdl9wYXRobGVzc19QWVRIT04iID0gbm9uZTsgdGhlbgorCVBZVEhPTj06CisgICAgICBlbHNlCisgICAgICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFtX2N2X3BhdGhsZXNzX1BZVEhPTiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFtX2N2X3BhdGhsZXNzX1BZVEhPTjsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfUFlUSE9OKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkUFlUSE9OIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX1BZVEhPTj0iJFBZVEhPTiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfUFlUSE9OPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIDs7Citlc2FjCitmaQorUFlUSE9OPSRhY19jdl9wYXRoX1BZVEhPTgoraWYgdGVzdCAtbiAiJFBZVEhPTiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRQWVRIT04iID4mNQorJGFzX2VjaG8gIiRQWVRIT04iID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICAgICAgZmkKKyAgICAgIGFtX2Rpc3BsYXlfUFlUSE9OPSRhbV9jdl9wYXRobGVzc19QWVRIT04KKyAgICBmaQorCisKKyAgaWYgdGVzdCAiJFBZVEhPTiIgPSA6OyB0aGVuCisgICAgICBhc19mbl9lcnJvciAkPyAibm8gc3VpdGFibGUgUHl0aG9uIGludGVycHJldGVyIGZvdW5kIiAiJExJTkVOTyIgNQorICBlbHNlCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYW1fZGlzcGxheV9QWVRIT04gdmVyc2lvbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFtX2Rpc3BsYXlfUFlUSE9OIHZlcnNpb24uLi4gIiA+JjY7IH0KK2lmICR7YW1fY3ZfcHl0aG9uX3ZlcnNpb24rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhbV9jdl9weXRob25fdmVyc2lvbj1gJFBZVEhPTiAtYyAiaW1wb3J0IHN5czsgc3lzLnN0ZG91dC53cml0ZShzeXMudmVyc2lvbls6M10pImAKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFtX2N2X3B5dGhvbl92ZXJzaW9uIiA+JjUKKyRhc19lY2hvICIkYW1fY3ZfcHl0aG9uX3ZlcnNpb24iID4mNjsgfQorICBQWVRIT05fVkVSU0lPTj0kYW1fY3ZfcHl0aG9uX3ZlcnNpb24KKworCisKKyAgUFlUSE9OX1BSRUZJWD0nJHtwcmVmaXh9JworCisgIFBZVEhPTl9FWEVDX1BSRUZJWD0nJHtleGVjX3ByZWZpeH0nCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhbV9kaXNwbGF5X1BZVEhPTiBwbGF0Zm9ybSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFtX2Rpc3BsYXlfUFlUSE9OIHBsYXRmb3JtLi4uICIgPiY2OyB9CitpZiAke2FtX2N2X3B5dGhvbl9wbGF0Zm9ybSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFtX2N2X3B5dGhvbl9wbGF0Zm9ybT1gJFBZVEhPTiAtYyAiaW1wb3J0IHN5czsgc3lzLnN0ZG91dC53cml0ZShzeXMucGxhdGZvcm0pImAKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFtX2N2X3B5dGhvbl9wbGF0Zm9ybSIgPiY1CiskYXNfZWNobyAiJGFtX2N2X3B5dGhvbl9wbGF0Zm9ybSIgPiY2OyB9CisgIFBZVEhPTl9QTEFURk9STT0kYW1fY3ZfcHl0aG9uX3BsYXRmb3JtCisKKworCisKKyAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhbV9kaXNwbGF5X1BZVEhPTiBzY3JpcHQgZGlyZWN0b3J5IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYW1fZGlzcGxheV9QWVRIT04gc2NyaXB0IGRpcmVjdG9yeS4uLiAiID4mNjsgfQoraWYgJHthbV9jdl9weXRob25fcHl0aG9uZGlyKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAieCRwcmVmaXgiID0geE5PTkUKKyAgICAgdGhlbgorICAgICAgIGFtX3B5X3ByZWZpeD0kYWNfZGVmYXVsdF9wcmVmaXgKKyAgICAgZWxzZQorICAgICAgIGFtX3B5X3ByZWZpeD0kcHJlZml4CisgICAgIGZpCisgICAgIGFtX2N2X3B5dGhvbl9weXRob25kaXI9YCRQWVRIT04gLWMgImltcG9ydCBzeXM7IGZyb20gZGlzdHV0aWxzIGltcG9ydCBzeXNjb25maWc7IHN5cy5zdGRvdXQud3JpdGUoc3lzY29uZmlnLmdldF9weXRob25fbGliKDAsMCxwcmVmaXg9JyRhbV9weV9wcmVmaXgnKSkiIDI+L2Rldi9udWxsYAorICAgICBjYXNlICRhbV9jdl9weXRob25fcHl0aG9uZGlyIGluCisgICAgICRhbV9weV9wcmVmaXgqKQorICAgICAgIGFtX19zdHJpcF9wcmVmaXg9YGVjaG8gIiRhbV9weV9wcmVmaXgiIHwgc2VkICdzfC58LnxnJ2AKKyAgICAgICBhbV9jdl9weXRob25fcHl0aG9uZGlyPWBlY2hvICIkYW1fY3ZfcHl0aG9uX3B5dGhvbmRpciIgfCBzZWQgInMsXiRhbV9fc3RyaXBfcHJlZml4LCRQWVRIT05fUFJFRklYLCJgCisgICAgICAgOzsKKyAgICAgKikKKyAgICAgICBjYXNlICRhbV9weV9wcmVmaXggaW4KKyAgICAgICAgIC91c3J8L1N5c3RlbSopIDs7CisgICAgICAgICAqKQorCSAgYW1fY3ZfcHl0aG9uX3B5dGhvbmRpcj0kUFlUSE9OX1BSRUZJWC9saWIvcHl0aG9uJFBZVEhPTl9WRVJTSU9OL3NpdGUtcGFja2FnZXMKKwkgIDs7CisgICAgICAgZXNhYworICAgICAgIDs7CisgICAgIGVzYWMKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYW1fY3ZfcHl0aG9uX3B5dGhvbmRpciIgPiY1CiskYXNfZWNobyAiJGFtX2N2X3B5dGhvbl9weXRob25kaXIiID4mNjsgfQorICBweXRob25kaXI9JGFtX2N2X3B5dGhvbl9weXRob25kaXIKKworCisKKyAgcGtncHl0aG9uZGlyPVwke3B5dGhvbmRpcn0vJFBBQ0tBR0UKKworCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhbV9kaXNwbGF5X1BZVEhPTiBleHRlbnNpb24gbW9kdWxlIGRpcmVjdG9yeSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFtX2Rpc3BsYXlfUFlUSE9OIGV4dGVuc2lvbiBtb2R1bGUgZGlyZWN0b3J5Li4uICIgPiY2OyB9CitpZiAke2FtX2N2X3B5dGhvbl9weWV4ZWNkaXIrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0ICJ4JGV4ZWNfcHJlZml4IiA9IHhOT05FCisgICAgIHRoZW4KKyAgICAgICBhbV9weV9leGVjX3ByZWZpeD0kYW1fcHlfcHJlZml4CisgICAgIGVsc2UKKyAgICAgICBhbV9weV9leGVjX3ByZWZpeD0kZXhlY19wcmVmaXgKKyAgICAgZmkKKyAgICAgYW1fY3ZfcHl0aG9uX3B5ZXhlY2Rpcj1gJFBZVEhPTiAtYyAiaW1wb3J0IHN5czsgZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHN5c2NvbmZpZzsgc3lzLnN0ZG91dC53cml0ZShzeXNjb25maWcuZ2V0X3B5dGhvbl9saWIoMSwwLHByZWZpeD0nJGFtX3B5X2V4ZWNfcHJlZml4JykpIiAyPi9kZXYvbnVsbGAKKyAgICAgY2FzZSAkYW1fY3ZfcHl0aG9uX3B5ZXhlY2RpciBpbgorICAgICAkYW1fcHlfZXhlY19wcmVmaXgqKQorICAgICAgIGFtX19zdHJpcF9wcmVmaXg9YGVjaG8gIiRhbV9weV9leGVjX3ByZWZpeCIgfCBzZWQgJ3N8LnwufGcnYAorICAgICAgIGFtX2N2X3B5dGhvbl9weWV4ZWNkaXI9YGVjaG8gIiRhbV9jdl9weXRob25fcHlleGVjZGlyIiB8IHNlZCAicyxeJGFtX19zdHJpcF9wcmVmaXgsJFBZVEhPTl9FWEVDX1BSRUZJWCwiYAorICAgICAgIDs7CisgICAgICopCisgICAgICAgY2FzZSAkYW1fcHlfZXhlY19wcmVmaXggaW4KKyAgICAgICAgIC91c3J8L1N5c3RlbSopIDs7CisgICAgICAgICAqKQorCSAgIGFtX2N2X3B5dGhvbl9weWV4ZWNkaXI9JFBZVEhPTl9FWEVDX1BSRUZJWC9saWIvcHl0aG9uJFBZVEhPTl9WRVJTSU9OL3NpdGUtcGFja2FnZXMKKwkgICA7OworICAgICAgIGVzYWMKKyAgICAgICA7OworICAgICBlc2FjCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFtX2N2X3B5dGhvbl9weWV4ZWNkaXIiID4mNQorJGFzX2VjaG8gIiRhbV9jdl9weXRob25fcHlleGVjZGlyIiA+JjY7IH0KKyAgcHlleGVjZGlyPSRhbV9jdl9weXRob25fcHlleGVjZGlyCisKKworCisgIHBrZ3B5ZXhlY2Rpcj1cJHtweWV4ZWNkaXJ9LyRQQUNLQUdFCisKKworCisgIGZpCisKKworCisgICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXB5Z3RrIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3B5Z3RrK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfcHlndGs7IGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKyAgICAgICAgICAgICAgICB5ZXMpIEhBVkVfUFlHVEs9eWVzIDs7CisgICAgICAgICAgICAgICAgbm8pICBIQVZFX1BZR1RLPW5vIDs7CisgICAgICAgICAgICAgICAgKikgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLXB5Z3RrIiAiJExJTkVOTyIgNSA7OworICAgICAgICBlc2FjCitlbHNlCisgIEhBVkVfUFlHVEs9eWVzCitmaQorCisKKyAgICBpZiB0ZXN0ICJ4JEhBVkVfUFlHVEsiID0gInh5ZXMiIDsgdGhlbgorCitweV9tb2RfdmFyPWBlY2hvIGd0aydfJyB8IHNlZCAneSUuLystJV9fcF8lJ2AKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHB5dGhvbiBtb2R1bGUgZ3RrIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBweXRob24gbW9kdWxlIGd0ay4uLiAiID4mNjsgfQoraWYgZXZhbCBcJHtweV9jdl9tb2RfJHB5X21vZF92YXIrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCitwcm9nPSIKK2ltcG9ydCBzeXMKK3RyeToKKyAgICAgICAgaW1wb3J0IGd0aworZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICBzeXMuZXhpdCgxKQorZXhjZXB0OgorICAgICAgICBzeXMuZXhpdCgwKQorc3lzLmV4aXQoMCkiCitpZiAkUFlUSE9OIC1jICIkcHJvZyIgMT4mNSAyPiY1CisgIHRoZW4KKyAgICBldmFsICJweV9jdl9tb2RfJHB5X21vZF92YXI9eWVzIgorICBlbHNlCisgICAgZXZhbCAicHlfY3ZfbW9kXyRweV9tb2RfdmFyPW5vIgorICBmaQorCitmaQorCitweV92YWw9YGV2YWwgImVjaG8gXGBlY2hvICckcHlfY3ZfbW9kXyckcHlfbW9kX3ZhclxgImAKK2lmIHRlc3QgIngkcHlfdmFsIiAhPSB4bm87IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgYXNfZm5fZXJyb3IgJD8gIkNvdWxkIG5vdCBmaW5kIFB5dGhvbiBtb2R1bGUgZ3RrIiAiJExJTkVOTyIgNQorZmkKKworICAgIGZpCisKKworICAgIGlmIHRlc3QgIngkSEFWRV9EQlVTIiA9ICJ4eWVzIiA7IHRoZW4KKyAgICAgICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXB5dGhvbi1kYnVzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3B5dGhvbl9kYnVzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfcHl0aG9uX2RidXM7IGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKyAgICAgICAgICAgICAgICAgICB5ZXMpIEhBVkVfUFlUSE9OX0RCVVM9eWVzIDs7CisgICAgICAgICAgICAgICAgICAgbm8pICBIQVZFX1BZVEhPTl9EQlVTPW5vIDs7CisgICAgICAgICAgICAgICAgICAgKikgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLXB5dGhvbi1kYnVzIiAiJExJTkVOTyIgNSA7OworICAgICAgICAgICAgZXNhYworZWxzZQorICBIQVZFX1BZVEhPTl9EQlVTPXllcworZmkKKworCisgICAgICAgIGlmIHRlc3QgIngkSEFWRV9QWVRIT05fREJVUyIgPSAieHllcyI7IHRoZW4KKworcHlfbW9kX3Zhcj1gZWNobyBkYnVzJ18nIHwgc2VkICd5JS4vKy0lX19wXyUnYAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgcHl0aG9uIG1vZHVsZSBkYnVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBweXRob24gbW9kdWxlIGRidXMuLi4gIiA+JjY7IH0KK2lmIGV2YWwgXCR7cHlfY3ZfbW9kXyRweV9tb2RfdmFyKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworcHJvZz0iCitpbXBvcnQgc3lzCit0cnk6CisgICAgICAgIGltcG9ydCBkYnVzCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgIHN5cy5leGl0KDEpCitleGNlcHQ6CisgICAgICAgIHN5cy5leGl0KDApCitzeXMuZXhpdCgwKSIKK2lmICRQWVRIT04gLWMgIiRwcm9nIiAxPiY1IDI+JjUKKyAgdGhlbgorICAgIGV2YWwgInB5X2N2X21vZF8kcHlfbW9kX3Zhcj15ZXMiCisgIGVsc2UKKyAgICBldmFsICJweV9jdl9tb2RfJHB5X21vZF92YXI9bm8iCisgIGZpCisKK2ZpCisKK3B5X3ZhbD1gZXZhbCAiZWNobyBcYGVjaG8gJyRweV9jdl9tb2RfJyRweV9tb2RfdmFyXGAiYAoraWYgdGVzdCAieCRweV92YWwiICE9IHhubzsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICBlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICBhc19mbl9lcnJvciAkPyAiQ291bGQgbm90IGZpbmQgUHl0aG9uIG1vZHVsZSBkYnVzIiAiJExJTkVOTyIgNQorZmkKKworICAgICAgICBmaQorCisKK3B5X21vZF92YXI9YGVjaG8gc29ja2V0J18nIHwgc2VkICd5JS4vKy0lX19wXyUnYAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgcHl0aG9uIG1vZHVsZSBzb2NrZXQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHB5dGhvbiBtb2R1bGUgc29ja2V0Li4uICIgPiY2OyB9CitpZiBldmFsIFwke3B5X2N2X21vZF8kcHlfbW9kX3Zhcis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKK3Byb2c9IgoraW1wb3J0IHN5cwordHJ5OgorICAgICAgICBpbXBvcnQgc29ja2V0CitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgIHN5cy5leGl0KDEpCitleGNlcHQ6CisgICAgICAgIHN5cy5leGl0KDApCitzeXMuZXhpdCgwKSIKK2lmICRQWVRIT04gLWMgIiRwcm9nIiAxPiY1IDI+JjUKKyAgdGhlbgorICAgIGV2YWwgInB5X2N2X21vZF8kcHlfbW9kX3Zhcj15ZXMiCisgIGVsc2UKKyAgICBldmFsICJweV9jdl9tb2RfJHB5X21vZF92YXI9bm8iCisgIGZpCisKK2ZpCisKK3B5X3ZhbD1gZXZhbCAiZWNobyBcYGVjaG8gJyRweV9jdl9tb2RfJyRweV9tb2RfdmFyXGAiYAoraWYgdGVzdCAieCRweV92YWwiICE9IHhubzsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICBlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICBhc19mbl9lcnJvciAkPyAiQ291bGQgbm90IGZpbmQgUHl0aG9uIG1vZHVsZSBzb2NrZXQiICIkTElORU5PIiA1CitmaQorCisgICAgICAgIGlmIHRlc3QgIngkSEFWRV9HREJNIiA9ICJ4eWVzIjsgdGhlbgorCitweV9tb2RfdmFyPWBlY2hvIGdkYm0nXycgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBweXRob24gbW9kdWxlIGdkYm0iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHB5dGhvbiBtb2R1bGUgZ2RibS4uLiAiID4mNjsgfQoraWYgZXZhbCBcJHtweV9jdl9tb2RfJHB5X21vZF92YXIrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCitwcm9nPSIKK2ltcG9ydCBzeXMKK3RyeToKKyAgICAgICAgaW1wb3J0IGdkYm0KK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgc3lzLmV4aXQoMSkKK2V4Y2VwdDoKKyAgICAgICAgc3lzLmV4aXQoMCkKK3N5cy5leGl0KDApIgoraWYgJFBZVEhPTiAtYyAiJHByb2ciIDE+JjUgMj4mNQorICB0aGVuCisgICAgZXZhbCAicHlfY3ZfbW9kXyRweV9tb2RfdmFyPXllcyIKKyAgZWxzZQorICAgIGV2YWwgInB5X2N2X21vZF8kcHlfbW9kX3Zhcj1ubyIKKyAgZmkKKworZmkKKworcHlfdmFsPWBldmFsICJlY2hvIFxgZWNobyAnJHB5X2N2X21vZF8nJHB5X21vZF92YXJcYCJgCitpZiB0ZXN0ICJ4JHB5X3ZhbCIgIT0geG5vOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgIGVsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisgIGFzX2ZuX2Vycm9yICQ/ICJDb3VsZCBub3QgZmluZCBQeXRob24gbW9kdWxlIGdkYm0iICIkTElORU5PIiA1CitmaQorCisgICAgICAgIGZpCisgICAgICAgIGlmIHRlc3QgIngkSEFWRV9EQk0iID0gInh5ZXMiOyB0aGVuCisKK3B5X21vZF92YXI9YGVjaG8gZGJtJ18nIHwgc2VkICd5JS4vKy0lX19wXyUnYAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgcHl0aG9uIG1vZHVsZSBkYm0iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHB5dGhvbiBtb2R1bGUgZGJtLi4uICIgPiY2OyB9CitpZiBldmFsIFwke3B5X2N2X21vZF8kcHlfbW9kX3Zhcis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKK3Byb2c9IgoraW1wb3J0IHN5cwordHJ5OgorICAgICAgICBpbXBvcnQgZGJtCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgIHN5cy5leGl0KDEpCitleGNlcHQ6CisgICAgICAgIHN5cy5leGl0KDApCitzeXMuZXhpdCgwKSIKK2lmICRQWVRIT04gLWMgIiRwcm9nIiAxPiY1IDI+JjUKKyAgdGhlbgorICAgIGV2YWwgInB5X2N2X21vZF8kcHlfbW9kX3Zhcj15ZXMiCisgIGVsc2UKKyAgICBldmFsICJweV9jdl9tb2RfJHB5X21vZF92YXI9bm8iCisgIGZpCisKK2ZpCisKK3B5X3ZhbD1gZXZhbCAiZWNobyBcYGVjaG8gJyRweV9jdl9tb2RfJyRweV9tb2RfdmFyXGAiYAoraWYgdGVzdCAieCRweV92YWwiICE9IHhubzsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICBlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICBhc19mbl9lcnJvciAkPyAiQ291bGQgbm90IGZpbmQgUHl0aG9uIG1vZHVsZSBkYm0iICIkTElORU5PIiA1CitmaQorCisgICAgICAgIGZpCisgICAgZmkKK2ZpCisgaWYgdGVzdCAieCRIQVZFX1BZVEhPTiIgPSAieHllcyIgOyB0aGVuCisgIEhBVkVfUFlUSE9OX1RSVUU9CisgIEhBVkVfUFlUSE9OX0ZBTFNFPScjJworZWxzZQorICBIQVZFX1BZVEhPTl9UUlVFPScjJworICBIQVZFX1BZVEhPTl9GQUxTRT0KK2ZpCisKKyBpZiB0ZXN0ICJ4JEhBVkVfUFlHVEsiID0gInh5ZXMiOyB0aGVuCisgIEhBVkVfUFlHVEtfVFJVRT0KKyAgSEFWRV9QWUdUS19GQUxTRT0nIycKK2Vsc2UKKyAgSEFWRV9QWUdUS19UUlVFPScjJworICBIQVZFX1BZR1RLX0ZBTFNFPQorZmkKKworIGlmIHRlc3QgIngkSEFWRV9QWVRIT05fREJVUyIgPSAieHllcyI7IHRoZW4KKyAgSEFWRV9QWVRIT05fREJVU19UUlVFPQorICBIQVZFX1BZVEhPTl9EQlVTX0ZBTFNFPScjJworZWxzZQorICBIQVZFX1BZVEhPTl9EQlVTX1RSVUU9JyMnCisgIEhBVkVfUFlUSE9OX0RCVVNfRkFMU0U9CitmaQorCisKKyMKKyMgQ2hlY2sgZm9yIG1vbm8gc3R1ZmYKKyMKK0hBVkVfTU9OTz1ubworaWYgdGVzdCAieCRIQVZFX0RCVVMiID0gInh5ZXMiIDsgdGhlbgorICAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1tb25vIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX21vbm8rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9tb25vOyBjYXNlICIke2VuYWJsZXZhbH0iIGluCisgICAgICAgICAgICAgICAgICAgIHllcykgSEFWRV9NT05PPXllcyA7OworICAgICAgICAgICAgICAgICAgICBubykgIEhBVkVfTU9OTz1ubyA7OworICAgICAgICAgICAgICAgICAgICAqKSBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtbW9ubyIgIiRMSU5FTk8iIDUgOzsKKyAgICAgICAgICAgIGVzYWMKK2Vsc2UKKyAgSEFWRV9NT05PPXllcworZmkKKworCisgICAgaWYgdGVzdCAieCRIQVZFX01PTk8iID0gInh5ZXMiIDsgdGhlbgorICAgICAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm1jcyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgbWNzOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9NQ1MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRNQ1MgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfTUNTPSIkTUNTIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcGF0aF9NQ1M9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgOzsKK2VzYWMKK2ZpCitNQ1M9JGFjX2N2X3BhdGhfTUNTCitpZiB0ZXN0IC1uICIkTUNTIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1DUyIgPiY1CiskYXNfZWNobyAiJE1DUyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgICAgICAgIGlmIHRlc3QgIngkTUNTIiA9ICJ4IiA7IHRoZW4KKyAgICAgICAgICAgIGFzX2ZuX2Vycm9yICQ/ICJDYW4gbm90IGZpbmQgXCJtY3NcIiAtIFRoZSBNb25vIEMtU2hhcnAgQ29tcGlsZXIpIGluIHlvdXIgUEFUSCIgIiRMSU5FTk8iIDUKKyAgICAgICAgZmkKKworICAgICAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImdhY3V0aWwiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGdhY3V0aWw7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX0dBQ1VUSUwrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRHQUNVVElMIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX0dBQ1VUSUw9IiRHQUNVVElMIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcGF0aF9HQUNVVElMPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIDs7Citlc2FjCitmaQorR0FDVVRJTD0kYWNfY3ZfcGF0aF9HQUNVVElMCitpZiB0ZXN0IC1uICIkR0FDVVRJTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRHQUNVVElMIiA+JjUKKyRhc19lY2hvICIkR0FDVVRJTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgICAgICAgIGlmIHRlc3QgIngkR0FDVVRJTCIgPSAieCIgOyB0aGVuCisgICAgICAgICAgICBhc19mbl9lcnJvciAkPyAiQ2FuIG5vdCBmaW5kIFwiZ2FjdXRpbFwiIGluIHlvdXIgUEFUSCIgIiRMSU5FTk8iIDUKKyAgICAgICAgZmkKKworCisKKyAgICBmaQorZmkKKyBpZiB0ZXN0ICJ4JEhBVkVfTU9OTyIgPSAieHllcyI7IHRoZW4KKyAgSEFWRV9NT05PX1RSVUU9CisgIEhBVkVfTU9OT19GQUxTRT0nIycKK2Vsc2UKKyAgSEFWRV9NT05PX1RSVUU9JyMnCisgIEhBVkVfTU9OT19GQUxTRT0KK2ZpCisKKworIworIyBDaGVjayBmb3IgbW9ub2RvYyBzdHVmZgorIworSEFWRV9NT05PRE9DPW5vCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbW9ub2RvYyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9tb25vZG9jK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfbW9ub2RvYzsgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorICAgICAgICAgICAgICAgIHllcykgSEFWRV9NT05PRE9DPXllcyA7OworICAgICAgICAgICAgICAgIG5vKSAgSEFWRV9NT05PRE9DPW5vIDs7CisgICAgICAgICAgICAgICAgKikgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLW1vbm9kb2MiICIkTElORU5PIiA1IDs7CisgICAgICAgIGVzYWMKK2Vsc2UKKyAgSEFWRV9NT05PRE9DPXllcworZmkKKworCitpZiB0ZXN0ICJ4JEhBVkVfTU9OTyIgPSAieHllcyIgJiYgdGVzdCAieCRIQVZFX01PTk9ET0MiID0gInh5ZXMiIDsgdGhlbgorCitwa2dfZmFpbGVkPW5vCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBNT05PRE9DIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBNT05PRE9DLi4uICIgPiY2OyB9CisKK2lmIHRlc3QgLW4gIiRNT05PRE9DX0NGTEFHUyI7IHRoZW4KKyAgICBwa2dfY3ZfTU9OT0RPQ19DRkxBR1M9IiRNT05PRE9DX0NGTEFHUyIKKyBlbGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgorICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCisgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcIm1vbm9kb2MgPj0gMS4xLjhcIiI7IH0gPiY1CisgICgkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAibW9ub2RvYyA+PSAxLjEuOCIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCisgIHBrZ19jdl9NT05PRE9DX0NGTEFHUz1gJFBLR19DT05GSUcgLS1jZmxhZ3MgIm1vbm9kb2MgPj0gMS4xLjgiIDI+L2Rldi9udWxsYAorZWxzZQorICBwa2dfZmFpbGVkPXllcworZmkKKyBlbHNlCisgICAgcGtnX2ZhaWxlZD11bnRyaWVkCitmaQoraWYgdGVzdCAtbiAiJE1PTk9ET0NfTElCUyI7IHRoZW4KKyAgICBwa2dfY3ZfTU9OT0RPQ19MSUJTPSIkTU9OT0RPQ19MSUJTIgorIGVsaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCisgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKKyAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwibW9ub2RvYyA+PSAxLjEuOFwiIjsgfSA+JjUKKyAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICJtb25vZG9jID49IDEuMS44IikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgcGtnX2N2X01PTk9ET0NfTElCUz1gJFBLR19DT05GSUcgLS1saWJzICJtb25vZG9jID49IDEuMS44IiAyPi9kZXYvbnVsbGAKK2Vsc2UKKyAgcGtnX2ZhaWxlZD15ZXMKK2ZpCisgZWxzZQorICAgIHBrZ19mYWlsZWQ9dW50cmllZAorZmkKKworCisKK2lmIHRlc3QgJHBrZ19mYWlsZWQgPSB5ZXM7IHRoZW4KKyAgIAl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKworaWYgJFBLR19DT05GSUcgLS1hdGxlYXN0LXBrZ2NvbmZpZy12ZXJzaW9uIDAuMjA7IHRoZW4KKyAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPXllcworZWxzZQorICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9bm8KK2ZpCisgICAgICAgIGlmIHRlc3QgJF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZCA9IHllczsgdGhlbgorCSAgICAgICAgTU9OT0RPQ19QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLXNob3J0LWVycm9ycyAtLXByaW50LWVycm9ycyAibW9ub2RvYyA+PSAxLjEuOCIgMj4mMWAKKyAgICAgICAgZWxzZQorCSAgICAgICAgTU9OT0RPQ19QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLXByaW50LWVycm9ycyAibW9ub2RvYyA+PSAxLjEuOCIgMj4mMWAKKyAgICAgICAgZmkKKwkjIFB1dCB0aGUgbmFzdHkgZXJyb3IgbWVzc2FnZSBpbiBjb25maWcubG9nIHdoZXJlIGl0IGJlbG9uZ3MKKwllY2hvICIkTU9OT0RPQ19QS0dfRVJST1JTIiA+JjUKKworCWFzX2ZuX2Vycm9yICQ/ICJQYWNrYWdlIHJlcXVpcmVtZW50cyAobW9ub2RvYyA+PSAxLjEuOCkgd2VyZSBub3QgbWV0OgorCiskTU9OT0RPQ19QS0dfRVJST1JTCisKK0NvbnNpZGVyIGFkanVzdGluZyB0aGUgUEtHX0NPTkZJR19QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlIGlmIHlvdQoraW5zdGFsbGVkIHNvZnR3YXJlIGluIGEgbm9uLXN0YW5kYXJkIHByZWZpeC4KKworQWx0ZXJuYXRpdmVseSwgeW91IG1heSBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBNT05PRE9DX0NGTEFHUworYW5kIE1PTk9ET0NfTElCUyB0byBhdm9pZCB0aGUgbmVlZCB0byBjYWxsIHBrZy1jb25maWcuCitTZWUgdGhlIHBrZy1jb25maWcgbWFuIHBhZ2UgZm9yIG1vcmUgZGV0YWlscy4iICIkTElORU5PIiA1CisKK2VsaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHVudHJpZWQ7IHRoZW4KKyAgICAgCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCXsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgJD8gIlRoZSBwa2ctY29uZmlnIHNjcmlwdCBjb3VsZCBub3QgYmUgZm91bmQgb3IgaXMgdG9vIG9sZC4gIE1ha2Ugc3VyZSBpdAoraXMgaW4geW91ciBQQVRIIG9yIHNldCB0aGUgUEtHX0NPTkZJRyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUgZnVsbAorcGF0aCB0byBwa2ctY29uZmlnLgorCitBbHRlcm5hdGl2ZWx5LCB5b3UgbWF5IHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIE1PTk9ET0NfQ0ZMQUdTCithbmQgTU9OT0RPQ19MSUJTIHRvIGF2b2lkIHRoZSBuZWVkIHRvIGNhbGwgcGtnLWNvbmZpZy4KK1NlZSB0aGUgcGtnLWNvbmZpZyBtYW4gcGFnZSBmb3IgbW9yZSBkZXRhaWxzLgorCitUbyBnZXQgcGtnLWNvbmZpZywgc2VlIDxodHRwOi8vcGtnLWNvbmZpZy5mcmVlZGVza3RvcC5vcmcvPi4KK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CisKK2Vsc2UKKwlNT05PRE9DX0NGTEFHUz0kcGtnX2N2X01PTk9ET0NfQ0ZMQUdTCisJTU9OT0RPQ19MSUJTPSRwa2dfY3ZfTU9OT0RPQ19MSUJTCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKK2ZpCisgICAgICAgIE1PTk9ET0NfRElSPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXNvdXJjZXNkaXIgbW9ub2RvY2AKKworICAgICAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm1vbm9kb2NlciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgbW9ub2RvY2VyOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9NT05PRE9DRVIrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRNT05PRE9DRVIgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfTU9OT0RPQ0VSPSIkTU9OT0RPQ0VSIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcGF0aF9NT05PRE9DRVI9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgOzsKK2VzYWMKK2ZpCitNT05PRE9DRVI9JGFjX2N2X3BhdGhfTU9OT0RPQ0VSCitpZiB0ZXN0IC1uICIkTU9OT0RPQ0VSIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1PTk9ET0NFUiIgPiY1CiskYXNfZWNobyAiJE1PTk9ET0NFUiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgICAgICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibWRhc3NlbWJsZXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IG1kYXNzZW1ibGVyOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9NREFTU0VNQkxFUis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJE1EQVNTRU1CTEVSIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX01EQVNTRU1CTEVSPSIkTURBU1NFTUJMRVIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX01EQVNTRU1CTEVSPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIDs7Citlc2FjCitmaQorTURBU1NFTUJMRVI9JGFjX2N2X3BhdGhfTURBU1NFTUJMRVIKK2lmIHRlc3QgLW4gIiRNREFTU0VNQkxFUiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNREFTU0VNQkxFUiIgPiY1CiskYXNfZWNobyAiJE1EQVNTRU1CTEVSIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKworCisKKworZmkKKyBpZiB0ZXN0ICJ4JEhBVkVfTU9OT0RPQyIgPSAieHllcyI7IHRoZW4KKyAgSEFWRV9NT05PRE9DX1RSVUU9CisgIEhBVkVfTU9OT0RPQ19GQUxTRT0nIycKK2Vsc2UKKyAgSEFWRV9NT05PRE9DX1RSVUU9JyMnCisgIEhBVkVfTU9OT0RPQ19GQUxTRT0KK2ZpCisKKworIworIyBCdWlsZCBhdXRvaXBkPworIworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWF1dG9pcGQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfYXV0b2lwZCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2F1dG9pcGQ7IGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKyAgICAgICAgICAgICAgICB5ZXMpIEVOQUJMRV9BVVRPSVBEPXllcyA7OworICAgICAgICAgICAgICAgIG5vKSAgRU5BQkxFX0FVVE9JUEQ9bm8gOzsKKyAgICAgICAgICAgICAgICAqKSBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1kaXNhYmxlLWF1dG9pcGQiICIkTElORU5PIiA1IDs7CisgICAgICAgIGVzYWMKK2Vsc2UKKyAgRU5BQkxFX0FVVE9JUEQ9eWVzCitmaQorCisKKyBpZiB0ZXN0ICJ4JEVOQUJMRV9BVVRPSVBEIiA9ICJ4eWVzIjsgdGhlbgorICBFTkFCTEVfQVVUT0lQRF9UUlVFPQorICBFTkFCTEVfQVVUT0lQRF9GQUxTRT0nIycKK2Vsc2UKKyAgRU5BQkxFX0FVVE9JUERfVFJVRT0nIycKKyAgRU5BQkxFX0FVVE9JUERfRkFMU0U9CitmaQorCisKKyMKKyMgRGVmaW5pbmcgdXNlcnMgYW5kIGdyb3VwcworIworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWF2YWhpX3VzZXIgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2F2YWhpX3VzZXIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2F2YWhpX3VzZXI7CitmaQorCitpZiB0ZXN0IC16ICIkd2l0aF9hdmFoaV91c2VyIiA7IHRoZW4KKyAgICBBVkFISV9VU0VSPWF2YWhpCitlbHNlCisgICAgQVZBSElfVVNFUj0kd2l0aF9hdmFoaV91c2VyCitmaQorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgQVZBSElfVVNFUiAiJEFWQUhJX1VTRVIiCitfQUNFT0YKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtYXZhaGlfZ3JvdXAgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2F2YWhpX2dyb3VwK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9hdmFoaV9ncm91cDsKK2ZpCisKK2lmIHRlc3QgLXogIiR3aXRoX2F2YWhpX2dyb3VwIiA7IHRoZW4KKyAgICBBVkFISV9HUk9VUD1hdmFoaQorZWxzZQorICAgIEFWQUhJX0dST1VQPSR3aXRoX2F2YWhpX2dyb3VwCitmaQorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgQVZBSElfR1JPVVAgIiRBVkFISV9HUk9VUCIKK19BQ0VPRgorCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1hdmFoaV9wcml2X2FjY2Vzc19ncm91cCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfYXZhaGlfcHJpdl9hY2Nlc3NfZ3JvdXArc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2F2YWhpX3ByaXZfYWNjZXNzX2dyb3VwOworZmkKKworaWYgdGVzdCAteiAiJHdpdGhfYXZhaGlfcHJpdl9hY2Nlc3NfZ3JvdXAiIDsgdGhlbgorICAgIEFWQUhJX1BSSVZfQUNDRVNTX0dST1VQPW5ldGRldgorZWxzZQorICAgIEFWQUhJX1BSSVZfQUNDRVNTX0dST1VQPSR3aXRoX2F2YWhpX3ByaXZfYWNjZXNzX2dyb3VwCitmaQorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgQVZBSElfUFJJVl9BQ0NFU1NfR1JPVVAgIiRBVkFISV9QUklWX0FDQ0VTU19HUk9VUCIKK19BQ0VPRgorCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1hdXRvaXBkX3VzZXIgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2F1dG9pcGRfdXNlcitzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfYXV0b2lwZF91c2VyOworZmkKKworaWYgdGVzdCAteiAiJHdpdGhfYXV0b2lwZF91c2VyIiA7IHRoZW4KKyAgICBBVkFISV9BVVRPSVBEX1VTRVI9YXZhaGktYXV0b2lwZAorZWxzZQorICAgIEFWQUhJX0FVVE9JUERfVVNFUj0kd2l0aF9hdXRvaXBkX3VzZXIKK2ZpCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBBVkFISV9BVVRPSVBEX1VTRVIgIiRBVkFISV9BVVRPSVBEX1VTRVIiCitfQUNFT0YKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtYXV0b2lwZF9ncm91cCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfYXV0b2lwZF9ncm91cCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfYXV0b2lwZF9ncm91cDsKK2ZpCisKK2lmIHRlc3QgLXogIiR3aXRoX2F1dG9pcGRfZ3JvdXAiIDsgdGhlbgorICAgIEFWQUhJX0FVVE9JUERfR1JPVVA9YXZhaGktYXV0b2lwZAorZWxzZQorICAgIEFWQUhJX0FVVE9JUERfR1JPVVA9JHdpdGhfYXV0b2lwZF9ncm91cAorZmkKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEFWQUhJX0FVVE9JUERfR1JPVVAgIiRBVkFISV9BVVRPSVBEX0dST1VQIgorX0FDRU9GCisKKworIworIyBBdmFoaSBydW50aW1lIGRpcgorIworYXZhaGlfcnVudGltZV9kaXI9IiR7bG9jYWxzdGF0ZWRpcn0vcnVuIgorYXZhaGlfc29ja2V0PSIke2F2YWhpX3J1bnRpbWVfZGlyfS9hdmFoaS1kYWVtb24vc29ja2V0IgorCisKKworIworIyBBdmFoaSBpbnRlcmZhY2VzIGRpcgorIworaWYgdGVzdCAieCRIQVZFX1BZVEhPTl9EQlVTIiA9ICJ4eWVzIiAtbyAieCRIQVZFX0dUSyIgPSAieHllcyI7IHRoZW4KKwlpbnRlcmZhY2VzZGlyPSIke2RhdGFkaXJ9LyR7UEFDS0FHRX0vaW50ZXJmYWNlcy8iCisKK2ZpCisKKyMKKyMgRG94eWdlbgorIworCisKKworCisKKworCisKKworCisjIEZpbGVzOgorRFhfUFJPSkVDVD1hdmFoaQorCitEWF9DT05GSUc9ZG94eWdlbi5jZmcKKworRFhfRE9DRElSPWRveHlnZW4KKworCisjIEVudmlyb25tZW50IHZhcmlhYmxlcyB1c2VkIGluc2lkZSBkb3h5Z2VuLmNmZzoKK0RYX0VOVj0iJERYX0VOViBTUkNESVI9JyRzcmNkaXInIgorCitEWF9FTlY9IiREWF9FTlYgUFJPSkVDVD0nJERYX1BST0pFQ1QnIgorCitEWF9FTlY9IiREWF9FTlYgRE9DRElSPSckRFhfRE9DRElSJyIKKworRFhfRU5WPSIkRFhfRU5WIFZFUlNJT049JyRQQUNLQUdFX1ZFUlNJT04nIgorCisKKyMgRG94eWdlbiBpdHNlbGY6CisKKworCisgICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRveHlnZW4tZG9jIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2RveHlnZW5fZG9jK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfZG94eWdlbl9kb2M7CitjYXNlICIkZW5hYmxldmFsIiBpbgorIygKK3l8WXx5ZXN8WWVzfFlFUykKKyAgICBEWF9GTEFHX2RvYz0xCisKKworOzsgIygKK258Tnxub3xOb3xOTykKKyAgICBEWF9GTEFHX2RvYz0wCisKKzs7ICMoCisqKQorICAgIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIHZhbHVlICckZW5hYmxldmFsJyBnaXZlbiB0byBkb3h5Z2VuLWRvYyIgIiRMSU5FTk8iIDUKKzs7Citlc2FjCisKK2Vsc2UKKworRFhfRkxBR19kb2M9MQorCisKKworZmkKKworaWYgdGVzdCAiJERYX0ZMQUdfZG9jIiA9IDE7IHRoZW4KKworaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9ZG94eWdlbiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1kb3h5Z2VuOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9EWF9ET1hZR0VOKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkRFhfRE9YWUdFTiBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9EWF9ET1hZR0VOPSIkRFhfRE9YWUdFTiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfRFhfRE9YWUdFTj0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICA7OworZXNhYworZmkKK0RYX0RPWFlHRU49JGFjX2N2X3BhdGhfRFhfRE9YWUdFTgoraWYgdGVzdCAtbiAiJERYX0RPWFlHRU4iOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkRFhfRE9YWUdFTiIgPiY1CiskYXNfZWNobyAiJERYX0RPWFlHRU4iID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wYXRoX0RYX0RPWFlHRU4iOyB0aGVuCisgIGFjX3B0X0RYX0RPWFlHRU49JERYX0RPWFlHRU4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJkb3h5Z2VuIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBkb3h5Z2VuOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9hY19wdF9EWF9ET1hZR0VOKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkYWNfcHRfRFhfRE9YWUdFTiBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9hY19wdF9EWF9ET1hZR0VOPSIkYWNfcHRfRFhfRE9YWUdFTiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfYWNfcHRfRFhfRE9YWUdFTj0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICA7OworZXNhYworZmkKK2FjX3B0X0RYX0RPWFlHRU49JGFjX2N2X3BhdGhfYWNfcHRfRFhfRE9YWUdFTgoraWYgdGVzdCAtbiAiJGFjX3B0X0RYX0RPWFlHRU4iOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcHRfRFhfRE9YWUdFTiIgPiY1CiskYXNfZWNobyAiJGFjX3B0X0RYX0RPWFlHRU4iID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19wdF9EWF9ET1hZR0VOIiA9IHg7IHRoZW4KKyAgICBEWF9ET1hZR0VOPSIiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgRFhfRE9YWUdFTj0kYWNfcHRfRFhfRE9YWUdFTgorICBmaQorZWxzZQorICBEWF9ET1hZR0VOPSIkYWNfY3ZfcGF0aF9EWF9ET1hZR0VOIgorZmkKKworaWYgdGVzdCAiJERYX0ZMQUdfZG9jJERYX0RPWFlHRU4iID0gMTsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogZG94eWdlbiBub3QgZm91bmQgLSB3aWxsIG5vdCBnZW5lcmF0ZSBhbnkgZG94eWdlbiBkb2N1bWVudGF0aW9uIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGRveHlnZW4gbm90IGZvdW5kIC0gd2lsbCBub3QgZ2VuZXJhdGUgYW55IGRveHlnZW4gZG9jdW1lbnRhdGlvbiIgPiYyO30KKyAgICBEWF9GTEFHX2RvYz0wCisKK2ZpCisKKworaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9cGVybCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1wZXJsOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9EWF9QRVJMKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkRFhfUEVSTCBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9EWF9QRVJMPSIkRFhfUEVSTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfRFhfUEVSTD0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICA7OworZXNhYworZmkKK0RYX1BFUkw9JGFjX2N2X3BhdGhfRFhfUEVSTAoraWYgdGVzdCAtbiAiJERYX1BFUkwiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkRFhfUEVSTCIgPiY1CiskYXNfZWNobyAiJERYX1BFUkwiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wYXRoX0RYX1BFUkwiOyB0aGVuCisgIGFjX3B0X0RYX1BFUkw9JERYX1BFUkwKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJwZXJsIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBwZXJsOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9hY19wdF9EWF9QRVJMKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkYWNfcHRfRFhfUEVSTCBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9hY19wdF9EWF9QRVJMPSIkYWNfcHRfRFhfUEVSTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfYWNfcHRfRFhfUEVSTD0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICA7OworZXNhYworZmkKK2FjX3B0X0RYX1BFUkw9JGFjX2N2X3BhdGhfYWNfcHRfRFhfUEVSTAoraWYgdGVzdCAtbiAiJGFjX3B0X0RYX1BFUkwiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcHRfRFhfUEVSTCIgPiY1CiskYXNfZWNobyAiJGFjX3B0X0RYX1BFUkwiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19wdF9EWF9QRVJMIiA9IHg7IHRoZW4KKyAgICBEWF9QRVJMPSIiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgRFhfUEVSTD0kYWNfcHRfRFhfUEVSTAorICBmaQorZWxzZQorICBEWF9QRVJMPSIkYWNfY3ZfcGF0aF9EWF9QRVJMIgorZmkKKworaWYgdGVzdCAiJERYX0ZMQUdfZG9jJERYX1BFUkwiID0gMTsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogcGVybCBub3QgZm91bmQgLSB3aWxsIG5vdCBnZW5lcmF0ZSBhbnkgZG94eWdlbiBkb2N1bWVudGF0aW9uIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHBlcmwgbm90IGZvdW5kIC0gd2lsbCBub3QgZ2VuZXJhdGUgYW55IGRveHlnZW4gZG9jdW1lbnRhdGlvbiIgPiYyO30KKyAgICBEWF9GTEFHX2RvYz0wCisKK2ZpCisKKyAgICA6CitmaQoraWYgdGVzdCAiJERYX0ZMQUdfZG9jIiA9IDE7IHRoZW4KKyAgICAgaWYgOjsgdGhlbgorICBEWF9DT05EX2RvY19UUlVFPQorICBEWF9DT05EX2RvY19GQUxTRT0nIycKK2Vsc2UKKyAgRFhfQ09ORF9kb2NfVFJVRT0nIycKKyAgRFhfQ09ORF9kb2NfRkFMU0U9CitmaQorCisgICAgRFhfRU5WPSIkRFhfRU5WIFBFUkxfUEFUSD0nJERYX1BFUkwnIgorCisgICAgOgorZWxzZQorICAgICBpZiBmYWxzZTsgdGhlbgorICBEWF9DT05EX2RvY19UUlVFPQorICBEWF9DT05EX2RvY19GQUxTRT0nIycKK2Vsc2UKKyAgRFhfQ09ORF9kb2NfVFJVRT0nIycKKyAgRFhfQ09ORF9kb2NfRkFMU0U9CitmaQorCisKKyAgICA6CitmaQorCisKKyMgRG90IGZvciBncmFwaGljczoKKworCisKKyAgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZG94eWdlbi1kb3Qgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZG94eWdlbl9kb3Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9kb3h5Z2VuX2RvdDsKK2Nhc2UgIiRlbmFibGV2YWwiIGluCisjKAoreXxZfHllc3xZZXN8WUVTKQorICAgIERYX0ZMQUdfZG90PTEKKworCit0ZXN0ICIkRFhfRkxBR19kb2MiID0gIjEiIFwKK3x8IGFzX2ZuX2Vycm9yICQ/ICJkb3h5Z2VuLWRvdCByZXF1aXJlcyBkb3h5Z2VuLWRvdCIgIiRMSU5FTk8iIDUKKworOzsgIygKK258Tnxub3xOb3xOTykKKyAgICBEWF9GTEFHX2RvdD0wCisKKzs7ICMoCisqKQorICAgIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIHZhbHVlICckZW5hYmxldmFsJyBnaXZlbiB0byBkb3h5Z2VuLWRvdCIgIiRMSU5FTk8iIDUKKzs7Citlc2FjCisKK2Vsc2UKKworRFhfRkxBR19kb3Q9MQorCisKK3Rlc3QgIiREWF9GTEFHX2RvYyIgPSAiMSIgfHwgRFhfRkxBR19kb3Q9MAorCisKKworZmkKKworaWYgdGVzdCAiJERYX0ZMQUdfZG90IiA9IDE7IHRoZW4KKworaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9ZG90Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWRvdDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfRFhfRE9UKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkRFhfRE9UIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX0RYX0RPVD0iJERYX0RPVCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfRFhfRE9UPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIDs7Citlc2FjCitmaQorRFhfRE9UPSRhY19jdl9wYXRoX0RYX0RPVAoraWYgdGVzdCAtbiAiJERYX0RPVCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICREWF9ET1QiID4mNQorJGFzX2VjaG8gIiREWF9ET1QiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wYXRoX0RYX0RPVCI7IHRoZW4KKyAgYWNfcHRfRFhfRE9UPSREWF9ET1QKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJkb3QiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGRvdDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfYWNfcHRfRFhfRE9UKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkYWNfcHRfRFhfRE9UIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX2FjX3B0X0RYX0RPVD0iJGFjX3B0X0RYX0RPVCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfYWNfcHRfRFhfRE9UPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIDs7Citlc2FjCitmaQorYWNfcHRfRFhfRE9UPSRhY19jdl9wYXRoX2FjX3B0X0RYX0RPVAoraWYgdGVzdCAtbiAiJGFjX3B0X0RYX0RPVCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19wdF9EWF9ET1QiID4mNQorJGFzX2VjaG8gIiRhY19wdF9EWF9ET1QiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19wdF9EWF9ET1QiID0geDsgdGhlbgorICAgIERYX0RPVD0iIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIERYX0RPVD0kYWNfcHRfRFhfRE9UCisgIGZpCitlbHNlCisgIERYX0RPVD0iJGFjX2N2X3BhdGhfRFhfRE9UIgorZmkKKworaWYgdGVzdCAiJERYX0ZMQUdfZG90JERYX0RPVCIgPSAxOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBkb3Qgbm90IGZvdW5kIC0gd2lsbCBub3QgZ2VuZXJhdGUgZ3JhcGhpY3MgZm9yIGRveHlnZW4gZG9jdW1lbnRhdGlvbiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBkb3Qgbm90IGZvdW5kIC0gd2lsbCBub3QgZ2VuZXJhdGUgZ3JhcGhpY3MgZm9yIGRveHlnZW4gZG9jdW1lbnRhdGlvbiIgPiYyO30KKyAgICBEWF9GTEFHX2RvdD0wCisKK2ZpCisKKyAgICA6CitmaQoraWYgdGVzdCAiJERYX0ZMQUdfZG90IiA9IDE7IHRoZW4KKyAgICAgaWYgOjsgdGhlbgorICBEWF9DT05EX2RvdF9UUlVFPQorICBEWF9DT05EX2RvdF9GQUxTRT0nIycKK2Vsc2UKKyAgRFhfQ09ORF9kb3RfVFJVRT0nIycKKyAgRFhfQ09ORF9kb3RfRkFMU0U9CitmaQorCisgICAgRFhfRU5WPSIkRFhfRU5WIEhBVkVfRE9UPSdZRVMnIgorCisgICAgICAgICAgICAgRFhfRU5WPSIkRFhfRU5WIERPVF9QQVRIPSdgZXhwciAiLiREWF9ET1QiIDogJ1woXC5cKVteL10qJCcgXHwgIngkRFhfRE9UIiA6ICd4XCguKlwpL1teL10qJCdgJyIKKworICAgIDoKK2Vsc2UKKyAgICAgaWYgZmFsc2U7IHRoZW4KKyAgRFhfQ09ORF9kb3RfVFJVRT0KKyAgRFhfQ09ORF9kb3RfRkFMU0U9JyMnCitlbHNlCisgIERYX0NPTkRfZG90X1RSVUU9JyMnCisgIERYX0NPTkRfZG90X0ZBTFNFPQorZmkKKworICAgIERYX0VOVj0iJERYX0VOViBIQVZFX0RPVD0nTk8nIgorCisgICAgOgorZmkKKworCisjIE1hbiBwYWdlcyBnZW5lcmF0aW9uOgorCisKKworICAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1kb3h5Z2VuLW1hbiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9kb3h5Z2VuX21hbitzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2RveHlnZW5fbWFuOworY2FzZSAiJGVuYWJsZXZhbCIgaW4KKyMoCit5fFl8eWVzfFllc3xZRVMpCisgICAgRFhfRkxBR19tYW49MQorCisKK3Rlc3QgIiREWF9GTEFHX2RvYyIgPSAiMSIgXAorfHwgYXNfZm5fZXJyb3IgJD8gImRveHlnZW4tbWFuIHJlcXVpcmVzIGRveHlnZW4tbWFuIiAiJExJTkVOTyIgNQorCis7OyAjKAorbnxOfG5vfE5vfE5PKQorICAgIERYX0ZMQUdfbWFuPTAKKworOzsgIygKKyopCisgICAgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgdmFsdWUgJyRlbmFibGV2YWwnIGdpdmVuIHRvIGRveHlnZW4tbWFuIiAiJExJTkVOTyIgNQorOzsKK2VzYWMKKworZWxzZQorCitEWF9GTEFHX21hbj0wCisKKwordGVzdCAiJERYX0ZMQUdfZG9jIiA9ICIxIiB8fCBEWF9GTEFHX21hbj0wCisKKworCitmaQorCitpZiB0ZXN0ICIkRFhfRkxBR19tYW4iID0gMTsgdGhlbgorCisgICAgOgorZmkKK2lmIHRlc3QgIiREWF9GTEFHX21hbiIgPSAxOyB0aGVuCisgICAgIGlmIDo7IHRoZW4KKyAgRFhfQ09ORF9tYW5fVFJVRT0KKyAgRFhfQ09ORF9tYW5fRkFMU0U9JyMnCitlbHNlCisgIERYX0NPTkRfbWFuX1RSVUU9JyMnCisgIERYX0NPTkRfbWFuX0ZBTFNFPQorZmkKKworICAgIERYX0VOVj0iJERYX0VOViBHRU5FUkFURV9NQU49J1lFUyciCisKKyAgICA6CitlbHNlCisgICAgIGlmIGZhbHNlOyB0aGVuCisgIERYX0NPTkRfbWFuX1RSVUU9CisgIERYX0NPTkRfbWFuX0ZBTFNFPScjJworZWxzZQorICBEWF9DT05EX21hbl9UUlVFPScjJworICBEWF9DT05EX21hbl9GQUxTRT0KK2ZpCisKKyAgICBEWF9FTlY9IiREWF9FTlYgR0VORVJBVEVfTUFOPSdOTyciCisKKyAgICA6CitmaQorCisKKyMgUlRGIGZpbGUgZ2VuZXJhdGlvbjoKKworCisKKyAgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZG94eWdlbi1ydGYgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZG94eWdlbl9ydGYrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9kb3h5Z2VuX3J0ZjsKK2Nhc2UgIiRlbmFibGV2YWwiIGluCisjKAoreXxZfHllc3xZZXN8WUVTKQorICAgIERYX0ZMQUdfcnRmPTEKKworCit0ZXN0ICIkRFhfRkxBR19kb2MiID0gIjEiIFwKK3x8IGFzX2ZuX2Vycm9yICQ/ICJkb3h5Z2VuLXJ0ZiByZXF1aXJlcyBkb3h5Z2VuLXJ0ZiIgIiRMSU5FTk8iIDUKKworOzsgIygKK258Tnxub3xOb3xOTykKKyAgICBEWF9GTEFHX3J0Zj0wCisKKzs7ICMoCisqKQorICAgIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIHZhbHVlICckZW5hYmxldmFsJyBnaXZlbiB0byBkb3h5Z2VuLXJ0ZiIgIiRMSU5FTk8iIDUKKzs7Citlc2FjCisKK2Vsc2UKKworRFhfRkxBR19ydGY9MAorCisKK3Rlc3QgIiREWF9GTEFHX2RvYyIgPSAiMSIgfHwgRFhfRkxBR19ydGY9MAorCisKKworZmkKKworaWYgdGVzdCAiJERYX0ZMQUdfcnRmIiA9IDE7IHRoZW4KKworICAgIDoKK2ZpCitpZiB0ZXN0ICIkRFhfRkxBR19ydGYiID0gMTsgdGhlbgorICAgICBpZiA6OyB0aGVuCisgIERYX0NPTkRfcnRmX1RSVUU9CisgIERYX0NPTkRfcnRmX0ZBTFNFPScjJworZWxzZQorICBEWF9DT05EX3J0Zl9UUlVFPScjJworICBEWF9DT05EX3J0Zl9GQUxTRT0KK2ZpCisKKyAgICBEWF9FTlY9IiREWF9FTlYgR0VORVJBVEVfUlRGPSdZRVMnIgorCisgICAgOgorZWxzZQorICAgICBpZiBmYWxzZTsgdGhlbgorICBEWF9DT05EX3J0Zl9UUlVFPQorICBEWF9DT05EX3J0Zl9GQUxTRT0nIycKK2Vsc2UKKyAgRFhfQ09ORF9ydGZfVFJVRT0nIycKKyAgRFhfQ09ORF9ydGZfRkFMU0U9CitmaQorCisgICAgRFhfRU5WPSIkRFhfRU5WIEdFTkVSQVRFX1JURj0nTk8nIgorCisgICAgOgorZmkKKworCisjIFhNTCBmaWxlIGdlbmVyYXRpb246CisKKworCisgICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRveHlnZW4teG1sIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2RveHlnZW5feG1sK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfZG94eWdlbl94bWw7CitjYXNlICIkZW5hYmxldmFsIiBpbgorIygKK3l8WXx5ZXN8WWVzfFlFUykKKyAgICBEWF9GTEFHX3htbD0xCisKKwordGVzdCAiJERYX0ZMQUdfZG9jIiA9ICIxIiBcCit8fCBhc19mbl9lcnJvciAkPyAiZG94eWdlbi14bWwgcmVxdWlyZXMgZG94eWdlbi14bWwiICIkTElORU5PIiA1CisKKzs7ICMoCitufE58bm98Tm98Tk8pCisgICAgRFhfRkxBR194bWw9MAorCis7OyAjKAorKikKKyAgICBhc19mbl9lcnJvciAkPyAiaW52YWxpZCB2YWx1ZSAnJGVuYWJsZXZhbCcgZ2l2ZW4gdG8gZG94eWdlbi14bWwiICIkTElORU5PIiA1Cis7OworZXNhYworCitlbHNlCisKK0RYX0ZMQUdfeG1sPTEKKworCit0ZXN0ICIkRFhfRkxBR19kb2MiID0gIjEiIHx8IERYX0ZMQUdfeG1sPTAKKworCisKK2ZpCisKK2lmIHRlc3QgIiREWF9GTEFHX3htbCIgPSAxOyB0aGVuCisKKyAgICA6CitmaQoraWYgdGVzdCAiJERYX0ZMQUdfeG1sIiA9IDE7IHRoZW4KKyAgICAgaWYgOjsgdGhlbgorICBEWF9DT05EX3htbF9UUlVFPQorICBEWF9DT05EX3htbF9GQUxTRT0nIycKK2Vsc2UKKyAgRFhfQ09ORF94bWxfVFJVRT0nIycKKyAgRFhfQ09ORF94bWxfRkFMU0U9CitmaQorCisgICAgRFhfRU5WPSIkRFhfRU5WIEdFTkVSQVRFX1hNTD0nWUVTJyIKKworICAgIDoKK2Vsc2UKKyAgICAgaWYgZmFsc2U7IHRoZW4KKyAgRFhfQ09ORF94bWxfVFJVRT0KKyAgRFhfQ09ORF94bWxfRkFMU0U9JyMnCitlbHNlCisgIERYX0NPTkRfeG1sX1RSVUU9JyMnCisgIERYX0NPTkRfeG1sX0ZBTFNFPQorZmkKKworICAgIERYX0VOVj0iJERYX0VOViBHRU5FUkFURV9YTUw9J05PJyIKKworICAgIDoKK2ZpCisKKworIyAoQ29tcHJlc3NlZCkgSFRNTCBoZWxwIGdlbmVyYXRpb246CisKKworCisgICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRveHlnZW4tY2htIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2RveHlnZW5fY2htK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfZG94eWdlbl9jaG07CitjYXNlICIkZW5hYmxldmFsIiBpbgorIygKK3l8WXx5ZXN8WWVzfFlFUykKKyAgICBEWF9GTEFHX2NobT0xCisKKwordGVzdCAiJERYX0ZMQUdfZG9jIiA9ICIxIiBcCit8fCBhc19mbl9lcnJvciAkPyAiZG94eWdlbi1jaG0gcmVxdWlyZXMgZG94eWdlbi1jaG0iICIkTElORU5PIiA1CisKKzs7ICMoCitufE58bm98Tm98Tk8pCisgICAgRFhfRkxBR19jaG09MAorCis7OyAjKAorKikKKyAgICBhc19mbl9lcnJvciAkPyAiaW52YWxpZCB2YWx1ZSAnJGVuYWJsZXZhbCcgZ2l2ZW4gdG8gZG94eWdlbi1jaG0iICIkTElORU5PIiA1Cis7OworZXNhYworCitlbHNlCisKK0RYX0ZMQUdfY2htPTAKKworCit0ZXN0ICIkRFhfRkxBR19kb2MiID0gIjEiIHx8IERYX0ZMQUdfY2htPTAKKworCisKK2ZpCisKK2lmIHRlc3QgIiREWF9GTEFHX2NobSIgPSAxOyB0aGVuCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWhoYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1oaGM7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX0RYX0hIQys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJERYX0hIQyBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9EWF9ISEM9IiREWF9ISEMiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX0RYX0hIQz0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICA7OworZXNhYworZmkKK0RYX0hIQz0kYWNfY3ZfcGF0aF9EWF9ISEMKK2lmIHRlc3QgLW4gIiREWF9ISEMiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkRFhfSEhDIiA+JjUKKyRhc19lY2hvICIkRFhfSEhDIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9EWF9ISEMiOyB0aGVuCisgIGFjX3B0X0RYX0hIQz0kRFhfSEhDCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiaGhjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBoaGM7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX2FjX3B0X0RYX0hIQys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJGFjX3B0X0RYX0hIQyBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9hY19wdF9EWF9ISEM9IiRhY19wdF9EWF9ISEMiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX2FjX3B0X0RYX0hIQz0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICA7OworZXNhYworZmkKK2FjX3B0X0RYX0hIQz0kYWNfY3ZfcGF0aF9hY19wdF9EWF9ISEMKK2lmIHRlc3QgLW4gIiRhY19wdF9EWF9ISEMiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcHRfRFhfSEhDIiA+JjUKKyRhc19lY2hvICIkYWNfcHRfRFhfSEhDIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfcHRfRFhfSEhDIiA9IHg7IHRoZW4KKyAgICBEWF9ISEM9IiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBEWF9ISEM9JGFjX3B0X0RYX0hIQworICBmaQorZWxzZQorICBEWF9ISEM9IiRhY19jdl9wYXRoX0RYX0hIQyIKK2ZpCisKK2lmIHRlc3QgIiREWF9GTEFHX2NobSREWF9ISEMiID0gMTsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogaGhjIG5vdCBmb3VuZCAtIHdpbGwgbm90IGdlbmVyYXRlIGRveHlnZW4gY29tcHJlc3NlZCBIVE1MIGhlbHAgZG9jdW1lbnRhdGlvbiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBoaGMgbm90IGZvdW5kIC0gd2lsbCBub3QgZ2VuZXJhdGUgZG94eWdlbiBjb21wcmVzc2VkIEhUTUwgaGVscCBkb2N1bWVudGF0aW9uIiA+JjI7fQorICAgIERYX0ZMQUdfY2htPTAKKworZmkKKworICAgIDoKK2ZpCitpZiB0ZXN0ICIkRFhfRkxBR19jaG0iID0gMTsgdGhlbgorICAgICBpZiA6OyB0aGVuCisgIERYX0NPTkRfY2htX1RSVUU9CisgIERYX0NPTkRfY2htX0ZBTFNFPScjJworZWxzZQorICBEWF9DT05EX2NobV9UUlVFPScjJworICBEWF9DT05EX2NobV9GQUxTRT0KK2ZpCisKKyAgICBEWF9FTlY9IiREWF9FTlYgSEhDX1BBVEg9JyREWF9ISEMnIgorCisgICAgICAgICAgICAgRFhfRU5WPSIkRFhfRU5WIEdFTkVSQVRFX0hUTUw9J1lFUyciCisKKyAgICAgICAgICAgICBEWF9FTlY9IiREWF9FTlYgR0VORVJBVEVfSFRNTEhFTFA9J1lFUyciCisKKyAgICA6CitlbHNlCisgICAgIGlmIGZhbHNlOyB0aGVuCisgIERYX0NPTkRfY2htX1RSVUU9CisgIERYX0NPTkRfY2htX0ZBTFNFPScjJworZWxzZQorICBEWF9DT05EX2NobV9UUlVFPScjJworICBEWF9DT05EX2NobV9GQUxTRT0KK2ZpCisKKyAgICBEWF9FTlY9IiREWF9FTlYgR0VORVJBVEVfSFRNTEhFTFA9J05PJyIKKworICAgIDoKK2ZpCisKKworIyBTZXBlcmF0ZSBDSEkgZmlsZSBnZW5lcmF0aW9uLgorCisKKworICAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1kb3h5Z2VuLWNoaSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9kb3h5Z2VuX2NoaStzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2RveHlnZW5fY2hpOworY2FzZSAiJGVuYWJsZXZhbCIgaW4KKyMoCit5fFl8eWVzfFllc3xZRVMpCisgICAgRFhfRkxBR19jaGk9MQorCisKK3Rlc3QgIiREWF9GTEFHX2NobSIgPSAiMSIgXAorfHwgYXNfZm5fZXJyb3IgJD8gImRveHlnZW4tY2hpIHJlcXVpcmVzIGRveHlnZW4tY2hpIiAiJExJTkVOTyIgNQorCis7OyAjKAorbnxOfG5vfE5vfE5PKQorICAgIERYX0ZMQUdfY2hpPTAKKworOzsgIygKKyopCisgICAgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgdmFsdWUgJyRlbmFibGV2YWwnIGdpdmVuIHRvIGRveHlnZW4tY2hpIiAiJExJTkVOTyIgNQorOzsKK2VzYWMKKworZWxzZQorCitEWF9GTEFHX2NoaT0wCisKKwordGVzdCAiJERYX0ZMQUdfY2htIiA9ICIxIiB8fCBEWF9GTEFHX2NoaT0wCisKKworCitmaQorCitpZiB0ZXN0ICIkRFhfRkxBR19jaGkiID0gMTsgdGhlbgorCisgICAgOgorZmkKK2lmIHRlc3QgIiREWF9GTEFHX2NoaSIgPSAxOyB0aGVuCisgICAgIGlmIDo7IHRoZW4KKyAgRFhfQ09ORF9jaGlfVFJVRT0KKyAgRFhfQ09ORF9jaGlfRkFMU0U9JyMnCitlbHNlCisgIERYX0NPTkRfY2hpX1RSVUU9JyMnCisgIERYX0NPTkRfY2hpX0ZBTFNFPQorZmkKKworICAgIERYX0VOVj0iJERYX0VOViBHRU5FUkFURV9DSEk9J1lFUyciCisKKyAgICA6CitlbHNlCisgICAgIGlmIGZhbHNlOyB0aGVuCisgIERYX0NPTkRfY2hpX1RSVUU9CisgIERYX0NPTkRfY2hpX0ZBTFNFPScjJworZWxzZQorICBEWF9DT05EX2NoaV9UUlVFPScjJworICBEWF9DT05EX2NoaV9GQUxTRT0KK2ZpCisKKyAgICBEWF9FTlY9IiREWF9FTlYgR0VORVJBVEVfQ0hJPSdOTyciCisKKyAgICA6CitmaQorCisKKyMgUGxhaW4gSFRNTCBwYWdlcyBnZW5lcmF0aW9uOgorCisKKworICAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1kb3h5Z2VuLWh0bWwgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZG94eWdlbl9odG1sK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfZG94eWdlbl9odG1sOworY2FzZSAiJGVuYWJsZXZhbCIgaW4KKyMoCit5fFl8eWVzfFllc3xZRVMpCisgICAgRFhfRkxBR19odG1sPTEKKworCit0ZXN0ICIkRFhfRkxBR19kb2MiID0gIjEiIFwKK3x8IGFzX2ZuX2Vycm9yICQ/ICJkb3h5Z2VuLWh0bWwgcmVxdWlyZXMgZG94eWdlbi1odG1sIiAiJExJTkVOTyIgNQorCit0ZXN0ICIkRFhfRkxBR19jaG0iID0gIjAiIFwKK3x8IGFzX2ZuX2Vycm9yICQ/ICJkb3h5Z2VuLWh0bWwgY29udHJhZGljdHMgZG94eWdlbi1odG1sIiAiJExJTkVOTyIgNQorCis7OyAjKAorbnxOfG5vfE5vfE5PKQorICAgIERYX0ZMQUdfaHRtbD0wCisKKzs7ICMoCisqKQorICAgIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIHZhbHVlICckZW5hYmxldmFsJyBnaXZlbiB0byBkb3h5Z2VuLWh0bWwiICIkTElORU5PIiA1Cis7OworZXNhYworCitlbHNlCisKK0RYX0ZMQUdfaHRtbD0xCisKKwordGVzdCAiJERYX0ZMQUdfZG9jIiA9ICIxIiB8fCBEWF9GTEFHX2h0bWw9MAorCisKK3Rlc3QgIiREWF9GTEFHX2NobSIgPSAiMCIgfHwgRFhfRkxBR19odG1sPTAKKworCisKK2ZpCisKK2lmIHRlc3QgIiREWF9GTEFHX2h0bWwiID0gMTsgdGhlbgorCisgICAgOgorZmkKK2lmIHRlc3QgIiREWF9GTEFHX2h0bWwiID0gMTsgdGhlbgorICAgICBpZiA6OyB0aGVuCisgIERYX0NPTkRfaHRtbF9UUlVFPQorICBEWF9DT05EX2h0bWxfRkFMU0U9JyMnCitlbHNlCisgIERYX0NPTkRfaHRtbF9UUlVFPScjJworICBEWF9DT05EX2h0bWxfRkFMU0U9CitmaQorCisgICAgRFhfRU5WPSIkRFhfRU5WIEdFTkVSQVRFX0hUTUw9J1lFUyciCisKKyAgICA6CitlbHNlCisgICAgIGlmIGZhbHNlOyB0aGVuCisgIERYX0NPTkRfaHRtbF9UUlVFPQorICBEWF9DT05EX2h0bWxfRkFMU0U9JyMnCitlbHNlCisgIERYX0NPTkRfaHRtbF9UUlVFPScjJworICBEWF9DT05EX2h0bWxfRkFMU0U9CitmaQorCisgICAgdGVzdCAiJERYX0ZMQUdfY2htIiA9IDEgfHwgRFhfRU5WPSIkRFhfRU5WIEdFTkVSQVRFX0hUTUw9J05PJyIKKworICAgIDoKK2ZpCisKKworIyBQb3N0U2NyaXB0IGZpbGUgZ2VuZXJhdGlvbjoKKworCisKKyAgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZG94eWdlbi1wcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9kb3h5Z2VuX3BzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfZG94eWdlbl9wczsKK2Nhc2UgIiRlbmFibGV2YWwiIGluCisjKAoreXxZfHllc3xZZXN8WUVTKQorICAgIERYX0ZMQUdfcHM9MQorCisKK3Rlc3QgIiREWF9GTEFHX2RvYyIgPSAiMSIgXAorfHwgYXNfZm5fZXJyb3IgJD8gImRveHlnZW4tcHMgcmVxdWlyZXMgZG94eWdlbi1wcyIgIiRMSU5FTk8iIDUKKworOzsgIygKK258Tnxub3xOb3xOTykKKyAgICBEWF9GTEFHX3BzPTAKKworOzsgIygKKyopCisgICAgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgdmFsdWUgJyRlbmFibGV2YWwnIGdpdmVuIHRvIGRveHlnZW4tcHMiICIkTElORU5PIiA1Cis7OworZXNhYworCitlbHNlCisKK0RYX0ZMQUdfcHM9MAorCisKK3Rlc3QgIiREWF9GTEFHX2RvYyIgPSAiMSIgfHwgRFhfRkxBR19wcz0wCisKKworCitmaQorCitpZiB0ZXN0ICIkRFhfRkxBR19wcyIgPSAxOyB0aGVuCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWxhdGV4Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWxhdGV4OyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9EWF9MQVRFWCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJERYX0xBVEVYIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX0RYX0xBVEVYPSIkRFhfTEFURVgiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX0RYX0xBVEVYPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIDs7Citlc2FjCitmaQorRFhfTEFURVg9JGFjX2N2X3BhdGhfRFhfTEFURVgKK2lmIHRlc3QgLW4gIiREWF9MQVRFWCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICREWF9MQVRFWCIgPiY1CiskYXNfZWNobyAiJERYX0xBVEVYIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9EWF9MQVRFWCI7IHRoZW4KKyAgYWNfcHRfRFhfTEFURVg9JERYX0xBVEVYCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibGF0ZXgiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGxhdGV4OyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9hY19wdF9EWF9MQVRFWCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJGFjX3B0X0RYX0xBVEVYIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX2FjX3B0X0RYX0xBVEVYPSIkYWNfcHRfRFhfTEFURVgiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX2FjX3B0X0RYX0xBVEVYPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIDs7Citlc2FjCitmaQorYWNfcHRfRFhfTEFURVg9JGFjX2N2X3BhdGhfYWNfcHRfRFhfTEFURVgKK2lmIHRlc3QgLW4gIiRhY19wdF9EWF9MQVRFWCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19wdF9EWF9MQVRFWCIgPiY1CiskYXNfZWNobyAiJGFjX3B0X0RYX0xBVEVYIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfcHRfRFhfTEFURVgiID0geDsgdGhlbgorICAgIERYX0xBVEVYPSIiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgRFhfTEFURVg9JGFjX3B0X0RYX0xBVEVYCisgIGZpCitlbHNlCisgIERYX0xBVEVYPSIkYWNfY3ZfcGF0aF9EWF9MQVRFWCIKK2ZpCisKK2lmIHRlc3QgIiREWF9GTEFHX3BzJERYX0xBVEVYIiA9IDE7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IGxhdGV4IG5vdCBmb3VuZCAtIHdpbGwgbm90IGdlbmVyYXRlIGRveHlnZW4gUG9zdFNjcmlwdCBkb2N1bWVudGF0aW9uIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGxhdGV4IG5vdCBmb3VuZCAtIHdpbGwgbm90IGdlbmVyYXRlIGRveHlnZW4gUG9zdFNjcmlwdCBkb2N1bWVudGF0aW9uIiA+JjI7fQorICAgIERYX0ZMQUdfcHM9MAorCitmaQorCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW1ha2VpbmRleCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1tYWtlaW5kZXg7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX0RYX01BS0VJTkRFWCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJERYX01BS0VJTkRFWCBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9EWF9NQUtFSU5ERVg9IiREWF9NQUtFSU5ERVgiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX0RYX01BS0VJTkRFWD0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICA7OworZXNhYworZmkKK0RYX01BS0VJTkRFWD0kYWNfY3ZfcGF0aF9EWF9NQUtFSU5ERVgKK2lmIHRlc3QgLW4gIiREWF9NQUtFSU5ERVgiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkRFhfTUFLRUlOREVYIiA+JjUKKyRhc19lY2hvICIkRFhfTUFLRUlOREVYIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9EWF9NQUtFSU5ERVgiOyB0aGVuCisgIGFjX3B0X0RYX01BS0VJTkRFWD0kRFhfTUFLRUlOREVYCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibWFrZWluZGV4Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBtYWtlaW5kZXg7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX2FjX3B0X0RYX01BS0VJTkRFWCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJGFjX3B0X0RYX01BS0VJTkRFWCBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9hY19wdF9EWF9NQUtFSU5ERVg9IiRhY19wdF9EWF9NQUtFSU5ERVgiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX2FjX3B0X0RYX01BS0VJTkRFWD0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICA7OworZXNhYworZmkKK2FjX3B0X0RYX01BS0VJTkRFWD0kYWNfY3ZfcGF0aF9hY19wdF9EWF9NQUtFSU5ERVgKK2lmIHRlc3QgLW4gIiRhY19wdF9EWF9NQUtFSU5ERVgiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcHRfRFhfTUFLRUlOREVYIiA+JjUKKyRhc19lY2hvICIkYWNfcHRfRFhfTUFLRUlOREVYIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfcHRfRFhfTUFLRUlOREVYIiA9IHg7IHRoZW4KKyAgICBEWF9NQUtFSU5ERVg9IiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBEWF9NQUtFSU5ERVg9JGFjX3B0X0RYX01BS0VJTkRFWAorICBmaQorZWxzZQorICBEWF9NQUtFSU5ERVg9IiRhY19jdl9wYXRoX0RYX01BS0VJTkRFWCIKK2ZpCisKK2lmIHRlc3QgIiREWF9GTEFHX3BzJERYX01BS0VJTkRFWCIgPSAxOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBtYWtlaW5kZXggbm90IGZvdW5kIC0gd2lsbCBub3QgZ2VuZXJhdGUgZG94eWdlbiBQb3N0U2NyaXB0IGRvY3VtZW50YXRpb24iID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogbWFrZWluZGV4IG5vdCBmb3VuZCAtIHdpbGwgbm90IGdlbmVyYXRlIGRveHlnZW4gUG9zdFNjcmlwdCBkb2N1bWVudGF0aW9uIiA+JjI7fQorICAgIERYX0ZMQUdfcHM9MAorCitmaQorCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWR2aXBzIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWR2aXBzOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9EWF9EVklQUys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJERYX0RWSVBTIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX0RYX0RWSVBTPSIkRFhfRFZJUFMiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX0RYX0RWSVBTPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIDs7Citlc2FjCitmaQorRFhfRFZJUFM9JGFjX2N2X3BhdGhfRFhfRFZJUFMKK2lmIHRlc3QgLW4gIiREWF9EVklQUyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICREWF9EVklQUyIgPiY1CiskYXNfZWNobyAiJERYX0RWSVBTIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9EWF9EVklQUyI7IHRoZW4KKyAgYWNfcHRfRFhfRFZJUFM9JERYX0RWSVBTCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZHZpcHMiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGR2aXBzOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9hY19wdF9EWF9EVklQUys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJGFjX3B0X0RYX0RWSVBTIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX2FjX3B0X0RYX0RWSVBTPSIkYWNfcHRfRFhfRFZJUFMiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX2FjX3B0X0RYX0RWSVBTPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIDs7Citlc2FjCitmaQorYWNfcHRfRFhfRFZJUFM9JGFjX2N2X3BhdGhfYWNfcHRfRFhfRFZJUFMKK2lmIHRlc3QgLW4gIiRhY19wdF9EWF9EVklQUyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19wdF9EWF9EVklQUyIgPiY1CiskYXNfZWNobyAiJGFjX3B0X0RYX0RWSVBTIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfcHRfRFhfRFZJUFMiID0geDsgdGhlbgorICAgIERYX0RWSVBTPSIiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgRFhfRFZJUFM9JGFjX3B0X0RYX0RWSVBTCisgIGZpCitlbHNlCisgIERYX0RWSVBTPSIkYWNfY3ZfcGF0aF9EWF9EVklQUyIKK2ZpCisKK2lmIHRlc3QgIiREWF9GTEFHX3BzJERYX0RWSVBTIiA9IDE7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IGR2aXBzIG5vdCBmb3VuZCAtIHdpbGwgbm90IGdlbmVyYXRlIGRveHlnZW4gUG9zdFNjcmlwdCBkb2N1bWVudGF0aW9uIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGR2aXBzIG5vdCBmb3VuZCAtIHdpbGwgbm90IGdlbmVyYXRlIGRveHlnZW4gUG9zdFNjcmlwdCBkb2N1bWVudGF0aW9uIiA+JjI7fQorICAgIERYX0ZMQUdfcHM9MAorCitmaQorCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWVncmVwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWVncmVwOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9EWF9FR1JFUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJERYX0VHUkVQIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX0RYX0VHUkVQPSIkRFhfRUdSRVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX0RYX0VHUkVQPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIDs7Citlc2FjCitmaQorRFhfRUdSRVA9JGFjX2N2X3BhdGhfRFhfRUdSRVAKK2lmIHRlc3QgLW4gIiREWF9FR1JFUCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICREWF9FR1JFUCIgPiY1CiskYXNfZWNobyAiJERYX0VHUkVQIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9EWF9FR1JFUCI7IHRoZW4KKyAgYWNfcHRfRFhfRUdSRVA9JERYX0VHUkVQCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZWdyZXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGVncmVwOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9hY19wdF9EWF9FR1JFUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJGFjX3B0X0RYX0VHUkVQIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX2FjX3B0X0RYX0VHUkVQPSIkYWNfcHRfRFhfRUdSRVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX2FjX3B0X0RYX0VHUkVQPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIDs7Citlc2FjCitmaQorYWNfcHRfRFhfRUdSRVA9JGFjX2N2X3BhdGhfYWNfcHRfRFhfRUdSRVAKK2lmIHRlc3QgLW4gIiRhY19wdF9EWF9FR1JFUCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19wdF9EWF9FR1JFUCIgPiY1CiskYXNfZWNobyAiJGFjX3B0X0RYX0VHUkVQIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfcHRfRFhfRUdSRVAiID0geDsgdGhlbgorICAgIERYX0VHUkVQPSIiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgRFhfRUdSRVA9JGFjX3B0X0RYX0VHUkVQCisgIGZpCitlbHNlCisgIERYX0VHUkVQPSIkYWNfY3ZfcGF0aF9EWF9FR1JFUCIKK2ZpCisKK2lmIHRlc3QgIiREWF9GTEFHX3BzJERYX0VHUkVQIiA9IDE7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IGVncmVwIG5vdCBmb3VuZCAtIHdpbGwgbm90IGdlbmVyYXRlIGRveHlnZW4gUG9zdFNjcmlwdCBkb2N1bWVudGF0aW9uIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGVncmVwIG5vdCBmb3VuZCAtIHdpbGwgbm90IGdlbmVyYXRlIGRveHlnZW4gUG9zdFNjcmlwdCBkb2N1bWVudGF0aW9uIiA+JjI7fQorICAgIERYX0ZMQUdfcHM9MAorCitmaQorCisgICAgOgorZmkKK2lmIHRlc3QgIiREWF9GTEFHX3BzIiA9IDE7IHRoZW4KKyAgICAgaWYgOjsgdGhlbgorICBEWF9DT05EX3BzX1RSVUU9CisgIERYX0NPTkRfcHNfRkFMU0U9JyMnCitlbHNlCisgIERYX0NPTkRfcHNfVFJVRT0nIycKKyAgRFhfQ09ORF9wc19GQUxTRT0KK2ZpCisKKworICAgIDoKK2Vsc2UKKyAgICAgaWYgZmFsc2U7IHRoZW4KKyAgRFhfQ09ORF9wc19UUlVFPQorICBEWF9DT05EX3BzX0ZBTFNFPScjJworZWxzZQorICBEWF9DT05EX3BzX1RSVUU9JyMnCisgIERYX0NPTkRfcHNfRkFMU0U9CitmaQorCisKKyAgICA6CitmaQorCisKKyMgUERGIGZpbGUgZ2VuZXJhdGlvbjoKKworCisKKyAgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZG94eWdlbi1wZGYgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZG94eWdlbl9wZGYrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9kb3h5Z2VuX3BkZjsKK2Nhc2UgIiRlbmFibGV2YWwiIGluCisjKAoreXxZfHllc3xZZXN8WUVTKQorICAgIERYX0ZMQUdfcGRmPTEKKworCit0ZXN0ICIkRFhfRkxBR19kb2MiID0gIjEiIFwKK3x8IGFzX2ZuX2Vycm9yICQ/ICJkb3h5Z2VuLXBkZiByZXF1aXJlcyBkb3h5Z2VuLXBkZiIgIiRMSU5FTk8iIDUKKworOzsgIygKK258Tnxub3xOb3xOTykKKyAgICBEWF9GTEFHX3BkZj0wCisKKzs7ICMoCisqKQorICAgIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIHZhbHVlICckZW5hYmxldmFsJyBnaXZlbiB0byBkb3h5Z2VuLXBkZiIgIiRMSU5FTk8iIDUKKzs7Citlc2FjCisKK2Vsc2UKKworRFhfRkxBR19wZGY9MAorCisKK3Rlc3QgIiREWF9GTEFHX2RvYyIgPSAiMSIgfHwgRFhfRkxBR19wZGY9MAorCisKKworZmkKKworaWYgdGVzdCAiJERYX0ZMQUdfcGRmIiA9IDE7IHRoZW4KKworaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9cGRmbGF0ZXgiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9cGRmbGF0ZXg7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX0RYX1BERkxBVEVYKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkRFhfUERGTEFURVggaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfRFhfUERGTEFURVg9IiREWF9QREZMQVRFWCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfRFhfUERGTEFURVg9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgOzsKK2VzYWMKK2ZpCitEWF9QREZMQVRFWD0kYWNfY3ZfcGF0aF9EWF9QREZMQVRFWAoraWYgdGVzdCAtbiAiJERYX1BERkxBVEVYIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJERYX1BERkxBVEVYIiA+JjUKKyRhc19lY2hvICIkRFhfUERGTEFURVgiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wYXRoX0RYX1BERkxBVEVYIjsgdGhlbgorICBhY19wdF9EWF9QREZMQVRFWD0kRFhfUERGTEFURVgKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJwZGZsYXRleCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgcGRmbGF0ZXg7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX2FjX3B0X0RYX1BERkxBVEVYKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkYWNfcHRfRFhfUERGTEFURVggaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfYWNfcHRfRFhfUERGTEFURVg9IiRhY19wdF9EWF9QREZMQVRFWCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfYWNfcHRfRFhfUERGTEFURVg9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgOzsKK2VzYWMKK2ZpCithY19wdF9EWF9QREZMQVRFWD0kYWNfY3ZfcGF0aF9hY19wdF9EWF9QREZMQVRFWAoraWYgdGVzdCAtbiAiJGFjX3B0X0RYX1BERkxBVEVYIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3B0X0RYX1BERkxBVEVYIiA+JjUKKyRhc19lY2hvICIkYWNfcHRfRFhfUERGTEFURVgiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19wdF9EWF9QREZMQVRFWCIgPSB4OyB0aGVuCisgICAgRFhfUERGTEFURVg9IiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBEWF9QREZMQVRFWD0kYWNfcHRfRFhfUERGTEFURVgKKyAgZmkKK2Vsc2UKKyAgRFhfUERGTEFURVg9IiRhY19jdl9wYXRoX0RYX1BERkxBVEVYIgorZmkKKworaWYgdGVzdCAiJERYX0ZMQUdfcGRmJERYX1BERkxBVEVYIiA9IDE7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHBkZmxhdGV4IG5vdCBmb3VuZCAtIHdpbGwgbm90IGdlbmVyYXRlIGRveHlnZW4gUERGIGRvY3VtZW50YXRpb24iID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogcGRmbGF0ZXggbm90IGZvdW5kIC0gd2lsbCBub3QgZ2VuZXJhdGUgZG94eWdlbiBQREYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKyAgICBEWF9GTEFHX3BkZj0wCisKK2ZpCisKKworaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9bWFrZWluZGV4Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW1ha2VpbmRleDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfRFhfTUFLRUlOREVYKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkRFhfTUFLRUlOREVYIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX0RYX01BS0VJTkRFWD0iJERYX01BS0VJTkRFWCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfRFhfTUFLRUlOREVYPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIDs7Citlc2FjCitmaQorRFhfTUFLRUlOREVYPSRhY19jdl9wYXRoX0RYX01BS0VJTkRFWAoraWYgdGVzdCAtbiAiJERYX01BS0VJTkRFWCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICREWF9NQUtFSU5ERVgiID4mNQorJGFzX2VjaG8gIiREWF9NQUtFSU5ERVgiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wYXRoX0RYX01BS0VJTkRFWCI7IHRoZW4KKyAgYWNfcHRfRFhfTUFLRUlOREVYPSREWF9NQUtFSU5ERVgKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJtYWtlaW5kZXgiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IG1ha2VpbmRleDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfYWNfcHRfRFhfTUFLRUlOREVYKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkYWNfcHRfRFhfTUFLRUlOREVYIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX2FjX3B0X0RYX01BS0VJTkRFWD0iJGFjX3B0X0RYX01BS0VJTkRFWCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfYWNfcHRfRFhfTUFLRUlOREVYPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIDs7Citlc2FjCitmaQorYWNfcHRfRFhfTUFLRUlOREVYPSRhY19jdl9wYXRoX2FjX3B0X0RYX01BS0VJTkRFWAoraWYgdGVzdCAtbiAiJGFjX3B0X0RYX01BS0VJTkRFWCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19wdF9EWF9NQUtFSU5ERVgiID4mNQorJGFzX2VjaG8gIiRhY19wdF9EWF9NQUtFSU5ERVgiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19wdF9EWF9NQUtFSU5ERVgiID0geDsgdGhlbgorICAgIERYX01BS0VJTkRFWD0iIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIERYX01BS0VJTkRFWD0kYWNfcHRfRFhfTUFLRUlOREVYCisgIGZpCitlbHNlCisgIERYX01BS0VJTkRFWD0iJGFjX2N2X3BhdGhfRFhfTUFLRUlOREVYIgorZmkKKworaWYgdGVzdCAiJERYX0ZMQUdfcGRmJERYX01BS0VJTkRFWCIgPSAxOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBtYWtlaW5kZXggbm90IGZvdW5kIC0gd2lsbCBub3QgZ2VuZXJhdGUgZG94eWdlbiBQREYgZG9jdW1lbnRhdGlvbiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBtYWtlaW5kZXggbm90IGZvdW5kIC0gd2lsbCBub3QgZ2VuZXJhdGUgZG94eWdlbiBQREYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKyAgICBEWF9GTEFHX3BkZj0wCisKK2ZpCisKKworaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9ZWdyZXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9ZWdyZXA7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX0RYX0VHUkVQKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkRFhfRUdSRVAgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfRFhfRUdSRVA9IiREWF9FR1JFUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfRFhfRUdSRVA9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgOzsKK2VzYWMKK2ZpCitEWF9FR1JFUD0kYWNfY3ZfcGF0aF9EWF9FR1JFUAoraWYgdGVzdCAtbiAiJERYX0VHUkVQIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJERYX0VHUkVQIiA+JjUKKyRhc19lY2hvICIkRFhfRUdSRVAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wYXRoX0RYX0VHUkVQIjsgdGhlbgorICBhY19wdF9EWF9FR1JFUD0kRFhfRUdSRVAKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJlZ3JlcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgZWdyZXA7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX2FjX3B0X0RYX0VHUkVQKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkYWNfcHRfRFhfRUdSRVAgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfYWNfcHRfRFhfRUdSRVA9IiRhY19wdF9EWF9FR1JFUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfYWNfcHRfRFhfRUdSRVA9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgOzsKK2VzYWMKK2ZpCithY19wdF9EWF9FR1JFUD0kYWNfY3ZfcGF0aF9hY19wdF9EWF9FR1JFUAoraWYgdGVzdCAtbiAiJGFjX3B0X0RYX0VHUkVQIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3B0X0RYX0VHUkVQIiA+JjUKKyRhc19lY2hvICIkYWNfcHRfRFhfRUdSRVAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19wdF9EWF9FR1JFUCIgPSB4OyB0aGVuCisgICAgRFhfRUdSRVA9IiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBEWF9FR1JFUD0kYWNfcHRfRFhfRUdSRVAKKyAgZmkKK2Vsc2UKKyAgRFhfRUdSRVA9IiRhY19jdl9wYXRoX0RYX0VHUkVQIgorZmkKKworaWYgdGVzdCAiJERYX0ZMQUdfcGRmJERYX0VHUkVQIiA9IDE7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IGVncmVwIG5vdCBmb3VuZCAtIHdpbGwgbm90IGdlbmVyYXRlIGRveHlnZW4gUERGIGRvY3VtZW50YXRpb24iID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogZWdyZXAgbm90IGZvdW5kIC0gd2lsbCBub3QgZ2VuZXJhdGUgZG94eWdlbiBQREYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKyAgICBEWF9GTEFHX3BkZj0wCisKK2ZpCisKKyAgICA6CitmaQoraWYgdGVzdCAiJERYX0ZMQUdfcGRmIiA9IDE7IHRoZW4KKyAgICAgaWYgOjsgdGhlbgorICBEWF9DT05EX3BkZl9UUlVFPQorICBEWF9DT05EX3BkZl9GQUxTRT0nIycKK2Vsc2UKKyAgRFhfQ09ORF9wZGZfVFJVRT0nIycKKyAgRFhfQ09ORF9wZGZfRkFMU0U9CitmaQorCisKKyAgICA6CitlbHNlCisgICAgIGlmIGZhbHNlOyB0aGVuCisgIERYX0NPTkRfcGRmX1RSVUU9CisgIERYX0NPTkRfcGRmX0ZBTFNFPScjJworZWxzZQorICBEWF9DT05EX3BkZl9UUlVFPScjJworICBEWF9DT05EX3BkZl9GQUxTRT0KK2ZpCisKKworICAgIDoKK2ZpCisKKworIyBMYVRlWCBnZW5lcmF0aW9uIGZvciBQUyBhbmQvb3IgUERGOgoraWYgdGVzdCAiJERYX0ZMQUdfcHMiID0gMSB8fCB0ZXN0ICIkRFhfRkxBR19wZGYiID0gMTsgdGhlbgorICAgICBpZiA6OyB0aGVuCisgIERYX0NPTkRfbGF0ZXhfVFJVRT0KKyAgRFhfQ09ORF9sYXRleF9GQUxTRT0nIycKK2Vsc2UKKyAgRFhfQ09ORF9sYXRleF9UUlVFPScjJworICBEWF9DT05EX2xhdGV4X0ZBTFNFPQorZmkKKworICAgIERYX0VOVj0iJERYX0VOViBHRU5FUkFURV9MQVRFWD0nWUVTJyIKKworZWxzZQorICAgICBpZiBmYWxzZTsgdGhlbgorICBEWF9DT05EX2xhdGV4X1RSVUU9CisgIERYX0NPTkRfbGF0ZXhfRkFMU0U9JyMnCitlbHNlCisgIERYX0NPTkRfbGF0ZXhfVFJVRT0nIycKKyAgRFhfQ09ORF9sYXRleF9GQUxTRT0KK2ZpCisKKyAgICBEWF9FTlY9IiREWF9FTlYgR0VORVJBVEVfTEFURVg9J05PJyIKKworZmkKKworIyBQYXBlciBzaXplIGZvciBQUyBhbmQvb3IgUERGOgorCitjYXNlICIkRE9YWUdFTl9QQVBFUl9TSVpFIiBpbgorIygKKyIiKQorICAgIERPWFlHRU5fUEFQRVJfU0laRT0iIgorCis7OyAjKAorYTR3aWRlfGE0fGxldHRlcnxsZWdhbHxleGVjdXRpdmUpCisgICAgRFhfRU5WPSIkRFhfRU5WIFBBUEVSX1NJWkU9JyRET1hZR0VOX1BBUEVSX1NJWkUnIgorCis7OyAjKAorKikKKyAgICBhc19mbl9lcnJvciAkPyAidW5rbm93biBET1hZR0VOX1BBUEVSX1NJWkU9JyRET1hZR0VOX1BBUEVSX1NJWkUnIiAiJExJTkVOTyIgNQorOzsKK2VzYWMKKworI0ZvciBkZWJ1Z2dpbmc6CisjZWNobyBEWF9GTEFHX2RvYz0kRFhfRkxBR19kb2MKKyNlY2hvIERYX0ZMQUdfZG90PSREWF9GTEFHX2RvdAorI2VjaG8gRFhfRkxBR19tYW49JERYX0ZMQUdfbWFuCisjZWNobyBEWF9GTEFHX2h0bWw9JERYX0ZMQUdfaHRtbAorI2VjaG8gRFhfRkxBR19jaG09JERYX0ZMQUdfY2htCisjZWNobyBEWF9GTEFHX2NoaT0kRFhfRkxBR19jaGkKKyNlY2hvIERYX0ZMQUdfcnRmPSREWF9GTEFHX3J0ZgorI2VjaG8gRFhfRkxBR194bWw9JERYX0ZMQUdfeG1sCisjZWNobyBEWF9GTEFHX3BkZj0kRFhfRkxBR19wZGYKKyNlY2hvIERYX0ZMQUdfcHM9JERYX0ZMQUdfcHMKKyNlY2hvIERYX0VOVj0kRFhfRU5WCisKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWNvcmUtZG9jcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9jb3JlX2RvY3Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9jb3JlX2RvY3M7IGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKyAgeWVzKSBFTkFCTEVfQ09SRV9ET0NTPXllcyA7OworICBubykgIEVOQUJMRV9DT1JFX0RPQ1M9bm8gOzsKKyAgKikgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLWNvcmUtZG9jcyIgIiRMSU5FTk8iIDUgOzsKK2VzYWMKK2Vsc2UKKyAgRU5BQkxFX0NPUkVfRE9DUz1ubworZmkKKworCisgaWYgdGVzdCAieCRFTkFCTEVfQ09SRV9ET0NTIiA9IHh5ZXM7IHRoZW4KKyAgRU5BQkxFX0NPUkVfRE9DU19UUlVFPQorICBFTkFCTEVfQ09SRV9ET0NTX0ZBTFNFPScjJworZWxzZQorICBFTkFCTEVfQ09SRV9ET0NTX1RSVUU9JyMnCisgIEVOQUJMRV9DT1JFX0RPQ1NfRkFMU0U9CitmaQorCisKKyMKKyMgQnVpbGQgYW5kIEluc3RhbGwgbWFuIHBhZ2VzCisjCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbWFucGFnZXMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbWFucGFnZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9tYW5wYWdlczsgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorICB5ZXMpIG1hbnBhZ2VzPXllcyA7OworICBubykgIG1hbnBhZ2VzPW5vIDs7CisgICopIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWRpc2FibGUtbWFucGFnZXMiICIkTElORU5PIiA1IDs7Citlc2FjCitlbHNlCisgIG1hbnBhZ2VzPXllcworZmkKKworCitpZiB0ZXN0IHgkbWFucGFnZXMgPSB4eWVzIDsgdGhlbgorICAgICMKKyAgICAjIFhNTFRPTUFOIG1hbnBhZ2UgZ2VuZXJhdGlvbgorICAgICMKKyAgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUteG1sdG9tYW4gd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfeG1sdG9tYW4rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV94bWx0b21hbjsgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorICAgICAgeWVzKSB4bWx0b21hbj15ZXMgOzsKKyAgICAgIG5vKSAgeG1sdG9tYW49bm8gOzsKKyAgICAgICopIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWRpc2FibGUteG1sdG9tYW4iICIkTElORU5PIiA1IDs7CisgICAgZXNhYworZWxzZQorICB4bWx0b21hbj15ZXMKK2ZpCisKKworICAgIGlmIHRlc3QgeCR4bWx0b21hbiA9IHh5ZXMgOyB0aGVuCisgICAgICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAieG1sdG9tYW4iLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IHhtbHRvbWFuOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19oYXZlX3htbHRvbWFuKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGhhdmVfeG1sdG9tYW4iOyB0aGVuCisgIGFjX2N2X3Byb2dfaGF2ZV94bWx0b21hbj0iJGhhdmVfeG1sdG9tYW4iICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19oYXZlX3htbHRvbWFuPSJ5ZXMiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgdGVzdCAteiAiJGFjX2N2X3Byb2dfaGF2ZV94bWx0b21hbiIgJiYgYWNfY3ZfcHJvZ19oYXZlX3htbHRvbWFuPSJubyIKK2ZpCitmaQoraGF2ZV94bWx0b21hbj0kYWNfY3ZfcHJvZ19oYXZlX3htbHRvbWFuCitpZiB0ZXN0IC1uICIkaGF2ZV94bWx0b21hbiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRoYXZlX3htbHRvbWFuIiA+JjUKKyRhc19lY2hvICIkaGF2ZV94bWx0b21hbiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgICAgZmkKKworICAgIGlmIHRlc3QgeCRoYXZlX3htbHRvbWFuID0geG5vIC1vIHgkeG1sdG9tYW4gPSB4bm87IHRoZW4KKyAgICAgICAgaWYgISB0ZXN0IC1lIG1hbi9hdmFoaS1kYWVtb24uOCA7IHRoZW4KKyAgICAgICAgICAgIGFzX2ZuX2Vycm9yICQ/ICIqKiogeG1sdG9tYW4gd2FzIG5vdCBmb3VuZCBvciB3YXMgZGlzYWJsZWQsIGl0IGlzIHJlcXVpcmVkIHRvIGJ1aWxkIHRoZSBtYW5wYWdlcyBhcyB0aGV5IGhhdmUgbm90IGJlZW4gcHJlLWJ1aWx0LCBpbnN0YWxsIHhtbHRvbWFuLCBwYXNzIC0tZGlzYWJsZS1tYW5wYWdlcyBvciBkb250IHBhc3MgLS1kaXNhYmxlLXhtbHRvbWFuIiAiJExJTkVOTyIgNQorICAgICAgICAgICAgZXhpdCAxCisgICAgICAgIGZpCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogKioqIE5vdCByZWJ1aWxkaW5nIG1hbiBwYWdlcyBhcyB4bWx0b21hbiBpcyBub3QgZm91bmQgKioqIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICoqKiBOb3QgcmVidWlsZGluZyBtYW4gcGFnZXMgYXMgeG1sdG9tYW4gaXMgbm90IGZvdW5kICoqKiIgPiYyO30KKyAgICAgICAgeG1sdG9tYW49bm8KKyAgICBmaQorZmkKKyBpZiB0ZXN0ICJ4JHhtbHRvbWFuIiA9IHh5ZXM7IHRoZW4KKyAgVVNFX1hNTFRPTUFOX1RSVUU9CisgIFVTRV9YTUxUT01BTl9GQUxTRT0nIycKK2Vsc2UKKyAgVVNFX1hNTFRPTUFOX1RSVUU9JyMnCisgIFVTRV9YTUxUT01BTl9GQUxTRT0KK2ZpCisKKyBpZiB0ZXN0ICJ4JG1hbnBhZ2VzIiA9IHh5ZXM7IHRoZW4KKyAgQlVJTERfTUFOUEFHRVNfVFJVRT0KKyAgQlVJTERfTUFOUEFHRVNfRkFMU0U9JyMnCitlbHNlCisgIEJVSUxEX01BTlBBR0VTX1RSVUU9JyMnCisgIEJVSUxEX01BTlBBR0VTX0ZBTFNFPQorZmkKKworCisjCisjIENvbmRpdGlvbmFsbHkgY29tcGlsZSB0ZXN0IGFuZCBleGFtcGxlIHByb2dyYW1zCisjCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtdGVzdHMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfdGVzdHMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV90ZXN0czsgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorICAgICAgICAgICAgICAgIHllcykgRU5BQkxFX1RFU1RTPXllcyA7OworICAgICAgICAgICAgICAgIG5vKSAgRU5BQkxFX1RFU1RTPW5vIDs7CisgICAgICAgICAgICAgICAgKikgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLXRlc3RzIiAiJExJTkVOTyIgNSA7OworICAgICAgICBlc2FjCitlbHNlCisgIEVOQUJMRV9URVNUUz1ubworZmkKKworCisgaWYgdGVzdCAieCRFTkFCTEVfVEVTVFMiID0gInh5ZXMiOyB0aGVuCisgIEVOQUJMRV9URVNUU19UUlVFPQorICBFTkFCTEVfVEVTVFNfRkFMU0U9JyMnCitlbHNlCisgIEVOQUJMRV9URVNUU19UUlVFPScjJworICBFTkFCTEVfVEVTVFNfRkFMU0U9CitmaQorCisKKyMKKyMgT3B0aW9uYWxseSBlbmFibGUgbGliZG5zX3NkIGNvbXBhdGliaWxpdHkgc3VwcG9ydAorIworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWNvbXBhdC1saWJkbnNfc2Qgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfY29tcGF0X2xpYmRuc19zZCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2NvbXBhdF9saWJkbnNfc2Q7IGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKyAgICAgICAgICAgICAgICB5ZXMpIEVOQUJMRV9DT01QQVRfTElCRE5TX1NEPXllcyA7OworICAgICAgICAgICAgICAgIG5vKSAgRU5BQkxFX0NPTVBBVF9MSUJETlNfU0Q9bm8gOzsKKyAgICAgICAgICAgICAgICAqKSBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtY29tcGF0LWxpYmRuc19zZCIgIiRMSU5FTk8iIDUgOzsKKyAgICAgICAgZXNhYworZWxzZQorICBFTkFCTEVfQ09NUEFUX0xJQkROU19TRD1ubworZmkKKworCisgaWYgdGVzdCAieCRFTkFCTEVfQ09NUEFUX0xJQkROU19TRCIgPSAieHllcyI7IHRoZW4KKyAgRU5BQkxFX0NPTVBBVF9MSUJETlNfU0RfVFJVRT0KKyAgRU5BQkxFX0NPTVBBVF9MSUJETlNfU0RfRkFMU0U9JyMnCitlbHNlCisgIEVOQUJMRV9DT01QQVRfTElCRE5TX1NEX1RSVUU9JyMnCisgIEVOQUJMRV9DT01QQVRfTElCRE5TX1NEX0ZBTFNFPQorZmkKKworCisjCisjIE9wdGlvbmFsbHkgZW5hYmxlIEhPV0wgY29tcGF0aWJpbGl0eSBzdXBwb3J0CisjCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtY29tcGF0LWhvd2wgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfY29tcGF0X2hvd2wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9jb21wYXRfaG93bDsgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorICAgICAgICAgICAgICAgIHllcykgRU5BQkxFX0NPTVBBVF9IT1dMPXllcyA7OworICAgICAgICAgICAgICAgIG5vKSAgRU5BQkxFX0NPTVBBVF9IT1dMPW5vIDs7CisgICAgICAgICAgICAgICAgKikgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLWNvbXBhdC1ob3dsIiAiJExJTkVOTyIgNSA7OworICAgICAgICBlc2FjCitlbHNlCisgIEVOQUJMRV9DT01QQVRfSE9XTD1ubworZmkKKworCisgaWYgdGVzdCAieCRFTkFCTEVfQ09NUEFUX0hPV0wiID0gInh5ZXMiOyB0aGVuCisgIEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFPQorICBFTkFCTEVfQ09NUEFUX0hPV0xfRkFMU0U9JyMnCitlbHNlCisgIEVOQUJMRV9DT01QQVRfSE9XTF9UUlVFPScjJworICBFTkFCTEVfQ09NUEFUX0hPV0xfRkFMU0U9CitmaQorCisKKyMKKyMgc3lzdGVtZAorIworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXN5c3RlbWRzeXN0ZW11bml0ZGlyIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9zeXN0ZW1kc3lzdGVtdW5pdGRpcitzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfc3lzdGVtZHN5c3RlbXVuaXRkaXI7CitlbHNlCisgIHdpdGhfc3lzdGVtZHN5c3RlbXVuaXRkaXI9JCgkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXN5c3RlbWRzeXN0ZW11bml0ZGlyIHN5c3RlbWQpCitmaQorCitpZiB0ZXN0ICJ4JHdpdGhfc3lzdGVtZHN5c3RlbXVuaXRkaXIiICE9IHhubzsgdGhlbgorICAgICAgICBzeXN0ZW1kc3lzdGVtdW5pdGRpcj0kd2l0aF9zeXN0ZW1kc3lzdGVtdW5pdGRpcgorCitmaQorIGlmIHRlc3QgLW4gIiR3aXRoX3N5c3RlbWRzeXN0ZW11bml0ZGlyIiAtYSAieCR3aXRoX3N5c3RlbWRzeXN0ZW11bml0ZGlyIiAhPSB4bm8gOyB0aGVuCisgIEhBVkVfU1lTVEVNRF9UUlVFPQorICBIQVZFX1NZU1RFTURfRkFMU0U9JyMnCitlbHNlCisgIEhBVkVfU1lTVEVNRF9UUlVFPScjJworICBIQVZFX1NZU1RFTURfRkFMU0U9CitmaQorCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2FjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBNYWtlZmlsZSBhdmFoaS1jb21tb24vTWFrZWZpbGUgYXZhaGktY29yZS9NYWtlZmlsZSBhdmFoaS1nbGliL01ha2VmaWxlIGF2YWhpLWdvYmplY3QvTWFrZWZpbGUgYXZhaGktcXQvTWFrZWZpbGUgYXZhaGktZGFlbW9uL01ha2VmaWxlIGF2YWhpLWRhZW1vbi9hdmFoaS1kYnVzLmNvbmYgYXZhaGktZGlzY292ZXItc3RhbmRhbG9uZS9NYWtlZmlsZSBhdmFoaS1jbGllbnQvTWFrZWZpbGUgaW5pdHNjcmlwdC9NYWtlZmlsZSBpbml0c2NyaXB0L2RlYmlhbi9NYWtlZmlsZSBpbml0c2NyaXB0L2dlbnRvby9NYWtlZmlsZSBpbml0c2NyaXB0L2FyY2hsaW51eC9NYWtlZmlsZSBpbml0c2NyaXB0L3N1c2UvTWFrZWZpbGUgaW5pdHNjcmlwdC9mZWRvcmEvTWFrZWZpbGUgaW5pdHNjcmlwdC9sZnMvTWFrZWZpbGUgaW5pdHNjcmlwdC9tYW5kcml2YS9NYWtlZmlsZSBpbml0c2NyaXB0L2Rhcndpbi9NYWtlZmlsZSBpbml0c2NyaXB0L2ZyZWVic2QvTWFrZWZpbGUgaW5pdHNjcmlwdC9zbGFja3dhcmUvTWFrZWZpbGUgYXZhaGktZG5zY29uZmQvTWFrZWZpbGUgYXZhaGktdXRpbHMvTWFrZWZpbGUgYXZhaGktcHl0aG9uL01ha2VmaWxlIGF2YWhpLXB5dGhvbi9hdmFoaS9NYWtlZmlsZSBhdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvTWFrZWZpbGUgZXhhbXBsZXMvTWFrZWZpbGUgY29tbW9uL01ha2VmaWxlIG1hbi9NYWtlZmlsZSB0ZXN0cy9NYWtlZmlsZSBzZXJ2aWNlLXR5cGUtZGF0YWJhc2UvTWFrZWZpbGUgYXZhaGktc2hhcnAvTWFrZWZpbGUgYXZhaGktdWktc2hhcnAvTWFrZWZpbGUgYXZhaGktY29tcGF0LWxpYmRuc19zZC9NYWtlZmlsZSBhdmFoaS1jb21wYXQtaG93bC9NYWtlZmlsZSBhdmFoaS1jb21wYXQtaG93bC9zYW1wbGVzL01ha2VmaWxlIGF2YWhpLWF1dG9pcGQvTWFrZWZpbGUgYXZhaGktdWkvTWFrZWZpbGUgcG8vTWFrZWZpbGUuaW4iCisKK2NhdCA+Y29uZmNhY2hlIDw8XF9BQ0VPRgorIyBUaGlzIGZpbGUgaXMgYSBzaGVsbCBzY3JpcHQgdGhhdCBjYWNoZXMgdGhlIHJlc3VsdHMgb2YgY29uZmlndXJlCisjIHRlc3RzIHJ1biBvbiB0aGlzIHN5c3RlbSBzbyB0aGV5IGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBjb25maWd1cmUKKyMgc2NyaXB0cyBhbmQgY29uZmlndXJlIHJ1bnMsIHNlZSBjb25maWd1cmUncyBvcHRpb24gLS1jb25maWctY2FjaGUuCisjIEl0IGlzIG5vdCB1c2VmdWwgb24gb3RoZXIgc3lzdGVtcy4gIElmIGl0IGNvbnRhaW5zIHJlc3VsdHMgeW91IGRvbid0CisjIHdhbnQgdG8ga2VlcCwgeW91IG1heSByZW1vdmUgb3IgZWRpdCBpdC4KKyMKKyMgY29uZmlnLnN0YXR1cyBvbmx5IHBheXMgYXR0ZW50aW9uIHRvIHRoZSBjYWNoZSBmaWxlIGlmIHlvdSBnaXZlIGl0CisjIHRoZSAtLXJlY2hlY2sgb3B0aW9uIHRvIHJlcnVuIGNvbmZpZ3VyZS4KKyMKKyMgYGFjX2N2X2Vudl9mb28nIHZhcmlhYmxlcyAoc2V0IG9yIHVuc2V0KSB3aWxsIGJlIG92ZXJyaWRkZW4gd2hlbgorIyBsb2FkaW5nIHRoaXMgZmlsZSwgb3RoZXIgKnVuc2V0KiBgYWNfY3ZfZm9vJyB3aWxsIGJlIGFzc2lnbmVkIHRoZQorIyBmb2xsb3dpbmcgdmFsdWVzLgorCitfQUNFT0YKKworIyBUaGUgZm9sbG93aW5nIHdheSBvZiB3cml0aW5nIHRoZSBjYWNoZSBtaXNoYW5kbGVzIG5ld2xpbmVzIGluIHZhbHVlcywKKyMgYnV0IHdlIGtub3cgb2Ygbm8gd29ya2Fyb3VuZCB0aGF0IGlzIHNpbXBsZSwgcG9ydGFibGUsIGFuZCBlZmZpY2llbnQuCisjIFNvLCB3ZSBraWxsIHZhcmlhYmxlcyBjb250YWluaW5nIG5ld2xpbmVzLgorIyBVbHRyaXggc2ggc2V0IHdyaXRlcyB0byBzdGRlcnIgYW5kIGNhbid0IGJlIHJlZGlyZWN0ZWQgZGlyZWN0bHksCisjIGFuZCBzZXRzIHRoZSBoaWdoIGJpdCBpbiB0aGUgY2FjaGUgZmlsZSB1bmxlc3Mgd2UgYXNzaWduIHRvIHRoZSB2YXJzLgorKAorICBmb3IgYWNfdmFyIGluIGAoc2V0KSAyPiYxIHwgc2VkIC1uICdzL15cKFthLXpBLVpfXVthLXpBLVowLTlfXSpcKT0uKi9cMS9wJ2A7IGRvCisgICAgZXZhbCBhY192YWw9XCQkYWNfdmFyCisgICAgY2FzZSAkYWNfdmFsIGluICMoCisgICAgKiR7YXNfbmx9KikKKyAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorICAgICAgKl9jdl8qKSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjI7fSA7OworICAgICAgZXNhYworICAgICAgY2FzZSAkYWNfdmFyIGluICMoCisgICAgICBfIHwgSUZTIHwgYXNfbmwpIDs7ICMoCisgICAgICBCQVNIX0FSR1YgfCBCQVNIX1NPVVJDRSkgZXZhbCAkYWNfdmFyPSA7OyAjKAorICAgICAgKikgeyBldmFsICRhY192YXI9OyB1bnNldCAkYWNfdmFyO30gOzsKKyAgICAgIGVzYWMgOzsKKyAgICBlc2FjCisgIGRvbmUKKworICAoc2V0KSAyPiYxIHwKKyAgICBjYXNlICRhc19ubGAoYWNfc3BhY2U9JyAnOyBzZXQpIDI+JjFgIGluICMoCisgICAgKiR7YXNfbmx9YWNfc3BhY2U9XCAqKQorICAgICAgIyBgc2V0JyBkb2VzIG5vdCBxdW90ZSBjb3JyZWN0bHksIHNvIGFkZCBxdW90ZXM6IGRvdWJsZS1xdW90ZQorICAgICAgIyBzdWJzdGl0dXRpb24gdHVybnMgXFxcXCBpbnRvIFxcLCBhbmQgc2VkIHR1cm5zIFxcIGludG8gXC4KKyAgICAgIHNlZCAtbiBcCisJInMvJy8nXFxcXCcnL2c7CisJICBzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPSdcXDInL3AiCisgICAgICA7OyAjKAorICAgICopCisgICAgICAjIGBzZXQnIHF1b3RlcyBjb3JyZWN0bHkgYXMgcmVxdWlyZWQgYnkgUE9TSVgsIHNvIGRvIG5vdCBhZGQgcXVvdGVzLgorICAgICAgc2VkIC1uICIvXltfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKj0vcCIKKyAgICAgIDs7CisgICAgZXNhYyB8CisgICAgc29ydAorKSB8CisgIHNlZCAnCisgICAgIC9eYWNfY3ZfZW52Xy9iIGVuZAorICAgICB0IGNsZWFyCisgICAgIDpjbGVhcgorICAgICBzL15cKFtePV0qXCk9XCguKlt7fV0uKlwpJC90ZXN0ICIke1wxK3NldH0iID0gc2V0IHx8ICYvCisgICAgIHQgZW5kCisgICAgIHMvXlwoW149XSpcKT1cKC4qXCkkL1wxPSR7XDE9XDJ9LworICAgICA6ZW5kJyA+PmNvbmZjYWNoZQoraWYgZGlmZiAiJGNhY2hlX2ZpbGUiIGNvbmZjYWNoZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOjsgZWxzZQorICBpZiB0ZXN0IC13ICIkY2FjaGVfZmlsZSI7IHRoZW4KKyAgICBpZiB0ZXN0ICJ4JGNhY2hlX2ZpbGUiICE9ICJ4L2Rldi9udWxsIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiB1cGRhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiB1cGRhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKyAgICAgIGlmIHRlc3QgISAtZiAiJGNhY2hlX2ZpbGUiIHx8IHRlc3QgLWggIiRjYWNoZV9maWxlIjsgdGhlbgorCWNhdCBjb25mY2FjaGUgPiIkY2FjaGVfZmlsZSIKKyAgICAgIGVsc2UKKyAgICAgICAgY2FzZSAkY2FjaGVfZmlsZSBpbiAjKAorICAgICAgICAqLyogfCA/OiopCisJICBtdiAtZiBjb25mY2FjaGUgIiRjYWNoZV9maWxlIiQkICYmCisJICBtdiAtZiAiJGNhY2hlX2ZpbGUiJCQgIiRjYWNoZV9maWxlIiA7OyAjKAorICAgICAgICAqKQorCSAgbXYgLWYgY29uZmNhY2hlICIkY2FjaGVfZmlsZSIgOzsKKwllc2FjCisgICAgICBmaQorICAgIGZpCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IG5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IG5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQorICBmaQorZmkKK3JtIC1mIGNvbmZjYWNoZQorCit0ZXN0ICJ4JHByZWZpeCIgPSB4Tk9ORSAmJiBwcmVmaXg9JGFjX2RlZmF1bHRfcHJlZml4CisjIExldCBtYWtlIGV4cGFuZCBleGVjX3ByZWZpeC4KK3Rlc3QgIngkZXhlY19wcmVmaXgiID0geE5PTkUgJiYgZXhlY19wcmVmaXg9JyR7cHJlZml4fScKKworREVGUz0tREhBVkVfQ09ORklHX0gKKworYWNfbGlib2Jqcz0KK2FjX2x0bGlib2Jqcz0KK1U9Citmb3IgYWNfaSBpbiA6ICRMSUJPQkpTOyBkbyB0ZXN0ICJ4JGFjX2kiID0geDogJiYgY29udGludWUKKyAgIyAxLiBSZW1vdmUgdGhlIGV4dGVuc2lvbiwgYW5kICRVIGlmIGFscmVhZHkgaW5zdGFsbGVkLgorICBhY19zY3JpcHQ9J3MvXCRVXC4vLi87cy9cLm8kLy87cy9cLm9iaiQvLycKKyAgYWNfaT1gJGFzX2VjaG8gIiRhY19pIiB8IHNlZCAiJGFjX3NjcmlwdCJgCisgICMgMi4gUHJlcGVuZCBMSUJPQkpESVIuICBXaGVuIHVzZWQgd2l0aCBhdXRvbWFrZT49MS4xMCBMSUJPQkpESVIKKyAgIyAgICB3aWxsIGJlIHNldCB0byB0aGUgZGlyZWN0b3J5IHdoZXJlIExJQk9CSlMgb2JqZWN0cyBhcmUgYnVpbHQuCisgIGFzX2ZuX2FwcGVuZCBhY19saWJvYmpzICIgXCR7TElCT0JKRElSfSRhY19pXCRVLiRhY19vYmpleHQiCisgIGFzX2ZuX2FwcGVuZCBhY19sdGxpYm9ianMgIiBcJHtMSUJPQkpESVJ9JGFjX2kiJyRVLmxvJworZG9uZQorTElCT0JKUz0kYWNfbGlib2JqcworCitMVExJQk9CSlM9JGFjX2x0bGlib2JqcworCisKKyBpZiB0ZXN0IC1uICIkRVhFRVhUIjsgdGhlbgorICBhbV9fRVhFRVhUX1RSVUU9CisgIGFtX19FWEVFWFRfRkFMU0U9JyMnCitlbHNlCisgIGFtX19FWEVFWFRfVFJVRT0nIycKKyAgYW1fX0VYRUVYVF9GQUxTRT0KK2ZpCisKK2lmIHRlc3QgLXogIiR7QU1ERVBfVFJVRX0iICYmIHRlc3QgLXogIiR7QU1ERVBfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJBTURFUFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7YW1fX2Zhc3RkZXBDQ19UUlVFfSIgJiYgdGVzdCAteiAiJHthbV9fZmFzdGRlcENDX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiYW1fX2Zhc3RkZXBDQ1wiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7YW1fX2Zhc3RkZXBDWFhfVFJVRX0iICYmIHRlc3QgLXogIiR7YW1fX2Zhc3RkZXBDWFhfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJhbV9fZmFzdGRlcENYWFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7SEFWRV9ORVRMSU5LX1RSVUV9IiAmJiB0ZXN0IC16ICIke0hBVkVfTkVUTElOS19GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkhBVkVfTkVUTElOS1wiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7SEFWRV9QRl9ST1VURV9UUlVFfSIgJiYgdGVzdCAteiAiJHtIQVZFX1BGX1JPVVRFX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiSEFWRV9QRl9ST1VURVwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7SEFWRV9TWVNfRklMSU9fSF9UUlVFfSIgJiYgdGVzdCAteiAiJHtIQVZFX1NZU19GSUxJT19IX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiSEFWRV9TWVNfRklMSU9fSFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7SEFWRV9TWVNfU1lTQ1RMX0hfVFJVRX0iICYmIHRlc3QgLXogIiR7SEFWRV9TWVNfU1lTQ1RMX0hfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJIQVZFX1NZU19TWVNDVExfSFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7VEFSR0VUX0xGU19UUlVFfSIgJiYgdGVzdCAteiAiJHtUQVJHRVRfTEZTX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiVEFSR0VUX0xGU1wiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7VEFSR0VUX1NVU0VfVFJVRX0iICYmIHRlc3QgLXogIiR7VEFSR0VUX1NVU0VfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJUQVJHRVRfU1VTRVwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7VEFSR0VUX0dFTlRPT19UUlVFfSIgJiYgdGVzdCAteiAiJHtUQVJHRVRfR0VOVE9PX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiVEFSR0VUX0dFTlRPT1wiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7VEFSR0VUX0RFQklBTl9UUlVFfSIgJiYgdGVzdCAteiAiJHtUQVJHRVRfREVCSUFOX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiVEFSR0VUX0RFQklBTlwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7VEFSR0VUX0FSQ0hMSU5VWF9UUlVFfSIgJiYgdGVzdCAteiAiJHtUQVJHRVRfQVJDSExJTlVYX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiVEFSR0VUX0FSQ0hMSU5VWFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7VEFSR0VUX0ZFRE9SQV9UUlVFfSIgJiYgdGVzdCAteiAiJHtUQVJHRVRfRkVET1JBX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiVEFSR0VUX0ZFRE9SQVwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7VEFSR0VUX01BTkRSSVZBX1RSVUV9IiAmJiB0ZXN0IC16ICIke1RBUkdFVF9NQU5EUklWQV9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlRBUkdFVF9NQU5EUklWQVwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7VEFSR0VUX0RBUldJTl9UUlVFfSIgJiYgdGVzdCAteiAiJHtUQVJHRVRfREFSV0lOX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiVEFSR0VUX0RBUldJTlwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7VEFSR0VUX05FVEJTRF9UUlVFfSIgJiYgdGVzdCAteiAiJHtUQVJHRVRfTkVUQlNEX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiVEFSR0VUX05FVEJTRFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7VEFSR0VUX0ZSRUVCU0RfVFJVRX0iICYmIHRlc3QgLXogIiR7VEFSR0VUX0ZSRUVCU0RfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJUQVJHRVRfRlJFRUJTRFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7VEFSR0VUX1NMQUNLV0FSRV9UUlVFfSIgJiYgdGVzdCAteiAiJHtUQVJHRVRfU0xBQ0tXQVJFX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiVEFSR0VUX1NMQUNLV0FSRVwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7RU5BQkxFX0NIUk9PVF9UUlVFfSIgJiYgdGVzdCAteiAiJHtFTkFCTEVfQ0hST09UX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiRU5BQkxFX0NIUk9PVFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7SEFWRV9ETE9QRU5fVFJVRX0iICYmIHRlc3QgLXogIiR7SEFWRV9ETE9QRU5fRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJIQVZFX0RMT1BFTlwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7SEFWRV9JTk9USUZZX1RSVUV9IiAmJiB0ZXN0IC16ICIke0hBVkVfSU5PVElGWV9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkhBVkVfSU5PVElGWVwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7SEFWRV9LUVVFVUVfVFJVRX0iICYmIHRlc3QgLXogIiR7SEFWRV9LUVVFVUVfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJIQVZFX0tRVUVVRVwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKKworICBhY19jb25maWdfY29tbWFuZHM9IiRhY19jb25maWdfY29tbWFuZHMgcG8vc3RhbXAtaXQiCisKKworaWYgdGVzdCAteiAiJHtIQVZFX0dMSUJfVFJVRX0iICYmIHRlc3QgLXogIiR7SEFWRV9HTElCX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiSEFWRV9HTElCXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtIQVZFX0dPQkpFQ1RfVFJVRX0iICYmIHRlc3QgLXogIiR7SEFWRV9HT0JKRUNUX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiSEFWRV9HT0JKRUNUXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtIQVZFX0lOVFJPU1BFQ1RJT05fVFJVRX0iICYmIHRlc3QgLXogIiR7SEFWRV9JTlRST1NQRUNUSU9OX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiSEFWRV9JTlRST1NQRUNUSU9OXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtIQVZFX1FUM19UUlVFfSIgJiYgdGVzdCAteiAiJHtIQVZFX1FUM19GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkhBVkVfUVQzXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtIQVZFX1FUNF9UUlVFfSIgJiYgdGVzdCAteiAiJHtIQVZFX1FUNF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkhBVkVfUVQ0XCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtIQVZFX0dUS19UUlVFfSIgJiYgdGVzdCAteiAiJHtIQVZFX0dUS19GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkhBVkVfR1RLXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtIQVZFX0dUSzNfVFJVRX0iICYmIHRlc3QgLXogIiR7SEFWRV9HVEszX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiSEFWRV9HVEszXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtIQVZFX0dUSzJPUjNfVFJVRX0iICYmIHRlc3QgLXogIiR7SEFWRV9HVEsyT1IzX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiSEFWRV9HVEsyT1IzXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtIQVZFX0RCVVNfVFJVRX0iICYmIHRlc3QgLXogIiR7SEFWRV9EQlVTX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiSEFWRV9EQlVTXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtIQVZFX1hNTF9UUlVFfSIgJiYgdGVzdCAteiAiJHtIQVZFX1hNTF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkhBVkVfWE1MXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtIQVZFX0dEQk1fVFJVRX0iICYmIHRlc3QgLXogIiR7SEFWRV9HREJNX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiSEFWRV9HREJNXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtIQVZFX0RCTV9UUlVFfSIgJiYgdGVzdCAteiAiJHtIQVZFX0RCTV9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkhBVkVfREJNXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtIQVZFX0xJQkRBRU1PTl9UUlVFfSIgJiYgdGVzdCAteiAiJHtIQVZFX0xJQkRBRU1PTl9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkhBVkVfTElCREFFTU9OXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtIQVZFX1BZVEhPTl9UUlVFfSIgJiYgdGVzdCAteiAiJHtIQVZFX1BZVEhPTl9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkhBVkVfUFlUSE9OXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtIQVZFX1BZR1RLX1RSVUV9IiAmJiB0ZXN0IC16ICIke0hBVkVfUFlHVEtfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJIQVZFX1BZR1RLXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtIQVZFX1BZVEhPTl9EQlVTX1RSVUV9IiAmJiB0ZXN0IC16ICIke0hBVkVfUFlUSE9OX0RCVVNfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJIQVZFX1BZVEhPTl9EQlVTXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtIQVZFX01PTk9fVFJVRX0iICYmIHRlc3QgLXogIiR7SEFWRV9NT05PX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiSEFWRV9NT05PXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtIQVZFX01PTk9ET0NfVFJVRX0iICYmIHRlc3QgLXogIiR7SEFWRV9NT05PRE9DX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiSEFWRV9NT05PRE9DXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtFTkFCTEVfQVVUT0lQRF9UUlVFfSIgJiYgdGVzdCAteiAiJHtFTkFCTEVfQVVUT0lQRF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkVOQUJMRV9BVVRPSVBEXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtEWF9DT05EX2RvY19UUlVFfSIgJiYgdGVzdCAteiAiJHtEWF9DT05EX2RvY19GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkRYX0NPTkRfZG9jXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtEWF9DT05EX2RvY19UUlVFfSIgJiYgdGVzdCAteiAiJHtEWF9DT05EX2RvY19GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkRYX0NPTkRfZG9jXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtEWF9DT05EX2RvdF9UUlVFfSIgJiYgdGVzdCAteiAiJHtEWF9DT05EX2RvdF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkRYX0NPTkRfZG90XCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtEWF9DT05EX2RvdF9UUlVFfSIgJiYgdGVzdCAteiAiJHtEWF9DT05EX2RvdF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkRYX0NPTkRfZG90XCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtEWF9DT05EX21hbl9UUlVFfSIgJiYgdGVzdCAteiAiJHtEWF9DT05EX21hbl9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkRYX0NPTkRfbWFuXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtEWF9DT05EX21hbl9UUlVFfSIgJiYgdGVzdCAteiAiJHtEWF9DT05EX21hbl9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkRYX0NPTkRfbWFuXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtEWF9DT05EX3J0Zl9UUlVFfSIgJiYgdGVzdCAteiAiJHtEWF9DT05EX3J0Zl9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkRYX0NPTkRfcnRmXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtEWF9DT05EX3J0Zl9UUlVFfSIgJiYgdGVzdCAteiAiJHtEWF9DT05EX3J0Zl9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkRYX0NPTkRfcnRmXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtEWF9DT05EX3htbF9UUlVFfSIgJiYgdGVzdCAteiAiJHtEWF9DT05EX3htbF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkRYX0NPTkRfeG1sXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtEWF9DT05EX3htbF9UUlVFfSIgJiYgdGVzdCAteiAiJHtEWF9DT05EX3htbF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkRYX0NPTkRfeG1sXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtEWF9DT05EX2NobV9UUlVFfSIgJiYgdGVzdCAteiAiJHtEWF9DT05EX2NobV9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkRYX0NPTkRfY2htXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtEWF9DT05EX2NobV9UUlVFfSIgJiYgdGVzdCAteiAiJHtEWF9DT05EX2NobV9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkRYX0NPTkRfY2htXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtEWF9DT05EX2NoaV9UUlVFfSIgJiYgdGVzdCAteiAiJHtEWF9DT05EX2NoaV9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkRYX0NPTkRfY2hpXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtEWF9DT05EX2NoaV9UUlVFfSIgJiYgdGVzdCAteiAiJHtEWF9DT05EX2NoaV9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkRYX0NPTkRfY2hpXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtEWF9DT05EX2h0bWxfVFJVRX0iICYmIHRlc3QgLXogIiR7RFhfQ09ORF9odG1sX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiRFhfQ09ORF9odG1sXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtEWF9DT05EX2h0bWxfVFJVRX0iICYmIHRlc3QgLXogIiR7RFhfQ09ORF9odG1sX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiRFhfQ09ORF9odG1sXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtEWF9DT05EX3BzX1RSVUV9IiAmJiB0ZXN0IC16ICIke0RYX0NPTkRfcHNfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJEWF9DT05EX3BzXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtEWF9DT05EX3BzX1RSVUV9IiAmJiB0ZXN0IC16ICIke0RYX0NPTkRfcHNfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJEWF9DT05EX3BzXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtEWF9DT05EX3BkZl9UUlVFfSIgJiYgdGVzdCAteiAiJHtEWF9DT05EX3BkZl9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkRYX0NPTkRfcGRmXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtEWF9DT05EX3BkZl9UUlVFfSIgJiYgdGVzdCAteiAiJHtEWF9DT05EX3BkZl9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkRYX0NPTkRfcGRmXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtEWF9DT05EX2xhdGV4X1RSVUV9IiAmJiB0ZXN0IC16ICIke0RYX0NPTkRfbGF0ZXhfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJEWF9DT05EX2xhdGV4XCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtEWF9DT05EX2xhdGV4X1RSVUV9IiAmJiB0ZXN0IC16ICIke0RYX0NPTkRfbGF0ZXhfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJEWF9DT05EX2xhdGV4XCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtFTkFCTEVfQ09SRV9ET0NTX1RSVUV9IiAmJiB0ZXN0IC16ICIke0VOQUJMRV9DT1JFX0RPQ1NfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJFTkFCTEVfQ09SRV9ET0NTXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtVU0VfWE1MVE9NQU5fVFJVRX0iICYmIHRlc3QgLXogIiR7VVNFX1hNTFRPTUFOX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiVVNFX1hNTFRPTUFOXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtCVUlMRF9NQU5QQUdFU19UUlVFfSIgJiYgdGVzdCAteiAiJHtCVUlMRF9NQU5QQUdFU19GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkJVSUxEX01BTlBBR0VTXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtFTkFCTEVfVEVTVFNfVFJVRX0iICYmIHRlc3QgLXogIiR7RU5BQkxFX1RFU1RTX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiRU5BQkxFX1RFU1RTXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtFTkFCTEVfQ09NUEFUX0xJQkROU19TRF9UUlVFfSIgJiYgdGVzdCAteiAiJHtFTkFCTEVfQ09NUEFUX0xJQkROU19TRF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkVOQUJMRV9DT01QQVRfTElCRE5TX1NEXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtFTkFCTEVfQ09NUEFUX0hPV0xfVFJVRX0iICYmIHRlc3QgLXogIiR7RU5BQkxFX0NPTVBBVF9IT1dMX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiRU5BQkxFX0NPTVBBVF9IT1dMXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQoraWYgdGVzdCAteiAiJHtIQVZFX1NZU1RFTURfVFJVRX0iICYmIHRlc3QgLXogIiR7SEFWRV9TWVNURU1EX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiSEFWRV9TWVNURU1EXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQorCis6ICIke0NPTkZJR19TVEFUVVM9Li9jb25maWcuc3RhdHVzfSIKK2FjX3dyaXRlX2ZhaWw9MAorYWNfY2xlYW5fZmlsZXNfc2F2ZT0kYWNfY2xlYW5fZmlsZXMKK2FjX2NsZWFuX2ZpbGVzPSIkYWNfY2xlYW5fZmlsZXMgJENPTkZJR19TVEFUVVMiCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiA+JjY7fQorYXNfd3JpdGVfZmFpbD0wCitjYXQgPiRDT05GSUdfU1RBVFVTIDw8X0FTRU9GIHx8IGFzX3dyaXRlX2ZhaWw9MQorIyEgJFNIRUxMCisjIEdlbmVyYXRlZCBieSAkYXNfbWUuCisjIFJ1biB0aGlzIGZpbGUgdG8gcmVjcmVhdGUgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4KKyMgQ29tcGlsZXIgb3V0cHV0IHByb2R1Y2VkIGJ5IGNvbmZpZ3VyZSwgdXNlZnVsIGZvciBkZWJ1Z2dpbmcKKyMgY29uZmlndXJlLCBpcyBpbiBjb25maWcubG9nIGlmIGl0IGV4aXN0cy4KKworZGVidWc9ZmFsc2UKK2FjX2NzX3JlY2hlY2s9ZmFsc2UKK2FjX2NzX3NpbGVudD1mYWxzZQorCitTSEVMTD1cJHtDT05GSUdfU0hFTEwtJFNIRUxMfQorZXhwb3J0IFNIRUxMCitfQVNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BU0VPRiB8fCBhc193cml0ZV9mYWlsPTEKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBNNHNoIEluaXRpYWxpemF0aW9uLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBCZSBtb3JlIEJvdXJuZSBjb21wYXRpYmxlCitEVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCitpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICBlbXVsYXRlIHNoCisgIE5VTExDTUQ9OgorICAjIFByZS00LjIgdmVyc2lvbnMgb2YgWnNoIGRvIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gKKyAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KKyAgYWxpYXMgLWcgJyR7MSsiJEAifSc9JyIkQCInCisgIHNldG9wdCBOT19HTE9CX1NVQlNUCitlbHNlCisgIGNhc2UgYChzZXQgLW8pIDI+L2Rldi9udWxsYCBpbiAjKAorICAqcG9zaXgqKSA6CisgICAgc2V0IC1vIHBvc2l4IDs7ICMoCisgICopIDoKKyAgICAgOzsKK2VzYWMKK2ZpCisKKworYXNfbmw9JworJworZXhwb3J0IGFzX25sCisjIFByaW50aW5nIGEgbG9uZyBzdHJpbmcgY3Jhc2hlcyBTb2xhcmlzIDcgL3Vzci9iaW4vcHJpbnRmLgorYXNfZWNobz0nXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCcKK2FzX2VjaG89JGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobworYXNfZWNobz0kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8KKyMgUHJlZmVyIGEga3NoIHNoZWxsIGJ1aWx0aW4gb3ZlciBhbiBleHRlcm5hbCBwcmludGYgcHJvZ3JhbSBvbiBTb2xhcmlzLAorIyBidXQgd2l0aG91dCB3YXN0aW5nIGZvcmtzIGZvciBiYXNoIG9yIHpzaC4KK2lmIHRlc3QgLXogIiRCQVNIX1ZFUlNJT04kWlNIX1ZFUlNJT04iIFwKKyAgICAmJiAodGVzdCAiWGBwcmludCAtciAtLSAkYXNfZWNob2AiID0gIlgkYXNfZWNobyIpIDI+L2Rldi9udWxsOyB0aGVuCisgIGFzX2VjaG89J3ByaW50IC1yIC0tJworICBhc19lY2hvX249J3ByaW50IC1ybiAtLScKK2VsaWYgKHRlc3QgIlhgcHJpbnRmICVzICRhc19lY2hvYCIgPSAiWCRhc19lY2hvIikgMj4vZGV2L251bGw7IHRoZW4KKyAgYXNfZWNobz0ncHJpbnRmICVzXG4nCisgIGFzX2VjaG9fbj0ncHJpbnRmICVzJworZWxzZQorICBpZiB0ZXN0ICJYYCgvdXNyL3VjYi9lY2hvIC1uIC1uICRhc19lY2hvKSAyPi9kZXYvbnVsbGAiID0gIlgtbiAkYXNfZWNobyI7IHRoZW4KKyAgICBhc19lY2hvX2JvZHk9J2V2YWwgL3Vzci91Y2IvZWNobyAtbiAiJDEkYXNfbmwiJworICAgIGFzX2VjaG9fbj0nL3Vzci91Y2IvZWNobyAtbicKKyAgZWxzZQorICAgIGFzX2VjaG9fYm9keT0nZXZhbCBleHByICJYJDEiIDogIlhcXCguKlxcKSInCisgICAgYXNfZWNob19uX2JvZHk9J2V2YWwKKyAgICAgIGFyZz0kMTsKKyAgICAgIGNhc2UgJGFyZyBpbiAjKAorICAgICAgKiIkYXNfbmwiKikKKwlleHByICJYJGFyZyIgOiAiWFxcKC4qXFwpJGFzX25sIjsKKwlhcmc9YGV4cHIgIlgkYXJnIiA6ICIuKiRhc19ubFxcKC4qXFwpImA7OworICAgICAgZXNhYzsKKyAgICAgIGV4cHIgIlgkYXJnIiA6ICJYXFwoLipcXCkiIHwgdHIgLWQgIiRhc19ubCIKKyAgICAnCisgICAgZXhwb3J0IGFzX2VjaG9fbl9ib2R5CisgICAgYXNfZWNob19uPSdzaCAtYyAkYXNfZWNob19uX2JvZHkgYXNfZWNobycKKyAgZmkKKyAgZXhwb3J0IGFzX2VjaG9fYm9keQorICBhc19lY2hvPSdzaCAtYyAkYXNfZWNob19ib2R5IGFzX2VjaG8nCitmaQorCisjIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KK2lmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCisgIFBBVEhfU0VQQVJBVE9SPToKKyAgKFBBVEg9Jy9iaW47L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgJiYgeworICAgIChQQVRIPScvYmluOi9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9kZXYvbnVsbCAyPiYxIHx8CisgICAgICBQQVRIX1NFUEFSQVRPUj0nOycKKyAgfQorZmkKKworCisjIElGUworIyBXZSBuZWVkIHNwYWNlLCB0YWIgYW5kIG5ldyBsaW5lLCBpbiBwcmVjaXNlbHkgdGhhdCBvcmRlci4gIFF1b3RpbmcgaXMKKyMgdGhlcmUgdG8gcHJldmVudCBlZGl0b3JzIGZyb20gY29tcGxhaW5pbmcgYWJvdXQgc3BhY2UtdGFiLgorIyAoSWYgX0FTX1BBVEhfV0FMSyB3ZXJlIGNhbGxlZCB3aXRoIElGUyB1bnNldCwgaXQgd291bGQgZGlzYWJsZSB3b3JkCisjIHNwbGl0dGluZyBieSBzZXR0aW5nIElGUyB0byBlbXB0eSB2YWx1ZS4pCitJRlM9IiAiIgkkYXNfbmwiCisKKyMgRmluZCB3aG8gd2UgYXJlLiAgTG9vayBpbiB0aGUgcGF0aCBpZiB3ZSBjb250YWluIG5vIGRpcmVjdG9yeSBzZXBhcmF0b3IuCithc19teXNlbGY9CitjYXNlICQwIGluICMoKAorICAqW1xcL10qICkgYXNfbXlzZWxmPSQwIDs7CisgICopIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICB0ZXN0IC1yICIkYXNfZGlyLyQwIiAmJiBhc19teXNlbGY9JGFzX2Rpci8kMCAmJiBicmVhaworICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgICAgOzsKK2VzYWMKKyMgV2UgZGlkIG5vdCBmaW5kIG91cnNlbHZlcywgbW9zdCBwcm9iYWJseSB3ZSB3ZXJlIHJ1biBhcyBgc2ggQ09NTUFORCcKKyMgaW4gd2hpY2ggY2FzZSB3ZSBhcmUgbm90IHRvIGJlIGZvdW5kIGluIHRoZSBwYXRoLgoraWYgdGVzdCAieCRhc19teXNlbGYiID0geDsgdGhlbgorICBhc19teXNlbGY9JDAKK2ZpCitpZiB0ZXN0ICEgLWYgIiRhc19teXNlbGYiOyB0aGVuCisgICRhc19lY2hvICIkYXNfbXlzZWxmOiBlcnJvcjogY2Fubm90IGZpbmQgbXlzZWxmOyByZXJ1biB3aXRoIGFuIGFic29sdXRlIGZpbGUgbmFtZSIgPiYyCisgIGV4aXQgMQorZmkKKworIyBVbnNldCB2YXJpYWJsZXMgdGhhdCB3ZSBkbyBub3QgbmVlZCBhbmQgd2hpY2ggY2F1c2UgYnVncyAoZS5nLiBpbgorIyBwcmUtMy4wIFVXSU4ga3NoKS4gIEJ1dCBkbyBub3QgY2F1c2UgYnVncyBpbiBiYXNoIDIuMDE7IHRoZSAifHwgZXhpdCAxIgorIyBzdXBwcmVzc2VzIGFueSAiU2VnbWVudGF0aW9uIGZhdWx0IiBtZXNzYWdlIHRoZXJlLiAgJygoJyBjb3VsZAorIyB0cmlnZ2VyIGEgYnVnIGluIHBka3NoIDUuMi4xNC4KK2ZvciBhc192YXIgaW4gQkFTSF9FTlYgRU5WIE1BSUwgTUFJTFBBVEgKK2RvIGV2YWwgdGVzdCB4XCR7JGFzX3ZhcitzZXR9ID0geHNldCBcCisgICYmICggKHVuc2V0ICRhc192YXIpIHx8IGV4aXQgMSkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0ICRhc192YXIgfHwgOgorZG9uZQorUFMxPSckICcKK1BTMj0nPiAnCitQUzQ9JysgJworCisjIE5MUyBudWlzYW5jZXMuCitMQ19BTEw9QworZXhwb3J0IExDX0FMTAorTEFOR1VBR0U9QworZXhwb3J0IExBTkdVQUdFCisKKyMgQ0RQQVRILgorKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAorCisKKyMgYXNfZm5fZXJyb3IgU1RBVFVTIEVSUk9SIFtMSU5FTk8gTE9HX0ZEXQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE91dHB1dCAiYGJhc2VuYW1lICQwYDogZXJyb3I6IEVSUk9SIiB0byBzdGRlcnIuIElmIExJTkVOTyBhbmQgTE9HX0ZEIGFyZQorIyBwcm92aWRlZCwgYWxzbyBvdXRwdXQgdGhlIGVycm9yIHRvIExPR19GRCwgcmVmZXJlbmNpbmcgTElORU5PLiBUaGVuIGV4aXQgdGhlCisjIHNjcmlwdCB3aXRoIFNUQVRVUywgdXNpbmcgMSBpZiB0aGF0IHdhcyAwLgorYXNfZm5fZXJyb3IgKCkKK3sKKyAgYXNfc3RhdHVzPSQxOyB0ZXN0ICRhc19zdGF0dXMgLWVxIDAgJiYgYXNfc3RhdHVzPTEKKyAgaWYgdGVzdCAiJDQiOyB0aGVuCisgICAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMyJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiAkMiIgPiYkNAorICBmaQorICAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogJDIiID4mMgorICBhc19mbl9leGl0ICRhc19zdGF0dXMKK30gIyBhc19mbl9lcnJvcgorCisKKyMgYXNfZm5fc2V0X3N0YXR1cyBTVEFUVVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2V0ICQ/IHRvIFNUQVRVUywgd2l0aG91dCBmb3JraW5nLgorYXNfZm5fc2V0X3N0YXR1cyAoKQoreworICByZXR1cm4gJDEKK30gIyBhc19mbl9zZXRfc3RhdHVzCisKKyMgYXNfZm5fZXhpdCBTVEFUVVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXhpdCB0aGUgc2hlbGwgd2l0aCBTVEFUVVMsIGV2ZW4gaW4gYSAidHJhcCAwIiBvciAic2V0IC1lIiBjb250ZXh0LgorYXNfZm5fZXhpdCAoKQoreworICBzZXQgK2UKKyAgYXNfZm5fc2V0X3N0YXR1cyAkMQorICBleGl0ICQxCit9ICMgYXNfZm5fZXhpdAorCisjIGFzX2ZuX3Vuc2V0IFZBUgorIyAtLS0tLS0tLS0tLS0tLS0KKyMgUG9ydGFibHkgdW5zZXQgVkFSLgorYXNfZm5fdW5zZXQgKCkKK3sKKyAgeyBldmFsICQxPTsgdW5zZXQgJDE7fQorfQorYXNfdW5zZXQ9YXNfZm5fdW5zZXQKKyMgYXNfZm5fYXBwZW5kIFZBUiBWQUxVRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEFwcGVuZCB0aGUgdGV4dCBpbiBWQUxVRSB0byB0aGUgZW5kIG9mIHRoZSBkZWZpbml0aW9uIGNvbnRhaW5lZCBpbiBWQVIuIFRha2UKKyMgYWR2YW50YWdlIG9mIGFueSBzaGVsbCBvcHRpbWl6YXRpb25zIHRoYXQgYWxsb3cgYW1vcnRpemVkIGxpbmVhciBncm93dGggb3ZlcgorIyByZXBlYXRlZCBhcHBlbmRzLCBpbnN0ZWFkIG9mIHRoZSB0eXBpY2FsIHF1YWRyYXRpYyBncm93dGggcHJlc2VudCBpbiBuYWl2ZQorIyBpbXBsZW1lbnRhdGlvbnMuCitpZiAoZXZhbCAiYXNfdmFyPTE7IGFzX3Zhcis9MjsgdGVzdCB4XCRhc192YXIgPSB4MTIiKSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIGV2YWwgJ2FzX2ZuX2FwcGVuZCAoKQorICB7CisgICAgZXZhbCAkMSs9XCQyCisgIH0nCitlbHNlCisgIGFzX2ZuX2FwcGVuZCAoKQorICB7CisgICAgZXZhbCAkMT1cJCQxXCQyCisgIH0KK2ZpICMgYXNfZm5fYXBwZW5kCisKKyMgYXNfZm5fYXJpdGggQVJHLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBQZXJmb3JtIGFyaXRobWV0aWMgZXZhbHVhdGlvbiBvbiB0aGUgQVJHcywgYW5kIHN0b3JlIHRoZSByZXN1bHQgaW4gdGhlCisjIGdsb2JhbCAkYXNfdmFsLiBUYWtlIGFkdmFudGFnZSBvZiBzaGVsbHMgdGhhdCBjYW4gYXZvaWQgZm9ya3MuIFRoZSBhcmd1bWVudHMKKyMgbXVzdCBiZSBwb3J0YWJsZSBhY3Jvc3MgJCgoKSkgYW5kIGV4cHIuCitpZiAoZXZhbCAidGVzdCBcJCgoIDEgKyAxICkpID0gMiIpIDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgZXZhbCAnYXNfZm5fYXJpdGggKCkKKyAgeworICAgIGFzX3ZhbD0kKCggJCogKSkKKyAgfScKK2Vsc2UKKyAgYXNfZm5fYXJpdGggKCkKKyAgeworICAgIGFzX3ZhbD1gZXhwciAiJEAiIHx8IHRlc3QgJD8gLWVxIDFgCisgIH0KK2ZpICMgYXNfZm5fYXJpdGgKKworCitpZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMSAmJgorICAgdGVzdCAiWGBleHByIDAwMDAxIDogJy4qXCguLi5cKSdgIiA9IFgwMDE7IHRoZW4KKyAgYXNfZXhwcj1leHByCitlbHNlCisgIGFzX2V4cHI9ZmFsc2UKK2ZpCisKK2lmIChiYXNlbmFtZSAtLSAvKSA+L2Rldi9udWxsIDI+JjEgJiYgdGVzdCAiWGBiYXNlbmFtZSAtLSAvIDI+JjFgIiA9ICJYLyI7IHRoZW4KKyAgYXNfYmFzZW5hbWU9YmFzZW5hbWUKK2Vsc2UKKyAgYXNfYmFzZW5hbWU9ZmFsc2UKK2ZpCisKK2lmIChhc19kaXI9YGRpcm5hbWUgLS0gL2AgJiYgdGVzdCAiWCRhc19kaXIiID0gWC8pID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhc19kaXJuYW1lPWRpcm5hbWUKK2Vsc2UKKyAgYXNfZGlybmFtZT1mYWxzZQorZmkKKworYXNfbWU9YCRhc19iYXNlbmFtZSAtLSAiJDAiIHx8CiskYXNfZXhwciBYLyIkMCIgOiAnLiovXChbXi9dW14vXSpcKS8qJCcgXHwgXAorCSBYIiQwIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiQwIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKyRhc19lY2hvIFgvIiQwIiB8CisgICAgc2VkICcvXi4qXC9cKFteL11bXi9dKlwpXC8qJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcL1woXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcL1woXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYAorCisjIEF2b2lkIGRlcGVuZGluZyB1cG9uIENoYXJhY3RlciBSYW5nZXMuCithc19jcl9sZXR0ZXJzPSdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicKK2FzX2NyX0xFVFRFUlM9J0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJworYXNfY3JfTGV0dGVycz0kYXNfY3JfbGV0dGVycyRhc19jcl9MRVRURVJTCithc19jcl9kaWdpdHM9JzAxMjM0NTY3ODknCithc19jcl9hbG51bT0kYXNfY3JfTGV0dGVycyRhc19jcl9kaWdpdHMKKworRUNIT19DPSBFQ0hPX049IEVDSE9fVD0KK2Nhc2UgYGVjaG8gLW4geGAgaW4gIygoKCgoCistbiopCisgIGNhc2UgYGVjaG8gJ3h5XGMnYCBpbgorICAqYyopIEVDSE9fVD0nCSc7OwkjIEVDSE9fVCBpcyBzaW5nbGUgdGFiIGNoYXJhY3Rlci4KKyAgeHkpICBFQ0hPX0M9J1xjJzs7CisgICopICAgZWNobyBgZWNobyBrc2g4OCBidWcgb24gQUlYIDYuMWAgPiAvZGV2L251bGwKKyAgICAgICBFQ0hPX1Q9JwknOzsKKyAgZXNhYzs7CisqKQorICBFQ0hPX049Jy1uJzs7Citlc2FjCisKK3JtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5maWxlCitpZiB0ZXN0IC1kIGNvbmYkJC5kaXI7IHRoZW4KKyAgcm0gLWYgY29uZiQkLmRpci9jb25mJCQuZmlsZQorZWxzZQorICBybSAtZiBjb25mJCQuZGlyCisgIG1rZGlyIGNvbmYkJC5kaXIgMj4vZGV2L251bGwKK2ZpCitpZiAoZWNobyA+Y29uZiQkLmZpbGUpIDI+L2Rldi9udWxsOyB0aGVuCisgIGlmIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgorICAgIGFzX2xuX3M9J2xuIC1zJworICAgICMgLi4uIGJ1dCB0aGVyZSBhcmUgdHdvIGdvdGNoYXM6CisgICAgIyAxKSBPbiBNU1lTLCBib3RoIGBsbiAtcyBmaWxlIGRpcicgYW5kIGBsbiBmaWxlIGRpcicgZmFpbC4KKyAgICAjIDIpIERKR1BQIDwgMi4wNCBoYXMgbm8gc3ltbGlua3M7IGBsbiAtcycgY3JlYXRlcyBhIHdyYXBwZXIgZXhlY3V0YWJsZS4KKyAgICAjIEluIGJvdGggY2FzZXMsIHdlIGhhdmUgdG8gZGVmYXVsdCB0byBgY3AgLXAnLgorICAgIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJC5kaXIgMj4vZGV2L251bGwgJiYgdGVzdCAhIC1mIGNvbmYkJC5leGUgfHwKKyAgICAgIGFzX2xuX3M9J2NwIC1wJworICBlbGlmIGxuIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgorICAgIGFzX2xuX3M9bG4KKyAgZWxzZQorICAgIGFzX2xuX3M9J2NwIC1wJworICBmaQorZWxzZQorICBhc19sbl9zPSdjcCAtcCcKK2ZpCitybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZGlyL2NvbmYkJC5maWxlIGNvbmYkJC5maWxlCitybWRpciBjb25mJCQuZGlyIDI+L2Rldi9udWxsCisKKworIyBhc19mbl9ta2Rpcl9wCisjIC0tLS0tLS0tLS0tLS0KKyMgQ3JlYXRlICIkYXNfZGlyIiBhcyBhIGRpcmVjdG9yeSwgaW5jbHVkaW5nIHBhcmVudHMgaWYgbmVjZXNzYXJ5LgorYXNfZm5fbWtkaXJfcCAoKQoreworCisgIGNhc2UgJGFzX2RpciBpbiAjKAorICAtKikgYXNfZGlyPS4vJGFzX2Rpcjs7CisgIGVzYWMKKyAgdGVzdCAtZCAiJGFzX2RpciIgfHwgZXZhbCAkYXNfbWtkaXJfcCB8fCB7CisgICAgYXNfZGlycz0KKyAgICB3aGlsZSA6OyBkbworICAgICAgY2FzZSAkYXNfZGlyIGluICMoCisgICAgICAqXCcqKSBhc19xZGlyPWAkYXNfZWNobyAiJGFzX2RpciIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OyAjJygKKyAgICAgICopIGFzX3FkaXI9JGFzX2Rpcjs7CisgICAgICBlc2FjCisgICAgICBhc19kaXJzPSInJGFzX3FkaXInICRhc19kaXJzIgorICAgICAgYXNfZGlyPWAkYXNfZGlybmFtZSAtLSAiJGFzX2RpciIgfHwKKyRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYIiRhc19kaXIiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXClbXi9dLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYAorICAgICAgdGVzdCAtZCAiJGFzX2RpciIgJiYgYnJlYWsKKyAgICBkb25lCisgICAgdGVzdCAteiAiJGFzX2RpcnMiIHx8IGV2YWwgIm1rZGlyICRhc19kaXJzIgorICB9IHx8IHRlc3QgLWQgIiRhc19kaXIiIHx8IGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSAkYXNfZGlyIgorCisKK30gIyBhc19mbl9ta2Rpcl9wCitpZiBta2RpciAtcCAuIDI+L2Rldi9udWxsOyB0aGVuCisgIGFzX21rZGlyX3A9J21rZGlyIC1wICIkYXNfZGlyIicKK2Vsc2UKKyAgdGVzdCAtZCAuLy1wICYmIHJtZGlyIC4vLXAKKyAgYXNfbWtkaXJfcD1mYWxzZQorZmkKKworaWYgdGVzdCAteCAvID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhc190ZXN0X3g9J3Rlc3QgLXgnCitlbHNlCisgIGlmIGxzIC1kTCAvID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgIGFzX2xzX0xfb3B0aW9uPUwKKyAgZWxzZQorICAgIGFzX2xzX0xfb3B0aW9uPQorICBmaQorICBhc190ZXN0X3g9JworICAgIGV2YWwgc2ggLWMgJ1wnJworICAgICAgaWYgdGVzdCAtZCAiJDEiOyB0aGVuCisJdGVzdCAtZCAiJDEvLiI7CisgICAgICBlbHNlCisJY2FzZSAkMSBpbiAjKAorCS0qKXNldCAiLi8kMSI7OworCWVzYWM7CisJY2FzZSBgbHMgLWxkJyRhc19sc19MX29wdGlvbicgIiQxIiAyPi9kZXYvbnVsbGAgaW4gIygoCisJPz8/W3N4XSopOjs7KilmYWxzZTs7ZXNhYztmaQorICAgICdcJycgc2gKKyAgJworZmkKK2FzX2V4ZWN1dGFibGVfcD0kYXNfdGVzdF94CisKKyMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCBDUFAgbmFtZS4KK2FzX3RyX2NwcD0iZXZhbCBzZWQgJ3klKiRhc19jcl9sZXR0ZXJzJVAkYXNfY3JfTEVUVEVSUyU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCisKKyMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCB2YXJpYWJsZSBuYW1lLgorYXNfdHJfc2g9ImV2YWwgc2VkICd5JSorJXBwJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKKworCitleGVjIDY+JjEKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBNYWluIGJvZHkgb2YgJENPTkZJR19TVEFUVVMgc2NyaXB0LiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKK19BU0VPRgordGVzdCAkYXNfd3JpdGVfZmFpbCA9IDAgJiYgY2htb2QgK3ggJENPTkZJR19TVEFUVVMgfHwgYWNfd3JpdGVfZmFpbD0xCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKyMgU2F2ZSB0aGUgbG9nIG1lc3NhZ2UsIHRvIGtlZXAgJDAgYW5kIHNvIG9uIG1lYW5pbmdmdWwsIGFuZCB0bworIyByZXBvcnQgYWN0dWFsIGlucHV0IHZhbHVlcyBvZiBDT05GSUdfRklMRVMgZXRjLiBpbnN0ZWFkIG9mIHRoZWlyCisjIHZhbHVlcyBhZnRlciBvcHRpb25zIGhhbmRsaW5nLgorYWNfbG9nPSIKK1RoaXMgZmlsZSB3YXMgZXh0ZW5kZWQgYnkgYXZhaGkgJGFzX21lIDAuNi4zMSwgd2hpY2ggd2FzCitnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjguICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKKworICBDT05GSUdfRklMRVMgICAgPSAkQ09ORklHX0ZJTEVTCisgIENPTkZJR19IRUFERVJTICA9ICRDT05GSUdfSEVBREVSUworICBDT05GSUdfTElOS1MgICAgPSAkQ09ORklHX0xJTktTCisgIENPTkZJR19DT01NQU5EUyA9ICRDT05GSUdfQ09NTUFORFMKKyAgJCAkMCAkQAorCitvbiBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWAKKyIKKworX0FDRU9GCisKK2Nhc2UgJGFjX2NvbmZpZ19maWxlcyBpbiAqIgorIiopIHNldCB4ICRhY19jb25maWdfZmlsZXM7IHNoaWZ0OyBhY19jb25maWdfZmlsZXM9JCo7OworZXNhYworCitjYXNlICRhY19jb25maWdfaGVhZGVycyBpbiAqIgorIiopIHNldCB4ICRhY19jb25maWdfaGVhZGVyczsgc2hpZnQ7IGFjX2NvbmZpZ19oZWFkZXJzPSQqOzsKK2VzYWMKKworCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKyMgRmlsZXMgdGhhdCBjb25maWcuc3RhdHVzIHdhcyBtYWRlIGZvci4KK2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyIKK2NvbmZpZ19oZWFkZXJzPSIkYWNfY29uZmlnX2hlYWRlcnMiCitjb25maWdfY29tbWFuZHM9IiRhY19jb25maWdfY29tbWFuZHMiCisKK19BQ0VPRgorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCithY19jc191c2FnZT0iXAorXGAkYXNfbWUnIGluc3RhbnRpYXRlcyBmaWxlcyBhbmQgb3RoZXIgY29uZmlndXJhdGlvbiBhY3Rpb25zCitmcm9tIHRlbXBsYXRlcyBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4gIFVubGVzcyB0aGUgZmlsZXMKK2FuZCBhY3Rpb25zIGFyZSBzcGVjaWZpZWQgYXMgVEFHcywgYWxsIGFyZSBpbnN0YW50aWF0ZWQgYnkgZGVmYXVsdC4KKworVXNhZ2U6ICQwIFtPUFRJT05dLi4uIFtUQUddLi4uCisKKyAgLWgsIC0taGVscCAgICAgICBwcmludCB0aGlzIGhlbHAsIHRoZW4gZXhpdAorICAtViwgLS12ZXJzaW9uICAgIHByaW50IHZlcnNpb24gbnVtYmVyIGFuZCBjb25maWd1cmF0aW9uIHNldHRpbmdzLCB0aGVuIGV4aXQKKyAgICAgIC0tY29uZmlnICAgICBwcmludCBjb25maWd1cmF0aW9uLCB0aGVuIGV4aXQKKyAgLXEsIC0tcXVpZXQsIC0tc2lsZW50CisgICAgICAgICAgICAgICAgICAgZG8gbm90IHByaW50IHByb2dyZXNzIG1lc3NhZ2VzCisgIC1kLCAtLWRlYnVnICAgICAgZG9uJ3QgcmVtb3ZlIHRlbXBvcmFyeSBmaWxlcworICAgICAgLS1yZWNoZWNrICAgIHVwZGF0ZSAkYXNfbWUgYnkgcmVjb25maWd1cmluZyBpbiB0aGUgc2FtZSBjb25kaXRpb25zCisgICAgICAtLWZpbGU9RklMRVs6VEVNUExBVEVdCisgICAgICAgICAgICAgICAgICAgaW5zdGFudGlhdGUgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBGSUxFCisgICAgICAtLWhlYWRlcj1GSUxFWzpURU1QTEFURV0KKyAgICAgICAgICAgICAgICAgICBpbnN0YW50aWF0ZSB0aGUgY29uZmlndXJhdGlvbiBoZWFkZXIgRklMRQorCitDb25maWd1cmF0aW9uIGZpbGVzOgorJGNvbmZpZ19maWxlcworCitDb25maWd1cmF0aW9uIGhlYWRlcnM6CiskY29uZmlnX2hlYWRlcnMKKworQ29uZmlndXJhdGlvbiBjb21tYW5kczoKKyRjb25maWdfY29tbWFuZHMKKworUmVwb3J0IGJ1Z3MgdG8gPGF2YWhpIChhdCkgbGlzdHMgKGRvdCkgZnJlZWRlc2t0b3AgKGRvdCkgb3JnPi4iCisKK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCithY19jc19jb25maWc9ImAkYXNfZWNobyAiJGFjX2NvbmZpZ3VyZV9hcmdzIiB8IHNlZCAncy9eIC8vOyBzL1tcXCIiXGBcJF0vXFxcXCYvZydgIgorYWNfY3NfdmVyc2lvbj0iXFwKK2F2YWhpIGNvbmZpZy5zdGF0dXMgMC42LjMxCitjb25maWd1cmVkIGJ5ICQwLCBnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjgsCisgIHdpdGggb3B0aW9ucyBcXCJcJGFjX2NzX2NvbmZpZ1xcIgorCitDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitUaGlzIGNvbmZpZy5zdGF0dXMgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2dpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4iCisKK2FjX3B3ZD0nJGFjX3B3ZCcKK3NyY2Rpcj0nJHNyY2RpcicKK0lOU1RBTEw9JyRJTlNUQUxMJworTUtESVJfUD0nJE1LRElSX1AnCitBV0s9JyRBV0snCit0ZXN0IC1uICJcJEFXSyIgfHwgQVdLPWF3aworX0FDRU9GCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKyMgVGhlIGRlZmF1bHQgbGlzdHMgYXBwbHkgaWYgdGhlIHVzZXIgZG9lcyBub3Qgc3BlY2lmeSBhbnkgZmlsZS4KK2FjX25lZWRfZGVmYXVsdHM9Ogord2hpbGUgdGVzdCAkIyAhPSAwCitkbworICBjYXNlICQxIGluCisgIC0tKj0/KikKKyAgICBhY19vcHRpb249YGV4cHIgIlgkMSIgOiAnWFwoW149XSpcKT0nYAorICAgIGFjX29wdGFyZz1gZXhwciAiWCQxIiA6ICdYW149XSo9XCguKlwpJ2AKKyAgICBhY19zaGlmdD06CisgICAgOzsKKyAgLS0qPSkKKyAgICBhY19vcHRpb249YGV4cHIgIlgkMSIgOiAnWFwoW149XSpcKT0nYAorICAgIGFjX29wdGFyZz0KKyAgICBhY19zaGlmdD06CisgICAgOzsKKyAgKikKKyAgICBhY19vcHRpb249JDEKKyAgICBhY19vcHRhcmc9JDIKKyAgICBhY19zaGlmdD1zaGlmdAorICAgIDs7CisgIGVzYWMKKworICBjYXNlICRhY19vcHRpb24gaW4KKyAgIyBIYW5kbGluZyBvZiB0aGUgb3B0aW9ucy4KKyAgLXJlY2hlY2sgfCAtLXJlY2hlY2sgfCAtLXJlY2hlYyB8IC0tcmVjaGUgfCAtLXJlY2ggfCAtLXJlYyB8IC0tcmUgfCAtLXIpCisgICAgYWNfY3NfcmVjaGVjaz06IDs7CisgIC0tdmVyc2lvbiB8IC0tdmVyc2lvIHwgLS12ZXJzaSB8IC0tdmVycyB8IC0tdmVyIHwgLS12ZSB8IC0tdiB8IC1WICkKKyAgICAkYXNfZWNobyAiJGFjX2NzX3ZlcnNpb24iOyBleGl0IDs7CisgIC0tY29uZmlnIHwgLS1jb25maSB8IC0tY29uZiB8IC0tY29uIHwgLS1jbyB8IC0tYyApCisgICAgJGFzX2VjaG8gIiRhY19jc19jb25maWciOyBleGl0IDs7CisgIC0tZGVidWcgfCAtLWRlYnUgfCAtLWRlYiB8IC0tZGUgfCAtLWQgfCAtZCApCisgICAgZGVidWc9OiA7OworICAtLWZpbGUgfCAtLWZpbCB8IC0tZmkgfCAtLWYgKQorICAgICRhY19zaGlmdAorICAgIGNhc2UgJGFjX29wdGFyZyBpbgorICAgICpcJyopIGFjX29wdGFyZz1gJGFzX2VjaG8gIiRhY19vcHRhcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgIDs7CisgICAgJycpIGFzX2ZuX2Vycm9yICQ/ICJtaXNzaW5nIGZpbGUgYXJndW1lbnQiIDs7CisgICAgZXNhYworICAgIGFzX2ZuX2FwcGVuZCBDT05GSUdfRklMRVMgIiAnJGFjX29wdGFyZyciCisgICAgYWNfbmVlZF9kZWZhdWx0cz1mYWxzZTs7CisgIC0taGVhZGVyIHwgLS1oZWFkZSB8IC0taGVhZCB8IC0taGVhICkKKyAgICAkYWNfc2hpZnQKKyAgICBjYXNlICRhY19vcHRhcmcgaW4KKyAgICAqXCcqKSBhY19vcHRhcmc9YCRhc19lY2hvICIkYWNfb3B0YXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OworICAgIGVzYWMKKyAgICBhc19mbl9hcHBlbmQgQ09ORklHX0hFQURFUlMgIiAnJGFjX29wdGFyZyciCisgICAgYWNfbmVlZF9kZWZhdWx0cz1mYWxzZTs7CisgIC0taGUgfCAtLWgpCisgICAgIyBDb25mbGljdCBiZXR3ZWVuIC0taGVscCBhbmQgLS1oZWFkZXIKKyAgICBhc19mbl9lcnJvciAkPyAiYW1iaWd1b3VzIG9wdGlvbjogXGAkMScKK1RyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIjs7CisgIC0taGVscCB8IC0taGVsIHwgLWggKQorICAgICRhc19lY2hvICIkYWNfY3NfdXNhZ2UiOyBleGl0IDs7CisgIC1xIHwgLXF1aWV0IHwgLS1xdWlldCB8IC0tcXVpZSB8IC0tcXVpIHwgLS1xdSB8IC0tcSBcCisgIHwgLXNpbGVudCB8IC0tc2lsZW50IHwgLS1zaWxlbiB8IC0tc2lsZSB8IC0tc2lsIHwgLS1zaSB8IC0tcykKKyAgICBhY19jc19zaWxlbnQ9OiA7OworCisgICMgVGhpcyBpcyBhbiBlcnJvci4KKyAgLSopIGFzX2ZuX2Vycm9yICQ/ICJ1bnJlY29nbml6ZWQgb3B0aW9uOiBcYCQxJworVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iIDs7CisKKyAgKikgYXNfZm5fYXBwZW5kIGFjX2NvbmZpZ190YXJnZXRzICIgJDEiCisgICAgIGFjX25lZWRfZGVmYXVsdHM9ZmFsc2UgOzsKKworICBlc2FjCisgIHNoaWZ0Citkb25lCisKK2FjX2NvbmZpZ3VyZV9leHRyYV9hcmdzPQorCitpZiAkYWNfY3Nfc2lsZW50OyB0aGVuCisgIGV4ZWMgNj4vZGV2L251bGwKKyAgYWNfY29uZmlndXJlX2V4dHJhX2FyZ3M9IiRhY19jb25maWd1cmVfZXh0cmFfYXJncyAtLXNpbGVudCIKK2ZpCisKK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCitpZiBcJGFjX2NzX3JlY2hlY2s7IHRoZW4KKyAgc2V0IFggJyRTSEVMTCcgJyQwJyAkYWNfY29uZmlndXJlX2FyZ3MgXCRhY19jb25maWd1cmVfZXh0cmFfYXJncyAtLW5vLWNyZWF0ZSAtLW5vLXJlY3Vyc2lvbgorICBzaGlmdAorICBcJGFzX2VjaG8gInJ1bm5pbmcgQ09ORklHX1NIRUxMPSRTSEVMTCBcJCoiID4mNgorICBDT05GSUdfU0hFTEw9JyRTSEVMTCcKKyAgZXhwb3J0IENPTkZJR19TSEVMTAorICBleGVjICJcJEAiCitmaQorCitfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2V4ZWMgNT4+Y29uZmlnLmxvZworeworICBlY2hvCisgIHNlZCAnaDtzLy4vLS9nO3MvXi4uLi8jIyAvO3MvLi4uJC8gIyMvO3A7eDtwO3gnIDw8X0FTQk9YCisjIyBSdW5uaW5nICRhc19tZS4gIyMKK19BU0JPWAorICAkYXNfZWNobyAiJGFjX2xvZyIKK30gPiY1CisKK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisjCisjIElOSVQtQ09NTUFORFMKKyMKK0FNREVQX1RSVUU9IiRBTURFUF9UUlVFIiBhY19hdXhfZGlyPSIkYWNfYXV4X2RpciIKKworCisjIFRoZSBIUC1VWCBrc2ggYW5kIFBPU0lYIHNoZWxsIHByaW50IHRoZSB0YXJnZXQgZGlyZWN0b3J5IHRvIHN0ZG91dAorIyBpZiBDRFBBVEggaXMgc2V0LgorKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAorCitzZWRfcXVvdGVfc3Vic3Q9JyRzZWRfcXVvdGVfc3Vic3QnCitkb3VibGVfcXVvdGVfc3Vic3Q9JyRkb3VibGVfcXVvdGVfc3Vic3QnCitkZWxheV92YXJpYWJsZV9zdWJzdD0nJGRlbGF5X3ZhcmlhYmxlX3N1YnN0JworbWFjcm9fdmVyc2lvbj0nYCRFQ0hPICIkbWFjcm9fdmVyc2lvbiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCittYWNyb19yZXZpc2lvbj0nYCRFQ0hPICIkbWFjcm9fcmV2aXNpb24iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZW5hYmxlX3NoYXJlZD0nYCRFQ0hPICIkZW5hYmxlX3NoYXJlZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitlbmFibGVfc3RhdGljPSdgJEVDSE8gIiRlbmFibGVfc3RhdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3BpY19tb2RlPSdgJEVDSE8gIiRwaWNfbW9kZSIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitlbmFibGVfZmFzdF9pbnN0YWxsPSdgJEVDSE8gIiRlbmFibGVfZmFzdF9pbnN0YWxsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK1NIRUxMPSdgJEVDSE8gIiRTSEVMTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitFQ0hPPSdgJEVDSE8gIiRFQ0hPIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK1BBVEhfU0VQQVJBVE9SPSdgJEVDSE8gIiRQQVRIX1NFUEFSQVRPUiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitob3N0X2FsaWFzPSdgJEVDSE8gIiRob3N0X2FsaWFzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hvc3Q9J2AkRUNITyAiJGhvc3QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaG9zdF9vcz0nYCRFQ0hPICIkaG9zdF9vcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitidWlsZF9hbGlhcz0nYCRFQ0hPICIkYnVpbGRfYWxpYXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYnVpbGQ9J2AkRUNITyAiJGJ1aWxkIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2J1aWxkX29zPSdgJEVDSE8gIiRidWlsZF9vcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitTRUQ9J2AkRUNITyAiJFNFRCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitYc2VkPSdgJEVDSE8gIiRYc2VkIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0dSRVA9J2AkRUNITyAiJEdSRVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworRUdSRVA9J2AkRUNITyAiJEVHUkVQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0ZHUkVQPSdgJEVDSE8gIiRGR1JFUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitMRD0nYCRFQ0hPICIkTEQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworTk09J2AkRUNITyAiJE5NIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0xOX1M9J2AkRUNITyAiJExOX1MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbWF4X2NtZF9sZW49J2AkRUNITyAiJG1heF9jbWRfbGVuIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2FjX29iamV4dD0nYCRFQ0hPICIkYWNfb2JqZXh0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2V4ZWV4dD0nYCRFQ0hPICIkZXhlZXh0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X3Vuc2V0PSdgJEVDSE8gIiRsdF91bnNldCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9TUDJOTD0nYCRFQ0hPICIkbHRfU1AyTkwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfTkwyU1A9J2AkRUNITyAiJGx0X05MMlNQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9J2AkRUNITyAiJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD0nYCRFQ0hPICIkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCityZWxvYWRfZmxhZz0nYCRFQ0hPICIkcmVsb2FkX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcmVsb2FkX2NtZHM9J2AkRUNITyAiJHJlbG9hZF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK09CSkRVTVA9J2AkRUNITyAiJE9CSkRVTVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZGVwbGlic19jaGVja19tZXRob2Q9J2AkRUNITyAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2ZpbGVfbWFnaWNfY21kPSdgJEVDSE8gIiRmaWxlX21hZ2ljX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitmaWxlX21hZ2ljX2dsb2I9J2AkRUNITyAiJGZpbGVfbWFnaWNfZ2xvYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCit3YW50X25vY2FzZWdsb2I9J2AkRUNITyAiJHdhbnRfbm9jYXNlZ2xvYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitETExUT09MPSdgJEVDSE8gIiRETExUT09MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSdgJEVDSE8gIiRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitBUj0nYCRFQ0hPICIkQVIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQVJfRkxBR1M9J2AkRUNITyAiJEFSX0ZMQUdTIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2FyY2hpdmVyX2xpc3Rfc3BlYz0nYCRFQ0hPICIkYXJjaGl2ZXJfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK1NUUklQPSdgJEVDSE8gIiRTVFJJUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitSQU5MSUI9J2AkRUNITyAiJFJBTkxJQiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitvbGRfcG9zdGluc3RhbGxfY21kcz0nYCRFQ0hPICIkb2xkX3Bvc3RpbnN0YWxsX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0nYCRFQ0hPICIkb2xkX3Bvc3R1bmluc3RhbGxfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitvbGRfYXJjaGl2ZV9jbWRzPSdgJEVDSE8gIiRvbGRfYXJjaGl2ZV9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2xvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbj0nYCRFQ0hPICIkbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0NDPSdgJEVDSE8gIiRDQyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitDRkxBR1M9J2AkRUNITyAiJENGTEFHUyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitjb21waWxlcj0nYCRFQ0hPICIkY29tcGlsZXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworR0NDPSdgJEVDSE8gIiRHQ0MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbm1fZmlsZV9saXN0X3NwZWM9J2AkRUNITyAiJG5tX2ZpbGVfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X3N5c3Jvb3Q9J2AkRUNITyAiJGx0X3N5c3Jvb3QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworb2JqZGlyPSdgJEVDSE8gIiRvYmpkaXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworTUFHSUNfQ01EPSdgJEVDSE8gIiRNQUdJQ19DTUQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X3Byb2dfY29tcGlsZXJfcGljPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9wcm9nX2NvbXBpbGVyX3dsPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3dsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X3Byb2dfY29tcGlsZXJfc3RhdGljPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz0nYCRFQ0hPICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbmVlZF9sb2Nrcz0nYCRFQ0hPICIkbmVlZF9sb2NrcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitNQU5JRkVTVF9UT09MPSdgJEVDSE8gIiRNQU5JRkVTVF9UT09MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0RTWU1VVElMPSdgJEVDSE8gIiREU1lNVVRJTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitOTUVESVQ9J2AkRUNITyAiJE5NRURJVCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitMSVBPPSdgJEVDSE8gIiRMSVBPIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK09UT09MPSdgJEVDSE8gIiRPVE9PTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitPVE9PTDY0PSdgJEVDSE8gIiRPVE9PTDY0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2xpYmV4dD0nYCRFQ0hPICIkbGliZXh0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3NocmV4dF9jbWRzPSdgJEVDSE8gIiRzaHJleHRfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitleHRyYWN0X2V4cHN5bXNfY21kcz0nYCRFQ0hPICIkZXh0cmFjdF9leHBzeW1zX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYXJjaGl2ZV9jbWRzX25lZWRfbGM9J2AkRUNITyAiJGFyY2hpdmVfY21kc19uZWVkX2xjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2VuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9J2AkRUNITyAiJGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSdgJEVDSE8gIiRleHBvcnRfZHluYW1pY19mbGFnX3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJword2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9J2AkRUNITyAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2NvbXBpbGVyX25lZWRzX29iamVjdD0nYCRFQ0hPICIkY29tcGlsZXJfbmVlZHNfb2JqZWN0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J2AkRUNITyAiJG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHM9J2AkRUNITyAiJG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2FyY2hpdmVfY21kcz0nYCRFQ0hPICIkYXJjaGl2ZV9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2FyY2hpdmVfZXhwc3ltX2NtZHM9J2AkRUNITyAiJGFyY2hpdmVfZXhwc3ltX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbW9kdWxlX2NtZHM9J2AkRUNITyAiJG1vZHVsZV9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK21vZHVsZV9leHBzeW1fY21kcz0nYCRFQ0hPICIkbW9kdWxlX2V4cHN5bV9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3dpdGhfZ251X2xkPSdgJEVDSE8gIiR3aXRoX2dudV9sZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithbGxvd191bmRlZmluZWRfZmxhZz0nYCRFQ0hPICIkYWxsb3dfdW5kZWZpbmVkX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbm9fdW5kZWZpbmVkX2ZsYWc9J2AkRUNITyAiJG5vX3VuZGVmaW5lZF9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9J2AkRUNITyAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0nYCRFQ0hPICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9kaXJlY3Q9J2AkRUNITyAiJGhhcmRjb2RlX2RpcmVjdCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9J2AkRUNITyAiJGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9taW51c19MPSdgJEVDSE8gIiRoYXJkY29kZV9taW51c19MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX3NobGlicGF0aF92YXI9J2AkRUNITyAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfYXV0b21hdGljPSdgJEVDSE8gIiRoYXJkY29kZV9hdXRvbWF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaW5oZXJpdF9ycGF0aD0nYCRFQ0hPICIkaW5oZXJpdF9ycGF0aCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsaW5rX2FsbF9kZXBsaWJzPSdgJEVDSE8gIiRsaW5rX2FsbF9kZXBsaWJzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2Fsd2F5c19leHBvcnRfc3ltYm9scz0nYCRFQ0hPICIkYWx3YXlzX2V4cG9ydF9zeW1ib2xzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2V4cG9ydF9zeW1ib2xzX2NtZHM9J2AkRUNITyAiJGV4cG9ydF9zeW1ib2xzX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZXhjbHVkZV9leHBzeW1zPSdgJEVDSE8gIiRleGNsdWRlX2V4cHN5bXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaW5jbHVkZV9leHBzeW1zPSdgJEVDSE8gIiRpbmNsdWRlX2V4cHN5bXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcHJlbGlua19jbWRzPSdgJEVDSE8gIiRwcmVsaW5rX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcG9zdGxpbmtfY21kcz0nYCRFQ0hPICIkcG9zdGxpbmtfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitmaWxlX2xpc3Rfc3BlYz0nYCRFQ0hPICIkZmlsZV9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwordmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9J2AkRUNITyAiJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK25lZWRfbGliX3ByZWZpeD0nYCRFQ0hPICIkbmVlZF9saWJfcHJlZml4IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK25lZWRfdmVyc2lvbj0nYCRFQ0hPICIkbmVlZF92ZXJzaW9uIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3ZlcnNpb25fdHlwZT0nYCRFQ0hPICIkdmVyc2lvbl90eXBlIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3J1bnBhdGhfdmFyPSdgJEVDSE8gIiRydW5wYXRoX3ZhciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitzaGxpYnBhdGhfdmFyPSdgJEVDSE8gIiRzaGxpYnBhdGhfdmFyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD0nYCRFQ0hPICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2xpYm5hbWVfc3BlYz0nYCRFQ0hPICIkbGlibmFtZV9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2xpYnJhcnlfbmFtZXNfc3BlYz0nYCRFQ0hPICIkbGlicmFyeV9uYW1lc19zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3NvbmFtZV9zcGVjPSdgJEVDSE8gIiRzb25hbWVfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitpbnN0YWxsX292ZXJyaWRlX21vZGU9J2AkRUNITyAiJGluc3RhbGxfb3ZlcnJpZGVfbW9kZSIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitwb3N0aW5zdGFsbF9jbWRzPSdgJEVDSE8gIiRwb3N0aW5zdGFsbF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3Bvc3R1bmluc3RhbGxfY21kcz0nYCRFQ0hPICIkcG9zdHVuaW5zdGFsbF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2ZpbmlzaF9jbWRzPSdgJEVDSE8gIiRmaW5pc2hfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitmaW5pc2hfZXZhbD0nYCRFQ0hPICIkZmluaXNoX2V2YWwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfaW50b19saWJzPSdgJEVDSE8gIiRoYXJkY29kZV9pbnRvX2xpYnMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSdgJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9J2AkRUNITyAiJHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2FjdGlvbj0nYCRFQ0hPICIkaGFyZGNvZGVfYWN0aW9uIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2VuYWJsZV9kbG9wZW49J2AkRUNITyAiJGVuYWJsZV9kbG9wZW4iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZW5hYmxlX2Rsb3Blbl9zZWxmPSdgJEVDSE8gIiRlbmFibGVfZGxvcGVuX3NlbGYiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz0nYCRFQ0hPICIkZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitvbGRfc3RyaXBsaWI9J2AkRUNITyAiJG9sZF9zdHJpcGxpYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitzdHJpcGxpYj0nYCRFQ0hPICIkc3RyaXBsaWIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzPSdgJEVDSE8gIiRjb21waWxlcl9saWJfc2VhcmNoX2RpcnMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcHJlZGVwX29iamVjdHM9J2AkRUNITyAiJHByZWRlcF9vYmplY3RzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3Bvc3RkZXBfb2JqZWN0cz0nYCRFQ0hPICIkcG9zdGRlcF9vYmplY3RzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3ByZWRlcHM9J2AkRUNITyAiJHByZWRlcHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcG9zdGRlcHM9J2AkRUNITyAiJHBvc3RkZXBzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aD0nYCRFQ0hPICIkY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0xEX0NYWD0nYCRFQ0hPICIkTERfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3JlbG9hZF9mbGFnX0NYWD0nYCRFQ0hPICIkcmVsb2FkX2ZsYWdfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3JlbG9hZF9jbWRzX0NYWD0nYCRFQ0hPICIkcmVsb2FkX2NtZHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK29sZF9hcmNoaXZlX2NtZHNfQ1hYPSdgJEVDSE8gIiRvbGRfYXJjaGl2ZV9jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitjb21waWxlcl9DWFg9J2AkRUNITyAiJGNvbXBpbGVyX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitHQ0NfQ1hYPSdgJEVDSE8gIiRHQ0NfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFg9J2AkRUNITyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9J2AkRUNITyAiJGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0NYWD0nYCRFQ0hPICIkZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nYCRFQ0hPICIkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCit3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9J2AkRUNITyAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitjb21waWxlcl9uZWVkc19vYmplY3RfQ1hYPSdgJEVDSE8gIiRjb21waWxlcl9uZWVkc19vYmplY3RfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNfQ1hYPSdgJEVDSE8gIiRvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc19DWFg9J2AkRUNITyAiJG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithcmNoaXZlX2NtZHNfQ1hYPSdgJEVDSE8gIiRhcmNoaXZlX2NtZHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2FyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdgJEVDSE8gIiRhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCittb2R1bGVfY21kc19DWFg9J2AkRUNITyAiJG1vZHVsZV9jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCittb2R1bGVfZXhwc3ltX2NtZHNfQ1hYPSdgJEVDSE8gIiRtb2R1bGVfZXhwc3ltX2NtZHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3dpdGhfZ251X2xkX0NYWD0nYCRFQ0hPICIkd2l0aF9nbnVfbGRfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2FsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nYCRFQ0hPICIkYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK25vX3VuZGVmaW5lZF9mbGFnX0NYWD0nYCRFQ0hPICIkbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSdgJEVDSE8gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD0nYCRFQ0hPICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfZGlyZWN0X0NYWD0nYCRFQ0hPICIkaGFyZGNvZGVfZGlyZWN0X0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGVfQ1hYPSdgJEVDSE8gIiRoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGVfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX21pbnVzX0xfQ1hYPSdgJEVDSE8gIiRoYXJkY29kZV9taW51c19MX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD0nYCRFQ0hPICIkaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfYXV0b21hdGljX0NYWD0nYCRFQ0hPICIkaGFyZGNvZGVfYXV0b21hdGljX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitpbmhlcml0X3JwYXRoX0NYWD0nYCRFQ0hPICIkaW5oZXJpdF9ycGF0aF9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbGlua19hbGxfZGVwbGlic19DWFg9J2AkRUNITyAiJGxpbmtfYWxsX2RlcGxpYnNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2Fsd2F5c19leHBvcnRfc3ltYm9sc19DWFg9J2AkRUNITyAiJGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9J2AkRUNITyAiJGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2V4Y2x1ZGVfZXhwc3ltc19DWFg9J2AkRUNITyAiJGV4Y2x1ZGVfZXhwc3ltc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaW5jbHVkZV9leHBzeW1zX0NYWD0nYCRFQ0hPICIkaW5jbHVkZV9leHBzeW1zX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitwcmVsaW5rX2NtZHNfQ1hYPSdgJEVDSE8gIiRwcmVsaW5rX2NtZHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3Bvc3RsaW5rX2NtZHNfQ1hYPSdgJEVDSE8gIiRwb3N0bGlua19jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitmaWxlX2xpc3Rfc3BlY19DWFg9J2AkRUNITyAiJGZpbGVfbGlzdF9zcGVjX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9hY3Rpb25fQ1hYPSdgJEVDSE8gIiRoYXJkY29kZV9hY3Rpb25fQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2NvbXBpbGVyX2xpYl9zZWFyY2hfZGlyc19DWFg9J2AkRUNITyAiJGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlyc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcHJlZGVwX29iamVjdHNfQ1hYPSdgJEVDSE8gIiRwcmVkZXBfb2JqZWN0c19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcG9zdGRlcF9vYmplY3RzX0NYWD0nYCRFQ0hPICIkcG9zdGRlcF9vYmplY3RzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitwcmVkZXBzX0NYWD0nYCRFQ0hPICIkcHJlZGVwc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcG9zdGRlcHNfQ1hYPSdgJEVDSE8gIiRwb3N0ZGVwc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWD0nYCRFQ0hPICIkY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisKK0xUQ0M9JyRMVENDJworTFRDRkxBR1M9JyRMVENGTEFHUycKK2NvbXBpbGVyPSckY29tcGlsZXJfREVGQVVMVCcKKworIyBBIGZ1bmN0aW9uIHRoYXQgaXMgdXNlZCB3aGVuIHRoZXJlIGlzIG5vIHByaW50IGJ1aWx0aW4gb3IgcHJpbnRmLgorZnVuY19mYWxsYmFja19lY2hvICgpCit7CisgIGV2YWwgJ2NhdCA8PF9MVEVDSE9fRU9GCitcJDEKK19MVEVDSE9fRU9GJworfQorCisjIFF1b3RlIGV2YWxlZCBzdHJpbmdzLgorZm9yIHZhciBpbiBTSEVMTCBcCitFQ0hPIFwKK1BBVEhfU0VQQVJBVE9SIFwKK1NFRCBcCitHUkVQIFwKK0VHUkVQIFwKK0ZHUkVQIFwKK0xEIFwKK05NIFwKK0xOX1MgXAorbHRfU1AyTkwgXAorbHRfTkwyU1AgXAorcmVsb2FkX2ZsYWcgXAorT0JKRFVNUCBcCitkZXBsaWJzX2NoZWNrX21ldGhvZCBcCitmaWxlX21hZ2ljX2NtZCBcCitmaWxlX21hZ2ljX2dsb2IgXAord2FudF9ub2Nhc2VnbG9iIFwKK0RMTFRPT0wgXAorc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQgXAorQVIgXAorQVJfRkxBR1MgXAorYXJjaGl2ZXJfbGlzdF9zcGVjIFwKK1NUUklQIFwKK1JBTkxJQiBcCitDQyBcCitDRkxBR1MgXAorY29tcGlsZXIgXAorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBcCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCBcCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyBcCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IFwKK25tX2ZpbGVfbGlzdF9zcGVjIFwKK2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIFwKK2x0X3Byb2dfY29tcGlsZXJfcGljIFwKK2x0X3Byb2dfY29tcGlsZXJfd2wgXAorbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgXAorbHRfY3ZfcHJvZ19jb21waWxlcl9jX28gXAorbmVlZF9sb2NrcyBcCitNQU5JRkVTVF9UT09MIFwKK0RTWU1VVElMIFwKK05NRURJVCBcCitMSVBPIFwKK09UT09MIFwKK09UT09MNjQgXAorc2hyZXh0X2NtZHMgXAorZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjIFwKK3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjIFwKK2NvbXBpbGVyX25lZWRzX29iamVjdCBcCit3aXRoX2dudV9sZCBcCithbGxvd191bmRlZmluZWRfZmxhZyBcCitub191bmRlZmluZWRfZmxhZyBcCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIFwKK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgXAorZXhjbHVkZV9leHBzeW1zIFwKK2luY2x1ZGVfZXhwc3ltcyBcCitmaWxlX2xpc3Rfc3BlYyBcCit2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayBcCitsaWJuYW1lX3NwZWMgXAorbGlicmFyeV9uYW1lc19zcGVjIFwKK3NvbmFtZV9zcGVjIFwKK2luc3RhbGxfb3ZlcnJpZGVfbW9kZSBcCitmaW5pc2hfZXZhbCBcCitvbGRfc3RyaXBsaWIgXAorc3RyaXBsaWIgXAorY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzIFwKK3ByZWRlcF9vYmplY3RzIFwKK3Bvc3RkZXBfb2JqZWN0cyBcCitwcmVkZXBzIFwKK3Bvc3RkZXBzIFwKK2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCBcCitMRF9DWFggXAorcmVsb2FkX2ZsYWdfQ1hYIFwKK2NvbXBpbGVyX0NYWCBcCitsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19DWFggXAorbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIFwKK2x0X3Byb2dfY29tcGlsZXJfd2xfQ1hYIFwKK2x0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWCBcCitsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFggXAorZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWCBcCit3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFggXAorY29tcGlsZXJfbmVlZHNfb2JqZWN0X0NYWCBcCit3aXRoX2dudV9sZF9DWFggXAorYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYIFwKK25vX3VuZGVmaW5lZF9mbGFnX0NYWCBcCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWCBcCitoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWCBcCitleGNsdWRlX2V4cHN5bXNfQ1hYIFwKK2luY2x1ZGVfZXhwc3ltc19DWFggXAorZmlsZV9saXN0X3NwZWNfQ1hYIFwKK2NvbXBpbGVyX2xpYl9zZWFyY2hfZGlyc19DWFggXAorcHJlZGVwX29iamVjdHNfQ1hYIFwKK3Bvc3RkZXBfb2JqZWN0c19DWFggXAorcHJlZGVwc19DWFggXAorcG9zdGRlcHNfQ1hYIFwKK2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFg7IGRvCisgICAgY2FzZSBcYGV2YWwgXFxcXFwkRUNITyBcXFxcIiJcXFxcXCRcJHZhciJcXFxcIlxgIGluCisgICAgKltcXFxcXFxcYFxcIlxcXCRdKikKKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFxgXFxcJEVDSE8gXFwiXFxcJFwkdmFyXFwiIHwgXFxcJFNFRCBcXCJcXFwkc2VkX3F1b3RlX3N1YnN0XFwiXFxcYFxcXFxcXCIiCisgICAgICA7OworICAgICopCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcJFwkdmFyXFxcXFxcIiIKKyAgICAgIDs7CisgICAgZXNhYworZG9uZQorCisjIERvdWJsZS1xdW90ZSBkb3VibGUtZXZhbGVkIHN0cmluZ3MuCitmb3IgdmFyIGluIHJlbG9hZF9jbWRzIFwKK29sZF9wb3N0aW5zdGFsbF9jbWRzIFwKK29sZF9wb3N0dW5pbnN0YWxsX2NtZHMgXAorb2xkX2FyY2hpdmVfY21kcyBcCitleHRyYWN0X2V4cHN5bXNfY21kcyBcCitvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzIFwKK29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIFwKK2FyY2hpdmVfY21kcyBcCithcmNoaXZlX2V4cHN5bV9jbWRzIFwKK21vZHVsZV9jbWRzIFwKK21vZHVsZV9leHBzeW1fY21kcyBcCitleHBvcnRfc3ltYm9sc19jbWRzIFwKK3ByZWxpbmtfY21kcyBcCitwb3N0bGlua19jbWRzIFwKK3Bvc3RpbnN0YWxsX2NtZHMgXAorcG9zdHVuaW5zdGFsbF9jbWRzIFwKK2ZpbmlzaF9jbWRzIFwKK3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYyBcCitzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyBcCityZWxvYWRfY21kc19DWFggXAorb2xkX2FyY2hpdmVfY21kc19DWFggXAorb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kc19DWFggXAorb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNfQ1hYIFwKK2FyY2hpdmVfY21kc19DWFggXAorYXJjaGl2ZV9leHBzeW1fY21kc19DWFggXAorbW9kdWxlX2NtZHNfQ1hYIFwKK21vZHVsZV9leHBzeW1fY21kc19DWFggXAorZXhwb3J0X3N5bWJvbHNfY21kc19DWFggXAorcHJlbGlua19jbWRzX0NYWCBcCitwb3N0bGlua19jbWRzX0NYWDsgZG8KKyAgICBjYXNlIFxgZXZhbCBcXFxcXCRFQ0hPIFxcXFwiIlxcXFxcJFwkdmFyIlxcXFwiXGAgaW4KKyAgICAqW1xcXFxcXFxgXFwiXFxcJF0qKQorICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXGBcXFwkRUNITyBcXCJcXFwkXCR2YXJcXCIgfCBcXFwkU0VEIC1lIFxcIlxcXCRkb3VibGVfcXVvdGVfc3Vic3RcXCIgLWUgXFwiXFxcJHNlZF9xdW90ZV9zdWJzdFxcIiAtZSBcXCJcXFwkZGVsYXlfdmFyaWFibGVfc3Vic3RcXCJcXFxgXFxcXFxcIiIKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFwkXCR2YXJcXFxcXFwiIgorICAgICAgOzsKKyAgICBlc2FjCitkb25lCisKK2FjX2F1eF9kaXI9JyRhY19hdXhfZGlyJworeHNpX3NoZWxsPSckeHNpX3NoZWxsJworbHRfc2hlbGxfYXBwZW5kPSckbHRfc2hlbGxfYXBwZW5kJworCisjIFNlZSBpZiB3ZSBhcmUgcnVubmluZyBvbiB6c2gsIGFuZCBzZXQgdGhlIG9wdGlvbnMgd2hpY2ggYWxsb3cgb3VyCisjIGNvbW1hbmRzIHRocm91Z2ggd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcyBJTklULgoraWYgdGVzdCAtbiAiXCR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCisgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZmkKKworCisgICAgUEFDS0FHRT0nJFBBQ0tBR0UnCisgICAgVkVSU0lPTj0nJFZFUlNJT04nCisgICAgVElNRVNUQU1QPSckVElNRVNUQU1QJworICAgIFJNPSckUk0nCisgICAgb2ZpbGU9JyRvZmlsZScKKworCisKKworCisKKworX0FDRU9GCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKworIyBIYW5kbGluZyBvZiBhcmd1bWVudHMuCitmb3IgYWNfY29uZmlnX3RhcmdldCBpbiAkYWNfY29uZmlnX3RhcmdldHMKK2RvCisgIGNhc2UgJGFjX2NvbmZpZ190YXJnZXQgaW4KKyAgICAiY29uZmlnLmgiKSBDT05GSUdfSEVBREVSUz0iJENPTkZJR19IRUFERVJTIGNvbmZpZy5oIiA7OworICAgICJkZXBmaWxlcyIpIENPTkZJR19DT01NQU5EUz0iJENPTkZJR19DT01NQU5EUyBkZXBmaWxlcyIgOzsKKyAgICAibGlidG9vbCIpIENPTkZJR19DT01NQU5EUz0iJENPTkZJR19DT01NQU5EUyBsaWJ0b29sIiA7OworICAgICJkZWZhdWx0LTEiKSBDT05GSUdfQ09NTUFORFM9IiRDT05GSUdfQ09NTUFORFMgZGVmYXVsdC0xIiA7OworICAgICJNYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBNYWtlZmlsZSIgOzsKKyAgICAiYXZhaGktY29tbW9uL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGF2YWhpLWNvbW1vbi9NYWtlZmlsZSIgOzsKKyAgICAiYXZhaGktY29yZS9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBhdmFoaS1jb3JlL01ha2VmaWxlIiA7OworICAgICJhdmFoaS1nbGliL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGF2YWhpLWdsaWIvTWFrZWZpbGUiIDs7CisgICAgImF2YWhpLWdvYmplY3QvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgYXZhaGktZ29iamVjdC9NYWtlZmlsZSIgOzsKKyAgICAiYXZhaGktcXQvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgYXZhaGktcXQvTWFrZWZpbGUiIDs7CisgICAgImF2YWhpLWRhZW1vbi9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBhdmFoaS1kYWVtb24vTWFrZWZpbGUiIDs7CisgICAgImF2YWhpLWRhZW1vbi9hdmFoaS1kYnVzLmNvbmYiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgYXZhaGktZGFlbW9uL2F2YWhpLWRidXMuY29uZiIgOzsKKyAgICAiYXZhaGktZGlzY292ZXItc3RhbmRhbG9uZS9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBhdmFoaS1kaXNjb3Zlci1zdGFuZGFsb25lL01ha2VmaWxlIiA7OworICAgICJhdmFoaS1jbGllbnQvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgYXZhaGktY2xpZW50L01ha2VmaWxlIiA7OworICAgICJpbml0c2NyaXB0L01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGluaXRzY3JpcHQvTWFrZWZpbGUiIDs7CisgICAgImluaXRzY3JpcHQvZGViaWFuL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGluaXRzY3JpcHQvZGViaWFuL01ha2VmaWxlIiA7OworICAgICJpbml0c2NyaXB0L2dlbnRvby9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBpbml0c2NyaXB0L2dlbnRvby9NYWtlZmlsZSIgOzsKKyAgICAiaW5pdHNjcmlwdC9hcmNobGludXgvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgaW5pdHNjcmlwdC9hcmNobGludXgvTWFrZWZpbGUiIDs7CisgICAgImluaXRzY3JpcHQvc3VzZS9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBpbml0c2NyaXB0L3N1c2UvTWFrZWZpbGUiIDs7CisgICAgImluaXRzY3JpcHQvZmVkb3JhL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGluaXRzY3JpcHQvZmVkb3JhL01ha2VmaWxlIiA7OworICAgICJpbml0c2NyaXB0L2xmcy9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBpbml0c2NyaXB0L2xmcy9NYWtlZmlsZSIgOzsKKyAgICAiaW5pdHNjcmlwdC9tYW5kcml2YS9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBpbml0c2NyaXB0L21hbmRyaXZhL01ha2VmaWxlIiA7OworICAgICJpbml0c2NyaXB0L2Rhcndpbi9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBpbml0c2NyaXB0L2Rhcndpbi9NYWtlZmlsZSIgOzsKKyAgICAiaW5pdHNjcmlwdC9mcmVlYnNkL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGluaXRzY3JpcHQvZnJlZWJzZC9NYWtlZmlsZSIgOzsKKyAgICAiaW5pdHNjcmlwdC9zbGFja3dhcmUvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgaW5pdHNjcmlwdC9zbGFja3dhcmUvTWFrZWZpbGUiIDs7CisgICAgImF2YWhpLWRuc2NvbmZkL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGF2YWhpLWRuc2NvbmZkL01ha2VmaWxlIiA7OworICAgICJhdmFoaS11dGlscy9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBhdmFoaS11dGlscy9NYWtlZmlsZSIgOzsKKyAgICAiYXZhaGktcHl0aG9uL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGF2YWhpLXB5dGhvbi9NYWtlZmlsZSIgOzsKKyAgICAiYXZhaGktcHl0aG9uL2F2YWhpL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGF2YWhpLXB5dGhvbi9hdmFoaS9NYWtlZmlsZSIgOzsKKyAgICAiYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGF2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9NYWtlZmlsZSIgOzsKKyAgICAiZXhhbXBsZXMvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZXhhbXBsZXMvTWFrZWZpbGUiIDs7CisgICAgImNvbW1vbi9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBjb21tb24vTWFrZWZpbGUiIDs7CisgICAgIm1hbi9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBtYW4vTWFrZWZpbGUiIDs7CisgICAgInRlc3RzL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRlc3RzL01ha2VmaWxlIiA7OworICAgICJzZXJ2aWNlLXR5cGUtZGF0YWJhc2UvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgc2VydmljZS10eXBlLWRhdGFiYXNlL01ha2VmaWxlIiA7OworICAgICJhdmFoaS1zaGFycC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBhdmFoaS1zaGFycC9NYWtlZmlsZSIgOzsKKyAgICAiYXZhaGktdWktc2hhcnAvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgYXZhaGktdWktc2hhcnAvTWFrZWZpbGUiIDs7CisgICAgImF2YWhpLWNvbXBhdC1saWJkbnNfc2QvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgYXZhaGktY29tcGF0LWxpYmRuc19zZC9NYWtlZmlsZSIgOzsKKyAgICAiYXZhaGktY29tcGF0LWhvd2wvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgYXZhaGktY29tcGF0LWhvd2wvTWFrZWZpbGUiIDs7CisgICAgImF2YWhpLWNvbXBhdC1ob3dsL3NhbXBsZXMvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgYXZhaGktY29tcGF0LWhvd2wvc2FtcGxlcy9NYWtlZmlsZSIgOzsKKyAgICAiYXZhaGktYXV0b2lwZC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBhdmFoaS1hdXRvaXBkL01ha2VmaWxlIiA7OworICAgICJhdmFoaS11aS9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBhdmFoaS11aS9NYWtlZmlsZSIgOzsKKyAgICAicG8vTWFrZWZpbGUuaW4iKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgcG8vTWFrZWZpbGUuaW4iIDs7CisgICAgInBvL3N0YW1wLWl0IikgQ09ORklHX0NPTU1BTkRTPSIkQ09ORklHX0NPTU1BTkRTIHBvL3N0YW1wLWl0IiA7OworCisgICopIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIGFyZ3VtZW50OiBcYCRhY19jb25maWdfdGFyZ2V0JyIgIiRMSU5FTk8iIDU7OworICBlc2FjCitkb25lCisKKworIyBJZiB0aGUgdXNlciBkaWQgbm90IHVzZSB0aGUgYXJndW1lbnRzIHRvIHNwZWNpZnkgdGhlIGl0ZW1zIHRvIGluc3RhbnRpYXRlLAorIyB0aGVuIHRoZSBlbnZ2YXIgaW50ZXJmYWNlIGlzIHVzZWQuICBTZXQgb25seSB0aG9zZSB0aGF0IGFyZSBub3QuCisjIFdlIHVzZSB0aGUgbG9uZyBmb3JtIGZvciB0aGUgZGVmYXVsdCBhc3NpZ25tZW50IGJlY2F1c2Ugb2YgYW4gZXh0cmVtZWx5CisjIGJpemFycmUgYnVnIG9uIFN1bk9TIDQuMS4zLgoraWYgJGFjX25lZWRfZGVmYXVsdHM7IHRoZW4KKyAgdGVzdCAiJHtDT05GSUdfRklMRVMrc2V0fSIgPSBzZXQgfHwgQ09ORklHX0ZJTEVTPSRjb25maWdfZmlsZXMKKyAgdGVzdCAiJHtDT05GSUdfSEVBREVSUytzZXR9IiA9IHNldCB8fCBDT05GSUdfSEVBREVSUz0kY29uZmlnX2hlYWRlcnMKKyAgdGVzdCAiJHtDT05GSUdfQ09NTUFORFMrc2V0fSIgPSBzZXQgfHwgQ09ORklHX0NPTU1BTkRTPSRjb25maWdfY29tbWFuZHMKK2ZpCisKKyMgSGF2ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgZm9yIGNvbnZlbmllbmNlLiAgTWFrZSBpdCBpbiB0aGUgYnVpbGQgdHJlZQorIyBzaW1wbHkgYmVjYXVzZSB0aGVyZSBpcyBubyByZWFzb24gYWdhaW5zdCBoYXZpbmcgaXQgaGVyZSwgYW5kIGluIGFkZGl0aW9uLAorIyBjcmVhdGluZyBhbmQgbW92aW5nIGZpbGVzIGZyb20gL3RtcCBjYW4gc29tZXRpbWVzIGNhdXNlIHByb2JsZW1zLgorIyBIb29rIGZvciBpdHMgcmVtb3ZhbCB1bmxlc3MgZGVidWdnaW5nLgorIyBOb3RlIHRoYXQgdGhlcmUgaXMgYSBzbWFsbCB3aW5kb3cgaW4gd2hpY2ggdGhlIGRpcmVjdG9yeSB3aWxsIG5vdCBiZSBjbGVhbmVkOgorIyBhZnRlciBpdHMgY3JlYXRpb24gYnV0IGJlZm9yZSBpdHMgbmFtZSBoYXMgYmVlbiBhc3NpZ25lZCB0byBgJHRtcCcuCiskZGVidWcgfHwKK3sKKyAgdG1wPSBhY190bXA9CisgIHRyYXAgJ2V4aXRfc3RhdHVzPSQ/CisgIDogIiR7YWNfdG1wOj0kdG1wfSIKKyAgeyB0ZXN0ICEgLWQgIiRhY190bXAiIHx8IHJtIC1mciAiJGFjX3RtcCI7IH0gJiYgZXhpdCAkZXhpdF9zdGF0dXMKKycgMAorICB0cmFwICdhc19mbl9leGl0IDEnIDEgMiAxMyAxNQorfQorIyBDcmVhdGUgYSAoc2VjdXJlKSB0bXAgZGlyZWN0b3J5IGZvciB0bXAgZmlsZXMuCisKK3sKKyAgdG1wPWAodW1hc2sgMDc3ICYmIG1rdGVtcCAtZCAiLi9jb25mWFhYWFhYIikgMj4vZGV2L251bGxgICYmCisgIHRlc3QgLWQgIiR0bXAiCit9ICB8fAoreworICB0bXA9Li9jb25mJCQtJFJBTkRPTQorICAodW1hc2sgMDc3ICYmIG1rZGlyICIkdG1wIikKK30gfHwgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBjcmVhdGUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGluIC4iICIkTElORU5PIiA1CithY190bXA9JHRtcAorCisjIFNldCB1cCB0aGUgc2NyaXB0cyBmb3IgQ09ORklHX0ZJTEVTIHNlY3Rpb24uCisjIE5vIG5lZWQgdG8gZ2VuZXJhdGUgdGhlbSBpZiB0aGVyZSBhcmUgbm8gQ09ORklHX0ZJTEVTLgorIyBUaGlzIGhhcHBlbnMgZm9yIGluc3RhbmNlIHdpdGggYC4vY29uZmlnLnN0YXR1cyBjb25maWcuaCcuCitpZiB0ZXN0IC1uICIkQ09ORklHX0ZJTEVTIjsgdGhlbgorCisKK2FjX2NyPWBlY2hvIFggfCB0ciBYICdcMDE1J2AKKyMgT24gY3lnd2luLCBiYXNoIGNhbiBlYXQgXHIgaW5zaWRlIGBgIGlmIHRoZSB1c2VyIHJlcXVlc3RlZCBpZ25jci4KKyMgQnV0IHdlIGtub3cgb2Ygbm8gb3RoZXIgc2hlbGwgd2hlcmUgYWNfY3Igd291bGQgYmUgZW1wdHkgYXQgdGhpcworIyBwb2ludCwgc28gd2UgY2FuIHVzZSBhIGJhc2hpc20gYXMgYSBmYWxsYmFjay4KK2lmIHRlc3QgIngkYWNfY3IiID0geDsgdGhlbgorICBldmFsIGFjX2NyPVwkXCdcXHJcJworZmkKK2FjX2NzX2F3a19jcj1gJEFXSyAnQkVHSU4geyBwcmludCAiYVxyYiIgfScgPC9kZXYvbnVsbCAyPi9kZXYvbnVsbGAKK2lmIHRlc3QgIiRhY19jc19hd2tfY3IiID0gImEke2FjX2NyfWIiOyB0aGVuCisgIGFjX2NzX2F3a19jcj0nXFxyJworZWxzZQorICBhY19jc19hd2tfY3I9JGFjX2NyCitmaQorCitlY2hvICdCRUdJTiB7JyA+IiRhY190bXAvc3ViczEuYXdrIiAmJgorX0FDRU9GCisKKworeworICBlY2hvICJjYXQgPmNvbmYkJHN1YnMuYXdrIDw8X0FDRU9GIiAmJgorICBlY2hvICIkYWNfc3Vic3RfdmFycyIgfCBzZWQgJ3MvLiovJiEkJiRhY19kZWxpbS8nICYmCisgIGVjaG8gIl9BQ0VPRiIKK30gPmNvbmYkJHN1YnMuc2ggfHwKKyAgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBtYWtlICRDT05GSUdfU1RBVFVTIiAiJExJTkVOTyIgNQorYWNfZGVsaW1fbnVtPWBlY2hvICIkYWNfc3Vic3RfdmFycyIgfCBncmVwIC1jICdeJ2AKK2FjX2RlbGltPSclIV8hIyAnCitmb3IgYWNfbGFzdF90cnkgaW4gZmFsc2UgZmFsc2UgZmFsc2UgZmFsc2UgZmFsc2UgOjsgZG8KKyAgLiAuL2NvbmYkJHN1YnMuc2ggfHwKKyAgICBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiICIkTElORU5PIiA1CisKKyAgYWNfZGVsaW1fbj1gc2VkIC1uICJzLy4qJGFjX2RlbGltXCQvWC9wIiBjb25mJCRzdWJzLmF3ayB8IGdyZXAgLWMgWGAKKyAgaWYgdGVzdCAkYWNfZGVsaW1fbiA9ICRhY19kZWxpbV9udW07IHRoZW4KKyAgICBicmVhaworICBlbGlmICRhY19sYXN0X3RyeTsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgbWFrZSAkQ09ORklHX1NUQVRVUyIgIiRMSU5FTk8iIDUKKyAgZWxzZQorICAgIGFjX2RlbGltPSIkYWNfZGVsaW0hJGFjX2RlbGltIF8kYWNfZGVsaW0hISAiCisgIGZpCitkb25lCitybSAtZiBjb25mJCRzdWJzLnNoCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorY2F0ID4+IlwkYWNfdG1wL3N1YnMxLmF3ayIgPDxcXF9BQ0FXSyAmJgorX0FDRU9GCitzZWQgLW4gJworaAorcy9eL1NbIi87IHMvIS4qLyJdPS8KK3AKK2cKK3MvXlteIV0qIS8vCis6cmVwbAordCByZXBsCitzLyciJGFjX2RlbGltIickLy8KK3QgZGVsaW0KKzpubAoraAorcy9cKC5cezE0OFx9XCkuLiovXDEvCit0IG1vcmUxCitzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC9cXG4iXFwvCitwCituCitiIHJlcGwKKzptb3JlMQorcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvIlxcLworcAorZworcy8uXHsxNDhcfS8vCit0IG5sCis6ZGVsaW0KK2gKK3MvXCguXHsxNDhcfVwpLi4qL1wxLwordCBtb3JlMgorcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvIi8KK3AKK2IKKzptb3JlMgorcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvIlxcLworcAorZworcy8uXHsxNDhcfS8vCit0IGRlbGltCisnIDxjb25mJCRzdWJzLmF3ayB8IHNlZCAnCisvXlteIiJdL3sKKyAgTgorICBzL1xuLy8KK30KKycgPj4kQ09ORklHX1NUQVRVUyB8fCBhY193cml0ZV9mYWlsPTEKK3JtIC1mIGNvbmYkJHN1YnMuYXdrCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK19BQ0FXSworY2F0ID4+IlwkYWNfdG1wL3N1YnMxLmF3ayIgPDxfQUNBV0sgJiYKKyAgZm9yIChrZXkgaW4gUykgU19pc19zZXRba2V5XSA9IDEKKyAgRlMgPSAiByIKKworfQoreworICBsaW5lID0gJCAwCisgIG5maWVsZHMgPSBzcGxpdChsaW5lLCBmaWVsZCwgIkAiKQorICBzdWJzdGVkID0gMAorICBsZW4gPSBsZW5ndGgoZmllbGRbMV0pCisgIGZvciAoaSA9IDI7IGkgPCBuZmllbGRzOyBpKyspIHsKKyAgICBrZXkgPSBmaWVsZFtpXQorICAgIGtleWxlbiA9IGxlbmd0aChrZXkpCisgICAgaWYgKFNfaXNfc2V0W2tleV0pIHsKKyAgICAgIHZhbHVlID0gU1trZXldCisgICAgICBsaW5lID0gc3Vic3RyKGxpbmUsIDEsIGxlbikgIiIgdmFsdWUgIiIgc3Vic3RyKGxpbmUsIGxlbiArIGtleWxlbiArIDMpCisgICAgICBsZW4gKz0gbGVuZ3RoKHZhbHVlKSArIGxlbmd0aChmaWVsZFsrK2ldKQorICAgICAgc3Vic3RlZCA9IDEKKyAgICB9IGVsc2UKKyAgICAgIGxlbiArPSAxICsga2V5bGVuCisgIH0KKworICBwcmludCBsaW5lCit9CisKK19BQ0FXSworX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCitpZiBzZWQgInMvJGFjX2NyLy8iIDwgL2Rldi9udWxsID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgc2VkICJzLyRhY19jclwkLy87IHMvJGFjX2NyLyRhY19jc19hd2tfY3IvZyIKK2Vsc2UKKyAgY2F0CitmaSA8ICIkYWNfdG1wL3N1YnMxLmF3ayIgPiAiJGFjX3RtcC9zdWJzLmF3ayIgXAorICB8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IHNldHVwIGNvbmZpZyBmaWxlcyBtYWNoaW5lcnkiICIkTElORU5PIiA1CitfQUNFT0YKKworIyBWUEFUSCBtYXkgY2F1c2UgdHJvdWJsZSB3aXRoIHNvbWUgbWFrZXMsIHNvIHdlIHJlbW92ZSBzb2xlICQoc3JjZGlyKSwKKyMgJHtzcmNkaXJ9IGFuZCBAc3JjZGlyQCBlbnRyaWVzIGZyb20gVlBBVEggaWYgc3JjZGlyIGlzICIuIiwgc3RyaXAgbGVhZGluZyBhbmQKKyMgdHJhaWxpbmcgY29sb25zIGFuZCB0aGVuIHJlbW92ZSB0aGUgd2hvbGUgbGluZSBpZiBWUEFUSCBiZWNvbWVzIGVtcHR5CisjIChhY3R1YWxseSB3ZSBsZWF2ZSBhbiBlbXB0eSBsaW5lIHRvIHByZXNlcnZlIGxpbmUgbnVtYmVycykuCitpZiB0ZXN0ICJ4JHNyY2RpciIgPSB4LjsgdGhlbgorICBhY192cHN1Yj0nL15bCSBdKlZQQVRIWwkgXSo9WwkgXSoveworaAorcy8vLworcy9eLzovCitzL1sJIF0qJC86Lworcy86XCQoc3JjZGlyKTovOi9nCitzLzpcJHtzcmNkaXJ9Oi86L2cKK3MvOkBzcmNkaXJAOi86L2cKK3MvXjoqLy8KK3MvOiokLy8KK3gKK3MvXCg9WwkgXSpcKS4qL1wxLworRworcy9cbi8vCitzL15bXj1dKj1bCSBdKiQvLworfScKK2ZpCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2ZpICMgdGVzdCAtbiAiJENPTkZJR19GSUxFUyIKKworIyBTZXQgdXAgdGhlIHNjcmlwdHMgZm9yIENPTkZJR19IRUFERVJTIHNlY3Rpb24uCisjIE5vIG5lZWQgdG8gZ2VuZXJhdGUgdGhlbSBpZiB0aGVyZSBhcmUgbm8gQ09ORklHX0hFQURFUlMuCisjIFRoaXMgaGFwcGVucyBmb3IgaW5zdGFuY2Ugd2l0aCBgLi9jb25maWcuc3RhdHVzIE1ha2VmaWxlJy4KK2lmIHRlc3QgLW4gIiRDT05GSUdfSEVBREVSUyI7IHRoZW4KK2NhdCA+IiRhY190bXAvZGVmaW5lcy5hd2siIDw8XF9BQ0FXSyB8fAorQkVHSU4geworX0FDRU9GCisKKyMgVHJhbnNmb3JtIGNvbmZkZWZzLmggaW50byBhbiBhd2sgc2NyaXB0IGBkZWZpbmVzLmF3aycsIGVtYmVkZGVkIGFzCisjIGhlcmUtZG9jdW1lbnQgaW4gY29uZmlnLnN0YXR1cywgdGhhdCBzdWJzdGl0dXRlcyB0aGUgcHJvcGVyIHZhbHVlcyBpbnRvCisjIGNvbmZpZy5oLmluIHRvIHByb2R1Y2UgY29uZmlnLmguCisKKyMgQ3JlYXRlIGEgZGVsaW1pdGVyIHN0cmluZyB0aGF0IGRvZXMgbm90IGV4aXN0IGluIGNvbmZkZWZzLmgsIHRvIGVhc2UKKyMgaGFuZGxpbmcgb2YgbG9uZyBsaW5lcy4KK2FjX2RlbGltPSclIV8hIyAnCitmb3IgYWNfbGFzdF90cnkgaW4gZmFsc2UgZmFsc2UgOjsgZG8KKyAgYWNfdHQ9YHNlZCAtbiAiLyRhY19kZWxpbS9wIiBjb25mZGVmcy5oYAorICBpZiB0ZXN0IC16ICIkYWNfdHQiOyB0aGVuCisgICAgYnJlYWsKKyAgZWxpZiAkYWNfbGFzdF90cnk7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IG1ha2UgJENPTkZJR19IRUFERVJTIiAiJExJTkVOTyIgNQorICBlbHNlCisgICAgYWNfZGVsaW09IiRhY19kZWxpbSEkYWNfZGVsaW0gXyRhY19kZWxpbSEhICIKKyAgZmkKK2RvbmUKKworIyBGb3IgdGhlIGF3ayBzY3JpcHQsIEQgaXMgYW4gYXJyYXkgb2YgbWFjcm8gdmFsdWVzIGtleWVkIGJ5IG5hbWUsCisjIGxpa2V3aXNlIFAgY29udGFpbnMgbWFjcm8gcGFyYW1ldGVycyBpZiBhbnkuICBQcmVzZXJ2ZSBiYWNrc2xhc2gKKyMgbmV3bGluZSBzZXF1ZW5jZXMuCisKK2FjX3dvcmRfcmU9W18kYXNfY3JfTGV0dGVyc11bXyRhc19jcl9hbG51bV0qCitzZWQgLW4gJworcy8uXHsxNDhcfS8mJyIkYWNfZGVsaW0iJy9nCit0IHJzZXQKKzpyc2V0CitzL15bCSBdKiNbCSBdKmRlZmluZVsJIF1bCSBdKi8gLwordCBkZWYKK2QKKzpkZWYKK3MvXFwkLy8KK3QgYnNubAorcy9bIlxcXS9cXCYvZworcy9eIFwoJyIkYWNfd29yZF9yZSInXClcKChbXigpXSopXClbCSBdKlwoLipcKS9QWyJcMSJdPSJcMiJcCitEWyJcMSJdPSIgXDMiL3AKK3MvXiBcKCciJGFjX3dvcmRfcmUiJ1wpWwkgXSpcKC4qXCkvRFsiXDEiXT0iIFwyIi9wCitkCis6YnNubAorcy9bIlxcXS9cXCYvZworcy9eIFwoJyIkYWNfd29yZF9yZSInXClcKChbXigpXSopXClbCSBdKlwoLipcKS9QWyJcMSJdPSJcMiJcCitEWyJcMSJdPSIgXDNcXFxcXFxuIlxcL3AKK3QgY29udAorcy9eIFwoJyIkYWNfd29yZF9yZSInXClbCSBdKlwoLipcKS9EWyJcMSJdPSIgXDJcXFxcXFxuIlxcL3AKK3QgY29udAorZAorOmNvbnQKK24KK3MvLlx7MTQ4XH0vJiciJGFjX2RlbGltIicvZwordCBjbGVhcgorOmNsZWFyCitzL1xcJC8vCit0IGJzbmxjCitzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC8iL3AKK2QKKzpic25sYworcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvXFxcXFxcbiJcXC9wCitiIGNvbnQKKycgPGNvbmZkZWZzLmggfCBzZWQgJworcy8nIiRhY19kZWxpbSInLyJcXFwKKyIvZycgPj4kQ09ORklHX1NUQVRVUyB8fCBhY193cml0ZV9mYWlsPTEKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisgIGZvciAoa2V5IGluIEQpIERfaXNfc2V0W2tleV0gPSAxCisgIEZTID0gIgciCit9CisvXltcdCBdKiNbXHQgXSooZGVmaW5lfHVuZGVmKVtcdCBdKyRhY193b3JkX3JlKFtcdCAoXXxcJCkvIHsKKyAgbGluZSA9IFwkIDAKKyAgc3BsaXQobGluZSwgYXJnLCAiICIpCisgIGlmIChhcmdbMV0gPT0gIiMiKSB7CisgICAgZGVmdW5kZWYgPSBhcmdbMl0KKyAgICBtYWMxID0gYXJnWzNdCisgIH0gZWxzZSB7CisgICAgZGVmdW5kZWYgPSBzdWJzdHIoYXJnWzFdLCAyKQorICAgIG1hYzEgPSBhcmdbMl0KKyAgfQorICBzcGxpdChtYWMxLCBtYWMyLCAiKCIpICMpCisgIG1hY3JvID0gbWFjMlsxXQorICBwcmVmaXggPSBzdWJzdHIobGluZSwgMSwgaW5kZXgobGluZSwgZGVmdW5kZWYpIC0gMSkKKyAgaWYgKERfaXNfc2V0W21hY3JvXSkgeworICAgICMgUHJlc2VydmUgdGhlIHdoaXRlIHNwYWNlIHN1cnJvdW5kaW5nIHRoZSAiIyIuCisgICAgcHJpbnQgcHJlZml4ICJkZWZpbmUiLCBtYWNybyBQW21hY3JvXSBEW21hY3JvXQorICAgIG5leHQKKyAgfSBlbHNlIHsKKyAgICAjIFJlcGxhY2UgI3VuZGVmIHdpdGggY29tbWVudHMuICBUaGlzIGlzIG5lY2Vzc2FyeSwgZm9yIGV4YW1wbGUsCisgICAgIyBpbiB0aGUgY2FzZSBvZiBfUE9TSVhfU09VUkNFLCB3aGljaCBpcyBwcmVkZWZpbmVkIGFuZCByZXF1aXJlZAorICAgICMgb24gc29tZSBzeXN0ZW1zIHdoZXJlIGNvbmZpZ3VyZSB3aWxsIG5vdCBkZWNpZGUgdG8gZGVmaW5lIGl0LgorICAgIGlmIChkZWZ1bmRlZiA9PSAidW5kZWYiKSB7CisgICAgICBwcmludCAiLyoiLCBwcmVmaXggZGVmdW5kZWYsIG1hY3JvLCAiKi8iCisgICAgICBuZXh0CisgICAgfQorICB9Cit9Cit7IHByaW50IH0KK19BQ0FXSworX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisgIGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3Qgc2V0dXAgY29uZmlnIGhlYWRlcnMgbWFjaGluZXJ5IiAiJExJTkVOTyIgNQorZmkgIyB0ZXN0IC1uICIkQ09ORklHX0hFQURFUlMiCisKKworZXZhbCBzZXQgWCAiICA6RiAkQ09ORklHX0ZJTEVTICA6SCAkQ09ORklHX0hFQURFUlMgICAgOkMgJENPTkZJR19DT01NQU5EUyIKK3NoaWZ0Citmb3IgYWNfdGFnCitkbworICBjYXNlICRhY190YWcgaW4KKyAgOltGSExDXSkgYWNfbW9kZT0kYWNfdGFnOyBjb250aW51ZTs7CisgIGVzYWMKKyAgY2FzZSAkYWNfbW9kZSRhY190YWcgaW4KKyAgOltGSExdKjoqKTs7CisgIDpMKiB8IDpDKjoqKSBhc19mbl9lcnJvciAkPyAiaW52YWxpZCB0YWcgXGAkYWNfdGFnJyIgIiRMSU5FTk8iIDU7OworICA6W0ZIXS0pIGFjX3RhZz0tOi07OworICA6W0ZIXSopIGFjX3RhZz0kYWNfdGFnOiRhY190YWcuaW47OworICBlc2FjCisgIGFjX3NhdmVfSUZTPSRJRlMKKyAgSUZTPToKKyAgc2V0IHggJGFjX3RhZworICBJRlM9JGFjX3NhdmVfSUZTCisgIHNoaWZ0CisgIGFjX2ZpbGU9JDEKKyAgc2hpZnQKKworICBjYXNlICRhY19tb2RlIGluCisgIDpMKSBhY19zb3VyY2U9JDE7OworICA6W0ZIXSkKKyAgICBhY19maWxlX2lucHV0cz0KKyAgICBmb3IgYWNfZgorICAgIGRvCisgICAgICBjYXNlICRhY19mIGluCisgICAgICAtKSBhY19mPSIkYWNfdG1wL3N0ZGluIjs7CisgICAgICAqKSAjIExvb2sgZm9yIHRoZSBmaWxlIGZpcnN0IGluIHRoZSBidWlsZCB0cmVlLCB0aGVuIGluIHRoZSBzb3VyY2UgdHJlZQorCSAjIChpZiB0aGUgcGF0aCBpcyBub3QgYWJzb2x1dGUpLiAgVGhlIGFic29sdXRlIHBhdGggY2Fubm90IGJlIERPUy1zdHlsZSwKKwkgIyBiZWNhdXNlICRhY19mIGNhbm5vdCBjb250YWluIGA6Jy4KKwkgdGVzdCAtZiAiJGFjX2YiIHx8CisJICAgY2FzZSAkYWNfZiBpbgorCSAgIFtcXC8kXSopIGZhbHNlOzsKKwkgICAqKSB0ZXN0IC1mICIkc3JjZGlyLyRhY19mIiAmJiBhY19mPSIkc3JjZGlyLyRhY19mIjs7CisJICAgZXNhYyB8fAorCSAgIGFzX2ZuX2Vycm9yIDEgImNhbm5vdCBmaW5kIGlucHV0IGZpbGU6IFxgJGFjX2YnIiAiJExJTkVOTyIgNTs7CisgICAgICBlc2FjCisgICAgICBjYXNlICRhY19mIGluICpcJyopIGFjX2Y9YCRhc19lY2hvICIkYWNfZiIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OyBlc2FjCisgICAgICBhc19mbl9hcHBlbmQgYWNfZmlsZV9pbnB1dHMgIiAnJGFjX2YnIgorICAgIGRvbmUKKworICAgICMgTGV0J3Mgc3RpbGwgcHJldGVuZCBpdCBpcyBgY29uZmlndXJlJyB3aGljaCBpbnN0YW50aWF0ZXMgKGkuZS4sIGRvbid0CisgICAgIyB1c2UgJGFzX21lKSwgcGVvcGxlIHdvdWxkIGJlIHN1cnByaXNlZCB0byByZWFkOgorICAgICMgICAgLyogY29uZmlnLmguICBHZW5lcmF0ZWQgYnkgY29uZmlnLnN0YXR1cy4gICovCisgICAgY29uZmlndXJlX2lucHV0PSdHZW5lcmF0ZWQgZnJvbSAnYAorCSAgJGFzX2VjaG8gIiQqIiB8IHNlZCAnc3xeW146XSovfHw7c3w6W146XSovfCwgfGcnCisJYCcgYnkgY29uZmlndXJlLicKKyAgICBpZiB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtOyB0aGVuCisgICAgICBjb25maWd1cmVfaW5wdXQ9IiRhY19maWxlLiAgJGNvbmZpZ3VyZV9pbnB1dCIKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNjt9CisgICAgZmkKKyAgICAjIE5ldXRyYWxpemUgc3BlY2lhbCBjaGFyYWN0ZXJzIGludGVycHJldGVkIGJ5IHNlZCBpbiByZXBsYWNlbWVudCBzdHJpbmdzLgorICAgIGNhc2UgJGNvbmZpZ3VyZV9pbnB1dCBpbiAjKAorICAgICpcJiogfCAqXHwqIHwgKlxcKiApCisgICAgICAgYWNfc2VkX2NvbmZfaW5wdXQ9YCRhc19lY2hvICIkY29uZmlndXJlX2lucHV0IiB8CisgICAgICAgc2VkICdzL1tcXFxcJnxdL1xcXFwmL2cnYDs7ICMoCisgICAgKikgYWNfc2VkX2NvbmZfaW5wdXQ9JGNvbmZpZ3VyZV9pbnB1dDs7CisgICAgZXNhYworCisgICAgY2FzZSAkYWNfdGFnIGluCisgICAgKjotOiogfCAqOi0pIGNhdCA+IiRhY190bXAvc3RkaW4iIFwKKyAgICAgIHx8IGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiAiJExJTkVOTyIgNSA7OworICAgIGVzYWMKKyAgICA7OworICBlc2FjCisKKyAgYWNfZGlyPWAkYXNfZGlybmFtZSAtLSAiJGFjX2ZpbGUiIHx8CiskYXNfZXhwciBYIiRhY19maWxlIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorCSBYIiRhY19maWxlIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRhY19maWxlIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRhY19maWxlIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKyRhc19lY2hvIFgiJGFjX2ZpbGUiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXClbXi9dLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYAorICBhc19kaXI9IiRhY19kaXIiOyBhc19mbl9ta2Rpcl9wCisgIGFjX2J1aWxkZGlyPS4KKworY2FzZSAiJGFjX2RpciIgaW4KKy4pIGFjX2Rpcl9zdWZmaXg9IGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OworKikKKyAgYWNfZGlyX3N1ZmZpeD0vYCRhc19lY2hvICIkYWNfZGlyIiB8IHNlZCAnc3xeXC5bXFwvXXx8J2AKKyAgIyBBICIuLiIgZm9yIGVhY2ggZGlyZWN0b3J5IGluICRhY19kaXJfc3VmZml4LgorICBhY190b3BfYnVpbGRkaXJfc3ViPWAkYXNfZWNobyAiJGFjX2Rpcl9zdWZmaXgiIHwgc2VkICdzfC9bXlxcL10qfC8uLnxnO3N8L3x8J2AKKyAgY2FzZSAkYWNfdG9wX2J1aWxkZGlyX3N1YiBpbgorICAiIikgYWNfdG9wX2J1aWxkZGlyX3N1Yj0uIGFjX3RvcF9idWlsZF9wcmVmaXg9IDs7CisgICopICBhY190b3BfYnVpbGRfcHJlZml4PSRhY190b3BfYnVpbGRkaXJfc3ViLyA7OworICBlc2FjIDs7Citlc2FjCithY19hYnNfdG9wX2J1aWxkZGlyPSRhY19wd2QKK2FjX2Fic19idWlsZGRpcj0kYWNfcHdkJGFjX2Rpcl9zdWZmaXgKKyMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHk6CithY190b3BfYnVpbGRkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgKKworY2FzZSAkc3JjZGlyIGluCisgIC4pICAjIFdlIGFyZSBidWlsZGluZyBpbiBwbGFjZS4KKyAgICBhY19zcmNkaXI9LgorICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZGRpcl9zdWIKKyAgICBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfcHdkIDs7CisgIFtcXC9dKiB8ID86W1xcL10qICkgICMgQWJzb2x1dGUgbmFtZS4KKyAgICBhY19zcmNkaXI9JHNyY2RpciRhY19kaXJfc3VmZml4OworICAgIGFjX3RvcF9zcmNkaXI9JHNyY2RpcgorICAgIGFjX2Fic190b3Bfc3JjZGlyPSRzcmNkaXIgOzsKKyAgKikgIyBSZWxhdGl2ZSBuYW1lLgorICAgIGFjX3NyY2Rpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeCRzcmNkaXIkYWNfZGlyX3N1ZmZpeAorICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgkc3JjZGlyCisgICAgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3B3ZC8kc3JjZGlyIDs7Citlc2FjCithY19hYnNfc3JjZGlyPSRhY19hYnNfdG9wX3NyY2RpciRhY19kaXJfc3VmZml4CisKKworICBjYXNlICRhY19tb2RlIGluCisgIDpGKQorICAjCisgICMgQ09ORklHX0ZJTEUKKyAgIworCisgIGNhc2UgJElOU1RBTEwgaW4KKyAgW1xcLyRdKiB8ID86W1xcL10qICkgYWNfSU5TVEFMTD0kSU5TVEFMTCA7OworICAqKSBhY19JTlNUQUxMPSRhY190b3BfYnVpbGRfcHJlZml4JElOU1RBTEwgOzsKKyAgZXNhYworICBhY19NS0RJUl9QPSRNS0RJUl9QCisgIGNhc2UgJE1LRElSX1AgaW4KKyAgW1xcLyRdKiB8ID86W1xcL10qICkgOzsKKyAgKi8qKSBhY19NS0RJUl9QPSRhY190b3BfYnVpbGRfcHJlZml4JE1LRElSX1AgOzsKKyAgZXNhYworX0FDRU9GCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKyMgSWYgdGhlIHRlbXBsYXRlIGRvZXMgbm90IGtub3cgYWJvdXQgZGF0YXJvb3RkaXIsIGV4cGFuZCBpdC4KKyMgRklYTUU6IFRoaXMgaGFjayBzaG91bGQgYmUgcmVtb3ZlZCBhIGZldyB5ZWFycyBhZnRlciAyLjYwLgorYWNfZGF0YXJvb3RkaXJfaGFjaz07IGFjX2RhdGFyb290ZGlyX3NlZW49CithY19zZWRfZGF0YXJvb3Q9JworL2RhdGFyb290ZGlyLyB7CisgIHAKKyAgcQorfQorL0BkYXRhZGlyQC9wCisvQGRvY2RpckAvcAorL0BpbmZvZGlyQC9wCisvQGxvY2FsZWRpckAvcAorL0BtYW5kaXJAL3AnCitjYXNlIGBldmFsICJzZWQgLW4gXCJcJGFjX3NlZF9kYXRhcm9vdFwiICRhY19maWxlX2lucHV0cyJgIGluCisqZGF0YXJvb3RkaXIqKSBhY19kYXRhcm9vdGRpcl9zZWVuPXllczs7CisqQGRhdGFkaXJAKnwqQGRvY2RpckAqfCpAaW5mb2RpckAqfCpAbG9jYWxlZGlyQCp8KkBtYW5kaXJAKikKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkYWNfZmlsZV9pbnB1dHMgc2VlbXMgdG8gaWdub3JlIHRoZSAtLWRhdGFyb290ZGlyIHNldHRpbmciID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2ZpbGVfaW5wdXRzIHNlZW1zIHRvIGlnbm9yZSB0aGUgLS1kYXRhcm9vdGRpciBzZXR0aW5nIiA+JjI7fQorX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKyAgYWNfZGF0YXJvb3RkaXJfaGFjaz0nCisgIHMmQGRhdGFkaXJAJiRkYXRhZGlyJmcKKyAgcyZAZG9jZGlyQCYkZG9jZGlyJmcKKyAgcyZAaW5mb2RpckAmJGluZm9kaXImZworICBzJkBsb2NhbGVkaXJAJiRsb2NhbGVkaXImZworICBzJkBtYW5kaXJAJiRtYW5kaXImZworICBzJlxcXCR7ZGF0YXJvb3RkaXJ9JiRkYXRhcm9vdGRpciZnJyA7OworZXNhYworX0FDRU9GCisKKyMgTmV1dHJhbGl6ZSBWUEFUSCB3aGVuIGAkc3JjZGlyJyA9IGAuJy4KKyMgU2hlbGwgY29kZSBpbiBjb25maWd1cmUuYWMgbWlnaHQgc2V0IGV4dHJhc3ViLgorIyBGSVhNRTogZG8gd2UgcmVhbGx5IHdhbnQgdG8gbWFpbnRhaW4gdGhpcyBmZWF0dXJlPworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCithY19zZWRfZXh0cmE9IiRhY192cHN1YgorJGV4dHJhc3ViCitfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKzp0CisvQFthLXpBLVpfXVthLXpBLVpfMC05XSpALyFiCitzfEBjb25maWd1cmVfaW5wdXRAfCRhY19zZWRfY29uZl9pbnB1dHw7dCB0CitzJkB0b3BfYnVpbGRkaXJAJiRhY190b3BfYnVpbGRkaXJfc3ViJjt0IHQKK3MmQHRvcF9idWlsZF9wcmVmaXhAJiRhY190b3BfYnVpbGRfcHJlZml4Jjt0IHQKK3MmQHNyY2RpckAmJGFjX3NyY2RpciY7dCB0CitzJkBhYnNfc3JjZGlyQCYkYWNfYWJzX3NyY2RpciY7dCB0CitzJkB0b3Bfc3JjZGlyQCYkYWNfdG9wX3NyY2RpciY7dCB0CitzJkBhYnNfdG9wX3NyY2RpckAmJGFjX2Fic190b3Bfc3JjZGlyJjt0IHQKK3MmQGJ1aWxkZGlyQCYkYWNfYnVpbGRkaXImO3QgdAorcyZAYWJzX2J1aWxkZGlyQCYkYWNfYWJzX2J1aWxkZGlyJjt0IHQKK3MmQGFic190b3BfYnVpbGRkaXJAJiRhY19hYnNfdG9wX2J1aWxkZGlyJjt0IHQKK3MmQElOU1RBTExAJiRhY19JTlNUQUxMJjt0IHQKK3MmQE1LRElSX1BAJiRhY19NS0RJUl9QJjt0IHQKKyRhY19kYXRhcm9vdGRpcl9oYWNrCisiCitldmFsIHNlZCBcIlwkYWNfc2VkX2V4dHJhXCIgIiRhY19maWxlX2lucHV0cyIgfCAkQVdLIC1mICIkYWNfdG1wL3N1YnMuYXdrIiBcCisgID4kYWNfdG1wL291dCB8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUKKwordGVzdCAteiAiJGFjX2RhdGFyb290ZGlyX2hhY2skYWNfZGF0YXJvb3RkaXJfc2VlbiIgJiYKKyAgeyBhY19vdXQ9YHNlZCAtbiAnL1wke2RhdGFyb290ZGlyfS9wJyAiJGFjX3RtcC9vdXQiYDsgdGVzdCAtbiAiJGFjX291dCI7IH0gJiYKKyAgeyBhY19vdXQ9YHNlZCAtbiAnL15bCSBdKmRhdGFyb290ZGlyWwkgXSo6Kj0vcCcgXAorICAgICAgIiRhY190bXAvb3V0ImA7IHRlc3QgLXogIiRhY19vdXQiOyB9ICYmCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJGFjX2ZpbGUgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIHZhcmlhYmxlIFxgZGF0YXJvb3RkaXInCit3aGljaCBzZWVtcyB0byBiZSB1bmRlZmluZWQuICBQbGVhc2UgbWFrZSBzdXJlIGl0IGlzIGRlZmluZWQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2ZpbGUgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIHZhcmlhYmxlIFxgZGF0YXJvb3RkaXInCit3aGljaCBzZWVtcyB0byBiZSB1bmRlZmluZWQuICBQbGVhc2UgbWFrZSBzdXJlIGl0IGlzIGRlZmluZWQiID4mMjt9CisKKyAgcm0gLWYgIiRhY190bXAvc3RkaW4iCisgIGNhc2UgJGFjX2ZpbGUgaW4KKyAgLSkgY2F0ICIkYWNfdG1wL291dCIgJiYgcm0gLWYgIiRhY190bXAvb3V0Ijs7CisgICopIHJtIC1mICIkYWNfZmlsZSIgJiYgbXYgIiRhY190bXAvb3V0IiAiJGFjX2ZpbGUiOzsKKyAgZXNhYyBcCisgIHx8IGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiAiJExJTkVOTyIgNQorIDs7CisgIDpIKQorICAjCisgICMgQ09ORklHX0hFQURFUgorICAjCisgIGlmIHRlc3QgeCIkYWNfZmlsZSIgIT0geC07IHRoZW4KKyAgICB7CisgICAgICAkYXNfZWNobyAiLyogJGNvbmZpZ3VyZV9pbnB1dCAgKi8iIFwKKyAgICAgICYmIGV2YWwgJyRBV0sgLWYgIiRhY190bXAvZGVmaW5lcy5hd2siJyAiJGFjX2ZpbGVfaW5wdXRzIgorICAgIH0gPiIkYWNfdG1wL2NvbmZpZy5oIiBcCisgICAgICB8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUKKyAgICBpZiBkaWZmICIkYWNfZmlsZSIgIiRhY190bXAvY29uZmlnLmgiID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfZmlsZSBpcyB1bmNoYW5nZWQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogJGFjX2ZpbGUgaXMgdW5jaGFuZ2VkIiA+JjY7fQorICAgIGVsc2UKKyAgICAgIHJtIC1mICIkYWNfZmlsZSIKKyAgICAgIG12ICIkYWNfdG1wL2NvbmZpZy5oIiAiJGFjX2ZpbGUiIFwKKwl8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUKKyAgICBmaQorICBlbHNlCisgICAgJGFzX2VjaG8gIi8qICRjb25maWd1cmVfaW5wdXQgICovIiBcCisgICAgICAmJiBldmFsICckQVdLIC1mICIkYWNfdG1wL2RlZmluZXMuYXdrIicgIiRhY19maWxlX2lucHV0cyIgXAorICAgICAgfHwgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBjcmVhdGUgLSIgIiRMSU5FTk8iIDUKKyAgZmkKKyMgQ29tcHV0ZSAiJGFjX2ZpbGUiJ3MgaW5kZXggaW4gJGNvbmZpZ19oZWFkZXJzLgorX2FtX2FyZz0iJGFjX2ZpbGUiCitfYW1fc3RhbXBfY291bnQ9MQorZm9yIF9hbV9oZWFkZXIgaW4gJGNvbmZpZ19oZWFkZXJzIDo7IGRvCisgIGNhc2UgJF9hbV9oZWFkZXIgaW4KKyAgICAkX2FtX2FyZyB8ICRfYW1fYXJnOiogKQorICAgICAgYnJlYWsgOzsKKyAgICAqICkKKyAgICAgIF9hbV9zdGFtcF9jb3VudD1gZXhwciAkX2FtX3N0YW1wX2NvdW50ICsgMWAgOzsKKyAgZXNhYworZG9uZQorZWNobyAidGltZXN0YW1wIGZvciAkX2FtX2FyZyIgPmAkYXNfZGlybmFtZSAtLSAiJF9hbV9hcmciIHx8CiskYXNfZXhwciBYIiRfYW1fYXJnIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorCSBYIiRfYW1fYXJnIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRfYW1fYXJnIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRfYW1fYXJnIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKyRhc19lY2hvIFgiJF9hbV9hcmciIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXClbXi9dLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYC9zdGFtcC1oJF9hbV9zdGFtcF9jb3VudAorIDs7CisKKyAgOkMpICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGV4ZWN1dGluZyAkYWNfZmlsZSBjb21tYW5kcyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBleGVjdXRpbmcgJGFjX2ZpbGUgY29tbWFuZHMiID4mNjt9CisgOzsKKyAgZXNhYworCisKKyAgY2FzZSAkYWNfZmlsZSRhY19tb2RlIGluCisgICAgImRlcGZpbGVzIjpDKSB0ZXN0IHgiJEFNREVQX1RSVUUiICE9IHgiIiB8fCB7CisgICMgQXV0b2NvbmYgMi42MiBxdW90ZXMgLS1maWxlIGFyZ3VtZW50cyBmb3IgZXZhbCwgYnV0IG5vdCB3aGVuIGZpbGVzCisgICMgYXJlIGxpc3RlZCB3aXRob3V0IC0tZmlsZS4gIExldCdzIHBsYXkgc2FmZSBhbmQgb25seSBlbmFibGUgdGhlIGV2YWwKKyAgIyBpZiB3ZSBkZXRlY3QgdGhlIHF1b3RpbmcuCisgIGNhc2UgJENPTkZJR19GSUxFUyBpbgorICAqXCcqKSBldmFsIHNldCB4ICIkQ09ORklHX0ZJTEVTIiA7OworICAqKSAgIHNldCB4ICRDT05GSUdfRklMRVMgOzsKKyAgZXNhYworICBzaGlmdAorICBmb3IgbWYKKyAgZG8KKyAgICAjIFN0cmlwIE1GIHNvIHdlIGVuZCB1cCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBmaWxlLgorICAgIG1mPWBlY2hvICIkbWYiIHwgc2VkIC1lICdzLzouKiQvLydgCisgICAgIyBDaGVjayB3aGV0aGVyIHRoaXMgaXMgYW4gQXV0b21ha2UgZ2VuZXJhdGVkIE1ha2VmaWxlIG9yIG5vdC4KKyAgICAjIFdlIHVzZWQgdG8gbWF0Y2ggb25seSB0aGUgZmlsZXMgbmFtZWQgYE1ha2VmaWxlLmluJywgYnV0CisgICAgIyBzb21lIHBlb3BsZSByZW5hbWUgdGhlbTsgc28gaW5zdGVhZCB3ZSBsb29rIGF0IHRoZSBmaWxlIGNvbnRlbnQuCisgICAgIyBHcmVwJ2luZyB0aGUgZmlyc3QgbGluZSBpcyBub3QgZW5vdWdoOiBzb21lIHBlb3BsZSBwb3N0LXByb2Nlc3MKKyAgICAjIGVhY2ggTWFrZWZpbGUuaW4gYW5kIGFkZCBhIG5ldyBsaW5lIG9uIHRvcCBvZiBlYWNoIGZpbGUgdG8gc2F5IHNvLgorICAgICMgR3JlcCdpbmcgdGhlIHdob2xlIGZpbGUgaXMgbm90IGdvb2QgZWl0aGVyOiBBSVggZ3JlcCBoYXMgYSBsaW5lCisgICAgIyBsaW1pdCBvZiAyMDQ4LCBidXQgYWxsIHNlZCdzIHdlIGtub3cgaGF2ZSB1bmRlcnN0YW5kIGF0IGxlYXN0IDQwMDAuCisgICAgaWYgc2VkIC1uICdzLF4jLipnZW5lcmF0ZWQgYnkgYXV0b21ha2UuKixYLHAnICIkbWYiIHwgZ3JlcCBYID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgZGlycGFydD1gJGFzX2Rpcm5hbWUgLS0gIiRtZiIgfHwKKyRhc19leHByIFgiJG1mIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorCSBYIiRtZiIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkbWYiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJG1mIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKyRhc19lY2hvIFgiJG1mIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2AKKyAgICBlbHNlCisgICAgICBjb250aW51ZQorICAgIGZpCisgICAgIyBFeHRyYWN0IHRoZSBkZWZpbml0aW9uIG9mIERFUERJUiwgYW1fX2luY2x1ZGUsIGFuZCBhbV9fcXVvdGUKKyAgICAjIGZyb20gdGhlIE1ha2VmaWxlIHdpdGhvdXQgcnVubmluZyBgbWFrZScuCisgICAgREVQRElSPWBzZWQgLW4gJ3MvXkRFUERJUiA9IC8vcCcgPCAiJG1mImAKKyAgICB0ZXN0IC16ICIkREVQRElSIiAmJiBjb250aW51ZQorICAgIGFtX19pbmNsdWRlPWBzZWQgLW4gJ3MvXmFtX19pbmNsdWRlID0gLy9wJyA8ICIkbWYiYAorICAgIHRlc3QgLXogImFtX19pbmNsdWRlIiAmJiBjb250aW51ZQorICAgIGFtX19xdW90ZT1gc2VkIC1uICdzL15hbV9fcXVvdGUgPSAvL3AnIDwgIiRtZiJgCisgICAgIyBXaGVuIHVzaW5nIGFuc2kya25yLCBVIG1heSBiZSBlbXB0eSBvciBhbiB1bmRlcnNjb3JlOyBleHBhbmQgaXQKKyAgICBVPWBzZWQgLW4gJ3MvXlUgPSAvL3AnIDwgIiRtZiJgCisgICAgIyBGaW5kIGFsbCBkZXBlbmRlbmN5IG91dHB1dCBmaWxlcywgdGhleSBhcmUgaW5jbHVkZWQgZmlsZXMgd2l0aAorICAgICMgJChERVBESVIpIGluIHRoZWlyIG5hbWVzLiAgV2UgaW52b2tlIHNlZCB0d2ljZSBiZWNhdXNlIGl0IGlzIHRoZQorICAgICMgc2ltcGxlc3QgYXBwcm9hY2ggdG8gY2hhbmdpbmcgJChERVBESVIpIHRvIGl0cyBhY3R1YWwgdmFsdWUgaW4gdGhlCisgICAgIyBleHBhbnNpb24uCisgICAgZm9yIGZpbGUgaW4gYHNlZCAtbiAiCisgICAgICBzL14kYW1fX2luY2x1ZGUgJGFtX19xdW90ZVwoLiooREVQRElSKS4qXCkkYW1fX3F1b3RlIickL1wxL3AnIDwiJG1mIiB8IFwKKwkgc2VkIC1lICdzL1wkKERFUERJUikvJyIkREVQRElSIicvZycgLWUgJ3MvXCRVLyciJFUiJy9nJ2A7IGRvCisgICAgICAjIE1ha2Ugc3VyZSB0aGUgZGlyZWN0b3J5IGV4aXN0cy4KKyAgICAgIHRlc3QgLWYgIiRkaXJwYXJ0LyRmaWxlIiAmJiBjb250aW51ZQorICAgICAgZmRpcj1gJGFzX2Rpcm5hbWUgLS0gIiRmaWxlIiB8fAorJGFzX2V4cHIgWCIkZmlsZSIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkZmlsZSIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkZmlsZSIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkZmlsZSIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYIiRmaWxlIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2AKKyAgICAgIGFzX2Rpcj0kZGlycGFydC8kZmRpcjsgYXNfZm5fbWtkaXJfcAorICAgICAgIyBlY2hvICJjcmVhdGluZyAkZGlycGFydC8kZmlsZSIKKyAgICAgIGVjaG8gJyMgZHVtbXknID4gIiRkaXJwYXJ0LyRmaWxlIgorICAgIGRvbmUKKyAgZG9uZQorfQorIDs7CisgICAgImxpYnRvb2wiOkMpCisKKyAgICAjIFNlZSBpZiB3ZSBhcmUgcnVubmluZyBvbiB6c2gsIGFuZCBzZXQgdGhlIG9wdGlvbnMgd2hpY2ggYWxsb3cgb3VyCisgICAgIyBjb21tYW5kcyB0aHJvdWdoIHdpdGhvdXQgcmVtb3ZhbCBvZiBcIGVzY2FwZXMuCisgICAgaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiA7IHRoZW4KKyAgICAgIHNldG9wdCBOT19HTE9CX1NVQlNUCisgICAgZmkKKworICAgIGNmZ2ZpbGU9IiR7b2ZpbGV9VCIKKyAgICB0cmFwICIkUk0gXCIkY2ZnZmlsZVwiOyBleGl0IDEiIDEgMiAxNQorICAgICRSTSAiJGNmZ2ZpbGUiCisKKyAgICBjYXQgPDxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKyMhICRTSEVMTAorCisjIGAkRUNITyAiJG9maWxlIiB8IHNlZCAncyVeLiovJSUnYCAtIFByb3ZpZGUgZ2VuZXJhbGl6ZWQgbGlicmFyeS1idWlsZGluZyBzdXBwb3J0IHNlcnZpY2VzLgorIyBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSAkYXNfbWUgKCRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT04KKyMgTGlidG9vbCB3YXMgY29uZmlndXJlZCBvbiBob3N0IGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYDoKKyMgTk9URTogQ2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZSB3aWxsIGJlIGxvc3Q6IGxvb2sgYXQgbHRtYWluLnNoLgorIworIyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwKKyMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZQorIyAgICAgICAgICAgICAgICAgRm91bmRhdGlvbiwgSW5jLgorIyAgIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKKyMKKyMgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgTGlidG9vbC4KKyMKKyMgR05VIExpYnRvb2wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyMgaWYgeW91IGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIG9yIGxpYnJhcnkgdGhhdAorIyBpcyBidWlsdCB1c2luZyBHTlUgTGlidG9vbCwgeW91IG1heSBpbmNsdWRlIHRoaXMgZmlsZSB1bmRlciB0aGUKKyMgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisjCisjIEdOVSBMaWJ0b29sIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCBHTlUgTGlidG9vbDsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIGEgY29weQorIyBjYW4gYmUgZG93bmxvYWRlZCBmcm9tIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwuaHRtbCwgb3IKKyMgb2J0YWluZWQgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworCisjIFRoZSBuYW1lcyBvZiB0aGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHN1cHBvcnRlZCBieSB0aGlzIHNjcmlwdC4KK2F2YWlsYWJsZV90YWdzPSJDWFggIgorCisjICMjIyBCRUdJTiBMSUJUT09MIENPTkZJRworCisjIFdoaWNoIHJlbGVhc2Ugb2YgbGlidG9vbC5tNCB3YXMgdXNlZD8KK21hY3JvX3ZlcnNpb249JG1hY3JvX3ZlcnNpb24KK21hY3JvX3JldmlzaW9uPSRtYWNyb19yZXZpc2lvbgorCisjIFdoZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMuCitidWlsZF9saWJ0b29sX2xpYnM9JGVuYWJsZV9zaGFyZWQKKworIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzLgorYnVpbGRfb2xkX2xpYnM9JGVuYWJsZV9zdGF0aWMKKworIyBXaGF0IHR5cGUgb2Ygb2JqZWN0cyB0byBidWlsZC4KK3BpY19tb2RlPSRwaWNfbW9kZQorCisjIFdoZXRoZXIgb3Igbm90IHRvIG9wdGltaXplIGZvciBmYXN0IGluc3RhbGxhdGlvbi4KK2Zhc3RfaW5zdGFsbD0kZW5hYmxlX2Zhc3RfaW5zdGFsbAorCisjIFNoZWxsIHRvIHVzZSB3aGVuIGludm9raW5nIHNoZWxsIHNjcmlwdHMuCitTSEVMTD0kbHRfU0hFTEwKKworIyBBbiBlY2hvIHByb2dyYW0gdGhhdCBwcm90ZWN0cyBiYWNrc2xhc2hlcy4KK0VDSE89JGx0X0VDSE8KKworIyBUaGUgUEFUSCBzZXBhcmF0b3IgZm9yIHRoZSBidWlsZCBzeXN0ZW0uCitQQVRIX1NFUEFSQVRPUj0kbHRfUEFUSF9TRVBBUkFUT1IKKworIyBUaGUgaG9zdCBzeXN0ZW0uCitob3N0X2FsaWFzPSRob3N0X2FsaWFzCitob3N0PSRob3N0Citob3N0X29zPSRob3N0X29zCisKKyMgVGhlIGJ1aWxkIHN5c3RlbS4KK2J1aWxkX2FsaWFzPSRidWlsZF9hbGlhcworYnVpbGQ9JGJ1aWxkCitidWlsZF9vcz0kYnVpbGRfb3MKKworIyBBIHNlZCBwcm9ncmFtIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0LgorU0VEPSRsdF9TRUQKKworIyBTZWQgdGhhdCBoZWxwcyB1cyBhdm9pZCBhY2NpZGVudGFsbHkgdHJpZ2dlcmluZyBlY2hvKDEpIG9wdGlvbnMgbGlrZSAtbi4KK1hzZWQ9IlwkU0VEIC1lIDFzL15YLy8iCisKKyMgQSBncmVwIHByb2dyYW0gdGhhdCBoYW5kbGVzIGxvbmcgbGluZXMuCitHUkVQPSRsdF9HUkVQCisKKyMgQW4gRVJFIG1hdGNoZXIuCitFR1JFUD0kbHRfRUdSRVAKKworIyBBIGxpdGVyYWwgc3RyaW5nIG1hdGNoZXIuCitGR1JFUD0kbHRfRkdSRVAKKworIyBBIEJTRC0gb3IgTVMtY29tcGF0aWJsZSBuYW1lIGxpc3Rlci4KK05NPSRsdF9OTQorCisjIFdoZXRoZXIgd2UgbmVlZCBzb2Z0IG9yIGhhcmQgbGlua3MuCitMTl9TPSRsdF9MTl9TCisKKyMgV2hhdCBpcyB0aGUgbWF4aW11bSBsZW5ndGggb2YgYSBjb21tYW5kPworbWF4X2NtZF9sZW49JG1heF9jbWRfbGVuCisKKyMgT2JqZWN0IGZpbGUgc3VmZml4IChub3JtYWxseSAibyIpLgorb2JqZXh0PSRhY19vYmpleHQKKworIyBFeGVjdXRhYmxlIGZpbGUgc3VmZml4IChub3JtYWxseSAiIikuCitleGVleHQ9JGV4ZWV4dAorCisjIHdoZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzICJ1bnNldCIuCitsdF91bnNldD0kbHRfdW5zZXQKKworIyB0dXJuIHNwYWNlcyBpbnRvIG5ld2xpbmVzLgorU1AyTkw9JGx0X2x0X1NQMk5MCisKKyMgdHVybiBuZXdsaW5lcyBpbnRvIHNwYWNlcy4KK05MMlNQPSRsdF9sdF9OTDJTUAorCisjIGNvbnZlcnQgXCRidWlsZCBmaWxlIG5hbWVzIHRvIFwkaG9zdCBmb3JtYXQuCit0b19ob3N0X2ZpbGVfY21kPSRsdF9jdl90b19ob3N0X2ZpbGVfY21kCisKKyMgY29udmVydCBcJGJ1aWxkIGZpbGVzIHRvIHRvb2xjaGFpbiBmb3JtYXQuCit0b190b29sX2ZpbGVfY21kPSRsdF9jdl90b190b29sX2ZpbGVfY21kCisKKyMgQW4gb2JqZWN0IHN5bWJvbCBkdW1wZXIuCitPQkpEVU1QPSRsdF9PQkpEVU1QCisKKyMgTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHMuCitkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfZGVwbGlic19jaGVja19tZXRob2QKKworIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgorZmlsZV9tYWdpY19jbWQ9JGx0X2ZpbGVfbWFnaWNfY21kCisKKyMgSG93IHRvIGZpbmQgcG90ZW50aWFsIGZpbGVzIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCitmaWxlX21hZ2ljX2dsb2I9JGx0X2ZpbGVfbWFnaWNfZ2xvYgorCisjIEZpbmQgcG90ZW50aWFsIGZpbGVzIHVzaW5nIG5vY2FzZWdsb2Igd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KK3dhbnRfbm9jYXNlZ2xvYj0kbHRfd2FudF9ub2Nhc2VnbG9iCisKKyMgRExMIGNyZWF0aW9uIHByb2dyYW0uCitETExUT09MPSRsdF9ETExUT09MCisKKyMgQ29tbWFuZCB0byBhc3NvY2lhdGUgc2hhcmVkIGFuZCBsaW5rIGxpYnJhcmllcy4KK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAorCisjIFRoZSBhcmNoaXZlci4KK0FSPSRsdF9BUgorCisjIEZsYWdzIHRvIGNyZWF0ZSBhbiBhcmNoaXZlLgorQVJfRkxBR1M9JGx0X0FSX0ZMQUdTCisKKyMgSG93IHRvIGZlZWQgYSBmaWxlIGxpc3RpbmcgdG8gdGhlIGFyY2hpdmVyLgorYXJjaGl2ZXJfbGlzdF9zcGVjPSRsdF9hcmNoaXZlcl9saXN0X3NwZWMKKworIyBBIHN5bWJvbCBzdHJpcHBpbmcgcHJvZ3JhbS4KK1NUUklQPSRsdF9TVFJJUAorCisjIENvbW1hbmRzIHVzZWQgdG8gaW5zdGFsbCBhbiBvbGQtc3R5bGUgYXJjaGl2ZS4KK1JBTkxJQj0kbHRfUkFOTElCCitvbGRfcG9zdGluc3RhbGxfY21kcz0kbHRfb2xkX3Bvc3RpbnN0YWxsX2NtZHMKK29sZF9wb3N0dW5pbnN0YWxsX2NtZHM9JGx0X29sZF9wb3N0dW5pbnN0YWxsX2NtZHMKKworIyBXaGV0aGVyIHRvIHVzZSBhIGxvY2sgZm9yIG9sZCBhcmNoaXZlIGV4dHJhY3Rpb24uCitsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb249JGxvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbgorCisjIEEgQyBjb21waWxlci4KK0xUQ0M9JGx0X0NDCisKKyMgTFRDQyBjb21waWxlciBmbGFncy4KK0xUQ0ZMQUdTPSRsdF9DRkxBR1MKKworIyBUYWtlIHRoZSBvdXRwdXQgb2Ygbm0gYW5kIHByb2R1Y2UgYSBsaXN0aW5nIG9mIHJhdyBzeW1ib2xzIGFuZCBDIG5hbWVzLgorZ2xvYmFsX3N5bWJvbF9waXBlPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlCisKKyMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbi4KK2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsCisKKyMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyLgorZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MKKworIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIgd2hlbiBsaWIgcHJlZml4IGlzIG5lZWRlZC4KK2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeAorCisjIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcyBmb3IgXCROTS4KK25tX2ZpbGVfbGlzdF9zcGVjPSRsdF9ubV9maWxlX2xpc3Rfc3BlYworCisjIFRoZSByb290IHdoZXJlIHRvIHNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyxhbmQgaW4gd2hpY2ggb3VyIGxpYnJhcmllcyBzaG91bGQgYmUgaW5zdGFsbGVkLgorbHRfc3lzcm9vdD0kbHRfc3lzcm9vdAorCisjIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlcy4KK29iamRpcj0kb2JqZGlyCisKKyMgVXNlZCB0byBleGFtaW5lIGxpYnJhcmllcyB3aGVuIGZpbGVfbWFnaWNfY21kIGJlZ2lucyB3aXRoICJmaWxlIi4KK01BR0lDX0NNRD0kTUFHSUNfQ01ECisKKyMgTXVzdCB3ZSBsb2NrIGZpbGVzIHdoZW4gZG9pbmcgY29tcGlsYXRpb24/CituZWVkX2xvY2tzPSRsdF9uZWVkX2xvY2tzCisKKyMgTWFuaWZlc3QgdG9vbC4KK01BTklGRVNUX1RPT0w9JGx0X01BTklGRVNUX1RPT0wKKworIyBUb29sIHRvIG1hbmlwdWxhdGUgYXJjaGl2ZWQgRFdBUkYgZGVidWcgc3ltYm9sIGZpbGVzIG9uIE1hYyBPUyBYLgorRFNZTVVUSUw9JGx0X0RTWU1VVElMCisKKyMgVG9vbCB0byBjaGFuZ2UgZ2xvYmFsIHRvIGxvY2FsIHN5bWJvbHMgb24gTWFjIE9TIFguCitOTUVESVQ9JGx0X05NRURJVAorCisjIFRvb2wgdG8gbWFuaXB1bGF0ZSBmYXQgb2JqZWN0cyBhbmQgYXJjaGl2ZXMgb24gTWFjIE9TIFguCitMSVBPPSRsdF9MSVBPCisKKyMgbGRkL3JlYWRlbGYgbGlrZSB0b29sIGZvciBNYWNoLU8gYmluYXJpZXMgb24gTWFjIE9TIFguCitPVE9PTD0kbHRfT1RPT0wKKworIyBsZGQvcmVhZGVsZiBsaWtlIHRvb2wgZm9yIDY0IGJpdCBNYWNoLU8gYmluYXJpZXMgb24gTWFjIE9TIFggMTAuNC4KK09UT09MNjQ9JGx0X09UT09MNjQKKworIyBPbGQgYXJjaGl2ZSBzdWZmaXggKG5vcm1hbGx5ICJhIikuCitsaWJleHQ9JGxpYmV4dAorCisjIFNoYXJlZCBsaWJyYXJ5IHN1ZmZpeCAobm9ybWFsbHkgIi5zbyIpLgorc2hyZXh0X2NtZHM9JGx0X3NocmV4dF9jbWRzCisKKyMgVGhlIGNvbW1hbmRzIHRvIGV4dHJhY3QgdGhlIGV4cG9ydGVkIHN5bWJvbCBsaXN0IGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KK2V4dHJhY3RfZXhwc3ltc19jbWRzPSRsdF9leHRyYWN0X2V4cHN5bXNfY21kcworCisjIFZhcmlhYmxlcyB3aG9zZSB2YWx1ZXMgc2hvdWxkIGJlIHNhdmVkIGluIGxpYnRvb2wgd3JhcHBlciBzY3JpcHRzIGFuZAorIyByZXN0b3JlZCBhdCBsaW5rIHRpbWUuCit2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0kbHRfdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsKKworIyBEbyB3ZSBuZWVkIHRoZSAibGliIiBwcmVmaXggZm9yIG1vZHVsZXM/CituZWVkX2xpYl9wcmVmaXg9JG5lZWRfbGliX3ByZWZpeAorCisjIERvIHdlIG5lZWQgYSB2ZXJzaW9uIGZvciBsaWJyYXJpZXM/CituZWVkX3ZlcnNpb249JG5lZWRfdmVyc2lvbgorCisjIExpYnJhcnkgdmVyc2lvbmluZyB0eXBlLgordmVyc2lvbl90eXBlPSR2ZXJzaW9uX3R5cGUKKworIyBTaGFyZWQgbGlicmFyeSBydW50aW1lIHBhdGggdmFyaWFibGUuCitydW5wYXRoX3Zhcj0kcnVucGF0aF92YXIKKworIyBTaGFyZWQgbGlicmFyeSBwYXRoIHZhcmlhYmxlLgorc2hsaWJwYXRoX3Zhcj0kc2hsaWJwYXRoX3ZhcgorCisjIElzIHNobGlicGF0aCBzZWFyY2hlZCBiZWZvcmUgdGhlIGhhcmQtY29kZWQgbGlicmFyeSBzZWFyY2ggcGF0aD8KK3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD0kc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoCisKKyMgRm9ybWF0IG9mIGxpYnJhcnkgbmFtZSBwcmVmaXguCitsaWJuYW1lX3NwZWM9JGx0X2xpYm5hbWVfc3BlYworCisjIExpc3Qgb2YgYXJjaGl2ZSBuYW1lcy4gIEZpcnN0IG5hbWUgaXMgdGhlIHJlYWwgb25lLCB0aGUgcmVzdCBhcmUgbGlua3MuCisjIFRoZSBsYXN0IG5hbWUgaXMgdGhlIG9uZSB0aGF0IHRoZSBsaW5rZXIgZmluZHMgd2l0aCAtbE5BTUUKK2xpYnJhcnlfbmFtZXNfc3BlYz0kbHRfbGlicmFyeV9uYW1lc19zcGVjCisKKyMgVGhlIGNvZGVkIG5hbWUgb2YgdGhlIGxpYnJhcnksIGlmIGRpZmZlcmVudCBmcm9tIHRoZSByZWFsIG5hbWUuCitzb25hbWVfc3BlYz0kbHRfc29uYW1lX3NwZWMKKworIyBQZXJtaXNzaW9uIG1vZGUgb3ZlcnJpZGUgZm9yIGluc3RhbGxhdGlvbiBvZiBzaGFyZWQgbGlicmFyaWVzLgoraW5zdGFsbF9vdmVycmlkZV9tb2RlPSRsdF9pbnN0YWxsX292ZXJyaWRlX21vZGUKKworIyBDb21tYW5kIHRvIHVzZSBhZnRlciBpbnN0YWxsYXRpb24gb2YgYSBzaGFyZWQgYXJjaGl2ZS4KK3Bvc3RpbnN0YWxsX2NtZHM9JGx0X3Bvc3RpbnN0YWxsX2NtZHMKKworIyBDb21tYW5kIHRvIHVzZSBhZnRlciB1bmluc3RhbGxhdGlvbiBvZiBhIHNoYXJlZCBhcmNoaXZlLgorcG9zdHVuaW5zdGFsbF9jbWRzPSRsdF9wb3N0dW5pbnN0YWxsX2NtZHMKKworIyBDb21tYW5kcyB1c2VkIHRvIGZpbmlzaCBhIGxpYnRvb2wgbGlicmFyeSBpbnN0YWxsYXRpb24gaW4gYSBkaXJlY3RvcnkuCitmaW5pc2hfY21kcz0kbHRfZmluaXNoX2NtZHMKKworIyBBcyAiZmluaXNoX2NtZHMiLCBleGNlcHQgYSBzaW5nbGUgc2NyaXB0IGZyYWdtZW50IHRvIGJlIGV2YWxlZCBidXQKKyMgbm90IHNob3duLgorZmluaXNoX2V2YWw9JGx0X2ZpbmlzaF9ldmFsCisKKyMgV2hldGhlciB3ZSBzaG91bGQgaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIGxpYnJhcmllcy4KK2hhcmRjb2RlX2ludG9fbGlicz0kaGFyZGNvZGVfaW50b19saWJzCisKKyMgQ29tcGlsZS10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzLgorc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSRsdF9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKKworIyBSdW4tdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcy4KK3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRsdF9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYworCisjIFdoZXRoZXIgZGxvcGVuIGlzIHN1cHBvcnRlZC4KK2Rsb3Blbl9zdXBwb3J0PSRlbmFibGVfZGxvcGVuCisKKyMgV2hldGhlciBkbG9wZW4gb2YgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkLgorZGxvcGVuX3NlbGY9JGVuYWJsZV9kbG9wZW5fc2VsZgorCisjIFdoZXRoZXIgZGxvcGVuIG9mIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW1zIGlzIHN1cHBvcnRlZC4KK2Rsb3Blbl9zZWxmX3N0YXRpYz0kZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYworCisjIENvbW1hbmRzIHRvIHN0cmlwIGxpYnJhcmllcy4KK29sZF9zdHJpcGxpYj0kbHRfb2xkX3N0cmlwbGliCitzdHJpcGxpYj0kbHRfc3RyaXBsaWIKKworCisjIFRoZSBsaW5rZXIgdXNlZCB0byBidWlsZCBsaWJyYXJpZXMuCitMRD0kbHRfTEQKKworIyBIb3cgdG8gY3JlYXRlIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzLgorcmVsb2FkX2ZsYWc9JGx0X3JlbG9hZF9mbGFnCityZWxvYWRfY21kcz0kbHRfcmVsb2FkX2NtZHMKKworIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuIG9sZC1zdHlsZSBhcmNoaXZlLgorb2xkX2FyY2hpdmVfY21kcz0kbHRfb2xkX2FyY2hpdmVfY21kcworCisjIEEgbGFuZ3VhZ2Ugc3BlY2lmaWMgY29tcGlsZXIuCitDQz0kbHRfY29tcGlsZXIKKworIyBJcyB0aGUgY29tcGlsZXIgdGhlIEdOVSBjb21waWxlcj8KK3dpdGhfZ2NjPSRHQ0MKKworIyBDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zLgorbm9fYnVpbHRpbl9mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZworCisjIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KK3BpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3BpYworCisjIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCit3bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bAorCisjIENvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmcuCitsaW5rX3N0YXRpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3N0YXRpYworCisjIERvZXMgY29tcGlsZXIgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydCAtYyBhbmQgLW8gb3B0aW9ucz8KK2NvbXBpbGVyX2Nfbz0kbHRfbHRfY3ZfcHJvZ19jb21waWxlcl9jX28KKworIyBXaGV0aGVyIG9yIG5vdCB0byBhZGQgLWxjIGZvciBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzLgorYnVpbGRfbGlidG9vbF9uZWVkX2xjPSRhcmNoaXZlX2NtZHNfbmVlZF9sYworCisjIFdoZXRoZXIgb3Igbm90IHRvIGRpc2FsbG93IHNoYXJlZCBsaWJzIHdoZW4gcnVudGltZSBsaWJzIGFyZSBzdGF0aWMuCithbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXM9JGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMKKworIyBDb21waWxlciBmbGFnIHRvIGFsbG93IHJlZmxleGl2ZSBkbG9wZW5zLgorZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSRsdF9leHBvcnRfZHluYW1pY19mbGFnX3NwZWMKKworIyBDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHNoYXJlZCBvYmplY3RzIGRpcmVjdGx5IGZyb20gYXJjaGl2ZXMuCit3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0kbHRfd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMKKworIyBXaGV0aGVyIHRoZSBjb21waWxlciBjb3BlcyB3aXRoIHBhc3Npbmcgbm8gb2JqZWN0cyBkaXJlY3RseS4KK2NvbXBpbGVyX25lZWRzX29iamVjdD0kbHRfY29tcGlsZXJfbmVlZHNfb2JqZWN0CisKKyMgQ3JlYXRlIGFuIG9sZC1zdHlsZSBhcmNoaXZlIGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KK29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9JGx0X29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMKKworIyBDcmVhdGUgYSB0ZW1wb3Jhcnkgb2xkLXN0eWxlIGFyY2hpdmUgdG8gbGluayBpbnN0ZWFkIG9mIGEgc2hhcmVkIGFyY2hpdmUuCitvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcz0kbHRfb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMKKworIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgc2hhcmVkIGFyY2hpdmUuCithcmNoaXZlX2NtZHM9JGx0X2FyY2hpdmVfY21kcworYXJjaGl2ZV9leHBzeW1fY21kcz0kbHRfYXJjaGl2ZV9leHBzeW1fY21kcworCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBsb2FkYWJsZSBtb2R1bGUgaWYgZGlmZmVyZW50IGZyb20gYnVpbGRpbmcKKyMgYSBzaGFyZWQgYXJjaGl2ZS4KK21vZHVsZV9jbWRzPSRsdF9tb2R1bGVfY21kcworbW9kdWxlX2V4cHN5bV9jbWRzPSRsdF9tb2R1bGVfZXhwc3ltX2NtZHMKKworIyBXaGV0aGVyIHdlIGFyZSBidWlsZGluZyB3aXRoIEdOVSBsZCBvciBub3QuCit3aXRoX2dudV9sZD0kbHRfd2l0aF9nbnVfbGQKKworIyBGbGFnIHRoYXQgYWxsb3dzIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB1bmRlZmluZWQgc3ltYm9scyB0byBiZSBidWlsdC4KK2FsbG93X3VuZGVmaW5lZF9mbGFnPSRsdF9hbGxvd191bmRlZmluZWRfZmxhZworCisjIEZsYWcgdGhhdCBlbmZvcmNlcyBubyB1bmRlZmluZWQgc3ltYm9scy4KK25vX3VuZGVmaW5lZF9mbGFnPSRsdF9ub191bmRlZmluZWRfZmxhZworCisjIEZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KKyMgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzIG5vdCBleGlzdAoraGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0kbHRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYworCisjIFdoZXRoZXIgd2UgbmVlZCBhIHNpbmdsZSAiLXJwYXRoIiBmbGFnIHdpdGggYSBzZXBhcmF0ZWQgYXJndW1lbnQuCitoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSRsdF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yCisKKyMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIERJUi9saWJOQU1FXCR7c2hhcmVkX2V4dH0gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCisjIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfZGlyZWN0PSRoYXJkY29kZV9kaXJlY3QKKworIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUVcJHtzaGFyZWRfZXh0fSBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMKKyMgRElSIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkgYW5kIHRoZSByZXN1bHRpbmcgbGlicmFyeSBkZXBlbmRlbmN5IGlzCisjICJhYnNvbHV0ZSIsaS5lIGltcG9zc2libGUgdG8gY2hhbmdlIGJ5IHNldHRpbmcgXCR7c2hsaWJwYXRoX3Zhcn0gaWYgdGhlCisjIGxpYnJhcnkgaXMgcmVsb2NhdGVkLgoraGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPSRoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUKKworIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgdGhlIC1MRElSIGZsYWcgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUgorIyBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfbWludXNfTD0kaGFyZGNvZGVfbWludXNfTAorCisjIFNldCB0byAieWVzIiBpZiB1c2luZyBTSExJQlBBVEhfVkFSPURJUiBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSCisjIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkuCitoYXJkY29kZV9zaGxpYnBhdGhfdmFyPSRoYXJkY29kZV9zaGxpYnBhdGhfdmFyCisKKyMgU2V0IHRvICJ5ZXMiIGlmIGJ1aWxkaW5nIGEgc2hhcmVkIGxpYnJhcnkgYXV0b21hdGljYWxseSBoYXJkY29kZXMgRElSCisjIGludG8gdGhlIGxpYnJhcnkgYW5kIGFsbCBzdWJzZXF1ZW50IGxpYnJhcmllcyBhbmQgZXhlY3V0YWJsZXMgbGlua2VkCisjIGFnYWluc3QgaXQuCitoYXJkY29kZV9hdXRvbWF0aWM9JGhhcmRjb2RlX2F1dG9tYXRpYworCisjIFNldCB0byB5ZXMgaWYgbGlua2VyIGFkZHMgcnVudGltZSBwYXRocyBvZiBkZXBlbmRlbnQgbGlicmFyaWVzCisjIHRvIHJ1bnRpbWUgcGF0aCBsaXN0LgoraW5oZXJpdF9ycGF0aD0kaW5oZXJpdF9ycGF0aAorCisjIFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllcy4KK2xpbmtfYWxsX2RlcGxpYnM9JGxpbmtfYWxsX2RlcGxpYnMKKworIyBTZXQgdG8gInllcyIgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCithbHdheXNfZXhwb3J0X3N5bWJvbHM9JGFsd2F5c19leHBvcnRfc3ltYm9scworCisjIFRoZSBjb21tYW5kcyB0byBsaXN0IGV4cG9ydGVkIHN5bWJvbHMuCitleHBvcnRfc3ltYm9sc19jbWRzPSRsdF9leHBvcnRfc3ltYm9sc19jbWRzCisKKyMgU3ltYm9scyB0aGF0IHNob3VsZCBub3QgYmUgbGlzdGVkIGluIHRoZSBwcmVsb2FkZWQgc3ltYm9scy4KK2V4Y2x1ZGVfZXhwc3ltcz0kbHRfZXhjbHVkZV9leHBzeW1zCisKKyMgU3ltYm9scyB0aGF0IG11c3QgYWx3YXlzIGJlIGV4cG9ydGVkLgoraW5jbHVkZV9leHBzeW1zPSRsdF9pbmNsdWRlX2V4cHN5bXMKKworIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgcHJvZ3JhbXMgKGFnYWluc3QgbGlicmFyaWVzKSB3aXRoIHRlbXBsYXRlcy4KK3ByZWxpbmtfY21kcz0kbHRfcHJlbGlua19jbWRzCisKKyMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBmaW5pc2hpbmcgbGlua2luZyBwcm9ncmFtcy4KK3Bvc3RsaW5rX2NtZHM9JGx0X3Bvc3RsaW5rX2NtZHMKKworIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMuCitmaWxlX2xpc3Rfc3BlYz0kbHRfZmlsZV9saXN0X3NwZWMKKworIyBIb3cgdG8gaGFyZGNvZGUgYSBzaGFyZWQgbGlicmFyeSBwYXRoIGludG8gYW4gZXhlY3V0YWJsZS4KK2hhcmRjb2RlX2FjdGlvbj0kaGFyZGNvZGVfYWN0aW9uCisKKyMgVGhlIGRpcmVjdG9yaWVzIHNlYXJjaGVkIGJ5IHRoaXMgY29tcGlsZXIgd2hlbiBjcmVhdGluZyBhIHNoYXJlZCBsaWJyYXJ5LgorY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzPSRsdF9jb21waWxlcl9saWJfc2VhcmNoX2RpcnMKKworIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIGFuZCBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8KKyMgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkuCitwcmVkZXBfb2JqZWN0cz0kbHRfcHJlZGVwX29iamVjdHMKK3Bvc3RkZXBfb2JqZWN0cz0kbHRfcG9zdGRlcF9vYmplY3RzCitwcmVkZXBzPSRsdF9wcmVkZXBzCitwb3N0ZGVwcz0kbHRfcG9zdGRlcHMKKworIyBUaGUgbGlicmFyeSBzZWFyY2ggcGF0aCB1c2VkIGludGVybmFsbHkgYnkgdGhlIGNvbXBpbGVyIHdoZW4gbGlua2luZworIyBhIHNoYXJlZCBsaWJyYXJ5LgorY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoPSRsdF9jb21waWxlcl9saWJfc2VhcmNoX3BhdGgKKworIyAjIyMgRU5EIExJQlRPT0wgQ09ORklHCisKK19MVF9FT0YKKworICBjYXNlICRob3N0X29zIGluCisgIGFpeDMqKQorICAgIGNhdCA8PFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKyMgQUlYIHNvbWV0aW1lcyBoYXMgcHJvYmxlbXMgd2l0aCB0aGUgR0NDIGNvbGxlY3QyIHByb2dyYW0uICBGb3Igc29tZQorIyByZWFzb24sIGlmIHdlIHNldCB0aGUgQ09MTEVDVF9OQU1FUyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHByb2JsZW1zCisjIHZhbmlzaCBpbiBhIHB1ZmYgb2Ygc21va2UuCitpZiB0ZXN0ICJYJHtDT0xMRUNUX05BTUVTK3NldH0iICE9IFhzZXQ7IHRoZW4KKyAgQ09MTEVDVF9OQU1FUz0KKyAgZXhwb3J0IENPTExFQ1RfTkFNRVMKK2ZpCitfTFRfRU9GCisgICAgOzsKKyAgZXNhYworCisKK2x0bWFpbj0iJGFjX2F1eF9kaXIvbHRtYWluLnNoIgorCisKKyAgIyBXZSB1c2Ugc2VkIGluc3RlYWQgb2YgY2F0IGJlY2F1c2UgYmFzaCBvbiBESkdQUCBnZXRzIGNvbmZ1c2VkIGlmCisgICMgaWYgZmluZHMgbWl4ZWQgQ1IvTEYgYW5kIExGLW9ubHkgbGluZXMuICBTaW5jZSBzZWQgb3BlcmF0ZXMgaW4KKyAgIyB0ZXh0IG1vZGUsIGl0IHByb3Blcmx5IGNvbnZlcnRzIGxpbmVzIHRvIENSL0xGLiAgVGhpcyBiYXNoIHByb2JsZW0KKyAgIyBpcyByZXBvcnRlZGx5IGZpeGVkLCBidXQgd2h5IG5vdCBydW4gb24gb2xkIHZlcnNpb25zIHRvbz8KKyAgc2VkICckcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorCisgIGlmIHRlc3QgeCIkeHNpX3NoZWxsIiA9IHh5ZXM7IHRoZW4KKyAgc2VkIC1lICcvXmZ1bmNfZGlybmFtZSAoKSQvLC9efSAjIGZ1bmNfZGlybmFtZSAvY1wKK2Z1bmNfZGlybmFtZSAoKVwKK3tcCitcICAgIGNhc2UgJHsxfSBpblwKK1wgICAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7O1wKK1wgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7XAorXCAgICBlc2FjXAorfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfZGlybmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCit0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorCisKKyAgc2VkIC1lICcvXmZ1bmNfYmFzZW5hbWUgKCkkLywvXn0gIyBmdW5jX2Jhc2VuYW1lIC9jXAorZnVuY19iYXNlbmFtZSAoKVwKK3tcCitcICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJcCit9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19iYXNlbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCit0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorCisKKyAgc2VkIC1lICcvXmZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkkLywvXn0gIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIC9jXAorZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKVwKK3tcCitcICAgIGNhc2UgJHsxfSBpblwKK1wgICAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7O1wKK1wgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7XAorXCAgICBlc2FjXAorXCAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iXAorfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQordGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKworCisgIHNlZCAtZSAnL15mdW5jX3N0cmlwbmFtZSAoKSQvLC9efSAjIGZ1bmNfc3RyaXBuYW1lIC9jXAorZnVuY19zdHJpcG5hbWUgKClcCit7XAorXCAgICAjIHBka3NoIDUuMi4xNCBkb2VzIG5vdCBkbyAke1glJFl9IGNvcnJlY3RseSBpZiBib3RoIFggYW5kIFkgYXJlXAorXCAgICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuXAorXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHszfVwKK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0IyIkezF9In1cCitcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9XAorfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3RyaXBuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisKKworICBzZWQgLWUgJy9eZnVuY19zcGxpdF9sb25nX29wdCAoKSQvLC9efSAjIGZ1bmNfc3BsaXRfbG9uZ19vcHQgL2NcCitmdW5jX3NwbGl0X2xvbmdfb3B0ICgpXAore1wKK1wgICAgZnVuY19zcGxpdF9sb25nX29wdF9uYW1lPSR7MSUlPSp9XAorXCAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X2FyZz0kezEjKj19XAorfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3BsaXRfbG9uZ19vcHQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQordGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKworCisgIHNlZCAtZSAnL15mdW5jX3NwbGl0X3Nob3J0X29wdCAoKSQvLC9efSAjIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IC9jXAorZnVuY19zcGxpdF9zaG9ydF9vcHQgKClcCit7XAorXCAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmc9JHsxIz8/fVwKK1wgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZT0kezElIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmcifVwKK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3NwbGl0X3Nob3J0X29wdCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCit0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorCisKKyAgc2VkIC1lICcvXmZ1bmNfbG8ybyAoKSQvLC9efSAjIGZ1bmNfbG8ybyAvY1wKK2Z1bmNfbG8ybyAoKVwKK3tcCitcICAgIGNhc2UgJHsxfSBpblwKK1wgICAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiR7b2JqZXh0fSA7O1wKK1wgICAgICAqKSAgICBmdW5jX2xvMm9fcmVzdWx0PSR7MX0gOztcCitcICAgIGVzYWNcCit9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19sbzJvIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisKKworICBzZWQgLWUgJy9eZnVuY194Zm9ybSAoKSQvLC9efSAjIGZ1bmNfeGZvcm0gL2NcCitmdW5jX3hmb3JtICgpXAore1wKKyAgICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvXAorfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfeGZvcm0gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQordGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKworCisgIHNlZCAtZSAnL15mdW5jX2FyaXRoICgpJC8sL159ICMgZnVuY19hcml0aCAvY1wKK2Z1bmNfYXJpdGggKClcCit7XAorICAgIGZ1bmNfYXJpdGhfcmVzdWx0PSQoKCAkKiApKVwKK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FyaXRoIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisKKworICBzZWQgLWUgJy9eZnVuY19sZW4gKCkkLywvXn0gIyBmdW5jX2xlbiAvY1wKK2Z1bmNfbGVuICgpXAore1wKKyAgICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX1cCit9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19sZW4gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQordGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKworZmkKKworaWYgdGVzdCB4IiRsdF9zaGVsbF9hcHBlbmQiID0geHllczsgdGhlbgorICBzZWQgLWUgJy9eZnVuY19hcHBlbmQgKCkkLywvXn0gIyBmdW5jX2FwcGVuZCAvY1wKK2Z1bmNfYXBwZW5kICgpXAore1wKKyAgICBldmFsICIkezF9Kz1cXCR7Mn0iXAorfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXBwZW5kIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisKKworICBzZWQgLWUgJy9eZnVuY19hcHBlbmRfcXVvdGVkICgpJC8sL159ICMgZnVuY19hcHBlbmRfcXVvdGVkIC9jXAorZnVuY19hcHBlbmRfcXVvdGVkICgpXAore1wKK1wgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHsyfSJcCitcICAgIGV2YWwgIiR7MX0rPVxcXFwgXFwkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiXAorfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXBwZW5kX3F1b3RlZCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCit0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorCisKKyAgIyBTYXZlIGEgYGZ1bmNfYXBwZW5kJyBmdW5jdGlvbiBjYWxsIHdoZXJlIHBvc3NpYmxlIGJ5IGRpcmVjdCB1c2Ugb2YgJys9JworICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbYS16QS1aX11cezEsXH1cKSAiJVwxKz0iJWcnICRjZmdmaWxlID4gJGNmZ2ZpbGUudG1wIFwKKyAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKyAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisgIHRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CitlbHNlCisgICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCBldmVuIHdoZW4gJys9JyBpcyBub3QgYXZhaWxhYmxlCisgIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFthLXpBLVpfXVx7MSxcfVwpICIlXDE9IiRcMSVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCisgICAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisgICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorZmkKKworaWYgdGVzdCB4IiRfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsIiA9IHgiOiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBVbmFibGUgdG8gc3Vic3RpdHV0ZSBleHRlbmRlZCBzaGVsbCBmdW5jdGlvbnMgaW4gJG9maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFVuYWJsZSB0byBzdWJzdGl0dXRlIGV4dGVuZGVkIHNoZWxsIGZ1bmN0aW9ucyBpbiAkb2ZpbGUiID4mMjt9CitmaQorCisKKyAgIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKKyAgICAocm0gLWYgIiRvZmlsZSIgJiYgY3AgIiRjZmdmaWxlIiAiJG9maWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUiKQorICBjaG1vZCAreCAiJG9maWxlIgorCisKKyAgICBjYXQgPDxfTFRfRU9GID4+ICIkb2ZpbGUiCisKKyMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogQ1hYCisKKyMgVGhlIGxpbmtlciB1c2VkIHRvIGJ1aWxkIGxpYnJhcmllcy4KK0xEPSRsdF9MRF9DWFgKKworIyBIb3cgdG8gY3JlYXRlIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzLgorcmVsb2FkX2ZsYWc9JGx0X3JlbG9hZF9mbGFnX0NYWAorcmVsb2FkX2NtZHM9JGx0X3JlbG9hZF9jbWRzX0NYWAorCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW4gb2xkLXN0eWxlIGFyY2hpdmUuCitvbGRfYXJjaGl2ZV9jbWRzPSRsdF9vbGRfYXJjaGl2ZV9jbWRzX0NYWAorCisjIEEgbGFuZ3VhZ2Ugc3BlY2lmaWMgY29tcGlsZXIuCitDQz0kbHRfY29tcGlsZXJfQ1hYCisKKyMgSXMgdGhlIGNvbXBpbGVyIHRoZSBHTlUgY29tcGlsZXI/Cit3aXRoX2djYz0kR0NDX0NYWAorCisjIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCitub19idWlsdGluX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWAorCisjIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KK3BpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3BpY19DWFgKKworIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgord2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2xfQ1hYCisKKyMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KK2xpbmtfc3RhdGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWAorCisjIERvZXMgY29tcGlsZXIgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydCAtYyBhbmQgLW8gb3B0aW9ucz8KK2NvbXBpbGVyX2Nfbz0kbHRfbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYCisKKyMgV2hldGhlciBvciBub3QgdG8gYWRkIC1sYyBmb3IgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcy4KK2J1aWxkX2xpYnRvb2xfbmVlZF9sYz0kYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYCisKKyMgV2hldGhlciBvciBub3QgdG8gZGlzYWxsb3cgc2hhcmVkIGxpYnMgd2hlbiBydW50aW1lIGxpYnMgYXJlIHN0YXRpYy4KK2FsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcz0kZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19DWFgKKworIyBDb21waWxlciBmbGFnIHRvIGFsbG93IHJlZmxleGl2ZSBkbG9wZW5zLgorZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSRsdF9leHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYCisKKyMgQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSBzaGFyZWQgb2JqZWN0cyBkaXJlY3RseSBmcm9tIGFyY2hpdmVzLgord2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JGx0X3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWAorCisjIFdoZXRoZXIgdGhlIGNvbXBpbGVyIGNvcGVzIHdpdGggcGFzc2luZyBubyBvYmplY3RzIGRpcmVjdGx5LgorY29tcGlsZXJfbmVlZHNfb2JqZWN0PSRsdF9jb21waWxlcl9uZWVkc19vYmplY3RfQ1hYCisKKyMgQ3JlYXRlIGFuIG9sZC1zdHlsZSBhcmNoaXZlIGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KK29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9JGx0X29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNfQ1hYCisKKyMgQ3JlYXRlIGEgdGVtcG9yYXJ5IG9sZC1zdHlsZSBhcmNoaXZlIHRvIGxpbmsgaW5zdGVhZCBvZiBhIHNoYXJlZCBhcmNoaXZlLgorb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHM9JGx0X29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0NYWAorCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBzaGFyZWQgYXJjaGl2ZS4KK2FyY2hpdmVfY21kcz0kbHRfYXJjaGl2ZV9jbWRzX0NYWAorYXJjaGl2ZV9leHBzeW1fY21kcz0kbHRfYXJjaGl2ZV9leHBzeW1fY21kc19DWFgKKworIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgbG9hZGFibGUgbW9kdWxlIGlmIGRpZmZlcmVudCBmcm9tIGJ1aWxkaW5nCisjIGEgc2hhcmVkIGFyY2hpdmUuCittb2R1bGVfY21kcz0kbHRfbW9kdWxlX2NtZHNfQ1hYCittb2R1bGVfZXhwc3ltX2NtZHM9JGx0X21vZHVsZV9leHBzeW1fY21kc19DWFgKKworIyBXaGV0aGVyIHdlIGFyZSBidWlsZGluZyB3aXRoIEdOVSBsZCBvciBub3QuCit3aXRoX2dudV9sZD0kbHRfd2l0aF9nbnVfbGRfQ1hYCisKKyMgRmxhZyB0aGF0IGFsbG93cyBzaGFyZWQgbGlicmFyaWVzIHdpdGggdW5kZWZpbmVkIHN5bWJvbHMgdG8gYmUgYnVpbHQuCithbGxvd191bmRlZmluZWRfZmxhZz0kbHRfYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYCisKKyMgRmxhZyB0aGF0IGVuZm9yY2VzIG5vIHVuZGVmaW5lZCBzeW1ib2xzLgorbm9fdW5kZWZpbmVkX2ZsYWc9JGx0X25vX3VuZGVmaW5lZF9mbGFnX0NYWAorCisjIEZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KKyMgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzIG5vdCBleGlzdAoraGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0kbHRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFgKKworIyBXaGV0aGVyIHdlIG5lZWQgYSBzaW5nbGUgIi1ycGF0aCIgZmxhZyB3aXRoIGEgc2VwYXJhdGVkIGFyZ3VtZW50LgoraGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0kbHRfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFgKKworIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUVcJHtzaGFyZWRfZXh0fSBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMKKyMgRElSIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkuCitoYXJkY29kZV9kaXJlY3Q9JGhhcmRjb2RlX2RpcmVjdF9DWFgKKworIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUVcJHtzaGFyZWRfZXh0fSBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMKKyMgRElSIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkgYW5kIHRoZSByZXN1bHRpbmcgbGlicmFyeSBkZXBlbmRlbmN5IGlzCisjICJhYnNvbHV0ZSIsaS5lIGltcG9zc2libGUgdG8gY2hhbmdlIGJ5IHNldHRpbmcgXCR7c2hsaWJwYXRoX3Zhcn0gaWYgdGhlCisjIGxpYnJhcnkgaXMgcmVsb2NhdGVkLgoraGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPSRoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGVfQ1hYCisKKyMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIHRoZSAtTERJUiBmbGFnIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIKKyMgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX21pbnVzX0w9JGhhcmRjb2RlX21pbnVzX0xfQ1hYCisKKyMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIFNITElCUEFUSF9WQVI9RElSIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIKKyMgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX3NobGlicGF0aF92YXI9JGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYCisKKyMgU2V0IHRvICJ5ZXMiIGlmIGJ1aWxkaW5nIGEgc2hhcmVkIGxpYnJhcnkgYXV0b21hdGljYWxseSBoYXJkY29kZXMgRElSCisjIGludG8gdGhlIGxpYnJhcnkgYW5kIGFsbCBzdWJzZXF1ZW50IGxpYnJhcmllcyBhbmQgZXhlY3V0YWJsZXMgbGlua2VkCisjIGFnYWluc3QgaXQuCitoYXJkY29kZV9hdXRvbWF0aWM9JGhhcmRjb2RlX2F1dG9tYXRpY19DWFgKKworIyBTZXQgdG8geWVzIGlmIGxpbmtlciBhZGRzIHJ1bnRpbWUgcGF0aHMgb2YgZGVwZW5kZW50IGxpYnJhcmllcworIyB0byBydW50aW1lIHBhdGggbGlzdC4KK2luaGVyaXRfcnBhdGg9JGluaGVyaXRfcnBhdGhfQ1hYCisKKyMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgorbGlua19hbGxfZGVwbGlicz0kbGlua19hbGxfZGVwbGlic19DWFgKKworIyBTZXQgdG8gInllcyIgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCithbHdheXNfZXhwb3J0X3N5bWJvbHM9JGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFgKKworIyBUaGUgY29tbWFuZHMgdG8gbGlzdCBleHBvcnRlZCBzeW1ib2xzLgorZXhwb3J0X3N5bWJvbHNfY21kcz0kbHRfZXhwb3J0X3N5bWJvbHNfY21kc19DWFgKKworIyBTeW1ib2xzIHRoYXQgc2hvdWxkIG5vdCBiZSBsaXN0ZWQgaW4gdGhlIHByZWxvYWRlZCBzeW1ib2xzLgorZXhjbHVkZV9leHBzeW1zPSRsdF9leGNsdWRlX2V4cHN5bXNfQ1hYCisKKyMgU3ltYm9scyB0aGF0IG11c3QgYWx3YXlzIGJlIGV4cG9ydGVkLgoraW5jbHVkZV9leHBzeW1zPSRsdF9pbmNsdWRlX2V4cHN5bXNfQ1hYCisKKyMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHByb2dyYW1zIChhZ2FpbnN0IGxpYnJhcmllcykgd2l0aCB0ZW1wbGF0ZXMuCitwcmVsaW5rX2NtZHM9JGx0X3ByZWxpbmtfY21kc19DWFgKKworIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGZpbmlzaGluZyBsaW5raW5nIHByb2dyYW1zLgorcG9zdGxpbmtfY21kcz0kbHRfcG9zdGxpbmtfY21kc19DWFgKKworIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMuCitmaWxlX2xpc3Rfc3BlYz0kbHRfZmlsZV9saXN0X3NwZWNfQ1hYCisKKyMgSG93IHRvIGhhcmRjb2RlIGEgc2hhcmVkIGxpYnJhcnkgcGF0aCBpbnRvIGFuIGV4ZWN1dGFibGUuCitoYXJkY29kZV9hY3Rpb249JGhhcmRjb2RlX2FjdGlvbl9DWFgKKworIyBUaGUgZGlyZWN0b3JpZXMgc2VhcmNoZWQgYnkgdGhpcyBjb21waWxlciB3aGVuIGNyZWF0aW5nIGEgc2hhcmVkIGxpYnJhcnkuCitjb21waWxlcl9saWJfc2VhcmNoX2RpcnM9JGx0X2NvbXBpbGVyX2xpYl9zZWFyY2hfZGlyc19DWFgKKworIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIGFuZCBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8KKyMgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkuCitwcmVkZXBfb2JqZWN0cz0kbHRfcHJlZGVwX29iamVjdHNfQ1hYCitwb3N0ZGVwX29iamVjdHM9JGx0X3Bvc3RkZXBfb2JqZWN0c19DWFgKK3ByZWRlcHM9JGx0X3ByZWRlcHNfQ1hYCitwb3N0ZGVwcz0kbHRfcG9zdGRlcHNfQ1hYCisKKyMgVGhlIGxpYnJhcnkgc2VhcmNoIHBhdGggdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBjb21waWxlciB3aGVuIGxpbmtpbmcKKyMgYSBzaGFyZWQgbGlicmFyeS4KK2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aD0kbHRfY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWAorCisjICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiBDWFgKK19MVF9FT0YKKworIDs7CisgICAgImRlZmF1bHQtMSI6QykgY2FzZSAiJENPTkZJR19GSUxFUyIgaW4gKnBvL01ha2VmaWxlLmluKikKKyAgICAgICAgc2VkIC1lICIvUE9URklMRVMgPS9yIHBvL1BPVEZJTEVTIiBwby9NYWtlZmlsZS5pbiA+IHBvL01ha2VmaWxlCisgICAgICBlc2FjIDs7CisgICAgInBvL3N0YW1wLWl0IjpDKQorICAgIGlmICAhIGdyZXAgIl4jIElOVExUT09MX01BS0VGSUxFJCIgInBvL01ha2VmaWxlLmluIiA+IC9kZXYvbnVsbCA7IHRoZW4KKyAgICAgICBhc19mbl9lcnJvciAkPyAicG8vTWFrZWZpbGUuaW4uaW4gd2FzIG5vdCBjcmVhdGVkIGJ5IGludGx0b29saXplLiIgIiRMSU5FTk8iIDUKKyAgICBmaQorICAgIHJtIC1mICJwby9zdGFtcC1pdCIgInBvL3N0YW1wLWl0LnRtcCIgInBvL1BPVEZJTEVTIiAicG8vTWFrZWZpbGUudG1wIgorICAgID4icG8vc3RhbXAtaXQudG1wIgorICAgIHNlZCAnL14jL2QKKwkgcy9eW1tdLipdICovLworCSAvXlsgCV0qJC9kCisJJyJzfF58CSRhY190b3Bfc3JjZGlyL3wiIFwKKyAgICAgICIkc3JjZGlyL3BvL1BPVEZJTEVTLmluIiB8IHNlZCAnJCFzLyQvIFxcLycgPiJwby9QT1RGSUxFUyIKKworICAgIHNlZCAnL15QT1RGSUxFUyA9LywvW15cXF0kLyB7CisJCS9eUE9URklMRVMgPS8hZAorCQlyIHBvL1BPVEZJTEVTCisJICB9CisJICcgInBvL01ha2VmaWxlLmluIiA+InBvL01ha2VmaWxlIgorICAgIHJtIC1mICJwby9NYWtlZmlsZS50bXAiCisgICAgbXYgInBvL3N0YW1wLWl0LnRtcCIgInBvL3N0YW1wLWl0IgorICAgOzsKKworICBlc2FjCitkb25lICMgZm9yIGFjX3RhZworCisKK2FzX2ZuX2V4aXQgMAorX0FDRU9GCithY19jbGVhbl9maWxlcz0kYWNfY2xlYW5fZmlsZXNfc2F2ZQorCit0ZXN0ICRhY193cml0ZV9mYWlsID0gMCB8fAorICBhc19mbl9lcnJvciAkPyAid3JpdGUgZmFpbHVyZSBjcmVhdGluZyAkQ09ORklHX1NUQVRVUyIgIiRMSU5FTk8iIDUKKworCisjIGNvbmZpZ3VyZSBpcyB3cml0aW5nIHRvIGNvbmZpZy5sb2csIGFuZCB0aGVuIGNhbGxzIGNvbmZpZy5zdGF0dXMuCisjIGNvbmZpZy5zdGF0dXMgZG9lcyBpdHMgb3duIHJlZGlyZWN0aW9uLCBhcHBlbmRpbmcgdG8gY29uZmlnLmxvZy4KKyMgVW5mb3J0dW5hdGVseSwgb24gRE9TIHRoaXMgZmFpbHMsIGFzIGNvbmZpZy5sb2cgaXMgc3RpbGwga2VwdCBvcGVuCisjIGJ5IGNvbmZpZ3VyZSwgc28gY29uZmlnLnN0YXR1cyB3b24ndCBiZSBhYmxlIHRvIHdyaXRlIHRvIGl0OyBpdHMKKyMgb3V0cHV0IGlzIHNpbXBseSBkaXNjYXJkZWQuICBTbyB3ZSBleGVjIHRoZSBGRCB0byAvZGV2L251bGwsCisjIGVmZmVjdGl2ZWx5IGNsb3NpbmcgY29uZmlnLmxvZywgc28gaXQgY2FuIGJlIHByb3Blcmx5IChyZSlvcGVuZWQgYW5kCisjIGFwcGVuZGVkIHRvIGJ5IGNvbmZpZy5zdGF0dXMuICBXaGVuIGNvbWluZyBiYWNrIHRvIGNvbmZpZ3VyZSwgd2UKKyMgbmVlZCB0byBtYWtlIHRoZSBGRCBhdmFpbGFibGUgYWdhaW4uCitpZiB0ZXN0ICIkbm9fY3JlYXRlIiAhPSB5ZXM7IHRoZW4KKyAgYWNfY3Nfc3VjY2Vzcz06CisgIGFjX2NvbmZpZ19zdGF0dXNfYXJncz0KKyAgdGVzdCAiJHNpbGVudCIgPSB5ZXMgJiYKKyAgICBhY19jb25maWdfc3RhdHVzX2FyZ3M9IiRhY19jb25maWdfc3RhdHVzX2FyZ3MgLS1xdWlldCIKKyAgZXhlYyA1Pi9kZXYvbnVsbAorICAkU0hFTEwgJENPTkZJR19TVEFUVVMgJGFjX2NvbmZpZ19zdGF0dXNfYXJncyB8fCBhY19jc19zdWNjZXNzPWZhbHNlCisgIGV4ZWMgNT4+Y29uZmlnLmxvZworICAjIFVzZSB8fCwgbm90ICYmLCB0byBhdm9pZCBleGl0aW5nIGZyb20gdGhlIGlmIHdpdGggJD8gPSAxLCB3aGljaAorICAjIHdvdWxkIG1ha2UgY29uZmlndXJlIGZhaWwgaWYgdGhpcyBpcyB0aGUgbGFzdCBpbnN0cnVjdGlvbi4KKyAgJGFjX2NzX3N1Y2Nlc3MgfHwgYXNfZm5fZXhpdCAxCitmaQoraWYgdGVzdCAtbiAiJGFjX3VucmVjb2duaXplZF9vcHRzIiAmJiB0ZXN0ICIkZW5hYmxlX29wdGlvbl9jaGVja2luZyIgIT0gbm87IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1bnJlY29nbml6ZWQgb3B0aW9uczogJGFjX3VucmVjb2duaXplZF9vcHRzIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVucmVjb2duaXplZCBvcHRpb25zOiAkYWNfdW5yZWNvZ25pemVkX29wdHMiID4mMjt9CitmaQorCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2VjaG8gIgorIC0tLXsgJFBBQ0tBR0VfTkFNRSAkVkVSU0lPTiB9LS0tCisKKyAgICBwcmVmaXg6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtwcmVmaXh9CisgICAgc3lzY29uZmRpcjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0KKyAgICBsb2NhbHN0YXRlZGlyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsb2NhbHN0YXRlZGlyfQorICAgIGF2YWhpIHNvY2tldDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2F2YWhpX3NvY2tldH0KKyAgICBkYnVzLTEgc3lzdGVtLmQgZGlyOiAgICAgICAgICAgICAgICAgICAgICAgJHtEQlVTX1NZU19ESVJ9CisgICAgZGJ1cy0xIHZlcnNpb246ICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7REJVU19WRVJTSU9OfQorICAgIGRidXMtMSBzeXN0ZW0gc29ja2V0OiAgICAgICAgICAgICAgICAgICAgICAke0RCVVNfU1lTVEVNX0JVU19ERUZBVUxUX0FERFJFU1N9CisgICAgQyBDb21waWxlcjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7Q0N9CisgICAgQ0ZMQUdTOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7Q0ZMQUdTfQorICAgIEVuYWJsZSBHTElCOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke0hBVkVfR0xJQn0KKyAgICBFbmFibGUgR0xJQiBHT2JqZWN0OiAgICAgICAgICAgICAgICAgICAgICAgJHtIQVZFX0dPQkpFQ1R9CisgICAgRW5hYmxlIEdPYmplY3QgSW50cm9zcGVjdGlvbjogICAgICAgICAgICAgICR7Zm91bmRfaW50cm9zcGVjdGlvbn0KKyAgICBFbmFibGUgR1RLIDIuMDogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtIQVZFX0dUS30KKyAgICBFbmFibGUgR1RLIDMuMDogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtIQVZFX0dUSzN9CisgICAgRW5hYmxlIEQtQnVzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7SEFWRV9EQlVTfQorICAgIFdpdGggWE1MOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3dpdGhfeG1sfQorICAgIEVuYWJsZSBHREJNOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke0hBVkVfR0RCTX0KKyAgICBFbmFibGUgREJNOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtIQVZFX0RCTX0KKyAgICBFbmFibGUgbGliZGFlbW9uOiAgICAgICAgICAgICAgICAgICAgICAgICAgJHtIQVZFX0xJQkRBRU1PTn0KKyAgICBFbmFibGUgUHl0aG9uOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtIQVZFX1BZVEhPTn0KKyAgICBFbmFibGUgcHlndGs6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtIQVZFX1BZR1RLfQorICAgIEVuYWJsZSBweXRob24tZGJ1czogICAgICAgICAgICAgICAgICAgICAgICAke0hBVkVfUFlUSE9OX0RCVVN9CisgICAgRW5hYmxlIFFUMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7SEFWRV9RVDN9CisgICAgRW5hYmxlIFFUNDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7SEFWRV9RVDR9CisgICAgRW5hYmxlIE1vbm86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7SEFWRV9NT05PfQorICAgIEVuYWJsZSBNb25vZG9jOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke0hBVkVfTU9OT0RPQ30KKyAgICBEaXN0cmlidXRpb24vT1M6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJHt3aXRoX2Rpc3Ryb30KKyAgICBVc2VyIGZvciBhdmFoaS1kYWVtb246ICAgICAgICAgICAgICAgICAgICAgJHtBVkFISV9VU0VSfQorICAgIEdyb3VwIGZvciBhdmFoaS1kYWVtb246ICAgICAgICAgICAgICAgICAgICAke0FWQUhJX0dST1VQfQorICAgIFByaXZpbGlnZWQgYWNjZXNzIGdyb3VwIGZvciBBdmFoaSBjbGllbnRzOiAke0FWQUhJX1BSSVZfQUNDRVNTX0dST1VQfQorICAgIFVzZXIgZm9yIGF2YWhpLWF1dG9pcGQ6ICAgICAgICAgICAgICAgICAgICAke0FWQUhJX0FVVE9JUERfVVNFUn0KKyAgICBHcm91cCBmb3IgYXZhaGktYXV0b2lwZDogICAgICAgICAgICAgICAgICAgJHtBVkFISV9BVVRPSVBEX0dST1VQfQorICAgIEVuYWJsZSBjaHJvb3QoKTogICAgICAgICAgICAgICAgICAgICAgICAgICAke2VuYWJsZV9jaHJvb3R9CisgICAgRW5hYmxlIExpbnV4IGlub3RpZnk6ICAgICAgICAgICAgICAgICAgICAgICR7aGF2ZV9pbm90aWZ5fQorICAgIEVuYWJsZSBzdGFjay1zbWFzaGluZyBwcm90ZWN0aW9uOiAgICAgICAgICAke2VuYWJsZV9zc3B9CisgICAgc3lzdGVtZCB1bml0IGRpcmVjdG9yeTogICAgICAgICAgICAgICAgICAgICR7d2l0aF9zeXN0ZW1kc3lzdGVtdW5pdGRpcn0KKyIKKworQlVJTERfREFFTU9OPSJubyAgIChZb3UgbmVlZCBsaWJkYWVtb24gYW5kIGV4cGF0L2JzZHhtbCEpIgorCitpZiB0ZXN0ICJ4JEhBVkVfWE1MIiA9ICJ4eWVzIiAtYSAieCRIQVZFX0xJQkRBRU1PTiIgPSAieHllcyIgOyB0aGVuCisgICAgQlVJTERfREFFTU9OPXllcworZmkKKworQlVJTERfUFlUSE9OPSJubyAgIChZb3UgbmVlZCBweXRob24sIHB5Z3RrIGFuZCBweXRob24tZGJ1cyEpIgorCitpZiB0ZXN0ICJ4JEJVSUxEX0RBRU1PTiIgPSAieHllcyIgLWEgIngkSEFWRV9EQlVTIiA9ICJ4eWVzIiAtYSAieCRIQVZFX1BZVEhPTiIgPSAieHllcyIgLWEgIngkSEFWRV9QWVRIT05fREJVUyIgPSAieHllcyIgLWEgIngkSEFWRV9QWUdUSyIgPSAieHllcyIgOyB0aGVuCisgICAgQlVJTERfUFlUSE9OPXllcworZmkKKworQlVJTERfQ0xJRU5UPSJubyAgIChZb3UgbmVlZCBhdmFoaS1kYWVtb24gYW5kIEQtQnVzISkiCisKK2lmIHRlc3QgIngkQlVJTERfREFFTU9OIiA9ICJ4eWVzIiAtYSAieCRIQVZFX0RCVVMiID0gInh5ZXMiIDsgdGhlbgorICAgIEJVSUxEX0NMSUVOVD15ZXMKK2ZpCisKK2lmIHRlc3QgIngkRU5BQkxFX0NPTVBBVF9MSUJETlNfU0QiID0gInh5ZXMiIC1hICJ4JEJVSUxEX0NMSUVOVCIgIT0gInh5ZXMiIDsgdGhlbgorICAgRU5BQkxFX0NPTVBBVF9MSUJETlNfU0Q9Im5vICAgKFlvdSBuZWVkIGxpYmF2YWhpLWNsaWVudCEpIgorZmkKK2lmIHRlc3QgIngkRU5BQkxFX0NPTVBBVF9IT1dMIiA9ICJ4eWVzIiAtYSAieCRCVUlMRF9DTElFTlQiICE9ICJ4eWVzIiA7IHRoZW4KKyAgIEVOQUJMRV9DT01QQVRfSE9XTD0ibm8gICAoWW91IG5lZWQgbGliYXZhaGktY2xpZW50ISkiCitmaQoraWYgdGVzdCAieCRFTkFCTEVfQVVUT0lQRCIgPSAieHllcyIgLWEgIngkSEFWRV9MSUJEQUVNT04iICE9ICJ4eWVzIiA7IHRoZW4KKyAgIEVOQUJMRV9BVVRPSVBEPSJubyAgIChZb3UgbmVlZCBsaWJkYWVtb24hKSIKK2ZpCisKK0hBVkVfR1RLMk9SMz1ubworaWYgdGVzdCAieCRIQVZFX0dUSyIgPSAieHllcyIgLW8gIngkSEFWRV9HVEszIiA9ICJ4eWVzIiA7IHRoZW4KKyAgIEhBVkVfR1RLMk9SMz15ZXMKK2ZpCisKK0JVSUxEX1VJPSJubyIKK2lmIHRlc3QgIngkSEFWRV9HVEsyT1IzIiA9ICJ4eWVzIiAtYSAieCRCVUlMRF9DTElFTlQiID0gInh5ZXMiIDsgdGhlbgorICAgQlVJTERfVUk9InllcyIKK2ZpCisKK0JVSUxEX0dPQkpFQ1Q9Im5vIgoraWYgdGVzdCAieCRCVUlMRF9DTElFTlQiID0gInh5ZXMiIC1hICJ4JEhBVkVfR09CSkVDVCIgPSAieHllcyIgOyB0aGVuCisgICBCVUlMRF9HT0JKRUNUPSJ5ZXMiCitmaQorCitlY2hvICJcCisgICAgQnVpbGRpbmcgbGliYXZhaGktY29yZSAgICAgICAgICAgICAgeWVzCisgICAgQnVpbGRpbmcgYXZhaGktZGFlbW9uOiAgICAgICAgICAgICAgJHtCVUlMRF9EQUVNT059CisgICAgQnVpbGRpbmcgYXZhaGktZG5zY29uZmQ6ICAgICAgICAgICAgJHtCVUlMRF9EQUVNT059CisgICAgQnVpbGRpbmcgbGliYXZhaGktY2xpZW50OiAgICAgICAgICAgJHtCVUlMRF9DTElFTlR9CisgICAgQnVpbGRpbmcgYXZhaGktdXRpbHM6ICAgICAgICAgICAgICAgJHtCVUlMRF9DTElFTlR9CisgICAgQnVpbGRpbmcgYXZhaGktcHl0aG9uOiAgICAgICAgICAgICAgJHtCVUlMRF9QWVRIT059CisgICAgQnVpbGRpbmcgbGliYXZhaGktZ2xpYjogICAgICAgICAgICAgJHtIQVZFX0dMSUJ9CisgICAgQnVpbGRpbmcgbGliYXZhaGktZ29iamVjdDogICAgICAgICAgJHtCVUlMRF9HT0JKRUNUfQorICAgIEJ1aWxkaW5nIGF2YWhpLWRpc2NvdmVyLXN0YW5kYWxvbmU6ICR7SEFWRV9HVEsyT1IzfQorICAgIEJ1aWxkaW5nIGxpYmF2YWhpLXF0MzogICAgICAgICAgICAgICR7SEFWRV9RVDN9CisgICAgQnVpbGRpbmcgbGliYXZhaGktcXQ0OiAgICAgICAgICAgICAgJHtIQVZFX1FUNH0KKyAgICBCdWlsZGluZyBhdmFoaS1zaGFycDogICAgICAgICAgICAgICAke0hBVkVfTU9OT30KKyAgICBCdWlsZGluZyBhdmFoaS1jb21wYXQtbGliZG5zX3NkOiAgICAke0VOQUJMRV9DT01QQVRfTElCRE5TX1NEfQorICAgIEJ1aWxkaW5nIGF2YWhpLWNvbXBhdC1ob3dsOiAgICAgICAgICR7RU5BQkxFX0NPTVBBVF9IT1dMfQorICAgIEJ1aWxkaW5nIHRlc3RzOiAgICAgICAgICAgICAgICAgICAgICR7RU5BQkxFX1RFU1RTfQorICAgIEJ1aWxkaW5nIGF2YWhpLWNvcmUgZG9jdW1lbnRhdGlvbjogICR7RU5BQkxFX0NPUkVfRE9DU30KKyAgICBCdWlsZGluZyBhdmFoaS1hdXRvaXBkOiAgICAgICAgICAgICAke0VOQUJMRV9BVVRPSVBEfQorICAgIEJ1aWxkaW5nIGxpYmF2YWhpLXVpOiAgICAgICAgICAgICAgICR7QlVJTERfVUl9CisiCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvZGVwY29tcCBiL2F2YWhpLTAuNi4zMS9kZXBjb21wCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRmOGVlYTcKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvZGVwY29tcApAQCAtMCwwICsxLDYzMCBAQAorIyEgL2Jpbi9zaAorIyBkZXBjb21wIC0gY29tcGlsZSBhIHByb2dyYW0gZ2VuZXJhdGluZyBkZXBlbmRlbmNpZXMgYXMgc2lkZS1lZmZlY3RzCisKK3NjcmlwdHZlcnNpb249MjAwOS0wNC0yOC4yMTsgIyBVVEMKKworIyBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDkgRnJlZQorIyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKKyMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCisjIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCisjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworIyBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgQWxleGFuZHJlIE9saXZhIDxvbGl2YUBkY2MudW5pY2FtcC5icj4uCisKK2Nhc2UgJDEgaW4KKyAgJycpCisgICAgIGVjaG8gIiQwOiBObyBjb21tYW5kLiAgVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iIDE+JjIKKyAgICAgZXhpdCAxOworICAgICA7OworICAtaCB8IC0taCopCisgICAgY2F0IDw8XEVPRgorVXNhZ2U6IGRlcGNvbXAgWy0taGVscF0gWy0tdmVyc2lvbl0gUFJPR1JBTSBbQVJHU10KKworUnVuIFBST0dSQU1TIEFSR1MgdG8gY29tcGlsZSBhIGZpbGUsIGdlbmVyYXRpbmcgZGVwZW5kZW5jaWVzCithcyBzaWRlLWVmZmVjdHMuCisKK0Vudmlyb25tZW50IHZhcmlhYmxlczoKKyAgZGVwbW9kZSAgICAgRGVwZW5kZW5jeSB0cmFja2luZyBtb2RlLgorICBzb3VyY2UgICAgICBTb3VyY2UgZmlsZSByZWFkIGJ5IGBQUk9HUkFNUyBBUkdTJy4KKyAgb2JqZWN0ICAgICAgT2JqZWN0IGZpbGUgb3V0cHV0IGJ5IGBQUk9HUkFNUyBBUkdTJy4KKyAgREVQRElSICAgICAgZGlyZWN0b3J5IHdoZXJlIHRvIHN0b3JlIGRlcGVuZGVuY2llcy4KKyAgZGVwZmlsZSAgICAgRGVwZW5kZW5jeSBmaWxlIHRvIG91dHB1dC4KKyAgdG1wZGVwZmlsZSAgVGVtcG9yYXJ5IGZpbGUgdG8gdXNlIHdoZW4gb3V0cHV0aW5nIGRlcGVuZGVuY2llcy4KKyAgbGlidG9vbCAgICAgV2hldGhlciBsaWJ0b29sIGlzIHVzZWQgKHllcy9ubykuCisKK1JlcG9ydCBidWdzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4uCitFT0YKKyAgICBleGl0ICQ/CisgICAgOzsKKyAgLXYgfCAtLXYqKQorICAgIGVjaG8gImRlcGNvbXAgJHNjcmlwdHZlcnNpb24iCisgICAgZXhpdCAkPworICAgIDs7Citlc2FjCisKK2lmIHRlc3QgLXogIiRkZXBtb2RlIiB8fCB0ZXN0IC16ICIkc291cmNlIiB8fCB0ZXN0IC16ICIkb2JqZWN0IjsgdGhlbgorICBlY2hvICJkZXBjb21wOiBWYXJpYWJsZXMgc291cmNlLCBvYmplY3QgYW5kIGRlcG1vZGUgbXVzdCBiZSBzZXQiIDE+JjIKKyAgZXhpdCAxCitmaQorCisjIERlcGVuZGVuY2llcyBmb3Igc3ViL2Jhci5vIG9yIHN1Yi9iYXIub2JqIGdvIGludG8gc3ViLy5kZXBzL2Jhci5Qby4KK2RlcGZpbGU9JHtkZXBmaWxlLWBlY2hvICIkb2JqZWN0IiB8CisgIHNlZCAnc3xbXlxcL10qJHwnJHtERVBESVItLmRlcHN9Jy8mfDtzfFwuXChbXi5dKlwpJHwuUFwxfDtzfFBvYmokfFBvfCdgfQordG1wZGVwZmlsZT0ke3RtcGRlcGZpbGUtYGVjaG8gIiRkZXBmaWxlIiB8IHNlZCAncy9cLlwoW14uXSpcKSQvLlRcMS8nYH0KKworcm0gLWYgIiR0bXBkZXBmaWxlIgorCisjIFNvbWUgbW9kZXMgd29yayBqdXN0IGxpa2Ugb3RoZXIgbW9kZXMsIGJ1dCB1c2UgZGlmZmVyZW50IGZsYWdzLiAgV2UKKyMgcGFyYW1ldGVyaXplIGhlcmUsIGJ1dCBzdGlsbCBsaXN0IHRoZSBtb2RlcyBpbiB0aGUgYmlnIGNhc2UgYmVsb3csCisjIHRvIG1ha2UgZGVwZW5kLm00IGVhc2llciB0byB3cml0ZS4gIE5vdGUgdGhhdCB3ZSAqY2Fubm90KiB1c2UgYSBjYXNlCisjIGhlcmUsIGJlY2F1c2UgdGhpcyBmaWxlIGNhbiBvbmx5IGNvbnRhaW4gb25lIGNhc2Ugc3RhdGVtZW50LgoraWYgdGVzdCAiJGRlcG1vZGUiID0gaHA7IHRoZW4KKyAgIyBIUCBjb21waWxlciB1c2VzIC1NIGFuZCBubyBleHRyYSBhcmcuCisgIGdjY2ZsYWc9LU0KKyAgZGVwbW9kZT1nY2MKK2ZpCisKK2lmIHRlc3QgIiRkZXBtb2RlIiA9IGRhc2hYbXN0ZG91dDsgdGhlbgorICAgIyBUaGlzIGlzIGp1c3QgbGlrZSBkYXNobXN0ZG91dCB3aXRoIGEgZGlmZmVyZW50IGFyZ3VtZW50LgorICAgZGFzaG1mbGFnPS14TQorICAgZGVwbW9kZT1kYXNobXN0ZG91dAorZmkKKworY3lncGF0aF91PSJjeWdwYXRoIC11IC1mIC0iCitpZiB0ZXN0ICIkZGVwbW9kZSIgPSBtc3ZjbXN5czsgdGhlbgorICAgIyBUaGlzIGlzIGp1c3QgbGlrZSBtc3Zpc3VhbGNwcCBidXQgdy9vIGN5Z3BhdGggdHJhbnNsYXRpb24uCisgICAjIEp1c3QgY29udmVydCB0aGUgYmFja3NsYXNoLWVzY2FwZWQgYmFja3NsYXNoZXMgdG8gc2luZ2xlIGZvcndhcmQKKyAgICMgc2xhc2hlcyB0byBzYXRpc2Z5IGRlcGVuZC5tNAorICAgY3lncGF0aF91PSJzZWQgcyxcXFxcXFxcXCwvLGciCisgICBkZXBtb2RlPW1zdmlzdWFsY3BwCitmaQorCitjYXNlICIkZGVwbW9kZSIgaW4KK2djYzMpCisjIyBnY2MgMyBpbXBsZW1lbnRzIGRlcGVuZGVuY3kgdHJhY2tpbmcgdGhhdCBkb2VzIGV4YWN0bHkgd2hhdAorIyMgd2Ugd2FudC4gIFlheSEgIE5vdGU6IGZvciBzb21lIHJlYXNvbiBsaWJ0b29sIDEuNCBkb2Vzbid0IGxpa2UKKyMjIGl0IGlmIC1NRCAtTVAgY29tZXMgYWZ0ZXIgdGhlIC1NRiBzdHVmZi4gIEhtbS4KKyMjIFVuZm9ydHVuYXRlbHksIEZyZWVCU0QgYzg5IGFjY2VwdGFuY2Ugb2YgZmxhZ3MgZGVwZW5kcyB1cG9uCisjIyB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50IG9yZGVyOyBzbyBhZGQgdGhlIGZsYWdzIHdoZXJlIHRoZXkKKyMjIGFwcGVhciBpbiBkZXBlbmQyLmFtLiAgTm90ZSB0aGF0IHRoZSBzbG93ZG93biBpbmN1cnJlZCBoZXJlCisjIyBhZmZlY3RzIG9ubHkgY29uZmlndXJlOiBpbiBtYWtlZmlsZXMsICVGQVNUREVQJSBzaG9ydGN1dHMgdGhpcy4KKyAgZm9yIGFyZworICBkbworICAgIGNhc2UgJGFyZyBpbgorICAgIC1jKSBzZXQgZm5vcmQgIiRAIiAtTVQgIiRvYmplY3QiIC1NRCAtTVAgLU1GICIkdG1wZGVwZmlsZSIgIiRhcmciIDs7CisgICAgKikgIHNldCBmbm9yZCAiJEAiICIkYXJnIiA7OworICAgIGVzYWMKKyAgICBzaGlmdCAjIGZub3JkCisgICAgc2hpZnQgIyAkYXJnCisgIGRvbmUKKyAgIiRAIgorICBzdGF0PSQ/CisgIGlmIHRlc3QgJHN0YXQgLWVxIDA7IHRoZW4gOgorICBlbHNlCisgICAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICAgIGV4aXQgJHN0YXQKKyAgZmkKKyAgbXYgIiR0bXBkZXBmaWxlIiAiJGRlcGZpbGUiCisgIDs7CisKK2djYykKKyMjIFRoZXJlIGFyZSB2YXJpb3VzIHdheXMgdG8gZ2V0IGRlcGVuZGVuY3kgb3V0cHV0IGZyb20gZ2NjLiAgSGVyZSdzCisjIyB3aHkgd2UgcGljayB0aGlzIHJhdGhlciBvYnNjdXJlIG1ldGhvZDoKKyMjIC0gRG9uJ3Qgd2FudCB0byB1c2UgLU1EIGJlY2F1c2Ugd2UnZCBsaWtlIHRoZSBkZXBlbmRlbmNpZXMgdG8gZW5kCisjIyAgIHVwIGluIGEgc3ViZGlyLiAgSGF2aW5nIHRvIHJlbmFtZSBieSBoYW5kIGlzIHVnbHkuCisjIyAgIChXZSBtaWdodCBlbmQgdXAgZG9pbmcgdGhpcyBhbnl3YXkgdG8gc3VwcG9ydCBvdGhlciBjb21waWxlcnMuKQorIyMgLSBUaGUgREVQRU5ERU5DSUVTX09VVFBVVCBlbnZpcm9ubWVudCB2YXJpYWJsZSBtYWtlcyBnY2MgYWN0IGxpa2UKKyMjICAgLU1NLCBub3QgLU0gKGRlc3BpdGUgd2hhdCB0aGUgZG9jcyBzYXkpLgorIyMgLSBVc2luZyAtTSBkaXJlY3RseSBtZWFucyBydW5uaW5nIHRoZSBjb21waWxlciB0d2ljZSAoZXZlbiB3b3JzZQorIyMgICB0aGFuIHJlbmFtaW5nKS4KKyAgaWYgdGVzdCAteiAiJGdjY2ZsYWciOyB0aGVuCisgICAgZ2NjZmxhZz0tTUQsCisgIGZpCisgICIkQCIgLVdwLCIkZ2NjZmxhZyR0bXBkZXBmaWxlIgorICBzdGF0PSQ/CisgIGlmIHRlc3QgJHN0YXQgLWVxIDA7IHRoZW4gOgorICBlbHNlCisgICAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICAgIGV4aXQgJHN0YXQKKyAgZmkKKyAgcm0gLWYgIiRkZXBmaWxlIgorICBlY2hvICIkb2JqZWN0IDogXFwiID4gIiRkZXBmaWxlIgorICBhbHBoYT1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6CisjIyBUaGUgc2Vjb25kIC1lIGV4cHJlc3Npb24gaGFuZGxlcyBET1Mtc3R5bGUgZmlsZSBuYW1lcyB3aXRoIGRyaXZlIGxldHRlcnMuCisgIHNlZCAtZSAncy9eW146XSo6IC8gLycgXAorICAgICAgLWUgJ3MvXlsnJGFscGhhJ106XC9bXjpdKjogLyAvJyA8ICIkdG1wZGVwZmlsZSIgPj4gIiRkZXBmaWxlIgorIyMgVGhpcyBuZXh0IHBpZWNlIG9mIG1hZ2ljIGF2b2lkcyB0aGUgYGRlbGV0ZWQgaGVhZGVyIGZpbGUnIHByb2JsZW0uCisjIyBUaGUgcHJvYmxlbSBpcyB0aGF0IHdoZW4gYSBoZWFkZXIgZmlsZSB3aGljaCBhcHBlYXJzIGluIGEgLlAgZmlsZQorIyMgaXMgZGVsZXRlZCwgdGhlIGRlcGVuZGVuY3kgY2F1c2VzIG1ha2UgdG8gZGllIChiZWNhdXNlIHRoZXJlIGlzCisjIyB0eXBpY2FsbHkgbm8gd2F5IHRvIHJlYnVpbGQgdGhlIGhlYWRlcikuICBXZSBhdm9pZCB0aGlzIGJ5IGFkZGluZworIyMgZHVtbXkgZGVwZW5kZW5jaWVzIGZvciBlYWNoIGhlYWRlciBmaWxlLiAgVG9vIGJhZCBnY2MgZG9lc24ndCBkbworIyMgdGhpcyBmb3IgdXMgZGlyZWN0bHkuCisgIHRyICcgJyAnCisnIDwgIiR0bXBkZXBmaWxlIiB8CisjIyBTb21lIHZlcnNpb25zIG9mIGdjYyBwdXQgYSBzcGFjZSBiZWZvcmUgdGhlIGA6Jy4gIE9uIHRoZSB0aGVvcnkKKyMjIHRoYXQgdGhlIHNwYWNlIG1lYW5zIHNvbWV0aGluZywgd2UgYWRkIGEgc3BhY2UgdG8gdGhlIG91dHB1dCBhcworIyMgd2VsbC4KKyMjIFNvbWUgdmVyc2lvbnMgb2YgdGhlIEhQVVggMTAuMjAgc2VkIGNhbid0IHByb2Nlc3MgdGhpcyBpbnZvY2F0aW9uCisjIyBjb3JyZWN0bHkuICBCcmVha2luZyBpdCBpbnRvIHR3byBzZWQgaW52b2NhdGlvbnMgaXMgYSB3b3JrYXJvdW5kLgorICAgIHNlZCAtZSAncy9eXFwkLy8nIC1lICcvXiQvZCcgLWUgJy86JC9kJyB8IHNlZCAtZSAncy8kLyA6LycgPj4gIiRkZXBmaWxlIgorICBybSAtZiAiJHRtcGRlcGZpbGUiCisgIDs7CisKK2hwKQorICAjIFRoaXMgY2FzZSBleGlzdHMgb25seSB0byBsZXQgZGVwZW5kLm00IGRvIGl0cyB3b3JrLiAgSXQgd29ya3MgYnkKKyAgIyBsb29raW5nIGF0IHRoZSB0ZXh0IG9mIHRoaXMgc2NyaXB0LiAgVGhpcyBjYXNlIHdpbGwgbmV2ZXIgYmUgcnVuLAorICAjIHNpbmNlIGl0IGlzIGNoZWNrZWQgZm9yIGFib3ZlLgorICBleGl0IDEKKyAgOzsKKworc2dpKQorICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KKyAgICAiJEAiICItV3AsLU1EdXBkYXRlLCR0bXBkZXBmaWxlIgorICBlbHNlCisgICAgIiRAIiAtTUR1cGRhdGUgIiR0bXBkZXBmaWxlIgorICBmaQorICBzdGF0PSQ/CisgIGlmIHRlc3QgJHN0YXQgLWVxIDA7IHRoZW4gOgorICBlbHNlCisgICAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICAgIGV4aXQgJHN0YXQKKyAgZmkKKyAgcm0gLWYgIiRkZXBmaWxlIgorCisgIGlmIHRlc3QgLWYgIiR0bXBkZXBmaWxlIjsgdGhlbiAgIyB5ZXMsIHRoZSBzb3VyY2VmaWxlIGRlcGVuZCBvbiBvdGhlciBmaWxlcworICAgIGVjaG8gIiRvYmplY3QgOiBcXCIgPiAiJGRlcGZpbGUiCisKKyAgICAjIENsaXAgb2ZmIHRoZSBpbml0aWFsIGVsZW1lbnQgKHRoZSBkZXBlbmRlbnQpLiAgRG9uJ3QgdHJ5IHRvIGJlCisgICAgIyBjbGV2ZXIgYW5kIHJlcGxhY2UgdGhpcyB3aXRoIHNlZCBjb2RlLCBhcyBJUklYIHNlZCB3b24ndCBoYW5kbGUKKyAgICAjIGxpbmVzIHdpdGggbW9yZSB0aGFuIGEgZml4ZWQgbnVtYmVyIG9mIGNoYXJhY3RlcnMgKDQwOTYgaW4KKyAgICAjIElSSVggNi4yIHNlZCwgODE5MiBpbiBJUklYIDYuNSkuICBXZSBhbHNvIHJlbW92ZSBjb21tZW50IGxpbmVzOworICAgICMgdGhlIElSSVggY2MgYWRkcyBjb21tZW50cyBsaWtlIGAjOmZlYycgdG8gdGhlIGVuZCBvZiB0aGUKKyAgICAjIGRlcGVuZGVuY3kgbGluZS4KKyAgICB0ciAnICcgJworJyA8ICIkdG1wZGVwZmlsZSIgXAorICAgIHwgc2VkIC1lICdzL14uKlwubzovLycgLWUgJ3MvIy4qJC8vJyAtZSAnL14kLyBkJyB8IFwKKyAgICB0ciAnCisnICcgJyA+PiAiJGRlcGZpbGUiCisgICAgZWNobyA+PiAiJGRlcGZpbGUiCisKKyAgICAjIFRoZSBzZWNvbmQgcGFzcyBnZW5lcmF0ZXMgYSBkdW1teSBlbnRyeSBmb3IgZWFjaCBoZWFkZXIgZmlsZS4KKyAgICB0ciAnICcgJworJyA8ICIkdG1wZGVwZmlsZSIgXAorICAgfCBzZWQgLWUgJ3MvXi4qXC5vOi8vJyAtZSAncy8jLiokLy8nIC1lICcvXiQvIGQnIC1lICdzLyQvOi8nIFwKKyAgID4+ICIkZGVwZmlsZSIKKyAgZWxzZQorICAgICMgVGhlIHNvdXJjZWZpbGUgZG9lcyBub3QgY29udGFpbiBhbnkgZGVwZW5kZW5jaWVzLCBzbyBqdXN0CisgICAgIyBzdG9yZSBhIGR1bW15IGNvbW1lbnQgbGluZSwgdG8gYXZvaWQgZXJyb3JzIHdpdGggdGhlIE1ha2VmaWxlCisgICAgIyAiaW5jbHVkZSBiYXNlbmFtZS5QbG8iIHNjaGVtZS4KKyAgICBlY2hvICIjZHVtbXkiID4gIiRkZXBmaWxlIgorICBmaQorICBybSAtZiAiJHRtcGRlcGZpbGUiCisgIDs7CisKK2FpeCkKKyAgIyBUaGUgQyBmb3IgQUlYIENvbXBpbGVyIHVzZXMgLU0gYW5kIG91dHB1dHMgdGhlIGRlcGVuZGVuY2llcworICAjIGluIGEgLnUgZmlsZS4gIEluIG9sZGVyIHZlcnNpb25zLCB0aGlzIGZpbGUgYWx3YXlzIGxpdmVzIGluIHRoZQorICAjIGN1cnJlbnQgZGlyZWN0b3J5LiAgQWxzbywgdGhlIEFJWCBjb21waWxlciBwdXRzIGAkb2JqZWN0OicgYXQgdGhlCisgICMgc3RhcnQgb2YgZWFjaCBsaW5lOyAkb2JqZWN0IGRvZXNuJ3QgaGF2ZSBkaXJlY3RvcnkgaW5mb3JtYXRpb24uCisgICMgVmVyc2lvbiA2IHVzZXMgdGhlIGRpcmVjdG9yeSBpbiBib3RoIGNhc2VzLgorICBkaXI9YGVjaG8gIiRvYmplY3QiIHwgc2VkIC1lICdzfC9bXi9dKiR8L3wnYAorICB0ZXN0ICJ4JGRpciIgPSAieCRvYmplY3QiICYmIGRpcj0KKyAgYmFzZT1gZWNobyAiJG9iamVjdCIgfCBzZWQgLWUgJ3N8Xi4qL3x8JyAtZSAncy9cLm8kLy8nIC1lICdzL1wubG8kLy8nYAorICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KKyAgICB0bXBkZXBmaWxlMT0kZGlyJGJhc2UudQorICAgIHRtcGRlcGZpbGUyPSRiYXNlLnUKKyAgICB0bXBkZXBmaWxlMz0kZGlyLmxpYnMvJGJhc2UudQorICAgICIkQCIgLVdjLC1NCisgIGVsc2UKKyAgICB0bXBkZXBmaWxlMT0kZGlyJGJhc2UudQorICAgIHRtcGRlcGZpbGUyPSRkaXIkYmFzZS51CisgICAgdG1wZGVwZmlsZTM9JGRpciRiYXNlLnUKKyAgICAiJEAiIC1NCisgIGZpCisgIHN0YXQ9JD8KKworICBpZiB0ZXN0ICRzdGF0IC1lcSAwOyB0aGVuIDoKKyAgZWxzZQorICAgIHJtIC1mICIkdG1wZGVwZmlsZTEiICIkdG1wZGVwZmlsZTIiICIkdG1wZGVwZmlsZTMiCisgICAgZXhpdCAkc3RhdAorICBmaQorCisgIGZvciB0bXBkZXBmaWxlIGluICIkdG1wZGVwZmlsZTEiICIkdG1wZGVwZmlsZTIiICIkdG1wZGVwZmlsZTMiCisgIGRvCisgICAgdGVzdCAtZiAiJHRtcGRlcGZpbGUiICYmIGJyZWFrCisgIGRvbmUKKyAgaWYgdGVzdCAtZiAiJHRtcGRlcGZpbGUiOyB0aGVuCisgICAgIyBFYWNoIGxpbmUgaXMgb2YgdGhlIGZvcm0gYGZvby5vOiBkZXBlbmRlbnQuaCcuCisgICAgIyBEbyB0d28gcGFzc2VzLCBvbmUgdG8ganVzdCBjaGFuZ2UgdGhlc2UgdG8KKyAgICAjIGAkb2JqZWN0OiBkZXBlbmRlbnQuaCcgYW5kIG9uZSB0byBzaW1wbHkgYGRlcGVuZGVudC5oOicuCisgICAgc2VkIC1lICJzLF4uKlwuW2Etel0qOiwkb2JqZWN0OiwiIDwgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKKyAgICAjIFRoYXQncyBhIHRhYiBhbmQgYSBzcGFjZSBpbiB0aGUgW10uCisgICAgc2VkIC1lICdzLF4uKlwuW2Etel0qOlsJIF0qLCwnIC1lICdzLCQsOiwnIDwgIiR0bXBkZXBmaWxlIiA+PiAiJGRlcGZpbGUiCisgIGVsc2UKKyAgICAjIFRoZSBzb3VyY2VmaWxlIGRvZXMgbm90IGNvbnRhaW4gYW55IGRlcGVuZGVuY2llcywgc28ganVzdAorICAgICMgc3RvcmUgYSBkdW1teSBjb21tZW50IGxpbmUsIHRvIGF2b2lkIGVycm9ycyB3aXRoIHRoZSBNYWtlZmlsZQorICAgICMgImluY2x1ZGUgYmFzZW5hbWUuUGxvIiBzY2hlbWUuCisgICAgZWNobyAiI2R1bW15IiA+ICIkZGVwZmlsZSIKKyAgZmkKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICA7OworCitpY2MpCisgICMgSW50ZWwncyBDIGNvbXBpbGVyIHVuZGVyc3RhbmRzIGAtTUQgLU1GIGZpbGUnLiAgSG93ZXZlciBvbgorICAjICAgIGljYyAtTUQgLU1GIGZvby5kIC1jIC1vIHN1Yi9mb28ubyBzdWIvZm9vLmMKKyAgIyBJQ0MgNy4wIHdpbGwgZmlsbCBmb28uZCB3aXRoIHNvbWV0aGluZyBsaWtlCisgICMgICAgZm9vLm86IHN1Yi9mb28uYworICAjICAgIGZvby5vOiBzdWIvZm9vLmgKKyAgIyB3aGljaCBpcyB3cm9uZy4gIFdlIHdhbnQ6CisgICMgICAgc3ViL2Zvby5vOiBzdWIvZm9vLmMKKyAgIyAgICBzdWIvZm9vLm86IHN1Yi9mb28uaAorICAjICAgIHN1Yi9mb28uYzoKKyAgIyAgICBzdWIvZm9vLmg6CisgICMgSUNDIDcuMSB3aWxsIG91dHB1dAorICAjICAgIGZvby5vOiBzdWIvZm9vLmMgc3ViL2Zvby5oCisgICMgYW5kIHdpbGwgd3JhcCBsb25nIGxpbmVzIHVzaW5nIFwgOgorICAjICAgIGZvby5vOiBzdWIvZm9vLmMgLi4uIFwKKyAgIyAgICAgc3ViL2Zvby5oIC4uLiBcCisgICMgICAgIC4uLgorCisgICIkQCIgLU1EIC1NRiAiJHRtcGRlcGZpbGUiCisgIHN0YXQ9JD8KKyAgaWYgdGVzdCAkc3RhdCAtZXEgMDsgdGhlbiA6CisgIGVsc2UKKyAgICBybSAtZiAiJHRtcGRlcGZpbGUiCisgICAgZXhpdCAkc3RhdAorICBmaQorICBybSAtZiAiJGRlcGZpbGUiCisgICMgRWFjaCBsaW5lIGlzIG9mIHRoZSBmb3JtIGBmb28ubzogZGVwZW5kZW50LmgnLAorICAjIG9yIGBmb28ubzogZGVwMS5oIGRlcDIuaCBcJywgb3IgYCBkZXAzLmggZGVwNC5oIFwnLgorICAjIERvIHR3byBwYXNzZXMsIG9uZSB0byBqdXN0IGNoYW5nZSB0aGVzZSB0bworICAjIGAkb2JqZWN0OiBkZXBlbmRlbnQuaCcgYW5kIG9uZSB0byBzaW1wbHkgYGRlcGVuZGVudC5oOicuCisgIHNlZCAicyxeW146XSo6LCRvYmplY3QgOiwiIDwgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKKyAgIyBTb21lIHZlcnNpb25zIG9mIHRoZSBIUFVYIDEwLjIwIHNlZCBjYW4ndCBwcm9jZXNzIHRoaXMgaW52b2NhdGlvbgorICAjIGNvcnJlY3RseS4gIEJyZWFraW5nIGl0IGludG8gdHdvIHNlZCBpbnZvY2F0aW9ucyBpcyBhIHdvcmthcm91bmQuCisgIHNlZCAncyxeW146XSo6IFwoLipcKSQsXDEsO3MvXlxcJC8vOy9eJC9kOy86JC9kJyA8ICIkdG1wZGVwZmlsZSIgfAorICAgIHNlZCAtZSAncy8kLyA6LycgPj4gIiRkZXBmaWxlIgorICBybSAtZiAiJHRtcGRlcGZpbGUiCisgIDs7CisKK2hwMikKKyAgIyBUaGUgImhwIiBzdGFuemEgYWJvdmUgZG9lcyBub3Qgd29yayB3aXRoIGFDQyAoQysrKSBhbmQgSFAncyBpYTY0CisgICMgY29tcGlsZXJzLCB3aGljaCBoYXZlIGludGVncmF0ZWQgcHJlcHJvY2Vzc29ycy4gIFRoZSBjb3JyZWN0IG9wdGlvbgorICAjIHRvIHVzZSB3aXRoIHRoZXNlIGlzICtNYWtlZDsgaXQgd3JpdGVzIGRlcGVuZGVuY2llcyB0byBhIGZpbGUgbmFtZWQKKyAgIyAnZm9vLmQnLCB3aGljaCBsYW5kcyBuZXh0IHRvIHRoZSBvYmplY3QgZmlsZSwgd2hlcmV2ZXIgdGhhdAorICAjIGhhcHBlbnMgdG8gYmUuCisgICMgTXVjaCBvZiB0aGlzIGlzIHNpbWlsYXIgdG8gdGhlIHRydTY0IGNhc2U7IHNlZSBjb21tZW50cyB0aGVyZS4KKyAgZGlyPWBlY2hvICIkb2JqZWN0IiB8IHNlZCAtZSAnc3wvW14vXSokfC98J2AKKyAgdGVzdCAieCRkaXIiID0gIngkb2JqZWN0IiAmJiBkaXI9CisgIGJhc2U9YGVjaG8gIiRvYmplY3QiIHwgc2VkIC1lICdzfF4uKi98fCcgLWUgJ3MvXC5vJC8vJyAtZSAncy9cLmxvJC8vJ2AKKyAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgdG1wZGVwZmlsZTE9JGRpciRiYXNlLmQKKyAgICB0bXBkZXBmaWxlMj0kZGlyLmxpYnMvJGJhc2UuZAorICAgICIkQCIgLVdjLCtNYWtlZAorICBlbHNlCisgICAgdG1wZGVwZmlsZTE9JGRpciRiYXNlLmQKKyAgICB0bXBkZXBmaWxlMj0kZGlyJGJhc2UuZAorICAgICIkQCIgK01ha2VkCisgIGZpCisgIHN0YXQ9JD8KKyAgaWYgdGVzdCAkc3RhdCAtZXEgMDsgdGhlbiA6CisgIGVsc2UKKyAgICAgcm0gLWYgIiR0bXBkZXBmaWxlMSIgIiR0bXBkZXBmaWxlMiIKKyAgICAgZXhpdCAkc3RhdAorICBmaQorCisgIGZvciB0bXBkZXBmaWxlIGluICIkdG1wZGVwZmlsZTEiICIkdG1wZGVwZmlsZTIiCisgIGRvCisgICAgdGVzdCAtZiAiJHRtcGRlcGZpbGUiICYmIGJyZWFrCisgIGRvbmUKKyAgaWYgdGVzdCAtZiAiJHRtcGRlcGZpbGUiOyB0aGVuCisgICAgc2VkIC1lICJzLF4uKlwuW2Etel0qOiwkb2JqZWN0OiwiICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCisgICAgIyBBZGQgYGRlcGVuZGVudC5oOicgbGluZXMuCisgICAgc2VkIC1uZSAnMiwkeworCSAgICAgICBzL14gKi8vCisJICAgICAgIHMvIFxcKiQvLworCSAgICAgICBzLyQvOi8KKwkgICAgICAgcAorCSAgICAgfScgIiR0bXBkZXBmaWxlIiA+PiAiJGRlcGZpbGUiCisgIGVsc2UKKyAgICBlY2hvICIjZHVtbXkiID4gIiRkZXBmaWxlIgorICBmaQorICBybSAtZiAiJHRtcGRlcGZpbGUiICIkdG1wZGVwZmlsZTIiCisgIDs7CisKK3RydTY0KQorICAgIyBUaGUgVHJ1NjQgY29tcGlsZXIgdXNlcyAtTUQgdG8gZ2VuZXJhdGUgZGVwZW5kZW5jaWVzIGFzIGEgc2lkZQorICAgIyBlZmZlY3QuICBgY2MgLU1EIC1vIGZvby5vIC4uLicgcHV0cyB0aGUgZGVwZW5kZW5jaWVzIGludG8gYGZvby5vLmQnLgorICAgIyBBdCBsZWFzdCBvbiBBbHBoYS9SZWRoYXQgNi4xLCBDb21wYXEgQ0NDIFY2LjItNTA0IHNlZW1zIHRvIHB1dAorICAgIyBkZXBlbmRlbmNpZXMgaW4gYGZvby5kJyBpbnN0ZWFkLCBzbyB3ZSBjaGVjayBmb3IgdGhhdCB0b28uCisgICAjIFN1YmRpcmVjdG9yaWVzIGFyZSByZXNwZWN0ZWQuCisgICBkaXI9YGVjaG8gIiRvYmplY3QiIHwgc2VkIC1lICdzfC9bXi9dKiR8L3wnYAorICAgdGVzdCAieCRkaXIiID0gIngkb2JqZWN0IiAmJiBkaXI9CisgICBiYXNlPWBlY2hvICIkb2JqZWN0IiB8IHNlZCAtZSAnc3xeLiovfHwnIC1lICdzL1wubyQvLycgLWUgJ3MvXC5sbyQvLydgCisKKyAgIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgorICAgICAgIyBXaXRoIFRydTY0IGNjLCBzaGFyZWQgb2JqZWN0cyBjYW4gYWxzbyBiZSB1c2VkIHRvIG1ha2UgYQorICAgICAgIyBzdGF0aWMgbGlicmFyeS4gIFRoaXMgbWVjaGFuaXNtIGlzIHVzZWQgaW4gbGlidG9vbCAxLjQgc2VyaWVzIHRvCisgICAgICAjIGhhbmRsZSBib3RoIHNoYXJlZCBhbmQgc3RhdGljIGxpYnJhcmllcyBpbiBhIHNpbmdsZSBjb21waWxhdGlvbi4KKyAgICAgICMgV2l0aCBsaWJ0b29sIDEuNCwgZGVwZW5kZW5jaWVzIHdlcmUgb3V0cHV0IGluICRkaXIubGlicy8kYmFzZS5sby5kLgorICAgICAgIworICAgICAgIyBXaXRoIGxpYnRvb2wgMS41IHRoaXMgZXhjZXB0aW9uIHdhcyByZW1vdmVkLCBhbmQgbGlidG9vbCBub3cKKyAgICAgICMgZ2VuZXJhdGVzIDIgc2VwYXJhdGUgb2JqZWN0cyBmb3IgdGhlIDIgbGlicmFyaWVzLiAgVGhlc2UgdHdvCisgICAgICAjIGNvbXBpbGF0aW9ucyBvdXRwdXQgZGVwZW5kZW5jaWVzIGluICRkaXIubGlicy8kYmFzZS5vLmQgYW5kCisgICAgICAjIGluICRkaXIkYmFzZS5vLmQuICBXZSBoYXZlIHRvIGNoZWNrIGZvciBib3RoIGZpbGVzLCBiZWNhdXNlCisgICAgICAjIG9uZSBvZiB0aGUgdHdvIGNvbXBpbGF0aW9ucyBjYW4gYmUgZGlzYWJsZWQuICBXZSBzaG91bGQgcHJlZmVyCisgICAgICAjICRkaXIkYmFzZS5vLmQgb3ZlciAkZGlyLmxpYnMvJGJhc2Uuby5kIGJlY2F1c2UgdGhlIGxhdHRlciBpcworICAgICAgIyBhdXRvbWF0aWNhbGx5IGNsZWFuZWQgd2hlbiAubGlicy8gaXMgZGVsZXRlZCwgd2hpbGUgaWdub3JpbmcKKyAgICAgICMgdGhlIGZvcm1lciB3b3VsZCBjYXVzZSBhIGRpc3RjbGVhbmNoZWNrIHBhbmljLgorICAgICAgdG1wZGVwZmlsZTE9JGRpci5saWJzLyRiYXNlLmxvLmQgICAjIGxpYnRvb2wgMS40CisgICAgICB0bXBkZXBmaWxlMj0kZGlyJGJhc2Uuby5kICAgICAgICAgICMgbGlidG9vbCAxLjUKKyAgICAgIHRtcGRlcGZpbGUzPSRkaXIubGlicy8kYmFzZS5vLmQgICAgIyBsaWJ0b29sIDEuNQorICAgICAgdG1wZGVwZmlsZTQ9JGRpci5saWJzLyRiYXNlLmQgICAgICAjIENvbXBhcSBDQ0MgVjYuMi01MDQKKyAgICAgICIkQCIgLVdjLC1NRAorICAgZWxzZQorICAgICAgdG1wZGVwZmlsZTE9JGRpciRiYXNlLm8uZAorICAgICAgdG1wZGVwZmlsZTI9JGRpciRiYXNlLmQKKyAgICAgIHRtcGRlcGZpbGUzPSRkaXIkYmFzZS5kCisgICAgICB0bXBkZXBmaWxlND0kZGlyJGJhc2UuZAorICAgICAgIiRAIiAtTUQKKyAgIGZpCisKKyAgIHN0YXQ9JD8KKyAgIGlmIHRlc3QgJHN0YXQgLWVxIDA7IHRoZW4gOgorICAgZWxzZQorICAgICAgcm0gLWYgIiR0bXBkZXBmaWxlMSIgIiR0bXBkZXBmaWxlMiIgIiR0bXBkZXBmaWxlMyIgIiR0bXBkZXBmaWxlNCIKKyAgICAgIGV4aXQgJHN0YXQKKyAgIGZpCisKKyAgIGZvciB0bXBkZXBmaWxlIGluICIkdG1wZGVwZmlsZTEiICIkdG1wZGVwZmlsZTIiICIkdG1wZGVwZmlsZTMiICIkdG1wZGVwZmlsZTQiCisgICBkbworICAgICB0ZXN0IC1mICIkdG1wZGVwZmlsZSIgJiYgYnJlYWsKKyAgIGRvbmUKKyAgIGlmIHRlc3QgLWYgIiR0bXBkZXBmaWxlIjsgdGhlbgorICAgICAgc2VkIC1lICJzLF4uKlwuW2Etel0qOiwkb2JqZWN0OiwiIDwgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKKyAgICAgICMgVGhhdCdzIGEgdGFiIGFuZCBhIHNwYWNlIGluIHRoZSBbXS4KKyAgICAgIHNlZCAtZSAncyxeLipcLlthLXpdKjpbCSBdKiwsJyAtZSAncywkLDosJyA8ICIkdG1wZGVwZmlsZSIgPj4gIiRkZXBmaWxlIgorICAgZWxzZQorICAgICAgZWNobyAiI2R1bW15IiA+ICIkZGVwZmlsZSIKKyAgIGZpCisgICBybSAtZiAiJHRtcGRlcGZpbGUiCisgICA7OworCisjbm9zaWRlZWZmZWN0KQorICAjIFRoaXMgY29tbWVudCBhYm92ZSBpcyB1c2VkIGJ5IGF1dG9tYWtlIHRvIHRlbGwgc2lkZS1lZmZlY3QKKyAgIyBkZXBlbmRlbmN5IHRyYWNraW5nIG1lY2hhbmlzbXMgZnJvbSBzbG93ZXIgb25lcy4KKworZGFzaG1zdGRvdXQpCisgICMgSW1wb3J0YW50IG5vdGU6IGluIG9yZGVyIHRvIHN1cHBvcnQgdGhpcyBtb2RlLCBhIGNvbXBpbGVyICptdXN0KgorICAjIGFsd2F5cyB3cml0ZSB0aGUgcHJlcHJvY2Vzc2VkIGZpbGUgdG8gc3Rkb3V0LCByZWdhcmRsZXNzIG9mIC1vLgorICAiJEAiIHx8IGV4aXQgJD8KKworICAjIFJlbW92ZSB0aGUgY2FsbCB0byBMaWJ0b29sLgorICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KKyAgICB3aGlsZSB0ZXN0ICJYJDEiICE9ICdYLS1tb2RlPWNvbXBpbGUnOyBkbworICAgICAgc2hpZnQKKyAgICBkb25lCisgICAgc2hpZnQKKyAgZmkKKworICAjIFJlbW92ZSBgLW8gJG9iamVjdCcuCisgIElGUz0iICIKKyAgZm9yIGFyZworICBkbworICAgIGNhc2UgJGFyZyBpbgorICAgIC1vKQorICAgICAgc2hpZnQKKyAgICAgIDs7CisgICAgJG9iamVjdCkKKyAgICAgIHNoaWZ0CisgICAgICA7OworICAgICopCisgICAgICBzZXQgZm5vcmQgIiRAIiAiJGFyZyIKKyAgICAgIHNoaWZ0ICMgZm5vcmQKKyAgICAgIHNoaWZ0ICMgJGFyZworICAgICAgOzsKKyAgICBlc2FjCisgIGRvbmUKKworICB0ZXN0IC16ICIkZGFzaG1mbGFnIiAmJiBkYXNobWZsYWc9LU0KKyAgIyBSZXF1aXJlIGF0IGxlYXN0IHR3byBjaGFyYWN0ZXJzIGJlZm9yZSBzZWFyY2hpbmcgZm9yIGA6JworICAjIGluIHRoZSB0YXJnZXQgbmFtZS4gIFRoaXMgaXMgdG8gY29wZSB3aXRoIERPUy1zdHlsZSBmaWxlbmFtZXM6CisgICMgYSBkZXBlbmRlbmN5IHN1Y2ggYXMgYGM6L2Zvby9iYXInIGNvdWxkIGJlIHNlZW4gYXMgdGFyZ2V0IGBjJyBvdGhlcndpc2UuCisgICIkQCIgJGRhc2htZmxhZyB8CisgICAgc2VkICdzOl5bICBdKlteOiBdW146XVteOl0qXDpbICAgIF0qOiciJG9iamVjdCInXDogOicgPiAiJHRtcGRlcGZpbGUiCisgIHJtIC1mICIkZGVwZmlsZSIKKyAgY2F0IDwgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKKyAgdHIgJyAnICcKKycgPCAiJHRtcGRlcGZpbGUiIHwgXAorIyMgU29tZSB2ZXJzaW9ucyBvZiB0aGUgSFBVWCAxMC4yMCBzZWQgY2FuJ3QgcHJvY2VzcyB0aGlzIGludm9jYXRpb24KKyMjIGNvcnJlY3RseS4gIEJyZWFraW5nIGl0IGludG8gdHdvIHNlZCBpbnZvY2F0aW9ucyBpcyBhIHdvcmthcm91bmQuCisgICAgc2VkIC1lICdzL15cXCQvLycgLWUgJy9eJC9kJyAtZSAnLzokL2QnIHwgc2VkIC1lICdzLyQvIDovJyA+PiAiJGRlcGZpbGUiCisgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgOzsKKworZGFzaFhtc3Rkb3V0KQorICAjIFRoaXMgY2FzZSBvbmx5IGV4aXN0cyB0byBzYXRpc2Z5IGRlcGVuZC5tNC4gIEl0IGlzIG5ldmVyIGFjdHVhbGx5CisgICMgcnVuLCBhcyB0aGlzIG1vZGUgaXMgc3BlY2lhbGx5IHJlY29nbml6ZWQgaW4gdGhlIHByZWFtYmxlLgorICBleGl0IDEKKyAgOzsKKworbWFrZWRlcGVuZCkKKyAgIiRAIiB8fCBleGl0ICQ/CisgICMgUmVtb3ZlIGFueSBMaWJ0b29sIGNhbGwKKyAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgd2hpbGUgdGVzdCAiWCQxIiAhPSAnWC0tbW9kZT1jb21waWxlJzsgZG8KKyAgICAgIHNoaWZ0CisgICAgZG9uZQorICAgIHNoaWZ0CisgIGZpCisgICMgWCBtYWtlZGVwZW5kCisgIHNoaWZ0CisgIGNsZWFyZWQ9bm8gZWF0PW5vCisgIGZvciBhcmcKKyAgZG8KKyAgICBjYXNlICRjbGVhcmVkIGluCisgICAgbm8pCisgICAgICBzZXQgIiI7IHNoaWZ0CisgICAgICBjbGVhcmVkPXllcyA7OworICAgIGVzYWMKKyAgICBpZiB0ZXN0ICRlYXQgPSB5ZXM7IHRoZW4KKyAgICAgIGVhdD1ubworICAgICAgY29udGludWUKKyAgICBmaQorICAgIGNhc2UgIiRhcmciIGluCisgICAgLUQqfC1JKikKKyAgICAgIHNldCBmbm9yZCAiJEAiICIkYXJnIjsgc2hpZnQgOzsKKyAgICAjIFN0cmlwIGFueSBvcHRpb24gdGhhdCBtYWtlZGVwZW5kIG1heSBub3QgdW5kZXJzdGFuZC4gIFJlbW92ZQorICAgICMgdGhlIG9iamVjdCB0b28sIG90aGVyd2lzZSBtYWtlZGVwZW5kIHdpbGwgcGFyc2UgaXQgYXMgYSBzb3VyY2UgZmlsZS4KKyAgICAtYXJjaCkKKyAgICAgIGVhdD15ZXMgOzsKKyAgICAtKnwkb2JqZWN0KQorICAgICAgOzsKKyAgICAqKQorICAgICAgc2V0IGZub3JkICIkQCIgIiRhcmciOyBzaGlmdCA7OworICAgIGVzYWMKKyAgZG9uZQorICBvYmpfc3VmZml4PWBlY2hvICIkb2JqZWN0IiB8IHNlZCAncy9eLipcLi8uLydgCisgIHRvdWNoICIkdG1wZGVwZmlsZSIKKyAgJHtNQUtFREVQRU5ELW1ha2VkZXBlbmR9IC1vIiRvYmpfc3VmZml4IiAtZiIkdG1wZGVwZmlsZSIgIiRAIgorICBybSAtZiAiJGRlcGZpbGUiCisgIGNhdCA8ICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCisgIHNlZCAnMSwyZCcgIiR0bXBkZXBmaWxlIiB8IHRyICcgJyAnCisnIHwgXAorIyMgU29tZSB2ZXJzaW9ucyBvZiB0aGUgSFBVWCAxMC4yMCBzZWQgY2FuJ3QgcHJvY2VzcyB0aGlzIGludm9jYXRpb24KKyMjIGNvcnJlY3RseS4gIEJyZWFraW5nIGl0IGludG8gdHdvIHNlZCBpbnZvY2F0aW9ucyBpcyBhIHdvcmthcm91bmQuCisgICAgc2VkIC1lICdzL15cXCQvLycgLWUgJy9eJC9kJyAtZSAnLzokL2QnIHwgc2VkIC1lICdzLyQvIDovJyA+PiAiJGRlcGZpbGUiCisgIHJtIC1mICIkdG1wZGVwZmlsZSIgIiR0bXBkZXBmaWxlIi5iYWsKKyAgOzsKKworY3BwKQorICAjIEltcG9ydGFudCBub3RlOiBpbiBvcmRlciB0byBzdXBwb3J0IHRoaXMgbW9kZSwgYSBjb21waWxlciAqbXVzdCoKKyAgIyBhbHdheXMgd3JpdGUgdGhlIHByZXByb2Nlc3NlZCBmaWxlIHRvIHN0ZG91dC4KKyAgIiRAIiB8fCBleGl0ICQ/CisKKyAgIyBSZW1vdmUgdGhlIGNhbGwgdG8gTGlidG9vbC4KKyAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgd2hpbGUgdGVzdCAiWCQxIiAhPSAnWC0tbW9kZT1jb21waWxlJzsgZG8KKyAgICAgIHNoaWZ0CisgICAgZG9uZQorICAgIHNoaWZ0CisgIGZpCisKKyAgIyBSZW1vdmUgYC1vICRvYmplY3QnLgorICBJRlM9IiAiCisgIGZvciBhcmcKKyAgZG8KKyAgICBjYXNlICRhcmcgaW4KKyAgICAtbykKKyAgICAgIHNoaWZ0CisgICAgICA7OworICAgICRvYmplY3QpCisgICAgICBzaGlmdAorICAgICAgOzsKKyAgICAqKQorICAgICAgc2V0IGZub3JkICIkQCIgIiRhcmciCisgICAgICBzaGlmdCAjIGZub3JkCisgICAgICBzaGlmdCAjICRhcmcKKyAgICAgIDs7CisgICAgZXNhYworICBkb25lCisKKyAgIiRAIiAtRSB8CisgICAgc2VkIC1uIC1lICcvXiMgWzAtOV1bMC05XSogIlwoW14iXSpcKSIuKi8gczo6IFwxIFxcOnAnIFwKKyAgICAgICAtZSAnL14jbGluZSBbMC05XVswLTldKiAiXChbXiJdKlwpIi4qLyBzOjogXDEgXFw6cCcgfAorICAgIHNlZCAnJCBzOiBcXCQ6OicgPiAiJHRtcGRlcGZpbGUiCisgIHJtIC1mICIkZGVwZmlsZSIKKyAgZWNobyAiJG9iamVjdCA6IFxcIiA+ICIkZGVwZmlsZSIKKyAgY2F0IDwgIiR0bXBkZXBmaWxlIiA+PiAiJGRlcGZpbGUiCisgIHNlZCA8ICIkdG1wZGVwZmlsZSIgJy9eJC9kO3MvXiAvLztzLyBcXCQvLztzLyQvIDovJyA+PiAiJGRlcGZpbGUiCisgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgOzsKKworbXN2aXN1YWxjcHApCisgICMgSW1wb3J0YW50IG5vdGU6IGluIG9yZGVyIHRvIHN1cHBvcnQgdGhpcyBtb2RlLCBhIGNvbXBpbGVyICptdXN0KgorICAjIGFsd2F5cyB3cml0ZSB0aGUgcHJlcHJvY2Vzc2VkIGZpbGUgdG8gc3Rkb3V0LgorICAiJEAiIHx8IGV4aXQgJD8KKworICAjIFJlbW92ZSB0aGUgY2FsbCB0byBMaWJ0b29sLgorICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KKyAgICB3aGlsZSB0ZXN0ICJYJDEiICE9ICdYLS1tb2RlPWNvbXBpbGUnOyBkbworICAgICAgc2hpZnQKKyAgICBkb25lCisgICAgc2hpZnQKKyAgZmkKKworICBJRlM9IiAiCisgIGZvciBhcmcKKyAgZG8KKyAgICBjYXNlICIkYXJnIiBpbgorICAgIC1vKQorICAgICAgc2hpZnQKKyAgICAgIDs7CisgICAgJG9iamVjdCkKKyAgICAgIHNoaWZ0CisgICAgICA7OworICAgICItR20ifCIvR20ifCItR2kifCIvR2kifCItWkkifCIvWkkiKQorCXNldCBmbm9yZCAiJEAiCisJc2hpZnQKKwlzaGlmdAorCTs7CisgICAgKikKKwlzZXQgZm5vcmQgIiRAIiAiJGFyZyIKKwlzaGlmdAorCXNoaWZ0CisJOzsKKyAgICBlc2FjCisgIGRvbmUKKyAgIiRAIiAtRSAyPi9kZXYvbnVsbCB8CisgIHNlZCAtbiAnL14jbGluZSBbMC05XVswLTldKiAiXChbXiJdKlwpIi8gczo6XDE6cCcgfCAkY3lncGF0aF91IHwgc29ydCAtdSA+ICIkdG1wZGVwZmlsZSIKKyAgcm0gLWYgIiRkZXBmaWxlIgorICBlY2hvICIkb2JqZWN0IDogXFwiID4gIiRkZXBmaWxlIgorICBzZWQgPCAiJHRtcGRlcGZpbGUiIC1uIC1lICdzJSAlXFwgJWcnIC1lICcvXlwoLipcKSQvIHM6OglcMSBcXDpwJyA+PiAiJGRlcGZpbGUiCisgIGVjaG8gIgkiID4+ICIkZGVwZmlsZSIKKyAgc2VkIDwgIiR0bXBkZXBmaWxlIiAtbiAtZSAncyUgJVxcICVnJyAtZSAnL15cKC4qXCkkLyBzOjpcMVw6OnAnID4+ICIkZGVwZmlsZSIKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICA7OworCittc3ZjbXN5cykKKyAgIyBUaGlzIGNhc2UgZXhpc3RzIG9ubHkgdG8gbGV0IGRlcGVuZC5tNCBkbyBpdHMgd29yay4gIEl0IHdvcmtzIGJ5CisgICMgbG9va2luZyBhdCB0aGUgdGV4dCBvZiB0aGlzIHNjcmlwdC4gIFRoaXMgY2FzZSB3aWxsIG5ldmVyIGJlIHJ1biwKKyAgIyBzaW5jZSBpdCBpcyBjaGVja2VkIGZvciBhYm92ZS4KKyAgZXhpdCAxCisgIDs7CisKK25vbmUpCisgIGV4ZWMgIiRAIgorICA7OworCisqKQorICBlY2hvICJVbmtub3duIGRlcG1vZGUgJGRlcG1vZGUiIDE+JjIKKyAgZXhpdCAxCisgIDs7Citlc2FjCisKK2V4aXQgMAorCisjIExvY2FsIFZhcmlhYmxlczoKKyMgbW9kZTogc2hlbGwtc2NyaXB0CisjIHNoLWluZGVudGF0aW9uOiAyCisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1zdGFydDogInNjcmlwdHZlcnNpb249IgorIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQuJTAySCIKKyMgdGltZS1zdGFtcC10aW1lLXpvbmU6ICJVVEMiCisjIHRpbWUtc3RhbXAtZW5kOiAiOyAjIFVUQyIKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2RvY3MvQVBJLUNIQU5HRVMtMC42IGIvYXZhaGktMC42LjMxL2RvY3MvQVBJLUNIQU5HRVMtMC42Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMDg0NDYKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvZG9jcy9BUEktQ0hBTkdFUy0wLjYKQEAgLTAsMCArMSw3NCBAQAorLSotdGV4dC0qLQorCitBIHRlcnNlIChhbmQgaW5jb21wbGV0ZSkgbGlzdCBvZiBBUEkgY2hhbmdlcyBiZXR3ZWVuIDAuNS4yIGFuZCAwLjY6CisKKyAqIE1vc3QgYnJvd3NpbmcgYW5kIHJlZ2lzdHJhdGlvbiBmdW5jdGlvbnMgYW5kIHRoZWlyIGNhbGxiYWNrcyBnYWluZWQKKyAgIG5ldyAiZmxhZ3MiIHBhcmFtZXRlcnMuIFBhc3NpbmcgMCByZXN1bHRzIGluIHNpbWlsYXIgYmVoYXZpb3VyIGFzCisgICBpbiAwLjUuMgorCisgKiBhdmFoaS1jbGllbnQvY2xpZW50LmggaGFzIGJlZW4gc3BsaXQgaW50byBjbGllbnQuaCwgcHVibGlzaC5oIGFuZCBsb29rdXAuaAorIAorICogYXZhaGktY29yZS9jb3JlLmggaGFzIGJlZW4gc3BsaXQgaW50byBjb3JlLmggcHVibGlzaC5oIGxvb2t1cC5oCisKKyAqIGF2YWhpX2NsaWVudF9pc19zZXJ2aWNlX2xvY2FsKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGluc3RlYWQgdGhlIHNwZWNpYWwKKyAgIGZsYWdzIEFWQUhJX0xPT0tVUF9SRVNVTFRfTE9DQUwgYW5kIEFWQUhJX0xPT0tVUF9SRVNVTFRfT1VSX09XTiB3aGljaCBhcmUKKyAgIHNldCB3aGVuIHJlc29sdmluZyBvciBicm93c2luZyBmb3Igc2VydmljZXMuIEFWQUhJX0xPT0tVUF9SRVNVTFRfT1VSX09XTiBpcworICAgd2hhdCBtb3N0IHBlb3BsZSBzaG91bGQgdXNlLgorCisgKiBBVkFISV9SRVNPTFZFUl9USU1FT1VUIGFuZCBBVkFISV9SRVNPTFZFUl9OT1RfRk9VTkQgaGF2ZSBiZWVuCisgICByZW1vdmVkLiBJbnN0ZWFkIEFWQUhJX1JFU09MVkVSX0ZBSUxVUkUgaXMgdXNlZCBhbmQgdGhlIGV4YWN0IGVycm9yCisgICBjb2RlIGlzIGF2YWlsYWJsZSBmcm9tIGF2YWhpX2NsaWVudF9lcnJubygpL2F2YWhpX3NlcnZlcl9lcnJubygpCisKKyAqIFRoZSBldmVudHMgQVZBSElfQlJPV1NFUl9DQUNIRV9FWEhBVVNURUQsIEFWQUhJX0JST1dTRVJfQUxMX0ZPUl9OT1cKKyAgIGhhdmUgYmVlbiBpbnRyb2R1Y2VkLiBGYWlsdXJlcyBkdXJpbmcgYnJvd3NpbmcgYXJlIG5vdyBwYXNzZWQgYXMKKyAgIEFWQUhJX0JST1dTRVJfRkFJTFVSRSBhbmQgdGhlIGVycm9yIGNvZGUgaXMgbWFkZSBhdmFpbGFibGUgdGhyb3VnaAorICAgYXZhaGlfY2xpZW50X2Vycm5vKCkvYXZhaGlfc2VydmVyX2Vycm5vKCkuCisKKyAqIFRoZSBzZXJ2ZXIgZ2FpbmVkIGEgbmV3IHN0YXRlIEFWQUhJX1NFUlZFUl9GQUlMVVJFIGlmIHNvbWUgZmF0YWwKKyAgIGVycm9yIGhhcHBlbnMuIFRoZSByZWFzb24gY2FuIGJlIGZvdW5kIGluCisgICBhdmFoaV9zZXJ2ZXJfZXJybm8oKS4gQ2xpZW50cyBjYW4gc2FmZWx5IGlnbm9yZSB0aGlzIHN0YXRlLgorCisgKiBZb3UgY2FuIG5vdyB1cGRhdGUgZXhpc3RpbmcgcmVjb3JkcyBieSBzZXR0aW5nIHRoZQorICAgQVZBSElfUFVCTElTSF9VUERBVEUgZmxhZ3MgZm9yIGFkZF9zZXJ2aWNlKCkgYW5kIGZyaWVuZHMuIENvbnNpZGVyCisgICB1c2luZyBhdmFoaV9zZXJ2ZXJfdXBkYXRlX3NlcnZpY2VfdHh0X3N0cmxzdCgpIGlmIHlvdSBuZWVkIHRvCisgICB1cGRhdGUgb25seSB0aGUgVFhUIHJlY29yZCBmb3IgYSBzZXJ2aWNlLgorCisgKiBQcm9wZXIgc3VwcG9ydCBmb3Igc2VydmljZSBzdWJ0eXBlcyBpcyBub3cgYXZhaWxhYmxlLiBVc2UKKyAgIGF2YWhpX3NlcnZlcl9hZGRfc2VydmljZV9zdWJ0eXBlKCkgZm9yIHRoYXQuCisKKyAqIEVudHJ5IGdyb3VwcyBnYWluZWQgdGhlIG5ldyBzdGF0ZSBBVkFISV9FTlRSWV9HUk9VUF9GQUlMVVJFLiBUaGUKKyAgIHJlYXNvbiBpcyBhdmFpbGFibGUgdXNpbmcKKyAgIGF2YWhpX3NlcnZlcl9lcnJubygpL2F2YWhpX2NsaWVudF9lcnJubygpLgorCisgKiBNYW55IHN1cGVyZmx1b3VzIGZ1bmN0aW9ucyBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBwdWJsaWMgQVBJIG9yCisgICBlbnRpcmVseS4KKworICogYXZhaGlfc2ltcGxlX3BvbGxfaXRlcmF0ZSgpIGhhcyBiZWVuIHNwbGl0IHVwIGludG8gdGhyZWUKKyAgIGZ1bmN0aW9ucy4gYXZhaGlfc2ltcGxlX3BvbGxfbG9vcCgpIGhhcyBiZWVuIGludHJvZHVjZWQuCisKKyAqIFNvbWUgbmV3IGxpbWl0cyBoYXZlIGJlZW4gaW50cm9kdWNlZDogQVZBSElfQUREUkVTU19TVFJfTUFYLAorICAgQVZBSElfRE9NQUlOX05BTUVfTUFYLCBBVkFISV9MQUJFTF9NQVgKKworICogVGhlIGZ1bmN0aW9ucyBhdmFoaV9zZXJ2aWNlX25hbWVfam9pbigpIGFuZAorICAgYXZhaGlfc2VydmljZV9uYW1lX3NwbGl0KCkgaGF2ZSBiZWVuIGludHJvZHVjZWQuCisgCisgKiBBVkFISV9FUlJfTE9DQUxfQ09MTElTSU9OIGhhcyBiZWVuIHJlbmFtZWQgdG8gQVZBSElfRVJSX0NPTExTSU9OCisKKyAqIFRoZSB2YWx1ZXMgb2YgQVZBSElfUFJPVE9feHh4IGhhdmUgY2hhbmdlZCwgdGhleSBhcmUgbm8gbG9uZ2VyCisgICBpZGVudGljYWwgdG8gdGhlIEJTRCBBRl94eHggY29uc3RhbnRzCisKKyAqIGF2YWhpX2NsaWVudF9uZXcoKSBub3cgdGFrZXMgYW4gYWRkaXRpb25hbCBmbGFncyBwYXJhbWV0ZXIuIE1vc3QKKyAgIGludGVyZXN0aW5nIGZsYWcgaGVyZSBpcyBBVkFISV9DTElFTlRfTk9fRkFJTCwgd2hpY2ggY2FuIGJlIHVzZWQgdG8KKyAgIGNyZWF0ZSBhbiBBdmFoaUNsaWVudCBvYmplY3QgZXZlbiB3aGVuIHRoZSBkYWVtb24gaXMgbm90CisgICBydW5uaW5nLiBUaGlzIGlzIHVzZWZ1bCB0byBkZWFsIHdpdGggZGFlbW9uIHJlc3RhcnRzLgorCisgKiBBdmFoaUNsaWVudCBnYWluZWQgYSBuZXcgc3RhdGUgQVZBSElfQ0xJRU5UX0ZBSUxVUkUuICAoc3VwZXJzZWRpbmcKKyAgIEFWQUhJX0NMSUVOVF9ESVNDT05ORUNURUQpLiBJZiB0aGlzIGV2ZW50IGhhcHBlbnMsCisgICBhdmFoaV9jbGllbnRfZXJybm8oKSB3aWxsIHJldHVybiB0aGUgcmVhc29uLiBJZiB0aGUgZXJyb3IgcmV0dXJuZWQKKyAgIGlzIEFWQUhJX0VSUl9ESVNDT05ORUNURUQsIHRoZSBzaXR1YXRpb24gd2hlcmUKKyAgIEFWQUhJX0NMSUVOVF9ESVNDT05ORUNURUQgd2FzIHByZXZpb3VzbHkgdGhyb3duIGlzIGVudGVyZWQuIFlvdSBtYXkKKyAgIGNob29zZSB0byByZWNvbm5lY3QgaW4gdGhhdCBjYXNlIGJ5IGZyZWVpbmcgeW91ciBBdmFoaUNsaWVudCBuZXcKKyAgIGFuZCBjcmVhdGUgYSBuZXcgb25lIHdpdGggcGFzc2luZyBBVkFISV9DTElFTlRfTk9fRkFJTC4KKworICogVGhlcmUncyBub3cgYSBjbGllbnQgc2lkZSBBdmFoaVJlY29yZEJyb3dzZXIsIGFuZCAKKyAgIGF2YWhpX2VudHJ5X2dyb3VwX2FkZF9yZWNvcmQoKS4KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9kb2NzL0FVVEhPUlMgYi9hdmFoaS0wLjYuMzEvZG9jcy9BVVRIT1JTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2YzUxMDIKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvZG9jcy9BVVRIT1JTCkBAIC0wLDAgKzEsMTUgQEAKK0lmIHlvdSB3aXNoIHRvIGNvbnRhY3QgdGhlIGRldmVsb3BlcnMsIHlvdSBjYW4gbWFpbCBvdXIgbWFpbGluZyBsaXN0CisgICAgYXZhaGlAZnJlZWRlc2t0b3Aub3JnCisKK0ZvciBtb3JlIGluZm9ybWF0aW9uIGFuZCBob3cgdG8gc3Vic2NyaWJlLCBzZWUKKyAgICBodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vYXZhaGkKKworTGVubmFydCBQb2V0dGVyaW5nCitUcmVudCBMbG95ZCA8bGF0aGlhdEBidXIuc3Q+CitTZWJhc3RpZW4gRXN0aWVubmUgPHNlYmFzdGllbi5lc3RpZW5uZUBnbWFpbC5jb20+CitKYWt1YiBTdGFjaG93c2tpCitKYW1lcyBXaWxsY294IDxzbm9ycEBzbm9ycC5uZXQ+CitTam9lcmQgU2ltb25zCitUZWQgUGVyY2l2YWwKK1BlZHJhaWcgTydCcmlhaW4KK01hdGhpZXUgRHJvdWV0CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvZG9jcy9DT01QQVQtTEFZRVJTIGIvYXZhaGktMC42LjMxL2RvY3MvQ09NUEFULUxBWUVSUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWIwMWYyCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2RvY3MvQ09NUEFULUxBWUVSUwpAQCAtMCwwICsxLDE2IEBACitBdmFoaSAwLjYuMSBhbmQgYWJvdmUgb2ZmZXIgZnVsbCBBUEkgYW5kIEFCSSBjb21wYXRpYmlsaXR5IHdpdGggSE9XTAorYW5kIEJvbmpvdXIgb3V0LW9mLXRoZS1ib3guIFRvIGVuYWJsZSB0aGlzIHlvdSBwYXNzCistLWVuYWJsZS1jb21wYXQtbGliZG5zX3NkIGFuZC9vciAtLWVuYWJsZS1jb21wYXQtaG93bCB0byB0aGUgY29uZmlndXJlCitzY3JpcHQuIFRoZSBidWlsZCBzeXN0ZW0gaW5zdGFsbHMgYm90aCBhIHNoYXJlZCBsaWJyYXJ5IGxpYmRuc19zZC5zbworYW5kIG9uZSBuYW1lZCBsaWJob3dsLnNvLiBUaGVzZSBmaWxlcyBtaWdodCBvdmVyd3JpdGUgdGhlIG9yaWdpbmFsCitpbXBsZW1lbnRhdGlvbnMsIHNvIHRha2UgY2FyZSEKKworRGlzdHJpYnV0b3JzIHRoYXQgd2FudCBmdWxsIGJ1aWxkIHN5c3RlbSBjb21wYXRpYmlsaXR5IGluIGFkZGl0aW9uIHRvCitBQkkvQVBJIGNvbXBhdGliaWxpdHkgc2hvdWxkOgorCisgICAgICAgIDEpIFN5bWxpbmsgdGhlIHBrZy1jb25maWcgZmlsZSBhdmFoaS1jb21wYXQtaG93bC5wYyB0byBob3dsLnBjCisgCisgICAgICAgIDIpIFN5bWxpbmsgJChpbmNsdWRlZGlyKS9hdmFoaS1jb21wYXQtbGliZG5zX3NkL2Ruc19zZC5oIHRvIAorICAgICAgICAgICAkKGluY2x1ZGVkaXIpL2Ruc19zZC5oCisKKy0tIExlbm5hcnQKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9kb2NzL0RCVVMtQVBJIGIvYXZhaGktMC42LjMxL2RvY3MvREJVUy1BUEkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E1N2FhYQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9kb2NzL0RCVVMtQVBJCkBAIC0wLDAgKzEsMTMgQEAKKyogTk9URSAqCitUaGlzIGZpbGUgdXNlZCB0byBjb250YWluIGFuIG92ZXJ2aWV3IG9mIHRoZSBEQlVTIEFQSSBmb3IgQXZhaGksIGhvd2V2ZXIKK3NpbmNlIGl0IHdhcyBubyBsb25nZXIgdXAgdG8gZGF0ZSB5b3Ugc2hvdWxkIG5vdyByZWFkIHRoZSBYTUwtZm9ybWF0dGVkIERCVVMKK0ludHJvc3BlY3Rpb24gZmlsZXMsIHdoaWNoIGFyZSBmYWlybHkgZWFzeSB0byB1bmRlcnN0YW5kIGFuZCBrZXB0IHVwIHRvIGRhdGUuCisKK1lvdSBjYW4gc2VlIHRoZW0gaW4gdGhlIGF2YWhpLWRhZW1vbiBzb3VyY2UgZGlyZWN0b3J5LCBuYW1lZCAqLmludHJvc3BlY3QuCisKK09wZW5pbmcgdGhlbSBpbiBhIHdlYiBicm93c2VyIGlzIGEgZ29vZCB3YXkgdG8gdmlldyB0aGVtIGFzIHRoZXkgYXJlIGZvcm1hdHRlZAorbmljZWx5LCB5b3UgY2FuIGFsc28gdmlldyBvdXIgb25saW5lIGNvcHkgdW5kZXIgIkRldmVsb3Bpbmcgd2l0aCBBdmFoaSIgaGVyZToKKworaHR0cDovL2F2YWhpLm9yZy8KKworIC0gTGF0aGlhdApkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2RvY3MvSEFDS0lORyBiL2F2YWhpLTAuNi4zMS9kb2NzL0hBQ0tJTkcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRhODM2NgotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9kb2NzL0hBQ0tJTkcKQEAgLTAsMCArMSw3OSBAQAorUGxlYXNlIGNvbXBseSB3aXRoIHRoZSBmb2xsb3dpbmcgcnVsZXMgd2hlbiBoYWNraW5nIG9uIEF2YWhpOgorCisgKiBCZWZvcmUgY29tbWl0aW5nIGNoZWNrIHdpdGggImdpdCBzdCIgdGhhdCBhbGwgYnVpbHQgZmlsZXMgYXJlIGlnbm9yZWQKKyAgIGJ5IGdpdC4gVG8gY2hhbmdlIHRoZSBsaXN0IG9mIGlnbm9yZWQgZmlsZXMgdXNlCisKKyAgICAgICAkVklTVUFMIC5naXRpZ25vcmUKKworICAgVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSAiLmN2c2lnbm9yZSIgZmlsZSBpbiBDVlMgdGltZXMuCisKKyAqIERvbid0IGZvcmdldCB0byBhZGQgdGhlIGF1dG9jb25mIGNvbmZpZy5oIGluY2x1c2lvbiB0byBhbGwgQyBzb3VyY2UgZmlsZXM6CisKKyAgICNpZmRlZiBIQVZFX0NPTkZJR19ICisgICAjaW5jbHVkZSA8Y29uZmlnLmg+CisgICAjZW5kaWYKKworICAgVGhpcyBuZWVkcyB0byBiZSBwbGFjZWQgaW4gaW4gLmMgZmlsZXMgb25seS4gTk9UIElOIEhFQURFUiBGSUxFUyEKKworICogRG9uJ3QgaGFyZGNvZGUgYW55IHBhdGhzIGluIHNvdXJjZSBmaWxlcy4gRWl0aGVyIHVzZSB0aGUgLUQgb3B0aW9uIG9mIGdjYworICAgZm9yIEMgc291cmNlcyBvciB1c2UgInNlZCIgdG8gcmVwbGFjZSB0aGVtIGJhc2VkIG9uIGEgLmluIGZpbGUuCisKKyAqIE5ldmVyIGZvcmdldCB0aGF0IEF2YWhpIHNob3VsZCBiZSBidWlsZGFibGUgd2l0aG91dCBEQlVTLCBHVEsgb3IgcHl0aG9uIQorCisgKiBCZWZvcmUgY29tbWl0aW5nLCB0ZXN0IHlvdXIgY29kZSEgSW4gY2FzZSBvZiBDIGNvbnNpZGVyIHJ1bm5pbmcgaXQKKyAgIGEgZmV3IHRpbWVzIHRocm91Z2ggdmFsZ3JpbmQsIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdSBnb3QgZXZlcnl0aGluZworICAgcmlnaHQuICBZb3UgaGF2ZSB0byBjYWxsIGxpYnRvb2wgZXhwbGljaXRseSB3aGVuIHJ1bm5pbmcgdmFsZ3JpbmQKKyAgIG9uIGJpbmFyaWVzIHRoYXQgZGVwZW5kIG9uIHNoYXJlZCBvYmplY3RzLiBlLmc6CisKKyAgICAgICBsaWJ0b29sIC0tbW9kZT1leGVjdXRlIHZhbGdyaW5kIC4vYXZhaGktZGFlbW9uCisKKyAgIFBsZWFzZSBub3RlIHRoYXQgdmFsZ3JpbmQgY2FuJ3QgZmluZCB5b3UgYWxsIGJ1Z3MuIFBsZWFzZSBjaGVjaworICAgeW91ciBjb2RlIHRocmljZSB3aXRoIHlvdXIgYnJhaW4gYmVmb3JlIGNvbW1pdHRpbmcuIFZhbGdyaW5kIGlzCisgICBvbmx5IGEgZmluYWwgY2hlY2suCisKKyAqIFdoZW5ldmVyIHlvdSBhZGQgYSBuZXcgTWFrZWZpbGUuYW0sIEMgKC5jIG9yIC5oKSBzb3VyY2UgZmlsZSwgc2hlbGwgb3IKKyAgIHB5dGhvbiBzY3JpcHQgcGxlYXNlIGFkZCB0aGlzIGxlZ2FsIGJsdXJiIHRvIGl0cyBoZWFkZXI6CisKKyAgIEZvciBNYWtlZmlsZS5hbSwgcHl0aG9uIGFuZCBzaGVsbCBjb2RlOgorCis8c25pcD4KKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisjCisjIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisjIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisjIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisjIFVTQS4KKzwvc25pcD4KKworICAgRm9yIEMgc291cmNlIGNvZGU6CisKKzxzbmlwPgorLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworPC9zbmlwPgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2RvY3MvSU5TVEFMTCBiL2F2YWhpLTAuNi4zMS9kb2NzL0lOU1RBTEwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE5YWMzZQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9kb2NzL0lOU1RBTEwKQEAgLTAsMCArMSw1MyBAQAorKioqIFF1aWNrIGluc3RhbGwgaW5zdHJ1Y3Rpb25zICh0ZXN0ZWQgb24gRGViaWFuL1VidW50dSBvbmx5ISkgKioqCisKK1doaWxlICJjb25maWd1cmUiIGFuZCAibWFrZSIgbWF5IGJlIHJ1biBhcyBub3JtYWwgdXNlciBhbGwgb3RoZXIgY29tbWFuZHMKK25lZWQgdG8gYmUgcnVuIGFzIHJvb3QuCisKK0NvbmZpZ3VyZSB0aGUgYnVpbGQgc3lzdGVtOgorCSQgLi9jb25maWd1cmUgLS1zeXNjb25mZGlyPS9ldGMgLS1sb2NhbHN0YXRlZGlyPS92YXIKKworU29tZSBjb25maWd1cmUgb3B0aW9ucyBhdmFpbGFibGU6CisKKyAgICAtLWRpc2FibGUtZ3RrICAgICAgICAgICAgZGlzYWJsZSBHVEsrIHRvb2xzICAgICAgICAgICAgICAgIChkZWZhdWx0OiBlbmFibGVkKQorICAgIC0tZGlzYWJsZS1kYnVzICAgICAgICAgICBkaXNhYmxlIERCVVMgc3VwcG9ydCAgICAgICAgICAgICAgKGRlZmF1bHQ6IGVuYWJsZWQpCisgICAgLS1kaXNhYmxlLXB5dGhvbiAgICAgICAgIGRpc2FibGUgYnVpbGRpbmcgcHl0aG9uIG1vZHVsZXMgICAoZGVmYXVsdDogZW5hYmxlZCkKKyAgICAtLXdpdGgtZGJ1cy1zeXM9PGRpcj4gICAgd2hlcmUgRC1CVVMgc3lzdGVtLmQgZGlyZWN0b3J5IGlzCisgICAgLS13aXRoLWRpc3Rybz08ZGlzdHJvPiAgIHRoZSB0YXJnZXQgTGludXggZGlzdHJpYnV0aW9uIChvbmUgb2YgcmVkaGF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VzZSwgZ2VudG9vLCBkZWJpYW4gb3Igc2xhY2t3YXJlKQorICAgIC0td2l0aC1hdmFoaS11c2VyPTx1c2VyPiBVc2VyIGZvciBydW5uaW5nIHRoZSBBdmFoaSBkYWVtb24gKGF2YWhpKQorICAgIC0td2l0aC1hdmFoaS1ncm91cD08Z3JwPiBHcm91cCBmb3IgQXZhaGkgKGF2YWhpKQorCisgICAgUGxlYXNlIG5vdGUgdGhhdCBieSBkaXNhYmxpbmcgREJVUyB5b3UgbG9zZSB0aGUgYWJpbGl0eSB0byBwdWJsaXNoIGFuZCBicm93c2UKKyAgICBzZXJ2aWNlcyBmcm9tIGxvY2FsIGFwcGxpY2F0aW9ucy4KKworICAgIFBsZWFzZSBub3RlIHRoYXQgQXZhaGkgY3VycmVudGx5IHNoaXBzIHdpdGggYSBpbml0IHNjcmlwdHMgZm9yIG9ubHkgYSBmZXcKKyAgICBkaXN0cmlidXRpb25zLiBpZiB5b3VycyBpcyBub3Qgc3VwcG9ydGVkIHJpZ2h0IG5vdywgWU1NVi4gUGF0Y2hlcyB3ZWxjb21lLgorCisJJCBtYWtlCisJIyBtYWtlIGluc3RhbGwKKwkjIGxkY29uZmlnCisKK0FkZCBhIHVzZXIgYW4gYSBncm91cCBmb3IgYXZhaGkuIChEZWJpYW4gc3BlY2lmaWMpCisJIyBhZGRncm91cCAtLXN5c3RlbSBhdmFoaQorCSMgYWRkdXNlciAtLXN5c3RlbSAtLW5vLWNyZWF0ZS1ob21lIC0taW5ncm91cCBhdmFoaSBhdmFoaQorCitBc2sgREJVUyB0byByZS1yZWFkIGl0cyBwb2xpY2llczoKKwkjIGtpbGwgLUhVUCBgY2F0IC92YXIvcnVuL2RidXMvcGlkYAorCitOb3cgc3RhcnQgdGhlIEF2YWhpIGRhZW1vbjoKKwkjIC9ldGMvaW5pdC5kL2F2YWhpLWRhZW1vbiBzdGFydAorCitPcHRpb25hbGx5IHN0YXJ0IHRoZSB1bmljYXN0IEROUyBjb25maWd1cmF0aW9uIGRhZW1vbjoKKwkjIC9ldGMvaW5pdC5kL2F2YWhpLWRuc2NvbmZkIHN0YXJ0CisKK1RvIHN0YXJ0IHRoZSB0d28gZGFlbW9ucyBhdCBib290IHRpbWUgb24gRGViaWFuIGJhc2VkIGRpc3RyaWJ1dGlvbnM6CisJd2l0aCBEQlVTIHN1cHBvcnQ6CisJIyBsbiAtcyAvZXRjL2luaXQuZC9hdmFoaS1kYWVtb24gL2V0Yy9kYnVzLTEvZXZlbnQuZC83NWF2YWhpLWRhZW1vbgorCSMgbG4gLXMgL2V0Yy9pbml0LmQvYXZhaGktZG5zY29uZmQgL2V0Yy9kYnVzLTEvZXZlbnQuZC83NmF2YWhpLWRuc2NvbmZkCisKKwl3aXRob3V0IERCVVMgc3VwcG9ydDoKKwkjIHVwZGF0ZS1yYy5kIGF2YWhpLWRhZW1vbiBkZWZhdWx0cyAyNSAxNQorCSMgdXBkYXRlLXJjLmQgYXZhaGktZG5zY29uZmQgZGVmYXVsdHMgMjYgMTQKKworSWYgeW91IHBsYW4gdG8gdXNlIGF2YWhpLWF1dG9pcGQgeW91IGhhdmUgdG8gY3JlYXRlIHRoZSB1c2VyL2dyb3VwCisiYXZhaGktYXV0b2lwZCIgbXVjaCB0aGUgc2FtZSB3YXkgYXMgImF2YWhpIi4KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9kb2NzL01BTExPQyBiL2F2YWhpLTAuNi4zMS9kb2NzL01BTExPQwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzQ1MmFmCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2RvY3MvTUFMTE9DCkBAIC0wLDAgKzEsOCBAQAorQXZhaGkgc3VwcG9ydHMgcGx1Z2dhYmxlIG1lbW9yeSBhbGxvY2F0b3IgaW1wbGVtZW5hdGlvbnMuIFNlZQorPGF2YWhpLWNvbW1vbi9tYWxsb2MuaD4gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKK0N1cnJlbnRseSwgQXZhaGkgZG9lcyBub3QgZGVhbCB3ZWxsIHdpdGggb3V0LW9mLW1lbW9yeQorc2l0dWF0aW9ucy4gVGhlcmVmb3JlIHdlIHJlY29tbWVuZCB0aGUgdXNhZ2Ugb2YgbWVtb3J5IGFsbG9jYXRvcnMgdGhhdAorYWJvcnQoKSBpbiBjYXNlIG9mIE9PTS4gVGhlIGRlZmF1bHQgYWxsb2NhdG9yIHVzZWQgYnkgQXZhaGkgZG9lcyB0aGlzLgorCitFdmVudHVhbGx5IHdlIHdpbGwgaW1wcm92ZSBBdmFoaSB0byBkZWFsIHdpdGggdGhlc2UgdGhpbmdzIGJldHRlci4KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9kb2NzL05FV1MgYi9hdmFoaS0wLjYuMzEvZG9jcy9ORVdTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMDU5MTUKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvZG9jcy9ORVdTCkBAIC0wLDAgKzEsODIyIEBACitBdmFoaSAwLjYuMzEKKz09PT09PT09PT09PQorCitUaGlzIGlzIGEgYnVnZml4IHJlbGVhc2UuCisKKyAqIEZpeCBjb21wYXRpYmlsaXR5IHdpdGggbmV3ZXN0IGF1dG9jb25mCisKK1RoaXMgcmVsZWFzZSBpcyBiYWNrd2FyZHMgY29tcGF0aWJsZSB3aXRoIEF2YWhpIDAuNi54IHdpdGggeCA8IDMxLgorCitBdmFoaSAwLjYuMzAKKz09PT09PT09PT09PQorCitUaGlzIGlzIGEgYnVnZml4IHJlbGVhc2UuCisKKyAqIE1ha2UgSVB2NiB3b3JrIGFnYWluCisgKiBpMThuIHVwZGF0ZXMKKyAqIE1pbm9yIG90aGVyIHVwZGF0ZXMKKworVGhpcyByZWxlYXNlIGlzIGJhY2t3YXJkcyBjb21wYXRpYmxlIHdpdGggQXZhaGkgMC42Lnggd2l0aCB4IDwgMzAuCisKK0F2YWhpIDAuNi4yOQorPT09PT09PT09PT09CisKK1RoaXMgaXMgYSBidWdmaXggcmVsZWFzZS4KKworICogVXBkYXRlcyByZWdhcmRpbmcgc3lzdGVtZCBpbnRlZ3JhdGlvbgorICogQ29tcGF0aWJpbGl0eSB3aXRoIG5ld2VyIGd0azMgYW5kIGdvYmplY3QgaW50cm9zcGVjdGlvbgorICogaTE4biB1cGRhdGVzCisgKiBNaW5vciBvdGhlciB1cGRhdGVzCisgKiBGaXggQ1ZFLTIwMTEtMTAwMiwgZml4aW5nIHRoZSBmaXggZm9yIENWRS0yMDEwLTIyNDQKKworVGhpcyByZWxlYXNlIGlzIGJhY2t3YXJkcyBjb21wYXRpYmxlIHdpdGggQXZhaGkgMC42Lnggd2l0aCB4IDwgMjkuCisKK0F2YWhpIDAuNi4yOAorPT09PT09PT09PT09CisKK1RoaXMgaXMgYSBidWdmaXggcmVsZWFzZS4KKworICogVXBkYXRlcyByZWdhcmRpbmcgc3lzdGVtZCBpbnRlZ3JhdGlvbgorICogUHJvcGVybHkgYXZvaWQgYnVzIGFjdGl2YXRpb24gb24gbm9uLXN5c3RlbWQgc3lzdGVtcworICogQ29tcGF0aWJpbGl0eSB3aXRoIG5ld2VyIGd0azMgYW5kIGdvYmplY3QgaW50cm9zcGVjdGlvbgorICogaTE4biB1cGRhdGVzCisgKiBNaW5vciBvdGhlciB1cGRhdGVzCisKK1RoaXMgcmVsZWFzZSBpcyBiYWNrd2FyZHMgY29tcGF0aWJsZSB3aXRoIEF2YWhpIDAuNi54IHdpdGggeCA8IDI4LgorCitBdmFoaSAwLjYuMjcKKz09PT09PT09PT09PQorCitUaGlzIGlzIGEgYnVnZml4IHJlbGVhc2UuCisKKyAqIFZhcmlvdXMgdXBkYXRlcyB0byB0aGUgc3lzdGVtZCBpbnRlZ3JhdGlvbgorICogUmVzZXQgYWxsIHNpZ25hbCBoYW5kbGVycyBhbmQgdGhlIHNpZ25hbCBtYXNrIG9uIGluaXRpYWxpemF0aW9uCisgKiBEb24ndCB0cmlwIG92ZXIgU0lHUElQRQorICogaTE4biB1cGRhdGVzCisgKiBNaW5vciBvdGhlciB1cGRhdGVzCisKK1RoaXMgcmVsZWFzZSBpcyBiYWNrd2FyZHMgY29tcGF0aWJsZSB3aXRoIEF2YWhpIDAuNi54IHdpdGggeCA8IDI3LgorCitBdmFoaSAwLjYuMjYKKz09PT09PT09PT09PQorCitUaGlzIGlzIG1vc3RseSBhIGJ1Z2ZpeCByZWxlYXNlIGJ1dCBhbHNvIGZpeGVzIGEgbG93IHJpc2sgc2VjdXJpdHkgaXNzdWUgYW5kCithZGRzIGEgY291cGxlIG9mIG1pbm9yIG5ldyBmZWF0dXJlcy4KKworICogRml4IENWRS0yMDEwLTIyNDQgKEx1ZHdpZyBOdXNzZWwpCisgKiBTdXBwb3J0IGZvciBHdGsrIDMgYW5kIEd0aysgSW50cm9zcGVjdGlvbgorICogTmF0aXZlIHN5c3RlbWQgc29ja2V0IGFjdGl2YXRpb24gc3VwcG9ydAorICogQWRkIHN5c3RlbWQgc2VydmljZSBmaWxlcworICogQWRkIHZhcmlvdXMgcmVzb3VyY2UgY29udHJvbCBvcHRpb25zLCBmb3IgdHJhZmZpYyByYXRlIGxpbWl0aW5nIGFzIHdlbGwgYXMKKyAgIGNhY2hlIHNpemUgYW5kIEQtQnVzIGNsaWVudCBvYmplY3QgbGltaXRzLgorICogaTE4biB1cGRhdGVzCisgKiBNaW5vciBvdGhlciB1cGRhdGVzCisKK1RoaXMgcmVsZWFzZSBpcyBiYWNrd2FyZHMgY29tcGF0aWJsZSB3aXRoIEF2YWhpIDAuNi54IHdpdGggeCA8IDI2LgorCitBdmFoaSAwLjYuMjUKKz09PT09PT09PT09PQorCitUaGlzIGlzIG1vc3RseSBhIGJ1Z2ZpeCByZWxlYXNlIGJ1dCBhbHNvIGZpeGVzIGEgbG93IHJpc2sgc2VjdXJpdHkgaXNzdWUuCisKKyAqIEZpeCBDVkUtMjAwOS0wNzU4IChSb2IgTGVzbGllKQorICogaTE4biB1cGRhdGVzCisgKiBNaW5vciBvdGhlciB1cGRhdGVzCisKK1RoaXMgcmVsZWFzZSBpcyBiYWNrd2FyZHMgY29tcGF0aWJsZSB3aXRoIEF2YWhpIDAuNi54IHdpdGggeCA8IDI1LgorCitBdmFoaSAwLjYuMjQKKz09PT09PT09PT09PQorCitUaGlzIGlzIG1vc3RseSBhIGJ1Z2ZpeCByZWxlYXNlLgorCisgKiBBIGh1Z2UgbnVtYmVyIG9mIGJ1ZyBmaXhlcywgaW5jbHVkaW5nIGEgc2VjdXJpdHkgcmVsYXZhbnQgb25lIChsb3cKKyAgIHJpc2spCisgKiBBZGQgdHdvIG5ldyBjb25maWd1cmF0aW9uIGRpcmVjdGl2ZXMgImFsbG93LWludGVyZmFjZXMiIGFuZAorICAgImRlbnktaW50ZXJmYWNlcyIgd2hpY2ggY2FuIGJlIHVzZWQgdG8gbWFrZSBBdmFoaSBpZ25vcmUgY2VydGFpbgorICAgbmV0d29yayBpbnRlcmZhY2VzIG9yIG9ubHkgdXNlIGNlcnRhaW4gbmV0d29yayBpbnRlcmZhY2VzLgorICogQSBsb3Qgb2YgdHJhbnNsYXRpb24gdXBkYXRlcworCitUaGlzIHJlbGVhc2UgaXMgYmFja3dhcmRzIGNvbXBhdGlibGUgd2l0aCBBdmFoaSAwLjYueCB3aXRoIHggPCAyNC4KKworQXZhaGkgMC42LjIzCis9PT09PT09PT09PT0KKworVGhpcyBpcyBhbiBidWdmaXggcmVsZWFzZS4KKworICogQSBsb3Qgb2YgdHJhbnNsYXRpb24gdXBkYXRlcworICogQmVlZiB1cCBibnZjIHF1aXRlIGEgYml0LCBpbmNsdWRpbmcgcGFzc2luZyBhIGRvbWFpbiB0byBicm93c2UgaW4KKyAgIChwYXRjaCBmcm9tIGxrdW5kcmFrKQorICogSW5jcmVhc2UgbnVtZXIgb2Ygb3BlbiBmaWxlcyByZXNvdXJjZSBsaW1pdCB0byAzMDAgc28gdGhhdCB3ZSBjYW4KKyAgIGRlYWwgd2l0aCBtb3JlIGNsaWVudHMgc2ltdWx0YW5lb3VzbHkuCisgKiBSZXdvcmsgJ3Bvb2YnIGFsZ29yaXRobSBhIGJpdCB0byByZWR1Y2UgdHJhZmZpYyBsb2FkIG9uIG5vaXN5IGxpbmtzLgorICogQnVpbGQgZml4ZXMKKyAqIE1pbm9yIG90aGVyIHVwZGF0ZXMKKworVGhpcyByZWxlYXNlIGlzIGJhY2t3YXJkcyBjb21wYXRpYmxlIHdpdGggQXZhaGkgMC42Lnggd2l0aCB4IDwgMjMuCisKK1BsZWFzZSBub3RlIHRoYXQgQXZhaGkncyBTVk4gaGFzIGJlZW4gY29udmVydGVkIHRvIEdJVCBhbmQgaXMgbm93CithdmFpbGFibGUgb24gZ2l0Oi8vZ2l0LjBwb2ludGVyLmRlL2F2YWhpLgorCitBdmFoaSAwLjYuMjIKKz09PT09PT09PT09PQorCitUaGlzIGlzIGFuIGltcG9ydGFudCBidWdmaXggcmVsZWFzZSwgYW5kIGFkZHMgYSBjb3VwbGUgb2YgbmV3CitmZWF0dXJlcy4KKworICogaTE4biBzdXBwb3J0CisgKiBEb2N1bWVudGF0aW9uIGFuZCBleGFtcGxlIGNvZGUgdXBkYXRlcworICogU3VwcG9ydCBmb3IgcmVnaXN0ZXJpbmcgdGhlIEF2YWhpIGRvY3VtZW50YXRpb24gaW4gZGV2aGVscCAobmVlZHMKKyAgIG1hbnVhbCBzZXR1cCkKKyAqIEFkZGVkIGEgbmV3IGNvbXBvbmVudCBsaWJhdmFoaS1nb2JqZWN0LCB3aGljaCBpcyBhIEdPYmplY3RpZmllZAorICAgdmVyc2lvbiBvZiB0aGUgQXZhaGkgQVBJLCBjb250cmlidXRlZCBieSBTam9lcmQgU2ltb25zCisgKiBNYWpvciBCU0QgY29tcGF0aWJpbGl0eSBpbXByb3ZlbWVudHMsIGNvbnRyaWJ1dGVkIGJ5ICJ6bWwiCisgKiBhdmFoaS11aTogQWxsb3cgb3ZlcndyaXRpbmcgb2YgcHJldHR5IHNlcnZpY2UgbmFtZSBieSB0aGUKKyAgIGFwcGxpY2F0aW9uCisgKiBTZXJ2aWNlIHR5cGUgZGF0YWJhc2UgdXBkYXRlcworICogQWRkIG5ldyBvcHRpb24gLS1wYXJzYWJsZSB0byBhdmFoaS1icm93c2UKKyAqIE1pbm9yIG90aGVyIHVwZGF0ZXMKKworVGhpcyByZWxlYXNlIGlzIGJhY2t3YXJkcyBjb21wYXRpYmxlIHdpdGggQXZhaGkgMC42Lnggd2l0aCB4IDwgMjIuCisKK0F2YWhpIDAuNi4yMQorPT09PT09PT09PT09CisKK1RoaXMgaXMgYW4gaW1wb3J0YW50IGJ1Z2ZpeCByZWxlYXNlLgorCisgKiBNYWtlIGF2YWhpLWF1dG9pcGQgYWN0dWFsbHkgcHJvZHVjZSBjb3JyZWN0IEFSUCBwYWNrZXRzCisgICAoSWRlbnRpZmllZCBhbmQgcGF0Y2hlZCBieSBQYXVsaW5lIFlldW5nKQorICogQWRkIEZyZWVCU0Qga3F1ZXVlIHN1cHBvcnQgZm9yIHdhdGNoaW5nIC9ldGMvYXZhaGkvc2VydmljZXMKKyAgIChDb250cmlidXRlZCBieSBNYXJjdXMgQ2xhcmtlKQorICogVXNlIHNlYXJjaCBkb21haW4gZnJvbSAvZXRjL3Jlc29sdi5jb25mIGFzIGFkZGl0aW9uYWwgYnJvd3NlCisgICBkb21haW5zLgorICogTm8gbG9uZ2VyIHJldHVybiBhIGNvbmZsaWN0IGVycm9yIHdoZW4gdHdvIGxvY2FsIGFwcGxpY2F0aW9ucworICAgcmVnaXN0ZXIgaWRlbnRpY2FsIFJScy4KKyAqIFByb3Blcmx5IGZpbmQgYWx0ZXJuYXRpdmUgc2VydmljZS9ob3N0IG5hbWVzIGZvciB2ZXJ5IGxvbmcgbmFtZXMKKyAqIEROUyBuYW1lIGNvbXByZXNzaW9uIGZpeCAoU2pvZXJkIFNpbW9ucykKKyAqIEZlZG9yYSBpbml0IHNjcmlwdCBvcmRlciBmaXgKKyAqIFNldmVyYWwgZml4ZXMgdG8gbWFrZSBnY2MgcHJvZHVjZSBsZXNzIHdhcm5pbmdzCisgKiBNaW5vciBkb2N1bWVudGF0aW9uIGFuZCBidWlsZCBmaXhlcworCitUaGlzIHJlbGVhc2UgaXMgYmFja3dhcmRzIGNvbXBhdGlibGUgd2l0aCBBdmFoaSAwLjYueCB3aXRoIHggPCAyMS4KKworQXZhaGkgMC42LjIwCis9PT09PT09PT09PT0KKworVGhpcyBpcyBhIGJ1Z2ZpeCByZWxlYXNlIGFuZCBjb250YWlucyBhIGZpeCBmb3IgYSBsb3cgcmlzayBzZWN1cml0eQordnVsbmVyYWJpbGl0eS4KKworICogRml4IGEgbG9jYWwgRG9TIHZ1bG5lcmFiaWxpdHksIHdoZXJlIGFuIGFzc2VydCgpIGNvdWxkIGJlIGhpdCBieQorICAgcGFzc2luZyBlbXB0eSBUWFQgZGF0YSBvdmVyIEQtQnVzIHRvIHRoZSBBdmFoaSBkYWVtb24uIChMb3cgUmlzaykKKyAqIFNvbGFyaXMvZGJtIHBvcnRhYmlsaXR5IGZpeGVzCisgKiBDbG9zZSBhbGwgb3BlbiBmaWxlIGRlc2NyaXB0b3JzIHdoZW4gZGFlbW9uaXppbmcuIElzIGdlbmVyYWxseQorICAgc2FmZXIgYW5kIGZpeGVzIGEgZmV3IGlzc3VlcyB3aXRoIGJyb2tlbiBpbml0IHN5c3RlbXMgb2Ygc2V2ZXJhbAorICAgZGlzdHJpYnV0aW9ucy4KKyAqIGF2YWhpLWF1dG9pcGQ6IGFsbG93IHBhc3NpbmcgdGhlIHBhdGggb2YgdGhlIGFjdGlvbiBzY3JpcHQgb24gdGhlCisgICBjb21tYW5kIGxpbmUuCisgKiBTZXZlcmFsIG1pbm9yIGJ1aWxkIGZpeGVzIGFuZCBvdGhlciBjbGVhbnVwcworCitUaGlzIHJlbGVhc2UgaXMgYmFja3dhcmRzIGNvbXBhdGlibGUgd2l0aCBBdmFoaSAwLjYueCB3aXRoIHggPCAyMC4KKworQXZhaGkgMC42LjE5Cis9PT09PT09PT09PT0KKworVGhpcyBpcyBhIGJ1Z2ZpeCByZWxlYXNlLCBidXQgYWxzbyBhZGRzIGEgbmV3IGNvbXBvbmVudCAiYXZhaGktdWktc2hhcnAiLgorCisgKiBSZW5hbWUgenNzaC96dm5jIHRvIGJzc2gvYnZuYyB0byBhdm9pZCBhIG5hbWUgY29sbGlzaW9uIHdpdGggYW5vdGhlcgorICAgZnJlZSBzb2Z0d2FyZSB0b29sLCBvbiByZXF1ZXN0IG9mIHRoZSBEZWJpYW4gZGV2ZWxvcGVycy4gSSBob3BlCisgICB0aGlzIG5hbWUgY2hhbmdlIGVhcmx5IGluIHRoZSBsaWZlIG9mIGJzc2gvYnZuYyB3b24ndCBiZSB0b28KKyAgIGRpZmZpY3VsdCB0byBoYW5kbGUgYnkgdGhlIGRpc3RyaWJ1dG9ycy4KKyAqIEFkZCBtYW4gcGFnZSBmb3IgYnNzaC9idm5jCisgKiBhdmFoaS11aTogZml4IHNlZ2ZhdWx0IHdoZW4gYnJvd3NpbmcgaW4gZW1wdHkgZG9tYWlucworICogYXZhaGktdWk6IGFsbG93IEdUS19SRVNQT05TRV9PSywgX1lFUyBhbmQgX0FQUExZIGJlc2lkZXMgX0FDQ0VQVCBhcworICAgcG9zaXRpdmUgZGlhbG9nIHJlc3BvbnNlIGNvZGVzCisgKiBhdmFoaS11aS1zaGFycDogQWRkIE1vbm8vQyMgQVBJIHdyYXBwZXIgZm9yIGF2YWhpLXVpCisgKiBEb24ndCBwaWNrIHRoZSBmaXJzdCBhbmQgdGhlIGxhc3QgMjU2IElQIGFkZHJlc3NlcyBmcm9tIHRoZSBJUFY0TEwKKyAgIHJhbmdlIGluIGF2YWhpLWF1dG9pcGQsIGFzIHJlcXVpcmVkIGJ5IFJDMzkyNyBzZWN0aW9uIDIuMQorICogTm8gbG9uZ2VyIHB1Ymxpc2ggdGhlIEF2YWhpIHNlcnZpY2UgaWRlbnRpZmljYXRpb24gY29va2llIGFueW1vcmUKKyAgIGJ5IGRlZmF1bHQuIEl0IHdhcyBhIGJhZCBpZGVhIGluIHRoZSBmaXJzdCBwbGFjZS4gQSBiZXR0ZXIKKyAgIHJlcGxhY2VtZW50IHdpbGwgaG9wZWZ1bGx5IGJlIG1hZGUgYXZhaWxhYmxlIGluIEF2YWhpIGV2ZW50dWFsbHkuCisgKiBQcm9wZXJseSBzZXQgdW1hc2sgYmVmb3JlIHdyaXRpbmcgdG8gL3Zhci9saWIvYXZhaGktYXV0b2lwZAorICogVXBkYXRlIC5kZXNrb3AgZmlsZXMgdG8gd29yayBhcm91bmQgS0RFIG1lbnUgaXNzdWUKKyAqIFZhcmlvdXMgYnVpbGQgZml4ZXMgYW5kIG90aGVyIG1pbm9yIGZpeGVzIGFuZCB1cGRhdGVzCisKK1RoaXMgcmVsZWFzZSBpcyBiYWNrd2FyZHMgY29tcGF0aWJsZSB3aXRoIEF2YWhpIDAuNi54IHdpdGggeCA8IDE5LgorCitBdmFoaSAwLjYuMTgKKz09PT09PT09PT09PQorCitUaGlzIGlzIGEgYnVnZml4IHJlbGVhc2UsIGFkZHMgYSBmZXcgbmV3IGZlYXR1cmVzIGFuZCBpbmNsdWRlcyBhIG5ldworY29tcG9uZW50LgorCisgKiBBZGQgYSBuZXcgbGlicmFyeSBsaWJhdmFoaS11aSB3aGljaCBjb250YWlucyBhIHN0YW5kYXJkIEd0ayBkaWFsb2cKKyAgIGZvciBicm93c2luZyBmb3Igc2VydmljZXMsIGFuZCBhIG5ldyB0b29sICJ6c3NoIiB0aGF0IG1ha2VzIHVzZSBvZgorICAgaXQsIHdoaWNoIGFsbG93cyBicm93c2luZyBmb3IgU1NIIGFuZCBWTkMgc2VydmVycyBhbmQgc3RhcnRzIHNzaCBvcgorICAgeHZuY3ZpZXdlciBpZiBvbmUgaXRlbSBpcyBzZWxlY3RlZC4KKyAqIGF2YWhpLWF1dG9pcGQgaGFzIGJlZW4gcG9ydGVkIHRvIEZyZWVCU0QgKG9yaWdpbmFsIHBhdGNoIGZyb20gQnJ1Y2UgTSBTaW1wc29uKQorICogSW1wcm92ZSBPcGVuQlNELCBTb2xhcmlzLCBNYWNPUyBYIGNvbXBhdGliaWxpdHkKKyAqIExpbnV4IGlub3RpZnkgc3VwcG9ydCBmb3IgbW9uaXRvcmluZyAvZXRjL2F2YWhpL3NlcnZpY2VzLyBhbmQKKyAgIC9ldGMvYXZhaGkvaG9zdHMgZm9yIGNoYW5nZXMuIChPcmlnaW5hbCBwYXRjaCBmcm9tICJiZWhhbnciKQorICogQWRkIHRoZSBhYmlsaXR5IHRvIGR1bXAgdGhlIHNlcnZpY2UgdHlwZSBkYXRhYmFzZSBmcm9tIGF2YWhpLWJyb3dzZQorICAgd2l0aCB0aGUgbmV3IG9wdGlvbiAiLWIiLgorICogRW5hYmxlIEdDQyBzdGFjayBzbWFzaGluZyBwcm90ZWN0aW9uIGlmIGF2YWlsYWJsZSBhbmQgd29ya2luZyAoUGF0Y2ggZnJvbSB0ZWRwKQorICogSW1wcm92ZSBjb21wYXRpYmlsaXR5IHdpdGggQm9uam91cidzIGxpYmRuc19zZCAocGF0Y2ggZnJvbSBDaHJpcyBSaXZlcmEpCisgKiBWYXJpb3VzIHVwZGF0ZXMgdG8gdGhlIHNlcnZpY2UgdHlwZSBkYXRhYmFzZSAoYmFzZWQgb24gcGF0Y2hlcyBmcm9tIHV3cykKKyAqIEZpeCBhIGxvY2FsIERvUyB2dWxuZXJhYmlsaXR5ICh2ZXJ5IGxvdyBwcmlvcml0eSwgYWxsIHlvdSBjYW4gZG8gaXMKKyAgIG1ha2UgQXZhaGkgaGl0IGFuIGFzc2VydCgpKTsgcHJvYmxlbSBpZGVudGlmaWVkIGJ5ICJqYW1lc2giCisgKiBGaXggYSBwcm9ibGVtIHdoZW4gY29uc3RhbnRseSBnZW5lcmF0aW5nIGNvbmZsaWN0IGV2ZW50cyBmb3IgYW4gUlIKKyAqIEZpeCByZWdpc3RyYXRpb24gb2YgdmVyeSBsYXJnZSBSUnMgKG9yaWdpbmFsIHBhdGNoIGZyb20gU2pvZXJkIFNpbW9ucykKKyAqIFZhcmlvdXMgbWlub3IgZml4ZXMKKworVGhpcyByZWxlYXNlIGlzIGJhY2t3YXJkcyBjb21wYXRpYmxlIHdpdGggQXZhaGkgMC42Lnggd2l0aCB4IDwgMTguCisKK0F2YWhpIDAuNi4xNworPT09PT09PT09PT09CisKK1RoaXMgaXMgYSBidWdmaXggcmVsZWFzZS4KKworICogRG9uJ3QgYWNjZXB0ICJsb2NhbGhvc3QiIGFzIGEgbG9jYWwgbUROUyBob3N0IG5hbWUKKyAqIEFsbG93IHJ1bm5pbmcgYXZhaGktYm9va21hcmtzIGFzIENHSSBzY3JpcHQKKyAqIEltcHJvdmUgbGliZG5zX3NkIGNvbXBhdGliaWxpdHkKKyAqIFN0YWJpbGl0eTogbGliZG5zX3NkIG11dGV4IGxvY2tpbmcgb3JkZXIgZml4CisgKiBQdWJsaXNoIElQdjYgYWRkcmVzc2VzIHZpYSBJUHY0IGFuZCB2aWNlIHZlcnNhCisgKiBJQTY0IGZpeGVzCisgKiBBIGxvdCBvZiBtaW5vciBjbGVhbnVwcyBhbmQgZml4ZXMKKworVGhpcyByZWxlYXNlIGlzIGJhY2t3YXJkcyBjb21wYXRpYmxlIHdpdGggQXZhaGkgMC42Lnggd2l0aCB4IDwgMTcuCisKK0F2YWhpIDAuNi4xNgorPT09PT09PT09PT09CisKK1RoaXMgaXMgYSBidWdmaXggcmVsZWFzZSwgaXQgZml4ZXMgb25lIERvUyAoMTAwJSBDUFUgVXNhZ2UpIGFuZCBhIHJlZ3Jlc3Npb24KK2Zyb20gdGhlIGxhc3QgcmVsZWFzZQorCisgKiBSZXZlcnQgcHJldmlvdXMgcGF0Y2ggdG8gY2hlY2sgbmxtc2dfcGlkIGFzIGl0IGlzIGJvZ3VzIGFuZCBicmVha3MgaW4KKyAgIG1hbnkgY2FzZXMsIG5vdGFibHkgd2hlbiB1c2luZyBOZXR3b3JrTWFuYWdlciAoQ2xvc2VzOiAjNzIpCisgKiBSZXBsYWNlIHdpdGggbmV3IFNPX1BBU1NDUkVELWJhc2VkIGNoZWNrIG9mIHRoZSBzZW5kaW5nIFVJRCwgd2hpY2gKKyAgIHNlZW1zIHRvIHdvcmsgYmV0dGVyIChDbG9zZXM6ICM3MikKKyAqIEhhbmRsZSBzb21lIGVycm9ycyBpbiBsaWJkbnNfc2QgbW9yZSBncmFjZWZ1bGx5IHRoZSB3YXkgdGhlIHJlYWwKKyAgIGxpYmRuc19zZCBkb2VzIChDbG9zZXM6ICM2NCkKKyAqIEFwcGx5IGZpeCBmb3IgTGludXggMi42LjE5KyB3aGVyZSBJRkFfUlRBIC8gSUZMQV9SVEEgaXMgbm8gbG9uZ2VyCisgICBkZWZpbmVkIChDbG9zZXM6ICM4NikKKyAqIEZpeCBkb3h5Z2VuIGNvbW1lbnRzIGZvciBhdmFoaSB3YXRjaCwgdGhhbmtzIHRvIHRlZHAgKENsb3NlczogIzc3KQorICogTWFrZSBkLWJ1cyB2ZXJzaW9uIGRldGVjdGlvbiB3b3JrIGZvciA+PSAxLjAgKENsb3NlczogIzcxKQorICogRG9udCBkYnVzX2Nvbm5lY3Rpb25fY2xvc2Ugb24gc2hhcmVkIGRidXMgY29ubmVjdGlvbnMgKENsb3NlczogIzY4KQorICogRml4IHBvdGVudGlhbCBlbmRsZXNzIGxvb3AgaW4gZG5zIGxhYmVsIHVucGFja2luZyBjb2RlIChDbG9zZXM6ICM4NCkKKyAqIEZpeCBib2d1cyBhc3NlcnRpb24gaW4gY2xpZW50LXB1Ymxpc2gtc2VydmljZS5jIGV4YW1wbGUKKyAqIE1pbGQgZml4IHRvIHNvbWUgZG94eWdlbiBkb2NzIGZvciBhdmFoaS1jb21tb24vYWRkcmVzcy5oCisgKiBGaXggcGFzc2luZyBpbiBjdXN0b20gcHJpdmlsZWdlZCBncm91cCAocHJldmlvdXNseSBpZ25vcmVkIHNldHRpbmcpCisgICAoQ2xvc2VzOiAjODUpCisKK1RoaXMgcmVsZWFzZSBpcyBiYWNrd2FyZHMgY29tcGF0aWJsZSB3aXRoIEF2YWhpIDAuNi54IHdpdGggeCA8IDE2LgorCitBdmFoaSAwLjYuMTUKKz09PT09PT09PT09PQorCitUaGlzIGlzIGEgYnVnZml4IHJlbGVhc2UsIHRoaXMgYnVnIGlzIHBvdGVudGlhbGx5IHNlY3VyaXR5IHNlbnNpdGl2ZQorCisgKiBDaGVjayB0aGF0IG5ldGxpbmsgbWVzc2FnZXMgYWN0dWFsbHkgb3JpZ2luYXRlIGZyb20gdGhlIGtlcm5lbAorICAgYW5kIG5vdCBhbm90aGVyIHByb2Nlc3MuCisgKiBGaXggYnVpbGQgb24gTmV0QlNEICh0aGFua3MgdG8gRGFuaWVsIFMuIEhhaXNjaHQpCisgKiBGaXggZGJ1c19zZXJ2aWNlX2Jyb3dzZXIgbm90IHNldHRpbmcgQVZBSElfTE9PS1VQX1JFU1VMVF9PVVJfT1dOLgorCitUaGlzIHJlbGVhc2UgaXMgYmFja3dhcmRzIGNvbXBhdGlibGUgd2l0aCBBdmFoaSAwLjYueCB3aXRoIHggPCAxNS4KKworQXZhaGkgMC42LjE0Cis9PT09PT09PT09PT0KKworVGhpcyByZWxlYXNlIGZpeGVzIHNvbWUgYnVncyBhbmQgaW5jbHVkZXMgYSBuZXcgY29tcG9uZW50LgorCitDaGFuZ2VzOgorCisgICogQWRkIG5ldyBkYWVtb24gImF2YWhpLWF1dG9pcGQiIHdoaWNoIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mCisgICAgSVB2NExMIGFzIGRlZmluZWQgaW4gUkZDMzkyNywgYSB0ZWNobm9sb2d5IGZvciBhc3NpZ25pbmcgbGluay1sb2NhbCBJUAorICAgIGFkZHJlc3NlcyB3aXRob3V0IERIQ1Agc2VydmVyLiBUaGUgc2FtZSBmdW5jdGlvbmFsaXR5IGhhcyBiZWVuIGF2YWlsYWJsZSBvbgorICAgIFdpbmRvd3MgdW5kZXIgdGhlIG5hbWUgQVBJUEEuIFdoaWxlIGl0IGlzIG5vdCB0aGUgZmlyc3QgaW1wbGVtZW5hdGF0aW9uIG9mCisgICAgdGhpcyB0ZWNobm9sb2d5IGZvciBGcmVlIG9wZXJhdGluZyBzeXN0ZW1zIGl0IGlzIGNsZWFybHkgdGhlIG1vc3QgcG93ZXJmdWwKKyAgICBhbmQgaG9wZWZ1bGx5IGV2ZW4gdGhlIG1vc3Qgc2VjdXJlLiAoQmVjYXVzZSBpdCBjaHJvb3QoKXMgYW5kIGRyb3BzCisgICAgcHJpdmlsZWdlcyBhbmQgc3VjaGxpa2UpIEZvciBtb3JlIGluZm9ybWF0aW9uLCBlc3BlY2lhbGx5IGFib3V0IHBhY2thZ2luZworICAgIHRoaXMgbmV3IHRvb2wgZm9yIGRpc3RyaWJ1dGlvbnMsIHBsZWFzZSBtYWtlIHN1cmUgdG8gcmVhZDoKKyAgICBodHRwOi8vYXZhaGkub3JnL3dpa2kvQXZhaGlBdXRvaXBkCisgICAgYW5kIG9mIGNvdXJzZSB0aGUgbWFuIHBhZ2UgaW5jbHVkZWQgaW4gdGhlIHRhcmJhbGwuICBGb3IgdGhlIHJhdGlvbmFsZSBmb3IKKyAgICBhZGRpbmcgdGhpcyBwcm9ncmFtIHRvIHRoZSBBdmFoaSB0b29sc2V0IHBsZWFzZSByZWFkIHRoaXMgbWFpbGluZyBsaXN0CisgICAgdGhyZWFkOgorICAgIGh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvYXJjaGl2ZXMvYXZhaGkvMjAwNi1TZXB0ZW1iZXIvMDAwODYzLmh0bWwKKyAgKiBGaXggYSBzZWdmYXVsdCBpbiB0aGUgY29kZSBoYW5kbGluZyBzdGF0aWMgaG9zdCBuYW1lIHJlZ2lzdHJhdGlvbnMKKyAgKiBBZGQgYSBmZXcgbmV3IGVudHJpZXMgdG8gdGhlIHNlcnZpY2UgdHlwZSBkYXRhYmFzZQorICAqIHMvRC0/QlVTL0QtQnVzL2cKKyAgKiBEb2N1bWVudGF0aW9uIHVwZGF0ZXMKKyAgKiBGaXggc2VydmljZSB0eXBlIGRhdGFiYXNlIGJ1aWxkaW5nIG9uIFNvbGFyaXMKKyAgKiBNYWtlIHVzZSBvZiBuZXdlciBELUJ1cyBBUElzCisgICogRml4IHJhbmRvbSBzZWVkIGluaXRpYWxpemF0aW9uCisgICogSW5zdGFsbCBTRlRQIHN0YXRpYyBzZXJ2aWNlIGZpbGUgYnkgZGVmYXVsdAorICAqIE90aGVyIG1pbm9yIGNvZGUgY2xlYW51cHMKKworVGhpcyByZWxlYXNlIGlzIGJhY2t3YXJkcyBjb21wYXRpYmxlIHdpdGggQXZhaGkgMC42Lnggd2l0aCB4IDwgMTQuCisKK1BsZWFzZSBub3RlIHRoYXQgdGhpcyB2ZXJzaW9uIGRvZXNuJ3QgY29tcGlsZSBvbiBOZXRCU0QsIHBhdGNoZXMKK3dlbGNvbWUuCisKK1BsZWFzZSBub3RlIHRoYXQgYXZhaGktYXV0b2lwZCBpcyBhdmFpbGFibGUgb24gTGludXggb25seSBmb3IKK25vdy4gUGF0Y2hlcyB3ZWxjb21lLiBJdCBpcyByZWNvbW1lbmRlZCB0byBwYXNzIC0tZGlzYWJsZS1hdXRvaXBkIHRvCisiY29uZmlndXJlIiBvbiBub24tTGludXggb3BlcmF0aW5nIHN5c3RlbXMsIG90aGVyd2lzZSB0aGUgYnVpbGQgd2lsbAorZmFpbC4KKworQXZhaGkgMC42LjEzCis9PT09PT09PT09PT0KKworVGhpcyByZWxlYXNlIGZpeGVzIHNvbWUgYnVncyBhbmQgaW5jbHVkZXMgbWlub3IgZW5oYW5jZW1lbnRzLgorCitDaGFuZ2VzOgorICAqIEFkZCBhIG5ldyBELUJ1cyBtZXRob2QgZm9yIGNoYW5naW5nIHRoZSBtRE5TIGhvc3QgbmFtZSBkdXJpbmcKKyAgICBydW50aW1lLiBUaGlzIGZ1bmN0aW9uYWxpdHkgaXMgb25seSBhdmFpbGFibGUgdG8gbWVtYmVycyBvZiB0aGUKKyAgICBVTklYIGdyb3VwICJuZXRkZXYiLCB3aGljaCBpcyB0aGUgc2FtZSBhY2Nlc3MgZ3JvdXAgdGhhdCBpcworICAgIGVuZm9yY2VkIGJ5IEdOT01FJ3MgTmV0d29ya01hbmFnZXIgZGFlbW9uLiBTaW5jZSBOTSB3aWxsIHByb2JhYmx5CisgICAgYmUgdGhlIG1vc3QgcHJvbWluZW50IHVzZXIgb2YgdGhpcyBuZXcgbWV0aG9kLCB3ZSBkZWNpZGVkIHRvIGxpbWl0CisgICAgYWNjZXNzIHRvIHRoZSBzYW1lIGdyb3VwLiBUaGUgYWNjZXNzIGdyb3VwIGNhbiBiZSBzZXQgYnkgcGFzc2luZworICAgIC0td2l0aC1hdmFoaS1wcml2LWFjY2Vzcy1ncm91cD0gdG8gImNvbmZpZ3VyZSIuIElmIHlvdSBuZWVkIG1vcmUKKyAgICBzb3BoaXN0aWNhdGVkIGFjY2VzcyBjb250cm9sIHlvdSBjYW4gZnJlZWx5IGVkaXQKKyAgICAvZXRjL2RidXMvc3lzdGVtLmQvYXZhaGktZGJ1cy5jb25mLgorICAqIEFkZCBhIG5ldyB1dGlsaXR5ICJhdmFoaS1zZXQtaG9zdC1uYW1lIiB3aGljaCBpcyBhIGNvbW1hbmQgbGluZQorICAgIHdyYXBwZXIgYXJvdW5kIHRoZSBhZm9yZW1lbnRpb25lZCBTZXRIb3N0TmFtZSgpIG1ldGhvZC4KKyAgKiBCb25qb3VyIEFQSSBjb21wYXRpYmlsaXR5IGxpYnJhcnk6CisgICAgICAgICogSW1wbGVtZW50IEROU1NlcnZpY2VVcGRhdGVSZWNvcmQoKQorICAgICAgICAqIEFsbG93IHBhc3NpbmcgTlVMTCBhcyBjYWxsYmFjayBmdW5jdGlvbiBmb3IKKyAgICAgICAgICBETlNTZXJ2aWNlUmVnaXN0ZXIoKQorICAgICAgICAqIEltcGxlbWVudCBzdWJ0eXBlIHJlZ2lzdHJhdGlvbiBpbiBETlNTZXJ2aWNlUmVnaXN0ZXIoKSBpbiBhCisgICAgICAgICAgd2F5IHRoYXQgaXMgY29tcGF0aWJsZSB3aXRoIEJvbmpvdXIuCisJKiBVcGRhdGUgdG8gbmV3ZXIgY29weSBvZiBkbnNfc2QuaAorICAqIElmIHRoZSBob3N0IG5hbWUgY2hhbmdlcyB1cGRhdGUgbmFtZXMgb2Ygc3RhdGljIHNlcnZpY2VzIHdpY2gKKyAgICBjb250YWluIHdpbGRjYXJkcy4KKyAgKiBEb24ndCBidWlsZCBkb2N1bWVudGF0aW9uIGFib3V0IGVtYmVkZGluZyB0aGUgQXZhaGkgbUROUyBzdGFjayBpbnRvCisgICAgb3RoZXIgcHJvZ3JhbXMgYnkgZGVmYXVsdC4gVGhpcyBpcyBhIGZlYXR1cmUgdXNlZCBvbmx5IGJ5IGVtYmVkZGVkCisgICAgZGV2ZWxvcGVycy4gUGFzcyAtLWVuYWJsZS1jb3JlLWRvY3MgdG8gImNvbmZpZ3VyZSIgdG8gZW5hYmxlCisgICAgYnVpbGRpbmcgdGhlc2UgZG9jcywgbGlrZSBpbiBBdmFoaSA8PSAwLjYuMTIuCisgICogQnVpbGQgUXQgZG9jdW1lbnRhdGlvbiBvbmx5IHdoZW4gUXQgc3VwcG9ydCBpcyBlbmFibGVkIGluCisgICAgdGhlIGNvbmZpZ3VyYXRpb24uIFNhbWUgZm9yIEdMaWIuCisgICogQ2hhbmdlIGFsZ29yaXRobSB1c2VkIHRvIGZpbmQgYSBuZXcgaG9zdCBuYW1lIG9uIGNvbmZsaWN0LiBJbgorICAgIEF2YWhpIDw9IDAuNi4xMiBhIGNvbmZsaWN0aW5nIGhvc3QgbmFtZSBvZiAiZm9vYmFyIiB3b3VsZCBiZQorICAgIGNoYW5nZWQgdG8gdGhlIG5ldyBuYW1lICJmb29iYXIyIi4gV2l0aCAwLjYuMTMgImZvb2Jhci0yIiB3aWxsIGJlCisgICAgcGlja2VkIGluc3RlYWQuIFRoaXMgZm9sbG93cyBCb25qb3VyJ3MgYmVoYXZpb3VyIGFuZCBoYXMgdGhlCisgICAgYWR2YW50YWdlIG5vdCBjb25mdXNpbmcgcGVvcGxlIHdpdGggcmVndWxhciBob3N0IG5hbWVzIGVuZGluZyBpbgorICAgIGRpZ2l0cy4KKyAgKiBEb24ndCBkaXNhYmxlIGFsbCBzdGF0aWMgc2VydmljZXMgd2hlbiBTSUdIVVAgaXMgcmVjZWl2ZWQuCisgICogRml4IGJ1aWxkIHdoZW4gQXZhaGkgaXMgY29uZmlndXJlZCB3aXRob3V0IEd0aysgYnV0IHdpdGggUHl0aG9uCisgICAgc3VwcG9ydAorICAqIEZpeCBidWlsZCBvbiBNYWNPUyBYCisgICogU3VwcG9ydCB1c2luZyBTb2xhcmlzIERCTSBpbnN0ZWFkIG9mIGdkYm0gZm9yIHRoZSBzZXJ2aWNlIHR5cGUKKyAgICBkYXRhYmFzZS4gVGhlIGxhdHRlciBpcyBzdGlsbCByZWNvbW1lbmRlZAorICAqIE1pbm9yIG90aGVyIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMKKworVGhpcyByZWxlYXNlIGlzIGJhY2t3YXJkcyBjb21wYXRpYmxlIHdpdGggQXZhaGkgMC42Lnggd2l0aCB4IDwgMTMuCisKK0F2YWhpIDAuNi4xMgorPT09PT09PT09PT09CisKK1RoaXMgaXMgYSBidWdmaXggYW5kIGdlbmVyYWwgY2xlYW51cHMgcmVsZWFzZS4KKworQ2hhbmdlczoKKyAgKiBDb21wYXRpYmlsaXR5IHdpdGggbmV3ZXIgRC1CdXMgcmVsZWFzZXMgKDAuOXgpCisgICogQ29tcGF0aWJpbGl0eSB3aXRoIERCVVMgYnVpbGRzIHdpdGggLS1kaXNhYmxlLWNoZWNrcworICAqIEZpeCBhbiBlcnJvciBpbiB0aGUgREJVUyBldmVudCBsb29wIHdyYXBwaW5nIHdoaWNoCisgICAgY2F1c2VkIHRoZSBhdmFoaSBjbGllbnQgbGlicmFyaWVzIHRvIGRpc3BhdGNoIHNvbWUgZXZlbnRzCisgICAgdG9vIGxhdGUgd2hlbiB1c2VkIHdpdGggRC1CVVMgMC42MiBhbmQgbmV3ZXIuCisgICogYXZhaGktZGFlbW9uOiBmaXggYSBtaW5vciBtZW1vcnkgbGVhayBpbiB0aGUgREJVUyBjb2RlLgorICAqIGF2YWhpLWdsaWI6IHNvbWUgR0xJQiBhZGFwdGVyIGNsZWFudXBzCisgICogYXZhaGktZG5zY29uZmQ6IGZpeCBzZWdmYXVsdCB3aGVuIHBhc3NpbmcgYW4gaW52YWxpZCBjb21tYW5kCisgICAgbGluZSBvcHRpb24KKyAgKiBhdmFoaS10ZXN0OiBwb3J0YWJpbGl0eSBwYXRjaGVzIGZvciBTb2xhcmlzCisgICogYXZhaGktYnJvd3NlOiBmbHVzaCBTVERPVVQgYWZ0ZXIgZWFjaCBsaW5lLCBtYWtpbmcgaXQgdXNlZnVsCisgICAgaW4gc2hlbGwgc2NyaXB0cy4KKyAgKiB1cGRhdGUgc2VydmljZSB0eXBlIGRhdGFiYXNlCisKK1RoaXMgcmVsZWFzZSBpcyBiYWNrd2FyZHMgY29tcGF0aWJsZSB3aXRoIEF2YWhpIDAuNi54IHdpdGggeCA8IDEyLgorCitBdmFoaSAwLjYuMTEKKz09PT09PT09PT09PQorCitUaGlzIGlzIGEgYnVnZml4IGFuZCBwb3J0YWJpbGl0eSByZWxlYXNlLgorCitDaGFuZ2VzOgorICAqIFBvcnRlZCB0byBTb2xhcmlzCisgICogYXZhaGktc2hhcnA6IGZpeCBhIGZhdGFsIGVycm9yIGluIG9iamVjdCBkaXNwb3NhbCBjb2RlCisgICogYWRkIGEgZmV3IG5ldyBlbnRyaWVzIHRvIHRoZSBzZXJ2aXZjZSB0eXBlIGRhdGFiYXNlCisgICogZml4IHBvdGVudGlhbCBjcmFzaCB3aGVuIHRoZSBkYWVtb24gc2h1dHMgZG93bgorICAqIGNvbXBhdGliaWxpdHkgd2l0aCBuZXdlciBhdXRvY29uZiB2ZXJzaW9ucworCitUaGlzIHJlbGVhc2UgaXMgYmFja3dhcmRzIGNvbXBhdGlibGUgd2l0aCBBdmFoaSAwLjYsIDAuNi4xLCAwLjYuMiwKKzAuNi4zLCAwLjYuNCwgMC42LjUsIDAuNi42LCAwLjYuNywgMC42LjkgYW5kIDAuNi4xMC4KKworQXZhaGkgMC42LjEwCis9PT09PT09PT09PT0KKworVGhpcyBpcyBtb3N0bHkgYSBidWdmaXggcmVsZWFzZS4gVHdvIG9mIHRoZSBidWdzIGZpeGVkIGFyZSBzZWN1cml0eQorc2Vuc2l0aXZlOiBhIHJlbW90ZSBkZW5pYWwtb2Ytc2VydmljZSB2dWxuZXJhYmlsaXR5IGFuZCBhIGJ1ZmZlcgorb3ZlcmZsb3cgdGhhdCBjYW4gYWxsb3cgbG9jYWwgdXNlcnMgdG8gYmVjb21lIHRoZSAnYXZhaGknIHVzZXIuIFdlIGRvCitub3QgY29uc2lkZXIgZWl0aGVyIG9mIHRoZW0gbWFqb3Igc2VjdXJpdHkgdGhyZWF0cy4KKworVGhlIERvUyB2dWxuZXJhYmlsaXR5IGNhbiBiZSBleHBsb2l0ZWQgZnJvbSBhIGxvY2FsIG5ldHdvcmsgb25seS4gSXQKK2lzIG5vdCB3b3J0aCBtdWNoLCB0aG91Z2gsIHNpbmNlIG1ETlMgY2FuIGVhc2lseSBiZSBmbG9vZGVkIHdpdGgKK25vbnNlbnNlIGFueXdheS4gSXQgaXMgZWFzeSB0byBraWNrIHJlbW90ZSBtRE5TL0ROUy1TRCBzZXJ2aWNlcyBieQorcHJvdm9raW5nIGEgbmFtZSBjb25mbGljdCBpbiBwZXJmZWN0IGFjY29yZGFuY2Ugd2l0aCB0aGUgc3BlY3MuCisKK1RoZSBidWZmZXIgb3ZlcmZsb3cgaXMgaGFyZCB0byBleHBsb2l0IHJlbW90ZWx5LCBvbmx5IGxvY2FsIHVzZXJzIGNhbgorYmVjb21lIHRoZSAnYXZhaGknIHVzZXIuIEluIGFkZGl0aW9uIHRoZSB1c2VyIGlzIHRyYXBwZWQgaW5zaWRlIGEKK2Nocm9vdCgpIGVudmlyb25tZW50IChhdCBsZWFzdCBvbiBMaW51eCkuCisKK0FueWhvdywgb3VyIHNlY3VyaXR5IGFzc2Vzc21lbnRzIGFyZSBwb3NzaWJseSBhcyBidWdneSBhcyBvdXIKK2NvZGUuIEhlbmNlOgorCisgICAgICoqKiBQTEVBU0UgVVBEQVRFIFlPVVIgSU5TVEFMTEFUSU9OIEFTQVAhICoqKgorCitDaGFuZ2VzOgorICogRml4IGEgYnVmZmVyIG92ZXJmbG93IGluIGF2YWhpLWNvcmUKKyAqIFJlZnVzZSB0byBwcm9jZXNzIGludmFsaWQgVVRGOCBkYXRhCisgKiBBdXRvbWF0aWNhbGx5IHJlY29ubmVjdCB0byB0aGUgREJVUyBpZiB3ZSdyZSBraWNrZWQuIChXb3JrcyBvbmx5IGlmCisgICBjaHJvb3QoKSBpcyBkaXNhYmxlZCkKKyAqIERvbid0IGhpdCBhbiBhc3NlcnQoKSBpbiB0aGUgY2xpZW50IGxpYnMgd2hlbiB0aGUgQXZhaGkgZGFlbW9uIGlzCisgICB0ZXJtaW5hdGVkCisgKiBFbnVtZXJhdGUgYWxsIHNlcnZpY2UgdHlwZXMgaW4gdGhlIGRhdGFiYXNlIGluIHRoZSBTZXJ2aWNlCisgICBEaXNjb3ZlcnkgQXBwbGV0IGZvciBHbm9tZQorICogSW1wcm92ZSB0aGUgQm9uam91ciBjb21wYXRpYmlsaXR5IGxheWVyIHRvIG1ha2UgaXQgc3Vydml2ZQorICAgR25vbWVNZWV0aW5nJ3MgYnJva2VuIHVzYWdlCisgKiBEZWFsIHByb3Blcmx5IHdpdGggbG9jYWwgbm9uLUFTQ0lJIGhvc3RuYW1lcworICogQU1ENjQgYW5kIEZyZWVCU0QgcG9ydGFiaWxpdHkgZml4ZXMKKyAqIEZpbHRlciBkb3VibGUgRE5TIHNlcnZlciBlbnRyaWVzIGluIGF2YWhpLWRuc2NvbmZkCisgKiBGaXggYSBsb2NraW5nIGJ1ZyBpbiBhdmFoaS1zaGFycCdzIEVudHJ5R3JvdXAuQWRkU2VydmljZSgpCisgKiBQb3J0ZWQgdG8gU29sYXJpcyAoaW5jb21wbGV0ZSkKKyAqIEFkZCBfYWlycG9ydC5fdGNwIHRvIG91ciBzZXJ2aWNlIHR5cGUgZGF0YWJhc2UKKworVGhpcyByZWxlYXNlIGlzIGJhY2t3YXJkcyBjb21wYXRpYmxlIHdpdGggQXZhaGkgMC42LCAwLjYuMSwgMC42LjIsCiswLjYuMywgMC42LjQsIDAuNi41LCAwLjYuNiwgMC42LjcsIDAuNi44IGFuZCAwLjYuOS4KKworQXZhaGkgMC42LjkKKz09PT09PT09PT09CisKK1RoaXMgcmVsZWFzZSBmaXhlcyBzb21lIGJ1Z3MgYW5kIGluY2x1ZGVzIG1pbm9yIGVuaGFuY2VtZW50cy4KKworICogRG9uJ3QgYWxsb3cgcmVnaXN0cmF0aW9uIG9mIGFkZHJlc3MgcmVjb3JkcyB3aXRoIGludmFsaWQgaG9zdCBuYW1lcworICogQ2xlYW4gdXAgYXJndW1lbnQgdmFsaWRpdHkgY2hlY2tpbmcgZm9yIEF2YWhpSG9zdE5hbWVSZXNvbHZlciBhbmQKKyAgIEF2YWhpQWRkcmVzc1Jlc29sdmVyCisgKiBGaXggQXZhaGkgYnVpbGRzIHdpdGhvdXQgREJVUworCitUaGlzIHJlbGVhc2UgaXMgYmFja3dhcmRzIGNvbXBhdGlibGUgd2l0aCBBdmFoaSAwLjYsIDAuNi4xLCAwLjYuMiwKKzAuNi4zLCAwLjYuNCwgMC42LjUsIDAuNi42LCAwLjYuNyBhbmQgMC42LjguCisKK0F2YWhpIDAuNi44Cis9PT09PT09PT09PQorCitUaGlzIHJlbGVhc2UgZml4ZXMgc29tZSBidWdzIGFuZCBhZGRzIGEgZmV3IG5ldyBmZWF0dXJlcy4gVXNlcnMgb2YgMC42LjcsCitwbGVhc2UgdXBkYXRlIEFTQVAhCisKKyAqIEZpeCBicm9rZW4gcGFyc2luZyBvZiBzdGF0aWMgaG9zdHMgZmlsZQorICogSW1wcm92ZSBvdXQtb2YtdGhlLWJveCBEZWJpYW4gc3VwcG9ydAorICogQWRkIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGFsbG93IG1ETlMgb3ZlciBQT0lOVE9QT0lOVCBsaW5rcy4KKyAgIFRoaXMgaXMgYSBwb3RlbnRpYWwgc2VjdXJpdHkgaG9sZSBhbmQgWU1NVi4gU2VlIG1hbiBwYWdlIGZvciBkZXRhaWxzLgorICogQ3JlYXRlICQobG9jYWxzdGF0ZWRpcikvcnVuIG9uIGluc3RhbGxhdGlvbgorCitUaGlzIHJlbGVhc2UgaXMgYmFja3dhcmRzIGNvbXBhdGlibGUgd2l0aCBBdmFoaSAwLjYsIDAuNi4xLCAwLjYuMiwKKzAuNi4zLCAwLjYuNCwgMC42LjUsIDAuNi42IGFuZCAwLjYuNy4KKworQXZhaGkgMC42LjcKKz09PT09PT09PT09CisKK1RoaXMgcmVsZWFzZSBmaXhlcyBzb21lIGJ1Z3MgYW5kIGFkZHMgYSBmZXcgbmV3IGZlYXR1cmVzCisKKyAqIEFkZCBzdGF0aWMgaG9zdHMgbmFtZSBtYXBwaW5ncworICogV29yayBhcm91bmQga2VybmVsIGJ1Z3MgcmVnYXJkaW5nIG11bHRpY2FzdCBncm91cCBtZW1iZXJzaGlwCisgKiBpYTY0IHBvcnRhYmlsaXR5IGZpeGVzCisgKiBEb24ndCByZXF1aXJlIFgxMSB0byBydW4gYXZhaGktYm9va21hcmtzCisgKiBBUEk6IFJldHVybiBBVkFISV9FUlJfSVNfRU1QVFkgd2hlbiB0aGUgdXNlciB0cmllcyB0byBjb21taXQgYW4KKyAgIGVtcHR5IGVudHJ5IGdyb3VwLgorICogSW1wcm92ZWQgU2xhY2t3YXJlIGFuZCBGZWRvcmEgc3VwcHBvcnQKKworVGhpcyByZWxlYXNlIGlzIGJhY2t3YXJkcyBjb21wYXRpYmxlIHdpdGggQXZhaGkgMC42LCAwLjYuMSwgMC42LjIsCiswLjYuMywgMC42LjQsIDAuNi41IGFuZCAwLjYuNi4KKworQXZhaGkgMC42LjYKKz09PT09PT09PT09CisKK1RoaXMgcmVsZWFzZSBmaXhlcyBzb21lIGJ1Z3MgYW5kIGluY2x1ZGVzIHNvbWUgZG9jdW1lbnRhdGlvbiB1cGRhdGVzCisKKyAqIEFkZCBhIGJ1bmNoIG9mIG5ldyB0eXBlcyB0byB0aGUgc2VydmljZSB0eXBlIGRhdGFiYXNlCisgKiBSZXR1cm4gZXJyb3JzIG9mIGF2YWhpX2VudHJ5X2dyb3VwX2NvbW1pdCgpIHByb3Blcmx5CisgKiBNYW55IGRveHlnZW4gZG9jdW1lbnRhdGlvbiBpbXByb3ZlbWVudHMKKyAqIEZpeCBkZXN0cnVjdGlvbiBvZiBBdmFoaUVudHJ5R3JvdXAgb2JqZWN0cyB1c2luZworICAgYXZhaGlfZW50cnlfZ3JvdXBfZnJlZSgpLgorICogRG9uJ3QgYWxsb3cgY29tbWl0aW5nIG9mIGVtcHR5IGVudHJ5IGdyb3VwcworICogVXNlIGEgbGl0dGxlIGxlc3MgbWVtb3J5IGluIGF2YWhpLXF0CisgKiBEb24ndCBhY2NlcHQgZW1wdHkgVFhUIHN0cmluZ3MKKyAqIFVwZGF0ZSBleGFtcGxlICJjbGllbnQtcHVibGlzaC1zZXJ2aWNlLmMiIHRvIHNob3cgaG93IHRvIG1vZGlmeSBhbgorICAgZXhpc3Rpbmcgc2VydmljZQorCitUaGlzIHJlbGVhc2UgaXMgYmFja3dhcmRzIGNvbXBhdGlibGUgd2l0aCBBdmFoaSAwLjYsIDAuNi4xLCAwLjYuMiwKKzAuNi4zLCAwLjYuNCBhbmQgMC42LjUuCisKK0F2YWhpIDAuNi41Cis9PT09PT09PT09PQorCitUaGlzIHJlbGVhc2UgZml4ZXMgc29tZSBidWdzIGFuZCBhZGRzIGEgbmV3IEFQSSBmdW5jdGlvbi4KKworICogYXZhaGktYnJvd3NlOiBwcm9wZXJseSBzaG93IHNlcnZpY2VzIHRoYXQgYXJlIHJlbW92ZWQgZnJvbSB0aGUKKyAgIG5ldHdvcmsKKyAqIGZpeCBidWlsZCBvbiBiaS1hcmNoIHBsYXRmb3Jtcywgb24gR05VL2tGcmVlQlNELCBvbiBNSVBTIGFuZAorICAgZm9yIG5vbi1EQlVTIGJ1aWxkcworICogYWRkIG5ldyBBUEkgZnVuY3Rpb24gYXZhaGlfbnNzX3N1cHBvcnQoKSBhbmQgREJVUyBmdW5jdGlvbgorICAgSXNOU1NTdXBwb3J0QXZhaWxhYmxlKCkgd2hpY2ggbWF5IGJlIHVzZWQgdG8gZGV0ZWN0IHdoZXRoZXIKKyAgIGxpYmMncyBnZXRob3N0YnluYW1lKCkgc3VwcG9ydHMgbUROUyBkb21haW4gbmFtZXMuCisgKiBwYXRjaCBhdmFoaS1ib29rbWFya3MgdG8gbWFrZSB1c2Ugb2YKKyAgIElzTlNTU3VwcG9ydEF2YWlsYWJsZSgpLiBhdmFoaS1ib29rbWFya3Mgd2lsbCBub3cgZ2VuZXJhdGUgbGlua3MKKyAgIHdpdGggcmVhbCBob3N0bmFtZXMgaW5zdGVhZCBvZiBudW1lcmljIElQIGFkZHJlc3NlcyBpZiBtRE5TIHN1cHBvcnQKKyAgIGlzIGRldGVjdGVkIGZvciBnZXRob3N0YnluYW1lKCkuCisgKiBhZGQgaW5pdCBzY3JpcHQgZm9yIE1hbmRyaXZhIExpbnV4CisgKiBzcGVlZCB1cCBhdmFoaV9jbGllbnRfZnJlZSgpCisgKiBtYW4gcGFnZSB1cGRhdGVzCisgKiBpbnN0YWxsIG1pc3NpbmcgaGVhZGVyIHRocmVhZC13YXRjaC5oCisgKiBmaXggYXZhaGktYm9va21hcmtzIHRvIHdvcmsgd2l0aCBjZXJ0YWluIHR3aXN0ZWQgdmVyc2lvbnMKKyAqIGZpeCByZWNvcmQgdXBkYXRpbmcKKyAqIFVzZSBwa2ctY29uZmlnJ3MgUmVxdWlyZXMucHJpdmF0ZSBkaXJlY3RpdmUgd2hlcmUgaXQgbWFrZXMgc2Vuc2UKKworVGhpcyByZWxlYXNlIGlzIGJhY2t3YXJkcyBjb21wYXRpYmxlIHdpdGggQXZhaGkgMC42LCAwLjYuMSwgMC42LjIsCiswLjYuMyBhbmQgMC42LjQuCisKK0F2YWhpIDAuNi40Cis9PT09PT09PT09PQorCitUaGlzIGlzIGEgYnVnZml4IHJlbGVhc2UgYW5kIGFkZHMgYSBuZXcgZXZlbnQgbG9vcCBpbXBsZW1lbnRhdGlvbiB0bworYXZhaGktY29tbW9uJ3MgcHVibGljIGludGVyZmFjZS4KKworICogYXZhaGktY29tbW9uOiBhZGQgbmV3IEF2YWhpVGhyZWFkZWRQb29sIGV2ZW50IGxvb3AgaW1wbGVtZW50YXRpb24KKyAqIGF2YWhpLXNoYXJwOiBjb21wYXRpYmlsaXR5IHdpdGggbmV3ZXIgbW9ubyB2ZXJzaW9ucworICogYXZhaGktcHVibGlzaC1zZXJ2aWNlOiBkb24ndCBpZ25vcmUgdGhlIHBvcnQgbnVtYmVyIHNwZWNpZmllZAorICogYXZhaGktc2hhcnA6IGNvcnJlY3Qgc29tZSBmbGFncyBkZWZpbml0aW9ucworCitUaGlzIHJlbGVhc2UgaXMgYmFja3dhcmRzIGNvbXBhdGlibGUgd2l0aCBBdmFoaSAwLjYsIDAuNi4xLCAwLjYuMiBhbmQKKzAuNi4zLgorCitBIHF1aWNrIGludHJvZHVjdGlvbiBob3cgdG8gdXNlIHRoZSBuZXcgQXZhaGlUaHJlYWRlZFBvb2wgaW50ZXJmYWNlIGlzCithdmFpbGFibGUgaW4gb3VyIFdpa2k6CisKKyAgICAgICAgICBodHRwOi8vYXZhaGkub3JnL3dpa2kvUnVubmluZ0F2YWhpQ2xpZW50QXNUaHJlYWQKKworQXZhaGkgMC42LjMKKz09PT09PT09PT09CisKK1RoaXMgaXMgYSBidWdmaXggcmVsZWFzZS4gRXZlcnlvbmUgc2hvdWxkIHVwZGF0ZSBBU0FQIQorCisgKiBhdmFoaS1zaGFycDogbWFrZSBzdXJlIHRvIGFwcGVuZCBhIHRyYWlsaW5nIE5VTCBieXRlIHRvIGFsbCBDIHN0cmluZ3MKKyAqIGF2YWhpLWNvcmU6IGZpeCBhIGRvdWJsZSBmcmVlKCkgd2hpY2ggb2NjdXJzIHdoZW4gd2lkZSBhcmVhIGxvb2t1cHMgdGltZW91dAorCitUaGlzIHJlbGVhc2UgaXMgZnVsbHkgY29tcGF0aWJsZSB3aXRoIEF2YWhpIDAuNiwgMC42LjEgYW5kIDAuNi4yLgorCitBdmFoaSAwLjYuMgorPT09PT09PT09PT0KKworVGhpcyBpcyBtb3N0bHkgYSBidWdmaXggcmVsZWFzZS4KKworICogQ29tcGF0aWJpbGl0eSB3aXRoIERCVVMgMC42MCAoRnVsbCBjb21wYXRpYmlsaXR5IHdpdGggREJVUyAwLjN4IGFuZAorICAgMC41IGlzIHJldGFpbmVkKQorICogRml4IGludHJvc3BlY3Rpb24gZm9yIHNvbWUgYXV4aWxpYXJ5IERCVVMgb2JqZWN0cworICogTWlzY2VsbGFuZW91cyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMKKyAqIEltcHJvdmUgQXV0b2NvbmYgc3VwcG9ydCBmb3IgZGV0ZWN0aW5nIFBUSFJFQURTIGxpYnJhcnkKKyAqIEZpeCBhdmFoaS1wdWJsaXNoIC0taGVscAorICogV29ya2Fyb3VuZCBhIERCVVMgbGltaXRhdGlvbiB3aGljaCBtaWdodCBjYXVzZSBBdmFoaSB0byBkaWUgd2hlbiBhCisgICB1c2VyIHNlbmRzIGFuIGVtcHR5IFRYVCBlbnRyeSBvdmVyIERCVVMKKyAqIEluY3JlYXNlIG51bWJlciBvZiByZXNvbHZlci9icm93c2VyIG9iamVjdHMgYSBEQlVTIGNsaWVudCBtYXkgY3JlYXRlCisgKiBSZW1vdmUgZnByaW50ZigpIGNhbGwgaW4gYXZhaGlfY2xpZW50X25ldygpCisgKiBPdGhlciBtaW5vciBmaXhlcworCitUaGlzIHJlbGVhc2UgaXMgYm90aCB1cCBhbmQgZG93bndhcmRzIGNvbXBhdGlibGUgd2l0aCBBdmFoaSAwLjYgYW5kIDAuNi4xLgorCitBdmFoaSBub3cgaGFzIGl0cyBvd24gRG9tYWluIChodHRwOi8vYXZhaGkub3JnKSBhbmQgYSBuZXcgV2Vic2l0ZSEKKworQW5kLCBtb3N0IGltcG9ydGFudGx5LCB3ZSBub3cgaGF2ZSBhIExvZ286CisgICAgICBodHRwOi8vYXZhaGkub3JnL2Nocm9tZS9zaXRlL2F2YWhpLXRyYWMucG5nCisKK0F2YWhpIDAuNi4xCis9PT09PT09PT09PQorCitUaGlzIGlzIG1vc3RseSBhIGJ1Z2ZpeCByZWxlYXNlLgorCisgKiBGaXggYSBzZWdmYXVsdCB3aGVuIHNodXR0aW5nIGRvd24gdGhlIGRhZW1vbi4gUGxlYXNlIG5vdGUgdGhhdCB0aGlzCisgICBpc3N1ZSB3YXMgbm90IHNlY3VyaXR5IHNlbnNpdGl2ZSBpbiBhbnkgd2F5IGJ1dCBoYWQgdGhlIHVnbHkgc2lkZQorICAgZWZmZWN0IHRoYXQgdGhlIGRhZW1vbidzIFBJRCBmaWxlIHdhcyBub3QgcmVtb3ZlZCBwcm9wZXJseS4KKyAqIEFkZGVkIGluaXQgc2NyaXB0cyBmb3IgQXJjaExpbnV4IGFuZCBGcmVlQlNECisgKiBBZGQgREJVUyBBUEkgdmVyc2lvbmluZyB0aHJvdWdoIHRoZSBuZXcgbWV0aG9kIEdldEFQSVZlcnNpb24oKQorICogQnVpbGQgdGhlIEhPV0wgY29tcGF0aWJpbGl0eSBsaWJyYXJ5IGFzICJsaWJob3dsLnNvIiwgaW5zdGVhZCBvZgorICAgImxpYmF2YWhpLWNvbXBhdC1ob3dsLnNvIi4gVGhpcyB3aWxsIGhlbHAgZGlzdHJpYnV0b3JzIHRvIGVuc3VyZQorICAgZnVsbCBBUEkvQUJJIGNvbXBhdGliaWxpdHkgd2l0aCBIT1dMIG91dC1vZi10aGUtYm94LgorICogU2FtZSBmb3IgdGhlIEJvbmpvdXIgY29tcGF0aWJpbGl0eSBsaWJyYXJ5CisgKiBPdGhlciBmaXhlcworCitXZSBlbmNvdXJhZ2UgTGludXggdXNlcnMgdG8gdXBkYXRlIHRvIGxpYmRhZW1vbiAwLjEwIHNpbmNlIGxvZ2dpbmcKK2RvZXMgbm90IHdvcmsgZnJvbSBhIGNocm9vdCgpIGVudmlyb25tZW50IHdpdGggb2xkZXIgdmVyc2lvbnMuCisKK1RoaXMgcmVsZWFzZSBpcyBmdWxseSBBUEkgYW5kIEFCSSBjb21wYXRpYmxlIHdpdGggQXZhaGkgMC42LiBUaGlzIGlzCit0cnVlIGZvciBib3RoIHRoZSBDIGxpYnJhcmllcyBhbmQgdGhlIERCVVMgaW50ZXJmYWNlLgorCitQYWNrYWdlcnMgc2hvdWxkIHJlYWQgdGhlIG5ldyBkb2N1bWVudGF0aW9uIGZpbGUgZG9jL0NPTVBBVC1MQVlFUlMKK3doaWNoIGNvbnRhaW5zIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgbWFpbnRhaW5pbmcgZnVsbCBidWlsZCBzeXN0ZW0KK2NvbXBhdGliaWxpdHkgaW4gYWRkaXRpb24gdG8gQUJJL0FQSSBjb21wYXRpYmlsaXR5LgorCitBdmFoaSAwLjYsIHRoZSAiR29kZGFnIiByZWxlYXNlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAqIFN1cHBvcnQgZm9yIChyZWFkLW9ubHkpIHdpZGUgYXJlYSBzdXBwb3J0LiAoaS5lLiBETlMtU0Qgb3ZlciB1bmljYXN0IEROUykKKyAqIFBvcnRlZCB0byBGcmVlQlNELCBOZXRCU0QsIERhcndpbi9NYWNPU1ggYW5kIHRvIHNvbWUgZXh0ZW50IE9wZW5CU0QKKyAqIFBvcnRhYmlsaXR5IGZpeGVzIGZvciBBUk0gQ1BVcworICogQ29tcGF0aWJpbGl0eSBsYXllcnMgZm9yIHRoZSBIT1dMIGFuZCBCb25qb3VyIEFQSXMKKyAqIFN1cHBvcnQgZm9yIHJlZ2lzdGVyaW5nL2Jyb3dzaW5nIGFyYml0cmFyeSByZWNvcmRzCisgKiBQcm9wZXIgc3VwcG9ydCBmb3IgRE5TLVNEIHNlcnZpY2Ugc3VidHlwZXMKKyAqIE5hdGl2ZSBDIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgY2xpZW50IHV0aWxpdGllcworICogTm93IHBhc3NlcyB0aGUgQm9uam91ciBjb25mb3JtYW5jZSB0ZXN0IHN1aXRlIHdpdGhvdXQgYW55IGV4Y2VwdGlvbnMKKyAqICJQYXNzaXZlIG9ic2VydmF0aW9uIG9mIGZhaWx1cmVzIgorICogY2hyb290KCkgc3VwcG9ydAorICogTWFueSB0cmFmZmljIHJlZHVjdGlvbiBpbXByb3ZlbWVudHMKKyAqIEJ1Z2ZpeGVzLCBjbGVhbnVwcworCitUaGlzIHJlbGVhc2UgaXMgbm90IEFQSS9BQkkgY29tcGF0aWJsZSB3aXRoIEF2YWhpIDAuNS4gUGxlYXNlIHNlZQorZG9jcy9BUEktQ0hBTkdFUy0wLjYgZm9yIGEgcm91Z2ggb3ZlcnZpZXcgb3ZlciB0aGUgY2hhbmdlcy4KKworQXZhaGkgMC41LjIKKz09PT09PT09PT09CisKKyAqIEJ1ZyBmaXggcmVsZWFzZS4KKyAqIEZpeCBicm93aW5nIGluIFFUIGFwcGxpY2F0aW9ucyAod2FzIHRvdGFsbHkgYnJva2VuKQorICogTWlub3IgZG9jdW1lbnRhdGlvbiB1cGRhdGUuCisKK0F2YWhpIDAuNS4xCis9PT09PT09PT09PQorCisgKiBUaGlzIGlzIGEgYnVnIGZpeCByZWxlYXNlLCBiZWZvcmUgdGhlIGJpZyBjaGFuZ2VzIGNvbWluZyBpbiAwLjYKKyAqIEZpeCByZXBvcnRpbmcgb2YgdGhlIE5PX0RBRU1PTiBlcnJvcgorICogRml4IGNvbW1pdCB0aHJvdHRsaW5nIGFsZ29yaXRobSBmb3IgZW50cnkgZ3JvdXBzCisgKiBGaXggY291bnRpbmcgb2YgdGhlIG51bWJlciBvZiByZXNvdXJjZXMgaW4gYW4gZW50cnkgZ3JvdXAKKworQXZhaGkgMC41LCB0aGUgJ0JvbSBEaWEnIHJlbGVhc2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAqIE5ldyBNb25vIGJpbmRpbmdzLCBhbGxvd2luZyB5b3UgdG8gdXNlIEF2YWhpIGZyb20KKyAgIGFueSBDTEkgbGFuZ3VhZ2Ugc3VjaCBhcyBDIworICogQXR0ZW1wdCBhdXRvLWRldGVjdGlvbiBvZiB0aGUgRC1CVVMgc3lzdGVtIGJ1cyBhZGRyZXNzCisgKiBJbmNsdWRlIGEgJ2Nvb2tpZScgaW4gYWxsIHB1Ymxpc2hlZCByZWNvcmRzIHdoaWNoIGFsbG93cyB1cworICAgdG8gcmVsaWFibHkgZGV0ZXJtaW5lIGlmIGEgc2VydmljZSBpcyB0aGUgc2FtZSBhcyBhbm90aGVyLgorICogQWRkIEFQSSB0byBkZXRlcm1pbmUgaWYgc2VydmljZXMgYXJlIGxvY2FsCisgKiBCZXR0ZXIgc3VwcG9ydCBmb3IgdGhyZWFkaW5nIHdpdGggQXZhaGlTaW1wbGVQb2xsCisgKiBBZGQgc29tZSBuZXcgU3RyaW5nTGlzdCBmdW5jdGlvbnMgdG8gaGVscCBiaW5kaW5nIHRvIGl0IGluCisgICBvdGhlciBsYW5ndWFnZXMKKyAqIFZhcmlvdXMgYnVpbGQgYW5kIHJ1bi10aW1lIGJ1ZyBmaXhlcworCitBdmFoaSAwLjQsIHRoZSAnSHl2w6TDpCBww6RpdsOkw6QnIHJlbGVhc2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICogUmVuYW1lZCB0aGUgaW5jbHVkZSBkaXJzIGZvciB0aGUgUXQgYmluZGluZ3MgdG8gaW5jbHVkZSB0aGUKKyAgIHZlcnNpb24gbnVtYmVyLCBhcyB0aGV5IG1heSBkaXZlcmdlIGluIGZ1dHVyZS4KKyAqIEZpeCBhIGNyaXRpY2FsIGJ1ZyBpbiBhdmFoaS1kYWVtb24gdHJpZ2dlcmVkIGJ5IGNvbmZpZ3VyaW5nIGFuIGludGVyZmFjZQorICAgd2l0aCB2YXJpb3VzIERIQ1AgY2xpZW50cyB3aGVuIHlvdSBoYXZlIG5vIG90aGVyIGFjdGl2ZSBhZGRyZXNzZXMgd2hpY2gKKyAgIGNhdXNlZCBhdmFoaS1kYWVtb24gdG8gYWJvcnQuCisgKiBNb3ZlIHRvIHVzaW5nIHB5dGhvbi1nZGJtIGV4Y2x1c2l2bHkgZm9yIHRoZSBzZXJ2aWNlIHR5cGUgZGF0YWJhc2UuCisgKiBBZGQgc3VwcG9ydCBmb3IgU1VTRQorICogVmFyaW91cyBmaXhlcyB0byB0aGUgYnVpbGQgc3lzdGVtCisKK0F2YWhpIDAuMywgdGhlICdCdWVub3MgRMOtYXMnIHJlbGVhc2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgKiBOZXcgaW50ZWdyYXRpb24gbGlicmFyeSBmb3IgUVQgbWFpbi1sb29wIGFwcGxpY2F0aW9ucy4KKyAqIEZpeCBhIGNyYXNoIGluIGF2YWhpLWRuc2NvbmZkCisgKiBEb2N1bWVudGF0aW9uIFVwZGF0ZXMKKyAqIEZpeCBidWlsZGluZyB3aGVuIHlvdSBkb24ndCB3YW50IFB5dGhvbiBEQlVTIG9yIEdUSworICogYXZhaGktYm9va21hcmtzCisgICAtIEFkZCBuZXcgaGVscCBvcHRpb24KKyAgIC0gRml4IGhhbmRsaW5nIG9mIHBhdGhzIG5vdCBzdGFydGluZyB3aXRoIGEgLworICAgLSBZb3UgY2FuIG5vdyBzcGVjaWZ5IHRoZSBwb3J0IGFuZCBJUCB0byBiaW5kIHRvCisgICAtIEFkZCBvcHRpb24gdG8gZ2VuZXJhdGUgbGlua3Mgd2l0aCBob3N0bmFtZXMgaW5zdGVhZCBvZiBJUHMKKworQXZhaGkgMC4yLCB0aGUgJ0R6aWXFhCBEb2JyeScgcmVsZWFzZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAqIFVuZm9ydHVuYXRlbHkgdGhpcyByZWxlYXNlIGJyb2tlIHRoZSBBUEkvQUJJIG9mIGxpYmF2YWhpLWNsaWVudAorICAgd2l0aCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uIHJlbW92YWxzCisKKyAgIFJlbW92YWwgb2YgdGhlc2UgZnVuY3Rpb25zIG1heSBhZmZlY3QgdXNlcnMgb2YgdGhlIDAuMSBBUEkKKyAgICAtIGF2YWhpX3NlcnZpY2VfcmVzb2x2ZXJfYmxvY2soKQorCisgICBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyB3ZXJlIHNpbXBseSBmb3IgZGVidWdnaW5nIGluZm9ybWF0aW9uCisgICBhbmQgdGhlaXIgcmVtb3ZhbCBzaG91bGQgbm90IGFmZmVjdCBhbnlvbmUKKyAgICAtIGF2YWhpX2VudHJ5X2dyb3VwX2dldF9kYnVzX3BhdGgoKQorICAgIC0gYXZhaGlfZG9tYWluX2Jyb3dzZXJfZ2V0X2RidXNfcGF0aCgpCisgICAgLSBhdmFoaV9zZXJ2aWNlX3R5cGVfYnJvd3Nlcl9nZXRfZGJ1c19wYXRoKCkKKyAgICAtIGF2YWhpX3NlcnZpY2VfYnJvd3Nlcl9nZXRfZGJ1c19wYXRoKCkKKworICAgTm90ZSB0aGF0IHdoaWxlIHRoZSBsaWJhdmFoaS1jbGllbnQgQVBJIGNoYW5nZWQgc2xpZ2h0bHksIHRoZSBEQlVTCisgICBBUEkgaXRzZWxmIGhhcyBvbmx5IGhhZCBhZGRpdGlvbnMgYW5kIG5vIGV4aXN0aW5nIGRlZmluaXRpb25zCisgICBoYXZlIGNoYW5nZWQuCisKKyAqIGF2YWhpLWRhZW1vbiB3aWxsIG5vdyBpZ25vcmUgbG9jYWwgSVAgYWRkcmVzc2VzIHdpdGggdGhlICJsaW5rIiBzY29wZQorICAgdW5sZXNzIGl0IGlzIHRoZSBvbmx5IElQIGFkZHJlc3Mgb24gdGhlIGludGVyZmFjZS4KKyAqIGF2YWhpLWRhZW1vbiB3aWxsIG5vIGxvbmdlciBmYWlsIHRvIHN0YXJ0IGlmIEQtQlVTIGlzIG5vdAorICAgYXZhaWxhYmxlIChpZiBjb25maWd1cmVkIHdpdGggZW5hYmxlLWRidXM9d2FybikKKyAqIEZpeGVkIGEgcG90ZW50aWFsIGNyYXNoZXIgd2hlbiByZXNvbHZpbmcgdGhpbmdzIGluIGxpYmF2YWhpLWNvcmUuCisgKiBOZXcgZXhhbXBsZSBkZW1vbnN0cmF0aW5nIGludGVncmF0aW9uIGludG8gZ2xpYiBhcHBsaWNhdGlvbnMKKyAqIEFkZHRpb24gb2YgYSBzZXQgb2YgY29udmVuaWVuY2UgZnVuY3Rpb25zIGZvciBBdmFoaVN0cmluZ0xpc3QKKyAgIGF2YWhpX3N0cmluZ19saXN0X2ZpbmQoKQorICAgYXZhaGlfc3RyaW5nX2xpc3RfZ2V0X3BhaXIoKQorICAgYXZhaGlfc3RyaW5nX2xpc3RfYWRkX3BhaXIoKQorICAgYXZhaGlfc3RyaW5nX2xpc3RfYWRkX3BhaXJfYXJiaXRyYXJ5KCkKKyAqIEZpeGVkIGEgdHlwbyBpbiBhdmFoaS1nbGliLnBjIHRoYXQgc3RvcHBlZCBwcm9ncmFtcyB1c2luZworICAgdGhlIEdMSUIgYXBpIGZyb20gY29tcGlsaW5nIGNvcnJlY3RseQorICogQSBjcml0aWNhbCBidWcgaW4gdGhlIHJlZmxlY3RvciB3YXMgZml4ZWQgd2hlcmUgaXQgbWF5IGdvIGludG8gYQorICAgc3RhdGUgb2YgY29uc3RhbnRseSBmbG9vZGluZyBxdWVyaWVzIG91dCB0byB0aGUgbmV0d29yay4KKyAqIEludHJvZHVjZWQgbmV3IGFzeW5jaHJvbm91cyByZXNvbHZlciBBUEkKKyAqIGxpYmF2YWhpLWNsaWVudCBnYWluZWQgYW4gQVBJIGZvciByZXNvbHZpbmcgSG9zdE5hbWVzIGFuZCBBZGRyZXNzZXMKKyAgIGluIGFkZGl0aW9uIHRvIHRoZSBTZXJ2aWNlUmVzb2x2ZXIgcHJvdmlkZWQgaW4gMC4xCisgKiBBZGRlZCBzdXBwb3J0IGZvciBBcmNoIGFuZCBHZW50b28gbGludXggZGlzdHJpYnV0aW9ucy4KKyAqIEFsbG93ZWQgY29uZmlndXJhdGlvbiBvbiBub24tc3VwcG9ydGVkIGRpc3RyaWJ1dGlvbnMKKyAqIEZpeGVkIGEgY3JpdGljYWwgYnVnIHdoZXJlIHlvdSBjYW5ub3QgdXNlIG1vcmUgdGhhbiBvbmUgQXZhaGlDbGllbnQKKyAgIG9yIHVzZSBpdCBpbiBhbiBhcHBsaWNhdGlvbiBhbHJlYWR5IHVzaW5nIEQtQlVTCisgKiBGaXhlZCBhc3NlbWJseSBvZiBlbXB0eSBzdHJpbmcgbGlzdHMgdG8gUkZDIGNvbXBsaWFudCBUWFQgcmVjb3JkcworICogQWRkZWQgYSBuZXcgc2VydmljZSB0eXBlIGRlc2NyaXB0aW9uIGRhdGFiYXNlIHdpdGggaHVtYW4KKyAgIHVuZGVyc3RhbmRhYmxlIGRlc2NyaXB0aW9ucyBvZiBzZXJ2aWNlcyB3aXRoIHRyYW5zbGF0aW9ucy4KKyAqIEZpeGVkIHZhcmlvdXMgbWlub3IgbWVtb3J5IGNvcnJ1cHRpb24gYnVncworICogRml4ZWQgYW4gaXNzdWUgd2hlcmUgQXZhaGkgbWlnaHQgdGhpbmsgaXQgZW5jb3VudGVyZWQgYSBjb25mbGljdAorICAgaWYgdGhlIHByb2Nlc3Mgb3IgbWFjaGluZSBoYXMgYmVlbiBzdXNwZW5kZWQKKyAqIEZpeGVkIGNvbXBpbGF0aW9uIGFuZCBydW50aW1lIGlzc3VlcyBvbiA2NC1iaXQgZGlzdHJpYnV0aW9ucworICogLi4uCisgKiBQUk9GSVQhISEKKworQXZhaGkgMC4xLCB0aGUgIkd1dGVuIFRhZyIgcmVsZWFzZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgQXZhaGkgdGVhbSB3b3VsZCBsaWtlIHRvIGFubm91bmNlIHRoZSBpbW1lZGlhdGUgYXZhaWxhYmlsaXR5IG9mCitBdmFoaSAwLjEgIkd1dGVuIFRhZyIuCisKK0F2YWhpIGlzIGEgZnVsbHkgTEdQTCBmcmFtZXdvcmsgZm9yIE11bHRpY2FzdCBETlMgU2VydmljZSBEaXNjb3ZlcnkuCitJdCBhbGxvd3MgcHJvZ3JhbXMgdG8gcHVibGlzaCBhbmQgZGlzY292ZXIgc2VydmljZXMgYW5kIGhvc3RzCitydW5uaW5nIG9uIGEgbG9jYWwgbmV0d29yayB3aXRoIG5vIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24uICBGb3IKK2V4YW1wbGUgeW91IGNhbiBwbHVnIGludG8gYSBuZXR3b3JrIGFuZCBpbnN0YW50bHkgZmluZCBwcmludGVycyB0bworcHJpbnQgdG8sIGZpbGVzIHRvIGxvb2sgYXQgYW5kIHBlb3BsZSB0byB0YWxrIHRvLgorCitBdmFoaSBpcyBkZXNpZ25lZCB0byBiZSBjb21wYXRpYmxlIHdpdGggdGhlIG1ETlMvRE5TLVNEIHNwZWNpZmljYXRpb24KK2FuZCBib2FzdHMgdGhlIGZvbGxvd2luZyBmZWF0dXJlcworCisgKiBGdWxseSBvcGVuIHNvdXJjZSBhbmQgZnJlZWx5IGF2YWlsYWJsZSB1bmRlciB0aGUgTEdQTAorICogRnVsbCBJUHY0IGFuZCBJUHY2IHN1cHBvcnQKKyAqIEFuIGVtYmVkZGFibGUgbUROUyBzdGFjaworICogRHluYW1pYyBhZGp1c3RtZW50IHRvIG5ldHdvcmsgcmVjb25maWd1cmF0aW9uCisgKiBEYWVtb24gd2l0aCBEQlVTIEFQSSBmb3IgZGVza3RvcCBhcHBsaWNhdGlvbnMKKyAqIEMgbGlicmFyeSB0byBpbnRlcmZhY2Ugd2l0aCB0aGUgREJVUyBBUEkKKyAqIENvbXBhdGlibGUgd2l0aCBvdGhlciBtRE5TL0ROUy1TRCBpbXBsZW1lbnRhdGlvbnMgc3VjaCBhcworICAgSG93bCBhbmQgQXBwbGUgQm9uam91ciAocHJldmlvdXNseSBSZW5kZXp2b3VzKQorICogQWJpbGl0eSB0byBjb3JyZWN0bHkgInJlZmxlY3QiIG1ETlMgYmV0d2VlbiB0d28gb3IgbW9yZSBMQU4gc2VnbWVudHMKKyAqIEFiaWxpdHkgdG8gY29uZmlndXJlIEROUyBzZXJ2ZXJzIGJhc2VkIG9uIG1ETlMvRE5TLVNEIHB1Ymxpc2hlZAorICAgaW5mb3JtYXRpb24sIGEgZmVhdHVyZSB0aGF0IGlzIHZlcnkgdXNlZnVsbCBvbiBJUHY2CisgICB3aGljaCBoYXMgbm8gb3RoZXIgbWVjaGFuaXNtIGZvciB0aGlzLgorICogQ29tYmluZWQgd2l0aCBuc3MtbWRucywgYWxsb3dzIGhvc3RuYW1lIGxvb2t1cCBzdWNoIGFzCisgICAnbGFwdG9wLmxvY2FsJyB3aXRob3V0IHRoZSBjb25maWd1cmF0aW9uIG9mIGEgRE5TIHNlcnZlci4KKyAgIGh0dHA6Ly8wcG9pbnRlci5kZS9sZW5uYXJ0L3Byb2plY3RzL25zcy1tZG5zLworICogRWFzeSBpbnRlZ3JhdGlvbiBpbnRvIEdMSUIsIEdUSyBvdGhlciBtYWlubG9vcCBhcHBsaWNhdGlvbnMuCisgKiBEb2N1bWVudGF0aW9uIGFuZCBleGFtcGxlcyBvZiBib3RoIGRldmVsb3BlciBBUElzIGFuZCB1dGlsaXRpZXMuCisKK21ETlMvRE5TLVNEIGlzIHBhcnQgb2YgYSBsYXJnZXIgc2V0IG9mIHNwZWNpZmljYXRpb25zIGZvciBlYXN5Citjb25maWd1cmF0aW9uIG9mIG5ldHdvcmtpbmcga25vd24gYXMgIlplcm9Db25mIgorKGh0dHA6Ly93d3cuemVyb2NvbmYub3JnLyksIHdpdGggdGhlIGFpbSBvZiBhbGxvd2luZyB5b3UgdG8gcGx1ZyBpbnRvCithIG5ldHdvcmsgYW5kIGluc3RhbnRseSBiZSBhYmxlIHRvIGludGVyYWN0IHdpdGggaXRzIHNlcnZpY2VzLgorCitBdmFoaSB3YXMgZGVzaWduZWQgdG8gYmUgYSBmdWxseSBmcmVlIGltcGxlbWVudGF0aW9uLCBhbmQgaXMKK2F2YWlsYWJsZSB1bmRlciB0aGUgTEdQTC4gIE1hbnkgb3RoZXIgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBtRE5TL0ROUy1TRAorc3BlY2lmaWNhdGlvbiB3ZXJlIHByZXZpb3VzbHkgbm9uLWZyZWUsIHJlc3RyaWN0aW5nIHRoZWlyIHVzZSBpbiBtYW55CitwbGF0Zm9ybXMgc3VjaCBhcyB0aGUgR05PTUUgZGVza3RvcCBhbmQgbWFueSBkaXN0cmlidXRpb25zLgorCitXaGlsZSBBdmFoaSBpcyBhIDAuMSByZWxlYXNlLCB3ZSBmZWVsIGl0IGlzIGZlYXR1cmUgY29tcGxldGUgYW5kCithdmFpbGFibGUgZm9yIGltbWVkaWF0ZSB1c2UsIGRldmVsb3BlcnMgY2FuIG1ha2UgdXNlIG9mIHRoZSBBdmFoaQorY2xpZW50IGxpYnJhcnkgdG8gcHJvdmlkZSBhYm92ZSBtZW50aW9uZWQgZnVuY3Rpb25hbGl0eSBpbiB0aGVpcgorcHJvZ3JhbXMuCisKK1dlIHVuZm9ydHVuYXRlbHkgZG8gbm90IGhhdmUgYSBsb2dvIHlldCEgV2Ugd291bGQgbG92ZSBpZiBzb21lb25lCitjb3VsZCBzdWdnZXN0IGlkZWFzIGZvciBhIGxvZ28gb3IgZXZlbiBkZXNpZ24gdXMgb25lLiAgSWYgeW91IHRoaW5rCit5b3UgY2FuIGhlbHAgdXMgb3V0LCB5b3UgY2FuIGNvbnRhY3QgdXMgb24gb3VyIG1haWxpbmcgbGlzdCBvciBieQorZW1haWxpbmcgVHJlbnQgTGxveWQgb24gbGF0aGlhdEBidXIuc3QuCisKK0lmIHlvdSB3b3VsZCBsaWtlIG1vcmUgaW5mb3JtYXRpb24gb3IgaGVscCwgeW91IGNhbiBzdWJzY3JpYmUKK3RvIG91ciBtYWlsaW5nbGlzdCwgZ290bworICAgIGh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9hdmFoaQorCitZb3UgY2FuIGRvd25sb2FkIEF2YWhpIDAuMSBoZXJlCisgICAgaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvfmxlbm5hcnQvYXZhaGktMC4xLnRhci5negorCitZb3UgY2FuIGFsc28gZmluZCBvdXQgbW9yZSBpbmZvcm1hdGlvbiBmcm9tIG91ciBob21lcGFnZQorICAgIGh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL1NvZnR3YXJlL0F2YWhpCisKK1dlIHdvdWxkIGxpa2UgdG8gdGhhbmsgdGhlIGZvbGxvd2luZyBwZW9wbGUgZm9yIHRoZWlyCitjb250cmlidXRpb24gdG8gQXZhaGkgMC4xLgorICAgIExlbm5hcnQgUG9ldGVycmluZworICAgIFRyZW50IExsb3lkCisgICAgU2ViYXN0aWVuIEVzdGllbm5lCisgICAgUm9zcyBCdXJ0b24KKyAgICBUb21taSBWYWluaWthaW5lbgorICAgIEpvZSBTaGF3CisgICAgSWtrZQorICAgIFN0ZWV2CisKK0NoZWVycywKK1RoZSBBdmFoaSBUZWFtCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvZG9jcy9SRUFETUUgYi9hdmFoaS0wLjYuMzEvZG9jcy9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVkOGQxNgotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9kb2NzL1JFQURNRQpAQCAtMCwwICsxLDQ3IEBACitBdmFoaSBpcyBhIGZyZWUsIExHUEwgbUROUy9ETlMtU0QgaW1wbGVtZW50YXRpb24uCisKK0NvcHlyaWdodCAyMDA0LTIwMDkgYnkgdGhlIEF2YWhpIGRldmVsb3BlcnMuCisKKwlodHRwOi8vYXZhaGkub3JnLworCitBdmFoaSBoYXMgYSBtYWlsaW5nIGxpc3Q6CisKKwlodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vYXZhaGkKKworWW91IGhhdmUgYSBjaGFuY2UgdG8gbWVldCB0aGUgZGV2ZWxvcGVycyBvbgorCisJI2F2YWhpIG9uIGlyYy5mcmVlbm9kZS5vcmcKKworUGxlYXNlIHJlcG9ydCBidWdzIHRvIHRoZSBmcmVlZGVza3RvcC5vcmcgYnVnemlsbGE6CisKKwlodHRwOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvCisKK0F2YWhpJ3MgU1ZOIHJlcG9zaXRvcnkgaXMgZnJlZWx5IGFjY2Vzc2libGU6CisKKwlzdm4gY2hlY2tvdXQgc3ZuOi8vc3ZuLjBwb2ludGVyLmRlL2F2YWhpL3RydW5rIGF2YWhpCisKKwlodHRwOi8vMHBvaW50ZXIuZGUvY2dpLWJpbi92aWV3Y3ZzLmNnaS8/cm9vdD1hdmFoaQorCitBdmFoaSBoYXMgdGhlIGZvbGxvd2luZyByZXF1aXJlbWVudHM6CisJLSBnbGliMgorCS0gZXhwYXQKKwktIGxpYmRhZW1vbiAoaHR0cDovLzBwb2ludGVyLmRlL2xlbm5hcnQvcHJvamVjdHMvbGliZGFlbW9uLykKKwktIExpbnV4IDIuNCBvciAyLjYKKwktIERCVVMgMC4zeCAob3B0aW9uYWwsIGlmIHlvdSBkaXNhYmxlIHRoaXMsIHRoZSBkYWVtb24gaXMgbm90CisJICBhY2Nlc3NpYmxlIG92ZXIgSVBDIHRvIG90aGVyIGFwcGxpY2F0aW9ucyEpCisJLSBndGsyICsgZ2xhZGUgKG9wdGlvbmFsLCBuZWVkZWQgZm9yIGF2YWhpLWRpc2NvdmVyLXN0YW5kYWxvbmUpCisJLSBkb3h5Z2VuIChvcHRpb25hbCwgbmVlZGVkIGZvciBoZSBBUEkgZG9jdW1lbnRhdG9uKQorCS0gUHl0aG9uIDIuNCwgcHlndGsyIChvcHRpb25hbCwgbmVlZGVkIGJ5IGFsbCBjbGllbnQgdG9vbHMpCisJLSBweXRob24tdHdpc3RlZCAob3B0aW9uYWwsIG5lZWRlZCBieSBhdmFoaS1ib29rbWFya3MpCisgICAgLSB4bWx0b21hbiAoaWYgYnVpbGRpbmcgZnJvbSBTVk4gcmF0aGVyIHRoYW4gYSB0YXJiYWxsKQorICAgICAgSWYgeW91IGFyZSBub3QgdXNpbmcgZGViaWFuIG9yIHVidW50dSwgdGhlIHVwc3RyZWFtIGF1dGhvcnMgcGFnZSBoYXMKKyAgICAgIGRpc2FwcGVhcmVkLCBidXQgeW91IGNhbiBnZXQgdGhlIHNvdXJjZSBmcm9tIGRlYmlhbiBoZXJlCisgICAgICBodHRwOi8vZnRwLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wvbWFpbi94L3htbHRvbWFuL3htbHRvbWFuXzAuMy5vcmlnLnRhci5negorCitQbGVhc2UgbWFrZSBzdXJlIHRvIHJlYWQgdGhlIGN1cnJlbnRseSBhdmFpbGFibGUgZG9jdW1lbnRhdGlvbiBmb3IgYXZhaGkgYmVmb3JlCithc2tpbmcgZm9yIHN1cHBvcnQgb24gdGhlIG1haWxpbmcgbGlzdDoKKworCS0gSU5TVEFMTAorCS0gTWFuIHBhZ2VzCisJLSBIb21lcGFnZSBodHRwOi8vYXZhaGkub3JnLworCS0gTWFpbGluZyBsaXN0IGFyY2hpdmUgaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9hcmNoaXZlcy9hdmFoaS8KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9kb2NzL1RPRE8gYi9hdmFoaS0wLjYuMzEvZG9jcy9UT0RPCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5MDdlYzYKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvZG9jcy9UT0RPCkBAIC0wLDAgKzEsMTA2IEBACitsYXRlcjoKKyogYWRkIHNpbXBsaWZpY2F0aW9uIHJvdXRpbmUgZm9yIGFkZGluZyBzZXJ2aWNlcyAKKyogc3VwcG9ydCBmb3Igc3BlY2lhbCBkb21haW4gUFRSIHJlY29yZHMgYmFzZWQgb24gbG9jYWwgSVAgc3VibmV0IGFkZHJlc3MKKyogQ2hhbmdlcyByZXN1bHRpbmcgaW4gdXBkYXRlZCBSRkMgb2YgN3RoIEp1bmUgMjAwNToKKyAgKiBEZWZlciByZXNwb25zZXMgdG8gcmVwbGllcyB3aXRoIFRDIGJpdCBzZXQgYnkgNDAwLTUwMG1zZWMKKyAgKiBEZWZlciB1bmljYXN0IHJlc3BvbnNlcyB0aGUgc2FtZSB3YXkgYXMgbXVsdGljYXN0IHJlc3BvbnNlcyAKKyogRE5TU0VDIFtmZWRlcmljb10KKyogV2lkZSBhcmVhIEROUyBVcGRhdGUgW2ZlZGVyaWNvXQorKiBsb25nIGxpdmVkIHF1ZXJpZXMKKyogbGliYXZhaGktY29tcGF0LWxpYmRuc19zZDogaW1wbGVtZW50IGtETlNTZXJ2aWNlRmxhZ3NOb0F1dG9SZW5hbWUgYW5kIG1pc3NpbmcgZnVuY3Rpb25zCisqIGxpYmF2YWhpLWNvbXBhdC1ob3dsOiBpbXBsZW1lbnQgbWlzc2luZyBmdW5jdGlvbnMKKyogYWRkIEFQSSB0byBhbGxvdyB1c2VyIHRvIHRlbGwgdGhlIHNlcnZlciB0aGF0IHNvbWUgc2VydmljZSBpcyBub3QgcmVhY2hhYmxlCisKK2RvbmU6CisqIGRyb3AgZ2xpYiBmcm9tIGF2YWhpLWRhZW1vbgorKiBkb3h5Z2VuIHVwZGF0ZXMKKyogZGVhbCB3aXRoIG5vIGxvY2FsIGludGVyZmFjZQorKiBQcm9iaW5nL0NvbmZsaWN0IHJlc29sdXRpb24KKyogdW5pcXVlbmVzcworKiByZXNwZWN0IGVzY2FwaW5nIGluIG5hbWUgc2VyaWFsaXphdGlvbgorKiByZWFsbHkgc2VuZCBnb29kYnllIHBhY2tldHMKKyogcmVmcmVzaCBzdWJzY3JpYmVkIHJlY29yZHMgb25seQorKiBGTFhfRE5TX1RZUEVfQU5ZIHN1cHBvcnQKKyogS25vd24tQW5zd2VyIHN1cHByZXNzaW9uIGNsaWVudCBwYXJ0CisqIEtub3duLUFuc3dlciBzdXBwcmVzc2lvbiBzZXJ2ZXIgcGFydAorKiBtYWtlIGZseF9zZXJ2ZXJfYWRkX3RleHQoKSBhbmQgZmx4X3NlcnZlcl9hZGRfc2VydmljZSgpIHZhcmlhZGljIGZ1bmN0aW9ucworKiBuYW1lIGNvbXByZXNzaW9uCisqIHJlbW92ZSBleHByZXNzaW9uICJycnNldCIgZnJvbSBzb3VyY2UgZmlsZXMKKyogZGVmZW5kIG91ciBlbnRyaWVzIG9uIGluY29taW5nIGdvb2RieWUKKyogYWxsb3cgTlVMTCBieXRlcyBpbiBUWFQgcmVjb3JkcworKiBhZGQgZmx4X3NlcnZlcl9hZGRfc2VydmljZV9zdHJsc3QoKSBhbmQgZnJpZW5kcworKiBjaGFuZ2UgZmx4XyogdG8gYXZhaGlfKgorKiBVbmljYXN0IHJlc3BvbnNlcy9xdWVyaWVzCisqIExlZ2FjeSB1bmljYXN0CisqIG5vIGZsdXNoIGJpdCBpbiBrbm93biBhbnN3ZXIKKyogYWx3YXlzIHNldCBBQQorKiBjaGVjazogVEMgYml0IGlzIHZhbGlkIGZvciBxdWVyaWVzIE9OTFkKKyogYWRkIFNSViBhbmQgVFhUIHJlY29yZHMgcmVmZXJlbmNlZCBmcm9tIFBUUiByZWNvcmRzIGF1dG9tYXRpY2FsbHkgdG8gcGFja2V0CisqIGFkZCBBIGFuZCBBQUFBIHJlY29yZHMgcmVmZXJlbmNlZCBmcm9tIFNSViByZWNvcmRzIGF1dG9tYXRpY2FsbHkgdG8gcGFja2V0CisqIHN1cHBvcnQga25vd24gYW5zd2VyIHN1cHByZXNpb24gZm9yIGluY29taW5nIHVuaWNhc3QgcXVlcmllcworKiBjaGVjayB3ZXRoZXIgUlJzZXRzIGFyZSBzdXBwb3J0ZWQgY29ycmVjdGx5IChpLmUuIHRoYXQgYWxsIHJlY29yZHMgb2YgYW4KKyAgUlJzZXQgYXJlIHJlYWxseSBzZW50IGlmIGl0IGlzIHJlcXVlc3RlZCkgKHJmYyAyMTgxKQorKiBjYXNlIGluc2Vuc2l0dmUgY29tcGFyaXNvbgorKiBkcm9wIHJlY29yZHMgZnJvbSBjYWNoZSBvbmx5IG9uZSBzZWNvbmQgYWZ0ZXIgZmx1c2ggY2FjaGUgYml0IGVudHJ5IHdhcyByZWNlaXZlZAorKiBlaXRoZXIgc2VuZCBlbnRpcmUgUlJTRVQgb3IgZG9uJ3Qgc2V0IGZsdXNoIGNhY2hlIGJpdCEKKyogbWFudGFpbiBmbHVzaCBjYWNoZSBiaXQgY29ycmVjdGx5IGluIHBzY2hlZAorKiBSZXR1cm4gdG8gcHJvYmluZyBzdGF0ZSBvbiBjb25mbGljdAorKiByZXNwb25zZSBqb2IgZGVwZW5kZW5jaWVzCisqIGVubGFyZ2UgcGFja2V0IGluIGNhc2UgYSByZWNvcmQvcXVlcnkgaXMgdG9vIGxhcmdlIHRvIGZpdCBpbiBhIG5vcm1hbCBwYWNrZXQKKyogcmVmbGVjdG9yCisqIHRlc3QgYWdhaW5zdCBhcHBsZSB0ZXN0IHN1aXRlCisqIHNlbnNpYmxlIGxvZ2dpbmcKKyogYysrIHN1cHBvcnQKKyogZHJvcCB0cmFpbGluZyBkb3Qgb24gYXZhaGlfbm9ybWFsaXplX25hbWUoKQorKiBhZGQgZW50cnlfZ3JvdXA6OnJlc2V0KCkKKyogYWRkIGludGVybmFsIGVycm9yIGNvZGVzCisqIGZpbmlzaCBEQlVTIHN0dWZmOiBhbGxvdyBOVUwgYnl0ZXMgaW4gVFhUIHJlY29yZHMKKyogYWxsb3cgc3J2IHBvcnQgPT0gMAorKiBhdmFoaS1jbGllbnQ6CisgICAqIHNlcnZpY2UgcmVzb2x2aW5nCisgICAqIGV4YW1wbGVzCisqIHB1Ymxpc2ggSVAgYWRkcmVzc2VzIHdpdGggc2NvcGUgImxpbmsiIG9ubHksIHVubGVzcyB0aGVyIGFyZSB0aGUgb25seSBvbmUgdGhlIGludGVyZmFjZQorKiByZWxlYXNlIDAuMiEKKyogYWRkIGlkZW50aWNhbCBzZXJ2aWNlIGRldGVjdGlvbiBjb29raWUKKyogYWRkIEFQSSB0byBkZXRlY3QgaWYgYSBzZXJ2aWNlIGlzIGxvY2FsCisqIG1ha2UgQVZBSElfUFJPVE9feHh4IHdlbGwgZGVmaW5lZCBjb25zdGFudHMKKyogaWYgdHdvIGxvY2FsIGNsaWVudHMgYnJvd3NlIGZvciB0aGUgc2FtZSBSUnMsIG9ubHkgc2VuZCBvdXQgcXVlcnkgc2VyaWVzIG9uY2UKKyogaGFuZGxlIG11bHRpY2FzdC93aWRlIGFyZWEgcmVzb2x2aW5nIGZvciByZXZlcnNlIGhvc3QgbmFtZSBsb291cHMKKyogYWRkIHdpZGUgYXJlYSBzdXBwb3J0IChpLmUuIEROUy1TRCBvdmVyIHVuaWNhc3QgRE5TKSAKKyogYWRkIGEgd2F5IHRvIG5vdGlmeSB0aGUgdXNlciB0aGF0IGFsbCBjYWNoZSBlbnRyaWVzIGhhdmUgYmVlbiByZWFkIHdoZW4gYnJvd3NpbmcKKyogYWxsb3cgcmVzb2x2aW5nIG9mIHNlcnZpY2VzIHdpdGhvdXQgbmFtZQorKiBhZGQgc2V2ZXIgdmVyc2lvbiBjaGVjayB0byBhdmFoaS1jbGllbnQKKyogUGFzc2l2ZSBvYnNlcnZhdGlvbiBvZiBmYWlsdXJlcworKiBhZGQgb3B0aW9uIHRvIGRpc2FibGUgU09fUkVVU0VBRERSIHRvIGRpc2FsbG93IGJpbmRpbmcgb2YgbXVsdGlwbGUgcHJvY2Vzc2VzIHRvIHBvcnQgNTM1MworKiBhZGQgZmxhZ3MgYXJndW1lbnQgdG8gZGlzYWJsZSBjb29raWVzLXNldHRpbmcgZm9yIGxvY2FsIHNlcnZpY2VzCisqIGFkZCBBUEkgdG8gYWRkIGFkZHJlc3NlcyB3aXRob3V0IHJldmVyc2UgUFRSIHJlY29yZAorKiByZXNldCBjb21taXQgdGhyb3R0bGluZyBmb3IgZW50cnkgZ3JvdXBzIGFmdGVyIGEgd2hpbGUKKyogd3JhcCBzdWJ0eXBlIHN1cHBvcnQgZm9yIGF2YWhpLWNsaWVudAorKiBhZGQgc3VidHlwZSBicm93c2luZworKiBzcGxpdCBsaW51eCBzcGVjaWZpYyBwYXJ0cyBmcm9tIGlmYWNlLmMgCisqIGNvbnNvbGlkYXRlIGJyb3dzaW5nIGZhaWx1cmUgZXZlbnRzIGFuZCBhZGQgYW4gQVBJIHRvIHF1ZXJ5IHRoZSByZWFzb24KKyogQWRkIHNlbnNpYmxlIHJlY29yZCB1cGRhdGluZyBBUEkKKyogcmVuYW1lIEF2YWhpQW5ub3VuY2VtZW50IHRvIEF2YWhpQW5ub3VuY2VyICh0byBtYXRjaCBBdmFoaVF1ZXJpZXIpCisqIGltcGxlbWVudCBhdmFoaV9jbGllbnRfYWRkX2FkZHJlc3MKKyogcmVtb3ZlIEFWQUhJX1BVQkxJU0hfSVNfUFJPWFkKKyogcmVwbGFjZSBhdmFoaV9zZXJ2ZXJfaXNfc2VydmljZV9sb2NhbCgpIGJ5IEFWQUhJX1BVQkxJU0ggZmxhZworKiBkcm9wIHBhcnRpYWxseSBjcmVhdGVkIGNyZWF0ZWQgZW50cmllcyBvbiBmYWlsdXJlCisqIGFkZCBlcnJvciBzdGF0ZSBmb3Igc2VydmVyIGFuZCBlbnRyeSBncm91cAorKiBtYWtlIHN1cmUgdGhhdCBhbGwgbGltaXQgZGVmaW5pdGlvbnMgZW5kIHdpdGggX01BWAorKiBnZW5lcmF0ZSBsb2NhbCBDTkFNRSByZXNwb25zZXMKKyogcmVtb3ZlIGlycmVsZXZhbnQgZnVuY3Rpb25zIGZyb20gcHViaWMgcnIuaCBBUEkKKyogdW5pZnkgYXJndW1lbnQgb3JkZXIgb2YgZnVuY3Rpb25zIHJldHVybmluZyBhIHN0cmluZyBpbiBhIHVzZXIgc3VwcGxpZWQgYnVmZmVyIAorKiBhZGQgc3VwcG9ydCBmb3Igc3VidHlwZXMgaW4gc3RhdGljIHNlcnZpY2VzCisqIHdyYXAgYXZhaGlfc2VydmVyX2FkZF9yZWNvcmQoKSB2aWEgREJVUyBhbmQgaW4gYXZhaGktY2xpZW50IFtsYXRoaWF0XQorKiBhZGQgc2VydmljZSB0eXBlIGRhdGFiYXNlIHN1cHBvcnQgdG8gYXZhaGktYnJvd3NlCisqIGFkZCBkb21haW4gYnJvd3NpbmcgdG8gYXZhaGktYnJvd3NlCisqIGFsd2F5cyBzZXQgc291cmNlIGFkZHJlc3MgZm9yIG91dGdvaW5nIHBhY2tldHMKKyogYWRkIHN1cHBvcnQgZm9yIGRlZmluaW5nIGJyb3dzaW5nIGRvbWFpbnMgd2l0aCBhbiBvcHRpb24gaW4gYXZhaGktZGFlbW9uLm9uZgorKiByZXR1cm4gYW4gZXJyb3Igd2hlbiB0aGUgdXNlciB0cmllcyB0byByZWdpc3RlciBhIHNlcnZpY2UgaW4gYSBkb21haW4gIT0gLmxvY2FsLCBmb3Igbm93CisqIGludHJvZHVjZSBBVkFISV9DTElFTlRfRkFJTFVSRQorKiByZW1vdmUgb3V0Z29pbmcgcXVlcmllcyBmcm9tIHF1ZXVlIGlmIHRoZSBicm93c2Ugb2JqZWN0IHRoZXkgd2VyZSBpc3N1ZWQgZnJvbSBpcyBkZXN0cm95ZWQKKyogcGFzcyAqYWxsKiBCb25qb3VyIGNvbmZvcm1hbmNlIHRlc3RzCisqIGZpeCBweXRob24gc2NyaXB0cworKiBFeHBvc2UgQXZhaGlTUmVjb3JkQnJvd3NlciBvdmVyIEQtQlVTIGFuZCBpbXBsZW1lbnQgaW4gYXZhaGktY2xpZW50CisqIGF2YWhpLXB1Ymxpc2gtKiByZXdyaXRlcyBpbiBDLCB1cGRhdGUgbWFuIHBhZ2VzCisqIEFkZCBzdGF0aWMgaG9zdCBjb25maWd1cmF0aW9uIGxpa2Ugc3RhdGljIHNlcnZpY2VzIFtsYXRoaWF0XQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2RvY3MvYXZhaGktcG9sbC5kaWEgYi9hdmFoaS0wLjYuMzEvZG9jcy9hdmFoaS1wb2xsLmRpYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWU4MmUyCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2RvY3MvYXZhaGktcG9sbC5kaWEKQEAgLTAsMCArMSwxMDQyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGRpYTpkaWFncmFtIHhtbG5zOmRpYT0iaHR0cDovL3d3dy5seXNhdG9yLmxpdS5zZS9+YWxsYS9kaWEvIj4KKyAgPGRpYTpkaWFncmFtZGF0YT4KKyAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJiYWNrZ3JvdW5kIj4KKyAgICAgIDxkaWE6Y29sb3IgdmFsPSIjZmZmZmZmIi8+CisgICAgPC9kaWE6YXR0cmlidXRlPgorICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InBhZ2VicmVhayI+CisgICAgICA8ZGlhOmNvbG9yIHZhbD0iIzAwMDA5OSIvPgorICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJwYXBlciI+CisgICAgICA8ZGlhOmNvbXBvc2l0ZSB0eXBlPSJwYXBlciI+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im5hbWUiPgorICAgICAgICAgIDxkaWE6c3RyaW5nPiNBNCM8L2RpYTpzdHJpbmc+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0idG1hcmdpbiI+CisgICAgICAgICAgPGRpYTpyZWFsIHZhbD0iMi44MjIyMDAwNTk4OTA3NDcxIi8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iYm1hcmdpbiI+CisgICAgICAgICAgPGRpYTpyZWFsIHZhbD0iMi44MjIyMDAwNTk4OTA3NDcxIi8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ibG1hcmdpbiI+CisgICAgICAgICAgPGRpYTpyZWFsIHZhbD0iMi44MjIyMDAwNTk4OTA3NDcxIi8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0icm1hcmdpbiI+CisgICAgICAgICAgPGRpYTpyZWFsIHZhbD0iMi44MjIyMDAwNTk4OTA3NDcxIi8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iaXNfcG9ydHJhaXQiPgorICAgICAgICAgIDxkaWE6Ym9vbGVhbiB2YWw9InRydWUiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJzY2FsaW5nIj4KKyAgICAgICAgICA8ZGlhOnJlYWwgdmFsPSIxIi8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZml0dG8iPgorICAgICAgICAgIDxkaWE6Ym9vbGVhbiB2YWw9ImZhbHNlIi8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDwvZGlhOmNvbXBvc2l0ZT4KKyAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZ3JpZCI+CisgICAgICA8ZGlhOmNvbXBvc2l0ZSB0eXBlPSJncmlkIj4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0id2lkdGhfeCI+CisgICAgICAgICAgPGRpYTpyZWFsIHZhbD0iMSIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9IndpZHRoX3kiPgorICAgICAgICAgIDxkaWE6cmVhbCB2YWw9IjEiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJ2aXNpYmxlX3giPgorICAgICAgICAgIDxkaWE6aW50IHZhbD0iMSIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InZpc2libGVfeSI+CisgICAgICAgICAgPGRpYTppbnQgdmFsPSIxIi8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTpjb21wb3NpdGUgdHlwZT0iY29sb3IiLz4KKyAgICAgIDwvZGlhOmNvbXBvc2l0ZT4KKyAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iY29sb3IiPgorICAgICAgPGRpYTpjb2xvciB2YWw9IiNkOGU1ZTUiLz4KKyAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZ3VpZGVzIj4KKyAgICAgIDxkaWE6Y29tcG9zaXRlIHR5cGU9Imd1aWRlcyI+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImhndWlkZXMiLz4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0idmd1aWRlcyIvPgorICAgICAgPC9kaWE6Y29tcG9zaXRlPgorICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgPC9kaWE6ZGlhZ3JhbWRhdGE+CisgIDxkaWE6bGF5ZXIgbmFtZT0iQmFja2dyb3VuZCIgdmlzaWJsZT0idHJ1ZSI+CisgICAgPGRpYTpvYmplY3QgdHlwZT0iR2VvbWV0cmljIC0gUGVyZmVjdCBTcXVhcmUiIHZlcnNpb249IjAiIGlkPSJPMCI+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfcG9zIj4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjMzLDEwLjc4MyIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX2JiIj4KKyAgICAgICAgPGRpYTpyZWN0YW5nbGUgdmFsPSIzMi45NSwxMC43MzM7NDYuMDUsMjQuMjY2MyIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZWxlbV9jb3JuZXIiPgorICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMzMsMTAuNzgzIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbGVtX3dpZHRoIj4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMTIuOTk5OTk2MTg1Mjg4MTAxIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbGVtX2hlaWdodCI+CisgICAgICAgIDxkaWE6cmVhbCB2YWw9IjEzLjQzMzMyOTM5MTQ2NDM2OSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ibGluZV93aWR0aCI+CisgICAgICAgIDxkaWE6cmVhbCB2YWw9IjAuMTAwMDAwMDAwMDAwMDAwMDEiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImxpbmVfY29sb3VyIj4KKyAgICAgICAgPGRpYTpjb2xvciB2YWw9IiMwMDAwMDAiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImZpbGxfY29sb3VyIj4KKyAgICAgICAgPGRpYTpjb2xvciB2YWw9IiNmZmZmZmYiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InNob3dfYmFja2dyb3VuZCI+CisgICAgICAgIDxkaWE6Ym9vbGVhbiB2YWw9InRydWUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImxpbmVfc3R5bGUiPgorICAgICAgICA8ZGlhOmVudW0gdmFsPSIwIi8+CisgICAgICAgIDxkaWE6cmVhbCB2YWw9IjEiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImZsaXBfaG9yaXpvbnRhbCI+CisgICAgICAgIDxkaWE6Ym9vbGVhbiB2YWw9ImZhbHNlIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJmbGlwX3ZlcnRpY2FsIj4KKyAgICAgICAgPGRpYTpib29sZWFuIHZhbD0iZmFsc2UiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICA8L2RpYTpvYmplY3Q+CisgICAgPGRpYTpncm91cD4KKyAgICAgIDxkaWE6b2JqZWN0IHR5cGU9IlN0YW5kYXJkIC0gRWxsaXBzZSIgdmVyc2lvbj0iMCIgaWQ9Ik8xIj4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX3BvcyI+CisgICAgICAgICAgPGRpYTpwb2ludCB2YWw9IjE3LDEzIi8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX2JiIj4KKyAgICAgICAgICA8ZGlhOnJlY3RhbmdsZSB2YWw9IjE2Ljk1LDEyLjk1OzI2LjA1LDIyLjA1Ii8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZWxlbV9jb3JuZXIiPgorICAgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIxNywxMyIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVsZW1fd2lkdGgiPgorICAgICAgICAgIDxkaWE6cmVhbCB2YWw9IjkiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbGVtX2hlaWdodCI+CisgICAgICAgICAgPGRpYTpyZWFsIHZhbD0iOSIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8L2RpYTpvYmplY3Q+CisgICAgICA8ZGlhOm9iamVjdCB0eXBlPSJTdGFuZGFyZCAtIFRleHQiIHZlcnNpb249IjAiIGlkPSJPMiI+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9wb3MiPgorICAgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIyMS41LDE2LjQxNTYiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfYmIiPgorICAgICAgICAgIDxkaWE6cmVjdGFuZ2xlIHZhbD0iMTkuOSwxNS44MTU2OzIzLjEsMTkuMTY1NiIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InRleHQiPgorICAgICAgICAgIDxkaWE6Y29tcG9zaXRlIHR5cGU9InRleHQiPgorICAgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ic3RyaW5nIj4KKyAgICAgICAgICAgICAgPGRpYTpzdHJpbmc+I0EKK21haW4gbG9vcAorb2YKK3NvbWUga2luZCM8L2RpYTpzdHJpbmc+CisgICAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJmb250Ij4KKyAgICAgICAgICAgICAgPGRpYTpmb250IGZhbWlseT0ic2FucyIgc3R5bGU9IjAiIG5hbWU9IkhlbHZldGljYSIvPgorICAgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iaGVpZ2h0Ij4KKyAgICAgICAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC44MDAwMDAwMDAwMDAwMDAwNCIvPgorICAgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0icG9zIj4KKyAgICAgICAgICAgICAgPGRpYTpwb2ludCB2YWw9IjIxLjUsMTYuNDE1NiIvPgorICAgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iY29sb3IiPgorICAgICAgICAgICAgICA8ZGlhOmNvbG9yIHZhbD0iIzAwMDAwMCIvPgorICAgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iYWxpZ25tZW50Ij4KKyAgICAgICAgICAgICAgPGRpYTplbnVtIHZhbD0iMSIvPgorICAgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDwvZGlhOmNvbXBvc2l0ZT4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPC9kaWE6b2JqZWN0PgorICAgIDwvZGlhOmdyb3VwPgorICAgIDxkaWE6Z3JvdXA+CisgICAgICA8ZGlhOm9iamVjdCB0eXBlPSJHZW9tZXRyaWMgLSBQZXJmZWN0IFNxdWFyZSIgdmVyc2lvbj0iMCIgaWQ9Ik8zIj4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX3BvcyI+CisgICAgICAgICAgPGRpYTpwb2ludCB2YWw9IjE0LDE2Ii8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX2JiIj4KKyAgICAgICAgICA8ZGlhOnJlY3RhbmdsZSB2YWw9IjEzLjk1LDE1Ljk1OzE3LjA1LDE5LjE1Ii8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZWxlbV9jb3JuZXIiPgorICAgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIxNCwxNiIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVsZW1fd2lkdGgiPgorICAgICAgICAgIDxkaWE6cmVhbCB2YWw9IjIuOTk5OTkyMzcwMzcyNjQ2MSIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVsZW1faGVpZ2h0Ij4KKyAgICAgICAgICA8ZGlhOnJlYWwgdmFsPSIzLjA5OTk5MjExNjA1MTczNDMiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJsaW5lX3dpZHRoIj4KKyAgICAgICAgICA8ZGlhOnJlYWwgdmFsPSIwLjEwMDAwMDAwMDAwMDAwMDAxIi8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ibGluZV9jb2xvdXIiPgorICAgICAgICAgIDxkaWE6Y29sb3IgdmFsPSIjMDAwMDAwIi8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZmlsbF9jb2xvdXIiPgorICAgICAgICAgIDxkaWE6Y29sb3IgdmFsPSIjZmZmZmZmIi8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ic2hvd19iYWNrZ3JvdW5kIj4KKyAgICAgICAgICA8ZGlhOmJvb2xlYW4gdmFsPSJ0cnVlIi8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ibGluZV9zdHlsZSI+CisgICAgICAgICAgPGRpYTplbnVtIHZhbD0iMCIvPgorICAgICAgICAgIDxkaWE6cmVhbCB2YWw9IjEiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJmbGlwX2hvcml6b250YWwiPgorICAgICAgICAgIDxkaWE6Ym9vbGVhbiB2YWw9ImZhbHNlIi8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZmxpcF92ZXJ0aWNhbCI+CisgICAgICAgICAgPGRpYTpib29sZWFuIHZhbD0iZmFsc2UiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPC9kaWE6b2JqZWN0PgorICAgICAgPGRpYTpvYmplY3QgdHlwZT0iU3RhbmRhcmQgLSBUZXh0IiB2ZXJzaW9uPSIwIiBpZD0iTzQiPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfcG9zIj4KKyAgICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMTQuMTE2NCwxNy42NzUiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfYmIiPgorICAgICAgICAgIDxkaWE6cmVjdGFuZ2xlIHZhbD0iMTQuMTE2NCwxNy4wNzU7MTYuODE2NCwxOC4wMjUiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJ0ZXh0Ij4KKyAgICAgICAgICA8ZGlhOmNvbXBvc2l0ZSB0eXBlPSJ0ZXh0Ij4KKyAgICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InN0cmluZyI+CisgICAgICAgICAgICAgIDxkaWE6c3RyaW5nPiNBdmFoaVBvbGwjPC9kaWE6c3RyaW5nPgorICAgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZm9udCI+CisgICAgICAgICAgICAgIDxkaWE6Zm9udCBmYW1pbHk9InNhbnMiIHN0eWxlPSIwIiBuYW1lPSJIZWx2ZXRpY2EiLz4KKyAgICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImhlaWdodCI+CisgICAgICAgICAgICAgIDxkaWE6cmVhbCB2YWw9IjAuODAwMDAwMDAwMDAwMDAwMDQiLz4KKyAgICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InBvcyI+CisgICAgICAgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIxNC4xMTY0LDE3LjY3NSIvPgorICAgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iY29sb3IiPgorICAgICAgICAgICAgICA8ZGlhOmNvbG9yIHZhbD0iIzAwMDAwMCIvPgorICAgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iYWxpZ25tZW50Ij4KKyAgICAgICAgICAgICAgPGRpYTplbnVtIHZhbD0iMCIvPgorICAgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDwvZGlhOmNvbXBvc2l0ZT4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPC9kaWE6b2JqZWN0PgorICAgIDwvZGlhOmdyb3VwPgorICAgIDxkaWE6Z3JvdXA+CisgICAgICA8ZGlhOm9iamVjdCB0eXBlPSJHZW9tZXRyaWMgLSBQZXJmZWN0IFNxdWFyZSIgdmVyc2lvbj0iMCIgaWQ9Ik81Ij4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX3BvcyI+CisgICAgICAgICAgPGRpYTpwb2ludCB2YWw9IjIwLDEwIi8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX2JiIj4KKyAgICAgICAgICA8ZGlhOnJlY3RhbmdsZSB2YWw9IjE5Ljk1LDkuOTU7MjMuMDUsMTMuMTUiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbGVtX2Nvcm5lciI+CisgICAgICAgICAgPGRpYTpwb2ludCB2YWw9IjIwLDEwIi8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZWxlbV93aWR0aCI+CisgICAgICAgICAgPGRpYTpyZWFsIHZhbD0iMi45OTk5OTIzNzAzNzI2NDYxIi8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZWxlbV9oZWlnaHQiPgorICAgICAgICAgIDxkaWE6cmVhbCB2YWw9IjMuMDk5OTkyMTE2MDUxNzM0MyIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImxpbmVfd2lkdGgiPgorICAgICAgICAgIDxkaWE6cmVhbCB2YWw9IjAuMTAwMDAwMDAwMDAwMDAwMDEiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJsaW5lX2NvbG91ciI+CisgICAgICAgICAgPGRpYTpjb2xvciB2YWw9IiMwMDAwMDAiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJmaWxsX2NvbG91ciI+CisgICAgICAgICAgPGRpYTpjb2xvciB2YWw9IiNmZmZmZmYiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJzaG93X2JhY2tncm91bmQiPgorICAgICAgICAgIDxkaWE6Ym9vbGVhbiB2YWw9InRydWUiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJsaW5lX3N0eWxlIj4KKyAgICAgICAgICA8ZGlhOmVudW0gdmFsPSIwIi8+CisgICAgICAgICAgPGRpYTpyZWFsIHZhbD0iMSIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImZsaXBfaG9yaXpvbnRhbCI+CisgICAgICAgICAgPGRpYTpib29sZWFuIHZhbD0iZmFsc2UiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJmbGlwX3ZlcnRpY2FsIj4KKyAgICAgICAgICA8ZGlhOmJvb2xlYW4gdmFsPSJmYWxzZSIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8L2RpYTpvYmplY3Q+CisgICAgICA8ZGlhOm9iamVjdCB0eXBlPSJTdGFuZGFyZCAtIFRleHQiIHZlcnNpb249IjAiIGlkPSJPNiI+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9wb3MiPgorICAgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIyMC4xMTY0LDExLjY3NSIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9iYiI+CisgICAgICAgICAgPGRpYTpyZWN0YW5nbGUgdmFsPSIyMC4xMTY0LDExLjA3NTsyMi44MTY0LDEyLjAyNSIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InRleHQiPgorICAgICAgICAgIDxkaWE6Y29tcG9zaXRlIHR5cGU9InRleHQiPgorICAgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ic3RyaW5nIj4KKyAgICAgICAgICAgICAgPGRpYTpzdHJpbmc+I0F2YWhpUG9sbCM8L2RpYTpzdHJpbmc+CisgICAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJmb250Ij4KKyAgICAgICAgICAgICAgPGRpYTpmb250IGZhbWlseT0ic2FucyIgc3R5bGU9IjAiIG5hbWU9IkhlbHZldGljYSIvPgorICAgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iaGVpZ2h0Ij4KKyAgICAgICAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC44MDAwMDAwMDAwMDAwMDAwNCIvPgorICAgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0icG9zIj4KKyAgICAgICAgICAgICAgPGRpYTpwb2ludCB2YWw9IjIwLjExNjQsMTEuNjc1Ii8+CisgICAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJjb2xvciI+CisgICAgICAgICAgICAgIDxkaWE6Y29sb3IgdmFsPSIjMDAwMDAwIi8+CisgICAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJhbGlnbm1lbnQiPgorICAgICAgICAgICAgICA8ZGlhOmVudW0gdmFsPSIwIi8+CisgICAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgPC9kaWE6Y29tcG9zaXRlPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8L2RpYTpvYmplY3Q+CisgICAgPC9kaWE6Z3JvdXA+CisgICAgPGRpYTpncm91cD4KKyAgICAgIDxkaWE6b2JqZWN0IHR5cGU9Ikdlb21ldHJpYyAtIFBlcmZlY3QgU3F1YXJlIiB2ZXJzaW9uPSIwIiBpZD0iTzciPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfcG9zIj4KKyAgICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMjYsMTYiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfYmIiPgorICAgICAgICAgIDxkaWE6cmVjdGFuZ2xlIHZhbD0iMjUuOTUsMTUuOTU7MjkuMDUsMTkuMTUiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbGVtX2Nvcm5lciI+CisgICAgICAgICAgPGRpYTpwb2ludCB2YWw9IjI2LDE2Ii8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZWxlbV93aWR0aCI+CisgICAgICAgICAgPGRpYTpyZWFsIHZhbD0iMi45OTk5OTIzNzAzNzI2NDYxIi8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZWxlbV9oZWlnaHQiPgorICAgICAgICAgIDxkaWE6cmVhbCB2YWw9IjMuMDk5OTkyMTE2MDUxNzM0MyIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImxpbmVfd2lkdGgiPgorICAgICAgICAgIDxkaWE6cmVhbCB2YWw9IjAuMTAwMDAwMDAwMDAwMDAwMDEiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJsaW5lX2NvbG91ciI+CisgICAgICAgICAgPGRpYTpjb2xvciB2YWw9IiMwMDAwMDAiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJmaWxsX2NvbG91ciI+CisgICAgICAgICAgPGRpYTpjb2xvciB2YWw9IiNmZmZmZmYiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJzaG93X2JhY2tncm91bmQiPgorICAgICAgICAgIDxkaWE6Ym9vbGVhbiB2YWw9InRydWUiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJsaW5lX3N0eWxlIj4KKyAgICAgICAgICA8ZGlhOmVudW0gdmFsPSIwIi8+CisgICAgICAgICAgPGRpYTpyZWFsIHZhbD0iMSIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImZsaXBfaG9yaXpvbnRhbCI+CisgICAgICAgICAgPGRpYTpib29sZWFuIHZhbD0iZmFsc2UiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJmbGlwX3ZlcnRpY2FsIj4KKyAgICAgICAgICA8ZGlhOmJvb2xlYW4gdmFsPSJmYWxzZSIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8L2RpYTpvYmplY3Q+CisgICAgICA8ZGlhOm9iamVjdCB0eXBlPSJTdGFuZGFyZCAtIFRleHQiIHZlcnNpb249IjAiIGlkPSJPOCI+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9wb3MiPgorICAgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIyNi4xMTY0LDE3LjY3NSIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9iYiI+CisgICAgICAgICAgPGRpYTpyZWN0YW5nbGUgdmFsPSIyNi4xMTY0LDE3LjA3NTsyOC44MTY0LDE4LjAyNSIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InRleHQiPgorICAgICAgICAgIDxkaWE6Y29tcG9zaXRlIHR5cGU9InRleHQiPgorICAgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ic3RyaW5nIj4KKyAgICAgICAgICAgICAgPGRpYTpzdHJpbmc+I0F2YWhpUG9sbCM8L2RpYTpzdHJpbmc+CisgICAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJmb250Ij4KKyAgICAgICAgICAgICAgPGRpYTpmb250IGZhbWlseT0ic2FucyIgc3R5bGU9IjAiIG5hbWU9IkhlbHZldGljYSIvPgorICAgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iaGVpZ2h0Ij4KKyAgICAgICAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC44MDAwMDAwMDAwMDAwMDAwNCIvPgorICAgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0icG9zIj4KKyAgICAgICAgICAgICAgPGRpYTpwb2ludCB2YWw9IjI2LjExNjQsMTcuNjc1Ii8+CisgICAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJjb2xvciI+CisgICAgICAgICAgICAgIDxkaWE6Y29sb3IgdmFsPSIjMDAwMDAwIi8+CisgICAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJhbGlnbm1lbnQiPgorICAgICAgICAgICAgICA8ZGlhOmVudW0gdmFsPSIwIi8+CisgICAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgPC9kaWE6Y29tcG9zaXRlPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8L2RpYTpvYmplY3Q+CisgICAgPC9kaWE6Z3JvdXA+CisgICAgPGRpYTpncm91cD4KKyAgICAgIDxkaWE6b2JqZWN0IHR5cGU9Ikdlb21ldHJpYyAtIFBlcmZlY3QgU3F1YXJlIiB2ZXJzaW9uPSIwIiBpZD0iTzkiPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfcG9zIj4KKyAgICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMzMsMTQiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfYmIiPgorICAgICAgICAgIDxkaWE6cmVjdGFuZ2xlIHZhbD0iMzIuOTUsMTMuOTU7MzkuODI0MiwyMS4wNSIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVsZW1fY29ybmVyIj4KKyAgICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMzMsMTQiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbGVtX3dpZHRoIj4KKyAgICAgICAgICA8ZGlhOnJlYWwgdmFsPSI2Ljc3NDE3ODc5NjIzNzYyNjEiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbGVtX2hlaWdodCI+CisgICAgICAgICAgPGRpYTpyZWFsIHZhbD0iNi45OTk5ODQ3NTYxMTIyMTI0Ii8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ibGluZV93aWR0aCI+CisgICAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC4xMDAwMDAwMDAwMDAwMDAwMSIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImxpbmVfY29sb3VyIj4KKyAgICAgICAgICA8ZGlhOmNvbG9yIHZhbD0iIzAwMDAwMCIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImZpbGxfY29sb3VyIj4KKyAgICAgICAgICA8ZGlhOmNvbG9yIHZhbD0iI2ZmZmZmZiIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InNob3dfYmFja2dyb3VuZCI+CisgICAgICAgICAgPGRpYTpib29sZWFuIHZhbD0idHJ1ZSIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImxpbmVfc3R5bGUiPgorICAgICAgICAgIDxkaWE6ZW51bSB2YWw9IjAiLz4KKyAgICAgICAgICA8ZGlhOnJlYWwgdmFsPSIxIi8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZmxpcF9ob3Jpem9udGFsIj4KKyAgICAgICAgICA8ZGlhOmJvb2xlYW4gdmFsPSJmYWxzZSIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImZsaXBfdmVydGljYWwiPgorICAgICAgICAgIDxkaWE6Ym9vbGVhbiB2YWw9ImZhbHNlIi8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDwvZGlhOm9iamVjdD4KKyAgICAgIDxkaWE6b2JqZWN0IHR5cGU9IlN0YW5kYXJkIC0gVGV4dCIgdmVyc2lvbj0iMCIgaWQ9Ik8xMCI+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9wb3MiPgorICAgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIzMy41MzcxLDE3LjYyNSIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9iYiI+CisgICAgICAgICAgPGRpYTpyZWN0YW5nbGUgdmFsPSIzMy41MzcxLDE3LjAyNTszOS4yMzcxLDE3Ljk3NSIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InRleHQiPgorICAgICAgICAgIDxkaWE6Y29tcG9zaXRlIHR5cGU9InRleHQiPgorICAgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ic3RyaW5nIj4KKyAgICAgICAgICAgICAgPGRpYTpzdHJpbmc+I0F2YWhpREJ1c0FkYXB0ZXIjPC9kaWE6c3RyaW5nPgorICAgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZm9udCI+CisgICAgICAgICAgICAgIDxkaWE6Zm9udCBmYW1pbHk9InNhbnMiIHN0eWxlPSIwIiBuYW1lPSJIZWx2ZXRpY2EiLz4KKyAgICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImhlaWdodCI+CisgICAgICAgICAgICAgIDxkaWE6cmVhbCB2YWw9IjAuODAwMDAwMDAwMDAwMDAwMDQiLz4KKyAgICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InBvcyI+CisgICAgICAgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIzMy41MzcxLDE3LjYyNSIvPgorICAgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iY29sb3IiPgorICAgICAgICAgICAgICA8ZGlhOmNvbG9yIHZhbD0iIzAwMDAwMCIvPgorICAgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iYWxpZ25tZW50Ij4KKyAgICAgICAgICAgICAgPGRpYTplbnVtIHZhbD0iMCIvPgorICAgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDwvZGlhOmNvbXBvc2l0ZT4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPC9kaWE6b2JqZWN0PgorICAgIDwvZGlhOmdyb3VwPgorICAgIDxkaWE6Z3JvdXA+CisgICAgICA8ZGlhOm9iamVjdCB0eXBlPSJTdGFuZGFyZCAtIEFyYyIgdmVyc2lvbj0iMCIgaWQ9Ik8xMSI+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9wb3MiPgorICAgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIyOSwxNy41NSIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9iYiI+CisgICAgICAgICAgPGRpYTpyZWN0YW5nbGUgdmFsPSIyOC45NDk0LDE2Ljk5OTQ7MzMuMDU2MiwxOC41NzUxIi8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iY29ubl9lbmRwb2ludHMiPgorICAgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIyOSwxNy41NSIvPgorICAgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIzMywxNy41Ii8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iY3VydmVfZGlzdGFuY2UiPgorICAgICAgICAgIDxkaWE6cmVhbCB2YWw9IjEiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbmRfYXJyb3ciPgorICAgICAgICAgIDxkaWE6ZW51bSB2YWw9IjIyIi8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZW5kX2Fycm93X2xlbmd0aCI+CisgICAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC41Ii8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZW5kX2Fycm93X3dpZHRoIj4KKyAgICAgICAgICA8ZGlhOnJlYWwgdmFsPSIwLjUiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPC9kaWE6b2JqZWN0PgorICAgICAgPGRpYTpvYmplY3QgdHlwZT0iU3RhbmRhcmQgLSBBcmMiIHZlcnNpb249IjAiIGlkPSJPMTIiPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfcG9zIj4KKyAgICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMzMsMTcuNSIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9iYiI+CisgICAgICAgICAgPGRpYTpyZWN0YW5nbGUgdmFsPSIyOC45NDM3LDE2LjQ3NDk7MzMuMDUwNiwxOC4wNTA2Ii8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iY29ubl9lbmRwb2ludHMiPgorICAgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIzMywxNy41Ii8+CisgICAgICAgICAgPGRpYTpwb2ludCB2YWw9IjI5LDE3LjU1Ii8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iY3VydmVfZGlzdGFuY2UiPgorICAgICAgICAgIDxkaWE6cmVhbCB2YWw9IjEiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbmRfYXJyb3ciPgorICAgICAgICAgIDxkaWE6ZW51bSB2YWw9IjIyIi8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZW5kX2Fycm93X2xlbmd0aCI+CisgICAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC41Ii8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZW5kX2Fycm93X3dpZHRoIj4KKyAgICAgICAgICA8ZGlhOnJlYWwgdmFsPSIwLjUiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPC9kaWE6b2JqZWN0PgorICAgIDwvZGlhOmdyb3VwPgorICAgIDxkaWE6Z3JvdXA+CisgICAgICA8ZGlhOm9iamVjdCB0eXBlPSJTdGFuZGFyZCAtIEFyYyIgdmVyc2lvbj0iMCIgaWQ9Ik8xMyI+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9wb3MiPgorICAgICAgICAgIDxkaWE6cG9pbnQgdmFsPSI5LjkzMjMxLDE3LjU4MTciLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfYmIiPgorICAgICAgICAgIDxkaWE6cmVjdGFuZ2xlIHZhbD0iOS44ODE5MiwxNy4wNDk2OzE0LjA1MzksMTguNjE1OSIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImNvbm5fZW5kcG9pbnRzIj4KKyAgICAgICAgICA8ZGlhOnBvaW50IHZhbD0iOS45MzIzMSwxNy41ODE3Ii8+CisgICAgICAgICAgPGRpYTpwb2ludCB2YWw9IjE0LDE3LjU1Ii8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iYXJjX2NvbG9yIj4KKyAgICAgICAgICA8ZGlhOmNvbG9yIHZhbD0iIzdmN2Y3ZiIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImN1cnZlX2Rpc3RhbmNlIj4KKyAgICAgICAgICA8ZGlhOnJlYWwgdmFsPSIxIi8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZW5kX2Fycm93Ij4KKyAgICAgICAgICA8ZGlhOmVudW0gdmFsPSIyMiIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVuZF9hcnJvd19sZW5ndGgiPgorICAgICAgICAgIDxkaWE6cmVhbCB2YWw9IjAuNSIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVuZF9hcnJvd193aWR0aCI+CisgICAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC41Ii8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDwvZGlhOm9iamVjdD4KKyAgICAgIDxkaWE6b2JqZWN0IHR5cGU9IlN0YW5kYXJkIC0gQXJjIiB2ZXJzaW9uPSIwIiBpZD0iTzE0Ij4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX3BvcyI+CisgICAgICAgICAgPGRpYTpwb2ludCB2YWw9IjE0LDE3LjU1Ii8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX2JiIj4KKyAgICAgICAgICA8ZGlhOnJlY3RhbmdsZSB2YWw9IjkuODc4NDEsMTYuNTE1ODsxNC4wNTA0LDE4LjA4MjEiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJjb25uX2VuZHBvaW50cyI+CisgICAgICAgICAgPGRpYTpwb2ludCB2YWw9IjE0LDE3LjU1Ii8+CisgICAgICAgICAgPGRpYTpwb2ludCB2YWw9IjkuOTMyMzEsMTcuNTgxNyIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImFyY19jb2xvciI+CisgICAgICAgICAgPGRpYTpjb2xvciB2YWw9IiM3ZjdmN2YiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJjdXJ2ZV9kaXN0YW5jZSI+CisgICAgICAgICAgPGRpYTpyZWFsIHZhbD0iMSIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVuZF9hcnJvdyI+CisgICAgICAgICAgPGRpYTplbnVtIHZhbD0iMjIiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbmRfYXJyb3dfbGVuZ3RoIj4KKyAgICAgICAgICA8ZGlhOnJlYWwgdmFsPSIwLjUiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbmRfYXJyb3dfd2lkdGgiPgorICAgICAgICAgIDxkaWE6cmVhbCB2YWw9IjAuNSIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8L2RpYTpvYmplY3Q+CisgICAgPC9kaWE6Z3JvdXA+CisgICAgPGRpYTpncm91cD4KKyAgICAgIDxkaWE6b2JqZWN0IHR5cGU9Ikdlb21ldHJpYyAtIFBlcmZlY3QgU3F1YXJlIiB2ZXJzaW9uPSIwIiBpZD0iTzE1Ij4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX3BvcyI+CisgICAgICAgICAgPGRpYTpwb2ludCB2YWw9IjMsMTQiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfYmIiPgorICAgICAgICAgIDxkaWE6cmVjdGFuZ2xlIHZhbD0iMi45NSwxMy45NTs5Ljk4MjMxLDIxLjIxMzQiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbGVtX2Nvcm5lciI+CisgICAgICAgICAgPGRpYTpwb2ludCB2YWw9IjMsMTQiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbGVtX3dpZHRoIj4KKyAgICAgICAgICA8ZGlhOnJlYWwgdmFsPSI2LjkzMjMwNzYxMzEzNzM5MDQiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbGVtX2hlaWdodCI+CisgICAgICAgICAgPGRpYTpyZWFsIHZhbD0iNy4xNjMzODQ1MzM1NzUzMDI4Ii8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ibGluZV93aWR0aCI+CisgICAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC4xMDAwMDAwMDAwMDAwMDAwMSIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImxpbmVfY29sb3VyIj4KKyAgICAgICAgICA8ZGlhOmNvbG9yIHZhbD0iI2JmYmZiZiIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImZpbGxfY29sb3VyIj4KKyAgICAgICAgICA8ZGlhOmNvbG9yIHZhbD0iI2ZmZmZmZiIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InNob3dfYmFja2dyb3VuZCI+CisgICAgICAgICAgPGRpYTpib29sZWFuIHZhbD0idHJ1ZSIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImxpbmVfc3R5bGUiPgorICAgICAgICAgIDxkaWE6ZW51bSB2YWw9IjAiLz4KKyAgICAgICAgICA8ZGlhOnJlYWwgdmFsPSIxIi8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZmxpcF9ob3Jpem9udGFsIj4KKyAgICAgICAgICA8ZGlhOmJvb2xlYW4gdmFsPSJmYWxzZSIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImZsaXBfdmVydGljYWwiPgorICAgICAgICAgIDxkaWE6Ym9vbGVhbiB2YWw9ImZhbHNlIi8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDwvZGlhOm9iamVjdD4KKyAgICAgIDxkaWE6b2JqZWN0IHR5cGU9IlN0YW5kYXJkIC0gVGV4dCIgdmVyc2lvbj0iMCIgaWQ9Ik8xNiI+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9wb3MiPgorICAgICAgICAgIDxkaWE6cG9pbnQgdmFsPSI2LjQ1Njc4LDE3LjMwNjciLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfYmIiPgorICAgICAgICAgIDxkaWE6cmVjdGFuZ2xlIHZhbD0iNC41MzE3OCwxNi43MDY3OzguMzgxNzgsMTguNDU2NyIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InRleHQiPgorICAgICAgICAgIDxkaWE6Y29tcG9zaXRlIHR5cGU9InRleHQiPgorICAgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ic3RyaW5nIj4KKyAgICAgICAgICAgICAgPGRpYTpzdHJpbmc+I1NvbWUgb3RoZXIgCitjb25zdW1lciM8L2RpYTpzdHJpbmc+CisgICAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJmb250Ij4KKyAgICAgICAgICAgICAgPGRpYTpmb250IGZhbWlseT0ic2FucyIgc3R5bGU9IjAiIG5hbWU9IkhlbHZldGljYSIvPgorICAgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iaGVpZ2h0Ij4KKyAgICAgICAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC44MDAwMDAwMDAwMDAwMDAwNCIvPgorICAgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0icG9zIj4KKyAgICAgICAgICAgICAgPGRpYTpwb2ludCB2YWw9IjYuNDU2NzgsMTcuMzA2NyIvPgorICAgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iY29sb3IiPgorICAgICAgICAgICAgICA8ZGlhOmNvbG9yIHZhbD0iIzdmN2Y3ZiIvPgorICAgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iYWxpZ25tZW50Ij4KKyAgICAgICAgICAgICAgPGRpYTplbnVtIHZhbD0iMSIvPgorICAgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDwvZGlhOmNvbXBvc2l0ZT4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPC9kaWE6b2JqZWN0PgorICAgIDwvZGlhOmdyb3VwPgorICAgIDxkaWE6Z3JvdXA+CisgICAgICA8ZGlhOm9iamVjdCB0eXBlPSJHZW9tZXRyaWMgLSBQZXJmZWN0IFNxdWFyZSIgdmVyc2lvbj0iMCIgaWQ9Ik8xNyI+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9wb3MiPgorICAgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIxOC4wNzk1LC0xIi8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX2JiIj4KKyAgICAgICAgICA8ZGlhOnJlY3RhbmdsZSB2YWw9IjE4LjAyOTUsLTEuMDU7MjQuOTAyOCw2LjA0OTAzIi8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZWxlbV9jb3JuZXIiPgorICAgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIxOC4wNzk1LC0xIi8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZWxlbV93aWR0aCI+CisgICAgICAgICAgPGRpYTpyZWFsIHZhbD0iNi43NzMyNTMzMTMxNjE1NTA0Ii8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZWxlbV9oZWlnaHQiPgorICAgICAgICAgIDxkaWE6cmVhbCB2YWw9IjYuOTk5MDI4NDIzNjAwMjY3OCIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImxpbmVfd2lkdGgiPgorICAgICAgICAgIDxkaWE6cmVhbCB2YWw9IjAuMTAwMDAwMDAwMDAwMDAwMDEiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJsaW5lX2NvbG91ciI+CisgICAgICAgICAgPGRpYTpjb2xvciB2YWw9IiM3ZjdmN2YiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJmaWxsX2NvbG91ciI+CisgICAgICAgICAgPGRpYTpjb2xvciB2YWw9IiNmZmZmZmYiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJzaG93X2JhY2tncm91bmQiPgorICAgICAgICAgIDxkaWE6Ym9vbGVhbiB2YWw9InRydWUiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJsaW5lX3N0eWxlIj4KKyAgICAgICAgICA8ZGlhOmVudW0gdmFsPSIwIi8+CisgICAgICAgICAgPGRpYTpyZWFsIHZhbD0iMSIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImZsaXBfaG9yaXpvbnRhbCI+CisgICAgICAgICAgPGRpYTpib29sZWFuIHZhbD0iZmFsc2UiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJmbGlwX3ZlcnRpY2FsIj4KKyAgICAgICAgICA8ZGlhOmJvb2xlYW4gdmFsPSJmYWxzZSIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8L2RpYTpvYmplY3Q+CisgICAgICA8ZGlhOm9iamVjdCB0eXBlPSJTdGFuZGFyZCAtIFRleHQiIHZlcnNpb249IjAiIGlkPSJPMTgiPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfcG9zIj4KKyAgICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMjEuNDU2OCwyLjMwNjY5Ii8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX2JiIj4KKyAgICAgICAgICA8ZGlhOnJlY3RhbmdsZSB2YWw9IjE5LjUzMTgsMS43MDY2OTsyMy4zODE4LDMuNDU2NjkiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJ0ZXh0Ij4KKyAgICAgICAgICA8ZGlhOmNvbXBvc2l0ZSB0eXBlPSJ0ZXh0Ij4KKyAgICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InN0cmluZyI+CisgICAgICAgICAgICAgIDxkaWE6c3RyaW5nPiNTb21lIG90aGVyIAorY29uc3VtZXIjPC9kaWE6c3RyaW5nPgorICAgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZm9udCI+CisgICAgICAgICAgICAgIDxkaWE6Zm9udCBmYW1pbHk9InNhbnMiIHN0eWxlPSIwIiBuYW1lPSJIZWx2ZXRpY2EiLz4KKyAgICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImhlaWdodCI+CisgICAgICAgICAgICAgIDxkaWE6cmVhbCB2YWw9IjAuODAwMDAwMDAwMDAwMDAwMDQiLz4KKyAgICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InBvcyI+CisgICAgICAgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIyMS40NTY4LDIuMzA2NjkiLz4KKyAgICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImNvbG9yIj4KKyAgICAgICAgICAgICAgPGRpYTpjb2xvciB2YWw9IiM3ZjdmN2YiLz4KKyAgICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImFsaWdubWVudCI+CisgICAgICAgICAgICAgIDxkaWE6ZW51bSB2YWw9IjEiLz4KKyAgICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8L2RpYTpjb21wb3NpdGU+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDwvZGlhOm9iamVjdD4KKyAgICA8L2RpYTpncm91cD4KKyAgICA8ZGlhOmdyb3VwPgorICAgICAgPGRpYTpvYmplY3QgdHlwZT0iU3RhbmRhcmQgLSBBcmMiIHZlcnNpb249IjAiIGlkPSJPMTkiPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfcG9zIj4KKyAgICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMjEuNDY2Miw1Ljk5OTAzIi8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX2JiIj4KKyAgICAgICAgICA8ZGlhOnJlY3RhbmdsZSB2YWw9IjIwLjQzMyw1Ljk0ODYxOzIyLjAwMDQsMTAuMDU0MiIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImNvbm5fZW5kcG9pbnRzIj4KKyAgICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMjEuNDY2Miw1Ljk5OTAzIi8+CisgICAgICAgICAgPGRpYTpwb2ludCB2YWw9IjIxLjUsMTAiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJhcmNfY29sb3IiPgorICAgICAgICAgIDxkaWE6Y29sb3IgdmFsPSIjN2Y3ZjdmIi8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iY3VydmVfZGlzdGFuY2UiPgorICAgICAgICAgIDxkaWE6cmVhbCB2YWw9IjAuOTk5OTk5OTk5OTk5OTk5MjIiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbmRfYXJyb3ciPgorICAgICAgICAgIDxkaWE6ZW51bSB2YWw9IjIyIi8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZW5kX2Fycm93X2xlbmd0aCI+CisgICAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC41Ii8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZW5kX2Fycm93X3dpZHRoIj4KKyAgICAgICAgICA8ZGlhOnJlYWwgdmFsPSIwLjUiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPC9kaWE6b2JqZWN0PgorICAgICAgPGRpYTpvYmplY3QgdHlwZT0iU3RhbmRhcmQgLSBBcmMiIHZlcnNpb249IjAiIGlkPSJPMjAiPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfcG9zIj4KKyAgICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMjEuNSwxMCIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9iYiI+CisgICAgICAgICAgPGRpYTpyZWN0YW5nbGUgdmFsPSIyMC45NjU3LDUuOTQ0ODsyMi41MzMxLDEwLjA1MDQiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJjb25uX2VuZHBvaW50cyI+CisgICAgICAgICAgPGRpYTpwb2ludCB2YWw9IjIxLjUsMTAiLz4KKyAgICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMjEuNDY2Miw1Ljk5OTAzIi8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iYXJjX2NvbG9yIj4KKyAgICAgICAgICA8ZGlhOmNvbG9yIHZhbD0iIzdmN2Y3ZiIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImN1cnZlX2Rpc3RhbmNlIj4KKyAgICAgICAgICA8ZGlhOnJlYWwgdmFsPSIxIi8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZW5kX2Fycm93Ij4KKyAgICAgICAgICA8ZGlhOmVudW0gdmFsPSIyMiIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVuZF9hcnJvd19sZW5ndGgiPgorICAgICAgICAgIDxkaWE6cmVhbCB2YWw9IjAuNSIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVuZF9hcnJvd193aWR0aCI+CisgICAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC41Ii8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDwvZGlhOm9iamVjdD4KKyAgICA8L2RpYTpncm91cD4KKyAgICA8ZGlhOmdyb3VwPgorICAgICAgPGRpYTpvYmplY3QgdHlwZT0iR2VvbWV0cmljIC0gUGVyZmVjdCBTcXVhcmUiIHZlcnNpb249IjAiIGlkPSJPMjEiPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfcG9zIj4KKyAgICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMjAsMjIiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfYmIiPgorICAgICAgICAgIDxkaWE6cmVjdGFuZ2xlIHZhbD0iMTkuOTUsMjEuOTU7MjMuMDUsMjUuMTUiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbGVtX2Nvcm5lciI+CisgICAgICAgICAgPGRpYTpwb2ludCB2YWw9IjIwLDIyIi8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZWxlbV93aWR0aCI+CisgICAgICAgICAgPGRpYTpyZWFsIHZhbD0iMi45OTk5OTIzNzAzNzI2NDYxIi8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZWxlbV9oZWlnaHQiPgorICAgICAgICAgIDxkaWE6cmVhbCB2YWw9IjMuMDk5OTkyMTE2MDUxNzM0MyIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImxpbmVfd2lkdGgiPgorICAgICAgICAgIDxkaWE6cmVhbCB2YWw9IjAuMTAwMDAwMDAwMDAwMDAwMDEiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJsaW5lX2NvbG91ciI+CisgICAgICAgICAgPGRpYTpjb2xvciB2YWw9IiMwMDAwMDAiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJmaWxsX2NvbG91ciI+CisgICAgICAgICAgPGRpYTpjb2xvciB2YWw9IiNmZmZmZmYiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJzaG93X2JhY2tncm91bmQiPgorICAgICAgICAgIDxkaWE6Ym9vbGVhbiB2YWw9InRydWUiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJsaW5lX3N0eWxlIj4KKyAgICAgICAgICA8ZGlhOmVudW0gdmFsPSIwIi8+CisgICAgICAgICAgPGRpYTpyZWFsIHZhbD0iMSIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImZsaXBfaG9yaXpvbnRhbCI+CisgICAgICAgICAgPGRpYTpib29sZWFuIHZhbD0iZmFsc2UiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJmbGlwX3ZlcnRpY2FsIj4KKyAgICAgICAgICA8ZGlhOmJvb2xlYW4gdmFsPSJmYWxzZSIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8L2RpYTpvYmplY3Q+CisgICAgICA8ZGlhOm9iamVjdCB0eXBlPSJTdGFuZGFyZCAtIFRleHQiIHZlcnNpb249IjAiIGlkPSJPMjIiPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfcG9zIj4KKyAgICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMjAuMTE2NCwyMy42NzUiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfYmIiPgorICAgICAgICAgIDxkaWE6cmVjdGFuZ2xlIHZhbD0iMjAuMTE2NCwyMy4wNTYyOzIyLjgzNTIsMjQuMDYyNSIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InRleHQiPgorICAgICAgICAgIDxkaWE6Y29tcG9zaXRlIHR5cGU9InRleHQiPgorICAgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ic3RyaW5nIj4KKyAgICAgICAgICAgICAgPGRpYTpzdHJpbmc+I0F2YWhpUG9sbCM8L2RpYTpzdHJpbmc+CisgICAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJmb250Ij4KKyAgICAgICAgICAgICAgPGRpYTpmb250IGZhbWlseT0ic2FucyIgc3R5bGU9IjAiIG5hbWU9IkhlbHZldGljYSIvPgorICAgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iaGVpZ2h0Ij4KKyAgICAgICAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC44MDAwMDAwMDAwMDAwMDAwNCIvPgorICAgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0icG9zIj4KKyAgICAgICAgICAgICAgPGRpYTpwb2ludCB2YWw9IjIwLjExNjQsMjMuNjc1Ii8+CisgICAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJjb2xvciI+CisgICAgICAgICAgICAgIDxkaWE6Y29sb3IgdmFsPSIjMDAwMDAwIi8+CisgICAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJhbGlnbm1lbnQiPgorICAgICAgICAgICAgICA8ZGlhOmVudW0gdmFsPSIwIi8+CisgICAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgPC9kaWE6Y29tcG9zaXRlPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8L2RpYTpvYmplY3Q+CisgICAgPC9kaWE6Z3JvdXA+CisgICAgPGRpYTpncm91cD4KKyAgICAgIDxkaWE6b2JqZWN0IHR5cGU9Ikdlb21ldHJpYyAtIFBlcmZlY3QgU3F1YXJlIiB2ZXJzaW9uPSIwIiBpZD0iTzIzIj4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX3BvcyI+CisgICAgICAgICAgPGRpYTpwb2ludCB2YWw9IjE4LDI5Ii8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX2JiIj4KKyAgICAgICAgICA8ZGlhOnJlY3RhbmdsZSB2YWw9IjE3Ljk1LDI4Ljk1OzI0Ljk1MzIsMzYuMTgzMyIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVsZW1fY29ybmVyIj4KKyAgICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMTgsMjkiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbGVtX3dpZHRoIj4KKyAgICAgICAgICA8ZGlhOnJlYWwgdmFsPSI2LjkwMzIyNTgwNjQ1MTYxMyIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVsZW1faGVpZ2h0Ij4KKyAgICAgICAgICA8ZGlhOnJlYWwgdmFsPSI3LjEzMzMzMzMzMzMzMzMzMjkiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJsaW5lX3dpZHRoIj4KKyAgICAgICAgICA8ZGlhOnJlYWwgdmFsPSIwLjEwMDAwMDAwMDAwMDAwMDAxIi8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ibGluZV9jb2xvdXIiPgorICAgICAgICAgIDxkaWE6Y29sb3IgdmFsPSIjMDAwMDAwIi8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZmlsbF9jb2xvdXIiPgorICAgICAgICAgIDxkaWE6Y29sb3IgdmFsPSIjZmZmZmZmIi8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ic2hvd19iYWNrZ3JvdW5kIj4KKyAgICAgICAgICA8ZGlhOmJvb2xlYW4gdmFsPSJ0cnVlIi8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ibGluZV9zdHlsZSI+CisgICAgICAgICAgPGRpYTplbnVtIHZhbD0iMCIvPgorICAgICAgICAgIDxkaWE6cmVhbCB2YWw9IjEiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJmbGlwX2hvcml6b250YWwiPgorICAgICAgICAgIDxkaWE6Ym9vbGVhbiB2YWw9ImZhbHNlIi8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZmxpcF92ZXJ0aWNhbCI+CisgICAgICAgICAgPGRpYTpib29sZWFuIHZhbD0iZmFsc2UiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPC9kaWE6b2JqZWN0PgorICAgICAgPGRpYTpvYmplY3QgdHlwZT0iU3RhbmRhcmQgLSBUZXh0IiB2ZXJzaW9uPSIwIiBpZD0iTzI0Ij4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX3BvcyI+CisgICAgICAgICAgPGRpYTpwb2ludCB2YWw9IjE5LjY1MTYsMzIuNjgyMyIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9iYiI+CisgICAgICAgICAgPGRpYTpyZWN0YW5nbGUgdmFsPSIxOS42NTE2LDMyLjA2MzU7MjMuMjcwNCwzMy4wNjk4Ii8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0idGV4dCI+CisgICAgICAgICAgPGRpYTpjb21wb3NpdGUgdHlwZT0idGV4dCI+CisgICAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJzdHJpbmciPgorICAgICAgICAgICAgICA8ZGlhOnN0cmluZz4jQXZhaGlTZXJ2ZXIjPC9kaWE6c3RyaW5nPgorICAgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZm9udCI+CisgICAgICAgICAgICAgIDxkaWE6Zm9udCBmYW1pbHk9InNhbnMiIHN0eWxlPSIwIiBuYW1lPSJIZWx2ZXRpY2EiLz4KKyAgICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImhlaWdodCI+CisgICAgICAgICAgICAgIDxkaWE6cmVhbCB2YWw9IjAuODAwMDAwMDAwMDAwMDAwMDQiLz4KKyAgICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InBvcyI+CisgICAgICAgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIxOS42NTE2LDMyLjY4MjMiLz4KKyAgICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImNvbG9yIj4KKyAgICAgICAgICAgICAgPGRpYTpjb2xvciB2YWw9IiMwMDAwMDAiLz4KKyAgICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImFsaWdubWVudCI+CisgICAgICAgICAgICAgIDxkaWE6ZW51bSB2YWw9IjAiLz4KKyAgICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8L2RpYTpjb21wb3NpdGU+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDwvZGlhOm9iamVjdD4KKyAgICA8L2RpYTpncm91cD4KKyAgICA8ZGlhOmdyb3VwPgorICAgICAgPGRpYTpvYmplY3QgdHlwZT0iU3RhbmRhcmQgLSBBcmMiIHZlcnNpb249IjAiIGlkPSJPMjUiPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfcG9zIj4KKyAgICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMjEuNSwyNS4xIi8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX2JiIj4KKyAgICAgICAgICA8ZGlhOnJlY3RhbmdsZSB2YWw9IjIwLjQyNTcsMjUuMDQ5NDsyMS45NTIyLDI5LjA1NjIiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJjb25uX2VuZHBvaW50cyI+CisgICAgICAgICAgPGRpYTpwb2ludCB2YWw9IjIxLjUsMjUuMSIvPgorICAgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIyMS40NTE2LDI5Ii8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iY3VydmVfZGlzdGFuY2UiPgorICAgICAgICAgIDxkaWE6cmVhbCB2YWw9IjAuOTk5OTk5OTk5OTk5OTk5MjIiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbmRfYXJyb3ciPgorICAgICAgICAgIDxkaWE6ZW51bSB2YWw9IjIyIi8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZW5kX2Fycm93X2xlbmd0aCI+CisgICAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC41Ii8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZW5kX2Fycm93X3dpZHRoIj4KKyAgICAgICAgICA8ZGlhOnJlYWwgdmFsPSIwLjUiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPC9kaWE6b2JqZWN0PgorICAgICAgPGRpYTpvYmplY3QgdHlwZT0iU3RhbmRhcmQgLSBBcmMiIHZlcnNpb249IjAiIGlkPSJPMjYiPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfcG9zIj4KKyAgICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMjEuNDUxNiwyOSIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9iYiI+CisgICAgICAgICAgPGRpYTpyZWN0YW5nbGUgdmFsPSIyMC45OTk0LDI1LjA0Mzg7MjIuNTI1OSwyOS4wNTA2Ii8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iY29ubl9lbmRwb2ludHMiPgorICAgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIyMS40NTE2LDI5Ii8+CisgICAgICAgICAgPGRpYTpwb2ludCB2YWw9IjIxLjUsMjUuMSIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImN1cnZlX2Rpc3RhbmNlIj4KKyAgICAgICAgICA8ZGlhOnJlYWwgdmFsPSIwLjk5OTk5OTk5OTk5OTk5ODMzIi8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZW5kX2Fycm93Ij4KKyAgICAgICAgICA8ZGlhOmVudW0gdmFsPSIyMiIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVuZF9hcnJvd19sZW5ndGgiPgorICAgICAgICAgIDxkaWE6cmVhbCB2YWw9IjAuNSIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVuZF9hcnJvd193aWR0aCI+CisgICAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC41Ii8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDwvZGlhOm9iamVjdD4KKyAgICA8L2RpYTpncm91cD4KKyAgICA8ZGlhOm9iamVjdCB0eXBlPSJTdGFuZGFyZCAtIFRleHQiIHZlcnNpb249IjAiIGlkPSJPMjciPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX3BvcyI+CisgICAgICAgIDxkaWE6cG9pbnQgdmFsPSI2LDYiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9iYiI+CisgICAgICAgIDxkaWE6cmVjdGFuZ2xlIHZhbD0iNiw1LjM4MTI1OzE0LjAxODgsMTAuMzg3NSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0idGV4dCI+CisgICAgICAgIDxkaWE6Y29tcG9zaXRlIHR5cGU9InRleHQiPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InN0cmluZyI+CisgICAgICAgICAgICA8ZGlhOnN0cmluZz4jSWYgeW91IGNob3NlCitHTWFpbkxvb3AgYXMgbWFpbiBldmVudAorbG9vcCwgeW91IGNhbiB1c2UKK0F2YWhpR0xpYlBvbGwgYXMgCitpbXBsZW1lbnRhdGlvbiBmb3IKK0F2YWhpUG9sbCM8L2RpYTpzdHJpbmc+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImZvbnQiPgorICAgICAgICAgICAgPGRpYTpmb250IGZhbWlseT0ic2FucyIgc3R5bGU9IjAiIG5hbWU9IkhlbHZldGljYSIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJoZWlnaHQiPgorICAgICAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC44MDAwMDAwMDAwMDAwMDAwNCIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJwb3MiPgorICAgICAgICAgICAgPGRpYTpwb2ludCB2YWw9IjYsNiIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJjb2xvciI+CisgICAgICAgICAgICA8ZGlhOmNvbG9yIHZhbD0iIzAwMDAwMCIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJhbGlnbm1lbnQiPgorICAgICAgICAgICAgPGRpYTplbnVtIHZhbD0iMCIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPC9kaWE6Y29tcG9zaXRlPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgIDwvZGlhOm9iamVjdD4KKyAgICA8ZGlhOm9iamVjdCB0eXBlPSJTdGFuZGFyZCAtIFRleHQiIHZlcnNpb249IjAiIGlkPSJPMjgiPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX3BvcyI+CisgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIzOSwyIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfYmIiPgorICAgICAgICA8ZGlhOnJlY3RhbmdsZSB2YWw9IjMzLjIsMS4zODEyNTszOS4wMTg4LDcuOTg3NSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0idGV4dCI+CisgICAgICAgIDxkaWE6Y29tcG9zaXRlIHR5cGU9InRleHQiPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InN0cmluZyI+CisgICAgICAgICAgICA8ZGlhOnN0cmluZz4jSWYgeW91IGRvbid0IGhhdmUKK2EgbWFpbiBsb29wIHlldAoreW91IGNhbiBjaG9vc2UKK0F2YWhpU2ltcGxlUG9sbAorYXMgaW1wbGVtZW50YXRpb24KK2ZvciB0aGUgbWFpbiBsb29wLgorSXQgcHJvdmlkZXMKKypvbmUqIEF2YWhpUG9sbCM8L2RpYTpzdHJpbmc+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImZvbnQiPgorICAgICAgICAgICAgPGRpYTpmb250IGZhbWlseT0ic2FucyIgc3R5bGU9IjAiIG5hbWU9IkhlbHZldGljYSIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJoZWlnaHQiPgorICAgICAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC44MDAwMDAwMDAwMDAwMDAwNCIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJwb3MiPgorICAgICAgICAgICAgPGRpYTpwb2ludCB2YWw9IjM5LDIiLz4KKyAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iY29sb3IiPgorICAgICAgICAgICAgPGRpYTpjb2xvciB2YWw9IiMwMDAwMDAiLz4KKyAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iYWxpZ25tZW50Ij4KKyAgICAgICAgICAgIDxkaWE6ZW51bSB2YWw9IjIiLz4KKyAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDwvZGlhOmNvbXBvc2l0ZT4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICA8L2RpYTpvYmplY3Q+CisgICAgPGRpYTpvYmplY3QgdHlwZT0iU3RhbmRhcmQgLSBUZXh0IiB2ZXJzaW9uPSIwIiBpZD0iTzI5Ij4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9wb3MiPgorICAgICAgICA8ZGlhOnBvaW50IHZhbD0iNDEsMTcuNjE1MyIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX2JiIj4KKyAgICAgICAgPGRpYTpyZWN0YW5nbGUgdmFsPSI0MSwxNi45OTY1OzQ0LjM2ODcsMTguMDAyOCIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0idGV4dCI+CisgICAgICAgIDxkaWE6Y29tcG9zaXRlIHR5cGU9InRleHQiPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InN0cmluZyI+CisgICAgICAgICAgICA8ZGlhOnN0cmluZz4jQXZhaGlDbGllbnQjPC9kaWE6c3RyaW5nPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJmb250Ij4KKyAgICAgICAgICAgIDxkaWE6Zm9udCBmYW1pbHk9InNhbnMiIHN0eWxlPSIwIiBuYW1lPSJIZWx2ZXRpY2EiLz4KKyAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iaGVpZ2h0Ij4KKyAgICAgICAgICAgIDxkaWE6cmVhbCB2YWw9IjAuODAwMDAwMDAwMDAwMDAwMDQiLz4KKyAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0icG9zIj4KKyAgICAgICAgICAgIDxkaWE6cG9pbnQgdmFsPSI0MSwxNy42MTUzIi8+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImNvbG9yIj4KKyAgICAgICAgICAgIDxkaWE6Y29sb3IgdmFsPSIjMDAwMDAwIi8+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImFsaWdubWVudCI+CisgICAgICAgICAgICA8ZGlhOmVudW0gdmFsPSIwIi8+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8L2RpYTpjb21wb3NpdGU+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgPC9kaWE6b2JqZWN0PgorICA8L2RpYTpsYXllcj4KKzwvZGlhOmRpYWdyYW0+CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvZG9jcy9vdmVydmlldy5kaWEgYi9hdmFoaS0wLjYuMzEvZG9jcy9vdmVydmlldy5kaWEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ0ZjA0YwotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9kb2NzL292ZXJ2aWV3LmRpYQpAQCAtMCwwICsxLDE0OTUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8ZGlhOmRpYWdyYW0geG1sbnM6ZGlhPSJodHRwOi8vd3d3Lmx5c2F0b3IubGl1LnNlL35hbGxhL2RpYS8iPgorICA8ZGlhOmRpYWdyYW1kYXRhPgorICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImJhY2tncm91bmQiPgorICAgICAgPGRpYTpjb2xvciB2YWw9IiNmZmZmZmYiLz4KKyAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0icGFnZWJyZWFrIj4KKyAgICAgIDxkaWE6Y29sb3IgdmFsPSIjMDAwMDk5Ii8+CisgICAgPC9kaWE6YXR0cmlidXRlPgorICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InBhcGVyIj4KKyAgICAgIDxkaWE6Y29tcG9zaXRlIHR5cGU9InBhcGVyIj4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ibmFtZSI+CisgICAgICAgICAgPGRpYTpzdHJpbmc+I0E0IzwvZGlhOnN0cmluZz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJ0bWFyZ2luIj4KKyAgICAgICAgICA8ZGlhOnJlYWwgdmFsPSIyLjgyMjIwMDA1OTg5MDc0NzEiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJibWFyZ2luIj4KKyAgICAgICAgICA8ZGlhOnJlYWwgdmFsPSIyLjgyMjIwMDA1OTg5MDc0NzEiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJsbWFyZ2luIj4KKyAgICAgICAgICA8ZGlhOnJlYWwgdmFsPSIyLjgyMjIwMDA1OTg5MDc0NzEiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJybWFyZ2luIj4KKyAgICAgICAgICA8ZGlhOnJlYWwgdmFsPSIyLjgyMjIwMDA1OTg5MDc0NzEiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJpc19wb3J0cmFpdCI+CisgICAgICAgICAgPGRpYTpib29sZWFuIHZhbD0idHJ1ZSIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InNjYWxpbmciPgorICAgICAgICAgIDxkaWE6cmVhbCB2YWw9IjEiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJmaXR0byI+CisgICAgICAgICAgPGRpYTpib29sZWFuIHZhbD0iZmFsc2UiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPC9kaWE6Y29tcG9zaXRlPgorICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJncmlkIj4KKyAgICAgIDxkaWE6Y29tcG9zaXRlIHR5cGU9ImdyaWQiPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJ3aWR0aF94Ij4KKyAgICAgICAgICA8ZGlhOnJlYWwgdmFsPSIxIi8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0id2lkdGhfeSI+CisgICAgICAgICAgPGRpYTpyZWFsIHZhbD0iMSIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InZpc2libGVfeCI+CisgICAgICAgICAgPGRpYTppbnQgdmFsPSIxIi8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0idmlzaWJsZV95Ij4KKyAgICAgICAgICA8ZGlhOmludCB2YWw9IjEiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmNvbXBvc2l0ZSB0eXBlPSJjb2xvciIvPgorICAgICAgPC9kaWE6Y29tcG9zaXRlPgorICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJjb2xvciI+CisgICAgICA8ZGlhOmNvbG9yIHZhbD0iI2Q4ZTVlNSIvPgorICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJndWlkZXMiPgorICAgICAgPGRpYTpjb21wb3NpdGUgdHlwZT0iZ3VpZGVzIj4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iaGd1aWRlcyIvPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJ2Z3VpZGVzIi8+CisgICAgICA8L2RpYTpjb21wb3NpdGU+CisgICAgPC9kaWE6YXR0cmlidXRlPgorICA8L2RpYTpkaWFncmFtZGF0YT4KKyAgPGRpYTpsYXllciBuYW1lPSJCYWNrZ3JvdW5kIiB2aXNpYmxlPSJ0cnVlIj4KKyAgICA8ZGlhOm9iamVjdCB0eXBlPSJGbG93Y2hhcnQgLSBCb3giIHZlcnNpb249IjAiIGlkPSJPMCI+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfcG9zIj4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjIwLDYiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9iYiI+CisgICAgICAgIDxkaWE6cmVjdGFuZ2xlIHZhbD0iMTkuOTUsNS45NTszMy4wNSw3Ljk1Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbGVtX2Nvcm5lciI+CisgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIyMCw2Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbGVtX3dpZHRoIj4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMTMiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVsZW1faGVpZ2h0Ij4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMS45MDAwMDAwMDAwMDAwMDAxIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJzaG93X2JhY2tncm91bmQiPgorICAgICAgICA8ZGlhOmJvb2xlYW4gdmFsPSJ0cnVlIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJwYWRkaW5nIj4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC41Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJ0ZXh0Ij4KKyAgICAgICAgPGRpYTpjb21wb3NpdGUgdHlwZT0idGV4dCI+CisgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ic3RyaW5nIj4KKyAgICAgICAgICAgIDxkaWE6c3RyaW5nPiNsaWJhdmFoaS1jb3JlIzwvZGlhOnN0cmluZz4KKyAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZm9udCI+CisgICAgICAgICAgICA8ZGlhOmZvbnQgZmFtaWx5PSJzYW5zIiBzdHlsZT0iMCIgbmFtZT0iSGVsdmV0aWNhIi8+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImhlaWdodCI+CisgICAgICAgICAgICA8ZGlhOnJlYWwgdmFsPSIwLjgwMDAwMDAwMDAwMDAwMDA0Ii8+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InBvcyI+CisgICAgICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMjYuNSw3LjEiLz4KKyAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iY29sb3IiPgorICAgICAgICAgICAgPGRpYTpjb2xvciB2YWw9IiMwMDAwMDAiLz4KKyAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iYWxpZ25tZW50Ij4KKyAgICAgICAgICAgIDxkaWE6ZW51bSB2YWw9IjEiLz4KKyAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDwvZGlhOmNvbXBvc2l0ZT4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICA8L2RpYTpvYmplY3Q+CisgICAgPGRpYTpvYmplY3QgdHlwZT0iRmxvd2NoYXJ0IC0gQm94IiB2ZXJzaW9uPSIwIiBpZD0iTzEiPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX3BvcyI+CisgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIxMCwxMiIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX2JiIj4KKyAgICAgICAgPGRpYTpyZWN0YW5nbGUgdmFsPSI5Ljk1LDExLjk1OzI5LjA1LDE2LjA1Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbGVtX2Nvcm5lciI+CisgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIxMCwxMiIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZWxlbV93aWR0aCI+CisgICAgICAgIDxkaWE6cmVhbCB2YWw9IjE5Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbGVtX2hlaWdodCI+CisgICAgICAgIDxkaWE6cmVhbCB2YWw9IjQiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InNob3dfYmFja2dyb3VuZCI+CisgICAgICAgIDxkaWE6Ym9vbGVhbiB2YWw9InRydWUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InBhZGRpbmciPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIwLjUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InRleHQiPgorICAgICAgICA8ZGlhOmNvbXBvc2l0ZSB0eXBlPSJ0ZXh0Ij4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJzdHJpbmciPgorICAgICAgICAgICAgPGRpYTpzdHJpbmc+I2F2YWhpLWRhZW1vbiM8L2RpYTpzdHJpbmc+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImZvbnQiPgorICAgICAgICAgICAgPGRpYTpmb250IGZhbWlseT0ic2FucyIgc3R5bGU9IjAiIG5hbWU9IkhlbHZldGljYSIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJoZWlnaHQiPgorICAgICAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC44MDAwMDAwMDAwMDAwMDAwNCIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJwb3MiPgorICAgICAgICAgICAgPGRpYTpwb2ludCB2YWw9IjE5LjUsMTQuMTUiLz4KKyAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iY29sb3IiPgorICAgICAgICAgICAgPGRpYTpjb2xvciB2YWw9IiMwMDAwMDAiLz4KKyAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iYWxpZ25tZW50Ij4KKyAgICAgICAgICAgIDxkaWE6ZW51bSB2YWw9IjEiLz4KKyAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDwvZGlhOmNvbXBvc2l0ZT4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICA8L2RpYTpvYmplY3Q+CisgICAgPGRpYTpvYmplY3QgdHlwZT0iRmxvd2NoYXJ0IC0gQm94IiB2ZXJzaW9uPSIwIiBpZD0iTzIiPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX3BvcyI+CisgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIxMCwxNiIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX2JiIj4KKyAgICAgICAgPGRpYTpyZWN0YW5nbGUgdmFsPSI5Ljk1LDE1Ljk1OzE2LjA1LDE4LjA1Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbGVtX2Nvcm5lciI+CisgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIxMCwxNiIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZWxlbV93aWR0aCI+CisgICAgICAgIDxkaWE6cmVhbCB2YWw9IjYiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVsZW1faGVpZ2h0Ij4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMiIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ic2hvd19iYWNrZ3JvdW5kIj4KKyAgICAgICAgPGRpYTpib29sZWFuIHZhbD0idHJ1ZSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0icGFkZGluZyI+CisgICAgICAgIDxkaWE6cmVhbCB2YWw9IjAuNSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0idGV4dCI+CisgICAgICAgIDxkaWE6Y29tcG9zaXRlIHR5cGU9InRleHQiPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InN0cmluZyI+CisgICAgICAgICAgICA8ZGlhOnN0cmluZz4jREJVUyBwcm90b2NvbCM8L2RpYTpzdHJpbmc+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImZvbnQiPgorICAgICAgICAgICAgPGRpYTpmb250IGZhbWlseT0ic2FucyIgc3R5bGU9IjAiIG5hbWU9IkhlbHZldGljYSIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJoZWlnaHQiPgorICAgICAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC44MDAwMDAwMDAwMDAwMDAwNCIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJwb3MiPgorICAgICAgICAgICAgPGRpYTpwb2ludCB2YWw9IjEzLDE3LjE1Ii8+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImNvbG9yIj4KKyAgICAgICAgICAgIDxkaWE6Y29sb3IgdmFsPSIjMDAwMDAwIi8+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImFsaWdubWVudCI+CisgICAgICAgICAgICA8ZGlhOmVudW0gdmFsPSIxIi8+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8L2RpYTpjb21wb3NpdGU+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgPC9kaWE6b2JqZWN0PgorICAgIDxkaWE6b2JqZWN0IHR5cGU9IkZsb3djaGFydCAtIEJveCIgdmVyc2lvbj0iMCIgaWQ9Ik8zIj4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9wb3MiPgorICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMTYsMTYiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9iYiI+CisgICAgICAgIDxkaWE6cmVjdGFuZ2xlIHZhbD0iMTUuOTUsMTUuOTU7MjMuMDUsMTguMDUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVsZW1fY29ybmVyIj4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjE2LDE2Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbGVtX3dpZHRoIj4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iNyIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZWxlbV9oZWlnaHQiPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIyIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJzaG93X2JhY2tncm91bmQiPgorICAgICAgICA8ZGlhOmJvb2xlYW4gdmFsPSJ0cnVlIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJwYWRkaW5nIj4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC41Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJ0ZXh0Ij4KKyAgICAgICAgPGRpYTpjb21wb3NpdGUgdHlwZT0idGV4dCI+CisgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ic3RyaW5nIj4KKyAgICAgICAgICAgIDxkaWE6c3RyaW5nPiNzaW1wbGUgcHJvdG9jb2wjPC9kaWE6c3RyaW5nPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJmb250Ij4KKyAgICAgICAgICAgIDxkaWE6Zm9udCBmYW1pbHk9InNhbnMiIHN0eWxlPSIwIiBuYW1lPSJIZWx2ZXRpY2EiLz4KKyAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iaGVpZ2h0Ij4KKyAgICAgICAgICAgIDxkaWE6cmVhbCB2YWw9IjAuODAwMDAwMDAwMDAwMDAwMDQiLz4KKyAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0icG9zIj4KKyAgICAgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIxOS41LDE3LjE1Ii8+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImNvbG9yIj4KKyAgICAgICAgICAgIDxkaWE6Y29sb3IgdmFsPSIjMDAwMDAwIi8+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImFsaWdubWVudCI+CisgICAgICAgICAgICA8ZGlhOmVudW0gdmFsPSIxIi8+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8L2RpYTpjb21wb3NpdGU+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgPC9kaWE6b2JqZWN0PgorICAgIDxkaWE6b2JqZWN0IHR5cGU9IkZsb3djaGFydCAtIEJveCIgdmVyc2lvbj0iMCIgaWQ9Ik80Ij4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9wb3MiPgorICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMjEsMjIiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9iYiI+CisgICAgICAgIDxkaWE6cmVjdGFuZ2xlIHZhbD0iMjAuOTUsMjEuOTU7MjYuMDUsMjMuOTUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVsZW1fY29ybmVyIj4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjIxLDIyIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbGVtX3dpZHRoIj4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iNSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZWxlbV9oZWlnaHQiPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIxLjkwMDAwMDAwMDAwMDAwMDEiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InNob3dfYmFja2dyb3VuZCI+CisgICAgICAgIDxkaWE6Ym9vbGVhbiB2YWw9InRydWUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InBhZGRpbmciPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIwLjUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InRleHQiPgorICAgICAgICA8ZGlhOmNvbXBvc2l0ZSB0eXBlPSJ0ZXh0Ij4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJzdHJpbmciPgorICAgICAgICAgICAgPGRpYTpzdHJpbmc+I25zcy1tZG5zIzwvZGlhOnN0cmluZz4KKyAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZm9udCI+CisgICAgICAgICAgICA8ZGlhOmZvbnQgZmFtaWx5PSJzYW5zIiBzdHlsZT0iMCIgbmFtZT0iSGVsdmV0aWNhIi8+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImhlaWdodCI+CisgICAgICAgICAgICA8ZGlhOnJlYWwgdmFsPSIwLjgwMDAwMDAwMDAwMDAwMDA0Ii8+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InBvcyI+CisgICAgICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMjMuNSwyMy4xIi8+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImNvbG9yIj4KKyAgICAgICAgICAgIDxkaWE6Y29sb3IgdmFsPSIjMDAwMDAwIi8+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImFsaWdubWVudCI+CisgICAgICAgICAgICA8ZGlhOmVudW0gdmFsPSIxIi8+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8L2RpYTpjb21wb3NpdGU+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgPC9kaWE6b2JqZWN0PgorICAgIDxkaWE6b2JqZWN0IHR5cGU9IkZsb3djaGFydCAtIEJveCIgdmVyc2lvbj0iMCIgaWQ9Ik81Ij4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9wb3MiPgorICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMjcsMjIiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9iYiI+CisgICAgICAgIDxkaWE6cmVjdGFuZ2xlIHZhbD0iMjYuOTUsMjEuOTU7MzIuOSwyMy45NSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZWxlbV9jb3JuZXIiPgorICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMjcsMjIiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVsZW1fd2lkdGgiPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSI1Ljg0OTk5OTk5OTk5OTk5OTYiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVsZW1faGVpZ2h0Ij4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMS45MDAwMDAwMDAwMDAwMDAxIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJzaG93X2JhY2tncm91bmQiPgorICAgICAgICA8ZGlhOmJvb2xlYW4gdmFsPSJ0cnVlIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJwYWRkaW5nIj4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC41Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJ0ZXh0Ij4KKyAgICAgICAgPGRpYTpjb21wb3NpdGUgdHlwZT0idGV4dCI+CisgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ic3RyaW5nIj4KKyAgICAgICAgICAgIDxkaWE6c3RyaW5nPiNhdmFoaS1kbnNjb25mZCM8L2RpYTpzdHJpbmc+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImZvbnQiPgorICAgICAgICAgICAgPGRpYTpmb250IGZhbWlseT0ic2FucyIgc3R5bGU9IjAiIG5hbWU9IkhlbHZldGljYSIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJoZWlnaHQiPgorICAgICAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC44MDAwMDAwMDAwMDAwMDAwNCIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJwb3MiPgorICAgICAgICAgICAgPGRpYTpwb2ludCB2YWw9IjI5LjkyNSwyMy4xIi8+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImNvbG9yIj4KKyAgICAgICAgICAgIDxkaWE6Y29sb3IgdmFsPSIjMDAwMDAwIi8+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImFsaWdubWVudCI+CisgICAgICAgICAgICA8ZGlhOmVudW0gdmFsPSIxIi8+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8L2RpYTpjb21wb3NpdGU+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgPC9kaWE6b2JqZWN0PgorICAgIDxkaWE6b2JqZWN0IHR5cGU9IkZsb3djaGFydCAtIEJveCIgdmVyc2lvbj0iMCIgaWQ9Ik82Ij4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9wb3MiPgorICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMTAsMjAiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9iYiI+CisgICAgICAgIDxkaWE6cmVjdGFuZ2xlIHZhbD0iOS45NSwxOS45NTsxNi4wNSwyMi4wNSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZWxlbV9jb3JuZXIiPgorICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMTAsMjAiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVsZW1fd2lkdGgiPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSI2Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbGVtX2hlaWdodCI+CisgICAgICAgIDxkaWE6cmVhbCB2YWw9IjIiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImlubmVyX2NvbG9yIj4KKyAgICAgICAgPGRpYTpjb2xvciB2YWw9IiNlNWU1ZTUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InNob3dfYmFja2dyb3VuZCI+CisgICAgICAgIDxkaWE6Ym9vbGVhbiB2YWw9InRydWUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InBhZGRpbmciPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIwLjUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InRleHQiPgorICAgICAgICA8ZGlhOmNvbXBvc2l0ZSB0eXBlPSJ0ZXh0Ij4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJzdHJpbmciPgorICAgICAgICAgICAgPGRpYTpzdHJpbmc+I0RCVVMjPC9kaWE6c3RyaW5nPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJmb250Ij4KKyAgICAgICAgICAgIDxkaWE6Zm9udCBmYW1pbHk9InNhbnMiIHN0eWxlPSIwIiBuYW1lPSJIZWx2ZXRpY2EiLz4KKyAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iaGVpZ2h0Ij4KKyAgICAgICAgICAgIDxkaWE6cmVhbCB2YWw9IjAuODAwMDAwMDAwMDAwMDAwMDQiLz4KKyAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0icG9zIj4KKyAgICAgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIxMywyMS4xNSIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJjb2xvciI+CisgICAgICAgICAgICA8ZGlhOmNvbG9yIHZhbD0iIzAwMDAwMCIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJhbGlnbm1lbnQiPgorICAgICAgICAgICAgPGRpYTplbnVtIHZhbD0iMSIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPC9kaWE6Y29tcG9zaXRlPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgIDwvZGlhOm9iamVjdD4KKyAgICA8ZGlhOm9iamVjdCB0eXBlPSJGbG93Y2hhcnQgLSBCb3giIHZlcnNpb249IjAiIGlkPSJPNyI+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfcG9zIj4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjYsMjQiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9iYiI+CisgICAgICAgIDxkaWE6cmVjdGFuZ2xlIHZhbD0iNS45NSwyMy45NTsxMi4wNSwyNi4wNSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZWxlbV9jb3JuZXIiPgorICAgICAgICA8ZGlhOnBvaW50IHZhbD0iNiwyNCIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZWxlbV93aWR0aCI+CisgICAgICAgIDxkaWE6cmVhbCB2YWw9IjYiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVsZW1faGVpZ2h0Ij4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMiIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ic2hvd19iYWNrZ3JvdW5kIj4KKyAgICAgICAgPGRpYTpib29sZWFuIHZhbD0idHJ1ZSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0icGFkZGluZyI+CisgICAgICAgIDxkaWE6cmVhbCB2YWw9IjAuNSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0idGV4dCI+CisgICAgICAgIDxkaWE6Y29tcG9zaXRlIHR5cGU9InRleHQiPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InN0cmluZyI+CisgICAgICAgICAgICA8ZGlhOnN0cmluZz4jbGliYXZhaGktY2xpZW50IzwvZGlhOnN0cmluZz4KKyAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZm9udCI+CisgICAgICAgICAgICA8ZGlhOmZvbnQgZmFtaWx5PSJzYW5zIiBzdHlsZT0iMCIgbmFtZT0iSGVsdmV0aWNhIi8+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImhlaWdodCI+CisgICAgICAgICAgICA8ZGlhOnJlYWwgdmFsPSIwLjgwMDAwMDAwMDAwMDAwMDA0Ii8+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InBvcyI+CisgICAgICAgICAgICA8ZGlhOnBvaW50IHZhbD0iOSwyNS4xNSIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJjb2xvciI+CisgICAgICAgICAgICA8ZGlhOmNvbG9yIHZhbD0iIzAwMDAwMCIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJhbGlnbm1lbnQiPgorICAgICAgICAgICAgPGRpYTplbnVtIHZhbD0iMSIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPC9kaWE6Y29tcG9zaXRlPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgIDwvZGlhOm9iamVjdD4KKyAgICA8ZGlhOm9iamVjdCB0eXBlPSJGbG93Y2hhcnQgLSBCb3giIHZlcnNpb249IjAiIGlkPSJPOCI+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfcG9zIj4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjEwLDIiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9iYiI+CisgICAgICAgIDxkaWE6cmVjdGFuZ2xlIHZhbD0iOS45NSwxLjk1OzIzLjA1LDMuOTUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVsZW1fY29ybmVyIj4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjEwLDIiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVsZW1fd2lkdGgiPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIxMyIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZWxlbV9oZWlnaHQiPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIxLjkwMDAwMDAwMDAwMDAwMDEiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InNob3dfYmFja2dyb3VuZCI+CisgICAgICAgIDxkaWE6Ym9vbGVhbiB2YWw9InRydWUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InBhZGRpbmciPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIwLjUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InRleHQiPgorICAgICAgICA8ZGlhOmNvbXBvc2l0ZSB0eXBlPSJ0ZXh0Ij4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJzdHJpbmciPgorICAgICAgICAgICAgPGRpYTpzdHJpbmc+I2xpYmF2YWhpLWNvbW1vbiM8L2RpYTpzdHJpbmc+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImZvbnQiPgorICAgICAgICAgICAgPGRpYTpmb250IGZhbWlseT0ic2FucyIgc3R5bGU9IjAiIG5hbWU9IkhlbHZldGljYSIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJoZWlnaHQiPgorICAgICAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC44MDAwMDAwMDAwMDAwMDAwNCIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJwb3MiPgorICAgICAgICAgICAgPGRpYTpwb2ludCB2YWw9IjE2LjUsMy4xIi8+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImNvbG9yIj4KKyAgICAgICAgICAgIDxkaWE6Y29sb3IgdmFsPSIjMDAwMDAwIi8+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImFsaWdubWVudCI+CisgICAgICAgICAgICA8ZGlhOmVudW0gdmFsPSIxIi8+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8L2RpYTpjb21wb3NpdGU+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgPC9kaWE6b2JqZWN0PgorICAgIDxkaWE6b2JqZWN0IHR5cGU9IkZsb3djaGFydCAtIEJveCIgdmVyc2lvbj0iMCIgaWQ9Ik85Ij4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9wb3MiPgorICAgICAgICA8ZGlhOnBvaW50IHZhbD0iLTUsMjgiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9iYiI+CisgICAgICAgIDxkaWE6cmVjdGFuZ2xlIHZhbD0iLTUuMDUsMjcuOTU7Ni45LDI5Ljk1Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbGVtX2Nvcm5lciI+CisgICAgICAgIDxkaWE6cG9pbnQgdmFsPSItNSwyOCIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZWxlbV93aWR0aCI+CisgICAgICAgIDxkaWE6cmVhbCB2YWw9IjExLjg1Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbGVtX2hlaWdodCI+CisgICAgICAgIDxkaWE6cmVhbCB2YWw9IjEuOTAwMDAwMDAwMDAwMDAwMSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iaW5uZXJfY29sb3IiPgorICAgICAgICA8ZGlhOmNvbG9yIHZhbD0iI2U1ZTVlNSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ic2hvd19iYWNrZ3JvdW5kIj4KKyAgICAgICAgPGRpYTpib29sZWFuIHZhbD0idHJ1ZSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0icGFkZGluZyI+CisgICAgICAgIDxkaWE6cmVhbCB2YWw9IjAuNSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0idGV4dCI+CisgICAgICAgIDxkaWE6Y29tcG9zaXRlIHR5cGU9InRleHQiPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InN0cmluZyI+CisgICAgICAgICAgICA8ZGlhOnN0cmluZz4jQyBiYXNlZCB0b29sczogbmF1dGlsdXMsIHJoeXRobWJveCwgLi4uIzwvZGlhOnN0cmluZz4KKyAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZm9udCI+CisgICAgICAgICAgICA8ZGlhOmZvbnQgZmFtaWx5PSJzYW5zIiBzdHlsZT0iMCIgbmFtZT0iSGVsdmV0aWNhIi8+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImhlaWdodCI+CisgICAgICAgICAgICA8ZGlhOnJlYWwgdmFsPSIwLjgwMDAwMDAwMDAwMDAwMDA0Ii8+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InBvcyI+CisgICAgICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMC45MjUsMjkuMSIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJjb2xvciI+CisgICAgICAgICAgICA8ZGlhOmNvbG9yIHZhbD0iIzAwMDAwMCIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJhbGlnbm1lbnQiPgorICAgICAgICAgICAgPGRpYTplbnVtIHZhbD0iMSIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPC9kaWE6Y29tcG9zaXRlPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgIDwvZGlhOm9iamVjdD4KKyAgICA8ZGlhOm9iamVjdCB0eXBlPSJTdGFuZGFyZCAtIExpbmUiIHZlcnNpb249IjAiIGlkPSJPMTAiPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX3BvcyI+CisgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIxNi41LDMuOSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX2JiIj4KKyAgICAgICAgPGRpYTpyZWN0YW5nbGUgdmFsPSIxNC4yNTA3LDMuODQwNTc7MTYuNTU5NCwxMi4xNTQ1Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJjb25uX2VuZHBvaW50cyI+CisgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIxNi41LDMuOSIvPgorICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMTQuNzUsMTIiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im51bWNwIj4KKyAgICAgICAgPGRpYTppbnQgdmFsPSIxIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbmRfYXJyb3ciPgorICAgICAgICA8ZGlhOmVudW0gdmFsPSIyMiIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZW5kX2Fycm93X2xlbmd0aCI+CisgICAgICAgIDxkaWE6cmVhbCB2YWw9IjAuNSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZW5kX2Fycm93X3dpZHRoIj4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC41Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmNvbm5lY3Rpb25zPgorICAgICAgICA8ZGlhOmNvbm5lY3Rpb24gaGFuZGxlPSIwIiB0bz0iTzgiIGNvbm5lY3Rpb249IjEzIi8+CisgICAgICAgIDxkaWE6Y29ubmVjdGlvbiBoYW5kbGU9IjEiIHRvPSJPMSIgY29ubmVjdGlvbj0iMSIvPgorICAgICAgPC9kaWE6Y29ubmVjdGlvbnM+CisgICAgPC9kaWE6b2JqZWN0PgorICAgIDxkaWE6b2JqZWN0IHR5cGU9IlN0YW5kYXJkIC0gTGluZSIgdmVyc2lvbj0iMCIgaWQ9Ik8xMSI+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfcG9zIj4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjIzLjI1LDcuOSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX2JiIj4KKyAgICAgICAgPGRpYTpyZWN0YW5nbGUgdmFsPSIyMy4xODk2LDcuODM5NTg7MjQuNzQ3NiwxMi4xNjcxIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJjb25uX2VuZHBvaW50cyI+CisgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIyMy4yNSw3LjkiLz4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjI0LjI1LDEyIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJudW1jcCI+CisgICAgICAgIDxkaWE6aW50IHZhbD0iMSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZW5kX2Fycm93Ij4KKyAgICAgICAgPGRpYTplbnVtIHZhbD0iMjIiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVuZF9hcnJvd19sZW5ndGgiPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIwLjUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVuZF9hcnJvd193aWR0aCI+CisgICAgICAgIDxkaWE6cmVhbCB2YWw9IjAuNSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTpjb25uZWN0aW9ucz4KKyAgICAgICAgPGRpYTpjb25uZWN0aW9uIGhhbmRsZT0iMCIgdG89Ik8wIiBjb25uZWN0aW9uPSIxMiIvPgorICAgICAgICA8ZGlhOmNvbm5lY3Rpb24gaGFuZGxlPSIxIiB0bz0iTzEiIGNvbm5lY3Rpb249IjMiLz4KKyAgICAgIDwvZGlhOmNvbm5lY3Rpb25zPgorICAgIDwvZGlhOm9iamVjdD4KKyAgICA8ZGlhOm9iamVjdCB0eXBlPSJTdGFuZGFyZCAtIExpbmUiIHZlcnNpb249IjAiIGlkPSJPMTIiPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX3BvcyI+CisgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIxMywxOCIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX2JiIj4KKyAgICAgICAgPGRpYTpyZWN0YW5nbGUgdmFsPSIxMi41LDE3Ljk1OzEzLjUsMjAuMDUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImNvbm5fZW5kcG9pbnRzIj4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjEzLDE4Ii8+CisgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIxMywyMCIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ibnVtY3AiPgorICAgICAgICA8ZGlhOmludCB2YWw9IjEiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVuZF9hcnJvdyI+CisgICAgICAgIDxkaWE6ZW51bSB2YWw9IjIyIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbmRfYXJyb3dfbGVuZ3RoIj4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC41Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbmRfYXJyb3dfd2lkdGgiPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIwLjUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6Y29ubmVjdGlvbnM+CisgICAgICAgIDxkaWE6Y29ubmVjdGlvbiBoYW5kbGU9IjAiIHRvPSJPMiIgY29ubmVjdGlvbj0iMTMiLz4KKyAgICAgICAgPGRpYTpjb25uZWN0aW9uIGhhbmRsZT0iMSIgdG89Ik82IiBjb25uZWN0aW9uPSIyIi8+CisgICAgICA8L2RpYTpjb25uZWN0aW9ucz4KKyAgICA8L2RpYTpvYmplY3Q+CisgICAgPGRpYTpvYmplY3QgdHlwZT0iU3RhbmRhcmQgLSBMaW5lIiB2ZXJzaW9uPSIwIiBpZD0iTzEzIj4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9wb3MiPgorICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMTMsMjIiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9iYiI+CisgICAgICAgIDxkaWE6cmVjdGFuZ2xlIHZhbD0iMTAuMTQ4NiwyMS45Mjk3OzEzLjA3MDMsMjQuNDIxNyIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iY29ubl9lbmRwb2ludHMiPgorICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMTMsMjIiLz4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjEwLjUsMjQiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im51bWNwIj4KKyAgICAgICAgPGRpYTppbnQgdmFsPSIxIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbmRfYXJyb3ciPgorICAgICAgICA8ZGlhOmVudW0gdmFsPSIyMiIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZW5kX2Fycm93X2xlbmd0aCI+CisgICAgICAgIDxkaWE6cmVhbCB2YWw9IjAuNSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZW5kX2Fycm93X3dpZHRoIj4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC41Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmNvbm5lY3Rpb25zPgorICAgICAgICA8ZGlhOmNvbm5lY3Rpb24gaGFuZGxlPSIwIiB0bz0iTzYiIGNvbm5lY3Rpb249IjEzIi8+CisgICAgICAgIDxkaWE6Y29ubmVjdGlvbiBoYW5kbGU9IjEiIHRvPSJPNyIgY29ubmVjdGlvbj0iMyIvPgorICAgICAgPC9kaWE6Y29ubmVjdGlvbnM+CisgICAgPC9kaWE6b2JqZWN0PgorICAgIDxkaWE6b2JqZWN0IHR5cGU9IlN0YW5kYXJkIC0gTGluZSIgdmVyc2lvbj0iMCIgaWQ9Ik8xNCI+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfcG9zIj4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjE3Ljc1LDE4Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfYmIiPgorICAgICAgICA8ZGlhOnJlY3RhbmdsZSB2YWw9IjE3LjY4MDQsMTcuOTMwNDsyMy44MjY2LDIyLjQzOSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iY29ubl9lbmRwb2ludHMiPgorICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMTcuNzUsMTgiLz4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjIzLjUsMjIiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im51bWNwIj4KKyAgICAgICAgPGRpYTppbnQgdmFsPSIxIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbmRfYXJyb3ciPgorICAgICAgICA8ZGlhOmVudW0gdmFsPSIyMiIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZW5kX2Fycm93X2xlbmd0aCI+CisgICAgICAgIDxkaWE6cmVhbCB2YWw9IjAuNSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZW5kX2Fycm93X3dpZHRoIj4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC41Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmNvbm5lY3Rpb25zPgorICAgICAgICA8ZGlhOmNvbm5lY3Rpb24gaGFuZGxlPSIwIiB0bz0iTzMiIGNvbm5lY3Rpb249IjEyIi8+CisgICAgICAgIDxkaWE6Y29ubmVjdGlvbiBoYW5kbGU9IjEiIHRvPSJPNCIgY29ubmVjdGlvbj0iMiIvPgorICAgICAgPC9kaWE6Y29ubmVjdGlvbnM+CisgICAgPC9kaWE6b2JqZWN0PgorICAgIDxkaWE6b2JqZWN0IHR5cGU9IlN0YW5kYXJkIC0gTGluZSIgdmVyc2lvbj0iMCIgaWQ9Ik8xNSI+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfcG9zIj4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjIxLjI1LDE4Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfYmIiPgorICAgICAgICA8ZGlhOnJlY3RhbmdsZSB2YWw9IjIxLjE4MzcsMTcuOTMzNzszMC4xNzk4LDIyLjQ3NSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iY29ubl9lbmRwb2ludHMiPgorICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMjEuMjUsMTgiLz4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjI5LjkyNSwyMiIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ibnVtY3AiPgorICAgICAgICA8ZGlhOmludCB2YWw9IjEiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVuZF9hcnJvdyI+CisgICAgICAgIDxkaWE6ZW51bSB2YWw9IjIyIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbmRfYXJyb3dfbGVuZ3RoIj4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC41Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbmRfYXJyb3dfd2lkdGgiPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIwLjUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6Y29ubmVjdGlvbnM+CisgICAgICAgIDxkaWE6Y29ubmVjdGlvbiBoYW5kbGU9IjAiIHRvPSJPMyIgY29ubmVjdGlvbj0iMTQiLz4KKyAgICAgICAgPGRpYTpjb25uZWN0aW9uIGhhbmRsZT0iMSIgdG89Ik81IiBjb25uZWN0aW9uPSIyIi8+CisgICAgICA8L2RpYTpjb25uZWN0aW9ucz4KKyAgICA8L2RpYTpvYmplY3Q+CisgICAgPGRpYTpvYmplY3QgdHlwZT0iU3RhbmRhcmQgLSBMaW5lIiB2ZXJzaW9uPSIwIiBpZD0iTzE2Ij4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9wb3MiPgorICAgICAgICA8ZGlhOnBvaW50IHZhbD0iNiwyNiIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX2JiIj4KKyAgICAgICAgPGRpYTpyZWN0YW5nbGUgdmFsPSIwLjY5NTE2LDI1LjkzNTE7Ni4wNjQ4NSwyOC40ODM1Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJjb25uX2VuZHBvaW50cyI+CisgICAgICAgIDxkaWE6cG9pbnQgdmFsPSI2LDI2Ii8+CisgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIwLjkyNSwyOCIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ibnVtY3AiPgorICAgICAgICA8ZGlhOmludCB2YWw9IjEiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVuZF9hcnJvdyI+CisgICAgICAgIDxkaWE6ZW51bSB2YWw9IjIyIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbmRfYXJyb3dfbGVuZ3RoIj4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC41Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbmRfYXJyb3dfd2lkdGgiPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIwLjUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6Y29ubmVjdGlvbnM+CisgICAgICAgIDxkaWE6Y29ubmVjdGlvbiBoYW5kbGU9IjAiIHRvPSJPNyIgY29ubmVjdGlvbj0iMTEiLz4KKyAgICAgICAgPGRpYTpjb25uZWN0aW9uIGhhbmRsZT0iMSIgdG89Ik85IiBjb25uZWN0aW9uPSIyIi8+CisgICAgICA8L2RpYTpjb25uZWN0aW9ucz4KKyAgICA8L2RpYTpvYmplY3Q+CisgICAgPGRpYTpvYmplY3QgdHlwZT0iU3RhbmRhcmQgLSBMaW5lIiB2ZXJzaW9uPSIwIiBpZD0iTzE3Ij4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9wb3MiPgorICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMjMsMy45Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfYmIiPgorICAgICAgICA8ZGlhOnJlY3RhbmdsZSB2YWw9IjIyLjc0NzYsMy44NDQ0NDsyMy43NTI0LDYuMTA4NzYiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImNvbm5fZW5kcG9pbnRzIj4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjIzLDMuOSIvPgorICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMjMuMjUsNiIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ibnVtY3AiPgorICAgICAgICA8ZGlhOmludCB2YWw9IjEiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVuZF9hcnJvdyI+CisgICAgICAgIDxkaWE6ZW51bSB2YWw9IjIyIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbmRfYXJyb3dfbGVuZ3RoIj4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC41Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbmRfYXJyb3dfd2lkdGgiPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIwLjUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6Y29ubmVjdGlvbnM+CisgICAgICAgIDxkaWE6Y29ubmVjdGlvbiBoYW5kbGU9IjAiIHRvPSJPOCIgY29ubmVjdGlvbj0iMTUiLz4KKyAgICAgICAgPGRpYTpjb25uZWN0aW9uIGhhbmRsZT0iMSIgdG89Ik8wIiBjb25uZWN0aW9uPSIxIi8+CisgICAgICA8L2RpYTpjb25uZWN0aW9ucz4KKyAgICA8L2RpYTpvYmplY3Q+CisgICAgPGRpYTpvYmplY3QgdHlwZT0iRmxvd2NoYXJ0IC0gQm94IiB2ZXJzaW9uPSIwIiBpZD0iTzE4Ij4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9wb3MiPgorICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMjMsMTYiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9iYiI+CisgICAgICAgIDxkaWE6cmVjdGFuZ2xlIHZhbD0iMjIuOTUsMTUuOTU7MjkuMDUsMTguMDUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVsZW1fY29ybmVyIj4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjIzLDE2Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbGVtX3dpZHRoIj4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iNiIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZWxlbV9oZWlnaHQiPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIyIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJzaG93X2JhY2tncm91bmQiPgorICAgICAgICA8ZGlhOmJvb2xlYW4gdmFsPSJ0cnVlIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJwYWRkaW5nIj4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC41Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJ0ZXh0Ij4KKyAgICAgICAgPGRpYTpjb21wb3NpdGUgdHlwZT0idGV4dCI+CisgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ic3RyaW5nIj4KKyAgICAgICAgICAgIDxkaWE6c3RyaW5nPiNzdGF0aWMgc2VydmljZXMjPC9kaWE6c3RyaW5nPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJmb250Ij4KKyAgICAgICAgICAgIDxkaWE6Zm9udCBmYW1pbHk9InNhbnMiIHN0eWxlPSIwIiBuYW1lPSJIZWx2ZXRpY2EiLz4KKyAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iaGVpZ2h0Ij4KKyAgICAgICAgICAgIDxkaWE6cmVhbCB2YWw9IjAuODAwMDAwMDAwMDAwMDAwMDQiLz4KKyAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0icG9zIj4KKyAgICAgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIyNiwxNy4xNSIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJjb2xvciI+CisgICAgICAgICAgICA8ZGlhOmNvbG9yIHZhbD0iIzAwMDAwMCIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJhbGlnbm1lbnQiPgorICAgICAgICAgICAgPGRpYTplbnVtIHZhbD0iMSIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPC9kaWE6Y29tcG9zaXRlPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgIDwvZGlhOm9iamVjdD4KKyAgICA8ZGlhOm9iamVjdCB0eXBlPSJTdGFuZGFyZCAtIEFyYyIgdmVyc2lvbj0iMCIgaWQ9Ik8xOSI+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfcG9zIj4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjEzLjI1LDMuOSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX2JiIj4KKyAgICAgICAgPGRpYTpyZWN0YW5nbGUgdmFsPSI2LjA5OTM3LDMuODM4MTg7MTMuMzExOCwyNC4xODU2Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJjb25uX2VuZHBvaW50cyI+CisgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIxMy4yNSwzLjkiLz4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjcuNSwyNCIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iY3VydmVfZGlzdGFuY2UiPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIzLjczMzIxNzE0NjI0MDQ0ODQiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVuZF9hcnJvdyI+CisgICAgICAgIDxkaWE6ZW51bSB2YWw9IjIyIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbmRfYXJyb3dfbGVuZ3RoIj4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC41Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbmRfYXJyb3dfd2lkdGgiPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIwLjUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6Y29ubmVjdGlvbnM+CisgICAgICAgIDxkaWE6Y29ubmVjdGlvbiBoYW5kbGU9IjAiIHRvPSJPOCIgY29ubmVjdGlvbj0iMTIiLz4KKyAgICAgICAgPGRpYTpjb25uZWN0aW9uIGhhbmRsZT0iMSIgdG89Ik83IiBjb25uZWN0aW9uPSIxIi8+CisgICAgICA8L2RpYTpjb25uZWN0aW9ucz4KKyAgICA8L2RpYTpvYmplY3Q+CisgICAgPGRpYTpvYmplY3QgdHlwZT0iRmxvd2NoYXJ0IC0gQm94IiB2ZXJzaW9uPSIwIiBpZD0iTzIwIj4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9wb3MiPgorICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMTcsMjUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9iYiI+CisgICAgICAgIDxkaWE6cmVjdGFuZ2xlIHZhbD0iMTYuOTUsMjQuOTU7MzUuMDUsMjcuMDUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVsZW1fY29ybmVyIj4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjE3LDI1Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbGVtX3dpZHRoIj4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMTgiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVsZW1faGVpZ2h0Ij4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMiIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iaW5uZXJfY29sb3IiPgorICAgICAgICA8ZGlhOmNvbG9yIHZhbD0iI2U1ZTVlNSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ic2hvd19iYWNrZ3JvdW5kIj4KKyAgICAgICAgPGRpYTpib29sZWFuIHZhbD0idHJ1ZSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0icGFkZGluZyI+CisgICAgICAgIDxkaWE6cmVhbCB2YWw9IjAuNSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0idGV4dCI+CisgICAgICAgIDxkaWE6Y29tcG9zaXRlIHR5cGU9InRleHQiPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InN0cmluZyI+CisgICAgICAgICAgICA8ZGlhOnN0cmluZz4jUHl0aG9uL290aGVyIFBMIGJhc2VkIHRvb2xzIzwvZGlhOnN0cmluZz4KKyAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZm9udCI+CisgICAgICAgICAgICA8ZGlhOmZvbnQgZmFtaWx5PSJzYW5zIiBzdHlsZT0iMCIgbmFtZT0iSGVsdmV0aWNhIi8+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImhlaWdodCI+CisgICAgICAgICAgICA8ZGlhOnJlYWwgdmFsPSIwLjgwMDAwMDAwMDAwMDAwMDA0Ii8+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InBvcyI+CisgICAgICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMjYsMjYuMTUiLz4KKyAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iY29sb3IiPgorICAgICAgICAgICAgPGRpYTpjb2xvciB2YWw9IiMwMDAwMDAiLz4KKyAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iYWxpZ25tZW50Ij4KKyAgICAgICAgICAgIDxkaWE6ZW51bSB2YWw9IjEiLz4KKyAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDwvZGlhOmNvbXBvc2l0ZT4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICA8L2RpYTpvYmplY3Q+CisgICAgPGRpYTpvYmplY3QgdHlwZT0iU3RhbmRhcmQgLSBMaW5lIiB2ZXJzaW9uPSIwIiBpZD0iTzIxIj4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9wb3MiPgorICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMTQuNSwyMiIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX2JiIj4KKyAgICAgICAgPGRpYTpyZWN0YW5nbGUgdmFsPSIxNC40MzQzLDIxLjkzNDM7MjEuNzQyOSwyNS40NzkzIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJjb25uX2VuZHBvaW50cyI+CisgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIxNC41LDIyIi8+CisgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIyMS41LDI1Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJudW1jcCI+CisgICAgICAgIDxkaWE6aW50IHZhbD0iMSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZW5kX2Fycm93Ij4KKyAgICAgICAgPGRpYTplbnVtIHZhbD0iMjIiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVuZF9hcnJvd19sZW5ndGgiPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIwLjUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVuZF9hcnJvd193aWR0aCI+CisgICAgICAgIDxkaWE6cmVhbCB2YWw9IjAuNSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTpjb25uZWN0aW9ucz4KKyAgICAgICAgPGRpYTpjb25uZWN0aW9uIGhhbmRsZT0iMCIgdG89Ik82IiBjb25uZWN0aW9uPSIxNCIvPgorICAgICAgICA8ZGlhOmNvbm5lY3Rpb24gaGFuZGxlPSIxIiB0bz0iTzIwIiBjb25uZWN0aW9uPSIxIi8+CisgICAgICA8L2RpYTpjb25uZWN0aW9ucz4KKyAgICA8L2RpYTpvYmplY3Q+CisgICAgPGRpYTpvYmplY3QgdHlwZT0iU3RhbmRhcmQgLSBMaW5lIiB2ZXJzaW9uPSIwIiBpZD0iTzIyIj4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9wb3MiPgorICAgICAgICA8ZGlhOnBvaW50IHZhbD0iNy41LDI2Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfYmIiPgorICAgICAgICA8ZGlhOnJlY3RhbmdsZSB2YWw9IjcuNDM3NzQsMjUuOTM3Nzs5LjQ5MzI4LDMxLjE5MTYiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImNvbm5fZW5kcG9pbnRzIj4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjcuNSwyNiIvPgorICAgICAgICA8ZGlhOnBvaW50IHZhbD0iOSwzMSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ibnVtY3AiPgorICAgICAgICA8ZGlhOmludCB2YWw9IjEiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVuZF9hcnJvdyI+CisgICAgICAgIDxkaWE6ZW51bSB2YWw9IjIyIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbmRfYXJyb3dfbGVuZ3RoIj4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC41Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbmRfYXJyb3dfd2lkdGgiPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIwLjUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6Y29ubmVjdGlvbnM+CisgICAgICAgIDxkaWE6Y29ubmVjdGlvbiBoYW5kbGU9IjAiIHRvPSJPNyIgY29ubmVjdGlvbj0iMTIiLz4KKyAgICAgICAgPGRpYTpjb25uZWN0aW9uIGhhbmRsZT0iMSIgdG89Ik8yMyIgY29ubmVjdGlvbj0iMyIvPgorICAgICAgPC9kaWE6Y29ubmVjdGlvbnM+CisgICAgPC9kaWE6b2JqZWN0PgorICAgIDxkaWE6b2JqZWN0IHR5cGU9IkZsb3djaGFydCAtIEJveCIgdmVyc2lvbj0iMCIgaWQ9Ik8yMyI+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfcG9zIj4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjMsMzEiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9iYiI+CisgICAgICAgIDxkaWE6cmVjdGFuZ2xlIHZhbD0iMi45NSwzMC45NTsxMS4wNSwzMi45NSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZWxlbV9jb3JuZXIiPgorICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMywzMSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZWxlbV93aWR0aCI+CisgICAgICAgIDxkaWE6cmVhbCB2YWw9IjgiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVsZW1faGVpZ2h0Ij4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMS45MDAwMDAwMDAwMDAwMDAxIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJzaG93X2JhY2tncm91bmQiPgorICAgICAgICA8ZGlhOmJvb2xlYW4gdmFsPSJ0cnVlIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJwYWRkaW5nIj4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC41Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJ0ZXh0Ij4KKyAgICAgICAgPGRpYTpjb21wb3NpdGUgdHlwZT0idGV4dCI+CisgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ic3RyaW5nIj4KKyAgICAgICAgICAgIDxkaWE6c3RyaW5nPiNhdmFoaS1jb21wYXQtbGliZG5zX3NkIzwvZGlhOnN0cmluZz4KKyAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZm9udCI+CisgICAgICAgICAgICA8ZGlhOmZvbnQgZmFtaWx5PSJzYW5zIiBzdHlsZT0iMCIgbmFtZT0iSGVsdmV0aWNhIi8+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImhlaWdodCI+CisgICAgICAgICAgICA8ZGlhOnJlYWwgdmFsPSIwLjgwMDAwMDAwMDAwMDAwMDA0Ii8+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InBvcyI+CisgICAgICAgICAgICA8ZGlhOnBvaW50IHZhbD0iNywzMi4xIi8+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImNvbG9yIj4KKyAgICAgICAgICAgIDxkaWE6Y29sb3IgdmFsPSIjMDAwMDAwIi8+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImFsaWdubWVudCI+CisgICAgICAgICAgICA8ZGlhOmVudW0gdmFsPSIxIi8+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8L2RpYTpjb21wb3NpdGU+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgPC9kaWE6b2JqZWN0PgorICAgIDxkaWE6b2JqZWN0IHR5cGU9IkZsb3djaGFydCAtIEJveCIgdmVyc2lvbj0iMCIgaWQ9Ik8yNCI+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfcG9zIj4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjEyLDMxIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfYmIiPgorICAgICAgICA8ZGlhOnJlY3RhbmdsZSB2YWw9IjExLjk1LDMwLjk1OzE5LjA1LDMyLjk1Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbGVtX2Nvcm5lciI+CisgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIxMiwzMSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZWxlbV93aWR0aCI+CisgICAgICAgIDxkaWE6cmVhbCB2YWw9IjciLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVsZW1faGVpZ2h0Ij4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMS45MDAwMDAwMDAwMDAwMDAxIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJzaG93X2JhY2tncm91bmQiPgorICAgICAgICA8ZGlhOmJvb2xlYW4gdmFsPSJ0cnVlIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJwYWRkaW5nIj4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC41Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJ0ZXh0Ij4KKyAgICAgICAgPGRpYTpjb21wb3NpdGUgdHlwZT0idGV4dCI+CisgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ic3RyaW5nIj4KKyAgICAgICAgICAgIDxkaWE6c3RyaW5nPiNhdmFoaS1jb21wYXQtaG93bCM8L2RpYTpzdHJpbmc+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImZvbnQiPgorICAgICAgICAgICAgPGRpYTpmb250IGZhbWlseT0ic2FucyIgc3R5bGU9IjAiIG5hbWU9IkhlbHZldGljYSIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJoZWlnaHQiPgorICAgICAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC44MDAwMDAwMDAwMDAwMDAwNCIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJwb3MiPgorICAgICAgICAgICAgPGRpYTpwb2ludCB2YWw9IjE1LjUsMzIuMSIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJjb2xvciI+CisgICAgICAgICAgICA8ZGlhOmNvbG9yIHZhbD0iIzAwMDAwMCIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJhbGlnbm1lbnQiPgorICAgICAgICAgICAgPGRpYTplbnVtIHZhbD0iMSIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPC9kaWE6Y29tcG9zaXRlPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgIDwvZGlhOm9iamVjdD4KKyAgICA8ZGlhOm9iamVjdCB0eXBlPSJTdGFuZGFyZCAtIExpbmUiIHZlcnNpb249IjAiIGlkPSJPMjUiPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX3BvcyI+CisgICAgICAgIDxkaWE6cG9pbnQgdmFsPSI5LDI2Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfYmIiPgorICAgICAgICA8ZGlhOnJlY3RhbmdsZSB2YWw9IjguOTI5ODgsMjUuOTI5OTsxNS44NDQ1LDMxLjQyNjgiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImNvbm5fZW5kcG9pbnRzIj4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjksMjYiLz4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjE1LjUsMzEiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im51bWNwIj4KKyAgICAgICAgPGRpYTppbnQgdmFsPSIxIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbmRfYXJyb3ciPgorICAgICAgICA8ZGlhOmVudW0gdmFsPSIyMiIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZW5kX2Fycm93X2xlbmd0aCI+CisgICAgICAgIDxkaWE6cmVhbCB2YWw9IjAuNSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZW5kX2Fycm93X3dpZHRoIj4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC41Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmNvbm5lY3Rpb25zPgorICAgICAgICA8ZGlhOmNvbm5lY3Rpb24gaGFuZGxlPSIwIiB0bz0iTzciIGNvbm5lY3Rpb249IjEzIi8+CisgICAgICAgIDxkaWE6Y29ubmVjdGlvbiBoYW5kbGU9IjEiIHRvPSJPMjQiIGNvbm5lY3Rpb249IjIiLz4KKyAgICAgIDwvZGlhOmNvbm5lY3Rpb25zPgorICAgIDwvZGlhOm9iamVjdD4KKyAgICA8ZGlhOm9iamVjdCB0eXBlPSJGbG93Y2hhcnQgLSBCb3giIHZlcnNpb249IjAiIGlkPSJPMjYiPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX3BvcyI+CisgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIyOSwzMSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX2JiIj4KKyAgICAgICAgPGRpYTpyZWN0YW5nbGUgdmFsPSIyOC45NSwzMC45NTs0MC4wNSwzMi45NSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZWxlbV9jb3JuZXIiPgorICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMjksMzEiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVsZW1fd2lkdGgiPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIxMSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZWxlbV9oZWlnaHQiPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIxLjkwMDAwMDAwMDAwMDAwMDEiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImlubmVyX2NvbG9yIj4KKyAgICAgICAgPGRpYTpjb2xvciB2YWw9IiNlNWU1ZTUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InNob3dfYmFja2dyb3VuZCI+CisgICAgICAgIDxkaWE6Ym9vbGVhbiB2YWw9InRydWUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InBhZGRpbmciPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIwLjUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InRleHQiPgorICAgICAgICA8ZGlhOmNvbXBvc2l0ZSB0eXBlPSJ0ZXh0Ij4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJzdHJpbmciPgorICAgICAgICAgICAgPGRpYTpzdHJpbmc+I2tkbnNzZC1hdmFoaSM8L2RpYTpzdHJpbmc+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImZvbnQiPgorICAgICAgICAgICAgPGRpYTpmb250IGZhbWlseT0ic2FucyIgc3R5bGU9IjAiIG5hbWU9IkhlbHZldGljYSIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJoZWlnaHQiPgorICAgICAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC44MDAwMDAwMDAwMDAwMDAwNCIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJwb3MiPgorICAgICAgICAgICAgPGRpYTpwb2ludCB2YWw9IjM0LjUsMzIuMSIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJjb2xvciI+CisgICAgICAgICAgICA8ZGlhOmNvbG9yIHZhbD0iIzAwMDAwMCIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJhbGlnbm1lbnQiPgorICAgICAgICAgICAgPGRpYTplbnVtIHZhbD0iMSIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPC9kaWE6Y29tcG9zaXRlPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgIDwvZGlhOm9iamVjdD4KKyAgICA8ZGlhOm9iamVjdCB0eXBlPSJTdGFuZGFyZCAtIExpbmUiIHZlcnNpb249IjAiIGlkPSJPMjciPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX3BvcyI+CisgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIxMiwyNiIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX2JiIj4KKyAgICAgICAgPGRpYTpyZWN0YW5nbGUgdmFsPSIxMS45NDAzLDI1Ljk0MDM7MzQuNjU3MywzMS40OTg5Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJjb25uX2VuZHBvaW50cyI+CisgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIxMiwyNiIvPgorICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMzQuNSwzMSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ibnVtY3AiPgorICAgICAgICA8ZGlhOmludCB2YWw9IjEiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVuZF9hcnJvdyI+CisgICAgICAgIDxkaWE6ZW51bSB2YWw9IjIyIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbmRfYXJyb3dfbGVuZ3RoIj4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC41Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbmRfYXJyb3dfd2lkdGgiPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIwLjUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6Y29ubmVjdGlvbnM+CisgICAgICAgIDxkaWE6Y29ubmVjdGlvbiBoYW5kbGU9IjAiIHRvPSJPNyIgY29ubmVjdGlvbj0iMTUiLz4KKyAgICAgICAgPGRpYTpjb25uZWN0aW9uIGhhbmRsZT0iMSIgdG89Ik8yNiIgY29ubmVjdGlvbj0iMiIvPgorICAgICAgPC9kaWE6Y29ubmVjdGlvbnM+CisgICAgPC9kaWE6b2JqZWN0PgorICAgIDxkaWE6b2JqZWN0IHR5cGU9IkZsb3djaGFydCAtIEJveCIgdmVyc2lvbj0iMCIgaWQ9Ik8yOCI+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfcG9zIj4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjMsMzQiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9iYiI+CisgICAgICAgIDxkaWE6cmVjdGFuZ2xlIHZhbD0iMi45NSwzMy45NTsxMSwzNS45NSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZWxlbV9jb3JuZXIiPgorICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMywzNCIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZWxlbV93aWR0aCI+CisgICAgICAgIDxkaWE6cmVhbCB2YWw9IjcuOTQ5OTk5OTk5OTk5OTk5MyIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZWxlbV9oZWlnaHQiPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIxLjkwMDAwMDAwMDAwMDAwMDEiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImlubmVyX2NvbG9yIj4KKyAgICAgICAgPGRpYTpjb2xvciB2YWw9IiNlNWU1ZTUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InNob3dfYmFja2dyb3VuZCI+CisgICAgICAgIDxkaWE6Ym9vbGVhbiB2YWw9InRydWUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InBhZGRpbmciPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIwLjUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InRleHQiPgorICAgICAgICA8ZGlhOmNvbXBvc2l0ZSB0eXBlPSJ0ZXh0Ij4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJzdHJpbmciPgorICAgICAgICAgICAgPGRpYTpzdHJpbmc+I0xlZ2FjeSBCb25qb3VyIEFwcHMjPC9kaWE6c3RyaW5nPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJmb250Ij4KKyAgICAgICAgICAgIDxkaWE6Zm9udCBmYW1pbHk9InNhbnMiIHN0eWxlPSIwIiBuYW1lPSJIZWx2ZXRpY2EiLz4KKyAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iaGVpZ2h0Ij4KKyAgICAgICAgICAgIDxkaWE6cmVhbCB2YWw9IjAuODAwMDAwMDAwMDAwMDAwMDQiLz4KKyAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0icG9zIj4KKyAgICAgICAgICAgIDxkaWE6cG9pbnQgdmFsPSI2Ljk3NSwzNS4xIi8+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImNvbG9yIj4KKyAgICAgICAgICAgIDxkaWE6Y29sb3IgdmFsPSIjMDAwMDAwIi8+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImFsaWdubWVudCI+CisgICAgICAgICAgICA8ZGlhOmVudW0gdmFsPSIxIi8+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8L2RpYTpjb21wb3NpdGU+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgPC9kaWE6b2JqZWN0PgorICAgIDxkaWE6b2JqZWN0IHR5cGU9IkZsb3djaGFydCAtIEJveCIgdmVyc2lvbj0iMCIgaWQ9Ik8yOSI+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfcG9zIj4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjEyLDM0Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfYmIiPgorICAgICAgICA8ZGlhOnJlY3RhbmdsZSB2YWw9IjExLjk1LDMzLjk1OzE5LjA1LDM1Ljk1Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbGVtX2Nvcm5lciI+CisgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIxMiwzNCIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZWxlbV93aWR0aCI+CisgICAgICAgIDxkaWE6cmVhbCB2YWw9IjciLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVsZW1faGVpZ2h0Ij4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMS45MDAwMDAwMDAwMDAwMDAxIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJpbm5lcl9jb2xvciI+CisgICAgICAgIDxkaWE6Y29sb3IgdmFsPSIjZTVlNWU1Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJzaG93X2JhY2tncm91bmQiPgorICAgICAgICA8ZGlhOmJvb2xlYW4gdmFsPSJ0cnVlIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJwYWRkaW5nIj4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC41Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJ0ZXh0Ij4KKyAgICAgICAgPGRpYTpjb21wb3NpdGUgdHlwZT0idGV4dCI+CisgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ic3RyaW5nIj4KKyAgICAgICAgICAgIDxkaWE6c3RyaW5nPiNMZWdhY3kgSE9XTCBBcHBzIzwvZGlhOnN0cmluZz4KKyAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZm9udCI+CisgICAgICAgICAgICA8ZGlhOmZvbnQgZmFtaWx5PSJzYW5zIiBzdHlsZT0iMCIgbmFtZT0iSGVsdmV0aWNhIi8+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImhlaWdodCI+CisgICAgICAgICAgICA8ZGlhOnJlYWwgdmFsPSIwLjgwMDAwMDAwMDAwMDAwMDA0Ii8+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InBvcyI+CisgICAgICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMTUuNSwzNS4xIi8+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImNvbG9yIj4KKyAgICAgICAgICAgIDxkaWE6Y29sb3IgdmFsPSIjMDAwMDAwIi8+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImFsaWdubWVudCI+CisgICAgICAgICAgICA8ZGlhOmVudW0gdmFsPSIxIi8+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8L2RpYTpjb21wb3NpdGU+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgPC9kaWE6b2JqZWN0PgorICAgIDxkaWE6b2JqZWN0IHR5cGU9IkZsb3djaGFydCAtIEJveCIgdmVyc2lvbj0iMCIgaWQ9Ik8zMCI+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfcG9zIj4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjI5LDM0Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfYmIiPgorICAgICAgICA8ZGlhOnJlY3RhbmdsZSB2YWw9IjI4Ljk1LDMzLjk1OzQwLjA1LDM1Ljk1Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbGVtX2Nvcm5lciI+CisgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIyOSwzNCIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZWxlbV93aWR0aCI+CisgICAgICAgIDxkaWE6cmVhbCB2YWw9IjExIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbGVtX2hlaWdodCI+CisgICAgICAgIDxkaWE6cmVhbCB2YWw9IjEuOTAwMDAwMDAwMDAwMDAwMSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iaW5uZXJfY29sb3IiPgorICAgICAgICA8ZGlhOmNvbG9yIHZhbD0iI2U1ZTVlNSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ic2hvd19iYWNrZ3JvdW5kIj4KKyAgICAgICAgPGRpYTpib29sZWFuIHZhbD0idHJ1ZSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0icGFkZGluZyI+CisgICAgICAgIDxkaWE6cmVhbCB2YWw9IjAuNSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0idGV4dCI+CisgICAgICAgIDxkaWE6Y29tcG9zaXRlIHR5cGU9InRleHQiPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InN0cmluZyI+CisgICAgICAgICAgICA8ZGlhOnN0cmluZz4jS0RFIEFwcGxpY2F0aW9ucyB1c2luZyBLRE5TU0QjPC9kaWE6c3RyaW5nPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJmb250Ij4KKyAgICAgICAgICAgIDxkaWE6Zm9udCBmYW1pbHk9InNhbnMiIHN0eWxlPSIwIiBuYW1lPSJIZWx2ZXRpY2EiLz4KKyAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iaGVpZ2h0Ij4KKyAgICAgICAgICAgIDxkaWE6cmVhbCB2YWw9IjAuODAwMDAwMDAwMDAwMDAwMDQiLz4KKyAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0icG9zIj4KKyAgICAgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIzNC41LDM1LjEiLz4KKyAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iY29sb3IiPgorICAgICAgICAgICAgPGRpYTpjb2xvciB2YWw9IiMwMDAwMDAiLz4KKyAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iYWxpZ25tZW50Ij4KKyAgICAgICAgICAgIDxkaWE6ZW51bSB2YWw9IjEiLz4KKyAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDwvZGlhOmNvbXBvc2l0ZT4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICA8L2RpYTpvYmplY3Q+CisgICAgPGRpYTpvYmplY3QgdHlwZT0iU3RhbmRhcmQgLSBMaW5lIiB2ZXJzaW9uPSIwIiBpZD0iTzMxIj4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9wb3MiPgorICAgICAgICA8ZGlhOnBvaW50IHZhbD0iNywzMi45Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfYmIiPgorICAgICAgICA8ZGlhOnJlY3RhbmdsZSB2YWw9IjYuNDczOTksMzIuODQ4OTs3LjQ3NjAxLDM0LjA2MTMiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImNvbm5fZW5kcG9pbnRzIj4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjcsMzIuOSIvPgorICAgICAgICA8ZGlhOnBvaW50IHZhbD0iNi45NzUsMzQiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im51bWNwIj4KKyAgICAgICAgPGRpYTppbnQgdmFsPSIxIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbmRfYXJyb3ciPgorICAgICAgICA8ZGlhOmVudW0gdmFsPSIyMiIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZW5kX2Fycm93X2xlbmd0aCI+CisgICAgICAgIDxkaWE6cmVhbCB2YWw9IjAuNSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZW5kX2Fycm93X3dpZHRoIj4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC41Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmNvbm5lY3Rpb25zPgorICAgICAgICA8ZGlhOmNvbm5lY3Rpb24gaGFuZGxlPSIwIiB0bz0iTzIzIiBjb25uZWN0aW9uPSIxMyIvPgorICAgICAgICA8ZGlhOmNvbm5lY3Rpb24gaGFuZGxlPSIxIiB0bz0iTzI4IiBjb25uZWN0aW9uPSIyIi8+CisgICAgICA8L2RpYTpjb25uZWN0aW9ucz4KKyAgICA8L2RpYTpvYmplY3Q+CisgICAgPGRpYTpvYmplY3QgdHlwZT0iU3RhbmRhcmQgLSBMaW5lIiB2ZXJzaW9uPSIwIiBpZD0iTzMyIj4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9wb3MiPgorICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMTUuNSwzMi45Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfYmIiPgorICAgICAgICA8ZGlhOnJlY3RhbmdsZSB2YWw9IjE1LDMyLjg1OzE2LDM0LjA1Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJjb25uX2VuZHBvaW50cyI+CisgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIxNS41LDMyLjkiLz4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjE1LjUsMzQiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im51bWNwIj4KKyAgICAgICAgPGRpYTppbnQgdmFsPSIxIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbmRfYXJyb3ciPgorICAgICAgICA8ZGlhOmVudW0gdmFsPSIyMiIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZW5kX2Fycm93X2xlbmd0aCI+CisgICAgICAgIDxkaWE6cmVhbCB2YWw9IjAuNSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZW5kX2Fycm93X3dpZHRoIj4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC41Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmNvbm5lY3Rpb25zPgorICAgICAgICA8ZGlhOmNvbm5lY3Rpb24gaGFuZGxlPSIwIiB0bz0iTzI0IiBjb25uZWN0aW9uPSIxMyIvPgorICAgICAgICA8ZGlhOmNvbm5lY3Rpb24gaGFuZGxlPSIxIiB0bz0iTzI5IiBjb25uZWN0aW9uPSIyIi8+CisgICAgICA8L2RpYTpjb25uZWN0aW9ucz4KKyAgICA8L2RpYTpvYmplY3Q+CisgICAgPGRpYTpvYmplY3QgdHlwZT0iU3RhbmRhcmQgLSBMaW5lIiB2ZXJzaW9uPSIwIiBpZD0iTzMzIj4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9wb3MiPgorICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMzQuNSwzMi45Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfYmIiPgorICAgICAgICA8ZGlhOnJlY3RhbmdsZSB2YWw9IjM0LDMyLjg1OzM1LDM0LjA1Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJjb25uX2VuZHBvaW50cyI+CisgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIzNC41LDMyLjkiLz4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjM0LjUsMzQiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im51bWNwIj4KKyAgICAgICAgPGRpYTppbnQgdmFsPSIxIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbmRfYXJyb3ciPgorICAgICAgICA8ZGlhOmVudW0gdmFsPSIyMiIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZW5kX2Fycm93X2xlbmd0aCI+CisgICAgICAgIDxkaWE6cmVhbCB2YWw9IjAuNSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZW5kX2Fycm93X3dpZHRoIj4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC41Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmNvbm5lY3Rpb25zPgorICAgICAgICA8ZGlhOmNvbm5lY3Rpb24gaGFuZGxlPSIwIiB0bz0iTzI2IiBjb25uZWN0aW9uPSIxMyIvPgorICAgICAgICA8ZGlhOmNvbm5lY3Rpb24gaGFuZGxlPSIxIiB0bz0iTzMwIiBjb25uZWN0aW9uPSIyIi8+CisgICAgICA8L2RpYTpjb25uZWN0aW9ucz4KKyAgICA8L2RpYTpvYmplY3Q+CisgICAgPGRpYTpvYmplY3QgdHlwZT0iRmxvd2NoYXJ0IC0gQm94IiB2ZXJzaW9uPSIwIiBpZD0iTzM0Ij4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9wb3MiPgorICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMjAsMzEiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9iYiI+CisgICAgICAgIDxkaWE6cmVjdGFuZ2xlIHZhbD0iMTkuOTUsMzAuOTU7MjguMDUsMzIuOTUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVsZW1fY29ybmVyIj4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjIwLDMxIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbGVtX3dpZHRoIj4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iOCIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZWxlbV9oZWlnaHQiPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIxLjkwMDAwMDAwMDAwMDAwMDEiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InNob3dfYmFja2dyb3VuZCI+CisgICAgICAgIDxkaWE6Ym9vbGVhbiB2YWw9InRydWUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InBhZGRpbmciPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIwLjUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InRleHQiPgorICAgICAgICA8ZGlhOmNvbXBvc2l0ZSB0eXBlPSJ0ZXh0Ij4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJzdHJpbmciPgorICAgICAgICAgICAgPGRpYTpzdHJpbmc+I2F2YWhpLXNoYXJwIzwvZGlhOnN0cmluZz4KKyAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZm9udCI+CisgICAgICAgICAgICA8ZGlhOmZvbnQgZmFtaWx5PSJzYW5zIiBzdHlsZT0iMCIgbmFtZT0iSGVsdmV0aWNhIi8+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImhlaWdodCI+CisgICAgICAgICAgICA8ZGlhOnJlYWwgdmFsPSIwLjgwMDAwMDAwMDAwMDAwMDA0Ii8+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InBvcyI+CisgICAgICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMjQsMzIuMSIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJjb2xvciI+CisgICAgICAgICAgICA8ZGlhOmNvbG9yIHZhbD0iIzAwMDAwMCIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJhbGlnbm1lbnQiPgorICAgICAgICAgICAgPGRpYTplbnVtIHZhbD0iMSIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPC9kaWE6Y29tcG9zaXRlPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgIDwvZGlhOm9iamVjdD4KKyAgICA8ZGlhOm9iamVjdCB0eXBlPSJGbG93Y2hhcnQgLSBCb3giIHZlcnNpb249IjAiIGlkPSJPMzUiPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX3BvcyI+CisgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIyMCwzNCIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX2JiIj4KKyAgICAgICAgPGRpYTpyZWN0YW5nbGUgdmFsPSIxOS45NSwzMy45NTsyOC4wNSwzNS45NSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZWxlbV9jb3JuZXIiPgorICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMjAsMzQiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVsZW1fd2lkdGgiPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSI4Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbGVtX2hlaWdodCI+CisgICAgICAgIDxkaWE6cmVhbCB2YWw9IjEuOTAwMDAwMDAwMDAwMDAwMSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iaW5uZXJfY29sb3IiPgorICAgICAgICA8ZGlhOmNvbG9yIHZhbD0iI2U1ZTVlNSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ic2hvd19iYWNrZ3JvdW5kIj4KKyAgICAgICAgPGRpYTpib29sZWFuIHZhbD0idHJ1ZSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0icGFkZGluZyI+CisgICAgICAgIDxkaWE6cmVhbCB2YWw9IjAuNSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0idGV4dCI+CisgICAgICAgIDxkaWE6Y29tcG9zaXRlIHR5cGU9InRleHQiPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InN0cmluZyI+CisgICAgICAgICAgICA8ZGlhOnN0cmluZz4jTW9uby9DIyBiYXNlZCBBcHBzIzwvZGlhOnN0cmluZz4KKyAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZm9udCI+CisgICAgICAgICAgICA8ZGlhOmZvbnQgZmFtaWx5PSJzYW5zIiBzdHlsZT0iMCIgbmFtZT0iSGVsdmV0aWNhIi8+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImhlaWdodCI+CisgICAgICAgICAgICA8ZGlhOnJlYWwgdmFsPSIwLjgwMDAwMDAwMDAwMDAwMDA0Ii8+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InBvcyI+CisgICAgICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMjQsMzUuMSIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJjb2xvciI+CisgICAgICAgICAgICA8ZGlhOmNvbG9yIHZhbD0iIzAwMDAwMCIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJhbGlnbm1lbnQiPgorICAgICAgICAgICAgPGRpYTplbnVtIHZhbD0iMSIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPC9kaWE6Y29tcG9zaXRlPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgIDwvZGlhOm9iamVjdD4KKyAgICA8ZGlhOm9iamVjdCB0eXBlPSJTdGFuZGFyZCAtIExpbmUiIHZlcnNpb249IjAiIGlkPSJPMzYiPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX3BvcyI+CisgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIxMC41LDI2Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfYmIiPgorICAgICAgICA8ZGlhOnJlY3RhbmdsZSB2YWw9IjEwLjQzNTcsMjUuOTM1NzsyNC4yMjA1LDMxLjQ4NjIiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImNvbm5fZW5kcG9pbnRzIj4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjEwLjUsMjYiLz4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjI0LDMxIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJudW1jcCI+CisgICAgICAgIDxkaWE6aW50IHZhbD0iMSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZW5kX2Fycm93Ij4KKyAgICAgICAgPGRpYTplbnVtIHZhbD0iMjIiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVuZF9hcnJvd19sZW5ndGgiPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIwLjUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVuZF9hcnJvd193aWR0aCI+CisgICAgICAgIDxkaWE6cmVhbCB2YWw9IjAuNSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTpjb25uZWN0aW9ucz4KKyAgICAgICAgPGRpYTpjb25uZWN0aW9uIGhhbmRsZT0iMCIgdG89Ik83IiBjb25uZWN0aW9uPSIxNCIvPgorICAgICAgICA8ZGlhOmNvbm5lY3Rpb24gaGFuZGxlPSIxIiB0bz0iTzM0IiBjb25uZWN0aW9uPSIyIi8+CisgICAgICA8L2RpYTpjb25uZWN0aW9ucz4KKyAgICA8L2RpYTpvYmplY3Q+CisgICAgPGRpYTpvYmplY3QgdHlwZT0iU3RhbmRhcmQgLSBMaW5lIiB2ZXJzaW9uPSIwIiBpZD0iTzM3Ij4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9wb3MiPgorICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMjQsMzIuOSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX2JiIj4KKyAgICAgICAgPGRpYTpyZWN0YW5nbGUgdmFsPSIyMy41LDMyLjg1OzI0LjUsMzQuMDUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImNvbm5fZW5kcG9pbnRzIj4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjI0LDMyLjkiLz4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjI0LDM0Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJudW1jcCI+CisgICAgICAgIDxkaWE6aW50IHZhbD0iMSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZW5kX2Fycm93Ij4KKyAgICAgICAgPGRpYTplbnVtIHZhbD0iMjIiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVuZF9hcnJvd19sZW5ndGgiPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIwLjUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVuZF9hcnJvd193aWR0aCI+CisgICAgICAgIDxkaWE6cmVhbCB2YWw9IjAuNSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTpjb25uZWN0aW9ucz4KKyAgICAgICAgPGRpYTpjb25uZWN0aW9uIGhhbmRsZT0iMCIgdG89Ik8zNCIgY29ubmVjdGlvbj0iMTMiLz4KKyAgICAgICAgPGRpYTpjb25uZWN0aW9uIGhhbmRsZT0iMSIgdG89Ik8zNSIgY29ubmVjdGlvbj0iMiIvPgorICAgICAgPC9kaWE6Y29ubmVjdGlvbnM+CisgICAgPC9kaWE6b2JqZWN0PgorICA8L2RpYTpsYXllcj4KKzwvZGlhOmRpYWdyYW0+CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvZG9jcy9zZXJ2ZXItc3RhdGVzLmRpYSBiL2F2YWhpLTAuNi4zMS9kb2NzL3NlcnZlci1zdGF0ZXMuZGlhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ZmU0MzcKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvZG9jcy9zZXJ2ZXItc3RhdGVzLmRpYQpAQCAtMCwwICsxLDk3NSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxkaWE6ZGlhZ3JhbSB4bWxuczpkaWE9Imh0dHA6Ly93d3cubHlzYXRvci5saXUuc2UvfmFsbGEvZGlhLyI+CisgIDxkaWE6ZGlhZ3JhbWRhdGE+CisgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iYmFja2dyb3VuZCI+CisgICAgICA8ZGlhOmNvbG9yIHZhbD0iI2ZmZmZmZiIvPgorICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJwYWdlYnJlYWsiPgorICAgICAgPGRpYTpjb2xvciB2YWw9IiMwMDAwOTkiLz4KKyAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0icGFwZXIiPgorICAgICAgPGRpYTpjb21wb3NpdGUgdHlwZT0icGFwZXIiPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIj4KKyAgICAgICAgICA8ZGlhOnN0cmluZz4jQTQjPC9kaWE6c3RyaW5nPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InRtYXJnaW4iPgorICAgICAgICAgIDxkaWE6cmVhbCB2YWw9IjIuODIyMjAwMDU5ODkwNzQ3MSIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImJtYXJnaW4iPgorICAgICAgICAgIDxkaWE6cmVhbCB2YWw9IjIuODIyMjAwMDU5ODkwNzQ3MSIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImxtYXJnaW4iPgorICAgICAgICAgIDxkaWE6cmVhbCB2YWw9IjIuODIyMjAwMDU5ODkwNzQ3MSIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InJtYXJnaW4iPgorICAgICAgICAgIDxkaWE6cmVhbCB2YWw9IjIuODIyMjAwMDU5ODkwNzQ3MSIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImlzX3BvcnRyYWl0Ij4KKyAgICAgICAgICA8ZGlhOmJvb2xlYW4gdmFsPSJ0cnVlIi8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ic2NhbGluZyI+CisgICAgICAgICAgPGRpYTpyZWFsIHZhbD0iMSIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImZpdHRvIj4KKyAgICAgICAgICA8ZGlhOmJvb2xlYW4gdmFsPSJmYWxzZSIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8L2RpYTpjb21wb3NpdGU+CisgICAgPC9kaWE6YXR0cmlidXRlPgorICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImdyaWQiPgorICAgICAgPGRpYTpjb21wb3NpdGUgdHlwZT0iZ3JpZCI+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9IndpZHRoX3giPgorICAgICAgICAgIDxkaWE6cmVhbCB2YWw9IjEiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJ3aWR0aF95Ij4KKyAgICAgICAgICA8ZGlhOnJlYWwgdmFsPSIxIi8+CisgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0idmlzaWJsZV94Ij4KKyAgICAgICAgICA8ZGlhOmludCB2YWw9IjEiLz4KKyAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJ2aXNpYmxlX3kiPgorICAgICAgICAgIDxkaWE6aW50IHZhbD0iMSIvPgorICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgIDxkaWE6Y29tcG9zaXRlIHR5cGU9ImNvbG9yIi8+CisgICAgICA8L2RpYTpjb21wb3NpdGU+CisgICAgPC9kaWE6YXR0cmlidXRlPgorICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImNvbG9yIj4KKyAgICAgIDxkaWE6Y29sb3IgdmFsPSIjZDhlNWU1Ii8+CisgICAgPC9kaWE6YXR0cmlidXRlPgorICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Imd1aWRlcyI+CisgICAgICA8ZGlhOmNvbXBvc2l0ZSB0eXBlPSJndWlkZXMiPgorICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJoZ3VpZGVzIi8+CisgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InZndWlkZXMiLz4KKyAgICAgIDwvZGlhOmNvbXBvc2l0ZT4KKyAgICA8L2RpYTphdHRyaWJ1dGU+CisgIDwvZGlhOmRpYWdyYW1kYXRhPgorICA8ZGlhOmxheWVyIG5hbWU9IkJhY2tncm91bmQiIHZpc2libGU9InRydWUiPgorICAgIDxkaWE6b2JqZWN0IHR5cGU9Ikdlb21ldHJpYyAtIFBlcmZlY3QgQ2lyY2xlIiB2ZXJzaW9uPSIwIiBpZD0iTzAiPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX3BvcyI+CisgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIxNyw0Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfYmIiPgorICAgICAgICA8ZGlhOnJlY3RhbmdsZSB2YWw9IjE2Ljk1LDMuOTU7MTkuMDUsNi4wNSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZWxlbV9jb3JuZXIiPgorICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMTcsNCIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZWxlbV93aWR0aCI+CisgICAgICAgIDxkaWE6cmVhbCB2YWw9IjIiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVsZW1faGVpZ2h0Ij4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMiIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ibGluZV93aWR0aCI+CisgICAgICAgIDxkaWE6cmVhbCB2YWw9IjAuMTAwMDAwMDAwMDAwMDAwMDEiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImxpbmVfY29sb3VyIj4KKyAgICAgICAgPGRpYTpjb2xvciB2YWw9IiMwMDAwMDAiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImZpbGxfY29sb3VyIj4KKyAgICAgICAgPGRpYTpjb2xvciB2YWw9IiNmZmZmZmYiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InNob3dfYmFja2dyb3VuZCI+CisgICAgICAgIDxkaWE6Ym9vbGVhbiB2YWw9InRydWUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImxpbmVfc3R5bGUiPgorICAgICAgICA8ZGlhOmVudW0gdmFsPSIwIi8+CisgICAgICAgIDxkaWE6cmVhbCB2YWw9IjEiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImZsaXBfaG9yaXpvbnRhbCI+CisgICAgICAgIDxkaWE6Ym9vbGVhbiB2YWw9ImZhbHNlIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJmbGlwX3ZlcnRpY2FsIj4KKyAgICAgICAgPGRpYTpib29sZWFuIHZhbD0iZmFsc2UiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICA8L2RpYTpvYmplY3Q+CisgICAgPGRpYTpvYmplY3QgdHlwZT0iR2VvbWV0cmljIC0gUGVyZmVjdCBDaXJjbGUiIHZlcnNpb249IjAiIGlkPSJPMSI+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfcG9zIj4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjI1LDUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9iYiI+CisgICAgICAgIDxkaWE6cmVjdGFuZ2xlIHZhbD0iMjQuOTUsNC45NTsyNy4wNSw3LjA1Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbGVtX2Nvcm5lciI+CisgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIyNSw1Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbGVtX3dpZHRoIj4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMiIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZWxlbV9oZWlnaHQiPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIyIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJsaW5lX3dpZHRoIj4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC4xMDAwMDAwMDAwMDAwMDAwMSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ibGluZV9jb2xvdXIiPgorICAgICAgICA8ZGlhOmNvbG9yIHZhbD0iIzAwMDAwMCIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZmlsbF9jb2xvdXIiPgorICAgICAgICA8ZGlhOmNvbG9yIHZhbD0iI2ZmZmZmZiIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ic2hvd19iYWNrZ3JvdW5kIj4KKyAgICAgICAgPGRpYTpib29sZWFuIHZhbD0idHJ1ZSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ibGluZV9zdHlsZSI+CisgICAgICAgIDxkaWE6ZW51bSB2YWw9IjAiLz4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZmxpcF9ob3Jpem9udGFsIj4KKyAgICAgICAgPGRpYTpib29sZWFuIHZhbD0iZmFsc2UiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImZsaXBfdmVydGljYWwiPgorICAgICAgICA8ZGlhOmJvb2xlYW4gdmFsPSJmYWxzZSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgIDwvZGlhOm9iamVjdD4KKyAgICA8ZGlhOm9iamVjdCB0eXBlPSJHZW9tZXRyaWMgLSBQZXJmZWN0IENpcmNsZSIgdmVyc2lvbj0iMCIgaWQ9Ik8yIj4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9wb3MiPgorICAgICAgICA8ZGlhOnBvaW50IHZhbD0iNDIsMTAiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9iYiI+CisgICAgICAgIDxkaWE6cmVjdGFuZ2xlIHZhbD0iNDEuOTUsOS45NTs0NC4wNSwxMi4wNSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZWxlbV9jb3JuZXIiPgorICAgICAgICA8ZGlhOnBvaW50IHZhbD0iNDIsMTAiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVsZW1fd2lkdGgiPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIyIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbGVtX2hlaWdodCI+CisgICAgICAgIDxkaWE6cmVhbCB2YWw9IjIiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImxpbmVfd2lkdGgiPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIwLjEwMDAwMDAwMDAwMDAwMDAxIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJsaW5lX2NvbG91ciI+CisgICAgICAgIDxkaWE6Y29sb3IgdmFsPSIjMDAwMDAwIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJmaWxsX2NvbG91ciI+CisgICAgICAgIDxkaWE6Y29sb3IgdmFsPSIjZmZmZmZmIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJzaG93X2JhY2tncm91bmQiPgorICAgICAgICA8ZGlhOmJvb2xlYW4gdmFsPSJ0cnVlIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJsaW5lX3N0eWxlIj4KKyAgICAgICAgPGRpYTplbnVtIHZhbD0iMCIvPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIxIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJmbGlwX2hvcml6b250YWwiPgorICAgICAgICA8ZGlhOmJvb2xlYW4gdmFsPSJmYWxzZSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZmxpcF92ZXJ0aWNhbCI+CisgICAgICAgIDxkaWE6Ym9vbGVhbiB2YWw9ImZhbHNlIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgPC9kaWE6b2JqZWN0PgorICAgIDxkaWE6b2JqZWN0IHR5cGU9Ikdlb21ldHJpYyAtIFBlcmZlY3QgQ2lyY2xlIiB2ZXJzaW9uPSIwIiBpZD0iTzMiPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX3BvcyI+CisgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIxNywxOSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX2JiIj4KKyAgICAgICAgPGRpYTpyZWN0YW5nbGUgdmFsPSIxNi45NSwxOC45NTsxOS4wNSwyMS4wNSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZWxlbV9jb3JuZXIiPgorICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMTcsMTkiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVsZW1fd2lkdGgiPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIyIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbGVtX2hlaWdodCI+CisgICAgICAgIDxkaWE6cmVhbCB2YWw9IjIiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImxpbmVfd2lkdGgiPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIwLjEwMDAwMDAwMDAwMDAwMDAxIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJsaW5lX2NvbG91ciI+CisgICAgICAgIDxkaWE6Y29sb3IgdmFsPSIjMDAwMDAwIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJmaWxsX2NvbG91ciI+CisgICAgICAgIDxkaWE6Y29sb3IgdmFsPSIjZmZmZmZmIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJzaG93X2JhY2tncm91bmQiPgorICAgICAgICA8ZGlhOmJvb2xlYW4gdmFsPSJ0cnVlIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJsaW5lX3N0eWxlIj4KKyAgICAgICAgPGRpYTplbnVtIHZhbD0iMCIvPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIxIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJmbGlwX2hvcml6b250YWwiPgorICAgICAgICA8ZGlhOmJvb2xlYW4gdmFsPSJmYWxzZSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZmxpcF92ZXJ0aWNhbCI+CisgICAgICAgIDxkaWE6Ym9vbGVhbiB2YWw9ImZhbHNlIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgPC9kaWE6b2JqZWN0PgorICAgIDxkaWE6b2JqZWN0IHR5cGU9Ikdlb21ldHJpYyAtIFBlcmZlY3QgQ2lyY2xlIiB2ZXJzaW9uPSIwIiBpZD0iTzQiPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX3BvcyI+CisgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIzNiwyNiIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX2JiIj4KKyAgICAgICAgPGRpYTpyZWN0YW5nbGUgdmFsPSIzNS45NSwyNS45NTszOC4wNSwyOC4wNSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZWxlbV9jb3JuZXIiPgorICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMzYsMjYiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVsZW1fd2lkdGgiPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIyLjAwMDAzMDUxNzUxOTkxNzMiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVsZW1faGVpZ2h0Ij4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMi4wMDAwMzA1MTc1MTk5MTczIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJsaW5lX3dpZHRoIj4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC4xMDAwMDAwMDAwMDAwMDAwMSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ibGluZV9jb2xvdXIiPgorICAgICAgICA8ZGlhOmNvbG9yIHZhbD0iI2JmYmZiZiIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZmlsbF9jb2xvdXIiPgorICAgICAgICA8ZGlhOmNvbG9yIHZhbD0iI2ZmZmZmZiIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ic2hvd19iYWNrZ3JvdW5kIj4KKyAgICAgICAgPGRpYTpib29sZWFuIHZhbD0idHJ1ZSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ibGluZV9zdHlsZSI+CisgICAgICAgIDxkaWE6ZW51bSB2YWw9IjAiLz4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZmxpcF9ob3Jpem9udGFsIj4KKyAgICAgICAgPGRpYTpib29sZWFuIHZhbD0iZmFsc2UiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImZsaXBfdmVydGljYWwiPgorICAgICAgICA8ZGlhOmJvb2xlYW4gdmFsPSJmYWxzZSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgIDwvZGlhOm9iamVjdD4KKyAgICA8ZGlhOm9iamVjdCB0eXBlPSJTdGFuZGFyZCAtIExpbmUiIHZlcnNpb249IjAiIGlkPSJPNSI+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfcG9zIj4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjE5LDUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9iYiI+CisgICAgICAgIDxkaWE6cmVjdGFuZ2xlIHZhbD0iMTguOTQyNSw0Ljk0MjQ2OzI1LjEzMTUsNi41MDE0MiIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iY29ubl9lbmRwb2ludHMiPgorICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMTksNSIvPgorICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMjUsNiIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ibnVtY3AiPgorICAgICAgICA8ZGlhOmludCB2YWw9IjEiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVuZF9hcnJvdyI+CisgICAgICAgIDxkaWE6ZW51bSB2YWw9IjIyIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbmRfYXJyb3dfbGVuZ3RoIj4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC41Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbmRfYXJyb3dfd2lkdGgiPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIwLjUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6Y29ubmVjdGlvbnM+CisgICAgICAgIDxkaWE6Y29ubmVjdGlvbiBoYW5kbGU9IjAiIHRvPSJPMCIgY29ubmVjdGlvbj0iMyIvPgorICAgICAgICA8ZGlhOmNvbm5lY3Rpb24gaGFuZGxlPSIxIiB0bz0iTzEiIGNvbm5lY3Rpb249IjIiLz4KKyAgICAgIDwvZGlhOmNvbm5lY3Rpb25zPgorICAgIDwvZGlhOm9iamVjdD4KKyAgICA8ZGlhOm9iamVjdCB0eXBlPSJTdGFuZGFyZCAtIExpbmUiIHZlcnNpb249IjAiIGlkPSJPNiI+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfcG9zIj4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjQyLDExIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfYmIiPgorICAgICAgICA8ZGlhOnJlY3RhbmdsZSB2YWw9IjE4Ljc3MTIsMTAuOTM1Mjs0Mi4wNjQ4LDIwLjQ4MzgiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImNvbm5fZW5kcG9pbnRzIj4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjQyLDExIi8+CisgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIxOSwyMCIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ibnVtY3AiPgorICAgICAgICA8ZGlhOmludCB2YWw9IjEiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVuZF9hcnJvdyI+CisgICAgICAgIDxkaWE6ZW51bSB2YWw9IjIyIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbmRfYXJyb3dfbGVuZ3RoIj4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC41Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbmRfYXJyb3dfd2lkdGgiPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIwLjUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6Y29ubmVjdGlvbnM+CisgICAgICAgIDxkaWE6Y29ubmVjdGlvbiBoYW5kbGU9IjAiIHRvPSJPMiIgY29ubmVjdGlvbj0iMiIvPgorICAgICAgICA8ZGlhOmNvbm5lY3Rpb24gaGFuZGxlPSIxIiB0bz0iTzMiIGNvbm5lY3Rpb249IjMiLz4KKyAgICAgIDwvZGlhOmNvbm5lY3Rpb25zPgorICAgIDwvZGlhOm9iamVjdD4KKyAgICA8ZGlhOm9iamVjdCB0eXBlPSJTdGFuZGFyZCAtIEFyYyIgdmVyc2lvbj0iMCIgaWQ9Ik83Ij4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9wb3MiPgorICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMTgsMTkiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9iYiI+CisgICAgICAgIDxkaWE6cmVjdGFuZ2xlIHZhbD0iMTcuOTMwNyw2LjY4MTA1OzI2LjQ0MzgsMTkuMDY5MyIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iY29ubl9lbmRwb2ludHMiPgorICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMTgsMTkiLz4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjI2LDciLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImN1cnZlX2Rpc3RhbmNlIj4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZW5kX2Fycm93Ij4KKyAgICAgICAgPGRpYTplbnVtIHZhbD0iMjIiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVuZF9hcnJvd19sZW5ndGgiPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIwLjUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVuZF9hcnJvd193aWR0aCI+CisgICAgICAgIDxkaWE6cmVhbCB2YWw9IjAuNSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTpjb25uZWN0aW9ucz4KKyAgICAgICAgPGRpYTpjb25uZWN0aW9uIGhhbmRsZT0iMCIgdG89Ik8zIiBjb25uZWN0aW9uPSIxIi8+CisgICAgICAgIDxkaWE6Y29ubmVjdGlvbiBoYW5kbGU9IjEiIHRvPSJPMSIgY29ubmVjdGlvbj0iMCIvPgorICAgICAgPC9kaWE6Y29ubmVjdGlvbnM+CisgICAgPC9kaWE6b2JqZWN0PgorICAgIDxkaWE6b2JqZWN0IHR5cGU9IlN0YW5kYXJkIC0gQXJjIiB2ZXJzaW9uPSIwIiBpZD0iTzgiPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX3BvcyI+CisgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIyNiw3Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfYmIiPgorICAgICAgICA8ZGlhOnJlY3RhbmdsZSB2YWw9IjE3LjU1NjIsNi45MzA2NjsyNi4wNjkzLDE5LjMxOSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iY29ubl9lbmRwb2ludHMiPgorICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMjYsNyIvPgorICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMTgsMTkiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImN1cnZlX2Rpc3RhbmNlIj4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZW5kX2Fycm93Ij4KKyAgICAgICAgPGRpYTplbnVtIHZhbD0iMjIiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVuZF9hcnJvd19sZW5ndGgiPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIwLjUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVuZF9hcnJvd193aWR0aCI+CisgICAgICAgIDxkaWE6cmVhbCB2YWw9IjAuNSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTpjb25uZWN0aW9ucz4KKyAgICAgICAgPGRpYTpjb25uZWN0aW9uIGhhbmRsZT0iMCIgdG89Ik8xIiBjb25uZWN0aW9uPSIwIi8+CisgICAgICAgIDxkaWE6Y29ubmVjdGlvbiBoYW5kbGU9IjEiIHRvPSJPMyIgY29ubmVjdGlvbj0iMSIvPgorICAgICAgPC9kaWE6Y29ubmVjdGlvbnM+CisgICAgPC9kaWE6b2JqZWN0PgorICAgIDxkaWE6b2JqZWN0IHR5cGU9IlN0YW5kYXJkIC0gQXJjIiB2ZXJzaW9uPSIwIiBpZD0iTzkiPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX3BvcyI+CisgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIxOCwyMSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX2JiIj4KKyAgICAgICAgPGRpYTpyZWN0YW5nbGUgdmFsPSIxNy45MzY4LDIwLjkzNjg7MzYuMjA1NSwyNy40OTAyIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJjb25uX2VuZHBvaW50cyI+CisgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIxOCwyMSIvPgorICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMzYsMjciLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImFyY19jb2xvciI+CisgICAgICAgIDxkaWE6Y29sb3IgdmFsPSIjN2Y3ZjdmIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJjdXJ2ZV9kaXN0YW5jZSI+CisgICAgICAgIDxkaWE6cmVhbCB2YWw9IjEiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVuZF9hcnJvdyI+CisgICAgICAgIDxkaWE6ZW51bSB2YWw9IjIyIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbmRfYXJyb3dfbGVuZ3RoIj4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC41Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbmRfYXJyb3dfd2lkdGgiPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIwLjUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6Y29ubmVjdGlvbnM+CisgICAgICAgIDxkaWE6Y29ubmVjdGlvbiBoYW5kbGU9IjAiIHRvPSJPMyIgY29ubmVjdGlvbj0iMCIvPgorICAgICAgICA8ZGlhOmNvbm5lY3Rpb24gaGFuZGxlPSIxIiB0bz0iTzQiIGNvbm5lY3Rpb249IjIiLz4KKyAgICAgIDwvZGlhOmNvbm5lY3Rpb25zPgorICAgIDwvZGlhOm9iamVjdD4KKyAgICA8ZGlhOm9iamVjdCB0eXBlPSJTdGFuZGFyZCAtIEFyYyIgdmVyc2lvbj0iMCIgaWQ9Ik8xMCI+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfcG9zIj4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjM2LDI3Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfYmIiPgorICAgICAgICA8ZGlhOnJlY3RhbmdsZSB2YWw9IjE3Ljc5NDUsMjAuNTA5ODszNi4wNjMyLDI3LjA2MzIiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImNvbm5fZW5kcG9pbnRzIj4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjM2LDI3Ii8+CisgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIxOCwyMSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iYXJjX2NvbG9yIj4KKyAgICAgICAgPGRpYTpjb2xvciB2YWw9IiM3ZjdmN2YiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImN1cnZlX2Rpc3RhbmNlIj4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZW5kX2Fycm93Ij4KKyAgICAgICAgPGRpYTplbnVtIHZhbD0iMjIiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVuZF9hcnJvd19sZW5ndGgiPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIwLjUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVuZF9hcnJvd193aWR0aCI+CisgICAgICAgIDxkaWE6cmVhbCB2YWw9IjAuNSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTpjb25uZWN0aW9ucz4KKyAgICAgICAgPGRpYTpjb25uZWN0aW9uIGhhbmRsZT0iMCIgdG89Ik80IiBjb25uZWN0aW9uPSIyIi8+CisgICAgICAgIDxkaWE6Y29ubmVjdGlvbiBoYW5kbGU9IjEiIHRvPSJPMyIgY29ubmVjdGlvbj0iMCIvPgorICAgICAgPC9kaWE6Y29ubmVjdGlvbnM+CisgICAgPC9kaWE6b2JqZWN0PgorICAgIDxkaWE6b2JqZWN0IHR5cGU9IlN0YW5kYXJkIC0gQXJjIiB2ZXJzaW9uPSIwIiBpZD0iTzExIj4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9wb3MiPgorICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMzgsMjciLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9iYiI+CisgICAgICAgIDxkaWE6cmVjdGFuZ2xlIHZhbD0iMzcuOTM2OCwxMS43OTQ1OzQzLjQ5MDIsMjcuMDYzMiIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iY29ubl9lbmRwb2ludHMiPgorICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMzgsMjciLz4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjQzLDEyIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJhcmNfY29sb3IiPgorICAgICAgICA8ZGlhOmNvbG9yIHZhbD0iIzdmN2Y3ZiIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iY3VydmVfZGlzdGFuY2UiPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIxIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbmRfYXJyb3ciPgorICAgICAgICA8ZGlhOmVudW0gdmFsPSIyMiIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZW5kX2Fycm93X2xlbmd0aCI+CisgICAgICAgIDxkaWE6cmVhbCB2YWw9IjAuNSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZW5kX2Fycm93X3dpZHRoIj4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC41Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmNvbm5lY3Rpb25zPgorICAgICAgICA8ZGlhOmNvbm5lY3Rpb24gaGFuZGxlPSIwIiB0bz0iTzQiIGNvbm5lY3Rpb249IjMiLz4KKyAgICAgICAgPGRpYTpjb25uZWN0aW9uIGhhbmRsZT0iMSIgdG89Ik8yIiBjb25uZWN0aW9uPSIwIi8+CisgICAgICA8L2RpYTpjb25uZWN0aW9ucz4KKyAgICA8L2RpYTpvYmplY3Q+CisgICAgPGRpYTpvYmplY3QgdHlwZT0iU3RhbmRhcmQgLSBBcmMiIHZlcnNpb249IjAiIGlkPSJPMTIiPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX3BvcyI+CisgICAgICAgIDxkaWE6cG9pbnQgdmFsPSI0MywxMiIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX2JiIj4KKyAgICAgICAgPGRpYTpyZWN0YW5nbGUgdmFsPSIzNy41MDk4LDExLjkzNjg7NDMuMDYzMiwyNy4yMDU1Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJjb25uX2VuZHBvaW50cyI+CisgICAgICAgIDxkaWE6cG9pbnQgdmFsPSI0MywxMiIvPgorICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMzgsMjciLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImFyY19jb2xvciI+CisgICAgICAgIDxkaWE6Y29sb3IgdmFsPSIjN2Y3ZjdmIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJjdXJ2ZV9kaXN0YW5jZSI+CisgICAgICAgIDxkaWE6cmVhbCB2YWw9IjEiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVuZF9hcnJvdyI+CisgICAgICAgIDxkaWE6ZW51bSB2YWw9IjIyIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbmRfYXJyb3dfbGVuZ3RoIj4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC41Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbmRfYXJyb3dfd2lkdGgiPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIwLjUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6Y29ubmVjdGlvbnM+CisgICAgICAgIDxkaWE6Y29ubmVjdGlvbiBoYW5kbGU9IjAiIHRvPSJPMiIgY29ubmVjdGlvbj0iMCIvPgorICAgICAgICA8ZGlhOmNvbm5lY3Rpb24gaGFuZGxlPSIxIiB0bz0iTzQiIGNvbm5lY3Rpb249IjMiLz4KKyAgICAgIDwvZGlhOmNvbm5lY3Rpb25zPgorICAgIDwvZGlhOm9iamVjdD4KKyAgICA8ZGlhOm9iamVjdCB0eXBlPSJTdGFuZGFyZCAtIEFyYyIgdmVyc2lvbj0iMCIgaWQ9Ik8xMyI+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfcG9zIj4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjM3LDI2Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfYmIiPgorICAgICAgICA8ZGlhOnJlY3RhbmdsZSB2YWw9IjI2LjUzMDQsNS43MzE2NzszNy4wNjcxLDI2LjA2NzEiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImNvbm5fZW5kcG9pbnRzIj4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjM3LDI2Ii8+CisgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIyNyw2Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJhcmNfY29sb3IiPgorICAgICAgICA8ZGlhOmNvbG9yIHZhbD0iIzdmN2Y3ZiIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iY3VydmVfZGlzdGFuY2UiPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIxIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbmRfYXJyb3ciPgorICAgICAgICA8ZGlhOmVudW0gdmFsPSIyMiIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZW5kX2Fycm93X2xlbmd0aCI+CisgICAgICAgIDxkaWE6cmVhbCB2YWw9IjAuNSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZW5kX2Fycm93X3dpZHRoIj4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC41Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmNvbm5lY3Rpb25zPgorICAgICAgICA8ZGlhOmNvbm5lY3Rpb24gaGFuZGxlPSIwIiB0bz0iTzQiIGNvbm5lY3Rpb249IjEiLz4KKyAgICAgICAgPGRpYTpjb25uZWN0aW9uIGhhbmRsZT0iMSIgdG89Ik8xIiBjb25uZWN0aW9uPSIzIi8+CisgICAgICA8L2RpYTpjb25uZWN0aW9ucz4KKyAgICA8L2RpYTpvYmplY3Q+CisgICAgPGRpYTpvYmplY3QgdHlwZT0iU3RhbmRhcmQgLSBBcmMiIHZlcnNpb249IjAiIGlkPSJPMTQiPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX3BvcyI+CisgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIyNyw2Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfYmIiPgorICAgICAgICA8ZGlhOnJlY3RhbmdsZSB2YWw9IjI2LjkzMjksNS45MzI5MjszNy40Njk2LDI2LjI2ODMiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImNvbm5fZW5kcG9pbnRzIj4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjI3LDYiLz4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjM3LDI2Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJhcmNfY29sb3IiPgorICAgICAgICA8ZGlhOmNvbG9yIHZhbD0iIzdmN2Y3ZiIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iY3VydmVfZGlzdGFuY2UiPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIxIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbmRfYXJyb3ciPgorICAgICAgICA8ZGlhOmVudW0gdmFsPSIyMiIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZW5kX2Fycm93X2xlbmd0aCI+CisgICAgICAgIDxkaWE6cmVhbCB2YWw9IjAuNSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZW5kX2Fycm93X3dpZHRoIj4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC41Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmNvbm5lY3Rpb25zPgorICAgICAgICA8ZGlhOmNvbm5lY3Rpb24gaGFuZGxlPSIwIiB0bz0iTzEiIGNvbm5lY3Rpb249IjMiLz4KKyAgICAgICAgPGRpYTpjb25uZWN0aW9uIGhhbmRsZT0iMSIgdG89Ik80IiBjb25uZWN0aW9uPSIxIi8+CisgICAgICA8L2RpYTpjb25uZWN0aW9ucz4KKyAgICA8L2RpYTpvYmplY3Q+CisgICAgPGRpYTpvYmplY3QgdHlwZT0iU3RhbmRhcmQgLSBBcmMiIHZlcnNpb249IjAiIGlkPSJPMTUiPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX3BvcyI+CisgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIyNiw1Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfYmIiPgorICAgICAgICA8ZGlhOnJlY3RhbmdsZSB2YWw9IjI1LjkzNzksNC4zMjA4NDs0My4xODkxLDEwLjQ5MzgiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImNvbm5fZW5kcG9pbnRzIj4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjI2LDUiLz4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjQzLDEwIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJjdXJ2ZV9kaXN0YW5jZSI+CisgICAgICAgIDxkaWE6cmVhbCB2YWw9Ii0yLjU1NzUwOTczMjM2MjQwMTkiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVuZF9hcnJvdyI+CisgICAgICAgIDxkaWE6ZW51bSB2YWw9IjIyIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbmRfYXJyb3dfbGVuZ3RoIj4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC41Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbmRfYXJyb3dfd2lkdGgiPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIwLjUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6Y29ubmVjdGlvbnM+CisgICAgICAgIDxkaWE6Y29ubmVjdGlvbiBoYW5kbGU9IjAiIHRvPSJPMSIgY29ubmVjdGlvbj0iMSIvPgorICAgICAgICA8ZGlhOmNvbm5lY3Rpb24gaGFuZGxlPSIxIiB0bz0iTzIiIGNvbm5lY3Rpb249IjEiLz4KKyAgICAgIDwvZGlhOmNvbm5lY3Rpb25zPgorICAgIDwvZGlhOm9iamVjdD4KKyAgICA8ZGlhOm9iamVjdCB0eXBlPSJTdGFuZGFyZCAtIFRleHQiIHZlcnNpb249IjAiIGlkPSJPMTYiPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX3BvcyI+CisgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIxMiw0Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfYmIiPgorICAgICAgICA8ZGlhOnJlY3RhbmdsZSB2YWw9IjEyLDMuNDsxNi45LDQuMzUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InRleHQiPgorICAgICAgICA8ZGlhOmNvbXBvc2l0ZSB0eXBlPSJ0ZXh0Ij4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJzdHJpbmciPgorICAgICAgICAgICAgPGRpYTpzdHJpbmc+I1NFUlZFUl9JTlZBTElEIzwvZGlhOnN0cmluZz4KKyAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZm9udCI+CisgICAgICAgICAgICA8ZGlhOmZvbnQgZmFtaWx5PSJzYW5zIiBzdHlsZT0iMCIgbmFtZT0iSGVsdmV0aWNhIi8+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImhlaWdodCI+CisgICAgICAgICAgICA8ZGlhOnJlYWwgdmFsPSIwLjgwMDAwMDAwMDAwMDAwMDA0Ii8+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InBvcyI+CisgICAgICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMTIsNCIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJjb2xvciI+CisgICAgICAgICAgICA8ZGlhOmNvbG9yIHZhbD0iIzAwMDAwMCIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJhbGlnbm1lbnQiPgorICAgICAgICAgICAgPGRpYTplbnVtIHZhbD0iMCIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPC9kaWE6Y29tcG9zaXRlPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgIDwvZGlhOm9iamVjdD4KKyAgICA8ZGlhOm9iamVjdCB0eXBlPSJTdGFuZGFyZCAtIFRleHQiIHZlcnNpb249IjAiIGlkPSJPMTciPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX3BvcyI+CisgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIyOCw2Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfYmIiPgorICAgICAgICA8ZGlhOnJlY3RhbmdsZSB2YWw9IjI4LDUuNDszNC42NSw2LjM1Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJ0ZXh0Ij4KKyAgICAgICAgPGRpYTpjb21wb3NpdGUgdHlwZT0idGV4dCI+CisgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ic3RyaW5nIj4KKyAgICAgICAgICAgIDxkaWE6c3RyaW5nPiNTRVJWRVJfUkVHSVNURVJJTkcjPC9kaWE6c3RyaW5nPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJmb250Ij4KKyAgICAgICAgICAgIDxkaWE6Zm9udCBmYW1pbHk9InNhbnMiIHN0eWxlPSIwIiBuYW1lPSJIZWx2ZXRpY2EiLz4KKyAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iaGVpZ2h0Ij4KKyAgICAgICAgICAgIDxkaWE6cmVhbCB2YWw9IjAuODAwMDAwMDAwMDAwMDAwMDQiLz4KKyAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0icG9zIj4KKyAgICAgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIyOCw2Ii8+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImNvbG9yIj4KKyAgICAgICAgICAgIDxkaWE6Y29sb3IgdmFsPSIjMDAwMDAwIi8+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImFsaWdubWVudCI+CisgICAgICAgICAgICA8ZGlhOmVudW0gdmFsPSIwIi8+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8L2RpYTpjb21wb3NpdGU+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgPC9kaWE6b2JqZWN0PgorICAgIDxkaWE6b2JqZWN0IHR5cGU9IlN0YW5kYXJkIC0gVGV4dCIgdmVyc2lvbj0iMCIgaWQ9Ik8xOCI+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfcG9zIj4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjQ1LDEwIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfYmIiPgorICAgICAgICA8ZGlhOnJlY3RhbmdsZSB2YWw9IjQ1LDkuNDs1MC40NSwxMC4zNSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0idGV4dCI+CisgICAgICAgIDxkaWE6Y29tcG9zaXRlIHR5cGU9InRleHQiPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InN0cmluZyI+CisgICAgICAgICAgICA8ZGlhOnN0cmluZz4jU0VSVkVSX1JVTk5JTkcjPC9kaWE6c3RyaW5nPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJmb250Ij4KKyAgICAgICAgICAgIDxkaWE6Zm9udCBmYW1pbHk9InNhbnMiIHN0eWxlPSIwIiBuYW1lPSJIZWx2ZXRpY2EiLz4KKyAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iaGVpZ2h0Ij4KKyAgICAgICAgICAgIDxkaWE6cmVhbCB2YWw9IjAuODAwMDAwMDAwMDAwMDAwMDQiLz4KKyAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0icG9zIj4KKyAgICAgICAgICAgIDxkaWE6cG9pbnQgdmFsPSI0NSwxMCIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJjb2xvciI+CisgICAgICAgICAgICA8ZGlhOmNvbG9yIHZhbD0iIzAwMDAwMCIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJhbGlnbm1lbnQiPgorICAgICAgICAgICAgPGRpYTplbnVtIHZhbD0iMCIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPC9kaWE6Y29tcG9zaXRlPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgIDwvZGlhOm9iamVjdD4KKyAgICA8ZGlhOm9iamVjdCB0eXBlPSJTdGFuZGFyZCAtIFRleHQiIHZlcnNpb249IjAiIGlkPSJPMTkiPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX3BvcyI+CisgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIzOSwyOSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX2JiIj4KKyAgICAgICAgPGRpYTpyZWN0YW5nbGUgdmFsPSIzOSwyOC40OzQ2LjEsMjkuMzUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InRleHQiPgorICAgICAgICA8ZGlhOmNvbXBvc2l0ZSB0eXBlPSJ0ZXh0Ij4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJzdHJpbmciPgorICAgICAgICAgICAgPGRpYTpzdHJpbmc+I0NMSUVOVF9ESVNDT05ORUNURUQjPC9kaWE6c3RyaW5nPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJmb250Ij4KKyAgICAgICAgICAgIDxkaWE6Zm9udCBmYW1pbHk9InNhbnMiIHN0eWxlPSIwIiBuYW1lPSJIZWx2ZXRpY2EiLz4KKyAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iaGVpZ2h0Ij4KKyAgICAgICAgICAgIDxkaWE6cmVhbCB2YWw9IjAuODAwMDAwMDAwMDAwMDAwMDQiLz4KKyAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0icG9zIj4KKyAgICAgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIzOSwyOSIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJjb2xvciI+CisgICAgICAgICAgICA8ZGlhOmNvbG9yIHZhbD0iIzAwMDAwMCIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJhbGlnbm1lbnQiPgorICAgICAgICAgICAgPGRpYTplbnVtIHZhbD0iMCIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPC9kaWE6Y29tcG9zaXRlPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgIDwvZGlhOm9iamVjdD4KKyAgICA8ZGlhOm9iamVjdCB0eXBlPSJTdGFuZGFyZCAtIFRleHQiIHZlcnNpb249IjAiIGlkPSJPMjAiPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX3BvcyI+CisgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIxMCwyMCIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX2JiIj4KKyAgICAgICAgPGRpYTpyZWN0YW5nbGUgdmFsPSIxMCwxOS40OzE1LjcsMjAuMzUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InRleHQiPgorICAgICAgICA8ZGlhOmNvbXBvc2l0ZSB0eXBlPSJ0ZXh0Ij4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJzdHJpbmciPgorICAgICAgICAgICAgPGRpYTpzdHJpbmc+I1NFUlZFUl9DT0xMSVNJT04jPC9kaWE6c3RyaW5nPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJmb250Ij4KKyAgICAgICAgICAgIDxkaWE6Zm9udCBmYW1pbHk9InNhbnMiIHN0eWxlPSIwIiBuYW1lPSJIZWx2ZXRpY2EiLz4KKyAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iaGVpZ2h0Ij4KKyAgICAgICAgICAgIDxkaWE6cmVhbCB2YWw9IjAuODAwMDAwMDAwMDAwMDAwMDQiLz4KKyAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0icG9zIj4KKyAgICAgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIxMCwyMCIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJjb2xvciI+CisgICAgICAgICAgICA8ZGlhOmNvbG9yIHZhbD0iIzAwMDAwMCIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJhbGlnbm1lbnQiPgorICAgICAgICAgICAgPGRpYTplbnVtIHZhbD0iMCIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPC9kaWE6Y29tcG9zaXRlPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgIDwvZGlhOm9iamVjdD4KKyAgICA8ZGlhOm9iamVjdCB0eXBlPSJHZW9tZXRyaWMgLSBRdWFydGVyIENpcmNsZSIgdmVyc2lvbj0iMCIgaWQ9Ik8yMSI+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfcG9zIj4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjE3LDQiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9iYiI+CisgICAgICAgIDxkaWE6cmVjdGFuZ2xlIHZhbD0iMTYuOTUsMy45NTsxOC4wNzA3LDUuMDcwNzEiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVsZW1fY29ybmVyIj4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjE3LDQiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVsZW1fd2lkdGgiPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIxIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbGVtX2hlaWdodCI+CisgICAgICAgIDxkaWE6cmVhbCB2YWw9IjEiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImxpbmVfd2lkdGgiPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIwLjEwMDAwMDAwMDAwMDAwMDAxIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJsaW5lX2NvbG91ciI+CisgICAgICAgIDxkaWE6Y29sb3IgdmFsPSIjMDAwMDAwIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJmaWxsX2NvbG91ciI+CisgICAgICAgIDxkaWE6Y29sb3IgdmFsPSIjMDAwMDAwIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJzaG93X2JhY2tncm91bmQiPgorICAgICAgICA8ZGlhOmJvb2xlYW4gdmFsPSJ0cnVlIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJsaW5lX3N0eWxlIj4KKyAgICAgICAgPGRpYTplbnVtIHZhbD0iMCIvPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIxIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJmbGlwX2hvcml6b250YWwiPgorICAgICAgICA8ZGlhOmJvb2xlYW4gdmFsPSJ0cnVlIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJmbGlwX3ZlcnRpY2FsIj4KKyAgICAgICAgPGRpYTpib29sZWFuIHZhbD0iZmFsc2UiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICA8L2RpYTpvYmplY3Q+CisgICAgPGRpYTpvYmplY3QgdHlwZT0iR2VvbWV0cmljIC0gUXVhcnRlciBDaXJjbGUiIHZlcnNpb249IjAiIGlkPSJPMjIiPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX3BvcyI+CisgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIxNyw1Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfYmIiPgorICAgICAgICA8ZGlhOnJlY3RhbmdsZSB2YWw9IjE2Ljk1LDQuOTI5Mjk7MTguMDcwNyw2LjA1Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbGVtX2Nvcm5lciI+CisgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIxNyw1Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbGVtX3dpZHRoIj4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZWxlbV9oZWlnaHQiPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIxIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJsaW5lX3dpZHRoIj4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC4xMDAwMDAwMDAwMDAwMDAwMSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ibGluZV9jb2xvdXIiPgorICAgICAgICA8ZGlhOmNvbG9yIHZhbD0iIzAwMDAwMCIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZmlsbF9jb2xvdXIiPgorICAgICAgICA8ZGlhOmNvbG9yIHZhbD0iIzAwMDAwMCIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ic2hvd19iYWNrZ3JvdW5kIj4KKyAgICAgICAgPGRpYTpib29sZWFuIHZhbD0idHJ1ZSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ibGluZV9zdHlsZSI+CisgICAgICAgIDxkaWE6ZW51bSB2YWw9IjAiLz4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZmxpcF9ob3Jpem9udGFsIj4KKyAgICAgICAgPGRpYTpib29sZWFuIHZhbD0idHJ1ZSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZmxpcF92ZXJ0aWNhbCI+CisgICAgICAgIDxkaWE6Ym9vbGVhbiB2YWw9InRydWUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICA8L2RpYTpvYmplY3Q+CisgICAgPGRpYTpvYmplY3QgdHlwZT0iU3RhbmRhcmQgLSBMaW5lIiB2ZXJzaW9uPSIwIiBpZD0iTzIzIj4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9wb3MiPgorICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMTksMjgiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9Im9ial9iYiI+CisgICAgICAgIDxkaWE6cmVjdGFuZ2xlIHZhbD0iMTguOTMyOSwxMy45MzI5OzQ3LjA2NzEsMjguMDY3MSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iY29ubl9lbmRwb2ludHMiPgorICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMTksMjgiLz4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjQ3LDE0Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJudW1jcCI+CisgICAgICAgIDxkaWE6aW50IHZhbD0iMSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ibGluZV9jb2xvciI+CisgICAgICAgIDxkaWE6Y29sb3IgdmFsPSIjYmZiZmJmIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJsaW5lX3N0eWxlIj4KKyAgICAgICAgPGRpYTplbnVtIHZhbD0iNCIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgIDwvZGlhOm9iamVjdD4KKyAgICA8ZGlhOm9iamVjdCB0eXBlPSJTdGFuZGFyZCAtIFRleHQiIHZlcnNpb249IjAiIGlkPSJPMjQiPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX3BvcyI+CisgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIyMSwyOSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX2JiIj4KKyAgICAgICAgPGRpYTpyZWN0YW5nbGUgdmFsPSIyMSwyOC40OzI0LjI1LDI5LjM1Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJ0ZXh0Ij4KKyAgICAgICAgPGRpYTpjb21wb3NpdGUgdHlwZT0idGV4dCI+CisgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ic3RyaW5nIj4KKyAgICAgICAgICAgIDxkaWE6c3RyaW5nPiNDbGllbnQgc2lkZSM8L2RpYTpzdHJpbmc+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImZvbnQiPgorICAgICAgICAgICAgPGRpYTpmb250IGZhbWlseT0ic2FucyIgc3R5bGU9IjAiIG5hbWU9IkhlbHZldGljYSIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJoZWlnaHQiPgorICAgICAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC44MDAwMDAwMDAwMDAwMDAwNCIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJwb3MiPgorICAgICAgICAgICAgPGRpYTpwb2ludCB2YWw9IjIxLDI5Ii8+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImNvbG9yIj4KKyAgICAgICAgICAgIDxkaWE6Y29sb3IgdmFsPSIjYmZiZmJmIi8+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImFsaWdubWVudCI+CisgICAgICAgICAgICA8ZGlhOmVudW0gdmFsPSIwIi8+CisgICAgICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgICA8L2RpYTpjb21wb3NpdGU+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgPC9kaWE6b2JqZWN0PgorICAgIDxkaWE6b2JqZWN0IHR5cGU9IlN0YW5kYXJkIC0gVGV4dCIgdmVyc2lvbj0iMCIgaWQ9Ik8yNSI+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfcG9zIj4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjE4LDI2Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfYmIiPgorICAgICAgICA8ZGlhOnJlY3RhbmdsZSB2YWw9IjE4LDI1LjQ7MjEuNSwyNi4zNSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0idGV4dCI+CisgICAgICAgIDxkaWE6Y29tcG9zaXRlIHR5cGU9InRleHQiPgorICAgICAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9InN0cmluZyI+CisgICAgICAgICAgICA8ZGlhOnN0cmluZz4jU2VydmVyIHNpZGUjPC9kaWE6c3RyaW5nPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJmb250Ij4KKyAgICAgICAgICAgIDxkaWE6Zm9udCBmYW1pbHk9InNhbnMiIHN0eWxlPSIwIiBuYW1lPSJIZWx2ZXRpY2EiLz4KKyAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iaGVpZ2h0Ij4KKyAgICAgICAgICAgIDxkaWE6cmVhbCB2YWw9IjAuODAwMDAwMDAwMDAwMDAwMDQiLz4KKyAgICAgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0icG9zIj4KKyAgICAgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIxOCwyNiIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJjb2xvciI+CisgICAgICAgICAgICA8ZGlhOmNvbG9yIHZhbD0iI2JmYmZiZiIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJhbGlnbm1lbnQiPgorICAgICAgICAgICAgPGRpYTplbnVtIHZhbD0iMCIvPgorICAgICAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgICAgPC9kaWE6Y29tcG9zaXRlPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgIDwvZGlhOm9iamVjdD4KKyAgICA8ZGlhOm9iamVjdCB0eXBlPSJHZW9tZXRyaWMgLSBRdWFydGVyIENpcmNsZSIgdmVyc2lvbj0iMCIgaWQ9Ik8yNiI+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfcG9zIj4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjM2LDI2Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJvYmpfYmIiPgorICAgICAgICA8ZGlhOnJlY3RhbmdsZSB2YWw9IjM1Ljk1LDI1Ljk1OzM3LjA3MDcsMjcuMDcwNyIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZWxlbV9jb3JuZXIiPgorICAgICAgICA8ZGlhOnBvaW50IHZhbD0iMzYsMjYiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVsZW1fd2lkdGgiPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIxIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbGVtX2hlaWdodCI+CisgICAgICAgIDxkaWE6cmVhbCB2YWw9IjEiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImxpbmVfd2lkdGgiPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIwLjEwMDAwMDAwMDAwMDAwMDAxIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJsaW5lX2NvbG91ciI+CisgICAgICAgIDxkaWE6Y29sb3IgdmFsPSIjN2Y3ZjdmIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJmaWxsX2NvbG91ciI+CisgICAgICAgIDxkaWE6Y29sb3IgdmFsPSIjN2Y3ZjdmIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJzaG93X2JhY2tncm91bmQiPgorICAgICAgICA8ZGlhOmJvb2xlYW4gdmFsPSJ0cnVlIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJsaW5lX3N0eWxlIj4KKyAgICAgICAgPGRpYTplbnVtIHZhbD0iMCIvPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIxIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJmbGlwX2hvcml6b250YWwiPgorICAgICAgICA8ZGlhOmJvb2xlYW4gdmFsPSJ0cnVlIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJmbGlwX3ZlcnRpY2FsIj4KKyAgICAgICAgPGRpYTpib29sZWFuIHZhbD0iZmFsc2UiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICA8L2RpYTpvYmplY3Q+CisgICAgPGRpYTpvYmplY3QgdHlwZT0iR2VvbWV0cmljIC0gUXVhcnRlciBDaXJjbGUiIHZlcnNpb249IjAiIGlkPSJPMjciPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX3BvcyI+CisgICAgICAgIDxkaWE6cG9pbnQgdmFsPSIzNiwyNyIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ib2JqX2JiIj4KKyAgICAgICAgPGRpYTpyZWN0YW5nbGUgdmFsPSIzNS45NSwyNi45MjkzOzM3LjA3MDcsMjguMDUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICAgIDxkaWE6YXR0cmlidXRlIG5hbWU9ImVsZW1fY29ybmVyIj4KKyAgICAgICAgPGRpYTpwb2ludCB2YWw9IjM2LDI3Ii8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJlbGVtX3dpZHRoIj4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZWxlbV9oZWlnaHQiPgorICAgICAgICA8ZGlhOnJlYWwgdmFsPSIxIi8+CisgICAgICA8L2RpYTphdHRyaWJ1dGU+CisgICAgICA8ZGlhOmF0dHJpYnV0ZSBuYW1lPSJsaW5lX3dpZHRoIj4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMC4xMDAwMDAwMDAwMDAwMDAwMSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ibGluZV9jb2xvdXIiPgorICAgICAgICA8ZGlhOmNvbG9yIHZhbD0iIzdmN2Y3ZiIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZmlsbF9jb2xvdXIiPgorICAgICAgICA8ZGlhOmNvbG9yIHZhbD0iIzdmN2Y3ZiIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ic2hvd19iYWNrZ3JvdW5kIj4KKyAgICAgICAgPGRpYTpib29sZWFuIHZhbD0idHJ1ZSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0ibGluZV9zdHlsZSI+CisgICAgICAgIDxkaWE6ZW51bSB2YWw9IjAiLz4KKyAgICAgICAgPGRpYTpyZWFsIHZhbD0iMSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZmxpcF9ob3Jpem9udGFsIj4KKyAgICAgICAgPGRpYTpib29sZWFuIHZhbD0idHJ1ZSIvPgorICAgICAgPC9kaWE6YXR0cmlidXRlPgorICAgICAgPGRpYTphdHRyaWJ1dGUgbmFtZT0iZmxpcF92ZXJ0aWNhbCI+CisgICAgICAgIDxkaWE6Ym9vbGVhbiB2YWw9InRydWUiLz4KKyAgICAgIDwvZGlhOmF0dHJpYnV0ZT4KKyAgICA8L2RpYTpvYmplY3Q+CisgIDwvZGlhOmxheWVyPgorPC9kaWE6ZGlhZ3JhbT4KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9kb3h5Z2VuLmNmZyBiL2F2YWhpLTAuNi4zMS9kb3h5Z2VuLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzAzNjA5Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2RveHlnZW4uY2ZnCkBAIC0wLDAgKzEsMjEzIEBACisjIERveHlmaWxlIDEuMy43CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJvamVjdCByZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUFJPSkVDVF9OQU1FICAgICAgICAgICA9ICQoUFJPSkVDVCkKK1BST0pFQ1RfTlVNQkVSICAgICAgICAgPSAkKFZFUlNJT04pCitPVVRQVVRfRElSRUNUT1JZICAgICAgID0gJChET0NESVIpCitDUkVBVEVfU1VCRElSUyAgICAgICAgID0gTk8KK09VVFBVVF9MQU5HVUFHRSAgICAgICAgPSBFbmdsaXNoCitVU0VfV0lORE9XU19FTkNPRElORyAgID0gTk8KK0JSSUVGX01FTUJFUl9ERVNDICAgICAgPSBZRVMKK1JFUEVBVF9CUklFRiAgICAgICAgICAgPSBZRVMKK0FCQlJFVklBVEVfQlJJRUYgICAgICAgPSAKK0FMV0FZU19ERVRBSUxFRF9TRUMgICAgPSBOTworSU5MSU5FX0lOSEVSSVRFRF9NRU1CICA9IE5PCitTVFJJUF9GUk9NX0lOQ19QQVRIICAgID0gJChTUkNESVIpCitGVUxMX1BBVEhfTkFNRVMgICAgICAgID0gWUVTCitTVFJJUF9GUk9NX1BBVEggICAgICAgID0gJChTUkNESVIpCitTSE9SVF9OQU1FUyAgICAgICAgICAgID0gTk8KK0pBVkFET0NfQVVUT0JSSUVGICAgICAgPSBZRVMKK01VTFRJTElORV9DUFBfSVNfQlJJRUYgPSBOTworREVUQUlMU19BVF9UT1AgICAgICAgICA9IFlFUworSU5IRVJJVF9ET0NTICAgICAgICAgICA9IFlFUworRElTVFJJQlVURV9HUk9VUF9ET0MgICA9IE5PCitUQUJfU0laRSAgICAgICAgICAgICAgID0gNAorQUxJQVNFUyAgICAgICAgICAgICAgICA9IAorT1BUSU1JWkVfT1VUUFVUX0ZPUl9DICA9IFlFUworT1BUSU1JWkVfT1VUUFVUX0pBVkEgICA9IE5PCitTVUJHUk9VUElORyAgICAgICAgICAgID0gWUVTCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEJ1aWxkIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitFWFRSQUNUX0FMTCAgICAgICAgICAgID0gWUVTCitFWFRSQUNUX1BSSVZBVEUgICAgICAgID0gTk8KK0VYVFJBQ1RfU1RBVElDICAgICAgICAgPSBOTworRVhUUkFDVF9MT0NBTF9DTEFTU0VTICA9IFlFUworRVhUUkFDVF9MT0NBTF9NRVRIT0RTICA9IE5PCitISURFX1VORE9DX01FTUJFUlMgICAgID0gTk8KK0hJREVfVU5ET0NfQ0xBU1NFUyAgICAgPSBOTworSElERV9GUklFTkRfQ09NUE9VTkRTICA9IE5PCitISURFX0lOX0JPRFlfRE9DUyAgICAgID0gTk8KK0lOVEVSTkFMX0RPQ1MgICAgICAgICAgPSBOTworQ0FTRV9TRU5TRV9OQU1FUyAgICAgICA9IE5PCitISURFX1NDT1BFX05BTUVTICAgICAgID0gTk8KK1NIT1dfSU5DTFVERV9GSUxFUyAgICAgPSBZRVMKK0lOTElORV9JTkZPICAgICAgICAgICAgPSBZRVMKK1NPUlRfTUVNQkVSX0RPQ1MgICAgICAgPSBZRVMKK1NPUlRfQlJJRUZfRE9DUyAgICAgICAgPSBOTworU09SVF9CWV9TQ09QRV9OQU1FICAgICA9IE5PCitHRU5FUkFURV9UT0RPTElTVCAgICAgID0gWUVTCitHRU5FUkFURV9URVNUTElTVCAgICAgID0gWUVTCitHRU5FUkFURV9CVUdMSVNUICAgICAgID0gWUVTCitHRU5FUkFURV9ERVBSRUNBVEVETElTVD0gWUVTCitFTkFCTEVEX1NFQ1RJT05TICAgICAgID0gCitNQVhfSU5JVElBTElaRVJfTElORVMgID0gMzAKK1NIT1dfVVNFRF9GSUxFUyAgICAgICAgPSBZRVMKK1NIT1dfRElSRUNUT1JJRVMgICAgICAgPSBOTworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB3YXJuaW5nIGFuZCBwcm9ncmVzcyBtZXNzYWdlcworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUVVJRVQgICAgICAgICAgICAgICAgICA9IE5PCitXQVJOSU5HUyAgICAgICAgICAgICAgID0gWUVTCitXQVJOX0lGX1VORE9DVU1FTlRFRCAgID0gWUVTCitXQVJOX0lGX0RPQ19FUlJPUiAgICAgID0gWUVTCitXQVJOX0ZPUk1BVCAgICAgICAgICAgID0gIiRmaWxlOiRsaW5lOiAkdGV4dCIKK1dBUk5fTE9HRklMRSAgICAgICAgICAgPSAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIGlucHV0IGZpbGVzCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJTlBVVCAgICAgICAgICAgICAgICAgID0gJChJTlBVVCkKK0ZJTEVfUEFUVEVSTlMgICAgICAgICAgPQorUkVDVVJTSVZFICAgICAgICAgICAgICA9IE5PCitFWENMVURFICAgICAgICAgICAgICAgID0gCitFWENMVURFX1NZTUxJTktTICAgICAgID0gTk8KK0VYQ0xVREVfUEFUVEVSTlMgICAgICAgPSAKK0VYQU1QTEVfUEFUSCAgICAgICAgICAgPSAkKEVYQU1QTEVfUEFUSCkKK0VYQU1QTEVfUEFUVEVSTlMgICAgICAgPSAkKEVYQU1QTEVfUEFUVEVSTlMpCitFWEFNUExFX1JFQ1VSU0lWRSAgICAgID0gTk8KK0lNQUdFX1BBVEggICAgICAgICAgICAgPSAKK0lOUFVUX0ZJTFRFUiAgICAgICAgICAgPSAKK0ZJTFRFUl9TT1VSQ0VfRklMRVMgICAgPSBOTworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBzb3VyY2UgYnJvd3NpbmcKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1NPVVJDRV9CUk9XU0VSICAgICAgICAgPSBZRVMKK0lOTElORV9TT1VSQ0VTICAgICAgICAgPSBOTworU1RSSVBfQ09ERV9DT01NRU5UUyAgICA9IFlFUworUkVGRVJFTkNFRF9CWV9SRUxBVElPTiA9IFlFUworUkVGRVJFTkNFU19SRUxBVElPTiAgICA9IFlFUworVkVSQkFUSU1fSEVBREVSUyAgICAgICA9IFlFUworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgYWxwaGFiZXRpY2FsIGNsYXNzIGluZGV4CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBTFBIQUJFVElDQUxfSU5ERVggICAgID0gWUVTCitDT0xTX0lOX0FMUEhBX0lOREVYICAgID0gNQorSUdOT1JFX1BSRUZJWCAgICAgICAgICA9IEF2YWhpIEFWQUhJXyBhdmFoaV8KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIEhUTUwgb3V0cHV0CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitHRU5FUkFURV9IVE1MICAgICAgICAgID0gJChHRU5FUkFURV9IVE1MKQorSFRNTF9PVVRQVVQgICAgICAgICAgICA9IGh0bWwKK0hUTUxfRklMRV9FWFRFTlNJT04gICAgPSAuaHRtbAorSFRNTF9IRUFERVIgICAgICAgICAgICA9IAorSFRNTF9GT09URVIgICAgICAgICAgICA9IAorSFRNTF9TVFlMRVNIRUVUICAgICAgICA9IAorSFRNTF9BTElHTl9NRU1CRVJTICAgICA9IFlFUworR0VORVJBVEVfSFRNTEhFTFAgICAgICA9ICQoR0VORVJBVEVfQ0hNKQorQ0hNX0ZJTEUgICAgICAgICAgICAgICA9IC4uLyQoUFJPSkVDVCkuY2htCitISENfTE9DQVRJT04gICAgICAgICAgID0gJChISENfUEFUSCkKK0dFTkVSQVRFX0NISSAgICAgICAgICAgPSAkKEdFTkVSQVRFX0NISSkKK0JJTkFSWV9UT0MgICAgICAgICAgICAgPSBOTworVE9DX0VYUEFORCAgICAgICAgICAgICA9IE5PCitESVNBQkxFX0lOREVYICAgICAgICAgID0gTk8KK0VOVU1fVkFMVUVTX1BFUl9MSU5FICAgPSAxCitHRU5FUkFURV9UUkVFVklFVyAgICAgID0gWUVTCitUUkVFVklFV19XSURUSCAgICAgICAgID0gMjUwCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBMYVRlWCBvdXRwdXQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dFTkVSQVRFX0xBVEVYICAgICAgICAgPSAkKEdFTkVSQVRFX0xBVEVYKQorTEFURVhfT1VUUFVUICAgICAgICAgICA9IGxhdGV4CitMQVRFWF9DTURfTkFNRSAgICAgICAgID0gbGF0ZXgKK01BS0VJTkRFWF9DTURfTkFNRSAgICAgPSBtYWtlaW5kZXgKK0NPTVBBQ1RfTEFURVggICAgICAgICAgPSBOTworUEFQRVJfVFlQRSAgICAgICAgICAgICA9ICQoUEFQRVJfU0laRSkKK0VYVFJBX1BBQ0tBR0VTICAgICAgICAgPSAKK0xBVEVYX0hFQURFUiAgICAgICAgICAgPSAKK1BERl9IWVBFUkxJTktTICAgICAgICAgPSBOTworVVNFX1BERkxBVEVYICAgICAgICAgICA9IE5PCitMQVRFWF9CQVRDSE1PREUgICAgICAgID0gWUVTCitMQVRFWF9ISURFX0lORElDRVMgICAgID0gTk8KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIFJURiBvdXRwdXQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dFTkVSQVRFX1JURiAgICAgICAgICAgPSAkKEdFTkVSQVRFX1JURikKK1JURl9PVVRQVVQgICAgICAgICAgICAgPSBydGYKK0NPTVBBQ1RfUlRGICAgICAgICAgICAgPSBOTworUlRGX0hZUEVSTElOS1MgICAgICAgICA9IE5PCitSVEZfU1RZTEVTSEVFVF9GSUxFICAgID0gCitSVEZfRVhURU5TSU9OU19GSUxFICAgID0gCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBtYW4gcGFnZSBvdXRwdXQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dFTkVSQVRFX01BTiAgICAgICAgICAgPSAkKEdFTkVSQVRFX01BTikKK01BTl9PVVRQVVQgICAgICAgICAgICAgPSBtYW4KK01BTl9FWFRFTlNJT04gICAgICAgICAgPSAuMQorTUFOX0xJTktTICAgICAgICAgICAgICA9IE5PCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBYTUwgb3V0cHV0CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitHRU5FUkFURV9YTUwgICAgICAgICAgID0gJChHRU5FUkFURV9YTUwpCitYTUxfT1VUUFVUICAgICAgICAgICAgID0geG1sCitYTUxfU0NIRU1BICAgICAgICAgICAgID0gCitYTUxfRFREICAgICAgICAgICAgICAgID0gCitYTUxfUFJPR1JBTUxJU1RJTkcgICAgID0gWUVTCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIEF1dG9HZW4gRGVmaW5pdGlvbnMgb3V0cHV0CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitHRU5FUkFURV9BVVRPR0VOX0RFRiAgID0gTk8KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIFBlcmwgbW9kdWxlIG91dHB1dAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR0VORVJBVEVfUEVSTE1PRCAgICAgICA9IE5PCitQRVJMTU9EX0xBVEVYICAgICAgICAgID0gTk8KK1BFUkxNT0RfUFJFVFRZICAgICAgICAgPSBZRVMKK1BFUkxNT0RfTUFLRVZBUl9QUkVGSVggPSAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIHByZXByb2Nlc3NvciAgIAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRU5BQkxFX1BSRVBST0NFU1NJTkcgICA9IFlFUworTUFDUk9fRVhQQU5TSU9OICAgICAgICA9IFlFUworRVhQQU5EX09OTFlfUFJFREVGICAgICA9IFlFUworU0VBUkNIX0lOQ0xVREVTICAgICAgICA9IFlFUworSU5DTFVERV9QQVRIICAgICAgICAgICA9IAorSU5DTFVERV9GSUxFX1BBVFRFUk5TICA9IAorUFJFREVGSU5FRCAgICAgICAgICAgICA9ICJET1hZR0VOX1NIT1VMRF9TS0lQX1RISVMiICJBVkFISV9DX0RFQ0xfQkVHSU49IiAiQVZBSElfQ19ERUNMX0VORD0iCitFWFBBTkRfQVNfREVGSU5FRCAgICAgID0gCitTS0lQX0ZVTkNUSU9OX01BQ1JPUyAgID0gWUVTCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbmZpZ3VyYXRpb246OmFkZGl0aW9ucyByZWxhdGVkIHRvIGV4dGVybmFsIHJlZmVyZW5jZXMgICAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RBR0ZJTEVTICAgICAgICAgICAgICAgPSAKK0dFTkVSQVRFX1RBR0ZJTEUgICAgICAgPSAkKERPQ0RJUikvJChQUk9KRUNUKS50YWcKK0FMTEVYVEVSTkFMUyAgICAgICAgICAgPSBOTworRVhURVJOQUxfR1JPVVBTICAgICAgICA9IFlFUworUEVSTF9QQVRIICAgICAgICAgICAgICA9ICQoUEVSTF9QQVRIKQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgZG90IHRvb2wgICAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NMQVNTX0RJQUdSQU1TICAgICAgICAgPSBOTworSElERV9VTkRPQ19SRUxBVElPTlMgICA9IE5PCitIQVZFX0RPVCAgICAgICAgICAgICAgID0gJChIQVZFX0RPVCkKK0NMQVNTX0dSQVBIICAgICAgICAgICAgPSBOTworQ09MTEFCT1JBVElPTl9HUkFQSCAgICA9IE5PCitVTUxfTE9PSyAgICAgICAgICAgICAgID0gTk8KK1RFTVBMQVRFX1JFTEFUSU9OUyAgICAgPSBOTworSU5DTFVERV9HUkFQSCAgICAgICAgICA9IE5PCitJTkNMVURFRF9CWV9HUkFQSCAgICAgID0gTk8KK0NBTExfR1JBUEggICAgICAgICAgICAgPSBOTworR1JBUEhJQ0FMX0hJRVJBUkNIWSAgICA9IE5PCitET1RfSU1BR0VfRk9STUFUICAgICAgID0gcG5nCitET1RfUEFUSCAgICAgICAgICAgICAgID0gJChET1RfUEFUSCkKK0RPVEZJTEVfRElSUyAgICAgICAgICAgPSAKK01BWF9ET1RfR1JBUEhfV0lEVEggICAgPSAxMDI0CitNQVhfRE9UX0dSQVBIX0hFSUdIVCAgID0gMTAyNAorTUFYX0RPVF9HUkFQSF9ERVBUSCAgICA9IDAKK0dFTkVSQVRFX0xFR0VORCAgICAgICAgPSBZRVMKK0RPVF9DTEVBTlVQICAgICAgICAgICAgPSBZRVMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29uZmlndXJhdGlvbjo6YWRkaXRpb25zIHJlbGF0ZWQgdG8gdGhlIHNlYXJjaCBlbmdpbmUgICAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1NFQVJDSEVOR0lORSAgICAgICAgICAgPSBOTwpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2RveHlnZW5fdG9fZGV2aGVscC54c2wgYi9hdmFoaS0wLjYuMzEvZG94eWdlbl90b19kZXZoZWxwLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTZhYTk3Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2RveHlnZW5fdG9fZGV2aGVscC54c2wKQEAgLTAsMCArMSw2NiBAQAorPHhzbDpzdHlsZXNoZWV0CisgICAgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisgICAgeG1sbnM6Zm89Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML0Zvcm1hdCIKKyAgICB2ZXJzaW9uPSIxLjAiPgorCis8IS0tIEJhc2VkIG9uIHRoZSBYU0wgc3R5bGVzaGVldCBmcm9tIGd0a21tIC0gTGVubmFydCAtLT4KKworPHhzbDpvdXRwdXQgbWV0aG9kPSJ4bWwiIHZlcnNpb249IjEuMCIgaW5kZW50PSJ5ZXMiLz4KKworPHhzbDpwYXJhbSBuYW1lPSJyZWZlcmVuY2VfcHJlZml4Ij4uLi8uLi8uLi9kb2MvYXZhaGktZG9jcy9odG1sLzwveHNsOnBhcmFtPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIvIj4KKyAgPGJvb2sgdGl0bGU9IkF2YWhpIFJlZmVyZW5jZSBNYW51YWwiCisgICAgICAgIG5hbWU9ImF2YWhpIgorICAgICAgICBsaW5rPSJ7JHJlZmVyZW5jZV9wcmVmaXh9bWFpbi5odG1sIj4KKyAgPGNoYXB0ZXJzPgorICAgIDxzdWIgbmFtZT0iSGVhZGVycyIgbGluaz0ieyRyZWZlcmVuY2VfcHJlZml4fWZpbGVzLmh0bWwiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJkb3h5Z2VuaW5kZXgvY29tcG91bmRbQGtpbmQ9J2ZpbGUnXSI+CisgICAgICAgIDx4c2w6c29ydCBzZWxlY3Q9Ii4iLz4KKyAgICAgIDwveHNsOmFwcGx5LXRlbXBsYXRlcz4KKyAgICA8L3N1Yj4KKyAgPC9jaGFwdGVycz4KKworICA8ZnVuY3Rpb25zPgorICAgIDwhLS0gQHRvZG86IG1heWJlIHNlbGVjdCBvbmx5IHRoZSByZWFsIGZ1bmN0aW9ucywgaWUgdGhvc2Ugd2l0aCBraW5kPT0iZnVuY3Rpb24iPyAtLT4KKyAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9ImRveHlnZW5pbmRleC9jb21wb3VuZC9mdW5jdGlvbiIgbW9kZT0iYXMtZnVuY3Rpb24iLz4KKyAgPC9mdW5jdGlvbnM+CisgIDwvYm9vaz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb21wb3VuZCI+CisgIDx4c2w6cGFyYW0gbmFtZT0ibmFtZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Im5hbWUiLz48L3hzbDpwYXJhbT4KKyAgPHhzbDpwYXJhbSBuYW1lPSJsaW5rIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQHJlZmlkIi8+Lmh0bWw8L3hzbDpwYXJhbT4KKyAgPHN1YiBuYW1lPSJ7JG5hbWV9IiBsaW5rPSJ7JHJlZmVyZW5jZV9wcmVmaXh9eyRsaW5rfSI+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0ibWVtYmVyIiBtb2RlPSJhcy1zdWIiPgorICAgIDx4c2w6c29ydCBzZWxlY3Q9Ii4iLz4KKyAgPC94c2w6YXBwbHktdGVtcGxhdGVzPgorICA8L3N1Yj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJtZW1iZXIiIG1vZGU9ImFzLWZ1bmN0aW9uIj4KKyAgPCEtLQorICA8ZnVuY3Rpb24gbmFtZT0iYXRrX3NldF92YWx1ZSIgbGluaz0iYXRrLWF0a3ZhbHVlLmh0bWwjQVRLLVNFVC1WQUxVRSIvPgorICAtLT4KKyAgPHhzbDpwYXJhbSBuYW1lPSJuYW1lIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0ibmFtZSIvPjwveHNsOnBhcmFtPgorICA8IS0tIExpbmsgaXMgcmVmaWQgYXR0cmlidXRlIG9mIHBhcmVudCBlbGVtZW50ICsgIiMiICsgZGlmZiBiZXR3ZWVuIHJlZmlkIG9mIHBhcmVudCBhbmQgb3duIHJlZmlkIC0tPgorICA8eHNsOnBhcmFtIG5hbWU9InJlZmlkX3BhcmVudCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9InBhcmVudDo6bm9kZSgpL0ByZWZpZCIvPjwveHNsOnBhcmFtPgorICA8eHNsOnBhcmFtIG5hbWU9Im93bl9yZWZpZCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkByZWZpZCIvPjwveHNsOnBhcmFtPgorICA8eHNsOnBhcmFtIG5hbWU9Im9mZnNldCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9InN0cmluZy1sZW5ndGgoJHJlZmlkX3BhcmVudCkgKyAzIi8+PC94c2w6cGFyYW0+CisgIDx4c2w6cGFyYW0gbmFtZT0icmVmX2RpZmYiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJzdWJzdHJpbmcoJG93bl9yZWZpZCwgJG9mZnNldCwgMzIpIi8+PC94c2w6cGFyYW0+CisgIDx4c2w6cGFyYW0gbmFtZT0ibGluayI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRyZWZpZF9wYXJlbnQiLz4uaHRtbCM8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJHJlZl9kaWZmIi8+PC94c2w6cGFyYW0+CisgIDxmdW5jdGlvbiBuYW1lPSJ7JG5hbWV9IiBsaW5rPSJ7JHJlZmVyZW5jZV9wcmVmaXh9eyRsaW5rfSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9Im1lbWJlciIgbW9kZT0iYXMtc3ViIj4KKyAgPHhzbDpwYXJhbSBuYW1lPSJuYW1lIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0ibmFtZSIvPjwveHNsOnBhcmFtPgorICA8IS0tIExpbmsgaXMgcmVmaWQgYXR0cmlidXRlIG9mIHBhcmVudCBlbGVtZW50ICsgIiMiICsgZGlmZiBiZXR3ZWVuIHJlZmlkIG9mIHBhcmVudCBhbmQgb3duIHJlZmlkIC0tPgorICA8eHNsOnBhcmFtIG5hbWU9InJlZmlkX3BhcmVudCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9InBhcmVudDo6bm9kZSgpL0ByZWZpZCIvPjwveHNsOnBhcmFtPgorICA8eHNsOnBhcmFtIG5hbWU9Im93bl9yZWZpZCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkByZWZpZCIvPjwveHNsOnBhcmFtPgorICA8eHNsOnBhcmFtIG5hbWU9Im9mZnNldCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9InN0cmluZy1sZW5ndGgoJHJlZmlkX3BhcmVudCkgKyAzIi8+PC94c2w6cGFyYW0+CisgIDx4c2w6cGFyYW0gbmFtZT0icmVmX2RpZmYiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJzdWJzdHJpbmcoJG93bl9yZWZpZCwgJG9mZnNldCwgMzIpIi8+PC94c2w6cGFyYW0+CisgIDx4c2w6cGFyYW0gbmFtZT0ibGluayI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRyZWZpZF9wYXJlbnQiLz4uaHRtbCM8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJHJlZl9kaWZmIi8+PC94c2w6cGFyYW0+CisgIDxzdWIgbmFtZT0ieyRuYW1lfSIgbGluaz0ieyRyZWZlcmVuY2VfcHJlZml4fXskbGlua30iLz4KKzwveHNsOnRlbXBsYXRlPgorCis8L3hzbDpzdHlsZXNoZWV0PgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2V4YW1wbGVzL01ha2VmaWxlLmFtIGIvYXZhaGktMC42LjMxL2V4YW1wbGVzL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiYjdmMDAKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvZXhhbXBsZXMvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSw2MyBAQAorIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKyMKKyMgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyMgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyMgVVNBLgorCitBTV9DRkxBR1M9LUkkKHRvcF9zcmNkaXIpCisKK2lmIEVOQUJMRV9URVNUUworbm9pbnN0X1BST0dSQU1TID0gXAorCWNvcmUtcHVibGlzaC1zZXJ2aWNlIFwKKwljb3JlLWJyb3dzZS1zZXJ2aWNlcworZW5kaWYKKworY29yZV9wdWJsaXNoX3NlcnZpY2VfU09VUkNFUyA9IGNvcmUtcHVibGlzaC1zZXJ2aWNlLmMKK2NvcmVfcHVibGlzaF9zZXJ2aWNlX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKQorY29yZV9wdWJsaXNoX3NlcnZpY2VfTERBREQgPSAkKEFNX0xEQUREKSAuLi9hdmFoaS1jb3JlL2xpYmF2YWhpLWNvcmUubGEgLi4vYXZhaGktY29tbW9uL2xpYmF2YWhpLWNvbW1vbi5sYQorCitjb3JlX2Jyb3dzZV9zZXJ2aWNlc19TT1VSQ0VTID0gY29yZS1icm93c2Utc2VydmljZXMuYworY29yZV9icm93c2Vfc2VydmljZXNfQ0ZMQUdTID0gJChBTV9DRkxBR1MpCitjb3JlX2Jyb3dzZV9zZXJ2aWNlc19MREFERCA9ICQoQU1fTERBREQpIC4uL2F2YWhpLWNvcmUvbGliYXZhaGktY29yZS5sYSAuLi9hdmFoaS1jb21tb24vbGliYXZhaGktY29tbW9uLmxhCisKK2lmIEhBVkVfREJVUworaWYgRU5BQkxFX1RFU1RTCisKK25vaW5zdF9QUk9HUkFNUyArPSBcCisJY2xpZW50LXB1Ymxpc2gtc2VydmljZSBcCisJY2xpZW50LWJyb3dzZS1zZXJ2aWNlcworZW5kaWYKKworY2xpZW50X3B1Ymxpc2hfc2VydmljZV9TT1VSQ0VTID0gY2xpZW50LXB1Ymxpc2gtc2VydmljZS5jCitjbGllbnRfcHVibGlzaF9zZXJ2aWNlX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKQorY2xpZW50X3B1Ymxpc2hfc2VydmljZV9MREFERCA9ICQoQU1fTERBREQpIC4uL2F2YWhpLWNsaWVudC9saWJhdmFoaS1jbGllbnQubGEgLi4vYXZhaGktY29tbW9uL2xpYmF2YWhpLWNvbW1vbi5sYQorCitjbGllbnRfYnJvd3NlX3NlcnZpY2VzX1NPVVJDRVMgPSBjbGllbnQtYnJvd3NlLXNlcnZpY2VzLmMKK2NsaWVudF9icm93c2Vfc2VydmljZXNfQ0ZMQUdTID0gJChBTV9DRkxBR1MpCitjbGllbnRfYnJvd3NlX3NlcnZpY2VzX0xEQUREID0gJChBTV9MREFERCkgLi4vYXZhaGktY2xpZW50L2xpYmF2YWhpLWNsaWVudC5sYSAuLi9hdmFoaS1jb21tb24vbGliYXZhaGktY29tbW9uLmxhCisKK2lmIEhBVkVfR0xJQgorCitpZiBFTkFCTEVfVEVTVFMKK25vaW5zdF9QUk9HUkFNUyArPSBcCisJZ2xpYi1pbnRlZ3JhdGlvbgorZW5kaWYKKworZ2xpYl9pbnRlZ3JhdGlvbl9TT1VSQ0VTID0gZ2xpYi1pbnRlZ3JhdGlvbi5jCitnbGliX2ludGVncmF0aW9uX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAkKEdMSUIyMF9DRkxBR1MpCitnbGliX2ludGVncmF0aW9uX0xEQUREID0gJChBTV9MREFERCkgJChHTElCMjBfTElCUykgLi4vYXZhaGktY2xpZW50L2xpYmF2YWhpLWNsaWVudC5sYSAuLi9hdmFoaS1jb21tb24vbGliYXZhaGktY29tbW9uLmxhIC4uL2F2YWhpLWdsaWIvbGliYXZhaGktZ2xpYi5sYQorCitlbmRpZgorCitlbmRpZgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2V4YW1wbGVzL01ha2VmaWxlLmluIGIvYXZhaGktMC42LjMxL2V4YW1wbGVzL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNWY5YmEKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvZXhhbXBsZXMvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw4MTUgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEuMyBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKyMKKyMgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyMgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyMgVVNBLgorCitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitARU5BQkxFX1RFU1RTX1RSVUVAbm9pbnN0X1BST0dSQU1TID0gY29yZS1wdWJsaXNoLXNlcnZpY2UkKEVYRUVYVCkgXAorQEVOQUJMRV9URVNUU19UUlVFQAljb3JlLWJyb3dzZS1zZXJ2aWNlcyQoRVhFRVhUKSBcCitARU5BQkxFX1RFU1RTX1RSVUVACSQoYW1fX0VYRUVYVF8xKSAkKGFtX19FWEVFWFRfMikKK0BFTkFCTEVfVEVTVFNfVFJVRUBASEFWRV9EQlVTX1RSVUVAYW1fX2FwcGVuZF8xID0gXAorQEVOQUJMRV9URVNUU19UUlVFQEBIQVZFX0RCVVNfVFJVRUAJY2xpZW50LXB1Ymxpc2gtc2VydmljZSBcCitARU5BQkxFX1RFU1RTX1RSVUVAQEhBVkVfREJVU19UUlVFQAljbGllbnQtYnJvd3NlLXNlcnZpY2VzCisKK0BFTkFCTEVfVEVTVFNfVFJVRUBASEFWRV9EQlVTX1RSVUVAQEhBVkVfR0xJQl9UUlVFQGFtX19hcHBlbmRfMiA9IFwKK0BFTkFCTEVfVEVTVFNfVFJVRUBASEFWRV9EQlVTX1RSVUVAQEhBVkVfR0xJQl9UUlVFQAlnbGliLWludGVncmF0aW9uCisKK3N1YmRpciA9IGV4YW1wbGVzCitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9hY3hfcHRocmVhZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vZ2NjX3N0YWNrX3Byb3RlY3QubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2djY192aXNpYmlsaXR5Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9pbnRsdG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vaW50cm9zcGVjdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbGlidG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHRvcHRpb25zLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9sdHN1Z2FyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9sdHZlcnNpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2x0fm9ic29sZXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9ubHMubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vcHl0aG9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2FjaW5jbHVkZS5tNCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9kb3h5Z2VuLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CitARU5BQkxFX1RFU1RTX1RSVUVAQEhBVkVfREJVU19UUlVFQGFtX19FWEVFWFRfMSA9IGNsaWVudC1wdWJsaXNoLXNlcnZpY2UkKEVYRUVYVCkgXAorQEVOQUJMRV9URVNUU19UUlVFQEBIQVZFX0RCVVNfVFJVRUAJY2xpZW50LWJyb3dzZS1zZXJ2aWNlcyQoRVhFRVhUKQorQEVOQUJMRV9URVNUU19UUlVFQEBIQVZFX0RCVVNfVFJVRUBASEFWRV9HTElCX1RSVUVAYW1fX0VYRUVYVF8yID0gZ2xpYi1pbnRlZ3JhdGlvbiQoRVhFRVhUKQorUFJPR1JBTVMgPSAkKG5vaW5zdF9QUk9HUkFNUykKK2FtX19jbGllbnRfYnJvd3NlX3NlcnZpY2VzX1NPVVJDRVNfRElTVCA9IGNsaWVudC1icm93c2Utc2VydmljZXMuYworQEhBVkVfREJVU19UUlVFQGFtX2NsaWVudF9icm93c2Vfc2VydmljZXNfT0JKRUNUUyA9IGNsaWVudF9icm93c2Vfc2VydmljZXMtY2xpZW50LWJyb3dzZS1zZXJ2aWNlcy4kKE9CSkVYVCkKK2NsaWVudF9icm93c2Vfc2VydmljZXNfT0JKRUNUUyA9ICQoYW1fY2xpZW50X2Jyb3dzZV9zZXJ2aWNlc19PQkpFQ1RTKQorQEhBVkVfREJVU19UUlVFQGNsaWVudF9icm93c2Vfc2VydmljZXNfREVQRU5ERU5DSUVTID0gIFwKK0BIQVZFX0RCVVNfVFJVRUAJLi4vYXZhaGktY2xpZW50L2xpYmF2YWhpLWNsaWVudC5sYSBcCitASEFWRV9EQlVTX1RSVUVACS4uL2F2YWhpLWNvbW1vbi9saWJhdmFoaS1jb21tb24ubGEKK0FNX1ZfbHQgPSAkKGFtX192X2x0X0BBTV9WQCkKK2FtX192X2x0XyA9ICQoYW1fX3ZfbHRfQEFNX0RFRkFVTFRfVkApCithbV9fdl9sdF8wID0gLS1zaWxlbnQKK2NsaWVudF9icm93c2Vfc2VydmljZXNfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCisJJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpIFwKKwkkKGNsaWVudF9icm93c2Vfc2VydmljZXNfQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSBcCisJJChMREZMQUdTKSAtbyAkQAorYW1fX2NsaWVudF9wdWJsaXNoX3NlcnZpY2VfU09VUkNFU19ESVNUID0gY2xpZW50LXB1Ymxpc2gtc2VydmljZS5jCitASEFWRV9EQlVTX1RSVUVAYW1fY2xpZW50X3B1Ymxpc2hfc2VydmljZV9PQkpFQ1RTID0gY2xpZW50X3B1Ymxpc2hfc2VydmljZS1jbGllbnQtcHVibGlzaC1zZXJ2aWNlLiQoT0JKRVhUKQorY2xpZW50X3B1Ymxpc2hfc2VydmljZV9PQkpFQ1RTID0gJChhbV9jbGllbnRfcHVibGlzaF9zZXJ2aWNlX09CSkVDVFMpCitASEFWRV9EQlVTX1RSVUVAY2xpZW50X3B1Ymxpc2hfc2VydmljZV9ERVBFTkRFTkNJRVMgPSAgXAorQEhBVkVfREJVU19UUlVFQAkuLi9hdmFoaS1jbGllbnQvbGliYXZhaGktY2xpZW50LmxhIFwKK0BIQVZFX0RCVVNfVFJVRUAJLi4vYXZhaGktY29tbW9uL2xpYmF2YWhpLWNvbW1vbi5sYQorY2xpZW50X3B1Ymxpc2hfc2VydmljZV9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKKwkkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgXAorCSQoY2xpZW50X3B1Ymxpc2hfc2VydmljZV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpIFwKKwkkKExERkxBR1MpIC1vICRACithbV9jb3JlX2Jyb3dzZV9zZXJ2aWNlc19PQkpFQ1RTID0gIFwKKwljb3JlX2Jyb3dzZV9zZXJ2aWNlcy1jb3JlLWJyb3dzZS1zZXJ2aWNlcy4kKE9CSkVYVCkKK2NvcmVfYnJvd3NlX3NlcnZpY2VzX09CSkVDVFMgPSAkKGFtX2NvcmVfYnJvd3NlX3NlcnZpY2VzX09CSkVDVFMpCitjb3JlX2Jyb3dzZV9zZXJ2aWNlc19ERVBFTkRFTkNJRVMgPSAuLi9hdmFoaS1jb3JlL2xpYmF2YWhpLWNvcmUubGEgXAorCS4uL2F2YWhpLWNvbW1vbi9saWJhdmFoaS1jb21tb24ubGEKK2NvcmVfYnJvd3NlX3NlcnZpY2VzX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAorCSQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSBcCisJJChjb3JlX2Jyb3dzZV9zZXJ2aWNlc19DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpIFwKKwkkKExERkxBR1MpIC1vICRACithbV9jb3JlX3B1Ymxpc2hfc2VydmljZV9PQkpFQ1RTID0gIFwKKwljb3JlX3B1Ymxpc2hfc2VydmljZS1jb3JlLXB1Ymxpc2gtc2VydmljZS4kKE9CSkVYVCkKK2NvcmVfcHVibGlzaF9zZXJ2aWNlX09CSkVDVFMgPSAkKGFtX2NvcmVfcHVibGlzaF9zZXJ2aWNlX09CSkVDVFMpCitjb3JlX3B1Ymxpc2hfc2VydmljZV9ERVBFTkRFTkNJRVMgPSAuLi9hdmFoaS1jb3JlL2xpYmF2YWhpLWNvcmUubGEgXAorCS4uL2F2YWhpLWNvbW1vbi9saWJhdmFoaS1jb21tb24ubGEKK2NvcmVfcHVibGlzaF9zZXJ2aWNlX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAorCSQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSBcCisJJChjb3JlX3B1Ymxpc2hfc2VydmljZV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpIFwKKwkkKExERkxBR1MpIC1vICRACithbV9fZ2xpYl9pbnRlZ3JhdGlvbl9TT1VSQ0VTX0RJU1QgPSBnbGliLWludGVncmF0aW9uLmMKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HTElCX1RSVUVAYW1fZ2xpYl9pbnRlZ3JhdGlvbl9PQkpFQ1RTID0gZ2xpYl9pbnRlZ3JhdGlvbi1nbGliLWludGVncmF0aW9uLiQoT0JKRVhUKQorZ2xpYl9pbnRlZ3JhdGlvbl9PQkpFQ1RTID0gJChhbV9nbGliX2ludGVncmF0aW9uX09CSkVDVFMpCithbV9fREVQRU5ERU5DSUVTXzEgPQorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dMSUJfVFJVRUBnbGliX2ludGVncmF0aW9uX0RFUEVOREVOQ0lFUyA9ICBcCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR0xJQl9UUlVFQAkkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dMSUJfVFJVRUAJLi4vYXZhaGktY2xpZW50L2xpYmF2YWhpLWNsaWVudC5sYSBcCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR0xJQl9UUlVFQAkuLi9hdmFoaS1jb21tb24vbGliYXZhaGktY29tbW9uLmxhIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HTElCX1RSVUVACS4uL2F2YWhpLWdsaWIvbGliYXZhaGktZ2xpYi5sYQorZ2xpYl9pbnRlZ3JhdGlvbl9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKKwkkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgXAorCSQoZ2xpYl9pbnRlZ3JhdGlvbl9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgXAorCS1vICRACitERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQorZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAorYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKK2FtX19tdiA9IG12IC1mCitDT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKKwkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitMVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCisJJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCisJJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfQEFNX1ZAKQorYW1fX3ZfQ0NfID0gJChhbV9fdl9DQ19AQU1fREVGQVVMVF9WQCkKK2FtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAiICRAOworQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQorYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKK2FtX192X2F0XzAgPSBACitDQ0xEID0gJChDQykKK0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKKwkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKK0FNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF9AQU1fVkApCithbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF9AQU1fREVGQVVMVF9WQCkKK2FtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICIgJEA7CitBTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKK2FtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKK2FtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgIiAkQDsKK1NPVVJDRVMgPSAkKGNsaWVudF9icm93c2Vfc2VydmljZXNfU09VUkNFUykgXAorCSQoY2xpZW50X3B1Ymxpc2hfc2VydmljZV9TT1VSQ0VTKSBcCisJJChjb3JlX2Jyb3dzZV9zZXJ2aWNlc19TT1VSQ0VTKSBcCisJJChjb3JlX3B1Ymxpc2hfc2VydmljZV9TT1VSQ0VTKSAkKGdsaWJfaW50ZWdyYXRpb25fU09VUkNFUykKK0RJU1RfU09VUkNFUyA9ICQoYW1fX2NsaWVudF9icm93c2Vfc2VydmljZXNfU09VUkNFU19ESVNUKSBcCisJJChhbV9fY2xpZW50X3B1Ymxpc2hfc2VydmljZV9TT1VSQ0VTX0RJU1QpIFwKKwkkKGNvcmVfYnJvd3NlX3NlcnZpY2VzX1NPVVJDRVMpIFwKKwkkKGNvcmVfcHVibGlzaF9zZXJ2aWNlX1NPVVJDRVMpIFwKKwkkKGFtX19nbGliX2ludGVncmF0aW9uX1NPVVJDRVNfRElTVCkKK0VUQUdTID0gZXRhZ3MKK0NUQUdTID0gY3RhZ3MKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitBQ0xPQ0FMID0gQEFDTE9DQUxACitBTExfTElOR1VBUyA9IEBBTExfTElOR1VBU0AKK0FNVEFSID0gQEFNVEFSQAorQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACitBUiA9IEBBUkAKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBVkFISV9BVVRPSVBEX0dST1VQID0gQEFWQUhJX0FVVE9JUERfR1JPVVBACitBVkFISV9BVVRPSVBEX1VTRVIgPSBAQVZBSElfQVVUT0lQRF9VU0VSQAorQVZBSElfR1JPVVAgPSBAQVZBSElfR1JPVVBACitBVkFISV9QUklWX0FDQ0VTU19HUk9VUCA9IEBBVkFISV9QUklWX0FDQ0VTU19HUk9VUEAKK0FWQUhJX1VTRVIgPSBAQVZBSElfVVNFUkAKK0FXSyA9IEBBV0tACitDQVRBTE9HUyA9IEBDQVRBTE9HU0AKK0NBVE9CSkVYVCA9IEBDQVRPQkpFWFRACitDQyA9IEBDQ0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1hYID0gQENYWEAKK0NYWENQUCA9IEBDWFhDUFBACitDWFhERVBNT0RFID0gQENYWERFUE1PREVACitDWFhGTEFHUyA9IEBDWFhGTEFHU0AKK0NZR1BBVEhfVyA9IEBDWUdQQVRIX1dACitEQVRBRElSTkFNRSA9IEBEQVRBRElSTkFNRUAKK0RCVVNfQ0ZMQUdTID0gQERCVVNfQ0ZMQUdTQAorREJVU19MSUJTID0gQERCVVNfTElCU0AKK0RCVVNfU1lTVEVNX0JVU19ERUZBVUxUX0FERFJFU1MgPSBAREJVU19TWVNURU1fQlVTX0RFRkFVTFRfQUREUkVTU0AKK0RCVVNfU1lTX0RJUiA9IEBEQlVTX1NZU19ESVJACitERUZTID0gQERFRlNACitERVBESVIgPSBAREVQRElSQAorRExMVE9PTCA9IEBETExUT09MQAorRE9YWUdFTl9QQVBFUl9TSVpFID0gQERPWFlHRU5fUEFQRVJfU0laRUAKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRFhfQ09ORklHID0gQERYX0NPTkZJR0AKK0RYX0RPQ0RJUiA9IEBEWF9ET0NESVJACitEWF9ET1QgPSBARFhfRE9UQAorRFhfRE9YWUdFTiA9IEBEWF9ET1hZR0VOQAorRFhfRFZJUFMgPSBARFhfRFZJUFNACitEWF9FR1JFUCA9IEBEWF9FR1JFUEAKK0RYX0VOViA9IEBEWF9FTlZACitEWF9GTEFHX2NoaSA9IEBEWF9GTEFHX2NoaUAKK0RYX0ZMQUdfY2htID0gQERYX0ZMQUdfY2htQAorRFhfRkxBR19kb2MgPSBARFhfRkxBR19kb2NACitEWF9GTEFHX2RvdCA9IEBEWF9GTEFHX2RvdEAKK0RYX0ZMQUdfaHRtbCA9IEBEWF9GTEFHX2h0bWxACitEWF9GTEFHX21hbiA9IEBEWF9GTEFHX21hbkAKK0RYX0ZMQUdfcGRmID0gQERYX0ZMQUdfcGRmQAorRFhfRkxBR19wcyA9IEBEWF9GTEFHX3BzQAorRFhfRkxBR19ydGYgPSBARFhfRkxBR19ydGZACitEWF9GTEFHX3htbCA9IEBEWF9GTEFHX3htbEAKK0RYX0hIQyA9IEBEWF9ISENACitEWF9MQVRFWCA9IEBEWF9MQVRFWEAKK0RYX01BS0VJTkRFWCA9IEBEWF9NQUtFSU5ERVhACitEWF9QREZMQVRFWCA9IEBEWF9QREZMQVRFWEAKK0RYX1BFUkwgPSBARFhfUEVSTEAKK0RYX1BST0pFQ1QgPSBARFhfUFJPSkVDVEAKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRVhFRVhUID0gQEVYRUVYVEAKK0ZHUkVQID0gQEZHUkVQQAorR0FDVVRJTCA9IEBHQUNVVElMQAorR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKK0dMSUIyMF9DRkxBR1MgPSBAR0xJQjIwX0NGTEFHU0AKK0dMSUIyMF9MSUJTID0gQEdMSUIyMF9MSUJTQAorR01PRklMRVMgPSBAR01PRklMRVNACitHTVNHRk1UID0gQEdNU0dGTVRACitHT0JKRUNUX0NGTEFHUyA9IEBHT0JKRUNUX0NGTEFHU0AKK0dPQkpFQ1RfTElCUyA9IEBHT0JKRUNUX0xJQlNACitHUkVQID0gQEdSRVBACitHVEsyMF9DRkxBR1MgPSBAR1RLMjBfQ0ZMQUdTQAorR1RLMjBfTElCUyA9IEBHVEsyMF9MSUJTQAorR1RLMzBfQ0ZMQUdTID0gQEdUSzMwX0NGTEFHU0AKK0dUSzMwX0xJQlMgPSBAR1RLMzBfTElCU0AKK0hPV0xfQ09NUEFUX1ZFUlNJT04gPSBASE9XTF9DT01QQVRfVkVSU0lPTkAKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSU5TVE9CSkVYVCA9IEBJTlNUT0JKRVhUQAorSU5UTExJQlMgPSBASU5UTExJQlNACitJTlRMVE9PTF9FWFRSQUNUID0gQElOVExUT09MX0VYVFJBQ1RACitJTlRMVE9PTF9NRVJHRSA9IEBJTlRMVE9PTF9NRVJHRUAKK0lOVExUT09MX1BFUkwgPSBASU5UTFRPT0xfUEVSTEAKK0lOVExUT09MX1VQREFURSA9IEBJTlRMVE9PTF9VUERBVEVACitJTlRST1NQRUNUSU9OX0NGTEFHUyA9IEBJTlRST1NQRUNUSU9OX0NGTEFHU0AKK0lOVFJPU1BFQ1RJT05fQ09NUElMRVIgPSBASU5UUk9TUEVDVElPTl9DT01QSUxFUkAKK0lOVFJPU1BFQ1RJT05fR0VORVJBVEUgPSBASU5UUk9TUEVDVElPTl9HRU5FUkFURUAKK0lOVFJPU1BFQ1RJT05fR0lSRElSID0gQElOVFJPU1BFQ1RJT05fR0lSRElSQAorSU5UUk9TUEVDVElPTl9MSUJTID0gQElOVFJPU1BFQ1RJT05fTElCU0AKK0lOVFJPU1BFQ1RJT05fTUFLRUZJTEUgPSBASU5UUk9TUEVDVElPTl9NQUtFRklMRUAKK0lOVFJPU1BFQ1RJT05fU0NBTk5FUiA9IEBJTlRST1NQRUNUSU9OX1NDQU5ORVJACitJTlRST1NQRUNUSU9OX1RZUEVMSUJESVIgPSBASU5UUk9TUEVDVElPTl9UWVBFTElCRElSQAorTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMSUJBVkFISV9DTElFTlRfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NMSUVOVF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9DT01NT05fVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NPTU1PTl9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9DT01QQVRfSE9XTF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ09NUEFUX0hPV0xfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfQ09NUEFUX0xJQkROU19TRF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ09NUEFUX0xJQkROU19TRF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9DT1JFX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DT1JFX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0dMSUJfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0dMSUJfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfR09CSkVDVF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfR09CSkVDVF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9RVDNfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX1FUM19WRVJTSU9OX0lORk9ACitMSUJBVkFISV9RVDRfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX1FUNF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9VSV9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfVUlfVkVSU0lPTl9JTkZPQAorTElCREFFTU9OX0NGTEFHUyA9IEBMSUJEQUVNT05fQ0ZMQUdTQAorTElCREFFTU9OX0xJQlMgPSBATElCREFFTU9OX0xJQlNACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQExJQlNACitMSUJUT09MID0gQExJQlRPT0xACitMSVBPID0gQExJUE9ACitMTl9TID0gQExOX1NACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACitNQ1MgPSBATUNTQAorTURBU1NFTUJMRVIgPSBATURBU1NFTUJMRVJACitNS0RJUl9QID0gQE1LRElSX1BACitNS0lOU1RBTExESVJTID0gQE1LSU5TVEFMTERJUlNACitNT0NfUVQzID0gQE1PQ19RVDNACitNT0NfUVQ0ID0gQE1PQ19RVDRACitNT05PRE9DRVIgPSBATU9OT0RPQ0VSQAorTU9OT0RPQ19DRkxBR1MgPSBATU9OT0RPQ19DRkxBR1NACitNT05PRE9DX0RJUiA9IEBNT05PRE9DX0RJUkAKK01PTk9ET0NfTElCUyA9IEBNT05PRE9DX0xJQlNACitNU0dGTVQgPSBATVNHRk1UQAorTVNHRk1UX09QVFMgPSBATVNHRk1UX09QVFNACitNU0dNRVJHRSA9IEBNU0dNRVJHRUAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPVE9PTCA9IEBPVE9PTEAKK09UT09MNjQgPSBAT1RPT0w2NEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAorUEtHX0NPTkZJR19MSUJESVIgPSBAUEtHX0NPTkZJR19MSUJESVJACitQS0dfQ09ORklHX1BBVEggPSBAUEtHX0NPTkZJR19QQVRIQAorUE9GSUxFUyA9IEBQT0ZJTEVTQAorUE9TVUIgPSBAUE9TVUJACitQT19JTl9EQVRBRElSX0ZBTFNFID0gQFBPX0lOX0RBVEFESVJfRkFMU0VACitQT19JTl9EQVRBRElSX1RSVUUgPSBAUE9fSU5fREFUQURJUl9UUlVFQAorUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAorUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACitQVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAorUFlUSE9OID0gQFBZVEhPTkAKK1BZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACitQWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAorUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAorUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACitRVDNfQ0ZMQUdTID0gQFFUM19DRkxBR1NACitRVDNfTElCUyA9IEBRVDNfTElCU0AKK1FUNF9DRkxBR1MgPSBAUVQ0X0NGTEFHU0AKK1FUNF9MSUJTID0gQFFUNF9MSUJTQAorUkFOTElCID0gQFJBTkxJQkAKK1NFRCA9IEBTRURACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU1RPVyA9IEBTVE9XQAorU1RSSVAgPSBAU1RSSVBACitVU0VfTkxTID0gQFVTRV9OTFNACitWRVJTSU9OID0gQFZFUlNJT05ACitWSVNJQklMSVRZX0hJRERFTl9DRkxBR1MgPSBAVklTSUJJTElUWV9ISURERU5fQ0ZMQUdTQAorWEdFVFRFWFQgPSBAWEdFVFRFWFRACitYTUxfQ0ZMQUdTID0gQFhNTF9DRkxBR1NACitYTUxfTElCUyA9IEBYTUxfTElCU0AKK2Fic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACithYnNfc3JjZGlyID0gQGFic19zcmNkaXJACithYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACithYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKK2FjX2N0X0FSID0gQGFjX2N0X0FSQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9DWFggPSBAYWNfY3RfQ1hYQAorYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAorYWN4X3B0aHJlYWRfY29uZmlnID0gQGFjeF9wdGhyZWFkX2NvbmZpZ0AKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYXZhaGlfcnVudGltZV9kaXIgPSBAYXZhaGlfcnVudGltZV9kaXJACithdmFoaV9zb2NrZXQgPSBAYXZhaGlfc29ja2V0QAorYXZhaGlsb2NhbGVkaXIgPSBAYXZhaGlsb2NhbGVkaXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitidWlsZGRpciA9IEBidWlsZGRpckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZG9jZGlyID0gQGRvY2RpckAKK2R2aWRpciA9IEBkdmlkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2hhdmVfcGtnX2NvbmZpZyA9IEBoYXZlX3BrZ19jb25maWdACitoYXZlX3htbHRvbWFuID0gQGhhdmVfeG1sdG9tYW5ACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAoraW50ZXJmYWNlc2RpciA9IEBpbnRlcmZhY2VzZGlyQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3BrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACitwa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3BzZGlyID0gQHBzZGlyQAorcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKK3B5dGhvbmRpciA9IEBweXRob25kaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACitzeXN0ZW1kc3lzdGVtdW5pdGRpciA9IEBzeXN0ZW1kc3lzdGVtdW5pdGRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorQU1fQ0ZMQUdTID0gLUkkKHRvcF9zcmNkaXIpCitjb3JlX3B1Ymxpc2hfc2VydmljZV9TT1VSQ0VTID0gY29yZS1wdWJsaXNoLXNlcnZpY2UuYworY29yZV9wdWJsaXNoX3NlcnZpY2VfQ0ZMQUdTID0gJChBTV9DRkxBR1MpCitjb3JlX3B1Ymxpc2hfc2VydmljZV9MREFERCA9ICQoQU1fTERBREQpIC4uL2F2YWhpLWNvcmUvbGliYXZhaGktY29yZS5sYSAuLi9hdmFoaS1jb21tb24vbGliYXZhaGktY29tbW9uLmxhCitjb3JlX2Jyb3dzZV9zZXJ2aWNlc19TT1VSQ0VTID0gY29yZS1icm93c2Utc2VydmljZXMuYworY29yZV9icm93c2Vfc2VydmljZXNfQ0ZMQUdTID0gJChBTV9DRkxBR1MpCitjb3JlX2Jyb3dzZV9zZXJ2aWNlc19MREFERCA9ICQoQU1fTERBREQpIC4uL2F2YWhpLWNvcmUvbGliYXZhaGktY29yZS5sYSAuLi9hdmFoaS1jb21tb24vbGliYXZhaGktY29tbW9uLmxhCitASEFWRV9EQlVTX1RSVUVAY2xpZW50X3B1Ymxpc2hfc2VydmljZV9TT1VSQ0VTID0gY2xpZW50LXB1Ymxpc2gtc2VydmljZS5jCitASEFWRV9EQlVTX1RSVUVAY2xpZW50X3B1Ymxpc2hfc2VydmljZV9DRkxBR1MgPSAkKEFNX0NGTEFHUykKK0BIQVZFX0RCVVNfVFJVRUBjbGllbnRfcHVibGlzaF9zZXJ2aWNlX0xEQUREID0gJChBTV9MREFERCkgLi4vYXZhaGktY2xpZW50L2xpYmF2YWhpLWNsaWVudC5sYSAuLi9hdmFoaS1jb21tb24vbGliYXZhaGktY29tbW9uLmxhCitASEFWRV9EQlVTX1RSVUVAY2xpZW50X2Jyb3dzZV9zZXJ2aWNlc19TT1VSQ0VTID0gY2xpZW50LWJyb3dzZS1zZXJ2aWNlcy5jCitASEFWRV9EQlVTX1RSVUVAY2xpZW50X2Jyb3dzZV9zZXJ2aWNlc19DRkxBR1MgPSAkKEFNX0NGTEFHUykKK0BIQVZFX0RCVVNfVFJVRUBjbGllbnRfYnJvd3NlX3NlcnZpY2VzX0xEQUREID0gJChBTV9MREFERCkgLi4vYXZhaGktY2xpZW50L2xpYmF2YWhpLWNsaWVudC5sYSAuLi9hdmFoaS1jb21tb24vbGliYXZhaGktY29tbW9uLmxhCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR0xJQl9UUlVFQGdsaWJfaW50ZWdyYXRpb25fU09VUkNFUyA9IGdsaWItaW50ZWdyYXRpb24uYworQEhBVkVfREJVU19UUlVFQEBIQVZFX0dMSUJfVFJVRUBnbGliX2ludGVncmF0aW9uX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAkKEdMSUIyMF9DRkxBR1MpCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR0xJQl9UUlVFQGdsaWJfaW50ZWdyYXRpb25fTERBREQgPSAkKEFNX0xEQUREKSAkKEdMSUIyMF9MSUJTKSAuLi9hdmFoaS1jbGllbnQvbGliYXZhaGktY2xpZW50LmxhIC4uL2F2YWhpLWNvbW1vbi9saWJhdmFoaS1jb21tb24ubGEgLi4vYXZhaGktZ2xpYi9saWJhdmFoaS1nbGliLmxhCithbGw6IGFsbC1hbQorCisuU1VGRklYRVM6CisuU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCiskKHNyY2RpcikvTWFrZWZpbGUuaW46ICAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAorCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiBleGFtcGxlcy9NYWtlZmlsZSc7IFwKKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gZXhhbXBsZXMvTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6ICAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6ICAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKGFtX19hY2xvY2FsX200X2RlcHMpOgorCitjbGVhbi1ub2luc3RQUk9HUkFNUzoKKwlAbGlzdD0nJChub2luc3RfUFJPR1JBTVMpJzsgdGVzdCAtbiAiJCRsaXN0IiB8fCBleGl0IDA7IFwKKwllY2hvICIgcm0gLWYiICQkbGlzdDsgXAorCXJtIC1mICQkbGlzdCB8fCBleGl0ICQkPzsgXAorCXRlc3QgLW4gIiQoRVhFRVhUKSIgfHwgZXhpdCAwOyBcCisJbGlzdD1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkICdzLyQoRVhFRVhUKSQkLy8nYDsgXAorCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCisJcm0gLWYgJCRsaXN0CitjbGllbnQtYnJvd3NlLXNlcnZpY2VzJChFWEVFWFQpOiAkKGNsaWVudF9icm93c2Vfc2VydmljZXNfT0JKRUNUUykgJChjbGllbnRfYnJvd3NlX3NlcnZpY2VzX0RFUEVOREVOQ0lFUykgJChFWFRSQV9jbGllbnRfYnJvd3NlX3NlcnZpY2VzX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGNsaWVudC1icm93c2Utc2VydmljZXMkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKGNsaWVudF9icm93c2Vfc2VydmljZXNfTElOSykgJChjbGllbnRfYnJvd3NlX3NlcnZpY2VzX09CSkVDVFMpICQoY2xpZW50X2Jyb3dzZV9zZXJ2aWNlc19MREFERCkgJChMSUJTKQorY2xpZW50LXB1Ymxpc2gtc2VydmljZSQoRVhFRVhUKTogJChjbGllbnRfcHVibGlzaF9zZXJ2aWNlX09CSkVDVFMpICQoY2xpZW50X3B1Ymxpc2hfc2VydmljZV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfY2xpZW50X3B1Ymxpc2hfc2VydmljZV9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBjbGllbnQtcHVibGlzaC1zZXJ2aWNlJChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChjbGllbnRfcHVibGlzaF9zZXJ2aWNlX0xJTkspICQoY2xpZW50X3B1Ymxpc2hfc2VydmljZV9PQkpFQ1RTKSAkKGNsaWVudF9wdWJsaXNoX3NlcnZpY2VfTERBREQpICQoTElCUykKK2NvcmUtYnJvd3NlLXNlcnZpY2VzJChFWEVFWFQpOiAkKGNvcmVfYnJvd3NlX3NlcnZpY2VzX09CSkVDVFMpICQoY29yZV9icm93c2Vfc2VydmljZXNfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2NvcmVfYnJvd3NlX3NlcnZpY2VzX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGNvcmUtYnJvd3NlLXNlcnZpY2VzJChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChjb3JlX2Jyb3dzZV9zZXJ2aWNlc19MSU5LKSAkKGNvcmVfYnJvd3NlX3NlcnZpY2VzX09CSkVDVFMpICQoY29yZV9icm93c2Vfc2VydmljZXNfTERBREQpICQoTElCUykKK2NvcmUtcHVibGlzaC1zZXJ2aWNlJChFWEVFWFQpOiAkKGNvcmVfcHVibGlzaF9zZXJ2aWNlX09CSkVDVFMpICQoY29yZV9wdWJsaXNoX3NlcnZpY2VfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2NvcmVfcHVibGlzaF9zZXJ2aWNlX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGNvcmUtcHVibGlzaC1zZXJ2aWNlJChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChjb3JlX3B1Ymxpc2hfc2VydmljZV9MSU5LKSAkKGNvcmVfcHVibGlzaF9zZXJ2aWNlX09CSkVDVFMpICQoY29yZV9wdWJsaXNoX3NlcnZpY2VfTERBREQpICQoTElCUykKK2dsaWItaW50ZWdyYXRpb24kKEVYRUVYVCk6ICQoZ2xpYl9pbnRlZ3JhdGlvbl9PQkpFQ1RTKSAkKGdsaWJfaW50ZWdyYXRpb25fREVQRU5ERU5DSUVTKSAkKEVYVFJBX2dsaWJfaW50ZWdyYXRpb25fREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgZ2xpYi1pbnRlZ3JhdGlvbiQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQoZ2xpYl9pbnRlZ3JhdGlvbl9MSU5LKSAkKGdsaWJfaW50ZWdyYXRpb25fT0JKRUNUUykgJChnbGliX2ludGVncmF0aW9uX0xEQUREKSAkKExJQlMpCisKK21vc3RseWNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICouJChPQkpFWFQpCisKK2Rpc3RjbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLnRhYi5jCisKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9jbGllbnRfYnJvd3NlX3NlcnZpY2VzLWNsaWVudC1icm93c2Utc2VydmljZXMuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2NsaWVudF9wdWJsaXNoX3NlcnZpY2UtY2xpZW50LXB1Ymxpc2gtc2VydmljZS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvY29yZV9icm93c2Vfc2VydmljZXMtY29yZS1icm93c2Utc2VydmljZXMuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2NvcmVfcHVibGlzaF9zZXJ2aWNlLWNvcmUtcHVibGlzaC1zZXJ2aWNlLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9nbGliX2ludGVncmF0aW9uLWdsaWItaW50ZWdyYXRpb24uUG9AYW1fX3F1b3RlQAorCisuYy5vOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAkPAorCisuYy5vYmo6CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgYCQoQ1lHUEFUSF9XKSAnJDwnYAorCisuYy5sbzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKKworY2xpZW50X2Jyb3dzZV9zZXJ2aWNlcy1jbGllbnQtYnJvd3NlLXNlcnZpY2VzLm86IGNsaWVudC1icm93c2Utc2VydmljZXMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGNsaWVudF9icm93c2Vfc2VydmljZXNfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGNsaWVudF9icm93c2Vfc2VydmljZXMtY2xpZW50LWJyb3dzZS1zZXJ2aWNlcy5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9jbGllbnRfYnJvd3NlX3NlcnZpY2VzLWNsaWVudC1icm93c2Utc2VydmljZXMuVHBvIC1jIC1vIGNsaWVudF9icm93c2Vfc2VydmljZXMtY2xpZW50LWJyb3dzZS1zZXJ2aWNlcy5vIGB0ZXN0IC1mICdjbGllbnQtYnJvd3NlLXNlcnZpY2VzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGNsaWVudC1icm93c2Utc2VydmljZXMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvY2xpZW50X2Jyb3dzZV9zZXJ2aWNlcy1jbGllbnQtYnJvd3NlLXNlcnZpY2VzLlRwbyAkKERFUERJUikvY2xpZW50X2Jyb3dzZV9zZXJ2aWNlcy1jbGllbnQtYnJvd3NlLXNlcnZpY2VzLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nY2xpZW50LWJyb3dzZS1zZXJ2aWNlcy5jJyBvYmplY3Q9J2NsaWVudF9icm93c2Vfc2VydmljZXMtY2xpZW50LWJyb3dzZS1zZXJ2aWNlcy5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChjbGllbnRfYnJvd3NlX3NlcnZpY2VzX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGNsaWVudF9icm93c2Vfc2VydmljZXMtY2xpZW50LWJyb3dzZS1zZXJ2aWNlcy5vIGB0ZXN0IC1mICdjbGllbnQtYnJvd3NlLXNlcnZpY2VzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGNsaWVudC1icm93c2Utc2VydmljZXMuYworCitjbGllbnRfYnJvd3NlX3NlcnZpY2VzLWNsaWVudC1icm93c2Utc2VydmljZXMub2JqOiBjbGllbnQtYnJvd3NlLXNlcnZpY2VzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChjbGllbnRfYnJvd3NlX3NlcnZpY2VzX0NGTEFHUykgJChDRkxBR1MpIC1NVCBjbGllbnRfYnJvd3NlX3NlcnZpY2VzLWNsaWVudC1icm93c2Utc2VydmljZXMub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9jbGllbnRfYnJvd3NlX3NlcnZpY2VzLWNsaWVudC1icm93c2Utc2VydmljZXMuVHBvIC1jIC1vIGNsaWVudF9icm93c2Vfc2VydmljZXMtY2xpZW50LWJyb3dzZS1zZXJ2aWNlcy5vYmogYGlmIHRlc3QgLWYgJ2NsaWVudC1icm93c2Utc2VydmljZXMuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdjbGllbnQtYnJvd3NlLXNlcnZpY2VzLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2NsaWVudC1icm93c2Utc2VydmljZXMuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvY2xpZW50X2Jyb3dzZV9zZXJ2aWNlcy1jbGllbnQtYnJvd3NlLXNlcnZpY2VzLlRwbyAkKERFUERJUikvY2xpZW50X2Jyb3dzZV9zZXJ2aWNlcy1jbGllbnQtYnJvd3NlLXNlcnZpY2VzLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nY2xpZW50LWJyb3dzZS1zZXJ2aWNlcy5jJyBvYmplY3Q9J2NsaWVudF9icm93c2Vfc2VydmljZXMtY2xpZW50LWJyb3dzZS1zZXJ2aWNlcy5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGNsaWVudF9icm93c2Vfc2VydmljZXNfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gY2xpZW50X2Jyb3dzZV9zZXJ2aWNlcy1jbGllbnQtYnJvd3NlLXNlcnZpY2VzLm9iaiBgaWYgdGVzdCAtZiAnY2xpZW50LWJyb3dzZS1zZXJ2aWNlcy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2NsaWVudC1icm93c2Utc2VydmljZXMuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvY2xpZW50LWJyb3dzZS1zZXJ2aWNlcy5jJzsgZmlgCisKK2NsaWVudF9wdWJsaXNoX3NlcnZpY2UtY2xpZW50LXB1Ymxpc2gtc2VydmljZS5vOiBjbGllbnQtcHVibGlzaC1zZXJ2aWNlLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChjbGllbnRfcHVibGlzaF9zZXJ2aWNlX0NGTEFHUykgJChDRkxBR1MpIC1NVCBjbGllbnRfcHVibGlzaF9zZXJ2aWNlLWNsaWVudC1wdWJsaXNoLXNlcnZpY2UubyAtTUQgLU1QIC1NRiAkKERFUERJUikvY2xpZW50X3B1Ymxpc2hfc2VydmljZS1jbGllbnQtcHVibGlzaC1zZXJ2aWNlLlRwbyAtYyAtbyBjbGllbnRfcHVibGlzaF9zZXJ2aWNlLWNsaWVudC1wdWJsaXNoLXNlcnZpY2UubyBgdGVzdCAtZiAnY2xpZW50LXB1Ymxpc2gtc2VydmljZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BjbGllbnQtcHVibGlzaC1zZXJ2aWNlLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2NsaWVudF9wdWJsaXNoX3NlcnZpY2UtY2xpZW50LXB1Ymxpc2gtc2VydmljZS5UcG8gJChERVBESVIpL2NsaWVudF9wdWJsaXNoX3NlcnZpY2UtY2xpZW50LXB1Ymxpc2gtc2VydmljZS5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2NsaWVudC1wdWJsaXNoLXNlcnZpY2UuYycgb2JqZWN0PSdjbGllbnRfcHVibGlzaF9zZXJ2aWNlLWNsaWVudC1wdWJsaXNoLXNlcnZpY2UubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoY2xpZW50X3B1Ymxpc2hfc2VydmljZV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBjbGllbnRfcHVibGlzaF9zZXJ2aWNlLWNsaWVudC1wdWJsaXNoLXNlcnZpY2UubyBgdGVzdCAtZiAnY2xpZW50LXB1Ymxpc2gtc2VydmljZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BjbGllbnQtcHVibGlzaC1zZXJ2aWNlLmMKKworY2xpZW50X3B1Ymxpc2hfc2VydmljZS1jbGllbnQtcHVibGlzaC1zZXJ2aWNlLm9iajogY2xpZW50LXB1Ymxpc2gtc2VydmljZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoY2xpZW50X3B1Ymxpc2hfc2VydmljZV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgY2xpZW50X3B1Ymxpc2hfc2VydmljZS1jbGllbnQtcHVibGlzaC1zZXJ2aWNlLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvY2xpZW50X3B1Ymxpc2hfc2VydmljZS1jbGllbnQtcHVibGlzaC1zZXJ2aWNlLlRwbyAtYyAtbyBjbGllbnRfcHVibGlzaF9zZXJ2aWNlLWNsaWVudC1wdWJsaXNoLXNlcnZpY2Uub2JqIGBpZiB0ZXN0IC1mICdjbGllbnQtcHVibGlzaC1zZXJ2aWNlLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnY2xpZW50LXB1Ymxpc2gtc2VydmljZS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9jbGllbnQtcHVibGlzaC1zZXJ2aWNlLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2NsaWVudF9wdWJsaXNoX3NlcnZpY2UtY2xpZW50LXB1Ymxpc2gtc2VydmljZS5UcG8gJChERVBESVIpL2NsaWVudF9wdWJsaXNoX3NlcnZpY2UtY2xpZW50LXB1Ymxpc2gtc2VydmljZS5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2NsaWVudC1wdWJsaXNoLXNlcnZpY2UuYycgb2JqZWN0PSdjbGllbnRfcHVibGlzaF9zZXJ2aWNlLWNsaWVudC1wdWJsaXNoLXNlcnZpY2Uub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChjbGllbnRfcHVibGlzaF9zZXJ2aWNlX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGNsaWVudF9wdWJsaXNoX3NlcnZpY2UtY2xpZW50LXB1Ymxpc2gtc2VydmljZS5vYmogYGlmIHRlc3QgLWYgJ2NsaWVudC1wdWJsaXNoLXNlcnZpY2UuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdjbGllbnQtcHVibGlzaC1zZXJ2aWNlLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2NsaWVudC1wdWJsaXNoLXNlcnZpY2UuYyc7IGZpYAorCitjb3JlX2Jyb3dzZV9zZXJ2aWNlcy1jb3JlLWJyb3dzZS1zZXJ2aWNlcy5vOiBjb3JlLWJyb3dzZS1zZXJ2aWNlcy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoY29yZV9icm93c2Vfc2VydmljZXNfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGNvcmVfYnJvd3NlX3NlcnZpY2VzLWNvcmUtYnJvd3NlLXNlcnZpY2VzLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2NvcmVfYnJvd3NlX3NlcnZpY2VzLWNvcmUtYnJvd3NlLXNlcnZpY2VzLlRwbyAtYyAtbyBjb3JlX2Jyb3dzZV9zZXJ2aWNlcy1jb3JlLWJyb3dzZS1zZXJ2aWNlcy5vIGB0ZXN0IC1mICdjb3JlLWJyb3dzZS1zZXJ2aWNlcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bjb3JlLWJyb3dzZS1zZXJ2aWNlcy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9jb3JlX2Jyb3dzZV9zZXJ2aWNlcy1jb3JlLWJyb3dzZS1zZXJ2aWNlcy5UcG8gJChERVBESVIpL2NvcmVfYnJvd3NlX3NlcnZpY2VzLWNvcmUtYnJvd3NlLXNlcnZpY2VzLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nY29yZS1icm93c2Utc2VydmljZXMuYycgb2JqZWN0PSdjb3JlX2Jyb3dzZV9zZXJ2aWNlcy1jb3JlLWJyb3dzZS1zZXJ2aWNlcy5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChjb3JlX2Jyb3dzZV9zZXJ2aWNlc19DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBjb3JlX2Jyb3dzZV9zZXJ2aWNlcy1jb3JlLWJyb3dzZS1zZXJ2aWNlcy5vIGB0ZXN0IC1mICdjb3JlLWJyb3dzZS1zZXJ2aWNlcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bjb3JlLWJyb3dzZS1zZXJ2aWNlcy5jCisKK2NvcmVfYnJvd3NlX3NlcnZpY2VzLWNvcmUtYnJvd3NlLXNlcnZpY2VzLm9iajogY29yZS1icm93c2Utc2VydmljZXMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGNvcmVfYnJvd3NlX3NlcnZpY2VzX0NGTEFHUykgJChDRkxBR1MpIC1NVCBjb3JlX2Jyb3dzZV9zZXJ2aWNlcy1jb3JlLWJyb3dzZS1zZXJ2aWNlcy5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2NvcmVfYnJvd3NlX3NlcnZpY2VzLWNvcmUtYnJvd3NlLXNlcnZpY2VzLlRwbyAtYyAtbyBjb3JlX2Jyb3dzZV9zZXJ2aWNlcy1jb3JlLWJyb3dzZS1zZXJ2aWNlcy5vYmogYGlmIHRlc3QgLWYgJ2NvcmUtYnJvd3NlLXNlcnZpY2VzLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnY29yZS1icm93c2Utc2VydmljZXMuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvY29yZS1icm93c2Utc2VydmljZXMuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvY29yZV9icm93c2Vfc2VydmljZXMtY29yZS1icm93c2Utc2VydmljZXMuVHBvICQoREVQRElSKS9jb3JlX2Jyb3dzZV9zZXJ2aWNlcy1jb3JlLWJyb3dzZS1zZXJ2aWNlcy5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2NvcmUtYnJvd3NlLXNlcnZpY2VzLmMnIG9iamVjdD0nY29yZV9icm93c2Vfc2VydmljZXMtY29yZS1icm93c2Utc2VydmljZXMub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChjb3JlX2Jyb3dzZV9zZXJ2aWNlc19DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBjb3JlX2Jyb3dzZV9zZXJ2aWNlcy1jb3JlLWJyb3dzZS1zZXJ2aWNlcy5vYmogYGlmIHRlc3QgLWYgJ2NvcmUtYnJvd3NlLXNlcnZpY2VzLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnY29yZS1icm93c2Utc2VydmljZXMuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvY29yZS1icm93c2Utc2VydmljZXMuYyc7IGZpYAorCitjb3JlX3B1Ymxpc2hfc2VydmljZS1jb3JlLXB1Ymxpc2gtc2VydmljZS5vOiBjb3JlLXB1Ymxpc2gtc2VydmljZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoY29yZV9wdWJsaXNoX3NlcnZpY2VfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGNvcmVfcHVibGlzaF9zZXJ2aWNlLWNvcmUtcHVibGlzaC1zZXJ2aWNlLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2NvcmVfcHVibGlzaF9zZXJ2aWNlLWNvcmUtcHVibGlzaC1zZXJ2aWNlLlRwbyAtYyAtbyBjb3JlX3B1Ymxpc2hfc2VydmljZS1jb3JlLXB1Ymxpc2gtc2VydmljZS5vIGB0ZXN0IC1mICdjb3JlLXB1Ymxpc2gtc2VydmljZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bjb3JlLXB1Ymxpc2gtc2VydmljZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9jb3JlX3B1Ymxpc2hfc2VydmljZS1jb3JlLXB1Ymxpc2gtc2VydmljZS5UcG8gJChERVBESVIpL2NvcmVfcHVibGlzaF9zZXJ2aWNlLWNvcmUtcHVibGlzaC1zZXJ2aWNlLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nY29yZS1wdWJsaXNoLXNlcnZpY2UuYycgb2JqZWN0PSdjb3JlX3B1Ymxpc2hfc2VydmljZS1jb3JlLXB1Ymxpc2gtc2VydmljZS5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChjb3JlX3B1Ymxpc2hfc2VydmljZV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBjb3JlX3B1Ymxpc2hfc2VydmljZS1jb3JlLXB1Ymxpc2gtc2VydmljZS5vIGB0ZXN0IC1mICdjb3JlLXB1Ymxpc2gtc2VydmljZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bjb3JlLXB1Ymxpc2gtc2VydmljZS5jCisKK2NvcmVfcHVibGlzaF9zZXJ2aWNlLWNvcmUtcHVibGlzaC1zZXJ2aWNlLm9iajogY29yZS1wdWJsaXNoLXNlcnZpY2UuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGNvcmVfcHVibGlzaF9zZXJ2aWNlX0NGTEFHUykgJChDRkxBR1MpIC1NVCBjb3JlX3B1Ymxpc2hfc2VydmljZS1jb3JlLXB1Ymxpc2gtc2VydmljZS5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2NvcmVfcHVibGlzaF9zZXJ2aWNlLWNvcmUtcHVibGlzaC1zZXJ2aWNlLlRwbyAtYyAtbyBjb3JlX3B1Ymxpc2hfc2VydmljZS1jb3JlLXB1Ymxpc2gtc2VydmljZS5vYmogYGlmIHRlc3QgLWYgJ2NvcmUtcHVibGlzaC1zZXJ2aWNlLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnY29yZS1wdWJsaXNoLXNlcnZpY2UuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvY29yZS1wdWJsaXNoLXNlcnZpY2UuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvY29yZV9wdWJsaXNoX3NlcnZpY2UtY29yZS1wdWJsaXNoLXNlcnZpY2UuVHBvICQoREVQRElSKS9jb3JlX3B1Ymxpc2hfc2VydmljZS1jb3JlLXB1Ymxpc2gtc2VydmljZS5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2NvcmUtcHVibGlzaC1zZXJ2aWNlLmMnIG9iamVjdD0nY29yZV9wdWJsaXNoX3NlcnZpY2UtY29yZS1wdWJsaXNoLXNlcnZpY2Uub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChjb3JlX3B1Ymxpc2hfc2VydmljZV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBjb3JlX3B1Ymxpc2hfc2VydmljZS1jb3JlLXB1Ymxpc2gtc2VydmljZS5vYmogYGlmIHRlc3QgLWYgJ2NvcmUtcHVibGlzaC1zZXJ2aWNlLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnY29yZS1wdWJsaXNoLXNlcnZpY2UuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvY29yZS1wdWJsaXNoLXNlcnZpY2UuYyc7IGZpYAorCitnbGliX2ludGVncmF0aW9uLWdsaWItaW50ZWdyYXRpb24ubzogZ2xpYi1pbnRlZ3JhdGlvbi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZ2xpYl9pbnRlZ3JhdGlvbl9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ2xpYl9pbnRlZ3JhdGlvbi1nbGliLWludGVncmF0aW9uLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2dsaWJfaW50ZWdyYXRpb24tZ2xpYi1pbnRlZ3JhdGlvbi5UcG8gLWMgLW8gZ2xpYl9pbnRlZ3JhdGlvbi1nbGliLWludGVncmF0aW9uLm8gYHRlc3QgLWYgJ2dsaWItaW50ZWdyYXRpb24uYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ2xpYi1pbnRlZ3JhdGlvbi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9nbGliX2ludGVncmF0aW9uLWdsaWItaW50ZWdyYXRpb24uVHBvICQoREVQRElSKS9nbGliX2ludGVncmF0aW9uLWdsaWItaW50ZWdyYXRpb24uUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnbGliLWludGVncmF0aW9uLmMnIG9iamVjdD0nZ2xpYl9pbnRlZ3JhdGlvbi1nbGliLWludGVncmF0aW9uLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGdsaWJfaW50ZWdyYXRpb25fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZ2xpYl9pbnRlZ3JhdGlvbi1nbGliLWludGVncmF0aW9uLm8gYHRlc3QgLWYgJ2dsaWItaW50ZWdyYXRpb24uYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ2xpYi1pbnRlZ3JhdGlvbi5jCisKK2dsaWJfaW50ZWdyYXRpb24tZ2xpYi1pbnRlZ3JhdGlvbi5vYmo6IGdsaWItaW50ZWdyYXRpb24uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGdsaWJfaW50ZWdyYXRpb25fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGdsaWJfaW50ZWdyYXRpb24tZ2xpYi1pbnRlZ3JhdGlvbi5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2dsaWJfaW50ZWdyYXRpb24tZ2xpYi1pbnRlZ3JhdGlvbi5UcG8gLWMgLW8gZ2xpYl9pbnRlZ3JhdGlvbi1nbGliLWludGVncmF0aW9uLm9iaiBgaWYgdGVzdCAtZiAnZ2xpYi1pbnRlZ3JhdGlvbi5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dsaWItaW50ZWdyYXRpb24uYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZ2xpYi1pbnRlZ3JhdGlvbi5jJzsgZmlgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9nbGliX2ludGVncmF0aW9uLWdsaWItaW50ZWdyYXRpb24uVHBvICQoREVQRElSKS9nbGliX2ludGVncmF0aW9uLWdsaWItaW50ZWdyYXRpb24uUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnbGliLWludGVncmF0aW9uLmMnIG9iamVjdD0nZ2xpYl9pbnRlZ3JhdGlvbi1nbGliLWludGVncmF0aW9uLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZ2xpYl9pbnRlZ3JhdGlvbl9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBnbGliX2ludGVncmF0aW9uLWdsaWItaW50ZWdyYXRpb24ub2JqIGBpZiB0ZXN0IC1mICdnbGliLWludGVncmF0aW9uLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZ2xpYi1pbnRlZ3JhdGlvbi5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nbGliLWludGVncmF0aW9uLmMnOyBmaWAKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKKworSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlta2lkIC1mSUQgJCR1bmlxdWUKK3RhZ3M6IFRBR1MKKworVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlzZXQgeDsgXAorCWhlcmU9YHB3ZGA7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJc2hpZnQ7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKKwkgIGVsc2UgXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgJCR1bmlxdWU7IFwKKwkgIGZpOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAorCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorCSAgICAgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUgJChQUk9HUkFNUykKK2luc3RhbGxkaXJzOgoraW5zdGFsbDogaW5zdGFsbC1hbQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCit1bmluc3RhbGw6IHVuaW5zdGFsbC1hbQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQoraW5zdGFsbC1zdHJpcDoKKwlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICAgICAgaW5zdGFsbDsgXAorCWVsc2UgXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCisJZmkKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKK2NsZWFuOiBjbGVhbi1hbQorCitjbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdFBST0dSQU1TIFwKKwltb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi10YWdzCisKK2R2aTogZHZpLWFtCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1hbQorCitodG1sLWFtOgorCitpbmZvOiBpbmZvLWFtCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbToKKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCisKK2luc3RhbGwtZHZpLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06CisKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCisKK2luc3RhbGwtaHRtbC1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1pbmZvLWFtOgorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCisKK2luc3RhbGwtcGRmLWFtOgorCitpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCisKK2luc3RhbGwtcHMtYW06CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtYW0KKworcGRmLWFtOgorCitwczogcHMtYW0KKworcHMtYW06CisKK3VuaW5zdGFsbC1hbToKKworLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAorCisuUEhPTlk6IENUQUdTIEdUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCisJY2xlYW4tbGlidG9vbCBjbGVhbi1ub2luc3RQUk9HUkFNUyBjdGFncyBkaXN0Y2xlYW4gXAorCWRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIFwKKwlkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBcCisJaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgXAorCWluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIFwKKwlpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBcCisJaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKKwlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAorCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKKwltb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCisJcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0KKworCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvZXhhbXBsZXMvY2xpZW50LWJyb3dzZS1zZXJ2aWNlcy5jIGIvYXZhaGktMC42LjMxL2V4YW1wbGVzL2NsaWVudC1icm93c2Utc2VydmljZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2RlZDJhCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2V4YW1wbGVzL2NsaWVudC1icm93c2Utc2VydmljZXMuYwpAQCAtMCwwICsxLDE5NyBAQAorLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKworI2luY2x1ZGUgPGF2YWhpLWNsaWVudC9jbGllbnQuaD4KKyNpbmNsdWRlIDxhdmFoaS1jbGllbnQvbG9va3VwLmg+CisKKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vc2ltcGxlLXdhdGNoLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL21hbGxvYy5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9lcnJvci5oPgorCitzdGF0aWMgQXZhaGlTaW1wbGVQb2xsICpzaW1wbGVfcG9sbCA9IE5VTEw7CisKK3N0YXRpYyB2b2lkIHJlc29sdmVfY2FsbGJhY2soCisgICAgQXZhaGlTZXJ2aWNlUmVzb2x2ZXIgKnIsCisgICAgQVZBSElfR0NDX1VOVVNFRCBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICBBdmFoaVJlc29sdmVyRXZlbnQgZXZlbnQsCisgICAgY29uc3QgY2hhciAqbmFtZSwKKyAgICBjb25zdCBjaGFyICp0eXBlLAorICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwKKyAgICBjb25zdCBjaGFyICpob3N0X25hbWUsCisgICAgY29uc3QgQXZhaGlBZGRyZXNzICphZGRyZXNzLAorICAgIHVpbnQxNl90IHBvcnQsCisgICAgQXZhaGlTdHJpbmdMaXN0ICp0eHQsCisgICAgQXZhaGlMb29rdXBSZXN1bHRGbGFncyBmbGFncywKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHZvaWQqIHVzZXJkYXRhKSB7CisKKyAgICBhc3NlcnQocik7CisKKyAgICAvKiBDYWxsZWQgd2hlbmV2ZXIgYSBzZXJ2aWNlIGhhcyBiZWVuIHJlc29sdmVkIHN1Y2Nlc3NmdWxseSBvciB0aW1lZCBvdXQgKi8KKworICAgIHN3aXRjaCAoZXZlbnQpIHsKKyAgICAgICAgY2FzZSBBVkFISV9SRVNPTFZFUl9GQUlMVVJFOgorICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIoUmVzb2x2ZXIpIEZhaWxlZCB0byByZXNvbHZlIHNlcnZpY2UgJyVzJyBvZiB0eXBlICclcycgaW4gZG9tYWluICclcyc6ICVzXG4iLCBuYW1lLCB0eXBlLCBkb21haW4sIGF2YWhpX3N0cmVycm9yKGF2YWhpX2NsaWVudF9lcnJubyhhdmFoaV9zZXJ2aWNlX3Jlc29sdmVyX2dldF9jbGllbnQocikpKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFWQUhJX1JFU09MVkVSX0ZPVU5EOiB7CisgICAgICAgICAgICBjaGFyIGFbQVZBSElfQUREUkVTU19TVFJfTUFYXSwgKnQ7CisKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiU2VydmljZSAnJXMnIG9mIHR5cGUgJyVzJyBpbiBkb21haW4gJyVzJzpcbiIsIG5hbWUsIHR5cGUsIGRvbWFpbik7CisKKyAgICAgICAgICAgIGF2YWhpX2FkZHJlc3Nfc25wcmludChhLCBzaXplb2YoYSksIGFkZHJlc3MpOworICAgICAgICAgICAgdCA9IGF2YWhpX3N0cmluZ19saXN0X3RvX3N0cmluZyh0eHQpOworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAgICAgICJcdCVzOiV1ICglcylcbiIKKyAgICAgICAgICAgICAgICAgICAgIlx0VFhUPSVzXG4iCisgICAgICAgICAgICAgICAgICAgICJcdGNvb2tpZSBpcyAldVxuIgorICAgICAgICAgICAgICAgICAgICAiXHRpc19sb2NhbDogJWlcbiIKKyAgICAgICAgICAgICAgICAgICAgIlx0b3VyX293bjogJWlcbiIKKyAgICAgICAgICAgICAgICAgICAgIlx0d2lkZV9hcmVhOiAlaVxuIgorICAgICAgICAgICAgICAgICAgICAiXHRtdWx0aWNhc3Q6ICVpXG4iCisgICAgICAgICAgICAgICAgICAgICJcdGNhY2hlZDogJWlcbiIsCisgICAgICAgICAgICAgICAgICAgIGhvc3RfbmFtZSwgcG9ydCwgYSwKKyAgICAgICAgICAgICAgICAgICAgdCwKKyAgICAgICAgICAgICAgICAgICAgYXZhaGlfc3RyaW5nX2xpc3RfZ2V0X3NlcnZpY2VfY29va2llKHR4dCksCisgICAgICAgICAgICAgICAgICAgICEhKGZsYWdzICYgQVZBSElfTE9PS1VQX1JFU1VMVF9MT0NBTCksCisgICAgICAgICAgICAgICAgICAgICEhKGZsYWdzICYgQVZBSElfTE9PS1VQX1JFU1VMVF9PVVJfT1dOKSwKKyAgICAgICAgICAgICAgICAgICAgISEoZmxhZ3MgJiBBVkFISV9MT09LVVBfUkVTVUxUX1dJREVfQVJFQSksCisgICAgICAgICAgICAgICAgICAgICEhKGZsYWdzICYgQVZBSElfTE9PS1VQX1JFU1VMVF9NVUxUSUNBU1QpLAorICAgICAgICAgICAgICAgICAgICAhIShmbGFncyAmIEFWQUhJX0xPT0tVUF9SRVNVTFRfQ0FDSEVEKSk7CisKKyAgICAgICAgICAgIGF2YWhpX2ZyZWUodCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhdmFoaV9zZXJ2aWNlX3Jlc29sdmVyX2ZyZWUocik7Cit9CisKK3N0YXRpYyB2b2lkIGJyb3dzZV9jYWxsYmFjaygKKyAgICBBdmFoaVNlcnZpY2VCcm93c2VyICpiLAorICAgIEF2YWhpSWZJbmRleCBpbnRlcmZhY2UsCisgICAgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICBBdmFoaUJyb3dzZXJFdmVudCBldmVudCwKKyAgICBjb25zdCBjaGFyICpuYW1lLAorICAgIGNvbnN0IGNoYXIgKnR5cGUsCisgICAgY29uc3QgY2hhciAqZG9tYWluLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgQXZhaGlMb29rdXBSZXN1bHRGbGFncyBmbGFncywKKyAgICB2b2lkKiB1c2VyZGF0YSkgeworCisgICAgQXZhaGlDbGllbnQgKmMgPSB1c2VyZGF0YTsKKyAgICBhc3NlcnQoYik7CisKKyAgICAvKiBDYWxsZWQgd2hlbmV2ZXIgYSBuZXcgc2VydmljZXMgYmVjb21lcyBhdmFpbGFibGUgb24gdGhlIExBTiBvciBpcyByZW1vdmVkIGZyb20gdGhlIExBTiAqLworCisgICAgc3dpdGNoIChldmVudCkgeworICAgICAgICBjYXNlIEFWQUhJX0JST1dTRVJfRkFJTFVSRToKKworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIoQnJvd3NlcikgJXNcbiIsIGF2YWhpX3N0cmVycm9yKGF2YWhpX2NsaWVudF9lcnJubyhhdmFoaV9zZXJ2aWNlX2Jyb3dzZXJfZ2V0X2NsaWVudChiKSkpKTsKKyAgICAgICAgICAgIGF2YWhpX3NpbXBsZV9wb2xsX3F1aXQoc2ltcGxlX3BvbGwpOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgQVZBSElfQlJPV1NFUl9ORVc6CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIihCcm93c2VyKSBORVc6IHNlcnZpY2UgJyVzJyBvZiB0eXBlICclcycgaW4gZG9tYWluICclcydcbiIsIG5hbWUsIHR5cGUsIGRvbWFpbik7CisKKyAgICAgICAgICAgIC8qIFdlIGlnbm9yZSB0aGUgcmV0dXJuZWQgcmVzb2x2ZXIgb2JqZWN0LiBJbiB0aGUgY2FsbGJhY2sKKyAgICAgICAgICAgICAgIGZ1bmN0aW9uIHdlIGZyZWUgaXQuIElmIHRoZSBzZXJ2ZXIgaXMgdGVybWluYXRlZCBiZWZvcmUKKyAgICAgICAgICAgICAgIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQgdGhlIHNlcnZlciB3aWxsIGZyZWUKKyAgICAgICAgICAgICAgIHRoZSByZXNvbHZlciBmb3IgdXMuICovCisKKyAgICAgICAgICAgIGlmICghKGF2YWhpX3NlcnZpY2VfcmVzb2x2ZXJfbmV3KGMsIGludGVyZmFjZSwgcHJvdG9jb2wsIG5hbWUsIHR5cGUsIGRvbWFpbiwgQVZBSElfUFJPVE9fVU5TUEVDLCAwLCByZXNvbHZlX2NhbGxiYWNrLCBjKSkpCisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gcmVzb2x2ZSBzZXJ2aWNlICclcyc6ICVzXG4iLCBuYW1lLCBhdmFoaV9zdHJlcnJvcihhdmFoaV9jbGllbnRfZXJybm8oYykpKTsKKworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBVkFISV9CUk9XU0VSX1JFTU9WRToKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiKEJyb3dzZXIpIFJFTU9WRTogc2VydmljZSAnJXMnIG9mIHR5cGUgJyVzJyBpbiBkb21haW4gJyVzJ1xuIiwgbmFtZSwgdHlwZSwgZG9tYWluKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQVZBSElfQlJPV1NFUl9BTExfRk9SX05PVzoKKyAgICAgICAgY2FzZSBBVkFISV9CUk9XU0VSX0NBQ0hFX0VYSEFVU1RFRDoKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiKEJyb3dzZXIpICVzXG4iLCBldmVudCA9PSBBVkFISV9CUk9XU0VSX0NBQ0hFX0VYSEFVU1RFRCA/ICJDQUNIRV9FWEhBVVNURUQiIDogIkFMTF9GT1JfTk9XIik7CisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGNsaWVudF9jYWxsYmFjayhBdmFoaUNsaWVudCAqYywgQXZhaGlDbGllbnRTdGF0ZSBzdGF0ZSwgQVZBSElfR0NDX1VOVVNFRCB2b2lkICogdXNlcmRhdGEpIHsKKyAgICBhc3NlcnQoYyk7CisKKyAgICAvKiBDYWxsZWQgd2hlbmV2ZXIgdGhlIGNsaWVudCBvciBzZXJ2ZXIgc3RhdGUgY2hhbmdlcyAqLworCisgICAgaWYgKHN0YXRlID09IEFWQUhJX0NMSUVOVF9GQUlMVVJFKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiU2VydmVyIGNvbm5lY3Rpb24gZmFpbHVyZTogJXNcbiIsIGF2YWhpX3N0cmVycm9yKGF2YWhpX2NsaWVudF9lcnJubyhjKSkpOworICAgICAgICBhdmFoaV9zaW1wbGVfcG9sbF9xdWl0KHNpbXBsZV9wb2xsKTsKKyAgICB9Cit9CisKK2ludCBtYWluKEFWQUhJX0dDQ19VTlVTRUQgaW50IGFyZ2MsIEFWQUhJX0dDQ19VTlVTRUQgY2hhciphcmd2W10pIHsKKyAgICBBdmFoaUNsaWVudCAqY2xpZW50ID0gTlVMTDsKKyAgICBBdmFoaVNlcnZpY2VCcm93c2VyICpzYiA9IE5VTEw7CisgICAgaW50IGVycm9yOworICAgIGludCByZXQgPSAxOworCisgICAgLyogQWxsb2NhdGUgbWFpbiBsb29wIG9iamVjdCAqLworICAgIGlmICghKHNpbXBsZV9wb2xsID0gYXZhaGlfc2ltcGxlX3BvbGxfbmV3KCkpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGNyZWF0ZSBzaW1wbGUgcG9sbCBvYmplY3QuXG4iKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIC8qIEFsbG9jYXRlIGEgbmV3IGNsaWVudCAqLworICAgIGNsaWVudCA9IGF2YWhpX2NsaWVudF9uZXcoYXZhaGlfc2ltcGxlX3BvbGxfZ2V0KHNpbXBsZV9wb2xsKSwgMCwgY2xpZW50X2NhbGxiYWNrLCBOVUxMLCAmZXJyb3IpOworCisgICAgLyogQ2hlY2sgd2V0aGVyIGNyZWF0aW5nIHRoZSBjbGllbnQgb2JqZWN0IHN1Y2NlZWRlZCAqLworICAgIGlmICghY2xpZW50KSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGNyZWF0ZSBjbGllbnQ6ICVzXG4iLCBhdmFoaV9zdHJlcnJvcihlcnJvcikpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgLyogQ3JlYXRlIHRoZSBzZXJ2aWNlIGJyb3dzZXIgKi8KKyAgICBpZiAoIShzYiA9IGF2YWhpX3NlcnZpY2VfYnJvd3Nlcl9uZXcoY2xpZW50LCBBVkFISV9JRl9VTlNQRUMsIEFWQUhJX1BST1RPX1VOU1BFQywgIl9odHRwLl90Y3AiLCBOVUxMLCAwLCBicm93c2VfY2FsbGJhY2ssIGNsaWVudCkpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGNyZWF0ZSBzZXJ2aWNlIGJyb3dzZXI6ICVzXG4iLCBhdmFoaV9zdHJlcnJvcihhdmFoaV9jbGllbnRfZXJybm8oY2xpZW50KSkpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgLyogUnVuIHRoZSBtYWluIGxvb3AgKi8KKyAgICBhdmFoaV9zaW1wbGVfcG9sbF9sb29wKHNpbXBsZV9wb2xsKTsKKworICAgIHJldCA9IDA7CisKK2ZhaWw6CisKKyAgICAvKiBDbGVhbnVwIHRoaW5ncyAqLworICAgIGlmIChzYikKKyAgICAgICAgYXZhaGlfc2VydmljZV9icm93c2VyX2ZyZWUoc2IpOworCisgICAgaWYgKGNsaWVudCkKKyAgICAgICAgYXZhaGlfY2xpZW50X2ZyZWUoY2xpZW50KTsKKworICAgIGlmIChzaW1wbGVfcG9sbCkKKyAgICAgICAgYXZhaGlfc2ltcGxlX3BvbGxfZnJlZShzaW1wbGVfcG9sbCk7CisKKyAgICByZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2V4YW1wbGVzL2NsaWVudC1wdWJsaXNoLXNlcnZpY2UuYyBiL2F2YWhpLTAuNi4zMS9leGFtcGxlcy9jbGllbnQtcHVibGlzaC1zZXJ2aWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFjYzk2NQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9leGFtcGxlcy9jbGllbnQtcHVibGlzaC1zZXJ2aWNlLmMKQEAgLTAsMCArMSwyODAgQEAKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKyNpbmNsdWRlIDxhdmFoaS1jbGllbnQvY2xpZW50Lmg+CisjaW5jbHVkZSA8YXZhaGktY2xpZW50L3B1Ymxpc2guaD4KKworI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9hbHRlcm5hdGl2ZS5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9zaW1wbGUtd2F0Y2guaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vbWFsbG9jLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2Vycm9yLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL3RpbWV2YWwuaD4KKworc3RhdGljIEF2YWhpRW50cnlHcm91cCAqZ3JvdXAgPSBOVUxMOworc3RhdGljIEF2YWhpU2ltcGxlUG9sbCAqc2ltcGxlX3BvbGwgPSBOVUxMOworc3RhdGljIGNoYXIgKm5hbWUgPSBOVUxMOworCitzdGF0aWMgdm9pZCBjcmVhdGVfc2VydmljZXMoQXZhaGlDbGllbnQgKmMpOworCitzdGF0aWMgdm9pZCBlbnRyeV9ncm91cF9jYWxsYmFjayhBdmFoaUVudHJ5R3JvdXAgKmcsIEF2YWhpRW50cnlHcm91cFN0YXRlIHN0YXRlLCBBVkFISV9HQ0NfVU5VU0VEIHZvaWQgKnVzZXJkYXRhKSB7CisgICAgYXNzZXJ0KGcgPT0gZ3JvdXAgfHwgZ3JvdXAgPT0gTlVMTCk7CisgICAgZ3JvdXAgPSBnOworCisgICAgLyogQ2FsbGVkIHdoZW5ldmVyIHRoZSBlbnRyeSBncm91cCBzdGF0ZSBjaGFuZ2VzICovCisKKyAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgICAgIGNhc2UgQVZBSElfRU5UUllfR1JPVVBfRVNUQUJMSVNIRUQgOgorICAgICAgICAgICAgLyogVGhlIGVudHJ5IGdyb3VwIGhhcyBiZWVuIGVzdGFibGlzaGVkIHN1Y2Nlc3NmdWxseSAqLworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJTZXJ2aWNlICclcycgc3VjY2Vzc2Z1bGx5IGVzdGFibGlzaGVkLlxuIiwgbmFtZSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFWQUhJX0VOVFJZX0dST1VQX0NPTExJU0lPTiA6IHsKKyAgICAgICAgICAgIGNoYXIgKm47CisKKyAgICAgICAgICAgIC8qIEEgc2VydmljZSBuYW1lIGNvbGxpc2lvbiB3aXRoIGEgcmVtb3RlIHNlcnZpY2UKKyAgICAgICAgICAgICAqIGhhcHBlbmVkLiBMZXQncyBwaWNrIGEgbmV3IG5hbWUgKi8KKyAgICAgICAgICAgIG4gPSBhdmFoaV9hbHRlcm5hdGl2ZV9zZXJ2aWNlX25hbWUobmFtZSk7CisgICAgICAgICAgICBhdmFoaV9mcmVlKG5hbWUpOworICAgICAgICAgICAgbmFtZSA9IG47CisKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiU2VydmljZSBuYW1lIGNvbGxpc2lvbiwgcmVuYW1pbmcgc2VydmljZSB0byAnJXMnXG4iLCBuYW1lKTsKKworICAgICAgICAgICAgLyogQW5kIHJlY3JlYXRlIHRoZSBzZXJ2aWNlcyAqLworICAgICAgICAgICAgY3JlYXRlX3NlcnZpY2VzKGF2YWhpX2VudHJ5X2dyb3VwX2dldF9jbGllbnQoZykpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEFWQUhJX0VOVFJZX0dST1VQX0ZBSUxVUkUgOgorCisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVudHJ5IGdyb3VwIGZhaWx1cmU6ICVzXG4iLCBhdmFoaV9zdHJlcnJvcihhdmFoaV9jbGllbnRfZXJybm8oYXZhaGlfZW50cnlfZ3JvdXBfZ2V0X2NsaWVudChnKSkpKTsKKworICAgICAgICAgICAgLyogU29tZSBraW5kIG9mIGZhaWx1cmUgaGFwcGVuZWQgd2hpbGUgd2Ugd2VyZSByZWdpc3RlcmluZyBvdXIgc2VydmljZXMgKi8KKyAgICAgICAgICAgIGF2YWhpX3NpbXBsZV9wb2xsX3F1aXQoc2ltcGxlX3BvbGwpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBVkFISV9FTlRSWV9HUk9VUF9VTkNPTU1JVEVEOgorICAgICAgICBjYXNlIEFWQUhJX0VOVFJZX0dST1VQX1JFR0lTVEVSSU5HOgorICAgICAgICAgICAgOworICAgIH0KK30KKworc3RhdGljIHZvaWQgY3JlYXRlX3NlcnZpY2VzKEF2YWhpQ2xpZW50ICpjKSB7CisgICAgY2hhciAqbiwgclsxMjhdOworICAgIGludCByZXQ7CisgICAgYXNzZXJ0KGMpOworCisgICAgLyogSWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB3ZSdyZSBjYWxsZWQsIGxldCdzIGNyZWF0ZSBhIG5ldworICAgICAqIGVudHJ5IGdyb3VwIGlmIG5lY2Vzc2FyeSAqLworCisgICAgaWYgKCFncm91cCkKKyAgICAgICAgaWYgKCEoZ3JvdXAgPSBhdmFoaV9lbnRyeV9ncm91cF9uZXcoYywgZW50cnlfZ3JvdXBfY2FsbGJhY2ssIE5VTEwpKSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJhdmFoaV9lbnRyeV9ncm91cF9uZXcoKSBmYWlsZWQ6ICVzXG4iLCBhdmFoaV9zdHJlcnJvcihhdmFoaV9jbGllbnRfZXJybm8oYykpKTsKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQorCisgICAgLyogSWYgdGhlIGdyb3VwIGlzIGVtcHR5IChlaXRoZXIgYmVjYXVzZSBpdCB3YXMganVzdCBjcmVhdGVkLCBvcgorICAgICAqIGJlY2F1c2UgaXQgd2FzIHJlc2V0IHByZXZpb3VzbHksIGFkZCBvdXIgZW50cmllcy4gICovCisKKyAgICBpZiAoYXZhaGlfZW50cnlfZ3JvdXBfaXNfZW1wdHkoZ3JvdXApKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQWRkaW5nIHNlcnZpY2UgJyVzJ1xuIiwgbmFtZSk7CisKKyAgICAgICAgLyogQ3JlYXRlIHNvbWUgcmFuZG9tIFRYVCBkYXRhICovCisgICAgICAgIHNucHJpbnRmKHIsIHNpemVvZihyKSwgInJhbmRvbT0laSIsIHJhbmQoKSk7CisKKyAgICAgICAgLyogV2Ugd2lsbCBub3cgYWRkIHR3byBzZXJ2aWNlcyBhbmQgb25lIHN1YnR5cGUgdG8gdGhlIGVudHJ5CisgICAgICAgICAqIGdyb3VwLiBUaGUgdHdvIHNlcnZpY2VzIGhhdmUgdGhlIHNhbWUgbmFtZSwgYnV0IGRpZmZlciBpbgorICAgICAgICAgKiB0aGUgc2VydmljZSB0eXBlIChJUFAgdnMuIEJTRCBMUFIpLiBPbmx5IHNlcnZpY2VzIHdpdGggdGhlCisgICAgICAgICAqIHNhbWUgbmFtZSBzaG91bGQgYmUgcHV0IGluIHRoZSBzYW1lIGVudHJ5IGdyb3VwLiAqLworCisgICAgICAgIC8qIEFkZCB0aGUgc2VydmljZSBmb3IgSVBQICovCisgICAgICAgIGlmICgocmV0ID0gYXZhaGlfZW50cnlfZ3JvdXBfYWRkX3NlcnZpY2UoZ3JvdXAsIEFWQUhJX0lGX1VOU1BFQywgQVZBSElfUFJPVE9fVU5TUEVDLCAwLCBuYW1lLCAiX2lwcC5fdGNwIiwgTlVMTCwgTlVMTCwgNjUxLCAidGVzdD1ibGFoIiwgciwgTlVMTCkpIDwgMCkgeworCisgICAgICAgICAgICBpZiAocmV0ID09IEFWQUhJX0VSUl9DT0xMSVNJT04pCisgICAgICAgICAgICAgICAgZ290byBjb2xsaXNpb247CisKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGFkZCBfaXBwLl90Y3Agc2VydmljZTogJXNcbiIsIGF2YWhpX3N0cmVycm9yKHJldCkpOworICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CisKKyAgICAgICAgLyogQWRkIHRoZSBzYW1lIHNlcnZpY2UgZm9yIEJTRCBMUFIgKi8KKyAgICAgICAgaWYgKChyZXQgPSBhdmFoaV9lbnRyeV9ncm91cF9hZGRfc2VydmljZShncm91cCwgQVZBSElfSUZfVU5TUEVDLCBBVkFISV9QUk9UT19VTlNQRUMsIDAsIG5hbWUsICJfcHJpbnRlci5fdGNwIiwgTlVMTCwgTlVMTCwgNTE1LCBOVUxMKSkgPCAwKSB7CisKKyAgICAgICAgICAgIGlmIChyZXQgPT0gQVZBSElfRVJSX0NPTExJU0lPTikKKyAgICAgICAgICAgICAgICBnb3RvIGNvbGxpc2lvbjsKKworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gYWRkIF9wcmludGVyLl90Y3Agc2VydmljZTogJXNcbiIsIGF2YWhpX3N0cmVycm9yKHJldCkpOworICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CisKKyAgICAgICAgLyogQWRkIGFuIGFkZGl0aW9uYWwgKGh5cG90aGV0aWMpIHN1YnR5cGUgKi8KKyAgICAgICAgaWYgKChyZXQgPSBhdmFoaV9lbnRyeV9ncm91cF9hZGRfc2VydmljZV9zdWJ0eXBlKGdyb3VwLCBBVkFISV9JRl9VTlNQRUMsIEFWQUhJX1BST1RPX1VOU1BFQywgMCwgbmFtZSwgIl9wcmludGVyLl90Y3AiLCBOVUxMLCAiX21hZ2ljLl9zdWIuX3ByaW50ZXIuX3RjcCIpIDwgMCkpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGFkZCBzdWJ0eXBlIF9tYWdpYy5fc3ViLl9wcmludGVyLl90Y3A6ICVzXG4iLCBhdmFoaV9zdHJlcnJvcihyZXQpKTsKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFRlbGwgdGhlIHNlcnZlciB0byByZWdpc3RlciB0aGUgc2VydmljZSAqLworICAgICAgICBpZiAoKHJldCA9IGF2YWhpX2VudHJ5X2dyb3VwX2NvbW1pdChncm91cCkpIDwgMCkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gY29tbWl0IGVudHJ5IGdyb3VwOiAlc1xuIiwgYXZhaGlfc3RyZXJyb3IocmV0KSk7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm47CisKK2NvbGxpc2lvbjoKKworICAgIC8qIEEgc2VydmljZSBuYW1lIGNvbGxpc2lvbiB3aXRoIGEgbG9jYWwgc2VydmljZSBoYXBwZW5lZC4gTGV0J3MKKyAgICAgKiBwaWNrIGEgbmV3IG5hbWUgKi8KKyAgICBuID0gYXZhaGlfYWx0ZXJuYXRpdmVfc2VydmljZV9uYW1lKG5hbWUpOworICAgIGF2YWhpX2ZyZWUobmFtZSk7CisgICAgbmFtZSA9IG47CisKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlNlcnZpY2UgbmFtZSBjb2xsaXNpb24sIHJlbmFtaW5nIHNlcnZpY2UgdG8gJyVzJ1xuIiwgbmFtZSk7CisKKyAgICBhdmFoaV9lbnRyeV9ncm91cF9yZXNldChncm91cCk7CisKKyAgICBjcmVhdGVfc2VydmljZXMoYyk7CisgICAgcmV0dXJuOworCitmYWlsOgorICAgIGF2YWhpX3NpbXBsZV9wb2xsX3F1aXQoc2ltcGxlX3BvbGwpOworfQorCitzdGF0aWMgdm9pZCBjbGllbnRfY2FsbGJhY2soQXZhaGlDbGllbnQgKmMsIEF2YWhpQ2xpZW50U3RhdGUgc3RhdGUsIEFWQUhJX0dDQ19VTlVTRUQgdm9pZCAqIHVzZXJkYXRhKSB7CisgICAgYXNzZXJ0KGMpOworCisgICAgLyogQ2FsbGVkIHdoZW5ldmVyIHRoZSBjbGllbnQgb3Igc2VydmVyIHN0YXRlIGNoYW5nZXMgKi8KKworICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICAgICAgY2FzZSBBVkFISV9DTElFTlRfU19SVU5OSU5HOgorCisgICAgICAgICAgICAvKiBUaGUgc2VydmVyIGhhcyBzdGFydHVwIHN1Y2Nlc3NmdWxseSBhbmQgcmVnaXN0ZXJlZCBpdHMgaG9zdAorICAgICAgICAgICAgICogbmFtZSBvbiB0aGUgbmV0d29yaywgc28gaXQncyB0aW1lIHRvIGNyZWF0ZSBvdXIgc2VydmljZXMgKi8KKyAgICAgICAgICAgIGNyZWF0ZV9zZXJ2aWNlcyhjKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQVZBSElfQ0xJRU5UX0ZBSUxVUkU6CisKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2xpZW50IGZhaWx1cmU6ICVzXG4iLCBhdmFoaV9zdHJlcnJvcihhdmFoaV9jbGllbnRfZXJybm8oYykpKTsKKyAgICAgICAgICAgIGF2YWhpX3NpbXBsZV9wb2xsX3F1aXQoc2ltcGxlX3BvbGwpOworCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFWQUhJX0NMSUVOVF9TX0NPTExJU0lPTjoKKworICAgICAgICAgICAgLyogTGV0J3MgZHJvcCBvdXIgcmVnaXN0ZXJlZCBzZXJ2aWNlcy4gV2hlbiB0aGUgc2VydmVyIGlzIGJhY2sKKyAgICAgICAgICAgICAqIGluIEFWQUhJX1NFUlZFUl9SVU5OSU5HIHN0YXRlIHdlIHdpbGwgcmVnaXN0ZXIgdGhlbQorICAgICAgICAgICAgICogYWdhaW4gd2l0aCB0aGUgbmV3IGhvc3QgbmFtZS4gKi8KKworICAgICAgICBjYXNlIEFWQUhJX0NMSUVOVF9TX1JFR0lTVEVSSU5HOgorCisgICAgICAgICAgICAvKiBUaGUgc2VydmVyIHJlY29yZHMgYXJlIG5vdyBiZWluZyBlc3RhYmxpc2hlZC4gVGhpcworICAgICAgICAgICAgICogbWlnaHQgYmUgY2F1c2VkIGJ5IGEgaG9zdCBuYW1lIGNoYW5nZS4gV2UgbmVlZCB0byB3YWl0CisgICAgICAgICAgICAgKiBmb3Igb3VyIG93biByZWNvcmRzIHRvIHJlZ2lzdGVyIHVudGlsIHRoZSBob3N0IG5hbWUgaXMKKyAgICAgICAgICAgICAqIHByb3Blcmx5IGVzYXRibGlzaGVkLiAqLworCisgICAgICAgICAgICBpZiAoZ3JvdXApCisgICAgICAgICAgICAgICAgYXZhaGlfZW50cnlfZ3JvdXBfcmVzZXQoZ3JvdXApOworCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFWQUhJX0NMSUVOVF9DT05ORUNUSU5HOgorICAgICAgICAgICAgOworICAgIH0KK30KKworc3RhdGljIHZvaWQgbW9kaWZ5X2NhbGxiYWNrKEFWQUhJX0dDQ19VTlVTRUQgQXZhaGlUaW1lb3V0ICplLCB2b2lkICp1c2VyZGF0YSkgeworICAgIEF2YWhpQ2xpZW50ICpjbGllbnQgPSB1c2VyZGF0YTsKKworICAgIGZwcmludGYoc3RkZXJyLCAiRG9pbmcgc29tZSB3ZWlyZCBtb2RpZmljYXRpb25cbiIpOworCisgICAgYXZhaGlfZnJlZShuYW1lKTsKKyAgICBuYW1lID0gYXZhaGlfc3RyZHVwKCJNb2RpZmllZCBNZWdhUHJpbnRlciIpOworCisgICAgLyogSWYgdGhlIHNlcnZlciBpcyBjdXJyZW50bHkgcnVubmluZywgd2UgbmVlZCB0byByZW1vdmUgb3VyCisgICAgICogc2VydmljZSBhbmQgY3JlYXRlIGl0IGFuZXcgKi8KKyAgICBpZiAoYXZhaGlfY2xpZW50X2dldF9zdGF0ZShjbGllbnQpID09IEFWQUhJX0NMSUVOVF9TX1JVTk5JTkcpIHsKKworICAgICAgICAvKiBSZW1vdmUgdGhlIG9sZCBzZXJ2aWNlcyAqLworICAgICAgICBpZiAoZ3JvdXApCisgICAgICAgICAgICBhdmFoaV9lbnRyeV9ncm91cF9yZXNldChncm91cCk7CisKKyAgICAgICAgLyogQW5kIGNyZWF0ZSB0aGVtIGFnYWluIHdpdGggdGhlIG5ldyBuYW1lICovCisgICAgICAgIGNyZWF0ZV9zZXJ2aWNlcyhjbGllbnQpOworICAgIH0KK30KKworaW50IG1haW4oQVZBSElfR0NDX1VOVVNFRCBpbnQgYXJnYywgQVZBSElfR0NDX1VOVVNFRCBjaGFyKmFyZ3ZbXSkgeworICAgIEF2YWhpQ2xpZW50ICpjbGllbnQgPSBOVUxMOworICAgIGludCBlcnJvcjsKKyAgICBpbnQgcmV0ID0gMTsKKyAgICBzdHJ1Y3QgdGltZXZhbCB0djsKKworICAgIC8qIEFsbG9jYXRlIG1haW4gbG9vcCBvYmplY3QgKi8KKyAgICBpZiAoIShzaW1wbGVfcG9sbCA9IGF2YWhpX3NpbXBsZV9wb2xsX25ldygpKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBjcmVhdGUgc2ltcGxlIHBvbGwgb2JqZWN0LlxuIik7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBuYW1lID0gYXZhaGlfc3RyZHVwKCJNZWdhUHJpbnRlciIpOworCisgICAgLyogQWxsb2NhdGUgYSBuZXcgY2xpZW50ICovCisgICAgY2xpZW50ID0gYXZhaGlfY2xpZW50X25ldyhhdmFoaV9zaW1wbGVfcG9sbF9nZXQoc2ltcGxlX3BvbGwpLCAwLCBjbGllbnRfY2FsbGJhY2ssIE5VTEwsICZlcnJvcik7CisKKyAgICAvKiBDaGVjayB3ZXRoZXIgY3JlYXRpbmcgdGhlIGNsaWVudCBvYmplY3Qgc3VjY2VlZGVkICovCisgICAgaWYgKCFjbGllbnQpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gY3JlYXRlIGNsaWVudDogJXNcbiIsIGF2YWhpX3N0cmVycm9yKGVycm9yKSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICAvKiBBZnRlciAxMHMgZG8gc29tZSB3ZWlyZCBtb2RpZmljYXRpb24gdG8gdGhlIHNlcnZpY2UgKi8KKyAgICBhdmFoaV9zaW1wbGVfcG9sbF9nZXQoc2ltcGxlX3BvbGwpLT50aW1lb3V0X25ldygKKyAgICAgICAgYXZhaGlfc2ltcGxlX3BvbGxfZ2V0KHNpbXBsZV9wb2xsKSwKKyAgICAgICAgYXZhaGlfZWxhcHNlX3RpbWUoJnR2LCAxMDAwKjEwLCAwKSwKKyAgICAgICAgbW9kaWZ5X2NhbGxiYWNrLAorICAgICAgICBjbGllbnQpOworCisgICAgLyogUnVuIHRoZSBtYWluIGxvb3AgKi8KKyAgICBhdmFoaV9zaW1wbGVfcG9sbF9sb29wKHNpbXBsZV9wb2xsKTsKKworICAgIHJldCA9IDA7CisKK2ZhaWw6CisKKyAgICAvKiBDbGVhbnVwIHRoaW5ncyAqLworCisgICAgaWYgKGNsaWVudCkKKyAgICAgICAgYXZhaGlfY2xpZW50X2ZyZWUoY2xpZW50KTsKKworICAgIGlmIChzaW1wbGVfcG9sbCkKKyAgICAgICAgYXZhaGlfc2ltcGxlX3BvbGxfZnJlZShzaW1wbGVfcG9sbCk7CisKKyAgICBhdmFoaV9mcmVlKG5hbWUpOworCisgICAgcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9leGFtcGxlcy9jb3JlLWJyb3dzZS1zZXJ2aWNlcy5jIGIvYXZhaGktMC42LjMxL2V4YW1wbGVzL2NvcmUtYnJvd3NlLXNlcnZpY2VzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA2MmUzZQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9leGFtcGxlcy9jb3JlLWJyb3dzZS1zZXJ2aWNlcy5jCkBAIC0wLDAgKzEsMjEzIEBACisvKiBQTEVBU0UgTk9URSAqCisgKiBUaGlzIGZpbGUgZGVtb25zdHJhdGVzIGhvdyB0byB1c2UgQXZhaGkncyBjb3JlIEFQSSwgdGhpcyBpcworICogdGhlIGVtYmVkZGFibGUgbUROUyBzdGFjayBmb3IgZW1iZWRkZWQgYXBwbGljYXRpb25zLgorICoKKyAqIEVuZCB1c2VyIGFwcGxpY2F0aW9ucyBzaG91bGQgKm5vdCogdXNlIHRoaXMgQVBJIGFuZCBzaG91bGQgdXNlCisgKiB0aGUgRC1CdXMgb3IgQyBBUElzLCBwbGVhc2Ugc2VlCisgKiBjbGllbnQtYnJvd3NlLXNlcnZpY2VzLmMgYW5kIGdsaWItaW50ZWdyYXRpb24uYworICoKKyAqIEkgcmVwZWF0LCB5b3UgcHJvYmFibHkgZG8gKm5vdCogd2FudCB0byB1c2UgdGhpcyBleGFtcGxlLgorICovCisKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisKKyNpbmNsdWRlIDxhdmFoaS1jb3JlL2NvcmUuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb3JlL2xvb2t1cC5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9zaW1wbGUtd2F0Y2guaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vbWFsbG9jLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2Vycm9yLmg+CisKK3N0YXRpYyBBdmFoaVNpbXBsZVBvbGwgKnNpbXBsZV9wb2xsID0gTlVMTDsKK3N0YXRpYyBBdmFoaVNlcnZlciAqc2VydmVyID0gTlVMTDsKKworc3RhdGljIHZvaWQgcmVzb2x2ZV9jYWxsYmFjaygKKyAgICBBdmFoaVNTZXJ2aWNlUmVzb2x2ZXIgKnIsCisgICAgQVZBSElfR0NDX1VOVVNFRCBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLAorICAgIEFWQUhJX0dDQ19VTlVTRUQgQXZhaGlQcm90b2NvbCBwcm90b2NvbCwKKyAgICBBdmFoaVJlc29sdmVyRXZlbnQgZXZlbnQsCisgICAgY29uc3QgY2hhciAqbmFtZSwKKyAgICBjb25zdCBjaGFyICp0eXBlLAorICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwKKyAgICBjb25zdCBjaGFyICpob3N0X25hbWUsCisgICAgY29uc3QgQXZhaGlBZGRyZXNzICphZGRyZXNzLAorICAgIHVpbnQxNl90IHBvcnQsCisgICAgQXZhaGlTdHJpbmdMaXN0ICp0eHQsCisgICAgQXZhaGlMb29rdXBSZXN1bHRGbGFncyBmbGFncywKKyAgICBBVkFISV9HQ0NfVU5VU0VEIHZvaWQqIHVzZXJkYXRhKSB7CisKKyAgICBhc3NlcnQocik7CisKKyAgICAvKiBDYWxsZWQgd2hlbmV2ZXIgYSBzZXJ2aWNlIGhhcyBiZWVuIHJlc29sdmVkIHN1Y2Nlc3NmdWxseSBvciB0aW1lZCBvdXQgKi8KKworICAgIHN3aXRjaCAoZXZlbnQpIHsKKyAgICAgICAgY2FzZSBBVkFISV9SRVNPTFZFUl9GQUlMVVJFOgorICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIoUmVzb2x2ZXIpIEZhaWxlZCB0byByZXNvbHZlIHNlcnZpY2UgJyVzJyBvZiB0eXBlICclcycgaW4gZG9tYWluICclcyc6ICVzXG4iLCBuYW1lLCB0eXBlLCBkb21haW4sIGF2YWhpX3N0cmVycm9yKGF2YWhpX3NlcnZlcl9lcnJubyhzZXJ2ZXIpKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFWQUhJX1JFU09MVkVSX0ZPVU5EOiB7CisgICAgICAgICAgICBjaGFyIGFbQVZBSElfQUREUkVTU19TVFJfTUFYXSwgKnQ7CisKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiKFJlc29sdmVyKSBTZXJ2aWNlICclcycgb2YgdHlwZSAnJXMnIGluIGRvbWFpbiAnJXMnOlxuIiwgbmFtZSwgdHlwZSwgZG9tYWluKTsKKworICAgICAgICAgICAgYXZhaGlfYWRkcmVzc19zbnByaW50KGEsIHNpemVvZihhKSwgYWRkcmVzcyk7CisgICAgICAgICAgICB0ID0gYXZhaGlfc3RyaW5nX2xpc3RfdG9fc3RyaW5nKHR4dCk7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgICAgIlx0JXM6JXUgKCVzKVxuIgorICAgICAgICAgICAgICAgICAgICAiXHRUWFQ9JXNcbiIKKyAgICAgICAgICAgICAgICAgICAgIlx0Y29va2llIGlzICV1XG4iCisgICAgICAgICAgICAgICAgICAgICJcdGlzX2xvY2FsOiAlaVxuIgorICAgICAgICAgICAgICAgICAgICAiXHR3aWRlX2FyZWE6ICVpXG4iCisgICAgICAgICAgICAgICAgICAgICJcdG11bHRpY2FzdDogJWlcbiIKKyAgICAgICAgICAgICAgICAgICAgIlx0Y2FjaGVkOiAlaVxuIiwKKyAgICAgICAgICAgICAgICAgICAgaG9zdF9uYW1lLCBwb3J0LCBhLAorICAgICAgICAgICAgICAgICAgICB0LAorICAgICAgICAgICAgICAgICAgICBhdmFoaV9zdHJpbmdfbGlzdF9nZXRfc2VydmljZV9jb29raWUodHh0KSwKKyAgICAgICAgICAgICAgICAgICAgISEoZmxhZ3MgJiBBVkFISV9MT09LVVBfUkVTVUxUX0xPQ0FMKSwKKyAgICAgICAgICAgICAgICAgICAgISEoZmxhZ3MgJiBBVkFISV9MT09LVVBfUkVTVUxUX1dJREVfQVJFQSksCisgICAgICAgICAgICAgICAgICAgICEhKGZsYWdzICYgQVZBSElfTE9PS1VQX1JFU1VMVF9NVUxUSUNBU1QpLAorICAgICAgICAgICAgICAgICAgICAhIShmbGFncyAmIEFWQUhJX0xPT0tVUF9SRVNVTFRfQ0FDSEVEKSk7CisgICAgICAgICAgICBhdmFoaV9mcmVlKHQpOworICAgICAgICB9CisgICAgfQorCisgICAgYXZhaGlfc19zZXJ2aWNlX3Jlc29sdmVyX2ZyZWUocik7Cit9CisKK3N0YXRpYyB2b2lkIGJyb3dzZV9jYWxsYmFjaygKKyAgICBBdmFoaVNTZXJ2aWNlQnJvd3NlciAqYiwKKyAgICBBdmFoaUlmSW5kZXggaW50ZXJmYWNlLAorICAgIEF2YWhpUHJvdG9jb2wgcHJvdG9jb2wsCisgICAgQXZhaGlCcm93c2VyRXZlbnQgZXZlbnQsCisgICAgY29uc3QgY2hhciAqbmFtZSwKKyAgICBjb25zdCBjaGFyICp0eXBlLAorICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwKKyAgICBBVkFISV9HQ0NfVU5VU0VEIEF2YWhpTG9va3VwUmVzdWx0RmxhZ3MgZmxhZ3MsCisgICAgdm9pZCogdXNlcmRhdGEpIHsKKworICAgIEF2YWhpU2VydmVyICpzID0gdXNlcmRhdGE7CisgICAgYXNzZXJ0KGIpOworCisgICAgLyogQ2FsbGVkIHdoZW5ldmVyIGEgbmV3IHNlcnZpY2VzIGJlY29tZXMgYXZhaWxhYmxlIG9uIHRoZSBMQU4gb3IgaXMgcmVtb3ZlZCBmcm9tIHRoZSBMQU4gKi8KKworICAgIHN3aXRjaCAoZXZlbnQpIHsKKworICAgICAgICBjYXNlIEFWQUhJX0JST1dTRVJfRkFJTFVSRToKKworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIoQnJvd3NlcikgJXNcbiIsIGF2YWhpX3N0cmVycm9yKGF2YWhpX3NlcnZlcl9lcnJubyhzZXJ2ZXIpKSk7CisgICAgICAgICAgICBhdmFoaV9zaW1wbGVfcG9sbF9xdWl0KHNpbXBsZV9wb2xsKTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlIEFWQUhJX0JST1dTRVJfTkVXOgorICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIoQnJvd3NlcikgTkVXOiBzZXJ2aWNlICclcycgb2YgdHlwZSAnJXMnIGluIGRvbWFpbiAnJXMnXG4iLCBuYW1lLCB0eXBlLCBkb21haW4pOworCisgICAgICAgICAgICAvKiBXZSBpZ25vcmUgdGhlIHJldHVybmVkIHJlc29sdmVyIG9iamVjdC4gSW4gdGhlIGNhbGxiYWNrCisgICAgICAgICAgICAgICBmdW5jdGlvbiB3ZSBmcmVlIGl0LiBJZiB0aGUgc2VydmVyIGlzIHRlcm1pbmF0ZWQgYmVmb3JlCisgICAgICAgICAgICAgICB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkIHRoZSBzZXJ2ZXIgd2lsbCBmcmVlCisgICAgICAgICAgICAgICB0aGUgcmVzb2x2ZXIgZm9yIHVzLiAqLworCisgICAgICAgICAgICBpZiAoIShhdmFoaV9zX3NlcnZpY2VfcmVzb2x2ZXJfbmV3KHMsIGludGVyZmFjZSwgcHJvdG9jb2wsIG5hbWUsIHR5cGUsIGRvbWFpbiwgQVZBSElfUFJPVE9fVU5TUEVDLCAwLCByZXNvbHZlX2NhbGxiYWNrLCBzKSkpCisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gcmVzb2x2ZSBzZXJ2aWNlICclcyc6ICVzXG4iLCBuYW1lLCBhdmFoaV9zdHJlcnJvcihhdmFoaV9zZXJ2ZXJfZXJybm8ocykpKTsKKworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBVkFISV9CUk9XU0VSX1JFTU9WRToKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiKEJyb3dzZXIpIFJFTU9WRTogc2VydmljZSAnJXMnIG9mIHR5cGUgJyVzJyBpbiBkb21haW4gJyVzJ1xuIiwgbmFtZSwgdHlwZSwgZG9tYWluKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQVZBSElfQlJPV1NFUl9BTExfRk9SX05PVzoKKyAgICAgICAgY2FzZSBBVkFISV9CUk9XU0VSX0NBQ0hFX0VYSEFVU1RFRDoKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiKEJyb3dzZXIpICVzXG4iLCBldmVudCA9PSBBVkFISV9CUk9XU0VSX0NBQ0hFX0VYSEFVU1RFRCA/ICJDQUNIRV9FWEhBVVNURUQiIDogIkFMTF9GT1JfTk9XIik7CisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK2ludCBtYWluKEFWQUhJX0dDQ19VTlVTRUQgaW50IGFyZ2MsIEFWQUhJX0dDQ19VTlVTRUQgY2hhciphcmd2W10pIHsKKyAgICBBdmFoaVNlcnZlckNvbmZpZyBjb25maWc7CisgICAgQXZhaGlTU2VydmljZUJyb3dzZXIgKnNiID0gTlVMTDsKKyAgICBpbnQgZXJyb3I7CisgICAgaW50IHJldCA9IDE7CisKKyAgICAvKiBJbml0aWFsaXplIHRoZSBwc3VlZG8tUk5HICovCisgICAgc3JhbmQodGltZShOVUxMKSk7CisKKyAgICAvKiBBbGxvY2F0ZSBtYWluIGxvb3Agb2JqZWN0ICovCisgICAgaWYgKCEoc2ltcGxlX3BvbGwgPSBhdmFoaV9zaW1wbGVfcG9sbF9uZXcoKSkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gY3JlYXRlIHNpbXBsZSBwb2xsIG9iamVjdC5cbiIpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgLyogRG8gbm90IHB1Ymxpc2ggYW55IGxvY2FsIHJlY29yZHMgKi8KKyAgICBhdmFoaV9zZXJ2ZXJfY29uZmlnX2luaXQoJmNvbmZpZyk7CisgICAgY29uZmlnLnB1Ymxpc2hfaGluZm8gPSAwOworICAgIGNvbmZpZy5wdWJsaXNoX2FkZHJlc3NlcyA9IDA7CisgICAgY29uZmlnLnB1Ymxpc2hfd29ya3N0YXRpb24gPSAwOworICAgIGNvbmZpZy5wdWJsaXNoX2RvbWFpbiA9IDA7CisKKyAgICAvKiBTZXQgYSB1bmljYXN0IEROUyBzZXJ2ZXIgZm9yIHdpZGUgYXJlYSBETlMtU0QgKi8KKyAgICBhdmFoaV9hZGRyZXNzX3BhcnNlKCIxOTIuMTY4LjUwLjEiLCBBVkFISV9QUk9UT19VTlNQRUMsICZjb25maWcud2lkZV9hcmVhX3NlcnZlcnNbMF0pOworICAgIGNvbmZpZy5uX3dpZGVfYXJlYV9zZXJ2ZXJzID0gMTsKKyAgICBjb25maWcuZW5hYmxlX3dpZGVfYXJlYSA9IDE7CisKKyAgICAvKiBBbGxvY2F0ZSBhIG5ldyBzZXJ2ZXIgKi8KKyAgICBzZXJ2ZXIgPSBhdmFoaV9zZXJ2ZXJfbmV3KGF2YWhpX3NpbXBsZV9wb2xsX2dldChzaW1wbGVfcG9sbCksICZjb25maWcsIE5VTEwsIE5VTEwsICZlcnJvcik7CisKKyAgICAvKiBGcmVlIHRoZSBjb25maWd1cmF0aW9uIGRhdGEgKi8KKyAgICBhdmFoaV9zZXJ2ZXJfY29uZmlnX2ZyZWUoJmNvbmZpZyk7CisKKyAgICAvKiBDaGVjayB3ZXRoZXIgY3JlYXRpbmcgdGhlIHNlcnZlciBvYmplY3Qgc3VjY2VlZGVkICovCisgICAgaWYgKCFzZXJ2ZXIpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gY3JlYXRlIHNlcnZlcjogJXNcbiIsIGF2YWhpX3N0cmVycm9yKGVycm9yKSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICAvKiBDcmVhdGUgdGhlIHNlcnZpY2UgYnJvd3NlciAqLworICAgIGlmICghKHNiID0gYXZhaGlfc19zZXJ2aWNlX2Jyb3dzZXJfbmV3KHNlcnZlciwgQVZBSElfSUZfVU5TUEVDLCBBVkFISV9QUk9UT19VTlNQRUMsICJfaHR0cC5fdGNwIiwgTlVMTCwgMCwgYnJvd3NlX2NhbGxiYWNrLCBzZXJ2ZXIpKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBjcmVhdGUgc2VydmljZSBicm93c2VyOiAlc1xuIiwgYXZhaGlfc3RyZXJyb3IoYXZhaGlfc2VydmVyX2Vycm5vKHNlcnZlcikpKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIC8qIFJ1biB0aGUgbWFpbiBsb29wICovCisgICAgYXZhaGlfc2ltcGxlX3BvbGxfbG9vcChzaW1wbGVfcG9sbCk7CisKKyAgICByZXQgPSAwOworCitmYWlsOgorCisgICAgLyogQ2xlYW51cCB0aGluZ3MgKi8KKyAgICBpZiAoc2IpCisgICAgICAgIGF2YWhpX3Nfc2VydmljZV9icm93c2VyX2ZyZWUoc2IpOworCisgICAgaWYgKHNlcnZlcikKKyAgICAgICAgYXZhaGlfc2VydmVyX2ZyZWUoc2VydmVyKTsKKworICAgIGlmIChzaW1wbGVfcG9sbCkKKyAgICAgICAgYXZhaGlfc2ltcGxlX3BvbGxfZnJlZShzaW1wbGVfcG9sbCk7CisKKyAgICByZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2V4YW1wbGVzL2NvcmUtcHVibGlzaC1zZXJ2aWNlLmMgYi9hdmFoaS0wLjYuMzEvZXhhbXBsZXMvY29yZS1wdWJsaXNoLXNlcnZpY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzhhNDY0Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2V4YW1wbGVzL2NvcmUtcHVibGlzaC1zZXJ2aWNlLmMKQEAgLTAsMCArMSwyNDQgQEAKKy8qKioKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKyoqKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKyNpbmNsdWRlIDxhdmFoaS1jb3JlL2NvcmUuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb3JlL3B1Ymxpc2guaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vc2ltcGxlLXdhdGNoLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL21hbGxvYy5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9hbHRlcm5hdGl2ZS5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9lcnJvci5oPgorCitzdGF0aWMgQXZhaGlTRW50cnlHcm91cCAqZ3JvdXAgPSBOVUxMOworc3RhdGljIEF2YWhpU2ltcGxlUG9sbCAqc2ltcGxlX3BvbGwgPSBOVUxMOworc3RhdGljIGNoYXIgKm5hbWUgPSBOVUxMOworCitzdGF0aWMgdm9pZCBjcmVhdGVfc2VydmljZXMoQXZhaGlTZXJ2ZXIgKnMpOworCitzdGF0aWMgdm9pZCBlbnRyeV9ncm91cF9jYWxsYmFjayhBdmFoaVNlcnZlciAqcywgQXZhaGlTRW50cnlHcm91cCAqZywgQXZhaGlFbnRyeUdyb3VwU3RhdGUgc3RhdGUsIEFWQUhJX0dDQ19VTlVTRUQgdm9pZCAqdXNlcmRhdGEpIHsKKyAgICBhc3NlcnQocyk7CisgICAgYXNzZXJ0KGcgPT0gZ3JvdXApOworCisgICAgLyogQ2FsbGVkIHdoZW5ldmVyIHRoZSBlbnRyeSBncm91cCBzdGF0ZSBjaGFuZ2VzICovCisKKyAgICBzd2l0Y2ggKHN0YXRlKSB7CisKKyAgICAgICAgY2FzZSBBVkFISV9FTlRSWV9HUk9VUF9FU1RBQkxJU0hFRDoKKworICAgICAgICAgICAgLyogVGhlIGVudHJ5IGdyb3VwIGhhcyBiZWVuIGVzdGFibGlzaGVkIHN1Y2Nlc3NmdWxseSAqLworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJTZXJ2aWNlICclcycgc3VjY2Vzc2Z1bGx5IGVzdGFibGlzaGVkLlxuIiwgbmFtZSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFWQUhJX0VOVFJZX0dST1VQX0NPTExJU0lPTjogeworICAgICAgICAgICAgY2hhciAqbjsKKworICAgICAgICAgICAgLyogQSBzZXJ2aWNlIG5hbWUgY29sbGlzaW9uIGhhcHBlbmVkLiBMZXQncyBwaWNrIGEgbmV3IG5hbWUgKi8KKyAgICAgICAgICAgIG4gPSBhdmFoaV9hbHRlcm5hdGl2ZV9zZXJ2aWNlX25hbWUobmFtZSk7CisgICAgICAgICAgICBhdmFoaV9mcmVlKG5hbWUpOworICAgICAgICAgICAgbmFtZSA9IG47CisKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiU2VydmljZSBuYW1lIGNvbGxpc2lvbiwgcmVuYW1pbmcgc2VydmljZSB0byAnJXMnXG4iLCBuYW1lKTsKKworICAgICAgICAgICAgLyogQW5kIHJlY3JlYXRlIHRoZSBzZXJ2aWNlcyAqLworICAgICAgICAgICAgY3JlYXRlX3NlcnZpY2VzKHMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEFWQUhJX0VOVFJZX0dST1VQX0ZBSUxVUkUgOgorCisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVudHJ5IGdyb3VwIGZhaWx1cmU6ICVzXG4iLCBhdmFoaV9zdHJlcnJvcihhdmFoaV9zZXJ2ZXJfZXJybm8ocykpKTsKKworICAgICAgICAgICAgLyogU29tZSBraW5kIG9mIGZhaWx1cmUgaGFwcGVuZWQgd2hpbGUgd2Ugd2VyZSByZWdpc3RlcmluZyBvdXIgc2VydmljZXMgKi8KKyAgICAgICAgICAgIGF2YWhpX3NpbXBsZV9wb2xsX3F1aXQoc2ltcGxlX3BvbGwpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBVkFISV9FTlRSWV9HUk9VUF9VTkNPTU1JVEVEOgorICAgICAgICBjYXNlIEFWQUhJX0VOVFJZX0dST1VQX1JFR0lTVEVSSU5HOgorICAgICAgICAgICAgOworICAgIH0KK30KKworc3RhdGljIHZvaWQgY3JlYXRlX3NlcnZpY2VzKEF2YWhpU2VydmVyICpzKSB7CisgICAgY2hhciByWzEyOF07CisgICAgaW50IHJldDsKKyAgICBhc3NlcnQocyk7CisKKyAgICAvKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHdlJ3JlIGNhbGxlZCwgbGV0J3MgY3JlYXRlIGEgbmV3IGVudHJ5IGdyb3VwICovCisgICAgaWYgKCFncm91cCkKKyAgICAgICAgaWYgKCEoZ3JvdXAgPSBhdmFoaV9zX2VudHJ5X2dyb3VwX25ldyhzLCBlbnRyeV9ncm91cF9jYWxsYmFjaywgTlVMTCkpKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImF2YWhpX2VudHJ5X2dyb3VwX25ldygpIGZhaWxlZDogJXNcbiIsIGF2YWhpX3N0cmVycm9yKGF2YWhpX3NlcnZlcl9lcnJubyhzKSkpOworICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CisKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkFkZGluZyBzZXJ2aWNlICclcydcbiIsIG5hbWUpOworCisgICAgLyogQ3JlYXRlIHNvbWUgcmFuZG9tIFRYVCBkYXRhICovCisgICAgc25wcmludGYociwgc2l6ZW9mKHIpLCAicmFuZG9tPSVpIiwgcmFuZCgpKTsKKworICAgIC8qIEFkZCB0aGUgc2VydmljZSBmb3IgSVBQICovCisgICAgaWYgKChyZXQgPSBhdmFoaV9zZXJ2ZXJfYWRkX3NlcnZpY2UocywgZ3JvdXAsIEFWQUhJX0lGX1VOU1BFQywgQVZBSElfUFJPVE9fVU5TUEVDLCAwLCBuYW1lLCAiX2lwcC5fdGNwIiwgTlVMTCwgTlVMTCwgNjUxLCAidGVzdD1ibGFoIiwgciwgTlVMTCkpIDwgMCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBhZGQgX2lwcC5fdGNwIHNlcnZpY2U6ICVzXG4iLCBhdmFoaV9zdHJlcnJvcihyZXQpKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIC8qIEFkZCB0aGUgc2FtZSBzZXJ2aWNlIGZvciBCU0QgTFBSICovCisgICAgaWYgKChyZXQgPSBhdmFoaV9zZXJ2ZXJfYWRkX3NlcnZpY2UocywgZ3JvdXAsIEFWQUhJX0lGX1VOU1BFQywgQVZBSElfUFJPVE9fVU5TUEVDLCAwLCBuYW1lLCAiX3ByaW50ZXIuX3RjcCIsIE5VTEwsIE5VTEwsIDUxNSwgTlVMTCkpIDwgMCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBhZGQgX3ByaW50ZXIuX3RjcCBzZXJ2aWNlOiAlc1xuIiwgYXZhaGlfc3RyZXJyb3IocmV0KSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICAvKiBBZGQgYW4gYWRkaXRpb25hbCAoaHlwb3RoZXRpYykgc3VidHlwZSAqLworICAgIGlmICgocmV0ID0gYXZhaGlfc2VydmVyX2FkZF9zZXJ2aWNlX3N1YnR5cGUocywgZ3JvdXAsIEFWQUhJX0lGX1VOU1BFQywgQVZBSElfUFJPVE9fVU5TUEVDLCAwLCBuYW1lLCAiX3ByaW50ZXIuX3RjcCIsIE5VTEwsICJfbWFnaWMuX3N1Yi5fcHJpbnRlci5fdGNwIikgPCAwKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBhZGQgc3VidHlwZSBfbWFnaWMuX3N1Yi5fcHJpbnRlci5fdGNwOiAlc1xuIiwgYXZhaGlfc3RyZXJyb3IocmV0KSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICAvKiBUZWxsIHRoZSBzZXJ2ZXIgdG8gcmVnaXN0ZXIgdGhlIHNlcnZpY2UgKi8KKyAgICBpZiAoKHJldCA9IGF2YWhpX3NfZW50cnlfZ3JvdXBfY29tbWl0KGdyb3VwKSkgPCAwKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGNvbW1pdCBlbnRyeV9ncm91cDogJXNcbiIsIGF2YWhpX3N0cmVycm9yKHJldCkpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgcmV0dXJuOworCitmYWlsOgorICAgIGF2YWhpX3NpbXBsZV9wb2xsX3F1aXQoc2ltcGxlX3BvbGwpOworfQorCitzdGF0aWMgdm9pZCBzZXJ2ZXJfY2FsbGJhY2soQXZhaGlTZXJ2ZXIgKnMsIEF2YWhpU2VydmVyU3RhdGUgc3RhdGUsIEFWQUhJX0dDQ19VTlVTRUQgdm9pZCAqIHVzZXJkYXRhKSB7CisgICAgYXNzZXJ0KHMpOworCisgICAgLyogQ2FsbGVkIHdoZW5ldmVyIHRoZSBzZXJ2ZXIgc3RhdGUgY2hhbmdlcyAqLworCisgICAgc3dpdGNoIChzdGF0ZSkgeworCisgICAgICAgIGNhc2UgQVZBSElfU0VSVkVSX1JVTk5JTkc6CisgICAgICAgICAgICAvKiBUaGUgc2VydmUgaGFzIHN0YXJ0dXAgc3VjY2Vzc2Z1bGx5IGFuZCByZWdpc3RlcmVkIGl0cyBob3N0CisgICAgICAgICAgICAgKiBuYW1lIG9uIHRoZSBuZXR3b3JrLCBzbyBpdCdzIHRpbWUgdG8gY3JlYXRlIG91ciBzZXJ2aWNlcyAqLworCisgICAgICAgICAgICBpZiAoIWdyb3VwKQorICAgICAgICAgICAgICAgIGNyZWF0ZV9zZXJ2aWNlcyhzKTsKKworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBVkFISV9TRVJWRVJfQ09MTElTSU9OOiB7CisgICAgICAgICAgICBjaGFyICpuOworICAgICAgICAgICAgaW50IHI7CisKKyAgICAgICAgICAgIC8qIEEgaG9zdCBuYW1lIGNvbGxpc2lvbiBoYXBwZW5lZC4gTGV0J3MgcGljayBhIG5ldyBuYW1lIGZvciB0aGUgc2VydmVyICovCisgICAgICAgICAgICBuID0gYXZhaGlfYWx0ZXJuYXRpdmVfaG9zdF9uYW1lKGF2YWhpX3NlcnZlcl9nZXRfaG9zdF9uYW1lKHMpKTsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiSG9zdCBuYW1lIGNvbGxpc2lvbiwgcmV0cnlpbmcgd2l0aCAnJXMnXG4iLCBuKTsKKyAgICAgICAgICAgIHIgPSBhdmFoaV9zZXJ2ZXJfc2V0X2hvc3RfbmFtZShzLCBuKTsKKyAgICAgICAgICAgIGF2YWhpX2ZyZWUobik7CisKKyAgICAgICAgICAgIGlmIChyIDwgMCkgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIHNldCBuZXcgaG9zdCBuYW1lOiAlc1xuIiwgYXZhaGlfc3RyZXJyb3IocikpOworCisgICAgICAgICAgICAgICAgYXZhaGlfc2ltcGxlX3BvbGxfcXVpdChzaW1wbGVfcG9sbCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgIH0KKworICAgICAgICAgICAgLyogRmFsbCB0aHJvdWdoICovCisKKyAgICAgICAgY2FzZSBBVkFISV9TRVJWRVJfUkVHSVNURVJJTkc6CisKKwkgICAgLyogTGV0J3MgZHJvcCBvdXIgcmVnaXN0ZXJlZCBzZXJ2aWNlcy4gV2hlbiB0aGUgc2VydmVyIGlzIGJhY2sKKyAgICAgICAgICAgICAqIGluIEFWQUhJX1NFUlZFUl9SVU5OSU5HIHN0YXRlIHdlIHdpbGwgcmVnaXN0ZXIgdGhlbQorICAgICAgICAgICAgICogYWdhaW4gd2l0aCB0aGUgbmV3IGhvc3QgbmFtZS4gKi8KKyAgICAgICAgICAgIGlmIChncm91cCkKKyAgICAgICAgICAgICAgICBhdmFoaV9zX2VudHJ5X2dyb3VwX3Jlc2V0KGdyb3VwKTsKKworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBVkFISV9TRVJWRVJfRkFJTFVSRToKKworICAgICAgICAgICAgLyogVGVybWluYXRlIG9uIGZhaWx1cmUgKi8KKworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJTZXJ2ZXIgZmFpbHVyZTogJXNcbiIsIGF2YWhpX3N0cmVycm9yKGF2YWhpX3NlcnZlcl9lcnJubyhzKSkpOworICAgICAgICAgICAgYXZhaGlfc2ltcGxlX3BvbGxfcXVpdChzaW1wbGVfcG9sbCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFWQUhJX1NFUlZFUl9JTlZBTElEOgorICAgICAgICAgICAgOworICAgIH0KK30KKworaW50IG1haW4oQVZBSElfR0NDX1VOVVNFRCBpbnQgYXJnYywgQVZBSElfR0NDX1VOVVNFRCBjaGFyKmFyZ3ZbXSkgeworICAgIEF2YWhpU2VydmVyQ29uZmlnIGNvbmZpZzsKKyAgICBBdmFoaVNlcnZlciAqc2VydmVyID0gTlVMTDsKKyAgICBpbnQgZXJyb3I7CisgICAgaW50IHJldCA9IDE7CisKKyAgICAvKiBJbml0aWFsaXplIHRoZSBwc2V1ZG8tUk5HICovCisgICAgc3JhbmQodGltZShOVUxMKSk7CisKKyAgICAvKiBBbGxvY2F0ZSBtYWluIGxvb3Agb2JqZWN0ICovCisgICAgaWYgKCEoc2ltcGxlX3BvbGwgPSBhdmFoaV9zaW1wbGVfcG9sbF9uZXcoKSkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gY3JlYXRlIHNpbXBsZSBwb2xsIG9iamVjdC5cbiIpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgbmFtZSA9IGF2YWhpX3N0cmR1cCgiTWVnYVByaW50ZXIiKTsKKworICAgIC8qIExldCdzIHNldCB0aGUgaG9zdCBuYW1lIGZvciB0aGlzIHNlcnZlci4gKi8KKyAgICBhdmFoaV9zZXJ2ZXJfY29uZmlnX2luaXQoJmNvbmZpZyk7CisgICAgY29uZmlnLmhvc3RfbmFtZSA9IGF2YWhpX3N0cmR1cCgiZ3Vya2ltYW4iKTsKKyAgICBjb25maWcucHVibGlzaF93b3Jrc3RhdGlvbiA9IDA7CisKKyAgICAvKiBBbGxvY2F0ZSBhIG5ldyBzZXJ2ZXIgKi8KKyAgICBzZXJ2ZXIgPSBhdmFoaV9zZXJ2ZXJfbmV3KGF2YWhpX3NpbXBsZV9wb2xsX2dldChzaW1wbGVfcG9sbCksICZjb25maWcsIHNlcnZlcl9jYWxsYmFjaywgTlVMTCwgJmVycm9yKTsKKworICAgIC8qIEZyZWUgdGhlIGNvbmZpZ3VyYXRpb24gZGF0YSAqLworICAgIGF2YWhpX3NlcnZlcl9jb25maWdfZnJlZSgmY29uZmlnKTsKKworICAgIC8qIENoZWNrIHdldGhlciBjcmVhdGluZyB0aGUgc2VydmVyIG9iamVjdCBzdWNjZWVkZWQgKi8KKyAgICBpZiAoIXNlcnZlcikgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBjcmVhdGUgc2VydmVyOiAlc1xuIiwgYXZhaGlfc3RyZXJyb3IoZXJyb3IpKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIC8qIFJ1biB0aGUgbWFpbiBsb29wICovCisgICAgYXZhaGlfc2ltcGxlX3BvbGxfbG9vcChzaW1wbGVfcG9sbCk7CisKKyAgICByZXQgPSAwOworCitmYWlsOgorCisgICAgLyogQ2xlYW51cCB0aGluZ3MgKi8KKworICAgIGlmIChzZXJ2ZXIpCisgICAgICAgIGF2YWhpX3NlcnZlcl9mcmVlKHNlcnZlcik7CisKKyAgICBpZiAoc2ltcGxlX3BvbGwpCisgICAgICAgIGF2YWhpX3NpbXBsZV9wb2xsX2ZyZWUoc2ltcGxlX3BvbGwpOworCisgICAgYXZhaGlfZnJlZShuYW1lKTsKKworICAgIHJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvZXhhbXBsZXMvZ2xpYi1pbnRlZ3JhdGlvbi5jIGIvYXZhaGktMC42LjMxL2V4YW1wbGVzL2dsaWItaW50ZWdyYXRpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmEyNDU3Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2V4YW1wbGVzL2dsaWItaW50ZWdyYXRpb24uYwpAQCAtMCwwICsxLDE0NiBAQAorLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxnbGliLmg+CisKKyNpbmNsdWRlIDxhdmFoaS1jbGllbnQvY2xpZW50Lmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2Vycm9yLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL3RpbWV2YWwuaD4KKyNpbmNsdWRlIDxhdmFoaS1nbGliL2dsaWItd2F0Y2guaD4KKyNpbmNsdWRlIDxhdmFoaS1nbGliL2dsaWItbWFsbG9jLmg+CisKKy8qIENhbGxiYWNrIGZvciBBdmFoaSBBUEkgVGltZW91dCBFdmVudCAqLworc3RhdGljIHZvaWQKK2F2YWhpX3RpbWVvdXRfZXZlbnQgKEFWQUhJX0dDQ19VTlVTRUQgQXZhaGlUaW1lb3V0ICp0aW1lb3V0LCBBVkFISV9HQ0NfVU5VU0VEIHZvaWQgKnVzZXJkYXRhKQoreworICAgIGdfbWVzc2FnZSAoIkF2YWhpIEFQSSBUaW1lb3V0IHJlYWNoZWQhIik7Cit9CisKKy8qIENhbGxiYWNrIGZvciBHTElCIEFQSSBUaW1lb3V0IEV2ZW50ICovCitzdGF0aWMgZ2Jvb2xlYW4KK2F2YWhpX3RpbWVvdXRfZXZlbnRfZ2xpYiAodm9pZCAqdXNlcmRhdGEpCit7CisgICAgR01haW5Mb29wICpsb29wID0gdXNlcmRhdGE7CisKKyAgICBnX21lc3NhZ2UgKCJHTElCIEFQSSBUaW1lb3V0IHJlYWNoZWQsIHF1aXR0aW5nIG1haW4gbG9vcCEiKTsKKworICAgIC8qIFF1aXQgdGhlIGFwcGxpY2F0aW9uICovCisgICAgZ19tYWluX2xvb3BfcXVpdCAobG9vcCk7CisKKyAgICByZXR1cm4gRkFMU0U7IC8qIERvbid0IHJlLXNjaGVkdWxlIHRpbWVvdXQgZXZlbnQgKi8KK30KKworLyogQ2FsbGJhY2sgZm9yIHN0YXRlIGNoYW5nZXMgb24gdGhlIENsaWVudCAqLworc3RhdGljIHZvaWQKK2F2YWhpX2NsaWVudF9jYWxsYmFjayAoQVZBSElfR0NDX1VOVVNFRCBBdmFoaUNsaWVudCAqY2xpZW50LCBBdmFoaUNsaWVudFN0YXRlIHN0YXRlLCB2b2lkICp1c2VyZGF0YSkKK3sKKyAgICBHTWFpbkxvb3AgKmxvb3AgPSB1c2VyZGF0YTsKKworICAgIGdfbWVzc2FnZSAoIkF2YWhpIENsaWVudCBTdGF0ZSBDaGFuZ2U6ICVkIiwgc3RhdGUpOworCisgICAgaWYgKHN0YXRlID09IEFWQUhJX0NMSUVOVF9GQUlMVVJFKQorICAgIHsKKyAgICAgICAgLyogV2Ugd2UncmUgZGlzY29ubmVjdGVkIGZyb20gdGhlIERhZW1vbiAqLworICAgICAgICBnX21lc3NhZ2UgKCJEaXNjb25uZWN0ZWQgZnJvbSB0aGUgQXZhaGkgRGFlbW9uOiAlcyIsIGF2YWhpX3N0cmVycm9yKGF2YWhpX2NsaWVudF9lcnJubyhjbGllbnQpKSk7CisKKyAgICAgICAgLyogUXVpdCB0aGUgYXBwbGljYXRpb24gKi8KKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdCAobG9vcCk7CisgICAgfQorfQorCitpbnQKK21haW4gKEFWQUhJX0dDQ19VTlVTRUQgaW50IGFyZ2MsIEFWQUhJX0dDQ19VTlVTRUQgY2hhciAqYXJndltdKQoreworICAgIEdNYWluTG9vcCAqbG9vcCA9IE5VTEw7CisgICAgY29uc3QgQXZhaGlQb2xsICpwb2xsX2FwaTsKKyAgICBBdmFoaUdMaWJQb2xsICpnbGliX3BvbGw7CisgICAgQXZhaGlDbGllbnQgKmNsaWVudDsKKyAgICBzdHJ1Y3QgdGltZXZhbCB0djsKKyAgICBjb25zdCBjaGFyICp2ZXJzaW9uOworICAgIGludCBlcnJvcjsKKworICAgIC8qIE9wdGlvbmFsOiBUZWxsIGF2YWhpIHRvIHVzZSBnX21hbGxvYyBhbmQgZ19mcmVlICovCisgICAgYXZhaGlfc2V0X2FsbG9jYXRvciAoYXZhaGlfZ2xpYl9hbGxvY2F0b3IgKCkpOworCisgICAgLyogQ3JlYXRlIHRoZSBHTElCIG1haW4gbG9vcCAqLworICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcgKE5VTEwsIEZBTFNFKTsKKworICAgIC8qIENyZWF0ZSB0aGUgR0xJQiBBZGFwdG9yICovCisgICAgZ2xpYl9wb2xsID0gYXZhaGlfZ2xpYl9wb2xsX25ldyAoTlVMTCwgR19QUklPUklUWV9ERUZBVUxUKTsKKyAgICBwb2xsX2FwaSA9IGF2YWhpX2dsaWJfcG9sbF9nZXQgKGdsaWJfcG9sbCk7CisKKyAgICAvKiBFeGFtcGxlLCBzY2hlZHVsZSBhIHRpbWVvdXQgZXZlbnQgd2l0aCB0aGUgQXZhaGkgQVBJICovCisgICAgYXZhaGlfZWxhcHNlX3RpbWUgKCZ0diwgICAgICAgICAgICAgICAgICAgICAgICAgLyogdGltZXZhbCBzdHJ1Y3R1cmUgKi8KKyAgICAgICAgICAgIDEwMDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxIHNlY29uZCAqLworICAgICAgICAgICAgMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICJqaXR0ZXIiIC0gUmFuZG9tIGFkZGl0aW9uYWwgZGVsYXkgZnJvbSAwIHRvIHRoaXMgdmFsdWUgKi8KKworICAgIHBvbGxfYXBpLT50aW1lb3V0X25ldyAocG9sbF9hcGksICAgICAgICAgICAgICAgIC8qIFRoZSBBdmFoaVBvbGwgb2JqZWN0ICovCisgICAgICAgICAgICAgICAgICAgICAgJnR2LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3RydWN0IHRpbWV2YWwgaW5kaWNhdGluZyB3aGVuIHRvIGdvIGFjdGl2YXRlICovCisgICAgICAgICAgICAgICAgICAgICAgYXZhaGlfdGltZW91dF9ldmVudCwgICAgICAgICAgLyogUG9pbnRlciB0byBmdW5jdGlvbiB0byBjYWxsICovCisgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogVXNlciBkYXRhIHRvIHBhc3MgdG8gZnVuY3Rpb24gKi8KKworICAgIC8qIFNjaGVkdWxlIGEgdGltZW91dCBldmVudCB3aXRoIHRoZSBnbGliIGFwaSAqLworICAgIGdfdGltZW91dF9hZGQgKDUwMDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDUgc2Vjb25kcyAqLworICAgICAgICAgICAgYXZhaGlfdGltZW91dF9ldmVudF9nbGliLCAgICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gZnVuY3Rpb24gY2FsbGJhY2sgKi8KKyAgICAgICAgICAgIGxvb3ApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVc2VyIGRhdGEgdG8gcGFzcyB0byBmdW5jdGlvbiAqLworCisgICAgLyogQ3JlYXRlIGEgbmV3IEF2YWhpQ2xpZW50IGluc3RhbmNlICovCisgICAgY2xpZW50ID0gYXZhaGlfY2xpZW50X25ldyAocG9sbF9hcGksICAgICAgICAgICAgLyogQXZhaGlQb2xsIG9iamVjdCBmcm9tIGFib3ZlICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIGF2YWhpX2NsaWVudF9jYWxsYmFjaywgICAgICAgICAgICAgICAgICAvKiBDYWxsYmFjayBmdW5jdGlvbiBmb3IgQ2xpZW50IHN0YXRlIGNoYW5nZXMgKi8KKyAgICAgICAgICAgIGxvb3AsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVc2VyIGRhdGEgKi8KKyAgICAgICAgICAgICZlcnJvcik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFcnJvciByZXR1cm4gKi8KKworICAgIC8qIENoZWNrIHRoZSBlcnJvciByZXR1cm4gY29kZSAqLworICAgIGlmIChjbGllbnQgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIC8qIFByaW50IG91dCB0aGUgZXJyb3Igc3RyaW5nICovCisgICAgICAgIGdfd2FybmluZyAoIkVycm9yIGluaXRpYWxpemluZyBBdmFoaTogJXMiLCBhdmFoaV9zdHJlcnJvciAoZXJyb3IpKTsKKworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgLyogTWFrZSBhIGNhbGwgdG8gZ2V0IHRoZSB2ZXJzaW9uIHN0cmluZyBmcm9tIHRoZSBkYWVtb24gKi8KKyAgICB2ZXJzaW9uID0gYXZhaGlfY2xpZW50X2dldF92ZXJzaW9uX3N0cmluZyAoY2xpZW50KTsKKworICAgIC8qIENoZWNrIGlmIHRoZSBjYWxsIHN1Y2VlZGVkICovCisgICAgaWYgKHZlcnNpb24gPT0gTlVMTCkKKyAgICB7CisgICAgICAgIGdfd2FybmluZyAoIkVycm9yIGdldHRpbmcgdmVyc2lvbiBzdHJpbmc6ICVzIiwgYXZhaGlfc3RyZXJyb3IgKGF2YWhpX2NsaWVudF9lcnJubyAoY2xpZW50KSkpOworCisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBnX21lc3NhZ2UgKCJBdmFoaSBTZXJ2ZXIgVmVyc2lvbjogJXMiLCB2ZXJzaW9uKTsKKworICAgIC8qIFN0YXJ0IHRoZSBHTElCIE1haW4gTG9vcCAqLworICAgIGdfbWFpbl9sb29wX3J1biAobG9vcCk7CisKK2ZhaWw6CisgICAgLyogQ2xlYW4gdXAgKi8KKyAgICBnX21haW5fbG9vcF91bnJlZiAobG9vcCk7CisgICAgYXZhaGlfY2xpZW50X2ZyZWUgKGNsaWVudCk7CisgICAgYXZhaGlfZ2xpYl9wb2xsX2ZyZWUgKGdsaWJfcG9sbCk7CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9pbml0c2NyaXB0L01ha2VmaWxlLmFtIGIvYXZhaGktMC42LjMxL2luaXRzY3JpcHQvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVlMTkyOAotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9pbml0c2NyaXB0L01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsNTggQEAKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisjCisjIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisjIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisjIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisjIFVTQS4KKworU1VCRElSUyA9CisKK2lmIFRBUkdFVF9MRlMKK1NVQkRJUlMgKz0gbGZzCitlbmRpZgorCitpZiBUQVJHRVRfREVCSUFOCitTVUJESVJTICs9IGRlYmlhbgorZW5kaWYKKworaWYgVEFSR0VUX0FSQ0hMSU5VWAorU1VCRElSUyArPSBhcmNobGludXgKK2VuZGlmCisKK2lmIFRBUkdFVF9HRU5UT08KK1NVQkRJUlMgKz0gZ2VudG9vCitlbmRpZgorCitpZiBUQVJHRVRfU1VTRQorU1VCRElSUyArPSBzdXNlCitlbmRpZgorCitpZiBUQVJHRVRfRkVET1JBCitTVUJESVJTICs9IGZlZG9yYQorZW5kaWYKKworaWYgVEFSR0VUX01BTkRSSVZBCitTVUJESVJTICs9IG1hbmRyaXZhCitlbmRpZgorCitpZiBUQVJHRVRfREFSV0lOCitTVUJESVJTICs9IGRhcndpbgorZW5kaWYKKworaWYgVEFSR0VUX0ZSRUVCU0QKK1NVQkRJUlMgKz0gZnJlZWJzZAorZW5kaWYKKworaWYgVEFSR0VUX1NMQUNLV0FSRQorU1VCRElSUyArPSBzbGFja3dhcmUKK2VuZGlmCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvaW5pdHNjcmlwdC9NYWtlZmlsZS5pbiBiL2F2YWhpLTAuNi4zMS9pbml0c2NyaXB0L01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1NGUzYzYKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvaW5pdHNjcmlwdC9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDczNyBAQAorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xMS4zIGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorIworIyBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworIyBVU0EuCitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitAVEFSR0VUX0xGU19UUlVFQGFtX19hcHBlbmRfMSA9IGxmcworQFRBUkdFVF9ERUJJQU5fVFJVRUBhbV9fYXBwZW5kXzIgPSBkZWJpYW4KK0BUQVJHRVRfQVJDSExJTlVYX1RSVUVAYW1fX2FwcGVuZF8zID0gYXJjaGxpbnV4CitAVEFSR0VUX0dFTlRPT19UUlVFQGFtX19hcHBlbmRfNCA9IGdlbnRvbworQFRBUkdFVF9TVVNFX1RSVUVAYW1fX2FwcGVuZF81ID0gc3VzZQorQFRBUkdFVF9GRURPUkFfVFJVRUBhbV9fYXBwZW5kXzYgPSBmZWRvcmEKK0BUQVJHRVRfTUFORFJJVkFfVFJVRUBhbV9fYXBwZW5kXzcgPSBtYW5kcml2YQorQFRBUkdFVF9EQVJXSU5fVFJVRUBhbV9fYXBwZW5kXzggPSBkYXJ3aW4KK0BUQVJHRVRfRlJFRUJTRF9UUlVFQGFtX19hcHBlbmRfOSA9IGZyZWVic2QKK0BUQVJHRVRfU0xBQ0tXQVJFX1RSVUVAYW1fX2FwcGVuZF8xMCA9IHNsYWNrd2FyZQorc3ViZGlyID0gaW5pdHNjcmlwdAorRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vYWN4X3B0aHJlYWQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2djY19zdGFja19wcm90ZWN0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9nY2NfdmlzaWJpbGl0eS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vaW50bHRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2ludHJvc3BlY3Rpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2x0b3B0aW9ucy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHR2ZXJzaW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbmxzLm00ICQodG9wX3NyY2RpcikvY29tbW9uL3B5dGhvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9hY2luY2x1ZGUubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vZG94eWdlbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCithbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCithbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICIgJEA7CitBTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCithbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfYXRfMCA9IEAKK1NPVVJDRVMgPQorRElTVF9TT1VSQ0VTID0KK1JFQ1VSU0lWRV9UQVJHRVRTID0gYWxsLXJlY3Vyc2l2ZSBjaGVjay1yZWN1cnNpdmUgZHZpLXJlY3Vyc2l2ZSBcCisJaHRtbC1yZWN1cnNpdmUgaW5mby1yZWN1cnNpdmUgaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1kdmktcmVjdXJzaXZlIGluc3RhbGwtZXhlYy1yZWN1cnNpdmUgXAorCWluc3RhbGwtaHRtbC1yZWN1cnNpdmUgaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1wZGYtcmVjdXJzaXZlIGluc3RhbGwtcHMtcmVjdXJzaXZlIGluc3RhbGwtcmVjdXJzaXZlIFwKKwlpbnN0YWxsY2hlY2stcmVjdXJzaXZlIGluc3RhbGxkaXJzLXJlY3Vyc2l2ZSBwZGYtcmVjdXJzaXZlIFwKKwlwcy1yZWN1cnNpdmUgdW5pbnN0YWxsLXJlY3Vyc2l2ZQorUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMgPSBtb3N0bHljbGVhbi1yZWN1cnNpdmUgY2xlYW4tcmVjdXJzaXZlCVwKKyAgZGlzdGNsZWFuLXJlY3Vyc2l2ZSBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQorQU1fUkVDVVJTSVZFX1RBUkdFVFMgPSAkKFJFQ1VSU0lWRV9UQVJHRVRTOi1yZWN1cnNpdmU9KSBcCisJJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUzotcmVjdXJzaXZlPSkgdGFncyBUQUdTIGN0YWdzIENUQUdTIFwKKwlkaXN0ZGlyCitFVEFHUyA9IGV0YWdzCitDVEFHUyA9IGN0YWdzCitESVNUX1NVQkRJUlMgPSBsZnMgZGViaWFuIGFyY2hsaW51eCBnZW50b28gc3VzZSBmZWRvcmEgbWFuZHJpdmEgZGFyd2luIFwKKwlmcmVlYnNkIHNsYWNrd2FyZQorRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK2FtX19yZWxhdGl2aXplID0gXAorICBkaXIwPWBwd2RgOyBcCisgIHNlZF9maXJzdD0ncyxeXChbXi9dKlwpLy4qJCQsXDEsJzsgXAorICBzZWRfcmVzdD0ncyxeW14vXSovKiwsJzsgXAorICBzZWRfbGFzdD0ncyxeLiovXChbXi9dKlwpJCQsXDEsJzsgXAorICBzZWRfYnV0bGFzdD0ncywvKlteL10qJCQsLCc7IFwKKyAgd2hpbGUgdGVzdCAtbiAiJCRkaXIxIjsgZG8gXAorICAgIGZpcnN0PWBlY2hvICIkJGRpcjEiIHwgc2VkIC1lICIkJHNlZF9maXJzdCJgOyBcCisgICAgaWYgdGVzdCAiJCRmaXJzdCIgIT0gIi4iOyB0aGVuIFwKKyAgICAgIGlmIHRlc3QgIiQkZmlyc3QiID0gIi4uIjsgdGhlbiBcCisgICAgICAgIGRpcjI9YGVjaG8gIiQkZGlyMCIgfCBzZWQgLWUgIiQkc2VkX2xhc3QiYC8iJCRkaXIyIjsgXAorICAgICAgICBkaXIwPWBlY2hvICIkJGRpcjAiIHwgc2VkIC1lICIkJHNlZF9idXRsYXN0ImA7IFwKKyAgICAgIGVsc2UgXAorICAgICAgICBmaXJzdDI9YGVjaG8gIiQkZGlyMiIgfCBzZWQgLWUgIiQkc2VkX2ZpcnN0ImA7IFwKKyAgICAgICAgaWYgdGVzdCAiJCRmaXJzdDIiID0gIiQkZmlyc3QiOyB0aGVuIFwKKyAgICAgICAgICBkaXIyPWBlY2hvICIkJGRpcjIiIHwgc2VkIC1lICIkJHNlZF9yZXN0ImA7IFwKKyAgICAgICAgZWxzZSBcCisgICAgICAgICAgZGlyMj0iLi4vJCRkaXIyIjsgXAorICAgICAgICBmaTsgXAorICAgICAgICBkaXIwPSIkJGRpcjAiLyIkJGZpcnN0IjsgXAorICAgICAgZmk7IFwKKyAgICBmaTsgXAorICAgIGRpcjE9YGVjaG8gIiQkZGlyMSIgfCBzZWQgLWUgIiQkc2VkX3Jlc3QiYDsgXAorICBkb25lOyBcCisgIHJlbGRpcj0iJCRkaXIyIgorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQUxMX0xJTkdVQVMgPSBAQUxMX0xJTkdVQVNACitBTVRBUiA9IEBBTVRBUkAKK0FNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAorQVIgPSBAQVJACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVZBSElfQVVUT0lQRF9HUk9VUCA9IEBBVkFISV9BVVRPSVBEX0dST1VQQAorQVZBSElfQVVUT0lQRF9VU0VSID0gQEFWQUhJX0FVVE9JUERfVVNFUkAKK0FWQUhJX0dST1VQID0gQEFWQUhJX0dST1VQQAorQVZBSElfUFJJVl9BQ0NFU1NfR1JPVVAgPSBAQVZBSElfUFJJVl9BQ0NFU1NfR1JPVVBACitBVkFISV9VU0VSID0gQEFWQUhJX1VTRVJACitBV0sgPSBAQVdLQAorQ0FUQUxPR1MgPSBAQ0FUQUxPR1NACitDQVRPQkpFWFQgPSBAQ0FUT0JKRVhUQAorQ0MgPSBAQ0NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREFUQURJUk5BTUUgPSBAREFUQURJUk5BTUVACitEQlVTX0NGTEFHUyA9IEBEQlVTX0NGTEFHU0AKK0RCVVNfTElCUyA9IEBEQlVTX0xJQlNACitEQlVTX1NZU1RFTV9CVVNfREVGQVVMVF9BRERSRVNTID0gQERCVVNfU1lTVEVNX0JVU19ERUZBVUxUX0FERFJFU1NACitEQlVTX1NZU19ESVIgPSBAREJVU19TWVNfRElSQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RMTFRPT0wgPSBARExMVE9PTEAKK0RPWFlHRU5fUEFQRVJfU0laRSA9IEBET1hZR0VOX1BBUEVSX1NJWkVACitEU1lNVVRJTCA9IEBEU1lNVVRJTEAKK0RVTVBCSU4gPSBARFVNUEJJTkAKK0RYX0NPTkZJRyA9IEBEWF9DT05GSUdACitEWF9ET0NESVIgPSBARFhfRE9DRElSQAorRFhfRE9UID0gQERYX0RPVEAKK0RYX0RPWFlHRU4gPSBARFhfRE9YWUdFTkAKK0RYX0RWSVBTID0gQERYX0RWSVBTQAorRFhfRUdSRVAgPSBARFhfRUdSRVBACitEWF9FTlYgPSBARFhfRU5WQAorRFhfRkxBR19jaGkgPSBARFhfRkxBR19jaGlACitEWF9GTEFHX2NobSA9IEBEWF9GTEFHX2NobUAKK0RYX0ZMQUdfZG9jID0gQERYX0ZMQUdfZG9jQAorRFhfRkxBR19kb3QgPSBARFhfRkxBR19kb3RACitEWF9GTEFHX2h0bWwgPSBARFhfRkxBR19odG1sQAorRFhfRkxBR19tYW4gPSBARFhfRkxBR19tYW5ACitEWF9GTEFHX3BkZiA9IEBEWF9GTEFHX3BkZkAKK0RYX0ZMQUdfcHMgPSBARFhfRkxBR19wc0AKK0RYX0ZMQUdfcnRmID0gQERYX0ZMQUdfcnRmQAorRFhfRkxBR194bWwgPSBARFhfRkxBR194bWxACitEWF9ISEMgPSBARFhfSEhDQAorRFhfTEFURVggPSBARFhfTEFURVhACitEWF9NQUtFSU5ERVggPSBARFhfTUFLRUlOREVYQAorRFhfUERGTEFURVggPSBARFhfUERGTEFURVhACitEWF9QRVJMID0gQERYX1BFUkxACitEWF9QUk9KRUNUID0gQERYX1BST0pFQ1RACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VYRUVYVCA9IEBFWEVFWFRACitGR1JFUCA9IEBGR1JFUEAKK0dBQ1VUSUwgPSBAR0FDVVRJTEAKK0dFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACitHTElCMjBfQ0ZMQUdTID0gQEdMSUIyMF9DRkxBR1NACitHTElCMjBfTElCUyA9IEBHTElCMjBfTElCU0AKK0dNT0ZJTEVTID0gQEdNT0ZJTEVTQAorR01TR0ZNVCA9IEBHTVNHRk1UQAorR09CSkVDVF9DRkxBR1MgPSBAR09CSkVDVF9DRkxBR1NACitHT0JKRUNUX0xJQlMgPSBAR09CSkVDVF9MSUJTQAorR1JFUCA9IEBHUkVQQAorR1RLMjBfQ0ZMQUdTID0gQEdUSzIwX0NGTEFHU0AKK0dUSzIwX0xJQlMgPSBAR1RLMjBfTElCU0AKK0dUSzMwX0NGTEFHUyA9IEBHVEszMF9DRkxBR1NACitHVEszMF9MSUJTID0gQEdUSzMwX0xJQlNACitIT1dMX0NPTVBBVF9WRVJTSU9OID0gQEhPV0xfQ09NUEFUX1ZFUlNJT05ACitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lOU1RPQkpFWFQgPSBASU5TVE9CSkVYVEAKK0lOVExMSUJTID0gQElOVExMSUJTQAorSU5UTFRPT0xfRVhUUkFDVCA9IEBJTlRMVE9PTF9FWFRSQUNUQAorSU5UTFRPT0xfTUVSR0UgPSBASU5UTFRPT0xfTUVSR0VACitJTlRMVE9PTF9QRVJMID0gQElOVExUT09MX1BFUkxACitJTlRMVE9PTF9VUERBVEUgPSBASU5UTFRPT0xfVVBEQVRFQAorSU5UUk9TUEVDVElPTl9DRkxBR1MgPSBASU5UUk9TUEVDVElPTl9DRkxBR1NACitJTlRST1NQRUNUSU9OX0NPTVBJTEVSID0gQElOVFJPU1BFQ1RJT05fQ09NUElMRVJACitJTlRST1NQRUNUSU9OX0dFTkVSQVRFID0gQElOVFJPU1BFQ1RJT05fR0VORVJBVEVACitJTlRST1NQRUNUSU9OX0dJUkRJUiA9IEBJTlRST1NQRUNUSU9OX0dJUkRJUkAKK0lOVFJPU1BFQ1RJT05fTElCUyA9IEBJTlRST1NQRUNUSU9OX0xJQlNACitJTlRST1NQRUNUSU9OX01BS0VGSUxFID0gQElOVFJPU1BFQ1RJT05fTUFLRUZJTEVACitJTlRST1NQRUNUSU9OX1NDQU5ORVIgPSBASU5UUk9TUEVDVElPTl9TQ0FOTkVSQAorSU5UUk9TUEVDVElPTl9UWVBFTElCRElSID0gQElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUkAKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCQVZBSElfQ0xJRU5UX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DTElFTlRfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfQ09NTU9OX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DT01NT05fVkVSU0lPTl9JTkZPQAorTElCQVZBSElfQ09NUEFUX0hPV0xfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NPTVBBVF9IT1dMX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPTVBBVF9MSUJETlNfU0RfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NPTVBBVF9MSUJETlNfU0RfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfQ09SRV9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ09SRV9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9HTElCX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9HTElCX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0dPQkpFQ1RfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0dPQkpFQ1RfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfUVQzX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9RVDNfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfUVQ0X1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9RVDRfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfVUlfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX1VJX1ZFUlNJT05fSU5GT0AKK0xJQkRBRU1PTl9DRkxBR1MgPSBATElCREFFTU9OX0NGTEFHU0AKK0xJQkRBRU1PTl9MSUJTID0gQExJQkRBRU1PTl9MSUJTQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAorTUNTID0gQE1DU0AKK01EQVNTRU1CTEVSID0gQE1EQVNTRU1CTEVSQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTUtJTlNUQUxMRElSUyA9IEBNS0lOU1RBTExESVJTQAorTU9DX1FUMyA9IEBNT0NfUVQzQAorTU9DX1FUNCA9IEBNT0NfUVQ0QAorTU9OT0RPQ0VSID0gQE1PTk9ET0NFUkAKK01PTk9ET0NfQ0ZMQUdTID0gQE1PTk9ET0NfQ0ZMQUdTQAorTU9OT0RPQ19ESVIgPSBATU9OT0RPQ19ESVJACitNT05PRE9DX0xJQlMgPSBATU9OT0RPQ19MSUJTQAorTVNHRk1UID0gQE1TR0ZNVEAKK01TR0ZNVF9PUFRTID0gQE1TR0ZNVF9PUFRTQAorTVNHTUVSR0UgPSBATVNHTUVSR0VACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitPQkpEVU1QID0gQE9CSkRVTVBACitPQkpFWFQgPSBAT0JKRVhUQAorT1RPT0wgPSBAT1RPT0xACitPVE9PTDY0ID0gQE9UT09MNjRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK1BLR19DT05GSUdfTElCRElSID0gQFBLR19DT05GSUdfTElCRElSQAorUEtHX0NPTkZJR19QQVRIID0gQFBLR19DT05GSUdfUEFUSEAKK1BPRklMRVMgPSBAUE9GSUxFU0AKK1BPU1VCID0gQFBPU1VCQAorUE9fSU5fREFUQURJUl9GQUxTRSA9IEBQT19JTl9EQVRBRElSX0ZBTFNFQAorUE9fSU5fREFUQURJUl9UUlVFID0gQFBPX0lOX0RBVEFESVJfVFJVRUAKK1BUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKK1BUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAorUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKK1BZVEhPTiA9IEBQWVRIT05ACitQWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAorUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKK1BZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKK1BZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAorUVQzX0NGTEFHUyA9IEBRVDNfQ0ZMQUdTQAorUVQzX0xJQlMgPSBAUVQzX0xJQlNACitRVDRfQ0ZMQUdTID0gQFFUNF9DRkxBR1NACitRVDRfTElCUyA9IEBRVDRfTElCU0AKK1JBTkxJQiA9IEBSQU5MSUJACitTRUQgPSBAU0VEQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NUT1cgPSBAU1RPV0AKK1NUUklQID0gQFNUUklQQAorVVNFX05MUyA9IEBVU0VfTkxTQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorVklTSUJJTElUWV9ISURERU5fQ0ZMQUdTID0gQFZJU0lCSUxJVFlfSElEREVOX0NGTEFHU0AKK1hHRVRURVhUID0gQFhHRVRURVhUQAorWE1MX0NGTEFHUyA9IEBYTUxfQ0ZMQUdTQAorWE1MX0xJQlMgPSBAWE1MX0xJQlNACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9BUiA9IEBhY19jdF9BUkAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKK2FjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK2FjeF9wdGhyZWFkX2NvbmZpZyA9IEBhY3hfcHRocmVhZF9jb25maWdACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2F2YWhpX3J1bnRpbWVfZGlyID0gQGF2YWhpX3J1bnRpbWVfZGlyQAorYXZhaGlfc29ja2V0ID0gQGF2YWhpX3NvY2tldEAKK2F2YWhpbG9jYWxlZGlyID0gQGF2YWhpbG9jYWxlZGlyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitoYXZlX3BrZ19jb25maWcgPSBAaGF2ZV9wa2dfY29uZmlnQAoraGF2ZV94bWx0b21hbiA9IEBoYXZlX3htbHRvbWFuQAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2ludGVyZmFjZXNkaXIgPSBAaW50ZXJmYWNlc2RpckAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAorcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3B5ZXhlY2RpciA9IEBweWV4ZWNkaXJACitweXRob25kaXIgPSBAcHl0aG9uZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzcmNkaXIgPSBAc3JjZGlyQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAorc3lzdGVtZHN5c3RlbXVuaXRkaXIgPSBAc3lzdGVtZHN5c3RlbXVuaXRkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK1NVQkRJUlMgPSAkKGFtX19hcHBlbmRfMSkgJChhbV9fYXBwZW5kXzIpICQoYW1fX2FwcGVuZF8zKSBcCisJJChhbV9fYXBwZW5kXzQpICQoYW1fX2FwcGVuZF81KSAkKGFtX19hcHBlbmRfNikgXAorCSQoYW1fX2FwcGVuZF83KSAkKGFtX19hcHBlbmRfOCkgJChhbV9fYXBwZW5kXzkpIFwKKwkkKGFtX19hcHBlbmRfMTApCithbGw6IGFsbC1yZWN1cnNpdmUKKworLlNVRkZJWEVTOgorJChzcmNkaXIpL01ha2VmaWxlLmluOiAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gaW5pdHNjcmlwdC9NYWtlZmlsZSc7IFwKKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gaW5pdHNjcmlwdC9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CisKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJzCisKKyMgVGhpcyBkaXJlY3RvcnkncyBzdWJkaXJlY3RvcmllcyBhcmUgbW9zdGx5IGluZGVwZW5kZW50OyB5b3UgY2FuIGNkCisjIGludG8gdGhlbSBhbmQgcnVuIGBtYWtlJyB3aXRob3V0IGdvaW5nIHRocm91Z2ggdGhpcyBNYWtlZmlsZS4KKyMgVG8gY2hhbmdlIHRoZSB2YWx1ZXMgb2YgYG1ha2UnIHZhcmlhYmxlczogaW5zdGVhZCBvZiBlZGl0aW5nIE1ha2VmaWxlcywKKyMgKDEpIGlmIHRoZSB2YXJpYWJsZSBpcyBzZXQgaW4gYGNvbmZpZy5zdGF0dXMnLCBlZGl0IGBjb25maWcuc3RhdHVzJworIyAgICAgKHdoaWNoIHdpbGwgY2F1c2UgdGhlIE1ha2VmaWxlcyB0byBiZSByZWdlbmVyYXRlZCB3aGVuIHlvdSBydW4gYG1ha2UnKTsKKyMgKDIpIG90aGVyd2lzZSwgcGFzcyB0aGUgZGVzaXJlZCB2YWx1ZXMgb24gdGhlIGBtYWtlJyBjb21tYW5kIGxpbmUuCiskKFJFQ1VSU0lWRV9UQVJHRVRTKToKKwlAZmFpbD0gZmFpbGNvbT0nZXhpdCAxJzsgXAorCWZvciBmIGluIHggJCRNQUtFRkxBR1M7IGRvIFwKKwkgIGNhc2UgJCRmIGluIFwKKwkgICAgKj0qIHwgLS1bIWtdKik7OyBcCisJICAgICprKikgZmFpbGNvbT0nZmFpbD15ZXMnOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwlkb3Rfc2Vlbj1ubzsgXAorCXRhcmdldD1gZWNobyAkQCB8IHNlZCBzLy1yZWN1cnNpdmUvL2A7IFwKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGVjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCisJICAgIGRvdF9zZWVuPXllczsgXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0LWFtIjsgXAorCSAgZWxzZSBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCisJICBmaTsgXAorCSAgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkJGxvY2FsX3RhcmdldCkgXAorCSAgfHwgZXZhbCAkJGZhaWxjb207IFwKKwlkb25lOyBcCisJaWYgdGVzdCAiJCRkb3Rfc2VlbiIgPSAibm8iOyB0aGVuIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICIkJHRhcmdldC1hbSIgfHwgZXhpdCAxOyBcCisJZmk7IHRlc3QgLXogIiQkZmFpbCIKKworJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUyk6CisJQGZhaWw9IGZhaWxjb209J2V4aXQgMSc7IFwKKwlmb3IgZiBpbiB4ICQkTUFLRUZMQUdTOyBkbyBcCisJICBjYXNlICQkZiBpbiBcCisJICAgICo9KiB8IC0tWyFrXSopOzsgXAorCSAgICAqayopIGZhaWxjb209J2ZhaWw9eWVzJzs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZG90X3NlZW49bm87IFwKKwljYXNlICIkQCIgaW4gXAorCSAgZGlzdGNsZWFuLSogfCBtYWludGFpbmVyLWNsZWFuLSopIGxpc3Q9JyQoRElTVF9TVUJESVJTKScgOzsgXAorCSAgKikgbGlzdD0nJChTVUJESVJTKScgOzsgXAorCWVzYWM7IFwKKwlyZXY9Jyc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gOjsgZWxzZSBcCisJICAgIHJldj0iJCRzdWJkaXIgJCRyZXYiOyBcCisJICBmaTsgXAorCWRvbmU7IFwKKwlyZXY9IiQkcmV2IC4iOyBcCisJdGFyZ2V0PWBlY2hvICRAIHwgc2VkIHMvLXJlY3Vyc2l2ZS8vYDsgXAorCWZvciBzdWJkaXIgaW4gJCRyZXY7IGRvIFwKKwkgIGVjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQtYW0iOyBcCisJICBlbHNlIFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKKwkgIGZpOyBcCisJICAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCisJICB8fCBldmFsICQkZmFpbGNvbTsgXAorCWRvbmUgJiYgdGVzdCAteiAiJCRmYWlsIgordGFncy1yZWN1cnNpdmU6CisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICB0ZXN0ICIkJHN1YmRpciIgPSAuIHx8ICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgdGFncyk7IFwKKwlkb25lCitjdGFncy1yZWN1cnNpdmU6CisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICB0ZXN0ICIkJHN1YmRpciIgPSAuIHx8ICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY3RhZ3MpOyBcCisJZG9uZQorCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCW1raWQgLWZJRCAkJHVuaXF1ZQordGFnczogVEFHUworCitUQUdTOiB0YWdzLXJlY3Vyc2l2ZSAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJc2V0IHg7IFwKKwloZXJlPWBwd2RgOyBcCisJaWYgKCQoRVRBR1MpIC0tZXRhZ3MtaW5jbHVkZSAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCisJICBpbmNsdWRlX29wdGlvbj0tLWV0YWdzLWluY2x1ZGU7IFwKKwkgIGVtcHR5X2ZpeD0uOyBcCisJZWxzZSBcCisJICBpbmNsdWRlX29wdGlvbj0tLWluY2x1ZGU7IFwKKwkgIGVtcHR5X2ZpeD07IFwKKwlmaTsgXAorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgdGVzdCAhIC1mICQkc3ViZGlyL1RBR1MgfHwgXAorCSAgICAgIHNldCAiJCRAIiAiJCRpbmNsdWRlX29wdGlvbj0kJGhlcmUvJCRzdWJkaXIvVEFHUyI7IFwKKwkgIGZpOyBcCisJZG9uZTsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlzaGlmdDsgXAorCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisJICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCisJICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAorCSAgZWxzZSBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAkJHVuaXF1ZTsgXAorCSAgZmk7IFwKKwlmaQorY3RhZ3M6IENUQUdTCitDVEFHUzogY3RhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCisJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCisJICAgICAkJHVuaXF1ZQorCitHVEFHUzoKKwloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgorCitkaXN0Y2xlYW4tdGFnczoKKwktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKKwlAbGlzdD0nJChESVNUX1NVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCisJICAgIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRzdWJkaXIiIFwKKwkgICAgfHwgJChNS0RJUl9QKSAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorCUBsaXN0PSckKERJU1RfU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgZGlyMT0kJHN1YmRpcjsgZGlyMj0iJChkaXN0ZGlyKS8kJHN1YmRpciI7IFwKKwkgICAgJChhbV9fcmVsYXRpdml6ZSk7IFwKKwkgICAgbmV3X2Rpc3RkaXI9JCRyZWxkaXI7IFwKKwkgICAgZGlyMT0kJHN1YmRpcjsgZGlyMj0iJCh0b3BfZGlzdGRpcikiOyBcCisJICAgICQoYW1fX3JlbGF0aXZpemUpOyBcCisJICAgIG5ld190b3BfZGlzdGRpcj0kJHJlbGRpcjsgXAorCSAgICBlY2hvICIgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHRvcF9kaXN0ZGlyPSIkJG5ld190b3BfZGlzdGRpciIgZGlzdGRpcj0iJCRuZXdfZGlzdGRpciIgXFwiOyBcCisJICAgIGVjaG8gIiAgICAgYW1fX3JlbW92ZV9kaXN0ZGlyPTogYW1fX3NraXBfbGVuZ3RoX2NoZWNrPTogYW1fX3NraXBfbW9kZV9maXg9OiBkaXN0ZGlyKSI7IFwKKwkgICAgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiBcCisJICAgICAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgXAorCSAgICAgICAgdG9wX2Rpc3RkaXI9IiQkbmV3X3RvcF9kaXN0ZGlyIiBcCisJICAgICAgICBkaXN0ZGlyPSIkJG5ld19kaXN0ZGlyIiBcCisJCWFtX19yZW1vdmVfZGlzdGRpcj06IFwKKwkJYW1fX3NraXBfbGVuZ3RoX2NoZWNrPTogXAorCQlhbV9fc2tpcF9tb2RlX2ZpeD06IFwKKwkgICAgICAgIGRpc3RkaXIpIFwKKwkgICAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorY2hlY2stYW06IGFsbC1hbQorY2hlY2s6IGNoZWNrLXJlY3Vyc2l2ZQorYWxsLWFtOiBNYWtlZmlsZQoraW5zdGFsbGRpcnM6IGluc3RhbGxkaXJzLXJlY3Vyc2l2ZQoraW5zdGFsbGRpcnMtYW06CitpbnN0YWxsOiBpbnN0YWxsLXJlY3Vyc2l2ZQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1yZWN1cnNpdmUKK3VuaW5zdGFsbDogdW5pbnN0YWxsLXJlY3Vyc2l2ZQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1yZWN1cnNpdmUKK2luc3RhbGwtc3RyaXA6CisJaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgICAgIGluc3RhbGw7IFwKKwllbHNlIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAorCWZpCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tcmVjdXJzaXZlCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tcmVjdXJzaXZlCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi10YWdzCisKK2R2aTogZHZpLXJlY3Vyc2l2ZQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtcmVjdXJzaXZlCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tcmVjdXJzaXZlCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbToKKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLXJlY3Vyc2l2ZQorCitpbnN0YWxsLWR2aS1hbToKKworaW5zdGFsbC1leGVjLWFtOgorCitpbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1yZWN1cnNpdmUKKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1yZWN1cnNpdmUKKworaW5zdGFsbC1pbmZvLWFtOgorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLXJlY3Vyc2l2ZQorCitpbnN0YWxsLXBkZi1hbToKKworaW5zdGFsbC1wczogaW5zdGFsbC1wcy1yZWN1cnNpdmUKKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tcmVjdXJzaXZlCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtcmVjdXJzaXZlCisKK3BkZi1hbToKKworcHM6IHBzLXJlY3Vyc2l2ZQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOgorCisuTUFLRTogJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUykgJChSRUNVUlNJVkVfVEFSR0VUUykgY3RhZ3MtcmVjdXJzaXZlIFwKKwlpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAgdGFncy1yZWN1cnNpdmUKKworLlBIT05ZOiAkKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTKSAkKFJFQ1VSU0lWRV9UQVJHRVRTKSBDVEFHUyBHVEFHUyBcCisJYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgXAorCWN0YWdzIGN0YWdzLXJlY3Vyc2l2ZSBkaXN0Y2xlYW4gZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIFwKKwlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIFwKKwlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIFwKKwlpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gXAorCWluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBcCisJaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIFwKKwlpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgaW5zdGFsbGRpcnMtYW0gbWFpbnRhaW5lci1jbGVhbiBcCisJbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHRhZ3MtcmVjdXJzaXZlIFwKKwl1bmluc3RhbGwgdW5pbnN0YWxsLWFtCisKKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2luaXRzY3JpcHQvYXJjaGxpbnV4L01ha2VmaWxlLmFtIGIvYXZhaGktMC42LjMxL2luaXRzY3JpcHQvYXJjaGxpbnV4L01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwNzA5NzUKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvaW5pdHNjcmlwdC9hcmNobGludXgvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSwzOCBAQAorIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKyMKKyMgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyMgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyMgVVNBLgorCitpbml0ZGRpciA9ICQoc3lzY29uZmRpcikvcmMuZAorCitFWFRSQV9ESVNUID0gXAorCWF2YWhpLWRhZW1vbi5pbiBcCisJYXZhaGktZG5zY29uZmQuaW4KKworaW5pdGRfU0NSSVBUUyA9IFwKKwlhdmFoaS1kYWVtb24gXAorCWF2YWhpLWRuc2NvbmZkCisKK0NMRUFORklMRVMgPSBcCisJYXZhaGktZGFlbW9uIFwKKwlhdmFoaS1kbnNjb25mZAorCithdmFoaS1kYWVtb246IGF2YWhpLWRhZW1vbi5pbgorCXNlZCAtZSAncyxAc2JpbmRpclxALCQoc2JpbmRpciksZycgJDwgPiAkQAorCWNobW9kICt4ICRACisKK2F2YWhpLWRuc2NvbmZkOiBhdmFoaS1kbnNjb25mZC5pbgorCXNlZCAtZSAncyxAc2JpbmRpclxALCQoc2JpbmRpciksZycgJDwgPiAkQAorCWNobW9kICt4ICRACmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvaW5pdHNjcmlwdC9hcmNobGludXgvTWFrZWZpbGUuaW4gYi9hdmFoaS0wLjYuMzEvaW5pdHNjcmlwdC9hcmNobGludXgvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTUxNDdjNwotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9pbml0c2NyaXB0L2FyY2hsaW51eC9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDYwOCBAQAorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xMS4zIGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorIworIyBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworIyBVU0EuCisKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK3N1YmRpciA9IGluaXRzY3JpcHQvYXJjaGxpbnV4CitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9hY3hfcHRocmVhZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vZ2NjX3N0YWNrX3Byb3RlY3QubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2djY192aXNpYmlsaXR5Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9pbnRsdG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vaW50cm9zcGVjdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbGlidG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHRvcHRpb25zLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9sdHN1Z2FyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9sdHZlcnNpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2x0fm9ic29sZXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9ubHMubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vcHl0aG9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2FjaW5jbHVkZS5tNCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9kb3h5Z2VuLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CithbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKK2FtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCisgICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKKyAgICAqKSBmPSQkcDs7IFwKKyAgZXNhYzsKK2FtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKK2FtX19pbnN0YWxsX21heCA9IDQwCithbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAorICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCithbV9fbm9iYXNlX3N0cmlwID0gXAorICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKK2FtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKKyAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKKyAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMvIC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKKyAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAorICAgIGlmICgrK25bJCQyXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIFwKKyAgICAgIHsgcHJpbnQgJCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKKyAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCithbV9fYmFzZV9saXN0ID0gXAorICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnIHwgXAorICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCithbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyID0geyBcCisgIHRlc3QgLXogIiQkZmlsZXMiIFwKKyAgICB8fCB7IHRlc3QgISAtZCAiJCRkaXIiICYmIHRlc3QgISAtZiAiJCRkaXIiICYmIHRlc3QgISAtciAiJCRkaXIiOyB9IFwKKyAgICB8fCB7IGVjaG8gIiAoIGNkICckJGRpcicgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCisgICAgICAgICAkKGFtX19jZCkgIiQkZGlyIiAmJiBybSAtZiAkJGZpbGVzOyB9OyBcCisgIH0KK2FtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChpbml0ZGRpcikiCitTQ1JJUFRTID0gJChpbml0ZF9TQ1JJUFRTKQorQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCithbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCithbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICIgJEA7CitBTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCithbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfYXRfMCA9IEAKK1NPVVJDRVMgPQorRElTVF9TT1VSQ0VTID0KK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitBQ0xPQ0FMID0gQEFDTE9DQUxACitBTExfTElOR1VBUyA9IEBBTExfTElOR1VBU0AKK0FNVEFSID0gQEFNVEFSQAorQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACitBUiA9IEBBUkAKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBVkFISV9BVVRPSVBEX0dST1VQID0gQEFWQUhJX0FVVE9JUERfR1JPVVBACitBVkFISV9BVVRPSVBEX1VTRVIgPSBAQVZBSElfQVVUT0lQRF9VU0VSQAorQVZBSElfR1JPVVAgPSBAQVZBSElfR1JPVVBACitBVkFISV9QUklWX0FDQ0VTU19HUk9VUCA9IEBBVkFISV9QUklWX0FDQ0VTU19HUk9VUEAKK0FWQUhJX1VTRVIgPSBAQVZBSElfVVNFUkAKK0FXSyA9IEBBV0tACitDQVRBTE9HUyA9IEBDQVRBTE9HU0AKK0NBVE9CSkVYVCA9IEBDQVRPQkpFWFRACitDQyA9IEBDQ0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1hYID0gQENYWEAKK0NYWENQUCA9IEBDWFhDUFBACitDWFhERVBNT0RFID0gQENYWERFUE1PREVACitDWFhGTEFHUyA9IEBDWFhGTEFHU0AKK0NZR1BBVEhfVyA9IEBDWUdQQVRIX1dACitEQVRBRElSTkFNRSA9IEBEQVRBRElSTkFNRUAKK0RCVVNfQ0ZMQUdTID0gQERCVVNfQ0ZMQUdTQAorREJVU19MSUJTID0gQERCVVNfTElCU0AKK0RCVVNfU1lTVEVNX0JVU19ERUZBVUxUX0FERFJFU1MgPSBAREJVU19TWVNURU1fQlVTX0RFRkFVTFRfQUREUkVTU0AKK0RCVVNfU1lTX0RJUiA9IEBEQlVTX1NZU19ESVJACitERUZTID0gQERFRlNACitERVBESVIgPSBAREVQRElSQAorRExMVE9PTCA9IEBETExUT09MQAorRE9YWUdFTl9QQVBFUl9TSVpFID0gQERPWFlHRU5fUEFQRVJfU0laRUAKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRFhfQ09ORklHID0gQERYX0NPTkZJR0AKK0RYX0RPQ0RJUiA9IEBEWF9ET0NESVJACitEWF9ET1QgPSBARFhfRE9UQAorRFhfRE9YWUdFTiA9IEBEWF9ET1hZR0VOQAorRFhfRFZJUFMgPSBARFhfRFZJUFNACitEWF9FR1JFUCA9IEBEWF9FR1JFUEAKK0RYX0VOViA9IEBEWF9FTlZACitEWF9GTEFHX2NoaSA9IEBEWF9GTEFHX2NoaUAKK0RYX0ZMQUdfY2htID0gQERYX0ZMQUdfY2htQAorRFhfRkxBR19kb2MgPSBARFhfRkxBR19kb2NACitEWF9GTEFHX2RvdCA9IEBEWF9GTEFHX2RvdEAKK0RYX0ZMQUdfaHRtbCA9IEBEWF9GTEFHX2h0bWxACitEWF9GTEFHX21hbiA9IEBEWF9GTEFHX21hbkAKK0RYX0ZMQUdfcGRmID0gQERYX0ZMQUdfcGRmQAorRFhfRkxBR19wcyA9IEBEWF9GTEFHX3BzQAorRFhfRkxBR19ydGYgPSBARFhfRkxBR19ydGZACitEWF9GTEFHX3htbCA9IEBEWF9GTEFHX3htbEAKK0RYX0hIQyA9IEBEWF9ISENACitEWF9MQVRFWCA9IEBEWF9MQVRFWEAKK0RYX01BS0VJTkRFWCA9IEBEWF9NQUtFSU5ERVhACitEWF9QREZMQVRFWCA9IEBEWF9QREZMQVRFWEAKK0RYX1BFUkwgPSBARFhfUEVSTEAKK0RYX1BST0pFQ1QgPSBARFhfUFJPSkVDVEAKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRVhFRVhUID0gQEVYRUVYVEAKK0ZHUkVQID0gQEZHUkVQQAorR0FDVVRJTCA9IEBHQUNVVElMQAorR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKK0dMSUIyMF9DRkxBR1MgPSBAR0xJQjIwX0NGTEFHU0AKK0dMSUIyMF9MSUJTID0gQEdMSUIyMF9MSUJTQAorR01PRklMRVMgPSBAR01PRklMRVNACitHTVNHRk1UID0gQEdNU0dGTVRACitHT0JKRUNUX0NGTEFHUyA9IEBHT0JKRUNUX0NGTEFHU0AKK0dPQkpFQ1RfTElCUyA9IEBHT0JKRUNUX0xJQlNACitHUkVQID0gQEdSRVBACitHVEsyMF9DRkxBR1MgPSBAR1RLMjBfQ0ZMQUdTQAorR1RLMjBfTElCUyA9IEBHVEsyMF9MSUJTQAorR1RLMzBfQ0ZMQUdTID0gQEdUSzMwX0NGTEFHU0AKK0dUSzMwX0xJQlMgPSBAR1RLMzBfTElCU0AKK0hPV0xfQ09NUEFUX1ZFUlNJT04gPSBASE9XTF9DT01QQVRfVkVSU0lPTkAKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSU5TVE9CSkVYVCA9IEBJTlNUT0JKRVhUQAorSU5UTExJQlMgPSBASU5UTExJQlNACitJTlRMVE9PTF9FWFRSQUNUID0gQElOVExUT09MX0VYVFJBQ1RACitJTlRMVE9PTF9NRVJHRSA9IEBJTlRMVE9PTF9NRVJHRUAKK0lOVExUT09MX1BFUkwgPSBASU5UTFRPT0xfUEVSTEAKK0lOVExUT09MX1VQREFURSA9IEBJTlRMVE9PTF9VUERBVEVACitJTlRST1NQRUNUSU9OX0NGTEFHUyA9IEBJTlRST1NQRUNUSU9OX0NGTEFHU0AKK0lOVFJPU1BFQ1RJT05fQ09NUElMRVIgPSBASU5UUk9TUEVDVElPTl9DT01QSUxFUkAKK0lOVFJPU1BFQ1RJT05fR0VORVJBVEUgPSBASU5UUk9TUEVDVElPTl9HRU5FUkFURUAKK0lOVFJPU1BFQ1RJT05fR0lSRElSID0gQElOVFJPU1BFQ1RJT05fR0lSRElSQAorSU5UUk9TUEVDVElPTl9MSUJTID0gQElOVFJPU1BFQ1RJT05fTElCU0AKK0lOVFJPU1BFQ1RJT05fTUFLRUZJTEUgPSBASU5UUk9TUEVDVElPTl9NQUtFRklMRUAKK0lOVFJPU1BFQ1RJT05fU0NBTk5FUiA9IEBJTlRST1NQRUNUSU9OX1NDQU5ORVJACitJTlRST1NQRUNUSU9OX1RZUEVMSUJESVIgPSBASU5UUk9TUEVDVElPTl9UWVBFTElCRElSQAorTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMSUJBVkFISV9DTElFTlRfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NMSUVOVF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9DT01NT05fVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NPTU1PTl9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9DT01QQVRfSE9XTF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ09NUEFUX0hPV0xfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfQ09NUEFUX0xJQkROU19TRF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ09NUEFUX0xJQkROU19TRF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9DT1JFX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DT1JFX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0dMSUJfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0dMSUJfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfR09CSkVDVF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfR09CSkVDVF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9RVDNfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX1FUM19WRVJTSU9OX0lORk9ACitMSUJBVkFISV9RVDRfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX1FUNF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9VSV9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfVUlfVkVSU0lPTl9JTkZPQAorTElCREFFTU9OX0NGTEFHUyA9IEBMSUJEQUVNT05fQ0ZMQUdTQAorTElCREFFTU9OX0xJQlMgPSBATElCREFFTU9OX0xJQlNACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQExJQlNACitMSUJUT09MID0gQExJQlRPT0xACitMSVBPID0gQExJUE9ACitMTl9TID0gQExOX1NACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACitNQ1MgPSBATUNTQAorTURBU1NFTUJMRVIgPSBATURBU1NFTUJMRVJACitNS0RJUl9QID0gQE1LRElSX1BACitNS0lOU1RBTExESVJTID0gQE1LSU5TVEFMTERJUlNACitNT0NfUVQzID0gQE1PQ19RVDNACitNT0NfUVQ0ID0gQE1PQ19RVDRACitNT05PRE9DRVIgPSBATU9OT0RPQ0VSQAorTU9OT0RPQ19DRkxBR1MgPSBATU9OT0RPQ19DRkxBR1NACitNT05PRE9DX0RJUiA9IEBNT05PRE9DX0RJUkAKK01PTk9ET0NfTElCUyA9IEBNT05PRE9DX0xJQlNACitNU0dGTVQgPSBATVNHRk1UQAorTVNHRk1UX09QVFMgPSBATVNHRk1UX09QVFNACitNU0dNRVJHRSA9IEBNU0dNRVJHRUAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPVE9PTCA9IEBPVE9PTEAKK09UT09MNjQgPSBAT1RPT0w2NEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAorUEtHX0NPTkZJR19MSUJESVIgPSBAUEtHX0NPTkZJR19MSUJESVJACitQS0dfQ09ORklHX1BBVEggPSBAUEtHX0NPTkZJR19QQVRIQAorUE9GSUxFUyA9IEBQT0ZJTEVTQAorUE9TVUIgPSBAUE9TVUJACitQT19JTl9EQVRBRElSX0ZBTFNFID0gQFBPX0lOX0RBVEFESVJfRkFMU0VACitQT19JTl9EQVRBRElSX1RSVUUgPSBAUE9fSU5fREFUQURJUl9UUlVFQAorUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAorUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACitQVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAorUFlUSE9OID0gQFBZVEhPTkAKK1BZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACitQWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAorUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAorUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACitRVDNfQ0ZMQUdTID0gQFFUM19DRkxBR1NACitRVDNfTElCUyA9IEBRVDNfTElCU0AKK1FUNF9DRkxBR1MgPSBAUVQ0X0NGTEFHU0AKK1FUNF9MSUJTID0gQFFUNF9MSUJTQAorUkFOTElCID0gQFJBTkxJQkAKK1NFRCA9IEBTRURACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU1RPVyA9IEBTVE9XQAorU1RSSVAgPSBAU1RSSVBACitVU0VfTkxTID0gQFVTRV9OTFNACitWRVJTSU9OID0gQFZFUlNJT05ACitWSVNJQklMSVRZX0hJRERFTl9DRkxBR1MgPSBAVklTSUJJTElUWV9ISURERU5fQ0ZMQUdTQAorWEdFVFRFWFQgPSBAWEdFVFRFWFRACitYTUxfQ0ZMQUdTID0gQFhNTF9DRkxBR1NACitYTUxfTElCUyA9IEBYTUxfTElCU0AKK2Fic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACithYnNfc3JjZGlyID0gQGFic19zcmNkaXJACithYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACithYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKK2FjX2N0X0FSID0gQGFjX2N0X0FSQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9DWFggPSBAYWNfY3RfQ1hYQAorYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAorYWN4X3B0aHJlYWRfY29uZmlnID0gQGFjeF9wdGhyZWFkX2NvbmZpZ0AKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYXZhaGlfcnVudGltZV9kaXIgPSBAYXZhaGlfcnVudGltZV9kaXJACithdmFoaV9zb2NrZXQgPSBAYXZhaGlfc29ja2V0QAorYXZhaGlsb2NhbGVkaXIgPSBAYXZhaGlsb2NhbGVkaXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitidWlsZGRpciA9IEBidWlsZGRpckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZG9jZGlyID0gQGRvY2RpckAKK2R2aWRpciA9IEBkdmlkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2hhdmVfcGtnX2NvbmZpZyA9IEBoYXZlX3BrZ19jb25maWdACitoYXZlX3htbHRvbWFuID0gQGhhdmVfeG1sdG9tYW5ACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAoraW50ZXJmYWNlc2RpciA9IEBpbnRlcmZhY2VzZGlyQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3BrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACitwa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3BzZGlyID0gQHBzZGlyQAorcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKK3B5dGhvbmRpciA9IEBweXRob25kaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACitzeXN0ZW1kc3lzdGVtdW5pdGRpciA9IEBzeXN0ZW1kc3lzdGVtdW5pdGRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAoraW5pdGRkaXIgPSAkKHN5c2NvbmZkaXIpL3JjLmQKK0VYVFJBX0RJU1QgPSBcCisJYXZhaGktZGFlbW9uLmluIFwKKwlhdmFoaS1kbnNjb25mZC5pbgorCitpbml0ZF9TQ1JJUFRTID0gXAorCWF2YWhpLWRhZW1vbiBcCisJYXZhaGktZG5zY29uZmQKKworQ0xFQU5GSUxFUyA9IFwKKwlhdmFoaS1kYWVtb24gXAorCWF2YWhpLWRuc2NvbmZkCisKK2FsbDogYWxsLWFtCisKKy5TVUZGSVhFUzoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCisJICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduIGluaXRzY3JpcHQvYXJjaGxpbnV4L01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiBpbml0c2NyaXB0L2FyY2hsaW51eC9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CitpbnN0YWxsLWluaXRkU0NSSVBUUzogJChpbml0ZF9TQ1JJUFRTKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQoaW5pdGRkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChpbml0ZGRpcikiCisJQGxpc3Q9JyQoaW5pdGRfU0NSSVBUUyknOyB0ZXN0IC1uICIkKGluaXRkZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICBpZiB0ZXN0IC1mICIkJGQkJHAiOyB0aGVuIGVjaG8gIiQkZCQkcCI7IGVjaG8gIiQkcCI7IGVsc2UgOjsgZmk7IFwKKwlkb25lIHwgXAorCXNlZCAtZSAncDtzLC4qLywsO24nIFwKKwkgICAgLWUgJ2g7c3wuKnwufCcgXAorCSAgICAtZSAncDt4O3MsLiovLCw7JCh0cmFuc2Zvcm0pJyB8IHNlZCAnTjtOO047cyxcbiwgLGcnIHwgXAorCSQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiI7IGRpcnNbIi4iXSA9IDE7IH0gXAorCSAgeyBkPSQkMzsgaWYgKGRpcnNbZF0gIT0gMSkgeyBwcmludCAiZCIsIGQ7IGRpcnNbZF0gPSAxIH0gXAorCSAgICBpZiAoJCQyID09ICQkNCkgeyBmaWxlc1tkXSA9IGZpbGVzW2RdICIgIiAkJDE7IFwKKwkgICAgICBpZiAoKytuW2RdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgeyBcCisJCXByaW50ICJmIiwgZCwgZmlsZXNbZF07IG5bZF0gPSAwOyBmaWxlc1tkXSA9ICIiIH0gfSBcCisJICAgIGVsc2UgeyBwcmludCAiZiIsIGQgIi8iICQkNCwgJCQxIH0gfSBcCisJICBFTkQgeyBmb3IgKGQgaW4gZmlsZXMpIHByaW50ICJmIiwgZCwgZmlsZXNbZF0gfScgfCBcCisJd2hpbGUgcmVhZCB0eXBlIGRpciBmaWxlczsgZG8gXAorCSAgICAgaWYgdGVzdCAiJCRkaXIiID0gLjsgdGhlbiBkaXI9OyBlbHNlIGRpcj0vJCRkaXI7IGZpOyBcCisJICAgICB0ZXN0IC16ICIkJGZpbGVzIiB8fCB7IFwKKwkgICAgICAgZWNobyAiICQoSU5TVEFMTF9TQ1JJUFQpICQkZmlsZXMgJyQoREVTVERJUikkKGluaXRkZGlyKSQkZGlyJyI7IFwKKwkgICAgICAgJChJTlNUQUxMX1NDUklQVCkgJCRmaWxlcyAiJChERVNURElSKSQoaW5pdGRkaXIpJCRkaXIiIHx8IGV4aXQgJCQ/OyBcCisJICAgICB9IFwKKwk7IGRvbmUKKwordW5pbnN0YWxsLWluaXRkU0NSSVBUUzoKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKGluaXRkX1NDUklQVFMpJzsgdGVzdCAtbiAiJChpbml0ZGRpcikiIHx8IGV4aXQgMDsgXAorCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBcCisJICAgICAgIHNlZCAtZSAncywuKi8sLDskKHRyYW5zZm9ybSknYDsgXAorCWRpcj0nJChERVNURElSKSQoaW5pdGRkaXIpJzsgJChhbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyKQorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicwordGFnczogVEFHUworVEFHUzoKKworY3RhZ3M6IENUQUdTCitDVEFHUzoKKworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1hbQorYWxsLWFtOiBNYWtlZmlsZSAkKFNDUklQVFMpCitpbnN0YWxsZGlyczoKKwlmb3IgZGlyIGluICIkKERFU1RESVIpJChpbml0ZGRpcikiOyBkbyBcCisJICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCisJZG9uZQoraW5zdGFsbDogaW5zdGFsbC1hbQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCit1bmluc3RhbGw6IHVuaW5zdGFsbC1hbQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQoraW5zdGFsbC1zdHJpcDoKKwlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICAgICAgaW5zdGFsbDsgXAorCWVsc2UgXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCisJZmkKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ0xFQU5GSUxFUykiIHx8IHJtIC1mICQoQ0xFQU5GSUxFUykKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWdlbmVyaWMKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLWluaXRkU0NSSVBUUworCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1kdmktYW06CisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLWFtCisKK3BkZi1hbToKKworcHM6IHBzLWFtCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06IHVuaW5zdGFsbC1pbml0ZFNDUklQVFMKKworLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAorCisuUEhPTlk6IGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIFwKKwlkaXN0Y2xlYW4gZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGRpciBkdmkgXAorCWR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBcCisJaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBcCisJaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIFwKKwlpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtaW5pdGRTQ1JJUFRTIGluc3RhbGwtbWFuIFwKKwlpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAorCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCisJbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAorCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKKwl1bmluc3RhbGwgdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1pbml0ZFNDUklQVFMKKworCithdmFoaS1kYWVtb246IGF2YWhpLWRhZW1vbi5pbgorCXNlZCAtZSAncyxAc2JpbmRpclxALCQoc2JpbmRpciksZycgJDwgPiAkQAorCWNobW9kICt4ICRACisKK2F2YWhpLWRuc2NvbmZkOiBhdmFoaS1kbnNjb25mZC5pbgorCXNlZCAtZSAncyxAc2JpbmRpclxALCQoc2JpbmRpciksZycgJDwgPiAkQAorCWNobW9kICt4ICRACisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9pbml0c2NyaXB0L2FyY2hsaW51eC9hdmFoaS1kYWVtb24uaW4gYi9hdmFoaS0wLjYuMzEvaW5pdHNjcmlwdC9hcmNobGludXgvYXZhaGktZGFlbW9uLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhZTI1MmQKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvaW5pdHNjcmlwdC9hcmNobGludXgvYXZhaGktZGFlbW9uLmluCkBAIC0wLDAgKzEsNzIgQEAKKyMhL2Jpbi9iYXNoCisKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisjCisjIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisjIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisjIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisjIFVTQS4KKworIworIyBBdXRob3JzOiAgICAgIDxsYXRoaWF0QGJ1ci5zdD4KKyMKKworCisjIGdlbmVyYWwgY29uZmlnCisuIC9ldGMvcmMuY29uZgorLiAvZXRjL3JjLmQvZnVuY3Rpb25zCisKK1BBVEg9L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4KK0RFU0M9IkF2YWhpIG1ETlMvRE5TLVNEIERhZW1vbiIKK05BTUU9ImF2YWhpLWRhZW1vbiIKK0RBRU1PTj0iQHNiaW5kaXJALyROQU1FIgorCitjYXNlICIkMSIgaW4KKyAgICBzdGFydCkKKyAgICAgICAgc3RhdF9idXN5ICJTdGFydGluZyAkREVTQyIKKyAgICAgICAgJERBRU1PTiAtRCA+IC9kZXYvbnVsbCAyPiYxCisgICAgICAgIGlmIFsgJD8gLWd0IDAgXTsgdGhlbgorICAgICAgICAgICAgc3RhdF9mYWlsCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFkZF9kYWVtb24gJE5BTUUKKyAgICAgICAgICAgIHN0YXRfZG9uZQorICAgICAgICBmaQorICAgICAgICA7OworICAgIHN0b3ApCisgICAgICAgIHN0YXRfYnVzeSAiU3RvcHBpbmcgJERFU0MiCisgICAgICAgICREQUVNT04gLWsgPiAvZGV2L251bGwgMj4mMQorICAgICAgICBpZiBbICQ/IC1ndCAwIF07IHRoZW4KKyAgICAgICAgICAgIHN0YXRfZmFpbAorICAgICAgICBlbHNlCisgICAgICAgICAgICBybV9kYWVtb24gJE5BTUUKKyAgICAgICAgICAgIHN0YXRfZG9uZQorICAgICAgICBmaQorICAgICAgICA7OworICAgIHJlc3RhcnQpCisgICAgICAgICQwIHN0b3AKKyAgICAgICAgJDAgc3RhcnQKKyAgICAgICAgOzsKKyAgICByZWxvYWQpCisgICAgICAgIHN0YXRfYnVzeSAiUmVsb2FkaW5nIHNlcnZpY2VzIGZvciAkREVTQyIKKyAgICAgICAgJERBRU1PTiAtciA+IC9kZXYvbnVsbCAyPiYxCisgICAgICAgIGlmIFsgJD8gLWd0IDAgXTsgdGhlbgorICAgICAgICAgICAgc3RhdF9mYWlsCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN0YXRfZG9uZQorICAgICAgICBmaQorICAgICAgICA7OworICAgICopCisgICAgICAgIGVjaG8gInVzYWdlOiAkMCB7c3RhcnR8c3RvcHxyZXN0YXJ0fHJlbG9hZH0iCisJOzsKK2VzYWMKK2V4aXQgMApkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2luaXRzY3JpcHQvYXJjaGxpbnV4L2F2YWhpLWRuc2NvbmZkLmluIGIvYXZhaGktMC42LjMxL2luaXRzY3JpcHQvYXJjaGxpbnV4L2F2YWhpLWRuc2NvbmZkLmluCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM1NzI2MGUKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvaW5pdHNjcmlwdC9hcmNobGludXgvYXZhaGktZG5zY29uZmQuaW4KQEAgLTAsMCArMSw3MiBAQAorIyEvYmluL2Jhc2gKKworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKyMKKyMgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyMgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyMgVVNBLgorCisjCisjIEF1dGhvcnM6ICAgICAgPGxhdGhpYXRAYnVyLnN0PgorIworCisKKyMgZ2VuZXJhbCBjb25maWcKKy4gL2V0Yy9yYy5jb25mCisuIC9ldGMvcmMuZC9mdW5jdGlvbnMKKworUEFUSD0vc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbgorREVTQz0iQXZhaGkgbUROUy9ETlMtU0QgRE5TIFNlcnZlciBDb25maWd1cmF0aW9uIERhZW1vbiIKK05BTUU9ImF2YWhpLWRuc2NvbmZkIgorREFFTU9OPSJAc2JpbmRpckAvJE5BTUUiCisKK2Nhc2UgIiQxIiBpbgorICAgIHN0YXJ0KQorICAgICAgICBzdGF0X2J1c3kgIlN0YXJ0aW5nICRERVNDIgorICAgICAgICAkREFFTU9OIC1EID4gL2Rldi9udWxsIDI+JjEKKyAgICAgICAgaWYgWyAkPyAtZ3QgMCBdOyB0aGVuCisgICAgICAgICAgICBzdGF0X2ZhaWwKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYWRkX2RhZW1vbiAkTkFNRQorICAgICAgICAgICAgc3RhdF9kb25lCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgc3RvcCkKKyAgICAgICAgc3RhdF9idXN5ICJTdG9wcGluZyAkREVTQyIKKyAgICAgICAgJERBRU1PTiAtayA+IC9kZXYvbnVsbCAyPiYxCisgICAgICAgIGlmIFsgJD8gLWd0IDAgXTsgdGhlbgorICAgICAgICAgICAgc3RhdF9mYWlsCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJtX2RhZW1vbiAkTkFNRQorICAgICAgICAgICAgc3RhdF9kb25lCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgcmVzdGFydCkKKyAgICAgICAgJDAgc3RvcAorICAgICAgICAkMCBzdGFydAorICAgICAgICA7OworICAgIHJlbG9hZCkKKyAgICAgICAgc3RhdF9idXN5ICJSZWxvYWRpbmcgc2VydmljZXMgZm9yICRERVNDIgorICAgICAgICAkREFFTU9OIC1yID4gL2Rldi9udWxsIDI+JjEKKyAgICAgICAgaWYgWyAkPyAtZ3QgMCBdOyB0aGVuCisgICAgICAgICAgICBzdGF0X2ZhaWwKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3RhdF9kb25lCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgKikKKyAgICAgICAgZWNobyAidXNhZ2U6ICQwIHtzdGFydHxzdG9wfHJlc3RhcnR8cmVsb2FkfSIKKwk7OworZXNhYworZXhpdCAwCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvaW5pdHNjcmlwdC9kYXJ3aW4vTWFrZWZpbGUuYW0gYi9hdmFoaS0wLjYuMzEvaW5pdHNjcmlwdC9kYXJ3aW4vTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAxZTVhNAotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9pbml0c2NyaXB0L2Rhcndpbi9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDM2IEBACisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorIworIyBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworIyBVU0EuCisKK2luaXRkZGlyID0gL0xpYnJhcnkvTGF1bmNoRGFlbW9ucy8KKworRVhUUkFfRElTVCA9IFwKKwlvcmcuZnJlZWRlc2t0b3AuYXZhaGktZGFlbW9uLnBsaXN0LmluIFwKKwlvcmcuZnJlZWRlc2t0b3AuYXZhaGktZG5zY29uZmQucGxpc3QuaW4KKworaW5pdGRfU0NSSVBUUyA9IFwKKwlvcmcuZnJlZWRlc2t0b3AuYXZhaGktZGFlbW9uLnBsaXN0IFwKKwlvcmcuZnJlZWRlc2t0b3AuYXZhaGktZG5zY29uZmQucGxpc3QKKworQ0xFQU5GSUxFUyA9IFwKKwlvcmcuZnJlZWRlc2t0b3AuYXZhaGktZGFlbW9uLnBsaXN0IFwKKwlvcmcuZnJlZWRlc2t0b3AuYXZhaGktZG5zY29uZmQucGxpc3QKKworb3JnLmZyZWVkZXNrdG9wLmF2YWhpLWRhZW1vbi5wbGlzdDogb3JnLmZyZWVkZXNrdG9wLmF2YWhpLWRhZW1vbi5wbGlzdC5pbgorCXNlZCAtZSAncyxAc2JpbmRpclxALCQoc2JpbmRpciksZycgJDwgPiAkQAorCitvcmcuZnJlZWRlc2t0b3AuYXZhaGktZG5zY29uZmQucGxpc3Q6IG9yZy5mcmVlZGVza3RvcC5hdmFoaS1kbnNjb25mZC5wbGlzdC5pbgorCXNlZCAtZSAncyxAc2JpbmRpclxALCQoc2JpbmRpciksZycgJDwgPiAkQApkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2luaXRzY3JpcHQvZGFyd2luL01ha2VmaWxlLmluIGIvYXZhaGktMC42LjMxL2luaXRzY3JpcHQvZGFyd2luL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3NTM4NDIKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvaW5pdHNjcmlwdC9kYXJ3aW4vTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw2MDYgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEuMyBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKyMKKyMgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyMgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyMgVVNBLgorCitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitzdWJkaXIgPSBpbml0c2NyaXB0L2RhcndpbgorRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vYWN4X3B0aHJlYWQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2djY19zdGFja19wcm90ZWN0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9nY2NfdmlzaWJpbGl0eS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vaW50bHRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2ludHJvc3BlY3Rpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2x0b3B0aW9ucy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHR2ZXJzaW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbmxzLm00ICQodG9wX3NyY2RpcikvY29tbW9uL3B5dGhvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9hY2luY2x1ZGUubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vZG94eWdlbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7CithbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAorICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCisgICAgKikgZj0kJHA7OyBcCisgIGVzYWM7CithbV9fc3RyaXBfZGlyID0gZj1gZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7CithbV9faW5zdGFsbF9tYXggPSA0MAorYW1fX25vYmFzZV9zdHJpcF9zZXR1cCA9IFwKKyAgc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYAorYW1fX25vYmFzZV9zdHJpcCA9IFwKKyAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkIC1lICJzfCQkc3JjZGlyc3RyaXAvfHwiCithbV9fbm9iYXNlX2xpc3QgPSAkKGFtX19ub2Jhc2Vfc3RyaXBfc2V0dXApOyBcCisgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCisgIHNlZCAic3wgJCRzcmNkaXJzdHJpcC98IHw7IicgLyAuKlwvLyFzLyAuKi8gLi87IHMsXCggLipcKS9bXi9dKiQkLFwxLCcgfCBcCisgICQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiIgfSB7IGZpbGVzWyQkMl0gPSBmaWxlc1skJDJdICIgIiAkJDE7IFwKKyAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCisgICAgICB7IHByaW50ICQkMiwgZmlsZXNbJCQyXTsgblskJDJdID0gMDsgZmlsZXNbJCQyXSA9ICIiIH0gfSBcCisgICAgRU5EIHsgZm9yIChkaXIgaW4gZmlsZXMpIHByaW50IGRpciwgZmlsZXNbZGlyXSB9JworYW1fX2Jhc2VfbGlzdCA9IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJyB8IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJworYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpciA9IHsgXAorICB0ZXN0IC16ICIkJGZpbGVzIiBcCisgICAgfHwgeyB0ZXN0ICEgLWQgIiQkZGlyIiAmJiB0ZXN0ICEgLWYgIiQkZGlyIiAmJiB0ZXN0ICEgLXIgIiQkZGlyIjsgfSBcCisgICAgfHwgeyBlY2hvICIgKCBjZCAnJCRkaXInICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAorICAgICAgICAgJChhbV9fY2QpICIkJGRpciIgJiYgcm0gLWYgJCRmaWxlczsgfTsgXAorICB9CithbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQoaW5pdGRkaXIpIgorU0NSSVBUUyA9ICQoaW5pdGRfU0NSSVBUUykKK0FNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQorYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAiICRAOworQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQorYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKK2FtX192X2F0XzAgPSBACitTT1VSQ0VTID0KK0RJU1RfU09VUkNFUyA9CitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQUxMX0xJTkdVQVMgPSBAQUxMX0xJTkdVQVNACitBTVRBUiA9IEBBTVRBUkAKK0FNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAorQVIgPSBAQVJACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVZBSElfQVVUT0lQRF9HUk9VUCA9IEBBVkFISV9BVVRPSVBEX0dST1VQQAorQVZBSElfQVVUT0lQRF9VU0VSID0gQEFWQUhJX0FVVE9JUERfVVNFUkAKK0FWQUhJX0dST1VQID0gQEFWQUhJX0dST1VQQAorQVZBSElfUFJJVl9BQ0NFU1NfR1JPVVAgPSBAQVZBSElfUFJJVl9BQ0NFU1NfR1JPVVBACitBVkFISV9VU0VSID0gQEFWQUhJX1VTRVJACitBV0sgPSBAQVdLQAorQ0FUQUxPR1MgPSBAQ0FUQUxPR1NACitDQVRPQkpFWFQgPSBAQ0FUT0JKRVhUQAorQ0MgPSBAQ0NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREFUQURJUk5BTUUgPSBAREFUQURJUk5BTUVACitEQlVTX0NGTEFHUyA9IEBEQlVTX0NGTEFHU0AKK0RCVVNfTElCUyA9IEBEQlVTX0xJQlNACitEQlVTX1NZU1RFTV9CVVNfREVGQVVMVF9BRERSRVNTID0gQERCVVNfU1lTVEVNX0JVU19ERUZBVUxUX0FERFJFU1NACitEQlVTX1NZU19ESVIgPSBAREJVU19TWVNfRElSQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RMTFRPT0wgPSBARExMVE9PTEAKK0RPWFlHRU5fUEFQRVJfU0laRSA9IEBET1hZR0VOX1BBUEVSX1NJWkVACitEU1lNVVRJTCA9IEBEU1lNVVRJTEAKK0RVTVBCSU4gPSBARFVNUEJJTkAKK0RYX0NPTkZJRyA9IEBEWF9DT05GSUdACitEWF9ET0NESVIgPSBARFhfRE9DRElSQAorRFhfRE9UID0gQERYX0RPVEAKK0RYX0RPWFlHRU4gPSBARFhfRE9YWUdFTkAKK0RYX0RWSVBTID0gQERYX0RWSVBTQAorRFhfRUdSRVAgPSBARFhfRUdSRVBACitEWF9FTlYgPSBARFhfRU5WQAorRFhfRkxBR19jaGkgPSBARFhfRkxBR19jaGlACitEWF9GTEFHX2NobSA9IEBEWF9GTEFHX2NobUAKK0RYX0ZMQUdfZG9jID0gQERYX0ZMQUdfZG9jQAorRFhfRkxBR19kb3QgPSBARFhfRkxBR19kb3RACitEWF9GTEFHX2h0bWwgPSBARFhfRkxBR19odG1sQAorRFhfRkxBR19tYW4gPSBARFhfRkxBR19tYW5ACitEWF9GTEFHX3BkZiA9IEBEWF9GTEFHX3BkZkAKK0RYX0ZMQUdfcHMgPSBARFhfRkxBR19wc0AKK0RYX0ZMQUdfcnRmID0gQERYX0ZMQUdfcnRmQAorRFhfRkxBR194bWwgPSBARFhfRkxBR194bWxACitEWF9ISEMgPSBARFhfSEhDQAorRFhfTEFURVggPSBARFhfTEFURVhACitEWF9NQUtFSU5ERVggPSBARFhfTUFLRUlOREVYQAorRFhfUERGTEFURVggPSBARFhfUERGTEFURVhACitEWF9QRVJMID0gQERYX1BFUkxACitEWF9QUk9KRUNUID0gQERYX1BST0pFQ1RACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VYRUVYVCA9IEBFWEVFWFRACitGR1JFUCA9IEBGR1JFUEAKK0dBQ1VUSUwgPSBAR0FDVVRJTEAKK0dFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACitHTElCMjBfQ0ZMQUdTID0gQEdMSUIyMF9DRkxBR1NACitHTElCMjBfTElCUyA9IEBHTElCMjBfTElCU0AKK0dNT0ZJTEVTID0gQEdNT0ZJTEVTQAorR01TR0ZNVCA9IEBHTVNHRk1UQAorR09CSkVDVF9DRkxBR1MgPSBAR09CSkVDVF9DRkxBR1NACitHT0JKRUNUX0xJQlMgPSBAR09CSkVDVF9MSUJTQAorR1JFUCA9IEBHUkVQQAorR1RLMjBfQ0ZMQUdTID0gQEdUSzIwX0NGTEFHU0AKK0dUSzIwX0xJQlMgPSBAR1RLMjBfTElCU0AKK0dUSzMwX0NGTEFHUyA9IEBHVEszMF9DRkxBR1NACitHVEszMF9MSUJTID0gQEdUSzMwX0xJQlNACitIT1dMX0NPTVBBVF9WRVJTSU9OID0gQEhPV0xfQ09NUEFUX1ZFUlNJT05ACitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lOU1RPQkpFWFQgPSBASU5TVE9CSkVYVEAKK0lOVExMSUJTID0gQElOVExMSUJTQAorSU5UTFRPT0xfRVhUUkFDVCA9IEBJTlRMVE9PTF9FWFRSQUNUQAorSU5UTFRPT0xfTUVSR0UgPSBASU5UTFRPT0xfTUVSR0VACitJTlRMVE9PTF9QRVJMID0gQElOVExUT09MX1BFUkxACitJTlRMVE9PTF9VUERBVEUgPSBASU5UTFRPT0xfVVBEQVRFQAorSU5UUk9TUEVDVElPTl9DRkxBR1MgPSBASU5UUk9TUEVDVElPTl9DRkxBR1NACitJTlRST1NQRUNUSU9OX0NPTVBJTEVSID0gQElOVFJPU1BFQ1RJT05fQ09NUElMRVJACitJTlRST1NQRUNUSU9OX0dFTkVSQVRFID0gQElOVFJPU1BFQ1RJT05fR0VORVJBVEVACitJTlRST1NQRUNUSU9OX0dJUkRJUiA9IEBJTlRST1NQRUNUSU9OX0dJUkRJUkAKK0lOVFJPU1BFQ1RJT05fTElCUyA9IEBJTlRST1NQRUNUSU9OX0xJQlNACitJTlRST1NQRUNUSU9OX01BS0VGSUxFID0gQElOVFJPU1BFQ1RJT05fTUFLRUZJTEVACitJTlRST1NQRUNUSU9OX1NDQU5ORVIgPSBASU5UUk9TUEVDVElPTl9TQ0FOTkVSQAorSU5UUk9TUEVDVElPTl9UWVBFTElCRElSID0gQElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUkAKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCQVZBSElfQ0xJRU5UX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DTElFTlRfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfQ09NTU9OX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DT01NT05fVkVSU0lPTl9JTkZPQAorTElCQVZBSElfQ09NUEFUX0hPV0xfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NPTVBBVF9IT1dMX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPTVBBVF9MSUJETlNfU0RfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NPTVBBVF9MSUJETlNfU0RfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfQ09SRV9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ09SRV9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9HTElCX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9HTElCX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0dPQkpFQ1RfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0dPQkpFQ1RfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfUVQzX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9RVDNfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfUVQ0X1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9RVDRfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfVUlfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX1VJX1ZFUlNJT05fSU5GT0AKK0xJQkRBRU1PTl9DRkxBR1MgPSBATElCREFFTU9OX0NGTEFHU0AKK0xJQkRBRU1PTl9MSUJTID0gQExJQkRBRU1PTl9MSUJTQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAorTUNTID0gQE1DU0AKK01EQVNTRU1CTEVSID0gQE1EQVNTRU1CTEVSQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTUtJTlNUQUxMRElSUyA9IEBNS0lOU1RBTExESVJTQAorTU9DX1FUMyA9IEBNT0NfUVQzQAorTU9DX1FUNCA9IEBNT0NfUVQ0QAorTU9OT0RPQ0VSID0gQE1PTk9ET0NFUkAKK01PTk9ET0NfQ0ZMQUdTID0gQE1PTk9ET0NfQ0ZMQUdTQAorTU9OT0RPQ19ESVIgPSBATU9OT0RPQ19ESVJACitNT05PRE9DX0xJQlMgPSBATU9OT0RPQ19MSUJTQAorTVNHRk1UID0gQE1TR0ZNVEAKK01TR0ZNVF9PUFRTID0gQE1TR0ZNVF9PUFRTQAorTVNHTUVSR0UgPSBATVNHTUVSR0VACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitPQkpEVU1QID0gQE9CSkRVTVBACitPQkpFWFQgPSBAT0JKRVhUQAorT1RPT0wgPSBAT1RPT0xACitPVE9PTDY0ID0gQE9UT09MNjRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK1BLR19DT05GSUdfTElCRElSID0gQFBLR19DT05GSUdfTElCRElSQAorUEtHX0NPTkZJR19QQVRIID0gQFBLR19DT05GSUdfUEFUSEAKK1BPRklMRVMgPSBAUE9GSUxFU0AKK1BPU1VCID0gQFBPU1VCQAorUE9fSU5fREFUQURJUl9GQUxTRSA9IEBQT19JTl9EQVRBRElSX0ZBTFNFQAorUE9fSU5fREFUQURJUl9UUlVFID0gQFBPX0lOX0RBVEFESVJfVFJVRUAKK1BUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKK1BUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAorUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKK1BZVEhPTiA9IEBQWVRIT05ACitQWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAorUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKK1BZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKK1BZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAorUVQzX0NGTEFHUyA9IEBRVDNfQ0ZMQUdTQAorUVQzX0xJQlMgPSBAUVQzX0xJQlNACitRVDRfQ0ZMQUdTID0gQFFUNF9DRkxBR1NACitRVDRfTElCUyA9IEBRVDRfTElCU0AKK1JBTkxJQiA9IEBSQU5MSUJACitTRUQgPSBAU0VEQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NUT1cgPSBAU1RPV0AKK1NUUklQID0gQFNUUklQQAorVVNFX05MUyA9IEBVU0VfTkxTQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorVklTSUJJTElUWV9ISURERU5fQ0ZMQUdTID0gQFZJU0lCSUxJVFlfSElEREVOX0NGTEFHU0AKK1hHRVRURVhUID0gQFhHRVRURVhUQAorWE1MX0NGTEFHUyA9IEBYTUxfQ0ZMQUdTQAorWE1MX0xJQlMgPSBAWE1MX0xJQlNACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9BUiA9IEBhY19jdF9BUkAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKK2FjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK2FjeF9wdGhyZWFkX2NvbmZpZyA9IEBhY3hfcHRocmVhZF9jb25maWdACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2F2YWhpX3J1bnRpbWVfZGlyID0gQGF2YWhpX3J1bnRpbWVfZGlyQAorYXZhaGlfc29ja2V0ID0gQGF2YWhpX3NvY2tldEAKK2F2YWhpbG9jYWxlZGlyID0gQGF2YWhpbG9jYWxlZGlyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitoYXZlX3BrZ19jb25maWcgPSBAaGF2ZV9wa2dfY29uZmlnQAoraGF2ZV94bWx0b21hbiA9IEBoYXZlX3htbHRvbWFuQAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2ludGVyZmFjZXNkaXIgPSBAaW50ZXJmYWNlc2RpckAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAorcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3B5ZXhlY2RpciA9IEBweWV4ZWNkaXJACitweXRob25kaXIgPSBAcHl0aG9uZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzcmNkaXIgPSBAc3JjZGlyQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAorc3lzdGVtZHN5c3RlbXVuaXRkaXIgPSBAc3lzdGVtZHN5c3RlbXVuaXRkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK2luaXRkZGlyID0gL0xpYnJhcnkvTGF1bmNoRGFlbW9ucy8KK0VYVFJBX0RJU1QgPSBcCisJb3JnLmZyZWVkZXNrdG9wLmF2YWhpLWRhZW1vbi5wbGlzdC5pbiBcCisJb3JnLmZyZWVkZXNrdG9wLmF2YWhpLWRuc2NvbmZkLnBsaXN0LmluCisKK2luaXRkX1NDUklQVFMgPSBcCisJb3JnLmZyZWVkZXNrdG9wLmF2YWhpLWRhZW1vbi5wbGlzdCBcCisJb3JnLmZyZWVkZXNrdG9wLmF2YWhpLWRuc2NvbmZkLnBsaXN0CisKK0NMRUFORklMRVMgPSBcCisJb3JnLmZyZWVkZXNrdG9wLmF2YWhpLWRhZW1vbi5wbGlzdCBcCisJb3JnLmZyZWVkZXNrdG9wLmF2YWhpLWRuc2NvbmZkLnBsaXN0CisKK2FsbDogYWxsLWFtCisKKy5TVUZGSVhFUzoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCisJICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduIGluaXRzY3JpcHQvZGFyd2luL01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiBpbml0c2NyaXB0L2Rhcndpbi9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CitpbnN0YWxsLWluaXRkU0NSSVBUUzogJChpbml0ZF9TQ1JJUFRTKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQoaW5pdGRkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChpbml0ZGRpcikiCisJQGxpc3Q9JyQoaW5pdGRfU0NSSVBUUyknOyB0ZXN0IC1uICIkKGluaXRkZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICBpZiB0ZXN0IC1mICIkJGQkJHAiOyB0aGVuIGVjaG8gIiQkZCQkcCI7IGVjaG8gIiQkcCI7IGVsc2UgOjsgZmk7IFwKKwlkb25lIHwgXAorCXNlZCAtZSAncDtzLC4qLywsO24nIFwKKwkgICAgLWUgJ2g7c3wuKnwufCcgXAorCSAgICAtZSAncDt4O3MsLiovLCw7JCh0cmFuc2Zvcm0pJyB8IHNlZCAnTjtOO047cyxcbiwgLGcnIHwgXAorCSQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiI7IGRpcnNbIi4iXSA9IDE7IH0gXAorCSAgeyBkPSQkMzsgaWYgKGRpcnNbZF0gIT0gMSkgeyBwcmludCAiZCIsIGQ7IGRpcnNbZF0gPSAxIH0gXAorCSAgICBpZiAoJCQyID09ICQkNCkgeyBmaWxlc1tkXSA9IGZpbGVzW2RdICIgIiAkJDE7IFwKKwkgICAgICBpZiAoKytuW2RdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgeyBcCisJCXByaW50ICJmIiwgZCwgZmlsZXNbZF07IG5bZF0gPSAwOyBmaWxlc1tkXSA9ICIiIH0gfSBcCisJICAgIGVsc2UgeyBwcmludCAiZiIsIGQgIi8iICQkNCwgJCQxIH0gfSBcCisJICBFTkQgeyBmb3IgKGQgaW4gZmlsZXMpIHByaW50ICJmIiwgZCwgZmlsZXNbZF0gfScgfCBcCisJd2hpbGUgcmVhZCB0eXBlIGRpciBmaWxlczsgZG8gXAorCSAgICAgaWYgdGVzdCAiJCRkaXIiID0gLjsgdGhlbiBkaXI9OyBlbHNlIGRpcj0vJCRkaXI7IGZpOyBcCisJICAgICB0ZXN0IC16ICIkJGZpbGVzIiB8fCB7IFwKKwkgICAgICAgZWNobyAiICQoSU5TVEFMTF9TQ1JJUFQpICQkZmlsZXMgJyQoREVTVERJUikkKGluaXRkZGlyKSQkZGlyJyI7IFwKKwkgICAgICAgJChJTlNUQUxMX1NDUklQVCkgJCRmaWxlcyAiJChERVNURElSKSQoaW5pdGRkaXIpJCRkaXIiIHx8IGV4aXQgJCQ/OyBcCisJICAgICB9IFwKKwk7IGRvbmUKKwordW5pbnN0YWxsLWluaXRkU0NSSVBUUzoKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKGluaXRkX1NDUklQVFMpJzsgdGVzdCAtbiAiJChpbml0ZGRpcikiIHx8IGV4aXQgMDsgXAorCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBcCisJICAgICAgIHNlZCAtZSAncywuKi8sLDskKHRyYW5zZm9ybSknYDsgXAorCWRpcj0nJChERVNURElSKSQoaW5pdGRkaXIpJzsgJChhbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyKQorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicwordGFnczogVEFHUworVEFHUzoKKworY3RhZ3M6IENUQUdTCitDVEFHUzoKKworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1hbQorYWxsLWFtOiBNYWtlZmlsZSAkKFNDUklQVFMpCitpbnN0YWxsZGlyczoKKwlmb3IgZGlyIGluICIkKERFU1RESVIpJChpbml0ZGRpcikiOyBkbyBcCisJICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCisJZG9uZQoraW5zdGFsbDogaW5zdGFsbC1hbQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCit1bmluc3RhbGw6IHVuaW5zdGFsbC1hbQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQoraW5zdGFsbC1zdHJpcDoKKwlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICAgICAgaW5zdGFsbDsgXAorCWVsc2UgXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCisJZmkKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ0xFQU5GSUxFUykiIHx8IHJtIC1mICQoQ0xFQU5GSUxFUykKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWdlbmVyaWMKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLWluaXRkU0NSSVBUUworCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1kdmktYW06CisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLWFtCisKK3BkZi1hbToKKworcHM6IHBzLWFtCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06IHVuaW5zdGFsbC1pbml0ZFNDUklQVFMKKworLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAorCisuUEhPTlk6IGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIFwKKwlkaXN0Y2xlYW4gZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGRpciBkdmkgXAorCWR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBcCisJaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBcCisJaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIFwKKwlpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtaW5pdGRTQ1JJUFRTIGluc3RhbGwtbWFuIFwKKwlpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAorCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCisJbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAorCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKKwl1bmluc3RhbGwgdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1pbml0ZFNDUklQVFMKKworCitvcmcuZnJlZWRlc2t0b3AuYXZhaGktZGFlbW9uLnBsaXN0OiBvcmcuZnJlZWRlc2t0b3AuYXZhaGktZGFlbW9uLnBsaXN0LmluCisJc2VkIC1lICdzLEBzYmluZGlyXEAsJChzYmluZGlyKSxnJyAkPCA+ICRACisKK29yZy5mcmVlZGVza3RvcC5hdmFoaS1kbnNjb25mZC5wbGlzdDogb3JnLmZyZWVkZXNrdG9wLmF2YWhpLWRuc2NvbmZkLnBsaXN0LmluCisJc2VkIC1lICdzLEBzYmluZGlyXEAsJChzYmluZGlyKSxnJyAkPCA+ICRACisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9pbml0c2NyaXB0L2Rhcndpbi9vcmcuZnJlZWRlc2t0b3AuYXZhaGktZGFlbW9uLnBsaXN0LmluIGIvYXZhaGktMC42LjMxL2luaXRzY3JpcHQvZGFyd2luL29yZy5mcmVlZGVza3RvcC5hdmFoaS1kYWVtb24ucGxpc3QuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM1ZTQwYwotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9pbml0c2NyaXB0L2Rhcndpbi9vcmcuZnJlZWRlc2t0b3AuYXZhaGktZGFlbW9uLnBsaXN0LmluCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZSBDb21wdXRlci8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KKzxwbGlzdCB2ZXJzaW9uPSIxLjAiPgorPGRpY3Q+CisJPGtleT5MYWJlbDwva2V5PgorCTxzdHJpbmc+b3JnLmZyZWVkZXNrdG9wLmF2YWhpLWRhZW1vbjwvc3RyaW5nPgorCTxrZXk+T25EZW1hbmQ8L2tleT4KKwk8ZmFsc2UvPgorCTxrZXk+UHJvZ3JhbUFyZ3VtZW50czwva2V5PgorCTxhcnJheT4KKwkJCTxzdHJpbmc+QHNiaW5kaXJAL2F2YWhpLWRhZW1vbjwvc3RyaW5nPgorCTwvYXJyYXk+CisJPGtleT5TZXJ2aWNlSVBDPC9rZXk+CisJPGZhbHNlLz4KKzwvZGljdD4KKzwvcGxpc3Q+CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvaW5pdHNjcmlwdC9kYXJ3aW4vb3JnLmZyZWVkZXNrdG9wLmF2YWhpLWRuc2NvbmZkLnBsaXN0LmluIGIvYXZhaGktMC42LjMxL2luaXRzY3JpcHQvZGFyd2luL29yZy5mcmVlZGVza3RvcC5hdmFoaS1kbnNjb25mZC5wbGlzdC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjJhMmMwCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2luaXRzY3JpcHQvZGFyd2luL29yZy5mcmVlZGVza3RvcC5hdmFoaS1kbnNjb25mZC5wbGlzdC5pbgpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCFET0NUWVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUgQ29tcHV0ZXIvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+Cis8cGxpc3QgdmVyc2lvbj0iMS4wIj4KKzxkaWN0PgorCTxrZXk+TGFiZWw8L2tleT4KKwk8c3RyaW5nPm9yZy5mcmVlZGVza3RvcC5hdmFoaS1kbnNjb25mZDwvc3RyaW5nPgorCTxrZXk+T25EZW1hbmQ8L2tleT4KKwk8ZmFsc2UvPgorCTxrZXk+UHJvZ3JhbUFyZ3VtZW50czwva2V5PgorCTxhcnJheT4KKwkJCTxzdHJpbmc+QHNiaW5kaXJAL2F2YWhpLWRuc2NvbmZkPC9zdHJpbmc+CisJPC9hcnJheT4KKwk8a2V5PlNlcnZpY2VJUEM8L2tleT4KKwk8ZmFsc2UvPgorPC9kaWN0PgorPC9wbGlzdD4KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9pbml0c2NyaXB0L2RlYmlhbi9NYWtlZmlsZS5hbSBiL2F2YWhpLTAuNi4zMS9pbml0c2NyaXB0L2RlYmlhbi9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTQ5ODNkCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2luaXRzY3JpcHQvZGViaWFuL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsNDQgQEAKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisjCisjIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisjIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisjIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisjIFVTQS4KKworaW5pdGRkaXIgPSAkKHN5c2NvbmZkaXIpL2luaXQuZAorCitFWFRSQV9ESVNUID0gXAorCWF2YWhpLWRhZW1vbi5pbiBcCisJYXZhaGktZG5zY29uZmQuaW4KKworaW5pdGRfU0NSSVBUUyA9IFwKKwlhdmFoaS1kYWVtb24gXAorCWF2YWhpLWRuc2NvbmZkCisKK0NMRUFORklMRVMgPSBcCisJYXZhaGktZGFlbW9uIFwKKwlhdmFoaS1kbnNjb25mZAorCithdmFoaS1kYWVtb246IGF2YWhpLWRhZW1vbi5pbgorCXNlZCBcCisJCS1lICdzLEBzYmluZGlyXEAsJChzYmluZGlyKSxnJyBcCisJCS1lICdzLEBzeXNjb25mZGlyXEAsJChzeXNjb25mZGlyKSxnJyBcCisJCSQ8ID4gJEAKKwljaG1vZCAreCAkQAorCithdmFoaS1kbnNjb25mZDogYXZhaGktZG5zY29uZmQuaW4KKwlzZWQgXAorCQktZSAncyxAc2JpbmRpclxALCQoc2JpbmRpciksZycgXAorCQktZSAncyxAc3lzY29uZmRpclxALCQoc3lzY29uZmRpciksZycgXAorCQkkPCA+ICRACisJY2htb2QgK3ggJEAKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9pbml0c2NyaXB0L2RlYmlhbi9NYWtlZmlsZS5pbiBiL2F2YWhpLTAuNi4zMS9pbml0c2NyaXB0L2RlYmlhbi9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTI0NjkxCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2luaXRzY3JpcHQvZGViaWFuL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNjE0IEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjExLjMgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACisKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisjCisjIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisjIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisjIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisjIFVTQS4KKworVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorc3ViZGlyID0gaW5pdHNjcmlwdC9kZWJpYW4KK0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbgorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL2FjeF9wdGhyZWFkLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9nY2Nfc3RhY2tfcHJvdGVjdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vZ2NjX3Zpc2liaWxpdHkubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2ludGx0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9pbnRyb3NwZWN0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9sdG9wdGlvbnMubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2x0c3VnYXIubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2x0dmVyc2lvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHR+b2Jzb2xldGUubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL25scy5tNCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9weXRob24ubTQgXAorCSQodG9wX3NyY2RpcikvYWNpbmNsdWRlLm00ICQodG9wX3NyY2RpcikvY29tbW9uL2RveHlnZW4ubTQgXAorCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCithbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQoQUNMT0NBTF9NNCkKK21raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCitDT05GSUdfQ0xFQU5fRklMRVMgPQorQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KK2FtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOworYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKKyAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAorICAgICopIGY9JCRwOzsgXAorICBlc2FjOworYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOworYW1fX2luc3RhbGxfbWF4ID0gNDAKK2FtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCisgIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKK2FtX19ub2Jhc2Vfc3RyaXAgPSBcCisgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgorYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAorICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAorICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAorICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCisgICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAorICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAorICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKK2FtX19iYXNlX2xpc3QgPSBcCisgIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCisgIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKK2FtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIgPSB7IFwKKyAgdGVzdCAteiAiJCRmaWxlcyIgXAorICAgIHx8IHsgdGVzdCAhIC1kICIkJGRpciIgJiYgdGVzdCAhIC1mICIkJGRpciIgJiYgdGVzdCAhIC1yICIkJGRpciI7IH0gXAorICAgIHx8IHsgZWNobyAiICggY2QgJyQkZGlyJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKKyAgICAgICAgICQoYW1fX2NkKSAiJCRkaXIiICYmIHJtIC1mICQkZmlsZXM7IH07IFwKKyAgfQorYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKGluaXRkZGlyKSIKK1NDUklQVFMgPSAkKGluaXRkX1NDUklQVFMpCitBTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKK2FtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKK2FtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgIiAkQDsKK0FNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKK2FtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCithbV9fdl9hdF8wID0gQAorU09VUkNFUyA9CitESVNUX1NPVVJDRVMgPQorRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FMTF9MSU5HVUFTID0gQEFMTF9MSU5HVUFTQAorQU1UQVIgPSBAQU1UQVJACitBTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKK0FSID0gQEFSQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FWQUhJX0FVVE9JUERfR1JPVVAgPSBAQVZBSElfQVVUT0lQRF9HUk9VUEAKK0FWQUhJX0FVVE9JUERfVVNFUiA9IEBBVkFISV9BVVRPSVBEX1VTRVJACitBVkFISV9HUk9VUCA9IEBBVkFISV9HUk9VUEAKK0FWQUhJX1BSSVZfQUNDRVNTX0dST1VQID0gQEFWQUhJX1BSSVZfQUNDRVNTX0dST1VQQAorQVZBSElfVVNFUiA9IEBBVkFISV9VU0VSQAorQVdLID0gQEFXS0AKK0NBVEFMT0dTID0gQENBVEFMT0dTQAorQ0FUT0JKRVhUID0gQENBVE9CSkVYVEAKK0NDID0gQENDQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RBVEFESVJOQU1FID0gQERBVEFESVJOQU1FQAorREJVU19DRkxBR1MgPSBAREJVU19DRkxBR1NACitEQlVTX0xJQlMgPSBAREJVU19MSUJTQAorREJVU19TWVNURU1fQlVTX0RFRkFVTFRfQUREUkVTUyA9IEBEQlVTX1NZU1RFTV9CVVNfREVGQVVMVF9BRERSRVNTQAorREJVU19TWVNfRElSID0gQERCVVNfU1lTX0RJUkAKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitETExUT09MID0gQERMTFRPT0xACitET1hZR0VOX1BBUEVSX1NJWkUgPSBARE9YWUdFTl9QQVBFUl9TSVpFQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitEWF9DT05GSUcgPSBARFhfQ09ORklHQAorRFhfRE9DRElSID0gQERYX0RPQ0RJUkAKK0RYX0RPVCA9IEBEWF9ET1RACitEWF9ET1hZR0VOID0gQERYX0RPWFlHRU5ACitEWF9EVklQUyA9IEBEWF9EVklQU0AKK0RYX0VHUkVQID0gQERYX0VHUkVQQAorRFhfRU5WID0gQERYX0VOVkAKK0RYX0ZMQUdfY2hpID0gQERYX0ZMQUdfY2hpQAorRFhfRkxBR19jaG0gPSBARFhfRkxBR19jaG1ACitEWF9GTEFHX2RvYyA9IEBEWF9GTEFHX2RvY0AKK0RYX0ZMQUdfZG90ID0gQERYX0ZMQUdfZG90QAorRFhfRkxBR19odG1sID0gQERYX0ZMQUdfaHRtbEAKK0RYX0ZMQUdfbWFuID0gQERYX0ZMQUdfbWFuQAorRFhfRkxBR19wZGYgPSBARFhfRkxBR19wZGZACitEWF9GTEFHX3BzID0gQERYX0ZMQUdfcHNACitEWF9GTEFHX3J0ZiA9IEBEWF9GTEFHX3J0ZkAKK0RYX0ZMQUdfeG1sID0gQERYX0ZMQUdfeG1sQAorRFhfSEhDID0gQERYX0hIQ0AKK0RYX0xBVEVYID0gQERYX0xBVEVYQAorRFhfTUFLRUlOREVYID0gQERYX01BS0VJTkRFWEAKK0RYX1BERkxBVEVYID0gQERYX1BERkxBVEVYQAorRFhfUEVSTCA9IEBEWF9QRVJMQAorRFhfUFJPSkVDVCA9IEBEWF9QUk9KRUNUQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFWEVFWFQgPSBARVhFRVhUQAorRkdSRVAgPSBARkdSRVBACitHQUNVVElMID0gQEdBQ1VUSUxACitHRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAorR0xJQjIwX0NGTEFHUyA9IEBHTElCMjBfQ0ZMQUdTQAorR0xJQjIwX0xJQlMgPSBAR0xJQjIwX0xJQlNACitHTU9GSUxFUyA9IEBHTU9GSUxFU0AKK0dNU0dGTVQgPSBAR01TR0ZNVEAKK0dPQkpFQ1RfQ0ZMQUdTID0gQEdPQkpFQ1RfQ0ZMQUdTQAorR09CSkVDVF9MSUJTID0gQEdPQkpFQ1RfTElCU0AKK0dSRVAgPSBAR1JFUEAKK0dUSzIwX0NGTEFHUyA9IEBHVEsyMF9DRkxBR1NACitHVEsyMF9MSUJTID0gQEdUSzIwX0xJQlNACitHVEszMF9DRkxBR1MgPSBAR1RLMzBfQ0ZMQUdTQAorR1RLMzBfTElCUyA9IEBHVEszMF9MSUJTQAorSE9XTF9DT01QQVRfVkVSU0lPTiA9IEBIT1dMX0NPTVBBVF9WRVJTSU9OQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitJTlNUT0JKRVhUID0gQElOU1RPQkpFWFRACitJTlRMTElCUyA9IEBJTlRMTElCU0AKK0lOVExUT09MX0VYVFJBQ1QgPSBASU5UTFRPT0xfRVhUUkFDVEAKK0lOVExUT09MX01FUkdFID0gQElOVExUT09MX01FUkdFQAorSU5UTFRPT0xfUEVSTCA9IEBJTlRMVE9PTF9QRVJMQAorSU5UTFRPT0xfVVBEQVRFID0gQElOVExUT09MX1VQREFURUAKK0lOVFJPU1BFQ1RJT05fQ0ZMQUdTID0gQElOVFJPU1BFQ1RJT05fQ0ZMQUdTQAorSU5UUk9TUEVDVElPTl9DT01QSUxFUiA9IEBJTlRST1NQRUNUSU9OX0NPTVBJTEVSQAorSU5UUk9TUEVDVElPTl9HRU5FUkFURSA9IEBJTlRST1NQRUNUSU9OX0dFTkVSQVRFQAorSU5UUk9TUEVDVElPTl9HSVJESVIgPSBASU5UUk9TUEVDVElPTl9HSVJESVJACitJTlRST1NQRUNUSU9OX0xJQlMgPSBASU5UUk9TUEVDVElPTl9MSUJTQAorSU5UUk9TUEVDVElPTl9NQUtFRklMRSA9IEBJTlRST1NQRUNUSU9OX01BS0VGSUxFQAorSU5UUk9TUEVDVElPTl9TQ0FOTkVSID0gQElOVFJPU1BFQ1RJT05fU0NBTk5FUkAKK0lOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUiA9IEBJTlRST1NQRUNUSU9OX1RZUEVMSUJESVJACitMRCA9IEBMREAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQkFWQUhJX0NMSUVOVF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ0xJRU5UX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPTU1PTl9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ09NTU9OX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPTVBBVF9IT1dMX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DT01QQVRfSE9XTF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9DT01QQVRfTElCRE5TX1NEX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DT01QQVRfTElCRE5TX1NEX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPUkVfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NPUkVfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfR0xJQl9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfR0xJQl9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9HT0JKRUNUX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9HT0JKRUNUX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX1FUM19WRVJTSU9OX0lORk8gPSBATElCQVZBSElfUVQzX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX1FUNF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfUVQ0X1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX1VJX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9VSV9WRVJTSU9OX0lORk9ACitMSUJEQUVNT05fQ0ZMQUdTID0gQExJQkRBRU1PTl9DRkxBR1NACitMSUJEQUVNT05fTElCUyA9IEBMSUJEQUVNT05fTElCU0AKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKK0xOX1MgPSBATE5fU0AKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKK01DUyA9IEBNQ1NACitNREFTU0VNQkxFUiA9IEBNREFTU0VNQkxFUkAKK01LRElSX1AgPSBATUtESVJfUEAKK01LSU5TVEFMTERJUlMgPSBATUtJTlNUQUxMRElSU0AKK01PQ19RVDMgPSBATU9DX1FUM0AKK01PQ19RVDQgPSBATU9DX1FUNEAKK01PTk9ET0NFUiA9IEBNT05PRE9DRVJACitNT05PRE9DX0NGTEFHUyA9IEBNT05PRE9DX0NGTEFHU0AKK01PTk9ET0NfRElSID0gQE1PTk9ET0NfRElSQAorTU9OT0RPQ19MSUJTID0gQE1PTk9ET0NfTElCU0AKK01TR0ZNVCA9IEBNU0dGTVRACitNU0dGTVRfT1BUUyA9IEBNU0dGTVRfT1BUU0AKK01TR01FUkdFID0gQE1TR01FUkdFQAorTk0gPSBATk1ACitOTUVESVQgPSBATk1FRElUQAorT0JKRFVNUCA9IEBPQkpEVU1QQAorT0JKRVhUID0gQE9CSkVYVEAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQS0dfQ09ORklHX0xJQkRJUiA9IEBQS0dfQ09ORklHX0xJQkRJUkAKK1BLR19DT05GSUdfUEFUSCA9IEBQS0dfQ09ORklHX1BBVEhACitQT0ZJTEVTID0gQFBPRklMRVNACitQT1NVQiA9IEBQT1NVQkAKK1BPX0lOX0RBVEFESVJfRkFMU0UgPSBAUE9fSU5fREFUQURJUl9GQUxTRUAKK1BPX0lOX0RBVEFESVJfVFJVRSA9IEBQT19JTl9EQVRBRElSX1RSVUVACitQVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACitQVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKK1BUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACitQWVRIT04gPSBAUFlUSE9OQAorUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKK1BZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACitQWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACitQWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKK1FUM19DRkxBR1MgPSBAUVQzX0NGTEFHU0AKK1FUM19MSUJTID0gQFFUM19MSUJTQAorUVQ0X0NGTEFHUyA9IEBRVDRfQ0ZMQUdTQAorUVQ0X0xJQlMgPSBAUVQ0X0xJQlNACitSQU5MSUIgPSBAUkFOTElCQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTVE9XID0gQFNUT1dACitTVFJJUCA9IEBTVFJJUEAKK1VTRV9OTFMgPSBAVVNFX05MU0AKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1ZJU0lCSUxJVFlfSElEREVOX0NGTEFHUyA9IEBWSVNJQklMSVRZX0hJRERFTl9DRkxBR1NACitYR0VUVEVYVCA9IEBYR0VUVEVYVEAKK1hNTF9DRkxBR1MgPSBAWE1MX0NGTEFHU0AKK1hNTF9MSUJTID0gQFhNTF9MSUJTQAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorYWNfY3RfQVIgPSBAYWNfY3RfQVJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithY3hfcHRocmVhZF9jb25maWcgPSBAYWN4X3B0aHJlYWRfY29uZmlnQAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACithdmFoaV9ydW50aW1lX2RpciA9IEBhdmFoaV9ydW50aW1lX2RpckAKK2F2YWhpX3NvY2tldCA9IEBhdmFoaV9zb2NrZXRACithdmFoaWxvY2FsZWRpciA9IEBhdmFoaWxvY2FsZWRpckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraGF2ZV9wa2dfY29uZmlnID0gQGhhdmVfcGtnX2NvbmZpZ0AKK2hhdmVfeG1sdG9tYW4gPSBAaGF2ZV94bWx0b21hbkAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitpbnRlcmZhY2VzZGlyID0gQGludGVyZmFjZXNkaXJACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKK3BrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitweWV4ZWNkaXIgPSBAcHlleGVjZGlyQAorcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3N5c3RlbWRzeXN0ZW11bml0ZGlyID0gQHN5c3RlbWRzeXN0ZW11bml0ZGlyQAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK3RvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKK3RvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitpbml0ZGRpciA9ICQoc3lzY29uZmRpcikvaW5pdC5kCitFWFRSQV9ESVNUID0gXAorCWF2YWhpLWRhZW1vbi5pbiBcCisJYXZhaGktZG5zY29uZmQuaW4KKworaW5pdGRfU0NSSVBUUyA9IFwKKwlhdmFoaS1kYWVtb24gXAorCWF2YWhpLWRuc2NvbmZkCisKK0NMRUFORklMRVMgPSBcCisJYXZhaGktZGFlbW9uIFwKKwlhdmFoaS1kbnNjb25mZAorCithbGw6IGFsbC1hbQorCisuU1VGRklYRVM6CiskKHNyY2RpcikvTWFrZWZpbGUuaW46ICAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAorCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiBpbml0c2NyaXB0L2RlYmlhbi9NYWtlZmlsZSc7IFwKKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gaW5pdHNjcmlwdC9kZWJpYW4vTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6ICAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6ICAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKGFtX19hY2xvY2FsX200X2RlcHMpOgoraW5zdGFsbC1pbml0ZFNDUklQVFM6ICQoaW5pdGRfU0NSSVBUUykKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwl0ZXN0IC16ICIkKGluaXRkZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQoaW5pdGRkaXIpIgorCUBsaXN0PSckKGluaXRkX1NDUklQVFMpJzsgdGVzdCAtbiAiJChpbml0ZGRpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAorCSAgaWYgdGVzdCAtZiAiJCRkJCRwIjsgdGhlbiBlY2hvICIkJGQkJHAiOyBlY2hvICIkJHAiOyBlbHNlIDo7IGZpOyBcCisJZG9uZSB8IFwKKwlzZWQgLWUgJ3A7cywuKi8sLDtuJyBcCisJICAgIC1lICdoO3N8Lip8LnwnIFwKKwkgICAgLWUgJ3A7eDtzLC4qLywsOyQodHJhbnNmb3JtKScgfCBzZWQgJ047TjtOO3MsXG4sICxnJyB8IFwKKwkkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiOyBkaXJzWyIuIl0gPSAxOyB9IFwKKwkgIHsgZD0kJDM7IGlmIChkaXJzW2RdICE9IDEpIHsgcHJpbnQgImQiLCBkOyBkaXJzW2RdID0gMSB9IFwKKwkgICAgaWYgKCQkMiA9PSAkJDQpIHsgZmlsZXNbZF0gPSBmaWxlc1tkXSAiICIgJCQxOyBcCisJICAgICAgaWYgKCsrbltkXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIHsgXAorCQlwcmludCAiZiIsIGQsIGZpbGVzW2RdOyBuW2RdID0gMDsgZmlsZXNbZF0gPSAiIiB9IH0gXAorCSAgICBlbHNlIHsgcHJpbnQgImYiLCBkICIvIiAkJDQsICQkMSB9IH0gXAorCSAgRU5EIHsgZm9yIChkIGluIGZpbGVzKSBwcmludCAiZiIsIGQsIGZpbGVzW2RdIH0nIHwgXAorCXdoaWxlIHJlYWQgdHlwZSBkaXIgZmlsZXM7IGRvIFwKKwkgICAgIGlmIHRlc3QgIiQkZGlyIiA9IC47IHRoZW4gZGlyPTsgZWxzZSBkaXI9LyQkZGlyOyBmaTsgXAorCSAgICAgdGVzdCAteiAiJCRmaWxlcyIgfHwgeyBcCisJICAgICAgIGVjaG8gIiAkKElOU1RBTExfU0NSSVBUKSAkJGZpbGVzICckKERFU1RESVIpJChpbml0ZGRpcikkJGRpciciOyBcCisJICAgICAgICQoSU5TVEFMTF9TQ1JJUFQpICQkZmlsZXMgIiQoREVTVERJUikkKGluaXRkZGlyKSQkZGlyIiB8fCBleGl0ICQkPzsgXAorCSAgICAgfSBcCisJOyBkb25lCisKK3VuaW5zdGFsbC1pbml0ZFNDUklQVFM6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChpbml0ZF9TQ1JJUFRTKSc7IHRlc3QgLW4gIiQoaW5pdGRkaXIpIiB8fCBleGl0IDA7IFwKKwlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgXAorCSAgICAgICBzZWQgLWUgJ3MsLiovLCw7JCh0cmFuc2Zvcm0pJ2A7IFwKKwlkaXI9JyQoREVTVERJUikkKGluaXRkZGlyKSc7ICQoYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpcikKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKK3RhZ3M6IFRBR1MKK1RBR1M6CisKK2N0YWdzOiBDVEFHUworQ1RBR1M6CisKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUgJChTQ1JJUFRTKQoraW5zdGFsbGRpcnM6CisJZm9yIGRpciBpbiAiJChERVNURElSKSQoaW5pdGRkaXIpIjsgZG8gXAorCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAorCWRvbmUKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgICAgIGluc3RhbGw7IFwKKwllbHNlIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAorCWZpCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENMRUFORklMRVMpIiB8fCBybSAtZiAkKENMRUFORklMRVMpCisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKK2NsZWFuOiBjbGVhbi1hbQorCitjbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIG1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1nZW5lcmljCisKK2R2aTogZHZpLWFtCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1hbQorCitodG1sLWFtOgorCitpbmZvOiBpbmZvLWFtCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1pbml0ZFNDUklQVFMKKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCisKK2luc3RhbGwtZHZpLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06CisKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCisKK2luc3RhbGwtaHRtbC1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1pbmZvLWFtOgorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCisKK2luc3RhbGwtcGRmLWFtOgorCitpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCisKK2luc3RhbGwtcHMtYW06CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtaW5pdGRTQ1JJUFRTCisKKy5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKKworLlBIT05ZOiBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBcCisJZGlzdGNsZWFuIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIGRpc3RkaXIgZHZpIFwKKwlkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gXAorCWluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gXAorCWluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBcCisJaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLWluaXRkU0NSSVBUUyBpbnN0YWxsLW1hbiBcCisJaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKKwlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAorCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKKwltb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCisJdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSB1bmluc3RhbGwtaW5pdGRTQ1JJUFRTCisKKworYXZhaGktZGFlbW9uOiBhdmFoaS1kYWVtb24uaW4KKwlzZWQgXAorCQktZSAncyxAc2JpbmRpclxALCQoc2JpbmRpciksZycgXAorCQktZSAncyxAc3lzY29uZmRpclxALCQoc3lzY29uZmRpciksZycgXAorCQkkPCA+ICRACisJY2htb2QgK3ggJEAKKworYXZhaGktZG5zY29uZmQ6IGF2YWhpLWRuc2NvbmZkLmluCisJc2VkIFwKKwkJLWUgJ3MsQHNiaW5kaXJcQCwkKHNiaW5kaXIpLGcnIFwKKwkJLWUgJ3MsQHN5c2NvbmZkaXJcQCwkKHN5c2NvbmZkaXIpLGcnIFwKKwkJJDwgPiAkQAorCWNobW9kICt4ICRACisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9pbml0c2NyaXB0L2RlYmlhbi9hdmFoaS1kYWVtb24uaW4gYi9hdmFoaS0wLjYuMzEvaW5pdHNjcmlwdC9kZWJpYW4vYXZhaGktZGFlbW9uLmluCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk3ZmExNTcKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvaW5pdHNjcmlwdC9kZWJpYW4vYXZhaGktZGFlbW9uLmluCkBAIC0wLDAgKzEsMTc4IEBACisjIS9iaW4vc2gKKworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKyMKKyMgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyMgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyMgVVNBLgorCisjCisjIGF2YWhpICAgICBhdmFoaSBkYWVtb24KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGFlbW9uIGZvciBaZXJvQ29uZgorIworIyBBdXRob3JzOiAgICAgIDxzZWJhc3RpZW4uZXN0aWVubmVAZ21haWwuY29tPgorIworCitpZiBbIC1mIC9saWIvbHNiL2luaXQtZnVuY3Rpb25zIF0KK3RoZW4KKyAgICAuIC9saWIvbHNiL2luaXQtZnVuY3Rpb25zCitlbHNlCisgICAgIyBpbnQgbG9nX2JlZ2luX21lc3NhZ2UgKGNoYXIgKm1lc3NhZ2UpCisgICAgbG9nX2JlZ2luX21zZyAoKSB7CisgICAgICAgIGlmIFsgLXogIiQxIiBdOyB0aGVuCisJICAgIHJldHVybiAxCisgICAgICAgIGZpCisgICAgICAgIGVjaG8gIiAqICRAIgorICAgIH0KKworICAgICMgaW50IGxvZ19lbmRfbWVzc2FnZSAoaW50IGV4aXRzdGF0dXMpCisgICAgbG9nX2VuZF9tc2cgKCkgeworCQorICAgICMgSWYgbm8gYXJndW1lbnRzIHdlcmUgcGFzc2VkLCByZXR1cm4KKwlbIC16ICIkMSIgXSAmJiByZXR1cm4gMQorCQorICAgICMgT25seSBkbyB0aGUgZmFuY3kgc3R1ZmYgaWYgd2UgaGF2ZSBhbiBhcHByb3ByaWF0ZSB0ZXJtaW5hbAorICAgICMgYW5kIGlmIC91c3IgaXMgYWxyZWFkeSBtb3VudGVkCisJVFBVVD0vdXNyL2Jpbi90cHV0CisJRVhQUj0vdXNyL2Jpbi9leHByCisJaWYgWyAteCAkVFBVVCBdICYmIFsgLXggJEVYUFIgXSAmJiAkVFBVVCBocGEgNjAgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJICAgIENPTFM9YCRUUFVUIGNvbHNgCisJICAgIGlmIFsgLW4gIiRDT0xTIiBdOyB0aGVuCisJCUNPTD1gJEVYUFIgJENPTFMgLSA3YAorCSAgICBlbHNlCisJCUNPTD03MworCSAgICBmaQorCSAgICBVUD1gJFRQVVQgY3V1MWAKKwkgICAgRU5EPWAkVFBVVCBocGEgJENPTGAKKwkgICAgU1RBUlQ9YCRUUFVUIGhwYSAwYAorCSAgICBSRUQ9YCRUUFVUIHNldGFmIDFgCisJICAgIE5PUk1BTD1gJFRQVVQgb3BgCisJICAgIGlmIFsgJDEgLWVxIDAgXTsgdGhlbgorCQllY2hvICIkVVAkRU5EWyBvayBdIgorCSAgICBlbHNlCisJCWVjaG8gLWUgIiRVUCRTVEFSVCAkUkVEKiROT1JNQUwkRU5EWyR7UkVEfWZhaWwke05PUk1BTH1dIgorCSAgICBmaQorCWVsc2UKKwkgICAgaWYgWyAkMSAtZXEgMCBdOyB0aGVuCisJCWVjaG8gIiAgIC4uLmRvbmUuIgorCSAgICBlbHNlCisJCWVjaG8gIiAgIC4uLmZhaWwhIgorCSAgICBmaQorCWZpCisJcmV0dXJuICQxCisgICAgfQorICAgIAorICAgIGxvZ193YXJuaW5nX21zZyAoKSB7CisJaWYgbG9nX3VzZV9mYW5jeV9vdXRwdXQ7IHRoZW4KKwkgICAgWUVMTE9XPWAkVFBVVCBzZXRhZiAzYAorCSAgICBOT1JNQUw9YCRUUFVUIG9wYAorCSAgICBlY2hvICIkWUVMTE9XKiROT1JNQUwgJEAiCisJZWxzZQorCSAgICBlY2hvICIkQCIKKwlmaQorICAgIH0KKworZmkKKworI3NldCAtZQorCitQQVRIPS9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluCitERVNDPSJBdmFoaSBtRE5TL0ROUy1TRCBEYWVtb24iCitOQU1FPSJhdmFoaS1kYWVtb24iCitEQUVNT049IkBzYmluZGlyQC8kTkFNRSIKK1NDUklQVE5BTUU9L2V0Yy9pbml0LmQvJE5BTUUKKworIyBHcmFjZWZ1bGx5IGV4aXQgaWYgdGhlIHBhY2thZ2UgaGFzIGJlZW4gcmVtb3ZlZC4KK3Rlc3QgLXggJERBRU1PTiB8fCBleGl0IDAKKworIyBkb24ndCBzdGFydCBpZiAvZXRjL2RlZmF1bHQvYXZhaGktZGFlbW9uIHNheXMgc28uCitBVkFISV9EQUVNT05fU1RBUlQ9MQordGVzdCAtZiAvZXRjL2RlZmF1bHQvYXZhaGktZGFlbW9uICYmIC4gL2V0Yy9kZWZhdWx0L2F2YWhpLWRhZW1vbgorCitpZiBbICIkQVZBSElfREFFTU9OX1NUQVJUIiAhPSAiMSIgLWEgIiQxIiAhPSAic3RvcCIgXTsgdGhlbgorICAgIGxvZ193YXJuaW5nX21zZyAiTm90IHN0YXJ0aW5nICRERVNDICROQU1FLCBkaXNhYmxlZCB2aWEgL2V0Yy9kZWZhdWx0LyROQU1FIgorICAgIGV4aXQgMAorZmkKKworIworIyAgICAgICBGdW5jdGlvbiB0aGF0IHN0YXJ0cyB0aGUgZGFlbW9uL3NlcnZpY2UuCisjCitkX3N0YXJ0KCkgeworICAgIG1vZHByb2JlIGNhcGFiaWxpdHkgPi9kZXYvbnVsbCAyPiYxIHx8IHRydWUKKworICAgICREQUVNT04gLWMgJiYgcmV0dXJuIDAKKworICAgIGlmIFsgLXMgL2V0Yy9sb2NhbHRpbWUgXTsgdGhlbgorCWlmIFsgISAtZCAvZXRjL2F2YWhpL2V0YyBdOyB0aGVuCisJICAgIG1rZGlyIC1wIEBzeXNjb25mZGlyQC9hdmFoaS9ldGMgPi9kZXYvbnVsbCAyPiYxCisJZmkKKwljcCAtZnAgL2V0Yy9sb2NhbHRpbWUgQHN5c2NvbmZkaXJAL2F2YWhpL2V0YyA+L2Rldi9udWxsIDI+JjEKKyAgICBmaTsKKyAgICAKKyAgICAkREFFTU9OIC1ECit9CisKKyMKKyMgICAgICAgRnVuY3Rpb24gdGhhdCBzdG9wcyB0aGUgZGFlbW9uL3NlcnZpY2UuCisjCitkX3N0b3AoKSB7CisgICAgJERBRU1PTiAtYyAmJiAkREFFTU9OIC1rCit9CisKKyMKKyMgICAgICAgRnVuY3Rpb24gdGhhdCByZWxvYWQgdGhlIGNvbmZpZyBmaWxlIGZvciB0aGUgZGFlbW9uL3NlcnZpY2UuCisjCitkX3JlbG9hZCgpIHsKKyAgICAkREFFTU9OIC1jICYmICREQUVNT04gLXIKK30KKworIworIyAgICAgICBGdW5jdGlvbiB0aGF0IGNoZWNrIHRoZSBzdGF0dXMgb2YgdGhlIGRhZW1vbi9zZXJ2aWNlLgorIworZF9zdGF0dXMoKSB7CisgICAgJERBRU1PTiAtYyAmJiBlY2hvICIkREVTQyBpcyBydW5uaW5nIiB8fCBlY2hvICIkREVTQyBpcyBub3QgcnVubmluZyIKK30KKworY2FzZSAiJDEiIGluCisgICAgc3RhcnQpCisgICAgICAgIGxvZ19iZWdpbl9tc2cgIlN0YXJ0aW5nICRERVNDOiAkTkFNRSIKKyAgICAgICAgZF9zdGFydAorICAgICAgICBsb2dfZW5kX21zZyAkPworICAgICAgICA7OworICAgIHN0b3ApCisgICAgICAgIGxvZ19iZWdpbl9tc2cgIlN0b3BwaW5nICRERVNDOiAkTkFNRSIKKyAgICAgICAgZF9zdG9wCisgICAgICAgIGxvZ19lbmRfbXNnICQ/CisgICAgICAgIDs7CisgICAgcmVsb2FkKQorICAgICAgICBsb2dfYmVnaW5fbXNnICJSZWxvYWRpbmcgc2VydmljZXMgZm9yICRERVNDOiAkTkFNRSIKKyAgICAgICAgZF9yZWxvYWQKKyAgICAgICAgbG9nX2VuZF9tc2cgJD8KKyAgICAgICAgOzsKKyAgICByZXN0YXJ0fGZvcmNlLXJlbG9hZCkKKyAgICAgICAgbG9nX2JlZ2luX21zZyAiUmVzdGFydGluZyAkREVTQzogJE5BTUUiCisgICAgICAgICREQUVNT04gLWMgJiYgZF9zdG9wCisgICAgICAgIGRfc3RhcnQKKyAgICAgICAgbG9nX2VuZF9tc2cgJD8KKyAgICAgICAgOzsKKyAgICBzdGF0dXMpCisgICAgICAgIGRfc3RhdHVzCisJOzsKKyAgICAqKQorICAgICAgICBlY2hvICJVc2FnZTogJFNDUklQVE5BTUUge3N0YXJ0fHN0b3B8cmVzdGFydHxmb3JjZS1yZWxvYWR8cmVsb2FkfSIgPiYyCisgICAgICAgIGV4aXQgMQorICAgICAgICA7OworZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9pbml0c2NyaXB0L2RlYmlhbi9hdmFoaS1kbnNjb25mZC5pbiBiL2F2YWhpLTAuNi4zMS9pbml0c2NyaXB0L2RlYmlhbi9hdmFoaS1kbnNjb25mZC5pbgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42N2MyODczCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2luaXRzY3JpcHQvZGViaWFuL2F2YWhpLWRuc2NvbmZkLmluCkBAIC0wLDAgKzEsMTg0IEBACisjIS9iaW4vc2gKKworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKyMKKyMgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyMgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyMgVVNBLgorCisjCisjIGF2YWhpLWRuc2NvbmZkICAgICBhdmFoaSBkbnMgY29uZmlndXJhdGlvbiBkYWVtb24KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGFlbW9uIGZvciBaZXJvQ29uZgorIworIyBBdXRob3JzOiAgICAgIDxzZWJhc3RpZW4uZXN0aWVubmVAZ21haWwuY29tPgorIworCitpZiBbIC1mIC9saWIvbHNiL2luaXQtZnVuY3Rpb25zIF0KK3RoZW4KKyAgICAuIC9saWIvbHNiL2luaXQtZnVuY3Rpb25zCitlbHNlCisgICAgIyBpbnQgbG9nX2JlZ2luX21lc3NhZ2UgKGNoYXIgKm1lc3NhZ2UpCisgICAgbG9nX2JlZ2luX21zZyAoKSB7CisgICAgICAgIGlmIFsgLXogIiQxIiBdOyB0aGVuCisJICAgIHJldHVybiAxCisgICAgICAgIGZpCisgICAgICAgIGVjaG8gIiAqICRAIgorICAgIH0KKworICAgICMgaW50IGxvZ19lbmRfbWVzc2FnZSAoaW50IGV4aXRzdGF0dXMpCisgICAgbG9nX2VuZF9tc2cgKCkgeworCQorICAgICMgSWYgbm8gYXJndW1lbnRzIHdlcmUgcGFzc2VkLCByZXR1cm4KKwlbIC16ICIkMSIgXSAmJiByZXR1cm4gMQorCQorICAgICMgT25seSBkbyB0aGUgZmFuY3kgc3R1ZmYgaWYgd2UgaGF2ZSBhbiBhcHByb3ByaWF0ZSB0ZXJtaW5hbAorICAgICMgYW5kIGlmIC91c3IgaXMgYWxyZWFkeSBtb3VudGVkCisJVFBVVD0vdXNyL2Jpbi90cHV0CisJRVhQUj0vdXNyL2Jpbi9leHByCisJaWYgWyAteCAkVFBVVCBdICYmIFsgLXggJEVYUFIgXSAmJiAkVFBVVCBocGEgNjAgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJICAgIENPTFM9YCRUUFVUIGNvbHNgCisJICAgIGlmIFsgLW4gIiRDT0xTIiBdOyB0aGVuCisJCUNPTD1gJEVYUFIgJENPTFMgLSA3YAorCSAgICBlbHNlCisJCUNPTD03MworCSAgICBmaQorCSAgICBVUD1gJFRQVVQgY3V1MWAKKwkgICAgRU5EPWAkVFBVVCBocGEgJENPTGAKKwkgICAgU1RBUlQ9YCRUUFVUIGhwYSAwYAorCSAgICBSRUQ9YCRUUFVUIHNldGFmIDFgCisJICAgIE5PUk1BTD1gJFRQVVQgb3BgCisJICAgIGlmIFsgJDEgLWVxIDAgXTsgdGhlbgorCQllY2hvICIkVVAkRU5EWyBvayBdIgorCSAgICBlbHNlCisJCWVjaG8gLWUgIiRVUCRTVEFSVCAkUkVEKiROT1JNQUwkRU5EWyR7UkVEfWZhaWwke05PUk1BTH1dIgorCSAgICBmaQorCWVsc2UKKwkgICAgaWYgWyAkMSAtZXEgMCBdOyB0aGVuCisJCWVjaG8gIiAgIC4uLmRvbmUuIgorCSAgICBlbHNlCisJCWVjaG8gIiAgIC4uLmZhaWwhIgorCSAgICBmaQorCWZpCisJcmV0dXJuICQxCisgICAgfQorICAgIAorICAgIGxvZ193YXJuaW5nX21zZyAoKSB7CisJaWYgbG9nX3VzZV9mYW5jeV9vdXRwdXQ7IHRoZW4KKwkgICAgWUVMTE9XPWAkVFBVVCBzZXRhZiAzYAorCSAgICBOT1JNQUw9YCRUUFVUIG9wYAorCSAgICBlY2hvICIkWUVMTE9XKiROT1JNQUwgJEAiCisJZWxzZQorCSAgICBlY2hvICIkQCIKKwlmaQorICAgIH0KKworZmkKKworI3NldCAtZQorCitQQVRIPS9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluCitERVNDPSJBdmFoaSBVbmljYXN0IEROUyBDb25maWd1cmF0aW9uIERhZW1vbiIKK05BTUU9ImF2YWhpLWRuc2NvbmZkIgorREFFTU9OPSJAc2JpbmRpckAvJE5BTUUiCitTQ1JJUFROQU1FPS9ldGMvaW5pdC5kLyROQU1FCisKKyMgR3JhY2VmdWxseSBleGl0IGlmIHRoZSBwYWNrYWdlIGhhcyBiZWVuIHJlbW92ZWQuCit0ZXN0IC14ICREQUVNT04gfHwgZXhpdCAwCisKKyMgZG9uJ3Qgc3RhcnQgaWYgL2V0Yy9kZWZhdWx0L2F2YWhpLWRuc2NvbmZkIHNheXMgc28uCitBVkFISV9ETlNDT05GRF9TVEFSVD0xCit0ZXN0IC1mIC9ldGMvZGVmYXVsdC9hdmFoaS1kbnNjb25mZCAmJiAuIC9ldGMvZGVmYXVsdC9hdmFoaS1kbnNjb25mZAorCitpZiBbICIkQVZBSElfRE5TQ09ORkRfU1RBUlQiICE9ICIxIiAtYSAiJDEiICE9ICJzdG9wIiBdOyB0aGVuCisgICAgbG9nX3dhcm5pbmdfbXNnICJOb3Qgc3RhcnRpbmcgJERFU0MgJE5BTUUsIGRpc2FibGVkIHZpYSAvZXRjL2RlZmF1bHQvJE5BTUUiCisgICAgZXhpdCAwCitmaQorCisjCisjICAgICAgIEZ1bmN0aW9uIHRoYXQgc3RhcnRzIHRoZSBkYWVtb24vc2VydmljZS4KKyMKK2Rfc3RhcnQoKSB7CisgICAgJERBRU1PTiAtYworICAgIFsgJD8gPSAwIF0gJiYgZXhpdCAwCisKKyAgICBpZiBbIC1zIC9ldGMvbG9jYWx0aW1lIF07IHRoZW4KKwlpZiBbICEgLWQgL2V0Yy9hdmFoaS9ldGMgXTsgdGhlbgorCSAgICBta2RpciAtcCBAc3lzY29uZmRpckAvYXZhaGkvZXRjID4vZGV2L251bGwgMj4mMQorCWZpCisJY3AgLWZwIC9ldGMvbG9jYWx0aW1lIEBzeXNjb25mZGlyQC9hdmFoaS9ldGMgPi9kZXYvbnVsbCAyPiYxCisgICAgZmk7CisgICAgCisgICAgJERBRU1PTiAtRAorfQorCisjCisjICAgICAgIEZ1bmN0aW9uIHRoYXQgc3RvcHMgdGhlIGRhZW1vbi9zZXJ2aWNlLgorIworZF9zdG9wKCkgeworICAgICREQUVNT04gLWMKKyAgICBbICQ/ICE9IDAgXSAmJiBleGl0IDAKKworICAgICREQUVNT04gLWsKK30KKworIworIyAgICAgICBGdW5jdGlvbiB0aGF0IHJlbG9hZCB0aGUgY29uZmlnIGZpbGUgZm9yIHRoZSBkYWVtb24vc2VydmljZS4KKyMKK2RfcmVmcmVzaCgpIHsKKyAgICAkREFFTU9OIC1jCisgICAgWyAkPyAhPSAwIF0gJiYgZXhpdCAwCisKKyAgICAkREFFTU9OIC1yCit9CisKKyMKKyMgICAgICAgRnVuY3Rpb24gdGhhdCBjaGVjayB0aGUgc3RhdHVzIG9mIHRoZSBkYWVtb24vc2VydmljZS4KKyMKK2Rfc3RhdHVzKCkgeworICAgICREQUVNT04gLWMKKyAgICBbICQ/ID0gMCBdICAmJiBlY2hvICIkREVTQyBpcyBydW5uaW5nIiB8fCBlY2hvICIkREVTQyBpcyBub3QgcnVubmluZyIKK30KKworY2FzZSAiJDEiIGluCisgICAgc3RhcnQpCisgICAgICAgIGxvZ19iZWdpbl9tc2cgIlN0YXJ0aW5nICRERVNDOiAkTkFNRSIKKyAgICAgICAgZF9zdGFydAorICAgICAgICBsb2dfZW5kX21zZyAkPworICAgICAgICA7OworICAgIHN0b3ApCisgICAgICAgIGxvZ19iZWdpbl9tc2cgIlN0b3BwaW5nICRERVNDOiAkTkFNRSIKKyAgICAgICAgZF9zdG9wCisgICAgICAgIGxvZ19lbmRfbXNnICQ/CisgICAgICAgIDs7CisgICAgcmVmcmVzaCkKKyAgICAgICAgbG9nX2JlZ2luX21zZyAiUmVmcmVzaGluZyAkREVTQzogJE5BTUUiCisgICAgICAgIGRfcmVmcmVzaAorICAgICAgICBsb2dfZW5kX21zZyAkPworICAgICAgICA7OworICAgIHJlbG9hZHxyZXN0YXJ0fGZvcmNlLXJlbG9hZCkKKyAgICAgICAgbG9nX2JlZ2luX21zZyAiUmVzdGFydGluZyAkREVTQzogJE5BTUUiCisgICAgICAgICREQUVNT04gLWMgJiYgZF9zdG9wCisgICAgICAgIGRfc3RhcnQKKyAgICAgICAgbG9nX2VuZF9tc2cgJD8KKyAgICAgICAgOzsKKyAgICBzdGF0dXMpCisgICAgICAgIGRfc3RhdHVzCisJOzsKKyAgICAqKQorICAgICAgICBlY2hvICJVc2FnZTogJFNDUklQVE5BTUUge3N0YXJ0fHN0b3B8cmVzdGFydHxmb3JjZS1yZWxvYWR8cmVsb2FkfSIgPiYyCisgICAgICAgIGV4aXQgMQorICAgICAgICA7OworZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9pbml0c2NyaXB0L2ZlZG9yYS9NYWtlZmlsZS5hbSBiL2F2YWhpLTAuNi4zMS9pbml0c2NyaXB0L2ZlZG9yYS9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2E0MTM4Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2luaXRzY3JpcHQvZmVkb3JhL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMzggQEAKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisjCisjIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisjIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisjIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisjIFVTQS4KKworaW5pdGRkaXIgPSAkKHN5c2NvbmZkaXIpL3JjLmQvaW5pdC5kCisKK0VYVFJBX0RJU1QgPSBhdmFoaS1kYWVtb24uaW4gYXZhaGktZG5zY29uZmQuaW4KKworaW5pdGRfU0NSSVBUUyA9IGF2YWhpLWRhZW1vbiBhdmFoaS1kbnNjb25mZAorCitDTEVBTkZJTEVTID0gYXZhaGktZGFlbW9uIGF2YWhpLWRuc2NvbmZkCisKK2F2YWhpLWRhZW1vbjogYXZhaGktZGFlbW9uLmluCisJJChBTV9WX0dFTilzZWQgXAorCQktZSAncyxAc2JpbmRpclxALCQoc2JpbmRpciksZycgXAorCQktZSAncyxAbG9jYWxzdGF0ZWRpclxALCQobG9jYWxzdGF0ZWRpciksZycgXAorCQkkPCA+ICRAICYmIFwKKwljaG1vZCAreCAkQAorCithdmFoaS1kbnNjb25mZDogYXZhaGktZG5zY29uZmQuaW4KKwkkKEFNX1ZfR0VOKXNlZCBcCisJCS1lICdzLEBzYmluZGlyXEAsJChzYmluZGlyKSxnJyBcCisJCS1lICdzLEBsb2NhbHN0YXRlZGlyXEAsJChsb2NhbHN0YXRlZGlyKSxnJyBcCisJCSQ8ID4gJEAgJiYgXAorCWNobW9kICt4ICRACmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvaW5pdHNjcmlwdC9mZWRvcmEvTWFrZWZpbGUuaW4gYi9hdmFoaS0wLjYuMzEvaW5pdHNjcmlwdC9mZWRvcmEvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JlNjI2YgotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9pbml0c2NyaXB0L2ZlZG9yYS9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDYwNSBAQAorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xMS4zIGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorIworIyBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworIyBVU0EuCisKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK3N1YmRpciA9IGluaXRzY3JpcHQvZmVkb3JhCitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9hY3hfcHRocmVhZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vZ2NjX3N0YWNrX3Byb3RlY3QubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2djY192aXNpYmlsaXR5Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9pbnRsdG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vaW50cm9zcGVjdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbGlidG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHRvcHRpb25zLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9sdHN1Z2FyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9sdHZlcnNpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2x0fm9ic29sZXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9ubHMubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vcHl0aG9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2FjaW5jbHVkZS5tNCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9kb3h5Z2VuLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CithbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKK2FtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCisgICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKKyAgICAqKSBmPSQkcDs7IFwKKyAgZXNhYzsKK2FtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKK2FtX19pbnN0YWxsX21heCA9IDQwCithbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAorICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCithbV9fbm9iYXNlX3N0cmlwID0gXAorICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKK2FtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKKyAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKKyAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMvIC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKKyAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAorICAgIGlmICgrK25bJCQyXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIFwKKyAgICAgIHsgcHJpbnQgJCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKKyAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCithbV9fYmFzZV9saXN0ID0gXAorICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnIHwgXAorICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCithbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyID0geyBcCisgIHRlc3QgLXogIiQkZmlsZXMiIFwKKyAgICB8fCB7IHRlc3QgISAtZCAiJCRkaXIiICYmIHRlc3QgISAtZiAiJCRkaXIiICYmIHRlc3QgISAtciAiJCRkaXIiOyB9IFwKKyAgICB8fCB7IGVjaG8gIiAoIGNkICckJGRpcicgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCisgICAgICAgICAkKGFtX19jZCkgIiQkZGlyIiAmJiBybSAtZiAkJGZpbGVzOyB9OyBcCisgIH0KK2FtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChpbml0ZGRpcikiCitTQ1JJUFRTID0gJChpbml0ZF9TQ1JJUFRTKQorQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCithbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCithbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICIgJEA7CitBTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCithbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfYXRfMCA9IEAKK1NPVVJDRVMgPQorRElTVF9TT1VSQ0VTID0KK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitBQ0xPQ0FMID0gQEFDTE9DQUxACitBTExfTElOR1VBUyA9IEBBTExfTElOR1VBU0AKK0FNVEFSID0gQEFNVEFSQAorQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACitBUiA9IEBBUkAKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBVkFISV9BVVRPSVBEX0dST1VQID0gQEFWQUhJX0FVVE9JUERfR1JPVVBACitBVkFISV9BVVRPSVBEX1VTRVIgPSBAQVZBSElfQVVUT0lQRF9VU0VSQAorQVZBSElfR1JPVVAgPSBAQVZBSElfR1JPVVBACitBVkFISV9QUklWX0FDQ0VTU19HUk9VUCA9IEBBVkFISV9QUklWX0FDQ0VTU19HUk9VUEAKK0FWQUhJX1VTRVIgPSBAQVZBSElfVVNFUkAKK0FXSyA9IEBBV0tACitDQVRBTE9HUyA9IEBDQVRBTE9HU0AKK0NBVE9CSkVYVCA9IEBDQVRPQkpFWFRACitDQyA9IEBDQ0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1hYID0gQENYWEAKK0NYWENQUCA9IEBDWFhDUFBACitDWFhERVBNT0RFID0gQENYWERFUE1PREVACitDWFhGTEFHUyA9IEBDWFhGTEFHU0AKK0NZR1BBVEhfVyA9IEBDWUdQQVRIX1dACitEQVRBRElSTkFNRSA9IEBEQVRBRElSTkFNRUAKK0RCVVNfQ0ZMQUdTID0gQERCVVNfQ0ZMQUdTQAorREJVU19MSUJTID0gQERCVVNfTElCU0AKK0RCVVNfU1lTVEVNX0JVU19ERUZBVUxUX0FERFJFU1MgPSBAREJVU19TWVNURU1fQlVTX0RFRkFVTFRfQUREUkVTU0AKK0RCVVNfU1lTX0RJUiA9IEBEQlVTX1NZU19ESVJACitERUZTID0gQERFRlNACitERVBESVIgPSBAREVQRElSQAorRExMVE9PTCA9IEBETExUT09MQAorRE9YWUdFTl9QQVBFUl9TSVpFID0gQERPWFlHRU5fUEFQRVJfU0laRUAKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRFhfQ09ORklHID0gQERYX0NPTkZJR0AKK0RYX0RPQ0RJUiA9IEBEWF9ET0NESVJACitEWF9ET1QgPSBARFhfRE9UQAorRFhfRE9YWUdFTiA9IEBEWF9ET1hZR0VOQAorRFhfRFZJUFMgPSBARFhfRFZJUFNACitEWF9FR1JFUCA9IEBEWF9FR1JFUEAKK0RYX0VOViA9IEBEWF9FTlZACitEWF9GTEFHX2NoaSA9IEBEWF9GTEFHX2NoaUAKK0RYX0ZMQUdfY2htID0gQERYX0ZMQUdfY2htQAorRFhfRkxBR19kb2MgPSBARFhfRkxBR19kb2NACitEWF9GTEFHX2RvdCA9IEBEWF9GTEFHX2RvdEAKK0RYX0ZMQUdfaHRtbCA9IEBEWF9GTEFHX2h0bWxACitEWF9GTEFHX21hbiA9IEBEWF9GTEFHX21hbkAKK0RYX0ZMQUdfcGRmID0gQERYX0ZMQUdfcGRmQAorRFhfRkxBR19wcyA9IEBEWF9GTEFHX3BzQAorRFhfRkxBR19ydGYgPSBARFhfRkxBR19ydGZACitEWF9GTEFHX3htbCA9IEBEWF9GTEFHX3htbEAKK0RYX0hIQyA9IEBEWF9ISENACitEWF9MQVRFWCA9IEBEWF9MQVRFWEAKK0RYX01BS0VJTkRFWCA9IEBEWF9NQUtFSU5ERVhACitEWF9QREZMQVRFWCA9IEBEWF9QREZMQVRFWEAKK0RYX1BFUkwgPSBARFhfUEVSTEAKK0RYX1BST0pFQ1QgPSBARFhfUFJPSkVDVEAKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRVhFRVhUID0gQEVYRUVYVEAKK0ZHUkVQID0gQEZHUkVQQAorR0FDVVRJTCA9IEBHQUNVVElMQAorR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKK0dMSUIyMF9DRkxBR1MgPSBAR0xJQjIwX0NGTEFHU0AKK0dMSUIyMF9MSUJTID0gQEdMSUIyMF9MSUJTQAorR01PRklMRVMgPSBAR01PRklMRVNACitHTVNHRk1UID0gQEdNU0dGTVRACitHT0JKRUNUX0NGTEFHUyA9IEBHT0JKRUNUX0NGTEFHU0AKK0dPQkpFQ1RfTElCUyA9IEBHT0JKRUNUX0xJQlNACitHUkVQID0gQEdSRVBACitHVEsyMF9DRkxBR1MgPSBAR1RLMjBfQ0ZMQUdTQAorR1RLMjBfTElCUyA9IEBHVEsyMF9MSUJTQAorR1RLMzBfQ0ZMQUdTID0gQEdUSzMwX0NGTEFHU0AKK0dUSzMwX0xJQlMgPSBAR1RLMzBfTElCU0AKK0hPV0xfQ09NUEFUX1ZFUlNJT04gPSBASE9XTF9DT01QQVRfVkVSU0lPTkAKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSU5TVE9CSkVYVCA9IEBJTlNUT0JKRVhUQAorSU5UTExJQlMgPSBASU5UTExJQlNACitJTlRMVE9PTF9FWFRSQUNUID0gQElOVExUT09MX0VYVFJBQ1RACitJTlRMVE9PTF9NRVJHRSA9IEBJTlRMVE9PTF9NRVJHRUAKK0lOVExUT09MX1BFUkwgPSBASU5UTFRPT0xfUEVSTEAKK0lOVExUT09MX1VQREFURSA9IEBJTlRMVE9PTF9VUERBVEVACitJTlRST1NQRUNUSU9OX0NGTEFHUyA9IEBJTlRST1NQRUNUSU9OX0NGTEFHU0AKK0lOVFJPU1BFQ1RJT05fQ09NUElMRVIgPSBASU5UUk9TUEVDVElPTl9DT01QSUxFUkAKK0lOVFJPU1BFQ1RJT05fR0VORVJBVEUgPSBASU5UUk9TUEVDVElPTl9HRU5FUkFURUAKK0lOVFJPU1BFQ1RJT05fR0lSRElSID0gQElOVFJPU1BFQ1RJT05fR0lSRElSQAorSU5UUk9TUEVDVElPTl9MSUJTID0gQElOVFJPU1BFQ1RJT05fTElCU0AKK0lOVFJPU1BFQ1RJT05fTUFLRUZJTEUgPSBASU5UUk9TUEVDVElPTl9NQUtFRklMRUAKK0lOVFJPU1BFQ1RJT05fU0NBTk5FUiA9IEBJTlRST1NQRUNUSU9OX1NDQU5ORVJACitJTlRST1NQRUNUSU9OX1RZUEVMSUJESVIgPSBASU5UUk9TUEVDVElPTl9UWVBFTElCRElSQAorTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMSUJBVkFISV9DTElFTlRfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NMSUVOVF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9DT01NT05fVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NPTU1PTl9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9DT01QQVRfSE9XTF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ09NUEFUX0hPV0xfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfQ09NUEFUX0xJQkROU19TRF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ09NUEFUX0xJQkROU19TRF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9DT1JFX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DT1JFX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0dMSUJfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0dMSUJfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfR09CSkVDVF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfR09CSkVDVF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9RVDNfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX1FUM19WRVJTSU9OX0lORk9ACitMSUJBVkFISV9RVDRfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX1FUNF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9VSV9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfVUlfVkVSU0lPTl9JTkZPQAorTElCREFFTU9OX0NGTEFHUyA9IEBMSUJEQUVNT05fQ0ZMQUdTQAorTElCREFFTU9OX0xJQlMgPSBATElCREFFTU9OX0xJQlNACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQExJQlNACitMSUJUT09MID0gQExJQlRPT0xACitMSVBPID0gQExJUE9ACitMTl9TID0gQExOX1NACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACitNQ1MgPSBATUNTQAorTURBU1NFTUJMRVIgPSBATURBU1NFTUJMRVJACitNS0RJUl9QID0gQE1LRElSX1BACitNS0lOU1RBTExESVJTID0gQE1LSU5TVEFMTERJUlNACitNT0NfUVQzID0gQE1PQ19RVDNACitNT0NfUVQ0ID0gQE1PQ19RVDRACitNT05PRE9DRVIgPSBATU9OT0RPQ0VSQAorTU9OT0RPQ19DRkxBR1MgPSBATU9OT0RPQ19DRkxBR1NACitNT05PRE9DX0RJUiA9IEBNT05PRE9DX0RJUkAKK01PTk9ET0NfTElCUyA9IEBNT05PRE9DX0xJQlNACitNU0dGTVQgPSBATVNHRk1UQAorTVNHRk1UX09QVFMgPSBATVNHRk1UX09QVFNACitNU0dNRVJHRSA9IEBNU0dNRVJHRUAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPVE9PTCA9IEBPVE9PTEAKK09UT09MNjQgPSBAT1RPT0w2NEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAorUEtHX0NPTkZJR19MSUJESVIgPSBAUEtHX0NPTkZJR19MSUJESVJACitQS0dfQ09ORklHX1BBVEggPSBAUEtHX0NPTkZJR19QQVRIQAorUE9GSUxFUyA9IEBQT0ZJTEVTQAorUE9TVUIgPSBAUE9TVUJACitQT19JTl9EQVRBRElSX0ZBTFNFID0gQFBPX0lOX0RBVEFESVJfRkFMU0VACitQT19JTl9EQVRBRElSX1RSVUUgPSBAUE9fSU5fREFUQURJUl9UUlVFQAorUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAorUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACitQVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAorUFlUSE9OID0gQFBZVEhPTkAKK1BZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACitQWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAorUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAorUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACitRVDNfQ0ZMQUdTID0gQFFUM19DRkxBR1NACitRVDNfTElCUyA9IEBRVDNfTElCU0AKK1FUNF9DRkxBR1MgPSBAUVQ0X0NGTEFHU0AKK1FUNF9MSUJTID0gQFFUNF9MSUJTQAorUkFOTElCID0gQFJBTkxJQkAKK1NFRCA9IEBTRURACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU1RPVyA9IEBTVE9XQAorU1RSSVAgPSBAU1RSSVBACitVU0VfTkxTID0gQFVTRV9OTFNACitWRVJTSU9OID0gQFZFUlNJT05ACitWSVNJQklMSVRZX0hJRERFTl9DRkxBR1MgPSBAVklTSUJJTElUWV9ISURERU5fQ0ZMQUdTQAorWEdFVFRFWFQgPSBAWEdFVFRFWFRACitYTUxfQ0ZMQUdTID0gQFhNTF9DRkxBR1NACitYTUxfTElCUyA9IEBYTUxfTElCU0AKK2Fic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACithYnNfc3JjZGlyID0gQGFic19zcmNkaXJACithYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACithYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKK2FjX2N0X0FSID0gQGFjX2N0X0FSQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9DWFggPSBAYWNfY3RfQ1hYQAorYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAorYWN4X3B0aHJlYWRfY29uZmlnID0gQGFjeF9wdGhyZWFkX2NvbmZpZ0AKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYXZhaGlfcnVudGltZV9kaXIgPSBAYXZhaGlfcnVudGltZV9kaXJACithdmFoaV9zb2NrZXQgPSBAYXZhaGlfc29ja2V0QAorYXZhaGlsb2NhbGVkaXIgPSBAYXZhaGlsb2NhbGVkaXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitidWlsZGRpciA9IEBidWlsZGRpckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZG9jZGlyID0gQGRvY2RpckAKK2R2aWRpciA9IEBkdmlkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2hhdmVfcGtnX2NvbmZpZyA9IEBoYXZlX3BrZ19jb25maWdACitoYXZlX3htbHRvbWFuID0gQGhhdmVfeG1sdG9tYW5ACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAoraW50ZXJmYWNlc2RpciA9IEBpbnRlcmZhY2VzZGlyQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3BrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACitwa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3BzZGlyID0gQHBzZGlyQAorcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKK3B5dGhvbmRpciA9IEBweXRob25kaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACitzeXN0ZW1kc3lzdGVtdW5pdGRpciA9IEBzeXN0ZW1kc3lzdGVtdW5pdGRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAoraW5pdGRkaXIgPSAkKHN5c2NvbmZkaXIpL3JjLmQvaW5pdC5kCitFWFRSQV9ESVNUID0gYXZhaGktZGFlbW9uLmluIGF2YWhpLWRuc2NvbmZkLmluCitpbml0ZF9TQ1JJUFRTID0gYXZhaGktZGFlbW9uIGF2YWhpLWRuc2NvbmZkCitDTEVBTkZJTEVTID0gYXZhaGktZGFlbW9uIGF2YWhpLWRuc2NvbmZkCithbGw6IGFsbC1hbQorCisuU1VGRklYRVM6CiskKHNyY2RpcikvTWFrZWZpbGUuaW46ICAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAorCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiBpbml0c2NyaXB0L2ZlZG9yYS9NYWtlZmlsZSc7IFwKKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gaW5pdHNjcmlwdC9mZWRvcmEvTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6ICAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6ICAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKGFtX19hY2xvY2FsX200X2RlcHMpOgoraW5zdGFsbC1pbml0ZFNDUklQVFM6ICQoaW5pdGRfU0NSSVBUUykKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwl0ZXN0IC16ICIkKGluaXRkZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQoaW5pdGRkaXIpIgorCUBsaXN0PSckKGluaXRkX1NDUklQVFMpJzsgdGVzdCAtbiAiJChpbml0ZGRpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAorCSAgaWYgdGVzdCAtZiAiJCRkJCRwIjsgdGhlbiBlY2hvICIkJGQkJHAiOyBlY2hvICIkJHAiOyBlbHNlIDo7IGZpOyBcCisJZG9uZSB8IFwKKwlzZWQgLWUgJ3A7cywuKi8sLDtuJyBcCisJICAgIC1lICdoO3N8Lip8LnwnIFwKKwkgICAgLWUgJ3A7eDtzLC4qLywsOyQodHJhbnNmb3JtKScgfCBzZWQgJ047TjtOO3MsXG4sICxnJyB8IFwKKwkkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiOyBkaXJzWyIuIl0gPSAxOyB9IFwKKwkgIHsgZD0kJDM7IGlmIChkaXJzW2RdICE9IDEpIHsgcHJpbnQgImQiLCBkOyBkaXJzW2RdID0gMSB9IFwKKwkgICAgaWYgKCQkMiA9PSAkJDQpIHsgZmlsZXNbZF0gPSBmaWxlc1tkXSAiICIgJCQxOyBcCisJICAgICAgaWYgKCsrbltkXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIHsgXAorCQlwcmludCAiZiIsIGQsIGZpbGVzW2RdOyBuW2RdID0gMDsgZmlsZXNbZF0gPSAiIiB9IH0gXAorCSAgICBlbHNlIHsgcHJpbnQgImYiLCBkICIvIiAkJDQsICQkMSB9IH0gXAorCSAgRU5EIHsgZm9yIChkIGluIGZpbGVzKSBwcmludCAiZiIsIGQsIGZpbGVzW2RdIH0nIHwgXAorCXdoaWxlIHJlYWQgdHlwZSBkaXIgZmlsZXM7IGRvIFwKKwkgICAgIGlmIHRlc3QgIiQkZGlyIiA9IC47IHRoZW4gZGlyPTsgZWxzZSBkaXI9LyQkZGlyOyBmaTsgXAorCSAgICAgdGVzdCAteiAiJCRmaWxlcyIgfHwgeyBcCisJICAgICAgIGVjaG8gIiAkKElOU1RBTExfU0NSSVBUKSAkJGZpbGVzICckKERFU1RESVIpJChpbml0ZGRpcikkJGRpciciOyBcCisJICAgICAgICQoSU5TVEFMTF9TQ1JJUFQpICQkZmlsZXMgIiQoREVTVERJUikkKGluaXRkZGlyKSQkZGlyIiB8fCBleGl0ICQkPzsgXAorCSAgICAgfSBcCisJOyBkb25lCisKK3VuaW5zdGFsbC1pbml0ZFNDUklQVFM6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChpbml0ZF9TQ1JJUFRTKSc7IHRlc3QgLW4gIiQoaW5pdGRkaXIpIiB8fCBleGl0IDA7IFwKKwlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgXAorCSAgICAgICBzZWQgLWUgJ3MsLiovLCw7JCh0cmFuc2Zvcm0pJ2A7IFwKKwlkaXI9JyQoREVTVERJUikkKGluaXRkZGlyKSc7ICQoYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpcikKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKK3RhZ3M6IFRBR1MKK1RBR1M6CisKK2N0YWdzOiBDVEFHUworQ1RBR1M6CisKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUgJChTQ1JJUFRTKQoraW5zdGFsbGRpcnM6CisJZm9yIGRpciBpbiAiJChERVNURElSKSQoaW5pdGRkaXIpIjsgZG8gXAorCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAorCWRvbmUKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgICAgIGluc3RhbGw7IFwKKwllbHNlIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAorCWZpCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENMRUFORklMRVMpIiB8fCBybSAtZiAkKENMRUFORklMRVMpCisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKK2NsZWFuOiBjbGVhbi1hbQorCitjbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIG1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1nZW5lcmljCisKK2R2aTogZHZpLWFtCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1hbQorCitodG1sLWFtOgorCitpbmZvOiBpbmZvLWFtCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1pbml0ZFNDUklQVFMKKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCisKK2luc3RhbGwtZHZpLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06CisKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCisKK2luc3RhbGwtaHRtbC1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1pbmZvLWFtOgorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCisKK2luc3RhbGwtcGRmLWFtOgorCitpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCisKK2luc3RhbGwtcHMtYW06CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtaW5pdGRTQ1JJUFRTCisKKy5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKKworLlBIT05ZOiBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBcCisJZGlzdGNsZWFuIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIGRpc3RkaXIgZHZpIFwKKwlkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gXAorCWluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gXAorCWluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBcCisJaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLWluaXRkU0NSSVBUUyBpbnN0YWxsLW1hbiBcCisJaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKKwlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAorCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKKwltb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCisJdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSB1bmluc3RhbGwtaW5pdGRTQ1JJUFRTCisKKworYXZhaGktZGFlbW9uOiBhdmFoaS1kYWVtb24uaW4KKwkkKEFNX1ZfR0VOKXNlZCBcCisJCS1lICdzLEBzYmluZGlyXEAsJChzYmluZGlyKSxnJyBcCisJCS1lICdzLEBsb2NhbHN0YXRlZGlyXEAsJChsb2NhbHN0YXRlZGlyKSxnJyBcCisJCSQ8ID4gJEAgJiYgXAorCWNobW9kICt4ICRACisKK2F2YWhpLWRuc2NvbmZkOiBhdmFoaS1kbnNjb25mZC5pbgorCSQoQU1fVl9HRU4pc2VkIFwKKwkJLWUgJ3MsQHNiaW5kaXJcQCwkKHNiaW5kaXIpLGcnIFwKKwkJLWUgJ3MsQGxvY2Fsc3RhdGVkaXJcQCwkKGxvY2Fsc3RhdGVkaXIpLGcnIFwKKwkJJDwgPiAkQCAmJiBcCisJY2htb2QgK3ggJEAKKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2luaXRzY3JpcHQvZmVkb3JhL2F2YWhpLWRhZW1vbi5pbiBiL2F2YWhpLTAuNi4zMS9pbml0c2NyaXB0L2ZlZG9yYS9hdmFoaS1kYWVtb24uaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE4ZjQzMAotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9pbml0c2NyaXB0L2ZlZG9yYS9hdmFoaS1kYWVtb24uaW4KQEAgLTAsMCArMSwxMTYgQEAKKyMhL2Jpbi9zaAorIworIyBhdmFoaS1kYWVtb246IFN0YXJ0cyB0aGUgQXZhaGkgbUROUy9ETlMtU0QgU3RhY2sKKyMKKyMgY2hrY29uZmlnOiAgIDM0NSAyNCAwMgorIyBkZXNjcmlwdGlvbjogVGhpcyBpcyBhIGRhZW1vbiB3aGljaCBydW5zIG9uIGNsaWVudCBtYWNoaW5lcyB0byBcCisjICAgICAgICAgICAgICBwZXJmb3JtIFplcm9jb25mIHNlcnZpY2UgZGlzY292ZXJ5IG9uIGEgXAorIyAgICAgICAgICAgICAgbmV0d29yay4gYXZhaGktZGFlbW9uIG11c3QgYmUgcnVubmluZyBvbiBzeXN0ZW1zIHRoYXQgXAorIyAgICAgICAgICAgICAgdXNlIEF2YWhpIGZvciBzZXJ2aWNlIGRpc2NvdmVyeS4gQXZhaGktZGFlbW9uIHNob3VsZCBcCisjICAgICAgICAgICAgICBub3QgYmUgcnVubmluZyBvdGhlcndpc2UuCisjIHByb2Nlc3NuYW1lOiBhdmFoaS1kYWVtb24KKyMgcGlkZmlsZTogICAgIEBsb2NhbHN0YXRlZGlyQC9ydW4vYXZhaGktZGFlbW9uL3BpZAorCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFJlcXVpcmVkLVN0YXJ0OiAgICBtZXNzYWdlYnVzCisjIFJlcXVpcmVkLVN0b3A6ICAgICBtZXNzYWdlYnVzCisjIFNob3VsZC1TdGFydDogICAgICAkc3lzbG9nICRuZXR3b3JrICRsb2NhbF9mcworIyBTaG91bGQtU3RvcDogICAgICAgJHN5c2xvZyAkbG9jYWxfZnMKKyMgRGVmYXVsdC1TdGFydDogICAgIDMgNCA1CisjIERlZmF1bHQtU3RvcDogICAgICAwIDEgMiA2CisjIFNob3J0LURlc2NyaXB0aW9uOiBTdGFydHMgdGhlIEF2YWhpIERhZW1vbgorIyBEZXNjcmlwdGlvbjogICAgICAgVGhpcyBpcyBhIGRhZW1vbiB3aGljaCBydW5zIG9uIGNsaWVudCBtYWNoaW5lcyB0bworIyAgICAgICAgICAgICAgICAgICAgcGVyZm9ybSBaZXJvY29uZiBzZXJ2aWNlIGRpc2NvdmVyeSBvbiBhCisjICAgICAgICAgICAgICAgICAgICBuZXR3b3JrLiBhdmFoaS1kYWVtb24gbXVzdCBiZSBydW5uaW5nIG9uIHN5c3RlbXMKKyMgICAgICAgICAgICAgICAgICAgIHRoYXQgdXNlIEF2YWhpIGZvciBzZXJ2aWNlIGRpc2NvdmVyeS4KKyMgICAgICAgICAgICAgICAgICAgIEF2YWhpLWRhZW1vbiBzaG91bGQgbm90IGJlIHJ1bm5pbmcgb3RoZXJ3aXNlLgorIyMjIEVORCBJTklUIElORk8KKworQVZBSElfQklOPUBzYmluZGlyQC9hdmFoaS1kYWVtb24KK0FWQUhJX09QVFM9Ii1EIgorCitpZiBbICIkMSIgPSAnc3RhdHVzJyBdOyB0aGVuCisgICAgdGVzdCAteCAkQVZBSElfQklOIHx8IGV4aXQgNAorZWxzZQorICAgIHRlc3QgLXggJEFWQUhJX0JJTiB8fCBleGl0IDUKK2ZpCisKKyMgU291cmNlIGZ1bmN0aW9uIGxpYnJhcnkuCisuIC9ldGMvaW5pdC5kL2Z1bmN0aW9ucworLiAvZXRjL3N5c2NvbmZpZy9uZXR3b3JrCisKK0xPQ0tGSUxFPUBsb2NhbHN0YXRlZGlyQC9sb2NrL3N1YnN5cy9hdmFoaS1kYWVtb24KK1BJREZJTEU9QGxvY2Fsc3RhdGVkaXJAL3J1bi9hdmFoaS1kYWVtb24vcGlkCitSRVRWQUw9MAorCitiYXNlPSR7MCMjKi99CisKK3N0YXJ0KCkgeworICAgICMgQ2hlY2sgdGhhdCBuZXR3b3JraW5nIGlzIGNvbmZpZ3VyZWQuCisgICAgWyAke05FVFdPUktJTkd9ID0gIm5vIiBdICYmIGV4aXQgMQorCisJZWNobyAtbiAkIlN0YXJ0aW5nIEF2YWhpIGRhZW1vbi4uLiAiCisJaWYgWyAtcyAvZXRjL2xvY2FsdGltZSBdOyB0aGVuCisJICAgIGNwIC1mcCAvZXRjL2xvY2FsdGltZSAvZXRjL2F2YWhpL2V0YyA+L2Rldi9udWxsIDI+JjEKKwlmaTsKKyAgICAgICAgZGFlbW9uIC0tcGlkZmlsZT0ke1BJREZJTEV9ICRBVkFISV9CSU4gJEFWQUhJX09QVFMKKyAgICAgICAgUkVUVkFMPSQ/CisgICAgICAgIGVjaG8KKyAgICAgICAgWyAkUkVUVkFMIC1lcSAwIF0gJiYgdG91Y2ggJHtMT0NLRklMRX0KKwlyZXR1cm4gJFJFVFZBTAorfQorCitzdG9wKCkgeworICAgICAgICBlY2hvIC1uICQiU2h1dHRpbmcgZG93biBBdmFoaSBkYWVtb246ICIKKyAgICAgICAga2lsbHByb2MgLXAgJHtQSURGSUxFfSAkQVZBSElfQklOCisgICAgICAgIFJFVFZBTD0kPworICAgICAgICBbICRSRVRWQUwgLWVxIDAgXSAmJiBybSAtZiAke0xPQ0tGSUxFfSAke1BJREZJTEV9CisgICAgICAgIGVjaG8KKwlyZXR1cm4gJFJFVFZBTAorfQorCityZWxvYWQoKSB7CisgICAgICAgIGVjaG8gLW4gJCJSZWxvYWRpbmcgQXZhaGkgZGFlbW9uLi4uICIKKyAgICAgICAga2lsbHByb2MgLXAgJHtQSURGSUxFfSAkQVZBSElfQklOIC1IVVAKKwlSRVRWQUw9JD8KKwllY2hvCisJcmV0dXJuICRSRVRWQUwKK30KKworcmVzdGFydCgpIHsKKwlzdG9wCisJc3RhcnQKK30KKworUkVUVkFMPTAKKworIyBTZWUgaG93IHdlIHdlcmUgY2FsbGVkLgorY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorCXN0YXJ0CisJOzsKKyAgc3RvcCkKKwlzdG9wCisJOzsKKyAgc3RhdHVzKQorCXN0YXR1cyAtcCAke1BJREZJTEV9ICRBVkFISV9CSU4KKyAgICAgICAgUkVUVkFMPSQ/CisJOzsKKyAgcmVzdGFydCkKKwlyZXN0YXJ0CisJOzsKKyAgcmVsb2FkKQorICAgICAgICByZWxvYWQKKwk7OworICBjb25kcmVzdGFydCkKKyAgCWlmIFsgLWYgJExPQ0tGSUxFIF07IHRoZW4KKwkJcmVzdGFydAorCWZpCisJOzsKKyAgKikKKwllY2hvICQiVXNhZ2U6ICQwIHtzdGFydHxzdG9wfHN0YXR1c3xyZXN0YXJ0fGNvbmRyZXN0YXJ0fSIKKwlleGl0IDIKKyAgICAgICAgOzsKK2VzYWMKKworZXhpdCAkUkVUVkFMCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvaW5pdHNjcmlwdC9mZWRvcmEvYXZhaGktZG5zY29uZmQuaW4gYi9hdmFoaS0wLjYuMzEvaW5pdHNjcmlwdC9mZWRvcmEvYXZhaGktZG5zY29uZmQuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ0MTgyZQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9pbml0c2NyaXB0L2ZlZG9yYS9hdmFoaS1kbnNjb25mZC5pbgpAQCAtMCwwICsxLDExMyBAQAorIyEvYmluL3NoCisjCisjIGF2YWhpLWRuc2NvbmZkOiBTdGFydHMgdGhlIEF2YWhpIEROUyBDb25maWd1cmF0aW9uIERhZW1vbgorIworIyBjaGtjb25maWc6ICAgLSA5NiAwMgorIyBkZXNjcmlwdGlvbjogYXZhaGktZG5zY29uZmQgY29ubmVjdHMgdG8gYSBydW5uaW5nIGF2YWhpLWRhZW1vbiBhbmQgXAorIyAgICAgICAgICAgICAgcnVucyB0aGUgc2NyaXB0IC9ldGMvYXZhaGkvZG5zY29uZi5hY3Rpb24gZm9yIGVhY2ggXAorIyAgICAgICAgICAgICAgdW5pY2FzdCBETlMgc2VydmVyIHRoYXQgaXMgYW5ub3VuY2VkIG9uIHRoZSBsb2NhbCBcCisjICAgICAgICAgICAgICBMQU4uIFRoaXMgaXMgdXNlZnVsIGZvciBjb25maWd1cmluZyB1bmljYXN0IEROUyBzZXJ2ZXJzIFwKKyMgICAgICAgICAgICAgIGluIGEgREhDUC1saWtlIGZhc2hpb24gd2l0aCBtRE5TLgorIyBwcm9jZXNzbmFtZTogYXZhaGktZG5zY29uZmQKKyMgcGlkZmlsZTogICAgIEBsb2NhbHN0YXRlZGlyQC9ydW4vYXZhaGktZG5zY29uZmQucGlkCisKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUmVxdWlyZWQtU3RhcnQ6ICAgIGF2YWhpLWRhZW1vbgorIyBSZXF1aXJlZC1TdG9wOiAgICAgYXZhaGktZGFlbW9uCisjIFNob3VsZC1TdGFydDogICAgICAkc3lzbG9nICRuZXR3b3JrICRsb2NhbF9mcworIyBTaG91bGQtU3RvcDogICAgICAgJHN5c2xvZyAkbG9jYWxfZnMKKyMgRGVmYXVsdC1TdGFydDogICAgIDMgNCA1CisjIERlZmF1bHQtU3RvcDogICAgICAwIDEgMiA2CisjIFNob3J0LURlc2NyaXB0aW9uOiBTdGFydHMgdGhlIEF2YWhpIEROUyBDb25maWd1cmF0aW9uIERhZW1vbgorIyBEZXNjcmlwdGlvbjogICAgICAgYXZhaGktZG5zY29uZmQgY29ubmVjdHMgdG8gYSBydW5uaW5nIGF2YWhpLWRhZW1vbgorIyAgICAgICAgICAgICAgICAgICAgYW5kIHJ1bnMgdGhlIHNjcmlwdCAvZXRjL2F2YWhpL2Ruc2NvbmYuYWN0aW9uIGZvcgorIyAgICAgICAgICAgICAgICAgICAgZWFjaCB1bmljYXN0IEROUyBzZXJ2ZXIgdGhhdCBpcyBhbm5vdW5jZWQgb24gdGhlCisjICAgICAgICAgICAgICAgICAgICBsb2NhbCBMQU4uIFRoaXMgaXMgdXNlZnVsIGZvciBjb25maWd1cmluZyB1bmljYXN0CisjICAgICAgICAgICAgICAgICAgICBETlMgc2VydmVycyBpbiBhIERIQ1AtbGlrZSBmYXNoaW9uIHdpdGggbUROUy4KKyMjIyBFTkQgSU5JVCBJTkZPCisKK0FWQUhJX0JJTj1Ac2JpbmRpckAvYXZhaGktZG5zY29uZmQKK0FWQUhJX09QVFM9Ii1EIgorCitpZiBbICIkMSIgPSAnc3RhdHVzJyBdOyB0aGVuCisgICAgdGVzdCAteCAkQVZBSElfQklOIHx8IGV4aXQgNAorZWxzZQorICAgIHRlc3QgLXggJEFWQUhJX0JJTiB8fCBleGl0IDUKK2ZpCisKKyMgU291cmNlIGZ1bmN0aW9uIGxpYnJhcnkuCisuIC9ldGMvaW5pdC5kL2Z1bmN0aW9ucworLiAvZXRjL3N5c2NvbmZpZy9uZXR3b3JrCisKK0xPQ0tGSUxFPUBsb2NhbHN0YXRlZGlyQC9sb2NrL3N1YnN5cy9hdmFoaS1kbnNjb25mZAorUElERklMRT1AbG9jYWxzdGF0ZWRpckAvcnVuL2F2YWhpLWRuc2NvbmZkLnBpZAorUkVUVkFMPTAKKworYmFzZT0kezAjIyovfQorCitzdGFydCgpIHsKKyAgICAjIENoZWNrIHRoYXQgbmV0d29ya2luZyBpcyBjb25maWd1cmVkLgorICAgIFsgJHtORVRXT1JLSU5HfSA9ICJubyIgXSAmJiBleGl0IDEKKworCWVjaG8gLW4gJCJTdGFydGluZyBBdmFoaSBETlMgZGFlbW9uLi4uICIKKyAgICAgICAgZGFlbW9uIC0tcGlkZmlsZT0ke1BJREZJTEV9ICRBVkFISV9CSU4gJEFWQUhJX09QVFMKKyAgICAgICAgUkVUVkFMPSQ/CisgICAgICAgIGVjaG8KKyAgICAgICAgWyAkUkVUVkFMIC1lcSAwIF0gJiYgdG91Y2ggJHtMT0NLRklMRX0KKyAgICAgICAgcmV0dXJuICRSRVRWQUwKK30KKworc3RvcCgpIHsKKyAgICAgICAgZWNobyAtbiAkIlNodXR0aW5nIGRvd24gQXZhaGkgRE5TIGRhZW1vbjogIgorICAgICAgICBraWxscHJvYyAtcCAke1BJREZJTEV9ICRBVkFISV9CSU4KKyAgICAgICAgUkVUVkFMPSQ/CisgICAgICAgIFsgJFJFVFZBTCAtZXEgMCBdICYmIHJtIC1mICR7TE9DS0ZJTEV9ICR7UElERklMRX0KKyAgICAgICAgZWNobworICAgICAgICByZXR1cm4gJFJFVFZBTAorfQorCityZWxvYWQoKSB7CisgICAgICAgIGVjaG8gLW4gJCJSZWxvYWRpbmcgQXZhaGkgRE5TIGRhZW1vbi4uLiAiCisgICAgICAgIGtpbGxwcm9jIC1wICR7UElERklMRX0gJEFWQUhJX0JJTiAtSFVQCisgICAgICAgIFJFVFZBTD0kPworICAgICAgICBlY2hvCisgICAgICAgIHJldHVybiAkUkVUVkFMCit9CisKK3Jlc3RhcnQoKSB7CisJc3RvcAorCXN0YXJ0Cit9CisKK1JFVFZBTD0wCisKKyMgU2VlIGhvdyB3ZSB3ZXJlIGNhbGxlZC4KK2Nhc2UgIiQxIiBpbgorICBzdGFydCkKKwlzdGFydAorCTs7CisgIHN0b3ApCisJc3RvcAorCTs7CisgIHN0YXR1cykKKyAgICAgICAgc3RhdHVzIC1wICR7UElERklMRX0gJEFWQUhJX0JJTgorICAgICAgICBSRVRWQUw9JD8KKwk7OworICByZXN0YXJ0KQorCXJlc3RhcnQKKwk7OworICByZWxvYWQpCisgICAgICAgIHJlbG9hZAorCTs7CisgIGNvbmRyZXN0YXJ0KQorICAJaWYgWyAtZiAkTE9DS0ZJTEUgXTsgdGhlbgorCQlyZXN0YXJ0CisJZmkKKwk7OworICAqKQorCWVjaG8gJCJVc2FnZTogJDAge3N0YXJ0fHN0b3B8c3RhdHVzfHJlc3RhcnR8Y29uZHJlc3RhcnR9IgorCWV4aXQgMgorCTs7Citlc2FjCisKK2V4aXQgJFJFVFZBTApkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2luaXRzY3JpcHQvZnJlZWJzZC9NYWtlZmlsZS5hbSBiL2F2YWhpLTAuNi4zMS9pbml0c2NyaXB0L2ZyZWVic2QvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMyODMwZQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9pbml0c2NyaXB0L2ZyZWVic2QvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSw0MSBAQAorIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKyMKKyMgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyMgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyMgVVNBLgorCitpbml0ZGRpciA9ICQoc3lzY29uZmRpcikvcmMuZAorCitFWFRSQV9ESVNUID0gXAorCWF2YWhpLWRhZW1vbi5zaC5pbiBcCisJYXZhaGktZG5zY29uZmQuc2guaW4KKworaW5pdGRfU0NSSVBUUyA9IFwKKwlhdmFoaS1kYWVtb24uc2ggXAorCWF2YWhpLWRuc2NvbmZkLnNoCisKK0NMRUFORklMRVMgPSBcCisJYXZhaGktZGFlbW9uLnNoIFwKKwlhdmFoaS1kbnNjb25mZC5zaAorCithdmFoaS1kYWVtb24uc2g6IGF2YWhpLWRhZW1vbi5zaC5pbgorCXNlZCAtZSAncyxAc2JpbmRpclxALCQoc2JpbmRpciksZycgJDwgPiAkQAorCWNobW9kICt4ICRACisKK2F2YWhpLWRuc2NvbmZkLnNoOiBhdmFoaS1kbnNjb25mZC5zaC5pbgorCXNlZCBcCisJLWUgJ3MsQHNiaW5kaXJcQCwkKHNiaW5kaXIpLGcnIFwKKwktZSAncyxAc3lzY29uZmRpclxALCQoc3lzY29uZmRpciksZycgXAorCSQ8ID4gJEAKKwljaG1vZCAreCAkQApkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2luaXRzY3JpcHQvZnJlZWJzZC9NYWtlZmlsZS5pbiBiL2F2YWhpLTAuNi4zMS9pbml0c2NyaXB0L2ZyZWVic2QvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU1ZGY2MAotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9pbml0c2NyaXB0L2ZyZWVic2QvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw2MTEgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEuMyBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKyMKKyMgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyMgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyMgVVNBLgorCitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitzdWJkaXIgPSBpbml0c2NyaXB0L2ZyZWVic2QKK0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbgorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL2FjeF9wdGhyZWFkLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9nY2Nfc3RhY2tfcHJvdGVjdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vZ2NjX3Zpc2liaWxpdHkubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2ludGx0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9pbnRyb3NwZWN0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9sdG9wdGlvbnMubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2x0c3VnYXIubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2x0dmVyc2lvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHR+b2Jzb2xldGUubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL25scy5tNCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9weXRob24ubTQgXAorCSQodG9wX3NyY2RpcikvYWNpbmNsdWRlLm00ICQodG9wX3NyY2RpcikvY29tbW9uL2RveHlnZW4ubTQgXAorCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCithbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQoQUNMT0NBTF9NNCkKK21raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCitDT05GSUdfQ0xFQU5fRklMRVMgPQorQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KK2FtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOworYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKKyAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAorICAgICopIGY9JCRwOzsgXAorICBlc2FjOworYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOworYW1fX2luc3RhbGxfbWF4ID0gNDAKK2FtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCisgIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKK2FtX19ub2Jhc2Vfc3RyaXAgPSBcCisgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgorYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAorICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAorICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAorICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCisgICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAorICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAorICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKK2FtX19iYXNlX2xpc3QgPSBcCisgIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCisgIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKK2FtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIgPSB7IFwKKyAgdGVzdCAteiAiJCRmaWxlcyIgXAorICAgIHx8IHsgdGVzdCAhIC1kICIkJGRpciIgJiYgdGVzdCAhIC1mICIkJGRpciIgJiYgdGVzdCAhIC1yICIkJGRpciI7IH0gXAorICAgIHx8IHsgZWNobyAiICggY2QgJyQkZGlyJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKKyAgICAgICAgICQoYW1fX2NkKSAiJCRkaXIiICYmIHJtIC1mICQkZmlsZXM7IH07IFwKKyAgfQorYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKGluaXRkZGlyKSIKK1NDUklQVFMgPSAkKGluaXRkX1NDUklQVFMpCitBTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKK2FtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKK2FtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgIiAkQDsKK0FNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKK2FtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCithbV9fdl9hdF8wID0gQAorU09VUkNFUyA9CitESVNUX1NPVVJDRVMgPQorRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FMTF9MSU5HVUFTID0gQEFMTF9MSU5HVUFTQAorQU1UQVIgPSBAQU1UQVJACitBTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKK0FSID0gQEFSQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FWQUhJX0FVVE9JUERfR1JPVVAgPSBAQVZBSElfQVVUT0lQRF9HUk9VUEAKK0FWQUhJX0FVVE9JUERfVVNFUiA9IEBBVkFISV9BVVRPSVBEX1VTRVJACitBVkFISV9HUk9VUCA9IEBBVkFISV9HUk9VUEAKK0FWQUhJX1BSSVZfQUNDRVNTX0dST1VQID0gQEFWQUhJX1BSSVZfQUNDRVNTX0dST1VQQAorQVZBSElfVVNFUiA9IEBBVkFISV9VU0VSQAorQVdLID0gQEFXS0AKK0NBVEFMT0dTID0gQENBVEFMT0dTQAorQ0FUT0JKRVhUID0gQENBVE9CSkVYVEAKK0NDID0gQENDQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RBVEFESVJOQU1FID0gQERBVEFESVJOQU1FQAorREJVU19DRkxBR1MgPSBAREJVU19DRkxBR1NACitEQlVTX0xJQlMgPSBAREJVU19MSUJTQAorREJVU19TWVNURU1fQlVTX0RFRkFVTFRfQUREUkVTUyA9IEBEQlVTX1NZU1RFTV9CVVNfREVGQVVMVF9BRERSRVNTQAorREJVU19TWVNfRElSID0gQERCVVNfU1lTX0RJUkAKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitETExUT09MID0gQERMTFRPT0xACitET1hZR0VOX1BBUEVSX1NJWkUgPSBARE9YWUdFTl9QQVBFUl9TSVpFQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitEWF9DT05GSUcgPSBARFhfQ09ORklHQAorRFhfRE9DRElSID0gQERYX0RPQ0RJUkAKK0RYX0RPVCA9IEBEWF9ET1RACitEWF9ET1hZR0VOID0gQERYX0RPWFlHRU5ACitEWF9EVklQUyA9IEBEWF9EVklQU0AKK0RYX0VHUkVQID0gQERYX0VHUkVQQAorRFhfRU5WID0gQERYX0VOVkAKK0RYX0ZMQUdfY2hpID0gQERYX0ZMQUdfY2hpQAorRFhfRkxBR19jaG0gPSBARFhfRkxBR19jaG1ACitEWF9GTEFHX2RvYyA9IEBEWF9GTEFHX2RvY0AKK0RYX0ZMQUdfZG90ID0gQERYX0ZMQUdfZG90QAorRFhfRkxBR19odG1sID0gQERYX0ZMQUdfaHRtbEAKK0RYX0ZMQUdfbWFuID0gQERYX0ZMQUdfbWFuQAorRFhfRkxBR19wZGYgPSBARFhfRkxBR19wZGZACitEWF9GTEFHX3BzID0gQERYX0ZMQUdfcHNACitEWF9GTEFHX3J0ZiA9IEBEWF9GTEFHX3J0ZkAKK0RYX0ZMQUdfeG1sID0gQERYX0ZMQUdfeG1sQAorRFhfSEhDID0gQERYX0hIQ0AKK0RYX0xBVEVYID0gQERYX0xBVEVYQAorRFhfTUFLRUlOREVYID0gQERYX01BS0VJTkRFWEAKK0RYX1BERkxBVEVYID0gQERYX1BERkxBVEVYQAorRFhfUEVSTCA9IEBEWF9QRVJMQAorRFhfUFJPSkVDVCA9IEBEWF9QUk9KRUNUQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFWEVFWFQgPSBARVhFRVhUQAorRkdSRVAgPSBARkdSRVBACitHQUNVVElMID0gQEdBQ1VUSUxACitHRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAorR0xJQjIwX0NGTEFHUyA9IEBHTElCMjBfQ0ZMQUdTQAorR0xJQjIwX0xJQlMgPSBAR0xJQjIwX0xJQlNACitHTU9GSUxFUyA9IEBHTU9GSUxFU0AKK0dNU0dGTVQgPSBAR01TR0ZNVEAKK0dPQkpFQ1RfQ0ZMQUdTID0gQEdPQkpFQ1RfQ0ZMQUdTQAorR09CSkVDVF9MSUJTID0gQEdPQkpFQ1RfTElCU0AKK0dSRVAgPSBAR1JFUEAKK0dUSzIwX0NGTEFHUyA9IEBHVEsyMF9DRkxBR1NACitHVEsyMF9MSUJTID0gQEdUSzIwX0xJQlNACitHVEszMF9DRkxBR1MgPSBAR1RLMzBfQ0ZMQUdTQAorR1RLMzBfTElCUyA9IEBHVEszMF9MSUJTQAorSE9XTF9DT01QQVRfVkVSU0lPTiA9IEBIT1dMX0NPTVBBVF9WRVJTSU9OQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitJTlNUT0JKRVhUID0gQElOU1RPQkpFWFRACitJTlRMTElCUyA9IEBJTlRMTElCU0AKK0lOVExUT09MX0VYVFJBQ1QgPSBASU5UTFRPT0xfRVhUUkFDVEAKK0lOVExUT09MX01FUkdFID0gQElOVExUT09MX01FUkdFQAorSU5UTFRPT0xfUEVSTCA9IEBJTlRMVE9PTF9QRVJMQAorSU5UTFRPT0xfVVBEQVRFID0gQElOVExUT09MX1VQREFURUAKK0lOVFJPU1BFQ1RJT05fQ0ZMQUdTID0gQElOVFJPU1BFQ1RJT05fQ0ZMQUdTQAorSU5UUk9TUEVDVElPTl9DT01QSUxFUiA9IEBJTlRST1NQRUNUSU9OX0NPTVBJTEVSQAorSU5UUk9TUEVDVElPTl9HRU5FUkFURSA9IEBJTlRST1NQRUNUSU9OX0dFTkVSQVRFQAorSU5UUk9TUEVDVElPTl9HSVJESVIgPSBASU5UUk9TUEVDVElPTl9HSVJESVJACitJTlRST1NQRUNUSU9OX0xJQlMgPSBASU5UUk9TUEVDVElPTl9MSUJTQAorSU5UUk9TUEVDVElPTl9NQUtFRklMRSA9IEBJTlRST1NQRUNUSU9OX01BS0VGSUxFQAorSU5UUk9TUEVDVElPTl9TQ0FOTkVSID0gQElOVFJPU1BFQ1RJT05fU0NBTk5FUkAKK0lOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUiA9IEBJTlRST1NQRUNUSU9OX1RZUEVMSUJESVJACitMRCA9IEBMREAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQkFWQUhJX0NMSUVOVF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ0xJRU5UX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPTU1PTl9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ09NTU9OX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPTVBBVF9IT1dMX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DT01QQVRfSE9XTF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9DT01QQVRfTElCRE5TX1NEX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DT01QQVRfTElCRE5TX1NEX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPUkVfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NPUkVfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfR0xJQl9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfR0xJQl9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9HT0JKRUNUX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9HT0JKRUNUX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX1FUM19WRVJTSU9OX0lORk8gPSBATElCQVZBSElfUVQzX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX1FUNF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfUVQ0X1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX1VJX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9VSV9WRVJTSU9OX0lORk9ACitMSUJEQUVNT05fQ0ZMQUdTID0gQExJQkRBRU1PTl9DRkxBR1NACitMSUJEQUVNT05fTElCUyA9IEBMSUJEQUVNT05fTElCU0AKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKK0xOX1MgPSBATE5fU0AKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKK01DUyA9IEBNQ1NACitNREFTU0VNQkxFUiA9IEBNREFTU0VNQkxFUkAKK01LRElSX1AgPSBATUtESVJfUEAKK01LSU5TVEFMTERJUlMgPSBATUtJTlNUQUxMRElSU0AKK01PQ19RVDMgPSBATU9DX1FUM0AKK01PQ19RVDQgPSBATU9DX1FUNEAKK01PTk9ET0NFUiA9IEBNT05PRE9DRVJACitNT05PRE9DX0NGTEFHUyA9IEBNT05PRE9DX0NGTEFHU0AKK01PTk9ET0NfRElSID0gQE1PTk9ET0NfRElSQAorTU9OT0RPQ19MSUJTID0gQE1PTk9ET0NfTElCU0AKK01TR0ZNVCA9IEBNU0dGTVRACitNU0dGTVRfT1BUUyA9IEBNU0dGTVRfT1BUU0AKK01TR01FUkdFID0gQE1TR01FUkdFQAorTk0gPSBATk1ACitOTUVESVQgPSBATk1FRElUQAorT0JKRFVNUCA9IEBPQkpEVU1QQAorT0JKRVhUID0gQE9CSkVYVEAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQS0dfQ09ORklHX0xJQkRJUiA9IEBQS0dfQ09ORklHX0xJQkRJUkAKK1BLR19DT05GSUdfUEFUSCA9IEBQS0dfQ09ORklHX1BBVEhACitQT0ZJTEVTID0gQFBPRklMRVNACitQT1NVQiA9IEBQT1NVQkAKK1BPX0lOX0RBVEFESVJfRkFMU0UgPSBAUE9fSU5fREFUQURJUl9GQUxTRUAKK1BPX0lOX0RBVEFESVJfVFJVRSA9IEBQT19JTl9EQVRBRElSX1RSVUVACitQVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACitQVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKK1BUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACitQWVRIT04gPSBAUFlUSE9OQAorUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKK1BZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACitQWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACitQWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKK1FUM19DRkxBR1MgPSBAUVQzX0NGTEFHU0AKK1FUM19MSUJTID0gQFFUM19MSUJTQAorUVQ0X0NGTEFHUyA9IEBRVDRfQ0ZMQUdTQAorUVQ0X0xJQlMgPSBAUVQ0X0xJQlNACitSQU5MSUIgPSBAUkFOTElCQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTVE9XID0gQFNUT1dACitTVFJJUCA9IEBTVFJJUEAKK1VTRV9OTFMgPSBAVVNFX05MU0AKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1ZJU0lCSUxJVFlfSElEREVOX0NGTEFHUyA9IEBWSVNJQklMSVRZX0hJRERFTl9DRkxBR1NACitYR0VUVEVYVCA9IEBYR0VUVEVYVEAKK1hNTF9DRkxBR1MgPSBAWE1MX0NGTEFHU0AKK1hNTF9MSUJTID0gQFhNTF9MSUJTQAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorYWNfY3RfQVIgPSBAYWNfY3RfQVJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithY3hfcHRocmVhZF9jb25maWcgPSBAYWN4X3B0aHJlYWRfY29uZmlnQAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACithdmFoaV9ydW50aW1lX2RpciA9IEBhdmFoaV9ydW50aW1lX2RpckAKK2F2YWhpX3NvY2tldCA9IEBhdmFoaV9zb2NrZXRACithdmFoaWxvY2FsZWRpciA9IEBhdmFoaWxvY2FsZWRpckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraGF2ZV9wa2dfY29uZmlnID0gQGhhdmVfcGtnX2NvbmZpZ0AKK2hhdmVfeG1sdG9tYW4gPSBAaGF2ZV94bWx0b21hbkAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitpbnRlcmZhY2VzZGlyID0gQGludGVyZmFjZXNkaXJACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKK3BrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitweWV4ZWNkaXIgPSBAcHlleGVjZGlyQAorcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3N5c3RlbWRzeXN0ZW11bml0ZGlyID0gQHN5c3RlbWRzeXN0ZW11bml0ZGlyQAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK3RvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKK3RvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitpbml0ZGRpciA9ICQoc3lzY29uZmRpcikvcmMuZAorRVhUUkFfRElTVCA9IFwKKwlhdmFoaS1kYWVtb24uc2guaW4gXAorCWF2YWhpLWRuc2NvbmZkLnNoLmluCisKK2luaXRkX1NDUklQVFMgPSBcCisJYXZhaGktZGFlbW9uLnNoIFwKKwlhdmFoaS1kbnNjb25mZC5zaAorCitDTEVBTkZJTEVTID0gXAorCWF2YWhpLWRhZW1vbi5zaCBcCisJYXZhaGktZG5zY29uZmQuc2gKKworYWxsOiBhbGwtYW0KKworLlNVRkZJWEVTOgorJChzcmNkaXIpL01ha2VmaWxlLmluOiAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gaW5pdHNjcmlwdC9mcmVlYnNkL01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiBpbml0c2NyaXB0L2ZyZWVic2QvTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6ICAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6ICAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKGFtX19hY2xvY2FsX200X2RlcHMpOgoraW5zdGFsbC1pbml0ZFNDUklQVFM6ICQoaW5pdGRfU0NSSVBUUykKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwl0ZXN0IC16ICIkKGluaXRkZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQoaW5pdGRkaXIpIgorCUBsaXN0PSckKGluaXRkX1NDUklQVFMpJzsgdGVzdCAtbiAiJChpbml0ZGRpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAorCSAgaWYgdGVzdCAtZiAiJCRkJCRwIjsgdGhlbiBlY2hvICIkJGQkJHAiOyBlY2hvICIkJHAiOyBlbHNlIDo7IGZpOyBcCisJZG9uZSB8IFwKKwlzZWQgLWUgJ3A7cywuKi8sLDtuJyBcCisJICAgIC1lICdoO3N8Lip8LnwnIFwKKwkgICAgLWUgJ3A7eDtzLC4qLywsOyQodHJhbnNmb3JtKScgfCBzZWQgJ047TjtOO3MsXG4sICxnJyB8IFwKKwkkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiOyBkaXJzWyIuIl0gPSAxOyB9IFwKKwkgIHsgZD0kJDM7IGlmIChkaXJzW2RdICE9IDEpIHsgcHJpbnQgImQiLCBkOyBkaXJzW2RdID0gMSB9IFwKKwkgICAgaWYgKCQkMiA9PSAkJDQpIHsgZmlsZXNbZF0gPSBmaWxlc1tkXSAiICIgJCQxOyBcCisJICAgICAgaWYgKCsrbltkXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIHsgXAorCQlwcmludCAiZiIsIGQsIGZpbGVzW2RdOyBuW2RdID0gMDsgZmlsZXNbZF0gPSAiIiB9IH0gXAorCSAgICBlbHNlIHsgcHJpbnQgImYiLCBkICIvIiAkJDQsICQkMSB9IH0gXAorCSAgRU5EIHsgZm9yIChkIGluIGZpbGVzKSBwcmludCAiZiIsIGQsIGZpbGVzW2RdIH0nIHwgXAorCXdoaWxlIHJlYWQgdHlwZSBkaXIgZmlsZXM7IGRvIFwKKwkgICAgIGlmIHRlc3QgIiQkZGlyIiA9IC47IHRoZW4gZGlyPTsgZWxzZSBkaXI9LyQkZGlyOyBmaTsgXAorCSAgICAgdGVzdCAteiAiJCRmaWxlcyIgfHwgeyBcCisJICAgICAgIGVjaG8gIiAkKElOU1RBTExfU0NSSVBUKSAkJGZpbGVzICckKERFU1RESVIpJChpbml0ZGRpcikkJGRpciciOyBcCisJICAgICAgICQoSU5TVEFMTF9TQ1JJUFQpICQkZmlsZXMgIiQoREVTVERJUikkKGluaXRkZGlyKSQkZGlyIiB8fCBleGl0ICQkPzsgXAorCSAgICAgfSBcCisJOyBkb25lCisKK3VuaW5zdGFsbC1pbml0ZFNDUklQVFM6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChpbml0ZF9TQ1JJUFRTKSc7IHRlc3QgLW4gIiQoaW5pdGRkaXIpIiB8fCBleGl0IDA7IFwKKwlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgXAorCSAgICAgICBzZWQgLWUgJ3MsLiovLCw7JCh0cmFuc2Zvcm0pJ2A7IFwKKwlkaXI9JyQoREVTVERJUikkKGluaXRkZGlyKSc7ICQoYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpcikKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKK3RhZ3M6IFRBR1MKK1RBR1M6CisKK2N0YWdzOiBDVEFHUworQ1RBR1M6CisKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUgJChTQ1JJUFRTKQoraW5zdGFsbGRpcnM6CisJZm9yIGRpciBpbiAiJChERVNURElSKSQoaW5pdGRkaXIpIjsgZG8gXAorCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAorCWRvbmUKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgICAgIGluc3RhbGw7IFwKKwllbHNlIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAorCWZpCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENMRUFORklMRVMpIiB8fCBybSAtZiAkKENMRUFORklMRVMpCisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKK2NsZWFuOiBjbGVhbi1hbQorCitjbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIG1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1nZW5lcmljCisKK2R2aTogZHZpLWFtCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1hbQorCitodG1sLWFtOgorCitpbmZvOiBpbmZvLWFtCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1pbml0ZFNDUklQVFMKKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCisKK2luc3RhbGwtZHZpLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06CisKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCisKK2luc3RhbGwtaHRtbC1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1pbmZvLWFtOgorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCisKK2luc3RhbGwtcGRmLWFtOgorCitpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCisKK2luc3RhbGwtcHMtYW06CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtaW5pdGRTQ1JJUFRTCisKKy5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKKworLlBIT05ZOiBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBcCisJZGlzdGNsZWFuIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIGRpc3RkaXIgZHZpIFwKKwlkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gXAorCWluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gXAorCWluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBcCisJaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLWluaXRkU0NSSVBUUyBpbnN0YWxsLW1hbiBcCisJaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKKwlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAorCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKKwltb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCisJdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSB1bmluc3RhbGwtaW5pdGRTQ1JJUFRTCisKKworYXZhaGktZGFlbW9uLnNoOiBhdmFoaS1kYWVtb24uc2guaW4KKwlzZWQgLWUgJ3MsQHNiaW5kaXJcQCwkKHNiaW5kaXIpLGcnICQ8ID4gJEAKKwljaG1vZCAreCAkQAorCithdmFoaS1kbnNjb25mZC5zaDogYXZhaGktZG5zY29uZmQuc2guaW4KKwlzZWQgXAorCS1lICdzLEBzYmluZGlyXEAsJChzYmluZGlyKSxnJyBcCisJLWUgJ3MsQHN5c2NvbmZkaXJcQCwkKHN5c2NvbmZkaXIpLGcnIFwKKwkkPCA+ICRACisJY2htb2QgK3ggJEAKKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2luaXRzY3JpcHQvZnJlZWJzZC9hdmFoaS1kYWVtb24uc2guaW4gYi9hdmFoaS0wLjYuMzEvaW5pdHNjcmlwdC9mcmVlYnNkL2F2YWhpLWRhZW1vbi5zaC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2RhMzlmCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2luaXRzY3JpcHQvZnJlZWJzZC9hdmFoaS1kYWVtb24uc2guaW4KQEAgLTAsMCArMSwzNiBAQAorIyEvYmluL3NoCisjCisjICRGcmVlQlNEOiAvcmVwb21hbi9yL3BjdnMvcG9ydHMvbmV0L2F2YWhpL2ZpbGVzL2F2YWhpLWRhZW1vbi5zaCx2IDEuMiAyMDA1LzExLzE5IDA1OjU1OjU2IG1hcmN1cyBFeHAgJAorIworIyBQUk9WSURFOiBhdmFoaV9kYWVtb24KKyMgUkVRVUlSRTogREFFTU9OIGRidXMKKyMgS0VZV09SRDogRnJlZUJTRAorIworIyBBdmFoaSdzIG1ETlNSZXNwb25kZXIsIGEgWmVyb2NvbmYgKEJvbmpvdXIpIHNlcnZpY2UgYWR2ZXJ0aXNlbWVudCBkYWVtb24uCisjCisKK2F2YWhpX2RhZW1vbl9lbmFibGU9JHthdmFoaV9kYWVtb25fZW5hYmxlLSJOTyJ9CithdmFoaV9kYWVtb25fZmxhZ3M9JHthdmFoaV9kYWVtb25fZmxhZ3MtIi1EIn0KKworLiAvZXRjL3JjLnN1YnIKKworbmFtZT1hdmFoaV9kYWVtb24KK3JjdmFyPWBzZXRfcmN2YXJgCisKK3N0YXJ0X2NtZD1hdmFoaV9kYWVtb25fc3RhcnQKK3N0b3BfY21kPWF2YWhpX2RhZW1vbl9zdG9wCisKK2F2YWhpX2RhZW1vbl9iaW49QHNiaW5kaXJAL2F2YWhpLWRhZW1vbgorCithdmFoaV9kYWVtb25fc3RhcnQoKSB7CisgICAgY2hlY2t5ZXNubyBhdmFoaV9kYWVtb25fZW5hYmxlICYmIGVjaG8gIlN0YXJ0aW5nIGF2YWhpLWRhZW1vbi4iICYmIFwKKyAgICAJJHthdmFoaV9kYWVtb25fYmlufSAke2F2YWhpX2RhZW1vbl9mbGFnc30KK30KKworYXZhaGlfZGFlbW9uX3N0b3AoKSB7CisgICAgY2hlY2t5ZXNubyBhdmFoaV9kYWVtb25fZW5hYmxlICYmIGVjaG8gIlN0b3BwaW5nIGF2YWhpLWRhZW1vbi4iICYmIFwKKyAgICAJJHthdmFoaV9kYWVtb25fYmlufSAtaworfQorCitsb2FkX3JjX2NvbmZpZyAke25hbWV9CitydW5fcmNfY29tbWFuZCAiJDEiCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvaW5pdHNjcmlwdC9mcmVlYnNkL2F2YWhpLWRuc2NvbmZkLnNoLmluIGIvYXZhaGktMC42LjMxL2luaXRzY3JpcHQvZnJlZWJzZC9hdmFoaS1kbnNjb25mZC5zaC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDM0ZGNhCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2luaXRzY3JpcHQvZnJlZWJzZC9hdmFoaS1kbnNjb25mZC5zaC5pbgpAQCAtMCwwICsxLDM5IEBACisjIS9iaW4vc2gKKyMKKyMgJEZyZWVCU0Q6IC9yZXBvbWFuL3IvcGN2cy9wb3J0cy9uZXQvYXZhaGkvZmlsZXMvYXZhaGktZG5zY29uZmQuc2gsdiAxLjQgMjAwNS8xMS8xOSAwNjozNjowOSBhaHplIEV4cCAkCisjCisjIFBST1ZJREU6IGF2YWhpX2Ruc2NvbmZkCisjIFJFUVVJUkU6IERBRU1PTiBkYnVzIGF2YWhpX2RhZW1vbgorIyBLRVlXT1JEOiBGcmVlQlNECisjCisjIGF2YWhpLWRuc2NvbmZkIGNvbm5lY3RzIHRvIGEgcnVubmluZyBhdmFoaS1kYWVtb24gYW5kIHJ1bnMgIHRoZSBzY3JpcHQKKyMgQHN5c2NvbmZkaXJAL2F2YWhpL2F2YWhpLWRuc2NvbmZkLmFjdGlvbiBmb3IgZWFjaCB1bmljYXN0IEROUyBzZXJ2ZXIgdGhhdAorIyBpcyBhbm5vdW5jZWQgb24gdGhlIGxvY2FsIExBTi4gVGhpcyBpcyB1c2VmdWwgZm9yIGNvbmZpZ3VyaW5nIHVuaWNhc3QKKyMgRE5TIHNlcnZlcnMgaW4gYSBESENQLWxpa2UgZmFzaGlvbiB3aXRoIG1ETlMuCisjCisKK2F2YWhpX2Ruc2NvbmZkX2VuYWJsZT0ke2F2YWhpX2Ruc2NvbmZkX2VuYWJsZS0iTk8ifQorYXZhaGlfZG5zY29uZmRfZmxhZ3M9JHthdmFoaV9kbnNjb25mZF9mbGFncy0iLUQifQorCisuIC9ldGMvcmMuc3VicgorCituYW1lPWF2YWhpX2Ruc2NvbmZkCityY3Zhcj1gc2V0X3JjdmFyYAorCitzdGFydF9jbWQ9YXZhaGlfZG5zY29uZmRfc3RhcnQKK3N0b3BfY21kPWF2YWhpX2Ruc2NvbmZkX3N0b3AKKworYXZhaGlfZG5zY29uZmRfYmluPUBzYmluZGlyQC9hdmFoaS1kbnNjb25mZAorCithdmFoaV9kbnNjb25mZF9zdGFydCgpIHsKKyAgICBjaGVja3llc25vIGF2YWhpX2Ruc2NvbmZkX2VuYWJsZSAmJiBlY2hvICJTdGFydGluZyBhdmFoaS1kbnNjb25mZC4iICYmIFwKKyAgICAJJHthdmFoaV9kbnNjb25mZF9iaW59ICR7YXZhaGlfZG5zY29uZmRfZmxhZ3N9Cit9CisKK2F2YWhpX2Ruc2NvbmZkX3N0b3AoKSB7CisgICAgY2hlY2t5ZXNubyBhdmFoaV9kbnNjb25mZF9lbmFibGUgJiYgZWNobyAiU3RvcHBpbmcgYXZhaGktZG5zY29uZmQuIiAmJiBcCisgICAgCSR7YXZhaGlfZG5zY29uZmRfYmlufSAtaworfQorCitsb2FkX3JjX2NvbmZpZyAke25hbWV9CitydW5fcmNfY29tbWFuZCAiJDEiCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvaW5pdHNjcmlwdC9nZW50b28vTWFrZWZpbGUuYW0gYi9hdmFoaS0wLjYuMzEvaW5pdHNjcmlwdC9nZW50b28vTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQyMGNhNgotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9pbml0c2NyaXB0L2dlbnRvby9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDQzIEBACisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorIworIyBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworIyBVU0EuCisKK2lmICFIQVZFX0RCVVMKK05PX0RCVVNfREVQRU5ERU5DWT0vbmVlZCBkYnVzL2QKK2VuZGlmCisKK2luaXRkZGlyID0gJChzeXNjb25mZGlyKS9pbml0LmQKKworRVhUUkFfRElTVCA9IFwKKwlhdmFoaS1kYWVtb24uaW4gXAorCWF2YWhpLWRuc2NvbmZkLmluCisKK2luaXRkX1NDUklQVFMgPSBcCisJYXZhaGktZGFlbW9uIFwKKwlhdmFoaS1kbnNjb25mZAorCitDTEVBTkZJTEVTID0gXAorCWF2YWhpLWRhZW1vbiBcCisJYXZhaGktZG5zY29uZmQKKworYXZhaGktZGFlbW9uOiBhdmFoaS1kYWVtb24uaW4KKworCXNlZCAtZSAncyxAc2JpbmRpclxALCQoc2JpbmRpciksZzsgJChOT19EQlVTX0RFUEVOREVOQ1kpJyAkPCA+ICRACisJY2htb2QgK3ggJEAKKworYXZhaGktZG5zY29uZmQ6IGF2YWhpLWRuc2NvbmZkLmluCisJc2VkIC1lICdzLEBzYmluZGlyXEAsJChzYmluZGlyKSxnJyAkPCA+ICRACisJY2htb2QgK3ggJEAKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9pbml0c2NyaXB0L2dlbnRvby9NYWtlZmlsZS5pbiBiL2F2YWhpLTAuNi4zMS9pbml0c2NyaXB0L2dlbnRvby9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODdhM2U0Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2luaXRzY3JpcHQvZ2VudG9vL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNjEwIEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjExLjMgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACisKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisjCisjIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisjIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisjIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisjIFVTQS4KKworVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorc3ViZGlyID0gaW5pdHNjcmlwdC9nZW50b28KK0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbgorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL2FjeF9wdGhyZWFkLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9nY2Nfc3RhY2tfcHJvdGVjdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vZ2NjX3Zpc2liaWxpdHkubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2ludGx0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9pbnRyb3NwZWN0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9sdG9wdGlvbnMubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2x0c3VnYXIubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2x0dmVyc2lvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHR+b2Jzb2xldGUubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL25scy5tNCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9weXRob24ubTQgXAorCSQodG9wX3NyY2RpcikvYWNpbmNsdWRlLm00ICQodG9wX3NyY2RpcikvY29tbW9uL2RveHlnZW4ubTQgXAorCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCithbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQoQUNMT0NBTF9NNCkKK21raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCitDT05GSUdfQ0xFQU5fRklMRVMgPQorQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KK2FtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOworYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKKyAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAorICAgICopIGY9JCRwOzsgXAorICBlc2FjOworYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOworYW1fX2luc3RhbGxfbWF4ID0gNDAKK2FtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCisgIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKK2FtX19ub2Jhc2Vfc3RyaXAgPSBcCisgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgorYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAorICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAorICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAorICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCisgICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAorICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAorICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKK2FtX19iYXNlX2xpc3QgPSBcCisgIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCisgIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKK2FtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIgPSB7IFwKKyAgdGVzdCAteiAiJCRmaWxlcyIgXAorICAgIHx8IHsgdGVzdCAhIC1kICIkJGRpciIgJiYgdGVzdCAhIC1mICIkJGRpciIgJiYgdGVzdCAhIC1yICIkJGRpciI7IH0gXAorICAgIHx8IHsgZWNobyAiICggY2QgJyQkZGlyJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKKyAgICAgICAgICQoYW1fX2NkKSAiJCRkaXIiICYmIHJtIC1mICQkZmlsZXM7IH07IFwKKyAgfQorYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKGluaXRkZGlyKSIKK1NDUklQVFMgPSAkKGluaXRkX1NDUklQVFMpCitBTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKK2FtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKK2FtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgIiAkQDsKK0FNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKK2FtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCithbV9fdl9hdF8wID0gQAorU09VUkNFUyA9CitESVNUX1NPVVJDRVMgPQorRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FMTF9MSU5HVUFTID0gQEFMTF9MSU5HVUFTQAorQU1UQVIgPSBAQU1UQVJACitBTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKK0FSID0gQEFSQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FWQUhJX0FVVE9JUERfR1JPVVAgPSBAQVZBSElfQVVUT0lQRF9HUk9VUEAKK0FWQUhJX0FVVE9JUERfVVNFUiA9IEBBVkFISV9BVVRPSVBEX1VTRVJACitBVkFISV9HUk9VUCA9IEBBVkFISV9HUk9VUEAKK0FWQUhJX1BSSVZfQUNDRVNTX0dST1VQID0gQEFWQUhJX1BSSVZfQUNDRVNTX0dST1VQQAorQVZBSElfVVNFUiA9IEBBVkFISV9VU0VSQAorQVdLID0gQEFXS0AKK0NBVEFMT0dTID0gQENBVEFMT0dTQAorQ0FUT0JKRVhUID0gQENBVE9CSkVYVEAKK0NDID0gQENDQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RBVEFESVJOQU1FID0gQERBVEFESVJOQU1FQAorREJVU19DRkxBR1MgPSBAREJVU19DRkxBR1NACitEQlVTX0xJQlMgPSBAREJVU19MSUJTQAorREJVU19TWVNURU1fQlVTX0RFRkFVTFRfQUREUkVTUyA9IEBEQlVTX1NZU1RFTV9CVVNfREVGQVVMVF9BRERSRVNTQAorREJVU19TWVNfRElSID0gQERCVVNfU1lTX0RJUkAKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitETExUT09MID0gQERMTFRPT0xACitET1hZR0VOX1BBUEVSX1NJWkUgPSBARE9YWUdFTl9QQVBFUl9TSVpFQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitEWF9DT05GSUcgPSBARFhfQ09ORklHQAorRFhfRE9DRElSID0gQERYX0RPQ0RJUkAKK0RYX0RPVCA9IEBEWF9ET1RACitEWF9ET1hZR0VOID0gQERYX0RPWFlHRU5ACitEWF9EVklQUyA9IEBEWF9EVklQU0AKK0RYX0VHUkVQID0gQERYX0VHUkVQQAorRFhfRU5WID0gQERYX0VOVkAKK0RYX0ZMQUdfY2hpID0gQERYX0ZMQUdfY2hpQAorRFhfRkxBR19jaG0gPSBARFhfRkxBR19jaG1ACitEWF9GTEFHX2RvYyA9IEBEWF9GTEFHX2RvY0AKK0RYX0ZMQUdfZG90ID0gQERYX0ZMQUdfZG90QAorRFhfRkxBR19odG1sID0gQERYX0ZMQUdfaHRtbEAKK0RYX0ZMQUdfbWFuID0gQERYX0ZMQUdfbWFuQAorRFhfRkxBR19wZGYgPSBARFhfRkxBR19wZGZACitEWF9GTEFHX3BzID0gQERYX0ZMQUdfcHNACitEWF9GTEFHX3J0ZiA9IEBEWF9GTEFHX3J0ZkAKK0RYX0ZMQUdfeG1sID0gQERYX0ZMQUdfeG1sQAorRFhfSEhDID0gQERYX0hIQ0AKK0RYX0xBVEVYID0gQERYX0xBVEVYQAorRFhfTUFLRUlOREVYID0gQERYX01BS0VJTkRFWEAKK0RYX1BERkxBVEVYID0gQERYX1BERkxBVEVYQAorRFhfUEVSTCA9IEBEWF9QRVJMQAorRFhfUFJPSkVDVCA9IEBEWF9QUk9KRUNUQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFWEVFWFQgPSBARVhFRVhUQAorRkdSRVAgPSBARkdSRVBACitHQUNVVElMID0gQEdBQ1VUSUxACitHRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAorR0xJQjIwX0NGTEFHUyA9IEBHTElCMjBfQ0ZMQUdTQAorR0xJQjIwX0xJQlMgPSBAR0xJQjIwX0xJQlNACitHTU9GSUxFUyA9IEBHTU9GSUxFU0AKK0dNU0dGTVQgPSBAR01TR0ZNVEAKK0dPQkpFQ1RfQ0ZMQUdTID0gQEdPQkpFQ1RfQ0ZMQUdTQAorR09CSkVDVF9MSUJTID0gQEdPQkpFQ1RfTElCU0AKK0dSRVAgPSBAR1JFUEAKK0dUSzIwX0NGTEFHUyA9IEBHVEsyMF9DRkxBR1NACitHVEsyMF9MSUJTID0gQEdUSzIwX0xJQlNACitHVEszMF9DRkxBR1MgPSBAR1RLMzBfQ0ZMQUdTQAorR1RLMzBfTElCUyA9IEBHVEszMF9MSUJTQAorSE9XTF9DT01QQVRfVkVSU0lPTiA9IEBIT1dMX0NPTVBBVF9WRVJTSU9OQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitJTlNUT0JKRVhUID0gQElOU1RPQkpFWFRACitJTlRMTElCUyA9IEBJTlRMTElCU0AKK0lOVExUT09MX0VYVFJBQ1QgPSBASU5UTFRPT0xfRVhUUkFDVEAKK0lOVExUT09MX01FUkdFID0gQElOVExUT09MX01FUkdFQAorSU5UTFRPT0xfUEVSTCA9IEBJTlRMVE9PTF9QRVJMQAorSU5UTFRPT0xfVVBEQVRFID0gQElOVExUT09MX1VQREFURUAKK0lOVFJPU1BFQ1RJT05fQ0ZMQUdTID0gQElOVFJPU1BFQ1RJT05fQ0ZMQUdTQAorSU5UUk9TUEVDVElPTl9DT01QSUxFUiA9IEBJTlRST1NQRUNUSU9OX0NPTVBJTEVSQAorSU5UUk9TUEVDVElPTl9HRU5FUkFURSA9IEBJTlRST1NQRUNUSU9OX0dFTkVSQVRFQAorSU5UUk9TUEVDVElPTl9HSVJESVIgPSBASU5UUk9TUEVDVElPTl9HSVJESVJACitJTlRST1NQRUNUSU9OX0xJQlMgPSBASU5UUk9TUEVDVElPTl9MSUJTQAorSU5UUk9TUEVDVElPTl9NQUtFRklMRSA9IEBJTlRST1NQRUNUSU9OX01BS0VGSUxFQAorSU5UUk9TUEVDVElPTl9TQ0FOTkVSID0gQElOVFJPU1BFQ1RJT05fU0NBTk5FUkAKK0lOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUiA9IEBJTlRST1NQRUNUSU9OX1RZUEVMSUJESVJACitMRCA9IEBMREAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQkFWQUhJX0NMSUVOVF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ0xJRU5UX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPTU1PTl9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ09NTU9OX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPTVBBVF9IT1dMX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DT01QQVRfSE9XTF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9DT01QQVRfTElCRE5TX1NEX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DT01QQVRfTElCRE5TX1NEX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPUkVfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NPUkVfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfR0xJQl9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfR0xJQl9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9HT0JKRUNUX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9HT0JKRUNUX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX1FUM19WRVJTSU9OX0lORk8gPSBATElCQVZBSElfUVQzX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX1FUNF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfUVQ0X1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX1VJX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9VSV9WRVJTSU9OX0lORk9ACitMSUJEQUVNT05fQ0ZMQUdTID0gQExJQkRBRU1PTl9DRkxBR1NACitMSUJEQUVNT05fTElCUyA9IEBMSUJEQUVNT05fTElCU0AKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKK0xOX1MgPSBATE5fU0AKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKK01DUyA9IEBNQ1NACitNREFTU0VNQkxFUiA9IEBNREFTU0VNQkxFUkAKK01LRElSX1AgPSBATUtESVJfUEAKK01LSU5TVEFMTERJUlMgPSBATUtJTlNUQUxMRElSU0AKK01PQ19RVDMgPSBATU9DX1FUM0AKK01PQ19RVDQgPSBATU9DX1FUNEAKK01PTk9ET0NFUiA9IEBNT05PRE9DRVJACitNT05PRE9DX0NGTEFHUyA9IEBNT05PRE9DX0NGTEFHU0AKK01PTk9ET0NfRElSID0gQE1PTk9ET0NfRElSQAorTU9OT0RPQ19MSUJTID0gQE1PTk9ET0NfTElCU0AKK01TR0ZNVCA9IEBNU0dGTVRACitNU0dGTVRfT1BUUyA9IEBNU0dGTVRfT1BUU0AKK01TR01FUkdFID0gQE1TR01FUkdFQAorTk0gPSBATk1ACitOTUVESVQgPSBATk1FRElUQAorT0JKRFVNUCA9IEBPQkpEVU1QQAorT0JKRVhUID0gQE9CSkVYVEAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQS0dfQ09ORklHX0xJQkRJUiA9IEBQS0dfQ09ORklHX0xJQkRJUkAKK1BLR19DT05GSUdfUEFUSCA9IEBQS0dfQ09ORklHX1BBVEhACitQT0ZJTEVTID0gQFBPRklMRVNACitQT1NVQiA9IEBQT1NVQkAKK1BPX0lOX0RBVEFESVJfRkFMU0UgPSBAUE9fSU5fREFUQURJUl9GQUxTRUAKK1BPX0lOX0RBVEFESVJfVFJVRSA9IEBQT19JTl9EQVRBRElSX1RSVUVACitQVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACitQVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKK1BUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACitQWVRIT04gPSBAUFlUSE9OQAorUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKK1BZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACitQWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACitQWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKK1FUM19DRkxBR1MgPSBAUVQzX0NGTEFHU0AKK1FUM19MSUJTID0gQFFUM19MSUJTQAorUVQ0X0NGTEFHUyA9IEBRVDRfQ0ZMQUdTQAorUVQ0X0xJQlMgPSBAUVQ0X0xJQlNACitSQU5MSUIgPSBAUkFOTElCQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTVE9XID0gQFNUT1dACitTVFJJUCA9IEBTVFJJUEAKK1VTRV9OTFMgPSBAVVNFX05MU0AKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1ZJU0lCSUxJVFlfSElEREVOX0NGTEFHUyA9IEBWSVNJQklMSVRZX0hJRERFTl9DRkxBR1NACitYR0VUVEVYVCA9IEBYR0VUVEVYVEAKK1hNTF9DRkxBR1MgPSBAWE1MX0NGTEFHU0AKK1hNTF9MSUJTID0gQFhNTF9MSUJTQAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorYWNfY3RfQVIgPSBAYWNfY3RfQVJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithY3hfcHRocmVhZF9jb25maWcgPSBAYWN4X3B0aHJlYWRfY29uZmlnQAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACithdmFoaV9ydW50aW1lX2RpciA9IEBhdmFoaV9ydW50aW1lX2RpckAKK2F2YWhpX3NvY2tldCA9IEBhdmFoaV9zb2NrZXRACithdmFoaWxvY2FsZWRpciA9IEBhdmFoaWxvY2FsZWRpckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraGF2ZV9wa2dfY29uZmlnID0gQGhhdmVfcGtnX2NvbmZpZ0AKK2hhdmVfeG1sdG9tYW4gPSBAaGF2ZV94bWx0b21hbkAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitpbnRlcmZhY2VzZGlyID0gQGludGVyZmFjZXNkaXJACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKK3BrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitweWV4ZWNkaXIgPSBAcHlleGVjZGlyQAorcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3N5c3RlbWRzeXN0ZW11bml0ZGlyID0gQHN5c3RlbWRzeXN0ZW11bml0ZGlyQAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK3RvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKK3RvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitASEFWRV9EQlVTX0ZBTFNFQE5PX0RCVVNfREVQRU5ERU5DWSA9IC9uZWVkIGRidXMvZAoraW5pdGRkaXIgPSAkKHN5c2NvbmZkaXIpL2luaXQuZAorRVhUUkFfRElTVCA9IFwKKwlhdmFoaS1kYWVtb24uaW4gXAorCWF2YWhpLWRuc2NvbmZkLmluCisKK2luaXRkX1NDUklQVFMgPSBcCisJYXZhaGktZGFlbW9uIFwKKwlhdmFoaS1kbnNjb25mZAorCitDTEVBTkZJTEVTID0gXAorCWF2YWhpLWRhZW1vbiBcCisJYXZhaGktZG5zY29uZmQKKworYWxsOiBhbGwtYW0KKworLlNVRkZJWEVTOgorJChzcmNkaXIpL01ha2VmaWxlLmluOiAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gaW5pdHNjcmlwdC9nZW50b28vTWFrZWZpbGUnOyBcCisJJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1mb3JlaWduIGluaXRzY3JpcHQvZ2VudG9vL01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKK2luc3RhbGwtaW5pdGRTQ1JJUFRTOiAkKGluaXRkX1NDUklQVFMpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJdGVzdCAteiAiJChpbml0ZGRpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKGluaXRkZGlyKSIKKwlAbGlzdD0nJChpbml0ZF9TQ1JJUFRTKSc7IHRlc3QgLW4gIiQoaW5pdGRkaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKKwkgIGlmIHRlc3QgLWYgIiQkZCQkcCI7IHRoZW4gZWNobyAiJCRkJCRwIjsgZWNobyAiJCRwIjsgZWxzZSA6OyBmaTsgXAorCWRvbmUgfCBcCisJc2VkIC1lICdwO3MsLiovLCw7bicgXAorCSAgICAtZSAnaDtzfC4qfC58JyBcCisJICAgIC1lICdwO3g7cywuKi8sLDskKHRyYW5zZm9ybSknIHwgc2VkICdOO047TjtzLFxuLCAsZycgfCBcCisJJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIjsgZGlyc1siLiJdID0gMTsgfSBcCisJICB7IGQ9JCQzOyBpZiAoZGlyc1tkXSAhPSAxKSB7IHByaW50ICJkIiwgZDsgZGlyc1tkXSA9IDEgfSBcCisJICAgIGlmICgkJDIgPT0gJCQ0KSB7IGZpbGVzW2RdID0gZmlsZXNbZF0gIiAiICQkMTsgXAorCSAgICAgIGlmICgrK25bZF0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSB7IFwKKwkJcHJpbnQgImYiLCBkLCBmaWxlc1tkXTsgbltkXSA9IDA7IGZpbGVzW2RdID0gIiIgfSB9IFwKKwkgICAgZWxzZSB7IHByaW50ICJmIiwgZCAiLyIgJCQ0LCAkJDEgfSB9IFwKKwkgIEVORCB7IGZvciAoZCBpbiBmaWxlcykgcHJpbnQgImYiLCBkLCBmaWxlc1tkXSB9JyB8IFwKKwl3aGlsZSByZWFkIHR5cGUgZGlyIGZpbGVzOyBkbyBcCisJICAgICBpZiB0ZXN0ICIkJGRpciIgPSAuOyB0aGVuIGRpcj07IGVsc2UgZGlyPS8kJGRpcjsgZmk7IFwKKwkgICAgIHRlc3QgLXogIiQkZmlsZXMiIHx8IHsgXAorCSAgICAgICBlY2hvICIgJChJTlNUQUxMX1NDUklQVCkgJCRmaWxlcyAnJChERVNURElSKSQoaW5pdGRkaXIpJCRkaXInIjsgXAorCSAgICAgICAkKElOU1RBTExfU0NSSVBUKSAkJGZpbGVzICIkKERFU1RESVIpJChpbml0ZGRpcikkJGRpciIgfHwgZXhpdCAkJD87IFwKKwkgICAgIH0gXAorCTsgZG9uZQorCit1bmluc3RhbGwtaW5pdGRTQ1JJUFRTOgorCUAkKE5PUk1BTF9VTklOU1RBTEwpCisJQGxpc3Q9JyQoaW5pdGRfU0NSSVBUUyknOyB0ZXN0IC1uICIkKGluaXRkZGlyKSIgfHwgZXhpdCAwOyBcCisJZmlsZXM9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IFwKKwkgICAgICAgc2VkIC1lICdzLC4qLywsOyQodHJhbnNmb3JtKSdgOyBcCisJZGlyPSckKERFU1RESVIpJChpbml0ZGRpciknOyAkKGFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIpCisKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJzCit0YWdzOiBUQUdTCitUQUdTOgorCitjdGFnczogQ1RBR1MKK0NUQUdTOgorCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgXAorCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKKwkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCisJICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAorCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKKwkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKKwkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKKwkJCSAgIHNvcnQgLXVgIDs7IFwKKwllc2FjOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorY2hlY2stYW06IGFsbC1hbQorY2hlY2s6IGNoZWNrLWFtCithbGwtYW06IE1ha2VmaWxlICQoU0NSSVBUUykKK2luc3RhbGxkaXJzOgorCWZvciBkaXIgaW4gIiQoREVTVERJUikkKGluaXRkZGlyKSI7IGRvIFwKKwkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKE1LRElSX1ApICIkJGRpciI7IFwKKwlkb25lCitpbnN0YWxsOiBpbnN0YWxsLWFtCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KK3VuaW5zdGFsbDogdW5pbnN0YWxsLWFtCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCitpbnN0YWxsLXN0cmlwOgorCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgICAgICBpbnN0YWxsOyBcCisJZWxzZSBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKKwlmaQorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDTEVBTkZJTEVTKSIgfHwgcm0gLWYgJChDTEVBTkZJTEVTKQorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tYW0KKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBtb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tZ2VuZXJpYworCitkdmk6IGR2aS1hbQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtYW0KKworaHRtbC1hbToKKworaW5mbzogaW5mby1hbQorCitpbmZvLWFtOgorCitpbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtaW5pdGRTQ1JJUFRTCisKK2luc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQorCitpbnN0YWxsLWR2aS1hbToKKworaW5zdGFsbC1leGVjLWFtOgorCitpbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQorCitpbnN0YWxsLWh0bWwtYW06CisKK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisKK2luc3RhbGwtaW5mby1hbToKKworaW5zdGFsbC1tYW46CisKK2luc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQorCitpbnN0YWxsLXBkZi1hbToKKworaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQorCitpbnN0YWxsLXBzLWFtOgorCitpbnN0YWxsY2hlY2stYW06CisKK21haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtYW0KKworcGRmLWFtOgorCitwczogcHMtYW0KKworcHMtYW06CisKK3VuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWluaXRkU0NSSVBUUworCisuTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisKKy5QSE9OWTogYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgXAorCWRpc3RjbGVhbiBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBkaXN0ZGlyIGR2aSBcCisJZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIFwKKwlpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIFwKKwlpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gXAorCWluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1pbml0ZFNDUklQVFMgaW5zdGFsbC1tYW4gXAorCWluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCisJaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKKwltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBcCisJbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAorCXVuaW5zdGFsbCB1bmluc3RhbGwtYW0gdW5pbnN0YWxsLWluaXRkU0NSSVBUUworCisKK2F2YWhpLWRhZW1vbjogYXZhaGktZGFlbW9uLmluCisKKwlzZWQgLWUgJ3MsQHNiaW5kaXJcQCwkKHNiaW5kaXIpLGc7ICQoTk9fREJVU19ERVBFTkRFTkNZKScgJDwgPiAkQAorCWNobW9kICt4ICRACisKK2F2YWhpLWRuc2NvbmZkOiBhdmFoaS1kbnNjb25mZC5pbgorCXNlZCAtZSAncyxAc2JpbmRpclxALCQoc2JpbmRpciksZycgJDwgPiAkQAorCWNobW9kICt4ICRACisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9pbml0c2NyaXB0L2dlbnRvby9hdmFoaS1kYWVtb24uaW4gYi9hdmFoaS0wLjYuMzEvaW5pdHNjcmlwdC9nZW50b28vYXZhaGktZGFlbW9uLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyZWVmZTYKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvaW5pdHNjcmlwdC9nZW50b28vYXZhaGktZGFlbW9uLmluCkBAIC0wLDAgKzEsMjkgQEAKKyMhL3NiaW4vcnVuc2NyaXB0CisjIENvcHlyaWdodCAxOTk5LTIwMDcgR2VudG9vIEZvdW5kYXRpb24KKyMgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2MgorCitvcHRzPSJyZWxvYWQiCisKK2RlcGVuZCgpIHsKKwliZWZvcmUgbmV0bW91bnQgbmZzbW91bnQKKwl1c2UgbmV0CisJbmVlZCBkYnVzCit9CisKK3N0YXJ0KCkgeworCWViZWdpbiAiU3RhcnRpbmcgYXZhaGktZGFlbW9uIgorCUBzYmluZGlyQC9hdmFoaS1kYWVtb24gLUQKKwllZW5kICQ/Cit9CisKK3N0b3AoKSB7CisJZWJlZ2luICJTdG9wcGluZyBhdmFoaS1kYWVtb24iCisJQHNiaW5kaXJAL2F2YWhpLWRhZW1vbiAtaworCWVlbmQgJD8KK30KKworcmVsb2FkKCkgeworCWViZWdpbiAiUmVsb2FkaW5nIGF2YWhpLWRhZW1vbiIKKwlAc2JpbmRpckAvYXZhaGktZGFlbW9uIC1yCisJZWVuZCAkPworfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2luaXRzY3JpcHQvZ2VudG9vL2F2YWhpLWRuc2NvbmZkLmluIGIvYXZhaGktMC42LjMxL2luaXRzY3JpcHQvZ2VudG9vL2F2YWhpLWRuc2NvbmZkLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3NjA2N2UKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvaW5pdHNjcmlwdC9nZW50b28vYXZhaGktZG5zY29uZmQuaW4KQEAgLTAsMCArMSwyOCBAQAorIyEvc2Jpbi9ydW5zY3JpcHQKKyMgQ29weXJpZ2h0IDE5OTktMjAwNyBHZW50b28gRm91bmRhdGlvbgorIyBEaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYyCisKK29wdHM9InJlbG9hZCIKKworZGVwZW5kKCkgeworCW5lZWQgYXZhaGktZGFlbW9uCisJdXNlIG5ldAorfQorCitzdGFydCgpIHsKKwllYmVnaW4gIlN0YXJ0aW5nIGF2YWhpLWRuc2NvbmZkIgorCUBzYmluZGlyQC9hdmFoaS1kbnNjb25mZCAtRAorCWVlbmQgJD8KK30KKworc3RvcCgpIHsKKwllYmVnaW4gIlN0b3BwaW5nIGF2YWhpLWRuc2NvbmZkIgorCUBzYmluZGlyQC9hdmFoaS1kbnNjb25mZCAtaworCWVlbmQgJD8KK30KKworcmVsb2FkKCkgeworCWViZWdpbiAiUmVsb2FkaW5nIGF2YWhpLWRuc2NvbmZkIgorCUBzYmluZGlyQC9hdmFoaS1kbnNjb25mZCAtcgorCWVlbmQgJD8KK30KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9pbml0c2NyaXB0L2xmcy9NYWtlZmlsZS5hbSBiL2F2YWhpLTAuNi4zMS9pbml0c2NyaXB0L2xmcy9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDhkY2I4Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2luaXRzY3JpcHQvbGZzL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMzEgQEAKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisjCisjIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisjIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisjIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisjIFVTQS4KKworaW5pdGRkaXIgPSAkKHN5c2NvbmZkaXIpL3JjLmQvaW5pdC5kCisKK0VYVFJBX0RJU1QgPSBhdmFoaS5pbgorCitpbml0ZF9TQ1JJUFRTID0gYXZhaGkKKworQ0xFQU5GSUxFUyA9IGF2YWhpCisKK2F2YWhpOiBhdmFoaS5pbgorCSQoQU1fVl9HRU4pc2VkIFwKKwkJLWUgJ3MsQHNiaW5kaXJcQCwkKHNiaW5kaXIpLGcnIFwKKwkJLWUgJ3MsQGxvY2Fsc3RhdGVkaXJcQCwkKGxvY2Fsc3RhdGVkaXIpLGcnIFwKKwkJJDwgPiAkQCAmJiBcCisJY2htb2QgK3ggJEAKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9pbml0c2NyaXB0L2xmcy9NYWtlZmlsZS5pbiBiL2F2YWhpLTAuNi4zMS9pbml0c2NyaXB0L2xmcy9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjk0NjA2Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2luaXRzY3JpcHQvbGZzL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNTk4IEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjExLjMgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACisKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisjCisjIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisjIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisjIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisjIFVTQS4KKworVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorc3ViZGlyID0gaW5pdHNjcmlwdC9sZnMKK0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbgorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL2FjeF9wdGhyZWFkLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9nY2Nfc3RhY2tfcHJvdGVjdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vZ2NjX3Zpc2liaWxpdHkubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2ludGx0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9pbnRyb3NwZWN0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9sdG9wdGlvbnMubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2x0c3VnYXIubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2x0dmVyc2lvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHR+b2Jzb2xldGUubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL25scy5tNCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9weXRob24ubTQgXAorCSQodG9wX3NyY2RpcikvYWNpbmNsdWRlLm00ICQodG9wX3NyY2RpcikvY29tbW9uL2RveHlnZW4ubTQgXAorCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCithbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQoQUNMT0NBTF9NNCkKK21raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCitDT05GSUdfQ0xFQU5fRklMRVMgPQorQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KK2FtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOworYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKKyAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAorICAgICopIGY9JCRwOzsgXAorICBlc2FjOworYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOworYW1fX2luc3RhbGxfbWF4ID0gNDAKK2FtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCisgIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKK2FtX19ub2Jhc2Vfc3RyaXAgPSBcCisgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgorYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAorICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAorICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAorICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCisgICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAorICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAorICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKK2FtX19iYXNlX2xpc3QgPSBcCisgIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCisgIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKK2FtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIgPSB7IFwKKyAgdGVzdCAteiAiJCRmaWxlcyIgXAorICAgIHx8IHsgdGVzdCAhIC1kICIkJGRpciIgJiYgdGVzdCAhIC1mICIkJGRpciIgJiYgdGVzdCAhIC1yICIkJGRpciI7IH0gXAorICAgIHx8IHsgZWNobyAiICggY2QgJyQkZGlyJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKKyAgICAgICAgICQoYW1fX2NkKSAiJCRkaXIiICYmIHJtIC1mICQkZmlsZXM7IH07IFwKKyAgfQorYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKGluaXRkZGlyKSIKK1NDUklQVFMgPSAkKGluaXRkX1NDUklQVFMpCitBTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKK2FtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKK2FtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgIiAkQDsKK0FNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKK2FtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCithbV9fdl9hdF8wID0gQAorU09VUkNFUyA9CitESVNUX1NPVVJDRVMgPQorRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FMTF9MSU5HVUFTID0gQEFMTF9MSU5HVUFTQAorQU1UQVIgPSBAQU1UQVJACitBTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKK0FSID0gQEFSQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FWQUhJX0FVVE9JUERfR1JPVVAgPSBAQVZBSElfQVVUT0lQRF9HUk9VUEAKK0FWQUhJX0FVVE9JUERfVVNFUiA9IEBBVkFISV9BVVRPSVBEX1VTRVJACitBVkFISV9HUk9VUCA9IEBBVkFISV9HUk9VUEAKK0FWQUhJX1BSSVZfQUNDRVNTX0dST1VQID0gQEFWQUhJX1BSSVZfQUNDRVNTX0dST1VQQAorQVZBSElfVVNFUiA9IEBBVkFISV9VU0VSQAorQVdLID0gQEFXS0AKK0NBVEFMT0dTID0gQENBVEFMT0dTQAorQ0FUT0JKRVhUID0gQENBVE9CSkVYVEAKK0NDID0gQENDQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RBVEFESVJOQU1FID0gQERBVEFESVJOQU1FQAorREJVU19DRkxBR1MgPSBAREJVU19DRkxBR1NACitEQlVTX0xJQlMgPSBAREJVU19MSUJTQAorREJVU19TWVNURU1fQlVTX0RFRkFVTFRfQUREUkVTUyA9IEBEQlVTX1NZU1RFTV9CVVNfREVGQVVMVF9BRERSRVNTQAorREJVU19TWVNfRElSID0gQERCVVNfU1lTX0RJUkAKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitETExUT09MID0gQERMTFRPT0xACitET1hZR0VOX1BBUEVSX1NJWkUgPSBARE9YWUdFTl9QQVBFUl9TSVpFQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitEWF9DT05GSUcgPSBARFhfQ09ORklHQAorRFhfRE9DRElSID0gQERYX0RPQ0RJUkAKK0RYX0RPVCA9IEBEWF9ET1RACitEWF9ET1hZR0VOID0gQERYX0RPWFlHRU5ACitEWF9EVklQUyA9IEBEWF9EVklQU0AKK0RYX0VHUkVQID0gQERYX0VHUkVQQAorRFhfRU5WID0gQERYX0VOVkAKK0RYX0ZMQUdfY2hpID0gQERYX0ZMQUdfY2hpQAorRFhfRkxBR19jaG0gPSBARFhfRkxBR19jaG1ACitEWF9GTEFHX2RvYyA9IEBEWF9GTEFHX2RvY0AKK0RYX0ZMQUdfZG90ID0gQERYX0ZMQUdfZG90QAorRFhfRkxBR19odG1sID0gQERYX0ZMQUdfaHRtbEAKK0RYX0ZMQUdfbWFuID0gQERYX0ZMQUdfbWFuQAorRFhfRkxBR19wZGYgPSBARFhfRkxBR19wZGZACitEWF9GTEFHX3BzID0gQERYX0ZMQUdfcHNACitEWF9GTEFHX3J0ZiA9IEBEWF9GTEFHX3J0ZkAKK0RYX0ZMQUdfeG1sID0gQERYX0ZMQUdfeG1sQAorRFhfSEhDID0gQERYX0hIQ0AKK0RYX0xBVEVYID0gQERYX0xBVEVYQAorRFhfTUFLRUlOREVYID0gQERYX01BS0VJTkRFWEAKK0RYX1BERkxBVEVYID0gQERYX1BERkxBVEVYQAorRFhfUEVSTCA9IEBEWF9QRVJMQAorRFhfUFJPSkVDVCA9IEBEWF9QUk9KRUNUQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFWEVFWFQgPSBARVhFRVhUQAorRkdSRVAgPSBARkdSRVBACitHQUNVVElMID0gQEdBQ1VUSUxACitHRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAorR0xJQjIwX0NGTEFHUyA9IEBHTElCMjBfQ0ZMQUdTQAorR0xJQjIwX0xJQlMgPSBAR0xJQjIwX0xJQlNACitHTU9GSUxFUyA9IEBHTU9GSUxFU0AKK0dNU0dGTVQgPSBAR01TR0ZNVEAKK0dPQkpFQ1RfQ0ZMQUdTID0gQEdPQkpFQ1RfQ0ZMQUdTQAorR09CSkVDVF9MSUJTID0gQEdPQkpFQ1RfTElCU0AKK0dSRVAgPSBAR1JFUEAKK0dUSzIwX0NGTEFHUyA9IEBHVEsyMF9DRkxBR1NACitHVEsyMF9MSUJTID0gQEdUSzIwX0xJQlNACitHVEszMF9DRkxBR1MgPSBAR1RLMzBfQ0ZMQUdTQAorR1RLMzBfTElCUyA9IEBHVEszMF9MSUJTQAorSE9XTF9DT01QQVRfVkVSU0lPTiA9IEBIT1dMX0NPTVBBVF9WRVJTSU9OQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitJTlNUT0JKRVhUID0gQElOU1RPQkpFWFRACitJTlRMTElCUyA9IEBJTlRMTElCU0AKK0lOVExUT09MX0VYVFJBQ1QgPSBASU5UTFRPT0xfRVhUUkFDVEAKK0lOVExUT09MX01FUkdFID0gQElOVExUT09MX01FUkdFQAorSU5UTFRPT0xfUEVSTCA9IEBJTlRMVE9PTF9QRVJMQAorSU5UTFRPT0xfVVBEQVRFID0gQElOVExUT09MX1VQREFURUAKK0lOVFJPU1BFQ1RJT05fQ0ZMQUdTID0gQElOVFJPU1BFQ1RJT05fQ0ZMQUdTQAorSU5UUk9TUEVDVElPTl9DT01QSUxFUiA9IEBJTlRST1NQRUNUSU9OX0NPTVBJTEVSQAorSU5UUk9TUEVDVElPTl9HRU5FUkFURSA9IEBJTlRST1NQRUNUSU9OX0dFTkVSQVRFQAorSU5UUk9TUEVDVElPTl9HSVJESVIgPSBASU5UUk9TUEVDVElPTl9HSVJESVJACitJTlRST1NQRUNUSU9OX0xJQlMgPSBASU5UUk9TUEVDVElPTl9MSUJTQAorSU5UUk9TUEVDVElPTl9NQUtFRklMRSA9IEBJTlRST1NQRUNUSU9OX01BS0VGSUxFQAorSU5UUk9TUEVDVElPTl9TQ0FOTkVSID0gQElOVFJPU1BFQ1RJT05fU0NBTk5FUkAKK0lOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUiA9IEBJTlRST1NQRUNUSU9OX1RZUEVMSUJESVJACitMRCA9IEBMREAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQkFWQUhJX0NMSUVOVF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ0xJRU5UX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPTU1PTl9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ09NTU9OX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPTVBBVF9IT1dMX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DT01QQVRfSE9XTF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9DT01QQVRfTElCRE5TX1NEX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DT01QQVRfTElCRE5TX1NEX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPUkVfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NPUkVfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfR0xJQl9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfR0xJQl9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9HT0JKRUNUX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9HT0JKRUNUX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX1FUM19WRVJTSU9OX0lORk8gPSBATElCQVZBSElfUVQzX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX1FUNF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfUVQ0X1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX1VJX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9VSV9WRVJTSU9OX0lORk9ACitMSUJEQUVNT05fQ0ZMQUdTID0gQExJQkRBRU1PTl9DRkxBR1NACitMSUJEQUVNT05fTElCUyA9IEBMSUJEQUVNT05fTElCU0AKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKK0xOX1MgPSBATE5fU0AKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKK01DUyA9IEBNQ1NACitNREFTU0VNQkxFUiA9IEBNREFTU0VNQkxFUkAKK01LRElSX1AgPSBATUtESVJfUEAKK01LSU5TVEFMTERJUlMgPSBATUtJTlNUQUxMRElSU0AKK01PQ19RVDMgPSBATU9DX1FUM0AKK01PQ19RVDQgPSBATU9DX1FUNEAKK01PTk9ET0NFUiA9IEBNT05PRE9DRVJACitNT05PRE9DX0NGTEFHUyA9IEBNT05PRE9DX0NGTEFHU0AKK01PTk9ET0NfRElSID0gQE1PTk9ET0NfRElSQAorTU9OT0RPQ19MSUJTID0gQE1PTk9ET0NfTElCU0AKK01TR0ZNVCA9IEBNU0dGTVRACitNU0dGTVRfT1BUUyA9IEBNU0dGTVRfT1BUU0AKK01TR01FUkdFID0gQE1TR01FUkdFQAorTk0gPSBATk1ACitOTUVESVQgPSBATk1FRElUQAorT0JKRFVNUCA9IEBPQkpEVU1QQAorT0JKRVhUID0gQE9CSkVYVEAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQS0dfQ09ORklHX0xJQkRJUiA9IEBQS0dfQ09ORklHX0xJQkRJUkAKK1BLR19DT05GSUdfUEFUSCA9IEBQS0dfQ09ORklHX1BBVEhACitQT0ZJTEVTID0gQFBPRklMRVNACitQT1NVQiA9IEBQT1NVQkAKK1BPX0lOX0RBVEFESVJfRkFMU0UgPSBAUE9fSU5fREFUQURJUl9GQUxTRUAKK1BPX0lOX0RBVEFESVJfVFJVRSA9IEBQT19JTl9EQVRBRElSX1RSVUVACitQVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACitQVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKK1BUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACitQWVRIT04gPSBAUFlUSE9OQAorUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKK1BZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACitQWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACitQWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKK1FUM19DRkxBR1MgPSBAUVQzX0NGTEFHU0AKK1FUM19MSUJTID0gQFFUM19MSUJTQAorUVQ0X0NGTEFHUyA9IEBRVDRfQ0ZMQUdTQAorUVQ0X0xJQlMgPSBAUVQ0X0xJQlNACitSQU5MSUIgPSBAUkFOTElCQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTVE9XID0gQFNUT1dACitTVFJJUCA9IEBTVFJJUEAKK1VTRV9OTFMgPSBAVVNFX05MU0AKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1ZJU0lCSUxJVFlfSElEREVOX0NGTEFHUyA9IEBWSVNJQklMSVRZX0hJRERFTl9DRkxBR1NACitYR0VUVEVYVCA9IEBYR0VUVEVYVEAKK1hNTF9DRkxBR1MgPSBAWE1MX0NGTEFHU0AKK1hNTF9MSUJTID0gQFhNTF9MSUJTQAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorYWNfY3RfQVIgPSBAYWNfY3RfQVJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithY3hfcHRocmVhZF9jb25maWcgPSBAYWN4X3B0aHJlYWRfY29uZmlnQAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACithdmFoaV9ydW50aW1lX2RpciA9IEBhdmFoaV9ydW50aW1lX2RpckAKK2F2YWhpX3NvY2tldCA9IEBhdmFoaV9zb2NrZXRACithdmFoaWxvY2FsZWRpciA9IEBhdmFoaWxvY2FsZWRpckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraGF2ZV9wa2dfY29uZmlnID0gQGhhdmVfcGtnX2NvbmZpZ0AKK2hhdmVfeG1sdG9tYW4gPSBAaGF2ZV94bWx0b21hbkAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitpbnRlcmZhY2VzZGlyID0gQGludGVyZmFjZXNkaXJACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKK3BrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitweWV4ZWNkaXIgPSBAcHlleGVjZGlyQAorcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3N5c3RlbWRzeXN0ZW11bml0ZGlyID0gQHN5c3RlbWRzeXN0ZW11bml0ZGlyQAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK3RvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKK3RvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitpbml0ZGRpciA9ICQoc3lzY29uZmRpcikvcmMuZC9pbml0LmQKK0VYVFJBX0RJU1QgPSBhdmFoaS5pbgoraW5pdGRfU0NSSVBUUyA9IGF2YWhpCitDTEVBTkZJTEVTID0gYXZhaGkKK2FsbDogYWxsLWFtCisKKy5TVUZGSVhFUzoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCisJICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduIGluaXRzY3JpcHQvbGZzL01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiBpbml0c2NyaXB0L2xmcy9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CitpbnN0YWxsLWluaXRkU0NSSVBUUzogJChpbml0ZF9TQ1JJUFRTKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQoaW5pdGRkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChpbml0ZGRpcikiCisJQGxpc3Q9JyQoaW5pdGRfU0NSSVBUUyknOyB0ZXN0IC1uICIkKGluaXRkZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICBpZiB0ZXN0IC1mICIkJGQkJHAiOyB0aGVuIGVjaG8gIiQkZCQkcCI7IGVjaG8gIiQkcCI7IGVsc2UgOjsgZmk7IFwKKwlkb25lIHwgXAorCXNlZCAtZSAncDtzLC4qLywsO24nIFwKKwkgICAgLWUgJ2g7c3wuKnwufCcgXAorCSAgICAtZSAncDt4O3MsLiovLCw7JCh0cmFuc2Zvcm0pJyB8IHNlZCAnTjtOO047cyxcbiwgLGcnIHwgXAorCSQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiI7IGRpcnNbIi4iXSA9IDE7IH0gXAorCSAgeyBkPSQkMzsgaWYgKGRpcnNbZF0gIT0gMSkgeyBwcmludCAiZCIsIGQ7IGRpcnNbZF0gPSAxIH0gXAorCSAgICBpZiAoJCQyID09ICQkNCkgeyBmaWxlc1tkXSA9IGZpbGVzW2RdICIgIiAkJDE7IFwKKwkgICAgICBpZiAoKytuW2RdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgeyBcCisJCXByaW50ICJmIiwgZCwgZmlsZXNbZF07IG5bZF0gPSAwOyBmaWxlc1tkXSA9ICIiIH0gfSBcCisJICAgIGVsc2UgeyBwcmludCAiZiIsIGQgIi8iICQkNCwgJCQxIH0gfSBcCisJICBFTkQgeyBmb3IgKGQgaW4gZmlsZXMpIHByaW50ICJmIiwgZCwgZmlsZXNbZF0gfScgfCBcCisJd2hpbGUgcmVhZCB0eXBlIGRpciBmaWxlczsgZG8gXAorCSAgICAgaWYgdGVzdCAiJCRkaXIiID0gLjsgdGhlbiBkaXI9OyBlbHNlIGRpcj0vJCRkaXI7IGZpOyBcCisJICAgICB0ZXN0IC16ICIkJGZpbGVzIiB8fCB7IFwKKwkgICAgICAgZWNobyAiICQoSU5TVEFMTF9TQ1JJUFQpICQkZmlsZXMgJyQoREVTVERJUikkKGluaXRkZGlyKSQkZGlyJyI7IFwKKwkgICAgICAgJChJTlNUQUxMX1NDUklQVCkgJCRmaWxlcyAiJChERVNURElSKSQoaW5pdGRkaXIpJCRkaXIiIHx8IGV4aXQgJCQ/OyBcCisJICAgICB9IFwKKwk7IGRvbmUKKwordW5pbnN0YWxsLWluaXRkU0NSSVBUUzoKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKGluaXRkX1NDUklQVFMpJzsgdGVzdCAtbiAiJChpbml0ZGRpcikiIHx8IGV4aXQgMDsgXAorCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBcCisJICAgICAgIHNlZCAtZSAncywuKi8sLDskKHRyYW5zZm9ybSknYDsgXAorCWRpcj0nJChERVNURElSKSQoaW5pdGRkaXIpJzsgJChhbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyKQorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicwordGFnczogVEFHUworVEFHUzoKKworY3RhZ3M6IENUQUdTCitDVEFHUzoKKworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1hbQorYWxsLWFtOiBNYWtlZmlsZSAkKFNDUklQVFMpCitpbnN0YWxsZGlyczoKKwlmb3IgZGlyIGluICIkKERFU1RESVIpJChpbml0ZGRpcikiOyBkbyBcCisJICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCisJZG9uZQoraW5zdGFsbDogaW5zdGFsbC1hbQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCit1bmluc3RhbGw6IHVuaW5zdGFsbC1hbQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQoraW5zdGFsbC1zdHJpcDoKKwlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICAgICAgaW5zdGFsbDsgXAorCWVsc2UgXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCisJZmkKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ0xFQU5GSUxFUykiIHx8IHJtIC1mICQoQ0xFQU5GSUxFUykKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWdlbmVyaWMKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLWluaXRkU0NSSVBUUworCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1kdmktYW06CisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLWFtCisKK3BkZi1hbToKKworcHM6IHBzLWFtCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06IHVuaW5zdGFsbC1pbml0ZFNDUklQVFMKKworLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAorCisuUEhPTlk6IGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIFwKKwlkaXN0Y2xlYW4gZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGRpciBkdmkgXAorCWR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBcCisJaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBcCisJaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIFwKKwlpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtaW5pdGRTQ1JJUFRTIGluc3RhbGwtbWFuIFwKKwlpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAorCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCisJbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAorCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKKwl1bmluc3RhbGwgdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1pbml0ZFNDUklQVFMKKworCithdmFoaTogYXZhaGkuaW4KKwkkKEFNX1ZfR0VOKXNlZCBcCisJCS1lICdzLEBzYmluZGlyXEAsJChzYmluZGlyKSxnJyBcCisJCS1lICdzLEBsb2NhbHN0YXRlZGlyXEAsJChsb2NhbHN0YXRlZGlyKSxnJyBcCisJCSQ8ID4gJEAgJiYgXAorCWNobW9kICt4ICRACisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9pbml0c2NyaXB0L2xmcy9hdmFoaS5pbiBiL2F2YWhpLTAuNi4zMS9pbml0c2NyaXB0L2xmcy9hdmFoaS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTM2NzJhCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2luaXRzY3JpcHQvbGZzL2F2YWhpLmluCkBAIC0wLDAgKzEsNDkgQEAKKyMhL2Jpbi9zaAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJlZ2luICRyY19iYXNlL2luaXQuZC9hdmFoaQorIworIyBEZXNjcmlwdGlvbiA6IEF2YWhpIGRhZW1vbiBsb2FkZXIKKyMKKyMgQXV0aG9ycyAgICAgOiBXaWxsaWFtIEltbWVuZG9yZiAtIHdpbGwuaW1tZW5kb3JmQGdtYWlsLmNvbQorIworIyBWZXJzaW9uICAgICA6IDAwLjAwCisjCisjIE5vdGVzICAgICAgIDogQmFzZWQgb2ZmIG9mIHRoZSBMRlMgNi40IHN5c2tsb2dkIHNjcmlwdC4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisuIC9ldGMvc3lzY29uZmlnL3JjCisuICR7cmNfZnVuY3Rpb25zfQorCitjYXNlICIkezF9IiBpbgorCXN0YXJ0KQorCQlib290X21lc2cgIlN0YXJ0aW5nIHRoZSBBdmFoaSBkYWVtb24uLi4iCisJCWxvYWRwcm9jIGF2YWhpLWRhZW1vbiAtRAorCQk7OworCisJc3RvcCkKKwkJYm9vdF9tZXNnICJTdG9wcGluZyB0aGUgQXZhaGkgZGFlbW9uLi4uIgorCQlhdmFoaS1kYWVtb24gLWsKKwkJZXZhbHVhdGVfcmV0dmFsCisJCTs7CisKKwlyZWxvYWQpCisJCWJvb3RfbWVzZyAiUmVsb2FkaW5nIHRoZSBBdmFoaSBkYWVtb24uLi4iCisJCXJlbG9hZHByb2MgYXZhaGktZGFlbW9uIC1yCisJCTs7CisJcmVzdGFydCkKKwkJJHswfSBzdG9wCisJCXNsZWVwIDEKKwkJJHswfSBzdGFydAorCQk7OworCisJc3RhdHVzKQorCQlzdGF0dXNwcm9jIGF2YWhpLWRhZW1vbgorCQk7OworCSopCisJCWVjaG8gIlVzYWdlOiAkezB9IHtzdGFydHxzdG9wfHJlbG9hZHxyZXN0YXJ0fHN0YXR1c30iCisJCWV4aXQgMQorCQk7OworZXNhYworCisjIEVuZCAkcmNfYmFzZS9pbml0LmQvYXZhaGkKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9pbml0c2NyaXB0L21hbmRyaXZhL01ha2VmaWxlLmFtIGIvYXZhaGktMC42LjMxL2luaXRzY3JpcHQvbWFuZHJpdmEvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgwNDI2YgotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9pbml0c2NyaXB0L21hbmRyaXZhL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMzIgQEAKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisjCisjIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisjIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisjIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisjIFVTQS4KKworaW5pdGRkaXIgPSAkKHN5c2NvbmZkaXIpL3JjLmQvaW5pdC5kCisKK0VYVFJBX0RJU1QgPSBhdmFoaS1kYWVtb24uaW4gYXZhaGktZG5zY29uZmQuaW4KKworaW5pdGRfU0NSSVBUUyA9IGF2YWhpLWRhZW1vbiBhdmFoaS1kbnNjb25mZAorCitDTEVBTkZJTEVTID0gYXZhaGktZGFlbW9uIGF2YWhpLWRuc2NvbmZkCisKK2F2YWhpLWRhZW1vbjogYXZhaGktZGFlbW9uLmluCisJc2VkIC1lICdzLEBzYmluZGlyXEAsJChzYmluZGlyKSxnJyAkPCA+ICRACisJY2htb2QgK3ggJEAKKworYXZhaGktZG5zY29uZmQ6IGF2YWhpLWRuc2NvbmZkLmluCisJc2VkIC1lICdzLEBzYmluZGlyXEAsJChzYmluZGlyKSxnJyAkPCA+ICRACisJY2htb2QgK3ggJEAKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9pbml0c2NyaXB0L21hbmRyaXZhL01ha2VmaWxlLmluIGIvYXZhaGktMC42LjMxL2luaXRzY3JpcHQvbWFuZHJpdmEvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGMwNzQ0OAotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9pbml0c2NyaXB0L21hbmRyaXZhL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNTk5IEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjExLjMgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACisKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisjCisjIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisjIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisjIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisjIFVTQS4KKworVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorc3ViZGlyID0gaW5pdHNjcmlwdC9tYW5kcml2YQorRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vYWN4X3B0aHJlYWQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2djY19zdGFja19wcm90ZWN0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9nY2NfdmlzaWJpbGl0eS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vaW50bHRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2ludHJvc3BlY3Rpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2x0b3B0aW9ucy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHR2ZXJzaW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbmxzLm00ICQodG9wX3NyY2RpcikvY29tbW9uL3B5dGhvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9hY2luY2x1ZGUubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vZG94eWdlbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7CithbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAorICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCisgICAgKikgZj0kJHA7OyBcCisgIGVzYWM7CithbV9fc3RyaXBfZGlyID0gZj1gZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7CithbV9faW5zdGFsbF9tYXggPSA0MAorYW1fX25vYmFzZV9zdHJpcF9zZXR1cCA9IFwKKyAgc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYAorYW1fX25vYmFzZV9zdHJpcCA9IFwKKyAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkIC1lICJzfCQkc3JjZGlyc3RyaXAvfHwiCithbV9fbm9iYXNlX2xpc3QgPSAkKGFtX19ub2Jhc2Vfc3RyaXBfc2V0dXApOyBcCisgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCisgIHNlZCAic3wgJCRzcmNkaXJzdHJpcC98IHw7IicgLyAuKlwvLyFzLyAuKi8gLi87IHMsXCggLipcKS9bXi9dKiQkLFwxLCcgfCBcCisgICQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiIgfSB7IGZpbGVzWyQkMl0gPSBmaWxlc1skJDJdICIgIiAkJDE7IFwKKyAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCisgICAgICB7IHByaW50ICQkMiwgZmlsZXNbJCQyXTsgblskJDJdID0gMDsgZmlsZXNbJCQyXSA9ICIiIH0gfSBcCisgICAgRU5EIHsgZm9yIChkaXIgaW4gZmlsZXMpIHByaW50IGRpciwgZmlsZXNbZGlyXSB9JworYW1fX2Jhc2VfbGlzdCA9IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJyB8IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJworYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpciA9IHsgXAorICB0ZXN0IC16ICIkJGZpbGVzIiBcCisgICAgfHwgeyB0ZXN0ICEgLWQgIiQkZGlyIiAmJiB0ZXN0ICEgLWYgIiQkZGlyIiAmJiB0ZXN0ICEgLXIgIiQkZGlyIjsgfSBcCisgICAgfHwgeyBlY2hvICIgKCBjZCAnJCRkaXInICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAorICAgICAgICAgJChhbV9fY2QpICIkJGRpciIgJiYgcm0gLWYgJCRmaWxlczsgfTsgXAorICB9CithbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQoaW5pdGRkaXIpIgorU0NSSVBUUyA9ICQoaW5pdGRfU0NSSVBUUykKK0FNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQorYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAiICRAOworQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQorYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKK2FtX192X2F0XzAgPSBACitTT1VSQ0VTID0KK0RJU1RfU09VUkNFUyA9CitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQUxMX0xJTkdVQVMgPSBAQUxMX0xJTkdVQVNACitBTVRBUiA9IEBBTVRBUkAKK0FNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAorQVIgPSBAQVJACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVZBSElfQVVUT0lQRF9HUk9VUCA9IEBBVkFISV9BVVRPSVBEX0dST1VQQAorQVZBSElfQVVUT0lQRF9VU0VSID0gQEFWQUhJX0FVVE9JUERfVVNFUkAKK0FWQUhJX0dST1VQID0gQEFWQUhJX0dST1VQQAorQVZBSElfUFJJVl9BQ0NFU1NfR1JPVVAgPSBAQVZBSElfUFJJVl9BQ0NFU1NfR1JPVVBACitBVkFISV9VU0VSID0gQEFWQUhJX1VTRVJACitBV0sgPSBAQVdLQAorQ0FUQUxPR1MgPSBAQ0FUQUxPR1NACitDQVRPQkpFWFQgPSBAQ0FUT0JKRVhUQAorQ0MgPSBAQ0NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREFUQURJUk5BTUUgPSBAREFUQURJUk5BTUVACitEQlVTX0NGTEFHUyA9IEBEQlVTX0NGTEFHU0AKK0RCVVNfTElCUyA9IEBEQlVTX0xJQlNACitEQlVTX1NZU1RFTV9CVVNfREVGQVVMVF9BRERSRVNTID0gQERCVVNfU1lTVEVNX0JVU19ERUZBVUxUX0FERFJFU1NACitEQlVTX1NZU19ESVIgPSBAREJVU19TWVNfRElSQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RMTFRPT0wgPSBARExMVE9PTEAKK0RPWFlHRU5fUEFQRVJfU0laRSA9IEBET1hZR0VOX1BBUEVSX1NJWkVACitEU1lNVVRJTCA9IEBEU1lNVVRJTEAKK0RVTVBCSU4gPSBARFVNUEJJTkAKK0RYX0NPTkZJRyA9IEBEWF9DT05GSUdACitEWF9ET0NESVIgPSBARFhfRE9DRElSQAorRFhfRE9UID0gQERYX0RPVEAKK0RYX0RPWFlHRU4gPSBARFhfRE9YWUdFTkAKK0RYX0RWSVBTID0gQERYX0RWSVBTQAorRFhfRUdSRVAgPSBARFhfRUdSRVBACitEWF9FTlYgPSBARFhfRU5WQAorRFhfRkxBR19jaGkgPSBARFhfRkxBR19jaGlACitEWF9GTEFHX2NobSA9IEBEWF9GTEFHX2NobUAKK0RYX0ZMQUdfZG9jID0gQERYX0ZMQUdfZG9jQAorRFhfRkxBR19kb3QgPSBARFhfRkxBR19kb3RACitEWF9GTEFHX2h0bWwgPSBARFhfRkxBR19odG1sQAorRFhfRkxBR19tYW4gPSBARFhfRkxBR19tYW5ACitEWF9GTEFHX3BkZiA9IEBEWF9GTEFHX3BkZkAKK0RYX0ZMQUdfcHMgPSBARFhfRkxBR19wc0AKK0RYX0ZMQUdfcnRmID0gQERYX0ZMQUdfcnRmQAorRFhfRkxBR194bWwgPSBARFhfRkxBR194bWxACitEWF9ISEMgPSBARFhfSEhDQAorRFhfTEFURVggPSBARFhfTEFURVhACitEWF9NQUtFSU5ERVggPSBARFhfTUFLRUlOREVYQAorRFhfUERGTEFURVggPSBARFhfUERGTEFURVhACitEWF9QRVJMID0gQERYX1BFUkxACitEWF9QUk9KRUNUID0gQERYX1BST0pFQ1RACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VYRUVYVCA9IEBFWEVFWFRACitGR1JFUCA9IEBGR1JFUEAKK0dBQ1VUSUwgPSBAR0FDVVRJTEAKK0dFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACitHTElCMjBfQ0ZMQUdTID0gQEdMSUIyMF9DRkxBR1NACitHTElCMjBfTElCUyA9IEBHTElCMjBfTElCU0AKK0dNT0ZJTEVTID0gQEdNT0ZJTEVTQAorR01TR0ZNVCA9IEBHTVNHRk1UQAorR09CSkVDVF9DRkxBR1MgPSBAR09CSkVDVF9DRkxBR1NACitHT0JKRUNUX0xJQlMgPSBAR09CSkVDVF9MSUJTQAorR1JFUCA9IEBHUkVQQAorR1RLMjBfQ0ZMQUdTID0gQEdUSzIwX0NGTEFHU0AKK0dUSzIwX0xJQlMgPSBAR1RLMjBfTElCU0AKK0dUSzMwX0NGTEFHUyA9IEBHVEszMF9DRkxBR1NACitHVEszMF9MSUJTID0gQEdUSzMwX0xJQlNACitIT1dMX0NPTVBBVF9WRVJTSU9OID0gQEhPV0xfQ09NUEFUX1ZFUlNJT05ACitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lOU1RPQkpFWFQgPSBASU5TVE9CSkVYVEAKK0lOVExMSUJTID0gQElOVExMSUJTQAorSU5UTFRPT0xfRVhUUkFDVCA9IEBJTlRMVE9PTF9FWFRSQUNUQAorSU5UTFRPT0xfTUVSR0UgPSBASU5UTFRPT0xfTUVSR0VACitJTlRMVE9PTF9QRVJMID0gQElOVExUT09MX1BFUkxACitJTlRMVE9PTF9VUERBVEUgPSBASU5UTFRPT0xfVVBEQVRFQAorSU5UUk9TUEVDVElPTl9DRkxBR1MgPSBASU5UUk9TUEVDVElPTl9DRkxBR1NACitJTlRST1NQRUNUSU9OX0NPTVBJTEVSID0gQElOVFJPU1BFQ1RJT05fQ09NUElMRVJACitJTlRST1NQRUNUSU9OX0dFTkVSQVRFID0gQElOVFJPU1BFQ1RJT05fR0VORVJBVEVACitJTlRST1NQRUNUSU9OX0dJUkRJUiA9IEBJTlRST1NQRUNUSU9OX0dJUkRJUkAKK0lOVFJPU1BFQ1RJT05fTElCUyA9IEBJTlRST1NQRUNUSU9OX0xJQlNACitJTlRST1NQRUNUSU9OX01BS0VGSUxFID0gQElOVFJPU1BFQ1RJT05fTUFLRUZJTEVACitJTlRST1NQRUNUSU9OX1NDQU5ORVIgPSBASU5UUk9TUEVDVElPTl9TQ0FOTkVSQAorSU5UUk9TUEVDVElPTl9UWVBFTElCRElSID0gQElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUkAKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCQVZBSElfQ0xJRU5UX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DTElFTlRfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfQ09NTU9OX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DT01NT05fVkVSU0lPTl9JTkZPQAorTElCQVZBSElfQ09NUEFUX0hPV0xfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NPTVBBVF9IT1dMX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPTVBBVF9MSUJETlNfU0RfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NPTVBBVF9MSUJETlNfU0RfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfQ09SRV9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ09SRV9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9HTElCX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9HTElCX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0dPQkpFQ1RfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0dPQkpFQ1RfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfUVQzX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9RVDNfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfUVQ0X1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9RVDRfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfVUlfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX1VJX1ZFUlNJT05fSU5GT0AKK0xJQkRBRU1PTl9DRkxBR1MgPSBATElCREFFTU9OX0NGTEFHU0AKK0xJQkRBRU1PTl9MSUJTID0gQExJQkRBRU1PTl9MSUJTQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAorTUNTID0gQE1DU0AKK01EQVNTRU1CTEVSID0gQE1EQVNTRU1CTEVSQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTUtJTlNUQUxMRElSUyA9IEBNS0lOU1RBTExESVJTQAorTU9DX1FUMyA9IEBNT0NfUVQzQAorTU9DX1FUNCA9IEBNT0NfUVQ0QAorTU9OT0RPQ0VSID0gQE1PTk9ET0NFUkAKK01PTk9ET0NfQ0ZMQUdTID0gQE1PTk9ET0NfQ0ZMQUdTQAorTU9OT0RPQ19ESVIgPSBATU9OT0RPQ19ESVJACitNT05PRE9DX0xJQlMgPSBATU9OT0RPQ19MSUJTQAorTVNHRk1UID0gQE1TR0ZNVEAKK01TR0ZNVF9PUFRTID0gQE1TR0ZNVF9PUFRTQAorTVNHTUVSR0UgPSBATVNHTUVSR0VACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitPQkpEVU1QID0gQE9CSkRVTVBACitPQkpFWFQgPSBAT0JKRVhUQAorT1RPT0wgPSBAT1RPT0xACitPVE9PTDY0ID0gQE9UT09MNjRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK1BLR19DT05GSUdfTElCRElSID0gQFBLR19DT05GSUdfTElCRElSQAorUEtHX0NPTkZJR19QQVRIID0gQFBLR19DT05GSUdfUEFUSEAKK1BPRklMRVMgPSBAUE9GSUxFU0AKK1BPU1VCID0gQFBPU1VCQAorUE9fSU5fREFUQURJUl9GQUxTRSA9IEBQT19JTl9EQVRBRElSX0ZBTFNFQAorUE9fSU5fREFUQURJUl9UUlVFID0gQFBPX0lOX0RBVEFESVJfVFJVRUAKK1BUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKK1BUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAorUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKK1BZVEhPTiA9IEBQWVRIT05ACitQWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAorUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKK1BZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKK1BZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAorUVQzX0NGTEFHUyA9IEBRVDNfQ0ZMQUdTQAorUVQzX0xJQlMgPSBAUVQzX0xJQlNACitRVDRfQ0ZMQUdTID0gQFFUNF9DRkxBR1NACitRVDRfTElCUyA9IEBRVDRfTElCU0AKK1JBTkxJQiA9IEBSQU5MSUJACitTRUQgPSBAU0VEQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NUT1cgPSBAU1RPV0AKK1NUUklQID0gQFNUUklQQAorVVNFX05MUyA9IEBVU0VfTkxTQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorVklTSUJJTElUWV9ISURERU5fQ0ZMQUdTID0gQFZJU0lCSUxJVFlfSElEREVOX0NGTEFHU0AKK1hHRVRURVhUID0gQFhHRVRURVhUQAorWE1MX0NGTEFHUyA9IEBYTUxfQ0ZMQUdTQAorWE1MX0xJQlMgPSBAWE1MX0xJQlNACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9BUiA9IEBhY19jdF9BUkAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKK2FjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK2FjeF9wdGhyZWFkX2NvbmZpZyA9IEBhY3hfcHRocmVhZF9jb25maWdACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2F2YWhpX3J1bnRpbWVfZGlyID0gQGF2YWhpX3J1bnRpbWVfZGlyQAorYXZhaGlfc29ja2V0ID0gQGF2YWhpX3NvY2tldEAKK2F2YWhpbG9jYWxlZGlyID0gQGF2YWhpbG9jYWxlZGlyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitoYXZlX3BrZ19jb25maWcgPSBAaGF2ZV9wa2dfY29uZmlnQAoraGF2ZV94bWx0b21hbiA9IEBoYXZlX3htbHRvbWFuQAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2ludGVyZmFjZXNkaXIgPSBAaW50ZXJmYWNlc2RpckAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAorcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3B5ZXhlY2RpciA9IEBweWV4ZWNkaXJACitweXRob25kaXIgPSBAcHl0aG9uZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzcmNkaXIgPSBAc3JjZGlyQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAorc3lzdGVtZHN5c3RlbXVuaXRkaXIgPSBAc3lzdGVtZHN5c3RlbXVuaXRkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK2luaXRkZGlyID0gJChzeXNjb25mZGlyKS9yYy5kL2luaXQuZAorRVhUUkFfRElTVCA9IGF2YWhpLWRhZW1vbi5pbiBhdmFoaS1kbnNjb25mZC5pbgoraW5pdGRfU0NSSVBUUyA9IGF2YWhpLWRhZW1vbiBhdmFoaS1kbnNjb25mZAorQ0xFQU5GSUxFUyA9IGF2YWhpLWRhZW1vbiBhdmFoaS1kbnNjb25mZAorYWxsOiBhbGwtYW0KKworLlNVRkZJWEVTOgorJChzcmNkaXIpL01ha2VmaWxlLmluOiAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gaW5pdHNjcmlwdC9tYW5kcml2YS9NYWtlZmlsZSc7IFwKKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gaW5pdHNjcmlwdC9tYW5kcml2YS9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CitpbnN0YWxsLWluaXRkU0NSSVBUUzogJChpbml0ZF9TQ1JJUFRTKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQoaW5pdGRkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChpbml0ZGRpcikiCisJQGxpc3Q9JyQoaW5pdGRfU0NSSVBUUyknOyB0ZXN0IC1uICIkKGluaXRkZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICBpZiB0ZXN0IC1mICIkJGQkJHAiOyB0aGVuIGVjaG8gIiQkZCQkcCI7IGVjaG8gIiQkcCI7IGVsc2UgOjsgZmk7IFwKKwlkb25lIHwgXAorCXNlZCAtZSAncDtzLC4qLywsO24nIFwKKwkgICAgLWUgJ2g7c3wuKnwufCcgXAorCSAgICAtZSAncDt4O3MsLiovLCw7JCh0cmFuc2Zvcm0pJyB8IHNlZCAnTjtOO047cyxcbiwgLGcnIHwgXAorCSQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiI7IGRpcnNbIi4iXSA9IDE7IH0gXAorCSAgeyBkPSQkMzsgaWYgKGRpcnNbZF0gIT0gMSkgeyBwcmludCAiZCIsIGQ7IGRpcnNbZF0gPSAxIH0gXAorCSAgICBpZiAoJCQyID09ICQkNCkgeyBmaWxlc1tkXSA9IGZpbGVzW2RdICIgIiAkJDE7IFwKKwkgICAgICBpZiAoKytuW2RdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgeyBcCisJCXByaW50ICJmIiwgZCwgZmlsZXNbZF07IG5bZF0gPSAwOyBmaWxlc1tkXSA9ICIiIH0gfSBcCisJICAgIGVsc2UgeyBwcmludCAiZiIsIGQgIi8iICQkNCwgJCQxIH0gfSBcCisJICBFTkQgeyBmb3IgKGQgaW4gZmlsZXMpIHByaW50ICJmIiwgZCwgZmlsZXNbZF0gfScgfCBcCisJd2hpbGUgcmVhZCB0eXBlIGRpciBmaWxlczsgZG8gXAorCSAgICAgaWYgdGVzdCAiJCRkaXIiID0gLjsgdGhlbiBkaXI9OyBlbHNlIGRpcj0vJCRkaXI7IGZpOyBcCisJICAgICB0ZXN0IC16ICIkJGZpbGVzIiB8fCB7IFwKKwkgICAgICAgZWNobyAiICQoSU5TVEFMTF9TQ1JJUFQpICQkZmlsZXMgJyQoREVTVERJUikkKGluaXRkZGlyKSQkZGlyJyI7IFwKKwkgICAgICAgJChJTlNUQUxMX1NDUklQVCkgJCRmaWxlcyAiJChERVNURElSKSQoaW5pdGRkaXIpJCRkaXIiIHx8IGV4aXQgJCQ/OyBcCisJICAgICB9IFwKKwk7IGRvbmUKKwordW5pbnN0YWxsLWluaXRkU0NSSVBUUzoKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKGluaXRkX1NDUklQVFMpJzsgdGVzdCAtbiAiJChpbml0ZGRpcikiIHx8IGV4aXQgMDsgXAorCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBcCisJICAgICAgIHNlZCAtZSAncywuKi8sLDskKHRyYW5zZm9ybSknYDsgXAorCWRpcj0nJChERVNURElSKSQoaW5pdGRkaXIpJzsgJChhbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyKQorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicwordGFnczogVEFHUworVEFHUzoKKworY3RhZ3M6IENUQUdTCitDVEFHUzoKKworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1hbQorYWxsLWFtOiBNYWtlZmlsZSAkKFNDUklQVFMpCitpbnN0YWxsZGlyczoKKwlmb3IgZGlyIGluICIkKERFU1RESVIpJChpbml0ZGRpcikiOyBkbyBcCisJICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCisJZG9uZQoraW5zdGFsbDogaW5zdGFsbC1hbQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCit1bmluc3RhbGw6IHVuaW5zdGFsbC1hbQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQoraW5zdGFsbC1zdHJpcDoKKwlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICAgICAgaW5zdGFsbDsgXAorCWVsc2UgXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCisJZmkKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ0xFQU5GSUxFUykiIHx8IHJtIC1mICQoQ0xFQU5GSUxFUykKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWdlbmVyaWMKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLWluaXRkU0NSSVBUUworCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1kdmktYW06CisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLWFtCisKK3BkZi1hbToKKworcHM6IHBzLWFtCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06IHVuaW5zdGFsbC1pbml0ZFNDUklQVFMKKworLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAorCisuUEhPTlk6IGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIFwKKwlkaXN0Y2xlYW4gZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGRpciBkdmkgXAorCWR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBcCisJaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBcCisJaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIFwKKwlpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtaW5pdGRTQ1JJUFRTIGluc3RhbGwtbWFuIFwKKwlpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAorCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCisJbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAorCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKKwl1bmluc3RhbGwgdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1pbml0ZFNDUklQVFMKKworCithdmFoaS1kYWVtb246IGF2YWhpLWRhZW1vbi5pbgorCXNlZCAtZSAncyxAc2JpbmRpclxALCQoc2JpbmRpciksZycgJDwgPiAkQAorCWNobW9kICt4ICRACisKK2F2YWhpLWRuc2NvbmZkOiBhdmFoaS1kbnNjb25mZC5pbgorCXNlZCAtZSAncyxAc2JpbmRpclxALCQoc2JpbmRpciksZycgJDwgPiAkQAorCWNobW9kICt4ICRACisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9pbml0c2NyaXB0L21hbmRyaXZhL2F2YWhpLWRhZW1vbi5pbiBiL2F2YWhpLTAuNi4zMS9pbml0c2NyaXB0L21hbmRyaXZhL2F2YWhpLWRhZW1vbi5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODFiOWEyCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2luaXRzY3JpcHQvbWFuZHJpdmEvYXZhaGktZGFlbW9uLmluCkBAIC0wLDAgKzEsOTQgQEAKKyMhIC9iaW4vc2gKKyMKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6IGF2YWhpCisjIFJlcXVpcmVkLVN0YXJ0OiAkbmV0d29yayBtZXNzYWdlYnVzCisjIFJlcXVpcmVkLVN0b3A6ICRuZXR3b3JrIG1lc3NhZ2VidXMKKyMgRGVmYXVsdC1TdGFydDogMyA1CisjIERlc2NyaXB0aW9uOiBBdmFoaSwgYSBaZXJvQ29uZiBkYWVtb24gd2hpY2hzIGltcGxlbWVudHMgYW4gbUROUyBzdGFjayAKKyMjIyBFTkQgSU5JVCBJTkZPCisKK0FWQUhJX0JJTj1Ac2JpbmRpckAvYXZhaGktZGFlbW9uCit0ZXN0IC14ICRBVkFISV9CSU4gfHwgZXhpdCA1CisKKyMgU291cmNlIGZ1bmN0aW9uIGxpYnJhcnkuCisuIC9ldGMvaW5pdC5kL2Z1bmN0aW9ucworCisuIC9ldGMvc3lzY29uZmlnL25ldHdvcmsKKworIyBDaGVjayB0aGF0IG5ldHdvcmtpbmcgaXMgY29uZmlndXJlZC4KK1sgIiR7TkVUV09SS0lOR30iID0gIm5vIiBdICYmIGV4aXQgMAorCitzdGFydCgpIHsKKwllY2hvIC1uICQiU3RhcnRpbmcgQXZhaGkgZGFlbW9uOiAiCisJJEFWQUhJX0JJTiAtRAorCVJFVFZBTD0kPworCWlmIFsgJFJFVFZBTCA9IDAgXTsgdGhlbgorCSAgICB0b3VjaCAvdmFyL2xvY2svc3Vic3lzL2F2YWhpLWRhZW1vbgorCSAgICBzdWNjZXNzICQiJGJhc2Ugc3RhcnR1cCIKKwllbHNlCisJICAgIGZhaWx1cmUgJCIkYmFzZSBzdGFydHVwIgorCWZpCisJZWNobworCXJldHVybiAkUkVUVkFMCit9CisKK3N0b3AoKSB7CisJZWNobyAtbiAiU2h1dHRpbmcgZG93biBBdmFoaSBkYWVtb246ICIKKwkkQVZBSElfQklOIC1rCisJUkVUVkFMPSQ/CisJaWYgWyAkUkVUVkFMID0gMCBdOyB0aGVuCisJICAgIHJtIC1mIC92YXIvbG9jay9zdWJzeXMvYXZhaGktZGFlbW9uCisJICAgIHN1Y2Nlc3MgJCIkYmFzZSBzdG9wIgorCWVsc2UKKwkgICAgZmFpbHVyZSAkIiRiYXNlIHN0b3AiCisJZmkKKwllY2hvCisJcmV0dXJuICRSRVRWQUwKK30KKworcmVsb2FkKCkgeworCWVjaG8gLW4gIlJlbG9hZGluZyBBdmFoaSBkYWVtb246ICIKKwkkQVZBSElfQklOIC1yCisJUkVUVkFMPSQ/CisJWyAkUkVUVkFMID0gMCBdICYmIHN1Y2Nlc3MgJCIkYmFzZSBzdGFydHVwIiB8fCBmYWlsdXJlICQiJGJhc2Ugc3RhcnR1cCIKKwllY2hvCisJcmV0dXJuICRSRVRWQUwKK30KKworCityZXN0YXJ0KCkgeworCXN0b3AKKwlzdGFydAorfQorCitSRVRWQUw9MAorCisjIFNlZSBob3cgd2Ugd2VyZSBjYWxsZWQuCitjYXNlICIkMSIgaW4KKyAgc3RhcnQpCisJc3RhcnQKKwk7OworICBzdG9wKQorCXN0b3AKKwk7OworICBzdGF0dXMpCisJJEFWQUhJX0JJTiAtYworCVsgJD8gPSAwIF0gJiYgZWNobyAiQXZhaGkgZGFlbW9uIGlzIHJ1bm5pbmciIHx8IGVjaG8gIkF2YWhpIGRhZW1vbiBpcyBub3QgcnVubmluZyIKKwk7OworICByZXN0YXJ0KQorCXJlc3RhcnQKKwk7OworICByZWxvYWQpCisJcmVsb2FkIAorCTs7CisgIGNvbmRyZXN0YXJ0KQorCSRBVkFISV9CSU4gLWMKKwlbICQ/ID0gMCBdICYmIHJlc3RhcnQgfHwgOgorCTs7CisgICopCisJZWNobyAkIlVzYWdlOiAkMCB7c3RhcnR8c3RvcHxzdGF0dXN8cmVzdGFydHxjb25kcmVzdGFydH0iCisJZXhpdCAxCitlc2FjCisKK2V4aXQgJD8KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9pbml0c2NyaXB0L21hbmRyaXZhL2F2YWhpLWRuc2NvbmZkLmluIGIvYXZhaGktMC42LjMxL2luaXRzY3JpcHQvbWFuZHJpdmEvYXZhaGktZG5zY29uZmQuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIyMTM1NgotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9pbml0c2NyaXB0L21hbmRyaXZhL2F2YWhpLWRuc2NvbmZkLmluCkBAIC0wLDAgKzEsOTQgQEAKKyMhIC9iaW4vc2gKKyMKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6IGF2YWhpLWRuc2NvbmZkCisjIFJlcXVpcmVkLVN0YXJ0OiBhdmFoaQorIyBSZXF1aXJlZC1TdG9wOiBhdmFoaQorIyBEZWZhdWx0LVN0YXJ0OiAzIDUKKyMgRGVzY3JpcHRpb246IEEgRE5TIGNvbmZpZ3VyYXRpb24gZGFlbW9uIHVzaW5nIG1ETlMgaW4gYSBESENQLWxpa2UgZmFzaGlvbgorIyMjIEVORCBJTklUIElORk8KKworQVZBSElfQklOPUBzYmluZGlyQC9hdmFoaS1kbnNjb25mZAordGVzdCAteCAkQVZBSElfQklOIHx8IGV4aXQgNQorCisjIFNvdXJjZSBmdW5jdGlvbiBsaWJyYXJ5LgorLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKworLiAvZXRjL3N5c2NvbmZpZy9uZXR3b3JrCisKKyMgQ2hlY2sgdGhhdCBuZXR3b3JraW5nIGlzIGNvbmZpZ3VyZWQuCitbICR7TkVUV09SS0lOR30gPSAibm8iIF0gJiYgZXhpdCAwCisKK3N0YXJ0KCkgeworCWVjaG8gLW4gJCJTdGFydGluZyBBdmFoaSBETlMgZGFlbW9uOiAiCisJJEFWQUhJX0JJTiAtRAorCVJFVFZBTD0kPworCWlmIFsgJFJFVFZBTCA9IDAgXTsgdGhlbgorCSAgICB0b3VjaCAvdmFyL2xvY2svc3Vic3lzL2F2YWhpLWRuc2NvbmZkCisJICAgIHN1Y2Nlc3MgJCIkYmFzZSBzdGFydHVwIgorCWVsc2UKKwkgICAgZmFpbHVyZSAkIiRiYXNlIHN0YXJ0dXAiCisJZmkKKwllY2hvCisJcmV0dXJuICRSRVRWQUwKK30KKworc3RvcCgpIHsKKwllY2hvIC1uICJTaHV0dGluZyBkb3duIEF2YWhpIEROUyBkYWVtb246ICIKKwkkQVZBSElfQklOIC1rCisJUkVUVkFMPSQ/CisJaWYgWyAkUkVUVkFMID0gMCBdOyB0aGVuCisJICAgIHJtIC1mIC92YXIvbG9jay9zdWJzeXMvYXZhaGktZG5zY29uZmQKKwkgICAgc3VjY2VzcyAkIiRiYXNlIHN0b3AiCisJZWxzZQorCSAgICBmYWlsdXJlICQiJGJhc2Ugc3RvcCIKKwlmaQorCWVjaG8KKwlyZXR1cm4gJFJFVFZBTAorfQorCityZWxvYWQoKSB7CisJZWNobyAtbiAiUmVsb2FkaW5nIEF2YWhpIEROUyBkYWVtb246ICIKKwkkQVZBSElfQklOIC1yCisJUkVUVkFMPSQ/CisJWyAkUkVUVkFMID0gMCBdICYmIHN1Y2Nlc3MgJCIkYmFzZSBzdGFydHVwIiB8fCBmYWlsdXJlICQiJGJhc2Ugc3RhcnR1cCIKKwllY2hvCisJcmV0dXJuICRSRVRWQUwKK30KKworCityZXN0YXJ0KCkgeworCXN0b3AKKwlzdGFydAorfQorCitSRVRWQUw9MAorCisjIFNlZSBob3cgd2Ugd2VyZSBjYWxsZWQuCitjYXNlICIkMSIgaW4KKyAgc3RhcnQpCisJc3RhcnQKKwk7OworICBzdG9wKQorCXN0b3AKKwk7OworICBzdGF0dXMpCisgICAgICAgICRBVkFISV9CSU4gLWMKKwlbICQ/ID0gMCBdICYmIGVjaG8gIkF2YWhpIEROUyBkYWVtb24gaXMgcnVubmluZyIgfHwgZWNobyAiQXZhaGkgRE5TIGRhZW1vbiBpcyBub3QgcnVubmluZyIKKwk7OworICByZXN0YXJ0KQorCXJlc3RhcnQKKwk7OworICByZWxvYWQpCisgICAgICAgIHJlbG9hZCAKKwk7OworICBjb25kcmVzdGFydCkKKyAgICAgICAgJEFWQUhJX0JJTiAtYworICAgICAgICBbICQ/ID0gMCBdICYmIHJlc3RhcnQgfHwgOgorCTs7CisgICopCisJZWNobyAkIlVzYWdlOiAkMCB7c3RhcnR8c3RvcHxzdGF0dXN8cmVzdGFydHxjb25kcmVzdGFydH0iCisJZXhpdCAxCitlc2FjCisKK2V4aXQgJD8KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9pbml0c2NyaXB0L3NsYWNrd2FyZS9NYWtlZmlsZS5hbSBiL2F2YWhpLTAuNi4zMS9pbml0c2NyaXB0L3NsYWNrd2FyZS9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDE1Mzg3Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2luaXRzY3JpcHQvc2xhY2t3YXJlL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMzIgQEAKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisjCisjIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisjIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisjIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisjIFVTQS4KKworaW5pdGRkaXIgPSAkKHN5c2NvbmZkaXIpL3JjLmQKKworRVhUUkFfRElTVCA9IGF2YWhpLWRhZW1vbi5pbiBhdmFoaS1kbnNjb25mZC5pbgorCitpbml0ZF9TQ1JJUFRTID0gcmMuYXZhaGlkYWVtb24gcmMuYXZhaGlkbnNjb25mZAorCitDTEVBTkZJTEVTID0gcmMuYXZhaGlkYWVtb24gcmMuYXZhaGlkbnNjb25mZAorCityYy5hdmFoaWRhZW1vbjogYXZhaGktZGFlbW9uLmluCisJc2VkIC1lICdzLEBzYmluZGlyXEAsJChzYmluZGlyKSxnJyAkPCA+ICRACisJY2htb2QgK3ggJEAKKworcmMuYXZhaGlkbnNjb25mZDogYXZhaGktZG5zY29uZmQuaW4KKwlzZWQgLWUgJ3MsQHNiaW5kaXJcQCwkKHNiaW5kaXIpLGcnICQ8ID4gJEAKKwljaG1vZCAreCAkQApkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2luaXRzY3JpcHQvc2xhY2t3YXJlL01ha2VmaWxlLmluIGIvYXZhaGktMC42LjMxL2luaXRzY3JpcHQvc2xhY2t3YXJlL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2MGY0MjMKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvaW5pdHNjcmlwdC9zbGFja3dhcmUvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw1OTkgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEuMyBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKyMKKyMgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyMgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyMgVVNBLgorCitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitzdWJkaXIgPSBpbml0c2NyaXB0L3NsYWNrd2FyZQorRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vYWN4X3B0aHJlYWQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2djY19zdGFja19wcm90ZWN0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9nY2NfdmlzaWJpbGl0eS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vaW50bHRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2ludHJvc3BlY3Rpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2x0b3B0aW9ucy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHR2ZXJzaW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbmxzLm00ICQodG9wX3NyY2RpcikvY29tbW9uL3B5dGhvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9hY2luY2x1ZGUubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vZG94eWdlbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7CithbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAorICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCisgICAgKikgZj0kJHA7OyBcCisgIGVzYWM7CithbV9fc3RyaXBfZGlyID0gZj1gZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7CithbV9faW5zdGFsbF9tYXggPSA0MAorYW1fX25vYmFzZV9zdHJpcF9zZXR1cCA9IFwKKyAgc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYAorYW1fX25vYmFzZV9zdHJpcCA9IFwKKyAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkIC1lICJzfCQkc3JjZGlyc3RyaXAvfHwiCithbV9fbm9iYXNlX2xpc3QgPSAkKGFtX19ub2Jhc2Vfc3RyaXBfc2V0dXApOyBcCisgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCisgIHNlZCAic3wgJCRzcmNkaXJzdHJpcC98IHw7IicgLyAuKlwvLyFzLyAuKi8gLi87IHMsXCggLipcKS9bXi9dKiQkLFwxLCcgfCBcCisgICQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiIgfSB7IGZpbGVzWyQkMl0gPSBmaWxlc1skJDJdICIgIiAkJDE7IFwKKyAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCisgICAgICB7IHByaW50ICQkMiwgZmlsZXNbJCQyXTsgblskJDJdID0gMDsgZmlsZXNbJCQyXSA9ICIiIH0gfSBcCisgICAgRU5EIHsgZm9yIChkaXIgaW4gZmlsZXMpIHByaW50IGRpciwgZmlsZXNbZGlyXSB9JworYW1fX2Jhc2VfbGlzdCA9IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJyB8IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJworYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpciA9IHsgXAorICB0ZXN0IC16ICIkJGZpbGVzIiBcCisgICAgfHwgeyB0ZXN0ICEgLWQgIiQkZGlyIiAmJiB0ZXN0ICEgLWYgIiQkZGlyIiAmJiB0ZXN0ICEgLXIgIiQkZGlyIjsgfSBcCisgICAgfHwgeyBlY2hvICIgKCBjZCAnJCRkaXInICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAorICAgICAgICAgJChhbV9fY2QpICIkJGRpciIgJiYgcm0gLWYgJCRmaWxlczsgfTsgXAorICB9CithbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQoaW5pdGRkaXIpIgorU0NSSVBUUyA9ICQoaW5pdGRfU0NSSVBUUykKK0FNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQorYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAiICRAOworQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQorYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKK2FtX192X2F0XzAgPSBACitTT1VSQ0VTID0KK0RJU1RfU09VUkNFUyA9CitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQUxMX0xJTkdVQVMgPSBAQUxMX0xJTkdVQVNACitBTVRBUiA9IEBBTVRBUkAKK0FNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAorQVIgPSBAQVJACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVZBSElfQVVUT0lQRF9HUk9VUCA9IEBBVkFISV9BVVRPSVBEX0dST1VQQAorQVZBSElfQVVUT0lQRF9VU0VSID0gQEFWQUhJX0FVVE9JUERfVVNFUkAKK0FWQUhJX0dST1VQID0gQEFWQUhJX0dST1VQQAorQVZBSElfUFJJVl9BQ0NFU1NfR1JPVVAgPSBAQVZBSElfUFJJVl9BQ0NFU1NfR1JPVVBACitBVkFISV9VU0VSID0gQEFWQUhJX1VTRVJACitBV0sgPSBAQVdLQAorQ0FUQUxPR1MgPSBAQ0FUQUxPR1NACitDQVRPQkpFWFQgPSBAQ0FUT0JKRVhUQAorQ0MgPSBAQ0NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREFUQURJUk5BTUUgPSBAREFUQURJUk5BTUVACitEQlVTX0NGTEFHUyA9IEBEQlVTX0NGTEFHU0AKK0RCVVNfTElCUyA9IEBEQlVTX0xJQlNACitEQlVTX1NZU1RFTV9CVVNfREVGQVVMVF9BRERSRVNTID0gQERCVVNfU1lTVEVNX0JVU19ERUZBVUxUX0FERFJFU1NACitEQlVTX1NZU19ESVIgPSBAREJVU19TWVNfRElSQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RMTFRPT0wgPSBARExMVE9PTEAKK0RPWFlHRU5fUEFQRVJfU0laRSA9IEBET1hZR0VOX1BBUEVSX1NJWkVACitEU1lNVVRJTCA9IEBEU1lNVVRJTEAKK0RVTVBCSU4gPSBARFVNUEJJTkAKK0RYX0NPTkZJRyA9IEBEWF9DT05GSUdACitEWF9ET0NESVIgPSBARFhfRE9DRElSQAorRFhfRE9UID0gQERYX0RPVEAKK0RYX0RPWFlHRU4gPSBARFhfRE9YWUdFTkAKK0RYX0RWSVBTID0gQERYX0RWSVBTQAorRFhfRUdSRVAgPSBARFhfRUdSRVBACitEWF9FTlYgPSBARFhfRU5WQAorRFhfRkxBR19jaGkgPSBARFhfRkxBR19jaGlACitEWF9GTEFHX2NobSA9IEBEWF9GTEFHX2NobUAKK0RYX0ZMQUdfZG9jID0gQERYX0ZMQUdfZG9jQAorRFhfRkxBR19kb3QgPSBARFhfRkxBR19kb3RACitEWF9GTEFHX2h0bWwgPSBARFhfRkxBR19odG1sQAorRFhfRkxBR19tYW4gPSBARFhfRkxBR19tYW5ACitEWF9GTEFHX3BkZiA9IEBEWF9GTEFHX3BkZkAKK0RYX0ZMQUdfcHMgPSBARFhfRkxBR19wc0AKK0RYX0ZMQUdfcnRmID0gQERYX0ZMQUdfcnRmQAorRFhfRkxBR194bWwgPSBARFhfRkxBR194bWxACitEWF9ISEMgPSBARFhfSEhDQAorRFhfTEFURVggPSBARFhfTEFURVhACitEWF9NQUtFSU5ERVggPSBARFhfTUFLRUlOREVYQAorRFhfUERGTEFURVggPSBARFhfUERGTEFURVhACitEWF9QRVJMID0gQERYX1BFUkxACitEWF9QUk9KRUNUID0gQERYX1BST0pFQ1RACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VYRUVYVCA9IEBFWEVFWFRACitGR1JFUCA9IEBGR1JFUEAKK0dBQ1VUSUwgPSBAR0FDVVRJTEAKK0dFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACitHTElCMjBfQ0ZMQUdTID0gQEdMSUIyMF9DRkxBR1NACitHTElCMjBfTElCUyA9IEBHTElCMjBfTElCU0AKK0dNT0ZJTEVTID0gQEdNT0ZJTEVTQAorR01TR0ZNVCA9IEBHTVNHRk1UQAorR09CSkVDVF9DRkxBR1MgPSBAR09CSkVDVF9DRkxBR1NACitHT0JKRUNUX0xJQlMgPSBAR09CSkVDVF9MSUJTQAorR1JFUCA9IEBHUkVQQAorR1RLMjBfQ0ZMQUdTID0gQEdUSzIwX0NGTEFHU0AKK0dUSzIwX0xJQlMgPSBAR1RLMjBfTElCU0AKK0dUSzMwX0NGTEFHUyA9IEBHVEszMF9DRkxBR1NACitHVEszMF9MSUJTID0gQEdUSzMwX0xJQlNACitIT1dMX0NPTVBBVF9WRVJTSU9OID0gQEhPV0xfQ09NUEFUX1ZFUlNJT05ACitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lOU1RPQkpFWFQgPSBASU5TVE9CSkVYVEAKK0lOVExMSUJTID0gQElOVExMSUJTQAorSU5UTFRPT0xfRVhUUkFDVCA9IEBJTlRMVE9PTF9FWFRSQUNUQAorSU5UTFRPT0xfTUVSR0UgPSBASU5UTFRPT0xfTUVSR0VACitJTlRMVE9PTF9QRVJMID0gQElOVExUT09MX1BFUkxACitJTlRMVE9PTF9VUERBVEUgPSBASU5UTFRPT0xfVVBEQVRFQAorSU5UUk9TUEVDVElPTl9DRkxBR1MgPSBASU5UUk9TUEVDVElPTl9DRkxBR1NACitJTlRST1NQRUNUSU9OX0NPTVBJTEVSID0gQElOVFJPU1BFQ1RJT05fQ09NUElMRVJACitJTlRST1NQRUNUSU9OX0dFTkVSQVRFID0gQElOVFJPU1BFQ1RJT05fR0VORVJBVEVACitJTlRST1NQRUNUSU9OX0dJUkRJUiA9IEBJTlRST1NQRUNUSU9OX0dJUkRJUkAKK0lOVFJPU1BFQ1RJT05fTElCUyA9IEBJTlRST1NQRUNUSU9OX0xJQlNACitJTlRST1NQRUNUSU9OX01BS0VGSUxFID0gQElOVFJPU1BFQ1RJT05fTUFLRUZJTEVACitJTlRST1NQRUNUSU9OX1NDQU5ORVIgPSBASU5UUk9TUEVDVElPTl9TQ0FOTkVSQAorSU5UUk9TUEVDVElPTl9UWVBFTElCRElSID0gQElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUkAKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCQVZBSElfQ0xJRU5UX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DTElFTlRfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfQ09NTU9OX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DT01NT05fVkVSU0lPTl9JTkZPQAorTElCQVZBSElfQ09NUEFUX0hPV0xfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NPTVBBVF9IT1dMX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPTVBBVF9MSUJETlNfU0RfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NPTVBBVF9MSUJETlNfU0RfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfQ09SRV9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ09SRV9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9HTElCX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9HTElCX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0dPQkpFQ1RfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0dPQkpFQ1RfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfUVQzX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9RVDNfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfUVQ0X1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9RVDRfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfVUlfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX1VJX1ZFUlNJT05fSU5GT0AKK0xJQkRBRU1PTl9DRkxBR1MgPSBATElCREFFTU9OX0NGTEFHU0AKK0xJQkRBRU1PTl9MSUJTID0gQExJQkRBRU1PTl9MSUJTQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAorTUNTID0gQE1DU0AKK01EQVNTRU1CTEVSID0gQE1EQVNTRU1CTEVSQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTUtJTlNUQUxMRElSUyA9IEBNS0lOU1RBTExESVJTQAorTU9DX1FUMyA9IEBNT0NfUVQzQAorTU9DX1FUNCA9IEBNT0NfUVQ0QAorTU9OT0RPQ0VSID0gQE1PTk9ET0NFUkAKK01PTk9ET0NfQ0ZMQUdTID0gQE1PTk9ET0NfQ0ZMQUdTQAorTU9OT0RPQ19ESVIgPSBATU9OT0RPQ19ESVJACitNT05PRE9DX0xJQlMgPSBATU9OT0RPQ19MSUJTQAorTVNHRk1UID0gQE1TR0ZNVEAKK01TR0ZNVF9PUFRTID0gQE1TR0ZNVF9PUFRTQAorTVNHTUVSR0UgPSBATVNHTUVSR0VACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitPQkpEVU1QID0gQE9CSkRVTVBACitPQkpFWFQgPSBAT0JKRVhUQAorT1RPT0wgPSBAT1RPT0xACitPVE9PTDY0ID0gQE9UT09MNjRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK1BLR19DT05GSUdfTElCRElSID0gQFBLR19DT05GSUdfTElCRElSQAorUEtHX0NPTkZJR19QQVRIID0gQFBLR19DT05GSUdfUEFUSEAKK1BPRklMRVMgPSBAUE9GSUxFU0AKK1BPU1VCID0gQFBPU1VCQAorUE9fSU5fREFUQURJUl9GQUxTRSA9IEBQT19JTl9EQVRBRElSX0ZBTFNFQAorUE9fSU5fREFUQURJUl9UUlVFID0gQFBPX0lOX0RBVEFESVJfVFJVRUAKK1BUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKK1BUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAorUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKK1BZVEhPTiA9IEBQWVRIT05ACitQWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAorUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKK1BZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKK1BZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAorUVQzX0NGTEFHUyA9IEBRVDNfQ0ZMQUdTQAorUVQzX0xJQlMgPSBAUVQzX0xJQlNACitRVDRfQ0ZMQUdTID0gQFFUNF9DRkxBR1NACitRVDRfTElCUyA9IEBRVDRfTElCU0AKK1JBTkxJQiA9IEBSQU5MSUJACitTRUQgPSBAU0VEQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NUT1cgPSBAU1RPV0AKK1NUUklQID0gQFNUUklQQAorVVNFX05MUyA9IEBVU0VfTkxTQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorVklTSUJJTElUWV9ISURERU5fQ0ZMQUdTID0gQFZJU0lCSUxJVFlfSElEREVOX0NGTEFHU0AKK1hHRVRURVhUID0gQFhHRVRURVhUQAorWE1MX0NGTEFHUyA9IEBYTUxfQ0ZMQUdTQAorWE1MX0xJQlMgPSBAWE1MX0xJQlNACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9BUiA9IEBhY19jdF9BUkAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKK2FjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK2FjeF9wdGhyZWFkX2NvbmZpZyA9IEBhY3hfcHRocmVhZF9jb25maWdACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2F2YWhpX3J1bnRpbWVfZGlyID0gQGF2YWhpX3J1bnRpbWVfZGlyQAorYXZhaGlfc29ja2V0ID0gQGF2YWhpX3NvY2tldEAKK2F2YWhpbG9jYWxlZGlyID0gQGF2YWhpbG9jYWxlZGlyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitoYXZlX3BrZ19jb25maWcgPSBAaGF2ZV9wa2dfY29uZmlnQAoraGF2ZV94bWx0b21hbiA9IEBoYXZlX3htbHRvbWFuQAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2ludGVyZmFjZXNkaXIgPSBAaW50ZXJmYWNlc2RpckAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAorcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3B5ZXhlY2RpciA9IEBweWV4ZWNkaXJACitweXRob25kaXIgPSBAcHl0aG9uZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzcmNkaXIgPSBAc3JjZGlyQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAorc3lzdGVtZHN5c3RlbXVuaXRkaXIgPSBAc3lzdGVtZHN5c3RlbXVuaXRkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK2luaXRkZGlyID0gJChzeXNjb25mZGlyKS9yYy5kCitFWFRSQV9ESVNUID0gYXZhaGktZGFlbW9uLmluIGF2YWhpLWRuc2NvbmZkLmluCitpbml0ZF9TQ1JJUFRTID0gcmMuYXZhaGlkYWVtb24gcmMuYXZhaGlkbnNjb25mZAorQ0xFQU5GSUxFUyA9IHJjLmF2YWhpZGFlbW9uIHJjLmF2YWhpZG5zY29uZmQKK2FsbDogYWxsLWFtCisKKy5TVUZGSVhFUzoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCisJICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduIGluaXRzY3JpcHQvc2xhY2t3YXJlL01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiBpbml0c2NyaXB0L3NsYWNrd2FyZS9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CitpbnN0YWxsLWluaXRkU0NSSVBUUzogJChpbml0ZF9TQ1JJUFRTKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQoaW5pdGRkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChpbml0ZGRpcikiCisJQGxpc3Q9JyQoaW5pdGRfU0NSSVBUUyknOyB0ZXN0IC1uICIkKGluaXRkZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICBpZiB0ZXN0IC1mICIkJGQkJHAiOyB0aGVuIGVjaG8gIiQkZCQkcCI7IGVjaG8gIiQkcCI7IGVsc2UgOjsgZmk7IFwKKwlkb25lIHwgXAorCXNlZCAtZSAncDtzLC4qLywsO24nIFwKKwkgICAgLWUgJ2g7c3wuKnwufCcgXAorCSAgICAtZSAncDt4O3MsLiovLCw7JCh0cmFuc2Zvcm0pJyB8IHNlZCAnTjtOO047cyxcbiwgLGcnIHwgXAorCSQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiI7IGRpcnNbIi4iXSA9IDE7IH0gXAorCSAgeyBkPSQkMzsgaWYgKGRpcnNbZF0gIT0gMSkgeyBwcmludCAiZCIsIGQ7IGRpcnNbZF0gPSAxIH0gXAorCSAgICBpZiAoJCQyID09ICQkNCkgeyBmaWxlc1tkXSA9IGZpbGVzW2RdICIgIiAkJDE7IFwKKwkgICAgICBpZiAoKytuW2RdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgeyBcCisJCXByaW50ICJmIiwgZCwgZmlsZXNbZF07IG5bZF0gPSAwOyBmaWxlc1tkXSA9ICIiIH0gfSBcCisJICAgIGVsc2UgeyBwcmludCAiZiIsIGQgIi8iICQkNCwgJCQxIH0gfSBcCisJICBFTkQgeyBmb3IgKGQgaW4gZmlsZXMpIHByaW50ICJmIiwgZCwgZmlsZXNbZF0gfScgfCBcCisJd2hpbGUgcmVhZCB0eXBlIGRpciBmaWxlczsgZG8gXAorCSAgICAgaWYgdGVzdCAiJCRkaXIiID0gLjsgdGhlbiBkaXI9OyBlbHNlIGRpcj0vJCRkaXI7IGZpOyBcCisJICAgICB0ZXN0IC16ICIkJGZpbGVzIiB8fCB7IFwKKwkgICAgICAgZWNobyAiICQoSU5TVEFMTF9TQ1JJUFQpICQkZmlsZXMgJyQoREVTVERJUikkKGluaXRkZGlyKSQkZGlyJyI7IFwKKwkgICAgICAgJChJTlNUQUxMX1NDUklQVCkgJCRmaWxlcyAiJChERVNURElSKSQoaW5pdGRkaXIpJCRkaXIiIHx8IGV4aXQgJCQ/OyBcCisJICAgICB9IFwKKwk7IGRvbmUKKwordW5pbnN0YWxsLWluaXRkU0NSSVBUUzoKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKGluaXRkX1NDUklQVFMpJzsgdGVzdCAtbiAiJChpbml0ZGRpcikiIHx8IGV4aXQgMDsgXAorCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBcCisJICAgICAgIHNlZCAtZSAncywuKi8sLDskKHRyYW5zZm9ybSknYDsgXAorCWRpcj0nJChERVNURElSKSQoaW5pdGRkaXIpJzsgJChhbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyKQorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicwordGFnczogVEFHUworVEFHUzoKKworY3RhZ3M6IENUQUdTCitDVEFHUzoKKworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1hbQorYWxsLWFtOiBNYWtlZmlsZSAkKFNDUklQVFMpCitpbnN0YWxsZGlyczoKKwlmb3IgZGlyIGluICIkKERFU1RESVIpJChpbml0ZGRpcikiOyBkbyBcCisJICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCisJZG9uZQoraW5zdGFsbDogaW5zdGFsbC1hbQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCit1bmluc3RhbGw6IHVuaW5zdGFsbC1hbQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQoraW5zdGFsbC1zdHJpcDoKKwlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICAgICAgaW5zdGFsbDsgXAorCWVsc2UgXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCisJZmkKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ0xFQU5GSUxFUykiIHx8IHJtIC1mICQoQ0xFQU5GSUxFUykKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWdlbmVyaWMKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLWluaXRkU0NSSVBUUworCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1kdmktYW06CisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLWFtCisKK3BkZi1hbToKKworcHM6IHBzLWFtCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06IHVuaW5zdGFsbC1pbml0ZFNDUklQVFMKKworLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAorCisuUEhPTlk6IGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIFwKKwlkaXN0Y2xlYW4gZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGRpciBkdmkgXAorCWR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBcCisJaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBcCisJaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIFwKKwlpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtaW5pdGRTQ1JJUFRTIGluc3RhbGwtbWFuIFwKKwlpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAorCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCisJbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAorCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKKwl1bmluc3RhbGwgdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1pbml0ZFNDUklQVFMKKworCityYy5hdmFoaWRhZW1vbjogYXZhaGktZGFlbW9uLmluCisJc2VkIC1lICdzLEBzYmluZGlyXEAsJChzYmluZGlyKSxnJyAkPCA+ICRACisJY2htb2QgK3ggJEAKKworcmMuYXZhaGlkbnNjb25mZDogYXZhaGktZG5zY29uZmQuaW4KKwlzZWQgLWUgJ3MsQHNiaW5kaXJcQCwkKHNiaW5kaXIpLGcnICQ8ID4gJEAKKwljaG1vZCAreCAkQAorCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvaW5pdHNjcmlwdC9zbGFja3dhcmUvYXZhaGktZGFlbW9uLmluIGIvYXZhaGktMC42LjMxL2luaXRzY3JpcHQvc2xhY2t3YXJlL2F2YWhpLWRhZW1vbi5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmJmMmYyCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL2luaXRzY3JpcHQvc2xhY2t3YXJlL2F2YWhpLWRhZW1vbi5pbgpAQCAtMCwwICsxLDc4IEBACisjIS9iaW4vYmFzaAorCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorIworIyBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworIyBVU0EuCisKKyMgU3RhcnQvc3RvcC9yZXN0YXJ0IHRoZSBhdmFoaSBkYWVtb246CisKK1BBVEg9L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4KK0RFU0M9IkF2YWhpIG1ETlMvRE5TLVNEIERhZW1vbiIKK05BTUU9ImF2YWhpLWRhZW1vbiIKK0RBRU1PTj0iQHNiaW5kaXJALyROQU1FIgorCithdmFoaWRfc3RhcnQoKQoreworICBlY2hvICJTdGFydGluZyAkREVTQzogICREQUVNT04gLUQiCisgICREQUVNT04gLUQKK30KKworYXZhaGlkX3N0YXR1cygpCit7CisgICREQUVNT04gLWMKKyAgWyAkPyA9IDAgXQorfQorCithdmFoaWRfc3RvcCgpCit7CisgIGVjaG8gLWVuICJTdG9wcGluZyAkREVTQzogIgorICAkREFFTU9OIC1jCisgIFsgJD8gIT0gMCBdCisgIGVjaG8gInN0b3BwZWQiOworICAkREFFTU9OIC1rIDI+L2Rldi9udWxsCit9CisKK2F2YWhpZF9yZXN0YXJ0KCkKK3sKKyAgYXZhaGlkX3N0b3AKKyAgYXZhaGlkX3N0YXJ0Cit9CisKK2Nhc2UgIiQxIiBpbgorJ3N0YXJ0JykKKyAgaWYgKCAhIGF2YWhpZF9zdGF0dXMgKTsgdGhlbgorICAgIGF2YWhpZF9zdGFydAorICBlbHNlCisgICAgZWNobyAiJERFU0MgaXMgYWxyZWFkeSBydW5uaW5nICh3aWxsIG5vdCBzdGFydCBpdCB0d2ljZSkuIgorICBmaQorICA7OworJ3N0b3AnKQorICBhdmFoaWRfc3RvcAorICA7OworJ3Jlc3RhcnQnKQorICBhdmFoaWRfcmVzdGFydAorICA7OworJ3N0YXR1cycpCisgIGlmICggYXZhaGlkX3N0YXR1cyApOyB0aGVuCisgICAgZWNobyAiJERFU0MgaXMgY3VycmVudGx5IHJ1bm5pbmciCisgIGVsc2UKKyAgICBlY2hvICIkREVTQyBpcyBub3QgcnVubmluZy4iCisgIGZpCisgIDs7CisqKQorICBlY2hvICJ1c2FnZSAkMCBzdGFydHxzdG9wfHN0YXR1c3xyZXN0YXJ0IgorZXNhYworCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvaW5pdHNjcmlwdC9zbGFja3dhcmUvYXZhaGktZG5zY29uZmQuaW4gYi9hdmFoaS0wLjYuMzEvaW5pdHNjcmlwdC9zbGFja3dhcmUvYXZhaGktZG5zY29uZmQuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWExNTU0ZAotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9pbml0c2NyaXB0L3NsYWNrd2FyZS9hdmFoaS1kbnNjb25mZC5pbgpAQCAtMCwwICsxLDc4IEBACisjIS9iaW4vYmFzaAorCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorIworIyBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworIyBVU0EuCisKKyMgU3RhcnQvc3RvcC9yZXN0YXJ0IHRoZSBhdmFoaSBkbnNjb25mZCBkYWVtb246CisKK1BBVEg9L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4KK0RFU0M9IkF2YWhpIG1ETlMvRE5TLVNEIEROUyBTZXJ2ZXIgQ29uZmlndXJhdGlvbiBEYWVtb24iCitOQU1FPSJhdmFoaS1kbnNjb25mZCIKK0RBRU1PTj0iQHNiaW5kaXJALyROQU1FIgorCithdmFoaWRuc19zdGFydCgpCit7CisgIGVjaG8gIlN0YXJ0aW5nICRERVNDOiAgJERBRU1PTiAtRCIKKyAgJERBRU1PTiAtRAorfQorCithdmFoaWRuc19zdGF0dXMoKQoreworICAkREFFTU9OIC1jCisgIFsgJD8gPSAwIF0KK30KKworYXZhaGlkbnNfc3RvcCgpCit7CisgIGVjaG8gLWVuICJTdG9wcGluZyAkREVTQzogIgorICAkREFFTU9OIC1jCisgIFsgJD8gIT0gMCBdCisgIGVjaG8gInN0b3BwZWQiOworICAkREFFTU9OIC1rIDI+L2Rldi9udWxsCit9CisKK2F2YWhpZG5zX3Jlc3RhcnQoKQoreworICBhdmFoaWRuc19zdG9wCisgIGF2YWhpZG5zX3N0YXJ0Cit9CisKK2Nhc2UgIiQxIiBpbgorJ3N0YXJ0JykKKyAgaWYgKCAhIGF2YWhpZG5zX3N0YXR1cyApOyB0aGVuCisgICAgYXZhaGlkbnNfc3RhcnQKKyAgZWxzZQorICAgIGVjaG8gIiRERVNDIGlzIGFscmVhZHkgcnVubmluZyAod2lsbCBub3Qgc3RhcnQgaXQgdHdpY2UpLiIKKyAgZmkKKyAgOzsKKydzdG9wJykKKyAgYXZhaGlkbnNfc3RvcAorICA7OworJ3Jlc3RhcnQnKQorICBhdmFoaWRuc19yZXN0YXJ0CisgIDs7Cisnc3RhdHVzJykKKyAgaWYgKCBhdmFoaWRuc19zdGF0dXMgKTsgdGhlbgorICAgIGVjaG8gIiRERVNDIGlzIGN1cnJlbnRseSBydW5uaW5nIgorICBlbHNlCisgICAgZWNobyAiJERFU0MgaXMgbm90IHJ1bm5pbmcuIgorICBmaQorICA7OworKikKKyAgZWNobyAidXNhZ2UgJDAgc3RhcnR8c3RvcHxzdGF0dXN8cmVzdGFydCIKK2VzYWMKKwpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL2luaXRzY3JpcHQvc3VzZS9NYWtlZmlsZS5hbSBiL2F2YWhpLTAuNi4zMS9pbml0c2NyaXB0L3N1c2UvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYyNGJkYwotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9pbml0c2NyaXB0L3N1c2UvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSwzMiBAQAorIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKyMKKyMgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyMgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyMgVVNBLgorCitpbml0ZGRpciA9ICQoc3lzY29uZmRpcikvaW5pdC5kCisKK0VYVFJBX0RJU1QgPSBhdmFoaS1kYWVtb24uaW4gYXZhaGktZG5zY29uZmQuaW4KKworaW5pdGRfU0NSSVBUUyA9IGF2YWhpLWRhZW1vbiBhdmFoaS1kbnNjb25mZAorCitDTEVBTkZJTEVTID0gYXZhaGktZGFlbW9uIGF2YWhpLWRuc2NvbmZkCisKK2F2YWhpLWRhZW1vbjogYXZhaGktZGFlbW9uLmluCisJc2VkIC1lICdzLEBzYmluZGlyXEAsJChzYmluZGlyKSxnJyAkPCA+ICRACisJY2htb2QgK3ggJEAKKworYXZhaGktZG5zY29uZmQ6IGF2YWhpLWRuc2NvbmZkLmluCisJc2VkIC1lICdzLEBzYmluZGlyXEAsJChzYmluZGlyKSxnJyAkPCA+ICRACisJY2htb2QgK3ggJEAKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9pbml0c2NyaXB0L3N1c2UvTWFrZWZpbGUuaW4gYi9hdmFoaS0wLjYuMzEvaW5pdHNjcmlwdC9zdXNlL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhYmNiMDAKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvaW5pdHNjcmlwdC9zdXNlL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNTk5IEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjExLjMgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACisKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisjCisjIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisjIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisjIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisjIFVTQS4KKworVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorc3ViZGlyID0gaW5pdHNjcmlwdC9zdXNlCitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9hY3hfcHRocmVhZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vZ2NjX3N0YWNrX3Byb3RlY3QubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2djY192aXNpYmlsaXR5Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9pbnRsdG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vaW50cm9zcGVjdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbGlidG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHRvcHRpb25zLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9sdHN1Z2FyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9sdHZlcnNpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2x0fm9ic29sZXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9ubHMubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vcHl0aG9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2FjaW5jbHVkZS5tNCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9kb3h5Z2VuLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CithbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKK2FtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCisgICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKKyAgICAqKSBmPSQkcDs7IFwKKyAgZXNhYzsKK2FtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKK2FtX19pbnN0YWxsX21heCA9IDQwCithbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAorICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCithbV9fbm9iYXNlX3N0cmlwID0gXAorICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKK2FtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKKyAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKKyAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMvIC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKKyAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAorICAgIGlmICgrK25bJCQyXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIFwKKyAgICAgIHsgcHJpbnQgJCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKKyAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCithbV9fYmFzZV9saXN0ID0gXAorICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnIHwgXAorICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCithbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyID0geyBcCisgIHRlc3QgLXogIiQkZmlsZXMiIFwKKyAgICB8fCB7IHRlc3QgISAtZCAiJCRkaXIiICYmIHRlc3QgISAtZiAiJCRkaXIiICYmIHRlc3QgISAtciAiJCRkaXIiOyB9IFwKKyAgICB8fCB7IGVjaG8gIiAoIGNkICckJGRpcicgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCisgICAgICAgICAkKGFtX19jZCkgIiQkZGlyIiAmJiBybSAtZiAkJGZpbGVzOyB9OyBcCisgIH0KK2FtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChpbml0ZGRpcikiCitTQ1JJUFRTID0gJChpbml0ZF9TQ1JJUFRTKQorQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCithbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCithbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICIgJEA7CitBTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCithbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfYXRfMCA9IEAKK1NPVVJDRVMgPQorRElTVF9TT1VSQ0VTID0KK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitBQ0xPQ0FMID0gQEFDTE9DQUxACitBTExfTElOR1VBUyA9IEBBTExfTElOR1VBU0AKK0FNVEFSID0gQEFNVEFSQAorQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACitBUiA9IEBBUkAKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBVkFISV9BVVRPSVBEX0dST1VQID0gQEFWQUhJX0FVVE9JUERfR1JPVVBACitBVkFISV9BVVRPSVBEX1VTRVIgPSBAQVZBSElfQVVUT0lQRF9VU0VSQAorQVZBSElfR1JPVVAgPSBAQVZBSElfR1JPVVBACitBVkFISV9QUklWX0FDQ0VTU19HUk9VUCA9IEBBVkFISV9QUklWX0FDQ0VTU19HUk9VUEAKK0FWQUhJX1VTRVIgPSBAQVZBSElfVVNFUkAKK0FXSyA9IEBBV0tACitDQVRBTE9HUyA9IEBDQVRBTE9HU0AKK0NBVE9CSkVYVCA9IEBDQVRPQkpFWFRACitDQyA9IEBDQ0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1hYID0gQENYWEAKK0NYWENQUCA9IEBDWFhDUFBACitDWFhERVBNT0RFID0gQENYWERFUE1PREVACitDWFhGTEFHUyA9IEBDWFhGTEFHU0AKK0NZR1BBVEhfVyA9IEBDWUdQQVRIX1dACitEQVRBRElSTkFNRSA9IEBEQVRBRElSTkFNRUAKK0RCVVNfQ0ZMQUdTID0gQERCVVNfQ0ZMQUdTQAorREJVU19MSUJTID0gQERCVVNfTElCU0AKK0RCVVNfU1lTVEVNX0JVU19ERUZBVUxUX0FERFJFU1MgPSBAREJVU19TWVNURU1fQlVTX0RFRkFVTFRfQUREUkVTU0AKK0RCVVNfU1lTX0RJUiA9IEBEQlVTX1NZU19ESVJACitERUZTID0gQERFRlNACitERVBESVIgPSBAREVQRElSQAorRExMVE9PTCA9IEBETExUT09MQAorRE9YWUdFTl9QQVBFUl9TSVpFID0gQERPWFlHRU5fUEFQRVJfU0laRUAKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRFhfQ09ORklHID0gQERYX0NPTkZJR0AKK0RYX0RPQ0RJUiA9IEBEWF9ET0NESVJACitEWF9ET1QgPSBARFhfRE9UQAorRFhfRE9YWUdFTiA9IEBEWF9ET1hZR0VOQAorRFhfRFZJUFMgPSBARFhfRFZJUFNACitEWF9FR1JFUCA9IEBEWF9FR1JFUEAKK0RYX0VOViA9IEBEWF9FTlZACitEWF9GTEFHX2NoaSA9IEBEWF9GTEFHX2NoaUAKK0RYX0ZMQUdfY2htID0gQERYX0ZMQUdfY2htQAorRFhfRkxBR19kb2MgPSBARFhfRkxBR19kb2NACitEWF9GTEFHX2RvdCA9IEBEWF9GTEFHX2RvdEAKK0RYX0ZMQUdfaHRtbCA9IEBEWF9GTEFHX2h0bWxACitEWF9GTEFHX21hbiA9IEBEWF9GTEFHX21hbkAKK0RYX0ZMQUdfcGRmID0gQERYX0ZMQUdfcGRmQAorRFhfRkxBR19wcyA9IEBEWF9GTEFHX3BzQAorRFhfRkxBR19ydGYgPSBARFhfRkxBR19ydGZACitEWF9GTEFHX3htbCA9IEBEWF9GTEFHX3htbEAKK0RYX0hIQyA9IEBEWF9ISENACitEWF9MQVRFWCA9IEBEWF9MQVRFWEAKK0RYX01BS0VJTkRFWCA9IEBEWF9NQUtFSU5ERVhACitEWF9QREZMQVRFWCA9IEBEWF9QREZMQVRFWEAKK0RYX1BFUkwgPSBARFhfUEVSTEAKK0RYX1BST0pFQ1QgPSBARFhfUFJPSkVDVEAKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRVhFRVhUID0gQEVYRUVYVEAKK0ZHUkVQID0gQEZHUkVQQAorR0FDVVRJTCA9IEBHQUNVVElMQAorR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKK0dMSUIyMF9DRkxBR1MgPSBAR0xJQjIwX0NGTEFHU0AKK0dMSUIyMF9MSUJTID0gQEdMSUIyMF9MSUJTQAorR01PRklMRVMgPSBAR01PRklMRVNACitHTVNHRk1UID0gQEdNU0dGTVRACitHT0JKRUNUX0NGTEFHUyA9IEBHT0JKRUNUX0NGTEFHU0AKK0dPQkpFQ1RfTElCUyA9IEBHT0JKRUNUX0xJQlNACitHUkVQID0gQEdSRVBACitHVEsyMF9DRkxBR1MgPSBAR1RLMjBfQ0ZMQUdTQAorR1RLMjBfTElCUyA9IEBHVEsyMF9MSUJTQAorR1RLMzBfQ0ZMQUdTID0gQEdUSzMwX0NGTEFHU0AKK0dUSzMwX0xJQlMgPSBAR1RLMzBfTElCU0AKK0hPV0xfQ09NUEFUX1ZFUlNJT04gPSBASE9XTF9DT01QQVRfVkVSU0lPTkAKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSU5TVE9CSkVYVCA9IEBJTlNUT0JKRVhUQAorSU5UTExJQlMgPSBASU5UTExJQlNACitJTlRMVE9PTF9FWFRSQUNUID0gQElOVExUT09MX0VYVFJBQ1RACitJTlRMVE9PTF9NRVJHRSA9IEBJTlRMVE9PTF9NRVJHRUAKK0lOVExUT09MX1BFUkwgPSBASU5UTFRPT0xfUEVSTEAKK0lOVExUT09MX1VQREFURSA9IEBJTlRMVE9PTF9VUERBVEVACitJTlRST1NQRUNUSU9OX0NGTEFHUyA9IEBJTlRST1NQRUNUSU9OX0NGTEFHU0AKK0lOVFJPU1BFQ1RJT05fQ09NUElMRVIgPSBASU5UUk9TUEVDVElPTl9DT01QSUxFUkAKK0lOVFJPU1BFQ1RJT05fR0VORVJBVEUgPSBASU5UUk9TUEVDVElPTl9HRU5FUkFURUAKK0lOVFJPU1BFQ1RJT05fR0lSRElSID0gQElOVFJPU1BFQ1RJT05fR0lSRElSQAorSU5UUk9TUEVDVElPTl9MSUJTID0gQElOVFJPU1BFQ1RJT05fTElCU0AKK0lOVFJPU1BFQ1RJT05fTUFLRUZJTEUgPSBASU5UUk9TUEVDVElPTl9NQUtFRklMRUAKK0lOVFJPU1BFQ1RJT05fU0NBTk5FUiA9IEBJTlRST1NQRUNUSU9OX1NDQU5ORVJACitJTlRST1NQRUNUSU9OX1RZUEVMSUJESVIgPSBASU5UUk9TUEVDVElPTl9UWVBFTElCRElSQAorTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMSUJBVkFISV9DTElFTlRfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NMSUVOVF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9DT01NT05fVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NPTU1PTl9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9DT01QQVRfSE9XTF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ09NUEFUX0hPV0xfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfQ09NUEFUX0xJQkROU19TRF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ09NUEFUX0xJQkROU19TRF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9DT1JFX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DT1JFX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0dMSUJfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0dMSUJfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfR09CSkVDVF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfR09CSkVDVF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9RVDNfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX1FUM19WRVJTSU9OX0lORk9ACitMSUJBVkFISV9RVDRfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX1FUNF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9VSV9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfVUlfVkVSU0lPTl9JTkZPQAorTElCREFFTU9OX0NGTEFHUyA9IEBMSUJEQUVNT05fQ0ZMQUdTQAorTElCREFFTU9OX0xJQlMgPSBATElCREFFTU9OX0xJQlNACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQExJQlNACitMSUJUT09MID0gQExJQlRPT0xACitMSVBPID0gQExJUE9ACitMTl9TID0gQExOX1NACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACitNQ1MgPSBATUNTQAorTURBU1NFTUJMRVIgPSBATURBU1NFTUJMRVJACitNS0RJUl9QID0gQE1LRElSX1BACitNS0lOU1RBTExESVJTID0gQE1LSU5TVEFMTERJUlNACitNT0NfUVQzID0gQE1PQ19RVDNACitNT0NfUVQ0ID0gQE1PQ19RVDRACitNT05PRE9DRVIgPSBATU9OT0RPQ0VSQAorTU9OT0RPQ19DRkxBR1MgPSBATU9OT0RPQ19DRkxBR1NACitNT05PRE9DX0RJUiA9IEBNT05PRE9DX0RJUkAKK01PTk9ET0NfTElCUyA9IEBNT05PRE9DX0xJQlNACitNU0dGTVQgPSBATVNHRk1UQAorTVNHRk1UX09QVFMgPSBATVNHRk1UX09QVFNACitNU0dNRVJHRSA9IEBNU0dNRVJHRUAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPVE9PTCA9IEBPVE9PTEAKK09UT09MNjQgPSBAT1RPT0w2NEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAorUEtHX0NPTkZJR19MSUJESVIgPSBAUEtHX0NPTkZJR19MSUJESVJACitQS0dfQ09ORklHX1BBVEggPSBAUEtHX0NPTkZJR19QQVRIQAorUE9GSUxFUyA9IEBQT0ZJTEVTQAorUE9TVUIgPSBAUE9TVUJACitQT19JTl9EQVRBRElSX0ZBTFNFID0gQFBPX0lOX0RBVEFESVJfRkFMU0VACitQT19JTl9EQVRBRElSX1RSVUUgPSBAUE9fSU5fREFUQURJUl9UUlVFQAorUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAorUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACitQVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAorUFlUSE9OID0gQFBZVEhPTkAKK1BZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACitQWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAorUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAorUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACitRVDNfQ0ZMQUdTID0gQFFUM19DRkxBR1NACitRVDNfTElCUyA9IEBRVDNfTElCU0AKK1FUNF9DRkxBR1MgPSBAUVQ0X0NGTEFHU0AKK1FUNF9MSUJTID0gQFFUNF9MSUJTQAorUkFOTElCID0gQFJBTkxJQkAKK1NFRCA9IEBTRURACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU1RPVyA9IEBTVE9XQAorU1RSSVAgPSBAU1RSSVBACitVU0VfTkxTID0gQFVTRV9OTFNACitWRVJTSU9OID0gQFZFUlNJT05ACitWSVNJQklMSVRZX0hJRERFTl9DRkxBR1MgPSBAVklTSUJJTElUWV9ISURERU5fQ0ZMQUdTQAorWEdFVFRFWFQgPSBAWEdFVFRFWFRACitYTUxfQ0ZMQUdTID0gQFhNTF9DRkxBR1NACitYTUxfTElCUyA9IEBYTUxfTElCU0AKK2Fic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACithYnNfc3JjZGlyID0gQGFic19zcmNkaXJACithYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACithYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKK2FjX2N0X0FSID0gQGFjX2N0X0FSQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9DWFggPSBAYWNfY3RfQ1hYQAorYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAorYWN4X3B0aHJlYWRfY29uZmlnID0gQGFjeF9wdGhyZWFkX2NvbmZpZ0AKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYXZhaGlfcnVudGltZV9kaXIgPSBAYXZhaGlfcnVudGltZV9kaXJACithdmFoaV9zb2NrZXQgPSBAYXZhaGlfc29ja2V0QAorYXZhaGlsb2NhbGVkaXIgPSBAYXZhaGlsb2NhbGVkaXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitidWlsZGRpciA9IEBidWlsZGRpckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZG9jZGlyID0gQGRvY2RpckAKK2R2aWRpciA9IEBkdmlkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2hhdmVfcGtnX2NvbmZpZyA9IEBoYXZlX3BrZ19jb25maWdACitoYXZlX3htbHRvbWFuID0gQGhhdmVfeG1sdG9tYW5ACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAoraW50ZXJmYWNlc2RpciA9IEBpbnRlcmZhY2VzZGlyQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3BrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACitwa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3BzZGlyID0gQHBzZGlyQAorcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKK3B5dGhvbmRpciA9IEBweXRob25kaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACitzeXN0ZW1kc3lzdGVtdW5pdGRpciA9IEBzeXN0ZW1kc3lzdGVtdW5pdGRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAoraW5pdGRkaXIgPSAkKHN5c2NvbmZkaXIpL2luaXQuZAorRVhUUkFfRElTVCA9IGF2YWhpLWRhZW1vbi5pbiBhdmFoaS1kbnNjb25mZC5pbgoraW5pdGRfU0NSSVBUUyA9IGF2YWhpLWRhZW1vbiBhdmFoaS1kbnNjb25mZAorQ0xFQU5GSUxFUyA9IGF2YWhpLWRhZW1vbiBhdmFoaS1kbnNjb25mZAorYWxsOiBhbGwtYW0KKworLlNVRkZJWEVTOgorJChzcmNkaXIpL01ha2VmaWxlLmluOiAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gaW5pdHNjcmlwdC9zdXNlL01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiBpbml0c2NyaXB0L3N1c2UvTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6ICAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6ICAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKGFtX19hY2xvY2FsX200X2RlcHMpOgoraW5zdGFsbC1pbml0ZFNDUklQVFM6ICQoaW5pdGRfU0NSSVBUUykKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwl0ZXN0IC16ICIkKGluaXRkZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQoaW5pdGRkaXIpIgorCUBsaXN0PSckKGluaXRkX1NDUklQVFMpJzsgdGVzdCAtbiAiJChpbml0ZGRpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAorCSAgaWYgdGVzdCAtZiAiJCRkJCRwIjsgdGhlbiBlY2hvICIkJGQkJHAiOyBlY2hvICIkJHAiOyBlbHNlIDo7IGZpOyBcCisJZG9uZSB8IFwKKwlzZWQgLWUgJ3A7cywuKi8sLDtuJyBcCisJICAgIC1lICdoO3N8Lip8LnwnIFwKKwkgICAgLWUgJ3A7eDtzLC4qLywsOyQodHJhbnNmb3JtKScgfCBzZWQgJ047TjtOO3MsXG4sICxnJyB8IFwKKwkkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiOyBkaXJzWyIuIl0gPSAxOyB9IFwKKwkgIHsgZD0kJDM7IGlmIChkaXJzW2RdICE9IDEpIHsgcHJpbnQgImQiLCBkOyBkaXJzW2RdID0gMSB9IFwKKwkgICAgaWYgKCQkMiA9PSAkJDQpIHsgZmlsZXNbZF0gPSBmaWxlc1tkXSAiICIgJCQxOyBcCisJICAgICAgaWYgKCsrbltkXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIHsgXAorCQlwcmludCAiZiIsIGQsIGZpbGVzW2RdOyBuW2RdID0gMDsgZmlsZXNbZF0gPSAiIiB9IH0gXAorCSAgICBlbHNlIHsgcHJpbnQgImYiLCBkICIvIiAkJDQsICQkMSB9IH0gXAorCSAgRU5EIHsgZm9yIChkIGluIGZpbGVzKSBwcmludCAiZiIsIGQsIGZpbGVzW2RdIH0nIHwgXAorCXdoaWxlIHJlYWQgdHlwZSBkaXIgZmlsZXM7IGRvIFwKKwkgICAgIGlmIHRlc3QgIiQkZGlyIiA9IC47IHRoZW4gZGlyPTsgZWxzZSBkaXI9LyQkZGlyOyBmaTsgXAorCSAgICAgdGVzdCAteiAiJCRmaWxlcyIgfHwgeyBcCisJICAgICAgIGVjaG8gIiAkKElOU1RBTExfU0NSSVBUKSAkJGZpbGVzICckKERFU1RESVIpJChpbml0ZGRpcikkJGRpciciOyBcCisJICAgICAgICQoSU5TVEFMTF9TQ1JJUFQpICQkZmlsZXMgIiQoREVTVERJUikkKGluaXRkZGlyKSQkZGlyIiB8fCBleGl0ICQkPzsgXAorCSAgICAgfSBcCisJOyBkb25lCisKK3VuaW5zdGFsbC1pbml0ZFNDUklQVFM6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChpbml0ZF9TQ1JJUFRTKSc7IHRlc3QgLW4gIiQoaW5pdGRkaXIpIiB8fCBleGl0IDA7IFwKKwlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgXAorCSAgICAgICBzZWQgLWUgJ3MsLiovLCw7JCh0cmFuc2Zvcm0pJ2A7IFwKKwlkaXI9JyQoREVTVERJUikkKGluaXRkZGlyKSc7ICQoYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpcikKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKK3RhZ3M6IFRBR1MKK1RBR1M6CisKK2N0YWdzOiBDVEFHUworQ1RBR1M6CisKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUgJChTQ1JJUFRTKQoraW5zdGFsbGRpcnM6CisJZm9yIGRpciBpbiAiJChERVNURElSKSQoaW5pdGRkaXIpIjsgZG8gXAorCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAorCWRvbmUKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgICAgIGluc3RhbGw7IFwKKwllbHNlIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAorCWZpCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENMRUFORklMRVMpIiB8fCBybSAtZiAkKENMRUFORklMRVMpCisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKK2NsZWFuOiBjbGVhbi1hbQorCitjbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIG1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1nZW5lcmljCisKK2R2aTogZHZpLWFtCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1hbQorCitodG1sLWFtOgorCitpbmZvOiBpbmZvLWFtCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1pbml0ZFNDUklQVFMKKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCisKK2luc3RhbGwtZHZpLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06CisKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCisKK2luc3RhbGwtaHRtbC1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1pbmZvLWFtOgorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCisKK2luc3RhbGwtcGRmLWFtOgorCitpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCisKK2luc3RhbGwtcHMtYW06CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtaW5pdGRTQ1JJUFRTCisKKy5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKKworLlBIT05ZOiBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBcCisJZGlzdGNsZWFuIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIGRpc3RkaXIgZHZpIFwKKwlkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gXAorCWluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gXAorCWluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBcCisJaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLWluaXRkU0NSSVBUUyBpbnN0YWxsLW1hbiBcCisJaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKKwlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAorCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKKwltb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCisJdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSB1bmluc3RhbGwtaW5pdGRTQ1JJUFRTCisKKworYXZhaGktZGFlbW9uOiBhdmFoaS1kYWVtb24uaW4KKwlzZWQgLWUgJ3MsQHNiaW5kaXJcQCwkKHNiaW5kaXIpLGcnICQ8ID4gJEAKKwljaG1vZCAreCAkQAorCithdmFoaS1kbnNjb25mZDogYXZhaGktZG5zY29uZmQuaW4KKwlzZWQgLWUgJ3MsQHNiaW5kaXJcQCwkKHNiaW5kaXIpLGcnICQ8ID4gJEAKKwljaG1vZCAreCAkQAorCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvaW5pdHNjcmlwdC9zdXNlL2F2YWhpLWRhZW1vbi5pbiBiL2F2YWhpLTAuNi4zMS9pbml0c2NyaXB0L3N1c2UvYXZhaGktZGFlbW9uLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkYzVmOWYKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvaW5pdHNjcmlwdC9zdXNlL2F2YWhpLWRhZW1vbi5pbgpAQCAtMCwwICsxLDYwIEBACisjISAvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBhdmFoaQorIyBSZXF1aXJlZC1TdGFydDogICAgJG5ldHdvcmsgJHJlbW90ZV9mcyBkYnVzCisjIFJlcXVpcmVkLVN0b3A6ICAgICAkbmV0d29yayAkcmVtb3RlX2ZzIGRidXMKKyMgRGVmYXVsdC1TdGFydDogICAgIDMgNQorIyBEZWZhdWx0LVN0b3A6CisjIFNob3J0LURlc2NyaXB0aW9uOiBaZXJvQ29uZiBkYWVtb24KKyMgRGVzY3JpcHRpb246ICAgICAgIEF2YWhpLCBhIFplcm9Db25mIGRhZW1vbiBmb3IgbUROUyBhbmQgc2VydmljZSByZWdpc3RyYXRpb24KKyMjIyBFTkQgSU5JVCBJTkZPCisKK0FWQUhJX0JJTj1Ac2JpbmRpckAvYXZhaGktZGFlbW9uCit0ZXN0IC14ICRBVkFISV9CSU4gfHwgZXhpdCA1CisKKy4gL2V0Yy9yYy5zdGF0dXMKK3JjX3Jlc2V0CisKK2Nhc2UgIiQxIiBpbgorCXN0YXJ0KQorCQllY2hvIC1uICJTdGFydGluZyBBdmFoaSBkYWVtb24gIgorCQkkQVZBSElfQklOIC1ECisJCXJjX3N0YXR1cyAtdgorCQk7OworCXN0b3ApCisJCWVjaG8gLW4gIlNodXR0aW5nIGRvd24gQXZhaGkgZGFlbW9uICIKKwkJJEFWQUhJX0JJTiAtayAyPi9kZXYvbnVsbCB8fCAvYmluL3RydWUKKwkJcmNfc3RhdHVzIC12CisJCTs7CisJdHJ5LXJlc3RhcnR8Y29uZHJlc3RhcnQpCisJCWlmIHRlc3QgIiQxIiA9ICJjb25kcmVzdGFydCI7IHRoZW4KKwkJCWVjaG8gIiR7YXR0bn0gVXNlIHRyeS1yZXN0YXJ0ICR7ZG9uZX0oTFNCKSR7YXR0bn0gcmF0aGVyIHRoYW4gY29uZHJlc3RhcnQgJHt3YXJufShSSCkke25vcm19IgorCQlmaQorCQkkMCBzdGF0dXMKKwkJaWYgdGVzdCAkPyA9IDA7IHRoZW4KKwkJCSQwIHJlc3RhcnQKKwkJZWxzZQorCQkJcmNfcmVzZXQKKwkJZmkKKwkJcmNfc3RhdHVzCisJCTs7CisJcmVzdGFydCkKKwkJJDAgc3RvcAorCQkkMCBzdGFydAorCQlyY19zdGF0dXMKKwkJOzsKKwlmb3JjZS1yZWxvYWR8cmVsb2FkKQorCQllY2hvIC1uICJSZWxvYWRpbmcgQXZhaGkgZGFlbW9uICIKKwkJJEFWQUhJX0JJTiAtcgorCQlyY19zdGF0dXMgLXYKKwkJOzsKKwlzdGF0dXMpCisJCWVjaG8gLW4gIkNoZWNraW5nIGZvciBBdmFoaSBkYWVtb246ICIKKwkJJEFWQUhJX0JJTiAtYyB8fCBfcmNfc3RhdHVzPTMKKwkJcmNfc3RhdHVzIC12CisJCTs7CisJKikKKwkJZWNobyAiVXNhZ2U6ICQwIHtzdGFydHxzdG9wfHN0YXR1c3x0cnktcmVzdGFydHxyZXN0YXJ0fGZvcmNlLXJlbG9hZHxyZWxvYWR9IgorCQlleGl0IDEKKwkJOzsKK2VzYWMKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9pbml0c2NyaXB0L3N1c2UvYXZhaGktZG5zY29uZmQuaW4gYi9hdmFoaS0wLjYuMzEvaW5pdHNjcmlwdC9zdXNlL2F2YWhpLWRuc2NvbmZkLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ODY2MGIKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvaW5pdHNjcmlwdC9zdXNlL2F2YWhpLWRuc2NvbmZkLmluCkBAIC0wLDAgKzEsNjAgQEAKKyMhIC9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIGF2YWhpLWRuc2NvbmZkCisjIFJlcXVpcmVkLVN0YXJ0OiAgICAkcmVtb3RlX2ZzIGF2YWhpCisjIFJlcXVpcmVkLVN0b3A6ICAgICAkcmVtb3RlX2ZzIGF2YWhpCisjIERlZmF1bHQtU3RhcnQ6ICAgICAzIDUKKyMgRGVmYXVsdC1TdG9wOgorIyBTaG9ydC1EZXNjcmlwdGlvbjogWmVyb0NvbmYgZGFlbW9uCisjIERlc2NyaXB0aW9uOiAgICAgICBBdmFoaSwgYSBaZXJvQ29uZiBkYWVtb24gZm9yIG1ETlMgYW5kIHNlcnZpY2UgcmVnaXN0cmF0aW9uCisjIyMgRU5EIElOSVQgSU5GTworCitBVkFISV9CSU49QHNiaW5kaXJAL2F2YWhpLWRuc2NvbmZkCit0ZXN0IC14ICRBVkFISV9CSU4gfHwgZXhpdCA1CisKKy4gL2V0Yy9yYy5zdGF0dXMKK3JjX3Jlc2V0CisKK2Nhc2UgIiQxIiBpbgorCXN0YXJ0KQorCQllY2hvIC1uICJTdGFydGluZyBBdmFoaSBETlMgQ29uZmlndXJhdGlvbiBkYWVtb24gIgorCQkkQVZBSElfQklOIC1ECisJCXJjX3N0YXR1cyAtdgorCQk7OworCXN0b3ApCisJCWVjaG8gLW4gIlNodXR0aW5nIGRvd24gQXZhaGkgRE5TIENvbmZpZ3VyYXRpb24gZGFlbW9uICIKKwkJJEFWQUhJX0JJTiAtayAyPi9kZXYvbnVsbCB8fCAvYmluL3RydWUKKwkJcmNfc3RhdHVzIC12CisJCTs7CisJcmVzdGFydCkKKwkJJDAgc3RvcAorCQkkMCBzdGFydAorCQlyY19zdGF0dXMKKwkJOzsKKwl0cnktcmVzdGFydHxjb25kcmVzdGFydCkKKwkJaWYgdGVzdCAiJDEiID0gImNvbmRyZXN0YXJ0IjsgdGhlbgorCQkJZWNobyAiJHthdHRufSBVc2UgdHJ5LXJlc3RhcnQgJHtkb25lfShMU0IpJHthdHRufSByYXRoZXIgdGhhbiBjb25kcmVzdGFydCAke3dhcm59KFJIKSR7bm9ybX0iCisJCWZpCisJCSQwIHN0YXR1cworCQlpZiB0ZXN0ICQ/ID0gMDsgdGhlbgorCQkJJDAgcmVzdGFydAorCQllbHNlCisJCQlyY19yZXNldAorCQlmaQorCQlyY19zdGF0dXMKKwkJOzsKKwlmb3JjZS1yZWxvYWR8cmVsb2FkKQorCQllY2hvIC1uICJSZWxvYWRpbmcgQXZhaGkgRE5TIENvbmZpZ3VyYXRpb24gZGFlbW9uICIKKwkJJEFWQUhJX0JJTiAtcgorCQlyY19zdGF0dXMgLXYKKwkJOzsKKwlzdGF0dXMpCisJCWVjaG8gLW4gIkNoZWNraW5nIGZvciBBdmFoaSBETlMgQ29uZmlndXJhdGlvbiBkYWVtb246ICIKKwkJJEFWQUhJX0JJTiAtYyB8fCBfcmNfc3RhdHVzPTMKKwkJcmNfc3RhdHVzIC12CisJCTs7CisJKikKKwkJZWNobyAiVXNhZ2U6ICQwIHtzdGFydHxzdG9wfHN0YXR1c3x0cnktcmVzdGFydHxyZXN0YXJ0fGZvcmNlLXJlbG9hZHxyZWxvYWR9IgorCQlleGl0IDEKKwkJOzsKK2VzYWMKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9pbnN0YWxsLXNoIGIvYXZhaGktMC42LjMxL2luc3RhbGwtc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjc4MWI5OAotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9pbnN0YWxsLXNoCkBAIC0wLDAgKzEsNTIwIEBACisjIS9iaW4vc2gKKyMgaW5zdGFsbCAtIGluc3RhbGwgYSBwcm9ncmFtLCBzY3JpcHQsIG9yIGRhdGFmaWxlCisKK3NjcmlwdHZlcnNpb249MjAwOS0wNC0yOC4yMTsgIyBVVEMKKworIyBUaGlzIG9yaWdpbmF0ZXMgZnJvbSBYMTFSNSAobWl0L3V0aWwvc2NyaXB0cy9pbnN0YWxsLnNoKSwgd2hpY2ggd2FzCisjIGxhdGVyIHJlbGVhc2VkIGluIFgxMVI2ICh4Yy9jb25maWcvdXRpbC9pbnN0YWxsLnNoKSB3aXRoIHRoZQorIyBmb2xsb3dpbmcgY29weXJpZ2h0IGFuZCBsaWNlbnNlLgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTQgWCBDb25zb3J0aXVtCisjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyMgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvCisjIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlCisjIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcgorIyBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworIyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyMgWCBDT05TT1JUSVVNIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUMtCisjIFRJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lIG9mIHRoZSBYIENvbnNvcnRpdW0gc2hhbGwgbm90CisjIGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsLQorIyBpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIGF1dGhvcml6YXRpb24gZnJvbSB0aGUgWCBDb25zb3ItCisjIHRpdW0uCisjCisjCisjIEZTRiBjaGFuZ2VzIHRvIHRoaXMgZmlsZSBhcmUgaW4gdGhlIHB1YmxpYyBkb21haW4uCisjCisjIENhbGxpbmcgdGhpcyBzY3JpcHQgaW5zdGFsbC1zaCBpcyBwcmVmZXJyZWQgb3ZlciBpbnN0YWxsLnNoLCB0byBwcmV2ZW50CisjIGBtYWtlJyBpbXBsaWNpdCBydWxlcyBmcm9tIGNyZWF0aW5nIGEgZmlsZSBjYWxsZWQgaW5zdGFsbCBmcm9tIGl0CisjIHdoZW4gdGhlcmUgaXMgbm8gTWFrZWZpbGUuCisjCisjIFRoaXMgc2NyaXB0IGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgQlNEIGluc3RhbGwgc2NyaXB0LCBidXQgd2FzIHdyaXR0ZW4KKyMgZnJvbSBzY3JhdGNoLgorCitubD0nCisnCitJRlM9IiAiIgkkbmwiCisKKyMgc2V0IERPSVRQUk9HIHRvIGVjaG8gdG8gdGVzdCB0aGlzIHNjcmlwdAorCisjIERvbid0IHVzZSA6LSBzaW5jZSA0LjNCU0QgYW5kIGVhcmxpZXIgc2hlbGxzIGRvbid0IGxpa2UgaXQuCitkb2l0PSR7RE9JVFBST0ctfQoraWYgdGVzdCAteiAiJGRvaXQiOyB0aGVuCisgIGRvaXRfZXhlYz1leGVjCitlbHNlCisgIGRvaXRfZXhlYz0kZG9pdAorZmkKKworIyBQdXQgaW4gYWJzb2x1dGUgZmlsZSBuYW1lcyBpZiB5b3UgZG9uJ3QgaGF2ZSB0aGVtIGluIHlvdXIgcGF0aDsKKyMgb3IgdXNlIGVudmlyb25tZW50IHZhcnMuCisKK2NoZ3JwcHJvZz0ke0NIR1JQUFJPRy1jaGdycH0KK2NobW9kcHJvZz0ke0NITU9EUFJPRy1jaG1vZH0KK2Nob3ducHJvZz0ke0NIT1dOUFJPRy1jaG93bn0KK2NtcHByb2c9JHtDTVBQUk9HLWNtcH0KK2NwcHJvZz0ke0NQUFJPRy1jcH0KK21rZGlycHJvZz0ke01LRElSUFJPRy1ta2Rpcn0KK212cHJvZz0ke01WUFJPRy1tdn0KK3JtcHJvZz0ke1JNUFJPRy1ybX0KK3N0cmlwcHJvZz0ke1NUUklQUFJPRy1zdHJpcH0KKworcG9zaXhfZ2xvYj0nPycKK2luaXRpYWxpemVfcG9zaXhfZ2xvYj0nCisgIHRlc3QgIiRwb3NpeF9nbG9iIiAhPSAiPyIgfHwgeworICAgIGlmIChzZXQgLWYpIDI+L2Rldi9udWxsOyB0aGVuCisgICAgICBwb3NpeF9nbG9iPQorICAgIGVsc2UKKyAgICAgIHBvc2l4X2dsb2I9OgorICAgIGZpCisgIH0KKycKKworcG9zaXhfbWtkaXI9CisKKyMgRGVzaXJlZCBtb2RlIG9mIGluc3RhbGxlZCBmaWxlLgorbW9kZT0wNzU1CisKK2NoZ3JwY21kPQorY2htb2RjbWQ9JGNobW9kcHJvZworY2hvd25jbWQ9CittdmNtZD0kbXZwcm9nCitybWNtZD0iJHJtcHJvZyAtZiIKK3N0cmlwY21kPQorCitzcmM9Citkc3Q9CitkaXJfYXJnPQorZHN0X2FyZz0KKworY29weV9vbl9jaGFuZ2U9ZmFsc2UKK25vX3RhcmdldF9kaXJlY3Rvcnk9CisKK3VzYWdlPSJcCitVc2FnZTogJDAgW09QVElPTl0uLi4gWy1UXSBTUkNGSUxFIERTVEZJTEUKKyAgIG9yOiAkMCBbT1BUSU9OXS4uLiBTUkNGSUxFUy4uLiBESVJFQ1RPUlkKKyAgIG9yOiAkMCBbT1BUSU9OXS4uLiAtdCBESVJFQ1RPUlkgU1JDRklMRVMuLi4KKyAgIG9yOiAkMCBbT1BUSU9OXS4uLiAtZCBESVJFQ1RPUklFUy4uLgorCitJbiB0aGUgMXN0IGZvcm0sIGNvcHkgU1JDRklMRSB0byBEU1RGSUxFLgorSW4gdGhlIDJuZCBhbmQgM3JkLCBjb3B5IGFsbCBTUkNGSUxFUyB0byBESVJFQ1RPUlkuCitJbiB0aGUgNHRoLCBjcmVhdGUgRElSRUNUT1JJRVMuCisKK09wdGlvbnM6CisgICAgIC0taGVscCAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXQuCisgICAgIC0tdmVyc2lvbiAgZGlzcGxheSB2ZXJzaW9uIGluZm8gYW5kIGV4aXQuCisKKyAgLWMgICAgICAgICAgICAoaWdub3JlZCkKKyAgLUMgICAgICAgICAgICBpbnN0YWxsIG9ubHkgaWYgZGlmZmVyZW50IChwcmVzZXJ2ZSB0aGUgbGFzdCBkYXRhIG1vZGlmaWNhdGlvbiB0aW1lKQorICAtZCAgICAgICAgICAgIGNyZWF0ZSBkaXJlY3RvcmllcyBpbnN0ZWFkIG9mIGluc3RhbGxpbmcgZmlsZXMuCisgIC1nIEdST1VQICAgICAgJGNoZ3JwcHJvZyBpbnN0YWxsZWQgZmlsZXMgdG8gR1JPVVAuCisgIC1tIE1PREUgICAgICAgJGNobW9kcHJvZyBpbnN0YWxsZWQgZmlsZXMgdG8gTU9ERS4KKyAgLW8gVVNFUiAgICAgICAkY2hvd25wcm9nIGluc3RhbGxlZCBmaWxlcyB0byBVU0VSLgorICAtcyAgICAgICAgICAgICRzdHJpcHByb2cgaW5zdGFsbGVkIGZpbGVzLgorICAtdCBESVJFQ1RPUlkgIGluc3RhbGwgaW50byBESVJFQ1RPUlkuCisgIC1UICAgICAgICAgICAgcmVwb3J0IGFuIGVycm9yIGlmIERTVEZJTEUgaXMgYSBkaXJlY3RvcnkuCisKK0Vudmlyb25tZW50IHZhcmlhYmxlcyBvdmVycmlkZSB0aGUgZGVmYXVsdCBjb21tYW5kczoKKyAgQ0hHUlBQUk9HIENITU9EUFJPRyBDSE9XTlBST0cgQ01QUFJPRyBDUFBST0cgTUtESVJQUk9HIE1WUFJPRworICBSTVBST0cgU1RSSVBQUk9HCisiCisKK3doaWxlIHRlc3QgJCMgLW5lIDA7IGRvCisgIGNhc2UgJDEgaW4KKyAgICAtYykgOzsKKworICAgIC1DKSBjb3B5X29uX2NoYW5nZT10cnVlOzsKKworICAgIC1kKSBkaXJfYXJnPXRydWU7OworCisgICAgLWcpIGNoZ3JwY21kPSIkY2hncnBwcm9nICQyIgorCXNoaWZ0OzsKKworICAgIC0taGVscCkgZWNobyAiJHVzYWdlIjsgZXhpdCAkPzs7CisKKyAgICAtbSkgbW9kZT0kMgorCWNhc2UgJG1vZGUgaW4KKwkgIConICcqIHwgKicJJyogfCAqJworJyoJICB8IConKicqIHwgKic/JyogfCAqJ1snKikKKwkgICAgZWNobyAiJDA6IGludmFsaWQgbW9kZTogJG1vZGUiID4mMgorCSAgICBleGl0IDE7OworCWVzYWMKKwlzaGlmdDs7CisKKyAgICAtbykgY2hvd25jbWQ9IiRjaG93bnByb2cgJDIiCisJc2hpZnQ7OworCisgICAgLXMpIHN0cmlwY21kPSRzdHJpcHByb2c7OworCisgICAgLXQpIGRzdF9hcmc9JDIKKwlzaGlmdDs7CisKKyAgICAtVCkgbm9fdGFyZ2V0X2RpcmVjdG9yeT10cnVlOzsKKworICAgIC0tdmVyc2lvbikgZWNobyAiJDAgJHNjcmlwdHZlcnNpb24iOyBleGl0ICQ/OzsKKworICAgIC0tKQlzaGlmdAorCWJyZWFrOzsKKworICAgIC0qKQllY2hvICIkMDogaW52YWxpZCBvcHRpb246ICQxIiA+JjIKKwlleGl0IDE7OworCisgICAgKikgIGJyZWFrOzsKKyAgZXNhYworICBzaGlmdAorZG9uZQorCitpZiB0ZXN0ICQjIC1uZSAwICYmIHRlc3QgLXogIiRkaXJfYXJnJGRzdF9hcmciOyB0aGVuCisgICMgV2hlbiAtZCBpcyB1c2VkLCBhbGwgcmVtYWluaW5nIGFyZ3VtZW50cyBhcmUgZGlyZWN0b3JpZXMgdG8gY3JlYXRlLgorICAjIFdoZW4gLXQgaXMgdXNlZCwgdGhlIGRlc3RpbmF0aW9uIGlzIGFscmVhZHkgc3BlY2lmaWVkLgorICAjIE90aGVyd2lzZSwgdGhlIGxhc3QgYXJndW1lbnQgaXMgdGhlIGRlc3RpbmF0aW9uLiAgUmVtb3ZlIGl0IGZyb20gJEAuCisgIGZvciBhcmcKKyAgZG8KKyAgICBpZiB0ZXN0IC1uICIkZHN0X2FyZyI7IHRoZW4KKyAgICAgICMgJEAgaXMgbm90IGVtcHR5OiBpdCBjb250YWlucyBhdCBsZWFzdCAkYXJnLgorICAgICAgc2V0IGZub3JkICIkQCIgIiRkc3RfYXJnIgorICAgICAgc2hpZnQgIyBmbm9yZAorICAgIGZpCisgICAgc2hpZnQgIyBhcmcKKyAgICBkc3RfYXJnPSRhcmcKKyAgZG9uZQorZmkKKworaWYgdGVzdCAkIyAtZXEgMDsgdGhlbgorICBpZiB0ZXN0IC16ICIkZGlyX2FyZyI7IHRoZW4KKyAgICBlY2hvICIkMDogbm8gaW5wdXQgZmlsZSBzcGVjaWZpZWQuIiA+JjIKKyAgICBleGl0IDEKKyAgZmkKKyAgIyBJdCdzIE9LIHRvIGNhbGwgYGluc3RhbGwtc2ggLWQnIHdpdGhvdXQgYXJndW1lbnQuCisgICMgVGhpcyBjYW4gaGFwcGVuIHdoZW4gY3JlYXRpbmcgY29uZGl0aW9uYWwgZGlyZWN0b3JpZXMuCisgIGV4aXQgMAorZmkKKworaWYgdGVzdCAteiAiJGRpcl9hcmciOyB0aGVuCisgIHRyYXAgJyhleGl0ICQ/KTsgZXhpdCcgMSAyIDEzIDE1CisKKyAgIyBTZXQgdW1hc2sgc28gYXMgbm90IHRvIGNyZWF0ZSB0ZW1wcyB3aXRoIHRvby1nZW5lcm91cyBtb2Rlcy4KKyAgIyBIb3dldmVyLCAnc3RyaXAnIHJlcXVpcmVzIGJvdGggcmVhZCBhbmQgd3JpdGUgYWNjZXNzIHRvIHRlbXBzLgorICBjYXNlICRtb2RlIGluCisgICAgIyBPcHRpbWl6ZSBjb21tb24gY2FzZXMuCisgICAgKjY0NCkgY3BfdW1hc2s9MTMzOzsKKyAgICAqNzU1KSBjcF91bWFzaz0yMjs7CisKKyAgICAqWzAtN10pCisgICAgICBpZiB0ZXN0IC16ICIkc3RyaXBjbWQiOyB0aGVuCisJdV9wbHVzX3J3PQorICAgICAgZWxzZQorCXVfcGx1c19ydz0nJSAyMDAnCisgICAgICBmaQorICAgICAgY3BfdW1hc2s9YGV4cHIgJygnIDc3NyAtICRtb2RlICUgMTAwMCAnKScgJHVfcGx1c19yd2A7OworICAgICopCisgICAgICBpZiB0ZXN0IC16ICIkc3RyaXBjbWQiOyB0aGVuCisJdV9wbHVzX3J3PQorICAgICAgZWxzZQorCXVfcGx1c19ydz0sdStydworICAgICAgZmkKKyAgICAgIGNwX3VtYXNrPSRtb2RlJHVfcGx1c19ydzs7CisgIGVzYWMKK2ZpCisKK2ZvciBzcmMKK2RvCisgICMgUHJvdGVjdCBuYW1lcyBzdGFydGluZyB3aXRoIGAtJy4KKyAgY2FzZSAkc3JjIGluCisgICAgLSopIHNyYz0uLyRzcmM7OworICBlc2FjCisKKyAgaWYgdGVzdCAtbiAiJGRpcl9hcmciOyB0aGVuCisgICAgZHN0PSRzcmMKKyAgICBkc3RkaXI9JGRzdAorICAgIHRlc3QgLWQgIiRkc3RkaXIiCisgICAgZHN0ZGlyX3N0YXR1cz0kPworICBlbHNlCisKKyAgICAjIFdhaXRpbmcgZm9yIHRoaXMgdG8gYmUgZGV0ZWN0ZWQgYnkgdGhlICIkY3Bwcm9nICRzcmMgJGRzdHRtcCIgY29tbWFuZAorICAgICMgbWlnaHQgY2F1c2UgZGlyZWN0b3JpZXMgdG8gYmUgY3JlYXRlZCwgd2hpY2ggd291bGQgYmUgZXNwZWNpYWxseSBiYWQKKyAgICAjIGlmICRzcmMgKGFuZCB0aHVzICRkc3R0bXApIGNvbnRhaW5zICcqJy4KKyAgICBpZiB0ZXN0ICEgLWYgIiRzcmMiICYmIHRlc3QgISAtZCAiJHNyYyI7IHRoZW4KKyAgICAgIGVjaG8gIiQwOiAkc3JjIGRvZXMgbm90IGV4aXN0LiIgPiYyCisgICAgICBleGl0IDEKKyAgICBmaQorCisgICAgaWYgdGVzdCAteiAiJGRzdF9hcmciOyB0aGVuCisgICAgICBlY2hvICIkMDogbm8gZGVzdGluYXRpb24gc3BlY2lmaWVkLiIgPiYyCisgICAgICBleGl0IDEKKyAgICBmaQorCisgICAgZHN0PSRkc3RfYXJnCisgICAgIyBQcm90ZWN0IG5hbWVzIHN0YXJ0aW5nIHdpdGggYC0nLgorICAgIGNhc2UgJGRzdCBpbgorICAgICAgLSopIGRzdD0uLyRkc3Q7OworICAgIGVzYWMKKworICAgICMgSWYgZGVzdGluYXRpb24gaXMgYSBkaXJlY3RvcnksIGFwcGVuZCB0aGUgaW5wdXQgZmlsZW5hbWU7IHdvbid0IHdvcmsKKyAgICAjIGlmIGRvdWJsZSBzbGFzaGVzIGFyZW4ndCBpZ25vcmVkLgorICAgIGlmIHRlc3QgLWQgIiRkc3QiOyB0aGVuCisgICAgICBpZiB0ZXN0IC1uICIkbm9fdGFyZ2V0X2RpcmVjdG9yeSI7IHRoZW4KKwllY2hvICIkMDogJGRzdF9hcmc6IElzIGEgZGlyZWN0b3J5IiA+JjIKKwlleGl0IDEKKyAgICAgIGZpCisgICAgICBkc3RkaXI9JGRzdAorICAgICAgZHN0PSRkc3RkaXIvYGJhc2VuYW1lICIkc3JjImAKKyAgICAgIGRzdGRpcl9zdGF0dXM9MAorICAgIGVsc2UKKyAgICAgICMgUHJlZmVyIGRpcm5hbWUsIGJ1dCBmYWxsIGJhY2sgb24gYSBzdWJzdGl0dXRlIGlmIGRpcm5hbWUgZmFpbHMuCisgICAgICBkc3RkaXI9YAorCShkaXJuYW1lICIkZHN0IikgMj4vZGV2L251bGwgfHwKKwlleHByIFgiJGRzdCIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgICAgIFgiJGRzdCIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgICAgIFgiJGRzdCIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgICAgIFgiJGRzdCIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CisJZWNobyBYIiRkc3QiIHwKKwkgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkJICAgcy8vXDEvCisJCSAgIHEKKwkJIH0KKwkJIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkJICAgcy8vXDEvCisJCSAgIHEKKwkJIH0KKwkJIC9eWFwoXC9cL1wpJC97CisJCSAgIHMvL1wxLworCQkgICBxCisJCSB9CisJCSAvXlhcKFwvXCkuKi97CisJCSAgIHMvL1wxLworCQkgICBxCisJCSB9CisJCSBzLy4qLy4vOyBxJworICAgICAgYAorCisgICAgICB0ZXN0IC1kICIkZHN0ZGlyIgorICAgICAgZHN0ZGlyX3N0YXR1cz0kPworICAgIGZpCisgIGZpCisKKyAgb2Jzb2xldGVfbWtkaXJfdXNlZD1mYWxzZQorCisgIGlmIHRlc3QgJGRzdGRpcl9zdGF0dXMgIT0gMDsgdGhlbgorICAgIGNhc2UgJHBvc2l4X21rZGlyIGluCisgICAgICAnJykKKwkjIENyZWF0ZSBpbnRlcm1lZGlhdGUgZGlycyB1c2luZyBtb2RlIDc1NSBhcyBtb2RpZmllZCBieSB0aGUgdW1hc2suCisJIyBUaGlzIGlzIGxpa2UgRnJlZUJTRCAnaW5zdGFsbCcgYXMgb2YgMTk5Ny0xMC0yOC4KKwl1bWFzaz1gdW1hc2tgCisJY2FzZSAkc3RyaXBjbWQuJHVtYXNrIGluCisJICAjIE9wdGltaXplIGNvbW1vbiBjYXNlcy4KKwkgICpbMjM2N11bMjM2N10pIG1rZGlyX3VtYXNrPSR1bWFzazs7CisJICAuKjBbMDJdWzAyXSB8IC5bMDJdWzAyXSB8IC5bMDJdKSBta2Rpcl91bWFzaz0yMjs7CisKKwkgICpbMC03XSkKKwkgICAgbWtkaXJfdW1hc2s9YGV4cHIgJHVtYXNrICsgMjIgXAorCSAgICAgIC0gJHVtYXNrICUgMTAwICUgNDAgKyAkdW1hc2sgJSAyMCBcCisJICAgICAgLSAkdW1hc2sgJSAxMCAlIDQgKyAkdW1hc2sgJSAyCisJICAgIGA7OworCSAgKikgbWtkaXJfdW1hc2s9JHVtYXNrLGdvLXc7OworCWVzYWMKKworCSMgV2l0aCAtZCwgY3JlYXRlIHRoZSBuZXcgZGlyZWN0b3J5IHdpdGggdGhlIHVzZXItc3BlY2lmaWVkIG1vZGUuCisJIyBPdGhlcndpc2UsIHJlbHkgb24gJG1rZGlyX3VtYXNrLgorCWlmIHRlc3QgLW4gIiRkaXJfYXJnIjsgdGhlbgorCSAgbWtkaXJfbW9kZT0tbSRtb2RlCisJZWxzZQorCSAgbWtkaXJfbW9kZT0KKwlmaQorCisJcG9zaXhfbWtkaXI9ZmFsc2UKKwljYXNlICR1bWFzayBpbgorCSAgKlsxMjM1NjddWzAtN11bMC03XSkKKwkgICAgIyBQT1NJWCBta2RpciAtcCBzZXRzIHUrd3ggYml0cyByZWdhcmRsZXNzIG9mIHVtYXNrLCB3aGljaAorCSAgICAjIGlzIGluY29tcGF0aWJsZSB3aXRoIEZyZWVCU0QgJ2luc3RhbGwnIHdoZW4gKHVtYXNrICYgMzAwKSAhPSAwLgorCSAgICA7OworCSAgKikKKwkgICAgdG1wZGlyPSR7VE1QRElSLS90bXB9L2lucyRSQU5ET00tJCQKKwkgICAgdHJhcCAncmV0PSQ/OyBybWRpciAiJHRtcGRpci9kIiAiJHRtcGRpciIgMj4vZGV2L251bGw7IGV4aXQgJHJldCcgMAorCisJICAgIGlmICh1bWFzayAkbWtkaXJfdW1hc2sgJiYKKwkJZXhlYyAkbWtkaXJwcm9nICRta2Rpcl9tb2RlIC1wIC0tICIkdG1wZGlyL2QiKSA+L2Rldi9udWxsIDI+JjEKKwkgICAgdGhlbgorCSAgICAgIGlmIHRlc3QgLXogIiRkaXJfYXJnIiB8fCB7CisJCSAgICMgQ2hlY2sgZm9yIFBPU0lYIGluY29tcGF0aWJpbGl0aWVzIHdpdGggLW0uCisJCSAgICMgSFAtVVggMTEuMjMgYW5kIElSSVggNi41IG1rZGlyIC1tIC1wIHNldHMgZ3JvdXAtIG9yCisJCSAgICMgb3RoZXItd3JpdGVhYmxlIGJpdCBvZiBwYXJlbnQgZGlyZWN0b3J5IHdoZW4gaXQgc2hvdWxkbid0LgorCQkgICAjIEZyZWVCU0QgNi4xIG1rZGlyIC1tIC1wIHNldHMgbW9kZSBvZiBleGlzdGluZyBkaXJlY3RvcnkuCisJCSAgIGxzX2xkX3RtcGRpcj1gbHMgLWxkICIkdG1wZGlyImAKKwkJICAgY2FzZSAkbHNfbGRfdG1wZGlyIGluCisJCSAgICAgZD8/Pz8tP3ItKikgZGlmZmVyZW50X21vZGU9NzAwOzsKKwkJICAgICBkPz8/Py0/LS0qKSBkaWZmZXJlbnRfbW9kZT03NTU7OworCQkgICAgICopIGZhbHNlOzsKKwkJICAgZXNhYyAmJgorCQkgICAkbWtkaXJwcm9nIC1tJGRpZmZlcmVudF9tb2RlIC1wIC0tICIkdG1wZGlyIiAmJiB7CisJCSAgICAgbHNfbGRfdG1wZGlyXzE9YGxzIC1sZCAiJHRtcGRpciJgCisJCSAgICAgdGVzdCAiJGxzX2xkX3RtcGRpciIgPSAiJGxzX2xkX3RtcGRpcl8xIgorCQkgICB9CisJCSB9CisJICAgICAgdGhlbiBwb3NpeF9ta2Rpcj06CisJICAgICAgZmkKKwkgICAgICBybWRpciAiJHRtcGRpci9kIiAiJHRtcGRpciIKKwkgICAgZWxzZQorCSAgICAgICMgUmVtb3ZlIGFueSBkaXJzIGxlZnQgYmVoaW5kIGJ5IGFuY2llbnQgbWtkaXIgaW1wbGVtZW50YXRpb25zLgorCSAgICAgIHJtZGlyIC4vJG1rZGlyX21vZGUgLi8tcCAuLy0tIDI+L2Rldi9udWxsCisJICAgIGZpCisJICAgIHRyYXAgJycgMDs7CisJZXNhYzs7CisgICAgZXNhYworCisgICAgaWYKKyAgICAgICRwb3NpeF9ta2RpciAmJiAoCisJdW1hc2sgJG1rZGlyX3VtYXNrICYmCisJJGRvaXRfZXhlYyAkbWtkaXJwcm9nICRta2Rpcl9tb2RlIC1wIC0tICIkZHN0ZGlyIgorICAgICAgKQorICAgIHRoZW4gOgorICAgIGVsc2UKKworICAgICAgIyBUaGUgdW1hc2sgaXMgcmlkaWN1bG91cywgb3IgbWtkaXIgZG9lcyBub3QgY29uZm9ybSB0byBQT1NJWCwKKyAgICAgICMgb3IgaXQgZmFpbGVkIHBvc3NpYmx5IGR1ZSB0byBhIHJhY2UgY29uZGl0aW9uLiAgQ3JlYXRlIHRoZQorICAgICAgIyBkaXJlY3RvcnkgdGhlIHNsb3cgd2F5LCBzdGVwIGJ5IHN0ZXAsIGNoZWNraW5nIGZvciByYWNlcyBhcyB3ZSBnby4KKworICAgICAgY2FzZSAkZHN0ZGlyIGluCisJLyopIHByZWZpeD0nLyc7OworCS0qKSBwcmVmaXg9Jy4vJzs7CisJKikgIHByZWZpeD0nJzs7CisgICAgICBlc2FjCisKKyAgICAgIGV2YWwgIiRpbml0aWFsaXplX3Bvc2l4X2dsb2IiCisKKyAgICAgIG9JRlM9JElGUworICAgICAgSUZTPS8KKyAgICAgICRwb3NpeF9nbG9iIHNldCAtZgorICAgICAgc2V0IGZub3JkICRkc3RkaXIKKyAgICAgIHNoaWZ0CisgICAgICAkcG9zaXhfZ2xvYiBzZXQgK2YKKyAgICAgIElGUz0kb0lGUworCisgICAgICBwcmVmaXhlcz0KKworICAgICAgZm9yIGQKKyAgICAgIGRvCisJdGVzdCAteiAiJGQiICYmIGNvbnRpbnVlCisKKwlwcmVmaXg9JHByZWZpeCRkCisJaWYgdGVzdCAtZCAiJHByZWZpeCI7IHRoZW4KKwkgIHByZWZpeGVzPQorCWVsc2UKKwkgIGlmICRwb3NpeF9ta2RpcjsgdGhlbgorCSAgICAodW1hc2s9JG1rZGlyX3VtYXNrICYmCisJICAgICAkZG9pdF9leGVjICRta2RpcnByb2cgJG1rZGlyX21vZGUgLXAgLS0gIiRkc3RkaXIiKSAmJiBicmVhaworCSAgICAjIERvbid0IGZhaWwgaWYgdHdvIGluc3RhbmNlcyBhcmUgcnVubmluZyBjb25jdXJyZW50bHkuCisJICAgIHRlc3QgLWQgIiRwcmVmaXgiIHx8IGV4aXQgMQorCSAgZWxzZQorCSAgICBjYXNlICRwcmVmaXggaW4KKwkgICAgICAqXCcqKSBxcHJlZml4PWBlY2hvICIkcHJlZml4IiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYDs7CisJICAgICAgKikgcXByZWZpeD0kcHJlZml4OzsKKwkgICAgZXNhYworCSAgICBwcmVmaXhlcz0iJHByZWZpeGVzICckcXByZWZpeCciCisJICBmaQorCWZpCisJcHJlZml4PSRwcmVmaXgvCisgICAgICBkb25lCisKKyAgICAgIGlmIHRlc3QgLW4gIiRwcmVmaXhlcyI7IHRoZW4KKwkjIERvbid0IGZhaWwgaWYgdHdvIGluc3RhbmNlcyBhcmUgcnVubmluZyBjb25jdXJyZW50bHkuCisJKHVtYXNrICRta2Rpcl91bWFzayAmJgorCSBldmFsICJcJGRvaXRfZXhlYyBcJG1rZGlycHJvZyAkcHJlZml4ZXMiKSB8fAorCSAgdGVzdCAtZCAiJGRzdGRpciIgfHwgZXhpdCAxCisJb2Jzb2xldGVfbWtkaXJfdXNlZD10cnVlCisgICAgICBmaQorICAgIGZpCisgIGZpCisKKyAgaWYgdGVzdCAtbiAiJGRpcl9hcmciOyB0aGVuCisgICAgeyB0ZXN0IC16ICIkY2hvd25jbWQiIHx8ICRkb2l0ICRjaG93bmNtZCAiJGRzdCI7IH0gJiYKKyAgICB7IHRlc3QgLXogIiRjaGdycGNtZCIgfHwgJGRvaXQgJGNoZ3JwY21kICIkZHN0IjsgfSAmJgorICAgIHsgdGVzdCAiJG9ic29sZXRlX21rZGlyX3VzZWQkY2hvd25jbWQkY2hncnBjbWQiID0gZmFsc2UgfHwKKyAgICAgIHRlc3QgLXogIiRjaG1vZGNtZCIgfHwgJGRvaXQgJGNobW9kY21kICRtb2RlICIkZHN0IjsgfSB8fCBleGl0IDEKKyAgZWxzZQorCisgICAgIyBNYWtlIGEgY291cGxlIG9mIHRlbXAgZmlsZSBuYW1lcyBpbiB0aGUgcHJvcGVyIGRpcmVjdG9yeS4KKyAgICBkc3R0bXA9JGRzdGRpci9faW5zdC4kJF8KKyAgICBybXRtcD0kZHN0ZGlyL19ybS4kJF8KKworICAgICMgVHJhcCB0byBjbGVhbiB1cCB0aG9zZSB0ZW1wIGZpbGVzIGF0IGV4aXQuCisgICAgdHJhcCAncmV0PSQ/OyBybSAtZiAiJGRzdHRtcCIgIiRybXRtcCIgJiYgZXhpdCAkcmV0JyAwCisKKyAgICAjIENvcHkgdGhlIGZpbGUgbmFtZSB0byB0aGUgdGVtcCBuYW1lLgorICAgICh1bWFzayAkY3BfdW1hc2sgJiYgJGRvaXRfZXhlYyAkY3Bwcm9nICIkc3JjIiAiJGRzdHRtcCIpICYmCisKKyAgICAjIGFuZCBzZXQgYW55IG9wdGlvbnM7IGRvIGNobW9kIGxhc3QgdG8gcHJlc2VydmUgc2V0dWlkIGJpdHMuCisgICAgIworICAgICMgSWYgYW55IG9mIHRoZXNlIGZhaWwsIHdlIGFib3J0IHRoZSB3aG9sZSB0aGluZy4gIElmIHdlIHdhbnQgdG8KKyAgICAjIGlnbm9yZSBlcnJvcnMgZnJvbSBhbnkgb2YgdGhlc2UsIGp1c3QgbWFrZSBzdXJlIG5vdCB0byBpZ25vcmUKKyAgICAjIGVycm9ycyBmcm9tIHRoZSBhYm92ZSAiJGRvaXQgJGNwcHJvZyAkc3JjICRkc3R0bXAiIGNvbW1hbmQuCisgICAgIworICAgIHsgdGVzdCAteiAiJGNob3duY21kIiB8fCAkZG9pdCAkY2hvd25jbWQgIiRkc3R0bXAiOyB9ICYmCisgICAgeyB0ZXN0IC16ICIkY2hncnBjbWQiIHx8ICRkb2l0ICRjaGdycGNtZCAiJGRzdHRtcCI7IH0gJiYKKyAgICB7IHRlc3QgLXogIiRzdHJpcGNtZCIgfHwgJGRvaXQgJHN0cmlwY21kICIkZHN0dG1wIjsgfSAmJgorICAgIHsgdGVzdCAteiAiJGNobW9kY21kIiB8fCAkZG9pdCAkY2htb2RjbWQgJG1vZGUgIiRkc3R0bXAiOyB9ICYmCisKKyAgICAjIElmIC1DLCBkb24ndCBib3RoZXIgdG8gY29weSBpZiBpdCB3b3VsZG4ndCBjaGFuZ2UgdGhlIGZpbGUuCisgICAgaWYgJGNvcHlfb25fY2hhbmdlICYmCisgICAgICAgb2xkPWBMQ19BTEw9QyBscyAtZGxMICIkZHN0IgkyPi9kZXYvbnVsbGAgJiYKKyAgICAgICBuZXc9YExDX0FMTD1DIGxzIC1kbEwgIiRkc3R0bXAiCTI+L2Rldi9udWxsYCAmJgorCisgICAgICAgZXZhbCAiJGluaXRpYWxpemVfcG9zaXhfZ2xvYiIgJiYKKyAgICAgICAkcG9zaXhfZ2xvYiBzZXQgLWYgJiYKKyAgICAgICBzZXQgWCAkb2xkICYmIG9sZD06JDI6JDQ6JDU6JDYgJiYKKyAgICAgICBzZXQgWCAkbmV3ICYmIG5ldz06JDI6JDQ6JDU6JDYgJiYKKyAgICAgICAkcG9zaXhfZ2xvYiBzZXQgK2YgJiYKKworICAgICAgIHRlc3QgIiRvbGQiID0gIiRuZXciICYmCisgICAgICAgJGNtcHByb2cgIiRkc3QiICIkZHN0dG1wIiA+L2Rldi9udWxsIDI+JjEKKyAgICB0aGVuCisgICAgICBybSAtZiAiJGRzdHRtcCIKKyAgICBlbHNlCisgICAgICAjIFJlbmFtZSB0aGUgZmlsZSB0byB0aGUgcmVhbCBkZXN0aW5hdGlvbi4KKyAgICAgICRkb2l0ICRtdmNtZCAtZiAiJGRzdHRtcCIgIiRkc3QiIDI+L2Rldi9udWxsIHx8CisKKyAgICAgICMgVGhlIHJlbmFtZSBmYWlsZWQsIHBlcmhhcHMgYmVjYXVzZSBtdiBjYW4ndCByZW5hbWUgc29tZXRoaW5nIGVsc2UKKyAgICAgICMgdG8gaXRzZWxmLCBvciBwZXJoYXBzIGJlY2F1c2UgbXYgaXMgc28gYW5jaWVudCB0aGF0IGl0IGRvZXMgbm90CisgICAgICAjIHN1cHBvcnQgLWYuCisgICAgICB7CisJIyBOb3cgcmVtb3ZlIG9yIG1vdmUgYXNpZGUgYW55IG9sZCBmaWxlIGF0IGRlc3RpbmF0aW9uIGxvY2F0aW9uLgorCSMgV2UgdHJ5IHRoaXMgdHdvIHdheXMgc2luY2Ugcm0gY2FuJ3QgdW5saW5rIGl0c2VsZiBvbiBzb21lCisJIyBzeXN0ZW1zIGFuZCB0aGUgZGVzdGluYXRpb24gZmlsZSBtaWdodCBiZSBidXN5IGZvciBvdGhlcgorCSMgcmVhc29ucy4gIEluIHRoaXMgY2FzZSwgdGhlIGZpbmFsIGNsZWFudXAgbWlnaHQgZmFpbCBidXQgdGhlIG5ldworCSMgZmlsZSBzaG91bGQgc3RpbGwgaW5zdGFsbCBzdWNjZXNzZnVsbHkuCisJeworCSAgdGVzdCAhIC1mICIkZHN0IiB8fAorCSAgJGRvaXQgJHJtY21kIC1mICIkZHN0IiAyPi9kZXYvbnVsbCB8fAorCSAgeyAkZG9pdCAkbXZjbWQgLWYgIiRkc3QiICIkcm10bXAiIDI+L2Rldi9udWxsICYmCisJICAgIHsgJGRvaXQgJHJtY21kIC1mICIkcm10bXAiIDI+L2Rldi9udWxsOyA6OyB9CisJICB9IHx8CisJICB7IGVjaG8gIiQwOiBjYW5ub3QgdW5saW5rIG9yIHJlbmFtZSAkZHN0IiA+JjIKKwkgICAgKGV4aXQgMSk7IGV4aXQgMQorCSAgfQorCX0gJiYKKworCSMgTm93IHJlbmFtZSB0aGUgZmlsZSB0byB0aGUgcmVhbCBkZXN0aW5hdGlvbi4KKwkkZG9pdCAkbXZjbWQgIiRkc3R0bXAiICIkZHN0IgorICAgICAgfQorICAgIGZpIHx8IGV4aXQgMQorCisgICAgdHJhcCAnJyAwCisgIGZpCitkb25lCisKKyMgTG9jYWwgdmFyaWFibGVzOgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJzY3JpcHR2ZXJzaW9uPSIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkLiUwMkgiCisjIHRpbWUtc3RhbXAtdGltZS16b25lOiAiVVRDIgorIyB0aW1lLXN0YW1wLWVuZDogIjsgIyBVVEMiCisjIEVuZDoKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9sdG1haW4uc2ggYi9hdmFoaS0wLjYuMzEvbHRtYWluLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzYWU2OWQKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvbHRtYWluLnNoCkBAIC0wLDAgKzEsOTY1NSBAQAorCisjIGxpYnRvb2wgKEdOVSBsaWJ0b29sKSAyLjQuMgorIyBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0IDxnb3JkQGdudS5haS5taXQuZWR1PiwgMTk5NgorCisjIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwKKyMgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KKyMgd2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisKKyMgR05VIExpYnRvb2wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyMgaWYgeW91IGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIG9yIGxpYnJhcnkgdGhhdAorIyBpcyBidWlsdCB1c2luZyBHTlUgTGlidG9vbCwgeW91IG1heSBpbmNsdWRlIHRoaXMgZmlsZSB1bmRlciB0aGUKKyMgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisjCisjIEdOVSBMaWJ0b29sIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisjIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCBHTlUgTGlidG9vbDsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIGEgY29weQorIyBjYW4gYmUgZG93bmxvYWRlZCBmcm9tIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwuaHRtbCwKKyMgb3Igb2J0YWluZWQgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworIyBVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIFtNT0RFLUFSR10uLi4KKyMKKyMgUHJvdmlkZSBnZW5lcmFsaXplZCBsaWJyYXJ5LWJ1aWxkaW5nIHN1cHBvcnQgc2VydmljZXMuCisjCisjICAgICAgIC0tY29uZmlnICAgICAgICAgICAgIHNob3cgYWxsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCisjICAgICAgIC0tZGVidWcgICAgICAgICAgICAgIGVuYWJsZSB2ZXJib3NlIHNoZWxsIHRyYWNpbmcKKyMgICAtbiwgLS1kcnktcnVuICAgICAgICAgICAgZGlzcGxheSBjb21tYW5kcyB3aXRob3V0IG1vZGlmeWluZyBhbnkgZmlsZXMKKyMgICAgICAgLS1mZWF0dXJlcyAgICAgICAgICAgZGlzcGxheSBiYXNpYyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGFuZCBleGl0CisjICAgICAgIC0tbW9kZT1NT0RFICAgICAgICAgIHVzZSBvcGVyYXRpb24gbW9kZSBNT0RFCisjICAgICAgIC0tcHJlc2VydmUtZHVwLWRlcHMgIGRvbid0IHJlbW92ZSBkdXBsaWNhdGUgZGVwZW5kZW5jeSBsaWJyYXJpZXMKKyMgICAgICAgLS1xdWlldCwgLS1zaWxlbnQgICAgZG9uJ3QgcHJpbnQgaW5mb3JtYXRpb25hbCBtZXNzYWdlcworIyAgICAgICAtLW5vLXF1aWV0LCAtLW5vLXNpbGVudAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIChkZWZhdWx0KQorIyAgICAgICAtLW5vLXdhcm4gICAgICAgICAgICBkb24ndCBkaXNwbGF5IHdhcm5pbmcgbWVzc2FnZXMKKyMgICAgICAgLS10YWc9VEFHICAgICAgICAgICAgdXNlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZyb20gdGFnIFRBRworIyAgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICBwcmludCBtb3JlIGluZm9ybWF0aW9uYWwgbWVzc2FnZXMgdGhhbiBkZWZhdWx0CisjICAgICAgIC0tbm8tdmVyYm9zZSAgICAgICAgIGRvbid0IHByaW50IHRoZSBleHRyYSBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzCisjICAgICAgIC0tdmVyc2lvbiAgICAgICAgICAgIHByaW50IHZlcnNpb24gaW5mb3JtYXRpb24KKyMgICAtaCwgLS1oZWxwLCAtLWhlbHAtYWxsICAgcHJpbnQgc2hvcnQsIGxvbmcsIG9yIGRldGFpbGVkIGhlbHAgbWVzc2FnZQorIworIyBNT0RFIG11c3QgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisjCisjICAgICAgICAgY2xlYW4gICAgICAgICAgICAgIHJlbW92ZSBmaWxlcyBmcm9tIHRoZSBidWlsZCBkaXJlY3RvcnkKKyMgICAgICAgICBjb21waWxlICAgICAgICAgICAgY29tcGlsZSBhIHNvdXJjZSBmaWxlIGludG8gYSBsaWJ0b29sIG9iamVjdAorIyAgICAgICAgIGV4ZWN1dGUgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IHNldCBsaWJyYXJ5IHBhdGgsIHRoZW4gcnVuIGEgcHJvZ3JhbQorIyAgICAgICAgIGZpbmlzaCAgICAgICAgICAgICBjb21wbGV0ZSB0aGUgaW5zdGFsbGF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzCisjICAgICAgICAgaW5zdGFsbCAgICAgICAgICAgIGluc3RhbGwgbGlicmFyaWVzIG9yIGV4ZWN1dGFibGVzCisjICAgICAgICAgbGluayAgICAgICAgICAgICAgIGNyZWF0ZSBhIGxpYnJhcnkgb3IgYW4gZXhlY3V0YWJsZQorIyAgICAgICAgIHVuaW5zdGFsbCAgICAgICAgICByZW1vdmUgbGlicmFyaWVzIGZyb20gYW4gaW5zdGFsbGVkIGRpcmVjdG9yeQorIworIyBNT0RFLUFSR1MgdmFyeSBkZXBlbmRpbmcgb24gdGhlIE1PREUuICBXaGVuIHBhc3NlZCBhcyBmaXJzdCBvcHRpb24sCisjIGAtLW1vZGU9TU9ERScgbWF5IGJlIGFiYnJldmlhdGVkIGFzIGBNT0RFJyBvciBhIHVuaXF1ZSBhYmJyZXZpYXRpb24gb2YgdGhhdC4KKyMgVHJ5IGAkcHJvZ25hbWUgLS1oZWxwIC0tbW9kZT1NT0RFJyBmb3IgYSBtb3JlIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIE1PREUuCisjCisjIFdoZW4gcmVwb3J0aW5nIGEgYnVnLCBwbGVhc2UgZGVzY3JpYmUgYSB0ZXN0IGNhc2UgdG8gcmVwcm9kdWNlIGl0IGFuZAorIyBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246CisjCisjICAgICAgICAgaG9zdC10cmlwbGV0OgkkaG9zdAorIyAgICAgICAgIHNoZWxsOgkJJFNIRUxMCisjICAgICAgICAgY29tcGlsZXI6CQkkTFRDQworIyAgICAgICAgIGNvbXBpbGVyIGZsYWdzOgkJJExUQ0ZMQUdTCisjICAgICAgICAgbGlua2VyOgkJJExEIChnbnU/ICR3aXRoX2dudV9sZCkKKyMgICAgICAgICAkcHJvZ25hbWU6CShHTlUgbGlidG9vbCkgMi40LjIKKyMgICAgICAgICBhdXRvbWFrZToJJGF1dG9tYWtlX3ZlcnNpb24KKyMgICAgICAgICBhdXRvY29uZjoJJGF1dG9jb25mX3ZlcnNpb24KKyMKKyMgUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1saWJ0b29sQGdudS5vcmc+LgorIyBHTlUgbGlidG9vbCBob21lIHBhZ2U6IDxodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbGlidG9vbC8+LgorIyBHZW5lcmFsIGhlbHAgdXNpbmcgR05VIHNvZnR3YXJlOiA8aHR0cDovL3d3dy5nbnUub3JnL2dldGhlbHAvPi4KKworUFJPR1JBTT1saWJ0b29sCitQQUNLQUdFPWxpYnRvb2wKK1ZFUlNJT049Mi40LjIKK1RJTUVTVEFNUD0iIgorcGFja2FnZV9yZXZpc2lvbj0xLjMzMzcKKworIyBCZSBCb3VybmUgY29tcGF0aWJsZQoraWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGVtdWxhdGUgc2gKKyAgTlVMTENNRD06CisgICMgWnNoIDMueCBhbmQgNC54IHBlcmZvcm1zIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gKKyAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KKyAgYWxpYXMgLWcgJyR7MSsiJEAifSc9JyIkQCInCisgIHNldG9wdCBOT19HTE9CX1NVQlNUCitlbHNlCisgIGNhc2UgYChzZXQgLW8pIDI+L2Rldi9udWxsYCBpbiAqcG9zaXgqKSBzZXQgLW8gcG9zaXg7OyBlc2FjCitmaQorQklOX1NIPXhwZzQ7IGV4cG9ydCBCSU5fU0ggIyBmb3IgVHJ1NjQKK0RVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKKworIyBBIGZ1bmN0aW9uIHRoYXQgaXMgdXNlZCB3aGVuIHRoZXJlIGlzIG5vIHByaW50IGJ1aWx0aW4gb3IgcHJpbnRmLgorZnVuY19mYWxsYmFja19lY2hvICgpCit7CisgIGV2YWwgJ2NhdCA8PF9MVEVDSE9fRU9GCiskMQorX0xURUNIT19FT0YnCit9CisKKyMgTkxTIG51aXNhbmNlczogV2Ugc2F2ZSB0aGUgb2xkIHZhbHVlcyB0byByZXN0b3JlIGR1cmluZyBleGVjdXRlIG1vZGUuCitsdF91c2VyX2xvY2FsZT0KK2x0X3NhZmVfbG9jYWxlPQorZm9yIGx0X3ZhciBpbiBMQU5HIExBTkdVQUdFIExDX0FMTCBMQ19DVFlQRSBMQ19DT0xMQVRFIExDX01FU1NBR0VTCitkbworICBldmFsICJpZiB0ZXN0IFwiXCR7JGx0X3ZhcitzZXR9XCIgPSBzZXQ7IHRoZW4KKyAgICAgICAgICBzYXZlXyRsdF92YXI9XCQkbHRfdmFyCisgICAgICAgICAgJGx0X3Zhcj1DCisJICBleHBvcnQgJGx0X3ZhcgorCSAgbHRfdXNlcl9sb2NhbGU9XCIkbHRfdmFyPVxcXCRzYXZlX1wkbHRfdmFyOyBcJGx0X3VzZXJfbG9jYWxlXCIKKwkgIGx0X3NhZmVfbG9jYWxlPVwiJGx0X3Zhcj1DOyBcJGx0X3NhZmVfbG9jYWxlXCIKKwlmaSIKK2RvbmUKK0xDX0FMTD1DCitMQU5HVUFHRT1DCitleHBvcnQgTEFOR1VBR0UgTENfQUxMCisKKyRsdF91bnNldCBDRFBBVEgKKworCisjIFdvcmsgYXJvdW5kIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgaXNzdWUgb24gSVJJWCA2LjUuIE9uIElSSVggNi40Kywgc2gKKyMgaXMga3NoIGJ1dCB3aGVuIHRoZSBzaGVsbCBpcyBpbnZva2VkIGFzICJzaCIgYW5kIHRoZSBjdXJyZW50IHZhbHVlIG9mCisjIHRoZSBfWFBHIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG5vdCBlcXVhbCB0byAxIChvbmUpLCB0aGUgc3BlY2lhbAorIyBwb3NpdGlvbmFsIHBhcmFtZXRlciAkMCwgd2l0aGluIGEgZnVuY3Rpb24gY2FsbCwgaXMgdGhlIG5hbWUgb2YgdGhlCisjIGZ1bmN0aW9uLgorcHJvZ3BhdGg9IiQwIgorCisKKworOiAke0NQPSJjcCAtZiJ9Cit0ZXN0ICIke0VDSE8rc2V0fSIgPSBzZXQgfHwgRUNITz0ke2FzX2VjaG8tJ3ByaW50ZiAlc1xuJ30KKzogJHtNQUtFPSJtYWtlIn0KKzogJHtNS0RJUj0ibWtkaXIifQorOiAke01WPSJtdiAtZiJ9Cis6ICR7Uk09InJtIC1mIn0KKzogJHtTSEVMTD0iJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0ifQorOiAke1hzZWQ9IiRTRUQgLWUgMXMvXlgvLyJ9CisKKyMgR2xvYmFsIHZhcmlhYmxlczoKK0VYSVRfU1VDQ0VTUz0wCitFWElUX0ZBSUxVUkU9MQorRVhJVF9NSVNNQVRDSD02MyAgIyAkPyA9IDYzIGlzIHVzZWQgdG8gaW5kaWNhdGUgdmVyc2lvbiBtaXNtYXRjaCB0byBtaXNzaW5nLgorRVhJVF9TS0lQPTc3CSAgIyAkPyA9IDc3IGlzIHVzZWQgdG8gaW5kaWNhdGUgYSBza2lwcGVkIHRlc3QgdG8gYXV0b21ha2UuCisKK2V4aXRfc3RhdHVzPSRFWElUX1NVQ0NFU1MKKworIyBNYWtlIHN1cmUgSUZTIGhhcyBhIHNlbnNpYmxlIGRlZmF1bHQKK2x0X25sPScKKycKK0lGUz0iIAkkbHRfbmwiCisKK2Rpcm5hbWU9InMsL1teL10qJCwsIgorYmFzZW5hbWU9InMsXi4qLywsIgorCisjIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKyMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKyMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorZnVuY19kaXJuYW1lICgpCit7CisgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGRpcm5hbWUiYAorICAgIGlmIHRlc3QgIlgkZnVuY19kaXJuYW1lX3Jlc3VsdCIgPSAiWCR7MX0iOyB0aGVuCisgICAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IgorICAgIGVsc2UKKyAgICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JHsyfSIKKyAgICBmaQorfSAjIGZ1bmNfZGlybmFtZSBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKworCisjIGZ1bmNfYmFzZW5hbWUgZmlsZQorZnVuY19iYXNlbmFtZSAoKQoreworICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkYmFzZW5hbWUiYAorfSAjIGZ1bmNfYmFzZW5hbWUgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisKKworIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorIyBwZXJmb3JtIGZ1bmNfYmFzZW5hbWUgYW5kIGZ1bmNfZGlybmFtZSBpbiBhIHNpbmdsZSBmdW5jdGlvbgorIyBjYWxsOgorIyAgIGRpcm5hbWU6ICBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwKKyMgICAgICAgICAgICAgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LCBvdGhlcndpc2Ugc2V0IHJlc3VsdAorIyAgICAgICAgICAgICB0byBOT05ESVJfUkVQTEFDRU1FTlQuCisjICAgICAgICAgICAgIHZhbHVlIHJldHVybmVkIGluICIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKyMgICBiYXNlbmFtZTogQ29tcHV0ZSBmaWxlbmFtZSBvZiBGSUxFLgorIyAgICAgICAgICAgICB2YWx1ZSByZXR1bmVkIGluICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisjIEltcGxlbWVudGF0aW9uIG11c3QgYmUga2VwdCBzeW5jaHJvbml6ZWQgd2l0aCBmdW5jX2Rpcm5hbWUKKyMgYW5kIGZ1bmNfYmFzZW5hbWUuIEZvciBlZmZpY2llbmN5LCB3ZSBkbyBub3QgZGVsZWdhdGUgdG8KKyMgdGhvc2UgZnVuY3Rpb25zIGJ1dCBpbnN0ZWFkIGR1cGxpY2F0ZSB0aGUgZnVuY3Rpb25hbGl0eSBoZXJlLgorZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKQoreworICAgICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCisgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAtZSAiJGRpcm5hbWUiYAorICAgIGlmIHRlc3QgIlgkZnVuY19kaXJuYW1lX3Jlc3VsdCIgPSAiWCR7MX0iOyB0aGVuCisgICAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IgorICAgIGVsc2UKKyAgICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JHsyfSIKKyAgICBmaQorICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEIC1lICIkYmFzZW5hbWUiYAorfSAjIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisKKworIyBmdW5jX3N0cmlwbmFtZSBwcmVmaXggc3VmZml4IG5hbWUKKyMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCisjIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCisjIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCisjIGZ1bmNfc3RyaXBfc3VmZml4IHByZWZpeCBuYW1lCitmdW5jX3N0cmlwbmFtZSAoKQoreworICAgIGNhc2UgJHsyfSBpbgorICAgICAgLiopIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJVxcXFwkezJ9XCQlJSJgOzsKKyAgICAgICopICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyUkezJ9XCQlJSJgOzsKKyAgICBlc2FjCit9ICMgZnVuY19zdHJpcG5hbWUgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisKKworIyBUaGVzZSBTRUQgc2NyaXB0cyBwcmVzdXBwb3NlIGFuIGFic29sdXRlIHBhdGggd2l0aCBhIHRyYWlsaW5nIHNsYXNoLgorcGF0aGNhcj0ncyxeL1woW14vXSpcKS4qJCxcMSwnCitwYXRoY2RyPSdzLF4vW14vXSosLCcKK3JlbW92ZWRvdHBhcnRzPSc6ZG90c2wKKwkJc0AvXC4vQC9AZworCQl0IGRvdHNsCisJCXMsL1wuJCwvLCcKK2NvbGxhcHNlc2xhc2hlcz0nc0AvXHsxLFx9QC9AZycKK2ZpbmFsc2xhc2g9J3MsLyokLC8sJworCisjIGZ1bmNfbm9ybWFsX2Fic3BhdGggUEFUSAorIyBSZW1vdmUgZG91YmxlZC11cCBhbmQgdHJhaWxpbmcgc2xhc2hlcywgIi4iIHBhdGggY29tcG9uZW50cywKKyMgYW5kIGNhbmNlbCBvdXQgYW55ICIuLiIgcGF0aCBjb21wb25lbnRzIGluIFBBVEggYWZ0ZXIgbWFraW5nCisjIGl0IGFuIGFic29sdXRlIHBhdGguCisjICAgICAgICAgICAgIHZhbHVlIHJldHVybmVkIGluICIkZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQiCitmdW5jX25vcm1hbF9hYnNwYXRoICgpCit7CisgICMgU3RhcnQgZnJvbSByb290IGRpciBhbmQgcmVhc3NlbWJsZSB0aGUgcGF0aC4KKyAgZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQ9CisgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGg9JDEKKyAgZnVuY19ub3JtYWxfYWJzcGF0aF9hbHRuYW1lc3BhY2U9CisgIGNhc2UgJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGggaW4KKyAgICAiIikKKyAgICAgICMgRW1wdHkgcGF0aCwgdGhhdCBqdXN0IG1lYW5zICRjd2QuCisgICAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLycgImBwd2RgIgorICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorICAgICAgcmV0dXJuCisgICAgOzsKKyAgICAjIFRoZSBuZXh0IHRocmVlIGVudHJpZXMgYXJlIHVzZWQgdG8gc3BvdCBhIHJ1biBvZiBwcmVjaXNlbHkKKyAgICAjIHR3byBsZWFkaW5nIHNsYXNoZXMgd2l0aG91dCB1c2luZyBuZWdhdGVkIGNoYXJhY3RlciBjbGFzc2VzOworICAgICMgd2UgdGFrZSBhZHZhbnRhZ2Ugb2YgY2FzZSdzIGZpcnN0LW1hdGNoIGJlaGF2aW91ci4KKyAgICAvLy8qKQorICAgICAgIyBVbnVzdWFsIGZvcm0gb2YgYWJzb2x1dGUgcGF0aCwgZG8gbm90aGluZy4KKyAgICA7OworICAgIC8vKikKKyAgICAgICMgTm90IG5lY2Vzc2FyaWx5IGFuIG9yZGluYXJ5IHBhdGg7IFBPU0lYIHJlc2VydmVzIGxlYWRpbmcgJy8vJworICAgICAgIyBhbmQgZm9yIGV4YW1wbGUgQ3lnd2luIHVzZXMgaXQgdG8gYWNjZXNzIHJlbW90ZSBmaWxlIHNoYXJlcworICAgICAgIyBvdmVyIENJRlMvU01CLCBzbyB3ZSBjb25zZXJ2ZSBhIGxlYWRpbmcgZG91YmxlIHNsYXNoIGlmIGZvdW5kLgorICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF9hbHRuYW1lc3BhY2U9LworICAgIDs7CisgICAgLyopCisgICAgICAjIEFic29sdXRlIHBhdGgsIGRvIG5vdGhpbmcuCisgICAgOzsKKyAgICAqKQorICAgICAgIyBSZWxhdGl2ZSBwYXRoLCBwcmVwZW5kICRjd2QuCisgICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoPWBwd2RgLyRmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoCisgICAgOzsKKyAgZXNhYworICAjIENhbmNlbCBvdXQgYWxsIHRoZSBzaW1wbGUgc3R1ZmYgdG8gc2F2ZSBpdGVyYXRpb25zLiAgV2UgYWxzbyB3YW50CisgICMgdGhlIHBhdGggdG8gZW5kIHdpdGggYSBzbGFzaCBmb3IgZWFzZSBvZiBwYXJzaW5nLCBzbyBtYWtlIHN1cmUKKyAgIyB0aGVyZSBpcyBvbmUgKGFuZCBvbmx5IG9uZSkgaGVyZS4KKyAgZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aD1gJEVDSE8gIiRmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoIiB8ICRTRUQgXAorICAgICAgICAtZSAiJHJlbW92ZWRvdHBhcnRzIiAtZSAiJGNvbGxhcHNlc2xhc2hlcyIgLWUgIiRmaW5hbHNsYXNoImAKKyAgd2hpbGUgOjsgZG8KKyAgICAjIFByb2Nlc3NlZCBpdCBhbGwgeWV0PworICAgIGlmIHRlc3QgIiRmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoIiA9IC8gOyB0aGVuCisgICAgICAjIElmIHdlIGFzY2VuZGVkIHRvIHRoZSByb290IHVzaW5nICIuLiIgdGhlIHJlc3VsdCBtYXkgYmUgZW1wdHkgbm93LgorICAgICAgaWYgdGVzdCAteiAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0IiA7IHRoZW4KKyAgICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQ9LworICAgICAgZmkKKyAgICAgIGJyZWFrCisgICAgZmkKKyAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3Rjb21wb25lbnQ9YCRFQ0hPICIkZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aCIgfCAkU0VEIFwKKyAgICAgICAgLWUgIiRwYXRoY2FyImAKKyAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoPWAkRUNITyAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGgiIHwgJFNFRCBcCisgICAgICAgIC1lICIkcGF0aGNkciJgCisgICAgIyBGaWd1cmUgb3V0IHdoYXQgdG8gZG8gd2l0aCBpdAorICAgIGNhc2UgJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdGNvbXBvbmVudCBpbgorICAgICAgIiIpCisgICAgICAgICMgVHJhaWxpbmcgZW1wdHkgcGF0aCBjb21wb25lbnQsIGlnbm9yZSBpdC4KKyAgICAgIDs7CisgICAgICAuLikKKyAgICAgICAgIyBQYXJlbnQgZGlyOyBzdHJpcCBsYXN0IGFzc2VtYmxlZCBjb21wb25lbnQgZnJvbSByZXN1bHQuCisgICAgICAgIGZ1bmNfZGlybmFtZSAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0IgorICAgICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdD0kZnVuY19kaXJuYW1lX3Jlc3VsdAorICAgICAgOzsKKyAgICAgICopCisgICAgICAgICMgQWN0dWFsIHBhdGggY29tcG9uZW50LCBhcHBlbmQgaXQuCisgICAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0PSRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdC8kZnVuY19ub3JtYWxfYWJzcGF0aF90Y29tcG9uZW50CisgICAgICA7OworICAgIGVzYWMKKyAgZG9uZQorICAjIFJlc3RvcmUgbGVhZGluZyBkb3VibGUtc2xhc2ggaWYgb25lIHdhcyBmb3VuZCBvbiBlbnRyeS4KKyAgZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQ9JGZ1bmNfbm9ybWFsX2Fic3BhdGhfYWx0bmFtZXNwYWNlJGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0Cit9CisKKyMgZnVuY19yZWxhdGl2ZV9wYXRoIFNSQ0RJUiBEU1RESVIKKyMgZ2VuZXJhdGVzIGEgcmVsYXRpdmUgcGF0aCBmcm9tIFNSQ0RJUiB0byBEU1RESVIsIHdpdGggYSB0cmFpbGluZworIyBzbGFzaCBpZiBub24tZW1wdHksIHN1aXRhYmxlIGZvciBpbW1lZGlhdGVseSBhcHBlbmRpbmcgYSBmaWxlbmFtZQorIyB3aXRob3V0IG5lZWRpbmcgdG8gYXBwZW5kIGEgc2VwYXJhdG9yLgorIyAgICAgICAgICAgICB2YWx1ZSByZXR1cm5lZCBpbiAiJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQiCitmdW5jX3JlbGF0aXZlX3BhdGggKCkKK3sKKyAgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0KKyAgZnVuY19ub3JtYWxfYWJzcGF0aCAiJDEiCisgIGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyPSRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdAorICBmdW5jX25vcm1hbF9hYnNwYXRoICIkMiIKKyAgZnVuY19yZWxhdGl2ZV9wYXRoX3RiaW5kaXI9JGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0CisKKyAgIyBBc2NlbmQgdGhlIHRyZWUgc3RhcnRpbmcgZnJvbSBsaWJkaXIKKyAgd2hpbGUgOjsgZG8KKyAgICAjIGNoZWNrIGlmIHdlIGhhdmUgZm91bmQgYSBwcmVmaXggb2YgYmluZGlyCisgICAgY2FzZSAkZnVuY19yZWxhdGl2ZV9wYXRoX3RiaW5kaXIgaW4KKyAgICAgICRmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpcikKKyAgICAgICAgIyBmb3VuZCBhbiBleGFjdCBtYXRjaAorICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfdGNhbmNlbGxlZD0KKyAgICAgICAgYnJlYWsKKyAgICAgICAgOzsKKyAgICAgICRmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpciopCisgICAgICAgICMgZm91bmQgYSBtYXRjaGluZyBwcmVmaXgKKyAgICAgICAgZnVuY19zdHJpcG5hbWUgIiRmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpciIgJycgIiRmdW5jX3JlbGF0aXZlX3BhdGhfdGJpbmRpciIKKyAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3RjYW5jZWxsZWQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorICAgICAgICBpZiB0ZXN0IC16ICIkZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdCI7IHRoZW4KKyAgICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PS4KKyAgICAgICAgZmkKKyAgICAgICAgYnJlYWsKKyAgICAgICAgOzsKKyAgICAgICopCisgICAgICAgIGZ1bmNfZGlybmFtZSAkZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXIKKyAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXI9JHtmdW5jX2Rpcm5hbWVfcmVzdWx0fQorICAgICAgICBpZiB0ZXN0ICJ4JGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyIiA9IHggOyB0aGVuCisgICAgICAgICAgIyBIYXZlIHRvIGRlc2NlbmQgYWxsIHRoZSB3YXkgdG8gdGhlIHJvb3QhCisgICAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0uLi8kZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdAorICAgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF90Y2FuY2VsbGVkPSRmdW5jX3JlbGF0aXZlX3BhdGhfdGJpbmRpcgorICAgICAgICAgIGJyZWFrCisgICAgICAgIGZpCisgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9Li4vJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQKKyAgICAgICAgOzsKKyAgICBlc2FjCisgIGRvbmUKKworICAjIE5vdyBjYWxjdWxhdGUgcGF0aDsgdGFrZSBjYXJlIHRvIGF2b2lkIGRvdWJsaW5nLXVwIHNsYXNoZXMuCisgIGZ1bmNfc3RyaXBuYW1lICcnICcvJyAiJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQiCisgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorICBmdW5jX3N0cmlwbmFtZSAnLycgJy8nICIkZnVuY19yZWxhdGl2ZV9wYXRoX3RjYW5jZWxsZWQiCisgIGlmIHRlc3QgIngkZnVuY19zdHJpcG5hbWVfcmVzdWx0IiAhPSB4IDsgdGhlbgorICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9JHtmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0fS8ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdH0KKyAgZmkKKworICAjIE5vcm1hbGlzYXRpb24uIElmIGJpbmRpciBpcyBsaWJkaXIsIHJldHVybiBlbXB0eSBzdHJpbmcsCisgICMgZWxzZSByZWxhdGl2ZSBwYXRoIGVuZGluZyB3aXRoIGEgc2xhc2g7IGVpdGhlciB3YXksIHRhcmdldAorICAjIGZpbGUgbmFtZSBjYW4gYmUgZGlyZWN0bHkgYXBwZW5kZWQuCisgIGlmIHRlc3QgISAteiAiJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQiOyB0aGVuCisgICAgZnVuY19zdHJpcG5hbWUgJy4vJyAnJyAiJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQvIgorICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorICBmaQorfQorCisjIFRoZSBuYW1lIG9mIHRoaXMgcHJvZ3JhbToKK2Z1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgIiRwcm9ncGF0aCIKK3Byb2duYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorCisjIE1ha2Ugc3VyZSB3ZSBoYXZlIGFuIGFic29sdXRlIHBhdGggZm9yIHJlZXhlY3V0aW9uOgorY2FzZSAkcHJvZ3BhdGggaW4KKyAgW1xcL10qfFtBLVphLXpdOlxcKikgOzsKKyAgKltcXC9dKikKKyAgICAgcHJvZ2Rpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAorICAgICBwcm9nZGlyPWBjZCAiJHByb2dkaXIiICYmIHB3ZGAKKyAgICAgcHJvZ3BhdGg9IiRwcm9nZGlyLyRwcm9nbmFtZSIKKyAgICAgOzsKKyAgKikKKyAgICAgc2F2ZV9JRlM9IiRJRlMiCisgICAgIElGUz0ke1BBVEhfU0VQQVJBVE9SLTp9CisgICAgIGZvciBwcm9nZGlyIGluICRQQVRIOyBkbworICAgICAgIElGUz0iJHNhdmVfSUZTIgorICAgICAgIHRlc3QgLXggIiRwcm9nZGlyLyRwcm9nbmFtZSIgJiYgYnJlYWsKKyAgICAgZG9uZQorICAgICBJRlM9IiRzYXZlX0lGUyIKKyAgICAgdGVzdCAtbiAiJHByb2dkaXIiIHx8IHByb2dkaXI9YHB3ZGAKKyAgICAgcHJvZ3BhdGg9IiRwcm9nZGlyLyRwcm9nbmFtZSIKKyAgICAgOzsKK2VzYWMKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgaGVscHMgdXMgZG8gcm9idXN0IHF1b3RpbmcuICBJdCBiYWNrc2xhc2hpZmllcworIyBtZXRhY2hhcmFjdGVycyB0aGF0IGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluIGRvdWJsZS1xdW90ZWQgc3RyaW5ncy4KK1hzZWQ9IiR7U0VEfSInIC1lIDFzL15YLy8nCitzZWRfcXVvdGVfc3Vic3Q9J3MvXChbYCIkXFxdXCkvXFxcMS9nJworCisjIFNhbWUgYXMgYWJvdmUsIGJ1dCBkbyBub3QgcXVvdGUgdmFyaWFibGUgcmVmZXJlbmNlcy4KK2RvdWJsZV9xdW90ZV9zdWJzdD0ncy9cKFsiYFxcXVwpL1xcXDEvZycKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgdHVybnMgYSBzdHJpbmcgaW50byBhIHJlZ2V4IG1hdGNoaW5nIGZvciB0aGUKKyMgc3RyaW5nIGxpdGVyYWxseS4KK3NlZF9tYWtlX2xpdGVyYWxfcmVnZXg9J3MsW10uW14kXFwqXC9dLFxcJixnJworCisjIFNlZCBzdWJzdGl0dXRpb24gdGhhdCBjb252ZXJ0cyBhIHczMiBmaWxlIG5hbWUgb3IgcGF0aAorIyB3aGljaCBjb250YWlucyBmb3J3YXJkIHNsYXNoZXMsIGludG8gb25lIHRoYXQgY29udGFpbnMKKyMgKGVzY2FwZWQpIGJhY2tzbGFzaGVzLiAgQSB2ZXJ5IG5haXZlIGltcGxlbWVudGF0aW9uLgorbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeT0nc3xcXFxcKnxcXHxnO3N8L3xcXHxnO3N8XFx8XFxcXHxnJworCisjIFJlLWBcJyBwYXJhbWV0ZXIgZXhwYW5zaW9ucyBpbiBvdXRwdXQgb2YgZG91YmxlX3F1b3RlX3N1YnN0IHRoYXQgd2VyZQorIyBgXCctZWQgaW4gaW5wdXQgdG8gdGhlIHNhbWUuICBJZiBhbiBvZGQgbnVtYmVyIG9mIGBcJyBwcmVjZWRlZCBhICckJworIyBpbiBpbnB1dCB0byBkb3VibGVfcXVvdGVfc3Vic3QsIHRoYXQgJyQnIHdhcyBwcm90ZWN0ZWQgZnJvbSBleHBhbnNpb24uCisjIFNpbmNlIGVhY2ggaW5wdXQgYFwnIGlzIG5vdyB0d28gYFwncywgbG9vayBmb3IgYW55IG51bWJlciBvZiBydW5zIG9mCisjIGZvdXIgYFwncyBmb2xsb3dlZCBieSB0d28gYFwncyBhbmQgdGhlbiBhICckJy4gIGBcJyB0aGF0ICckJy4KK2JzPSdcXCcKK2JzMj0nXFxcXCcKK2JzND0nXFxcXFxcXFwnCitkb2xsYXI9J1wkJworc2VkX2RvdWJsZV9iYWNrc2xhc2g9IlwKKyAgcy8kYnM0LyZcXAorL2cKKyAgcy9eJGJzMiRkb2xsYXIvJGJzJi8KKyAgcy9cXChbXiRic11cXCkkYnMyJGRvbGxhci9cXDEkYnMyJGJzJGRvbGxhci9nCisgIHMvXG4vL2ciCisKKyMgU3RhbmRhcmQgb3B0aW9uczoKK29wdF9kcnlfcnVuPWZhbHNlCitvcHRfaGVscD1mYWxzZQorb3B0X3F1aWV0PWZhbHNlCitvcHRfdmVyYm9zZT1mYWxzZQorb3B0X3dhcm5pbmc9OgorCisjIGZ1bmNfZWNobyBhcmcuLi4KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSwgYWxvbmcgd2l0aCB0aGUgY3VycmVudCBtb2RlCisjIG5hbWUgaWYgaXQgaGFzIGJlZW4gc2V0IHlldC4KK2Z1bmNfZWNobyAoKQoreworICAgICRFQ0hPICIkcHJvZ25hbWU6ICR7b3B0X21vZGUrJG9wdF9tb2RlOiB9JCoiCit9CisKKyMgZnVuY192ZXJib3NlIGFyZy4uLgorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIGluIHZlcmJvc2UgbW9kZSBvbmx5LgorZnVuY192ZXJib3NlICgpCit7CisgICAgJG9wdF92ZXJib3NlICYmIGZ1bmNfZWNobyAkezErIiRAIn0KKworICAgICMgQSBidWcgaW4gYmFzaCBoYWx0cyB0aGUgc2NyaXB0IGlmIHRoZSBsYXN0IGxpbmUgb2YgYSBmdW5jdGlvbgorICAgICMgZmFpbHMgd2hlbiBzZXQgLWUgaXMgaW4gZm9yY2UsIHNvIHdlIG5lZWQgYW5vdGhlciBjb21tYW5kIHRvCisgICAgIyB3b3JrIGFyb3VuZCB0aGF0OgorICAgIDoKK30KKworIyBmdW5jX2VjaG9fYWxsIGFyZy4uLgorIyBJbnZva2UgJEVDSE8gd2l0aCBhbGwgYXJncywgc3BhY2Utc2VwYXJhdGVkLgorZnVuY19lY2hvX2FsbCAoKQoreworICAgICRFQ0hPICIkKiIKK30KKworIyBmdW5jX2Vycm9yIGFyZy4uLgorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLgorZnVuY19lcnJvciAoKQoreworICAgICRFQ0hPICIkcHJvZ25hbWU6ICR7b3B0X21vZGUrJG9wdF9tb2RlOiB9IiR7MSsiJEAifSAxPiYyCit9CisKKyMgZnVuY193YXJuaW5nIGFyZy4uLgorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCB3YXJuaW5nIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IuCitmdW5jX3dhcm5pbmcgKCkKK3sKKyAgICAkb3B0X3dhcm5pbmcgJiYgJEVDSE8gIiRwcm9nbmFtZTogJHtvcHRfbW9kZSskb3B0X21vZGU6IH13YXJuaW5nOiAiJHsxKyIkQCJ9IDE+JjIKKworICAgICMgYmFzaCBidWcgYWdhaW46CisgICAgOgorfQorCisjIGZ1bmNfZmF0YWxfZXJyb3IgYXJnLi4uCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IsIGFuZCBleGl0LgorZnVuY19mYXRhbF9lcnJvciAoKQoreworICAgIGZ1bmNfZXJyb3IgJHsxKyIkQCJ9CisgICAgZXhpdCAkRVhJVF9GQUlMVVJFCit9CisKKyMgZnVuY19mYXRhbF9oZWxwIGFyZy4uLgorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLCBmb2xsb3dlZCBieQorIyBhIGhlbHAgaGludCwgYW5kIGV4aXQuCitmdW5jX2ZhdGFsX2hlbHAgKCkKK3sKKyAgICBmdW5jX2Vycm9yICR7MSsiJEAifQorICAgIGZ1bmNfZmF0YWxfZXJyb3IgIiRoZWxwIgorfQoraGVscD0iVHJ5IFxgJHByb2duYW1lIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiAgIyMgZGVmYXVsdAorCisKKyMgZnVuY19ncmVwIGV4cHJlc3Npb24gZmlsZW5hbWUKKyMgQ2hlY2sgd2hldGhlciBFWFBSRVNTSU9OIG1hdGNoZXMgYW55IGxpbmUgb2YgRklMRU5BTUUsIHdpdGhvdXQgb3V0cHV0LgorZnVuY19ncmVwICgpCit7CisgICAgJEdSRVAgIiQxIiAiJDIiID4vZGV2L251bGwgMj4mMQorfQorCisKKyMgZnVuY19ta2Rpcl9wIGRpcmVjdG9yeS1wYXRoCisjIE1ha2Ugc3VyZSB0aGUgZW50aXJlIHBhdGggdG8gRElSRUNUT1JZLVBBVEggaXMgYXZhaWxhYmxlLgorZnVuY19ta2Rpcl9wICgpCit7CisgICAgbXlfZGlyZWN0b3J5X3BhdGg9IiQxIgorICAgIG15X2Rpcl9saXN0PQorCisgICAgaWYgdGVzdCAtbiAiJG15X2RpcmVjdG9yeV9wYXRoIiAmJiB0ZXN0ICIkb3B0X2RyeV9ydW4iICE9ICI6IjsgdGhlbgorCisgICAgICAjIFByb3RlY3QgZGlyZWN0b3J5IG5hbWVzIHN0YXJ0aW5nIHdpdGggYC0nCisgICAgICBjYXNlICRteV9kaXJlY3RvcnlfcGF0aCBpbgorICAgICAgICAtKikgbXlfZGlyZWN0b3J5X3BhdGg9Ii4vJG15X2RpcmVjdG9yeV9wYXRoIiA7OworICAgICAgZXNhYworCisgICAgICAjIFdoaWxlIHNvbWUgcG9ydGlvbiBvZiBESVIgZG9lcyBub3QgeWV0IGV4aXN0Li4uCisgICAgICB3aGlsZSB0ZXN0ICEgLWQgIiRteV9kaXJlY3RvcnlfcGF0aCI7IGRvCisgICAgICAgICMgLi4ubWFrZSBhIGxpc3QgaW4gdG9wbW9zdCBmaXJzdCBvcmRlci4gIFVzZSBhIGNvbG9uIGRlbGltaXRlZAorCSMgbGlzdCBpbmNhc2Ugc29tZSBwb3J0aW9uIG9mIHBhdGggY29udGFpbnMgd2hpdGVzcGFjZS4KKyAgICAgICAgbXlfZGlyX2xpc3Q9IiRteV9kaXJlY3RvcnlfcGF0aDokbXlfZGlyX2xpc3QiCisKKyAgICAgICAgIyBJZiB0aGUgbGFzdCBwb3J0aW9uIGFkZGVkIGhhcyBubyBzbGFzaCBpbiBpdCwgdGhlIGxpc3QgaXMgZG9uZQorICAgICAgICBjYXNlICRteV9kaXJlY3RvcnlfcGF0aCBpbiAqLyopIDs7ICopIGJyZWFrIDs7IGVzYWMKKworICAgICAgICAjIC4uLm90aGVyd2lzZSB0aHJvdyBhd2F5IHRoZSBjaGlsZCBkaXJlY3RvcnkgYW5kIGxvb3AKKyAgICAgICAgbXlfZGlyZWN0b3J5X3BhdGg9YCRFQ0hPICIkbXlfZGlyZWN0b3J5X3BhdGgiIHwgJFNFRCAtZSAiJGRpcm5hbWUiYAorICAgICAgZG9uZQorICAgICAgbXlfZGlyX2xpc3Q9YCRFQ0hPICIkbXlfZGlyX2xpc3QiIHwgJFNFRCAncyw6KiQsLCdgCisKKyAgICAgIHNhdmVfbWtkaXJfcF9JRlM9IiRJRlMiOyBJRlM9JzonCisgICAgICBmb3IgbXlfZGlyIGluICRteV9kaXJfbGlzdDsgZG8KKwlJRlM9IiRzYXZlX21rZGlyX3BfSUZTIgorICAgICAgICAjIG1rZGlyIGNhbiBmYWlsIHdpdGggYSBgRmlsZSBleGlzdCcgZXJyb3IgaWYgdHdvIHByb2Nlc3NlcworICAgICAgICAjIHRyeSB0byBjcmVhdGUgb25lIG9mIHRoZSBkaXJlY3RvcmllcyBjb25jdXJyZW50bHkuICBEb24ndAorICAgICAgICAjIHN0b3AgaW4gdGhhdCBjYXNlIQorICAgICAgICAkTUtESVIgIiRteV9kaXIiIDI+L2Rldi9udWxsIHx8IDoKKyAgICAgIGRvbmUKKyAgICAgIElGUz0iJHNhdmVfbWtkaXJfcF9JRlMiCisKKyAgICAgICMgQmFpbCBvdXQgaWYgd2UgKG9yIHNvbWUgb3RoZXIgcHJvY2VzcykgZmFpbGVkIHRvIGNyZWF0ZSBhIGRpcmVjdG9yeS4KKyAgICAgIHRlc3QgLWQgIiRteV9kaXJlY3RvcnlfcGF0aCIgfHwgXAorICAgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJGYWlsZWQgdG8gY3JlYXRlIFxgJDEnIgorICAgIGZpCit9CisKKworIyBmdW5jX21rdGVtcGRpciBbc3RyaW5nXQorIyBNYWtlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSB0aGF0IHdvbid0IGNsYXNoIHdpdGggb3RoZXIgcnVubmluZworIyBsaWJ0b29sIHByb2Nlc3NlcywgYW5kIGF2b2lkcyByYWNlIGNvbmRpdGlvbnMgaWYgcG9zc2libGUuICBJZgorIyBnaXZlbiwgU1RSSU5HIGlzIHRoZSBiYXNlbmFtZSBmb3IgdGhhdCBkaXJlY3RvcnkuCitmdW5jX21rdGVtcGRpciAoKQoreworICAgIG15X3RlbXBsYXRlPSIke1RNUERJUi0vdG1wfS8kezEtJHByb2duYW1lfSIKKworICAgIGlmIHRlc3QgIiRvcHRfZHJ5X3J1biIgPSAiOiI7IHRoZW4KKyAgICAgICMgUmV0dXJuIGEgZGlyZWN0b3J5IG5hbWUsIGJ1dCBkb24ndCBjcmVhdGUgaXQgaW4gZHJ5LXJ1biBtb2RlCisgICAgICBteV90bXBkaXI9IiR7bXlfdGVtcGxhdGV9LSQkIgorICAgIGVsc2UKKworICAgICAgIyBJZiBta3RlbXAgd29ya3MsIHVzZSB0aGF0IGZpcnN0IGFuZCBmb3JlbW9zdAorICAgICAgbXlfdG1wZGlyPWBta3RlbXAgLWQgIiR7bXlfdGVtcGxhdGV9LVhYWFhYWFhYIiAyPi9kZXYvbnVsbGAKKworICAgICAgaWYgdGVzdCAhIC1kICIkbXlfdG1wZGlyIjsgdGhlbgorICAgICAgICAjIEZhaWxpbmcgdGhhdCwgYXQgbGVhc3QgdHJ5IGFuZCB1c2UgJFJBTkRPTSB0byBhdm9pZCBhIHJhY2UKKyAgICAgICAgbXlfdG1wZGlyPSIke215X3RlbXBsYXRlfS0ke1JBTkRPTS0wfSQkIgorCisgICAgICAgIHNhdmVfbWt0ZW1wZGlyX3VtYXNrPWB1bWFza2AKKyAgICAgICAgdW1hc2sgMDA3NworICAgICAgICAkTUtESVIgIiRteV90bXBkaXIiCisgICAgICAgIHVtYXNrICRzYXZlX21rdGVtcGRpcl91bWFzaworICAgICAgZmkKKworICAgICAgIyBJZiB3ZSdyZSBub3QgaW4gZHJ5LXJ1biBtb2RlLCBib21iIG91dCBvbiBmYWlsdXJlCisgICAgICB0ZXN0IC1kICIkbXlfdG1wZGlyIiB8fCBcCisgICAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBjcmVhdGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSBcYCRteV90bXBkaXInIgorICAgIGZpCisKKyAgICAkRUNITyAiJG15X3RtcGRpciIKK30KKworCisjIGZ1bmNfcXVvdGVfZm9yX2V2YWwgYXJnCisjIEFlc3RoZXRpY2FsbHkgcXVvdGUgQVJHIHRvIGJlIGV2YWxlZCBsYXRlci4KKyMgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHR3byB2YWx1ZXM6IEZVTkNfUVVPVEVfRk9SX0VWQUxfUkVTVUxUCisjIGlzIGRvdWJsZS1xdW90ZWQsIHN1aXRhYmxlIGZvciBhIHN1YnNlcXVlbnQgZXZhbCwgd2hlcmVhcworIyBGVU5DX1FVT1RFX0ZPUl9FVkFMX1VOUVVPVEVEX1JFU1VMVCBoYXMgbWVyZWx5IGFsbCBjaGFyYWN0ZXJzCisjIHdoaWNoIGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluIGRvdWJsZSBxdW90ZXMgYmFja3NsYXNoaWZpZWQuCitmdW5jX3F1b3RlX2Zvcl9ldmFsICgpCit7CisgICAgY2FzZSAkMSBpbgorICAgICAgKltcXFxgXCJcJF0qKQorCWZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0PWAkRUNITyAiJDEiIHwgJFNFRCAiJHNlZF9xdW90ZV9zdWJzdCJgIDs7CisgICAgICAqKQorICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdD0iJDEiIDs7CisgICAgZXNhYworCisgICAgY2FzZSAkZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHQgaW4KKyAgICAgICMgRG91YmxlLXF1b3RlIGFyZ3MgY29udGFpbmluZyBzaGVsbCBtZXRhY2hhcmFjdGVycyB0byBkZWxheQorICAgICAgIyB3b3JkIHNwbGl0dGluZywgY29tbWFuZCBzdWJzdGl0dXRpb24gYW5kIGFuZCB2YXJpYWJsZQorICAgICAgIyBleHBhbnNpb24gZm9yIGEgc3Vic2VxdWVudCBldmFsLgorICAgICAgIyBNYW55IEJvdXJuZSBzaGVsbHMgY2Fubm90IGhhbmRsZSBjbG9zZSBicmFja2V0cyBjb3JyZWN0bHkKKyAgICAgICMgaW4gc2NhbiBzZXRzLCBzbyB3ZSBzcGVjaWZ5IGl0IHNlcGFyYXRlbHkuCisgICAgICAqW1xbXH5cI1xeXCZcKlwoXClce1x9XHxcO1w8XD5cP1wnXCBcCV0qfCpdKnwiIikKKyAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQ9IlwiJGZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0XCIiCisgICAgICAgIDs7CisgICAgICAqKQorICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdD0iJGZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0IgorICAgIGVzYWMKK30KKworCisjIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCBhcmcKKyMgQWVzdGhldGljYWxseSBxdW90ZSBBUkcgdG8gYmUgZXZhbGVkIGxhdGVyOyBzYW1lIGFzIGFib3ZlLAorIyBidXQgZG8gbm90IHF1b3RlIHZhcmlhYmxlIHJlZmVyZW5jZXMuCitmdW5jX3F1b3RlX2Zvcl9leHBhbmQgKCkKK3sKKyAgICBjYXNlICQxIGluCisgICAgICAqW1xcXGBcIl0qKQorCW15X2FyZz1gJEVDSE8gIiQxIiB8ICRTRUQgXAorCSAgICAtZSAiJGRvdWJsZV9xdW90ZV9zdWJzdCIgLWUgIiRzZWRfZG91YmxlX2JhY2tzbGFzaCJgIDs7CisgICAgICAqKQorICAgICAgICBteV9hcmc9IiQxIiA7OworICAgIGVzYWMKKworICAgIGNhc2UgJG15X2FyZyBpbgorICAgICAgIyBEb3VibGUtcXVvdGUgYXJncyBjb250YWluaW5nIHNoZWxsIG1ldGFjaGFyYWN0ZXJzIHRvIGRlbGF5CisgICAgICAjIHdvcmQgc3BsaXR0aW5nIGFuZCBjb21tYW5kIHN1YnN0aXR1dGlvbiBmb3IgYSBzdWJzZXF1ZW50IGV2YWwuCisgICAgICAjIE1hbnkgQm91cm5lIHNoZWxscyBjYW5ub3QgaGFuZGxlIGNsb3NlIGJyYWNrZXRzIGNvcnJlY3RseQorICAgICAgIyBpbiBzY2FuIHNldHMsIHNvIHdlIHNwZWNpZnkgaXQgc2VwYXJhdGVseS4KKyAgICAgICpbXFtcflwjXF5cJlwqXChcKVx7XH1cfFw7XDxcPlw/XCdcIFwJXSp8Kl0qfCIiKQorICAgICAgICBteV9hcmc9IlwiJG15X2FyZ1wiIgorICAgICAgICA7OworICAgIGVzYWMKKworICAgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQ9IiRteV9hcmciCit9CisKKworIyBmdW5jX3Nob3dfZXZhbCBjbWQgW2ZhaWxfZXhwXQorIyBVbmxlc3Mgb3B0X3NpbGVudCBpcyB0cnVlLCB0aGVuIG91dHB1dCBDTUQuICBUaGVuLCBpZiBvcHRfZHJ5cnVuIGlzCisjIG5vdCB0cnVlLCBldmFsdWF0ZSBDTUQuICBJZiB0aGUgZXZhbHVhdGlvbiBvZiBDTUQgZmFpbHMsIGFuZCBGQUlMX0VYUAorIyBpcyBnaXZlbiwgdGhlbiBldmFsdWF0ZSBpdC4KK2Z1bmNfc2hvd19ldmFsICgpCit7CisgICAgbXlfY21kPSIkMSIKKyAgICBteV9mYWlsX2V4cD0iJHsyLTp9IgorCisgICAgJHtvcHRfc2lsZW50LWZhbHNlfSB8fCB7CisgICAgICBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgIiRteV9jbWQiCisgICAgICBldmFsICJmdW5jX2VjaG8gJGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQiCisgICAgfQorCisgICAgaWYgJHtvcHRfZHJ5X3J1bi1mYWxzZX07IHRoZW4gOjsgZWxzZQorICAgICAgZXZhbCAiJG15X2NtZCIKKyAgICAgIG15X3N0YXR1cz0kPworICAgICAgaWYgdGVzdCAiJG15X3N0YXR1cyIgLWVxIDA7IHRoZW4gOjsgZWxzZQorCWV2YWwgIihleGl0ICRteV9zdGF0dXMpOyAkbXlfZmFpbF9leHAiCisgICAgICBmaQorICAgIGZpCit9CisKKworIyBmdW5jX3Nob3dfZXZhbF9sb2NhbGUgY21kIFtmYWlsX2V4cF0KKyMgVW5sZXNzIG9wdF9zaWxlbnQgaXMgdHJ1ZSwgdGhlbiBvdXRwdXQgQ01ELiAgVGhlbiwgaWYgb3B0X2RyeXJ1biBpcworIyBub3QgdHJ1ZSwgZXZhbHVhdGUgQ01ELiAgSWYgdGhlIGV2YWx1YXRpb24gb2YgQ01EIGZhaWxzLCBhbmQgRkFJTF9FWFAKKyMgaXMgZ2l2ZW4sIHRoZW4gZXZhbHVhdGUgaXQuICBVc2UgdGhlIHNhdmVkIGxvY2FsZSBmb3IgZXZhbHVhdGlvbi4KK2Z1bmNfc2hvd19ldmFsX2xvY2FsZSAoKQoreworICAgIG15X2NtZD0iJDEiCisgICAgbXlfZmFpbF9leHA9IiR7Mi06fSIKKworICAgICR7b3B0X3NpbGVudC1mYWxzZX0gfHwgeworICAgICAgZnVuY19xdW90ZV9mb3JfZXhwYW5kICIkbXlfY21kIgorICAgICAgZXZhbCAiZnVuY19lY2hvICRmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0IgorICAgIH0KKworICAgIGlmICR7b3B0X2RyeV9ydW4tZmFsc2V9OyB0aGVuIDo7IGVsc2UKKyAgICAgIGV2YWwgIiRsdF91c2VyX2xvY2FsZQorCSAgICAkbXlfY21kIgorICAgICAgbXlfc3RhdHVzPSQ/CisgICAgICBldmFsICIkbHRfc2FmZV9sb2NhbGUiCisgICAgICBpZiB0ZXN0ICIkbXlfc3RhdHVzIiAtZXEgMDsgdGhlbiA6OyBlbHNlCisJZXZhbCAiKGV4aXQgJG15X3N0YXR1cyk7ICRteV9mYWlsX2V4cCIKKyAgICAgIGZpCisgICAgZmkKK30KKworIyBmdW5jX3RyX3NoCisjIFR1cm4gJDEgaW50byBhIHN0cmluZyBzdWl0YWJsZSBmb3IgYSBzaGVsbCB2YXJpYWJsZSBuYW1lLgorIyBSZXN1bHQgaXMgc3RvcmVkIGluICRmdW5jX3RyX3NoX3Jlc3VsdC4gIEFsbCBjaGFyYWN0ZXJzCisjIG5vdCBpbiB0aGUgc2V0IGEtekEtWjAtOV8gYXJlIHJlcGxhY2VkIHdpdGggJ18nLiBGdXJ0aGVyLAorIyBpZiAkMSBiZWdpbnMgd2l0aCBhIGRpZ2l0LCBhICdfJyBpcyBwcmVwZW5kZWQgYXMgd2VsbC4KK2Z1bmNfdHJfc2ggKCkKK3sKKyAgY2FzZSAkMSBpbgorICBbMC05XSogfCAqWyFhLXpBLVowLTlfXSopCisgICAgZnVuY190cl9zaF9yZXN1bHQ9YCRFQ0hPICIkMSIgfCAkU0VEICdzL15cKFswLTldXCkvX1wxLzsgcy9bXmEtekEtWjAtOV9dL18vZydgCisgICAgOzsKKyAgKiApCisgICAgZnVuY190cl9zaF9yZXN1bHQ9JDEKKyAgICA7OworICBlc2FjCit9CisKKworIyBmdW5jX3ZlcnNpb24KKyMgRWNobyB2ZXJzaW9uIG1lc3NhZ2UgdG8gc3RhbmRhcmQgb3V0cHV0IGFuZCBleGl0LgorZnVuY192ZXJzaW9uICgpCit7CisgICAgJG9wdF9kZWJ1ZworCisgICAgJFNFRCAtbiAnLyhDKS8hYiBnbworCTptb3JlCisJL1wuLyF7CisJICBOCisJICBzL1xuIyAvIC8KKwkgIGIgbW9yZQorCX0KKwk6Z28KKwkvXiMgJyRQUk9HUkFNJyAoR05VIC8sLyMgd2FycmFudHk7IC8geworICAgICAgICBzL14jIC8vCisJcy9eIyAqJC8vCisgICAgICAgIHMvXCgoQylcKVsgMC05LC1dKlwoIFsxLTldWzAtOV0qXCkvXDFcMi8KKyAgICAgICAgcAorICAgICB9JyA8ICIkcHJvZ3BhdGgiCisgICAgIGV4aXQgJD8KK30KKworIyBmdW5jX3VzYWdlCisjIEVjaG8gc2hvcnQgaGVscCBtZXNzYWdlIHRvIHN0YW5kYXJkIG91dHB1dCBhbmQgZXhpdC4KK2Z1bmNfdXNhZ2UgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisKKyAgICAkU0VEIC1uICcvXiMgVXNhZ2U6LywvXiMgICouKi0taGVscC8geworICAgICAgICBzL14jIC8vCisJcy9eIyAqJC8vCisJcy9cJHByb2duYW1lLyckcHJvZ25hbWUnLworCXAKKyAgICB9JyA8ICIkcHJvZ3BhdGgiCisgICAgZWNobworICAgICRFQ0hPICJydW4gXGAkcHJvZ25hbWUgLS1oZWxwIHwgbW9yZScgZm9yIGZ1bGwgdXNhZ2UiCisgICAgZXhpdCAkPworfQorCisjIGZ1bmNfaGVscCBbTk9FWElUXQorIyBFY2hvIGxvbmcgaGVscCBtZXNzYWdlIHRvIHN0YW5kYXJkIG91dHB1dCBhbmQgZXhpdCwKKyMgdW5sZXNzICdub2V4aXQnIGlzIHBhc3NlZCBhcyBhcmd1bWVudC4KK2Z1bmNfaGVscCAoKQoreworICAgICRvcHRfZGVidWcKKworICAgICRTRUQgLW4gJy9eIyBVc2FnZTovLC8jIFJlcG9ydCBidWdzIHRvLyB7CisJOnByaW50CisgICAgICAgIHMvXiMgLy8KKwlzL14jICokLy8KKwlzKlwkcHJvZ25hbWUqJyRwcm9nbmFtZScqCisJcypcJGhvc3QqJyIkaG9zdCInKgorCXMqXCRTSEVMTConIiRTSEVMTCInKgorCXMqXCRMVENDKiciJExUQ0MiJyoKKwlzKlwkTFRDRkxBR1MqJyIkTFRDRkxBR1MiJyoKKwlzKlwkTEQqJyIkTEQiJyoKKwlzL1wkd2l0aF9nbnVfbGQvJyIkd2l0aF9nbnVfbGQiJy8KKwlzL1wkYXV0b21ha2VfdmVyc2lvbi8nImAoJHtBVVRPTUFLRS1hdXRvbWFrZX0gLS12ZXJzaW9uKSAyPi9kZXYvbnVsbCB8JFNFRCAxcWAiJy8KKwlzL1wkYXV0b2NvbmZfdmVyc2lvbi8nImAoJHtBVVRPQ09ORi1hdXRvY29uZn0gLS12ZXJzaW9uKSAyPi9kZXYvbnVsbCB8JFNFRCAxcWAiJy8KKwlwCisJZAorICAgICB9CisgICAgIC9eIyAuKiBob21lIHBhZ2U6L2IgcHJpbnQKKyAgICAgL14jIEdlbmVyYWwgaGVscCB1c2luZy9iIHByaW50CisgICAgICcgPCAiJHByb2dwYXRoIgorICAgIHJldD0kPworICAgIGlmIHRlc3QgLXogIiQxIjsgdGhlbgorICAgICAgZXhpdCAkcmV0CisgICAgZmkKK30KKworIyBmdW5jX21pc3NpbmdfYXJnIGFyZ25hbWUKKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvciBhbmQgc2V0IGdsb2JhbAorIyBleGl0X2NtZC4KK2Z1bmNfbWlzc2luZ19hcmcgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisKKyAgICBmdW5jX2Vycm9yICJtaXNzaW5nIGFyZ3VtZW50IGZvciAkMS4iCisgICAgZXhpdF9jbWQ9ZXhpdAorfQorCisKKyMgZnVuY19zcGxpdF9zaG9ydF9vcHQgc2hvcnRvcHQKKyMgU2V0IGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWUgYW5kIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyBzaGVsbAorIyB2YXJpYWJsZXMgYWZ0ZXIgc3BsaXR0aW5nIFNIT1JUT1BUIGFmdGVyIHRoZSAybmQgY2hhcmFjdGVyLgorZnVuY19zcGxpdF9zaG9ydF9vcHQgKCkKK3sKKyAgICBteV9zZWRfc2hvcnRfb3B0PScxcy9eXCguLlwpLiokL1wxLztxJworICAgIG15X3NlZF9zaG9ydF9yZXN0PScxcy9eLi5cKC4qXCkkL1wxLztxJworCisgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZT1gJEVDSE8gIiQxIiB8ICRTRUQgIiRteV9zZWRfc2hvcnRfb3B0ImAKKyAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmc9YCRFQ0hPICIkMSIgfCAkU0VEICIkbXlfc2VkX3Nob3J0X3Jlc3QiYAorfSAjIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorCisKKyMgZnVuY19zcGxpdF9sb25nX29wdCBsb25nb3B0CisjIFNldCBmdW5jX3NwbGl0X2xvbmdfb3B0X25hbWUgYW5kIGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnIHNoZWxsCisjIHZhcmlhYmxlcyBhZnRlciBzcGxpdHRpbmcgTE9OR09QVCBhdCB0aGUgYD0nIHNpZ24uCitmdW5jX3NwbGl0X2xvbmdfb3B0ICgpCit7CisgICAgbXlfc2VkX2xvbmdfb3B0PScxcy9eXCgtLVtePV0qXCk9LiovXDEvO3EnCisgICAgbXlfc2VkX2xvbmdfYXJnPScxcy9eLS1bXj1dKj0vLycKKworICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfbmFtZT1gJEVDSE8gIiQxIiB8ICRTRUQgIiRteV9zZWRfbG9uZ19vcHQiYAorICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnPWAkRUNITyAiJDEiIHwgJFNFRCAiJG15X3NlZF9sb25nX2FyZyJgCit9ICMgZnVuY19zcGxpdF9sb25nX29wdCBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKworZXhpdF9jbWQ9OgorCisKKworCisKK21hZ2ljPSIlJSVNQUdJQyB2YXJpYWJsZSUlJSIKK21hZ2ljX2V4ZT0iJSUlTUFHSUMgRVhFIHZhcmlhYmxlJSUlIgorCisjIEdsb2JhbCB2YXJpYWJsZXMuCitub25vcHQ9CitwcmVzZXJ2ZV9hcmdzPQorbG8ybz0icy9cXC5sb1wkLy4ke29iamV4dH0vIgorbzJsbz0icy9cXC4ke29iamV4dH1cJC8ubG8vIgorZXh0cmFjdGVkX2FyY2hpdmVzPQorZXh0cmFjdGVkX3NlcmlhbD0wCisKKyMgSWYgdGhpcyB2YXJpYWJsZSBpcyBzZXQgaW4gYW55IG9mIHRoZSBhY3Rpb25zLCB0aGUgY29tbWFuZCBpbiBpdAorIyB3aWxsIGJlIGV4ZWNlZCBhdCB0aGUgZW5kLiAgVGhpcyBwcmV2ZW50cyBoZXJlLWRvY3VtZW50cyBmcm9tIGJlaW5nCisjIGxlZnQgb3ZlciBieSBzaGVsbHMuCitleGVjX2NtZD0KKworIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKKyMgQXBwZW5kIFZBTFVFIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLgorZnVuY19hcHBlbmQgKCkKK3sKKyAgICBldmFsICIkezF9PVwkJHsxfVwkezJ9IgorfSAjIGZ1bmNfYXBwZW5kIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorCisjIGZ1bmNfYXBwZW5kX3F1b3RlZCB2YXIgdmFsdWUKKyMgUXVvdGUgVkFMVUUgYW5kIGFwcGVuZCB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUiwgc2VwYXJhdGVkCisjIGJ5IGEgc3BhY2UuCitmdW5jX2FwcGVuZF9xdW90ZWQgKCkKK3sKKyAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkezJ9IgorICAgIGV2YWwgIiR7MX09XCQkezF9XFwgXCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKK30gIyBmdW5jX2FwcGVuZF9xdW90ZWQgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisKKworIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgorZnVuY19hcml0aCAoKQoreworICAgIGZ1bmNfYXJpdGhfcmVzdWx0PWBleHByICIke0B9ImAKK30gIyBmdW5jX2FyaXRoIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorCisKKyMgZnVuY19sZW4gc3RyaW5nCisjIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCitmdW5jX2xlbiAoKQoreworICAgIGZ1bmNfbGVuX3Jlc3VsdD1gZXhwciAiJHsxfSIgOiAiLioiIDI+L2Rldi9udWxsIHx8IGVjaG8gJG1heF9jbWRfbGVuYAorfSAjIGZ1bmNfbGVuIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorCisKKyMgZnVuY19sbzJvIG9iamVjdAorZnVuY19sbzJvICgpCit7CisgICAgZnVuY19sbzJvX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGxvMm8iYAorfSAjIGZ1bmNfbG8ybyBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKworCisjIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQorZnVuY194Zm9ybSAoKQoreworICAgIGZ1bmNfeGZvcm1fcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICdzL1wuW14uXSokLy5sby8nYAorfSAjIGZ1bmNfeGZvcm0gbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisKKworIyBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gYXJnLi4uCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IsIGZvbGxvd2VkIGJ5CisjIGEgY29uZmlndXJhdGlvbiBmYWlsdXJlIGhpbnQsIGFuZCBleGl0LgorZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICgpCit7CisgICAgZnVuY19lcnJvciAkezErIiRAIn0KKyAgICBmdW5jX2Vycm9yICJTZWUgdGhlICRQQUNLQUdFIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorICAgIGZ1bmNfZmF0YWxfZXJyb3IgIkZhdGFsIGNvbmZpZ3VyYXRpb24gZXJyb3IuIgorfQorCisKKyMgZnVuY19jb25maWcKKyMgRGlzcGxheSB0aGUgY29uZmlndXJhdGlvbiBmb3IgYWxsIHRoZSB0YWdzIGluIHRoaXMgc2NyaXB0LgorZnVuY19jb25maWcgKCkKK3sKKyAgICByZV9iZWdpbmNmPSdeIyAjIyMgQkVHSU4gTElCVE9PTCcKKyAgICByZV9lbmRjZj0nXiMgIyMjIEVORCBMSUJUT09MJworCisgICAgIyBEZWZhdWx0IGNvbmZpZ3VyYXRpb24uCisgICAgJFNFRCAiMSwvJHJlX2JlZ2luY2YgQ09ORklHL2Q7LyRyZV9lbmRjZiBDT05GSUcvLFwkZCIgPCAiJHByb2dwYXRoIgorCisgICAgIyBOb3cgcHJpbnQgdGhlIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgdGFncy4KKyAgICBmb3IgdGFnbmFtZSBpbiAkdGFnbGlzdDsgZG8KKyAgICAgICRTRUQgLW4gIi8kcmVfYmVnaW5jZiBUQUcgQ09ORklHOiAkdGFnbmFtZVwkLywvJHJlX2VuZGNmIFRBRyBDT05GSUc6ICR0YWduYW1lXCQvcCIgPCAiJHByb2dwYXRoIgorICAgIGRvbmUKKworICAgIGV4aXQgJD8KK30KKworIyBmdW5jX2ZlYXR1cmVzCisjIERpc3BsYXkgdGhlIGZlYXR1cmVzIHN1cHBvcnRlZCBieSB0aGlzIHNjcmlwdC4KK2Z1bmNfZmVhdHVyZXMgKCkKK3sKKyAgICBlY2hvICJob3N0OiAkaG9zdCIKKyAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgorICAgICAgZWNobyAiZW5hYmxlIHNoYXJlZCBsaWJyYXJpZXMiCisgICAgZWxzZQorICAgICAgZWNobyAiZGlzYWJsZSBzaGFyZWQgbGlicmFyaWVzIgorICAgIGZpCisgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgorICAgICAgZWNobyAiZW5hYmxlIHN0YXRpYyBsaWJyYXJpZXMiCisgICAgZWxzZQorICAgICAgZWNobyAiZGlzYWJsZSBzdGF0aWMgbGlicmFyaWVzIgorICAgIGZpCisKKyAgICBleGl0ICQ/Cit9CisKKyMgZnVuY19lbmFibGVfdGFnIHRhZ25hbWUKKyMgVmVyaWZ5IHRoYXQgVEFHTkFNRSBpcyB2YWxpZCwgYW5kIGVpdGhlciBmbGFnIGFuIGVycm9yIGFuZCBleGl0LCBvcgorIyBlbmFibGUgdGhlIFRBR05BTUUgdGFnLiAgV2UgYWxzbyBhZGQgVEFHTkFNRSB0byB0aGUgZ2xvYmFsICR0YWdsaXN0CisjIHZhcmlhYmxlIGhlcmUuCitmdW5jX2VuYWJsZV90YWcgKCkKK3sKKyAgIyBHbG9iYWwgdmFyaWFibGU6CisgIHRhZ25hbWU9IiQxIgorCisgIHJlX2JlZ2luY2Y9Il4jICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICR0YWduYW1lXCQiCisgIHJlX2VuZGNmPSJeIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWVcJCIKKyAgc2VkX2V4dHJhY3RjZj0iLyRyZV9iZWdpbmNmLywvJHJlX2VuZGNmL3AiCisKKyAgIyBWYWxpZGF0ZSB0YWduYW1lLgorICBjYXNlICR0YWduYW1lIGluCisgICAgKlshLV9BLVphLXowLTksL10qKQorICAgICAgZnVuY19mYXRhbF9lcnJvciAiaW52YWxpZCB0YWcgbmFtZTogJHRhZ25hbWUiCisgICAgICA7OworICBlc2FjCisKKyAgIyBEb24ndCB0ZXN0IGZvciB0aGUgImRlZmF1bHQiIEMgdGFnLCBhcyB3ZSBrbm93IGl0J3MKKyAgIyB0aGVyZSBidXQgbm90IHNwZWNpYWxseSBtYXJrZWQuCisgIGNhc2UgJHRhZ25hbWUgaW4KKyAgICBDQykgOzsKKyAgICAqKQorICAgICAgaWYgJEdSRVAgIiRyZV9iZWdpbmNmIiAiJHByb2dwYXRoIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwl0YWdsaXN0PSIkdGFnbGlzdCAkdGFnbmFtZSIKKworCSMgRXZhbHVhdGUgdGhlIGNvbmZpZ3VyYXRpb24uICBCZSBjYXJlZnVsIHRvIHF1b3RlIHRoZSBwYXRoCisJIyBhbmQgdGhlIHNlZCBzY3JpcHQsIHRvIGF2b2lkIHNwbGl0dGluZyBvbiB3aGl0ZXNwYWNlLCBidXQKKwkjIGFsc28gZG9uJ3QgdXNlIG5vbi1wb3J0YWJsZSBxdW90ZXMgd2l0aGluIGJhY2txdW90ZXMgd2l0aGluCisJIyBxdW90ZXMgd2UgaGF2ZSB0byBkbyBpdCBpbiAyIHN0ZXBzOgorCWV4dHJhY3RlZGNmPWAkU0VEIC1uIC1lICIkc2VkX2V4dHJhY3RjZiIgPCAiJHByb2dwYXRoImAKKwlldmFsICIkZXh0cmFjdGVkY2YiCisgICAgICBlbHNlCisJZnVuY19lcnJvciAiaWdub3JpbmcgdW5rbm93biB0YWcgJHRhZ25hbWUiCisgICAgICBmaQorICAgICAgOzsKKyAgZXNhYworfQorCisjIGZ1bmNfY2hlY2tfdmVyc2lvbl9tYXRjaAorIyBFbnN1cmUgdGhhdCB3ZSBhcmUgdXNpbmcgbTQgbWFjcm9zLCBhbmQgbGlidG9vbCBzY3JpcHQgZnJvbSB0aGUgc2FtZQorIyByZWxlYXNlIG9mIGxpYnRvb2wuCitmdW5jX2NoZWNrX3ZlcnNpb25fbWF0Y2ggKCkKK3sKKyAgaWYgdGVzdCAiJHBhY2thZ2VfcmV2aXNpb24iICE9ICIkbWFjcm9fcmV2aXNpb24iOyB0aGVuCisgICAgaWYgdGVzdCAiJFZFUlNJT04iICE9ICIkbWFjcm9fdmVyc2lvbiI7IHRoZW4KKyAgICAgIGlmIHRlc3QgLXogIiRtYWNyb192ZXJzaW9uIjsgdGhlbgorICAgICAgICBjYXQgPiYyIDw8X0xUX0VPRgorJHByb2duYW1lOiBWZXJzaW9uIG1pc21hdGNoIGVycm9yLiAgVGhpcyBpcyAkUEFDS0FHRSAkVkVSU0lPTiwgYnV0IHRoZQorJHByb2duYW1lOiBkZWZpbml0aW9uIG9mIHRoaXMgTFRfSU5JVCBjb21lcyBmcm9tIGFuIG9sZGVyIHJlbGVhc2UuCiskcHJvZ25hbWU6IFlvdSBzaG91bGQgcmVjcmVhdGUgYWNsb2NhbC5tNCB3aXRoIG1hY3JvcyBmcm9tICRQQUNLQUdFICRWRVJTSU9OCiskcHJvZ25hbWU6IGFuZCBydW4gYXV0b2NvbmYgYWdhaW4uCitfTFRfRU9GCisgICAgICBlbHNlCisgICAgICAgIGNhdCA+JjIgPDxfTFRfRU9GCiskcHJvZ25hbWU6IFZlcnNpb24gbWlzbWF0Y2ggZXJyb3IuICBUaGlzIGlzICRQQUNLQUdFICRWRVJTSU9OLCBidXQgdGhlCiskcHJvZ25hbWU6IGRlZmluaXRpb24gb2YgdGhpcyBMVF9JTklUIGNvbWVzIGZyb20gJFBBQ0tBR0UgJG1hY3JvX3ZlcnNpb24uCiskcHJvZ25hbWU6IFlvdSBzaG91bGQgcmVjcmVhdGUgYWNsb2NhbC5tNCB3aXRoIG1hY3JvcyBmcm9tICRQQUNLQUdFICRWRVJTSU9OCiskcHJvZ25hbWU6IGFuZCBydW4gYXV0b2NvbmYgYWdhaW4uCitfTFRfRU9GCisgICAgICBmaQorICAgIGVsc2UKKyAgICAgIGNhdCA+JjIgPDxfTFRfRU9GCiskcHJvZ25hbWU6IFZlcnNpb24gbWlzbWF0Y2ggZXJyb3IuICBUaGlzIGlzICRQQUNLQUdFICRWRVJTSU9OLCByZXZpc2lvbiAkcGFja2FnZV9yZXZpc2lvbiwKKyRwcm9nbmFtZTogYnV0IHRoZSBkZWZpbml0aW9uIG9mIHRoaXMgTFRfSU5JVCBjb21lcyBmcm9tIHJldmlzaW9uICRtYWNyb19yZXZpc2lvbi4KKyRwcm9nbmFtZTogWW91IHNob3VsZCByZWNyZWF0ZSBhY2xvY2FsLm00IHdpdGggbWFjcm9zIGZyb20gcmV2aXNpb24gJHBhY2thZ2VfcmV2aXNpb24KKyRwcm9nbmFtZTogb2YgJFBBQ0tBR0UgJFZFUlNJT04gYW5kIHJ1biBhdXRvY29uZiBhZ2Fpbi4KK19MVF9FT0YKKyAgICBmaQorCisgICAgZXhpdCAkRVhJVF9NSVNNQVRDSAorICBmaQorfQorCisKKyMgU2hvcnRoYW5kIGZvciAtLW1vZGU9Zm9vLCBvbmx5IHZhbGlkIGFzIHRoZSBmaXJzdCBhcmd1bWVudAorY2FzZSAkMSBpbgorY2xlYW58Y2xlYXxjbGV8Y2wpCisgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGNsZWFuICR7MSsiJEAifTsgc2hpZnQKKyAgOzsKK2NvbXBpbGV8Y29tcGlsfGNvbXBpfGNvbXB8Y29tfGNvfGMpCisgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGNvbXBpbGUgJHsxKyIkQCJ9OyBzaGlmdAorICA7OworZXhlY3V0ZXxleGVjdXR8ZXhlY3V8ZXhlY3xleGV8ZXh8ZSkKKyAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgZXhlY3V0ZSAkezErIiRAIn07IHNoaWZ0CisgIDs7CitmaW5pc2h8ZmluaXN8ZmluaXxmaW58Zml8ZikKKyAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgZmluaXNoICR7MSsiJEAifTsgc2hpZnQKKyAgOzsKK2luc3RhbGx8aW5zdGFsfGluc3RhfGluc3R8aW5zfGlufGkpCisgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGluc3RhbGwgJHsxKyIkQCJ9OyBzaGlmdAorICA7OworbGlua3xsaW58bGl8bCkKKyAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgbGluayAkezErIiRAIn07IHNoaWZ0CisgIDs7Cit1bmluc3RhbGx8dW5pbnN0YWx8dW5pbnN0YXx1bmluc3R8dW5pbnN8dW5pbnx1bml8dW58dSkKKyAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgdW5pbnN0YWxsICR7MSsiJEAifTsgc2hpZnQKKyAgOzsKK2VzYWMKKworCisKKyMgT3B0aW9uIGRlZmF1bHRzOgorb3B0X2RlYnVnPToKK29wdF9kcnlfcnVuPWZhbHNlCitvcHRfY29uZmlnPWZhbHNlCitvcHRfcHJlc2VydmVfZHVwX2RlcHM9ZmFsc2UKK29wdF9mZWF0dXJlcz1mYWxzZQorb3B0X2ZpbmlzaD1mYWxzZQorb3B0X2hlbHA9ZmFsc2UKK29wdF9oZWxwX2FsbD1mYWxzZQorb3B0X3NpbGVudD06CitvcHRfd2FybmluZz06CitvcHRfdmVyYm9zZT06CitvcHRfc2lsZW50PWZhbHNlCitvcHRfdmVyYm9zZT1mYWxzZQorCisKKyMgUGFyc2Ugb3B0aW9ucyBvbmNlLCB0aG9yb3VnaGx5LiAgVGhpcyBjb21lcyBhcyBzb29uIGFzIHBvc3NpYmxlIGluIHRoZQorIyBzY3JpcHQgdG8gbWFrZSB0aGluZ3MgbGlrZSBgLS12ZXJzaW9uJyBoYXBwZW4gYXMgcXVpY2tseSBhcyB3ZSBjYW4uCit7CisgICMgdGhpcyBqdXN0IGVhc2VzIGV4aXQgaGFuZGxpbmcKKyAgd2hpbGUgdGVzdCAkIyAtZ3QgMDsgZG8KKyAgICBvcHQ9IiQxIgorICAgIHNoaWZ0CisgICAgY2FzZSAkb3B0IGluCisgICAgICAtLWRlYnVnfC14KQlvcHRfZGVidWc9J3NldCAteCcKKwkJCWZ1bmNfZWNobyAiZW5hYmxpbmcgc2hlbGwgdHJhY2UgbW9kZSIKKwkJCSRvcHRfZGVidWcKKwkJCTs7CisgICAgICAtLWRyeS1ydW58LS1kcnlydW58LW4pCisJCQlvcHRfZHJ5X3J1bj06CisJCQk7OworICAgICAgLS1jb25maWcpCisJCQlvcHRfY29uZmlnPToKK2Z1bmNfY29uZmlnCisJCQk7OworICAgICAgLS1kbG9wZW58LWRsb3BlbikKKwkJCW9wdGFyZz0iJDEiCisJCQlvcHRfZGxvcGVuPSIke29wdF9kbG9wZW4rJG9wdF9kbG9wZW4KK30kb3B0YXJnIgorCQkJc2hpZnQKKwkJCTs7CisgICAgICAtLXByZXNlcnZlLWR1cC1kZXBzKQorCQkJb3B0X3ByZXNlcnZlX2R1cF9kZXBzPToKKwkJCTs7CisgICAgICAtLWZlYXR1cmVzKQorCQkJb3B0X2ZlYXR1cmVzPToKK2Z1bmNfZmVhdHVyZXMKKwkJCTs7CisgICAgICAtLWZpbmlzaCkKKwkJCW9wdF9maW5pc2g9Ogorc2V0IGR1bW15IC0tbW9kZSBmaW5pc2ggJHsxKyIkQCJ9OyBzaGlmdAorCQkJOzsKKyAgICAgIC0taGVscCkKKwkJCW9wdF9oZWxwPToKKwkJCTs7CisgICAgICAtLWhlbHAtYWxsKQorCQkJb3B0X2hlbHBfYWxsPToKK29wdF9oZWxwPSc6IGhlbHAtYWxsJworCQkJOzsKKyAgICAgIC0tbW9kZSkKKwkJCXRlc3QgJCMgPSAwICYmIGZ1bmNfbWlzc2luZ19hcmcgJG9wdCAmJiBicmVhaworCQkJb3B0YXJnPSIkMSIKKwkJCW9wdF9tb2RlPSIkb3B0YXJnIgorY2FzZSAkb3B0YXJnIGluCisgICMgVmFsaWQgbW9kZSBhcmd1bWVudHM6CisgIGNsZWFufGNvbXBpbGV8ZXhlY3V0ZXxmaW5pc2h8aW5zdGFsbHxsaW5rfHJlbGlua3x1bmluc3RhbGwpIDs7CisKKyAgIyBDYXRjaCBhbnl0aGluZyBlbHNlIGFzIGFuIGVycm9yCisgICopIGZ1bmNfZXJyb3IgImludmFsaWQgYXJndW1lbnQgZm9yICRvcHQiCisgICAgIGV4aXRfY21kPWV4aXQKKyAgICAgYnJlYWsKKyAgICAgOzsKK2VzYWMKKwkJCXNoaWZ0CisJCQk7OworICAgICAgLS1uby1zaWxlbnR8LS1uby1xdWlldCkKKwkJCW9wdF9zaWxlbnQ9ZmFsc2UKK2Z1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkb3B0IgorCQkJOzsKKyAgICAgIC0tbm8td2FybmluZ3wtLW5vLXdhcm4pCisJCQlvcHRfd2FybmluZz1mYWxzZQorZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRvcHQiCisJCQk7OworICAgICAgLS1uby12ZXJib3NlKQorCQkJb3B0X3ZlcmJvc2U9ZmFsc2UKK2Z1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkb3B0IgorCQkJOzsKKyAgICAgIC0tc2lsZW50fC0tcXVpZXQpCisJCQlvcHRfc2lsZW50PToKK2Z1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkb3B0IgorICAgICAgICBvcHRfdmVyYm9zZT1mYWxzZQorCQkJOzsKKyAgICAgIC0tdmVyYm9zZXwtdikKKwkJCW9wdF92ZXJib3NlPToKK2Z1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkb3B0Igorb3B0X3NpbGVudD1mYWxzZQorCQkJOzsKKyAgICAgIC0tdGFnKQorCQkJdGVzdCAkIyA9IDAgJiYgZnVuY19taXNzaW5nX2FyZyAkb3B0ICYmIGJyZWFrCisJCQlvcHRhcmc9IiQxIgorCQkJb3B0X3RhZz0iJG9wdGFyZyIKK2Z1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkb3B0ICRvcHRhcmciCitmdW5jX2VuYWJsZV90YWcgIiRvcHRhcmciCisJCQlzaGlmdAorCQkJOzsKKworICAgICAgLVw/fC1oKQkJZnVuY191c2FnZQkJCQk7OworICAgICAgLS1oZWxwKQkJZnVuY19oZWxwCQkJCTs7CisgICAgICAtLXZlcnNpb24pCWZ1bmNfdmVyc2lvbgkJCQk7OworCisgICAgICAjIFNlcGFyYXRlIG9wdGFyZ3MgdG8gbG9uZyBvcHRpb25zOgorICAgICAgLS0qPSopCisJCQlmdW5jX3NwbGl0X2xvbmdfb3B0ICIkb3B0IgorCQkJc2V0IGR1bW15ICIkZnVuY19zcGxpdF9sb25nX29wdF9uYW1lIiAiJGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnIiAkezErIiRAIn0KKwkJCXNoaWZ0CisJCQk7OworCisgICAgICAjIFNlcGFyYXRlIG5vbi1hcmd1bWVudCBzaG9ydCBvcHRpb25zOgorICAgICAgLVw/KnwtaCp8LW4qfC12KikKKwkJCWZ1bmNfc3BsaXRfc2hvcnRfb3B0ICIkb3B0IgorCQkJc2V0IGR1bW15ICIkZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZSIgIi0kZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIiAkezErIiRAIn0KKwkJCXNoaWZ0CisJCQk7OworCisgICAgICAtLSkJCWJyZWFrCQkJCQk7OworICAgICAgLSopCQlmdW5jX2ZhdGFsX2hlbHAgInVucmVjb2duaXplZCBvcHRpb24gXGAkb3B0JyIgOzsKKyAgICAgICopCQlzZXQgZHVtbXkgIiRvcHQiICR7MSsiJEAifTsJc2hpZnQ7IGJyZWFrICA7OworICAgIGVzYWMKKyAgZG9uZQorCisgICMgVmFsaWRhdGUgb3B0aW9uczoKKworICAjIHNhdmUgZmlyc3Qgbm9uLW9wdGlvbiBhcmd1bWVudAorICBpZiB0ZXN0ICIkIyIgLWd0IDA7IHRoZW4KKyAgICBub25vcHQ9IiRvcHQiCisgICAgc2hpZnQKKyAgZmkKKworICAjIHByZXNlcnZlIC0tZGVidWcKKyAgdGVzdCAiJG9wdF9kZWJ1ZyIgPSA6IHx8IGZ1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAtLWRlYnVnIgorCisgIGNhc2UgJGhvc3QgaW4KKyAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqcHczMiogfCAqY2VnY2MqKQorICAgICAgIyBkb24ndCBlbGltaW5hdGUgZHVwbGljYXRpb25zIGluICRwb3N0ZGVwcyBhbmQgJHByZWRlcHMKKyAgICAgIG9wdF9kdXBsaWNhdGVfY29tcGlsZXJfZ2VuZXJhdGVkX2RlcHM9OgorICAgICAgOzsKKyAgICAqKQorICAgICAgb3B0X2R1cGxpY2F0ZV9jb21waWxlcl9nZW5lcmF0ZWRfZGVwcz0kb3B0X3ByZXNlcnZlX2R1cF9kZXBzCisgICAgICA7OworICBlc2FjCisKKyAgJG9wdF9oZWxwIHx8IHsKKyAgICAjIFNhbml0eSBjaGVja3MgZmlyc3Q6CisgICAgZnVuY19jaGVja192ZXJzaW9uX21hdGNoCisKKyAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXMgJiYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiAhPSB5ZXM7IHRoZW4KKyAgICAgIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAibm90IGNvbmZpZ3VyZWQgdG8gYnVpbGQgYW55IGtpbmQgb2YgbGlicmFyeSIKKyAgICBmaQorCisgICAgIyBEYXJ3aW4gc3Vja3MKKyAgICBldmFsIHN0ZF9zaHJleHQ9XCIkc2hyZXh0X2NtZHNcIgorCisgICAgIyBPbmx5IGV4ZWN1dGUgbW9kZSBpcyBhbGxvd2VkIHRvIGhhdmUgLWRsb3BlbiBmbGFncy4KKyAgICBpZiB0ZXN0IC1uICIkb3B0X2Rsb3BlbiIgJiYgdGVzdCAiJG9wdF9tb2RlIiAhPSBleGVjdXRlOyB0aGVuCisgICAgICBmdW5jX2Vycm9yICJ1bnJlY29nbml6ZWQgb3B0aW9uIFxgLWRsb3BlbiciCisgICAgICAkRUNITyAiJGhlbHAiIDE+JjIKKyAgICAgIGV4aXQgJEVYSVRfRkFJTFVSRQorICAgIGZpCisKKyAgICAjIENoYW5nZSB0aGUgaGVscCBtZXNzYWdlIHRvIGEgbW9kZS1zcGVjaWZpYyBvbmUuCisgICAgZ2VuZXJpY19oZWxwPSIkaGVscCIKKyAgICBoZWxwPSJUcnkgXGAkcHJvZ25hbWUgLS1oZWxwIC0tbW9kZT0kb3B0X21vZGUnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKyAgfQorCisKKyAgIyBCYWlsIGlmIHRoZSBvcHRpb25zIHdlcmUgc2NyZXdlZAorICAkZXhpdF9jbWQgJEVYSVRfRkFJTFVSRQorfQorCisKKworCisjIyAtLS0tLS0tLS0tLSAjIworIyMgICAgTWFpbi4gICAgIyMKKyMjIC0tLS0tLS0tLS0tICMjCisKKyMgZnVuY19sYWxpYl9wIGZpbGUKKyMgVHJ1ZSBpZmYgRklMRSBpcyBhIGxpYnRvb2wgYC5sYScgbGlicmFyeSBvciBgLmxvJyBvYmplY3QgZmlsZS4KKyMgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGEgYmFzaWMgc2FuaXR5IGNoZWNrOyBpdCB3aWxsIGhhcmRseSBmbHVzaCBvdXQKKyMgZGV0ZXJtaW5lZCBpbXBvc3RlcnMuCitmdW5jX2xhbGliX3AgKCkKK3sKKyAgICB0ZXN0IC1mICIkMSIgJiYKKyAgICAgICRTRUQgLWUgNHEgIiQxIiAyPi9kZXYvbnVsbCBcCisgICAgICAgIHwgJEdSRVAgIl4jIEdlbmVyYXRlZCBieSAuKiRQQUNLQUdFIiA+IC9kZXYvbnVsbCAyPiYxCit9CisKKyMgZnVuY19sYWxpYl91bnNhZmVfcCBmaWxlCisjIFRydWUgaWZmIEZJTEUgaXMgYSBsaWJ0b29sIGAubGEnIGxpYnJhcnkgb3IgYC5sbycgb2JqZWN0IGZpbGUuCisjIFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyB0aGUgc2FtZSBjaGVjayBhcyBmdW5jX2xhbGliX3Agd2l0aG91dAorIyByZXNvcnRpbmcgdG8gZXh0ZXJuYWwgcHJvZ3JhbXMuICBUbyB0aGlzIGVuZCwgaXQgcmVkaXJlY3RzIHN0ZGluIGFuZAorIyBjbG9zZXMgaXQgYWZ0ZXJ3YXJkcywgd2l0aG91dCBzYXZpbmcgdGhlIG9yaWdpbmFsIGZpbGUgZGVzY3JpcHRvci4KKyMgQXMgYSBzYWZldHkgbWVhc3VyZSwgdXNlIGl0IG9ubHkgd2hlcmUgYSBuZWdhdGl2ZSByZXN1bHQgd291bGQgYmUKKyMgZmF0YWwgYW55d2F5LiAgV29ya3MgaWYgYGZpbGUnIGRvZXMgbm90IGV4aXN0LgorZnVuY19sYWxpYl91bnNhZmVfcCAoKQoreworICAgIGxhbGliX3A9bm8KKyAgICBpZiB0ZXN0IC1mICIkMSIgJiYgdGVzdCAtciAiJDEiICYmIGV4ZWMgNTwmMCA8IiQxIjsgdGhlbgorCWZvciBsYWxpYl9wX2wgaW4gMSAyIDMgNAorCWRvCisJICAgIHJlYWQgbGFsaWJfcF9saW5lCisJICAgIGNhc2UgIiRsYWxpYl9wX2xpbmUiIGluCisJCVwjXCBHZW5lcmF0ZWRcIGJ5XCAqJFBBQ0tBR0UqICkgbGFsaWJfcD15ZXM7IGJyZWFrOzsKKwkgICAgZXNhYworCWRvbmUKKwlleGVjIDA8JjUgNTwmLQorICAgIGZpCisgICAgdGVzdCAiJGxhbGliX3AiID0geWVzCit9CisKKyMgZnVuY19sdHdyYXBwZXJfc2NyaXB0X3AgZmlsZQorIyBUcnVlIGlmZiBGSUxFIGlzIGEgbGlidG9vbCB3cmFwcGVyIHNjcmlwdAorIyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYSBiYXNpYyBzYW5pdHkgY2hlY2s7IGl0IHdpbGwgaGFyZGx5IGZsdXNoIG91dAorIyBkZXRlcm1pbmVkIGltcG9zdGVycy4KK2Z1bmNfbHR3cmFwcGVyX3NjcmlwdF9wICgpCit7CisgICAgZnVuY19sYWxpYl9wICIkMSIKK30KKworIyBmdW5jX2x0d3JhcHBlcl9leGVjdXRhYmxlX3AgZmlsZQorIyBUcnVlIGlmZiBGSUxFIGlzIGEgbGlidG9vbCB3cmFwcGVyIGV4ZWN1dGFibGUKKyMgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGEgYmFzaWMgc2FuaXR5IGNoZWNrOyBpdCB3aWxsIGhhcmRseSBmbHVzaCBvdXQKKyMgZGV0ZXJtaW5lZCBpbXBvc3RlcnMuCitmdW5jX2x0d3JhcHBlcl9leGVjdXRhYmxlX3AgKCkKK3sKKyAgICBmdW5jX2x0d3JhcHBlcl9leGVjX3N1ZmZpeD0KKyAgICBjYXNlICQxIGluCisgICAgKi5leGUpIDs7CisgICAgKikgZnVuY19sdHdyYXBwZXJfZXhlY19zdWZmaXg9LmV4ZSA7OworICAgIGVzYWMKKyAgICAkR1JFUCAiJG1hZ2ljX2V4ZSIgIiQxJGZ1bmNfbHR3cmFwcGVyX2V4ZWNfc3VmZml4IiA+L2Rldi9udWxsIDI+JjEKK30KKworIyBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lIGZpbGUKKyMgQXNzdW1lcyBmaWxlIGlzIGFuIGx0d3JhcHBlcl9leGVjdXRhYmxlCisjIHVzZXMgJGZpbGUgdG8gZGV0ZXJtaW5lIHRoZSBhcHByb3ByaWF0ZSBmaWxlbmFtZSBmb3IgYQorIyB0ZW1wb3JhcnkgbHR3cmFwcGVyX3NjcmlwdC4KK2Z1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgKCkKK3sKKyAgICBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkMSIgIiIgIi4iCisgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisgICAgZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0LyRvYmpkaXIvJHtmdW5jX3N0cmlwbmFtZV9yZXN1bHR9X2x0c2h3cmFwcGVyIgorfQorCisjIGZ1bmNfbHR3cmFwcGVyX3AgZmlsZQorIyBUcnVlIGlmZiBGSUxFIGlzIGEgbGlidG9vbCB3cmFwcGVyIHNjcmlwdCBvciB3cmFwcGVyIGV4ZWN1dGFibGUKKyMgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGEgYmFzaWMgc2FuaXR5IGNoZWNrOyBpdCB3aWxsIGhhcmRseSBmbHVzaCBvdXQKKyMgZGV0ZXJtaW5lZCBpbXBvc3RlcnMuCitmdW5jX2x0d3JhcHBlcl9wICgpCit7CisgICAgZnVuY19sdHdyYXBwZXJfc2NyaXB0X3AgIiQxIiB8fCBmdW5jX2x0d3JhcHBlcl9leGVjdXRhYmxlX3AgIiQxIgorfQorCisKKyMgZnVuY19leGVjdXRlX2NtZHMgY29tbWFuZHMgZmFpbF9jbWQKKyMgRXhlY3V0ZSB0aWxkZS1kZWxpbWl0ZWQgQ09NTUFORFMuCisjIElmIEZBSUxfQ01EIGlzIGdpdmVuLCBldmFsIHRoYXQgdXBvbiBmYWlsdXJlLgorIyBGQUlMX0NNRCBtYXkgcmVhZC1hY2Nlc3MgdGhlIGN1cnJlbnQgY29tbWFuZCBpbiB2YXJpYWJsZSBDTUQhCitmdW5jX2V4ZWN1dGVfY21kcyAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBzYXZlX2lmcz0kSUZTOyBJRlM9J34nCisgICAgZm9yIGNtZCBpbiAkMTsgZG8KKyAgICAgIElGUz0kc2F2ZV9pZnMKKyAgICAgIGV2YWwgY21kPVwiJGNtZFwiCisgICAgICBmdW5jX3Nob3dfZXZhbCAiJGNtZCIgIiR7Mi06fSIKKyAgICBkb25lCisgICAgSUZTPSRzYXZlX2lmcworfQorCisKKyMgZnVuY19zb3VyY2UgZmlsZQorIyBTb3VyY2UgRklMRSwgYWRkaW5nIGRpcmVjdG9yeSBjb21wb25lbnQgaWYgbmVjZXNzYXJ5LgorIyBOb3RlIHRoYXQgaXQgaXMgbm90IG5lY2Vzc2FyeSBvbiBjeWd3aW4vbWluZ3cgdG8gYXBwZW5kIGEgZG90IHRvCisjIEZJTEUgZXZlbiBpZiBib3RoIEZJTEUgYW5kIEZJTEUuZXhlIGV4aXN0OiBhdXRvbWF0aWMtYXBwZW5kLS5leGUKKyMgYmVoYXZpb3IgaGFwcGVucyBvbmx5IGZvciBleGVjKDMpLCBub3QgZm9yIG9wZW4oMikhICBBbHNvLCBzb3VyY2luZworIyBgRklMRS4nIGRvZXMgbm90IHdvcmsgb24gY3lnd2luIG1hbmFnZWQgbW91bnRzLgorZnVuY19zb3VyY2UgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgY2FzZSAkMSBpbgorICAgICovKiB8ICpcXCopCS4gIiQxIiA7OworICAgICopCQkuICIuLyQxIiA7OworICAgIGVzYWMKK30KKworCisjIGZ1bmNfcmVzb2x2ZV9zeXNyb290IFBBVEgKKyMgUmVwbGFjZSBhIGxlYWRpbmcgPSBpbiBQQVRIIHdpdGggYSBzeXNyb290LiAgU3RvcmUgdGhlIHJlc3VsdCBpbnRvCisjIGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAorZnVuY19yZXNvbHZlX3N5c3Jvb3QgKCkKK3sKKyAgZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0PSQxCisgIGNhc2UgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCBpbgorICA9KikKKyAgICBmdW5jX3N0cmlwbmFtZSAnPScgJycgIiRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCisgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0PSRsdF9zeXNyb290JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorICAgIDs7CisgIGVzYWMKK30KKworIyBmdW5jX3JlcGxhY2Vfc3lzcm9vdCBQQVRICisjIElmIFBBVEggYmVnaW5zIHdpdGggdGhlIHN5c3Jvb3QsIHJlcGxhY2UgaXQgd2l0aCA9IGFuZAorIyBzdG9yZSB0aGUgcmVzdWx0IGludG8gZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0LgorZnVuY19yZXBsYWNlX3N5c3Jvb3QgKCkKK3sKKyAgY2FzZSAiJGx0X3N5c3Jvb3Q6JDEiIGluCisgID8qOiIkbHRfc3lzcm9vdCIqKQorICAgIGZ1bmNfc3RyaXBuYW1lICIkbHRfc3lzcm9vdCIgJycgIiQxIgorICAgIGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdD0iPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisgICAgOzsKKyAgKikKKyAgICAjIEluY2x1ZGluZyBubyBzeXNyb290LgorICAgIGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdD0kMQorICAgIDs7CisgIGVzYWMKK30KKworIyBmdW5jX2luZmVyX3RhZyBhcmcKKyMgSW5mZXIgdGFnZ2VkIGNvbmZpZ3VyYXRpb24gdG8gdXNlIGlmIGFueSBhcmUgYXZhaWxhYmxlIGFuZAorIyBpZiBvbmUgd2Fzbid0IGNob3NlbiB2aWEgdGhlICItLXRhZyIgY29tbWFuZCBsaW5lIG9wdGlvbi4KKyMgT25seSBhdHRlbXB0IHRoaXMgaWYgdGhlIGNvbXBpbGVyIGluIHRoZSBiYXNlIGNvbXBpbGUKKyMgY29tbWFuZCBkb2Vzbid0IG1hdGNoIHRoZSBkZWZhdWx0IGNvbXBpbGVyLgorIyBhcmcgaXMgdXN1YWxseSBvZiB0aGUgZm9ybSAnZ2NjIC4uLicKK2Z1bmNfaW5mZXJfdGFnICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIGlmIHRlc3QgLW4gIiRhdmFpbGFibGVfdGFncyIgJiYgdGVzdCAteiAiJHRhZ25hbWUiOyB0aGVuCisgICAgICBDQ19xdW90ZWQ9CisgICAgICBmb3IgYXJnIGluICRDQzsgZG8KKwlmdW5jX2FwcGVuZF9xdW90ZWQgQ0NfcXVvdGVkICIkYXJnIgorICAgICAgZG9uZQorICAgICAgQ0NfZXhwYW5kZWQ9YGZ1bmNfZWNob19hbGwgJENDYAorICAgICAgQ0NfcXVvdGVkX2V4cGFuZGVkPWBmdW5jX2VjaG9fYWxsICRDQ19xdW90ZWRgCisgICAgICBjYXNlICRAIGluCisgICAgICAjIEJsYW5rcyBpbiB0aGUgY29tbWFuZCBtYXkgaGF2ZSBiZWVuIHN0cmlwcGVkIGJ5IHRoZSBjYWxsaW5nIHNoZWxsLAorICAgICAgIyBidXQgbm90IGZyb20gdGhlIENDIGVudmlyb25tZW50IHZhcmlhYmxlIHdoZW4gY29uZmlndXJlIHdhcyBydW4uCisgICAgICAiICRDQyAiKiB8ICIkQ0MgIiogfCAiICRDQ19leHBhbmRlZCAiKiB8ICIkQ0NfZXhwYW5kZWQgIiogfCBcCisgICAgICAiICRDQ19xdW90ZWQiKiB8ICIkQ0NfcXVvdGVkICIqIHwgIiAkQ0NfcXVvdGVkX2V4cGFuZGVkICIqIHwgIiRDQ19xdW90ZWRfZXhwYW5kZWQgIiopIDs7CisgICAgICAjIEJsYW5rcyBhdCB0aGUgc3RhcnQgb2YgJGJhc2VfY29tcGlsZSB3aWxsIGNhdXNlIHRoaXMgdG8gZmFpbAorICAgICAgIyBpZiB3ZSBkb24ndCBjaGVjayBmb3IgdGhlbSBhcyB3ZWxsLgorICAgICAgKikKKwlmb3IgeiBpbiAkYXZhaWxhYmxlX3RhZ3M7IGRvCisJICBpZiAkR1JFUCAiXiMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJHokIiA8ICIkcHJvZ3BhdGgiID4gL2Rldi9udWxsOyB0aGVuCisJICAgICMgRXZhbHVhdGUgdGhlIGNvbmZpZ3VyYXRpb24uCisJICAgIGV2YWwgImAke1NFRH0gLW4gLWUgJy9eIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAnJHonJC8sL14jICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiAnJHonJC9wJyA8ICRwcm9ncGF0aGAiCisJICAgIENDX3F1b3RlZD0KKwkgICAgZm9yIGFyZyBpbiAkQ0M7IGRvCisJICAgICAgIyBEb3VibGUtcXVvdGUgYXJncyBjb250YWluaW5nIG90aGVyIHNoZWxsIG1ldGFjaGFyYWN0ZXJzLgorCSAgICAgIGZ1bmNfYXBwZW5kX3F1b3RlZCBDQ19xdW90ZWQgIiRhcmciCisJICAgIGRvbmUKKwkgICAgQ0NfZXhwYW5kZWQ9YGZ1bmNfZWNob19hbGwgJENDYAorCSAgICBDQ19xdW90ZWRfZXhwYW5kZWQ9YGZ1bmNfZWNob19hbGwgJENDX3F1b3RlZGAKKwkgICAgY2FzZSAiJEAgIiBpbgorCSAgICAiICRDQyAiKiB8ICIkQ0MgIiogfCAiICRDQ19leHBhbmRlZCAiKiB8ICIkQ0NfZXhwYW5kZWQgIiogfCBcCisJICAgICIgJENDX3F1b3RlZCIqIHwgIiRDQ19xdW90ZWQgIiogfCAiICRDQ19xdW90ZWRfZXhwYW5kZWQgIiogfCAiJENDX3F1b3RlZF9leHBhbmRlZCAiKikKKwkgICAgICAjIFRoZSBjb21waWxlciBpbiB0aGUgYmFzZSBjb21waWxlIGNvbW1hbmQgbWF0Y2hlcworCSAgICAgICMgdGhlIG9uZSBpbiB0aGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb24uCisJICAgICAgIyBBc3N1bWUgdGhpcyBpcyB0aGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb24gd2Ugd2FudC4KKwkgICAgICB0YWduYW1lPSR6CisJICAgICAgYnJlYWsKKwkgICAgICA7OworCSAgICBlc2FjCisJICBmaQorCWRvbmUKKwkjIElmICR0YWduYW1lIHN0aWxsIGlzbid0IHNldCwgdGhlbiBubyB0YWdnZWQgY29uZmlndXJhdGlvbgorCSMgd2FzIGZvdW5kIGFuZCBsZXQgdGhlIHVzZXIga25vdyB0aGF0IHRoZSAiLS10YWciIGNvbW1hbmQKKwkjIGxpbmUgb3B0aW9uIG11c3QgYmUgdXNlZC4KKwlpZiB0ZXN0IC16ICIkdGFnbmFtZSI7IHRoZW4KKwkgIGZ1bmNfZWNobyAidW5hYmxlIHRvIGluZmVyIHRhZ2dlZCBjb25maWd1cmF0aW9uIgorCSAgZnVuY19mYXRhbF9lcnJvciAic3BlY2lmeSBhIHRhZyB3aXRoIFxgLS10YWcnIgorIwllbHNlCisjCSAgZnVuY192ZXJib3NlICJ1c2luZyAkdGFnbmFtZSB0YWdnZWQgY29uZmlndXJhdGlvbiIKKwlmaQorCTs7CisgICAgICBlc2FjCisgICAgZmkKK30KKworCisKKyMgZnVuY193cml0ZV9saWJ0b29sX29iamVjdCBvdXRwdXRfbmFtZSBwaWNfbmFtZSBub25waWNfbmFtZQorIyBDcmVhdGUgYSBsaWJ0b29sIG9iamVjdCBmaWxlIChhbmFsb2dvdXMgdG8gYSAiLmxhIiBmaWxlKSwKKyMgYnV0IGRvbid0IGNyZWF0ZSBpdCBpZiB3ZSdyZSBkb2luZyBhIGRyeSBydW4uCitmdW5jX3dyaXRlX2xpYnRvb2xfb2JqZWN0ICgpCit7CisgICAgd3JpdGVfbGlib2JqPSR7MX0KKyAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgorICAgICAgd3JpdGVfbG9iaj1cJyR7Mn1cJworICAgIGVsc2UKKyAgICAgIHdyaXRlX2xvYmo9bm9uZQorICAgIGZpCisKKyAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzOyB0aGVuCisgICAgICB3cml0ZV9vbGRvYmo9XCckezN9XCcKKyAgICBlbHNlCisgICAgICB3cml0ZV9vbGRvYmo9bm9uZQorICAgIGZpCisKKyAgICAkb3B0X2RyeV9ydW4gfHwgeworICAgICAgY2F0ID4ke3dyaXRlX2xpYm9ian1UIDw8RU9GCisjICR3cml0ZV9saWJvYmogLSBhIGxpYnRvb2wgb2JqZWN0IGZpbGUKKyMgR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTgorIworIyBQbGVhc2UgRE8gTk9UIGRlbGV0ZSB0aGlzIGZpbGUhCisjIEl0IGlzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyB0aGUgbGlicmFyeS4KKworIyBOYW1lIG9mIHRoZSBQSUMgb2JqZWN0LgorcGljX29iamVjdD0kd3JpdGVfbG9iagorCisjIE5hbWUgb2YgdGhlIG5vbi1QSUMgb2JqZWN0Citub25fcGljX29iamVjdD0kd3JpdGVfb2xkb2JqCisKK0VPRgorICAgICAgJE1WICIke3dyaXRlX2xpYm9ian1UIiAiJHt3cml0ZV9saWJvYmp9IgorICAgIH0KK30KKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBGSUxFIE5BTUUgQU5EIFBBVEggQ09OVkVSU0lPTiBIRUxQRVIgRlVOQ1RJT05TICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMiBBUkcKKyMgSGVscGVyIGZ1bmN0aW9uIHVzZWQgYnkgZmlsZSBuYW1lIGNvbnZlcnNpb24gZnVuY3Rpb25zIHdoZW4gJGJ1aWxkIGlzICpuaXgsCisjIGFuZCAkaG9zdCBpcyBtaW5ndywgY3lnd2luLCBvciBzb21lIG90aGVyIHczMiBlbnZpcm9ubWVudC4gUmVsaWVzIG9uIGEKKyMgY29ycmVjdGx5IGNvbmZpZ3VyZWQgd2luZSBlbnZpcm9ubWVudCBhdmFpbGFibGUsIHdpdGggdGhlIHdpbmVwYXRoIHByb2dyYW0KKyMgaW4gJGJ1aWxkJ3MgJFBBVEguCisjCisjIEFSRyBpcyB0aGUgJGJ1aWxkIGZpbGUgbmFtZSB0byBiZSBjb252ZXJ0ZWQgdG8gdzMyIGZvcm1hdC4KKyMgUmVzdWx0IGlzIGF2YWlsYWJsZSBpbiAkZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQsIGFuZCB3aWxsCisjIGJlIGVtcHR5IG9uIGVycm9yIChvciB3aGVuIEFSRyBpcyBlbXB0eSkKK2Z1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdD0iJDEiCisgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorICAgICMgVW5mb3J0dW5hdGVseSwgd2luZXBhdGggZG9lcyBub3QgZXhpdCB3aXRoIGEgbm9uLXplcm8gZXJyb3IgY29kZSwgc28gd2UKKyAgICAjIGFyZSBmb3JjZWQgdG8gY2hlY2sgdGhlIGNvbnRlbnRzIG9mIHN0ZG91dC4gT24gdGhlIG90aGVyIGhhbmQsIGlmIHRoZQorICAgICMgY29tbWFuZCBpcyBub3QgZm91bmQsIHRoZSBzaGVsbCB3aWxsIHNldCBhbiBleGl0IGNvZGUgb2YgMTI3IGFuZCBwcmludAorICAgICMgKmFuIGVycm9yIG1lc3NhZ2UqIHRvIHN0ZG91dC4gU28gd2UgbXVzdCBjaGVjayBmb3IgYm90aCBlcnJvciBjb2RlIG9mCisgICAgIyB6ZXJvIEFORCBub24tZW1wdHkgc3Rkb3V0LCB3aGljaCBleHBsYWlucyB0aGUgb2RkIGNvbnN0cnVjdGlvbjoKKyAgICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3RtcD1gd2luZXBhdGggLXcgIiQxIiAyPi9kZXYvbnVsbGAKKyAgICBpZiB0ZXN0ICIkPyIgLWVxIDAgJiYgdGVzdCAtbiAiJHtmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3RtcH0iOyB0aGVuCisgICAgICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdD1gJEVDSE8gIiRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3RtcCIgfAorICAgICAgICAkU0VEIC1lICIkbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeSJgCisgICAgZWxzZQorICAgICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQ9CisgICAgZmkKKyAgZmkKK30KKyMgZW5kOiBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyCisKKworIyBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyIEFSRworIyBIZWxwZXIgZnVuY3Rpb24gdXNlZCBieSBwYXRoIGNvbnZlcnNpb24gZnVuY3Rpb25zIHdoZW4gJGJ1aWxkIGlzICpuaXgsIGFuZAorIyAkaG9zdCBpcyBtaW5ndywgY3lnd2luLCBvciBzb21lIG90aGVyIHczMiBlbnZpcm9ubWVudC4gUmVsaWVzIG9uIGEgY29ycmVjdGx5CisjIGNvbmZpZ3VyZWQgd2luZSBlbnZpcm9ubWVudCBhdmFpbGFibGUsIHdpdGggdGhlIHdpbmVwYXRoIHByb2dyYW0gaW4gJGJ1aWxkJ3MKKyMgJFBBVEguIEFzc3VtZXMgQVJHIGhhcyBubyBsZWFkaW5nIG9yIHRyYWlsaW5nIHBhdGggc2VwYXJhdG9yIGNoYXJhY3RlcnMuCisjCisjIEFSRyBpcyBwYXRoIHRvIGJlIGNvbnZlcnRlZCBmcm9tICRidWlsZCBmb3JtYXQgdG8gd2luMzIuCisjIFJlc3VsdCBpcyBhdmFpbGFibGUgaW4gJGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0LgorIyBVbmNvbnZlcnRpYmxlIGZpbGUgKGRpcmVjdG9yeSkgbmFtZXMgaW4gQVJHIGFyZSBza2lwcGVkOyBpZiBubyBkaXJlY3RvcnkgbmFtZXMKKyMgYXJlIGNvbnZlcnRpYmxlLCB0aGVuIHRoZSByZXN1bHQgbWF5IGJlIGVtcHR5LgorZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMiAoKQoreworICAkb3B0X2RlYnVnCisgICMgdW5mb3J0dW5hdGVseSwgd2luZXBhdGggZG9lc24ndCBjb252ZXJ0IHBhdGhzLCBvbmx5IGZpbGUgbmFtZXMKKyAgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQ9IiIKKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgb2xkSUZTPSRJRlMKKyAgICBJRlM9OgorICAgIGZvciBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX2YgaW4gJDE7IGRvCisgICAgICBJRlM9JG9sZElGUworICAgICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMiAiJGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfZiIKKyAgICAgIGlmIHRlc3QgLW4gIiRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdCIgOyB0aGVuCisgICAgICAgIGlmIHRlc3QgLXogIiRmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdCI7IHRoZW4KKyAgICAgICAgICBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdD0iJGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0IgorICAgICAgICBlbHNlCisgICAgICAgICAgZnVuY19hcHBlbmQgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQgIjskZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQiCisgICAgICAgIGZpCisgICAgICBmaQorICAgIGRvbmUKKyAgICBJRlM9JG9sZElGUworICBmaQorfQorIyBlbmQ6IGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzIKKworCisjIGZ1bmNfY3lncGF0aCBBUkdTLi4uCisjIFdyYXBwZXIgYXJvdW5kIGNhbGxpbmcgdGhlIGN5Z3BhdGggcHJvZ3JhbSB2aWEgTFRfQ1lHUEFUSC4gVGhpcyBpcyB1c2VkIHdoZW4KKyMgd2hlbiAoMSkgJGJ1aWxkIGlzICpuaXggYW5kIEN5Z3dpbiBpcyBob3N0ZWQgdmlhIGEgd2luZSBlbnZpcm9ubWVudDsgb3IgKDIpCisjICRidWlsZCBpcyBNU1lTIGFuZCAkaG9zdCBpcyBDeWd3aW4sIG9yICgzKSAkYnVpbGQgaXMgQ3lnd2luLiBJbiBjYXNlICgxKSBvcgorIyAoMiksIHJldHVybnMgdGhlIEN5Z3dpbiBmaWxlIG5hbWUgb3IgcGF0aCBpbiBmdW5jX2N5Z3BhdGhfcmVzdWx0IChpbnB1dAorIyBmaWxlIG5hbWUgb3IgcGF0aCBpcyBhc3N1bWVkIHRvIGJlIGluIHczMiBmb3JtYXQsIGFzIHByZXZpb3VzbHkgY29udmVydGVkCisjIGZyb20gJGJ1aWxkJ3MgKm5peCBvciBNU1lTIGZvcm1hdCkuIEluIGNhc2UgKDMpLCByZXR1cm5zIHRoZSB3MzIgZmlsZSBuYW1lCisjIG9yIHBhdGggaW4gZnVuY19jeWdwYXRoX3Jlc3VsdCAoaW5wdXQgZmlsZSBuYW1lIG9yIHBhdGggaXMgYXNzdW1lZCB0byBiZSBpbgorIyBDeWd3aW4gZm9ybWF0KS4gUmV0dXJucyBhbiBlbXB0eSBzdHJpbmcgb24gZXJyb3IuCisjCisjIEFSR1MgYXJlIHBhc3NlZCB0byBjeWdwYXRoLCB3aXRoIHRoZSBsYXN0IG9uZSBiZWluZyB0aGUgZmlsZSBuYW1lIG9yIHBhdGggdG8KKyMgYmUgY29udmVydGVkLgorIworIyBTcGVjaWZ5IHRoZSBhYnNvbHV0ZSAqbml4IChvciB3MzIpIG5hbWUgdG8gY3lncGF0aCBpbiB0aGUgTFRfQ1lHUEFUSAorIyBlbnZpcm9ubWVudCB2YXJpYWJsZTsgZG8gbm90IHB1dCBpdCBpbiAkUEFUSC4KK2Z1bmNfY3lncGF0aCAoKQoreworICAkb3B0X2RlYnVnCisgIGlmIHRlc3QgLW4gIiRMVF9DWUdQQVRIIiAmJiB0ZXN0IC1mICIkTFRfQ1lHUEFUSCI7IHRoZW4KKyAgICBmdW5jX2N5Z3BhdGhfcmVzdWx0PWAkTFRfQ1lHUEFUSCAiJEAiIDI+L2Rldi9udWxsYAorICAgIGlmIHRlc3QgIiQ/IiAtbmUgMDsgdGhlbgorICAgICAgIyBvbiBmYWlsdXJlLCBlbnN1cmUgcmVzdWx0IGlzIGVtcHR5CisgICAgICBmdW5jX2N5Z3BhdGhfcmVzdWx0PQorICAgIGZpCisgIGVsc2UKKyAgICBmdW5jX2N5Z3BhdGhfcmVzdWx0PQorICAgIGZ1bmNfZXJyb3IgIkxUX0NZR1BBVEggaXMgZW1wdHkgb3Igc3BlY2lmaWVzIG5vbi1leGlzdGVudCBmaWxlOiBcYCRMVF9DWUdQQVRIJyIKKyAgZmkKK30KKyNlbmQ6IGZ1bmNfY3lncGF0aAorCisKKyMgZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIgQVJHCisjIENvbnZlcnQgZmlsZSBuYW1lIG9yIHBhdGggQVJHIGZyb20gTVNZUyBmb3JtYXQgdG8gdzMyIGZvcm1hdC4gIFJldHVybgorIyByZXN1bHQgaW4gZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0LgorZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICAjIGF3a3dhcmQ6IGNtZCBhcHBlbmRzIHNwYWNlcyB0byByZXN1bHQKKyAgZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0PWAoIGNtZCAvL2MgZWNobyAiJDEiICkgMj4vZGV2L251bGwgfAorICAgICRTRUQgLWUgJ3MvWyBdKiQvLycgLWUgIiRsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5ImAKK30KKyNlbmQ6IGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyCisKKworIyBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayBBUkcxIEFSRzIKKyMgVmVyaWZ5IHRoYXQgQVJHMSAoYSBmaWxlIG5hbWUgaW4gJGJ1aWxkIGZvcm1hdCkgd2FzIGNvbnZlcnRlZCB0byAkaG9zdAorIyBmb3JtYXQgaW4gQVJHMi4gT3RoZXJ3aXNlLCBlbWl0IGFuIGVycm9yIG1lc3NhZ2UsIGJ1dCBjb250aW51ZSAocmVzZXR0aW5nCisjIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCB0byBBUkcxKS4KK2Z1bmNfY29udmVydF9maWxlX2NoZWNrICgpCit7CisgICRvcHRfZGVidWcKKyAgaWYgdGVzdCAteiAiJDIiICYmIHRlc3QgLW4gIiQxIiA7IHRoZW4KKyAgICBmdW5jX2Vycm9yICJDb3VsZCBub3QgZGV0ZXJtaW5lIGhvc3QgZmlsZSBuYW1lIGNvcnJlc3BvbmRpbmcgdG8iCisgICAgZnVuY19lcnJvciAiICBcYCQxJyIKKyAgICBmdW5jX2Vycm9yICJDb250aW51aW5nLCBidXQgdW5pbnN0YWxsZWQgZXhlY3V0YWJsZXMgbWF5IG5vdCB3b3JrLiIKKyAgICAjIEZhbGxiYWNrOgorICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJDEiCisgIGZpCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjaworCisKKyMgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgRlJPTV9QQVRIU0VQIFRPX1BBVEhTRVAgRlJPTV9QQVRIIFRPX1BBVEgKKyMgVmVyaWZ5IHRoYXQgRlJPTV9QQVRIIChhIHBhdGggaW4gJGJ1aWxkIGZvcm1hdCkgd2FzIGNvbnZlcnRlZCB0byAkaG9zdAorIyBmb3JtYXQgaW4gVE9fUEFUSC4gT3RoZXJ3aXNlLCBlbWl0IGFuIGVycm9yIG1lc3NhZ2UsIGJ1dCBjb250aW51ZSwgcmVzZXR0aW5nCisjIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCB0byBhIHNpbXBsaXN0aWMgZmFsbGJhY2sgdmFsdWUgKHNlZSBiZWxvdykuCitmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayAoKQoreworICAkb3B0X2RlYnVnCisgIGlmIHRlc3QgLXogIiQ0IiAmJiB0ZXN0IC1uICIkMyI7IHRoZW4KKyAgICBmdW5jX2Vycm9yICJDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBob3N0IHBhdGggY29ycmVzcG9uZGluZyB0byIKKyAgICBmdW5jX2Vycm9yICIgIFxgJDMnIgorICAgIGZ1bmNfZXJyb3IgIkNvbnRpbnVpbmcsIGJ1dCB1bmluc3RhbGxlZCBleGVjdXRhYmxlcyBtYXkgbm90IHdvcmsuIgorICAgICMgRmFsbGJhY2suICBUaGlzIGlzIGEgZGVsaWJlcmF0ZWx5IHNpbXBsaXN0aWMgImNvbnZlcnNpb24iIGFuZAorICAgICMgc2hvdWxkIG5vdCBiZSAiaW1wcm92ZWQiLiAgU2VlIGxpYnRvb2wuaW5mby4KKyAgICBpZiB0ZXN0ICJ4JDEiICE9ICJ4JDIiOyB0aGVuCisgICAgICBsdF9yZXBsYWNlX3BhdGhzZXBfY2hhcnM9InN8JDF8JDJ8ZyIKKyAgICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD1gZWNobyAiJDMiIHwKKyAgICAgICAgJFNFRCAtZSAiJGx0X3JlcGxhY2VfcGF0aHNlcF9jaGFycyJgCisgICAgZWxzZQorICAgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMyIKKyAgICBmaQorICBmaQorfQorIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sKKworCisjIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCBGUk9OVFBBVCBCQUNLUEFUIFJFUEwgT1JJRworIyBNb2RpZmllcyBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQgYnkgcHJlcGVuZGluZyBSRVBMIGlmIE9SSUcgbWF0Y2hlcyBGUk9OVFBBVAorIyBhbmQgYXBwZW5kaW5nIFJFUEwgaWYgT1JJRyBtYXRjaGVzIEJBQ0tQQVQuCitmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBjYXNlICQ0IGluCisgICQxICkgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMyRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiCisgICAgOzsKKyAgZXNhYworICBjYXNlICQ0IGluCisgICQyICkgZnVuY19hcHBlbmQgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0ICIkMyIKKyAgICA7OworICBlc2FjCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAkYnVpbGQgdG8gJGhvc3QgRklMRSBOQU1FIENPTlZFUlNJT04gRlVOQ1RJT05TICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGludm9rZWQgdmlhIGAkdG9faG9zdF9maWxlX2NtZCBBUkcnCisjCisjIEluIGVhY2ggY2FzZSwgQVJHIGlzIHRoZSBwYXRoIHRvIGJlIGNvbnZlcnRlZCBmcm9tICRidWlsZCB0byAkaG9zdCBmb3JtYXQuCisjIFJlc3VsdCB3aWxsIGJlIGF2YWlsYWJsZSBpbiAkZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorCisKKyMgZnVuY190b19ob3N0X2ZpbGUgQVJHCisjIENvbnZlcnRzIHRoZSBmaWxlIG5hbWUgQVJHIGZyb20gJGJ1aWxkIGZvcm1hdCB0byAkaG9zdCBmb3JtYXQuIFJldHVybiByZXN1bHQKKyMgaW4gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorZnVuY190b19ob3N0X2ZpbGUgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICAkdG9faG9zdF9maWxlX2NtZCAiJDEiCit9CisjIGVuZCBmdW5jX3RvX2hvc3RfZmlsZQorCisKKyMgZnVuY190b190b29sX2ZpbGUgQVJHIExBWlkKKyMgY29udmVydHMgdGhlIGZpbGUgbmFtZSBBUkcgZnJvbSAkYnVpbGQgZm9ybWF0IHRvIHRvb2xjaGFpbiBmb3JtYXQuIFJldHVybgorIyByZXN1bHQgaW4gZnVuY190b190b29sX2ZpbGVfcmVzdWx0LiAgSWYgdGhlIGNvbnZlcnNpb24gaW4gdXNlIGlzIGxpc3RlZAorIyBpbiAodGhlIGNvbW1hIHNlcGFyYXRlZCkgTEFaWSwgbm8gY29udmVyc2lvbiB0YWtlcyBwbGFjZS4KK2Z1bmNfdG9fdG9vbF9maWxlICgpCit7CisgICRvcHRfZGVidWcKKyAgY2FzZSAsJDIsIGluCisgICAgKiwiJHRvX3Rvb2xfZmlsZV9jbWQiLCopCisgICAgICBmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQ9JDEKKyAgICAgIDs7CisgICAgKikKKyAgICAgICR0b190b29sX2ZpbGVfY21kICIkMSIKKyAgICAgIGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdD0kZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0CisgICAgICA7OworICBlc2FjCit9CisjIGVuZCBmdW5jX3RvX3Rvb2xfZmlsZQorCisKKyMgZnVuY19jb252ZXJ0X2ZpbGVfbm9vcCBBUkcKKyMgQ29weSBBUkcgdG8gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorZnVuY19jb252ZXJ0X2ZpbGVfbm9vcCAoKQoreworICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiQxIgorfQorIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorCisKKyMgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIgQVJHCisjIENvbnZlcnQgZmlsZSBuYW1lIEFSRyBmcm9tIChtaW5ndykgTVNZUyB0byAobWluZ3cpIHczMiBmb3JtYXQ7IGF1dG9tYXRpYworIyBjb252ZXJzaW9uIHRvIHczMiBpcyBub3QgYXZhaWxhYmxlIGluc2lkZSB0aGUgY3dyYXBwZXIuICBSZXR1cm5zIHJlc3VsdCBpbgorIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCitmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMiAoKQoreworICAkb3B0X2RlYnVnCisgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJDEiCisgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorICAgIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyICIkMSIKKyAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiRmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMl9yZXN1bHQiCisgIGZpCisgIGZ1bmNfY29udmVydF9maWxlX2NoZWNrICIkMSIgIiRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQiCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorCisKKyMgZnVuY19jb252ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMiBBUkcKKyMgQ29udmVydCBmaWxlIG5hbWUgQVJHIGZyb20gQ3lnd2luIHRvIHczMiBmb3JtYXQuICBSZXR1cm5zIHJlc3VsdCBpbgorIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCitmdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyICgpCit7CisgICRvcHRfZGVidWcKKyAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkMSIKKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgIyBiZWNhdXNlICRidWlsZCBpcyBjeWd3aW4sIHdlIGNhbGwgInRoZSIgY3lncGF0aCBpbiAkUEFUSDsgbm8gbmVlZCB0byB1c2UKKyAgICAjIExUX0NZR1BBVEggaW4gdGhpcyBjYXNlLgorICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD1gY3lncGF0aCAtbSAiJDEiYAorICBmaQorICBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayAiJDEiICIkZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IgorfQorIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMgorCisKKyMgZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMiBBUkcKKyMgQ29udmVydCBmaWxlIG5hbWUgQVJHIGZyb20gKm5peCB0byB3MzIgZm9ybWF0LiAgUmVxdWlyZXMgYSB3aW5lIGVudmlyb25tZW50CisjIGFuZCBhIHdvcmtpbmcgd2luZXBhdGguIFJldHVybnMgcmVzdWx0IGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KK2Z1bmNfY29udmVydF9maWxlX25peF90b193MzIgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiQxIgorICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKyAgICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyICIkMSIKKyAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdCIKKyAgZmkKKyAgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgIiQxIiAiJGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCIKK30KKyMgZW5kIGZ1bmNfY29udmVydF9maWxlX25peF90b193MzIKKworCisjIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fY3lnd2luIEFSRworIyBDb252ZXJ0IGZpbGUgbmFtZSBBUkcgZnJvbSBNU1lTIHRvIEN5Z3dpbiBmb3JtYXQuICBSZXF1aXJlcyBMVF9DWUdQQVRIIHNldC4KKyMgUmV0dXJucyByZXN1bHQgaW4gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4gKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiQxIgorICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKyAgICBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiAiJDEiCisgICAgZnVuY19jeWdwYXRoIC11ICIkZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0IgorICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJGZ1bmNfY3lncGF0aF9yZXN1bHQiCisgIGZpCisgIGZ1bmNfY29udmVydF9maWxlX2NoZWNrICIkMSIgIiRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQiCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX2N5Z3dpbgorCisKKyMgZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbiBBUkcKKyMgQ29udmVydCBmaWxlIG5hbWUgQVJHIGZyb20gKm5peCB0byBDeWd3aW4gZm9ybWF0LiAgUmVxdWlyZXMgQ3lnd2luIGluc3RhbGxlZAorIyBpbiBhIHdpbmUgZW52aXJvbm1lbnQsIHdvcmtpbmcgd2luZXBhdGgsIGFuZCBMVF9DWUdQQVRIIHNldC4gIFJldHVybnMgcmVzdWx0CisjIGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KK2Z1bmNfY29udmVydF9maWxlX25peF90b19jeWd3aW4gKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiQxIgorICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKyAgICAjIGNvbnZlcnQgZnJvbSAqbml4IHRvIHczMiwgdGhlbiB1c2UgY3lncGF0aCB0byBjb252ZXJ0IGZyb20gdzMyIHRvIGN5Z3dpbi4KKyAgICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyICIkMSIKKyAgICBmdW5jX2N5Z3BhdGggLXUgIiRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdCIKKyAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiRmdW5jX2N5Z3BhdGhfcmVzdWx0IgorICBmaQorICBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayAiJDEiICIkZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IgorfQorIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbgorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAkYnVpbGQgdG8gJGhvc3QgUEFUSCBDT05WRVJTSU9OIEZVTkNUSU9OUyAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgaW52b2tlZCB2aWEgYCR0b19ob3N0X3BhdGhfY21kIEFSRycKKyMKKyMgSW4gZWFjaCBjYXNlLCBBUkcgaXMgdGhlIHBhdGggdG8gYmUgY29udmVydGVkIGZyb20gJGJ1aWxkIHRvICRob3N0IGZvcm1hdC4KKyMgVGhlIHJlc3VsdCB3aWxsIGJlIGF2YWlsYWJsZSBpbiAkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0LgorIworIyBQYXRoIHNlcGFyYXRvcnMgYXJlIGFsc28gY29udmVydGVkIGZyb20gJGJ1aWxkIGZvcm1hdCB0byAkaG9zdCBmb3JtYXQuICBJZgorIyBBUkcgYmVnaW5zIG9yIGVuZHMgd2l0aCBhIHBhdGggc2VwYXJhdG9yIGNoYXJhY3RlciwgaXQgaXMgcHJlc2VydmVkIChidXQKKyMgY29udmVydGVkIHRvICRob3N0IGZvcm1hdCkgb24gb3V0cHV0LgorIworIyBBbGwgcGF0aCBjb252ZXJzaW9uIGZ1bmN0aW9ucyBhcmUgbmFtZWQgdXNpbmcgdGhlIGZvbGxvd2luZyBjb252ZW50aW9uOgorIyAgIGZpbGUgbmFtZSBjb252ZXJzaW9uIGZ1bmN0aW9uICAgIDogZnVuY19jb252ZXJ0X2ZpbGVfWF90b19ZICgpCisjICAgcGF0aCBjb252ZXJzaW9uIGZ1bmN0aW9uICAgICAgICAgOiBmdW5jX2NvbnZlcnRfcGF0aF9YX3RvX1kgKCkKKyMgd2hlcmUsIGZvciBhbnkgZ2l2ZW4gJGJ1aWxkLyRob3N0IGNvbWJpbmF0aW9uIHRoZSAnWF90b19ZJyB2YWx1ZSBpcyB0aGUKKyMgc2FtZS4gIElmIGNvbnZlcnNpb24gZnVuY3Rpb25zIGFyZSBhZGRlZCBmb3IgbmV3ICRidWlsZC8kaG9zdCBjb21iaW5hdGlvbnMsCisjIHRoZSB0d28gbmV3IGZ1bmN0aW9ucyBtdXN0IGZvbGxvdyB0aGlzIHBhdHRlcm4sIG9yIGZ1bmNfaW5pdF90b19ob3N0X3BhdGhfY21kCisjIHdpbGwgYnJlYWsuCisKKworIyBmdW5jX2luaXRfdG9faG9zdF9wYXRoX2NtZAorIyBFbnN1cmVzIHRoYXQgZnVuY3Rpb24gInBvaW50ZXIiIHZhcmlhYmxlICR0b19ob3N0X3BhdGhfY21kIGlzIHNldCB0byB0aGUKKyMgYXBwcm9wcmlhdGUgdmFsdWUsIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiAkdG9faG9zdF9maWxlX2NtZC4KK3RvX2hvc3RfcGF0aF9jbWQ9CitmdW5jX2luaXRfdG9faG9zdF9wYXRoX2NtZCAoKQoreworICAkb3B0X2RlYnVnCisgIGlmIHRlc3QgLXogIiR0b19ob3N0X3BhdGhfY21kIjsgdGhlbgorICAgIGZ1bmNfc3RyaXBuYW1lICdmdW5jX2NvbnZlcnRfZmlsZV8nICcnICIkdG9faG9zdF9maWxlX2NtZCIKKyAgICB0b19ob3N0X3BhdGhfY21kPSJmdW5jX2NvbnZlcnRfcGF0aF8ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdH0iCisgIGZpCit9CisKKworIyBmdW5jX3RvX2hvc3RfcGF0aCBBUkcKKyMgQ29udmVydHMgdGhlIHBhdGggQVJHIGZyb20gJGJ1aWxkIGZvcm1hdCB0byAkaG9zdCBmb3JtYXQuIFJldHVybiByZXN1bHQKKyMgaW4gZnVuY190b19ob3N0X3BhdGhfcmVzdWx0LgorZnVuY190b19ob3N0X3BhdGggKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBmdW5jX2luaXRfdG9faG9zdF9wYXRoX2NtZAorICAkdG9faG9zdF9wYXRoX2NtZCAiJDEiCit9CisjIGVuZCBmdW5jX3RvX2hvc3RfcGF0aAorCisKKyMgZnVuY19jb252ZXJ0X3BhdGhfbm9vcCBBUkcKKyMgQ29weSBBUkcgdG8gZnVuY190b19ob3N0X3BhdGhfcmVzdWx0LgorZnVuY19jb252ZXJ0X3BhdGhfbm9vcCAoKQoreworICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQxIgorfQorIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfbm9vcAorCisKKyMgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b193MzIgQVJHCisjIENvbnZlcnQgcGF0aCBBUkcgZnJvbSAobWluZ3cpIE1TWVMgdG8gKG1pbmd3KSB3MzIgZm9ybWF0OyBhdXRvbWF0aWMKKyMgY29udmVyc2lvbiB0byB3MzIgaXMgbm90IGF2YWlsYWJsZSBpbnNpZGUgdGhlIGN3cmFwcGVyLiAgUmV0dXJucyByZXN1bHQgaW4KKyMgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0LgorZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b193MzIgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQxIgorICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKyAgICAjIFJlbW92ZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBwYXRoIHNlcGFyYXRvciBjaGFyYWN0ZXJzIGZyb20gQVJHLiAgTVNZUworICAgICMgYmVoYXZpb3IgaXMgaW5jb25zaXN0ZW50IGhlcmU7IGN5Z3BhdGggdHVybnMgdGhlbSBpbnRvICcuOycgYW5kICc7Lic7CisgICAgIyBhbmQgd2luZXBhdGggaWdub3JlcyB0aGVtIGNvbXBsZXRlbHkuCisgICAgZnVuY19zdHJpcG5hbWUgOiA6ICIkMSIKKyAgICBmdW5jX3RvX2hvc3RfcGF0aF90bXAxPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAgICBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiCisgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0IgorICAgIGZ1bmNfY29udmVydF9wYXRoX2NoZWNrIDogIjsiIFwKKyAgICAgICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIgIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiCisgICAgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwICI6KiIgIio6IiAiOyIgIiQxIgorICBmaQorfQorIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b193MzIKKworCisjIGZ1bmNfY29udmVydF9wYXRoX2N5Z3dpbl90b193MzIgQVJHCisjIENvbnZlcnQgcGF0aCBBUkcgZnJvbSBDeWd3aW4gdG8gdzMyIGZvcm1hdC4gIFJldHVybnMgcmVzdWx0IGluCisjIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KK2Z1bmNfY29udmVydF9wYXRoX2N5Z3dpbl90b193MzIgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQxIgorICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKyAgICAjIFNlZSBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX3czMjoKKyAgICBmdW5jX3N0cmlwbmFtZSA6IDogIiQxIgorICAgIGZ1bmNfdG9faG9zdF9wYXRoX3RtcDE9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD1gY3lncGF0aCAtbSAtcCAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiYAorICAgIGZ1bmNfY29udmVydF9wYXRoX2NoZWNrIDogIjsiIFwKKyAgICAgICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIgIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiCisgICAgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwICI6KiIgIio6IiAiOyIgIiQxIgorICBmaQorfQorIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfY3lnd2luX3RvX3czMgorCisKKyMgZnVuY19jb252ZXJ0X3BhdGhfbml4X3RvX3czMiBBUkcKKyMgQ29udmVydCBwYXRoIEFSRyBmcm9tICpuaXggdG8gdzMyIGZvcm1hdC4gIFJlcXVpcmVzIGEgd2luZSBlbnZpcm9ubWVudCBhbmQKKyMgYSB3b3JraW5nIHdpbmVwYXRoLiAgUmV0dXJucyByZXN1bHQgaW4gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorZnVuY19jb252ZXJ0X3BhdGhfbml4X3RvX3czMiAoKQoreworICAkb3B0X2RlYnVnCisgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDEiCisgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorICAgICMgU2VlIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fdzMyOgorICAgIGZ1bmNfc3RyaXBuYW1lIDogOiAiJDEiCisgICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgICAgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMiAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiCisgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQiCisgICAgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgOiAiOyIgXAorICAgICAgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIiAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgIjoqIiAiKjoiICI7IiAiJDEiCisgIGZpCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fdzMyCisKKworIyBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX2N5Z3dpbiBBUkcKKyMgQ29udmVydCBwYXRoIEFSRyBmcm9tIE1TWVMgdG8gQ3lnd2luIGZvcm1hdC4gIFJlcXVpcmVzIExUX0NZR1BBVEggc2V0LgorIyBSZXR1cm5zIHJlc3VsdCBpbiBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCitmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX2N5Z3dpbiAoKQoreworICAkb3B0X2RlYnVnCisgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDEiCisgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorICAgICMgU2VlIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fdzMyOgorICAgIGZ1bmNfc3RyaXBuYW1lIDogOiAiJDEiCisgICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgICAgZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIgorICAgIGZ1bmNfY3lncGF0aCAtdSAtcCAiJGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdCIKKyAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiRmdW5jX2N5Z3BhdGhfcmVzdWx0IgorICAgIGZ1bmNfY29udmVydF9wYXRoX2NoZWNrIDogOiBcCisgICAgICAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgorICAgIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAiOioiICIqOiIgOiAiJDEiCisgIGZpCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX2N5Z3dpbgorCisKKyMgZnVuY19jb252ZXJ0X3BhdGhfbml4X3RvX2N5Z3dpbiBBUkcKKyMgQ29udmVydCBwYXRoIEFSRyBmcm9tICpuaXggdG8gQ3lnd2luIGZvcm1hdC4gIFJlcXVpcmVzIEN5Z3dpbiBpbnN0YWxsZWQgaW4gYQorIyBhIHdpbmUgZW52aXJvbm1lbnQsIHdvcmtpbmcgd2luZXBhdGgsIGFuZCBMVF9DWUdQQVRIIHNldC4gIFJldHVybnMgcmVzdWx0IGluCisjIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KK2Z1bmNfY29udmVydF9wYXRoX25peF90b19jeWd3aW4gKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQxIgorICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKyAgICAjIFJlbW92ZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBwYXRoIHNlcGFyYXRvciBjaGFyYWN0ZXJzIGZyb20KKyAgICAjIEFSRy4gbXN5cyBiZWhhdmlvciBpcyBpbmNvbnNpc3RlbnQgaGVyZSwgY3lncGF0aCB0dXJucyB0aGVtCisgICAgIyBpbnRvICcuOycgYW5kICc7LicsIGFuZCB3aW5lcGF0aCBpZ25vcmVzIHRoZW0gY29tcGxldGVseS4KKyAgICBmdW5jX3N0cmlwbmFtZSA6IDogIiQxIgorICAgIGZ1bmNfdG9faG9zdF9wYXRoX3RtcDE9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorICAgIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzIgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIgorICAgIGZ1bmNfY3lncGF0aCAtdSAtcCAiJGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0IgorICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJGZ1bmNfY3lncGF0aF9yZXN1bHQiCisgICAgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgOiA6IFwKKyAgICAgICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIgIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiCisgICAgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwICI6KiIgIio6IiA6ICIkMSIKKyAgZmkKK30KKyMgZW5kIGZ1bmNfY29udmVydF9wYXRoX25peF90b19jeWd3aW4KKworCisjIGZ1bmNfbW9kZV9jb21waWxlIGFyZy4uLgorZnVuY19tb2RlX2NvbXBpbGUgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgIyBHZXQgdGhlIGNvbXBpbGF0aW9uIGNvbW1hbmQgYW5kIHRoZSBzb3VyY2UgZmlsZS4KKyAgICBiYXNlX2NvbXBpbGU9CisgICAgc3JjZmlsZT0iJG5vbm9wdCIgICMgIGFsd2F5cyBrZWVwIGEgbm9uLWVtcHR5IHZhbHVlIGluICJzcmNmaWxlIgorICAgIHN1cHByZXNzX29wdD15ZXMKKyAgICBzdXBwcmVzc19vdXRwdXQ9CisgICAgYXJnX21vZGU9bm9ybWFsCisgICAgbGlib2JqPQorICAgIGxhdGVyPQorICAgIHBpZV9mbGFnPQorCisgICAgZm9yIGFyZworICAgIGRvCisgICAgICBjYXNlICRhcmdfbW9kZSBpbgorICAgICAgYXJnICApCisJIyBkbyBub3QgImNvbnRpbnVlIi4gIEluc3RlYWQsIGFkZCB0aGlzIHRvIGJhc2VfY29tcGlsZQorCWxhc3Rhcmc9IiRhcmciCisJYXJnX21vZGU9bm9ybWFsCisJOzsKKworICAgICAgdGFyZ2V0ICkKKwlsaWJvYmo9IiRhcmciCisJYXJnX21vZGU9bm9ybWFsCisJY29udGludWUKKwk7OworCisgICAgICBub3JtYWwgKQorCSMgQWNjZXB0IGFueSBjb21tYW5kLWxpbmUgb3B0aW9ucy4KKwljYXNlICRhcmcgaW4KKwktbykKKwkgIHRlc3QgLW4gIiRsaWJvYmoiICYmIFwKKwkgICAgZnVuY19mYXRhbF9lcnJvciAieW91IGNhbm5vdCBzcGVjaWZ5IFxgLW8nIG1vcmUgdGhhbiBvbmNlIgorCSAgYXJnX21vZGU9dGFyZ2V0CisJICBjb250aW51ZQorCSAgOzsKKworCS1waWUgfCAtZnBpZSB8IC1mUElFKQorICAgICAgICAgIGZ1bmNfYXBwZW5kIHBpZV9mbGFnICIgJGFyZyIKKwkgIGNvbnRpbnVlCisJICA7OworCisJLXNoYXJlZCB8IC1zdGF0aWMgfCAtcHJlZmVyLXBpYyB8IC1wcmVmZXItbm9uLXBpYykKKwkgIGZ1bmNfYXBwZW5kIGxhdGVyICIgJGFyZyIKKwkgIGNvbnRpbnVlCisJICA7OworCisJLW5vLXN1cHByZXNzKQorCSAgc3VwcHJlc3Nfb3B0PW5vCisJICBjb250aW51ZQorCSAgOzsKKworCS1YY29tcGlsZXIpCisJICBhcmdfbW9kZT1hcmcgICMgIHRoZSBuZXh0IG9uZSBnb2VzIGludG8gdGhlICJiYXNlX2NvbXBpbGUiIGFyZyBsaXN0CisJICBjb250aW51ZSAgICAgICMgIFRoZSBjdXJyZW50ICJzcmNmaWxlIiB3aWxsIGVpdGhlciBiZSByZXRhaW5lZCBvcgorCSAgOzsgICAgICAgICAgICAjICByZXBsYWNlZCBsYXRlci4gIEkgd291bGQgZ3Vlc3MgdGhhdCB3b3VsZCBiZSBhIGJ1Zy4KKworCS1XYywqKQorCSAgZnVuY19zdHJpcG5hbWUgJy1XYywnICcnICIkYXJnIgorCSAgYXJncz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICBsYXN0YXJnPQorCSAgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JywnCisJICBmb3IgYXJnIGluICRhcmdzOyBkbworCSAgICBJRlM9IiRzYXZlX2lmcyIKKwkgICAgZnVuY19hcHBlbmRfcXVvdGVkIGxhc3RhcmcgIiRhcmciCisJICBkb25lCisJICBJRlM9IiRzYXZlX2lmcyIKKwkgIGZ1bmNfc3RyaXBuYW1lICcgJyAnJyAiJGxhc3RhcmciCisJICBsYXN0YXJnPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKworCSAgIyBBZGQgdGhlIGFyZ3VtZW50cyB0byBiYXNlX2NvbXBpbGUuCisJICBmdW5jX2FwcGVuZCBiYXNlX2NvbXBpbGUgIiAkbGFzdGFyZyIKKwkgIGNvbnRpbnVlCisJICA7OworCisJKikKKwkgICMgQWNjZXB0IHRoZSBjdXJyZW50IGFyZ3VtZW50IGFzIHRoZSBzb3VyY2UgZmlsZS4KKwkgICMgVGhlIHByZXZpb3VzICJzcmNmaWxlIiBiZWNvbWVzIHRoZSBjdXJyZW50IGFyZ3VtZW50LgorCSAgIworCSAgbGFzdGFyZz0iJHNyY2ZpbGUiCisJICBzcmNmaWxlPSIkYXJnIgorCSAgOzsKKwllc2FjICAjICBjYXNlICRhcmcKKwk7OworICAgICAgZXNhYyAgICAjICBjYXNlICRhcmdfbW9kZQorCisgICAgICAjIEFlc3RoZXRpY2FsbHkgcXVvdGUgdGhlIHByZXZpb3VzIGFyZ3VtZW50LgorICAgICAgZnVuY19hcHBlbmRfcXVvdGVkIGJhc2VfY29tcGlsZSAiJGxhc3RhcmciCisgICAgZG9uZSAjIGZvciBhcmcKKworICAgIGNhc2UgJGFyZ19tb2RlIGluCisgICAgYXJnKQorICAgICAgZnVuY19mYXRhbF9lcnJvciAieW91IG11c3Qgc3BlY2lmeSBhbiBhcmd1bWVudCBmb3IgLVhjb21waWxlIgorICAgICAgOzsKKyAgICB0YXJnZXQpCisgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJ5b3UgbXVzdCBzcGVjaWZ5IGEgdGFyZ2V0IHdpdGggXGAtbyciCisgICAgICA7OworICAgICopCisgICAgICAjIEdldCB0aGUgbmFtZSBvZiB0aGUgbGlicmFyeSBvYmplY3QuCisgICAgICB0ZXN0IC16ICIkbGlib2JqIiAmJiB7CisJZnVuY19iYXNlbmFtZSAiJHNyY2ZpbGUiCisJbGlib2JqPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisgICAgICB9CisgICAgICA7OworICAgIGVzYWMKKworICAgICMgUmVjb2duaXplIHNldmVyYWwgZGlmZmVyZW50IGZpbGUgc3VmZml4ZXMuCisgICAgIyBJZiB0aGUgdXNlciBzcGVjaWZpZXMgLW8gZmlsZS5vLCBpdCBpcyByZXBsYWNlZCB3aXRoIGZpbGUubG8KKyAgICBjYXNlICRsaWJvYmogaW4KKyAgICAqLltjQ0ZTaWZtc29dIHwgXAorICAgICouYWRhIHwgKi5hZGIgfCAqLmFkcyB8ICouYXNtIHwgXAorICAgICouYysrIHwgKi5jYyB8ICouaWkgfCAqLmNsYXNzIHwgKi5jcHAgfCAqLmN4eCB8IFwKKyAgICAqLltmRl1bMDldPyB8ICouZm9yIHwgKi5qYXZhIHwgKi5nbyB8ICoub2JqIHwgKi5zeCB8ICouY3UgfCAqLmN1cCkKKyAgICAgIGZ1bmNfeGZvcm0gIiRsaWJvYmoiCisgICAgICBsaWJvYmo9JGZ1bmNfeGZvcm1fcmVzdWx0CisgICAgICA7OworICAgIGVzYWMKKworICAgIGNhc2UgJGxpYm9iaiBpbgorICAgICoubG8pIGZ1bmNfbG8ybyAiJGxpYm9iaiI7IG9iaj0kZnVuY19sbzJvX3Jlc3VsdCA7OworICAgICopCisgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZGV0ZXJtaW5lIG5hbWUgb2YgbGlicmFyeSBvYmplY3QgZnJvbSBcYCRsaWJvYmonIgorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBmdW5jX2luZmVyX3RhZyAkYmFzZV9jb21waWxlCisKKyAgICBmb3IgYXJnIGluICRsYXRlcjsgZG8KKyAgICAgIGNhc2UgJGFyZyBpbgorICAgICAgLXNoYXJlZCkKKwl0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXMgJiYgXAorCSAgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICJjYW4gbm90IGJ1aWxkIGEgc2hhcmVkIGxpYnJhcnkiCisJYnVpbGRfb2xkX2xpYnM9bm8KKwljb250aW51ZQorCTs7CisKKyAgICAgIC1zdGF0aWMpCisJYnVpbGRfbGlidG9vbF9saWJzPW5vCisJYnVpbGRfb2xkX2xpYnM9eWVzCisJY29udGludWUKKwk7OworCisgICAgICAtcHJlZmVyLXBpYykKKwlwaWNfbW9kZT15ZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1wcmVmZXItbm9uLXBpYykKKwlwaWNfbW9kZT1ubworCWNvbnRpbnVlCisJOzsKKyAgICAgIGVzYWMKKyAgICBkb25lCisKKyAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkbGlib2JqIgorICAgIHRlc3QgIlgkbGlib2JqIiAhPSAiWCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIgXAorICAgICAgJiYgJEVDSE8gIlgkbGlib2JqIiB8ICRHUkVQICdbXX4jXip7fTs8Pj8iJyInIicJICYoKXxgJFtdJyBcCisgICAgICAmJiBmdW5jX3dhcm5pbmcgImxpYm9iaiBuYW1lIFxgJGxpYm9iaicgbWF5IG5vdCBjb250YWluIHNoZWxsIHNwZWNpYWwgY2hhcmFjdGVycy4iCisgICAgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAiJG9iaiIgIi8iICIiCisgICAgb2JqbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorICAgIHhkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorICAgIGxvYmo9JHt4ZGlyfSRvYmpkaXIvJG9iam5hbWUKKworICAgIHRlc3QgLXogIiRiYXNlX2NvbXBpbGUiICYmIFwKKyAgICAgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhIGNvbXBpbGF0aW9uIGNvbW1hbmQiCisKKyAgICAjIERlbGV0ZSBhbnkgbGVmdG92ZXIgbGlicmFyeSBvYmplY3RzLgorICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KKyAgICAgIHJlbW92ZWxpc3Q9IiRvYmogJGxvYmogJGxpYm9iaiAke2xpYm9ian1UIgorICAgIGVsc2UKKyAgICAgIHJlbW92ZWxpc3Q9IiRsb2JqICRsaWJvYmogJHtsaWJvYmp9VCIKKyAgICBmaQorCisgICAgIyBPbiBDeWd3aW4gdGhlcmUncyBubyAicmVhbCIgUElDIGZsYWcgc28gd2UgbXVzdCBidWlsZCBib3RoIG9iamVjdCB0eXBlcworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBvczIqIHwgY2VnY2MqKQorICAgICAgcGljX21vZGU9ZGVmYXVsdAorICAgICAgOzsKKyAgICBlc2FjCisgICAgaWYgdGVzdCAiJHBpY19tb2RlIiA9IG5vICYmIHRlc3QgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgIT0gcGFzc19hbGw7IHRoZW4KKyAgICAgICMgbm9uLVBJQyBjb2RlIGluIHNoYXJlZCBsaWJyYXJpZXMgaXMgbm90IHN1cHBvcnRlZAorICAgICAgcGljX21vZGU9ZGVmYXVsdAorICAgIGZpCisKKyAgICAjIENhbGN1bGF0ZSB0aGUgZmlsZW5hbWUgb2YgdGhlIG91dHB1dCBvYmplY3QgaWYgY29tcGlsZXIgZG9lcworICAgICMgbm90IHN1cHBvcnQgLW8gd2l0aCAtYworICAgIGlmIHRlc3QgIiRjb21waWxlcl9jX28iID0gbm87IHRoZW4KKyAgICAgIG91dHB1dF9vYmo9YCRFQ0hPICIkc3JjZmlsZSIgfCAkU0VEICdzJV4uKi8lJTsgcyVcLlteLl0qJCUlJ2AuJHtvYmpleHR9CisgICAgICBsb2NrZmlsZT0iJG91dHB1dF9vYmoubG9jayIKKyAgICBlbHNlCisgICAgICBvdXRwdXRfb2JqPQorICAgICAgbmVlZF9sb2Nrcz1ubworICAgICAgbG9ja2ZpbGU9CisgICAgZmkKKworICAgICMgTG9jayB0aGlzIGNyaXRpY2FsIHNlY3Rpb24gaWYgaXQgaXMgbmVlZGVkCisgICAgIyBXZSB1c2UgdGhpcyBzY3JpcHQgZmlsZSB0byBtYWtlIHRoZSBsaW5rLCBpdCBhdm9pZHMgY3JlYXRpbmcgYSBuZXcgZmlsZQorICAgIGlmIHRlc3QgIiRuZWVkX2xvY2tzIiA9IHllczsgdGhlbgorICAgICAgdW50aWwgJG9wdF9kcnlfcnVuIHx8IGxuICIkcHJvZ3BhdGgiICIkbG9ja2ZpbGUiIDI+L2Rldi9udWxsOyBkbworCWZ1bmNfZWNobyAiV2FpdGluZyBmb3IgJGxvY2tmaWxlIHRvIGJlIHJlbW92ZWQiCisJc2xlZXAgMgorICAgICAgZG9uZQorICAgIGVsaWYgdGVzdCAiJG5lZWRfbG9ja3MiID0gd2FybjsgdGhlbgorICAgICAgaWYgdGVzdCAtZiAiJGxvY2tmaWxlIjsgdGhlbgorCSRFQ0hPICJcCisqKiogRVJST1IsICRsb2NrZmlsZSBleGlzdHMgYW5kIGNvbnRhaW5zOgorYGNhdCAkbG9ja2ZpbGUgMj4vZGV2L251bGxgCisKK1RoaXMgaW5kaWNhdGVzIHRoYXQgYW5vdGhlciBwcm9jZXNzIGlzIHRyeWluZyB0byB1c2UgdGhlIHNhbWUKK3RlbXBvcmFyeSBvYmplY3QgZmlsZSwgYW5kIGxpYnRvb2wgY291bGQgbm90IHdvcmsgYXJvdW5kIGl0IGJlY2F1c2UKK3lvdXIgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydCBcYC1jJyBhbmQgXGAtbycgdG9nZXRoZXIuICBJZiB5b3UKK3JlcGVhdCB0aGlzIGNvbXBpbGF0aW9uLCBpdCBtYXkgc3VjY2VlZCwgYnkgY2hhbmNlLCBidXQgeW91IGhhZCBiZXR0ZXIKK2F2b2lkIHBhcmFsbGVsIGJ1aWxkcyAobWFrZSAtaikgaW4gdGhpcyBwbGF0Zm9ybSwgb3IgZ2V0IGEgYmV0dGVyCitjb21waWxlci4iCisKKwkkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0CisJZXhpdCAkRVhJVF9GQUlMVVJFCisgICAgICBmaQorICAgICAgZnVuY19hcHBlbmQgcmVtb3ZlbGlzdCAiICRvdXRwdXRfb2JqIgorICAgICAgJEVDSE8gIiRzcmNmaWxlIiA+ICIkbG9ja2ZpbGUiCisgICAgZmkKKworICAgICRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3QKKyAgICBmdW5jX2FwcGVuZCByZW1vdmVsaXN0ICIgJGxvY2tmaWxlIgorICAgIHRyYXAgJyRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3Q7IGV4aXQgJEVYSVRfRkFJTFVSRScgMSAyIDE1CisKKyAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJHNyY2ZpbGUiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisgICAgc3JjZmlsZT0kZnVuY190b190b29sX2ZpbGVfcmVzdWx0CisgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHNyY2ZpbGUiCisgICAgcXNyY2ZpbGU9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0CisKKyAgICAjIE9ubHkgYnVpbGQgYSBQSUMgb2JqZWN0IGlmIHdlIGFyZSBidWlsZGluZyBsaWJ0b29sIGxpYnJhcmllcy4KKyAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgorICAgICAgIyBXaXRob3V0IHRoaXMgYXNzaWdubWVudCwgYmFzZV9jb21waWxlIGdldHMgZW1wdGllZC4KKyAgICAgIGZic2RfaGlkZW91c19zaF9idWc9JGJhc2VfY29tcGlsZQorCisgICAgICBpZiB0ZXN0ICIkcGljX21vZGUiICE9IG5vOyB0aGVuCisJY29tbWFuZD0iJGJhc2VfY29tcGlsZSAkcXNyY2ZpbGUgJHBpY19mbGFnIgorICAgICAgZWxzZQorCSMgRG9uJ3QgYnVpbGQgUElDIGNvZGUKKwljb21tYW5kPSIkYmFzZV9jb21waWxlICRxc3JjZmlsZSIKKyAgICAgIGZpCisKKyAgICAgIGZ1bmNfbWtkaXJfcCAiJHhkaXIkb2JqZGlyIgorCisgICAgICBpZiB0ZXN0IC16ICIkb3V0cHV0X29iaiI7IHRoZW4KKwkjIFBsYWNlIFBJQyBvYmplY3RzIGluICRvYmpkaXIKKwlmdW5jX2FwcGVuZCBjb21tYW5kICIgLW8gJGxvYmoiCisgICAgICBmaQorCisgICAgICBmdW5jX3Nob3dfZXZhbF9sb2NhbGUgIiRjb21tYW5kIglcCisgICAgICAgICAgJ3Rlc3QgLW4gIiRvdXRwdXRfb2JqIiAmJiAkUk0gJHJlbW92ZWxpc3Q7IGV4aXQgJEVYSVRfRkFJTFVSRScKKworICAgICAgaWYgdGVzdCAiJG5lZWRfbG9ja3MiID0gd2FybiAmJgorCSB0ZXN0ICJYYGNhdCAkbG9ja2ZpbGUgMj4vZGV2L251bGxgIiAhPSAiWCRzcmNmaWxlIjsgdGhlbgorCSRFQ0hPICJcCisqKiogRVJST1IsICRsb2NrZmlsZSBjb250YWluczoKK2BjYXQgJGxvY2tmaWxlIDI+L2Rldi9udWxsYAorCitidXQgaXQgc2hvdWxkIGNvbnRhaW46Ciskc3JjZmlsZQorCitUaGlzIGluZGljYXRlcyB0aGF0IGFub3RoZXIgcHJvY2VzcyBpcyB0cnlpbmcgdG8gdXNlIHRoZSBzYW1lCit0ZW1wb3Jhcnkgb2JqZWN0IGZpbGUsIGFuZCBsaWJ0b29sIGNvdWxkIG5vdCB3b3JrIGFyb3VuZCBpdCBiZWNhdXNlCit5b3VyIGNvbXBpbGVyIGRvZXMgbm90IHN1cHBvcnQgXGAtYycgYW5kIFxgLW8nIHRvZ2V0aGVyLiAgSWYgeW91CityZXBlYXQgdGhpcyBjb21waWxhdGlvbiwgaXQgbWF5IHN1Y2NlZWQsIGJ5IGNoYW5jZSwgYnV0IHlvdSBoYWQgYmV0dGVyCithdm9pZCBwYXJhbGxlbCBidWlsZHMgKG1ha2UgLWopIGluIHRoaXMgcGxhdGZvcm0sIG9yIGdldCBhIGJldHRlcgorY29tcGlsZXIuIgorCisJJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdAorCWV4aXQgJEVYSVRfRkFJTFVSRQorICAgICAgZmkKKworICAgICAgIyBKdXN0IG1vdmUgdGhlIG9iamVjdCBpZiBuZWVkZWQsIHRoZW4gZ28gb24gdG8gY29tcGlsZSB0aGUgbmV4dCBvbmUKKyAgICAgIGlmIHRlc3QgLW4gIiRvdXRwdXRfb2JqIiAmJiB0ZXN0ICJYJG91dHB1dF9vYmoiICE9ICJYJGxvYmoiOyB0aGVuCisJZnVuY19zaG93X2V2YWwgJyRNViAiJG91dHB1dF9vYmoiICIkbG9iaiInIFwKKwkgICdlcnJvcj0kPzsgJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdDsgZXhpdCAkZXJyb3InCisgICAgICBmaQorCisgICAgICAjIEFsbG93IGVycm9yIG1lc3NhZ2VzIG9ubHkgZnJvbSB0aGUgZmlyc3QgY29tcGlsYXRpb24uCisgICAgICBpZiB0ZXN0ICIkc3VwcHJlc3Nfb3B0IiA9IHllczsgdGhlbgorCXN1cHByZXNzX291dHB1dD0nID4vZGV2L251bGwgMj4mMScKKyAgICAgIGZpCisgICAgZmkKKworICAgICMgT25seSBidWlsZCBhIHBvc2l0aW9uLWRlcGVuZGVudCBvYmplY3QgaWYgd2UgYnVpbGQgb2xkIGxpYnJhcmllcy4KKyAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzOyB0aGVuCisgICAgICBpZiB0ZXN0ICIkcGljX21vZGUiICE9IHllczsgdGhlbgorCSMgRG9uJ3QgYnVpbGQgUElDIGNvZGUKKwljb21tYW5kPSIkYmFzZV9jb21waWxlICRxc3JjZmlsZSRwaWVfZmxhZyIKKyAgICAgIGVsc2UKKwljb21tYW5kPSIkYmFzZV9jb21waWxlICRxc3JjZmlsZSAkcGljX2ZsYWciCisgICAgICBmaQorICAgICAgaWYgdGVzdCAiJGNvbXBpbGVyX2NfbyIgPSB5ZXM7IHRoZW4KKwlmdW5jX2FwcGVuZCBjb21tYW5kICIgLW8gJG9iaiIKKyAgICAgIGZpCisKKyAgICAgICMgU3VwcHJlc3MgY29tcGlsZXIgb3V0cHV0IGlmIHdlIGFscmVhZHkgZGlkIGEgUElDIGNvbXBpbGF0aW9uLgorICAgICAgZnVuY19hcHBlbmQgY29tbWFuZCAiJHN1cHByZXNzX291dHB1dCIKKyAgICAgIGZ1bmNfc2hvd19ldmFsX2xvY2FsZSAiJGNvbW1hbmQiIFwKKyAgICAgICAgJyRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3Q7IGV4aXQgJEVYSVRfRkFJTFVSRScKKworICAgICAgaWYgdGVzdCAiJG5lZWRfbG9ja3MiID0gd2FybiAmJgorCSB0ZXN0ICJYYGNhdCAkbG9ja2ZpbGUgMj4vZGV2L251bGxgIiAhPSAiWCRzcmNmaWxlIjsgdGhlbgorCSRFQ0hPICJcCisqKiogRVJST1IsICRsb2NrZmlsZSBjb250YWluczoKK2BjYXQgJGxvY2tmaWxlIDI+L2Rldi9udWxsYAorCitidXQgaXQgc2hvdWxkIGNvbnRhaW46Ciskc3JjZmlsZQorCitUaGlzIGluZGljYXRlcyB0aGF0IGFub3RoZXIgcHJvY2VzcyBpcyB0cnlpbmcgdG8gdXNlIHRoZSBzYW1lCit0ZW1wb3Jhcnkgb2JqZWN0IGZpbGUsIGFuZCBsaWJ0b29sIGNvdWxkIG5vdCB3b3JrIGFyb3VuZCBpdCBiZWNhdXNlCit5b3VyIGNvbXBpbGVyIGRvZXMgbm90IHN1cHBvcnQgXGAtYycgYW5kIFxgLW8nIHRvZ2V0aGVyLiAgSWYgeW91CityZXBlYXQgdGhpcyBjb21waWxhdGlvbiwgaXQgbWF5IHN1Y2NlZWQsIGJ5IGNoYW5jZSwgYnV0IHlvdSBoYWQgYmV0dGVyCithdm9pZCBwYXJhbGxlbCBidWlsZHMgKG1ha2UgLWopIGluIHRoaXMgcGxhdGZvcm0sIG9yIGdldCBhIGJldHRlcgorY29tcGlsZXIuIgorCisJJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdAorCWV4aXQgJEVYSVRfRkFJTFVSRQorICAgICAgZmkKKworICAgICAgIyBKdXN0IG1vdmUgdGhlIG9iamVjdCBpZiBuZWVkZWQKKyAgICAgIGlmIHRlc3QgLW4gIiRvdXRwdXRfb2JqIiAmJiB0ZXN0ICJYJG91dHB1dF9vYmoiICE9ICJYJG9iaiI7IHRoZW4KKwlmdW5jX3Nob3dfZXZhbCAnJE1WICIkb3V0cHV0X29iaiIgIiRvYmoiJyBcCisJICAnZXJyb3I9JD87ICRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3Q7IGV4aXQgJGVycm9yJworICAgICAgZmkKKyAgICBmaQorCisgICAgJG9wdF9kcnlfcnVuIHx8IHsKKyAgICAgIGZ1bmNfd3JpdGVfbGlidG9vbF9vYmplY3QgIiRsaWJvYmoiICIkb2JqZGlyLyRvYmpuYW1lIiAiJG9iam5hbWUiCisKKyAgICAgICMgVW5sb2NrIHRoZSBjcml0aWNhbCBzZWN0aW9uIGlmIGl0IHdhcyBsb2NrZWQKKyAgICAgIGlmIHRlc3QgIiRuZWVkX2xvY2tzIiAhPSBubzsgdGhlbgorCXJlbW92ZWxpc3Q9JGxvY2tmaWxlCisgICAgICAgICRSTSAiJGxvY2tmaWxlIgorICAgICAgZmkKKyAgICB9CisKKyAgICBleGl0ICRFWElUX1NVQ0NFU1MKK30KKworJG9wdF9oZWxwIHx8IHsKKyAgdGVzdCAiJG9wdF9tb2RlIiA9IGNvbXBpbGUgJiYgZnVuY19tb2RlX2NvbXBpbGUgJHsxKyIkQCJ9Cit9CisKK2Z1bmNfbW9kZV9oZWxwICgpCit7CisgICAgIyBXZSBuZWVkIHRvIGRpc3BsYXkgaGVscCBmb3IgZWFjaCBvZiB0aGUgbW9kZXMuCisgICAgY2FzZSAkb3B0X21vZGUgaW4KKyAgICAgICIiKQorICAgICAgICAjIEdlbmVyaWMgaGVscCBpcyBleHRyYWN0ZWQgZnJvbSB0aGUgdXNhZ2UgY29tbWVudHMKKyAgICAgICAgIyBhdCB0aGUgc3RhcnQgb2YgdGhpcyBmaWxlLgorICAgICAgICBmdW5jX2hlbHAKKyAgICAgICAgOzsKKworICAgICAgY2xlYW4pCisgICAgICAgICRFQ0hPIFwKKyJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1jbGVhbiBSTSBbUk0tT1BUSU9OXS4uLiBGSUxFLi4uCisKK1JlbW92ZSBmaWxlcyBmcm9tIHRoZSBidWlsZCBkaXJlY3RvcnkuCisKK1JNIGlzIHRoZSBuYW1lIG9mIHRoZSBwcm9ncmFtIHRvIHVzZSB0byBkZWxldGUgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggRklMRQorKHR5cGljYWxseSBcYC9iaW4vcm0nKS4gIFJNLU9QVElPTlMgYXJlIG9wdGlvbnMgKHN1Y2ggYXMgXGAtZicpIHRvIGJlIHBhc3NlZAordG8gUk0uCisKK0lmIEZJTEUgaXMgYSBsaWJ0b29sIGxpYnJhcnksIG9iamVjdCBvciBwcm9ncmFtLCBhbGwgdGhlIGZpbGVzIGFzc29jaWF0ZWQKK3dpdGggaXQgYXJlIGRlbGV0ZWQuIE90aGVyd2lzZSwgb25seSBGSUxFIGl0c2VsZiBpcyBkZWxldGVkIHVzaW5nIFJNLiIKKyAgICAgICAgOzsKKworICAgICAgY29tcGlsZSkKKyAgICAgICRFQ0hPIFwKKyJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1jb21waWxlIENPTVBJTEUtQ09NTUFORC4uLiBTT1VSQ0VGSUxFCisKK0NvbXBpbGUgYSBzb3VyY2UgZmlsZSBpbnRvIGEgbGlidG9vbCBsaWJyYXJ5IG9iamVjdC4KKworVGhpcyBtb2RlIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIG9wdGlvbnM6CisKKyAgLW8gT1VUUFVULUZJTEUgICAgc2V0IHRoZSBvdXRwdXQgZmlsZSBuYW1lIHRvIE9VVFBVVC1GSUxFCisgIC1uby1zdXBwcmVzcyAgICAgIGRvIG5vdCBzdXBwcmVzcyBjb21waWxlciBvdXRwdXQgZm9yIG11bHRpcGxlIHBhc3NlcworICAtcHJlZmVyLXBpYyAgICAgICB0cnkgdG8gYnVpbGQgUElDIG9iamVjdHMgb25seQorICAtcHJlZmVyLW5vbi1waWMgICB0cnkgdG8gYnVpbGQgbm9uLVBJQyBvYmplY3RzIG9ubHkKKyAgLXNoYXJlZCAgICAgICAgICAgZG8gbm90IGJ1aWxkIGEgXGAubycgZmlsZSBzdWl0YWJsZSBmb3Igc3RhdGljIGxpbmtpbmcKKyAgLXN0YXRpYyAgICAgICAgICAgb25seSBidWlsZCBhIFxgLm8nIGZpbGUgc3VpdGFibGUgZm9yIHN0YXRpYyBsaW5raW5nCisgIC1XYyxGTEFHICAgICAgICAgIHBhc3MgRkxBRyBkaXJlY3RseSB0byB0aGUgY29tcGlsZXIKKworQ09NUElMRS1DT01NQU5EIGlzIGEgY29tbWFuZCB0byBiZSB1c2VkIGluIGNyZWF0aW5nIGEgXGBzdGFuZGFyZCcgb2JqZWN0IGZpbGUKK2Zyb20gdGhlIGdpdmVuIFNPVVJDRUZJTEUuCisKK1RoZSBvdXRwdXQgZmlsZSBuYW1lIGlzIGRldGVybWluZWQgYnkgcmVtb3ZpbmcgdGhlIGRpcmVjdG9yeSBjb21wb25lbnQgZnJvbQorU09VUkNFRklMRSwgdGhlbiBzdWJzdGl0dXRpbmcgdGhlIEMgc291cmNlIGNvZGUgc3VmZml4IFxgLmMnIHdpdGggdGhlCitsaWJyYXJ5IG9iamVjdCBzdWZmaXgsIFxgLmxvJy4iCisgICAgICAgIDs7CisKKyAgICAgIGV4ZWN1dGUpCisgICAgICAgICRFQ0hPIFwKKyJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1leGVjdXRlIENPTU1BTkQgW0FSR1NdLi4uCisKK0F1dG9tYXRpY2FsbHkgc2V0IGxpYnJhcnkgcGF0aCwgdGhlbiBydW4gYSBwcm9ncmFtLgorCitUaGlzIG1vZGUgYWNjZXB0cyB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgb3B0aW9uczoKKworICAtZGxvcGVuIEZJTEUgICAgICBhZGQgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIEZJTEUgdG8gdGhlIGxpYnJhcnkgcGF0aAorCitUaGlzIG1vZGUgc2V0cyB0aGUgbGlicmFyeSBwYXRoIGVudmlyb25tZW50IHZhcmlhYmxlIGFjY29yZGluZyB0byBcYC1kbG9wZW4nCitmbGFncy4KKworSWYgYW55IG9mIHRoZSBBUkdTIGFyZSBsaWJ0b29sIGV4ZWN1dGFibGUgd3JhcHBlcnMsIHRoZW4gdGhleSBhcmUgdHJhbnNsYXRlZAoraW50byB0aGVpciBjb3JyZXNwb25kaW5nIHVuaW5zdGFsbGVkIGJpbmFyeSwgYW5kIGFueSBvZiB0aGVpciByZXF1aXJlZCBsaWJyYXJ5CitkaXJlY3RvcmllcyBhcmUgYWRkZWQgdG8gdGhlIGxpYnJhcnkgcGF0aC4KKworVGhlbiwgQ09NTUFORCBpcyBleGVjdXRlZCwgd2l0aCBBUkdTIGFzIGFyZ3VtZW50cy4iCisgICAgICAgIDs7CisKKyAgICAgIGZpbmlzaCkKKyAgICAgICAgJEVDSE8gXAorIlVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gLS1tb2RlPWZpbmlzaCBbTElCRElSXS4uLgorCitDb21wbGV0ZSB0aGUgaW5zdGFsbGF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzLgorCitFYWNoIExJQkRJUiBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGxpYnRvb2wgbGlicmFyaWVzLgorCitUaGUgY29tbWFuZHMgdGhhdCB0aGlzIG1vZGUgZXhlY3V0ZXMgbWF5IHJlcXVpcmUgc3VwZXJ1c2VyIHByaXZpbGVnZXMuICBVc2UKK3RoZSBcYC0tZHJ5LXJ1bicgb3B0aW9uIGlmIHlvdSBqdXN0IHdhbnQgdG8gc2VlIHdoYXQgd291bGQgYmUgZXhlY3V0ZWQuIgorICAgICAgICA7OworCisgICAgICBpbnN0YWxsKQorICAgICAgICAkRUNITyBcCisiVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9aW5zdGFsbCBJTlNUQUxMLUNPTU1BTkQuLi4KKworSW5zdGFsbCBleGVjdXRhYmxlcyBvciBsaWJyYXJpZXMuCisKK0lOU1RBTEwtQ09NTUFORCBpcyB0aGUgaW5zdGFsbGF0aW9uIGNvbW1hbmQuICBUaGUgZmlyc3QgY29tcG9uZW50IHNob3VsZCBiZQorZWl0aGVyIHRoZSBcYGluc3RhbGwnIG9yIFxgY3AnIHByb2dyYW0uCisKK1RoZSBmb2xsb3dpbmcgY29tcG9uZW50cyBvZiBJTlNUQUxMLUNPTU1BTkQgYXJlIHRyZWF0ZWQgc3BlY2lhbGx5OgorCisgIC1pbnN0LXByZWZpeC1kaXIgUFJFRklYLURJUiAgVXNlIFBSRUZJWC1ESVIgYXMgYSBzdGFnaW5nIGFyZWEgZm9yIGluc3RhbGxhdGlvbgorCitUaGUgcmVzdCBvZiB0aGUgY29tcG9uZW50cyBhcmUgaW50ZXJwcmV0ZWQgYXMgYXJndW1lbnRzIHRvIHRoYXQgY29tbWFuZCAob25seQorQlNELWNvbXBhdGlibGUgaW5zdGFsbCBvcHRpb25zIGFyZSByZWNvZ25pemVkKS4iCisgICAgICAgIDs7CisKKyAgICAgIGxpbmspCisgICAgICAgICRFQ0hPIFwKKyJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1saW5rIExJTkstQ09NTUFORC4uLgorCitMaW5rIG9iamVjdCBmaWxlcyBvciBsaWJyYXJpZXMgdG9nZXRoZXIgdG8gZm9ybSBhbm90aGVyIGxpYnJhcnksIG9yIHRvCitjcmVhdGUgYW4gZXhlY3V0YWJsZSBwcm9ncmFtLgorCitMSU5LLUNPTU1BTkQgaXMgYSBjb21tYW5kIHVzaW5nIHRoZSBDIGNvbXBpbGVyIHRoYXQgeW91IHdvdWxkIHVzZSB0byBjcmVhdGUKK2EgcHJvZ3JhbSBmcm9tIHNldmVyYWwgb2JqZWN0IGZpbGVzLgorCitUaGUgZm9sbG93aW5nIGNvbXBvbmVudHMgb2YgTElOSy1DT01NQU5EIGFyZSB0cmVhdGVkIHNwZWNpYWxseToKKworICAtYWxsLXN0YXRpYyAgICAgICBkbyBub3QgZG8gYW55IGR5bmFtaWMgbGlua2luZyBhdCBhbGwKKyAgLWF2b2lkLXZlcnNpb24gICAgZG8gbm90IGFkZCBhIHZlcnNpb24gc3VmZml4IGlmIHBvc3NpYmxlCisgIC1iaW5kaXIgQklORElSICAgIHNwZWNpZnkgcGF0aCB0byBiaW5hcmllcyBkaXJlY3RvcnkgKGZvciBzeXN0ZW1zIHdoZXJlCisgICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcyBtdXN0IGJlIGZvdW5kIGluIHRoZSBQQVRIIHNldHRpbmcgYXQgcnVudGltZSkKKyAgLWRsb3BlbiBGSUxFICAgICAgXGAtZGxwcmVvcGVuJyBGSUxFIGlmIGl0IGNhbm5vdCBiZSBkbG9wZW5lZCBhdCBydW50aW1lCisgIC1kbHByZW9wZW4gRklMRSAgIGxpbmsgaW4gRklMRSBhbmQgYWRkIGl0cyBzeW1ib2xzIHRvIGx0X3ByZWxvYWRlZF9zeW1ib2xzCisgIC1leHBvcnQtZHluYW1pYyAgIGFsbG93IHN5bWJvbHMgZnJvbSBPVVRQVVQtRklMRSB0byBiZSByZXNvbHZlZCB3aXRoIGRsc3ltKDMpCisgIC1leHBvcnQtc3ltYm9scyBTWU1GSUxFCisgICAgICAgICAgICAgICAgICAgIHRyeSB0byBleHBvcnQgb25seSB0aGUgc3ltYm9scyBsaXN0ZWQgaW4gU1lNRklMRQorICAtZXhwb3J0LXN5bWJvbHMtcmVnZXggUkVHRVgKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHRvIGV4cG9ydCBvbmx5IHRoZSBzeW1ib2xzIG1hdGNoaW5nIFJFR0VYCisgIC1MTElCRElSICAgICAgICAgIHNlYXJjaCBMSUJESVIgZm9yIHJlcXVpcmVkIGluc3RhbGxlZCBsaWJyYXJpZXMKKyAgLWxOQU1FICAgICAgICAgICAgT1VUUFVULUZJTEUgcmVxdWlyZXMgdGhlIGluc3RhbGxlZCBsaWJyYXJ5IGxpYk5BTUUKKyAgLW1vZHVsZSAgICAgICAgICAgYnVpbGQgYSBsaWJyYXJ5IHRoYXQgY2FuIGRsb3BlbmVkCisgIC1uby1mYXN0LWluc3RhbGwgIGRpc2FibGUgdGhlIGZhc3QtaW5zdGFsbCBtb2RlCisgIC1uby1pbnN0YWxsICAgICAgIGxpbmsgYSBub3QtaW5zdGFsbGFibGUgZXhlY3V0YWJsZQorICAtbm8tdW5kZWZpbmVkICAgICBkZWNsYXJlIHRoYXQgYSBsaWJyYXJ5IGRvZXMgbm90IHJlZmVyIHRvIGV4dGVybmFsIHN5bWJvbHMKKyAgLW8gT1VUUFVULUZJTEUgICAgY3JlYXRlIE9VVFBVVC1GSUxFIGZyb20gdGhlIHNwZWNpZmllZCBvYmplY3RzCisgIC1vYmplY3RsaXN0IEZJTEUgIFVzZSBhIGxpc3Qgb2Ygb2JqZWN0IGZpbGVzIGZvdW5kIGluIEZJTEUgdG8gc3BlY2lmeSBvYmplY3RzCisgIC1wcmVjaW91cy1maWxlcy1yZWdleCBSRUdFWAorICAgICAgICAgICAgICAgICAgICBkb24ndCByZW1vdmUgb3V0cHV0IGZpbGVzIG1hdGNoaW5nIFJFR0VYCisgIC1yZWxlYXNlIFJFTEVBU0UgIHNwZWNpZnkgcGFja2FnZSByZWxlYXNlIGluZm9ybWF0aW9uCisgIC1ycGF0aCBMSUJESVIgICAgIHRoZSBjcmVhdGVkIGxpYnJhcnkgd2lsbCBldmVudHVhbGx5IGJlIGluc3RhbGxlZCBpbiBMSUJESVIKKyAgLVJbIF1MSUJESVIgICAgICAgYWRkIExJQkRJUiB0byB0aGUgcnVudGltZSBwYXRoIG9mIHByb2dyYW1zIGFuZCBsaWJyYXJpZXMKKyAgLXNoYXJlZCAgICAgICAgICAgb25seSBkbyBkeW5hbWljIGxpbmtpbmcgb2YgbGlidG9vbCBsaWJyYXJpZXMKKyAgLXNocmV4dCBTVUZGSVggICAgb3ZlcnJpZGUgdGhlIHN0YW5kYXJkIHNoYXJlZCBsaWJyYXJ5IGZpbGUgZXh0ZW5zaW9uCisgIC1zdGF0aWMgICAgICAgICAgIGRvIG5vdCBkbyBhbnkgZHluYW1pYyBsaW5raW5nIG9mIHVuaW5zdGFsbGVkIGxpYnRvb2wgbGlicmFyaWVzCisgIC1zdGF0aWMtbGlidG9vbC1saWJzCisgICAgICAgICAgICAgICAgICAgIGRvIG5vdCBkbyBhbnkgZHluYW1pYyBsaW5raW5nIG9mIGxpYnRvb2wgbGlicmFyaWVzCisgIC12ZXJzaW9uLWluZm8gQ1VSUkVOVFs6UkVWSVNJT05bOkFHRV1dCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZnkgbGlicmFyeSB2ZXJzaW9uIGluZm8gW2VhY2ggdmFyaWFibGUgZGVmYXVsdHMgdG8gMF0KKyAgLXdlYWsgTElCTkFNRSAgICAgZGVjbGFyZSB0aGF0IHRoZSB0YXJnZXQgcHJvdmlkZXMgdGhlIExJQk5BTUUgaW50ZXJmYWNlCisgIC1XYyxGTEFHCisgIC1YY29tcGlsZXIgRkxBRyAgIHBhc3MgbGlua2VyLXNwZWNpZmljIEZMQUcgZGlyZWN0bHkgdG8gdGhlIGNvbXBpbGVyCisgIC1XbCxGTEFHCisgIC1YbGlua2VyIEZMQUcgICAgIHBhc3MgbGlua2VyLXNwZWNpZmljIEZMQUcgZGlyZWN0bHkgdG8gdGhlIGxpbmtlcgorICAtWENDbGlua2VyIEZMQUcgICBwYXNzIGxpbmstc3BlY2lmaWMgRkxBRyB0byB0aGUgY29tcGlsZXIgZHJpdmVyIChDQykKKworQWxsIG90aGVyIG9wdGlvbnMgKGFyZ3VtZW50cyBiZWdpbm5pbmcgd2l0aCBcYC0nKSBhcmUgaWdub3JlZC4KKworRXZlcnkgb3RoZXIgYXJndW1lbnQgaXMgdHJlYXRlZCBhcyBhIGZpbGVuYW1lLiAgRmlsZXMgZW5kaW5nIGluIFxgLmxhJyBhcmUKK3RyZWF0ZWQgYXMgdW5pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMsIG90aGVyIGZpbGVzIGFyZSBzdGFuZGFyZCBvciBsaWJyYXJ5CitvYmplY3QgZmlsZXMuCisKK0lmIHRoZSBPVVRQVVQtRklMRSBlbmRzIGluIFxgLmxhJywgdGhlbiBhIGxpYnRvb2wgbGlicmFyeSBpcyBjcmVhdGVkLAorb25seSBsaWJyYXJ5IG9iamVjdHMgKFxgLmxvJyBmaWxlcykgbWF5IGJlIHNwZWNpZmllZCwgYW5kIFxgLXJwYXRoJyBpcworcmVxdWlyZWQsIGV4Y2VwdCB3aGVuIGNyZWF0aW5nIGEgY29udmVuaWVuY2UgbGlicmFyeS4KKworSWYgT1VUUFVULUZJTEUgZW5kcyBpbiBcYC5hJyBvciBcYC5saWInLCB0aGVuIGEgc3RhbmRhcmQgbGlicmFyeSBpcyBjcmVhdGVkCit1c2luZyBcYGFyJyBhbmQgXGByYW5saWInLCBvciBvbiBXaW5kb3dzIHVzaW5nIFxgbGliJy4KKworSWYgT1VUUFVULUZJTEUgZW5kcyBpbiBcYC5sbycgb3IgXGAuJHtvYmpleHR9JywgdGhlbiBhIHJlbG9hZGFibGUgb2JqZWN0IGZpbGUKK2lzIGNyZWF0ZWQsIG90aGVyd2lzZSBhbiBleGVjdXRhYmxlIHByb2dyYW0gaXMgY3JlYXRlZC4iCisgICAgICAgIDs7CisKKyAgICAgIHVuaW5zdGFsbCkKKyAgICAgICAgJEVDSE8gXAorIlVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gLS1tb2RlPXVuaW5zdGFsbCBSTSBbUk0tT1BUSU9OXS4uLiBGSUxFLi4uCisKK1JlbW92ZSBsaWJyYXJpZXMgZnJvbSBhbiBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LgorCitSTSBpcyB0aGUgbmFtZSBvZiB0aGUgcHJvZ3JhbSB0byB1c2UgdG8gZGVsZXRlIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIEZJTEUKKyh0eXBpY2FsbHkgXGAvYmluL3JtJykuICBSTS1PUFRJT05TIGFyZSBvcHRpb25zIChzdWNoIGFzIFxgLWYnKSB0byBiZSBwYXNzZWQKK3RvIFJNLgorCitJZiBGSUxFIGlzIGEgbGlidG9vbCBsaWJyYXJ5LCBhbGwgdGhlIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBpdCBhcmUgZGVsZXRlZC4KK090aGVyd2lzZSwgb25seSBGSUxFIGl0c2VsZiBpcyBkZWxldGVkIHVzaW5nIFJNLiIKKyAgICAgICAgOzsKKworICAgICAgKikKKyAgICAgICAgZnVuY19mYXRhbF9oZWxwICJpbnZhbGlkIG9wZXJhdGlvbiBtb2RlIFxgJG9wdF9tb2RlJyIKKyAgICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBlY2hvCisgICAgJEVDSE8gIlRyeSBcYCRwcm9nbmFtZSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IG90aGVyIG1vZGVzLiIKK30KKworIyBOb3cgdGhhdCB3ZSd2ZSBjb2xsZWN0ZWQgYSBwb3NzaWJsZSAtLW1vZGUgYXJnLCBzaG93IGhlbHAgaWYgbmVjZXNzYXJ5CitpZiAkb3B0X2hlbHA7IHRoZW4KKyAgaWYgdGVzdCAiJG9wdF9oZWxwIiA9IDo7IHRoZW4KKyAgICBmdW5jX21vZGVfaGVscAorICBlbHNlCisgICAgeworICAgICAgZnVuY19oZWxwIG5vZXhpdAorICAgICAgZm9yIG9wdF9tb2RlIGluIGNvbXBpbGUgbGluayBleGVjdXRlIGluc3RhbGwgZmluaXNoIHVuaW5zdGFsbCBjbGVhbjsgZG8KKwlmdW5jX21vZGVfaGVscAorICAgICAgZG9uZQorICAgIH0gfCBzZWQgLW4gJzFwOyAyLCRzL15Vc2FnZTovICBvcjogL3AnCisgICAgeworICAgICAgZnVuY19oZWxwIG5vZXhpdAorICAgICAgZm9yIG9wdF9tb2RlIGluIGNvbXBpbGUgbGluayBleGVjdXRlIGluc3RhbGwgZmluaXNoIHVuaW5zdGFsbCBjbGVhbjsgZG8KKwllY2hvCisJZnVuY19tb2RlX2hlbHAKKyAgICAgIGRvbmUKKyAgICB9IHwKKyAgICBzZWQgJzFkCisgICAgICAvXldoZW4gcmVwb3J0aW5nLywvXlJlcG9ydC97CisJSAorCWQKKyAgICAgIH0KKyAgICAgICR4CisgICAgICAvaW5mb3JtYXRpb24gYWJvdXQgb3RoZXIgbW9kZXMvZAorICAgICAgL21vcmUgZGV0YWlsZWQgLipNT0RFL2QKKyAgICAgIHMvXlVzYWdlOi4qLS1tb2RlPVwoW14gXSpcKSAuKi9EZXNjcmlwdGlvbiBvZiBcMSBtb2RlOi8nCisgIGZpCisgIGV4aXQgJD8KK2ZpCisKKworIyBmdW5jX21vZGVfZXhlY3V0ZSBhcmcuLi4KK2Z1bmNfbW9kZV9leGVjdXRlICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgICMgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSBjb21tYW5kIG5hbWUuCisgICAgY21kPSIkbm9ub3B0IgorICAgIHRlc3QgLXogIiRjbWQiICYmIFwKKyAgICAgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhIENPTU1BTkQiCisKKyAgICAjIEhhbmRsZSAtZGxvcGVuIGZsYWdzIGltbWVkaWF0ZWx5LgorICAgIGZvciBmaWxlIGluICRvcHRfZGxvcGVuOyBkbworICAgICAgdGVzdCAtZiAiJGZpbGUiIFwKKwl8fCBmdW5jX2ZhdGFsX2hlbHAgIlxgJGZpbGUnIGlzIG5vdCBhIGZpbGUiCisKKyAgICAgIGRpcj0KKyAgICAgIGNhc2UgJGZpbGUgaW4KKyAgICAgICoubGEpCisJZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmaWxlIgorCWZpbGU9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAorCisJIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgYXJjaGl2ZS4KKwlmdW5jX2xhbGliX3Vuc2FmZV9wICIkZmlsZSIgXAorCSAgfHwgZnVuY19mYXRhbF9oZWxwICJcYCRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKworCSMgUmVhZCB0aGUgbGlidG9vbCBsaWJyYXJ5LgorCWRsbmFtZT0KKwlsaWJyYXJ5X25hbWVzPQorCWZ1bmNfc291cmNlICIkZmlsZSIKKworCSMgU2tpcCB0aGlzIGxpYnJhcnkgaWYgaXQgY2Fubm90IGJlIGRsb3BlbmVkLgorCWlmIHRlc3QgLXogIiRkbG5hbWUiOyB0aGVuCisJICAjIFdhcm4gaWYgaXQgd2FzIGEgc2hhcmVkIGxpYnJhcnkuCisJICB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyIgJiYgXAorCSAgICBmdW5jX3dhcm5pbmcgIlxgJGZpbGUnIHdhcyBub3QgbGlua2VkIHdpdGggXGAtZXhwb3J0LWR5bmFtaWMnIgorCSAgY29udGludWUKKwlmaQorCisJZnVuY19kaXJuYW1lICIkZmlsZSIgIiIgIi4iCisJZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKworCWlmIHRlc3QgLWYgIiRkaXIvJG9iamRpci8kZGxuYW1lIjsgdGhlbgorCSAgZnVuY19hcHBlbmQgZGlyICIvJG9iamRpciIKKwllbHNlCisJICBpZiB0ZXN0ICEgLWYgIiRkaXIvJGRsbmFtZSI7IHRoZW4KKwkgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgXGAkZGxuYW1lJyBpbiBcYCRkaXInIG9yIFxgJGRpci8kb2JqZGlyJyIKKwkgIGZpCisJZmkKKwk7OworCisgICAgICAqLmxvKQorCSMgSnVzdCBhZGQgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSAubG8gZmlsZS4KKwlmdW5jX2Rpcm5hbWUgIiRmaWxlIiAiIiAiLiIKKwlkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorCTs7CisKKyAgICAgICopCisJZnVuY193YXJuaW5nICJcYC1kbG9wZW4nIGlzIGlnbm9yZWQgZm9yIG5vbi1saWJ0b29sIGxpYnJhcmllcyBhbmQgb2JqZWN0cyIKKwljb250aW51ZQorCTs7CisgICAgICBlc2FjCisKKyAgICAgICMgR2V0IHRoZSBhYnNvbHV0ZSBwYXRobmFtZS4KKyAgICAgIGFic2Rpcj1gY2QgIiRkaXIiICYmIHB3ZGAKKyAgICAgIHRlc3QgLW4gIiRhYnNkaXIiICYmIGRpcj0iJGFic2RpciIKKworICAgICAgIyBOb3cgYWRkIHRoZSBkaXJlY3RvcnkgdG8gc2hsaWJwYXRoX3Zhci4KKyAgICAgIGlmIGV2YWwgInRlc3QgLXogXCJcJCRzaGxpYnBhdGhfdmFyXCIiOyB0aGVuCisJZXZhbCAiJHNobGlicGF0aF92YXI9XCJcJGRpclwiIgorICAgICAgZWxzZQorCWV2YWwgIiRzaGxpYnBhdGhfdmFyPVwiXCRkaXI6XCQkc2hsaWJwYXRoX3ZhclwiIgorICAgICAgZmkKKyAgICBkb25lCisKKyAgICAjIFRoaXMgdmFyaWFibGUgdGVsbHMgd3JhcHBlciBzY3JpcHRzIGp1c3QgdG8gc2V0IHNobGlicGF0aF92YXIKKyAgICAjIHJhdGhlciB0aGFuIHJ1bm5pbmcgdGhlaXIgcHJvZ3JhbXMuCisgICAgbGlidG9vbF9leGVjdXRlX21hZ2ljPSIkbWFnaWMiCisKKyAgICAjIENoZWNrIGlmIGFueSBvZiB0aGUgYXJndW1lbnRzIGlzIGEgd3JhcHBlciBzY3JpcHQuCisgICAgYXJncz0KKyAgICBmb3IgZmlsZQorICAgIGRvCisgICAgICBjYXNlICRmaWxlIGluCisgICAgICAtKiB8ICoubGEgfCAqLmxvICkgOzsKKyAgICAgICopCisJIyBEbyBhIHRlc3QgdG8gc2VlIGlmIHRoaXMgaXMgcmVhbGx5IGEgbGlidG9vbCBwcm9ncmFtLgorCWlmIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdF9wICIkZmlsZSI7IHRoZW4KKwkgIGZ1bmNfc291cmNlICIkZmlsZSIKKwkgICMgVHJhbnNmb3JtIGFyZyB0byB3cmFwcGVkIG5hbWUuCisJICBmaWxlPSIkcHJvZ2Rpci8kcHJvZ3JhbSIKKwllbGlmIGZ1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCAiJGZpbGUiOyB0aGVuCisJICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lICIkZmlsZSIKKwkgIGZ1bmNfc291cmNlICIkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQiCisJICAjIFRyYW5zZm9ybSBhcmcgdG8gd3JhcHBlZCBuYW1lLgorCSAgZmlsZT0iJHByb2dkaXIvJHByb2dyYW0iCisJZmkKKwk7OworICAgICAgZXNhYworICAgICAgIyBRdW90ZSBhcmd1bWVudHMgKHRvIHByZXNlcnZlIHNoZWxsIG1ldGFjaGFyYWN0ZXJzKS4KKyAgICAgIGZ1bmNfYXBwZW5kX3F1b3RlZCBhcmdzICIkZmlsZSIKKyAgICBkb25lCisKKyAgICBpZiB0ZXN0ICJYJG9wdF9kcnlfcnVuIiA9IFhmYWxzZTsgdGhlbgorICAgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiOyB0aGVuCisJIyBFeHBvcnQgdGhlIHNobGlicGF0aF92YXIuCisJZXZhbCAiZXhwb3J0ICRzaGxpYnBhdGhfdmFyIgorICAgICAgZmkKKworICAgICAgIyBSZXN0b3JlIHNhdmVkIGVudmlyb25tZW50IHZhcmlhYmxlcworICAgICAgZm9yIGx0X3ZhciBpbiBMQU5HIExBTkdVQUdFIExDX0FMTCBMQ19DVFlQRSBMQ19DT0xMQVRFIExDX01FU1NBR0VTCisgICAgICBkbworCWV2YWwgImlmIHRlc3QgXCJcJHtzYXZlXyRsdF92YXIrc2V0fVwiID0gc2V0OyB0aGVuCisgICAgICAgICAgICAgICAgJGx0X3Zhcj1cJHNhdmVfJGx0X3ZhcjsgZXhwb3J0ICRsdF92YXIKKwkgICAgICBlbHNlCisJCSRsdF91bnNldCAkbHRfdmFyCisJICAgICAgZmkiCisgICAgICBkb25lCisKKyAgICAgICMgTm93IHByZXBhcmUgdG8gYWN0dWFsbHkgZXhlYyB0aGUgY29tbWFuZC4KKyAgICAgIGV4ZWNfY21kPSJcJGNtZCRhcmdzIgorICAgIGVsc2UKKyAgICAgICMgRGlzcGxheSB3aGF0IHdvdWxkIGJlIGRvbmUuCisgICAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KKwlldmFsICJcJEVDSE8gXCJcJHNobGlicGF0aF92YXI9XCQkc2hsaWJwYXRoX3ZhclwiIgorCWVjaG8gImV4cG9ydCAkc2hsaWJwYXRoX3ZhciIKKyAgICAgIGZpCisgICAgICAkRUNITyAiJGNtZCRhcmdzIgorICAgICAgZXhpdCAkRVhJVF9TVUNDRVNTCisgICAgZmkKK30KKwordGVzdCAiJG9wdF9tb2RlIiA9IGV4ZWN1dGUgJiYgZnVuY19tb2RlX2V4ZWN1dGUgJHsxKyIkQCJ9CisKKworIyBmdW5jX21vZGVfZmluaXNoIGFyZy4uLgorZnVuY19tb2RlX2ZpbmlzaCAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBsaWJzPQorICAgIGxpYmRpcnM9CisgICAgYWRtaW5jbWRzPQorCisgICAgZm9yIG9wdCBpbiAiJG5vbm9wdCIgJHsxKyIkQCJ9CisgICAgZG8KKyAgICAgIGlmIHRlc3QgLWQgIiRvcHQiOyB0aGVuCisJZnVuY19hcHBlbmQgbGliZGlycyAiICRvcHQiCisKKyAgICAgIGVsaWYgdGVzdCAtZiAiJG9wdCI7IHRoZW4KKwlpZiBmdW5jX2xhbGliX3Vuc2FmZV9wICIkb3B0IjsgdGhlbgorCSAgZnVuY19hcHBlbmQgbGlicyAiICRvcHQiCisJZWxzZQorCSAgZnVuY193YXJuaW5nICJcYCRvcHQnIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKwlmaQorCisgICAgICBlbHNlCisJZnVuY19mYXRhbF9lcnJvciAiaW52YWxpZCBhcmd1bWVudCBcYCRvcHQnIgorICAgICAgZmkKKyAgICBkb25lCisKKyAgICBpZiB0ZXN0IC1uICIkbGlicyI7IHRoZW4KKyAgICAgIGlmIHRlc3QgLW4gIiRsdF9zeXNyb290IjsgdGhlbgorICAgICAgICBzeXNyb290X3JlZ2V4PWAkRUNITyAiJGx0X3N5c3Jvb3QiIHwgJFNFRCAiJHNlZF9tYWtlX2xpdGVyYWxfcmVnZXgiYAorICAgICAgICBzeXNyb290X2NtZD0icy9cKFsgJ11cKSRzeXNyb290X3JlZ2V4L1wxL2c7IgorICAgICAgZWxzZQorICAgICAgICBzeXNyb290X2NtZD0KKyAgICAgIGZpCisKKyAgICAgICMgUmVtb3ZlIHN5c3Jvb3QgcmVmZXJlbmNlcworICAgICAgaWYgJG9wdF9kcnlfcnVuOyB0aGVuCisgICAgICAgIGZvciBsaWIgaW4gJGxpYnM7IGRvCisgICAgICAgICAgZWNobyAicmVtb3ZpbmcgcmVmZXJlbmNlcyB0byAkbHRfc3lzcm9vdCBhbmQgXGA9JyBwcmVmaXhlcyBmcm9tICRsaWIiCisgICAgICAgIGRvbmUKKyAgICAgIGVsc2UKKyAgICAgICAgdG1wZGlyPWBmdW5jX21rdGVtcGRpcmAKKyAgICAgICAgZm9yIGxpYiBpbiAkbGliczsgZG8KKwkgIHNlZCAtZSAiJHtzeXNyb290X2NtZH0gcy9cKFsgJ10tW0xSXVwpPS9cMS9nOyBzL1woWyAnXVwpPS9cMS9nIiAkbGliIFwKKwkgICAgPiAkdG1wZGlyL3RtcC1sYQorCSAgbXYgLWYgJHRtcGRpci90bXAtbGEgJGxpYgorCWRvbmUKKyAgICAgICAgJHtSTX1yICIkdG1wZGlyIgorICAgICAgZmkKKyAgICBmaQorCisgICAgaWYgdGVzdCAtbiAiJGZpbmlzaF9jbWRzJGZpbmlzaF9ldmFsIiAmJiB0ZXN0IC1uICIkbGliZGlycyI7IHRoZW4KKyAgICAgIGZvciBsaWJkaXIgaW4gJGxpYmRpcnM7IGRvCisJaWYgdGVzdCAtbiAiJGZpbmlzaF9jbWRzIjsgdGhlbgorCSAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIGZpbmlzaCBjb21tYW5kcy4KKwkgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkZmluaXNoX2NtZHMiICdhZG1pbmNtZHM9IiRhZG1pbmNtZHMKKyciJGNtZCInIicKKwlmaQorCWlmIHRlc3QgLW4gIiRmaW5pc2hfZXZhbCI7IHRoZW4KKwkgICMgRG8gdGhlIHNpbmdsZSBmaW5pc2hfZXZhbC4KKwkgIGV2YWwgY21kcz1cIiRmaW5pc2hfZXZhbFwiCisJICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiJGNtZHMiIHx8IGZ1bmNfYXBwZW5kIGFkbWluY21kcyAiCisgICAgICAgJGNtZHMiCisJZmkKKyAgICAgIGRvbmUKKyAgICBmaQorCisgICAgIyBFeGl0IGhlcmUgaWYgdGhleSB3YW50ZWQgc2lsZW50IG1vZGUuCisgICAgJG9wdF9zaWxlbnQgJiYgZXhpdCAkRVhJVF9TVUNDRVNTCisKKyAgICBpZiB0ZXN0IC1uICIkZmluaXNoX2NtZHMkZmluaXNoX2V2YWwiICYmIHRlc3QgLW4gIiRsaWJkaXJzIjsgdGhlbgorICAgICAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKyAgICAgIGVjaG8gIkxpYnJhcmllcyBoYXZlIGJlZW4gaW5zdGFsbGVkIGluOiIKKyAgICAgIGZvciBsaWJkaXIgaW4gJGxpYmRpcnM7IGRvCisJJEVDSE8gIiAgICRsaWJkaXIiCisgICAgICBkb25lCisgICAgICBlY2hvCisgICAgICBlY2hvICJJZiB5b3UgZXZlciBoYXBwZW4gdG8gd2FudCB0byBsaW5rIGFnYWluc3QgaW5zdGFsbGVkIGxpYnJhcmllcyIKKyAgICAgIGVjaG8gImluIGEgZ2l2ZW4gZGlyZWN0b3J5LCBMSUJESVIsIHlvdSBtdXN0IGVpdGhlciB1c2UgbGlidG9vbCwgYW5kIgorICAgICAgZWNobyAic3BlY2lmeSB0aGUgZnVsbCBwYXRobmFtZSBvZiB0aGUgbGlicmFyeSwgb3IgdXNlIHRoZSBcYC1MTElCRElSJyIKKyAgICAgIGVjaG8gImZsYWcgZHVyaW5nIGxpbmtpbmcgYW5kIGRvIGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nOiIKKyAgICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgorCWVjaG8gIiAgIC0gYWRkIExJQkRJUiB0byB0aGUgXGAkc2hsaWJwYXRoX3ZhcicgZW52aXJvbm1lbnQgdmFyaWFibGUiCisJZWNobyAiICAgICBkdXJpbmcgZXhlY3V0aW9uIgorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKwllY2hvICIgICAtIGFkZCBMSUJESVIgdG8gdGhlIFxgJHJ1bnBhdGhfdmFyJyBlbnZpcm9ubWVudCB2YXJpYWJsZSIKKwllY2hvICIgICAgIGR1cmluZyBsaW5raW5nIgorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgorCWxpYmRpcj1MSUJESVIKKwlldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisKKwkkRUNITyAiICAgLSB1c2UgdGhlIFxgJGZsYWcnIGxpbmtlciBmbGFnIgorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgLW4gIiRhZG1pbmNtZHMiOyB0aGVuCisJJEVDSE8gIiAgIC0gaGF2ZSB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdG9yIHJ1biB0aGVzZSBjb21tYW5kczokYWRtaW5jbWRzIgorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgLWYgL2V0Yy9sZC5zby5jb25mOyB0aGVuCisJZWNobyAiICAgLSBoYXZlIHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3IgYWRkIExJQkRJUiB0byBcYC9ldGMvbGQuc28uY29uZiciCisgICAgICBmaQorICAgICAgZWNobworCisgICAgICBlY2hvICJTZWUgYW55IG9wZXJhdGluZyBzeXN0ZW0gZG9jdW1lbnRhdGlvbiBhYm91dCBzaGFyZWQgbGlicmFyaWVzIGZvciIKKyAgICAgIGNhc2UgJGhvc3QgaW4KKwlzb2xhcmlzMi5bNjc4OV18c29sYXJpczIuMVswLTldKQorCSAgZWNobyAibW9yZSBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aGUgbGQoMSksIGNybGUoMSkgYW5kIGxkLnNvKDgpIG1hbnVhbCIKKwkgIGVjaG8gInBhZ2VzLiIKKwkgIDs7CisJKikKKwkgIGVjaG8gIm1vcmUgaW5mb3JtYXRpb24sIHN1Y2ggYXMgdGhlIGxkKDEpIGFuZCBsZC5zbyg4KSBtYW51YWwgcGFnZXMuIgorCSAgOzsKKyAgICAgIGVzYWMKKyAgICAgIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCisgICAgZmkKKyAgICBleGl0ICRFWElUX1NVQ0NFU1MKK30KKwordGVzdCAiJG9wdF9tb2RlIiA9IGZpbmlzaCAmJiBmdW5jX21vZGVfZmluaXNoICR7MSsiJEAifQorCisKKyMgZnVuY19tb2RlX2luc3RhbGwgYXJnLi4uCitmdW5jX21vZGVfaW5zdGFsbCAoKQoreworICAgICRvcHRfZGVidWcKKyAgICAjIFRoZXJlIG1heSBiZSBhbiBvcHRpb25hbCBzaCgxKSBhcmd1bWVudCBhdCB0aGUgYmVnaW5uaW5nIG9mCisgICAgIyBpbnN0YWxsX3Byb2cgKGVzcGVjaWFsbHkgb24gV2luZG93cyBOVCkuCisgICAgaWYgdGVzdCAiJG5vbm9wdCIgPSAiJFNIRUxMIiB8fCB0ZXN0ICIkbm9ub3B0IiA9IC9iaW4vc2ggfHwKKyAgICAgICAjIEFsbG93IHRoZSB1c2Ugb2YgR05VIHNodG9vbCdzIGluc3RhbGwgY29tbWFuZC4KKyAgICAgICBjYXNlICRub25vcHQgaW4gKnNodG9vbCopIDo7OyAqKSBmYWxzZTs7IGVzYWM7IHRoZW4KKyAgICAgICMgQWVzdGhldGljYWxseSBxdW90ZSBpdC4KKyAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRub25vcHQiCisgICAgICBpbnN0YWxsX3Byb2c9IiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCAiCisgICAgICBhcmc9JDEKKyAgICAgIHNoaWZ0CisgICAgZWxzZQorICAgICAgaW5zdGFsbF9wcm9nPQorICAgICAgYXJnPSRub25vcHQKKyAgICBmaQorCisgICAgIyBUaGUgcmVhbCBmaXJzdCBhcmd1bWVudCBzaG91bGQgYmUgdGhlIG5hbWUgb2YgdGhlIGluc3RhbGxhdGlvbiBwcm9ncmFtLgorICAgICMgQWVzdGhldGljYWxseSBxdW90ZSBpdC4KKyAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorICAgIGZ1bmNfYXBwZW5kIGluc3RhbGxfcHJvZyAiJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorICAgIGluc3RhbGxfc2hhcmVkX3Byb2c9JGluc3RhbGxfcHJvZworICAgIGNhc2UgIiAkaW5zdGFsbF9wcm9nICIgaW4KKyAgICAgICpbXFxcIC9dY3BcICopIGluc3RhbGxfY3A9OiA7OworICAgICAgKikgaW5zdGFsbF9jcD1mYWxzZSA7OworICAgIGVzYWMKKworICAgICMgV2UgbmVlZCB0byBhY2NlcHQgYXQgbGVhc3QgYWxsIHRoZSBCU0QgaW5zdGFsbCBmbGFncy4KKyAgICBkZXN0PQorICAgIGZpbGVzPQorICAgIG9wdHM9CisgICAgcHJldj0KKyAgICBpbnN0YWxsX3R5cGU9CisgICAgaXNkaXI9bm8KKyAgICBzdHJpcG1lPQorICAgIG5vX21vZGU9OgorICAgIGZvciBhcmcKKyAgICBkbworICAgICAgYXJnMj0KKyAgICAgIGlmIHRlc3QgLW4gIiRkZXN0IjsgdGhlbgorCWZ1bmNfYXBwZW5kIGZpbGVzICIgJGRlc3QiCisJZGVzdD0kYXJnCisJY29udGludWUKKyAgICAgIGZpCisKKyAgICAgIGNhc2UgJGFyZyBpbgorICAgICAgLWQpIGlzZGlyPXllcyA7OworICAgICAgLWYpCisJaWYgJGluc3RhbGxfY3A7IHRoZW4gOjsgZWxzZQorCSAgcHJldj0kYXJnCisJZmkKKwk7OworICAgICAgLWcgfCAtbSB8IC1vKQorCXByZXY9JGFyZworCTs7CisgICAgICAtcykKKwlzdHJpcG1lPSIgLXMiCisJY29udGludWUKKwk7OworICAgICAgLSopCisJOzsKKyAgICAgICopCisJIyBJZiB0aGUgcHJldmlvdXMgb3B0aW9uIG5lZWRlZCBhbiBhcmd1bWVudCwgdGhlbiBza2lwIGl0LgorCWlmIHRlc3QgLW4gIiRwcmV2IjsgdGhlbgorCSAgaWYgdGVzdCAieCRwcmV2IiA9IHgtbSAmJiB0ZXN0IC1uICIkaW5zdGFsbF9vdmVycmlkZV9tb2RlIjsgdGhlbgorCSAgICBhcmcyPSRpbnN0YWxsX292ZXJyaWRlX21vZGUKKwkgICAgbm9fbW9kZT1mYWxzZQorCSAgZmkKKwkgIHByZXY9CisJZWxzZQorCSAgZGVzdD0kYXJnCisJICBjb250aW51ZQorCWZpCisJOzsKKyAgICAgIGVzYWMKKworICAgICAgIyBBZXN0aGV0aWNhbGx5IHF1b3RlIHRoZSBhcmd1bWVudC4KKyAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisgICAgICBmdW5jX2FwcGVuZCBpbnN0YWxsX3Byb2cgIiAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgICAgICBpZiB0ZXN0IC1uICIkYXJnMiI7IHRoZW4KKwlmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnMiIKKyAgICAgIGZpCisgICAgICBmdW5jX2FwcGVuZCBpbnN0YWxsX3NoYXJlZF9wcm9nICIgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorICAgIGRvbmUKKworICAgIHRlc3QgLXogIiRpbnN0YWxsX3Byb2ciICYmIFwKKyAgICAgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhbiBpbnN0YWxsIHByb2dyYW0iCisKKyAgICB0ZXN0IC1uICIkcHJldiIgJiYgXAorICAgICAgZnVuY19mYXRhbF9oZWxwICJ0aGUgXGAkcHJldicgb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IgorCisgICAgaWYgdGVzdCAtbiAiJGluc3RhbGxfb3ZlcnJpZGVfbW9kZSIgJiYgJG5vX21vZGU7IHRoZW4KKyAgICAgIGlmICRpbnN0YWxsX2NwOyB0aGVuIDo7IGVsc2UKKwlmdW5jX3F1b3RlX2Zvcl9ldmFsICIkaW5zdGFsbF9vdmVycmlkZV9tb2RlIgorCWZ1bmNfYXBwZW5kIGluc3RhbGxfc2hhcmVkX3Byb2cgIiAtbSAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgICAgICBmaQorICAgIGZpCisKKyAgICBpZiB0ZXN0IC16ICIkZmlsZXMiOyB0aGVuCisgICAgICBpZiB0ZXN0IC16ICIkZGVzdCI7IHRoZW4KKwlmdW5jX2ZhdGFsX2hlbHAgIm5vIGZpbGUgb3IgZGVzdGluYXRpb24gc3BlY2lmaWVkIgorICAgICAgZWxzZQorCWZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhIGRlc3RpbmF0aW9uIgorICAgICAgZmkKKyAgICBmaQorCisgICAgIyBTdHJpcCBhbnkgdHJhaWxpbmcgc2xhc2ggZnJvbSB0aGUgZGVzdGluYXRpb24uCisgICAgZnVuY19zdHJpcG5hbWUgJycgJy8nICIkZGVzdCIKKyAgICBkZXN0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKworICAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIGRlc3RpbmF0aW9uIGlzIGEgZGlyZWN0b3J5LgorICAgIHRlc3QgLWQgIiRkZXN0IiAmJiBpc2Rpcj15ZXMKKyAgICBpZiB0ZXN0ICIkaXNkaXIiID0geWVzOyB0aGVuCisgICAgICBkZXN0ZGlyPSIkZGVzdCIKKyAgICAgIGRlc3RuYW1lPQorICAgIGVsc2UKKyAgICAgIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgIiRkZXN0IiAiIiAiLiIKKyAgICAgIGRlc3RkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorICAgICAgZGVzdG5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKworICAgICAgIyBOb3QgYSBkaXJlY3RvcnksIHNvIGNoZWNrIHRvIHNlZSB0aGF0IHRoZXJlIGlzIG9ubHkgb25lIGZpbGUgc3BlY2lmaWVkLgorICAgICAgc2V0IGR1bW15ICRmaWxlczsgc2hpZnQKKyAgICAgIHRlc3QgIiQjIiAtZ3QgMSAmJiBcCisJZnVuY19mYXRhbF9oZWxwICJcYCRkZXN0JyBpcyBub3QgYSBkaXJlY3RvcnkiCisgICAgZmkKKyAgICBjYXNlICRkZXN0ZGlyIGluCisgICAgW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSA7OworICAgICopCisgICAgICBmb3IgZmlsZSBpbiAkZmlsZXM7IGRvCisJY2FzZSAkZmlsZSBpbgorCSoubG8pIDs7CisJKikKKwkgIGZ1bmNfZmF0YWxfaGVscCAiXGAkZGVzdGRpcicgbXVzdCBiZSBhbiBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSIKKwkgIDs7CisJZXNhYworICAgICAgZG9uZQorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIFRoaXMgdmFyaWFibGUgdGVsbHMgd3JhcHBlciBzY3JpcHRzIGp1c3QgdG8gc2V0IHZhcmlhYmxlcyByYXRoZXIKKyAgICAjIHRoYW4gcnVubmluZyB0aGVpciBwcm9ncmFtcy4KKyAgICBsaWJ0b29sX2luc3RhbGxfbWFnaWM9IiRtYWdpYyIKKworICAgIHN0YXRpY2xpYnM9CisgICAgZnV0dXJlX2xpYmRpcnM9CisgICAgY3VycmVudF9saWJkaXJzPQorICAgIGZvciBmaWxlIGluICRmaWxlczsgZG8KKworICAgICAgIyBEbyBlYWNoIGluc3RhbGxhdGlvbi4KKyAgICAgIGNhc2UgJGZpbGUgaW4KKyAgICAgICouJGxpYmV4dCkKKwkjIERvIHRoZSBzdGF0aWMgbGlicmFyaWVzIGxhdGVyLgorCWZ1bmNfYXBwZW5kIHN0YXRpY2xpYnMgIiAkZmlsZSIKKwk7OworCisgICAgICAqLmxhKQorCWZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZmlsZSIKKwlmaWxlPSRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQKKworCSMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIGFyY2hpdmUuCisJZnVuY19sYWxpYl91bnNhZmVfcCAiJGZpbGUiIFwKKwkgIHx8IGZ1bmNfZmF0YWxfaGVscCAiXGAkZmlsZScgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCisJbGlicmFyeV9uYW1lcz0KKwlvbGRfbGlicmFyeT0KKwlyZWxpbmtfY29tbWFuZD0KKwlmdW5jX3NvdXJjZSAiJGZpbGUiCisKKwkjIEFkZCB0aGUgbGliZGlyIHRvIGN1cnJlbnRfbGliZGlycyBpZiBpdCBpcyB0aGUgZGVzdGluYXRpb24uCisJaWYgdGVzdCAiWCRkZXN0ZGlyIiA9ICJYJGxpYmRpciI7IHRoZW4KKwkgIGNhc2UgIiRjdXJyZW50X2xpYmRpcnMgIiBpbgorCSAgKiIgJGxpYmRpciAiKikgOzsKKwkgICopIGZ1bmNfYXBwZW5kIGN1cnJlbnRfbGliZGlycyAiICRsaWJkaXIiIDs7CisJICBlc2FjCisJZWxzZQorCSAgIyBOb3RlIHRoZSBsaWJkaXIgYXMgYSBmdXR1cmUgbGliZGlyLgorCSAgY2FzZSAiJGZ1dHVyZV9saWJkaXJzICIgaW4KKwkgICoiICRsaWJkaXIgIiopIDs7CisJICAqKSBmdW5jX2FwcGVuZCBmdXR1cmVfbGliZGlycyAiICRsaWJkaXIiIDs7CisJICBlc2FjCisJZmkKKworCWZ1bmNfZGlybmFtZSAiJGZpbGUiICIvIiAiIgorCWRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisJZnVuY19hcHBlbmQgZGlyICIkb2JqZGlyIgorCisJaWYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgorCSAgIyBEZXRlcm1pbmUgdGhlIHByZWZpeCB0aGUgdXNlciBoYXMgYXBwbGllZCB0byBvdXIgZnV0dXJlIGRpci4KKwkgIGluc3RfcHJlZml4X2Rpcj1gJEVDSE8gIiRkZXN0ZGlyIiB8ICRTRUQgLWUgInMlJGxpYmRpclwkJSUiYAorCisJICAjIERvbid0IGFsbG93IHRoZSB1c2VyIHRvIHBsYWNlIHVzIG91dHNpZGUgb2Ygb3VyIGV4cGVjdGVkCisJICAjIGxvY2F0aW9uIGIvYyB0aGlzIHByZXZlbnRzIGZpbmRpbmcgZGVwZW5kZW50IGxpYnJhcmllcyB0aGF0CisJICAjIGFyZSBpbnN0YWxsZWQgdG8gdGhlIHNhbWUgcHJlZml4LgorCSAgIyBBdCBwcmVzZW50LCB0aGlzIGNoZWNrIGRvZXNuJ3QgYWZmZWN0IHdpbmRvd3MgLmRsbCdzIHRoYXQKKwkgICMgYXJlIGluc3RhbGxlZCBpbnRvICRsaWJkaXIvLi4vYmluIChjdXJyZW50bHksIHRoYXQgd29ya3MgZmluZSkKKwkgICMgYnV0IGl0J3Mgc29tZXRoaW5nIHRvIGtlZXAgYW4gZXllIG9uLgorCSAgdGVzdCAiJGluc3RfcHJlZml4X2RpciIgPSAiJGRlc3RkaXIiICYmIFwKKwkgICAgZnVuY19mYXRhbF9lcnJvciAiZXJyb3I6IGNhbm5vdCBpbnN0YWxsIFxgJGZpbGUnIHRvIGEgZGlyZWN0b3J5IG5vdCBlbmRpbmcgaW4gJGxpYmRpciIKKworCSAgaWYgdGVzdCAtbiAiJGluc3RfcHJlZml4X2RpciI7IHRoZW4KKwkgICAgIyBTdGljayB0aGUgaW5zdF9wcmVmaXhfZGlyIGRhdGEgaW50byB0aGUgbGluayBjb21tYW5kLgorCSAgICByZWxpbmtfY29tbWFuZD1gJEVDSE8gIiRyZWxpbmtfY29tbWFuZCIgfCAkU0VEICJzJUBpbnN0X3ByZWZpeF9kaXJAJS1pbnN0LXByZWZpeC1kaXIgJGluc3RfcHJlZml4X2RpciUiYAorCSAgZWxzZQorCSAgICByZWxpbmtfY29tbWFuZD1gJEVDSE8gIiRyZWxpbmtfY29tbWFuZCIgfCAkU0VEICJzJUBpbnN0X3ByZWZpeF9kaXJAJSUiYAorCSAgZmkKKworCSAgZnVuY193YXJuaW5nICJyZWxpbmtpbmcgXGAkZmlsZSciCisJICBmdW5jX3Nob3dfZXZhbCAiJHJlbGlua19jb21tYW5kIiBcCisJICAgICdmdW5jX2ZhdGFsX2Vycm9yICJlcnJvcjogcmVsaW5rIFxgJGZpbGUnXCcnIHdpdGggdGhlIGFib3ZlIGNvbW1hbmQgYmVmb3JlIGluc3RhbGxpbmcgaXQiJworCWZpCisKKwkjIFNlZSB0aGUgbmFtZXMgb2YgdGhlIHNoYXJlZCBsaWJyYXJ5LgorCXNldCBkdW1teSAkbGlicmFyeV9uYW1lczsgc2hpZnQKKwlpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKwkgIHJlYWxuYW1lPSIkMSIKKwkgIHNoaWZ0CisKKwkgIHNyY25hbWU9IiRyZWFsbmFtZSIKKwkgIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCIgJiYgc3JjbmFtZT0iJHJlYWxuYW1lIlQKKworCSAgIyBJbnN0YWxsIHRoZSBzaGFyZWQgbGlicmFyeSBhbmQgYnVpbGQgdGhlIHN5bWxpbmtzLgorCSAgZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3NoYXJlZF9wcm9nICRkaXIvJHNyY25hbWUgJGRlc3RkaXIvJHJlYWxuYW1lIiBcCisJICAgICAgJ2V4aXQgJD8nCisJICB0c3RyaXBtZT0iJHN0cmlwbWUiCisJICBjYXNlICRob3N0X29zIGluCisJICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisJICAgIGNhc2UgJHJlYWxuYW1lIGluCisJICAgICouZGxsLmEpCisJICAgICAgdHN0cmlwbWU9IiIKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIDs7CisJICBlc2FjCisJICBpZiB0ZXN0IC1uICIkdHN0cmlwbWUiICYmIHRlc3QgLW4gIiRzdHJpcGxpYiI7IHRoZW4KKwkgICAgZnVuY19zaG93X2V2YWwgIiRzdHJpcGxpYiAkZGVzdGRpci8kcmVhbG5hbWUiICdleGl0ICQ/JworCSAgZmkKKworCSAgaWYgdGVzdCAiJCMiIC1ndCAwOyB0aGVuCisJICAgICMgRGVsZXRlIHRoZSBvbGQgc3ltbGlua3MsIGFuZCBjcmVhdGUgbmV3IG9uZXMuCisJICAgICMgVHJ5IGBsbiAtc2YnIGZpcnN0LCBiZWNhdXNlIHRoZSBgbG4nIGJpbmFyeSBtaWdodCBkZXBlbmQgb24KKwkgICAgIyB0aGUgc3ltbGluayB3ZSByZXBsYWNlISAgU29sYXJpcyAvYmluL2xuIGRvZXMgbm90IHVuZGVyc3RhbmQgLWYsCisJICAgICMgc28gd2UgYWxzbyBuZWVkIHRvIHRyeSBybSAmJiBsbiAtcy4KKwkgICAgZm9yIGxpbmtuYW1lCisJICAgIGRvCisJICAgICAgdGVzdCAiJGxpbmtuYW1lIiAhPSAiJHJlYWxuYW1lIiBcCisJCSYmIGZ1bmNfc2hvd19ldmFsICIoY2QgJGRlc3RkaXIgJiYgeyAkTE5fUyAtZiAkcmVhbG5hbWUgJGxpbmtuYW1lIHx8IHsgJFJNICRsaW5rbmFtZSAmJiAkTE5fUyAkcmVhbG5hbWUgJGxpbmtuYW1lOyB9OyB9KSIKKwkgICAgZG9uZQorCSAgZmkKKworCSAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIHBvc3RpbnN0YWxsIGNvbW1hbmRzLgorCSAgbGliPSIkZGVzdGRpci8kcmVhbG5hbWUiCisJICBmdW5jX2V4ZWN1dGVfY21kcyAiJHBvc3RpbnN0YWxsX2NtZHMiICdleGl0ICQ/JworCWZpCisKKwkjIEluc3RhbGwgdGhlIHBzZXVkby1saWJyYXJ5IGZvciBpbmZvcm1hdGlvbiBwdXJwb3Nlcy4KKwlmdW5jX2Jhc2VuYW1lICIkZmlsZSIKKwluYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJaW5zdG5hbWU9IiRkaXIvJG5hbWUiaQorCWZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nICRpbnN0bmFtZSAkZGVzdGRpci8kbmFtZSIgJ2V4aXQgJD8nCisKKwkjIE1heWJlIGluc3RhbGwgdGhlIHN0YXRpYyBsaWJyYXJ5LCB0b28uCisJdGVzdCAtbiAiJG9sZF9saWJyYXJ5IiAmJiBmdW5jX2FwcGVuZCBzdGF0aWNsaWJzICIgJGRpci8kb2xkX2xpYnJhcnkiCisJOzsKKworICAgICAgKi5sbykKKwkjIEluc3RhbGwgKGkuZS4gY29weSkgYSBsaWJ0b29sIG9iamVjdC4KKworCSMgRmlndXJlIG91dCBkZXN0aW5hdGlvbiBmaWxlIG5hbWUsIGlmIGl0IHdhc24ndCBhbHJlYWR5IHNwZWNpZmllZC4KKwlpZiB0ZXN0IC1uICIkZGVzdG5hbWUiOyB0aGVuCisJICBkZXN0ZmlsZT0iJGRlc3RkaXIvJGRlc3RuYW1lIgorCWVsc2UKKwkgIGZ1bmNfYmFzZW5hbWUgIiRmaWxlIgorCSAgZGVzdGZpbGU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkgIGRlc3RmaWxlPSIkZGVzdGRpci8kZGVzdGZpbGUiCisJZmkKKworCSMgRGVkdWNlIHRoZSBuYW1lIG9mIHRoZSBkZXN0aW5hdGlvbiBvbGQtc3R5bGUgb2JqZWN0IGZpbGUuCisJY2FzZSAkZGVzdGZpbGUgaW4KKwkqLmxvKQorCSAgZnVuY19sbzJvICIkZGVzdGZpbGUiCisJICBzdGF0aWNkZXN0PSRmdW5jX2xvMm9fcmVzdWx0CisJICA7OworCSouJG9iamV4dCkKKwkgIHN0YXRpY2Rlc3Q9IiRkZXN0ZmlsZSIKKwkgIGRlc3RmaWxlPQorCSAgOzsKKwkqKQorCSAgZnVuY19mYXRhbF9oZWxwICJjYW5ub3QgY29weSBhIGxpYnRvb2wgb2JqZWN0IHRvIFxgJGRlc3RmaWxlJyIKKwkgIDs7CisJZXNhYworCisJIyBJbnN0YWxsIHRoZSBsaWJ0b29sIG9iamVjdCBpZiByZXF1ZXN0ZWQuCisJdGVzdCAtbiAiJGRlc3RmaWxlIiAmJiBcCisJICBmdW5jX3Nob3dfZXZhbCAiJGluc3RhbGxfcHJvZyAkZmlsZSAkZGVzdGZpbGUiICdleGl0ICQ/JworCisJIyBJbnN0YWxsIHRoZSBvbGQgb2JqZWN0IGlmIGVuYWJsZWQuCisJaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgorCSAgIyBEZWR1Y2UgdGhlIG5hbWUgb2YgdGhlIG9sZC1zdHlsZSBvYmplY3QgZmlsZS4KKwkgIGZ1bmNfbG8ybyAiJGZpbGUiCisJICBzdGF0aWNvYmo9JGZ1bmNfbG8yb19yZXN1bHQKKwkgIGZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nIFwkc3RhdGljb2JqIFwkc3RhdGljZGVzdCIgJ2V4aXQgJD8nCisJZmkKKwlleGl0ICRFWElUX1NVQ0NFU1MKKwk7OworCisgICAgICAqKQorCSMgRmlndXJlIG91dCBkZXN0aW5hdGlvbiBmaWxlIG5hbWUsIGlmIGl0IHdhc24ndCBhbHJlYWR5IHNwZWNpZmllZC4KKwlpZiB0ZXN0IC1uICIkZGVzdG5hbWUiOyB0aGVuCisJICBkZXN0ZmlsZT0iJGRlc3RkaXIvJGRlc3RuYW1lIgorCWVsc2UKKwkgIGZ1bmNfYmFzZW5hbWUgIiRmaWxlIgorCSAgZGVzdGZpbGU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkgIGRlc3RmaWxlPSIkZGVzdGRpci8kZGVzdGZpbGUiCisJZmkKKworCSMgSWYgdGhlIGZpbGUgaXMgbWlzc2luZywgYW5kIHRoZXJlIGlzIGEgLmV4ZSBvbiB0aGUgZW5kLCBzdHJpcCBpdAorCSMgYmVjYXVzZSBpdCBpcyBtb3N0IGxpa2VseSBhIGxpYnRvb2wgc2NyaXB0IHdlIGFjdHVhbGx5IHdhbnQgdG8KKwkjIGluc3RhbGwKKwlzdHJpcHBlZF9leHQ9IiIKKwljYXNlICRmaWxlIGluCisJICAqLmV4ZSkKKwkgICAgaWYgdGVzdCAhIC1mICIkZmlsZSI7IHRoZW4KKwkgICAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRmaWxlIgorCSAgICAgIGZpbGU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSAgICAgIHN0cmlwcGVkX2V4dD0iLmV4ZSIKKwkgICAgZmkKKwkgICAgOzsKKwllc2FjCisKKwkjIERvIGEgdGVzdCB0byBzZWUgaWYgdGhpcyBpcyByZWFsbHkgYSBsaWJ0b29sIHByb2dyYW0uCisJY2FzZSAkaG9zdCBpbgorCSpjeWd3aW4qIHwgKm1pbmd3KikKKwkgICAgaWYgZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wICIkZmlsZSI7IHRoZW4KKwkgICAgICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lICIkZmlsZSIKKwkgICAgICB3cmFwcGVyPSRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdAorCSAgICBlbHNlCisJICAgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkZmlsZSIKKwkgICAgICB3cmFwcGVyPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgICAgZmkKKwkgICAgOzsKKwkqKQorCSAgICB3cmFwcGVyPSRmaWxlCisJICAgIDs7CisJZXNhYworCWlmIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdF9wICIkd3JhcHBlciI7IHRoZW4KKwkgIG5vdGluc3RfZGVwbGlicz0KKwkgIHJlbGlua19jb21tYW5kPQorCisJICBmdW5jX3NvdXJjZSAiJHdyYXBwZXIiCisKKwkgICMgQ2hlY2sgdGhlIHZhcmlhYmxlcyB0aGF0IHNob3VsZCBoYXZlIGJlZW4gc2V0LgorCSAgdGVzdCAteiAiJGdlbmVyYXRlZF9ieV9saWJ0b29sX3ZlcnNpb24iICYmIFwKKwkgICAgZnVuY19mYXRhbF9lcnJvciAiaW52YWxpZCBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0IFxgJHdyYXBwZXInIgorCisJICBmaW5hbGl6ZT15ZXMKKwkgIGZvciBsaWIgaW4gJG5vdGluc3RfZGVwbGliczsgZG8KKwkgICAgIyBDaGVjayB0byBzZWUgdGhhdCBlYWNoIGxpYnJhcnkgaXMgaW5zdGFsbGVkLgorCSAgICBsaWJkaXI9CisJICAgIGlmIHRlc3QgLWYgIiRsaWIiOyB0aGVuCisJICAgICAgZnVuY19zb3VyY2UgIiRsaWIiCisJICAgIGZpCisJICAgIGxpYmZpbGU9IiRsaWJkaXIvImAkRUNITyAiJGxpYiIgfCAkU0VEICdzJV4uKi8lJWcnYCAjIyMgdGVzdHN1aXRlOiBza2lwIG5lc3RlZCBxdW90aW5nIHRlc3QKKwkgICAgaWYgdGVzdCAtbiAiJGxpYmRpciIgJiYgdGVzdCAhIC1mICIkbGliZmlsZSI7IHRoZW4KKwkgICAgICBmdW5jX3dhcm5pbmcgIlxgJGxpYicgaGFzIG5vdCBiZWVuIGluc3RhbGxlZCBpbiBcYCRsaWJkaXInIgorCSAgICAgIGZpbmFsaXplPW5vCisJICAgIGZpCisJICBkb25lCisKKwkgIHJlbGlua19jb21tYW5kPQorCSAgZnVuY19zb3VyY2UgIiR3cmFwcGVyIgorCisJICBvdXRwdXRuYW1lPQorCSAgaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgPSBubyAmJiB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuCisJICAgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgICAgaWYgdGVzdCAiJGZpbmFsaXplIiA9IHllczsgdGhlbgorCSAgICAgICAgdG1wZGlyPWBmdW5jX21rdGVtcGRpcmAKKwkJZnVuY19iYXNlbmFtZSAiJGZpbGUkc3RyaXBwZWRfZXh0IgorCQlmaWxlPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJICAgICAgICBvdXRwdXRuYW1lPSIkdG1wZGlyLyRmaWxlIgorCSAgICAgICAgIyBSZXBsYWNlIHRoZSBvdXRwdXQgZmlsZSBzcGVjaWZpY2F0aW9uLgorCSAgICAgICAgcmVsaW5rX2NvbW1hbmQ9YCRFQ0hPICIkcmVsaW5rX2NvbW1hbmQiIHwgJFNFRCAncyVAT1VUUFVUQCUnIiRvdXRwdXRuYW1lIiclZydgCisKKwkgICAgICAgICRvcHRfc2lsZW50IHx8IHsKKwkgICAgICAgICAgZnVuY19xdW90ZV9mb3JfZXhwYW5kICIkcmVsaW5rX2NvbW1hbmQiCisJCSAgZXZhbCAiZnVuY19lY2hvICRmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0IgorCSAgICAgICAgfQorCSAgICAgICAgaWYgZXZhbCAiJHJlbGlua19jb21tYW5kIjsgdGhlbiA6CisJICAgICAgICAgIGVsc2UKKwkJICBmdW5jX2Vycm9yICJlcnJvcjogcmVsaW5rIFxgJGZpbGUnIHdpdGggdGhlIGFib3ZlIGNvbW1hbmQgYmVmb3JlIGluc3RhbGxpbmcgaXQiCisJCSAgJG9wdF9kcnlfcnVuIHx8ICR7Uk19ciAiJHRtcGRpciIKKwkJICBjb250aW51ZQorCSAgICAgICAgZmkKKwkgICAgICAgIGZpbGU9IiRvdXRwdXRuYW1lIgorCSAgICAgIGVsc2UKKwkgICAgICAgIGZ1bmNfd2FybmluZyAiY2Fubm90IHJlbGluayBcYCRmaWxlJyIKKwkgICAgICBmaQorCSAgICB9CisJICBlbHNlCisJICAgICMgSW5zdGFsbCB0aGUgYmluYXJ5IHRoYXQgd2UgY29tcGlsZWQgZWFybGllci4KKwkgICAgZmlsZT1gJEVDSE8gIiRmaWxlJHN0cmlwcGVkX2V4dCIgfCAkU0VEICJzJVwoW14vXSpcKSQlJG9iamRpci9cMSUiYAorCSAgZmkKKwlmaQorCisJIyByZW1vdmUgLmV4ZSBzaW5jZSBjeWd3aW4gL3Vzci9iaW4vaW5zdGFsbCB3aWxsIGFwcGVuZCBhbm90aGVyCisJIyBvbmUgYW55d2F5CisJY2FzZSAkaW5zdGFsbF9wcm9nLCRob3N0IGluCisJKi91c3IvYmluL2luc3RhbGwqLCpjeWd3aW4qKQorCSAgY2FzZSAkZmlsZTokZGVzdGZpbGUgaW4KKwkgICouZXhlOiouZXhlKQorCSAgICAjIHRoaXMgaXMgb2sKKwkgICAgOzsKKwkgICouZXhlOiopCisJICAgIGRlc3RmaWxlPSRkZXN0ZmlsZS5leGUKKwkgICAgOzsKKwkgICo6Ki5leGUpCisJICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJGRlc3RmaWxlIgorCSAgICBkZXN0ZmlsZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICAgIDs7CisJICBlc2FjCisJICA7OworCWVzYWMKKwlmdW5jX3Nob3dfZXZhbCAiJGluc3RhbGxfcHJvZ1wkc3RyaXBtZSBcJGZpbGUgXCRkZXN0ZmlsZSIgJ2V4aXQgJD8nCisJJG9wdF9kcnlfcnVuIHx8IGlmIHRlc3QgLW4gIiRvdXRwdXRuYW1lIjsgdGhlbgorCSAgJHtSTX1yICIkdG1wZGlyIgorCWZpCisJOzsKKyAgICAgIGVzYWMKKyAgICBkb25lCisKKyAgICBmb3IgZmlsZSBpbiAkc3RhdGljbGliczsgZG8KKyAgICAgIGZ1bmNfYmFzZW5hbWUgIiRmaWxlIgorICAgICAgbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCisgICAgICAjIFNldCB1cCB0aGUgcmFubGliIHBhcmFtZXRlcnMuCisgICAgICBvbGRsaWI9IiRkZXN0ZGlyLyRuYW1lIgorICAgICAgZnVuY190b190b29sX2ZpbGUgIiRvbGRsaWIiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisgICAgICB0b29sX29sZGxpYj0kZnVuY190b190b29sX2ZpbGVfcmVzdWx0CisKKyAgICAgIGZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nIFwkZmlsZSBcJG9sZGxpYiIgJ2V4aXQgJD8nCisKKyAgICAgIGlmIHRlc3QgLW4gIiRzdHJpcG1lIiAmJiB0ZXN0IC1uICIkb2xkX3N0cmlwbGliIjsgdGhlbgorCWZ1bmNfc2hvd19ldmFsICIkb2xkX3N0cmlwbGliICR0b29sX29sZGxpYiIgJ2V4aXQgJD8nCisgICAgICBmaQorCisgICAgICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgcG9zdGluc3RhbGwgY29tbWFuZHMuCisgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJG9sZF9wb3N0aW5zdGFsbF9jbWRzIiAnZXhpdCAkPycKKyAgICBkb25lCisKKyAgICB0ZXN0IC1uICIkZnV0dXJlX2xpYmRpcnMiICYmIFwKKyAgICAgIGZ1bmNfd2FybmluZyAicmVtZW1iZXIgdG8gcnVuIFxgJHByb2duYW1lIC0tZmluaXNoJGZ1dHVyZV9saWJkaXJzJyIKKworICAgIGlmIHRlc3QgLW4gIiRjdXJyZW50X2xpYmRpcnMiOyB0aGVuCisgICAgICAjIE1heWJlIGp1c3QgZG8gYSBkcnkgcnVuLgorICAgICAgJG9wdF9kcnlfcnVuICYmIGN1cnJlbnRfbGliZGlycz0iIC1uJGN1cnJlbnRfbGliZGlycyIKKyAgICAgIGV4ZWNfY21kPSckU0hFTEwgJHByb2dwYXRoICRwcmVzZXJ2ZV9hcmdzIC0tZmluaXNoJGN1cnJlbnRfbGliZGlycycKKyAgICBlbHNlCisgICAgICBleGl0ICRFWElUX1NVQ0NFU1MKKyAgICBmaQorfQorCit0ZXN0ICIkb3B0X21vZGUiID0gaW5zdGFsbCAmJiBmdW5jX21vZGVfaW5zdGFsbCAkezErIiRAIn0KKworCisjIGZ1bmNfZ2VuZXJhdGVfZGxzeW1zIG91dHB1dG5hbWUgb3JpZ2luYXRvciBwaWNfcAorIyBFeHRyYWN0IHN5bWJvbHMgZnJvbSBkbHByZWZpbGVzIGFuZCBjcmVhdGUgJHtvdXRwdXRuYW1lfVMubyB3aXRoCisjIGEgZGxwcmVvcGVuIHN5bWJvbCB0YWJsZS4KK2Z1bmNfZ2VuZXJhdGVfZGxzeW1zICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIG15X291dHB1dG5hbWU9IiQxIgorICAgIG15X29yaWdpbmF0b3I9IiQyIgorICAgIG15X3BpY19wPSIkezMtbm99IgorICAgIG15X3ByZWZpeD1gJEVDSE8gIiRteV9vcmlnaW5hdG9yIiB8IHNlZCAncyVbXmEtekEtWjAtOV0lXyVnJ2AKKyAgICBteV9kbHN5bXM9CisKKyAgICBpZiB0ZXN0IC1uICIkZGxmaWxlcyRkbHByZWZpbGVzIiB8fCB0ZXN0ICIkZGxzZWxmIiAhPSBubzsgdGhlbgorICAgICAgaWYgdGVzdCAtbiAiJE5NIiAmJiB0ZXN0IC1uICIkZ2xvYmFsX3N5bWJvbF9waXBlIjsgdGhlbgorCW15X2Rsc3ltcz0iJHtteV9vdXRwdXRuYW1lfVMuYyIKKyAgICAgIGVsc2UKKwlmdW5jX2Vycm9yICJub3QgY29uZmlndXJlZCB0byBleHRyYWN0IGdsb2JhbCBzeW1ib2xzIGZyb20gZGxwcmVvcGVuZWQgZmlsZXMiCisgICAgICBmaQorICAgIGZpCisKKyAgICBpZiB0ZXN0IC1uICIkbXlfZGxzeW1zIjsgdGhlbgorICAgICAgY2FzZSAkbXlfZGxzeW1zIGluCisgICAgICAiIikgOzsKKyAgICAgICouYykKKwkjIERpc2NvdmVyIHRoZSBubGlzdCBvZiBlYWNoIG9mIHRoZSBkbGZpbGVzLgorCW5saXN0PSIkb3V0cHV0X29iamRpci8ke215X291dHB1dG5hbWV9Lm5tIgorCisJZnVuY19zaG93X2V2YWwgIiRSTSAkbmxpc3QgJHtubGlzdH1TICR7bmxpc3R9VCIKKworCSMgUGFyc2UgdGhlIG5hbWUgbGlzdCBpbnRvIGEgc291cmNlIGZpbGUuCisJZnVuY192ZXJib3NlICJjcmVhdGluZyAkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIgorCisJJG9wdF9kcnlfcnVuIHx8ICRFQ0hPID4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCisvKiAkbXlfZGxzeW1zIC0gc3ltYm9sIHJlc29sdXRpb24gdGFibGUgZm9yIFxgJG15X291dHB1dG5hbWUnIGRsc3ltIGVtdWxhdGlvbi4gKi8KKy8qIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT04gKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gXCJDXCIgeworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSA0KSAmJiAoX19HTlVDX01JTk9SX18gPj0gNCkpIHx8IChfX0dOVUNfXyA+IDQpKQorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVdzdHJpY3QtcHJvdG90eXBlc1wiCisjZW5kaWYKKworLyogS2VlcCB0aGlzIGNvZGUgaW4gc3luYyBiZXR3ZWVuIGxpYnRvb2wubTQsIGx0bWFpbiwgbHRfc3lzdGVtLmgsIGFuZCB0ZXN0cy4gICovCisjaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfV0lOMzJfV0NFKQorLyogREFUQSBpbXBvcnRzIGZyb20gRExMcyBvbiBXSU4zMiBjb24ndCBiZSBjb25zdCwgYmVjYXVzZSBydW50aW1lCisgICByZWxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIC0tIHNlZSBsZCdzIGRvY3VtZW50YXRpb24gb24gcHNldWRvLXJlbG9jcy4gICovCisjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorI2VsaWYgZGVmaW5lZChfX29zZl9fKQorLyogVGhpcyBzeXN0ZW0gZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggcmVsb2NhdGlvbnMgaW4gY29uc3QgZGF0YS4gICovCisjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorI2Vsc2UKKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUIGNvbnN0CisjZW5kaWYKKworLyogRXh0ZXJuYWwgc3ltYm9sIGRlY2xhcmF0aW9ucyBmb3IgdGhlIGNvbXBpbGVyLiAqL1wKKyIKKworCWlmIHRlc3QgIiRkbHNlbGYiID0geWVzOyB0aGVuCisJICBmdW5jX3ZlcmJvc2UgImdlbmVyYXRpbmcgc3ltYm9sIGxpc3QgZm9yIFxgJG91dHB1dCciCisKKwkgICRvcHRfZHJ5X3J1biB8fCBlY2hvICc6IEBQUk9HUkFNQCAnID4gIiRubGlzdCIKKworCSAgIyBBZGQgb3VyIG93biBwcm9ncmFtIG9iamVjdHMgdG8gdGhlIHN5bWJvbCBsaXN0LgorCSAgcHJvZ2ZpbGVzPWAkRUNITyAiJG9ianMkb2xkX2RlcGxpYnMiIHwgJFNQMk5MIHwgJFNFRCAiJGxvMm8iIHwgJE5MMlNQYAorCSAgZm9yIHByb2dmaWxlIGluICRwcm9nZmlsZXM7IGRvCisJICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkcHJvZ2ZpbGUiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisJICAgIGZ1bmNfdmVyYm9zZSAiZXh0cmFjdGluZyBnbG9iYWwgQyBzeW1ib2xzIGZyb20gXGAkZnVuY190b190b29sX2ZpbGVfcmVzdWx0JyIKKwkgICAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgIiROTSAkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IHwgJGdsb2JhbF9zeW1ib2xfcGlwZSA+PiAnJG5saXN0JyIKKwkgIGRvbmUKKworCSAgaWYgdGVzdCAtbiAiJGV4Y2x1ZGVfZXhwc3ltcyI7IHRoZW4KKwkgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwkgICAgICBldmFsICckRUdSRVAgLXYgIiAoJGV4Y2x1ZGVfZXhwc3ltcykkIiAiJG5saXN0IiA+ICIkbmxpc3QiVCcKKwkgICAgICBldmFsICckTVYgIiRubGlzdCJUICIkbmxpc3QiJworCSAgICB9CisJICBmaQorCisJICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiOyB0aGVuCisJICAgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgICAgZXZhbCAnJEVHUkVQIC1lICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICIkbmxpc3QiID4gIiRubGlzdCJUJworCSAgICAgIGV2YWwgJyRNViAiJG5saXN0IlQgIiRubGlzdCInCisJICAgIH0KKwkgIGZpCisKKwkgICMgUHJlcGFyZSB0aGUgbGlzdCBvZiBleHBvcnRlZCBzeW1ib2xzCisJICBpZiB0ZXN0IC16ICIkZXhwb3J0X3N5bWJvbHMiOyB0aGVuCisJICAgIGV4cG9ydF9zeW1ib2xzPSIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5leHAiCisJICAgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgICAgJFJNICRleHBvcnRfc3ltYm9scworCSAgICAgIGV2YWwgIiR7U0VEfSAtbiAtZSAnL146IEBQUk9HUkFNQCAkL2QnIC1lICdzL14uKiBcKC4qXCkkL1wxL3AnICInPCAiJG5saXN0IiA+ICIkZXhwb3J0X3N5bWJvbHMiJworCSAgICAgIGNhc2UgJGhvc3QgaW4KKwkgICAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqICkKKyAgICAgICAgICAgICAgICBldmFsICJlY2hvIEVYUE9SVFMgIic+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiJworICAgICAgICAgICAgICAgIGV2YWwgJ2NhdCAiJGV4cG9ydF9zeW1ib2xzIiA+PiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIicKKwkgICAgICAgIDs7CisJICAgICAgZXNhYworCSAgICB9CisJICBlbHNlCisJICAgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgICAgZXZhbCAiJHtTRUR9IC1lICdzL1woW10uWypeJF1cKS9cXFxcXDEvZycgLWUgJ3MvXi8gLycgLWUgJ3MvJC8kLyciJyA8ICIkZXhwb3J0X3N5bWJvbHMiID4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmV4cCInCisJICAgICAgZXZhbCAnJEdSRVAgLWYgIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmV4cCIgPCAiJG5saXN0IiA+ICIkbmxpc3QiVCcKKwkgICAgICBldmFsICckTVYgIiRubGlzdCJUICIkbmxpc3QiJworCSAgICAgIGNhc2UgJGhvc3QgaW4KKwkgICAgICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyogKQorCSAgICAgICAgICBldmFsICJlY2hvIEVYUE9SVFMgIic+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiJworCSAgICAgICAgICBldmFsICdjYXQgIiRubGlzdCIgPj4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiInCisJICAgICAgICAgIDs7CisJICAgICAgZXNhYworCSAgICB9CisJICBmaQorCWZpCisKKwlmb3IgZGxwcmVmaWxlIGluICRkbHByZWZpbGVzOyBkbworCSAgZnVuY192ZXJib3NlICJleHRyYWN0aW5nIGdsb2JhbCBDIHN5bWJvbHMgZnJvbSBcYCRkbHByZWZpbGUnIgorCSAgZnVuY19iYXNlbmFtZSAiJGRscHJlZmlsZSIKKwkgIG5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKyAgICAgICAgICBjYXNlICRob3N0IGluCisJICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyogKQorCSAgICAgICMgaWYgYW4gaW1wb3J0IGxpYnJhcnksIHdlIG5lZWQgdG8gb2J0YWluIGRsbmFtZQorCSAgICAgIGlmIGZ1bmNfd2luMzJfaW1wb3J0X2xpYl9wICIkZGxwcmVmaWxlIjsgdGhlbgorCSAgICAgICAgZnVuY190cl9zaCAiJGRscHJlZmlsZSIKKwkgICAgICAgIGV2YWwgImN1cnJfbGFmaWxlPVwkbGliZmlsZV8kZnVuY190cl9zaF9yZXN1bHQiCisJICAgICAgICBkbHByZWZpbGVfZGxiYXNlbmFtZT0iIgorCSAgICAgICAgaWYgdGVzdCAtbiAiJGN1cnJfbGFmaWxlIiAmJiBmdW5jX2xhbGliX3AgIiRjdXJyX2xhZmlsZSI7IHRoZW4KKwkgICAgICAgICAgIyBVc2Ugc3Vic2hlbGwsIHRvIGF2b2lkIGNsb2JiZXJpbmcgY3VycmVudCB2YXJpYWJsZSB2YWx1ZXMKKwkgICAgICAgICAgZGxwcmVmaWxlX2RsbmFtZT1gc291cmNlICIkY3Vycl9sYWZpbGUiICYmIGVjaG8gIiRkbG5hbWUiYAorCSAgICAgICAgICBpZiB0ZXN0IC1uICIkZGxwcmVmaWxlX2RsbmFtZSIgOyB0aGVuCisJICAgICAgICAgICAgZnVuY19iYXNlbmFtZSAiJGRscHJlZmlsZV9kbG5hbWUiCisJICAgICAgICAgICAgZGxwcmVmaWxlX2RsYmFzZW5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkgICAgICAgICAgZWxzZQorCSAgICAgICAgICAgICMgbm8gbGFmaWxlLiB1c2VyIGV4cGxpY2l0bHkgcmVxdWVzdGVkIC1kbHByZW9wZW4gPGltcG9ydCBsaWJyYXJ5Pi4KKwkgICAgICAgICAgICAkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQgIiRkbHByZWZpbGUiCisJICAgICAgICAgICAgZGxwcmVmaWxlX2RsYmFzZW5hbWU9JHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0CisJICAgICAgICAgIGZpCisJICAgICAgICBmaQorCSAgICAgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwkgICAgICAgICAgaWYgdGVzdCAtbiAiJGRscHJlZmlsZV9kbGJhc2VuYW1lIiA7IHRoZW4KKwkgICAgICAgICAgICBldmFsICckRUNITyAiOiAkZGxwcmVmaWxlX2RsYmFzZW5hbWUiID4+ICIkbmxpc3QiJworCSAgICAgICAgICBlbHNlCisJICAgICAgICAgICAgZnVuY193YXJuaW5nICJDb3VsZCBub3QgY29tcHV0ZSBETEwgbmFtZSBmcm9tICRuYW1lIgorCSAgICAgICAgICAgIGV2YWwgJyRFQ0hPICI6ICRuYW1lICIgPj4gIiRubGlzdCInCisJICAgICAgICAgIGZpCisJICAgICAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkZGxwcmVmaWxlIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorCSAgICAgICAgICBldmFsICIkTk0gXCIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0XCIgMj4vZGV2L251bGwgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwKKwkgICAgICAgICAgICAkU0VEIC1lICcvSSBfX2ltcC9kJyAtZSAncy9JIF9fbm1fL0QgLztzL19ubV9fLy8nID4+ICckbmxpc3QnIgorCSAgICAgICAgfQorCSAgICAgIGVsc2UgIyBub3QgYW4gaW1wb3J0IGxpYgorCSAgICAgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwkgICAgICAgICAgZXZhbCAnJEVDSE8gIjogJG5hbWUgIiA+PiAiJG5saXN0IicKKwkgICAgICAgICAgZnVuY190b190b29sX2ZpbGUgIiRkbHByZWZpbGUiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisJICAgICAgICAgIGV2YWwgIiROTSBcIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHRcIiAyPi9kZXYvbnVsbCB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgPj4gJyRubGlzdCciCisJICAgICAgICB9CisJICAgICAgZmkKKwkgICAgOzsKKwkgICAgKikKKwkgICAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgICAgZXZhbCAnJEVDSE8gIjogJG5hbWUgIiA+PiAiJG5saXN0IicKKwkgICAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkZGxwcmVmaWxlIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorCSAgICAgICAgZXZhbCAiJE5NIFwiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdFwiIDI+L2Rldi9udWxsIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSA+PiAnJG5saXN0JyIKKwkgICAgICB9CisJICAgIDs7CisgICAgICAgICAgZXNhYworCWRvbmUKKworCSRvcHRfZHJ5X3J1biB8fCB7CisJICAjIE1ha2Ugc3VyZSB3ZSBoYXZlIGF0IGxlYXN0IGFuIGVtcHR5IGZpbGUuCisJICB0ZXN0IC1mICIkbmxpc3QiIHx8IDogPiAiJG5saXN0IgorCisJICBpZiB0ZXN0IC1uICIkZXhjbHVkZV9leHBzeW1zIjsgdGhlbgorCSAgICAkRUdSRVAgLXYgIiAoJGV4Y2x1ZGVfZXhwc3ltcykkIiAiJG5saXN0IiA+ICIkbmxpc3QiVAorCSAgICAkTVYgIiRubGlzdCJUICIkbmxpc3QiCisJICBmaQorCisJICAjIFRyeSBzb3J0aW5nIGFuZCB1bmlxdWlmeWluZyB0aGUgb3V0cHV0LgorCSAgaWYgJEdSRVAgLXYgIl46ICIgPCAiJG5saXN0IiB8CisJICAgICAgaWYgc29ydCAtayAzIDwvZGV2L251bGwgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJCXNvcnQgLWsgMworCSAgICAgIGVsc2UKKwkJc29ydCArMgorCSAgICAgIGZpIHwKKwkgICAgICB1bmlxID4gIiRubGlzdCJTOyB0aGVuCisJICAgIDoKKwkgIGVsc2UKKwkgICAgJEdSRVAgLXYgIl46ICIgPCAiJG5saXN0IiA+ICIkbmxpc3QiUworCSAgZmkKKworCSAgaWYgdGVzdCAtZiAiJG5saXN0IlM7IHRoZW4KKwkgICAgZXZhbCAiJGdsb2JhbF9zeW1ib2xfdG9fY2RlY2wiJyA8ICIkbmxpc3QiUyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyInCisJICBlbHNlCisJICAgIGVjaG8gJy8qIE5PTkUgKi8nID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIgorCSAgZmkKKworCSAgZWNobyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKKworLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBjaGFyICpuYW1lOworICB2b2lkICphZGRyZXNzOworfSBsdF9kbHN5bWxpc3Q7CitleHRlcm4gTFRfRExTWU1fQ09OU1QgbHRfZGxzeW1saXN0CitsdF8ke215X3ByZWZpeH1fTFRYX3ByZWxvYWRlZF9zeW1ib2xzW107CitMVF9ETFNZTV9DT05TVCBsdF9kbHN5bWxpc3QKK2x0XyR7bXlfcHJlZml4fV9MVFhfcHJlbG9hZGVkX3N5bWJvbHNbXSA9Cit7XAorICB7IFwiJG15X29yaWdpbmF0b3JcIiwgKHZvaWQgKikgMCB9LCIKKworCSAgY2FzZSAkbmVlZF9saWJfcHJlZml4IGluCisJICBubykKKwkgICAgZXZhbCAiJGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MiIDwgIiRubGlzdCIgPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiCisJICAgIDs7CisJICAqKQorCSAgICBldmFsICIkZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IiA8ICIkbmxpc3QiID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIgorCSAgICA7OworCSAgZXNhYworCSAgZWNobyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKKyAgezAsICh2b2lkICopIDB9Cit9OworCisvKiBUaGlzIHdvcmtzIGFyb3VuZCBhIHByb2JsZW0gaW4gRnJlZUJTRCBsaW5rZXIgKi8KKyNpZmRlZiBGUkVFQlNEX1dPUktBUk9VTkQKK3N0YXRpYyBjb25zdCB2b2lkICpsdF9wcmVsb2FkZWRfc2V0dXAoKSB7CisgIHJldHVybiBsdF8ke215X3ByZWZpeH1fTFRYX3ByZWxvYWRlZF9zeW1ib2xzOworfQorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmXAorIgorCX0gIyAhJG9wdF9kcnlfcnVuCisKKwlwaWNfZmxhZ19mb3Jfc3ltdGFibGU9CisJY2FzZSAiJGNvbXBpbGVfY29tbWFuZCAiIGluCisJKiIgLXN0YXRpYyAiKikgOzsKKwkqKQorCSAgY2FzZSAkaG9zdCBpbgorCSAgIyBjb21waWxpbmcgdGhlIHN5bWJvbCB0YWJsZSBmaWxlIHdpdGggcGljX2ZsYWcgd29ya3MgYXJvdW5kCisJICAjIGEgRnJlZUJTRCBidWcgdGhhdCBjYXVzZXMgcHJvZ3JhbXMgdG8gY3Jhc2ggd2hlbiAtbG0gaXMKKwkgICMgbGlua2VkIGJlZm9yZSBhbnkgb3RoZXIgUElDIG9iamVjdC4gIEJ1dCB3ZSBtdXN0IG5vdCB1c2UKKwkgICMgcGljX2ZsYWcgd2hlbiBsaW5raW5nIHdpdGggLXN0YXRpYy4gIFRoZSBwcm9ibGVtIGV4aXN0cyBpbgorCSAgIyBGcmVlQlNEIDIuMi42IGFuZCBpcyBmaXhlZCBpbiBGcmVlQlNEIDMuMS4KKwkgICotKi1mcmVlYnNkMi4qfCotKi1mcmVlYnNkMy4wKnwqLSotZnJlZWJzZGVsZjMuMCopCisJICAgIHBpY19mbGFnX2Zvcl9zeW10YWJsZT0iICRwaWNfZmxhZyAtREZSRUVCU0RfV09SS0FST1VORCIgOzsKKwkgICotKi1ocHV4KikKKwkgICAgcGljX2ZsYWdfZm9yX3N5bXRhYmxlPSIgJHBpY19mbGFnIiAgOzsKKwkgICopCisJICAgIGlmIHRlc3QgIlgkbXlfcGljX3AiICE9IFhubzsgdGhlbgorCSAgICAgIHBpY19mbGFnX2Zvcl9zeW10YWJsZT0iICRwaWNfZmxhZyIKKwkgICAgZmkKKwkgICAgOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworCXN5bXRhYl9jZmxhZ3M9CisJZm9yIGFyZyBpbiAkTFRDRkxBR1M7IGRvCisJICBjYXNlICRhcmcgaW4KKwkgIC1waWUgfCAtZnBpZSB8IC1mUElFKSA7OworCSAgKikgZnVuY19hcHBlbmQgc3ltdGFiX2NmbGFncyAiICRhcmciIDs7CisJICBlc2FjCisJZG9uZQorCisJIyBOb3cgY29tcGlsZSB0aGUgZHluYW1pYyBzeW1ib2wgZmlsZS4KKwlmdW5jX3Nob3dfZXZhbCAnKGNkICRvdXRwdXRfb2JqZGlyICYmICRMVENDJHN5bXRhYl9jZmxhZ3MgLWMkbm9fYnVpbHRpbl9mbGFnJHBpY19mbGFnX2Zvcl9zeW10YWJsZSAiJG15X2Rsc3ltcyIpJyAnZXhpdCAkPycKKworCSMgQ2xlYW4gdXAgdGhlIGdlbmVyYXRlZCBmaWxlcy4KKwlmdW5jX3Nob3dfZXZhbCAnJFJNICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiJG5saXN0IiAiJHtubGlzdH1TIiAiJHtubGlzdH1UIicKKworCSMgVHJhbnNmb3JtIHRoZSBzeW1ib2wgZmlsZSBpbnRvIHRoZSBjb3JyZWN0IG5hbWUuCisJc3ltZmlsZW9iaj0iJG91dHB1dF9vYmpkaXIvJHtteV9vdXRwdXRuYW1lfVMuJG9iamV4dCIKKwljYXNlICRob3N0IGluCisJKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKiApCisJICBpZiB0ZXN0IC1mICIkb3V0cHV0X29iamRpci8kbXlfb3V0cHV0bmFtZS5kZWYiOyB0aGVuCisJICAgIGNvbXBpbGVfY29tbWFuZD1gJEVDSE8gIiRjb21waWxlX2NvbW1hbmQiIHwgJFNFRCAicyVAU1lNRklMRUAlJG91dHB1dF9vYmpkaXIvJG15X291dHB1dG5hbWUuZGVmICRzeW1maWxlb2JqJSJgCisJICAgIGZpbmFsaXplX2NvbW1hbmQ9YCRFQ0hPICIkZmluYWxpemVfY29tbWFuZCIgfCAkU0VEICJzJUBTWU1GSUxFQCUkb3V0cHV0X29iamRpci8kbXlfb3V0cHV0bmFtZS5kZWYgJHN5bWZpbGVvYmolImAKKwkgIGVsc2UKKwkgICAgY29tcGlsZV9jb21tYW5kPWAkRUNITyAiJGNvbXBpbGVfY29tbWFuZCIgfCAkU0VEICJzJUBTWU1GSUxFQCUkc3ltZmlsZW9iaiUiYAorCSAgICBmaW5hbGl6ZV9jb21tYW5kPWAkRUNITyAiJGZpbmFsaXplX2NvbW1hbmQiIHwgJFNFRCAicyVAU1lNRklMRUAlJHN5bWZpbGVvYmolImAKKwkgIGZpCisJICA7OworCSopCisJICBjb21waWxlX2NvbW1hbmQ9YCRFQ0hPICIkY29tcGlsZV9jb21tYW5kIiB8ICRTRUQgInMlQFNZTUZJTEVAJSRzeW1maWxlb2JqJSJgCisJICBmaW5hbGl6ZV9jb21tYW5kPWAkRUNITyAiJGZpbmFsaXplX2NvbW1hbmQiIHwgJFNFRCAicyVAU1lNRklMRUAlJHN5bWZpbGVvYmolImAKKwkgIDs7CisJZXNhYworCTs7CisgICAgICAqKQorCWZ1bmNfZmF0YWxfZXJyb3IgInVua25vd24gc3VmZml4IGZvciBcYCRteV9kbHN5bXMnIgorCTs7CisgICAgICBlc2FjCisgICAgZWxzZQorICAgICAgIyBXZSBrZWVwIGdvaW5nIGp1c3QgaW4gY2FzZSB0aGUgdXNlciBkaWRuJ3QgcmVmZXIgdG8KKyAgICAgICMgbHRfcHJlbG9hZGVkX3N5bWJvbHMuICBUaGUgbGlua2VyIHdpbGwgZmFpbCBpZiBnbG9iYWxfc3ltYm9sX3BpcGUKKyAgICAgICMgcmVhbGx5IHdhcyByZXF1aXJlZC4KKworICAgICAgIyBOdWxsaWZ5IHRoZSBzeW1ib2wgZmlsZS4KKyAgICAgIGNvbXBpbGVfY29tbWFuZD1gJEVDSE8gIiRjb21waWxlX2NvbW1hbmQiIHwgJFNFRCAicyUgQFNZTUZJTEVAJSUiYAorICAgICAgZmluYWxpemVfY29tbWFuZD1gJEVDSE8gIiRmaW5hbGl6ZV9jb21tYW5kIiB8ICRTRUQgInMlIEBTWU1GSUxFQCUlImAKKyAgICBmaQorfQorCisjIGZ1bmNfd2luMzJfbGliaWQgYXJnCisjIHJldHVybiB0aGUgbGlicmFyeSB0eXBlIG9mIGZpbGUgJ2FyZycKKyMKKyMgTmVlZCBhIGxvdCBvZiBnb28gdG8gaGFuZGxlICpib3RoKiBETExzIGFuZCBpbXBvcnQgbGlicworIyBIYXMgdG8gYmUgYSBzaGVsbCBmdW5jdGlvbiBpbiBvcmRlciB0byAnZWF0JyB0aGUgYXJndW1lbnQKKyMgdGhhdCBpcyBzdXBwbGllZCB3aGVuICRmaWxlX21hZ2ljX2NvbW1hbmQgaXMgY2FsbGVkLgorIyBEZXNwaXRlIHRoZSBuYW1lLCBhbHNvIGRlYWwgd2l0aCA2NCBiaXQgYmluYXJpZXMuCitmdW5jX3dpbjMyX2xpYmlkICgpCit7CisgICRvcHRfZGVidWcKKyAgd2luMzJfbGliaWRfdHlwZT0idW5rbm93biIKKyAgd2luMzJfZmlsZXJlcz1gZmlsZSAtTCAkMSAyPi9kZXYvbnVsbGAKKyAgY2FzZSAkd2luMzJfZmlsZXJlcyBpbgorICAqYXJcIGFyY2hpdmVcIGltcG9ydFwgbGlicmFyeSopICMgZGVmaW5pdGVseSBpbXBvcnQKKyAgICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgYXJjaGl2ZSBpbXBvcnQiCisgICAgOzsKKyAgKmFyXCBhcmNoaXZlKikgIyBjb3VsZCBiZSBhbiBpbXBvcnQsIG9yIHN0YXRpYworICAgICMgS2VlcCB0aGUgZWdyZXAgcGF0dGVybiBpbiBzeW5jIHdpdGggdGhlIG9uZSBpbiBfTFRfQ0hFQ0tfTUFHSUNfTUVUSE9ELgorICAgIGlmIGV2YWwgJE9CSkRVTVAgLWYgJDEgfCAkU0VEIC1lICcxMHEnIDI+L2Rldi9udWxsIHwKKyAgICAgICAkRUdSRVAgJ2ZpbGUgZm9ybWF0IChwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpP3xwZS1hcm0td2luY2V8cGUteDg2LTY0KScgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgZnVuY190b190b29sX2ZpbGUgIiQxIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorICAgICAgd2luMzJfbm1yZXM9YGV2YWwgJE5NIC1mIHBvc2l4IC1BIFwiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdFwiIHwKKwkkU0VEIC1uIC1lICcKKwkgICAgMSwxMDB7CisJCS8gSSAveworCQkgICAgcywuKixpbXBvcnQsCisJCSAgICBwCisJCSAgICBxCisJCX0KKwkgICAgfSdgCisgICAgICBjYXNlICR3aW4zMl9ubXJlcyBpbgorICAgICAgaW1wb3J0KikgIHdpbjMyX2xpYmlkX3R5cGU9Ing4NiBhcmNoaXZlIGltcG9ydCI7OworICAgICAgKikgICAgICAgIHdpbjMyX2xpYmlkX3R5cGU9Ing4NiBhcmNoaXZlIHN0YXRpYyI7OworICAgICAgZXNhYworICAgIGZpCisgICAgOzsKKyAgKkRMTCopCisgICAgd2luMzJfbGliaWRfdHlwZT0ieDg2IERMTCIKKyAgICA7OworICAqZXhlY3V0YWJsZSopICMgYnV0IHNoZWxsIHNjcmlwdHMgYXJlICJleGVjdXRhYmxlIiB0b28uLi4KKyAgICBjYXNlICR3aW4zMl9maWxlcmVzIGluCisgICAgKk1TXCBXaW5kb3dzXCBQRVwgSW50ZWwqKQorICAgICAgd2luMzJfbGliaWRfdHlwZT0ieDg2IERMTCIKKyAgICAgIDs7CisgICAgZXNhYworICAgIDs7CisgIGVzYWMKKyAgJEVDSE8gIiR3aW4zMl9saWJpZF90eXBlIgorfQorCisjIGZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYiBBUkcKKyMKKyMgUGxhdGZvcm0tc3BlY2lmaWMgZnVuY3Rpb24gdG8gZXh0cmFjdCB0aGUKKyMgbmFtZSBvZiB0aGUgRExMIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkCisjIGltcG9ydCBsaWJyYXJ5IEFSRy4KKyMgSW52b2tlZCBieSBldmFsJ2luZyB0aGUgbGlidG9vbCB2YXJpYWJsZQorIyAgICAkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKKyMgUmVzdWx0IGlzIGF2YWlsYWJsZSBpbiB0aGUgdmFyaWFibGUKKyMgICAgJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0CitmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWIgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdD1gJERMTFRPT0wgLS1pZGVudGlmeS1zdHJpY3QgLS1pZGVudGlmeSAiJDEiYAorfQorCisjIGZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFja19jb3JlIFNFQ1RJT05fTkFNRSBMSUJOQU1FcworIworIyBUaGUgaXMgdGhlIGNvcmUgb2YgYSBmYWxsYmFjayBpbXBsZW1lbnRhdGlvbiBvZiBhCisjIHBsYXRmb3JtLXNwZWNpZmljIGZ1bmN0aW9uIHRvIGV4dHJhY3QgdGhlIG5hbWUgb2YgdGhlCisjIERMTCBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZCBpbXBvcnQgbGlicmFyeSBMSUJOQU1FLgorIworIyBTRUNUSU9OX05BTUUgaXMgZWl0aGVyIC5pZGF0YSQ2IG9yIC5pZGF0YSQ3LCBkZXBlbmRpbmcKKyMgb24gdGhlIHBsYXRmb3JtIGFuZCBjb21waWxlciB0aGF0IGNyZWF0ZWQgdGhlIGltcGxpYi4KKyMKKyMgRWNob3MgdGhlIG5hbWUgb2YgdGhlIERMTCBhc3NvY2lhdGVkIHdpdGggdGhlCisjIHNwZWNpZmllZCBpbXBvcnQgbGlicmFyeS4KK2Z1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFja19jb3JlICgpCit7CisgICRvcHRfZGVidWcKKyAgbWF0Y2hfbGl0ZXJhbD1gJEVDSE8gIiQxIiB8ICRTRUQgIiRzZWRfbWFrZV9saXRlcmFsX3JlZ2V4ImAKKyAgJE9CSkRVTVAgLXMgLS1zZWN0aW9uICIkMSIgIiQyIiAyPi9kZXYvbnVsbCB8CisgICAgJFNFRCAnL15Db250ZW50cyBvZiBzZWN0aW9uICciJG1hdGNoX2xpdGVyYWwiJzoveworICAgICAgIyBQbGFjZSBtYXJrZXIgYXQgYmVnaW5uaW5nIG9mIGFyY2hpdmUgbWVtYmVyIGRsbG5hbWUgc2VjdGlvbgorICAgICAgcy8uKi89PT09TUFSSz09PT0vCisgICAgICBwCisgICAgICBkCisgICAgfQorICAgICMgVGhlc2UgbGluZXMgY2FuIHNvbWV0aW1lcyBiZSBsb25nZXIgdGhhbiA0MyBjaGFyYWN0ZXJzLCBidXQKKyAgICAjIGFyZSBhbHdheXMgdW5pbnRlcmVzdGluZworICAgIC86WwkgXSpmaWxlIGZvcm1hdCBwZVtpXVx7LDFcfS0vZAorICAgIC9eSW4gYXJjaGl2ZSBbXjpdKjovZAorICAgICMgRW5zdXJlIG1hcmtlciBpcyBwcmludGVkCisgICAgL149PT09TUFSSz09PT0vcAorICAgICMgUmVtb3ZlIGFsbCBsaW5lcyB3aXRoIGxlc3MgdGhhbiA0MyBjaGFyYWN0ZXJzCisgICAgL14uXHs0M1x9LyFkCisgICAgIyBGcm9tIHJlbWFpbmluZyBsaW5lcywgcmVtb3ZlIGZpcnN0IDQzIGNoYXJhY3RlcnMKKyAgICBzL14uXHs0M1x9Ly8nIHwKKyAgICAkU0VEIC1uICcKKyAgICAgICMgSm9pbiBtYXJrZXIgYW5kIGFsbCBsaW5lcyB1bnRpbCBuZXh0IG1hcmtlciBpbnRvIGEgc2luZ2xlIGxpbmUKKyAgICAgIC9ePT09PU1BUks9PT09LyBiIHBhcmEKKyAgICAgIEgKKyAgICAgICQgYiBwYXJhCisgICAgICBiCisgICAgICA6cGFyYQorICAgICAgeAorICAgICAgcy9cbi8vZworICAgICAgIyBSZW1vdmUgdGhlIG1hcmtlcgorICAgICAgcy9ePT09PU1BUks9PT09Ly8KKyAgICAgICMgUmVtb3ZlIHRyYWlsaW5nIGRvdHMgYW5kIHdoaXRlc3BhY2UKKyAgICAgIHMvW1wuIFx0XSokLy8KKyAgICAgICMgUHJpbnQKKyAgICAgIC8uL3AnIHwKKyAgICAjIHdlIG5vdyBoYXZlIGEgbGlzdCwgb25lIGVudHJ5IHBlciBsaW5lLCBvZiB0aGUgc3RyaW5naWZpZWQKKyAgICAjIGNvbnRlbnRzIG9mIHRoZSBhcHByb3ByaWF0ZSBzZWN0aW9uIG9mIGFsbCBtZW1iZXJzIG9mIHRoZQorICAgICMgYXJjaGl2ZSB3aGljaCBwb3NzZXNzIHRoYXQgc2VjdGlvbi4gSGV1cmlzdGljOiBlbGltaW5hdGUKKyAgICAjIGFsbCB0aG9zZSB3aGljaCBoYXZlIGEgZmlyc3Qgb3Igc2Vjb25kIGNoYXJhY3RlciB0aGF0IGlzCisgICAgIyBhICcuJyAodGhhdCBpcywgb2JqZHVtcCdzIHJlcHJlc2VudGF0aW9uIG9mIGFuIHVucHJpbnRhYmxlCisgICAgIyBjaGFyYWN0ZXIuKSBUaGlzIHNob3VsZCB3b3JrIGZvciBhbGwgYXJjaGl2ZXMgd2l0aCBsZXNzIHRoYW4KKyAgICAjIDB4MzAyZiBleHBvcnRzIC0tIGJ1dCB3aWxsIGZhaWwgZm9yIERMTHMgd2hvc2UgbmFtZSBhY3R1YWxseQorICAgICMgYmVnaW5zIHdpdGggYSBsaXRlcmFsICcuJyBvciBhIHNpbmdsZSBjaGFyYWN0ZXIgZm9sbG93ZWQgYnkKKyAgICAjIGEgJy4nLgorICAgICMKKyAgICAjIE9mIHRob3NlIHRoYXQgcmVtYWluLCBwcmludCB0aGUgZmlyc3Qgb25lLgorICAgICRTRUQgLWUgJy9eXC4vZDsvXi5cLi9kO3EnCit9CisKKyMgZnVuY19jeWdtaW5nX2dudV9pbXBsaWJfcCBBUkcKKyMgVGhpcyBwcmVkaWNhdGUgcmV0dXJucyB3aXRoIHplcm8gc3RhdHVzIChUUlVFKSBpZgorIyBBUkcgaXMgYSBHTlUvYmludXRpbHMtc3R5bGUgaW1wb3J0IGxpYnJhcnkuIFJldHVybnMKKyMgd2l0aCBub256ZXJvIHN0YXR1cyAoRkFMU0UpIG90aGVyd2lzZS4KK2Z1bmNfY3lnbWluZ19nbnVfaW1wbGliX3AgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBmdW5jX3RvX3Rvb2xfZmlsZSAiJDEiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisgIGZ1bmNfY3lnbWluZ19nbnVfaW1wbGliX3RtcD1gJE5NICIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiB8IGV2YWwgIiRnbG9iYWxfc3ltYm9sX3BpcGUiIHwgJEVHUkVQICcgKF9oZWFkX1tBLVphLXowLTlfXStfW2FkXWwqfFtBLVphLXowLTlfXStfW2FkXWwqX2luYW1lKSQnYAorICB0ZXN0IC1uICIkZnVuY19jeWdtaW5nX2dudV9pbXBsaWJfdG1wIgorfQorCisjIGZ1bmNfY3lnbWluZ19tc19pbXBsaWJfcCBBUkcKKyMgVGhpcyBwcmVkaWNhdGUgcmV0dXJucyB3aXRoIHplcm8gc3RhdHVzIChUUlVFKSBpZgorIyBBUkcgaXMgYW4gTVMtc3R5bGUgaW1wb3J0IGxpYnJhcnkuIFJldHVybnMKKyMgd2l0aCBub256ZXJvIHN0YXR1cyAoRkFMU0UpIG90aGVyd2lzZS4KK2Z1bmNfY3lnbWluZ19tc19pbXBsaWJfcCAoKQoreworICAkb3B0X2RlYnVnCisgIGZ1bmNfdG9fdG9vbF9maWxlICIkMSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKyAgZnVuY19jeWdtaW5nX21zX2ltcGxpYl90bXA9YCROTSAiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIgfCBldmFsICIkZ2xvYmFsX3N5bWJvbF9waXBlIiB8ICRHUkVQICdfTlVMTF9JTVBPUlRfREVTQ1JJUFRPUidgCisgIHRlc3QgLW4gIiRmdW5jX2N5Z21pbmdfbXNfaW1wbGliX3RtcCIKK30KKworIyBmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2sgQVJHCisjIFBsYXRmb3JtLXNwZWNpZmljIGZ1bmN0aW9uIHRvIGV4dHJhY3QgdGhlCisjIG5hbWUgb2YgdGhlIERMTCBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZAorIyBpbXBvcnQgbGlicmFyeSBBUkcuCisjCisjIFRoaXMgZmFsbGJhY2sgaW1wbGVtZW50YXRpb24gaXMgZm9yIHVzZSB3aGVuICRETExUT09MCisjIGRvZXMgbm90IHN1cHBvcnQgdGhlIC0taWRlbnRpZnktc3RyaWN0IG9wdGlvbi4KKyMgSW52b2tlZCBieSBldmFsJ2luZyB0aGUgbGlidG9vbCB2YXJpYWJsZQorIyAgICAkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKKyMgUmVzdWx0IGlzIGF2YWlsYWJsZSBpbiB0aGUgdmFyaWFibGUKKyMgICAgJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0CitmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2sgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBpZiBmdW5jX2N5Z21pbmdfZ251X2ltcGxpYl9wICIkMSIgOyB0aGVuCisgICAgIyBiaW51dGlscyBpbXBvcnQgbGlicmFyeQorICAgIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0PWBmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2tfY29yZSAnLmlkYXRhJDcnICIkMSJgCisgIGVsaWYgZnVuY19jeWdtaW5nX21zX2ltcGxpYl9wICIkMSIgOyB0aGVuCisgICAgIyBtcy1nZW5lcmF0ZWQgaW1wb3J0IGxpYnJhcnkKKyAgICBzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdD1gZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrX2NvcmUgJy5pZGF0YSQ2JyAiJDEiYAorICBlbHNlCisgICAgIyB1bmtub3duCisgICAgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQ9IiIKKyAgZmkKK30KKworCisjIGZ1bmNfZXh0cmFjdF9hbl9hcmNoaXZlIGRpciBvbGRsaWIKK2Z1bmNfZXh0cmFjdF9hbl9hcmNoaXZlICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIGZfZXhfYW5fYXJfZGlyPSIkMSI7IHNoaWZ0CisgICAgZl9leF9hbl9hcl9vbGRsaWI9IiQxIgorICAgIGlmIHRlc3QgIiRsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb24iID0geWVzOyB0aGVuCisgICAgICBsb2NrZmlsZT0kZl9leF9hbl9hcl9vbGRsaWIubG9jaworICAgICAgdW50aWwgJG9wdF9kcnlfcnVuIHx8IGxuICIkcHJvZ3BhdGgiICIkbG9ja2ZpbGUiIDI+L2Rldi9udWxsOyBkbworCWZ1bmNfZWNobyAiV2FpdGluZyBmb3IgJGxvY2tmaWxlIHRvIGJlIHJlbW92ZWQiCisJc2xlZXAgMgorICAgICAgZG9uZQorICAgIGZpCisgICAgZnVuY19zaG93X2V2YWwgIihjZCBcJGZfZXhfYW5fYXJfZGlyICYmICRBUiB4IFwiXCRmX2V4X2FuX2FyX29sZGxpYlwiKSIgXAorCQkgICAnc3RhdD0kPzsgcm0gLWYgIiRsb2NrZmlsZSI7IGV4aXQgJHN0YXQnCisgICAgaWYgdGVzdCAiJGxvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbiIgPSB5ZXM7IHRoZW4KKyAgICAgICRvcHRfZHJ5X3J1biB8fCBybSAtZiAiJGxvY2tmaWxlIgorICAgIGZpCisgICAgaWYgKCRBUiB0ICIkZl9leF9hbl9hcl9vbGRsaWIiIHwgc29ydCB8IHNvcnQgLXVjID4vZGV2L251bGwgMj4mMSk7IHRoZW4KKyAgICAgOgorICAgIGVsc2UKKyAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgIm9iamVjdCBuYW1lIGNvbmZsaWN0cyBpbiBhcmNoaXZlOiAkZl9leF9hbl9hcl9kaXIvJGZfZXhfYW5fYXJfb2xkbGliIgorICAgIGZpCit9CisKKworIyBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgZ2VudG9wIG9sZGxpYiAuLi4KK2Z1bmNfZXh0cmFjdF9hcmNoaXZlcyAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBteV9nZW50b3A9IiQxIjsgc2hpZnQKKyAgICBteV9vbGRsaWJzPSR7MSsiJEAifQorICAgIG15X29sZG9ianM9IiIKKyAgICBteV94bGliPSIiCisgICAgbXlfeGFicz0iIgorICAgIG15X3hkaXI9IiIKKworICAgIGZvciBteV94bGliIGluICRteV9vbGRsaWJzOyBkbworICAgICAgIyBFeHRyYWN0IHRoZSBvYmplY3RzLgorICAgICAgY2FzZSAkbXlfeGxpYiBpbgorCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgbXlfeGFicz0iJG15X3hsaWIiIDs7CisJKikgbXlfeGFicz1gcHdkYCIvJG15X3hsaWIiIDs7CisgICAgICBlc2FjCisgICAgICBmdW5jX2Jhc2VuYW1lICIkbXlfeGxpYiIKKyAgICAgIG15X3hsaWI9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKyAgICAgIG15X3hsaWJfdT0kbXlfeGxpYgorICAgICAgd2hpbGUgOjsgZG8KKyAgICAgICAgY2FzZSAiICRleHRyYWN0ZWRfYXJjaGl2ZXMgIiBpbgorCSoiICRteV94bGliX3UgIiopCisJICBmdW5jX2FyaXRoICRleHRyYWN0ZWRfc2VyaWFsICsgMQorCSAgZXh0cmFjdGVkX3NlcmlhbD0kZnVuY19hcml0aF9yZXN1bHQKKwkgIG15X3hsaWJfdT1sdCRleHRyYWN0ZWRfc2VyaWFsLSRteV94bGliIDs7CisJKikgYnJlYWsgOzsKKwllc2FjCisgICAgICBkb25lCisgICAgICBleHRyYWN0ZWRfYXJjaGl2ZXM9IiRleHRyYWN0ZWRfYXJjaGl2ZXMgJG15X3hsaWJfdSIKKyAgICAgIG15X3hkaXI9IiRteV9nZW50b3AvJG15X3hsaWJfdSIKKworICAgICAgZnVuY19ta2Rpcl9wICIkbXlfeGRpciIKKworICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgKi1kYXJ3aW4qKQorCWZ1bmNfdmVyYm9zZSAiRXh0cmFjdGluZyAkbXlfeGFicyIKKwkjIERvIG5vdCBib3RoZXIgZG9pbmcgYW55dGhpbmcgaWYganVzdCBhIGRyeSBydW4KKwkkb3B0X2RyeV9ydW4gfHwgeworCSAgZGFyd2luX29yaWdfZGlyPWBwd2RgCisJICBjZCAkbXlfeGRpciB8fCBleGl0ICQ/CisJICBkYXJ3aW5fYXJjaGl2ZT0kbXlfeGFicworCSAgZGFyd2luX2N1cmRpcj1gcHdkYAorCSAgZGFyd2luX2Jhc2VfYXJjaGl2ZT1gYmFzZW5hbWUgIiRkYXJ3aW5fYXJjaGl2ZSJgCisJICBkYXJ3aW5fYXJjaGVzPWAkTElQTyAtaW5mbyAiJGRhcndpbl9hcmNoaXZlIiAyPi9kZXYvbnVsbCB8ICRHUkVQIEFyY2hpdGVjdHVyZXMgMj4vZGV2L251bGwgfHwgdHJ1ZWAKKwkgIGlmIHRlc3QgLW4gIiRkYXJ3aW5fYXJjaGVzIjsgdGhlbgorCSAgICBkYXJ3aW5fYXJjaGVzPWAkRUNITyAiJGRhcndpbl9hcmNoZXMiIHwgJFNFRCAtZSAncy8uKmFyZTovLydgCisJICAgIGRhcndpbl9hcmNoPQorCSAgICBmdW5jX3ZlcmJvc2UgIiRkYXJ3aW5fYmFzZV9hcmNoaXZlIGhhcyBtdWx0aXBsZSBhcmNoaXRlY3R1cmVzICRkYXJ3aW5fYXJjaGVzIgorCSAgICBmb3IgZGFyd2luX2FyY2ggaW4gICRkYXJ3aW5fYXJjaGVzIDsgZG8KKwkgICAgICBmdW5jX21rZGlyX3AgInVuZmF0LSQkLyR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0tJHtkYXJ3aW5fYXJjaH0iCisJICAgICAgJExJUE8gLXRoaW4gJGRhcndpbl9hcmNoIC1vdXRwdXQgInVuZmF0LSQkLyR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0tJHtkYXJ3aW5fYXJjaH0vJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfSIgIiR7ZGFyd2luX2FyY2hpdmV9IgorCSAgICAgIGNkICJ1bmZhdC0kJC8ke2Rhcndpbl9iYXNlX2FyY2hpdmV9LSR7ZGFyd2luX2FyY2h9IgorCSAgICAgIGZ1bmNfZXh0cmFjdF9hbl9hcmNoaXZlICJgcHdkYCIgIiR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0iCisJICAgICAgY2QgIiRkYXJ3aW5fY3VyZGlyIgorCSAgICAgICRSTSAidW5mYXQtJCQvJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfS0ke2Rhcndpbl9hcmNofS8ke2Rhcndpbl9iYXNlX2FyY2hpdmV9IgorCSAgICBkb25lICMgJGRhcndpbl9hcmNoZXMKKyAgICAgICAgICAgICMjIE9rYXkgbm93IHdlJ3ZlIGEgYnVuY2ggb2YgdGhpbiBvYmplY3RzLCBnb3R0YSBmYXR0ZW4gdGhlbSB1cCA6KQorCSAgICBkYXJ3aW5fZmlsZWxpc3Q9YGZpbmQgdW5mYXQtJCQgLXR5cGUgZiAtbmFtZSBcKi5vIC1wcmludCAtbyAtbmFtZSBcKi5sbyAtcHJpbnQgfCAkU0VEIC1lICIkYmFzZW5hbWUiIHwgc29ydCAtdWAKKwkgICAgZGFyd2luX2ZpbGU9CisJICAgIGRhcndpbl9maWxlcz0KKwkgICAgZm9yIGRhcndpbl9maWxlIGluICRkYXJ3aW5fZmlsZWxpc3Q7IGRvCisJICAgICAgZGFyd2luX2ZpbGVzPWBmaW5kIHVuZmF0LSQkIC1uYW1lICRkYXJ3aW5fZmlsZSAtcHJpbnQgfCBzb3J0IHwgJE5MMlNQYAorCSAgICAgICRMSVBPIC1jcmVhdGUgLW91dHB1dCAiJGRhcndpbl9maWxlIiAkZGFyd2luX2ZpbGVzCisJICAgIGRvbmUgIyAkZGFyd2luX2ZpbGVsaXN0CisJICAgICRSTSAtcmYgdW5mYXQtJCQKKwkgICAgY2QgIiRkYXJ3aW5fb3JpZ19kaXIiCisJICBlbHNlCisJICAgIGNkICRkYXJ3aW5fb3JpZ19kaXIKKwkgICAgZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgIiRteV94ZGlyIiAiJG15X3hhYnMiCisJICBmaSAjICRkYXJ3aW5fYXJjaGVzCisJfSAjICEkb3B0X2RyeV9ydW4KKwk7OworICAgICAgKikKKyAgICAgICAgZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgIiRteV94ZGlyIiAiJG15X3hhYnMiCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIG15X29sZG9ianM9IiRteV9vbGRvYmpzICJgZmluZCAkbXlfeGRpciAtbmFtZSBcKi4kb2JqZXh0IC1wcmludCAtbyAtbmFtZSBcKi5sbyAtcHJpbnQgfCBzb3J0IHwgJE5MMlNQYAorICAgIGRvbmUKKworICAgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQ9IiRteV9vbGRvYmpzIgorfQorCisKKyMgZnVuY19lbWl0X3dyYXBwZXIgW2FyZz1ub10KKyMKKyMgRW1pdCBhIGxpYnRvb2wgd3JhcHBlciBzY3JpcHQgb24gc3Rkb3V0LgorIyBEb24ndCBkaXJlY3RseSBvcGVuIGEgZmlsZSBiZWNhdXNlIHdlIG1heSB3YW50IHRvCisjIGluY29ycG9yYXRlIHRoZSBzY3JpcHQgY29udGVudHMgd2l0aGluIGEgY3lnd2luL21pbmd3CisjIHdyYXBwZXIgZXhlY3V0YWJsZS4gIE11c3QgT05MWSBiZSBjYWxsZWQgZnJvbSB3aXRoaW4KKyMgZnVuY19tb2RlX2xpbmsgYmVjYXVzZSBpdCBkZXBlbmRzIG9uIGEgbnVtYmVyIG9mIHZhcmlhYmxlcworIyBzZXQgdGhlcmVpbi4KKyMKKyMgQVJHIGlzIHRoZSB2YWx1ZSB0aGF0IHRoZSBXUkFQUEVSX1NDUklQVF9CRUxPTkdTX0lOX09CSkRJUgorIyB2YXJpYWJsZSB3aWxsIHRha2UuICBJZiAneWVzJywgdGhlbiB0aGUgZW1pdHRlZCBzY3JpcHQKKyMgd2lsbCBhc3N1bWUgdGhhdCB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIGl0IGlzIHN0b3JlZCBpcworIyB0aGUgJG9iamRpciBkaXJlY3RvcnkuICBUaGlzIGlzIGEgY3lnd2luL21pbmd3LXNwZWNpZmljCisjIGJlaGF2aW9yLgorZnVuY19lbWl0X3dyYXBwZXIgKCkKK3sKKwlmdW5jX2VtaXRfd3JhcHBlcl9hcmcxPSR7MS1ub30KKworCSRFQ0hPICJcCisjISAkU0hFTEwKKworIyAkb3V0cHV0IC0gdGVtcG9yYXJ5IHdyYXBwZXIgc2NyaXB0IGZvciAkb2JqZGlyLyRvdXRwdXRuYW1lCisjIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT04KKyMKKyMgVGhlICRvdXRwdXQgcHJvZ3JhbSBjYW5ub3QgYmUgZGlyZWN0bHkgZXhlY3V0ZWQgdW50aWwgYWxsIHRoZSBsaWJ0b29sCisjIGxpYnJhcmllcyB0aGF0IGl0IGRlcGVuZHMgb24gYXJlIGluc3RhbGxlZC4KKyMKKyMgVGhpcyB3cmFwcGVyIHNjcmlwdCBzaG91bGQgbmV2ZXIgYmUgbW92ZWQgb3V0IG9mIHRoZSBidWlsZCBkaXJlY3RvcnkuCisjIElmIGl0IGlzLCBpdCB3aWxsIG5vdCBvcGVyYXRlIGNvcnJlY3RseS4KKworIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgaGVscHMgdXMgZG8gcm9idXN0IHF1b3RpbmcuICBJdCBiYWNrc2xhc2hpZmllcworIyBtZXRhY2hhcmFjdGVycyB0aGF0IGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluIGRvdWJsZS1xdW90ZWQgc3RyaW5ncy4KK3NlZF9xdW90ZV9zdWJzdD0nJHNlZF9xdW90ZV9zdWJzdCcKKworIyBCZSBCb3VybmUgY29tcGF0aWJsZQoraWYgdGVzdCAtbiBcIlwke1pTSF9WRVJTSU9OK3NldH1cIiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGVtdWxhdGUgc2gKKyAgTlVMTENNRD06CisgICMgWnNoIDMueCBhbmQgNC54IHBlcmZvcm1zIHdvcmQgc3BsaXR0aW5nIG9uIFwkezErXCJcJEBcIn0sIHdoaWNoCisgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCisgIGFsaWFzIC1nICdcJHsxK1wiXCRAXCJ9Jz0nXCJcJEBcIicKKyAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2Vsc2UKKyAgY2FzZSBcYChzZXQgLW8pIDI+L2Rldi9udWxsXGAgaW4gKnBvc2l4Kikgc2V0IC1vIHBvc2l4OzsgZXNhYworZmkKK0JJTl9TSD14cGc0OyBleHBvcnQgQklOX1NIICMgZm9yIFRydTY0CitEVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCisKKyMgVGhlIEhQLVVYIGtzaCBhbmQgUE9TSVggc2hlbGwgcHJpbnQgdGhlIHRhcmdldCBkaXJlY3RvcnkgdG8gc3Rkb3V0CisjIGlmIENEUEFUSCBpcyBzZXQuCisodW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICisKK3JlbGlua19jb21tYW5kPVwiJHJlbGlua19jb21tYW5kXCIKKworIyBUaGlzIGVudmlyb25tZW50IHZhcmlhYmxlIGRldGVybWluZXMgb3VyIG9wZXJhdGlvbiBtb2RlLgoraWYgdGVzdCBcIlwkbGlidG9vbF9pbnN0YWxsX21hZ2ljXCIgPSBcIiRtYWdpY1wiOyB0aGVuCisgICMgaW5zdGFsbCBtb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzOgorICBnZW5lcmF0ZWRfYnlfbGlidG9vbF92ZXJzaW9uPSckbWFjcm9fdmVyc2lvbicKKyAgbm90aW5zdF9kZXBsaWJzPSckbm90aW5zdF9kZXBsaWJzJworZWxzZQorICAjIFdoZW4gd2UgYXJlIHNvdXJjZWQgaW4gZXhlY3V0ZSBtb2RlLCBcJGZpbGUgYW5kIFwkRUNITyBhcmUgYWxyZWFkeSBzZXQuCisgIGlmIHRlc3QgXCJcJGxpYnRvb2xfZXhlY3V0ZV9tYWdpY1wiICE9IFwiJG1hZ2ljXCI7IHRoZW4KKyAgICBmaWxlPVwiXCQwXCIiCisKKyAgICBxRUNITz1gJEVDSE8gIiRFQ0hPIiB8ICRTRUQgIiRzZWRfcXVvdGVfc3Vic3QiYAorICAgICRFQ0hPICJcCisKKyMgQSBmdW5jdGlvbiB0aGF0IGlzIHVzZWQgd2hlbiB0aGVyZSBpcyBubyBwcmludCBidWlsdGluIG9yIHByaW50Zi4KK2Z1bmNfZmFsbGJhY2tfZWNobyAoKQoreworICBldmFsICdjYXQgPDxfTFRFQ0hPX0VPRgorXCQxCitfTFRFQ0hPX0VPRicKK30KKyAgICBFQ0hPPVwiJHFFQ0hPXCIKKyAgZmkKKworIyBWZXJ5IGJhc2ljIG9wdGlvbiBwYXJzaW5nLiBUaGVzZSBvcHRpb25zIGFyZSAoYSkgc3BlY2lmaWMgdG8KKyMgdGhlIGxpYnRvb2wgd3JhcHBlciwgKGIpIGFyZSBpZGVudGljYWwgYmV0d2VlbiB0aGUgd3JhcHBlcgorIyAvc2NyaXB0LyBhbmQgdGhlIHdyYXBwZXIgL2V4ZWN1dGFibGUvIHdoaWNoIGlzIHVzZWQgb25seSBvbgorIyB3aW5kb3dzIHBsYXRmb3JtcywgYW5kIChjKSBhbGwgYmVnaW4gd2l0aCB0aGUgc3RyaW5nICItLWx0LSIKKyMgKGFwcGxpY2F0aW9uIHByb2dyYW1zIGFyZSB1bmxpa2VseSB0byBoYXZlIG9wdGlvbnMgd2hpY2ggbWF0Y2gKKyMgdGhpcyBwYXR0ZXJuKS4KKyMKKyMgVGhlcmUgYXJlIG9ubHkgdHdvIHN1cHBvcnRlZCBvcHRpb25zOiAtLWx0LWRlYnVnIGFuZAorIyAtLWx0LWR1bXAtc2NyaXB0LiBUaGVyZSBpcywgZGVsaWJlcmF0ZWx5LCBubyAtLWx0LWhlbHAuCisjCisjIFRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGlzIHBhcnNpbmcgZnVuY3Rpb24gc2hvdWxkIGJlIHRoZQorIyBzY3JpcHQncyAkMCB2YWx1ZSwgZm9sbG93ZWQgYnkgIiRAIi4KK2x0X29wdGlvbl9kZWJ1Zz0KK2Z1bmNfcGFyc2VfbHRfb3B0aW9ucyAoKQoreworICBsdF9zY3JpcHRfYXJnMD1cJDAKKyAgc2hpZnQKKyAgZm9yIGx0X29wdAorICBkbworICAgIGNhc2UgXCJcJGx0X29wdFwiIGluCisgICAgLS1sdC1kZWJ1ZykgbHRfb3B0aW9uX2RlYnVnPTEgOzsKKyAgICAtLWx0LWR1bXAtc2NyaXB0KQorICAgICAgICBsdF9kdW1wX0Q9XGBcJEVDSE8gXCJYXCRsdF9zY3JpcHRfYXJnMFwiIHwgJFNFRCAtZSAncy9eWC8vJyAtZSAncyUvW14vXSokJSUnXGAKKyAgICAgICAgdGVzdCBcIlhcJGx0X2R1bXBfRFwiID0gXCJYXCRsdF9zY3JpcHRfYXJnMFwiICYmIGx0X2R1bXBfRD0uCisgICAgICAgIGx0X2R1bXBfRj1cYFwkRUNITyBcIlhcJGx0X3NjcmlwdF9hcmcwXCIgfCAkU0VEIC1lICdzL15YLy8nIC1lICdzJV4uKi8lJSdcYAorICAgICAgICBjYXQgXCJcJGx0X2R1bXBfRC9cJGx0X2R1bXBfRlwiCisgICAgICAgIGV4aXQgMAorICAgICAgOzsKKyAgICAtLWx0LSopCisgICAgICAgIFwkRUNITyBcIlVucmVjb2duaXplZCAtLWx0LSBvcHRpb246ICdcJGx0X29wdCdcIiAxPiYyCisgICAgICAgIGV4aXQgMQorICAgICAgOzsKKyAgICBlc2FjCisgIGRvbmUKKworICAjIFByaW50IHRoZSBkZWJ1ZyBiYW5uZXIgaW1tZWRpYXRlbHk6CisgIGlmIHRlc3QgLW4gXCJcJGx0X29wdGlvbl9kZWJ1Z1wiOyB0aGVuCisgICAgZWNobyBcIiR7b3V0cHV0bmFtZX06JHtvdXRwdXR9Olwke0xJTkVOT306IGxpYnRvb2wgd3JhcHBlciAoR05VICRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT05cIiAxPiYyCisgIGZpCit9CisKKyMgVXNlZCB3aGVuIC0tbHQtZGVidWcuIFByaW50cyBpdHMgYXJndW1lbnRzIHRvIHN0ZG91dAorIyAocmVkaXJlY3Rpb24gaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBjYWxsZXIpCitmdW5jX2x0X2R1bXBfYXJncyAoKQoreworICBsdF9kdW1wX2FyZ3NfTj0xOworICBmb3IgbHRfYXJnCisgIGRvCisgICAgXCRFQ0hPIFwiJHtvdXRwdXRuYW1lfToke291dHB1dH06XCR7TElORU5PfTogbmV3YXJndltcJGx0X2R1bXBfYXJnc19OXTogXCRsdF9hcmdcIgorICAgIGx0X2R1bXBfYXJnc19OPVxgZXhwciBcJGx0X2R1bXBfYXJnc19OICsgMVxgCisgIGRvbmUKK30KKworIyBDb3JlIGZ1bmN0aW9uIGZvciBsYXVuY2hpbmcgdGhlIHRhcmdldCBhcHBsaWNhdGlvbgorZnVuY19leGVjX3Byb2dyYW1fY29yZSAoKQoreworIgorICBjYXNlICRob3N0IGluCisgICMgQmFja3NsYXNoZXMgc2VwYXJhdGUgZGlyZWN0b3JpZXMgb24gcGxhaW4gd2luZG93cworICAqLSotbWluZ3cgfCAqLSotb3MyKiB8ICotY2VnY2MqKQorICAgICRFQ0hPICJcCisgICAgICBpZiB0ZXN0IC1uIFwiXCRsdF9vcHRpb25fZGVidWdcIjsgdGhlbgorICAgICAgICBcJEVDSE8gXCIke291dHB1dG5hbWV9OiR7b3V0cHV0fTpcJHtMSU5FTk99OiBuZXdhcmd2WzBdOiBcJHByb2dkaXJcXFxcXCRwcm9ncmFtXCIgMT4mMgorICAgICAgICBmdW5jX2x0X2R1bXBfYXJncyBcJHsxK1wiXCRAXCJ9IDE+JjIKKyAgICAgIGZpCisgICAgICBleGVjIFwiXCRwcm9nZGlyXFxcXFwkcHJvZ3JhbVwiIFwkezErXCJcJEBcIn0KKyIKKyAgICA7OworCisgICopCisgICAgJEVDSE8gIlwKKyAgICAgIGlmIHRlc3QgLW4gXCJcJGx0X29wdGlvbl9kZWJ1Z1wiOyB0aGVuCisgICAgICAgIFwkRUNITyBcIiR7b3V0cHV0bmFtZX06JHtvdXRwdXR9Olwke0xJTkVOT306IG5ld2FyZ3ZbMF06IFwkcHJvZ2Rpci9cJHByb2dyYW1cIiAxPiYyCisgICAgICAgIGZ1bmNfbHRfZHVtcF9hcmdzIFwkezErXCJcJEBcIn0gMT4mMgorICAgICAgZmkKKyAgICAgIGV4ZWMgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCIgXCR7MStcIlwkQFwifQorIgorICAgIDs7CisgIGVzYWMKKyAgJEVDSE8gIlwKKyAgICAgIFwkRUNITyBcIlwkMDogY2Fubm90IGV4ZWMgXCRwcm9ncmFtIFwkKlwiIDE+JjIKKyAgICAgIGV4aXQgMQorfQorCisjIEEgZnVuY3Rpb24gdG8gZW5jYXBzdWxhdGUgbGF1bmNoaW5nIHRoZSB0YXJnZXQgYXBwbGljYXRpb24KKyMgU3RyaXBzIG9wdGlvbnMgaW4gdGhlIC0tbHQtKiBuYW1lc3BhY2UgZnJvbSBcJEAgYW5kCisjIGxhdW5jaGVzIHRhcmdldCBhcHBsaWNhdGlvbiB3aXRoIHRoZSByZW1haW5pbmcgYXJndW1lbnRzLgorZnVuY19leGVjX3Byb2dyYW0gKCkKK3sKKyAgY2FzZSBcIiBcJCogXCIgaW4KKyAgKlxcIC0tbHQtKikKKyAgICBmb3IgbHRfd3JfYXJnCisgICAgZG8KKyAgICAgIGNhc2UgXCRsdF93cl9hcmcgaW4KKyAgICAgIC0tbHQtKikgOzsKKyAgICAgICopIHNldCB4IFwiXCRAXCIgXCJcJGx0X3dyX2FyZ1wiOyBzaGlmdDs7CisgICAgICBlc2FjCisgICAgICBzaGlmdAorICAgIGRvbmUgOzsKKyAgZXNhYworICBmdW5jX2V4ZWNfcHJvZ3JhbV9jb3JlIFwkezErXCJcJEBcIn0KK30KKworICAjIFBhcnNlIG9wdGlvbnMKKyAgZnVuY19wYXJzZV9sdF9vcHRpb25zIFwiXCQwXCIgXCR7MStcIlwkQFwifQorCisgICMgRmluZCB0aGUgZGlyZWN0b3J5IHRoYXQgdGhpcyBzY3JpcHQgbGl2ZXMgaW4uCisgIHRoaXNkaXI9XGBcJEVDSE8gXCJcJGZpbGVcIiB8ICRTRUQgJ3MlL1teL10qJCUlJ1xgCisgIHRlc3QgXCJ4XCR0aGlzZGlyXCIgPSBcInhcJGZpbGVcIiAmJiB0aGlzZGlyPS4KKworICAjIEZvbGxvdyBzeW1ib2xpYyBsaW5rcyB1bnRpbCB3ZSBnZXQgdG8gdGhlIHJlYWwgdGhpc2Rpci4KKyAgZmlsZT1cYGxzIC1sZCBcIlwkZmlsZVwiIHwgJFNFRCAtbiAncy8uKi0+IC8vcCdcYAorICB3aGlsZSB0ZXN0IC1uIFwiXCRmaWxlXCI7IGRvCisgICAgZGVzdGRpcj1cYFwkRUNITyBcIlwkZmlsZVwiIHwgJFNFRCAncyUvW14vXSpcJCUlJ1xgCisKKyAgICAjIElmIHRoZXJlIHdhcyBhIGRpcmVjdG9yeSBjb21wb25lbnQsIHRoZW4gY2hhbmdlIHRoaXNkaXIuCisgICAgaWYgdGVzdCBcInhcJGRlc3RkaXJcIiAhPSBcInhcJGZpbGVcIjsgdGhlbgorICAgICAgY2FzZSBcIlwkZGVzdGRpclwiIGluCisgICAgICBbXFxcXC9dKiB8IFtBLVphLXpdOltcXFxcL10qKSB0aGlzZGlyPVwiXCRkZXN0ZGlyXCIgOzsKKyAgICAgICopIHRoaXNkaXI9XCJcJHRoaXNkaXIvXCRkZXN0ZGlyXCIgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorCisgICAgZmlsZT1cYFwkRUNITyBcIlwkZmlsZVwiIHwgJFNFRCAncyVeLiovJSUnXGAKKyAgICBmaWxlPVxgbHMgLWxkIFwiXCR0aGlzZGlyL1wkZmlsZVwiIHwgJFNFRCAtbiAncy8uKi0+IC8vcCdcYAorICBkb25lCisKKyAgIyBVc3VhbGx5ICdubycsIGV4Y2VwdCBvbiBjeWd3aW4vbWluZ3cgd2hlbiBlbWJlZGRlZCBpbnRvCisgICMgdGhlIGN3cmFwcGVyLgorICBXUkFQUEVSX1NDUklQVF9CRUxPTkdTX0lOX09CSkRJUj0kZnVuY19lbWl0X3dyYXBwZXJfYXJnMQorICBpZiB0ZXN0IFwiXCRXUkFQUEVSX1NDUklQVF9CRUxPTkdTX0lOX09CSkRJUlwiID0gXCJ5ZXNcIjsgdGhlbgorICAgICMgc3BlY2lhbCBjYXNlIGZvciAnLicKKyAgICBpZiB0ZXN0IFwiXCR0aGlzZGlyXCIgPSBcIi5cIjsgdGhlbgorICAgICAgdGhpc2Rpcj1cYHB3ZFxgCisgICAgZmkKKyAgICAjIHJlbW92ZSAubGlicyBmcm9tIHRoaXNkaXIKKyAgICBjYXNlIFwiXCR0aGlzZGlyXCIgaW4KKyAgICAqW1xcXFwvXSRvYmpkaXIgKSB0aGlzZGlyPVxgXCRFQ0hPIFwiXCR0aGlzZGlyXCIgfCAkU0VEICdzJVtcXFxcL11bXlxcXFwvXSokJSUnXGAgOzsKKyAgICAkb2JqZGlyICkgICB0aGlzZGlyPS4gOzsKKyAgICBlc2FjCisgIGZpCisKKyAgIyBUcnkgdG8gZ2V0IHRoZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZS4KKyAgYWJzZGlyPVxgY2QgXCJcJHRoaXNkaXJcIiAmJiBwd2RcYAorICB0ZXN0IC1uIFwiXCRhYnNkaXJcIiAmJiB0aGlzZGlyPVwiXCRhYnNkaXJcIgorIgorCisJaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgPSB5ZXM7IHRoZW4KKwkgICRFQ0hPICJcCisgIHByb2dyYW09bHQtJyRvdXRwdXRuYW1lJyRleGVleHQKKyAgcHJvZ2Rpcj1cIlwkdGhpc2Rpci8kb2JqZGlyXCIKKworICBpZiB0ZXN0ICEgLWYgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCIgfHwKKyAgICAgeyBmaWxlPVxgbHMgLTFkdCBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIiBcIlwkcHJvZ2Rpci8uLi9cJHByb2dyYW1cIiAyPi9kZXYvbnVsbCB8ICR7U0VEfSAxcVxgOyBcXAorICAgICAgIHRlc3QgXCJYXCRmaWxlXCIgIT0gXCJYXCRwcm9nZGlyL1wkcHJvZ3JhbVwiOyB9OyB0aGVuCisKKyAgICBmaWxlPVwiXCRcJC1cJHByb2dyYW1cIgorCisgICAgaWYgdGVzdCAhIC1kIFwiXCRwcm9nZGlyXCI7IHRoZW4KKyAgICAgICRNS0RJUiBcIlwkcHJvZ2RpclwiCisgICAgZWxzZQorICAgICAgJFJNIFwiXCRwcm9nZGlyL1wkZmlsZVwiCisgICAgZmkiCisKKwkgICRFQ0hPICJcCisKKyAgICAjIHJlbGluayBleGVjdXRhYmxlIGlmIG5lY2Vzc2FyeQorICAgIGlmIHRlc3QgLW4gXCJcJHJlbGlua19jb21tYW5kXCI7IHRoZW4KKyAgICAgIGlmIHJlbGlua19jb21tYW5kX291dHB1dD1cYGV2YWwgXCRyZWxpbmtfY29tbWFuZCAyPiYxXGA7IHRoZW4gOgorICAgICAgZWxzZQorCSRFQ0hPIFwiXCRyZWxpbmtfY29tbWFuZF9vdXRwdXRcIiA+JjIKKwkkUk0gXCJcJHByb2dkaXIvXCRmaWxlXCIKKwlleGl0IDEKKyAgICAgIGZpCisgICAgZmkKKworICAgICRNViBcIlwkcHJvZ2Rpci9cJGZpbGVcIiBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIiAyPi9kZXYvbnVsbCB8fAorICAgIHsgJFJNIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiOworICAgICAgJE1WIFwiXCRwcm9nZGlyL1wkZmlsZVwiIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiOyB9CisgICAgJFJNIFwiXCRwcm9nZGlyL1wkZmlsZVwiCisgIGZpIgorCWVsc2UKKwkgICRFQ0hPICJcCisgIHByb2dyYW09JyRvdXRwdXRuYW1lJworICBwcm9nZGlyPVwiXCR0aGlzZGlyLyRvYmpkaXJcIgorIgorCWZpCisKKwkkRUNITyAiXAorCisgIGlmIHRlc3QgLWYgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCI7IHRoZW4iCisKKwkjIGZpeHVwIHRoZSBkbGwgc2VhcmNocGF0aCBpZiB3ZSBuZWVkIHRvLgorCSMKKwkjIEZpeCB0aGUgRExMIHNlYXJjaHBhdGggaWYgd2UgbmVlZCB0by4gIERvIHRoaXMgYmVmb3JlIHByZXBlbmRpbmcKKwkjIHRvIHNobGlicGF0aCwgYmVjYXVzZSBvbiBXaW5kb3dzLCBib3RoIGFyZSBQQVRIIGFuZCB1bmluc3RhbGxlZAorCSMgbGlicmFyaWVzIG11c3QgY29tZSBmaXJzdC4KKwlpZiB0ZXN0IC1uICIkZGxsc2VhcmNocGF0aCI7IHRoZW4KKwkgICRFQ0hPICJcCisgICAgIyBBZGQgdGhlIGRsbCBzZWFyY2ggcGF0aCBjb21wb25lbnRzIHRvIHRoZSBleGVjdXRhYmxlIFBBVEgKKyAgICBQQVRIPSRkbGxzZWFyY2hwYXRoOlwkUEFUSAorIgorCWZpCisKKwkjIEV4cG9ydCBvdXIgc2hsaWJwYXRoX3ZhciBpZiB3ZSBoYXZlIG9uZS4KKwlpZiB0ZXN0ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiA9IHllcyAmJiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciIgJiYgdGVzdCAtbiAiJHRlbXBfcnBhdGgiOyB0aGVuCisJICAkRUNITyAiXAorICAgICMgQWRkIG91ciBvd24gbGlicmFyeSBwYXRoIHRvICRzaGxpYnBhdGhfdmFyCisgICAgJHNobGlicGF0aF92YXI9XCIkdGVtcF9ycGF0aFwkJHNobGlicGF0aF92YXJcIgorCisgICAgIyBTb21lIHN5c3RlbXMgY2Fubm90IGNvcGUgd2l0aCBjb2xvbi10ZXJtaW5hdGVkICRzaGxpYnBhdGhfdmFyCisgICAgIyBUaGUgc2Vjb25kIGNvbG9uIGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBidWcgaW4gQmVPUyBSNCBzZWQKKyAgICAkc2hsaWJwYXRoX3Zhcj1cYFwkRUNITyBcIlwkJHNobGlicGF0aF92YXJcIiB8ICRTRUQgJ3MvOjoqXCQvLydcYAorCisgICAgZXhwb3J0ICRzaGxpYnBhdGhfdmFyCisiCisJZmkKKworCSRFQ0hPICJcCisgICAgaWYgdGVzdCBcIlwkbGlidG9vbF9leGVjdXRlX21hZ2ljXCIgIT0gXCIkbWFnaWNcIjsgdGhlbgorICAgICAgIyBSdW4gdGhlIGFjdHVhbCBwcm9ncmFtIHdpdGggb3VyIGFyZ3VtZW50cy4KKyAgICAgIGZ1bmNfZXhlY19wcm9ncmFtIFwkezErXCJcJEBcIn0KKyAgICBmaQorICBlbHNlCisgICAgIyBUaGUgcHJvZ3JhbSBkb2Vzbid0IGV4aXN0LgorICAgIFwkRUNITyBcIlwkMDogZXJyb3I6IFxcXGBcJHByb2dkaXIvXCRwcm9ncmFtJyBkb2VzIG5vdCBleGlzdFwiIDE+JjIKKyAgICBcJEVDSE8gXCJUaGlzIHNjcmlwdCBpcyBqdXN0IGEgd3JhcHBlciBmb3IgXCRwcm9ncmFtLlwiIDE+JjIKKyAgICBcJEVDSE8gXCJTZWUgdGhlICRQQUNLQUdFIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uXCIgMT4mMgorICAgIGV4aXQgMQorICBmaQorZmlcCisiCit9CisKKworIyBmdW5jX2VtaXRfY3dyYXBwZXJleGVfc3JjCisjIGVtaXQgdGhlIHNvdXJjZSBjb2RlIGZvciBhIHdyYXBwZXIgZXhlY3V0YWJsZSBvbiBzdGRvdXQKKyMgTXVzdCBPTkxZIGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBmdW5jX21vZGVfbGluayBiZWNhdXNlCisjIGl0IGRlcGVuZHMgb24gYSBudW1iZXIgb2YgdmFyaWFibGUgc2V0IHRoZXJlaW4uCitmdW5jX2VtaXRfY3dyYXBwZXJleGVfc3JjICgpCit7CisJY2F0IDw8RU9GCisKKy8qICRjd3JhcHBlcnNvdXJjZSAtIHRlbXBvcmFyeSB3cmFwcGVyIGV4ZWN1dGFibGUgZm9yICRvYmpkaXIvJG91dHB1dG5hbWUKKyAgIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT04KKworICAgVGhlICRvdXRwdXQgcHJvZ3JhbSBjYW5ub3QgYmUgZGlyZWN0bHkgZXhlY3V0ZWQgdW50aWwgYWxsIHRoZSBsaWJ0b29sCisgICBsaWJyYXJpZXMgdGhhdCBpdCBkZXBlbmRzIG9uIGFyZSBpbnN0YWxsZWQuCisKKyAgIFRoaXMgd3JhcHBlciBleGVjdXRhYmxlIHNob3VsZCBuZXZlciBiZSBtb3ZlZCBvdXQgb2YgdGhlIGJ1aWxkIGRpcmVjdG9yeS4KKyAgIElmIGl0IGlzLCBpdCB3aWxsIG5vdCBvcGVyYXRlIGNvcnJlY3RseS4KKyovCitFT0YKKwkgICAgY2F0IDw8IkVPRiIKKyNpZmRlZiBfTVNDX1ZFUgorIyBkZWZpbmUgX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIDEKKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaWZkZWYgX01TQ19WRVIKKyMgaW5jbHVkZSA8ZGlyZWN0Lmg+CisjIGluY2x1ZGUgPHByb2Nlc3MuaD4KKyMgaW5jbHVkZSA8aW8uaD4KKyNlbHNlCisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorIyBpbmNsdWRlIDxzdGRpbnQuaD4KKyMgaWZkZWYgX19DWUdXSU5fXworIyAgaW5jbHVkZSA8aW8uaD4KKyMgZW5kaWYKKyNlbmRpZgorI2luY2x1ZGUgPG1hbGxvYy5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKKy8qIGRlY2xhcmF0aW9ucyBvZiBub24tQU5TSSBmdW5jdGlvbnMgKi8KKyNpZiBkZWZpbmVkKF9fTUlOR1czMl9fKQorIyBpZmRlZiBfX1NUUklDVF9BTlNJX18KK2ludCBfcHV0ZW52IChjb25zdCBjaGFyICopOworIyBlbmRpZgorI2VsaWYgZGVmaW5lZChfX0NZR1dJTl9fKQorIyBpZmRlZiBfX1NUUklDVF9BTlNJX18KK2NoYXIgKnJlYWxwYXRoIChjb25zdCBjaGFyICosIGNoYXIgKik7CitpbnQgcHV0ZW52IChjaGFyICopOworaW50IHNldGVudiAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCk7CisjIGVuZGlmCisvKiAjZWxpZiBkZWZpbmVkIChvdGhlciBwbGF0Zm9ybXMpIC4uLiAqLworI2VuZGlmCisKKy8qIHBvcnRhYmlsaXR5IGRlZmluZXMsIGV4Y2x1ZGluZyBwYXRoIGhhbmRsaW5nIG1hY3JvcyAqLworI2lmIGRlZmluZWQoX01TQ19WRVIpCisjIGRlZmluZSBzZXRtb2RlIF9zZXRtb2RlCisjIGRlZmluZSBzdGF0ICAgIF9zdGF0CisjIGRlZmluZSBjaG1vZCAgIF9jaG1vZAorIyBkZWZpbmUgZ2V0Y3dkICBfZ2V0Y3dkCisjIGRlZmluZSBwdXRlbnYgIF9wdXRlbnYKKyMgZGVmaW5lIFNfSVhVU1IgX1NfSUVYRUMKKyMgaWZuZGVmIF9JTlRQVFJfVF9ERUZJTkVECisjICBkZWZpbmUgX0lOVFBUUl9UX0RFRklORUQKKyMgIGRlZmluZSBpbnRwdHJfdCBpbnQKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQoX19NSU5HVzMyX18pCisjIGRlZmluZSBzZXRtb2RlIF9zZXRtb2RlCisjIGRlZmluZSBzdGF0ICAgIF9zdGF0CisjIGRlZmluZSBjaG1vZCAgIF9jaG1vZAorIyBkZWZpbmUgZ2V0Y3dkICBfZ2V0Y3dkCisjIGRlZmluZSBwdXRlbnYgIF9wdXRlbnYKKyNlbGlmIGRlZmluZWQoX19DWUdXSU5fXykKKyMgZGVmaW5lIEhBVkVfU0VURU5WCisjIGRlZmluZSBGT1BFTl9XQiAid2IiCisvKiAjZWxpZiBkZWZpbmVkIChvdGhlciBwbGF0Zm9ybXMpIC4uLiAqLworI2VuZGlmCisKKyNpZiBkZWZpbmVkKFBBVEhfTUFYKQorIyBkZWZpbmUgTFRfUEFUSE1BWCBQQVRIX01BWAorI2VsaWYgZGVmaW5lZChNQVhQQVRITEVOKQorIyBkZWZpbmUgTFRfUEFUSE1BWCBNQVhQQVRITEVOCisjZWxzZQorIyBkZWZpbmUgTFRfUEFUSE1BWCAxMDI0CisjZW5kaWYKKworI2lmbmRlZiBTX0lYT1RICisjIGRlZmluZSBTX0lYT1RIIDAKKyNlbmRpZgorI2lmbmRlZiBTX0lYR1JQCisjIGRlZmluZSBTX0lYR1JQIDAKKyNlbmRpZgorCisvKiBwYXRoIGhhbmRsaW5nIHBvcnRhYmlsaXR5IG1hY3JvcyAqLworI2lmbmRlZiBESVJfU0VQQVJBVE9SCisjIGRlZmluZSBESVJfU0VQQVJBVE9SICcvJworIyBkZWZpbmUgUEFUSF9TRVBBUkFUT1IgJzonCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9XSU4zMikgfHwgZGVmaW5lZCAoX19NU0RPU19fKSB8fCBkZWZpbmVkIChfX0RKR1BQX18pIHx8IFwKKyAgZGVmaW5lZCAoX19PUzJfXykKKyMgZGVmaW5lIEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNCisjIGRlZmluZSBGT1BFTl9XQiAid2IiCisjIGlmbmRlZiBESVJfU0VQQVJBVE9SXzIKKyMgIGRlZmluZSBESVJfU0VQQVJBVE9SXzIgJ1xcJworIyBlbmRpZgorIyBpZm5kZWYgUEFUSF9TRVBBUkFUT1JfMgorIyAgZGVmaW5lIFBBVEhfU0VQQVJBVE9SXzIgJzsnCisjIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBESVJfU0VQQVJBVE9SXzIKKyMgZGVmaW5lIElTX0RJUl9TRVBBUkFUT1IoY2gpICgoY2gpID09IERJUl9TRVBBUkFUT1IpCisjZWxzZSAvKiBESVJfU0VQQVJBVE9SXzIgKi8KKyMgZGVmaW5lIElTX0RJUl9TRVBBUkFUT1IoY2gpIFwKKwkoKChjaCkgPT0gRElSX1NFUEFSQVRPUikgfHwgKChjaCkgPT0gRElSX1NFUEFSQVRPUl8yKSkKKyNlbmRpZiAvKiBESVJfU0VQQVJBVE9SXzIgKi8KKworI2lmbmRlZiBQQVRIX1NFUEFSQVRPUl8yCisjIGRlZmluZSBJU19QQVRIX1NFUEFSQVRPUihjaCkgKChjaCkgPT0gUEFUSF9TRVBBUkFUT1IpCisjZWxzZSAvKiBQQVRIX1NFUEFSQVRPUl8yICovCisjIGRlZmluZSBJU19QQVRIX1NFUEFSQVRPUihjaCkgKChjaCkgPT0gUEFUSF9TRVBBUkFUT1JfMikKKyNlbmRpZiAvKiBQQVRIX1NFUEFSQVRPUl8yICovCisKKyNpZm5kZWYgRk9QRU5fV0IKKyMgZGVmaW5lIEZPUEVOX1dCICJ3IgorI2VuZGlmCisjaWZuZGVmIF9PX0JJTkFSWQorIyBkZWZpbmUgX09fQklOQVJZIDAKKyNlbmRpZgorCisjZGVmaW5lIFhNQUxMT0ModHlwZSwgbnVtKSAgICAgICgodHlwZSAqKSB4bWFsbG9jICgobnVtKSAqIHNpemVvZih0eXBlKSkpCisjZGVmaW5lIFhGUkVFKHN0YWxlKSBkbyB7IFwKKyAgaWYgKHN0YWxlKSB7IGZyZWUgKCh2b2lkICopIHN0YWxlKTsgc3RhbGUgPSAwOyB9IFwKK30gd2hpbGUgKDApCisKKyNpZiBkZWZpbmVkKExUX0RFQlVHV1JBUFBFUikKK3N0YXRpYyBpbnQgbHRfZGVidWcgPSAxOworI2Vsc2UKK3N0YXRpYyBpbnQgbHRfZGVidWcgPSAwOworI2VuZGlmCisKK2NvbnN0IGNoYXIgKnByb2dyYW1fbmFtZSA9ICJsaWJ0b29sLXdyYXBwZXIiOyAvKiBpbiBjYXNlIHhzdHJkdXAgZmFpbHMgKi8KKwordm9pZCAqeG1hbGxvYyAoc2l6ZV90IG51bSk7CitjaGFyICp4c3RyZHVwIChjb25zdCBjaGFyICpzdHJpbmcpOworY29uc3QgY2hhciAqYmFzZV9uYW1lIChjb25zdCBjaGFyICpuYW1lKTsKK2NoYXIgKmZpbmRfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqd3JhcHBlcik7CitjaGFyICpjaGFzZV9zeW1saW5rcyAoY29uc3QgY2hhciAqcGF0aHNwZWMpOworaW50IG1ha2VfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqcGF0aCk7CitpbnQgY2hlY2tfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqcGF0aCk7CitjaGFyICpzdHJlbmR6YXAgKGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcGF0KTsKK3ZvaWQgbHRfZGVidWdwcmludGYgKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpmbXQsIC4uLik7Cit2b2lkIGx0X2ZhdGFsIChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqbWVzc2FnZSwgLi4uKTsKK3N0YXRpYyBjb25zdCBjaGFyICpub25udWxsIChjb25zdCBjaGFyICpzKTsKK3N0YXRpYyBjb25zdCBjaGFyICpub25lbXB0eSAoY29uc3QgY2hhciAqcyk7Cit2b2lkIGx0X3NldGVudiAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpOworY2hhciAqbHRfZXh0ZW5kX3N0ciAoY29uc3QgY2hhciAqb3JpZ192YWx1ZSwgY29uc3QgY2hhciAqYWRkLCBpbnQgdG9fZW5kKTsKK3ZvaWQgbHRfdXBkYXRlX2V4ZV9wYXRoIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSk7Cit2b2lkIGx0X3VwZGF0ZV9saWJfcGF0aCAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpOworY2hhciAqKnByZXBhcmVfc3Bhd24gKGNoYXIgKiphcmd2KTsKK3ZvaWQgbHRfZHVtcF9zY3JpcHQgKEZJTEUgKmYpOworRU9GCisKKwkgICAgY2F0IDw8RU9GCit2b2xhdGlsZSBjb25zdCBjaGFyICogTUFHSUNfRVhFID0gIiRtYWdpY19leGUiOworY29uc3QgY2hhciAqIExJQl9QQVRIX1ZBUk5BTUUgPSAiJHNobGlicGF0aF92YXIiOworRU9GCisKKwkgICAgaWYgdGVzdCAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgPSB5ZXMgJiYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiICYmIHRlc3QgLW4gIiR0ZW1wX3JwYXRoIjsgdGhlbgorICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aCAiJHRlbXBfcnBhdGgiCisJICAgICAgY2F0IDw8RU9GCitjb25zdCBjaGFyICogTElCX1BBVEhfVkFMVUUgICA9ICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IjsKK0VPRgorCSAgICBlbHNlCisJICAgICAgY2F0IDw8IkVPRiIKK2NvbnN0IGNoYXIgKiBMSUJfUEFUSF9WQUxVRSAgID0gIiI7CitFT0YKKwkgICAgZmkKKworCSAgICBpZiB0ZXN0IC1uICIkZGxsc2VhcmNocGF0aCI7IHRoZW4KKyAgICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGggIiRkbGxzZWFyY2hwYXRoOiIKKwkgICAgICBjYXQgPDxFT0YKK2NvbnN0IGNoYXIgKiBFWEVfUEFUSF9WQVJOQU1FID0gIlBBVEgiOworY29uc3QgY2hhciAqIEVYRV9QQVRIX1ZBTFVFICAgPSAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCI7CitFT0YKKwkgICAgZWxzZQorCSAgICAgIGNhdCA8PCJFT0YiCitjb25zdCBjaGFyICogRVhFX1BBVEhfVkFSTkFNRSA9ICIiOworY29uc3QgY2hhciAqIEVYRV9QQVRIX1ZBTFVFICAgPSAiIjsKK0VPRgorCSAgICBmaQorCisJICAgIGlmIHRlc3QgIiRmYXN0X2luc3RhbGwiID0geWVzOyB0aGVuCisJICAgICAgY2F0IDw8RU9GCitjb25zdCBjaGFyICogVEFSR0VUX1BST0dSQU1fTkFNRSA9ICJsdC0kb3V0cHV0bmFtZSI7IC8qIGhvcGVmdWxseSwgbm8gLmV4ZSAqLworRU9GCisJICAgIGVsc2UKKwkgICAgICBjYXQgPDxFT0YKK2NvbnN0IGNoYXIgKiBUQVJHRVRfUFJPR1JBTV9OQU1FID0gIiRvdXRwdXRuYW1lIjsgLyogaG9wZWZ1bGx5LCBubyAuZXhlICovCitFT0YKKwkgICAgZmkKKworCisJICAgIGNhdCA8PCJFT0YiCisKKyNkZWZpbmUgTFRXUkFQUEVSX09QVElPTl9QUkVGSVggICAgICAgICAiLS1sdC0iCisKK3N0YXRpYyBjb25zdCBjaGFyICpsdHdyYXBwZXJfb3B0aW9uX3ByZWZpeCA9IExUV1JBUFBFUl9PUFRJT05fUFJFRklYOworc3RhdGljIGNvbnN0IGNoYXIgKmR1bXBzY3JpcHRfb3B0ICAgICAgID0gTFRXUkFQUEVSX09QVElPTl9QUkVGSVggImR1bXAtc2NyaXB0IjsKK3N0YXRpYyBjb25zdCBjaGFyICpkZWJ1Z19vcHQgICAgICAgICAgICA9IExUV1JBUFBFUl9PUFRJT05fUFJFRklYICJkZWJ1ZyI7CisKK2ludAorbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgY2hhciAqKm5ld2FyZ3o7CisgIGludCAgbmV3YXJnYzsKKyAgY2hhciAqdG1wX3BhdGhzcGVjOworICBjaGFyICphY3R1YWxfY3dyYXBwZXJfcGF0aDsKKyAgY2hhciAqYWN0dWFsX2N3cmFwcGVyX25hbWU7CisgIGNoYXIgKnRhcmdldF9uYW1lOworICBjaGFyICpsdF9hcmd2X3plcm87CisgIGludHB0cl90IHJ2YWwgPSAxMjc7CisKKyAgaW50IGk7CisKKyAgcHJvZ3JhbV9uYW1lID0gKGNoYXIgKikgeHN0cmR1cCAoYmFzZV9uYW1lIChhcmd2WzBdKSk7CisgIG5ld2FyZ3ogPSBYTUFMTE9DIChjaGFyICosIGFyZ2MgKyAxKTsKKworICAvKiB2ZXJ5IHNpbXBsZSBhcmcgcGFyc2luZzsgZG9uJ3Qgd2FudCB0byByZWx5IG9uIGdldG9wdAorICAgKiBhbHNvLCBjb3B5IGFsbCBub24gY3dyYXBwZXIgb3B0aW9ucyB0byBuZXdhcmd6LCBleGNlcHQKKyAgICogYXJnelswXSwgd2hpY2ggaXMgaGFuZGxlZCBkaWZmZXJlbnRseQorICAgKi8KKyAgbmV3YXJnYz0wOworICBmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKQorICAgIHsKKyAgICAgIGlmIChzdHJjbXAgKGFyZ3ZbaV0sIGR1bXBzY3JpcHRfb3B0KSA9PSAwKQorCXsKK0VPRgorCSAgICBjYXNlICIkaG9zdCIgaW4KKwkgICAgICAqbWluZ3cqIHwgKmN5Z3dpbiogKQorCQkjIG1ha2Ugc3Rkb3V0IHVzZSAidW5peCIgbGluZSBlbmRpbmdzCisJCWVjaG8gIiAgICAgICAgICBzZXRtb2RlKDEsX09fQklOQVJZKTsiCisJCTs7CisJICAgICAgZXNhYworCisJICAgIGNhdCA8PCJFT0YiCisJICBsdF9kdW1wX3NjcmlwdCAoc3Rkb3V0KTsKKwkgIHJldHVybiAwOworCX0KKyAgICAgIGlmIChzdHJjbXAgKGFyZ3ZbaV0sIGRlYnVnX29wdCkgPT0gMCkKKwl7CisgICAgICAgICAgbHRfZGVidWcgPSAxOworICAgICAgICAgIGNvbnRpbnVlOworCX0KKyAgICAgIGlmIChzdHJjbXAgKGFyZ3ZbaV0sIGx0d3JhcHBlcl9vcHRpb25fcHJlZml4KSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgLyogaG93ZXZlciwgaWYgdGhlcmUgaXMgYW4gb3B0aW9uIGluIHRoZSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWAorICAgICAgICAgICAgIG5hbWVzcGFjZSwgYnV0IGl0IGlzIG5vdCBvbmUgb2YgdGhlIG9uZXMgd2Uga25vdyBhYm91dCBhbmQKKyAgICAgICAgICAgICBoYXZlIGFscmVhZHkgZGVhbHQgd2l0aCwgYWJvdmUgKGlubHVkaW5nIGR1bXAtc2NyaXB0KSwgdGhlbgorICAgICAgICAgICAgIHJlcG9ydCBhbiBlcnJvci4gT3RoZXJ3aXNlLCB0YXJnZXRzIG1pZ2h0IGJlZ2luIHRvIGJlbGlldmUKKyAgICAgICAgICAgICB0aGV5IGFyZSBhbGxvd2VkIHRvIHVzZSBvcHRpb25zIGluIHRoZSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWAorICAgICAgICAgICAgIG5hbWVzcGFjZS4gVGhlIGZpcnN0IHRpbWUgYW55IHVzZXIgY29tcGxhaW5zIGFib3V0IHRoaXMsIHdlJ2xsCisgICAgICAgICAgICAgbmVlZCB0byBtYWtlIExUV1JBUFBFUl9PUFRJT05fUFJFRklYIGEgY29uZmlndXJlLXRpbWUgb3B0aW9uCisgICAgICAgICAgICAgb3IgYSBjb25maWd1cmUuYWMtc2V0dGFibGUgdmFsdWUuCisgICAgICAgICAgICovCisgICAgICAgICAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywKKwkJICAgICJ1bnJlY29nbml6ZWQgJXMgb3B0aW9uOiAnJXMnIiwKKyAgICAgICAgICAgICAgICAgICAgbHR3cmFwcGVyX29wdGlvbl9wcmVmaXgsIGFyZ3ZbaV0pOworICAgICAgICB9CisgICAgICAvKiBvdGhlcndpc2UgLi4uICovCisgICAgICBuZXdhcmd6WysrbmV3YXJnY10gPSB4c3RyZHVwIChhcmd2W2ldKTsKKyAgICB9CisgIG5ld2FyZ3pbKytuZXdhcmdjXSA9IE5VTEw7CisKK0VPRgorCSAgICBjYXQgPDxFT0YKKyAgLyogVGhlIEdOVSBiYW5uZXIgbXVzdCBiZSB0aGUgZmlyc3Qgbm9uLWVycm9yIGRlYnVnIG1lc3NhZ2UgKi8KKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgImxpYnRvb2wgd3JhcHBlciAoR05VICRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT05cbiIpOworRU9GCisJICAgIGNhdCA8PCJFT0YiCisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIobWFpbikgYXJndlswXTogJXNcbiIsIGFyZ3ZbMF0pOworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKG1haW4pIHByb2dyYW1fbmFtZTogJXNcbiIsIHByb2dyYW1fbmFtZSk7CisKKyAgdG1wX3BhdGhzcGVjID0gZmluZF9leGVjdXRhYmxlIChhcmd2WzBdKTsKKyAgaWYgKHRtcF9wYXRoc3BlYyA9PSBOVUxMKQorICAgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sICJjb3VsZG4ndCBmaW5kICVzIiwgYXJndlswXSk7CisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCisgICAgICAgICAgICAgICAgICAiKG1haW4pIGZvdW5kIGV4ZSAoYmVmb3JlIHN5bWxpbmsgY2hhc2UpIGF0OiAlc1xuIiwKKwkJICB0bXBfcGF0aHNwZWMpOworCisgIGFjdHVhbF9jd3JhcHBlcl9wYXRoID0gY2hhc2Vfc3ltbGlua3MgKHRtcF9wYXRoc3BlYyk7CisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCisgICAgICAgICAgICAgICAgICAiKG1haW4pIGZvdW5kIGV4ZSAoYWZ0ZXIgc3ltbGluayBjaGFzZSkgYXQ6ICVzXG4iLAorCQkgIGFjdHVhbF9jd3JhcHBlcl9wYXRoKTsKKyAgWEZSRUUgKHRtcF9wYXRoc3BlYyk7CisKKyAgYWN0dWFsX2N3cmFwcGVyX25hbWUgPSB4c3RyZHVwIChiYXNlX25hbWUgKGFjdHVhbF9jd3JhcHBlcl9wYXRoKSk7CisgIHN0cmVuZHphcCAoYWN0dWFsX2N3cmFwcGVyX3BhdGgsIGFjdHVhbF9jd3JhcHBlcl9uYW1lKTsKKworICAvKiB3cmFwcGVyIG5hbWUgdHJhbnNmb3JtcyAqLworICBzdHJlbmR6YXAgKGFjdHVhbF9jd3JhcHBlcl9uYW1lLCAiLmV4ZSIpOworICB0bXBfcGF0aHNwZWMgPSBsdF9leHRlbmRfc3RyIChhY3R1YWxfY3dyYXBwZXJfbmFtZSwgIi5leGUiLCAxKTsKKyAgWEZSRUUgKGFjdHVhbF9jd3JhcHBlcl9uYW1lKTsKKyAgYWN0dWFsX2N3cmFwcGVyX25hbWUgPSB0bXBfcGF0aHNwZWM7CisgIHRtcF9wYXRoc3BlYyA9IDA7CisKKyAgLyogdGFyZ2V0X25hbWUgdHJhbnNmb3JtcyAtLSB1c2UgYWN0dWFsIHRhcmdldCBwcm9ncmFtIG5hbWU7IG1pZ2h0IGhhdmUgbHQtIHByZWZpeCAqLworICB0YXJnZXRfbmFtZSA9IHhzdHJkdXAgKGJhc2VfbmFtZSAoVEFSR0VUX1BST0dSQU1fTkFNRSkpOworICBzdHJlbmR6YXAgKHRhcmdldF9uYW1lLCAiLmV4ZSIpOworICB0bXBfcGF0aHNwZWMgPSBsdF9leHRlbmRfc3RyICh0YXJnZXRfbmFtZSwgIi5leGUiLCAxKTsKKyAgWEZSRUUgKHRhcmdldF9uYW1lKTsKKyAgdGFyZ2V0X25hbWUgPSB0bXBfcGF0aHNwZWM7CisgIHRtcF9wYXRoc3BlYyA9IDA7CisKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKwkJICAiKG1haW4pIGxpYnRvb2wgdGFyZ2V0IG5hbWU6ICVzXG4iLAorCQkgIHRhcmdldF9uYW1lKTsKK0VPRgorCisJICAgIGNhdCA8PEVPRgorICBuZXdhcmd6WzBdID0KKyAgICBYTUFMTE9DIChjaGFyLCAoc3RybGVuIChhY3R1YWxfY3dyYXBwZXJfcGF0aCkgKworCQkgICAgc3RybGVuICgiJG9iamRpciIpICsgMSArIHN0cmxlbiAoYWN0dWFsX2N3cmFwcGVyX25hbWUpICsgMSkpOworICBzdHJjcHkgKG5ld2FyZ3pbMF0sIGFjdHVhbF9jd3JhcHBlcl9wYXRoKTsKKyAgc3RyY2F0IChuZXdhcmd6WzBdLCAiJG9iamRpciIpOworICBzdHJjYXQgKG5ld2FyZ3pbMF0sICIvIik7CitFT0YKKworCSAgICBjYXQgPDwiRU9GIgorICAvKiBzdG9wIGhlcmUsIGFuZCBjb3B5IHNvIHdlIGRvbid0IGhhdmUgdG8gZG8gdGhpcyB0d2ljZSAqLworICB0bXBfcGF0aHNwZWMgPSB4c3RyZHVwIChuZXdhcmd6WzBdKTsKKworICAvKiBkbyBOT1Qgd2FudCB0aGUgbHQtIHByZWZpeCBoZXJlLCBzbyB1c2UgYWN0dWFsX2N3cmFwcGVyX25hbWUgKi8KKyAgc3RyY2F0IChuZXdhcmd6WzBdLCBhY3R1YWxfY3dyYXBwZXJfbmFtZSk7CisKKyAgLyogRE8gd2FudCB0aGUgbHQtIHByZWZpeCBoZXJlIGlmIGl0IGV4aXN0cywgc28gdXNlIHRhcmdldF9uYW1lICovCisgIGx0X2FyZ3ZfemVybyA9IGx0X2V4dGVuZF9zdHIgKHRtcF9wYXRoc3BlYywgdGFyZ2V0X25hbWUsIDEpOworICBYRlJFRSAodG1wX3BhdGhzcGVjKTsKKyAgdG1wX3BhdGhzcGVjID0gTlVMTDsKK0VPRgorCisJICAgIGNhc2UgJGhvc3Rfb3MgaW4KKwkgICAgICBtaW5ndyopCisJICAgIGNhdCA8PCJFT0YiCisgIHsKKyAgICBjaGFyKiBwOworICAgIHdoaWxlICgocCA9IHN0cmNociAobmV3YXJnelswXSwgJ1xcJykpICE9IE5VTEwpCisgICAgICB7CisJKnAgPSAnLyc7CisgICAgICB9CisgICAgd2hpbGUgKChwID0gc3RyY2hyIChsdF9hcmd2X3plcm8sICdcXCcpKSAhPSBOVUxMKQorICAgICAgeworCSpwID0gJy8nOworICAgICAgfQorICB9CitFT0YKKwkgICAgOzsKKwkgICAgZXNhYworCisJICAgIGNhdCA8PCJFT0YiCisgIFhGUkVFICh0YXJnZXRfbmFtZSk7CisgIFhGUkVFIChhY3R1YWxfY3dyYXBwZXJfcGF0aCk7CisgIFhGUkVFIChhY3R1YWxfY3dyYXBwZXJfbmFtZSk7CisKKyAgbHRfc2V0ZW52ICgiQklOX1NIIiwgInhwZzQiKTsgLyogZm9yIFRydTY0ICovCisgIGx0X3NldGVudiAoIkRVQUxDQVNFIiwgIjEiKTsgIC8qIGZvciBNU0sgc2ggKi8KKyAgLyogVXBkYXRlIHRoZSBETEwgc2VhcmNocGF0aC4gIEVYRV9QQVRIX1ZBTFVFICgkZGxsc2VhcmNocGF0aCkgbXVzdAorICAgICBiZSBwcmVwZW5kZWQgYmVmb3JlICh0aGF0IGlzLCBhcHBlYXIgYWZ0ZXIpIExJQl9QQVRIX1ZBTFVFICgkdGVtcF9ycGF0aCkKKyAgICAgYmVjYXVzZSBvbiBXaW5kb3dzLCBib3RoICpfVkFSTkFNRXMgYXJlIFBBVEggYnV0IHVuaW5zdGFsbGVkCisgICAgIGxpYnJhcmllcyBtdXN0IGNvbWUgZmlyc3QuICovCisgIGx0X3VwZGF0ZV9leGVfcGF0aCAoRVhFX1BBVEhfVkFSTkFNRSwgRVhFX1BBVEhfVkFMVUUpOworICBsdF91cGRhdGVfbGliX3BhdGggKExJQl9QQVRIX1ZBUk5BTUUsIExJQl9QQVRIX1ZBTFVFKTsKKworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKG1haW4pIGx0X2FyZ3ZfemVybzogJXNcbiIsCisJCSAgbm9ubnVsbCAobHRfYXJndl96ZXJvKSk7CisgIGZvciAoaSA9IDA7IGkgPCBuZXdhcmdjOyBpKyspCisgICAgeworICAgICAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihtYWluKSBuZXdhcmd6WyVkXTogJXNcbiIsCisJCSAgICAgIGksIG5vbm51bGwgKG5ld2FyZ3pbaV0pKTsKKyAgICB9CisKK0VPRgorCisJICAgIGNhc2UgJGhvc3Rfb3MgaW4KKwkgICAgICBtaW5ndyopCisJCWNhdCA8PCJFT0YiCisgIC8qIGV4ZWN2IGRvZXNuJ3QgYWN0dWFsbHkgd29yayBvbiBtaW5ndyBhcyBleHBlY3RlZCBvbiB1bml4ICovCisgIG5ld2FyZ3ogPSBwcmVwYXJlX3NwYXduIChuZXdhcmd6KTsKKyAgcnZhbCA9IF9zcGF3bnYgKF9QX1dBSVQsIGx0X2FyZ3ZfemVybywgKGNvbnN0IGNoYXIgKiBjb25zdCAqKSBuZXdhcmd6KTsKKyAgaWYgKHJ2YWwgPT0gLTEpCisgICAgeworICAgICAgLyogZmFpbGVkIHRvIHN0YXJ0IHByb2Nlc3MgKi8KKyAgICAgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCisJCSAgICAgICIobWFpbikgZmFpbGVkIHRvIGxhdW5jaCB0YXJnZXQgXCIlc1wiOiAlc1xuIiwKKwkJICAgICAgbHRfYXJndl96ZXJvLCBub25udWxsIChzdHJlcnJvciAoZXJybm8pKSk7CisgICAgICByZXR1cm4gMTI3OworICAgIH0KKyAgcmV0dXJuIHJ2YWw7CitFT0YKKwkJOzsKKwkgICAgICAqKQorCQljYXQgPDwiRU9GIgorICBleGVjdiAobHRfYXJndl96ZXJvLCBuZXdhcmd6KTsKKyAgcmV0dXJuIHJ2YWw7IC8qID0xMjcsIGJ1dCBhdm9pZHMgdW51c2VkIHZhcmlhYmxlIHdhcm5pbmcgKi8KK0VPRgorCQk7OworCSAgICBlc2FjCisKKwkgICAgY2F0IDw8IkVPRiIKK30KKwordm9pZCAqCit4bWFsbG9jIChzaXplX3QgbnVtKQoreworICB2b2lkICpwID0gKHZvaWQgKikgbWFsbG9jIChudW0pOworICBpZiAoIXApCisgICAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywgIm1lbW9yeSBleGhhdXN0ZWQiKTsKKworICByZXR1cm4gcDsKK30KKworY2hhciAqCit4c3RyZHVwIChjb25zdCBjaGFyICpzdHJpbmcpCit7CisgIHJldHVybiBzdHJpbmcgPyBzdHJjcHkgKChjaGFyICopIHhtYWxsb2MgKHN0cmxlbiAoc3RyaW5nKSArIDEpLAorCQkJICBzdHJpbmcpIDogTlVMTDsKK30KKworY29uc3QgY2hhciAqCitiYXNlX25hbWUgKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgIGNvbnN0IGNoYXIgKmJhc2U7CisKKyNpZiBkZWZpbmVkIChIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTSkKKyAgLyogU2tpcCBvdmVyIHRoZSBkaXNrIG5hbWUgaW4gTVNET1MgcGF0aG5hbWVzLiAqLworICBpZiAoaXNhbHBoYSAoKHVuc2lnbmVkIGNoYXIpIG5hbWVbMF0pICYmIG5hbWVbMV0gPT0gJzonKQorICAgIG5hbWUgKz0gMjsKKyNlbmRpZgorCisgIGZvciAoYmFzZSA9IG5hbWU7ICpuYW1lOyBuYW1lKyspCisgICAgaWYgKElTX0RJUl9TRVBBUkFUT1IgKCpuYW1lKSkKKyAgICAgIGJhc2UgPSBuYW1lICsgMTsKKyAgcmV0dXJuIGJhc2U7Cit9CisKK2ludAorY2hlY2tfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqcGF0aCkKK3sKKyAgc3RydWN0IHN0YXQgc3Q7CisKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihjaGVja19leGVjdXRhYmxlKTogJXNcbiIsCisgICAgICAgICAgICAgICAgICBub25lbXB0eSAocGF0aCkpOworICBpZiAoKCFwYXRoKSB8fCAoISpwYXRoKSkKKyAgICByZXR1cm4gMDsKKworICBpZiAoKHN0YXQgKHBhdGgsICZzdCkgPj0gMCkKKyAgICAgICYmIChzdC5zdF9tb2RlICYgKFNfSVhVU1IgfCBTX0lYR1JQIHwgU19JWE9USCkpKQorICAgIHJldHVybiAxOworICBlbHNlCisgICAgcmV0dXJuIDA7Cit9CisKK2ludAorbWFrZV9leGVjdXRhYmxlIChjb25zdCBjaGFyICpwYXRoKQoreworICBpbnQgcnZhbCA9IDA7CisgIHN0cnVjdCBzdGF0IHN0OworCisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIobWFrZV9leGVjdXRhYmxlKTogJXNcbiIsCisgICAgICAgICAgICAgICAgICBub25lbXB0eSAocGF0aCkpOworICBpZiAoKCFwYXRoKSB8fCAoISpwYXRoKSkKKyAgICByZXR1cm4gMDsKKworICBpZiAoc3RhdCAocGF0aCwgJnN0KSA+PSAwKQorICAgIHsKKyAgICAgIHJ2YWwgPSBjaG1vZCAocGF0aCwgc3Quc3RfbW9kZSB8IFNfSVhPVEggfCBTX0lYR1JQIHwgU19JWFVTUik7CisgICAgfQorICByZXR1cm4gcnZhbDsKK30KKworLyogU2VhcmNoZXMgZm9yIHRoZSBmdWxsIHBhdGggb2YgdGhlIHdyYXBwZXIuICBSZXR1cm5zCisgICBuZXdseSBhbGxvY2F0ZWQgZnVsbCBwYXRoIG5hbWUgaWYgZm91bmQsIE5VTEwgb3RoZXJ3aXNlCisgICBEb2VzIG5vdCBjaGFzZSBzeW1saW5rcywgZXZlbiBvbiBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0IHRoZW0uCisqLworY2hhciAqCitmaW5kX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKndyYXBwZXIpCit7CisgIGludCBoYXNfc2xhc2ggPSAwOworICBjb25zdCBjaGFyICpwOworICBjb25zdCBjaGFyICpwX25leHQ7CisgIC8qIHN0YXRpYyBidWZmZXIgZm9yIGdldGN3ZCAqLworICBjaGFyIHRtcFtMVF9QQVRITUFYICsgMV07CisgIGludCB0bXBfbGVuOworICBjaGFyICpjb25jYXRfbmFtZTsKKworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKGZpbmRfZXhlY3V0YWJsZSk6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgbm9uZW1wdHkgKHdyYXBwZXIpKTsKKworICBpZiAoKHdyYXBwZXIgPT0gTlVMTCkgfHwgKCp3cmFwcGVyID09ICdcMCcpKQorICAgIHJldHVybiBOVUxMOworCisgIC8qIEFic29sdXRlIHBhdGg/ICovCisjaWYgZGVmaW5lZCAoSEFWRV9ET1NfQkFTRURfRklMRV9TWVNURU0pCisgIGlmIChpc2FscGhhICgodW5zaWduZWQgY2hhcikgd3JhcHBlclswXSkgJiYgd3JhcHBlclsxXSA9PSAnOicpCisgICAgeworICAgICAgY29uY2F0X25hbWUgPSB4c3RyZHVwICh3cmFwcGVyKTsKKyAgICAgIGlmIChjaGVja19leGVjdXRhYmxlIChjb25jYXRfbmFtZSkpCisJcmV0dXJuIGNvbmNhdF9uYW1lOworICAgICAgWEZSRUUgKGNvbmNhdF9uYW1lKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisjZW5kaWYKKyAgICAgIGlmIChJU19ESVJfU0VQQVJBVE9SICh3cmFwcGVyWzBdKSkKKwl7CisJICBjb25jYXRfbmFtZSA9IHhzdHJkdXAgKHdyYXBwZXIpOworCSAgaWYgKGNoZWNrX2V4ZWN1dGFibGUgKGNvbmNhdF9uYW1lKSkKKwkgICAgcmV0dXJuIGNvbmNhdF9uYW1lOworCSAgWEZSRUUgKGNvbmNhdF9uYW1lKTsKKwl9CisjaWYgZGVmaW5lZCAoSEFWRV9ET1NfQkFTRURfRklMRV9TWVNURU0pCisgICAgfQorI2VuZGlmCisKKyAgZm9yIChwID0gd3JhcHBlcjsgKnA7IHArKykKKyAgICBpZiAoKnAgPT0gJy8nKQorICAgICAgeworCWhhc19zbGFzaCA9IDE7CisJYnJlYWs7CisgICAgICB9CisgIGlmICghaGFzX3NsYXNoKQorICAgIHsKKyAgICAgIC8qIG5vIHNsYXNoZXM7IHNlYXJjaCBQQVRIICovCisgICAgICBjb25zdCBjaGFyICpwYXRoID0gZ2V0ZW52ICgiUEFUSCIpOworICAgICAgaWYgKHBhdGggIT0gTlVMTCkKKwl7CisJICBmb3IgKHAgPSBwYXRoOyAqcDsgcCA9IHBfbmV4dCkKKwkgICAgeworCSAgICAgIGNvbnN0IGNoYXIgKnE7CisJICAgICAgc2l6ZV90IHBfbGVuOworCSAgICAgIGZvciAocSA9IHA7ICpxOyBxKyspCisJCWlmIChJU19QQVRIX1NFUEFSQVRPUiAoKnEpKQorCQkgIGJyZWFrOworCSAgICAgIHBfbGVuID0gcSAtIHA7CisJICAgICAgcF9uZXh0ID0gKCpxID09ICdcMCcgPyBxIDogcSArIDEpOworCSAgICAgIGlmIChwX2xlbiA9PSAwKQorCQl7CisJCSAgLyogZW1wdHkgcGF0aDogY3VycmVudCBkaXJlY3RvcnkgKi8KKwkJICBpZiAoZ2V0Y3dkICh0bXAsIExUX1BBVEhNQVgpID09IE5VTEwpCisJCSAgICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLCAiZ2V0Y3dkIGZhaWxlZDogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ubnVsbCAoc3RyZXJyb3IgKGVycm5vKSkpOworCQkgIHRtcF9sZW4gPSBzdHJsZW4gKHRtcCk7CisJCSAgY29uY2F0X25hbWUgPQorCQkgICAgWE1BTExPQyAoY2hhciwgdG1wX2xlbiArIDEgKyBzdHJsZW4gKHdyYXBwZXIpICsgMSk7CisJCSAgbWVtY3B5IChjb25jYXRfbmFtZSwgdG1wLCB0bXBfbGVuKTsKKwkJICBjb25jYXRfbmFtZVt0bXBfbGVuXSA9ICcvJzsKKwkJICBzdHJjcHkgKGNvbmNhdF9uYW1lICsgdG1wX2xlbiArIDEsIHdyYXBwZXIpOworCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgY29uY2F0X25hbWUgPQorCQkgICAgWE1BTExPQyAoY2hhciwgcF9sZW4gKyAxICsgc3RybGVuICh3cmFwcGVyKSArIDEpOworCQkgIG1lbWNweSAoY29uY2F0X25hbWUsIHAsIHBfbGVuKTsKKwkJICBjb25jYXRfbmFtZVtwX2xlbl0gPSAnLyc7CisJCSAgc3RyY3B5IChjb25jYXRfbmFtZSArIHBfbGVuICsgMSwgd3JhcHBlcik7CisJCX0KKwkgICAgICBpZiAoY2hlY2tfZXhlY3V0YWJsZSAoY29uY2F0X25hbWUpKQorCQlyZXR1cm4gY29uY2F0X25hbWU7CisJICAgICAgWEZSRUUgKGNvbmNhdF9uYW1lKTsKKwkgICAgfQorCX0KKyAgICAgIC8qIG5vdCBmb3VuZCBpbiBQQVRIOyBhc3N1bWUgY3VyZGlyICovCisgICAgfQorICAvKiBSZWxhdGl2ZSBwYXRoIHwgbm90IGZvdW5kIGluIHBhdGg6IHByZXBlbmQgY3dkICovCisgIGlmIChnZXRjd2QgKHRtcCwgTFRfUEFUSE1BWCkgPT0gTlVMTCkKKyAgICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLCAiZ2V0Y3dkIGZhaWxlZDogJXMiLAorICAgICAgICAgICAgICBub25udWxsIChzdHJlcnJvciAoZXJybm8pKSk7CisgIHRtcF9sZW4gPSBzdHJsZW4gKHRtcCk7CisgIGNvbmNhdF9uYW1lID0gWE1BTExPQyAoY2hhciwgdG1wX2xlbiArIDEgKyBzdHJsZW4gKHdyYXBwZXIpICsgMSk7CisgIG1lbWNweSAoY29uY2F0X25hbWUsIHRtcCwgdG1wX2xlbik7CisgIGNvbmNhdF9uYW1lW3RtcF9sZW5dID0gJy8nOworICBzdHJjcHkgKGNvbmNhdF9uYW1lICsgdG1wX2xlbiArIDEsIHdyYXBwZXIpOworCisgIGlmIChjaGVja19leGVjdXRhYmxlIChjb25jYXRfbmFtZSkpCisgICAgcmV0dXJuIGNvbmNhdF9uYW1lOworICBYRlJFRSAoY29uY2F0X25hbWUpOworICByZXR1cm4gTlVMTDsKK30KKworY2hhciAqCitjaGFzZV9zeW1saW5rcyAoY29uc3QgY2hhciAqcGF0aHNwZWMpCit7CisjaWZuZGVmIFNfSVNMTksKKyAgcmV0dXJuIHhzdHJkdXAgKHBhdGhzcGVjKTsKKyNlbHNlCisgIGNoYXIgYnVmW0xUX1BBVEhNQVhdOworICBzdHJ1Y3Qgc3RhdCBzOworICBjaGFyICp0bXBfcGF0aHNwZWMgPSB4c3RyZHVwIChwYXRoc3BlYyk7CisgIGNoYXIgKnA7CisgIGludCBoYXNfc3ltbGlua3MgPSAwOworICB3aGlsZSAoc3RybGVuICh0bXBfcGF0aHNwZWMpICYmICFoYXNfc3ltbGlua3MpCisgICAgeworICAgICAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKwkJICAgICAgImNoZWNraW5nIHBhdGggY29tcG9uZW50IGZvciBzeW1saW5rczogJXNcbiIsCisJCSAgICAgIHRtcF9wYXRoc3BlYyk7CisgICAgICBpZiAobHN0YXQgKHRtcF9wYXRoc3BlYywgJnMpID09IDApCisJeworCSAgaWYgKFNfSVNMTksgKHMuc3RfbW9kZSkgIT0gMCkKKwkgICAgeworCSAgICAgIGhhc19zeW1saW5rcyA9IDE7CisJICAgICAgYnJlYWs7CisJICAgIH0KKworCSAgLyogc2VhcmNoIGJhY2t3YXJkcyBmb3IgbGFzdCBESVJfU0VQQVJBVE9SICovCisJICBwID0gdG1wX3BhdGhzcGVjICsgc3RybGVuICh0bXBfcGF0aHNwZWMpIC0gMTsKKwkgIHdoaWxlICgocCA+IHRtcF9wYXRoc3BlYykgJiYgKCFJU19ESVJfU0VQQVJBVE9SICgqcCkpKQorCSAgICBwLS07CisJICBpZiAoKHAgPT0gdG1wX3BhdGhzcGVjKSAmJiAoIUlTX0RJUl9TRVBBUkFUT1IgKCpwKSkpCisJICAgIHsKKwkgICAgICAvKiBubyBtb3JlIERJUl9TRVBBUkFUT1JTIGxlZnQgKi8KKwkgICAgICBicmVhazsKKwkgICAgfQorCSAgKnAgPSAnXDAnOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLAorCQkgICAgImVycm9yIGFjY2Vzc2luZyBmaWxlIFwiJXNcIjogJXMiLAorCQkgICAgdG1wX3BhdGhzcGVjLCBub25udWxsIChzdHJlcnJvciAoZXJybm8pKSk7CisJfQorICAgIH0KKyAgWEZSRUUgKHRtcF9wYXRoc3BlYyk7CisKKyAgaWYgKCFoYXNfc3ltbGlua3MpCisgICAgeworICAgICAgcmV0dXJuIHhzdHJkdXAgKHBhdGhzcGVjKTsKKyAgICB9CisKKyAgdG1wX3BhdGhzcGVjID0gcmVhbHBhdGggKHBhdGhzcGVjLCBidWYpOworICBpZiAodG1wX3BhdGhzcGVjID09IDApCisgICAgeworICAgICAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywKKwkJImNvdWxkIG5vdCBmb2xsb3cgc3ltbGlua3MgZm9yICVzIiwgcGF0aHNwZWMpOworICAgIH0KKyAgcmV0dXJuIHhzdHJkdXAgKHRtcF9wYXRoc3BlYyk7CisjZW5kaWYKK30KKworY2hhciAqCitzdHJlbmR6YXAgKGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcGF0KQoreworICBzaXplX3QgbGVuLCBwYXRsZW47CisKKyAgYXNzZXJ0IChzdHIgIT0gTlVMTCk7CisgIGFzc2VydCAocGF0ICE9IE5VTEwpOworCisgIGxlbiA9IHN0cmxlbiAoc3RyKTsKKyAgcGF0bGVuID0gc3RybGVuIChwYXQpOworCisgIGlmIChwYXRsZW4gPD0gbGVuKQorICAgIHsKKyAgICAgIHN0ciArPSBsZW4gLSBwYXRsZW47CisgICAgICBpZiAoc3RyY21wIChzdHIsIHBhdCkgPT0gMCkKKwkqc3RyID0gJ1wwJzsKKyAgICB9CisgIHJldHVybiBzdHI7Cit9CisKK3ZvaWQKK2x0X2RlYnVncHJpbnRmIChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnczsKKyAgaWYgKGx0X2RlYnVnKQorICAgIHsKKyAgICAgICh2b2lkKSBmcHJpbnRmIChzdGRlcnIsICIlczolczolZDogIiwgcHJvZ3JhbV9uYW1lLCBmaWxlLCBsaW5lKTsKKyAgICAgIHZhX3N0YXJ0IChhcmdzLCBmbXQpOworICAgICAgKHZvaWQpIHZmcHJpbnRmIChzdGRlcnIsIGZtdCwgYXJncyk7CisgICAgICB2YV9lbmQgKGFyZ3MpOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK2x0X2Vycm9yX2NvcmUgKGludCBleGl0X3N0YXR1cywgY29uc3QgY2hhciAqZmlsZSwKKwkgICAgICAgaW50IGxpbmUsIGNvbnN0IGNoYXIgKm1vZGUsCisJICAgICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIHZhX2xpc3QgYXApCit7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzOiVzOiVkOiAlczogIiwgcHJvZ3JhbV9uYW1lLCBmaWxlLCBsaW5lLCBtb2RlKTsKKyAgdmZwcmludGYgKHN0ZGVyciwgbWVzc2FnZSwgYXApOworICBmcHJpbnRmIChzdGRlcnIsICIuXG4iKTsKKworICBpZiAoZXhpdF9zdGF0dXMgPj0gMCkKKyAgICBleGl0IChleGl0X3N0YXR1cyk7Cit9CisKK3ZvaWQKK2x0X2ZhdGFsIChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqbWVzc2FnZSwgLi4uKQoreworICB2YV9saXN0IGFwOworICB2YV9zdGFydCAoYXAsIG1lc3NhZ2UpOworICBsdF9lcnJvcl9jb3JlIChFWElUX0ZBSUxVUkUsIGZpbGUsIGxpbmUsICJGQVRBTCIsIG1lc3NhZ2UsIGFwKTsKKyAgdmFfZW5kIChhcCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK25vbm51bGwgKGNvbnN0IGNoYXIgKnMpCit7CisgIHJldHVybiBzID8gcyA6ICIobnVsbCkiOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCitub25lbXB0eSAoY29uc3QgY2hhciAqcykKK3sKKyAgcmV0dXJuIChzICYmICEqcykgPyAiKGVtcHR5KSIgOiBub25udWxsIChzKTsKK30KKwordm9pZAorbHRfc2V0ZW52IChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKwkJICAiKGx0X3NldGVudikgc2V0dGluZyAnJXMnIHRvICclcydcbiIsCisgICAgICAgICAgICAgICAgICBub25udWxsIChuYW1lKSwgbm9ubnVsbCAodmFsdWUpKTsKKyAgeworI2lmZGVmIEhBVkVfU0VURU5WCisgICAgLyogYWx3YXlzIG1ha2UgYSBjb3B5LCBmb3IgY29uc2lzdGVuY3kgd2l0aCAhSEFWRV9TRVRFTlYgKi8KKyAgICBjaGFyICpzdHIgPSB4c3RyZHVwICh2YWx1ZSk7CisgICAgc2V0ZW52IChuYW1lLCBzdHIsIDEpOworI2Vsc2UKKyAgICBpbnQgbGVuID0gc3RybGVuIChuYW1lKSArIDEgKyBzdHJsZW4gKHZhbHVlKSArIDE7CisgICAgY2hhciAqc3RyID0gWE1BTExPQyAoY2hhciwgbGVuKTsKKyAgICBzcHJpbnRmIChzdHIsICIlcz0lcyIsIG5hbWUsIHZhbHVlKTsKKyAgICBpZiAocHV0ZW52IChzdHIpICE9IEVYSVRfU1VDQ0VTUykKKyAgICAgIHsKKyAgICAgICAgWEZSRUUgKHN0cik7CisgICAgICB9CisjZW5kaWYKKyAgfQorfQorCitjaGFyICoKK2x0X2V4dGVuZF9zdHIgKGNvbnN0IGNoYXIgKm9yaWdfdmFsdWUsIGNvbnN0IGNoYXIgKmFkZCwgaW50IHRvX2VuZCkKK3sKKyAgY2hhciAqbmV3X3ZhbHVlOworICBpZiAob3JpZ192YWx1ZSAmJiAqb3JpZ192YWx1ZSkKKyAgICB7CisgICAgICBpbnQgb3JpZ192YWx1ZV9sZW4gPSBzdHJsZW4gKG9yaWdfdmFsdWUpOworICAgICAgaW50IGFkZF9sZW4gPSBzdHJsZW4gKGFkZCk7CisgICAgICBuZXdfdmFsdWUgPSBYTUFMTE9DIChjaGFyLCBhZGRfbGVuICsgb3JpZ192YWx1ZV9sZW4gKyAxKTsKKyAgICAgIGlmICh0b19lbmQpCisgICAgICAgIHsKKyAgICAgICAgICBzdHJjcHkgKG5ld192YWx1ZSwgb3JpZ192YWx1ZSk7CisgICAgICAgICAgc3RyY3B5IChuZXdfdmFsdWUgKyBvcmlnX3ZhbHVlX2xlbiwgYWRkKTsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgc3RyY3B5IChuZXdfdmFsdWUsIGFkZCk7CisgICAgICAgICAgc3RyY3B5IChuZXdfdmFsdWUgKyBhZGRfbGVuLCBvcmlnX3ZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIG5ld192YWx1ZSA9IHhzdHJkdXAgKGFkZCk7CisgICAgfQorICByZXR1cm4gbmV3X3ZhbHVlOworfQorCit2b2lkCitsdF91cGRhdGVfZXhlX3BhdGggKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAorCQkgICIobHRfdXBkYXRlX2V4ZV9wYXRoKSBtb2RpZnlpbmcgJyVzJyBieSBwcmVwZW5kaW5nICclcydcbiIsCisgICAgICAgICAgICAgICAgICBub25udWxsIChuYW1lKSwgbm9ubnVsbCAodmFsdWUpKTsKKworICBpZiAobmFtZSAmJiAqbmFtZSAmJiB2YWx1ZSAmJiAqdmFsdWUpCisgICAgeworICAgICAgY2hhciAqbmV3X3ZhbHVlID0gbHRfZXh0ZW5kX3N0ciAoZ2V0ZW52IChuYW1lKSwgdmFsdWUsIDApOworICAgICAgLyogc29tZSBzeXN0ZW1zIGNhbid0IGNvcGUgd2l0aCBhICc6Jy10ZXJtaW5hdGVkIHBhdGggIycgKi8KKyAgICAgIGludCBsZW4gPSBzdHJsZW4gKG5ld192YWx1ZSk7CisgICAgICB3aGlsZSAoKChsZW4gPSBzdHJsZW4gKG5ld192YWx1ZSkpID4gMCkgJiYgSVNfUEFUSF9TRVBBUkFUT1IgKG5ld192YWx1ZVtsZW4tMV0pKQorICAgICAgICB7CisgICAgICAgICAgbmV3X3ZhbHVlW2xlbi0xXSA9ICdcMCc7CisgICAgICAgIH0KKyAgICAgIGx0X3NldGVudiAobmFtZSwgbmV3X3ZhbHVlKTsKKyAgICAgIFhGUkVFIChuZXdfdmFsdWUpOworICAgIH0KK30KKwordm9pZAorbHRfdXBkYXRlX2xpYl9wYXRoIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKwkJICAiKGx0X3VwZGF0ZV9saWJfcGF0aCkgbW9kaWZ5aW5nICclcycgYnkgcHJlcGVuZGluZyAnJXMnXG4iLAorICAgICAgICAgICAgICAgICAgbm9ubnVsbCAobmFtZSksIG5vbm51bGwgKHZhbHVlKSk7CisKKyAgaWYgKG5hbWUgJiYgKm5hbWUgJiYgdmFsdWUgJiYgKnZhbHVlKQorICAgIHsKKyAgICAgIGNoYXIgKm5ld192YWx1ZSA9IGx0X2V4dGVuZF9zdHIgKGdldGVudiAobmFtZSksIHZhbHVlLCAwKTsKKyAgICAgIGx0X3NldGVudiAobmFtZSwgbmV3X3ZhbHVlKTsKKyAgICAgIFhGUkVFIChuZXdfdmFsdWUpOworICAgIH0KK30KKworRU9GCisJICAgIGNhc2UgJGhvc3Rfb3MgaW4KKwkgICAgICBtaW5ndyopCisJCWNhdCA8PCJFT0YiCisKKy8qIFByZXBhcmVzIGFuIGFyZ3VtZW50IHZlY3RvciBiZWZvcmUgY2FsbGluZyBzcGF3bigpLgorICAgTm90ZSB0aGF0IHNwYXduKCkgZG9lcyBub3QgYnkgaXRzZWxmIGNhbGwgdGhlIGNvbW1hbmQgaW50ZXJwcmV0ZXIKKyAgICAgKGdldGVudiAoIkNPTVNQRUMiKSAhPSBOVUxMID8gZ2V0ZW52ICgiQ09NU1BFQyIpIDoKKyAgICAgICh7IE9TVkVSU0lPTklORk8gdjsgdi5kd09TVmVyc2lvbkluZm9TaXplID0gc2l6ZW9mKE9TVkVSU0lPTklORk8pOworICAgICAgICAgR2V0VmVyc2lvbkV4KCZ2KTsKKyAgICAgICAgIHYuZHdQbGF0Zm9ybUlkID09IFZFUl9QTEFURk9STV9XSU4zMl9OVDsKKyAgICAgIH0pID8gImNtZC5leGUiIDogImNvbW1hbmQuY29tIikuCisgICBJbnN0ZWFkIGl0IHNpbXBseSBjb25jYXRlbmF0ZXMgdGhlIGFyZ3VtZW50cywgc2VwYXJhdGVkIGJ5ICcgJywgYW5kIGNhbGxzCisgICBDcmVhdGVQcm9jZXNzKCkuICBXZSBtdXN0IHF1b3RlIHRoZSBhcmd1bWVudHMgc2luY2UgV2luMzIgQ3JlYXRlUHJvY2VzcygpCisgICBpbnRlcnByZXRzIGNoYXJhY3RlcnMgbGlrZSAnICcsICdcdCcsICdcXCcsICciJyAoYnV0IG5vdCAnPCcgYW5kICc+JykgaW4gYQorICAgc3BlY2lhbCB3YXk6CisgICAtIFNwYWNlIGFuZCB0YWIgYXJlIGludGVycHJldGVkIGFzIGRlbGltaXRlcnMuIFRoZXkgYXJlIG5vdCB0cmVhdGVkIGFzCisgICAgIGRlbGltaXRlcnMgaWYgdGhleSBhcmUgc3Vycm91bmRlZCBieSBkb3VibGUgcXVvdGVzOiAiLi4uIi4KKyAgIC0gVW5lc2NhcGVkIGRvdWJsZSBxdW90ZXMgYXJlIHJlbW92ZWQgZnJvbSB0aGUgaW5wdXQuIFRoZWlyIG9ubHkgZWZmZWN0IGlzCisgICAgIHRoYXQgd2l0aGluIGRvdWJsZSBxdW90ZXMsIHNwYWNlIGFuZCB0YWIgYXJlIHRyZWF0ZWQgbGlrZSBub3JtYWwKKyAgICAgY2hhcmFjdGVycy4KKyAgIC0gQmFja3NsYXNoZXMgbm90IGZvbGxvd2VkIGJ5IGRvdWJsZSBxdW90ZXMgYXJlIG5vdCBzcGVjaWFsLgorICAgLSBCdXQgMipuKzEgYmFja3NsYXNoZXMgZm9sbG93ZWQgYnkgYSBkb3VibGUgcXVvdGUgYmVjb21lCisgICAgIG4gYmFja3NsYXNoZXMgZm9sbG93ZWQgYnkgYSBkb3VibGUgcXVvdGUgKG4gPj0gMCk6CisgICAgICAgXCIgLT4gIgorICAgICAgIFxcXCIgLT4gXCIKKyAgICAgICBcXFxcXCIgLT4gXFwiCisgKi8KKyNkZWZpbmUgU0hFTExfU1BFQ0lBTF9DSEFSUyAiXCJcXCBcMDAxXDAwMlwwMDNcMDA0XDAwNVwwMDZcMDA3XDAxMFwwMTFcMDEyXDAxM1wwMTRcMDE1XDAxNlwwMTdcMDIwXDAyMVwwMjJcMDIzXDAyNFwwMjVcMDI2XDAyN1wwMzBcMDMxXDAzMlwwMzNcMDM0XDAzNVwwMzZcMDM3IgorI2RlZmluZSBTSEVMTF9TUEFDRV9DSEFSUyAiIFwwMDFcMDAyXDAwM1wwMDRcMDA1XDAwNlwwMDdcMDEwXDAxMVwwMTJcMDEzXDAxNFwwMTVcMDE2XDAxN1wwMjBcMDIxXDAyMlwwMjNcMDI0XDAyNVwwMjZcMDI3XDAzMFwwMzFcMDMyXDAzM1wwMzRcMDM1XDAzNlwwMzciCitjaGFyICoqCitwcmVwYXJlX3NwYXduIChjaGFyICoqYXJndikKK3sKKyAgc2l6ZV90IGFyZ2M7CisgIGNoYXIgKipuZXdfYXJndjsKKyAgc2l6ZV90IGk7CisKKyAgLyogQ291bnQgbnVtYmVyIG9mIGFyZ3VtZW50cy4gICovCisgIGZvciAoYXJnYyA9IDA7IGFyZ3ZbYXJnY10gIT0gTlVMTDsgYXJnYysrKQorICAgIDsKKworICAvKiBBbGxvY2F0ZSBuZXcgYXJndW1lbnQgdmVjdG9yLiAgKi8KKyAgbmV3X2FyZ3YgPSBYTUFMTE9DIChjaGFyICosIGFyZ2MgKyAxKTsKKworICAvKiBQdXQgcXVvdGVkIGFyZ3VtZW50cyBpbnRvIHRoZSBuZXcgYXJndW1lbnQgdmVjdG9yLiAgKi8KKyAgZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykKKyAgICB7CisgICAgICBjb25zdCBjaGFyICpzdHJpbmcgPSBhcmd2W2ldOworCisgICAgICBpZiAoc3RyaW5nWzBdID09ICdcMCcpCisJbmV3X2FyZ3ZbaV0gPSB4c3RyZHVwICgiXCJcIiIpOworICAgICAgZWxzZSBpZiAoc3RycGJyayAoc3RyaW5nLCBTSEVMTF9TUEVDSUFMX0NIQVJTKSAhPSBOVUxMKQorCXsKKwkgIGludCBxdW90ZV9hcm91bmQgPSAoc3RycGJyayAoc3RyaW5nLCBTSEVMTF9TUEFDRV9DSEFSUykgIT0gTlVMTCk7CisJICBzaXplX3QgbGVuZ3RoOworCSAgdW5zaWduZWQgaW50IGJhY2tzbGFzaGVzOworCSAgY29uc3QgY2hhciAqczsKKwkgIGNoYXIgKnF1b3RlZF9zdHJpbmc7CisJICBjaGFyICpwOworCisJICBsZW5ndGggPSAwOworCSAgYmFja3NsYXNoZXMgPSAwOworCSAgaWYgKHF1b3RlX2Fyb3VuZCkKKwkgICAgbGVuZ3RoKys7CisJICBmb3IgKHMgPSBzdHJpbmc7ICpzICE9ICdcMCc7IHMrKykKKwkgICAgeworCSAgICAgIGNoYXIgYyA9ICpzOworCSAgICAgIGlmIChjID09ICciJykKKwkJbGVuZ3RoICs9IGJhY2tzbGFzaGVzICsgMTsKKwkgICAgICBsZW5ndGgrKzsKKwkgICAgICBpZiAoYyA9PSAnXFwnKQorCQliYWNrc2xhc2hlcysrOworCSAgICAgIGVsc2UKKwkJYmFja3NsYXNoZXMgPSAwOworCSAgICB9CisJICBpZiAocXVvdGVfYXJvdW5kKQorCSAgICBsZW5ndGggKz0gYmFja3NsYXNoZXMgKyAxOworCisJICBxdW90ZWRfc3RyaW5nID0gWE1BTExPQyAoY2hhciwgbGVuZ3RoICsgMSk7CisKKwkgIHAgPSBxdW90ZWRfc3RyaW5nOworCSAgYmFja3NsYXNoZXMgPSAwOworCSAgaWYgKHF1b3RlX2Fyb3VuZCkKKwkgICAgKnArKyA9ICciJzsKKwkgIGZvciAocyA9IHN0cmluZzsgKnMgIT0gJ1wwJzsgcysrKQorCSAgICB7CisJICAgICAgY2hhciBjID0gKnM7CisJICAgICAgaWYgKGMgPT0gJyInKQorCQl7CisJCSAgdW5zaWduZWQgaW50IGo7CisJCSAgZm9yIChqID0gYmFja3NsYXNoZXMgKyAxOyBqID4gMDsgai0tKQorCQkgICAgKnArKyA9ICdcXCc7CisJCX0KKwkgICAgICAqcCsrID0gYzsKKwkgICAgICBpZiAoYyA9PSAnXFwnKQorCQliYWNrc2xhc2hlcysrOworCSAgICAgIGVsc2UKKwkJYmFja3NsYXNoZXMgPSAwOworCSAgICB9CisJICBpZiAocXVvdGVfYXJvdW5kKQorCSAgICB7CisJICAgICAgdW5zaWduZWQgaW50IGo7CisJICAgICAgZm9yIChqID0gYmFja3NsYXNoZXM7IGogPiAwOyBqLS0pCisJCSpwKysgPSAnXFwnOworCSAgICAgICpwKysgPSAnIic7CisJICAgIH0KKwkgICpwID0gJ1wwJzsKKworCSAgbmV3X2FyZ3ZbaV0gPSBxdW90ZWRfc3RyaW5nOworCX0KKyAgICAgIGVsc2UKKwluZXdfYXJndltpXSA9IChjaGFyICopIHN0cmluZzsKKyAgICB9CisgIG5ld19hcmd2W2FyZ2NdID0gTlVMTDsKKworICByZXR1cm4gbmV3X2FyZ3Y7Cit9CitFT0YKKwkJOzsKKwkgICAgZXNhYworCisgICAgICAgICAgICBjYXQgPDwiRU9GIgordm9pZCBsdF9kdW1wX3NjcmlwdCAoRklMRSogZikKK3sKK0VPRgorCSAgICBmdW5jX2VtaXRfd3JhcHBlciB5ZXMgfAorCSAgICAgICRTRUQgLW4gLWUgJworcy9eXCguXHs3OVx9XClcKC4uKlwpL1wxXAorXDIvCitoCitzL1woW1xcIl1cKS9cXFwxL2cKK3MvJC9cXG4vCitzL1woW15cbl0qXCkuKi8gIGZwdXRzICgiXDEiLCBmKTsvcAorZworRCcKKyAgICAgICAgICAgIGNhdCA8PCJFT0YiCit9CitFT0YKK30KKyMgZW5kOiBmdW5jX2VtaXRfY3dyYXBwZXJleGVfc3JjCisKKyMgZnVuY193aW4zMl9pbXBvcnRfbGliX3AgQVJHCisjIFRydWUgaWYgQVJHIGlzIGFuIGltcG9ydCBsaWIsIGFzIGluZGljYXRlZCBieSAkZmlsZV9tYWdpY19jbWQKK2Z1bmNfd2luMzJfaW1wb3J0X2xpYl9wICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIGNhc2UgYGV2YWwgJGZpbGVfbWFnaWNfY21kIFwiXCQxXCIgMj4vZGV2L251bGwgfCAkU0VEIC1lIDEwcWAgaW4KKyAgICAqaW1wb3J0KikgOiA7OworICAgICopIGZhbHNlIDs7CisgICAgZXNhYworfQorCisjIGZ1bmNfbW9kZV9saW5rIGFyZy4uLgorZnVuY19tb2RlX2xpbmsgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgY2FzZSAkaG9zdCBpbgorICAgICotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqIHwgKi1jZWdjYyopCisgICAgICAjIEl0IGlzIGltcG9zc2libGUgdG8gbGluayBhIGRsbCB3aXRob3V0IHRoaXMgc2V0dGluZywgYW5kCisgICAgICAjIHdlIHNob3VsZG4ndCBmb3JjZSB0aGUgbWFrZWZpbGUgbWFpbnRhaW5lciB0byBmaWd1cmUgb3V0CisgICAgICAjIHdoaWNoIHN5c3RlbSB3ZSBhcmUgY29tcGlsaW5nIGZvciBpbiBvcmRlciB0byBwYXNzIGFuIGV4dHJhCisgICAgICAjIGZsYWcgZm9yIGV2ZXJ5IGxpYnRvb2wgaW52b2NhdGlvbi4KKyAgICAgICMgYWxsb3dfdW5kZWZpbmVkPW5vCisKKyAgICAgICMgRklYTUU6IFVuZm9ydHVuYXRlbHksIHRoZXJlIGFyZSBwcm9ibGVtcyB3aXRoIHRoZSBhYm92ZSB3aGVuIHRyeWluZworICAgICAgIyB0byBtYWtlIGEgZGxsIHdoaWNoIGhhcyB1bmRlZmluZWQgc3ltYm9scywgaW4gd2hpY2ggY2FzZSBub3QKKyAgICAgICMgZXZlbiBhIHN0YXRpYyBsaWJyYXJ5IGlzIGJ1aWx0LiAgRm9yIG5vdywgd2UgbmVlZCB0byBzcGVjaWZ5CisgICAgICAjIC1uby11bmRlZmluZWQgb24gdGhlIGxpYnRvb2wgbGluayBsaW5lIHdoZW4gd2UgY2FuIGJlIGNlcnRhaW4KKyAgICAgICMgdGhhdCBhbGwgc3ltYm9scyBhcmUgc2F0aXNmaWVkLCBvdGhlcndpc2Ugd2UgZ2V0IGEgc3RhdGljIGxpYnJhcnkuCisgICAgICBhbGxvd191bmRlZmluZWQ9eWVzCisgICAgICA7OworICAgICopCisgICAgICBhbGxvd191bmRlZmluZWQ9eWVzCisgICAgICA7OworICAgIGVzYWMKKyAgICBsaWJ0b29sX2FyZ3M9JG5vbm9wdAorICAgIGJhc2VfY29tcGlsZT0iJG5vbm9wdCAkQCIKKyAgICBjb21waWxlX2NvbW1hbmQ9JG5vbm9wdAorICAgIGZpbmFsaXplX2NvbW1hbmQ9JG5vbm9wdAorCisgICAgY29tcGlsZV9ycGF0aD0KKyAgICBmaW5hbGl6ZV9ycGF0aD0KKyAgICBjb21waWxlX3NobGlicGF0aD0KKyAgICBmaW5hbGl6ZV9zaGxpYnBhdGg9CisgICAgY29udmVuaWVuY2U9CisgICAgb2xkX2NvbnZlbmllbmNlPQorICAgIGRlcGxpYnM9CisgICAgb2xkX2RlcGxpYnM9CisgICAgY29tcGlsZXJfZmxhZ3M9CisgICAgbGlua2VyX2ZsYWdzPQorICAgIGRsbHNlYXJjaHBhdGg9CisgICAgbGliX3NlYXJjaF9wYXRoPWBwd2RgCisgICAgaW5zdF9wcmVmaXhfZGlyPQorICAgIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzPQorCisgICAgYXZvaWRfdmVyc2lvbj1ubworICAgIGJpbmRpcj0KKyAgICBkbGZpbGVzPQorICAgIGRscHJlZmlsZXM9CisgICAgZGxzZWxmPW5vCisgICAgZXhwb3J0X2R5bmFtaWM9bm8KKyAgICBleHBvcnRfc3ltYm9scz0KKyAgICBleHBvcnRfc3ltYm9sc19yZWdleD0KKyAgICBnZW5lcmF0ZWQ9CisgICAgbGlib2Jqcz0KKyAgICBsdGxpYnM9CisgICAgbW9kdWxlPW5vCisgICAgbm9faW5zdGFsbD1ubworICAgIG9ianM9CisgICAgbm9uX3BpY19vYmplY3RzPQorICAgIHByZWNpb3VzX2ZpbGVzX3JlZ2V4PQorICAgIHByZWZlcl9zdGF0aWNfbGlicz1ubworICAgIHByZWxvYWQ9bm8KKyAgICBwcmV2PQorICAgIHByZXZhcmc9CisgICAgcmVsZWFzZT0KKyAgICBycGF0aD0KKyAgICB4cnBhdGg9CisgICAgcGVybV9ycGF0aD0KKyAgICB0ZW1wX3JwYXRoPQorICAgIHRocmVhZF9zYWZlPW5vCisgICAgdmluZm89CisgICAgdmluZm9fbnVtYmVyPW5vCisgICAgd2Vha19saWJzPQorICAgIHNpbmdsZV9tb2R1bGU9IiR7d2x9LXNpbmdsZV9tb2R1bGUiCisgICAgZnVuY19pbmZlcl90YWcgJGJhc2VfY29tcGlsZQorCisgICAgIyBXZSBuZWVkIHRvIGtub3cgLXN0YXRpYywgdG8gZ2V0IHRoZSByaWdodCBvdXRwdXQgZmlsZW5hbWVzLgorICAgIGZvciBhcmcKKyAgICBkbworICAgICAgY2FzZSAkYXJnIGluCisgICAgICAtc2hhcmVkKQorCXRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllcyAmJiBcCisJICBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gImNhbiBub3QgYnVpbGQgYSBzaGFyZWQgbGlicmFyeSIKKwlidWlsZF9vbGRfbGlicz1ubworCWJyZWFrCisJOzsKKyAgICAgIC1hbGwtc3RhdGljIHwgLXN0YXRpYyB8IC1zdGF0aWMtbGlidG9vbC1saWJzKQorCWNhc2UgJGFyZyBpbgorCS1hbGwtc3RhdGljKQorCSAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXMgJiYgdGVzdCAteiAiJGxpbmtfc3RhdGljX2ZsYWciOyB0aGVuCisJICAgIGZ1bmNfd2FybmluZyAiY29tcGxldGUgc3RhdGljIGxpbmtpbmcgaXMgaW1wb3NzaWJsZSBpbiB0aGlzIGNvbmZpZ3VyYXRpb24iCisJICBmaQorCSAgaWYgdGVzdCAtbiAiJGxpbmtfc3RhdGljX2ZsYWciOyB0aGVuCisJICAgIGRsb3Blbl9zZWxmPSRkbG9wZW5fc2VsZl9zdGF0aWMKKwkgIGZpCisJICBwcmVmZXJfc3RhdGljX2xpYnM9eWVzCisJICA7OworCS1zdGF0aWMpCisJICBpZiB0ZXN0IC16ICIkcGljX2ZsYWciICYmIHRlc3QgLW4gIiRsaW5rX3N0YXRpY19mbGFnIjsgdGhlbgorCSAgICBkbG9wZW5fc2VsZj0kZGxvcGVuX3NlbGZfc3RhdGljCisJICBmaQorCSAgcHJlZmVyX3N0YXRpY19saWJzPWJ1aWx0CisJICA7OworCS1zdGF0aWMtbGlidG9vbC1saWJzKQorCSAgaWYgdGVzdCAteiAiJHBpY19mbGFnIiAmJiB0ZXN0IC1uICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4KKwkgICAgZGxvcGVuX3NlbGY9JGRsb3Blbl9zZWxmX3N0YXRpYworCSAgZmkKKwkgIHByZWZlcl9zdGF0aWNfbGlicz15ZXMKKwkgIDs7CisJZXNhYworCWJ1aWxkX2xpYnRvb2xfbGlicz1ubworCWJ1aWxkX29sZF9saWJzPXllcworCWJyZWFrCisJOzsKKyAgICAgIGVzYWMKKyAgICBkb25lCisKKyAgICAjIFNlZSBpZiBvdXIgc2hhcmVkIGFyY2hpdmVzIGRlcGVuZCBvbiBzdGF0aWMgYXJjaGl2ZXMuCisgICAgdGVzdCAtbiAiJG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMiICYmIGJ1aWxkX29sZF9saWJzPXllcworCisgICAgIyBHbyB0aHJvdWdoIHRoZSBhcmd1bWVudHMsIHRyYW5zZm9ybWluZyB0aGVtIG9uIHRoZSB3YXkuCisgICAgd2hpbGUgdGVzdCAiJCMiIC1ndCAwOyBkbworICAgICAgYXJnPSIkMSIKKyAgICAgIHNoaWZ0CisgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorICAgICAgcWFyZz0kZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHQKKyAgICAgIGZ1bmNfYXBwZW5kIGxpYnRvb2xfYXJncyAiICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKworICAgICAgIyBJZiB0aGUgcHJldmlvdXMgb3B0aW9uIG5lZWRzIGFuIGFyZ3VtZW50LCBhc3NpZ24gaXQuCisgICAgICBpZiB0ZXN0IC1uICIkcHJldiI7IHRoZW4KKwljYXNlICRwcmV2IGluCisJb3V0cHV0KQorCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgQE9VVFBVVEAiCisJICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgQE9VVFBVVEAiCisJICA7OworCWVzYWMKKworCWNhc2UgJHByZXYgaW4KKwliaW5kaXIpCisJICBiaW5kaXI9IiRhcmciCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJZGxmaWxlc3xkbHByZWZpbGVzKQorCSAgaWYgdGVzdCAiJHByZWxvYWQiID0gbm87IHRoZW4KKwkgICAgIyBBZGQgdGhlIHN5bWJvbCBvYmplY3QgaW50byB0aGUgbGlua2luZyBjb21tYW5kcy4KKwkgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgQFNZTUZJTEVAIgorCSAgICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgQFNZTUZJTEVAIgorCSAgICBwcmVsb2FkPXllcworCSAgZmkKKwkgIGNhc2UgJGFyZyBpbgorCSAgKi5sYSB8ICoubG8pIDs7ICAjIFdlIGhhbmRsZSB0aGVzZSBjYXNlcyBiZWxvdy4KKwkgIGZvcmNlKQorCSAgICBpZiB0ZXN0ICIkZGxzZWxmIiA9IG5vOyB0aGVuCisJICAgICAgZGxzZWxmPW5lZWRsZXNzCisJICAgICAgZXhwb3J0X2R5bmFtaWM9eWVzCisJICAgIGZpCisJICAgIHByZXY9CisJICAgIGNvbnRpbnVlCisJICAgIDs7CisJICBzZWxmKQorCSAgICBpZiB0ZXN0ICIkcHJldiIgPSBkbHByZWZpbGVzOyB0aGVuCisJICAgICAgZGxzZWxmPXllcworCSAgICBlbGlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXMgJiYgdGVzdCAiJGRsb3Blbl9zZWxmIiAhPSB5ZXM7IHRoZW4KKwkgICAgICBkbHNlbGY9eWVzCisJICAgIGVsc2UKKwkgICAgICBkbHNlbGY9bmVlZGxlc3MKKwkgICAgICBleHBvcnRfZHluYW1pYz15ZXMKKwkgICAgZmkKKwkgICAgcHJldj0KKwkgICAgY29udGludWUKKwkgICAgOzsKKwkgICopCisJICAgIGlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KKwkgICAgICBmdW5jX2FwcGVuZCBkbGZpbGVzICIgJGFyZyIKKwkgICAgZWxzZQorCSAgICAgIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkYXJnIgorCSAgICBmaQorCSAgICBwcmV2PQorCSAgICBjb250aW51ZQorCSAgICA7OworCSAgZXNhYworCSAgOzsKKwlleHBzeW1zKQorCSAgZXhwb3J0X3N5bWJvbHM9IiRhcmciCisJICB0ZXN0IC1mICIkYXJnIiBcCisJICAgIHx8IGZ1bmNfZmF0YWxfZXJyb3IgInN5bWJvbCBmaWxlIFxgJGFyZycgZG9lcyBub3QgZXhpc3QiCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJZXhwc3ltc19yZWdleCkKKwkgIGV4cG9ydF9zeW1ib2xzX3JlZ2V4PSIkYXJnIgorCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCWZyYW1ld29yaykKKwkgIGNhc2UgJGhvc3QgaW4KKwkgICAgKi0qLWRhcndpbiopCisJICAgICAgY2FzZSAiJGRlcGxpYnMgIiBpbgorCQkqIiAkcWFyZy5sdGZyYW1ld29yayAiKikgOzsKKwkJKikgZnVuY19hcHBlbmQgZGVwbGlicyAiICRxYXJnLmx0ZnJhbWV3b3JrIiAjIHRoaXMgaXMgZml4ZWQgbGF0ZXIKKwkJICAgOzsKKwkgICAgICBlc2FjCisJICAgICAgOzsKKwkgIGVzYWMKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlpbnN0X3ByZWZpeCkKKwkgIGluc3RfcHJlZml4X2Rpcj0iJGFyZyIKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlvYmplY3RsaXN0KQorCSAgaWYgdGVzdCAtZiAiJGFyZyI7IHRoZW4KKwkgICAgc2F2ZV9hcmc9JGFyZworCSAgICBtb3JlYXJncz0KKwkgICAgZm9yIGZpbCBpbiBgY2F0ICIkc2F2ZV9hcmciYAorCSAgICBkbworIwkgICAgICBmdW5jX2FwcGVuZCBtb3JlYXJncyAiICRmaWwiCisJICAgICAgYXJnPSRmaWwKKwkgICAgICAjIEEgbGlidG9vbC1jb250cm9sbGVkIG9iamVjdC4KKworCSAgICAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIG9iamVjdC4KKwkgICAgICBpZiBmdW5jX2xhbGliX3Vuc2FmZV9wICIkYXJnIjsgdGhlbgorCQlwaWNfb2JqZWN0PQorCQlub25fcGljX29iamVjdD0KKworCQkjIFJlYWQgdGhlIC5sbyBmaWxlCisJCWZ1bmNfc291cmNlICIkYXJnIgorCisJCWlmIHRlc3QgLXogIiRwaWNfb2JqZWN0IiB8fAorCQkgICB0ZXN0IC16ICIkbm9uX3BpY19vYmplY3QiIHx8CisJCSAgIHRlc3QgIiRwaWNfb2JqZWN0IiA9IG5vbmUgJiYKKwkJICAgdGVzdCAiJG5vbl9waWNfb2JqZWN0IiA9IG5vbmU7IHRoZW4KKwkJICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBuYW1lIG9mIG9iamVjdCBmb3IgXGAkYXJnJyIKKwkJZmkKKworCQkjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorCQlmdW5jX2Rpcm5hbWUgIiRhcmciICIvIiAiIgorCQl4ZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKworCQlpZiB0ZXN0ICIkcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgorCQkgICMgUHJlcGVuZCB0aGUgc3ViZGlyZWN0b3J5IHRoZSBvYmplY3QgaXMgZm91bmQgaW4uCisJCSAgcGljX29iamVjdD0iJHhkaXIkcGljX29iamVjdCIKKworCQkgIGlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KKwkJICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzICYmIHRlc3QgIiRkbG9wZW5fc3VwcG9ydCIgPSB5ZXM7IHRoZW4KKwkJICAgICAgZnVuY19hcHBlbmQgZGxmaWxlcyAiICRwaWNfb2JqZWN0IgorCQkgICAgICBwcmV2PQorCQkgICAgICBjb250aW51ZQorCQkgICAgZWxzZQorCQkgICAgICAjIElmIGxpYnRvb2wgb2JqZWN0cyBhcmUgdW5zdXBwb3J0ZWQsIHRoZW4gd2UgbmVlZCB0byBwcmVsb2FkLgorCQkgICAgICBwcmV2PWRscHJlZmlsZXMKKwkJICAgIGZpCisJCSAgZmkKKworCQkgICMgQ0hFQ0sgTUU6ICBJIHRoaW5rIEkgYnVzdGVkIHRoaXMuICAtT3NzYW1hCisJCSAgaWYgdGVzdCAiJHByZXYiID0gZGxwcmVmaWxlczsgdGhlbgorCQkgICAgIyBQcmVsb2FkIHRoZSBvbGQtc3R5bGUgb2JqZWN0LgorCQkgICAgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRwaWNfb2JqZWN0IgorCQkgICAgcHJldj0KKwkJICBmaQorCisJCSAgIyBBIFBJQyBvYmplY3QuCisJCSAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRwaWNfb2JqZWN0IgorCQkgIGFyZz0iJHBpY19vYmplY3QiCisJCWZpCisKKwkJIyBOb24tUElDIG9iamVjdC4KKwkJaWYgdGVzdCAiJG5vbl9waWNfb2JqZWN0IiAhPSBub25lOyB0aGVuCisJCSAgIyBQcmVwZW5kIHRoZSBzdWJkaXJlY3RvcnkgdGhlIG9iamVjdCBpcyBmb3VuZCBpbi4KKwkJICBub25fcGljX29iamVjdD0iJHhkaXIkbm9uX3BpY19vYmplY3QiCisKKwkJICAjIEEgc3RhbmRhcmQgbm9uLVBJQyBvYmplY3QKKwkJICBmdW5jX2FwcGVuZCBub25fcGljX29iamVjdHMgIiAkbm9uX3BpY19vYmplY3QiCisJCSAgaWYgdGVzdCAteiAiJHBpY19vYmplY3QiIHx8IHRlc3QgIiRwaWNfb2JqZWN0IiA9IG5vbmUgOyB0aGVuCisJCSAgICBhcmc9IiRub25fcGljX29iamVjdCIKKwkJICBmaQorCQllbHNlCisJCSAgIyBJZiB0aGUgUElDIG9iamVjdCBleGlzdHMsIHVzZSBpdCBpbnN0ZWFkLgorCQkgICMgJHhkaXIgd2FzIHByZXBlbmRlZCB0byAkcGljX29iamVjdCBhYm92ZS4KKwkJICBub25fcGljX29iamVjdD0iJHBpY19vYmplY3QiCisJCSAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgorCQlmaQorCSAgICAgIGVsc2UKKwkJIyBPbmx5IGFuIGVycm9yIGlmIG5vdCBkb2luZyBhIGRyeS1ydW4uCisJCWlmICRvcHRfZHJ5X3J1bjsgdGhlbgorCQkgICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCisJCSAgZnVuY19kaXJuYW1lICIkYXJnIiAiLyIgIiIKKwkJICB4ZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKworCQkgIGZ1bmNfbG8ybyAiJGFyZyIKKwkJICBwaWNfb2JqZWN0PSR4ZGlyJG9iamRpci8kZnVuY19sbzJvX3Jlc3VsdAorCQkgIG5vbl9waWNfb2JqZWN0PSR4ZGlyJGZ1bmNfbG8yb19yZXN1bHQKKwkJICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJHBpY19vYmplY3QiCisJCSAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgorCSAgICAgICAgZWxzZQorCQkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGFyZycgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBvYmplY3QiCisJCWZpCisJICAgICAgZmkKKwkgICAgZG9uZQorCSAgZWxzZQorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJsaW5rIGlucHV0IGZpbGUgXGAkYXJnJyBkb2VzIG5vdCBleGlzdCIKKwkgIGZpCisJICBhcmc9JHNhdmVfYXJnCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJcHJlY2lvdXNfcmVnZXgpCisJICBwcmVjaW91c19maWxlc19yZWdleD0iJGFyZyIKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlyZWxlYXNlKQorCSAgcmVsZWFzZT0iLSRhcmciCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJcnBhdGggfCB4cnBhdGgpCisJICAjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KKwkgIGNhc2UgJGFyZyBpbgorCSAgW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSA7OworCSAgKikKKwkgICAgZnVuY19mYXRhbF9lcnJvciAib25seSBhYnNvbHV0ZSBydW4tcGF0aHMgYXJlIGFsbG93ZWQiCisJICAgIDs7CisJICBlc2FjCisJICBpZiB0ZXN0ICIkcHJldiIgPSBycGF0aDsgdGhlbgorCSAgICBjYXNlICIkcnBhdGggIiBpbgorCSAgICAqIiAkYXJnICIqKSA7OworCSAgICAqKSBmdW5jX2FwcGVuZCBycGF0aCAiICRhcmciIDs7CisJICAgIGVzYWMKKwkgIGVsc2UKKwkgICAgY2FzZSAiJHhycGF0aCAiIGluCisJICAgICoiICRhcmcgIiopIDs7CisJICAgICopIGZ1bmNfYXBwZW5kIHhycGF0aCAiICRhcmciIDs7CisJICAgIGVzYWMKKwkgIGZpCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJc2hyZXh0KQorCSAgc2hyZXh0X2NtZHM9IiRhcmciCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJd2VhaykKKwkgIGZ1bmNfYXBwZW5kIHdlYWtfbGlicyAiICRhcmciCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJeGNjbGlua2VyKQorCSAgZnVuY19hcHBlbmQgbGlua2VyX2ZsYWdzICIgJHFhcmciCisJICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRxYXJnIgorCSAgcHJldj0KKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRxYXJnIgorCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRxYXJnIgorCSAgY29udGludWUKKwkgIDs7CisJeGNvbXBpbGVyKQorCSAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkcWFyZyIKKwkgIHByZXY9CisJICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkcWFyZyIKKwkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkcWFyZyIKKwkgIGNvbnRpbnVlCisJICA7OworCXhsaW5rZXIpCisJICBmdW5jX2FwcGVuZCBsaW5rZXJfZmxhZ3MgIiAkcWFyZyIKKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJHdsJHFhcmciCisJICBwcmV2PQorCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJHdsJHFhcmciCisJICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJHdsJHFhcmciCisJICBjb250aW51ZQorCSAgOzsKKwkqKQorCSAgZXZhbCAiJHByZXY9XCJcJGFyZ1wiIgorCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCWVzYWMKKyAgICAgIGZpICMgdGVzdCAtbiAiJHByZXYiCisKKyAgICAgIHByZXZhcmc9IiRhcmciCisKKyAgICAgIGNhc2UgJGFyZyBpbgorICAgICAgLWFsbC1zdGF0aWMpCisJaWYgdGVzdCAtbiAiJGxpbmtfc3RhdGljX2ZsYWciOyB0aGVuCisJICAjIFNlZSBjb21tZW50IGZvciAtc3RhdGljIGZsYWcgYmVsb3csIGZvciBtb3JlIGRldGFpbHMuCisJICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkbGlua19zdGF0aWNfZmxhZyIKKwkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkbGlua19zdGF0aWNfZmxhZyIKKwlmaQorCWNvbnRpbnVlCisJOzsKKworICAgICAgLWFsbG93LXVuZGVmaW5lZCkKKwkjIEZJWE1FOiByZW1vdmUgdGhpcyBmbGFnIHNvbWV0aW1lIGluIHRoZSBmdXR1cmUuCisJZnVuY19mYXRhbF9lcnJvciAiXGAtYWxsb3ctdW5kZWZpbmVkJyBtdXN0IG5vdCBiZSB1c2VkIGJlY2F1c2UgaXQgaXMgdGhlIGRlZmF1bHQiCisJOzsKKworICAgICAgLWF2b2lkLXZlcnNpb24pCisJYXZvaWRfdmVyc2lvbj15ZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1iaW5kaXIpCisJcHJldj1iaW5kaXIKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1kbG9wZW4pCisJcHJldj1kbGZpbGVzCisJY29udGludWUKKwk7OworCisgICAgICAtZGxwcmVvcGVuKQorCXByZXY9ZGxwcmVmaWxlcworCWNvbnRpbnVlCisJOzsKKworICAgICAgLWV4cG9ydC1keW5hbWljKQorCWV4cG9ydF9keW5hbWljPXllcworCWNvbnRpbnVlCisJOzsKKworICAgICAgLWV4cG9ydC1zeW1ib2xzIHwgLWV4cG9ydC1zeW1ib2xzLXJlZ2V4KQorCWlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgfHwgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhlbgorCSAgZnVuY19mYXRhbF9lcnJvciAibW9yZSB0aGFuIG9uZSAtZXhwb3J0ZWQtc3ltYm9scyBhcmd1bWVudCBpcyBub3QgYWxsb3dlZCIKKwlmaQorCWlmIHRlc3QgIlgkYXJnIiA9ICJYLWV4cG9ydC1zeW1ib2xzIjsgdGhlbgorCSAgcHJldj1leHBzeW1zCisJZWxzZQorCSAgcHJldj1leHBzeW1zX3JlZ2V4CisJZmkKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1mcmFtZXdvcmspCisJcHJldj1mcmFtZXdvcmsKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1pbnN0LXByZWZpeC1kaXIpCisJcHJldj1pbnN0X3ByZWZpeAorCWNvbnRpbnVlCisJOzsKKworICAgICAgIyBUaGUgbmF0aXZlIElSSVggbGlua2VyIHVuZGVyc3RhbmRzIC1MQU5HOiosIC1MSVNUOiogYW5kIC1MTk86KgorICAgICAgIyBzbywgaWYgd2Ugc2VlIHRoZXNlIGZsYWdzIGJlIGNhcmVmdWwgbm90IHRvIHRyZWF0IHRoZW0gbGlrZSAtTAorICAgICAgLUxbQS1aXVtBLVpdKjoqKQorCWNhc2UgJHdpdGhfZ2NjLyRob3N0IGluCisJbm8vKi0qLWlyaXgqIHwgLyotKi1pcml4KikKKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCisJICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKKwkgIDs7CisJZXNhYworCWNvbnRpbnVlCisJOzsKKworICAgICAgLUwqKQorCWZ1bmNfc3RyaXBuYW1lICItTCIgJycgIiRhcmciCisJaWYgdGVzdCAteiAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCI7IHRoZW4KKwkgIGlmIHRlc3QgIiQjIiAtZ3QgMDsgdGhlbgorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJyZXF1aXJlIG5vIHNwYWNlIGJldHdlZW4gXGAtTCcgYW5kIFxgJDEnIgorCSAgZWxzZQorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJuZWVkIHBhdGggZm9yIFxgLUwnIG9wdGlvbiIKKwkgIGZpCisJZmkKKwlmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKwlkaXI9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAorCSMgV2UgbmVlZCBhbiBhYnNvbHV0ZSBwYXRoLgorCWNhc2UgJGRpciBpbgorCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgOzsKKwkqKQorCSAgYWJzZGlyPWBjZCAiJGRpciIgJiYgcHdkYAorCSAgdGVzdCAteiAiJGFic2RpciIgJiYgXAorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZGV0ZXJtaW5lIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIG9mIFxgJGRpciciCisJICBkaXI9IiRhYnNkaXIiCisJICA7OworCWVzYWMKKwljYXNlICIkZGVwbGlicyAiIGluCisJKiIgLUwkZGlyICIqIHwgKiIgJGFyZyAiKikKKwkgICMgV2lsbCBvbmx5IGhhcHBlbiBmb3IgYWJzb2x1dGUgb3Igc3lzcm9vdCBhcmd1bWVudHMKKwkgIDs7CisJKikKKwkgICMgUHJlc2VydmUgc3lzcm9vdCwgYnV0IG5ldmVyIGluY2x1ZGUgcmVsYXRpdmUgZGlyZWN0b3JpZXMKKwkgIGNhc2UgJGRpciBpbgorCSAgICBbXFwvXSogfCBbQS1aYS16XTpbXFwvXSogfCA9KikgZnVuY19hcHBlbmQgZGVwbGlicyAiICRhcmciIDs7CisJICAgICopIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAtTCRkaXIiIDs7CisJICBlc2FjCisJICBmdW5jX2FwcGVuZCBsaWJfc2VhcmNoX3BhdGggIiAkZGlyIgorCSAgOzsKKwllc2FjCisJY2FzZSAkaG9zdCBpbgorCSotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqIHwgKi1jZWdjYyopCisJICB0ZXN0YmluZGlyPWAkRUNITyAiJGRpciIgfCAkU0VEICdzKi9saWIkKi9iaW4qJ2AKKwkgIGNhc2UgOiRkbGxzZWFyY2hwYXRoOiBpbgorCSAgKiI6JGRpcjoiKikgOzsKKwkgIDo6KSBkbGxzZWFyY2hwYXRoPSRkaXI7OworCSAgKikgZnVuY19hcHBlbmQgZGxsc2VhcmNocGF0aCAiOiRkaXIiOzsKKwkgIGVzYWMKKwkgIGNhc2UgOiRkbGxzZWFyY2hwYXRoOiBpbgorCSAgKiI6JHRlc3RiaW5kaXI6IiopIDs7CisJICA6OikgZGxsc2VhcmNocGF0aD0kdGVzdGJpbmRpcjs7CisJICAqKSBmdW5jX2FwcGVuZCBkbGxzZWFyY2hwYXRoICI6JHRlc3RiaW5kaXIiOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworCWNvbnRpbnVlCisJOzsKKworICAgICAgLWwqKQorCWlmIHRlc3QgIlgkYXJnIiA9ICJYLWxjIiB8fCB0ZXN0ICJYJGFyZyIgPSAiWC1sbSI7IHRoZW4KKwkgIGNhc2UgJGhvc3QgaW4KKwkgICotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1iZW9zKiB8ICotY2VnY2MqIHwgKi0qLWhhaWt1KikKKwkgICAgIyBUaGVzZSBzeXN0ZW1zIGRvbid0IGFjdHVhbGx5IGhhdmUgYSBDIG9yIG1hdGggbGlicmFyeSAoYXMgc3VjaCkKKwkgICAgY29udGludWUKKwkgICAgOzsKKwkgICotKi1vczIqKQorCSAgICAjIFRoZXNlIHN5c3RlbXMgZG9uJ3QgYWN0dWFsbHkgaGF2ZSBhIEMgbGlicmFyeSAoYXMgc3VjaCkKKwkgICAgdGVzdCAiWCRhcmciID0gIlgtbGMiICYmIGNvbnRpbnVlCisJICAgIDs7CisJICAqLSotb3BlbmJzZCogfCAqLSotZnJlZWJzZCogfCAqLSotZHJhZ29uZmx5KikKKwkgICAgIyBEbyBub3QgaW5jbHVkZSBsaWJjIGR1ZSB0byB1cyBoYXZpbmcgbGliYy9saWJjX3IuCisJICAgIHRlc3QgIlgkYXJnIiA9ICJYLWxjIiAmJiBjb250aW51ZQorCSAgICA7OworCSAgKi0qLXJoYXBzb2R5KiB8ICotKi1kYXJ3aW4xLlswMTJdKQorCSAgICAjIFJoYXBzb2R5IEMgYW5kIG1hdGggbGlicmFyaWVzIGFyZSBpbiB0aGUgU3lzdGVtIGZyYW1ld29yaworCSAgICBmdW5jX2FwcGVuZCBkZXBsaWJzICIgU3lzdGVtLmx0ZnJhbWV3b3JrIgorCSAgICBjb250aW51ZQorCSAgICA7OworCSAgKi0qLXNjbzMuMnY1KiB8ICotKi1zY281djYqKQorCSAgICAjIENhdXNlcyBwcm9ibGVtcyB3aXRoIF9fY3R5cGUKKwkgICAgdGVzdCAiWCRhcmciID0gIlgtbGMiICYmIGNvbnRpbnVlCisJICAgIDs7CisJICAqLSotc3lzdjQuMnV3MiogfCAqLSotc3lzdjUqIHwgKi0qLXVuaXh3YXJlKiB8ICotKi1PcGVuVU5JWCopCisJICAgICMgQ29tcGlsZXIgaW5zZXJ0cyBsaWJjIGluIHRoZSBjb3JyZWN0IHBsYWNlIGZvciB0aHJlYWRzIHRvIHdvcmsKKwkgICAgdGVzdCAiWCRhcmciID0gIlgtbGMiICYmIGNvbnRpbnVlCisJICAgIDs7CisJICBlc2FjCisJZWxpZiB0ZXN0ICJYJGFyZyIgPSAiWC1sY19yIjsgdGhlbgorCSBjYXNlICRob3N0IGluCisJICotKi1vcGVuYnNkKiB8ICotKi1mcmVlYnNkKiB8ICotKi1kcmFnb25mbHkqKQorCSAgICMgRG8gbm90IGluY2x1ZGUgbGliY19yIGRpcmVjdGx5LCB1c2UgLXB0aHJlYWQgZmxhZy4KKwkgICBjb250aW51ZQorCSAgIDs7CisJIGVzYWMKKwlmaQorCWZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAkYXJnIgorCWNvbnRpbnVlCisJOzsKKworICAgICAgLW1vZHVsZSkKKwltb2R1bGU9eWVzCisJY29udGludWUKKwk7OworCisgICAgICAjIFRydTY0IFVOSVggdXNlcyAtbW9kZWwgW2FyZ10gdG8gZGV0ZXJtaW5lIHRoZSBsYXlvdXQgb2YgQysrCisgICAgICAjIGNsYXNzZXMsIG5hbWUgbWFuZ2xpbmcsIGFuZCBleGNlcHRpb24gaGFuZGxpbmcuCisgICAgICAjIERhcndpbiB1c2VzIHRoZSAtYXJjaCBmbGFnIHRvIGRldGVybWluZSBvdXRwdXQgYXJjaGl0ZWN0dXJlLgorICAgICAgLW1vZGVsfC1hcmNofC1pc3lzcm9vdHwtLXN5c3Jvb3QpCisJZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkYXJnIgorCWZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCisJZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCisJcHJldj14Y29tcGlsZXIKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1tdHwtbXRocmVhZHN8LWt0aHJlYWR8LUt0aHJlYWR8LXB0aHJlYWR8LXB0aHJlYWRzfC0tdGhyZWFkLXNhZmUgXAorICAgICAgfC10aHJlYWRzfC1mb3Blbm1wfC1vcGVubXB8LW1wfC14b3Blbm1wfC1vbXB8LXFzbXA9KikKKwlmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRhcmciCisJZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKwlmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKKwljYXNlICIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiBpbgorCSAgICAqIiAkYXJnICIqKSA7OworCSAgICAqICkgZnVuY19hcHBlbmQgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiAkYXJnIiA7OworCWVzYWMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1tdWx0aV9tb2R1bGUpCisJc2luZ2xlX21vZHVsZT0iJHt3bH0tbXVsdGlfbW9kdWxlIgorCWNvbnRpbnVlCisJOzsKKworICAgICAgLW5vLWZhc3QtaW5zdGFsbCkKKwlmYXN0X2luc3RhbGw9bm8KKwljb250aW51ZQorCTs7CisKKyAgICAgIC1uby1pbnN0YWxsKQorCWNhc2UgJGhvc3QgaW4KKwkqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotb3MyKiB8ICotKi1kYXJ3aW4qIHwgKi1jZWdjYyopCisJICAjIFRoZSBQQVRIIGhhY2tlcnkgaW4gd3JhcHBlciBzY3JpcHRzIGlzIHJlcXVpcmVkIG9uIFdpbmRvd3MKKwkgICMgYW5kIERhcndpbiBpbiBvcmRlciBmb3IgdGhlIGxvYWRlciB0byBmaW5kIGFueSBkbGxzIGl0IG5lZWRzLgorCSAgZnVuY193YXJuaW5nICJcYC1uby1pbnN0YWxsJyBpcyBpZ25vcmVkIGZvciAkaG9zdCIKKwkgIGZ1bmNfd2FybmluZyAiYXNzdW1pbmcgXGAtbm8tZmFzdC1pbnN0YWxsJyBpbnN0ZWFkIgorCSAgZmFzdF9pbnN0YWxsPW5vCisJICA7OworCSopIG5vX2luc3RhbGw9eWVzIDs7CisJZXNhYworCWNvbnRpbnVlCisJOzsKKworICAgICAgLW5vLXVuZGVmaW5lZCkKKwlhbGxvd191bmRlZmluZWQ9bm8KKwljb250aW51ZQorCTs7CisKKyAgICAgIC1vYmplY3RsaXN0KQorCXByZXY9b2JqZWN0bGlzdAorCWNvbnRpbnVlCisJOzsKKworICAgICAgLW8pIHByZXY9b3V0cHV0IDs7CisKKyAgICAgIC1wcmVjaW91cy1maWxlcy1yZWdleCkKKwlwcmV2PXByZWNpb3VzX3JlZ2V4CisJY29udGludWUKKwk7OworCisgICAgICAtcmVsZWFzZSkKKwlwcmV2PXJlbGVhc2UKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1ycGF0aCkKKwlwcmV2PXJwYXRoCisJY29udGludWUKKwk7OworCisgICAgICAtUikKKwlwcmV2PXhycGF0aAorCWNvbnRpbnVlCisJOzsKKworICAgICAgLVIqKQorCWZ1bmNfc3RyaXBuYW1lICctUicgJycgIiRhcmciCisJZGlyPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KKwljYXNlICRkaXIgaW4KKwlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIDs7CisJPSopCisJICBmdW5jX3N0cmlwbmFtZSAnPScgJycgIiRkaXIiCisJICBkaXI9JGx0X3N5c3Jvb3QkZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICA7OworCSopCisJICBmdW5jX2ZhdGFsX2Vycm9yICJvbmx5IGFic29sdXRlIHJ1bi1wYXRocyBhcmUgYWxsb3dlZCIKKwkgIDs7CisJZXNhYworCWNhc2UgIiR4cnBhdGggIiBpbgorCSoiICRkaXIgIiopIDs7CisJKikgZnVuY19hcHBlbmQgeHJwYXRoICIgJGRpciIgOzsKKwllc2FjCisJY29udGludWUKKwk7OworCisgICAgICAtc2hhcmVkKQorCSMgVGhlIGVmZmVjdHMgb2YgLXNoYXJlZCBhcmUgZGVmaW5lZCBpbiBhIHByZXZpb3VzIGxvb3AuCisJY29udGludWUKKwk7OworCisgICAgICAtc2hyZXh0KQorCXByZXY9c2hyZXh0CisJY29udGludWUKKwk7OworCisgICAgICAtc3RhdGljIHwgLXN0YXRpYy1saWJ0b29sLWxpYnMpCisJIyBUaGUgZWZmZWN0cyBvZiAtc3RhdGljIGFyZSBkZWZpbmVkIGluIGEgcHJldmlvdXMgbG9vcC4KKwkjIFdlIHVzZWQgdG8gZG8gdGhlIHNhbWUgYXMgLWFsbC1zdGF0aWMgb24gcGxhdGZvcm1zIHRoYXQKKwkjIGRpZG4ndCBoYXZlIGEgUElDIGZsYWcsIGJ1dCB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSBlZmZlY3RzCisJIyB3b3VsZCBiZSBlcXVpdmFsZW50IHdhcyB3cm9uZy4gIEl0IHdvdWxkIGJyZWFrIG9uIGF0IGxlYXN0CisJIyBEaWdpdGFsIFVuaXggYW5kIEFJWC4KKwljb250aW51ZQorCTs7CisKKyAgICAgIC10aHJlYWQtc2FmZSkKKwl0aHJlYWRfc2FmZT15ZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC12ZXJzaW9uLWluZm8pCisJcHJldj12aW5mbworCWNvbnRpbnVlCisJOzsKKworICAgICAgLXZlcnNpb24tbnVtYmVyKQorCXByZXY9dmluZm8KKwl2aW5mb19udW1iZXI9eWVzCisJY29udGludWUKKwk7OworCisgICAgICAtd2VhaykKKyAgICAgICAgcHJldj13ZWFrCisJY29udGludWUKKwk7OworCisgICAgICAtV2MsKikKKwlmdW5jX3N0cmlwbmFtZSAnLVdjLCcgJycgIiRhcmciCisJYXJncz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJYXJnPQorCXNhdmVfaWZzPSIkSUZTIjsgSUZTPScsJworCWZvciBmbGFnIGluICRhcmdzOyBkbworCSAgSUZTPSIkc2F2ZV9pZnMiCisgICAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGZsYWciCisJICBmdW5jX2FwcGVuZCBhcmcgIiAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKwlkb25lCisJSUZTPSIkc2F2ZV9pZnMiCisJZnVuY19zdHJpcG5hbWUgJyAnICcnICIkYXJnIgorCWFyZz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJOzsKKworICAgICAgLVdsLCopCisJZnVuY19zdHJpcG5hbWUgJy1XbCwnICcnICIkYXJnIgorCWFyZ3M9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCWFyZz0KKwlzYXZlX2lmcz0iJElGUyI7IElGUz0nLCcKKwlmb3IgZmxhZyBpbiAkYXJnczsgZG8KKwkgIElGUz0iJHNhdmVfaWZzIgorICAgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRmbGFnIgorCSAgZnVuY19hcHBlbmQgYXJnICIgJHdsJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCSAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkd2wkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJICBmdW5jX2FwcGVuZCBsaW5rZXJfZmxhZ3MgIiAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJZG9uZQorCUlGUz0iJHNhdmVfaWZzIgorCWZ1bmNfc3RyaXBuYW1lICcgJyAnJyAiJGFyZyIKKwlhcmc9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCTs7CisKKyAgICAgIC1YY29tcGlsZXIpCisJcHJldj14Y29tcGlsZXIKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1YbGlua2VyKQorCXByZXY9eGxpbmtlcgorCWNvbnRpbnVlCisJOzsKKworICAgICAgLVhDQ2xpbmtlcikKKwlwcmV2PXhjY2xpbmtlcgorCWNvbnRpbnVlCisJOzsKKworICAgICAgIyAtbXNnXyogZm9yIG9zZiBjYworICAgICAgLW1zZ18qKQorCWZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisJYXJnPSIkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJOzsKKworICAgICAgIyBGbGFncyB0byBiZSBwYXNzZWQgdGhyb3VnaCB1bmNoYW5nZWQsIHdpdGggcmF0aW9uYWxlOgorICAgICAgIyAtNjQsIC1taXBzWzAtOV0gICAgICBlbmFibGUgNjQtYml0IG1vZGUgZm9yIHRoZSBTR0kgY29tcGlsZXIKKyAgICAgICMgLXJbMC05XVswLTldKiAgICAgICAgc3BlY2lmeSBwcm9jZXNzb3IgZm9yIHRoZSBTR0kgY29tcGlsZXIKKyAgICAgICMgLXhhcmNoPSosIC14dGFyZ2V0PSogZW5hYmxlIDY0LWJpdCBtb2RlIGZvciB0aGUgU3VuIGNvbXBpbGVyCisgICAgICAjICtEQSosICtERCogICAgICAgICAgIGVuYWJsZSA2NC1iaXQgbW9kZSBmb3IgdGhlIEhQIGNvbXBpbGVyCisgICAgICAjIC1xKiAgICAgICAgICAgICAgICAgIGNvbXBpbGVyIGFyZ3MgZm9yIHRoZSBJQk0gY29tcGlsZXIKKyAgICAgICMgLW0qLCAtdFs0NV0qLCAtdHhzY2FsZSogYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZsYWdzIGZvciBHQ0MKKyAgICAgICMgLUYvcGF0aCAgICAgICAgICAgICAgcGF0aCB0byB1bmluc3RhbGxlZCBmcmFtZXdvcmtzLCBnY2Mgb24gZGFyd2luCisgICAgICAjIC1wLCAtcGcsIC0tY292ZXJhZ2UsIC1mcHJvZmlsZS0qICBwcm9maWxpbmcgZmxhZ3MgZm9yIEdDQworICAgICAgIyBAZmlsZSAgICAgICAgICAgICAgICBHQ0MgcmVzcG9uc2UgZmlsZXMKKyAgICAgICMgLXRwPSogICAgICAgICAgICAgICAgUG9ydGxhbmQgcGdjYyB0YXJnZXQgcHJvY2Vzc29yIHNlbGVjdGlvbgorICAgICAgIyAtLXN5c3Jvb3Q9KiAgICAgICAgICBmb3Igc3lzcm9vdCBzdXBwb3J0CisgICAgICAjIC1PKiwgLWZsdG8qLCAtZndob3ByKiwgLWZ1c2UtbGlua2VyLXBsdWdpbiBHQ0MgbGluay10aW1lIG9wdGltaXphdGlvbgorICAgICAgLTY0fC1taXBzWzAtOV18LXJbMC05XVswLTldKnwteGFyY2g9KnwteHRhcmdldD0qfCtEQSp8K0REKnwtcSp8LW0qfCBcCisgICAgICAtdFs0NV0qfC10eHNjYWxlKnwtcHwtcGd8LS1jb3ZlcmFnZXwtZnByb2ZpbGUtKnwtRip8QCp8LXRwPSp8LS1zeXNyb290PSp8IFwKKyAgICAgIC1PKnwtZmx0byp8LWZ3aG9wcip8LWZ1c2UtbGlua2VyLXBsdWdpbikKKyAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKwlhcmc9IiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKyAgICAgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKyAgICAgICAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCisgICAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJGFyZyIKKyAgICAgICAgY29udGludWUKKyAgICAgICAgOzsKKworICAgICAgIyBTb21lIG90aGVyIGNvbXBpbGVyIGZsYWcuCisgICAgICAtKiB8ICsqKQorICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorCWFyZz0iJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCTs7CisKKyAgICAgICouJG9iamV4dCkKKwkjIEEgc3RhbmRhcmQgb2JqZWN0LgorCWZ1bmNfYXBwZW5kIG9ianMgIiAkYXJnIgorCTs7CisKKyAgICAgICoubG8pCisJIyBBIGxpYnRvb2wtY29udHJvbGxlZCBvYmplY3QuCisKKwkjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBvYmplY3QuCisJaWYgZnVuY19sYWxpYl91bnNhZmVfcCAiJGFyZyI7IHRoZW4KKwkgIHBpY19vYmplY3Q9CisJICBub25fcGljX29iamVjdD0KKworCSAgIyBSZWFkIHRoZSAubG8gZmlsZQorCSAgZnVuY19zb3VyY2UgIiRhcmciCisKKwkgIGlmIHRlc3QgLXogIiRwaWNfb2JqZWN0IiB8fAorCSAgICAgdGVzdCAteiAiJG5vbl9waWNfb2JqZWN0IiB8fAorCSAgICAgdGVzdCAiJHBpY19vYmplY3QiID0gbm9uZSAmJgorCSAgICAgdGVzdCAiJG5vbl9waWNfb2JqZWN0IiA9IG5vbmU7IHRoZW4KKwkgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgbmFtZSBvZiBvYmplY3QgZm9yIFxgJGFyZyciCisJICBmaQorCisJICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorCSAgZnVuY19kaXJuYW1lICIkYXJnIiAiLyIgIiIKKwkgIHhkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorCisJICBpZiB0ZXN0ICIkcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgorCSAgICAjIFByZXBlbmQgdGhlIHN1YmRpcmVjdG9yeSB0aGUgb2JqZWN0IGlzIGZvdW5kIGluLgorCSAgICBwaWNfb2JqZWN0PSIkeGRpciRwaWNfb2JqZWN0IgorCisJICAgIGlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KKwkgICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllcyAmJiB0ZXN0ICIkZGxvcGVuX3N1cHBvcnQiID0geWVzOyB0aGVuCisJCWZ1bmNfYXBwZW5kIGRsZmlsZXMgIiAkcGljX29iamVjdCIKKwkJcHJldj0KKwkJY29udGludWUKKwkgICAgICBlbHNlCisJCSMgSWYgbGlidG9vbCBvYmplY3RzIGFyZSB1bnN1cHBvcnRlZCwgdGhlbiB3ZSBuZWVkIHRvIHByZWxvYWQuCisJCXByZXY9ZGxwcmVmaWxlcworCSAgICAgIGZpCisJICAgIGZpCisKKwkgICAgIyBDSEVDSyBNRTogIEkgdGhpbmsgSSBidXN0ZWQgdGhpcy4gIC1Pc3NhbWEKKwkgICAgaWYgdGVzdCAiJHByZXYiID0gZGxwcmVmaWxlczsgdGhlbgorCSAgICAgICMgUHJlbG9hZCB0aGUgb2xkLXN0eWxlIG9iamVjdC4KKwkgICAgICBmdW5jX2FwcGVuZCBkbHByZWZpbGVzICIgJHBpY19vYmplY3QiCisJICAgICAgcHJldj0KKwkgICAgZmkKKworCSAgICAjIEEgUElDIG9iamVjdC4KKwkgICAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRwaWNfb2JqZWN0IgorCSAgICBhcmc9IiRwaWNfb2JqZWN0IgorCSAgZmkKKworCSAgIyBOb24tUElDIG9iamVjdC4KKwkgIGlmIHRlc3QgIiRub25fcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgorCSAgICAjIFByZXBlbmQgdGhlIHN1YmRpcmVjdG9yeSB0aGUgb2JqZWN0IGlzIGZvdW5kIGluLgorCSAgICBub25fcGljX29iamVjdD0iJHhkaXIkbm9uX3BpY19vYmplY3QiCisKKwkgICAgIyBBIHN0YW5kYXJkIG5vbi1QSUMgb2JqZWN0CisJICAgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKKwkgICAgaWYgdGVzdCAteiAiJHBpY19vYmplY3QiIHx8IHRlc3QgIiRwaWNfb2JqZWN0IiA9IG5vbmUgOyB0aGVuCisJICAgICAgYXJnPSIkbm9uX3BpY19vYmplY3QiCisJICAgIGZpCisJICBlbHNlCisJICAgICMgSWYgdGhlIFBJQyBvYmplY3QgZXhpc3RzLCB1c2UgaXQgaW5zdGVhZC4KKwkgICAgIyAkeGRpciB3YXMgcHJlcGVuZGVkIHRvICRwaWNfb2JqZWN0IGFib3ZlLgorCSAgICBub25fcGljX29iamVjdD0iJHBpY19vYmplY3QiCisJICAgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKKwkgIGZpCisJZWxzZQorCSAgIyBPbmx5IGFuIGVycm9yIGlmIG5vdCBkb2luZyBhIGRyeS1ydW4uCisJICBpZiAkb3B0X2RyeV9ydW47IHRoZW4KKwkgICAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKwkgICAgZnVuY19kaXJuYW1lICIkYXJnIiAiLyIgIiIKKwkgICAgeGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisKKwkgICAgZnVuY19sbzJvICIkYXJnIgorCSAgICBwaWNfb2JqZWN0PSR4ZGlyJG9iamRpci8kZnVuY19sbzJvX3Jlc3VsdAorCSAgICBub25fcGljX29iamVjdD0keGRpciRmdW5jX2xvMm9fcmVzdWx0CisJICAgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkcGljX29iamVjdCIKKwkgICAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgorCSAgZWxzZQorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRhcmcnIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgb2JqZWN0IgorCSAgZmkKKwlmaQorCTs7CisKKyAgICAgICouJGxpYmV4dCkKKwkjIEFuIGFyY2hpdmUuCisJZnVuY19hcHBlbmQgZGVwbGlicyAiICRhcmciCisJZnVuY19hcHBlbmQgb2xkX2RlcGxpYnMgIiAkYXJnIgorCWNvbnRpbnVlCisJOzsKKworICAgICAgKi5sYSkKKwkjIEEgbGlidG9vbC1jb250cm9sbGVkIGxpYnJhcnkuCisKKwlmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGFyZyIKKwlpZiB0ZXN0ICIkcHJldiIgPSBkbGZpbGVzOyB0aGVuCisJICAjIFRoaXMgbGlicmFyeSB3YXMgc3BlY2lmaWVkIHdpdGggLWRsb3Blbi4KKwkgIGZ1bmNfYXBwZW5kIGRsZmlsZXMgIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgorCSAgcHJldj0KKwllbGlmIHRlc3QgIiRwcmV2IiA9IGRscHJlZmlsZXM7IHRoZW4KKwkgICMgVGhlIGxpYnJhcnkgd2FzIHNwZWNpZmllZCB3aXRoIC1kbHByZW9wZW4uCisJICBmdW5jX2FwcGVuZCBkbHByZWZpbGVzICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKKwkgIHByZXY9CisJZWxzZQorCSAgZnVuY19hcHBlbmQgZGVwbGlicyAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCisJZmkKKwljb250aW51ZQorCTs7CisKKyAgICAgICMgU29tZSBvdGhlciBjb21waWxlciBhcmd1bWVudC4KKyAgICAgICopCisJIyBVbmtub3duIGFyZ3VtZW50cyBpbiBib3RoIGZpbmFsaXplX2NvbW1hbmQgYW5kIGNvbXBpbGVfY29tbWFuZCBuZWVkCisJIyB0byBiZSBhZXN0aGV0aWNhbGx5IHF1b3RlZCBiZWNhdXNlIHRoZXkgYXJlIGV2YWxlZCBsYXRlci4KKwlmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorCWFyZz0iJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCTs7CisgICAgICBlc2FjICMgYXJnCisKKyAgICAgICMgTm93IGFjdHVhbGx5IHN1YnN0aXR1dGUgdGhlIGFyZ3VtZW50IGludG8gdGhlIGNvbW1hbmRzLgorICAgICAgaWYgdGVzdCAtbiAiJGFyZyI7IHRoZW4KKwlmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgorCWZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgorICAgICAgZmkKKyAgICBkb25lICMgYXJndW1lbnQgcGFyc2luZyBsb29wCisKKyAgICB0ZXN0IC1uICIkcHJldiIgJiYgXAorICAgICAgZnVuY19mYXRhbF9oZWxwICJ0aGUgXGAkcHJldmFyZycgb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IgorCisgICAgaWYgdGVzdCAiJGV4cG9ydF9keW5hbWljIiA9IHllcyAmJiB0ZXN0IC1uICIkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjIjsgdGhlbgorICAgICAgZXZhbCBhcmc9XCIkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjXCIKKyAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCisgICAgICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKKyAgICBmaQorCisgICAgb2xkbGlicz0KKyAgICAjIGNhbGN1bGF0ZSB0aGUgbmFtZSBvZiB0aGUgZmlsZSwgd2l0aG91dCBpdHMgZGlyZWN0b3J5CisgICAgZnVuY19iYXNlbmFtZSAiJG91dHB1dCIKKyAgICBvdXRwdXRuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisgICAgbGlib2Jqc19zYXZlPSIkbGlib2JqcyIKKworICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgorICAgICAgIyBnZXQgdGhlIGRpcmVjdG9yaWVzIGxpc3RlZCBpbiAkc2hsaWJwYXRoX3ZhcgorICAgICAgZXZhbCBzaGxpYl9zZWFyY2hfcGF0aD1cYFwkRUNITyBcIlwkeyRzaGxpYnBhdGhfdmFyfVwiIFx8IFwkU0VEIFwncy86LyAvZ1wnXGAKKyAgICBlbHNlCisgICAgICBzaGxpYl9zZWFyY2hfcGF0aD0KKyAgICBmaQorICAgIGV2YWwgc3lzX2xpYl9zZWFyY2hfcGF0aD1cIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWNcIgorICAgIGV2YWwgc3lzX2xpYl9kbHNlYXJjaF9wYXRoPVwiJHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjXCIKKworICAgIGZ1bmNfZGlybmFtZSAiJG91dHB1dCIgIi8iICIiCisgICAgb3V0cHV0X29iamRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkb2JqZGlyIgorICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0X29iamRpci8iCisgICAgdG9vbF9vdXRwdXRfb2JqZGlyPSRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQKKyAgICAjIENyZWF0ZSB0aGUgb2JqZWN0IGRpcmVjdG9yeS4KKyAgICBmdW5jX21rZGlyX3AgIiRvdXRwdXRfb2JqZGlyIgorCisgICAgIyBEZXRlcm1pbmUgdGhlIHR5cGUgb2Ygb3V0cHV0CisgICAgY2FzZSAkb3V0cHV0IGluCisgICAgIiIpCisgICAgICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYW4gb3V0cHV0IGZpbGUiCisgICAgICA7OworICAgICouJGxpYmV4dCkgbGlua21vZGU9b2xkbGliIDs7CisgICAgKi5sbyB8ICouJG9iamV4dCkgbGlua21vZGU9b2JqIDs7CisgICAgKi5sYSkgbGlua21vZGU9bGliIDs7CisgICAgKikgbGlua21vZGU9cHJvZyA7OyAjIEFueXRoaW5nIGVsc2Ugc2hvdWxkIGJlIGEgcHJvZ3JhbS4KKyAgICBlc2FjCisKKyAgICBzcGVjaWFsZGVwbGlicz0KKworICAgIGxpYnM9CisgICAgIyBGaW5kIGFsbCBpbnRlcmRlcGVuZGVudCBkZXBsaWJzIGJ5IHNlYXJjaGluZyBmb3IgbGlicmFyaWVzCisgICAgIyB0aGF0IGFyZSBsaW5rZWQgbW9yZSB0aGFuIG9uY2UgKGUuZy4gLWxhIC1sYiAtbGEpCisgICAgZm9yIGRlcGxpYiBpbiAkZGVwbGliczsgZG8KKyAgICAgIGlmICRvcHRfcHJlc2VydmVfZHVwX2RlcHMgOyB0aGVuCisJY2FzZSAiJGxpYnMgIiBpbgorCSoiICRkZXBsaWIgIiopIGZ1bmNfYXBwZW5kIHNwZWNpYWxkZXBsaWJzICIgJGRlcGxpYiIgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgZnVuY19hcHBlbmQgbGlicyAiICRkZXBsaWIiCisgICAgZG9uZQorCisgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYjsgdGhlbgorICAgICAgbGlicz0iJHByZWRlcHMgJGxpYnMgJGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCAkcG9zdGRlcHMiCisKKyAgICAgICMgQ29tcHV0ZSBsaWJyYXJpZXMgdGhhdCBhcmUgbGlzdGVkIG1vcmUgdGhhbiBvbmNlIGluICRwcmVkZXBzCisgICAgICAjICRwb3N0ZGVwcyBhbmQgbWFyayB0aGVtIGFzIHNwZWNpYWwgKGkuZS4sIHdob3NlIGR1cGxpY2F0ZXMgYXJlCisgICAgICAjIG5vdCB0byBiZSBlbGltaW5hdGVkKS4KKyAgICAgIHByZV9wb3N0X2RlcHM9CisgICAgICBpZiAkb3B0X2R1cGxpY2F0ZV9jb21waWxlcl9nZW5lcmF0ZWRfZGVwczsgdGhlbgorCWZvciBwcmVfcG9zdF9kZXAgaW4gJHByZWRlcHMgJHBvc3RkZXBzOyBkbworCSAgY2FzZSAiJHByZV9wb3N0X2RlcHMgIiBpbgorCSAgKiIgJHByZV9wb3N0X2RlcCAiKikgZnVuY19hcHBlbmQgc3BlY2lhbGRlcGxpYnMgIiAkcHJlX3Bvc3RfZGVwcyIgOzsKKwkgIGVzYWMKKwkgIGZ1bmNfYXBwZW5kIHByZV9wb3N0X2RlcHMgIiAkcHJlX3Bvc3RfZGVwIgorCWRvbmUKKyAgICAgIGZpCisgICAgICBwcmVfcG9zdF9kZXBzPQorICAgIGZpCisKKyAgICBkZXBsaWJzPQorICAgIG5ld2RlcGVuZGVuY3lfbGlicz0KKyAgICBuZXdsaWJfc2VhcmNoX3BhdGg9CisgICAgbmVlZF9yZWxpbms9bm8gIyB3aGV0aGVyIHdlJ3JlIGxpbmtpbmcgYW55IHVuaW5zdGFsbGVkIGxpYnRvb2wgbGlicmFyaWVzCisgICAgbm90aW5zdF9kZXBsaWJzPSAjIG5vdC1pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMKKyAgICBub3RpbnN0X3BhdGg9ICMgcGF0aHMgdGhhdCBjb250YWluIG5vdC1pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMKKworICAgIGNhc2UgJGxpbmttb2RlIGluCisgICAgbGliKQorCXBhc3Nlcz0iY29udiBkbHByZW9wZW4gbGluayIKKwlmb3IgZmlsZSBpbiAkZGxmaWxlcyAkZGxwcmVmaWxlczsgZG8KKwkgIGNhc2UgJGZpbGUgaW4KKwkgICoubGEpIDs7CisJICAqKQorCSAgICBmdW5jX2ZhdGFsX2hlbHAgImxpYnJhcmllcyBjYW4gXGAtZGxvcGVuJyBvbmx5IGxpYnRvb2wgbGlicmFyaWVzOiAkZmlsZSIKKwkgICAgOzsKKwkgIGVzYWMKKwlkb25lCisJOzsKKyAgICBwcm9nKQorCWNvbXBpbGVfZGVwbGlicz0KKwlmaW5hbGl6ZV9kZXBsaWJzPQorCWFsbGRlcGxpYnM9bm8KKwluZXdkbGZpbGVzPQorCW5ld2RscHJlZmlsZXM9CisJcGFzc2VzPSJjb252IHNjYW4gZGxvcGVuIGRscHJlb3BlbiBsaW5rIgorCTs7CisgICAgKikgIHBhc3Nlcz0iY29udiIKKwk7OworICAgIGVzYWMKKworICAgIGZvciBwYXNzIGluICRwYXNzZXM7IGRvCisgICAgICAjIFRoZSBwcmVvcGVuIHBhc3MgaW4gbGliIG1vZGUgcmV2ZXJzZXMgJGRlcGxpYnM7IHB1dCBpdCBiYWNrIGhlcmUKKyAgICAgICMgc28gdGhhdCAtTCBjb21lcyBiZWZvcmUgbGlicyB0aGF0IG5lZWQgaXQgZm9yIGluc3RhbmNlLi4uCisgICAgICBpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gImxpYixsaW5rIjsgdGhlbgorCSMjIEZJWE1FOiBGaW5kIHRoZSBwbGFjZSB3aGVyZSB0aGUgbGlzdCBpcyByZWJ1aWx0IGluIHRoZSB3cm9uZworCSMjICAgICAgICBvcmRlciwgYW5kIGZpeCBpdCB0aGVyZSBwcm9wZXJseQorICAgICAgICB0bXBfZGVwbGlicz0KKwlmb3IgZGVwbGliIGluICRkZXBsaWJzOyBkbworCSAgdG1wX2RlcGxpYnM9IiRkZXBsaWIgJHRtcF9kZXBsaWJzIgorCWRvbmUKKwlkZXBsaWJzPSIkdG1wX2RlcGxpYnMiCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gImxpYixsaW5rIiB8fAorCSB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csc2NhbiI7IHRoZW4KKwlsaWJzPSIkZGVwbGlicyIKKwlkZXBsaWJzPQorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisJY2FzZSAkcGFzcyBpbgorCWRsb3BlbikgbGlicz0iJGRsZmlsZXMiIDs7CisJZGxwcmVvcGVuKSBsaWJzPSIkZGxwcmVmaWxlcyIgOzsKKwlsaW5rKSBsaWJzPSIkZGVwbGlicyAlREVQTElCUyUgJGRlcGVuZGVuY3lfbGlicyIgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJsaWIsZGxwcmVvcGVuIjsgdGhlbgorCSMgQ29sbGVjdCBhbmQgZm9yd2FyZCBkZXBsaWJzIG9mIHByZW9wZW5lZCBsaWJ0b29sIGxpYnMKKwlmb3IgbGliIGluICRkbHByZWZpbGVzOyBkbworCSAgIyBJZ25vcmUgbm9uLWxpYnRvb2wtbGlicworCSAgZGVwZW5kZW5jeV9saWJzPQorCSAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRsaWIiCisJICBjYXNlICRsaWIgaW4KKwkgICoubGEpCWZ1bmNfc291cmNlICIkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IiA7OworCSAgZXNhYworCisJICAjIENvbGxlY3QgcHJlb3BlbmVkIGxpYnRvb2wgZGVwbGlicywgZXhjZXB0IGFueSB0aGlzIGxpYnJhcnkKKwkgICMgaGFzIGRlY2xhcmVkIGFzIHdlYWsgbGlicworCSAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworCSAgICBmdW5jX2Jhc2VuYW1lICIkZGVwbGliIgorICAgICAgICAgICAgZGVwbGliX2Jhc2U9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CisJICAgIGNhc2UgIiAkd2Vha19saWJzICIgaW4KKwkgICAgKiIgJGRlcGxpYl9iYXNlICIqKSA7OworCSAgICAqKSBmdW5jX2FwcGVuZCBkZXBsaWJzICIgJGRlcGxpYiIgOzsKKwkgICAgZXNhYworCSAgZG9uZQorCWRvbmUKKwlsaWJzPSIkZGxwcmVmaWxlcyIKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkcGFzcyIgPSBkbG9wZW47IHRoZW4KKwkjIENvbGxlY3QgZGxwcmVvcGVuZWQgbGlicmFyaWVzCisJc2F2ZV9kZXBsaWJzPSIkZGVwbGlicyIKKwlkZXBsaWJzPQorICAgICAgZmkKKworICAgICAgZm9yIGRlcGxpYiBpbiAkbGliczsgZG8KKwlsaWI9CisJZm91bmQ9bm8KKwljYXNlICRkZXBsaWIgaW4KKwktbXR8LW10aHJlYWRzfC1rdGhyZWFkfC1LdGhyZWFkfC1wdGhyZWFkfC1wdGhyZWFkc3wtLXRocmVhZC1zYWZlIFwKKyAgICAgICAgfC10aHJlYWRzfC1mb3Blbm1wfC1vcGVubXB8LW1wfC14b3Blbm1wfC1vbXB8LXFzbXA9KikKKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxsaW5rIjsgdGhlbgorCSAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKKwkgIGVsc2UKKwkgICAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkZGVwbGliIgorCSAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gbGliIDsgdGhlbgorCQljYXNlICIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiBpbgorCQkgICAgKiIgJGRlcGxpYiAiKikgOzsKKwkJICAgICogKSBmdW5jX2FwcGVuZCBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiICRkZXBsaWIiIDs7CisJCWVzYWMKKwkgICAgZmkKKwkgIGZpCisJICBjb250aW51ZQorCSAgOzsKKwktbCopCisJICBpZiB0ZXN0ICIkbGlua21vZGUiICE9IGxpYiAmJiB0ZXN0ICIkbGlua21vZGUiICE9IHByb2c7IHRoZW4KKwkgICAgZnVuY193YXJuaW5nICJcYC1sJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcy9vYmplY3RzIgorCSAgICBjb250aW51ZQorCSAgZmkKKwkgIGZ1bmNfc3RyaXBuYW1lICctbCcgJycgIiRkZXBsaWIiCisJICBuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWI7IHRoZW4KKwkgICAgc2VhcmNoZGlycz0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkbGliX3NlYXJjaF9wYXRoICRjb21waWxlcl9saWJfc2VhcmNoX2RpcnMgJHN5c19saWJfc2VhcmNoX3BhdGggJHNobGliX3NlYXJjaF9wYXRoIgorCSAgZWxzZQorCSAgICBzZWFyY2hkaXJzPSIkbmV3bGliX3NlYXJjaF9wYXRoICRsaWJfc2VhcmNoX3BhdGggJHN5c19saWJfc2VhcmNoX3BhdGggJHNobGliX3NlYXJjaF9wYXRoIgorCSAgZmkKKwkgIGZvciBzZWFyY2hkaXIgaW4gJHNlYXJjaGRpcnM7IGRvCisJICAgIGZvciBzZWFyY2hfZXh0IGluIC5sYSAkc3RkX3NocmV4dCAuc28gLmE7IGRvCisJICAgICAgIyBTZWFyY2ggdGhlIGxpYnRvb2wgbGlicmFyeQorCSAgICAgIGxpYj0iJHNlYXJjaGRpci9saWIke25hbWV9JHtzZWFyY2hfZXh0fSIKKwkgICAgICBpZiB0ZXN0IC1mICIkbGliIjsgdGhlbgorCQlpZiB0ZXN0ICIkc2VhcmNoX2V4dCIgPSAiLmxhIjsgdGhlbgorCQkgIGZvdW5kPXllcworCQllbHNlCisJCSAgZm91bmQ9bm8KKwkJZmkKKwkJYnJlYWsgMgorCSAgICAgIGZpCisJICAgIGRvbmUKKwkgIGRvbmUKKwkgIGlmIHRlc3QgIiRmb3VuZCIgIT0geWVzOyB0aGVuCisJICAgICMgZGVwbGliIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIGxpYnRvb2wgbGlicmFyeQorCSAgICBpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csbGluayI7IHRoZW4KKwkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgICBlbHNlCisJICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgICB0ZXN0ICIkbGlua21vZGUiID0gbGliICYmIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgorCSAgICBmaQorCSAgICBjb250aW51ZQorCSAgZWxzZSAjIGRlcGxpYiBpcyBhIGxpYnRvb2wgbGlicmFyeQorCSAgICAjIElmICRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMgJiYgJGRlcGxpYiBpcyBhIHN0ZGxpYiwKKwkgICAgIyBXZSBuZWVkIHRvIGRvIHNvbWUgc3BlY2lhbCB0aGluZ3MgaGVyZSwgYW5kIG5vdCBsYXRlci4KKwkgICAgaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgorCSAgICAgIGNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgorCSAgICAgICoiICRkZXBsaWIgIiopCisJCWlmIGZ1bmNfbGFsaWJfcCAiJGxpYiI7IHRoZW4KKwkJICBsaWJyYXJ5X25hbWVzPQorCQkgIG9sZF9saWJyYXJ5PQorCQkgIGZ1bmNfc291cmNlICIkbGliIgorCQkgIGZvciBsIGluICRvbGRfbGlicmFyeSAkbGlicmFyeV9uYW1lczsgZG8KKwkJICAgIGxsPSIkbCIKKwkJICBkb25lCisJCSAgaWYgdGVzdCAiWCRsbCIgPSAiWCRvbGRfbGlicmFyeSIgOyB0aGVuICMgb25seSBzdGF0aWMgdmVyc2lvbiBhdmFpbGFibGUKKwkJICAgIGZvdW5kPW5vCisJCSAgICBmdW5jX2Rpcm5hbWUgIiRsaWIiICIiICIuIgorCQkgICAgbGFkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorCQkgICAgbGliPSRsYWRpci8kb2xkX2xpYnJhcnkKKwkJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxsaW5rIjsgdGhlbgorCQkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkJICAgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKKwkJICAgIGVsc2UKKwkJICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkJICAgICAgdGVzdCAiJGxpbmttb2RlIiA9IGxpYiAmJiBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKKwkJICAgIGZpCisJCSAgICBjb250aW51ZQorCQkgIGZpCisJCWZpCisJCTs7CisJICAgICAgKikgOzsKKwkgICAgICBlc2FjCisJICAgIGZpCisJICBmaQorCSAgOzsgIyAtbAorCSoubHRmcmFtZXdvcmspCisJICBpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csbGluayI7IHRoZW4KKwkgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCisJICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCisJICBlbHNlCisJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWIgOyB0aGVuCisJCWNhc2UgIiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiIGluCisJCSAgICAqIiAkZGVwbGliICIqKSA7OworCQkgICAgKiApIGZ1bmNfYXBwZW5kIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgJGRlcGxpYiIgOzsKKwkJZXNhYworCSAgICBmaQorCSAgZmkKKwkgIGNvbnRpbnVlCisJICA7OworCS1MKikKKwkgIGNhc2UgJGxpbmttb2RlIGluCisJICBsaWIpCisJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgIHRlc3QgIiRwYXNzIiA9IGNvbnYgJiYgY29udGludWUKKwkgICAgbmV3ZGVwZW5kZW5jeV9saWJzPSIkZGVwbGliICRuZXdkZXBlbmRlbmN5X2xpYnMiCisJICAgIGZ1bmNfc3RyaXBuYW1lICctTCcgJycgIiRkZXBsaWIiCisJICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorCSAgICBmdW5jX2FwcGVuZCBuZXdsaWJfc2VhcmNoX3BhdGggIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgorCSAgICA7OworCSAgcHJvZykKKwkgICAgaWYgdGVzdCAiJHBhc3MiID0gY29udjsgdGhlbgorCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgICAgY29udGludWUKKwkgICAgZmkKKwkgICAgaWYgdGVzdCAiJHBhc3MiID0gc2NhbjsgdGhlbgorCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgIGVsc2UKKwkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgICBmaQorCSAgICBmdW5jX3N0cmlwbmFtZSAnLUwnICcnICIkZGVwbGliIgorCSAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKwkgICAgZnVuY19hcHBlbmQgbmV3bGliX3NlYXJjaF9wYXRoICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKKwkgICAgOzsKKwkgICopCisJICAgIGZ1bmNfd2FybmluZyAiXGAtTCcgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMvb2JqZWN0cyIKKwkgICAgOzsKKwkgIGVzYWMgIyBsaW5rbW9kZQorCSAgY29udGludWUKKwkgIDs7ICMgLUwKKwktUiopCisJICBpZiB0ZXN0ICIkcGFzcyIgPSBsaW5rOyB0aGVuCisJICAgIGZ1bmNfc3RyaXBuYW1lICctUicgJycgIiRkZXBsaWIiCisJICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorCSAgICBkaXI9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAorCSAgICAjIE1ha2Ugc3VyZSB0aGUgeHJwYXRoIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGRpcmVjdG9yaWVzLgorCSAgICBjYXNlICIkeHJwYXRoICIgaW4KKwkgICAgKiIgJGRpciAiKikgOzsKKwkgICAgKikgZnVuY19hcHBlbmQgeHJwYXRoICIgJGRpciIgOzsKKwkgICAgZXNhYworCSAgZmkKKwkgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICBjb250aW51ZQorCSAgOzsKKwkqLmxhKQorCSAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRkZXBsaWIiCisJICBsaWI9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAorCSAgOzsKKwkqLiRsaWJleHQpCisJICBpZiB0ZXN0ICIkcGFzcyIgPSBjb252OyB0aGVuCisJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgIGNvbnRpbnVlCisJICBmaQorCSAgY2FzZSAkbGlua21vZGUgaW4KKwkgIGxpYikKKwkgICAgIyBMaW5raW5nIGNvbnZlbmllbmNlIG1vZHVsZXMgaW50byBzaGFyZWQgbGlicmFyaWVzIGlzIGFsbG93ZWQsCisJICAgICMgYnV0IGxpbmtpbmcgb3RoZXIgc3RhdGljIGxpYnJhcmllcyBpcyBub24tcG9ydGFibGUuCisJICAgIGNhc2UgIiAkZGxwcmVjb252ZW5pZW5jZWxpYnMgIiBpbgorCSAgICAqIiAkZGVwbGliICIqKSA7OworCSAgICAqKQorCSAgICAgIHZhbGlkX2FfbGliPW5vCisJICAgICAgY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KKwkJbWF0Y2hfcGF0dGVybiopCisJCSAgc2V0IGR1bW15ICRkZXBsaWJzX2NoZWNrX21ldGhvZDsgc2hpZnQKKwkJICBtYXRjaF9wYXR0ZXJuX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogIiQxIFwoLipcKSJgCisJCSAgaWYgZXZhbCAiXCRFQ0hPIFwiJGRlcGxpYlwiIiAyPi9kZXYvbnVsbCB8ICRTRUQgMTBxIFwKKwkJICAgIHwgJEVHUkVQICIkbWF0Y2hfcGF0dGVybl9yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KKwkJICAgIHZhbGlkX2FfbGliPXllcworCQkgIGZpCisJCTs7CisJCXBhc3NfYWxsKQorCQkgIHZhbGlkX2FfbGliPXllcworCQk7OworCSAgICAgIGVzYWMKKwkgICAgICBpZiB0ZXN0ICIkdmFsaWRfYV9saWIiICE9IHllczsgdGhlbgorCQllY2hvCisJCSRFQ0hPICIqKiogV2FybmluZzogVHJ5aW5nIHRvIGxpbmsgd2l0aCBzdGF0aWMgbGliIGFyY2hpdmUgJGRlcGxpYi4iCisJCWVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisJCWVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCisJCWVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKKwkJZWNobyAiKioqIGJlY2F1c2UgdGhlIGZpbGUgZXh0ZW5zaW9ucyAuJGxpYmV4dCBvZiB0aGlzIGFyZ3VtZW50IG1ha2VzIG1lIGJlbGlldmUiCisJCWVjaG8gIioqKiB0aGF0IGl0IGlzIGp1c3QgYSBzdGF0aWMgYXJjaGl2ZSB0aGF0IEkgc2hvdWxkIG5vdCB1c2UgaGVyZS4iCisJICAgICAgZWxzZQorCQllY2hvCisJCSRFQ0hPICIqKiogV2FybmluZzogTGlua2luZyB0aGUgc2hhcmVkIGxpYnJhcnkgJG91dHB1dCBhZ2FpbnN0IHRoZSIKKwkJJEVDSE8gIioqKiBzdGF0aWMgbGlicmFyeSAkZGVwbGliIGlzIG5vdCBwb3J0YWJsZSEiCisJCWRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgICAgZmkKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIGNvbnRpbnVlCisJICAgIDs7CisJICBwcm9nKQorCSAgICBpZiB0ZXN0ICIkcGFzcyIgIT0gbGluazsgdGhlbgorCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgIGVsc2UKKwkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgICBmaQorCSAgICBjb250aW51ZQorCSAgICA7OworCSAgZXNhYyAjIGxpbmttb2RlCisJICA7OyAjICouJGxpYmV4dAorCSoubG8gfCAqLiRvYmpleHQpCisJICBpZiB0ZXN0ICIkcGFzcyIgPSBjb252OyB0aGVuCisJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICBlbGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisJICAgIGlmIHRlc3QgIiRwYXNzIiA9IGRscHJlb3BlbiB8fCB0ZXN0ICIkZGxvcGVuX3N1cHBvcnQiICE9IHllcyB8fCB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IG5vOyB0aGVuCisJICAgICAgIyBJZiB0aGVyZSBpcyBubyBkbG9wZW4gc3VwcG9ydCBvciB3ZSdyZSBsaW5raW5nIHN0YXRpY2FsbHksCisJICAgICAgIyB3ZSBuZWVkIHRvIHByZWxvYWQuCisJICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkZXBsaWIiCisJICAgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCisJICAgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKKwkgICAgZWxzZQorCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RsZmlsZXMgIiAkZGVwbGliIgorCSAgICBmaQorCSAgZmkKKwkgIGNvbnRpbnVlCisJICA7OworCSVERVBMSUJTJSkKKwkgIGFsbGRlcGxpYnM9eWVzCisJICBjb250aW51ZQorCSAgOzsKKwllc2FjICMgY2FzZSAkZGVwbGliCisKKwlpZiB0ZXN0ICIkZm91bmQiID0geWVzIHx8IHRlc3QgLWYgIiRsaWIiOyB0aGVuIDoKKwllbHNlCisJICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCB0aGUgbGlicmFyeSBcYCRsaWInIG9yIHVuaGFuZGxlZCBhcmd1bWVudCBcYCRkZXBsaWInIgorCWZpCisKKwkjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBhcmNoaXZlLgorCWZ1bmNfbGFsaWJfdW5zYWZlX3AgIiRsaWIiIFwKKwkgIHx8IGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCisJZnVuY19kaXJuYW1lICIkbGliIiAiIiAiLiIKKwlsYWRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisKKwlkbG5hbWU9CisJZGxvcGVuPQorCWRscHJlb3Blbj0KKwlsaWJkaXI9CisJbGlicmFyeV9uYW1lcz0KKwlvbGRfbGlicmFyeT0KKwlpbmhlcml0ZWRfbGlua2VyX2ZsYWdzPQorCSMgSWYgdGhlIGxpYnJhcnkgd2FzIGluc3RhbGxlZCB3aXRoIGFuIG9sZCByZWxlYXNlIG9mIGxpYnRvb2wsCisJIyBpdCB3aWxsIG5vdCByZWRlZmluZSB2YXJpYWJsZXMgaW5zdGFsbGVkLCBvciBzaG91bGRub3RsaW5rCisJaW5zdGFsbGVkPXllcworCXNob3VsZG5vdGxpbms9bm8KKwlhdm9pZHRlbXBycGF0aD0KKworCisJIyBSZWFkIHRoZSAubGEgZmlsZQorCWZ1bmNfc291cmNlICIkbGliIgorCisJIyBDb252ZXJ0ICItZnJhbWV3b3JrIGZvbyIgdG8gImZvby5sdGZyYW1ld29yayIKKwlpZiB0ZXN0IC1uICIkaW5oZXJpdGVkX2xpbmtlcl9mbGFncyI7IHRoZW4KKwkgIHRtcF9pbmhlcml0ZWRfbGlua2VyX2ZsYWdzPWAkRUNITyAiJGluaGVyaXRlZF9saW5rZXJfZmxhZ3MiIHwgJFNFRCAncy8tZnJhbWV3b3JrIFwoW14gJF0qXCkvXDEubHRmcmFtZXdvcmsvZydgCisJICBmb3IgdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZyBpbiAkdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZ3M7IGRvCisJICAgIGNhc2UgIiAkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiBpbgorCSAgICAgICoiICR0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFnICIqKSA7OworCSAgICAgICopIGZ1bmNfYXBwZW5kIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgJHRtcF9pbmhlcml0ZWRfbGlua2VyX2ZsYWciOzsKKwkgICAgZXNhYworCSAgZG9uZQorCWZpCisJZGVwZW5kZW5jeV9saWJzPWAkRUNITyAiICRkZXBlbmRlbmN5X2xpYnMiIHwgJFNFRCAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKKwlpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gImxpYixsaW5rIiB8fAorCSAgIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxzY2FuIiB8fAorCSAgIHsgdGVzdCAiJGxpbmttb2RlIiAhPSBwcm9nICYmIHRlc3QgIiRsaW5rbW9kZSIgIT0gbGliOyB9OyB0aGVuCisJICB0ZXN0IC1uICIkZGxvcGVuIiAmJiBmdW5jX2FwcGVuZCBkbGZpbGVzICIgJGRsb3BlbiIKKwkgIHRlc3QgLW4gIiRkbHByZW9wZW4iICYmIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkZGxwcmVvcGVuIgorCWZpCisKKwlpZiB0ZXN0ICIkcGFzcyIgPSBjb252OyB0aGVuCisJICAjIE9ubHkgY2hlY2sgZm9yIGNvbnZlbmllbmNlIGxpYnJhcmllcworCSAgZGVwbGlicz0iJGxpYiAkZGVwbGlicyIKKwkgIGlmIHRlc3QgLXogIiRsaWJkaXIiOyB0aGVuCisJICAgIGlmIHRlc3QgLXogIiRvbGRfbGlicmFyeSI7IHRoZW4KKwkgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBuYW1lIG9mIGxpbmsgbGlicmFyeSBmb3IgXGAkbGliJyIKKwkgICAgZmkKKwkgICAgIyBJdCBpcyBhIGxpYnRvb2wgY29udmVuaWVuY2UgbGlicmFyeSwgc28gYWRkIGluIGl0cyBvYmplY3RzLgorCSAgICBmdW5jX2FwcGVuZCBjb252ZW5pZW5jZSAiICRsYWRpci8kb2JqZGlyLyRvbGRfbGlicmFyeSIKKwkgICAgZnVuY19hcHBlbmQgb2xkX2NvbnZlbmllbmNlICIgJGxhZGlyLyRvYmpkaXIvJG9sZF9saWJyYXJ5IgorCSAgZWxpZiB0ZXN0ICIkbGlua21vZGUiICE9IHByb2cgJiYgdGVzdCAiJGxpbmttb2RlIiAhPSBsaWI7IHRoZW4KKwkgICAgZnVuY19mYXRhbF9lcnJvciAiXGAkbGliJyBpcyBub3QgYSBjb252ZW5pZW5jZSBsaWJyYXJ5IgorCSAgZmkKKwkgIHRtcF9saWJzPQorCSAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworCSAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgICBpZiAkb3B0X3ByZXNlcnZlX2R1cF9kZXBzIDsgdGhlbgorCSAgICAgIGNhc2UgIiR0bXBfbGlicyAiIGluCisJICAgICAgKiIgJGRlcGxpYiAiKikgZnVuY19hcHBlbmQgc3BlY2lhbGRlcGxpYnMgIiAkZGVwbGliIiA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgICAgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkZGVwbGliIgorCSAgZG9uZQorCSAgY29udGludWUKKwlmaSAjICRwYXNzID0gY29udgorCisKKwkjIEdldCB0aGUgbmFtZSBvZiB0aGUgbGlicmFyeSB3ZSBsaW5rIGFnYWluc3QuCisJbGlua2xpYj0KKwlpZiB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiICYmCisJICAgeyB0ZXN0ICIkcHJlZmVyX3N0YXRpY19saWJzIiA9IHllcyB8fAorCSAgICAgdGVzdCAiJHByZWZlcl9zdGF0aWNfbGlicywkaW5zdGFsbGVkIiA9ICJidWlsdCxubyI7IH07IHRoZW4KKwkgIGxpbmtsaWI9JG9sZF9saWJyYXJ5CisJZWxzZQorCSAgZm9yIGwgaW4gJG9sZF9saWJyYXJ5ICRsaWJyYXJ5X25hbWVzOyBkbworCSAgICBsaW5rbGliPSIkbCIKKwkgIGRvbmUKKwlmaQorCWlmIHRlc3QgLXogIiRsaW5rbGliIjsgdGhlbgorCSAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgbmFtZSBvZiBsaW5rIGxpYnJhcnkgZm9yIFxgJGxpYiciCisJZmkKKworCSMgVGhpcyBsaWJyYXJ5IHdhcyBzcGVjaWZpZWQgd2l0aCAtZGxvcGVuLgorCWlmIHRlc3QgIiRwYXNzIiA9IGRsb3BlbjsgdGhlbgorCSAgaWYgdGVzdCAteiAiJGxpYmRpciI7IHRoZW4KKwkgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IC1kbG9wZW4gYSBjb252ZW5pZW5jZSBsaWJyYXJ5OiBcYCRsaWInIgorCSAgZmkKKwkgIGlmIHRlc3QgLXogIiRkbG5hbWUiIHx8CisJICAgICB0ZXN0ICIkZGxvcGVuX3N1cHBvcnQiICE9IHllcyB8fAorCSAgICAgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSBubzsgdGhlbgorCSAgICAjIElmIHRoZXJlIGlzIG5vIGRsbmFtZSwgbm8gZGxvcGVuIHN1cHBvcnQgb3Igd2UncmUgbGlua2luZworCSAgICAjIHN0YXRpY2FsbHksIHdlIG5lZWQgdG8gcHJlbG9hZC4gIFdlIGFsc28gbmVlZCB0byBwcmVsb2FkIGFueQorCSAgICAjIGRlcGVuZGVudCBsaWJyYXJpZXMgc28gbGlibHRkbCdzIGRlcGxpYiBwcmVsb2FkZXIgZG9lc24ndAorCSAgICAjIGJvbWIgb3V0IGluIHRoZSBsb2FkIGRlcGxpYnMgcGhhc2UuCisJICAgIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkbGliICRkZXBlbmRlbmN5X2xpYnMiCisJICBlbHNlCisJICAgIGZ1bmNfYXBwZW5kIG5ld2RsZmlsZXMgIiAkbGliIgorCSAgZmkKKwkgIGNvbnRpbnVlCisJZmkgIyAkcGFzcyA9IGRsb3BlbgorCisJIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCisJY2FzZSAkbGFkaXIgaW4KKwlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIGFic19sYWRpcj0iJGxhZGlyIiA7OworCSopCisJICBhYnNfbGFkaXI9YGNkICIkbGFkaXIiICYmIHB3ZGAKKwkgIGlmIHRlc3QgLXogIiRhYnNfbGFkaXIiOyB0aGVuCisJICAgIGZ1bmNfd2FybmluZyAiY2Fubm90IGRldGVybWluZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBvZiBcYCRsYWRpciciCisJICAgIGZ1bmNfd2FybmluZyAicGFzc2luZyBpdCBsaXRlcmFsbHkgdG8gdGhlIGxpbmtlciwgYWx0aG91Z2ggaXQgbWlnaHQgZmFpbCIKKwkgICAgYWJzX2xhZGlyPSIkbGFkaXIiCisJICBmaQorCSAgOzsKKwllc2FjCisJZnVuY19iYXNlbmFtZSAiJGxpYiIKKwlsYW5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKworCSMgRmluZCB0aGUgcmVsZXZhbnQgb2JqZWN0IGRpcmVjdG9yeSBhbmQgbGlicmFyeSBuYW1lLgorCWlmIHRlc3QgIlgkaW5zdGFsbGVkIiA9IFh5ZXM7IHRoZW4KKwkgIGlmIHRlc3QgISAtZiAiJGx0X3N5c3Jvb3QkbGliZGlyLyRsaW5rbGliIiAmJiB0ZXN0IC1mICIkYWJzX2xhZGlyLyRsaW5rbGliIjsgdGhlbgorCSAgICBmdW5jX3dhcm5pbmcgImxpYnJhcnkgXGAkbGliJyB3YXMgbW92ZWQuIgorCSAgICBkaXI9IiRsYWRpciIKKwkgICAgYWJzZGlyPSIkYWJzX2xhZGlyIgorCSAgICBsaWJkaXI9IiRhYnNfbGFkaXIiCisJICBlbHNlCisJICAgIGRpcj0iJGx0X3N5c3Jvb3QkbGliZGlyIgorCSAgICBhYnNkaXI9IiRsdF9zeXNyb290JGxpYmRpciIKKwkgIGZpCisJICB0ZXN0ICJYJGhhcmRjb2RlX2F1dG9tYXRpYyIgPSBYeWVzICYmIGF2b2lkdGVtcHJwYXRoPXllcworCWVsc2UKKwkgIGlmIHRlc3QgISAtZiAiJGxhZGlyLyRvYmpkaXIvJGxpbmtsaWIiICYmIHRlc3QgLWYgIiRhYnNfbGFkaXIvJGxpbmtsaWIiOyB0aGVuCisJICAgIGRpcj0iJGxhZGlyIgorCSAgICBhYnNkaXI9IiRhYnNfbGFkaXIiCisJICAgICMgUmVtb3ZlIHRoaXMgc2VhcmNoIHBhdGggbGF0ZXIKKwkgICAgZnVuY19hcHBlbmQgbm90aW5zdF9wYXRoICIgJGFic19sYWRpciIKKwkgIGVsc2UKKwkgICAgZGlyPSIkbGFkaXIvJG9iamRpciIKKwkgICAgYWJzZGlyPSIkYWJzX2xhZGlyLyRvYmpkaXIiCisJICAgICMgUmVtb3ZlIHRoaXMgc2VhcmNoIHBhdGggbGF0ZXIKKwkgICAgZnVuY19hcHBlbmQgbm90aW5zdF9wYXRoICIgJGFic19sYWRpciIKKwkgIGZpCisJZmkgIyAkaW5zdGFsbGVkID0geWVzCisJZnVuY19zdHJpcG5hbWUgJ2xpYicgJy5sYScgIiRsYW5hbWUiCisJbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisKKwkjIFRoaXMgbGlicmFyeSB3YXMgc3BlY2lmaWVkIHdpdGggLWRscHJlb3Blbi4KKwlpZiB0ZXN0ICIkcGFzcyIgPSBkbHByZW9wZW47IHRoZW4KKwkgIGlmIHRlc3QgLXogIiRsaWJkaXIiICYmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIm9ubHkgbGlicmFyaWVzIG1heSAtZGxwcmVvcGVuIGEgY29udmVuaWVuY2UgbGlicmFyeTogXGAkbGliJyIKKwkgIGZpCisJICBjYXNlICIkaG9zdCIgaW4KKwkgICAgIyBzcGVjaWFsIGhhbmRsaW5nIGZvciBwbGF0Zm9ybXMgd2l0aCBQRS1ETExzLgorCSAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqICkKKwkgICAgICAjIExpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgbGluayBhZ2FpbnN0IHNoYXJlZCBsaWJyYXJ5IGlmIGJvdGgKKwkgICAgICAjIHN0YXRpYyBhbmQgc2hhcmVkIGFyZSBwcmVzZW50LiAgVGhlcmVmb3JlLCBlbnN1cmUgd2UgZXh0cmFjdAorCSAgICAgICMgc3ltYm9scyBmcm9tIHRoZSBpbXBvcnQgbGlicmFyeSBpZiBhIHNoYXJlZCBsaWJyYXJ5IGlzIHByZXNlbnQKKwkgICAgICAjIChvdGhlcndpc2UsIHRoZSBkbG9wZW4gbW9kdWxlIG5hbWUgd2lsbCBiZSBpbmNvcnJlY3QpLiAgV2UgZG8KKwkgICAgICAjIHRoaXMgYnkgcHV0dGluZyB0aGUgaW1wb3J0IGxpYnJhcnkgbmFtZSBpbnRvICRuZXdkbHByZWZpbGVzLgorCSAgICAgICMgV2UgcmVjb3ZlciB0aGUgZGxvcGVuIG1vZHVsZSBuYW1lIGJ5ICdzYXZpbmcnIHRoZSBsYSBmaWxlCisJICAgICAgIyBuYW1lIGluIGEgc3BlY2lhbCBwdXJwb3NlIHZhcmlhYmxlLCBhbmQgKGxhdGVyKSBleHRyYWN0aW5nIHRoZQorCSAgICAgICMgZGxuYW1lIGZyb20gdGhlIGxhIGZpbGUuCisJICAgICAgaWYgdGVzdCAtbiAiJGRsbmFtZSI7IHRoZW4KKwkgICAgICAgIGZ1bmNfdHJfc2ggIiRkaXIvJGxpbmtsaWIiCisJICAgICAgICBldmFsICJsaWJmaWxlXyRmdW5jX3RyX3NoX3Jlc3VsdD1cJGFic19sYWRpci9cJGxhbmFtZSIKKwkgICAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkZGlyLyRsaW5rbGliIgorCSAgICAgIGVsc2UKKwkgICAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkZGlyLyRvbGRfbGlicmFyeSIKKwkgICAgICAgICMgS2VlcCBhIGxpc3Qgb2YgcHJlb3BlbmVkIGNvbnZlbmllbmNlIGxpYnJhcmllcyB0byBjaGVjaworCSAgICAgICAgIyB0aGF0IHRoZXkgYXJlIGJlaW5nIHVzZWQgY29ycmVjdGx5IGluIHRoZSBsaW5rIHBhc3MuCisJICAgICAgICB0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisJICAgICAgICAgIGZ1bmNfYXBwZW5kIGRscHJlY29udmVuaWVuY2VsaWJzICIgJGRpci8kb2xkX2xpYnJhcnkiCisJICAgICAgZmkKKwkgICAgOzsKKwkgICAgKiApCisJICAgICAgIyBQcmVmZXIgdXNpbmcgYSBzdGF0aWMgbGlicmFyeSAoc28gdGhhdCBubyBzaWxseSBfRFlOQU1JQyBzeW1ib2xzCisJICAgICAgIyBhcmUgcmVxdWlyZWQgdG8gbGluaykuCisJICAgICAgaWYgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IjsgdGhlbgorCSAgICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkaXIvJG9sZF9saWJyYXJ5IgorCSAgICAgICAgIyBLZWVwIGEgbGlzdCBvZiBwcmVvcGVuZWQgY29udmVuaWVuY2UgbGlicmFyaWVzIHRvIGNoZWNrCisJICAgICAgICAjIHRoYXQgdGhleSBhcmUgYmVpbmcgdXNlZCBjb3JyZWN0bHkgaW4gdGhlIGxpbmsgcGFzcy4KKwkgICAgICAgIHRlc3QgLXogIiRsaWJkaXIiICYmIFwKKwkgICAgICAgICAgZnVuY19hcHBlbmQgZGxwcmVjb252ZW5pZW5jZWxpYnMgIiAkZGlyLyRvbGRfbGlicmFyeSIKKwkgICAgICAjIE90aGVyd2lzZSwgdXNlIHRoZSBkbG5hbWUsIHNvIHRoYXQgbHRfZGxvcGVuIGZpbmRzIGl0LgorCSAgICAgIGVsaWYgdGVzdCAtbiAiJGRsbmFtZSI7IHRoZW4KKwkgICAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkZGlyLyRkbG5hbWUiCisJICAgICAgZWxzZQorCSAgICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkaXIvJGxpbmtsaWIiCisJICAgICAgZmkKKwkgICAgOzsKKwkgIGVzYWMKKwlmaSAjICRwYXNzID0gZGxwcmVvcGVuCisKKwlpZiB0ZXN0IC16ICIkbGliZGlyIjsgdGhlbgorCSAgIyBMaW5rIHRoZSBjb252ZW5pZW5jZSBsaWJyYXJ5CisJICBpZiB0ZXN0ICIkbGlua21vZGUiID0gbGliOyB0aGVuCisJICAgIGRlcGxpYnM9IiRkaXIvJG9sZF9saWJyYXJ5ICRkZXBsaWJzIgorCSAgZWxpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csbGluayI7IHRoZW4KKwkgICAgY29tcGlsZV9kZXBsaWJzPSIkZGlyLyRvbGRfbGlicmFyeSAkY29tcGlsZV9kZXBsaWJzIgorCSAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGlyLyRvbGRfbGlicmFyeSAkZmluYWxpemVfZGVwbGlicyIKKwkgIGVsc2UKKwkgICAgZGVwbGlicz0iJGxpYiAkZGVwbGlicyIgIyB1c2VkIGZvciBwcm9nLHNjYW4gcGFzcworCSAgZmkKKwkgIGNvbnRpbnVlCisJZmkKKworCisJaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2cgJiYgdGVzdCAiJHBhc3MiICE9IGxpbms7IHRoZW4KKwkgIGZ1bmNfYXBwZW5kIG5ld2xpYl9zZWFyY2hfcGF0aCAiICRsYWRpciIKKwkgIGRlcGxpYnM9IiRsaWIgJGRlcGxpYnMiCisKKwkgIGxpbmthbGxkZXBsaWJzPW5vCisJICBpZiB0ZXN0ICIkbGlua19hbGxfZGVwbGlicyIgIT0gbm8gfHwgdGVzdCAteiAiJGxpYnJhcnlfbmFtZXMiIHx8CisJICAgICB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IG5vOyB0aGVuCisJICAgIGxpbmthbGxkZXBsaWJzPXllcworCSAgZmkKKworCSAgdG1wX2xpYnM9CisJICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgIGNhc2UgJGRlcGxpYiBpbgorCSAgICAtTCopIGZ1bmNfc3RyaXBuYW1lICctTCcgJycgIiRkZXBsaWIiCisJICAgICAgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisJICAgICAgICAgZnVuY19hcHBlbmQgbmV3bGliX3NlYXJjaF9wYXRoICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKKwkJIDs7CisJICAgIGVzYWMKKwkgICAgIyBOZWVkIHRvIGxpbmsgYWdhaW5zdCBhbGwgZGVwZW5kZW5jeV9saWJzPworCSAgICBpZiB0ZXN0ICIkbGlua2FsbGRlcGxpYnMiID0geWVzOyB0aGVuCisJICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgZWxzZQorCSAgICAgICMgTmVlZCB0byBoYXJkY29kZSBzaGFyZWQgbGlicmFyeSBwYXRocworCSAgICAgICMgb3IvYW5kIGxpbmsgYWdhaW5zdCBzdGF0aWMgbGlicmFyaWVzCisJICAgICAgbmV3ZGVwZW5kZW5jeV9saWJzPSIkZGVwbGliICRuZXdkZXBlbmRlbmN5X2xpYnMiCisJICAgIGZpCisJICAgIGlmICRvcHRfcHJlc2VydmVfZHVwX2RlcHMgOyB0aGVuCisJICAgICAgY2FzZSAiJHRtcF9saWJzICIgaW4KKwkgICAgICAqIiAkZGVwbGliICIqKSBmdW5jX2FwcGVuZCBzcGVjaWFsZGVwbGlicyAiICRkZXBsaWIiIDs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgICBmdW5jX2FwcGVuZCB0bXBfbGlicyAiICRkZXBsaWIiCisJICBkb25lICMgZm9yIGRlcGxpYgorCSAgY29udGludWUKKwlmaSAjICRsaW5rbW9kZSA9IHByb2cuLi4KKworCWlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxsaW5rIjsgdGhlbgorCSAgaWYgdGVzdCAtbiAiJGxpYnJhcnlfbmFtZXMiICYmCisJICAgICB7IHsgdGVzdCAiJHByZWZlcl9zdGF0aWNfbGlicyIgPSBubyB8fAorCSAgICAgICAgIHRlc3QgIiRwcmVmZXJfc3RhdGljX2xpYnMsJGluc3RhbGxlZCIgPSAiYnVpbHQseWVzIjsgfSB8fAorCSAgICAgICB0ZXN0IC16ICIkb2xkX2xpYnJhcnkiOyB9OyB0aGVuCisJICAgICMgV2UgbmVlZCB0byBoYXJkY29kZSB0aGUgbGlicmFyeSBwYXRoCisJICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIiAmJiB0ZXN0IC16ICIkYXZvaWR0ZW1wcnBhdGgiIDsgdGhlbgorCSAgICAgICMgTWFrZSBzdXJlIHRoZSBycGF0aCBjb250YWlucyBvbmx5IHVuaXF1ZSBkaXJlY3Rvcmllcy4KKwkgICAgICBjYXNlICIkdGVtcF9ycGF0aDoiIGluCisJICAgICAgKiIkYWJzZGlyOiIqKSA7OworCSAgICAgICopIGZ1bmNfYXBwZW5kIHRlbXBfcnBhdGggIiRhYnNkaXI6IiA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKworCSAgICAjIEhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGguCisJICAgICMgU2tpcCBkaXJlY3RvcmllcyB0aGF0IGFyZSBpbiB0aGUgc3lzdGVtIGRlZmF1bHQgcnVuLXRpbWUKKwkgICAgIyBzZWFyY2ggcGF0aC4KKwkgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorCSAgICAqIiAkYWJzZGlyICIqKSA7OworCSAgICAqKQorCSAgICAgIGNhc2UgIiRjb21waWxlX3JwYXRoICIgaW4KKwkgICAgICAqIiAkYWJzZGlyICIqKSA7OworCSAgICAgICopIGZ1bmNfYXBwZW5kIGNvbXBpbGVfcnBhdGggIiAkYWJzZGlyIiA7OworCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIGNhc2UgIiAkc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIgaW4KKwkgICAgKiIgJGxpYmRpciAiKikgOzsKKwkgICAgKikKKwkgICAgICBjYXNlICIkZmluYWxpemVfcnBhdGggIiBpbgorCSAgICAgICoiICRsaWJkaXIgIiopIDs7CisJICAgICAgKikgZnVuY19hcHBlbmQgZmluYWxpemVfcnBhdGggIiAkbGliZGlyIiA7OworCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgICBlc2FjCisJICBmaSAjICRsaW5rbW9kZSwkcGFzcyA9IHByb2csbGluay4uLgorCisJICBpZiB0ZXN0ICIkYWxsZGVwbGlicyIgPSB5ZXMgJiYKKwkgICAgIHsgdGVzdCAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA9IHBhc3NfYWxsIHx8CisJICAgICAgIHsgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXMgJiYKKwkJIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIjsgfTsgfTsgdGhlbgorCSAgICAjIFdlIG9ubHkgbmVlZCB0byBzZWFyY2ggZm9yIHN0YXRpYyBsaWJyYXJpZXMKKwkgICAgY29udGludWUKKwkgIGZpCisJZmkKKworCWxpbmtfc3RhdGljPW5vICMgV2hldGhlciB0aGUgZGVwbGliIHdpbGwgYmUgbGlua2VkIHN0YXRpY2FsbHkKKwl1c2Vfc3RhdGljX2xpYnM9JHByZWZlcl9zdGF0aWNfbGlicworCWlmIHRlc3QgIiR1c2Vfc3RhdGljX2xpYnMiID0gYnVpbHQgJiYgdGVzdCAiJGluc3RhbGxlZCIgPSB5ZXM7IHRoZW4KKwkgIHVzZV9zdGF0aWNfbGlicz1ubworCWZpCisJaWYgdGVzdCAtbiAiJGxpYnJhcnlfbmFtZXMiICYmCisJICAgeyB0ZXN0ICIkdXNlX3N0YXRpY19saWJzIiA9IG5vIHx8IHRlc3QgLXogIiRvbGRfbGlicmFyeSI7IH07IHRoZW4KKwkgIGNhc2UgJGhvc3QgaW4KKwkgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyopCisJICAgICAgIyBObyBwb2ludCBpbiByZWxpbmtpbmcgRExMcyBiZWNhdXNlIHBhdGhzIGFyZSBub3QgZW5jb2RlZAorCSAgICAgIGZ1bmNfYXBwZW5kIG5vdGluc3RfZGVwbGlicyAiICRsaWIiCisJICAgICAgbmVlZF9yZWxpbms9bm8KKwkgICAgOzsKKwkgICopCisJICAgIGlmIHRlc3QgIiRpbnN0YWxsZWQiID0gbm87IHRoZW4KKwkgICAgICBmdW5jX2FwcGVuZCBub3RpbnN0X2RlcGxpYnMgIiAkbGliIgorCSAgICAgIG5lZWRfcmVsaW5rPXllcworCSAgICBmaQorCSAgICA7OworCSAgZXNhYworCSAgIyBUaGlzIGlzIGEgc2hhcmVkIGxpYnJhcnkKKworCSAgIyBXYXJuIGFib3V0IHBvcnRhYmlsaXR5LCBjYW4ndCBsaW5rIGFnYWluc3QgLW1vZHVsZSdzIG9uIHNvbWUKKwkgICMgc3lzdGVtcyAoZGFyd2luKS4gIERvbid0IGJsZWF0IGFib3V0IGRsb3BlbmVkIG1vZHVsZXMgdGhvdWdoIQorCSAgZGxvcGVubW9kdWxlPSIiCisJICBmb3IgZGxwcmVtb2R1bGV0ZXN0IGluICRkbHByZWZpbGVzOyBkbworCSAgICBpZiB0ZXN0ICJYJGRscHJlbW9kdWxldGVzdCIgPSAiWCRsaWIiOyB0aGVuCisJICAgICAgZGxvcGVubW9kdWxlPSIkZGxwcmVtb2R1bGV0ZXN0IgorCSAgICAgIGJyZWFrCisJICAgIGZpCisJICBkb25lCisJICBpZiB0ZXN0IC16ICIkZGxvcGVubW9kdWxlIiAmJiB0ZXN0ICIkc2hvdWxkbm90bGluayIgPSB5ZXMgJiYgdGVzdCAiJHBhc3MiID0gbGluazsgdGhlbgorCSAgICBlY2hvCisJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisJICAgICAgJEVDSE8gIioqKiBXYXJuaW5nOiBMaW5raW5nIHRoZSBleGVjdXRhYmxlICRvdXRwdXQgYWdhaW5zdCB0aGUgbG9hZGFibGUgbW9kdWxlIgorCSAgICBlbHNlCisJICAgICAgJEVDSE8gIioqKiBXYXJuaW5nOiBMaW5raW5nIHRoZSBzaGFyZWQgbGlicmFyeSAkb3V0cHV0IGFnYWluc3QgdGhlIGxvYWRhYmxlIG1vZHVsZSIKKwkgICAgZmkKKwkgICAgJEVDSE8gIioqKiAkbGlua2xpYiBpcyBub3QgcG9ydGFibGUhIgorCSAgZmkKKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWIgJiYKKwkgICAgIHRlc3QgIiRoYXJkY29kZV9pbnRvX2xpYnMiID0geWVzOyB0aGVuCisJICAgICMgSGFyZGNvZGUgdGhlIGxpYnJhcnkgcGF0aC4KKwkgICAgIyBTa2lwIGRpcmVjdG9yaWVzIHRoYXQgYXJlIGluIHRoZSBzeXN0ZW0gZGVmYXVsdCBydW4tdGltZQorCSAgICAjIHNlYXJjaCBwYXRoLgorCSAgICBjYXNlICIgJHN5c19saWJfZGxzZWFyY2hfcGF0aCAiIGluCisJICAgICoiICRhYnNkaXIgIiopIDs7CisJICAgICopCisJICAgICAgY2FzZSAiJGNvbXBpbGVfcnBhdGggIiBpbgorCSAgICAgICoiICRhYnNkaXIgIiopIDs7CisJICAgICAgKikgZnVuY19hcHBlbmQgY29tcGlsZV9ycGF0aCAiICRhYnNkaXIiIDs7CisJICAgICAgZXNhYworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorCSAgICAqIiAkbGliZGlyICIqKSA7OworCSAgICAqKQorCSAgICAgIGNhc2UgIiRmaW5hbGl6ZV9ycGF0aCAiIGluCisJICAgICAgKiIgJGxpYmRpciAiKikgOzsKKwkgICAgICAqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9ycGF0aCAiICRsaWJkaXIiIDs7CisJICAgICAgZXNhYworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgIGZpCisKKwkgIGlmIHRlc3QgLW4gIiRvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcyI7IHRoZW4KKwkgICAgIyBmaWd1cmUgb3V0IHRoZSBzb25hbWUKKwkgICAgc2V0IGR1bW15ICRsaWJyYXJ5X25hbWVzCisJICAgIHNoaWZ0CisJICAgIHJlYWxuYW1lPSIkMSIKKwkgICAgc2hpZnQKKwkgICAgbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCisJICAgICMgdXNlIGRsbmFtZSBpZiB3ZSBnb3QgaXQuIGl0J3MgcGVyZmVjdGx5IGdvb2QsIG5vPworCSAgICBpZiB0ZXN0IC1uICIkZGxuYW1lIjsgdGhlbgorCSAgICAgIHNvbmFtZT0iJGRsbmFtZSIKKwkgICAgZWxpZiB0ZXN0IC1uICIkc29uYW1lX3NwZWMiOyB0aGVuCisJICAgICAgIyBibGVoIHdpbmRvd3MKKwkgICAgICBjYXNlICRob3N0IGluCisJICAgICAgKmN5Z3dpbiogfCBtaW5ndyogfCAqY2VnY2MqKQorCSAgICAgICAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UKKwkJbWFqb3I9JGZ1bmNfYXJpdGhfcmVzdWx0CisJCXZlcnN1ZmZpeD0iLSRtYWpvciIKKwkJOzsKKwkgICAgICBlc2FjCisJICAgICAgZXZhbCBzb25hbWU9XCIkc29uYW1lX3NwZWNcIgorCSAgICBlbHNlCisJICAgICAgc29uYW1lPSIkcmVhbG5hbWUiCisJICAgIGZpCisKKwkgICAgIyBNYWtlIGEgbmV3IG5hbWUgZm9yIHRoZSBleHRyYWN0X2V4cHN5bXNfY21kcyB0byB1c2UKKwkgICAgc29yb290PSIkc29uYW1lIgorCSAgICBmdW5jX2Jhc2VuYW1lICIkc29yb290IgorCSAgICBzb25hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkgICAgZnVuY19zdHJpcG5hbWUgJ2xpYicgJy5kbGwnICIkc29uYW1lIgorCSAgICBuZXdsaWI9bGliaW1wLSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQuYQorCisJICAgICMgSWYgdGhlIGxpYnJhcnkgaGFzIG5vIGV4cG9ydCBsaXN0LCB0aGVuIGNyZWF0ZSBvbmUgbm93CisJICAgIGlmIHRlc3QgLWYgIiRvdXRwdXRfb2JqZGlyLyRzb25hbWUtZGVmIjsgdGhlbiA6CisJICAgIGVsc2UKKwkgICAgICBmdW5jX3ZlcmJvc2UgImV4dHJhY3RpbmcgZXhwb3J0ZWQgc3ltYm9sIGxpc3QgZnJvbSBcYCRzb25hbWUnIgorCSAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkZXh0cmFjdF9leHBzeW1zX2NtZHMiICdleGl0ICQ/JworCSAgICBmaQorCisJICAgICMgQ3JlYXRlICRuZXdsaWIKKwkgICAgaWYgdGVzdCAtZiAiJG91dHB1dF9vYmpkaXIvJG5ld2xpYiI7IHRoZW4gOjsgZWxzZQorCSAgICAgIGZ1bmNfdmVyYm9zZSAiZ2VuZXJhdGluZyBpbXBvcnQgbGlicmFyeSBmb3IgXGAkc29uYW1lJyIKKwkgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIiAnZXhpdCAkPycKKwkgICAgZmkKKwkgICAgIyBtYWtlIHN1cmUgdGhlIGxpYnJhcnkgdmFyaWFibGVzIGFyZSBwb2ludGluZyB0byB0aGUgbmV3IGxpYnJhcnkKKwkgICAgZGlyPSRvdXRwdXRfb2JqZGlyCisJICAgIGxpbmtsaWI9JG5ld2xpYgorCSAgZmkgIyB0ZXN0IC1uICIkb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMiCisKKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nIHx8IHRlc3QgIiRvcHRfbW9kZSIgIT0gcmVsaW5rOyB0aGVuCisJICAgIGFkZF9zaGxpYnBhdGg9CisJICAgIGFkZF9kaXI9CisJICAgIGFkZD0KKwkgICAgbGliX2xpbmtlZD15ZXMKKwkgICAgY2FzZSAkaGFyZGNvZGVfYWN0aW9uIGluCisJICAgIGltbWVkaWF0ZSB8IHVuc3VwcG9ydGVkKQorCSAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiID0gbm87IHRoZW4KKwkJYWRkPSIkZGlyLyRsaW5rbGliIgorCQljYXNlICRob3N0IGluCisJCSAgKi0qLXNjbzMuMnY1LjAuWzAyNF0qKSBhZGRfZGlyPSItTCRkaXIiIDs7CisJCSAgKi0qLXN5c3Y0KnV3MiopIGFkZF9kaXI9Ii1MJGRpciIgOzsKKwkJICAqLSotc3lzdjVPcGVuVU5JWCogfCAqLSotc3lzdjVVbml4V2FyZTcuWzAxXS5bMTBdKiB8IFwKKwkJICAgICotKi11bml4d2FyZTcqKSBhZGRfZGlyPSItTCRkaXIiIDs7CisJCSAgKi0qLWRhcndpbiogKQorCQkgICAgIyBpZiB0aGUgbGliIGlzIGEgKG5vbi1kbG9wZW5lZCkgbW9kdWxlIHRoZW4gd2UgY2FuIG5vdAorCQkgICAgIyBsaW5rIGFnYWluc3QgaXQsIHNvbWVvbmUgaXMgaWdub3JpbmcgdGhlIGVhcmxpZXIgd2FybmluZ3MKKwkJICAgIGlmIC91c3IvYmluL2ZpbGUgLUwgJGFkZCAyPiAvZGV2L251bGwgfAorCQkJICRHUkVQICI6IFteOl0qIGJ1bmRsZSIgPi9kZXYvbnVsbCA7IHRoZW4KKwkJICAgICAgaWYgdGVzdCAiWCRkbG9wZW5tb2R1bGUiICE9ICJYJGxpYiI7IHRoZW4KKwkJCSRFQ0hPICIqKiogV2FybmluZzogbGliICRsaW5rbGliIGlzIGEgbW9kdWxlLCBub3QgYSBzaGFyZWQgbGlicmFyeSIKKwkJCWlmIHRlc3QgLXogIiRvbGRfbGlicmFyeSIgOyB0aGVuCisJCQkgIGVjaG8KKwkJCSAgZWNobyAiKioqIEFuZCB0aGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUgYSBzdGF0aWMgYXJjaGl2ZSBhdmFpbGFibGUiCisJCQkgIGVjaG8gIioqKiBUaGUgbGluayB3aWxsIHByb2JhYmx5IGZhaWwsIHNvcnJ5IgorCQkJZWxzZQorCQkJICBhZGQ9IiRkaXIvJG9sZF9saWJyYXJ5IgorCQkJZmkKKwkJICAgICAgZWxpZiB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiOyB0aGVuCisJCQlhZGQ9IiRkaXIvJG9sZF9saWJyYXJ5IgorCQkgICAgICBmaQorCQkgICAgZmkKKwkJZXNhYworCSAgICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiID0gbm87IHRoZW4KKwkJY2FzZSAkaG9zdCBpbgorCQkqLSotc3Vub3MqKSBhZGRfc2hsaWJwYXRoPSIkZGlyIiA7OworCQllc2FjCisJCWFkZF9kaXI9Ii1MJGRpciIKKwkJYWRkPSItbCRuYW1lIgorCSAgICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiID0gbm87IHRoZW4KKwkJYWRkX3NobGlicGF0aD0iJGRpciIKKwkJYWRkPSItbCRuYW1lIgorCSAgICAgIGVsc2UKKwkJbGliX2xpbmtlZD1ubworCSAgICAgIGZpCisJICAgICAgOzsKKwkgICAgcmVsaW5rKQorCSAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiID0geWVzICYmCisJICAgICAgICAgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSIgPSBubzsgdGhlbgorCQlhZGQ9IiRkaXIvJGxpbmtsaWIiCisJICAgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTCIgPSB5ZXM7IHRoZW4KKwkJYWRkX2Rpcj0iLUwkYWJzZGlyIgorCQkjIFRyeSBsb29raW5nIGZpcnN0IGluIHRoZSBsb2NhdGlvbiB3ZSdyZSBiZWluZyBpbnN0YWxsZWQgdG8uCisJCWlmIHRlc3QgLW4gIiRpbnN0X3ByZWZpeF9kaXIiOyB0aGVuCisJCSAgY2FzZSAkbGliZGlyIGluCisJCSAgICBbXFwvXSopCisJCSAgICAgIGZ1bmNfYXBwZW5kIGFkZF9kaXIgIiAtTCRpbnN0X3ByZWZpeF9kaXIkbGliZGlyIgorCQkgICAgICA7OworCQkgIGVzYWMKKwkJZmkKKwkJYWRkPSItbCRuYW1lIgorCSAgICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiID0geWVzOyB0aGVuCisJCWFkZF9zaGxpYnBhdGg9IiRkaXIiCisJCWFkZD0iLWwkbmFtZSIKKwkgICAgICBlbHNlCisJCWxpYl9saW5rZWQ9bm8KKwkgICAgICBmaQorCSAgICAgIDs7CisJICAgICopIGxpYl9saW5rZWQ9bm8gOzsKKwkgICAgZXNhYworCisJICAgIGlmIHRlc3QgIiRsaWJfbGlua2VkIiAhPSB5ZXM7IHRoZW4KKwkgICAgICBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gInVuc3VwcG9ydGVkIGhhcmRjb2RlIHByb3BlcnRpZXMiCisJICAgIGZpCisKKwkgICAgaWYgdGVzdCAtbiAiJGFkZF9zaGxpYnBhdGgiOyB0aGVuCisJICAgICAgY2FzZSA6JGNvbXBpbGVfc2hsaWJwYXRoOiBpbgorCSAgICAgICoiOiRhZGRfc2hsaWJwYXRoOiIqKSA7OworCSAgICAgICopIGZ1bmNfYXBwZW5kIGNvbXBpbGVfc2hsaWJwYXRoICIkYWRkX3NobGlicGF0aDoiIDs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgorCSAgICAgIHRlc3QgLW4gIiRhZGRfZGlyIiAmJiBjb21waWxlX2RlcGxpYnM9IiRhZGRfZGlyICRjb21waWxlX2RlcGxpYnMiCisJICAgICAgdGVzdCAtbiAiJGFkZCIgJiYgY29tcGlsZV9kZXBsaWJzPSIkYWRkICRjb21waWxlX2RlcGxpYnMiCisJICAgIGVsc2UKKwkgICAgICB0ZXN0IC1uICIkYWRkX2RpciIgJiYgZGVwbGlicz0iJGFkZF9kaXIgJGRlcGxpYnMiCisJICAgICAgdGVzdCAtbiAiJGFkZCIgJiYgZGVwbGlicz0iJGFkZCAkZGVwbGlicyIKKwkgICAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0IiAhPSB5ZXMgJiYKKwkJIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiAhPSB5ZXMgJiYKKwkJIHRlc3QgIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiA9IHllczsgdGhlbgorCQljYXNlIDokZmluYWxpemVfc2hsaWJwYXRoOiBpbgorCQkqIjokbGliZGlyOiIqKSA7OworCQkqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9zaGxpYnBhdGggIiRsaWJkaXI6IiA7OworCQllc2FjCisJICAgICAgZmkKKwkgICAgZmkKKwkgIGZpCisKKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nIHx8IHRlc3QgIiRvcHRfbW9kZSIgPSByZWxpbms7IHRoZW4KKwkgICAgYWRkX3NobGlicGF0aD0KKwkgICAgYWRkX2Rpcj0KKwkgICAgYWRkPQorCSAgICAjIEZpbmFsaXplIGNvbW1hbmQgZm9yIGJvdGggaXMgc2ltcGxlOiBqdXN0IGhhcmRjb2RlIGl0LgorCSAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0IiA9IHllcyAmJgorCSAgICAgICB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlIiA9IG5vOyB0aGVuCisJICAgICAgYWRkPSIkbGliZGlyLyRsaW5rbGliIgorCSAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiA9IHllczsgdGhlbgorCSAgICAgIGFkZF9kaXI9Ii1MJGxpYmRpciIKKwkgICAgICBhZGQ9Ii1sJG5hbWUiCisJICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiID0geWVzOyB0aGVuCisJICAgICAgY2FzZSA6JGZpbmFsaXplX3NobGlicGF0aDogaW4KKwkgICAgICAqIjokbGliZGlyOiIqKSA7OworCSAgICAgICopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3NobGlicGF0aCAiJGxpYmRpcjoiIDs7CisJICAgICAgZXNhYworCSAgICAgIGFkZD0iLWwkbmFtZSIKKwkgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfYXV0b21hdGljIiA9IHllczsgdGhlbgorCSAgICAgIGlmIHRlc3QgLW4gIiRpbnN0X3ByZWZpeF9kaXIiICYmCisJCSB0ZXN0IC1mICIkaW5zdF9wcmVmaXhfZGlyJGxpYmRpci8kbGlua2xpYiIgOyB0aGVuCisJCWFkZD0iJGluc3RfcHJlZml4X2RpciRsaWJkaXIvJGxpbmtsaWIiCisJICAgICAgZWxzZQorCQlhZGQ9IiRsaWJkaXIvJGxpbmtsaWIiCisJICAgICAgZmkKKwkgICAgZWxzZQorCSAgICAgICMgV2UgY2Fubm90IHNlZW0gdG8gaGFyZGNvZGUgaXQsIGd1ZXNzIHdlJ2xsIGZha2UgaXQuCisJICAgICAgYWRkX2Rpcj0iLUwkbGliZGlyIgorCSAgICAgICMgVHJ5IGxvb2tpbmcgZmlyc3QgaW4gdGhlIGxvY2F0aW9uIHdlJ3JlIGJlaW5nIGluc3RhbGxlZCB0by4KKwkgICAgICBpZiB0ZXN0IC1uICIkaW5zdF9wcmVmaXhfZGlyIjsgdGhlbgorCQljYXNlICRsaWJkaXIgaW4KKwkJICBbXFwvXSopCisJCSAgICBmdW5jX2FwcGVuZCBhZGRfZGlyICIgLUwkaW5zdF9wcmVmaXhfZGlyJGxpYmRpciIKKwkJICAgIDs7CisJCWVzYWMKKwkgICAgICBmaQorCSAgICAgIGFkZD0iLWwkbmFtZSIKKwkgICAgZmkKKworCSAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgorCSAgICAgIHRlc3QgLW4gIiRhZGRfZGlyIiAmJiBmaW5hbGl6ZV9kZXBsaWJzPSIkYWRkX2RpciAkZmluYWxpemVfZGVwbGlicyIKKwkgICAgICB0ZXN0IC1uICIkYWRkIiAmJiBmaW5hbGl6ZV9kZXBsaWJzPSIkYWRkICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgICBlbHNlCisJICAgICAgdGVzdCAtbiAiJGFkZF9kaXIiICYmIGRlcGxpYnM9IiRhZGRfZGlyICRkZXBsaWJzIgorCSAgICAgIHRlc3QgLW4gIiRhZGQiICYmIGRlcGxpYnM9IiRhZGQgJGRlcGxpYnMiCisJICAgIGZpCisJICBmaQorCWVsaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KKwkgICMgSGVyZSB3ZSBhc3N1bWUgdGhhdCBvbmUgb2YgaGFyZGNvZGVfZGlyZWN0IG9yIGhhcmRjb2RlX21pbnVzX0wKKwkgICMgaXMgbm90IHVuc3VwcG9ydGVkLiAgVGhpcyBpcyB2YWxpZCBvbiBhbGwga25vd24gc3RhdGljIGFuZAorCSAgIyBzaGFyZWQgcGxhdGZvcm1zLgorCSAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgIT0gdW5zdXBwb3J0ZWQ7IHRoZW4KKwkgICAgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IiAmJiBsaW5rbGliPSIkb2xkX2xpYnJhcnkiCisJICAgIGNvbXBpbGVfZGVwbGlicz0iJGRpci8kbGlua2xpYiAkY29tcGlsZV9kZXBsaWJzIgorCSAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGlyLyRsaW5rbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgZWxzZQorCSAgICBjb21waWxlX2RlcGxpYnM9Ii1sJG5hbWUgLUwkZGlyICRjb21waWxlX2RlcGxpYnMiCisJICAgIGZpbmFsaXplX2RlcGxpYnM9Ii1sJG5hbWUgLUwkZGlyICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgZmkKKwllbGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisJICAjIE5vdCBhIHNoYXJlZCBsaWJyYXJ5CisJICBpZiB0ZXN0ICIkZGVwbGlic19jaGVja19tZXRob2QiICE9IHBhc3NfYWxsOyB0aGVuCisJICAgICMgV2UncmUgdHJ5aW5nIGxpbmsgYSBzaGFyZWQgbGlicmFyeSBhZ2FpbnN0IGEgc3RhdGljIG9uZQorCSAgICAjIGJ1dCB0aGUgc3lzdGVtIGRvZXNuJ3Qgc3VwcG9ydCBpdC4KKworCSAgICAjIEp1c3QgcHJpbnQgYSB3YXJuaW5nIGFuZCBhZGQgdGhlIGxpYnJhcnkgdG8gZGVwZW5kZW5jeV9saWJzIHNvCisJICAgICMgdGhhdCB0aGUgcHJvZ3JhbSBjYW4gYmUgbGlua2VkIGFnYWluc3QgdGhlIHN0YXRpYyBsaWJyYXJ5LgorCSAgICBlY2hvCisJICAgICRFQ0hPICIqKiogV2FybmluZzogVGhpcyBzeXN0ZW0gY2FuIG5vdCBsaW5rIHRvIHN0YXRpYyBsaWIgYXJjaGl2ZSAkbGliLiIKKwkgICAgZWNobyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKKwkgICAgZWNobyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKKwkgICAgZWNobyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlLiIKKwkgICAgaWYgdGVzdCAiJG1vZHVsZSIgPSB5ZXM7IHRoZW4KKwkgICAgICBlY2hvICIqKiogQnV0IGFzIHlvdSB0cnkgdG8gYnVpbGQgYSBtb2R1bGUgbGlicmFyeSwgbGlidG9vbCB3aWxsIHN0aWxsIGNyZWF0ZSAiCisJICAgICAgZWNobyAiKioqIGEgc3RhdGljIG1vZHVsZSwgdGhhdCBzaG91bGQgd29yayBhcyBsb25nIGFzIHRoZSBkbG9wZW5pbmcgYXBwbGljYXRpb24iCisJICAgICAgZWNobyAiKioqIGlzIGxpbmtlZCB3aXRoIHRoZSAtZGxvcGVuIGZsYWcgdG8gcmVzb2x2ZSBzeW1ib2xzIGF0IHJ1bnRpbWUuIgorCSAgICAgIGlmIHRlc3QgLXogIiRnbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCisJCWVjaG8KKwkJZWNobyAiKioqIEhvd2V2ZXIsIHRoaXMgd291bGQgb25seSB3b3JrIGlmIGxpYnRvb2wgd2FzIGFibGUgdG8gZXh0cmFjdCBzeW1ib2wiCisJCWVjaG8gIioqKiBsaXN0cyBmcm9tIGEgcHJvZ3JhbSwgdXNpbmcgXGBubScgb3IgZXF1aXZhbGVudCwgYnV0IGxpYnRvb2wgY291bGQiCisJCWVjaG8gIioqKiBub3QgZmluZCBzdWNoIGEgcHJvZ3JhbS4gIFNvLCB0aGlzIG1vZHVsZSBpcyBwcm9iYWJseSB1c2VsZXNzLiIKKwkJZWNobyAiKioqIFxgbm0nIGZyb20gR05VIGJpbnV0aWxzIGFuZCBhIGZ1bGwgcmVidWlsZCBtYXkgaGVscC4iCisJICAgICAgZmkKKwkgICAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0gbm87IHRoZW4KKwkJYnVpbGRfbGlidG9vbF9saWJzPW1vZHVsZQorCQlidWlsZF9vbGRfbGlicz15ZXMKKwkgICAgICBlbHNlCisJCWJ1aWxkX2xpYnRvb2xfbGlicz1ubworCSAgICAgIGZpCisJICAgIGZpCisJICBlbHNlCisJICAgIGRlcGxpYnM9IiRkaXIvJG9sZF9saWJyYXJ5ICRkZXBsaWJzIgorCSAgICBsaW5rX3N0YXRpYz15ZXMKKwkgIGZpCisJZmkgIyBsaW5rIHNoYXJlZC9zdGF0aWMgbGlicmFyeT8KKworCWlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWI7IHRoZW4KKwkgIGlmIHRlc3QgLW4gIiRkZXBlbmRlbmN5X2xpYnMiICYmCisJICAgICB7IHRlc3QgIiRoYXJkY29kZV9pbnRvX2xpYnMiICE9IHllcyB8fAorCSAgICAgICB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzIHx8CisJICAgICAgIHRlc3QgIiRsaW5rX3N0YXRpYyIgPSB5ZXM7IH07IHRoZW4KKwkgICAgIyBFeHRyYWN0IC1SIGZyb20gZGVwZW5kZW5jeV9saWJzCisJICAgIHRlbXBfZGVwbGlicz0KKwkgICAgZm9yIGxpYmRpciBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworCSAgICAgIGNhc2UgJGxpYmRpciBpbgorCSAgICAgIC1SKikgZnVuY19zdHJpcG5hbWUgJy1SJyAnJyAiJGxpYmRpciIKKwkgICAgICAgICAgIHRlbXBfeHJwYXRoPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkJICAgY2FzZSAiICR4cnBhdGggIiBpbgorCQkgICAqIiAkdGVtcF94cnBhdGggIiopIDs7CisJCSAgICopIGZ1bmNfYXBwZW5kIHhycGF0aCAiICR0ZW1wX3hycGF0aCI7OworCQkgICBlc2FjOzsKKwkgICAgICAqKSBmdW5jX2FwcGVuZCB0ZW1wX2RlcGxpYnMgIiAkbGliZGlyIjs7CisJICAgICAgZXNhYworCSAgICBkb25lCisJICAgIGRlcGVuZGVuY3lfbGlicz0iJHRlbXBfZGVwbGlicyIKKwkgIGZpCisKKwkgIGZ1bmNfYXBwZW5kIG5ld2xpYl9zZWFyY2hfcGF0aCAiICRhYnNkaXIiCisJICAjIExpbmsgYWdhaW5zdCB0aGlzIGxpYnJhcnkKKwkgIHRlc3QgIiRsaW5rX3N0YXRpYyIgPSBubyAmJiBuZXdkZXBlbmRlbmN5X2xpYnM9IiRhYnNfbGFkaXIvJGxhbmFtZSAkbmV3ZGVwZW5kZW5jeV9saWJzIgorCSAgIyAuLi4gYW5kIGl0cyBkZXBlbmRlbmN5X2xpYnMKKwkgIHRtcF9saWJzPQorCSAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworCSAgICBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKKwkgICAgY2FzZSAkZGVwbGliIGluCisgICAgICAgICAgICAgIC1MKikgZnVuY19zdHJpcG5hbWUgJy1MJyAnJyAiJGRlcGxpYiIKKyAgICAgICAgICAgICAgICAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCI7OworICAgICAgICAgICAgICAqKSBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGRlcGxpYiIgOzsKKyAgICAgICAgICAgIGVzYWMKKwkgICAgaWYgJG9wdF9wcmVzZXJ2ZV9kdXBfZGVwcyA7IHRoZW4KKwkgICAgICBjYXNlICIkdG1wX2xpYnMgIiBpbgorCSAgICAgICoiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQgIiopCisgICAgICAgICAgICAgICAgZnVuY19hcHBlbmQgc3BlY2lhbGRlcGxpYnMgIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IiA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgICAgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgorCSAgZG9uZQorCisJICBpZiB0ZXN0ICIkbGlua19hbGxfZGVwbGlicyIgIT0gbm87IHRoZW4KKwkgICAgIyBBZGQgdGhlIHNlYXJjaCBwYXRocyBvZiBhbGwgZGVwZW5kZW5jeSBsaWJyYXJpZXMKKwkgICAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworCSAgICAgIHBhdGg9CisJICAgICAgY2FzZSAkZGVwbGliIGluCisJICAgICAgLUwqKSBwYXRoPSIkZGVwbGliIiA7OworCSAgICAgICoubGEpCisJICAgICAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGRlcGxpYiIKKwkgICAgICAgIGRlcGxpYj0kZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0CisJICAgICAgICBmdW5jX2Rpcm5hbWUgIiRkZXBsaWIiICIiICIuIgorCQlkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKKwkJIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCisJCWNhc2UgJGRpciBpbgorCQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIGFic2Rpcj0iJGRpciIgOzsKKwkJKikKKwkJICBhYnNkaXI9YGNkICIkZGlyIiAmJiBwd2RgCisJCSAgaWYgdGVzdCAteiAiJGFic2RpciI7IHRoZW4KKwkJICAgIGZ1bmNfd2FybmluZyAiY2Fubm90IGRldGVybWluZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBvZiBcYCRkaXInIgorCQkgICAgYWJzZGlyPSIkZGlyIgorCQkgIGZpCisJCSAgOzsKKwkJZXNhYworCQlpZiAkR1JFUCAiXmluc3RhbGxlZD1ubyIgJGRlcGxpYiA+IC9kZXYvbnVsbDsgdGhlbgorCQljYXNlICRob3N0IGluCisJCSotKi1kYXJ3aW4qKQorCQkgIGRlcGRlcGw9CisJCSAgZXZhbCBkZXBsaWJyYXJ5X25hbWVzPWAke1NFRH0gLW4gLWUgJ3MvXmxpYnJhcnlfbmFtZXM9XCguKlwpJC9cMS9wJyAkZGVwbGliYAorCQkgIGlmIHRlc3QgLW4gIiRkZXBsaWJyYXJ5X25hbWVzIiA7IHRoZW4KKwkJICAgIGZvciB0bXAgaW4gJGRlcGxpYnJhcnlfbmFtZXMgOyBkbworCQkgICAgICBkZXBkZXBsPSR0bXAKKwkJICAgIGRvbmUKKwkJICAgIGlmIHRlc3QgLWYgIiRhYnNkaXIvJG9iamRpci8kZGVwZGVwbCIgOyB0aGVuCisJCSAgICAgIGRlcGRlcGw9IiRhYnNkaXIvJG9iamRpci8kZGVwZGVwbCIKKwkJICAgICAgZGFyd2luX2luc3RhbGxfbmFtZT1gJHtPVE9PTH0gLUwgJGRlcGRlcGwgfCBhd2sgJ3tpZiAoTlIgPT0gMikge3ByaW50ICQxO2V4aXR9fSdgCisgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGRhcndpbl9pbnN0YWxsX25hbWUiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRhcndpbl9pbnN0YWxsX25hbWU9YCR7T1RPT0w2NH0gLUwgJGRlcGRlcGwgIHwgYXdrICd7aWYgKE5SID09IDIpIHtwcmludCAkMTtleGl0fX0nYAorICAgICAgICAgICAgICAgICAgICAgIGZpCisJCSAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJHt3bH0tZHlsaWJfZmlsZSAke3dsfSR7ZGFyd2luX2luc3RhbGxfbmFtZX06JHtkZXBkZXBsfSIKKwkJICAgICAgZnVuY19hcHBlbmQgbGlua2VyX2ZsYWdzICIgLWR5bGliX2ZpbGUgJHtkYXJ3aW5faW5zdGFsbF9uYW1lfToke2RlcGRlcGx9IgorCQkgICAgICBwYXRoPQorCQkgICAgZmkKKwkJICBmaQorCQkgIDs7CisJCSopCisJCSAgcGF0aD0iLUwkYWJzZGlyLyRvYmpkaXIiCisJCSAgOzsKKwkJZXNhYworCQllbHNlCisJCSAgZXZhbCBsaWJkaXI9YCR7U0VEfSAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGRlcGxpYmAKKwkJICB0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisJCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRkZXBsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKwkJICB0ZXN0ICIkYWJzZGlyIiAhPSAiJGxpYmRpciIgJiYgXAorCQkgICAgZnVuY193YXJuaW5nICJcYCRkZXBsaWInIHNlZW1zIHRvIGJlIG1vdmVkIgorCisJCSAgcGF0aD0iLUwkYWJzZGlyIgorCQlmaQorCQk7OworCSAgICAgIGVzYWMKKwkgICAgICBjYXNlICIgJGRlcGxpYnMgIiBpbgorCSAgICAgICoiICRwYXRoICIqKSA7OworCSAgICAgICopIGRlcGxpYnM9IiRwYXRoICRkZXBsaWJzIiA7OworCSAgICAgIGVzYWMKKwkgICAgZG9uZQorCSAgZmkgIyBsaW5rX2FsbF9kZXBsaWJzICE9IG5vCisJZmkgIyBsaW5rbW9kZSA9IGxpYgorICAgICAgZG9uZSAjIGZvciBkZXBsaWIgaW4gJGxpYnMKKyAgICAgIGlmIHRlc3QgIiRwYXNzIiA9IGxpbms7IHRoZW4KKwlpZiB0ZXN0ICIkbGlua21vZGUiID0gInByb2ciOyB0aGVuCisJICBjb21waWxlX2RlcGxpYnM9IiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAkY29tcGlsZV9kZXBsaWJzIgorCSAgZmluYWxpemVfZGVwbGlicz0iJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICRmaW5hbGl6ZV9kZXBsaWJzIgorCWVsc2UKKwkgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgImAkRUNITyAiICRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyIgfCAkU0VEICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAorCWZpCisgICAgICBmaQorICAgICAgZGVwZW5kZW5jeV9saWJzPSIkbmV3ZGVwZW5kZW5jeV9saWJzIgorICAgICAgaWYgdGVzdCAiJHBhc3MiID0gZGxwcmVvcGVuOyB0aGVuCisJIyBMaW5rIHRoZSBkbHByZW9wZW5lZCBsaWJyYXJpZXMgYmVmb3JlIG90aGVyIGxpYnJhcmllcworCWZvciBkZXBsaWIgaW4gJHNhdmVfZGVwbGliczsgZG8KKwkgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJZG9uZQorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiRwYXNzIiAhPSBkbG9wZW47IHRoZW4KKwlpZiB0ZXN0ICIkcGFzcyIgIT0gY29udjsgdGhlbgorCSAgIyBNYWtlIHN1cmUgbGliX3NlYXJjaF9wYXRoIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGRpcmVjdG9yaWVzLgorCSAgbGliX3NlYXJjaF9wYXRoPQorCSAgZm9yIGRpciBpbiAkbmV3bGliX3NlYXJjaF9wYXRoOyBkbworCSAgICBjYXNlICIkbGliX3NlYXJjaF9wYXRoICIgaW4KKwkgICAgKiIgJGRpciAiKikgOzsKKwkgICAgKikgZnVuY19hcHBlbmQgbGliX3NlYXJjaF9wYXRoICIgJGRpciIgOzsKKwkgICAgZXNhYworCSAgZG9uZQorCSAgbmV3bGliX3NlYXJjaF9wYXRoPQorCWZpCisKKwlpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiICE9ICJwcm9nLGxpbmsiOyB0aGVuCisJICB2YXJzPSJkZXBsaWJzIgorCWVsc2UKKwkgIHZhcnM9ImNvbXBpbGVfZGVwbGlicyBmaW5hbGl6ZV9kZXBsaWJzIgorCWZpCisJZm9yIHZhciBpbiAkdmFycyBkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAjIEFkZCBsaWJyYXJpZXMgdG8gJHZhciBpbiByZXZlcnNlIG9yZGVyCisJICBldmFsIHRtcF9saWJzPVwiXCQkdmFyXCIKKwkgIG5ld19saWJzPQorCSAgZm9yIGRlcGxpYiBpbiAkdG1wX2xpYnM7IGRvCisJICAgICMgRklYTUU6IFBlZGFudGljYWxseSwgdGhpcyBpcyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8sIHNvCisJICAgICMgICAgICAgIHRoYXQgc29tZSBuYXN0eSBkZXBlbmRlbmN5IGxvb3AgaXNuJ3QgYWNjaWRlbnRhbGx5CisJICAgICMgICAgICAgIGJyb2tlbjoKKwkgICAgI25ld19saWJzPSIkZGVwbGliICRuZXdfbGlicyIKKwkgICAgIyBQcmFnbWF0aWNhbGx5LCB0aGlzIHNlZW1zIHRvIGNhdXNlIHZlcnkgZmV3IHByb2JsZW1zIGluCisJICAgICMgcHJhY3RpY2U6CisJICAgIGNhc2UgJGRlcGxpYiBpbgorCSAgICAtTCopIG5ld19saWJzPSIkZGVwbGliICRuZXdfbGlicyIgOzsKKwkgICAgLVIqKSA7OworCSAgICAqKQorCSAgICAgICMgQW5kIGhlcmUgaXMgdGhlIHJlYXNvbjogd2hlbiBhIGxpYnJhcnkgYXBwZWFycyBtb3JlCisJICAgICAgIyB0aGFuIG9uY2UgYXMgYW4gZXhwbGljaXQgZGVwZW5kZW5jZSBvZiBhIGxpYnJhcnksIG9yCisJICAgICAgIyBpcyBpbXBsaWNpdGx5IGxpbmtlZCBpbiBtb3JlIHRoYW4gb25jZSBieSB0aGUKKwkgICAgICAjIGNvbXBpbGVyLCBpdCBpcyBjb25zaWRlcmVkIHNwZWNpYWwsIGFuZCBtdWx0aXBsZQorCSAgICAgICMgb2NjdXJyZW5jZXMgdGhlcmVvZiBhcmUgbm90IHJlbW92ZWQuICBDb21wYXJlIHRoaXMKKwkgICAgICAjIHdpdGggaGF2aW5nIHRoZSBzYW1lIGxpYnJhcnkgYmVpbmcgbGlzdGVkIGFzIGEKKwkgICAgICAjIGRlcGVuZGVuY3kgb2YgbXVsdGlwbGUgb3RoZXIgbGlicmFyaWVzOiBpbiB0aGlzIGNhc2UsCisJICAgICAgIyB3ZSBrbm93IChwZWRhbnRpY2FsbHksIHdlIGFzc3VtZSkgdGhlIGxpYnJhcnkgZG9lcyBub3QKKwkgICAgICAjIG5lZWQgdG8gYmUgbGlzdGVkIG1vcmUgdGhhbiBvbmNlLCBzbyB3ZSBrZWVwIG9ubHkgdGhlCisJICAgICAgIyBsYXN0IGNvcHkuICBUaGlzIGlzIG5vdCBhbHdheXMgcmlnaHQsIGJ1dCBpdCBpcyByYXJlCisJICAgICAgIyBlbm91Z2ggdGhhdCB3ZSByZXF1aXJlIHVzZXJzIHRoYXQgcmVhbGx5IG1lYW4gdG8gcGxheQorCSAgICAgICMgc3VjaCB1bnBvcnRhYmxlIGxpbmtpbmcgdHJpY2tzIHRvIGxpbmsgdGhlIGxpYnJhcnkKKwkgICAgICAjIHVzaW5nIC1XbCwtbG5hbWUsIHNvIHRoYXQgbGlidG9vbCBkb2VzIG5vdCBjb25zaWRlciBpdAorCSAgICAgICMgZm9yIGR1cGxpY2F0ZSByZW1vdmFsLgorCSAgICAgIGNhc2UgIiAkc3BlY2lhbGRlcGxpYnMgIiBpbgorCSAgICAgICoiICRkZXBsaWIgIiopIG5ld19saWJzPSIkZGVwbGliICRuZXdfbGlicyIgOzsKKwkgICAgICAqKQorCQljYXNlICIgJG5ld19saWJzICIgaW4KKwkJKiIgJGRlcGxpYiAiKikgOzsKKwkJKikgbmV3X2xpYnM9IiRkZXBsaWIgJG5ld19saWJzIiA7OworCQllc2FjCisJCTs7CisJICAgICAgZXNhYworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgIGRvbmUKKwkgIHRtcF9saWJzPQorCSAgZm9yIGRlcGxpYiBpbiAkbmV3X2xpYnM7IGRvCisJICAgIGNhc2UgJGRlcGxpYiBpbgorCSAgICAtTCopCisJICAgICAgY2FzZSAiICR0bXBfbGlicyAiIGluCisJICAgICAgKiIgJGRlcGxpYiAiKikgOzsKKwkgICAgICAqKSBmdW5jX2FwcGVuZCB0bXBfbGlicyAiICRkZXBsaWIiIDs7CisJICAgICAgZXNhYworCSAgICAgIDs7CisJICAgICopIGZ1bmNfYXBwZW5kIHRtcF9saWJzICIgJGRlcGxpYiIgOzsKKwkgICAgZXNhYworCSAgZG9uZQorCSAgZXZhbCAkdmFyPVwiJHRtcF9saWJzXCIKKwlkb25lICMgZm9yIHZhcgorICAgICAgZmkKKyAgICAgICMgTGFzdCBzdGVwOiByZW1vdmUgcnVudGltZSBsaWJzIGZyb20gZGVwZW5kZW5jeV9saWJzCisgICAgICAjICh0aGV5IHN0YXkgaW4gZGVwbGlicykKKyAgICAgIHRtcF9saWJzPQorICAgICAgZm9yIGkgaW4gJGRlcGVuZGVuY3lfbGlicyA7IGRvCisJY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAkY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoICIgaW4KKwkqIiAkaSAiKikKKwkgIGk9IiIKKwkgIDs7CisJZXNhYworCWlmIHRlc3QgLW4gIiRpIiA7IHRoZW4KKwkgIGZ1bmNfYXBwZW5kIHRtcF9saWJzICIgJGkiCisJZmkKKyAgICAgIGRvbmUKKyAgICAgIGRlcGVuZGVuY3lfbGlicz0kdG1wX2xpYnMKKyAgICBkb25lICMgZm9yIHBhc3MKKyAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgorICAgICAgZGxmaWxlcz0iJG5ld2RsZmlsZXMiCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZyB8fCB0ZXN0ICIkbGlua21vZGUiID0gbGliOyB0aGVuCisgICAgICBkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyIKKyAgICBmaQorCisgICAgY2FzZSAkbGlua21vZGUgaW4KKyAgICBvbGRsaWIpCisgICAgICBpZiB0ZXN0IC1uICIkZGxmaWxlcyRkbHByZWZpbGVzIiB8fCB0ZXN0ICIkZGxzZWxmIiAhPSBubzsgdGhlbgorCWZ1bmNfd2FybmluZyAiXGAtZGxvcGVuJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKKyAgICAgIGZpCisKKyAgICAgIGNhc2UgIiAkZGVwbGlicyIgaW4KKyAgICAgICpcIC1sKiB8ICpcIC1MKikKKwlmdW5jX3dhcm5pbmcgIlxgLWwnIGFuZCBcYC1MJyBhcmUgaWdub3JlZCBmb3IgYXJjaGl2ZXMiIDs7CisgICAgICBlc2FjCisKKyAgICAgIHRlc3QgLW4gIiRycGF0aCIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtcnBhdGgnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgorCisgICAgICB0ZXN0IC1uICIkeHJwYXRoIiAmJiBcCisJZnVuY193YXJuaW5nICJcYC1SJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKKworICAgICAgdGVzdCAtbiAiJHZpbmZvIiAmJiBcCisJZnVuY193YXJuaW5nICJcYC12ZXJzaW9uLWluZm8vLXZlcnNpb24tbnVtYmVyJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKKworICAgICAgdGVzdCAtbiAiJHJlbGVhc2UiICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLXJlbGVhc2UnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgorCisgICAgICB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLWV4cG9ydC1zeW1ib2xzJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKKworICAgICAgIyBOb3cgc2V0IHRoZSB2YXJpYWJsZXMgZm9yIGJ1aWxkaW5nIG9sZCBsaWJyYXJpZXMuCisgICAgICBidWlsZF9saWJ0b29sX2xpYnM9bm8KKyAgICAgIG9sZGxpYnM9IiRvdXRwdXQiCisgICAgICBmdW5jX2FwcGVuZCBvYmpzICIkb2xkX2RlcGxpYnMiCisgICAgICA7OworCisgICAgbGliKQorICAgICAgIyBNYWtlIHN1cmUgd2Ugb25seSBnZW5lcmF0ZSBsaWJyYXJpZXMgb2YgdGhlIGZvcm0gYGxpYk5BTUUubGEnLgorICAgICAgY2FzZSAkb3V0cHV0bmFtZSBpbgorICAgICAgbGliKikKKwlmdW5jX3N0cmlwbmFtZSAnbGliJyAnLmxhJyAiJG91dHB1dG5hbWUiCisJbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJZXZhbCBzaGFyZWRfZXh0PVwiJHNocmV4dF9jbWRzXCIKKwlldmFsIGxpYm5hbWU9XCIkbGlibmFtZV9zcGVjXCIKKwk7OworICAgICAgKikKKwl0ZXN0ICIkbW9kdWxlIiA9IG5vICYmIFwKKwkgIGZ1bmNfZmF0YWxfaGVscCAibGlidG9vbCBsaWJyYXJ5IFxgJG91dHB1dCcgbXVzdCBiZWdpbiB3aXRoIFxgbGliJyIKKworCWlmIHRlc3QgIiRuZWVkX2xpYl9wcmVmaXgiICE9IG5vOyB0aGVuCisJICAjIEFkZCB0aGUgImxpYiIgcHJlZml4IGZvciBtb2R1bGVzIGlmIHJlcXVpcmVkCisJICBmdW5jX3N0cmlwbmFtZSAnJyAnLmxhJyAiJG91dHB1dG5hbWUiCisJICBuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgIGV2YWwgc2hhcmVkX2V4dD1cIiRzaHJleHRfY21kc1wiCisJICBldmFsIGxpYm5hbWU9XCIkbGlibmFtZV9zcGVjXCIKKwllbHNlCisJICBmdW5jX3N0cmlwbmFtZSAnJyAnLmxhJyAiJG91dHB1dG5hbWUiCisJICBsaWJuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwlmaQorCTs7CisgICAgICBlc2FjCisKKyAgICAgIGlmIHRlc3QgLW4gIiRvYmpzIjsgdGhlbgorCWlmIHRlc3QgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgIT0gcGFzc19hbGw7IHRoZW4KKwkgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBidWlsZCBsaWJ0b29sIGxpYnJhcnkgXGAkb3V0cHV0JyBmcm9tIG5vbi1saWJ0b29sIG9iamVjdHMgb24gdGhpcyBob3N0OiRvYmpzIgorCWVsc2UKKwkgIGVjaG8KKwkgICRFQ0hPICIqKiogV2FybmluZzogTGlua2luZyB0aGUgc2hhcmVkIGxpYnJhcnkgJG91dHB1dCBhZ2FpbnN0IHRoZSBub24tbGlidG9vbCIKKwkgICRFQ0hPICIqKiogb2JqZWN0cyAkb2JqcyBpcyBub3QgcG9ydGFibGUhIgorCSAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRvYmpzIgorCWZpCisgICAgICBmaQorCisgICAgICB0ZXN0ICIkZGxzZWxmIiAhPSBubyAmJiBcCisJZnVuY193YXJuaW5nICJcYC1kbG9wZW4gc2VsZicgaXMgaWdub3JlZCBmb3IgbGlidG9vbCBsaWJyYXJpZXMiCisKKyAgICAgIHNldCBkdW1teSAkcnBhdGgKKyAgICAgIHNoaWZ0CisgICAgICB0ZXN0ICIkIyIgLWd0IDEgJiYgXAorCWZ1bmNfd2FybmluZyAiaWdub3JpbmcgbXVsdGlwbGUgXGAtcnBhdGgncyBmb3IgYSBsaWJ0b29sIGxpYnJhcnkiCisKKyAgICAgIGluc3RhbGxfbGliZGlyPSIkMSIKKworICAgICAgb2xkbGlicz0KKyAgICAgIGlmIHRlc3QgLXogIiRycGF0aCI7IHRoZW4KKwlpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgorCSAgIyBCdWlsZGluZyBhIGxpYnRvb2wgY29udmVuaWVuY2UgbGlicmFyeS4KKwkgICMgU29tZSBjb21waWxlcnMgaGF2ZSBwcm9ibGVtcyB3aXRoIGEgYC5hbCcgZXh0ZW5zaW9uIHNvCisJICAjIGNvbnZlbmllbmNlIGxpYnJhcmllcyBzaG91bGQgaGF2ZSB0aGUgc2FtZSBleHRlbnNpb24gYW4KKwkgICMgYXJjaGl2ZSBub3JtYWxseSB3b3VsZC4KKwkgIG9sZGxpYnM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiRsaWJleHQgJG9sZGxpYnMiCisJICBidWlsZF9saWJ0b29sX2xpYnM9Y29udmVuaWVuY2UKKwkgIGJ1aWxkX29sZF9saWJzPXllcworCWZpCisKKwl0ZXN0IC1uICIkdmluZm8iICYmIFwKKwkgIGZ1bmNfd2FybmluZyAiXGAtdmVyc2lvbi1pbmZvLy12ZXJzaW9uLW51bWJlcicgaXMgaWdub3JlZCBmb3IgY29udmVuaWVuY2UgbGlicmFyaWVzIgorCisJdGVzdCAtbiAiJHJlbGVhc2UiICYmIFwKKwkgIGZ1bmNfd2FybmluZyAiXGAtcmVsZWFzZScgaXMgaWdub3JlZCBmb3IgY29udmVuaWVuY2UgbGlicmFyaWVzIgorICAgICAgZWxzZQorCisJIyBQYXJzZSB0aGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBhcmd1bWVudC4KKwlzYXZlX2lmcz0iJElGUyI7IElGUz0nOicKKwlzZXQgZHVtbXkgJHZpbmZvIDAgMCAwCisJc2hpZnQKKwlJRlM9IiRzYXZlX2lmcyIKKworCXRlc3QgLW4gIiQ3IiAmJiBcCisJICBmdW5jX2ZhdGFsX2hlbHAgInRvbyBtYW55IHBhcmFtZXRlcnMgdG8gXGAtdmVyc2lvbi1pbmZvJyIKKworCSMgY29udmVydCBhYnNvbHV0ZSB2ZXJzaW9uIG51bWJlcnMgdG8gbGlidG9vbCBhZ2VzCisJIyB0aGlzIHJldGFpbnMgY29tcGF0aWJpbGl0eSB3aXRoIC5sYSBmaWxlcyBhbmQgYXR0ZW1wdHMKKwkjIHRvIG1ha2UgdGhlIGNvZGUgYmVsb3cgYSBiaXQgbW9yZSBjb21wcmVoZW5zaWJsZQorCisJY2FzZSAkdmluZm9fbnVtYmVyIGluCisJeWVzKQorCSAgbnVtYmVyX21ham9yPSIkMSIKKwkgIG51bWJlcl9taW5vcj0iJDIiCisJICBudW1iZXJfcmV2aXNpb249IiQzIgorCSAgIworCSAgIyBUaGVyZSBhcmUgcmVhbGx5IG9ubHkgdHdvIGtpbmRzIC0tIHRob3NlIHRoYXQKKwkgICMgdXNlIHRoZSBjdXJyZW50IHJldmlzaW9uIGFzIHRoZSBtYWpvciB2ZXJzaW9uCisJICAjIGFuZCB0aG9zZSB0aGF0IHN1YnRyYWN0IGFnZSBhbmQgdXNlIGFnZSBhcworCSAgIyBhIG1pbm9yIHZlcnNpb24uICBCdXQsIHRoZW4gdGhlcmUgaXMgaXJpeAorCSAgIyB3aGljaCBoYXMgYW4gZXh0cmEgMSBhZGRlZCBqdXN0IGZvciBmdW4KKwkgICMKKwkgIGNhc2UgJHZlcnNpb25fdHlwZSBpbgorCSAgIyBjb3JyZWN0IGxpbnV4IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisJICBkYXJ3aW58bGludXh8b3NmfHdpbmRvd3N8bm9uZSkKKwkgICAgZnVuY19hcml0aCAkbnVtYmVyX21ham9yICsgJG51bWJlcl9taW5vcgorCSAgICBjdXJyZW50PSRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgICBhZ2U9IiRudW1iZXJfbWlub3IiCisJICAgIHJldmlzaW9uPSIkbnVtYmVyX3JldmlzaW9uIgorCSAgICA7OworCSAgZnJlZWJzZC1hb3V0fGZyZWVic2QtZWxmfHFueHxzdW5vcykKKwkgICAgY3VycmVudD0iJG51bWJlcl9tYWpvciIKKwkgICAgcmV2aXNpb249IiRudW1iZXJfbWlub3IiCisJICAgIGFnZT0iMCIKKwkgICAgOzsKKwkgIGlyaXh8bm9uc3RvcHV4KQorCSAgICBmdW5jX2FyaXRoICRudW1iZXJfbWFqb3IgKyAkbnVtYmVyX21pbm9yCisJICAgIGN1cnJlbnQ9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICAgIGFnZT0iJG51bWJlcl9taW5vciIKKwkgICAgcmV2aXNpb249IiRudW1iZXJfbWlub3IiCisJICAgIGx0X2lyaXhfaW5jcmVtZW50PW5vCisJICAgIDs7CisJICBlc2FjCisJICA7OworCW5vKQorCSAgY3VycmVudD0iJDEiCisJICByZXZpc2lvbj0iJDIiCisJICBhZ2U9IiQzIgorCSAgOzsKKwllc2FjCisKKwkjIENoZWNrIHRoYXQgZWFjaCBvZiB0aGUgdGhpbmdzIGFyZSB2YWxpZCBudW1iZXJzLgorCWNhc2UgJGN1cnJlbnQgaW4KKwkwfFsxLTldfFsxLTldWzAtOV18WzEtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldWzAtOV0pIDs7CisJKikKKwkgIGZ1bmNfZXJyb3IgIkNVUlJFTlQgXGAkY3VycmVudCcgbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXIiCisJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iCisJICA7OworCWVzYWMKKworCWNhc2UgJHJldmlzaW9uIGluCisJMHxbMS05XXxbMS05XVswLTldfFsxLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XVswLTldKSA7OworCSopCisJICBmdW5jX2Vycm9yICJSRVZJU0lPTiBcYCRyZXZpc2lvbicgbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXIiCisJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iCisJICA7OworCWVzYWMKKworCWNhc2UgJGFnZSBpbgorCTB8WzEtOV18WzEtOV1bMC05XXxbMS05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV1bMC05XSkgOzsKKwkqKQorCSAgZnVuY19lcnJvciAiQUdFIFxgJGFnZScgbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXIiCisJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iCisJICA7OworCWVzYWMKKworCWlmIHRlc3QgIiRhZ2UiIC1ndCAiJGN1cnJlbnQiOyB0aGVuCisJICBmdW5jX2Vycm9yICJBR0UgXGAkYWdlJyBpcyBncmVhdGVyIHRoYW4gdGhlIGN1cnJlbnQgaW50ZXJmYWNlIG51bWJlciBcYCRjdXJyZW50JyIKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJHZpbmZvJyBpcyBub3QgdmFsaWQgdmVyc2lvbiBpbmZvcm1hdGlvbiIKKwlmaQorCisJIyBDYWxjdWxhdGUgdGhlIHZlcnNpb24gdmFyaWFibGVzLgorCW1ham9yPQorCXZlcnN1ZmZpeD0KKwl2ZXJzdHJpbmc9CisJY2FzZSAkdmVyc2lvbl90eXBlIGluCisJbm9uZSkgOzsKKworCWRhcndpbikKKwkgICMgTGlrZSBMaW51eCwgYnV0IHdpdGggdGhlIGN1cnJlbnQgdmVyc2lvbiBhdmFpbGFibGUgaW4KKwkgICMgdmVyc3RyaW5nIGZvciBjb2RpbmcgaXQgaW50byB0aGUgbGlicmFyeSBoZWFkZXIKKwkgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCisJICBtYWpvcj0uJGZ1bmNfYXJpdGhfcmVzdWx0CisJICB2ZXJzdWZmaXg9IiRtYWpvci4kYWdlLiRyZXZpc2lvbiIKKwkgICMgRGFyd2luIGxkIGRvZXNuJ3QgbGlrZSAwIGZvciB0aGVzZSBvcHRpb25zLi4uCisJICBmdW5jX2FyaXRoICRjdXJyZW50ICsgMQorCSAgbWlub3JfY3VycmVudD0kZnVuY19hcml0aF9yZXN1bHQKKwkgIHhsY3ZlcnN0cmluZz0iJHt3bH0tY29tcGF0aWJpbGl0eV92ZXJzaW9uICR7d2x9JG1pbm9yX2N1cnJlbnQgJHt3bH0tY3VycmVudF92ZXJzaW9uICR7d2x9JG1pbm9yX2N1cnJlbnQuJHJldmlzaW9uIgorCSAgdmVyc3RyaW5nPSItY29tcGF0aWJpbGl0eV92ZXJzaW9uICRtaW5vcl9jdXJyZW50IC1jdXJyZW50X3ZlcnNpb24gJG1pbm9yX2N1cnJlbnQuJHJldmlzaW9uIgorCSAgOzsKKworCWZyZWVic2QtYW91dCkKKwkgIG1ham9yPSIuJGN1cnJlbnQiCisJICB2ZXJzdWZmaXg9Ii4kY3VycmVudC4kcmV2aXNpb24iOworCSAgOzsKKworCWZyZWVic2QtZWxmKQorCSAgbWFqb3I9Ii4kY3VycmVudCIKKwkgIHZlcnN1ZmZpeD0iLiRjdXJyZW50IgorCSAgOzsKKworCWlyaXggfCBub25zdG9wdXgpCisJICBpZiB0ZXN0ICJYJGx0X2lyaXhfaW5jcmVtZW50IiA9ICJYbm8iOyB0aGVuCisJICAgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCisJICBlbHNlCisJICAgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlICsgMQorCSAgZmkKKwkgIG1ham9yPSRmdW5jX2FyaXRoX3Jlc3VsdAorCisJICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KKwkgICAgbm9uc3RvcHV4KSB2ZXJzdHJpbmdfcHJlZml4PW5vbnN0b3B1eCA7OworCSAgICAqKSAgICAgICAgIHZlcnN0cmluZ19wcmVmaXg9c2dpIDs7CisJICBlc2FjCisJICB2ZXJzdHJpbmc9IiR2ZXJzdHJpbmdfcHJlZml4JG1ham9yLiRyZXZpc2lvbiIKKworCSAgIyBBZGQgaW4gYWxsIHRoZSBpbnRlcmZhY2VzIHRoYXQgd2UgYXJlIGNvbXBhdGlibGUgd2l0aC4KKwkgIGxvb3A9JHJldmlzaW9uCisJICB3aGlsZSB0ZXN0ICIkbG9vcCIgLW5lIDA7IGRvCisJICAgIGZ1bmNfYXJpdGggJHJldmlzaW9uIC0gJGxvb3AKKwkgICAgaWZhY2U9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICAgIGZ1bmNfYXJpdGggJGxvb3AgLSAxCisJICAgIGxvb3A9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICAgIHZlcnN0cmluZz0iJHZlcnN0cmluZ19wcmVmaXgkbWFqb3IuJGlmYWNlOiR2ZXJzdHJpbmciCisJICBkb25lCisKKwkgICMgQmVmb3JlIHRoaXMgcG9pbnQsICRtYWpvciBtdXN0IG5vdCBjb250YWluIGAuJy4KKwkgIG1ham9yPS4kbWFqb3IKKwkgIHZlcnN1ZmZpeD0iJG1ham9yLiRyZXZpc2lvbiIKKwkgIDs7CisKKwlsaW51eCkgIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisJICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZQorCSAgbWFqb3I9LiRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgdmVyc3VmZml4PSIkbWFqb3IuJGFnZS4kcmV2aXNpb24iCisJICA7OworCisJb3NmKQorCSAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UKKwkgIG1ham9yPS4kZnVuY19hcml0aF9yZXN1bHQKKwkgIHZlcnN1ZmZpeD0iLiRjdXJyZW50LiRhZ2UuJHJldmlzaW9uIgorCSAgdmVyc3RyaW5nPSIkY3VycmVudC4kYWdlLiRyZXZpc2lvbiIKKworCSAgIyBBZGQgaW4gYWxsIHRoZSBpbnRlcmZhY2VzIHRoYXQgd2UgYXJlIGNvbXBhdGlibGUgd2l0aC4KKwkgIGxvb3A9JGFnZQorCSAgd2hpbGUgdGVzdCAiJGxvb3AiIC1uZSAwOyBkbworCSAgICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGxvb3AKKwkgICAgaWZhY2U9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICAgIGZ1bmNfYXJpdGggJGxvb3AgLSAxCisJICAgIGxvb3A9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICAgIHZlcnN0cmluZz0iJHZlcnN0cmluZzoke2lmYWNlfS4wIgorCSAgZG9uZQorCisJICAjIE1ha2UgZXhlY3V0YWJsZXMgZGVwZW5kIG9uIG91ciBjdXJyZW50IHZlcnNpb24uCisJICBmdW5jX2FwcGVuZCB2ZXJzdHJpbmcgIjoke2N1cnJlbnR9LjAiCisJICA7OworCisJcW54KQorCSAgbWFqb3I9Ii4kY3VycmVudCIKKwkgIHZlcnN1ZmZpeD0iLiRjdXJyZW50IgorCSAgOzsKKworCXN1bm9zKQorCSAgbWFqb3I9Ii4kY3VycmVudCIKKwkgIHZlcnN1ZmZpeD0iLiRjdXJyZW50LiRyZXZpc2lvbiIKKwkgIDs7CisKKwl3aW5kb3dzKQorCSAgIyBVc2UgJy0nIHJhdGhlciB0aGFuICcuJywgc2luY2Ugd2Ugb25seSB3YW50IG9uZQorCSAgIyBleHRlbnNpb24gb24gRE9TIDguMyBmaWxlc3lzdGVtcy4KKwkgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCisJICBtYWpvcj0kZnVuY19hcml0aF9yZXN1bHQKKwkgIHZlcnN1ZmZpeD0iLSRtYWpvciIKKwkgIDs7CisKKwkqKQorCSAgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICJ1bmtub3duIGxpYnJhcnkgdmVyc2lvbiB0eXBlIFxgJHZlcnNpb25fdHlwZSciCisJICA7OworCWVzYWMKKworCSMgQ2xlYXIgdGhlIHZlcnNpb24gaW5mbyBpZiB3ZSBkZWZhdWx0ZWQsIGFuZCB0aGV5IHNwZWNpZmllZCBhIHJlbGVhc2UuCisJaWYgdGVzdCAteiAiJHZpbmZvIiAmJiB0ZXN0IC1uICIkcmVsZWFzZSI7IHRoZW4KKwkgIG1ham9yPQorCSAgY2FzZSAkdmVyc2lvbl90eXBlIGluCisJICBkYXJ3aW4pCisJICAgICMgd2UgY2FuJ3QgY2hlY2sgZm9yICIwLjAiIGluIGFyY2hpdmVfY21kcyBkdWUgdG8gcXVvdGluZworCSAgICAjIHByb2JsZW1zLCBzbyB3ZSByZXNldCBpdCBjb21wbGV0ZWx5CisJICAgIHZlcnN0cmluZz0KKwkgICAgOzsKKwkgICopCisJICAgIHZlcnN0cmluZz0iMC4wIgorCSAgICA7OworCSAgZXNhYworCSAgaWYgdGVzdCAiJG5lZWRfdmVyc2lvbiIgPSBubzsgdGhlbgorCSAgICB2ZXJzdWZmaXg9CisJICBlbHNlCisJICAgIHZlcnN1ZmZpeD0iLjAuMCIKKwkgIGZpCisJZmkKKworCSMgUmVtb3ZlIHZlcnNpb24gaW5mbyBmcm9tIG5hbWUgaWYgdmVyc2lvbmluZyBzaG91bGQgYmUgYXZvaWRlZAorCWlmIHRlc3QgIiRhdm9pZF92ZXJzaW9uIiA9IHllcyAmJiB0ZXN0ICIkbmVlZF92ZXJzaW9uIiA9IG5vOyB0aGVuCisJICBtYWpvcj0KKwkgIHZlcnN1ZmZpeD0KKwkgIHZlcnN0cmluZz0iIgorCWZpCisKKwkjIENoZWNrIHRvIHNlZSBpZiB0aGUgYXJjaGl2ZSB3aWxsIGhhdmUgdW5kZWZpbmVkIHN5bWJvbHMuCisJaWYgdGVzdCAiJGFsbG93X3VuZGVmaW5lZCIgPSB5ZXM7IHRoZW4KKwkgIGlmIHRlc3QgIiRhbGxvd191bmRlZmluZWRfZmxhZyIgPSB1bnN1cHBvcnRlZDsgdGhlbgorCSAgICBmdW5jX3dhcm5pbmcgInVuZGVmaW5lZCBzeW1ib2xzIG5vdCBhbGxvd2VkIGluICRob3N0IHNoYXJlZCBsaWJyYXJpZXMiCisJICAgIGJ1aWxkX2xpYnRvb2xfbGlicz1ubworCSAgICBidWlsZF9vbGRfbGlicz15ZXMKKwkgIGZpCisJZWxzZQorCSAgIyBEb24ndCBhbGxvdyB1bmRlZmluZWQgc3ltYm9scy4KKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnPSIkbm9fdW5kZWZpbmVkX2ZsYWciCisJZmkKKworICAgICAgZmkKKworICAgICAgZnVuY19nZW5lcmF0ZV9kbHN5bXMgIiRsaWJuYW1lIiAiJGxpYm5hbWUiICJ5ZXMiCisgICAgICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJHN5bWZpbGVvYmoiCisgICAgICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQorCisgICAgICBpZiB0ZXN0ICIkb3B0X21vZGUiICE9IHJlbGluazsgdGhlbgorCSMgUmVtb3ZlIG91ciBvdXRwdXRzLCBidXQgZG9uJ3QgcmVtb3ZlIG9iamVjdCBmaWxlcyBzaW5jZSB0aGV5CisJIyBtYXkgaGF2ZSBiZWVuIGNyZWF0ZWQgd2hlbiBjb21waWxpbmcgUElDIG9iamVjdHMuCisJcmVtb3ZlbGlzdD0KKwl0ZW1wcmVtb3ZlbGlzdD1gJEVDSE8gIiRvdXRwdXRfb2JqZGlyLyoiYAorCWZvciBwIGluICR0ZW1wcmVtb3ZlbGlzdDsgZG8KKwkgIGNhc2UgJHAgaW4KKwkgICAgKi4kb2JqZXh0IHwgKi5nY25vKQorCSAgICAgICA7OworCSAgICAkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSB8ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiogfCAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9JHtyZWxlYXNlfS4qKQorCSAgICAgICBpZiB0ZXN0ICJYJHByZWNpb3VzX2ZpbGVzX3JlZ2V4IiAhPSAiWCI7IHRoZW4KKwkJIGlmICRFQ0hPICIkcCIgfCAkRUdSRVAgLWUgIiRwcmVjaW91c19maWxlc19yZWdleCIgPi9kZXYvbnVsbCAyPiYxCisJCSB0aGVuCisJCSAgIGNvbnRpbnVlCisJCSBmaQorCSAgICAgICBmaQorCSAgICAgICBmdW5jX2FwcGVuZCByZW1vdmVsaXN0ICIgJHAiCisJICAgICAgIDs7CisJICAgICopIDs7CisJICBlc2FjCisJZG9uZQorCXRlc3QgLW4gIiRyZW1vdmVsaXN0IiAmJiBcCisJICBmdW5jX3Nob3dfZXZhbCAiJHtSTX1yIFwkcmVtb3ZlbGlzdCIKKyAgICAgIGZpCisKKyAgICAgICMgTm93IHNldCB0aGUgdmFyaWFibGVzIGZvciBidWlsZGluZyBvbGQgbGlicmFyaWVzLgorICAgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllcyAmJiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSBjb252ZW5pZW5jZSA7IHRoZW4KKwlmdW5jX2FwcGVuZCBvbGRsaWJzICIgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuJGxpYmV4dCIKKworCSMgVHJhbnNmb3JtIC5sbyBmaWxlcyB0byAubyBmaWxlcy4KKwlvbGRvYmpzPSIkb2JqcyAiYCRFQ0hPICIkbGlib2JqcyIgfCAkU1AyTkwgfCAkU0VEICIvXC4ke2xpYmV4dH0kL2Q7ICRsbzJvIiB8ICROTDJTUGAKKyAgICAgIGZpCisKKyAgICAgICMgRWxpbWluYXRlIGFsbCB0ZW1wb3JhcnkgZGlyZWN0b3JpZXMuCisgICAgICAjZm9yIHBhdGggaW4gJG5vdGluc3RfcGF0aDsgZG8KKyAgICAgICMJbGliX3NlYXJjaF9wYXRoPWAkRUNITyAiJGxpYl9zZWFyY2hfcGF0aCAiIHwgJFNFRCAicyUgJHBhdGggJSAlZyJgCisgICAgICAjCWRlcGxpYnM9YCRFQ0hPICIkZGVwbGlicyAiIHwgJFNFRCAicyUgLUwkcGF0aCAlICVnImAKKyAgICAgICMJZGVwZW5kZW5jeV9saWJzPWAkRUNITyAiJGRlcGVuZGVuY3lfbGlicyAiIHwgJFNFRCAicyUgLUwkcGF0aCAlICVnImAKKyAgICAgICNkb25lCisKKyAgICAgIGlmIHRlc3QgLW4gIiR4cnBhdGgiOyB0aGVuCisJIyBJZiB0aGUgdXNlciBzcGVjaWZpZWQgYW55IHJwYXRoIGZsYWdzLCB0aGVuIGFkZCB0aGVtLgorCXRlbXBfeHJwYXRoPQorCWZvciBsaWJkaXIgaW4gJHhycGF0aDsgZG8KKwkgIGZ1bmNfcmVwbGFjZV9zeXNyb290ICIkbGliZGlyIgorCSAgZnVuY19hcHBlbmQgdGVtcF94cnBhdGggIiAtUiRmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQiCisJICBjYXNlICIkZmluYWxpemVfcnBhdGggIiBpbgorCSAgKiIgJGxpYmRpciAiKikgOzsKKwkgICopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3JwYXRoICIgJGxpYmRpciIgOzsKKwkgIGVzYWMKKwlkb25lCisJaWYgdGVzdCAiJGhhcmRjb2RlX2ludG9fbGlicyIgIT0geWVzIHx8IHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KKwkgIGRlcGVuZGVuY3lfbGlicz0iJHRlbXBfeHJwYXRoICRkZXBlbmRlbmN5X2xpYnMiCisJZmkKKyAgICAgIGZpCisKKyAgICAgICMgTWFrZSBzdXJlIGRsZmlsZXMgY29udGFpbnMgb25seSB1bmlxdWUgZmlsZXMgdGhhdCB3b24ndCBiZSBkbHByZW9wZW5lZAorICAgICAgb2xkX2RsZmlsZXM9IiRkbGZpbGVzIgorICAgICAgZGxmaWxlcz0KKyAgICAgIGZvciBsaWIgaW4gJG9sZF9kbGZpbGVzOyBkbworCWNhc2UgIiAkZGxwcmVmaWxlcyAkZGxmaWxlcyAiIGluCisJKiIgJGxpYiAiKikgOzsKKwkqKSBmdW5jX2FwcGVuZCBkbGZpbGVzICIgJGxpYiIgOzsKKwllc2FjCisgICAgICBkb25lCisKKyAgICAgICMgTWFrZSBzdXJlIGRscHJlZmlsZXMgY29udGFpbnMgb25seSB1bmlxdWUgZmlsZXMKKyAgICAgIG9sZF9kbHByZWZpbGVzPSIkZGxwcmVmaWxlcyIKKyAgICAgIGRscHJlZmlsZXM9CisgICAgICBmb3IgbGliIGluICRvbGRfZGxwcmVmaWxlczsgZG8KKwljYXNlICIkZGxwcmVmaWxlcyAiIGluCisJKiIgJGxpYiAiKikgOzsKKwkqKSBmdW5jX2FwcGVuZCBkbHByZWZpbGVzICIgJGxpYiIgOzsKKwllc2FjCisgICAgICBkb25lCisKKyAgICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisJaWYgdGVzdCAtbiAiJHJwYXRoIjsgdGhlbgorCSAgY2FzZSAkaG9zdCBpbgorCSAgKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiogfCAqLSotYmVvcyogfCAqLWNlZ2NjKiB8ICotKi1oYWlrdSopCisJICAgICMgdGhlc2Ugc3lzdGVtcyBkb24ndCBhY3R1YWxseSBoYXZlIGEgYyBsaWJyYXJ5IChhcyBzdWNoKSEKKwkgICAgOzsKKwkgICotKi1yaGFwc29keSogfCAqLSotZGFyd2luMS5bMDEyXSkKKwkgICAgIyBSaGFwc29keSBDIGxpYnJhcnkgaXMgaW4gdGhlIFN5c3RlbSBmcmFtZXdvcmsKKwkgICAgZnVuY19hcHBlbmQgZGVwbGlicyAiIFN5c3RlbS5sdGZyYW1ld29yayIKKwkgICAgOzsKKwkgICotKi1uZXRic2QqKQorCSAgICAjIERvbid0IGxpbmsgd2l0aCBsaWJjIHVudGlsIHRoZSBhLm91dCBsZC5zbyBpcyBmaXhlZC4KKwkgICAgOzsKKwkgICotKi1vcGVuYnNkKiB8ICotKi1mcmVlYnNkKiB8ICotKi1kcmFnb25mbHkqKQorCSAgICAjIERvIG5vdCBpbmNsdWRlIGxpYmMgZHVlIHRvIHVzIGhhdmluZyBsaWJjL2xpYmNfci4KKwkgICAgOzsKKwkgICotKi1zY28zLjJ2NSogfCAqLSotc2NvNXY2KikKKwkgICAgIyBDYXVzZXMgcHJvYmxlbXMgd2l0aCBfX2N0eXBlCisJICAgIDs7CisJICAqLSotc3lzdjQuMnV3MiogfCAqLSotc3lzdjUqIHwgKi0qLXVuaXh3YXJlKiB8ICotKi1PcGVuVU5JWCopCisJICAgICMgQ29tcGlsZXIgaW5zZXJ0cyBsaWJjIGluIHRoZSBjb3JyZWN0IHBsYWNlIGZvciB0aHJlYWRzIHRvIHdvcmsKKwkgICAgOzsKKwkgICopCisJICAgICMgQWRkIGxpYmMgdG8gZGVwbGlicyBvbiBhbGwgb3RoZXIgc3lzdGVtcyBpZiBuZWNlc3NhcnkuCisJICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX25lZWRfbGMiID0gInllcyI7IHRoZW4KKwkgICAgICBmdW5jX2FwcGVuZCBkZXBsaWJzICIgLWxjIgorCSAgICBmaQorCSAgICA7OworCSAgZXNhYworCWZpCisKKwkjIFRyYW5zZm9ybSBkZXBsaWJzIGludG8gb25seSBkZXBsaWJzIHRoYXQgY2FuIGJlIGxpbmtlZCBpbiBzaGFyZWQuCisJbmFtZV9zYXZlPSRuYW1lCisJbGlibmFtZV9zYXZlPSRsaWJuYW1lCisJcmVsZWFzZV9zYXZlPSRyZWxlYXNlCisJdmVyc3VmZml4X3NhdmU9JHZlcnN1ZmZpeAorCW1ham9yX3NhdmU9JG1ham9yCisJIyBJJ20gbm90IHN1cmUgaWYgSSdtIHRyZWF0aW5nIHRoZSByZWxlYXNlIGNvcnJlY3RseS4gIEkgdGhpbmsKKwkjIHJlbGVhc2Ugc2hvdWxkIHNob3cgdXAgaW4gdGhlIC1sIChpZSAtbGdtcDUpIHNvIHdlIGRvbid0IHdhbnQgdG8KKwkjIGFkZCBpdCBpbiB0d2ljZS4gIElzIHRoYXQgY29ycmVjdD8KKwlyZWxlYXNlPSIiCisJdmVyc3VmZml4PSIiCisJbWFqb3I9IiIKKwluZXdkZXBsaWJzPQorCWRyb3BwZWRkZXBzPW5vCisJY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KKwlwYXNzX2FsbCkKKwkgICMgRG9uJ3QgY2hlY2sgZm9yIHNoYXJlZC9zdGF0aWMuICBFdmVyeXRoaW5nIHdvcmtzLgorCSAgIyBUaGlzIG1pZ2h0IGJlIGEgbGl0dGxlIG5haXZlLiAgV2UgbWlnaHQgd2FudCB0byBjaGVjaworCSAgIyB3aGV0aGVyIHRoZSBsaWJyYXJ5IGV4aXN0cyBvciBub3QuICBCdXQgdGhpcyBpcyBvbgorCSAgIyBvc2YzICYgb3NmNCBhbmQgSSdtIG5vdCByZWFsbHkgc3VyZS4uLiBKdXN0CisJICAjIGltcGxlbWVudGluZyB3aGF0IHdhcyBhbHJlYWR5IHRoZSBiZWhhdmlvci4KKwkgIG5ld2RlcGxpYnM9JGRlcGxpYnMKKwkgIDs7CisJdGVzdF9jb21waWxlKQorCSAgIyBUaGlzIGNvZGUgc3RyZXNzZXMgdGhlICJsaWJyYXJpZXMgYXJlIHByb2dyYW1zIiBwYXJhZGlnbSB0byBpdHMKKwkgICMgbGltaXRzLiBNYXliZSBldmVuIGJyZWFrcyBpdC4gIFdlIGNvbXBpbGUgYSBwcm9ncmFtLCBsaW5raW5nIGl0CisJICAjIGFnYWluc3QgdGhlIGRlcGxpYnMgYXMgYSBwcm94eSBmb3IgdGhlIGxpYnJhcnkuICBUaGVuIHdlIGNhbiBjaGVjaworCSAgIyB3aGV0aGVyIHRoZXkgbGlua2VkIGluIHN0YXRpY2FsbHkgb3IgZHluYW1pY2FsbHkgd2l0aCBsZGQuCisJICAkb3B0X2RyeV9ydW4gfHwgJFJNIGNvbmZ0ZXN0LmMKKwkgIGNhdCA+IGNvbmZ0ZXN0LmMgPDxFT0YKKwkgIGludCBtYWluKCkgeyByZXR1cm4gMDsgfQorRU9GCisJICAkb3B0X2RyeV9ydW4gfHwgJFJNIGNvbmZ0ZXN0CisJICBpZiAkTFRDQyAkTFRDRkxBR1MgLW8gY29uZnRlc3QgY29uZnRlc3QuYyAkZGVwbGliczsgdGhlbgorCSAgICBsZGRfb3V0cHV0PWBsZGQgY29uZnRlc3RgCisJICAgIGZvciBpIGluICRkZXBsaWJzOyBkbworCSAgICAgIGNhc2UgJGkgaW4KKwkgICAgICAtbCopCisJCWZ1bmNfc3RyaXBuYW1lIC1sICcnICIkaSIKKwkJbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJCWlmIHRlc3QgIlgkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIiA9ICJYeWVzIiA7IHRoZW4KKwkJICBjYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KKwkJICAqIiAkaSAiKikKKwkJICAgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkaSIKKwkJICAgIGk9IiIKKwkJICAgIDs7CisJCSAgZXNhYworCQlmaQorCQlpZiB0ZXN0IC1uICIkaSIgOyB0aGVuCisJCSAgbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCisJCSAgZGVwbGliX21hdGNoZXM9YGV2YWwgIlxcJEVDSE8gXCIkbGlicmFyeV9uYW1lc19zcGVjXCIiYAorCQkgIHNldCBkdW1teSAkZGVwbGliX21hdGNoZXM7IHNoaWZ0CisJCSAgZGVwbGliX21hdGNoPSQxCisJCSAgaWYgdGVzdCBgZXhwciAiJGxkZF9vdXRwdXQiIDogIi4qJGRlcGxpYl9tYXRjaCJgIC1uZSAwIDsgdGhlbgorCQkgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgorCQkgIGVsc2UKKwkJICAgIGRyb3BwZWRkZXBzPXllcworCQkgICAgZWNobworCQkgICAgJEVDSE8gIioqKiBXYXJuaW5nOiBkeW5hbWljIGxpbmtlciBkb2VzIG5vdCBhY2NlcHQgbmVlZGVkIGxpYnJhcnkgJGkuIgorCQkgICAgZWNobyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKKwkJICAgIGVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCisJCSAgICBlY2hvICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIEkgYmVsaWV2ZSB5b3UgZG8gbm90IGhhdmUiCisJCSAgICBlY2hvICIqKiogYmVjYXVzZSBhIHRlc3RfY29tcGlsZSBkaWQgcmV2ZWFsIHRoYXQgdGhlIGxpbmtlciBkaWQgbm90IHVzZSBpdCBmb3IiCisJCSAgICBlY2hvICIqKiogaXRzIGR5bmFtaWMgZGVwZW5kZW5jeSBsaXN0IHRoYXQgcHJvZ3JhbXMgZ2V0IHJlc29sdmVkIHdpdGggYXQgcnVudGltZS4iCisJCSAgZmkKKwkJZmkKKwkJOzsKKwkgICAgICAqKQorCQlmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGkiCisJCTs7CisJICAgICAgZXNhYworCSAgICBkb25lCisJICBlbHNlCisJICAgICMgRXJyb3Igb2NjdXJyZWQgaW4gdGhlIGZpcnN0IGNvbXBpbGUuICBMZXQncyB0cnkgdG8gc2FsdmFnZQorCSAgICAjIHRoZSBzaXR1YXRpb246IENvbXBpbGUgYSBzZXBhcmF0ZSBwcm9ncmFtIGZvciBlYWNoIGxpYnJhcnkuCisJICAgIGZvciBpIGluICRkZXBsaWJzOyBkbworCSAgICAgIGNhc2UgJGkgaW4KKwkgICAgICAtbCopCisJCWZ1bmNfc3RyaXBuYW1lIC1sICcnICIkaSIKKwkJbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJCSRvcHRfZHJ5X3J1biB8fCAkUk0gY29uZnRlc3QKKwkJaWYgJExUQ0MgJExUQ0ZMQUdTIC1vIGNvbmZ0ZXN0IGNvbmZ0ZXN0LmMgJGk7IHRoZW4KKwkJICBsZGRfb3V0cHV0PWBsZGQgY29uZnRlc3RgCisJCSAgaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgorCQkgICAgY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAiIGluCisJCSAgICAqIiAkaSAiKikKKwkJICAgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgorCQkgICAgICBpPSIiCisJCSAgICAgIDs7CisJCSAgICBlc2FjCisJCSAgZmkKKwkJICBpZiB0ZXN0IC1uICIkaSIgOyB0aGVuCisJCSAgICBsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKKwkJICAgIGRlcGxpYl9tYXRjaGVzPWBldmFsICJcXCRFQ0hPIFwiJGxpYnJhcnlfbmFtZXNfc3BlY1wiImAKKwkJICAgIHNldCBkdW1teSAkZGVwbGliX21hdGNoZXM7IHNoaWZ0CisJCSAgICBkZXBsaWJfbWF0Y2g9JDEKKwkJICAgIGlmIHRlc3QgYGV4cHIgIiRsZGRfb3V0cHV0IiA6ICIuKiRkZXBsaWJfbWF0Y2giYCAtbmUgMCA7IHRoZW4KKwkJICAgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgorCQkgICAgZWxzZQorCQkgICAgICBkcm9wcGVkZGVwcz15ZXMKKwkJICAgICAgZWNobworCQkgICAgICAkRUNITyAiKioqIFdhcm5pbmc6IGR5bmFtaWMgbGlua2VyIGRvZXMgbm90IGFjY2VwdCBuZWVkZWQgbGlicmFyeSAkaS4iCisJCSAgICAgIGVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisJCSAgICAgIGVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCisJCSAgICAgIGVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKKwkJICAgICAgZWNobyAiKioqIGJlY2F1c2UgYSB0ZXN0X2NvbXBpbGUgZGlkIHJldmVhbCB0aGF0IHRoZSBsaW5rZXIgZGlkIG5vdCB1c2UgdGhpcyBvbmUiCisJCSAgICAgIGVjaG8gIioqKiBhcyBhIGR5bmFtaWMgZGVwZW5kZW5jeSB0aGF0IHByb2dyYW1zIGNhbiBnZXQgcmVzb2x2ZWQgd2l0aCBhdCBydW50aW1lLiIKKwkJICAgIGZpCisJCSAgZmkKKwkJZWxzZQorCQkgIGRyb3BwZWRkZXBzPXllcworCQkgIGVjaG8KKwkJICAkRUNITyAiKioqIFdhcm5pbmchICBMaWJyYXJ5ICRpIGlzIG5lZWRlZCBieSB0aGlzIGxpYnJhcnkgYnV0IEkgd2FzIG5vdCBhYmxlIHRvIgorCQkgIGVjaG8gIioqKiBtYWtlIGl0IGxpbmsgaW4hICBZb3Ugd2lsbCBwcm9iYWJseSBuZWVkIHRvIGluc3RhbGwgaXQgb3Igc29tZSIKKwkJICBlY2hvICIqKiogbGlicmFyeSB0aGF0IGl0IGRlcGVuZHMgb24gYmVmb3JlIHRoaXMgbGlicmFyeSB3aWxsIGJlIGZ1bGx5IgorCQkgIGVjaG8gIioqKiBmdW5jdGlvbmFsLiAgSW5zdGFsbGluZyBpdCBiZWZvcmUgY29udGludWluZyB3b3VsZCBiZSBldmVuIGJldHRlci4iCisJCWZpCisJCTs7CisJICAgICAgKikKKwkJZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgorCQk7OworCSAgICAgIGVzYWMKKwkgICAgZG9uZQorCSAgZmkKKwkgIDs7CisJZmlsZV9tYWdpYyopCisJICBzZXQgZHVtbXkgJGRlcGxpYnNfY2hlY2tfbWV0aG9kOyBzaGlmdAorCSAgZmlsZV9tYWdpY19yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICIkMSBcKC4qXCkiYAorCSAgZm9yIGFfZGVwbGliIGluICRkZXBsaWJzOyBkbworCSAgICBjYXNlICRhX2RlcGxpYiBpbgorCSAgICAtbCopCisJICAgICAgZnVuY19zdHJpcG5hbWUgLWwgJycgIiRhX2RlcGxpYiIKKwkgICAgICBuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgICAgICBpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCisJCWNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgorCQkqIiAkYV9kZXBsaWIgIiopCisJCSAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRhX2RlcGxpYiIKKwkJICBhX2RlcGxpYj0iIgorCQkgIDs7CisJCWVzYWMKKwkgICAgICBmaQorCSAgICAgIGlmIHRlc3QgLW4gIiRhX2RlcGxpYiIgOyB0aGVuCisJCWxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAorCQlpZiB0ZXN0IC1uICIkZmlsZV9tYWdpY19nbG9iIjsgdGhlbgorCQkgIGxpYm5hbWVnbG9iPWBmdW5jX2VjaG9fYWxsICIkbGlibmFtZSIgfCAkU0VEIC1lICRmaWxlX21hZ2ljX2dsb2JgCisJCWVsc2UKKwkJICBsaWJuYW1lZ2xvYj0kbGlibmFtZQorCQlmaQorCQl0ZXN0ICIkd2FudF9ub2Nhc2VnbG9iIiA9IHllcyAmJiBub2Nhc2VnbG9iPWBzaG9wdCAtcCBub2Nhc2VnbG9iYAorCQlmb3IgaSBpbiAkbGliX3NlYXJjaF9wYXRoICRzeXNfbGliX3NlYXJjaF9wYXRoICRzaGxpYl9zZWFyY2hfcGF0aDsgZG8KKwkJICBpZiB0ZXN0ICIkd2FudF9ub2Nhc2VnbG9iIiA9IHllczsgdGhlbgorCQkgICAgc2hvcHQgLXMgbm9jYXNlZ2xvYgorCQkgICAgcG90ZW50aWFsX2xpYnM9YGxzICRpLyRsaWJuYW1lZ2xvYlsuLV0qIDI+L2Rldi9udWxsYAorCQkgICAgJG5vY2FzZWdsb2IKKwkJICBlbHNlCisJCSAgICBwb3RlbnRpYWxfbGlicz1gbHMgJGkvJGxpYm5hbWVnbG9iWy4tXSogMj4vZGV2L251bGxgCisJCSAgZmkKKwkJICBmb3IgcG90ZW50X2xpYiBpbiAkcG90ZW50aWFsX2xpYnM7IGRvCisJCSAgICAgICMgRm9sbG93IHNvZnQgbGlua3MuCisJCSAgICAgIGlmIGxzIC1sTGQgIiRwb3RlbnRfbGliIiAyPi9kZXYvbnVsbCB8CisJCQkgJEdSRVAgIiAtPiAiID4vZGV2L251bGw7IHRoZW4KKwkJCWNvbnRpbnVlCisJCSAgICAgIGZpCisJCSAgICAgICMgVGhlIHN0YXRlbWVudCBhYm92ZSB0cmllcyB0byBhdm9pZCBlbnRlcmluZyBhbgorCQkgICAgICAjIGVuZGxlc3MgbG9vcCBiZWxvdywgaW4gY2FzZSBvZiBjeWNsaWMgbGlua3MuCisJCSAgICAgICMgV2UgbWlnaHQgc3RpbGwgZW50ZXIgYW4gZW5kbGVzcyBsb29wLCBzaW5jZSBhIGxpbmsKKwkJICAgICAgIyBsb29wIGNhbiBiZSBjbG9zZWQgd2hpbGUgd2UgZm9sbG93IGxpbmtzLAorCQkgICAgICAjIGJ1dCBzbyB3aGF0PworCQkgICAgICBwb3RsaWI9IiRwb3RlbnRfbGliIgorCQkgICAgICB3aGlsZSB0ZXN0IC1oICIkcG90bGliIiAyPi9kZXYvbnVsbDsgZG8KKwkJCXBvdGxpYmxpbms9YGxzIC1sZCAkcG90bGliIHwgJHtTRUR9ICdzLy4qIC0+IC8vJ2AKKwkJCWNhc2UgJHBvdGxpYmxpbmsgaW4KKwkJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgcG90bGliPSIkcG90bGlibGluayI7OworCQkJKikgcG90bGliPWAkRUNITyAiJHBvdGxpYiIgfCAkU0VEICdzLFteL10qJCwsJ2AiJHBvdGxpYmxpbmsiOzsKKwkJCWVzYWMKKwkJICAgICAgZG9uZQorCQkgICAgICBpZiBldmFsICRmaWxlX21hZ2ljX2NtZCBcIlwkcG90bGliXCIgMj4vZGV2L251bGwgfAorCQkJICRTRUQgLWUgMTBxIHwKKwkJCSAkRUdSRVAgIiRmaWxlX21hZ2ljX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgorCQkJZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRhX2RlcGxpYiIKKwkJCWFfZGVwbGliPSIiCisJCQlicmVhayAyCisJCSAgICAgIGZpCisJCSAgZG9uZQorCQlkb25lCisJICAgICAgZmkKKwkgICAgICBpZiB0ZXN0IC1uICIkYV9kZXBsaWIiIDsgdGhlbgorCQlkcm9wcGVkZGVwcz15ZXMKKwkJZWNobworCQkkRUNITyAiKioqIFdhcm5pbmc6IGxpbmtlciBwYXRoIGRvZXMgbm90IGhhdmUgcmVhbCBmaWxlIGZvciBsaWJyYXJ5ICRhX2RlcGxpYi4iCisJCWVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisJCWVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCisJCWVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKKwkJZWNobyAiKioqIGJlY2F1c2UgSSBkaWQgY2hlY2sgdGhlIGxpbmtlciBwYXRoIGxvb2tpbmcgZm9yIGEgZmlsZSBzdGFydGluZyIKKwkJaWYgdGVzdCAteiAiJHBvdGxpYiIgOyB0aGVuCisJCSAgJEVDSE8gIioqKiB3aXRoICRsaWJuYW1lIGJ1dCBubyBjYW5kaWRhdGVzIHdlcmUgZm91bmQuICguLi5mb3IgZmlsZSBtYWdpYyB0ZXN0KSIKKwkJZWxzZQorCQkgICRFQ0hPICIqKiogd2l0aCAkbGlibmFtZSBhbmQgbm9uZSBvZiB0aGUgY2FuZGlkYXRlcyBwYXNzZWQgYSBmaWxlIGZvcm1hdCB0ZXN0IgorCQkgICRFQ0hPICIqKiogdXNpbmcgYSBmaWxlIG1hZ2ljLiBMYXN0IGZpbGUgY2hlY2tlZDogJHBvdGxpYiIKKwkJZmkKKwkgICAgICBmaQorCSAgICAgIDs7CisJICAgICopCisJICAgICAgIyBBZGQgYSAtTCBhcmd1bWVudC4KKwkgICAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgorCSAgICAgIDs7CisJICAgIGVzYWMKKwkgIGRvbmUgIyBHb25lIHRocm91Z2ggYWxsIGRlcGxpYnMuCisJICA7OworCW1hdGNoX3BhdHRlcm4qKQorCSAgc2V0IGR1bW15ICRkZXBsaWJzX2NoZWNrX21ldGhvZDsgc2hpZnQKKwkgIG1hdGNoX3BhdHRlcm5fcmVnZXg9YGV4cHIgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgOiAiJDEgXCguKlwpImAKKwkgIGZvciBhX2RlcGxpYiBpbiAkZGVwbGliczsgZG8KKwkgICAgY2FzZSAkYV9kZXBsaWIgaW4KKwkgICAgLWwqKQorCSAgICAgIGZ1bmNfc3RyaXBuYW1lIC1sICcnICIkYV9kZXBsaWIiCisJICAgICAgbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICAgICAgaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgorCQljYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KKwkJKiIgJGFfZGVwbGliICIqKQorCQkgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkYV9kZXBsaWIiCisJCSAgYV9kZXBsaWI9IiIKKwkJICA7OworCQllc2FjCisJICAgICAgZmkKKwkgICAgICBpZiB0ZXN0IC1uICIkYV9kZXBsaWIiIDsgdGhlbgorCQlsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKKwkJZm9yIGkgaW4gJGxpYl9zZWFyY2hfcGF0aCAkc3lzX2xpYl9zZWFyY2hfcGF0aCAkc2hsaWJfc2VhcmNoX3BhdGg7IGRvCisJCSAgcG90ZW50aWFsX2xpYnM9YGxzICRpLyRsaWJuYW1lWy4tXSogMj4vZGV2L251bGxgCisJCSAgZm9yIHBvdGVudF9saWIgaW4gJHBvdGVudGlhbF9saWJzOyBkbworCQkgICAgcG90bGliPSIkcG90ZW50X2xpYiIgIyBzZWUgc3ltbGluay1jaGVjayBhYm92ZSBpbiBmaWxlX21hZ2ljIHRlc3QKKwkJICAgIGlmIGV2YWwgIlwkRUNITyBcIiRwb3RlbnRfbGliXCIiIDI+L2Rldi9udWxsIHwgJFNFRCAxMHEgfCBcCisJCSAgICAgICAkRUdSRVAgIiRtYXRjaF9wYXR0ZXJuX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgorCQkgICAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgorCQkgICAgICBhX2RlcGxpYj0iIgorCQkgICAgICBicmVhayAyCisJCSAgICBmaQorCQkgIGRvbmUKKwkJZG9uZQorCSAgICAgIGZpCisJICAgICAgaWYgdGVzdCAtbiAiJGFfZGVwbGliIiA7IHRoZW4KKwkJZHJvcHBlZGRlcHM9eWVzCisJCWVjaG8KKwkJJEVDSE8gIioqKiBXYXJuaW5nOiBsaW5rZXIgcGF0aCBkb2VzIG5vdCBoYXZlIHJlYWwgZmlsZSBmb3IgbGlicmFyeSAkYV9kZXBsaWIuIgorCQllY2hvICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgorCQllY2hvICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgorCQllY2hvICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUiCisJCWVjaG8gIioqKiBiZWNhdXNlIEkgZGlkIGNoZWNrIHRoZSBsaW5rZXIgcGF0aCBsb29raW5nIGZvciBhIGZpbGUgc3RhcnRpbmciCisJCWlmIHRlc3QgLXogIiRwb3RsaWIiIDsgdGhlbgorCQkgICRFQ0hPICIqKiogd2l0aCAkbGlibmFtZSBidXQgbm8gY2FuZGlkYXRlcyB3ZXJlIGZvdW5kLiAoLi4uZm9yIHJlZ2V4IHBhdHRlcm4gdGVzdCkiCisJCWVsc2UKKwkJICAkRUNITyAiKioqIHdpdGggJGxpYm5hbWUgYW5kIG5vbmUgb2YgdGhlIGNhbmRpZGF0ZXMgcGFzc2VkIGEgZmlsZSBmb3JtYXQgdGVzdCIKKwkJICAkRUNITyAiKioqIHVzaW5nIGEgcmVnZXggcGF0dGVybi4gTGFzdCBmaWxlIGNoZWNrZWQ6ICRwb3RsaWIiCisJCWZpCisJICAgICAgZmkKKwkgICAgICA7OworCSAgICAqKQorCSAgICAgICMgQWRkIGEgLUwgYXJndW1lbnQuCisJICAgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRhX2RlcGxpYiIKKwkgICAgICA7OworCSAgICBlc2FjCisJICBkb25lICMgR29uZSB0aHJvdWdoIGFsbCBkZXBsaWJzLgorCSAgOzsKKwlub25lIHwgdW5rbm93biB8ICopCisJICBuZXdkZXBsaWJzPSIiCisJICB0bXBfZGVwbGlicz1gJEVDSE8gIiAkZGVwbGlicyIgfCAkU0VEICdzLyAtbGMkLy87IHMvIC1bTFJdW14gXSovL2cnYAorCSAgaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgorCSAgICBmb3IgaSBpbiAkcHJlZGVwcyAkcG9zdGRlcHMgOyBkbworCSAgICAgICMgY2FuJ3QgdXNlIFhzZWQgYmVsb3csIGJlY2F1c2UgJGkgbWlnaHQgY29udGFpbiAnLycKKwkgICAgICB0bXBfZGVwbGlicz1gJEVDSE8gIiAkdG1wX2RlcGxpYnMiIHwgJFNFRCAicywkaSwsImAKKwkgICAgZG9uZQorCSAgZmkKKwkgIGNhc2UgJHRtcF9kZXBsaWJzIGluCisJICAqWyFcCVwgXSopCisJICAgIGVjaG8KKwkgICAgaWYgdGVzdCAiWCRkZXBsaWJzX2NoZWNrX21ldGhvZCIgPSAiWG5vbmUiOyB0aGVuCisJICAgICAgZWNobyAiKioqIFdhcm5pbmc6IGludGVyLWxpYnJhcnkgZGVwZW5kZW5jaWVzIGFyZSBub3Qgc3VwcG9ydGVkIGluIHRoaXMgcGxhdGZvcm0uIgorCSAgICBlbHNlCisJICAgICAgZWNobyAiKioqIFdhcm5pbmc6IGludGVyLWxpYnJhcnkgZGVwZW5kZW5jaWVzIGFyZSBub3Qga25vd24gdG8gYmUgc3VwcG9ydGVkLiIKKwkgICAgZmkKKwkgICAgZWNobyAiKioqIEFsbCBkZWNsYXJlZCBpbnRlci1saWJyYXJ5IGRlcGVuZGVuY2llcyBhcmUgYmVpbmcgZHJvcHBlZC4iCisJICAgIGRyb3BwZWRkZXBzPXllcworCSAgICA7OworCSAgZXNhYworCSAgOzsKKwllc2FjCisJdmVyc3VmZml4PSR2ZXJzdWZmaXhfc2F2ZQorCW1ham9yPSRtYWpvcl9zYXZlCisJcmVsZWFzZT0kcmVsZWFzZV9zYXZlCisJbGlibmFtZT0kbGlibmFtZV9zYXZlCisJbmFtZT0kbmFtZV9zYXZlCisKKwljYXNlICRob3N0IGluCisJKi0qLXJoYXBzb2R5KiB8ICotKi1kYXJ3aW4xLlswMTJdKQorCSAgIyBPbiBSaGFwc29keSByZXBsYWNlIHRoZSBDIGxpYnJhcnkgd2l0aCB0aGUgU3lzdGVtIGZyYW1ld29yaworCSAgbmV3ZGVwbGlicz1gJEVDSE8gIiAkbmV3ZGVwbGlicyIgfCAkU0VEICdzLyAtbGMgLyBTeXN0ZW0ubHRmcmFtZXdvcmsgLydgCisJICA7OworCWVzYWMKKworCWlmIHRlc3QgIiRkcm9wcGVkZGVwcyIgPSB5ZXM7IHRoZW4KKwkgIGlmIHRlc3QgIiRtb2R1bGUiID0geWVzOyB0aGVuCisJICAgIGVjaG8KKwkgICAgZWNobyAiKioqIFdhcm5pbmc6IGxpYnRvb2wgY291bGQgbm90IHNhdGlzZnkgYWxsIGRlY2xhcmVkIGludGVyLWxpYnJhcnkiCisJICAgICRFQ0hPICIqKiogZGVwZW5kZW5jaWVzIG9mIG1vZHVsZSAkbGlibmFtZS4gIFRoZXJlZm9yZSwgbGlidG9vbCB3aWxsIGNyZWF0ZSIKKwkgICAgZWNobyAiKioqIGEgc3RhdGljIG1vZHVsZSwgdGhhdCBzaG91bGQgd29yayBhcyBsb25nIGFzIHRoZSBkbG9wZW5pbmciCisJICAgIGVjaG8gIioqKiBhcHBsaWNhdGlvbiBpcyBsaW5rZWQgd2l0aCB0aGUgLWRsb3BlbiBmbGFnLiIKKwkgICAgaWYgdGVzdCAteiAiJGdsb2JhbF9zeW1ib2xfcGlwZSI7IHRoZW4KKwkgICAgICBlY2hvCisJICAgICAgZWNobyAiKioqIEhvd2V2ZXIsIHRoaXMgd291bGQgb25seSB3b3JrIGlmIGxpYnRvb2wgd2FzIGFibGUgdG8gZXh0cmFjdCBzeW1ib2wiCisJICAgICAgZWNobyAiKioqIGxpc3RzIGZyb20gYSBwcm9ncmFtLCB1c2luZyBcYG5tJyBvciBlcXVpdmFsZW50LCBidXQgbGlidG9vbCBjb3VsZCIKKwkgICAgICBlY2hvICIqKiogbm90IGZpbmQgc3VjaCBhIHByb2dyYW0uICBTbywgdGhpcyBtb2R1bGUgaXMgcHJvYmFibHkgdXNlbGVzcy4iCisJICAgICAgZWNobyAiKioqIFxgbm0nIGZyb20gR05VIGJpbnV0aWxzIGFuZCBhIGZ1bGwgcmVidWlsZCBtYXkgaGVscC4iCisJICAgIGZpCisJICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSBubzsgdGhlbgorCSAgICAgIG9sZGxpYnM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiRsaWJleHQiCisJICAgICAgYnVpbGRfbGlidG9vbF9saWJzPW1vZHVsZQorCSAgICAgIGJ1aWxkX29sZF9saWJzPXllcworCSAgICBlbHNlCisJICAgICAgYnVpbGRfbGlidG9vbF9saWJzPW5vCisJICAgIGZpCisJICBlbHNlCisJICAgIGVjaG8gIioqKiBUaGUgaW50ZXItbGlicmFyeSBkZXBlbmRlbmNpZXMgdGhhdCBoYXZlIGJlZW4gZHJvcHBlZCBoZXJlIHdpbGwgYmUiCisJICAgIGVjaG8gIioqKiBhdXRvbWF0aWNhbGx5IGFkZGVkIHdoZW5ldmVyIGEgcHJvZ3JhbSBpcyBsaW5rZWQgd2l0aCB0aGlzIGxpYnJhcnkiCisJICAgIGVjaG8gIioqKiBvciBpcyBkZWNsYXJlZCB0byAtZGxvcGVuIGl0LiIKKworCSAgICBpZiB0ZXN0ICIkYWxsb3dfdW5kZWZpbmVkIiA9IG5vOyB0aGVuCisJICAgICAgZWNobworCSAgICAgIGVjaG8gIioqKiBTaW5jZSB0aGlzIGxpYnJhcnkgbXVzdCBub3QgY29udGFpbiB1bmRlZmluZWQgc3ltYm9scywiCisJICAgICAgZWNobyAiKioqIGJlY2F1c2UgZWl0aGVyIHRoZSBwbGF0Zm9ybSBkb2VzIG5vdCBzdXBwb3J0IHRoZW0gb3IiCisJICAgICAgZWNobyAiKioqIGl0IHdhcyBleHBsaWNpdGx5IHJlcXVlc3RlZCB3aXRoIC1uby11bmRlZmluZWQsIgorCSAgICAgIGVjaG8gIioqKiBsaWJ0b29sIHdpbGwgb25seSBjcmVhdGUgYSBzdGF0aWMgdmVyc2lvbiBvZiBpdC4iCisJICAgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IG5vOyB0aGVuCisJCW9sZGxpYnM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiRsaWJleHQiCisJCWJ1aWxkX2xpYnRvb2xfbGlicz1tb2R1bGUKKwkJYnVpbGRfb2xkX2xpYnM9eWVzCisJICAgICAgZWxzZQorCQlidWlsZF9saWJ0b29sX2xpYnM9bm8KKwkgICAgICBmaQorCSAgICBmaQorCSAgZmkKKwlmaQorCSMgRG9uZSBjaGVja2luZyBkZXBsaWJzIQorCWRlcGxpYnM9JG5ld2RlcGxpYnMKKyAgICAgIGZpCisgICAgICAjIFRpbWUgdG8gY2hhbmdlIGFsbCBvdXIgImZvby5sdGZyYW1ld29yayIgc3R1ZmYgYmFjayB0byAiLWZyYW1ld29yayBmb28iCisgICAgICBjYXNlICRob3N0IGluCisJKi0qLWRhcndpbiopCisJICBuZXdkZXBsaWJzPWAkRUNITyAiICRuZXdkZXBsaWJzIiB8ICRTRUQgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCisJICBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncz1gJEVDSE8gIiAkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MiIHwgJFNFRCAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKKwkgIGRlcGxpYnM9YCRFQ0hPICIgJGRlcGxpYnMiIHwgJFNFRCAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKKwkgIDs7CisgICAgICBlc2FjCisKKyAgICAgICMgbW92ZSBsaWJyYXJ5IHNlYXJjaCBwYXRocyB0aGF0IGNvaW5jaWRlIHdpdGggcGF0aHMgdG8gbm90IHlldAorICAgICAgIyBpbnN0YWxsZWQgbGlicmFyaWVzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpYnJhcnkgc2VhcmNoIGxpc3QKKyAgICAgIG5ld19saWJzPQorICAgICAgZm9yIHBhdGggaW4gJG5vdGluc3RfcGF0aDsgZG8KKwljYXNlICIgJG5ld19saWJzICIgaW4KKwkqIiAtTCRwYXRoLyRvYmpkaXIgIiopIDs7CisJKikKKwkgIGNhc2UgIiAkZGVwbGlicyAiIGluCisJICAqIiAtTCRwYXRoLyRvYmpkaXIgIiopCisJICAgIGZ1bmNfYXBwZW5kIG5ld19saWJzICIgLUwkcGF0aC8kb2JqZGlyIiA7OworCSAgZXNhYworCSAgOzsKKwllc2FjCisgICAgICBkb25lCisgICAgICBmb3IgZGVwbGliIGluICRkZXBsaWJzOyBkbworCWNhc2UgJGRlcGxpYiBpbgorCS1MKikKKwkgIGNhc2UgIiAkbmV3X2xpYnMgIiBpbgorCSAgKiIgJGRlcGxpYiAiKikgOzsKKwkgICopIGZ1bmNfYXBwZW5kIG5ld19saWJzICIgJGRlcGxpYiIgOzsKKwkgIGVzYWMKKwkgIDs7CisJKikgZnVuY19hcHBlbmQgbmV3X2xpYnMgIiAkZGVwbGliIiA7OworCWVzYWMKKyAgICAgIGRvbmUKKyAgICAgIGRlcGxpYnM9IiRuZXdfbGlicyIKKworICAgICAgIyBBbGwgdGhlIGxpYnJhcnktc3BlY2lmaWMgdmFyaWFibGVzIChpbnN0YWxsX2xpYmRpciBpcyBzZXQgYWJvdmUpLgorICAgICAgbGlicmFyeV9uYW1lcz0KKyAgICAgIG9sZF9saWJyYXJ5PQorICAgICAgZGxuYW1lPQorCisgICAgICAjIFRlc3QgYWdhaW4sIHdlIG1heSBoYXZlIGRlY2lkZWQgbm90IHRvIGJ1aWxkIGl0IGFueSBtb3JlCisgICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgorCSMgUmVtb3ZlICR7d2x9IGluc3RhbmNlcyB3aGVuIGxpbmtpbmcgd2l0aCBsZC4KKwkjIEZJWE1FOiBzaG91bGQgdGVzdCB0aGUgcmlnaHQgX2NtZHMgdmFyaWFibGUuCisJY2FzZSAkYXJjaGl2ZV9jbWRzIGluCisJICAqXCRMRFwgKikgd2w9IDs7CisgICAgICAgIGVzYWMKKwlpZiB0ZXN0ICIkaGFyZGNvZGVfaW50b19saWJzIiA9IHllczsgdGhlbgorCSAgIyBIYXJkY29kZSB0aGUgbGlicmFyeSBwYXRocworCSAgaGFyZGNvZGVfbGliZGlycz0KKwkgIGRlcF9ycGF0aD0KKwkgIHJwYXRoPSIkZmluYWxpemVfcnBhdGgiCisJICB0ZXN0ICIkb3B0X21vZGUiICE9IHJlbGluayAmJiBycGF0aD0iJGNvbXBpbGVfcnBhdGgkcnBhdGgiCisJICBmb3IgbGliZGlyIGluICRycGF0aDsgZG8KKwkgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiOyB0aGVuCisJICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisJCWZ1bmNfcmVwbGFjZV9zeXNyb290ICIkbGliZGlyIgorCQlsaWJkaXI9JGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdAorCQlpZiB0ZXN0IC16ICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKwkJICBoYXJkY29kZV9saWJkaXJzPSIkbGliZGlyIgorCQllbHNlCisJCSAgIyBKdXN0IGFjY3VtdWxhdGUgdGhlIHVuaXF1ZSBsaWJkaXJzLgorCQkgIGNhc2UgJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkaGFyZGNvZGVfbGliZGlycyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIGluCisJCSAgKiIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIqKQorCQkgICAgOzsKKwkJICAqKQorCQkgICAgZnVuY19hcHBlbmQgaGFyZGNvZGVfbGliZGlycyAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyIgorCQkgICAgOzsKKwkJICBlc2FjCisJCWZpCisJICAgICAgZWxzZQorCQlldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisJCWZ1bmNfYXBwZW5kIGRlcF9ycGF0aCAiICRmbGFnIgorCSAgICAgIGZpCisJICAgIGVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorCSAgICAgIGNhc2UgIiRwZXJtX3JwYXRoICIgaW4KKwkgICAgICAqIiAkbGliZGlyICIqKSA7OworCSAgICAgICopIGZ1bmNfYXBwZW5kIHBlcm1fcnBhdGggIiAkbGliZGlyIiA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgIGRvbmUKKwkgICMgU3Vic3RpdHV0ZSB0aGUgaGFyZGNvZGVkIGxpYmRpcnMgaW50byB0aGUgcnBhdGguCisJICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIgJiYKKwkgICAgIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorCSAgICBsaWJkaXI9IiRoYXJkY29kZV9saWJkaXJzIgorCSAgICBldmFsICJkZXBfcnBhdGg9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiIgorCSAgZmkKKwkgIGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciIgJiYgdGVzdCAtbiAiJHBlcm1fcnBhdGgiOyB0aGVuCisJICAgICMgV2Ugc2hvdWxkIHNldCB0aGUgcnVucGF0aF92YXIuCisJICAgIHJwYXRoPQorCSAgICBmb3IgZGlyIGluICRwZXJtX3JwYXRoOyBkbworCSAgICAgIGZ1bmNfYXBwZW5kIHJwYXRoICIkZGlyOiIKKwkgICAgZG9uZQorCSAgICBldmFsICIkcnVucGF0aF92YXI9JyRycGF0aFwkJHJ1bnBhdGhfdmFyJzsgZXhwb3J0ICRydW5wYXRoX3ZhciIKKwkgIGZpCisJICB0ZXN0IC1uICIkZGVwX3JwYXRoIiAmJiBkZXBsaWJzPSIkZGVwX3JwYXRoICRkZXBsaWJzIgorCWZpCisKKwlzaGxpYnBhdGg9IiRmaW5hbGl6ZV9zaGxpYnBhdGgiCisJdGVzdCAiJG9wdF9tb2RlIiAhPSByZWxpbmsgJiYgc2hsaWJwYXRoPSIkY29tcGlsZV9zaGxpYnBhdGgkc2hsaWJwYXRoIgorCWlmIHRlc3QgLW4gIiRzaGxpYnBhdGgiOyB0aGVuCisJICBldmFsICIkc2hsaWJwYXRoX3Zhcj0nJHNobGlicGF0aFwkJHNobGlicGF0aF92YXInOyBleHBvcnQgJHNobGlicGF0aF92YXIiCisJZmkKKworCSMgR2V0IHRoZSByZWFsIGFuZCBsaW5rIG5hbWVzIG9mIHRoZSBsaWJyYXJ5LgorCWV2YWwgc2hhcmVkX2V4dD1cIiRzaHJleHRfY21kc1wiCisJZXZhbCBsaWJyYXJ5X25hbWVzPVwiJGxpYnJhcnlfbmFtZXNfc3BlY1wiCisJc2V0IGR1bW15ICRsaWJyYXJ5X25hbWVzCisJc2hpZnQKKwlyZWFsbmFtZT0iJDEiCisJc2hpZnQKKworCWlmIHRlc3QgLW4gIiRzb25hbWVfc3BlYyI7IHRoZW4KKwkgIGV2YWwgc29uYW1lPVwiJHNvbmFtZV9zcGVjXCIKKwllbHNlCisJICBzb25hbWU9IiRyZWFsbmFtZSIKKwlmaQorCWlmIHRlc3QgLXogIiRkbG5hbWUiOyB0aGVuCisJICBkbG5hbWU9JHNvbmFtZQorCWZpCisKKwlsaWI9IiRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZSIKKwlsaW5rbmFtZXM9CisJZm9yIGxpbmsKKwlkbworCSAgZnVuY19hcHBlbmQgbGlua25hbWVzICIgJGxpbmsiCisJZG9uZQorCisJIyBVc2Ugc3RhbmRhcmQgb2JqZWN0cyBpZiB0aGV5IGFyZSBwaWMKKwl0ZXN0IC16ICIkcGljX2ZsYWciICYmIGxpYm9ianM9YCRFQ0hPICIkbGlib2JqcyIgfCAkU1AyTkwgfCAkU0VEICIkbG8ybyIgfCAkTkwyU1BgCisJdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KKworCWRlbGZpbGVzPQorCWlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGluY2x1ZGVfZXhwc3ltcyI7IHRoZW4KKwkgICRvcHRfZHJ5X3J1biB8fCBjcCAiJGV4cG9ydF9zeW1ib2xzIiAiJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudWV4cCIKKwkgIGV4cG9ydF9zeW1ib2xzPSIkb3V0cHV0X29iamRpci8kbGlibmFtZS51ZXhwIgorCSAgZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkZXhwb3J0X3N5bWJvbHMiCisJZmkKKworCW9yaWdfZXhwb3J0X3N5bWJvbHM9CisJY2FzZSAkaG9zdF9vcyBpbgorCWN5Z3dpbiogfCBtaW5ndyogfCBjZWdjYyopCisJICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLXogIiRleHBvcnRfc3ltYm9sc19yZWdleCI7IHRoZW4KKwkgICAgIyBleHBvcnRpbmcgdXNpbmcgdXNlciBzdXBwbGllZCBzeW1maWxlCisJICAgIGlmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiAhPSB4RVhQT1JUUzsgdGhlbgorCSAgICAgICMgYW5kIGl0J3MgTk9UIGFscmVhZHkgYSAuZGVmIGZpbGUuIE11c3QgZmlndXJlIG91dAorCSAgICAgICMgd2hpY2ggb2YgdGhlIGdpdmVuIHN5bWJvbHMgYXJlIGRhdGEgc3ltYm9scyBhbmQgdGFnCisJICAgICAgIyB0aGVtIGFzIHN1Y2guIFNvLCB0cmlnZ2VyIHVzZSBvZiBleHBvcnRfc3ltYm9sc19jbWRzLgorCSAgICAgICMgZXhwb3J0X3N5bWJvbHMgZ2V0cyByZWFzc2lnbmVkIGluc2lkZSB0aGUgInByZXBhcmUKKwkgICAgICAjIHRoZSBsaXN0IG9mIGV4cG9ydGVkIHN5bWJvbHMiIGlmIHN0YXRlbWVudCwgc28gdGhlCisJICAgICAgIyBpbmNsdWRlX2V4cHN5bXMgbG9naWMgc3RpbGwgd29ya3MuCisJICAgICAgb3JpZ19leHBvcnRfc3ltYm9scz0iJGV4cG9ydF9zeW1ib2xzIgorCSAgICAgIGV4cG9ydF9zeW1ib2xzPQorCSAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKKwkgICAgZmkKKwkgIGZpCisJICA7OworCWVzYWMKKworCSMgUHJlcGFyZSB0aGUgbGlzdCBvZiBleHBvcnRlZCBzeW1ib2xzCisJaWYgdGVzdCAteiAiJGV4cG9ydF9zeW1ib2xzIjsgdGhlbgorCSAgaWYgdGVzdCAiJGFsd2F5c19leHBvcnRfc3ltYm9scyIgPSB5ZXMgfHwgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhlbgorCSAgICBmdW5jX3ZlcmJvc2UgImdlbmVyYXRpbmcgc3ltYm9sIGxpc3QgZm9yIFxgJGxpYm5hbWUubGEnIgorCSAgICBleHBvcnRfc3ltYm9scz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZXhwIgorCSAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICRleHBvcnRfc3ltYm9scworCSAgICBjbWRzPSRleHBvcnRfc3ltYm9sc19jbWRzCisJICAgIHNhdmVfaWZzPSIkSUZTIjsgSUZTPSd+JworCSAgICBmb3IgY21kMSBpbiAkY21kczsgZG8KKwkgICAgICBJRlM9IiRzYXZlX2lmcyIKKwkgICAgICAjIFRha2UgdGhlIG5vcm1hbCBicmFuY2ggaWYgdGhlIG5tX2ZpbGVfbGlzdF9zcGVjIGJyYW5jaAorCSAgICAgICMgZG9lc24ndCB3b3JrIG9yIGlmIHRvb2wgY29udmVyc2lvbiBpcyBub3QgbmVlZGVkLgorCSAgICAgIGNhc2UgJG5tX2ZpbGVfbGlzdF9zcGVjfiR0b190b29sX2ZpbGVfY21kIGluCisJCSp+ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcCB8ICp+ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIgfCB+KikKKwkJICB0cnlfbm9ybWFsX2JyYW5jaD15ZXMKKwkJICBldmFsIGNtZD1cIiRjbWQxXCIKKwkJICBmdW5jX2xlbiAiICRjbWQiCisJCSAgbGVuPSRmdW5jX2xlbl9yZXN1bHQKKwkJICA7OworCQkqKQorCQkgIHRyeV9ub3JtYWxfYnJhbmNoPW5vCisJCSAgOzsKKwkgICAgICBlc2FjCisJICAgICAgaWYgdGVzdCAiJHRyeV9ub3JtYWxfYnJhbmNoIiA9IHllcyBcCisJCSAmJiB7IHRlc3QgIiRsZW4iIC1sdCAiJG1heF9jbWRfbGVuIiBcCisJCSAgICAgIHx8IHRlc3QgIiRtYXhfY21kX2xlbiIgLWxlIC0xOyB9CisJICAgICAgdGhlbgorCQlmdW5jX3Nob3dfZXZhbCAiJGNtZCIgJ2V4aXQgJD8nCisJCXNraXBwZWRfZXhwb3J0PWZhbHNlCisJICAgICAgZWxpZiB0ZXN0IC1uICIkbm1fZmlsZV9saXN0X3NwZWMiOyB0aGVuCisJCWZ1bmNfYmFzZW5hbWUgIiRvdXRwdXQiCisJCW91dHB1dF9sYT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKwkJc2F2ZV9saWJvYmpzPSRsaWJvYmpzCisJCXNhdmVfb3V0cHV0PSRvdXRwdXQKKwkJb3V0cHV0PSR7b3V0cHV0X29iamRpcn0vJHtvdXRwdXRfbGF9Lm5tCisJCWZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0IgorCQlsaWJvYmpzPSRubV9maWxlX2xpc3Rfc3BlYyRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQKKwkJZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkb3V0cHV0IgorCQlmdW5jX3ZlcmJvc2UgImNyZWF0aW5nICROTSBpbnB1dCBmaWxlIGxpc3Q6ICRvdXRwdXQiCisJCWZvciBvYmogaW4gJHNhdmVfbGlib2JqczsgZG8KKwkJICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG9iaiIKKwkJICAkRUNITyAiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIKKwkJZG9uZSA+ICIkb3V0cHV0IgorCQlldmFsIGNtZD1cIiRjbWQxXCIKKwkJZnVuY19zaG93X2V2YWwgIiRjbWQiICdleGl0ICQ/JworCQlvdXRwdXQ9JHNhdmVfb3V0cHV0CisJCWxpYm9ianM9JHNhdmVfbGlib2JqcworCQlza2lwcGVkX2V4cG9ydD1mYWxzZQorCSAgICAgIGVsc2UKKwkJIyBUaGUgY29tbWFuZCBsaW5lIGlzIHRvbyBsb25nIHRvIGV4ZWN1dGUgaW4gb25lIHN0ZXAuCisJCWZ1bmNfdmVyYm9zZSAidXNpbmcgcmVsb2FkYWJsZSBvYmplY3QgZmlsZSBmb3IgZXhwb3J0IGxpc3QuLi4iCisJCXNraXBwZWRfZXhwb3J0PToKKwkJIyBCcmVhayBvdXQgZWFybHksIG90aGVyd2lzZSBza2lwcGVkX2V4cG9ydCBtYXkgYmUKKwkJIyBzZXQgdG8gZmFsc2UgYnkgYSBsYXRlciBidXQgc2hvcnRlciBjbWQuCisJCWJyZWFrCisJICAgICAgZmkKKwkgICAgZG9uZQorCSAgICBJRlM9IiRzYXZlX2lmcyIKKwkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAmJiB0ZXN0ICJYJHNraXBwZWRfZXhwb3J0IiAhPSAiWDoiOyB0aGVuCisJICAgICAgZnVuY19zaG93X2V2YWwgJyRFR1JFUCAtZSAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAiJGV4cG9ydF9zeW1ib2xzIiA+ICIke2V4cG9ydF9zeW1ib2xzfVQiJworCSAgICAgIGZ1bmNfc2hvd19ldmFsICckTVYgIiR7ZXhwb3J0X3N5bWJvbHN9VCIgIiRleHBvcnRfc3ltYm9scyInCisJICAgIGZpCisJICBmaQorCWZpCisKKwlpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRpbmNsdWRlX2V4cHN5bXMiOyB0aGVuCisJICB0bXBfZXhwb3J0X3N5bWJvbHM9IiRleHBvcnRfc3ltYm9scyIKKwkgIHRlc3QgLW4gIiRvcmlnX2V4cG9ydF9zeW1ib2xzIiAmJiB0bXBfZXhwb3J0X3N5bWJvbHM9IiRvcmlnX2V4cG9ydF9zeW1ib2xzIgorCSAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgJyRFQ0hPICIkaW5jbHVkZV9leHBzeW1zIiB8ICRTUDJOTCA+PiAiJHRtcF9leHBvcnRfc3ltYm9scyInCisJZmkKKworCWlmIHRlc3QgIlgkc2tpcHBlZF9leHBvcnQiICE9ICJYOiIgJiYgdGVzdCAtbiAiJG9yaWdfZXhwb3J0X3N5bWJvbHMiOyB0aGVuCisJICAjIFRoZSBnaXZlbiBleHBvcnRzX3N5bWJvbHMgZmlsZSBoYXMgdG8gYmUgZmlsdGVyZWQsIHNvIGZpbHRlciBpdC4KKwkgIGZ1bmNfdmVyYm9zZSAiZmlsdGVyIHN5bWJvbCBsaXN0IGZvciBcYCRsaWJuYW1lLmxhJyB0byB0YWcgREFUQSBleHBvcnRzIgorCSAgIyBGSVhNRTogJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIHBvdGVudGlhbGx5IGNvbnRhaW5zIGxvdHMgb2YKKwkgICMgJ3MnIGNvbW1hbmRzIHdoaWNoIG5vdCBhbGwgc2VkcyBjYW4gaGFuZGxlLiBHTlUgc2VkIHNob3VsZCBiZSBmaW5lCisJICAjIHRob3VnaC4gQWxzbywgdGhlIGZpbHRlciBzY2FsZXMgc3VwZXJsaW5lYXJseSB3aXRoIHRoZSBudW1iZXIgb2YKKwkgICMgZ2xvYmFsIHZhcmlhYmxlcy4gam9pbigxKSB3b3VsZCBiZSBuaWNlIGhlcmUsIGJ1dCB1bmZvcnR1bmF0ZWx5CisJICAjIGlzbid0IGEgYmxlc3NlZCB0b29sLgorCSAgJG9wdF9kcnlfcnVuIHx8ICRTRUQgLWUgJy9bICxdREFUQS8hZDtzLFwoLipcKVwoWyBcLF0uKlwpLHN8XlwxJHxcMVwyfCwnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyCisJICBmdW5jX2FwcGVuZCBkZWxmaWxlcyAiICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIiCisJICBleHBvcnRfc3ltYm9scz0kb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYKKwkgICRvcHRfZHJ5X3J1biB8fCAkU0VEIC1mICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciA8ICRvcmlnX2V4cG9ydF9zeW1ib2xzID4gJGV4cG9ydF9zeW1ib2xzCisJZmkKKworCXRtcF9kZXBsaWJzPQorCWZvciB0ZXN0X2RlcGxpYiBpbiAkZGVwbGliczsgZG8KKwkgIGNhc2UgIiAkY29udmVuaWVuY2UgIiBpbgorCSAgKiIgJHRlc3RfZGVwbGliICIqKSA7OworCSAgKikKKwkgICAgZnVuY19hcHBlbmQgdG1wX2RlcGxpYnMgIiAkdGVzdF9kZXBsaWIiCisJICAgIDs7CisJICBlc2FjCisJZG9uZQorCWRlcGxpYnM9IiR0bXBfZGVwbGlicyIKKworCWlmIHRlc3QgLW4gIiRjb252ZW5pZW5jZSI7IHRoZW4KKwkgIGlmIHRlc3QgLW4gIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyIgJiYKKwkgICAgdGVzdCAiJGNvbXBpbGVyX25lZWRzX29iamVjdCIgPSB5ZXMgJiYKKwkgICAgdGVzdCAteiAiJGxpYm9ianMiOyB0aGVuCisJICAgICMgZXh0cmFjdCB0aGUgYXJjaGl2ZXMsIHNvIHdlIGhhdmUgb2JqZWN0cyB0byBsaXN0LgorCSAgICAjIFRPRE86IGNvdWxkIG9wdGltaXplIHRoaXMgdG8ganVzdCBleHRyYWN0IG9uZSBhcmNoaXZlLgorCSAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0KKwkgIGZpCisJICBpZiB0ZXN0IC1uICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiOyB0aGVuCisJICAgIHNhdmVfbGlib2Jqcz0kbGlib2JqcworCSAgICBldmFsIGxpYm9ianM9XCJcJGxpYm9ianMgJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjXCIKKwkgICAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KKwkgIGVsc2UKKwkgICAgZ2VudG9wPSIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eCIKKwkgICAgZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKKworCSAgICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkY29udmVuaWVuY2UKKwkgICAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorCSAgICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQorCSAgZmkKKwlmaQorCisJaWYgdGVzdCAiJHRocmVhZF9zYWZlIiA9IHllcyAmJiB0ZXN0IC1uICIkdGhyZWFkX3NhZmVfZmxhZ19zcGVjIjsgdGhlbgorCSAgZXZhbCBmbGFnPVwiJHRocmVhZF9zYWZlX2ZsYWdfc3BlY1wiCisJICBmdW5jX2FwcGVuZCBsaW5rZXJfZmxhZ3MgIiAkZmxhZyIKKwlmaQorCisJIyBNYWtlIGEgYmFja3VwIG9mIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IHdoZW4gcmVsaW5raW5nCisJaWYgdGVzdCAiJG9wdF9tb2RlIiA9IHJlbGluazsgdGhlbgorCSAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgJyhjZCAkb3V0cHV0X29iamRpciAmJiAkUk0gJHtyZWFsbmFtZX1VICYmICRNViAkcmVhbG5hbWUgJHtyZWFsbmFtZX1VKScgfHwgZXhpdCAkPworCWZpCisKKwkjIERvIGVhY2ggb2YgdGhlIGFyY2hpdmUgY29tbWFuZHMuCisJaWYgdGVzdCAiJG1vZHVsZSIgPSB5ZXMgJiYgdGVzdCAtbiAiJG1vZHVsZV9jbWRzIiA7IHRoZW4KKwkgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJG1vZHVsZV9leHBzeW1fY21kcyI7IHRoZW4KKwkgICAgZXZhbCB0ZXN0X2NtZHM9XCIkbW9kdWxlX2V4cHN5bV9jbWRzXCIKKwkgICAgY21kcz0kbW9kdWxlX2V4cHN5bV9jbWRzCisJICBlbHNlCisJICAgIGV2YWwgdGVzdF9jbWRzPVwiJG1vZHVsZV9jbWRzXCIKKwkgICAgY21kcz0kbW9kdWxlX2NtZHMKKwkgIGZpCisJZWxzZQorCSAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkYXJjaGl2ZV9leHBzeW1fY21kcyI7IHRoZW4KKwkgICAgZXZhbCB0ZXN0X2NtZHM9XCIkYXJjaGl2ZV9leHBzeW1fY21kc1wiCisJICAgIGNtZHM9JGFyY2hpdmVfZXhwc3ltX2NtZHMKKwkgIGVsc2UKKwkgICAgZXZhbCB0ZXN0X2NtZHM9XCIkYXJjaGl2ZV9jbWRzXCIKKwkgICAgY21kcz0kYXJjaGl2ZV9jbWRzCisJICBmaQorCWZpCisKKwlpZiB0ZXN0ICJYJHNraXBwZWRfZXhwb3J0IiAhPSAiWDoiICYmCisJICAgZnVuY19sZW4gIiAkdGVzdF9jbWRzIiAmJgorCSAgIGxlbj0kZnVuY19sZW5fcmVzdWx0ICYmCisJICAgdGVzdCAiJGxlbiIgLWx0ICIkbWF4X2NtZF9sZW4iIHx8IHRlc3QgIiRtYXhfY21kX2xlbiIgLWxlIC0xOyB0aGVuCisJICA6CisJZWxzZQorCSAgIyBUaGUgY29tbWFuZCBsaW5lIGlzIHRvbyBsb25nIHRvIGxpbmsgaW4gb25lIHN0ZXAsIGxpbmsgcGllY2V3aXNlCisJICAjIG9yLCBpZiB1c2luZyBHTlUgbGQgYW5kIHNraXBwZWRfZXhwb3J0IGlzIG5vdCA6LCB1c2UgYSBsaW5rZXIKKwkgICMgc2NyaXB0LgorCisJICAjIFNhdmUgdGhlIHZhbHVlIG9mICRvdXRwdXQgYW5kICRsaWJvYmpzIGJlY2F1c2Ugd2Ugd2FudCB0bworCSAgIyB1c2UgdGhlbSBsYXRlci4gIElmIHdlIGhhdmUgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsIHdlCisJICAjIHdhbnQgdG8gdXNlIHNhdmVfbGlib2JqcyBhcyBpdCB3YXMgYmVmb3JlCisJICAjIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIHdhcyBleHBhbmRlZCwgYmVjYXVzZSB3ZSBjYW4ndAorCSAgIyBhc3N1bWUgdGhlIGxpbmtlciB1bmRlcnN0YW5kcyB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYy4KKwkgICMgVGhpcyBtYXkgaGF2ZSB0byBiZSByZXZpc2l0ZWQsIGluIGNhc2UgdG9vIG1hbnkKKwkgICMgY29udmVuaWVuY2UgbGlicmFyaWVzIGdldCBsaW5rZWQgaW4gYW5kIGVuZCB1cCBleGNlZWRpbmcKKwkgICMgdGhlIHNwZWMuCisJICBpZiB0ZXN0IC16ICIkY29udmVuaWVuY2UiIHx8IHRlc3QgLXogIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyI7IHRoZW4KKwkgICAgc2F2ZV9saWJvYmpzPSRsaWJvYmpzCisJICBmaQorCSAgc2F2ZV9vdXRwdXQ9JG91dHB1dAorCSAgZnVuY19iYXNlbmFtZSAiJG91dHB1dCIKKwkgIG91dHB1dF9sYT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKworCSAgIyBDbGVhciB0aGUgcmVsb2FkYWJsZSBvYmplY3QgY3JlYXRpb24gY29tbWFuZCBxdWV1ZSBhbmQKKwkgICMgaW5pdGlhbGl6ZSBrIHRvIG9uZS4KKwkgIHRlc3RfY21kcz0KKwkgIGNvbmNhdF9jbWRzPQorCSAgb2JqbGlzdD0KKwkgIGxhc3Rfcm9iaj0KKwkgIGs9MQorCisJICBpZiB0ZXN0IC1uICIkc2F2ZV9saWJvYmpzIiAmJiB0ZXN0ICJYJHNraXBwZWRfZXhwb3J0IiAhPSAiWDoiICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKwkgICAgb3V0cHV0PSR7b3V0cHV0X29iamRpcn0vJHtvdXRwdXRfbGF9Lmxua3NjcmlwdAorCSAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nIEdOVSBsZCBzY3JpcHQ6ICRvdXRwdXQiCisJICAgIGVjaG8gJ0lOUFVUICgnID4gJG91dHB1dAorCSAgICBmb3Igb2JqIGluICRzYXZlX2xpYm9ianMKKwkgICAgZG8KKwkgICAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG9iaiIKKwkgICAgICAkRUNITyAiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIgPj4gJG91dHB1dAorCSAgICBkb25lCisJICAgIGVjaG8gJyknID4+ICRvdXRwdXQKKwkgICAgZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkb3V0cHV0IgorCSAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dCIKKwkgICAgb3V0cHV0PSRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQKKwkgIGVsaWYgdGVzdCAtbiAiJHNhdmVfbGlib2JqcyIgJiYgdGVzdCAiWCRza2lwcGVkX2V4cG9ydCIgIT0gIlg6IiAmJiB0ZXN0ICJYJGZpbGVfbGlzdF9zcGVjIiAhPSBYOyB0aGVuCisJICAgIG91dHB1dD0ke291dHB1dF9vYmpkaXJ9LyR7b3V0cHV0X2xhfS5sbmsKKwkgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyBsaW5rZXIgaW5wdXQgZmlsZSBsaXN0OiAkb3V0cHV0IgorCSAgICA6ID4gJG91dHB1dAorCSAgICBzZXQgeCAkc2F2ZV9saWJvYmpzCisJICAgIHNoaWZ0CisJICAgIGZpcnN0b2JqPQorCSAgICBpZiB0ZXN0ICIkY29tcGlsZXJfbmVlZHNfb2JqZWN0IiA9IHllczsgdGhlbgorCSAgICAgIGZpcnN0b2JqPSIkMSAiCisJICAgICAgc2hpZnQKKwkgICAgZmkKKwkgICAgZm9yIG9iagorCSAgICBkbworCSAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkb2JqIgorCSAgICAgICRFQ0hPICIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiA+PiAkb3V0cHV0CisJICAgIGRvbmUKKwkgICAgZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkb3V0cHV0IgorCSAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dCIKKwkgICAgb3V0cHV0PSRmaXJzdG9ialwiJGZpbGVfbGlzdF9zcGVjJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdFwiCisJICBlbHNlCisJICAgIGlmIHRlc3QgLW4gIiRzYXZlX2xpYm9ianMiOyB0aGVuCisJICAgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyByZWxvYWRhYmxlIG9iamVjdCBmaWxlcy4uLiIKKwkgICAgICBvdXRwdXQ9JG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS0ke2t9LiRvYmpleHQKKwkgICAgICBldmFsIHRlc3RfY21kcz1cIiRyZWxvYWRfY21kc1wiCisJICAgICAgZnVuY19sZW4gIiAkdGVzdF9jbWRzIgorCSAgICAgIGxlbjA9JGZ1bmNfbGVuX3Jlc3VsdAorCSAgICAgIGxlbj0kbGVuMAorCisJICAgICAgIyBMb29wIG92ZXIgdGhlIGxpc3Qgb2Ygb2JqZWN0cyB0byBiZSBsaW5rZWQuCisJICAgICAgZm9yIG9iaiBpbiAkc2F2ZV9saWJvYmpzCisJICAgICAgZG8KKwkJZnVuY19sZW4gIiAkb2JqIgorCQlmdW5jX2FyaXRoICRsZW4gKyAkZnVuY19sZW5fcmVzdWx0CisJCWxlbj0kZnVuY19hcml0aF9yZXN1bHQKKwkJaWYgdGVzdCAiWCRvYmpsaXN0IiA9IFggfHwKKwkJICAgdGVzdCAiJGxlbiIgLWx0ICIkbWF4X2NtZF9sZW4iOyB0aGVuCisJCSAgZnVuY19hcHBlbmQgb2JqbGlzdCAiICRvYmoiCisJCWVsc2UKKwkJICAjIFRoZSBjb21tYW5kICR0ZXN0X2NtZHMgaXMgYWxtb3N0IHRvbyBsb25nLCBhZGQgYQorCQkgICMgY29tbWFuZCB0byB0aGUgcXVldWUuCisJCSAgaWYgdGVzdCAiJGsiIC1lcSAxIDsgdGhlbgorCQkgICAgIyBUaGUgZmlyc3QgZmlsZSBkb2Vzbid0IGhhdmUgYSBwcmV2aW91cyBjb21tYW5kIHRvIGFkZC4KKwkJICAgIHJlbG9hZF9vYmpzPSRvYmpsaXN0CisJCSAgICBldmFsIGNvbmNhdF9jbWRzPVwiJHJlbG9hZF9jbWRzXCIKKwkJICBlbHNlCisJCSAgICAjIEFsbCBzdWJzZXF1ZW50IHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzIHdpbGwgbGluayBpbgorCQkgICAgIyB0aGUgbGFzdCBvbmUgY3JlYXRlZC4KKwkJICAgIHJlbG9hZF9vYmpzPSIkb2JqbGlzdCAkbGFzdF9yb2JqIgorCQkgICAgZXZhbCBjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHN+JHJlbG9hZF9jbWRzflwkUk0gJGxhc3Rfcm9ialwiCisJCSAgZmkKKwkJICBsYXN0X3JvYmo9JG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS0ke2t9LiRvYmpleHQKKwkJICBmdW5jX2FyaXRoICRrICsgMQorCQkgIGs9JGZ1bmNfYXJpdGhfcmVzdWx0CisJCSAgb3V0cHV0PSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEtJHtrfS4kb2JqZXh0CisJCSAgb2JqbGlzdD0iICRvYmoiCisJCSAgZnVuY19sZW4gIiAkbGFzdF9yb2JqIgorCQkgIGZ1bmNfYXJpdGggJGxlbjAgKyAkZnVuY19sZW5fcmVzdWx0CisJCSAgbGVuPSRmdW5jX2FyaXRoX3Jlc3VsdAorCQlmaQorCSAgICAgIGRvbmUKKwkgICAgICAjIEhhbmRsZSB0aGUgcmVtYWluaW5nIG9iamVjdHMgYnkgY3JlYXRpbmcgb25lIGxhc3QKKwkgICAgICAjIHJlbG9hZGFibGUgb2JqZWN0IGZpbGUuICBBbGwgc3Vic2VxdWVudCByZWxvYWRhYmxlIG9iamVjdAorCSAgICAgICMgZmlsZXMgd2lsbCBsaW5rIGluIHRoZSBsYXN0IG9uZSBjcmVhdGVkLgorCSAgICAgIHRlc3QgLXogIiRjb25jYXRfY21kcyIgfHwgY29uY2F0X2NtZHM9JGNvbmNhdF9jbWRzfgorCSAgICAgIHJlbG9hZF9vYmpzPSIkb2JqbGlzdCAkbGFzdF9yb2JqIgorCSAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJHtjb25jYXRfY21kc30kcmVsb2FkX2NtZHNcIgorCSAgICAgIGlmIHRlc3QgLW4gIiRsYXN0X3JvYmoiOyB0aGVuCisJICAgICAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCR7Y29uY2F0X2NtZHN9flwkUk0gJGxhc3Rfcm9ialwiCisJICAgICAgZmkKKwkgICAgICBmdW5jX2FwcGVuZCBkZWxmaWxlcyAiICRvdXRwdXQiCisKKwkgICAgZWxzZQorCSAgICAgIG91dHB1dD0KKwkgICAgZmkKKworCSAgICBpZiAke3NraXBwZWRfZXhwb3J0LWZhbHNlfTsgdGhlbgorCSAgICAgIGZ1bmNfdmVyYm9zZSAiZ2VuZXJhdGluZyBzeW1ib2wgbGlzdCBmb3IgXGAkbGlibmFtZS5sYSciCisJICAgICAgZXhwb3J0X3N5bWJvbHM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmV4cCIKKwkgICAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICRleHBvcnRfc3ltYm9scworCSAgICAgIGxpYm9ianM9JG91dHB1dAorCSAgICAgICMgQXBwZW5kIHRoZSBjb21tYW5kIHRvIGNyZWF0ZSB0aGUgZXhwb3J0IGZpbGUuCisJICAgICAgdGVzdCAteiAiJGNvbmNhdF9jbWRzIiB8fCBjb25jYXRfY21kcz0kY29uY2F0X2NtZHN+CisJICAgICAgZXZhbCBjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHMkZXhwb3J0X3N5bWJvbHNfY21kc1wiCisJICAgICAgaWYgdGVzdCAtbiAiJGxhc3Rfcm9iaiI7IHRoZW4KKwkJZXZhbCBjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHN+XCRSTSAkbGFzdF9yb2JqXCIKKwkgICAgICBmaQorCSAgICBmaQorCisJICAgIHRlc3QgLW4gIiRzYXZlX2xpYm9ianMiICYmCisJICAgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyBhIHRlbXBvcmFyeSByZWxvYWRhYmxlIG9iamVjdCBmaWxlOiAkb3V0cHV0IgorCisJICAgICMgTG9vcCB0aHJvdWdoIHRoZSBjb21tYW5kcyBnZW5lcmF0ZWQgYWJvdmUgYW5kIGV4ZWN1dGUgdGhlbS4KKwkgICAgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9J34nCisJICAgIGZvciBjbWQgaW4gJGNvbmNhdF9jbWRzOyBkbworCSAgICAgIElGUz0iJHNhdmVfaWZzIgorCSAgICAgICRvcHRfc2lsZW50IHx8IHsKKwkJICBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgIiRjbWQiCisJCSAgZXZhbCAiZnVuY19lY2hvICRmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0IgorCSAgICAgIH0KKwkgICAgICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiJGNtZCIgfHwgeworCQlsdF9leGl0PSQ/CisKKwkJIyBSZXN0b3JlIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IGFuZCBleGl0CisJCWlmIHRlc3QgIiRvcHRfbW9kZSIgPSByZWxpbms7IHRoZW4KKwkJICAoIGNkICIkb3V0cHV0X29iamRpciIgJiYgXAorCQkgICAgJFJNICIke3JlYWxuYW1lfVQiICYmIFwKKwkJICAgICRNViAiJHtyZWFsbmFtZX1VIiAiJHJlYWxuYW1lIiApCisJCWZpCisKKwkJZXhpdCAkbHRfZXhpdAorCSAgICAgIH0KKwkgICAgZG9uZQorCSAgICBJRlM9IiRzYXZlX2lmcyIKKworCSAgICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICYmICR7c2tpcHBlZF9leHBvcnQtZmFsc2V9OyB0aGVuCisJICAgICAgZnVuY19zaG93X2V2YWwgJyRFR1JFUCAtZSAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAiJGV4cG9ydF9zeW1ib2xzIiA+ICIke2V4cG9ydF9zeW1ib2xzfVQiJworCSAgICAgIGZ1bmNfc2hvd19ldmFsICckTVYgIiR7ZXhwb3J0X3N5bWJvbHN9VCIgIiRleHBvcnRfc3ltYm9scyInCisJICAgIGZpCisJICBmaQorCisgICAgICAgICAgaWYgJHtza2lwcGVkX2V4cG9ydC1mYWxzZX07IHRoZW4KKwkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkaW5jbHVkZV9leHBzeW1zIjsgdGhlbgorCSAgICAgIHRtcF9leHBvcnRfc3ltYm9scz0iJGV4cG9ydF9zeW1ib2xzIgorCSAgICAgIHRlc3QgLW4gIiRvcmlnX2V4cG9ydF9zeW1ib2xzIiAmJiB0bXBfZXhwb3J0X3N5bWJvbHM9IiRvcmlnX2V4cG9ydF9zeW1ib2xzIgorCSAgICAgICRvcHRfZHJ5X3J1biB8fCBldmFsICckRUNITyAiJGluY2x1ZGVfZXhwc3ltcyIgfCAkU1AyTkwgPj4gIiR0bXBfZXhwb3J0X3N5bWJvbHMiJworCSAgICBmaQorCisJICAgIGlmIHRlc3QgLW4gIiRvcmlnX2V4cG9ydF9zeW1ib2xzIjsgdGhlbgorCSAgICAgICMgVGhlIGdpdmVuIGV4cG9ydHNfc3ltYm9scyBmaWxlIGhhcyB0byBiZSBmaWx0ZXJlZCwgc28gZmlsdGVyIGl0LgorCSAgICAgIGZ1bmNfdmVyYm9zZSAiZmlsdGVyIHN5bWJvbCBsaXN0IGZvciBcYCRsaWJuYW1lLmxhJyB0byB0YWcgREFUQSBleHBvcnRzIgorCSAgICAgICMgRklYTUU6ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciBwb3RlbnRpYWxseSBjb250YWlucyBsb3RzIG9mCisJICAgICAgIyAncycgY29tbWFuZHMgd2hpY2ggbm90IGFsbCBzZWRzIGNhbiBoYW5kbGUuIEdOVSBzZWQgc2hvdWxkIGJlIGZpbmUKKwkgICAgICAjIHRob3VnaC4gQWxzbywgdGhlIGZpbHRlciBzY2FsZXMgc3VwZXJsaW5lYXJseSB3aXRoIHRoZSBudW1iZXIgb2YKKwkgICAgICAjIGdsb2JhbCB2YXJpYWJsZXMuIGpvaW4oMSkgd291bGQgYmUgbmljZSBoZXJlLCBidXQgdW5mb3J0dW5hdGVseQorCSAgICAgICMgaXNuJ3QgYSBibGVzc2VkIHRvb2wuCisJICAgICAgJG9wdF9kcnlfcnVuIHx8ICRTRUQgLWUgJy9bICxdREFUQS8hZDtzLFwoLipcKVwoWyBcLF0uKlwpLHN8XlwxJHxcMVwyfCwnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyCisJICAgICAgZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIgorCSAgICAgIGV4cG9ydF9zeW1ib2xzPSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZgorCSAgICAgICRvcHRfZHJ5X3J1biB8fCAkU0VEIC1mICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciA8ICRvcmlnX2V4cG9ydF9zeW1ib2xzID4gJGV4cG9ydF9zeW1ib2xzCisJICAgIGZpCisJICBmaQorCisJICBsaWJvYmpzPSRvdXRwdXQKKwkgICMgUmVzdG9yZSB0aGUgdmFsdWUgb2Ygb3V0cHV0LgorCSAgb3V0cHV0PSRzYXZlX291dHB1dAorCisJICBpZiB0ZXN0IC1uICIkY29udmVuaWVuY2UiICYmIHRlc3QgLW4gIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyI7IHRoZW4KKwkgICAgZXZhbCBsaWJvYmpzPVwiXCRsaWJvYmpzICR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY1wiCisJICAgIHRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9CisJICBmaQorCSAgIyBFeHBhbmQgdGhlIGxpYnJhcnkgbGlua2luZyBjb21tYW5kcyBhZ2FpbiB0byByZXNldCB0aGUKKwkgICMgdmFsdWUgb2YgJGxpYm9ianMgZm9yIHBpZWNld2lzZSBsaW5raW5nLgorCisJICAjIERvIGVhY2ggb2YgdGhlIGFyY2hpdmUgY29tbWFuZHMuCisJICBpZiB0ZXN0ICIkbW9kdWxlIiA9IHllcyAmJiB0ZXN0IC1uICIkbW9kdWxlX2NtZHMiIDsgdGhlbgorCSAgICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRtb2R1bGVfZXhwc3ltX2NtZHMiOyB0aGVuCisJICAgICAgY21kcz0kbW9kdWxlX2V4cHN5bV9jbWRzCisJICAgIGVsc2UKKwkgICAgICBjbWRzPSRtb2R1bGVfY21kcworCSAgICBmaQorCSAgZWxzZQorCSAgICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRhcmNoaXZlX2V4cHN5bV9jbWRzIjsgdGhlbgorCSAgICAgIGNtZHM9JGFyY2hpdmVfZXhwc3ltX2NtZHMKKwkgICAgZWxzZQorCSAgICAgIGNtZHM9JGFyY2hpdmVfY21kcworCSAgICBmaQorCSAgZmkKKwlmaQorCisJaWYgdGVzdCAtbiAiJGRlbGZpbGVzIjsgdGhlbgorCSAgIyBBcHBlbmQgdGhlIGNvbW1hbmQgdG8gcmVtb3ZlIHRlbXBvcmFyeSBmaWxlcyB0byAkY21kcy4KKwkgIGV2YWwgY21kcz1cIlwkY21kc35cJFJNICRkZWxmaWxlc1wiCisJZmkKKworCSMgQWRkIGFueSBvYmplY3RzIGZyb20gcHJlbG9hZGVkIGNvbnZlbmllbmNlIGxpYnJhcmllcworCWlmIHRlc3QgLW4gIiRkbHByZWZpbGVzIjsgdGhlbgorCSAgZ2VudG9wPSIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eCIKKwkgIGZ1bmNfYXBwZW5kIGdlbmVyYXRlZCAiICRnZW50b3AiCisKKwkgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRkbHByZWZpbGVzCisJICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCisJICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQorCWZpCisKKwlzYXZlX2lmcz0iJElGUyI7IElGUz0nficKKwlmb3IgY21kIGluICRjbWRzOyBkbworCSAgSUZTPSIkc2F2ZV9pZnMiCisJICBldmFsIGNtZD1cIiRjbWRcIgorCSAgJG9wdF9zaWxlbnQgfHwgeworCSAgICBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgIiRjbWQiCisJICAgIGV2YWwgImZ1bmNfZWNobyAkZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdCIKKwkgIH0KKwkgICRvcHRfZHJ5X3J1biB8fCBldmFsICIkY21kIiB8fCB7CisJICAgIGx0X2V4aXQ9JD8KKworCSAgICAjIFJlc3RvcmUgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcnkgYW5kIGV4aXQKKwkgICAgaWYgdGVzdCAiJG9wdF9tb2RlIiA9IHJlbGluazsgdGhlbgorCSAgICAgICggY2QgIiRvdXRwdXRfb2JqZGlyIiAmJiBcCisJICAgICAgICAkUk0gIiR7cmVhbG5hbWV9VCIgJiYgXAorCQkkTVYgIiR7cmVhbG5hbWV9VSIgIiRyZWFsbmFtZSIgKQorCSAgICBmaQorCisJICAgIGV4aXQgJGx0X2V4aXQKKwkgIH0KKwlkb25lCisJSUZTPSIkc2F2ZV9pZnMiCisKKwkjIFJlc3RvcmUgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcnkgYW5kIGV4aXQKKwlpZiB0ZXN0ICIkb3B0X21vZGUiID0gcmVsaW5rOyB0aGVuCisJICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAnKGNkICRvdXRwdXRfb2JqZGlyICYmICRSTSAke3JlYWxuYW1lfVQgJiYgJE1WICRyZWFsbmFtZSAke3JlYWxuYW1lfVQgJiYgJE1WICR7cmVhbG5hbWV9VSAkcmVhbG5hbWUpJyB8fCBleGl0ICQ/CisKKwkgIGlmIHRlc3QgLW4gIiRjb252ZW5pZW5jZSI7IHRoZW4KKwkgICAgaWYgdGVzdCAteiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgorCSAgICAgIGZ1bmNfc2hvd19ldmFsICcke1JNfXIgIiRnZW50b3AiJworCSAgICBmaQorCSAgZmkKKworCSAgZXhpdCAkRVhJVF9TVUNDRVNTCisJZmkKKworCSMgQ3JlYXRlIGxpbmtzIHRvIHRoZSByZWFsIGxpYnJhcnkuCisJZm9yIGxpbmtuYW1lIGluICRsaW5rbmFtZXM7IGRvCisJICBpZiB0ZXN0ICIkcmVhbG5hbWUiICE9ICIkbGlua25hbWUiOyB0aGVuCisJICAgIGZ1bmNfc2hvd19ldmFsICcoY2QgIiRvdXRwdXRfb2JqZGlyIiAmJiAkUk0gIiRsaW5rbmFtZSIgJiYgJExOX1MgIiRyZWFsbmFtZSIgIiRsaW5rbmFtZSIpJyAnZXhpdCAkPycKKwkgIGZpCisJZG9uZQorCisJIyBJZiAtbW9kdWxlIG9yIC1leHBvcnQtZHluYW1pYyB3YXMgc3BlY2lmaWVkLCBzZXQgdGhlIGRsbmFtZS4KKwlpZiB0ZXN0ICIkbW9kdWxlIiA9IHllcyB8fCB0ZXN0ICIkZXhwb3J0X2R5bmFtaWMiID0geWVzOyB0aGVuCisJICAjIE9uIGFsbCBrbm93biBvcGVyYXRpbmcgc3lzdGVtcywgdGhlc2UgYXJlIGlkZW50aWNhbC4KKwkgIGRsbmFtZT0iJHNvbmFtZSIKKwlmaQorICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBvYmopCisgICAgICBpZiB0ZXN0IC1uICIkZGxmaWxlcyRkbHByZWZpbGVzIiB8fCB0ZXN0ICIkZGxzZWxmIiAhPSBubzsgdGhlbgorCWZ1bmNfd2FybmluZyAiXGAtZGxvcGVuJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIgorICAgICAgZmkKKworICAgICAgY2FzZSAiICRkZXBsaWJzIiBpbgorICAgICAgKlwgLWwqIHwgKlwgLUwqKQorCWZ1bmNfd2FybmluZyAiXGAtbCcgYW5kIFxgLUwnIGFyZSBpZ25vcmVkIGZvciBvYmplY3RzIiA7OworICAgICAgZXNhYworCisgICAgICB0ZXN0IC1uICIkcnBhdGgiICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLXJwYXRoJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIgorCisgICAgICB0ZXN0IC1uICIkeHJwYXRoIiAmJiBcCisJZnVuY193YXJuaW5nICJcYC1SJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIgorCisgICAgICB0ZXN0IC1uICIkdmluZm8iICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLXZlcnNpb24taW5mbycgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIKKworICAgICAgdGVzdCAtbiAiJHJlbGVhc2UiICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLXJlbGVhc2UnIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiCisKKyAgICAgIGNhc2UgJG91dHB1dCBpbgorICAgICAgKi5sbykKKwl0ZXN0IC1uICIkb2JqcyRvbGRfZGVwbGlicyIgJiYgXAorCSAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGJ1aWxkIGxpYnJhcnkgb2JqZWN0IFxgJG91dHB1dCcgZnJvbSBub24tbGlidG9vbCBvYmplY3RzIgorCisJbGlib2JqPSRvdXRwdXQKKwlmdW5jX2xvMm8gIiRsaWJvYmoiCisJb2JqPSRmdW5jX2xvMm9fcmVzdWx0CisJOzsKKyAgICAgICopCisJbGlib2JqPQorCW9iaj0iJG91dHB1dCIKKwk7OworICAgICAgZXNhYworCisgICAgICAjIERlbGV0ZSB0aGUgb2xkIG9iamVjdHMuCisgICAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICRvYmogJGxpYm9iagorCisgICAgICAjIE9iamVjdHMgZnJvbSBjb252ZW5pZW5jZSBsaWJyYXJpZXMuICBUaGlzIGFzc3VtZXMKKyAgICAgICMgc2luZ2xlLXZlcnNpb24gY29udmVuaWVuY2UgbGlicmFyaWVzLiAgV2hlbmV2ZXIgd2UgY3JlYXRlCisgICAgICAjIGRpZmZlcmVudCBvbmVzIGZvciBQSUMvbm9uLVBJQywgdGhpcyB3ZSdsbCBoYXZlIHRvIGR1cGxpY2F0ZQorICAgICAgIyB0aGUgZXh0cmFjdGlvbi4KKyAgICAgIHJlbG9hZF9jb252X29ianM9CisgICAgICBnZW50b3A9CisgICAgICAjIHJlbG9hZF9jbWRzIHJ1bnMgJExEIGRpcmVjdGx5LCBzbyBsZXQgdXMgZ2V0IHJpZCBvZgorICAgICAgIyAtV2wgZnJvbSB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyBhbmQgaG9wZSB3ZSBjYW4gZ2V0IGJ5IHdpdGgKKyAgICAgICMgdHVybmluZyBjb21tYSBpbnRvIHNwYWNlLi4KKyAgICAgIHdsPQorCisgICAgICBpZiB0ZXN0IC1uICIkY29udmVuaWVuY2UiOyB0aGVuCisJaWYgdGVzdCAtbiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgorCSAgZXZhbCB0bXBfd2hvbGVfYXJjaGl2ZV9mbGFncz1cIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY1wiCisJICByZWxvYWRfY29udl9vYmpzPSRyZWxvYWRfb2Jqc1wgYCRFQ0hPICIkdG1wX3dob2xlX2FyY2hpdmVfZmxhZ3MiIHwgJFNFRCAnc3wsfCB8ZydgCisJZWxzZQorCSAgZ2VudG9wPSIkb3V0cHV0X29iamRpci8ke29ian14IgorCSAgZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKKworCSAgZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGNvbnZlbmllbmNlCisJICByZWxvYWRfY29udl9vYmpzPSIkcmVsb2FkX29ianMgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCisJZmkKKyAgICAgIGZpCisKKyAgICAgICMgSWYgd2UncmUgbm90IGJ1aWxkaW5nIHNoYXJlZCwgd2UgbmVlZCB0byB1c2Ugbm9uX3BpY19vYmpzCisgICAgICB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXMgJiYgbGlib2Jqcz0iJG5vbl9waWNfb2JqZWN0cyIKKworICAgICAgIyBDcmVhdGUgdGhlIG9sZC1zdHlsZSBvYmplY3QuCisgICAgICByZWxvYWRfb2Jqcz0iJG9ianMkb2xkX2RlcGxpYnMgImAkRUNITyAiJGxpYm9ianMiIHwgJFNQMk5MIHwgJFNFRCAiL1wuJHtsaWJleHR9JC9kOyAvXC5saWIkL2Q7ICRsbzJvIiB8ICROTDJTUGAiICRyZWxvYWRfY29udl9vYmpzIiAjIyMgdGVzdHN1aXRlOiBza2lwIG5lc3RlZCBxdW90aW5nIHRlc3QKKworICAgICAgb3V0cHV0PSIkb2JqIgorICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRyZWxvYWRfY21kcyIgJ2V4aXQgJD8nCisKKyAgICAgICMgRXhpdCBpZiB3ZSBhcmVuJ3QgZG9pbmcgYSBsaWJyYXJ5IG9iamVjdCBmaWxlLgorICAgICAgaWYgdGVzdCAteiAiJGxpYm9iaiI7IHRoZW4KKwlpZiB0ZXN0IC1uICIkZ2VudG9wIjsgdGhlbgorCSAgZnVuY19zaG93X2V2YWwgJyR7Uk19ciAiJGdlbnRvcCInCisJZmkKKworCWV4aXQgJEVYSVRfU1VDQ0VTUworICAgICAgZmkKKworICAgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzOyB0aGVuCisJaWYgdGVzdCAtbiAiJGdlbnRvcCI7IHRoZW4KKwkgIGZ1bmNfc2hvd19ldmFsICcke1JNfXIgIiRnZW50b3AiJworCWZpCisKKwkjIENyZWF0ZSBhbiBpbnZhbGlkIGxpYnRvb2wgb2JqZWN0IGlmIG5vIFBJQywgc28gdGhhdCB3ZSBkb24ndAorCSMgYWNjaWRlbnRhbGx5IGxpbmsgaXQgaW50byBhIHByb2dyYW0uCisJIyAkc2hvdyAiZWNobyB0aW1lc3RhbXAgPiAkbGlib2JqIgorCSMgJG9wdF9kcnlfcnVuIHx8IGV2YWwgImVjaG8gdGltZXN0YW1wID4gJGxpYm9iaiIgfHwgZXhpdCAkPworCWV4aXQgJEVYSVRfU1VDQ0VTUworICAgICAgZmkKKworICAgICAgaWYgdGVzdCAtbiAiJHBpY19mbGFnIiB8fCB0ZXN0ICIkcGljX21vZGUiICE9IGRlZmF1bHQ7IHRoZW4KKwkjIE9ubHkgZG8gY29tbWFuZHMgaWYgd2UgcmVhbGx5IGhhdmUgZGlmZmVyZW50IFBJQyBvYmplY3RzLgorCXJlbG9hZF9vYmpzPSIkbGlib2JqcyAkcmVsb2FkX2NvbnZfb2JqcyIKKwlvdXRwdXQ9IiRsaWJvYmoiCisJZnVuY19leGVjdXRlX2NtZHMgIiRyZWxvYWRfY21kcyIgJ2V4aXQgJD8nCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0IC1uICIkZ2VudG9wIjsgdGhlbgorCWZ1bmNfc2hvd19ldmFsICcke1JNfXIgIiRnZW50b3AiJworICAgICAgZmkKKworICAgICAgZXhpdCAkRVhJVF9TVUNDRVNTCisgICAgICA7OworCisgICAgcHJvZykKKyAgICAgIGNhc2UgJGhvc3QgaW4KKwkqY3lnd2luKikgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkb3V0cHV0IgorCSAgICAgICAgICBvdXRwdXQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC5leGU7OworICAgICAgZXNhYworICAgICAgdGVzdCAtbiAiJHZpbmZvIiAmJiBcCisJZnVuY193YXJuaW5nICJcYC12ZXJzaW9uLWluZm8nIGlzIGlnbm9yZWQgZm9yIHByb2dyYW1zIgorCisgICAgICB0ZXN0IC1uICIkcmVsZWFzZSIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtcmVsZWFzZScgaXMgaWdub3JlZCBmb3IgcHJvZ3JhbXMiCisKKyAgICAgIHRlc3QgIiRwcmVsb2FkIiA9IHllcyBcCisgICAgICAgICYmIHRlc3QgIiRkbG9wZW5fc3VwcG9ydCIgPSB1bmtub3duIFwKKwkmJiB0ZXN0ICIkZGxvcGVuX3NlbGYiID0gdW5rbm93biBcCisJJiYgdGVzdCAiJGRsb3Blbl9zZWxmX3N0YXRpYyIgPSB1bmtub3duICYmIFwKKwkgIGZ1bmNfd2FybmluZyAiXGBMVF9JTklUKFtkbG9wZW5dKScgbm90IHVzZWQuIEFzc3VtaW5nIG5vIGRsb3BlbiBzdXBwb3J0LiIKKworICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgKi0qLXJoYXBzb2R5KiB8ICotKi1kYXJ3aW4xLlswMTJdKQorCSMgT24gUmhhcHNvZHkgcmVwbGFjZSB0aGUgQyBsaWJyYXJ5IGlzIHRoZSBTeXN0ZW0gZnJhbWV3b3JrCisJY29tcGlsZV9kZXBsaWJzPWAkRUNITyAiICRjb21waWxlX2RlcGxpYnMiIHwgJFNFRCAncy8gLWxjIC8gU3lzdGVtLmx0ZnJhbWV3b3JrIC8nYAorCWZpbmFsaXplX2RlcGxpYnM9YCRFQ0hPICIgJGZpbmFsaXplX2RlcGxpYnMiIHwgJFNFRCAncy8gLWxjIC8gU3lzdGVtLmx0ZnJhbWV3b3JrIC8nYAorCTs7CisgICAgICBlc2FjCisKKyAgICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgICotKi1kYXJ3aW4qKQorCSMgRG9uJ3QgYWxsb3cgbGF6eSBsaW5raW5nLCBpdCBicmVha3MgQysrIGdsb2JhbCBjb25zdHJ1Y3RvcnMKKwkjIEJ1dCBpcyBzdXBwb3NlZGx5IGZpeGVkIG9uIDEwLjQgb3IgbGF0ZXIgKHlheSEpLgorCWlmIHRlc3QgIiR0YWduYW1lIiA9IENYWCA7IHRoZW4KKwkgIGNhc2UgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQtMTAuMH0gaW4KKwkgICAgMTAuWzAxMjNdKQorCSAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICR7d2x9LWJpbmRfYXRfbG9hZCIKKwkgICAgICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJHt3bH0tYmluZF9hdF9sb2FkIgorCSAgICA7OworCSAgZXNhYworCWZpCisJIyBUaW1lIHRvIGNoYW5nZSBhbGwgb3VyICJmb28ubHRmcmFtZXdvcmsiIHN0dWZmIGJhY2sgdG8gIi1mcmFtZXdvcmsgZm9vIgorCWNvbXBpbGVfZGVwbGlicz1gJEVDSE8gIiAkY29tcGlsZV9kZXBsaWJzIiB8ICRTRUQgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCisJZmluYWxpemVfZGVwbGlicz1gJEVDSE8gIiAkZmluYWxpemVfZGVwbGlicyIgfCAkU0VEICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAorCTs7CisgICAgICBlc2FjCisKKworICAgICAgIyBtb3ZlIGxpYnJhcnkgc2VhcmNoIHBhdGhzIHRoYXQgY29pbmNpZGUgd2l0aCBwYXRocyB0byBub3QgeWV0CisgICAgICAjIGluc3RhbGxlZCBsaWJyYXJpZXMgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlicmFyeSBzZWFyY2ggbGlzdAorICAgICAgbmV3X2xpYnM9CisgICAgICBmb3IgcGF0aCBpbiAkbm90aW5zdF9wYXRoOyBkbworCWNhc2UgIiAkbmV3X2xpYnMgIiBpbgorCSoiIC1MJHBhdGgvJG9iamRpciAiKikgOzsKKwkqKQorCSAgY2FzZSAiICRjb21waWxlX2RlcGxpYnMgIiBpbgorCSAgKiIgLUwkcGF0aC8kb2JqZGlyICIqKQorCSAgICBmdW5jX2FwcGVuZCBuZXdfbGlicyAiIC1MJHBhdGgvJG9iamRpciIgOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworICAgICAgZG9uZQorICAgICAgZm9yIGRlcGxpYiBpbiAkY29tcGlsZV9kZXBsaWJzOyBkbworCWNhc2UgJGRlcGxpYiBpbgorCS1MKikKKwkgIGNhc2UgIiAkbmV3X2xpYnMgIiBpbgorCSAgKiIgJGRlcGxpYiAiKikgOzsKKwkgICopIGZ1bmNfYXBwZW5kIG5ld19saWJzICIgJGRlcGxpYiIgOzsKKwkgIGVzYWMKKwkgIDs7CisJKikgZnVuY19hcHBlbmQgbmV3X2xpYnMgIiAkZGVwbGliIiA7OworCWVzYWMKKyAgICAgIGRvbmUKKyAgICAgIGNvbXBpbGVfZGVwbGlicz0iJG5ld19saWJzIgorCisKKyAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRjb21waWxlX2RlcGxpYnMiCisgICAgICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGZpbmFsaXplX2RlcGxpYnMiCisKKyAgICAgIGlmIHRlc3QgLW4gIiRycGF0aCR4cnBhdGgiOyB0aGVuCisJIyBJZiB0aGUgdXNlciBzcGVjaWZpZWQgYW55IHJwYXRoIGZsYWdzLCB0aGVuIGFkZCB0aGVtLgorCWZvciBsaWJkaXIgaW4gJHJwYXRoICR4cnBhdGg7IGRvCisJICAjIFRoaXMgaXMgdGhlIG1hZ2ljIHRvIHVzZSAtcnBhdGguCisJICBjYXNlICIkZmluYWxpemVfcnBhdGggIiBpbgorCSAgKiIgJGxpYmRpciAiKikgOzsKKwkgICopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3JwYXRoICIgJGxpYmRpciIgOzsKKwkgIGVzYWMKKwlkb25lCisgICAgICBmaQorCisgICAgICAjIE5vdyBoYXJkY29kZSB0aGUgbGlicmFyeSBwYXRocworICAgICAgcnBhdGg9CisgICAgICBoYXJkY29kZV9saWJkaXJzPQorICAgICAgZm9yIGxpYmRpciBpbiAkY29tcGlsZV9ycGF0aCAkZmluYWxpemVfcnBhdGg7IGRvCisJaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiOyB0aGVuCisJICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KKwkgICAgaWYgdGVzdCAteiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisJICAgICAgaGFyZGNvZGVfbGliZGlycz0iJGxpYmRpciIKKwkgICAgZWxzZQorCSAgICAgICMgSnVzdCBhY2N1bXVsYXRlIHRoZSB1bmlxdWUgbGliZGlycy4KKwkgICAgICBjYXNlICRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGhhcmRjb2RlX2xpYmRpcnMkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciBpbgorCSAgICAgICoiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiKikKKwkJOzsKKwkgICAgICAqKQorCQlmdW5jX2FwcGVuZCBoYXJkY29kZV9saWJkaXJzICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIiCisJCTs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgZWxzZQorCSAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisJICAgIGZ1bmNfYXBwZW5kIHJwYXRoICIgJGZsYWciCisJICBmaQorCWVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorCSAgY2FzZSAiJHBlcm1fcnBhdGggIiBpbgorCSAgKiIgJGxpYmRpciAiKikgOzsKKwkgICopIGZ1bmNfYXBwZW5kIHBlcm1fcnBhdGggIiAkbGliZGlyIiA7OworCSAgZXNhYworCWZpCisJY2FzZSAkaG9zdCBpbgorCSotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqIHwgKi1jZWdjYyopCisJICB0ZXN0YmluZGlyPWAke0VDSE99ICIkbGliZGlyIiB8ICR7U0VEfSAtZSAncyovbGliJCovYmluKidgCisJICBjYXNlIDokZGxsc2VhcmNocGF0aDogaW4KKwkgICoiOiRsaWJkaXI6IiopIDs7CisJICA6OikgZGxsc2VhcmNocGF0aD0kbGliZGlyOzsKKwkgICopIGZ1bmNfYXBwZW5kIGRsbHNlYXJjaHBhdGggIjokbGliZGlyIjs7CisJICBlc2FjCisJICBjYXNlIDokZGxsc2VhcmNocGF0aDogaW4KKwkgICoiOiR0ZXN0YmluZGlyOiIqKSA7OworCSAgOjopIGRsbHNlYXJjaHBhdGg9JHRlc3RiaW5kaXI7OworCSAgKikgZnVuY19hcHBlbmQgZGxsc2VhcmNocGF0aCAiOiR0ZXN0YmluZGlyIjs7CisJICBlc2FjCisJICA7OworCWVzYWMKKyAgICAgIGRvbmUKKyAgICAgICMgU3Vic3RpdHV0ZSB0aGUgaGFyZGNvZGVkIGxpYmRpcnMgaW50byB0aGUgcnBhdGguCisgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIgJiYKKwkgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisJbGliZGlyPSIkaGFyZGNvZGVfbGliZGlycyIKKwlldmFsIHJwYXRoPVwiICRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKyAgICAgIGZpCisgICAgICBjb21waWxlX3JwYXRoPSIkcnBhdGgiCisKKyAgICAgIHJwYXRoPQorICAgICAgaGFyZGNvZGVfbGliZGlycz0KKyAgICAgIGZvciBsaWJkaXIgaW4gJGZpbmFsaXplX3JwYXRoOyBkbworCWlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgorCSAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisJICAgIGlmIHRlc3QgLXogIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorCSAgICAgIGhhcmRjb2RlX2xpYmRpcnM9IiRsaWJkaXIiCisJICAgIGVsc2UKKwkgICAgICAjIEp1c3QgYWNjdW11bGF0ZSB0aGUgdW5pcXVlIGxpYmRpcnMuCisJICAgICAgY2FzZSAkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgaW4KKwkgICAgICAqIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiopCisJCTs7CisJICAgICAgKikKKwkJZnVuY19hcHBlbmQgaGFyZGNvZGVfbGliZGlycyAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyIgorCQk7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgIGVsc2UKKwkgICAgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorCSAgICBmdW5jX2FwcGVuZCBycGF0aCAiICRmbGFnIgorCSAgZmkKKwllbGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKwkgIGNhc2UgIiRmaW5hbGl6ZV9wZXJtX3JwYXRoICIgaW4KKwkgICoiICRsaWJkaXIgIiopIDs7CisJICAqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9wZXJtX3JwYXRoICIgJGxpYmRpciIgOzsKKwkgIGVzYWMKKwlmaQorICAgICAgZG9uZQorICAgICAgIyBTdWJzdGl0dXRlIHRoZSBoYXJkY29kZWQgbGliZGlycyBpbnRvIHRoZSBycGF0aC4KKyAgICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiAmJgorCSB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKwlsaWJkaXI9IiRoYXJkY29kZV9saWJkaXJzIgorCWV2YWwgcnBhdGg9XCIgJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorICAgICAgZmkKKyAgICAgIGZpbmFsaXplX3JwYXRoPSIkcnBhdGgiCisKKyAgICAgIGlmIHRlc3QgLW4gIiRsaWJvYmpzIiAmJiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzOyB0aGVuCisJIyBUcmFuc2Zvcm0gYWxsIHRoZSBsaWJyYXJ5IG9iamVjdHMgaW50byBzdGFuZGFyZCBvYmplY3RzLgorCWNvbXBpbGVfY29tbWFuZD1gJEVDSE8gIiRjb21waWxlX2NvbW1hbmQiIHwgJFNQMk5MIHwgJFNFRCAiJGxvMm8iIHwgJE5MMlNQYAorCWZpbmFsaXplX2NvbW1hbmQ9YCRFQ0hPICIkZmluYWxpemVfY29tbWFuZCIgfCAkU1AyTkwgfCAkU0VEICIkbG8ybyIgfCAkTkwyU1BgCisgICAgICBmaQorCisgICAgICBmdW5jX2dlbmVyYXRlX2Rsc3ltcyAiJG91dHB1dG5hbWUiICJAUFJPR1JBTUAiICJubyIKKworICAgICAgIyB0ZW1wbGF0ZSBwcmVsaW5raW5nIHN0ZXAKKyAgICAgIGlmIHRlc3QgLW4gIiRwcmVsaW5rX2NtZHMiOyB0aGVuCisJZnVuY19leGVjdXRlX2NtZHMgIiRwcmVsaW5rX2NtZHMiICdleGl0ICQ/JworICAgICAgZmkKKworICAgICAgd3JhcHBlcnNfcmVxdWlyZWQ9eWVzCisgICAgICBjYXNlICRob3N0IGluCisgICAgICAqY2VnY2MqIHwgKm1pbmd3MzJjZSopCisgICAgICAgICMgRGlzYWJsZSB3cmFwcGVycyBmb3IgY2VnY2MgYW5kIG1pbmd3MzJjZSBob3N0cywgd2UgYXJlIGNyb3NzIGNvbXBpbGluZyBhbnl3YXkuCisgICAgICAgIHdyYXBwZXJzX3JlcXVpcmVkPW5vCisgICAgICAgIDs7CisgICAgICAqY3lnd2luKiB8ICptaW5ndyogKQorICAgICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXM7IHRoZW4KKyAgICAgICAgICB3cmFwcGVyc19yZXF1aXJlZD1ubworICAgICAgICBmaQorICAgICAgICA7OworICAgICAgKikKKyAgICAgICAgaWYgdGVzdCAiJG5lZWRfcmVsaW5rIiA9IG5vIHx8IHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllczsgdGhlbgorICAgICAgICAgIHdyYXBwZXJzX3JlcXVpcmVkPW5vCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICBpZiB0ZXN0ICIkd3JhcHBlcnNfcmVxdWlyZWQiID0gbm87IHRoZW4KKwkjIFJlcGxhY2UgdGhlIG91dHB1dCBmaWxlIHNwZWNpZmljYXRpb24uCisJY29tcGlsZV9jb21tYW5kPWAkRUNITyAiJGNvbXBpbGVfY29tbWFuZCIgfCAkU0VEICdzJUBPVVRQVVRAJSciJG91dHB1dCInJWcnYAorCWxpbmtfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCRjb21waWxlX3JwYXRoIgorCisJIyBXZSBoYXZlIG5vIHVuaW5zdGFsbGVkIGxpYnJhcnkgZGVwZW5kZW5jaWVzLCBzbyBmaW5hbGl6ZSByaWdodCBub3cuCisJZXhpdF9zdGF0dXM9MAorCWZ1bmNfc2hvd19ldmFsICIkbGlua19jb21tYW5kIiAnZXhpdF9zdGF0dXM9JD8nCisKKwlpZiB0ZXN0IC1uICIkcG9zdGxpbmtfY21kcyI7IHRoZW4KKwkgIGZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0IgorCSAgcG9zdGxpbmtfY21kcz1gZnVuY19lY2hvX2FsbCAiJHBvc3RsaW5rX2NtZHMiIHwgJFNFRCAtZSAncyVAT1VUUFVUQCUnIiRvdXRwdXQiJyVnJyAtZSAncyVAVE9PTF9PVVRQVVRAJSciJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCInJWcnYAorCSAgZnVuY19leGVjdXRlX2NtZHMgIiRwb3N0bGlua19jbWRzIiAnZXhpdCAkPycKKwlmaQorCisJIyBEZWxldGUgdGhlIGdlbmVyYXRlZCBmaWxlcy4KKwlpZiB0ZXN0IC1mICIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9Uy4ke29iamV4dH0iOyB0aGVuCisJICBmdW5jX3Nob3dfZXZhbCAnJFJNICIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9Uy4ke29iamV4dH0iJworCWZpCisKKwlleGl0ICRleGl0X3N0YXR1cworICAgICAgZmkKKworICAgICAgaWYgdGVzdCAtbiAiJGNvbXBpbGVfc2hsaWJwYXRoJGZpbmFsaXplX3NobGlicGF0aCI7IHRoZW4KKwljb21waWxlX2NvbW1hbmQ9IiRzaGxpYnBhdGhfdmFyPVwiJGNvbXBpbGVfc2hsaWJwYXRoJGZpbmFsaXplX3NobGlicGF0aFwkJHNobGlicGF0aF92YXJcIiAkY29tcGlsZV9jb21tYW5kIgorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgLW4gIiRmaW5hbGl6ZV9zaGxpYnBhdGgiOyB0aGVuCisJZmluYWxpemVfY29tbWFuZD0iJHNobGlicGF0aF92YXI9XCIkZmluYWxpemVfc2hsaWJwYXRoXCQkc2hsaWJwYXRoX3ZhclwiICRmaW5hbGl6ZV9jb21tYW5kIgorICAgICAgZmkKKworICAgICAgY29tcGlsZV92YXI9CisgICAgICBmaW5hbGl6ZV92YXI9CisgICAgICBpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCisJaWYgdGVzdCAtbiAiJHBlcm1fcnBhdGgiOyB0aGVuCisJICAjIFdlIHNob3VsZCBzZXQgdGhlIHJ1bnBhdGhfdmFyLgorCSAgcnBhdGg9CisJICBmb3IgZGlyIGluICRwZXJtX3JwYXRoOyBkbworCSAgICBmdW5jX2FwcGVuZCBycGF0aCAiJGRpcjoiCisJICBkb25lCisJICBjb21waWxlX3Zhcj0iJHJ1bnBhdGhfdmFyPVwiJHJwYXRoXCQkcnVucGF0aF92YXJcIiAiCisJZmkKKwlpZiB0ZXN0IC1uICIkZmluYWxpemVfcGVybV9ycGF0aCI7IHRoZW4KKwkgICMgV2Ugc2hvdWxkIHNldCB0aGUgcnVucGF0aF92YXIuCisJICBycGF0aD0KKwkgIGZvciBkaXIgaW4gJGZpbmFsaXplX3Blcm1fcnBhdGg7IGRvCisJICAgIGZ1bmNfYXBwZW5kIHJwYXRoICIkZGlyOiIKKwkgIGRvbmUKKwkgIGZpbmFsaXplX3Zhcj0iJHJ1bnBhdGhfdmFyPVwiJHJwYXRoXCQkcnVucGF0aF92YXJcIiAiCisJZmkKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgIiRub19pbnN0YWxsIiA9IHllczsgdGhlbgorCSMgV2UgZG9uJ3QgbmVlZCB0byBjcmVhdGUgYSB3cmFwcGVyIHNjcmlwdC4KKwlsaW5rX2NvbW1hbmQ9IiRjb21waWxlX3ZhciRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aCIKKwkjIFJlcGxhY2UgdGhlIG91dHB1dCBmaWxlIHNwZWNpZmljYXRpb24uCisJbGlua19jb21tYW5kPWAkRUNITyAiJGxpbmtfY29tbWFuZCIgfCAkU0VEICdzJUBPVVRQVVRAJSciJG91dHB1dCInJWcnYAorCSMgRGVsZXRlIHRoZSBvbGQgb3V0cHV0IGZpbGUuCisJJG9wdF9kcnlfcnVuIHx8ICRSTSAkb3V0cHV0CisJIyBMaW5rIHRoZSBleGVjdXRhYmxlIGFuZCBleGl0CisJZnVuY19zaG93X2V2YWwgIiRsaW5rX2NvbW1hbmQiICdleGl0ICQ/JworCisJaWYgdGVzdCAtbiAiJHBvc3RsaW5rX2NtZHMiOyB0aGVuCisJICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dCIKKwkgIHBvc3RsaW5rX2NtZHM9YGZ1bmNfZWNob19hbGwgIiRwb3N0bGlua19jbWRzIiB8ICRTRUQgLWUgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0IiclZycgLWUgJ3MlQFRPT0xfT1VUUFVUQCUnIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiJyVnJ2AKKwkgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkcG9zdGxpbmtfY21kcyIgJ2V4aXQgJD8nCisJZmkKKworCWV4aXQgJEVYSVRfU1VDQ0VTUworICAgICAgZmkKKworICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2FjdGlvbiIgPSByZWxpbms7IHRoZW4KKwkjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQKKwlsaW5rX2NvbW1hbmQ9IiRjb21waWxlX3ZhciRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aCIKKwlyZWxpbmtfY29tbWFuZD0iJGZpbmFsaXplX3ZhciRmaW5hbGl6ZV9jb21tYW5kJGZpbmFsaXplX3JwYXRoIgorCisJZnVuY193YXJuaW5nICJ0aGlzIHBsYXRmb3JtIGRvZXMgbm90IGxpa2UgdW5pbnN0YWxsZWQgc2hhcmVkIGxpYnJhcmllcyIKKwlmdW5jX3dhcm5pbmcgIlxgJG91dHB1dCcgd2lsbCBiZSByZWxpbmtlZCBkdXJpbmcgaW5zdGFsbGF0aW9uIgorICAgICAgZWxzZQorCWlmIHRlc3QgIiRmYXN0X2luc3RhbGwiICE9IG5vOyB0aGVuCisJICBsaW5rX2NvbW1hbmQ9IiRmaW5hbGl6ZV92YXIkY29tcGlsZV9jb21tYW5kJGZpbmFsaXplX3JwYXRoIgorCSAgaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgPSB5ZXM7IHRoZW4KKwkgICAgcmVsaW5rX2NvbW1hbmQ9YCRFQ0hPICIkY29tcGlsZV92YXIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgiIHwgJFNFRCAncyVAT1VUUFVUQCVcJHByb2dkaXIvXCRmaWxlJWcnYAorCSAgZWxzZQorCSAgICAjIGZhc3RfaW5zdGFsbCBpcyBzZXQgdG8gbmVlZGxlc3MKKwkgICAgcmVsaW5rX2NvbW1hbmQ9CisJICBmaQorCWVsc2UKKwkgIGxpbmtfY29tbWFuZD0iJGNvbXBpbGVfdmFyJGNvbXBpbGVfY29tbWFuZCRjb21waWxlX3JwYXRoIgorCSAgcmVsaW5rX2NvbW1hbmQ9IiRmaW5hbGl6ZV92YXIkZmluYWxpemVfY29tbWFuZCRmaW5hbGl6ZV9ycGF0aCIKKwlmaQorICAgICAgZmkKKworICAgICAgIyBSZXBsYWNlIHRoZSBvdXRwdXQgZmlsZSBzcGVjaWZpY2F0aW9uLgorICAgICAgbGlua19jb21tYW5kPWAkRUNITyAiJGxpbmtfY29tbWFuZCIgfCAkU0VEICdzJUBPVVRQVVRAJSciJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUiJyVnJ2AKKworICAgICAgIyBEZWxldGUgdGhlIG9sZCBvdXRwdXQgZmlsZXMuCisgICAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICRvdXRwdXQgJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUgJG91dHB1dF9vYmpkaXIvbHQtJG91dHB1dG5hbWUKKworICAgICAgZnVuY19zaG93X2V2YWwgIiRsaW5rX2NvbW1hbmQiICdleGl0ICQ/JworCisgICAgICBpZiB0ZXN0IC1uICIkcG9zdGxpbmtfY21kcyI7IHRoZW4KKwlmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUiCisJcG9zdGxpbmtfY21kcz1gZnVuY19lY2hvX2FsbCAiJHBvc3RsaW5rX2NtZHMiIHwgJFNFRCAtZSAncyVAT1VUUFVUQCUnIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lIiclZycgLWUgJ3MlQFRPT0xfT1VUUFVUQCUnIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiJyVnJ2AKKwlmdW5jX2V4ZWN1dGVfY21kcyAiJHBvc3RsaW5rX2NtZHMiICdleGl0ICQ/JworICAgICAgZmkKKworICAgICAgIyBOb3cgY3JlYXRlIHRoZSB3cmFwcGVyIHNjcmlwdC4KKyAgICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgJG91dHB1dCIKKworICAgICAgIyBRdW90ZSB0aGUgcmVsaW5rIGNvbW1hbmQgZm9yIHNoaXBwaW5nLgorICAgICAgaWYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgorCSMgUHJlc2VydmUgYW55IHZhcmlhYmxlcyB0aGF0IG1heSBhZmZlY3QgY29tcGlsZXIgYmVoYXZpb3IKKwlmb3IgdmFyIGluICR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluazsgZG8KKwkgIGlmIGV2YWwgdGVzdCAteiBcIlwkeyR2YXIrc2V0fVwiOyB0aGVuCisJICAgIHJlbGlua19jb21tYW5kPSJ7IHRlc3QgLXogXCJcJHskdmFyK3NldH1cIiB8fCAkbHRfdW5zZXQgJHZhciB8fCB7ICR2YXI9OyBleHBvcnQgJHZhcjsgfTsgfTsgJHJlbGlua19jb21tYW5kIgorCSAgZWxpZiBldmFsIHZhcl92YWx1ZT1cJCR2YXI7IHRlc3QgLXogIiR2YXJfdmFsdWUiOyB0aGVuCisJICAgIHJlbGlua19jb21tYW5kPSIkdmFyPTsgZXhwb3J0ICR2YXI7ICRyZWxpbmtfY29tbWFuZCIKKwkgIGVsc2UKKwkgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHZhcl92YWx1ZSIKKwkgICAgcmVsaW5rX2NvbW1hbmQ9IiR2YXI9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0OyBleHBvcnQgJHZhcjsgJHJlbGlua19jb21tYW5kIgorCSAgZmkKKwlkb25lCisJcmVsaW5rX2NvbW1hbmQ9IihjZCBgcHdkYDsgJHJlbGlua19jb21tYW5kKSIKKwlyZWxpbmtfY29tbWFuZD1gJEVDSE8gIiRyZWxpbmtfY29tbWFuZCIgfCAkU0VEICIkc2VkX3F1b3RlX3N1YnN0ImAKKyAgICAgIGZpCisKKyAgICAgICMgT25seSBhY3R1YWxseSBkbyB0aGluZ3MgaWYgbm90IGluIGRyeSBydW4gbW9kZS4KKyAgICAgICRvcHRfZHJ5X3J1biB8fCB7CisJIyB3aW4zMiB3aWxsIHRoaW5rIHRoZSBzY3JpcHQgaXMgYSBiaW5hcnkgaWYgaXQgaGFzCisJIyBhIC5leGUgc3VmZml4LCBzbyB3ZSBzdHJpcCBpdCBvZmYgaGVyZS4KKwljYXNlICRvdXRwdXQgaW4KKwkgICouZXhlKSBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRvdXRwdXQiCisJICAgICAgICAgb3V0cHV0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKwllc2FjCisJIyB0ZXN0IGZvciBjeWd3aW4gYmVjYXVzZSBtdiBmYWlscyB3L28gLmV4ZSBleHRlbnNpb25zCisJY2FzZSAkaG9zdCBpbgorCSAgKmN5Z3dpbiopCisJICAgIGV4ZWV4dD0uZXhlCisJICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJG91dHB1dG5hbWUiCisJICAgIG91dHB1dG5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworCSAgKikgZXhlZXh0PSA7OworCWVzYWMKKwljYXNlICRob3N0IGluCisJICAqY3lnd2luKiB8ICptaW5ndyogKQorCSAgICBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkb3V0cHV0IiAiIiAiLiIKKwkgICAgb3V0cHV0X25hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CisJICAgIG91dHB1dF9wYXRoPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CisJICAgIGN3cmFwcGVyc291cmNlPSIkb3V0cHV0X3BhdGgvJG9iamRpci9sdC0kb3V0cHV0X25hbWUuYyIKKwkgICAgY3dyYXBwZXI9IiRvdXRwdXRfcGF0aC8kb3V0cHV0X25hbWUuZXhlIgorCSAgICAkUk0gJGN3cmFwcGVyc291cmNlICRjd3JhcHBlcgorCSAgICB0cmFwICIkUk0gJGN3cmFwcGVyc291cmNlICRjd3JhcHBlcjsgZXhpdCAkRVhJVF9GQUlMVVJFIiAxIDIgMTUKKworCSAgICBmdW5jX2VtaXRfY3dyYXBwZXJleGVfc3JjID4gJGN3cmFwcGVyc291cmNlCisKKwkgICAgIyBUaGUgd3JhcHBlciBleGVjdXRhYmxlIGlzIGJ1aWx0IHVzaW5nIHRoZSAkaG9zdCBjb21waWxlciwKKwkgICAgIyBiZWNhdXNlIGl0IGNvbnRhaW5zICRob3N0IHBhdGhzIGFuZCBmaWxlcy4gSWYgY3Jvc3MtCisJICAgICMgY29tcGlsaW5nLCBpdCwgbGlrZSB0aGUgdGFyZ2V0IGV4ZWN1dGFibGUsIG11c3QgYmUKKwkgICAgIyBleGVjdXRlZCBvbiB0aGUgJGhvc3Qgb3IgdW5kZXIgYW4gZW11bGF0aW9uIGVudmlyb25tZW50LgorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgICRMVENDICRMVENGTEFHUyAtbyAkY3dyYXBwZXIgJGN3cmFwcGVyc291cmNlCisJICAgICAgJFNUUklQICRjd3JhcHBlcgorCSAgICB9CisKKwkgICAgIyBOb3csIGNyZWF0ZSB0aGUgd3JhcHBlciBzY3JpcHQgZm9yIGZ1bmNfc291cmNlIHVzZToKKwkgICAgZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZSAkY3dyYXBwZXIKKwkgICAgJFJNICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdAorCSAgICB0cmFwICIkUk0gJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0OyBleGl0ICRFWElUX0ZBSUxVUkUiIDEgMiAxNQorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgICMgbm90ZTogdGhpcyBzY3JpcHQgd2lsbCBub3QgYmUgZXhlY3V0ZWQsIHNvIGRvIG5vdCBjaG1vZC4KKwkgICAgICBpZiB0ZXN0ICJ4JGJ1aWxkIiA9ICJ4JGhvc3QiIDsgdGhlbgorCQkkY3dyYXBwZXIgLS1sdC1kdW1wLXNjcmlwdCA+ICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdAorCSAgICAgIGVsc2UKKwkJZnVuY19lbWl0X3dyYXBwZXIgbm8gPiAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQKKwkgICAgICBmaQorCSAgICB9CisJICA7OworCSAgKiApCisJICAgICRSTSAkb3V0cHV0CisJICAgIHRyYXAgIiRSTSAkb3V0cHV0OyBleGl0ICRFWElUX0ZBSUxVUkUiIDEgMiAxNQorCisJICAgIGZ1bmNfZW1pdF93cmFwcGVyIG5vID4gJG91dHB1dAorCSAgICBjaG1vZCAreCAkb3V0cHV0CisJICA7OworCWVzYWMKKyAgICAgIH0KKyAgICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIFNlZSBpZiB3ZSBuZWVkIHRvIGJ1aWxkIGFuIG9sZC1mYXNoaW9uZWQgYXJjaGl2ZS4KKyAgICBmb3Igb2xkbGliIGluICRvbGRsaWJzOyBkbworCisgICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IGNvbnZlbmllbmNlOyB0aGVuCisJb2xkb2Jqcz0iJGxpYm9ianNfc2F2ZSAkc3ltZmlsZW9iaiIKKwlhZGRsaWJzPSIkY29udmVuaWVuY2UiCisJYnVpbGRfbGlidG9vbF9saWJzPW5vCisgICAgICBlbHNlCisJaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSBtb2R1bGU7IHRoZW4KKwkgIG9sZG9ianM9IiRsaWJvYmpzX3NhdmUiCisJICBidWlsZF9saWJ0b29sX2xpYnM9bm8KKwllbHNlCisJICBvbGRvYmpzPSIkb2xkX2RlcGxpYnMgJG5vbl9waWNfb2JqZWN0cyIKKwkgIGlmIHRlc3QgIiRwcmVsb2FkIiA9IHllcyAmJiB0ZXN0IC1mICIkc3ltZmlsZW9iaiI7IHRoZW4KKwkgICAgZnVuY19hcHBlbmQgb2xkb2JqcyAiICRzeW1maWxlb2JqIgorCSAgZmkKKwlmaQorCWFkZGxpYnM9IiRvbGRfY29udmVuaWVuY2UiCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0IC1uICIkYWRkbGlicyI7IHRoZW4KKwlnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14IgorCWZ1bmNfYXBwZW5kIGdlbmVyYXRlZCAiICRnZW50b3AiCisKKwlmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkYWRkbGlicworCWZ1bmNfYXBwZW5kIG9sZG9ianMgIiAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKyAgICAgIGZpCisKKyAgICAgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBhcmNoaXZlIGNvbW1hbmRzLgorICAgICAgaWYgdGVzdCAtbiAiJG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMiICYmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisJY21kcz0kb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcworICAgICAgZWxzZQorCisJIyBBZGQgYW55IG9iamVjdHMgZnJvbSBwcmVsb2FkZWQgY29udmVuaWVuY2UgbGlicmFyaWVzCisJaWYgdGVzdCAtbiAiJGRscHJlZmlsZXMiOyB0aGVuCisJICBnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14IgorCSAgZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKKworCSAgZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGRscHJlZmlsZXMKKwkgIGZ1bmNfYXBwZW5kIG9sZG9ianMgIiAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKwlmaQorCisJIyBQT1NJWCBkZW1hbmRzIG5vIHBhdGhzIHRvIGJlIGVuY29kZWQgaW4gYXJjaGl2ZXMuICBXZSBoYXZlCisJIyB0byBhdm9pZCBjcmVhdGluZyBhcmNoaXZlcyB3aXRoIGR1cGxpY2F0ZSBiYXNlbmFtZXMgaWYgd2UKKwkjIG1pZ2h0IGhhdmUgdG8gZXh0cmFjdCB0aGVtIGFmdGVyd2FyZHMsIGUuZy4sIHdoZW4gY3JlYXRpbmcgYQorCSMgc3RhdGljIGFyY2hpdmUgb3V0IG9mIGEgY29udmVuaWVuY2UgbGlicmFyeSwgb3Igd2hlbiBsaW5raW5nCisJIyB0aGUgZW50aXJldHkgb2YgYSBsaWJ0b29sIGFyY2hpdmUgaW50byBhbm90aGVyIChjdXJyZW50bHkKKwkjIG5vdCBzdXBwb3J0ZWQgYnkgbGlidG9vbCkuCisJaWYgKGZvciBvYmogaW4gJG9sZG9ianMKKwkgICAgZG8KKwkgICAgICBmdW5jX2Jhc2VuYW1lICIkb2JqIgorCSAgICAgICRFQ0hPICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJICAgIGRvbmUgfCBzb3J0IHwgc29ydCAtdWMgPi9kZXYvbnVsbCAyPiYxKTsgdGhlbgorCSAgOgorCWVsc2UKKwkgIGVjaG8gImNvcHlpbmcgc2VsZWN0ZWQgb2JqZWN0IGZpbGVzIHRvIGF2b2lkIGJhc2VuYW1lIGNvbmZsaWN0cy4uLiIKKwkgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCisJICBmdW5jX2FwcGVuZCBnZW5lcmF0ZWQgIiAkZ2VudG9wIgorCSAgZnVuY19ta2Rpcl9wICIkZ2VudG9wIgorCSAgc2F2ZV9vbGRvYmpzPSRvbGRvYmpzCisJICBvbGRvYmpzPQorCSAgY291bnRlcj0xCisJICBmb3Igb2JqIGluICRzYXZlX29sZG9ianMKKwkgIGRvCisJICAgIGZ1bmNfYmFzZW5hbWUgIiRvYmoiCisJICAgIG9iamJhc2U9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkgICAgY2FzZSAiICRvbGRvYmpzICIgaW4KKwkgICAgIiAiKSBvbGRvYmpzPSRvYmogOzsKKwkgICAgKltcIC9dIiRvYmpiYXNlICIqKQorCSAgICAgIHdoaWxlIDo7IGRvCisJCSMgTWFrZSBzdXJlIHdlIGRvbid0IHBpY2sgYW4gYWx0ZXJuYXRlIG5hbWUgdGhhdCBhbHNvCisJCSMgb3ZlcmxhcHMuCisJCW5ld29iaj1sdCRjb3VudGVyLSRvYmpiYXNlCisJCWZ1bmNfYXJpdGggJGNvdW50ZXIgKyAxCisJCWNvdW50ZXI9JGZ1bmNfYXJpdGhfcmVzdWx0CisJCWNhc2UgIiAkb2xkb2JqcyAiIGluCisJCSpbXCAvXSIkbmV3b2JqICIqKSA7OworCQkqKSBpZiB0ZXN0ICEgLWYgIiRnZW50b3AvJG5ld29iaiI7IHRoZW4gYnJlYWs7IGZpIDs7CisJCWVzYWMKKwkgICAgICBkb25lCisJICAgICAgZnVuY19zaG93X2V2YWwgImxuICRvYmogJGdlbnRvcC8kbmV3b2JqIHx8IGNwICRvYmogJGdlbnRvcC8kbmV3b2JqIgorCSAgICAgIGZ1bmNfYXBwZW5kIG9sZG9ianMgIiAkZ2VudG9wLyRuZXdvYmoiCisJICAgICAgOzsKKwkgICAgKikgZnVuY19hcHBlbmQgb2xkb2JqcyAiICRvYmoiIDs7CisJICAgIGVzYWMKKwkgIGRvbmUKKwlmaQorCWZ1bmNfdG9fdG9vbF9maWxlICIkb2xkbGliIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorCXRvb2xfb2xkbGliPSRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQKKwlldmFsIGNtZHM9XCIkb2xkX2FyY2hpdmVfY21kc1wiCisKKwlmdW5jX2xlbiAiICRjbWRzIgorCWxlbj0kZnVuY19sZW5fcmVzdWx0CisJaWYgdGVzdCAiJGxlbiIgLWx0ICIkbWF4X2NtZF9sZW4iIHx8IHRlc3QgIiRtYXhfY21kX2xlbiIgLWxlIC0xOyB0aGVuCisJICBjbWRzPSRvbGRfYXJjaGl2ZV9jbWRzCisJZWxpZiB0ZXN0IC1uICIkYXJjaGl2ZXJfbGlzdF9zcGVjIjsgdGhlbgorCSAgZnVuY192ZXJib3NlICJ1c2luZyBjb21tYW5kIGZpbGUgYXJjaGl2ZSBsaW5raW5nLi4uIgorCSAgZm9yIG9iaiBpbiAkb2xkb2JqcworCSAgZG8KKwkgICAgZnVuY190b190b29sX2ZpbGUgIiRvYmoiCisJICAgICRFQ0hPICIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IgorCSAgZG9uZSA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmxpYmNtZAorCSAgZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmxpYmNtZCIKKwkgIG9sZG9ianM9IiAkYXJjaGl2ZXJfbGlzdF9zcGVjJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIKKwkgIGNtZHM9JG9sZF9hcmNoaXZlX2NtZHMKKwllbHNlCisJICAjIHRoZSBjb21tYW5kIGxpbmUgaXMgdG9vIGxvbmcgdG8gbGluayBpbiBvbmUgc3RlcCwgbGluayBpbiBwYXJ0cworCSAgZnVuY192ZXJib3NlICJ1c2luZyBwaWVjZXdpc2UgYXJjaGl2ZSBsaW5raW5nLi4uIgorCSAgc2F2ZV9SQU5MSUI9JFJBTkxJQgorCSAgUkFOTElCPToKKwkgIG9iamxpc3Q9CisJICBjb25jYXRfY21kcz0KKwkgIHNhdmVfb2xkb2Jqcz0kb2xkb2JqcworCSAgb2xkb2Jqcz0KKwkgICMgSXMgdGhlcmUgYSBiZXR0ZXIgd2F5IG9mIGZpbmRpbmcgdGhlIGxhc3Qgb2JqZWN0IGluIHRoZSBsaXN0PworCSAgZm9yIG9iaiBpbiAkc2F2ZV9vbGRvYmpzCisJICBkbworCSAgICBsYXN0X29sZG9iaj0kb2JqCisJICBkb25lCisJICBldmFsIHRlc3RfY21kcz1cIiRvbGRfYXJjaGl2ZV9jbWRzXCIKKwkgIGZ1bmNfbGVuICIgJHRlc3RfY21kcyIKKwkgIGxlbjA9JGZ1bmNfbGVuX3Jlc3VsdAorCSAgbGVuPSRsZW4wCisJICBmb3Igb2JqIGluICRzYXZlX29sZG9ianMKKwkgIGRvCisJICAgIGZ1bmNfbGVuICIgJG9iaiIKKwkgICAgZnVuY19hcml0aCAkbGVuICsgJGZ1bmNfbGVuX3Jlc3VsdAorCSAgICBsZW49JGZ1bmNfYXJpdGhfcmVzdWx0CisJICAgIGZ1bmNfYXBwZW5kIG9iamxpc3QgIiAkb2JqIgorCSAgICBpZiB0ZXN0ICIkbGVuIiAtbHQgIiRtYXhfY21kX2xlbiI7IHRoZW4KKwkgICAgICA6CisJICAgIGVsc2UKKwkgICAgICAjIHRoZSBhYm92ZSBjb21tYW5kIHNob3VsZCBiZSB1c2VkIGJlZm9yZSBpdCBnZXRzIHRvbyBsb25nCisJICAgICAgb2xkb2Jqcz0kb2JqbGlzdAorCSAgICAgIGlmIHRlc3QgIiRvYmoiID0gIiRsYXN0X29sZG9iaiIgOyB0aGVuCisJCVJBTkxJQj0kc2F2ZV9SQU5MSUIKKwkgICAgICBmaQorCSAgICAgIHRlc3QgLXogIiRjb25jYXRfY21kcyIgfHwgY29uY2F0X2NtZHM9JGNvbmNhdF9jbWRzfgorCSAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJHtjb25jYXRfY21kc30kb2xkX2FyY2hpdmVfY21kc1wiCisJICAgICAgb2JqbGlzdD0KKwkgICAgICBsZW49JGxlbjAKKwkgICAgZmkKKwkgIGRvbmUKKwkgIFJBTkxJQj0kc2F2ZV9SQU5MSUIKKwkgIG9sZG9ianM9JG9iamxpc3QKKwkgIGlmIHRlc3QgIlgkb2xkb2JqcyIgPSAiWCIgOyB0aGVuCisJICAgIGV2YWwgY21kcz1cIlwkY29uY2F0X2NtZHNcIgorCSAgZWxzZQorCSAgICBldmFsIGNtZHM9XCJcJGNvbmNhdF9jbWRzflwkb2xkX2FyY2hpdmVfY21kc1wiCisJICBmaQorCWZpCisgICAgICBmaQorICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRjbWRzIiAnZXhpdCAkPycKKyAgICBkb25lCisKKyAgICB0ZXN0IC1uICIkZ2VuZXJhdGVkIiAmJiBcCisgICAgICBmdW5jX3Nob3dfZXZhbCAiJHtSTX1yJGdlbmVyYXRlZCIKKworICAgICMgTm93IGNyZWF0ZSB0aGUgbGlidG9vbCBhcmNoaXZlLgorICAgIGNhc2UgJG91dHB1dCBpbgorICAgICoubGEpCisgICAgICBvbGRfbGlicmFyeT0KKyAgICAgIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXMgJiYgb2xkX2xpYnJhcnk9IiRsaWJuYW1lLiRsaWJleHQiCisgICAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nICRvdXRwdXQiCisKKyAgICAgICMgUHJlc2VydmUgYW55IHZhcmlhYmxlcyB0aGF0IG1heSBhZmZlY3QgY29tcGlsZXIgYmVoYXZpb3IKKyAgICAgIGZvciB2YXIgaW4gJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rOyBkbworCWlmIGV2YWwgdGVzdCAteiBcIlwkeyR2YXIrc2V0fVwiOyB0aGVuCisJICByZWxpbmtfY29tbWFuZD0ieyB0ZXN0IC16IFwiXCR7JHZhcitzZXR9XCIgfHwgJGx0X3Vuc2V0ICR2YXIgfHwgeyAkdmFyPTsgZXhwb3J0ICR2YXI7IH07IH07ICRyZWxpbmtfY29tbWFuZCIKKwllbGlmIGV2YWwgdmFyX3ZhbHVlPVwkJHZhcjsgdGVzdCAteiAiJHZhcl92YWx1ZSI7IHRoZW4KKwkgIHJlbGlua19jb21tYW5kPSIkdmFyPTsgZXhwb3J0ICR2YXI7ICRyZWxpbmtfY29tbWFuZCIKKwllbHNlCisJICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkdmFyX3ZhbHVlIgorCSAgcmVsaW5rX2NvbW1hbmQ9IiR2YXI9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0OyBleHBvcnQgJHZhcjsgJHJlbGlua19jb21tYW5kIgorCWZpCisgICAgICBkb25lCisgICAgICAjIFF1b3RlIHRoZSBsaW5rIGNvbW1hbmQgZm9yIHNoaXBwaW5nLgorICAgICAgcmVsaW5rX2NvbW1hbmQ9IihjZCBgcHdkYDsgJFNIRUxMICRwcm9ncGF0aCAkcHJlc2VydmVfYXJncyAtLW1vZGU9cmVsaW5rICRsaWJ0b29sX2FyZ3MgQGluc3RfcHJlZml4X2RpckApIgorICAgICAgcmVsaW5rX2NvbW1hbmQ9YCRFQ0hPICIkcmVsaW5rX2NvbW1hbmQiIHwgJFNFRCAiJHNlZF9xdW90ZV9zdWJzdCJgCisgICAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfYXV0b21hdGljIiA9IHllcyA7IHRoZW4KKwlyZWxpbmtfY29tbWFuZD0KKyAgICAgIGZpCisKKyAgICAgICMgT25seSBjcmVhdGUgdGhlIG91dHB1dCBpZiBub3QgYSBkcnkgcnVuLgorICAgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwlmb3IgaW5zdGFsbGVkIGluIG5vIHllczsgZG8KKwkgIGlmIHRlc3QgIiRpbnN0YWxsZWQiID0geWVzOyB0aGVuCisJICAgIGlmIHRlc3QgLXogIiRpbnN0YWxsX2xpYmRpciI7IHRoZW4KKwkgICAgICBicmVhaworCSAgICBmaQorCSAgICBvdXRwdXQ9IiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lImkKKwkgICAgIyBSZXBsYWNlIGFsbCB1bmluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcyB3aXRoIHRoZSBpbnN0YWxsZWQgb25lcworCSAgICBuZXdkZXBlbmRlbmN5X2xpYnM9CisJICAgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKwkgICAgICBjYXNlICRkZXBsaWIgaW4KKwkgICAgICAqLmxhKQorCQlmdW5jX2Jhc2VuYW1lICIkZGVwbGliIgorCQluYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJCWZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZGVwbGliIgorCQlldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0YAorCQl0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisJCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkZGVwbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisJCWZ1bmNfYXBwZW5kIG5ld2RlcGVuZGVuY3lfbGlicyAiICR7bHRfc3lzcm9vdDorPX0kbGliZGlyLyRuYW1lIgorCQk7OworCSAgICAgIC1MKikKKwkJZnVuY19zdHJpcG5hbWUgLUwgJycgIiRkZXBsaWIiCisJCWZ1bmNfcmVwbGFjZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorCQlmdW5jX2FwcGVuZCBuZXdkZXBlbmRlbmN5X2xpYnMgIiAtTCRmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQiCisJCTs7CisJICAgICAgLVIqKQorCQlmdW5jX3N0cmlwbmFtZSAtUiAnJyAiJGRlcGxpYiIKKwkJZnVuY19yZXBsYWNlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisJCWZ1bmNfYXBwZW5kIG5ld2RlcGVuZGVuY3lfbGlicyAiIC1SJGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdCIKKwkJOzsKKwkgICAgICAqKSBmdW5jX2FwcGVuZCBuZXdkZXBlbmRlbmN5X2xpYnMgIiAkZGVwbGliIiA7OworCSAgICAgIGVzYWMKKwkgICAgZG9uZQorCSAgICBkZXBlbmRlbmN5X2xpYnM9IiRuZXdkZXBlbmRlbmN5X2xpYnMiCisJICAgIG5ld2RsZmlsZXM9CisKKwkgICAgZm9yIGxpYiBpbiAkZGxmaWxlczsgZG8KKwkgICAgICBjYXNlICRsaWIgaW4KKwkgICAgICAqLmxhKQorCSAgICAgICAgZnVuY19iYXNlbmFtZSAiJGxpYiIKKwkJbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCQlldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkbGliYAorCQl0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisJCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisJCWZ1bmNfYXBwZW5kIG5ld2RsZmlsZXMgIiAke2x0X3N5c3Jvb3Q6Kz19JGxpYmRpci8kbmFtZSIKKwkJOzsKKwkgICAgICAqKSBmdW5jX2FwcGVuZCBuZXdkbGZpbGVzICIgJGxpYiIgOzsKKwkgICAgICBlc2FjCisJICAgIGRvbmUKKwkgICAgZGxmaWxlcz0iJG5ld2RsZmlsZXMiCisJICAgIG5ld2RscHJlZmlsZXM9CisJICAgIGZvciBsaWIgaW4gJGRscHJlZmlsZXM7IGRvCisJICAgICAgY2FzZSAkbGliIGluCisJICAgICAgKi5sYSkKKwkJIyBPbmx5IHBhc3MgcHJlb3BlbmVkIGZpbGVzIHRvIHRoZSBwc2V1ZG8tYXJjaGl2ZSAoZm9yCisJCSMgZXZlbnR1YWwgbGlua2luZyB3aXRoIHRoZSBhcHAuIHRoYXQgbGlua3MgaXQpIGlmIHdlCisJCSMgZGlkbid0IGFscmVhZHkgbGluayB0aGUgcHJlb3BlbmVkIG9iamVjdHMgZGlyZWN0bHkgaW50bworCQkjIHRoZSBsaWJyYXJ5OgorCQlmdW5jX2Jhc2VuYW1lICIkbGliIgorCQluYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJCWV2YWwgbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRsaWJgCisJCXRlc3QgLXogIiRsaWJkaXIiICYmIFwKKwkJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKwkJZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICR7bHRfc3lzcm9vdDorPX0kbGliZGlyLyRuYW1lIgorCQk7OworCSAgICAgIGVzYWMKKwkgICAgZG9uZQorCSAgICBkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyIKKwkgIGVsc2UKKwkgICAgbmV3ZGxmaWxlcz0KKwkgICAgZm9yIGxpYiBpbiAkZGxmaWxlczsgZG8KKwkgICAgICBjYXNlICRsaWIgaW4KKwkJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBhYnM9IiRsaWIiIDs7CisJCSopIGFicz1gcHdkYCIvJGxpYiIgOzsKKwkgICAgICBlc2FjCisJICAgICAgZnVuY19hcHBlbmQgbmV3ZGxmaWxlcyAiICRhYnMiCisJICAgIGRvbmUKKwkgICAgZGxmaWxlcz0iJG5ld2RsZmlsZXMiCisJICAgIG5ld2RscHJlZmlsZXM9CisJICAgIGZvciBsaWIgaW4gJGRscHJlZmlsZXM7IGRvCisJICAgICAgY2FzZSAkbGliIGluCisJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzPSIkbGliIiA7OworCQkqKSBhYnM9YHB3ZGAiLyRsaWIiIDs7CisJICAgICAgZXNhYworCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkYWJzIgorCSAgICBkb25lCisJICAgIGRscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzIgorCSAgZmkKKwkgICRSTSAkb3V0cHV0CisJICAjIHBsYWNlIGRsbmFtZSBpbiBjb3JyZWN0IHBvc2l0aW9uIGZvciBjeWd3aW4KKwkgICMgSW4gZmFjdCwgaXQgd291bGQgYmUgbmljZSBpZiB3ZSBjb3VsZCB1c2UgdGhpcyBjb2RlIGZvciBhbGwgdGFyZ2V0CisJICAjIHN5c3RlbXMgdGhhdCBjYW4ndCBoYXJkLWNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHRoZWlyIGV4ZWN1dGFibGVzCisJICAjIGFuZCB0aGF0IGhhdmUgbm8gc2hhcmVkIGxpYnJhcnkgcGF0aCB2YXJpYWJsZSBpbmRlcGVuZGVudCBvZiBQQVRILAorCSAgIyBidXQgaXQgdHVybnMgb3V0IHdlIGNhbid0IGVhc2lseSBkZXRlcm1pbmUgdGhhdCBmcm9tIGluc3BlY3RpbmcKKwkgICMgbGlidG9vbCB2YXJpYWJsZXMsIHNvIHdlIGhhdmUgdG8gaGFyZC1jb2RlIHRoZSBPU3MgdG8gd2hpY2ggaXQKKwkgICMgYXBwbGllcyBoZXJlOyBhdCB0aGUgbW9tZW50LCB0aGF0IG1lYW5zIHBsYXRmb3JtcyB0aGF0IHVzZSB0aGUgUEUKKwkgICMgb2JqZWN0IGZvcm1hdCB3aXRoIERMTCBmaWxlcy4gIFNlZSB0aGUgbG9uZyBjb21tZW50IGF0IHRoZSB0b3Agb2YKKwkgICMgdGVzdHMvYmluZGlyLmF0IGZvciBmdWxsIGRldGFpbHMuCisJICB0ZGxuYW1lPSRkbG5hbWUKKwkgIGNhc2UgJGhvc3QsJG91dHB1dCwkaW5zdGFsbGVkLCRtb2R1bGUsJGRsbmFtZSBpbgorCSAgICAqY3lnd2luKiwqbGFpLHllcyxubywqLmRsbCB8ICptaW5ndyosKmxhaSx5ZXMsbm8sKi5kbGwgfCAqY2VnY2MqLCpsYWkseWVzLG5vLCouZGxsKQorCSAgICAgICMgSWYgYSAtYmluZGlyIGFyZ3VtZW50IHdhcyBzdXBwbGllZCwgcGxhY2UgdGhlIGRsbCB0aGVyZS4KKwkgICAgICBpZiB0ZXN0ICJ4JGJpbmRpciIgIT0geCA7CisJICAgICAgdGhlbgorCQlmdW5jX3JlbGF0aXZlX3BhdGggIiRpbnN0YWxsX2xpYmRpciIgIiRiaW5kaXIiCisJCXRkbG5hbWU9JGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQkZGxuYW1lCisJICAgICAgZWxzZQorCQkjIE90aGVyd2lzZSBmYWxsIGJhY2sgb24gaGV1cmlzdGljLgorCQl0ZGxuYW1lPS4uL2Jpbi8kZGxuYW1lCisJICAgICAgZmkKKwkgICAgICA7OworCSAgZXNhYworCSAgJEVDSE8gPiAkb3V0cHV0ICJcCisjICRvdXRwdXRuYW1lIC0gYSBsaWJ0b29sIGxpYnJhcnkgZmlsZQorIyBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OCisjCisjIFBsZWFzZSBETyBOT1QgZGVsZXRlIHRoaXMgZmlsZSEKKyMgSXQgaXMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHRoZSBsaWJyYXJ5LgorCisjIFRoZSBuYW1lIHRoYXQgd2UgY2FuIGRsb3BlbigzKS4KK2RsbmFtZT0nJHRkbG5hbWUnCisKKyMgTmFtZXMgb2YgdGhpcyBsaWJyYXJ5LgorbGlicmFyeV9uYW1lcz0nJGxpYnJhcnlfbmFtZXMnCisKKyMgVGhlIG5hbWUgb2YgdGhlIHN0YXRpYyBhcmNoaXZlLgorb2xkX2xpYnJhcnk9JyRvbGRfbGlicmFyeScKKworIyBMaW5rZXIgZmxhZ3MgdGhhdCBjYW4gbm90IGdvIGluIGRlcGVuZGVuY3lfbGlicy4KK2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9JyRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncycKKworIyBMaWJyYXJpZXMgdGhhdCB0aGlzIG9uZSBkZXBlbmRzIHVwb24uCitkZXBlbmRlbmN5X2xpYnM9JyRkZXBlbmRlbmN5X2xpYnMnCisKKyMgTmFtZXMgb2YgYWRkaXRpb25hbCB3ZWFrIGxpYnJhcmllcyBwcm92aWRlZCBieSB0aGlzIGxpYnJhcnkKK3dlYWtfbGlicmFyeV9uYW1lcz0nJHdlYWtfbGlicycKKworIyBWZXJzaW9uIGluZm9ybWF0aW9uIGZvciAkbGlibmFtZS4KK2N1cnJlbnQ9JGN1cnJlbnQKK2FnZT0kYWdlCityZXZpc2lvbj0kcmV2aXNpb24KKworIyBJcyB0aGlzIGFuIGFscmVhZHkgaW5zdGFsbGVkIGxpYnJhcnk/CitpbnN0YWxsZWQ9JGluc3RhbGxlZAorCisjIFNob3VsZCB3ZSB3YXJuIGFib3V0IHBvcnRhYmlsaXR5IHdoZW4gbGlua2luZyBhZ2FpbnN0IC1tb2R1bGVzPworc2hvdWxkbm90bGluaz0kbW9kdWxlCisKKyMgRmlsZXMgdG8gZGxvcGVuL2RscHJlb3BlbgorZGxvcGVuPSckZGxmaWxlcycKK2RscHJlb3Blbj0nJGRscHJlZmlsZXMnCisKKyMgRGlyZWN0b3J5IHRoYXQgdGhpcyBsaWJyYXJ5IG5lZWRzIHRvIGJlIGluc3RhbGxlZCBpbjoKK2xpYmRpcj0nJGluc3RhbGxfbGliZGlyJyIKKwkgIGlmIHRlc3QgIiRpbnN0YWxsZWQiID0gbm8gJiYgdGVzdCAiJG5lZWRfcmVsaW5rIiA9IHllczsgdGhlbgorCSAgICAkRUNITyA+PiAkb3V0cHV0ICJcCityZWxpbmtfY29tbWFuZD1cIiRyZWxpbmtfY29tbWFuZFwiIgorCSAgZmkKKwlkb25lCisgICAgICB9CisKKyAgICAgICMgRG8gYSBzeW1ib2xpYyBsaW5rIHNvIHRoYXQgdGhlIGxpYnRvb2wgYXJjaGl2ZSBjYW4gYmUgZm91bmQgaW4KKyAgICAgICMgTERfTElCUkFSWV9QQVRIIGJlZm9yZSB0aGUgcHJvZ3JhbSBpcyBpbnN0YWxsZWQuCisgICAgICBmdW5jX3Nob3dfZXZhbCAnKCBjZCAiJG91dHB1dF9vYmpkaXIiICYmICRSTSAiJG91dHB1dG5hbWUiICYmICRMTl9TICIuLi8kb3V0cHV0bmFtZSIgIiRvdXRwdXRuYW1lIiApJyAnZXhpdCAkPycKKyAgICAgIDs7CisgICAgZXNhYworICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworfQorCit7IHRlc3QgIiRvcHRfbW9kZSIgPSBsaW5rIHx8IHRlc3QgIiRvcHRfbW9kZSIgPSByZWxpbms7IH0gJiYKKyAgICBmdW5jX21vZGVfbGluayAkezErIiRAIn0KKworCisjIGZ1bmNfbW9kZV91bmluc3RhbGwgYXJnLi4uCitmdW5jX21vZGVfdW5pbnN0YWxsICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIFJNPSIkbm9ub3B0IgorICAgIGZpbGVzPQorICAgIHJtZm9yY2U9CisgICAgZXhpdF9zdGF0dXM9MAorCisgICAgIyBUaGlzIHZhcmlhYmxlIHRlbGxzIHdyYXBwZXIgc2NyaXB0cyBqdXN0IHRvIHNldCB2YXJpYWJsZXMgcmF0aGVyCisgICAgIyB0aGFuIHJ1bm5pbmcgdGhlaXIgcHJvZ3JhbXMuCisgICAgbGlidG9vbF9pbnN0YWxsX21hZ2ljPSIkbWFnaWMiCisKKyAgICBmb3IgYXJnCisgICAgZG8KKyAgICAgIGNhc2UgJGFyZyBpbgorICAgICAgLWYpIGZ1bmNfYXBwZW5kIFJNICIgJGFyZyI7IHJtZm9yY2U9eWVzIDs7CisgICAgICAtKikgZnVuY19hcHBlbmQgUk0gIiAkYXJnIiA7OworICAgICAgKikgZnVuY19hcHBlbmQgZmlsZXMgIiAkYXJnIiA7OworICAgICAgZXNhYworICAgIGRvbmUKKworICAgIHRlc3QgLXogIiRSTSIgJiYgXAorICAgICAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGFuIFJNIHByb2dyYW0iCisKKyAgICBybWRpcnM9CisKKyAgICBmb3IgZmlsZSBpbiAkZmlsZXM7IGRvCisgICAgICBmdW5jX2Rpcm5hbWUgIiRmaWxlIiAiIiAiLiIKKyAgICAgIGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisgICAgICBpZiB0ZXN0ICJYJGRpciIgPSBYLjsgdGhlbgorCW9kaXI9IiRvYmpkaXIiCisgICAgICBlbHNlCisJb2Rpcj0iJGRpci8kb2JqZGlyIgorICAgICAgZmkKKyAgICAgIGZ1bmNfYmFzZW5hbWUgIiRmaWxlIgorICAgICAgbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorICAgICAgdGVzdCAiJG9wdF9tb2RlIiA9IHVuaW5zdGFsbCAmJiBvZGlyPSIkZGlyIgorCisgICAgICAjIFJlbWVtYmVyIG9kaXIgZm9yIHJlbW92YWwgbGF0ZXIsIGJlaW5nIGNhcmVmdWwgdG8gYXZvaWQgZHVwbGljYXRlcworICAgICAgaWYgdGVzdCAiJG9wdF9tb2RlIiA9IGNsZWFuOyB0aGVuCisJY2FzZSAiICRybWRpcnMgIiBpbgorCSAgKiIgJG9kaXIgIiopIDs7CisJICAqKSBmdW5jX2FwcGVuZCBybWRpcnMgIiAkb2RpciIgOzsKKwllc2FjCisgICAgICBmaQorCisgICAgICAjIERvbid0IGVycm9yIGlmIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3QgYW5kIHJtIC1mIHdhcyB1c2VkLgorICAgICAgaWYgeyB0ZXN0IC1MICIkZmlsZSI7IH0gPi9kZXYvbnVsbCAyPiYxIHx8CisJIHsgdGVzdCAtaCAiJGZpbGUiOyB9ID4vZGV2L251bGwgMj4mMSB8fAorCSB0ZXN0IC1mICIkZmlsZSI7IHRoZW4KKwk6CisgICAgICBlbGlmIHRlc3QgLWQgIiRmaWxlIjsgdGhlbgorCWV4aXRfc3RhdHVzPTEKKwljb250aW51ZQorICAgICAgZWxpZiB0ZXN0ICIkcm1mb3JjZSIgPSB5ZXM7IHRoZW4KKwljb250aW51ZQorICAgICAgZmkKKworICAgICAgcm1maWxlcz0iJGZpbGUiCisKKyAgICAgIGNhc2UgJG5hbWUgaW4KKyAgICAgICoubGEpCisJIyBQb3NzaWJseSBhIGxpYnRvb2wgYXJjaGl2ZSwgc28gdmVyaWZ5IGl0LgorCWlmIGZ1bmNfbGFsaWJfcCAiJGZpbGUiOyB0aGVuCisJICBmdW5jX3NvdXJjZSAkZGlyLyRuYW1lCisKKwkgICMgRGVsZXRlIHRoZSBsaWJ0b29sIGxpYnJhcmllcyBhbmQgc3ltbGlua3MuCisJICBmb3IgbiBpbiAkbGlicmFyeV9uYW1lczsgZG8KKwkgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRuIgorCSAgZG9uZQorCSAgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IiAmJiBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJG9sZF9saWJyYXJ5IgorCisJICBjYXNlICIkb3B0X21vZGUiIGluCisJICBjbGVhbikKKwkgICAgY2FzZSAiICRsaWJyYXJ5X25hbWVzICIgaW4KKwkgICAgKiIgJGRsbmFtZSAiKikgOzsKKwkgICAgKikgdGVzdCAtbiAiJGRsbmFtZSIgJiYgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRkbG5hbWUiIDs7CisJICAgIGVzYWMKKwkgICAgdGVzdCAtbiAiJGxpYmRpciIgJiYgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRuYW1lICRvZGlyLyR7bmFtZX1pIgorCSAgICA7OworCSAgdW5pbnN0YWxsKQorCSAgICBpZiB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyI7IHRoZW4KKwkgICAgICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgcG9zdHVuaW5zdGFsbCBjb21tYW5kcy4KKwkgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJHBvc3R1bmluc3RhbGxfY21kcyIgJ3Rlc3QgIiRybWZvcmNlIiA9IHllcyB8fCBleGl0X3N0YXR1cz0xJworCSAgICBmaQorCisJICAgIGlmIHRlc3QgLW4gIiRvbGRfbGlicmFyeSI7IHRoZW4KKwkgICAgICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgb2xkX3Bvc3R1bmluc3RhbGwgY29tbWFuZHMuCisJICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIiAndGVzdCAiJHJtZm9yY2UiID0geWVzIHx8IGV4aXRfc3RhdHVzPTEnCisJICAgIGZpCisJICAgICMgRklYTUU6IHNob3VsZCByZWluc3RhbGwgdGhlIGJlc3QgcmVtYWluaW5nIHNoYXJlZCBsaWJyYXJ5LgorCSAgICA7OworCSAgZXNhYworCWZpCisJOzsKKworICAgICAgKi5sbykKKwkjIFBvc3NpYmx5IGEgbGlidG9vbCBvYmplY3QsIHNvIHZlcmlmeSBpdC4KKwlpZiBmdW5jX2xhbGliX3AgIiRmaWxlIjsgdGhlbgorCisJICAjIFJlYWQgdGhlIC5sbyBmaWxlCisJICBmdW5jX3NvdXJjZSAkZGlyLyRuYW1lCisKKwkgICMgQWRkIFBJQyBvYmplY3QgdG8gdGhlIGxpc3Qgb2YgZmlsZXMgdG8gcmVtb3ZlLgorCSAgaWYgdGVzdCAtbiAiJHBpY19vYmplY3QiICYmCisJICAgICB0ZXN0ICIkcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgorCSAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJGRpci8kcGljX29iamVjdCIKKwkgIGZpCisKKwkgICMgQWRkIG5vbi1QSUMgb2JqZWN0IHRvIHRoZSBsaXN0IG9mIGZpbGVzIHRvIHJlbW92ZS4KKwkgIGlmIHRlc3QgLW4gIiRub25fcGljX29iamVjdCIgJiYKKwkgICAgIHRlc3QgIiRub25fcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgorCSAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJGRpci8kbm9uX3BpY19vYmplY3QiCisJICBmaQorCWZpCisJOzsKKworICAgICAgKikKKwlpZiB0ZXN0ICIkb3B0X21vZGUiID0gY2xlYW4gOyB0aGVuCisJICBub2V4ZW5hbWU9JG5hbWUKKwkgIGNhc2UgJGZpbGUgaW4KKwkgICouZXhlKQorCSAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRmaWxlIgorCSAgICBmaWxlPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkbmFtZSIKKwkgICAgbm9leGVuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgICAgIyAkZmlsZSB3aXRoIC5leGUgaGFzIGFscmVhZHkgYmVlbiBhZGRlZCB0byBybWZpbGVzLAorCSAgICAjIGFkZCAkZmlsZSB3aXRob3V0IC5leGUKKwkgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRmaWxlIgorCSAgICA7OworCSAgZXNhYworCSAgIyBEbyBhIHRlc3QgdG8gc2VlIGlmIHRoaXMgaXMgYSBsaWJ0b29sIHByb2dyYW0uCisJICBpZiBmdW5jX2x0d3JhcHBlcl9wICIkZmlsZSI7IHRoZW4KKwkgICAgaWYgZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wICIkZmlsZSI7IHRoZW4KKwkgICAgICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lICIkZmlsZSIKKwkgICAgICByZWxpbmtfY29tbWFuZD0KKwkgICAgICBmdW5jX3NvdXJjZSAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQKKwkgICAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0IgorCSAgICBlbHNlCisJICAgICAgcmVsaW5rX2NvbW1hbmQ9CisJICAgICAgZnVuY19zb3VyY2UgJGRpci8kbm9leGVuYW1lCisJICAgIGZpCisKKwkgICAgIyBub3RlICRuYW1lIHN0aWxsIGNvbnRhaW5zIC5leGUgaWYgaXQgd2FzIGluICRmaWxlIG9yaWdpbmFsbHkKKwkgICAgIyBhcyBkb2VzIHRoZSB2ZXJzaW9uIG9mICRmaWxlIHRoYXQgd2FzIGFkZGVkIGludG8gJHJtZmlsZXMKKwkgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRuYW1lICRvZGlyLyR7bmFtZX1TLiR7b2JqZXh0fSIKKwkgICAgaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgPSB5ZXMgJiYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgorCSAgICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci9sdC0kbmFtZSIKKwkgICAgZmkKKwkgICAgaWYgdGVzdCAiWCRub2V4ZW5hbWUiICE9ICJYJG5hbWUiIDsgdGhlbgorCSAgICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci9sdC0ke25vZXhlbmFtZX0uYyIKKwkgICAgZmkKKwkgIGZpCisJZmkKKwk7OworICAgICAgZXNhYworICAgICAgZnVuY19zaG93X2V2YWwgIiRSTSAkcm1maWxlcyIgJ2V4aXRfc3RhdHVzPTEnCisgICAgZG9uZQorCisgICAgIyBUcnkgdG8gcmVtb3ZlIHRoZSAke29iamRpcn1zIGluIHRoZSBkaXJlY3RvcmllcyB3aGVyZSB3ZSBkZWxldGVkIGZpbGVzCisgICAgZm9yIGRpciBpbiAkcm1kaXJzOyBkbworICAgICAgaWYgdGVzdCAtZCAiJGRpciI7IHRoZW4KKwlmdW5jX3Nob3dfZXZhbCAicm1kaXIgJGRpciA+L2Rldi9udWxsIDI+JjEiCisgICAgICBmaQorICAgIGRvbmUKKworICAgIGV4aXQgJGV4aXRfc3RhdHVzCit9CisKK3sgdGVzdCAiJG9wdF9tb2RlIiA9IHVuaW5zdGFsbCB8fCB0ZXN0ICIkb3B0X21vZGUiID0gY2xlYW47IH0gJiYKKyAgICBmdW5jX21vZGVfdW5pbnN0YWxsICR7MSsiJEAifQorCit0ZXN0IC16ICIkb3B0X21vZGUiICYmIHsKKyAgaGVscD0iJGdlbmVyaWNfaGVscCIKKyAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGEgTU9ERSIKK30KKwordGVzdCAteiAiJGV4ZWNfY21kIiAmJiBcCisgIGZ1bmNfZmF0YWxfaGVscCAiaW52YWxpZCBvcGVyYXRpb24gbW9kZSBcYCRvcHRfbW9kZSciCisKK2lmIHRlc3QgLW4gIiRleGVjX2NtZCI7IHRoZW4KKyAgZXZhbCBleGVjICIkZXhlY19jbWQiCisgIGV4aXQgJEVYSVRfRkFJTFVSRQorZmkKKworZXhpdCAkZXhpdF9zdGF0dXMKKworCisjIFRoZSBUQUdzIGJlbG93IGFyZSBkZWZpbmVkIHN1Y2ggdGhhdCB3ZSBuZXZlciBnZXQgaW50byBhIHNpdHVhdGlvbgorIyBpbiB3aGljaCB3ZSBkaXNhYmxlIGJvdGgga2luZHMgb2YgbGlicmFyaWVzLiAgR2l2ZW4gY29uZmxpY3RpbmcKKyMgY2hvaWNlcywgd2UgZ28gZm9yIGEgc3RhdGljIGxpYnJhcnksIHRoYXQgaXMgdGhlIG1vc3QgcG9ydGFibGUsCisjIHNpbmNlIHdlIGNhbid0IHRlbGwgd2hldGhlciBzaGFyZWQgbGlicmFyaWVzIHdlcmUgZGlzYWJsZWQgYmVjYXVzZQorIyB0aGUgdXNlciBhc2tlZCBmb3IgdGhhdCBvciBiZWNhdXNlIHRoZSBwbGF0Zm9ybSBkb2Vzbid0IHN1cHBvcnQKKyMgdGhlbS4gIFRoaXMgaXMgcGFydGljdWxhcmx5IGltcG9ydGFudCBvbiBBSVgsIGJlY2F1c2Ugd2UgZG9uJ3QKKyMgc3VwcG9ydCBoYXZpbmcgYm90aCBzdGF0aWMgYW5kIHNoYXJlZCBsaWJyYXJpZXMgZW5hYmxlZCBhdCB0aGUgc2FtZQorIyB0aW1lIG9uIHRoYXQgcGxhdGZvcm0sIHNvIHdlIGRlZmF1bHQgdG8gYSBzaGFyZWQtb25seSBjb25maWd1cmF0aW9uLgorIyBJZiBhIGRpc2FibGUtc2hhcmVkIHRhZyBpcyBnaXZlbiwgd2UnbGwgZmFsbGJhY2sgdG8gYSBzdGF0aWMtb25seQorIyBjb25maWd1cmF0aW9uLiAgQnV0IHdlJ2xsIG5ldmVyIGdvIGZyb20gc3RhdGljLW9ubHkgdG8gc2hhcmVkLW9ubHkuCisKKyMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogZGlzYWJsZS1zaGFyZWQKK2J1aWxkX2xpYnRvb2xfbGlicz1ubworYnVpbGRfb2xkX2xpYnM9eWVzCisjICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiBkaXNhYmxlLXNoYXJlZAorCisjICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6IGRpc2FibGUtc3RhdGljCitidWlsZF9vbGRfbGlicz1gY2FzZSAkYnVpbGRfbGlidG9vbF9saWJzIGluIHllcykgZWNobyBubzs7ICopIGVjaG8geWVzOzsgZXNhY2AKKyMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6IGRpc2FibGUtc3RhdGljCisKKyMgTG9jYWwgVmFyaWFibGVzOgorIyBtb2RlOnNoZWxsLXNjcmlwdAorIyBzaC1pbmRlbnRhdGlvbjoyCisjIEVuZDoKKyMgdmk6c3c9MgorCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvbWFuL01ha2VmaWxlLmFtIGIvYXZhaGktMC42LjMxL21hbi9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzgyNjdjCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL21hbi9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDE1NCBAQAorIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKyMKKyMgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyMgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyMgVVNBLgorCitwa2dzeXNjb25mZGlyPSQoc3lzY29uZmRpcikvYXZhaGkKK3NlcnZpY2VkaXI9JChwa2dzeXNjb25mZGlyKS9zZXJ2aWNlcworCitpZiBCVUlMRF9NQU5QQUdFUworCittYW5fTUFOUyA9IFwKKwlhdmFoaS1kYWVtb24uOCBcCisJYXZhaGktZG5zY29uZmQuOCBcCisJYXZhaGktZGFlbW9uLmNvbmYuNSBcCisJYXZhaGktZG5zY29uZmQuYWN0aW9uLjggXAorCWF2YWhpLnNlcnZpY2UuNSBcCisJYXZhaGkuaG9zdHMuNQorCitub2luc3RfREFUQSA9IFwKKwlhdmFoaS1icm93c2UuMS54bWwgXAorCWF2YWhpLXB1Ymxpc2guMS54bWwgXAorCWF2YWhpLXJlc29sdmUuMS54bWwgXAorCWF2YWhpLXNldC1ob3N0LW5hbWUuMS54bWwgXAorCWF2YWhpLWRhZW1vbi44LnhtbCBcCisJYXZhaGktZGlzY292ZXIuMS54bWwgXAorCWF2YWhpLWJvb2ttYXJrcy4xLnhtbCBcCisJYXZhaGktZG5zY29uZmQuOC54bWwgXAorCWF2YWhpLWRhZW1vbi5jb25mLjUueG1sIFwKKwlhdmFoaS1kbnNjb25mZC5hY3Rpb24uOC54bWwgXAorCWF2YWhpLnNlcnZpY2UuNS54bWwgXAorCWF2YWhpLmhvc3RzLjUueG1sIFwKKwlhdmFoaS1hdXRvaXBkLjgueG1sIFwKKwlhdmFoaS1hdXRvaXBkLmFjdGlvbi44LnhtbCBcCisJYnNzaC4xLnhtbAorCitDTEVBTkZJTEVTID0gXAorCSQobm9pbnN0X0RBVEEpCisKK2lmIEhBVkVfREJVUworCittYW5fTUFOUyArPSBcCisJYXZhaGktYnJvd3NlLjEgXAorCWF2YWhpLXJlc29sdmUuMSBcCisJYXZhaGktcHVibGlzaC4xIFwKKwlhdmFoaS1zZXQtaG9zdC1uYW1lLjEKKworaWYgSEFWRV9HVEsKK21hbl9NQU5TICs9IFwKKwlic3NoLjEKK2VuZGlmCisKK2lmIEhBVkVfUFlUSE9OCittYW5fTUFOUyArPSBcCisJYXZhaGktYm9va21hcmtzLjEKK2lmIEhBVkVfR1RLCittYW5fTUFOUyArPSBcCisJYXZhaGktZGlzY292ZXIuMQorZW5kaWYKK2VuZGlmCitlbmRpZgorCitpZiBFTkFCTEVfQVVUT0lQRAoraWYgSEFWRV9MSUJEQUVNT04KKworbWFuX01BTlMgKz0gXAorCWF2YWhpLWF1dG9pcGQuOCBcCisJYXZhaGktYXV0b2lwZC5hY3Rpb24uOAorCitlbmRpZgorZW5kaWYKKworJS54bWw6ICUueG1sLmluIE1ha2VmaWxlCisJJChBTV9WX0dFTikgc2VkIC1lICdzLEBwa2dzeXNjb25mZGlyXEAsJChwa2dzeXNjb25mZGlyKSxnJyBcCisJCS1lICdzLEBzZXJ2aWNlZGlyXEAsJChzZXJ2aWNlZGlyKSxnJyBcCisJCS1lICdzLEBQQUNLQUdFX0JVR1JFUE9SVFxALCQoUEFDS0FHRV9CVUdSRVBPUlQpLGcnIFwKKwkJLWUgJ3MsQFBBQ0tBR0VfVVJMXEAsJChQQUNLQUdFX1VSTCksZycgJDwgPiAkQAorCitpZiBVU0VfWE1MVE9NQU4KKworQ0xFQU5GSUxFUyArPSAkKG1hbl9NQU5TKQorCislLjE6ICUuMS54bWwgTWFrZWZpbGUKKwkkKEFNX1ZfR0VOKXhtbHRvbWFuICQ8ID4gJEAKKworJS41OiAlLjUueG1sIE1ha2VmaWxlCisJJChBTV9WX0dFTil4bWx0b21hbiAkPCA+ICRACisKKyUuODogJS44LnhtbCBNYWtlZmlsZQorCSQoQU1fVl9HRU4peG1sdG9tYW4gJDwgPiAkQAorCit4bWxsaW50OiAkKG5vaW5zdF9EQVRBKQorCWZvciBmIGluICQobm9pbnN0X0RBVEEpIDsgZG8gXAorCQkJeG1sbGludCAtLW5vb3V0IC0tdmFsaWQgIiQkZiIgfHwgZXhpdCAxIDsgXAorCWRvbmUKKworZW5kaWYKKworZW5kaWYKKworRVhUUkFfRElTVCA9IFwKKwkkKG1hbl9NQU5TKSBcCisJYXZhaGktYnJvd3NlLjEueG1sLmluIFwKKwlhdmFoaS1wdWJsaXNoLjEueG1sLmluIFwKKwlhdmFoaS1yZXNvbHZlLjEueG1sLmluIFwKKwlhdmFoaS1zZXQtaG9zdC1uYW1lLjEueG1sLmluIFwKKwlhdmFoaS1kYWVtb24uOC54bWwuaW4gXAorCWF2YWhpLWRpc2NvdmVyLjEueG1sLmluIFwKKwlhdmFoaS1ib29rbWFya3MuMS54bWwuaW4gXAorCWF2YWhpLWRuc2NvbmZkLjgueG1sLmluIFwKKwlhdmFoaS1kYWVtb24uY29uZi41LnhtbC5pbiBcCisJYXZhaGktZG5zY29uZmQuYWN0aW9uLjgueG1sLmluIFwKKwlhdmFoaS5zZXJ2aWNlLjUueG1sLmluIFwKKwlhdmFoaS5ob3N0cy41LnhtbC5pbiBcCisJYXZhaGktYXV0b2lwZC5hY3Rpb24uOC54bWwuaW4gXAorCWF2YWhpLWF1dG9pcGQuOC54bWwuaW4gXAorCWJzc2guMS54bWwuaW4gXAorCXhtbHRvbWFuLmNzcyBcCisJeG1sdG9tYW4ueHNsIFwKKwl4bWx0b21hbi5kdGQKKworCitpZiBIQVZFX0RCVVMKKworQlNTSF9MTiA9CitpZiBIQVZFX0dUSworaWYgSEFWRV9HTElCCitCU1NIX0xOICs9ICQoTE5fUykgYnNzaC4xIGJ2bmMuMSAmJgorZW5kaWYKK2VuZGlmCitpbnN0YWxsLWV4ZWMtbG9jYWw6CisJbWtkaXIgLXAgJChERVNURElSKS8kKG1hbmRpcikvbWFuMSAmJiBcCisJCWNkICQoREVTVERJUikvJChtYW5kaXIpL21hbjEgJiYgXAorCQlybSAtZiBhdmFoaS1yZXNvbHZlLWhvc3QtbmFtZS4xIGF2YWhpLXJlc29sdmUtYWRkcmVzcy4xIGF2YWhpLWJyb3dzZS1kb21haW5zLjEgYXZhaGktcHVibGlzaC1hZGRyZXNzLjEgYXZhaGktcHVibGlzaC1zZXJ2aWNlLjEgYnZuYy4xICYmIFwKKwkJJChCU1NIX0xOKSBcCisJCSQoTE5fUykgYXZhaGktcmVzb2x2ZS4xIGF2YWhpLXJlc29sdmUtaG9zdC1uYW1lLjEgJiYgXAorCQkkKExOX1MpIGF2YWhpLXJlc29sdmUuMSBhdmFoaS1yZXNvbHZlLWFkZHJlc3MuMSAmJiBcCisJCSQoTE5fUykgYXZhaGktYnJvd3NlLjEgYXZhaGktYnJvd3NlLWRvbWFpbnMuMSAmJiBcCisJCSQoTE5fUykgYXZhaGktcHVibGlzaC4xIGF2YWhpLXB1Ymxpc2gtYWRkcmVzcy4xICYmIFwKKwkJJChMTl9TKSBhdmFoaS1wdWJsaXNoLjEgYXZhaGktcHVibGlzaC1zZXJ2aWNlLjEKKworCitlbmRpZgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL21hbi9NYWtlZmlsZS5pbiBiL2F2YWhpLTAuNi4zMS9tYW4vTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVmZjgzNQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9tYW4vTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw3ODUgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEuMyBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKyMKKyMgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyMgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyMgVVNBLgorCitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitAQlVJTERfTUFOUEFHRVNfVFJVRUBASEFWRV9EQlVTX1RSVUVAYW1fX2FwcGVuZF8xID0gXAorQEJVSUxEX01BTlBBR0VTX1RSVUVAQEhBVkVfREJVU19UUlVFQAlhdmFoaS1icm93c2UuMSBcCitAQlVJTERfTUFOUEFHRVNfVFJVRUBASEFWRV9EQlVTX1RSVUVACWF2YWhpLXJlc29sdmUuMSBcCitAQlVJTERfTUFOUEFHRVNfVFJVRUBASEFWRV9EQlVTX1RSVUVACWF2YWhpLXB1Ymxpc2guMSBcCitAQlVJTERfTUFOUEFHRVNfVFJVRUBASEFWRV9EQlVTX1RSVUVACWF2YWhpLXNldC1ob3N0LW5hbWUuMQorCitAQlVJTERfTUFOUEFHRVNfVFJVRUBASEFWRV9EQlVTX1RSVUVAQEhBVkVfR1RLX1RSVUVAYW1fX2FwcGVuZF8yID0gXAorQEJVSUxEX01BTlBBR0VTX1RSVUVAQEhBVkVfREJVU19UUlVFQEBIQVZFX0dUS19UUlVFQAlic3NoLjEKKworQEJVSUxEX01BTlBBR0VTX1RSVUVAQEhBVkVfREJVU19UUlVFQEBIQVZFX1BZVEhPTl9UUlVFQGFtX19hcHBlbmRfMyA9IFwKK0BCVUlMRF9NQU5QQUdFU19UUlVFQEBIQVZFX0RCVVNfVFJVRUBASEFWRV9QWVRIT05fVFJVRUAJYXZhaGktYm9va21hcmtzLjEKKworQEJVSUxEX01BTlBBR0VTX1RSVUVAQEhBVkVfREJVU19UUlVFQEBIQVZFX0dUS19UUlVFQEBIQVZFX1BZVEhPTl9UUlVFQGFtX19hcHBlbmRfNCA9IFwKK0BCVUlMRF9NQU5QQUdFU19UUlVFQEBIQVZFX0RCVVNfVFJVRUBASEFWRV9HVEtfVFJVRUBASEFWRV9QWVRIT05fVFJVRUAJYXZhaGktZGlzY292ZXIuMQorCitAQlVJTERfTUFOUEFHRVNfVFJVRUBARU5BQkxFX0FVVE9JUERfVFJVRUBASEFWRV9MSUJEQUVNT05fVFJVRUBhbV9fYXBwZW5kXzUgPSBcCitAQlVJTERfTUFOUEFHRVNfVFJVRUBARU5BQkxFX0FVVE9JUERfVFJVRUBASEFWRV9MSUJEQUVNT05fVFJVRUAJYXZhaGktYXV0b2lwZC44IFwKK0BCVUlMRF9NQU5QQUdFU19UUlVFQEBFTkFCTEVfQVVUT0lQRF9UUlVFQEBIQVZFX0xJQkRBRU1PTl9UUlVFQAlhdmFoaS1hdXRvaXBkLmFjdGlvbi44CisKK0BCVUlMRF9NQU5QQUdFU19UUlVFQEBVU0VfWE1MVE9NQU5fVFJVRUBhbV9fYXBwZW5kXzYgPSAkKG1hbl9NQU5TKQorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dMSUJfVFJVRUBASEFWRV9HVEtfVFJVRUBhbV9fYXBwZW5kXzcgPSAkKExOX1MpIGJzc2guMSBidm5jLjEgJiYKK3N1YmRpciA9IG1hbgorRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vYWN4X3B0aHJlYWQubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2djY19zdGFja19wcm90ZWN0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9nY2NfdmlzaWJpbGl0eS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vaW50bHRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2ludHJvc3BlY3Rpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2x0b3B0aW9ucy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHR2ZXJzaW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbmxzLm00ICQodG9wX3NyY2RpcikvY29tbW9uL3B5dGhvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9hY2luY2x1ZGUubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vZG94eWdlbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCithbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCithbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICIgJEA7CitBTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCithbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfYXRfMCA9IEAKK1NPVVJDRVMgPQorRElTVF9TT1VSQ0VTID0KK2FtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOworYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKKyAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAorICAgICopIGY9JCRwOzsgXAorICBlc2FjOworYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOworYW1fX2luc3RhbGxfbWF4ID0gNDAKK2FtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCisgIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKK2FtX19ub2Jhc2Vfc3RyaXAgPSBcCisgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgorYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAorICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAorICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAorICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCisgICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAorICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAorICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKK2FtX19iYXNlX2xpc3QgPSBcCisgIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCisgIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKK2FtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIgPSB7IFwKKyAgdGVzdCAteiAiJCRmaWxlcyIgXAorICAgIHx8IHsgdGVzdCAhIC1kICIkJGRpciIgJiYgdGVzdCAhIC1mICIkJGRpciIgJiYgdGVzdCAhIC1yICIkJGRpciI7IH0gXAorICAgIHx8IHsgZWNobyAiICggY2QgJyQkZGlyJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKKyAgICAgICAgICQoYW1fX2NkKSAiJCRkaXIiICYmIHJtIC1mICQkZmlsZXM7IH07IFwKKyAgfQorbWFuMWRpciA9ICQobWFuZGlyKS9tYW4xCithbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQobWFuMWRpcikiICIkKERFU1RESVIpJChtYW41ZGlyKSIgXAorCSIkKERFU1RESVIpJChtYW44ZGlyKSIKK21hbjVkaXIgPSAkKG1hbmRpcikvbWFuNQorbWFuOGRpciA9ICQobWFuZGlyKS9tYW44CitOUk9GRiA9IG5yb2ZmCitNQU5TID0gJChtYW5fTUFOUykKK0RBVEEgPSAkKG5vaW5zdF9EQVRBKQorRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FMTF9MSU5HVUFTID0gQEFMTF9MSU5HVUFTQAorQU1UQVIgPSBAQU1UQVJACitBTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKK0FSID0gQEFSQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FWQUhJX0FVVE9JUERfR1JPVVAgPSBAQVZBSElfQVVUT0lQRF9HUk9VUEAKK0FWQUhJX0FVVE9JUERfVVNFUiA9IEBBVkFISV9BVVRPSVBEX1VTRVJACitBVkFISV9HUk9VUCA9IEBBVkFISV9HUk9VUEAKK0FWQUhJX1BSSVZfQUNDRVNTX0dST1VQID0gQEFWQUhJX1BSSVZfQUNDRVNTX0dST1VQQAorQVZBSElfVVNFUiA9IEBBVkFISV9VU0VSQAorQVdLID0gQEFXS0AKK0NBVEFMT0dTID0gQENBVEFMT0dTQAorQ0FUT0JKRVhUID0gQENBVE9CSkVYVEAKK0NDID0gQENDQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RBVEFESVJOQU1FID0gQERBVEFESVJOQU1FQAorREJVU19DRkxBR1MgPSBAREJVU19DRkxBR1NACitEQlVTX0xJQlMgPSBAREJVU19MSUJTQAorREJVU19TWVNURU1fQlVTX0RFRkFVTFRfQUREUkVTUyA9IEBEQlVTX1NZU1RFTV9CVVNfREVGQVVMVF9BRERSRVNTQAorREJVU19TWVNfRElSID0gQERCVVNfU1lTX0RJUkAKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitETExUT09MID0gQERMTFRPT0xACitET1hZR0VOX1BBUEVSX1NJWkUgPSBARE9YWUdFTl9QQVBFUl9TSVpFQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitEWF9DT05GSUcgPSBARFhfQ09ORklHQAorRFhfRE9DRElSID0gQERYX0RPQ0RJUkAKK0RYX0RPVCA9IEBEWF9ET1RACitEWF9ET1hZR0VOID0gQERYX0RPWFlHRU5ACitEWF9EVklQUyA9IEBEWF9EVklQU0AKK0RYX0VHUkVQID0gQERYX0VHUkVQQAorRFhfRU5WID0gQERYX0VOVkAKK0RYX0ZMQUdfY2hpID0gQERYX0ZMQUdfY2hpQAorRFhfRkxBR19jaG0gPSBARFhfRkxBR19jaG1ACitEWF9GTEFHX2RvYyA9IEBEWF9GTEFHX2RvY0AKK0RYX0ZMQUdfZG90ID0gQERYX0ZMQUdfZG90QAorRFhfRkxBR19odG1sID0gQERYX0ZMQUdfaHRtbEAKK0RYX0ZMQUdfbWFuID0gQERYX0ZMQUdfbWFuQAorRFhfRkxBR19wZGYgPSBARFhfRkxBR19wZGZACitEWF9GTEFHX3BzID0gQERYX0ZMQUdfcHNACitEWF9GTEFHX3J0ZiA9IEBEWF9GTEFHX3J0ZkAKK0RYX0ZMQUdfeG1sID0gQERYX0ZMQUdfeG1sQAorRFhfSEhDID0gQERYX0hIQ0AKK0RYX0xBVEVYID0gQERYX0xBVEVYQAorRFhfTUFLRUlOREVYID0gQERYX01BS0VJTkRFWEAKK0RYX1BERkxBVEVYID0gQERYX1BERkxBVEVYQAorRFhfUEVSTCA9IEBEWF9QRVJMQAorRFhfUFJPSkVDVCA9IEBEWF9QUk9KRUNUQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFWEVFWFQgPSBARVhFRVhUQAorRkdSRVAgPSBARkdSRVBACitHQUNVVElMID0gQEdBQ1VUSUxACitHRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAorR0xJQjIwX0NGTEFHUyA9IEBHTElCMjBfQ0ZMQUdTQAorR0xJQjIwX0xJQlMgPSBAR0xJQjIwX0xJQlNACitHTU9GSUxFUyA9IEBHTU9GSUxFU0AKK0dNU0dGTVQgPSBAR01TR0ZNVEAKK0dPQkpFQ1RfQ0ZMQUdTID0gQEdPQkpFQ1RfQ0ZMQUdTQAorR09CSkVDVF9MSUJTID0gQEdPQkpFQ1RfTElCU0AKK0dSRVAgPSBAR1JFUEAKK0dUSzIwX0NGTEFHUyA9IEBHVEsyMF9DRkxBR1NACitHVEsyMF9MSUJTID0gQEdUSzIwX0xJQlNACitHVEszMF9DRkxBR1MgPSBAR1RLMzBfQ0ZMQUdTQAorR1RLMzBfTElCUyA9IEBHVEszMF9MSUJTQAorSE9XTF9DT01QQVRfVkVSU0lPTiA9IEBIT1dMX0NPTVBBVF9WRVJTSU9OQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitJTlNUT0JKRVhUID0gQElOU1RPQkpFWFRACitJTlRMTElCUyA9IEBJTlRMTElCU0AKK0lOVExUT09MX0VYVFJBQ1QgPSBASU5UTFRPT0xfRVhUUkFDVEAKK0lOVExUT09MX01FUkdFID0gQElOVExUT09MX01FUkdFQAorSU5UTFRPT0xfUEVSTCA9IEBJTlRMVE9PTF9QRVJMQAorSU5UTFRPT0xfVVBEQVRFID0gQElOVExUT09MX1VQREFURUAKK0lOVFJPU1BFQ1RJT05fQ0ZMQUdTID0gQElOVFJPU1BFQ1RJT05fQ0ZMQUdTQAorSU5UUk9TUEVDVElPTl9DT01QSUxFUiA9IEBJTlRST1NQRUNUSU9OX0NPTVBJTEVSQAorSU5UUk9TUEVDVElPTl9HRU5FUkFURSA9IEBJTlRST1NQRUNUSU9OX0dFTkVSQVRFQAorSU5UUk9TUEVDVElPTl9HSVJESVIgPSBASU5UUk9TUEVDVElPTl9HSVJESVJACitJTlRST1NQRUNUSU9OX0xJQlMgPSBASU5UUk9TUEVDVElPTl9MSUJTQAorSU5UUk9TUEVDVElPTl9NQUtFRklMRSA9IEBJTlRST1NQRUNUSU9OX01BS0VGSUxFQAorSU5UUk9TUEVDVElPTl9TQ0FOTkVSID0gQElOVFJPU1BFQ1RJT05fU0NBTk5FUkAKK0lOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUiA9IEBJTlRST1NQRUNUSU9OX1RZUEVMSUJESVJACitMRCA9IEBMREAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQkFWQUhJX0NMSUVOVF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ0xJRU5UX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPTU1PTl9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ09NTU9OX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPTVBBVF9IT1dMX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DT01QQVRfSE9XTF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9DT01QQVRfTElCRE5TX1NEX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DT01QQVRfTElCRE5TX1NEX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPUkVfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NPUkVfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfR0xJQl9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfR0xJQl9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9HT0JKRUNUX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9HT0JKRUNUX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX1FUM19WRVJTSU9OX0lORk8gPSBATElCQVZBSElfUVQzX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX1FUNF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfUVQ0X1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX1VJX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9VSV9WRVJTSU9OX0lORk9ACitMSUJEQUVNT05fQ0ZMQUdTID0gQExJQkRBRU1PTl9DRkxBR1NACitMSUJEQUVNT05fTElCUyA9IEBMSUJEQUVNT05fTElCU0AKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKK0xOX1MgPSBATE5fU0AKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKK01DUyA9IEBNQ1NACitNREFTU0VNQkxFUiA9IEBNREFTU0VNQkxFUkAKK01LRElSX1AgPSBATUtESVJfUEAKK01LSU5TVEFMTERJUlMgPSBATUtJTlNUQUxMRElSU0AKK01PQ19RVDMgPSBATU9DX1FUM0AKK01PQ19RVDQgPSBATU9DX1FUNEAKK01PTk9ET0NFUiA9IEBNT05PRE9DRVJACitNT05PRE9DX0NGTEFHUyA9IEBNT05PRE9DX0NGTEFHU0AKK01PTk9ET0NfRElSID0gQE1PTk9ET0NfRElSQAorTU9OT0RPQ19MSUJTID0gQE1PTk9ET0NfTElCU0AKK01TR0ZNVCA9IEBNU0dGTVRACitNU0dGTVRfT1BUUyA9IEBNU0dGTVRfT1BUU0AKK01TR01FUkdFID0gQE1TR01FUkdFQAorTk0gPSBATk1ACitOTUVESVQgPSBATk1FRElUQAorT0JKRFVNUCA9IEBPQkpEVU1QQAorT0JKRVhUID0gQE9CSkVYVEAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQS0dfQ09ORklHX0xJQkRJUiA9IEBQS0dfQ09ORklHX0xJQkRJUkAKK1BLR19DT05GSUdfUEFUSCA9IEBQS0dfQ09ORklHX1BBVEhACitQT0ZJTEVTID0gQFBPRklMRVNACitQT1NVQiA9IEBQT1NVQkAKK1BPX0lOX0RBVEFESVJfRkFMU0UgPSBAUE9fSU5fREFUQURJUl9GQUxTRUAKK1BPX0lOX0RBVEFESVJfVFJVRSA9IEBQT19JTl9EQVRBRElSX1RSVUVACitQVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACitQVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKK1BUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACitQWVRIT04gPSBAUFlUSE9OQAorUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKK1BZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACitQWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACitQWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKK1FUM19DRkxBR1MgPSBAUVQzX0NGTEFHU0AKK1FUM19MSUJTID0gQFFUM19MSUJTQAorUVQ0X0NGTEFHUyA9IEBRVDRfQ0ZMQUdTQAorUVQ0X0xJQlMgPSBAUVQ0X0xJQlNACitSQU5MSUIgPSBAUkFOTElCQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTVE9XID0gQFNUT1dACitTVFJJUCA9IEBTVFJJUEAKK1VTRV9OTFMgPSBAVVNFX05MU0AKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1ZJU0lCSUxJVFlfSElEREVOX0NGTEFHUyA9IEBWSVNJQklMSVRZX0hJRERFTl9DRkxBR1NACitYR0VUVEVYVCA9IEBYR0VUVEVYVEAKK1hNTF9DRkxBR1MgPSBAWE1MX0NGTEFHU0AKK1hNTF9MSUJTID0gQFhNTF9MSUJTQAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorYWNfY3RfQVIgPSBAYWNfY3RfQVJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithY3hfcHRocmVhZF9jb25maWcgPSBAYWN4X3B0aHJlYWRfY29uZmlnQAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACithdmFoaV9ydW50aW1lX2RpciA9IEBhdmFoaV9ydW50aW1lX2RpckAKK2F2YWhpX3NvY2tldCA9IEBhdmFoaV9zb2NrZXRACithdmFoaWxvY2FsZWRpciA9IEBhdmFoaWxvY2FsZWRpckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraGF2ZV9wa2dfY29uZmlnID0gQGhhdmVfcGtnX2NvbmZpZ0AKK2hhdmVfeG1sdG9tYW4gPSBAaGF2ZV94bWx0b21hbkAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitpbnRlcmZhY2VzZGlyID0gQGludGVyZmFjZXNkaXJACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKK3BrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitweWV4ZWNkaXIgPSBAcHlleGVjZGlyQAorcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3N5c3RlbWRzeXN0ZW11bml0ZGlyID0gQHN5c3RlbWRzeXN0ZW11bml0ZGlyQAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK3RvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKK3RvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitwa2dzeXNjb25mZGlyID0gJChzeXNjb25mZGlyKS9hdmFoaQorc2VydmljZWRpciA9ICQocGtnc3lzY29uZmRpcikvc2VydmljZXMKK0BCVUlMRF9NQU5QQUdFU19UUlVFQG1hbl9NQU5TID0gYXZhaGktZGFlbW9uLjggYXZhaGktZG5zY29uZmQuOCBcCitAQlVJTERfTUFOUEFHRVNfVFJVRUAJYXZhaGktZGFlbW9uLmNvbmYuNSBcCitAQlVJTERfTUFOUEFHRVNfVFJVRUAJYXZhaGktZG5zY29uZmQuYWN0aW9uLjggYXZhaGkuc2VydmljZS41IFwKK0BCVUlMRF9NQU5QQUdFU19UUlVFQAlhdmFoaS5ob3N0cy41ICQoYW1fX2FwcGVuZF8xKSBcCitAQlVJTERfTUFOUEFHRVNfVFJVRUAJJChhbV9fYXBwZW5kXzIpICQoYW1fX2FwcGVuZF8zKSBcCitAQlVJTERfTUFOUEFHRVNfVFJVRUAJJChhbV9fYXBwZW5kXzQpICQoYW1fX2FwcGVuZF81KQorQEJVSUxEX01BTlBBR0VTX1RSVUVAbm9pbnN0X0RBVEEgPSBcCitAQlVJTERfTUFOUEFHRVNfVFJVRUAJYXZhaGktYnJvd3NlLjEueG1sIFwKK0BCVUlMRF9NQU5QQUdFU19UUlVFQAlhdmFoaS1wdWJsaXNoLjEueG1sIFwKK0BCVUlMRF9NQU5QQUdFU19UUlVFQAlhdmFoaS1yZXNvbHZlLjEueG1sIFwKK0BCVUlMRF9NQU5QQUdFU19UUlVFQAlhdmFoaS1zZXQtaG9zdC1uYW1lLjEueG1sIFwKK0BCVUlMRF9NQU5QQUdFU19UUlVFQAlhdmFoaS1kYWVtb24uOC54bWwgXAorQEJVSUxEX01BTlBBR0VTX1RSVUVACWF2YWhpLWRpc2NvdmVyLjEueG1sIFwKK0BCVUlMRF9NQU5QQUdFU19UUlVFQAlhdmFoaS1ib29rbWFya3MuMS54bWwgXAorQEJVSUxEX01BTlBBR0VTX1RSVUVACWF2YWhpLWRuc2NvbmZkLjgueG1sIFwKK0BCVUlMRF9NQU5QQUdFU19UUlVFQAlhdmFoaS1kYWVtb24uY29uZi41LnhtbCBcCitAQlVJTERfTUFOUEFHRVNfVFJVRUAJYXZhaGktZG5zY29uZmQuYWN0aW9uLjgueG1sIFwKK0BCVUlMRF9NQU5QQUdFU19UUlVFQAlhdmFoaS5zZXJ2aWNlLjUueG1sIFwKK0BCVUlMRF9NQU5QQUdFU19UUlVFQAlhdmFoaS5ob3N0cy41LnhtbCBcCitAQlVJTERfTUFOUEFHRVNfVFJVRUAJYXZhaGktYXV0b2lwZC44LnhtbCBcCitAQlVJTERfTUFOUEFHRVNfVFJVRUAJYXZhaGktYXV0b2lwZC5hY3Rpb24uOC54bWwgXAorQEJVSUxEX01BTlBBR0VTX1RSVUVACWJzc2guMS54bWwKKworQEJVSUxEX01BTlBBR0VTX1RSVUVAQ0xFQU5GSUxFUyA9ICQobm9pbnN0X0RBVEEpICQoYW1fX2FwcGVuZF82KQorRVhUUkFfRElTVCA9IFwKKwkkKG1hbl9NQU5TKSBcCisJYXZhaGktYnJvd3NlLjEueG1sLmluIFwKKwlhdmFoaS1wdWJsaXNoLjEueG1sLmluIFwKKwlhdmFoaS1yZXNvbHZlLjEueG1sLmluIFwKKwlhdmFoaS1zZXQtaG9zdC1uYW1lLjEueG1sLmluIFwKKwlhdmFoaS1kYWVtb24uOC54bWwuaW4gXAorCWF2YWhpLWRpc2NvdmVyLjEueG1sLmluIFwKKwlhdmFoaS1ib29rbWFya3MuMS54bWwuaW4gXAorCWF2YWhpLWRuc2NvbmZkLjgueG1sLmluIFwKKwlhdmFoaS1kYWVtb24uY29uZi41LnhtbC5pbiBcCisJYXZhaGktZG5zY29uZmQuYWN0aW9uLjgueG1sLmluIFwKKwlhdmFoaS5zZXJ2aWNlLjUueG1sLmluIFwKKwlhdmFoaS5ob3N0cy41LnhtbC5pbiBcCisJYXZhaGktYXV0b2lwZC5hY3Rpb24uOC54bWwuaW4gXAorCWF2YWhpLWF1dG9pcGQuOC54bWwuaW4gXAorCWJzc2guMS54bWwuaW4gXAorCXhtbHRvbWFuLmNzcyBcCisJeG1sdG9tYW4ueHNsIFwKKwl4bWx0b21hbi5kdGQKKworQEhBVkVfREJVU19UUlVFQEJTU0hfTE4gPSAkKGFtX19hcHBlbmRfNykKK2FsbDogYWxsLWFtCisKKy5TVUZGSVhFUzoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCisJICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduIG1hbi9NYWtlZmlsZSc7IFwKKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gbWFuL01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKK2luc3RhbGwtbWFuMTogJChtYW5fTUFOUykKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwl0ZXN0IC16ICIkKG1hbjFkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChtYW4xZGlyKSIKKwlAbGlzdD0nJzsgdGVzdCAtbiAiJChtYW4xZGlyKSIgfHwgZXhpdCAwOyBcCisJeyBmb3IgaSBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkaSI7IGRvbmU7IFwKKwlsMj0nJChtYW5fTUFOUyknOyBmb3IgaSBpbiAkJGwyOyBkbyBlY2hvICIkJGkiOyBkb25lIHwgXAorCSAgc2VkIC1uICcvXC4xW2Etel0qJCQvcCc7IFwKKwl9IHwgd2hpbGUgcmVhZCBwOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkcDsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKKwkgIGVjaG8gIiQkZCQkcCI7IGVjaG8gIiQkcCI7IFwKKwlkb25lIHwgXAorCXNlZCAtZSAnbjtzLC4qLywsO3A7aDtzLC4qXC4sLDtzLF5bXjFdWzAtOWEtel0qJCQsMSw7eCcgXAorCSAgICAgIC1lICdzLFwuWzAtOWEtel0qJCQsLDskKHRyYW5zZm9ybSk7RztzLFxuLC4sJyB8IFwKKwlzZWQgJ047TjtzLFxuLCAsZycgfCB7IFwKKwlsaXN0PTsgd2hpbGUgcmVhZCBmaWxlIGJhc2UgaW5zdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRiYXNlIiA9ICIkJGluc3QiOyB0aGVuIGxpc3Q9IiQkbGlzdCAkJGZpbGUiOyBlbHNlIFwKKwkgICAgZWNobyAiICQoSU5TVEFMTF9EQVRBKSAnJCRmaWxlJyAnJChERVNURElSKSQobWFuMWRpcikvJCRpbnN0JyI7IFwKKwkgICAgJChJTlNUQUxMX0RBVEEpICIkJGZpbGUiICIkKERFU1RESVIpJChtYW4xZGlyKS8kJGluc3QiIHx8IGV4aXQgJCQ/OyBcCisJICBmaTsgXAorCWRvbmU7IFwKKwlmb3IgaSBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkaSI7IGRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAorCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKKwkgIHRlc3QgLXogIiQkZmlsZXMiIHx8IHsgXAorCSAgICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgJyQoREVTVERJUikkKG1hbjFkaXIpJyI7IFwKKwkgICAgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgIiQoREVTVERJUikkKG1hbjFkaXIpIiB8fCBleGl0ICQkPzsgfTsgXAorCWRvbmU7IH0KKwordW5pbnN0YWxsLW1hbjE6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJzsgdGVzdCAtbiAiJChtYW4xZGlyKSIgfHwgZXhpdCAwOyBcCisJZmlsZXM9YHsgZm9yIGkgaW4gJCRsaXN0OyBkbyBlY2hvICIkJGkiOyBkb25lOyBcCisJbDI9JyQobWFuX01BTlMpJzsgZm9yIGkgaW4gJCRsMjsgZG8gZWNobyAiJCRpIjsgZG9uZSB8IFwKKwkgIHNlZCAtbiAnL1wuMVthLXpdKiQkL3AnOyBcCisJfSB8IHNlZCAtZSAncywuKi8sLDtoO3MsLipcLiwsO3MsXlteMV1bMC05YS16XSokJCwxLDt4JyBcCisJICAgICAgLWUgJ3MsXC5bMC05YS16XSokJCwsOyQodHJhbnNmb3JtKTtHO3MsXG4sLiwnYDsgXAorCWRpcj0nJChERVNURElSKSQobWFuMWRpciknOyAkKGFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIpCitpbnN0YWxsLW1hbjU6ICQobWFuX01BTlMpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJdGVzdCAteiAiJChtYW41ZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQobWFuNWRpcikiCisJQGxpc3Q9Jyc7IHRlc3QgLW4gIiQobWFuNWRpcikiIHx8IGV4aXQgMDsgXAorCXsgZm9yIGkgaW4gJCRsaXN0OyBkbyBlY2hvICIkJGkiOyBkb25lOyBcCisJbDI9JyQobWFuX01BTlMpJzsgZm9yIGkgaW4gJCRsMjsgZG8gZWNobyAiJCRpIjsgZG9uZSB8IFwKKwkgIHNlZCAtbiAnL1wuNVthLXpdKiQkL3AnOyBcCisJfSB8IHdoaWxlIHJlYWQgcDsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJHA7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICBlY2hvICIkJGQkJHAiOyBlY2hvICIkJHAiOyBcCisJZG9uZSB8IFwKKwlzZWQgLWUgJ247cywuKi8sLDtwO2g7cywuKlwuLCw7cyxeW141XVswLTlhLXpdKiQkLDUsO3gnIFwKKwkgICAgICAtZSAncyxcLlswLTlhLXpdKiQkLCw7JCh0cmFuc2Zvcm0pO0c7cyxcbiwuLCcgfCBcCisJc2VkICdOO047cyxcbiwgLGcnIHwgeyBcCisJbGlzdD07IHdoaWxlIHJlYWQgZmlsZSBiYXNlIGluc3Q7IGRvIFwKKwkgIGlmIHRlc3QgIiQkYmFzZSIgPSAiJCRpbnN0IjsgdGhlbiBsaXN0PSIkJGxpc3QgJCRmaWxlIjsgZWxzZSBcCisJICAgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJyQkZmlsZScgJyQoREVTVERJUikkKG1hbjVkaXIpLyQkaW5zdCciOyBcCisJICAgICQoSU5TVEFMTF9EQVRBKSAiJCRmaWxlIiAiJChERVNURElSKSQobWFuNWRpcikvJCRpbnN0IiB8fCBleGl0ICQkPzsgXAorCSAgZmk7IFwKKwlkb25lOyBcCisJZm9yIGkgaW4gJCRsaXN0OyBkbyBlY2hvICIkJGkiOyBkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKKwl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCisJICB0ZXN0IC16ICIkJGZpbGVzIiB8fCB7IFwKKwkgICAgZWNobyAiICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICckKERFU1RESVIpJChtYW41ZGlyKSciOyBcCisJICAgICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICIkKERFU1RESVIpJChtYW41ZGlyKSIgfHwgZXhpdCAkJD87IH07IFwKKwlkb25lOyB9CisKK3VuaW5zdGFsbC1tYW41OgorCUAkKE5PUk1BTF9VTklOU1RBTEwpCisJQGxpc3Q9Jyc7IHRlc3QgLW4gIiQobWFuNWRpcikiIHx8IGV4aXQgMDsgXAorCWZpbGVzPWB7IGZvciBpIGluICQkbGlzdDsgZG8gZWNobyAiJCRpIjsgZG9uZTsgXAorCWwyPSckKG1hbl9NQU5TKSc7IGZvciBpIGluICQkbDI7IGRvIGVjaG8gIiQkaSI7IGRvbmUgfCBcCisJICBzZWQgLW4gJy9cLjVbYS16XSokJC9wJzsgXAorCX0gfCBzZWQgLWUgJ3MsLiovLCw7aDtzLC4qXC4sLDtzLF5bXjVdWzAtOWEtel0qJCQsNSw7eCcgXAorCSAgICAgIC1lICdzLFwuWzAtOWEtel0qJCQsLDskKHRyYW5zZm9ybSk7RztzLFxuLC4sJ2A7IFwKKwlkaXI9JyQoREVTVERJUikkKG1hbjVkaXIpJzsgJChhbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyKQoraW5zdGFsbC1tYW44OiAkKG1hbl9NQU5TKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQobWFuOGRpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKG1hbjhkaXIpIgorCUBsaXN0PScnOyB0ZXN0IC1uICIkKG1hbjhkaXIpIiB8fCBleGl0IDA7IFwKKwl7IGZvciBpIGluICQkbGlzdDsgZG8gZWNobyAiJCRpIjsgZG9uZTsgXAorCWwyPSckKG1hbl9NQU5TKSc7IGZvciBpIGluICQkbDI7IGRvIGVjaG8gIiQkaSI7IGRvbmUgfCBcCisJICBzZWQgLW4gJy9cLjhbYS16XSokJC9wJzsgXAorCX0gfCB3aGlsZSByZWFkIHA7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRwOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAorCSAgZWNobyAiJCRkJCRwIjsgZWNobyAiJCRwIjsgXAorCWRvbmUgfCBcCisJc2VkIC1lICduO3MsLiovLCw7cDtoO3MsLipcLiwsO3MsXlteOF1bMC05YS16XSokJCw4LDt4JyBcCisJICAgICAgLWUgJ3MsXC5bMC05YS16XSokJCwsOyQodHJhbnNmb3JtKTtHO3MsXG4sLiwnIHwgXAorCXNlZCAnTjtOO3MsXG4sICxnJyB8IHsgXAorCWxpc3Q9OyB3aGlsZSByZWFkIGZpbGUgYmFzZSBpbnN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJGJhc2UiID0gIiQkaW5zdCI7IHRoZW4gbGlzdD0iJCRsaXN0ICQkZmlsZSI7IGVsc2UgXAorCSAgICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICckJGZpbGUnICckKERFU1RESVIpJChtYW44ZGlyKS8kJGluc3QnIjsgXAorCSAgICAkKElOU1RBTExfREFUQSkgIiQkZmlsZSIgIiQoREVTVERJUikkKG1hbjhkaXIpLyQkaW5zdCIgfHwgZXhpdCAkJD87IFwKKwkgIGZpOyBcCisJZG9uZTsgXAorCWZvciBpIGluICQkbGlzdDsgZG8gZWNobyAiJCRpIjsgZG9uZSB8ICQoYW1fX2Jhc2VfbGlzdCkgfCBcCisJd2hpbGUgcmVhZCBmaWxlczsgZG8gXAorCSAgdGVzdCAteiAiJCRmaWxlcyIgfHwgeyBcCisJICAgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAnJChERVNURElSKSQobWFuOGRpciknIjsgXAorCSAgICAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAiJChERVNURElSKSQobWFuOGRpcikiIHx8IGV4aXQgJCQ/OyB9OyBcCisJZG9uZTsgfQorCit1bmluc3RhbGwtbWFuODoKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PScnOyB0ZXN0IC1uICIkKG1hbjhkaXIpIiB8fCBleGl0IDA7IFwKKwlmaWxlcz1geyBmb3IgaSBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkaSI7IGRvbmU7IFwKKwlsMj0nJChtYW5fTUFOUyknOyBmb3IgaSBpbiAkJGwyOyBkbyBlY2hvICIkJGkiOyBkb25lIHwgXAorCSAgc2VkIC1uICcvXC44W2Etel0qJCQvcCc7IFwKKwl9IHwgc2VkIC1lICdzLC4qLywsO2g7cywuKlwuLCw7cyxeW144XVswLTlhLXpdKiQkLDgsO3gnIFwKKwkgICAgICAtZSAncyxcLlswLTlhLXpdKiQkLCw7JCh0cmFuc2Zvcm0pO0c7cyxcbiwuLCdgOyBcCisJZGlyPSckKERFU1RESVIpJChtYW44ZGlyKSc7ICQoYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpcikKK3RhZ3M6IFRBR1MKK1RBR1M6CisKK2N0YWdzOiBDVEFHUworQ1RBR1M6CisKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQGxpc3Q9JyQoTUFOUyknOyBpZiB0ZXN0IC1uICIkJGxpc3QiOyB0aGVuIFwKKwkgIGxpc3Q9YGZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICQkcDsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKKwkgICAgaWYgdGVzdCAtZiAiJCRkJCRwIjsgdGhlbiBlY2hvICIkJGQkJHAiOyBlbHNlIDo7IGZpOyBkb25lYDsgXAorCSAgaWYgdGVzdCAtbiAiJCRsaXN0IiAmJiBcCisJICAgIGdyZXAgJ2FiIGhlbHAybWFuIGlzIHJlcXVpcmVkIHRvIGdlbmVyYXRlIHRoaXMgcGFnZScgJCRsaXN0ID4vZGV2L251bGw7IHRoZW4gXAorCSAgICBlY2hvICJlcnJvcjogZm91bmQgbWFuIHBhZ2VzIGNvbnRhaW5pbmcgdGhlIFxgbWlzc2luZyBoZWxwMm1hbicgcmVwbGFjZW1lbnQgdGV4dDoiID4mMjsgXAorCSAgICBncmVwIC1sICdhYiBoZWxwMm1hbiBpcyByZXF1aXJlZCB0byBnZW5lcmF0ZSB0aGlzIHBhZ2UnICQkbGlzdCB8IHNlZCAncy9eLyAgICAgICAgIC8nID4mMjsgXAorCSAgICBlY2hvICIgICAgICAgdG8gZml4IHRoZW0sIGluc3RhbGwgaGVscDJtYW4sIHJlbW92ZSBhbmQgcmVnZW5lcmF0ZSB0aGUgbWFuIHBhZ2VzOyIgPiYyOyBcCisJICAgIGVjaG8gIiAgICAgICB0eXBpY2FsbHkgXGBtYWtlIG1haW50YWluZXItY2xlYW4nIHdpbGwgcmVtb3ZlIHRoZW0iID4mMjsgXAorCSAgICBleGl0IDE7IFwKKwkgIGVsc2UgOjsgZmk7IFwKKwllbHNlIDo7IGZpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUgJChNQU5TKSAkKERBVEEpCitpbnN0YWxsZGlyczoKKwlmb3IgZGlyIGluICIkKERFU1RESVIpJChtYW4xZGlyKSIgIiQoREVTVERJUikkKG1hbjVkaXIpIiAiJChERVNURElSKSQobWFuOGRpcikiOyBkbyBcCisJICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCisJZG9uZQoraW5zdGFsbDogaW5zdGFsbC1hbQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCit1bmluc3RhbGw6IHVuaW5zdGFsbC1hbQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQoraW5zdGFsbC1zdHJpcDoKKwlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICAgICAgaW5zdGFsbDsgXAorCWVsc2UgXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCisJZmkKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ0xFQU5GSUxFUykiIHx8IHJtIC1mICQoQ0xFQU5GSUxFUykKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorQEhBVkVfREJVU19GQUxTRUBpbnN0YWxsLWV4ZWMtbG9jYWw6CitjbGVhbjogY2xlYW4tYW0KKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBtb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tZ2VuZXJpYworCitkdmk6IGR2aS1hbQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtYW0KKworaHRtbC1hbToKKworaW5mbzogaW5mby1hbQorCitpbmZvLWFtOgorCitpbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtbWFuCisKK2luc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQorCitpbnN0YWxsLWR2aS1hbToKKworaW5zdGFsbC1leGVjLWFtOiBpbnN0YWxsLWV4ZWMtbG9jYWwKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOiBpbnN0YWxsLW1hbjEgaW5zdGFsbC1tYW41IGluc3RhbGwtbWFuOAorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLWFtCisKK3BkZi1hbToKKworcHM6IHBzLWFtCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06IHVuaW5zdGFsbC1tYW4KKwordW5pbnN0YWxsLW1hbjogdW5pbnN0YWxsLW1hbjEgdW5pbnN0YWxsLW1hbjUgdW5pbnN0YWxsLW1hbjgKKworLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAorCisuUEhPTlk6IGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIFwKKwlkaXN0Y2xlYW4gZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGRpciBkdmkgXAorCWR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBcCisJaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBcCisJaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWV4ZWMtbG9jYWwgaW5zdGFsbC1odG1sIFwKKwlpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBcCisJaW5zdGFsbC1tYW4xIGluc3RhbGwtbWFuNSBpbnN0YWxsLW1hbjggaW5zdGFsbC1wZGYgXAorCWluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBpbnN0YWxsLXN0cmlwIFwKKwlpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gXAorCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1nZW5lcmljIFwKKwltb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSBcCisJdW5pbnN0YWxsLW1hbiB1bmluc3RhbGwtbWFuMSB1bmluc3RhbGwtbWFuNSB1bmluc3RhbGwtbWFuOAorCisKK0BCVUlMRF9NQU5QQUdFU19UUlVFQCUueG1sOiAlLnhtbC5pbiBNYWtlZmlsZQorQEJVSUxEX01BTlBBR0VTX1RSVUVACSQoQU1fVl9HRU4pIHNlZCAtZSAncyxAcGtnc3lzY29uZmRpclxALCQocGtnc3lzY29uZmRpciksZycgXAorQEJVSUxEX01BTlBBR0VTX1RSVUVACQktZSAncyxAc2VydmljZWRpclxALCQoc2VydmljZWRpciksZycgXAorQEJVSUxEX01BTlBBR0VTX1RSVUVACQktZSAncyxAUEFDS0FHRV9CVUdSRVBPUlRcQCwkKFBBQ0tBR0VfQlVHUkVQT1JUKSxnJyBcCitAQlVJTERfTUFOUEFHRVNfVFJVRUAJCS1lICdzLEBQQUNLQUdFX1VSTFxALCQoUEFDS0FHRV9VUkwpLGcnICQ8ID4gJEAKKworQEJVSUxEX01BTlBBR0VTX1RSVUVAQFVTRV9YTUxUT01BTl9UUlVFQCUuMTogJS4xLnhtbCBNYWtlZmlsZQorQEJVSUxEX01BTlBBR0VTX1RSVUVAQFVTRV9YTUxUT01BTl9UUlVFQAkkKEFNX1ZfR0VOKXhtbHRvbWFuICQ8ID4gJEAKKworQEJVSUxEX01BTlBBR0VTX1RSVUVAQFVTRV9YTUxUT01BTl9UUlVFQCUuNTogJS41LnhtbCBNYWtlZmlsZQorQEJVSUxEX01BTlBBR0VTX1RSVUVAQFVTRV9YTUxUT01BTl9UUlVFQAkkKEFNX1ZfR0VOKXhtbHRvbWFuICQ8ID4gJEAKKworQEJVSUxEX01BTlBBR0VTX1RSVUVAQFVTRV9YTUxUT01BTl9UUlVFQCUuODogJS44LnhtbCBNYWtlZmlsZQorQEJVSUxEX01BTlBBR0VTX1RSVUVAQFVTRV9YTUxUT01BTl9UUlVFQAkkKEFNX1ZfR0VOKXhtbHRvbWFuICQ8ID4gJEAKKworQEJVSUxEX01BTlBBR0VTX1RSVUVAQFVTRV9YTUxUT01BTl9UUlVFQHhtbGxpbnQ6ICQobm9pbnN0X0RBVEEpCitAQlVJTERfTUFOUEFHRVNfVFJVRUBAVVNFX1hNTFRPTUFOX1RSVUVACWZvciBmIGluICQobm9pbnN0X0RBVEEpIDsgZG8gXAorQEJVSUxEX01BTlBBR0VTX1RSVUVAQFVTRV9YTUxUT01BTl9UUlVFQAkJCXhtbGxpbnQgLS1ub291dCAtLXZhbGlkICIkJGYiIHx8IGV4aXQgMSA7IFwKK0BCVUlMRF9NQU5QQUdFU19UUlVFQEBVU0VfWE1MVE9NQU5fVFJVRUAJZG9uZQorQEhBVkVfREJVU19UUlVFQGluc3RhbGwtZXhlYy1sb2NhbDoKK0BIQVZFX0RCVVNfVFJVRUAJbWtkaXIgLXAgJChERVNURElSKS8kKG1hbmRpcikvbWFuMSAmJiBcCitASEFWRV9EQlVTX1RSVUVACQljZCAkKERFU1RESVIpLyQobWFuZGlyKS9tYW4xICYmIFwKK0BIQVZFX0RCVVNfVFJVRUAJCXJtIC1mIGF2YWhpLXJlc29sdmUtaG9zdC1uYW1lLjEgYXZhaGktcmVzb2x2ZS1hZGRyZXNzLjEgYXZhaGktYnJvd3NlLWRvbWFpbnMuMSBhdmFoaS1wdWJsaXNoLWFkZHJlc3MuMSBhdmFoaS1wdWJsaXNoLXNlcnZpY2UuMSBidm5jLjEgJiYgXAorQEhBVkVfREJVU19UUlVFQAkJJChCU1NIX0xOKSBcCitASEFWRV9EQlVTX1RSVUVACQkkKExOX1MpIGF2YWhpLXJlc29sdmUuMSBhdmFoaS1yZXNvbHZlLWhvc3QtbmFtZS4xICYmIFwKK0BIQVZFX0RCVVNfVFJVRUAJCSQoTE5fUykgYXZhaGktcmVzb2x2ZS4xIGF2YWhpLXJlc29sdmUtYWRkcmVzcy4xICYmIFwKK0BIQVZFX0RCVVNfVFJVRUAJCSQoTE5fUykgYXZhaGktYnJvd3NlLjEgYXZhaGktYnJvd3NlLWRvbWFpbnMuMSAmJiBcCitASEFWRV9EQlVTX1RSVUVACQkkKExOX1MpIGF2YWhpLXB1Ymxpc2guMSBhdmFoaS1wdWJsaXNoLWFkZHJlc3MuMSAmJiBcCitASEFWRV9EQlVTX1RSVUVACQkkKExOX1MpIGF2YWhpLXB1Ymxpc2guMSBhdmFoaS1wdWJsaXNoLXNlcnZpY2UuMQorCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvbWFuL2F2YWhpLWF1dG9pcGQuOCBiL2F2YWhpLTAuNi4zMS9tYW4vYXZhaGktYXV0b2lwZC44Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzNDgwNGMKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvbWFuL2F2YWhpLWF1dG9pcGQuOApAQCAtMCwwICsxLDgzIEBACisuVEggYXZhaGktYXV0b2lwZCA4IFVzZXIgTWFudWFscworLlNIIE5BTUUKK2F2YWhpLWF1dG9pcGQgXC0gSVB2NExMIG5ldHdvcmsgYWRkcmVzcyBjb25maWd1cmF0aW9uIGRhZW1vbgorLlNIIFNZTk9QU0lTCitcZkJhdmFoaS1hdXRvaXBkIFtcZklvcHRpb25zXGZCXSBcZklpbnRlcmZhY2VcZkIKKworYXZhaGktYXV0b2lwZCAtLWtpbGxcZkIgXGZJaW50ZXJmYWNlXGZCCisKK2F2YWhpLWF1dG9pcGQgLS1yZWZyZXNoXGZCIFxmSWludGVyZmFjZVxmQgorCithdmFoaS1hdXRvaXBkIC0tY2hlY2tcZkIgXGZJaW50ZXJmYWNlXGZCCitcZjEKKy5TSCBERVNDUklQVElPTgorYXZhaGktYXV0b2lwZCBpbXBsZW1lbnRzIElQdjRMTCwgIkR5bmFtaWMgQ29uZmlndXJhdGlvbiBvZiBJUHY0IExpbmstTG9jYWwgQWRkcmVzc2VzIiAoSUVURiBSRkMzOTI3KSwgYSBwcm90b2NvbCBmb3IgYXV0b21hdGljIElQIGFkZHJlc3MgY29uZmlndXJhdGlvbiBmcm9tIHRoZSBsaW5rLWxvY2FsIDE2OS4yNTQuMC4wLzE2IHJhbmdlIHdpdGhvdXQgdGhlIG5lZWQgZm9yIGEgY2VudHJhbCBzZXJ2ZXIuIEl0IGlzIHByaW1hcmlseSBpbnRlbmRlZCB0byBiZSB1c2VkIGluIGFkLWhvYyBuZXR3b3JrcyB3aGljaCBsYWNrIGEgREhDUCBzZXJ2ZXIuCisKK0lQdjRMTCBpcyBwYXJ0IG9mIHRoZSBaZXJvY29uZiBzdGFjay4KKworYXZhaGktYXV0b2lwZCBjYW4gYmUgdXNlZCBhcyBzdGFuZC1hbG9uZSBhZGRyZXNzIGFsbG9jYXRvciBvciBhcyBwbHVnaW4gZm9yIGEgREhDUCBjbGllbnQgc3VjaCBhcyBJU0MncyBkaGNsaWVudCwgd2hlcmUgaXQgY2FuIGJlIHVzZWQgYXMgZmFsbGJhY2sgc29sdXRpb24gaWYgbm8gREhDUCBzZXJ2ZXIgaXMgZm91bmQuCisKK1RvIGFsbG93IGNvbW11bmljYXRpb24gYmV0d2VlbiBob3N0cyB0aGF0IGhhdmUgb25seSBhbiBJUHY0TEwgYWRkcmVzcyBhc3NpZ25lZCBhbmQgaG9zdHMgdGhhdCBvbmx5IGhhdmUgYSByb3V0YWJsZSBJUCBhZGRyZXNzIGFzc2lnbmVkIHlvdSBtYXkgYWRkIHRoZSBmb2xsb3dpbmcgcm91dGVzIHRvIGJvdGggbmV0d29yayBjb25maWd1cmF0aW9uczoKKworXGZCcm91dGUgYWRkIC1uZXQgMTY5LjI1NC4wLjAgbmV0bWFzayAyNTUuMjU1LjAuMCBkZXYgZXRoMCBtZXRyaWMgOTlcZjEKKworXGZCcm91dGUgYWRkIGRlZmF1bHQgZGV2IGV0aDAgbWV0cmljIDk5XGYxCisKK1NlZSBodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9xYS9xYTIwMDQvcWExMzU3Lmh0bWwgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisuU0ggT1BUSU9OUworLlRQCitcZkItRCB8IC0tZGFlbW9uaXplXGYxCitEYWVtb25pemUgYWZ0ZXIgc3RhcnR1cC4gSW1wbGllcyBcZkItLXN5c2xvZ1xmMS4KKy5UUAorXGZCLWsgfCAtLWtpbGxcZjEKK0tpbGwgYW4gYWxyZWFkeSBydW5uaW5nIGF2YWhpLWF1dG9pcGQgb24gdGhlIHNwZWNpZmllZCBuZXR3b3JrIGludGVyZmFjZS4gKEVxdWl2YWxlbnQgdG8gc2VuZGluZyBhIFNJR1RFUk0pCisuVFAKK1xmQi1yIHwgLS1yZWZyZXNoXGYxCitUZWxsIGFuIGFscmVhZHkgcnVubmluZyBhdmFoaS1hdXRvaXBkIHRvIHJlLWFubm91bmNlIHRoZSBhY3F1aXJlZCBJUCBhZGRyZXNzIG9uIHRoZSBzcGVjaWZpZWQgbmV0d29yayBpbnRlcmZhY2UuIChFcXVpdmFsZW50IHRvIHNlbmRpbmcgYSBTSUdIVVApCisuVFAKK1xmQi1jIHwgLS1jaGVja1xmMQorUmV0dXJuIDAgYXMgcmV0dXJuIGNvZGUgaWYgYXZhaGktYXV0b2lwZCBpcyBhbHJlYWR5IHJ1bm5pbmcgZm9yIHRoZSBzcGVjaWZpZWQgbmV0d29yayBpbnRlcmZhY2UuCisuVFAKK1xmQi1zIHwgLS1zeXNsb2dcZjEKK0xvZyB0byBzeXNsb2cgaW5zdGVhZCBvZiBTVERFUlIuIEltcGxpZWQgYnkgXGZCLS1kYWVtb25pemVcZjEuCisuVFAKK1xmQi0tZGVidWdcZjEKK0VuYWJsZSB2ZXJib3NlIG1vZGUuCisuVFAKK1xmQi0tbm8tZHJvcC1yb290XGYxCitEb24ndCBkcm9wIHJvb3QgcHJpdmlsZWdlcyBhZnRlciBzdGFydHVwLiBXZSByZWNvbW1lbmQgbm90IHRvIHVzZSB0aGlzIG9wdGlvbi4KKy5UUAorXGZCLS1uby1jaHJvb3RcZjEKK0Rvbid0IFxmQmNocm9vdCgyKVxmMSB0aGUgZGFlbW9uLiBUaGlzIG9wdGlvbiBpcyBvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggY2hyb290KCkgc3VwcG9ydC4KKy5UUAorXGZCLVMgfCAtLXN0YXJ0PVxmMQorVHJ5IHRvIGFjcXVpcmUgdGhlIHNwZWNpZmllZCBJUCBhZGRyZXNzLCB3aGljaCBtdXN0IGJlIGZyb20gdGhlIElQdjRMTCByYW5nZSAxNjkuMjU0LjAuMC8xNi4KKy5UUAorXGZCLXcgfCAtLXdhaXRcZjEKK1dhaXQgdW50aWwgYSBJUCBhZGRyZXNzIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBhY3F1aXJlZCBiZWZvcmUgZGV0YWNoaW5nLiBPbmx5IHZhbGlkIGluIGNvbWJpbmF0aW9uIHdpdGggXGZCLS1kYWVtb25pemVcZjEuCisuVFAKK1xmQi0tZm9yY2UtYmluZFxmMQorQWNxdWlyZSBhbiBJUHY0TEwgYWRkcmVzcywgZXZlbiBpZiBhIHJvdXRhYmxlIGFkZHJlc3MgaGFzIGJlZW4gY29uZmlndXJlZCBvbiB0aGUgaW50ZXJmYWNlLgorLlRQCitcZkItLW5vLXByb2MtdGl0bGVcZjEKK0Rvbid0IGNoYW5nZSB0aGUgcHJvY2VzcyBuYW1lIHdoaWxlIHJ1bm5pbmcuIFVubGVzcyB0aGlzIG9wdGlvbiBpcyBzcGVjaWZpZWQgYXZhaGktYXV0b2lwZCB3aWxsIHJlZmxlY3QgaXRzIGN1cnJlbnQgc3RhdGUgYW5kIHRoZSBJUCBhZGRyZXNzIGluIHRoZSBwcm9jZXNzIHRpdGxlLgorLlRQCitcZkItaCB8IC0taGVscFxmMQorU2hvdyBoZWxwLgorLlRQCitcZkItdiB8IC0tdmVyc2lvblxmMQorU2hvdyB2ZXJzaW9uIGluZm9ybWF0aW9uLgorLlNIIEZJTEVTCitcZkkvaG9tZS9sZW5uYXJ0L3RtcC9hdmFoaS9ldGMvYXZhaGkvYXZhaGktYXV0b2lwZC5hY3Rpb25cZjE6IHRoZSBzY3JpcHQgdG8gcnVuIHdoZW4gYW4gSVAgYWRkcmVzcyBhcyBiZWVuIGFjcXVpcmVkIG9yIGlzIGxvc3QuCisuU0ggU0lHTkFMUworXGZJU0lHSU5ULCBTSUdURVJNXGYxOiBhdmFoaS1hdXRvaXBkIHdpbGwgc2h1dGRvd24uIChTYW1lIGFzIFxmQi0ta2lsbFxmMSkKKworXGZJU0lHSFVQXGYxOiBhdmFoaS1hdXRvaXBkIHdpbGwgcmUtYW5ub3VuY2UgdGhlIGFjcXVpcmVkIElQIGFkZHJlc3MuIChTYW1lIGFzIFxmQi0tcmVmcmVzaFxmMSkKKy5TSCBBVVRIT1JTCitUaGUgQXZhaGkgRGV2ZWxvcGVycyA8YXZhaGkgKGF0KSBsaXN0cyAoZG90KSBmcmVlZGVza3RvcCAoZG90KSBvcmc+OyBBdmFoaSBpcyBhdmFpbGFibGUgZnJvbSBcZkJodHRwOi8vYXZhaGkub3JnL1xmMQorLlNIIFNFRSBBTFNPCitcZkJhdXRvaXBkLmFjdGlvbig4KVxmMSwgXGZCZGhjbGllbnQoOClcZjEKKworaHR0cDovL2F2YWhpLm9yZy93aWtpL0F2YWhpQXV0b2lwZCBkb2N1bWVudHMgaG93IGF2YWhpLWF1dG9pcGQgaXMgYmVzdCBwYWNrYWdlZCBhbmQgaW50ZWdyYXRlZCBpbnRvIGRpc3RyaWJ1dGlvbnMuCisuU0ggQ09NTUVOVFMKK1RoaXMgbWFuIHBhZ2Ugd2FzIHdyaXR0ZW4gdXNpbmcgXGZCeG1sMm1hbigxKVxmMSBieSBPbGl2ZXIgS3VydGguCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvbWFuL2F2YWhpLWF1dG9pcGQuOC54bWwuaW4gYi9hdmFoaS0wLjYuMzEvbWFuL2F2YWhpLWF1dG9pcGQuOC54bWwuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzEzN2MzMAotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9tYW4vYXZhaGktYXV0b2lwZC44LnhtbC5pbgpAQCAtMCwwICsxLDE2NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+PCEtLSotbnhtbC0qLS0+Cis8IURPQ1RZUEUgbWFucGFnZSBTWVNURU0gInhtbHRvbWFuLmR0ZCI+Cis8P3htbC1zdHlsZXNoZWV0IHR5cGU9InRleHQveHNsIiBocmVmPSJ4bWx0b21hbi54c2wiID8+CisKKzwhLS0KKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKy0tPgorCisgIDxtYW5wYWdlIG5hbWU9ImF2YWhpLWF1dG9pcGQiIHNlY3Rpb249IjgiIGRlc2M9IklQdjRMTCBuZXR3b3JrIGFkZHJlc3MgY29uZmlndXJhdGlvbiBkYWVtb24iPgorCisJPHN5bm9wc2lzPgorICAgICAgPGNtZD5hdmFoaS1hdXRvaXBkIFs8YXJnPm9wdGlvbnM8L2FyZz5dIDxhcmc+aW50ZXJmYWNlPC9hcmc+PC9jbWQ+CisgICAgICA8Y21kPmF2YWhpLWF1dG9pcGQgPG9wdD4tLWtpbGw8L29wdD4gPGFyZz5pbnRlcmZhY2U8L2FyZz48L2NtZD4KKyAgICAgIDxjbWQ+YXZhaGktYXV0b2lwZCA8b3B0Pi0tcmVmcmVzaDwvb3B0PiA8YXJnPmludGVyZmFjZTwvYXJnPjwvY21kPgorICAgICAgPGNtZD5hdmFoaS1hdXRvaXBkIDxvcHQ+LS1jaGVjazwvb3B0PiA8YXJnPmludGVyZmFjZTwvYXJnPjwvY21kPgorCTwvc3lub3BzaXM+CisKKyAgICA8ZGVzY3JpcHRpb24+CisgICAgICA8cD5hdmFoaS1hdXRvaXBkIGltcGxlbWVudHMgSVB2NExMLCAiRHluYW1pYyBDb25maWd1cmF0aW9uIG9mCisgICAgICBJUHY0IExpbmstTG9jYWwgQWRkcmVzc2VzIiAoSUVURiBSRkMzOTI3KSwgYSBwcm90b2NvbCBmb3IKKyAgICAgIGF1dG9tYXRpYyBJUCBhZGRyZXNzIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgbGluay1sb2NhbAorICAgICAgMTY5LjI1NC4wLjAvMTYgcmFuZ2Ugd2l0aG91dCB0aGUgbmVlZCBmb3IgYSBjZW50cmFsIHNlcnZlci4gSXQKKyAgICAgIGlzIHByaW1hcmlseSBpbnRlbmRlZCB0byBiZSB1c2VkIGluIGFkLWhvYyBuZXR3b3JrcyB3aGljaCBsYWNrIGEKKyAgICAgIERIQ1Agc2VydmVyLjwvcD4KKworICAgICAgPHA+SVB2NExMIGlzIHBhcnQgb2YgdGhlIFplcm9jb25mIHN0YWNrLjwvcD4KKworICAgICAgPHA+YXZhaGktYXV0b2lwZCBjYW4gYmUgdXNlZCBhcyBzdGFuZC1hbG9uZSBhZGRyZXNzIGFsbG9jYXRvcgorICAgICAgb3IgYXMgcGx1Z2luIGZvciBhIERIQ1AgY2xpZW50IHN1Y2ggYXMgSVNDJ3MgZGhjbGllbnQsIHdoZXJlIGl0CisgICAgICBjYW4gYmUgdXNlZCBhcyBmYWxsYmFjayBzb2x1dGlvbiBpZiBubyBESENQIHNlcnZlciBpcyBmb3VuZC48L3A+CisKKyAgICAgIDxwPlRvIGFsbG93IGNvbW11bmljYXRpb24gYmV0d2VlbiBob3N0cyB0aGF0IGhhdmUgb25seSBhbiBJUHY0TEwKKyAgICAgIGFkZHJlc3MgYXNzaWduZWQgYW5kIGhvc3RzIHRoYXQgb25seSBoYXZlIGEgcm91dGFibGUgSVAgYWRkcmVzcworICAgICAgYXNzaWduZWQgeW91IG1heSBhZGQgdGhlIGZvbGxvd2luZyByb3V0ZXMgdG8gYm90aCBuZXR3b3JrCisgICAgICBjb25maWd1cmF0aW9uczo8L3A+CisKKyAgICAgIDxwPjxvcHQ+cm91dGUgYWRkIC1uZXQgMTY5LjI1NC4wLjAgbmV0bWFzayAyNTUuMjU1LjAuMCBkZXYgZXRoMCBtZXRyaWMgOTk8L29wdD48L3A+CisgICAgICA8cD48b3B0PnJvdXRlIGFkZCBkZWZhdWx0IGRldiBldGgwIG1ldHJpYyA5OTwvb3B0PjwvcD4KKworICAgICAgPHA+U2VlIGh0dHA6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL3FhL3FhMjAwNC9xYTEzNTcuaHRtbCBmb3IgbW9yZSBpbmZvcm1hdGlvbi48L3A+CisJPC9kZXNjcmlwdGlvbj4KKworCTxvcHRpb25zPgorCisJICA8b3B0aW9uPgorCQk8cD48b3B0Pi1EIHwgLS1kYWVtb25pemU8L29wdD48L3A+CisJCTxvcHRkZXNjPjxwPkRhZW1vbml6ZSBhZnRlciBzdGFydHVwLiBJbXBsaWVzIDxvcHQ+LS1zeXNsb2c8L29wdD4uPC9wPjwvb3B0ZGVzYz4KKwkgIDwvb3B0aW9uPgorCisJICA8b3B0aW9uPgorCQk8cD48b3B0Pi1rIHwgLS1raWxsPC9vcHQ+PC9wPgorCQk8b3B0ZGVzYz48cD5LaWxsIGFuIGFscmVhZHkgcnVubmluZyBhdmFoaS1hdXRvaXBkIG9uIHRoZSBzcGVjaWZpZWQgbmV0d29yayBpbnRlcmZhY2UuIChFcXVpdmFsZW50IHRvIHNlbmRpbmcgYSBTSUdURVJNKTwvcD48L29wdGRlc2M+CisJICA8L29wdGlvbj4KKworCSAgPG9wdGlvbj4KKwkJPHA+PG9wdD4tciB8IC0tcmVmcmVzaDwvb3B0PjwvcD4KKwkJPG9wdGRlc2M+PHA+VGVsbCBhbiBhbHJlYWR5IHJ1bm5pbmcgYXZhaGktYXV0b2lwZCB0byByZS1hbm5vdW5jZSB0aGUgYWNxdWlyZWQgSVAgYWRkcmVzcyBvbiB0aGUgc3BlY2lmaWVkIG5ldHdvcmsgaW50ZXJmYWNlLiAoRXF1aXZhbGVudCB0byBzZW5kaW5nIGEgU0lHSFVQKTwvcD48L29wdGRlc2M+CisJICA8L29wdGlvbj4KKworCSAgPG9wdGlvbj4KKwkJPHA+PG9wdD4tYyB8IC0tY2hlY2s8L29wdD48L3A+CisJCTxvcHRkZXNjPjxwPlJldHVybiAwIGFzIHJldHVybiBjb2RlIGlmIGF2YWhpLWF1dG9pcGQgaXMgYWxyZWFkeSBydW5uaW5nIGZvciB0aGUgc3BlY2lmaWVkIG5ldHdvcmsgaW50ZXJmYWNlLjwvcD48L29wdGRlc2M+CisJICA8L29wdGlvbj4KKworICAgICAgPG9wdGlvbj4KKyAgICAgICAgPHA+PG9wdD4tcyB8IC0tc3lzbG9nPC9vcHQ+PC9wPgorICAgICAgICA8b3B0ZGVzYz48cD5Mb2cgdG8gc3lzbG9nIGluc3RlYWQgb2YgU1RERVJSLiBJbXBsaWVkIGJ5IDxvcHQ+LS1kYWVtb25pemU8L29wdD4uPC9wPjwvb3B0ZGVzYz4KKyAgICAgIDwvb3B0aW9uPgorCisgICAgICA8b3B0aW9uPgorICAgICAgICA8cD48b3B0Pi0tZGVidWc8L29wdD48L3A+CisgICAgICAgIDxvcHRkZXNjPjxwPkVuYWJsZSB2ZXJib3NlIG1vZGUuPC9wPjwvb3B0ZGVzYz4KKyAgICAgIDwvb3B0aW9uPgorCisgICAgICA8b3B0aW9uPgorICAgICAgICA8cD48b3B0Pi0tbm8tZHJvcC1yb290PC9vcHQ+PC9wPgorICAgICAgICA8b3B0ZGVzYz48cD5Eb24ndCBkcm9wIHJvb3QgcHJpdmlsZWdlcyBhZnRlciBzdGFydHVwLiBXZSByZWNvbW1lbmQgbm90IHRvIHVzZSB0aGlzIG9wdGlvbi48L3A+PC9vcHRkZXNjPgorICAgICAgPC9vcHRpb24+CisKKyAgICAgIDxvcHRpb24+CisgICAgICAgIDxwPjxvcHQ+LS1uby1jaHJvb3Q8L29wdD48L3A+CisgICAgICAgIDxvcHRkZXNjPjxwPkRvbid0IDxtYW5yZWYgc2VjdGlvbj0iMiIgbmFtZT0iY2hyb290Ii8+IHRoZSBkYWVtb24uIFRoaXMgb3B0aW9uIGlzIG9ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCBjaHJvb3QoKSBzdXBwb3J0LjwvcD48L29wdGRlc2M+CisgICAgICA8L29wdGlvbj4KKworICAgICAgPG9wdGlvbj4KKyAgICAgICAgPHA+PG9wdD4tUyB8IC0tc3RhcnQ9PC9vcHQ+PC9wPgorICAgICAgICA8b3B0ZGVzYz48cD5UcnkgdG8gYWNxdWlyZSB0aGUgc3BlY2lmaWVkIElQIGFkZHJlc3MsIHdoaWNoIG11c3QgYmUgZnJvbSB0aGUgSVB2NExMIHJhbmdlIDE2OS4yNTQuMC4wLzE2LjwvcD48L29wdGRlc2M+CisgICAgICA8L29wdGlvbj4KKworICAgICAgPG9wdGlvbj4KKyAgICAgICAgPHA+PG9wdD4tdyB8IC0td2FpdDwvb3B0PjwvcD4KKyAgICAgICAgPG9wdGRlc2M+PHA+V2FpdCB1bnRpbCBhIElQIGFkZHJlc3MgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGFjcXVpcmVkIGJlZm9yZSBkZXRhY2hpbmcuIE9ubHkgdmFsaWQgaW4gY29tYmluYXRpb24gd2l0aCA8b3B0Pi0tZGFlbW9uaXplPC9vcHQ+LjwvcD48L29wdGRlc2M+CisgICAgICA8L29wdGlvbj4KKworICAgICAgPG9wdGlvbj4KKyAgICAgICAgPHA+PG9wdD4tLWZvcmNlLWJpbmQ8L29wdD48L3A+CisgICAgICAgIDxvcHRkZXNjPjxwPkFjcXVpcmUgYW4gSVB2NExMIGFkZHJlc3MsIGV2ZW4gaWYgYSByb3V0YWJsZSBhZGRyZXNzIGhhcyBiZWVuIGNvbmZpZ3VyZWQgb24gdGhlIGludGVyZmFjZS48L3A+PC9vcHRkZXNjPgorICAgICAgPC9vcHRpb24+CisKKyAgICAgIDxvcHRpb24+CisgICAgICAgIDxwPjxvcHQ+LS1uby1wcm9jLXRpdGxlPC9vcHQ+PC9wPgorICAgICAgICA8b3B0ZGVzYz48cD5Eb24ndCBjaGFuZ2UgdGhlIHByb2Nlc3MgbmFtZSB3aGlsZQorICAgICAgICBydW5uaW5nLiBVbmxlc3MgdGhpcyBvcHRpb24gaXMgc3BlY2lmaWVkIGF2YWhpLWF1dG9pcGQgd2lsbAorICAgICAgICByZWZsZWN0IGl0cyBjdXJyZW50IHN0YXRlIGFuZCB0aGUgSVAgYWRkcmVzcyBpbiB0aGUgcHJvY2VzcworICAgICAgICB0aXRsZS48L3A+PC9vcHRkZXNjPgorICAgICAgPC9vcHRpb24+CisKKwkgIDxvcHRpb24+CisJCTxwPjxvcHQ+LWggfCAtLWhlbHA8L29wdD48L3A+CisJCTxvcHRkZXNjPjxwPlNob3cgaGVscC48L3A+PC9vcHRkZXNjPgorCSAgPC9vcHRpb24+CisKKwkgIDxvcHRpb24+CisJCTxwPjxvcHQ+LXYgfCAtLXZlcnNpb248L29wdD48L3A+CisJCTxvcHRkZXNjPjxwPlNob3cgdmVyc2lvbiBpbmZvcm1hdGlvbi48L3A+PC9vcHRkZXNjPgorCSAgPC9vcHRpb24+CisKKwk8L29wdGlvbnM+CisKKyAgICA8c2VjdGlvbiBuYW1lPSJGaWxlcyI+CisKKyAgICAgIDxwPjxmaWxlPkBwa2dzeXNjb25mZGlyQC9hdmFoaS1hdXRvaXBkLmFjdGlvbjwvZmlsZT46IHRoZSBzY3JpcHQgdG8gcnVuIHdoZW4gYW4gSVAgYWRkcmVzcyBhcyBiZWVuIGFjcXVpcmVkIG9yIGlzIGxvc3QuPC9wPgorCisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gbmFtZT0iU2lnbmFscyI+CisgICAgICA8cD48YXJnPlNJR0lOVCwgU0lHVEVSTTwvYXJnPjogYXZhaGktYXV0b2lwZCB3aWxsIHNodXRkb3duLiAoU2FtZSBhcyA8b3B0Pi0ta2lsbDwvb3B0Pik8L3A+CisgICAgICA8cD48YXJnPlNJR0hVUDwvYXJnPjogYXZhaGktYXV0b2lwZCB3aWxsIHJlLWFubm91bmNlIHRoZSBhY3F1aXJlZCBJUCBhZGRyZXNzLiAoU2FtZSBhcyA8b3B0Pi0tcmVmcmVzaDwvb3B0Pik8L3A+CisgICAgPC9zZWN0aW9uPgorCisJPHNlY3Rpb24gbmFtZT0iQXV0aG9ycyI+CisJICA8cD5UaGUgQXZhaGkgRGV2ZWxvcGVycyAmbHQ7QFBBQ0tBR0VfQlVHUkVQT1JUQCZndDs7IEF2YWhpIGlzCisJICBhdmFpbGFibGUgZnJvbSA8dXJsIGhyZWY9IkBQQUNLQUdFX1VSTEAiLz48L3A+CisJPC9zZWN0aW9uPgorCisJPHNlY3Rpb24gbmFtZT0iU2VlIGFsc28iPgorCSAgPHA+CisgICAgICAgIDxtYW5yZWYgbmFtZT0iYXV0b2lwZC5hY3Rpb24iIHNlY3Rpb249IjgiLz4sIDxtYW5yZWYgbmFtZT0iZGhjbGllbnQiIHNlY3Rpb249IjgiLz4KKwkgIDwvcD4KKworICAgICAgPHA+aHR0cDovL2F2YWhpLm9yZy93aWtpL0F2YWhpQXV0b2lwZCBkb2N1bWVudHMgaG93IGF2YWhpLWF1dG9pcGQgaXMgYmVzdCBwYWNrYWdlZCBhbmQgaW50ZWdyYXRlZCBpbnRvIGRpc3RyaWJ1dGlvbnMuPC9wPgorCTwvc2VjdGlvbj4KKworCTxzZWN0aW9uIG5hbWU9IkNvbW1lbnRzIj4KKwkgIDxwPlRoaXMgbWFuIHBhZ2Ugd2FzIHdyaXR0ZW4gdXNpbmcgPG1hbnJlZiBuYW1lPSJ4bWwybWFuIiBzZWN0aW9uPSIxIgorCQkgIGhyZWY9Imh0dHA6Ly9tYXNxbWFpbC5jeC94bWwybWFuLyIvPiBieSBPbGl2ZXIgS3VydGguPC9wPgorCTwvc2VjdGlvbj4KKworICA8L21hbnBhZ2U+CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvbWFuL2F2YWhpLWF1dG9pcGQuYWN0aW9uLjggYi9hdmFoaS0wLjYuMzEvbWFuL2F2YWhpLWF1dG9pcGQuYWN0aW9uLjgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM3YTc2MgotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9tYW4vYXZhaGktYXV0b2lwZC5hY3Rpb24uOApAQCAtMCwwICsxLDIxIEBACisuVEggYXZhaGktYXV0b2lwZC5hY3Rpb24gOCBVc2VyIE1hbnVhbHMKKy5TSCBOQU1FCithdmFoaS1hdXRvaXBkLmFjdGlvbiBcLSBhdmFoaS1hdXRvaXBkIGFjdGlvbiBzY3JpcHQKKy5TSCBTWU5PUFNJUworXGZCL2hvbWUvbGVubmFydC90bXAvYXZhaGkvZXRjL2F2YWhpL2F2YWhpLWF1dG9pcGQuYWN0aW9uCitcZjEKKy5TSCBERVNDUklQVElPTgorXGZJYXZhaGktYXV0b2lwZC5hY3Rpb25cZjEgaXMgdGhlIGFjdGlvbiBzY3JpcHQgdGhhdCBpcyBjYWxsZWQgd2hlbmV2ZXIgYW4gSVAgYWRkcmVzcyBoYXMgYmVlbiBhY3F1aXJlZCBieSBhdmFoaS1hdXRvaXBkIG9yIHdoZW4gaXQgZGV0ZWN0ZWQgYW4gSVAgYWRkcmVzcyBjb25mbGljdC4gVGhlIHNjcmlwdCBzaG91bGQgYWRkIG9yIHJlbW92ZSB0aGUgc3BlY2lmaWVkIGFkZHJlc3MgZnJvbSB0aGUgc3BlY2lmaWVkIG5ldHdvcmsgaW50ZXJmYWNlLgorLlNIIFBBUkFNRVRFUlMKKy5UUAorXGZCYXJndlsxXVxmMSBBbiBldmVudCBzdHJpbmc6IG9uZSBvZiBCSU5ELCBDT05GTElDVCwgVU5CSU5EIG9yIFNUT1AuIElmIEJJTkQgaXMgcGFzc2VkIGFuIElQIGFkZHJlc3MgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGFjcXVpcmVkIGFuZCB0aGUgc2NyaXB0IHNoYWxsIGFkZCBpdCB0byB0aGUgbmV0d29yayBpbnRlcmZhY2UuIElmIENPTkZMSUNUIGlzIHBhc3NlZCBhdmFoaS1hdXRvcGlkIGRldGVjdGVkIGEgSVAgYWRkcmVzcyBvbiB0aGUgbG9jYWwgbmV0d29yaywgdGhlIGFjdGlvbiBzY3JpcHQgc2hvdWxkIHJlbW92ZSB0aGUgY29uZmlndXJlZCBJUCBhZGRyZXNzLiBJZiBVTkJJTkQgaXMgcGFzc2VkIHRoZSBJUCBhZGRyZXNzIHNob3VsZCBiZSByZW1vdmVkIGZyb20gdGhlIGludGVyZmFjZSwgdG9vLCBiZWNhdXNlIGEgcm91dGFibGUgYWRkcmVzcyBoYXMgYmVlbiBjb25maWd1cmVkIHRvIHRoZSBpbnRlcmZhY2UgYnkgc29tZSBvdGhlciBwcm9ncmFtLiBJZiBTVE9QIGlzIHBhc3NlZCB0aGUgYXZhaGktYXV0b2lwZCBpcyBiZWluZyBzaHV0ZG93biBhbmQgdGhlIGFjdGlvbiBzY3JpcHQgc2hvdWxkIHJlbW92ZSB0aGUgSVAgYWRkcmVzcy4gSW4gc2hvcnQ6IG9uIEJJTkQgdGhlIGFkZHJlc3Mgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSBpbnRlcmZhY2UsIG9uIENPTkZMSUNULCBVTkJJTkQgb3IgU1RPUCBpdCBzaG91bGQgYmUgcmVtb3ZlZC4gCisuVFAKK1xmQmFyZ3ZbMl1cZjEgVGhlIG5ldHdvcmsgaW50ZXJmYWNlIG5hbWUuCisuVFAKK1xmQmFyZ3ZbM11cZjEgQW4gSVAgYWRkcmVzcyBmcm9tIHRoZSBJUHY0TEwgcmFuZ2UuCisuU0ggQVVUSE9SUworVGhlIEF2YWhpIERldmVsb3BlcnMgPGF2YWhpIChhdCkgbGlzdHMgKGRvdCkgZnJlZWRlc2t0b3AgKGRvdCkgb3JnPjsgQXZhaGkgaXMgYXZhaWxhYmxlIGZyb20gXGZCaHR0cDovL2F2YWhpLm9yZy9cZjEKKy5TSCBTRUUgQUxTTworXGZCYXZhaGktYXV0b2lwZCg4KVxmMSwgXGZCZGhjbGllbnQtc2NyaXB0KDgpXGYxLCBcZkJpcCg4KVxmMSwgXGZCaWZjb25maWcoOClcZjEKKy5TSCBDT01NRU5UUworVGhpcyBtYW4gcGFnZSB3YXMgd3JpdHRlbiB1c2luZyBcZkJ4bWwybWFuKDEpXGYxIGJ5IE9saXZlciBLdXJ0aC4KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9tYW4vYXZhaGktYXV0b2lwZC5hY3Rpb24uOC54bWwuaW4gYi9hdmFoaS0wLjYuMzEvbWFuL2F2YWhpLWF1dG9pcGQuYWN0aW9uLjgueG1sLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNDk4NmYKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvbWFuL2F2YWhpLWF1dG9pcGQuYWN0aW9uLjgueG1sLmluCkBAIC0wLDAgKzEsODMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PjwhLS0qLW54bWwtKi0tPgorPCFET0NUWVBFIG1hbnBhZ2UgU1lTVEVNICJ4bWx0b21hbi5kdGQiPgorPD94bWwtc3R5bGVzaGVldCB0eXBlPSJ0ZXh0L3hzbCIgaHJlZj0ieG1sdG9tYW4ueHNsIiA/PgorCis8IS0tCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCistLT4KKworICA8bWFucGFnZSBuYW1lPSJhdmFoaS1hdXRvaXBkLmFjdGlvbiIgc2VjdGlvbj0iOCIgZGVzYz0iYXZhaGktYXV0b2lwZCBhY3Rpb24gc2NyaXB0Ij4KKworCTxzeW5vcHNpcz4KKyAgICAgIDxjbWQ+QHBrZ3N5c2NvbmZkaXJAL2F2YWhpLWF1dG9pcGQuYWN0aW9uPC9jbWQ+CisJPC9zeW5vcHNpcz4KKworICAgIDxkZXNjcmlwdGlvbj4KKyAgICAgIDxwPjxmaWxlPmF2YWhpLWF1dG9pcGQuYWN0aW9uPC9maWxlPiBpcyB0aGUgYWN0aW9uIHNjcmlwdCB0aGF0CisgICAgICBpcyBjYWxsZWQgd2hlbmV2ZXIgYW4gSVAgYWRkcmVzcyBoYXMgYmVlbiBhY3F1aXJlZCBieQorICAgICAgYXZhaGktYXV0b2lwZCBvciB3aGVuIGl0IGRldGVjdGVkIGFuIElQIGFkZHJlc3MgY29uZmxpY3QuIFRoZQorICAgICAgc2NyaXB0IHNob3VsZCBhZGQgb3IgcmVtb3ZlIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyBmcm9tIHRoZQorICAgICAgc3BlY2lmaWVkIG5ldHdvcmsgaW50ZXJmYWNlLjwvcD4KKwk8L2Rlc2NyaXB0aW9uPgorCisJPHNlY3Rpb24gbmFtZT0iUGFyYW1ldGVycyI+CisKKyAgICAgIDxvcHRpb24+CisgICAgICAgIDxwPjxvcHQ+YXJndlsxXTwvb3B0PiBBbiBldmVudCBzdHJpbmc6IG9uZSBvZiBCSU5ELCBDT05GTElDVCwKKyAgICAgICAgVU5CSU5EIG9yIFNUT1AuIElmIEJJTkQgaXMgcGFzc2VkIGFuIElQIGFkZHJlc3MgaGFzIGJlZW4KKyAgICAgICAgc3VjY2Vzc2Z1bGx5IGFjcXVpcmVkIGFuZCB0aGUgc2NyaXB0IHNoYWxsIGFkZCBpdCB0byB0aGUKKyAgICAgICAgbmV0d29yayBpbnRlcmZhY2UuIElmIENPTkZMSUNUIGlzIHBhc3NlZCBhdmFoaS1hdXRvcGlkCisgICAgICAgIGRldGVjdGVkIGEgSVAgYWRkcmVzcyBvbiB0aGUgbG9jYWwgbmV0d29yaywgdGhlIGFjdGlvbiBzY3JpcHQKKyAgICAgICAgc2hvdWxkIHJlbW92ZSB0aGUgY29uZmlndXJlZCBJUCBhZGRyZXNzLiBJZiBVTkJJTkQgaXMgcGFzc2VkCisgICAgICAgIHRoZSBJUCBhZGRyZXNzIHNob3VsZCBiZSByZW1vdmVkIGZyb20gdGhlIGludGVyZmFjZSwgdG9vLAorICAgICAgICBiZWNhdXNlIGEgcm91dGFibGUgYWRkcmVzcyBoYXMgYmVlbiBjb25maWd1cmVkIHRvIHRoZQorICAgICAgICBpbnRlcmZhY2UgYnkgc29tZSBvdGhlciBwcm9ncmFtLiBJZiBTVE9QIGlzIHBhc3NlZCB0aGUKKyAgICAgICAgYXZhaGktYXV0b2lwZCBpcyBiZWluZyBzaHV0ZG93biBhbmQgdGhlIGFjdGlvbiBzY3JpcHQgc2hvdWxkCisgICAgICAgIHJlbW92ZSB0aGUgSVAgYWRkcmVzcy4gSW4gc2hvcnQ6IG9uIEJJTkQgdGhlIGFkZHJlc3Mgc2hvdWxkIGJlCisgICAgICAgIGFkZGVkIHRvIHRoZSBpbnRlcmZhY2UsIG9uIENPTkZMSUNULCBVTkJJTkQgb3IgU1RPUCBpdCBzaG91bGQKKyAgICAgICAgYmUgcmVtb3ZlZC4KKyAgICAgICAgPC9wPgorICAgICAgPC9vcHRpb24+CisKKyAgICAgIDxvcHRpb24+CisgICAgICAgIDxwPjxvcHQ+YXJndlsyXTwvb3B0PiBUaGUgbmV0d29yayBpbnRlcmZhY2UgbmFtZS48L3A+CisgICAgICA8L29wdGlvbj4KKworICAgICAgPG9wdGlvbj4KKyAgICAgICAgPHA+PG9wdD5hcmd2WzNdPC9vcHQ+IEFuIElQIGFkZHJlc3MgZnJvbSB0aGUgSVB2NExMIHJhbmdlLjwvcD4KKyAgICAgIDwvb3B0aW9uPgorCisJPC9zZWN0aW9uPgorCisJPHNlY3Rpb24gbmFtZT0iQXV0aG9ycyI+CisJICA8cD5UaGUgQXZhaGkgRGV2ZWxvcGVycyAmbHQ7QFBBQ0tBR0VfQlVHUkVQT1JUQCZndDs7IEF2YWhpIGlzCisJICBhdmFpbGFibGUgZnJvbSA8dXJsIGhyZWY9IkBQQUNLQUdFX1VSTEAiLz48L3A+CisJPC9zZWN0aW9uPgorCisJPHNlY3Rpb24gbmFtZT0iU2VlIGFsc28iPgorCSAgPHA+CisgICAgICAgIDxtYW5yZWYgbmFtZT0iYXZhaGktYXV0b2lwZCIgc2VjdGlvbj0iOCIvPiwgPG1hbnJlZiBuYW1lPSJkaGNsaWVudC1zY3JpcHQiIHNlY3Rpb249IjgiLz4sIDxtYW5yZWYgbmFtZT0iaXAiIHNlY3Rpb249IjgiLz4sIDxtYW5yZWYgbmFtZT0iaWZjb25maWciIHNlY3Rpb249IjgiLz4KKwkgIDwvcD4KKwk8L3NlY3Rpb24+CisKKwk8c2VjdGlvbiBuYW1lPSJDb21tZW50cyI+CisJICA8cD5UaGlzIG1hbiBwYWdlIHdhcyB3cml0dGVuIHVzaW5nIDxtYW5yZWYgbmFtZT0ieG1sMm1hbiIgc2VjdGlvbj0iMSIKKwkJICBocmVmPSJodHRwOi8vbWFzcW1haWwuY3gveG1sMm1hbi8iLz4gYnkgT2xpdmVyIEt1cnRoLjwvcD4KKwk8L3NlY3Rpb24+CisKKyAgPC9tYW5wYWdlPgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL21hbi9hdmFoaS1ib29rbWFya3MuMSBiL2F2YWhpLTAuNi4zMS9tYW4vYXZhaGktYm9va21hcmtzLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIwZWQxYQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9tYW4vYXZhaGktYm9va21hcmtzLjEKQEAgLTAsMCArMSwzMyBAQAorLlRIIGF2YWhpLWJvb2ttYXJrcyAxIFVzZXIgTWFudWFscworLlNIIE5BTUUKK2F2YWhpLWJvb2ttYXJrcyBcLSBXZWIgc2VydmljZSBzaG93aW5nIG1ETlMvRE5TLVNEIGFubm91bmNlZCBIVFRQIHNlcnZpY2VzIHVzaW5nIHRoZSBBdmFoaSBkYWVtb24KKy5TSCBTWU5PUFNJUworXGZCYXZhaGktYm9va21hcmtzCitcZjEKKy5TSCBERVNDUklQVElPTgorQSB3ZWIgc2VydmljZSBmb3IgbGlzdGluZyBIVFRQIHNlcnZpY2VzIHRoYXQgYXJlIGFubm91bmNlZCB2aWEgbUROUy9ETlMtU0QgdXNpbmcgdGhlIEF2YWhpIGRhZW1vbi4gYXZhaGktYm9va21hcmtzIG9wZW5zIGEgVENQIHNvY2tldCBvbiBwb3J0IDgwODAgYW5kIHdhaXRzIGZvciBpbmNvbWluZyBIVFRQIGNvbm5lY3Rpb25zIHJldHVybmluZyBhIGR5bmFtaWMgd2ViIHNpdGUgY29udGFpbmluZyBsaW5rcyB0byBhbGwgc2VydmljZXMgb2YgdHlwZSBfaHR0cC5fdGNwIG9uIHRoZSBMQU4uIFBvaW50IHlvdXIgYnJvd3NlciB0byBodHRwOi8vbG9jYWxob3N0OjgwODAvIHRvIG1ha2UgdXNlIG9mIGF2YWhpLWJvb2ttYXJrcy4KKy5TSCBPUFRJT05TCisuVFAKK1xmQi1wIHwgLS1wb3J0PVxmMSBcZklQT1JUXGYxCitTcGVjaWZ5IGEgVENQIHBvcnQgbnVtYmVyIHRvIGxpc3RlbiBvbi4gSWYgb21pdHRlZCBkZWZhdWx0cyB0byA4MDgwLgorLlRQCitcZkItYSB8IC0tYWRkcmVzcz1cZjEgXGZJYWRkcmVzc1xmMQorU3BlY2lmeSBhbiBJUCBhZGRyZXNzIHRvIGxpc3RlbiBvbi4gSWYgb21pdHRlZCBkZWZhdWx0cyB0byAxMjcuMC4wLjEuIFNwZWNpZnkgMC4wLjAuMCBpZiB5b3Ugd2FudCB0byBhbGxvdyByZW1vdGUgYWNjZXNzLgorLlRQCitcZkItSCB8IC0taG9zdC1uYW1lc1xmMQorQ3JlYXRlIGxpbmtzIHBvaW50aW5nIHRvIG1ETlMgaG9zdCBuYW1lcyBpbnN0ZWFkIG9mIHJlc29sdmVkIElQIGFkZHJlc2VzLiBUaGlzIGlzIG9ubHkgY29tcGF0aWJsZSB3aXRoIHlvdXIgYnJvd3NlciBpZiB5b3UgcnVuIHNvbWUga2luZCBvZiBsb2NhbCBOU1MgbW9kdWxlIHRvIHJlc29sdmUgbUROUyBob3N0IG5hbWVzIChlLmcuIG5zcy1tZG5zKS4gSWYgYm90aCAtQSBhbmQgLUggYXJlIG9tbWl0ZWQgYXZhaGktYm9va21hcmtzIGRldGVjdHMgd2hldGhlciBOU1Mgc3VwcG9ydCBpcyBhdmFpbGFibGUgbG9jYWxseS4gVGhpcyBvcHRpb24gY29uZmxpY3RzIHdpdGggLUEuCisuVFAKK1xmQi1BIHwgLS1hZGRyZXNzZXNcZjEKK0NyZWF0ZSBsaW5rcyBwb2ludGluZyB0byBudW1lcmljIElQIGFkZHJlc3NlcyBpbnN0ZWFkIG9mIG1ETlMgaG9zdCBuYW1lcy4gVGhpcyB3aWxsIGJyZWFrIGFjY2VzcyB0byBob3N0cyBydW5uaW5nIHZpcnR1YWwgc2VydmVycy4gSWYgYm90aCAtQSBhbmQgLUggYXJlIG9tbWl0ZWQgYXZhaGktYm9va21hcmtzIGRldGVjdHMgd2hldGhlciBOU1Mgc3VwcG9ydCBpcyBhdmFpbGFibGUgbG9jYWxseS4gVGhpcyBvcHRpb24gY29uZmxpY3RzIHdpdGggLUguCisuVFAKK1xmQi1kIHwgLS1kb21haW5cZjE9XGZJRE9NQUlOXGYxCitUaGUgZG9tYWluIHRvIGJyb3dzZSBmb3Igc2VydmljZXMgaW4uCisuVFAKK1xmQi1oIHwgLS1oZWxwXGYxCitTaG93IGhlbHAKKy5TSCBBVVRIT1JTCitUaGUgQXZhaGkgRGV2ZWxvcGVycyA8YXZhaGkgKGF0KSBsaXN0cyAoZG90KSBmcmVlZGVza3RvcCAoZG90KSBvcmc+OyBBdmFoaSBpcyBhdmFpbGFibGUgZnJvbSBcZkJodHRwOi8vYXZhaGkub3JnL1xmMQorLlNIIFNFRSBBTFNPCitcZkJhdmFoaS1icm93c2UoMSlcZjEsIFxmQmF2YWhpLWRhZW1vbig4KVxmMQorLlNIIENPTU1FTlRTCitUaGlzIG1hbiBwYWdlIHdhcyB3cml0dGVuIHVzaW5nIFxmQnhtbDJtYW4oMSlcZjEgYnkgT2xpdmVyIEt1cnRoLgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL21hbi9hdmFoaS1ib29rbWFya3MuMS54bWwuaW4gYi9hdmFoaS0wLjYuMzEvbWFuL2F2YWhpLWJvb2ttYXJrcy4xLnhtbC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODYzZTJiCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL21hbi9hdmFoaS1ib29rbWFya3MuMS54bWwuaW4KQEAgLTAsMCArMSw5OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+PCEtLSotbnhtbC0qLS0+Cis8IURPQ1RZUEUgbWFucGFnZSBTWVNURU0gInhtbHRvbWFuLmR0ZCI+Cis8P3htbC1zdHlsZXNoZWV0IHR5cGU9InRleHQveHNsIiBocmVmPSJ4bWx0b21hbi54c2wiID8+CisKKzwhLS0KKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKy0tPgorCisgIDxtYW5wYWdlIG5hbWU9ImF2YWhpLWJvb2ttYXJrcyIgc2VjdGlvbj0iMSIgZGVzYz0iV2ViIHNlcnZpY2Ugc2hvd2luZyBtRE5TL0ROUy1TRCBhbm5vdW5jZWQgSFRUUCBzZXJ2aWNlcyB1c2luZyB0aGUgQXZhaGkgZGFlbW9uIj4KKworCTxzeW5vcHNpcz4KKyAgICAgIDxjbWQ+YXZhaGktYm9va21hcmtzPC9jbWQ+CisJPC9zeW5vcHNpcz4KKworICAgIDxkZXNjcmlwdGlvbj4KKyAgICAgIDxwPkEgd2ViIHNlcnZpY2UgZm9yIGxpc3RpbmcgSFRUUCBzZXJ2aWNlcyB0aGF0IGFyZSBhbm5vdW5jZWQKKyAgICAgIHZpYSBtRE5TL0ROUy1TRCB1c2luZyB0aGUgQXZhaGkgZGFlbW9uLiBhdmFoaS1ib29rbWFya3Mgb3BlbnMgYQorICAgICAgVENQIHNvY2tldCBvbiBwb3J0IDgwODAgYW5kIHdhaXRzIGZvciBpbmNvbWluZyBIVFRQIGNvbm5lY3Rpb25zCisgICAgICByZXR1cm5pbmcgYSBkeW5hbWljIHdlYiBzaXRlIGNvbnRhaW5pbmcgbGlua3MgdG8gYWxsIHNlcnZpY2VzIG9mCisgICAgICB0eXBlIF9odHRwLl90Y3Agb24gdGhlIExBTi4gUG9pbnQgeW91ciBicm93c2VyIHRvCisgICAgICBodHRwOi8vbG9jYWxob3N0OjgwODAvIHRvIG1ha2UgdXNlIG9mIGF2YWhpLWJvb2ttYXJrcy48L3A+CisKKwk8L2Rlc2NyaXB0aW9uPgorCisgICAgPG9wdGlvbnM+CisgICAgICA8b3B0aW9uPgorICAgICAgICA8cD48b3B0Pi1wIHwgLS1wb3J0PTwvb3B0PiA8YXJnPlBPUlQ8L2FyZz48L3A+CisgICAgICAgIDxvcHRkZXNjPjxwPlNwZWNpZnkgYSBUQ1AgcG9ydCBudW1iZXIgdG8gbGlzdGVuIG9uLiBJZiBvbWl0dGVkIGRlZmF1bHRzIHRvIDgwODAuPC9wPjwvb3B0ZGVzYz4KKyAgICAgIDwvb3B0aW9uPgorCisgICAgICA8b3B0aW9uPgorICAgICAgICA8cD48b3B0Pi1hIHwgLS1hZGRyZXNzPTwvb3B0PiA8YXJnPmFkZHJlc3M8L2FyZz48L3A+CisgICAgICAgIDxvcHRkZXNjPjxwPlNwZWNpZnkgYW4gSVAgYWRkcmVzcyB0byBsaXN0ZW4gb24uIElmIG9taXR0ZWQgZGVmYXVsdHMgdG8gMTI3LjAuMC4xLiBTcGVjaWZ5IDAuMC4wLjAgaWYgeW91IHdhbnQgdG8gYWxsb3cgcmVtb3RlIGFjY2Vzcy48L3A+PC9vcHRkZXNjPgorICAgICAgPC9vcHRpb24+CisKKyAgICAgIDxvcHRpb24+CisgICAgICAgIDxwPjxvcHQ+LUggfCAtLWhvc3QtbmFtZXM8L29wdD48L3A+CisgICAgICAgIDxvcHRkZXNjPjxwPkNyZWF0ZSBsaW5rcyBwb2ludGluZyB0byBtRE5TIGhvc3QgbmFtZXMgaW5zdGVhZAorICAgICAgICBvZiByZXNvbHZlZCBJUCBhZGRyZXNlcy4gVGhpcyBpcyBvbmx5IGNvbXBhdGlibGUgd2l0aCB5b3VyCisgICAgICAgIGJyb3dzZXIgaWYgeW91IHJ1biBzb21lIGtpbmQgb2YgbG9jYWwgTlNTIG1vZHVsZSB0byByZXNvbHZlCisgICAgICAgIG1ETlMgaG9zdCBuYW1lcyAoZS5nLiBuc3MtbWRucykuIElmIGJvdGggLUEgYW5kIC1IIGFyZSBvbW1pdGVkCisgICAgICAgIGF2YWhpLWJvb2ttYXJrcyBkZXRlY3RzIHdoZXRoZXIgTlNTIHN1cHBvcnQgaXMgYXZhaWxhYmxlCisgICAgICAgIGxvY2FsbHkuIFRoaXMgb3B0aW9uIGNvbmZsaWN0cyB3aXRoIC1BLjwvcD48L29wdGRlc2M+CisgICAgICA8L29wdGlvbj4KKworICAgICAgPG9wdGlvbj4KKyAgICAgICAgPHA+PG9wdD4tQSB8IC0tYWRkcmVzc2VzPC9vcHQ+PC9wPgorICAgICAgICA8b3B0ZGVzYz48cD5DcmVhdGUgbGlua3MgcG9pbnRpbmcgdG8gbnVtZXJpYyBJUCBhZGRyZXNzZXMKKyAgICAgICAgaW5zdGVhZCBvZiBtRE5TIGhvc3QgbmFtZXMuIFRoaXMgd2lsbCBicmVhayBhY2Nlc3MgdG8gaG9zdHMKKyAgICAgICAgcnVubmluZyB2aXJ0dWFsIHNlcnZlcnMuIElmIGJvdGggLUEgYW5kIC1IIGFyZSBvbW1pdGVkCisgICAgICAgIGF2YWhpLWJvb2ttYXJrcyBkZXRlY3RzIHdoZXRoZXIgTlNTIHN1cHBvcnQgaXMgYXZhaWxhYmxlCisgICAgICAgIGxvY2FsbHkuIFRoaXMgb3B0aW9uIGNvbmZsaWN0cyB3aXRoIC1ILjwvcD48L29wdGRlc2M+CisgICAgICA8L29wdGlvbj4KKworCisgICAgICA8b3B0aW9uPgorICAgICAgICA8cD48b3B0Pi1kIHwgLS1kb21haW48L29wdD49PGFyZz5ET01BSU48L2FyZz48L3A+CisgICAgICAgIDxvcHRkZXNjPjxwPlRoZSBkb21haW4gdG8gYnJvd3NlIGZvciBzZXJ2aWNlcyBpbi48L3A+PC9vcHRkZXNjPgorICAgICAgPC9vcHRpb24+CisKKwkgIDxvcHRpb24+CisJCTxwPjxvcHQ+LWggfCAtLWhlbHA8L29wdD48L3A+CisJCTxvcHRkZXNjPjxwPlNob3cgaGVscDwvcD48L29wdGRlc2M+CisJICA8L29wdGlvbj4KKworICAgIDwvb3B0aW9ucz4KKworCTxzZWN0aW9uIG5hbWU9IkF1dGhvcnMiPgorCSAgPHA+VGhlIEF2YWhpIERldmVsb3BlcnMgJmx0O0BQQUNLQUdFX0JVR1JFUE9SVEAmZ3Q7OyBBdmFoaSBpcworCSAgYXZhaWxhYmxlIGZyb20gPHVybCBocmVmPSJAUEFDS0FHRV9VUkxAIi8+PC9wPgorCTwvc2VjdGlvbj4KKworCTxzZWN0aW9uIG5hbWU9IlNlZSBhbHNvIj4KKwkgIDxwPgorICAgICAgICA8bWFucmVmIG5hbWU9ImF2YWhpLWJyb3dzZSIgc2VjdGlvbj0iMSIvPiwgPG1hbnJlZiBuYW1lPSJhdmFoaS1kYWVtb24iIHNlY3Rpb249IjgiLz4KKwkgIDwvcD4KKwk8L3NlY3Rpb24+CisKKwk8c2VjdGlvbiBuYW1lPSJDb21tZW50cyI+CisJICA8cD5UaGlzIG1hbiBwYWdlIHdhcyB3cml0dGVuIHVzaW5nIDxtYW5yZWYgbmFtZT0ieG1sMm1hbiIgc2VjdGlvbj0iMSIKKwkJICBocmVmPSJodHRwOi8vbWFzcW1haWwuY3gveG1sMm1hbi8iLz4gYnkgT2xpdmVyIEt1cnRoLjwvcD4KKwk8L3NlY3Rpb24+CisKKyAgPC9tYW5wYWdlPgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL21hbi9hdmFoaS1icm93c2UuMSBiL2F2YWhpLTAuNi4zMS9tYW4vYXZhaGktYnJvd3NlLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIyODQwYQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9tYW4vYXZhaGktYnJvd3NlLjEKQEAgLTAsMCArMSw2NiBAQAorLlRIIGF2YWhpLWJyb3dzZSAxIFVzZXIgTWFudWFscworLlNIIE5BTUUKK2F2YWhpLWJyb3dzZSBcLSBCcm93c2UgZm9yIG1ETlMvRE5TLVNEIHNlcnZpY2VzIHVzaW5nIHRoZSBBdmFoaSBkYWVtb24KKy5TSCBTWU5PUFNJUworXGZCYXZhaGktYnJvd3NlIFtcZklvcHRpb25zXGZCXSBcZklzZXJ2aWNlLXR5cGVcZkIKKworYXZhaGktYnJvd3NlIFtcZklvcHRpb25zXGZCXSAtLWFsbFxmQgorCithdmFoaS1icm93c2UgW1xmSW9wdGlvbnNcZkJdIC0tYnJvd3NlLWRvbWFpbnNcZkIKKworYXZhaGktYnJvd3NlIFtcZklvcHRpb25zXGZCXSAtLWR1bXAtZGJcZkIKKworYXZhaGktYnJvd3NlLWRvbWFpbnMgW1xmSW9wdGlvbnNcZkJdCitcZjEKKy5TSCBERVNDUklQVElPTgorQnJvd3NlIGZvciBtRE5TL0ROUy1TRCBuZXR3b3JrIHNlcnZpY2VzIGFuZCBicm93c2luZyBkb21haW5zIHVzaW5nIHRoZSBBdmFoaSBkYWVtb24uCisuU0ggT1BUSU9OUworU3BlY2lmeSBhIEROUy1TRCBzZXJ2aWNlIHR5cGUgKGUuZy4gX2h0dHAuX3RjcCkgdG8gYnJvd3NlIGZvciBvbiB0aGUgY29tbWFuZCBsaW5lLCBvciBcZkItYVxmMSB0byBicm93c2UgZm9yIGFsbCBhdmFpbGFibGUgc2VydmljZSB0eXBlcy4gSXRlbXMgdGhhdCBhcHBlYXIgb24gdGhlIG5ldHdvcmsgYXJlIHByZWZpeGVkIHdpdGggIisiLCBpdGVtcyB0aGF0IGRpc2FwcGVhciBhcmUgcHJlZml4ZWQgd2l0aCAiLSIuIElmIFxmQi0tcmVzb2x2ZVxmMSBpcyBwYXNzZWQgaXRlbXMgdGhhdCBhcmUgcmVzb2x2ZWQgYXJlIHByZWZpeGVkIHdpdGggIj0iLgorLlRQCitcZkItYSB8IC0tYWxsXGYxCitCcm93c2UgZm9yIGFsbCBzZXJ2aWNlIHR5cGVzIHJlZ2lzdGVyZWQgb24gdGhlIExBTiwgbm90IGp1c3QgdGhlIG9uZSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZS4KKy5UUAorXGZCLUQgfCAtLWJyb3dzZS1kb21haW5zXGYxCitCcm93c2UgZm9yIGJyb3dzaW5nIGRvbWFpbnMgaW5zdGVhZCBmb3Igc2VydmljZXMuIGF2YWhpLWJyb3dzZS1kb21haW5zIGlzIGVxdWl2YWxlbnQgdG8gYXZhaGktYnJvd3NlIC0tYnJvd3NlLWRvbWFpbnMKKy5UUAorXGZCLWQgfCAtLWRvbWFpbj1cZjEgXGZJRE9NQUlOXGYxCitCcm93c2UgaW4gdGhlIHNwZWNpZmllZCBkb21haW4uIElmIG9taXR0ZWQgYXZhaGktYnJvd3NlIHdpbGwgYnJvd3NlIGluIHRoZSBkZWZhdWx0IGJyb3dzaW5nIGRvbWFpbiAodXN1YWxseSAubG9jYWwpCisuVFAKK1xmQi12IHwgLS12ZXJib3NlXGYxCitFbmFibGUgdmVyYm9zZSBtb2RlLgorLlRQCitcZkItdCB8IC0tdGVybWluYXRlXGYxCitUZXJtaW5hdGUgYWZ0ZXIgZHVtcGluZyBhIG1vcmUgb3IgbGVzcyBjb21wbGV0ZSBsaXN0LgorLlRQCitcZkItYyB8IC0tY2FjaGVcZjEKK1Rlcm1pbmF0ZSBhZnRlciBkdW1waW5nIGFsbCBlbnRyaWVzIGF2YWlsYWJsZSBpbiB0aGUgY2FjaGUuCisuVFAKK1xmQi1sIHwgLS1pZ25vcmUtbG9jYWxcZjEKK0lnbm9yZSBsb2NhbCBzZXJ2aWNlcywgc2hvdyBvbmx5IHJlbW90ZSBzZXJ2aWNlcy4KKy5UUAorXGZCLXIgfCAtLXJlc29sdmVcZjEKK0F1dG9tYXRpY2FsbHkgcmVzb2x2ZSBzZXJ2aWNlcyBmb3VuZC4KKy5UUAorXGZCLWYgfCAtLW5vLWZhaWxcZjEKK0Rvbid0IGZhaWwgaWYgdGhlIGRhZW1vbiBpcyBub3QgZm91bmQgcnVubmluZy4gSW5zdGVhZCwgd2FpdCB1bnRpbCBpdCBhcHBlYXJzLiBJZiBpdCBkaXNjb25uZWN0cywgdHJ5IHRvIHJlY29ubmVjdC4KKy5UUAorXGZCLXAgfCAtLXBhcnNhYmxlXGYxCitNYWtlIG91dHB1dCBlYXNpbHkgcGFyc2FibGUgZm9yIHVzYWdlIGluIHNjcmlwdHMuIElmIGVuYWJsZWQgZmllbGRzIGFyZSBzZXBhcmF0ZWQgYnkgc2VtaWNvbG9ucyAoOyksIHNlcnZpY2UgbmFtZXMgYXJlIGVzY2FwZWQuIEl0IGlzIHJlY29tbWVuZGVkIHRvIGNvbWJpbmUgdGhpcyB3aXRoIFxmQi0tbm8tZGItbG9va3VwXGYxLgorLlRQCitcZkItayB8IC0tbm8tZGItbG9va3VwXGYxCitEb24ndCBsb29rdXAgc2VydmljZXMgdHlwZXMgaW4gc2VydmljZSB0eXBlIGRhdGFiYXNlLgorLlRQCitcZkItYiB8IC0tZHVtcC1kYlxmMQorRHVtcCB0aGUgc2VydmljZSB0eXBlIGRhdGFiYXNlIChtYXkgYmUgY29tYmluZWQgd2l0aCAtaykKKy5UUAorXGZCLWggfCAtLWhlbHBcZjEKK1Nob3cgaGVscC4KKy5UUAorXGZCLVYgfCAtLXZlcnNpb25cZjEKK1Nob3cgdmVyc2lvbiBpbmZvcm1hdGlvbi4KKy5TSCBBVVRIT1JTCitUaGUgQXZhaGkgRGV2ZWxvcGVycyA8YXZhaGkgKGF0KSBsaXN0cyAoZG90KSBmcmVlZGVza3RvcCAoZG90KSBvcmc+OyBBdmFoaSBpcyBhdmFpbGFibGUgZnJvbSBcZkJodHRwOi8vYXZhaGkub3JnL1xmMQorLlNIIFNFRSBBTFNPCitcZkJhdmFoaS1wdWJsaXNoKDEpXGYxLCBcZkJhdmFoaS1yZXNvbHZlKDEpXGYxLCBcZkJhdmFoaS1kYWVtb24oOClcZjEKKy5TSCBDT01NRU5UUworVGhpcyBtYW4gcGFnZSB3YXMgd3JpdHRlbiB1c2luZyBcZkJ4bWwybWFuKDEpXGYxIGJ5IE9saXZlciBLdXJ0aC4KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9tYW4vYXZhaGktYnJvd3NlLjEueG1sLmluIGIvYXZhaGktMC42LjMxL21hbi9hdmFoaS1icm93c2UuMS54bWwuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjEzZDRmYwotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9tYW4vYXZhaGktYnJvd3NlLjEueG1sLmluCkBAIC0wLDAgKzEsMTM1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz48IS0tKi1ueG1sLSotLT4KKzwhRE9DVFlQRSBtYW5wYWdlIFNZU1RFTSAieG1sdG9tYW4uZHRkIj4KKzw/eG1sLXN0eWxlc2hlZXQgdHlwZT0idGV4dC94c2wiIGhyZWY9InhtbHRvbWFuLnhzbCIgPz4KKworPCEtLQorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorLS0+CisKKyAgPG1hbnBhZ2UgbmFtZT0iYXZhaGktYnJvd3NlIiBzZWN0aW9uPSIxIiBkZXNjPSJCcm93c2UgZm9yIG1ETlMvRE5TLVNEIHNlcnZpY2VzIHVzaW5nIHRoZSBBdmFoaSBkYWVtb24iPgorCisJPHN5bm9wc2lzPgorICAgICAgPGNtZD5hdmFoaS1icm93c2UgWzxhcmc+b3B0aW9uczwvYXJnPl0gPGFyZz5zZXJ2aWNlLXR5cGU8L2FyZz48L2NtZD4KKyAgICAgIDxjbWQ+YXZhaGktYnJvd3NlIFs8YXJnPm9wdGlvbnM8L2FyZz5dIDxvcHQ+LS1hbGw8L29wdD48L2NtZD4KKyAgICAgIDxjbWQ+YXZhaGktYnJvd3NlIFs8YXJnPm9wdGlvbnM8L2FyZz5dIDxvcHQ+LS1icm93c2UtZG9tYWluczwvb3B0PjwvY21kPgorICAgICAgPGNtZD5hdmFoaS1icm93c2UgWzxhcmc+b3B0aW9uczwvYXJnPl0gPG9wdD4tLWR1bXAtZGI8L29wdD48L2NtZD4KKyAgICAgIDxjbWQ+YXZhaGktYnJvd3NlLWRvbWFpbnMgWzxhcmc+b3B0aW9uczwvYXJnPl08L2NtZD4KKwk8L3N5bm9wc2lzPgorCisgICAgPGRlc2NyaXB0aW9uPgorICAgICAgPHA+QnJvd3NlIGZvciBtRE5TL0ROUy1TRCBuZXR3b3JrIHNlcnZpY2VzIGFuZCBicm93c2luZyBkb21haW5zIHVzaW5nIHRoZSBBdmFoaSBkYWVtb24uPC9wPgorCisJPC9kZXNjcmlwdGlvbj4KKworCTxvcHRpb25zPgorCisgICAgICA8cD5TcGVjaWZ5IGEgRE5TLVNEIHNlcnZpY2UgdHlwZSAoZS5nLiBfaHR0cC5fdGNwKSB0byBicm93c2UgZm9yCisgICAgICBvbiB0aGUgY29tbWFuZCBsaW5lLCBvciA8b3B0Pi1hPC9vcHQ+IHRvIGJyb3dzZSBmb3IgYWxsCisgICAgICBhdmFpbGFibGUgc2VydmljZSB0eXBlcy4gSXRlbXMgdGhhdCBhcHBlYXIgb24gdGhlIG5ldHdvcmsgYXJlIHByZWZpeGVkIHdpdGggIisiLCBpdGVtcyB0aGF0IGRpc2FwcGVhciBhcmUgcHJlZml4ZWQgd2l0aCAiLSIuIElmIDxvcHQ+LS1yZXNvbHZlPC9vcHQ+IGlzIHBhc3NlZCBpdGVtcyB0aGF0IGFyZSByZXNvbHZlZCBhcmUgcHJlZml4ZWQgd2l0aCAiPSIuPC9wPgorCisgICAgICA8b3B0aW9uPgorCQk8cD48b3B0Pi1hIHwgLS1hbGw8L29wdD48L3A+CisJCTxvcHRkZXNjPjxwPkJyb3dzZSBmb3IgYWxsIHNlcnZpY2UgdHlwZXMgcmVnaXN0ZXJlZCBvbiB0aGUgTEFOLCBub3QganVzdCB0aGUgb25lIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLjwvcD48L29wdGRlc2M+CisJICA8L29wdGlvbj4KKworICAgICAgPG9wdGlvbj4KKyAgICAgICAgPHA+PG9wdD4tRCB8IC0tYnJvd3NlLWRvbWFpbnM8L29wdD48L3A+CisgICAgICAgIDxvcHRkZXNjPjxwPkJyb3dzZSBmb3IgYnJvd3NpbmcgZG9tYWlucyBpbnN0ZWFkIGZvciBzZXJ2aWNlcy4gYXZhaGktYnJvd3NlLWRvbWFpbnMgaXMgZXF1aXZhbGVudCB0byBhdmFoaS1icm93c2UgLS1icm93c2UtZG9tYWluczwvcD48L29wdGRlc2M+CisgICAgICA8L29wdGlvbj4KKworIAkgIDxvcHRpb24+CisJCTxwPjxvcHQ+LWQgfCAtLWRvbWFpbj08L29wdD4gPGFyZz5ET01BSU48L2FyZz48L3A+CisgICAgICAgIDxvcHRkZXNjPjxwPkJyb3dzZSBpbiB0aGUgc3BlY2lmaWVkIGRvbWFpbi4gSWYgb21pdHRlZAorICAgICAgICBhdmFoaS1icm93c2Ugd2lsbCBicm93c2UgaW4gdGhlIGRlZmF1bHQgYnJvd3NpbmcgZG9tYWluCisgICAgICAgICh1c3VhbGx5IC5sb2NhbCk8L3A+PC9vcHRkZXNjPgorCSAgPC9vcHRpb24+CisKKyAgICAgIDxvcHRpb24+CisgICAgICAgIDxwPjxvcHQ+LXYgfCAtLXZlcmJvc2U8L29wdD48L3A+CisgICAgICAgIDxvcHRkZXNjPjxwPkVuYWJsZSB2ZXJib3NlIG1vZGUuPC9wPjwvb3B0ZGVzYz4KKyAgICAgIDwvb3B0aW9uPgorCisgICAgICA8b3B0aW9uPgorICAgICAgICA8cD48b3B0Pi10IHwgLS10ZXJtaW5hdGU8L29wdD48L3A+CisgICAgICAgIDxvcHRkZXNjPjxwPlRlcm1pbmF0ZSBhZnRlciBkdW1waW5nIGEgbW9yZSBvciBsZXNzIGNvbXBsZXRlIGxpc3QuPC9wPjwvb3B0ZGVzYz4KKyAgICAgIDwvb3B0aW9uPgorCisgICAgICA8b3B0aW9uPgorICAgICAgICA8cD48b3B0Pi1jIHwgLS1jYWNoZTwvb3B0PjwvcD4KKyAgICAgICAgPG9wdGRlc2M+PHA+VGVybWluYXRlIGFmdGVyIGR1bXBpbmcgYWxsIGVudHJpZXMgYXZhaWxhYmxlIGluIHRoZSBjYWNoZS48L3A+PC9vcHRkZXNjPgorICAgICAgPC9vcHRpb24+CisKKyAgICAgIDxvcHRpb24+CisgICAgICAgIDxwPjxvcHQ+LWwgfCAtLWlnbm9yZS1sb2NhbDwvb3B0PjwvcD4KKyAgICAgICAgPG9wdGRlc2M+PHA+SWdub3JlIGxvY2FsIHNlcnZpY2VzLCBzaG93IG9ubHkgcmVtb3RlIHNlcnZpY2VzLjwvcD48L29wdGRlc2M+CisgICAgICA8L29wdGlvbj4KKworCSAgPG9wdGlvbj4KKwkJPHA+PG9wdD4tciB8IC0tcmVzb2x2ZTwvb3B0PjwvcD4KKwkJPG9wdGRlc2M+PHA+QXV0b21hdGljYWxseSByZXNvbHZlIHNlcnZpY2VzIGZvdW5kLjwvcD48L29wdGRlc2M+CisJICA8L29wdGlvbj4KKworCSAgPG9wdGlvbj4KKwkJPHA+PG9wdD4tZiB8IC0tbm8tZmFpbDwvb3B0PjwvcD4KKwkJPG9wdGRlc2M+PHA+RG9uJ3QgZmFpbCBpZiB0aGUgZGFlbW9uIGlzIG5vdCBmb3VuZCBydW5uaW5nLiBJbnN0ZWFkLCB3YWl0IHVudGlsIGl0IGFwcGVhcnMuIElmIGl0IGRpc2Nvbm5lY3RzLCB0cnkgdG8gcmVjb25uZWN0LjwvcD48L29wdGRlc2M+CisJICA8L29wdGlvbj4KKworCSAgPG9wdGlvbj4KKyAgICAgICAgICAgICAgICA8cD48b3B0Pi1wIHwgLS1wYXJzYWJsZTwvb3B0PjwvcD4KKwkJPG9wdGRlc2M+PHA+TWFrZSBvdXRwdXQgZWFzaWx5IHBhcnNhYmxlIGZvciB1c2FnZSBpbiBzY3JpcHRzLiBJZiBlbmFibGVkIGZpZWxkcyBhcmUgc2VwYXJhdGVkIGJ5IHNlbWljb2xvbnMgKDspLCBzZXJ2aWNlIG5hbWVzIGFyZSBlc2NhcGVkLiBJdCBpcyByZWNvbW1lbmRlZCB0byBjb21iaW5lIHRoaXMgd2l0aCA8b3B0Pi0tbm8tZGItbG9va3VwPC9vcHQ+LjwvcD48L29wdGRlc2M+CisJICA8L29wdGlvbj4KKworCSAgPG9wdGlvbj4KKwkJPHA+PG9wdD4tayB8IC0tbm8tZGItbG9va3VwPC9vcHQ+PC9wPgorCQk8b3B0ZGVzYz48cD5Eb24ndCBsb29rdXAgc2VydmljZXMgdHlwZXMgaW4gc2VydmljZSB0eXBlIGRhdGFiYXNlLjwvcD48L29wdGRlc2M+CisJICA8L29wdGlvbj4KKworCSAgPG9wdGlvbj4KKwkJPHA+PG9wdD4tYiB8IC0tZHVtcC1kYjwvb3B0PjwvcD4KKwkJPG9wdGRlc2M+PHA+RHVtcCB0aGUgc2VydmljZSB0eXBlIGRhdGFiYXNlIChtYXkgYmUgY29tYmluZWQgd2l0aCAtayk8L3A+PC9vcHRkZXNjPgorCSAgPC9vcHRpb24+CisKKwkgIDxvcHRpb24+CisJCTxwPjxvcHQ+LWggfCAtLWhlbHA8L29wdD48L3A+CisJCTxvcHRkZXNjPjxwPlNob3cgaGVscC48L3A+PC9vcHRkZXNjPgorCSAgPC9vcHRpb24+CisKKwkgIDxvcHRpb24+CisJCTxwPjxvcHQ+LVYgfCAtLXZlcnNpb248L29wdD48L3A+CisJCTxvcHRkZXNjPjxwPlNob3cgdmVyc2lvbiBpbmZvcm1hdGlvbi48L3A+PC9vcHRkZXNjPgorCSAgPC9vcHRpb24+CisKKwk8L29wdGlvbnM+CisKKwk8c2VjdGlvbiBuYW1lPSJBdXRob3JzIj4KKwkgIDxwPlRoZSBBdmFoaSBEZXZlbG9wZXJzICZsdDtAUEFDS0FHRV9CVUdSRVBPUlRAJmd0OzsgQXZhaGkgaXMKKwkgIGF2YWlsYWJsZSBmcm9tIDx1cmwgaHJlZj0iQFBBQ0tBR0VfVVJMQCIvPjwvcD4KKwk8L3NlY3Rpb24+CisKKwk8c2VjdGlvbiBuYW1lPSJTZWUgYWxzbyI+CisJICA8cD4KKyAgICAgICAgPG1hbnJlZiBuYW1lPSJhdmFoaS1wdWJsaXNoIiBzZWN0aW9uPSIxIi8+LCA8bWFucmVmIG5hbWU9ImF2YWhpLXJlc29sdmUiIHNlY3Rpb249IjEiLz4sIDxtYW5yZWYgbmFtZT0iYXZhaGktZGFlbW9uIiBzZWN0aW9uPSI4Ii8+CisJICA8L3A+CisJPC9zZWN0aW9uPgorCisJPHNlY3Rpb24gbmFtZT0iQ29tbWVudHMiPgorCSAgPHA+VGhpcyBtYW4gcGFnZSB3YXMgd3JpdHRlbiB1c2luZyA8bWFucmVmIG5hbWU9InhtbDJtYW4iIHNlY3Rpb249IjEiCisJCSAgaHJlZj0iaHR0cDovL21hc3FtYWlsLmN4L3htbDJtYW4vIi8+IGJ5IE9saXZlciBLdXJ0aC48L3A+CisJPC9zZWN0aW9uPgorCisgIDwvbWFucGFnZT4KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9tYW4vYXZhaGktZGFlbW9uLjggYi9hdmFoaS0wLjYuMzEvbWFuL2F2YWhpLWRhZW1vbi44Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiZjJiNDMKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvbWFuL2F2YWhpLWRhZW1vbi44CkBAIC0wLDAgKzEsNzYgQEAKKy5USCBhdmFoaS1kYWVtb24gOCBVc2VyIE1hbnVhbHMKKy5TSCBOQU1FCithdmFoaS1kYWVtb24gXC0gVGhlIEF2YWhpIG1ETlMvRE5TLVNEIGRhZW1vbgorLlNIIFNZTk9QU0lTCitcZkJhdmFoaS1kYWVtb24gW1xmSW9wdGlvbnNcZkJdCisKK2F2YWhpLWRhZW1vbiAtLWtpbGxcZkIKKworYXZhaGktZGFlbW9uIC0tcmVsb2FkXGZCCisKK2F2YWhpLWRhZW1vbiAtLWNoZWNrXGZCCitcZjEKKy5TSCBERVNDUklQVElPTgorVGhlIEF2YWhpIG1ETlMvRE5TLVNEIGRhZW1vbiBpbXBsZW1lbnRzIEFwcGxlJ3MgWmVyb2NvbmYgYXJjaGl0ZWN0dXJlIChhbHNvIGtub3duIGFzICJSZW5kZXp2b3VzIiBvciAiQm9uam91ciIpLiBUaGUgZGFlbW9uIHJlZ2lzdGVycyBsb2NhbCBJUCBhZGRyZXNzZXMgYW5kIHN0YXRpYyBzZXJ2aWNlcyB1c2luZyBtRE5TL0ROUy1TRCBhbmQgcHJvdmlkZXMgdHdvIElQQyBBUElzIGZvciBsb2NhbCBwcm9ncmFtcyB0byBtYWtlIHVzZSBvZiB0aGUgbUROUyByZWNvcmQgY2FjaGUgdGhlIGF2YWhpLWRhZW1vbiBtYWludGFpbnMuIEZpcnN0IHRoZXJlIGlzIHRoZSBzbyBjYWxsZWQgInNpbXBsZSBwcm90b2NvbCIgd2hpY2ggaXMgdXNlZCBleGNsdXNpdmVseSBieSBhdmFoaS1kbnNjb25mZCAoYSBkYWVtb24gd2hpY2ggY29uZmlndXJlcyB1bmljYXN0IEROUyBzZXJ2ZXJzIHVzaW5nIHNlcnZlciBpbmZvIHB1Ymxpc2hlZCB2aWEgbUROUykgYW5kIG5zcy1tZG5zIChhIGxpYmMgTlNTIHBsdWdpbiwgcHJvdmlkaW5nIG5hbWUgcmVzb2x1dGlvbiB2aWEgbUROUykuIEZpbmFsbHkgdGhlcmUgaXMgdGhlIEQtQnVzIGludGVyZmFjZSB3aGljaCBwcm92aWRlcyBhIHJpY2ggb2JqZWN0IG9yaWVudGVkIGludGVyZmFjZSB0byBELUJ1cyBlbmFibGVkIGFwcGxpY2F0aW9ucy4KKworVXBvbiBzdGFydHVwIGF2YWhpLWRhZW1vbiBpbnRlcnByZXRzIGl0cyBjb25maWd1cmF0aW9uIGZpbGUgXGZJL2hvbWUvbGVubmFydC90bXAvYXZhaGkvZXRjL2F2YWhpL2F2YWhpLWRhZW1vbi5jb25mXGYxIGFuZCByZWFkcyBYTUwgZnJhZ21lbnRzIGZyb20gXGZJL2hvbWUvbGVubmFydC90bXAvYXZhaGkvZXRjL2F2YWhpL3NlcnZpY2VzLyouc2VydmljZVxmMSB3aGljaCBtYXkgZGVmaW5lIHN0YXRpYyBETlMtU0Qgc2VydmljZXMuIElmIHlvdSBlbmFibGUgXGZCcHVibGlzaC1yZXNvbHYtY29uZi1kbnMtc2VydmVyc1xmMSBpbiBcZklhdmFoaS1kYWVtb24uY29uZlxmMSB0aGUgZmlsZSBcZkkvZXRjL3Jlc29sdi5jb25mXGYxIHdpbGwgYmUgcmVhZCwgdG9vLgorLlNIIE9QVElPTlMKKy5UUAorXGZCLWYgfCAtLWZpbGU9XGYxIFxmSUZJTEVcZjEKK1NwZWNpZnkgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSB0byByZWFkLiAoZGVmYXVsdDogL2hvbWUvbGVubmFydC90bXAvYXZhaGkvZXRjL2F2YWhpL2F2YWhpLWRhZW1vbi5jb25mKQorLlRQCitcZkItRCB8IC0tZGFlbW9uaXplXGYxCitEYWVtb25pemUgYWZ0ZXIgc3RhcnR1cC4gSW1wbGllcyBcZkItLXN5c2xvZ1xmMS4KKy5UUAorXGZCLXMgfCAtLXN5c2xvZ1xmMQorTG9nIHRvIHN5c2xvZyBpbnN0ZWFkIG9mIFNUREVSUi4gSW1wbGllZCBieSBcZkItLWRhZW1vbml6ZVxmMS4KKy5UUAorXGZCLS1kZWJ1Z1xmMQorSW5jcmVhc2UgdmVyYm9zaXR5IHRvIGRlYnVnIGxldmVsLgorLlRQCitcZkItLW5vLXJsaW1pdHNcZjEKK0Rvbid0IGVuZm9yY2UgcmVzb3VyY2UgbGltaXRzIGFzIHNwZWNpZmllZCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLiAoU2VlIFxmQnNldHJsaW1pdCgyKVxmMSBmb3IgbW9yZSBpbmZvcm1hdGlvbikKKy5UUAorXGZCLS1uby1kcm9wLXJvb3RcZjEKK0Rvbid0IGRyb3Agcm9vdCBwcml2aWxlZ2VzIGFmdGVyIHN0YXJ0dXAgYW5kIGRvbid0IHJlcXVpcmUgZGFlbW9uIHRvIGJlIHN0YXJ0ZWQgYXMgcm9vdC4gV2UgcmVjb21tZW5kIG5vdCB0byB1c2UgdGhpcyBvcHRpb24uCisuVFAKK1xmQi0tbm8tY2hyb290XGYxCitEb24ndCBcZkJjaHJvb3QoMilcZjEgdGhlIGRhZW1vbi4gVGhpcyBvcHRpb24gaXMgb25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIGNocm9vdCgpIHN1cHBvcnQuCisuVFAKK1xmQi0tbm8tcHJvYy10aXRsZVxmMQorRG9uJ3QgY2hhbmdlIHRoZSBwcm9jZXNzIG5hbWUgd2hpbGUgcnVubmluZy4gVW5sZXNzIHRoaXMgb3B0aW9uIGlzIHNwZWNpZmllZCBhdmFoaS1kYWVtb24gd2lsbCByZWZsZWN0IGl0cyBjdXJyZW50IHN0YXRlIGFuZCB0aGUgc2VsZWN0ZWQgaG9zdCBuYW1lIGluIHRoZSBwcm9jZXNzIHRpdGxlLgorLlRQCitcZkItayB8IC0ta2lsbFxmMQorS2lsbCBhbiBhbHJlYWR5IHJ1bm5pbmcgYXZhaGktZGFlbW9uLiAoZXF1aXZhbGVudCB0byBzZW5kaW5nIGEgU0lHVEVSTSkKKy5UUAorXGZCLXIgfCAtLXJlbG9hZFxmMQorVGVsbCBhbiBhbHJlYWR5IHJ1bm5pbmcgYXZhaGktZGFlbW9uIHRvIHJlcmVhZCBcZkkvZXRjL3Jlc29sdi5jb25mXGYxIChpbiBjYXNlIHlvdSBlbmFibGVkIFxmQnB1Ymxpc2gtcmVzb2x2LWNvbmYtZG5zLXNlcnZlcnNcZjEgaW4gXGZJYXZhaGktZGFlbW9uLmNvbmZcZjEpIHRoZSBmaWxlcyBmcm9tIFxmSS9ob21lL2xlbm5hcnQvdG1wL2F2YWhpL2V0Yy9hdmFoaS9zZXJ2aWNlcy9cZjEuIFBsZWFzZSBub3RlIHRoYXQgdGhpcyB3aWxsIG5vdCByZWxvYWQgdGhlIFxmSS9ob21lL2xlbm5hcnQvdG1wL2F2YWhpL2V0Yy9hdmFoaS9hdmFoaS1kYWVtb24uY29uZlxmMS4gKGVxdWl2YWxlbnQgdG8gc2VuZGluZyBhIFNJR0hVUCkKKy5UUAorXGZCLWMgfCAtLWNoZWNrXGYxCitSZXR1cm4gMCBhcyByZXR1cm4gY29kZSB3aGVuIGF2YWhpLWRhZW1vbiBpcyBhbHJlYWR5IHJ1bm5pbmcuCisuVFAKK1xmQi1oIHwgLS1oZWxwXGYxCitTaG93IGhlbHAKKy5UUAorXGZCLXYgfCAtLXZlcnNpb25cZjEKK1Nob3cgdmVyc2lvbiBpbmZvcm1hdGlvbiAKKy5TSCBGSUxFUworXGZJL2hvbWUvbGVubmFydC90bXAvYXZhaGkvZXRjL2F2YWhpL2F2YWhpLWRhZW1vbi5jb25mXGYxOiB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZpbGUgZm9yIGF2YWhpLWRhZW1vbiwgXGZCYXZhaGktZGFlbW9uLmNvbmYoNSlcZjEgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKK1xmSS9ob21lL2xlbm5hcnQvdG1wL2F2YWhpL2V0Yy9hdmFoaS9ob3N0c1xmMTogYWRkaXRpb25hbCBzdGF0aWMgaG9zdG5hbWUgbWFwcGluZ3MgdG8gcHVibGlzaCBpbiBtRE5TLCBzZWUgXGZCYXZhaGkuaG9zdHMoNSlcZjEgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKK1xmSS9ob21lL2xlbm5hcnQvdG1wL2F2YWhpL2V0Yy9hdmFoaS9zZXJ2aWNlcy8qLnNlcnZpY2VcZjE6IHN0YXRpYyBzZXJ2aWNlIGRlZmluaXRpb25zLCBzZWUgXGZCYXZhaGkuc2VydmljZSg1KVxmMSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKy5TSCBTSUdOQUxTCitcZklTSUdJTlQsIFNJR1RFUk1cZjE6IGF2YWhpLWRhZW1vbiB3aWxsIHNodXRkb3duLiAoU2FtZSBhcyBcZkItLWtpbGxcZjEpLgorCitcZklTSUdIVVBcZjE6IGF2YWhpLWRhZW1vbiB3aWxsIHJlbG9hZCB1bmljYXN0IEROUyBzZXJ2ZXIgZGF0YSBmcm9tIFxmSS9ldGMvcmVzb2x2LmNvbmZcZjEgYW5kIHN0YXRpYyBzZXJ2aWNlIGRlZmluaXRpb25zIGZyb20gXGZJL2hvbWUvbGVubmFydC90bXAvYXZhaGkvZXRjL2F2YWhpL3NlcnZpY2VzL1xmMS4gKFNhbWUgYXMgXGZCLS1yZWxvYWRcZjEpCisKK1xmSVNJR1VTUjFcZjE6IGF2YWhpLWRhZW1vbiB3aWxsIGR1bXAgbG9jYWwgYW5kIHJlbW90ZSBjYWNoZWQgcmVzb3VyY2UgcmVjb3JkIGRhdGEgdG8gc3lzbG9nLgorLlNIIEFVVEhPUlMKK1RoZSBBdmFoaSBEZXZlbG9wZXJzIDxhdmFoaSAoYXQpIGxpc3RzIChkb3QpIGZyZWVkZXNrdG9wIChkb3QpIG9yZz47IEF2YWhpIGlzIGF2YWlsYWJsZSBmcm9tIFxmQmh0dHA6Ly9hdmFoaS5vcmcvXGYxCisuU0ggU0VFIEFMU08KK1xmQmF2YWhpLWRhZW1vbi5jb25mKDUpXGYxLCBcZkJhdmFoaS5ob3N0cyg1KVxmMSwgXGZCYXZhaGkuc2VydmljZSg1KVxmMSwgXGZCYXZhaGktZG5zY29uZmQoOClcZjEsIFxmQmF2YWhpLXNldC1ob3N0LW5hbWUoMSlcZjEKKworaHR0cDovL2F2YWhpLm9yZy93aWtpL0F2YWhpQW5kVW5pY2FzdERvdExvY2FsIGRvY3VtZW50cyB0aGUgcHJvYmxlbXMgd2hlbiB1c2luZyBBdmFoaSBpbiBhIHVuaWNhc3QgRE5TIHpvbmUgLmxvY2FsLgorLlNIIENPTU1FTlRTCitUaGlzIG1hbiBwYWdlIHdhcyB3cml0dGVuIHVzaW5nIFxmQnhtbDJtYW4oMSlcZjEgYnkgT2xpdmVyIEt1cnRoLgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL21hbi9hdmFoaS1kYWVtb24uOC54bWwuaW4gYi9hdmFoaS0wLjYuMzEvbWFuL2F2YWhpLWRhZW1vbi44LnhtbC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzI5OTBkCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL21hbi9hdmFoaS1kYWVtb24uOC54bWwuaW4KQEAgLTAsMCArMSwxNzAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PjwhLS0qLW54bWwtKi0tPgorPCFET0NUWVBFIG1hbnBhZ2UgU1lTVEVNICJ4bWx0b21hbi5kdGQiPgorPD94bWwtc3R5bGVzaGVldCB0eXBlPSJ0ZXh0L3hzbCIgaHJlZj0ieG1sdG9tYW4ueHNsIiA/PgorCis8IS0tCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCistLT4KKworICA8bWFucGFnZSBuYW1lPSJhdmFoaS1kYWVtb24iIHNlY3Rpb249IjgiIGRlc2M9IlRoZSBBdmFoaSBtRE5TL0ROUy1TRCBkYWVtb24iPgorCisJPHN5bm9wc2lzPgorICAgICAgPGNtZD5hdmFoaS1kYWVtb24gWzxhcmc+b3B0aW9uczwvYXJnPl08L2NtZD4KKyAgICAgIDxjbWQ+YXZhaGktZGFlbW9uIDxvcHQ+LS1raWxsPC9vcHQ+PC9jbWQ+CisgICAgICA8Y21kPmF2YWhpLWRhZW1vbiA8b3B0Pi0tcmVsb2FkPC9vcHQ+PC9jbWQ+CisgICAgICA8Y21kPmF2YWhpLWRhZW1vbiA8b3B0Pi0tY2hlY2s8L29wdD48L2NtZD4KKwk8L3N5bm9wc2lzPgorCisgICAgPGRlc2NyaXB0aW9uPgorICAgICAgPHA+VGhlIEF2YWhpIG1ETlMvRE5TLVNEIGRhZW1vbiBpbXBsZW1lbnRzIEFwcGxlJ3MgWmVyb2NvbmYKKyAgICAgIGFyY2hpdGVjdHVyZSAoYWxzbyBrbm93biBhcyAiUmVuZGV6dm91cyIgb3IgIkJvbmpvdXIiKS4gVGhlIGRhZW1vbgorICAgICAgcmVnaXN0ZXJzIGxvY2FsIElQIGFkZHJlc3NlcyBhbmQgc3RhdGljIHNlcnZpY2VzIHVzaW5nCisgICAgICBtRE5TL0ROUy1TRCBhbmQgcHJvdmlkZXMgdHdvIElQQyBBUElzIGZvciBsb2NhbCBwcm9ncmFtcyB0byBtYWtlCisgICAgICB1c2Ugb2YgdGhlIG1ETlMgcmVjb3JkIGNhY2hlIHRoZSBhdmFoaS1kYWVtb24gbWFpbnRhaW5zLiBGaXJzdAorICAgICAgdGhlcmUgaXMgdGhlIHNvIGNhbGxlZCAic2ltcGxlIHByb3RvY29sIiB3aGljaCBpcyB1c2VkCisgICAgICBleGNsdXNpdmVseSBieSBhdmFoaS1kbnNjb25mZCAoYSBkYWVtb24gd2hpY2ggY29uZmlndXJlcyB1bmljYXN0CisgICAgICBETlMgc2VydmVycyB1c2luZyBzZXJ2ZXIgaW5mbyBwdWJsaXNoZWQgdmlhIG1ETlMpIGFuZCBuc3MtbWRucworICAgICAgKGEgbGliYyBOU1MgcGx1Z2luLCBwcm92aWRpbmcgbmFtZSByZXNvbHV0aW9uIHZpYSBtRE5TKS4gRmluYWxseQorICAgICAgdGhlcmUgaXMgdGhlIEQtQnVzIGludGVyZmFjZSB3aGljaCBwcm92aWRlcyBhIHJpY2ggb2JqZWN0CisgICAgICBvcmllbnRlZCBpbnRlcmZhY2UgdG8gRC1CdXMgZW5hYmxlZCBhcHBsaWNhdGlvbnMuPC9wPgorCisgICAgICA8cD5VcG9uIHN0YXJ0dXAgYXZhaGktZGFlbW9uIGludGVycHJldHMgaXRzIGNvbmZpZ3VyYXRpb24gZmlsZQorICAgICAgPGZpbGU+QHBrZ3N5c2NvbmZkaXJAL2F2YWhpLWRhZW1vbi5jb25mPC9maWxlPiBhbmQgcmVhZHMgWE1MCisgICAgICBmcmFnbWVudHMgZnJvbSA8ZmlsZT5Ac2VydmljZWRpckAvKi5zZXJ2aWNlPC9maWxlPiB3aGljaCBtYXkKKyAgICAgIGRlZmluZSBzdGF0aWMgRE5TLVNEIHNlcnZpY2VzLiBJZiB5b3UgZW5hYmxlCisgICAgICA8b3B0PnB1Ymxpc2gtcmVzb2x2LWNvbmYtZG5zLXNlcnZlcnM8L29wdD4gaW4KKyAgICAgIDxmaWxlPmF2YWhpLWRhZW1vbi5jb25mPC9maWxlPiB0aGUgZmlsZQorICAgICAgPGZpbGU+L2V0Yy9yZXNvbHYuY29uZjwvZmlsZT4gd2lsbCBiZSByZWFkLCB0b28uPC9wPgorCTwvZGVzY3JpcHRpb24+CisKKwk8b3B0aW9ucz4KKworCSAgPG9wdGlvbj4KKwkJPHA+PG9wdD4tZiB8IC0tZmlsZT08L29wdD4gPGFyZz5GSUxFPC9hcmc+PC9wPgorCQk8b3B0ZGVzYz48cD5TcGVjaWZ5IHRoZSBjb25maWd1cmF0aW9uIGZpbGUgdG8gcmVhZC4gKGRlZmF1bHQ6IEBwa2dzeXNjb25mZGlyQC9hdmFoaS1kYWVtb24uY29uZik8L3A+PC9vcHRkZXNjPgorCSAgPC9vcHRpb24+CisKKwkgIDxvcHRpb24+CisJCTxwPjxvcHQ+LUQgfCAtLWRhZW1vbml6ZTwvb3B0PjwvcD4KKwkJPG9wdGRlc2M+PHA+RGFlbW9uaXplIGFmdGVyIHN0YXJ0dXAuIEltcGxpZXMgPG9wdD4tLXN5c2xvZzwvb3B0Pi48L3A+PC9vcHRkZXNjPgorCSAgPC9vcHRpb24+CisKKyAgICAgIDxvcHRpb24+CisgICAgICAgIDxwPjxvcHQ+LXMgfCAtLXN5c2xvZzwvb3B0PjwvcD4KKyAgICAgICAgPG9wdGRlc2M+PHA+TG9nIHRvIHN5c2xvZyBpbnN0ZWFkIG9mIFNUREVSUi4gSW1wbGllZCBieSA8b3B0Pi0tZGFlbW9uaXplPC9vcHQ+LjwvcD48L29wdGRlc2M+CisgICAgICA8L29wdGlvbj4KKworICAgICAgPG9wdGlvbj4KKyAgICAgICAgPHA+PG9wdD4tLWRlYnVnPC9vcHQ+PC9wPgorICAgICAgICA8b3B0ZGVzYz48cD5JbmNyZWFzZSB2ZXJib3NpdHkgdG8gZGVidWcgbGV2ZWwuPC9wPjwvb3B0ZGVzYz4KKyAgICAgIDwvb3B0aW9uPgorCisgICAgICA8b3B0aW9uPgorICAgICAgICA8cD48b3B0Pi0tbm8tcmxpbWl0czwvb3B0PjwvcD4KKyAgICAgICAgPG9wdGRlc2M+PHA+RG9uJ3QgZW5mb3JjZSByZXNvdXJjZSBsaW1pdHMgYXMgc3BlY2lmaWVkIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuIChTZWUgPG1hbnJlZiBzZWN0aW9uPSIyIiBuYW1lPSJzZXRybGltaXQiLz4gZm9yIG1vcmUgaW5mb3JtYXRpb24pPC9wPjwvb3B0ZGVzYz4KKyAgICAgIDwvb3B0aW9uPgorCisgICAgICA8b3B0aW9uPgorICAgICAgICA8cD48b3B0Pi0tbm8tZHJvcC1yb290PC9vcHQ+PC9wPgorICAgICAgICA8b3B0ZGVzYz48cD5Eb24ndCBkcm9wIHJvb3QgcHJpdmlsZWdlcyBhZnRlciBzdGFydHVwIGFuZCBkb24ndCByZXF1aXJlIGRhZW1vbiB0byBiZSBzdGFydGVkIGFzIHJvb3QuIFdlIHJlY29tbWVuZCBub3QgdG8gdXNlIHRoaXMgb3B0aW9uLjwvcD48L29wdGRlc2M+CisgICAgICA8L29wdGlvbj4KKworICAgICAgPG9wdGlvbj4KKyAgICAgICAgPHA+PG9wdD4tLW5vLWNocm9vdDwvb3B0PjwvcD4KKyAgICAgICAgPG9wdGRlc2M+PHA+RG9uJ3QgPG1hbnJlZiBzZWN0aW9uPSIyIiBuYW1lPSJjaHJvb3QiLz4gdGhlIGRhZW1vbi4gVGhpcyBvcHRpb24gaXMgb25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIGNocm9vdCgpIHN1cHBvcnQuPC9wPjwvb3B0ZGVzYz4KKyAgICAgIDwvb3B0aW9uPgorCisgICAgICA8b3B0aW9uPgorICAgICAgICA8cD48b3B0Pi0tbm8tcHJvYy10aXRsZTwvb3B0PjwvcD4KKyAgICAgICAgPG9wdGRlc2M+PHA+RG9uJ3QgY2hhbmdlIHRoZSBwcm9jZXNzIG5hbWUgd2hpbGUKKyAgICAgICAgcnVubmluZy4gVW5sZXNzIHRoaXMgb3B0aW9uIGlzIHNwZWNpZmllZCBhdmFoaS1kYWVtb24gd2lsbCByZWZsZWN0CisgICAgICAgIGl0cyBjdXJyZW50IHN0YXRlIGFuZCB0aGUgc2VsZWN0ZWQgaG9zdCBuYW1lIGluIHRoZSBwcm9jZXNzCisgICAgICAgIHRpdGxlLjwvcD48L29wdGRlc2M+CisgICAgICA8L29wdGlvbj4KKworCSAgPG9wdGlvbj4KKwkJPHA+PG9wdD4tayB8IC0ta2lsbDwvb3B0PjwvcD4KKwkJPG9wdGRlc2M+PHA+S2lsbCBhbiBhbHJlYWR5IHJ1bm5pbmcgYXZhaGktZGFlbW9uLiAoZXF1aXZhbGVudCB0byBzZW5kaW5nIGEgU0lHVEVSTSk8L3A+PC9vcHRkZXNjPgorCSAgPC9vcHRpb24+CisKKwkgIDxvcHRpb24+CisJCTxwPjxvcHQ+LXIgfCAtLXJlbG9hZDwvb3B0PjwvcD4KKwkJPG9wdGRlc2M+PHA+VGVsbCBhbiBhbHJlYWR5IHJ1bm5pbmcgYXZhaGktZGFlbW9uIHRvIHJlcmVhZAorCQk8ZmlsZT4vZXRjL3Jlc29sdi5jb25mPC9maWxlPiAoaW4gY2FzZSB5b3UgZW5hYmxlZAorICAgICAgICA8b3B0PnB1Ymxpc2gtcmVzb2x2LWNvbmYtZG5zLXNlcnZlcnM8L29wdD4gaW4KKwkJPGZpbGU+YXZhaGktZGFlbW9uLmNvbmY8L2ZpbGU+KSB0aGUgZmlsZXMgZnJvbQorCQk8ZmlsZT5Ac2VydmljZWRpckAvPC9maWxlPi4gUGxlYXNlIG5vdGUgdGhhdCB0aGlzIHdpbGwgbm90CisJCXJlbG9hZCB0aGUKKwkJPGZpbGU+QHBrZ3N5c2NvbmZkaXJAL2F2YWhpLWRhZW1vbi5jb25mPC9maWxlPi4gKGVxdWl2YWxlbnQgdG8KKwkJc2VuZGluZyBhIFNJR0hVUCk8L3A+PC9vcHRkZXNjPgorCSAgPC9vcHRpb24+CisKKwkgIDxvcHRpb24+CisJCTxwPjxvcHQ+LWMgfCAtLWNoZWNrPC9vcHQ+PC9wPgorCQk8b3B0ZGVzYz48cD5SZXR1cm4gMCBhcyByZXR1cm4gY29kZSB3aGVuIGF2YWhpLWRhZW1vbiBpcyBhbHJlYWR5IHJ1bm5pbmcuPC9wPjwvb3B0ZGVzYz4KKwkgIDwvb3B0aW9uPgorCisJICA8b3B0aW9uPgorCQk8cD48b3B0Pi1oIHwgLS1oZWxwPC9vcHQ+PC9wPgorCQk8b3B0ZGVzYz48cD5TaG93IGhlbHA8L3A+PC9vcHRkZXNjPgorCSAgPC9vcHRpb24+CisKKwkgIDxvcHRpb24+CisJCTxwPjxvcHQ+LXYgfCAtLXZlcnNpb248L29wdD48L3A+CisJCTxvcHRkZXNjPjxwPlNob3cgdmVyc2lvbiBpbmZvcm1hdGlvbiA8L3A+PC9vcHRkZXNjPgorCSAgPC9vcHRpb24+CisKKwk8L29wdGlvbnM+CisKKyAgICA8c2VjdGlvbiBuYW1lPSJGaWxlcyI+CisKKyAgICAgIDxwPjxmaWxlPkBwa2dzeXNjb25mZGlyQC9hdmFoaS1kYWVtb24uY29uZjwvZmlsZT46IHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgYXZhaGktZGFlbW9uLCA8bWFucmVmIG5hbWU9ImF2YWhpLWRhZW1vbi5jb25mIiBzZWN0aW9uPSI1Ii8+IGZvciBtb3JlIGluZm9ybWF0aW9uLjwvcD4KKworICAgICAgPHA+PGZpbGU+QHBrZ3N5c2NvbmZkaXJAL2hvc3RzPC9maWxlPjogYWRkaXRpb25hbCBzdGF0aWMgaG9zdG5hbWUgbWFwcGluZ3MgdG8gcHVibGlzaCBpbiBtRE5TLCBzZWUgPG1hbnJlZiBuYW1lPSJhdmFoaS5ob3N0cyIgc2VjdGlvbj0iNSIvPiBmb3IgbW9yZSBpbmZvcm1hdGlvbi48L3A+CisKKyAgICAgIDxwPjxmaWxlPkBzZXJ2aWNlZGlyQC8qLnNlcnZpY2U8L2ZpbGU+OiBzdGF0aWMgc2VydmljZSBkZWZpbml0aW9ucywgc2VlIDxtYW5yZWYgbmFtZT0iYXZhaGkuc2VydmljZSIgc2VjdGlvbj0iNSIvPiBmb3IgbW9yZSBpbmZvcm1hdGlvbi48L3A+CisKKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBuYW1lPSJTaWduYWxzIj4KKyAgICAgIDxwPjxhcmc+U0lHSU5ULCBTSUdURVJNPC9hcmc+OiBhdmFoaS1kYWVtb24gd2lsbCBzaHV0ZG93bi4gKFNhbWUgYXMgPG9wdD4tLWtpbGw8L29wdD4pLjwvcD4KKyAgICAgIDxwPjxhcmc+U0lHSFVQPC9hcmc+OiBhdmFoaS1kYWVtb24gd2lsbCByZWxvYWQgdW5pY2FzdCBETlMKKyAgICAgIHNlcnZlciBkYXRhIGZyb20gPGZpbGU+L2V0Yy9yZXNvbHYuY29uZjwvZmlsZT4gYW5kIHN0YXRpYworICAgICAgc2VydmljZSBkZWZpbml0aW9ucyBmcm9tIDxmaWxlPkBzZXJ2aWNlZGlyQC88L2ZpbGU+LiAoU2FtZSBhcyA8b3B0Pi0tcmVsb2FkPC9vcHQ+KTwvcD4KKyAgICAgIDxwPjxhcmc+U0lHVVNSMTwvYXJnPjogYXZhaGktZGFlbW9uIHdpbGwgZHVtcCBsb2NhbCBhbmQgcmVtb3RlIGNhY2hlZCByZXNvdXJjZSByZWNvcmQgZGF0YSB0byBzeXNsb2cuPC9wPgorICAgIDwvc2VjdGlvbj4KKworCTxzZWN0aW9uIG5hbWU9IkF1dGhvcnMiPgorCSAgPHA+VGhlIEF2YWhpIERldmVsb3BlcnMgJmx0O0BQQUNLQUdFX0JVR1JFUE9SVEAmZ3Q7OyBBdmFoaSBpcworCSAgYXZhaWxhYmxlIGZyb20gPHVybCBocmVmPSJAUEFDS0FHRV9VUkxAIi8+PC9wPgorCTwvc2VjdGlvbj4KKworCTxzZWN0aW9uIG5hbWU9IlNlZSBhbHNvIj4KKwkgIDxwPgorICAgICAgICA8bWFucmVmIG5hbWU9ImF2YWhpLWRhZW1vbi5jb25mIiBzZWN0aW9uPSI1Ii8+LCA8bWFucmVmIG5hbWU9ImF2YWhpLmhvc3RzIiBzZWN0aW9uPSI1Ii8+LCA8bWFucmVmIG5hbWU9ImF2YWhpLnNlcnZpY2UiIHNlY3Rpb249IjUiLz4sIDxtYW5yZWYgbmFtZT0iYXZhaGktZG5zY29uZmQiIHNlY3Rpb249IjgiLz4sIDxtYW5yZWYgbmFtZT0iYXZhaGktc2V0LWhvc3QtbmFtZSIgc2VjdGlvbj0iMSIvPgorCSAgPC9wPgorCisgICAgICA8cD5odHRwOi8vYXZhaGkub3JnL3dpa2kvQXZhaGlBbmRVbmljYXN0RG90TG9jYWwgZG9jdW1lbnRzIHRoZSBwcm9ibGVtcyB3aGVuIHVzaW5nIEF2YWhpIGluIGEgdW5pY2FzdCBETlMgem9uZSAubG9jYWwuPC9wPgorCTwvc2VjdGlvbj4KKworCTxzZWN0aW9uIG5hbWU9IkNvbW1lbnRzIj4KKwkgIDxwPlRoaXMgbWFuIHBhZ2Ugd2FzIHdyaXR0ZW4gdXNpbmcgPG1hbnJlZiBuYW1lPSJ4bWwybWFuIiBzZWN0aW9uPSIxIgorCQkgIGhyZWY9Imh0dHA6Ly9tYXNxbWFpbC5jeC94bWwybWFuLyIvPiBieSBPbGl2ZXIgS3VydGguPC9wPgorCTwvc2VjdGlvbj4KKworICA8L21hbnBhZ2U+CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvbWFuL2F2YWhpLWRhZW1vbi5jb25mLjUgYi9hdmFoaS0wLjYuMzEvbWFuL2F2YWhpLWRhZW1vbi5jb25mLjUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGViYzlkNAotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9tYW4vYXZhaGktZGFlbW9uLmNvbmYuNQpAQCAtMCwwICsxLDk4IEBACisuVEggYXZhaGktZGFlbW9uLmNvbmYgNSBVc2VyIE1hbnVhbHMKKy5TSCBOQU1FCithdmFoaS1kYWVtb24uY29uZiBcLSBhdmFoaS1kYWVtb24gY29uZmlndXJhdGlvbiBmaWxlCisuU0ggU1lOT1BTSVMKK1xmQi9ob21lL2xlbm5hcnQvdG1wL2F2YWhpL2V0Yy9hdmFoaS9hdmFoaS1kYWVtb24uY29uZgorXGYxCisuU0ggREVTQ1JJUFRJT04KK1xmSWF2YWhpLWRhZW1vbi5jb25mXGYxIGlzIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIGF2YWhpLWRhZW1vbi4KKy5TSCBTRUNUSU9OIFtTRVJWRVJdCisuVFAKK1xmQmhvc3QtbmFtZT1cZjEgU2V0IHRoZSBob3N0IG5hbWUgYXZhaGktZGFlbW9uIHRyaWVzIHRvIHJlZ2lzdGVyIG9uIHRoZSBMQU4uIElmIG9taXRlZCBkZWZhdWx0cyB0byB0aGUgc3lzdGVtIGhvc3QgbmFtZSBhcyBzZXQgd2l0aCB0aGUgc2V0aG9zdG5hbWUoKSBzeXN0ZW0gY2FsbC4KKy5UUAorXGZCZG9tYWluLW5hbWU9XGYxIFNldCB0aGUgZGVmYXVsdCBkb21haW4gbmFtZSBhdmFoaS1kYWVtb24gdHJpZXMgdG8gcmVnaXN0ZXIgaXRzIGhvc3QgbmFtZSBhbmQgc2VydmljZXMgb24gdGhlIExBTiBpbi4gSWYgb21pdHRlZCBkZWZhdWx0cyB0byAiLmxvY2FsIi4KKy5UUAorXGZCYnJvd3NlLWRvbWFpbnM9XGYxIFNldCBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGJyb3dzaW5nIGRvbWFpbnMgKGluIGFkZGl0aW9uIHRvIHRoZSBkZWZhdWx0IG9uZSBhbmQgdGhvc2UgYW5ub3VuY2VkIGluc2lkZSB0aGUgZGVmYXVsdCBicm93c2luZyBkb21haW4pLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZSB1c2VyIG1heSBzcGVjaWZ5IGFkZGl0aW9uYWwgYnJvd3NpbmcgZG9tYWlucyBvbiB0aGUgY2xpZW50IHNpZGUsIGVpdGhlciBieSBzZXR0aW5nICRBVkFISV9CUk9XU0VfRE9NQUlOUyB0byBhIGxpc3Qgb2YgY29sb24gc2VwYXJhdGVkIGRvbWFpbnMgb3IgYnkgYWRkaW5nIHRoZW0gdG8gdGhlIFhERyBjb25maWcgZmlsZSBcZkl+Ly5jb25maWcvYXZhaGkvYnJvd3NlLWRvbWFpbnNcZjEgKHNlcGFyYXRlZCBieSBuZXdsaW5lcykuCisuVFAKK1xmQnVzZS1pcHY0PVxmMSBUYWtlcyBhIGJvb2xlYW4gdmFsdWUgKCJ5ZXMiIG9yICJubyIpLiBJZiBzZXQgdG8gIm5vIiBhdmFoaS1kYWVtb24gd2lsbCBub3QgdXNlIElQdjQgc29ja2V0cy4gRGVmYXVsdCBpcyAieWVzIi4KKy5UUAorXGZCdXNlLWlwdjY9XGYxIFRha2VzIGEgYm9vbGVhbiB2YWx1ZSAoInllcyIgb3IgIm5vIikuIElmIHNldCB0byAibm8iIGF2YWhpLWRhZW1vbiB3aWxsIG5vdCB1c2UgSVB2NiBzb2NrZXRzLiBEZWZhdWx0IGlzICJ5ZXMiLgorLlRQCitcZkJhbGxvdy1pbnRlcmZhY2VzPVxmMSBTZXQgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBhbGxvd2VkIG5ldHdvcmsgaW50ZXJmYWNlcyB0aGF0IHNob3VsZCBiZSB1c2VkIGJ5IHRoZSBhdmFoaS1kYWVtb24uIFRyYWZmaWMgb24gb3RoZXIgaW50ZXJmYWNlcyB3aWxsIGJlIGlnbm9yZWQuIElmIHNldCB0byBhbiBlbXB0eSBsaXN0IGFsbCBsb2NhbCBpbnRlcmZhY2VzIGV4Y2VwdCBsb29wYmFjayBhbmQgcG9pbnQtdG8tcG9pbnQgd2lsbCBiZSB1c2VkLgorLlRQCitcZkJkZW55LWludGVyZmFjZXM9XGYxIFNldCBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIG5ldHdvcmsgaW50ZXJmYWNlcyB0aGF0IHNob3VsZCBiZSBpZ25vcmVkIGJ5IGF2YWhpLWRhZW1vbi4gT3RoZXIgbm90IHNwZWNpZmllZCBpbnRlcmZhY2VzIHdpbGwgYmUgdXNlZCwgdW5sZXNzIFxmQmFsbG93LWludGVyZmFjZXM9XGYxIGlzIHNldC4gVGhpcyBvcHRpb24gdGFrZXMgcHJlY2VkZW5jZSBvdmVyIFxmQmFsbG93LWludGVyZmFjZXM9XGYxLgorLlRQCitcZkJjaGVjay1yZXNwb25zZS10dGw9XGYxIFRha2VzIGEgYm9vbGVhbiB2YWx1ZSAoInllcyIgb3IgIm5vIikuIElmIHNldCB0byAieWVzIiwgYW4gYWRkaXRpb25hbCBzZWN1cml0eSBjaGVjayBpcyBhY3RpdmF0ZWQ6IGluY29taW5nIElQIHBhY2tldHMgd2lsbCBiZSBpZ25vcmVkIHVubGVzcyB0aGUgSVAgVFRMIGlzIDI1NS4gRWFybGllciBtRE5TIHNwZWNpZmljYXRpb25zIHJlcXVpcmVkIHRoaXMgY2hlY2suIFNpbmNlIHRoaXMgZmVhdHVyZSBtYXkgYmUgaW5jb21wYXRpYmxlIHdpdGggbmV3ZXIgaW1wbGVtZW50YXRpb25zIG9mIG1ETlMgaXQgZGVmYXVsdHMgdG8gIm5vIi4gT24gdGhlIG90aGVyIGhhbmQgaXQgcHJvdmlkZXMgZXh0cmEgc2VjdXJpdHkuCisuVFAKK1xmQnVzZS1pZmYtcnVubmluZz1cZjEgVGFrZXMgYSBib29sZWFuIHZhbHVlICgieWVzIiBvciAibm8iKS4gSWYgc2V0IHRvICJ5ZXMiIGF2YWhpLWRhZW1vbiBtb25pdG9ycyB0aGUgSUZGX1JVTk5JTkcgZmxhZyBiaXQgd2hpY2ggaXMgdXNlZCBieSBzb21lIChtb2Rlcm4pIG5ldHdvcmsgZHJpdmVycyB0byB0ZWxsIHVzZXIgc3BhY2UgaWYgYSBuZXR3b3JrIGNhYmxlIGlzIHBsdWdnZWQgaW4gKGluIGNhc2Ugb2YgY29wcGVyIGV0aGVybmV0KSwgb3IgdGhlIG5ldHdvcmsgY2FyZCBpcyBhc3NvY2lhdGVkIHdpdGggc29tZSBraW5kIG9mIG5ldHdvcmsgKGluIGNhc2Ugb2YgV0xBTikuIElmIElGRl9SVU5OSU5HIGlzIHNldCBhdmFoaS1kYWVtb24gd2lsbCBhdXRvbWF0aWNhbGx5IGFubm91bmNlIGl0cyBzZXJ2aWNlcyBvbiB0aGF0IG5ldHdvcmsuIFVuZm9ydHVuYXRlbHkgZmFyIHRvbyBtYW55IG5ldHdvcmsgZHJpdmVycyBkbyBub3Qgc3VwcG9ydCB0aGlzIGZsYWcgb3Igc3VwcG9ydCBpdCBpbiBhIGJyb2tlbiB3YXkuIFRoZXJlZm9yZSB0aGlzIG9wdGlvbiBkZWZhdWx0cyB0byAibm8iLgorLlRQCitcZkJlbmFibGUtZGJ1cz1cZjEgVGFrZXMgZWl0aGVyICJ5ZXMiLCAibm8iIG9yICJ3YXJuIi4gSWYgc2V0IHRvICJ5ZXMiIGF2YWhpLWRhZW1vbiBjb25uZWN0cyB0byBELUJ1cywgb2ZmZXJpbmcgYW4gb2JqZWN0IG9yaWVudGVkIGNsaWVudCBBUEkuIEl0IGlzIG9ubHkgYXZhaWxhYmxlIGlmIEF2YWhpIGhhcyBiZWVuIGNvbXBpbGVkIHdpdGggXGZCLS1lbmFibGUtZGJ1c1xmMSBpbiB3aGljaCBjYXNlIGl0IGRlZmF1bHRzIHRvICJ5ZXMiLiAid2FybiIgYmVoYXZlcyBsaWtlICJ5ZXMiLCBidXQgdGhlIGRhZW1vbiBzdGFydHMgdXAgZXZlbiB3aGVuIGl0IGZhaWxzIHRvIGNvbm5lY3QgdG8gYSBELUJ1cyBkYWVtb24uIEluIGFkZGl0aW9uLCBpZiB0aGUgY29ubmVjdGlvbiB0byB0aGUgRC1CdXMgZGFlbW9uIGlzIHRlcm1pbmF0ZWQgd2UgdHJ5IHRvIHJlY29ubmVjdC4gKFVubGVzcyB3ZSBhcmUgaW4gYSBjaHJvb3QoKSBlbnZpcm9ubWVudCB3aGVyZSB0aGlzIGRlZmluaXRlbHkgd2lsbCBmYWlsLikgCisuVFAKK1xmQmRpc2FsbG93LW90aGVyLXN0YWNrcz1cZjEgVGFrZXMgYSBib29sZWFuIHZhbHVlICgieWVzIiBvciAibm8iKS4gSWYgc2V0IHRvICJ5ZXMiIG5vIG90aGVyIHByb2Nlc3MgaXMgYWxsb3dlZCB0byBiaW5kIHRvIFVEUCBwb3J0IDUzNTMuIFRoaXMgZWZmZWN0aXZlbHkgaW1wZWRlcyBvdGhlciBtRE5TIHN0YWNrcyBmcm9tIHJ1bm5pbmcgb24gdGhlIGhvc3QuIFVzZSB0aGlzIGFzIGEgc2VjdXJpdHkgbWVhc3VyZSB0byBtYWtlIHN1cmUgdGhhdCBvbmx5IEF2YWhpIGlzIHJlc3BvbnNpYmxlIGZvciBtRE5TIHRyYWZmaWMuIFBsZWFzZSBub3RlIHRoYXQgd2UgZG8gbm90IHJlY29tbWVuZCBydW5uaW5nIG11bHRpcGxlIG1ETlMgc3RhY2tzIG9uIHRoZSBzYW1lIGhvc3Qgc2ltdWx0YW5lb3VzbHkuIFRoaXMgaGFtcGVycyByZWxpYWJpbGl0eSBhbmQgaXMgYSB3YXN0ZSBvZiByZXNvdXJjZXMuIEhvd2V2ZXIsIHRvIG5vdCBhbm5veSBwZW9wbGUgdGhpcyBvcHRpb24gZGVmYXVsdHMgdG8gIm5vIi4KKy5UUAorXGZCYWxsb3ctcG9pbnQtdG8tcG9pbnQ9XGYxIFRha2VzIGEgYm9vbGVhbiB2YWx1ZSAoInllcyIgb3IgIm5vIikuIElmIHNldCB0byAieWVzIiBhdmFoaS1kYWVtb24gd2lsbCBtYWtlIHVzZSBvZiBpbnRlcmZhY2VzIHdpdGggdGhlIFBPSU5UT1BPSU5UIGZsYWcgc2V0LiBUaGlzIG9wdGlvbiBkZWZhdWx0cyB0byAibm8iIGFzIGl0IG1pZ2h0IG1ha2UgbUROUyB1bnJlbGlhYmxlIGR1ZSB0byB1c3VhbGx5IGxhcmdlIGxhdGVuY2llcyB3aXRoIHN1Y2ggbGlua3MgYW5kIG9wZW5zIGEgcG90ZW50aWFsIHNlY3VyaXR5IGhvbGUgYnkgYWxsb3dpbmcgbUROUyBhY2Nlc3MgZnJvbSBJbnRlcm5ldCBjb25uZWN0aW9ucy4gVXNlIHdpdGggY2FyZSBhbmQgWU1NViEKKy5UUAorXGZCY2FjaGUtZW50cmllcy1tYXg9XGYxIFRha2VzIGFuIHVuc2lnbmVkIGludGVnZXIgc3BlY2lmeWluZyBob3cgbWFueSByZXNvdXJjZSByZWNvcmRzIGFyZSBjYWNoZWQgcGVyIGludGVyZmFjZS4gQmlnZ2VyIHZhbHVlcyBhbGxvdyBtRE5TIHdvcmsgY29ycmVjdGx5IGluIGxhcmdlIExBTnMgYnV0IGFsc28gaW5jcmVhc2UgbWVtb3J5IGNvbnN1bXB0aW9uLgorLlRQCitcZkJjbGllbnRzLW1heD1cZjEgVGFrZXMgYW4gdW5zaWduZWQgaW50ZWdlci4gVGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgRC1CdXMgY2xpZW50cyBhbGxvd2VkLiBJZiB0aGUgbWF4aW11bSBudW1iZXIgaXMgcmVhY2hlZCBmdXJ0aGVyIGNsaWVudHMgd2lsbCBiZSByZWZ1c2VkIHVudGlsIGF0IGxlYXN0IG9uZSBleGlzdGluZyBjbGllbnQgZGlzY29ubmVjdHMuCisuVFAKK1xmQm9iamVjdHMtcGVyLWNsaWVudC1tYXg9XGYxIFRha2VzIGFuIHVuc2lnbmVkIGludGVnZXIuIFRoZSBtYXhpbXVtIG51bWJlciBvZiBvYmplY3RzIChlbnRyeSBncm91cHMsIGJyb3dzZXJzLCByZXNvbHZlcnMpIHRoYXQgbWF5IGJlIHJlZ2lzdGVyZWQgcGVyIEQtQnVzIGNsaWVudCBhdCBhIHRpbWUuIElmIHRoZSBtYXhpbXVtIG51bWJlciBpcyByZWFjaGVkIGZ1cnRoZXIgb2JqZWN0IGNyZWF0aW9uIHdpbGwgYmUgcmVmdXNlZCB1bnRpbCBhdCBsZWFzdCBvbmUgb2JqZWN0IGlzIGZyZWVkLgorLlRQCitcZkJlbnRyaWVzLXBlci1lbnRyeS1ncm91cC1tYXg9XGYxIFRha2VzIGFuIHVuc2lnbmVkIGludGVnZXIuIFRoZSBtYXhpbXVtIG51bWJlciBvZiBlbnRyaWVzIChyZXNvdXJjZSByZWNvcmRzKSBwZXIgZW50cnkgZ3JvdXAgcmVnaXN0ZXJlZCBieSBhIEQtQnVzIGNsaWVudCBhdCBhIHRpbWUuIElmIHRoZSBtYXhpbXVtIG51bWJlciBpcyByZWFjaGVkIGZ1cnRoZXIgcmVzb3VyY2UgcmVjb3JkcyBtYXkgbm90IGJlIGFkZGVkIHRvIGFuIGVudHJ5IGdyb3VwLgorLlRQCitcZkJyYXRlbGltaXQtaW50ZXJ2YWwtdXNlYz1cZjEgVGFrZXMgYW4gdW5zaWduZWQgaW50ZWdlci4gU2V0cyB0aGUgcGVyLWludGVyZmFjZSBwYWNrZXQgcmF0ZS1saW1pdGluZyBpbnRlcnZhbCBwYXJhbWV0ZXIuIFRvZ2V0aGVyIHdpdGggXGZCcmF0ZWxpbWl0LWJ1cnN0PVxmMSB0aGlzIG1heSBiZSB1c2VkIHRvIGNvbnRyb2wgdGhlIG1heGltdW0gbnVtYmVyIG9mIHBhY2tldHMgQXZhaGkgd2lsbCBnZW5lcmF0ZWQgaW4gYSBzcGVjaWZpYyBwZXJpb2Qgb2YgdGltZSBvbiBhbiBpbnRlcmZhY2UuCisuVFAKK1xmQnJhdGVsaW1pdC1idXJzdD1cZjEgVGFrZXMgYW4gdW5zaWduZWQgaW50ZWdlci4gU2V0cyB0aGUgcGVyLWludGVyZmFjZSBwYWNrZXQgcmF0ZS1saW1pdGluZyBidXJzdCBwYXJhbWV0ZXIuIFRvZ2V0aGVyIHdpdGggXGZCcmF0ZWxpbWl0LWludGVydmFsLXVzZWM9XGYxIHRoaXMgbWF5IGJlIHVzZWQgdG8gY29udHJvbCB0aGUgbWF4aW11bSBudW1iZXIgb2YgcGFja2V0cyBBdmFoaSB3aWxsIGdlbmVyYXRlZCBpbiBhIHNwZWNpZmljIHBlcmlvZCBvZiB0aW1lIG9uIGFuIGludGVyZmFjZS4KKy5TSCBTRUNUSU9OIFtXSURFLUFSRUFdCisuVFAKK1xmQmVuYWJsZS13aWRlLWFyZWE9XGYxIFRha2VzIGEgYm9vbGVhbiB2YWx1ZSAoInllcyIgb3IgIm5vIikuIEVuYWJsZSB3aWRlLWFyZWEgRE5TLVNELCBha2EgRE5TLVNEIG92ZXIgdW5pY2FzdCBETlMuIElmIHRoaXMgaXMgZW5hYmxlZCBvbmx5IGRvbWFpbnMgZW5kaW5nIGluIC5sb2NhbCB3aWxsIGJlIHJlc29sdmVkIG9uIG1ETlMsIGFsbCBvdGhlciBkb21haW5zIGFyZSByZXNvbHZlZCB2aWEgdW5pY2FzdCBETlMuIElmIHlvdSB3YW50IHRvIG1haW50YWluIG11bHRpcGxlIGRpZmZlcmVudCBtdWx0aWNhc3QgRE5TIGRvbWFpbnMgZXZlbiB3aXRoIHRoaXMgb3B0aW9uIGVuYWJsZWQgd2UgZW5jb3VyYWdlIHlvdSB0byB1c2Ugc3ViZG9tYWlucyBvZiAubG9jYWwsIHN1Y2ggYXMgImtpdGNoZW4ubG9jYWwiLiBUaGlzIG9wdGlvbiBkZWZhdWx0cyB0byAieWVzIi4KKy5TSCBTRUNUSU9OIFtQVUJMSVNIXQorLlRQCitcZkJkaXNhYmxlLXB1Ymxpc2hpbmc9XGYxIFRha2VzIGEgYm9vbGVhbiB2YWx1ZSAoInllcyIgb3IgIm5vIikuIElmIHNldCB0byAieWVzIiwgbm8gcmVjb3JkIHdpbGwgYmUgcHVibGlzaGVkIGJ5IEF2YWhpLCBub3QgZXZlbiBhZGRyZXNzIHJlY29yZHMgZm9yIHRoZSBsb2NhbCBob3N0LiBBdmFoaSB3aWxsIGJlIHN0YXJ0ZWQgaW4gYSBxdWVyeWluZy1vbmx5IG1vZGUuIFVzZSB0aGlzIGlzIGEgc2VjdXJpdHkgbWVhc3VyZS4gVGhpcyBvcHRpb24gZGVmYXVsdHMgdG8gIm5vIgorLlRQCitcZkJkaXNhYmxlLXVzZXItc2VydmljZS1wdWJsaXNoaW5nPVxmMSBUYWtlcyBhIGJvb2xlYW4gdmFsdWUgKCJ5ZXMiIG9yICJubyIpLiBJZiBzZXQgdG8gInllcyIsIEF2YWhpIHdpbGwgc3RpbGwgcHVibGlzaCBhZGRyZXNzIHJlY29yZHMgYW5kIHN1Y2hsaWtlIGJ1dCB3aWxsIG5vdCBhbGxvdyB1c2VyIGFwcGxpY2F0aW9ucyB0byBwdWJsaXNoIHNlcnZpY2VzLiBVc2UgdGhpcyBpcyBhIHNlY3VyaXR5IG1lYXN1cmUuIFRoaXMgb3B0aW9uIGRlZmF1bHRzIHRvICJubyIKKy5UUAorXGZCYWRkLXNlcnZpY2UtY29va2llPVxmMSBUYWtlcyBhIGJvb2xlYW4gdmFsdWUgKCJ5ZXMiIG9yICJubyIpLiBJZiBzZXQgdG8gInllcyIgYW4gaW1wbGljaXQgVFhUIGVudHJ5IHdpbGwgYmUgYWRkZWQgdG8gYWxsIGxvY2FsbHkgcmVnaXN0ZXJlZCBzZXJ2aWNlcywgY29udGFpbmluZyBhIGNvb2tpZSB2YWx1ZSB3aGljaCBpcyBjaG9zZW4gcmFuZG9tbHkgb24gZGFlbW9uIHN0YXJ0dXAuIFRoaXMgY2FuIGJlIHVzZWQgdG8gZGV0ZWN0IGlmIHR3byBzZXJ2aWNlcyBvbiB0d28gZGlmZmVyZW50IGludGVyZmFjZXMvcHJvdG9jb2xzIGFyZSBhY3R1YWxseSBpZGVudGljYWwuIERlZmF1bHRzIHRvICJubyIuCisuVFAKK1xmQnB1Ymxpc2gtYWRkcmVzc2VzPVxmMSBUYWtlcyBhIGJvb2xlYW4gdmFsdWUgKCJ5ZXMiIG9yICJubyIpLiBJZiBzZXQgdG8gInllcyIgYXZhaGktZGFlbW9uIHdpbGwgcmVnaXN0ZXIgbUROUyBhZGRyZXNzIHJlY29yZHMgZm9yIGFsbCBsb2NhbCBJUCBhZGRyZXNzZXMuIFVubGVzcyB5b3Ugd2FudCB0byB1c2UgYXZhaGktZGFlbW9uIGV4Y2x1c2l2ZWx5IGZvciBicm93c2luZyBpdCdzIHJlY29tbWVuZGVkIHRvIGVuYWJsZSB0aGlzLiBJZiB5b3UgcGxhbiB0byByZWdpc3RlciBsb2NhbCBzZXJ2aWNlcyB5b3UgbmVlZCB0byBlbmFibGUgdGhpcyBvcHRpb24uIERlZmF1bHRzIHRvICJ5ZXMiLgorLlRQCitcZkJwdWJsaXNoLWhpbmZvPVxmMSBUYWtlcyBhIGJvb2xlYW4gdmFsdWUgKCJ5ZXMiIG9yICJubyIpLiBJZiBzZXQgdG8gInllcyIgYXZhaGktZGFlbW9uIHdpbGwgcmVnaXN0ZXIgYW4gbUROUyBISU5GTyByZWNvcmQgb24gYWxsIGludGVyZmFjZXMgd2hpY2ggY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxvY2FsIG9wZXJhdGluZyBzeXN0ZW0gYW5kIENQVSwgd2hpY2ggbWlnaHQgYmUgdXNlZnVsIGZvciBhZG1pbmlzdHJhdGl2ZSBwdXJwb3Nlcy4gVGhpcyBpcyByZWNvbW1lbmRlZCBieSB0aGUgbUROUyBzcGVjaWZpY2F0aW9uIGJ1dCBub3QgcmVxdWlyZWQuIEZvciB0aGUgc2FrZSBvZiBwcml2YWN5IHlvdSBtaWdodCBjaG9vc2UgdG8gZGlzYWJsZSB0aGlzIGZlYXR1cmUuIERlZmF1bHRzIHRvICJ5ZXMuIgorLlRQCitcZkJwdWJsaXNoLXdvcmtzdGF0aW9uPVxmMSBUYWtlcyBhIGJvb2xlYW4gdmFsdWUgKCJ5ZXMiIG9yICJubyIpLiBJZiBzZXQgdG8gInllcyIgYXZhaGktZGFlbW9uIHdpbGwgcmVnaXN0ZXIgYSBzZXJ2aWNlIG9mIHR5cGUgIl93b3Jrc3RhdGlvbi5fdGNwIiBvbiB0aGUgbG9jYWwgTEFOLiBUaGlzIG1pZ2h0IGJlIHVzZWZ1bCBmb3IgYWRtaW5pc3RyYXRpdmUgcHVycG9zZXMgKGkuZS4gYnJvd3NlIGZvciBhbGwgUENzIG9uIHRoZSBMQU4pLCBidXQgaXMgbm90IHJlcXVpcmVkIG9yIHJlY29tbWVuZGVkIGJ5IGFueSBzcGVjaWZpY2F0aW9uLiBOZXdlciBNYWNPUyBYIHJlbGVhc2VzIHJlZ2lzdGVyIGEgc2VydmljZSBvZiB0aGlzIHR5cGUuIERlZmF1bHRzIHRvICJ5ZXMiLgorLlRQCitcZkJwdWJsaXNoLWRvbWFpbj1cZjEgVGFrZXMgYSBib29sZWFuIHZhbHVlICgieWVzIiBvciAibm8iKS4gSWYgc2V0IHRvICJ5ZXMiIGF2YWhpLWRhZW1vbiB3aWxsIGFubm91bmNlIHRoZSBsb2NhbGx5IHVzZWQgZG9tYWluIG5hbWUgKHNlZSBhYm92ZSkgZm9yIGJyb3dzaW5nIGJ5IG90aGVyIGhvc3RzLiBEZWZhdWx0cyB0byAieWVzIi4KKy5UUAorXGZCcHVibGlzaC1kbnMtc2VydmVycz1cZjEgVGFrZXMgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBJUCBhZGRyZXNzZXMgZm9yIHVuaWNhc3QgRE5TIHNlcnZlcnMuIFlvdSBjYW4gdXNlIHRoaXMgdG8gYW5ub3VuY2UgdW5pY2FzdCBETlMgc2VydmVycyB2aWEgbUROUy4gV2hlbiB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYXZhaGktZG5zY29uZmQgb24gdGhlIGNsaWVudCBzaWRlIHRoaXMgYWxsb3dzIERIQ1AtbGlrZSBjb25maWd1cmF0aW9uIG9mIHVuaWNhc3QgRE5TIHNlcnZlcnMuCisuVFAKK1xmQnB1Ymxpc2gtcmVzb2x2LWNvbmYtZG5zLXNlcnZlcnM9XGYxIFRha2VzIGEgYm9vbGVhbiB2YWx1ZSAoInllcyIgb3IgIm5vIikuIElmIHNldCB0byAieWVzIiBhdmFoaS1kYWVtb24gd2lsbCBwdWJsaXNoIHRoZSB1bmljYXN0IEROUyBzZXJ2ZXJzIHNwZWNpZmllZCBpbiBcZkkvZXRjL3Jlc29sdi5jb25mXGYxIGluIGFkZGl0aW9uIHRvIHRob3NlIHNwZWNpZmllZCB3aXRoIFxmQnB1Ymxpc2gtZG5zLXNlcnZlcnNcZjEuIFNlbmQgYXZhaGktZGFlbW9uIGEgU0lHSFVQIHRvIGhhdmUgaXQgcmVsb2FkIHRoaXMgZmlsZS4gRGVmYXVsdHMgdG8gIm5vIi4KKy5UUAorXGZCcHVibGlzaC1hYWFhLW9uLWlwdjQ9XGYxIFRha2VzIGEgYm9vbGVhbiB2YWx1ZSAoInllcyIgb3IgIm5vIikuIElmIHNldCB0byAieWVzIiBhdmFoaS1kYWVtb24gd2lsbCBwdWJsaXNoIGFuIElQdjYgQUFBQSByZWNvcmQgdmlhIElQdjQsIGkuZS4gdGhlIGxvY2FsIElQdjYgYWRkcmVzc2VzIGNhbiBiZSByZXNvbHZlZCB1c2luZyBhbiBJUHY0IHRyYW5zcG9ydC4gT25seSB1c2VmdWwgd2hlbiBJUHY0IGlzIGVuYWJsZWQgd2l0aCBcZkJ1c2UtaXB2ND10cnVlXGYxLiBEZWZhdWx0cyB0byAieWVzIi4KKy5UUAorXGZCcHVibGlzaC1hLW9uLWlwdjY9XGYxIFRha2VzIGEgYm9vbGVhbiB2YWx1ZSAoInllcyIgb3IgIm5vIikuIElmIHNldCB0byAieWVzIiBhdmFoaS1kYWVtb24gd2lsbCBwdWJsaXNoIGFuIElQdjQgQSByZWNvcmQgdmlhIElQdjYsIGkuZS4gdGhlIGxvY2FsIElQdjQgYWRkcmVzc2VzIGNhbiBiZSByZXNvbHZlZCB1c2luZyBhbiBJUHY2IHRyYW5zcG9ydC4gT25seSB1c2VmdWwgd2hlbiBJUHY2IGlzIGVuYWJsZWQgd2l0aCBcZkJ1c2UtaXB2Nj10cnVlXGYxLiBEZWZhdWx0cyB0byAibm8iLgorLlNIIFNFQ1RJT04gW1JFRkxFQ1RPUl0KKy5UUAorXGZCZW5hYmxlLXJlZmxlY3Rvcj1cZjEgVGFrZXMgYSBib29sZWFuIHZhbHVlICgieWVzIiBvciAibm8iKS4gSWYgc2V0IHRvICJ5ZXMiIGF2YWhpLWRhZW1vbiB3aWxsIHJlZmxlY3QgaW5jb21pbmcgbUROUyByZXF1ZXN0cyB0byBhbGwgbG9jYWwgbmV0d29yayBpbnRlcmZhY2VzLCBlZmZlY3RpdmVseSBhbGxvd2luZyBjbGllbnRzIHRvIGJyb3dzZSBtRE5TL0ROUy1TRCBzZXJ2aWNlcyBvbiBhbGwgbmV0d29ya3MgY29ubmVjdGVkIHRvIHRoZSBnYXRld2F5LiBUaGUgZ2F0ZXdheSBpcyBzb21ld2hhdCBpbnRlbGxpZ2VudCBhbmQgc2hvdWxkIHdvcmsgd2l0aCBhbGwga2luZHMgb2YgbUROUyB0cmFmZmljLCB0aG91Z2ggc29tZSBmdW5jdGlvbmFsaXR5IGlzIGxvc3QgKHNwZWNpZmljYWxseSB0aGUgdW5pY2FzdCByZXBseSBiaXQsIHdoaWNoIGlzIHVzZWQgcmFyZWx5IGFueXdheSkuIE1ha2Ugc3VyZSB0byBub3QgcnVuIG11bHRpcGxlIHJlZmxlY3RvcnMgYmV0d2VlbiB0aGUgc2FtZSBuZXR3b3JrcywgdGhpcyBtaWdodCBjYXVzZSB0aGVtIHRvIHBsYXkgUGluZyBQb25nIHdpdGggbUROUyBwYWNrZXRzLiBEZWZhdWx0cyB0byAibm8iLgorLlRQCitcZkJyZWZsZWN0LWlwdj1cZjEgVGFrZXMgYSBib29sZWFuIHZhbHVlICgieWVzIiBvciAibm8iKS4gSWYgc2V0IHRvICJ5ZXMiIGFuZCBcZkJlbmFibGUtcmVmbGVjdG9yXGYxIGlzIGVuYWJsZWQsIGF2YWhpLWRhZW1vbiB3aWxsIGZvcndhcmQgbUROUyB0cmFmZmljIGJldHdlZW4gSVB2NCBhbmQgSVB2Niwgd2hpY2ggaXMgdXN1YWxseSBub3QgcmVjb21tZW5kZWQuIERlZmF1bHRzIHRvICJubyIuCisuU0ggU0VDVElPTiBbUkxJTUlUU10KK1RoaXMgc2VjdGlvbiBpcyB1c2VkIHRvIGRlZmluZSBzeXN0ZW0gcmVzb3VyY2UgbGltaXRzIGZvciB0aGUgZGFlbW9uLiBTZWUgXGZCc2V0cmxpbWl0KDIpXGYxIGZvciBtb3JlIGluZm9ybWF0aW9uLiBJZiBhbnkgb2YgdGhlIG9wdGlvbnMgaXMgbm90IHNwZWNpZmllZCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLCBhdmFoaS1kYWVtb24gZG9lcyBub3QgY2hhbmdlIGl0IGZyb20gdGhlIHN5c3RlbSBkZWZhdWx0cy4KKy5UUAorXGZCcmxpbWl0LWFzPVxmMSBWYWx1ZSBpbiBieXRlcyBmb3IgUkxJTUlUX0FTIChtYXhpbXVtIHNpemUgb2YgdGhlIHByb2Nlc3MncyB2aXJ0dWFsIG1lbW9yeSkuIFNlbnNpYmxlIHZhbHVlcyBhcmUgaGVhdmlseSBzeXN0ZW0gZGVwZW5kZW50LgorLlRQCitcZkJybGltaXQtY29yZT1cZjEgVmFsdWUgaW4gYnl0ZXMgZm9yIFJMSU1JVF9DT1JFIChtYXhpbXVtIGNvcmUgZmlsZSBzaXplKS4gVW5sZXNzIHlvdSB3YW50IHRvIGRlYnVnIGF2YWhpLWRhZW1vbiwgaXQgaXMgc2FmZSB0byBzZXQgdGhpcyB0byAwLgorLlRQCitcZkJybGltaXQtZGF0YT1cZjEgVmFsdWUgaW4gYnl0ZXMgZm9yIFJMSU1JVF9EQVRBIChtYXhpbXVtIHNpemUgb2YgdGhlIHByb2Nlc3MncyBkYXRhIHNlZ21lbnQpLiBTZW5zaWJsZSB2YWx1ZXMgYXJlIGhlYXZpbHkgc3lzdGVtIGRlcGVuZGVudC4KKy5UUAorXGZCcmxpbWl0LWZzaXplPVxmMSBWYWx1ZSBmb3IgUkxJTUlUX0ZTSVpFIChtYXhpbXVtIHNpemUgb2YgZmlsZXMgdGhlIHByb2Nlc3MgbWF5IGNyZWF0ZSkuIFNpbmNlIGF2YWhpLWRhZW1vbiBzaG91bGRuJ3Qgd3JpdGUgYW55IGZpbGVzIHRvIGRpc2ssIGl0IGlzIHNhZmUgdG8gc2V0IHRoaXMgdG8gMC4KKy5UUAorXGZCcmxpbWl0LW5vZmlsZT1cZjEgVmFsdWUgZm9yIFJMSU1JVF9OT0ZJTEUgKG9wZW4gZmlsZSBkZXNjcmlwdG9ycykuIGF2YWhpLWRhZW1vbiBzaG91bGRuJ3QgbmVlZCBtb3JlIHRoYW4gMTUgdG8gMjAgb3BlbiBmaWxlIGRlc2NyaXB0b3JzIGNvbmN1cnJlbnRseS4KKy5UUAorXGZCcmxpbWl0LXN0YWNrPVxmMSBWYWx1ZSBpbiBieXRlcyBmb3IgUkxJTUlUX1NUQUNLIChtYXhpbXVtIHNpemUgb2YgdGhlIHByb2Nlc3Mgc3RhY2spLiBTZW5zaWJsZSB2YWx1ZXMgYXJlIGhlYXZpbHkgc3lzdGVtIGRlcGVuZGVudC4KKy5UUAorXGZCcmxpbWl0LW5wcm9jPVxmMSBWYWx1ZSBmb3IgUkxJTUlUX05QUk9DIChudW1iZXIgb2YgcHJvY2VzcyBvZiB1c2VyKS4gYXZhaGktZGFlbW9uIGZvcmtzIG9mIGEgaGVscGVyIHByb2Nlc3Mgb24gc3lzdGVtcyB3aGVyZSBcZkJjaHJvb3QoMilcZjEgaXMgYXZhaWxhYmxlLiBUaGVyZWZvcmUgdGhpcyB2YWx1ZSBzaG91bGQgbm90IGJlIHNldCBiZWxvdyAyLgorLlNIIEFVVEhPUlMKK1RoZSBBdmFoaSBEZXZlbG9wZXJzIDxhdmFoaSAoYXQpIGxpc3RzIChkb3QpIGZyZWVkZXNrdG9wIChkb3QpIG9yZz47IEF2YWhpIGlzIGF2YWlsYWJsZSBmcm9tIFxmQmh0dHA6Ly9hdmFoaS5vcmcvXGYxCisuU0ggU0VFIEFMU08KK1xmQmF2YWhpLWRhZW1vbig4KVxmMSwgXGZCYXZhaGktZG5zY29uZmQoOClcZjEKKy5TSCBDT01NRU5UUworVGhpcyBtYW4gcGFnZSB3YXMgd3JpdHRlbiB1c2luZyBcZkJ4bWwybWFuKDEpXGYxIGJ5IE9saXZlciBLdXJ0aC4KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9tYW4vYXZhaGktZGFlbW9uLmNvbmYuNS54bWwuaW4gYi9hdmFoaS0wLjYuMzEvbWFuL2F2YWhpLWRhZW1vbi5jb25mLjUueG1sLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NzY0NWIKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvbWFuL2F2YWhpLWRhZW1vbi5jb25mLjUueG1sLmluCkBAIC0wLDAgKzEsMzc5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz48IS0tKi1ueG1sLSotLT4KKzwhRE9DVFlQRSBtYW5wYWdlIFNZU1RFTSAieG1sdG9tYW4uZHRkIj4KKzw/eG1sLXN0eWxlc2hlZXQgdHlwZT0idGV4dC94c2wiIGhyZWY9InhtbHRvbWFuLnhzbCIgPz4KKworPCEtLQorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorLS0+CisKKzxtYW5wYWdlIG5hbWU9ImF2YWhpLWRhZW1vbi5jb25mIiBzZWN0aW9uPSI1IiBkZXNjPSJhdmFoaS1kYWVtb24gY29uZmlndXJhdGlvbiBmaWxlIj4KKworICA8c3lub3BzaXM+CisgICAgPGNtZD5AcGtnc3lzY29uZmRpckAvYXZhaGktZGFlbW9uLmNvbmY8L2NtZD4KKyAgPC9zeW5vcHNpcz4KKworICA8ZGVzY3JpcHRpb24+CisgICAgPHA+PGZpbGU+YXZhaGktZGFlbW9uLmNvbmY8L2ZpbGU+IGlzIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIGF2YWhpLWRhZW1vbi48L3A+CisgIDwvZGVzY3JpcHRpb24+CisKKyAgPHNlY3Rpb24gbmFtZT0iU2VjdGlvbiBbU2VydmVyXSI+CisKKyAgICA8b3B0aW9uPgorICAgICAgPHA+PG9wdD5ob3N0LW5hbWU9PC9vcHQ+IFNldCB0aGUgaG9zdCBuYW1lIGF2YWhpLWRhZW1vbiB0cmllcworICAgICAgdG8gcmVnaXN0ZXIgb24gdGhlIExBTi4gSWYgb21pdGVkIGRlZmF1bHRzIHRvIHRoZSBzeXN0ZW0gaG9zdAorICAgICAgbmFtZSBhcyBzZXQgd2l0aCB0aGUgc2V0aG9zdG5hbWUoKSBzeXN0ZW0gY2FsbC48L3A+CisgICAgPC9vcHRpb24+CisKKyAgICA8b3B0aW9uPgorICAgICAgPHA+PG9wdD5kb21haW4tbmFtZT08L29wdD4gU2V0IHRoZSBkZWZhdWx0IGRvbWFpbiBuYW1lIGF2YWhpLWRhZW1vbgorICAgICAgdHJpZXMgdG8gcmVnaXN0ZXIgaXRzIGhvc3QgbmFtZSBhbmQgc2VydmljZXMgb24gdGhlIExBTiBpbi4gSWYKKyAgICAgIG9taXR0ZWQgZGVmYXVsdHMgdG8gIi5sb2NhbCIuPC9wPgorICAgIDwvb3B0aW9uPgorCisgICAgPG9wdGlvbj4KKyAgICAgIDxwPjxvcHQ+YnJvd3NlLWRvbWFpbnM9PC9vcHQ+IFNldCBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mCisgICAgICBicm93c2luZyBkb21haW5zIChpbiBhZGRpdGlvbiB0byB0aGUgZGVmYXVsdCBvbmUgYW5kIHRob3NlCisgICAgICBhbm5vdW5jZWQgaW5zaWRlIHRoZSBkZWZhdWx0IGJyb3dzaW5nIGRvbWFpbikuIFBsZWFzZSBub3RlCisgICAgICB0aGF0IHRoZSB1c2VyIG1heSBzcGVjaWZ5IGFkZGl0aW9uYWwgYnJvd3NpbmcgZG9tYWlucyBvbiB0aGUKKyAgICAgIGNsaWVudCBzaWRlLCBlaXRoZXIgYnkgc2V0dGluZyAkQVZBSElfQlJPV1NFX0RPTUFJTlMgdG8gYSBsaXN0CisgICAgICBvZiBjb2xvbiBzZXBhcmF0ZWQgZG9tYWlucyBvciBieSBhZGRpbmcgdGhlbSB0byB0aGUgWERHIGNvbmZpZworICAgICAgZmlsZSA8ZmlsZT5+Ly5jb25maWcvYXZhaGkvYnJvd3NlLWRvbWFpbnM8L2ZpbGU+IChzZXBhcmF0ZWQgYnkKKyAgICAgIG5ld2xpbmVzKS48L3A+CisKKyAgICA8L29wdGlvbj4KKworICAgIDxvcHRpb24+CisgICAgICA8cD48b3B0PnVzZS1pcHY0PTwvb3B0PiBUYWtlcyBhIGJvb2xlYW4gdmFsdWUgKCJ5ZXMiIG9yCisgICAgICAibm8iKS4gSWYgc2V0IHRvICJubyIgYXZhaGktZGFlbW9uIHdpbGwgbm90IHVzZSBJUHY0CisgICAgICBzb2NrZXRzLiBEZWZhdWx0IGlzICJ5ZXMiLjwvcD4KKyAgICA8L29wdGlvbj4KKworICAgIDxvcHRpb24+CisgICAgICA8cD48b3B0PnVzZS1pcHY2PTwvb3B0PiBUYWtlcyBhIGJvb2xlYW4gdmFsdWUgKCJ5ZXMiIG9yCisgICAgICAibm8iKS4gSWYgc2V0IHRvICJubyIgYXZhaGktZGFlbW9uIHdpbGwgbm90IHVzZSBJUHY2CisgICAgICBzb2NrZXRzLiBEZWZhdWx0IGlzICJ5ZXMiLjwvcD4KKyAgICA8L29wdGlvbj4KKworICAgIDxvcHRpb24+CisgICAgICA8cD48b3B0PmFsbG93LWludGVyZmFjZXM9PC9vcHQ+IFNldCBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mCisgICAgICBhbGxvd2VkIG5ldHdvcmsgaW50ZXJmYWNlcyB0aGF0IHNob3VsZCBiZSB1c2VkIGJ5IHRoZQorICAgICAgYXZhaGktZGFlbW9uLiBUcmFmZmljIG9uIG90aGVyIGludGVyZmFjZXMgd2lsbCBiZSBpZ25vcmVkLiBJZgorICAgICAgc2V0IHRvIGFuIGVtcHR5IGxpc3QgYWxsIGxvY2FsIGludGVyZmFjZXMgZXhjZXB0IGxvb3BiYWNrIGFuZAorICAgICAgcG9pbnQtdG8tcG9pbnQgd2lsbCBiZSB1c2VkLjwvcD4KKyAgICA8L29wdGlvbj4KKworICAgIDxvcHRpb24+CisgICAgICA8cD48b3B0PmRlbnktaW50ZXJmYWNlcz08L29wdD4gU2V0IGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YKKyAgICAgIG5ldHdvcmsgaW50ZXJmYWNlcyB0aGF0IHNob3VsZCBiZSBpZ25vcmVkIGJ5IGF2YWhpLWRhZW1vbi4KKyAgICAgIE90aGVyIG5vdCBzcGVjaWZpZWQgaW50ZXJmYWNlcyB3aWxsIGJlIHVzZWQsIHVubGVzcworICAgICAgPG9wdD5hbGxvdy1pbnRlcmZhY2VzPTwvb3B0PiBpcyBzZXQuIFRoaXMgb3B0aW9uIHRha2VzCisgICAgICBwcmVjZWRlbmNlIG92ZXIgPG9wdD5hbGxvdy1pbnRlcmZhY2VzPTwvb3B0Pi48L3A+CisgICAgPC9vcHRpb24+CisKKyAgICA8b3B0aW9uPgorICAgICAgPHA+PG9wdD5jaGVjay1yZXNwb25zZS10dGw9PC9vcHQ+IFRha2VzIGEgYm9vbGVhbiB2YWx1ZSAoInllcyIKKyAgICAgIG9yICJubyIpLiBJZiBzZXQgdG8gInllcyIsIGFuIGFkZGl0aW9uYWwgc2VjdXJpdHkgY2hlY2sgaXMKKyAgICAgIGFjdGl2YXRlZDogaW5jb21pbmcgSVAgcGFja2V0cyB3aWxsIGJlIGlnbm9yZWQgdW5sZXNzIHRoZSBJUAorICAgICAgVFRMIGlzIDI1NS4gRWFybGllciBtRE5TIHNwZWNpZmljYXRpb25zIHJlcXVpcmVkIHRoaXMKKyAgICAgIGNoZWNrLiBTaW5jZSB0aGlzIGZlYXR1cmUgbWF5IGJlIGluY29tcGF0aWJsZSB3aXRoIG5ld2VyCisgICAgICBpbXBsZW1lbnRhdGlvbnMgb2YgbUROUyBpdCBkZWZhdWx0cyB0byAibm8iLiBPbiB0aGUgb3RoZXIgaGFuZAorICAgICAgaXQgcHJvdmlkZXMgZXh0cmEgc2VjdXJpdHkuPC9wPgorICAgIDwvb3B0aW9uPgorCisgICAgPG9wdGlvbj4KKyAgICAgIDxwPjxvcHQ+dXNlLWlmZi1ydW5uaW5nPTwvb3B0PiBUYWtlcyBhIGJvb2xlYW4gdmFsdWUgKCJ5ZXMiIG9yCisgICAgICAibm8iKS4gSWYgc2V0IHRvICJ5ZXMiIGF2YWhpLWRhZW1vbiBtb25pdG9ycyB0aGUgSUZGX1JVTk5JTkcKKyAgICAgIGZsYWcgYml0IHdoaWNoIGlzIHVzZWQgYnkgc29tZSAobW9kZXJuKSBuZXR3b3JrIGRyaXZlcnMgdG8KKyAgICAgIHRlbGwgdXNlciBzcGFjZSBpZiBhIG5ldHdvcmsgY2FibGUgaXMgcGx1Z2dlZCBpbiAoaW4gY2FzZSBvZgorICAgICAgY29wcGVyIGV0aGVybmV0KSwgb3IgdGhlIG5ldHdvcmsgY2FyZCBpcyBhc3NvY2lhdGVkIHdpdGggc29tZQorICAgICAga2luZCBvZiBuZXR3b3JrIChpbiBjYXNlIG9mIFdMQU4pLiBJZiBJRkZfUlVOTklORyBpcyBzZXQKKyAgICAgIGF2YWhpLWRhZW1vbiB3aWxsIGF1dG9tYXRpY2FsbHkgYW5ub3VuY2UgaXRzIHNlcnZpY2VzIG9uIHRoYXQKKyAgICAgIG5ldHdvcmsuIFVuZm9ydHVuYXRlbHkgZmFyIHRvbyBtYW55IG5ldHdvcmsgZHJpdmVycyBkbyBub3QKKyAgICAgIHN1cHBvcnQgdGhpcyBmbGFnIG9yIHN1cHBvcnQgaXQgaW4gYSBicm9rZW4gd2F5LiBUaGVyZWZvcmUKKyAgICAgIHRoaXMgb3B0aW9uIGRlZmF1bHRzIHRvICJubyIuPC9wPgorICAgIDwvb3B0aW9uPgorCisgICAgPG9wdGlvbj4KKyAgICAgIDxwPjxvcHQ+ZW5hYmxlLWRidXM9PC9vcHQ+IFRha2VzIGVpdGhlciAieWVzIiwgIm5vIiBvcgorICAgICAgIndhcm4iLiBJZiBzZXQgdG8gInllcyIgYXZhaGktZGFlbW9uIGNvbm5lY3RzIHRvIEQtQnVzLAorICAgICAgb2ZmZXJpbmcgYW4gb2JqZWN0IG9yaWVudGVkIGNsaWVudCBBUEkuIEl0IGlzIG9ubHkgYXZhaWxhYmxlCisgICAgICBpZiBBdmFoaSBoYXMgYmVlbiBjb21waWxlZCB3aXRoIDxvcHQ+LS1lbmFibGUtZGJ1czwvb3B0PiBpbgorICAgICAgd2hpY2ggY2FzZSBpdCBkZWZhdWx0cyB0byAieWVzIi4gIndhcm4iIGJlaGF2ZXMgbGlrZSAieWVzIiwKKyAgICAgIGJ1dCB0aGUgZGFlbW9uIHN0YXJ0cyB1cCBldmVuIHdoZW4gaXQgZmFpbHMgdG8gY29ubmVjdCB0byBhCisgICAgICBELUJ1cyBkYWVtb24uIEluIGFkZGl0aW9uLCBpZiB0aGUgY29ubmVjdGlvbiB0byB0aGUgRC1CdXMKKyAgICAgIGRhZW1vbiBpcyB0ZXJtaW5hdGVkIHdlIHRyeSB0byByZWNvbm5lY3QuIChVbmxlc3Mgd2UgYXJlIGluIGEKKyAgICAgIGNocm9vdCgpIGVudmlyb25tZW50IHdoZXJlIHRoaXMgZGVmaW5pdGVseSB3aWxsIGZhaWwuKSA8L3A+CisgICAgPC9vcHRpb24+CisKKyAgICA8b3B0aW9uPgorICAgICAgPHA+PG9wdD5kaXNhbGxvdy1vdGhlci1zdGFja3M9PC9vcHQ+IFRha2VzIGEgYm9vbGVhbiB2YWx1ZQorICAgICAgKCJ5ZXMiIG9yICJubyIpLiBJZiBzZXQgdG8gInllcyIgbm8gb3RoZXIgcHJvY2VzcyBpcyBhbGxvd2VkCisgICAgICB0byBiaW5kIHRvIFVEUCBwb3J0IDUzNTMuIFRoaXMgZWZmZWN0aXZlbHkgaW1wZWRlcyBvdGhlciBtRE5TCisgICAgICBzdGFja3MgZnJvbSBydW5uaW5nIG9uIHRoZSBob3N0LiBVc2UgdGhpcyBhcyBhIHNlY3VyaXR5CisgICAgICBtZWFzdXJlIHRvIG1ha2Ugc3VyZSB0aGF0IG9ubHkgQXZhaGkgaXMgcmVzcG9uc2libGUgZm9yIG1ETlMKKyAgICAgIHRyYWZmaWMuIFBsZWFzZSBub3RlIHRoYXQgd2UgZG8gbm90IHJlY29tbWVuZCBydW5uaW5nIG11bHRpcGxlCisgICAgICBtRE5TIHN0YWNrcyBvbiB0aGUgc2FtZSBob3N0IHNpbXVsdGFuZW91c2x5LiBUaGlzIGhhbXBlcnMKKyAgICAgIHJlbGlhYmlsaXR5IGFuZCBpcyBhIHdhc3RlIG9mIHJlc291cmNlcy4gSG93ZXZlciwgdG8gbm90IGFubm95CisgICAgICBwZW9wbGUgdGhpcyBvcHRpb24gZGVmYXVsdHMgdG8gIm5vIi48L3A+CisgICAgPC9vcHRpb24+CisKKyAgICA8b3B0aW9uPgorICAgICAgPHA+PG9wdD5hbGxvdy1wb2ludC10by1wb2ludD08L29wdD4gVGFrZXMgYSBib29sZWFuIHZhbHVlCisgICAgICAoInllcyIgb3IgIm5vIikuIElmIHNldCB0byAieWVzIiBhdmFoaS1kYWVtb24gd2lsbCBtYWtlIHVzZSBvZgorICAgICAgaW50ZXJmYWNlcyB3aXRoIHRoZSBQT0lOVE9QT0lOVCBmbGFnIHNldC4gVGhpcyBvcHRpb24gZGVmYXVsdHMKKyAgICAgIHRvICJubyIgYXMgaXQgbWlnaHQgbWFrZSBtRE5TIHVucmVsaWFibGUgZHVlIHRvIHVzdWFsbHkgbGFyZ2UKKyAgICAgIGxhdGVuY2llcyB3aXRoIHN1Y2ggbGlua3MgYW5kIG9wZW5zIGEgcG90ZW50aWFsIHNlY3VyaXR5IGhvbGUKKyAgICAgIGJ5IGFsbG93aW5nIG1ETlMgYWNjZXNzIGZyb20gSW50ZXJuZXQgY29ubmVjdGlvbnMuIFVzZSB3aXRoCisgICAgICBjYXJlIGFuZCBZTU1WITwvcD4KKyAgICA8L29wdGlvbj4KKworICAgIDxvcHRpb24+CisgICAgICA8cD48b3B0PmNhY2hlLWVudHJpZXMtbWF4PTwvb3B0PiBUYWtlcyBhbiB1bnNpZ25lZCBpbnRlZ2VyCisgICAgICBzcGVjaWZ5aW5nIGhvdyBtYW55IHJlc291cmNlIHJlY29yZHMgYXJlIGNhY2hlZCBwZXIKKyAgICAgIGludGVyZmFjZS4gQmlnZ2VyIHZhbHVlcyBhbGxvdyBtRE5TIHdvcmsgY29ycmVjdGx5IGluIGxhcmdlIExBTnMKKyAgICAgIGJ1dCBhbHNvIGluY3JlYXNlIG1lbW9yeSBjb25zdW1wdGlvbi48L3A+CisgICAgPC9vcHRpb24+CisKKyAgICA8b3B0aW9uPgorICAgICAgPHA+PG9wdD5jbGllbnRzLW1heD08L29wdD4gVGFrZXMgYW4gdW5zaWduZWQgaW50ZWdlci4gVGhlCisgICAgICBtYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IEQtQnVzIGNsaWVudHMgYWxsb3dlZC4gSWYgdGhlCisgICAgICBtYXhpbXVtIG51bWJlciBpcyByZWFjaGVkIGZ1cnRoZXIgY2xpZW50cyB3aWxsIGJlIHJlZnVzZWQgdW50aWwKKyAgICAgIGF0IGxlYXN0IG9uZSBleGlzdGluZyBjbGllbnQgZGlzY29ubmVjdHMuPC9wPgorICAgIDwvb3B0aW9uPgorCisgICAgPG9wdGlvbj4KKyAgICAgIDxwPjxvcHQ+b2JqZWN0cy1wZXItY2xpZW50LW1heD08L29wdD4gVGFrZXMgYW4gdW5zaWduZWQKKyAgICAgIGludGVnZXIuIFRoZSBtYXhpbXVtIG51bWJlciBvZiBvYmplY3RzIChlbnRyeSBncm91cHMsIGJyb3dzZXJzLAorICAgICAgcmVzb2x2ZXJzKSB0aGF0IG1heSBiZSByZWdpc3RlcmVkIHBlciBELUJ1cyBjbGllbnQgYXQgYSB0aW1lLiBJZiB0aGUKKyAgICAgIG1heGltdW0gbnVtYmVyIGlzIHJlYWNoZWQgZnVydGhlciBvYmplY3QgY3JlYXRpb24gd2lsbCBiZQorICAgICAgcmVmdXNlZCB1bnRpbCBhdCBsZWFzdCBvbmUgb2JqZWN0IGlzIGZyZWVkLjwvcD4KKyAgICA8L29wdGlvbj4KKworICAgIDxvcHRpb24+CisgICAgICA8cD48b3B0PmVudHJpZXMtcGVyLWVudHJ5LWdyb3VwLW1heD08L29wdD4gVGFrZXMgYW4gdW5zaWduZWQKKyAgICAgIGludGVnZXIuIFRoZSBtYXhpbXVtIG51bWJlciBvZiBlbnRyaWVzIChyZXNvdXJjZSByZWNvcmRzKSBwZXIKKyAgICAgIGVudHJ5IGdyb3VwIHJlZ2lzdGVyZWQgYnkgYSBELUJ1cyBjbGllbnQgYXQgYSB0aW1lLiBJZiB0aGUKKyAgICAgIG1heGltdW0gbnVtYmVyIGlzIHJlYWNoZWQgZnVydGhlciByZXNvdXJjZSByZWNvcmRzIG1heSBub3QgYmUKKyAgICAgIGFkZGVkIHRvIGFuIGVudHJ5IGdyb3VwLjwvcD4KKyAgICA8L29wdGlvbj4KKworICAgIDxvcHRpb24+CisgICAgICA8cD48b3B0PnJhdGVsaW1pdC1pbnRlcnZhbC11c2VjPTwvb3B0PiBUYWtlcyBhbiB1bnNpZ25lZAorICAgICAgaW50ZWdlci4gU2V0cyB0aGUgcGVyLWludGVyZmFjZSBwYWNrZXQgcmF0ZS1saW1pdGluZyBpbnRlcnZhbAorICAgICAgcGFyYW1ldGVyLiBUb2dldGhlciB3aXRoIDxvcHQ+cmF0ZWxpbWl0LWJ1cnN0PTwvb3B0PiB0aGlzIG1heSBiZQorICAgICAgdXNlZCB0byBjb250cm9sIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwYWNrZXRzIEF2YWhpIHdpbGwKKyAgICAgIGdlbmVyYXRlZCBpbiBhIHNwZWNpZmljIHBlcmlvZCBvZiB0aW1lIG9uIGFuIGludGVyZmFjZS48L3A+CisgICAgPC9vcHRpb24+CisKKyAgICA8b3B0aW9uPgorICAgICAgPHA+PG9wdD5yYXRlbGltaXQtYnVyc3Q9PC9vcHQ+IFRha2VzIGFuIHVuc2lnbmVkCisgICAgICBpbnRlZ2VyLiBTZXRzIHRoZSBwZXItaW50ZXJmYWNlIHBhY2tldCByYXRlLWxpbWl0aW5nIGJ1cnN0CisgICAgICBwYXJhbWV0ZXIuIFRvZ2V0aGVyIHdpdGggPG9wdD5yYXRlbGltaXQtaW50ZXJ2YWwtdXNlYz08L29wdD4gdGhpcyBtYXkgYmUKKyAgICAgIHVzZWQgdG8gY29udHJvbCB0aGUgbWF4aW11bSBudW1iZXIgb2YgcGFja2V0cyBBdmFoaSB3aWxsCisgICAgICBnZW5lcmF0ZWQgaW4gYSBzcGVjaWZpYyBwZXJpb2Qgb2YgdGltZSBvbiBhbiBpbnRlcmZhY2UuPC9wPgorICAgIDwvb3B0aW9uPgorICA8L3NlY3Rpb24+CisKKyAgPHNlY3Rpb24gbmFtZT0iU2VjdGlvbiBbd2lkZS1hcmVhXSI+CisgICAgPG9wdGlvbj4KKyAgICAgIDxwPjxvcHQ+ZW5hYmxlLXdpZGUtYXJlYT08L29wdD4gVGFrZXMgYSBib29sZWFuIHZhbHVlCisgICAgICAoInllcyIgb3IgIm5vIikuIEVuYWJsZSB3aWRlLWFyZWEgRE5TLVNELCBha2EKKyAgICAgIEROUy1TRCBvdmVyIHVuaWNhc3QgRE5TLiBJZiB0aGlzIGlzIGVuYWJsZWQgb25seSBkb21haW5zCisgICAgICBlbmRpbmcgaW4gLmxvY2FsIHdpbGwgYmUgcmVzb2x2ZWQgb24gbUROUywgYWxsIG90aGVyIGRvbWFpbnMKKyAgICAgIGFyZSByZXNvbHZlZCB2aWEgdW5pY2FzdCBETlMuIElmIHlvdSB3YW50IHRvIG1haW50YWluIG11bHRpcGxlCisgICAgICBkaWZmZXJlbnQgbXVsdGljYXN0IEROUyBkb21haW5zIGV2ZW4gd2l0aCB0aGlzIG9wdGlvbiBlbmFibGVkCisgICAgICB3ZSBlbmNvdXJhZ2UgeW91IHRvIHVzZSBzdWJkb21haW5zIG9mIC5sb2NhbCwgc3VjaCBhcworICAgICAgImtpdGNoZW4ubG9jYWwiLiBUaGlzIG9wdGlvbiBkZWZhdWx0cyB0byAieWVzIi48L3A+CisgICAgPC9vcHRpb24+CisKKyAgPC9zZWN0aW9uPgorCisgIDxzZWN0aW9uIG5hbWU9IlNlY3Rpb24gW3B1Ymxpc2hdIj4KKworICAgIDxvcHRpb24+PHA+PG9wdD5kaXNhYmxlLXB1Ymxpc2hpbmc9PC9vcHQ+IFRha2VzIGEgYm9vbGVhbiB2YWx1ZQorICAgICgieWVzIiBvciAibm8iKS4gSWYgc2V0IHRvICJ5ZXMiLCBubyByZWNvcmQgd2lsbCBiZSBwdWJsaXNoZWQgYnkKKyAgICBBdmFoaSwgbm90IGV2ZW4gYWRkcmVzcyByZWNvcmRzIGZvciB0aGUgbG9jYWwgaG9zdC4gQXZhaGkgd2lsbAorICAgIGJlIHN0YXJ0ZWQgaW4gYSBxdWVyeWluZy1vbmx5IG1vZGUuIFVzZSB0aGlzIGlzIGEgc2VjdXJpdHkKKyAgICBtZWFzdXJlLiBUaGlzIG9wdGlvbiBkZWZhdWx0cyB0byAibm8iPC9wPjwvb3B0aW9uPgorCisgICAgPG9wdGlvbj48cD48b3B0PmRpc2FibGUtdXNlci1zZXJ2aWNlLXB1Ymxpc2hpbmc9PC9vcHQ+IFRha2VzIGEgYm9vbGVhbiB2YWx1ZQorICAgICgieWVzIiBvciAibm8iKS4gSWYgc2V0IHRvICJ5ZXMiLCBBdmFoaSB3aWxsIHN0aWxsIHB1Ymxpc2gKKyAgICBhZGRyZXNzIHJlY29yZHMgYW5kIHN1Y2hsaWtlIGJ1dCB3aWxsIG5vdCBhbGxvdyB1c2VyCisgICAgYXBwbGljYXRpb25zIHRvIHB1Ymxpc2ggc2VydmljZXMuIFVzZSB0aGlzIGlzIGEgc2VjdXJpdHkKKyAgICBtZWFzdXJlLiBUaGlzIG9wdGlvbiBkZWZhdWx0cyB0byAibm8iPC9wPjwvb3B0aW9uPgorCisgICAgPG9wdGlvbj4KKyAgICAgIDxwPjxvcHQ+YWRkLXNlcnZpY2UtY29va2llPTwvb3B0PiBUYWtlcyBhIGJvb2xlYW4gdmFsdWUgKCJ5ZXMiCisgICAgICBvciAibm8iKS4gSWYgc2V0IHRvICJ5ZXMiIGFuIGltcGxpY2l0IFRYVCBlbnRyeSB3aWxsIGJlIGFkZGVkCisgICAgICB0byBhbGwgbG9jYWxseSByZWdpc3RlcmVkIHNlcnZpY2VzLCBjb250YWluaW5nIGEgY29va2llIHZhbHVlCisgICAgICB3aGljaCBpcyBjaG9zZW4gcmFuZG9tbHkgb24gZGFlbW9uIHN0YXJ0dXAuIFRoaXMgY2FuIGJlIHVzZWQKKyAgICAgIHRvIGRldGVjdCBpZiB0d28gc2VydmljZXMgb24gdHdvIGRpZmZlcmVudAorICAgICAgaW50ZXJmYWNlcy9wcm90b2NvbHMgYXJlIGFjdHVhbGx5IGlkZW50aWNhbC4gRGVmYXVsdHMgdG8KKyAgICAgICJubyIuPC9wPgorICAgIDwvb3B0aW9uPgorCisgICAgPG9wdGlvbj4KKyAgICAgIDxwPjxvcHQ+cHVibGlzaC1hZGRyZXNzZXM9PC9vcHQ+IFRha2VzIGEgYm9vbGVhbiB2YWx1ZSAoInllcyIKKyAgICAgIG9yICJubyIpLiBJZiBzZXQgdG8gInllcyIgYXZhaGktZGFlbW9uIHdpbGwgcmVnaXN0ZXIgbUROUworICAgICAgYWRkcmVzcyByZWNvcmRzIGZvciBhbGwgbG9jYWwgSVAgYWRkcmVzc2VzLiBVbmxlc3MgeW91IHdhbnQgdG8KKyAgICAgIHVzZSBhdmFoaS1kYWVtb24gZXhjbHVzaXZlbHkgZm9yIGJyb3dzaW5nIGl0J3MgcmVjb21tZW5kZWQgdG8KKyAgICAgIGVuYWJsZSB0aGlzLiBJZiB5b3UgcGxhbiB0byByZWdpc3RlciBsb2NhbCBzZXJ2aWNlcyB5b3UgbmVlZAorICAgICAgdG8gZW5hYmxlIHRoaXMgb3B0aW9uLiBEZWZhdWx0cyB0byAieWVzIi48L3A+CisgICAgPC9vcHRpb24+CisKKyAgICA8b3B0aW9uPgorICAgICAgPHA+PG9wdD5wdWJsaXNoLWhpbmZvPTwvb3B0PiBUYWtlcyBhIGJvb2xlYW4gdmFsdWUgKCJ5ZXMiIG9yCisgICAgICAibm8iKS4gSWYgc2V0IHRvICJ5ZXMiIGF2YWhpLWRhZW1vbiB3aWxsIHJlZ2lzdGVyIGFuIG1ETlMKKyAgICAgIEhJTkZPIHJlY29yZCBvbiBhbGwgaW50ZXJmYWNlcyB3aGljaCBjb250YWlucyBpbmZvcm1hdGlvbgorICAgICAgYWJvdXQgdGhlIGxvY2FsIG9wZXJhdGluZyBzeXN0ZW0gYW5kIENQVSwgd2hpY2ggbWlnaHQgYmUKKyAgICAgIHVzZWZ1bCBmb3IgYWRtaW5pc3RyYXRpdmUgcHVycG9zZXMuIFRoaXMgaXMgcmVjb21tZW5kZWQgYnkgdGhlCisgICAgICBtRE5TIHNwZWNpZmljYXRpb24gYnV0IG5vdCByZXF1aXJlZC4gRm9yIHRoZSBzYWtlIG9mIHByaXZhY3kKKyAgICAgIHlvdSBtaWdodCBjaG9vc2UgdG8gZGlzYWJsZSB0aGlzIGZlYXR1cmUuIERlZmF1bHRzIHRvCisgICAgICAieWVzLiI8L3A+CisgICAgPC9vcHRpb24+CisKKyAgICA8b3B0aW9uPgorICAgICAgPHA+PG9wdD5wdWJsaXNoLXdvcmtzdGF0aW9uPTwvb3B0PiBUYWtlcyBhIGJvb2xlYW4gdmFsdWUKKyAgICAgICgieWVzIiBvciAibm8iKS4gSWYgc2V0IHRvICJ5ZXMiIGF2YWhpLWRhZW1vbiB3aWxsIHJlZ2lzdGVyIGEKKyAgICAgIHNlcnZpY2Ugb2YgdHlwZSAiX3dvcmtzdGF0aW9uLl90Y3AiIG9uIHRoZSBsb2NhbCBMQU4uIFRoaXMKKyAgICAgIG1pZ2h0IGJlIHVzZWZ1bCBmb3IgYWRtaW5pc3RyYXRpdmUgcHVycG9zZXMgKGkuZS4gYnJvd3NlIGZvcgorICAgICAgYWxsIFBDcyBvbiB0aGUgTEFOKSwgYnV0IGlzIG5vdCByZXF1aXJlZCBvciByZWNvbW1lbmRlZCBieSBhbnkKKyAgICAgIHNwZWNpZmljYXRpb24uIE5ld2VyIE1hY09TIFggcmVsZWFzZXMgcmVnaXN0ZXIgYSBzZXJ2aWNlIG9mCisgICAgICB0aGlzIHR5cGUuIERlZmF1bHRzIHRvICJ5ZXMiLjwvcD4KKyAgICA8L29wdGlvbj4KKworICAgIDxvcHRpb24+CisgICAgICA8cD48b3B0PnB1Ymxpc2gtZG9tYWluPTwvb3B0PiBUYWtlcyBhIGJvb2xlYW4gdmFsdWUgKCJ5ZXMiIG9yCisgICAgICAibm8iKS4gSWYgc2V0IHRvICJ5ZXMiIGF2YWhpLWRhZW1vbiB3aWxsIGFubm91bmNlIHRoZSBsb2NhbGx5CisgICAgICB1c2VkIGRvbWFpbiBuYW1lIChzZWUgYWJvdmUpIGZvciBicm93c2luZyBieSBvdGhlcgorICAgICAgaG9zdHMuIERlZmF1bHRzIHRvICJ5ZXMiLjwvcD4KKyAgICA8L29wdGlvbj4KKworICAgIDxvcHRpb24+CisgICAgICA8cD48b3B0PnB1Ymxpc2gtZG5zLXNlcnZlcnM9PC9vcHQ+IFRha2VzIGEgY29tbWEgc2VwYXJhdGVkCisgICAgICBsaXN0IG9mIElQIGFkZHJlc3NlcyBmb3IgdW5pY2FzdCBETlMgc2VydmVycy4gWW91IGNhbiB1c2UgdGhpcworICAgICAgdG8gYW5ub3VuY2UgdW5pY2FzdCBETlMgc2VydmVycyB2aWEgbUROUy4gV2hlbiB1c2VkIGluCisgICAgICBjb25qdW5jdGlvbiB3aXRoIGF2YWhpLWRuc2NvbmZkIG9uIHRoZSBjbGllbnQKKyAgICAgIHNpZGUgdGhpcyBhbGxvd3MgREhDUC1saWtlIGNvbmZpZ3VyYXRpb24gb2YgdW5pY2FzdCBETlMKKyAgICAgIHNlcnZlcnMuPC9wPgorICAgIDwvb3B0aW9uPgorCisgICAgPG9wdGlvbj4KKyAgICAgIDxwPjxvcHQ+cHVibGlzaC1yZXNvbHYtY29uZi1kbnMtc2VydmVycz08L29wdD4gVGFrZXMgYSBib29sZWFuCisgICAgICB2YWx1ZSAoInllcyIgb3IgIm5vIikuIElmIHNldCB0byAieWVzIiBhdmFoaS1kYWVtb24gd2lsbAorICAgICAgcHVibGlzaCB0aGUgdW5pY2FzdCBETlMgc2VydmVycyBzcGVjaWZpZWQgaW4KKyAgICAgIDxmaWxlPi9ldGMvcmVzb2x2LmNvbmY8L2ZpbGU+IGluIGFkZGl0aW9uIHRvIHRob3NlIHNwZWNpZmllZAorICAgICAgd2l0aCA8b3B0PnB1Ymxpc2gtZG5zLXNlcnZlcnM8L29wdD4uIFNlbmQgYXZhaGktZGFlbW9uIGEKKyAgICAgIFNJR0hVUCB0byBoYXZlIGl0IHJlbG9hZCB0aGlzIGZpbGUuIERlZmF1bHRzIHRvICJubyIuPC9wPgorICAgIDwvb3B0aW9uPgorCisgICAgPG9wdGlvbj4KKyAgICAgIDxwPjxvcHQ+cHVibGlzaC1hYWFhLW9uLWlwdjQ9PC9vcHQ+IFRha2VzIGEgYm9vbGVhbiB2YWx1ZQorICAgICAgKCJ5ZXMiIG9yICJubyIpLiBJZiBzZXQgdG8gInllcyIgYXZhaGktZGFlbW9uIHdpbGwgcHVibGlzaCBhbgorICAgICAgSVB2NiBBQUFBIHJlY29yZCB2aWEgSVB2NCwgaS5lLiB0aGUgbG9jYWwgSVB2NiBhZGRyZXNzZXMgY2FuIGJlCisgICAgICByZXNvbHZlZCB1c2luZyBhbiBJUHY0IHRyYW5zcG9ydC4gT25seSB1c2VmdWwgd2hlbiBJUHY0IGlzCisgICAgICBlbmFibGVkIHdpdGggPG9wdD51c2UtaXB2ND10cnVlPC9vcHQ+LiBEZWZhdWx0cyB0byAieWVzIi48L3A+CisgICAgPC9vcHRpb24+CisKKyAgICA8b3B0aW9uPgorICAgICAgPHA+PG9wdD5wdWJsaXNoLWEtb24taXB2Nj08L29wdD4gVGFrZXMgYSBib29sZWFuIHZhbHVlCisgICAgICAoInllcyIgb3IgIm5vIikuIElmIHNldCB0byAieWVzIiBhdmFoaS1kYWVtb24gd2lsbCBwdWJsaXNoIGFuCisgICAgICBJUHY0IEEgcmVjb3JkIHZpYSBJUHY2LCBpLmUuIHRoZSBsb2NhbCBJUHY0IGFkZHJlc3NlcyBjYW4gYmUKKyAgICAgIHJlc29sdmVkIHVzaW5nIGFuIElQdjYgdHJhbnNwb3J0LiBPbmx5IHVzZWZ1bCB3aGVuIElQdjYgaXMKKyAgICAgIGVuYWJsZWQgd2l0aCA8b3B0PnVzZS1pcHY2PXRydWU8L29wdD4uIERlZmF1bHRzIHRvICJubyIuPC9wPgorICAgIDwvb3B0aW9uPgorCisgIDwvc2VjdGlvbj4KKworICA8c2VjdGlvbiBuYW1lPSJTZWN0aW9uIFtyZWZsZWN0b3JdIj4KKyAgICA8b3B0aW9uPgorICAgICAgPHA+PG9wdD5lbmFibGUtcmVmbGVjdG9yPTwvb3B0PiBUYWtlcyBhIGJvb2xlYW4gdmFsdWUgKCJ5ZXMiCisgICAgICBvciAibm8iKS4gSWYgc2V0IHRvICJ5ZXMiIGF2YWhpLWRhZW1vbiB3aWxsIHJlZmxlY3QgaW5jb21pbmcKKyAgICAgIG1ETlMgcmVxdWVzdHMgdG8gYWxsIGxvY2FsIG5ldHdvcmsgaW50ZXJmYWNlcywgZWZmZWN0aXZlbHkKKyAgICAgIGFsbG93aW5nIGNsaWVudHMgdG8gYnJvd3NlIG1ETlMvRE5TLVNEIHNlcnZpY2VzIG9uIGFsbAorICAgICAgbmV0d29ya3MgY29ubmVjdGVkIHRvIHRoZSBnYXRld2F5LiBUaGUgZ2F0ZXdheSBpcyBzb21ld2hhdAorICAgICAgaW50ZWxsaWdlbnQgYW5kIHNob3VsZCB3b3JrIHdpdGggYWxsIGtpbmRzIG9mIG1ETlMgdHJhZmZpYywKKyAgICAgIHRob3VnaCBzb21lIGZ1bmN0aW9uYWxpdHkgaXMgbG9zdCAoc3BlY2lmaWNhbGx5IHRoZSB1bmljYXN0CisgICAgICByZXBseSBiaXQsIHdoaWNoIGlzIHVzZWQgcmFyZWx5IGFueXdheSkuIE1ha2Ugc3VyZSB0byBub3QgcnVuCisgICAgICBtdWx0aXBsZSByZWZsZWN0b3JzIGJldHdlZW4gdGhlIHNhbWUgbmV0d29ya3MsIHRoaXMgbWlnaHQKKyAgICAgIGNhdXNlIHRoZW0gdG8gcGxheSBQaW5nIFBvbmcgd2l0aCBtRE5TIHBhY2tldHMuIERlZmF1bHRzIHRvCisgICAgICAibm8iLjwvcD4KKyAgICA8L29wdGlvbj4KKworICAgIDxvcHRpb24+CisgICAgICA8cD48b3B0PnJlZmxlY3QtaXB2PTwvb3B0PiBUYWtlcyBhIGJvb2xlYW4gdmFsdWUgKCJ5ZXMiIG9yCisgICAgICAibm8iKS4gSWYgc2V0IHRvICJ5ZXMiIGFuZCA8b3B0PmVuYWJsZS1yZWZsZWN0b3I8L29wdD4gaXMKKyAgICAgIGVuYWJsZWQsIGF2YWhpLWRhZW1vbiB3aWxsIGZvcndhcmQgbUROUyB0cmFmZmljIGJldHdlZW4gSVB2NAorICAgICAgYW5kIElQdjYsIHdoaWNoIGlzIHVzdWFsbHkgbm90IHJlY29tbWVuZGVkLiBEZWZhdWx0cyB0byAibm8iLjwvcD4KKyAgICA8L29wdGlvbj4KKyAgPC9zZWN0aW9uPgorCisgIDxzZWN0aW9uIG5hbWU9IlNlY3Rpb24gW3JsaW1pdHNdIj4KKyAgICA8cD5UaGlzIHNlY3Rpb24gaXMgdXNlZCB0byBkZWZpbmUgc3lzdGVtIHJlc291cmNlIGxpbWl0cyBmb3IgdGhlCisgICAgZGFlbW9uLiBTZWUgPG1hbnJlZiBzZWN0aW9uPSIyIiBuYW1lPSJzZXRybGltaXQiLz4gZm9yIG1vcmUKKyAgICBpbmZvcm1hdGlvbi4gSWYgYW55IG9mIHRoZSBvcHRpb25zIGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24KKyAgICBmaWxlLCBhdmFoaS1kYWVtb24gZG9lcyBub3QgY2hhbmdlIGl0IGZyb20gdGhlIHN5c3RlbQorICAgIGRlZmF1bHRzLjwvcD4KKworICAgIDxvcHRpb24+CisgICAgICA8cD48b3B0PnJsaW1pdC1hcz08L29wdD4gVmFsdWUgaW4gYnl0ZXMgZm9yIFJMSU1JVF9BUyAobWF4aW11bSBzaXplIG9mIHRoZSBwcm9jZXNzJ3MgdmlydHVhbCBtZW1vcnkpLiBTZW5zaWJsZSB2YWx1ZXMgYXJlIGhlYXZpbHkgc3lzdGVtIGRlcGVuZGVudC48L3A+CisgICAgPC9vcHRpb24+CisKKyAgICA8b3B0aW9uPgorICAgICAgPHA+PG9wdD5ybGltaXQtY29yZT08L29wdD4gVmFsdWUgaW4gYnl0ZXMgZm9yIFJMSU1JVF9DT1JFIChtYXhpbXVtIGNvcmUgZmlsZSBzaXplKS4gVW5sZXNzIHlvdSB3YW50IHRvIGRlYnVnIGF2YWhpLWRhZW1vbiwgaXQgaXMgc2FmZSB0byBzZXQgdGhpcyB0byAwLjwvcD4KKyAgICA8L29wdGlvbj4KKworICAgIDxvcHRpb24+CisgICAgICA8cD48b3B0PnJsaW1pdC1kYXRhPTwvb3B0PiBWYWx1ZSBpbiBieXRlcyBmb3IgUkxJTUlUX0RBVEEgKG1heGltdW0gc2l6ZSBvZiB0aGUgcHJvY2VzcydzIGRhdGEgc2VnbWVudCkuIFNlbnNpYmxlIHZhbHVlcyBhcmUgaGVhdmlseSBzeXN0ZW0gZGVwZW5kZW50LjwvcD4KKyAgICA8L29wdGlvbj4KKworICAgIDxvcHRpb24+CisgICAgICA8cD48b3B0PnJsaW1pdC1mc2l6ZT08L29wdD4gVmFsdWUgZm9yIFJMSU1JVF9GU0laRSAobWF4aW11bSBzaXplIG9mIGZpbGVzIHRoZSBwcm9jZXNzIG1heSBjcmVhdGUpLiBTaW5jZSBhdmFoaS1kYWVtb24gc2hvdWxkbid0IHdyaXRlIGFueSBmaWxlcyB0byBkaXNrLCBpdCBpcyBzYWZlIHRvIHNldCB0aGlzIHRvIDAuPC9wPgorICAgIDwvb3B0aW9uPgorCisgICAgPG9wdGlvbj4KKyAgICAgIDxwPjxvcHQ+cmxpbWl0LW5vZmlsZT08L29wdD4gVmFsdWUgZm9yIFJMSU1JVF9OT0ZJTEUgKG9wZW4gZmlsZSBkZXNjcmlwdG9ycykuIGF2YWhpLWRhZW1vbiBzaG91bGRuJ3QgbmVlZCBtb3JlIHRoYW4gMTUgdG8gMjAgb3BlbiBmaWxlIGRlc2NyaXB0b3JzIGNvbmN1cnJlbnRseS48L3A+CisgICAgPC9vcHRpb24+CisKKyAgICA8b3B0aW9uPgorICAgICAgPHA+PG9wdD5ybGltaXQtc3RhY2s9PC9vcHQ+IFZhbHVlIGluIGJ5dGVzIGZvciBSTElNSVRfU1RBQ0sgKG1heGltdW0gc2l6ZSBvZiB0aGUgcHJvY2VzcyBzdGFjaykuIFNlbnNpYmxlIHZhbHVlcyBhcmUgaGVhdmlseSBzeXN0ZW0gZGVwZW5kZW50LjwvcD4KKyAgICA8L29wdGlvbj4KKworICAgIDxvcHRpb24+CisgICAgICA8cD48b3B0PnJsaW1pdC1ucHJvYz08L29wdD4gVmFsdWUgZm9yIFJMSU1JVF9OUFJPQyAobnVtYmVyIG9mIHByb2Nlc3Mgb2YgdXNlcikuIGF2YWhpLWRhZW1vbiBmb3JrcyBvZiBhIGhlbHBlciBwcm9jZXNzIG9uIHN5c3RlbXMgd2hlcmUgPG1hbnJlZiBuYW1lPSJjaHJvb3QiIHNlY3Rpb249IjIiLz4gaXMgYXZhaWxhYmxlLiBUaGVyZWZvcmUgdGhpcyB2YWx1ZSBzaG91bGQgbm90IGJlIHNldCBiZWxvdyAyLjwvcD4KKyAgICA8L29wdGlvbj4KKworICA8L3NlY3Rpb24+CisKKyAgPHNlY3Rpb24gbmFtZT0iQXV0aG9ycyI+CisgICAgPHA+VGhlIEF2YWhpIERldmVsb3BlcnMgJmx0O0BQQUNLQUdFX0JVR1JFUE9SVEAmZ3Q7OyBBdmFoaSBpcworICAgIGF2YWlsYWJsZSBmcm9tIDx1cmwgaHJlZj0iQFBBQ0tBR0VfVVJMQCIvPjwvcD4KKyAgPC9zZWN0aW9uPgorCisgIDxzZWN0aW9uIG5hbWU9IlNlZSBhbHNvIj4KKyAgICA8cD4KKyAgICAgIDxtYW5yZWYgbmFtZT0iYXZhaGktZGFlbW9uIiBzZWN0aW9uPSI4Ii8+LCA8bWFucmVmIG5hbWU9ImF2YWhpLWRuc2NvbmZkIiBzZWN0aW9uPSI4Ii8+CisgICAgPC9wPgorICA8L3NlY3Rpb24+CisKKyAgPHNlY3Rpb24gbmFtZT0iQ29tbWVudHMiPgorICAgIDxwPlRoaXMgbWFuIHBhZ2Ugd2FzIHdyaXR0ZW4gdXNpbmcgPG1hbnJlZiBuYW1lPSJ4bWwybWFuIiBzZWN0aW9uPSIxIgorICAgIGhyZWY9Imh0dHA6Ly9tYXNxbWFpbC5jeC94bWwybWFuLyIvPiBieSBPbGl2ZXIgS3VydGguPC9wPgorICA8L3NlY3Rpb24+CisKKzwvbWFucGFnZT4KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9tYW4vYXZhaGktZGlzY292ZXIuMSBiL2F2YWhpLTAuNi4zMS9tYW4vYXZhaGktZGlzY292ZXIuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODVmZjEzCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL21hbi9hdmFoaS1kaXNjb3Zlci4xCkBAIC0wLDAgKzEsMTYgQEAKKy5USCBhdmFoaS1kaXNjb3ZlciAxIFVzZXIgTWFudWFscworLlNIIE5BTUUKK2F2YWhpLWRpc2NvdmVyIFwtIEJyb3dzZSBmb3IgbUROUy9ETlMtU0Qgc2VydmljZXMgdXNpbmcgdGhlIEF2YWhpIGRhZW1vbgorLlNIIFNZTk9QU0lTCitcZkJhdmFoaS1kaXNjb3ZlcgorXGYxCisuU0ggREVTQ1JJUFRJT04KK1Nob3cgYSByZWFsLXRpbWUgZ3JhcGhpY2FsIGJyb3dzZSBsaXN0IGZvciBtRE5TL0ROUy1TRCBuZXR3b3JrIHNlcnZpY2VzIHJ1bm5pbmcgb24gdGhlIGxvY2FsIExBTiB1c2luZyB0aGUgQXZhaGkgZGFlbW9uLgorLlNIIE9QVElPTlMKK2F2YWhpLWRpc2NvdmVyIHRha2VzIG5vIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgYXQgdGhlIG1vbWVudC4KKy5TSCBBVVRIT1JTCitUaGUgQXZhaGkgRGV2ZWxvcGVycyA8YXZhaGkgKGF0KSBsaXN0cyAoZG90KSBmcmVlZGVza3RvcCAoZG90KSBvcmc+OyBBdmFoaSBpcyBhdmFpbGFibGUgZnJvbSBcZkJodHRwOi8vYXZhaGkub3JnL1xmMQorLlNIIFNFRSBBTFNPCitcZkJhdmFoaS1kYWVtb24oOClcZjEsIFxmQmF2YWhpLWJyb3dzZSgxKVxmMQorLlNIIENPTU1FTlRTCitUaGlzIG1hbiBwYWdlIHdhcyB3cml0dGVuIHVzaW5nIFxmQnhtbDJtYW4oMSlcZjEgYnkgT2xpdmVyIEt1cnRoLgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL21hbi9hdmFoaS1kaXNjb3Zlci4xLnhtbC5pbiBiL2F2YWhpLTAuNi4zMS9tYW4vYXZhaGktZGlzY292ZXIuMS54bWwuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTMxMWYxZgotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9tYW4vYXZhaGktZGlzY292ZXIuMS54bWwuaW4KQEAgLTAsMCArMSw1OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+PCEtLSotbnhtbC0qLS0+Cis8IURPQ1RZUEUgbWFucGFnZSBTWVNURU0gInhtbHRvbWFuLmR0ZCI+Cis8P3htbC1zdHlsZXNoZWV0IHR5cGU9InRleHQveHNsIiBocmVmPSJ4bWx0b21hbi54c2wiID8+CisKKzwhLS0KKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKy0tPgorCisgIDxtYW5wYWdlIG5hbWU9ImF2YWhpLWRpc2NvdmVyIiBzZWN0aW9uPSIxIiBkZXNjPSJCcm93c2UgZm9yIG1ETlMvRE5TLVNEIHNlcnZpY2VzIHVzaW5nIHRoZSBBdmFoaSBkYWVtb24iPgorCisJPHN5bm9wc2lzPgorICAgICAgPGNtZD5hdmFoaS1kaXNjb3ZlcjwvY21kPgorCTwvc3lub3BzaXM+CisKKyAgICA8ZGVzY3JpcHRpb24+CisgICAgICA8cD5TaG93IGEgcmVhbC10aW1lIGdyYXBoaWNhbCBicm93c2UgbGlzdCBmb3IgbUROUy9ETlMtU0QKKyAgICAgIG5ldHdvcmsgc2VydmljZXMgcnVubmluZyBvbiB0aGUgbG9jYWwgTEFOIHVzaW5nIHRoZSBBdmFoaQorICAgICAgZGFlbW9uLjwvcD4KKworCTwvZGVzY3JpcHRpb24+CisKKwk8b3B0aW9ucz4KKworICAgICAgPHA+YXZhaGktZGlzY292ZXIgdGFrZXMgbm8gY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBhdCB0aGUgbW9tZW50LjwvcD4KKworICAgIDwvb3B0aW9ucz4KKworCTxzZWN0aW9uIG5hbWU9IkF1dGhvcnMiPgorCSAgPHA+VGhlIEF2YWhpIERldmVsb3BlcnMgJmx0O0BQQUNLQUdFX0JVR1JFUE9SVEAmZ3Q7OyBBdmFoaSBpcworCSAgYXZhaWxhYmxlIGZyb20gPHVybCBocmVmPSJAUEFDS0FHRV9VUkxAIi8+PC9wPgorCTwvc2VjdGlvbj4KKworCTxzZWN0aW9uIG5hbWU9IlNlZSBhbHNvIj4KKwkgIDxwPgorICAgICAgICA8bWFucmVmIG5hbWU9ImF2YWhpLWRhZW1vbiIgc2VjdGlvbj0iOCIvPiwgPG1hbnJlZiBuYW1lPSJhdmFoaS1icm93c2UiIHNlY3Rpb249IjEiLz4KKwkgIDwvcD4KKwk8L3NlY3Rpb24+CisKKwk8c2VjdGlvbiBuYW1lPSJDb21tZW50cyI+CisJICA8cD5UaGlzIG1hbiBwYWdlIHdhcyB3cml0dGVuIHVzaW5nIDxtYW5yZWYgbmFtZT0ieG1sMm1hbiIgc2VjdGlvbj0iMSIKKwkJICBocmVmPSJodHRwOi8vbWFzcW1haWwuY3gveG1sMm1hbi8iLz4gYnkgT2xpdmVyIEt1cnRoLjwvcD4KKwk8L3NlY3Rpb24+CisKKyAgPC9tYW5wYWdlPgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL21hbi9hdmFoaS1kbnNjb25mZC44IGIvYXZhaGktMC42LjMxL21hbi9hdmFoaS1kbnNjb25mZC44Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZGVlNTgKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvbWFuL2F2YWhpLWRuc2NvbmZkLjgKQEAgLTAsMCArMSw0OCBAQAorLlRIIGF2YWhpLWRuc2NvbmZkIDggVXNlciBNYW51YWxzCisuU0ggTkFNRQorYXZhaGktZG5zY29uZmQgXC0gVW5pY2FzdCBETlMgc2VydmVyIGZyb20gbUROUy9ETlMtU0QgY29uZmlndXJhdGlvbiBkYWVtb24KKy5TSCBTWU5PUFNJUworXGZCYXZhaGktZG5zY29uZmQgW1xmSW9wdGlvbnNcZkJdCisKK2F2YWhpLWRuc2NvbmZkIC0ta2lsbFxmQgorCithdmFoaS1kbnNjb25mZCAtLXJlZnJlc2hcZkIKKworYXZhaGktZG5zY29uZmQgLS1jaGVja1xmQgorXGYxCisuU0ggREVTQ1JJUFRJT04KK2F2YWhpLWRuc2NvbmZkIGNvbm5lY3RzIHRvIGEgcnVubmluZyBhdmFoaS1kYWVtb24gYW5kIHJ1bnMgdGhlIHNjcmlwdCBcZkkvaG9tZS9sZW5uYXJ0L3RtcC9hdmFoaS9ldGMvYXZhaGkvZG5zY29uZmQuYWN0aW9uXGYxIGZvciBlYWNoIHVuaWNhc3QgRE5TIHNlcnZlciB0aGF0IGlzIGFubm91bmNlZCBvbiB0aGUgbG9jYWwgTEFOLiBUaGlzIGlzIHVzZWZ1bCBmb3IgY29uZmlndXJpbmcgdW5pY2FzdCBETlMgc2VydmVycyBpbiBhIERIQ1AtbGlrZSBmYXNoaW9uIHdpdGggbUROUy4KKy5TSCBPUFRJT05TCisuVFAKK1xmQi1EIHwgLS1kYWVtb25pemVcZjEKK0RhZW1vbml6ZSBhZnRlciBzdGFydHVwIGFuZCByZWRpcmVjdCBsb2cgbWVzc2FnZXMgdG8gc3lzbG9nLgorLlRQCitcZkItcyB8IC0tc3lzbG9nXGYxCitMb2cgdG8gc3lzbG9nIGluc3RlYWQgb2YgU1RERVJSLiBJbXBsaWVkIGJ5IFxmQi0tZGFlbW9uaXplXGYxLgorLlRQCitcZkItayB8IC0ta2lsbFxmMQorS2lsbCBhbiBhbHJlYWR5IHJ1bm5pbmcgYXZhaGktZG5zY29uZmQuIChlcXVpdmFsZW50IHRvIHNlbmRpbmcgYSBTSUdURVJNKQorLlRQCitcZkItciB8IC0tcmVmcmVzaFxmMQorVGVsbCBhbiBhbHJlYWR5IHJ1bm5pbmcgYXZhaGktZG5zY29uZmQgdG8gcmVmcmVzaCB0aGUgRE5TIHNlcnZlciBkYXRhLiAoZXF1aXZhbGVudCB0byBzZW5kaW5nIGEgU0lHSFVQKQorLlRQCitcZkItYyB8IC0tY2hlY2tcZjEKK1JldHVybiAwIGFzIHJldHVybiBjb2RlIHdoZW4gYXZhaGktZG5zY29uZmQgaXMgYWxyZWFkeSBydW5uaW5nLgorLlRQCitcZkItaCB8IC0taGVscFxmMQorU2hvdyBoZWxwCisuVFAKK1xmQi12IHwgLS12ZXJzaW9uXGYxCitTaG93IHZlcnNpb24gaW5mb3JtYXRpb24gCisuU0ggRklMRVMKK1xmSS9ob21lL2xlbm5hcnQvdG1wL2F2YWhpL2V0Yy9hdmFoaS9hdmFoaS1kbnNjb25mZC5hY3Rpb25cZjE6IHRoZSBzY3JpcHQgdG8gcnVuIHdoZW4gYSBETlMgc2VydmVyIGlzIGZvdW5kIG9yIHJlbW92ZWQuCisuU0ggU0lHTkFMUworXGZJU0lHSU5ULCBTSUdURVJNXGYxOiBhdmFoaS1kbnNjb25mZCB3aWxsIHNodXRkb3duLiBUaGlzIGlzIGlzc3VlZCBieSBwYXNzaW5nIC0ta2lsbCB0byBhdmFoaS1kYWVtb24uCisKK1xmSVNJR0hVUFxmMTogYXZhaGktZG5zY29uZmQgd2lsbCByZWZyZXNoIHRoZSBETlMgc2VydmVyIGRhdGEuCisuU0ggQVVUSE9SUworVGhlIEF2YWhpIERldmVsb3BlcnMgPGF2YWhpIChhdCkgbGlzdHMgKGRvdCkgZnJlZWRlc2t0b3AgKGRvdCkgb3JnPjsgQXZhaGkgaXMgYXZhaWxhYmxlIGZyb20gXGZCaHR0cDovL2F2YWhpLm9yZy9cZjEKKy5TSCBTRUUgQUxTTworXGZCYXZhaGktZGFlbW9uKDgpXGYxLCBcZkJhdmFoaS1kbnNjb25mZC5hY3Rpb24oOClcZjEKKy5TSCBDT01NRU5UUworVGhpcyBtYW4gcGFnZSB3YXMgd3JpdHRlbiB1c2luZyBcZkJ4bWwybWFuKDEpXGYxIGJ5IE9saXZlciBLdXJ0aC4KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9tYW4vYXZhaGktZG5zY29uZmQuOC54bWwuaW4gYi9hdmFoaS0wLjYuMzEvbWFuL2F2YWhpLWRuc2NvbmZkLjgueG1sLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiMDljZDQKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvbWFuL2F2YWhpLWRuc2NvbmZkLjgueG1sLmluCkBAIC0wLDAgKzEsMTA3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz48IS0tKi1ueG1sLSotLT4KKzwhRE9DVFlQRSBtYW5wYWdlIFNZU1RFTSAieG1sdG9tYW4uZHRkIj4KKzw/eG1sLXN0eWxlc2hlZXQgdHlwZT0idGV4dC94c2wiIGhyZWY9InhtbHRvbWFuLnhzbCIgPz4KKworPCEtLQorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorLS0+CisKKyAgPG1hbnBhZ2UgbmFtZT0iYXZhaGktZG5zY29uZmQiIHNlY3Rpb249IjgiIGRlc2M9IlVuaWNhc3QgRE5TIHNlcnZlciBmcm9tIG1ETlMvRE5TLVNEIGNvbmZpZ3VyYXRpb24gZGFlbW9uIj4KKworCTxzeW5vcHNpcz4KKyAgICAgIDxjbWQ+YXZhaGktZG5zY29uZmQgWzxhcmc+b3B0aW9uczwvYXJnPl08L2NtZD4KKyAgICAgIDxjbWQ+YXZhaGktZG5zY29uZmQgPG9wdD4tLWtpbGw8L29wdD48L2NtZD4KKyAgICAgIDxjbWQ+YXZhaGktZG5zY29uZmQgPG9wdD4tLXJlZnJlc2g8L29wdD48L2NtZD4KKyAgICAgIDxjbWQ+YXZhaGktZG5zY29uZmQgPG9wdD4tLWNoZWNrPC9vcHQ+PC9jbWQ+CisJPC9zeW5vcHNpcz4KKworICAgIDxkZXNjcmlwdGlvbj4KKyAgICAgIDxwPmF2YWhpLWRuc2NvbmZkIGNvbm5lY3RzIHRvIGEgcnVubmluZyBhdmFoaS1kYWVtb24gYW5kIHJ1bnMKKyAgICAgIHRoZSBzY3JpcHQgPGZpbGU+QHBrZ3N5c2NvbmZkaXJAL2Ruc2NvbmZkLmFjdGlvbjwvZmlsZT4gZm9yIGVhY2ggdW5pY2FzdCBETlMKKyAgICAgIHNlcnZlciB0aGF0IGlzIGFubm91bmNlZCBvbiB0aGUgbG9jYWwgTEFOLiBUaGlzIGlzIHVzZWZ1bCBmb3IKKyAgICAgIGNvbmZpZ3VyaW5nIHVuaWNhc3QgRE5TIHNlcnZlcnMgaW4gYSBESENQLWxpa2UgZmFzaGlvbiB3aXRoCisgICAgICBtRE5TLjwvcD4KKwk8L2Rlc2NyaXB0aW9uPgorCisJPG9wdGlvbnM+CisKKwkgIDxvcHRpb24+CisJCTxwPjxvcHQ+LUQgfCAtLWRhZW1vbml6ZTwvb3B0PjwvcD4KKwkJPG9wdGRlc2M+PHA+RGFlbW9uaXplIGFmdGVyIHN0YXJ0dXAgYW5kIHJlZGlyZWN0IGxvZyBtZXNzYWdlcyB0byBzeXNsb2cuPC9wPjwvb3B0ZGVzYz4KKwkgIDwvb3B0aW9uPgorCisgICAgICA8b3B0aW9uPgorICAgICAgICA8cD48b3B0Pi1zIHwgLS1zeXNsb2c8L29wdD48L3A+CisgICAgICAgIDxvcHRkZXNjPjxwPkxvZyB0byBzeXNsb2cgaW5zdGVhZCBvZiBTVERFUlIuIEltcGxpZWQgYnkgPG9wdD4tLWRhZW1vbml6ZTwvb3B0Pi48L3A+PC9vcHRkZXNjPgorICAgICAgPC9vcHRpb24+CisKKwkgIDxvcHRpb24+CisJCTxwPjxvcHQ+LWsgfCAtLWtpbGw8L29wdD48L3A+CisJCTxvcHRkZXNjPjxwPktpbGwgYW4gYWxyZWFkeSBydW5uaW5nIGF2YWhpLWRuc2NvbmZkLiAoZXF1aXZhbGVudCB0byBzZW5kaW5nIGEgU0lHVEVSTSk8L3A+PC9vcHRkZXNjPgorCSAgPC9vcHRpb24+CisKKwkgIDxvcHRpb24+CisJCTxwPjxvcHQ+LXIgfCAtLXJlZnJlc2g8L29wdD48L3A+CisJCTxvcHRkZXNjPjxwPlRlbGwgYW4gYWxyZWFkeSBydW5uaW5nIGF2YWhpLWRuc2NvbmZkIHRvIHJlZnJlc2ggdGhlIEROUyBzZXJ2ZXIgZGF0YS4gKGVxdWl2YWxlbnQgdG8gc2VuZGluZyBhIFNJR0hVUCk8L3A+PC9vcHRkZXNjPgorCSAgPC9vcHRpb24+CisKKwkgIDxvcHRpb24+CisJCTxwPjxvcHQ+LWMgfCAtLWNoZWNrPC9vcHQ+PC9wPgorCQk8b3B0ZGVzYz48cD5SZXR1cm4gMCBhcyByZXR1cm4gY29kZSB3aGVuIGF2YWhpLWRuc2NvbmZkIGlzIGFscmVhZHkgcnVubmluZy48L3A+PC9vcHRkZXNjPgorCSAgPC9vcHRpb24+CisKKwkgIDxvcHRpb24+CisJCTxwPjxvcHQ+LWggfCAtLWhlbHA8L29wdD48L3A+CisJCTxvcHRkZXNjPjxwPlNob3cgaGVscDwvcD48L29wdGRlc2M+CisJICA8L29wdGlvbj4KKworCSAgPG9wdGlvbj4KKwkJPHA+PG9wdD4tdiB8IC0tdmVyc2lvbjwvb3B0PjwvcD4KKwkJPG9wdGRlc2M+PHA+U2hvdyB2ZXJzaW9uIGluZm9ybWF0aW9uIDwvcD48L29wdGRlc2M+CisJICA8L29wdGlvbj4KKworCTwvb3B0aW9ucz4KKworICAgIDxzZWN0aW9uIG5hbWU9IkZpbGVzIj4KKworICAgICAgPHA+PGZpbGU+QHBrZ3N5c2NvbmZkaXJAL2F2YWhpLWRuc2NvbmZkLmFjdGlvbjwvZmlsZT46IHRoZSBzY3JpcHQgdG8gcnVuIHdoZW4gYSBETlMgc2VydmVyIGlzIGZvdW5kIG9yIHJlbW92ZWQuPC9wPgorCisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gbmFtZT0iU2lnbmFscyI+CisgICAgICA8cD48YXJnPlNJR0lOVCwgU0lHVEVSTTwvYXJnPjogYXZhaGktZG5zY29uZmQgd2lsbCBzaHV0ZG93bi4gVGhpcyBpcyBpc3N1ZWQgYnkgcGFzc2luZyAtLWtpbGwgdG8gYXZhaGktZGFlbW9uLjwvcD4KKyAgICAgIDxwPjxhcmc+U0lHSFVQPC9hcmc+OiBhdmFoaS1kbnNjb25mZCB3aWxsIHJlZnJlc2ggdGhlIEROUyBzZXJ2ZXIgZGF0YS48L3A+CisgICAgPC9zZWN0aW9uPgorCisJPHNlY3Rpb24gbmFtZT0iQXV0aG9ycyI+CisJICA8cD5UaGUgQXZhaGkgRGV2ZWxvcGVycyAmbHQ7QFBBQ0tBR0VfQlVHUkVQT1JUQCZndDs7IEF2YWhpIGlzCisJICBhdmFpbGFibGUgZnJvbSA8dXJsIGhyZWY9IkBQQUNLQUdFX1VSTEAiLz48L3A+CisJPC9zZWN0aW9uPgorCisJPHNlY3Rpb24gbmFtZT0iU2VlIGFsc28iPgorCSAgPHA+CisgICAgICAgIDxtYW5yZWYgbmFtZT0iYXZhaGktZGFlbW9uIiBzZWN0aW9uPSI4Ii8+LCA8bWFucmVmIG5hbWU9ImF2YWhpLWRuc2NvbmZkLmFjdGlvbiIgc2VjdGlvbj0iOCIvPgorCSAgPC9wPgorCTwvc2VjdGlvbj4KKworCTxzZWN0aW9uIG5hbWU9IkNvbW1lbnRzIj4KKwkgIDxwPlRoaXMgbWFuIHBhZ2Ugd2FzIHdyaXR0ZW4gdXNpbmcgPG1hbnJlZiBuYW1lPSJ4bWwybWFuIiBzZWN0aW9uPSIxIgorCQkgIGhyZWY9Imh0dHA6Ly9tYXNxbWFpbC5jeC94bWwybWFuLyIvPiBieSBPbGl2ZXIgS3VydGguPC9wPgorCTwvc2VjdGlvbj4KKworICA8L21hbnBhZ2U+CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvbWFuL2F2YWhpLWRuc2NvbmZkLmFjdGlvbi44IGIvYXZhaGktMC42LjMxL21hbi9hdmFoaS1kbnNjb25mZC5hY3Rpb24uOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWQyNjc2Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL21hbi9hdmFoaS1kbnNjb25mZC5hY3Rpb24uOApAQCAtMCwwICsxLDMwIEBACisuVEggYXZhaGktZG5zY29uZmQuYWN0aW9uIDggVXNlciBNYW51YWxzCisuU0ggTkFNRQorYXZhaGktZG5zY29uZmQuYWN0aW9uIFwtIGF2YWhpLWRuc2NvbmZkIGFjdGlvbiBzY3JpcHQKKy5TSCBTWU5PUFNJUworXGZCL2hvbWUvbGVubmFydC90bXAvYXZhaGkvZXRjL2F2YWhpL2F2YWhpLWRuc2NvbmZkLmFjdGlvbgorXGYxCisuU0ggREVTQ1JJUFRJT04KK1xmSWF2YWhpLWRuc2NvbmZkLmFjdGlvblxmMSBpcyB0aGUgYWN0aW9uIHNjcmlwdCB0aGF0IGlzIGNhbGxlZCB3aGVuZXZlciBhIG5ldyB1bmljYXN0IEROUyBzZXJ2ZXIgaXMgZm91bmQgb3IgcmVtb3ZlZCBieSBhdmFoaS1kbnNjb25mZC4gVGhlIGRlZmF1bHQgc2NyaXB0IGFzIHNoaXBwZWQgd2l0aCBhdmFoaSBwYXRjaGVzIFxmSS9ldGMvcmVzb2x2LmNvbmZcZjEgdG8gcmVmbGVjdCB0aGUgY2hhbmdlZCB1bmljYXN0IEROUyBzZXJ2ZXIgY29uZmlndXJhdGlvbi4KKy5TSCBQQVJBTUVURVJTCisuVFAKK1xmQmFyZ3ZbMV1cZjEgQ29udGFpbnMgdGhlIGNoYXJhY3RlciAiKyIgaWYgdGhlIEROUyBzZXJ2ZXIgaXMgbmV3LCAiLSIgd2hlbiBpdCBzaGFsbCBiZSByZW1vdmVkIGZyb20gdGhlIEROUyBzZXJ2ZXIgbGlzdC4KKy5UUAorXGZCYXJndlsyXVxmMSBUaGUgSVAgYWRkcmVzcyBvZiB0aGUgRE5TIHNlcnZlci4KKy5UUAorXGZCYXJndlszXVxmMSBOdW1lcmljYWwgbmV0d29yayBpbnRlcmZhY2UgbnVtYmVyIHRoaXMgRE5TIHNlcnZlciB3YXMgZm91bmQgb24uCisuVFAKK1xmQmFyZ3ZbNF1cZjEgTnVtZXJpY2FsIHByb3RvY29sIG51bWJlciB0aGlzIEROUyBzZXJ2ZXIgd2FzIGZvdW5kIG9uLiAodXN1YWxseSAyIGZvciBJUHY0IGFuZCAxMCBmb3IgSVB2NikgCisuU0ggRU5WSVJPTk1FTlQKKy5UUAorXGZCQVZBSElfSU5URVJGQUNFXGYxIENvbnRhaW5zIHRoZSB0ZXh0dWFsIGludGVyZmFjZSBuYW1lIHRoZSBjb3JyZXNwb25kcyB3aXRoIGFyZ3ZbM10uIChlLmcuICJldGgwIikKKy5UUAorXGZCQVZBSElfSU5URVJGQUNFX0ROU19TRVJWRVJTXGYxIENvbnRhaW5zIGEgbGlzdCBvZiBhbGwgRE5TIHNlcnZlcnMgdGhhdCBhdmFoaS1kbnNjb25mZCBmb3VuZCBvbiB0aGUgaW50ZXJmYWNlIFxmQiRBVkFISV9JTlRFUkZBQ0VcZjEsIHNlcGFyYXRlZCBieSBzcGFjZXMuCisuVFAKK1xmQkFWQUhJX0ROU19TRVJWRVJTXGYxIENvbnRhaW5zIGEgbGlzdCBvZiBhbGwgRE5TIHNlcnZlciB0aGF0IGF2YWhpLWRuc2NvbmZkIGZvdW5kIG9uIGFsbCBpbnRlcmZhY2VzLCBzZXBhcmF0ZWQgYnkgc3BhY2VzLgorLlNIIEFVVEhPUlMKK1RoZSBBdmFoaSBEZXZlbG9wZXJzIDxhdmFoaSAoYXQpIGxpc3RzIChkb3QpIGZyZWVkZXNrdG9wIChkb3QpIG9yZz47IEF2YWhpIGlzIGF2YWlsYWJsZSBmcm9tIFxmQmh0dHA6Ly9hdmFoaS5vcmcvXGYxCisuU0ggU0VFIEFMU08KK1xmQmF2YWhpLWRuc2NvbmZkKDgpXGYxLCBcZkJhdmFoaS1kYWVtb24oOClcZjEKKy5TSCBDT01NRU5UUworVGhpcyBtYW4gcGFnZSB3YXMgd3JpdHRlbiB1c2luZyBcZkJ4bWwybWFuKDEpXGYxIGJ5IE9saXZlciBLdXJ0aC4KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9tYW4vYXZhaGktZG5zY29uZmQuYWN0aW9uLjgueG1sLmluIGIvYXZhaGktMC42LjMxL21hbi9hdmFoaS1kbnNjb25mZC5hY3Rpb24uOC54bWwuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRhZTM3ZQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9tYW4vYXZhaGktZG5zY29uZmQuYWN0aW9uLjgueG1sLmluCkBAIC0wLDAgKzEsOTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PjwhLS0qLW54bWwtKi0tPgorPCFET0NUWVBFIG1hbnBhZ2UgU1lTVEVNICJ4bWx0b21hbi5kdGQiPgorPD94bWwtc3R5bGVzaGVldCB0eXBlPSJ0ZXh0L3hzbCIgaHJlZj0ieG1sdG9tYW4ueHNsIiA/PgorCis8IS0tCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKyAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICBVU0EuCistLT4KKworICA8bWFucGFnZSBuYW1lPSJhdmFoaS1kbnNjb25mZC5hY3Rpb24iIHNlY3Rpb249IjgiIGRlc2M9ImF2YWhpLWRuc2NvbmZkIGFjdGlvbiBzY3JpcHQiPgorCisJPHN5bm9wc2lzPgorICAgICAgPGNtZD5AcGtnc3lzY29uZmRpckAvYXZhaGktZG5zY29uZmQuYWN0aW9uPC9jbWQ+CisJPC9zeW5vcHNpcz4KKworICAgIDxkZXNjcmlwdGlvbj4KKyAgICAgIDxwPjxmaWxlPmF2YWhpLWRuc2NvbmZkLmFjdGlvbjwvZmlsZT4gaXMgdGhlIGFjdGlvbiBzY3JpcHQgdGhhdAorICAgICAgaXMgY2FsbGVkIHdoZW5ldmVyIGEgbmV3IHVuaWNhc3QgRE5TIHNlcnZlciBpcyBmb3VuZCBvcgorICAgICAgIHJlbW92ZWQgYnkgYXZhaGktZG5zY29uZmQuIFRoZSBkZWZhdWx0IHNjcmlwdCBhcyBzaGlwcGVkCisgICAgICB3aXRoIGF2YWhpIHBhdGNoZXMgPGZpbGU+L2V0Yy9yZXNvbHYuY29uZjwvZmlsZT4gdG8gcmVmbGVjdCB0aGUKKyAgICAgIGNoYW5nZWQgdW5pY2FzdCBETlMgc2VydmVyIGNvbmZpZ3VyYXRpb24uPC9wPgorCTwvZGVzY3JpcHRpb24+CisKKwk8c2VjdGlvbiBuYW1lPSJQYXJhbWV0ZXJzIj4KKworICAgICAgPG9wdGlvbj4KKyAgICAgICAgPHA+PG9wdD5hcmd2WzFdPC9vcHQ+IENvbnRhaW5zIHRoZSBjaGFyYWN0ZXIgIisiIGlmIHRoZSBETlMgc2VydmVyIGlzIG5ldywgIi0iIHdoZW4gaXQgc2hhbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBETlMgc2VydmVyIGxpc3QuPC9wPgorICAgICAgPC9vcHRpb24+CisKKyAgICAgIDxvcHRpb24+CisgICAgICAgIDxwPjxvcHQ+YXJndlsyXTwvb3B0PiBUaGUgSVAgYWRkcmVzcyBvZiB0aGUgRE5TIHNlcnZlci48L3A+CisgICAgICA8L29wdGlvbj4KKworICAgICAgPG9wdGlvbj4KKyAgICAgICAgPHA+PG9wdD5hcmd2WzNdPC9vcHQ+IE51bWVyaWNhbCBuZXR3b3JrIGludGVyZmFjZSBudW1iZXIgdGhpcyBETlMgc2VydmVyIHdhcyBmb3VuZCBvbi48L3A+CisgICAgICA8L29wdGlvbj4KKworICAgICAgPG9wdGlvbj4KKyAgICAgICAgPHA+PG9wdD5hcmd2WzRdPC9vcHQ+IE51bWVyaWNhbCBwcm90b2NvbCBudW1iZXIgdGhpcyBETlMgc2VydmVyIHdhcyBmb3VuZCBvbi4gKHVzdWFsbHkgMiBmb3IgSVB2NCBhbmQgMTAgZm9yIElQdjYpIDwvcD4KKyAgICAgIDwvb3B0aW9uPgorCisJPC9zZWN0aW9uPgorCisJPHNlY3Rpb24gbmFtZT0iRW52aXJvbm1lbnQiPgorICAgICAgPG9wdGlvbj4KKyAgICAgICAgPHA+PG9wdD5BVkFISV9JTlRFUkZBQ0U8L29wdD4gQ29udGFpbnMgdGhlIHRleHR1YWwgaW50ZXJmYWNlIG5hbWUgdGhlIGNvcnJlc3BvbmRzIHdpdGggYXJndlszXS4gKGUuZy4gImV0aDAiKTwvcD4KKyAgICAgIDwvb3B0aW9uPgorCisgICAgICA8b3B0aW9uPjxwPjxvcHQ+QVZBSElfSU5URVJGQUNFX0ROU19TRVJWRVJTPC9vcHQ+IENvbnRhaW5zIGEKKyAgICAgIGxpc3Qgb2YgYWxsIEROUyBzZXJ2ZXJzIHRoYXQgYXZhaGktZG5zY29uZmQgZm91bmQgb24gdGhlCisgICAgICBpbnRlcmZhY2UgPG9wdD4kQVZBSElfSU5URVJGQUNFPC9vcHQ+LCBzZXBhcmF0ZWQgYnkKKyAgICAgIHNwYWNlcy48L3A+PC9vcHRpb24+CisKKyAgICAgIDxvcHRpb24+PHA+PG9wdD5BVkFISV9ETlNfU0VSVkVSUzwvb3B0PiBDb250YWlucyBhIGxpc3Qgb2YgYWxsCisgICAgICBETlMgc2VydmVyIHRoYXQgYXZhaGktZG5zY29uZmQgZm91bmQgb24gYWxsIGludGVyZmFjZXMsCisgICAgICBzZXBhcmF0ZWQgYnkgc3BhY2VzLjwvcD48L29wdGlvbj4KKworICAgIDwvc2VjdGlvbj4KKworCTxzZWN0aW9uIG5hbWU9IkF1dGhvcnMiPgorCSAgPHA+VGhlIEF2YWhpIERldmVsb3BlcnMgJmx0O0BQQUNLQUdFX0JVR1JFUE9SVEAmZ3Q7OyBBdmFoaSBpcworCSAgYXZhaWxhYmxlIGZyb20gPHVybCBocmVmPSJAUEFDS0FHRV9VUkxAIi8+PC9wPgorCTwvc2VjdGlvbj4KKworCTxzZWN0aW9uIG5hbWU9IlNlZSBhbHNvIj4KKwkgIDxwPgorICAgICAgICA8bWFucmVmIG5hbWU9ImF2YWhpLWRuc2NvbmZkIiBzZWN0aW9uPSI4Ii8+LCA8bWFucmVmIG5hbWU9ImF2YWhpLWRhZW1vbiIgc2VjdGlvbj0iOCIvPgorCSAgPC9wPgorCTwvc2VjdGlvbj4KKworCTxzZWN0aW9uIG5hbWU9IkNvbW1lbnRzIj4KKwkgIDxwPlRoaXMgbWFuIHBhZ2Ugd2FzIHdyaXR0ZW4gdXNpbmcgPG1hbnJlZiBuYW1lPSJ4bWwybWFuIiBzZWN0aW9uPSIxIgorCQkgIGhyZWY9Imh0dHA6Ly9tYXNxbWFpbC5jeC94bWwybWFuLyIvPiBieSBPbGl2ZXIgS3VydGguPC9wPgorCTwvc2VjdGlvbj4KKworICA8L21hbnBhZ2U+CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvbWFuL2F2YWhpLXB1Ymxpc2guMSBiL2F2YWhpLTAuNi4zMS9tYW4vYXZhaGktcHVibGlzaC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzZTQyYzYKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvbWFuL2F2YWhpLXB1Ymxpc2guMQpAQCAtMCwwICsxLDQ5IEBACisuVEggYXZhaGktcHVibGlzaC1zZXJ2aWNlIDEgVXNlciBNYW51YWxzCisuU0ggTkFNRQorYXZhaGktcHVibGlzaC1zZXJ2aWNlIFwtIFJlZ2lzdGVyIGFuIG1ETlMvRE5TLVNEIHNlcnZpY2Ugb3IgaG9zdCBuYW1lIG9yIGFkZHJlc3MgbWFwcGluZyB1c2luZyB0aGUgQXZhaGkgZGFlbW9uCisuU0ggU1lOT1BTSVMKK1xmQmF2YWhpLXB1Ymxpc2ggLXMgW1xmSW9wdGlvbnNcZkJdIFxmSW5hbWVcZkIgXGZJc2VydmljZS10eXBlXGZCIFxmSXBvcnRcZkIgW1xmSVRYVCBkYXRhXGZCIC4uLl0KKworYXZhaGktcHVibGlzaC1zZXJ2aWNlIFtcZklvcHRpb25zXGZCXSBcZkluYW1lXGZCIFxmSXNlcnZpY2UtdHlwZVxmQiBcZklwb3J0XGZCIFtcZklUWFQgZGF0YVxmQiAuLi5dCisKK2F2YWhpLXB1Ymxpc2ggLWEgW1xmSW9wdGlvbnNcZkJdIFxmSWhvc3QgbmFtZVxmQiBcZklhZGRyZXNzXGZCCisKK2F2YWhpLXB1Ymxpc2gtYWRkcmVzcyBbXGZJb3B0aW9uc1xmQl0gXGZJaG9zdCBuYW1lXGZCIFxmSWFkZHJlc3NcZkIKK1xmMQorLlNIIERFU0NSSVBUSU9OCitSZWdpc3RlciBhbiBtRE5TL0ROUy1TRCBzZXJ2aWNlIG9yIGhvc3QgbmFtZS9hZGRyZXNzIG1hcHBpbmcgdXNpbmcgdGhlIEF2YWhpIGRhZW1vbi4KKy5TSCBPUFRJT05TCitXaGVuIGNhbGxpbmcgaW4gc2VydmljZSByZWdpc3RyYXRpb24gbW9kZSwgc3BlY2lmeSBhIEROUy1TRCBzZXJ2aWNlIG5hbWUgKGUuZy4gIkxlbm5hcnQncyBGaWxlcyIpLCBhIHNlcnZpY2UgdHlwZSAoZS5nLiBfaHR0cC5fdGNwKSBhbmQgYW4gSVAgcG9ydCBudW1iZXIgZm9yIHRoZSBzZXJ2aWNlLCBvcHRpb25hbGx5IGZvbGxvd2VkIGJ5IGFueSBudW1iZXIgb2YgVFhUIHJlY29yZCBzdHJpbmdzIG9uIHRoZSBjb21tYW5kIGxpbmUuIFdoZW4gY2FsbGluZyBpbiBhZGRyZXNzL2hvc3QgbmFtZSByZWdpc3RyYXRpb24gbW9kZSBzcGVjaWZ5IGEgZnVsbHkgcXVhbGlmaWVkIGhvc3QgbmFtZSBhbmQgYW4gYWRkcmVzcyAoSVB2NCBvciBJUHY2KS4KKy5UUAorXGZCLXMgfCAtLXNlcnZpY2VcZjEKK1JlZ2lzdGVyIGEgc2VydmljZS4gYXZhaGktcHVibGlzaC1zZXJ2aWNlIGlzIGVxdWl2YWxlbnQgdG8gYXZhaGktcHVibGlzaCAtcy4KKy5UUAorXGZCLWEgfCAtLWFkZHJlc3NcZjEKK1JlZ2lzdGVyIGFuIGFkZHJlc3MvaG9zdCBuYW1lIG1hcHBpbmcuIGF2YWhpLXB1Ymxpc2gtYWRkcmVzcyBpcyBlcXVpdmFsZW50IHRvIGF2YWhpLXB1Ymxpc2ggLWEuCisuVFAKK1xmQi12IHwgLS12ZXJib3NlXGYxCitFbmFibGUgdmVyYm9zZSBtb2RlLgorLlRQCitcZkItSCB8IC0taG9zdD1cZjEgXGZJSE9TVE5BTUVcZjEKK1NwZWNpZnkgYSBob3N0IG5hbWUgZm9yIHRoaXMgc2VydmljZSwgaW4gY2FzZSBpdCBkb2Vzbid0IHJlc2lkZSBvbiB0aGUgbG9jYWwgaG9zdC4gVGhpcyBob3N0IG5hbWUgbmVlZHMgdG8gYmUgZnVsbHkgcXVhbGlmaWVkIGFuZCByZXNvbHZhYmxlIHVzaW5nIG1ETlMgb3IgdW5pY2FzdCBETlMuCisuVFAKK1xmQi1kIHwgLS1kb21haW49XGYxIFxmSURPTUFJTlxmMQorUHVibGlzaCB0aGUgc2VydmljZSBpbiB0aGUgc3BlY2lmaWVkIGRvbWFpbi4gSWYgb21pdHRlZCB0aGUgQXZhaGkgZGFlbW9uIHdpbGwgcHVibGlzaCBpdCBpbiBpdHMgZGVmYXVsdCBkb21haW4gKHVzdWFsbHkgLmxvY2FsKS4KKy5UUAorXGZCLS1zdWJ0eXBlPVxmMSBcZklTVUJUWVBFXGYxCitSZWdpc3RlciB0aGUgc2VydmljZSB3aXRoIGFuIGFkZGl0aW9uYWwgc3VidHlwZSBpbiBhZGRpdGlvbiB0byB0aGUgbWFpbiB0eXBlLiBETlMtU0Qgc3VidHlwZXMgaGF2ZSB0aGUgZm9ybSBfYW5vbi5fc3ViLl9mdHAuX3RjcCwgd2hlcmUgX2Fub24gaXMgdGhlIGlkZW50aWZpZXIgb2YgdGhlIHN1YnR5cGUgYW5kIF9mdHAuX3RjcCBpcyB0aGUgbWFpbiB0eXBlLiBZb3UgbWF5IHBhc3MgdGhpcyBvcHRpb24gbXVsdGlwbGUgdGltZXMgdG8gcmVnaXN0ZXIgdGhlIHNlcnZpY2Ugd2l0aCBtdWx0aXBsZSBzdWJ0eXBlcy4KKy5UUAorXGZCLWYgfCAtLW5vLWZhaWxcZjEKK0Rvbid0IGZhaWwgaWYgdGhlIGRhZW1vbiBpcyBub3QgZm91bmQgcnVubmluZy4gSW5zdGVhZCwgd2FpdCB1bnRpbCBpdCBhcHBlYXJzLiBJZiBpdCBkaXNjb25uZWN0cywgdHJ5IHRvIHJlY29ubmVjdC4KKy5UUAorXGZCLWggfCAtLWhlbHBcZjEKK1Nob3cgaGVscAorLlRQCitcZkItViB8IC0tdmVyc2lvblxmMQorU2hvdyB2ZXJzaW9uIGluZm9ybWF0aW9uLgorLlNIIEFVVEhPUlMKK1RoZSBBdmFoaSBEZXZlbG9wZXJzIDxhdmFoaSAoYXQpIGxpc3RzIChkb3QpIGZyZWVkZXNrdG9wIChkb3QpIG9yZz47IEF2YWhpIGlzIGF2YWlsYWJsZSBmcm9tIFxmQmh0dHA6Ly9hdmFoaS5vcmcvXGYxCisuU0ggU0VFIEFMU08KK1xmQmF2YWhpLXJlc29sdmUoMSlcZjEsIFxmQmF2YWhpLWJyb3dzZSgxKVxmMSwgXGZCYXZhaGktZGFlbW9uKDgpXGYxCisuU0ggQ09NTUVOVFMKK1RoaXMgbWFuIHBhZ2Ugd2FzIHdyaXR0ZW4gdXNpbmcgXGZCeG1sMm1hbigxKVxmMSBieSBPbGl2ZXIgS3VydGguCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvbWFuL2F2YWhpLXB1Ymxpc2guMS54bWwuaW4gYi9hdmFoaS0wLjYuMzEvbWFuL2F2YWhpLXB1Ymxpc2guMS54bWwuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI4ZGJkYQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9tYW4vYXZhaGktcHVibGlzaC4xLnhtbC5pbgpAQCAtMCwwICsxLDEyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+PCEtLSotbnhtbC0qLS0+Cis8IURPQ1RZUEUgbWFucGFnZSBTWVNURU0gInhtbHRvbWFuLmR0ZCI+Cis8P3htbC1zdHlsZXNoZWV0IHR5cGU9InRleHQveHNsIiBocmVmPSJ4bWx0b21hbi54c2wiID8+CisKKzwhLS0KKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKy0tPgorCisgIDxtYW5wYWdlIG5hbWU9ImF2YWhpLXB1Ymxpc2gtc2VydmljZSIgc2VjdGlvbj0iMSIgZGVzYz0iUmVnaXN0ZXIgYW4gbUROUy9ETlMtU0Qgc2VydmljZSBvciBob3N0IG5hbWUgb3IgYWRkcmVzcyBtYXBwaW5nIHVzaW5nIHRoZSBBdmFoaSBkYWVtb24iPgorCisJPHN5bm9wc2lzPgorICAgICAgPGNtZD5hdmFoaS1wdWJsaXNoIC1zIFs8YXJnPm9wdGlvbnM8L2FyZz5dIDxhcmc+bmFtZTwvYXJnPiA8YXJnPnNlcnZpY2UtdHlwZTwvYXJnPiA8YXJnPnBvcnQ8L2FyZz4gWzxhcmc+VFhUIGRhdGE8L2FyZz4gLi4uXTwvY21kPgorICAgICAgPGNtZD5hdmFoaS1wdWJsaXNoLXNlcnZpY2UgWzxhcmc+b3B0aW9uczwvYXJnPl0gPGFyZz5uYW1lPC9hcmc+IDxhcmc+c2VydmljZS10eXBlPC9hcmc+IDxhcmc+cG9ydDwvYXJnPiBbPGFyZz5UWFQgZGF0YTwvYXJnPiAuLi5dPC9jbWQ+CisgICAgICA8Y21kPmF2YWhpLXB1Ymxpc2ggLWEgWzxhcmc+b3B0aW9uczwvYXJnPl0gPGFyZz5ob3N0IG5hbWU8L2FyZz4gPGFyZz5hZGRyZXNzPC9hcmc+PC9jbWQ+CisgICAgICA8Y21kPmF2YWhpLXB1Ymxpc2gtYWRkcmVzcyBbPGFyZz5vcHRpb25zPC9hcmc+XSA8YXJnPmhvc3QgbmFtZTwvYXJnPiA8YXJnPmFkZHJlc3M8L2FyZz48L2NtZD4KKwk8L3N5bm9wc2lzPgorCisgICAgPGRlc2NyaXB0aW9uPgorICAgICAgPHA+UmVnaXN0ZXIgYW4gbUROUy9ETlMtU0Qgc2VydmljZSBvciBob3N0IG5hbWUvYWRkcmVzcyBtYXBwaW5nIHVzaW5nIHRoZSBBdmFoaSBkYWVtb24uPC9wPgorCTwvZGVzY3JpcHRpb24+CisKKwk8b3B0aW9ucz4KKworICAgICAgPHA+V2hlbiBjYWxsaW5nIGluIHNlcnZpY2UgcmVnaXN0cmF0aW9uIG1vZGUsIHNwZWNpZnkgYSBETlMtU0QKKyAgICAgIHNlcnZpY2UgbmFtZSAoZS5nLiAiTGVubmFydCdzIEZpbGVzIiksIGEgc2VydmljZSB0eXBlCisgICAgICAoZS5nLiBfaHR0cC5fdGNwKSBhbmQgYW4gSVAgcG9ydCBudW1iZXIgZm9yIHRoZSBzZXJ2aWNlLAorICAgICAgb3B0aW9uYWxseSBmb2xsb3dlZCBieSBhbnkgbnVtYmVyIG9mIFRYVCByZWNvcmQgc3RyaW5ncyBvbiB0aGUKKyAgICAgIGNvbW1hbmQgbGluZS4gV2hlbiBjYWxsaW5nIGluIGFkZHJlc3MvaG9zdCBuYW1lIHJlZ2lzdHJhdGlvbgorICAgICAgbW9kZSBzcGVjaWZ5IGEgZnVsbHkgcXVhbGlmaWVkIGhvc3QgbmFtZSBhbmQgYW4gYWRkcmVzcyAoSVB2NCBvcgorICAgICAgSVB2NikuPC9wPgorCisJICA8b3B0aW9uPgorICAgICAgICA8cD48b3B0Pi1zIHwgLS1zZXJ2aWNlPC9vcHQ+PC9wPgorICAgICAgICA8b3B0ZGVzYz48cD5SZWdpc3RlciBhIHNlcnZpY2UuIGF2YWhpLXB1Ymxpc2gtc2VydmljZSBpcyBlcXVpdmFsZW50IHRvIGF2YWhpLXB1Ymxpc2ggLXMuPC9wPjwvb3B0ZGVzYz4KKyAgICAgIDwvb3B0aW9uPgorCisJICA8b3B0aW9uPgorICAgICAgICA8cD48b3B0Pi1hIHwgLS1hZGRyZXNzPC9vcHQ+PC9wPgorICAgICAgICA8b3B0ZGVzYz48cD5SZWdpc3RlciBhbiBhZGRyZXNzL2hvc3QgbmFtZSBtYXBwaW5nLiBhdmFoaS1wdWJsaXNoLWFkZHJlc3MgaXMgZXF1aXZhbGVudCB0byBhdmFoaS1wdWJsaXNoIC1hLjwvcD48L29wdGRlc2M+CisgICAgICA8L29wdGlvbj4KKworICAgICAgPG9wdGlvbj4KKyAgICAgICAgPHA+PG9wdD4tdiB8IC0tdmVyYm9zZTwvb3B0PjwvcD4KKyAgICAgICAgPG9wdGRlc2M+PHA+RW5hYmxlIHZlcmJvc2UgbW9kZS48L3A+PC9vcHRkZXNjPgorICAgICAgPC9vcHRpb24+CisKKyAgICAgIDxvcHRpb24+CisJCTxwPjxvcHQ+LUggfCAtLWhvc3Q9PC9vcHQ+IDxhcmc+SE9TVE5BTUU8L2FyZz48L3A+CisJCTxvcHRkZXNjPjxwPlNwZWNpZnkgYSBob3N0IG5hbWUgZm9yIHRoaXMgc2VydmljZSwgaW4gY2FzZSBpdAorCQlkb2Vzbid0IHJlc2lkZSBvbiB0aGUgbG9jYWwgaG9zdC4gVGhpcyBob3N0IG5hbWUgbmVlZHMgdG8gYmUKKwkJZnVsbHkgcXVhbGlmaWVkIGFuZCByZXNvbHZhYmxlIHVzaW5nIG1ETlMgb3IgdW5pY2FzdAorCQlETlMuPC9wPjwvb3B0ZGVzYz4KKwkgIDwvb3B0aW9uPgorCisJICA8b3B0aW9uPgorCQk8cD48b3B0Pi1kIHwgLS1kb21haW49PC9vcHQ+IDxhcmc+RE9NQUlOPC9hcmc+PC9wPgorICAgICAgICA8b3B0ZGVzYz48cD5QdWJsaXNoIHRoZSBzZXJ2aWNlIGluIHRoZSBzcGVjaWZpZWQgZG9tYWluLiBJZgorICAgICAgICBvbWl0dGVkIHRoZSBBdmFoaSBkYWVtb24gd2lsbCBwdWJsaXNoIGl0IGluIGl0cyBkZWZhdWx0IGRvbWFpbgorICAgICAgICAodXN1YWxseSAubG9jYWwpLjwvcD48L29wdGRlc2M+CisJICA8L29wdGlvbj4KKworICAgICAgPG9wdGlvbj4KKyAgICAgICAgPHA+PG9wdD4tLXN1YnR5cGU9PC9vcHQ+IDxhcmc+U1VCVFlQRTwvYXJnPjwvcD4KKyAgICAgICAgPG9wdGRlc2M+PHA+UmVnaXN0ZXIgdGhlIHNlcnZpY2Ugd2l0aCBhbiBhZGRpdGlvbmFsIHN1YnR5cGUgaW4KKyAgICAgICAgYWRkaXRpb24gdG8gdGhlIG1haW4gdHlwZS4gRE5TLVNEIHN1YnR5cGVzICBoYXZlIHRoZSBmb3JtCisgICAgICAgIF9hbm9uLl9zdWIuX2Z0cC5fdGNwLCB3aGVyZSBfYW5vbiBpcyB0aGUgaWRlbnRpZmllciBvZiB0aGUKKyAgICAgICAgc3VidHlwZSBhbmQgX2Z0cC5fdGNwIGlzIHRoZSBtYWluIHR5cGUuIFlvdSBtYXkgcGFzcyB0aGlzCisgICAgICAgIG9wdGlvbiBtdWx0aXBsZSB0aW1lcyB0byByZWdpc3RlciB0aGUgc2VydmljZSB3aXRoIG11bHRpcGxlCisgICAgICAgIHN1YnR5cGVzLjwvcD48L29wdGRlc2M+CisgICAgICA8L29wdGlvbj4KKworCSAgPG9wdGlvbj4KKwkJPHA+PG9wdD4tZiB8IC0tbm8tZmFpbDwvb3B0PjwvcD4KKwkJPG9wdGRlc2M+PHA+RG9uJ3QgZmFpbCBpZiB0aGUgZGFlbW9uIGlzIG5vdCBmb3VuZCBydW5uaW5nLiBJbnN0ZWFkLCB3YWl0IHVudGlsIGl0IGFwcGVhcnMuIElmIGl0IGRpc2Nvbm5lY3RzLCB0cnkgdG8gcmVjb25uZWN0LjwvcD48L29wdGRlc2M+CisJICA8L29wdGlvbj4KKworCSAgPG9wdGlvbj4KKwkJPHA+PG9wdD4taCB8IC0taGVscDwvb3B0PjwvcD4KKwkJPG9wdGRlc2M+PHA+U2hvdyBoZWxwPC9wPjwvb3B0ZGVzYz4KKwkgIDwvb3B0aW9uPgorCisJICA8b3B0aW9uPgorCQk8cD48b3B0Pi1WIHwgLS12ZXJzaW9uPC9vcHQ+PC9wPgorCQk8b3B0ZGVzYz48cD5TaG93IHZlcnNpb24gaW5mb3JtYXRpb24uPC9wPjwvb3B0ZGVzYz4KKwkgIDwvb3B0aW9uPgorCisJPC9vcHRpb25zPgorCisJPHNlY3Rpb24gbmFtZT0iQXV0aG9ycyI+CisJICA8cD5UaGUgQXZhaGkgRGV2ZWxvcGVycyAmbHQ7QFBBQ0tBR0VfQlVHUkVQT1JUQCZndDs7IEF2YWhpIGlzCisJICBhdmFpbGFibGUgZnJvbSA8dXJsIGhyZWY9IkBQQUNLQUdFX1VSTEAiLz48L3A+CisJPC9zZWN0aW9uPgorCisJPHNlY3Rpb24gbmFtZT0iU2VlIGFsc28iPgorCSAgPHA+CisgICAgICAgIDxtYW5yZWYgbmFtZT0iYXZhaGktcmVzb2x2ZSIgc2VjdGlvbj0iMSIvPiwgPG1hbnJlZgorICAgICAgICBuYW1lPSJhdmFoaS1icm93c2UiIHNlY3Rpb249IjEiLz4sIDxtYW5yZWYKKyAgICAgICAgbmFtZT0iYXZhaGktZGFlbW9uIiBzZWN0aW9uPSI4Ii8+CisJICA8L3A+CisJPC9zZWN0aW9uPgorCisJPHNlY3Rpb24gbmFtZT0iQ29tbWVudHMiPgorCSAgPHA+VGhpcyBtYW4gcGFnZSB3YXMgd3JpdHRlbiB1c2luZyA8bWFucmVmIG5hbWU9InhtbDJtYW4iIHNlY3Rpb249IjEiCisJCSAgaHJlZj0iaHR0cDovL21hc3FtYWlsLmN4L3htbDJtYW4vIi8+IGJ5IE9saXZlciBLdXJ0aC48L3A+CisJPC9zZWN0aW9uPgorCisgIDwvbWFucGFnZT4KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9tYW4vYXZhaGktcmVzb2x2ZS4xIGIvYXZhaGktMC42LjMxL21hbi9hdmFoaS1yZXNvbHZlLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ4N2EzZgotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9tYW4vYXZhaGktcmVzb2x2ZS4xCkBAIC0wLDAgKzEsNDcgQEAKKy5USCBhdmFoaS1yZXNvbHZlIDEgVXNlciBNYW51YWxzCisuU0ggTkFNRQorYXZhaGktcmVzb2x2ZSBcLSBSZXNvbHZlIG9uZSBvciBtb3JlIG1ETlMvRE5TIGhvc3QgbmFtZShzKSB0byBJUCBhZGRyZXNzKGVzKSAoYW5kIHZpY2UgdmVyc2EpIHVzaW5nIHRoZSBBdmFoaSBkYWVtb24KKy5TSCBTWU5PUFNJUworXGZCYXZhaGktcmVzb2x2ZSAtLW5hbWUgXGZJaG9zdC1uYW1lIC4uLlxmQgorCithdmFoaS1yZXNvbHZlLWhvc3QtbmFtZSBcZklob3N0LW5hbWUgLi4uXGZCCisKK2F2YWhpLXJlc29sdmUgLS1hZGRyZXNzIFxmSWFkZHJlc3MgLi4uXGZCCisKK2F2YWhpLXJlc29sdmUtYWRkcmVzcyBcZklhZGRyZXNzIC4uLlxmQgorXGYxCisuU0ggREVTQ1JJUFRJT04KK1Jlc29sdmUgb25lIG9yIG1vcmUgbUROUy9ETlMgaG9zdCBuYW1lKHMpIHRvIElQIGFkZHJlc3MoZXMpIChhbmQgdmljZSB2ZXJzYSkgdXNpbmcgdGhlIEF2YWhpIGRhZW1vbi4KKy5TSCBPUFRJT05TCitXaGVuIHBhc3NpbmcgLW4sIHNwZWNpZnkgb25lIG9yIG1vcmUgZnVsbHkgcXVhbGlmaWVkIG1ETlMvRE5TIGhvc3QgbmFtZShzKSAoZS5nLiAiZm9vLmxvY2FsIikgdG8gcmVzb2x2ZSBpbnRvIElQIGFkZHJlc3NlcyBvbiB0aGUgY29tbWFuZCBsaW5lLiBXaGVuIHBhc3NpbmcgLWEsIHNwZWNpZnkgb25lIG9yIG1vcmUgSVAgYWRkcmVzcyB0byByZXNvbHZlIGludG8gaG9zdCBuYW1lcy4KKworYXZhaGktcmVzb2x2ZS1ob3N0LW5hbWUgaXMgZXF1aXZhbGVudCB0byBhdmFoaS1yZXNvbHZlIC0tbmFtZS4KKworYXZhaGktcmVzb2x2ZS1hZGRyZXNzIGlzIGVxdWl2YWxlbnQgdG8gYXZhaGktcmVzb2x2ZSAtLWFkZHJlc3MuCisuVFAKK1xmQi1uIHwgLS1uYW1lXGYxCitUcmFuc2xhdGUgb25lIG9yIG1vcmUgZnVsbHkgcXVhbGlmaWVkIGhvc3QgbmFtZXMgaW50byBhZGRyZXNzZXMuCisuVFAKK1xmQi1hIHwgLS1hZGRyZXNzXGYxCitUcmFuc2xhdGUgb25lIG9yIG1vcmUgYWRkcmVzc2VzIGludG8gZnVsbHkgcXVhbGlmaWVkIGhvc3QgbmFtZXMuCisuVFAKK1xmQi12IHwgLS12ZXJib3NlXGYxCitFbmFibGUgdmVyYm9zZSBtb2RlLgorLlRQCitcZkItNlxmMQorV2hlbiByZXNvbHZpbmcgYSBob3N0IG5hbWUsIGxvb2sgZm9yIElQdjYgYWRkcmVzc2VzIGV4Y2x1c2l2ZWx5LgorLlRQCitcZkItNFxmMQorV2hlbiByZXNvbHZpbmcgYSBob3N0IG5hbWUsIGxvb2sgZm9yIElQdjQgYWRkcmVzc2VzIGV4Y2x1c2l2ZWx5LgorLlRQCitcZkItaCB8IC0taGVscFxmMQorU2hvdyBoZWxwLgorLlRQCitcZkItViB8IC0tdmVyc2lvblxmMQorU2hvdyB2ZXJzaW9uIGluZm9ybWF0aW9uLgorLlNIIEFVVEhPUlMKK1RoZSBBdmFoaSBEZXZlbG9wZXJzIDxhdmFoaSAoYXQpIGxpc3RzIChkb3QpIGZyZWVkZXNrdG9wIChkb3QpIG9yZz47IEF2YWhpIGlzIGF2YWlsYWJsZSBmcm9tIFxmQmh0dHA6Ly9hdmFoaS5vcmcvXGYxCisuU0ggU0VFIEFMU08KK1xmQmF2YWhpLXB1Ymxpc2gtYWRkcmVzcygxKVxmMSwgXGZCYXZhaGktZGFlbW9uKDgpXGYxCisuU0ggQ09NTUVOVFMKK1RoaXMgbWFuIHBhZ2Ugd2FzIHdyaXR0ZW4gdXNpbmcgXGZCeG1sMm1hbigxKVxmMSBieSBPbGl2ZXIgS3VydGguCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvbWFuL2F2YWhpLXJlc29sdmUuMS54bWwuaW4gYi9hdmFoaS0wLjYuMzEvbWFuL2F2YWhpLXJlc29sdmUuMS54bWwuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ0NGNiOQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9tYW4vYXZhaGktcmVzb2x2ZS4xLnhtbC5pbgpAQCAtMCwwICsxLDEwNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+PCEtLSotbnhtbC0qLS0+Cis8IURPQ1RZUEUgbWFucGFnZSBTWVNURU0gInhtbHRvbWFuLmR0ZCI+Cis8P3htbC1zdHlsZXNoZWV0IHR5cGU9InRleHQveHNsIiBocmVmPSJ4bWx0b21hbi54c2wiID8+CisKKzwhLS0KKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKy0tPgorCisgIDxtYW5wYWdlIG5hbWU9ImF2YWhpLXJlc29sdmUiIHNlY3Rpb249IjEiIGRlc2M9IlJlc29sdmUgb25lIG9yIG1vcmUgbUROUy9ETlMgaG9zdCBuYW1lKHMpIHRvIElQIGFkZHJlc3MoZXMpIChhbmQgdmljZSB2ZXJzYSkgdXNpbmcgdGhlIEF2YWhpIGRhZW1vbiI+CisKKwk8c3lub3BzaXM+CisgICAgICA8Y21kPmF2YWhpLXJlc29sdmUgLS1uYW1lIDxhcmc+aG9zdC1uYW1lIC4uLjwvYXJnPjwvY21kPgorICAgICAgPGNtZD5hdmFoaS1yZXNvbHZlLWhvc3QtbmFtZSA8YXJnPmhvc3QtbmFtZSAuLi48L2FyZz48L2NtZD4KKyAgICAgIDxjbWQ+YXZhaGktcmVzb2x2ZSAtLWFkZHJlc3MgPGFyZz5hZGRyZXNzIC4uLjwvYXJnPjwvY21kPgorICAgICAgPGNtZD5hdmFoaS1yZXNvbHZlLWFkZHJlc3MgPGFyZz5hZGRyZXNzIC4uLjwvYXJnPjwvY21kPgorCTwvc3lub3BzaXM+CisKKyAgICA8ZGVzY3JpcHRpb24+CisgICAgICA8cD5SZXNvbHZlIG9uZSBvciBtb3JlIG1ETlMvRE5TIGhvc3QgbmFtZShzKSB0byBJUCBhZGRyZXNzKGVzKSAoYW5kIHZpY2UgdmVyc2EpIHVzaW5nIHRoZSBBdmFoaSBkYWVtb24uPC9wPgorCTwvZGVzY3JpcHRpb24+CisKKwk8b3B0aW9ucz4KKworICAgICAgPHA+V2hlbiBwYXNzaW5nIC1uLCBzcGVjaWZ5IG9uZSBvciBtb3JlIGZ1bGx5IHF1YWxpZmllZCBtRE5TL0ROUyBob3N0IG5hbWUocykKKyAgICAgIChlLmcuICJmb28ubG9jYWwiKSB0byByZXNvbHZlIGludG8gSVAgYWRkcmVzc2VzIG9uIHRoZQorICAgICAgY29tbWFuZCBsaW5lLiBXaGVuIHBhc3NpbmcgLWEsIHNwZWNpZnkgb25lIG9yIG1vcmUgSVAgYWRkcmVzcworICAgICAgdG8gcmVzb2x2ZSBpbnRvIGhvc3QgbmFtZXMuPC9wPgorCisgICAgICA8cD5hdmFoaS1yZXNvbHZlLWhvc3QtbmFtZSBpcyBlcXVpdmFsZW50IHRvIGF2YWhpLXJlc29sdmUgLS1uYW1lLjwvcD4KKworICAgICAgPHA+YXZhaGktcmVzb2x2ZS1hZGRyZXNzIGlzIGVxdWl2YWxlbnQgdG8gYXZhaGktcmVzb2x2ZSAtLWFkZHJlc3MuPC9wPgorCisJICA8b3B0aW9uPgorCQk8cD48b3B0Pi1uIHwgLS1uYW1lPC9vcHQ+PC9wPgorCQk8b3B0ZGVzYz48cD5UcmFuc2xhdGUgb25lIG9yIG1vcmUgZnVsbHkgcXVhbGlmaWVkIGhvc3QgbmFtZXMgaW50byBhZGRyZXNzZXMuPC9wPjwvb3B0ZGVzYz4KKwkgIDwvb3B0aW9uPgorCisJICA8b3B0aW9uPgorCQk8cD48b3B0Pi1hIHwgLS1hZGRyZXNzPC9vcHQ+PC9wPgorCQk8b3B0ZGVzYz48cD5UcmFuc2xhdGUgb25lIG9yIG1vcmUgYWRkcmVzc2VzIGludG8gZnVsbHkgcXVhbGlmaWVkIGhvc3QgbmFtZXMuPC9wPjwvb3B0ZGVzYz4KKwkgIDwvb3B0aW9uPgorCisgICAgICA8b3B0aW9uPgorICAgICAgICA8cD48b3B0Pi12IHwgLS12ZXJib3NlPC9vcHQ+PC9wPgorICAgICAgICA8b3B0ZGVzYz48cD5FbmFibGUgdmVyYm9zZSBtb2RlLjwvcD48L29wdGRlc2M+CisgICAgICA8L29wdGlvbj4KKworICAgICAgPG9wdGlvbj4KKyAgICAgICAgPHA+PG9wdD4tNjwvb3B0PjwvcD4KKyAgICAgICAgPG9wdGRlc2M+PHA+V2hlbiByZXNvbHZpbmcgYSBob3N0IG5hbWUsIGxvb2sgZm9yIElQdjYgYWRkcmVzc2VzIGV4Y2x1c2l2ZWx5LjwvcD48L29wdGRlc2M+CisgICAgICA8L29wdGlvbj4KKworICAgICAgPG9wdGlvbj4KKyAgICAgICAgPHA+PG9wdD4tNDwvb3B0PjwvcD4KKyAgICAgICAgPG9wdGRlc2M+PHA+V2hlbiByZXNvbHZpbmcgYSBob3N0IG5hbWUsIGxvb2sgZm9yIElQdjQgYWRkcmVzc2VzIGV4Y2x1c2l2ZWx5LjwvcD48L29wdGRlc2M+CisgICAgICA8L29wdGlvbj4KKworCSAgPG9wdGlvbj4KKwkJPHA+PG9wdD4taCB8IC0taGVscDwvb3B0PjwvcD4KKwkJPG9wdGRlc2M+PHA+U2hvdyBoZWxwLjwvcD48L29wdGRlc2M+CisJICA8L29wdGlvbj4KKworCisJICA8b3B0aW9uPgorCQk8cD48b3B0Pi1WIHwgLS12ZXJzaW9uPC9vcHQ+PC9wPgorCQk8b3B0ZGVzYz48cD5TaG93IHZlcnNpb24gaW5mb3JtYXRpb24uPC9wPjwvb3B0ZGVzYz4KKwkgIDwvb3B0aW9uPgorCisKKwk8L29wdGlvbnM+CisKKwk8c2VjdGlvbiBuYW1lPSJBdXRob3JzIj4KKwkgIDxwPlRoZSBBdmFoaSBEZXZlbG9wZXJzICZsdDtAUEFDS0FHRV9CVUdSRVBPUlRAJmd0OzsgQXZhaGkgaXMKKwkgIGF2YWlsYWJsZSBmcm9tIDx1cmwgaHJlZj0iQFBBQ0tBR0VfVVJMQCIvPjwvcD4KKwk8L3NlY3Rpb24+CisKKwk8c2VjdGlvbiBuYW1lPSJTZWUgYWxzbyI+CisJICA8cD4KKyAgICAgICAgPG1hbnJlZiBuYW1lPSJhdmFoaS1wdWJsaXNoLWFkZHJlc3MiIHNlY3Rpb249IjEiLz4sCisgICAgICAgIDxtYW5yZWYKKyAgICAgICAgbmFtZT0iYXZhaGktZGFlbW9uIiBzZWN0aW9uPSI4Ii8+CisJICA8L3A+CisJPC9zZWN0aW9uPgorCisJPHNlY3Rpb24gbmFtZT0iQ29tbWVudHMiPgorCSAgPHA+VGhpcyBtYW4gcGFnZSB3YXMgd3JpdHRlbiB1c2luZyA8bWFucmVmIG5hbWU9InhtbDJtYW4iIHNlY3Rpb249IjEiCisJCSAgaHJlZj0iaHR0cDovL21hc3FtYWlsLmN4L3htbDJtYW4vIi8+IGJ5IE9saXZlciBLdXJ0aC48L3A+CisJPC9zZWN0aW9uPgorCisgIDwvbWFucGFnZT4KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9tYW4vYXZhaGktc2V0LWhvc3QtbmFtZS4xIGIvYXZhaGktMC42LjMxL21hbi9hdmFoaS1zZXQtaG9zdC1uYW1lLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ0NDA4MwotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9tYW4vYXZhaGktc2V0LWhvc3QtbmFtZS4xCkBAIC0wLDAgKzEsMjQgQEAKKy5USCBhdmFoaS1zZXQtaG9zdC1uYW1lIDEgVXNlciBNYW51YWxzCisuU0ggTkFNRQorYXZhaGktc2V0LWhvc3QtbmFtZSBcLSBDaGFuZ2UgbUROUyBob3N0IG5hbWUKKy5TSCBTWU5PUFNJUworXGZCYXZhaGktc2V0LWhvc3QtbmFtZSBcZklob3N0LW5hbWVcZkIKK1xmMQorLlNIIERFU0NSSVBUSU9OCitTZXQgdGhlIG1ETlMgaG9zdCBuYW1lIG9mIGEgY3VycmVudGx5IHJ1bm5pbmcgQXZhaGkgZGFlbW9uLiBUaGUgZWZmZWN0IG9mIHRoaXMgb3BlcmF0aW9uIGlzIG5vdCBwZXJzaXN0ZW50IGFjcm9zcyBkYWVtb24gcmVzdGFydHMuIFRoaXMgb3BlcmF0aW9uIGlzIHVzdWFsbHkgcHJpdmlsZWdlZC4KKy5TSCBPUFRJT05TCisuVFAKK1xmQi12IHwgLS12ZXJib3NlXGYxCitFbmFibGUgdmVyYm9zZSBtb2RlLgorLlRQCitcZkItaCB8IC0taGVscFxmMQorU2hvdyBoZWxwLgorLlRQCitcZkItViB8IC0tdmVyc2lvblxmMQorU2hvdyB2ZXJzaW9uIGluZm9ybWF0aW9uLgorLlNIIEFVVEhPUlMKK1RoZSBBdmFoaSBEZXZlbG9wZXJzIDxhdmFoaSAoYXQpIGxpc3RzIChkb3QpIGZyZWVkZXNrdG9wIChkb3QpIG9yZz47IEF2YWhpIGlzIGF2YWlsYWJsZSBmcm9tIFxmQmh0dHA6Ly9hdmFoaS5vcmcvXGYxCisuU0ggU0VFIEFMU08KK1xmQmF2YWhpLWRhZW1vbig4KVxmMQorLlNIIENPTU1FTlRTCitUaGlzIG1hbiBwYWdlIHdhcyB3cml0dGVuIHVzaW5nIFxmQnhtbDJtYW4oMSlcZjEgYnkgT2xpdmVyIEt1cnRoLgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL21hbi9hdmFoaS1zZXQtaG9zdC1uYW1lLjEueG1sLmluIGIvYXZhaGktMC42LjMxL21hbi9hdmFoaS1zZXQtaG9zdC1uYW1lLjEueG1sLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwN2JiZTcKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvbWFuL2F2YWhpLXNldC1ob3N0LW5hbWUuMS54bWwuaW4KQEAgLTAsMCArMSw3MyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+PCEtLSotbnhtbC0qLS0+Cis8IURPQ1RZUEUgbWFucGFnZSBTWVNURU0gInhtbHRvbWFuLmR0ZCI+Cis8P3htbC1zdHlsZXNoZWV0IHR5cGU9InRleHQveHNsIiBocmVmPSJ4bWx0b21hbi54c2wiID8+CisKKzwhLS0KKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKy0tPgorCisgIDxtYW5wYWdlIG5hbWU9ImF2YWhpLXNldC1ob3N0LW5hbWUiIHNlY3Rpb249IjEiIGRlc2M9IkNoYW5nZSBtRE5TIGhvc3QgbmFtZSI+CisKKwk8c3lub3BzaXM+CisgICAgICA8Y21kPmF2YWhpLXNldC1ob3N0LW5hbWUgPGFyZz5ob3N0LW5hbWU8L2FyZz48L2NtZD4KKwk8L3N5bm9wc2lzPgorCisgICAgPGRlc2NyaXB0aW9uPgorICAgICAgPHA+U2V0IHRoZSBtRE5TIGhvc3QgbmFtZSBvZiBhIGN1cnJlbnRseSBydW5uaW5nIEF2YWhpCisgICAgICBkYWVtb24uIFRoZSBlZmZlY3Qgb2YgdGhpcyBvcGVyYXRpb24gaXMgbm90IHBlcnNpc3RlbnQgYWNyb3NzCisgICAgICBkYWVtb24gcmVzdGFydHMuIFRoaXMgb3BlcmF0aW9uIGlzIHVzdWFsbHkgcHJpdmlsZWdlZC48L3A+CisJPC9kZXNjcmlwdGlvbj4KKworCTxvcHRpb25zPgorCisgICAgICA8b3B0aW9uPgorICAgICAgICA8cD48b3B0Pi12IHwgLS12ZXJib3NlPC9vcHQ+PC9wPgorICAgICAgICA8b3B0ZGVzYz48cD5FbmFibGUgdmVyYm9zZSBtb2RlLjwvcD48L29wdGRlc2M+CisgICAgICA8L29wdGlvbj4KKworCSAgPG9wdGlvbj4KKwkJPHA+PG9wdD4taCB8IC0taGVscDwvb3B0PjwvcD4KKwkJPG9wdGRlc2M+PHA+U2hvdyBoZWxwLjwvcD48L29wdGRlc2M+CisJICA8L29wdGlvbj4KKworCisJICA8b3B0aW9uPgorCQk8cD48b3B0Pi1WIHwgLS12ZXJzaW9uPC9vcHQ+PC9wPgorCQk8b3B0ZGVzYz48cD5TaG93IHZlcnNpb24gaW5mb3JtYXRpb24uPC9wPjwvb3B0ZGVzYz4KKwkgIDwvb3B0aW9uPgorCisKKwk8L29wdGlvbnM+CisKKwk8c2VjdGlvbiBuYW1lPSJBdXRob3JzIj4KKwkgIDxwPlRoZSBBdmFoaSBEZXZlbG9wZXJzICZsdDtAUEFDS0FHRV9CVUdSRVBPUlRAJmd0OzsgQXZhaGkgaXMKKwkgIGF2YWlsYWJsZSBmcm9tIDx1cmwgaHJlZj0iQFBBQ0tBR0VfVVJMQCIvPjwvcD4KKwk8L3NlY3Rpb24+CisKKwk8c2VjdGlvbiBuYW1lPSJTZWUgYWxzbyI+CisJICA8cD4KKyAgICAgICAgPG1hbnJlZiBuYW1lPSJhdmFoaS1kYWVtb24iIHNlY3Rpb249IjgiLz4KKwkgIDwvcD4KKwk8L3NlY3Rpb24+CisKKwk8c2VjdGlvbiBuYW1lPSJDb21tZW50cyI+CisJICA8cD5UaGlzIG1hbiBwYWdlIHdhcyB3cml0dGVuIHVzaW5nIDxtYW5yZWYgbmFtZT0ieG1sMm1hbiIgc2VjdGlvbj0iMSIKKwkJICBocmVmPSJodHRwOi8vbWFzcW1haWwuY3gveG1sMm1hbi8iLz4gYnkgT2xpdmVyIEt1cnRoLjwvcD4KKwk8L3NlY3Rpb24+CisKKyAgPC9tYW5wYWdlPgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL21hbi9hdmFoaS5ob3N0cy41IGIvYXZhaGktMC42LjMxL21hbi9hdmFoaS5ob3N0cy41Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMjcwNzcKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvbWFuL2F2YWhpLmhvc3RzLjUKQEAgLTAsMCArMSwxNiBAQAorLlRIIGF2YWhpLmhvc3RzIDUgVXNlciBNYW51YWxzCisuU0ggTkFNRQorYXZhaGkuaG9zdHMgXC0gYXZhaGktZGFlbW9uIHN0YXRpYyBob3N0IG5hbWUgZmlsZQorLlNIIFNZTk9QU0lTCitcZkIvaG9tZS9sZW5uYXJ0L3RtcC9hdmFoaS9ldGMvYXZhaGkvaG9zdHMKK1xmMQorLlNIIERFU0NSSVBUSU9OCitcZkkvaG9tZS9sZW5uYXJ0L3RtcC9hdmFoaS9ldGMvYXZhaGkvaG9zdHNcZjEgaXMgYSBmaWxlIHdoaWNoIG1heSBiZSB1c2VkIHRvIGRlZmluZSBzdGF0aWMgaG9zdCBuYW1lIHRvIElQIGFkZHJlc3MgbWFwcGluZ3MgZm9yIG11bHRpY2FzdCBETlMuIFRoaXMgaXMgZXNwZWNpYWxseSB1c2VmdWwgd2hlbiBwdWJsaXNoaW5nIEROUy1TRCBzZXJ2aWNlcyBvbiBiZWhhbGYgb2Ygb3RoZXIgaG9zdHMuIFNlZSBcZkJhdmFoaS5zZXJ2aWNlKDUpXGYxIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCitUaGUgZmlsZSBmb3JtYXQgaXMgc2ltaWxhciB0byB0aGUgb25lIG9mIFxmSS9ldGMvaG9zdHNcZjE6IG9uIGVhY2ggbGluZSBhbiBJUCBhZGRyZXNzIGFuZCB0aGUgY29ycmVzcG9uZGluZyBob3N0IG5hbWUuIFRoZSBob3N0IG5hbWVzIHNob3VsZCBiZSBpbiBGUUROIGZvcm0sIGkuZS4gd2l0aCBhcHBlbmRlZCAubG9jYWwgc3VmZml4LgorLlNIIEFVVEhPUlMKK1RoZSBBdmFoaSBEZXZlbG9wZXJzIDxhdmFoaSAoYXQpIGxpc3RzIChkb3QpIGZyZWVkZXNrdG9wIChkb3QpIG9yZz47IEF2YWhpIGlzIGF2YWlsYWJsZSBmcm9tIFxmQmh0dHA6Ly9hdmFoaS5vcmcvXGYxCisuU0ggU0VFIEFMU08KK1xmQmF2YWhpLWRhZW1vbig4KVxmMSwgXGZCYXZhaGkuc2VydmljZSg1KVxmMQorLlNIIENPTU1FTlRTCitUaGlzIG1hbiBwYWdlIHdhcyB3cml0dGVuIHVzaW5nIFxmQnhtbDJtYW4oMSlcZjEgYnkgT2xpdmVyIEt1cnRoLgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL21hbi9hdmFoaS5ob3N0cy41LnhtbC5pbiBiL2F2YWhpLTAuNi4zMS9tYW4vYXZhaGkuaG9zdHMuNS54bWwuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZmMjg0OAotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9tYW4vYXZhaGkuaG9zdHMuNS54bWwuaW4KQEAgLTAsMCArMSw2MCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+PCEtLSotbnhtbC0qLS0+Cis8IURPQ1RZUEUgbWFucGFnZSBTWVNURU0gInhtbHRvbWFuLmR0ZCI+Cis8P3htbC1zdHlsZXNoZWV0IHR5cGU9InRleHQveHNsIiBocmVmPSJ4bWx0b21hbi54c2wiID8+CisKKzwhLS0KKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKy0tPgorCisgIDxtYW5wYWdlIG5hbWU9ImF2YWhpLmhvc3RzIiBzZWN0aW9uPSI1IiBkZXNjPSJhdmFoaS1kYWVtb24gc3RhdGljIGhvc3QgbmFtZSBmaWxlIj4KKworCTxzeW5vcHNpcz4KKyAgICAgIDxjbWQ+QHBrZ3N5c2NvbmZkaXJAL2hvc3RzPC9jbWQ+CisJPC9zeW5vcHNpcz4KKworICAgIDxkZXNjcmlwdGlvbj4KKyAgICAgIDxwPjxmaWxlPkBwa2dzeXNjb25mZGlyQC9ob3N0czwvZmlsZT4gaXMgYSBmaWxlIHdoaWNoIG1heSBiZSB1c2VkCisgICAgICB0byBkZWZpbmUgc3RhdGljIGhvc3QgbmFtZSB0byBJUCBhZGRyZXNzIG1hcHBpbmdzIGZvciBtdWx0aWNhc3QKKyAgICAgIEROUy4gVGhpcyBpcyBlc3BlY2lhbGx5IHVzZWZ1bCB3aGVuIHB1Ymxpc2hpbmcgRE5TLVNEIHNlcnZpY2VzCisgICAgICBvbiBiZWhhbGYgb2Ygb3RoZXIgaG9zdHMuIFNlZSA8bWFucmVmIG5hbWU9ImF2YWhpLnNlcnZpY2UiCisgICAgICBzZWN0aW9uPSI1Ii8+IGZvciBtb3JlIGluZm9ybWF0aW9uLjwvcD4KKworICAgICAgPHA+VGhlIGZpbGUgZm9ybWF0IGlzIHNpbWlsYXIgdG8gdGhlIG9uZSBvZgorICAgICAgPGZpbGU+L2V0Yy9ob3N0czwvZmlsZT46IG9uIGVhY2ggbGluZSBhbiBJUCBhZGRyZXNzIGFuZCB0aGUKKyAgICAgIGNvcnJlc3BvbmRpbmcgaG9zdCBuYW1lLiBUaGUgaG9zdCBuYW1lcyBzaG91bGQgYmUgaW4gRlFETiBmb3JtLAorICAgICAgaS5lLiB3aXRoIGFwcGVuZGVkIC5sb2NhbCBzdWZmaXguPC9wPgorICAgIDwvZGVzY3JpcHRpb24+CisKKwk8c2VjdGlvbiBuYW1lPSJBdXRob3JzIj4KKwkgIDxwPlRoZSBBdmFoaSBEZXZlbG9wZXJzICZsdDtAUEFDS0FHRV9CVUdSRVBPUlRAJmd0OzsgQXZhaGkgaXMKKwkgIGF2YWlsYWJsZSBmcm9tIDx1cmwgaHJlZj0iQFBBQ0tBR0VfVVJMQCIvPjwvcD4KKwk8L3NlY3Rpb24+CisKKwk8c2VjdGlvbiBuYW1lPSJTZWUgYWxzbyI+CisJICA8cD4KKyAgICAgICAgPG1hbnJlZiBuYW1lPSJhdmFoaS1kYWVtb24iIHNlY3Rpb249IjgiLz4sIDxtYW5yZWYgbmFtZT0iYXZhaGkuc2VydmljZSIgc2VjdGlvbj0iNSIvPgorCSAgPC9wPgorCTwvc2VjdGlvbj4KKworCTxzZWN0aW9uIG5hbWU9IkNvbW1lbnRzIj4KKwkgIDxwPlRoaXMgbWFuIHBhZ2Ugd2FzIHdyaXR0ZW4gdXNpbmcgPG1hbnJlZiBuYW1lPSJ4bWwybWFuIgorCSAgc2VjdGlvbj0iMSIgaHJlZj0iaHR0cDovL21hc3FtYWlsLmN4L3htbDJtYW4vIi8+IGJ5IE9saXZlcgorCSAgS3VydGguPC9wPgorCTwvc2VjdGlvbj4KKworICA8L21hbnBhZ2U+CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvbWFuL2F2YWhpLnNlcnZpY2UuNSBiL2F2YWhpLTAuNi4zMS9tYW4vYXZhaGkuc2VydmljZS41Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlZjgzMzMKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvbWFuL2F2YWhpLnNlcnZpY2UuNQpAQCAtMCwwICsxLDMzIEBACisuVEggYXZhaGkuc2VydmljZSA1IFVzZXIgTWFudWFscworLlNIIE5BTUUKK2F2YWhpLnNlcnZpY2UgXC0gYXZhaGktZGFlbW9uIHN0YXRpYyBzZXJ2aWNlIGZpbGUKKy5TSCBTWU5PUFNJUworXGZCL2hvbWUvbGVubmFydC90bXAvYXZhaGkvZXRjL2F2YWhpL3NlcnZpY2VzLyouc2VydmljZQorXGYxCisuU0ggREVTQ1JJUFRJT04KK1xmSS9ob21lL2xlbm5hcnQvdG1wL2F2YWhpL2V0Yy9hdmFoaS9zZXJ2aWNlcy8qLnNlcnZpY2VcZjEgYXJlIFhNTCBmcmFnbWVudHMgY29udGFpbmluZyBzdGF0aWMgRE5TLVNEIHNlcnZpY2UgZGF0YS4gRXZlcnkgc2VydmljZSBmaWxlIGNhbiBjb250YWluIG11bHRpcGxlIHNlcnZpY2UgZGVmaW5pdGlvbnMgd2hpY2ggc2hhcmUgdGhlIHNhbWUgbmFtZS4gVGhpcyBpcyB1c2VmdWwgZm9yIHB1Ymxpc2hpbmcgc2VydmljZSBkYXRhIGZvciBzZXJ2aWNlcyB3aGljaCBpbXBsZW1lbnQgbXVsdGlwbGUgcHJvdG9jb2xzLiAoaS5lLiBhIHByaW50ZXIgaW1wbGVtZW50aW5nIF9pcHAuX3RjcCBhbmQgX3ByaW50ZXIuX3RjcCkKKy5TSCBYTUwgVEFHUworLlRQCitcZkI8c2VydmljZS1ncm91cD5cZjEgVGhlIGRvY3VtZW50IHRhZyBvZiBhdmFoaSBzZXJ2aWNlIGZpbGVzLiBTaG91bGQgY29udGFpbiBvbmUgXGZCPG5hbWU+XGYxIGFuZCBvbmUgb3IgbW9yZSBcZkI8c2VydmljZT5cZjEgZWxlbWVudHMuCisuVFAKK1xmQjxuYW1lIHJlcGxhY2Utd2lsZGNhcmRzPSJ5ZXN8bm8iPlxmMSBUaGUgc2VydmljZSBuYW1lLiBJZiBcZkJyZXBsYWNlLXdpbGRjYXJkc1xmMSBpcyAieWVzIiwgYW55IG9jY3VyZW5jZSBvZiB0aGUgc3RyaW5nICIlaCIgd2lsbCBiZSByZXBsYWNlZCBieSB0aGUgbG9jYWwgaG9zdCBuYW1lLiBUaGlzIGNhbiBiZSB1c2VkIGZvciBzZXJ2aWNlIG5hbWVzIGxpa2UgIlJlbW90ZSBUZXJtaW5hbCBvbiAlaCIuIElmIFxmQnJlcGxhY2Utd2lsZGNhcmRzXGYxIGlzIG5vdCBzcGVjaWZpZWQsIGRlZmF1bHRzIHRvICJubyIuCisuVFAKK1xmQjxzZXJ2aWNlIHByb3RvY29sPSJpcHY0fGlwdjZ8YW55Ij5cZjEgQ29udGFpbnMgdGhlIHNlcnZpY2UgaW5mb3JtYXRpb24gZm9yIGV4YWN0bHkgb25lIHNlcnZpY2UgdHlwZS4gU2hvdWxkIGNvbnRhaW4gb25lIFxmQjx0eXBlPlxmMSBhbmQgb25lIFxmQjxwb3J0PlxmMSBlbGVtZW50LiBPcHRpb25hbGx5IGl0IG1heSBjb250YWluIG9uZSBcZkI8ZG9tYWluLW5hbWU+XGYxLCBvbmUgXGZCPGhvc3QtbmFtZT5cZjEsIGFueSBudW1iZXIgb2YgXGZCPHN1YnR5cGU+XGYxIGFuZCBhbnkgbnVtYmVyIG9mIFxmQjx0eHQtcmVjb3JkPlxmMSBlbGVtZW50cy4gVGhlIGF0dHJpYnV0ZSBcZkJwcm90b2NvbFxmMSBzcGVjaWZpZXMgdGhlIHByb3RvY29sIHRvIGFkdmVydGlzZSB0aGUgc2VydmljZSBvbi4gSWYgXGZCYW55XGYxIGlzIHVzZWQgKHdoaWNoIGlzIHRoZSBkZWZhdWx0KSwgdGhlIHNlcnZpY2Ugd2lsbCBiZSBhZHZlcnRpc2VkIG9uIGJvdGggSVB2NCBhbmQgSVB2Ni4KKy5UUAorXGZCPHR5cGU+XGYxIENvbnRhaW5zIHRoZSBETlMtU0Qgc2VydmljZSB0eXBlIGZvciB0aGlzIHNlcnZpY2UuIGUuZy4gIl9odHRwLl90Y3AiLgorLlRQCitcZkI8c3VidHlwZT5cZjEgQ29udGFpbnMgYW4gYWRkaXRpb25hbCBETlMtU0Qgc2VydmljZSBzdWJ0eXBlIGZvciB0aGlzIHNlcnZpY2UuIGUuZy4gIl9hbm9uLl9zdWIuX2Z0cC5fdGNwIi4KKy5UUAorXGZCPGRvbWFpbi1uYW1lPlxmMSBUaGUgZG9tYWluIG5hbWUgdGhpcyBzZXJ2aWNlIHNob3VsZCBiZSByZWdpc3RlcmVkLiBJZiBvbWl0ZWQgZGVmYXVsdHMgdG8gdGhlIGRlZmF1bHQgZG9tYWluIG9mIHRoZSBhdmFoaSBkYWVtb24uIChwcm9iYWJseSAubG9jYWwpCisuVFAKK1xmQjxob3N0LW5hbWU+XGYxIFRoZSBob3N0IG5hbWUgb2YgdGhlIGhvc3QgdGhhdCBwcm92aWRlcyB0aGlzIHNlcnZpY2UuIFRoaXMgc2hvdWxkIGJlIGEgaG9zdCB0aGF0IGlzIHJlc29sdmFibGUgYnkgbXVsdGljYXN0IG9yIHVuaWNhc3QgRE5TLiBQbGVhc2Ugbm90ZSB0aGF0IHlvdSBuZWVkIHRvIHNwZWNpZnkgYSBmdWxseS1xdWFsaWZpZWQgZG9tYWluIG5hbWUgKEZRRE4pIGhlcmUsIGkuZS4gLmxvY2FsIGlzIG5vdCBhcHBlbmRlZCBpbXBsaWNpdGx5ISBUaGUgaG9zdCBuYW1lIGRvZXNuJ3QgbmVlZCB0byBiZSBwYXJ0IG9mIHRoZSBkb21haW4gc3BlY2lmaWVkIGluIFxmQjxkb21haW4tbmFtZT5cZjEuIFNlZSBcZkJhdmFoaS5ob3N0cyg1KVxmMSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBob3cgdG8gcHVibGlzaCBhZGRpdGlvbmFsIGhvc3QgbmFtZSBtYXBwaW5ncy4KKy5UUAorXGZCPHBvcnQ+XGYxIFRoZSBJUCBwb3J0IG51bWJlciB0aGUgc2VydmljZSBsaXN0ZW5zIG9uLgorLlRQCitcZkI8dHh0LXJlY29yZD5cZjEgRE5TLVNEIFRYVCByZWNvcmQgZGF0YS4KKy5TSCBBVVRIT1JTCitUaGUgQXZhaGkgRGV2ZWxvcGVycyA8YXZhaGkgKGF0KSBsaXN0cyAoZG90KSBmcmVlZGVza3RvcCAoZG90KSBvcmc+OyBBdmFoaSBpcyBhdmFpbGFibGUgZnJvbSBcZkJodHRwOi8vYXZhaGkub3JnL1xmMQorLlNIIFNFRSBBTFNPCitcZkJhdmFoaS1kYWVtb24oOClcZjEsIFxmQmF2YWhpLmhvc3RzKDUpXGYxCisuU0ggQ09NTUVOVFMKK1RoaXMgbWFuIHBhZ2Ugd2FzIHdyaXR0ZW4gdXNpbmcgXGZCeG1sMm1hbigxKVxmMSBieSBPbGl2ZXIgS3VydGguCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvbWFuL2F2YWhpLnNlcnZpY2UuNS54bWwuaW4gYi9hdmFoaS0wLjYuMzEvbWFuL2F2YWhpLnNlcnZpY2UuNS54bWwuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU5ODYxNwotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9tYW4vYXZhaGkuc2VydmljZS41LnhtbC5pbgpAQCAtMCwwICsxLDEyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+PCEtLSotbnhtbC0qLS0+Cis8IURPQ1RZUEUgbWFucGFnZSBTWVNURU0gInhtbHRvbWFuLmR0ZCI+Cis8P3htbC1zdHlsZXNoZWV0IHR5cGU9InRleHQveHNsIiBocmVmPSJ4bWx0b21hbi54c2wiID8+CisKKzwhLS0KKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKy0tPgorCisgIDxtYW5wYWdlIG5hbWU9ImF2YWhpLnNlcnZpY2UiIHNlY3Rpb249IjUiIGRlc2M9ImF2YWhpLWRhZW1vbiBzdGF0aWMgc2VydmljZSBmaWxlIj4KKworCTxzeW5vcHNpcz4KKyAgICAgIDxjbWQ+QHNlcnZpY2VkaXJALyouc2VydmljZTwvY21kPgorCTwvc3lub3BzaXM+CisKKyAgICA8ZGVzY3JpcHRpb24+IDxwPjxmaWxlPkBzZXJ2aWNlZGlyQC8qLnNlcnZpY2U8L2ZpbGU+IGFyZSBYTUwKKyAgICAgIGZyYWdtZW50cyBjb250YWluaW5nIHN0YXRpYyBETlMtU0Qgc2VydmljZSBkYXRhLiBFdmVyeSBzZXJ2aWNlCisgICAgICBmaWxlIGNhbiBjb250YWluIG11bHRpcGxlIHNlcnZpY2UgZGVmaW5pdGlvbnMgd2hpY2ggc2hhcmUgdGhlCisgICAgICBzYW1lIG5hbWUuIFRoaXMgaXMgdXNlZnVsIGZvciBwdWJsaXNoaW5nIHNlcnZpY2UgZGF0YSBmb3IKKyAgICAgIHNlcnZpY2VzIHdoaWNoIGltcGxlbWVudCBtdWx0aXBsZSBwcm90b2NvbHMuIChpLmUuIGEgcHJpbnRlcgorICAgICAgaW1wbGVtZW50aW5nIF9pcHAuX3RjcCBhbmQgX3ByaW50ZXIuX3RjcCk8L3A+IDwvZGVzY3JpcHRpb24+CisKKwk8c2VjdGlvbiBuYW1lPSJYTUwgVGFncyI+CisKKyAgICAgIDxvcHRpb24+CisgICAgICAgIDxwPjxvcHQ+Jmx0O3NlcnZpY2UtZ3JvdXAmZ3Q7PC9vcHQ+IFRoZSBkb2N1bWVudCB0YWcgb2YgYXZhaGkKKyAgICAgICAgc2VydmljZSBmaWxlcy4gU2hvdWxkIGNvbnRhaW4gb25lIDxvcHQ+Jmx0O25hbWUmZ3Q7PC9vcHQ+IGFuZCBvbmUgb3IgbW9yZQorICAgICAgICA8b3B0PiZsdDtzZXJ2aWNlJmd0Ozwvb3B0PiBlbGVtZW50cy48L3A+CisgICAgICA8L29wdGlvbj4KKworICAgICAgPG9wdGlvbj4KKyAgICAgICAgPHA+PG9wdD4mbHQ7bmFtZSByZXBsYWNlLXdpbGRjYXJkcz0ieWVzfG5vIiZndDs8L29wdD4gVGhlCisgICAgICAgIHNlcnZpY2UgbmFtZS4gSWYgPG9wdD5yZXBsYWNlLXdpbGRjYXJkczwvb3B0PiBpcyAieWVzIiwgYW55CisgICAgICAgIG9jY3VyZW5jZSBvZiB0aGUgc3RyaW5nICIlaCIgd2lsbCBiZSByZXBsYWNlZCBieSB0aGUgbG9jYWwKKyAgICAgICAgaG9zdCBuYW1lLiBUaGlzIGNhbiBiZSB1c2VkIGZvciBzZXJ2aWNlIG5hbWVzIGxpa2UgIlJlbW90ZQorICAgICAgICBUZXJtaW5hbCBvbiAlaCIuIElmIDxvcHQ+cmVwbGFjZS13aWxkY2FyZHM8L29wdD4gaXMgbm90CisgICAgICAgIHNwZWNpZmllZCwgZGVmYXVsdHMgdG8gIm5vIi48L3A+CisgICAgICA8L29wdGlvbj4KKworICAgICAgPG9wdGlvbj4KKyAgICAgICAgPHA+PG9wdD4mbHQ7c2VydmljZSBwcm90b2NvbD0iaXB2NHxpcHY2fGFueSImZ3Q7PC9vcHQ+CisgICAgICAgIENvbnRhaW5zIHRoZSBzZXJ2aWNlIGluZm9ybWF0aW9uIGZvciBleGFjdGx5IG9uZSBzZXJ2aWNlCisgICAgICAgIHR5cGUuIFNob3VsZCBjb250YWluIG9uZSA8b3B0PiZsdDt0eXBlJmd0Ozwvb3B0PiBhbmQgb25lCisgICAgICAgIDxvcHQ+Jmx0O3BvcnQmZ3Q7PC9vcHQ+IGVsZW1lbnQuIE9wdGlvbmFsbHkgaXQgbWF5IGNvbnRhaW4gb25lCisgICAgICAgIDxvcHQ+Jmx0O2RvbWFpbi1uYW1lJmd0Ozwvb3B0Piwgb25lCisgICAgICAgIDxvcHQ+Jmx0O2hvc3QtbmFtZSZndDs8L29wdD4sIGFueSBudW1iZXIgb2YKKyAgICAgICAgPG9wdD4mbHQ7c3VidHlwZSZndDs8L29wdD4gYW5kIGFueSBudW1iZXIgb2YKKyAgICAgICAgPG9wdD4mbHQ7dHh0LXJlY29yZCZndDs8L29wdD4gZWxlbWVudHMuIFRoZSBhdHRyaWJ1dGUKKyAgICAgICAgPG9wdD5wcm90b2NvbDwvb3B0PiBzcGVjaWZpZXMgdGhlIHByb3RvY29sIHRvIGFkdmVydGlzZSB0aGUKKyAgICAgICAgc2VydmljZSBvbi4gSWYgPG9wdD5hbnk8L29wdD4gaXMgdXNlZCAod2hpY2ggaXMgdGhlIGRlZmF1bHQpLAorICAgICAgICB0aGUgc2VydmljZSB3aWxsIGJlIGFkdmVydGlzZWQgb24gYm90aCBJUHY0IGFuZCBJUHY2LjwvcD4KKyAgICAgIDwvb3B0aW9uPgorCisgICAgICA8b3B0aW9uPgorICAgICAgICA8cD48b3B0PiZsdDt0eXBlJmd0Ozwvb3B0PiBDb250YWlucyB0aGUgRE5TLVNEIHNlcnZpY2UgdHlwZSBmb3IgdGhpcyBzZXJ2aWNlLiBlLmcuICJfaHR0cC5fdGNwIi48L3A+CisgICAgICA8L29wdGlvbj4KKworICAgICAgPG9wdGlvbj4KKyAgICAgICAgPHA+PG9wdD4mbHQ7c3VidHlwZSZndDs8L29wdD4gQ29udGFpbnMgYW4gYWRkaXRpb25hbCBETlMtU0Qgc2VydmljZSBzdWJ0eXBlIGZvciB0aGlzIHNlcnZpY2UuIGUuZy4gIl9hbm9uLl9zdWIuX2Z0cC5fdGNwIi48L3A+CisgICAgICA8L29wdGlvbj4KKworICAgICAgPG9wdGlvbj4KKyAgICAgICAgPHA+PG9wdD4mbHQ7ZG9tYWluLW5hbWUmZ3Q7PC9vcHQ+IFRoZSBkb21haW4gbmFtZSB0aGlzIHNlcnZpY2UKKyAgICAgICAgc2hvdWxkIGJlIHJlZ2lzdGVyZWQuIElmIG9taXRlZCBkZWZhdWx0cyB0byB0aGUgZGVmYXVsdCBkb21haW4KKyAgICAgICAgb2YgdGhlIGF2YWhpIGRhZW1vbi4gKHByb2JhYmx5IC5sb2NhbCk8L3A+CisgICAgICA8L29wdGlvbj4KKworICAgICAgPG9wdGlvbj4KKyAgICAgICAgPHA+PG9wdD4mbHQ7aG9zdC1uYW1lJmd0Ozwvb3B0PiBUaGUgaG9zdCBuYW1lIG9mIHRoZSBob3N0IHRoYXQKKyAgICAgICAgcHJvdmlkZXMgdGhpcyBzZXJ2aWNlLiBUaGlzIHNob3VsZCBiZSBhIGhvc3QgdGhhdCBpcworICAgICAgICByZXNvbHZhYmxlIGJ5IG11bHRpY2FzdCBvciB1bmljYXN0IEROUy4gUGxlYXNlIG5vdGUgdGhhdCB5b3UKKyAgICAgICAgbmVlZCB0byBzcGVjaWZ5IGEgZnVsbHktcXVhbGlmaWVkIGRvbWFpbiBuYW1lIChGUUROKSBoZXJlLAorICAgICAgICBpLmUuIC5sb2NhbCBpcyBub3QgYXBwZW5kZWQgaW1wbGljaXRseSEgVGhlIGhvc3QgbmFtZSBkb2Vzbid0CisgICAgICAgIG5lZWQgdG8gYmUgcGFydCBvZiB0aGUgZG9tYWluIHNwZWNpZmllZCBpbgorICAgICAgICA8b3B0PiZsdDtkb21haW4tbmFtZSZndDs8L29wdD4uIFNlZSA8bWFucmVmIG5hbWU9ImF2YWhpLmhvc3RzIgorICAgICAgICBzZWN0aW9uPSI1Ii8+IGZvciBtb3JlIGluZm9ybWF0aW9uIGhvdyB0byBwdWJsaXNoIGFkZGl0aW9uYWwKKyAgICAgICAgaG9zdCBuYW1lIG1hcHBpbmdzLjwvcD4KKyAgICAgIDwvb3B0aW9uPgorCisgICAgICA8b3B0aW9uPgorICAgICAgICA8cD48b3B0PiZsdDtwb3J0Jmd0Ozwvb3B0PiBUaGUgSVAgcG9ydCBudW1iZXIgdGhlIHNlcnZpY2UgbGlzdGVucyBvbi48L3A+CisgICAgICA8L29wdGlvbj4KKworICAgICAgPG9wdGlvbj4KKyAgICAgICAgPHA+PG9wdD4mbHQ7dHh0LXJlY29yZCZndDs8L29wdD4gRE5TLVNEIFRYVCByZWNvcmQgZGF0YS48L3A+CisgICAgICA8L29wdGlvbj4KKworCisJPC9zZWN0aW9uPgorCisJPHNlY3Rpb24gbmFtZT0iQXV0aG9ycyI+CisJICA8cD5UaGUgQXZhaGkgRGV2ZWxvcGVycyAmbHQ7QFBBQ0tBR0VfQlVHUkVQT1JUQCZndDs7IEF2YWhpIGlzCisJICBhdmFpbGFibGUgZnJvbSA8dXJsIGhyZWY9IkBQQUNLQUdFX1VSTEAiLz48L3A+CisJPC9zZWN0aW9uPgorCisJPHNlY3Rpb24gbmFtZT0iU2VlIGFsc28iPgorCSAgPHA+CisgICAgICAgIDxtYW5yZWYgbmFtZT0iYXZhaGktZGFlbW9uIiBzZWN0aW9uPSI4Ii8+LCA8bWFucmVmIG5hbWU9ImF2YWhpLmhvc3RzIiBzZWN0aW9uPSI1Ii8+CisJICA8L3A+CisJPC9zZWN0aW9uPgorCisJPHNlY3Rpb24gbmFtZT0iQ29tbWVudHMiPgorCSAgPHA+VGhpcyBtYW4gcGFnZSB3YXMgd3JpdHRlbiB1c2luZyA8bWFucmVmIG5hbWU9InhtbDJtYW4iCisJICBzZWN0aW9uPSIxIiBocmVmPSJodHRwOi8vbWFzcW1haWwuY3gveG1sMm1hbi8iLz4gYnkgT2xpdmVyCisJICBLdXJ0aC48L3A+CisJPC9zZWN0aW9uPgorCisgIDwvbWFucGFnZT4KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9tYW4vYnNzaC4xIGIvYXZhaGktMC42LjMxL21hbi9ic3NoLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTEzNTU0ZQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9tYW4vYnNzaC4xCkBAIC0wLDAgKzEsMzYgQEAKKy5USCBic3NoL2J2bmMvYnNoZWxsIDEgVXNlciBNYW51YWxzCisuU0ggTkFNRQorYnNzaC9idm5jL2JzaGVsbCBcLSBCcm93c2UgZm9yIFNTSC9WTkMgc2VydmVycyBvbiB0aGUgbG9jYWwgbmV0d29yaworLlNIIFNZTk9QU0lTCitcZkJic3NoCisKK2J2bmMKKworYnNoZWxsCitcZjEKKy5TSCBERVNDUklQVElPTgorYnNzaC9idm5jL2JzaGVsbCBicm93c2VzIGZvciBTU0gvVk5DIHNlcnZlcnMgb24gdGhlIGxvY2FsIG5ldHdvcmssIHNob3dzIHRoZW0gaW4gYSBHVUkgZm9yIHRoZSB1c2VyIHRvIHNlbGVjdCBvbmUgYW5kIGZpbmFsbHkgY2FsbHMgc3NoL3ZuY3ZpZXdlciBhZnRlciBhIHNlbGVjdGlvbiB3YXMgbWFkZS4KKworSWYgdGhlIGJpbmFyeSBpcyBjYWxsZWQgYXMgYnNzaCBvbmx5IHNzaCBzZXJ2ZXJzIHdpbGwgYmUgc2hvd24uIElmIHRoZSBiaW5hcnkgaXMgY2FsbGVkIGFzIGJ2bmMgb25seSBWTkMgc2VydmVycyB3aWxsIGJlIHNob3duLiBJZiB0aGUgYmluYXJ5IGlzIGNhbGxlZCBhcyBic2hlbGwgYm90aCBWTkMgYW5kIFNTSCBzZXJ2ZXJzIGFyZSBzaG93bi4KKy5TSCBPUFRJT05TCisuVFAKK1xmQi1zIHwgLS1zc2hcZjEKK0Jyb3dzZSBmb3IgU1NIIHNlcnZlcnMgKGFuZCBvbmx5IFNTSCBzZXJ2ZXJzKSByZWdhcmRsZXNzIHVuZGVyIHdoaWNoIG5hbWUgdGhlIGJpbmFyeSBpcyBjYWxsZWQuCisuVFAKK1xmQi12IHwgLS12bmNcZjEKK0Jyb3dzZSBmb3IgVk5DIHNlcnZlcnMgKGFuZCBvbmx5IFZOQyBzZXJ2ZXJzKSByZWdhcmRsZXNzIHVuZGVyIHdoaWNoIG5hbWUgdGhlIGJpbmFyeSBpcyBjYWxsZWQuCisuVFAKK1xmQi1TIHwgLS1zaGVsbFxmMQorQnJvd3NlIGZvciBib3RoIFZOQyBhbmQgU1NIIHNlcnZlcnMgcmVnYXJkbGVzcyB1bmRlciB3aGljaCBuYW1lIHRoZSBiaW5hcnkgaXMgY2FsbGVkLgorLlRQCitcZkItZCB8IC0tZG9tYWluPVxmMSBcZklET01BSU5cZjEKK0Jyb3dzZSBpbiB0aGUgc3BlY2lmaWVkIGRvbWFpbi4gSWYgb21pdHRlZCBic3NoL2J2bmMvYnNoZWxsIHdpbGwgYnJvd3NlIGluIHRoZSBkZWZhdWx0IGJyb3dzaW5nIGRvbWFpbiAodXN1YWxseSAubG9jYWwpCisuVFAKK1xmQi1oIHwgLS1oZWxwXGYxCitTaG93IGhlbHAuCisuU0ggQVVUSE9SUworVGhlIEF2YWhpIERldmVsb3BlcnMgPGF2YWhpIChhdCkgbGlzdHMgKGRvdCkgZnJlZWRlc2t0b3AgKGRvdCkgb3JnPjsgQXZhaGkgaXMgYXZhaWxhYmxlIGZyb20gXGZCaHR0cDovL2F2YWhpLm9yZy9cZjEKKy5TSCBTRUUgQUxTTworXGZCYXZhaGktYnJvd3NlKDEpXGYxLCBcZkJzc2goMSlcZjEsIFxmQnZuY3ZpZXdlcigxKVxmMQorLlNIIENPTU1FTlRTCitUaGlzIG1hbiBwYWdlIHdhcyB3cml0dGVuIHVzaW5nIFxmQnhtbDJtYW4oMSlcZjEgYnkgT2xpdmVyIEt1cnRoLgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL21hbi9ic3NoLjEueG1sLmluIGIvYXZhaGktMC42LjMxL21hbi9ic3NoLjEueG1sLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkZjY0MGQKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvbWFuL2Jzc2guMS54bWwuaW4KQEAgLTAsMCArMSw4OCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+PCEtLSotbnhtbC0qLS0+Cis8IURPQ1RZUEUgbWFucGFnZSBTWVNURU0gInhtbHRvbWFuLmR0ZCI+Cis8P3htbC1zdHlsZXNoZWV0IHR5cGU9InRleHQveHNsIiBocmVmPSJ4bWx0b21hbi54c2wiID8+CisKKzwhLS0KKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisgIFVTQS4KKy0tPgorCisgIDxtYW5wYWdlIG5hbWU9ImJzc2gvYnZuYy9ic2hlbGwiIHNlY3Rpb249IjEiIGRlc2M9IkJyb3dzZSBmb3IgU1NIL1ZOQyBzZXJ2ZXJzIG9uIHRoZSBsb2NhbCBuZXR3b3JrIj4KKworICAgIDxzeW5vcHNpcz4KKyAgICAgIDxjbWQ+YnNzaDwvY21kPgorICAgICAgPGNtZD5idm5jPC9jbWQ+CisgICAgICA8Y21kPmJzaGVsbDwvY21kPgorICAgIDwvc3lub3BzaXM+CisKKyAgICA8ZGVzY3JpcHRpb24+CisgICAgICA8cD5ic3NoL2J2bmMvYnNoZWxsIGJyb3dzZXMgZm9yIFNTSC9WTkMgc2VydmVycyBvbiB0aGUgbG9jYWwKKyAgICAgIG5ldHdvcmssIHNob3dzIHRoZW0gaW4gYSBHVUkgZm9yIHRoZSB1c2VyIHRvIHNlbGVjdCBvbmUgYW5kCisgICAgICBmaW5hbGx5IGNhbGxzIHNzaC92bmN2aWV3ZXIgYWZ0ZXIgYSBzZWxlY3Rpb24gd2FzIG1hZGUuPC9wPgorCisgICAgICA8cD5JZiB0aGUgYmluYXJ5IGlzIGNhbGxlZCBhcyBic3NoIG9ubHkgc3NoIHNlcnZlcnMgd2lsbCBiZSBzaG93bi4gSWYgdGhlIGJpbmFyeSBpcyBjYWxsZWQgYXMgYnZuYyBvbmx5IFZOQyBzZXJ2ZXJzIHdpbGwgYmUgc2hvd24uIElmIHRoZSBiaW5hcnkgaXMgY2FsbGVkIGFzIGJzaGVsbCBib3RoIFZOQyBhbmQgU1NIIHNlcnZlcnMgYXJlIHNob3duLjwvcD4KKworICAgIDwvZGVzY3JpcHRpb24+CisKKyAgICA8b3B0aW9ucz4KKworICAgICAgPG9wdGlvbj4KKwk8cD48b3B0Pi1zIHwgLS1zc2g8L29wdD48L3A+CisJPG9wdGRlc2M+PHA+QnJvd3NlIGZvciBTU0ggc2VydmVycyAoYW5kIG9ubHkgU1NIIHNlcnZlcnMpICByZWdhcmRsZXNzIHVuZGVyIHdoaWNoIG5hbWUgdGhlIGJpbmFyeSBpcyBjYWxsZWQuPC9wPjwvb3B0ZGVzYz4KKyAgICAgIDwvb3B0aW9uPgorCisgICAgICA8b3B0aW9uPgorCTxwPjxvcHQ+LXYgfCAtLXZuYzwvb3B0PjwvcD4KKwk8b3B0ZGVzYz48cD5Ccm93c2UgZm9yIFZOQyBzZXJ2ZXJzIChhbmQgb25seSBWTkMgc2VydmVycykgcmVnYXJkbGVzcyB1bmRlciB3aGljaCBuYW1lIHRoZSBiaW5hcnkgaXMgY2FsbGVkLjwvcD48L29wdGRlc2M+CisgICAgICA8L29wdGlvbj4KKworICAgICAgPG9wdGlvbj4KKwk8cD48b3B0Pi1TIHwgLS1zaGVsbDwvb3B0PjwvcD4KKwk8b3B0ZGVzYz48cD5Ccm93c2UgZm9yIGJvdGggVk5DIGFuZCBTU0ggc2VydmVycyByZWdhcmRsZXNzIHVuZGVyIHdoaWNoIG5hbWUgdGhlIGJpbmFyeSBpcyBjYWxsZWQuPC9wPjwvb3B0ZGVzYz4KKyAgICAgIDwvb3B0aW9uPgorCisgICAgICA8b3B0aW9uPgorCTxwPjxvcHQ+LWQgfCAtLWRvbWFpbj08L29wdD4gPGFyZz5ET01BSU48L2FyZz48L3A+CisgICAgICAgIDxvcHRkZXNjPjxwPkJyb3dzZSBpbiB0aGUgc3BlY2lmaWVkIGRvbWFpbi4gSWYgb21pdHRlZAorICAgICAgICAgICAgYnNzaC9idm5jL2JzaGVsbCB3aWxsIGJyb3dzZSBpbiB0aGUgZGVmYXVsdCBicm93c2luZyBkb21haW4KKyAgICAgICAgICAgICh1c3VhbGx5IC5sb2NhbCk8L3A+PC9vcHRkZXNjPgorICAgICAgPC9vcHRpb24+CisKKyAgICAgIDxvcHRpb24+CisJPHA+PG9wdD4taCB8IC0taGVscDwvb3B0PjwvcD4KKwk8b3B0ZGVzYz48cD5TaG93IGhlbHAuPC9wPjwvb3B0ZGVzYz4KKyAgICAgIDwvb3B0aW9uPgorCisgICAgPC9vcHRpb25zPgorCisgICAgPHNlY3Rpb24gbmFtZT0iQXV0aG9ycyI+CisgICAgICA8cD5UaGUgQXZhaGkgRGV2ZWxvcGVycyAmbHQ7QFBBQ0tBR0VfQlVHUkVQT1JUQCZndDs7IEF2YWhpIGlzCisgICAgICBhdmFpbGFibGUgZnJvbSA8dXJsIGhyZWY9IkBQQUNLQUdFX1VSTEAiLz48L3A+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gbmFtZT0iU2VlIGFsc28iPgorICAgICAgPHA+CisgICAgICAgIDxtYW5yZWYgbmFtZT0iYXZhaGktYnJvd3NlIiBzZWN0aW9uPSIxIi8+LCA8bWFucmVmIG5hbWU9InNzaCIgc2VjdGlvbj0iMSIvPiwgPG1hbnJlZiBuYW1lPSJ2bmN2aWV3ZXIiIHNlY3Rpb249IjEiLz4KKyAgICAgIDwvcD4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBuYW1lPSJDb21tZW50cyI+CisgICAgICA8cD5UaGlzIG1hbiBwYWdlIHdhcyB3cml0dGVuIHVzaW5nIDxtYW5yZWYgbmFtZT0ieG1sMm1hbiIgc2VjdGlvbj0iMSIKKyAgICAgIGhyZWY9Imh0dHA6Ly9tYXNxbWFpbC5jeC94bWwybWFuLyIvPiBieSBPbGl2ZXIgS3VydGguPC9wPgorICAgIDwvc2VjdGlvbj4KKworICA8L21hbnBhZ2U+CmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvbWFuL3htbHRvbWFuLmNzcyBiL2F2YWhpLTAuNi4zMS9tYW4veG1sdG9tYW4uY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMzIzNWIKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvbWFuL3htbHRvbWFuLmNzcwpAQCAtMCwwICsxLDI4IEBACisvKioqCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorCisgIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKKyAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBLiAKKyoqKi8KKworYm9keSB7IGNvbG9yOiBibGFjazsgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7IH0gCithOmxpbmssIGE6dmlzaXRlZCB7IGNvbG9yOiAjOTAwMDAwOyB9ICAgICAgIAoraDEgeyB0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7IGZvbnQtc2l6ZTogMThwdDsgfSAKK3AgeyBtYXJnaW4tbGVmdDoxY207IG1hcmdpbi1yaWdodDoxY207IH0gCisuY21kIHsgZm9udC1mYW1pbHk6bW9ub3NwYWNlOyB9CisuZmlsZSB7IGZvbnQtZmFtaWx5Om1vbm9zcGFjZTsgfQorLmFyZyB7IHRleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTsgZm9udC1mYW1pbHk6bW9ub3NwYWNlOyBmb250LXN0eWxlOiBpdGFsaWM7IH0KKy5vcHQgeyBmb250LWZhbWlseTptb25vc3BhY2U7IGZvbnQtd2VpZ2h0OiBib2xkOyAgfQorLm1hbnJlZiB7IGZvbnQtZmFtaWx5Om1vbm9zcGFjZTsgfQorLm9wdGlvbiAub3B0ZGVzYyB7IG1hcmdpbi1sZWZ0OjJjbTsgfQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL21hbi94bWx0b21hbi5kdGQgYi9hdmFoaS0wLjYuMzEvbWFuL3htbHRvbWFuLmR0ZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjhkZDVmCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL21hbi94bWx0b21hbi5kdGQKQEAgLTAsMCArMSwzNyBAQAorPCEtLQorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCisgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQS4KKy0tPgorCis8IUVMRU1FTlQgbWFucGFnZSAoc3lub3BzaXMgfCBkZXNjcmlwdGlvbiB8IHNlY3Rpb24gfCBvcHRpb25zIHwgc2VlYWxzbykqPgorPCFBVFRMSVNUIG1hbnBhZ2UgbmFtZSBDREFUQSAjUkVRVUlSRUQgc2VjdGlvbiBDREFUQSAjUkVRVUlSRUQgZGVzYyBDREFUQSAjSU1QTElFRD4KKzwhRUxFTUVOVCBhcmcgKCNQQ0RBVEEpPgorPCFFTEVNRU5UIHAgKCNQQ0RBVEEgfCBhcmcgfCB1cmwgfCBtYW5yZWYgfCBvcHQgfCBmaWxlICkqPgorPCFFTEVNRU5UIHN5bm9wc2lzIChjbWQgfCBwKSs+Cis8IUVMRU1FTlQgZGVzY3JpcHRpb24gKHApKz4KKzwhRUxFTUVOVCBzZWN0aW9uIChwIHwgb3B0aW9uKSo+Cis8IUFUVExJU1Qgc2VjdGlvbiBuYW1lIENEQVRBICNSRVFVSVJFRD4KKzwhRUxFTUVOVCBvcHRpb24gKCNQQ0RBVEEgfCBwIHwgb3B0ZGVzYykqPgorPCFFTEVNRU5UIG9wdGRlc2MgKCNQQ0RBVEEgfCBwICkqPgorPCFFTEVNRU5UIGNtZCAoI1BDREFUQSB8IGFyZyB8IG9wdCkqPgorPCFFTEVNRU5UIG9wdGlvbnMgKHAgfCBvcHRpb24pKj4KKzwhRUxFTUVOVCBzZWVhbHNvIChwKSo+Cis8IUVMRU1FTlQgb3B0ICgjUENEQVRBKT4KKzwhRUxFTUVOVCBmaWxlICgjUENEQVRBKT4KKzwhRUxFTUVOVCBtYW5yZWYgRU1QVFk+Cis8IUFUVExJU1QgbWFucmVmIG5hbWUgQ0RBVEEgI1JFUVVJUkVEIHNlY3Rpb24gQ0RBVEEgI1JFUVVJUkVEIGhyZWYgQ0RBVEEgI0lNUExJRUQ+Cis8IUVMRU1FTlQgdXJsIEVNUFRZPgorPCFBVFRMSVNUIHVybCBocmVmIENEQVRBICNSRVFVSVJFRD4KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9tYW4veG1sdG9tYW4ueHNsIGIvYXZhaGktMC42LjMxL21hbi94bWx0b21hbi54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEzNDRjMgotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9tYW4veG1sdG9tYW4ueHNsCkBAIC0wLDAgKzEsMTI3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJpc28tODg1OS0xNSI/PgorPHhzbDpzdHlsZXNoZWV0IHZlcnNpb249IjEuMCIgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKworPCEtLSAKKyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgorICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EuIAorLS0+CisKKzx4c2w6b3V0cHV0IG1ldGhvZD0ieG1sIiB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJpc28tODg1OS0xNSIgZG9jdHlwZS1wdWJsaWM9Ii0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiBkb2N0eXBlLXN5c3RlbT0iaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCIgaW5kZW50PSJ5ZXMiLz4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iL21hbnBhZ2UiPgorICAKKyAgICA8aHRtbD4KKworICAgIDxoZWFkPgorICAgICAgPHRpdGxlPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPig8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQHNlY3Rpb24iLz4pPC90aXRsZT4KKyAgICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisgICAgICAgIGJvZHkgeyBjb2xvcjogYmxhY2s7IGJhY2tncm91bmQtY29sb3I6IHdoaXRlOyB9IAorICAgICAgICBhOmxpbmssIGE6dmlzaXRlZCB7IGNvbG9yOiAjOTAwMDAwOyB9ICAgICAgIAorICAgICAgICBoMSB7IHRleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTsgZm9udC1zaXplOiAxOHB0OyB9IAorICAgICAgICBwIHsgbWFyZ2luLWxlZnQ6MWNtOyBtYXJnaW4tcmlnaHQ6MWNtOyB9IAorICAgICAgICAuY21kIHsgZm9udC1mYW1pbHk6bW9ub3NwYWNlOyB9CisgICAgICAgIC5maWxlIHsgZm9udC1mYW1pbHk6bW9ub3NwYWNlOyB9CisgICAgICAgIC5hcmcgeyB0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7IGZvbnQtZmFtaWx5Om1vbm9zcGFjZTsgZm9udC1zdHlsZTogaXRhbGljOyB9CisgICAgICAgIC5vcHQgeyBmb250LWZhbWlseTptb25vc3BhY2U7IGZvbnQtd2VpZ2h0OiBib2xkOyAgfQorICAgICAgICAubWFucmVmIHsgZm9udC1mYW1pbHk6bW9ub3NwYWNlOyB9CisgICAgICAgIC5vcHRpb24gLm9wdGRlc2MgeyBtYXJnaW4tbGVmdDoyY207IH0KKyAgICAgIDwvc3R5bGU+CisgICAgPC9oZWFkPgorICAgIDxib2R5PgorICAgICAgPGgxPk5hbWU8L2gxPgorICAgICAgPHA+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBuYW1lIi8+CisgICAgICAgIDx4c2w6aWYgdGVzdD0ic3RyaW5nLWxlbmd0aChAZGVzYykgJmd0OyAwIj4gLSA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGRlc2MiLz48L3hzbDppZj4KKyAgICAgIDwvcD4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIC8+CisgICAgPC9ib2R5PgorICA8L2h0bWw+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icCI+CisgPHA+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzLz4KKyA8L3A+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY21kIj4KKyA8cCBjbGFzcz0iY21kIj4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMvPgorIDwvcD4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhcmciPgorICA8c3BhbiBjbGFzcz0iYXJnIj48eHNsOmFwcGx5LXRlbXBsYXRlcy8+PC9zcGFuPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9Im9wdCI+CisgIDxzcGFuIGNsYXNzPSJvcHQiPjx4c2w6YXBwbHktdGVtcGxhdGVzLz48L3NwYW4+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZmlsZSI+CisgIDxzcGFuIGNsYXNzPSJmaWxlIj48eHNsOmFwcGx5LXRlbXBsYXRlcy8+PC9zcGFuPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9Im9wdGRlc2MiPgorICA8ZGl2IGNsYXNzPSJvcHRkZXNjIj4KKyAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcy8+CisgIDwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InN5bm9wc2lzIj4KKyAgPGgxPlN5bm9wc2lzPC9oMT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InNlZWFsc28iPgorICA8aDE+U3lub3BzaXM8L2gxPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcy8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZGVzY3JpcHRpb24iPgorICA8aDE+RGVzY3JpcHRpb248L2gxPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcy8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ib3B0aW9ucyI+CisgIDxoMT5PcHRpb25zPC9oMT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InNlY3Rpb24iPgorICA8aDE+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBuYW1lIi8+PC9oMT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9Im9wdGlvbiI+CisgIDxkaXYgY2xhc3M9Im9wdGlvbiI+PHhzbDphcHBseS10ZW1wbGF0ZXMvPjwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9Im1hbnJlZiI+CisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzdHJpbmctbGVuZ3RoKEBocmVmKSAmZ3Q7IDAiPgorICAgIDxhIGNsYXNzPSJtYW5yZWYiPjx4c2w6YXR0cmlidXRlIG5hbWU9ImhyZWYiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAaHJlZiIvPjwveHNsOmF0dHJpYnV0ZT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz4oPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBzZWN0aW9uIi8+KTwvYT4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6b3RoZXJ3aXNlPgorICAgIDxzcGFuIGNsYXNzPSJtYW5yZWYiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPig8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQHNlY3Rpb24iLz4pPC9zcGFuPgorICAgIDwveHNsOm90aGVyd2lzZT4KKyAgPC94c2w6Y2hvb3NlPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InVybCI+CisgIDxhIGNsYXNzPSJ1cmwiPjx4c2w6YXR0cmlidXRlIG5hbWU9ImhyZWYiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAaHJlZiIvPjwveHNsOmF0dHJpYnV0ZT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGhyZWYiLz48L2E+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9taXNzaW5nIGIvYXZhaGktMC42LjMxL21pc3NpbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjgwNTVkMgotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9taXNzaW5nCkBAIC0wLDAgKzEsMzc2IEBACisjISAvYmluL3NoCisjIENvbW1vbiBzdHViIGZvciBhIGZldyBtaXNzaW5nIEdOVSBwcm9ncmFtcyB3aGlsZSBpbnN0YWxsaW5nLgorCitzY3JpcHR2ZXJzaW9uPTIwMDktMDQtMjguMjE7ICMgVVRDCisKKyMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk5LCAyMDAwLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LAorIyAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBPcmlnaW5hbGx5IGJ5IEZyYW4sY29pcyBQaW5hcmQgPHBpbmFyZEBpcm8udW1vbnRyZWFsLmNhPiwgMTk5Ni4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKKyMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKyMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCitpZiB0ZXN0ICQjIC1lcSAwOyB0aGVuCisgIGVjaG8gMT4mMiAiVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiIKKyAgZXhpdCAxCitmaQorCitydW49Ogorc2VkX291dHB1dD0ncy8uKiAtLW91dHB1dFsgPV1cKFteIF0qXCkuKi9cMS9wJworc2VkX21pbnVzbz0ncy8uKiAtbyBcKFteIF0qXCkuKi9cMS9wJworCisjIEluIHRoZSBjYXNlcyB3aGVyZSB0aGlzIG1hdHRlcnMsIGBtaXNzaW5nJyBpcyBiZWluZyBydW4gaW4gdGhlCisjIHNyY2RpciBhbHJlYWR5LgoraWYgdGVzdCAtZiBjb25maWd1cmUuYWM7IHRoZW4KKyAgY29uZmlndXJlX2FjPWNvbmZpZ3VyZS5hYworZWxzZQorICBjb25maWd1cmVfYWM9Y29uZmlndXJlLmluCitmaQorCittc2c9Im1pc3Npbmcgb24geW91ciBzeXN0ZW0iCisKK2Nhc2UgJDEgaW4KKy0tcnVuKQorICAjIFRyeSB0byBydW4gcmVxdWVzdGVkIHByb2dyYW0sIGFuZCBqdXN0IGV4aXQgaWYgaXQgc3VjY2VlZHMuCisgIHJ1bj0KKyAgc2hpZnQKKyAgIiRAIiAmJiBleGl0IDAKKyAgIyBFeGl0IGNvZGUgNjMgbWVhbnMgdmVyc2lvbiBtaXNtYXRjaC4gIFRoaXMgb2Z0ZW4gaGFwcGVucworICAjIHdoZW4gdGhlIHVzZXIgdHJ5IHRvIHVzZSBhbiBhbmNpZW50IHZlcnNpb24gb2YgYSB0b29sIG9uCisgICMgYSBmaWxlIHRoYXQgcmVxdWlyZXMgYSBtaW5pbXVtIHZlcnNpb24uICBJbiB0aGlzIGNhc2Ugd2UKKyAgIyB3ZSBzaG91bGQgcHJvY2VlZCBoYXMgaWYgdGhlIHByb2dyYW0gaGFkIGJlZW4gYWJzZW50LCBvcgorICAjIGlmIC0tcnVuIGhhZG4ndCBiZWVuIHBhc3NlZC4KKyAgaWYgdGVzdCAkPyA9IDYzOyB0aGVuCisgICAgcnVuPToKKyAgICBtc2c9InByb2JhYmx5IHRvbyBvbGQiCisgIGZpCisgIDs7CisKKyAgLWh8LS1ofC0taGV8LS1oZWx8LS1oZWxwKQorICAgIGVjaG8gIlwKKyQwIFtPUFRJT05dLi4uIFBST0dSQU0gW0FSR1VNRU5UXS4uLgorCitIYW5kbGUgXGBQUk9HUkFNIFtBUkdVTUVOVF0uLi4nIGZvciB3aGVuIFBST0dSQU0gaXMgbWlzc2luZywgb3IgcmV0dXJuIGFuCitlcnJvciBzdGF0dXMgaWYgdGhlcmUgaXMgbm8ga25vd24gaGFuZGxpbmcgZm9yIFBST0dSQU0uCisKK09wdGlvbnM6CisgIC1oLCAtLWhlbHAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdAorICAtdiwgLS12ZXJzaW9uICAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQKKyAgLS1ydW4gICAgICAgICAgIHRyeSB0byBydW4gdGhlIGdpdmVuIGNvbW1hbmQsIGFuZCBlbXVsYXRlIGl0IGlmIGl0IGZhaWxzCisKK1N1cHBvcnRlZCBQUk9HUkFNIHZhbHVlczoKKyAgYWNsb2NhbCAgICAgIHRvdWNoIGZpbGUgXGBhY2xvY2FsLm00JworICBhdXRvY29uZiAgICAgdG91Y2ggZmlsZSBcYGNvbmZpZ3VyZScKKyAgYXV0b2hlYWRlciAgIHRvdWNoIGZpbGUgXGBjb25maWcuaC5pbicKKyAgYXV0b200dGUgICAgIHRvdWNoIHRoZSBvdXRwdXQgZmlsZSwgb3IgY3JlYXRlIGEgc3R1YiBvbmUKKyAgYXV0b21ha2UgICAgIHRvdWNoIGFsbCBcYE1ha2VmaWxlLmluJyBmaWxlcworICBiaXNvbiAgICAgICAgY3JlYXRlIFxgeS50YWIuW2NoXScsIGlmIHBvc3NpYmxlLCBmcm9tIGV4aXN0aW5nIC5bY2hdCisgIGZsZXggICAgICAgICBjcmVhdGUgXGBsZXgueXkuYycsIGlmIHBvc3NpYmxlLCBmcm9tIGV4aXN0aW5nIC5jCisgIGhlbHAybWFuICAgICB0b3VjaCB0aGUgb3V0cHV0IGZpbGUKKyAgbGV4ICAgICAgICAgIGNyZWF0ZSBcYGxleC55eS5jJywgaWYgcG9zc2libGUsIGZyb20gZXhpc3RpbmcgLmMKKyAgbWFrZWluZm8gICAgIHRvdWNoIHRoZSBvdXRwdXQgZmlsZQorICB0YXIgICAgICAgICAgdHJ5IHRhciwgZ251dGFyLCBndGFyLCB0aGVuIHRhciB3aXRob3V0IG5vbi1wb3J0YWJsZSBmbGFncworICB5YWNjICAgICAgICAgY3JlYXRlIFxgeS50YWIuW2NoXScsIGlmIHBvc3NpYmxlLCBmcm9tIGV4aXN0aW5nIC5bY2hdCisKK1ZlcnNpb24gc3VmZml4ZXMgdG8gUFJPR1JBTSBhcyB3ZWxsIGFzIHRoZSBwcmVmaXhlcyBcYGdudS0nLCBcYGdudScsIGFuZAorXGBnJyBhcmUgaWdub3JlZCB3aGVuIGNoZWNraW5nIHRoZSBuYW1lLgorCitTZW5kIGJ1ZyByZXBvcnRzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4uIgorICAgIGV4aXQgJD8KKyAgICA7OworCisgIC12fC0tdnwtLXZlfC0tdmVyfC0tdmVyc3wtLXZlcnNpfC0tdmVyc2lvfC0tdmVyc2lvbikKKyAgICBlY2hvICJtaXNzaW5nICRzY3JpcHR2ZXJzaW9uIChHTlUgQXV0b21ha2UpIgorICAgIGV4aXQgJD8KKyAgICA7OworCisgIC0qKQorICAgIGVjaG8gMT4mMiAiJDA6IFVua25vd24gXGAkMScgb3B0aW9uIgorICAgIGVjaG8gMT4mMiAiVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiIKKyAgICBleGl0IDEKKyAgICA7OworCitlc2FjCisKKyMgbm9ybWFsaXplIHByb2dyYW0gbmFtZSB0byBjaGVjayBmb3IuCitwcm9ncmFtPWBlY2hvICIkMSIgfCBzZWQgJworICBzL15nbnUtLy87IHQKKyAgcy9eZ251Ly87IHQKKyAgcy9eZy8vOyB0J2AKKworIyBOb3cgZXhpdCBpZiB3ZSBoYXZlIGl0LCBidXQgaXQgZmFpbGVkLiAgQWxzbyBleGl0IG5vdyBpZiB3ZQorIyBkb24ndCBoYXZlIGl0IGFuZCAtLXZlcnNpb24gd2FzIHBhc3NlZCAobW9zdCBsaWtlbHkgdG8gZGV0ZWN0CisjIHRoZSBwcm9ncmFtKS4gIFRoaXMgaXMgYWJvdXQgbm9uLUdOVSBwcm9ncmFtcywgc28gdXNlICQxIG5vdAorIyAkcHJvZ3JhbS4KK2Nhc2UgJDEgaW4KKyAgbGV4Knx5YWNjKikKKyAgICAjIE5vdCBHTlUgcHJvZ3JhbXMsIHRoZXkgZG9uJ3QgaGF2ZSAtLXZlcnNpb24uCisgICAgOzsKKworICB0YXIqKQorICAgIGlmIHRlc3QgLW4gIiRydW4iOyB0aGVuCisgICAgICAgZWNobyAxPiYyICJFUlJPUjogXGB0YXInIHJlcXVpcmVzIC0tcnVuIgorICAgICAgIGV4aXQgMQorICAgIGVsaWYgdGVzdCAieCQyIiA9ICJ4LS12ZXJzaW9uIiB8fCB0ZXN0ICJ4JDIiID0gIngtLWhlbHAiOyB0aGVuCisgICAgICAgZXhpdCAxCisgICAgZmkKKyAgICA7OworCisgICopCisgICAgaWYgdGVzdCAteiAiJHJ1biIgJiYgKCQxIC0tdmVyc2lvbikgPiAvZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgICMgV2UgaGF2ZSBpdCwgYnV0IGl0IGZhaWxlZC4KKyAgICAgICBleGl0IDEKKyAgICBlbGlmIHRlc3QgIngkMiIgPSAieC0tdmVyc2lvbiIgfHwgdGVzdCAieCQyIiA9ICJ4LS1oZWxwIjsgdGhlbgorICAgICAgICMgQ291bGQgbm90IHJ1biAtLXZlcnNpb24gb3IgLS1oZWxwLiAgVGhpcyBpcyBwcm9iYWJseSBzb21lb25lCisgICAgICAgIyBydW5uaW5nIGAkVE9PTCAtLXZlcnNpb24nIG9yIGAkVE9PTCAtLWhlbHAnIHRvIGNoZWNrIHdoZXRoZXIKKyAgICAgICAjICRUT09MIGV4aXN0cyBhbmQgbm90IGtub3dpbmcgJFRPT0wgdXNlcyBtaXNzaW5nLgorICAgICAgIGV4aXQgMQorICAgIGZpCisgICAgOzsKK2VzYWMKKworIyBJZiBpdCBkb2VzIG5vdCBleGlzdCwgb3IgZmFpbHMgdG8gcnVuIChwb3NzaWJseSBhbiBvdXRkYXRlZCB2ZXJzaW9uKSwKKyMgdHJ5IHRvIGVtdWxhdGUgaXQuCitjYXNlICRwcm9ncmFtIGluCisgIGFjbG9jYWwqKQorICAgIGVjaG8gMT4mMiAiXAorV0FSTklORzogXGAkMScgaXMgJG1zZy4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCisgICAgICAgICB5b3UgbW9kaWZpZWQgXGBhY2luY2x1ZGUubTQnIG9yIFxgJHtjb25maWd1cmVfYWN9Jy4gIFlvdSBtaWdodCB3YW50CisgICAgICAgICB0byBpbnN0YWxsIHRoZSBcYEF1dG9tYWtlJyBhbmQgXGBQZXJsJyBwYWNrYWdlcy4gIEdyYWIgdGhlbSBmcm9tCisgICAgICAgICBhbnkgR05VIGFyY2hpdmUgc2l0ZS4iCisgICAgdG91Y2ggYWNsb2NhbC5tNAorICAgIDs7CisKKyAgYXV0b2NvbmYqKQorICAgIGVjaG8gMT4mMiAiXAorV0FSTklORzogXGAkMScgaXMgJG1zZy4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCisgICAgICAgICB5b3UgbW9kaWZpZWQgXGAke2NvbmZpZ3VyZV9hY30nLiAgWW91IG1pZ2h0IHdhbnQgdG8gaW5zdGFsbCB0aGUKKyAgICAgICAgIFxgQXV0b2NvbmYnIGFuZCBcYEdOVSBtNCcgcGFja2FnZXMuICBHcmFiIHRoZW0gZnJvbSBhbnkgR05VCisgICAgICAgICBhcmNoaXZlIHNpdGUuIgorICAgIHRvdWNoIGNvbmZpZ3VyZQorICAgIDs7CisKKyAgYXV0b2hlYWRlciopCisgICAgZWNobyAxPiYyICJcCitXQVJOSU5HOiBcYCQxJyBpcyAkbXNnLiAgWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYKKyAgICAgICAgIHlvdSBtb2RpZmllZCBcYGFjY29uZmlnLmgnIG9yIFxgJHtjb25maWd1cmVfYWN9Jy4gIFlvdSBtaWdodCB3YW50CisgICAgICAgICB0byBpbnN0YWxsIHRoZSBcYEF1dG9jb25mJyBhbmQgXGBHTlUgbTQnIHBhY2thZ2VzLiAgR3JhYiB0aGVtCisgICAgICAgICBmcm9tIGFueSBHTlUgYXJjaGl2ZSBzaXRlLiIKKyAgICBmaWxlcz1gc2VkIC1uICdzL15bIF0qQVtDTV1fQ09ORklHX0hFQURFUihcKFteKV0qXCkpLiovXDEvcCcgJHtjb25maWd1cmVfYWN9YAorICAgIHRlc3QgLXogIiRmaWxlcyIgJiYgZmlsZXM9ImNvbmZpZy5oIgorICAgIHRvdWNoX2ZpbGVzPQorICAgIGZvciBmIGluICRmaWxlczsgZG8KKyAgICAgIGNhc2UgJGYgaW4KKyAgICAgICo6KikgdG91Y2hfZmlsZXM9IiR0b3VjaF9maWxlcyAiYGVjaG8gIiRmIiB8CisJCQkJICAgICAgIHNlZCAtZSAncy9eW146XSo6Ly8nIC1lICdzLzouKi8vJ2A7OworICAgICAgKikgdG91Y2hfZmlsZXM9IiR0b3VjaF9maWxlcyAkZi5pbiI7OworICAgICAgZXNhYworICAgIGRvbmUKKyAgICB0b3VjaCAkdG91Y2hfZmlsZXMKKyAgICA7OworCisgIGF1dG9tYWtlKikKKyAgICBlY2hvIDE+JjIgIlwKK1dBUk5JTkc6IFxgJDEnIGlzICRtc2cuICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgorICAgICAgICAgeW91IG1vZGlmaWVkIFxgTWFrZWZpbGUuYW0nLCBcYGFjaW5jbHVkZS5tNCcgb3IgXGAke2NvbmZpZ3VyZV9hY30nLgorICAgICAgICAgWW91IG1pZ2h0IHdhbnQgdG8gaW5zdGFsbCB0aGUgXGBBdXRvbWFrZScgYW5kIFxgUGVybCcgcGFja2FnZXMuCisgICAgICAgICBHcmFiIHRoZW0gZnJvbSBhbnkgR05VIGFyY2hpdmUgc2l0ZS4iCisgICAgZmluZCAuIC10eXBlIGYgLW5hbWUgTWFrZWZpbGUuYW0gLXByaW50IHwKKwkgICBzZWQgJ3MvXC5hbSQvLmluLycgfAorCSAgIHdoaWxlIHJlYWQgZjsgZG8gdG91Y2ggIiRmIjsgZG9uZQorICAgIDs7CisKKyAgYXV0b200dGUqKQorICAgIGVjaG8gMT4mMiAiXAorV0FSTklORzogXGAkMScgaXMgbmVlZGVkLCBidXQgaXMgJG1zZy4KKyAgICAgICAgIFlvdSBtaWdodCBoYXZlIG1vZGlmaWVkIHNvbWUgZmlsZXMgd2l0aG91dCBoYXZpbmcgdGhlCisgICAgICAgICBwcm9wZXIgdG9vbHMgZm9yIGZ1cnRoZXIgaGFuZGxpbmcgdGhlbS4KKyAgICAgICAgIFlvdSBjYW4gZ2V0IFxgJDEnIGFzIHBhcnQgb2YgXGBBdXRvY29uZicgZnJvbSBhbnkgR05VCisgICAgICAgICBhcmNoaXZlIHNpdGUuIgorCisgICAgZmlsZT1gZWNobyAiJCoiIHwgc2VkIC1uICIkc2VkX291dHB1dCJgCisgICAgdGVzdCAteiAiJGZpbGUiICYmIGZpbGU9YGVjaG8gIiQqIiB8IHNlZCAtbiAiJHNlZF9taW51c28iYAorICAgIGlmIHRlc3QgLWYgIiRmaWxlIjsgdGhlbgorCXRvdWNoICRmaWxlCisgICAgZWxzZQorCXRlc3QgLXogIiRmaWxlIiB8fCBleGVjID4kZmlsZQorCWVjaG8gIiMhIC9iaW4vc2giCisJZWNobyAiIyBDcmVhdGVkIGJ5IEdOVSBBdXRvbWFrZSBtaXNzaW5nIGFzIGEgcmVwbGFjZW1lbnQgb2YiCisJZWNobyAiIyAgJCAkQCIKKwllY2hvICJleGl0IDAiCisJY2htb2QgK3ggJGZpbGUKKwlleGl0IDEKKyAgICBmaQorICAgIDs7CisKKyAgYmlzb24qfHlhY2MqKQorICAgIGVjaG8gMT4mMiAiXAorV0FSTklORzogXGAkMScgJG1zZy4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCisgICAgICAgICB5b3UgbW9kaWZpZWQgYSBcYC55JyBmaWxlLiAgWW91IG1heSBuZWVkIHRoZSBcYEJpc29uJyBwYWNrYWdlCisgICAgICAgICBpbiBvcmRlciBmb3IgdGhvc2UgbW9kaWZpY2F0aW9ucyB0byB0YWtlIGVmZmVjdC4gIFlvdSBjYW4gZ2V0CisgICAgICAgICBcYEJpc29uJyBmcm9tIGFueSBHTlUgYXJjaGl2ZSBzaXRlLiIKKyAgICBybSAtZiB5LnRhYi5jIHkudGFiLmgKKyAgICBpZiB0ZXN0ICQjIC1uZSAxOyB0aGVuCisgICAgICAgIGV2YWwgTEFTVEFSRz0iXCR7JCN9IgorCWNhc2UgJExBU1RBUkcgaW4KKwkqLnkpCisJICAgIFNSQ0ZJTEU9YGVjaG8gIiRMQVNUQVJHIiB8IHNlZCAncy95JC9jLydgCisJICAgIGlmIHRlc3QgLWYgIiRTUkNGSUxFIjsgdGhlbgorCSAgICAgICAgIGNwICIkU1JDRklMRSIgeS50YWIuYworCSAgICBmaQorCSAgICBTUkNGSUxFPWBlY2hvICIkTEFTVEFSRyIgfCBzZWQgJ3MveSQvaC8nYAorCSAgICBpZiB0ZXN0IC1mICIkU1JDRklMRSI7IHRoZW4KKwkgICAgICAgICBjcCAiJFNSQ0ZJTEUiIHkudGFiLmgKKwkgICAgZmkKKwkgIDs7CisJZXNhYworICAgIGZpCisgICAgaWYgdGVzdCAhIC1mIHkudGFiLmg7IHRoZW4KKwllY2hvID55LnRhYi5oCisgICAgZmkKKyAgICBpZiB0ZXN0ICEgLWYgeS50YWIuYzsgdGhlbgorCWVjaG8gJ21haW4oKSB7IHJldHVybiAwOyB9JyA+eS50YWIuYworICAgIGZpCisgICAgOzsKKworICBsZXgqfGZsZXgqKQorICAgIGVjaG8gMT4mMiAiXAorV0FSTklORzogXGAkMScgaXMgJG1zZy4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCisgICAgICAgICB5b3UgbW9kaWZpZWQgYSBcYC5sJyBmaWxlLiAgWW91IG1heSBuZWVkIHRoZSBcYEZsZXgnIHBhY2thZ2UKKyAgICAgICAgIGluIG9yZGVyIGZvciB0aG9zZSBtb2RpZmljYXRpb25zIHRvIHRha2UgZWZmZWN0LiAgWW91IGNhbiBnZXQKKyAgICAgICAgIFxgRmxleCcgZnJvbSBhbnkgR05VIGFyY2hpdmUgc2l0ZS4iCisgICAgcm0gLWYgbGV4Lnl5LmMKKyAgICBpZiB0ZXN0ICQjIC1uZSAxOyB0aGVuCisgICAgICAgIGV2YWwgTEFTVEFSRz0iXCR7JCN9IgorCWNhc2UgJExBU1RBUkcgaW4KKwkqLmwpCisJICAgIFNSQ0ZJTEU9YGVjaG8gIiRMQVNUQVJHIiB8IHNlZCAncy9sJC9jLydgCisJICAgIGlmIHRlc3QgLWYgIiRTUkNGSUxFIjsgdGhlbgorCSAgICAgICAgIGNwICIkU1JDRklMRSIgbGV4Lnl5LmMKKwkgICAgZmkKKwkgIDs7CisJZXNhYworICAgIGZpCisgICAgaWYgdGVzdCAhIC1mIGxleC55eS5jOyB0aGVuCisJZWNobyAnbWFpbigpIHsgcmV0dXJuIDA7IH0nID5sZXgueXkuYworICAgIGZpCisgICAgOzsKKworICBoZWxwMm1hbiopCisgICAgZWNobyAxPiYyICJcCitXQVJOSU5HOiBcYCQxJyBpcyAkbXNnLiAgWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYKKwkgeW91IG1vZGlmaWVkIGEgZGVwZW5kZW5jeSBvZiBhIG1hbnVhbCBwYWdlLiAgWW91IG1heSBuZWVkIHRoZQorCSBcYEhlbHAybWFuJyBwYWNrYWdlIGluIG9yZGVyIGZvciB0aG9zZSBtb2RpZmljYXRpb25zIHRvIHRha2UKKwkgZWZmZWN0LiAgWW91IGNhbiBnZXQgXGBIZWxwMm1hbicgZnJvbSBhbnkgR05VIGFyY2hpdmUgc2l0ZS4iCisKKyAgICBmaWxlPWBlY2hvICIkKiIgfCBzZWQgLW4gIiRzZWRfb3V0cHV0ImAKKyAgICB0ZXN0IC16ICIkZmlsZSIgJiYgZmlsZT1gZWNobyAiJCoiIHwgc2VkIC1uICIkc2VkX21pbnVzbyJgCisgICAgaWYgdGVzdCAtZiAiJGZpbGUiOyB0aGVuCisJdG91Y2ggJGZpbGUKKyAgICBlbHNlCisJdGVzdCAteiAiJGZpbGUiIHx8IGV4ZWMgPiRmaWxlCisJZWNobyAiLmFiIGhlbHAybWFuIGlzIHJlcXVpcmVkIHRvIGdlbmVyYXRlIHRoaXMgcGFnZSIKKwlleGl0ICQ/CisgICAgZmkKKyAgICA7OworCisgIG1ha2VpbmZvKikKKyAgICBlY2hvIDE+JjIgIlwKK1dBUk5JTkc6IFxgJDEnIGlzICRtc2cuICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgorICAgICAgICAgeW91IG1vZGlmaWVkIGEgXGAudGV4aScgb3IgXGAudGV4aW5mbycgZmlsZSwgb3IgYW55IG90aGVyIGZpbGUKKyAgICAgICAgIGluZGlyZWN0bHkgYWZmZWN0aW5nIHRoZSBhc3BlY3Qgb2YgdGhlIG1hbnVhbC4gIFRoZSBzcHVyaW91cworICAgICAgICAgY2FsbCBtaWdodCBhbHNvIGJlIHRoZSBjb25zZXF1ZW5jZSBvZiB1c2luZyBhIGJ1Z2d5IFxgbWFrZScgKEFJWCwKKyAgICAgICAgIERVLCBJUklYKS4gIFlvdSBtaWdodCB3YW50IHRvIGluc3RhbGwgdGhlIFxgVGV4aW5mbycgcGFja2FnZSBvcgorICAgICAgICAgdGhlIFxgR05VIG1ha2UnIHBhY2thZ2UuICBHcmFiIGVpdGhlciBmcm9tIGFueSBHTlUgYXJjaGl2ZSBzaXRlLiIKKyAgICAjIFRoZSBmaWxlIHRvIHRvdWNoIGlzIHRoYXQgc3BlY2lmaWVkIHdpdGggLW8gLi4uCisgICAgZmlsZT1gZWNobyAiJCoiIHwgc2VkIC1uICIkc2VkX291dHB1dCJgCisgICAgdGVzdCAteiAiJGZpbGUiICYmIGZpbGU9YGVjaG8gIiQqIiB8IHNlZCAtbiAiJHNlZF9taW51c28iYAorICAgIGlmIHRlc3QgLXogIiRmaWxlIjsgdGhlbgorICAgICAgIyAuLi4gb3IgaXQgaXMgdGhlIG9uZSBzcGVjaWZpZWQgd2l0aCBAc2V0ZmlsZW5hbWUgLi4uCisgICAgICBpbmZpbGU9YGVjaG8gIiQqIiB8IHNlZCAncy8uKiBcKFteIF0qXCkgKiQvXDEvJ2AKKyAgICAgIGZpbGU9YHNlZCAtbiAnCisJL15Ac2V0ZmlsZW5hbWUveworCSAgcy8uKiBcKFteIF0qXCkgKiQvXDEvCisJICBwCisJICBxCisJfScgJGluZmlsZWAKKyAgICAgICMgLi4uIG9yIGl0IGlzIGRlcml2ZWQgZnJvbSB0aGUgc291cmNlIG5hbWUgKGRpci9mLnRleGkgYmVjb21lcyBmLmluZm8pCisgICAgICB0ZXN0IC16ICIkZmlsZSIgJiYgZmlsZT1gZWNobyAiJGluZmlsZSIgfCBzZWQgJ3MsLiovLCw7cywuW14uXSokLCwnYC5pbmZvCisgICAgZmkKKyAgICAjIElmIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0LCB0aGUgdXNlciByZWFsbHkgbmVlZHMgbWFrZWluZm87CisgICAgIyBsZXQncyBmYWlsIHdpdGhvdXQgdG91Y2hpbmcgYW55dGhpbmcuCisgICAgdGVzdCAtZiAkZmlsZSB8fCBleGl0IDEKKyAgICB0b3VjaCAkZmlsZQorICAgIDs7CisKKyAgdGFyKikKKyAgICBzaGlmdAorCisgICAgIyBXZSBoYXZlIGFscmVhZHkgdHJpZWQgdGFyIGluIHRoZSBnZW5lcmljIHBhcnQuCisgICAgIyBMb29rIGZvciBnbnV0YXIvZ3RhciBiZWZvcmUgaW52b2NhdGlvbiB0byBhdm9pZCB1Z2x5IGVycm9yCisgICAgIyBtZXNzYWdlcy4KKyAgICBpZiAoZ251dGFyIC0tdmVyc2lvbiA+IC9kZXYvbnVsbCAyPiYxKTsgdGhlbgorICAgICAgIGdudXRhciAiJEAiICYmIGV4aXQgMAorICAgIGZpCisgICAgaWYgKGd0YXIgLS12ZXJzaW9uID4gL2Rldi9udWxsIDI+JjEpOyB0aGVuCisgICAgICAgZ3RhciAiJEAiICYmIGV4aXQgMAorICAgIGZpCisgICAgZmlyc3Rhcmc9IiQxIgorICAgIGlmIHNoaWZ0OyB0aGVuCisJY2FzZSAkZmlyc3RhcmcgaW4KKwkqbyopCisJICAgIGZpcnN0YXJnPWBlY2hvICIkZmlyc3RhcmciIHwgc2VkIHMvby8vYAorCSAgICB0YXIgIiRmaXJzdGFyZyIgIiRAIiAmJiBleGl0IDAKKwkgICAgOzsKKwllc2FjCisJY2FzZSAkZmlyc3RhcmcgaW4KKwkqaCopCisJICAgIGZpcnN0YXJnPWBlY2hvICIkZmlyc3RhcmciIHwgc2VkIHMvaC8vYAorCSAgICB0YXIgIiRmaXJzdGFyZyIgIiRAIiAmJiBleGl0IDAKKwkgICAgOzsKKwllc2FjCisgICAgZmkKKworICAgIGVjaG8gMT4mMiAiXAorV0FSTklORzogSSBjYW4ndCBzZWVtIHRvIGJlIGFibGUgdG8gcnVuIFxgdGFyJyB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHMuCisgICAgICAgICBZb3UgbWF5IHdhbnQgdG8gaW5zdGFsbCBHTlUgdGFyIG9yIEZyZWUgcGF4dXRpbHMsIG9yIGNoZWNrIHRoZQorICAgICAgICAgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4iCisgICAgZXhpdCAxCisgICAgOzsKKworICAqKQorICAgIGVjaG8gMT4mMiAiXAorV0FSTklORzogXGAkMScgaXMgbmVlZGVkLCBhbmQgaXMgJG1zZy4KKyAgICAgICAgIFlvdSBtaWdodCBoYXZlIG1vZGlmaWVkIHNvbWUgZmlsZXMgd2l0aG91dCBoYXZpbmcgdGhlCisgICAgICAgICBwcm9wZXIgdG9vbHMgZm9yIGZ1cnRoZXIgaGFuZGxpbmcgdGhlbS4gIENoZWNrIHRoZSBcYFJFQURNRScgZmlsZSwKKyAgICAgICAgIGl0IG9mdGVuIHRlbGxzIHlvdSBhYm91dCB0aGUgbmVlZGVkIHByZXJlcXVpc2l0ZXMgZm9yIGluc3RhbGxpbmcKKyAgICAgICAgIHRoaXMgcGFja2FnZS4gIFlvdSBtYXkgYWxzbyBwZWVrIGF0IGFueSBHTlUgYXJjaGl2ZSBzaXRlLCBpbiBjYXNlCisgICAgICAgICBzb21lIG90aGVyIHBhY2thZ2Ugd291bGQgY29udGFpbiB0aGlzIG1pc3NpbmcgXGAkMScgcHJvZ3JhbS4iCisgICAgZXhpdCAxCisgICAgOzsKK2VzYWMKKworZXhpdCAwCisKKyMgTG9jYWwgdmFyaWFibGVzOgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJzY3JpcHR2ZXJzaW9uPSIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkLiUwMkgiCisjIHRpbWUtc3RhbXAtdGltZS16b25lOiAiVVRDIgorIyB0aW1lLXN0YW1wLWVuZDogIjsgIyBVVEMiCisjIEVuZDoKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9wby9DaGFuZ2VMb2cgYi9hdmFoaS0wLjYuMzEvcG8vQ2hhbmdlTG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4YzU0MzcKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvcG8vQ2hhbmdlTG9nCkBAIC0wLDAgKzEsODMgQEAKKzIwMTItMDItMTQgIGdldHRleHRpemUgIDxidWctZ251LWdldHRleHRAZ251Lm9yZz4KKworCSogTWFrZWZpbGUuaW4uaW46IFVwZ3JhZGUgdG8gZ2V0dGV4dC0wLjE4LjEuCisKKzIwMTItMDItMTQgIGdldHRleHRpemUgIDxidWctZ251LWdldHRleHRAZ251Lm9yZz4KKworCSogTWFrZWZpbGUuaW4uaW46IFVwZ3JhZGUgdG8gZ2V0dGV4dC0wLjE4LjEuCisKKzIwMTItMDItMTQgIGdldHRleHRpemUgIDxidWctZ251LWdldHRleHRAZ251Lm9yZz4KKworCSogTWFrZWZpbGUuaW4uaW46IFVwZ3JhZGUgdG8gZ2V0dGV4dC0wLjE4LjEuCisKKzIwMTEtMDItMTggIGdldHRleHRpemUgIDxidWctZ251LWdldHRleHRAZ251Lm9yZz4KKworCSogTWFrZWZpbGUuaW4uaW46IFVwZ3JhZGUgdG8gZ2V0dGV4dC0wLjE4LjEuCisKKzIwMTEtMDItMTggIGdldHRleHRpemUgIDxidWctZ251LWdldHRleHRAZ251Lm9yZz4KKworCSogTWFrZWZpbGUuaW4uaW46IFVwZ3JhZGUgdG8gZ2V0dGV4dC0wLjE4LjEuCisKKzIwMTEtMDItMDggIGdldHRleHRpemUgIDxidWctZ251LWdldHRleHRAZ251Lm9yZz4KKworCSogTWFrZWZpbGUuaW4uaW46IFVwZ3JhZGUgdG8gZ2V0dGV4dC0wLjE4LjEuCisKKzIwMTAtMTEtMTggIGdldHRleHRpemUgIDxidWctZ251LWdldHRleHRAZ251Lm9yZz4KKworCSogTWFrZWZpbGUuaW4uaW46IFVwZ3JhZGUgdG8gZ2V0dGV4dC0wLjE4LjEuCisKKzIwMTAtMTAtMDUgIGdldHRleHRpemUgIDxidWctZ251LWdldHRleHRAZ251Lm9yZz4KKworCSogTWFrZWZpbGUuaW4uaW46IFVwZ3JhZGUgdG8gZ2V0dGV4dC0wLjE4LjEuCisKKzIwMTAtMTAtMDUgIGdldHRleHRpemUgIDxidWctZ251LWdldHRleHRAZ251Lm9yZz4KKworCSogTWFrZWZpbGUuaW4uaW46IFVwZ3JhZGUgdG8gZ2V0dGV4dC0wLjE4LjEuCisKKzIwMTAtMTAtMDUgIGdldHRleHRpemUgIDxidWctZ251LWdldHRleHRAZ251Lm9yZz4KKworCSogTWFrZWZpbGUuaW4uaW46IFVwZ3JhZGUgdG8gZ2V0dGV4dC0wLjE4LjEuCisKKzIwMTAtMTAtMDUgIGdldHRleHRpemUgIDxidWctZ251LWdldHRleHRAZ251Lm9yZz4KKworCSogTWFrZWZpbGUuaW4uaW46IFVwZ3JhZGUgdG8gZ2V0dGV4dC0wLjE4LjEuCisKKzIwMTAtMTAtMDUgIGdldHRleHRpemUgIDxidWctZ251LWdldHRleHRAZ251Lm9yZz4KKworCSogTWFrZWZpbGUuaW4uaW46IFVwZ3JhZGUgdG8gZ2V0dGV4dC0wLjE4LjEuCisKKzIwMTAtMTAtMDUgIGdldHRleHRpemUgIDxidWctZ251LWdldHRleHRAZ251Lm9yZz4KKworCSogTWFrZWZpbGUuaW4uaW46IFVwZ3JhZGUgdG8gZ2V0dGV4dC0wLjE4LjEuCisKKzIwMTAtMTAtMDUgIGdldHRleHRpemUgIDxidWctZ251LWdldHRleHRAZ251Lm9yZz4KKworCSogTWFrZWZpbGUuaW4uaW46IFVwZ3JhZGUgdG8gZ2V0dGV4dC0wLjE4LjEuCisKKzIwMTAtMTAtMDUgIGdldHRleHRpemUgIDxidWctZ251LWdldHRleHRAZ251Lm9yZz4KKworCSogTWFrZWZpbGUuaW4uaW46IFVwZ3JhZGUgdG8gZ2V0dGV4dC0wLjE4LjEuCisKKzIwMTAtMTAtMDUgIGdldHRleHRpemUgIDxidWctZ251LWdldHRleHRAZ251Lm9yZz4KKworCSogTWFrZWZpbGUuaW4uaW46IFVwZ3JhZGUgdG8gZ2V0dGV4dC0wLjE4LjEuCisKKzIwMTAtMTAtMDUgIGdldHRleHRpemUgIDxidWctZ251LWdldHRleHRAZ251Lm9yZz4KKworCSogTWFrZWZpbGUuaW4uaW46IFVwZ3JhZGUgdG8gZ2V0dGV4dC0wLjE4LjEuCisKKzIwMTAtMTAtMDUgIGdldHRleHRpemUgIDxidWctZ251LWdldHRleHRAZ251Lm9yZz4KKworCSogTWFrZWZpbGUuaW4uaW46IFVwZ3JhZGUgdG8gZ2V0dGV4dC0wLjE4LjEuCisKKzIwMTAtMTAtMDQgIGdldHRleHRpemUgIDxidWctZ251LWdldHRleHRAZ251Lm9yZz4KKworCSogTWFrZWZpbGUuaW4uaW46IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xOC4xLgorCSogYm9sZHF1b3Quc2VkOiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTguMS4KKwkqIGVuQGJvbGRxdW90LmhlYWRlcjogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE4LjEuCisJKiBlbkBxdW90LmhlYWRlcjogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE4LjEuCisJKiBpbnNlcnQtaGVhZGVyLnNpbjogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE4LjEuCisJKiBxdW90LnNlZDogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE4LjEuCisJKiByZW1vdmUtcG90Y2RhdGUuc2luOiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTguMS4KKwkqIFJ1bGVzLXF1b3Q6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xOC4xLgorCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvcG8vTElOR1VBUyBiL2F2YWhpLTAuNi4zMS9wby9MSU5HVUFTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1MjYyMzUKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvcG8vTElOR1VBUwpAQCAtMCwwICsxLDMzIEBACitiZworY2EKK2NzCitkYQorZGUKK2VsCitlbl9BVQorZW5fQ0EKK2VuX0dCCitlbl9OWgorZXMKK2ZpCitmbworZnIKK2dsCitoZQoraHUKK2lkCitpdAoramEKK21zCitubAorcGwKK3B0X0JSCitybworcnUKK3NsCitzcgorc3JAbGF0aW4KK3N2Cit1aworemhfQ04KK3poX1RXCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvcG8vTWFrZWZpbGUuaW4uaW4gYi9hdmFoaS0wLjYuMzEvcG8vTWFrZWZpbGUuaW4uaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWViNGZlOAotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9wby9NYWtlZmlsZS5pbi5pbgpAQCAtMCwwICsxLDIxNyBAQAorIyBNYWtlZmlsZSBmb3IgcHJvZ3JhbSBzb3VyY2UgZGlyZWN0b3J5IGluIEdOVSBOTFMgdXRpbGl0aWVzIHBhY2thZ2UuCisjIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiwgMTk5NyBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBnbnUuYWkubWl0LmVkdT4KKyMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDggUm9kbmV5IERhd2VzIDxkb2JleS5wd25zQGdtYWlsLmNvbT4KKyMKKyMgVGhpcyBmaWxlIG1heSBiZSBjb3BpZWQgYW5kIHVzZWQgZnJlZWx5IHdpdGhvdXQgcmVzdHJpY3Rpb25zLiAgSXQgbWF5CisjIGJlIHVzZWQgaW4gcHJvamVjdHMgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgdW5kZXIgYSBHTlUgUHVibGljIExpY2Vuc2UsCisjIGJ1dCB3aGljaCBzdGlsbCB3YW50IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdOVSBnZXR0ZXh0IGZ1bmN0aW9uYWxpdHkuCisjCisjIC0gTW9kaWZpZWQgYnkgT3dlbiBUYXlsb3IgPG90YXlsb3JAcmVkaGF0LmNvbT4gdG8gdXNlIEdFVFRFWFRfUEFDS0FHRQorIyAgIGluc3RlYWQgb2YgUEFDS0FHRSBhbmQgdG8gbG9vayBmb3IgcG8ydGJsIGluIC4vIG5vdCBpbiBpbnRsLworIworIyAtIE1vZGlmaWVkIGJ5IGphY29iIGJlcmttYW4gPGphY29iQHhpbWlhbi5jb20+IHRvIGluc3RhbGwKKyMgICBNYWtlZmlsZS5pbi5pbiBhbmQgcG8ydGJsLnNlZC5pbiBmb3IgdXNlIHdpdGggZ2xpYi1nZXR0ZXh0aXplCisjCisjIC0gTW9kaWZpZWQgYnkgUm9kbmV5IERhd2VzIDxkb2JleS5wd25zQGdtYWlsLmNvbT4gZm9yIHVzZSB3aXRoIGludGx0b29sCisjCisjIFdlIGhhdmUgdGhlIGZvbGxvd2luZyBsaW5lIGZvciB1c2UgYnkgaW50bHRvb2xpemU6CisjIElOVExUT09MX01BS0VGSUxFCisKK0dFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACitQQUNLQUdFID0gQFBBQ0tBR0VACitWRVJTSU9OID0gQFZFUlNJT05ACisKK1NIRUxMID0gQFNIRUxMQAorCitzcmNkaXIgPSBAc3JjZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK1ZQQVRIID0gQHNyY2RpckAKKworcHJlZml4ID0gQHByZWZpeEAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitsaWJkaXIgPSBAbGliZGlyQAorREFUQURJUk5BTUUgPSBAREFUQURJUk5BTUVACitpdGxvY2FsZWRpciA9ICQocHJlZml4KS8kKERBVEFESVJOQU1FKS9sb2NhbGUKK3N1YmRpciA9IHBvCitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACisjIEF1dG9tYWtlID49IDEuOCBwcm92aWRlcyBAbWtkaXJfcEAuCisjIFVudGlsIGl0IGNhbiBiZSBzdXBwb3NlZCwgdXNlIHRoZSBzYWZlIGZhbGxiYWNrOgorbWtkaXJfcCA9ICQoaW5zdGFsbF9zaCkgLWQKKworSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKKworR01TR0ZNVCA9IEBHTVNHRk1UQAorTVNHRk1UID0gQE1TR0ZNVEAKK1hHRVRURVhUID0gQFhHRVRURVhUQAorSU5UTFRPT0xfVVBEQVRFID0gQElOVExUT09MX1VQREFURUAKK0lOVExUT09MX0VYVFJBQ1QgPSBASU5UTFRPT0xfRVhUUkFDVEAKK01TR01FUkdFID0gSU5UTFRPT0xfRVhUUkFDVD0kKElOVExUT09MX0VYVFJBQ1QpIFhHRVRURVhUPSQoWEdFVFRFWFQpIHNyY2Rpcj0kKHNyY2RpcikgJChJTlRMVE9PTF9VUERBVEUpIC0tZ2V0dGV4dC1wYWNrYWdlICQoR0VUVEVYVF9QQUNLQUdFKSAtLWRpc3QKK0dFTlBPVCAgID0gSU5UTFRPT0xfRVhUUkFDVD0kKElOVExUT09MX0VYVFJBQ1QpIFhHRVRURVhUPSQoWEdFVFRFWFQpIHNyY2Rpcj0kKHNyY2RpcikgJChJTlRMVE9PTF9VUERBVEUpIC0tZ2V0dGV4dC1wYWNrYWdlICQoR0VUVEVYVF9QQUNLQUdFKSAtLXBvdAorCitBTExfTElOR1VBUyA9IEBBTExfTElOR1VBU0AKKworUE9fTElOR1VBUz0kKHNoZWxsIGlmIHRlc3QgLXIgJChzcmNkaXIpL0xJTkdVQVM7IHRoZW4gZ3JlcCAtdiAiXlwjIiAkKHNyY2RpcikvTElOR1VBUzsgZWxzZSBlY2hvICIkKEFMTF9MSU5HVUFTKSI7IGZpKQorCitVU0VSX0xJTkdVQVM9JChzaGVsbCBpZiB0ZXN0IC1uICIkKExJTkdVQVMpIjsgdGhlbiBMTElOR1VBUz0iJChMSU5HVUFTKSI7IEFMSU5HVUFTPSIkKEFMTF9MSU5HVUFTKSI7IGZvciBsYW5nIGluICQkTExJTkdVQVM7IGRvIGlmIHRlc3QgLW4gImBncmVwIFxeJCRsYW5nJCQgJChzcmNkaXIpL0xJTkdVQVMgMj4vZGV2L251bGxgIiAtbyAtbiAiYGVjaG8gJCRBTElOR1VBU3x0ciAnICcgJ1xuJ3xncmVwIFxeJCRsYW5nJCRgIjsgdGhlbiBwcmludGYgIiQkbGFuZyAiOyBmaTsgZG9uZTsgZmkpCisKK1VTRV9MSU5HVUFTPSQoc2hlbGwgaWYgdGVzdCAtbiAiJChVU0VSX0xJTkdVQVMpIiAtbyAtbiAiJChMSU5HVUFTKSI7IHRoZW4gTExJTkdVQVM9IiQoVVNFUl9MSU5HVUFTKSI7IGVsc2UgaWYgdGVzdCAtbiAiJChQT19MSU5HVUFTKSI7IHRoZW4gTExJTkdVQVM9IiQoUE9fTElOR1VBUykiOyBlbHNlIExMSU5HVUFTPSIkKEFMTF9MSU5HVUFTKSI7IGZpOyBmaTsgZm9yIGxhbmcgaW4gJCRMTElOR1VBUzsgZG8gcHJpbnRmICIkJGxhbmcgIjsgZG9uZSkKKworUE9GSUxFUz0kKHNoZWxsIExJTkdVQVM9IiQoUE9fTElOR1VBUykiOyBmb3IgbGFuZyBpbiAkJExJTkdVQVM7IGRvIHByaW50ZiAiJCRsYW5nLnBvICI7IGRvbmUpCisKK0RJU1RGSUxFUyA9IE1ha2VmaWxlLmluLmluIFBPVEZJTEVTLmluICQoUE9GSUxFUykKK0VYVFJBX0RJU1RGSUxFUyA9IENoYW5nZUxvZyBQT1RGSUxFUy5za2lwIE1ha2V2YXJzIExJTkdVQVMKKworUE9URklMRVMgPSBcCisjIFRoaXMgY29tbWVudCBnZXRzIHN0cmlwcGVkIG91dAorCitDQVRBTE9HUz0kKHNoZWxsIExJTkdVQVM9IiQoVVNFX0xJTkdVQVMpIjsgZm9yIGxhbmcgaW4gJCRMSU5HVUFTOyBkbyBwcmludGYgIiQkbGFuZy5nbW8gIjsgZG9uZSkKKworLlNVRkZJWEVTOgorLlNVRkZJWEVTOiAucG8gLnBveCAuZ21vIC5tbyAubXNnIC5jYXQKKworLnBvLnBveDoKKwkkKE1BS0UpICQoR0VUVEVYVF9QQUNLQUdFKS5wb3QKKwkkKE1TR01FUkdFKSAkPCAkKEdFVFRFWFRfUEFDS0FHRSkucG90IC1vICQqLnBveAorCisucG8ubW86CisJJChNU0dGTVQpIC1vICRAICQ8CisKKy5wby5nbW86CisJZmlsZT1gZWNobyAkKiB8IHNlZCAncywuKi8sLCdgLmdtbyBcCisJICAmJiBybSAtZiAkJGZpbGUgJiYgJChHTVNHRk1UKSAtbyAkJGZpbGUgJDwKKworLnBvLmNhdDoKKwlzZWQgLWYgLi4vaW50bC9wbzJtc2cuc2VkIDwgJDwgPiAkKi5tc2cgXAorCSAgJiYgcm0gLWYgJEAgJiYgZ2VuY2F0ICRAICQqLm1zZworCisKK2FsbDogYWxsLUBVU0VfTkxTQAorCithbGwteWVzOiAkKENBVEFMT0dTKQorYWxsLW5vOgorCiskKEdFVFRFWFRfUEFDS0FHRSkucG90OiAkKFBPVEZJTEVTKQorCSQoR0VOUE9UKQorCitpbnN0YWxsOiBpbnN0YWxsLWRhdGEKK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLUBVU0VfTkxTQAoraW5zdGFsbC1kYXRhLW5vOiBhbGwKK2luc3RhbGwtZGF0YS15ZXM6IGFsbAorCWxpbmd1YXM9IiQoVVNFX0xJTkdVQVMpIjsgXAorCWZvciBsYW5nIGluICQkbGluZ3VhczsgZG8gXAorCSAgZGlyPSQoREVTVERJUikkKGl0bG9jYWxlZGlyKS8kJGxhbmcvTENfTUVTU0FHRVM7IFwKKwkgICQobWtkaXJfcCkgJCRkaXI7IFwKKwkgIGlmIHRlc3QgLXIgJCRsYW5nLmdtbzsgdGhlbiBcCisJICAgICQoSU5TVEFMTF9EQVRBKSAkJGxhbmcuZ21vICQkZGlyLyQoR0VUVEVYVF9QQUNLQUdFKS5tbzsgXAorCSAgICBlY2hvICJpbnN0YWxsaW5nICQkbGFuZy5nbW8gYXMgJCRkaXIvJChHRVRURVhUX1BBQ0tBR0UpLm1vIjsgXAorCSAgZWxzZSBcCisJICAgICQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvJCRsYW5nLmdtbyAkJGRpci8kKEdFVFRFWFRfUEFDS0FHRSkubW87IFwKKwkgICAgZWNobyAiaW5zdGFsbGluZyAkKHNyY2RpcikvJCRsYW5nLmdtbyBhcyIgXAorCQkgIiQkZGlyLyQoR0VUVEVYVF9QQUNLQUdFKS5tbyI7IFwKKwkgIGZpOyBcCisJICBpZiB0ZXN0IC1yICQkbGFuZy5nbW8ubTsgdGhlbiBcCisJICAgICQoSU5TVEFMTF9EQVRBKSAkJGxhbmcuZ21vLm0gJCRkaXIvJChHRVRURVhUX1BBQ0tBR0UpLm1vLm07IFwKKwkgICAgZWNobyAiaW5zdGFsbGluZyAkJGxhbmcuZ21vLm0gYXMgJCRkaXIvJChHRVRURVhUX1BBQ0tBR0UpLm1vLm0iOyBcCisJICBlbHNlIFwKKwkgICAgaWYgdGVzdCAtciAkKHNyY2RpcikvJCRsYW5nLmdtby5tIDsgdGhlbiBcCisJICAgICAgJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS8kJGxhbmcuZ21vLm0gXAorCQkkJGRpci8kKEdFVFRFWFRfUEFDS0FHRSkubW8ubTsgXAorCSAgICAgIGVjaG8gImluc3RhbGxpbmcgJChzcmNkaXIpLyQkbGFuZy5nbW8ubSBhcyIgXAorCQkgICAiJCRkaXIvJChHRVRURVhUX1BBQ0tBR0UpLm1vLm0iOyBcCisJICAgIGVsc2UgXAorCSAgICAgIHRydWU7IFwKKwkgICAgZmk7IFwKKwkgIGZpOyBcCisJZG9uZQorCisjIEVtcHR5IHN0dWJzIHRvIHNhdGlzZnkgYXJjaGFpYyBhdXRvbWFrZSBuZWVkcworZHZpIGluZm8gY3RhZ3MgdGFncyBDVEFHUyBUQUdTIElEOgorCisjIERlZmluZSB0aGlzIGFzIGVtcHR5IHVudGlsIEkgZm91bmQgYSB1c2VmdWwgYXBwbGljYXRpb24uCitpbnN0YWxsLWV4ZWMgaW5zdGFsbGNoZWNrOgorCit1bmluc3RhbGw6CisJbGluZ3Vhcz0iJChVU0VfTElOR1VBUykiOyBcCisJZm9yIGxhbmcgaW4gJCRsaW5ndWFzOyBkbyBcCisJICBybSAtZiAkKERFU1RESVIpJChpdGxvY2FsZWRpcikvJCRsYW5nL0xDX01FU1NBR0VTLyQoR0VUVEVYVF9QQUNLQUdFKS5tbzsgXAorCSAgcm0gLWYgJChERVNURElSKSQoaXRsb2NhbGVkaXIpLyQkbGFuZy9MQ19NRVNTQUdFUy8kKEdFVFRFWFRfUEFDS0FHRSkubW8ubTsgXAorCWRvbmUKKworY2hlY2s6IGFsbCAkKEdFVFRFWFRfUEFDS0FHRSkucG90CisJcm0gLWYgbWlzc2luZyBub3RleGlzdAorCXNyY2Rpcj0kKHNyY2RpcikgJChJTlRMVE9PTF9VUERBVEUpIC1tCisJaWYgWyAtciBtaXNzaW5nIC1vIC1yIG5vdGV4aXN0IF07IHRoZW4gXAorCSAgZXhpdCAxOyBcCisJZmkKKworbW9zdGx5Y2xlYW46CisJcm0gLWYgKi5wb3ggJChHRVRURVhUX1BBQ0tBR0UpLnBvdCAqLm9sZC5wbyBjYXQtaWQtdGJsLnRtcAorCXJtIC1mIC5pbnRsdG9vbC1tZXJnZS1jYWNoZQorCitjbGVhbjogbW9zdGx5Y2xlYW4KKworZGlzdGNsZWFuOiBjbGVhbgorCXJtIC1mIE1ha2VmaWxlIE1ha2VmaWxlLmluIFBPVEZJTEVTIHN0YW1wLWl0CisJcm0gLWYgKi5tbyAqLm1zZyAqLmNhdCAqLmNhdC5tICouZ21vCisKK21haW50YWluZXItY2xlYW46IGRpc3RjbGVhbgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZTsiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorCXJtIC1mIE1ha2VmaWxlLmluLmluCisKK2Rpc3RkaXIgPSAuLi8kKFBBQ0tBR0UpLSQoVkVSU0lPTikvJChzdWJkaXIpCitkaXN0IGRpc3RkaXI6ICQoRElTVEZJTEVTKQorCWRpc3RzPSIkKERJU1RGSUxFUykiOyBcCisJZXh0cmFfZGlzdHM9IiQoRVhUUkFfRElTVEZJTEVTKSI7IFwKKwlmb3IgZmlsZSBpbiAkJGV4dHJhX2Rpc3RzOyBkbyBcCisJICB0ZXN0IC1mICQoc3JjZGlyKS8kJGZpbGUgJiYgZGlzdHM9IiQkZGlzdHMgJChzcmNkaXIpLyQkZmlsZSI7IFwKKwlkb25lOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0czsgZG8gXAorCSAgdGVzdCAtZiAkJGZpbGUgfHwgZmlsZT0iJChzcmNkaXIpLyQkZmlsZSI7IFwKKwkgIGxuICQkZmlsZSAkKGRpc3RkaXIpIDI+IC9kZXYvbnVsbCBcCisJICAgIHx8IGNwIC1wICQkZmlsZSAkKGRpc3RkaXIpOyBcCisJZG9uZQorCit1cGRhdGUtcG86IE1ha2VmaWxlCisJJChNQUtFKSAkKEdFVFRFWFRfUEFDS0FHRSkucG90CisJdG1wZGlyPWBwd2RgOyBcCisJbGluZ3Vhcz0iJChVU0VfTElOR1VBUykiOyBcCisJZm9yIGxhbmcgaW4gJCRsaW5ndWFzOyBkbyBcCisJICBlY2hvICIkJGxhbmc6IjsgXAorCSAgcmVzdWx0PSJgJChNU0dNRVJHRSkgLW8gJCR0bXBkaXIvJCRsYW5nLm5ldy5wbyAkJGxhbmdgIjsgXAorCSAgaWYgJCRyZXN1bHQ7IHRoZW4gXAorCSAgICBpZiBjbXAgJChzcmNkaXIpLyQkbGFuZy5wbyAkJHRtcGRpci8kJGxhbmcubmV3LnBvID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCisJICAgICAgcm0gLWYgJCR0bXBkaXIvJCRsYW5nLm5ldy5wbzsgXAorICAgICAgICAgICAgZWxzZSBcCisJICAgICAgaWYgbXYgLWYgJCR0bXBkaXIvJCRsYW5nLm5ldy5wbyAkJGxhbmcucG87IHRoZW4gXAorCSAgICAgICAgOjsgXAorCSAgICAgIGVsc2UgXAorCSAgICAgICAgZWNobyAibXNnbWVyZ2UgZm9yICQkbGFuZy5wbyBmYWlsZWQ6IGNhbm5vdCBtb3ZlICQkdG1wZGlyLyQkbGFuZy5uZXcucG8gdG8gJCRsYW5nLnBvIiAxPiYyOyBcCisJICAgICAgICBybSAtZiAkJHRtcGRpci8kJGxhbmcubmV3LnBvOyBcCisJICAgICAgICBleGl0IDE7IFwKKwkgICAgICBmaTsgXAorCSAgICBmaTsgXAorCSAgZWxzZSBcCisJICAgIGVjaG8gIm1zZ21lcmdlIGZvciAkJGxhbmcuZ21vIGZhaWxlZCEiOyBcCisJICAgIHJtIC1mICQkdG1wZGlyLyQkbGFuZy5uZXcucG87IFwKKwkgIGZpOyBcCisJZG9uZQorCitNYWtlZmlsZSBQT1RGSUxFUzogc3RhbXAtaXQKKwlAaWYgdGVzdCAhIC1mICRAOyB0aGVuIFwKKwkgIHJtIC1mIHN0YW1wLWl0OyBcCisJICAkKE1BS0UpIHN0YW1wLWl0OyBcCisJZmkKKworc3RhbXAtaXQ6IE1ha2VmaWxlLmluLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzIFBPVEZJTEVTLmluCisJY2QgJCh0b3BfYnVpbGRkaXIpIFwKKwkgICYmIENPTkZJR19GSUxFUz0kKHN1YmRpcikvTWFrZWZpbGUuaW4gQ09ORklHX0hFQURFUlM9IENPTkZJR19MSU5LUz0gXAorCSAgICAgICAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMKKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIG5vdCB0byBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL3BvL1BPVEZJTEVTLmluIGIvYXZhaGktMC42LjMxL3BvL1BPVEZJTEVTLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNWY2NGQKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvcG8vUE9URklMRVMuaW4KQEAgLTAsMCArMSwxMyBAQAorIyBMaXN0IG9mIHNvdXJjZSBmaWxlcyB3aGljaCBjb250YWluIHRyYW5zbGF0YWJsZSBzdHJpbmdzLgorYXZhaGktY29tbW9uL2Vycm9yLmMKK1t0eXBlOiBnZXR0ZXh0L2dsYWRlXWF2YWhpLWRpc2NvdmVyLXN0YW5kYWxvbmUvYXZhaGktZGlzY292ZXIudWkKK2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5kZXNrdG9wLmluLmluCithdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHkKK2F2YWhpLXVpL2F2YWhpLXVpLmMKK2F2YWhpLXVpL2Jzc2guYworYXZhaGktdWkvYnNzaC5kZXNrdG9wLmluLmluCithdmFoaS11aS9idm5jLmRlc2t0b3AuaW4uaW4KK2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jCithdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmMKK2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYworYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvcG8vUE9URklMRVMuc2tpcCBiL2F2YWhpLTAuNi4zMS9wby9QT1RGSUxFUy5za2lwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlZTBlZjQKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvcG8vUE9URklMRVMuc2tpcApAQCAtMCwwICsxLDQgQEAKK2F2YWhpLXVpL2Jzc2guZGVza3RvcC5pbgorYXZhaGktdWkvYnZuYy5kZXNrdG9wLmluCit0ZXN0cy9jLXBsdXMtcGx1cy10ZXN0LWdlbi5weQorYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLmRlc2t0b3AuaW4KZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9wby9iZy5wbyBiL2F2YWhpLTAuNi4zMS9wby9iZy5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjBlYjZkCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL3BvL2JnLnBvCkBAIC0wLDAgKzEsODYwIEBACisjIEJ1bGdhcmlhbiB0cmFuc2xhdGlvbiBvZiBhdmFoaSBwby1maWxlLgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBhdmFoaSBwYWNrYWdlLgorIyBBbGV4YW5kZXIgU2hvcG92IDxhc2hAa2FtYmFuYXJpYS5vcmc+LCAyMDEwLgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogYXZhaGkgbWFzdGVyXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDExLTA0LTAyIDAzOjIzKzAyMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDEwLTAzLTAxIDA3OjU1KzAyMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEFsZXhhbmRlciBTaG9wb3YgPGFzaEBrYW1iYW5hcmlhLm9yZz5cbiIKKyJMYW5ndWFnZS1UZWFtOiBCdWxnYXJpYW4gPGRpY3RAZnNhLWJnLm9yZz5cbiIKKyJMYW5ndWFnZTogYmdcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD1uICE9IDE7XG4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjMwCittc2dpZCAiT0siCittc2dzdHIgItCU0L7QsdGA0LUiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjMxCittc2dpZCAiT3BlcmF0aW9uIGZhaWxlZCIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdCwINC+0L/QtdGA0LDRhtC40Y8iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjMyCittc2dpZCAiQmFkIHN0YXRlIgorbXNnc3RyICLQm9C+0YjQviDRgdGK0YHRgtC+0Y/QvdC40LUiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjMzCittc2dpZCAiSW52YWxpZCBob3N0IG5hbWUiCittc2dzdHIgItCd0LXQv9GA0LDQstC40LvQvdC+INC40LzQtSDQvdCwINC80LDRiNC40L3QsCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzQKK21zZ2lkICJJbnZhbGlkIGRvbWFpbiBuYW1lIgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70L3QviDQuNC80LUg0L3QsCDQtNC+0LzQtdC50L0iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM1Cittc2dpZCAiTm8gc3VpdGFibGUgbmV0d29yayBwcm90b2NvbCBhdmFpbGFibGUiCittc2dzdHIgItCb0LjQv9GB0LLQsCDQv9C+0LTRhdC+0LTRj9GJINC80YDQtdC20L7QstC4INC/0YDQvtGC0L7QutC+0LsiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM2Cittc2dpZCAiSW52YWxpZCBETlMgVFRMIgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70L3QviDQstGA0LXQvNC1INC30LAg0LbQuNCy0L7RgiDQt9CwIEROUyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzcKK21zZ2lkICJSZXNvdXJjZSByZWNvcmQga2V5IGlzIHBhdHRlcm4iCittc2dzdHIgItCa0LvRjtGH0YrRgiDQt9CwINC30LDQv9C40YEg0L3QsCDRgNC10YHRg9GA0YEg0LUg0YjQsNCx0LvQvtC9IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozOAorbXNnaWQgIkxvY2FsIG5hbWUgY29sbGlzaW9uIgorbXNnc3RyICLQodGK0LLQv9Cw0LTQtdC90LjQtSDQvdCwINC70L7QutCw0LvQvdC4INC40LzQtdC90LAiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM5Cittc2dpZCAiSW52YWxpZCByZWNvcmQiCittc2dzdHIgItCd0LXQv9GA0LDQstC40LvQtdC9INC30LDQv9C40YEiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQxCittc2dpZCAiSW52YWxpZCBzZXJ2aWNlIG5hbWUiCittc2dzdHIgItCd0LXQv9GA0LDQstC40LvQvdC+INC40LzQtSDQvdCwINGD0YHQu9GD0LPQsCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDIKK21zZ2lkICJJbnZhbGlkIHNlcnZpY2UgdHlwZSIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9C10L0g0LLQuNC0INGD0YHQu9GD0LPQsCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDMKK21zZ2lkICJJbnZhbGlkIHBvcnQgbnVtYmVyIgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70LXQvSDQvdC+0LzQtdGAINC90LAg0L/QvtGA0YIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQ0Cittc2dpZCAiSW52YWxpZCByZWNvcmQga2V5IgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70LXQvSDQutC70Y7RhyDQt9CwINC30LDQv9C40YEiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQ1Cittc2dpZCAiSW52YWxpZCBhZGRyZXNzIgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70LXQvSDQsNC00YDQtdGBIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NgorbXNnaWQgIlRpbWVvdXQgcmVhY2hlZCIKK21zZ3N0ciAi0JLRgNC10LzQtdGC0L4g0LjQt9GC0LXRh9C1IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NworbXNnaWQgIlRvbyBtYW55IGNsaWVudHMiCittc2dzdHIgItCf0YDQtdC60LDQu9C10L3QviDQvNC90L7Qs9C+INC60LvQuNC10L3RgtC4IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0OAorbXNnaWQgIlRvbyBtYW55IG9iamVjdHMiCittc2dzdHIgItCf0YDQtdC60LDQu9C10L3QviDQvNC90L7Qs9C+INC+0LHQtdC60YLQuCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDkKK21zZ2lkICJUb28gbWFueSBlbnRyaWVzIgorbXNnc3RyICLQn9GA0LXQutCw0LvQtdC90L4g0LzQvdC+0LPQviDQt9Cw0L/QuNGB0LgiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjUwCittc2dpZCAiT1MgRXJyb3IiCittc2dzdHIgItCT0YDQtdGI0LrQsCDQvdCwINC+0L/QtdGA0LDRhtC40L7QvdC90LDRgtCwINGB0LjRgdGC0LXQvNCwIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1MgorbXNnaWQgIkFjY2VzcyBkZW5pZWQiCittc2dzdHIgItCU0L7RgdGC0YrQv9GK0YIg0LUg0L7RgtC60LDQt9Cw0L0iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjUzCittc2dpZCAiSW52YWxpZCBvcGVyYXRpb24iCittc2dzdHIgItCd0LXQv9GA0LDQstC40LvQvdCwINC+0L/QtdGA0LDRhtC40Y8iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU0Cittc2dpZCAiQW4gdW5leHBlY3RlZCBELUJ1cyBlcnJvciBvY2N1cmVkIgorbXNnc3RyICLQndC10L7Rh9Cw0LrQstCw0L3QsCDQs9GA0LXRiNC60LAg0L7RgiBELUJ1cyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTUKK21zZ2lkICJEYWVtb24gY29ubmVjdGlvbiBmYWlsZWQiCittc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QsCDQstGA0YrQt9C60LAg0YEg0LTQtdC80L7QvdCwIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1NgorbXNnaWQgIk1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgItCd0LXQtNC+0YHRgtCw0YLRitGH0L3QviDQv9Cw0LzQtdGCIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1NworbXNnaWQgIlRoZSBvYmplY3QgcGFzc2VkIGluIHdhcyBub3QgdmFsaWQiCittc2dzdHIgItCf0L7QtNCw0LTQtdC90LjRj9GCINC+0LHQtdC60YIg0LUg0L3QtdC/0YDQsNCy0LjQu9C10L0iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU4Cittc2dpZCAiRGFlbW9uIG5vdCBydW5uaW5nIgorbXNnc3RyICLQlNC10LzQvtC90YrRgiDQvdC1INC1INGB0YLQsNGA0YLQuNGA0LDQvSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTkKK21zZ2lkICJJbnZhbGlkIGludGVyZmFjZSBpbmRleCIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9C10L0g0LjQvdC00LXQutGBINC90LAg0LjQvdGC0LXRgNGE0LXQudGBIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2MAorbXNnaWQgIkludmFsaWQgcHJvdG9jb2wgc3BlY2lmaWNhdGlvbiIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9C90L4g0YPQutCw0LfQsNC9INC/0YDQvtGC0L7QutC+0LsiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjYxCittc2dpZCAiSW52YWxpZCBmbGFncyIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9C90Lgg0YTQu9Cw0LPQvtCy0LUiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjYzCittc2dpZCAiTm90IGZvdW5kIgorbXNnc3RyICLQndC1INC1INC90LDQvNC10YDQtdC90L4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY0Cittc2dpZCAiSW52YWxpZCBjb25maWd1cmF0aW9uIgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70L3QuCDQvdCw0YHRgtGA0L7QudC60LgiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY1Cittc2dpZCAiVmVyc2lvbiBtaXNtYXRjaCIKK21zZ3N0ciAi0KDQsNC30LvQuNC60LAg0LLRitCyINCy0LXRgNGB0LjQuNGC0LUiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY2Cittc2dpZCAiSW52YWxpZCBzZXJ2aWNlIHN1YnR5cGUiCittc2dzdHIgItCd0LXQv9GA0LDQstC40LvQtdC9INC/0L7QtNCy0LjQtCDQvdCwINGD0YHQu9GD0LPQsNGC0LAiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY3Cittc2dpZCAiSW52YWxpZCBwYWNrZXQiCittc2dzdHIgItCd0LXQv9GA0LDQstC40LvQtdC9INC/0LDQutC10YIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY4Cittc2dpZCAiSW52YWxpZCBETlMgcmV0dXJuIGNvZGUiCittc2dzdHIgItCd0LXQv9GA0LDQstC40LvQtdC9INC60L7QtCDQstGK0YDQvdCw0YIg0L7RgiBETlMiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY5Cittc2dpZCAiRE5TIGZhaWx1cmU6IEZPUk1FUlIiCittc2dzdHIgItCT0YDQtdGI0LrQsCDQvtGCIEROUzogRk9STUVSUiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzAKK21zZ2lkICJETlMgZmFpbHVyZTogU0VSVkZBSUwiCittc2dzdHIgItCT0YDQtdGI0LrQsCDQvtGCIEROUzogU0VSVkZBSUwiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjcxCittc2dpZCAiRE5TIGZhaWx1cmU6IE5YRE9NQUlOIgorbXNnc3RyICLQk9GA0LXRiNC60LAg0L7RgiBETlM6IE5YRE9NQUlOIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3MgorbXNnaWQgIkROUyBmYWlsdXJlOiBOT1RJTVAiCittc2dzdHIgItCT0YDQtdGI0LrQsCDQvtGCIEROUzogTk9USU1QIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3NAorbXNnaWQgIkROUyBmYWlsdXJlOiBSRUZVU0VEIgorbXNnc3RyICLQk9GA0LXRiNC60LAg0L7RgiBETlM6IFJFRlVTRUQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc1Cittc2dpZCAiRE5TIGZhaWx1cmU6IFlYRE9NQUlOIgorbXNnc3RyICLQk9GA0LXRiNC60LAg0L7RgiBETlM6IFlYRE9NQUlOIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3NgorbXNnaWQgIkROUyBmYWlsdXJlOiBZWFJSU0VUIgorbXNnc3RyICLQk9GA0LXRiNC60LAg0L7RgiBETlM6IFlYUlJTRVQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc3Cittc2dpZCAiRE5TIGZhaWx1cmU6IE5YUlJTRVQiCittc2dzdHIgItCT0YDQtdGI0LrQsCDQvtGCIEROUzogTlhSUlNFVCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzgKK21zZ2lkICJETlMgZmFpbHVyZTogTk9UQVVUSCIKK21zZ3N0ciAi0JPRgNC10YjQutCwINC+0YIgRE5TOiBOT1RBVVRIIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3OQorbXNnaWQgIkROUyBmYWlsdXJlOiBOT1RaT05FIgorbXNnc3RyICLQk9GA0LXRiNC60LAg0L7RgiBETlM6IE5PVFpPTkUiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjgwCittc2dpZCAiSW52YWxpZCBSREFUQSIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9C90Lgg0LTQsNC90L3QuCBSREFUQSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODEKK21zZ2lkICJJbnZhbGlkIEROUyB0eXBlIgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70LXQvSDQstC40LQgRE5TIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4MgorbXNnaWQgIkludmFsaWQgRE5TIGNsYXNzIgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70LXQvSDQutC70LDRgSBETlMiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjgzCittc2dpZCAiTm90IHN1cHBvcnRlZCIKK21zZ3N0ciAi0J3QtSDRgdC1INC/0L7QtNC00YrRgNC20LAiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjg1Cittc2dpZCAiTm90IHBlcm1pdHRlZCIKK21zZ3N0ciAi0J3QtSDQtSDQv9C+0LfQstC+0LvQtdC90L4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjg2Cittc2dpZCAiSW52YWxpZCBhcmd1bWVudCIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9C10L0g0LDRgNCz0YPQvNC10L3RgiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODcKK21zZ2lkICJJcyBlbXB0eSIKK21zZ3N0ciAi0JUg0L/RgNCw0LfQvdC+IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4OAorbXNnaWQgIlRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uIGlzIGludmFsaWQgYmVjYXVzZSByZWR1bmRhbnQiCittc2dzdHIgItCX0LDRj9Cy0LXQvdCw0YLQsCDQvtC/0LXRgNCw0YbQuNGPINC1INC40LfQu9C40YjQvdCwINC4INC30LDRgtC+0LLQsCDQvdC10L/RgNCw0LLQuNC70L3QsCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6OTQKK21zZ2lkICJJbnZhbGlkIEVycm9yIENvZGUiCittc2dzdHIgItCd0LXQv9GA0LDQstC40LvQtdC9INC60L7QtCDQvdCwINCz0YDQtdGI0LrQsCIKKworIzogLi4vYXZhaGktZGlzY292ZXItc3RhbmRhbG9uZS9hdmFoaS1kaXNjb3Zlci51aS5oOjEKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weTo3NgorbXNnaWQgIjxpPk5vIHNlcnZpY2UgY3VycmVudGx5IHNlbGVjdGVkLjwvaT4iCittc2dzdHIgIjxpPtCd0LUg0LUg0LjQt9Cx0YDQsNC90LAg0YPRgdC70YPQs9CwLjwvaT4iCisKKyM6IC4uL2F2YWhpLWRpc2NvdmVyLXN0YW5kYWxvbmUvYXZhaGktZGlzY292ZXIudWkuaDoyCittc2dpZCAiQXZhaGkgRGlzY292ZXJ5IgorbXNnc3RyICLQntGC0LrRgNC40LLQsNC90LUg0YEgQXZhaGkiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5kZXNrdG9wLmluLmluLmg6MQorbXNnaWQgIkF2YWhpIFplcm9jb25mIEJyb3dzZXIiCittc2dzdHIgItCf0YDQtdCz0LvQtdC0INC90LAg0YPQu9C10YHQvdC10L3QuNGC0LUg0YPRgdC70YPQs9C4INGBIEF2YWhpIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIuZGVza3RvcC5pbi5pbi5oOjIKK21zZ2lkICJCcm93c2UgZm9yIFplcm9jb25mIHNlcnZpY2VzIGF2YWlsYWJsZSBvbiB5b3VyIG5ldHdvcmsiCittc2dzdHIgItCf0YDQtdCz0LvQtdC0INC90LAg0YPQu9C10YHQvdC10L3QuNGC0LUg0YPRgdC70YPQs9C4IChaZXJvY29uZikg0LIg0LzRgNC10LbQsNGC0LAg0LLQuCIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIyNAorbXNnaWQgIlRYVCIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI2CisjLCBmdXp6eQorbXNnaWQgIlRYVCBEYXRhOiIKK21zZ3N0ciAi0JTQsNC90L3QuCDRgSDQstC40LQgVFhUIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI2CisjLCBmdXp6eQorbXNnaWQgImVtcHR5IgorbXNnc3RyICLQlSDQv9GA0LDQt9C90L4iCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMjgKKyMsIGZ1enp5Cittc2dpZCAiU2VydmljZSBUeXBlOiIKK21zZ3N0ciAi0JLQuNC0INGD0YHQu9GD0LPQsCIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIyOQorIywgZnV6enkKK21zZ2lkICJTZXJ2aWNlIE5hbWU6IgorbXNnc3RyICLQmNC80LUg0L3QsCDRg9GB0LvRg9Cz0LDRgtCwIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjMwCisjLCBmdXp6eQorbXNnaWQgIkRvbWFpbiBOYW1lOiIKK21zZ3N0ciAi0JTQvtC80LXQudC9IgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjMxCittc2dpZCAiSW50ZXJmYWNlOiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjMyCisjLCBmdXp6eQorbXNnaWQgIkFkZHJlc3M6IgorbXNnc3RyICLQkNC00YDQtdGBIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE4NQorbXNnaWQgIkJyb3dzZSBTZXJ2aWNlIFR5cGVzIgorbXNnc3RyICLQn9GA0LXQs9C70LXQtCDQvdCwINCy0LjQtNC+0LLQtdGC0LUg0YPRgdC70YPQs9C4IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE4NQorbXNnaWQgIkEgTlVMTCB0ZXJtaW5hdGVkIGxpc3Qgb2Ygc2VydmljZSB0eXBlcyB0byBicm93c2UgZm9yIgorbXNnc3RyICLQodC/0LjRgdGK0Log0LfQsNCy0YrRgNGI0LLQsNGJINGBIE5VTEwg0L3QsCDQstC40LTQvtCy0LXRgtC1INGD0YHQu9GD0LPQuCwg0LrQvtC40YLQviDQtNCwINGB0LUg0L/RgNC10LPQu9C10LTQsNGCIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE5MAorbXNnaWQgIkRvbWFpbiIKK21zZ3N0ciAi0JTQvtC80LXQudC9IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE5MAorbXNnaWQgIlRoZSBkb21haW4gdG8gYnJvd3NlIGluLCBvciBOVUxMIGZvciB0aGUgZGVmYXVsdCBkb21haW4iCittc2dzdHIgItCU0L7QvNC10LnQvdGK0YIsINCyINC60L7QudGC0L4g0LTQsCDQtSDQv9GA0LXQs9C70LXQtNGK0YIuIE5VTEwg0L7Qt9C90LDRh9Cw0LLQsCDRgdGC0LDQvdC00LDRgNGC0L3QuNGPINC00L7QvNC10LnQvSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxOTYKK21zZ2lkICJTZXJ2aWNlIFR5cGUiCittc2dzdHIgItCS0LjQtCDRg9GB0LvRg9Cz0LAiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTk2Cittc2dpZCAiVGhlIHNlcnZpY2UgdHlwZSBvZiB0aGUgc2VsZWN0ZWQgc2VydmljZSIKK21zZ3N0ciAi0JLQuNC00YrRgiDQvdCwINC40LfQsdGA0LDQvdCw0YLQsCDRg9GB0LvRg9Cz0LAiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjAyIC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTAyMworbXNnaWQgIlNlcnZpY2UgTmFtZSIKK21zZ3N0ciAi0JjQvNC1INC90LAg0YPRgdC70YPQs9Cw0YLQsCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMDIKK21zZ2lkICJUaGUgc2VydmljZSBuYW1lIG9mIHRoZSBzZWxlY3RlZCBzZXJ2aWNlIgorbXNnc3RyICLQmNC80LUg0L3QsCDQuNC30LHRgNCw0L3QsNGC0LAg0YPRgdC70YPQs9CwIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIwOAorbXNnaWQgIkFkZHJlc3MiCittc2dzdHIgItCQ0LTRgNC10YEiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjA4Cittc2dpZCAiVGhlIGFkZHJlc3Mgb2YgdGhlIHJlc29sdmVkIHNlcnZpY2UiCittc2dzdHIgItCQ0LTRgNC10YHRitGCINC90LAg0L7RgtC60YDQuNGC0LDRgtCwINGD0YHQu9GD0LPQsCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMTMKK21zZ2lkICJQb3J0IgorbXNnc3RyICLQn9C+0YDRgiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMTMKK21zZ2lkICJUaGUgSVAgcG9ydCBudW1iZXIgb2YgdGhlIHJlc29sdmVkIHNlcnZpY2UiCittc2dzdHIgItCf0L7RgNGC0YrRgiDQv9C+IElQINC90LAg0L7RgtC60YDQuNGC0LDRgtCwINGD0YHQu9GD0LPQsCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMTkKK21zZ2lkICJIb3N0IE5hbWUiCittc2dzdHIgItCY0LzQtSDQvdCwINC80LDRiNC40L3QsCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMTkKK21zZ2lkICJUaGUgaG9zdCBuYW1lIG9mIHRoZSByZXNvbHZlZCBzZXJ2aWNlIgorbXNnc3RyICLQmNC80LXRgtC+INC90LAg0LzQsNGI0LjQvdCw0YLQsCDQvdCwINC+0YLQutGA0LjRgtCw0YLQsCDRg9GB0LvRg9Cz0LAiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjI1Cittc2dpZCAiVFhUIERhdGEiCittc2dzdHIgItCU0LDQvdC90Lgg0YEg0LLQuNC0IFRYVCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMjUKK21zZ2lkICJUaGUgVFhUIGRhdGEgb2YgdGhlIHJlc29sdmVkIHNlcnZpY2UiCittc2dzdHIgItCU0LDQvdC90Lgg0YEg0LLQuNC0IFRYVCDQt9CwINC+0YLQutGA0LjRgtCw0YLQsCDRg9GB0LvRg9Cz0LAiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjMwCisjLCBmdXp6eQorbXNnaWQgIlJlc29sdmUgU2VydmljZSIKK21zZ3N0ciAi0J7RgtC60YDQuNCy0LDQvdC1INC90LAg0YPRgdC70YPQs9CwIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIzMAorbXNnaWQgIlJlc29sdmUgdGhlIHNlbGVjdGVkIHNlcnZpY2UgYXV0b21hdGljYWxseSBiZWZvcmUgcmV0dXJuaW5nIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjM2CisjLCBmdXp6eQorbXNnaWQgIlJlc29sdmUgU2VydmljZSBIb3N0IE5hbWUiCittc2dzdHIgItCe0YLQutGA0LjQstCw0L3QtSDQvdCwINC40LzQtdGC0L4g0L3QsCDQvNCw0YjQuNC90LDRgtCwINGBINGD0YHQu9GD0LPQsNGC0LAiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjM2Cittc2dpZCAiIgorIlJlc29sdmUgdGhlIGhvc3QgbmFtZSBvZiB0aGUgc2VsZWN0ZWQgc2VydmljZSBhdXRvbWF0aWNhbGx5IGJlZm9yZSByZXR1cm5pbmciCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyNDIKK21zZ2lkICJBZGRyZXNzIGZhbWlseSIKK21zZ3N0ciAi0KTQsNC80LjQu9C40Y8g0LDQtNGA0LXRgdC4IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjI0MgorbXNnaWQgIlRoZSBhZGRyZXNzIGZhbWlseSBmb3IgaG9zdCBuYW1lIHJlc29sdXRpb24iCittc2dzdHIgItCk0LDQvNC40LvQuNGP0YLQsCDQsNC00YDQtdGB0Lgg0LfQsCDQvtGC0LrRgNC40LLQsNC90LUg0L3QsCDQuNC80LUg0L3QsCDQvNCw0YjQuNC90LAiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MzI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWhpIGNsaWVudCBmYWlsdXJlOiAlcyIKK21zZ3N0ciAi0J/RgNC+0LHQu9C10Lwg0YEg0LrQu9C40LXQvdGC0LAg0L3QsCBBdmFoaTogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6Mzg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWhpIHJlc29sdmVyIGZhaWx1cmU6ICVzIgorbXNnc3RyICLQn9GA0L7QsdC70LXQvCDRgSDQvtGC0LrRgNC40LLQsNC90LXRgtC+INC90LAgQXZhaGk6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjUxOAorIywgYy1mb3JtYXQKK21zZ2lkICJCcm93c2luZyBmb3Igc2VydmljZSB0eXBlICVzIGluIGRvbWFpbiAlcyBmYWlsZWQ6ICVzIgorbXNnc3RyICLQndC10YPRgdC/0LXRiNC10L0g0L/RgNC10LPQu9C10LQg0LfQsCDRg9GB0LvRg9Cz0LAg0L7RgiDQstC40LTQsCAlcyDQsiDQtNC+0LzQtdC50L3QsCAlczogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NTE5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjE2OAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTY5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjE3OAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTc5Cittc2dpZCAibi9hIgorbXNnc3RyICLQvdGP0LzQsCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo2NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaGkgZG9tYWluIGJyb3dzZXIgZmFpbHVyZTogJXMiCittc2dzdHIgItCf0YDQvtCx0LvQtdC8INGBINC/0YDQtdCz0LvQtdC00LAg0L3QsCDQtNC+0LzQtdC50L3QsCDRgSBBdmFoaTogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6Njg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWFkIEF2YWhpIGRvbWFpbjogJXMiCittc2dzdHIgItCf0YDQvtCx0LvQtdC8INGBINC/0YDQvtGH0LjRgtCw0L3QtdGC0L4g0L3QsCDQtNC+0LzQtdC50L3QsCDRgSBBdmFoaTogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NzA2Cittc2dpZCAiQnJvd3NlIHNlcnZpY2UgdHlwZSBsaXN0IGlzIGVtcHR5ISIKK21zZ3N0ciAi0KHQv9C40YHRitC60YrRgiDRgSDRg9GB0LvRg9Cz0Lgg0LfQsCDQv9GA0LXQs9C70LXQtCDQtSDQv9GA0LDQt9C10L0hIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjcxNworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY29ubmVjdCB0byBBdmFoaSBzZXJ2ZXI6ICVzIgorbXNnc3RyICLQndC10YPRgdC/0LXRhSDQv9GA0Lgg0YHQstGK0YDQt9Cy0LDQvdC10YLQviDRgdGK0YEg0YHRitGA0LLRitGAINC90LAgQXZhaGk6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjczNQorbXNnaWQgIkJyb3dzaW5nIGZvciBzZXJ2aWNlcyBvbiA8Yj5sb2NhbCBuZXR3b3JrPC9iPjoiCittc2dzdHIgItCf0YDQtdCz0LvQtdC0INC90LAg0YPRgdC70YPQs9C40YLQtSDQsiA8Yj7Qu9C+0LrQsNC70L3QsNGC0LAg0LzRgNC10LbQsDwvYj46IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjczNworIywgYy1mb3JtYXQKK21zZ2lkICJCcm93c2luZyBmb3Igc2VydmljZXMgaW4gZG9tYWluIDxiPiVzPC9iPjoiCittc2dzdHIgItCf0YDQtdCz0LvQtdC0INC90LAg0YPRgdC70YPQs9C40YLQtSDQsiDQtNC+0LzQtdC50L3QsCA8Yj4lczwvYj46IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjc3MworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGJyb3dzZXIgZm9yICVzOiAlcyIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INGB0YrQt9C00LDQstCw0L3QtSDQvdCwINC60L7QvNC/0L7QvdC10L3RgiDQt9CwINC/0YDQtdCz0LvQtdC0INC90LAgJXM6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjkwMworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIHJlc29sdmVyIGZvciAlcyBvZiB0eXBlICVzIGluIGRvbWFpbiAlczogJXMiCittc2dzdHIgIiIKKyLQndC10YPRgdC/0LXRiNC90L4g0YHRitC30LTQsNCy0LDQvdC1INC90LAg0LrQvtC80L/QvtC90LXQvdGCINC30LAg0L7RgtC60YDQuNCy0LDQvdC1INC90LAgJXMg0L7RgiDQstC40LTQsCAlcyDQsiDQtNC+0LzQtdC50L3QsCAlczogIgorIiVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjk3OAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGRvbWFpbiBicm93c2VyOiAlcyIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INGB0YrQt9C00LDQstCw0L3QtSDQvdCwINC60L7QvNC/0L7QvdC10L3RgiDQt9CwINC/0YDQtdCz0LvQtdC0INC90LAg0LTQvtC80LXQudC9OiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo5ODkKK21zZ2lkICJDaGFuZ2UgZG9tYWluIgorbXNnc3RyICLQodC80Y/QvdCwINC90LAg0LTQvtC80LXQudC90LAiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTAzMSAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNjIKK21zZ2lkICJCcm93c2luZy4uLiIKK21zZ3N0ciAi0J/RgNC10LPQu9C10LTigKYiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTEyMAorbXNnaWQgIkluaXRpYWxpemluZy4uLiIKK21zZ3N0ciAi0JjQvdC40YbQuNCw0LvQuNC30LjRgNCw0L3QteKApiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTQ0Cittc2dpZCAiTG9jYXRpb24iCittc2dzdHIgItCc0LXRgdGC0L7Qv9C+0LvQvtC20LXQvdC40LUiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTE0OSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NTMKK21zZ2lkICJOYW1lIgorbXNnc3RyICLQmNC80LUiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTE1NCAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NTMKK21zZ2lkICJUeXBlIgorbXNnc3RyICLQktC40LQiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTE2NgorbXNnaWQgIl9Eb21haW4uLi4iCittc2dzdHIgIl/QlNC+0LzQtdC50L3igKYiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzo1NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgW29wdGlvbnNdXG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1zIC0tc3NoICAgICAgICAgICAgIEJyb3dzZSBTU0ggc2VydmVyc1xuIgorIiAgICAtdiAtLXZuYyAgICAgICAgICAgICBCcm93c2UgVk5DIHNlcnZlcnNcbiIKKyIgICAgLVMgLS1zaGVsbCAgICAgICAgICAgQnJvd3NlIGJvdGggU1NIIGFuZCBWTkNcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgVGhlIGRvbWFpbiB0byBicm93c2UgaW5cbiIKK21zZ3N0ciAiIgorIiVzIFvQvtC/0YbQuNC4XVxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICDQmNC30LLQtdC20LTQsNC90LUg0L3QsCDRgtCw0LfQuCDQv9C+0LzQvtGJXG4iCisiICAgIC1zIC0tc3NoICAgICAgICAgICAgINCf0YDQtdCz0LvQtdC0INC90LAg0YHRitGA0LLRitGA0LjRgtC1INC30LAgU1NIXG4iCisiICAgIC12IC0tdm5jICAgICAgICAgICAgINCf0YDQtdCz0LvQtdC0INC90LAg0YHRitGA0LLRitGA0LjRgtC1INC30LAgVk5DXG4iCisiICAgIC1TIC0tc2hlbGwgICAgICAgICAgINCf0YDQtdCz0LvQtdC0INC90LAg0YHRitGA0LLRitGA0LjRgtC1INC30LAgVk5DINC4IFNTSFxuIgorIiAgICAtZCAtLWRvbWFpbj3QlNCe0JzQldCZ0J0gICDQlNC+0LzQtdC50L3RitGCLCDQutC+0LnRgtC+INC00LAg0YHQtSDRgNCw0LfQs9C70LXQtNCwXG4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxMDEgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6Nzc1CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvbyBtYW55IGFyZ3VtZW50c1xuIgorbXNnc3RyICLQn9GA0LXQutCw0LvQtdC90L4g0LzQvdC+0LPQviDQsNGA0LPRg9C80LXQvdGC0LhcbiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE0OQorbXNnaWQgIkNob29zZSBTaGVsbCBTZXJ2ZXIiCittc2dzdHIgItCY0LfQsdC+0YAg0L3QsCDRgdGK0YDQstGK0YAg0LfQsCDQtNC+0YHRgtGK0L8iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNTEKK21zZ2lkICJEZXNrdG9wIgorbXNnc3RyICLQoSDQs9GA0LDRhNC40YfQvdCwINGB0YDQtdC00LAiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNTIKK21zZ2lkICJUZXJtaW5hbCIKK21zZ3N0ciAi0JfQsCDQutC+0LzQsNC90LTQtdC9INGA0LXQtCIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE1NgorbXNnaWQgIkNob29zZSBWTkMgc2VydmVyIgorbXNnc3RyICLQmNC30LHQvtGAINC90LAg0YHRitGA0LLRitGAINC30LAgVk5DIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTYxCittc2dpZCAiQ2hvb3NlIFNTSCBzZXJ2ZXIiCittc2dzdHIgItCY0LfQsdC+0YAg0L3QsCDRgdGK0YDQstGK0YAg0LfQsCBTU0giCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29ubmVjdGluZyB0byAnJXMnIC4uLlxuIgorbXNnc3RyICLQodCy0YrRgNC30LLQsNC90LUg0LrRitC8IOKAniVz4oCc4oCmXG4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoyNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhlY2xwKCkgZmFpbGVkOiAlc1xuIgorbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0LjQt9C/0YrQu9C90LXQvdC40LUg0L3QsCBleGVjbHAoKTogJXNcbiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5jZWxlZC5cbiIKK21zZ3N0ciAi0J7RgtC80Y/QvdCwLlxuIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmRlc2t0b3AuaW4uaW4uaDoxCittc2dpZCAiQXZhaGkgU1NIIFNlcnZlciBCcm93c2VyIgorbXNnc3RyICLQn9GA0LXQs9C70LXQtCDRgSBBdmFoaSDQvdCwINGB0YrRgNCy0YrRgNC40YLQtSDQt9CwIFNTSCIKKworIzogLi4vYXZhaGktdWkvYnNzaC5kZXNrdG9wLmluLmluLmg6MgorbXNnaWQgIkJyb3dzZSBmb3IgWmVyb2NvbmYtZW5hYmxlZCBTU0ggU2VydmVycyIKK21zZ3N0ciAi0J/RgNC10LPQu9C10LQg0L3QsCDRgdGK0YDQstGK0YDQuNGC0LUg0LfQsCBTU0gg0YEg0YPQu9C10YHQvdC10L3QuNC1IgorCisjOiAuLi9hdmFoaS11aS9idm5jLmRlc2t0b3AuaW4uaW4uaDoxCittc2dpZCAiQXZhaGkgVk5DIFNlcnZlciBCcm93c2VyIgorbXNnc3RyICLQn9GA0LXQs9C70LXQtCDRgSBBdmFoaSDQvdCwINGB0YrRgNCy0YrRgNC40YLQtSDQt9CwIFZOQyIKKworIzogLi4vYXZhaGktdWkvYnZuYy5kZXNrdG9wLmluLmluLmg6MgorbXNnaWQgIkJyb3dzZSBmb3IgWmVyb2NvbmYtZW5hYmxlZCBWTkMgU2VydmVycyIKK21zZ3N0ciAi0J/RgNC10LPQu9C10LQg0L3QsCDRgdGK0YDQstGK0YDQuNGC0LUg0LfQsCBWTkMg0YEg0YPQu9C10YHQvdC10L3QuNC1IgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoxMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiOiBBbGwgZm9yIG5vd1xuIgorbXNnc3RyICI6INCy0YHQuNGH0LrQuCDQt9CwINGB0LXQs9CwXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjExOAorIywgYy1mb3JtYXQKK21zZ2lkICI6IENhY2hlIGV4aGF1c3RlZFxuIgorbXNnc3RyICI6INC60LXRiNGK0YIg0LUg0LjQt9GH0LXRgNC/0LDQvVxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoyMzkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIHNlcnZpY2UgJyVzJyBvZiB0eXBlICclcycgaW4gZG9tYWluICclcyc6ICVzXG4iCittc2dzdHIgItCj0YHQu9GD0LPQsCDigJ4lc+KAnCDRgSDQstC40LQg4oCeJXPigJwg0L3QtSDQtSDQvtGC0LrRgNC40YLQsCDQsiDQtNC+0LzQtdC50L3QsCDigJ4lc+KAnDogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MzQwCisjLCBjLWZvcm1hdAorbXNnaWQgInNlcnZpY2VfYnJvd3NlciBmYWlsZWQ6ICVzXG4iCittc2dzdHIgItCf0YDQvtCx0LvQtdC8INGB0YrRgSBzZXJ2aWNlX2Jyb3dzZXI6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjM3OAorIywgYy1mb3JtYXQKK21zZ2lkICJhdmFoaV9zZXJ2aWNlX2Jyb3dzZXJfbmV3KCkgZmFpbGVkOiAlc1xuIgorbXNnc3RyICLQn9GA0L7QsdC70LXQvCDRgSBhdmFoaV9zZXJ2aWNlX2Jyb3dzZXJfbmV3KCk6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjQxNAorIywgYy1mb3JtYXQKK21zZ2lkICJzZXJ2aWNlX3R5cGVfYnJvd3NlciBmYWlsZWQ6ICVzXG4iCittc2dzdHIgItCf0YDQvtCx0LvQtdC8INGBIHNlcnZpY2VfdHlwZV9icm93c2VyOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo0NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXZhaGlfc2VydmljZV90eXBlX2Jyb3dzZXJfbmV3KCkgZmFpbGVkOiAlc1xuIgorbXNnc3RyICLQn9GA0L7QsdC70LXQvCDRgSBhdmFoaV9zZXJ2aWNlX3R5cGVfYnJvd3Nlcl9uZXcoKTogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTE5CisjLCBjLWZvcm1hdAorbXNnaWQgImF2YWhpX2RvbWFpbl9icm93c2VyX25ldygpIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAi0J/RgNC+0LHQu9C10Lwg0YEgYXZhaGlfZG9tYWluX2Jyb3dzZXJfbmV3KCk6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjUzNSAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6Mzk0CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjgwIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IHZlcnNpb24gc3RyaW5nOiAlc1xuIgorbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0LfQsNC/0LjRgtCy0LDQvdC1INC30LAg0L3QuNC30LAg0LfQsCDQstC10YDRgdC40Y/RgtCwOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NDAgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjM5OQorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI4NSAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTczCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBxdWVyeSBob3N0IG5hbWU6ICVzXG4iCittc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDQt9Cw0L/QuNGC0LLQsNC90LUg0LfQsCDQuNC80LXRgtC+INC90LAg0LzQsNGI0LjQvdCw0YLQsDogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTQ0IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo0MDMKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyODkgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE3NworIywgYy1mb3JtYXQKK21zZ2lkICJTZXJ2ZXIgdmVyc2lvbjogJXM7IEhvc3QgbmFtZTogJXNcbiIKK21zZ3N0ciAi0JLQtdGA0YHQuNGPINC90LAg0YHRitGA0LLRitGA0LA6ICVzLiDQmNC80LUg0L3QsCDQvNCw0YjQuNC90LDRgtCwOiAlc1xuIgorCisjLiBUcmFuc2xhdG9yczogVGhpcyBpcyBhIGNvbHVtbiBoZWFkaW5nIHdpdGggYWJicmV2aWF0aW9ucyBmb3IKKyMuICogICBFdmVudCAoKy8tKSwgTmV0d29yayBJbnRlcmZhY2UsIFByb3RvY29sIChJUHY0L3Y2KSwgRG9tYWluCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRSBJZmNlIFByb3QgRG9tYWluXG4iCittc2dzdHIgItCh0LHRgiDQmNC90YTRgSDQn9GA0YLQuiDQlNC+0LzQtdC50L1cbiIKKworIy4gVHJhbnNsYXRvcnM6IFRoaXMgaXMgYSBjb2x1bW4gaGVhZGluZyB3aXRoIGFiYnJldmlhdGlvbnMgZm9yCisjLiAqICAgRXZlbnQgKCsvLSksIE5ldHdvcmsgSW50ZXJmYWNlLCBQcm90b2NvbCAoSVB2NC92NiksIERvbWFpbgorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUgSWZjZSBQcm90ICUtKnMgJS0yMHMgRG9tYWluXG4iCittc2dzdHIgItCh0LHRgiDQmNC90YTRgSDQn9GA0YLQuiAlLSpzICUtMjBzINCU0L7QvNC10LnQvVxuIgorCisjLiBXZSBoYXZlIGJlZW4gZGlzY29ubmVjdGVkLCBzbyBsZXQgcmVjb25uZWN0CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1ODUgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE2MworIywgYy1mb3JtYXQKK21zZ2lkICJEaXNjb25uZWN0ZWQsIHJlY29ubmVjdGluZyAuLi5cbiIKK21zZ3N0ciAi0J/RgNC10LrRitGB0L3QsNGC0LAg0LLRgNGK0LfQutCwLCDQv9C+0LTQvdC+0LLRj9Cy0LDQvdC14oCmXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU5OSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo4MjkKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxNzAgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjM4NgorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI3MiAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTYwCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgY2xpZW50IG9iamVjdDogJXNcbiIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YUg0L/RgNC4INGB0YrQt9C00LDQstCw0L3QtSDQvdCwINC60LvQuNC10L3RgtGB0LrQuCDQvtCx0LXQutGCOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo2MDQgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE3NQorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjE0MyAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xpZW50IGZhaWx1cmUsIGV4aXRpbmc6ICVzXG4iCittc2dzdHIgItCT0YDQtdGI0LrQsCDQsiDQutC70LjQtdC90YLQsCwg0LjQt9GF0L7QtDogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NjIzIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoyMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FpdGluZyBmb3IgZGFlbW9uIC4uLlxuIgorbXNnc3RyICLQmNC30YfQsNC60LLQsNC90LUg0L3QsCDQtNC10LzQvtC90LDigKZcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NjQ3Cittc2dpZCAiIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLUQgLS1icm93c2UtZG9tYWlucyAgQnJvd3NlIGZvciBicm93c2luZyBkb21haW5zIGluc3RlYWQgb2Ygc2VydmljZXNcbiIKKyIgICAgLWEgLS1hbGwgICAgICAgICAgICAgU2hvdyBhbGwgc2VydmljZXMsIHJlZ2FyZGxlc3Mgb2YgdGhlIHR5cGVcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgVGhlIGRvbWFpbiB0byBicm93c2UgaW5cbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgRW5hYmxlIHZlcmJvc2UgbW9kZVxuIgorIiAgICAtdCAtLXRlcm1pbmF0ZSAgICAgICBUZXJtaW5hdGUgYWZ0ZXIgZHVtcGluZyBhIG1vcmUgb3IgbGVzcyBjb21wbGV0ZSAiCisibGlzdFxuIgorIiAgICAtYyAtLWNhY2hlICAgICAgICAgICBUZXJtaW5hdGUgYWZ0ZXIgZHVtcGluZyBhbGwgZW50cmllcyBmcm9tIHRoZSBjYWNoZVxuIgorIiAgICAtbCAtLWlnbm9yZS1sb2NhbCAgICBJZ25vcmUgbG9jYWwgc2VydmljZXNcbiIKKyIgICAgLXIgLS1yZXNvbHZlICAgICAgICAgUmVzb2x2ZSBzZXJ2aWNlcyBmb3VuZFxuIgorIiAgICAtZiAtLW5vLWZhaWwgICAgICAgICBEb24ndCBmYWlsIGlmIHRoZSBkYWVtb24gaXMgbm90IGF2YWlsYWJsZVxuIgorIiAgICAtcCAtLXBhcnNhYmxlICAgICAgICBPdXRwdXQgaW4gcGFyc2FibGUgZm9ybWF0XG4iCittc2dzdHIgIiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAg0JjQt9Cy0LXQttC00LDQvdC1INC90LAg0YLQsNC30Lgg0L/QvtC80L7RiVxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICDQmNC30LLQtdC20LTQsNC90LUg0L3QsCDQstC10YDRgdC40Y/RgtCwXG4iCisiICAgIC1EIC0tYnJvd3NlLWRvbWFpbnMgINCf0YDQtdCz0LvQtdC0INC90LAg0LLRitC30LzQvtC20L3QuNGC0LUg0LTQvtC80LXQudC90LgsINCwINC90LUg0L3QsCDRg9GB0LvRg9Cz0LjRgtC1XG4iCisiICAgIC1hIC0tYWxsICAgICAgICAgICAgINCf0L7QutCw0LfQstCw0L3QtSDQvdCwINCy0YHQuNGH0LrQuCDRg9GB0LvRg9Cz0LhcbiIKKyIgICAgLWQgLS1kb21haW490JTQntCc0JXQmdCdICAg0JTQvtC80LXQudC90YrRgiwg0LrQvtC50YLQviDQtNCwINGB0LUg0YDQsNC30LPQu9C10LTQsFxuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICDQktC60LvRjtGH0LLQsNC90LUg0L3QsCDQv9C+0LTRgNC+0LHQtdC9INGA0LXQttC40LxcbiIKKyIgICAgLXQgLS10ZXJtaW5hdGUgICAgICAg0JjQt9GF0L7QtCDRgdC70LXQtCDQuNC30LLQtdC20LTQsNC90LXRgtC+INC90LAg0LLRitC30LzQvtC20L3QviDQv9GK0LvQtdC9INGB0L/QuNGB0YrQulxuIgorIiAgICAtYyAtLWNhY2hlICAgICAgICAgICDQmNC30YXQvtC0INGB0LvQtdC0INC40LfQstC10LbQtNCw0L3QtdGC0L4g0L3QsCDQstGB0LjRh9C60Lgg0LfQsNC/0LjRgdC4INCyINC60LXRiNCwXG4iCisiICAgIC1sIC0taWdub3JlLWxvY2FsICAgINCR0LXQtyDQu9C+0LrQsNC70L3QuNGC0LUg0YPRgdC70YPQs9C4XG4iCisiICAgIC1yIC0tcmVzb2x2ZSAgICAgICAgINCe0YLQutGA0LjQstCw0L3QtSDQvdCwINCw0LTRgNC10YHQuNGC0LUg0L3QsCDQvdCw0LzQtdGA0LXQvdC40YLQtSDRg9GB0LvRg9Cz0LhcbiIKKyIgICAgLWYgLS1uby1mYWlsICAgICAgICAg0J/RgNC+0LTRitC70LbQsNCy0LDQvdC1INC90LAg0YDQsNCx0L7RgtCwINC00L7RgNC4INC4INCx0LXQtyDQtNC10LzQvtC9XG4iCisiICAgIC1wIC0tcGFyc2FibGUgICAgICAgINCY0LfRhdC+0LTRitGCINC00LAg0LzQvtC20LUg0LTQsCDRgdC1INCw0L3QsNC70LjQt9C40YDQsFxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo2NjAKK21zZ2lkICIiCisiICAgIC1rIC0tbm8tZGItbG9va3VwICAgIERvbid0IGxvb2t1cCBzZXJ2aWNlIHR5cGVzXG4iCisiICAgIC1iIC0tZHVtcC1kYiAgICAgICAgIER1bXAgc2VydmljZSB0eXBlIGRhdGFiYXNlXG4iCittc2dzdHIgIiIKKyIgICAgLWsgLS1uby1kYi1sb29rdXAgICAg0JHQtdC3INC/0YDQtdCz0LvQtdC0INC90LAg0LLQuNC00L7QstC10YLQtSDRg9GB0LvRg9Cz0LhcbiIKKyIgICAgLWIgLS1kdW1wLWRiICAgICAgICAg0JjQt9Cy0LXQttC00LDQvdC1INC90LAg0YDQsNC30LvQuNGH0L3QuNGC0LUg0LLQuNC00L7QstC1INGD0YHQu9GD0LPQuFxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo3NjYgLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjIxOQorIywgYy1mb3JtYXQKK21zZ2lkICJUb28gZmV3IGFyZ3VtZW50c1xuIgorbXNnc3RyICLQn9GA0LXQutCw0LvQtdC90L4g0LzQsNC70LrQviDQsNGA0LPRg9C80LXQvdGC0LhcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6ODIxIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozNzgKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyNjQgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIHNpbXBsZSBwb2xsIG9iamVjdC5cbiIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YUg0L/RgNC4INGB0YrQt9C00LDQstCw0L3QtdGC0L4g0L3QsCDQv9GA0L7RgdGCINC+0LHQtdC60YIg0LfQsCDQt9Cw0L/QuNGC0LLQsNC90LUuXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo3NgorIywgYy1mb3JtYXQKK21zZ2lkICJFc3RhYmxpc2hlZCB1bmRlciBuYW1lICclcydcbiIKK21zZ3N0ciAi0KPRgdGC0LDQvdC+0LLQtdC9INC/0L7QtCDQuNC80LUg4oCeJXPigJxcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlcjogJXNcbiIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INGA0LXQs9C40YHRgtGA0LjRgNCw0L3QtTogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIk5hbWUgY29sbGlzaW9uLCBwaWNraW5nIG5ldyBuYW1lICclcycuXG4iCittc2dzdHIgItCh0YrQstC/0LDQtNC10L3QuNC1INC90LAg0LjQvNC10L3QsC4g0JjQt9Cx0LjRgNCwINGB0LUg0L3QvtCy0L4g0LjQvNC1OiDigJ4lc+KAnC5cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGVudHJ5IGdyb3VwOiAlc1xuIgorbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0YHRitC30LTQsNCy0LDQvdC1INC90LAg0LPRgNGD0L/QsCDQt9Cw0L/QuNGB0Lg6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBhZGRyZXNzOiAlc1xuIgorbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0LTQvtCx0LDQstGP0L3QtSDQvdCwINCw0LTRgNC10YE6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBzZXJ2aWNlOiAlc1xuIgorbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0LTQvtCx0LDQstGP0L3QtSDQvdCwINGD0YHQu9GD0LPQsDogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE0MAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gYWRkIHN1YnR5cGUgJyVzJzogJXNcbiIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INC00L7QsdCw0LLRj9C90LUg0L3QsCDQv9C+0LTRgtC40L8g4oCeJXPigJw6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiSG9zdCBuYW1lIGNvbmZsaWN0XG4iCittc2dzdHIgItCh0YrQstC/0LDQtNC10L3QuNC1INC90LAg0LjQvNC10L3QsCDQvdCwINC80LDRiNC40L3QuFxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBbb3B0aW9uc10gJXMgPG5hbWU+IDx0eXBlPiA8cG9ydD4gWzx0eHQgLi4uPl1cbiIKKyIlcyBbb3B0aW9uc10gJXMgPGhvc3QtbmFtZT4gPGFkZHJlc3M+XG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFNob3cgdmVyc2lvblxuIgorIiAgICAtcyAtLXNlcnZpY2UgICAgICAgICBQdWJsaXNoIHNlcnZpY2VcbiIKKyIgICAgLWEgLS1hZGRyZXNzICAgICAgICAgUHVibGlzaCBhZGRyZXNzXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgRG9tYWluIHRvIHB1Ymxpc2ggc2VydmljZSBpblxuIgorIiAgICAtSCAtLWhvc3Q9RE9NQUlOICAgICBIb3N0IHdoZXJlIHNlcnZpY2UgcmVzaWRlc1xuIgorIiAgICAgICAtLXN1YnR5cGU9U1VCVFlQRSBBbiBhZGRpdGlvbmFsIHN1YnR5cGUgdG8gcmVnaXN0ZXIgdGhpcyBzZXJ2aWNlICIKKyJ3aXRoXG4iCisiICAgIC1SIC0tbm8tcmV2ZXJzZSAgICAgIERvIG5vdCBwdWJsaXNoIHJldmVyc2UgZW50cnkgd2l0aCBhZGRyZXNzXG4iCisiICAgIC1mIC0tbm8tZmFpbCAgICAgICAgIERvbid0IGZhaWwgaWYgdGhlIGRhZW1vbiBpcyBub3QgYXZhaWxhYmxlXG4iCittc2dzdHIgIiIKKyIlcyBb0L7Qv9GG0LjQuF0gJXMgPNC40LzQtT4gPNCy0LjQtD4gPNC/0L7RgNGCPiBbPHR4dOKApj5dXG4iCisiJXMgW2ZtW3JyXSAlcyA80LjQvNC1LdC90LAt0LzQsNGI0LjQvdCwPiA80LDQtNGA0LXRgT5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAg0JjQt9Cy0LXQttC00LDQvdC1INC90LAg0YLQsNC30Lgg0L/QvtC80L7RiVxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICDQmNC30LLQtdC20LTQsNC90LUg0L3QsCDQstC10YDRgdC40Y/RgtCwXG4iCisiICAgIC1zIC0tc2VydmljZSAgICAgICAgINCf0YPQsdC70LjQutGD0LLQsNC90LUg0L3QsCDRg9GB0LvRg9Cz0LBcbiIKKyIgICAgLWEgLS1hZGRyZXNzICAgICAgICAg0J/Rg9Cx0LvQuNC60YPQstCw0L3QtSDQvdCwINCw0LTRgNC10YFcbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAg0JLQutC70Y7Rh9Cy0LDQvdC1INC90LAg0L/QvtC00YDQvtCx0LXQvSDRgNC10LbQuNC8XG4iCisiICAgIC1kIC0tZG9tYWluPdCU0J7QnNCV0JnQnSAgINCU0L7QvNC10LnQvSDQt9CwINC/0YPQsdC70LjQutGD0LLQsNC90LUg0L3QsCDRg9GB0LvRg9Cz0LDRgtCwXG4iCisiICAgIC1IIC0taG9zdD3QlNCe0JzQldCZ0J0gICAgINCc0LDRiNC40L3QsCwg0L3QsCDQutC+0Y/RgtC+INC1INGD0YHQu9GD0LPQsNGC0LBcbiIKKyIgICAgICAgLS1zdWJ0eXBlPdCf0J7QlNCi0JjQnyAg0JTQvtC/0YrQu9C90LjRgtC10LvQtdC9INC/0L7QtNGC0LjQvyDQt9CwINGA0LXQs9C40YHRgtGA0LjRgNCw0L3QtSDQvdCwINGD0YHQu9GD0LPQsNGC0LBcbiIKKyIgICAgLVIgLS1uby1yZXZlcnNlICAgICAg0JHQtdC3INC/0YPQsdC70LjQutGD0LLQsNC90LUg0L3QsCDQvtCx0YDQsNGC0LXQvSDQt9Cw0L/QuNGBINC30LAg0LDQtNGA0LXRgdCwXG4iCisiICAgIC1mIC0tbm8tZmFpbCAgICAgICAgINCf0YDQvtC00YrQu9C20LDQstCw0L3QtSDQvdCwINGA0LDQsdC+0YLQsCDQtNC+0YDQuCDQuCDQsdC10Lcg0LTQtdC80L7QvVxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MzAzIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIG51bWJlciBvZiBhcmd1bWVudHNcbiIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9C10L0g0LHRgNC+0Lkg0LDRgNCz0YPQvNC10L3RgtC4XG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIHBvcnQgbnVtYmVyOiAlc1xuIgorbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0YDQsNC30L/QvtC30L3QsNCy0LDQvdC1INC90LAg0L3QvtC80LXRgCDQvdCwINC/0L7RgNGCOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MzYxIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gY29tbWFuZCBzcGVjaWZpZWQuXG4iCittc2dzdHIgItCd0LUg0LUg0YPQutCw0LfQsNC90LAg0LrQvtC80LDQvdC00LAuXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzo4OQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSBob3N0IG5hbWUgJyVzJzogJXNcbiIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INC+0YLQutGA0LjQstCw0L3QtSDQvdCwINC40LzQtdGC0L4g4oCeJXPigJw6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoxMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgYWRkcmVzcyAnJXMnOiAlc1xuIgorbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0L7RgtC60YDQuNCy0LDQvdC1INC90LAg0LDQtNGA0LXRgSDigJ4lc+KAnDogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjE1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgW29wdGlvbnNdICVzIDxob3N0IG5hbWUgLi4uPlxuIgorIiVzIFtvcHRpb25zXSAlcyA8YWRkcmVzcyAuLi4gPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLW4gLS1uYW1lICAgICAgICAgICAgUmVzb2x2ZSBob3N0IG5hbWVcbiIKKyIgICAgLWEgLS1hZGRyZXNzICAgICAgICAgUmVzb2x2ZSBhZGRyZXNzXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKKyIgICAgLTYgICAgICAgICAgICAgICAgICAgTG9va3VwIElQdjYgYWRkcmVzc1xuIgorIiAgICAtNCAgICAgICAgICAgICAgICAgICBMb29rdXAgSVB2NCBhZGRyZXNzXG4iCittc2dzdHIgIiIKKyIlcyBb0L7Qv9GG0LjQuF0gJXMgPNC40LzQtSDQvdCwINC80LDRiNC40L3QsOKApj5cbiIKKyIlcyBb0L7Qv9GG0LjQuF0gJXMgPNCw0LTRgNC10YHigKYgPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICDQmNC30LLQtdC20LTQsNC90LUg0L3QsCDRgtCw0LfQuCDQv9C+0LzQvtGJXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgINCY0LfQstC10LbQtNCw0L3QtSDQvdCwINCy0LXRgNGB0LjRj9GC0LBcbiIKKyIgICAgLW4gLS1uYW1lICAgICAgICAgICAg0J7RgtC60YDQuNCy0LDQvdC1INC90LAg0LjQvNC1INC90LAg0LzQsNGI0LjQvdCwXG4iCisiICAgIC1hIC0tYWRkcmVzcyAgICAgICAgINCe0YLQutGA0LjQstCw0L3QtSDQvdCwINCw0LTRgNC10YFcbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAg0JLQutC70Y7Rh9Cy0LDQvdC1INC90LAg0L/QvtC00YDQvtCx0LXQvSDRgNC10LbQuNC8XG4iCisiICAgIC02ICAgICAgICAgICAgICAgICAgINCe0YLQutGA0LjQstCw0L3QtSDQvdCwINCw0LTRgNC10YEg0L/QviBJUHY2XG4iCisiICAgIC00ICAgICAgICAgICAgICAgICAgINCe0YLQutGA0LjQstCw0L3QtSDQvdCwINCw0LTRgNC10YEg0L/QviBJUHY0XG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyOTkgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE4MQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGhvc3QgbmFtZSByZXNvbHZlcjogJXNcbiIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INGB0YrQt9C00LDQstCw0L3QtSDQvdCwINC60L7QvNC/0L7QvdC10L3RgiDQt9CwINC+0YLQutGA0LjQstCw0L3QtSDQvdCwINC40LzQtdC90LA6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzozMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIGFkZHJlc3MgJyVzJ1xuIgorbXNnc3RyICLQkNC00YDQtdGB0YrRgiDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQsNC90LDQu9C40LfQuNGA0LAuXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzozMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBhZGRyZXNzIHJlc29sdmVyOiAlc1xuIgorbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0YHRitC30LTQsNCy0LDQvdC1INC90LAg0LrQvtC80L/QvtC90LXQvdGCINC30LAg0L7RgtC60YDQuNCy0LDQvdC1INC90LAg0LjQvNC10L3QsDogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBbb3B0aW9uc10gPG5ldyBob3N0IG5hbWU+XG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFNob3cgdmVyc2lvblxuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBFbmFibGUgdmVyYm9zZSBtb2RlXG4iCittc2dzdHIgIiIKKyIlcyBb0L7Qv9GG0LjQuF0gPNC90L7QstC+INC40LzQtSDQvdCwINC80LDRiNC40L3QsNGC0LA+XG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgINCY0LfQstC10LbQtNCw0L3QtSDQvdCwINGC0LDQt9C4INC/0L7QvNC+0YlcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAg0JjQt9Cy0LXQttC00LDQvdC1INC90LAg0LLQtdGA0YHQuNGP0YLQsFxuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICDQktC60LvRjtGH0LLQsNC90LUg0L3QsCDQv9C+0LTRgNC+0LHQtdC9INGA0LXQttC40LxcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMsIGV4cGVjdGluZyBleGFjdGx5IG9uZS5cbiIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9C10L0g0LHRgNC+0Lkg0LDRgNCz0YPQvNC10L3RgtC4LiDQntGH0LDQutCy0LAg0YHQtSDRgtC+0YfQvdC+INC10LTQuNC9LlxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkhvc3QgbmFtZSBzdWNjZXNzZnVsbHkgY2hhbmdlZCB0byAlc1xuIgorbXNnc3RyICLQmNC80LXRgtC+INC90LAg0LzQsNGI0LjQvdCw0YLQsCDQtSDQv9GA0L7QvNC10L3QtdC90L4g0L3QsCAlc1xuIgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL3BvL2NhLnBvIGIvYXZhaGktMC42LjMxL3BvL2NhLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5ODUyNTQKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvcG8vY2EucG8KQEAgLTAsMCArMSw4NjkgQEAKKyMgQ2F0YWxhbiB0cmFuc2xhdGlvbnMgZm9yIGF2YWhpIHBhY2thZ2UuCisjIENvcHlyaWdodCAoQykgMjAwOCBSZWQgSGF0LCBJbmMuCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZQorIyAgYXZhaGkgcGFja2FnZS4KKyMKKyMgT3Jpb2wgTWlybyA8b3Jpb2xtaXJvQGdtYWlsLmNvbT4sIDIwMDgKKyMKKyMgVGhpcyBmaWxlIGlzIHRyYW5zbGF0ZWQgYWNjb3JkaW5nIHRvIHRoZSBnbG9zc2FyeSBhbmQgc3R5bGUgZ3VpZGUgb2YKKyMgICBTb2Z0Y2F0YWzDoC4gSWYgeW91IHBsYW4gdG8gbW9kaWZ5IHRoaXMgZmlsZSwgcGxlYXNlIHJlYWQgZmlyc3QgdGhlIHBhZ2UKKyMgICBvZiB0aGUgQ2F0YWxhbiB0cmFuc2xhdGlvbiB0ZWFtIGZvciB0aGUgRmVkb3JhIHByb2plY3QgYXQ6CisjICAgaHR0cDovL3d3dy5zb2Z0Y2F0YWxhLm9yZy9wcm9qZWN0ZXMvZmVkb3JhLworIyAgIGFuZCBjb250YWN0IHRoZSBwcmV2aW91cyB0cmFuc2xhdG9yCisjCisjIEFxdWVzdCBmaXR4ZXIgcydoYSBkZSB0cmFkdWlyIGQnYWNvcmQgYW1iIGVsIHJlY3VsbCBkZSB0ZXJtZXMgaSBsYSBndWlhCisjICAgZCdlc3RpbCBkZSBTb2Z0Y2F0YWzDoC4gU2kgdm9sZXUgbW9kaWZpY2FyIGFxdWVzdCBmaXR4ZXIsIGxsZWdpdSBzaQorIyAgIHVzIHBsYXUgbGEgcMOgZ2luYSBkZSBjYXRhbGFuaXR6YWNpw7MgZGVsIHByb2plY3RlIEZlZG9yYSBhOgorIyAgIGh0dHA6Ly93d3cuc29mdGNhdGFsYS5vcmcvcHJvamVjdGVzL2ZlZG9yYS8KKyMgICBpIGNvbnRhY3RldSBsJ2FudGVyaW9yIHRyYWR1Y3Rvci9hLgorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogYXZhaGlcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTEtMDQtMDIgMDM6MjMrMDIwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTAtMTAtMTcgMTI6NTcrMDEwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogZWxfbGlicmUgLSAtIHd3dy5jYXRtaWRpYS5jYXQgPGVsLmxpYnJlQGdtYWlsLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBDYXRhbGFuIDxmZWRvcmFAc29mdGNhdGFsYS5uZXQ+XG4iCisiTGFuZ3VhZ2U6IGNhXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjMwCittc2dpZCAiT0siCittc2dzdHIgIkQnYWNvcmQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjMxCittc2dpZCAiT3BlcmF0aW9uIGZhaWxlZCIKK21zZ3N0ciAiT3BlcmFjacOzIGZhbGxpZGEiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjMyCittc2dpZCAiQmFkIHN0YXRlIgorbXNnc3RyICJFc3RhdCBlcnJvbmkiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjMzCittc2dpZCAiSW52YWxpZCBob3N0IG5hbWUiCittc2dzdHIgIk5vbSBkZSBob3N0IG5vIHbDoGxpZCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzQKK21zZ2lkICJJbnZhbGlkIGRvbWFpbiBuYW1lIgorbXNnc3RyICJOb20gZGUgZG9taW5pIG5vIHbDoGxpZCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzUKK21zZ2lkICJObyBzdWl0YWJsZSBuZXR3b3JrIHByb3RvY29sIGF2YWlsYWJsZSIKK21zZ3N0ciAiTm8gaGkgaGEgZGlzcG9uaWJsZSBlbCBwcm90b2NvbCBkZSB4YXJ4YSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzYKK21zZ2lkICJJbnZhbGlkIEROUyBUVEwiCittc2dzdHIgIkVsIFRUTCAodGVtcHMgZGUgdmlkYSkgZGVsIEROUyBubyDDqXMgdsOgbGlkIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozNworbXNnaWQgIlJlc291cmNlIHJlY29yZCBrZXkgaXMgcGF0dGVybiIKK21zZ3N0ciAiTGEgY2xhdSBkZWwgcmVnaXN0cmUgZGVsIHJlY3VycyDDqXMgdW4gcGF0csOzIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozOAorbXNnaWQgIkxvY2FsIG5hbWUgY29sbGlzaW9uIgorbXNnc3RyICJDb2zCt2xpc2nDsyBkZSBub20gbG9jYWwiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM5Cittc2dpZCAiSW52YWxpZCByZWNvcmQiCittc2dzdHIgIlJlZ2lzdHJlIG5vIHbDoGxpZCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDEKK21zZ2lkICJJbnZhbGlkIHNlcnZpY2UgbmFtZSIKK21zZ3N0ciAiTm9tIGRlIHNlcnZlaSBubyB2w6BsaWQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQyCittc2dpZCAiSW52YWxpZCBzZXJ2aWNlIHR5cGUiCittc2dzdHIgIlRpcHVzIGRlIHNlcnZlaSBubyB2w6BsaWQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQzCittc2dpZCAiSW52YWxpZCBwb3J0IG51bWJlciIKK21zZ3N0ciAiTsO6bWVybyBkZSBwb3J0IG5vIHbDoGxpZCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDQKK21zZ2lkICJJbnZhbGlkIHJlY29yZCBrZXkiCittc2dzdHIgIkNsYXUgZGUgcmVnaXN0cmUgbm8gdsOgbGlkIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NQorbXNnaWQgIkludmFsaWQgYWRkcmVzcyIKK21zZ3N0ciAiQWRyZcOnYSBubyB2w6BsaWRhIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NgorbXNnaWQgIlRpbWVvdXQgcmVhY2hlZCIKK21zZ3N0ciAiVGVtcHMgZCdlc3BlcmEgZXhwaXJhdCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDcKK21zZ2lkICJUb28gbWFueSBjbGllbnRzIgorbXNnc3RyICJNYXNzYSBjbGllbnRzIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0OAorbXNnaWQgIlRvbyBtYW55IG9iamVjdHMiCittc2dzdHIgIk1hc3NhIG9iamVjdGVzIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0OQorbXNnaWQgIlRvbyBtYW55IGVudHJpZXMiCittc2dzdHIgIk1hc3NhIGVudHJhZGVzIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1MAorbXNnaWQgIk9TIEVycm9yIgorbXNnc3RyICJFcnJvciBkZWwgU08iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjUyCittc2dpZCAiQWNjZXNzIGRlbmllZCIKK21zZ3N0ciAiQWNjw6lzIGRlbmVnYXQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjUzCittc2dpZCAiSW52YWxpZCBvcGVyYXRpb24iCittc2dzdHIgIk9wZXJhY2nDsyBubyB2w6BsaWRhIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1NAorbXNnaWQgIkFuIHVuZXhwZWN0ZWQgRC1CdXMgZXJyb3Igb2NjdXJlZCIKK21zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBpbmVzcGVyYXQgYWwgRC1CdXMiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU1Cittc2dpZCAiRGFlbW9uIGNvbm5lY3Rpb24gZmFpbGVkIgorbXNnc3RyICJIYSBmYWxsYXQgbGEgY29ubmV4acOzIGFtYiBlbCBkaW1vbmkiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU2Cittc2dpZCAiTWVtb3J5IGV4aGF1c3RlZCIKK21zZ3N0ciAiTWVtw7JyaWEgZXhoYXVyaWRhIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1NworbXNnaWQgIlRoZSBvYmplY3QgcGFzc2VkIGluIHdhcyBub3QgdmFsaWQiCittc2dzdHIgIkwnb2JqZWN0ZSBwYXNzYXQgbm8gZXMgdsOgbGlkIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1OAorbXNnaWQgIkRhZW1vbiBub3QgcnVubmluZyIKK21zZ3N0ciAiRWwgZGltb25pIG5vIHMnZXN0w6AgZXhlY3V0YW50IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1OQorbXNnaWQgIkludmFsaWQgaW50ZXJmYWNlIGluZGV4IgorbXNnc3RyICJMJ8OtbmRleCBkZSBsYSBpbnRlcmbDrWNpZSBubyDDqXMgdsOgbGlkIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2MAorbXNnaWQgIkludmFsaWQgcHJvdG9jb2wgc3BlY2lmaWNhdGlvbiIKK21zZ3N0ciAiRXNwZWNpZmljYWNpw7MgZGUgcHJvdG9jb2wgbm8gdsOgbGlkYSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjEKK21zZ2lkICJJbnZhbGlkIGZsYWdzIgorbXNnc3RyICJJbmRpY2Fkb3Igbm8gdsOgbGlkIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2MworbXNnaWQgIk5vdCBmb3VuZCIKK21zZ3N0ciAiTm8gcydoYSB0cm9iYXQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY0Cittc2dpZCAiSW52YWxpZCBjb25maWd1cmF0aW9uIgorbXNnc3RyICJDb25maWd1cmFjacOzIG5vIHbDoGxpZGEiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY1Cittc2dpZCAiVmVyc2lvbiBtaXNtYXRjaCIKK21zZ3N0ciAiTGEgdmVyc2nDsyBubyBjb2luY2lkZWl4IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2NgorbXNnaWQgIkludmFsaWQgc2VydmljZSBzdWJ0eXBlIgorbXNnc3RyICJTdWJ0aXB1cyBkZSBzZXJ2ZWkgbm8gdsOgbGlkIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2NworbXNnaWQgIkludmFsaWQgcGFja2V0IgorbXNnc3RyICJQYXF1ZXQgbm8gdsOgbGlkIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2OAorbXNnaWQgIkludmFsaWQgRE5TIHJldHVybiBjb2RlIgorbXNnc3RyICJFbCBjb2RpIHJldG9ybmF0IHBlbCBETlMgbm8gw6lzIHbDoGxpZCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjkKK21zZ2lkICJETlMgZmFpbHVyZTogRk9STUVSUiIKK21zZ3N0ciAiRXJyb3IgZGUgRE5TOiBGT1JNRVJSIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3MAorbXNnaWQgIkROUyBmYWlsdXJlOiBTRVJWRkFJTCIKK21zZ3N0ciAiRXJyb3IgZGUgRE5TOiBTRVJWRkFJTCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzEKK21zZ2lkICJETlMgZmFpbHVyZTogTlhET01BSU4iCittc2dzdHIgIkVycm9yIGRlIEROUzogTlhET01BSU4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjcyCittc2dpZCAiRE5TIGZhaWx1cmU6IE5PVElNUCIKK21zZ3N0ciAiRXJyb3IgZGUgRE5TOiBOT1RJTVAiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc0Cittc2dpZCAiRE5TIGZhaWx1cmU6IFJFRlVTRUQiCittc2dzdHIgIkVycm9yIGRlIEROUzogUkVGVVNFRCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzUKK21zZ2lkICJETlMgZmFpbHVyZTogWVhET01BSU4iCittc2dzdHIgIkVycm9yIGRlIEROUzogWVhET01BSU4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc2Cittc2dpZCAiRE5TIGZhaWx1cmU6IFlYUlJTRVQiCittc2dzdHIgIkVycm9yIGRlIEROUzogWVhSUlNFVCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzcKK21zZ2lkICJETlMgZmFpbHVyZTogTlhSUlNFVCIKK21zZ3N0ciAiRXJyb3IgZGUgRE5TOiBOWFJSU0VUIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3OAorbXNnaWQgIkROUyBmYWlsdXJlOiBOT1RBVVRIIgorbXNnc3RyICJFcnJvciBkZSBETlM6IE5PQVVUSCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzkKK21zZ2lkICJETlMgZmFpbHVyZTogTk9UWk9ORSIKK21zZ3N0ciAiRXJyb3IgZGUgRE5TOiBOT1RaT05FIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4MAorbXNnaWQgIkludmFsaWQgUkRBVEEiCittc2dzdHIgIlJEQVRBIG5vIHbDoGxpZCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODEKK21zZ2lkICJJbnZhbGlkIEROUyB0eXBlIgorbXNnc3RyICJUaXB1cyBETlMgbm8gdsOgbGlkIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4MgorbXNnaWQgIkludmFsaWQgRE5TIGNsYXNzIgorbXNnc3RyICJDbGFzc2UgRE5TIG5vIHbDoGxpZGEiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjgzCittc2dpZCAiTm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiTm8gcydhZG1ldCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODUKK21zZ2lkICJOb3QgcGVybWl0dGVkIgorbXNnc3RyICJObyDDqXMgcGVybcOocyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODYKK21zZ2lkICJJbnZhbGlkIGFyZ3VtZW50IgorbXNnc3RyICJBcmd1bWVudCBubyB2w6BsaWQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjg3Cittc2dpZCAiSXMgZW1wdHkiCittc2dzdHIgIsOJcyBidWl0IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4OAorbXNnaWQgIlRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uIGlzIGludmFsaWQgYmVjYXVzZSByZWR1bmRhbnQiCittc2dzdHIgIkwnb3BlcmFjacOzIHNvbMK3bGljaXRhZGEgbm8gw6lzIHbDoGxpZGEgcGVyIHJlZHVuZGFudCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6OTQKK21zZ2lkICJJbnZhbGlkIEVycm9yIENvZGUiCittc2dzdHIgIkNvZGkgZCdlcnJvciBubyB2w6BsaWQiCisKKyM6IC4uL2F2YWhpLWRpc2NvdmVyLXN0YW5kYWxvbmUvYXZhaGktZGlzY292ZXIudWkuaDoxCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6NzYKK21zZ2lkICI8aT5ObyBzZXJ2aWNlIGN1cnJlbnRseSBzZWxlY3RlZC48L2k+IgorbXNnc3RyICI8aT5ObyBoaSBoYSBjYXAgc2VydmVpIHNlbGVjY2lvbmF0LjwvaT4iCisKKyM6IC4uL2F2YWhpLWRpc2NvdmVyLXN0YW5kYWxvbmUvYXZhaGktZGlzY292ZXIudWkuaDoyCittc2dpZCAiQXZhaGkgRGlzY292ZXJ5IgorbXNnc3RyICJEZXNjb2JyaWRvciBBdmFoaSIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLmRlc2t0b3AuaW4uaW4uaDoxCittc2dpZCAiQXZhaGkgWmVyb2NvbmYgQnJvd3NlciIKK21zZ3N0ciAiTmF2ZWdhZG9yIHplcm9jb25mIEF2YWhpIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIuZGVza3RvcC5pbi5pbi5oOjIKK21zZ2lkICJCcm93c2UgZm9yIFplcm9jb25mIHNlcnZpY2VzIGF2YWlsYWJsZSBvbiB5b3VyIG5ldHdvcmsiCittc2dzdHIgIk5hdmVndWV1IHBlbHMgc2VydmVpcyBaZXJvY29uZiBkaXNwb25pYmxlcyBhIGxhIHZvc3RyYSB4YXJ4YSIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIyNAorbXNnaWQgIlRYVCIKK21zZ3N0ciAiVFhUIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI2Cittc2dpZCAiVFhUIERhdGE6IgorbXNnc3RyICJEYWRlcyBUWFQ6IgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI2Cittc2dpZCAiZW1wdHkiCittc2dzdHIgIsOJcyBidWl0IgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI4Cittc2dpZCAiU2VydmljZSBUeXBlOiIKK21zZ3N0ciAiVGlwdXMgZGUgc2VydmVpOiIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIyOQorbXNnaWQgIlNlcnZpY2UgTmFtZToiCittc2dzdHIgIk5vbSBkZWwgc2VydmVpOiIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIzMAorbXNnaWQgIkRvbWFpbiBOYW1lOiIKK21zZ3N0ciAiTm9tIGRlIGRvbWluaToiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMzEKK21zZ2lkICJJbnRlcmZhY2U6IgorbXNnc3RyICJJbnRlcmbDrWNpZToiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMzIKK21zZ2lkICJBZGRyZXNzOiIKK21zZ3N0ciAiQWRyZcOnYToiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTg1Cittc2dpZCAiQnJvd3NlIFNlcnZpY2UgVHlwZXMiCittc2dzdHIgIkV4cGxvcmEgZWxzIHRpcHVzIGRlIHNlcnZlaSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxODUKK21zZ2lkICJBIE5VTEwgdGVybWluYXRlZCBsaXN0IG9mIHNlcnZpY2UgdHlwZXMgdG8gYnJvd3NlIGZvciIKK21zZ3N0ciAiVW5hIGxsaXN0YSBkZWxzIHRpcHVzIGRlIHNlcnZlaSBhY2FiYWRhIGVuIE5VTEwgcGVyIGEgZXhwbG9yYXIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTkwCittc2dpZCAiRG9tYWluIgorbXNnc3RyICJEb21pbmkiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTkwCittc2dpZCAiVGhlIGRvbWFpbiB0byBicm93c2UgaW4sIG9yIE5VTEwgZm9yIHRoZSBkZWZhdWx0IGRvbWFpbiIKK21zZ3N0ciAiRWwgZG9taW5pIGEgZXhwbG9yYXIsIG8gTlVMTCBwZWwgZG9taW5pIHByZWRldGVybWluYXQiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTk2Cittc2dpZCAiU2VydmljZSBUeXBlIgorbXNnc3RyICJUaXB1cyBkZSBzZXJ2ZWkiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTk2Cittc2dpZCAiVGhlIHNlcnZpY2UgdHlwZSBvZiB0aGUgc2VsZWN0ZWQgc2VydmljZSIKK21zZ3N0ciAiRWwgdGlwdXMgZGUgc2VydmVpIGRlbCBzZXJ2ZWkgc2VsZWNjaW9uYXQiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjAyIC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTAyMworbXNnaWQgIlNlcnZpY2UgTmFtZSIKK21zZ3N0ciAiTm9tIGRlbCBzZXJ2ZWkiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjAyCittc2dpZCAiVGhlIHNlcnZpY2UgbmFtZSBvZiB0aGUgc2VsZWN0ZWQgc2VydmljZSIKK21zZ3N0ciAiRWwgbm9tIGRlbCBzZXJ2ZWkgZGVsIHNlcnZlaSBzZWxlY2Npb25hdCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMDgKK21zZ2lkICJBZGRyZXNzIgorbXNnc3RyICJBZHJlw6dhIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIwOAorbXNnaWQgIlRoZSBhZGRyZXNzIG9mIHRoZSByZXNvbHZlZCBzZXJ2aWNlIgorbXNnc3RyICJMJ2FkcmXDp2EgZGVsIHNlcnZlaSByZXNvbHQiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjEzCittc2dpZCAiUG9ydCIKK21zZ3N0ciAiUG9ydCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMTMKK21zZ2lkICJUaGUgSVAgcG9ydCBudW1iZXIgb2YgdGhlIHJlc29sdmVkIHNlcnZpY2UiCittc2dzdHIgIkVsIG7Dum1lcm8gZGUgcG9ydCBJUCBkZWwgc2VydmVpIHJlc29sdCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMTkKK21zZ2lkICJIb3N0IE5hbWUiCittc2dzdHIgIk9yZGluYWRvciIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMTkKK21zZ2lkICJUaGUgaG9zdCBuYW1lIG9mIHRoZSByZXNvbHZlZCBzZXJ2aWNlIgorbXNnc3RyICJFbCBub20gZGUgbCdvcmRpbmFkb3IgZGVsIHNlcnZlaSByZXNvbHQiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjI1Cittc2dpZCAiVFhUIERhdGEiCittc2dzdHIgIkRhZGVzIFRYVCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMjUKK21zZ2lkICJUaGUgVFhUIGRhdGEgb2YgdGhlIHJlc29sdmVkIHNlcnZpY2UiCittc2dzdHIgIkRhZGVzIFRYVCBkZWwgc2VydmVpIHJlc29sdCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMzAKK21zZ2lkICJSZXNvbHZlIFNlcnZpY2UiCittc2dzdHIgIlJlc29sIHNlcnZlaSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMzAKK21zZ2lkICJSZXNvbHZlIHRoZSBzZWxlY3RlZCBzZXJ2aWNlIGF1dG9tYXRpY2FsbHkgYmVmb3JlIHJldHVybmluZyIKK21zZ3N0ciAiUmVzb2wgZWwgc2VydmVpIHNlbGVjY2lvbmF0IGF1dG9tw6B0aWNhbWVudCBhYmFucyBkZSByZXRvcm5hci1obyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMzYKK21zZ2lkICJSZXNvbHZlIFNlcnZpY2UgSG9zdCBOYW1lIgorbXNnc3RyICJSZXNvbCBlbCBub20gZGUgc2Vydmlkb3IgZGVsIHNlcnZlaSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMzYKK21zZ2lkICIiCisiUmVzb2x2ZSB0aGUgaG9zdCBuYW1lIG9mIHRoZSBzZWxlY3RlZCBzZXJ2aWNlIGF1dG9tYXRpY2FsbHkgYmVmb3JlIHJldHVybmluZyIKK21zZ3N0ciAiIgorIlJlc29sIGVsIG5vbSBkZSBsJ2hvc3RlIGRlbCBzZXJ2ZWkgc2VsZWNjaW9uYXQgYXV0b23DoHRpY2FtZW50IGFiYW5zIGRlICIKKyJyZXRvcm5hci1sbyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyNDIKK21zZ2lkICJBZGRyZXNzIGZhbWlseSIKK21zZ3N0ciAiRmFtw61saWEgZGUgbCdhZHJlw6dhIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjI0MgorbXNnaWQgIlRoZSBhZGRyZXNzIGZhbWlseSBmb3IgaG9zdCBuYW1lIHJlc29sdXRpb24iCittc2dzdHIgIkxhIGZhbcOtbGlhIGRlIGwnYWRyZcOnYSBwZXIgbGEgcmVzb2x1Y2nDsyBkZWwgbm9tIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjMyNgorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFoaSBjbGllbnQgZmFpbHVyZTogJXMiCittc2dzdHIgIkVycm9yIGVuIGVsIGNsaWVudCBBdmFoaTogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6Mzg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWhpIHJlc29sdmVyIGZhaWx1cmU6ICVzIgorbXNnc3RyICJGYWxsYWRhIGRlbCByZXNvbGV0b3IgZGUgQXZhaGk6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjUxOAorIywgYy1mb3JtYXQKK21zZ2lkICJCcm93c2luZyBmb3Igc2VydmljZSB0eXBlICVzIGluIGRvbWFpbiAlcyBmYWlsZWQ6ICVzIgorbXNnc3RyICJFcnJvciBlbiBsYSBjZXJjYSBkZSB0aXB1cyBkZSBzZXJ2ZWlzICVzIGVuIGVsIGRvbWluaSAlczogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NTE5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjE2OAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTY5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjE3OAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTc5Cittc2dpZCAibi9hIgorbXNnc3RyICJObyBkaXNwb25pYmxlIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjY0OQorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFoaSBkb21haW4gYnJvd3NlciBmYWlsdXJlOiAlcyIKK21zZ3N0ciAiRXJyb3IgZW4gbGEgbmF2ZWdhY2nDsyBkZWwgZG9taW5pIEF2YWhpOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo2ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlYWQgQXZhaGkgZG9tYWluOiAlcyIKK21zZ3N0ciAiRXJyb3IgZW4gbGEgbGVjdHVyYSBkZWwgZG9taW5pIEF2YWhpOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo3MDYKK21zZ2lkICJCcm93c2Ugc2VydmljZSB0eXBlIGxpc3QgaXMgZW1wdHkhIgorbXNnc3RyICJMYSBsbGlzdGEgZCdleHBsb3JhY2nDsyBkZSB0aXB1cyBkZSBzZXJ2ZWlzIMOpcyBidWlkYSEiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjb25uZWN0IHRvIEF2YWhpIHNlcnZlcjogJXMiCittc2dzdHIgIkVycm9yIGFsIGNvbm5lY3RhciBhbCBzZXJ2aWRvciBBdmFoaTogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NzM1Cittc2dpZCAiQnJvd3NpbmcgZm9yIHNlcnZpY2VzIG9uIDxiPmxvY2FsIG5ldHdvcms8L2I+OiIKK21zZ3N0ciAiQ2VyY2FudCBzZXJ2ZWlzIGVuIDxiPnhhcnhhIGxvY2FsPC9iPjoiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NzM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyb3dzaW5nIGZvciBzZXJ2aWNlcyBpbiBkb21haW4gPGI+JXM8L2I+OiIKK21zZ3N0ciAiQ2VyY2FudCBzZXJ2ZWlzIGVuIGVsIGRvbWluaSA8Yj4lczwvYj46IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjc3MworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGJyb3dzZXIgZm9yICVzOiAlcyIKK21zZ3N0ciAiRXJyb3IgZW4gY3JlYXIgdW4gbmF2ZWdhZG9yIHBlciBhICVzOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo5MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSByZXNvbHZlciBmb3IgJXMgb2YgdHlwZSAlcyBpbiBkb21haW4gJXM6ICVzIgorbXNnc3RyICIiCisiRXJyb3IgZW4gY3JlYXIgZWwgc2lzdGVtYSBkZSByZXNvbHVjacOzIHBlciBhICVzIGRlbCB0aXB1cyAlcyBlbiBlbCBkb21pbmkgIgorIiVzOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo5NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBkb21haW4gYnJvd3NlcjogJXMiCittc2dzdHIgIkVycm9yIGVuIGNyZWFyIG5hdmVnYWRvciBkZSBkb21pbmk6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjk4OQorbXNnaWQgIkNoYW5nZSBkb21haW4iCittc2dzdHIgIkNhbnZpYSBlbCBkb21pbmkiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTAzMSAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNjIKK21zZ2lkICJCcm93c2luZy4uLiIKK21zZ3N0ciAiRXhwbG9yYW50Li4uIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExMjAKK21zZ2lkICJJbml0aWFsaXppbmcuLi4iCittc2dzdHIgIkluaWNpYWxpdHphbnQuLi4iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTE0NAorbXNnaWQgIkxvY2F0aW9uIgorbXNnc3RyICJVYmljYWNpw7MiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTE0OSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NTMKK21zZ2lkICJOYW1lIgorbXNnc3RyICJOb20iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTE1NCAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NTMKK21zZ2lkICJUeXBlIgorbXNnc3RyICJUaXB1cyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTY2Cittc2dpZCAiX0RvbWFpbi4uLiIKK21zZ3N0ciAiX0RvbWluaS4uLiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBbb3B0aW9uc11cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLXMgLS1zc2ggICAgICAgICAgICAgQnJvd3NlIFNTSCBzZXJ2ZXJzXG4iCisiICAgIC12IC0tdm5jICAgICAgICAgICAgIEJyb3dzZSBWTkMgc2VydmVyc1xuIgorIiAgICAtUyAtLXNoZWxsICAgICAgICAgICBCcm93c2UgYm90aCBTU0ggYW5kIFZOQ1xuIgorIiAgICAtZCAtLWRvbWFpbj1ET01BSU4gICBUaGUgZG9tYWluIHRvIGJyb3dzZSBpblxuIgorbXNnc3RyICIiCisiJXMgW29wY2lvbnNdXG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIE1vc3RyYSBhcXVlc3RhIGFqdWRhXG4iCisiICAgIC1zIC0tc3NoICAgICAgICAgICAgIEV4cGxvcmEgZWxzIHNlcnZpZG9ycyBTU0hcbiIKKyIgICAgLXYgLS12bmMgICAgICAgICAgICAgRXhwbG9yYSBlbHMgc2Vydmlkb3JzIFZOQ1xuIgorIiAgICAtUyAtLXNoZWxsICAgICAgICAgICBFeHBsb3JhIFNTSCBpIFZOQ1xuIgorIiAgICAtZCAtLWRvbWFpbj1ET01BSU4gICBFbCBkb21pbmkgb24gY2VyY2FyXG4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxMDEgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6Nzc1CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvbyBtYW55IGFyZ3VtZW50c1xuIgorbXNnc3RyICJNYXNzYSBhcmd1bWVudHNcbiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE0OQorbXNnaWQgIkNob29zZSBTaGVsbCBTZXJ2ZXIiCittc2dzdHIgIkVzY3VsbCBzZXJ2aWRvciBkJ2ludMOocnByZXQgZCdvcmRyZXMiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNTEKK21zZ2lkICJEZXNrdG9wIgorbXNnc3RyICJFc2NyaXB0b3JpIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTUyCittc2dpZCAiVGVybWluYWwiCittc2dzdHIgIlRlcm1pbmFsIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTU2Cittc2dpZCAiQ2hvb3NlIFZOQyBzZXJ2ZXIiCittc2dzdHIgIkVzY3VsbCBzZXJ2aWRvciBWTkMiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNjEKK21zZ2lkICJDaG9vc2UgU1NIIHNlcnZlciIKK21zZ3N0ciAiRXNjdWxsIHNlcnZpZG9yIFNTSCIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE4NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb25uZWN0aW5nIHRvICclcycgLi4uXG4iCittc2dzdHIgIkNvbm5lY3RhbnQgYSAnJXMnIC4uLlxuIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MjQwCisjLCBjLWZvcm1hdAorbXNnaWQgImV4ZWNscCgpIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAiRXJyb3IgZW4gZXhlY2xwKCk6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FuY2VsZWQuXG4iCittc2dzdHIgIkNhbmNlbMK3bGF0LlxuIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmRlc2t0b3AuaW4uaW4uaDoxCittc2dpZCAiQXZhaGkgU1NIIFNlcnZlciBCcm93c2VyIgorbXNnc3RyICJOYXZlZ2Fkb3IgZGUgc2Vydmlkb3JzIFNTSCBBdmFoaSIKKworIzogLi4vYXZhaGktdWkvYnNzaC5kZXNrdG9wLmluLmluLmg6MgorbXNnaWQgIkJyb3dzZSBmb3IgWmVyb2NvbmYtZW5hYmxlZCBTU0ggU2VydmVycyIKK21zZ3N0ciAiRXhwbG9yYSBlbHMgc2Vydmlkb3JzIFNTSCBjb25maWd1cmF0cyBhbWIgWmVyb2NvbmYiCisKKyM6IC4uL2F2YWhpLXVpL2J2bmMuZGVza3RvcC5pbi5pbi5oOjEKK21zZ2lkICJBdmFoaSBWTkMgU2VydmVyIEJyb3dzZXIiCittc2dzdHIgIk5hdmVnYWRvciBkZSBzZXJ2aWRvcnMgVk5DIEF2YWhpIgorCisjOiAuLi9hdmFoaS11aS9idm5jLmRlc2t0b3AuaW4uaW4uaDoyCittc2dpZCAiQnJvd3NlIGZvciBaZXJvY29uZi1lbmFibGVkIFZOQyBTZXJ2ZXJzIgorbXNnc3RyICJFeHBsb3JhIGVscyBzZXJ2aWRvcnMgZGUgVk5DIGNvbmZpZ3VyYXRzIGFtYiBaZXJvY29uZiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIjogQWxsIGZvciBub3dcbiIKK21zZ3N0ciAiOiBBaXjDsiDDqXMgdG90IHBlciBhcmFcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIjogQ2FjaGUgZXhoYXVzdGVkXG4iCittc2dzdHIgIjogTWVtw7JyaWEgY2F1IGV4aGF1cmlkYVxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoyMzkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIHNlcnZpY2UgJyVzJyBvZiB0eXBlICclcycgaW4gZG9tYWluICclcyc6ICVzXG4iCittc2dzdHIgIiIKKyJFcnJvciBlbiByZXNvbGRyZSBlbCBzZXJ2ZWkgICclcycgZGVsIHRpcHVzICclcycgZW4gZWwgZG9taW5pICclcyc6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjM0MAorIywgYy1mb3JtYXQKK21zZ2lkICJzZXJ2aWNlX2Jyb3dzZXIgZmFpbGVkOiAlc1xuIgorbXNnc3RyICJFcnJvciBlbiBzZXJ2aWNlX2Jyb3dzZXI6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjM3OAorIywgYy1mb3JtYXQKK21zZ2lkICJhdmFoaV9zZXJ2aWNlX2Jyb3dzZXJfbmV3KCkgZmFpbGVkOiAlc1xuIgorbXNnc3RyICJFcnJvciBlbiBhdmFoaV9zZXJ2aWNlX2Jyb3dzZXJfbmV3KCk6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjQxNAorIywgYy1mb3JtYXQKK21zZ2lkICJzZXJ2aWNlX3R5cGVfYnJvd3NlciBmYWlsZWQ6ICVzXG4iCittc2dzdHIgIkVycm9yIGVuIHNlcnZpY2VfdHlwZV9icm93c2VyOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo0NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXZhaGlfc2VydmljZV90eXBlX2Jyb3dzZXJfbmV3KCkgZmFpbGVkOiAlc1xuIgorbXNnc3RyICJFcnJvciBlbiBhdmFoaV9zZXJ2aWNlX3R5cGVfYnJvd3Nlcl9uZXcoKTogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTE5CisjLCBjLWZvcm1hdAorbXNnaWQgImF2YWhpX2RvbWFpbl9icm93c2VyX25ldygpIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAiRXJyb3IgZW4gYXZhaGlfZG9tYWluX2Jyb3dzZXJfbmV3KCk6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjUzNSAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6Mzk0CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjgwIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IHZlcnNpb24gc3RyaW5nOiAlc1xuIgorbXNnc3RyICJFcnJvciBlbiBjb25zdWx0YXIgbGEgdmVyc2nDsyBkZSBsYSBjYWRlbmE6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU0MCAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6Mzk5CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6Mjg1IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxNzMKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IGhvc3QgbmFtZTogJXNcbiIKK21zZ3N0ciAiRXJyb3IgZW4gY29uc3VsdGFyIGVsIG5vbSBkZWwgb3JkaW5hZG9yOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NDQgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjQwMworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI4OSAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlcnZlciB2ZXJzaW9uOiAlczsgSG9zdCBuYW1lOiAlc1xuIgorbXNnc3RyICJWZXJzacOzIGRlbCBzZXJ2aWRvcjogJXM7IE5vbSBkZSBsJ29yZGluYWRvcjogJXNcbiIKKworIy4gVHJhbnNsYXRvcnM6IFRoaXMgaXMgYSBjb2x1bW4gaGVhZGluZyB3aXRoIGFiYnJldmlhdGlvbnMgZm9yCisjLiAqICAgRXZlbnQgKCsvLSksIE5ldHdvcmsgSW50ZXJmYWNlLCBQcm90b2NvbCAoSVB2NC92NiksIERvbWFpbgorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUgSWZjZSBQcm90IERvbWFpblxuIgorbXNnc3RyICJFIEludGVyIFByb3QgRG9taW5pXG4iCisKKyMuIFRyYW5zbGF0b3JzOiBUaGlzIGlzIGEgY29sdW1uIGhlYWRpbmcgd2l0aCBhYmJyZXZpYXRpb25zIGZvcgorIy4gKiAgIEV2ZW50ICgrLy0pLCBOZXR3b3JrIEludGVyZmFjZSwgUHJvdG9jb2wgKElQdjQvdjYpLCBEb21haW4KKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU1MworIywgYy1mb3JtYXQKK21zZ2lkICJFIElmY2UgUHJvdCAlLSpzICUtMjBzIERvbWFpblxuIgorbXNnc3RyICJFIEludGVyIFByb3QgJS0qcyAlLTIwcyBEb21pbmlcbiIKKworIy4gV2UgaGF2ZSBiZWVuIGRpc2Nvbm5lY3RlZCwgc28gbGV0IHJlY29ubmVjdAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTg1IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGlzY29ubmVjdGVkLCByZWNvbm5lY3RpbmcgLi4uXG4iCittc2dzdHIgIkRlc2Nvbm5lY3RhdCwgdG9ybmFudCBhIGNvbm5lY3RhciAuLi5cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTk5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjgyOQorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE3MCAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6Mzg2CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjcyIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBjbGllbnQgb2JqZWN0OiAlc1xuIgorbXNnc3RyICJFcnJvciBlbiBjcmVhciBsJ29iamVjdGUgY2xpZW50OiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo2MDQgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE3NQorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjE0MyAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xpZW50IGZhaWx1cmUsIGV4aXRpbmc6ICVzXG4iCittc2dzdHIgIkVycm9yIGVuIGNsaWVudCwgc29ydGludDogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NjIzIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoyMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FpdGluZyBmb3IgZGFlbW9uIC4uLlxuIgorbXNnc3RyICJFc3BlcmFudCBhbCBkaW1vbmkgLi4uXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjY0NworbXNnaWQgIiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgU2hvdyB2ZXJzaW9uXG4iCisiICAgIC1EIC0tYnJvd3NlLWRvbWFpbnMgIEJyb3dzZSBmb3IgYnJvd3NpbmcgZG9tYWlucyBpbnN0ZWFkIG9mIHNlcnZpY2VzXG4iCisiICAgIC1hIC0tYWxsICAgICAgICAgICAgIFNob3cgYWxsIHNlcnZpY2VzLCByZWdhcmRsZXNzIG9mIHRoZSB0eXBlXG4iCisiICAgIC1kIC0tZG9tYWluPURPTUFJTiAgIFRoZSBkb21haW4gdG8gYnJvd3NlIGluXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKKyIgICAgLXQgLS10ZXJtaW5hdGUgICAgICAgVGVybWluYXRlIGFmdGVyIGR1bXBpbmcgYSBtb3JlIG9yIGxlc3MgY29tcGxldGUgIgorImxpc3RcbiIKKyIgICAgLWMgLS1jYWNoZSAgICAgICAgICAgVGVybWluYXRlIGFmdGVyIGR1bXBpbmcgYWxsIGVudHJpZXMgZnJvbSB0aGUgY2FjaGVcbiIKKyIgICAgLWwgLS1pZ25vcmUtbG9jYWwgICAgSWdub3JlIGxvY2FsIHNlcnZpY2VzXG4iCisiICAgIC1yIC0tcmVzb2x2ZSAgICAgICAgIFJlc29sdmUgc2VydmljZXMgZm91bmRcbiIKKyIgICAgLWYgLS1uby1mYWlsICAgICAgICAgRG9uJ3QgZmFpbCBpZiB0aGUgZGFlbW9uIGlzIG5vdCBhdmFpbGFibGVcbiIKKyIgICAgLXAgLS1wYXJzYWJsZSAgICAgICAgT3V0cHV0IGluIHBhcnNhYmxlIGZvcm1hdFxuIgorbXNnc3RyICIiCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIE1vc3RyYSBhcXVlc3RhIGFqdWRhXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIE1vc3RyYSBsYSB2ZXJzacOzXG4iCisiICAgIC1EIC0tYnJvd3NlLWRvbWFpbnMgIE1vc3RyYSBlbHMgZG9taW5pcyBlbiBlbCBsbG9jIGRlbHMgc2VydmVpc1xuIgorIiAgICAtYSAtLWFsbCAgICAgICAgICAgICBNb3N0cmEgdG90cyBlbHMgc2VydmVpcywgYSBwZXNhciBkZWwgdGlwdXNcbiIKKyIgICAgLWQgLS1kb21haW49RE9NSU5JICAgRWwgZG9taW5pIGEgY2VyY2FyXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEFjdGl2YSBlbCBtb2RlIGFtYiBkZXRhbGxzXG4iCisiICAgIC10IC0tdGVybWluYXRlICAgICAgIEZpbmFsaXR6YSBkZXNwcsOpcyBkJ2VubWFnYXR6ZW1hciB1bmEgbGxpc3RhIG3DqXMgbyAiCisibWVueXMgY29tcGxldGFcbiIKKyIgICAgLWMgLS1jYWNoZSAgICAgICAgICAgQWNhYmFyIGRlc3Byw6lzIGRlIHZvbGNhciB0b3RlcyBsZXMgZW50cmFkZXMgZGUgbGEgIgorIm1lbcOycmlhIGNhdVxuIgorIiAgICAtbCAtLWlnbm9yZS1sb2NhbCAgICBJZ25vcmEgZWxzIHNlcnZlaXMgbG9jYWxzXG4iCisiICAgIC1yIC0tcmVzb2x2ZSAgICAgICAgIFJlc29sIGVscyBzZXJ2ZWlzIHRyb2JhdHNcbiIKKyIgICAgLWYgLS1uby1mYWlsICAgICAgICAgTm8gZmFsbGlzIHNpIGVsIGRpbW9uaSBubyDDqXMgZGlzcG9uaWJsZVxuIgorIiAgICAtcCAtLXBhcnNhYmxlICAgICAgICBJbXByaW1laXggZW4gdW4gZm9ybWF0IGFuYWxpdHphYmxlXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjY2MAorbXNnaWQgIiIKKyIgICAgLWsgLS1uby1kYi1sb29rdXAgICAgRG9uJ3QgbG9va3VwIHNlcnZpY2UgdHlwZXNcbiIKKyIgICAgLWIgLS1kdW1wLWRiICAgICAgICAgRHVtcCBzZXJ2aWNlIHR5cGUgZGF0YWJhc2VcbiIKK21zZ3N0ciAiIgorIiAgICAtayAtLW5vLWRiLWxvb2t1cCAgICBObyBidXNxdWlzIHRpcHVzIGRlIHNlcnZlaXNcbiIKKyIgICAgLWIgLS1kdW1wLWRiICAgICAgICAgVm9sY2EgbGEgYmFzZSBkZSBkYWRlcyBkZWxzIHRpcHVzIGRlIHNlcnZlaXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NzY2IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG9vIGZldyBhcmd1bWVudHNcbiIKK21zZ3N0ciAiTWFucXVlbiBhcmd1bWVudHNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6ODIxIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozNzgKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyNjQgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIHNpbXBsZSBwb2xsIG9iamVjdC5cbiIKK21zZ3N0ciAiRXJyb3IgYWwgY3JlYXIgdW4gb2JqZWN0ZSBkJ2VucXVlc3RlcyBzaW1wbGUuXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo3NgorIywgYy1mb3JtYXQKK21zZ2lkICJFc3RhYmxpc2hlZCB1bmRlciBuYW1lICclcydcbiIKK21zZ3N0ciAiRXN0YWJsZWl4IHNvdGEgZWwgbm9tICclcydcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlcjogJXNcbiIKK21zZ3N0ciAiRXJyb3IgZW4gcmVnaXN0cmFyOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTmFtZSBjb2xsaXNpb24sIHBpY2tpbmcgbmV3IG5hbWUgJyVzJy5cbiIKK21zZ3N0ciAiQ29uZmxpY3RlIGFtYiBlbHMgbm9tcywgcydoYSBlc2NvbGxpdCB1biBub3Ugbm9tICclcycuXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBlbnRyeSBncm91cDogJXNcbiIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBjcmVhciBlbCBncnVwIGJ1aXQ6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBhZGRyZXNzOiAlc1xuIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFmZWdpciBsJ2FkcmXDp2E6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBzZXJ2aWNlOiAlc1xuIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGFmZWdpciBlbCBzZXJ2ZWk6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBzdWJ0eXBlICclcyc6ICVzXG4iCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgYWZlZ2lyIGVsIHN1YnRpcHVzICclcyc6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiSG9zdCBuYW1lIGNvbmZsaWN0XG4iCittc2dzdHIgIkNvbmZsaWN0ZSBhbWIgZWwgbm9tIGRlIGwnb3JkaW5hZG9yXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFtvcHRpb25zXSAlcyA8bmFtZT4gPHR5cGU+IDxwb3J0PiBbPHR4dCAuLi4+XVxuIgorIiVzIFtvcHRpb25zXSAlcyA8aG9zdC1uYW1lPiA8YWRkcmVzcz5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgU2hvdyB2ZXJzaW9uXG4iCisiICAgIC1zIC0tc2VydmljZSAgICAgICAgIFB1Ymxpc2ggc2VydmljZVxuIgorIiAgICAtYSAtLWFkZHJlc3MgICAgICAgICBQdWJsaXNoIGFkZHJlc3NcbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgRW5hYmxlIHZlcmJvc2UgbW9kZVxuIgorIiAgICAtZCAtLWRvbWFpbj1ET01BSU4gICBEb21haW4gdG8gcHVibGlzaCBzZXJ2aWNlIGluXG4iCisiICAgIC1IIC0taG9zdD1ET01BSU4gICAgIEhvc3Qgd2hlcmUgc2VydmljZSByZXNpZGVzXG4iCisiICAgICAgIC0tc3VidHlwZT1TVUJUWVBFIEFuIGFkZGl0aW9uYWwgc3VidHlwZSB0byByZWdpc3RlciB0aGlzIHNlcnZpY2UgIgorIndpdGhcbiIKKyIgICAgLVIgLS1uby1yZXZlcnNlICAgICAgRG8gbm90IHB1Ymxpc2ggcmV2ZXJzZSBlbnRyeSB3aXRoIGFkZHJlc3NcbiIKKyIgICAgLWYgLS1uby1mYWlsICAgICAgICAgRG9uJ3QgZmFpbCBpZiB0aGUgZGFlbW9uIGlzIG5vdCBhdmFpbGFibGVcbiIKK21zZ3N0ciAiIgorIiVzIFtvcGNpb25zXSAlcyA8bm9tPiA8dGlwdXM+IDxwb3J0PiBbPHR4dCAuLi4+XVxuIgorIiVzIFtvcGNpb25zXSAlcyA8bm9tIGRlbCBob3N0PiA8YWRyZcOnYT5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgTW9zdHJhIGFxdWVzdGEgYWp1ZGFcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgTW9zdHJhIGxhIHZlcnNpw7NcbiIKKyIgICAgLXMgLS1zZXJ2aWNlICAgICAgICAgUHVibGljYSBlbCBzZXJ2ZWlcbiIKKyIgICAgLWEgLS1hZGRyZXNzICAgICAgICAgUHVibGljYSBsJ2FkcmXDp2FcbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgQWN0aXZhIGVsIG1vZGUgYW1iIGRldGFsbHNcbiIKKyIgICAgLWQgLS1kb21haW49RE9NSU5JICAgRG9taW5pIGRpbnMgZWwgcXVlIHB1YmxpY2FyIGVsIHNlcnZlaVxuIgorIiAgICAtSCAtLWhvc3Q9RE9NSU5JICAgICBMJ29yZGluYWRvciBvbiBlc3TDoCBlbCBzZXJ2ZWlcbiIKKyIgICAgICAgLS1zdWJ0eXBlPVNVQlRJUFVTIFVuIHN1YnRpcHVzIGFkaWNpb25hbCBhbWIgZWwgcXVlIHJlZ2lzdHJhciBlbCAgIgorInNlcnZlaVxuIgorIiAgICAtZiAtLW5vLWZhaWwgICAgICAgICBObyBmYWxsYXIgc2kgZWwgZGltb25pIG5vIGVzdMOgIGRpc3BvbmlibGVcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjMwMyAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MzE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBudW1iZXIgb2YgYXJndW1lbnRzXG4iCittc2dzdHIgIk5vbWJyZSBlcnJvbmkgZCdhcmd1bWVudHNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjMyOQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcGFyc2UgcG9ydCBudW1iZXI6ICVzXG4iCittc2dzdHIgIkVycm9yIGVuIGFuYWxpdHphciBlbCBuw7ptZXJvIGRlIHBvcnQ6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozNjEgLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI0NgorIywgYy1mb3JtYXQKK21zZ2lkICJObyBjb21tYW5kIHNwZWNpZmllZC5cbiIKK21zZ3N0ciAiT3JkcmUgbm8gZXNwZWNpZmljYWRhLlxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgaG9zdCBuYW1lICclcyc6ICVzXG4iCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgcmVzb2xkcmUgZWwgbm9tIGRlIGwnb3JkaW5hZG9yICclcyc6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoxMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgYWRkcmVzcyAnJXMnOiAlc1xuIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGFuYWxpdHphciBsJ2FkcmXDp2EgJyVzJzogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjE1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgW29wdGlvbnNdICVzIDxob3N0IG5hbWUgLi4uPlxuIgorIiVzIFtvcHRpb25zXSAlcyA8YWRkcmVzcyAuLi4gPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLW4gLS1uYW1lICAgICAgICAgICAgUmVzb2x2ZSBob3N0IG5hbWVcbiIKKyIgICAgLWEgLS1hZGRyZXNzICAgICAgICAgUmVzb2x2ZSBhZGRyZXNzXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKKyIgICAgLTYgICAgICAgICAgICAgICAgICAgTG9va3VwIElQdjYgYWRkcmVzc1xuIgorIiAgICAtNCAgICAgICAgICAgICAgICAgICBMb29rdXAgSVB2NCBhZGRyZXNzXG4iCittc2dzdHIgIiIKKyIlcyBbb3BjaW9uc10gJXMgPG5vbSBkZSBsJ29yZGluYWRvciAuLi4+XG4iCisiJXMgW29wdGlvbnNdICVzIDxhZHJlw6dhIC4uLiA+XG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIE1vc3RyYSBhcXVlc3RhIGFqdWRhXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIE1vc3RyYSBsYSB2ZXJzacOzXG4iCisiICAgIC1uIC0tbmFtZSAgICAgICAgICAgIFJlc29sIGVsIG5vbSBkZWwgaG9zdFxuIgorIiAgICAtYSAtLWFkZHJlc3MgICAgICAgICBSZXNvbCBsJ2FkcmXDp2FcbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgQWN0aXZhIGVsIG1vZGUgYW1iIGRldGFsbHNcbiIKKyIgICAgLTYgICAgICAgICAgICAgICAgICAgTGxpc3RhIGxlcyBhZHJlY2VzIElQdjZcbiIKKyIgICAgLTQgICAgICAgICAgICAgICAgICAgTGxpc3RhIGxlcyBhZHJlY2VzIElQdjRcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI5OSAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgaG9zdCBuYW1lIHJlc29sdmVyOiAlc1xuIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGNyZWFyIGVsIHJlc29sZWRvciBkZWwgbm9tIGRlIGwnb3JkaW5hZG9yOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBhZGRyZXNzICclcydcbiIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBhbmFsaXR6YXIgbCdhZHJlw6dhICclcydcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjMxNAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGFkZHJlc3MgcmVzb2x2ZXI6ICVzXG4iCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgY3JlYXIgZWwgcmVzb2x1dG9yIGRlIGwnYWRyZcOnYTogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBbb3B0aW9uc10gPG5ldyBob3N0IG5hbWU+XG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFNob3cgdmVyc2lvblxuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBFbmFibGUgdmVyYm9zZSBtb2RlXG4iCittc2dzdHIgIiIKKyIlcyBbb3BjaW9uc10gPG5vdSBub20gZGUgaG9zdD5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgTW9zdHJhIGFxdWVzdGEgYWp1ZGFcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgTW9zdHJhIGxhIHZlcnNpw7NcbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgQWN0aXZhIGVsIG1vZGUgYW1iIGRldGFsbHNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMsIGV4cGVjdGluZyBleGFjdGx5IG9uZS5cbiIKK21zZ3N0ciAiTm9tYnJlIGQnYXJndW1lbnRzIGluY29ycmVjdGUsIHMnZXNwZXJhdmEgdW4gZXhhY3RhbWVudC5cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE5MworIywgYy1mb3JtYXQKK21zZ2lkICJIb3N0IG5hbWUgc3VjY2Vzc2Z1bGx5IGNoYW5nZWQgdG8gJXNcbiIKK21zZ3N0ciAiUydoYSBjYW52aWF0IGNvcnJlY3RhbWVudCBlbCBtb24gZGVsIGhvc3QgYSAlc1xuIgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL3BvL2NzLnBvIGIvYXZhaGktMC42LjMxL3BvL2NzLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YzhlODUKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvcG8vY3MucG8KQEAgLTAsMCArMSw4NjcgQEAKKyMgQ3plY2ggdHJhbnNsYXRpb24gb2YgYXZhaGkuCisjIENvcHlyaWdodCAoQykgMjAwOSB0aGUgYXV0aG9yKHMpIG9mIGF2YWhpLgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgYXZhaGkgcGFja2FnZS4KKyMgUGV0ciBLb3ZhciA8cGtuYmVAdm9sbnkuY3o+LCAyMDA5LgorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogYXZhaGlcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTEtMDQtMDIgMDM6MjMrMDIwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDktMDgtMTcgMDI6MTArMDIwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogUGV0ciBLb3ZhciA8cGtuYmVAdm9sbnkuY3o+XG4iCisiTGFuZ3VhZ2UtVGVhbTogQ3plY2ggPHRyYW5zbGF0aW9uLXRlYW0tY3NAbGlzdHMuc291cmNlZm9yZ2UubmV0PlxuIgorIkxhbmd1YWdlOiBjc1xuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MzsgcGx1cmFsPShuPT0xKSA/IDAgOiAobj49MiAmJiBuPD00KSA/IDEgOiAyO1xuIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozMAorbXNnaWQgIk9LIgorbXNnc3RyICJCdWRpxb4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjMxCittc2dpZCAiT3BlcmF0aW9uIGZhaWxlZCIKK21zZ3N0ciAiT3BlcmFjZSBzZWxoYWxhIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozMgorbXNnaWQgIkJhZCBzdGF0ZSIKK21zZ3N0ciAiTmV2eWhvdnVqw61jw60gc3RhdiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzMKK21zZ2lkICJJbnZhbGlkIGhvc3QgbmFtZSIKK21zZ3N0ciAiTmVwbGF0bsO9IG7DoXpldiBwb8SNw610YcSNZSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzQKK21zZ2lkICJJbnZhbGlkIGRvbWFpbiBuYW1lIgorbXNnc3RyICJOZXBsYXRuw70gbsOhemV2IGRvbcOpbnkiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM1Cittc2dpZCAiTm8gc3VpdGFibGUgbmV0d29yayBwcm90b2NvbCBhdmFpbGFibGUiCittc2dzdHIgIsW9w6FkbsO9IHZ5aG92dWrDrWPDrSBzw63FpW92w70gcHJvdG9rb2wgbmVuw60gZG9zdHVwbsO9IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozNgorbXNnaWQgIkludmFsaWQgRE5TIFRUTCIKK21zZ3N0ciAiTmVwbGF0bsOpIEROUyBUVEwiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM3Cittc2dpZCAiUmVzb3VyY2UgcmVjb3JkIGtleSBpcyBwYXR0ZXJuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM4CisjLCBmdXp6eQorbXNnaWQgIkxvY2FsIG5hbWUgY29sbGlzaW9uIgorbXNnc3RyICJMb2vDoWxuw60gam3DqW5vIHNvdWJvcnUiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM5Cittc2dpZCAiSW52YWxpZCByZWNvcmQiCittc2dzdHIgIk5lcGxhdG7DvSB6w6F6bmFtIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0MQorbXNnaWQgIkludmFsaWQgc2VydmljZSBuYW1lIgorbXNnc3RyICJOZXBsYXRuw70gbsOhemV2IHNsdcW+YnkiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQyCittc2dpZCAiSW52YWxpZCBzZXJ2aWNlIHR5cGUiCittc2dzdHIgIk5lcGxhdG7DvSB0eXAgc2x1xb5ieSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDMKK21zZ2lkICJJbnZhbGlkIHBvcnQgbnVtYmVyIgorbXNnc3RyICJOZXBsYXRuw6kgxI3DrXNsbyBwb3J0dSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDQKKyMsIGZ1enp5Cittc2dpZCAiSW52YWxpZCByZWNvcmQga2V5IgorbXNnc3RyICJVbG/Fvml0IGtsw63EjSB6w6F6bmFtdSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDUKKyMsIGZ1enp5Cittc2dpZCAiSW52YWxpZCBhZGRyZXNzIgorbXNnc3RyICIlczogYWRyZXNhICVzIGplIG5lc3Byw6F2bsOhLlxuIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NgorIywgZnV6enkKK21zZ2lkICJUaW1lb3V0IHJlYWNoZWQiCittc2dzdHIgIsSMYXMgdnlwcsWhZWwiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQ3Cittc2dpZCAiVG9vIG1hbnkgY2xpZW50cyIKK21zZ3N0ciAiUMWZw61sacWhIG1ub2hvIGtsaWVudMWvIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0OAorbXNnaWQgIlRvbyBtYW55IG9iamVjdHMiCittc2dzdHIgIlDFmcOtbGnFoSBtbm9obyBvYmpla3TFryIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDkKK21zZ2lkICJUb28gbWFueSBlbnRyaWVzIgorbXNnc3RyICJQxZnDrWxpxaEgbW5vaG8gcG9sb8W+ZWsiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjUwCisjLCBmdXp6eQorbXNnaWQgIk9TIEVycm9yIgorbXNnc3RyICJDaHliYSBwxZlpIHRpc2t1IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1MgorbXNnaWQgIkFjY2VzcyBkZW5pZWQiCittc2dzdHIgIlDFmcOtc3R1cCB6YW3DrXRudXQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjUzCittc2dpZCAiSW52YWxpZCBvcGVyYXRpb24iCittc2dzdHIgIk5lcGxhdG7DoSBvcGVyYWNlIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1NAorIywgZnV6enkKK21zZ2lkICJBbiB1bmV4cGVjdGVkIEQtQnVzIGVycm9yIG9jY3VyZWQiCittc2dzdHIgIkRvxaFsbyBrIG7DoXNsZWR1asOtY8OtIGNoeWLEmzoiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU1CisjLCBmdXp6eQorbXNnaWQgIkRhZW1vbiBjb25uZWN0aW9uIGZhaWxlZCIKK21zZ3N0ciAiU2VsaGFsbyB2emTDoWxlbsOpIHDFmWlwb2plbsOtIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1NgorbXNnaWQgIk1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIlBhbcSbxaUgdnnEjWVycMOhbmEiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU3Cittc2dpZCAiVGhlIG9iamVjdCBwYXNzZWQgaW4gd2FzIG5vdCB2YWxpZCIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1OAorIywgZnV6enkKK21zZ2lkICJEYWVtb24gbm90IHJ1bm5pbmciCittc2dzdHIgIktsw63EjWVua292w70gZMOpbW9uIG5lYsSbxb7DrSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTkKKyMsIGZ1enp5Cittc2dpZCAiSW52YWxpZCBpbnRlcmZhY2UgaW5kZXgiCittc2dzdHIgIkdJRjogTmVwbGF0bsO9IGluZGV4LiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjAKKyMsIGZ1enp5Cittc2dpZCAiSW52YWxpZCBwcm90b2NvbCBzcGVjaWZpY2F0aW9uIgorbXNnc3RyICJOZXBsYXRuw6Egc3BlY2lmaWthY2UgcG9ydHUiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjYxCisjLCBmdXp6eQorbXNnaWQgIkludmFsaWQgZmxhZ3MiCittc2dzdHIgIm5lcGxhdG7DqSBwxZnDrXpuYWt5IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2MworIywgZnV6enkKK21zZ2lkICJOb3QgZm91bmQiCittc2dzdHIgIk5lbmFsZXplbm8iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY0CisjLCBmdXp6eQorbXNnaWQgIkludmFsaWQgY29uZmlndXJhdGlvbiIKK21zZ3N0ciAiTmVrb21wbGV0bsOtIG5lYm8gbmVwbGF0bsOhIGtvbmZpZ3VyYWNlIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2NQorIywgZnV6enkKK21zZ2lkICJWZXJzaW9uIG1pc21hdGNoIgorbXNnc3RyICJWZXJ6ZSBBQkkgJWQuJWQueCBuZXNvdWhsYXPDrSAocG90xZllYnVqaSAlZC4lZC54KSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjYKKyMsIGZ1enp5Cittc2dpZCAiSW52YWxpZCBzZXJ2aWNlIHN1YnR5cGUiCittc2dzdHIgIm5lcGxhdG7DqSBqbcOpbm8gYXV0ZW50aXphxI1uw60gc2x1xb5ieSBcIiVzXCIsIGlnbm9yb3bDoW5vXG4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY3CisjLCBmdXp6eQorbXNnaWQgIkludmFsaWQgcGFja2V0IgorbXNnc3RyICJDaHlibsOhIGTDqWxrYSBOQ1AgcsOhbWNlIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2OAorIywgZnV6enkKK21zZ2lkICJJbnZhbGlkIEROUyByZXR1cm4gY29kZSIKK21zZ3N0ciAixaFwYXRuw6EgbsOhdnJhdG92w6EgaG9kbm90YSBlb2YoKS4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY5Cittc2dpZCAiRE5TIGZhaWx1cmU6IEZPUk1FUlIiCittc2dzdHIgIlNlbGjDoW7DrSBETlM6IEZPUk1FUlIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjcwCittc2dpZCAiRE5TIGZhaWx1cmU6IFNFUlZGQUlMIgorbXNnc3RyICJTZWxow6Fuw60gRE5TOiBTRVJWRkFJTCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzEKK21zZ2lkICJETlMgZmFpbHVyZTogTlhET01BSU4iCittc2dzdHIgIlNlbGjDoW7DrSBETlM6IE5YRE9NQUlOIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3MgorbXNnaWQgIkROUyBmYWlsdXJlOiBOT1RJTVAiCittc2dzdHIgIlNlbGjDoW7DrSBETlM6IE5PVElNUCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzQKK21zZ2lkICJETlMgZmFpbHVyZTogUkVGVVNFRCIKK21zZ3N0ciAiU2VsaMOhbsOtIEROUzogUkVGVVNFRCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzUKK21zZ2lkICJETlMgZmFpbHVyZTogWVhET01BSU4iCittc2dzdHIgIlNlbGjDoW7DrSBETlM6IFlYRE9NQUlOIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3NgorbXNnaWQgIkROUyBmYWlsdXJlOiBZWFJSU0VUIgorbXNnc3RyICJTZWxow6Fuw60gRE5TOiBZWFJSU0VUIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3NworbXNnaWQgIkROUyBmYWlsdXJlOiBOWFJSU0VUIgorbXNnc3RyICJTZWxow6Fuw60gRE5TOiBOWFJSU0VUIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3OAorbXNnaWQgIkROUyBmYWlsdXJlOiBOT1RBVVRIIgorbXNnc3RyICJTZWxow6Fuw60gRE5TOiBOT1RBVVRIIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3OQorbXNnaWQgIkROUyBmYWlsdXJlOiBOT1RaT05FIgorbXNnc3RyICJTZWxow6Fuw60gRE5TOiBOT1RaT05FIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4MAorbXNnaWQgIkludmFsaWQgUkRBVEEiCittc2dzdHIgIk5lcGxhdG7DqSBSREFUQSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODEKKyMsIGZ1enp5Cittc2dpZCAiSW52YWxpZCBETlMgdHlwZSIKK21zZ3N0ciAiTmVwbGF0bsOhIGZ1bmtjZSB0eXB1OiBcIiVzXCIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjgyCisjLCBmdXp6eQorbXNnaWQgIkludmFsaWQgRE5TIGNsYXNzIgorbXNnc3RyICJOZXBsYXRuw6kgam3DqW5vIHTFmcOtZHkgem5ha8WvIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4MworIywgZnV6enkKK21zZ2lkICJOb3Qgc3VwcG9ydGVkIgorbXNnc3RyICJOZXBvZHBvcm92w6FubyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODUKKyMsIGZ1enp5Cittc2dpZCAiTm90IHBlcm1pdHRlZCIKK21zZ3N0ciAiR2xvYiBuZW7DrSBkb3ZvbGVuOiAlc1xuIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4NgorIywgZnV6enkKK21zZ2lkICJJbnZhbGlkIGFyZ3VtZW50IgorbXNnc3RyICJOZXBsYXRuw70gYXJndW1lbnQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjg3CisjLCBmdXp6eQorbXNnaWQgIklzIGVtcHR5IgorbXNnc3RyICIoamUgcHLDoXpkbsO9KSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODgKK21zZ2lkICJUaGUgcmVxdWVzdGVkIG9wZXJhdGlvbiBpcyBpbnZhbGlkIGJlY2F1c2UgcmVkdW5kYW50IgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjk0CisjLCBmdXp6eQorbXNnaWQgIkludmFsaWQgRXJyb3IgQ29kZSIKK21zZ3N0ciAiTmV6bsOhbcO9IGvDs2QgY2h5YnkgJWQiCisKKyM6IC4uL2F2YWhpLWRpc2NvdmVyLXN0YW5kYWxvbmUvYXZhaGktZGlzY292ZXIudWkuaDoxCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6NzYKKyMsIGZ1enp5Cittc2dpZCAiPGk+Tm8gc2VydmljZSBjdXJyZW50bHkgc2VsZWN0ZWQuPC9pPiIKK21zZ3N0ciAiS2xpa27Em3RlIGsgb2RzdHJhbsSbbsOtIHByw6F2xJsgenZvbGVuw6kgc2x1xb5ieSIKKworIzogLi4vYXZhaGktZGlzY292ZXItc3RhbmRhbG9uZS9hdmFoaS1kaXNjb3Zlci51aS5oOjIKKyMsIGZ1enp5Cittc2dpZCAiQXZhaGkgRGlzY292ZXJ5IgorbXNnc3RyICIqIE9iamV2ICVzIHpwxa9zb2LDrSwgxb5lICVzIHphc3RhcmFqw6EuXG4iCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5kZXNrdG9wLmluLmluLmg6MQorIywgZnV6enkKK21zZ2lkICJBdmFoaSBaZXJvY29uZiBCcm93c2VyIgorbXNnc3RyICJXZWJvdsO9IHByb2hsw63FvmXEjSBFcGlwaGFueSIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLmRlc2t0b3AuaW4uaW4uaDoyCittc2dpZCAiQnJvd3NlIGZvciBaZXJvY29uZiBzZXJ2aWNlcyBhdmFpbGFibGUgb24geW91ciBuZXR3b3JrIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMjQKK21zZ2lkICJUWFQiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIyNgorIywgZnV6enkKK21zZ2lkICJUWFQgRGF0YToiCittc2dzdHIgIlrDoWtsYWRuw60gZGF0YSIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIyNgorIywgZnV6enkKK21zZ2lkICJlbXB0eSIKK21zZ3N0ciAiKGplIHByw6F6ZG7DvSkiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMjgKKyMsIGZ1enp5Cittc2dpZCAiU2VydmljZSBUeXBlOiIKK21zZ3N0ciAiVHlwIHNsdcW+YnkiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMjkKKyMsIGZ1enp5Cittc2dpZCAiU2VydmljZSBOYW1lOiIKK21zZ3N0ciAiUG9qbWVub3bDoXZhY8OtIHNsdcW+YmEiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMzAKKyMsIGZ1enp5Cittc2dpZCAiRG9tYWluIE5hbWU6IgorbXNnc3RyICJEb23DqW5hIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjMxCittc2dpZCAiSW50ZXJmYWNlOiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjMyCisjLCBmdXp6eQorbXNnaWQgIkFkZHJlc3M6IgorbXNnc3RyICJBZHJlc2EiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTg1CisjLCBmdXp6eQorbXNnaWQgIkJyb3dzZSBTZXJ2aWNlIFR5cGVzIgorbXNnc3RyICJ0eXB5IG11c8OtIHNvdWhsYXNpdFxuIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE4NQorbXNnaWQgIkEgTlVMTCB0ZXJtaW5hdGVkIGxpc3Qgb2Ygc2VydmljZSB0eXBlcyB0byBicm93c2UgZm9yIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTkwCisjLCBmdXp6eQorbXNnaWQgIkRvbWFpbiIKK21zZ3N0ciAiRG9tw6luYSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxOTAKK21zZ2lkICJUaGUgZG9tYWluIHRvIGJyb3dzZSBpbiwgb3IgTlVMTCBmb3IgdGhlIGRlZmF1bHQgZG9tYWluIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTk2CisjLCBmdXp6eQorbXNnaWQgIlNlcnZpY2UgVHlwZSIKK21zZ3N0ciAiVHlwIHNsdcW+YnkiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTk2CisjLCBmdXp6eQorbXNnaWQgIlRoZSBzZXJ2aWNlIHR5cGUgb2YgdGhlIHNlbGVjdGVkIHNlcnZpY2UiCittc2dzdHIgIk5lem7DoW3DvSB0eXAgc2x1xb5ieTogJXMuIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIwMiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjEwMjMKKyMsIGZ1enp5Cittc2dpZCAiU2VydmljZSBOYW1lIgorbXNnc3RyICJQb2ptZW5vdsOhdmFjw60gc2x1xb5iYSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMDIKKyMsIGZ1enp5Cittc2dpZCAiVGhlIHNlcnZpY2UgbmFtZSBvZiB0aGUgc2VsZWN0ZWQgc2VydmljZSIKK21zZ3N0ciAiTsOhemV2IHZ5YnJhbsOpaG8gcMOtc21hIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIwOAorIywgZnV6enkKK21zZ2lkICJBZGRyZXNzIgorbXNnc3RyICJBZHJlc2EiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjA4CisjLCBmdXp6eQorbXNnaWQgIlRoZSBhZGRyZXNzIG9mIHRoZSByZXNvbHZlZCBzZXJ2aWNlIgorbXNnc3RyICJTbHXFvmJhIG1vbWVudMOhbG7EmyBuZW7DrSBrIGRpc3BvemljaSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMTMKK21zZ2lkICJQb3J0IgorbXNnc3RyICJQb3J0IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIxMworIywgZnV6enkKK21zZ2lkICJUaGUgSVAgcG9ydCBudW1iZXIgb2YgdGhlIHJlc29sdmVkIHNlcnZpY2UiCittc2dzdHIgIsSMw61zbG8gVENQL0lQIHBvcnR1IGluZGV4b3ZhY8OtaG8gc2VydmVydSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMTkKKyMsIGZ1enp5Cittc2dpZCAiSG9zdCBOYW1lIgorbXNnc3RyICJKbcOpbm8gcG/EjcOtdGHEjWUiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjE5CisjLCBmdXp6eQorbXNnaWQgIlRoZSBob3N0IG5hbWUgb2YgdGhlIHJlc29sdmVkIHNlcnZpY2UiCittc2dzdHIgIlNsdcW+YmEgS25paHkgQWRyZXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjI1CisjLCBmdXp6eQorbXNnaWQgIlRYVCBEYXRhIgorbXNnc3RyICJaw6FrbGFkbsOtIGRhdGEiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjI1CisjLCBmdXp6eQorbXNnaWQgIlRoZSBUWFQgZGF0YSBvZiB0aGUgcmVzb2x2ZWQgc2VydmljZSIKK21zZ3N0ciAiUG/FvmFkYXZlayDEjWluw60gZGF0YSBzbHXFvmJ5IHphc3RhcmFsw71taSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMzAKKyMsIGZ1enp5Cittc2dpZCAiUmVzb2x2ZSBTZXJ2aWNlIgorbXNnc3RyICJOZWx6ZSBuYWrDrXQgc2x1xb5idSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMzAKK21zZ2lkICJSZXNvbHZlIHRoZSBzZWxlY3RlZCBzZXJ2aWNlIGF1dG9tYXRpY2FsbHkgYmVmb3JlIHJldHVybmluZyIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIzNgorIywgZnV6enkKK21zZ2lkICJSZXNvbHZlIFNlcnZpY2UgSG9zdCBOYW1lIgorbXNnc3RyICIgICAgLWYsIC0tZnFkbiwgLS1sb25nICAgIGRsb3Vow6kgam3DqW5vIHBvxI3DrXRhxI1lIChrYW5vbmlja8OpKVxuIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIzNgorbXNnaWQgIiIKKyJSZXNvbHZlIHRoZSBob3N0IG5hbWUgb2YgdGhlIHNlbGVjdGVkIHNlcnZpY2UgYXV0b21hdGljYWxseSBiZWZvcmUgcmV0dXJuaW5nIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjQyCisjLCBmdXp6eQorbXNnaWQgIkFkZHJlc3MgZmFtaWx5IgorbXNnc3RyICJUxZnDrWRhIGFkcmVzIGAlcycgbmVuw60gem7DoW1hLlxuIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjI0MgorIywgZnV6enkKK21zZ2lkICJUaGUgYWRkcmVzcyBmYW1pbHkgZm9yIGhvc3QgbmFtZSByZXNvbHV0aW9uIgorbXNnc3RyICJwb8W+YWRvdmFuw6Egcm9kaW5hIG5lcG9kcG9yb3ZhbsOhIHTDrW10byBob3N0aXRlbGVtIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjMyNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQXZhaGkgY2xpZW50IGZhaWx1cmU6ICVzIgorbXNnc3RyICJDaHliYSBwxZlpIMSNdGVuw60gZm9ybcOhdHUgR0lGOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzozODgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkF2YWhpIHJlc29sdmVyIGZhaWx1cmU6ICVzIgorbXNnc3RyICJDaHliYSBwxZlpIMSNdGVuw60gZm9ybcOhdHUgR0lGOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo1MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJvd3NpbmcgZm9yIHNlcnZpY2UgdHlwZSAlcyBpbiBkb21haW4gJXMgZmFpbGVkOiAlcyIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjUxOSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoxNjgKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjE2OSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoxNzgKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjE3OQorIywgZnV6enkKK21zZ2lkICJuL2EiCittc2dzdHIgIm5lem7DoW1vIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjY0OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQXZhaGkgZG9tYWluIGJyb3dzZXIgZmFpbHVyZTogJXMiCittc2dzdHIgIlByb2hsw63FvmXEjSBzZXJ2ZXLFryBTU0ggQXZhaGkiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6Njg0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVhZCBBdmFoaSBkb21haW46ICVzIgorbXNnc3RyICJOZXBvZGHFmWlsbyBzZSDEjcOtc3QgbWV0YWRhdGEgeiDigJ4lc+KAnDogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NzA2Cittc2dpZCAiQnJvd3NlIHNlcnZpY2UgdHlwZSBsaXN0IGlzIGVtcHR5ISIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjcxNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNvbm5lY3QgdG8gQXZhaGkgc2VydmVyOiAlcyIKK21zZ3N0ciAiU3BvamVuw60gc2Ugc2VydmVyZW0gc2VsaGFsbyBwbyAlZCBwb2t1c2VjaFxuIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjczNQorIywgZnV6enkKK21zZ2lkICJCcm93c2luZyBmb3Igc2VydmljZXMgb24gPGI+bG9jYWwgbmV0d29yazwvYj46IgorbXNnc3RyICJWeWhsZWTDoXbDoW7DrSBTTVBQUEQgdiBtw61zdG7DrSBzw610aS4uLiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo3MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJvd3NpbmcgZm9yIHNlcnZpY2VzIGluIGRvbWFpbiA8Yj4lczwvYj46IgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NzczCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGJyb3dzZXIgZm9yICVzOiAlcyIKK21zZ3N0ciAiTmVsemUgdnl0dm/FmWl0IGtsw63EjSByZWdpc3Ryxa8gcHJvIHNvdWJvcnkgJyVzJy4iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6OTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgcmVzb2x2ZXIgZm9yICVzIG9mIHR5cGUgJXMgaW4gZG9tYWluICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjk3OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBkb21haW4gYnJvd3NlcjogJXMiCittc2dzdHIgIk5lbW9odSB2eXR2b8WZaXQgc29ja2V0IElQdjQ6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6OTg5CisjLCBmdXp6eQorbXNnaWQgIkNoYW5nZSBkb21haW4iCittc2dzdHIgIkRvbcOpbmEgYXV0ZW50aXphY2UiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTAzMSAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNjIKKyMsIGZ1enp5Cittc2dpZCAiQnJvd3NpbmcuLi4iCittc2dzdHIgIlByb2hsw63FvmVuw60iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTEyMAorIywgZnV6enkKK21zZ2lkICJJbml0aWFsaXppbmcuLi4iCittc2dzdHIgIkluaWNpYWxpenVqZSBzZS4uLiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTQ0CisjLCBmdXp6eQorbXNnaWQgIkxvY2F0aW9uIgorbXNnc3RyICJVbcOtc3TEm27DrSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTQ5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU1MworIywgZnV6enkKK21zZ2lkICJOYW1lIgorbXNnc3RyICJOw6F6ZXYiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTE1NCAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NTMKKyMsIGZ1enp5Cittc2dpZCAiVHlwZSIKK21zZ3N0ciAiVHlwIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNjYKKyMsIGZ1enp5Cittc2dpZCAiX0RvbWFpbi4uLiIKK21zZ3N0ciAiRG9tw6luYSIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBbb3B0aW9uc11cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLXMgLS1zc2ggICAgICAgICAgICAgQnJvd3NlIFNTSCBzZXJ2ZXJzXG4iCisiICAgIC12IC0tdm5jICAgICAgICAgICAgIEJyb3dzZSBWTkMgc2VydmVyc1xuIgorIiAgICAtUyAtLXNoZWxsICAgICAgICAgICBCcm93c2UgYm90aCBTU0ggYW5kIFZOQ1xuIgorIiAgICAtZCAtLWRvbWFpbj1ET01BSU4gICBUaGUgZG9tYWluIHRvIGJyb3dzZSBpblxuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxMDEgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6Nzc1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJUb28gbWFueSBhcmd1bWVudHNcbiIKK21zZ3N0ciAiJXM6IHDFmcOtbGnFoSBtbm9obyBhcmd1bWVudMWvXG4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNDkKKyMsIGZ1enp5Cittc2dpZCAiQ2hvb3NlIFNoZWxsIFNlcnZlciIKK21zZ3N0ciAiKioqIFByb3PDrW0genZvbHRlIHNlcnZlciIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE1MQorIywgZnV6enkKK21zZ2lkICJEZXNrdG9wIgorbXNnc3RyICJQcmFjb3Zuw60gcGxvY2hhIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTUyCisjLCBmdXp6eQorbXNnaWQgIlRlcm1pbmFsIgorbXNnc3RyICJUZXJtaW7DoWwiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNTYKKyMsIGZ1enp5Cittc2dpZCAiQ2hvb3NlIFZOQyBzZXJ2ZXIiCittc2dzdHIgIioqKiBQcm9zw61tIHp2b2x0ZSBzZXJ2ZXIiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNjEKKyMsIGZ1enp5Cittc2dpZCAiQ2hvb3NlIFNTSCBzZXJ2ZXIiCittc2dzdHIgIioqKiBQcm9zw61tIHp2b2x0ZSBzZXJ2ZXIiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxODUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNvbm5lY3RpbmcgdG8gJyVzJyAuLi5cbiIKK21zZ3N0ciAiUMWZaXBvanVqaSBzZSBrOiAlcyIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjI0MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZXhlY2xwKCkgZmFpbGVkOiAlc1xuIgorbXNnc3RyICJBdXRlbnRpemFjZSBzZWxoYWxhIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MjUwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJDYW5jZWxlZC5cbiIKK21zZ3N0ciAiWnJ1xaFlbm8iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guZGVza3RvcC5pbi5pbi5oOjEKKyMsIGZ1enp5Cittc2dpZCAiQXZhaGkgU1NIIFNlcnZlciBCcm93c2VyIgorbXNnc3RyICLDmnNwxJvFoW7EmyBwxZlpaGzDocWhZW4gayBTU0ggc2VydmVydSAlc1xuIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmRlc2t0b3AuaW4uaW4uaDoyCittc2dpZCAiQnJvd3NlIGZvciBaZXJvY29uZi1lbmFibGVkIFNTSCBTZXJ2ZXJzIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2J2bmMuZGVza3RvcC5pbi5pbi5oOjEKKyMsIGZ1enp5Cittc2dpZCAiQXZhaGkgVk5DIFNlcnZlciBCcm93c2VyIgorbXNnc3RyICJQcm9obMOtxb5lxI0gc2VydmVyxa8gU1NIIEF2YWhpIgorCisjOiAuLi9hdmFoaS11aS9idm5jLmRlc2t0b3AuaW4uaW4uaDoyCittc2dpZCAiQnJvd3NlIGZvciBaZXJvY29uZi1lbmFibGVkIFZOQyBTZXJ2ZXJzIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjEwNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiOiBBbGwgZm9yIG5vd1xuIgorbXNnc3RyICJTdGF0aXN0aWt5IHBybyB2xaFlY2hueTpcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTE4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICI6IENhY2hlIGV4aGF1c3RlZFxuIgorbXNnc3RyICJwYW3Em8WlIHZ5xI1lcnDDoW5hIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoyMzkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIHNlcnZpY2UgJyVzJyBvZiB0eXBlICclcycgaW4gZG9tYWluICclcyc6ICVzXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MzQwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJzZXJ2aWNlX2Jyb3dzZXIgZmFpbGVkOiAlc1xuIgorbXNnc3RyICJQxZnDrWtheiBwcm8gcHJvaGzDrcW+ZcSNIHNlbGhhbDogJXMiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjM3OAorIywgYy1mb3JtYXQKK21zZ2lkICJhdmFoaV9zZXJ2aWNlX2Jyb3dzZXJfbmV3KCkgZmFpbGVkOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjQxNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAic2VydmljZV90eXBlX2Jyb3dzZXIgZmFpbGVkOiAlc1xuIgorbXNnc3RyICJUeXAgWyVzXSBzZSBuZXBvZGHFmWlsbyB6amlzdGl0LlxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo0NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXZhaGlfc2VydmljZV90eXBlX2Jyb3dzZXJfbmV3KCkgZmFpbGVkOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjUxOQorIywgYy1mb3JtYXQKK21zZ2lkICJhdmFoaV9kb21haW5fYnJvd3Nlcl9uZXcoKSBmYWlsZWQ6ICVzXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTM1IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozOTQKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyODAgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE2OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IHZlcnNpb24gc3RyaW5nOiAlc1xuIgorbXNnc3RyICJOZWx6ZSB2eXR2b8WZaXQgRERFIMWZZcWlZXplYyIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTQwIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozOTkKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyODUgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE3MworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE4OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IGhvc3QgbmFtZTogJXNcbiIKK21zZ3N0ciAiUG9rdXMgbyBzcG9qZW7DrSBzIGhvc3RpdGVsZW0gc2VsaGFsLiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTQ0IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo0MDMKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyODkgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE3NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiU2VydmVyIHZlcnNpb246ICVzOyBIb3N0IG5hbWU6ICVzXG4iCittc2dzdHIgIkptw6lubyBuZWJvIGFkcmVzYSBzZXJ2ZXJ1LiIKKworIy4gVHJhbnNsYXRvcnM6IFRoaXMgaXMgYSBjb2x1bW4gaGVhZGluZyB3aXRoIGFiYnJldmlhdGlvbnMgZm9yCisjLiAqICAgRXZlbnQgKCsvLSksIE5ldHdvcmsgSW50ZXJmYWNlLCBQcm90b2NvbCAoSVB2NC92NiksIERvbWFpbgorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTQ5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJFIElmY2UgUHJvdCBEb21haW5cbiIKK21zZ3N0ciAiVXLEjWl0IG7DoXpldiBkb23DqW55IgorCisjLiBUcmFuc2xhdG9yczogVGhpcyBpcyBhIGNvbHVtbiBoZWFkaW5nIHdpdGggYWJicmV2aWF0aW9ucyBmb3IKKyMuICogICBFdmVudCAoKy8tKSwgTmV0d29yayBJbnRlcmZhY2UsIFByb3RvY29sIChJUHY0L3Y2KSwgRG9tYWluCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRSBJZmNlIFByb3QgJS0qcyAlLTIwcyBEb21haW5cbiIKK21zZ3N0ciAiIgorCisjLiBXZSBoYXZlIGJlZW4gZGlzY29ubmVjdGVkLCBzbyBsZXQgcmVjb25uZWN0CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1ODUgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE2MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRGlzY29ubmVjdGVkLCByZWNvbm5lY3RpbmcgLi4uXG4iCittc2dzdHIgIlpub3Z1IHNlIHDFmWlwb2p1amkgbmEgJXMiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU5OSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo4MjkKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxNzAgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjM4NgorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI3MiAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTYwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGNsaWVudCBvYmplY3Q6ICVzXG4iCittc2dzdHIgInNkw61sZW7DvSBvYmpla3QgYCVzJyBzZSBuZXBvZGHFmWlsbyB6YXbDqXN0IgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo2MDQgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE3NQorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjE0MyAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6NTkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNsaWVudCBmYWlsdXJlLCBleGl0aW5nOiAlc1xuIgorbXNnc3RyICJOZWx6ZSBzcHVzdGl0ICVzLiAgS29uZWMuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo2MjMgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjIwNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiV2FpdGluZyBmb3IgZGFlbW9uIC4uLlxuIgorbXNnc3RyICLEjGVrw6FtIG5hIG9kcG92xJvEjy4uLiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NjQ3Cittc2dpZCAiIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLUQgLS1icm93c2UtZG9tYWlucyAgQnJvd3NlIGZvciBicm93c2luZyBkb21haW5zIGluc3RlYWQgb2Ygc2VydmljZXNcbiIKKyIgICAgLWEgLS1hbGwgICAgICAgICAgICAgU2hvdyBhbGwgc2VydmljZXMsIHJlZ2FyZGxlc3Mgb2YgdGhlIHR5cGVcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgVGhlIGRvbWFpbiB0byBicm93c2UgaW5cbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgRW5hYmxlIHZlcmJvc2UgbW9kZVxuIgorIiAgICAtdCAtLXRlcm1pbmF0ZSAgICAgICBUZXJtaW5hdGUgYWZ0ZXIgZHVtcGluZyBhIG1vcmUgb3IgbGVzcyBjb21wbGV0ZSAiCisibGlzdFxuIgorIiAgICAtYyAtLWNhY2hlICAgICAgICAgICBUZXJtaW5hdGUgYWZ0ZXIgZHVtcGluZyBhbGwgZW50cmllcyBmcm9tIHRoZSBjYWNoZVxuIgorIiAgICAtbCAtLWlnbm9yZS1sb2NhbCAgICBJZ25vcmUgbG9jYWwgc2VydmljZXNcbiIKKyIgICAgLXIgLS1yZXNvbHZlICAgICAgICAgUmVzb2x2ZSBzZXJ2aWNlcyBmb3VuZFxuIgorIiAgICAtZiAtLW5vLWZhaWwgICAgICAgICBEb24ndCBmYWlsIGlmIHRoZSBkYWVtb24gaXMgbm90IGF2YWlsYWJsZVxuIgorIiAgICAtcCAtLXBhcnNhYmxlICAgICAgICBPdXRwdXQgaW4gcGFyc2FibGUgZm9ybWF0XG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NjYwCittc2dpZCAiIgorIiAgICAtayAtLW5vLWRiLWxvb2t1cCAgICBEb24ndCBsb29rdXAgc2VydmljZSB0eXBlc1xuIgorIiAgICAtYiAtLWR1bXAtZGIgICAgICAgICBEdW1wIHNlcnZpY2UgdHlwZSBkYXRhYmFzZVxuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjc2NiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjE5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJUb28gZmV3IGFyZ3VtZW50c1xuIgorbXNnc3RyICJQxZnDrWxpxaEgbcOhbG8gYXJndW1lbnTFry4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjgyMSAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6Mzc4CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjY0IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBzaW1wbGUgcG9sbCBvYmplY3QuXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjc2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJFc3RhYmxpc2hlZCB1bmRlciBuYW1lICclcydcbiIKK21zZ3N0ciAiTsOhemV2IGlrb255IHMgbG9nZW0iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo4MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyOiAlc1xuIgorbXNnc3RyICIiCisiTmVwb2RhxZlpbG8gc2UgemFyZWdpc3Ryb3ZhdCBmdW5rY2kgcHJvIG9ic2xvdcW+ZW7DrSB1ZMOhbG9zdGkgXCJ6YXbFmWVuw60gb2tuYVwiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6OTQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIk5hbWUgY29sbGlzaW9uLCBwaWNraW5nIG5ldyBuYW1lICclcycuXG4iCittc2dzdHIgIlphZMOhbsOtIG7DoXp2dSBub3bDqSBzbG/Fvmt5IgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTE0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGVudHJ5IGdyb3VwOiAlc1xuIgorbXNnc3RyICJOZWx6ZSB2eXR2b8WZaXQga2zDrcSNIHJlZ2lzdHLFryBwcm8gc291Ym9yeSAnJXMnLiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjEyNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBhZGRyZXNzOiAlc1xuIgorbXNnc3RyICJQxZlpZGF0IGRvIGFkcmVzw6HFmWUiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxMzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgc2VydmljZTogJXNcbiIKK21zZ3N0ciAiS2xpa27Em3RlIGsgcMWZaWTDoW7DrSBzbHXFvmJ5IgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTQwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gYWRkIHN1YnR5cGUgJyVzJzogJXNcbiIKK21zZ3N0ciAiTmVwb2RhxZlpbG8gc2UgcMWZaWRhdCB6cHLDoXZ1OlxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTkxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJIb3N0IG5hbWUgY29uZmxpY3RcbiIKK21zZ3N0ciAiICAgIC1zLCAtLXNob3J0ICAgICAgICAgICBrcsOhdGvDqSBqbcOpbm8gcG/EjcOtdGHEjWVcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgW29wdGlvbnNdICVzIDxuYW1lPiA8dHlwZT4gPHBvcnQ+IFs8dHh0IC4uLj5dXG4iCisiJXMgW29wdGlvbnNdICVzIDxob3N0LW5hbWU+IDxhZGRyZXNzPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLXMgLS1zZXJ2aWNlICAgICAgICAgUHVibGlzaCBzZXJ2aWNlXG4iCisiICAgIC1hIC0tYWRkcmVzcyAgICAgICAgIFB1Ymxpc2ggYWRkcmVzc1xuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBFbmFibGUgdmVyYm9zZSBtb2RlXG4iCisiICAgIC1kIC0tZG9tYWluPURPTUFJTiAgIERvbWFpbiB0byBwdWJsaXNoIHNlcnZpY2UgaW5cbiIKKyIgICAgLUggLS1ob3N0PURPTUFJTiAgICAgSG9zdCB3aGVyZSBzZXJ2aWNlIHJlc2lkZXNcbiIKKyIgICAgICAgLS1zdWJ0eXBlPVNVQlRZUEUgQW4gYWRkaXRpb25hbCBzdWJ0eXBlIHRvIHJlZ2lzdGVyIHRoaXMgc2VydmljZSAiCisid2l0aFxuIgorIiAgICAtUiAtLW5vLXJldmVyc2UgICAgICBEbyBub3QgcHVibGlzaCByZXZlcnNlIGVudHJ5IHdpdGggYWRkcmVzc1xuIgorIiAgICAtZiAtLW5vLWZhaWwgICAgICAgICBEb24ndCBmYWlsIGlmIHRoZSBkYWVtb24gaXMgbm90IGF2YWlsYWJsZVxuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozMDMgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjMxOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQmFkIG51bWJlciBvZiBhcmd1bWVudHNcbiIKK21zZ3N0ciAiY2h5Ym7DvSBwb8SNZXQgYXJndW1lbnTFryIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjMyOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIHBvcnQgbnVtYmVyOiAlc1xuIgorbXNnc3RyICJOZW1vaHUgenByYWNvdmF0IHNvdWJvciBYTUwgXCIlc1wiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MzYxIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyNDYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIk5vIGNvbW1hbmQgc3BlY2lmaWVkLlxuIgorbXNnc3RyICJOZWJ5bCB1dmVkZW4gxb7DoWRuw70gcMWZw61rYXouIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6ODkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIGhvc3QgbmFtZSAnJXMnOiAlc1xuIgorbXNnc3RyICJQb2t1cyBvIHNwb2plbsOtIHMgaG9zdGl0ZWxlbSBzZWxoYWwuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MTI2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSBhZGRyZXNzICclcyc6ICVzXG4iCittc2dzdHIgIk5lbW9odSByb3pwb3puYXQgbmVibyByb3rFocOtxZlpdCAnJXMiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoxNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFtvcHRpb25zXSAlcyA8aG9zdCBuYW1lIC4uLj5cbiIKKyIlcyBbb3B0aW9uc10gJXMgPGFkZHJlc3MgLi4uID5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgU2hvdyB2ZXJzaW9uXG4iCisiICAgIC1uIC0tbmFtZSAgICAgICAgICAgIFJlc29sdmUgaG9zdCBuYW1lXG4iCisiICAgIC1hIC0tYWRkcmVzcyAgICAgICAgIFJlc29sdmUgYWRkcmVzc1xuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBFbmFibGUgdmVyYm9zZSBtb2RlXG4iCisiICAgIC02ICAgICAgICAgICAgICAgICAgIExvb2t1cCBJUHY2IGFkZHJlc3NcbiIKKyIgICAgLTQgICAgICAgICAgICAgICAgICAgTG9va3VwIElQdjQgYWRkcmVzc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyOTkgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE4MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBob3N0IG5hbWUgcmVzb2x2ZXI6ICVzXG4iCittc2dzdHIgIk5lbHplIHZ5dHZvxZlpdCBqbcOpbm8gZG/EjWFzbsOpaG8gc291Ym9ydSIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjMwOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIGFkZHJlc3MgJyVzJ1xuIgorbXNnc3RyICJBbmFsw716YSB2Q2FyZCBzZSBuZXpkYcWZaWxhLiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjMxNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBhZGRyZXNzIHJlc29sdmVyOiAlc1xuIgorbXNnc3RyICJOZW1vaHUgdnl0dm/FmWl0IHNvY2tldCBJUHY0OiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFtvcHRpb25zXSA8bmV3IGhvc3QgbmFtZT5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgU2hvdyB2ZXJzaW9uXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cywgZXhwZWN0aW5nIGV4YWN0bHkgb25lLlxuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxOTMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkhvc3QgbmFtZSBzdWNjZXNzZnVsbHkgY2hhbmdlZCB0byAlc1xuIgorbXNnc3RyICJNw61zdG7DrSBhZHJlc8OhxZkgw7pzcMSbxaFuxJsgem3Em27Em24gbmEgJXNcbiIKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9wby9kYS5wbyBiL2F2YWhpLTAuNi4zMS9wby9kYS5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTg0OTY1Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL3BvL2RhLnBvCkBAIC0wLDAgKzEsODc4IEBACisjIERhbmlzaCB0cmFuc2xhdGlvbiBmb3IgYXZhaGkuCisjIENvcHlyaWdodCAoQykgMjAxMCBhdmFoaSAmIG5lZGVuc3TDpWVuZGUgb3ZlcnPDpnR0ZXJlLgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgYXZhaGkgcGFja2FnZS4KKyMgSm9lIEhhbnNlbiA8am9lZGFsdG9uMkB5YWhvby5kaz4sIDIwMTAuCisjIEtvcnJla3R1cmzDpnN0IEFzaywgMjAxMC4KKyMKKyMga29udmVudGlvbmVyOgorIyBicm93c2UgLT4gZ2VubmVtc2UKKyMgcmVzb2x2ZSAtPiBvcGzDuHMKKyMgcmVzb2x2ZXIgLT4gb3Bsw7hzZXIgPyAoZ25vbWUgZ3ZmcykKKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGF2YWhpXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDExLTA0LTAyIDAzOjIzKzAyMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDEwLTA4LTI0IDIxOjA2KzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEpvZSBIYW5zZW4gPGpvZWRhbHRvbjJAeWFob28uZGs+XG4iCisiTGFuZ3VhZ2UtVGVhbTogRGFuaXNoIDxkYW5za0BkYW5zay1ncnVwcGVuLmRrPlxuIgorIkxhbmd1YWdlOiBkYVxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozMAorbXNnaWQgIk9LIgorbXNnc3RyICJPLmsuIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozMQorbXNnaWQgIk9wZXJhdGlvbiBmYWlsZWQiCittc2dzdHIgIkhhbmRsaW5nIG1pc2x5a2tlZGVzIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozMgorbXNnaWQgIkJhZCBzdGF0ZSIKK21zZ3N0ciAiVWd5bGRpZyB0aWxzdGFuZCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzMKK21zZ2lkICJJbnZhbGlkIGhvc3QgbmFtZSIKK21zZ3N0ciAiVWd5bGRpZ3QgdsOmcnRzbmF2biIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzQKK21zZ2lkICJJbnZhbGlkIGRvbWFpbiBuYW1lIgorbXNnc3RyICJVZ3lsZGlndCBkb23Dpm5lbmF2biIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzUKK21zZ2lkICJObyBzdWl0YWJsZSBuZXR3b3JrIHByb3RvY29sIGF2YWlsYWJsZSIKK21zZ3N0ciAiSW5nZW4gZWduZXQgbmV0dsOmcmtzcHJvdG9rb2wgdGlsZ8OmbmdlbGlnIgorCisjIFRUTCAtPiB2YXIgZW4gZm9ya29ydGVsc2UgZm9yIFRpbWUgdG8gbGl2ZQorIyBtw6Vza2UgYmVkcmUgYXQgc2lnZSBETlMtdGlkc2zDpm5nZGUgZnJlbWZvciBETlMtVFRMPworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzYKK21zZ2lkICJJbnZhbGlkIEROUyBUVEwiCittc2dzdHIgIlVneWxkaWcgRE5TLVRUTCIKKworIyBodmFkIGVyIGRldHRlPworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzcKK21zZ2lkICJSZXNvdXJjZSByZWNvcmQga2V5IGlzIHBhdHRlcm4iCittc2dzdHIgIlJlc3NvdXJjZXBvc3Ruw7hnbGUgZXIgbcO4bnN0ZXIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM4Cittc2dpZCAiTG9jYWwgbmFtZSBjb2xsaXNpb24iCittc2dzdHIgIkxva2FsIG5hdm5la29sbGlzaW9uIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozOQorbXNnaWQgIkludmFsaWQgcmVjb3JkIgorbXNnc3RyICJVZ3lsZGlnIHBvc3QiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQxCittc2dpZCAiSW52YWxpZCBzZXJ2aWNlIG5hbWUiCittc2dzdHIgIlVneWxkaWd0IHRqZW5lc3RlbmF2biIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDIKK21zZ2lkICJJbnZhbGlkIHNlcnZpY2UgdHlwZSIKK21zZ3N0ciAiVWd5bGRpZyB0amVuZXN0ZXR5cGUiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQzCittc2dpZCAiSW52YWxpZCBwb3J0IG51bWJlciIKK21zZ3N0ciAiVWd5bGRpZ3QgcG9ydG51bW1lciIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDQKK21zZ2lkICJJbnZhbGlkIHJlY29yZCBrZXkiCittc2dzdHIgIlVneWxkaWcgcG9zdG7DuGdsZSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDUKK21zZ2lkICJJbnZhbGlkIGFkZHJlc3MiCittc2dzdHIgIlVneWxkaWcgYWRyZXNzZSIKKworIyBUaWRzdWRsw7hiIG7DpWV0CisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NgorbXNnaWQgIlRpbWVvdXQgcmVhY2hlZCIKK21zZ3N0ciAiVGlkZW4gbMO4YiB1ZCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDcKK21zZ2lkICJUb28gbWFueSBjbGllbnRzIgorbXNnc3RyICJGb3IgbWFuZ2Uga2xpZW50ZXIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQ4Cittc2dpZCAiVG9vIG1hbnkgb2JqZWN0cyIKK21zZ3N0ciAiRm9yIG1hbmdlIG9iamVrdGVyIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0OQorbXNnaWQgIlRvbyBtYW55IGVudHJpZXMiCittc2dzdHIgIkZvciBtYW5nZSBwdW5rdGVyIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1MAorbXNnaWQgIk9TIEVycm9yIgorbXNnc3RyICJPUy1mZWpsIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1MgorbXNnaWQgIkFjY2VzcyBkZW5pZWQiCittc2dzdHIgIkFkZ2FuZyBuw6ZndGV0IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1MworbXNnaWQgIkludmFsaWQgb3BlcmF0aW9uIgorbXNnc3RyICJVZ3lsZGlnIGhhbmRsaW5nIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1NAorbXNnaWQgIkFuIHVuZXhwZWN0ZWQgRC1CdXMgZXJyb3Igb2NjdXJlZCIKK21zZ3N0ciAiRGVyIG9wc3RvZCBlbiB1dmVudGV0IEQtQnVzLWZlamwiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU1Cittc2dpZCAiRGFlbW9uIGNvbm5lY3Rpb24gZmFpbGVkIgorbXNnc3RyICJEw6Ztb25mb3JiaW5kZWxzZSBtaXNseWtrZWRlcyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTYKK21zZ2lkICJNZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICJIdWtvbW1lbHNlIG9wYnJ1Z3QiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU3Cittc2dpZCAiVGhlIG9iamVjdCBwYXNzZWQgaW4gd2FzIG5vdCB2YWxpZCIKK21zZ3N0ciAiT2JqZWt0ZXQsIGRlciBibGV2IHNhdCBpbmQsIHZhciBpa2tlIGd5bGRpZ3QiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU4Cittc2dpZCAiRGFlbW9uIG5vdCBydW5uaW5nIgorbXNnc3RyICJEw6Ztb24ga8O4cmVyIGlra2UiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU5Cittc2dpZCAiSW52YWxpZCBpbnRlcmZhY2UgaW5kZXgiCittc2dzdHIgIlVneWxkaWd0IGdyw6Zuc2VmbGFkZWluZGVrcyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjAKK21zZ2lkICJJbnZhbGlkIHByb3RvY29sIHNwZWNpZmljYXRpb24iCittc2dzdHIgIlVneWxkaWcgcHJvdG9rb2xzcGVjaWZpa2F0aW9uIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2MQorbXNnaWQgIkludmFsaWQgZmxhZ3MiCittc2dzdHIgIlVneWxkaWdlIGZsYWciCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjYzCittc2dpZCAiTm90IGZvdW5kIgorbXNnc3RyICJJa2tlIGZ1bmRldCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjQKK21zZ2lkICJJbnZhbGlkIGNvbmZpZ3VyYXRpb24iCittc2dzdHIgIlVneWxkaWcga29uZmlndXJhdGlvbiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjUKK21zZ2lkICJWZXJzaW9uIG1pc21hdGNoIgorbXNnc3RyICJGb3Jza2VsbGlnZSB2ZXJzaW9uZXIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY2Cittc2dpZCAiSW52YWxpZCBzZXJ2aWNlIHN1YnR5cGUiCittc2dzdHIgIlVneWxkaWcgdGplbmVzdGV1bmRlcnR5cGUiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY3Cittc2dpZCAiSW52YWxpZCBwYWNrZXQiCittc2dzdHIgIlVneWxkaWcgcGFra2UiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY4Cittc2dpZCAiSW52YWxpZCBETlMgcmV0dXJuIGNvZGUiCittc2dzdHIgIlVneWxkaWcgRE5TLXJldHVya29kZSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjkKK21zZ2lkICJETlMgZmFpbHVyZTogRk9STUVSUiIKK21zZ3N0ciAiRE5TLWZlamw6IEZPUk1FUlIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjcwCittc2dpZCAiRE5TIGZhaWx1cmU6IFNFUlZGQUlMIgorbXNnc3RyICJETlMtZmVqbDogU0VSVkZBSUwiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjcxCittc2dpZCAiRE5TIGZhaWx1cmU6IE5YRE9NQUlOIgorbXNnc3RyICJETlMtZmVqbDogTlhET01BSU4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjcyCittc2dpZCAiRE5TIGZhaWx1cmU6IE5PVElNUCIKK21zZ3N0ciAiRE5TLWZlamw6IE5PVElNUCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzQKK21zZ2lkICJETlMgZmFpbHVyZTogUkVGVVNFRCIKK21zZ3N0ciAiRE5TLWZlamw6IFJFRlVTRUQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc1Cittc2dpZCAiRE5TIGZhaWx1cmU6IFlYRE9NQUlOIgorbXNnc3RyICJETlMtZmVqbDogWVhET01BSU4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc2Cittc2dpZCAiRE5TIGZhaWx1cmU6IFlYUlJTRVQiCittc2dzdHIgIkROUy1mZWpsOiBZWFJSU0VUIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3NworbXNnaWQgIkROUyBmYWlsdXJlOiBOWFJSU0VUIgorbXNnc3RyICJETlMtZmVqbDogTlhSUlNFVCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzgKK21zZ2lkICJETlMgZmFpbHVyZTogTk9UQVVUSCIKK21zZ3N0ciAiRE5TLWZlamw6IE5PVEFVVEgiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc5Cittc2dpZCAiRE5TIGZhaWx1cmU6IE5PVFpPTkUiCittc2dzdHIgIkROUy1mZWpsOiBOT1RaT05FIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4MAorbXNnaWQgIkludmFsaWQgUkRBVEEiCittc2dzdHIgIlVneWxkaWdlIFJEQVRBIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4MQorbXNnaWQgIkludmFsaWQgRE5TIHR5cGUiCittc2dzdHIgIlVneWxkaWcgRE5TLXR5cGUiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjgyCittc2dpZCAiSW52YWxpZCBETlMgY2xhc3MiCittc2dzdHIgIlVneWxkaWcgRE5TLWtsYXNzZSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODMKK21zZ2lkICJOb3Qgc3VwcG9ydGVkIgorbXNnc3RyICJJa2tlIHVuZGVyc3TDuHR0ZXQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjg1Cittc2dpZCAiTm90IHBlcm1pdHRlZCIKK21zZ3N0ciAiSWtrZSB0aWxsYWR0IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4NgorbXNnaWQgIkludmFsaWQgYXJndW1lbnQiCittc2dzdHIgIlVneWxkaWd0IGFyZ3VtZW50IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4NworbXNnaWQgIklzIGVtcHR5IgorbXNnc3RyICJFciB0b20iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjg4Cittc2dpZCAiVGhlIHJlcXVlc3RlZCBvcGVyYXRpb24gaXMgaW52YWxpZCBiZWNhdXNlIHJlZHVuZGFudCIKK21zZ3N0ciAiRGVuIGZvcmVzcHVyZ3RlIGhhbmRsaW5nIGVyIHVneWxkaWcgcMOlIGdydW5kIGFmIHJlZHVuZGFucyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6OTQKK21zZ2lkICJJbnZhbGlkIEVycm9yIENvZGUiCittc2dzdHIgIlVneWxkaWcgZmVqbGtvZGUiCisKKyM6IC4uL2F2YWhpLWRpc2NvdmVyLXN0YW5kYWxvbmUvYXZhaGktZGlzY292ZXIudWkuaDoxCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6NzYKK21zZ2lkICI8aT5ObyBzZXJ2aWNlIGN1cnJlbnRseSBzZWxlY3RlZC48L2k+IgorbXNnc3RyICI8aT5JbmdlbiB0amVuZXN0ZSB2YWxndCBpIMO4amVibGlra2V0LjwvaT4iCisKKyM6IC4uL2F2YWhpLWRpc2NvdmVyLXN0YW5kYWxvbmUvYXZhaGktZGlzY292ZXIudWkuaDoyCittc2dpZCAiQXZhaGkgRGlzY292ZXJ5IgorbXNnc3RyICJBdmFoaSBEaXNjb3ZlcnkiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5kZXNrdG9wLmluLmluLmg6MQorbXNnaWQgIkF2YWhpIFplcm9jb25mIEJyb3dzZXIiCittc2dzdHIgIkF2YWhpIFplcm9jb25mLWJyb3dzZXIiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5kZXNrdG9wLmluLmluLmg6MgorbXNnaWQgIkJyb3dzZSBmb3IgWmVyb2NvbmYgc2VydmljZXMgYXZhaWxhYmxlIG9uIHlvdXIgbmV0d29yayIKK21zZ3N0ciAiS2lnIGVmdGVyIHRpbGfDpm5nZWxpZ2UgWmVyb2NvbmZ0amVuZXN0ZXIgcMOlIGRpdCBuZXR2w6ZyayIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIyNAorbXNnaWQgIlRYVCIKK21zZ3N0ciAiVFhUIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI2Cittc2dpZCAiVFhUIERhdGE6IgorbXNnc3RyICJUWFQtZGF0YToiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMjYKK21zZ2lkICJlbXB0eSIKK21zZ3N0ciAidG9tIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI4Cittc2dpZCAiU2VydmljZSBUeXBlOiIKK21zZ3N0ciAiVGplbmVzdGV0eXBlOiIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIyOQorbXNnaWQgIlNlcnZpY2UgTmFtZToiCittc2dzdHIgIlRqZW5lc3RlbmF2bjoiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMzAKK21zZ2lkICJEb21haW4gTmFtZToiCittc2dzdHIgIkRvbcOmbmVuYXZuOiIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIzMQorbXNnaWQgIkludGVyZmFjZToiCittc2dzdHIgIkdyw6Zuc2VmbGFkZToiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMzIKK21zZ2lkICJBZGRyZXNzOiIKK21zZ3N0ciAiQWRyZXNzZToiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTg1Cittc2dpZCAiQnJvd3NlIFNlcnZpY2UgVHlwZXMiCittc2dzdHIgIktpZyBlZnRlciB0amVuZXN0ZXR5cGVyIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE4NQorbXNnaWQgIkEgTlVMTCB0ZXJtaW5hdGVkIGxpc3Qgb2Ygc2VydmljZSB0eXBlcyB0byBicm93c2UgZm9yIgorbXNnc3RyICJFbiBOVUxMLWFmZ3LDpm5zZXQgbGlzdGUgYWYgdGplbmVzdGV0eXBlciBhdCBraWdnZSBlZnRlciIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxOTAKK21zZ2lkICJEb21haW4iCittc2dzdHIgIkRvbcOmbmUiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTkwCittc2dpZCAiVGhlIGRvbWFpbiB0byBicm93c2UgaW4sIG9yIE5VTEwgZm9yIHRoZSBkZWZhdWx0IGRvbWFpbiIKK21zZ3N0ciAiRG9tw6ZuZXQgc29tIGRlciBza2FsIGtpZ2dlcyBpLCBlbGxlciBOVUxMIGZvciBzdGFuZGFyZGRvbcOmbmV0IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE5NgorbXNnaWQgIlNlcnZpY2UgVHlwZSIKK21zZ3N0ciAiVGplbmVzdGV0eXBlIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE5NgorbXNnaWQgIlRoZSBzZXJ2aWNlIHR5cGUgb2YgdGhlIHNlbGVjdGVkIHNlcnZpY2UiCittc2dzdHIgIlRqZW5lc3RldHlwZW4gcMOlIGRlbiB2YWxndGUgdGplbmVzdGUiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjAyIC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTAyMworbXNnaWQgIlNlcnZpY2UgTmFtZSIKK21zZ3N0ciAiVGplbmVzdGVuYXZuIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIwMgorbXNnaWQgIlRoZSBzZXJ2aWNlIG5hbWUgb2YgdGhlIHNlbGVjdGVkIHNlcnZpY2UiCittc2dzdHIgIlRqZW5lc3RlbmF2bmV0IHDDpSBkZW4gdmFsZ3RlIHRqZW5lc3RlIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIwOAorbXNnaWQgIkFkZHJlc3MiCittc2dzdHIgIkFkcmVzc2UiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjA4Cittc2dpZCAiVGhlIGFkZHJlc3Mgb2YgdGhlIHJlc29sdmVkIHNlcnZpY2UiCittc2dzdHIgIkFkcmVzc2VuIHDDpSBkZW4ga2xhcmxhZ3RlIHRqZW5lc3RlIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIxMworbXNnaWQgIlBvcnQiCittc2dzdHIgIlBvcnQiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjEzCittc2dpZCAiVGhlIElQIHBvcnQgbnVtYmVyIG9mIHRoZSByZXNvbHZlZCBzZXJ2aWNlIgorbXNnc3RyICJJUC1wb3J0bnVtbWVyZXQgcMOlIGRlbiBrbGFybGFndGUgdGplbmVzdGUiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjE5Cittc2dpZCAiSG9zdCBOYW1lIgorbXNnc3RyICJWw6ZydHNuYXZuIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIxOQorbXNnaWQgIlRoZSBob3N0IG5hbWUgb2YgdGhlIHJlc29sdmVkIHNlcnZpY2UiCittc2dzdHIgIlbDpnJ0c25hdm5ldCBww6UgZGVuIGtsYXJsYWd0ZSB0amVuZXN0ZSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMjUKK21zZ2lkICJUWFQgRGF0YSIKK21zZ3N0ciAiVFhULWRhdGEiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjI1Cittc2dpZCAiVGhlIFRYVCBkYXRhIG9mIHRoZSByZXNvbHZlZCBzZXJ2aWNlIgorbXNnc3RyICJUWFQtZGF0YWVuZSBww6UgZGVuIGtsYXJsYWd0ZSB0amVuZXN0ZSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMzAKK21zZ2lkICJSZXNvbHZlIFNlcnZpY2UiCittc2dzdHIgIk9wbMO4cyB0amVuZXN0ZSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMzAKK21zZ2lkICJSZXNvbHZlIHRoZSBzZWxlY3RlZCBzZXJ2aWNlIGF1dG9tYXRpY2FsbHkgYmVmb3JlIHJldHVybmluZyIKK21zZ3N0ciAiT3Bsw7hzIGRlbiB2YWxndGUgdGplbmVzdGUgYXV0b21hdGlzayBmw7hyIHJldHVybmVyaW5nIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIzNgorbXNnaWQgIlJlc29sdmUgU2VydmljZSBIb3N0IE5hbWUiCittc2dzdHIgIk9wbMO4cyB0amVuZXN0ZXbDpnJ0c25hdm4iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjM2Cittc2dpZCAiIgorIlJlc29sdmUgdGhlIGhvc3QgbmFtZSBvZiB0aGUgc2VsZWN0ZWQgc2VydmljZSBhdXRvbWF0aWNhbGx5IGJlZm9yZSByZXR1cm5pbmciCittc2dzdHIgIk9wbMO4cyB2w6ZydHNuYXZuZXQgcMOlIGRlbiB2YWxndGUgdGplbmVzdGUgYXV0b21hdGlzayBmw7hyIHJldHVybmVyaW5nIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjI0MgorbXNnaWQgIkFkZHJlc3MgZmFtaWx5IgorbXNnc3RyICJBZHJlc3NlZmFtaWxpZSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyNDIKK21zZ2lkICJUaGUgYWRkcmVzcyBmYW1pbHkgZm9yIGhvc3QgbmFtZSByZXNvbHV0aW9uIgorbXNnc3RyICJBZHJlc3NlZmFtaWxpZW4gZm9yIHbDpnJ0c25hdm5zb3Bsw7hzbmluZyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzozMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaGkgY2xpZW50IGZhaWx1cmU6ICVzIgorbXNnc3RyICJLbGllbnRmZWpsIGZvciBBdmFoaTogJXMiCisKKyMgR05PTUUgZ3ZmczogaGFyIG9wbMO4c2VyIGZvciByZXNvbHZlci4KKyMgbcOlc2tlIGtsYXJsw6ZnZ2VyCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjM4OAorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFoaSByZXNvbHZlciBmYWlsdXJlOiAlcyIKK21zZ3N0ciAiT3Bsw7hzZXJmZWpsIGZvciBBdmFoaTogJXMiCisKKyMgbcOlc2tlIG9tdmVuZHQgb2cgb21hcnJhbmfDqXIgJXMnZXJuZToKKyMgS3VubmUgaWtrZSBnZW5uZW1zZSBkb23Dpm5lICUkMnMgZm9yIHRqZW5lc3RldHlwZSAlJDFzOiAlJDNzCisjIChkZXQgZXIgbXVsaWd0IGF0IGRldCBlciAkJTJzIGVsLiB0aWxzdi4sIGthbiBpa2tlIGxpZ2UgaHVza2UgZm9ybWF0ZXQpCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjUxOAorIywgYy1mb3JtYXQKK21zZ2lkICJCcm93c2luZyBmb3Igc2VydmljZSB0eXBlICVzIGluIGRvbWFpbiAlcyBmYWlsZWQ6ICVzIgorbXNnc3RyICJLdW5uZSBpa2tlIGdlbm5lbXNlIGRvbcOmbmUgJCUycyBmb3IgdGplbmVzdGV0eXBlICQlMXM6ICQlM3MiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NTE5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjE2OAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTY5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjE3OAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTc5Cittc2dpZCAibi9hIgorbXNnc3RyICItIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjY0OQorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFoaSBkb21haW4gYnJvd3NlciBmYWlsdXJlOiAlcyIKK21zZ3N0ciAiRG9tw6ZuZWJyb3dzZXJmZWpsIGZvciBBdmFoaTogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6Njg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWFkIEF2YWhpIGRvbWFpbjogJXMiCittc2dzdHIgIkt1bm5lIGlra2UgbMOmc2UgQXZhaGlkb23Dpm5lOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo3MDYKK21zZ2lkICJCcm93c2Ugc2VydmljZSB0eXBlIGxpc3QgaXMgZW1wdHkhIgorbXNnc3RyICJMaXN0ZW4gb3ZlciB0eXBlciBhZiBnZW5uZW1zeW5zdGplbmVzdGVyIGVyIHRvbSEiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjb25uZWN0IHRvIEF2YWhpIHNlcnZlcjogJXMiCittc2dzdHIgIkt1bm5lIGlra2UgZm9yYmluZGUgdGlsIEF2YWhpc2VydmVyOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo3MzUKK21zZ2lkICJCcm93c2luZyBmb3Igc2VydmljZXMgb24gPGI+bG9jYWwgbmV0d29yazwvYj46IgorbXNnc3RyICJHZW5uZW1zZXIgZm9yIHRqZW5lc3RlciBww6UgPGI+bG9rYWxuZXR2w6ZyazwvYj46IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjczNworIywgYy1mb3JtYXQKK21zZ2lkICJCcm93c2luZyBmb3Igc2VydmljZXMgaW4gZG9tYWluIDxiPiVzPC9iPjoiCittc2dzdHIgIkdlbm5lbXNlciBlZnRlciB0amVuZXN0ZXIgaSBkb23Dpm5lIDxiPiVzPC9iPjoiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NzczCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgYnJvd3NlciBmb3IgJXM6ICVzIgorbXNnc3RyICJLdW5uZSBpa2tlIG9wcmV0dGUgYnJvd3NlciBmb3IgJXM6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjkwMworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIHJlc29sdmVyIGZvciAlcyBvZiB0eXBlICVzIGluIGRvbWFpbiAlczogJXMiCittc2dzdHIgIkt1bm5lIGlra2Ugb3ByZXR0ZSBvcGzDuHNlciBmb3IgJXMgYWYgdHlwZW4gJXMgaSBkb23Dpm5lICVzOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo5NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBkb21haW4gYnJvd3NlcjogJXMiCittc2dzdHIgIkt1bm5lIGlra2Ugb3ByZXR0ZSBkb23Dpm5lYnJvd3NlcjogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6OTg5Cittc2dpZCAiQ2hhbmdlIGRvbWFpbiIKK21zZ3N0ciAiw4ZuZHIgZG9tw6ZuZSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMDMxIC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTE2MgorbXNnaWQgIkJyb3dzaW5nLi4uIgorbXNnc3RyICJHZW5uZW1zZXIuLi4iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTEyMAorbXNnaWQgIkluaXRpYWxpemluZy4uLiIKK21zZ3N0ciAiSW5pdGlhbGlzZXJlci4uLiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTQ0Cittc2dpZCAiTG9jYXRpb24iCittc2dzdHIgIlN0ZWQiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTE0OSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NTMKK21zZ2lkICJOYW1lIgorbXNnc3RyICJOYXZuIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNTQgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTUzCittc2dpZCAiVHlwZSIKK21zZ3N0ciAiVHlwZSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTY2Cittc2dpZCAiX0RvbWFpbi4uLiIKK21zZ3N0ciAiX0RvbcOmbmUuLi4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzo1NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgW29wdGlvbnNdXG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1zIC0tc3NoICAgICAgICAgICAgIEJyb3dzZSBTU0ggc2VydmVyc1xuIgorIiAgICAtdiAtLXZuYyAgICAgICAgICAgICBCcm93c2UgVk5DIHNlcnZlcnNcbiIKKyIgICAgLVMgLS1zaGVsbCAgICAgICAgICAgQnJvd3NlIGJvdGggU1NIIGFuZCBWTkNcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgVGhlIGRvbWFpbiB0byBicm93c2UgaW5cbiIKK21zZ3N0ciAiIgorIiVzIFt0aWx2YWxnXVxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBWaXMgZGVubmUgaGrDpmxwXG4iCisiICAgIC1zIC0tc3NoICAgICAgICAgICAgIEdlbm5lbXNlIFNTSC1zZXJ2ZXJlXG4iCisiICAgIC12IC0tdm5jICAgICAgICAgICAgIEdlbm5lbXNlIFZOQy1zZXJ2ZXJlXG4iCisiICAgIC1TIC0tc2hlbGwgICAgICAgICAgIEdlbm5lbXNlIGLDpWRlIFNTSCBvZyBWTkNcbiIKKyIgICAgLWQgLS1kb21haW49RE9Nw4ZORSAgIERvbcOmbmV0IGRlciBza2FsIGdlbm5lbXNlc1xuIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTAxIC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjc3NQorIywgYy1mb3JtYXQKK21zZ2lkICJUb28gbWFueSBhcmd1bWVudHNcbiIKK21zZ3N0ciAiRm9yIG1hbmdlIGFyZ3VtZW50ZXJcbiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE0OQorbXNnaWQgIkNob29zZSBTaGVsbCBTZXJ2ZXIiCittc2dzdHIgIlbDpmxnIHNrYWxzZXJ2ZXIiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNTEKK21zZ2lkICJEZXNrdG9wIgorbXNnc3RyICJTa3JpdmVib3JkIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTUyCittc2dpZCAiVGVybWluYWwiCittc2dzdHIgIlRlcm1pbmFsIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTU2Cittc2dpZCAiQ2hvb3NlIFZOQyBzZXJ2ZXIiCittc2dzdHIgIlbDpmxnIFZOQy1zZXJ2ZXIiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNjEKK21zZ2lkICJDaG9vc2UgU1NIIHNlcnZlciIKK21zZ3N0ciAiVsOmbGcgU1NILXNlcnZlciIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE4NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb25uZWN0aW5nIHRvICclcycgLi4uXG4iCittc2dzdHIgIkZvcmJpbmRlciB0aWwgJyVzJyAuLi5cbiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjI0MAorIywgYy1mb3JtYXQKK21zZ2lkICJleGVjbHAoKSBmYWlsZWQ6ICVzXG4iCittc2dzdHIgImV4ZWNscCgpIG1pc2x5a2tlZGVzOiAlc1xuIgorCisjIGVuZ2Vsc2sgZmVqbD8KKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FuY2VsZWQuXG4iCittc2dzdHIgIkFmYnJ1ZHQuXG4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guZGVza3RvcC5pbi5pbi5oOjEKK21zZ2lkICJBdmFoaSBTU0ggU2VydmVyIEJyb3dzZXIiCittc2dzdHIgIkF2YWhpYnJvd3NlciBmb3IgU1NILXNlcnZlciIKKworIzogLi4vYXZhaGktdWkvYnNzaC5kZXNrdG9wLmluLmluLmg6MgorbXNnaWQgIkJyb3dzZSBmb3IgWmVyb2NvbmYtZW5hYmxlZCBTU0ggU2VydmVycyIKK21zZ3N0ciAiR2VubmVtc2UgZm9yIFplcm9jb25mLWFrdGl2ZXJlZGUgU1NILXNlcnZlcmUiCisKKyM6IC4uL2F2YWhpLXVpL2J2bmMuZGVza3RvcC5pbi5pbi5oOjEKK21zZ2lkICJBdmFoaSBWTkMgU2VydmVyIEJyb3dzZXIiCittc2dzdHIgIkF2YWhpYnJvd3NlciBmb3IgVk5DLXNlcnZlciIKKworIzogLi4vYXZhaGktdWkvYnZuYy5kZXNrdG9wLmluLmluLmg6MgorbXNnaWQgIkJyb3dzZSBmb3IgWmVyb2NvbmYtZW5hYmxlZCBWTkMgU2VydmVycyIKK21zZ3N0ciAiR2VubmVtc2UgZm9yIFplcm9jb25mLWFrdGl2ZXJlZGUgVk5DLXNlcnZlcmUiCisKKyMgZWxsZXIgYWxsZT8KKyMgKHRyb3IgZGVuIGVyIG8uay4pCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoxMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiOiBBbGwgZm9yIG5vd1xuIgorbXNnc3RyICI6IEFsdCBmb3IgbnVcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIjogQ2FjaGUgZXhoYXVzdGVkXG4iCittc2dzdHIgIjogTWVsbGVtbGFnZXIgb3BicnVndFxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoyMzkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIHNlcnZpY2UgJyVzJyBvZiB0eXBlICclcycgaW4gZG9tYWluICclcyc6ICVzXG4iCittc2dzdHIgIkt1bm5lIGlra2UgbMO4c2UgdGplbmVzdGUgJyVzJyBhZiB0eXBlbiAnJXMnIGkgZG9tw6ZuZSAnJXMnOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzozNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VydmljZV9icm93c2VyIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAic2VydmljZV9icm93c2VyIG1pc2x5a2tlZGVzOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzozNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXZhaGlfc2VydmljZV9icm93c2VyX25ldygpIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAiYXZhaGlfc2VydmljZV9icm93c2VyX25ldygpIG1pc2x5a2tlZGVzOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VydmljZV90eXBlX2Jyb3dzZXIgZmFpbGVkOiAlc1xuIgorbXNnc3RyICJzZXJ2aWNlX3R5cGVfYnJvd3NlciBtaXNseWtrZWRlczogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImF2YWhpX3NlcnZpY2VfdHlwZV9icm93c2VyX25ldygpIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAiYXZhaGlfc2VydmljZV90eXBlX2Jyb3dzZXJfbmV3KCkgbWlzbHlra2VkZXM6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjUxOQorIywgYy1mb3JtYXQKK21zZ2lkICJhdmFoaV9kb21haW5fYnJvd3Nlcl9uZXcoKSBmYWlsZWQ6ICVzXG4iCittc2dzdHIgImF2YWhpX2RvbWFpbl9icm93c2VyX25ldygpIG1pc2x5a2tlZGVzOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1MzUgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjM5NAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI4MCAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBxdWVyeSB2ZXJzaW9uIHN0cmluZzogJXNcbiIKK21zZ3N0ciAiS3VubmUgaWtrZSBmb3Jlc3DDuHJnZSB2ZXJzaW9uc3N0cmVuZzogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTQwIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozOTkKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyODUgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE3MworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcXVlcnkgaG9zdCBuYW1lOiAlc1xuIgorbXNnc3RyICJLdW5uZSBpa2tlIGZvcmVzcMO4cmdlIHbDpnJ0c25hdm46ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU0NCAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6NDAzCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6Mjg5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VydmVyIHZlcnNpb246ICVzOyBIb3N0IG5hbWU6ICVzXG4iCittc2dzdHIgIlNlcnZlcnZlcnNpb246ICVzOyB2w6ZydHNuYXZuOiAlc1xuIgorCisjIElmY2UgfiBpbnRlcmZhY2UgfiBncsOmbnNlZmxhZGUgfiBHckZsCisjIGRvZyBlciBkZXQgbcOlc2tlIGVuIGR1bSBpZMOpIGF0IHNrcml2ZSBkZXR0ZSBodmlzIGRlciBpa2tlIGVyIGVuCisjIG92ZXJzYXQgZG9rdW1lbnRhdGlvbiBmb3IgZGV0dGUgb2dzw6UKKyMgRSBlciBvZ3PDpSBldmVudCwgYnVyZGUgYmxpdmUgdGlsIEIuICBJZ2VuLCBodmlzIHZpIGlra2Uga2FuIG92ZXJzw6Z0dGUKKyMgZG9rdW1lbnRhdGlvbmVuLCBiw7hyIGRldCBub2sgYmVob2xkZXMuLi4KKyMuIFRyYW5zbGF0b3JzOiBUaGlzIGlzIGEgY29sdW1uIGhlYWRpbmcgd2l0aCBhYmJyZXZpYXRpb25zIGZvcgorIy4gKiAgIEV2ZW50ICgrLy0pLCBOZXR3b3JrIEludGVyZmFjZSwgUHJvdG9jb2wgKElQdjQvdjYpLCBEb21haW4KKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU0OQorIywgYy1mb3JtYXQKK21zZ2lkICJFIElmY2UgUHJvdCBEb21haW5cbiIKK21zZ3N0ciAiRSBJZmNlIFByb3QtZG9tw6ZuZVxuIgorCisjLiBUcmFuc2xhdG9yczogVGhpcyBpcyBhIGNvbHVtbiBoZWFkaW5nIHdpdGggYWJicmV2aWF0aW9ucyBmb3IKKyMuICogICBFdmVudCAoKy8tKSwgTmV0d29yayBJbnRlcmZhY2UsIFByb3RvY29sIChJUHY0L3Y2KSwgRG9tYWluCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRSBJZmNlIFByb3QgJS0qcyAlLTIwcyBEb21haW5cbiIKK21zZ3N0ciAiRSBJZmNlIFByb3QgJS0qcyAlLTIwcyBkb23Dpm5lXG4iCisKKyMuIFdlIGhhdmUgYmVlbiBkaXNjb25uZWN0ZWQsIHNvIGxldCByZWNvbm5lY3QKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU4NSAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkRpc2Nvbm5lY3RlZCwgcmVjb25uZWN0aW5nIC4uLlxuIgorbXNnc3RyICJBZmJydWR0LCBmb3JiaW5kZXIgaWdlbiAuLi5cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTk5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjgyOQorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE3MCAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6Mzg2CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjcyIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBjbGllbnQgb2JqZWN0OiAlc1xuIgorbXNnc3RyICJLdW5uZSBpa2tlIG9wcmV0dGUga2xpZW50b2JqZWt0OiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo2MDQgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE3NQorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjE0MyAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xpZW50IGZhaWx1cmUsIGV4aXRpbmc6ICVzXG4iCittc2dzdHIgIktsaWVudGZlamwsIGFmc2x1dHRlcjogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NjIzIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoyMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FpdGluZyBmb3IgZGFlbW9uIC4uLlxuIgorbXNnc3RyICJWZW50ZXIgcMOlIGTDpm1vbiAuLi5cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NjQ3Cittc2dpZCAiIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLUQgLS1icm93c2UtZG9tYWlucyAgQnJvd3NlIGZvciBicm93c2luZyBkb21haW5zIGluc3RlYWQgb2Ygc2VydmljZXNcbiIKKyIgICAgLWEgLS1hbGwgICAgICAgICAgICAgU2hvdyBhbGwgc2VydmljZXMsIHJlZ2FyZGxlc3Mgb2YgdGhlIHR5cGVcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgVGhlIGRvbWFpbiB0byBicm93c2UgaW5cbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgRW5hYmxlIHZlcmJvc2UgbW9kZVxuIgorIiAgICAtdCAtLXRlcm1pbmF0ZSAgICAgICBUZXJtaW5hdGUgYWZ0ZXIgZHVtcGluZyBhIG1vcmUgb3IgbGVzcyBjb21wbGV0ZSAiCisibGlzdFxuIgorIiAgICAtYyAtLWNhY2hlICAgICAgICAgICBUZXJtaW5hdGUgYWZ0ZXIgZHVtcGluZyBhbGwgZW50cmllcyBmcm9tIHRoZSBjYWNoZVxuIgorIiAgICAtbCAtLWlnbm9yZS1sb2NhbCAgICBJZ25vcmUgbG9jYWwgc2VydmljZXNcbiIKKyIgICAgLXIgLS1yZXNvbHZlICAgICAgICAgUmVzb2x2ZSBzZXJ2aWNlcyBmb3VuZFxuIgorIiAgICAtZiAtLW5vLWZhaWwgICAgICAgICBEb24ndCBmYWlsIGlmIHRoZSBkYWVtb24gaXMgbm90IGF2YWlsYWJsZVxuIgorIiAgICAtcCAtLXBhcnNhYmxlICAgICAgICBPdXRwdXQgaW4gcGFyc2FibGUgZm9ybWF0XG4iCittc2dzdHIgIiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgVmlzIGRlbm5lIGhqw6ZscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBWaXMgdmVyc2lvblxuIgorIiAgICAtRCAtLWJyb3dzZS1kb21haW5zICBHZW5uZW1zZSBlZnRlciBicm93c2luZ2RvbcOmbmVyIGkgc3RlZGVuIGZvciAiCisidGplbmVzdGVyXG4iCisiICAgIC1hIC0tYWxsICAgICAgICAgICAgIFZpcyBhbGxlIHRqZW5lc3RlciwgdWFuc2V0IHR5cGVuXG4iCisiICAgIC1kIC0tZG9tYWluPURPTcOGTkUgICBEb23Dpm5ldCBkZXIgc2thbCBnZW5uZW1zZXMgaVxuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBBa3RpdmVyIHVkZHliZW5kZSB0aWxzdGFuZFxuIgorIiAgICAtdCAtLXRlcm1pbmF0ZSAgICAgICBBZnNsdXQgZWZ0ZXIgZHVtcG5pbmcgYWYgZW4gbWVyZSBlbGxlciBtaW5kcmUgIgorImZ1bGRzdMOmbmRpZyBsaXN0ZVxuIgorIiAgICAtYyAtLWNhY2hlICAgICAgICAgICBBZnNsdXQgZWZ0ZXIgZHVtcG5pbmcgYWYgYWxsZSBwdW5rdGVyIGkgIgorIm1lbGxlbWxhZ2VyZXRcbiIKKyIgICAgLWwgLS1pZ25vcmUtbG9jYWwgICAgSWdub3JlciBsb2thbGUgdGplbmVzdGVyXG4iCisiICAgIC1yIC0tcmVzb2x2ZSAgICAgICAgIEzDuHMgZnVuZG5lIHRqZW5lc3RlclxuIgorIiAgICAtZiAtLW5vLWZhaWwgICAgICAgICBHaXYgaWtrZSBmZWpsIGh2aXMgZMOmbW9uZW4gaWtrZSBlciB0aWxnw6ZuZ2VsaWdcbiIKKyIgICAgLXAgLS1wYXJzYWJsZSAgICAgICAgVWRkYXRhIGkgZm9ydG9sa2VsaWd0IGZvcm1hdFxuIgorCisjIGV2dC4gc21pZCAtPiBkdW1wCisjICh0cm9yIGRldCBlciBpIGJldHlkbmluZ2VuICdnZW0nKQorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NjYwCittc2dpZCAiIgorIiAgICAtayAtLW5vLWRiLWxvb2t1cCAgICBEb24ndCBsb29rdXAgc2VydmljZSB0eXBlc1xuIgorIiAgICAtYiAtLWR1bXAtZGIgICAgICAgICBEdW1wIHNlcnZpY2UgdHlwZSBkYXRhYmFzZVxuIgorbXNnc3RyICIiCisiICAgIC1rIC0tbm8tZGItbG9va3VwICAgIFNsw6UgaWtrZSB0amVuZXN0ZXR5cGVyIG9wXG4iCisiICAgIC1iIC0tZHVtcC1kYiAgICAgICAgIER1bXAgdGplbmVzdGV0eXBlZGF0YWJhc2VcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NzY2IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG9vIGZldyBhcmd1bWVudHNcbiIKK21zZ3N0ciAiRm9yIGbDpSBhcmd1bWVudGVyXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjgyMSAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6Mzc4CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjY0IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBzaW1wbGUgcG9sbCBvYmplY3QuXG4iCittc2dzdHIgIkt1bm5lIGlra2Ugb3ByZXR0ZSBzaW1wZWx0IHBvbGwtb2JqZWt0LlxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXN0YWJsaXNoZWQgdW5kZXIgbmFtZSAnJXMnXG4iCittc2dzdHIgIkV0YWJsZXJldCB1bmRlciBuYXZuZXQgJyVzJ1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyOiAlc1xuIgorbXNnc3RyICJLdW5uZSBpa2tlIHJlZ2lzdHJlcmU6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICJOYW1lIGNvbGxpc2lvbiwgcGlja2luZyBuZXcgbmFtZSAnJXMnLlxuIgorbXNnc3RyICJOYXZuZXNhbW1lbnN0w7hkLCB2w6ZsZ2VyIG55dCBuYXZuICclcycuXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBlbnRyeSBncm91cDogJXNcbiIKK21zZ3N0ciAiS3VubmUgaWtrZSBvcHJldHRlIHB1bmt0Z3J1cHBlOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgYWRkcmVzczogJXNcbiIKK21zZ3N0ciAiS3VubmUgaWtrZSB0aWxmw7hqZSBhZHJlc3NlOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgc2VydmljZTogJXNcbiIKK21zZ3N0ciAiS3VubmUgaWtrZSB0aWxmw7hqZSB0amVuZXN0ZTogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE0MAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gYWRkIHN1YnR5cGUgJyVzJzogJXNcbiIKK21zZ3N0ciAiS3VubmUgaWtrZSB0aWxmw7hqZSB1bmRlcnR5cGUgJyVzJzogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE5MQorIywgYy1mb3JtYXQKK21zZ2lkICJIb3N0IG5hbWUgY29uZmxpY3RcbiIKK21zZ3N0ciAiVsOmcnRzbmF2bnNrb25mbGlrdFxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBbb3B0aW9uc10gJXMgPG5hbWU+IDx0eXBlPiA8cG9ydD4gWzx0eHQgLi4uPl1cbiIKKyIlcyBbb3B0aW9uc10gJXMgPGhvc3QtbmFtZT4gPGFkZHJlc3M+XG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFNob3cgdmVyc2lvblxuIgorIiAgICAtcyAtLXNlcnZpY2UgICAgICAgICBQdWJsaXNoIHNlcnZpY2VcbiIKKyIgICAgLWEgLS1hZGRyZXNzICAgICAgICAgUHVibGlzaCBhZGRyZXNzXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgRG9tYWluIHRvIHB1Ymxpc2ggc2VydmljZSBpblxuIgorIiAgICAtSCAtLWhvc3Q9RE9NQUlOICAgICBIb3N0IHdoZXJlIHNlcnZpY2UgcmVzaWRlc1xuIgorIiAgICAgICAtLXN1YnR5cGU9U1VCVFlQRSBBbiBhZGRpdGlvbmFsIHN1YnR5cGUgdG8gcmVnaXN0ZXIgdGhpcyBzZXJ2aWNlICIKKyJ3aXRoXG4iCisiICAgIC1SIC0tbm8tcmV2ZXJzZSAgICAgIERvIG5vdCBwdWJsaXNoIHJldmVyc2UgZW50cnkgd2l0aCBhZGRyZXNzXG4iCisiICAgIC1mIC0tbm8tZmFpbCAgICAgICAgIERvbid0IGZhaWwgaWYgdGhlIGRhZW1vbiBpcyBub3QgYXZhaWxhYmxlXG4iCittc2dzdHIgIiIKKyIlcyBbdGlsdmFsZ10gJXMgPG5hdm4+IDx0eXBlPiA8cG9ydD4gWzx0ZWtzdCAuLi4+XVxuIgorIiVzIFt0aWx2YWxnXSAlcyA8dsOmcnRzbmF2bj4gPGFkcmVzc2U+XG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgICAgVmlzIGRlbm5lIGhqw6ZscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICAgIFZpcyB2ZXJzaW9uXG4iCisiICAgIC1zIC0tc2VydmljZSAgICAgICAgICAgVWRnaXYgdGplbmVzdGVcbiIKKyIgICAgLWEgLS1hZGRyZXNzICAgICAgICAgICBVZGdpdiBhZHJlc3NlXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgICAgQWt0aXZlciB1ZGR5YmVuZGUgdGlsc3RhbmRcbiIKKyIgICAgLWQgLS1kb21haW49RE9Nw4ZORSAgICAgRG9tw6ZuZSBodm9yIHRqZW5lc3RlIHNrYWwgdWRnaXZlcyBpXG4iCisiICAgIC1IIC0taG9zdD1ET03Dhk5FICAgICAgIFbDpnJ0IGh2b3IgdGplbmVzdGUgcmVzaWRlcmVyXG4iCisiICAgICAgIC0tc3VidHlwZT1VTkRFUlRZUEUgRW4gZWtzdHJhIHVuZGVydHlwZSB0aWwgYXQgcmVnaXN0cmVyZSBkZW5uZVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRqZW5lc3RlIG1lZFxuIgorIiAgICAtUiAtLW5vLXJldmVyc2UgICAgICAgIFVkZ2l2IGlra2UgbW9kc2F0IHB1bmt0IG1lZCBhZHJlc3NlXG4iCisiICAgIC1mIC0tbm8tZmFpbCAgICAgICAgICAgRmVqbCBpa2tlIGh2aXMgZMOmbW9uZW4gaWtrZSBlciB0aWxnw6ZuZ2VsaWdcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjMwMyAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MzE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBudW1iZXIgb2YgYXJndW1lbnRzXG4iCittc2dzdHIgIlVneWxkaWd0IGFudGFsIGFyZ3VtZW50ZXJcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjMyOQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcGFyc2UgcG9ydCBudW1iZXI6ICVzXG4iCittc2dzdHIgIkt1bm5lIGlra2UgZm9ydG9sa2UgcG9ydG51bW1lcjogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjM2MSAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGNvbW1hbmQgc3BlY2lmaWVkLlxuIgorbXNnc3RyICJJbmdlbiBrb21tYW5kbyBhbmdpdmV0LlxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgaG9zdCBuYW1lICclcyc6ICVzXG4iCittc2dzdHIgIkt1bm5lIGlra2UgbMO4c2UgdsOmcnRzbmF2biAnJXMnOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIGFkZHJlc3MgJyVzJzogJXNcbiIKK21zZ3N0ciAiS3VubmUgaWtrZSBsw7hzZSBhZHJlc3NlICclcyc6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoxNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFtvcHRpb25zXSAlcyA8aG9zdCBuYW1lIC4uLj5cbiIKKyIlcyBbb3B0aW9uc10gJXMgPGFkZHJlc3MgLi4uID5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgU2hvdyB2ZXJzaW9uXG4iCisiICAgIC1uIC0tbmFtZSAgICAgICAgICAgIFJlc29sdmUgaG9zdCBuYW1lXG4iCisiICAgIC1hIC0tYWRkcmVzcyAgICAgICAgIFJlc29sdmUgYWRkcmVzc1xuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBFbmFibGUgdmVyYm9zZSBtb2RlXG4iCisiICAgIC02ICAgICAgICAgICAgICAgICAgIExvb2t1cCBJUHY2IGFkZHJlc3NcbiIKKyIgICAgLTQgICAgICAgICAgICAgICAgICAgTG9va3VwIElQdjQgYWRkcmVzc1xuIgorbXNnc3RyICIiCisiJXMgW3RpbHZhbGddICVzIDx2w6ZydHNuYXZuIC4uLj5cbiIKKyIlcyBbdGlsdmFsZ10gJXMgPGFkcmVzc2UgLi4uID5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgVmlzIGRlbm5lIGhqw6ZscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBWaXMgdmVyc2lvblxuIgorIiAgICAtbiAtLW5hbWUgICAgICAgICAgICBMw7hzIHbDpnJ0c25hdm5cbiIKKyIgICAgLWEgLS1hZGRyZXNzICAgICAgICAgTMO4cyBhZHJlc3NlXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIFZpcyB1ZGR5YmVuZGUgdGlsc3RhbmRcbiIKKyIgICAgLTYgICAgICAgICAgICAgICAgICAgU2zDpSBJUHY2LWFkcmVzc2Ugb3BcbiIKKyIgICAgLTQgICAgICAgICAgICAgICAgICAgU2zDpSBJUHY0LWFkcmVzc2Ugb3BcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI5OSAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgaG9zdCBuYW1lIHJlc29sdmVyOiAlc1xuIgorbXNnc3RyICJLdW5uZSBpa2tlIG9wcmV0dGUgdsOmcnRzbmF2bnNvcGzDuHNlcjogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjMwOQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcGFyc2UgYWRkcmVzcyAnJXMnXG4iCittc2dzdHIgIkt1bm5lIGlra2UgZm9ydG9sa2UgYWRyZXNzZSAnJXMnXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzozMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBhZGRyZXNzIHJlc29sdmVyOiAlc1xuIgorbXNnc3RyICJLdW5uZSBpa2tlIG9wcmV0dGUgYWRyZXNzZW9wbMO4c2VyOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFtvcHRpb25zXSA8bmV3IGhvc3QgbmFtZT5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgU2hvdyB2ZXJzaW9uXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKK21zZ3N0ciAiIgorIiVzIFt0aWx2YWxnXSA8bnl0IHbDpnJ0c25hdm4+XG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFZpcyBkZW5uZSBoasOmbHBcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgVmlzIHZlcnNpb25cbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgQWt0aXZlciB1ZGR5YmVuZGUgdGlsc3RhbmRcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMsIGV4cGVjdGluZyBleGFjdGx5IG9uZS5cbiIKK21zZ3N0ciAiVWd5bGRpZ3QgYW50YWwgYXJndW1lbnRlciwgZm9ydmVudGVkZSBwcsOmY2lzdCBldC5cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE5MworIywgYy1mb3JtYXQKK21zZ2lkICJIb3N0IG5hbWUgc3VjY2Vzc2Z1bGx5IGNoYW5nZWQgdG8gJXNcbiIKK21zZ3N0ciAiVsOmcnRzbmF2biDDpm5kcmV0IHRpbCAlc1xuIgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL3BvL2RlLnBvIGIvYXZhaGktMC42LjMxL3BvL2RlLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0ZWU5MTcKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvcG8vZGUucG8KQEAgLTAsMCArMSwxNDU1IEBACisjIEdlcm1hbiB0cmFuc2xhdGlvbiBvZiBhdmFoaQorIyBDb3B5cmlnaHQgKEMpIDIwMDggQXZhaGkKKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGF2YWhpIHBhY2thZ2UuCisjIEZhYmlhbiBBZmZvbHRlciA8ZmFiQGZlZG9yYXByb2plY3Qub3JnPiwgMjAwOC0yMDA5LgorIyBDb3JuZWxpdXMgTmVja2VuaWcgPHRidWxsQGZlZG9yYXByb2plY3Qub3JnPiwgMjAwOS4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGF1ZGl0LXZpZXdlclxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMS0wNC0wMiAwMzoyMyswMjAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwOS0wNC0xOCAyMjo0OCswMTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBDb3JuZWxpdXMgTmVja2VuaWcgPHRidWxsQGZlZG9yYXByb2plY3Qub3JnPlxuIgorIkxhbmd1YWdlLVRlYW06IEdlcm1hbiA8ZmVkb3JhLXRyYW5zLWRlQHJlZGhhdC5jb20+XG4iCisiTGFuZ3VhZ2U6IGRlXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCisiWC1Qb2VkaXQtTGFuZ3VhZ2U6IEdlcm1hblxuIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozMAorbXNnaWQgIk9LIgorbXNnc3RyICJPSyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzEKK21zZ2lkICJPcGVyYXRpb24gZmFpbGVkIgorbXNnc3RyICJPcGVyYXRpb24gZmVobGdlc2NobGFnZW4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjMyCittc2dpZCAiQmFkIHN0YXRlIgorbXNnc3RyICJVbmfDvGx0aWdlciBadXN0YW5kIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozMworbXNnaWQgIkludmFsaWQgaG9zdCBuYW1lIgorbXNnc3RyICJVbmfDvGx0aWdlciBSZWNobmVybmFtZSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzQKK21zZ2lkICJJbnZhbGlkIGRvbWFpbiBuYW1lIgorbXNnc3RyICJVbmfDvGx0aWdlciBEb21haW5uYW1lIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozNQorbXNnaWQgIk5vIHN1aXRhYmxlIG5ldHdvcmsgcHJvdG9jb2wgYXZhaWxhYmxlIgorbXNnc3RyICJLZWluIHBhc3NlbmRlcyBOZXR6d2Vya3Byb3Rva29sbCB2ZXJmw7xnYmFyIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozNgorbXNnaWQgIkludmFsaWQgRE5TIFRUTCIKK21zZ3N0ciAiVW5nw7xsdGlnZSBETlMtVFRMIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozNworbXNnaWQgIlJlc291cmNlIHJlY29yZCBrZXkgaXMgcGF0dGVybiIKK21zZ3N0ciAiRGF0ZW5zYXR6c2NobMO8c3NlbCBpc3QgTXVzdGVyIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozOAorbXNnaWQgIkxvY2FsIG5hbWUgY29sbGlzaW9uIgorbXNnc3RyICJMb2thbGUgTmFtZW5za29sbGlzaW9uIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozOQorbXNnaWQgIkludmFsaWQgcmVjb3JkIgorbXNnc3RyICJVbmfDvGx0aWdlciBEYXRlbnNhdHoiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQxCittc2dpZCAiSW52YWxpZCBzZXJ2aWNlIG5hbWUiCittc2dzdHIgIlVuZ8O8bHRpZ2VyIERpZW5zdG5hbWUiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQyCittc2dpZCAiSW52YWxpZCBzZXJ2aWNlIHR5cGUiCittc2dzdHIgIlVuZ8O8bHRpZ2VyIERpZW5zdHR5cCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDMKK21zZ2lkICJJbnZhbGlkIHBvcnQgbnVtYmVyIgorbXNnc3RyICJVbmfDvGx0aWdlIFBvcnQtTnVtbWVyIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NAorbXNnaWQgIkludmFsaWQgcmVjb3JkIGtleSIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgRGF0ZW5zYXR6c2NobMO8c3NlbCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDUKK21zZ2lkICJJbnZhbGlkIGFkZHJlc3MiCittc2dzdHIgIlVuZ8O8bHRpZ2UgQWRyZXNzZSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDYKK21zZ2lkICJUaW1lb3V0IHJlYWNoZWQiCittc2dzdHIgIkF1c3plaXQgZXJyZWljaHQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQ3Cittc2dpZCAiVG9vIG1hbnkgY2xpZW50cyIKK21zZ3N0ciAiWnUgdmllbGUgQ2xpZW50cyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDgKK21zZ2lkICJUb28gbWFueSBvYmplY3RzIgorbXNnc3RyICJadSB2aWVsZSBPYmpla3RlIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0OQorbXNnaWQgIlRvbyBtYW55IGVudHJpZXMiCittc2dzdHIgIlp1IHZpZWxlIEVpbnRyw6RnZSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTAKK21zZ2lkICJPUyBFcnJvciIKK21zZ3N0ciAiQmV0cmllYnNzeXN0ZW1mZWhsZXIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjUyCittc2dpZCAiQWNjZXNzIGRlbmllZCIKK21zZ3N0ciAiWnVncmlmZiB2ZXJ3ZWlnZXJ0IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1MworbXNnaWQgIkludmFsaWQgb3BlcmF0aW9uIgorbXNnc3RyICJVbmfDvGx0aWdlIE9wZXJhdGlvbiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTQKK21zZ2lkICJBbiB1bmV4cGVjdGVkIEQtQnVzIGVycm9yIG9jY3VyZWQiCittc2dzdHIgIkVpbiB1bmVyd2FydGV0ZXIgREJ1cy1GZWhsZXIgaXN0IGF1ZmdldHJldGVuIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1NQorbXNnaWQgIkRhZW1vbiBjb25uZWN0aW9uIGZhaWxlZCIKK21zZ3N0ciAiVmVyYmluZHVuZyB6dW0gRGFlbW9uIGZlaGxnZXNjaGxhZ2VuIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1NgorbXNnaWQgIk1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIlZlcmbDvGdiYXJlciBTcGVpY2hlciBhdXNnZXNjaMO2cGZ0IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1NworbXNnaWQgIlRoZSBvYmplY3QgcGFzc2VkIGluIHdhcyBub3QgdmFsaWQiCittc2dzdHIgIkRhcyDDvGJlcmdlYmVuZSBPYmpla3QgaXN0IG5pY2h0IGfDvGx0aWciCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU4Cittc2dpZCAiRGFlbW9uIG5vdCBydW5uaW5nIgorbXNnc3RyICJEYWVtb24gbMOkdWZ0IG5pY2h0IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1OQorbXNnaWQgIkludmFsaWQgaW50ZXJmYWNlIGluZGV4IgorbXNnc3RyICJVbmfDvGx0aWdlciBTY2huaXR0c3RlbGxlbmluZGV4IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2MAorbXNnaWQgIkludmFsaWQgcHJvdG9jb2wgc3BlY2lmaWNhdGlvbiIKK21zZ3N0ciAiVW5nw7xsdGlnZSBQcm90b2tvbGxzcGV6aWZpa2F0aW9uIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2MQorbXNnaWQgIkludmFsaWQgZmxhZ3MiCittc2dzdHIgIlVuZ8O8bHRpZ2UgRmxhZ3MiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjYzCittc2dpZCAiTm90IGZvdW5kIgorbXNnc3RyICJOaWNodCBnZWZ1bmRlbiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjQKK21zZ2lkICJJbnZhbGlkIGNvbmZpZ3VyYXRpb24iCittc2dzdHIgIlVuZ8O8bHRpZ2UgS29uZmlndXJhdGlvbiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjUKK21zZ2lkICJWZXJzaW9uIG1pc21hdGNoIgorbXNnc3RyICJVbnBhc3NlbmRlIFZlcnNpb24iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY2Cittc2dpZCAiSW52YWxpZCBzZXJ2aWNlIHN1YnR5cGUiCittc2dzdHIgIlVuZ8O8bHRpZ2VyIERpZW5zdC1VbnRlcnR5cCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjcKK21zZ2lkICJJbnZhbGlkIHBhY2tldCIKK21zZ3N0ciAiVW5nw7xsdGlnZXMgUGFrZXQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY4Cittc2dpZCAiSW52YWxpZCBETlMgcmV0dXJuIGNvZGUiCittc2dzdHIgIlVuZ8O8bHRpZ2VyIEROUy1Sw7xja2dhYmV3ZXJ0IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2OQorbXNnaWQgIkROUyBmYWlsdXJlOiBGT1JNRVJSIgorbXNnc3RyICJETlMtRmVobGVyOiBGT1JNRVJSIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3MAorbXNnaWQgIkROUyBmYWlsdXJlOiBTRVJWRkFJTCIKK21zZ3N0ciAiRE5TLUZlaGxlcjogU0VSVkZBSUwiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjcxCittc2dpZCAiRE5TIGZhaWx1cmU6IE5YRE9NQUlOIgorbXNnc3RyICJETlMtRmVobGVyOiBOWERPTUFJTiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzIKK21zZ2lkICJETlMgZmFpbHVyZTogTk9USU1QIgorbXNnc3RyICJETlMtRmVobGVyOiBOT1RJTVAiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc0Cittc2dpZCAiRE5TIGZhaWx1cmU6IFJFRlVTRUQiCittc2dzdHIgIkROUy1GZWhsZXI6IFJFRlVTRUQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc1Cittc2dpZCAiRE5TIGZhaWx1cmU6IFlYRE9NQUlOIgorbXNnc3RyICJETlMtRmVobGVyOiBZWERPTUFJTiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzYKK21zZ2lkICJETlMgZmFpbHVyZTogWVhSUlNFVCIKK21zZ3N0ciAiRE5TLUZlaGxlcjogWVhSUlNFVCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzcKK21zZ2lkICJETlMgZmFpbHVyZTogTlhSUlNFVCIKK21zZ3N0ciAiRE5TLUZlaGxlcjogTlhSUlNFVCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzgKK21zZ2lkICJETlMgZmFpbHVyZTogTk9UQVVUSCIKK21zZ3N0ciAiRE5TLUZlaGxlcjogTk9UQVVUSCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzkKK21zZ2lkICJETlMgZmFpbHVyZTogTk9UWk9ORSIKK21zZ3N0ciAiRE5TLUZlaGxlcjogTk9UWk9ORSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODAKK21zZ2lkICJJbnZhbGlkIFJEQVRBIgorbXNnc3RyICJVbmfDvGx0aWdlIFJEQVRBIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4MQorbXNnaWQgIkludmFsaWQgRE5TIHR5cGUiCittc2dzdHIgIlVuZ8O8bHRpZ2VyIEROUy1UeXAiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjgyCittc2dpZCAiSW52YWxpZCBETlMgY2xhc3MiCittc2dzdHIgIlVuZ8O8bHRpZ2UgRE5TLUtsYXNzZSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODMKK21zZ2lkICJOb3Qgc3VwcG9ydGVkIgorbXNnc3RyICJOaWNodCB1bnRlcnN0w7x0enQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjg1Cittc2dpZCAiTm90IHBlcm1pdHRlZCIKK21zZ3N0ciAiTmljaHQgZXJsYXVidCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODYKK21zZ2lkICJJbnZhbGlkIGFyZ3VtZW50IgorbXNnc3RyICJVbmfDvGx0aWdlcyBBcmd1bWVudCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODcKK21zZ2lkICJJcyBlbXB0eSIKK21zZ3N0ciAiaXN0IGxlZXIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjg4Cittc2dpZCAiVGhlIHJlcXVlc3RlZCBvcGVyYXRpb24gaXMgaW52YWxpZCBiZWNhdXNlIHJlZHVuZGFudCIKK21zZ3N0ciAiRGllIGFuZ2Vmb3JkZXJ0ZSBPcGVyYXRpb24gaXN0IHVuZ8O8bHRpZywgZGEgc2llIHJlZHVuZGFudCBpc3QiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjk0Cittc2dpZCAiSW52YWxpZCBFcnJvciBDb2RlIgorbXNnc3RyICJVbmfDvGx0aWdlciBGZWhsZXJjb2RlIgorCisjOiAuLi9hdmFoaS1kaXNjb3Zlci1zdGFuZGFsb25lL2F2YWhpLWRpc2NvdmVyLnVpLmg6MQorIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5Ojc2Cittc2dpZCAiPGk+Tm8gc2VydmljZSBjdXJyZW50bHkgc2VsZWN0ZWQuPC9pPiIKK21zZ3N0ciAiPGk+TW9tZW50YW4gaXN0IGtlaW4gRGllbnN0IGF1c2dld8OkaGx0LjwvaT4iCisKKyM6IC4uL2F2YWhpLWRpc2NvdmVyLXN0YW5kYWxvbmUvYXZhaGktZGlzY292ZXIudWkuaDoyCittc2dpZCAiQXZhaGkgRGlzY292ZXJ5IgorbXNnc3RyICJBdmFoaSBEaXNjb3ZlcnkiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5kZXNrdG9wLmluLmluLmg6MQorbXNnaWQgIkF2YWhpIFplcm9jb25mIEJyb3dzZXIiCittc2dzdHIgIkF2YWhpIFplcm9jb25mIEJyb3dzZXIiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5kZXNrdG9wLmluLmluLmg6MgorbXNnaWQgIkJyb3dzZSBmb3IgWmVyb2NvbmYgc2VydmljZXMgYXZhaWxhYmxlIG9uIHlvdXIgbmV0d29yayIKK21zZ3N0ciAiRHVyY2hzdWNoZW4gbmFjaCBaZXJvY29uZi1ha3RpdmllcnRlbiBEaWVuc3RlbiBpbiBJaHJlbSBOZXR6d2VyayIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIyNAorbXNnaWQgIlRYVCIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI2Cittc2dpZCAiVFhUIERhdGE6IgorbXNnc3RyICJUWFQtRGF0ZW46IgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI2CisjLCBmdXp6eQorbXNnaWQgImVtcHR5IgorbXNnc3RyICJpc3QgbGVlciIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIyOAorbXNnaWQgIlNlcnZpY2UgVHlwZToiCittc2dzdHIgIkRpZW5zdHR5cDoiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMjkKK21zZ2lkICJTZXJ2aWNlIE5hbWU6IgorbXNnc3RyICJEaWVuc3RuYW1lOiIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIzMAorbXNnaWQgIkRvbWFpbiBOYW1lOiIKK21zZ3N0ciAiRG9tYWlubmFtZToiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMzEKK21zZ2lkICJJbnRlcmZhY2U6IgorbXNnc3RyICJTY2huaXR0c3RlbGxlOiIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIzMgorbXNnaWQgIkFkZHJlc3M6IgorbXNnc3RyICJBZHJlc3NlOiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxODUKK21zZ2lkICJCcm93c2UgU2VydmljZSBUeXBlcyIKK21zZ3N0ciAiRHVyY2hzdWNoZSBEaWVuc3QtVHlwZW4iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTg1Cittc2dpZCAiQSBOVUxMIHRlcm1pbmF0ZWQgbGlzdCBvZiBzZXJ2aWNlIHR5cGVzIHRvIGJyb3dzZSBmb3IiCittc2dzdHIgIkVpbiBtaXQgTlVMTCBhYmdlc2NobG9zc2VuZSBMaXN0ZSBkZXIgRGllbnN0LVR5cGVuIHp1bSBEdXJjaHN1Y2hlbiAiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTkwCittc2dpZCAiRG9tYWluIgorbXNnc3RyICJEb21haW4iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTkwCittc2dpZCAiVGhlIGRvbWFpbiB0byBicm93c2UgaW4sIG9yIE5VTEwgZm9yIHRoZSBkZWZhdWx0IGRvbWFpbiIKK21zZ3N0ciAiREllIERvbWFpbiB6dW0gRHVyY2hzdWNoZW4gb2RlciBOVUxMIGbDvHIgZGllIFN0YW5kYXJkLURvbWFpbiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxOTYKK21zZ2lkICJTZXJ2aWNlIFR5cGUiCittc2dzdHIgIkRpZW5zdHR5cCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxOTYKK21zZ2lkICJUaGUgc2VydmljZSB0eXBlIG9mIHRoZSBzZWxlY3RlZCBzZXJ2aWNlIgorbXNnc3RyICJEZXIgU2VydmljZS1UeXBlIGRlcyBnZXfDpGhsdGVuIERpZW5zdHMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjAyIC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTAyMworbXNnaWQgIlNlcnZpY2UgTmFtZSIKK21zZ3N0ciAiRGllbnN0bmFtZSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMDIKK21zZ2lkICJUaGUgc2VydmljZSBuYW1lIG9mIHRoZSBzZWxlY3RlZCBzZXJ2aWNlIgorbXNnc3RyICJEZXIgRGllbnN0LU5hbWUgZGVzIGdld8OkaGx0ZW4gRGllbnN0cyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMDgKK21zZ2lkICJBZGRyZXNzIgorbXNnc3RyICJBZHJlc3NlIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIwOAorbXNnaWQgIlRoZSBhZGRyZXNzIG9mIHRoZSByZXNvbHZlZCBzZXJ2aWNlIgorbXNnc3RyICJEaWUgQWRyZXNzZSBkZXMgQXVmbMO2c3VuZ3NkaWVuc3RzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIxMworbXNnaWQgIlBvcnQiCittc2dzdHIgIlBvcnQiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjEzCittc2dpZCAiVGhlIElQIHBvcnQgbnVtYmVyIG9mIHRoZSByZXNvbHZlZCBzZXJ2aWNlIgorbXNnc3RyICJEaWUgSVAtUG9ydC1OdW1tZXIgZGVzIEF1ZmzDtnN1bmdzZGllbnN0IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIxOQorbXNnaWQgIkhvc3QgTmFtZSIKK21zZ3N0ciAiUmVjaG5lci1OYW1lIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIxOQorbXNnaWQgIlRoZSBob3N0IG5hbWUgb2YgdGhlIHJlc29sdmVkIHNlcnZpY2UiCittc2dzdHIgIkRlciBSZWNobmVyLU5hbWUgZGVzIGF1ZmdlbMO2c3RlbiBEaWVuc3RlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMjUKK21zZ2lkICJUWFQgRGF0YSIKK21zZ3N0ciAiVFhULURhdGVuIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIyNQorbXNnaWQgIlRoZSBUWFQgZGF0YSBvZiB0aGUgcmVzb2x2ZWQgc2VydmljZSIKK21zZ3N0ciAiRGllIFRYVC1EYXRlbiBkZXMgYXVmZ2Vsw7ZzdGVuIERpZW5zdGVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIzMAorbXNnaWQgIlJlc29sdmUgU2VydmljZSIKK21zZ3N0ciAiQXVmbMO2c3VuZ3NkaWVuc3QiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjMwCittc2dpZCAiUmVzb2x2ZSB0aGUgc2VsZWN0ZWQgc2VydmljZSBhdXRvbWF0aWNhbGx5IGJlZm9yZSByZXR1cm5pbmciCittc2dzdHIgIlZvciBkZW0gUsO8Y2tzcHJ1bmcgZGVuIHNlbGVrdGllcnRlbiBEaWVuc3QgYXV0b21hdGlzY2ggYXVmbMO2c2VuIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIzNgorbXNnaWQgIlJlc29sdmUgU2VydmljZSBIb3N0IE5hbWUiCittc2dzdHIgIkRpZW5zdC1SZWNobmVyLU5hbWUgYXVmbMO2c2VuIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIzNgorbXNnaWQgIiIKKyJSZXNvbHZlIHRoZSBob3N0IG5hbWUgb2YgdGhlIHNlbGVjdGVkIHNlcnZpY2UgYXV0b21hdGljYWxseSBiZWZvcmUgcmV0dXJuaW5nIgorbXNnc3RyICIiCisiVm9yIGRlbSBSw7xja3NwcnVuZyBkZW4gSG9zdG5hbWUgZGVzIHNlbGVrdGllcnRlbiBEaWVuc3Rlc1xyXG4iCisiYXV0b21hdGlzY2ggYXVmbMO2c2VuIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjI0MgorbXNnaWQgIkFkZHJlc3MgZmFtaWx5IgorbXNnc3RyICJBZHJlc3MtRmFtaWxpZSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyNDIKK21zZ2lkICJUaGUgYWRkcmVzcyBmYW1pbHkgZm9yIGhvc3QgbmFtZSByZXNvbHV0aW9uIgorbXNnc3RyICJEaWUgQWRyZXNzLUZhbWlsaWUgenVtIEF1ZmzDtnNlbiBkZXIgUmVjaG5lci1OYW1lbiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzozMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaGkgY2xpZW50IGZhaWx1cmU6ICVzIgorbXNnc3RyICJBdmFoaS1DbGllbnQtRmVobGVyOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzozODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaGkgcmVzb2x2ZXIgZmFpbHVyZTogJXMiCittc2dzdHIgIkF2YWhpLUF1ZmzDtnN1bmdzZmVobGVyOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo1MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJvd3NpbmcgZm9yIHNlcnZpY2UgdHlwZSAlcyBpbiBkb21haW4gJXMgZmFpbGVkOiAlcyIKK21zZ3N0ciAiRHVyY2hzdWNoZW4gbmFjaCBEaWVuc3QtVHlwZW4gJXMgaW4gRG9tYWluICVzIGZlaGxnZXNjaGxhZ2VuOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo1MTkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTY4CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoxNjkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTc4CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoxNzkKK21zZ2lkICJuL2EiCittc2dzdHIgImsuQS4iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWhpIGRvbWFpbiBicm93c2VyIGZhaWx1cmU6ICVzIgorbXNnc3RyICJBdmFoaS1Eb21haW5icm93c2VyLUZlaGxlcjogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6Njg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWFkIEF2YWhpIGRvbWFpbjogJXMiCittc2dzdHIgIkZlaGxlciBiZWltIExlc2VuIGRlciBBdmFoaS1Eb21haW46ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjcwNgorbXNnaWQgIkJyb3dzZSBzZXJ2aWNlIHR5cGUgbGlzdCBpcyBlbXB0eSEiCittc2dzdHIgIkRpZSBMaXN0ZSBkZXIgU2VydmljZS1UeXBlbiBpc3QgbGVlciEiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjb25uZWN0IHRvIEF2YWhpIHNlcnZlcjogJXMiCittc2dzdHIgIlZlcmJpbmR1bmcgenUgQXZhaGktU2VydmVyIGZlaGxnZXNjaGxhZ2VuOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo3MzUKK21zZ2lkICJCcm93c2luZyBmb3Igc2VydmljZXMgb24gPGI+bG9jYWwgbmV0d29yazwvYj46IgorbXNnc3RyICJEdXJjaHN1Y2hlIDxiPmxva2FsZXMgTmV0endlcms8L2I+IG5hY2ggRGllbnN0ZW46IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjczNworIywgYy1mb3JtYXQKK21zZ2lkICJCcm93c2luZyBmb3Igc2VydmljZXMgaW4gZG9tYWluIDxiPiVzPC9iPjoiCittc2dzdHIgIkR1cmNoc3VjaGUgRG9tYWluIDxiPiVzPC9iPiBuYWNoIERpZW5zdGVuOiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo3NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBicm93c2VyIGZvciAlczogJXMiCittc2dzdHIgIkJyb3dzZXItRXJ6ZXVndW5nIGbDvHIgJXMgZmVobGdlc2NobGFnZW46ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjkwMworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIHJlc29sdmVyIGZvciAlcyBvZiB0eXBlICVzIGluIGRvbWFpbiAlczogJXMiCittc2dzdHIgIiIKKyJFcnpldWdlbiBlaW5lcyBSZXNvbHZlcnMgZsO8ciAlcyB2b20gVHlwICVzIGluIERvbWFpbiAlcyBmZWhsZ2VzY2hsYWdlbjogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6OTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgZG9tYWluIGJyb3dzZXI6ICVzIgorbXNnc3RyICJFcnpldWdlbiBlaW5lcyBEb21haW5icm93c2VyIGZlaGxnZXNjaGxhZ2VuOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo5ODkKK21zZ2lkICJDaGFuZ2UgZG9tYWluIgorbXNnc3RyICJEb21haW4gw6RuZGVybiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMDMxIC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTE2MgorbXNnaWQgIkJyb3dzaW5nLi4uIgorbXNnc3RyICJEdXJjaHN1Y2hlbiAuLi4iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTEyMAorbXNnaWQgIkluaXRpYWxpemluZy4uLiIKK21zZ3N0ciAiSW5pdGlhbGlzaWVyZW4gLi4uIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNDQKK21zZ2lkICJMb2NhdGlvbiIKK21zZ3N0ciAiU3RhbmRvcnQiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTE0OSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NTMKK21zZ2lkICJOYW1lIgorbXNnc3RyICJOYW1lIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNTQgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTUzCittc2dpZCAiVHlwZSIKK21zZ3N0ciAiVHlwIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNjYKK21zZ2lkICJfRG9tYWluLi4uIgorbXNnc3RyICJfRG9tYWluIC4uLiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBbb3B0aW9uc11cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLXMgLS1zc2ggICAgICAgICAgICAgQnJvd3NlIFNTSCBzZXJ2ZXJzXG4iCisiICAgIC12IC0tdm5jICAgICAgICAgICAgIEJyb3dzZSBWTkMgc2VydmVyc1xuIgorIiAgICAtUyAtLXNoZWxsICAgICAgICAgICBCcm93c2UgYm90aCBTU0ggYW5kIFZOQ1xuIgorIiAgICAtZCAtLWRvbWFpbj1ET01BSU4gICBUaGUgZG9tYWluIHRvIGJyb3dzZSBpblxuIgorbXNnc3RyICIiCisiJXMgW29wdGlvbnNdXG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFplaWd0IGRpZXNlIEhpbGZlIGFuXG4iCisiICAgIC1zIC0tc3NoICAgICAgICAgICAgIER1cmNoc3VjaGVuIG5hY2ggU1NILVNlcnZlcm5cbiIKKyIgICAgLXYgLS12bmMgICAgICAgICAgICAgRHVyY2hzdWNoZW4gbmFjaCBWTkMtU2VydmVyXG4iCisiICAgIC1TIC0tc2hlbGwgICAgICAgICAgIER1cmNoc3VjaGVuIG5hY2ggYmVpZGVuIChTU0ggdW5kIFZOQylcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgRGllIERvbWFpbiB6dW0gRHVyY2hzdWNoZW5cbiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjEwMSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo3NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG9vIG1hbnkgYXJndW1lbnRzXG4iCittc2dzdHIgIlp1IHZpZWxlIEFyZ3VtZW50ZVxuIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTQ5Cittc2dpZCAiQ2hvb3NlIFNoZWxsIFNlcnZlciIKK21zZ3N0ciAiU2hlbGwtU2VydmVyIGF1c3fDpGhsZW4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNTEKK21zZ2lkICJEZXNrdG9wIgorbXNnc3RyICJEZXNrdG9wIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTUyCittc2dpZCAiVGVybWluYWwiCittc2dzdHIgIlRlcm1pbmFsIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTU2Cittc2dpZCAiQ2hvb3NlIFZOQyBzZXJ2ZXIiCittc2dzdHIgIlZOQy1TZXJ2ZXIgYXVzd8OkaGxlbiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE2MQorbXNnaWQgIkNob29zZSBTU0ggc2VydmVyIgorbXNnc3RyICJTU0gtRGllbnN0IGF1c3fDpGhsZW4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29ubmVjdGluZyB0byAnJXMnIC4uLlxuIgorbXNnc3RyICJWZXJiaW5kZSB6dSAnJXMnIC4uLlxuIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MjQwCisjLCBjLWZvcm1hdAorbXNnaWQgImV4ZWNscCgpIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAiZXhlY2xwKCkgZmVobGdlc2NobGFnZW46ICVzXG4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FuY2VsZWQuXG4iCittc2dzdHIgIkFiZ2Vicm9jaGVuLlxuIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmRlc2t0b3AuaW4uaW4uaDoxCittc2dpZCAiQXZhaGkgU1NIIFNlcnZlciBCcm93c2VyIgorbXNnc3RyICJBdmFoaSBTU0ggU2VydmVyIEJyb3dzZXIiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guZGVza3RvcC5pbi5pbi5oOjIKK21zZ2lkICJCcm93c2UgZm9yIFplcm9jb25mLWVuYWJsZWQgU1NIIFNlcnZlcnMiCittc2dzdHIgIkR1cmNoc3VjaGVuIG5hY2ggWmVyb2NvbmYtYWt0aXZpZXJ0ZW4gU1NILVNlcnZlcm4iCisKKyM6IC4uL2F2YWhpLXVpL2J2bmMuZGVza3RvcC5pbi5pbi5oOjEKK21zZ2lkICJBdmFoaSBWTkMgU2VydmVyIEJyb3dzZXIiCittc2dzdHIgIkF2YWhpIFZOQy1TZXJ2ZXItQnJvd3NlciIKKworIzogLi4vYXZhaGktdWkvYnZuYy5kZXNrdG9wLmluLmluLmg6MgorbXNnaWQgIkJyb3dzZSBmb3IgWmVyb2NvbmYtZW5hYmxlZCBWTkMgU2VydmVycyIKK21zZ3N0ciAiRHVyY2hzdWNoZW4gbmFjaCBaZXJvY29uZi1ha3RpdmllcnRlbiBWTkMtU2VydmVybiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIjogQWxsIGZvciBub3dcbiIKK21zZ3N0ciAiOiBBbGxlIEVpbnRyw6RnZSBiaXNoZXJcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIjogQ2FjaGUgZXhoYXVzdGVkXG4iCittc2dzdHIgIjogRGF0ZW5jYWNoZSBlcnNjaMO2cGZ0XG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjIzOSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgc2VydmljZSAnJXMnIG9mIHR5cGUgJyVzJyBpbiBkb21haW4gJyVzJzogJXNcbiIKK21zZ3N0ciAiIgorIkZlaGxlciBiZWltIEF1ZmzDtnNlbiBkZXMgRGllbnN0ZXMgJyVzJyBkZXMgVHlwICclcycgaW4gRG9tYWluICclcyc6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjM0MAorIywgYy1mb3JtYXQKK21zZ2lkICJzZXJ2aWNlX2Jyb3dzZXIgZmFpbGVkOiAlc1xuIgorbXNnc3RyICJzZXJ2aWNlX2Jyb3dzZXIgZmVobGdlc2NobGFnZW46ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjM3OAorIywgYy1mb3JtYXQKK21zZ2lkICJhdmFoaV9zZXJ2aWNlX2Jyb3dzZXJfbmV3KCkgZmFpbGVkOiAlc1xuIgorbXNnc3RyICJhdmFoaV9zZXJ2aWNlX2Jyb3dzZXJfbmV3KCkgZmVobGdlc2NobGFnZW46ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjQxNAorIywgYy1mb3JtYXQKK21zZ2lkICJzZXJ2aWNlX3R5cGVfYnJvd3NlciBmYWlsZWQ6ICVzXG4iCittc2dzdHIgInNlcnZpY2VfdHlwZV9icm93c2VyIGZlaGxnZXNjaGxhZ2VuOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo0NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXZhaGlfc2VydmljZV90eXBlX2Jyb3dzZXJfbmV3KCkgZmFpbGVkOiAlc1xuIgorbXNnc3RyICJhdmFoaV9zZXJ2aWNlX3R5cGVfYnJvd3Nlcl9uZXcoKSBmZWhsZ2VzY2hsYWdlbjogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTE5CisjLCBjLWZvcm1hdAorbXNnaWQgImF2YWhpX2RvbWFpbl9icm93c2VyX25ldygpIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAiYXZhaGlfZG9tYWluX2Jyb3dzZXJfbmV3KCkgZmVobGdlc2NobGFnZW46ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjUzNSAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6Mzk0CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjgwIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IHZlcnNpb24gc3RyaW5nOiAlc1xuIgorbXNnc3RyICJWZXJzaW9uc3N0cmluZy1BYmZyYWdlIGZlaGxnZXNjaGxhZ2VuOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NDAgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjM5OQorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI4NSAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTczCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBxdWVyeSBob3N0IG5hbWU6ICVzXG4iCittc2dzdHIgIkhvc3RuYW1lLUFiZnJhZ2UgZmVobGdlc2NobGFnZW46ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU0NCAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6NDAzCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6Mjg5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VydmVyIHZlcnNpb246ICVzOyBIb3N0IG5hbWU6ICVzXG4iCittc2dzdHIgIlNlcnZlci1WZXJzaW9uOiAlczsgUmVjaG5lcm5hbWU6ICVzXG4iCisKKyMuIFRyYW5zbGF0b3JzOiBUaGlzIGlzIGEgY29sdW1uIGhlYWRpbmcgd2l0aCBhYmJyZXZpYXRpb25zIGZvcgorIy4gKiAgIEV2ZW50ICgrLy0pLCBOZXR3b3JrIEludGVyZmFjZSwgUHJvdG9jb2wgKElQdjQvdjYpLCBEb21haW4KKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU0OQorIywgYy1mb3JtYXQKK21zZ2lkICJFIElmY2UgUHJvdCBEb21haW5cbiIKK21zZ3N0ciAiRSBJZmNlIFByb3QtRG9tYWluXG4iCisKKyMuIFRyYW5zbGF0b3JzOiBUaGlzIGlzIGEgY29sdW1uIGhlYWRpbmcgd2l0aCBhYmJyZXZpYXRpb25zIGZvcgorIy4gKiAgIEV2ZW50ICgrLy0pLCBOZXR3b3JrIEludGVyZmFjZSwgUHJvdG9jb2wgKElQdjQvdjYpLCBEb21haW4KKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU1MworIywgYy1mb3JtYXQKK21zZ2lkICJFIElmY2UgUHJvdCAlLSpzICUtMjBzIERvbWFpblxuIgorbXNnc3RyICJFIElmY2UgUHJvdCAlLSpzICUtMjBzLURvbWFpblxuIgorCisjLiBXZSBoYXZlIGJlZW4gZGlzY29ubmVjdGVkLCBzbyBsZXQgcmVjb25uZWN0CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1ODUgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE2MworIywgYy1mb3JtYXQKK21zZ2lkICJEaXNjb25uZWN0ZWQsIHJlY29ubmVjdGluZyAuLi5cbiIKK21zZ3N0ciAiTmljaHQgdmVyYnVuZGVuLCBuZXUgdmVyYmluZGVuIC4uLlxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1OTkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6ODI5CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTcwIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozODYKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyNzIgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE2MAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGNsaWVudCBvYmplY3Q6ICVzXG4iCittc2dzdHIgIkNsaWVudG9iamVrdC1FcnpldWd1bmcgZmVobGdlc2NobGFnZW46ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjYwNCAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTc1CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MTQzIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzo1OQorIywgYy1mb3JtYXQKK21zZ2lkICJDbGllbnQgZmFpbHVyZSwgZXhpdGluZzogJXNcbiIKK21zZ3N0ciAiQ2xpZW50LUZlaGxlciwgYmVlbmRlOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo2MjMgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjIwNgorIywgYy1mb3JtYXQKK21zZ2lkICJXYWl0aW5nIGZvciBkYWVtb24gLi4uXG4iCittc2dzdHIgIldhcnRlIGF1ZiBEYWVtb24gLi4uXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjY0NworbXNnaWQgIiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgU2hvdyB2ZXJzaW9uXG4iCisiICAgIC1EIC0tYnJvd3NlLWRvbWFpbnMgIEJyb3dzZSBmb3IgYnJvd3NpbmcgZG9tYWlucyBpbnN0ZWFkIG9mIHNlcnZpY2VzXG4iCisiICAgIC1hIC0tYWxsICAgICAgICAgICAgIFNob3cgYWxsIHNlcnZpY2VzLCByZWdhcmRsZXNzIG9mIHRoZSB0eXBlXG4iCisiICAgIC1kIC0tZG9tYWluPURPTUFJTiAgIFRoZSBkb21haW4gdG8gYnJvd3NlIGluXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKKyIgICAgLXQgLS10ZXJtaW5hdGUgICAgICAgVGVybWluYXRlIGFmdGVyIGR1bXBpbmcgYSBtb3JlIG9yIGxlc3MgY29tcGxldGUgIgorImxpc3RcbiIKKyIgICAgLWMgLS1jYWNoZSAgICAgICAgICAgVGVybWluYXRlIGFmdGVyIGR1bXBpbmcgYWxsIGVudHJpZXMgZnJvbSB0aGUgY2FjaGVcbiIKKyIgICAgLWwgLS1pZ25vcmUtbG9jYWwgICAgSWdub3JlIGxvY2FsIHNlcnZpY2VzXG4iCisiICAgIC1yIC0tcmVzb2x2ZSAgICAgICAgIFJlc29sdmUgc2VydmljZXMgZm91bmRcbiIKKyIgICAgLWYgLS1uby1mYWlsICAgICAgICAgRG9uJ3QgZmFpbCBpZiB0aGUgZGFlbW9uIGlzIG5vdCBhdmFpbGFibGVcbiIKKyIgICAgLXAgLS1wYXJzYWJsZSAgICAgICAgT3V0cHV0IGluIHBhcnNhYmxlIGZvcm1hdFxuIgorbXNnc3RyICIiCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFplaWd0IGRpZXNlIEhpbGZlIGFuXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFplaWd0IGRpZSBWZXJzaW9uIGFuXG4iCisiICAgIC1EIC0tYnJvd3NlLWRvbWFpbnMgIER1cmNoc3VjaGUgbmFjaCBzdWNoZW5kZW4gRG9tYWluIHN0YXR0IG5hY2ggIgorIkRpZW5zdGVuXG4iCisiICAgIC1hIC0tYWxsICAgICAgICAgICAgIFplaWd0IGFsbGUgRGllbnN0ZSwgb2huZSBSw7xja3NpY2h0IGF1ZiBkaWUgVHlwZW5cbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgRGllIERvbWFpbiB6dW0gRHVyY2hzdWNoZW5cbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgQWt0aXZpZXJ0IGRldGFpbGxpZXJ0ZW4gTW9kdXNcbiIKKyIgICAgLXQgLS10ZXJtaW5hdGUgICAgICAgQmVlbmRlbiBuYWNoIEF1c2dlYmVuIGVpbmVyIG1laHIgb2RlciB3ZW5pZ2VyICIKKyJrb21wbGV0dGVuIExpc3RlXG4iCisiICAgIC1jIC0tY2FjaGUgICAgICAgICAgIEJlZW5kZW4gbmFjaCBBdXNnZWJlbiBhbGxlciBFaW50csOkZ2UgYXVzIGRlbSBDYWNoZVxuIgorIiAgICAtbCAtLWlnbm9yZS1sb2NhbCAgICBJZ25vcmllcmUgbG9rYWxlIERpZW5zdGVcbiIKKyIgICAgLXIgLS1yZXNvbHZlICAgICAgICAgTMO2c2UgZ2VmdW5kZW5lIERpZW5zdGUgYXVmXG4iCisiICAgIC1mIC0tbm8tZmFpbCAgICAgICAgIFNjaGzDpGd0IG5pY2h0IGZlaGwsIHdlbm4gZGVyIERhZW1vbiBuaWNodCB2ZXJmw7xnYmFyICIKKyJpc3RcbiIKKyIgICAgLXAgLS1wYXJzYWJsZSAgICAgICAgQXVzZ2FiZSBpbiBwYXJzYmFyZW4gRm9ybWF0XG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjY2MAorbXNnaWQgIiIKKyIgICAgLWsgLS1uby1kYi1sb29rdXAgICAgRG9uJ3QgbG9va3VwIHNlcnZpY2UgdHlwZXNcbiIKKyIgICAgLWIgLS1kdW1wLWRiICAgICAgICAgRHVtcCBzZXJ2aWNlIHR5cGUgZGF0YWJhc2VcbiIKK21zZ3N0ciAiIgorIiAgICAtayAtLW5vLWRiLWxvb2t1cCAgICBTY2hsYWdlIERpZW5zdC1UeXBlbiBuaWNodCBuYWNoXG4iCisiICAgIC1iIC0tZHVtcC1kYiAgICAgICAgIEFuemVpZ2VuIGRlciBEaWVuc3QtVHlwZW4tRGF0ZW5iYW5rXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjc2NiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvbyBmZXcgYXJndW1lbnRzXG4iCittc2dzdHIgIlp1IHdlbmlnZSBBcmd1bWVudGVcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6ODIxIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozNzgKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyNjQgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIHNpbXBsZSBwb2xsIG9iamVjdC5cbiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gRXJ6ZXVnZW4gZWluZXMgZWluZmFjaGVuIEFiZnJhZ2UtT2JqZWt0czogXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo3NgorIywgYy1mb3JtYXQKK21zZ2lkICJFc3RhYmxpc2hlZCB1bmRlciBuYW1lICclcydcbiIKK21zZ3N0ciAiRWluZ2VyaWNodGV0IHVudGVyIGRlbSBOYW1lbiAnJXMnXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo4MQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXI6ICVzXG4iCittc2dzdHIgIlJlZ2lzdHJpZXJ1bmcgZmVobGdlc2NobGFnZW46ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICJOYW1lIGNvbGxpc2lvbiwgcGlja2luZyBuZXcgbmFtZSAnJXMnLlxuIgorbXNnc3RyICJOYW1lbnNrb2xsaXNpb24sIHfDpGhsZSBuZXVlbiBOYW1lICclcycuXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBlbnRyeSBncm91cDogJXNcbiIKK21zZ3N0ciAiRmVobGVyIGJlaSBkZXIgRXJ6ZXVndW5nIGRlciBFaW5zdGllZ3NncnVwcGU6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBhZGRyZXNzOiAlc1xuIgorbXNnc3RyICJGZWhsZXIgYmVpbSBIaW56dWbDvGdlbiBkZXIgQWRyZXNzZTogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gYWRkIHNlcnZpY2U6ICVzXG4iCittc2dzdHIgIkZlaGxlciBiZWltIEhpbnp1ZsO8Z2VuIGRlcyBEaWVuc3RlczogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE0MAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gYWRkIHN1YnR5cGUgJyVzJzogJXNcbiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gSGluenVmw7xnZW4gZGVzIFVudGVydHlwczogJyVzJzogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE5MQorIywgYy1mb3JtYXQKK21zZ2lkICJIb3N0IG5hbWUgY29uZmxpY3RcbiIKK21zZ3N0ciAiUmVjaG5lcm5hbWUtS29uZmxpa3RcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjIxNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFtvcHRpb25zXSAlcyA8bmFtZT4gPHR5cGU+IDxwb3J0PiBbPHR4dCAuLi4+XVxuIgorIiVzIFtvcHRpb25zXSAlcyA8aG9zdC1uYW1lPiA8YWRkcmVzcz5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgU2hvdyB2ZXJzaW9uXG4iCisiICAgIC1zIC0tc2VydmljZSAgICAgICAgIFB1Ymxpc2ggc2VydmljZVxuIgorIiAgICAtYSAtLWFkZHJlc3MgICAgICAgICBQdWJsaXNoIGFkZHJlc3NcbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgRW5hYmxlIHZlcmJvc2UgbW9kZVxuIgorIiAgICAtZCAtLWRvbWFpbj1ET01BSU4gICBEb21haW4gdG8gcHVibGlzaCBzZXJ2aWNlIGluXG4iCisiICAgIC1IIC0taG9zdD1ET01BSU4gICAgIEhvc3Qgd2hlcmUgc2VydmljZSByZXNpZGVzXG4iCisiICAgICAgIC0tc3VidHlwZT1TVUJUWVBFIEFuIGFkZGl0aW9uYWwgc3VidHlwZSB0byByZWdpc3RlciB0aGlzIHNlcnZpY2UgIgorIndpdGhcbiIKKyIgICAgLVIgLS1uby1yZXZlcnNlICAgICAgRG8gbm90IHB1Ymxpc2ggcmV2ZXJzZSBlbnRyeSB3aXRoIGFkZHJlc3NcbiIKKyIgICAgLWYgLS1uby1mYWlsICAgICAgICAgRG9uJ3QgZmFpbCBpZiB0aGUgZGFlbW9uIGlzIG5vdCBhdmFpbGFibGVcbiIKK21zZ3N0ciAiIgorIiVzIFtvcHRpb25zXSAlcyA8bmFtZT4gPHR5cGU+IDxwb3J0PiBbPHR4dCAuLi4+XVxuIgorIiVzIFtvcHRpb25zXSAlcyA8aG9zdC1uYW1lPiA8YWRkcmVzcz5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgWmVpZ3QgZGllc2UgSGlsZmUgYW5cbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgWmVpZ3QgZGllIFZlcnNpb24gYW5cbiIKKyIgICAgLXMgLS1zZXJ2aWNlICAgICAgICAgVmVyw7ZmZmVudGxpY2h0IFNlcnZpY2VcbiIKKyIgICAgLWEgLS1hZGRyZXNzICAgICAgICAgVmVyw7ZmZmVudGxpY2h0IEFkZHJlc3NlXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEFrdGl2aWVydCBkZXRhaWxsaWVydGVuIE1vZHVzXG4iCisiICAgIC1kIC0tZG9tYWluPURPTUFJTiAgIERvbWFpbiB6dW0gVmVyw7ZmZmVudGxpY2hlbiBkZXMgRGllbnN0ZXMgYXVmXG4iCisiICAgIC1IIC0taG9zdD1ET01BSU4gICAgIEhvc3QsIHdvIHNpY2ggZGVyIFNlcnZpY2UgYmVmaW5kZXRcbiIKKyIgICAgICAgLS1zdWJ0eXBlPVNVQlRZUEUgRWluIHp1c8OkdHpsaWNoZXIgVW50ZXJ0eXAgenVtIFJlZ2lzdHJpZXJlbiBkZXMgIgorIkRpZW5zdGVzIG1pdFxuIgorIiAgICAtZiAtLW5vLWZhaWwgICAgICAgICBTY2hsw6RndCBuaWNodCBmZWhsLCB3ZW5uIGRlciBEYWVtb24gbmljaHQgdmVyZsO8Z2JhciAiCisiaXN0XG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozMDMgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjMxOAorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgbnVtYmVyIG9mIGFyZ3VtZW50c1xuIgorbXNnc3RyICJVbmfDvGx0aWdlIEFuemFobCB2b24gQXJndW1lbnRlblxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBwb3J0IG51bWJlcjogJXNcbiIKK21zZ3N0ciAiUGFyc2VuIGRlciBQb3J0LU51bW1lciBmZWhsZ2VzY2hsYWdlbjogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjM2MSAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGNvbW1hbmQgc3BlY2lmaWVkLlxuIgorbXNnc3RyICJLZWluIEJlZmVobCBhbmdlZ2ViZW4uXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzo4OQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSBob3N0IG5hbWUgJyVzJzogJXNcbiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gQXVmbMO2c2VuIGRlcyBSZWNobmVybmFtZW5zICclcyc6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoxMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgYWRkcmVzcyAnJXMnOiAlc1xuIgorbXNnc3RyICJGZWhsZXIgYmVpbSBBdWZsw7ZzZW4gZGVyIEFkcmVzc2UgJyVzJzogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjE1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgW29wdGlvbnNdICVzIDxob3N0IG5hbWUgLi4uPlxuIgorIiVzIFtvcHRpb25zXSAlcyA8YWRkcmVzcyAuLi4gPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLW4gLS1uYW1lICAgICAgICAgICAgUmVzb2x2ZSBob3N0IG5hbWVcbiIKKyIgICAgLWEgLS1hZGRyZXNzICAgICAgICAgUmVzb2x2ZSBhZGRyZXNzXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKKyIgICAgLTYgICAgICAgICAgICAgICAgICAgTG9va3VwIElQdjYgYWRkcmVzc1xuIgorIiAgICAtNCAgICAgICAgICAgICAgICAgICBMb29rdXAgSVB2NCBhZGRyZXNzXG4iCittc2dzdHIgIiIKKyIlcyBbb3B0aW9uc10gJXMgPGhvc3QgbmFtZSAuLi4+XG4iCisiJXMgW29wdGlvbnNdICVzIDxhZGRyZXNzIC4uLiA+XG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFplaWd0IGRpZXNlIEhpbGZlIGFuXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFplaWd0IGRpZSBWZXJzaW9uIGFuXG4iCisiICAgIC1uIC0tbmFtZSAgICAgICAgICAgIEzDtnN0IEhvc3RuYW1lIGF1ZlxuIgorIiAgICAtYSAtLWFkZHJlc3MgICAgICAgICBMw7ZzdCBBZGRyZXNzZSBhdWZcbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgQWt0aXZpZXJ0IGRldGFpbGxpZXJ0ZW4gTW9kdXNcbiIKKyIgICAgLTYgICAgICAgICAgICAgICAgICAgU2NobMOkZ3QgSVB2Ni1BZGRyZXNzZSBuYWNoXG4iCisiICAgIC00ICAgICAgICAgICAgICAgICAgIFNjaGzDpGd0IElQdjQtQWRkcmVzc2UgbmFjaFxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6Mjk5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBob3N0IG5hbWUgcmVzb2x2ZXI6ICVzXG4iCittc2dzdHIgIkZlaGxlciBiZWltIEVyemV1Z2VuIGRlcyBSZWNobmVyYW1lbi1BdWZsw7ZzZXJzOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBhZGRyZXNzICclcydcbiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gUGFyc2VybiBkZXIgQWRyZXNzZSAnJXMnXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzozMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBhZGRyZXNzIHJlc29sdmVyOiAlc1xuIgorbXNnc3RyICJGZWhsZXIgYmVpbSBFcnpldWdlbiBkZXMgQWRyZXNzLUF1ZmzDtnNlcnM6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgW29wdGlvbnNdIDxuZXcgaG9zdCBuYW1lPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgRW5hYmxlIHZlcmJvc2UgbW9kZVxuIgorbXNnc3RyICIiCisiJXMgW29wdGlvbnNdIDxuZXcgaG9zdCBuYW1lPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBaZWlndCBkaWVzZSBIaWxmZSBhblxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBaZWlndCBkaWUgVmVyc2lvbiBhblxuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBBa3RpdmllcnQgZGV0YWlsbGllcnRlbiBNb2R1c1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cywgZXhwZWN0aW5nIGV4YWN0bHkgb25lLlxuIgorbXNnc3RyICJVbmfDvGx0aWdlIEFuemFobCB2b24gQXJndW1lbnRlbiwgZXJ3YXJ0ZXQgd2lyZCBnZW5hdSBlaW5lcy5cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE5MworIywgYy1mb3JtYXQKK21zZ2lkICJIb3N0IG5hbWUgc3VjY2Vzc2Z1bGx5IGNoYW5nZWQgdG8gJXNcbiIKK21zZ3N0ciAiUmVjaG5lcm5hbWUgZXJmb2xncmVpY2ggZ2XDpG5kZXJ0IGF1ZiAlc1xuIgorCisjfiBtc2dpZCAiLiIKKyN+IG1zZ3N0ciAiLiIKKworI34gbXNnaWQgIjoiCisjfiBtc2dzdHIgIjoiCisKKyN+IG1zZ2lkICI8Yj5FdmVudCBPcmRlcjwvYj4iCisjfiBtc2dzdHIgIjxiPkVyZWlnbmlzLVJlaWhlbmZvbGdlPC9iPiIKKworI34gbXNnaWQgIjxiPkdyb3VwIENvbHVtbnMgX2J5OjwvYj4iCisjfiBtc2dzdHIgIjxiPkdydXBwaWVyZSBTcGFsdGUgX25hY2g6PC9iPiIKKworI34gbXNnaWQgIjxiPkdyb3VwIFJvd3MgYnk6PC9iPiIKKyN+IG1zZ3N0ciAiPGI+R3J1cHBpZXJlIFplaWxlIG5hY2g6PC9iPiIKKworI34gbXNnaWQgIjxiPklkZW50aWZpY2F0aW9uPC9iPiIKKyN+IG1zZ3N0ciAiPGI+SWRlbnRpZmlrYXRpb248L2I+IgorCisjfiBtc2dpZCAiPGI+TGltaXQgdG8gZXZlbnRzIF9iZWZvcmU6PC9iPiIKKyN+IG1zZ3N0ciAiPGI+TGltaXQgenUgRXIgX2JlZm9yZTo8L2I+IgorCisjfiBtc2dpZCAiPGI+TGltaXQgdG8gZXZlbnRzIG5vdCBfZWFybGllciB0aGFuOjwvYj4iCisjfiBtc2dzdHIgIjxiPkxpbWl0aWVyZW4gYXVmIEVyZWlnbmlzc2UgbmljaHQgX3Nww6R0ZXIgYWxzOjwvYj4iCisKKyN+IG1zZ2lkICI8Yj5SZWNvcmRzPC9iPiIKKyN+IG1zZ3N0ciAiPGI+QXVmemVpY2hudW5nZW48L2I+IgorCisjfiBtc2dpZCAiPGI+VGFiPC9iPiIKKyN+IG1zZ3N0ciAiPGI+VGFiPC9iPiIKKworI34gbXNnaWQgIjxiPl9GaWxlPC9iPiIKKyN+IG1zZ3N0ciAiPGI+X0RhdGVpPC9iPiIKKworI34gbXNnaWQgIjxiPl9TeXN0ZW0gYXVkaXQgbG9nPC9iPiIKKyN+IG1zZ3N0ciAiPGI+X1N5c3RlbS1BdWRpdC1Qcm90b2tvbGw8L2I+IgorCisjfiBtc2dpZCAiQXVkaXQgRXZlbnQgU291cmNlIgorI34gbXNnc3RyICJBdWRpdC1Fd3JlaWduaXMtUXVlbGxlIgorCisjfiBtc2dpZCAiQXVkaXQgVmlld2VyIgorI34gbXNnc3RyICJBdWRpdCBWaWV3ZXIiCisKKyN+IG1zZ2lkICJBdXRvbWF0aWMgZmlsZSB0eXBlIGVfeHRlbnNpb24iCisjfiBtc2dzdHIgIkF1dG9tYXRpc2NoZSBEYXRlaXR5cC1Fcl93ZWl0ZXJ1bmciCisKKyN+IG1zZ2lkICJDaGFuZ2UgX2V2ZW50IHNvdXJjZS4uLiIKKyN+IG1zZ3N0ciAiw4RuZGVyZSBfRXJlaWduaXMtUXVlbGxlLi4uIgorCisjfiBtc2dpZCAiQ29sdW1ucyIKKyN+IG1zZ3N0ciAiU3BhbHRlIgorCisjfiBtc2dpZCAiQ3VycmVudCBDb19sdW1uIgorI34gbXNnc3RyICJBa3R1ZWxsZSBTcF9hbHRlIgorCisjfiBtc2dpZCAiQ3VycmVudCBfQ2VsbCIKKyN+IG1zZ3N0ciAiQWt0dWVsbGUgX1plbGxlIgorCisjfiBtc2dpZCAiQ3VycmVudCBfUm93IgorI34gbXNnc3RyICJBa3R1ZWxsZSBfWmVpbGUiCisKKyN+IG1zZ2lkICJEYXRlIEZpbHRlciIKKyN+IG1zZ3N0ciAiRGF0dW0tRmlsdGVyIgorCisjfiBtc2dpZCAiRXZlbnQgRGV0YWlscyIKKyN+IG1zZ3N0ciAiX0VyZWlnbmlzLURldGFpbHMiCisKKyN+IG1zZ2lkICJFeHByZXNzaW9uIgorI34gbXNnc3RyICJBdXNkcnVjayIKKworI34gbXNnaWQgIkZfaWVsZDoiCisjfiBtc2dzdHIgIkZfZWxkOiIKKworI34gbXNnaWQgIkZpbGUgX3R5cGU6IgorI34gbXNnc3RyICJEYXRlaS1fVHlwOiIKKworI34gbXNnaWQgIkZpbHRlciIKKyN+IG1zZ3N0ciAiRmlsdGVyIgorCisjfiBtc2dpZCAiRmlsdGVyOiIKKyN+IG1zZ3N0ciAiRmlsdGVyOiIKKworI34gbXNnaWQgIkdlbmVyYWwiCisjfiBtc2dzdHIgIkFsbGdlbWVpbmVzIgorCisjfiBtc2dpZCAiR3JvdXAgX3ZhbHVlcyBieToiCisjfiBtc2dzdHIgIl9XZXJ0ZSBncnVwcGllcmVuIG5hY2g6IgorCisjfiBtc2dpZCAiR3JvdXBpbmciCisjfiBtc2dzdHIgIkdydXBwaWVydW5nIgorCisjfiBtc2dpZCAiTElTVC9SRVBPUlQiCisjfiBtc2dzdHIgIkxJU1RFL0JFUklDSFQiCisKKyN+IG1zZ2lkICJOZXcgX0xpc3QiCisjfiBtc2dzdHIgIk5ldWUgX0xpc3RlIgorCisjfiBtc2dpZCAiTmV3IF9SZXBvcnQgb24gdGhpcyBWaWV3Li4uIgorI34gbXNnc3RyICJOZXVlciBfQmVyaWNodCBhdXMgZGllc2VyIEFuc2ljaHQuLi4iCisKKyN+IG1zZ2lkICJOZXcgX1JlcG9ydC4uLiIKKyN+IG1zZ3N0ciAiTmV1ZXIgX0JlcmljaHQuLi4iCisKKyN+IG1zZ2lkICJPcmRlcjoiCisjfiBtc2dzdHIgIlJlaWhlbmZvbGdlOiIKKworI34gbXNnaWQgIlJlX2ZyZXNoIgorI34gbXNnc3RyICJBa3R1X2FsaXNpZXJlbiIKKworI34gbXNnaWQgIlNlcmlhbCBudW1iZXI6IgorI34gbXNnc3RyICJTZXJpZW5udW1tZXI6IgorCisjfiBtc2dpZCAiU29ydCBieToiCisjfiBtc2dzdHIgIlNvcnRpZXJlbiBuYWNoOiIKKworI34gbXNnaWQgIiIKKyN+ICJUaGUgY2hhcnQgaGFzIHRvbyBtYW55IGRhdGEgcG9pbnRzLiAgUGxlYXNlIHJlc3RyaWN0IHlvdXIgZGF0YSBmaWx0ZXIgb3IgIgorI34gInVzZSBjb2Fyc2VyIGRhdGEgZ3JvdXBpbmcgY3JpdGVyaWEuIgorI34gbXNnc3RyICIiCisjfiAiRGFzIERpYWdyYW1tIGhhdCB6dSB2aWVsZSBEYXRlbnB1bmt0ZS4gQml0dGUgYmVzY2hyw6Rua2VuIFNpZSBJaHJlbiAiCisjfiAiRGF0ZW5maWx0ZXIgb2RlciBiZW51dHplbiBTaWUgY29hcnNlci1EYXRlbmdydXBwaWVydW5na3JpdGVyaWVuLiIKKworI34gbXNnaWQgIlRpbWU6IgorI34gbXNnc3RyICJaZWl0OiIKKworI34gbXNnaWQgIiIKKyN+ICJZb3UgY2FuIGFkZCBhZGl0aW9uYWwgY29uZGl0aW9ucyB1c2luZyB0aGUgPHR0PmF1c2VhcmNoPC90dD4gZXhwcmVzc2lvbiAiCisjfiAibGFuZ3VhZ2UuICBSdW4gPHR0PihtYW4gYXVzZWFyY2gtZXhwcmVzc2lvbik8L3R0PiB0byByZWFkIHRoZSAiCisjfiAiZG9jdW1lbnRhdGlvbiBvZiB0aGUgbGFuZ3VhZ2UuIgorI34gbXNnc3RyICIiCisjfiAiU2llIGvDtm5uZW4genVzw6R0emxpY2hlIEJlZGluZ3VuZ2VuIGhpbnp1ZsO8Z2VuIG1pdCBkZXIgPHR0PmF1c2VhcmNoPC90dD4tIgorI34gIkF1c2RydWNrc3NwcmFjaGUuIEbDvGhyZW4gU2llIDx0dD4obWFuIGF1c2VhcmNoLWV4cHJlc3Npb24pPC90dD4gYXVzLCB1bSAiCisjfiAiZGllIERva3VtZW50YWlvbiBkaWVzZXIgU3ByYWNoZSB6dSBsZXNlbi4iCisKKyN+IG1zZ2lkICJfQXNjZW5kaW5nIgorI34gbXNnc3RyICJfQXVmc3RlaWdlbmQiCisKKyN+IG1zZ2lkICJfQ2xvc2UiCisjfiBtc2dzdHIgIl9TY2hsaWVzc2VuIgorCisjfiBtc2dpZCAiX0Rlc2NlbmRpbmciCisjfiBtc2dzdHIgIl9BYnN0ZWlnZW5kIgorCisjfiBtc2dpZCAiX0V2ZW50IERldGFpbHMiCisjfiBtc2dzdHIgIl9FcmVpZ25pcy1EZXRhaWxzIgorCisjfiBtc2dpZCAiX0V2ZW50IFRpbWUiCisjfiBtc2dzdHIgIl9FcmVpZ25pcy1aZWl0IgorCisjfiBtc2dpZCAiX0V4cG9ydC4uLiIKKyN+IG1zZ3N0ciAiX0V4cG9ydGllcmVuLi4uIgorCisjfiBtc2dpZCAiX0V4cHJlc3Npb246IgorI34gbXNnc3RyICJfQXVzZHJ1Y2s6IgorCisjfiBtc2dpZCAiX0ZpZWxkOiIKKyN+IG1zZ3N0ciAiX0ZlbGQ6IgorCisjfiBtc2dpZCAiX0dyb3VwIHZhbHVlcyBieToiCisjfiBtc2dzdHIgIl9HcnVwcGVuLVdlcnQgbmFjaDoiCisKKyN+IG1zZ2lkICJfSGVscCIKKyN+IG1zZ3N0ciAiX0hpbGZlIgorCisjfiBtc2dpZCAiX0xpc3QgRXZlbnRzIGZvciIKKyN+IG1zZ3N0ciAiX0F1Zmxpc3RlbiBkZXIgRXJlaWduaXNzZW4gbmFjaCIKKworI34gbXNnaWQgIl9Mb2cgZmlsZToiCisjfiBtc2dzdHIgIl9Qcm90b2tvbGxkYXRlaToiCisKKyN+IG1zZ2lkICJfTmV4dCBFdmVudCIKKyN+IG1zZ3N0ciAiX07DpGNoc3RlcyBFcmVpZ25pcyIKKworI34gbXNnaWQgIl9PcGVuIGluIG5ldyB3aW5kb3ciCisjfiBtc2dzdHIgIl9JbiBuZXVlbSBGZW5zdGVyIMO2ZmZuZW4iCisKKyN+IG1zZ2lkICJfUGF0aDoiCisjfiBtc2dzdHIgIl9QZmFkOiIKKworI34gbXNnaWQgIl9QcmV2aW91cyBFdmVudCIKKyN+IG1zZ3N0ciAiX1ZvcmhlcmlnZXMgRXJlaWduaXMiCisKKyN+IG1zZ2lkICJfU2F2ZSBDb25maWd1cmF0aW9uIGFzLi4uIgorI34gbXNnc3RyICJfU3BlaWNoZXJlIEtvbmZpZ3VyYXRpb24gYWxzLi4uIgorCisjfiBtc2dpZCAiX1NhdmUgbGF5b3V0IGFzLi4uIgorI34gbXNnc3RyICJfU3BlaWNoZXJlIEFub3JkbnVuZyBhbHPigKYiCisKKyN+IG1zZ2lkICJfU2hvdyBhcyBhIGNoYXJ0IgorI34gbXNnc3RyICJfWmVpZ2UgYWxzIERpYWdyYW1tIgorCisjfiBtc2dpZCAiX1ZpZXciCisjfiBtc2dzdHIgIl9BbnNpY2h0IgorCisjfiBtc2dpZCAiX1dpbmRvdyIKKyN+IG1zZ3N0ciAiX0ZlbnN0ZXIiCisKKyN+IG1zZ2lkICJndGstYWJvdXQiCisjfiBtc2dzdHIgImd0ay1hYm91dCIKKworI34gbXNnaWQgImd0ay1hcHBseSIKKyN+IG1zZ3N0ciAiZ3RrLWFwcGx5IgorCisjfiBtc2dpZCAiZ3RrLWNsb3NlIgorI34gbXNnc3RyICJndGstY2xvc2UiCisKKyN+IG1zZ2lkICJndGstb3BlbiIKKyN+IG1zZ3N0ciAiZ3RrLW9wZW4iCisKKyN+IG1zZ2lkICJndGstcHJvcGVydGllcyIKKyN+IG1zZ3N0ciAiZ3RrLXByb3BlcnRpZXMiCisKKyN+IG1zZ2lkICJndGstcXVpdCIKKyN+IG1zZ3N0ciAiZ3RrLXF1aXQiCisKKyN+IG1zZ2lkICJOb3QgZW5vdWdoIGRhdGEgYXZhaWxhYmxlIgorI34gbXNnc3RyICJOaWNodCBnZW7DvGdlbmQgRGF0ZW4gdmVyZsO8Z2JhciIKKworI34gbXNnaWQgIkZpZWxkIgorI34gbXNnc3RyICJGZWxkIgorCisjfiBtc2dpZCAiVmFsdWUiCisjfiBtc2dzdHIgIldlcnQiCisKKyN+IG1zZ2lkICJSZWNvcmQgVHlwZSIKKyN+IG1zZ3N0ciAiQXVmemVpY2hudW5nc3R5cCIKKworI34gbXNnaWQgImRhdGUgJXMgJXMuJTAzZCIKKyN+IG1zZ3N0ciAiRGF0dW0gJXMgJXMuJTAzZCIKKworI34gbXNnaWQgIiV4ICVIOiVNOiVTIgorI34gbXNnc3RyICIleCAlSDolTTolUyIKKworI34gbXNnaWQgImRhdGUgJXMgbm93IgorI34gbXNnc3RyICJEYXR1bSAlcyBoZXV0ZSIKKworI34gbXNnaWQgImRhdGUgJXMgJWQgbWludXRlIGFnbyIKKyN+IG1zZ2lkX3BsdXJhbCAiZGF0ZSAlcyAlZCBtaW51dGVzIGFnbyIKKyN+IG1zZ3N0clswXSAiRGF0dW0gJXMgJWQgTWludXRlIHZlcmdhbmdlbiIKKyN+IG1zZ3N0clsxXSAiRGF0dW0gJXMgJWQgTWludXRlbiB2ZXJnYW5nZW4iCisKKyN+IG1zZ2lkICJkYXRlICVzIHRvZGF5IDAwOjAwIgorI34gbXNnc3RyICJEYXR1bSAlcyBIZXV0ZSAwMDowMCIKKworI34gbXNnaWQgImRhdGUgJXMgeWVzdGVyZGF5IDAwOjAwIgorI34gbXNnc3RyICJEYXR1bSAlcyBHZXN0ZXJuIDAwOjAwIgorCisjfiBtc2dpZCAiZGF0ZSAlcyBzdGFydCBvZiB0aGlzIHdlZWsiCisjfiBtc2dzdHIgIkRhdHVtICVzIFN0YXJ0IGRpZXNlciBXb2NoZSIKKworI34gbXNnaWQgImRhdGUgJXMgc3RhcnQgb2YgdGhpcyBtb250aCIKKyN+IG1zZ3N0ciAiRGF0dW0gJXMgU3RhcnQgZGllc2VzIE1vbmF0IgorCisjfiBtc2dpZCAiZGF0ZSAlcyBzdGFydCBvZiB0aGlzIHllYXIiCisjfiBtc2dzdHIgIkRhdHVtICVzIFN0YXJ0IHZvbiBkaWVzZW0gSmFociIKKworI34gbXNnaWQgIkV2ZW50IGRhdGUiCisjfiBtc2dzdHIgIkVyZWlnbmlzZGF0dW0iCisKKyN+IG1zZ2lkICJPdGhlciBmaWVsZHMiCisjfiBtc2dzdHIgIkFuZGVyZSBGZWxkZXIiCisKKyN+IG1zZ2lkICJDb2x1bW4iCisjfiBtc2dzdHIgIlNwYWx0ZSIKKworI34gbXNnaWQgIkZpZWxkIG5hbWUgbXVzdCBub3QgYmUgZW1wdHkiCisjfiBtc2dzdHIgIkZlbGRuYW1lIGRhcmYgbmljaHQgbGVlciBzZWluIgorCisjfiBtc2dpZCAiX0xpc3QiCisjfiBtc2dzdHIgIl9MaXN0ZSIKKworI34gbXNnaWQgIkxpc3QgJWQiCisjfiBtc2dzdHIgIkxpc3RlICVkIgorCisjfiBtc2dpZCAiSFRNTCIKKyN+IG1zZ3N0ciAiSFRNTCIKKworI34gbXNnaWQgIkNTViIKKyN+IG1zZ3N0ciAiQ1NWIgorCisjfiBtc2dpZCAiUmF3IGxvZyBkYXRhIgorI34gbXNnc3RyICJSb2hlIExvZy1EYXRlbiIKKworI34gbXNnaWQgIkV4cG9ydC4uLiIKKyN+IG1zZ3N0ciAiRXhwb3J0Li4uIgorCisjfiBtc2dpZCAiRXJyb3Igd3JpdGluZyB0byAlczogJXMiCisjfiBtc2dzdHIgIkZlaGxlciBiZWltIFNjaHJlaWJlbiB2b24gJXM6ICVzIgorCisjfiBtc2dpZCAiLCAiCisjfiBtc2dzdHIgIiwgIgorCisjfiBtc2dpZCAiTm9uZSIKKyN+IG1zZ3N0ciAiTmljaHRzIgorCisjfiBtc2dpZCAiT3RoZXIgRmllbGRzIgorI34gbXNnc3RyICJBbmRlcmUgRmVsZGVyIgorCisjfiBtc2dpZCAiRGF0ZSIKKyN+IG1zZ3N0ciAiRGF0dW0iCisKKyN+IG1zZ2lkICIlcHJvZyBbT1BUSU9OXS4uLiBbRklMRV0uLi4iCisjfiBtc2dzdHIgIiVwcm9nIFtPUFRJT05dLi4uIFtEQVRFSV0uLi4iCisKKyN+IG1zZ2lkICJTdGFydCBhbiBhdWRpdCBldmVudCB2aWV3ZXIuIgorI34gbXNnc3RyICJTdGFydGUgZWluZSBBdWRpdC1FcmVpZ25pcy1CZXRyYWNodGVyIgorCisjfiBtc2dpZCAiIgorI34gImRvIG5vdCBhdHRlbXB0IHRvIHN0YXJ0IHRoZSBwcml2aWxlZ2VkIGJhY2tlbmQgZm9yIHJlYWRpbmcgc3lzdGVtIGF1ZGl0ICIKKyN+ICJsb2dzIgorI34gbXNnc3RyICIiCisjfiAidmVyc3VjaGVuIFNpZSBuaWNodCBkYXMgcHJpdmlsZWdpZXJ0ZSBCYWNrZW5kIHp1bSBMZXNlbiBkZXIgU3lzdGVtLUF1ZGl0LSIKKyN+ICJCZXJpY2h0ZSB6dSBzdGFydGVuIgorCisjfiBtc2dpZCAiRXJyb3IgcnVubmluZyBhdWRpdC12aWV3ZXItc2VydmVyOiAlcyIKKyN+IG1zZ3N0ciAiRmVobGVyIGJlaW0gTGF1ZmVubGFzc2VuIHZvbiAgYXVkaXQtdmlld2VyLXNlcnZlcjogJXMiCisKKyN+IG1zZ2lkICJBdWRpdCB2aWV3ZXIgbGF5b3V0IgorI34gbXNnc3RyICJBdWRpdC1BbnNpY2h0LUFub3JkbnVuZyIKKworI34gbXNnaWQgIkEgZmlsZSBuYW1lZCBcIiVzXCIgYWxyZWFkeSBleGlzdHMuICBEbyB5b3Ugd2FudCB0byByZXBsYWNlIGl0PyIKKyN+IG1zZ3N0ciAiRGllIERhdGVpIFwiJXNcIiBleGlzdGllcnQgYmVyZWl0cy4gV29sbGVuIFNpZSBzaWUgZXJzZXR6ZW4/IgorCisjfiBtc2dpZCAiIgorI34gIlRoZSBmaWxlIGFscmVhZHkgZXhpc3RzIGluIFwiJXNcIi4gIFJlcGxhY2luZyBpdCB3aWxsIG92ZXJ3cml0ZSBpdHMgIgorI34gImNvbnRlbnRzLiIKKyN+IG1zZ3N0ciAiIgorI34gIkRpZSBEYXRlaSBleGlzdGllcnQgYmVyZWl0cyBpbiBcIiVzXCIgLiBGYWxscyBTaWUgc2llIGVyc2V0emVuLCB3aXJkIGlocmUgIgorI34gIkluaGFsdCDDvGJlcnNjaHJlaWJlbi4iCisKKyN+IG1zZ2lkICJfUmVwbGFjZSIKKyN+IG1zZ3N0ciAiX0Vyc2V0emVuIgorCisjfiBtc2dpZCAiRXJyb3IgcmVhZGluZyBhdWRpdCBldmVudHM6ICVzIgorI34gbXNnc3RyICJGZWhsZXIgYmVpbSBMZXNlbiBkZXIgQXVkaXQtRXJlaWduaXNzZTogJXMiCisKKyN+IG1zZ2lkICJBbGwgZmlsZXMiCisjfiBtc2dzdHIgIkFsbGUgRGF0ZWllbiIKKworI34gbXNnaWQgIlVuZXhwZWN0ZWQgdG9wIGVsZW1lbnQgY29udGVudHMiCisjfiBtc2dzdHIgIlVuZXJ3YXJ0ZXRlciBUb3AtRWxlbWVudGluaGFsdCIKKworI34gbXNnaWQgIlVuc3VwcG9ydGVkIGZpbGUgdmVyc2lvbiAlcyIKKyN+IG1zZ3N0ciAiTmljaHQgdW50ZXJzdMO8dHp0ZSBEYXRlaS1WZXJzaW9uICVzIgorCisjfiBtc2dpZCAiVW5leHBlY3RlZCB0b3AgZWxlbWVudCIKKyN+IG1zZ3N0ciAiVW5lcndhcnRldGVzIFRvcGVsZW1lbnQiCisKKyN+IG1zZ2lkICJFcnJvciByZWFkaW5nICVzOiAlcyIKKyN+IG1zZ3N0ciAiRmVobGVyIGJlaW0gTGVzZW4gJXM6ICVzIgorCisjfiBtc2dpZCAiSW52YWxpZCBjb250ZW50cyBvZiAlczogJXMiCisjfiBtc2dzdHIgIlVuZ8O8bHRpZ2VyIEluaGFsdCB2b24gJXM6ICVzIgorCisjfiBtc2dpZCAiT3Blbi4uLiIKKyN+IG1zZ3N0ciAiw5ZmZm5lbi4uLiIKKworI34gbXNnaWQgIlNhdmUgTGF5b3V0IEFzLi4uIgorI34gbXNnc3RyICJTaWNoZXJlIEF1ZmJhdSBhbHMuLi4iCisKKyN+IG1zZ2lkICJTYXZlIENvbmZpZ3VyYXRpb24gQXMuLi4iCisjfiBtc2dzdHIgIlNpY2hlcmUgS29uZmlndXJhdGlvbiBhbHMuLi4iCisKKyN+IG1zZ2lkICJ0cmFuc2xhdG9yLWNyZWRpdHMiCisjfiBtc2dzdHIgIkZhYmlhbiBBZmZvbHRlciA8ZmFiQGZlZG9yYXByb2plY3Qub3JnPiwgMjAwOC4iCisKKyN+IG1zZ2lkICJubyBzdWNoIG9wdGlvbjogJXMiCisjfiBtc2dzdHIgIktlaW5lIHNvbGNoZSBPcHRpb246ICVzIgorCisjfiBtc2dpZCAiYW1iaWd1b3VzIG9wdGlvbjogJXMgKCVzPykiCisjfiBtc2dzdHIgIk1laHJkZXV0aWdlIE9wdGlvbjogJXMgKCVzPykiCisKKyN+IG1zZ2lkICJVc2FnZTogJXNcbiIKKyN+IG1zZ3N0ciAiVmVyd2VuZHVuZzogJXNcbiIKKworI34gbXNnaWQgIlVzYWdlIgorI34gbXNnc3RyICJWZXJ3ZW5kdW5nIgorCisjfiBtc2dpZCAiaW50ZWdlciIKKyN+IG1zZ3N0ciAiR2FuenphaGwiCisKKyN+IG1zZ2lkICJsb25nIGludGVnZXIiCisjfiBtc2dzdHIgIkxhbmdlIEdhbnp6YWhsIgorCisjfiBtc2dpZCAiZmxvYXRpbmctcG9pbnQiCisjfiBtc2dzdHIgIkdsZWl0a29tbWEiCisKKyN+IG1zZ2lkICJjb21wbGV4IgorI34gbXNnc3RyICJLb21wbGV4IgorCisjfiBtc2dpZCAib3B0aW9uICVzOiBpbnZhbGlkICVzIHZhbHVlOiAlciIKKyN+IG1zZ3N0ciAiT3B0aW9uICVzOiB1bmfDvGx0aWdlciAlcyBXZXJ0OiAlciIKKworI34gbXNnaWQgIm9wdGlvbiAlczogaW52YWxpZCBjaG9pY2U6ICVyIChjaG9vc2UgZnJvbSAlcykiCisjfiBtc2dzdHIgIk9wdGlvbiAlczogdW5nw7xsdGlnZSBXYWhsOiAlciAoV2FobCB2b24gJXMpIgorCisjfiBtc2dpZCAic2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdCIKKyN+IG1zZ3N0ciAiRGllc2UgSGlsZmUtTWVsZHVuZyBhdXNnZWJlbiB1bmQgYmVlbmRlbiIKKworI34gbXNnaWQgInNob3cgcHJvZ3JhbSdzIHZlcnNpb24gbnVtYmVyIGFuZCBleGl0IgorI34gbXNnc3RyICJWZXJzaW9uIGRlcyBQcm9ncmFtbXMgYW56ZWlnZW4gdW5kIGJlZW5kZW4iCisKKyN+IG1zZ2lkICIlcHJvZyBbb3B0aW9uc10iCisjfiBtc2dzdHIgIiVwcm9nIFtPcHRpb25lbl0iCisKKyN+IG1zZ2lkICIlcyBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQiCisjfiBtc2dzdHIgIiVzIE9wdGlvbiBiZW7DtnRpZ3QgZWluIEFyZ3VtZW50IgorCisjfiBtc2dpZCAiJXMgb3B0aW9uIHJlcXVpcmVzICVkIGFyZ3VtZW50cyIKKyN+IG1zZ3N0ciAiJXMgT3B0aW9uIGJlbsO2dGlndCAlZCBBcmd1bWVudGUiCisKKyN+IG1zZ2lkICIlcyBvcHRpb24gZG9lcyBub3QgdGFrZSBhIHZhbHVlIgorI34gbXNnc3RyICIlcyBPcHRpb24gYmVuw7Z0aWd0IGtlaW5lIFdlcnQiCisKKyN+IG1zZ2lkICJPcHRpb25zIgorI34gbXNnc3RyICJPcHRpb25lbiIKKworI34gbXNnaWQgIl9SZXBvcnQiCisjfiBtc2dzdHIgIl9CZXJpY2h0IgorCisjfiBtc2dpZCAiUmVwb3J0ICVkIgorI34gbXNnc3RyICJCZXJpY2h0ICVkIgorCisjfiBtc2dpZCAiTGlzdGluZyBldmVudHMgZm9yIHRoaXMgY29sdW1uIGlzIG5vdCBzdXBwb3J0ZWQuIgorI34gbXNnc3RyICJBdWZsaXN0ZW4gdm9uIEVyZWlnbmlzc2VuIGbDvHIgZGllc2UgU3BhbHRlIGlzdCBuaWNodCB1bnRlcnN0w7x0enQuIgorCisjfiBtc2dpZCAiTGlzdGluZyBldmVudHMgZm9yIHRoaXMgY2VsbCBpcyBub3Qgc3VwcG9ydGVkLiIKKyN+IG1zZ3N0ciAiQXVmbGlzdGVuIHZvbiBFcmVpZ25pc3NlbiBmw7xyIGRpZXNlIFplbGxlIGlzdCBuaWNodCB1bnRlcnN0w7x0enQuIgorCisjfiBtc2dpZCAiTGlzdGluZyBldmVudHMgZm9yIHRoaXMgcm93IGlzIG5vdCBzdXBwb3J0ZWQuIgorI34gbXNnc3RyICJBdWZsaXN0ZW4gdm9uIEVyZWlnbmlzc2VuIGbDvHIgZGllc2UgWmVpbGUgaXN0IG5pY2h0IHVudGVyc3TDvHR6dC4iCisKKyN+IG1zZ2lkICJDb3VudCIKKyN+IG1zZ3N0ciAiQW56YWhsIgorCisjfiBtc2dpZCAiU2VhcmNoLi4uIgorI34gbXNnc3RyICJTdWNoZS4uLiIKKworI34gbXNnaWQgIiIKKyN+ICJUaGlzIHByb2dyYW0gaXMgb25seSBmb3IgdXNlIGJ5IGF1ZGl0LXZpZXdlciBhbmQgaXQgc2hvdWxkIG5vdCBiZSBydW4gIgorI34gIm1hbnVhbGx5LlxuIgorI34gbXNnc3RyICIiCisjfiAiRGllc2VzIFByb2dyYW1tIGlzdCBudXIgZsO8ciBkaWUgQmVudXR6dW5nIGR1cmNoIGF1ZGl0LXZpZXdlciB1bmQgZXMgIgorI34gInNvbGx0ZSBuaWNodCBtYW51ZWxsIGdlc3RhcnRldCB3ZXJkZW4uXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiXG4iCisjfiAiUmVwb3J0IGJ1Z3MgdG8gJXMuXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJcbiIKKyN+ICJNZWxkZW4gU2llIEZlaGxlciBhbiAlcy5cbiIKKworI34gbXNnaWQgIiIKKyN+ICJDb3B5cmlnaHQgKEMpIDIwMDggUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiIKKyN+ICJUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBHUEwgdi4yLlxuIgorI34gIlxuIgorI34gIlRoaXMgcHJvZ3JhbSBpcyBwcm92aWRlZCB3aXRoIE5PIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXcuIgorI34gbXNnc3RyICIiCisjfiAiQ29weXJpZ2h0IChDKSAyMDA4IFJlZCBIYXQsIEluYy4gIEFsbGUgUmVjaHRlIHZvcmJlaGFsdGVuLlxuIgorI34gIkRpZXNlIFNvZnR3YXJlIHdpcmQgdW50ZXIgZGVyIEdQTCB2LjIgdmVydGVpbHQuXG4iCisjfiAiXG4iCisjfiAiRGllc2VzIFByb2dyYW1tIHdpcmQgT0hORSBHRVfDhEhSTEVJU1RVTkcgYmVyZWl0Z2VzdGVsbHQsIGltIGdlc2V0emxpY2ggIgorI34gImVybcO2Z2xpY2h0ZW4gVW1mYW5nLiIKKworI34gbXNnaWQgIlRoZSBjb250cm9sIGZpbGUgaXMgbm90IGEgc29ja2V0IgorI34gbXNnc3RyICJEaWUgS29udHJvbGxkYXRlaSBpc3Qga2VpbmUgU29ja2V0IgorCisjfiBtc2dpZCAiVW5rbm93biBzZXJ2ZXIgcmVxdWVzdCAlPFBSSXUzMj4iCisjfiBtc2dzdHIgIlVuYmVrYW5udGUgU2VydmVyYW5mb3JkZXJ1bmcgJTxQUkl1MzI+IgorCisjfiBtc2dpZCAiQXVkaXQgTG9nIEZpbGUiCisjfiBtc2dzdHIgIkF1ZGl0LVByb3Rva29sbC1EYXRlaSIKKworI34gbXNnaWQgIkVycm9yIG9wZW5pbmcgJXM6ICVzIgorI34gbXNnc3RyICJGZWhsZXIgYmVpbSDDlmZmbmVuIHZvbiAlczogJXMiCisKKyN+IG1zZ2lkICIleCAlWCIKKyN+IG1zZ3N0ciAiJXggJVgiCisKKyN+IG1zZ2lkICIleCAlSDolTSIKKyN+IG1zZ3N0ciAiJXggJUg6JU0iCisKKyN+IG1zZ2lkICIleCAlSCIKKyN+IG1zZ3N0ciAiJXggJUgiCisKKyN+IG1zZ2lkICJob3VyIgorI34gbXNnc3RyICJTdHVuZGUiCisKKyN+IG1zZ2lkICIlZCBob3VyIgorI34gbXNnaWRfcGx1cmFsICIlZCBob3VycyIKKyN+IG1zZ3N0clswXSAiJWQgU3R1bmRlIgorI34gbXNnc3RyWzFdICIlZCBTdHVuZGVuIgorCisjfiBtc2dpZCAibWludXRlIgorI34gbXNnc3RyICJNaW51dGUiCisKKyN+IG1zZ2lkICIlZCBtaW51dGUiCisjfiBtc2dpZF9wbHVyYWwgIiVkIG1pbnV0ZXMiCisjfiBtc2dzdHJbMF0gIiVkIE1pbnV0ZSIKKyN+IG1zZ3N0clsxXSAiJWQgTWludXRlbiIKKworI34gbXNnaWQgInNlY29uZCIKKyN+IG1zZ3N0ciAiU2VrdW5kZSIKKworI34gbXNnaWQgIiVkIHNlY29uZCIKKyN+IG1zZ2lkX3BsdXJhbCAiJWQgc2Vjb25kcyIKKyN+IG1zZ3N0clswXSAiJWQgU2VrdW5kZSIKKyN+IG1zZ3N0clsxXSAiJWQgU2VrdW5kZW4iCisKKyN+IG1zZ2lkICJkYXkiCisjfiBtc2dzdHIgIlRhZyIKKworI34gbXNnaWQgIndlZWsiCisjfiBtc2dzdHIgIldvY2hlIgorCisjfiBtc2dpZCAiJWIgJVkiCisjfiBtc2dzdHIgIiViICVZIgorCisjfiBtc2dpZCAibW9udGgiCisjfiBtc2dzdHIgIk1vbmF0IgorCisjfiBtc2dpZCAiU3BlY2lmaWMgdGltZSIKKyN+IG1zZ3N0ciAiQW5nZWdlYmVuZSBaZWl0IgorCisjfiBtc2dpZCAiTm93IgorI34gbXNnc3RyICJKZXR6dCIKKworI34gbXNnaWQgIjEwIG1pbnV0ZXMgYWdvIgorI34gbXNnc3RyICJWb3IgMTAgTWludXRlbiIKKworI34gbXNnaWQgIlRvZGF5IgorI34gbXNnc3RyICJIZXV0ZSIKKworI34gbXNnaWQgIlllc3RlcmRheSIKKyN+IG1zZ3N0ciAiR2VzdGVybiIKKworI34gbXNnaWQgIlRoaXMgd2VlayIKKyN+IG1zZ3N0ciAiRGllc2UgV29jaGUiCisKKyN+IG1zZ2lkICJUaGlzIG1vbnRoIgorI34gbXNnc3RyICJEaWVzZW4gTW9uYXQiCisKKyN+IG1zZ2lkICJUaGlzIHllYXIiCisjfiBtc2dzdHIgIkRpZXNlcyBKYWhyIgorCisjfiBtc2dpZCAiVW5zdXBwb3J0ZWQgZGF0ZSBmaWx0ZXIgXCIlc1wiIgorI34gbXNnc3RyICJOaWNodCB1bnRlcnN0w7x0enRlciBEYXR1bXNmaWx0ZXIgXCIlc1wiIgorCisjfiBtc2dpZCAiUnVsZSIKKyN+IG1zZ3N0ciAiUmVnZWwiCisKKyN+IG1zZ2lkICJVbnN1cHBvcnRlZCB0aW1lc3RhbXAgb3BlcmF0b3IgaW4gXCIlc1wiIgorI34gbXNnc3RyICJOaWNodCB1bnRlcnN0w7x0enRlciBaZWl0c3RlbXBlbCBpbiBcIiVzXCIiCisKKyN+IG1zZ2lkICJFZGl0aW5nIG9mIHNvbWUgZmlsdGVycyBpcyBub3Qgc3VwcG9ydGVkIgorI34gbXNnc3RyICJCZWFyYmVpdGVuIHZvbiBnZXdpc3NlbiBGaWx0ZXJuIGlzdCBuaWNodCB1bnRlcnN0w7x0enQiCisKKyN+IG1zZ2lkICIiCisjfiAiSWYgeW91IGVkaXQgcHJvcGVydGllcyBvZiB0aGlzIHRhYiwgdGhlc2UgZmlsdGVycyB3aWxsIGJlIGRyb3BwZWQgZnJvbSAiCisjfiAidGhlIHRhYidzIGNvbmZpZ3VyYXRpb246XG4iCisjfiAiJXNcbiIKKyN+ICJEbyB5b3Ugc3RpbGwgd2FudCB0byBlZGl0IHByb3BlcnRpZXMgb2YgdGhpcyB0YWI/IgorI34gbXNnc3RyICIiCisjfiAiV2VubiBTaWUgZGllIEVpZ2Vuc2NoYWZ0ZW4gZGllc2VzIFJlZ2lzdGVycyBiZWFyYmVpdGVuLCBkaWVzZSBGaWx0ZXIgYXVzICIKKyN+ICJkZXIgUmVnaXN0ZXItS29uZmlndXJhdGlvbiB3ZXJkZW4gdmVyd29yZmVuOlxuIgorI34gIiVzXG4iCisjfiAiV29sbGVuIFNpZSBpbW1lciBuaWNoIGRpZSBFaWdlbnNjaGFmdGVuIGRpZXNlcyBSZWdpc3RlcnMgYmVhcmJlaXRlbj8iCisKKyN+IG1zZ2lkICJUYWIgbmFtZSBtdXN0IG5vdCBiZSBlbXB0eSIKKyN+IG1zZ3N0ciAiVGFiLU5hbWUgZGFyZiBuaWNodCBsZWVyIHNlaW4iCisKKyN+IG1zZ2lkICIlcyBQcm9wZXJ0aWVzIgorI34gbXNnc3RyICIlcy1FaWdlbnNjaGFmdGVuIgorCisjfiBtc2dpZCAiSW52YWxpZCA8JXMgJXM+IHZhbHVlICVzIgorI34gbXNnc3RyICJVbmfDvGx0aWdlciA8JXMgJXM+LVdlcnQgJXMiCisKKyN+IG1zZ2lkICJVbmtub3duIDwlcyAlcz4gdmFsdWUgJXMiCisjfiBtc2dzdHIgIldlcnQgPCVzICVzPiB1bmJla2FubnQgJXMiCisKKyN+IG1zZ2lkICJBdHRyaWJ1dGUgJXMgbWlzc2luZyBpbiA8JXM+IgorI34gbXNnc3RyICJGZWhsZW5kZXMgJXMtQXR0cmlidXQgaW4gPCVzPiIKKworI34gbXNnaWQgIkF1ZGl0IExvZ3MiCisjfiBtc2dzdHIgIkF1ZGl0LVByb3Rva29sbGUiCisKKyN+IG1zZ2lkICJWaWV3IGF1ZGl0IGxvZ3MiCisjfiBtc2dzdHIgIkF1ZGl0LVByb3Rva29sbCBhbnNlaGVuIgorCisjfiBtc2dpZCAiUmVwb3J0IFByb3BlcnRpZXMiCisjfiBtc2dzdHIgIkJlcmljaHQtRWlnZW5zY2hhZnRlbiIKKworI34gbXNnaWQgIl9GaWxlIgorI34gbXNnc3RyICJfRGF0ZWkiCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvcG8vZWwucG8gYi9hdmFoaS0wLjYuMzEvcG8vZWwucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYwOTVlZQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9wby9lbC5wbwpAQCAtMCwwICsxLDg0MCBAQAorIyBDb3B5cmlnaHQgKEMpIFlFQVIgVEhFIFBBQ0tBR0UnUyBDT1BZUklHSFQgSE9MREVSCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBQQUNLQUdFIHBhY2thZ2UuCisjCisjIERpbWl0cmlzIEdsZXpvcyA8ZGltaXRyaXNAZ2xlem9zLmNvbT4sIDIwMDguCisjIFRoYWxpYSBQYXBvdXRzYWtpIDxzYWxpeWF0aEBnbWFpbC5jb20+LCAyMDA5LgorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZWxcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTEtMDQtMDIgMDM6MjMrMDIwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDktMTAtMjYgMTQ6NDIrMDIwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogVGhhbGlhIFBhcG91dHNha2kgPHNhbGl5YXRoQGdtYWlsLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBBbWVyaWNhbiBFbmdsaXNoIDxmZWRvcmEtdHJhbnMtZWxAcmVkaGF0LmNvbT5cbiIKKyJMYW5ndWFnZTogXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiWC1HZW5lcmF0b3I6IEtBaWRlciAwLjFcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiAhPSAxKTtcbiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzAKK21zZ2lkICJPSyIKK21zZ3N0ciAizpXOvc+EzqzOvs61zrkiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjMxCittc2dpZCAiT3BlcmF0aW9uIGZhaWxlZCIKK21zZ3N0ciAizpcgzrvOtc65z4TOv8+Fz4HOs86vzrEgzrHPgM6tz4TPhc+HzrUiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjMyCittc2dpZCAiQmFkIHN0YXRlIgorbXNnc3RyICLOms6xzrrOriDOus6xz4TOrM+Dz4TOsc+DzrciCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjMzCittc2dpZCAiSW52YWxpZCBob3N0IG5hbWUiCittc2dzdHIgIs6bzrHOvc64zrHPg868zq3Ovc6/IM+Mzr3Ov868zrEgzrXOvs+Fz4DOt8+BzrXPhM63z4TOriIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzQKK21zZ2lkICJJbnZhbGlkIGRvbWFpbiBuYW1lIgorbXNnc3RyICLOm86xzr3OuM6xz4POvM6tzr3OvyDPjM69zr/OvM6xIGRvbWFpbiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzUKK21zZ2lkICJObyBzdWl0YWJsZSBuZXR3b3JrIHByb3RvY29sIGF2YWlsYWJsZSIKK21zZ3N0ciAizpTOtc69IM+Fz4DOrM+Bz4fOtc65IM60zrnOsc64zq3Pg865zrzOvyDPgM+Bz4nPhM+MzrrOv867zrvOvyDOtM65zrrPhM+Nzr/PhSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzYKK21zZ2lkICJJbnZhbGlkIEROUyBUVEwiCittc2dzdHIgIs6bzrHOvc64zrHPg868zq3Ovc6/IEROUyBUVEwiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM3Cittc2dpZCAiUmVzb3VyY2UgcmVjb3JkIGtleSBpcyBwYXR0ZXJuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM4Cittc2dpZCAiTG9jYWwgbmFtZSBjb2xsaXNpb24iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzkKK21zZ2lkICJJbnZhbGlkIHJlY29yZCIKK21zZ3N0ciAizpzOtyDOrc6zzrrPhc+BzrcgzrrOsc+EzrHOs8+BzrHPhs6uIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0MQorbXNnaWQgIkludmFsaWQgc2VydmljZSBuYW1lIgorbXNnc3RyICLOnM63IM6tzrPOus+Fz4HOvyDPjM69zr/OvM6xIM+Fz4DOt8+BzrXPg86vzrHPgiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDIKK21zZ2lkICJJbnZhbGlkIHNlcnZpY2UgdHlwZSIKK21zZ3N0ciAizpzOtyDOrc6zzrrPhc+Bzr/PgiDPhM+Nz4DOv8+CIM+Fz4DOt8+BzrXPg86vzrHPgiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDMKK21zZ2lkICJJbnZhbGlkIHBvcnQgbnVtYmVyIgorbXNnc3RyICLOnM63IM6tzrPOus+Fz4HOv8+CIM6xz4HOuc64zrzPjM+CIM64z43Pgc6xz4IiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQ0Cittc2dpZCAiSW52YWxpZCByZWNvcmQga2V5IgorbXNnc3RyICLOnM63IM6tzrPOus+Fz4HOtyDOus6xz4TOsc6zz4HOsc+Gzq4gzrrOu861zrnOtM65zr/PjSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDUKK21zZ2lkICJJbnZhbGlkIGFkZHJlc3MiCittc2dzdHIgIs6czrcgzq3Os866z4XPgc63IM60zrnOtc+NzrjPhc69z4POtyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDYKK21zZ2lkICJUaW1lb3V0IHJlYWNoZWQiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDcKK21zZ2lkICJUb28gbWFueSBjbGllbnRzIgorbXNnc3RyICLOnM61zrPOrM67zr/PgiDOsc+BzrnOuM68z4zPgiDPgM61zrvOsc+Ez47OvSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDgKK21zZ2lkICJUb28gbWFueSBvYmplY3RzIgorbXNnc3RyICLOnM61zrPOrM67zr/PgiDOsc+BzrnOuM68z4zPgiDOsc69z4TOuc66zrXOuc68zq3Ovc+Jzr0iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQ5Cittc2dpZCAiVG9vIG1hbnkgZW50cmllcyIKK21zZ3N0ciAizpzOtc6zzqzOu86/z4IgzrHPgc65zrjOvM+Mz4IgzrrOsc+EzrHPh8+Jz4HOrs+DzrXPic69IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1MAorbXNnaWQgIk9TIEVycm9yIgorbXNnc3RyICLOo8+GzqzOu868zrEgT1MiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjUyCittc2dpZCAiQWNjZXNzIGRlbmllZCIKK21zZ3N0ciAizpHPgM6/z4TPhc+Hzq/OsSDPgM+Bz4zPg86yzrHPg863z4IiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjUzCittc2dpZCAiSW52YWxpZCBvcGVyYXRpb24iCittc2dzdHIgIs6bzrHOvc64zrHPg868zq3Ovc63IM67zrXOuc+Ezr/Phc+BzrPOr86xIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1NAorbXNnaWQgIkFuIHVuZXhwZWN0ZWQgRC1CdXMgZXJyb3Igb2NjdXJlZCIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1NQorbXNnaWQgIkRhZW1vbiBjb25uZWN0aW9uIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1NgorbXNnaWQgIk1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTcKK21zZ2lkICJUaGUgb2JqZWN0IHBhc3NlZCBpbiB3YXMgbm90IHZhbGlkIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU4Cittc2dpZCAiRGFlbW9uIG5vdCBydW5uaW5nIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU5Cittc2dpZCAiSW52YWxpZCBpbnRlcmZhY2UgaW5kZXgiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjAKK21zZ2lkICJJbnZhbGlkIHByb3RvY29sIHNwZWNpZmljYXRpb24iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjEKK21zZ2lkICJJbnZhbGlkIGZsYWdzIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjYzCittc2dpZCAiTm90IGZvdW5kIgorbXNnc3RyICLOlM61IM6yz4HOrc64zrfOus61IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2NAorbXNnaWQgIkludmFsaWQgY29uZmlndXJhdGlvbiIKK21zZ3N0ciAizpvOsc69zrjOsc+DzrzOrc69zrcgz4HPjc64zrzOuc+DzrciCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY1Cittc2dpZCAiVmVyc2lvbiBtaXNtYXRjaCIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2NgorbXNnaWQgIkludmFsaWQgc2VydmljZSBzdWJ0eXBlIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY3Cittc2dpZCAiSW52YWxpZCBwYWNrZXQiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjgKK21zZ2lkICJJbnZhbGlkIEROUyByZXR1cm4gY29kZSIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2OQorbXNnaWQgIkROUyBmYWlsdXJlOiBGT1JNRVJSIgorbXNnc3RyICLOkc+Azr/PhM+Fz4fOr86xIEROUzogRk9STUVSUiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzAKK21zZ2lkICJETlMgZmFpbHVyZTogU0VSVkZBSUwiCittc2dzdHIgIs6Rz4DOv8+Ez4XPh86vzrEgRE5TOiBTRVJWRkFJTCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzEKK21zZ2lkICJETlMgZmFpbHVyZTogTlhET01BSU4iCittc2dzdHIgIs6Rz4DOv8+Ez4XPh86vzrEgRE5TOiBOWERPTUFJTiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzIKK21zZ2lkICJETlMgZmFpbHVyZTogTk9USU1QIgorbXNnc3RyICLOkc+Azr/PhM+Fz4fOr86xIEROUzogTk9USU1QIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3NAorbXNnaWQgIkROUyBmYWlsdXJlOiBSRUZVU0VEIgorbXNnc3RyICLOkc+Azr/PhM+Fz4fOr86xIEROUzogUkVGVVNFRCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzUKK21zZ2lkICJETlMgZmFpbHVyZTogWVhET01BSU4iCittc2dzdHIgIs6Rz4DOv8+Ez4XPh86vzrEgRE5TOiBZWERPTUFJTiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzYKK21zZ2lkICJETlMgZmFpbHVyZTogWVhSUlNFVCIKK21zZ3N0ciAizpHPgM6/z4TPhc+Hzq/OsSBETlM6IFlYUlJTRVQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc3Cittc2dpZCAiRE5TIGZhaWx1cmU6IE5YUlJTRVQiCittc2dzdHIgIs6Rz4DOv8+Ez4XPh86vzrEgRE5TOiBOWFJSU0VUIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3OAorbXNnaWQgIkROUyBmYWlsdXJlOiBOT1RBVVRIIgorbXNnc3RyICLOkc+Azr/PhM+Fz4fOr86xIEROUzogTk9UQVVUSCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzkKK21zZ2lkICJETlMgZmFpbHVyZTogTk9UWk9ORSIKK21zZ3N0ciAizpHPgM6/z4TPhc+Hzq/OsSBETlM6IE5PVFpPTkUiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjgwCittc2dpZCAiSW52YWxpZCBSREFUQSIKK21zZ3N0ciAizpzOtyDOrc6zzrrPhc+Bzr8gUkRBVEEiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjgxCittc2dpZCAiSW52YWxpZCBETlMgdHlwZSIKK21zZ3N0ciAizpzOtyDOrc6zzrrPhc+Bzr/PgiDPhM+Nz4DOv8+CIEROUyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODIKK21zZ2lkICJJbnZhbGlkIEROUyBjbGFzcyIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4MworbXNnaWQgIk5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIs6UzrXOvSDPhc+Azr/Pg8+EzrfPgc6vzrbOtc+EzrHOuSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODUKK21zZ2lkICJOb3QgcGVybWl0dGVkIgorbXNnc3RyICLOlM61zr0gzrXPgM65z4TPgc6tz4DOtc+EzrHOuSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODYKK21zZ2lkICJJbnZhbGlkIGFyZ3VtZW50IgorbXNnc3RyICLOm86xzr3OuM6xz4POvM6tzr3OvyDPjM+BzrnPg868zrEgIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4NworbXNnaWQgIklzIGVtcHR5IgorbXNnc3RyICLOlc6vzr3Osc65IM66zrXOvc+MIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4OAorbXNnaWQgIlRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uIGlzIGludmFsaWQgYmVjYXVzZSByZWR1bmRhbnQiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6OTQKK21zZ2lkICJJbnZhbGlkIEVycm9yIENvZGUiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktZGlzY292ZXItc3RhbmRhbG9uZS9hdmFoaS1kaXNjb3Zlci51aS5oOjEKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weTo3NgorbXNnaWQgIjxpPk5vIHNlcnZpY2UgY3VycmVudGx5IHNlbGVjdGVkLjwvaT4iCittc2dzdHIgIjxpPs6UzrXOvSDOtc+AzrnOu86tz4fOuM63zrrOtSDPhc+AzrfPgc61z4POr86xLjwvaT4iCisKKyM6IC4uL2F2YWhpLWRpc2NvdmVyLXN0YW5kYWxvbmUvYXZhaGktZGlzY292ZXIudWkuaDoyCittc2dpZCAiQXZhaGkgRGlzY292ZXJ5IgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5kZXNrdG9wLmluLmluLmg6MQorbXNnaWQgIkF2YWhpIFplcm9jb25mIEJyb3dzZXIiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLmRlc2t0b3AuaW4uaW4uaDoyCittc2dpZCAiQnJvd3NlIGZvciBaZXJvY29uZiBzZXJ2aWNlcyBhdmFpbGFibGUgb24geW91ciBuZXR3b3JrIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMjQKK21zZ2lkICJUWFQiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIyNgorbXNnaWQgIlRYVCBEYXRhOiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI2CisjLCBmdXp6eQorbXNnaWQgImVtcHR5IgorbXNnc3RyICLOlc6vzr3Osc65IM66zrXOvc+MIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI4CisjLCBmdXp6eQorbXNnaWQgIlNlcnZpY2UgVHlwZToiCittc2dzdHIgIs6czrcgzq3Os866z4XPgc6/z4Igz4TPjc+Azr/PgiDPhc+AzrfPgc61z4POr86xz4IiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMjkKKyMsIGZ1enp5Cittc2dpZCAiU2VydmljZSBOYW1lOiIKK21zZ3N0ciAizozOvc6/zrzOsSDOpc+AzrfPgc61z4POr86xz4IiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMzAKK21zZ2lkICJEb21haW4gTmFtZToiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIzMQorbXNnaWQgIkludGVyZmFjZToiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIzMgorIywgZnV6enkKK21zZ2lkICJBZGRyZXNzOiIKK21zZ3N0ciAizpTOuc61z43OuM+Fzr3Pg863IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE4NQorbXNnaWQgIkJyb3dzZSBTZXJ2aWNlIFR5cGVzIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTg1Cittc2dpZCAiQSBOVUxMIHRlcm1pbmF0ZWQgbGlzdCBvZiBzZXJ2aWNlIHR5cGVzIHRvIGJyb3dzZSBmb3IiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxOTAKK21zZ2lkICJEb21haW4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxOTAKK21zZ2lkICJUaGUgZG9tYWluIHRvIGJyb3dzZSBpbiwgb3IgTlVMTCBmb3IgdGhlIGRlZmF1bHQgZG9tYWluIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTk2CisjLCBmdXp6eQorbXNnaWQgIlNlcnZpY2UgVHlwZSIKK21zZ3N0ciAizpzOtyDOrc6zzrrPhc+Bzr/PgiDPhM+Nz4DOv8+CIM+Fz4DOt8+BzrXPg86vzrHPgiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxOTYKK21zZ2lkICJUaGUgc2VydmljZSB0eXBlIG9mIHRoZSBzZWxlY3RlZCBzZXJ2aWNlIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjAyIC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTAyMworbXNnaWQgIlNlcnZpY2UgTmFtZSIKK21zZ3N0ciAizozOvc6/zrzOsSDOpc+AzrfPgc61z4POr86xz4IiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjAyCittc2dpZCAiVGhlIHNlcnZpY2UgbmFtZSBvZiB0aGUgc2VsZWN0ZWQgc2VydmljZSIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIwOAorbXNnaWQgIkFkZHJlc3MiCittc2dzdHIgIs6UzrnOtc+NzrjPhc69z4POtyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMDgKK21zZ2lkICJUaGUgYWRkcmVzcyBvZiB0aGUgcmVzb2x2ZWQgc2VydmljZSIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIxMworbXNnaWQgIlBvcnQiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMTMKK21zZ2lkICJUaGUgSVAgcG9ydCBudW1iZXIgb2YgdGhlIHJlc29sdmVkIHNlcnZpY2UiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMTkKKyMsIGZ1enp5Cittc2dpZCAiSG9zdCBOYW1lIgorbXNnc3RyICLOjM69zr/OvM6xIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIxOQorbXNnaWQgIlRoZSBob3N0IG5hbWUgb2YgdGhlIHJlc29sdmVkIHNlcnZpY2UiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMjUKK21zZ2lkICJUWFQgRGF0YSIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIyNQorbXNnaWQgIlRoZSBUWFQgZGF0YSBvZiB0aGUgcmVzb2x2ZWQgc2VydmljZSIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIzMAorIywgZnV6enkKK21zZ2lkICJSZXNvbHZlIFNlcnZpY2UiCittc2dzdHIgIs6czrcgzq3Os866z4XPgc6/IM+Mzr3Ov868zrEgz4XPgM63z4HOtc+Dzq/Osc+CIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIzMAorbXNnaWQgIlJlc29sdmUgdGhlIHNlbGVjdGVkIHNlcnZpY2UgYXV0b21hdGljYWxseSBiZWZvcmUgcmV0dXJuaW5nIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjM2CisjLCBmdXp6eQorbXNnaWQgIlJlc29sdmUgU2VydmljZSBIb3N0IE5hbWUiCittc2dzdHIgIs6czrcgzq3Os866z4XPgc6/IM+Mzr3Ov868zrEgz4XPgM63z4HOtc+Dzq/Osc+CIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIzNgorbXNnaWQgIiIKKyJSZXNvbHZlIHRoZSBob3N0IG5hbWUgb2YgdGhlIHNlbGVjdGVkIHNlcnZpY2UgYXV0b21hdGljYWxseSBiZWZvcmUgcmV0dXJuaW5nIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjQyCittc2dpZCAiQWRkcmVzcyBmYW1pbHkiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyNDIKK21zZ2lkICJUaGUgYWRkcmVzcyBmYW1pbHkgZm9yIGhvc3QgbmFtZSByZXNvbHV0aW9uIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MzI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWhpIGNsaWVudCBmYWlsdXJlOiAlcyIKK21zZ3N0ciAizpHPgM6/z4TPhc+Hzq/OsSBBdmFoaSBjbGllbnQ6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjM4OAorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFoaSByZXNvbHZlciBmYWlsdXJlOiAlcyIKK21zZ3N0ciAizpHPgM6/z4TPhc+Hzq/OsSBBdmFoaSByZXNvbHZlcjogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyb3dzaW5nIGZvciBzZXJ2aWNlIHR5cGUgJXMgaW4gZG9tYWluICVzIGZhaWxlZDogJXMiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo1MTkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTY4CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoxNjkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTc4CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoxNzkKK21zZ2lkICJuL2EiCittc2dzdHIgIs68zrcgzrTOuc6xzrjOrc+DzrnOvM6/IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjY0OQorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFoaSBkb21haW4gYnJvd3NlciBmYWlsdXJlOiAlcyIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjY4NAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVhZCBBdmFoaSBkb21haW46ICVzIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NzA2Cittc2dpZCAiQnJvd3NlIHNlcnZpY2UgdHlwZSBsaXN0IGlzIGVtcHR5ISIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjcxNworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY29ubmVjdCB0byBBdmFoaSBzZXJ2ZXI6ICVzIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NzM1Cittc2dpZCAiQnJvd3NpbmcgZm9yIHNlcnZpY2VzIG9uIDxiPmxvY2FsIG5ldHdvcms8L2I+OiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjczNworIywgYy1mb3JtYXQKK21zZ2lkICJCcm93c2luZyBmb3Igc2VydmljZXMgaW4gZG9tYWluIDxiPiVzPC9iPjoiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo3NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBicm93c2VyIGZvciAlczogJXMiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo5MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSByZXNvbHZlciBmb3IgJXMgb2YgdHlwZSAlcyBpbiBkb21haW4gJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6OTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgZG9tYWluIGJyb3dzZXI6ICVzIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6OTg5Cittc2dpZCAiQ2hhbmdlIGRvbWFpbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjEwMzEgLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTYyCittc2dpZCAiQnJvd3NpbmcuLi4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTIwCittc2dpZCAiSW5pdGlhbGl6aW5nLi4uIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTE0NAorIywgZnV6enkKK21zZ2lkICJMb2NhdGlvbiIKK21zZ3N0ciAizqDOtc+BzrnOv8+Hzq4iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTE0OSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NTMKK21zZ2lkICJOYW1lIgorbXNnc3RyICLOjM69zr/OvM6xIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNTQgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTUzCittc2dpZCAiVHlwZSIKK21zZ3N0ciAizqTPjc+Azr/PgiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTY2Cittc2dpZCAiX0RvbWFpbi4uLiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFtvcHRpb25zXVxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtcyAtLXNzaCAgICAgICAgICAgICBCcm93c2UgU1NIIHNlcnZlcnNcbiIKKyIgICAgLXYgLS12bmMgICAgICAgICAgICAgQnJvd3NlIFZOQyBzZXJ2ZXJzXG4iCisiICAgIC1TIC0tc2hlbGwgICAgICAgICAgIEJyb3dzZSBib3RoIFNTSCBhbmQgVk5DXG4iCisiICAgIC1kIC0tZG9tYWluPURPTUFJTiAgIFRoZSBkb21haW4gdG8gYnJvd3NlIGluXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjEwMSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo3NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG9vIG1hbnkgYXJndW1lbnRzXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE0OQorbXNnaWQgIkNob29zZSBTaGVsbCBTZXJ2ZXIiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE1MQorIywgZnV6enkKK21zZ2lkICJEZXNrdG9wIgorbXNnc3RyICLOlc+AzrnPhs6szr3Otc65zrEgzrXPgc6zzrHPg86vzrHPgiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE1MgorbXNnaWQgIlRlcm1pbmFsIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNTYKK21zZ2lkICJDaG9vc2UgVk5DIHNlcnZlciIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTYxCittc2dpZCAiQ2hvb3NlIFNTSCBzZXJ2ZXIiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE4NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb25uZWN0aW5nIHRvICclcycgLi4uXG4iCittc2dzdHIgIs6jz43Ovc60zrXPg863IM68zrUgz4TOvyAnJXMnIC4uLlxuIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MjQwCisjLCBjLWZvcm1hdAorbXNnaWQgImV4ZWNscCgpIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbmNlbGVkLlxuIgorbXNnc3RyICLOkc66z4XPgc+OzrjOt866zrUuXG4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guZGVza3RvcC5pbi5pbi5oOjEKK21zZ2lkICJBdmFoaSBTU0ggU2VydmVyIEJyb3dzZXIiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5kZXNrdG9wLmluLmluLmg6MgorbXNnaWQgIkJyb3dzZSBmb3IgWmVyb2NvbmYtZW5hYmxlZCBTU0ggU2VydmVycyIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9idm5jLmRlc2t0b3AuaW4uaW4uaDoxCittc2dpZCAiQXZhaGkgVk5DIFNlcnZlciBCcm93c2VyIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2J2bmMuZGVza3RvcC5pbi5pbi5oOjIKK21zZ2lkICJCcm93c2UgZm9yIFplcm9jb25mLWVuYWJsZWQgVk5DIFNlcnZlcnMiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIjogQWxsIGZvciBub3dcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoxMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiOiBDYWNoZSBleGhhdXN0ZWRcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoyMzkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIHNlcnZpY2UgJyVzJyBvZiB0eXBlICclcycgaW4gZG9tYWluICclcyc6ICVzXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MzQwCisjLCBjLWZvcm1hdAorbXNnaWQgInNlcnZpY2VfYnJvd3NlciBmYWlsZWQ6ICVzXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6Mzc4CisjLCBjLWZvcm1hdAorbXNnaWQgImF2YWhpX3NlcnZpY2VfYnJvd3Nlcl9uZXcoKSBmYWlsZWQ6ICVzXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgInNlcnZpY2VfdHlwZV9icm93c2VyIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo0NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXZhaGlfc2VydmljZV90eXBlX2Jyb3dzZXJfbmV3KCkgZmFpbGVkOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjUxOQorIywgYy1mb3JtYXQKK21zZ2lkICJhdmFoaV9kb21haW5fYnJvd3Nlcl9uZXcoKSBmYWlsZWQ6ICVzXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTM1IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozOTQKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyODAgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE2OAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcXVlcnkgdmVyc2lvbiBzdHJpbmc6ICVzXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTQwIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozOTkKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyODUgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE3MworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcXVlcnkgaG9zdCBuYW1lOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU0NCAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6NDAzCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6Mjg5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VydmVyIHZlcnNpb246ICVzOyBIb3N0IG5hbWU6ICVzXG4iCittc2dzdHIgIiIKKworIy4gVHJhbnNsYXRvcnM6IFRoaXMgaXMgYSBjb2x1bW4gaGVhZGluZyB3aXRoIGFiYnJldmlhdGlvbnMgZm9yCisjLiAqICAgRXZlbnQgKCsvLSksIE5ldHdvcmsgSW50ZXJmYWNlLCBQcm90b2NvbCAoSVB2NC92NiksIERvbWFpbgorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUgSWZjZSBQcm90IERvbWFpblxuIgorbXNnc3RyICIiCisKKyMuIFRyYW5zbGF0b3JzOiBUaGlzIGlzIGEgY29sdW1uIGhlYWRpbmcgd2l0aCBhYmJyZXZpYXRpb25zIGZvcgorIy4gKiAgIEV2ZW50ICgrLy0pLCBOZXR3b3JrIEludGVyZmFjZSwgUHJvdG9jb2wgKElQdjQvdjYpLCBEb21haW4KKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU1MworIywgYy1mb3JtYXQKK21zZ2lkICJFIElmY2UgUHJvdCAlLSpzICUtMjBzIERvbWFpblxuIgorbXNnc3RyICIiCisKKyMuIFdlIGhhdmUgYmVlbiBkaXNjb25uZWN0ZWQsIHNvIGxldCByZWNvbm5lY3QKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU4NSAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkRpc2Nvbm5lY3RlZCwgcmVjb25uZWN0aW5nIC4uLlxuIgorbXNnc3RyICLOkc+Azr/Pg8+Nzr3OtM61z4POtywgzrPOr869zrXPhM6xzrkgzrXPgM6xzr3Osc+Dz43Ovc60zrXPg863IC4uLlxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1OTkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6ODI5CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTcwIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozODYKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyNzIgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE2MAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGNsaWVudCBvYmplY3Q6ICVzXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NjA0IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxNzUKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoxNDMgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNsaWVudCBmYWlsdXJlLCBleGl0aW5nOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjYyMyAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIldhaXRpbmcgZm9yIGRhZW1vbiAuLi5cbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo2NDcKK21zZ2lkICIiCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFNob3cgdmVyc2lvblxuIgorIiAgICAtRCAtLWJyb3dzZS1kb21haW5zICBCcm93c2UgZm9yIGJyb3dzaW5nIGRvbWFpbnMgaW5zdGVhZCBvZiBzZXJ2aWNlc1xuIgorIiAgICAtYSAtLWFsbCAgICAgICAgICAgICBTaG93IGFsbCBzZXJ2aWNlcywgcmVnYXJkbGVzcyBvZiB0aGUgdHlwZVxuIgorIiAgICAtZCAtLWRvbWFpbj1ET01BSU4gICBUaGUgZG9tYWluIHRvIGJyb3dzZSBpblxuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBFbmFibGUgdmVyYm9zZSBtb2RlXG4iCisiICAgIC10IC0tdGVybWluYXRlICAgICAgIFRlcm1pbmF0ZSBhZnRlciBkdW1waW5nIGEgbW9yZSBvciBsZXNzIGNvbXBsZXRlICIKKyJsaXN0XG4iCisiICAgIC1jIC0tY2FjaGUgICAgICAgICAgIFRlcm1pbmF0ZSBhZnRlciBkdW1waW5nIGFsbCBlbnRyaWVzIGZyb20gdGhlIGNhY2hlXG4iCisiICAgIC1sIC0taWdub3JlLWxvY2FsICAgIElnbm9yZSBsb2NhbCBzZXJ2aWNlc1xuIgorIiAgICAtciAtLXJlc29sdmUgICAgICAgICBSZXNvbHZlIHNlcnZpY2VzIGZvdW5kXG4iCisiICAgIC1mIC0tbm8tZmFpbCAgICAgICAgIERvbid0IGZhaWwgaWYgdGhlIGRhZW1vbiBpcyBub3QgYXZhaWxhYmxlXG4iCisiICAgIC1wIC0tcGFyc2FibGUgICAgICAgIE91dHB1dCBpbiBwYXJzYWJsZSBmb3JtYXRcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo2NjAKK21zZ2lkICIiCisiICAgIC1rIC0tbm8tZGItbG9va3VwICAgIERvbid0IGxvb2t1cCBzZXJ2aWNlIHR5cGVzXG4iCisiICAgIC1iIC0tZHVtcC1kYiAgICAgICAgIER1bXAgc2VydmljZSB0eXBlIGRhdGFiYXNlXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NzY2IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG9vIGZldyBhcmd1bWVudHNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo4MjEgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjM3OAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI2NCAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgc2ltcGxlIHBvbGwgb2JqZWN0LlxuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo3NgorIywgYy1mb3JtYXQKK21zZ2lkICJFc3RhYmxpc2hlZCB1bmRlciBuYW1lICclcydcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyOiAlc1xuIgorbXNnc3RyICLOkc+Azr/PhM+Fz4fOr86xIM61zrPOs8+BzrHPhs6uz4I6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICJOYW1lIGNvbGxpc2lvbiwgcGlja2luZyBuZXcgbmFtZSAnJXMnLlxuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBlbnRyeSBncm91cDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgYWRkcmVzczogJXNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgc2VydmljZTogJXNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgc3VidHlwZSAnJXMnOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiSG9zdCBuYW1lIGNvbmZsaWN0XG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjIxNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFtvcHRpb25zXSAlcyA8bmFtZT4gPHR5cGU+IDxwb3J0PiBbPHR4dCAuLi4+XVxuIgorIiVzIFtvcHRpb25zXSAlcyA8aG9zdC1uYW1lPiA8YWRkcmVzcz5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgU2hvdyB2ZXJzaW9uXG4iCisiICAgIC1zIC0tc2VydmljZSAgICAgICAgIFB1Ymxpc2ggc2VydmljZVxuIgorIiAgICAtYSAtLWFkZHJlc3MgICAgICAgICBQdWJsaXNoIGFkZHJlc3NcbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgRW5hYmxlIHZlcmJvc2UgbW9kZVxuIgorIiAgICAtZCAtLWRvbWFpbj1ET01BSU4gICBEb21haW4gdG8gcHVibGlzaCBzZXJ2aWNlIGluXG4iCisiICAgIC1IIC0taG9zdD1ET01BSU4gICAgIEhvc3Qgd2hlcmUgc2VydmljZSByZXNpZGVzXG4iCisiICAgICAgIC0tc3VidHlwZT1TVUJUWVBFIEFuIGFkZGl0aW9uYWwgc3VidHlwZSB0byByZWdpc3RlciB0aGlzIHNlcnZpY2UgIgorIndpdGhcbiIKKyIgICAgLVIgLS1uby1yZXZlcnNlICAgICAgRG8gbm90IHB1Ymxpc2ggcmV2ZXJzZSBlbnRyeSB3aXRoIGFkZHJlc3NcbiIKKyIgICAgLWYgLS1uby1mYWlsICAgICAgICAgRG9uJ3QgZmFpbCBpZiB0aGUgZGFlbW9uIGlzIG5vdCBhdmFpbGFibGVcbiIKK21zZ3N0ciAiIgorIiVzIFtvcHRpb25zXSAlcyA8bmFtZT4gPHR5cGU+IDxwb3J0PiBbPHR4dCAuLi4+XVxuIgorIiVzIFtvcHRpb25zXSAlcyA8aG9zdC1uYW1lPiA8YWRkcmVzcz5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgzpXOvM+GzqzOvc65z4POtyDOss6/zq7OuM61zrnOsc+CXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIM6VzrzPhs6szr3Ouc+Dzrcgzq3Ous60zr/Pg863z4JcbiIKKyIgICAgLXMgLS1zZXJ2aWNlICAgICAgICAgzpTOt868zr/Pg86vzrXPhc+Dzrcgz4XPgM63z4HOtc+Dzq/Osc+CXG4iCisiICAgIC1hIC0tYWRkcmVzcyAgICAgICAgIM6UzrfOvM6/z4POr861z4XPg863IM60zrnOtc+NzrjPhc69z4POt8+CXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIM6Vzr3Otc+BzrPOv8+Azr/Or863z4POtyB2ZXJib3NlIG1vZGVcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgRG9tYWluIM6zzrnOsSDPhM63IM60zrfOvM6/z4POr861z4XPg863IM+Fz4DOt8+BzrXPg86vzrHPglxuIgorIiAgICAtSCAtLWhvc3Q9RE9NQUlOICAgICBIb3N0IM+Mz4DOv8+FIM+Fz4DOrM+Bz4fOtc65IM63IM+Fz4DOt8+BzrXPg86vzrFcbiIKKyIgICAgICAgLS1zdWJ0eXBlPVNVQlRZUEUgzojOvc6xz4IgzrXPgM65z4DOu86tzr/OvSDPhM+Nz4DOv8+CIM6zzrnOsSDOus6xz4TOsc+Hz47Pgc63z4POtyDPhM63z4Igz4XPgM63z4HOtc+Dzq/Osc+CXG4iCisiICAgIC1mIC0tbm8tZmFpbCAgICAgICAgIM6dzrEgzrzOtyDOs86vzr3Otc65IM6xz4DOv8+Ez4XPh86vzrEgzrHOvSDOsc+Fz4TOriDOtyDPhc+AzrfPgc61z4POr86xIM+Dz4XPg8+Ezq7OvM6xz4TOv8+CICIKKyLOtM61zr0gzrXOr869zrHOuSDOtM65zrHOuM6tz4POuc68zrdcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjMwMyAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MzE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBudW1iZXIgb2YgYXJndW1lbnRzXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjMyOQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcGFyc2UgcG9ydCBudW1iZXI6ICVzXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjM2MSAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGNvbW1hbmQgc3BlY2lmaWVkLlxuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzo4OQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSBob3N0IG5hbWUgJyVzJzogJXNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIGFkZHJlc3MgJyVzJzogJXNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBbb3B0aW9uc10gJXMgPGhvc3QgbmFtZSAuLi4+XG4iCisiJXMgW29wdGlvbnNdICVzIDxhZGRyZXNzIC4uLiA+XG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFNob3cgdmVyc2lvblxuIgorIiAgICAtbiAtLW5hbWUgICAgICAgICAgICBSZXNvbHZlIGhvc3QgbmFtZVxuIgorIiAgICAtYSAtLWFkZHJlc3MgICAgICAgICBSZXNvbHZlIGFkZHJlc3NcbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgRW5hYmxlIHZlcmJvc2UgbW9kZVxuIgorIiAgICAtNiAgICAgICAgICAgICAgICAgICBMb29rdXAgSVB2NiBhZGRyZXNzXG4iCisiICAgIC00ICAgICAgICAgICAgICAgICAgIExvb2t1cCBJUHY0IGFkZHJlc3NcbiIKK21zZ3N0ciAiIgorIiVzIFvOtc+AzrnOu86/zrPOrc+CXSAlcyA8aG9zdCBuYW1lIC4uLj5cbiIKKyIlcyBbzrXPgM65zrvOv86zzq3Pgl0gJXMgPM60zrnOtc+NzrjPhc69z4POtyAuLi4gPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICDOlc68z4bOrM69zrnPg863IM6yzr/Ors64zrXOuc6xz4JcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgzpXOvM+GzqzOvc65z4POtyDOrc66zrTOv8+DzrfPglxuIgorIiAgICAtbiAtLW5hbWUgICAgICAgICAgICDOnM61z4TOrM+Gz4HOsc+DzrcgaG9zdCBuYW1lXG4iCisiICAgIC1hIC0tYWRkcmVzcyAgICAgICAgIM6czrXPhM6sz4bPgc6xz4POtyDOtM65zrXPjc64z4XOvc+DzrfPglxuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICDOlc69zrXPgc6zzr/PgM6/zq/Ot8+DzrcgdmVyYm9zZSBtb2RlXG4iCisiICAgIC02ICAgICAgICAgICAgICAgICAgIM6Rzr3Osc62zq7PhM63z4POtyDOtM65zrXPjc64z4XOvc+DzrfPgiBJUHY2XG4iCisiICAgIC00ICAgICAgICAgICAgICAgICAgIM6Rzr3Osc62zq7PhM63z4POtyDOtM65zrXPjc64z4XOvc+DzrfPgiBJUHY0XG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyOTkgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE4MQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGhvc3QgbmFtZSByZXNvbHZlcjogJXNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBhZGRyZXNzICclcydcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MzE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgYWRkcmVzcyByZXNvbHZlcjogJXNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFtvcHRpb25zXSA8bmV3IGhvc3QgbmFtZT5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgU2hvdyB2ZXJzaW9uXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKK21zZ3N0ciAiIgorIiVzIFvOtc+AzrnOu86/zrPOrc+CXSA8zr3Orc6/IGhvc3QgbmFtZT5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgzpXOvM+GzqzOvc65z4POtyDOss6/zq7OuM61zrnOsc+CXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIM6VzrzPhs6szr3Ouc+Dzrcgzq3Ous60zr/Pg863z4JcbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgzpXOvc61z4HOs86/z4DOv86vzrfPg863IHZlcmJvc2UgbW9kZVxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cywgZXhwZWN0aW5nIGV4YWN0bHkgb25lLlxuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSG9zdCBuYW1lIHN1Y2Nlc3NmdWxseSBjaGFuZ2VkIHRvICVzXG4iCittc2dzdHIgIs6Vz4DOuc+Ez4XPh86uz4IgzrHOu867zrHOs86uIM+Ezr/PhSBob3N0IG5hbWUgz4POtSAlc1xuIgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL3BvL2VuX0FVLnBvIGIvYXZhaGktMC42LjMxL3BvL2VuX0FVLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MTAyOTIKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvcG8vZW5fQVUucG8KQEAgLTAsMCArMSw3OTcgQEAKKyMgQnJpdGlzaCBFbmdsaXNoIHRyYW5zbGF0aW9uCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBBdmFoaSBwYWNrYWdlLgorIyBUZWQgUGVyY2l2YWwgPHRlZEBtaWRnM3QubmV0PiwgMjAwOC4KKyMKKyMsIGZ1enp5Cittc2dpZCAiIgorbXNnc3RyICIiCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDExLTA0LTAyIDAzOjIzKzAyMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDA4LTAzLTMxIDE1OjI0KzEwMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IFRlZCBQZXJjaXZhbCA8dGVkQG1pZGczdC5uZXQ+XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjMwCittc2dpZCAiT0siCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzEKK21zZ2lkICJPcGVyYXRpb24gZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjMyCittc2dpZCAiQmFkIHN0YXRlIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjMzCittc2dpZCAiSW52YWxpZCBob3N0IG5hbWUiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzQKK21zZ2lkICJJbnZhbGlkIGRvbWFpbiBuYW1lIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM1Cittc2dpZCAiTm8gc3VpdGFibGUgbmV0d29yayBwcm90b2NvbCBhdmFpbGFibGUiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzYKK21zZ2lkICJJbnZhbGlkIEROUyBUVEwiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzcKK21zZ2lkICJSZXNvdXJjZSByZWNvcmQga2V5IGlzIHBhdHRlcm4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzgKK21zZ2lkICJMb2NhbCBuYW1lIGNvbGxpc2lvbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozOQorbXNnaWQgIkludmFsaWQgcmVjb3JkIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQxCittc2dpZCAiSW52YWxpZCBzZXJ2aWNlIG5hbWUiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDIKK21zZ2lkICJJbnZhbGlkIHNlcnZpY2UgdHlwZSIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0MworbXNnaWQgIkludmFsaWQgcG9ydCBudW1iZXIiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDQKK21zZ2lkICJJbnZhbGlkIHJlY29yZCBrZXkiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDUKK21zZ2lkICJJbnZhbGlkIGFkZHJlc3MiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDYKK21zZ2lkICJUaW1lb3V0IHJlYWNoZWQiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDcKK21zZ2lkICJUb28gbWFueSBjbGllbnRzIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQ4Cittc2dpZCAiVG9vIG1hbnkgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0OQorbXNnaWQgIlRvbyBtYW55IGVudHJpZXMiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTAKK21zZ2lkICJPUyBFcnJvciIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1MgorbXNnaWQgIkFjY2VzcyBkZW5pZWQiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTMKK21zZ2lkICJJbnZhbGlkIG9wZXJhdGlvbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1NAorbXNnaWQgIkFuIHVuZXhwZWN0ZWQgRC1CdXMgZXJyb3Igb2NjdXJlZCIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1NQorbXNnaWQgIkRhZW1vbiBjb25uZWN0aW9uIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1NgorbXNnaWQgIk1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTcKK21zZ2lkICJUaGUgb2JqZWN0IHBhc3NlZCBpbiB3YXMgbm90IHZhbGlkIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU4Cittc2dpZCAiRGFlbW9uIG5vdCBydW5uaW5nIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU5Cittc2dpZCAiSW52YWxpZCBpbnRlcmZhY2UgaW5kZXgiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjAKK21zZ2lkICJJbnZhbGlkIHByb3RvY29sIHNwZWNpZmljYXRpb24iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjEKK21zZ2lkICJJbnZhbGlkIGZsYWdzIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjYzCittc2dpZCAiTm90IGZvdW5kIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY0Cittc2dpZCAiSW52YWxpZCBjb25maWd1cmF0aW9uIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY1Cittc2dpZCAiVmVyc2lvbiBtaXNtYXRjaCIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2NgorbXNnaWQgIkludmFsaWQgc2VydmljZSBzdWJ0eXBlIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY3Cittc2dpZCAiSW52YWxpZCBwYWNrZXQiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjgKK21zZ2lkICJJbnZhbGlkIEROUyByZXR1cm4gY29kZSIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2OQorbXNnaWQgIkROUyBmYWlsdXJlOiBGT1JNRVJSIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjcwCittc2dpZCAiRE5TIGZhaWx1cmU6IFNFUlZGQUlMIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjcxCittc2dpZCAiRE5TIGZhaWx1cmU6IE5YRE9NQUlOIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjcyCittc2dpZCAiRE5TIGZhaWx1cmU6IE5PVElNUCIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3NAorbXNnaWQgIkROUyBmYWlsdXJlOiBSRUZVU0VEIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc1Cittc2dpZCAiRE5TIGZhaWx1cmU6IFlYRE9NQUlOIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc2Cittc2dpZCAiRE5TIGZhaWx1cmU6IFlYUlJTRVQiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzcKK21zZ2lkICJETlMgZmFpbHVyZTogTlhSUlNFVCIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3OAorbXNnaWQgIkROUyBmYWlsdXJlOiBOT1RBVVRIIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc5Cittc2dpZCAiRE5TIGZhaWx1cmU6IE5PVFpPTkUiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODAKK21zZ2lkICJJbnZhbGlkIFJEQVRBIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjgxCittc2dpZCAiSW52YWxpZCBETlMgdHlwZSIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4MgorbXNnaWQgIkludmFsaWQgRE5TIGNsYXNzIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjgzCittc2dpZCAiTm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4NQorbXNnaWQgIk5vdCBwZXJtaXR0ZWQiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODYKK21zZ2lkICJJbnZhbGlkIGFyZ3VtZW50IgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjg3Cittc2dpZCAiSXMgZW1wdHkiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODgKK21zZ2lkICJUaGUgcmVxdWVzdGVkIG9wZXJhdGlvbiBpcyBpbnZhbGlkIGJlY2F1c2UgcmVkdW5kYW50IgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjk0Cittc2dpZCAiSW52YWxpZCBFcnJvciBDb2RlIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWRpc2NvdmVyLXN0YW5kYWxvbmUvYXZhaGktZGlzY292ZXIudWkuaDoxCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6NzYKK21zZ2lkICI8aT5ObyBzZXJ2aWNlIGN1cnJlbnRseSBzZWxlY3RlZC48L2k+IgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWRpc2NvdmVyLXN0YW5kYWxvbmUvYXZhaGktZGlzY292ZXIudWkuaDoyCittc2dpZCAiQXZhaGkgRGlzY292ZXJ5IgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5kZXNrdG9wLmluLmluLmg6MQorbXNnaWQgIkF2YWhpIFplcm9jb25mIEJyb3dzZXIiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLmRlc2t0b3AuaW4uaW4uaDoyCittc2dpZCAiQnJvd3NlIGZvciBaZXJvY29uZiBzZXJ2aWNlcyBhdmFpbGFibGUgb24geW91ciBuZXR3b3JrIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMjQKK21zZ2lkICJUWFQiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIyNgorbXNnaWQgIlRYVCBEYXRhOiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI2Cittc2dpZCAiZW1wdHkiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIyOAorbXNnaWQgIlNlcnZpY2UgVHlwZToiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIyOQorbXNnaWQgIlNlcnZpY2UgTmFtZToiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIzMAorbXNnaWQgIkRvbWFpbiBOYW1lOiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjMxCittc2dpZCAiSW50ZXJmYWNlOiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjMyCittc2dpZCAiQWRkcmVzczoiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxODUKK21zZ2lkICJCcm93c2UgU2VydmljZSBUeXBlcyIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE4NQorbXNnaWQgIkEgTlVMTCB0ZXJtaW5hdGVkIGxpc3Qgb2Ygc2VydmljZSB0eXBlcyB0byBicm93c2UgZm9yIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTkwCittc2dpZCAiRG9tYWluIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTkwCittc2dpZCAiVGhlIGRvbWFpbiB0byBicm93c2UgaW4sIG9yIE5VTEwgZm9yIHRoZSBkZWZhdWx0IGRvbWFpbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE5NgorbXNnaWQgIlNlcnZpY2UgVHlwZSIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE5NgorbXNnaWQgIlRoZSBzZXJ2aWNlIHR5cGUgb2YgdGhlIHNlbGVjdGVkIHNlcnZpY2UiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMDIgLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMDIzCittc2dpZCAiU2VydmljZSBOYW1lIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjAyCittc2dpZCAiVGhlIHNlcnZpY2UgbmFtZSBvZiB0aGUgc2VsZWN0ZWQgc2VydmljZSIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIwOAorbXNnaWQgIkFkZHJlc3MiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMDgKK21zZ2lkICJUaGUgYWRkcmVzcyBvZiB0aGUgcmVzb2x2ZWQgc2VydmljZSIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIxMworbXNnaWQgIlBvcnQiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMTMKK21zZ2lkICJUaGUgSVAgcG9ydCBudW1iZXIgb2YgdGhlIHJlc29sdmVkIHNlcnZpY2UiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMTkKK21zZ2lkICJIb3N0IE5hbWUiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMTkKK21zZ2lkICJUaGUgaG9zdCBuYW1lIG9mIHRoZSByZXNvbHZlZCBzZXJ2aWNlIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjI1Cittc2dpZCAiVFhUIERhdGEiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMjUKK21zZ2lkICJUaGUgVFhUIGRhdGEgb2YgdGhlIHJlc29sdmVkIHNlcnZpY2UiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMzAKK21zZ2lkICJSZXNvbHZlIFNlcnZpY2UiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMzAKK21zZ2lkICJSZXNvbHZlIHRoZSBzZWxlY3RlZCBzZXJ2aWNlIGF1dG9tYXRpY2FsbHkgYmVmb3JlIHJldHVybmluZyIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIzNgorbXNnaWQgIlJlc29sdmUgU2VydmljZSBIb3N0IE5hbWUiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMzYKK21zZ2lkICIiCisiUmVzb2x2ZSB0aGUgaG9zdCBuYW1lIG9mIHRoZSBzZWxlY3RlZCBzZXJ2aWNlIGF1dG9tYXRpY2FsbHkgYmVmb3JlIHJldHVybmluZyIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjI0MgorbXNnaWQgIkFkZHJlc3MgZmFtaWx5IgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjQyCittc2dpZCAiVGhlIGFkZHJlc3MgZmFtaWx5IGZvciBob3N0IG5hbWUgcmVzb2x1dGlvbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjMyNgorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFoaSBjbGllbnQgZmFpbHVyZTogJXMiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzozODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaGkgcmVzb2x2ZXIgZmFpbHVyZTogJXMiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo1MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJvd3NpbmcgZm9yIHNlcnZpY2UgdHlwZSAlcyBpbiBkb21haW4gJXMgZmFpbGVkOiAlcyIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjUxOSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoxNjgKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjE2OSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoxNzgKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjE3OQorbXNnaWQgIm4vYSIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjY0OQorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFoaSBkb21haW4gYnJvd3NlciBmYWlsdXJlOiAlcyIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjY4NAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVhZCBBdmFoaSBkb21haW46ICVzIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NzA2Cittc2dpZCAiQnJvd3NlIHNlcnZpY2UgdHlwZSBsaXN0IGlzIGVtcHR5ISIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjcxNworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY29ubmVjdCB0byBBdmFoaSBzZXJ2ZXI6ICVzIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NzM1Cittc2dpZCAiQnJvd3NpbmcgZm9yIHNlcnZpY2VzIG9uIDxiPmxvY2FsIG5ldHdvcms8L2I+OiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjczNworIywgYy1mb3JtYXQKK21zZ2lkICJCcm93c2luZyBmb3Igc2VydmljZXMgaW4gZG9tYWluIDxiPiVzPC9iPjoiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo3NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBicm93c2VyIGZvciAlczogJXMiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo5MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSByZXNvbHZlciBmb3IgJXMgb2YgdHlwZSAlcyBpbiBkb21haW4gJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6OTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgZG9tYWluIGJyb3dzZXI6ICVzIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6OTg5Cittc2dpZCAiQ2hhbmdlIGRvbWFpbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjEwMzEgLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTYyCittc2dpZCAiQnJvd3NpbmcuLi4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTIwCittc2dpZCAiSW5pdGlhbGl6aW5nLi4uIgorbXNnc3RyICJJbml0aWFsaXNpbmcuLi4iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTE0NAorbXNnaWQgIkxvY2F0aW9uIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTE0OSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NTMKK21zZ2lkICJOYW1lIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTE1NCAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NTMKK21zZ2lkICJUeXBlIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTE2NgorbXNnaWQgIl9Eb21haW4uLi4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBbb3B0aW9uc11cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLXMgLS1zc2ggICAgICAgICAgICAgQnJvd3NlIFNTSCBzZXJ2ZXJzXG4iCisiICAgIC12IC0tdm5jICAgICAgICAgICAgIEJyb3dzZSBWTkMgc2VydmVyc1xuIgorIiAgICAtUyAtLXNoZWxsICAgICAgICAgICBCcm93c2UgYm90aCBTU0ggYW5kIFZOQ1xuIgorIiAgICAtZCAtLWRvbWFpbj1ET01BSU4gICBUaGUgZG9tYWluIHRvIGJyb3dzZSBpblxuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxMDEgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6Nzc1CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvbyBtYW55IGFyZ3VtZW50c1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNDkKK21zZ2lkICJDaG9vc2UgU2hlbGwgU2VydmVyIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNTEKK21zZ2lkICJEZXNrdG9wIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNTIKK21zZ2lkICJUZXJtaW5hbCIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTU2Cittc2dpZCAiQ2hvb3NlIFZOQyBzZXJ2ZXIiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE2MQorbXNnaWQgIkNob29zZSBTU0ggc2VydmVyIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29ubmVjdGluZyB0byAnJXMnIC4uLlxuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoyNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhlY2xwKCkgZmFpbGVkOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FuY2VsZWQuXG4iCittc2dzdHIgIkNhbmNlbGxlZC5cbiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5kZXNrdG9wLmluLmluLmg6MQorbXNnaWQgIkF2YWhpIFNTSCBTZXJ2ZXIgQnJvd3NlciIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmRlc2t0b3AuaW4uaW4uaDoyCittc2dpZCAiQnJvd3NlIGZvciBaZXJvY29uZi1lbmFibGVkIFNTSCBTZXJ2ZXJzIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2J2bmMuZGVza3RvcC5pbi5pbi5oOjEKK21zZ2lkICJBdmFoaSBWTkMgU2VydmVyIEJyb3dzZXIiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYnZuYy5kZXNrdG9wLmluLmluLmg6MgorbXNnaWQgIkJyb3dzZSBmb3IgWmVyb2NvbmYtZW5hYmxlZCBWTkMgU2VydmVycyIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoxMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiOiBBbGwgZm9yIG5vd1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjExOAorIywgYy1mb3JtYXQKK21zZ2lkICI6IENhY2hlIGV4aGF1c3RlZFxuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjIzOSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgc2VydmljZSAnJXMnIG9mIHR5cGUgJyVzJyBpbiBkb21haW4gJyVzJzogJXNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzozNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VydmljZV9icm93c2VyIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzozNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXZhaGlfc2VydmljZV9icm93c2VyX25ldygpIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VydmljZV90eXBlX2Jyb3dzZXIgZmFpbGVkOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjQ0NAorIywgYy1mb3JtYXQKK21zZ2lkICJhdmFoaV9zZXJ2aWNlX3R5cGVfYnJvd3Nlcl9uZXcoKSBmYWlsZWQ6ICVzXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTE5CisjLCBjLWZvcm1hdAorbXNnaWQgImF2YWhpX2RvbWFpbl9icm93c2VyX25ldygpIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1MzUgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjM5NAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI4MCAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBxdWVyeSB2ZXJzaW9uIHN0cmluZzogJXNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NDAgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjM5OQorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI4NSAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTczCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBxdWVyeSBob3N0IG5hbWU6ICVzXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTQ0IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo0MDMKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyODkgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE3NworIywgYy1mb3JtYXQKK21zZ2lkICJTZXJ2ZXIgdmVyc2lvbjogJXM7IEhvc3QgbmFtZTogJXNcbiIKK21zZ3N0ciAiIgorCisjLiBUcmFuc2xhdG9yczogVGhpcyBpcyBhIGNvbHVtbiBoZWFkaW5nIHdpdGggYWJicmV2aWF0aW9ucyBmb3IKKyMuICogICBFdmVudCAoKy8tKSwgTmV0d29yayBJbnRlcmZhY2UsIFByb3RvY29sIChJUHY0L3Y2KSwgRG9tYWluCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRSBJZmNlIFByb3QgRG9tYWluXG4iCittc2dzdHIgIiIKKworIy4gVHJhbnNsYXRvcnM6IFRoaXMgaXMgYSBjb2x1bW4gaGVhZGluZyB3aXRoIGFiYnJldmlhdGlvbnMgZm9yCisjLiAqICAgRXZlbnQgKCsvLSksIE5ldHdvcmsgSW50ZXJmYWNlLCBQcm90b2NvbCAoSVB2NC92NiksIERvbWFpbgorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUgSWZjZSBQcm90ICUtKnMgJS0yMHMgRG9tYWluXG4iCittc2dzdHIgIiIKKworIy4gV2UgaGF2ZSBiZWVuIGRpc2Nvbm5lY3RlZCwgc28gbGV0IHJlY29ubmVjdAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTg1IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGlzY29ubmVjdGVkLCByZWNvbm5lY3RpbmcgLi4uXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTk5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjgyOQorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE3MCAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6Mzg2CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjcyIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBjbGllbnQgb2JqZWN0OiAlc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjYwNCAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTc1CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MTQzIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzo1OQorIywgYy1mb3JtYXQKK21zZ2lkICJDbGllbnQgZmFpbHVyZSwgZXhpdGluZzogJXNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo2MjMgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjIwNgorIywgYy1mb3JtYXQKK21zZ2lkICJXYWl0aW5nIGZvciBkYWVtb24gLi4uXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NjQ3Cittc2dpZCAiIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLUQgLS1icm93c2UtZG9tYWlucyAgQnJvd3NlIGZvciBicm93c2luZyBkb21haW5zIGluc3RlYWQgb2Ygc2VydmljZXNcbiIKKyIgICAgLWEgLS1hbGwgICAgICAgICAgICAgU2hvdyBhbGwgc2VydmljZXMsIHJlZ2FyZGxlc3Mgb2YgdGhlIHR5cGVcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgVGhlIGRvbWFpbiB0byBicm93c2UgaW5cbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgRW5hYmxlIHZlcmJvc2UgbW9kZVxuIgorIiAgICAtdCAtLXRlcm1pbmF0ZSAgICAgICBUZXJtaW5hdGUgYWZ0ZXIgZHVtcGluZyBhIG1vcmUgb3IgbGVzcyBjb21wbGV0ZSAiCisibGlzdFxuIgorIiAgICAtYyAtLWNhY2hlICAgICAgICAgICBUZXJtaW5hdGUgYWZ0ZXIgZHVtcGluZyBhbGwgZW50cmllcyBmcm9tIHRoZSBjYWNoZVxuIgorIiAgICAtbCAtLWlnbm9yZS1sb2NhbCAgICBJZ25vcmUgbG9jYWwgc2VydmljZXNcbiIKKyIgICAgLXIgLS1yZXNvbHZlICAgICAgICAgUmVzb2x2ZSBzZXJ2aWNlcyBmb3VuZFxuIgorIiAgICAtZiAtLW5vLWZhaWwgICAgICAgICBEb24ndCBmYWlsIGlmIHRoZSBkYWVtb24gaXMgbm90IGF2YWlsYWJsZVxuIgorIiAgICAtcCAtLXBhcnNhYmxlICAgICAgICBPdXRwdXQgaW4gcGFyc2FibGUgZm9ybWF0XG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NjYwCittc2dpZCAiIgorIiAgICAtayAtLW5vLWRiLWxvb2t1cCAgICBEb24ndCBsb29rdXAgc2VydmljZSB0eXBlc1xuIgorIiAgICAtYiAtLWR1bXAtZGIgICAgICAgICBEdW1wIHNlcnZpY2UgdHlwZSBkYXRhYmFzZVxuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjc2NiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvbyBmZXcgYXJndW1lbnRzXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6ODIxIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozNzgKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyNjQgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIHNpbXBsZSBwb2xsIG9iamVjdC5cbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXN0YWJsaXNoZWQgdW5kZXIgbmFtZSAnJXMnXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlcjogJXNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTmFtZSBjb2xsaXNpb24sIHBpY2tpbmcgbmV3IG5hbWUgJyVzJy5cbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgZW50cnkgZ3JvdXA6ICVzXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjEyNAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gYWRkIGFkZHJlc3M6ICVzXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gYWRkIHNlcnZpY2U6ICVzXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE0MAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gYWRkIHN1YnR5cGUgJyVzJzogJXNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkhvc3QgbmFtZSBjb25mbGljdFxuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFtvcHRpb25zXSAlcyA8bmFtZT4gPHR5cGU+IDxwb3J0PiBbPHR4dCAuLi4+XVxuIgorIiVzIFtvcHRpb25zXSAlcyA8aG9zdC1uYW1lPiA8YWRkcmVzcz5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgU2hvdyB2ZXJzaW9uXG4iCisiICAgIC1zIC0tc2VydmljZSAgICAgICAgIFB1Ymxpc2ggc2VydmljZVxuIgorIiAgICAtYSAtLWFkZHJlc3MgICAgICAgICBQdWJsaXNoIGFkZHJlc3NcbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgRW5hYmxlIHZlcmJvc2UgbW9kZVxuIgorIiAgICAtZCAtLWRvbWFpbj1ET01BSU4gICBEb21haW4gdG8gcHVibGlzaCBzZXJ2aWNlIGluXG4iCisiICAgIC1IIC0taG9zdD1ET01BSU4gICAgIEhvc3Qgd2hlcmUgc2VydmljZSByZXNpZGVzXG4iCisiICAgICAgIC0tc3VidHlwZT1TVUJUWVBFIEFuIGFkZGl0aW9uYWwgc3VidHlwZSB0byByZWdpc3RlciB0aGlzIHNlcnZpY2UgIgorIndpdGhcbiIKKyIgICAgLVIgLS1uby1yZXZlcnNlICAgICAgRG8gbm90IHB1Ymxpc2ggcmV2ZXJzZSBlbnRyeSB3aXRoIGFkZHJlc3NcbiIKKyIgICAgLWYgLS1uby1mYWlsICAgICAgICAgRG9uJ3QgZmFpbCBpZiB0aGUgZGFlbW9uIGlzIG5vdCBhdmFpbGFibGVcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MzAzIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIG51bWJlciBvZiBhcmd1bWVudHNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBwb3J0IG51bWJlcjogJXNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MzYxIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gY29tbWFuZCBzcGVjaWZpZWQuXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIGhvc3QgbmFtZSAnJXMnOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoxMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgYWRkcmVzcyAnJXMnOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoxNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFtvcHRpb25zXSAlcyA8aG9zdCBuYW1lIC4uLj5cbiIKKyIlcyBbb3B0aW9uc10gJXMgPGFkZHJlc3MgLi4uID5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgU2hvdyB2ZXJzaW9uXG4iCisiICAgIC1uIC0tbmFtZSAgICAgICAgICAgIFJlc29sdmUgaG9zdCBuYW1lXG4iCisiICAgIC1hIC0tYWRkcmVzcyAgICAgICAgIFJlc29sdmUgYWRkcmVzc1xuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBFbmFibGUgdmVyYm9zZSBtb2RlXG4iCisiICAgIC02ICAgICAgICAgICAgICAgICAgIExvb2t1cCBJUHY2IGFkZHJlc3NcbiIKKyIgICAgLTQgICAgICAgICAgICAgICAgICAgTG9va3VwIElQdjQgYWRkcmVzc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyOTkgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE4MQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGhvc3QgbmFtZSByZXNvbHZlcjogJXNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBhZGRyZXNzICclcydcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MzE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgYWRkcmVzcyByZXNvbHZlcjogJXNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFtvcHRpb25zXSA8bmV3IGhvc3QgbmFtZT5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgU2hvdyB2ZXJzaW9uXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cywgZXhwZWN0aW5nIGV4YWN0bHkgb25lLlxuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSG9zdCBuYW1lIHN1Y2Nlc3NmdWxseSBjaGFuZ2VkIHRvICVzXG4iCittc2dzdHIgIiIKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9wby9lbl9DQS5wbyBiL2F2YWhpLTAuNi4zMS9wby9lbl9DQS5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDcwODUyCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL3BvL2VuX0NBLnBvCkBAIC0wLDAgKzEsNzk3IEBACisjIENhbmFkaWFuIEVuZ2xpc2ggdHJhbnNsYXRpb24KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIEF2YWhpIHBhY2thZ2UuCisjIFRlZCBQZXJjaXZhbCA8dGVkQG1pZGczdC5uZXQ+LCAyMDA4LgorIworIywgZnV6enkKK21zZ2lkICIiCittc2dzdHIgIiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTEtMDQtMDIgMDM6MjMrMDIwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDgtMDMtMzEgMTU6MjQrMTAwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogVGVkIFBlcmNpdmFsIDx0ZWRAbWlkZzN0Lm5ldD5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzAKK21zZ2lkICJPSyIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozMQorbXNnaWQgIk9wZXJhdGlvbiBmYWlsZWQiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzIKK21zZ2lkICJCYWQgc3RhdGUiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzMKK21zZ2lkICJJbnZhbGlkIGhvc3QgbmFtZSIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozNAorbXNnaWQgIkludmFsaWQgZG9tYWluIG5hbWUiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzUKK21zZ2lkICJObyBzdWl0YWJsZSBuZXR3b3JrIHByb3RvY29sIGF2YWlsYWJsZSIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozNgorbXNnaWQgIkludmFsaWQgRE5TIFRUTCIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozNworbXNnaWQgIlJlc291cmNlIHJlY29yZCBrZXkgaXMgcGF0dGVybiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozOAorbXNnaWQgIkxvY2FsIG5hbWUgY29sbGlzaW9uIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM5Cittc2dpZCAiSW52YWxpZCByZWNvcmQiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDEKK21zZ2lkICJJbnZhbGlkIHNlcnZpY2UgbmFtZSIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0MgorbXNnaWQgIkludmFsaWQgc2VydmljZSB0eXBlIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQzCittc2dpZCAiSW52YWxpZCBwb3J0IG51bWJlciIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NAorbXNnaWQgIkludmFsaWQgcmVjb3JkIGtleSIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NQorbXNnaWQgIkludmFsaWQgYWRkcmVzcyIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NgorbXNnaWQgIlRpbWVvdXQgcmVhY2hlZCIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NworbXNnaWQgIlRvbyBtYW55IGNsaWVudHMiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDgKK21zZ2lkICJUb28gbWFueSBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQ5Cittc2dpZCAiVG9vIG1hbnkgZW50cmllcyIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1MAorbXNnaWQgIk9TIEVycm9yIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjUyCittc2dpZCAiQWNjZXNzIGRlbmllZCIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1MworbXNnaWQgIkludmFsaWQgb3BlcmF0aW9uIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU0Cittc2dpZCAiQW4gdW5leHBlY3RlZCBELUJ1cyBlcnJvciBvY2N1cmVkIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU1Cittc2dpZCAiRGFlbW9uIGNvbm5lY3Rpb24gZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU2Cittc2dpZCAiTWVtb3J5IGV4aGF1c3RlZCIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1NworbXNnaWQgIlRoZSBvYmplY3QgcGFzc2VkIGluIHdhcyBub3QgdmFsaWQiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTgKK21zZ2lkICJEYWVtb24gbm90IHJ1bm5pbmciCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTkKK21zZ2lkICJJbnZhbGlkIGludGVyZmFjZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2MAorbXNnaWQgIkludmFsaWQgcHJvdG9jb2wgc3BlY2lmaWNhdGlvbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2MQorbXNnaWQgIkludmFsaWQgZmxhZ3MiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjMKK21zZ2lkICJOb3QgZm91bmQiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjQKK21zZ2lkICJJbnZhbGlkIGNvbmZpZ3VyYXRpb24iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjUKK21zZ2lkICJWZXJzaW9uIG1pc21hdGNoIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY2Cittc2dpZCAiSW52YWxpZCBzZXJ2aWNlIHN1YnR5cGUiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjcKK21zZ2lkICJJbnZhbGlkIHBhY2tldCIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2OAorbXNnaWQgIkludmFsaWQgRE5TIHJldHVybiBjb2RlIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY5Cittc2dpZCAiRE5TIGZhaWx1cmU6IEZPUk1FUlIiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzAKK21zZ2lkICJETlMgZmFpbHVyZTogU0VSVkZBSUwiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzEKK21zZ2lkICJETlMgZmFpbHVyZTogTlhET01BSU4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzIKK21zZ2lkICJETlMgZmFpbHVyZTogTk9USU1QIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc0Cittc2dpZCAiRE5TIGZhaWx1cmU6IFJFRlVTRUQiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzUKK21zZ2lkICJETlMgZmFpbHVyZTogWVhET01BSU4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzYKK21zZ2lkICJETlMgZmFpbHVyZTogWVhSUlNFVCIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3NworbXNnaWQgIkROUyBmYWlsdXJlOiBOWFJSU0VUIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc4Cittc2dpZCAiRE5TIGZhaWx1cmU6IE5PVEFVVEgiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzkKK21zZ2lkICJETlMgZmFpbHVyZTogTk9UWk9ORSIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4MAorbXNnaWQgIkludmFsaWQgUkRBVEEiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODEKK21zZ2lkICJJbnZhbGlkIEROUyB0eXBlIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjgyCittc2dpZCAiSW52YWxpZCBETlMgY2xhc3MiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODMKK21zZ2lkICJOb3Qgc3VwcG9ydGVkIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjg1Cittc2dpZCAiTm90IHBlcm1pdHRlZCIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4NgorbXNnaWQgIkludmFsaWQgYXJndW1lbnQiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODcKK21zZ2lkICJJcyBlbXB0eSIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4OAorbXNnaWQgIlRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uIGlzIGludmFsaWQgYmVjYXVzZSByZWR1bmRhbnQiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6OTQKK21zZ2lkICJJbnZhbGlkIEVycm9yIENvZGUiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktZGlzY292ZXItc3RhbmRhbG9uZS9hdmFoaS1kaXNjb3Zlci51aS5oOjEKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weTo3NgorbXNnaWQgIjxpPk5vIHNlcnZpY2UgY3VycmVudGx5IHNlbGVjdGVkLjwvaT4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktZGlzY292ZXItc3RhbmRhbG9uZS9hdmFoaS1kaXNjb3Zlci51aS5oOjIKK21zZ2lkICJBdmFoaSBEaXNjb3ZlcnkiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLmRlc2t0b3AuaW4uaW4uaDoxCittc2dpZCAiQXZhaGkgWmVyb2NvbmYgQnJvd3NlciIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIuZGVza3RvcC5pbi5pbi5oOjIKK21zZ2lkICJCcm93c2UgZm9yIFplcm9jb25mIHNlcnZpY2VzIGF2YWlsYWJsZSBvbiB5b3VyIG5ldHdvcmsiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIyNAorbXNnaWQgIlRYVCIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI2Cittc2dpZCAiVFhUIERhdGE6IgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMjYKK21zZ2lkICJlbXB0eSIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI4Cittc2dpZCAiU2VydmljZSBUeXBlOiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI5Cittc2dpZCAiU2VydmljZSBOYW1lOiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjMwCittc2dpZCAiRG9tYWluIE5hbWU6IgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMzEKK21zZ2lkICJJbnRlcmZhY2U6IgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMzIKK21zZ2lkICJBZGRyZXNzOiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE4NQorbXNnaWQgIkJyb3dzZSBTZXJ2aWNlIFR5cGVzIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTg1Cittc2dpZCAiQSBOVUxMIHRlcm1pbmF0ZWQgbGlzdCBvZiBzZXJ2aWNlIHR5cGVzIHRvIGJyb3dzZSBmb3IiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxOTAKK21zZ2lkICJEb21haW4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxOTAKK21zZ2lkICJUaGUgZG9tYWluIHRvIGJyb3dzZSBpbiwgb3IgTlVMTCBmb3IgdGhlIGRlZmF1bHQgZG9tYWluIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTk2Cittc2dpZCAiU2VydmljZSBUeXBlIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTk2Cittc2dpZCAiVGhlIHNlcnZpY2UgdHlwZSBvZiB0aGUgc2VsZWN0ZWQgc2VydmljZSIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIwMiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjEwMjMKK21zZ2lkICJTZXJ2aWNlIE5hbWUiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMDIKK21zZ2lkICJUaGUgc2VydmljZSBuYW1lIG9mIHRoZSBzZWxlY3RlZCBzZXJ2aWNlIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjA4Cittc2dpZCAiQWRkcmVzcyIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIwOAorbXNnaWQgIlRoZSBhZGRyZXNzIG9mIHRoZSByZXNvbHZlZCBzZXJ2aWNlIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjEzCittc2dpZCAiUG9ydCIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIxMworbXNnaWQgIlRoZSBJUCBwb3J0IG51bWJlciBvZiB0aGUgcmVzb2x2ZWQgc2VydmljZSIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIxOQorbXNnaWQgIkhvc3QgTmFtZSIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIxOQorbXNnaWQgIlRoZSBob3N0IG5hbWUgb2YgdGhlIHJlc29sdmVkIHNlcnZpY2UiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMjUKK21zZ2lkICJUWFQgRGF0YSIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIyNQorbXNnaWQgIlRoZSBUWFQgZGF0YSBvZiB0aGUgcmVzb2x2ZWQgc2VydmljZSIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIzMAorbXNnaWQgIlJlc29sdmUgU2VydmljZSIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIzMAorbXNnaWQgIlJlc29sdmUgdGhlIHNlbGVjdGVkIHNlcnZpY2UgYXV0b21hdGljYWxseSBiZWZvcmUgcmV0dXJuaW5nIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjM2Cittc2dpZCAiUmVzb2x2ZSBTZXJ2aWNlIEhvc3QgTmFtZSIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIzNgorbXNnaWQgIiIKKyJSZXNvbHZlIHRoZSBob3N0IG5hbWUgb2YgdGhlIHNlbGVjdGVkIHNlcnZpY2UgYXV0b21hdGljYWxseSBiZWZvcmUgcmV0dXJuaW5nIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjQyCittc2dpZCAiQWRkcmVzcyBmYW1pbHkiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyNDIKK21zZ2lkICJUaGUgYWRkcmVzcyBmYW1pbHkgZm9yIGhvc3QgbmFtZSByZXNvbHV0aW9uIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MzI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWhpIGNsaWVudCBmYWlsdXJlOiAlcyIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjM4OAorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFoaSByZXNvbHZlciBmYWlsdXJlOiAlcyIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjUxOAorIywgYy1mb3JtYXQKK21zZ2lkICJCcm93c2luZyBmb3Igc2VydmljZSB0eXBlICVzIGluIGRvbWFpbiAlcyBmYWlsZWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NTE5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjE2OAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTY5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjE3OAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTc5Cittc2dpZCAibi9hIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWhpIGRvbWFpbiBicm93c2VyIGZhaWx1cmU6ICVzIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6Njg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWFkIEF2YWhpIGRvbWFpbjogJXMiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo3MDYKK21zZ2lkICJCcm93c2Ugc2VydmljZSB0eXBlIGxpc3QgaXMgZW1wdHkhIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjb25uZWN0IHRvIEF2YWhpIHNlcnZlcjogJXMiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo3MzUKK21zZ2lkICJCcm93c2luZyBmb3Igc2VydmljZXMgb24gPGI+bG9jYWwgbmV0d29yazwvYj46IgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NzM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyb3dzaW5nIGZvciBzZXJ2aWNlcyBpbiBkb21haW4gPGI+JXM8L2I+OiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjc3MworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGJyb3dzZXIgZm9yICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjkwMworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIHJlc29sdmVyIGZvciAlcyBvZiB0eXBlICVzIGluIGRvbWFpbiAlczogJXMiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo5NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBkb21haW4gYnJvd3NlcjogJXMiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo5ODkKK21zZ2lkICJDaGFuZ2UgZG9tYWluIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTAzMSAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNjIKK21zZ2lkICJCcm93c2luZy4uLiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExMjAKK21zZ2lkICJJbml0aWFsaXppbmcuLi4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTQ0Cittc2dpZCAiTG9jYXRpb24iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTQ5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU1MworbXNnaWQgIk5hbWUiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTU0IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU1MworbXNnaWQgIlR5cGUiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTY2Cittc2dpZCAiX0RvbWFpbi4uLiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFtvcHRpb25zXVxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtcyAtLXNzaCAgICAgICAgICAgICBCcm93c2UgU1NIIHNlcnZlcnNcbiIKKyIgICAgLXYgLS12bmMgICAgICAgICAgICAgQnJvd3NlIFZOQyBzZXJ2ZXJzXG4iCisiICAgIC1TIC0tc2hlbGwgICAgICAgICAgIEJyb3dzZSBib3RoIFNTSCBhbmQgVk5DXG4iCisiICAgIC1kIC0tZG9tYWluPURPTUFJTiAgIFRoZSBkb21haW4gdG8gYnJvd3NlIGluXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjEwMSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo3NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG9vIG1hbnkgYXJndW1lbnRzXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE0OQorbXNnaWQgIkNob29zZSBTaGVsbCBTZXJ2ZXIiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE1MQorbXNnaWQgIkRlc2t0b3AiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE1MgorbXNnaWQgIlRlcm1pbmFsIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNTYKK21zZ2lkICJDaG9vc2UgVk5DIHNlcnZlciIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTYxCittc2dpZCAiQ2hvb3NlIFNTSCBzZXJ2ZXIiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE4NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb25uZWN0aW5nIHRvICclcycgLi4uXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjI0MAorIywgYy1mb3JtYXQKK21zZ2lkICJleGVjbHAoKSBmYWlsZWQ6ICVzXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5jZWxlZC5cbiIKK21zZ3N0ciAiQ2FuY2VsbGVkLlxuIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmRlc2t0b3AuaW4uaW4uaDoxCittc2dpZCAiQXZhaGkgU1NIIFNlcnZlciBCcm93c2VyIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guZGVza3RvcC5pbi5pbi5oOjIKK21zZ2lkICJCcm93c2UgZm9yIFplcm9jb25mLWVuYWJsZWQgU1NIIFNlcnZlcnMiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYnZuYy5kZXNrdG9wLmluLmluLmg6MQorbXNnaWQgIkF2YWhpIFZOQyBTZXJ2ZXIgQnJvd3NlciIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9idm5jLmRlc2t0b3AuaW4uaW4uaDoyCittc2dpZCAiQnJvd3NlIGZvciBaZXJvY29uZi1lbmFibGVkIFZOQyBTZXJ2ZXJzIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjEwNworIywgYy1mb3JtYXQKK21zZ2lkICI6IEFsbCBmb3Igbm93XG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIjogQ2FjaGUgZXhoYXVzdGVkXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MjM5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSBzZXJ2aWNlICclcycgb2YgdHlwZSAnJXMnIGluIGRvbWFpbiAnJXMnOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjM0MAorIywgYy1mb3JtYXQKK21zZ2lkICJzZXJ2aWNlX2Jyb3dzZXIgZmFpbGVkOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjM3OAorIywgYy1mb3JtYXQKK21zZ2lkICJhdmFoaV9zZXJ2aWNlX2Jyb3dzZXJfbmV3KCkgZmFpbGVkOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjQxNAorIywgYy1mb3JtYXQKK21zZ2lkICJzZXJ2aWNlX3R5cGVfYnJvd3NlciBmYWlsZWQ6ICVzXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImF2YWhpX3NlcnZpY2VfdHlwZV9icm93c2VyX25ldygpIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXZhaGlfZG9tYWluX2Jyb3dzZXJfbmV3KCkgZmFpbGVkOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjUzNSAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6Mzk0CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjgwIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IHZlcnNpb24gc3RyaW5nOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU0MCAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6Mzk5CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6Mjg1IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxNzMKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IGhvc3QgbmFtZTogJXNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NDQgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjQwMworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI4OSAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlcnZlciB2ZXJzaW9uOiAlczsgSG9zdCBuYW1lOiAlc1xuIgorbXNnc3RyICIiCisKKyMuIFRyYW5zbGF0b3JzOiBUaGlzIGlzIGEgY29sdW1uIGhlYWRpbmcgd2l0aCBhYmJyZXZpYXRpb25zIGZvcgorIy4gKiAgIEV2ZW50ICgrLy0pLCBOZXR3b3JrIEludGVyZmFjZSwgUHJvdG9jb2wgKElQdjQvdjYpLCBEb21haW4KKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU0OQorIywgYy1mb3JtYXQKK21zZ2lkICJFIElmY2UgUHJvdCBEb21haW5cbiIKK21zZ3N0ciAiIgorCisjLiBUcmFuc2xhdG9yczogVGhpcyBpcyBhIGNvbHVtbiBoZWFkaW5nIHdpdGggYWJicmV2aWF0aW9ucyBmb3IKKyMuICogICBFdmVudCAoKy8tKSwgTmV0d29yayBJbnRlcmZhY2UsIFByb3RvY29sIChJUHY0L3Y2KSwgRG9tYWluCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRSBJZmNlIFByb3QgJS0qcyAlLTIwcyBEb21haW5cbiIKK21zZ3N0ciAiIgorCisjLiBXZSBoYXZlIGJlZW4gZGlzY29ubmVjdGVkLCBzbyBsZXQgcmVjb25uZWN0CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1ODUgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE2MworIywgYy1mb3JtYXQKK21zZ2lkICJEaXNjb25uZWN0ZWQsIHJlY29ubmVjdGluZyAuLi5cbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1OTkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6ODI5CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTcwIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozODYKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyNzIgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE2MAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGNsaWVudCBvYmplY3Q6ICVzXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NjA0IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxNzUKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoxNDMgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNsaWVudCBmYWlsdXJlLCBleGl0aW5nOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjYyMyAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIldhaXRpbmcgZm9yIGRhZW1vbiAuLi5cbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo2NDcKK21zZ2lkICIiCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFNob3cgdmVyc2lvblxuIgorIiAgICAtRCAtLWJyb3dzZS1kb21haW5zICBCcm93c2UgZm9yIGJyb3dzaW5nIGRvbWFpbnMgaW5zdGVhZCBvZiBzZXJ2aWNlc1xuIgorIiAgICAtYSAtLWFsbCAgICAgICAgICAgICBTaG93IGFsbCBzZXJ2aWNlcywgcmVnYXJkbGVzcyBvZiB0aGUgdHlwZVxuIgorIiAgICAtZCAtLWRvbWFpbj1ET01BSU4gICBUaGUgZG9tYWluIHRvIGJyb3dzZSBpblxuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBFbmFibGUgdmVyYm9zZSBtb2RlXG4iCisiICAgIC10IC0tdGVybWluYXRlICAgICAgIFRlcm1pbmF0ZSBhZnRlciBkdW1waW5nIGEgbW9yZSBvciBsZXNzIGNvbXBsZXRlICIKKyJsaXN0XG4iCisiICAgIC1jIC0tY2FjaGUgICAgICAgICAgIFRlcm1pbmF0ZSBhZnRlciBkdW1waW5nIGFsbCBlbnRyaWVzIGZyb20gdGhlIGNhY2hlXG4iCisiICAgIC1sIC0taWdub3JlLWxvY2FsICAgIElnbm9yZSBsb2NhbCBzZXJ2aWNlc1xuIgorIiAgICAtciAtLXJlc29sdmUgICAgICAgICBSZXNvbHZlIHNlcnZpY2VzIGZvdW5kXG4iCisiICAgIC1mIC0tbm8tZmFpbCAgICAgICAgIERvbid0IGZhaWwgaWYgdGhlIGRhZW1vbiBpcyBub3QgYXZhaWxhYmxlXG4iCisiICAgIC1wIC0tcGFyc2FibGUgICAgICAgIE91dHB1dCBpbiBwYXJzYWJsZSBmb3JtYXRcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo2NjAKK21zZ2lkICIiCisiICAgIC1rIC0tbm8tZGItbG9va3VwICAgIERvbid0IGxvb2t1cCBzZXJ2aWNlIHR5cGVzXG4iCisiICAgIC1iIC0tZHVtcC1kYiAgICAgICAgIER1bXAgc2VydmljZSB0eXBlIGRhdGFiYXNlXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NzY2IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG9vIGZldyBhcmd1bWVudHNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo4MjEgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjM3OAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI2NCAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgc2ltcGxlIHBvbGwgb2JqZWN0LlxuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo3NgorIywgYy1mb3JtYXQKK21zZ2lkICJFc3RhYmxpc2hlZCB1bmRlciBuYW1lICclcydcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICJOYW1lIGNvbGxpc2lvbiwgcGlja2luZyBuZXcgbmFtZSAnJXMnLlxuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBlbnRyeSBncm91cDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgYWRkcmVzczogJXNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgc2VydmljZTogJXNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgc3VidHlwZSAnJXMnOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiSG9zdCBuYW1lIGNvbmZsaWN0XG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgW29wdGlvbnNdICVzIDxuYW1lPiA8dHlwZT4gPHBvcnQ+IFs8dHh0IC4uLj5dXG4iCisiJXMgW29wdGlvbnNdICVzIDxob3N0LW5hbWU+IDxhZGRyZXNzPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLXMgLS1zZXJ2aWNlICAgICAgICAgUHVibGlzaCBzZXJ2aWNlXG4iCisiICAgIC1hIC0tYWRkcmVzcyAgICAgICAgIFB1Ymxpc2ggYWRkcmVzc1xuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBFbmFibGUgdmVyYm9zZSBtb2RlXG4iCisiICAgIC1kIC0tZG9tYWluPURPTUFJTiAgIERvbWFpbiB0byBwdWJsaXNoIHNlcnZpY2UgaW5cbiIKKyIgICAgLUggLS1ob3N0PURPTUFJTiAgICAgSG9zdCB3aGVyZSBzZXJ2aWNlIHJlc2lkZXNcbiIKKyIgICAgICAgLS1zdWJ0eXBlPVNVQlRZUEUgQW4gYWRkaXRpb25hbCBzdWJ0eXBlIHRvIHJlZ2lzdGVyIHRoaXMgc2VydmljZSAiCisid2l0aFxuIgorIiAgICAtUiAtLW5vLXJldmVyc2UgICAgICBEbyBub3QgcHVibGlzaCByZXZlcnNlIGVudHJ5IHdpdGggYWRkcmVzc1xuIgorIiAgICAtZiAtLW5vLWZhaWwgICAgICAgICBEb24ndCBmYWlsIGlmIHRoZSBkYWVtb24gaXMgbm90IGF2YWlsYWJsZVxuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozMDMgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjMxOAorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgbnVtYmVyIG9mIGFyZ3VtZW50c1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIHBvcnQgbnVtYmVyOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozNjEgLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI0NgorIywgYy1mb3JtYXQKK21zZ2lkICJObyBjb21tYW5kIHNwZWNpZmllZC5cbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgaG9zdCBuYW1lICclcyc6ICVzXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjEyNgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSBhZGRyZXNzICclcyc6ICVzXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjE1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgW29wdGlvbnNdICVzIDxob3N0IG5hbWUgLi4uPlxuIgorIiVzIFtvcHRpb25zXSAlcyA8YWRkcmVzcyAuLi4gPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLW4gLS1uYW1lICAgICAgICAgICAgUmVzb2x2ZSBob3N0IG5hbWVcbiIKKyIgICAgLWEgLS1hZGRyZXNzICAgICAgICAgUmVzb2x2ZSBhZGRyZXNzXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKKyIgICAgLTYgICAgICAgICAgICAgICAgICAgTG9va3VwIElQdjYgYWRkcmVzc1xuIgorIiAgICAtNCAgICAgICAgICAgICAgICAgICBMb29rdXAgSVB2NCBhZGRyZXNzXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI5OSAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgaG9zdCBuYW1lIHJlc29sdmVyOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzozMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIGFkZHJlc3MgJyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzozMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBhZGRyZXNzIHJlc29sdmVyOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgW29wdGlvbnNdIDxuZXcgaG9zdCBuYW1lPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgRW5hYmxlIHZlcmJvc2UgbW9kZVxuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzLCBleHBlY3RpbmcgZXhhY3RseSBvbmUuXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE5MworIywgYy1mb3JtYXQKK21zZ2lkICJIb3N0IG5hbWUgc3VjY2Vzc2Z1bGx5IGNoYW5nZWQgdG8gJXNcbiIKK21zZ3N0ciAiIgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL3BvL2VuX0dCLnBvIGIvYXZhaGktMC42LjMxL3BvL2VuX0dCLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmNWI4NDkKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvcG8vZW5fR0IucG8KQEAgLTAsMCArMSw4NTggQEAKKyMgQnJpdGlzaCBFbmdsaXNoIHRyYW5zbGF0aW9uIG9mIEF2YWhpCisjIENvcHlyaWdodCAoQykgMjAwOSBBdmFoaSdzIENPUFlSSUdIVCBIT0xERVIKKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2VuY2UgYXMgdGhlIEF2YWhpIHBhY2thZ2UuCisjIEJydWNlIENvd2FuIDxiY293YW5AZmFzdG1haWwuY28udWs+LCAyMDA5LgorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogYXZhaGlcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTEtMDQtMDIgMDM6MjMrMDIwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDktMTEtMTEgMTc6MDArMDAwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogQnJ1Y2UgQ293YW4gPGJjb3dhbkBmYXN0bWFpbC5jby51az5cbiIKKyJMYW5ndWFnZS1UZWFtOiBCcml0aXNoIEVuZ2xpc2ggPGVuQGxpLm9yZz5cbiIKKyJMYW5ndWFnZTogXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KCBuICE9IDEgKTtcbiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzAKK21zZ2lkICJPSyIKK21zZ3N0ciAiT0siCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjMxCittc2dpZCAiT3BlcmF0aW9uIGZhaWxlZCIKK21zZ3N0ciAiT3BlcmF0aW9uIGZhaWxlZCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzIKK21zZ2lkICJCYWQgc3RhdGUiCittc2dzdHIgIkJhZCBzdGF0ZSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzMKK21zZ2lkICJJbnZhbGlkIGhvc3QgbmFtZSIKK21zZ3N0ciAiSW52YWxpZCBob3N0IG5hbWUiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM0Cittc2dpZCAiSW52YWxpZCBkb21haW4gbmFtZSIKK21zZ3N0ciAiSW52YWxpZCBkb21haW4gbmFtZSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzUKK21zZ2lkICJObyBzdWl0YWJsZSBuZXR3b3JrIHByb3RvY29sIGF2YWlsYWJsZSIKK21zZ3N0ciAiTm8gc3VpdGFibGUgbmV0d29yayBwcm90b2NvbCBhdmFpbGFibGUiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM2Cittc2dpZCAiSW52YWxpZCBETlMgVFRMIgorbXNnc3RyICJJbnZhbGlkIEROUyBUVEwiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM3Cittc2dpZCAiUmVzb3VyY2UgcmVjb3JkIGtleSBpcyBwYXR0ZXJuIgorbXNnc3RyICJSZXNvdXJjZSByZWNvcmQga2V5IGlzIHBhdHRlcm4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM4Cittc2dpZCAiTG9jYWwgbmFtZSBjb2xsaXNpb24iCittc2dzdHIgIkxvY2FsIG5hbWUgY29sbGlzaW9uIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozOQorbXNnaWQgIkludmFsaWQgcmVjb3JkIgorbXNnc3RyICJJbnZhbGlkIHJlY29yZCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDEKK21zZ2lkICJJbnZhbGlkIHNlcnZpY2UgbmFtZSIKK21zZ3N0ciAiSW52YWxpZCBzZXJ2aWNlIG5hbWUiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQyCittc2dpZCAiSW52YWxpZCBzZXJ2aWNlIHR5cGUiCittc2dzdHIgIkludmFsaWQgc2VydmljZSB0eXBlIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0MworbXNnaWQgIkludmFsaWQgcG9ydCBudW1iZXIiCittc2dzdHIgIkludmFsaWQgcG9ydCBudW1iZXIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQ0Cittc2dpZCAiSW52YWxpZCByZWNvcmQga2V5IgorbXNnc3RyICJJbnZhbGlkIHJlY29yZCBrZXkiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQ1Cittc2dpZCAiSW52YWxpZCBhZGRyZXNzIgorbXNnc3RyICJJbnZhbGlkIGFkZHJlc3MiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQ2Cittc2dpZCAiVGltZW91dCByZWFjaGVkIgorbXNnc3RyICJUaW1lb3V0IHJlYWNoZWQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQ3Cittc2dpZCAiVG9vIG1hbnkgY2xpZW50cyIKK21zZ3N0ciAiVG9vIG1hbnkgY2xpZW50cyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDgKK21zZ2lkICJUb28gbWFueSBvYmplY3RzIgorbXNnc3RyICJUb28gbWFueSBvYmplY3RzIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0OQorbXNnaWQgIlRvbyBtYW55IGVudHJpZXMiCittc2dzdHIgIlRvbyBtYW55IGVudHJpZXMiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjUwCittc2dpZCAiT1MgRXJyb3IiCittc2dzdHIgIk9TIEVycm9yIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1MgorbXNnaWQgIkFjY2VzcyBkZW5pZWQiCittc2dzdHIgIkFjY2VzcyBkZW5pZWQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjUzCittc2dpZCAiSW52YWxpZCBvcGVyYXRpb24iCittc2dzdHIgIkludmFsaWQgb3BlcmF0aW9uIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1NAorbXNnaWQgIkFuIHVuZXhwZWN0ZWQgRC1CdXMgZXJyb3Igb2NjdXJlZCIKK21zZ3N0ciAiQW4gdW5leHBlY3RlZCBELUJ1cyBlcnJvciBvY2N1cnJlZCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTUKK21zZ2lkICJEYWVtb24gY29ubmVjdGlvbiBmYWlsZWQiCittc2dzdHIgIkRhZW1vbiBjb25uZWN0aW9uIGZhaWxlZCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTYKK21zZ2lkICJNZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICJNZW1vcnkgZXhoYXVzdGVkIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1NworbXNnaWQgIlRoZSBvYmplY3QgcGFzc2VkIGluIHdhcyBub3QgdmFsaWQiCittc2dzdHIgIlRoZSBvYmplY3QgcGFzc2VkIGluIHdhcyBub3QgdmFsaWQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU4Cittc2dpZCAiRGFlbW9uIG5vdCBydW5uaW5nIgorbXNnc3RyICJEYWVtb24gbm90IHJ1bm5pbmciCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU5Cittc2dpZCAiSW52YWxpZCBpbnRlcmZhY2UgaW5kZXgiCittc2dzdHIgIkludmFsaWQgaW50ZXJmYWNlIGluZGV4IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2MAorbXNnaWQgIkludmFsaWQgcHJvdG9jb2wgc3BlY2lmaWNhdGlvbiIKK21zZ3N0ciAiSW52YWxpZCBwcm90b2NvbCBzcGVjaWZpY2F0aW9uIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2MQorbXNnaWQgIkludmFsaWQgZmxhZ3MiCittc2dzdHIgIkludmFsaWQgZmxhZ3MiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjYzCittc2dpZCAiTm90IGZvdW5kIgorbXNnc3RyICJOb3QgZm91bmQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY0Cittc2dpZCAiSW52YWxpZCBjb25maWd1cmF0aW9uIgorbXNnc3RyICJJbnZhbGlkIGNvbmZpZ3VyYXRpb24iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY1Cittc2dpZCAiVmVyc2lvbiBtaXNtYXRjaCIKK21zZ3N0ciAiVmVyc2lvbiBtaXNtYXRjaCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjYKK21zZ2lkICJJbnZhbGlkIHNlcnZpY2Ugc3VidHlwZSIKK21zZ3N0ciAiSW52YWxpZCBzZXJ2aWNlIHN1YnR5cGUiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY3Cittc2dpZCAiSW52YWxpZCBwYWNrZXQiCittc2dzdHIgIkludmFsaWQgcGFja2V0IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2OAorbXNnaWQgIkludmFsaWQgRE5TIHJldHVybiBjb2RlIgorbXNnc3RyICJJbnZhbGlkIEROUyByZXR1cm4gY29kZSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjkKK21zZ2lkICJETlMgZmFpbHVyZTogRk9STUVSUiIKK21zZ3N0ciAiRE5TIGZhaWx1cmU6IEZPUk1FUlIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjcwCittc2dpZCAiRE5TIGZhaWx1cmU6IFNFUlZGQUlMIgorbXNnc3RyICJETlMgZmFpbHVyZTogU0VSVkZBSUwiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjcxCittc2dpZCAiRE5TIGZhaWx1cmU6IE5YRE9NQUlOIgorbXNnc3RyICJETlMgZmFpbHVyZTogTlhET01BSU4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjcyCittc2dpZCAiRE5TIGZhaWx1cmU6IE5PVElNUCIKK21zZ3N0ciAiRE5TIGZhaWx1cmU6IE5PVElNUCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzQKK21zZ2lkICJETlMgZmFpbHVyZTogUkVGVVNFRCIKK21zZ3N0ciAiRE5TIGZhaWx1cmU6IFJFRlVTRUQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc1Cittc2dpZCAiRE5TIGZhaWx1cmU6IFlYRE9NQUlOIgorbXNnc3RyICJETlMgZmFpbHVyZTogWVhET01BSU4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc2Cittc2dpZCAiRE5TIGZhaWx1cmU6IFlYUlJTRVQiCittc2dzdHIgIkROUyBmYWlsdXJlOiBZWFJSU0VUIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3NworbXNnaWQgIkROUyBmYWlsdXJlOiBOWFJSU0VUIgorbXNnc3RyICJETlMgZmFpbHVyZTogTlhSUlNFVCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzgKK21zZ2lkICJETlMgZmFpbHVyZTogTk9UQVVUSCIKK21zZ3N0ciAiRE5TIGZhaWx1cmU6IE5PVEFVVEgiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc5Cittc2dpZCAiRE5TIGZhaWx1cmU6IE5PVFpPTkUiCittc2dzdHIgIkROUyBmYWlsdXJlOiBOT1RaT05FIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4MAorbXNnaWQgIkludmFsaWQgUkRBVEEiCittc2dzdHIgIkludmFsaWQgUkRBVEEiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjgxCittc2dpZCAiSW52YWxpZCBETlMgdHlwZSIKK21zZ3N0ciAiSW52YWxpZCBETlMgdHlwZSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODIKK21zZ2lkICJJbnZhbGlkIEROUyBjbGFzcyIKK21zZ3N0ciAiSW52YWxpZCBETlMgY2xhc3MiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjgzCittc2dpZCAiTm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiTm90IHN1cHBvcnRlZCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODUKK21zZ2lkICJOb3QgcGVybWl0dGVkIgorbXNnc3RyICJOb3QgcGVybWl0dGVkIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4NgorbXNnaWQgIkludmFsaWQgYXJndW1lbnQiCittc2dzdHIgIkludmFsaWQgYXJndW1lbnQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjg3Cittc2dpZCAiSXMgZW1wdHkiCittc2dzdHIgIklzIGVtcHR5IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4OAorbXNnaWQgIlRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uIGlzIGludmFsaWQgYmVjYXVzZSByZWR1bmRhbnQiCittc2dzdHIgIlRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uIGlzIGludmFsaWQgYmVjYXVzZSByZWR1bmRhbnQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjk0Cittc2dpZCAiSW52YWxpZCBFcnJvciBDb2RlIgorbXNnc3RyICJJbnZhbGlkIEVycm9yIENvZGUiCisKKyM6IC4uL2F2YWhpLWRpc2NvdmVyLXN0YW5kYWxvbmUvYXZhaGktZGlzY292ZXIudWkuaDoxCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6NzYKK21zZ2lkICI8aT5ObyBzZXJ2aWNlIGN1cnJlbnRseSBzZWxlY3RlZC48L2k+IgorbXNnc3RyICI8aT5ObyBzZXJ2aWNlIGN1cnJlbnRseSBzZWxlY3RlZC48L2k+IgorCisjOiAuLi9hdmFoaS1kaXNjb3Zlci1zdGFuZGFsb25lL2F2YWhpLWRpc2NvdmVyLnVpLmg6MgorbXNnaWQgIkF2YWhpIERpc2NvdmVyeSIKK21zZ3N0ciAiQXZhaGkgRGlzY292ZXJ5IgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIuZGVza3RvcC5pbi5pbi5oOjEKK21zZ2lkICJBdmFoaSBaZXJvY29uZiBCcm93c2VyIgorbXNnc3RyICJBdmFoaSBaZXJvY29uZiBCcm93c2VyIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIuZGVza3RvcC5pbi5pbi5oOjIKK21zZ2lkICJCcm93c2UgZm9yIFplcm9jb25mIHNlcnZpY2VzIGF2YWlsYWJsZSBvbiB5b3VyIG5ldHdvcmsiCittc2dzdHIgIkJyb3dzZSBmb3IgWmVyb2NvbmYgc2VydmljZXMgYXZhaWxhYmxlIG9uIHlvdXIgbmV0d29yayIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIyNAorbXNnaWQgIlRYVCIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI2CisjLCBmdXp6eQorbXNnaWQgIlRYVCBEYXRhOiIKK21zZ3N0ciAiVFhUIERhdGEiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMjYKKyMsIGZ1enp5Cittc2dpZCAiZW1wdHkiCittc2dzdHIgIklzIGVtcHR5IgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI4CisjLCBmdXp6eQorbXNnaWQgIlNlcnZpY2UgVHlwZToiCittc2dzdHIgIlNlcnZpY2UgVHlwZSIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIyOQorIywgZnV6enkKK21zZ2lkICJTZXJ2aWNlIE5hbWU6IgorbXNnc3RyICJTZXJ2aWNlIE5hbWUiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMzAKKyMsIGZ1enp5Cittc2dpZCAiRG9tYWluIE5hbWU6IgorbXNnc3RyICJEb21haW4iCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMzEKK21zZ2lkICJJbnRlcmZhY2U6IgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMzIKKyMsIGZ1enp5Cittc2dpZCAiQWRkcmVzczoiCittc2dzdHIgIkFkZHJlc3MiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTg1Cittc2dpZCAiQnJvd3NlIFNlcnZpY2UgVHlwZXMiCittc2dzdHIgIkJyb3dzZSBTZXJ2aWNlIFR5cGVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE4NQorbXNnaWQgIkEgTlVMTCB0ZXJtaW5hdGVkIGxpc3Qgb2Ygc2VydmljZSB0eXBlcyB0byBicm93c2UgZm9yIgorbXNnc3RyICJBIE5VTEwgdGVybWluYXRlZCBsaXN0IG9mIHNlcnZpY2UgdHlwZXMgdG8gYnJvd3NlIGZvciIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxOTAKK21zZ2lkICJEb21haW4iCittc2dzdHIgIkRvbWFpbiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxOTAKK21zZ2lkICJUaGUgZG9tYWluIHRvIGJyb3dzZSBpbiwgb3IgTlVMTCBmb3IgdGhlIGRlZmF1bHQgZG9tYWluIgorbXNnc3RyICJUaGUgZG9tYWluIHRvIGJyb3dzZSBpbiwgb3IgTlVMTCBmb3IgdGhlIGRlZmF1bHQgZG9tYWluIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE5NgorbXNnaWQgIlNlcnZpY2UgVHlwZSIKK21zZ3N0ciAiU2VydmljZSBUeXBlIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE5NgorbXNnaWQgIlRoZSBzZXJ2aWNlIHR5cGUgb2YgdGhlIHNlbGVjdGVkIHNlcnZpY2UiCittc2dzdHIgIlRoZSBzZXJ2aWNlIHR5cGUgb2YgdGhlIHNlbGVjdGVkIHNlcnZpY2UiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjAyIC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTAyMworbXNnaWQgIlNlcnZpY2UgTmFtZSIKK21zZ3N0ciAiU2VydmljZSBOYW1lIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIwMgorbXNnaWQgIlRoZSBzZXJ2aWNlIG5hbWUgb2YgdGhlIHNlbGVjdGVkIHNlcnZpY2UiCittc2dzdHIgIlRoZSBzZXJ2aWNlIG5hbWUgb2YgdGhlIHNlbGVjdGVkIHNlcnZpY2UiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjA4Cittc2dpZCAiQWRkcmVzcyIKK21zZ3N0ciAiQWRkcmVzcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMDgKK21zZ2lkICJUaGUgYWRkcmVzcyBvZiB0aGUgcmVzb2x2ZWQgc2VydmljZSIKK21zZ3N0ciAiVGhlIGFkZHJlc3Mgb2YgdGhlIHJlc29sdmVkIHNlcnZpY2UiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjEzCittc2dpZCAiUG9ydCIKK21zZ3N0ciAiUG9ydCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMTMKK21zZ2lkICJUaGUgSVAgcG9ydCBudW1iZXIgb2YgdGhlIHJlc29sdmVkIHNlcnZpY2UiCittc2dzdHIgIlRoZSBJUCBwb3J0IG51bWJlciBvZiB0aGUgcmVzb2x2ZWQgc2VydmljZSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMTkKK21zZ2lkICJIb3N0IE5hbWUiCittc2dzdHIgIkhvc3QgTmFtZSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMTkKK21zZ2lkICJUaGUgaG9zdCBuYW1lIG9mIHRoZSByZXNvbHZlZCBzZXJ2aWNlIgorbXNnc3RyICJUaGUgaG9zdCBuYW1lIG9mIHRoZSByZXNvbHZlZCBzZXJ2aWNlIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIyNQorbXNnaWQgIlRYVCBEYXRhIgorbXNnc3RyICJUWFQgRGF0YSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMjUKK21zZ2lkICJUaGUgVFhUIGRhdGEgb2YgdGhlIHJlc29sdmVkIHNlcnZpY2UiCittc2dzdHIgIlRoZSBUWFQgZGF0YSBvZiB0aGUgcmVzb2x2ZWQgc2VydmljZSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMzAKKyMsIGZ1enp5Cittc2dpZCAiUmVzb2x2ZSBTZXJ2aWNlIgorbXNnc3RyICJSZXNvbHZlIHNlcnZpY2UiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjMwCittc2dpZCAiUmVzb2x2ZSB0aGUgc2VsZWN0ZWQgc2VydmljZSBhdXRvbWF0aWNhbGx5IGJlZm9yZSByZXR1cm5pbmciCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMzYKKyMsIGZ1enp5Cittc2dpZCAiUmVzb2x2ZSBTZXJ2aWNlIEhvc3QgTmFtZSIKK21zZ3N0ciAiUmVzb2x2ZSBzZXJ2aWNlIGhvc3QgbmFtZSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMzYKK21zZ2lkICIiCisiUmVzb2x2ZSB0aGUgaG9zdCBuYW1lIG9mIHRoZSBzZWxlY3RlZCBzZXJ2aWNlIGF1dG9tYXRpY2FsbHkgYmVmb3JlIHJldHVybmluZyIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjI0MgorbXNnaWQgIkFkZHJlc3MgZmFtaWx5IgorbXNnc3RyICJBZGRyZXNzIGZhbWlseSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyNDIKK21zZ2lkICJUaGUgYWRkcmVzcyBmYW1pbHkgZm9yIGhvc3QgbmFtZSByZXNvbHV0aW9uIgorbXNnc3RyICJUaGUgYWRkcmVzcyBmYW1pbHkgZm9yIGhvc3QgbmFtZSByZXNvbHV0aW9uIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjMyNgorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFoaSBjbGllbnQgZmFpbHVyZTogJXMiCittc2dzdHIgIkF2YWhpIGNsaWVudCBmYWlsdXJlOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzozODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaGkgcmVzb2x2ZXIgZmFpbHVyZTogJXMiCittc2dzdHIgIkF2YWhpIHJlc29sdmVyIGZhaWx1cmU6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjUxOAorIywgYy1mb3JtYXQKK21zZ2lkICJCcm93c2luZyBmb3Igc2VydmljZSB0eXBlICVzIGluIGRvbWFpbiAlcyBmYWlsZWQ6ICVzIgorbXNnc3RyICJCcm93c2luZyBmb3Igc2VydmljZSB0eXBlICVzIGluIGRvbWFpbiAlcyBmYWlsZWQ6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjUxOSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoxNjgKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjE2OSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoxNzgKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjE3OQorbXNnaWQgIm4vYSIKK21zZ3N0ciAibi9hIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjY0OQorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFoaSBkb21haW4gYnJvd3NlciBmYWlsdXJlOiAlcyIKK21zZ3N0ciAiQXZhaGkgZG9tYWluIGJyb3dzZXIgZmFpbHVyZTogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6Njg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWFkIEF2YWhpIGRvbWFpbjogJXMiCittc2dzdHIgIkZhaWxlZCB0byByZWFkIEF2YWhpIGRvbWFpbjogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NzA2Cittc2dpZCAiQnJvd3NlIHNlcnZpY2UgdHlwZSBsaXN0IGlzIGVtcHR5ISIKK21zZ3N0ciAiQnJvd3NlIHNlcnZpY2UgdHlwZSBsaXN0IGlzIGVtcHR5ISIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo3MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNvbm5lY3QgdG8gQXZhaGkgc2VydmVyOiAlcyIKK21zZ3N0ciAiRmFpbGVkIHRvIGNvbm5lY3QgdG8gQXZhaGkgc2VydmVyOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo3MzUKK21zZ2lkICJCcm93c2luZyBmb3Igc2VydmljZXMgb24gPGI+bG9jYWwgbmV0d29yazwvYj46IgorbXNnc3RyICJCcm93c2luZyBmb3Igc2VydmljZXMgb24gPGI+bG9jYWwgbmV0d29yazwvYj46IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjczNworIywgYy1mb3JtYXQKK21zZ2lkICJCcm93c2luZyBmb3Igc2VydmljZXMgaW4gZG9tYWluIDxiPiVzPC9iPjoiCittc2dzdHIgIkJyb3dzaW5nIGZvciBzZXJ2aWNlcyBpbiBkb21haW4gPGI+JXM8L2I+OiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo3NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBicm93c2VyIGZvciAlczogJXMiCittc2dzdHIgIkZhaWxlZCB0byBjcmVhdGUgYnJvd3NlciBmb3IgJXM6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjkwMworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIHJlc29sdmVyIGZvciAlcyBvZiB0eXBlICVzIGluIGRvbWFpbiAlczogJXMiCittc2dzdHIgIkZhaWxlZCB0byBjcmVhdGUgcmVzb2x2ZXIgZm9yICVzIG9mIHR5cGUgJXMgaW4gZG9tYWluICVzOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo5NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBkb21haW4gYnJvd3NlcjogJXMiCittc2dzdHIgIkZhaWxlZCB0byBjcmVhdGUgZG9tYWluIGJyb3dzZXI6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjk4OQorbXNnaWQgIkNoYW5nZSBkb21haW4iCittc2dzdHIgIkNoYW5nZSBkb21haW4iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTAzMSAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNjIKK21zZ2lkICJCcm93c2luZy4uLiIKK21zZ3N0ciAiQnJvd3NpbmcuLi4iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTEyMAorbXNnaWQgIkluaXRpYWxpemluZy4uLiIKK21zZ3N0ciAiSW5pdGlhbGlzaW5nLi4uIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNDQKK21zZ2lkICJMb2NhdGlvbiIKK21zZ3N0ciAiTG9jYXRpb24iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTE0OSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NTMKK21zZ2lkICJOYW1lIgorbXNnc3RyICJOYW1lIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNTQgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTUzCittc2dpZCAiVHlwZSIKK21zZ3N0ciAiVHlwZSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTY2Cittc2dpZCAiX0RvbWFpbi4uLiIKK21zZ3N0ciAiX0RvbWFpbi4uLiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBbb3B0aW9uc11cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLXMgLS1zc2ggICAgICAgICAgICAgQnJvd3NlIFNTSCBzZXJ2ZXJzXG4iCisiICAgIC12IC0tdm5jICAgICAgICAgICAgIEJyb3dzZSBWTkMgc2VydmVyc1xuIgorIiAgICAtUyAtLXNoZWxsICAgICAgICAgICBCcm93c2UgYm90aCBTU0ggYW5kIFZOQ1xuIgorIiAgICAtZCAtLWRvbWFpbj1ET01BSU4gICBUaGUgZG9tYWluIHRvIGJyb3dzZSBpblxuIgorbXNnc3RyICIiCisiJXMgW29wdGlvbnNdXG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1zIC0tc3NoICAgICAgICAgICAgIEJyb3dzZSBTU0ggc2VydmVyc1xuIgorIiAgICAtdiAtLXZuYyAgICAgICAgICAgICBCcm93c2UgVk5DIHNlcnZlcnNcbiIKKyIgICAgLVMgLS1zaGVsbCAgICAgICAgICAgQnJvd3NlIGJvdGggU1NIIGFuZCBWTkNcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgVGhlIGRvbWFpbiB0byBicm93c2UgaW5cbiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjEwMSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo3NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG9vIG1hbnkgYXJndW1lbnRzXG4iCittc2dzdHIgIlRvbyBtYW55IGFyZ3VtZW50c1xuIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTQ5Cittc2dpZCAiQ2hvb3NlIFNoZWxsIFNlcnZlciIKK21zZ3N0ciAiQ2hvb3NlIFNoZWxsIFNlcnZlciIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE1MQorbXNnaWQgIkRlc2t0b3AiCittc2dzdHIgIkRlc2t0b3AiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNTIKK21zZ2lkICJUZXJtaW5hbCIKK21zZ3N0ciAiVGVybWluYWwiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNTYKK21zZ2lkICJDaG9vc2UgVk5DIHNlcnZlciIKK21zZ3N0ciAiQ2hvb3NlIFZOQyBzZXJ2ZXIiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNjEKK21zZ2lkICJDaG9vc2UgU1NIIHNlcnZlciIKK21zZ3N0ciAiQ2hvb3NlIFNTSCBzZXJ2ZXIiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29ubmVjdGluZyB0byAnJXMnIC4uLlxuIgorbXNnc3RyICJDb25uZWN0aW5nIHRvICclcycgLi4uXG4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoyNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhlY2xwKCkgZmFpbGVkOiAlc1xuIgorbXNnc3RyICJleGVjbHAoKSBmYWlsZWQ6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FuY2VsZWQuXG4iCittc2dzdHIgIkNhbmNlbGxlZC5cbiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5kZXNrdG9wLmluLmluLmg6MQorbXNnaWQgIkF2YWhpIFNTSCBTZXJ2ZXIgQnJvd3NlciIKK21zZ3N0ciAiQXZhaGkgU1NIIFNlcnZlciBCcm93c2VyIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmRlc2t0b3AuaW4uaW4uaDoyCittc2dpZCAiQnJvd3NlIGZvciBaZXJvY29uZi1lbmFibGVkIFNTSCBTZXJ2ZXJzIgorbXNnc3RyICJCcm93c2UgZm9yIFplcm9jb25mLWVuYWJsZWQgU1NIIFNlcnZlcnMiCisKKyM6IC4uL2F2YWhpLXVpL2J2bmMuZGVza3RvcC5pbi5pbi5oOjEKK21zZ2lkICJBdmFoaSBWTkMgU2VydmVyIEJyb3dzZXIiCittc2dzdHIgIkF2YWhpIFZOQyBTZXJ2ZXIgQnJvd3NlciIKKworIzogLi4vYXZhaGktdWkvYnZuYy5kZXNrdG9wLmluLmluLmg6MgorbXNnaWQgIkJyb3dzZSBmb3IgWmVyb2NvbmYtZW5hYmxlZCBWTkMgU2VydmVycyIKK21zZ3N0ciAiQnJvd3NlIGZvciBaZXJvY29uZi1lbmFibGVkIFZOQyBTZXJ2ZXJzIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoxMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiOiBBbGwgZm9yIG5vd1xuIgorbXNnc3RyICI6IEFsbCBmb3Igbm93XG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjExOAorIywgYy1mb3JtYXQKK21zZ2lkICI6IENhY2hlIGV4aGF1c3RlZFxuIgorbXNnc3RyICI6IENhY2hlIGV4aGF1c3RlZFxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoyMzkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIHNlcnZpY2UgJyVzJyBvZiB0eXBlICclcycgaW4gZG9tYWluICclcyc6ICVzXG4iCittc2dzdHIgIkZhaWxlZCB0byByZXNvbHZlIHNlcnZpY2UgJyVzJyBvZiB0eXBlICclcycgaW4gZG9tYWluICclcyc6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjM0MAorIywgYy1mb3JtYXQKK21zZ2lkICJzZXJ2aWNlX2Jyb3dzZXIgZmFpbGVkOiAlc1xuIgorbXNnc3RyICJzZXJ2aWNlX2Jyb3dzZXIgZmFpbGVkOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzozNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXZhaGlfc2VydmljZV9icm93c2VyX25ldygpIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAiYXZhaGlfc2VydmljZV9icm93c2VyX25ldygpIGZhaWxlZDogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgInNlcnZpY2VfdHlwZV9icm93c2VyIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAic2VydmljZV90eXBlX2Jyb3dzZXIgZmFpbGVkOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo0NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXZhaGlfc2VydmljZV90eXBlX2Jyb3dzZXJfbmV3KCkgZmFpbGVkOiAlc1xuIgorbXNnc3RyICJhdmFoaV9zZXJ2aWNlX3R5cGVfYnJvd3Nlcl9uZXcoKSBmYWlsZWQ6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjUxOQorIywgYy1mb3JtYXQKK21zZ2lkICJhdmFoaV9kb21haW5fYnJvd3Nlcl9uZXcoKSBmYWlsZWQ6ICVzXG4iCittc2dzdHIgImF2YWhpX2RvbWFpbl9icm93c2VyX25ldygpIGZhaWxlZDogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTM1IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozOTQKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyODAgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE2OAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcXVlcnkgdmVyc2lvbiBzdHJpbmc6ICVzXG4iCittc2dzdHIgIkZhaWxlZCB0byBxdWVyeSB2ZXJzaW9uIHN0cmluZzogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTQwIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozOTkKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyODUgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE3MworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcXVlcnkgaG9zdCBuYW1lOiAlc1xuIgorbXNnc3RyICJGYWlsZWQgdG8gcXVlcnkgaG9zdCBuYW1lOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NDQgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjQwMworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI4OSAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlcnZlciB2ZXJzaW9uOiAlczsgSG9zdCBuYW1lOiAlc1xuIgorbXNnc3RyICJTZXJ2ZXIgdmVyc2lvbjogJXM7IEhvc3QgbmFtZTogJXNcbiIKKworIy4gVHJhbnNsYXRvcnM6IFRoaXMgaXMgYSBjb2x1bW4gaGVhZGluZyB3aXRoIGFiYnJldmlhdGlvbnMgZm9yCisjLiAqICAgRXZlbnQgKCsvLSksIE5ldHdvcmsgSW50ZXJmYWNlLCBQcm90b2NvbCAoSVB2NC92NiksIERvbWFpbgorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUgSWZjZSBQcm90IERvbWFpblxuIgorbXNnc3RyICJFIElmY2UgUHJvdCBEb21haW5cbiIKKworIy4gVHJhbnNsYXRvcnM6IFRoaXMgaXMgYSBjb2x1bW4gaGVhZGluZyB3aXRoIGFiYnJldmlhdGlvbnMgZm9yCisjLiAqICAgRXZlbnQgKCsvLSksIE5ldHdvcmsgSW50ZXJmYWNlLCBQcm90b2NvbCAoSVB2NC92NiksIERvbWFpbgorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUgSWZjZSBQcm90ICUtKnMgJS0yMHMgRG9tYWluXG4iCittc2dzdHIgIkUgSWZjZSBQcm90ICUtKnMgJS0yMHMgRG9tYWluXG4iCisKKyMuIFdlIGhhdmUgYmVlbiBkaXNjb25uZWN0ZWQsIHNvIGxldCByZWNvbm5lY3QKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU4NSAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkRpc2Nvbm5lY3RlZCwgcmVjb25uZWN0aW5nIC4uLlxuIgorbXNnc3RyICJEaXNjb25uZWN0ZWQsIHJlY29ubmVjdGluZyAuLi5cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTk5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjgyOQorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE3MCAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6Mzg2CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjcyIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBjbGllbnQgb2JqZWN0OiAlc1xuIgorbXNnc3RyICJGYWlsZWQgdG8gY3JlYXRlIGNsaWVudCBvYmplY3Q6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjYwNCAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTc1CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MTQzIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzo1OQorIywgYy1mb3JtYXQKK21zZ2lkICJDbGllbnQgZmFpbHVyZSwgZXhpdGluZzogJXNcbiIKK21zZ3N0ciAiQ2xpZW50IGZhaWx1cmUsIGV4aXRpbmc6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjYyMyAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIldhaXRpbmcgZm9yIGRhZW1vbiAuLi5cbiIKK21zZ3N0ciAiV2FpdGluZyBmb3IgZGFlbW9uIC4uLlxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo2NDcKK21zZ2lkICIiCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFNob3cgdmVyc2lvblxuIgorIiAgICAtRCAtLWJyb3dzZS1kb21haW5zICBCcm93c2UgZm9yIGJyb3dzaW5nIGRvbWFpbnMgaW5zdGVhZCBvZiBzZXJ2aWNlc1xuIgorIiAgICAtYSAtLWFsbCAgICAgICAgICAgICBTaG93IGFsbCBzZXJ2aWNlcywgcmVnYXJkbGVzcyBvZiB0aGUgdHlwZVxuIgorIiAgICAtZCAtLWRvbWFpbj1ET01BSU4gICBUaGUgZG9tYWluIHRvIGJyb3dzZSBpblxuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBFbmFibGUgdmVyYm9zZSBtb2RlXG4iCisiICAgIC10IC0tdGVybWluYXRlICAgICAgIFRlcm1pbmF0ZSBhZnRlciBkdW1waW5nIGEgbW9yZSBvciBsZXNzIGNvbXBsZXRlICIKKyJsaXN0XG4iCisiICAgIC1jIC0tY2FjaGUgICAgICAgICAgIFRlcm1pbmF0ZSBhZnRlciBkdW1waW5nIGFsbCBlbnRyaWVzIGZyb20gdGhlIGNhY2hlXG4iCisiICAgIC1sIC0taWdub3JlLWxvY2FsICAgIElnbm9yZSBsb2NhbCBzZXJ2aWNlc1xuIgorIiAgICAtciAtLXJlc29sdmUgICAgICAgICBSZXNvbHZlIHNlcnZpY2VzIGZvdW5kXG4iCisiICAgIC1mIC0tbm8tZmFpbCAgICAgICAgIERvbid0IGZhaWwgaWYgdGhlIGRhZW1vbiBpcyBub3QgYXZhaWxhYmxlXG4iCisiICAgIC1wIC0tcGFyc2FibGUgICAgICAgIE91dHB1dCBpbiBwYXJzYWJsZSBmb3JtYXRcbiIKK21zZ3N0ciAiIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLUQgLS1icm93c2UtZG9tYWlucyAgQnJvd3NlIGZvciBicm93c2luZyBkb21haW5zIGluc3RlYWQgb2Ygc2VydmljZXNcbiIKKyIgICAgLWEgLS1hbGwgICAgICAgICAgICAgU2hvdyBhbGwgc2VydmljZXMsIHJlZ2FyZGxlc3Mgb2YgdGhlIHR5cGVcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgVGhlIGRvbWFpbiB0byBicm93c2UgaW5cbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgRW5hYmxlIHZlcmJvc2UgbW9kZVxuIgorIiAgICAtdCAtLXRlcm1pbmF0ZSAgICAgICBUZXJtaW5hdGUgYWZ0ZXIgZHVtcGluZyBhIG1vcmUgb3IgbGVzcyBjb21wbGV0ZSAiCisibGlzdFxuIgorIiAgICAtYyAtLWNhY2hlICAgICAgICAgICBUZXJtaW5hdGUgYWZ0ZXIgZHVtcGluZyBhbGwgZW50cmllcyBmcm9tIHRoZSBjYWNoZVxuIgorIiAgICAtbCAtLWlnbm9yZS1sb2NhbCAgICBJZ25vcmUgbG9jYWwgc2VydmljZXNcbiIKKyIgICAgLXIgLS1yZXNvbHZlICAgICAgICAgUmVzb2x2ZSBzZXJ2aWNlcyBmb3VuZFxuIgorIiAgICAtZiAtLW5vLWZhaWwgICAgICAgICBEb24ndCBmYWlsIGlmIHRoZSBkYWVtb24gaXMgbm90IGF2YWlsYWJsZVxuIgorIiAgICAtcCAtLXBhcnNhYmxlICAgICAgICBPdXRwdXQgaW4gcGFyc2FibGUgZm9ybWF0XG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjY2MAorbXNnaWQgIiIKKyIgICAgLWsgLS1uby1kYi1sb29rdXAgICAgRG9uJ3QgbG9va3VwIHNlcnZpY2UgdHlwZXNcbiIKKyIgICAgLWIgLS1kdW1wLWRiICAgICAgICAgRHVtcCBzZXJ2aWNlIHR5cGUgZGF0YWJhc2VcbiIKK21zZ3N0ciAiIgorIiAgICAtayAtLW5vLWRiLWxvb2t1cCAgICBEb24ndCBsb29rdXAgc2VydmljZSB0eXBlc1xuIgorIiAgICAtYiAtLWR1bXAtZGIgICAgICAgICBEdW1wIHNlcnZpY2UgdHlwZSBkYXRhYmFzZVxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo3NjYgLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjIxOQorIywgYy1mb3JtYXQKK21zZ2lkICJUb28gZmV3IGFyZ3VtZW50c1xuIgorbXNnc3RyICJUb28gZmV3IGFyZ3VtZW50c1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo4MjEgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjM3OAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI2NCAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgc2ltcGxlIHBvbGwgb2JqZWN0LlxuIgorbXNnc3RyICJGYWlsZWQgdG8gY3JlYXRlIHNpbXBsZSBwb2xsIG9iamVjdC5cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkVzdGFibGlzaGVkIHVuZGVyIG5hbWUgJyVzJ1xuIgorbXNnc3RyICJFc3RhYmxpc2hlZCB1bmRlciBuYW1lICclcydcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlcjogJXNcbiIKK21zZ3N0ciAiRmFpbGVkIHRvIHJlZ2lzdGVyOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTmFtZSBjb2xsaXNpb24sIHBpY2tpbmcgbmV3IG5hbWUgJyVzJy5cbiIKK21zZ3N0ciAiTmFtZSBjb2xsaXNpb24sIHBpY2tpbmcgbmV3IG5hbWUgJyVzJy5cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGVudHJ5IGdyb3VwOiAlc1xuIgorbXNnc3RyICJGYWlsZWQgdG8gY3JlYXRlIGVudHJ5IGdyb3VwOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgYWRkcmVzczogJXNcbiIKK21zZ3N0ciAiRmFpbGVkIHRvIGFkZCBhZGRyZXNzOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgc2VydmljZTogJXNcbiIKK21zZ3N0ciAiRmFpbGVkIHRvIGFkZCBzZXJ2aWNlOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgc3VidHlwZSAnJXMnOiAlc1xuIgorbXNnc3RyICJGYWlsZWQgdG8gYWRkIHN1YnR5cGUgJyVzJzogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE5MQorIywgYy1mb3JtYXQKK21zZ2lkICJIb3N0IG5hbWUgY29uZmxpY3RcbiIKK21zZ3N0ciAiSG9zdCBuYW1lIGNvbmZsaWN0XG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoyMTYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBbb3B0aW9uc10gJXMgPG5hbWU+IDx0eXBlPiA8cG9ydD4gWzx0eHQgLi4uPl1cbiIKKyIlcyBbb3B0aW9uc10gJXMgPGhvc3QtbmFtZT4gPGFkZHJlc3M+XG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFNob3cgdmVyc2lvblxuIgorIiAgICAtcyAtLXNlcnZpY2UgICAgICAgICBQdWJsaXNoIHNlcnZpY2VcbiIKKyIgICAgLWEgLS1hZGRyZXNzICAgICAgICAgUHVibGlzaCBhZGRyZXNzXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgRG9tYWluIHRvIHB1Ymxpc2ggc2VydmljZSBpblxuIgorIiAgICAtSCAtLWhvc3Q9RE9NQUlOICAgICBIb3N0IHdoZXJlIHNlcnZpY2UgcmVzaWRlc1xuIgorIiAgICAgICAtLXN1YnR5cGU9U1VCVFlQRSBBbiBhZGRpdGlvbmFsIHN1YnR5cGUgdG8gcmVnaXN0ZXIgdGhpcyBzZXJ2aWNlICIKKyJ3aXRoXG4iCisiICAgIC1SIC0tbm8tcmV2ZXJzZSAgICAgIERvIG5vdCBwdWJsaXNoIHJldmVyc2UgZW50cnkgd2l0aCBhZGRyZXNzXG4iCisiICAgIC1mIC0tbm8tZmFpbCAgICAgICAgIERvbid0IGZhaWwgaWYgdGhlIGRhZW1vbiBpcyBub3QgYXZhaWxhYmxlXG4iCittc2dzdHIgIiIKKyIlcyBbb3B0aW9uc10gJXMgPG5hbWU+IDx0eXBlPiA8cG9ydD4gWzx0eHQgLi4uPl1cbiIKKyIlcyBbb3B0aW9uc10gJXMgPGhvc3QtbmFtZT4gPGFkZHJlc3M+XG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFNob3cgdmVyc2lvblxuIgorIiAgICAtcyAtLXNlcnZpY2UgICAgICAgICBQdWJsaXNoIHNlcnZpY2VcbiIKKyIgICAgLWEgLS1hZGRyZXNzICAgICAgICAgUHVibGlzaCBhZGRyZXNzXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgRG9tYWluIHRvIHB1Ymxpc2ggc2VydmljZSBpblxuIgorIiAgICAtSCAtLWhvc3Q9RE9NQUlOICAgICBIb3N0IHdoZXJlIHNlcnZpY2UgcmVzaWRlc1xuIgorIiAgICAgICAtLXN1YnR5cGU9U1VCVFlQRSBBbiBhZGRpdGlvbmFsIHN1YnR5cGUgdG8gcmVnaXN0ZXIgdGhpcyBzZXJ2aWNlICIKKyJ3aXRoXG4iCisiICAgIC1mIC0tbm8tZmFpbCAgICAgICAgIERvbid0IGZhaWwgaWYgdGhlIGRhZW1vbiBpcyBub3QgYXZhaWxhYmxlXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozMDMgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjMxOAorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgbnVtYmVyIG9mIGFyZ3VtZW50c1xuIgorbXNnc3RyICJCYWQgbnVtYmVyIG9mIGFyZ3VtZW50c1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBwb3J0IG51bWJlcjogJXNcbiIKK21zZ3N0ciAiRmFpbGVkIHRvIHBhcnNlIHBvcnQgbnVtYmVyOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MzYxIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gY29tbWFuZCBzcGVjaWZpZWQuXG4iCittc2dzdHIgIk5vIGNvbW1hbmQgc3BlY2lmaWVkLlxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgaG9zdCBuYW1lICclcyc6ICVzXG4iCittc2dzdHIgIkZhaWxlZCB0byByZXNvbHZlIGhvc3QgbmFtZSAnJXMnOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIGFkZHJlc3MgJyVzJzogJXNcbiIKK21zZ3N0ciAiRmFpbGVkIHRvIHJlc29sdmUgYWRkcmVzcyAnJXMnOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBbb3B0aW9uc10gJXMgPGhvc3QgbmFtZSAuLi4+XG4iCisiJXMgW29wdGlvbnNdICVzIDxhZGRyZXNzIC4uLiA+XG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFNob3cgdmVyc2lvblxuIgorIiAgICAtbiAtLW5hbWUgICAgICAgICAgICBSZXNvbHZlIGhvc3QgbmFtZVxuIgorIiAgICAtYSAtLWFkZHJlc3MgICAgICAgICBSZXNvbHZlIGFkZHJlc3NcbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgRW5hYmxlIHZlcmJvc2UgbW9kZVxuIgorIiAgICAtNiAgICAgICAgICAgICAgICAgICBMb29rdXAgSVB2NiBhZGRyZXNzXG4iCisiICAgIC00ICAgICAgICAgICAgICAgICAgIExvb2t1cCBJUHY0IGFkZHJlc3NcbiIKK21zZ3N0ciAiIgorIiVzIFtvcHRpb25zXSAlcyA8aG9zdCBuYW1lIC4uLj5cbiIKKyIlcyBbb3B0aW9uc10gJXMgPGFkZHJlc3MgLi4uID5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgU2hvdyB2ZXJzaW9uXG4iCisiICAgIC1uIC0tbmFtZSAgICAgICAgICAgIFJlc29sdmUgaG9zdCBuYW1lXG4iCisiICAgIC1hIC0tYWRkcmVzcyAgICAgICAgIFJlc29sdmUgYWRkcmVzc1xuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBFbmFibGUgdmVyYm9zZSBtb2RlXG4iCisiICAgIC02ICAgICAgICAgICAgICAgICAgIExvb2t1cCBJUHY2IGFkZHJlc3NcbiIKKyIgICAgLTQgICAgICAgICAgICAgICAgICAgTG9va3VwIElQdjQgYWRkcmVzc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6Mjk5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBob3N0IG5hbWUgcmVzb2x2ZXI6ICVzXG4iCittc2dzdHIgIkZhaWxlZCB0byBjcmVhdGUgaG9zdCBuYW1lIHJlc29sdmVyOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBhZGRyZXNzICclcydcbiIKK21zZ3N0ciAiRmFpbGVkIHRvIHBhcnNlIGFkZHJlc3MgJyVzJ1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MzE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgYWRkcmVzcyByZXNvbHZlcjogJXNcbiIKK21zZ3N0ciAiRmFpbGVkIHRvIGNyZWF0ZSBhZGRyZXNzIHJlc29sdmVyOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFtvcHRpb25zXSA8bmV3IGhvc3QgbmFtZT5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgU2hvdyB2ZXJzaW9uXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKK21zZ3N0ciAiIgorIiVzIFtvcHRpb25zXSA8bmV3IGhvc3QgbmFtZT5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgU2hvdyB2ZXJzaW9uXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMsIGV4cGVjdGluZyBleGFjdGx5IG9uZS5cbiIKK21zZ3N0ciAiSW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzLCBleHBlY3RpbmcgZXhhY3RseSBvbmUuXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSG9zdCBuYW1lIHN1Y2Nlc3NmdWxseSBjaGFuZ2VkIHRvICVzXG4iCittc2dzdHIgIkhvc3QgbmFtZSBzdWNjZXNzZnVsbHkgY2hhbmdlZCB0byAlc1xuIgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL3BvL2VuX05aLnBvIGIvYXZhaGktMC42LjMxL3BvL2VuX05aLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmNWI4NDkKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvcG8vZW5fTloucG8KQEAgLTAsMCArMSw4NTggQEAKKyMgQnJpdGlzaCBFbmdsaXNoIHRyYW5zbGF0aW9uIG9mIEF2YWhpCisjIENvcHlyaWdodCAoQykgMjAwOSBBdmFoaSdzIENPUFlSSUdIVCBIT0xERVIKKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2VuY2UgYXMgdGhlIEF2YWhpIHBhY2thZ2UuCisjIEJydWNlIENvd2FuIDxiY293YW5AZmFzdG1haWwuY28udWs+LCAyMDA5LgorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogYXZhaGlcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTEtMDQtMDIgMDM6MjMrMDIwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDktMTEtMTEgMTc6MDArMDAwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogQnJ1Y2UgQ293YW4gPGJjb3dhbkBmYXN0bWFpbC5jby51az5cbiIKKyJMYW5ndWFnZS1UZWFtOiBCcml0aXNoIEVuZ2xpc2ggPGVuQGxpLm9yZz5cbiIKKyJMYW5ndWFnZTogXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KCBuICE9IDEgKTtcbiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzAKK21zZ2lkICJPSyIKK21zZ3N0ciAiT0siCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjMxCittc2dpZCAiT3BlcmF0aW9uIGZhaWxlZCIKK21zZ3N0ciAiT3BlcmF0aW9uIGZhaWxlZCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzIKK21zZ2lkICJCYWQgc3RhdGUiCittc2dzdHIgIkJhZCBzdGF0ZSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzMKK21zZ2lkICJJbnZhbGlkIGhvc3QgbmFtZSIKK21zZ3N0ciAiSW52YWxpZCBob3N0IG5hbWUiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM0Cittc2dpZCAiSW52YWxpZCBkb21haW4gbmFtZSIKK21zZ3N0ciAiSW52YWxpZCBkb21haW4gbmFtZSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzUKK21zZ2lkICJObyBzdWl0YWJsZSBuZXR3b3JrIHByb3RvY29sIGF2YWlsYWJsZSIKK21zZ3N0ciAiTm8gc3VpdGFibGUgbmV0d29yayBwcm90b2NvbCBhdmFpbGFibGUiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM2Cittc2dpZCAiSW52YWxpZCBETlMgVFRMIgorbXNnc3RyICJJbnZhbGlkIEROUyBUVEwiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM3Cittc2dpZCAiUmVzb3VyY2UgcmVjb3JkIGtleSBpcyBwYXR0ZXJuIgorbXNnc3RyICJSZXNvdXJjZSByZWNvcmQga2V5IGlzIHBhdHRlcm4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM4Cittc2dpZCAiTG9jYWwgbmFtZSBjb2xsaXNpb24iCittc2dzdHIgIkxvY2FsIG5hbWUgY29sbGlzaW9uIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozOQorbXNnaWQgIkludmFsaWQgcmVjb3JkIgorbXNnc3RyICJJbnZhbGlkIHJlY29yZCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDEKK21zZ2lkICJJbnZhbGlkIHNlcnZpY2UgbmFtZSIKK21zZ3N0ciAiSW52YWxpZCBzZXJ2aWNlIG5hbWUiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQyCittc2dpZCAiSW52YWxpZCBzZXJ2aWNlIHR5cGUiCittc2dzdHIgIkludmFsaWQgc2VydmljZSB0eXBlIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0MworbXNnaWQgIkludmFsaWQgcG9ydCBudW1iZXIiCittc2dzdHIgIkludmFsaWQgcG9ydCBudW1iZXIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQ0Cittc2dpZCAiSW52YWxpZCByZWNvcmQga2V5IgorbXNnc3RyICJJbnZhbGlkIHJlY29yZCBrZXkiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQ1Cittc2dpZCAiSW52YWxpZCBhZGRyZXNzIgorbXNnc3RyICJJbnZhbGlkIGFkZHJlc3MiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQ2Cittc2dpZCAiVGltZW91dCByZWFjaGVkIgorbXNnc3RyICJUaW1lb3V0IHJlYWNoZWQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQ3Cittc2dpZCAiVG9vIG1hbnkgY2xpZW50cyIKK21zZ3N0ciAiVG9vIG1hbnkgY2xpZW50cyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDgKK21zZ2lkICJUb28gbWFueSBvYmplY3RzIgorbXNnc3RyICJUb28gbWFueSBvYmplY3RzIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0OQorbXNnaWQgIlRvbyBtYW55IGVudHJpZXMiCittc2dzdHIgIlRvbyBtYW55IGVudHJpZXMiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjUwCittc2dpZCAiT1MgRXJyb3IiCittc2dzdHIgIk9TIEVycm9yIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1MgorbXNnaWQgIkFjY2VzcyBkZW5pZWQiCittc2dzdHIgIkFjY2VzcyBkZW5pZWQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjUzCittc2dpZCAiSW52YWxpZCBvcGVyYXRpb24iCittc2dzdHIgIkludmFsaWQgb3BlcmF0aW9uIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1NAorbXNnaWQgIkFuIHVuZXhwZWN0ZWQgRC1CdXMgZXJyb3Igb2NjdXJlZCIKK21zZ3N0ciAiQW4gdW5leHBlY3RlZCBELUJ1cyBlcnJvciBvY2N1cnJlZCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTUKK21zZ2lkICJEYWVtb24gY29ubmVjdGlvbiBmYWlsZWQiCittc2dzdHIgIkRhZW1vbiBjb25uZWN0aW9uIGZhaWxlZCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTYKK21zZ2lkICJNZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICJNZW1vcnkgZXhoYXVzdGVkIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1NworbXNnaWQgIlRoZSBvYmplY3QgcGFzc2VkIGluIHdhcyBub3QgdmFsaWQiCittc2dzdHIgIlRoZSBvYmplY3QgcGFzc2VkIGluIHdhcyBub3QgdmFsaWQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU4Cittc2dpZCAiRGFlbW9uIG5vdCBydW5uaW5nIgorbXNnc3RyICJEYWVtb24gbm90IHJ1bm5pbmciCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU5Cittc2dpZCAiSW52YWxpZCBpbnRlcmZhY2UgaW5kZXgiCittc2dzdHIgIkludmFsaWQgaW50ZXJmYWNlIGluZGV4IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2MAorbXNnaWQgIkludmFsaWQgcHJvdG9jb2wgc3BlY2lmaWNhdGlvbiIKK21zZ3N0ciAiSW52YWxpZCBwcm90b2NvbCBzcGVjaWZpY2F0aW9uIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2MQorbXNnaWQgIkludmFsaWQgZmxhZ3MiCittc2dzdHIgIkludmFsaWQgZmxhZ3MiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjYzCittc2dpZCAiTm90IGZvdW5kIgorbXNnc3RyICJOb3QgZm91bmQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY0Cittc2dpZCAiSW52YWxpZCBjb25maWd1cmF0aW9uIgorbXNnc3RyICJJbnZhbGlkIGNvbmZpZ3VyYXRpb24iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY1Cittc2dpZCAiVmVyc2lvbiBtaXNtYXRjaCIKK21zZ3N0ciAiVmVyc2lvbiBtaXNtYXRjaCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjYKK21zZ2lkICJJbnZhbGlkIHNlcnZpY2Ugc3VidHlwZSIKK21zZ3N0ciAiSW52YWxpZCBzZXJ2aWNlIHN1YnR5cGUiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY3Cittc2dpZCAiSW52YWxpZCBwYWNrZXQiCittc2dzdHIgIkludmFsaWQgcGFja2V0IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2OAorbXNnaWQgIkludmFsaWQgRE5TIHJldHVybiBjb2RlIgorbXNnc3RyICJJbnZhbGlkIEROUyByZXR1cm4gY29kZSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjkKK21zZ2lkICJETlMgZmFpbHVyZTogRk9STUVSUiIKK21zZ3N0ciAiRE5TIGZhaWx1cmU6IEZPUk1FUlIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjcwCittc2dpZCAiRE5TIGZhaWx1cmU6IFNFUlZGQUlMIgorbXNnc3RyICJETlMgZmFpbHVyZTogU0VSVkZBSUwiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjcxCittc2dpZCAiRE5TIGZhaWx1cmU6IE5YRE9NQUlOIgorbXNnc3RyICJETlMgZmFpbHVyZTogTlhET01BSU4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjcyCittc2dpZCAiRE5TIGZhaWx1cmU6IE5PVElNUCIKK21zZ3N0ciAiRE5TIGZhaWx1cmU6IE5PVElNUCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzQKK21zZ2lkICJETlMgZmFpbHVyZTogUkVGVVNFRCIKK21zZ3N0ciAiRE5TIGZhaWx1cmU6IFJFRlVTRUQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc1Cittc2dpZCAiRE5TIGZhaWx1cmU6IFlYRE9NQUlOIgorbXNnc3RyICJETlMgZmFpbHVyZTogWVhET01BSU4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc2Cittc2dpZCAiRE5TIGZhaWx1cmU6IFlYUlJTRVQiCittc2dzdHIgIkROUyBmYWlsdXJlOiBZWFJSU0VUIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3NworbXNnaWQgIkROUyBmYWlsdXJlOiBOWFJSU0VUIgorbXNnc3RyICJETlMgZmFpbHVyZTogTlhSUlNFVCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzgKK21zZ2lkICJETlMgZmFpbHVyZTogTk9UQVVUSCIKK21zZ3N0ciAiRE5TIGZhaWx1cmU6IE5PVEFVVEgiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc5Cittc2dpZCAiRE5TIGZhaWx1cmU6IE5PVFpPTkUiCittc2dzdHIgIkROUyBmYWlsdXJlOiBOT1RaT05FIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4MAorbXNnaWQgIkludmFsaWQgUkRBVEEiCittc2dzdHIgIkludmFsaWQgUkRBVEEiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjgxCittc2dpZCAiSW52YWxpZCBETlMgdHlwZSIKK21zZ3N0ciAiSW52YWxpZCBETlMgdHlwZSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODIKK21zZ2lkICJJbnZhbGlkIEROUyBjbGFzcyIKK21zZ3N0ciAiSW52YWxpZCBETlMgY2xhc3MiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjgzCittc2dpZCAiTm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiTm90IHN1cHBvcnRlZCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODUKK21zZ2lkICJOb3QgcGVybWl0dGVkIgorbXNnc3RyICJOb3QgcGVybWl0dGVkIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4NgorbXNnaWQgIkludmFsaWQgYXJndW1lbnQiCittc2dzdHIgIkludmFsaWQgYXJndW1lbnQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjg3Cittc2dpZCAiSXMgZW1wdHkiCittc2dzdHIgIklzIGVtcHR5IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4OAorbXNnaWQgIlRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uIGlzIGludmFsaWQgYmVjYXVzZSByZWR1bmRhbnQiCittc2dzdHIgIlRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uIGlzIGludmFsaWQgYmVjYXVzZSByZWR1bmRhbnQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjk0Cittc2dpZCAiSW52YWxpZCBFcnJvciBDb2RlIgorbXNnc3RyICJJbnZhbGlkIEVycm9yIENvZGUiCisKKyM6IC4uL2F2YWhpLWRpc2NvdmVyLXN0YW5kYWxvbmUvYXZhaGktZGlzY292ZXIudWkuaDoxCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6NzYKK21zZ2lkICI8aT5ObyBzZXJ2aWNlIGN1cnJlbnRseSBzZWxlY3RlZC48L2k+IgorbXNnc3RyICI8aT5ObyBzZXJ2aWNlIGN1cnJlbnRseSBzZWxlY3RlZC48L2k+IgorCisjOiAuLi9hdmFoaS1kaXNjb3Zlci1zdGFuZGFsb25lL2F2YWhpLWRpc2NvdmVyLnVpLmg6MgorbXNnaWQgIkF2YWhpIERpc2NvdmVyeSIKK21zZ3N0ciAiQXZhaGkgRGlzY292ZXJ5IgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIuZGVza3RvcC5pbi5pbi5oOjEKK21zZ2lkICJBdmFoaSBaZXJvY29uZiBCcm93c2VyIgorbXNnc3RyICJBdmFoaSBaZXJvY29uZiBCcm93c2VyIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIuZGVza3RvcC5pbi5pbi5oOjIKK21zZ2lkICJCcm93c2UgZm9yIFplcm9jb25mIHNlcnZpY2VzIGF2YWlsYWJsZSBvbiB5b3VyIG5ldHdvcmsiCittc2dzdHIgIkJyb3dzZSBmb3IgWmVyb2NvbmYgc2VydmljZXMgYXZhaWxhYmxlIG9uIHlvdXIgbmV0d29yayIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIyNAorbXNnaWQgIlRYVCIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI2CisjLCBmdXp6eQorbXNnaWQgIlRYVCBEYXRhOiIKK21zZ3N0ciAiVFhUIERhdGEiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMjYKKyMsIGZ1enp5Cittc2dpZCAiZW1wdHkiCittc2dzdHIgIklzIGVtcHR5IgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI4CisjLCBmdXp6eQorbXNnaWQgIlNlcnZpY2UgVHlwZToiCittc2dzdHIgIlNlcnZpY2UgVHlwZSIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIyOQorIywgZnV6enkKK21zZ2lkICJTZXJ2aWNlIE5hbWU6IgorbXNnc3RyICJTZXJ2aWNlIE5hbWUiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMzAKKyMsIGZ1enp5Cittc2dpZCAiRG9tYWluIE5hbWU6IgorbXNnc3RyICJEb21haW4iCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMzEKK21zZ2lkICJJbnRlcmZhY2U6IgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMzIKKyMsIGZ1enp5Cittc2dpZCAiQWRkcmVzczoiCittc2dzdHIgIkFkZHJlc3MiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTg1Cittc2dpZCAiQnJvd3NlIFNlcnZpY2UgVHlwZXMiCittc2dzdHIgIkJyb3dzZSBTZXJ2aWNlIFR5cGVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE4NQorbXNnaWQgIkEgTlVMTCB0ZXJtaW5hdGVkIGxpc3Qgb2Ygc2VydmljZSB0eXBlcyB0byBicm93c2UgZm9yIgorbXNnc3RyICJBIE5VTEwgdGVybWluYXRlZCBsaXN0IG9mIHNlcnZpY2UgdHlwZXMgdG8gYnJvd3NlIGZvciIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxOTAKK21zZ2lkICJEb21haW4iCittc2dzdHIgIkRvbWFpbiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxOTAKK21zZ2lkICJUaGUgZG9tYWluIHRvIGJyb3dzZSBpbiwgb3IgTlVMTCBmb3IgdGhlIGRlZmF1bHQgZG9tYWluIgorbXNnc3RyICJUaGUgZG9tYWluIHRvIGJyb3dzZSBpbiwgb3IgTlVMTCBmb3IgdGhlIGRlZmF1bHQgZG9tYWluIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE5NgorbXNnaWQgIlNlcnZpY2UgVHlwZSIKK21zZ3N0ciAiU2VydmljZSBUeXBlIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE5NgorbXNnaWQgIlRoZSBzZXJ2aWNlIHR5cGUgb2YgdGhlIHNlbGVjdGVkIHNlcnZpY2UiCittc2dzdHIgIlRoZSBzZXJ2aWNlIHR5cGUgb2YgdGhlIHNlbGVjdGVkIHNlcnZpY2UiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjAyIC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTAyMworbXNnaWQgIlNlcnZpY2UgTmFtZSIKK21zZ3N0ciAiU2VydmljZSBOYW1lIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIwMgorbXNnaWQgIlRoZSBzZXJ2aWNlIG5hbWUgb2YgdGhlIHNlbGVjdGVkIHNlcnZpY2UiCittc2dzdHIgIlRoZSBzZXJ2aWNlIG5hbWUgb2YgdGhlIHNlbGVjdGVkIHNlcnZpY2UiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjA4Cittc2dpZCAiQWRkcmVzcyIKK21zZ3N0ciAiQWRkcmVzcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMDgKK21zZ2lkICJUaGUgYWRkcmVzcyBvZiB0aGUgcmVzb2x2ZWQgc2VydmljZSIKK21zZ3N0ciAiVGhlIGFkZHJlc3Mgb2YgdGhlIHJlc29sdmVkIHNlcnZpY2UiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjEzCittc2dpZCAiUG9ydCIKK21zZ3N0ciAiUG9ydCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMTMKK21zZ2lkICJUaGUgSVAgcG9ydCBudW1iZXIgb2YgdGhlIHJlc29sdmVkIHNlcnZpY2UiCittc2dzdHIgIlRoZSBJUCBwb3J0IG51bWJlciBvZiB0aGUgcmVzb2x2ZWQgc2VydmljZSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMTkKK21zZ2lkICJIb3N0IE5hbWUiCittc2dzdHIgIkhvc3QgTmFtZSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMTkKK21zZ2lkICJUaGUgaG9zdCBuYW1lIG9mIHRoZSByZXNvbHZlZCBzZXJ2aWNlIgorbXNnc3RyICJUaGUgaG9zdCBuYW1lIG9mIHRoZSByZXNvbHZlZCBzZXJ2aWNlIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIyNQorbXNnaWQgIlRYVCBEYXRhIgorbXNnc3RyICJUWFQgRGF0YSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMjUKK21zZ2lkICJUaGUgVFhUIGRhdGEgb2YgdGhlIHJlc29sdmVkIHNlcnZpY2UiCittc2dzdHIgIlRoZSBUWFQgZGF0YSBvZiB0aGUgcmVzb2x2ZWQgc2VydmljZSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMzAKKyMsIGZ1enp5Cittc2dpZCAiUmVzb2x2ZSBTZXJ2aWNlIgorbXNnc3RyICJSZXNvbHZlIHNlcnZpY2UiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjMwCittc2dpZCAiUmVzb2x2ZSB0aGUgc2VsZWN0ZWQgc2VydmljZSBhdXRvbWF0aWNhbGx5IGJlZm9yZSByZXR1cm5pbmciCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMzYKKyMsIGZ1enp5Cittc2dpZCAiUmVzb2x2ZSBTZXJ2aWNlIEhvc3QgTmFtZSIKK21zZ3N0ciAiUmVzb2x2ZSBzZXJ2aWNlIGhvc3QgbmFtZSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMzYKK21zZ2lkICIiCisiUmVzb2x2ZSB0aGUgaG9zdCBuYW1lIG9mIHRoZSBzZWxlY3RlZCBzZXJ2aWNlIGF1dG9tYXRpY2FsbHkgYmVmb3JlIHJldHVybmluZyIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjI0MgorbXNnaWQgIkFkZHJlc3MgZmFtaWx5IgorbXNnc3RyICJBZGRyZXNzIGZhbWlseSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyNDIKK21zZ2lkICJUaGUgYWRkcmVzcyBmYW1pbHkgZm9yIGhvc3QgbmFtZSByZXNvbHV0aW9uIgorbXNnc3RyICJUaGUgYWRkcmVzcyBmYW1pbHkgZm9yIGhvc3QgbmFtZSByZXNvbHV0aW9uIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjMyNgorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFoaSBjbGllbnQgZmFpbHVyZTogJXMiCittc2dzdHIgIkF2YWhpIGNsaWVudCBmYWlsdXJlOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzozODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaGkgcmVzb2x2ZXIgZmFpbHVyZTogJXMiCittc2dzdHIgIkF2YWhpIHJlc29sdmVyIGZhaWx1cmU6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjUxOAorIywgYy1mb3JtYXQKK21zZ2lkICJCcm93c2luZyBmb3Igc2VydmljZSB0eXBlICVzIGluIGRvbWFpbiAlcyBmYWlsZWQ6ICVzIgorbXNnc3RyICJCcm93c2luZyBmb3Igc2VydmljZSB0eXBlICVzIGluIGRvbWFpbiAlcyBmYWlsZWQ6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjUxOSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoxNjgKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjE2OSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoxNzgKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjE3OQorbXNnaWQgIm4vYSIKK21zZ3N0ciAibi9hIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjY0OQorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFoaSBkb21haW4gYnJvd3NlciBmYWlsdXJlOiAlcyIKK21zZ3N0ciAiQXZhaGkgZG9tYWluIGJyb3dzZXIgZmFpbHVyZTogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6Njg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWFkIEF2YWhpIGRvbWFpbjogJXMiCittc2dzdHIgIkZhaWxlZCB0byByZWFkIEF2YWhpIGRvbWFpbjogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NzA2Cittc2dpZCAiQnJvd3NlIHNlcnZpY2UgdHlwZSBsaXN0IGlzIGVtcHR5ISIKK21zZ3N0ciAiQnJvd3NlIHNlcnZpY2UgdHlwZSBsaXN0IGlzIGVtcHR5ISIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo3MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNvbm5lY3QgdG8gQXZhaGkgc2VydmVyOiAlcyIKK21zZ3N0ciAiRmFpbGVkIHRvIGNvbm5lY3QgdG8gQXZhaGkgc2VydmVyOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo3MzUKK21zZ2lkICJCcm93c2luZyBmb3Igc2VydmljZXMgb24gPGI+bG9jYWwgbmV0d29yazwvYj46IgorbXNnc3RyICJCcm93c2luZyBmb3Igc2VydmljZXMgb24gPGI+bG9jYWwgbmV0d29yazwvYj46IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjczNworIywgYy1mb3JtYXQKK21zZ2lkICJCcm93c2luZyBmb3Igc2VydmljZXMgaW4gZG9tYWluIDxiPiVzPC9iPjoiCittc2dzdHIgIkJyb3dzaW5nIGZvciBzZXJ2aWNlcyBpbiBkb21haW4gPGI+JXM8L2I+OiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo3NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBicm93c2VyIGZvciAlczogJXMiCittc2dzdHIgIkZhaWxlZCB0byBjcmVhdGUgYnJvd3NlciBmb3IgJXM6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjkwMworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIHJlc29sdmVyIGZvciAlcyBvZiB0eXBlICVzIGluIGRvbWFpbiAlczogJXMiCittc2dzdHIgIkZhaWxlZCB0byBjcmVhdGUgcmVzb2x2ZXIgZm9yICVzIG9mIHR5cGUgJXMgaW4gZG9tYWluICVzOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo5NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBkb21haW4gYnJvd3NlcjogJXMiCittc2dzdHIgIkZhaWxlZCB0byBjcmVhdGUgZG9tYWluIGJyb3dzZXI6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjk4OQorbXNnaWQgIkNoYW5nZSBkb21haW4iCittc2dzdHIgIkNoYW5nZSBkb21haW4iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTAzMSAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNjIKK21zZ2lkICJCcm93c2luZy4uLiIKK21zZ3N0ciAiQnJvd3NpbmcuLi4iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTEyMAorbXNnaWQgIkluaXRpYWxpemluZy4uLiIKK21zZ3N0ciAiSW5pdGlhbGlzaW5nLi4uIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNDQKK21zZ2lkICJMb2NhdGlvbiIKK21zZ3N0ciAiTG9jYXRpb24iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTE0OSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NTMKK21zZ2lkICJOYW1lIgorbXNnc3RyICJOYW1lIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNTQgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTUzCittc2dpZCAiVHlwZSIKK21zZ3N0ciAiVHlwZSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTY2Cittc2dpZCAiX0RvbWFpbi4uLiIKK21zZ3N0ciAiX0RvbWFpbi4uLiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBbb3B0aW9uc11cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLXMgLS1zc2ggICAgICAgICAgICAgQnJvd3NlIFNTSCBzZXJ2ZXJzXG4iCisiICAgIC12IC0tdm5jICAgICAgICAgICAgIEJyb3dzZSBWTkMgc2VydmVyc1xuIgorIiAgICAtUyAtLXNoZWxsICAgICAgICAgICBCcm93c2UgYm90aCBTU0ggYW5kIFZOQ1xuIgorIiAgICAtZCAtLWRvbWFpbj1ET01BSU4gICBUaGUgZG9tYWluIHRvIGJyb3dzZSBpblxuIgorbXNnc3RyICIiCisiJXMgW29wdGlvbnNdXG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1zIC0tc3NoICAgICAgICAgICAgIEJyb3dzZSBTU0ggc2VydmVyc1xuIgorIiAgICAtdiAtLXZuYyAgICAgICAgICAgICBCcm93c2UgVk5DIHNlcnZlcnNcbiIKKyIgICAgLVMgLS1zaGVsbCAgICAgICAgICAgQnJvd3NlIGJvdGggU1NIIGFuZCBWTkNcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgVGhlIGRvbWFpbiB0byBicm93c2UgaW5cbiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjEwMSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo3NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG9vIG1hbnkgYXJndW1lbnRzXG4iCittc2dzdHIgIlRvbyBtYW55IGFyZ3VtZW50c1xuIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTQ5Cittc2dpZCAiQ2hvb3NlIFNoZWxsIFNlcnZlciIKK21zZ3N0ciAiQ2hvb3NlIFNoZWxsIFNlcnZlciIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE1MQorbXNnaWQgIkRlc2t0b3AiCittc2dzdHIgIkRlc2t0b3AiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNTIKK21zZ2lkICJUZXJtaW5hbCIKK21zZ3N0ciAiVGVybWluYWwiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNTYKK21zZ2lkICJDaG9vc2UgVk5DIHNlcnZlciIKK21zZ3N0ciAiQ2hvb3NlIFZOQyBzZXJ2ZXIiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNjEKK21zZ2lkICJDaG9vc2UgU1NIIHNlcnZlciIKK21zZ3N0ciAiQ2hvb3NlIFNTSCBzZXJ2ZXIiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29ubmVjdGluZyB0byAnJXMnIC4uLlxuIgorbXNnc3RyICJDb25uZWN0aW5nIHRvICclcycgLi4uXG4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoyNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhlY2xwKCkgZmFpbGVkOiAlc1xuIgorbXNnc3RyICJleGVjbHAoKSBmYWlsZWQ6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FuY2VsZWQuXG4iCittc2dzdHIgIkNhbmNlbGxlZC5cbiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5kZXNrdG9wLmluLmluLmg6MQorbXNnaWQgIkF2YWhpIFNTSCBTZXJ2ZXIgQnJvd3NlciIKK21zZ3N0ciAiQXZhaGkgU1NIIFNlcnZlciBCcm93c2VyIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmRlc2t0b3AuaW4uaW4uaDoyCittc2dpZCAiQnJvd3NlIGZvciBaZXJvY29uZi1lbmFibGVkIFNTSCBTZXJ2ZXJzIgorbXNnc3RyICJCcm93c2UgZm9yIFplcm9jb25mLWVuYWJsZWQgU1NIIFNlcnZlcnMiCisKKyM6IC4uL2F2YWhpLXVpL2J2bmMuZGVza3RvcC5pbi5pbi5oOjEKK21zZ2lkICJBdmFoaSBWTkMgU2VydmVyIEJyb3dzZXIiCittc2dzdHIgIkF2YWhpIFZOQyBTZXJ2ZXIgQnJvd3NlciIKKworIzogLi4vYXZhaGktdWkvYnZuYy5kZXNrdG9wLmluLmluLmg6MgorbXNnaWQgIkJyb3dzZSBmb3IgWmVyb2NvbmYtZW5hYmxlZCBWTkMgU2VydmVycyIKK21zZ3N0ciAiQnJvd3NlIGZvciBaZXJvY29uZi1lbmFibGVkIFZOQyBTZXJ2ZXJzIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoxMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiOiBBbGwgZm9yIG5vd1xuIgorbXNnc3RyICI6IEFsbCBmb3Igbm93XG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjExOAorIywgYy1mb3JtYXQKK21zZ2lkICI6IENhY2hlIGV4aGF1c3RlZFxuIgorbXNnc3RyICI6IENhY2hlIGV4aGF1c3RlZFxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoyMzkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIHNlcnZpY2UgJyVzJyBvZiB0eXBlICclcycgaW4gZG9tYWluICclcyc6ICVzXG4iCittc2dzdHIgIkZhaWxlZCB0byByZXNvbHZlIHNlcnZpY2UgJyVzJyBvZiB0eXBlICclcycgaW4gZG9tYWluICclcyc6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjM0MAorIywgYy1mb3JtYXQKK21zZ2lkICJzZXJ2aWNlX2Jyb3dzZXIgZmFpbGVkOiAlc1xuIgorbXNnc3RyICJzZXJ2aWNlX2Jyb3dzZXIgZmFpbGVkOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzozNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXZhaGlfc2VydmljZV9icm93c2VyX25ldygpIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAiYXZhaGlfc2VydmljZV9icm93c2VyX25ldygpIGZhaWxlZDogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgInNlcnZpY2VfdHlwZV9icm93c2VyIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAic2VydmljZV90eXBlX2Jyb3dzZXIgZmFpbGVkOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo0NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXZhaGlfc2VydmljZV90eXBlX2Jyb3dzZXJfbmV3KCkgZmFpbGVkOiAlc1xuIgorbXNnc3RyICJhdmFoaV9zZXJ2aWNlX3R5cGVfYnJvd3Nlcl9uZXcoKSBmYWlsZWQ6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjUxOQorIywgYy1mb3JtYXQKK21zZ2lkICJhdmFoaV9kb21haW5fYnJvd3Nlcl9uZXcoKSBmYWlsZWQ6ICVzXG4iCittc2dzdHIgImF2YWhpX2RvbWFpbl9icm93c2VyX25ldygpIGZhaWxlZDogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTM1IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozOTQKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyODAgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE2OAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcXVlcnkgdmVyc2lvbiBzdHJpbmc6ICVzXG4iCittc2dzdHIgIkZhaWxlZCB0byBxdWVyeSB2ZXJzaW9uIHN0cmluZzogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTQwIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozOTkKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyODUgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE3MworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcXVlcnkgaG9zdCBuYW1lOiAlc1xuIgorbXNnc3RyICJGYWlsZWQgdG8gcXVlcnkgaG9zdCBuYW1lOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NDQgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjQwMworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI4OSAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlcnZlciB2ZXJzaW9uOiAlczsgSG9zdCBuYW1lOiAlc1xuIgorbXNnc3RyICJTZXJ2ZXIgdmVyc2lvbjogJXM7IEhvc3QgbmFtZTogJXNcbiIKKworIy4gVHJhbnNsYXRvcnM6IFRoaXMgaXMgYSBjb2x1bW4gaGVhZGluZyB3aXRoIGFiYnJldmlhdGlvbnMgZm9yCisjLiAqICAgRXZlbnQgKCsvLSksIE5ldHdvcmsgSW50ZXJmYWNlLCBQcm90b2NvbCAoSVB2NC92NiksIERvbWFpbgorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUgSWZjZSBQcm90IERvbWFpblxuIgorbXNnc3RyICJFIElmY2UgUHJvdCBEb21haW5cbiIKKworIy4gVHJhbnNsYXRvcnM6IFRoaXMgaXMgYSBjb2x1bW4gaGVhZGluZyB3aXRoIGFiYnJldmlhdGlvbnMgZm9yCisjLiAqICAgRXZlbnQgKCsvLSksIE5ldHdvcmsgSW50ZXJmYWNlLCBQcm90b2NvbCAoSVB2NC92NiksIERvbWFpbgorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUgSWZjZSBQcm90ICUtKnMgJS0yMHMgRG9tYWluXG4iCittc2dzdHIgIkUgSWZjZSBQcm90ICUtKnMgJS0yMHMgRG9tYWluXG4iCisKKyMuIFdlIGhhdmUgYmVlbiBkaXNjb25uZWN0ZWQsIHNvIGxldCByZWNvbm5lY3QKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU4NSAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkRpc2Nvbm5lY3RlZCwgcmVjb25uZWN0aW5nIC4uLlxuIgorbXNnc3RyICJEaXNjb25uZWN0ZWQsIHJlY29ubmVjdGluZyAuLi5cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTk5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjgyOQorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE3MCAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6Mzg2CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjcyIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBjbGllbnQgb2JqZWN0OiAlc1xuIgorbXNnc3RyICJGYWlsZWQgdG8gY3JlYXRlIGNsaWVudCBvYmplY3Q6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjYwNCAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTc1CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MTQzIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzo1OQorIywgYy1mb3JtYXQKK21zZ2lkICJDbGllbnQgZmFpbHVyZSwgZXhpdGluZzogJXNcbiIKK21zZ3N0ciAiQ2xpZW50IGZhaWx1cmUsIGV4aXRpbmc6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjYyMyAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIldhaXRpbmcgZm9yIGRhZW1vbiAuLi5cbiIKK21zZ3N0ciAiV2FpdGluZyBmb3IgZGFlbW9uIC4uLlxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo2NDcKK21zZ2lkICIiCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFNob3cgdmVyc2lvblxuIgorIiAgICAtRCAtLWJyb3dzZS1kb21haW5zICBCcm93c2UgZm9yIGJyb3dzaW5nIGRvbWFpbnMgaW5zdGVhZCBvZiBzZXJ2aWNlc1xuIgorIiAgICAtYSAtLWFsbCAgICAgICAgICAgICBTaG93IGFsbCBzZXJ2aWNlcywgcmVnYXJkbGVzcyBvZiB0aGUgdHlwZVxuIgorIiAgICAtZCAtLWRvbWFpbj1ET01BSU4gICBUaGUgZG9tYWluIHRvIGJyb3dzZSBpblxuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBFbmFibGUgdmVyYm9zZSBtb2RlXG4iCisiICAgIC10IC0tdGVybWluYXRlICAgICAgIFRlcm1pbmF0ZSBhZnRlciBkdW1waW5nIGEgbW9yZSBvciBsZXNzIGNvbXBsZXRlICIKKyJsaXN0XG4iCisiICAgIC1jIC0tY2FjaGUgICAgICAgICAgIFRlcm1pbmF0ZSBhZnRlciBkdW1waW5nIGFsbCBlbnRyaWVzIGZyb20gdGhlIGNhY2hlXG4iCisiICAgIC1sIC0taWdub3JlLWxvY2FsICAgIElnbm9yZSBsb2NhbCBzZXJ2aWNlc1xuIgorIiAgICAtciAtLXJlc29sdmUgICAgICAgICBSZXNvbHZlIHNlcnZpY2VzIGZvdW5kXG4iCisiICAgIC1mIC0tbm8tZmFpbCAgICAgICAgIERvbid0IGZhaWwgaWYgdGhlIGRhZW1vbiBpcyBub3QgYXZhaWxhYmxlXG4iCisiICAgIC1wIC0tcGFyc2FibGUgICAgICAgIE91dHB1dCBpbiBwYXJzYWJsZSBmb3JtYXRcbiIKK21zZ3N0ciAiIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLUQgLS1icm93c2UtZG9tYWlucyAgQnJvd3NlIGZvciBicm93c2luZyBkb21haW5zIGluc3RlYWQgb2Ygc2VydmljZXNcbiIKKyIgICAgLWEgLS1hbGwgICAgICAgICAgICAgU2hvdyBhbGwgc2VydmljZXMsIHJlZ2FyZGxlc3Mgb2YgdGhlIHR5cGVcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgVGhlIGRvbWFpbiB0byBicm93c2UgaW5cbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgRW5hYmxlIHZlcmJvc2UgbW9kZVxuIgorIiAgICAtdCAtLXRlcm1pbmF0ZSAgICAgICBUZXJtaW5hdGUgYWZ0ZXIgZHVtcGluZyBhIG1vcmUgb3IgbGVzcyBjb21wbGV0ZSAiCisibGlzdFxuIgorIiAgICAtYyAtLWNhY2hlICAgICAgICAgICBUZXJtaW5hdGUgYWZ0ZXIgZHVtcGluZyBhbGwgZW50cmllcyBmcm9tIHRoZSBjYWNoZVxuIgorIiAgICAtbCAtLWlnbm9yZS1sb2NhbCAgICBJZ25vcmUgbG9jYWwgc2VydmljZXNcbiIKKyIgICAgLXIgLS1yZXNvbHZlICAgICAgICAgUmVzb2x2ZSBzZXJ2aWNlcyBmb3VuZFxuIgorIiAgICAtZiAtLW5vLWZhaWwgICAgICAgICBEb24ndCBmYWlsIGlmIHRoZSBkYWVtb24gaXMgbm90IGF2YWlsYWJsZVxuIgorIiAgICAtcCAtLXBhcnNhYmxlICAgICAgICBPdXRwdXQgaW4gcGFyc2FibGUgZm9ybWF0XG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjY2MAorbXNnaWQgIiIKKyIgICAgLWsgLS1uby1kYi1sb29rdXAgICAgRG9uJ3QgbG9va3VwIHNlcnZpY2UgdHlwZXNcbiIKKyIgICAgLWIgLS1kdW1wLWRiICAgICAgICAgRHVtcCBzZXJ2aWNlIHR5cGUgZGF0YWJhc2VcbiIKK21zZ3N0ciAiIgorIiAgICAtayAtLW5vLWRiLWxvb2t1cCAgICBEb24ndCBsb29rdXAgc2VydmljZSB0eXBlc1xuIgorIiAgICAtYiAtLWR1bXAtZGIgICAgICAgICBEdW1wIHNlcnZpY2UgdHlwZSBkYXRhYmFzZVxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo3NjYgLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjIxOQorIywgYy1mb3JtYXQKK21zZ2lkICJUb28gZmV3IGFyZ3VtZW50c1xuIgorbXNnc3RyICJUb28gZmV3IGFyZ3VtZW50c1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo4MjEgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjM3OAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI2NCAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgc2ltcGxlIHBvbGwgb2JqZWN0LlxuIgorbXNnc3RyICJGYWlsZWQgdG8gY3JlYXRlIHNpbXBsZSBwb2xsIG9iamVjdC5cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkVzdGFibGlzaGVkIHVuZGVyIG5hbWUgJyVzJ1xuIgorbXNnc3RyICJFc3RhYmxpc2hlZCB1bmRlciBuYW1lICclcydcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlcjogJXNcbiIKK21zZ3N0ciAiRmFpbGVkIHRvIHJlZ2lzdGVyOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTmFtZSBjb2xsaXNpb24sIHBpY2tpbmcgbmV3IG5hbWUgJyVzJy5cbiIKK21zZ3N0ciAiTmFtZSBjb2xsaXNpb24sIHBpY2tpbmcgbmV3IG5hbWUgJyVzJy5cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGVudHJ5IGdyb3VwOiAlc1xuIgorbXNnc3RyICJGYWlsZWQgdG8gY3JlYXRlIGVudHJ5IGdyb3VwOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgYWRkcmVzczogJXNcbiIKK21zZ3N0ciAiRmFpbGVkIHRvIGFkZCBhZGRyZXNzOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgc2VydmljZTogJXNcbiIKK21zZ3N0ciAiRmFpbGVkIHRvIGFkZCBzZXJ2aWNlOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgc3VidHlwZSAnJXMnOiAlc1xuIgorbXNnc3RyICJGYWlsZWQgdG8gYWRkIHN1YnR5cGUgJyVzJzogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE5MQorIywgYy1mb3JtYXQKK21zZ2lkICJIb3N0IG5hbWUgY29uZmxpY3RcbiIKK21zZ3N0ciAiSG9zdCBuYW1lIGNvbmZsaWN0XG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoyMTYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBbb3B0aW9uc10gJXMgPG5hbWU+IDx0eXBlPiA8cG9ydD4gWzx0eHQgLi4uPl1cbiIKKyIlcyBbb3B0aW9uc10gJXMgPGhvc3QtbmFtZT4gPGFkZHJlc3M+XG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFNob3cgdmVyc2lvblxuIgorIiAgICAtcyAtLXNlcnZpY2UgICAgICAgICBQdWJsaXNoIHNlcnZpY2VcbiIKKyIgICAgLWEgLS1hZGRyZXNzICAgICAgICAgUHVibGlzaCBhZGRyZXNzXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgRG9tYWluIHRvIHB1Ymxpc2ggc2VydmljZSBpblxuIgorIiAgICAtSCAtLWhvc3Q9RE9NQUlOICAgICBIb3N0IHdoZXJlIHNlcnZpY2UgcmVzaWRlc1xuIgorIiAgICAgICAtLXN1YnR5cGU9U1VCVFlQRSBBbiBhZGRpdGlvbmFsIHN1YnR5cGUgdG8gcmVnaXN0ZXIgdGhpcyBzZXJ2aWNlICIKKyJ3aXRoXG4iCisiICAgIC1SIC0tbm8tcmV2ZXJzZSAgICAgIERvIG5vdCBwdWJsaXNoIHJldmVyc2UgZW50cnkgd2l0aCBhZGRyZXNzXG4iCisiICAgIC1mIC0tbm8tZmFpbCAgICAgICAgIERvbid0IGZhaWwgaWYgdGhlIGRhZW1vbiBpcyBub3QgYXZhaWxhYmxlXG4iCittc2dzdHIgIiIKKyIlcyBbb3B0aW9uc10gJXMgPG5hbWU+IDx0eXBlPiA8cG9ydD4gWzx0eHQgLi4uPl1cbiIKKyIlcyBbb3B0aW9uc10gJXMgPGhvc3QtbmFtZT4gPGFkZHJlc3M+XG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFNob3cgdmVyc2lvblxuIgorIiAgICAtcyAtLXNlcnZpY2UgICAgICAgICBQdWJsaXNoIHNlcnZpY2VcbiIKKyIgICAgLWEgLS1hZGRyZXNzICAgICAgICAgUHVibGlzaCBhZGRyZXNzXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgRG9tYWluIHRvIHB1Ymxpc2ggc2VydmljZSBpblxuIgorIiAgICAtSCAtLWhvc3Q9RE9NQUlOICAgICBIb3N0IHdoZXJlIHNlcnZpY2UgcmVzaWRlc1xuIgorIiAgICAgICAtLXN1YnR5cGU9U1VCVFlQRSBBbiBhZGRpdGlvbmFsIHN1YnR5cGUgdG8gcmVnaXN0ZXIgdGhpcyBzZXJ2aWNlICIKKyJ3aXRoXG4iCisiICAgIC1mIC0tbm8tZmFpbCAgICAgICAgIERvbid0IGZhaWwgaWYgdGhlIGRhZW1vbiBpcyBub3QgYXZhaWxhYmxlXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozMDMgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjMxOAorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgbnVtYmVyIG9mIGFyZ3VtZW50c1xuIgorbXNnc3RyICJCYWQgbnVtYmVyIG9mIGFyZ3VtZW50c1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBwb3J0IG51bWJlcjogJXNcbiIKK21zZ3N0ciAiRmFpbGVkIHRvIHBhcnNlIHBvcnQgbnVtYmVyOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MzYxIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gY29tbWFuZCBzcGVjaWZpZWQuXG4iCittc2dzdHIgIk5vIGNvbW1hbmQgc3BlY2lmaWVkLlxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgaG9zdCBuYW1lICclcyc6ICVzXG4iCittc2dzdHIgIkZhaWxlZCB0byByZXNvbHZlIGhvc3QgbmFtZSAnJXMnOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIGFkZHJlc3MgJyVzJzogJXNcbiIKK21zZ3N0ciAiRmFpbGVkIHRvIHJlc29sdmUgYWRkcmVzcyAnJXMnOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBbb3B0aW9uc10gJXMgPGhvc3QgbmFtZSAuLi4+XG4iCisiJXMgW29wdGlvbnNdICVzIDxhZGRyZXNzIC4uLiA+XG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFNob3cgdmVyc2lvblxuIgorIiAgICAtbiAtLW5hbWUgICAgICAgICAgICBSZXNvbHZlIGhvc3QgbmFtZVxuIgorIiAgICAtYSAtLWFkZHJlc3MgICAgICAgICBSZXNvbHZlIGFkZHJlc3NcbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgRW5hYmxlIHZlcmJvc2UgbW9kZVxuIgorIiAgICAtNiAgICAgICAgICAgICAgICAgICBMb29rdXAgSVB2NiBhZGRyZXNzXG4iCisiICAgIC00ICAgICAgICAgICAgICAgICAgIExvb2t1cCBJUHY0IGFkZHJlc3NcbiIKK21zZ3N0ciAiIgorIiVzIFtvcHRpb25zXSAlcyA8aG9zdCBuYW1lIC4uLj5cbiIKKyIlcyBbb3B0aW9uc10gJXMgPGFkZHJlc3MgLi4uID5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgU2hvdyB2ZXJzaW9uXG4iCisiICAgIC1uIC0tbmFtZSAgICAgICAgICAgIFJlc29sdmUgaG9zdCBuYW1lXG4iCisiICAgIC1hIC0tYWRkcmVzcyAgICAgICAgIFJlc29sdmUgYWRkcmVzc1xuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBFbmFibGUgdmVyYm9zZSBtb2RlXG4iCisiICAgIC02ICAgICAgICAgICAgICAgICAgIExvb2t1cCBJUHY2IGFkZHJlc3NcbiIKKyIgICAgLTQgICAgICAgICAgICAgICAgICAgTG9va3VwIElQdjQgYWRkcmVzc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6Mjk5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBob3N0IG5hbWUgcmVzb2x2ZXI6ICVzXG4iCittc2dzdHIgIkZhaWxlZCB0byBjcmVhdGUgaG9zdCBuYW1lIHJlc29sdmVyOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBhZGRyZXNzICclcydcbiIKK21zZ3N0ciAiRmFpbGVkIHRvIHBhcnNlIGFkZHJlc3MgJyVzJ1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MzE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgYWRkcmVzcyByZXNvbHZlcjogJXNcbiIKK21zZ3N0ciAiRmFpbGVkIHRvIGNyZWF0ZSBhZGRyZXNzIHJlc29sdmVyOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFtvcHRpb25zXSA8bmV3IGhvc3QgbmFtZT5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgU2hvdyB2ZXJzaW9uXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKK21zZ3N0ciAiIgorIiVzIFtvcHRpb25zXSA8bmV3IGhvc3QgbmFtZT5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgU2hvdyB2ZXJzaW9uXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMsIGV4cGVjdGluZyBleGFjdGx5IG9uZS5cbiIKK21zZ3N0ciAiSW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzLCBleHBlY3RpbmcgZXhhY3RseSBvbmUuXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSG9zdCBuYW1lIHN1Y2Nlc3NmdWxseSBjaGFuZ2VkIHRvICVzXG4iCittc2dzdHIgIkhvc3QgbmFtZSBzdWNjZXNzZnVsbHkgY2hhbmdlZCB0byAlc1xuIgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL3BvL2VzLnBvIGIvYXZhaGktMC42LjMxL3BvL2VzLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNGZlZjcKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvcG8vZXMucG8KQEAgLTAsMCArMSw4NjQgQEAKKyMgRmVkb3JhIFNwYW5pc2ggdHJhbnNsYXRpb24gZm9yIGF2YWhpCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBhdmFoaSBwYWNrYWdlLgorIworIyBDYXJsb3MgQWxib3Jub3ogPGNhcmFsYm9ybm96Y0BnbWFpbC5jb20+LCAyMDEwCisjIEpvcmdlIEdvbnrDoWxleiA8am9yZ2Vnb256QHN2bi5nbm9tZS5vcmc+LCAyMDA4LCAyMDEwLgorIyBIw6ljdG9yIERhbmllbCBDYWJyZXJhIDxsb2dhbkBmZWRvcmFwcm9qZWN0Lm9yZz4sIDIwMTAuCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBBdmFoaVxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMS0wNC0wMiAwMzoyMyswMjAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxMC0wNi0zMCAyMDozMy0wMzAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBIw6ljdG9yIERhbmllbCBDYWJyZXJhIDxsb2dhbkBmZWRvcmFwcm9qZWN0Lm9yZz5cbiIKKyJMYW5ndWFnZS1UZWFtOiBGZWRvcmEgU3BhbmlzaCA8dHJhbnMtZXNAbGlzdHMuZmVkb3JhcHJvamVjdC5vcmc+XG4iCisiTGFuZ3VhZ2U6IFxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlgtTGF1bmNocGFkLUV4cG9ydC1EYXRlOiAyMDA4LTEwLTI3IDAyOjUyKzAwMDBcbiIKKyJYLUdlbmVyYXRvcjogTGF1bmNocGFkIChidWlsZCBVbmtub3duKVxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuICE9IDEpO1xuIgorIlgtUG9lZGl0LUxhbmd1YWdlOiBTcGFuaXNoXG4iCisiWC1Qb2VkaXQtQ291bnRyeTogQVJHRU5USU5BXG4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjMwCittc2dpZCAiT0siCittc2dzdHIgIkFjZXB0YXIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjMxCittc2dpZCAiT3BlcmF0aW9uIGZhaWxlZCIKK21zZ3N0ciAiRmFsbMOzIGxhIG9wZXJhY2nDs24iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjMyCittc2dpZCAiQmFkIHN0YXRlIgorbXNnc3RyICJFc3RhZG8gaW5jb3JyZWN0byIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzMKK21zZ2lkICJJbnZhbGlkIGhvc3QgbmFtZSIKK21zZ3N0ciAiTm9tYnJlIGRlIGVxdWlwbyBubyB2w6FsaWRvIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozNAorbXNnaWQgIkludmFsaWQgZG9tYWluIG5hbWUiCittc2dzdHIgIk5vbWJyZSBkZSBkb21pbmlvIG5vIHbDoWxpZG8iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM1Cittc2dpZCAiTm8gc3VpdGFibGUgbmV0d29yayBwcm90b2NvbCBhdmFpbGFibGUiCittc2dzdHIgIk5vIGhheSBkaXNwb25pYmxlIG5pbmfDum4gcHJvdG9jb2xvIGRlIHJlZCBhcHJvcGlhZG8iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM2Cittc2dpZCAiSW52YWxpZCBETlMgVFRMIgorbXNnc3RyICJFbCBUVEwgZGVsIEROUyBubyBlcyB2w6FsaWRvIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozNworbXNnaWQgIlJlc291cmNlIHJlY29yZCBrZXkgaXMgcGF0dGVybiIKK21zZ3N0ciAiTGEgY2xhdmUgZGVsIHJlY3Vyc28gZGUgcmVnaXN0cm8gZXMgdW4gcGF0csOzbiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzgKK21zZ2lkICJMb2NhbCBuYW1lIGNvbGxpc2lvbiIKK21zZ3N0ciAiQ29saXNpw7NuIGRlIG5vbWJyZSBsb2NhbCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzkKK21zZ2lkICJJbnZhbGlkIHJlY29yZCIKK21zZ3N0ciAiUmVnaXN0cm8gbm8gdsOhbGlkbyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDEKK21zZ2lkICJJbnZhbGlkIHNlcnZpY2UgbmFtZSIKK21zZ3N0ciAiTm9tYnJlIGRlIHNlcnZpY2lvIG5vIHbDoWxpZG8iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQyCittc2dpZCAiSW52YWxpZCBzZXJ2aWNlIHR5cGUiCittc2dzdHIgIlRpcG8gZGUgc2VydmljaW8gbm8gdsOhbGlkbyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDMKK21zZ2lkICJJbnZhbGlkIHBvcnQgbnVtYmVyIgorbXNnc3RyICJOw7ptZXJvIGRlIHB1ZXJ0byBubyB2w6FsaWRvIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NAorbXNnaWQgIkludmFsaWQgcmVjb3JkIGtleSIKK21zZ3N0ciAiQ2xhdmUgZGUgcmVnaXN0cm8gbm8gdsOhbGlkYSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDUKK21zZ2lkICJJbnZhbGlkIGFkZHJlc3MiCittc2dzdHIgIkRpcmVjY2nDs24gbm8gdsOhbGlkYSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDYKK21zZ2lkICJUaW1lb3V0IHJlYWNoZWQiCittc2dzdHIgIlNlIGhhIGFsY2FuemFkbyBlbCB0aWVtcG8gZGUgZXNwZXJhIGVzdGFibGVjaWRvIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NworbXNnaWQgIlRvbyBtYW55IGNsaWVudHMiCittc2dzdHIgIkRlbWFzaWFkb3MgY2xpZW50ZXMiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQ4Cittc2dpZCAiVG9vIG1hbnkgb2JqZWN0cyIKK21zZ3N0ciAiRGVtYXNpYWRvcyBvYmpldG9zIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0OQorbXNnaWQgIlRvbyBtYW55IGVudHJpZXMiCittc2dzdHIgIkRlbWFzaWFkYXMgZW50cmFkYXMiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjUwCittc2dpZCAiT1MgRXJyb3IiCittc2dzdHIgIkVycm9yIGRlIFNPIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1MgorbXNnaWQgIkFjY2VzcyBkZW5pZWQiCittc2dzdHIgIkFjY2VzbyBkZW5lZ2FkbyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTMKK21zZ2lkICJJbnZhbGlkIG9wZXJhdGlvbiIKK21zZ3N0ciAiT3BlcmFjacOzbiBubyB2w6FsaWRhIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1NAorbXNnaWQgIkFuIHVuZXhwZWN0ZWQgRC1CdXMgZXJyb3Igb2NjdXJlZCIKK21zZ3N0ciAiT2N1cnJpw7MgdW4gZXJyb3IgZGUgRC1CdXMgbm8gZXNwZXJhZG8iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU1Cittc2dpZCAiRGFlbW9uIGNvbm5lY3Rpb24gZmFpbGVkIgorbXNnc3RyICJGYWxsw7MgbGEgY29uZXhpw7NuIGNvbiBlbCBkZW1vbmlvIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1NgorbXNnaWQgIk1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIk1lbW9yaWEgYWdvdGFkYSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTcKK21zZ2lkICJUaGUgb2JqZWN0IHBhc3NlZCBpbiB3YXMgbm90IHZhbGlkIgorbXNnc3RyICJFbCBvYmpldG8gcGFzYWRvIG5vIGVyYSB2w6FsaWRvIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1OAorbXNnaWQgIkRhZW1vbiBub3QgcnVubmluZyIKK21zZ3N0ciAiRWwgZGVtb25pbyBubyBzZSBlc3TDoSBlamVjdXRhbmRvIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1OQorbXNnaWQgIkludmFsaWQgaW50ZXJmYWNlIGluZGV4IgorbXNnc3RyICLDjW5kaWNlIGRlIGludGVyZmF6IG5vIHbDoWxpZG8iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjYwCittc2dpZCAiSW52YWxpZCBwcm90b2NvbCBzcGVjaWZpY2F0aW9uIgorbXNnc3RyICJFc3BlY2lmaWNhY2nDs24gZGUgcHJvdG9jb2xvIG5vIHbDoWxpZGEiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjYxCittc2dpZCAiSW52YWxpZCBmbGFncyIKK21zZ3N0ciAiT3BjaW9uZXMgbm8gdsOhbGlkYXMiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjYzCittc2dpZCAiTm90IGZvdW5kIgorbXNnc3RyICJObyBlbmNvbnRyYWRvIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2NAorbXNnaWQgIkludmFsaWQgY29uZmlndXJhdGlvbiIKK21zZ3N0ciAiQ29uZmlndXJhY2nDs24gbm8gdsOhbGlkYSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjUKK21zZ2lkICJWZXJzaW9uIG1pc21hdGNoIgorbXNnc3RyICJJbmNvbXBhdGliaWxpZGFkIGRlIHZlcnNpb25lcyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjYKK21zZ2lkICJJbnZhbGlkIHNlcnZpY2Ugc3VidHlwZSIKK21zZ3N0ciAiU3VidGlwbyBkZSBzZXJ2aWNpbyBubyB2w6FsaWRvIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2NworbXNnaWQgIkludmFsaWQgcGFja2V0IgorbXNnc3RyICJQYXF1ZXRlIG5vIHbDoWxpZG8iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY4Cittc2dpZCAiSW52YWxpZCBETlMgcmV0dXJuIGNvZGUiCittc2dzdHIgIkPDs2RpZ28gZGUgcmV0b3JubyBkZSBETlMgbm8gdsOhbGlkbyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjkKK21zZ2lkICJETlMgZmFpbHVyZTogRk9STUVSUiIKK21zZ3N0ciAiRmFsbG8gZGUgRE5TOiBGT1JNRVJSIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3MAorbXNnaWQgIkROUyBmYWlsdXJlOiBTRVJWRkFJTCIKK21zZ3N0ciAiRmFsbG8gZGUgRE5TOiBTRVJWRkFJTCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzEKK21zZ2lkICJETlMgZmFpbHVyZTogTlhET01BSU4iCittc2dzdHIgIkZhbGxvIGRlIEROUzogTlhET01BSU4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjcyCittc2dpZCAiRE5TIGZhaWx1cmU6IE5PVElNUCIKK21zZ3N0ciAiRmFsbG8gZGUgRE5TOiBOT1RJTVAiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc0Cittc2dpZCAiRE5TIGZhaWx1cmU6IFJFRlVTRUQiCittc2dzdHIgIkZhbGxvIGRlIEROUzogUkVGVVNFRCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzUKK21zZ2lkICJETlMgZmFpbHVyZTogWVhET01BSU4iCittc2dzdHIgIkZhbGxvIGRlIEROUzogWVhET01BSU4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc2Cittc2dpZCAiRE5TIGZhaWx1cmU6IFlYUlJTRVQiCittc2dzdHIgIkZhbGxvIGRlIEROUzogWVhSUlNFVCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzcKK21zZ2lkICJETlMgZmFpbHVyZTogTlhSUlNFVCIKK21zZ3N0ciAiRmFsbG8gZGUgRE5TOiBOWFJSU0VUIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3OAorbXNnaWQgIkROUyBmYWlsdXJlOiBOT1RBVVRIIgorbXNnc3RyICJGYWxsbyBkZSBETlM6IE5PVEFVVEgiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc5Cittc2dpZCAiRE5TIGZhaWx1cmU6IE5PVFpPTkUiCittc2dzdHIgIkZhbGxvIGRlIEROUzogTk9UWk9ORSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODAKK21zZ2lkICJJbnZhbGlkIFJEQVRBIgorbXNnc3RyICJSREFUQSBubyB2w6FsaWRvIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4MQorbXNnaWQgIkludmFsaWQgRE5TIHR5cGUiCittc2dzdHIgIlRpcG8gZGUgRE5TIG5vIHbDoWxpZG8iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjgyCittc2dpZCAiSW52YWxpZCBETlMgY2xhc3MiCittc2dzdHIgIkNsYXNlIGRlIEROUyBubyB2w6FsaWRhIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4MworbXNnaWQgIk5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIk5vIHNvcG9ydGFkbyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODUKK21zZ2lkICJOb3QgcGVybWl0dGVkIgorbXNnc3RyICJObyBwZXJtaXRpZG8iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjg2Cittc2dpZCAiSW52YWxpZCBhcmd1bWVudCIKK21zZ3N0ciAiQXJndW1lbnRvIG5vIHbDoWxpZG8iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjg3Cittc2dpZCAiSXMgZW1wdHkiCittc2dzdHIgIkVzdMOhIHZhY8OtbyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODgKK21zZ2lkICJUaGUgcmVxdWVzdGVkIG9wZXJhdGlvbiBpcyBpbnZhbGlkIGJlY2F1c2UgcmVkdW5kYW50IgorbXNnc3RyICJMYSBvcGVyYWNpw7NuIHNvbGljaXRhZGEgbm8gZXMgdsOhbGlkYSBwb3JxdWUgZXMgcmVkdW5kYW50ZSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6OTQKK21zZ2lkICJJbnZhbGlkIEVycm9yIENvZGUiCittc2dzdHIgIkPDs2RpZ28gZGUgZXJyb3Igbm8gdsOhbGlkbyIKKworIzogLi4vYXZhaGktZGlzY292ZXItc3RhbmRhbG9uZS9hdmFoaS1kaXNjb3Zlci51aS5oOjEKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weTo3NgorbXNnaWQgIjxpPk5vIHNlcnZpY2UgY3VycmVudGx5IHNlbGVjdGVkLjwvaT4iCittc2dzdHIgIjxpPk5vIGhheSB1biBzZXJ2aWNpbyBhY3R1YWxtZW50ZSBzZWxlY2Npb25hZG8uPC9pPiIKKworIzogLi4vYXZhaGktZGlzY292ZXItc3RhbmRhbG9uZS9hdmFoaS1kaXNjb3Zlci51aS5oOjIKK21zZ2lkICJBdmFoaSBEaXNjb3ZlcnkiCittc2dzdHIgIkRlc2N1YnJpbWllbnRvIGRlIEF2YWhpIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIuZGVza3RvcC5pbi5pbi5oOjEKK21zZ2lkICJBdmFoaSBaZXJvY29uZiBCcm93c2VyIgorbXNnc3RyICJOYXZlZ2Fkb3IgWmVyb2NvbmYgZGUgQXZhaGkiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5kZXNrdG9wLmluLmluLmg6MgorbXNnaWQgIkJyb3dzZSBmb3IgWmVyb2NvbmYgc2VydmljZXMgYXZhaWxhYmxlIG9uIHlvdXIgbmV0d29yayIKK21zZ3N0ciAiTmF2ZWdhciBlbiBidXNjYSBkZSBzZXJ2aWNpb3MgWmVyb2NvbmYgZGlzcG9uaWJsZXMgZW4gc3UgcmVkIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI0Cittc2dpZCAiVFhUIgorbXNnc3RyICJUWFQiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMjYKK21zZ2lkICJUWFQgRGF0YToiCittc2dzdHIgIkRhdG9zIFRYVDoiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMjYKK21zZ2lkICJlbXB0eSIKK21zZ3N0ciAidmFjw61vIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI4Cittc2dpZCAiU2VydmljZSBUeXBlOiIKK21zZ3N0ciAiVGlwbyBkZSBzZXJ2aWNpbzoiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMjkKK21zZ2lkICJTZXJ2aWNlIE5hbWU6IgorbXNnc3RyICJOb21icmUgZGVsIHNlcnZpY2lvOiIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIzMAorbXNnaWQgIkRvbWFpbiBOYW1lOiIKK21zZ3N0ciAiTm9tYnJlIGRlbCBkb21pbmlvOiIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIzMQorbXNnaWQgIkludGVyZmFjZToiCittc2dzdHIgIkludGVyZmF6OiIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIzMgorbXNnaWQgIkFkZHJlc3M6IgorbXNnc3RyICJEaXJlY2Npw7NuOiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxODUKK21zZ2lkICJCcm93c2UgU2VydmljZSBUeXBlcyIKK21zZ3N0ciAiVGlwb3MgZGUgU2VydmljaW9zIGEgRXhhbWluYXIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTg1Cittc2dpZCAiQSBOVUxMIHRlcm1pbmF0ZWQgbGlzdCBvZiBzZXJ2aWNlIHR5cGVzIHRvIGJyb3dzZSBmb3IiCittc2dzdHIgIlVuYSBsaXN0YSB0ZXJtaW5hZGEgZW4gTlVMTCBjb24gbG9zIHRpcG9zIGRlIHNlcnZpY2lvcyBhIGJ1c2NhciIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxOTAKK21zZ2lkICJEb21haW4iCittc2dzdHIgIkRvbWluaW8iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTkwCittc2dpZCAiVGhlIGRvbWFpbiB0byBicm93c2UgaW4sIG9yIE5VTEwgZm9yIHRoZSBkZWZhdWx0IGRvbWFpbiIKK21zZ3N0ciAiRWwgZG9taW5pbyBhIGV4YW1pbmFyLCBvIE5VTEwgcGFyYSBlbCBkb21pbmlvIHByZWRldGVybWluYWRvIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE5NgorbXNnaWQgIlNlcnZpY2UgVHlwZSIKK21zZ3N0ciAiVGlwbyBkZSBTZXJ2aWNpbyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxOTYKK21zZ2lkICJUaGUgc2VydmljZSB0eXBlIG9mIHRoZSBzZWxlY3RlZCBzZXJ2aWNlIgorbXNnc3RyICJFbCB0aXBvIGRlIHNlcnZpY2lvIGRlbCBzZXJ2aWNpbyBzZWxlY2Npb25hZG8iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjAyIC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTAyMworbXNnaWQgIlNlcnZpY2UgTmFtZSIKK21zZ3N0ciAiTm9tYnJlIGRlbCBzZXJ2aWNpbyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMDIKK21zZ2lkICJUaGUgc2VydmljZSBuYW1lIG9mIHRoZSBzZWxlY3RlZCBzZXJ2aWNlIgorbXNnc3RyICJFbCBub21icmUgZGUgc2VydmljaW8gZGVsIHNlcnZpY2lvIHNlbGVjY2lvbmFkbyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMDgKK21zZ2lkICJBZGRyZXNzIgorbXNnc3RyICJEaXJlY2Npw7NuIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIwOAorbXNnaWQgIlRoZSBhZGRyZXNzIG9mIHRoZSByZXNvbHZlZCBzZXJ2aWNlIgorbXNnc3RyICJMYSBkaXJlY2Npw7NuIGRlbCBzZXJ2aWNpbyByZXN1ZWx0byIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMTMKK21zZ2lkICJQb3J0IgorbXNnc3RyICJQdWVydG8iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjEzCittc2dpZCAiVGhlIElQIHBvcnQgbnVtYmVyIG9mIHRoZSByZXNvbHZlZCBzZXJ2aWNlIgorbXNnc3RyICJFbCBuw7ptZXJvIGRlIHB1ZXJ0byBJUCBkZWwgc2VydmljaW8gcmVzdWVsdG8iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjE5Cittc2dpZCAiSG9zdCBOYW1lIgorbXNnc3RyICJOb21icmUgZGUgRXF1aXBvIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIxOQorbXNnaWQgIlRoZSBob3N0IG5hbWUgb2YgdGhlIHJlc29sdmVkIHNlcnZpY2UiCittc2dzdHIgIkVsIG5vbWJyZSBkZSBlcXVpcG8gZGVsIHNlcnZpY2lvIHJlc3VlbHRvIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIyNQorbXNnaWQgIlRYVCBEYXRhIgorbXNnc3RyICJEYXRvcyBUWFQiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjI1Cittc2dpZCAiVGhlIFRYVCBkYXRhIG9mIHRoZSByZXNvbHZlZCBzZXJ2aWNlIgorbXNnc3RyICJMb3MgZGF0b3MgVFhUIGRlbCBzZXJ2aWNpbyByZXN1ZWx0byIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMzAKK21zZ2lkICJSZXNvbHZlIFNlcnZpY2UiCittc2dzdHIgIlJlc29sdmVyIHNlcnZpY2lvIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIzMAorbXNnaWQgIlJlc29sdmUgdGhlIHNlbGVjdGVkIHNlcnZpY2UgYXV0b21hdGljYWxseSBiZWZvcmUgcmV0dXJuaW5nIgorbXNnc3RyICIiCisiUmVzb2x2ZXIgZWwgc2VydmljaW8gc2VsZWNjaW9uYWRvIGRlIG1hbmVyYSBhdXRvbcOhdGljYSBhbnRlcyBkZSBsYSBkZXZvbHVjacOzbiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMzYKK21zZ2lkICJSZXNvbHZlIFNlcnZpY2UgSG9zdCBOYW1lIgorbXNnc3RyICJSZXNvbHZlciBlbCBub21icmUgZGUgZXF1aXBvIGRlbCBzZXJ2aWNpbyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMzYKK21zZ2lkICIiCisiUmVzb2x2ZSB0aGUgaG9zdCBuYW1lIG9mIHRoZSBzZWxlY3RlZCBzZXJ2aWNlIGF1dG9tYXRpY2FsbHkgYmVmb3JlIHJldHVybmluZyIKK21zZ3N0ciAiIgorIlJlc29sdmVyIGVsIG5vbWJyZSBkZWwgZXF1aXBvIGRlbCBzZXJ2aWNpbyBzZWxlY2Npb25hZG8gZGUgbWFuZXJhIGF1dG9tw6F0aWNhICIKKyJhbnRlcyBkZSBsYSBkZXZvbHVjacOzbiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyNDIKK21zZ2lkICJBZGRyZXNzIGZhbWlseSIKK21zZ3N0ciAiRmFtaWxpYSBkZSBkaXJlY2Npb25lcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyNDIKK21zZ2lkICJUaGUgYWRkcmVzcyBmYW1pbHkgZm9yIGhvc3QgbmFtZSByZXNvbHV0aW9uIgorbXNnc3RyICJMYSBmYW1pbGlhIGRlIGRpcmVjY2lvbmVzIHBhcmEgbGEgcmVzb2x1Y2nDs24gZGUgbm9tYnJlIGRlIGVxdWlwbyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzozMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaGkgY2xpZW50IGZhaWx1cmU6ICVzIgorbXNnc3RyICJGYWxsbyBkZWwgY2xpZW50ZSBkZSBBdmFoaTogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6Mzg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWhpIHJlc29sdmVyIGZhaWx1cmU6ICVzIgorbXNnc3RyICJGYWxsbyBkZWwgcmVzb2x1dG9yIGRlIEF2YWhpOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo1MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJvd3NpbmcgZm9yIHNlcnZpY2UgdHlwZSAlcyBpbiBkb21haW4gJXMgZmFpbGVkOiAlcyIKK21zZ3N0ciAiRmFsbMOzIGxhIGV4cGxvcmFjacOzbiBkZWwgdGlwbyBkZSBzZXJ2aWNpbyAlcyBlbiBlbCBkb21pbmlvICVzOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo1MTkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTY4CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoxNjkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTc4CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoxNzkKK21zZ2lkICJuL2EiCittc2dzdHIgIm4vZCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo2NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaGkgZG9tYWluIGJyb3dzZXIgZmFpbHVyZTogJXMiCittc2dzdHIgIkZhbGxvIGRlIGV4cGxvcmFjacOzbiBkZSBkb21pbmlvcyBkZSBBdmFoaTogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6Njg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWFkIEF2YWhpIGRvbWFpbjogJXMiCittc2dzdHIgIkZhbGzDsyBhbCBsZWVyIGVsIGRvbWluaW8gZGUgQXZhaGk6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjcwNgorbXNnaWQgIkJyb3dzZSBzZXJ2aWNlIHR5cGUgbGlzdCBpcyBlbXB0eSEiCittc2dzdHIgIsKhTGEgbGlzdGEgZGUgVGlwb3MgZGUgU2VydmljaW9zIGVzdMOhIHZhY8OtYSEiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjb25uZWN0IHRvIEF2YWhpIHNlcnZlcjogJXMiCittc2dzdHIgIkZhbGzDsyBhbCBjb25lY3RhciBjb24gZWwgc2Vydmlkb3IgZGUgQXZhaGk6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjczNQorbXNnaWQgIkJyb3dzaW5nIGZvciBzZXJ2aWNlcyBvbiA8Yj5sb2NhbCBuZXR3b3JrPC9iPjoiCittc2dzdHIgIkV4YW1pbmFuZG8gbG9zIHNlcnZpY2lvcyBlbiBsYSA8Yj5yZWQgbG9jYWw8L2I+OiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo3MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJvd3NpbmcgZm9yIHNlcnZpY2VzIGluIGRvbWFpbiA8Yj4lczwvYj46IgorbXNnc3RyICJFeGFtaW5hbmRvIGxvcyBzZXJ2aWNpb3MgZW4gZWwgZG9taW5pbyA8Yj4lczwvYj46IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjc3MworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGJyb3dzZXIgZm9yICVzOiAlcyIKK21zZ3N0ciAiRmFsbMOzIGFsIGNyZWFyIGVsIGV4YW1pbmFkb3IgcGFyYSAlczogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6OTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgcmVzb2x2ZXIgZm9yICVzIG9mIHR5cGUgJXMgaW4gZG9tYWluICVzOiAlcyIKK21zZ3N0ciAiRmFsbMOzIGFsIGNyZWFyIGVsIHJlc29sdXRvciBwYXJhICVzIGRlIHRpcG8gJXMgZW4gZWwgZG9taW5pbyAlczogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6OTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgZG9tYWluIGJyb3dzZXI6ICVzIgorbXNnc3RyICJGYWxsw7MgYWwgY3JlYXIgZWwgZG9taW5pbyBkZSBleHBsb3JhY2nDs246ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjk4OQorbXNnaWQgIkNoYW5nZSBkb21haW4iCittc2dzdHIgIkNhbWJpYXIgZWwgZG9taW5pbyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMDMxIC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTE2MgorbXNnaWQgIkJyb3dzaW5nLi4uIgorbXNnc3RyICJFeGFtaW5hbmRv4oCmIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExMjAKK21zZ2lkICJJbml0aWFsaXppbmcuLi4iCittc2dzdHIgIkluaWNpYWxpemFuZG/igKYiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTE0NAorbXNnaWQgIkxvY2F0aW9uIgorbXNnc3RyICJVYmljYWNpw7NuIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNDkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTUzCittc2dpZCAiTmFtZSIKK21zZ3N0ciAiTm9tYnJlIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNTQgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTUzCittc2dpZCAiVHlwZSIKK21zZ3N0ciAiVGlwbyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTY2Cittc2dpZCAiX0RvbWFpbi4uLiIKK21zZ3N0ciAiX0RvbWluaW/igKYiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzo1NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgW29wdGlvbnNdXG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1zIC0tc3NoICAgICAgICAgICAgIEJyb3dzZSBTU0ggc2VydmVyc1xuIgorIiAgICAtdiAtLXZuYyAgICAgICAgICAgICBCcm93c2UgVk5DIHNlcnZlcnNcbiIKKyIgICAgLVMgLS1zaGVsbCAgICAgICAgICAgQnJvd3NlIGJvdGggU1NIIGFuZCBWTkNcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgVGhlIGRvbWFpbiB0byBicm93c2UgaW5cbiIKK21zZ3N0ciAiIgorIiVzIFtvcGNpb25lc11cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgTW9zdHJhciBlc3RhIGF5dWRhXG4iCisiICAgIC1zIC0tc3NoICAgICAgICAgICAgIEV4YW1pbmFyIHNlcnZpZG9yZXMgU1NIXG4iCisiICAgIC12IC0tdm5jICAgICAgICAgICAgIEV4YW1pbmFyIHNlcnZpZG9yZXMgVk5DXG4iCisiICAgIC1TIC0tc2hlbGwgICAgICAgICAgIEV4YW1pbmFyIHNlcnZpZG9yZXMgU1NIIHkgVk5DXG4iCisiICAgIC1kIC0tZG9tYWluPURPTUlOSU8gIEVsIGRvbWluaW8gcXVlIGV4YW1pbmFyXG4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxMDEgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6Nzc1CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvbyBtYW55IGFyZ3VtZW50c1xuIgorbXNnc3RyICJEZW1hc2lhZG9zIGFyZ3VtZW50b3NcbiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE0OQorbXNnaWQgIkNob29zZSBTaGVsbCBTZXJ2ZXIiCittc2dzdHIgIkVsZWdpciBlbCBzZXJ2aWRvciBkZSBpbnTDqXJwcmV0ZSBkZSBjb21hbmRvcyIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE1MQorbXNnaWQgIkRlc2t0b3AiCittc2dzdHIgIkVzY3JpdG9yaW8iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNTIKK21zZ2lkICJUZXJtaW5hbCIKK21zZ3N0ciAiVGVybWluYWwiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNTYKK21zZ2lkICJDaG9vc2UgVk5DIHNlcnZlciIKK21zZ3N0ciAiRWxlZ2lyIGVsIHNlcnZpZG9yIFZOQyIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE2MQorbXNnaWQgIkNob29zZSBTU0ggc2VydmVyIgorbXNnc3RyICJFbGVnaXIgZWwgc2Vydmlkb3IgU1NIIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbm5lY3RpbmcgdG8gJyVzJyAuLi5cbiIKK21zZ3N0ciAiQ29uZWN0YW5kbyBjb24gwqslc8K7IOKAplxuIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MjQwCisjLCBjLWZvcm1hdAorbXNnaWQgImV4ZWNscCgpIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAiZXhlY2xwKCkgZmFsbMOzOiAlc1xuIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbmNlbGVkLlxuIgorbXNnc3RyICJDYW5jZWxhZG8uXG4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guZGVza3RvcC5pbi5pbi5oOjEKK21zZ2lkICJBdmFoaSBTU0ggU2VydmVyIEJyb3dzZXIiCittc2dzdHIgIkV4YW1pbmFkb3IgZGUgc2Vydmlkb3JlcyBTU0ggZGUgQXZhaGkiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guZGVza3RvcC5pbi5pbi5oOjIKK21zZ2lkICJCcm93c2UgZm9yIFplcm9jb25mLWVuYWJsZWQgU1NIIFNlcnZlcnMiCittc2dzdHIgIkV4YW1pbmFyIHNlcnZpZG9yZXMgU1NIIGNvbiB6ZXJvY29uZiBhY3RpdmFkbyIKKworIzogLi4vYXZhaGktdWkvYnZuYy5kZXNrdG9wLmluLmluLmg6MQorbXNnaWQgIkF2YWhpIFZOQyBTZXJ2ZXIgQnJvd3NlciIKK21zZ3N0ciAiRXhhbWluYWRvciBkZSBzZXJ2aWRvcmVzIFZOQyBkZSBBdmFoaSIKKworIzogLi4vYXZhaGktdWkvYnZuYy5kZXNrdG9wLmluLmluLmg6MgorbXNnaWQgIkJyb3dzZSBmb3IgWmVyb2NvbmYtZW5hYmxlZCBWTkMgU2VydmVycyIKK21zZ3N0ciAiRXhhbWluYXIgc2Vydmlkb3JlcyBWTkMgY29uIHplcm9jb25mIGFjdGl2YWRvIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoxMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiOiBBbGwgZm9yIG5vd1xuIgorbXNnc3RyICI6IFRvZG8gcG9yIGFob3JhXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjExOAorIywgYy1mb3JtYXQKK21zZ2lkICI6IENhY2hlIGV4aGF1c3RlZFxuIgorbXNnc3RyICI6IENhY2jDqSBhZ290YWRhXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjIzOSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgc2VydmljZSAnJXMnIG9mIHR5cGUgJyVzJyBpbiBkb21haW4gJyVzJzogJXNcbiIKK21zZ3N0ciAiIgorIkVycm9yIGFsIHJlc29sdmVyIGVsIHNlcnZpY2lvIMKrJXPCuyBkZSB0aXBvIMKrJXPCuyBlbiBlbCBkb21pbmlvIMKrJXPCuzogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MzQwCisjLCBjLWZvcm1hdAorbXNnaWQgInNlcnZpY2VfYnJvd3NlciBmYWlsZWQ6ICVzXG4iCittc2dzdHIgIkZhbGzDsyBzZXJ2aWNlX2Jyb3dzZXI6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjM3OAorIywgYy1mb3JtYXQKK21zZ2lkICJhdmFoaV9zZXJ2aWNlX2Jyb3dzZXJfbmV3KCkgZmFpbGVkOiAlc1xuIgorbXNnc3RyICJGYWxsw7MgYXZhaGlfc2VydmljZV9icm93c2VyX25ldygpOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VydmljZV90eXBlX2Jyb3dzZXIgZmFpbGVkOiAlc1xuIgorbXNnc3RyICJGYWxsw7Mgc2VydmljZV90eXBlX2Jyb3dzZXI6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjQ0NAorIywgYy1mb3JtYXQKK21zZ2lkICJhdmFoaV9zZXJ2aWNlX3R5cGVfYnJvd3Nlcl9uZXcoKSBmYWlsZWQ6ICVzXG4iCittc2dzdHIgIkZhbGzDsyBhdmFoaV9zZXJ2aWNlX3R5cGVfYnJvd3Nlcl9uZXcoKTogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTE5CisjLCBjLWZvcm1hdAorbXNnaWQgImF2YWhpX2RvbWFpbl9icm93c2VyX25ldygpIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAiRmFsbMOzIGF2YWhpX2RvbWFpbl9icm93c2VyX25ldygpOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1MzUgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjM5NAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI4MCAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBxdWVyeSB2ZXJzaW9uIHN0cmluZzogJXNcbiIKK21zZ3N0ciAiRXJyb3IgYWwgY29uc3VsdGFyIGxhIGNhZGVuYSBkZSB2ZXJzacOzbjogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTQwIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozOTkKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyODUgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE3MworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcXVlcnkgaG9zdCBuYW1lOiAlc1xuIgorbXNnc3RyICJFcnJvciBhbCBjb25zdWx0YXIgZWwgbm9tYnJlIGRlbCBlcXVpcG86ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU0NCAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6NDAzCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6Mjg5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VydmVyIHZlcnNpb246ICVzOyBIb3N0IG5hbWU6ICVzXG4iCittc2dzdHIgIlZlcnNpw7NuIGRlbCBzZXJ2aWRvcjogJXM7IE5vbWJyZSBkZWwgZXF1aXBvOiAlc1xuIgorCisjLiBUcmFuc2xhdG9yczogVGhpcyBpcyBhIGNvbHVtbiBoZWFkaW5nIHdpdGggYWJicmV2aWF0aW9ucyBmb3IKKyMuICogICBFdmVudCAoKy8tKSwgTmV0d29yayBJbnRlcmZhY2UsIFByb3RvY29sIChJUHY0L3Y2KSwgRG9tYWluCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRSBJZmNlIFByb3QgRG9tYWluXG4iCittc2dzdHIgIkUgSWZheiBQcm90IERvbWluaW9cbiIKKworIy4gVHJhbnNsYXRvcnM6IFRoaXMgaXMgYSBjb2x1bW4gaGVhZGluZyB3aXRoIGFiYnJldmlhdGlvbnMgZm9yCisjLiAqICAgRXZlbnQgKCsvLSksIE5ldHdvcmsgSW50ZXJmYWNlLCBQcm90b2NvbCAoSVB2NC92NiksIERvbWFpbgorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUgSWZjZSBQcm90ICUtKnMgJS0yMHMgRG9tYWluXG4iCittc2dzdHIgIkUgSWZheiBQcm90ICUtKnMgJS0yMHMgRG9taW5pb1xuIgorCisjLiBXZSBoYXZlIGJlZW4gZGlzY29ubmVjdGVkLCBzbyBsZXQgcmVjb25uZWN0CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1ODUgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE2MworIywgYy1mb3JtYXQKK21zZ2lkICJEaXNjb25uZWN0ZWQsIHJlY29ubmVjdGluZyAuLi5cbiIKK21zZ3N0ciAiRGVzY29uZWN0YWRvOyB2b2x2aWVuZG8gYSBjb25lY3RhcuKAplxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1OTkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6ODI5CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTcwIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozODYKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyNzIgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE2MAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGNsaWVudCBvYmplY3Q6ICVzXG4iCittc2dzdHIgIkZhbGzDsyBhbCBjcmVhciBlbCBvYmpldG8gY2xpZW50ZTogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NjA0IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxNzUKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoxNDMgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNsaWVudCBmYWlsdXJlLCBleGl0aW5nOiAlc1xuIgorbXNnc3RyICJGYWxsbyBkZWwgY2xpZW50ZTsgc2FsaWVuZG86ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjYyMyAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIldhaXRpbmcgZm9yIGRhZW1vbiAuLi5cbiIKK21zZ3N0ciAiRXNwZXJhbmRvIGFsIGRlbW9uaW/igKZcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NjQ3Cittc2dpZCAiIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLUQgLS1icm93c2UtZG9tYWlucyAgQnJvd3NlIGZvciBicm93c2luZyBkb21haW5zIGluc3RlYWQgb2Ygc2VydmljZXNcbiIKKyIgICAgLWEgLS1hbGwgICAgICAgICAgICAgU2hvdyBhbGwgc2VydmljZXMsIHJlZ2FyZGxlc3Mgb2YgdGhlIHR5cGVcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgVGhlIGRvbWFpbiB0byBicm93c2UgaW5cbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgRW5hYmxlIHZlcmJvc2UgbW9kZVxuIgorIiAgICAtdCAtLXRlcm1pbmF0ZSAgICAgICBUZXJtaW5hdGUgYWZ0ZXIgZHVtcGluZyBhIG1vcmUgb3IgbGVzcyBjb21wbGV0ZSAiCisibGlzdFxuIgorIiAgICAtYyAtLWNhY2hlICAgICAgICAgICBUZXJtaW5hdGUgYWZ0ZXIgZHVtcGluZyBhbGwgZW50cmllcyBmcm9tIHRoZSBjYWNoZVxuIgorIiAgICAtbCAtLWlnbm9yZS1sb2NhbCAgICBJZ25vcmUgbG9jYWwgc2VydmljZXNcbiIKKyIgICAgLXIgLS1yZXNvbHZlICAgICAgICAgUmVzb2x2ZSBzZXJ2aWNlcyBmb3VuZFxuIgorIiAgICAtZiAtLW5vLWZhaWwgICAgICAgICBEb24ndCBmYWlsIGlmIHRoZSBkYWVtb24gaXMgbm90IGF2YWlsYWJsZVxuIgorIiAgICAtcCAtLXBhcnNhYmxlICAgICAgICBPdXRwdXQgaW4gcGFyc2FibGUgZm9ybWF0XG4iCittc2dzdHIgIiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgTXVlc3RyYSBlc3RhIGF5dWRhXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIE11ZXN0cmEgbGEgdmVyc2nDs25cbiIKKyIgICAgLUQgLS1icm93c2UtZG9tYWlucyAgRXhwbG9yYSBkb21pbmlvcyBkZSBiw7pzcXVlZGEgZW4gbHVnYXIgZGUgc2VydmljaW9zXG4iCisiICAgIC1hIC0tYWxsICAgICAgICAgICAgIE11ZXN0cmEgdG9kb3MgbG9zIHNlcnZpY2lvcyBpbmRlcGVuZGllbnRlbWVudGUgZGVsICIKKyJ0aXBvLlxuIgorIiAgICAtZCAtLWRvbWFpbj1ET01BSU4gICBFbCBkb21pbmlvIHF1ZSBleGFtaW5hclxuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBBY3RpdmEgZWwgbW9kbyBkZXRhbGxhZG9cbiIKKyIgICAgLXQgLS10ZXJtaW5hdGUgICAgICAgVGVybWluYXIgYWwgdm9sY2FyIHVuYSBsaXN0YSBtw6FzIG8gbWVub3MgY29tcGxldGFcbiIKKyIgICAgLWMgLS1jYWNoZSAgICAgICAgICAgVGVybWluYXIgZGVzcHXDqXMgZGUgdm9sY2FyIHRvZGFzIGxhcyBlbnRyYWRhcyBkZSBsYSAiCisiY2FjaGVcbiIKKyIgICAgLWwgLS1pZ25vcmUtbG9jYWwgICAgSWdub3JhciBsb3Mgc2VydmljaW9zIGxvY2FsZXNcbiIKKyIgICAgLXIgLS1yZXNvbHZlICAgICAgICAgUmVzb2x2ZXIgc2VydmljaW9zIGVuY29udHJhZG9zXG4iCisiICAgIC1mIC0tbm8tZmFpbCAgICAgICAgIE5vIGZhbGxhciBzaSBlbCBkZW1vbmlvIG5vIGVzdMOhIGRpc3BvbmlibGVcbiIKKyIgICAgLXAgLS1wYXJzYWJsZSAgICAgICAgU2FsaWRhIGVuIGZvcm1hdG8gYW5hbGl6YWJsZVxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo2NjAKK21zZ2lkICIiCisiICAgIC1rIC0tbm8tZGItbG9va3VwICAgIERvbid0IGxvb2t1cCBzZXJ2aWNlIHR5cGVzXG4iCisiICAgIC1iIC0tZHVtcC1kYiAgICAgICAgIER1bXAgc2VydmljZSB0eXBlIGRhdGFiYXNlXG4iCittc2dzdHIgIiIKKyIgICAgLWsgLS1uby1kYi1sb29rdXAgICAgTm8gYnVzY2EgbG9zIHRpcG9zIGRlIHNlcnZpY2lvc1xuIgorIiAgICAtYiAtLWR1bXAtZGIgICAgICAgICBWdWVsdmEgbGEgYmFzZSBkZSBkYXRvcyBkZSB0aXBvcyBkZSBzZXJ2aWNpb3NcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NzY2IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG9vIGZldyBhcmd1bWVudHNcbiIKK21zZ3N0ciAiTXV5IHBvY29zIGFyZ3VtZW50b3NcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6ODIxIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozNzgKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyNjQgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIHNpbXBsZSBwb2xsIG9iamVjdC5cbiIKK21zZ3N0ciAiRmFsbMOzIGFsIGNyZWFyIHVuIG9iamV0byBkZSBlbmN1ZXN0YSBzaW1wbGUuXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo3NgorIywgYy1mb3JtYXQKK21zZ2lkICJFc3RhYmxpc2hlZCB1bmRlciBuYW1lICclcydcbiIKK21zZ3N0ciAiRXN0YWJsZWNpZG8gYmFqbyBlbCBub21icmUgwqslc8K7XG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo4MQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXI6ICVzXG4iCittc2dzdHIgIkZhbGzDsyBhbCByZWdpc3RyYXI6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICJOYW1lIGNvbGxpc2lvbiwgcGlja2luZyBuZXcgbmFtZSAnJXMnLlxuIgorbXNnc3RyICJDb2xpc2nDs24gZGUgbm9tYnJlczsgc2UgdXNhIGVsIG5vbWJyZSBudWV2byDCqyVzwrsuXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBlbnRyeSBncm91cDogJXNcbiIKK21zZ3N0ciAiRmFsbMOzIGFsIGNyZWFyIGVsIGdydXBvIGRlIGxhIGVudHJhZGE6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBhZGRyZXNzOiAlc1xuIgorbXNnc3RyICJGYWxsw7MgYWwgYcOxYWRpciBsYSBkaXJlY2Npw7NuOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgc2VydmljZTogJXNcbiIKK21zZ3N0ciAiRmFsbMOzIGFsIGHDsWFkaXIgZWwgc2VydmljaW86ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBzdWJ0eXBlICclcyc6ICVzXG4iCittc2dzdHIgIkZhbGzDsyBhbCBhw7FhZGlyIGVsIHN1YnRpcG8gwqslc8K7OiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkhvc3QgbmFtZSBjb25mbGljdFxuIgorbXNnc3RyICJDb25mbGljdG8gZGUgbm9tYnJlcyBkZSBlcXVpcG9cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgW29wdGlvbnNdICVzIDxuYW1lPiA8dHlwZT4gPHBvcnQ+IFs8dHh0IC4uLj5dXG4iCisiJXMgW29wdGlvbnNdICVzIDxob3N0LW5hbWU+IDxhZGRyZXNzPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLXMgLS1zZXJ2aWNlICAgICAgICAgUHVibGlzaCBzZXJ2aWNlXG4iCisiICAgIC1hIC0tYWRkcmVzcyAgICAgICAgIFB1Ymxpc2ggYWRkcmVzc1xuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBFbmFibGUgdmVyYm9zZSBtb2RlXG4iCisiICAgIC1kIC0tZG9tYWluPURPTUFJTiAgIERvbWFpbiB0byBwdWJsaXNoIHNlcnZpY2UgaW5cbiIKKyIgICAgLUggLS1ob3N0PURPTUFJTiAgICAgSG9zdCB3aGVyZSBzZXJ2aWNlIHJlc2lkZXNcbiIKKyIgICAgICAgLS1zdWJ0eXBlPVNVQlRZUEUgQW4gYWRkaXRpb25hbCBzdWJ0eXBlIHRvIHJlZ2lzdGVyIHRoaXMgc2VydmljZSAiCisid2l0aFxuIgorIiAgICAtUiAtLW5vLXJldmVyc2UgICAgICBEbyBub3QgcHVibGlzaCByZXZlcnNlIGVudHJ5IHdpdGggYWRkcmVzc1xuIgorIiAgICAtZiAtLW5vLWZhaWwgICAgICAgICBEb24ndCBmYWlsIGlmIHRoZSBkYWVtb24gaXMgbm90IGF2YWlsYWJsZVxuIgorbXNnc3RyICIiCisiJXMgW29wY2lvbmVzXSAlcyA8bm9tYnJlPiA8dGlwbz4gPHB1ZXJ0bz4gWzx0eHQg4oCmPl1cbiIKKyIlcyBbb3BjaW9uZXNdICVzIDxub21icmUtZGVsLWVxdWlwbz4gPGRpcmVjY2nDs24+XG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIE1vc3RyYXIgZXN0YSBheXVkYVxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBNb3N0cmFyIGxhIHZlcnNpw7NuXG4iCisiICAgIC1zIC0tc2VydmljZSAgICAgICAgIFB1YmxpY2FyIGVsIHNlcnZpY2lvXG4iCisiICAgIC1hIC0tYWRkcmVzcyAgICAgICAgIFB1YmxpY2FyIGxhIGRpcmVjY2nDs25cbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgQWN0aXZhciBlbCBtb2RvIGRldGFsbGFkb1xuIgorIiAgICAtZCAtLWRvbWFpbj1ET01JTklPICBEb21pbmlvIGRvbmRlIHB1YmxpY2FyIGVsIHNlcnZpY2lvXG4iCisiICAgIC1IIC0taG9zdD1ET01JTklPICAgIEVxdWlwbyBkb25kZSByZXNpZGUgZWwgc2VydmljaW9cbiIKKyIgICAgICAgLS1zdWJ0eXBlPVNVQlRJUE8gIFVuIHN1YnRpcG8gYWRpY2lvbmFsIGNvbiBlbCBxdWUgcmVnaXN0cmFyIGVzdGUgIgorInNlcnZpY2lvXG4iCisiICAgIC1SIC0tbm8tcmV2ZXJzZSAgICAgIE5vIHB1YmxpY2FyIGVudHJhZGEgZGUgcmV2ZXJzbyBjb24gZXN0YSBkaXJlY2Npw7NuXG4iCisiICAgIC1mIC0tbm8tZmFpbCAgICAgICAgIE5vIGZhbGxhciBlbiBjYXNvIHF1ZSBlbCBkZW1vbmlvIG5vIGVzdMOpICIKKyJkaXNwb25pYmxlXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozMDMgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjMxOAorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgbnVtYmVyIG9mIGFyZ3VtZW50c1xuIgorbXNnc3RyICJOw7ptZXJvIGRlIGFyZ3VtZW50b3MgaW5jb3JyZWN0b1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBwb3J0IG51bWJlcjogJXNcbiIKK21zZ3N0ciAiRmFsbMOzIGFsIGFuYWxpemFyIGVsIG7Dum1lcm8gZGUgcHVlcnRvOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MzYxIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gY29tbWFuZCBzcGVjaWZpZWQuXG4iCittc2dzdHIgIk5vIHNlIGVzcGVjaWZpY8OzIG5pbmfDum4gY29tYW5kby5cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIGhvc3QgbmFtZSAnJXMnOiAlc1xuIgorbXNnc3RyICJFcnJvciBhbCByZXNvbHZlciBlbCBub21icmUgZGVsIGVxdWlwbyDCqyVzwrs6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoxMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgYWRkcmVzcyAnJXMnOiAlc1xuIgorbXNnc3RyICJFcnJvciBhbCByZXNvbHZlciBsYSBkaXJlY2Npw7NuIMKrJXPCuzogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjE1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgW29wdGlvbnNdICVzIDxob3N0IG5hbWUgLi4uPlxuIgorIiVzIFtvcHRpb25zXSAlcyA8YWRkcmVzcyAuLi4gPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLW4gLS1uYW1lICAgICAgICAgICAgUmVzb2x2ZSBob3N0IG5hbWVcbiIKKyIgICAgLWEgLS1hZGRyZXNzICAgICAgICAgUmVzb2x2ZSBhZGRyZXNzXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKKyIgICAgLTYgICAgICAgICAgICAgICAgICAgTG9va3VwIElQdjYgYWRkcmVzc1xuIgorIiAgICAtNCAgICAgICAgICAgICAgICAgICBMb29rdXAgSVB2NCBhZGRyZXNzXG4iCittc2dzdHIgIiIKKyIlcyBbb3BjaW9uZXNdICVzIDxub21icmUgZGVsIHNlcnZpZG9yIOKApj5cbiIKKyIlcyBbb3BjaW9uZXNdICVzIDxkaXJlY2Npw7NuIOKApj5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwIE1vc3RyYXIgZXN0YSBheXVkYVxuIgorIiAgICAtViAtLXZlcnNpb24gTW9zdHJhciBsYSB2ZXJzacOzblxuIgorIiAgICAtbiAtLW5hbWUgUmVzb2x2ZXIgZWwgbm9tYnJlIGRlbCBzZXJ2aWRvclxuIgorIiAgICAtYSAtLWFkZHJlc3MgUmVzb2x2ZXIgbGEgZGlyZWNjacOzblxuIgorIiAgICAtdiAtLXZlcnZvc2UgQWN0aXZhciBlbCBtb2RvIGRldGFsbGFkb1xuIgorIiAgICAtNiBCdXNjYXIgZGlyZWNjacOzbiBJUHY2XG4iCisiICAgIC00IEJ1c2NhciBkaXJlY2Npw7NuIElQdjRcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI5OSAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgaG9zdCBuYW1lIHJlc29sdmVyOiAlc1xuIgorbXNnc3RyICJGYWxsw7MgYWwgY3JlYXIgZWwgcmVzb2x1dG9yIGRlIG5vbWJyZXMgZGUgZXF1aXBvOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBhZGRyZXNzICclcydcbiIKK21zZ3N0ciAiRmFsbMOzIGFsIGFuYWxpemFyIGxhIGRpcmVjY2nDs24gwqslc8K7XG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzozMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBhZGRyZXNzIHJlc29sdmVyOiAlc1xuIgorbXNnc3RyICJGYWxsw7MgYWwgY3JlYXIgZWwgcmVzb2x1dG9yIGRlIGRpcmVjY2lvbmVzOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFtvcHRpb25zXSA8bmV3IGhvc3QgbmFtZT5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgU2hvdyB2ZXJzaW9uXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKK21zZ3N0ciAiIgorIiVzIFtvcGNpb25lc10gPG51ZXZvIG5vbWJyZSBkZSBzZXJ2aWRvcj5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgTW9zdHJhciBlc3RhIGF5dWRhXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIE1vc3RyYXIgbGEgdmVyc2nDs25cbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgQWN0aXZhciBlbCBtb2RvIGRldGFsbGFkb1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cywgZXhwZWN0aW5nIGV4YWN0bHkgb25lLlxuIgorbXNnc3RyICJOw7ptZXJvIGRlIGFyZ3VtZW50b3MgaW5jb3JyZWN0bzsgc2UgZXNwZXJhYmEgZXhhY3RhbWVudGUgdW5vLlxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkhvc3QgbmFtZSBzdWNjZXNzZnVsbHkgY2hhbmdlZCB0byAlc1xuIgorbXNnc3RyICJFbCBub21icmUgZGVsIGVxdWlwbyBzZSBoYSBjYW1iaWFkbyBjb24gw6l4aXRvIGEgJXNcbiIKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9wby9maS5wbyBiL2F2YWhpLTAuNi4zMS9wby9maS5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmQwODgzCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL3BvL2ZpLnBvCkBAIC0wLDAgKzEsODUzIEBACisjIEF2YWhpIEZpbm5pc2ggdHJhbnNsYXRpb24uCisjIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFRpbW8gSnlyaW5raQorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgYXZhaGkgcGFja2FnZS4KKyMgVGltbyBKeXJpbmtpIDx0aW1vLmp5cmlua2lAaWtpLmZpPiwgMjAwOC0yMDA5LgorIyBWaWxsZS1QZWtrYSBWYWluaW8gPHZwaXZhaW5pQGNzLmhlbHNpbmtpLmZpPiwgMjAxMC4KK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGF2YWhpXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDExLTA0LTAyIDAzOjIzKzAyMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDEwLTEwLTMxIDEyOjAwKzAyMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IFZpbGxlLVBla2thIFZhaW5pbyA8dnBpdmFpbmlAY3MuaGVsc2lua2kuZmk+XG4iCisiTGFuZ3VhZ2UtVGVhbTogRmlubmlzaCA8Z25vbWUtZmktbGFhdHVAbGlzdHMuc291cmNlZm9yZ2UubmV0PlxuIgorIkxhbmd1YWdlOiBmaVxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuICE9IDEpO1xuIgorIlgtR2VuZXJhdG9yOiBWaXJ0YWFsIDAuNi4xXG4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjMwCittc2dpZCAiT0siCittc2dzdHIgIk9LIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozMQorbXNnaWQgIk9wZXJhdGlvbiBmYWlsZWQiCittc2dzdHIgIlRvaW1pbnRvIGVww6Rvbm5pc3R1aSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzIKK21zZ2lkICJCYWQgc3RhdGUiCittc2dzdHIgIkh1b25vIHRpbGEiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjMzCittc2dpZCAiSW52YWxpZCBob3N0IG5hbWUiCittc2dzdHIgIktlbHZvdG9uIHZlcmtrb25pbWkiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM0Cittc2dpZCAiSW52YWxpZCBkb21haW4gbmFtZSIKK21zZ3N0ciAiS2Vsdm90b24gdmVya2tvYWx1ZWVuIG5pbWkiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM1Cittc2dpZCAiTm8gc3VpdGFibGUgbmV0d29yayBwcm90b2NvbCBhdmFpbGFibGUiCittc2dzdHIgIlNvcGl2YWEgdmVya2tveWh0ZXlza8OkeXTDpG50w7bDpCBlaSBvbGUgc2FhdGF2aWxsYSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzYKK21zZ2lkICJJbnZhbGlkIEROUyBUVEwiCittc2dzdHIgIlZpcmhlZWxsaW5lbiBETlMgVFRMIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozNworbXNnaWQgIlJlc291cmNlIHJlY29yZCBrZXkgaXMgcGF0dGVybiIKK21zZ3N0ciAiUmVzdXJzc2luIHRpZXR1ZWF2YWluIG9uIGxhdXNla2UiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM4Cittc2dpZCAiTG9jYWwgbmFtZSBjb2xsaXNpb24iCittc2dzdHIgIlBhaWthbGxpbmVuIG5pbWllbiB5aHRlZW50w7ZybcOkeXMiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM5Cittc2dpZCAiSW52YWxpZCByZWNvcmQiCittc2dzdHIgIlZpcmhlZWxsaW5lbiB0aWV0dWUiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQxCittc2dpZCAiSW52YWxpZCBzZXJ2aWNlIG5hbWUiCittc2dzdHIgIlZpcmhlZWxsaW5lbiBwYWx2ZWx1biBuaW1pIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0MgorbXNnaWQgIkludmFsaWQgc2VydmljZSB0eXBlIgorbXNnc3RyICJWaXJoZWVsbGluZW4gcGFsdmVsdW4gdHl5cHBpIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0MworbXNnaWQgIkludmFsaWQgcG9ydCBudW1iZXIiCittc2dzdHIgIlZpcmhlZWxsaW5lbiBwb3J0dGludW1lcm8iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQ0Cittc2dpZCAiSW52YWxpZCByZWNvcmQga2V5IgorbXNnc3RyICJWaXJoZWVsbGluZW4gdGlldHVlYXZhaW4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQ1Cittc2dpZCAiSW52YWxpZCBhZGRyZXNzIgorbXNnc3RyICJWaXJoZWVsbGluZW4gb3NvaXRlIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NgorbXNnaWQgIlRpbWVvdXQgcmVhY2hlZCIKK21zZ3N0ciAiVGFwYWh0dWkgYWlrYWthdGthaXN1IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NworbXNnaWQgIlRvbyBtYW55IGNsaWVudHMiCittc2dzdHIgIkxpaWFuIG1vbnRhIGFzaWFrYXN0YSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDgKK21zZ2lkICJUb28gbWFueSBvYmplY3RzIgorbXNnc3RyICJMaWlhbiBtb250YSBvYmpla3RpYSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDkKK21zZ2lkICJUb28gbWFueSBlbnRyaWVzIgorbXNnc3RyICJMaWlhbiBtb250YSBrb2hkZXR0YSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTAKK21zZ2lkICJPUyBFcnJvciIKK21zZ3N0ciAiT1MtdmlyaGUiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjUyCittc2dpZCAiQWNjZXNzIGRlbmllZCIKK21zZ3N0ciAiUMOkw6RzeSBldsOkdHR5IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1MworbXNnaWQgIkludmFsaWQgb3BlcmF0aW9uIgorbXNnc3RyICJWaXJoZWVsbGluZW4gdG9pbWludG8iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU0Cittc2dpZCAiQW4gdW5leHBlY3RlZCBELUJ1cyBlcnJvciBvY2N1cmVkIgorbXNnc3RyICJUYXBhaHR1aSBvZG90dGFtYXRvbiBELUJ1cy12aXJoZSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTUKK21zZ2lkICJEYWVtb24gY29ubmVjdGlvbiBmYWlsZWQiCittc2dzdHIgIlRhdXN0YXByb3Nlc3NpeWh0ZXlzIGVww6Rvbm5pc3R1aSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTYKK21zZ2lkICJNZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICJNdWlzdGkgbG9wcHVpIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1NworbXNnaWQgIlRoZSBvYmplY3QgcGFzc2VkIGluIHdhcyBub3QgdmFsaWQiCittc2dzdHIgIkFubmV0dHUgb2JqZWt0aSBlaSBvbGx1dCBrZWx2b2xsaW5lbiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTgKK21zZ2lkICJEYWVtb24gbm90IHJ1bm5pbmciCittc2dzdHIgIlRhdXN0YXByb3Nlc3NpIGVpIGvDpHlubmlzc8OkIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1OQorbXNnaWQgIkludmFsaWQgaW50ZXJmYWNlIGluZGV4IgorbXNnc3RyICJWaXJoZWVsbGluZW4gbGlpdMOkbm7DpG4gasOkcmplc3R5c251bWVybyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjAKK21zZ2lkICJJbnZhbGlkIHByb3RvY29sIHNwZWNpZmljYXRpb24iCittc2dzdHIgIlZpcmhlZWxsaW5lbiB5aHRleXNrw6R5dMOkbm7Dtm4gbcOkw6RyaXR0ZWx5IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2MQorbXNnaWQgIkludmFsaWQgZmxhZ3MiCittc2dzdHIgIlZpcmhlZWxsaXNldCBsaXB1dCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjMKK21zZ2lkICJOb3QgZm91bmQiCittc2dzdHIgIkVpIGzDtnl0eW55dCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjQKK21zZ2lkICJJbnZhbGlkIGNvbmZpZ3VyYXRpb24iCittc2dzdHIgIlZpcmhlZWxsaXNldCBhc2V0dWtzZXQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY1Cittc2dpZCAiVmVyc2lvbiBtaXNtYXRjaCIKK21zZ3N0ciAiVmVyc2lvcmlzdGlyaWl0YSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjYKK21zZ2lkICJJbnZhbGlkIHNlcnZpY2Ugc3VidHlwZSIKK21zZ3N0ciAiVmlyaGVlbGxpbmVuIHBhbHZlbHVuIGFsYXR5eXBwaSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjcKK21zZ2lkICJJbnZhbGlkIHBhY2tldCIKK21zZ3N0ciAiVmlyaGVlbGxpbmVuIHBha2V0dGkiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY4Cittc2dpZCAiSW52YWxpZCBETlMgcmV0dXJuIGNvZGUiCittc2dzdHIgIlZpcmhlZWxsaW5lbiBETlMtcGFsYXV0dXNrb29kaSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjkKK21zZ2lkICJETlMgZmFpbHVyZTogRk9STUVSUiIKK21zZ3N0ciAiRE5TLXRvaW1pbnRhaMOkaXJpw7Y6IEZPUk1FUlIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjcwCittc2dpZCAiRE5TIGZhaWx1cmU6IFNFUlZGQUlMIgorbXNnc3RyICJETlMtdG9pbWludGFow6RpcmnDtjogU0VSVkZBSUwiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjcxCittc2dpZCAiRE5TIGZhaWx1cmU6IE5YRE9NQUlOIgorbXNnc3RyICJETlMtdG9pbWludGFow6RpcmnDtjogTlhET01BSU4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjcyCittc2dpZCAiRE5TIGZhaWx1cmU6IE5PVElNUCIKK21zZ3N0ciAiRE5TLXRvaW1pbnRhaMOkaXJpw7Y6IE5PVElNUCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzQKK21zZ2lkICJETlMgZmFpbHVyZTogUkVGVVNFRCIKK21zZ3N0ciAiRE5TLXRvaW1pbnRhaMOkaXJpw7Y6IFJFRlVTRUQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc1Cittc2dpZCAiRE5TIGZhaWx1cmU6IFlYRE9NQUlOIgorbXNnc3RyICJETlMtdG9pbWludGFow6RpcmnDtjogWVhET01BSU4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc2Cittc2dpZCAiRE5TIGZhaWx1cmU6IFlYUlJTRVQiCittc2dzdHIgIkROUy10b2ltaW50YWjDpGlyacO2OiBZWFJSU0VUIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3NworbXNnaWQgIkROUyBmYWlsdXJlOiBOWFJSU0VUIgorbXNnc3RyICJETlMtdG9pbWludGFow6RpcmnDtjogTlhSUlNFVCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzgKK21zZ2lkICJETlMgZmFpbHVyZTogTk9UQVVUSCIKK21zZ3N0ciAiRE5TLXRvaW1pbnRhaMOkaXJpw7Y6IE5PVEFVVEgiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc5Cittc2dpZCAiRE5TIGZhaWx1cmU6IE5PVFpPTkUiCittc2dzdHIgIkROUy10b2ltaW50YWjDpGlyacO2OiBOT1RaT05FIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4MAorbXNnaWQgIkludmFsaWQgUkRBVEEiCittc2dzdHIgIlZpcmhlZWxsaW5lbiBSREFUQSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODEKK21zZ2lkICJJbnZhbGlkIEROUyB0eXBlIgorbXNnc3RyICJWaXJoZWVsbGluZW4gRE5TLXR5eXBwaSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODIKK21zZ2lkICJJbnZhbGlkIEROUyBjbGFzcyIKK21zZ3N0ciAiVmlyaGVlbGxpbmVuIEROUy1sdW9ra2EiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjgzCittc2dpZCAiTm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiRWkgdHVldHR1IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4NQorbXNnaWQgIk5vdCBwZXJtaXR0ZWQiCittc2dzdHIgIkVpIHNhbGxpdHR1IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4NgorbXNnaWQgIkludmFsaWQgYXJndW1lbnQiCittc2dzdHIgIlZpcmhlZWxsaW5lbiBhcmd1bWVudHRpIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4NworbXNnaWQgIklzIGVtcHR5IgorbXNnc3RyICJPbiB0eWhqw6QiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjg4Cittc2dpZCAiVGhlIHJlcXVlc3RlZCBvcGVyYXRpb24gaXMgaW52YWxpZCBiZWNhdXNlIHJlZHVuZGFudCIKK21zZ3N0ciAiUHl5ZGV0dHkgdG9pbWludG8gb24gdGFycGVldHRvbXV1ZGVzdGEgam9odHVlbiB2aXJoZWVsbGluZW4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjk0Cittc2dpZCAiSW52YWxpZCBFcnJvciBDb2RlIgorbXNnc3RyICJLZWx2b3RvbiB2aXJoZWtvb2RpIgorCisjOiAuLi9hdmFoaS1kaXNjb3Zlci1zdGFuZGFsb25lL2F2YWhpLWRpc2NvdmVyLnVpLmg6MQorIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5Ojc2Cittc2dpZCAiPGk+Tm8gc2VydmljZSBjdXJyZW50bHkgc2VsZWN0ZWQuPC9pPiIKK21zZ3N0ciAiPGk+UGFsdmVsdWEgZWkgdMOkbGzDpCBoZXRrZWxsw6Qgb2xlIHZhbGl0dHUuPC9pPiIKKworIzogLi4vYXZhaGktZGlzY292ZXItc3RhbmRhbG9uZS9hdmFoaS1kaXNjb3Zlci51aS5oOjIKK21zZ2lkICJBdmFoaSBEaXNjb3ZlcnkiCittc2dzdHIgIkF2YWhpLWzDtnl0w6Rqw6QiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5kZXNrdG9wLmluLmluLmg6MQorbXNnaWQgIkF2YWhpIFplcm9jb25mIEJyb3dzZXIiCittc2dzdHIgIkF2YWhpbiBaZXJvY29uZi1zZWxhaW4iCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5kZXNrdG9wLmluLmluLmg6MgorbXNnaWQgIkJyb3dzZSBmb3IgWmVyb2NvbmYgc2VydmljZXMgYXZhaWxhYmxlIG9uIHlvdXIgbmV0d29yayIKK21zZ3N0ciAiU2VsYWEgdmVya29zc2Egc2FhdGF2aWxsYSBvbGV2aWEgWmVyb2NvbmYtcGFsdmVsdWl0YSIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIyNAorbXNnaWQgIlRYVCIKK21zZ3N0ciAiVFhUIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI2Cittc2dpZCAiVFhUIERhdGE6IgorbXNnc3RyICJUWFQtZGF0YToiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMjYKK21zZ2lkICJlbXB0eSIKK21zZ3N0ciAidHloasOkIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI4Cittc2dpZCAiU2VydmljZSBUeXBlOiIKK21zZ3N0ciAiUGFsdmVsdW4gdHl5cHBpOiIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIyOQorbXNnaWQgIlNlcnZpY2UgTmFtZToiCittc2dzdHIgIlBhbHZlbHVuIG5pbWk6IgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjMwCittc2dpZCAiRG9tYWluIE5hbWU6IgorbXNnc3RyICJWZXJra290dW5udXM6IgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjMxCittc2dpZCAiSW50ZXJmYWNlOiIKK21zZ3N0ciAiVmVya2tvbGlpdMOkbnTDpDoiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMzIKK21zZ2lkICJBZGRyZXNzOiIKK21zZ3N0ciAiT3NvaXRlOiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxODUKK21zZ2lkICJCcm93c2UgU2VydmljZSBUeXBlcyIKK21zZ3N0ciAiU2VsYWEgcGFsdmVsdXR5eXBwZWrDpCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxODUKK21zZ2lkICJBIE5VTEwgdGVybWluYXRlZCBsaXN0IG9mIHNlcnZpY2UgdHlwZXMgdG8gYnJvd3NlIGZvciIKK21zZ3N0ciAiTlVMTC1ww6TDpHRldHR5IGx1ZXR0ZWxvIHNlbGF0dGF2aXN0YSBwYWx2ZWx1dHl5cGVpc3TDpCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxOTAKK21zZ2lkICJEb21haW4iCittc2dzdHIgIlZlcmtrb2FsdWUiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTkwCittc2dpZCAiVGhlIGRvbWFpbiB0byBicm93c2UgaW4sIG9yIE5VTEwgZm9yIHRoZSBkZWZhdWx0IGRvbWFpbiIKK21zZ3N0ciAiU2VsYXR0YXZhIHZlcmtrb2FsdWUsIHRhaSBOVUxMIG9sZXR1c3Zlcmtrb2FsdWVlbiB2YWxpdHNlbWlzZWtzaSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxOTYKK21zZ2lkICJTZXJ2aWNlIFR5cGUiCittc2dzdHIgIlBhbHZlbHVuIHR5eXBwaSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxOTYKK21zZ2lkICJUaGUgc2VydmljZSB0eXBlIG9mIHRoZSBzZWxlY3RlZCBzZXJ2aWNlIgorbXNnc3RyICJWYWxpdHVuIHBhbHZlbHVuIHBhbHZlbHV0eXlwcGkiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjAyIC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTAyMworbXNnaWQgIlNlcnZpY2UgTmFtZSIKK21zZ3N0ciAiUGFsdmVsdW4gbmltaSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMDIKK21zZ2lkICJUaGUgc2VydmljZSBuYW1lIG9mIHRoZSBzZWxlY3RlZCBzZXJ2aWNlIgorbXNnc3RyICJWYWxpdHVuIHBhbHZlbHVuIHBhbHZlbHVuaW1pIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIwOAorbXNnaWQgIkFkZHJlc3MiCittc2dzdHIgIk9zb2l0ZSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMDgKK21zZ2lkICJUaGUgYWRkcmVzcyBvZiB0aGUgcmVzb2x2ZWQgc2VydmljZSIKK21zZ3N0ciAiU2Vsdml0ZXR5biBwYWx2ZWx1biBvc29pdGUiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjEzCittc2dpZCAiUG9ydCIKK21zZ3N0ciAiUG9ydHRpIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIxMworbXNnaWQgIlRoZSBJUCBwb3J0IG51bWJlciBvZiB0aGUgcmVzb2x2ZWQgc2VydmljZSIKK21zZ3N0ciAiU2Vsdml0ZXR5biBwYWx2ZWx1biBJUC1wb3J0dGludW1lcm8iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjE5Cittc2dpZCAiSG9zdCBOYW1lIgorbXNnc3RyICJWZXJra29uaW1pIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIxOQorbXNnaWQgIlRoZSBob3N0IG5hbWUgb2YgdGhlIHJlc29sdmVkIHNlcnZpY2UiCittc2dzdHIgIlNlbHZpdGV0eW4gcGFsdmVsdW4gdmVya2tvbmltaSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMjUKK21zZ2lkICJUWFQgRGF0YSIKK21zZ3N0ciAiVFhULWRhdGEiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjI1Cittc2dpZCAiVGhlIFRYVCBkYXRhIG9mIHRoZSByZXNvbHZlZCBzZXJ2aWNlIgorbXNnc3RyICJTZWx2aXRldHluIHBhbHZlbHVuIFRYVC1kYXRhIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIzMAorbXNnaWQgIlJlc29sdmUgU2VydmljZSIKK21zZ3N0ciAiU2Vsdml0w6QgcGFsdmVsdSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMzAKK21zZ2lkICJSZXNvbHZlIHRoZSBzZWxlY3RlZCBzZXJ2aWNlIGF1dG9tYXRpY2FsbHkgYmVmb3JlIHJldHVybmluZyIKK21zZ3N0ciAiU2Vsdml0w6QgdmFsaXR0dSBwYWx2ZWx1IGF1dG9tYWF0dGlzZXN0aSBlbm5lbiBwYWxhYW1pc3RhIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIzNgorbXNnaWQgIlJlc29sdmUgU2VydmljZSBIb3N0IE5hbWUiCittc2dzdHIgIlNlbHZpdMOkIHBhbHZlbHVuIHZlcmtrb25pbWkiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjM2Cittc2dpZCAiIgorIlJlc29sdmUgdGhlIGhvc3QgbmFtZSBvZiB0aGUgc2VsZWN0ZWQgc2VydmljZSBhdXRvbWF0aWNhbGx5IGJlZm9yZSByZXR1cm5pbmciCittc2dzdHIgIlNlbHZpdMOkIHZhbGl0dW4gcGFsdmVsdW4gdmVya2tvbmltaSBhdXRvbWFhdHRpc2VzdGkgZW5uZW4gcGFsYWFtaXN0YSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyNDIKK21zZ2lkICJBZGRyZXNzIGZhbWlseSIKK21zZ3N0ciAiT3NvaXRlcGVyaGUiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjQyCittc2dpZCAiVGhlIGFkZHJlc3MgZmFtaWx5IGZvciBob3N0IG5hbWUgcmVzb2x1dGlvbiIKK21zZ3N0ciAiT3NvaXRlcGVyaGUgdmVya2tvbmltZW4gc2Vsdml0dMOkbWlzdMOkIHZhcnRlbiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzozMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaGkgY2xpZW50IGZhaWx1cmU6ICVzIgorbXNnc3RyICJBdmFoaS1hc2lha2thYW4gdG9pbWludGFow6RpcmnDtjogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6Mzg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWhpIHJlc29sdmVyIGZhaWx1cmU6ICVzIgorbXNnc3RyICJBdmFoaS1zZWx2aXR0aW1lbiB0b2ltaW50YWjDpGlyacO2OiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo1MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJvd3NpbmcgZm9yIHNlcnZpY2UgdHlwZSAlcyBpbiBkb21haW4gJXMgZmFpbGVkOiAlcyIKK21zZ3N0ciAiUGFsdmVsdXR5eXBpbiAlcyBzZWxhYW1pbmVuIHZlcmtrb2FsdXVlc3NhICVzIGVww6Rvbm5pc3R1aTogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NTE5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjE2OAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTY5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjE3OAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTc5Cittc2dpZCAibi9hIgorbXNnc3RyICItIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjY0OQorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFoaSBkb21haW4gYnJvd3NlciBmYWlsdXJlOiAlcyIKK21zZ3N0ciAiQXZhaGktdmVya2tvYWx1ZXNlbGFpbWVuIHRvaW1pbnRhaMOkaXJpw7Y6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjY4NAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVhZCBBdmFoaSBkb21haW46ICVzIgorbXNnc3RyICJBdmFoaS12ZXJra29hbHVldHRhIGVpIHZvaSBsdWtlYTogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NzA2Cittc2dpZCAiQnJvd3NlIHNlcnZpY2UgdHlwZSBsaXN0IGlzIGVtcHR5ISIKK21zZ3N0ciAiU2VsYXR0YXZpZW4gcGFsdmVsdXR5eXBwaWVuIGx1ZXR0ZWxvIG9uIHR5aGrDpC4iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjb25uZWN0IHRvIEF2YWhpIHNlcnZlcjogJXMiCittc2dzdHIgIkF2YWhpLXBhbHZlbGltZWVuIGVpIHZvaSB5aGRpc3TDpMOkOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo3MzUKK21zZ2lkICJCcm93c2luZyBmb3Igc2VydmljZXMgb24gPGI+bG9jYWwgbmV0d29yazwvYj46IgorbXNnc3RyICJTZWxhdGFhbiBwYWx2ZWx1aXRhIDxiPnBhaWthbGxpc2Vzc2EgdmVya29zc2E8L2I+OiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo3MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJvd3NpbmcgZm9yIHNlcnZpY2VzIGluIGRvbWFpbiA8Yj4lczwvYj46IgorbXNnc3RyICJTZWxhdGFhbiBwYWx2ZWx1aXRhIHZlcmtrb2FsdWVlc3NhIDxiPiVzPC9iPjoiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NzczCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgYnJvd3NlciBmb3IgJXM6ICVzIgorbXNnc3RyICJTZWxhaW50YSBlaSB2b2kgbHVvZGEga29odGVlbGxlICVzOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo5MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSByZXNvbHZlciBmb3IgJXMgb2YgdHlwZSAlcyBpbiBkb21haW4gJXM6ICVzIgorbXNnc3RyICJLb2h0ZWVsbGUgJXMgZWkgdm9pIGx1b2RhIHNlbHZpdGludHl5cHBpw6QgJXMgdmVya2tvYWx1ZWVzc2EgJXM6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjk3OAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGRvbWFpbiBicm93c2VyOiAlcyIKK21zZ3N0ciAiVmVya2tvYWx1ZXNlbGFpbnRhIGVpIHZvaSBsdW9kYTogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6OTg5Cittc2dpZCAiQ2hhbmdlIGRvbWFpbiIKK21zZ3N0ciAiVmFpaGRhIHZlcmtrb2FsdWV0dGEiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTAzMSAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNjIKK21zZ2lkICJCcm93c2luZy4uLiIKK21zZ3N0ciAiU2VsYXRhYW4uLi4iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTEyMAorbXNnaWQgIkluaXRpYWxpemluZy4uLiIKK21zZ3N0ciAiQWx1c3RldGFhbi4uLiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTQ0Cittc2dpZCAiTG9jYXRpb24iCittc2dzdHIgIlNpamFpbnRpIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNDkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTUzCittc2dpZCAiTmFtZSIKK21zZ3N0ciAiTmltaSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTU0IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU1MworbXNnaWQgIlR5cGUiCittc2dzdHIgIlR5eXBwaSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTY2Cittc2dpZCAiX0RvbWFpbi4uLiIKK21zZ3N0ciAiX1Zlcmtrb2FsdWUuLi4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzo1NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgW29wdGlvbnNdXG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1zIC0tc3NoICAgICAgICAgICAgIEJyb3dzZSBTU0ggc2VydmVyc1xuIgorIiAgICAtdiAtLXZuYyAgICAgICAgICAgICBCcm93c2UgVk5DIHNlcnZlcnNcbiIKKyIgICAgLVMgLS1zaGVsbCAgICAgICAgICAgQnJvd3NlIGJvdGggU1NIIGFuZCBWTkNcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgVGhlIGRvbWFpbiB0byBicm93c2UgaW5cbiIKK21zZ3N0ciAiIgorIiVzIFt2YWxpdHNpbWV0XVxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBOw6R5dMOkIHTDpG3DpCBvaGplXG4iCisiICAgIC1zIC0tc3NoICAgICAgICAgICAgIFNlbGFhIFNTSC1wYWx2ZWxpbWlhXG4iCisiICAgIC12IC0tdm5jICAgICAgICAgICAgIFNlbGFhIFZOQy1wYWx2ZWxpbWlhXG4iCisiICAgIC1TIC0tc2hlbGwgICAgICAgICAgIFNlbGFhIHNla8OkIFNTSC0gZXR0w6QgVk5DLXBhbHZlbGltaWFcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgU2VsYXR0YXZhIHZlcmtrb2FsdWVcbiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjEwMSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo3NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG9vIG1hbnkgYXJndW1lbnRzXG4iCittc2dzdHIgIkxpaWFuIG1vbnRhIGFyZ3VtZW50dGlhXG4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNDkKK21zZ2lkICJDaG9vc2UgU2hlbGwgU2VydmVyIgorbXNnc3RyICJWYWxpdHNlIHDDpMOkdGVwYWx2ZWxpbiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE1MQorbXNnaWQgIkRlc2t0b3AiCittc2dzdHIgIlR5w7Zww7Z5dMOkIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTUyCittc2dpZCAiVGVybWluYWwiCittc2dzdHIgIlDDpMOkdGUiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNTYKK21zZ2lkICJDaG9vc2UgVk5DIHNlcnZlciIKK21zZ3N0ciAiVmFsaXRzZSBWTkMtcGFsdmVsaW4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNjEKK21zZ2lkICJDaG9vc2UgU1NIIHNlcnZlciIKK21zZ3N0ciAiVmFsaXRzZSBTU0gtcGFsdmVsaW4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29ubmVjdGluZyB0byAnJXMnIC4uLlxuIgorbXNnc3RyICJZaGRpc3RldMOkw6RuIGtvaHRlZXNlZW4gXCIlc1wiLi4uXG4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoyNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhlY2xwKCkgZmFpbGVkOiAlc1xuIgorbXNnc3RyICJleGVjbHAoKSBlcMOkb25uaXN0dWk6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FuY2VsZWQuXG4iCittc2dzdHIgIlBlcnV0dHUuXG4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guZGVza3RvcC5pbi5pbi5oOjEKK21zZ2lkICJBdmFoaSBTU0ggU2VydmVyIEJyb3dzZXIiCittc2dzdHIgIkF2YWhpbiBTU0gtcGFsdmVsaW5zZWxhaW4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guZGVza3RvcC5pbi5pbi5oOjIKK21zZ2lkICJCcm93c2UgZm9yIFplcm9jb25mLWVuYWJsZWQgU1NIIFNlcnZlcnMiCittc2dzdHIgIlNlbGFhIFplcm9jb25mLXZhcnVzdGV0dHVqYSBTU0gtcGFsdmVsaW1pYSIKKworIzogLi4vYXZhaGktdWkvYnZuYy5kZXNrdG9wLmluLmluLmg6MQorbXNnaWQgIkF2YWhpIFZOQyBTZXJ2ZXIgQnJvd3NlciIKK21zZ3N0ciAiQXZhaGluIFZOQy1wYWx2ZWxpbnNlbGFpbiIKKworIzogLi4vYXZhaGktdWkvYnZuYy5kZXNrdG9wLmluLmluLmg6MgorbXNnaWQgIkJyb3dzZSBmb3IgWmVyb2NvbmYtZW5hYmxlZCBWTkMgU2VydmVycyIKK21zZ3N0ciAiU2VsYWEgWmVyb2NvbmYtdmFydXN0ZXR0dWphIFZOQy1wYWx2ZWxpbWlhIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoxMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiOiBBbGwgZm9yIG5vd1xuIgorbXNnc3RyICI6IEthaWtraSB0b2lzdGFpc2Vrc2lcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIjogQ2FjaGUgZXhoYXVzdGVkXG4iCittc2dzdHIgIjogVsOkbGltdWlzdGkga3VsdXRldHR1IGxvcHB1dW5cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MjM5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSBzZXJ2aWNlICclcycgb2YgdHlwZSAnJXMnIGluIGRvbWFpbiAnJXMnOiAlc1xuIgorbXNnc3RyICIiCisiUGFsdmVsdWEgXCIlc1wiLCB0eXlwaWx0w6TDpG4gXCIlc1wiLCBlaSB2b2kgc2Vsdml0dMOkw6QgdmVya2tvYWx1ZWVzc2EgXCIlc1wiOiAiCisiJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MzQwCisjLCBjLWZvcm1hdAorbXNnaWQgInNlcnZpY2VfYnJvd3NlciBmYWlsZWQ6ICVzXG4iCittc2dzdHIgInNlcnZpY2VfYnJvd3NlciBlcMOkb25uaXN0dWk6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjM3OAorIywgYy1mb3JtYXQKK21zZ2lkICJhdmFoaV9zZXJ2aWNlX2Jyb3dzZXJfbmV3KCkgZmFpbGVkOiAlc1xuIgorbXNnc3RyICJhdmFoaV9zZXJ2aWNlX2Jyb3dzZXJfbmV3KCkgZXDDpG9ubmlzdHVpOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VydmljZV90eXBlX2Jyb3dzZXIgZmFpbGVkOiAlc1xuIgorbXNnc3RyICJzZXJ2aWNlX3R5cGVfYnJvd3NlciBlcMOkb25uaXN0dWk6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjQ0NAorIywgYy1mb3JtYXQKK21zZ2lkICJhdmFoaV9zZXJ2aWNlX3R5cGVfYnJvd3Nlcl9uZXcoKSBmYWlsZWQ6ICVzXG4iCittc2dzdHIgImF2YWhpX3NlcnZpY2VfdHlwZV9icm93c2VyX25ldygpIGVww6Rvbm5pc3R1aTogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTE5CisjLCBjLWZvcm1hdAorbXNnaWQgImF2YWhpX2RvbWFpbl9icm93c2VyX25ldygpIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAiYXZhaGlfZG9tYWluX2Jyb3dzZXJfbmV3KCkgZXDDpG9ubmlzdHVpOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1MzUgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjM5NAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI4MCAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBxdWVyeSB2ZXJzaW9uIHN0cmluZzogJXNcbiIKK21zZ3N0ciAiVmVyc2lvbWVya2tpam9ub24gcHl5bnTDtiBlcMOkb25uaXN0dWk6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU0MCAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6Mzk5CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6Mjg1IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxNzMKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IGhvc3QgbmFtZTogJXNcbiIKK21zZ3N0ciAiVmVya2tvLW9zb2l0dGVlbiBweXludMO2IGVww6Rvbm5pc3R1aTogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTQ0IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo0MDMKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyODkgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE3NworIywgYy1mb3JtYXQKK21zZ2lkICJTZXJ2ZXIgdmVyc2lvbjogJXM7IEhvc3QgbmFtZTogJXNcbiIKK21zZ3N0ciAiUGFsdmVsaW1lbiB2ZXJzaW86ICVzLCB2ZXJra29uaW1pOiAlc1xuIgorCisjLiBUcmFuc2xhdG9yczogVGhpcyBpcyBhIGNvbHVtbiBoZWFkaW5nIHdpdGggYWJicmV2aWF0aW9ucyBmb3IKKyMuICogICBFdmVudCAoKy8tKSwgTmV0d29yayBJbnRlcmZhY2UsIFByb3RvY29sIChJUHY0L3Y2KSwgRG9tYWluCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRSBJZmNlIFByb3QgRG9tYWluXG4iCittc2dzdHIgIlQgTGlpdCBZaHRrIFZlcmtrb25pbWlcbiIKKworIy4gVHJhbnNsYXRvcnM6IFRoaXMgaXMgYSBjb2x1bW4gaGVhZGluZyB3aXRoIGFiYnJldmlhdGlvbnMgZm9yCisjLiAqICAgRXZlbnQgKCsvLSksIE5ldHdvcmsgSW50ZXJmYWNlLCBQcm90b2NvbCAoSVB2NC92NiksIERvbWFpbgorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUgSWZjZSBQcm90ICUtKnMgJS0yMHMgRG9tYWluXG4iCittc2dzdHIgIlQgTGlpdCBZaHRrICUtKnMgJS0yMHMgVmVya2tvbmltaVxuIgorCisjLiBXZSBoYXZlIGJlZW4gZGlzY29ubmVjdGVkLCBzbyBsZXQgcmVjb25uZWN0CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1ODUgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE2MworIywgYy1mb3JtYXQKK21zZ2lkICJEaXNjb25uZWN0ZWQsIHJlY29ubmVjdGluZyAuLi5cbiIKK21zZ3N0ciAiWWh0ZXlzIGthdGthaXN0aWluLCB5aGRpc3RldMOkw6RuIHV1ZGVsbGVlbi4uLlxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1OTkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6ODI5CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTcwIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozODYKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyNzIgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE2MAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGNsaWVudCBvYmplY3Q6ICVzXG4iCittc2dzdHIgIkFzaWFrYXNvYmpla3RpYSBlaSB2b2kgbHVvZGE6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjYwNCAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTc1CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MTQzIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzo1OQorIywgYy1mb3JtYXQKK21zZ2lkICJDbGllbnQgZmFpbHVyZSwgZXhpdGluZzogJXNcbiIKK21zZ3N0ciAiQXNpYWtrYWFuIHRvaW1pbnRhaMOkaXJpw7YsIHBvaXN0dXRhYW46ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjYyMyAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIldhaXRpbmcgZm9yIGRhZW1vbiAuLi5cbiIKK21zZ3N0ciAiT2RvdGV0YWFuIHRhdXN0YXByb3Nlc3NpYS4uLlxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo2NDcKK21zZ2lkICIiCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFNob3cgdmVyc2lvblxuIgorIiAgICAtRCAtLWJyb3dzZS1kb21haW5zICBCcm93c2UgZm9yIGJyb3dzaW5nIGRvbWFpbnMgaW5zdGVhZCBvZiBzZXJ2aWNlc1xuIgorIiAgICAtYSAtLWFsbCAgICAgICAgICAgICBTaG93IGFsbCBzZXJ2aWNlcywgcmVnYXJkbGVzcyBvZiB0aGUgdHlwZVxuIgorIiAgICAtZCAtLWRvbWFpbj1ET01BSU4gICBUaGUgZG9tYWluIHRvIGJyb3dzZSBpblxuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBFbmFibGUgdmVyYm9zZSBtb2RlXG4iCisiICAgIC10IC0tdGVybWluYXRlICAgICAgIFRlcm1pbmF0ZSBhZnRlciBkdW1waW5nIGEgbW9yZSBvciBsZXNzIGNvbXBsZXRlICIKKyJsaXN0XG4iCisiICAgIC1jIC0tY2FjaGUgICAgICAgICAgIFRlcm1pbmF0ZSBhZnRlciBkdW1waW5nIGFsbCBlbnRyaWVzIGZyb20gdGhlIGNhY2hlXG4iCisiICAgIC1sIC0taWdub3JlLWxvY2FsICAgIElnbm9yZSBsb2NhbCBzZXJ2aWNlc1xuIgorIiAgICAtciAtLXJlc29sdmUgICAgICAgICBSZXNvbHZlIHNlcnZpY2VzIGZvdW5kXG4iCisiICAgIC1mIC0tbm8tZmFpbCAgICAgICAgIERvbid0IGZhaWwgaWYgdGhlIGRhZW1vbiBpcyBub3QgYXZhaWxhYmxlXG4iCisiICAgIC1wIC0tcGFyc2FibGUgICAgICAgIE91dHB1dCBpbiBwYXJzYWJsZSBmb3JtYXRcbiIKK21zZ3N0ciAiIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBOw6R5dMOkIHTDpG3DpCBvaGplXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIE7DpHl0w6QgdmVyc2lvXG4iCisiICAgIC1EIC0tYnJvd3NlLWRvbWFpbnMgIFNlbGFhIHNlbGFhdmlhIHZlcmtrb2FsdWVpdGEgcGFsdmVsdWlkZW4gc2lqYWFuXG4iCisiICAgIC1hIC0tYWxsICAgICAgICAgICAgIE7DpHl0w6Qga2Fpa2tpIHBhbHZlbHV0IHR5eXBpc3TDpCByaWlwcHVtYXR0YVxuIgorIiAgICAtZCAtLWRvbWFpbj1ET01BSU4gICBTZWxhdHRhdmEgdmVya2tvYWx1ZVxuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBPdGEga8OkeXR0w7bDtm4gc3V1bGFhbXBpIHRpbGFcbiIKKyIgICAgLXQgLS10ZXJtaW5hdGUgICAgICAgUG9pc3R1IGVuZW1tw6RuIHRhaSB2w6RoZW1tw6RuIHTDpHlkZWxsaXNlbiBsdWV0dGVsb24gIgorInR1bG9zdHVrc2VuIGrDpGxrZWVuXG4iCisiICAgIC1jIC0tY2FjaGUgICAgICAgICAgIFBvaXN0dSBrdW4ga2Fpa2tpIGtvaHRlZXQgdHVsb3N0ZXR0dSB2w6RsaW11aXN0aXN0YVxuIgorIiAgICAtbCAtLWlnbm9yZS1sb2NhbCAgICBKw6R0w6QgcGFpa2FsbGlzZXQgcGFsdmVsdXQgaHVvbWlvdHRhXG4iCisiICAgIC1yIC0tcmVzb2x2ZSAgICAgICAgIFNlbHZpdMOkIGzDtnlkZXR5dCBwYWx2ZWx1dFxuIgorIiAgICAtZiAtLW5vLWZhaWwgICAgICAgICDDhGzDpCBlcMOkb25uaXN0dSBqb3MgdGF1c3RhcHJvc2Vzc2lhIGVpIHNhYXRhdmlsbGFcbiIKKyIgICAgLXAgLS1wYXJzYWJsZSAgICAgICAgVHVsb3N0YSBqw6RzZW5uZXR0w6R2aXNzw6Qgb2xldmFzc2EgbXVvZG9zc2FcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NjYwCittc2dpZCAiIgorIiAgICAtayAtLW5vLWRiLWxvb2t1cCAgICBEb24ndCBsb29rdXAgc2VydmljZSB0eXBlc1xuIgorIiAgICAtYiAtLWR1bXAtZGIgICAgICAgICBEdW1wIHNlcnZpY2UgdHlwZSBkYXRhYmFzZVxuIgorbXNnc3RyICIiCisiICAgIC1rIC0tbm8tZGItbG9va3VwICAgIMOEbMOkIGV0c2kgcGFsdmVsdXR5eXBwZWrDpFxuIgorIiAgICAtYiAtLWR1bXAtZGIgICAgICAgICBUdWxvc3RhIHBhbHZlbHV0eXlwcGllbiB0aWV0b2thbnRhXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjc2NiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvbyBmZXcgYXJndW1lbnRzXG4iCittc2dzdHIgIkxpaWFuIHbDpGjDpG4gYXJndW1lbnR0ZWphXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjgyMSAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6Mzc4CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjY0IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBzaW1wbGUgcG9sbCBvYmplY3QuXG4iCittc2dzdHIgIllrc2lua2VydGFpc2VuIGt5c2VseW9iamVrdGluIGx1b250aSBlcMOkb25uaXN0dWkuXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo3NgorIywgYy1mb3JtYXQKK21zZ2lkICJFc3RhYmxpc2hlZCB1bmRlciBuYW1lICclcydcbiIKK21zZ3N0ciAiTXVvZG9zdGV0dGlpbiBuaW1lbGzDpCBcIiVzXCJcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlcjogJXNcbiIKK21zZ3N0ciAiUmVraXN0ZXLDtmltaW5lbiBlcMOkb25uaXN0dWk6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICJOYW1lIGNvbGxpc2lvbiwgcGlja2luZyBuZXcgbmFtZSAnJXMnLlxuIgorbXNnc3RyICJOaW1pZW4geWh0ZWVudMO2cm3DpHlzLCB2YWxpdGFhbiB1dXNpIG5pbWkgXCIlc1wiLlxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgZW50cnkgZ3JvdXA6ICVzXG4iCittc2dzdHIgIktvaGRlcnlobcOkbiBsdW9taW5lbiBlcMOkb25uaXN0dWk6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBhZGRyZXNzOiAlc1xuIgorbXNnc3RyICJPc29pdHRlZW4gbGlzw6TDpG1pbmVuIGVww6Rvbm5pc3R1aTogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gYWRkIHNlcnZpY2U6ICVzXG4iCittc2dzdHIgIlBhbHZlbHVuIGxpc8Okw6RtaW5lbiBlcMOkb25uaXN0dWk6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBzdWJ0eXBlICclcyc6ICVzXG4iCittc2dzdHIgIkFsYXR5eXBpbiBcIiVzXCIgbGlzw6TDpG1pbmVuIGVww6Rvbm5pc3R1aTogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE5MQorIywgYy1mb3JtYXQKK21zZ2lkICJIb3N0IG5hbWUgY29uZmxpY3RcbiIKK21zZ3N0ciAiUGFsdmVsaW5uaW1lbiByaXN0aXJpaXRhXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoyMTYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBbb3B0aW9uc10gJXMgPG5hbWU+IDx0eXBlPiA8cG9ydD4gWzx0eHQgLi4uPl1cbiIKKyIlcyBbb3B0aW9uc10gJXMgPGhvc3QtbmFtZT4gPGFkZHJlc3M+XG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFNob3cgdmVyc2lvblxuIgorIiAgICAtcyAtLXNlcnZpY2UgICAgICAgICBQdWJsaXNoIHNlcnZpY2VcbiIKKyIgICAgLWEgLS1hZGRyZXNzICAgICAgICAgUHVibGlzaCBhZGRyZXNzXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgRG9tYWluIHRvIHB1Ymxpc2ggc2VydmljZSBpblxuIgorIiAgICAtSCAtLWhvc3Q9RE9NQUlOICAgICBIb3N0IHdoZXJlIHNlcnZpY2UgcmVzaWRlc1xuIgorIiAgICAgICAtLXN1YnR5cGU9U1VCVFlQRSBBbiBhZGRpdGlvbmFsIHN1YnR5cGUgdG8gcmVnaXN0ZXIgdGhpcyBzZXJ2aWNlICIKKyJ3aXRoXG4iCisiICAgIC1SIC0tbm8tcmV2ZXJzZSAgICAgIERvIG5vdCBwdWJsaXNoIHJldmVyc2UgZW50cnkgd2l0aCBhZGRyZXNzXG4iCisiICAgIC1mIC0tbm8tZmFpbCAgICAgICAgIERvbid0IGZhaWwgaWYgdGhlIGRhZW1vbiBpcyBub3QgYXZhaWxhYmxlXG4iCittc2dzdHIgIiIKKyIlcyBbdmFsaXRzaW1ldF0gJXMgPG5pbWk+IDx0eXlwcGk+IDxwb3J0dGk+IFs8dGVrc3RpIC4uLj5dXG4iCisiJXMgW3ZhbGl0c2ltZXRdICVzIDx2ZXJra29uaW1pPiA8b3NvaXRlPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBOw6R5dMOkIG9oamVcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgTsOkeXTDpCB2ZXJzaW9cbiIKKyIgICAgLXMgLS1zZXJ2aWNlICAgICAgICAgSnVsa2lzdGEgcGFsdmVsdVxuIgorIiAgICAtYSAtLWFkZHJlc3MgICAgICAgICBKdWxraXN0YSBvc29pdGVcbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgT3RhIHN1dWxhYW1waSB0aWxhIGvDpHl0dMO2w7ZuXG4iCisiICAgIC1kIC0tZG9tYWluPURPTUFJTiAgIFZlcmtrb2FsdWUgam9zc2EgcGFsdmVsdSBqdWxrYWlzdGFhblxuIgorIiAgICAtSCAtLWhvc3Q9RE9NQUlOICAgICBQYWx2ZWxpbiBqb2xsYSBwYWx2ZWx1IHNpamFpdHNlZVxuIgorIiAgICAgICAtLXN1YnR5cGU9U1VCVFlQRSBMaXPDpGFsYXR5eXBwaSwgam9sbGUgdMOkbcOkIHBhbHZlbHUgcmVraXN0ZXLDtmlkw6TDpG5cbiIKKyIgICAgLWYgLS1uby1mYWlsICAgICAgICAgw4Rsw6QgZXDDpG9ubmlzdHVpIGpvcyB0YXVzdGFwcm9zZXNzaWEgZWkgc2FhdGF2aWxsYVxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MzAzIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIG51bWJlciBvZiBhcmd1bWVudHNcbiIKK21zZ3N0ciAiVmlyaGVlbGxpbmVuIGFyZ3VtZW50dGllbiBsdWt1bcOkw6Ryw6RcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjMyOQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcGFyc2UgcG9ydCBudW1iZXI6ICVzXG4iCittc2dzdHIgIlBvcnR0aW51bWVyb24gasOkc2VudMOkbWluZW4gZXDDpG9ubmlzdHVpOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MzYxIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gY29tbWFuZCBzcGVjaWZpZWQuXG4iCittc2dzdHIgIktvbWVudG9hIGVpIG3DpMOkcml0ZWx0eS5cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIGhvc3QgbmFtZSAnJXMnOiAlc1xuIgorbXNnc3RyICJWZXJra28tb3NvaXR0ZWVuIFwiJXNcIiBzZWx2aXR0w6RtaW5lbiBlcMOkb25uaXN0dWk6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoxMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgYWRkcmVzcyAnJXMnOiAlc1xuIgorbXNnc3RyICJPc29pdHRlZW4gXCIlc1wiIHNlbHZpdHTDpG1pbmVuIGVww6Rvbm5pc3R1aTogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjE1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgW29wdGlvbnNdICVzIDxob3N0IG5hbWUgLi4uPlxuIgorIiVzIFtvcHRpb25zXSAlcyA8YWRkcmVzcyAuLi4gPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLW4gLS1uYW1lICAgICAgICAgICAgUmVzb2x2ZSBob3N0IG5hbWVcbiIKKyIgICAgLWEgLS1hZGRyZXNzICAgICAgICAgUmVzb2x2ZSBhZGRyZXNzXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKKyIgICAgLTYgICAgICAgICAgICAgICAgICAgTG9va3VwIElQdjYgYWRkcmVzc1xuIgorIiAgICAtNCAgICAgICAgICAgICAgICAgICBMb29rdXAgSVB2NCBhZGRyZXNzXG4iCittc2dzdHIgIiIKKyIlcyBbdmFsaXRzaW1ldF0gJXMgPHZlcmtrb25pbWkgLi4uPlxuIgorIiVzIFt2YWxpdHNpbWV0XSAlcyA8b3NvaXRlIC4uLiA+XG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIE7DpHl0w6Qgb2hqZVxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBOw6R5dMOkIHZlcnNpb1xuIgorIiAgICAtbiAtLW5hbWUgICAgICAgICAgICBTZWx2aXTDpCB2ZXJra29uaW1pXG4iCisiICAgIC1hIC0tYWRkcmVzcyAgICAgICAgIFNlbHZpdMOkIG9zb2l0ZVxuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBPdGEgc3V1bGFhbXBpIHRpbGEga8OkeXR0w7bDtm5cbiIKKyIgICAgLTYgICAgICAgICAgICAgICAgICAgRXRzaSBJUHY2LW9zb2l0ZVxuIgorIiAgICAtNCAgICAgICAgICAgICAgICAgICBFdHNpIElQdjQtb3NvaXRlXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyOTkgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE4MQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGhvc3QgbmFtZSByZXNvbHZlcjogJXNcbiIKK21zZ3N0ciAiVmVya2tvLW9zb2l0dGVlbiBzZWx2aXR0aW1lbiBsdW9udGkgZXDDpG9ubmlzdHVpOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBhZGRyZXNzICclcydcbiIKK21zZ3N0ciAiT3NvaXRldHRhIFwiJXNcIiBlaSB2b2kgasOkc2VudMOkw6RcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjMxNAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGFkZHJlc3MgcmVzb2x2ZXI6ICVzXG4iCittc2dzdHIgIk9zb2l0dGVlbiBzZWx2aXR0aW1lbiBsdW9udGkgZXDDpG9ubmlzdHVpOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFtvcHRpb25zXSA8bmV3IGhvc3QgbmFtZT5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgU2hvdyB2ZXJzaW9uXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKK21zZ3N0ciAiIgorIiVzIFt2YWxpdHNpbWV0XSA8dXVzaSB2ZXJra29uaW1pPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBOw6R5dMOkIHTDpG3DpCBvaGplXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIE7DpHl0w6QgdmVyc2lvXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIE90YSBzdXVsYWFtcGkgdGlsYSBrw6R5dHTDtsO2blxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cywgZXhwZWN0aW5nIGV4YWN0bHkgb25lLlxuIgorbXNnc3RyICJWaXJoZWVsbGluZW4gYXJndW1lbnR0aWVuIGx1a3Vtw6TDpHLDpCwgb2RvdGV0dGlpbiB0w6RzbcOkbGxlZW4geWh0w6QuXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSG9zdCBuYW1lIHN1Y2Nlc3NmdWxseSBjaGFuZ2VkIHRvICVzXG4iCittc2dzdHIgIlZlcmtrby1vc29pdGUgbXV1dGV0dGlpbiBvbm5pc3R1bmVlc3RpIG5pbWVsbGUgJXNcbiIKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9wby9mby5wbyBiL2F2YWhpLTAuNi4zMS9wby9mby5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjQ3MGEyCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL3BvL2ZvLnBvCkBAIC0wLDAgKzEsODE2IEBACisjIFNPTUUgREVTQ1JJUFRJVkUgVElUTEUuCisjIENvcHlyaWdodCAoQykgWUVBUiBUSEUgUEFDS0FHRSdTIENPUFlSSUdIVCBIT0xERVIKKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIFBBQ0tBR0UgcGFja2FnZS4KKyMgR3VubGVpZiBKb2Vuc2VuIDxndW5sZWlmQGdtYWlsLmNvbT4sIDIwMTAuCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBQQUNLQUdFIFZFUlNJT05cbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTEtMDQtMDIgMDM6MjMrMDIwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTAtMDktMTAgMTQ6MzYrMDIwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogR3VubGVpZiBKb2Vuc2VuIDxndW5sZWlmQGdtYWlsLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBGw7hyb3lhYsOzbGt1cmluXG4iCisiTGFuZ3VhZ2U6IGZvXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCisiWC1HZW5lcmF0b3I6IFZpcnRhYWwgMC42LjFcbiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzAKK21zZ2lkICJPSyIKK21zZ3N0ciAiT0siCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjMxCittc2dpZCAiT3BlcmF0aW9uIGZhaWxlZCIKK21zZ3N0ciAiQXRnZXLDsCBtaXNleWRhw7Bpc3QiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjMyCittc2dpZCAiQmFkIHN0YXRlIgorbXNnc3RyICJSaW5ndXIgc3RhbmR1ciIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzMKK21zZ2lkICJJbnZhbGlkIGhvc3QgbmFtZSIKK21zZ3N0ciAiw5NnaWxkdWd0IHZlcnRzbmF2biIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzQKK21zZ2lkICJJbnZhbGlkIGRvbWFpbiBuYW1lIgorbXNnc3RyICLDk2dpbGR1Z3Qgw7hraXNuYXZuIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozNQorbXNnaWQgIk5vIHN1aXRhYmxlIG5ldHdvcmsgcHJvdG9jb2wgYXZhaWxhYmxlIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM2Cittc2dpZCAiSW52YWxpZCBETlMgVFRMIgorbXNnc3RyICLDk2dpbGR1Z3QgRE5TIFRUTCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzcKK21zZ2lkICJSZXNvdXJjZSByZWNvcmQga2V5IGlzIHBhdHRlcm4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzgKK21zZ2lkICJMb2NhbCBuYW1lIGNvbGxpc2lvbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozOQorbXNnaWQgIkludmFsaWQgcmVjb3JkIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQxCittc2dpZCAiSW52YWxpZCBzZXJ2aWNlIG5hbWUiCittc2dzdHIgIsOTZ2lsZHVndCB0w6ZuYXN0dW5hdm4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQyCittc2dpZCAiSW52YWxpZCBzZXJ2aWNlIHR5cGUiCittc2dzdHIgIsOTZ2lsZHVnIHTDpm5hc3R1c2xhZyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDMKK21zZ2lkICJJbnZhbGlkIHBvcnQgbnVtYmVyIgorbXNnc3RyICLDk2dpbGR1Z3QgcG9ydHVyc251bW1hciIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDQKK21zZ2lkICJJbnZhbGlkIHJlY29yZCBrZXkiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDUKK21zZ2lkICJJbnZhbGlkIGFkZHJlc3MiCittc2dzdHIgIsOTZ2lsZHVndCBhdHNldHVyIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NgorIywgZnV6enkKK21zZ2lkICJUaW1lb3V0IHJlYWNoZWQiCittc2dzdHIgIkxlaWticsOhIHJva2tpIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NworbXNnaWQgIlRvbyBtYW55IGNsaWVudHMiCittc2dzdHIgIk92IG7Ds2d2aXIgdmnDsHNraWZ0YXJpciIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDgKK21zZ2lkICJUb28gbWFueSBvYmplY3RzIgorbXNnc3RyICJPdiBuw7NndmlyIGx1dGlyIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0OQorbXNnaWQgIlRvbyBtYW55IGVudHJpZXMiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTAKK21zZ2lkICJPUyBFcnJvciIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1MgorbXNnaWQgIkFjY2VzcyBkZW5pZWQiCittc2dzdHIgIkF0Z29uZ2Qgbm9rdGHDsCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTMKK21zZ2lkICJJbnZhbGlkIG9wZXJhdGlvbiIKK21zZ3N0ciAiw5NnaWxkdWcgYXRnZXLDsCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTQKK21zZ2lkICJBbiB1bmV4cGVjdGVkIEQtQnVzIGVycm9yIG9jY3VyZWQiCittc2dzdHIgIkVpbiDDs3ZhbnRhw7AgRC1CVVMgdmlsbGEgaGVuZGkiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU1Cittc2dpZCAiRGFlbW9uIGNvbm5lY3Rpb24gZmFpbGVkIgorbXNnc3RyICJEZW3Ds25zYW1iaW5kaW5nIG1pc2V5ZG5hw7Bpc3QiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU2CisjLCBmdXp6eQorbXNnaWQgIk1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIk1pbm5pIHVwcGJyw7prdCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTcKK21zZ2lkICJUaGUgb2JqZWN0IHBhc3NlZCBpbiB3YXMgbm90IHZhbGlkIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU4Cittc2dpZCAiRGFlbW9uIG5vdCBydW5uaW5nIgorbXNnc3RyICJEZW3Ds25pbiBrb3lyaXIgaWtraSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTkKK21zZ2lkICJJbnZhbGlkIGludGVyZmFjZSBpbmRleCIKK21zZ3N0ciAiw5NnaWxkdWd0IG1hcmthbcOzdHNza3LDoSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjAKK21zZ2lkICJJbnZhbGlkIHByb3RvY29sIHNwZWNpZmljYXRpb24iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjEKK21zZ2lkICJJbnZhbGlkIGZsYWdzIgorbXNnc3RyICLDk2dpbGR1ZyBmbMO4Z2ciCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjYzCittc2dpZCAiTm90IGZvdW5kIgorbXNnc3RyICJJa2tpIGZ1bm5pw7AiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY0Cittc2dpZCAiSW52YWxpZCBjb25maWd1cmF0aW9uIgorbXNnc3RyICLDk2dpbGR1ZyBzYW1hbnNldGluZyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjUKK21zZ2lkICJWZXJzaW9uIG1pc21hdGNoIgorbXNnc3RyICLDmnRnw6F2dXIgc2Ftc3ZhcmEgaWtraSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjYKK21zZ2lkICJJbnZhbGlkIHNlcnZpY2Ugc3VidHlwZSIKK21zZ3N0ciAiw5NnaWxkdWd0IHTDpm5hc3R1IHVuZGlyc2xhZyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjcKK21zZ2lkICJJbnZhbGlkIHBhY2tldCIKK21zZ3N0ciAiw5NnaWxkdWdpciBwYWtraSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjgKK21zZ2lkICJJbnZhbGlkIEROUyByZXR1cm4gY29kZSIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2OQorbXNnaWQgIkROUyBmYWlsdXJlOiBGT1JNRVJSIgorbXNnc3RyICJETlMgc3bDrWt1cjogRk9STUVSUiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzAKK21zZ2lkICJETlMgZmFpbHVyZTogU0VSVkZBSUwiCittc2dzdHIgIkROUyBzdsOta3VyOiBTRVJWRkFJTCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzEKK21zZ2lkICJETlMgZmFpbHVyZTogTlhET01BSU4iCittc2dzdHIgIkROUyBzdsOta3VyOiBOWERPTUFJTiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzIKK21zZ2lkICJETlMgZmFpbHVyZTogTk9USU1QIgorbXNnc3RyICJETlMgc3bDrWt1cjogTk9USU1QIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3NAorbXNnaWQgIkROUyBmYWlsdXJlOiBSRUZVU0VEIgorbXNnc3RyICJETlMgc3bDrWt1cjogUkVGVVNFRCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzUKK21zZ2lkICJETlMgZmFpbHVyZTogWVhET01BSU4iCittc2dzdHIgIkROUyBzdsOta3VyOiBZWERPTUFJTiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzYKK21zZ2lkICJETlMgZmFpbHVyZTogWVhSUlNFVCIKK21zZ3N0ciAiRE5TIHN2w61rdXI6IFlYUlJTRVQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc3Cittc2dpZCAiRE5TIGZhaWx1cmU6IE5YUlJTRVQiCittc2dzdHIgIkROUyBzdsOta3VyOiBOWFJSU0VUIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3OAorbXNnaWQgIkROUyBmYWlsdXJlOiBOT1RBVVRIIgorbXNnc3RyICJETlMgc3bDrWt1cjogTk9UQVVUSCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzkKK21zZ2lkICJETlMgZmFpbHVyZTogTk9UWk9ORSIKK21zZ3N0ciAiRE5TIHN2w61rdXI6IE5PVFpPTkUiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjgwCittc2dpZCAiSW52YWxpZCBSREFUQSIKK21zZ3N0ciAiw5NnaWxkdWd0IFJEQVRBIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4MQorbXNnaWQgIkludmFsaWQgRE5TIHR5cGUiCittc2dzdHIgIsOTZ2lsZHVndCBETlMtc2xhZyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODIKK21zZ2lkICJJbnZhbGlkIEROUyBjbGFzcyIKK21zZ3N0ciAiw5NnaWxkaWd1ciBETlMtZmxva2t1ciIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODMKK21zZ2lkICJOb3Qgc3VwcG9ydGVkIgorbXNnc3RyICJJa2tpIHN0dcOwbGHDsCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODUKK21zZ2lkICJOb3QgcGVybWl0dGVkIgorbXNnc3RyICJJa2tpIGxveXZ0IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4NgorbXNnaWQgIkludmFsaWQgYXJndW1lbnQiCittc2dzdHIgIsOTZ2lsZHVndCDDoXZpcmtpIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4NworbXNnaWQgIklzIGVtcHR5IgorbXNnc3RyICJFciB0w7NtdCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODgKK21zZ2lkICJUaGUgcmVxdWVzdGVkIG9wZXJhdGlvbiBpcyBpbnZhbGlkIGJlY2F1c2UgcmVkdW5kYW50IgorbXNnc3RyICJVbWJpZG5hIGF0Z2Vyw7BpbiBlciDDs2dpbGR1ZywgdMOtIGhvbiBlciDDs25lecOwdWciCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjk0Cittc2dpZCAiSW52YWxpZCBFcnJvciBDb2RlIgorbXNnc3RyICLDk2dpbGR1ZyB2aWxsdWtvdGEiCisKKyM6IC4uL2F2YWhpLWRpc2NvdmVyLXN0YW5kYWxvbmUvYXZhaGktZGlzY292ZXIudWkuaDoxCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6NzYKK21zZ2lkICI8aT5ObyBzZXJ2aWNlIGN1cnJlbnRseSBzZWxlY3RlZC48L2k+IgorbXNnc3RyICI8aT5FaW5naW4gdMOmbmFzdGEgZXIgdmFsZCDDrSBsw7h0dW5pLjwvaT4iCisKKyM6IC4uL2F2YWhpLWRpc2NvdmVyLXN0YW5kYWxvbmUvYXZhaGktZGlzY292ZXIudWkuaDoyCisjLCBmdXp6eQorbXNnaWQgIkF2YWhpIERpc2NvdmVyeSIKK21zZ3N0ciAiQXZhaGkgdXBwZGFnYW4iCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5kZXNrdG9wLmluLmluLmg6MQorbXNnaWQgIkF2YWhpIFplcm9jb25mIEJyb3dzZXIiCittc2dzdHIgIkF2YWhpIFplcm9jb25mIGthZ2kiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5kZXNrdG9wLmluLmluLmg6MgorbXNnaWQgIkJyb3dzZSBmb3IgWmVyb2NvbmYgc2VydmljZXMgYXZhaWxhYmxlIG9uIHlvdXIgbmV0d29yayIKK21zZ3N0ciAiS2FnYSBlZnRpciBaZXJvY29uZi10w6ZuYXN0dW0sIHTDuGthciDDoSB0w61udW0gbmV0aSIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIyNAorbXNnaWQgIlRYVCIKK21zZ3N0ciAiVFhUIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI2Cittc2dpZCAiVFhUIERhdGE6IgorbXNnc3RyICJUWFQgRMOhdGE6IgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI2Cittc2dpZCAiZW1wdHkiCittc2dzdHIgInTDs210IgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI4Cittc2dpZCAiU2VydmljZSBUeXBlOiIKK21zZ3N0ciAiVMOmbmFzdHVzbGFnOiIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIyOQorbXNnaWQgIlNlcnZpY2UgTmFtZToiCittc2dzdHIgIlTDpm5hc3R1bmF2bjoiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMzAKK21zZ2lkICJEb21haW4gTmFtZToiCittc2dzdHIgIsOYa2lzbmF2bjoiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMzEKK21zZ2lkICJJbnRlcmZhY2U6IgorbXNnc3RyICJNYXJrYW3Ds3Q6IgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjMyCittc2dpZCAiQWRkcmVzczoiCittc2dzdHIgIkF0c2V0dXI6IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE4NQorbXNnaWQgIkJyb3dzZSBTZXJ2aWNlIFR5cGVzIgorbXNnc3RyICJLYWdhIGVmdGlyIHTDpm5hc3R1c2zDuGd1bSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxODUKK21zZ2lkICJBIE5VTEwgdGVybWluYXRlZCBsaXN0IG9mIHNlcnZpY2UgdHlwZXMgdG8gYnJvd3NlIGZvciIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE5MAorbXNnaWQgIkRvbWFpbiIKK21zZ3N0ciAiw5hraToiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTkwCittc2dpZCAiVGhlIGRvbWFpbiB0byBicm93c2UgaW4sIG9yIE5VTEwgZm9yIHRoZSBkZWZhdWx0IGRvbWFpbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE5NgorbXNnaWQgIlNlcnZpY2UgVHlwZSIKK21zZ3N0ciAiVMOmbmFzdHVzbGFnOiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxOTYKK21zZ2lkICJUaGUgc2VydmljZSB0eXBlIG9mIHRoZSBzZWxlY3RlZCBzZXJ2aWNlIgorbXNnc3RyICJUw6ZuYXN0dXNsYWdpw7Agw6EgdmFsZHUgdMOmbmFzdHVuaSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMDIgLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMDIzCittc2dpZCAiU2VydmljZSBOYW1lIgorbXNnc3RyICJUw6ZuYXN0dW5hdm46IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIwMgorbXNnaWQgIlRoZSBzZXJ2aWNlIG5hbWUgb2YgdGhlIHNlbGVjdGVkIHNlcnZpY2UiCittc2dzdHIgIlTDpm5hc3R1bmF2bmnDsCDDoSB2YWxkdSB0w6ZuYXN0dW5pIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIwOAorbXNnaWQgIkFkZHJlc3MiCittc2dzdHIgIkF0c2V0dXI6IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIwOAorbXNnaWQgIlRoZSBhZGRyZXNzIG9mIHRoZSByZXNvbHZlZCBzZXJ2aWNlIgorbXNnc3RyICJBdHNldHVyIMOhIGF2Z2rDuHJkdSB0w6ZuYXN0dW5pIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIxMworbXNnaWQgIlBvcnQiCittc2dzdHIgIlBvcnR1cjoiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjEzCittc2dpZCAiVGhlIElQIHBvcnQgbnVtYmVyIG9mIHRoZSByZXNvbHZlZCBzZXJ2aWNlIgorbXNnc3RyICJJUC1wb3J0dXJzbnVtbWFyacOwIMOhIGF2Z2rDuHJkdSB0w6ZuYXN0dW5pIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIxOQorbXNnaWQgIkhvc3QgTmFtZSIKK21zZ3N0ciAiVmVydHNuYXZuIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIxOQorbXNnaWQgIlRoZSBob3N0IG5hbWUgb2YgdGhlIHJlc29sdmVkIHNlcnZpY2UiCittc2dzdHIgIlZlcnRzbmF2bmnDsCDDoSBhdmdqw7hyZHUgdMOmbmFzdHVuaSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMjUKK21zZ2lkICJUWFQgRGF0YSIKK21zZ3N0ciAiVFhUIETDoXRhIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIyNQorbXNnaWQgIlRoZSBUWFQgZGF0YSBvZiB0aGUgcmVzb2x2ZWQgc2VydmljZSIKK21zZ3N0ciAiVFhULWTDoXRhIMOhIGF2Z2rDuHJkdSB0w6ZuYXN0dW5pIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIzMAorbXNnaWQgIlJlc29sdmUgU2VydmljZSIKK21zZ3N0ciAiQXZnZXLDsCB0w6ZuYXN0dSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMzAKK21zZ2lkICJSZXNvbHZlIHRoZSBzZWxlY3RlZCBzZXJ2aWNlIGF1dG9tYXRpY2FsbHkgYmVmb3JlIHJldHVybmluZyIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIzNgorbXNnaWQgIlJlc29sdmUgU2VydmljZSBIb3N0IE5hbWUiCittc2dzdHIgIkF2Z2Vyw7AgdmVydHNuYXZuIMOhIHTDpm5hc3R1IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIzNgorbXNnaWQgIiIKKyJSZXNvbHZlIHRoZSBob3N0IG5hbWUgb2YgdGhlIHNlbGVjdGVkIHNlcnZpY2UgYXV0b21hdGljYWxseSBiZWZvcmUgcmV0dXJuaW5nIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjQyCittc2dpZCAiQWRkcmVzcyBmYW1pbHkiCittc2dzdHIgIkF0c2V0dXJzZmFtaWxqYSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyNDIKK21zZ2lkICJUaGUgYWRkcmVzcyBmYW1pbHkgZm9yIGhvc3QgbmFtZSByZXNvbHV0aW9uIgorbXNnc3RyICJBdHNldHVyZmFtaWxqYW4gdGlsIGF0IGF2Z2VyYSB2ZXJ0c25hdm4iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MzI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWhpIGNsaWVudCBmYWlsdXJlOiAlcyIKK21zZ3N0ciAiQXZhaGkgdmnDsHNraWZ0YXJhIHN2w61rdXI6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjM4OAorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFoaSByZXNvbHZlciBmYWlsdXJlOiAlcyIKK21zZ3N0ciAiQXZhaGkgYXZnZXJhcmEgc3bDrWt1cjogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyb3dzaW5nIGZvciBzZXJ2aWNlIHR5cGUgJXMgaW4gZG9tYWluICVzIGZhaWxlZDogJXMiCittc2dzdHIgIkthZ2FuIGVmdGlyIHTDpm5hc3R1c2xhZ251bSAlcyDDrSDDuGtpbnVtICVzIG1pc2V5ZG5hw7Bpc3Q6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjUxOSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoxNjgKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjE2OSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoxNzgKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjE3OQorbXNnaWQgIm4vYSIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjY0OQorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFoaSBkb21haW4gYnJvd3NlciBmYWlsdXJlOiAlcyIKK21zZ3N0ciAiQXZhaGkgw7hraXNrYWdhcmkgc3bDrWt1cjogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6Njg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWFkIEF2YWhpIGRvbWFpbjogJXMiCittc2dzdHIgIk1pc2V5ZG5hw7Bpc3QgYXQgbGVzYSBBdmFoaS3DuGtpOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo3MDYKK21zZ2lkICJCcm93c2Ugc2VydmljZSB0eXBlIGxpc3QgaXMgZW1wdHkhIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjb25uZWN0IHRvIEF2YWhpIHNlcnZlcjogJXMiCittc2dzdHIgIk1pc2V5ZG5hw7Bpc3QgYXQgc2FtYmluZGEgdmnDsCBBdmFoaS1hbWLDpnRhcmFuOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo3MzUKK21zZ2lkICJCcm93c2luZyBmb3Igc2VydmljZXMgb24gPGI+bG9jYWwgbmV0d29yazwvYj46IgorbXNnc3RyICJLYWdpIGVmdGlyIHTDpm5hc3R1bSDDoSA8Yj5uw6ZybmV0PC9iPjoiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NzM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyb3dzaW5nIGZvciBzZXJ2aWNlcyBpbiBkb21haW4gPGI+JXM8L2I+OiIKK21zZ3N0ciAiS2FnaSBlZnRpciB0w6ZuYXN0dW0gw60gw7hraW51bSA8Yj4lczwvYj46IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjc3MworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGJyb3dzZXIgZm9yICVzOiAlcyIKK21zZ3N0ciAiTWlzZXlkbmHDsGlzdCBhdCBzdG92bmEga2FnYXJhIGZ5cmkgJXM6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjkwMworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIHJlc29sdmVyIGZvciAlcyBvZiB0eXBlICVzIGluIGRvbWFpbiAlczogJXMiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo5NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBkb21haW4gYnJvd3NlcjogJXMiCittc2dzdHIgIk1pc2V5ZG5hw7Bpc3QgYXQgc3Rvdm5hIMO4a2lza2FnYXJhOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo5ODkKK21zZ2lkICJDaGFuZ2UgZG9tYWluIgorbXNnc3RyICJTa2lmdCDDuGtpIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjEwMzEgLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTYyCittc2dpZCAiQnJvd3NpbmcuLi4iCittc2dzdHIgIkthZ2kuLi4iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTEyMAorbXNnaWQgIkluaXRpYWxpemluZy4uLiIKK21zZ3N0ciAiSW5ubGVpw7BpLi4uIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNDQKK21zZ2lkICJMb2NhdGlvbiIKK21zZ3N0ciAiU3Rhw7B1ciIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTQ5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU1MworbXNnaWQgIk5hbWUiCittc2dzdHIgIk5hdm4iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTE1NCAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NTMKK21zZ2lkICJUeXBlIgorbXNnc3RyICJTbGFnIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNjYKK21zZ2lkICJfRG9tYWluLi4uIgorbXNnc3RyICJfw5hraS4uLiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBbb3B0aW9uc11cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLXMgLS1zc2ggICAgICAgICAgICAgQnJvd3NlIFNTSCBzZXJ2ZXJzXG4iCisiICAgIC12IC0tdm5jICAgICAgICAgICAgIEJyb3dzZSBWTkMgc2VydmVyc1xuIgorIiAgICAtUyAtLXNoZWxsICAgICAgICAgICBCcm93c2UgYm90aCBTU0ggYW5kIFZOQ1xuIgorIiAgICAtZCAtLWRvbWFpbj1ET01BSU4gICBUaGUgZG9tYWluIHRvIGJyb3dzZSBpblxuIgorbXNnc3RyICIiCisiJXMgW2tvc3Rpcl1cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU8O9biBoZXNhIGhqw6FscFxuIgorIiAgICAtcyAtLXNzaCAgICAgICAgICAgICBLYWdhIGVmdGlyIFNTSCBhbWLDpnRhcnVtXG4iCisiICAgIC12IC0tdm5jICAgICAgICAgICAgIEthZ2EgZWZ0aXIgVk5DIGFtYsOmdGFydW1cbiIKKyIgICAgLVMgLS1zaGVsbCAgICAgICAgICAgS2FnYSBiw6bDsGkgZWZ0aXIgU1NIIG9nIFZOQ1xuIgorIiAgICAtZCAtLWRvbWFpbj1ET01BSU4gICDDmGtpIGF0IGthZ2Egw61cbiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjEwMSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo3NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG9vIG1hbnkgYXJndW1lbnRzXG4iCittc2dzdHIgIk92IG7Ds2d2IMOhdmlya2lcbiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE0OQorbXNnaWQgIkNob29zZSBTaGVsbCBTZXJ2ZXIiCittc2dzdHIgIlZlbCBza2VsYW1iw6Z0YXJhIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTUxCittc2dpZCAiRGVza3RvcCIKK21zZ3N0ciAiU2tyaXZpYm9yw7AiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNTIKK21zZ2lkICJUZXJtaW5hbCIKK21zZ3N0ciAiw5p0c3TDuMOwIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTU2Cittc2dpZCAiQ2hvb3NlIFZOQyBzZXJ2ZXIiCittc2dzdHIgIlZlbCBWTkMtYW1iw6Z0YXJhIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTYxCittc2dpZCAiQ2hvb3NlIFNTSCBzZXJ2ZXIiCittc2dzdHIgIlZlbCBTU0gtYW1iw6Z0YXJhIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbm5lY3RpbmcgdG8gJyVzJyAuLi5cbiIKK21zZ3N0ciAiU2FtYmluZGkgdmnDsCAnJXMnIC4uLlxuIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MjQwCisjLCBjLWZvcm1hdAorbXNnaWQgImV4ZWNscCgpIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAiZXhlY2xwKCkgbWlzZXlkbmHDsGlzdDogJXNcbiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5jZWxlZC5cbiIKK21zZ3N0ciAiw5NnaWxkYcOwLlxuIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmRlc2t0b3AuaW4uaW4uaDoxCittc2dpZCAiQXZhaGkgU1NIIFNlcnZlciBCcm93c2VyIgorbXNnc3RyICJBdmFoaSBTU0gtdMOmbmFzdHUga2FnaSIKKworIzogLi4vYXZhaGktdWkvYnNzaC5kZXNrdG9wLmluLmluLmg6MgorbXNnaWQgIkJyb3dzZSBmb3IgWmVyb2NvbmYtZW5hYmxlZCBTU0ggU2VydmVycyIKK21zZ3N0ciAiS2FnYSBlZnRpciBaZXJvY29uZi12aXJramHDsHVtIFNTSC1hbWLDpnRhcnVtIgorCisjOiAuLi9hdmFoaS11aS9idm5jLmRlc2t0b3AuaW4uaW4uaDoxCittc2dpZCAiQXZhaGkgVk5DIFNlcnZlciBCcm93c2VyIgorbXNnc3RyICJBdmFoaSBWTkMtdMOmbmFzdHUga2FnaSIKKworIzogLi4vYXZhaGktdWkvYnZuYy5kZXNrdG9wLmluLmluLmg6MgorbXNnaWQgIkJyb3dzZSBmb3IgWmVyb2NvbmYtZW5hYmxlZCBWTkMgU2VydmVycyIKK21zZ3N0ciAiS2FnYSBlZnRpciBaZXJvY29uZi12aXJramHDsHVtIFZOQy1hbWLDpnRhcnVtIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoxMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiOiBBbGwgZm9yIG5vd1xuIgorbXNnc3RyICI6IFRhw7AgdmFyIHNvIHRhw7BcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIjogQ2FjaGUgZXhoYXVzdGVkXG4iCittc2dzdHIgIjogS292aW4gZXIgdMO4bWR1clxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoyMzkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIHNlcnZpY2UgJyVzJyBvZiB0eXBlICclcycgaW4gZG9tYWluICclcyc6ICVzXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MzQwCisjLCBjLWZvcm1hdAorbXNnaWQgInNlcnZpY2VfYnJvd3NlciBmYWlsZWQ6ICVzXG4iCittc2dzdHIgInTDpm5hc3R1X2thZ2FyaSBtaXNleWRuYcOwaXN0OiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzozNzgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImF2YWhpX3NlcnZpY2VfYnJvd3Nlcl9uZXcoKSBmYWlsZWQ6ICVzXG4iCittc2dzdHIgImF2YWhpX3NlcnZpY2VfYnJvd3Nlcl9uZXcoKSBtaXNleWRuYcOwaXN0OiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VydmljZV90eXBlX2Jyb3dzZXIgZmFpbGVkOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjQ0NAorIywgYy1mb3JtYXQKK21zZ2lkICJhdmFoaV9zZXJ2aWNlX3R5cGVfYnJvd3Nlcl9uZXcoKSBmYWlsZWQ6ICVzXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTE5CisjLCBjLWZvcm1hdAorbXNnaWQgImF2YWhpX2RvbWFpbl9icm93c2VyX25ldygpIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1MzUgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjM5NAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI4MCAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBxdWVyeSB2ZXJzaW9uIHN0cmluZzogJXNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NDAgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjM5OQorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI4NSAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTczCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBxdWVyeSBob3N0IG5hbWU6ICVzXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTQ0IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo0MDMKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyODkgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE3NworIywgYy1mb3JtYXQKK21zZ2lkICJTZXJ2ZXIgdmVyc2lvbjogJXM7IEhvc3QgbmFtZTogJXNcbiIKK21zZ3N0ciAiIgorCisjLiBUcmFuc2xhdG9yczogVGhpcyBpcyBhIGNvbHVtbiBoZWFkaW5nIHdpdGggYWJicmV2aWF0aW9ucyBmb3IKKyMuICogICBFdmVudCAoKy8tKSwgTmV0d29yayBJbnRlcmZhY2UsIFByb3RvY29sIChJUHY0L3Y2KSwgRG9tYWluCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRSBJZmNlIFByb3QgRG9tYWluXG4iCittc2dzdHIgIiIKKworIy4gVHJhbnNsYXRvcnM6IFRoaXMgaXMgYSBjb2x1bW4gaGVhZGluZyB3aXRoIGFiYnJldmlhdGlvbnMgZm9yCisjLiAqICAgRXZlbnQgKCsvLSksIE5ldHdvcmsgSW50ZXJmYWNlLCBQcm90b2NvbCAoSVB2NC92NiksIERvbWFpbgorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUgSWZjZSBQcm90ICUtKnMgJS0yMHMgRG9tYWluXG4iCittc2dzdHIgIiIKKworIy4gV2UgaGF2ZSBiZWVuIGRpc2Nvbm5lY3RlZCwgc28gbGV0IHJlY29ubmVjdAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTg1IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGlzY29ubmVjdGVkLCByZWNvbm5lY3RpbmcgLi4uXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTk5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjgyOQorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE3MCAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6Mzg2CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjcyIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBjbGllbnQgb2JqZWN0OiAlc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjYwNCAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTc1CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MTQzIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzo1OQorIywgYy1mb3JtYXQKK21zZ2lkICJDbGllbnQgZmFpbHVyZSwgZXhpdGluZzogJXNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo2MjMgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjIwNgorIywgYy1mb3JtYXQKK21zZ2lkICJXYWl0aW5nIGZvciBkYWVtb24gLi4uXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NjQ3Cittc2dpZCAiIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLUQgLS1icm93c2UtZG9tYWlucyAgQnJvd3NlIGZvciBicm93c2luZyBkb21haW5zIGluc3RlYWQgb2Ygc2VydmljZXNcbiIKKyIgICAgLWEgLS1hbGwgICAgICAgICAgICAgU2hvdyBhbGwgc2VydmljZXMsIHJlZ2FyZGxlc3Mgb2YgdGhlIHR5cGVcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgVGhlIGRvbWFpbiB0byBicm93c2UgaW5cbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgRW5hYmxlIHZlcmJvc2UgbW9kZVxuIgorIiAgICAtdCAtLXRlcm1pbmF0ZSAgICAgICBUZXJtaW5hdGUgYWZ0ZXIgZHVtcGluZyBhIG1vcmUgb3IgbGVzcyBjb21wbGV0ZSAiCisibGlzdFxuIgorIiAgICAtYyAtLWNhY2hlICAgICAgICAgICBUZXJtaW5hdGUgYWZ0ZXIgZHVtcGluZyBhbGwgZW50cmllcyBmcm9tIHRoZSBjYWNoZVxuIgorIiAgICAtbCAtLWlnbm9yZS1sb2NhbCAgICBJZ25vcmUgbG9jYWwgc2VydmljZXNcbiIKKyIgICAgLXIgLS1yZXNvbHZlICAgICAgICAgUmVzb2x2ZSBzZXJ2aWNlcyBmb3VuZFxuIgorIiAgICAtZiAtLW5vLWZhaWwgICAgICAgICBEb24ndCBmYWlsIGlmIHRoZSBkYWVtb24gaXMgbm90IGF2YWlsYWJsZVxuIgorIiAgICAtcCAtLXBhcnNhYmxlICAgICAgICBPdXRwdXQgaW4gcGFyc2FibGUgZm9ybWF0XG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NjYwCittc2dpZCAiIgorIiAgICAtayAtLW5vLWRiLWxvb2t1cCAgICBEb24ndCBsb29rdXAgc2VydmljZSB0eXBlc1xuIgorIiAgICAtYiAtLWR1bXAtZGIgICAgICAgICBEdW1wIHNlcnZpY2UgdHlwZSBkYXRhYmFzZVxuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjc2NiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvbyBmZXcgYXJndW1lbnRzXG4iCittc2dzdHIgIk92IGbDoSDDoXZpcmtpXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjgyMSAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6Mzc4CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjY0IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBzaW1wbGUgcG9sbCBvYmplY3QuXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkVzdGFibGlzaGVkIHVuZGVyIG5hbWUgJyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo4MQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXI6ICVzXG4iCittc2dzdHIgIk1pc2V5ZG5hw7Bpc3QgYXQgc2tyw6FzZXRhOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTmFtZSBjb2xsaXNpb24sIHBpY2tpbmcgbmV3IG5hbWUgJyVzJy5cbiIKK21zZ3N0ciAiTmF2bmFzYW1hbnN0b3l0dXIsIHZlbGppIG7DvXR0IG5hdm4gJyVzJy5cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGVudHJ5IGdyb3VwOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBhZGRyZXNzOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBzZXJ2aWNlOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBzdWJ0eXBlICclcyc6ICVzXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE5MQorIywgYy1mb3JtYXQKK21zZ2lkICJIb3N0IG5hbWUgY29uZmxpY3RcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBbb3B0aW9uc10gJXMgPG5hbWU+IDx0eXBlPiA8cG9ydD4gWzx0eHQgLi4uPl1cbiIKKyIlcyBbb3B0aW9uc10gJXMgPGhvc3QtbmFtZT4gPGFkZHJlc3M+XG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFNob3cgdmVyc2lvblxuIgorIiAgICAtcyAtLXNlcnZpY2UgICAgICAgICBQdWJsaXNoIHNlcnZpY2VcbiIKKyIgICAgLWEgLS1hZGRyZXNzICAgICAgICAgUHVibGlzaCBhZGRyZXNzXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgRG9tYWluIHRvIHB1Ymxpc2ggc2VydmljZSBpblxuIgorIiAgICAtSCAtLWhvc3Q9RE9NQUlOICAgICBIb3N0IHdoZXJlIHNlcnZpY2UgcmVzaWRlc1xuIgorIiAgICAgICAtLXN1YnR5cGU9U1VCVFlQRSBBbiBhZGRpdGlvbmFsIHN1YnR5cGUgdG8gcmVnaXN0ZXIgdGhpcyBzZXJ2aWNlICIKKyJ3aXRoXG4iCisiICAgIC1SIC0tbm8tcmV2ZXJzZSAgICAgIERvIG5vdCBwdWJsaXNoIHJldmVyc2UgZW50cnkgd2l0aCBhZGRyZXNzXG4iCisiICAgIC1mIC0tbm8tZmFpbCAgICAgICAgIERvbid0IGZhaWwgaWYgdGhlIGRhZW1vbiBpcyBub3QgYXZhaWxhYmxlXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjMwMyAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MzE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBudW1iZXIgb2YgYXJndW1lbnRzXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjMyOQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcGFyc2UgcG9ydCBudW1iZXI6ICVzXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjM2MSAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGNvbW1hbmQgc3BlY2lmaWVkLlxuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzo4OQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSBob3N0IG5hbWUgJyVzJzogJXNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIGFkZHJlc3MgJyVzJzogJXNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBbb3B0aW9uc10gJXMgPGhvc3QgbmFtZSAuLi4+XG4iCisiJXMgW29wdGlvbnNdICVzIDxhZGRyZXNzIC4uLiA+XG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFNob3cgdmVyc2lvblxuIgorIiAgICAtbiAtLW5hbWUgICAgICAgICAgICBSZXNvbHZlIGhvc3QgbmFtZVxuIgorIiAgICAtYSAtLWFkZHJlc3MgICAgICAgICBSZXNvbHZlIGFkZHJlc3NcbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgRW5hYmxlIHZlcmJvc2UgbW9kZVxuIgorIiAgICAtNiAgICAgICAgICAgICAgICAgICBMb29rdXAgSVB2NiBhZGRyZXNzXG4iCisiICAgIC00ICAgICAgICAgICAgICAgICAgIExvb2t1cCBJUHY0IGFkZHJlc3NcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6Mjk5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBob3N0IG5hbWUgcmVzb2x2ZXI6ICVzXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjMwOQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcGFyc2UgYWRkcmVzcyAnJXMnXG4iCittc2dzdHIgIk1pc2V5ZG5hw7Bpc3QgYXQgZ3JlaW5hIGF0c2V0dXJpbiAnJXMnXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzozMTQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgYWRkcmVzcyByZXNvbHZlcjogJXNcbiIKK21zZ3N0ciAiTWlzZXlkbmHDsGlzdCBhdCBzdG92bmEgYXRzZXR1cnMtYXZnZXJhcmEiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgW29wdGlvbnNdIDxuZXcgaG9zdCBuYW1lPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgRW5hYmxlIHZlcmJvc2UgbW9kZVxuIgorbXNnc3RyICIiCisiJXMgW2tvc3Rpcl0gPG7DvXR0IHZlcnRzbmF2bj5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU8O9biBoZXNhIGhqw6FscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTw71uIMO6dGfDoXZ1bnVtbWFyXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIFPDvW4gb3LDsGFtaWtsYW4gc3RhbmRcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMsIGV4cGVjdGluZyBleGFjdGx5IG9uZS5cbiIKK21zZ3N0ciAiw5NnaWxkdWd0IHRhbCBhdiDDoXZpcmtqdW0sIHbDpm50aSBha2t1csOhdCBlaXR0LlxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkhvc3QgbmFtZSBzdWNjZXNzZnVsbHkgY2hhbmdlZCB0byAlc1xuIgorbXNnc3RyICJWZXJ0c25hdm4gYnJveXR0IHRpbCAlc1xuIgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL3BvL2ZyLnBvIGIvYXZhaGktMC42LjMxL3BvL2ZyLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0NDc1NmEKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvcG8vZnIucG8KQEAgLTAsMCArMSw4NjEgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDA4IFRIRSBhdmFoaS1mcidTIENPUFlSSUdIVCBIT0xERVIKKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGF2YWhpLWZyIHBhY2thZ2UuCisjCisjCisjIE1hdHRoaWV1IFJvbmRlYXUgPG1pbGFuaXRvMTk4NUB5YWhvby5mcj4sIDIwMDguCisjIFBhYmxvIE1hcnRpbi1Hb21leiA8cGFibG8ubWFydGluLWdvbWV6QGxhcG9zdGUubmV0PiwgMjAwOC4KKyMgTWFydGluLUdvbWV6IFBhYmxvIDxwYWJsby5tYXJ0aW4tZ29tZXpAbGFwb3N0ZS5uZXQ+LCAyMDA4LgorIyBCcnVubyBQYXRyaSA8YnJ1bm8ucGF0cmlAZ21haWwuY29tPiwgMjAxMC4KK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IEF2YWhpIDIwMDhcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTEtMDQtMDIgMDM6MjMrMDIwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTAtMDktMDUgMTA6MzMrMDIwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogQnJ1bm8gUGF0cmkgPGJydW5vLnBhdHJpQGdtYWlsLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBGcmVuY2ggPGZlZG9yYS10cmFucy1mckByZWRoYXQuY29tPlxuIgorIkxhbmd1YWdlOiBmclxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuID4gMSk7XG4iCisiWC1HZW5lcmF0b3I6IExva2FsaXplIDEuMVxuIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozMAorbXNnaWQgIk9LIgorbXNnc3RyICJPayIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzEKK21zZ2lkICJPcGVyYXRpb24gZmFpbGVkIgorbXNnc3RyICJMJ29ww6lyYXRpb24gYSDDqWNob3XDqSAiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjMyCittc2dpZCAiQmFkIHN0YXRlIgorbXNnc3RyICJNYXV2YWlzIMOpdGF0IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozMworbXNnaWQgIkludmFsaWQgaG9zdCBuYW1lIgorbXNnc3RyICJOb20gZCdow7R0ZSBpbnZhbGlkZSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzQKK21zZ2lkICJJbnZhbGlkIGRvbWFpbiBuYW1lIgorbXNnc3RyICJOb20gZGUgZG9tYWluZSBpbnZhbGlkZSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzUKK21zZ2lkICJObyBzdWl0YWJsZSBuZXR3b3JrIHByb3RvY29sIGF2YWlsYWJsZSIKK21zZ3N0ciAiUGFzIGRlIHByb3RvY29sZSByw6lzZWF1IGFwcHJvcHJpw6kgZGlzcG9uaWJsZSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzYKK21zZ2lkICJJbnZhbGlkIEROUyBUVEwiCittc2dzdHIgIlRUTCBETlMgaW52YWxpZGUiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM3CisjLCBmdXp6eQorbXNnaWQgIlJlc291cmNlIHJlY29yZCBrZXkgaXMgcGF0dGVybiIKK21zZ3N0ciAiTGEgY2xlZiBkZSBsJ2VucmVnaXN0cmVtZW50IGRlIGxhIHJlc3NvdXJjZSBlc3QgbW9kw6lsaXPDqWUiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM4Cittc2dpZCAiTG9jYWwgbmFtZSBjb2xsaXNpb24iCittc2dzdHIgIkNvbmZsaXQgZGUgbm9tcyBsb2NhdXgiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM5Cittc2dpZCAiSW52YWxpZCByZWNvcmQiCittc2dzdHIgIkVucmVnaXN0cmVtZW50IGludmFsaWRlIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0MQorbXNnaWQgIkludmFsaWQgc2VydmljZSBuYW1lIgorbXNnc3RyICJOb20gZGUgc2VydmljZSBpbnZhbGlkZSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDIKK21zZ2lkICJJbnZhbGlkIHNlcnZpY2UgdHlwZSIKK21zZ3N0ciAiVHlwZSBkZSBzZXJ2aWNlIGludmFsaWRlIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0MworbXNnaWQgIkludmFsaWQgcG9ydCBudW1iZXIiCittc2dzdHIgIk51bcOpcm8gZGUgcG9ydCBpbnZhbGlkZSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDQKK21zZ2lkICJJbnZhbGlkIHJlY29yZCBrZXkiCittc2dzdHIgIkNsw6kgZCdlbnJlZ2lzdHJlbWVudCBpbnZhbGlkZSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDUKK21zZ2lkICJJbnZhbGlkIGFkZHJlc3MiCittc2dzdHIgIkFkcmVzc2UgaW52YWxpZGUiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQ2Cittc2dpZCAiVGltZW91dCByZWFjaGVkIgorbXNnc3RyICJUZW1wcyBkJ2F0dGVudGUgw6ljb3Vsw6kiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQ3Cittc2dpZCAiVG9vIG1hbnkgY2xpZW50cyIKK21zZ3N0ciAiVHJvcCBkZSBjbGllbnRzIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0OAorbXNnaWQgIlRvbyBtYW55IG9iamVjdHMiCittc2dzdHIgIlRyb3AgZCdvYmpldHMiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQ5Cittc2dpZCAiVG9vIG1hbnkgZW50cmllcyIKK21zZ3N0ciAiVHJvcCBkJ2VudHLDqWVzIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1MAorbXNnaWQgIk9TIEVycm9yIgorbXNnc3RyICJFcnJldXIgZHUgc3lzdMOobWUgZCdleHBsb2l0YXRpb24iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjUyCittc2dpZCAiQWNjZXNzIGRlbmllZCIKK21zZ3N0ciAiQWNjw6hzIHJlZnVzw6kiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjUzCittc2dpZCAiSW52YWxpZCBvcGVyYXRpb24iCittc2dzdHIgIk9ww6lyYXRpb24gaW52YWxpZGUgIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1NAorbXNnaWQgIkFuIHVuZXhwZWN0ZWQgRC1CdXMgZXJyb3Igb2NjdXJlZCIKK21zZ3N0ciAiVW5lIGVycmV1ciBpbmF0dGVuZHVlIGRlIEQtQnVzIHMnZXN0IHByb2R1aXRlIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1NQorbXNnaWQgIkRhZW1vbiBjb25uZWN0aW9uIGZhaWxlZCIKK21zZ3N0ciAiTGEgY29ubmV4aW9uIGF1IGTDqW1vbiBhIMOpY2hvdcOpICIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTYKK21zZ2lkICJNZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICJNw6ltb2lyZSBzYXR1csOpZSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTcKK21zZ2lkICJUaGUgb2JqZWN0IHBhc3NlZCBpbiB3YXMgbm90IHZhbGlkIgorbXNnc3RyICJMJ29iamV0IHRyYW5zbWlzIG4nw6l0YWl0IHBhcyB2YWxpZGUgIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1OAorbXNnaWQgIkRhZW1vbiBub3QgcnVubmluZyIKK21zZ3N0ciAiTGUgZMOpbW9uIG4nZXN0IHBhcyBlbiBjb3VycyBkJ2V4w6ljdXRpb24iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU5Cittc2dpZCAiSW52YWxpZCBpbnRlcmZhY2UgaW5kZXgiCittc2dzdHIgIkluZGV4IGQnaW50ZXJmYWNlIGludmFsaWRlICIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjAKK21zZ2lkICJJbnZhbGlkIHByb3RvY29sIHNwZWNpZmljYXRpb24iCittc2dzdHIgIlNww6ljaWZpY2F0aW9uIGRlIHByb3RvY29sZSBpbnZhbGlkZSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjEKK21zZ2lkICJJbnZhbGlkIGZsYWdzIgorbXNnc3RyICJEcmFwZWF1eCBpbnZhbGlkZXMiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjYzCittc2dpZCAiTm90IGZvdW5kIgorbXNnc3RyICJOb24gdHJvdXbDqSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjQKK21zZ2lkICJJbnZhbGlkIGNvbmZpZ3VyYXRpb24iCittc2dzdHIgIkNvbmZpZ3VyYXRpb24gaW52YWxpZGUiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY1Cittc2dpZCAiVmVyc2lvbiBtaXNtYXRjaCIKK21zZ3N0ciAiTGVzIHZlcnNpb25zIG5lIGNvcnJlc3BvbmRlbnQgcGFzIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2NgorbXNnaWQgIkludmFsaWQgc2VydmljZSBzdWJ0eXBlIgorbXNnc3RyICJTb3VzLXR5cGUgZGUgc2VydmljZSBpbnZhbGlkZSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjcKK21zZ2lkICJJbnZhbGlkIHBhY2tldCIKK21zZ3N0ciAiUGFxdWV0IGludmFsaWRlIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2OAorbXNnaWQgIkludmFsaWQgRE5TIHJldHVybiBjb2RlIgorbXNnc3RyICJDb2RlIGRlIHJldG91ciBETlMgaW52YWxpZGUiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY5Cittc2dpZCAiRE5TIGZhaWx1cmU6IEZPUk1FUlIiCittc2dzdHIgIsOJY2hlYyBETlPCoDogRk9STUVSUiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzAKK21zZ2lkICJETlMgZmFpbHVyZTogU0VSVkZBSUwiCittc2dzdHIgIsOJY2hlYyBETlPCoOKArzogU0VSVkZBSUwiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjcxCittc2dpZCAiRE5TIGZhaWx1cmU6IE5YRE9NQUlOIgorbXNnc3RyICLDiWNoZWMgRE5TwqDigK86IE5YRE9NQUlOIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3MgorbXNnaWQgIkROUyBmYWlsdXJlOiBOT1RJTVAiCittc2dzdHIgIsOJY2hlYyBETlMg4oCvOiBOT1RJTVAiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc0Cittc2dpZCAiRE5TIGZhaWx1cmU6IFJFRlVTRUQiCittc2dzdHIgIsOJY2hlYyBETlPCoOKArzogUkVGVVNFRCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzUKK21zZ2lkICJETlMgZmFpbHVyZTogWVhET01BSU4iCittc2dzdHIgIsOJY2hlYyBETlPigK/CoDogWVhET01BSU4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc2Cittc2dpZCAiRE5TIGZhaWx1cmU6IFlYUlJTRVQiCittc2dzdHIgIsOJY2hlYyBETlMg4oCvOiBZWFJSU0VUIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3NworbXNnaWQgIkROUyBmYWlsdXJlOiBOWFJSU0VUIgorbXNnc3RyICLDiWNoZWMgRE5T4oCvwqA6IE5YUlJTRVQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc4Cittc2dpZCAiRE5TIGZhaWx1cmU6IE5PVEFVVEgiCittc2dzdHIgIsOJY2hlYyBETlPigK/CoDogTk9UQVVUSCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzkKK21zZ2lkICJETlMgZmFpbHVyZTogTk9UWk9ORSIKK21zZ3N0ciAiw4ljaGVjIEROU+KAr8KgOiBOT1RaT05FIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4MAorbXNnaWQgIkludmFsaWQgUkRBVEEiCittc2dzdHIgIlJEQVRBIGludmFsaWRlIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4MQorbXNnaWQgIkludmFsaWQgRE5TIHR5cGUiCittc2dzdHIgIlR5cGUgZGUgRE5TIGludmFsaWRlIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4MgorbXNnaWQgIkludmFsaWQgRE5TIGNsYXNzIgorbXNnc3RyICJDbGFzc2UgZGUgRE5TIGludmFsaWRlIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4MworbXNnaWQgIk5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIk5vbiBwcmlzIGVuIGNoYXJnZSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODUKK21zZ2lkICJOb3QgcGVybWl0dGVkIgorbXNnc3RyICJOb24gYXV0b3Jpc8OpIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4NgorbXNnaWQgIkludmFsaWQgYXJndW1lbnQiCittc2dzdHIgIkFyZ3VtZW50IGludmFsaWRlIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4NworbXNnaWQgIklzIGVtcHR5IgorbXNnc3RyICJFc3QgdmlkZSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODgKK21zZ2lkICJUaGUgcmVxdWVzdGVkIG9wZXJhdGlvbiBpcyBpbnZhbGlkIGJlY2F1c2UgcmVkdW5kYW50IgorbXNnc3RyICJMJ29ww6lyYXRpb24gZGVtYW5kw6llIGVzdCBpbnZhbGlkZSBjYXIgcmVkb25kYW50ZSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6OTQKK21zZ2lkICJJbnZhbGlkIEVycm9yIENvZGUiCittc2dzdHIgIkNvZGUgZCdlcnJldXIgaW52YWxpZGUiCisKKyM6IC4uL2F2YWhpLWRpc2NvdmVyLXN0YW5kYWxvbmUvYXZhaGktZGlzY292ZXIudWkuaDoxCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6NzYKK21zZ2lkICI8aT5ObyBzZXJ2aWNlIGN1cnJlbnRseSBzZWxlY3RlZC48L2k+IgorbXNnc3RyICI8aT5BdWN1biBzZXJ2aWNlIGFjdHVlbGxlbWVudCBzw6lsZWN0aW9ubsOpPC9pPiIKKworIzogLi4vYXZhaGktZGlzY292ZXItc3RhbmRhbG9uZS9hdmFoaS1kaXNjb3Zlci51aS5oOjIKK21zZ2lkICJBdmFoaSBEaXNjb3ZlcnkiCittc2dzdHIgIkTDqWNvdXZlcnRlIEF2YWhpIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIuZGVza3RvcC5pbi5pbi5oOjEKK21zZ2lkICJBdmFoaSBaZXJvY29uZiBCcm93c2VyIgorbXNnc3RyICJFeHBsb3JhdGV1ciBaZXJvY29uZiBkJ0F2YWhpIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIuZGVza3RvcC5pbi5pbi5oOjIKK21zZ2lkICJCcm93c2UgZm9yIFplcm9jb25mIHNlcnZpY2VzIGF2YWlsYWJsZSBvbiB5b3VyIG5ldHdvcmsiCittc2dzdHIgIkV4cGxvcmVyIGxlcyBzZXJ2aWNlcyBaZXJvY29uZiBkaXNwb25pYmxlcyBzdXIgdm90cmUgcsOpc2VhdSIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIyNAorbXNnaWQgIlRYVCIKK21zZ3N0ciAiVFhUIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI2Cittc2dpZCAiVFhUIERhdGE6IgorbXNnc3RyICJEb25uw6llcyBUWFTCoDoiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMjYKK21zZ2lkICJlbXB0eSIKK21zZ3N0ciAidmlkZSIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIyOAorbXNnaWQgIlNlcnZpY2UgVHlwZToiCittc2dzdHIgIlR5cGUgZGUgc2VydmljZcKgOiIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIyOQorbXNnaWQgIlNlcnZpY2UgTmFtZToiCittc2dzdHIgIk5vbSBkdSBzZXJ2aWNlwqA6IgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjMwCittc2dpZCAiRG9tYWluIE5hbWU6IgorbXNnc3RyICJOb20gZGUgZG9tYWluZcKgOiIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIzMQorbXNnaWQgIkludGVyZmFjZToiCittc2dzdHIgIkludGVyZmFjZcKgOiIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIzMgorbXNnaWQgIkFkZHJlc3M6IgorbXNnc3RyICJBZHJlc3NlwqA6IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE4NQorbXNnaWQgIkJyb3dzZSBTZXJ2aWNlIFR5cGVzIgorbXNnc3RyICJQYXJjb3VyaXIgbGVzIHR5cGVzIGRlIHNlcnZpY2UiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTg1Cittc2dpZCAiQSBOVUxMIHRlcm1pbmF0ZWQgbGlzdCBvZiBzZXJ2aWNlIHR5cGVzIHRvIGJyb3dzZSBmb3IiCittc2dzdHIgIlVuZSBsaXN0ZSwgdGVybWluw6llIHBhciBOVUxMLCBkZSB0eXBlIGRlIHNlcnZpY2VzIMOgIHBhcmNvdXJpciIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxOTAKK21zZ2lkICJEb21haW4iCittc2dzdHIgIkRvbWFpbmUiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTkwCittc2dpZCAiVGhlIGRvbWFpbiB0byBicm93c2UgaW4sIG9yIE5VTEwgZm9yIHRoZSBkZWZhdWx0IGRvbWFpbiIKK21zZ3N0ciAiTGUgZG9tYWluZSDDoCBwYXJjb3VyaXIsIG91IE5VTEwgcG91ciBsZSBkb21haW5lIHBhciBkw6lmYXV0IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE5NgorbXNnaWQgIlNlcnZpY2UgVHlwZSIKK21zZ3N0ciAiVHlwZSBkZSBzZXJ2aWNlIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE5NgorbXNnaWQgIlRoZSBzZXJ2aWNlIHR5cGUgb2YgdGhlIHNlbGVjdGVkIHNlcnZpY2UiCittc2dzdHIgIkxlIHR5cGUgZGUgc2VydmljZSBwb3VyIGNlbHVpIHPDqWxlY3Rpb25uw6kiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjAyIC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTAyMworbXNnaWQgIlNlcnZpY2UgTmFtZSIKK21zZ3N0ciAiTm9tIGRlIHNlcnZpY2UiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjAyCittc2dpZCAiVGhlIHNlcnZpY2UgbmFtZSBvZiB0aGUgc2VsZWN0ZWQgc2VydmljZSIKK21zZ3N0ciAiTm9tIGR1IHNlcnZpY2Ugc8OpbGVjdGlvbm7DqSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMDgKK21zZ2lkICJBZGRyZXNzIgorbXNnc3RyICJBZHJlc3NlIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIwOAorbXNnaWQgIlRoZSBhZGRyZXNzIG9mIHRoZSByZXNvbHZlZCBzZXJ2aWNlIgorbXNnc3RyICJMJ2FkcmVzc2UgZHUgc2VydmljZSByw6lzb2x1IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIxMworbXNnaWQgIlBvcnQiCittc2dzdHIgIlBvcnQiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjEzCittc2dpZCAiVGhlIElQIHBvcnQgbnVtYmVyIG9mIHRoZSByZXNvbHZlZCBzZXJ2aWNlIgorbXNnc3RyICJMZSBudW3DqXJvIGR1IHBvcnQgSVAgZHUgc2VydmljZSByw6lzb2x1IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIxOQorbXNnaWQgIkhvc3QgTmFtZSIKK21zZ3N0ciAiTm9tIGQnaMO0dGUiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjE5Cittc2dpZCAiVGhlIGhvc3QgbmFtZSBvZiB0aGUgcmVzb2x2ZWQgc2VydmljZSIKK21zZ3N0ciAiTGUgbm9tIGQnaMO0dGUgZHUgc2VydmljZSByw6lzb2x1IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIyNQorbXNnaWQgIlRYVCBEYXRhIgorbXNnc3RyICJEb25uw6llcyBUWFQiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjI1Cittc2dpZCAiVGhlIFRYVCBkYXRhIG9mIHRoZSByZXNvbHZlZCBzZXJ2aWNlIgorbXNnc3RyICJMZXMgZG9ubsOpZXMgVFhUIGR1IHNlcnZpY2UgcsOpc29sdSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMzAKK21zZ2lkICJSZXNvbHZlIFNlcnZpY2UiCittc2dzdHIgIlLDqXNvdWRyZSBsZSBzZXJ2aWNlIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIzMAorbXNnaWQgIlJlc29sdmUgdGhlIHNlbGVjdGVkIHNlcnZpY2UgYXV0b21hdGljYWxseSBiZWZvcmUgcmV0dXJuaW5nIgorbXNnc3RyICJSw6lzb2x1dGlvbiBhdXRvbWF0aXF1ZW1lbnQgZHUgc2VydmljZSBzw6lsZWN0aW9ubsOpIGF2YW50IHJlbnZvaSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMzYKK21zZ2lkICJSZXNvbHZlIFNlcnZpY2UgSG9zdCBOYW1lIgorbXNnc3RyICJSw6lzb2x1dGlvbiBkdSBub20gZCdow7R0ZSBkdSBzZXJ2aWNlIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIzNgorbXNnaWQgIiIKKyJSZXNvbHZlIHRoZSBob3N0IG5hbWUgb2YgdGhlIHNlbGVjdGVkIHNlcnZpY2UgYXV0b21hdGljYWxseSBiZWZvcmUgcmV0dXJuaW5nIgorbXNnc3RyICIiCisiUsOpc29sdXRpb24gYXV0b21hdGlxdWUgZHUgbm9tIGQnaMO0dGUgZHUgc2VydmljZSBzw6lsZWN0aW9ubsOpIGF2YW50IHJlbnZvaSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyNDIKK21zZ2lkICJBZGRyZXNzIGZhbWlseSIKK21zZ3N0ciAiRmFtaWxsZSBkJ2FkcmVzc2VzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjI0MgorbXNnaWQgIlRoZSBhZGRyZXNzIGZhbWlseSBmb3IgaG9zdCBuYW1lIHJlc29sdXRpb24iCittc2dzdHIgIkxhIGZhbWlsbGUgZCdhZHJlc3NlcyBwb3VyIGxhIHLDqXNvbHV0aW9uIGR1IG5vbSBkJ2jDtHRlIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjMyNgorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFoaSBjbGllbnQgZmFpbHVyZTogJXMiCittc2dzdHIgIsOJY2hlYyBkdSBjbGllbnQgQXZhaGkg4oCvOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzozODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaGkgcmVzb2x2ZXIgZmFpbHVyZTogJXMiCittc2dzdHIgIsOJY2hlYyBkZSByw6lzb2x1dGlvbiBBdmFoaeKAr8KgOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo1MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJvd3NpbmcgZm9yIHNlcnZpY2UgdHlwZSAlcyBpbiBkb21haW4gJXMgZmFpbGVkOiAlcyIKK21zZ3N0ciAiw4ljaGVjIGRlIGwnZXhwbG9yYXRpb24gZGUgdHlwZSBkZSBzZXJ2aWNlICVzIGRhbnMgbGUgZG9tYWluZSAlc+KAr8KgOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo1MTkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTY4CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoxNjkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTc4CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoxNzkKK21zZ2lkICJuL2EiCittc2dzdHIgIm4vYSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo2NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaGkgZG9tYWluIGJyb3dzZXIgZmFpbHVyZTogJXMiCittc2dzdHIgIsOJY2hlYyBkZSBsJ2V4cGxvcmF0ZXVyIGRlIGRvbWFpbmUgQXZhaGnigK/CoDogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6Njg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWFkIEF2YWhpIGRvbWFpbjogJXMiCittc2dzdHIgIsOJY2hlYyBkZSBsYSBsZWN0dXJlIGR1IGRvbWFpbmUgQXZhaGnigK/CoDogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NzA2Cittc2dpZCAiQnJvd3NlIHNlcnZpY2UgdHlwZSBsaXN0IGlzIGVtcHR5ISIKK21zZ3N0ciAiTGEgbGlzdGUgZGVzIHR5cGVzIGRlIHNlcnZpY2VzIMOgIGV4cGxvcmVyIGVzdCB2aWRlwqAhIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjcxNworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY29ubmVjdCB0byBBdmFoaSBzZXJ2ZXI6ICVzIgorbXNnc3RyICLDiWNoZWMgZGUgbGEgY29ubmV4aW9uIGF1IHNlcnZldXIgQXZhaGnigK/CoDogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NzM1Cittc2dpZCAiQnJvd3NpbmcgZm9yIHNlcnZpY2VzIG9uIDxiPmxvY2FsIG5ldHdvcms8L2I+OiIKK21zZ3N0ciAiRXhwbG9yZXIgbGVzIHNlcnZpY2VzIHN1ciA8Yj5sZSByw6lzZWF1IGxvY2FsPC9iPsKgOiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo3MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJvd3NpbmcgZm9yIHNlcnZpY2VzIGluIGRvbWFpbiA8Yj4lczwvYj46IgorbXNnc3RyICJFeHBsb3JlciBsZXMgc2VydmljZXMgZHUgZG9tYWluZSA8Yj4lczwvYj7CoDoiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NzczCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgYnJvd3NlciBmb3IgJXM6ICVzIgorbXNnc3RyICLDiWNoZWMgZGUgY3LDqWF0aW9uIGRlIGwnZXhwbG9yYXRldXIgcG91ciAlc+KAr8KgOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo5MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSByZXNvbHZlciBmb3IgJXMgb2YgdHlwZSAlcyBpbiBkb21haW4gJXM6ICVzIgorbXNnc3RyICIiCisiw4ljaGVjIGRlIGxhIGNyw6lhdGlvbiBkdSByw6lzb2x2ZXVyIHBvdXIgJXMgZGUgdHlwZSAlcyBkYW5zIGxlIGRvbWFpbmUgJXPigK/CoDogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6OTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgZG9tYWluIGJyb3dzZXI6ICVzIgorbXNnc3RyICLDiWNoZWMgZGUgY3LDqWF0aW9uIGRlIGwnZXhwbG9yYXRldXIgZGUgZG9tYWluZSDigK86ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjk4OQorbXNnaWQgIkNoYW5nZSBkb21haW4iCittc2dzdHIgIkNoYW5nZXIgZGUgZG9tYWluZSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMDMxIC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTE2MgorbXNnaWQgIkJyb3dzaW5nLi4uIgorbXNnc3RyICJFeHBsb3JhdGlvbi4uLiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTIwCittc2dpZCAiSW5pdGlhbGl6aW5nLi4uIgorbXNnc3RyICJJbml0aWFsaXNhdGlvbi4uLiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTQ0Cittc2dpZCAiTG9jYXRpb24iCittc2dzdHIgIkVtcGxhY2VtZW50IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNDkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTUzCittc2dpZCAiTmFtZSIKK21zZ3N0ciAiTm9tIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNTQgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTUzCittc2dpZCAiVHlwZSIKK21zZ3N0ciAiVHlwZSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTY2Cittc2dpZCAiX0RvbWFpbi4uLiIKK21zZ3N0ciAiX0RvbWFpbmUuLi4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzo1NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgW29wdGlvbnNdXG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1zIC0tc3NoICAgICAgICAgICAgIEJyb3dzZSBTU0ggc2VydmVyc1xuIgorIiAgICAtdiAtLXZuYyAgICAgICAgICAgICBCcm93c2UgVk5DIHNlcnZlcnNcbiIKKyIgICAgLVMgLS1zaGVsbCAgICAgICAgICAgQnJvd3NlIGJvdGggU1NIIGFuZCBWTkNcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgVGhlIGRvbWFpbiB0byBicm93c2UgaW5cbiIKK21zZ3N0ciAiIgorIiVzIFtvcHRpb25zXVxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBBZmZpY2hlIGNldHRlIGFpZGVcbiIKKyIgICAgLXMgLS1zc2ggICAgICAgICAgICAgRXhwbG9yZSBsZXMgc2VydmV1cnMgU1NIXG4iCisiICAgIC12IC0tdm5jICAgICAgICAgICAgIEV4cGxvcmUgbGVzIHNlcnZldXJzIFZOQ1xuIgorIiAgICAtUyAtLXNoZWxsICAgICAgICAgICBFeHBsb3JlIFNTSCBldCBWTkNcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgTGUgZG9tYWluZSDDoCBleHBsb3JlclxuIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTAxIC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjc3NQorIywgYy1mb3JtYXQKK21zZ2lkICJUb28gbWFueSBhcmd1bWVudHNcbiIKK21zZ3N0ciAiVHJvcCBkJ2FyZ3VtZW50c1xuIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTQ5Cittc2dpZCAiQ2hvb3NlIFNoZWxsIFNlcnZlciIKK21zZ3N0ciAiQ2hvaXNpciB1biBzZXJ2ZXVyIFNoZWxsIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTUxCittc2dpZCAiRGVza3RvcCIKK21zZ3N0ciAiQnVyZWF1IgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTUyCittc2dpZCAiVGVybWluYWwiCittc2dzdHIgIlRlcm1pbmFsIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTU2Cittc2dpZCAiQ2hvb3NlIFZOQyBzZXJ2ZXIiCittc2dzdHIgIkNob2lzaXIgdW4gc2VydmV1ciBWTkMiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNjEKK21zZ2lkICJDaG9vc2UgU1NIIHNlcnZlciIKK21zZ3N0ciAiQ2hvaXNpciB1biBzZXJ2ZXVyIFNTSCIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE4NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb25uZWN0aW5nIHRvICclcycgLi4uXG4iCittc2dzdHIgIkNvbm5leGlvbiDDoCDCq8KgJXPCoMK7Li4uXG4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoyNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhlY2xwKCkgZmFpbGVkOiAlc1xuIgorbXNnc3RyICLDiWNoZWMgZGUgZXhlY2xwKCnigK/CoDogJXNcbiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5jZWxlZC5cbiIKK21zZ3N0ciAiQW5udWzDqS5cbiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5kZXNrdG9wLmluLmluLmg6MQorbXNnaWQgIkF2YWhpIFNTSCBTZXJ2ZXIgQnJvd3NlciIKK21zZ3N0ciAiRXhwbG9yYXRldXIgZGUgc2VydmV1ciBTU0ggQXZhaGkiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guZGVza3RvcC5pbi5pbi5oOjIKK21zZ2lkICJCcm93c2UgZm9yIFplcm9jb25mLWVuYWJsZWQgU1NIIFNlcnZlcnMiCittc2dzdHIgIkV4cGxvcmVyIGxlcyBzZXJ2ZXVycyBTU0ggYXZlYyBaZXJvY29uZiBhY3RpdsOpIgorCisjOiAuLi9hdmFoaS11aS9idm5jLmRlc2t0b3AuaW4uaW4uaDoxCittc2dpZCAiQXZhaGkgVk5DIFNlcnZlciBCcm93c2VyIgorbXNnc3RyICJFeHBsb3JhdGV1ciBkZSBzZXJ2ZXVycyBWTkMgQXZhaGkgIgorCisjOiAuLi9hdmFoaS11aS9idm5jLmRlc2t0b3AuaW4uaW4uaDoyCittc2dpZCAiQnJvd3NlIGZvciBaZXJvY29uZi1lbmFibGVkIFZOQyBTZXJ2ZXJzIgorbXNnc3RyICJFeHBsb3JlciBsZXMgc2VydmV1cnMgVk5DIGF2ZWMgWmVyb2NvbmYgYWN0aXbDqSIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIjogQWxsIGZvciBub3dcbiIKK21zZ3N0ciAiwqA6IGMnZXN0IHRvdXQgcG91ciBsZSBtb21lbnRcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIjogQ2FjaGUgZXhoYXVzdGVkXG4iCittc2dzdHIgIsKgOiBtw6ltb2lyZSBjYWNoZSBzYXR1csOpZVxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoyMzkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIHNlcnZpY2UgJyVzJyBvZiB0eXBlICclcycgaW4gZG9tYWluICclcyc6ICVzXG4iCittc2dzdHIgIiIKKyLDiWNoZWMgZGUgcsOpc29sdXRpb24gZHUgc2VydmljZSDCq8KgJXPCoMK7IGRlIHR5cGUgwqvCoCVzwqDCuyBkYW5zIGxlIGRvbWFpbmUgwqvCoCVzwqDCuyAiCisi4oCvOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzozNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VydmljZV9icm93c2VyIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAiw4ljaGVjIGRlIHNlcnZpY2VfYnJvd3NlcsKgOiAgJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6Mzc4CisjLCBjLWZvcm1hdAorbXNnaWQgImF2YWhpX3NlcnZpY2VfYnJvd3Nlcl9uZXcoKSBmYWlsZWQ6ICVzXG4iCittc2dzdHIgIsOJY2hlYyBkZSBhdmFoaV9zZXJ2aWNlX2Jyb3dzZXJfbmV3KCkg4oCvOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VydmljZV90eXBlX2Jyb3dzZXIgZmFpbGVkOiAlc1xuIgorbXNnc3RyICLDiWNoZWMgZGUgc2VydmljZV90eXBlX2Jyb3dzZXLCoDogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImF2YWhpX3NlcnZpY2VfdHlwZV9icm93c2VyX25ldygpIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAiw4ljaGVjIGRlIGF2YWhpX3NlcnZpY2VfdHlwZV9icm93c2VyX25ldygpwqA6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjUxOQorIywgYy1mb3JtYXQKK21zZ2lkICJhdmFoaV9kb21haW5fYnJvd3Nlcl9uZXcoKSBmYWlsZWQ6ICVzXG4iCittc2dzdHIgIsOJY2hlYyBkZSBhdmFoaV9kb21haW5fYnJvd3Nlcl9uZXcoKcKgOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1MzUgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjM5NAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI4MCAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBxdWVyeSB2ZXJzaW9uIHN0cmluZzogJXNcbiIKK21zZ3N0ciAiw4ljaGVjIGRlIGxhIGRlbWFuZGUgZGUgbGEgY2hhw65uZSBkZSB2ZXJzaW9u4oCvwqA6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU0MCAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6Mzk5CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6Mjg1IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxNzMKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IGhvc3QgbmFtZTogJXNcbiIKK21zZ3N0ciAiw4ljaGVjIGRlIGxhIGRlbWFuZGUgZGUgbm9tIGQnaMO0dGXigK/CoDogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTQ0IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo0MDMKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyODkgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE3NworIywgYy1mb3JtYXQKK21zZ2lkICJTZXJ2ZXIgdmVyc2lvbjogJXM7IEhvc3QgbmFtZTogJXNcbiIKK21zZ3N0ciAiVmVyc2lvbiBkdSBzZXJ2ZXVy4oCvwqA6ICVzIDsgbm9tIGQnaMO0dGXigK/CoDogJXNcbiIKKworIy4gVHJhbnNsYXRvcnM6IFRoaXMgaXMgYSBjb2x1bW4gaGVhZGluZyB3aXRoIGFiYnJldmlhdGlvbnMgZm9yCisjLiAqICAgRXZlbnQgKCsvLSksIE5ldHdvcmsgSW50ZXJmYWNlLCBQcm90b2NvbCAoSVB2NC92NiksIERvbWFpbgorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUgSWZjZSBQcm90IERvbWFpblxuIgorbXNnc3RyICJEb21haW5lIEUgSWZjZSBQcm90XG4iCisKKyMuIFRyYW5zbGF0b3JzOiBUaGlzIGlzIGEgY29sdW1uIGhlYWRpbmcgd2l0aCBhYmJyZXZpYXRpb25zIGZvcgorIy4gKiAgIEV2ZW50ICgrLy0pLCBOZXR3b3JrIEludGVyZmFjZSwgUHJvdG9jb2wgKElQdjQvdjYpLCBEb21haW4KKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU1MworIywgYy1mb3JtYXQKK21zZ2lkICJFIElmY2UgUHJvdCAlLSpzICUtMjBzIERvbWFpblxuIgorbXNnc3RyICJEb21haW5lIEUgSWZjZSBQcm90ICUtKnMgJS0yMHNcbiIKKworIy4gV2UgaGF2ZSBiZWVuIGRpc2Nvbm5lY3RlZCwgc28gbGV0IHJlY29ubmVjdAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTg1IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGlzY29ubmVjdGVkLCByZWNvbm5lY3RpbmcgLi4uXG4iCittc2dzdHIgIkTDqWNvbm5lY3TDqSwgcmVjb25uZXhpb24uLi5cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTk5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjgyOQorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE3MCAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6Mzg2CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjcyIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBjbGllbnQgb2JqZWN0OiAlc1xuIgorbXNnc3RyICLDiWNoZWMgZGUgbGEgY3LDqWF0aW9uIGRlIGwnb2JqZXQgY2xpZW504oCvwqA6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjYwNCAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTc1CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MTQzIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzo1OQorIywgYy1mb3JtYXQKK21zZ2lkICJDbGllbnQgZmFpbHVyZSwgZXhpdGluZzogJXNcbiIKK21zZ3N0ciAiw4ljaGVjIGR1IGNsaWVudCwgYXJyw6p04oCvwqA6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjYyMyAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIldhaXRpbmcgZm9yIGRhZW1vbiAuLi5cbiIKK21zZ3N0ciAiRW4gYXR0ZW50ZSBkdSBkw6ltb24uLi5cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NjQ3Cittc2dpZCAiIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLUQgLS1icm93c2UtZG9tYWlucyAgQnJvd3NlIGZvciBicm93c2luZyBkb21haW5zIGluc3RlYWQgb2Ygc2VydmljZXNcbiIKKyIgICAgLWEgLS1hbGwgICAgICAgICAgICAgU2hvdyBhbGwgc2VydmljZXMsIHJlZ2FyZGxlc3Mgb2YgdGhlIHR5cGVcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgVGhlIGRvbWFpbiB0byBicm93c2UgaW5cbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgRW5hYmxlIHZlcmJvc2UgbW9kZVxuIgorIiAgICAtdCAtLXRlcm1pbmF0ZSAgICAgICBUZXJtaW5hdGUgYWZ0ZXIgZHVtcGluZyBhIG1vcmUgb3IgbGVzcyBjb21wbGV0ZSAiCisibGlzdFxuIgorIiAgICAtYyAtLWNhY2hlICAgICAgICAgICBUZXJtaW5hdGUgYWZ0ZXIgZHVtcGluZyBhbGwgZW50cmllcyBmcm9tIHRoZSBjYWNoZVxuIgorIiAgICAtbCAtLWlnbm9yZS1sb2NhbCAgICBJZ25vcmUgbG9jYWwgc2VydmljZXNcbiIKKyIgICAgLXIgLS1yZXNvbHZlICAgICAgICAgUmVzb2x2ZSBzZXJ2aWNlcyBmb3VuZFxuIgorIiAgICAtZiAtLW5vLWZhaWwgICAgICAgICBEb24ndCBmYWlsIGlmIHRoZSBkYWVtb24gaXMgbm90IGF2YWlsYWJsZVxuIgorIiAgICAtcCAtLXBhcnNhYmxlICAgICAgICBPdXRwdXQgaW4gcGFyc2FibGUgZm9ybWF0XG4iCittc2dzdHIgIiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgQWZmaWNoZSBjZXR0ZSBhaWRlXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIEFmZmljaGUgbGEgdmVyc2lvblxuIgorIiAgICAtRCAtLWJyb3dzZS1kb21haW5zICBFeHBsb3JlIGxlcyBkb21haW5lcyBhdSBsaWV1IGRlcyBzZXJ2aWNlc1xuIgorIiAgICAtYSAtLWFsbCAgICAgICAgICAgICBFeHBsb3JlIHRvdXMgbGVzIHNlcnZpY2VzLCBzYW5zIHNlIHNvdWNpZXIgZHUgdHlwZVxuIgorIiAgICAtZCAtLWRvbWFpbj1ET01BSU4gICBMZSBkb21haW5lIMOgIGV4cGxvcmVyXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEFjdGl2ZSBsZSBtb2RlIHZlcmJldXhcbiIKKyIgICAgLXQgLS10ZXJtaW5hdGUgICAgICAgQXJyw6p0IGFwcsOocyBhdm9pciByw6ljdXDDqXLDqSB1bmUgbGlzdGUgcGx1cyBvdSBtb2lucyAiCisiY29tcGzDqHRlXG4iCisiICAgIC1jIC0tY2FjaGUgICAgICAgICAgIEFycsOqdCBhcHLDqHMgYXZvaXIgcsOpY3Vww6lyw6kgdG91dGVzIGxlcyBlbnRyw6llcyBkdSAiCisiY2FjaGVcbiIKKyIgICAgLWwgLS1pZ25vcmUtbG9jYWwgICAgSWdub3JlIGxlcyBzZXJ2aWNlcyBsb2NhdXhcbiIKKyIgICAgLXIgLS1yZXNvbHZlICAgICAgICAgUsOpc291dCBsZXMgc2VydmljZXMgdHJvdXbDqXNcbiIKKyIgICAgLWYgLS1uby1mYWlsICAgICAgICAgTifDqWNob3VlIHBhcyBzaSBsZSBkw6ltb24gbidlc3QgcGFzIGRpc3BvbmlibGVcbiIKKyIgICAgLXAgLS1wYXJzYWJsZSAgICAgICAgU29ydGllIGVuIGZvcm1hdCBhbmFseXNhYmxlXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjY2MAorbXNnaWQgIiIKKyIgICAgLWsgLS1uby1kYi1sb29rdXAgICAgRG9uJ3QgbG9va3VwIHNlcnZpY2UgdHlwZXNcbiIKKyIgICAgLWIgLS1kdW1wLWRiICAgICAgICAgRHVtcCBzZXJ2aWNlIHR5cGUgZGF0YWJhc2VcbiIKK21zZ3N0ciAiIgorIiAgICAtayAtLW5vLWRiLWxvb2t1cCAgICBOZSBjaGVyY2hlIHBhcyBsZXMgdHlwZXMgZGUgc2VydmljZVxuIgorIiAgICAtYiAtLWR1bXAtZGIgICAgICAgICBSw6ljdXDDqHJlIGxhIGJhc2UgZGUgZG9ubsOpZXMgZGVzIHR5cGVzIGRlIHNlcnZpY2VcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NzY2IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG9vIGZldyBhcmd1bWVudHNcbiIKK21zZ3N0ciAiVHJvcCBwZXUgZCdhcmd1bWVudHNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6ODIxIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozNzgKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyNjQgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIHNpbXBsZSBwb2xsIG9iamVjdC5cbiIKK21zZ3N0ciAiw4ljaGVjIGRlIGNyw6lhdGlvbiBkJ3VuIG9iamV0IGQnaW50ZXJyb2dhdGlvbiBzaW1wbGVcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkVzdGFibGlzaGVkIHVuZGVyIG5hbWUgJyVzJ1xuIgorbXNnc3RyICLDiXRhYmxpIHNvdXMgbGUgbm9tIMKrwqAlc8KgwrtcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlcjogJXNcbiIKK21zZ3N0ciAiw4ljaGVjIGQnZW5yZWdpc3RyZW1lbnTigK/CoDogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIk5hbWUgY29sbGlzaW9uLCBwaWNraW5nIG5ldyBuYW1lICclcycuXG4iCittc2dzdHIgIkNvbmZsaXQgZGUgbm9tcywgY2hvaXggZCd1biBub3V2ZWF1IG5vbSDCq8KgJXPCoMK7LlxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgZW50cnkgZ3JvdXA6ICVzXG4iCittc2dzdHIgIsOJY2hlYyBkZSBjcsOpYXRpb24gZGUgbCdlbnRyw6llIGRlIGdyb3VwZeKAr8KgOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgYWRkcmVzczogJXNcbiIKK21zZ3N0ciAiw4ljaGVjIGRlIGwnYWpvdXQgZGUgbCdhZHJlc3NlIOKArzogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gYWRkIHNlcnZpY2U6ICVzXG4iCittc2dzdHIgIsOJY2hlYyBkZSBsJ2Fqb3V0IGRlIHNlcnZpY2XigK/CoDogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE0MAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gYWRkIHN1YnR5cGUgJyVzJzogJXNcbiIKK21zZ3N0ciAiw4ljaGVjIGRlIGwnYWpvdXQgZHUgc291cy10eXBlIMKrwqAlc8KgwrvigK/CoDogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE5MQorIywgYy1mb3JtYXQKK21zZ2lkICJIb3N0IG5hbWUgY29uZmxpY3RcbiIKK21zZ3N0ciAiQ29uZmxpdCBkZSBub21zIGQnaMO0dGVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFtvcHRpb25zXSAlcyA8bmFtZT4gPHR5cGU+IDxwb3J0PiBbPHR4dCAuLi4+XVxuIgorIiVzIFtvcHRpb25zXSAlcyA8aG9zdC1uYW1lPiA8YWRkcmVzcz5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgU2hvdyB2ZXJzaW9uXG4iCisiICAgIC1zIC0tc2VydmljZSAgICAgICAgIFB1Ymxpc2ggc2VydmljZVxuIgorIiAgICAtYSAtLWFkZHJlc3MgICAgICAgICBQdWJsaXNoIGFkZHJlc3NcbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgRW5hYmxlIHZlcmJvc2UgbW9kZVxuIgorIiAgICAtZCAtLWRvbWFpbj1ET01BSU4gICBEb21haW4gdG8gcHVibGlzaCBzZXJ2aWNlIGluXG4iCisiICAgIC1IIC0taG9zdD1ET01BSU4gICAgIEhvc3Qgd2hlcmUgc2VydmljZSByZXNpZGVzXG4iCisiICAgICAgIC0tc3VidHlwZT1TVUJUWVBFIEFuIGFkZGl0aW9uYWwgc3VidHlwZSB0byByZWdpc3RlciB0aGlzIHNlcnZpY2UgIgorIndpdGhcbiIKKyIgICAgLVIgLS1uby1yZXZlcnNlICAgICAgRG8gbm90IHB1Ymxpc2ggcmV2ZXJzZSBlbnRyeSB3aXRoIGFkZHJlc3NcbiIKKyIgICAgLWYgLS1uby1mYWlsICAgICAgICAgRG9uJ3QgZmFpbCBpZiB0aGUgZGFlbW9uIGlzIG5vdCBhdmFpbGFibGVcbiIKK21zZ3N0ciAiIgorIiVzIFtvcHRpb25zXSAlcyA8bm9tPiA8dHlwZT4gPHBvcnQ+IFs8dGV4dGUuLi4+XVxuIgorIiVzIFtvcHRpb25zXSAlcyA8bm9tIGQnaMO0dGU+IDxhZHJlc3NlPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBBZmZpY2hlIGNldHRlIGFpZGVcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgQWZmaWNoZSBsYSB2ZXJzaW9uXG4iCisiICAgIC1zIC0tc2VydmljZSAgICAgICAgIFB1YmxpZSBsZSBzZXJ2aWNlXG4iCisiICAgIC1hIC0tYWRkcmVzcyAgICAgICAgIFB1YmxpZSBsJ2FkcmVzc2VcbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgQWN0aXZlIGxlIG1vZGUgdmVyYmV1eFxuIgorIiAgICAtZCAtLWRvbWFpbj1ET01BSU4gICBEb21haW5lIGRhbnMgbGVxdWVsIHB1YmxpZXIgbGUgc2VydmljZVxuIgorIiAgICAtSCAtLWhvc3Q9RE9NQUlOICAgICBIw7R0ZSBvw7kgbGUgc2VydmljZSByw6lzaWRlXG4iCisiICAgICAgIC0tc3VidHlwZT1TVUJUWVBFIFVuIHNvdXMtdHlwZSBhZGRpdGlvbm5lbCBhdmVjIGxlcXVlbCBlbnJlZ2lzdHJlciBsZSAiCisic2VydmljZVxuIgorIiAgICAtZiAtLW5vLWZhaWwgICAgICAgICBOJ8OpY2hvdWUgcGFzIHNpIGxlIGTDqW1vbiBuJ2VzdCBwYXMgZGlzcG9uaWJsZVxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MzAzIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIG51bWJlciBvZiBhcmd1bWVudHNcbiIKK21zZ3N0ciAiTm9tYnJlIGQnYXJndW1lbnRzIGVycm9uw6lcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjMyOQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcGFyc2UgcG9ydCBudW1iZXI6ICVzXG4iCittc2dzdHIgIsOJY2hlYyBkZSBsJ2FuYWx5c2UgZHUgbnVtw6lybyBkZSBwb3J04oCvwqA6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozNjEgLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI0NgorIywgYy1mb3JtYXQKK21zZ2lkICJObyBjb21tYW5kIHNwZWNpZmllZC5cbiIKK21zZ3N0ciAiQXVjdW5lIGNvbW1hbmRlIHNww6ljaWZpw6llLlxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgaG9zdCBuYW1lICclcyc6ICVzXG4iCittc2dzdHIgIsOJY2hlYyBkZSBsYSByw6lzb2x1dGlvbiBkdSBub20gZCdow7R0ZSDCq8KgJXPCoMK74oCvwqA6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoxMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgYWRkcmVzcyAnJXMnOiAlc1xuIgorbXNnc3RyICLDiWNoZWMgZGUgbGEgcsOpc29sdXRpb24gZGUgbCdhZHJlc3NlIMKrwqAlc8KgwrvigK/CoDogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjE1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgW29wdGlvbnNdICVzIDxob3N0IG5hbWUgLi4uPlxuIgorIiVzIFtvcHRpb25zXSAlcyA8YWRkcmVzcyAuLi4gPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLW4gLS1uYW1lICAgICAgICAgICAgUmVzb2x2ZSBob3N0IG5hbWVcbiIKKyIgICAgLWEgLS1hZGRyZXNzICAgICAgICAgUmVzb2x2ZSBhZGRyZXNzXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKKyIgICAgLTYgICAgICAgICAgICAgICAgICAgTG9va3VwIElQdjYgYWRkcmVzc1xuIgorIiAgICAtNCAgICAgICAgICAgICAgICAgICBMb29rdXAgSVB2NCBhZGRyZXNzXG4iCittc2dzdHIgIiIKKyIlcyBbb3B0aW9uc10gJXMgPG5vbSBkJ2jDtHRlIC4uLj5cbiIKKyIlcyBbb3B0aW9uc10gJXMgPGFkcmVzc2UgLi4uID5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgQWZmaWNoZSBjZXR0ZSBhaWRlXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIEFmZmljaGUgbGEgdmVyc2lvblxuIgorIiAgICAtbiAtLW5hbWUgICAgICAgICAgICBSw6lzb3V0IGxlIG5vbSBkJ2jDtHRlXG4iCisiICAgIC1hIC0tYWRkcmVzcyAgICAgICAgIFLDqXNvdXQgbCdhZHJlc3NlXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEFjdGl2ZSBsZSBtb2RlIHZlcmJldXhcbiIKKyIgICAgLTYgICAgICAgICAgICAgICAgICAgQ2hlcmNoZSBsJ2FkcmVzc2UgSVB2NlxuIgorIiAgICAtNCAgICAgICAgICAgICAgICAgICBDaGVyY2hlIGwnYWRyZXNzZSBJUHY0XG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyOTkgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE4MQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGhvc3QgbmFtZSByZXNvbHZlcjogJXNcbiIKK21zZ3N0ciAiw4ljaGVjIGRlIGxhIGNyw6lhdGlvbiBkdSByw6lzb2x2ZXVyIGRlIG5vbSBkJ2jDtHRl4oCvwqA6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzozMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIGFkZHJlc3MgJyVzJ1xuIgorbXNnc3RyICLDiWNoZWMgZGUgbCdhbmFseXNlIGRlIGwnYWRyZXNzZSDCq8KgJXPCoMK7XG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzozMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBhZGRyZXNzIHJlc29sdmVyOiAlc1xuIgorbXNnc3RyICLDiWNoZWMgZGUgbGEgY3LDqWF0aW9uIGR1IHLDqXNvbHZldXIgZCdhZHJlc3Nl4oCvwqA6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgW29wdGlvbnNdIDxuZXcgaG9zdCBuYW1lPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgRW5hYmxlIHZlcmJvc2UgbW9kZVxuIgorbXNnc3RyICIiCisiJXMgW29wdGlvbnNdIDxub3V2ZWF1IG5vbSBkJ2jDtHRlPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBBZmZpY2hlIGNldHRlIGFpZGVcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgQWZmaWNoZSBsYSB2ZXJzaW9uXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEFjdGl2ZSBsZSBtb2RlIHZlcmJldXhcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMsIGV4cGVjdGluZyBleGFjdGx5IG9uZS5cbiIKK21zZ3N0ciAiTm9tYnJlIGQnYXJndW1lbnRzIGludmFsaWRlLCBpbCBlbiBmYXV0IGV4YWN0ZW1lbnQgdW4uXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSG9zdCBuYW1lIHN1Y2Nlc3NmdWxseSBjaGFuZ2VkIHRvICVzXG4iCittc2dzdHIgIk5vbSBkJ2jDtHRlIGNoYW5nw6kgYXZlYyBzdWNjw6hzIHBvdXIgJXNcbiIKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9wby9nbC5wbyBiL2F2YWhpLTAuNi4zMS9wby9nbC5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWRhMjkzCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL3BvL2dsLnBvCkBAIC0wLDAgKzEsODcwIEBACisjIEdhbGljaWFuIHRyYW5zbGF0aW9uIGZvciBhdmFoaS4KKyMgQ29weXJpZ2h0IChDKSAyMDEwIGF2YWhpJ3MgQ09QWVJJR0hUIEhPTERFUgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgYXZhaGkgcGFja2FnZS4KKyMKKyMgTWlndWVsIEFueG8gQm91emFkYSA8bWJvdXphZGFAZ21haWwuY29tPiwgMjAxMC4KKyMgRnJhbiBEacOpZ3VleiA8ZnJhbmRpZWd1ZXpAdWJ1bnR1LmNvbT4sIDIwMTAuCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBhdmFoaSBtYXN0ZXJcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTEtMDQtMDIgMDM6MjMrMDIwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTAtMDMtMDQgMTE6MjMrMDEwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogRnJhbiBEacOpZ3VleiA8ZnJhbmRpZWd1ZXpAdWJ1bnR1LmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBHYWxpY2lhbiA8cHJveGVjdG9AdHJhc25vLm5ldD5cbiIKKyJMYW5ndWFnZTogZ2xcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiAhPSAxKTtcbiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzAKK21zZ2lkICJPSyIKK21zZ3N0ciAiQWNlcHRhciIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzEKK21zZ2lkICJPcGVyYXRpb24gZmFpbGVkIgorbXNnc3RyICJQcm9kdWNpdXNlIHVuIGZhbGxvIG5hIG9wZXJhY2nDs24iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjMyCittc2dpZCAiQmFkIHN0YXRlIgorbXNnc3RyICJFc3RhZG8gaW5jb3JyZWN0byIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzMKK21zZ2lkICJJbnZhbGlkIGhvc3QgbmFtZSIKK21zZ3N0ciAiTyBub21lIGRvIHNlcnZpZG9yIMOpIGluY29ycmVjdG8iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM0Cittc2dpZCAiSW52YWxpZCBkb21haW4gbmFtZSIKK21zZ3N0ciAiTyBub21lIGRvIGRvbWluaW8gw6kgaW5jb3JyZWN0byIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzUKK21zZ2lkICJObyBzdWl0YWJsZSBuZXR3b3JrIHByb3RvY29sIGF2YWlsYWJsZSIKK21zZ3N0ciAiTm9uIGhhaSBkaXNwb8Oxw61iZWwgbmluZ8O6biBwcm90b2NvbG8gZGUgcmVkZSBhcHJvcGlhZG8iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM2Cittc2dpZCAiSW52YWxpZCBETlMgVFRMIgorbXNnc3RyICJUVEwgZG8gRE5TIGluY29ycmVjdG8iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM3Cittc2dpZCAiUmVzb3VyY2UgcmVjb3JkIGtleSBpcyBwYXR0ZXJuIgorbXNnc3RyICJBIGNoYXZlIGRvIHJleGlzdHJvIGRvIHJlY3Vyc28gw6kgdW4gcGF0csOzbiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzgKK21zZ2lkICJMb2NhbCBuYW1lIGNvbGxpc2lvbiIKK21zZ3N0ciAiSGFpIHVuIGNvbmZsaXRvIGRlIG5vbWVzIGxvY2FpcyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzkKK21zZ2lkICJJbnZhbGlkIHJlY29yZCIKK21zZ3N0ciAiUmV4aXN0cm8gaW5jb3JyZWN0byIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDEKK21zZ2lkICJJbnZhbGlkIHNlcnZpY2UgbmFtZSIKK21zZ3N0ciAiTyBub21lIGRvIHNlcnZpem8gw6kgaW5jb3JyZWN0byIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDIKK21zZ2lkICJJbnZhbGlkIHNlcnZpY2UgdHlwZSIKK21zZ3N0ciAiTyB0aXBvIGRlIHNlcnZpem8gw6kgaW5jb3JyZWN0byIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDMKK21zZ2lkICJJbnZhbGlkIHBvcnQgbnVtYmVyIgorbXNnc3RyICJPIG7Dum1lcm8gZGUgcG9ydG8gw6kgaW5jb3JyZWN0byIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDQKK21zZ2lkICJJbnZhbGlkIHJlY29yZCBrZXkiCittc2dzdHIgIkEgY2hhdmUgZG8gcmV4aXN0cm8gw6kgaW5jb3JyZWN0YSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDUKK21zZ2lkICJJbnZhbGlkIGFkZHJlc3MiCittc2dzdHIgIk8gZW5kZXJlem8gw6kgaW5jb3JyZWN0byIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDYKK21zZ2lkICJUaW1lb3V0IHJlYWNoZWQiCittc2dzdHIgIlJlbWF0b3UgbyB0ZW1wbyBkZSBlc3BlcmEiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQ3Cittc2dpZCAiVG9vIG1hbnkgY2xpZW50cyIKK21zZ3N0ciAiRGVtYXNpYWRvcyBjbGllbnRlcyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDgKK21zZ2lkICJUb28gbWFueSBvYmplY3RzIgorbXNnc3RyICJEZW1hc2lhZG9zIG9ieGVjdG9zIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0OQorbXNnaWQgIlRvbyBtYW55IGVudHJpZXMiCittc2dzdHIgIkRlbWFzaWFkYXMgZW50cmFkYXMiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjUwCittc2dpZCAiT1MgRXJyb3IiCittc2dzdHIgIlByb2RpY3VzZSB1biBlcnJvIGRvIFNPIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1MgorbXNnaWQgIkFjY2VzcyBkZW5pZWQiCittc2dzdHIgIkFjY2VzbyBkZW5lZ2FkbyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTMKK21zZ2lkICJJbnZhbGlkIG9wZXJhdGlvbiIKK21zZ3N0ciAiT3BlcmFjacOzbiBpbmNvcnJlY3RhIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1NAorbXNnaWQgIkFuIHVuZXhwZWN0ZWQgRC1CdXMgZXJyb3Igb2NjdXJlZCIKK21zZ3N0ciAiUHJvZHVjaXVzZSB1biBlcnJvIGluZXNwZXJhZG8gZGUgRC1CVVMiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU1Cittc2dpZCAiRGFlbW9uIGNvbm5lY3Rpb24gZmFpbGVkIgorbXNnc3RyICJQcm9kdWNpdXNlIHVuIGZhbGxvIG5hIGNvbmV4acOzbiBjbyBkYWVtb24iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU2Cittc2dpZCAiTWVtb3J5IGV4aGF1c3RlZCIKK21zZ3N0ciAiTWVtb3JpYSBlc2dvdGFkYSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTcKK21zZ2lkICJUaGUgb2JqZWN0IHBhc3NlZCBpbiB3YXMgbm90IHZhbGlkIgorbXNnc3RyICJPIG9ieGVjdG8gaW5kaWNhZG8gbm9uIMOpIGNvcnJlY3RvIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1OAorbXNnaWQgIkRhZW1vbiBub3QgcnVubmluZyIKK21zZ3N0ciAiTyBkYWVtb24gbm9uIGVzdMOhIGV4ZWN1dMOhbmRvc2UiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU5Cittc2dpZCAiSW52YWxpZCBpbnRlcmZhY2UgaW5kZXgiCittc2dzdHIgIk8gw61uZGljZSBkZSBpbnRlcmZhY2Ugw6kgaW5jb3JyZWN0byIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjAKK21zZ2lkICJJbnZhbGlkIHByb3RvY29sIHNwZWNpZmljYXRpb24iCittc2dzdHIgIkEgZXNwZWNpZmljYWNpw7NuIGRvIHByb3RvY29sbyDDqSBpbmNvcnJlY3RhIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2MQorbXNnaWQgIkludmFsaWQgZmxhZ3MiCittc2dzdHIgIk1hcmNhcyBpbmNvcnJlY3RhcyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjMKK21zZ2lkICJOb3QgZm91bmQiCittc2dzdHIgIk5vbiBlbmNvbnRyYWRvIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2NAorbXNnaWQgIkludmFsaWQgY29uZmlndXJhdGlvbiIKK21zZ3N0ciAiQSBjb25maWd1cmFjacOzbiDDqSBpbmNvcnJlY3RhIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2NQorbXNnaWQgIlZlcnNpb24gbWlzbWF0Y2giCittc2dzdHIgIlZlcnNpw7NucyBub24gY29pbmNpZGVudGVzIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2NgorbXNnaWQgIkludmFsaWQgc2VydmljZSBzdWJ0eXBlIgorbXNnc3RyICJPIHN1YnRpcG8gZGUgc2Vydml6byDDqSBpbmNvcnJlY3RvIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2NworbXNnaWQgIkludmFsaWQgcGFja2V0IgorbXNnc3RyICJPIHBhcXVldGUgw6kgaW5jb3JyZWN0byIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjgKK21zZ2lkICJJbnZhbGlkIEROUyByZXR1cm4gY29kZSIKK21zZ3N0ciAiTyBjw7NkaWdvIGRlIHJldG9ybm8gZG8gRE5TIMOpIGluY29ycmVjdG8iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY5Cittc2dpZCAiRE5TIGZhaWx1cmU6IEZPUk1FUlIiCittc2dzdHIgIlByb2R1Y2l1c2UgdW4gZXJybyBubyBETlM6IEZPUk1FUlIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjcwCittc2dpZCAiRE5TIGZhaWx1cmU6IFNFUlZGQUlMIgorbXNnc3RyICJQcm9kdWNpdXNlIHVuIGVycm8gbm8gRE5TOiBTRVJWRkFJTCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzEKK21zZ2lkICJETlMgZmFpbHVyZTogTlhET01BSU4iCittc2dzdHIgIlByb2R1Y2l1c2UgdW4gZXJybyBubyBETlM6IE5YRE9NQUlOIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3MgorbXNnaWQgIkROUyBmYWlsdXJlOiBOT1RJTVAiCittc2dzdHIgIlByb2R1Y2l1c2UgdW4gZXJybyBubyBETlM6IE5PVElNUCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzQKK21zZ2lkICJETlMgZmFpbHVyZTogUkVGVVNFRCIKK21zZ3N0ciAiUHJvZHVjaXVzZSB1biBlcnJvIG5vIEROUzogUkVGVVNFRCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzUKK21zZ2lkICJETlMgZmFpbHVyZTogWVhET01BSU4iCittc2dzdHIgIlByb2R1Y2l1c2UgdW4gZXJybyBubyBETlM6IFlYRE9NQUlOIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3NgorbXNnaWQgIkROUyBmYWlsdXJlOiBZWFJSU0VUIgorbXNnc3RyICJQcm9kdWNpdXNlIHVuIGVycm8gbm8gRE5TOiBZWFJSU0VUIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3NworbXNnaWQgIkROUyBmYWlsdXJlOiBOWFJSU0VUIgorbXNnc3RyICJQcm9kdWNpdXNlIHVuIGVycm8gbm8gRE5TOiBOWFJSU0VUIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3OAorbXNnaWQgIkROUyBmYWlsdXJlOiBOT1RBVVRIIgorbXNnc3RyICJQcm9kdWNpdXNlIHVuIGVycm8gbm8gRE5TOiBOT1RBVVRIIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3OQorbXNnaWQgIkROUyBmYWlsdXJlOiBOT1RaT05FIgorbXNnc3RyICJQcm9kdWNpdXNlIHVuIGVycm8gbm8gRE5TOiBOT1RaT05FIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4MAorbXNnaWQgIkludmFsaWQgUkRBVEEiCittc2dzdHIgIlJEQVRBIGluY29ycmVjdG8iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjgxCittc2dpZCAiSW52YWxpZCBETlMgdHlwZSIKK21zZ3N0ciAiVGlwbyBkZSBETlMgaW5jb3JyZWN0byIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODIKK21zZ2lkICJJbnZhbGlkIEROUyBjbGFzcyIKK21zZ3N0ciAiQ2xhc2UgZGUgRE5TIGluY29ycmVjdGEiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjgzCittc2dpZCAiTm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiTm9uIGFkbWl0aWRvIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4NQorbXNnaWQgIk5vdCBwZXJtaXR0ZWQiCittc2dzdHIgIk5vbiBwZXJtaXRpZG8iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjg2Cittc2dpZCAiSW52YWxpZCBhcmd1bWVudCIKK21zZ3N0ciAiQXJndW1lbnRvIGluY29ycmVjdG8iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjg3Cittc2dpZCAiSXMgZW1wdHkiCittc2dzdHIgIkVzdMOhIGJhbGVpcm8iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjg4Cittc2dpZCAiVGhlIHJlcXVlc3RlZCBvcGVyYXRpb24gaXMgaW52YWxpZCBiZWNhdXNlIHJlZHVuZGFudCIKK21zZ3N0ciAiQSBvcGVyYWNpw7NuIHNvbGljaXRhZGEgbm9uIMOpIGNvcnJlY3RhIHBvciBzZXIgcmVkdW5kYW50ZSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6OTQKK21zZ2lkICJJbnZhbGlkIEVycm9yIENvZGUiCittc2dzdHIgIkPDs2RpZ28gZG8gZXJybyBpbmNvcnJlY3RvIgorCisjOiAuLi9hdmFoaS1kaXNjb3Zlci1zdGFuZGFsb25lL2F2YWhpLWRpc2NvdmVyLnVpLmg6MQorIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5Ojc2Cittc2dpZCAiPGk+Tm8gc2VydmljZSBjdXJyZW50bHkgc2VsZWN0ZWQuPC9pPiIKK21zZ3N0ciAiPGk+Tm9uIGhhaSBuaW5nw7puIHNlcnZpem8gc2VsZWNjaW9uYWRvIGFjdHVhbG1lbnRlLjwvaT4iCisKKyM6IC4uL2F2YWhpLWRpc2NvdmVyLXN0YW5kYWxvbmUvYXZhaGktZGlzY292ZXIudWkuaDoyCittc2dpZCAiQXZhaGkgRGlzY292ZXJ5IgorbXNnc3RyICJEZXNjdWJyaW1lbnRvIGRlIEF2YWhpIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIuZGVza3RvcC5pbi5pbi5oOjEKK21zZ2lkICJBdmFoaSBaZXJvY29uZiBCcm93c2VyIgorbXNnc3RyICJOYXZlZ2Fkb3IgWmVyb2NvbmYgZGUgQXZhaGkiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5kZXNrdG9wLmluLmluLmg6MgorbXNnaWQgIkJyb3dzZSBmb3IgWmVyb2NvbmYgc2VydmljZXMgYXZhaWxhYmxlIG9uIHlvdXIgbmV0d29yayIKK21zZ3N0ciAiTmF2ZWdhciBuYSBidXNjYSBkZSBzZXJ2aXpvcyBaZXJvY29uZiBkaXNwb8Oxw61iZWlzIG5hIHPDumEgcmVkZSIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIyNAorbXNnaWQgIlRYVCIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI2CisjLCBmdXp6eQorbXNnaWQgIlRYVCBEYXRhOiIKK21zZ3N0ciAiRGF0b3MgVFhUIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI2CisjLCBmdXp6eQorbXNnaWQgImVtcHR5IgorbXNnc3RyICJFc3TDoSBiYWxlaXJvIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI4CisjLCBmdXp6eQorbXNnaWQgIlNlcnZpY2UgVHlwZToiCittc2dzdHIgIlRpcG8gZGUgc2Vydml6byIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIyOQorIywgZnV6enkKK21zZ2lkICJTZXJ2aWNlIE5hbWU6IgorbXNnc3RyICJOb21lIGRvIHNlcnZpem8iCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMzAKKyMsIGZ1enp5Cittc2dpZCAiRG9tYWluIE5hbWU6IgorbXNnc3RyICJEb21pbmlvIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjMxCittc2dpZCAiSW50ZXJmYWNlOiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjMyCisjLCBmdXp6eQorbXNnaWQgIkFkZHJlc3M6IgorbXNnc3RyICJFbmRlcmV6byIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxODUKK21zZ2lkICJCcm93c2UgU2VydmljZSBUeXBlcyIKK21zZ3N0ciAiTmF2ZWdhciBwb2xvcyB0aXBvcyBkZSBzZXJ2aXpvIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE4NQorbXNnaWQgIkEgTlVMTCB0ZXJtaW5hdGVkIGxpc3Qgb2Ygc2VydmljZSB0eXBlcyB0byBicm93c2UgZm9yIgorbXNnc3RyICJVbmhhIGxpc3RhIHJlbWF0YWRhIGVuIE5VTEwgZGUgdGlwb3MgZGUgc2Vydml6byBwb2xvcyBxdWUgbmF2ZWdhciIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxOTAKK21zZ2lkICJEb21haW4iCittc2dzdHIgIkRvbWluaW8iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTkwCittc2dpZCAiVGhlIGRvbWFpbiB0byBicm93c2UgaW4sIG9yIE5VTEwgZm9yIHRoZSBkZWZhdWx0IGRvbWFpbiIKK21zZ3N0ciAiIgorIk8gZG9taW5pbyBwb2xvIHF1ZSBuYXZlZ2FyLCBvdSBOVUxMIHBhcmEgZW1wcmVnYXIgbyBkb21pbmlvIHByZWRlZmluaWRvIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE5NgorbXNnaWQgIlNlcnZpY2UgVHlwZSIKK21zZ3N0ciAiVGlwbyBkZSBzZXJ2aXpvIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE5NgorbXNnaWQgIlRoZSBzZXJ2aWNlIHR5cGUgb2YgdGhlIHNlbGVjdGVkIHNlcnZpY2UiCittc2dzdHIgIk8gdGlwbyBkZSBzZXJ2aXpvIGRvIHNlcnZpem8gc2VsZWNjaW9uYWRvIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIwMiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjEwMjMKK21zZ2lkICJTZXJ2aWNlIE5hbWUiCittc2dzdHIgIk5vbWUgZG8gc2Vydml6byIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMDIKK21zZ2lkICJUaGUgc2VydmljZSBuYW1lIG9mIHRoZSBzZWxlY3RlZCBzZXJ2aWNlIgorbXNnc3RyICJPIG5vbWUgZGUgc2Vydml6byBkbyBzZXJ2aXpvIHNlbGVjY2lvbmFkbyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMDgKK21zZ2lkICJBZGRyZXNzIgorbXNnc3RyICJFbmRlcmV6byIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMDgKK21zZ2lkICJUaGUgYWRkcmVzcyBvZiB0aGUgcmVzb2x2ZWQgc2VydmljZSIKK21zZ3N0ciAiTyBlbmRlcmV6byBkbyBzZXJ2aXpvIGxvY2FsaXphZG8iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjEzCittc2dpZCAiUG9ydCIKK21zZ3N0ciAiUG9ydG8iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjEzCittc2dpZCAiVGhlIElQIHBvcnQgbnVtYmVyIG9mIHRoZSByZXNvbHZlZCBzZXJ2aWNlIgorbXNnc3RyICJPIG7Dum1lcm8gZGUgcG9ydG8gSVAgZG8gc2Vydml6byBsb2NhbGl6YWRvIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIxOQorbXNnaWQgIkhvc3QgTmFtZSIKK21zZ3N0ciAiTm9tZSBkbyBzZXJ2aWRvciIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMTkKK21zZ2lkICJUaGUgaG9zdCBuYW1lIG9mIHRoZSByZXNvbHZlZCBzZXJ2aWNlIgorbXNnc3RyICJPIG5vbWUgZG8gc2Vydmlkb3IgZG8gc2Vydml6byBsb2NhbGl6YWRvIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIyNQorbXNnaWQgIlRYVCBEYXRhIgorbXNnc3RyICJEYXRvcyBUWFQiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjI1Cittc2dpZCAiVGhlIFRYVCBkYXRhIG9mIHRoZSByZXNvbHZlZCBzZXJ2aWNlIgorbXNnc3RyICJPcyBkYXRvcyBUWFQgZG8gc2Vydml6byBsb2NhbGl6YWRvIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIzMAorIywgZnV6enkKK21zZ2lkICJSZXNvbHZlIFNlcnZpY2UiCittc2dzdHIgIlNlcnZpem8gZGUgbG9jYWxpemFjacOzbiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMzAKK21zZ2lkICJSZXNvbHZlIHRoZSBzZWxlY3RlZCBzZXJ2aWNlIGF1dG9tYXRpY2FsbHkgYmVmb3JlIHJldHVybmluZyIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIzNgorIywgZnV6enkKK21zZ2lkICJSZXNvbHZlIFNlcnZpY2UgSG9zdCBOYW1lIgorbXNnc3RyICJOb21lIGRvIHNlcnZpZG9yIGRvIHNlcnZpem8gZGUgbG9jYWxpemFjacOzbiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMzYKK21zZ2lkICIiCisiUmVzb2x2ZSB0aGUgaG9zdCBuYW1lIG9mIHRoZSBzZWxlY3RlZCBzZXJ2aWNlIGF1dG9tYXRpY2FsbHkgYmVmb3JlIHJldHVybmluZyIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjI0MgorbXNnaWQgIkFkZHJlc3MgZmFtaWx5IgorbXNnc3RyICJGYW1pbGlhIGRlIGVuZGVyZXpvcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyNDIKK21zZ2lkICJUaGUgYWRkcmVzcyBmYW1pbHkgZm9yIGhvc3QgbmFtZSByZXNvbHV0aW9uIgorbXNnc3RyICJBIGZhbWlsaWEgZGUgZW5kZXJlem9zIHBhcmEgYSBsb2NhbGl6YWNpw7NuIGRlIG5vbWVzIGRlIHNlcnZpZG9yIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjMyNgorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFoaSBjbGllbnQgZmFpbHVyZTogJXMiCittc2dzdHIgIlByb2R1Y2l1c2UgdW4gZXJybyBubyBjbGllbnRlIEF2YWhpOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzozODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaGkgcmVzb2x2ZXIgZmFpbHVyZTogJXMiCittc2dzdHIgIlByb2R1Y2l1c2UgdW4gZXJybyBubyBsb2NhbGl6YWRvciBBdmFoaTogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyb3dzaW5nIGZvciBzZXJ2aWNlIHR5cGUgJXMgaW4gZG9tYWluICVzIGZhaWxlZDogJXMiCittc2dzdHIgIiIKKyJQcm9kdWNpdXNlIHVuIGVycm8gYW8gbmF2ZWdhciBwb2xvIHRpcG8gZGUgc2Vydml6byAlcyBubyBkb21pbmlvICVzOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo1MTkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTY4CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoxNjkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTc4CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoxNzkKK21zZ2lkICJuL2EiCittc2dzdHIgIm4vZCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo2NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaGkgZG9tYWluIGJyb3dzZXIgZmFpbHVyZTogJXMiCittc2dzdHIgIlByb2R1Y2l1c2UgdW4gZXJybyBubyBuYXZlZ2Fkb3IgZGUgZG9taW5pb3MgQXZhaGk6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjY4NAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVhZCBBdmFoaSBkb21haW46ICVzIgorbXNnc3RyICJOb24gZm9pIHBvc8OtYmVsIGxlciBvIGRvbWluaW8gZGUgQXZhaGk6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjcwNgorbXNnaWQgIkJyb3dzZSBzZXJ2aWNlIHR5cGUgbGlzdCBpcyBlbXB0eSEiCittc2dzdHIgIkEgbGlzdGEgZGUgbmF2ZWdhY2nDs24gcG9yIHRpcG8gZGUgc2Vydml6byBlc3TDoSBiYWxlaXJhISIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo3MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNvbm5lY3QgdG8gQXZhaGkgc2VydmVyOiAlcyIKK21zZ3N0ciAiTm9uIGZvaSBwb3PDrWJlbCBjb25lY3RhciBjbyBzZXJ2aWRvciBBdmFoaTogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NzM1Cittc2dpZCAiQnJvd3NpbmcgZm9yIHNlcnZpY2VzIG9uIDxiPmxvY2FsIG5ldHdvcms8L2I+OiIKK21zZ3N0ciAiTmF2ZWdhbmRvIHBvbG9zIHNlcnZpem9zIG5hIDxiPnJlZGUgbG9jYWw8L2I+OiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo3MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJvd3NpbmcgZm9yIHNlcnZpY2VzIGluIGRvbWFpbiA8Yj4lczwvYj46IgorbXNnc3RyICJOYXZlZ2FuZG8gcG9sb3Mgc2Vydml6b3Mgbm8gZG9taW5pbyA8Yj4lczwvYj46IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjc3MworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGJyb3dzZXIgZm9yICVzOiAlcyIKK21zZ3N0ciAiUHJvZHVjaXVzZSB1biBlcnJvIGFvIGNyZWFyIHVuIG5hdmVnYWRvciBwYXJhICVzOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo5MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSByZXNvbHZlciBmb3IgJXMgb2YgdHlwZSAlcyBpbiBkb21haW4gJXM6ICVzIgorbXNnc3RyICIiCisiUHJvZHVjaXVzZSB1biBlcnJvIGFvIGNyZWFyIHVuIGxvY2FsaXphZG9yIHBhcmEgJXMgZG8gdGlwbyAlcyBubyBkb21pbmlvICVzOiAiCisiJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6OTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgZG9tYWluIGJyb3dzZXI6ICVzIgorbXNnc3RyICJQcm9kdWNpdXNlIHVuIGVycm8gYW8gY3JlYXIgdW4gbmF2ZWdhZG9yIGRlIGRvbWluaW9zOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo5ODkKK21zZ2lkICJDaGFuZ2UgZG9tYWluIgorbXNnc3RyICJDYW1iaWFyIG8gZG9taW5pbyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMDMxIC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTE2MgorbXNnaWQgIkJyb3dzaW5nLi4uIgorbXNnc3RyICJOYXZlZ2FuZG8uLi4iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTEyMAorbXNnaWQgIkluaXRpYWxpemluZy4uLiIKK21zZ3N0ciAiSW5pY2lhbGl6YW5kby4uLiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTQ0Cittc2dpZCAiTG9jYXRpb24iCittc2dzdHIgIkxvY2FsaXphY2nDs24iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTE0OSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NTMKK21zZ2lkICJOYW1lIgorbXNnc3RyICJOb21lIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNTQgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTUzCittc2dpZCAiVHlwZSIKK21zZ3N0ciAiVGlwbyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTY2Cittc2dpZCAiX0RvbWFpbi4uLiIKK21zZ3N0ciAiX0RvbWluaW8uLi4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzo1NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgW29wdGlvbnNdXG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1zIC0tc3NoICAgICAgICAgICAgIEJyb3dzZSBTU0ggc2VydmVyc1xuIgorIiAgICAtdiAtLXZuYyAgICAgICAgICAgICBCcm93c2UgVk5DIHNlcnZlcnNcbiIKKyIgICAgLVMgLS1zaGVsbCAgICAgICAgICAgQnJvd3NlIGJvdGggU1NIIGFuZCBWTkNcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgVGhlIGRvbWFpbiB0byBicm93c2UgaW5cbiIKK21zZ3N0ciAiIgorIiVzIFtvcGNpw7Nuc11cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgTW9zdHJhIGVzdGEgYXh1ZGFcbiIKKyIgICAgLXMgLS1zc2ggICAgICAgICAgICAgTmF2ZWdhciBwb2xvcyBzZXJ2aWRvcmVzIFNTSFxuIgorIiAgICAtdiAtLXZuYyAgICAgICAgICAgICBOYXZlZ2FyIHBvbG9zIHNlcnZpZG9yZXMgVk5DXG4iCisiICAgIC1TIC0tc2hlbGwgICAgICAgICAgIE5hdmVnYXIgcG9yIGFtYm9zLCBTU0ggZSBWTkNcbiIKKyIgICAgLWQgLS1kb21haW49RE9NSU5JTyAgTyBkb21pbmlvIHBvbG8gcXVlIG5hdmVnYXJcbiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjEwMSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo3NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG9vIG1hbnkgYXJndW1lbnRzXG4iCittc2dzdHIgIkRlbWFzaWFkb3MgYXJndW1lbnRvc1xuIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTQ5Cittc2dpZCAiQ2hvb3NlIFNoZWxsIFNlcnZlciIKK21zZ3N0ciAiU2VsZWNjaW9uZSBvIHNlcnZpZG9yIGRlIGludMOpcnByZXRlIGRlIG9yZGVzIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTUxCittc2dpZCAiRGVza3RvcCIKK21zZ3N0ciAiRXNjcml0b3JpbyIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE1MgorbXNnaWQgIlRlcm1pbmFsIgorbXNnc3RyICJUZXJtaW5hbCIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE1NgorbXNnaWQgIkNob29zZSBWTkMgc2VydmVyIgorbXNnc3RyICJFc2NvbGxhIG8gc2Vydmlkb3IgVk5DIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTYxCittc2dpZCAiQ2hvb3NlIFNTSCBzZXJ2ZXIiCittc2dzdHIgIkVzY29sbGEgbyBzZXJ2aWRvciBTU0giCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29ubmVjdGluZyB0byAnJXMnIC4uLlxuIgorbXNnc3RyICJDb25lY3RhbmRvIGEgJyVzJyAuLi5cbiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjI0MAorIywgYy1mb3JtYXQKK21zZ2lkICJleGVjbHAoKSBmYWlsZWQ6ICVzXG4iCittc2dzdHIgIlByb2R1Y2l1c2UgdW4gZXJybyBjb24gZXhlY2xwKCk6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FuY2VsZWQuXG4iCittc2dzdHIgIkNhbmNlbGFkby5cbiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5kZXNrdG9wLmluLmluLmg6MQorbXNnaWQgIkF2YWhpIFNTSCBTZXJ2ZXIgQnJvd3NlciIKK21zZ3N0ciAiTmF2ZWdhZG9yIGRlIHNlcnZpZG9yZXMgU1NIIGRlIEF2YWhpIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmRlc2t0b3AuaW4uaW4uaDoyCittc2dpZCAiQnJvd3NlIGZvciBaZXJvY29uZi1lbmFibGVkIFNTSCBTZXJ2ZXJzIgorbXNnc3RyICJOYXZlZ2FyIHBvciBzZXJ2aWRvcmVzIFNTSCBjb24gWmVyb2NvbmYgYWN0aXZhZG8iCisKKyM6IC4uL2F2YWhpLXVpL2J2bmMuZGVza3RvcC5pbi5pbi5oOjEKK21zZ2lkICJBdmFoaSBWTkMgU2VydmVyIEJyb3dzZXIiCittc2dzdHIgIk5hdmVnYWRvciBkZSBzZXJ2aWRvcmVzIFZOQyBkZSBBdmFoaSIKKworIzogLi4vYXZhaGktdWkvYnZuYy5kZXNrdG9wLmluLmluLmg6MgorbXNnaWQgIkJyb3dzZSBmb3IgWmVyb2NvbmYtZW5hYmxlZCBWTkMgU2VydmVycyIKK21zZ3N0ciAiTmF2ZWdhciBwb3Igc2Vydmlkb3JlcyBWTkMgY29uIFplcm9jb25mIGFjdGl2YWRvIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoxMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiOiBBbGwgZm9yIG5vd1xuIgorbXNnc3RyICI6IFRvZG8gcG9yIGFnb3JhXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjExOAorIywgYy1mb3JtYXQKK21zZ2lkICI6IENhY2hlIGV4aGF1c3RlZFxuIgorbXNnc3RyICI6IENhY2hlIGVzZ290YWRhXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjIzOSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgc2VydmljZSAnJXMnIG9mIHR5cGUgJyVzJyBpbiBkb21haW4gJyVzJzogJXNcbiIKK21zZ3N0ciAiIgorIlByb2R1Y2l1c2UgdW4gZXJybyBhbyByZXNvbHZlciBvIHNlcnZpem8gwqslc8K7IGRvIHRpcG8gwqslc8K7IG5vIGRvbWluaW8gwqslc8K7OiAiCisiJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MzQwCisjLCBjLWZvcm1hdAorbXNnaWQgInNlcnZpY2VfYnJvd3NlciBmYWlsZWQ6ICVzXG4iCittc2dzdHIgIlByb2R1Y2l1c2UgdW4gZXJybyBjb24gc2VydmljZV9icm93c2VyOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzozNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXZhaGlfc2VydmljZV9icm93c2VyX25ldygpIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAiUHJvZHVjaXVzZSB1biBlcnJvIGNvbiBhdmFoaV9zZXJ2aWNlX2Jyb3dzZXJfbmV3KCk6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjQxNAorIywgYy1mb3JtYXQKK21zZ2lkICJzZXJ2aWNlX3R5cGVfYnJvd3NlciBmYWlsZWQ6ICVzXG4iCittc2dzdHIgIlByb2R1Y2l1c2UgdW4gZXJybyBjb24gc2VydmljZV90eXBlX2Jyb3dzZXI6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjQ0NAorIywgYy1mb3JtYXQKK21zZ2lkICJhdmFoaV9zZXJ2aWNlX3R5cGVfYnJvd3Nlcl9uZXcoKSBmYWlsZWQ6ICVzXG4iCittc2dzdHIgIlByb2R1Y2l1c2UgdW4gZXJybyBjb24gYXZhaGlfc2VydmljZV90eXBlX2Jyb3dzZXJfbmV3KCk6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjUxOQorIywgYy1mb3JtYXQKK21zZ2lkICJhdmFoaV9kb21haW5fYnJvd3Nlcl9uZXcoKSBmYWlsZWQ6ICVzXG4iCittc2dzdHIgIlByb2R1Y2l1c2UgdW4gZXJybyBjb24gYXZhaGlfZG9tYWluX2Jyb3dzZXJfbmV3KCk6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjUzNSAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6Mzk0CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjgwIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IHZlcnNpb24gc3RyaW5nOiAlc1xuIgorbXNnc3RyICJQcm9kdWNpdXNlIHVuIGVycm8gYW8gY29uc3VsdGFyIGEgY2FkZWEgZGUgdmVyc2nDs246ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU0MCAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6Mzk5CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6Mjg1IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxNzMKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IGhvc3QgbmFtZTogJXNcbiIKK21zZ3N0ciAiUHJvZHVjaXVzZSB1biBlcnJvIGFvIGNvbnN1bHRhciBvIG5vbWUgZG8gc2Vydmlkb3I6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU0NCAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6NDAzCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6Mjg5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VydmVyIHZlcnNpb246ICVzOyBIb3N0IG5hbWU6ICVzXG4iCittc2dzdHIgIlZlcnNpw7NuIGRvIHNlcnZpZG9yOiAlczsgTm9tZSBkbyBzZXJ2aWRvcjogJXNcbiIKKworIy4gVHJhbnNsYXRvcnM6IFRoaXMgaXMgYSBjb2x1bW4gaGVhZGluZyB3aXRoIGFiYnJldmlhdGlvbnMgZm9yCisjLiAqICAgRXZlbnQgKCsvLSksIE5ldHdvcmsgSW50ZXJmYWNlLCBQcm90b2NvbCAoSVB2NC92NiksIERvbWFpbgorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUgSWZjZSBQcm90IERvbWFpblxuIgorbXNnc3RyICJEb21pbmlvIEUgSWZjZSBQcm90XG4iCisKKyMuIFRyYW5zbGF0b3JzOiBUaGlzIGlzIGEgY29sdW1uIGhlYWRpbmcgd2l0aCBhYmJyZXZpYXRpb25zIGZvcgorIy4gKiAgIEV2ZW50ICgrLy0pLCBOZXR3b3JrIEludGVyZmFjZSwgUHJvdG9jb2wgKElQdjQvdjYpLCBEb21haW4KKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU1MworIywgYy1mb3JtYXQKK21zZ2lkICJFIElmY2UgUHJvdCAlLSpzICUtMjBzIERvbWFpblxuIgorbXNnc3RyICJEb21pbmlvIEUgSWZjZSBQcm90ICUtKnMgJS0yMHMgXG4iCisKKyMuIFdlIGhhdmUgYmVlbiBkaXNjb25uZWN0ZWQsIHNvIGxldCByZWNvbm5lY3QKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU4NSAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkRpc2Nvbm5lY3RlZCwgcmVjb25uZWN0aW5nIC4uLlxuIgorbXNnc3RyICJEZXNjb25lY3RhZG8sIHJlY29uZWN0YW5kby4uLlxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1OTkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6ODI5CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTcwIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozODYKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyNzIgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE2MAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGNsaWVudCBvYmplY3Q6ICVzXG4iCittc2dzdHIgIlByb2R1Y2l1c2UgdW4gZXJybyBhbyBjcmVhciBvIG9ieGVjdG8gY2xpZW50ZTogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NjA0IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxNzUKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoxNDMgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNsaWVudCBmYWlsdXJlLCBleGl0aW5nOiAlc1xuIgorbXNnc3RyICJQcm9kdWNpdXNlIHVuIGVycm8gbm8gY2xpZW50ZSwgc2HDrW5kbzogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NjIzIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoyMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FpdGluZyBmb3IgZGFlbW9uIC4uLlxuIgorbXNnc3RyICJFc3BlcmFuZG8gcG9sbyBkYWVtb24gLi4uXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjY0NworbXNnaWQgIiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgU2hvdyB2ZXJzaW9uXG4iCisiICAgIC1EIC0tYnJvd3NlLWRvbWFpbnMgIEJyb3dzZSBmb3IgYnJvd3NpbmcgZG9tYWlucyBpbnN0ZWFkIG9mIHNlcnZpY2VzXG4iCisiICAgIC1hIC0tYWxsICAgICAgICAgICAgIFNob3cgYWxsIHNlcnZpY2VzLCByZWdhcmRsZXNzIG9mIHRoZSB0eXBlXG4iCisiICAgIC1kIC0tZG9tYWluPURPTUFJTiAgIFRoZSBkb21haW4gdG8gYnJvd3NlIGluXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKKyIgICAgLXQgLS10ZXJtaW5hdGUgICAgICAgVGVybWluYXRlIGFmdGVyIGR1bXBpbmcgYSBtb3JlIG9yIGxlc3MgY29tcGxldGUgIgorImxpc3RcbiIKKyIgICAgLWMgLS1jYWNoZSAgICAgICAgICAgVGVybWluYXRlIGFmdGVyIGR1bXBpbmcgYWxsIGVudHJpZXMgZnJvbSB0aGUgY2FjaGVcbiIKKyIgICAgLWwgLS1pZ25vcmUtbG9jYWwgICAgSWdub3JlIGxvY2FsIHNlcnZpY2VzXG4iCisiICAgIC1yIC0tcmVzb2x2ZSAgICAgICAgIFJlc29sdmUgc2VydmljZXMgZm91bmRcbiIKKyIgICAgLWYgLS1uby1mYWlsICAgICAgICAgRG9uJ3QgZmFpbCBpZiB0aGUgZGFlbW9uIGlzIG5vdCBhdmFpbGFibGVcbiIKKyIgICAgLXAgLS1wYXJzYWJsZSAgICAgICAgT3V0cHV0IGluIHBhcnNhYmxlIGZvcm1hdFxuIgorbXNnc3RyICIiCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIE1vc3RyYSBlc3RhIGF4dWRhXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIE1vc3RyYSBhIHZlcnNpw7NuXG4iCisiICAgIC1EIC0tYnJvd3NlLWRvbWFpbnMgIE5hdmVnYXIgcG9sb3MgZG9taW5pb3MgZGUgbmF2ZWdhY2nDs24gbm8gY2FudG8gZGUgIgorInBvbG9zIHNlcnZpem9zXG4iCisiICAgIC1hIC0tYWxsICAgICAgICAgICAgIE1vc3RyYSB0b2RvcyBvcyBzZXJ2aXpvcywgc2VuIGltcG9ydGFyIG8gdGlwb1xuIgorIiAgICAtZCAtLWRvbWFpbj1ET01JTklPICAgTyBkb21pbmlvIHBvbG8gcXVlIG5hdmVnYXJcbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgQWN0aXZhciBvIG1vZG8gZGV0YWxsYWRvXG4iCisiICAgIC10IC0tdGVybWluYXRlICAgICAgIFJlbWF0YXIgZGVzcG9pcyBkZSBlbnZvcmNhciB1bmhhIGxpc3RhIG3DoWlzIG91ICIKKyJtZW5vcyBjb21wbGV0YVxuIgorIiAgICAtYyAtLWNhY2hlICAgICAgICAgICBSZW1hdGFyIGRlc3BvaXMgZGUgZW52b3JjYXIgdG9kYXMgYXMgZW50cmFkYXMgZGVuZGUgIgorImEgY2FjaMOpXG4iCisiICAgIC1sIC0taWdub3JlLWxvY2FsICAgIElnbm9yYXIgc2Vydml6b3MgbG9jYWlzXG4iCisiICAgIC1yIC0tcmVzb2x2ZSAgICAgICAgIExvY2FsaXphciBvcyBzZXJ2aXpvcyBlbmNvbnRyYWRvc1xuIgorIiAgICAtZiAtLW5vLWZhaWwgICAgICAgICBOb24gcHJvZHVjaXIgZXJybyBzZSBvIGRhZW1vbiBub24gZXN0w6EgZGlzcG/DscOtYmVsXG4iCisiICAgIC1wIC0tcGFyc2FibGUgICAgICAgIFByb2R1Y2lyIHVuaGEgc2HDrWRhIGVuIGZvcm1hdG8gcHJvY2Vzw6FiZWxcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NjYwCittc2dpZCAiIgorIiAgICAtayAtLW5vLWRiLWxvb2t1cCAgICBEb24ndCBsb29rdXAgc2VydmljZSB0eXBlc1xuIgorIiAgICAtYiAtLWR1bXAtZGIgICAgICAgICBEdW1wIHNlcnZpY2UgdHlwZSBkYXRhYmFzZVxuIgorbXNnc3RyICIiCisiICAgIC1rIC0tbm8tZGItbG9va3VwICAgIE5vbiBidXNjYXIgdGlwb3MgZGUgc2Vydml6b1xuIgorIiAgICAtYiAtLWR1bXAtZGIgICAgICAgICBFbnZvcmNhciBhIGJhc2UgZGUgZGF0b3MgZGUgdGlwb3MgZGUgc2Vydml6b1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo3NjYgLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjIxOQorIywgYy1mb3JtYXQKK21zZ2lkICJUb28gZmV3IGFyZ3VtZW50c1xuIgorbXNnc3RyICJQb3Vjb3MgYXJndW1lbnRvc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo4MjEgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjM3OAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI2NCAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgc2ltcGxlIHBvbGwgb2JqZWN0LlxuIgorbXNnc3RyICJQcm9kdWNpdXNlIHVuIGVycm8gYW8gY3JlYXIgdW4gb2J4ZWN0byBzaW1wbGUgZGUgY29uc3VsdGEuXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo3NgorIywgYy1mb3JtYXQKK21zZ2lkICJFc3RhYmxpc2hlZCB1bmRlciBuYW1lICclcydcbiIKK21zZ3N0ciAiRXN0YWJlbGVjaWRvIGJhaXhvIG8gbm9tZSAnJXMnXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo4MQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXI6ICVzXG4iCittc2dzdHIgIlByb2R1Y2l1c2UgdW4gZXJybyBhbyByZXhpc3RyYXI6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICJOYW1lIGNvbGxpc2lvbiwgcGlja2luZyBuZXcgbmFtZSAnJXMnLlxuIgorbXNnc3RyICJDb25mbGl0byBkZSBub21lcywgZXNjb2xsZW5kbyBvIG5vdm8gbm9tZSAnJXMnLlxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgZW50cnkgZ3JvdXA6ICVzXG4iCittc2dzdHIgIlByb2R1Y2l1c2UgdW4gZXJybyBhbyBjcmVhciBvIGdydXBvIGRlIGVudHJhZGFzOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgYWRkcmVzczogJXNcbiIKK21zZ3N0ciAiUHJvZHVjaXVzZSB1biBlcnJvIGFvIGVuZ2FkaXIgbyBlbmRlcmV6bzogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gYWRkIHNlcnZpY2U6ICVzXG4iCittc2dzdHIgIlByb2R1Y2l1c2UgdW4gZXJybyBhbyBlbmdhZGlyIG8gc2Vydml6bzogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE0MAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gYWRkIHN1YnR5cGUgJyVzJzogJXNcbiIKK21zZ3N0ciAiUHJvZHVjaXVzZSB1biBlcnJvIGFvIGVuZ2FkaXIgbyBzdWJ0aXBvIMKrJXPCuzogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE5MQorIywgYy1mb3JtYXQKK21zZ2lkICJIb3N0IG5hbWUgY29uZmxpY3RcbiIKK21zZ3N0ciAiQ29uZmxpdG8gZGUgbm9tZXMgZGUgc2Vydmlkb3JcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgW29wdGlvbnNdICVzIDxuYW1lPiA8dHlwZT4gPHBvcnQ+IFs8dHh0IC4uLj5dXG4iCisiJXMgW29wdGlvbnNdICVzIDxob3N0LW5hbWU+IDxhZGRyZXNzPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLXMgLS1zZXJ2aWNlICAgICAgICAgUHVibGlzaCBzZXJ2aWNlXG4iCisiICAgIC1hIC0tYWRkcmVzcyAgICAgICAgIFB1Ymxpc2ggYWRkcmVzc1xuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBFbmFibGUgdmVyYm9zZSBtb2RlXG4iCisiICAgIC1kIC0tZG9tYWluPURPTUFJTiAgIERvbWFpbiB0byBwdWJsaXNoIHNlcnZpY2UgaW5cbiIKKyIgICAgLUggLS1ob3N0PURPTUFJTiAgICAgSG9zdCB3aGVyZSBzZXJ2aWNlIHJlc2lkZXNcbiIKKyIgICAgICAgLS1zdWJ0eXBlPVNVQlRZUEUgQW4gYWRkaXRpb25hbCBzdWJ0eXBlIHRvIHJlZ2lzdGVyIHRoaXMgc2VydmljZSAiCisid2l0aFxuIgorIiAgICAtUiAtLW5vLXJldmVyc2UgICAgICBEbyBub3QgcHVibGlzaCByZXZlcnNlIGVudHJ5IHdpdGggYWRkcmVzc1xuIgorIiAgICAtZiAtLW5vLWZhaWwgICAgICAgICBEb24ndCBmYWlsIGlmIHRoZSBkYWVtb24gaXMgbm90IGF2YWlsYWJsZVxuIgorbXNnc3RyICIiCisiJXMgW29wY2nDs25zXSAlcyA8bm9tZT4gPHRpcG8+IDxwb3J0bz4gWzx0eHQgLi4uPl1cbiIKKyIlcyBbb3BjacOzbnNdICVzIDxub21lLWRlLXNlcnZpZG9yPiA8ZW5kZXJlem8+XG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIE1vc3RyYXIgZXN0YSBheHVkYVxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBNb3N0cmFyIGEgdmVyc2nDs25cbiIKKyIgICAgLXMgLS1zZXJ2aWNlICAgICAgICAgUHVibGljYXIgdW4gc2Vydml6b1xuIgorIiAgICAtYSAtLWFkZHJlc3MgICAgICAgICBQdWJsaWNhciB1biBlbmRlcmV6b1xuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBBY3RpdmFyIG8gbW9kbyBkZXRhbGxhZG9cbiIKKyIgICAgLWQgLS1kb21haW49RE9NSU5JTyAgIERvbWluaW8gbm8gcXVlIHB1YmxpY2FyIG8gc2Vydml6b1xuIgorIiAgICAtSCAtLWhvc3Q9RE9NSU5JTyAgICAgQ29tcHV0YWRvciBubyBxdWUgcmVzaWRlIG8gc2Vydml6b1xuIgorIiAgICAgICAtLXN1YnR5cGU9U1VCVElQTyBVbiBzdWJ0aXBvIGFkaWNpb25hbCBjbyBxdWUgcmV4aXN0cmFyIGVzdGUgc2Vydml6b1xuIgorIiAgICAtZiAtLW5vLWZhaWwgICAgICAgICBOb24gcHJvZHVjaXIgdW4gZXJybyBzZSBvIGRhZW1vbiBub24gZXN0w6EgIgorImRpc3Bvw7HDrWJlbFxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MzAzIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIG51bWJlciBvZiBhcmd1bWVudHNcbiIKK21zZ3N0ciAiTyBuw7ptZXJvIGRlIGFyZ3VtZW50byDDqSBlcnLDs25lb1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBwb3J0IG51bWJlcjogJXNcbiIKK21zZ3N0ciAiUHJvZHVjaXVzZSB1biBlcnJvIGFvIHByb2Nlc2FyIG8gbsO6bWVybyBkZSBwb3J0bzogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjM2MSAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGNvbW1hbmQgc3BlY2lmaWVkLlxuIgorbXNnc3RyICJOb24gc2UgZXNwZWNpZmljb3UgbmluZ3VuaGEgb3JkZS5cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIGhvc3QgbmFtZSAnJXMnOiAlc1xuIgorbXNnc3RyICJQcm9kdWNpdXNlIHVuIGVycm8gYW8gbG9jYWxpemFyIG8gbm9tZSBkZSBzZXJ2aWRvciDCqyVzwrs6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoxMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgYWRkcmVzcyAnJXMnOiAlc1xuIgorbXNnc3RyICJQcm9kdWNpdXNlIHVuIGVycm8gYW8gbG9jYWxpemFyIG8gZW5kZXJlem8gwqslc8K7OiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBbb3B0aW9uc10gJXMgPGhvc3QgbmFtZSAuLi4+XG4iCisiJXMgW29wdGlvbnNdICVzIDxhZGRyZXNzIC4uLiA+XG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFNob3cgdmVyc2lvblxuIgorIiAgICAtbiAtLW5hbWUgICAgICAgICAgICBSZXNvbHZlIGhvc3QgbmFtZVxuIgorIiAgICAtYSAtLWFkZHJlc3MgICAgICAgICBSZXNvbHZlIGFkZHJlc3NcbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgRW5hYmxlIHZlcmJvc2UgbW9kZVxuIgorIiAgICAtNiAgICAgICAgICAgICAgICAgICBMb29rdXAgSVB2NiBhZGRyZXNzXG4iCisiICAgIC00ICAgICAgICAgICAgICAgICAgIExvb2t1cCBJUHY0IGFkZHJlc3NcbiIKK21zZ3N0ciAiIgorIiVzIFtvcGNpw7Nuc10gJXMgPG5vbWUgZGUgc2Vydmlkb3IuLi4+XG4iCisiJXMgW29wY2nDs25zXSAlcyA8ZW5kZXJlem8gLi4uID5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgTW9zdHJhciBlc3RhIGF4dWRhXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIE1vc3RyYXIgYSB2ZXJzacOzblxuIgorIiAgICAtbiAtLW5hbWUgICAgICAgICAgICBMb2NhbGl6YXIgbyBub21lIGRlIGNvbXB1dGFkb3JcbiIKKyIgICAgLWEgLS1hZGRyZXNzICAgICAgICAgTG9jYWxpemFyIG8gZW5kZXJlem9cbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgQWN0aXZhciBvIG1vZG8gZGV0YWxsYWRvXG4iCisiICAgIC02ICAgICAgICAgICAgICAgICAgIEJ1c2NhciBlbmRlcmV6b3MgSVB2NlxuIgorIiAgICAtNCAgICAgICAgICAgICAgICAgICBCdXNjYXIgZW5kZXJlem9zIElQdjRcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI5OSAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgaG9zdCBuYW1lIHJlc29sdmVyOiAlc1xuIgorbXNnc3RyICIiCisiUHJvZHVjaXVzZSB1biBlcnJvIGFvIGNyZWFyIG8gcHJvY2VzbyBkZSBsb2NhbGl6YWNpw7NuIGRlIG5vbWVzIGRlIHNlcnZpZG9yOiAiCisiJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjMwOQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcGFyc2UgYWRkcmVzcyAnJXMnXG4iCittc2dzdHIgIlByb2R1Y2l1c2UgdW4gZXJybyBhbyBwcm9jZXNhciBvIGVuZGVyZXpvIMKrJXPCu1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MzE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgYWRkcmVzcyByZXNvbHZlcjogJXNcbiIKK21zZ3N0ciAiUHJvZHVjaXVzZSB1biBlcnJvIGFvIGNyZWFyIG8gbG9jYWxpemFkb3IgZGUgZW5kZXJlem9zOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFtvcHRpb25zXSA8bmV3IGhvc3QgbmFtZT5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgU2hvdyB2ZXJzaW9uXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKK21zZ3N0ciAiIgorIiVzIFtvcGNpw7Nuc10gPG5vdm8gbm9tZSBkZSBzZXJ2aWRvcj5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgTW9zdHJhciBlc3RhIGF4dWRhXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIE1vc3RyYXIgYSB2ZXJzacOzblxuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBBY3RpdmFyIG8gbW9kbyBkZXRhbGxhZG9cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMsIGV4cGVjdGluZyBleGFjdGx5IG9uZS5cbiIKK21zZ3N0ciAiTyBuw7ptZXJvIGRlIGFyZ3VtZW50b3Mgbm9uIMOpIGNvcnJlY3RvLCBlc3BlcsOhYmFzZSBleGFjdGFtZW50ZSB1bi5cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE5MworIywgYy1mb3JtYXQKK21zZ2lkICJIb3N0IG5hbWUgc3VjY2Vzc2Z1bGx5IGNoYW5nZWQgdG8gJXNcbiIKK21zZ3N0ciAiQ2FtYmlvdXNlIG8gbm9tZSBkZSBzZXJ2aWRvciBjb3JyZWN0YW1lbnRlIGEgJXNcbiIKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9wby9oZS5wbyBiL2F2YWhpLTAuNi4zMS9wby9oZS5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjQwNzBiCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL3BvL2hlLnBvCkBAIC0wLDAgKzEsODA2IEBACisjIEhlYnJldyB0cmFuc2xhdGlvbiBmb3IgYXZhaGkKKyMgQ29weXJpZ2h0IChjKSAyMDA4IFJvc2V0dGEgQ29udHJpYnV0b3JzIGFuZCBDYW5vbmljYWwgTHRkIDIwMDgKKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGF2YWhpIHBhY2thZ2UuCisjIFlhcm9uIFNoYWhyYWJhbmkgPHNoLnlhcm9uQGdtYWlsLmNvbT4sIDIwMTAuCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBhdmFoaVxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMS0wNC0wMiAwMzoyMyswMjAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxMC0wNy0xOCAxMzoxOSswMjAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBZYXJvbiBTaGFocmFiYW5pIDxzaC55YXJvbkBnbWFpbC5jb20+XG4iCisiTGFuZ3VhZ2UtVGVhbTogSGVicmV3IDxoZUBsaS5vcmc+XG4iCisiTGFuZ3VhZ2U6IGhlXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiWC1MYXVuY2hwYWQtRXhwb3J0LURhdGU6IDIwMTAtMDctMTggMTA6MTYrMDAwMFxuIgorIlgtR2VuZXJhdG9yOiBMYXVuY2hwYWQgKGJ1aWxkIFVua25vd24pXG4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjMwCittc2dpZCAiT0siCittc2dzdHIgIteQ15nXqdeV16giCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjMxCittc2dpZCAiT3BlcmF0aW9uIGZhaWxlZCIKK21zZ3N0ciAi15TXpNei15XXnNeUINeg15vXqdec15QiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjMyCittc2dpZCAiQmFkIHN0YXRlIgorbXNnc3RyICLXntem15Eg15HXoteZ15nXqteZIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozMworbXNnaWQgIkludmFsaWQgaG9zdCBuYW1lIgorbXNnc3RyICLXqdedINeU157XkNeo15cg16nXkteV15kiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM0Cittc2dpZCAiSW52YWxpZCBkb21haW4gbmFtZSIKK21zZ3N0ciAi16nXnSDXlNee16rXl9edINep15LXldeZIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozNQorbXNnaWQgIk5vIHN1aXRhYmxlIG5ldHdvcmsgcHJvdG9jb2wgYXZhaWxhYmxlIgorbXNnc3RyICLXkNeZ158g16TXqNeV15jXlden15XXnCDXqteV15DXnSDXltee15nXnyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzYKK21zZ2lkICJJbnZhbGlkIEROUyBUVEwiCittc2dzdHIgIteW157XnyDXqteX15nXmdeqINeULUROUyDXqdeS15XXmSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzcKK21zZ2lkICJSZXNvdXJjZSByZWNvcmQga2V5IGlzIHBhdHRlcm4iCittc2dzdHIgItee16TXqteXINeU16fXnNeY16og15TXntep15DXkSDXlNeZ16DXlSDXqteR16DXmdeqIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozOAorbXNnaWQgIkxvY2FsIG5hbWUgY29sbGlzaW9uIgorbXNnc3RyICLXlNeq16DXktep15XXqiDXqdedINee16fXldee15nXqiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzkKK21zZ2lkICJJbnZhbGlkIHJlY29yZCIKK21zZ3N0ciAi16jXqdeV157XlCDXqdeS15XXmdeUIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0MQorbXNnaWQgIkludmFsaWQgc2VydmljZSBuYW1lIgorbXNnc3RyICLXqdedINeU16nXmdeo15XXqiDXqdeS15XXmSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDIKK21zZ2lkICJJbnZhbGlkIHNlcnZpY2UgdHlwZSIKK21zZ3N0ciAi16HXldeSINeU16nXmdeo15XXqiDXqdeS15XXmSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDMKK21zZ2lkICJJbnZhbGlkIHBvcnQgbnVtYmVyIgorbXNnc3RyICLXnteh16TXqCDXlNek16rXl9eUINep15LXldeZIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NAorbXNnaWQgIkludmFsaWQgcmVjb3JkIGtleSIKK21zZ3N0ciAi157XpNeq15cg15TXqNep15XXnteUINep15LXldeZIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NQorbXNnaWQgIkludmFsaWQgYWRkcmVzcyIKK21zZ3N0ciAi15TXm9eq15XXkdeqINep15LXldeZ15QiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQ2Cittc2dpZCAiVGltZW91dCByZWFjaGVkIgorbXNnc3RyICLXlNeS15nXoiDXqteV150g15TXltee158iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQ3Cittc2dpZCAiVG9vIG1hbnkgY2xpZW50cyIKK21zZ3N0ciAi15nXldeq16gg157Xk9eZINec16fXldeX15XXqiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDgKK21zZ2lkICJUb28gbWFueSBvYmplY3RzIgorbXNnc3RyICLXmdeV16rXqCDXnteT15kg16TXqNeZ15jXmdedIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0OQorbXNnaWQgIlRvbyBtYW55IGVudHJpZXMiCittc2dzdHIgIteZ15XXqteoINee15PXmSDXqNep15XXnteV16oiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjUwCittc2dpZCAiT1MgRXJyb3IiCittc2dzdHIgItep15LXmdeQ16ogINee16LXqNeb16og15TXlNek16LXnNeUIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1MgorbXNnaWQgIkFjY2VzcyBkZW5pZWQiCittc2dzdHIgIteU15LXmdep15Qg16DXk9eX16rXlCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTMKK21zZ2lkICJJbnZhbGlkIG9wZXJhdGlvbiIKK21zZ3N0ciAi16TXoteV15zXlCDXqdeS15XXmdeUIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1NAorbXNnaWQgIkFuIHVuZXhwZWN0ZWQgRC1CdXMgZXJyb3Igb2NjdXJlZCIKK21zZ3N0ciAi15DXqNei15Qg16nXkteZ15DXqiBELUJ1cyDXnNeQINeZ15PXldei15QiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU1Cittc2dpZCAiRGFlbW9uIGNvbm5lY3Rpb24gZmFpbGVkIgorbXNnc3RyICLXlNeX15nXkdeV16gg15zXodeV15vXnyDXoNeb16nXnCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTYKK21zZ2lkICJNZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICLXlNeW15vXqNeV158g15TXldeq16kiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU3Cittc2dpZCAiVGhlIG9iamVjdCBwYXNzZWQgaW4gd2FzIG5vdCB2YWxpZCIKK21zZ3N0ciAi15TXpNeo15nXmCDXqdeU15XXoteR16gg16TXoNeZ157XlCDXqdeS15XXmSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTgKK21zZ2lkICJEYWVtb24gbm90IHJ1bm5pbmciCittc2dzdHIgIteU16HXldeb158g15DXmdeg15Ug16TXoteZ15wiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU5Cittc2dpZCAiSW52YWxpZCBpbnRlcmZhY2UgaW5kZXgiCittc2dzdHIgItee16TXqteXINeq15XXm9efINeU157XoNep16cg16nXkteV15kiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjYwCittc2dpZCAiSW52YWxpZCBwcm90b2NvbCBzcGVjaWZpY2F0aW9uIgorbXNnc3RyICLXkNek15nXldefINek16jXldeY15XXp9eV15wg16nXkteV15kiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjYxCittc2dpZCAiSW52YWxpZCBmbGFncyIKK21zZ3N0ciAi15PXktec15XXoNeZ150g16nXkteV15nXmdedIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2MworbXNnaWQgIk5vdCBmb3VuZCIKK21zZ3N0ciAi15zXkCDXoNee16bXkCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjQKK21zZ2lkICJJbnZhbGlkIGNvbmZpZ3VyYXRpb24iCittc2dzdHIgIteU15LXk9eo15XXqiDXqdeS15XXmdeV16oiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY1Cittc2dpZCAiVmVyc2lvbiBtaXNtYXRjaCIKK21zZ3N0ciAi15fXldeh16gg16rXmdeQ15XXnSDXkteZ16jXodeQ15XXqiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjYKK21zZ2lkICJJbnZhbGlkIHNlcnZpY2Ugc3VidHlwZSIKK21zZ3N0ciAi16rXqi3XodeV15Ig15TXqdeZ16jXldeqINep15LXldeZIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2NworbXNnaWQgIkludmFsaWQgcGFja2V0IgorbXNnc3RyICLXnteg15Qg16nXkteV15nXlCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjgKK21zZ2lkICJJbnZhbGlkIEROUyByZXR1cm4gY29kZSIKK21zZ3N0ciAi16fXldeTINeq15LXldeR15Qg16nXkteV15kg157XlC1ETlMiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY5Cittc2dpZCAiRE5TIGZhaWx1cmU6IEZPUk1FUlIiCittc2dzdHIgItep15LXmdeQ16ogRE5TOiBGT1JNRVIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjcwCittc2dpZCAiRE5TIGZhaWx1cmU6IFNFUlZGQUlMIgorbXNnc3RyICLXqdeS15nXkNeqIEROUzogU0VSVkZBSUwiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjcxCittc2dpZCAiRE5TIGZhaWx1cmU6IE5YRE9NQUlOIgorbXNnc3RyICLXqdeS15nXkNeqIEROUzogTlhET01BSU4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjcyCittc2dpZCAiRE5TIGZhaWx1cmU6IE5PVElNUCIKK21zZ3N0ciAi16nXkteZ15DXqiBETlM6IE5PVElNUCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzQKK21zZ2lkICJETlMgZmFpbHVyZTogUkVGVVNFRCIKK21zZ3N0ciAi16nXkteZ15DXqiBETlM6IFJFRlVTRUQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc1Cittc2dpZCAiRE5TIGZhaWx1cmU6IFlYRE9NQUlOIgorbXNnc3RyICJETlMg16nXkteZ15DXqjogWVhET01BSU4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc2Cittc2dpZCAiRE5TIGZhaWx1cmU6IFlYUlJTRVQiCittc2dzdHIgItep15LXmdeQ16ogRE5TOiBZWFJSU0VUIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3NworbXNnaWQgIkROUyBmYWlsdXJlOiBOWFJSU0VUIgorbXNnc3RyICLXqdeS15nXkNeqIEROUzogTlhSUlNFVCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzgKK21zZ2lkICJETlMgZmFpbHVyZTogTk9UQVVUSCIKK21zZ3N0ciAi16nXkteZ15DXqiBETlM6IE5PVEFVVEgiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc5Cittc2dpZCAiRE5TIGZhaWx1cmU6IE5PVFpPTkUiCittc2dzdHIgItep15LXmdeQ16ogRE5TOiBOT1RaT05FIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4MAorbXNnaWQgIkludmFsaWQgUkRBVEEiCittc2dzdHIgIlJEQVRBINep15LXldeZIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4MQorbXNnaWQgIkludmFsaWQgRE5TIHR5cGUiCittc2dzdHIgIteh15XXkiDXlC1ETlMg16nXkteV15kiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjgyCittc2dpZCAiSW52YWxpZCBETlMgY2xhc3MiCittc2dzdHIgIteo157XqiDXlC1ETlMg16nXkteV15nXlCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODMKK21zZ2lkICJOb3Qgc3VwcG9ydGVkIgorbXNnc3RyICLXnNeQINeg16rXnteaIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4NQorbXNnaWQgIk5vdCBwZXJtaXR0ZWQiCittc2dzdHIgItec15Ag157Xldeo16nXlCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODYKK21zZ2lkICJJbnZhbGlkIGFyZ3VtZW50IgorbXNnc3RyICLXkNeo15LXldee16DXmCDXqdeS15XXmSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODcKK21zZ2lkICJJcyBlbXB0eSIKK21zZ3N0ciAi15TXmdeg15Ug16jXmdenIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4OAorbXNnaWQgIlRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uIGlzIGludmFsaWQgYmVjYXVzZSByZWR1bmRhbnQiCittc2dzdHIgIteU16TXoteV15zXlCDXlNee15HXlden16nXqiDXqdeS15XXmdeUINeb15nXldeV158g16nXlNeZ15Ag157XmdeV16rXqNeqIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo5NAorbXNnaWQgIkludmFsaWQgRXJyb3IgQ29kZSIKK21zZ3N0ciAi16fXldeTINep15LXmdeQ15Qg16nXkteV15kiCisKKyM6IC4uL2F2YWhpLWRpc2NvdmVyLXN0YW5kYWxvbmUvYXZhaGktZGlzY292ZXIudWkuaDoxCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6NzYKK21zZ2lkICI8aT5ObyBzZXJ2aWNlIGN1cnJlbnRseSBzZWxlY3RlZC48L2k+IgorbXNnc3RyICI8aT7XnNeR15nXoNeq15nXmdedINec15Ag16DXkdeX16gg15DXoyDXqdeZ16jXldeqLjwvaT4iCisKKyM6IC4uL2F2YWhpLWRpc2NvdmVyLXN0YW5kYWxvbmUvYXZhaGktZGlzY292ZXIudWkuaDoyCittc2dpZCAiQXZhaGkgRGlzY292ZXJ5IgorbXNnc3RyICLXkteZ15zXldeZIEF2YWhpIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIuZGVza3RvcC5pbi5pbi5oOjEKK21zZ2lkICJBdmFoaSBaZXJvY29uZiBCcm93c2VyIgorbXNnc3RyICLXodeZ15nXqCDXlNa+WmVyb2NvbmYg16nXnCDigI9BdmFoaSIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLmRlc2t0b3AuaW4uaW4uaDoyCittc2dpZCAiQnJvd3NlIGZvciBaZXJvY29uZiBzZXJ2aWNlcyBhdmFpbGFibGUgb24geW91ciBuZXR3b3JrIgorbXNnc3RyICLXodeZ15XXqCDXkNeX16gg16nXmdeo15XXqteZIFplcm9jb25mINeU15bXnteZ16DXmdedINeR16jXqdeqINep15zXmiIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIyNAorbXNnaWQgIlRYVCIKK21zZ3N0ciAiVFhUIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI2Cittc2dpZCAiVFhUIERhdGE6IgorbXNnc3RyICLXoNeq15XXoNeZIFRYVCIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIyNgorbXNnaWQgImVtcHR5IgorbXNnc3RyICLXqNeZ16ciCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMjgKK21zZ2lkICJTZXJ2aWNlIFR5cGU6IgorbXNnc3RyICLXodeV15Ig15TXqdeZ16jXldeqOiIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIyOQorbXNnaWQgIlNlcnZpY2UgTmFtZToiCittc2dzdHIgItep150g15TXqdeZ16jXldeqOiIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIzMAorbXNnaWQgIkRvbWFpbiBOYW1lOiIKK21zZ3N0ciAi16nXnSDXlNee16rXl9edOiIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIzMQorbXNnaWQgIkludGVyZmFjZToiCittc2dzdHIgItee16DXqdenOiIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIzMgorbXNnaWQgIkFkZHJlc3M6IgorbXNnc3RyICLXm9eq15XXkdeqOiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxODUKK21zZ2lkICJCcm93c2UgU2VydmljZSBUeXBlcyIKK21zZ3N0ciAi16HXmdeV16gg15HXodeV15LXmSDXlNep15nXqNeV16rXmdedIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE4NQorbXNnaWQgIkEgTlVMTCB0ZXJtaW5hdGVkIGxpc3Qgb2Ygc2VydmljZSB0eXBlcyB0byBicm93c2UgZm9yIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTkwCittc2dpZCAiRG9tYWluIgorbXNnc3RyICLXnteq15fXnSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxOTAKK21zZ2lkICJUaGUgZG9tYWluIHRvIGJyb3dzZSBpbiwgb3IgTlVMTCBmb3IgdGhlIGRlZmF1bHQgZG9tYWluIgorbXNnc3RyICLXlNee16rXl9edINec16HXmdeV16gsINeQ15UgTlVMTCDXnNee16rXl9edINeR16jXmdeo16og15TXnteX15PXnCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxOTYKK21zZ2lkICJTZXJ2aWNlIFR5cGUiCittc2dzdHIgIteh15XXkiDXlNep15nXqNeV16oiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTk2Cittc2dpZCAiVGhlIHNlcnZpY2UgdHlwZSBvZiB0aGUgc2VsZWN0ZWQgc2VydmljZSIKK21zZ3N0ciAi16HXldeSINeU16nXmdeo15XXqiDXqdecINeU16nXmdeo15XXqiDXlNeg15HXl9eoIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIwMiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjEwMjMKK21zZ2lkICJTZXJ2aWNlIE5hbWUiCittc2dzdHIgItep150g15TXqdeZ16jXldeqIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIwMgorbXNnaWQgIlRoZSBzZXJ2aWNlIG5hbWUgb2YgdGhlIHNlbGVjdGVkIHNlcnZpY2UiCittc2dzdHIgItep150g15TXqdeZ16jXldeqINep15wg15TXqdeZ16jXldeqINeU16DXkdeX16giCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjA4Cittc2dpZCAiQWRkcmVzcyIKK21zZ3N0ciAi15vXqteV15HXqiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMDgKK21zZ2lkICJUaGUgYWRkcmVzcyBvZiB0aGUgcmVzb2x2ZWQgc2VydmljZSIKK21zZ3N0ciAi15vXqteV15HXqiDXlNep15nXqNeV16og16nXoNek16rXqCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMTMKK21zZ2lkICJQb3J0IgorbXNnc3RyICLXpNeq15fXlCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMTMKK21zZ2lkICJUaGUgSVAgcG9ydCBudW1iZXIgb2YgdGhlIHJlc29sdmVkIHNlcnZpY2UiCittc2dzdHIgItee16HXpNeoINek16rXl9eqINeU1r5JUCDXqdecINeU16nXmdeo15XXqiDXqdeg16TXqteoIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIxOQorbXNnaWQgIkhvc3QgTmFtZSIKK21zZ3N0ciAi16nXnSDXlNee15DXqNeXIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIxOQorbXNnaWQgIlRoZSBob3N0IG5hbWUgb2YgdGhlIHJlc29sdmVkIHNlcnZpY2UiCittc2dzdHIgItep150g15TXnteQ16jXlyDXqdecINeU16nXmdeo15XXqiDXqdeg16TXqteoIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIyNQorbXNnaWQgIlRYVCBEYXRhIgorbXNnc3RyICLXoNeq15XXoNeZIFRYVCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMjUKK21zZ2lkICJUaGUgVFhUIGRhdGEgb2YgdGhlIHJlc29sdmVkIHNlcnZpY2UiCittc2dzdHIgIteg16rXldeg15kg15TWvlRYVCDXqdecINeU16nXmdeo15XXqiDXqdeg16TXqteoIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIzMAorbXNnaWQgIlJlc29sdmUgU2VydmljZSIKK21zZ3N0ciAi16nXmdeo15XXqiDXlNek16rXmdeo15QiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjMwCittc2dpZCAiUmVzb2x2ZSB0aGUgc2VsZWN0ZWQgc2VydmljZSBhdXRvbWF0aWNhbGx5IGJlZm9yZSByZXR1cm5pbmciCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMzYKK21zZ2lkICJSZXNvbHZlIFNlcnZpY2UgSG9zdCBOYW1lIgorbXNnc3RyICLXqdedINee15DXqNeXINep15nXqNeV16og15TXpNeq15nXqNeUIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIzNgorbXNnaWQgIiIKKyJSZXNvbHZlIHRoZSBob3N0IG5hbWUgb2YgdGhlIHNlbGVjdGVkIHNlcnZpY2UgYXV0b21hdGljYWxseSBiZWZvcmUgcmV0dXJuaW5nIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjQyCittc2dpZCAiQWRkcmVzcyBmYW1pbHkiCittc2dzdHIgItee16nXpNeX16og15vXqteV15HXldeqIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjI0MgorbXNnaWQgIlRoZSBhZGRyZXNzIGZhbWlseSBmb3IgaG9zdCBuYW1lIHJlc29sdXRpb24iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzozMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaGkgY2xpZW50IGZhaWx1cmU6ICVzIgorbXNnc3RyICLXm9ep15wg15HXnNen15XXlyBBdmFoaTolcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzozODgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkF2YWhpIHJlc29sdmVyIGZhaWx1cmU6ICVzIgorbXNnc3RyICJFcnJvciBjcmVhdGluZyBBdmFoaSByZXNvbHZlcjogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyb3dzaW5nIGZvciBzZXJ2aWNlIHR5cGUgJXMgaW4gZG9tYWluICVzIGZhaWxlZDogJXMiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo1MTkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTY4CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoxNjkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTc4CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoxNzkKK21zZ2lkICJuL2EiCittc2dzdHIgItec15Ag15bXnteZ158iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWhpIGRvbWFpbiBicm93c2VyIGZhaWx1cmU6ICVzIgorbXNnc3RyICLXm9ep15wg15HXk9ek15PXpNefINeU157XqteX157XmdedIEF2YWhpOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo2ODQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWFkIEF2YWhpIGRvbWFpbjogJXMiCittc2dzdHIgIteg15vXqdecINeR16TXqteZ16jXqiDXqdedINee15DXqNeXIGF2YWhpOuKAjyAlc1xuIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjcwNgorbXNnaWQgIkJyb3dzZSBzZXJ2aWNlIHR5cGUgbGlzdCBpcyBlbXB0eSEiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo3MTcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjb25uZWN0IHRvIEF2YWhpIHNlcnZlcjogJXMiCittc2dzdHIgIiIKKyLXoNeb16nXnCDXkdeU16rXl9eR16jXldeqINec16nXqNeqIEphbWVuZG8u4oCPXG4iCisiJXMuIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjczNQorbXNnaWQgIkJyb3dzaW5nIGZvciBzZXJ2aWNlcyBvbiA8Yj5sb2NhbCBuZXR3b3JrPC9iPjoiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo3MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJvd3NpbmcgZm9yIHNlcnZpY2VzIGluIGRvbWFpbiA8Yj4lczwvYj46IgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NzczCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGJyb3dzZXIgZm9yICVzOiAlcyIKK21zZ3N0ciAi15DXqNeiINeb16nXnCDXkdeZ16bXmdeo16og16nXqNeqIEhUVFAg16LXkdeV16ggJXM64oCPICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjkwMworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIHJlc29sdmVyIGZvciAlcyBvZiB0eXBlICVzIGluIGRvbWFpbiAlczogJXMiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo5NzgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgZG9tYWluIGJyb3dzZXI6ICVzIgorbXNnc3RyICLXkNeo16Ig15vXqdecINeR15TXpNei15zXqiDXodeZ15nXqCDXlNa+bUROUzrigI8gJXNcbiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo5ODkKK21zZ2lkICJDaGFuZ2UgZG9tYWluIgorbXNnc3RyICLXlNeX15zXpNeqINee16rXl9edIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjEwMzEgLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTYyCittc2dpZCAiQnJvd3NpbmcuLi4iCittc2dzdHIgIteR16LXmdeV158uLi4iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTEyMAorbXNnaWQgIkluaXRpYWxpemluZy4uLiIKK21zZ3N0ciAi15HXlNec15nXm9eZINeU16TXotec15QuLi4iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTE0NAorbXNnaWQgIkxvY2F0aW9uIgorbXNnc3RyICLXnteZ16fXldedIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNDkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTUzCisjLCBmdXp6eQorbXNnaWQgIk5hbWUiCittc2dzdHIgItep150iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTE1NCAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NTMKK21zZ2lkICJUeXBlIgorbXNnc3RyICLXodeV15IiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTE2NgorbXNnaWQgIl9Eb21haW4uLi4iCittc2dzdHIgIl/Xnteq15fXnS4uLiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBbb3B0aW9uc11cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLXMgLS1zc2ggICAgICAgICAgICAgQnJvd3NlIFNTSCBzZXJ2ZXJzXG4iCisiICAgIC12IC0tdm5jICAgICAgICAgICAgIEJyb3dzZSBWTkMgc2VydmVyc1xuIgorIiAgICAtUyAtLXNoZWxsICAgICAgICAgICBCcm93c2UgYm90aCBTU0ggYW5kIFZOQ1xuIgorIiAgICAtZCAtLWRvbWFpbj1ET01BSU4gICBUaGUgZG9tYWluIHRvIGJyb3dzZSBpblxuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxMDEgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6Nzc1CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvbyBtYW55IGFyZ3VtZW50c1xuIgorbXNnc3RyICLXmdeV16rXqCDXnteT15kg15DXqNeS15XXnteg15jXmdedXG4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNDkKKyMsIGZ1enp5Cittc2dpZCAiQ2hvb3NlIFNoZWxsIFNlcnZlciIKK21zZ3N0ciAi16nXqNeqINee16LXmNek16og157XqNeV15fXpyIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE1MQorbXNnaWQgIkRlc2t0b3AiCittc2dzdHIgItep15XXnNeX158g15TXoteR15XXk9eUIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTUyCittc2dpZCAiVGVybWluYWwiCittc2dzdHIgItee16HXldejIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTU2Cittc2dpZCAiQ2hvb3NlIFZOQyBzZXJ2ZXIiCittc2dzdHIgIteR15fXmdeo16og16nXqNeqIFZOQyIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE2MQorbXNnaWQgIkNob29zZSBTU0ggc2VydmVyIgorbXNnc3RyICLXkdeX15nXqNeqINep16jXqiBTU0giCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29ubmVjdGluZyB0byAnJXMnIC4uLlxuIgorbXNnc3RyICLXnteq15HXpteiINeX15nXkdeV16gg15DXnCAnJXMnLi4uXG4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoyNDAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImV4ZWNscCgpIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAi15TXkNeZ157XldeqINeg15vXqdecLiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5jZWxlZC5cbiIKK21zZ3N0ciAi15HXldeY15wuXG4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guZGVza3RvcC5pbi5pbi5oOjEKK21zZ2lkICJBdmFoaSBTU0ggU2VydmVyIEJyb3dzZXIiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5kZXNrdG9wLmluLmluLmg6MgorbXNnaWQgIkJyb3dzZSBmb3IgWmVyb2NvbmYtZW5hYmxlZCBTU0ggU2VydmVycyIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9idm5jLmRlc2t0b3AuaW4uaW4uaDoxCittc2dpZCAiQXZhaGkgVk5DIFNlcnZlciBCcm93c2VyIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2J2bmMuZGVza3RvcC5pbi5pbi5oOjIKK21zZ2lkICJCcm93c2UgZm9yIFplcm9jb25mLWVuYWJsZWQgVk5DIFNlcnZlcnMiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTA3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICI6IEFsbCBmb3Igbm93XG4iCittc2dzdHIgItec15AsINeW15Qg15TXm9ecINec16LXm9ep15nXlSIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTE4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICI6IENhY2hlIGV4aGF1c3RlZFxuIgorbXNnc3RyICLXmNeV16LXnyDXkNeqINeU157XmNee15XXnyIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MjM5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSBzZXJ2aWNlICclcycgb2YgdHlwZSAnJXMnIGluIGRvbWFpbiAnJXMnOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjM0MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAic2VydmljZV9icm93c2VyIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAi15DXqNeiINeb16nXnCDXkdei16ogJXMg16nXmdeo15XXqiBSeWdlbDrigI8gJXMiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjM3OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiYXZhaGlfc2VydmljZV9icm93c2VyX25ldygpIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAi15DXqNeiINeb16nXnCDXkdeU15XXodek16og16HXmdeZ16gg15TWvm1ETlMg15zXqdeZ16jXldeqICVzLiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NDE0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJzZXJ2aWNlX3R5cGVfYnJvd3NlciBmYWlsZWQ6ICVzXG4iCittc2dzdHIgIteQ16jXoiDXm9ep15wg15HXoteqICVzINep15nXqNeV16ogUnlnZWw64oCPICVzIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo0NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXZhaGlfc2VydmljZV90eXBlX2Jyb3dzZXJfbmV3KCkgZmFpbGVkOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjUxOQorIywgYy1mb3JtYXQKK21zZ2lkICJhdmFoaV9kb21haW5fYnJvd3Nlcl9uZXcoKSBmYWlsZWQ6ICVzXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTM1IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozOTQKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyODAgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE2OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IHZlcnNpb24gc3RyaW5nOiAlc1xuIgorbXNnc3RyICLXkNeo16Ig15vXqdecINeR16rXqdeQ15XXnCDXodeV15Ig15TXqteV15vXnyDXoteR15XXqCAnJXMnIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NDAgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjM5OQorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI4NSAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTczCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTg5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcXVlcnkgaG9zdCBuYW1lOiAlc1xuIgorbXNnc3RyICLXkNeZ157XldeqINei150g15TXnteQ16jXlyAlcyDXoNeb16nXnCIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTQ0IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo0MDMKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyODkgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE3NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiU2VydmVyIHZlcnNpb246ICVzOyBIb3N0IG5hbWU6ICVzXG4iCittc2dzdHIgItep150g15TXnteQ16jXlyDXkNeVINeb16rXldeR16og15TXqdeo16ouIgorCisjLiBUcmFuc2xhdG9yczogVGhpcyBpcyBhIGNvbHVtbiBoZWFkaW5nIHdpdGggYWJicmV2aWF0aW9ucyBmb3IKKyMuICogICBFdmVudCAoKy8tKSwgTmV0d29yayBJbnRlcmZhY2UsIFByb3RvY29sIChJUHY0L3Y2KSwgRG9tYWluCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NDkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkUgSWZjZSBQcm90IERvbWFpblxuIgorbXNnc3RyICLXqdeo16og16nXnteV16og157XqteX150iCisKKyMuIFRyYW5zbGF0b3JzOiBUaGlzIGlzIGEgY29sdW1uIGhlYWRpbmcgd2l0aCBhYmJyZXZpYXRpb25zIGZvcgorIy4gKiAgIEV2ZW50ICgrLy0pLCBOZXR3b3JrIEludGVyZmFjZSwgUHJvdG9jb2wgKElQdjQvdjYpLCBEb21haW4KKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU1MworIywgYy1mb3JtYXQKK21zZ2lkICJFIElmY2UgUHJvdCAlLSpzICUtMjBzIERvbWFpblxuIgorbXNnc3RyICIiCisKKyMuIFdlIGhhdmUgYmVlbiBkaXNjb25uZWN0ZWQsIHNvIGxldCByZWNvbm5lY3QKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU4NSAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTYzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJEaXNjb25uZWN0ZWQsIHJlY29ubmVjdGluZyAuLi5cbiIKK21zZ3N0ciAi4oCPJXMg15TXqteg16rXpyIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTk5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjgyOQorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE3MCAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6Mzg2CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjcyIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxNjAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgY2xpZW50IG9iamVjdDogJXNcbiIKK21zZ3N0ciAi15DXqNeiINeb16nXnCDXkdeZ16bXmdeo16og16TXqNeZ15gg157XodeV15IgR2RrUGl4YnVmTG9hZGVyLiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NjA0IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxNzUKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoxNDMgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjU5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJDbGllbnQgZmFpbHVyZSwgZXhpdGluZzogJXNcbiIKK21zZ3N0ciAi16nXkteZ15DXlCDXkden16jXmdeQ16ogR0lGOuKAjyAlcyIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NjIzIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoyMDYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIldhaXRpbmcgZm9yIGRhZW1vbiAuLi5cbiIKK21zZ3N0ciAi157Xl9eb15Qg15zXqten15zXmdeY15XXqC4uLiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NjQ3Cittc2dpZCAiIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLUQgLS1icm93c2UtZG9tYWlucyAgQnJvd3NlIGZvciBicm93c2luZyBkb21haW5zIGluc3RlYWQgb2Ygc2VydmljZXNcbiIKKyIgICAgLWEgLS1hbGwgICAgICAgICAgICAgU2hvdyBhbGwgc2VydmljZXMsIHJlZ2FyZGxlc3Mgb2YgdGhlIHR5cGVcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgVGhlIGRvbWFpbiB0byBicm93c2UgaW5cbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgRW5hYmxlIHZlcmJvc2UgbW9kZVxuIgorIiAgICAtdCAtLXRlcm1pbmF0ZSAgICAgICBUZXJtaW5hdGUgYWZ0ZXIgZHVtcGluZyBhIG1vcmUgb3IgbGVzcyBjb21wbGV0ZSAiCisibGlzdFxuIgorIiAgICAtYyAtLWNhY2hlICAgICAgICAgICBUZXJtaW5hdGUgYWZ0ZXIgZHVtcGluZyBhbGwgZW50cmllcyBmcm9tIHRoZSBjYWNoZVxuIgorIiAgICAtbCAtLWlnbm9yZS1sb2NhbCAgICBJZ25vcmUgbG9jYWwgc2VydmljZXNcbiIKKyIgICAgLXIgLS1yZXNvbHZlICAgICAgICAgUmVzb2x2ZSBzZXJ2aWNlcyBmb3VuZFxuIgorIiAgICAtZiAtLW5vLWZhaWwgICAgICAgICBEb24ndCBmYWlsIGlmIHRoZSBkYWVtb24gaXMgbm90IGF2YWlsYWJsZVxuIgorIiAgICAtcCAtLXBhcnNhYmxlICAgICAgICBPdXRwdXQgaW4gcGFyc2FibGUgZm9ybWF0XG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NjYwCittc2dpZCAiIgorIiAgICAtayAtLW5vLWRiLWxvb2t1cCAgICBEb24ndCBsb29rdXAgc2VydmljZSB0eXBlc1xuIgorIiAgICAtYiAtLWR1bXAtZGIgICAgICAgICBEdW1wIHNlcnZpY2UgdHlwZSBkYXRhYmFzZVxuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjc2NiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjE5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJUb28gZmV3IGFyZ3VtZW50c1xuIgorbXNnc3RyICLXmdeV16rXqCDXnteT15kg15DXqNeS15XXnteg15jXmdedXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjgyMSAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6Mzc4CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjY0IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBzaW1wbGUgcG9sbCBvYmplY3QuXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjc2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJFc3RhYmxpc2hlZCB1bmRlciBuYW1lICclcydcbiIKK21zZ3N0ciAi16nXnSDXlNeq16fXnyBBTFNBIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6ODEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlcjogJXNcbiIKK21zZ3N0ciAi16nXkteZ15DXlCDXkdeY16LXmdeg16ogJXM6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo5NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiTmFtZSBjb2xsaXNpb24sIHBpY2tpbmcgbmV3IG5hbWUgJyVzJy5cbiIKK21zZ3N0ciAi15TXqdedINeU15fXk9epINeo15nXpy4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxMTQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgZW50cnkgZ3JvdXA6ICVzXG4iCittc2dzdHIgIteQ16jXoiDXm9ep15wg15HXp9eR15zXqiDXqNep15nXnteqINeU16fXkdeV16bXldeqIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTI0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gYWRkIGFkZHJlc3M6ICVzXG4iCittc2dzdHIgIteQ16jXoiDXm9ep15wg15HXmdem15nXqNeqINeh16TXqCDXlNeb16rXldeR15XXqiAnJXMnOuKAjyAlcyIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjEzNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBzZXJ2aWNlOiAlc1xuIgorbXNnc3RyICLXkNeo16Ig15vXqdecINeR16LXqiAlcyDXqdeZ16jXldeqIFJ5Z2VsOuKAjyAlcyIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE0MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBzdWJ0eXBlICclcyc6ICVzXG4iCittc2dzdHIgIteQ16jXoiDXm9ep15wg15HXlNeV16HXpNeqINeU16rXp9efINeV15nXqNeY15XXkNec15kiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxOTEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkhvc3QgbmFtZSBjb25mbGljdFxuIgorbXNnc3RyICLXqdeg15Qg16nXnSDXnl/XkNeo15ciCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFtvcHRpb25zXSAlcyA8bmFtZT4gPHR5cGU+IDxwb3J0PiBbPHR4dCAuLi4+XVxuIgorIiVzIFtvcHRpb25zXSAlcyA8aG9zdC1uYW1lPiA8YWRkcmVzcz5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgU2hvdyB2ZXJzaW9uXG4iCisiICAgIC1zIC0tc2VydmljZSAgICAgICAgIFB1Ymxpc2ggc2VydmljZVxuIgorIiAgICAtYSAtLWFkZHJlc3MgICAgICAgICBQdWJsaXNoIGFkZHJlc3NcbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgRW5hYmxlIHZlcmJvc2UgbW9kZVxuIgorIiAgICAtZCAtLWRvbWFpbj1ET01BSU4gICBEb21haW4gdG8gcHVibGlzaCBzZXJ2aWNlIGluXG4iCisiICAgIC1IIC0taG9zdD1ET01BSU4gICAgIEhvc3Qgd2hlcmUgc2VydmljZSByZXNpZGVzXG4iCisiICAgICAgIC0tc3VidHlwZT1TVUJUWVBFIEFuIGFkZGl0aW9uYWwgc3VidHlwZSB0byByZWdpc3RlciB0aGlzIHNlcnZpY2UgIgorIndpdGhcbiIKKyIgICAgLVIgLS1uby1yZXZlcnNlICAgICAgRG8gbm90IHB1Ymxpc2ggcmV2ZXJzZSBlbnRyeSB3aXRoIGFkZHJlc3NcbiIKKyIgICAgLWYgLS1uby1mYWlsICAgICAgICAgRG9uJ3QgZmFpbCBpZiB0aGUgZGFlbW9uIGlzIG5vdCBhdmFpbGFibGVcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MzAzIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozMTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkJhZCBudW1iZXIgb2YgYXJndW1lbnRzXG4iCittc2dzdHIgIkxvcyBwb3NpYmxlcyBhcmd1bWVudG9zIHNvbjoiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozMjkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBwb3J0IG51bWJlcjogJXNcbiIKK21zZ3N0ciAiRmFpbGVkIHRvIHBhcnNlIHNhdmVkIHNlc3Npb24gZmlsZTogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjM2MSAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjQ2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJObyBjb21tYW5kIHNwZWNpZmllZC5cbiIKK21zZ3N0ciAibm8gY29tbWFuZCBzcGVjaWZpZWQgdG8gZXhlY3V0ZSIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjg5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSBob3N0IG5hbWUgJyVzJzogJXNcbiIKK21zZ3N0ciAiVW5hYmxlIHRvIHJlc29sdmUgaG9zdCBhZGRyZXNzIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MTI2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSBhZGRyZXNzICclcyc6ICVzXG4iCittc2dzdHIgIlVuYWJsZSB0byByZXNvbHZlIGhvc3QgYWRkcmVzcyIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjE1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgW29wdGlvbnNdICVzIDxob3N0IG5hbWUgLi4uPlxuIgorIiVzIFtvcHRpb25zXSAlcyA8YWRkcmVzcyAuLi4gPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLW4gLS1uYW1lICAgICAgICAgICAgUmVzb2x2ZSBob3N0IG5hbWVcbiIKKyIgICAgLWEgLS1hZGRyZXNzICAgICAgICAgUmVzb2x2ZSBhZGRyZXNzXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKKyIgICAgLTYgICAgICAgICAgICAgICAgICAgTG9va3VwIElQdjYgYWRkcmVzc1xuIgorIiAgICAtNCAgICAgICAgICAgICAgICAgICBMb29rdXAgSVB2NCBhZGRyZXNzXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI5OSAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgaG9zdCBuYW1lIHJlc29sdmVyOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzozMDkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBhZGRyZXNzICclcydcbiIKK21zZ3N0ciAiRmFpbGVkIHRvIHBhcnNlIGFyZ3VtZW50czogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjMxNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBhZGRyZXNzIHJlc29sdmVyOiAlc1xuIgorbXNnc3RyICLXkNeo16Ig15vXqdecINeR15nXpteZ16jXqiDXodek16gg15TXm9eq15XXkdeV16ogJyVzJzrigI8gJXMiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgW29wdGlvbnNdIDxuZXcgaG9zdCBuYW1lPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgRW5hYmxlIHZlcmJvc2UgbW9kZVxuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzLCBleHBlY3RpbmcgZXhhY3RseSBvbmUuXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE5MworIywgYy1mb3JtYXQKK21zZ2lkICJIb3N0IG5hbWUgc3VjY2Vzc2Z1bGx5IGNoYW5nZWQgdG8gJXNcbiIKK21zZ3N0ciAi16nXnSDXlNee15DXqNeXINeU16nXqteg15Qg15HXlNem15zXl9eUINec1r4lc1xuIgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL3BvL2h1LnBvIGIvYXZhaGktMC42LjMxL3BvL2h1LnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzODg3NWUKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvcG8vaHUucG8KQEAgLTAsMCArMSw4NjMgQEAKKyMgSHVuZ2FyaWFuIHRyYW5zbGF0aW9uIG9mIGF2YWhpCisjIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBhdmFoaSBwYWNrYWdlLgorIworIyBHYWJvciBLZWxlbWVuIDxrZWxlbWVuZ0Bnbm9tZS5odT4sIDIwMDgsIDIwMDksIDIwMTAuCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBhdmFoaSBtYXN0ZXJcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTEtMDQtMDIgMDM6MjMrMDIwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDktMDMtMjIgMTI6NTcrMDEwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogR2Fib3IgS2VsZW1lbiA8a2VsZW1lbmdAZ25vbWUuaHU+XG4iCisiTGFuZ3VhZ2UtVGVhbTogSHVuZ2FyaWFuIDxnbm9tZUBmc2YuaHU+XG4iCisiTGFuZ3VhZ2U6IGh1XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCisiWC1HZW5lcmF0b3I6IEtCYWJlbCAxLjExLjRcbiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzAKK21zZ2lkICJPSyIKK21zZ3N0ciAiT0siCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjMxCittc2dpZCAiT3BlcmF0aW9uIGZhaWxlZCIKK21zZ3N0ciAiQSBtxbF2ZWxldCBtZWdoacO6c3VsdCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzIKK21zZ2lkICJCYWQgc3RhdGUiCittc2dzdHIgIkhpYsOhcyDDoWxsYXBvdCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzMKK21zZ2lkICJJbnZhbGlkIGhvc3QgbmFtZSIKK21zZ3N0ciAiw4lydsOpbnl0ZWxlbiBnw6lwbsOpdiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzQKK21zZ2lkICJJbnZhbGlkIGRvbWFpbiBuYW1lIgorbXNnc3RyICLDiXJ2w6lueXRlbGVuIHRhcnRvbcOhbnluw6l2IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozNQorbXNnaWQgIk5vIHN1aXRhYmxlIG5ldHdvcmsgcHJvdG9jb2wgYXZhaWxhYmxlIgorbXNnc3RyICJOZW0gw6FsbCByZW5kZWxrZXrDqXNyZSBtZWdmZWxlbMWRIGjDoWzDs3phdGkgcHJvdG9rb2xsIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozNgorbXNnaWQgIkludmFsaWQgRE5TIFRUTCIKK21zZ3N0ciAiw4lydsOpbnl0ZWxlbiBETlMgVFRMIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozNworbXNnaWQgIlJlc291cmNlIHJlY29yZCBrZXkgaXMgcGF0dGVybiIKK21zZ3N0ciAiQXogZXLFkWZvcnLDoXNyZWtvcmQga3VsY3NhIG1pbnRhIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozOAorbXNnaWQgIkxvY2FsIG5hbWUgY29sbGlzaW9uIgorbXNnc3RyICJIZWx5aSBuw6l2w7x0a8O2esOpcyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzkKK21zZ2lkICJJbnZhbGlkIHJlY29yZCIKK21zZ3N0ciAiw4lydsOpbnl0ZWxlbiByZWtvcmQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQxCittc2dpZCAiSW52YWxpZCBzZXJ2aWNlIG5hbWUiCittc2dzdHIgIsOJcnbDqW55dGVsZW4gc3pvbGfDoWx0YXTDoXNuw6l2IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0MgorbXNnaWQgIkludmFsaWQgc2VydmljZSB0eXBlIgorbXNnc3RyICLDiXJ2w6lueXRlbGVuIHN6b2xnw6FsdGF0w6FzdMOtcHVzIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0MworbXNnaWQgIkludmFsaWQgcG9ydCBudW1iZXIiCittc2dzdHIgIsOJcnbDqW55dGVsZW4gcG9ydHN6w6FtIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NAorbXNnaWQgIkludmFsaWQgcmVjb3JkIGtleSIKK21zZ3N0ciAiw4lydsOpbnl0ZWxlbiByZWtvcmRrdWxjcyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDUKK21zZ2lkICJJbnZhbGlkIGFkZHJlc3MiCittc2dzdHIgIsOJcnbDqW55dGVsZW4gY8OtbSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDYKK21zZ2lkICJUaW1lb3V0IHJlYWNoZWQiCittc2dzdHIgIklkxZF0w7psbMOpcMOpcyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDcKK21zZ2lkICJUb28gbWFueSBjbGllbnRzIgorbXNnc3RyICJUw7psIHNvayBrbGllbnMiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQ4Cittc2dpZCAiVG9vIG1hbnkgb2JqZWN0cyIKK21zZ3N0ciAiVMO6bCBzb2sgb2JqZWt0dW0iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQ5Cittc2dpZCAiVG9vIG1hbnkgZW50cmllcyIKK21zZ3N0ciAiVMO6bCBzb2sgYmVqZWd5esOpcyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTAKK21zZ2lkICJPUyBFcnJvciIKK21zZ3N0ciAiT1MgaGliYSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTIKK21zZ2lkICJBY2Nlc3MgZGVuaWVkIgorbXNnc3RyICJIb3p6w6Fmw6lyw6lzIG1lZ3RhZ2FkdmEiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjUzCittc2dpZCAiSW52YWxpZCBvcGVyYXRpb24iCittc2dzdHIgIsOJcnbDqW55dGVsZW4gbcWxdmVsZXQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU0Cittc2dpZCAiQW4gdW5leHBlY3RlZCBELUJ1cyBlcnJvciBvY2N1cmVkIgorbXNnc3RyICJWw6FyYXRsYW4gRC1CdXMgaGliYSB0w7ZydMOpbnQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU1Cittc2dpZCAiRGFlbW9uIGNvbm5lY3Rpb24gZmFpbGVkIgorbXNnc3RyICJBIGNzYXRsYWtvesOhcyBtZWdoacO6c3VsdCBhIGTDqW1vbmhveiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTYKK21zZ2lkICJNZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICJFbGZvZ3lvdHQgYSBtZW3Ds3JpYSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTcKK21zZ2lkICJUaGUgb2JqZWN0IHBhc3NlZCBpbiB3YXMgbm90IHZhbGlkIgorbXNnc3RyICJBeiDDoXRhZG90dCBvYmpla3R1bSDDqXJ2w6lueXRlbGVuIHZvbHQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU4Cittc2dpZCAiRGFlbW9uIG5vdCBydW5uaW5nIgorbXNnc3RyICJBIGTDqW1vbiBuZW0gZnV0IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1OQorbXNnaWQgIkludmFsaWQgaW50ZXJmYWNlIGluZGV4IgorbXNnc3RyICLDiXJ2w6lueXRlbGVuIGZlbMO8bGV0aW5kZXgiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjYwCittc2dpZCAiSW52YWxpZCBwcm90b2NvbCBzcGVjaWZpY2F0aW9uIgorbXNnc3RyICLDiXJ2w6lueXRlbGVuIHByb3Rva29sbG1lZ2hhdMOhcm96w6FzIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2MQorbXNnaWQgIkludmFsaWQgZmxhZ3MiCittc2dzdHIgIsOJcnbDqW55dGVsZW4gamVsesWRayIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjMKK21zZ2lkICJOb3QgZm91bmQiCittc2dzdHIgIk5lbSB0YWzDoWxoYXTDsyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjQKK21zZ2lkICJJbnZhbGlkIGNvbmZpZ3VyYXRpb24iCittc2dzdHIgIsOJcnbDqW55dGVsZW4ga29uZmlndXLDoWNpw7MiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY1Cittc2dpZCAiVmVyc2lvbiBtaXNtYXRjaCIKK21zZ3N0ciAiVmVyemnDs2VsdMOpcsOpcyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjYKK21zZ2lkICJJbnZhbGlkIHNlcnZpY2Ugc3VidHlwZSIKK21zZ3N0ciAiw4lydsOpbnl0ZWxlbiBzem9sZ8OhbHRhdMOhc2FsdMOtcHVzIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2NworbXNnaWQgIkludmFsaWQgcGFja2V0IgorbXNnc3RyICLDiXJ2w6lueXRlbGVuIGNzb21hZyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjgKK21zZ2lkICJJbnZhbGlkIEROUyByZXR1cm4gY29kZSIKK21zZ3N0ciAiw4lydsOpbnl0ZWxlbiBETlMgdmlzc3phdMOpcsOpc2kgw6lydMOpayIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjkKK21zZ2lkICJETlMgZmFpbHVyZTogRk9STUVSUiIKK21zZ3N0ciAiRE5TIGhpYmE6IEZPUk1FUlIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjcwCittc2dpZCAiRE5TIGZhaWx1cmU6IFNFUlZGQUlMIgorbXNnc3RyICJETlMgaGliYTogU0VSVkZBSUwiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjcxCittc2dpZCAiRE5TIGZhaWx1cmU6IE5YRE9NQUlOIgorbXNnc3RyICJETlMgaGliYTogTlhET01BSU4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjcyCittc2dpZCAiRE5TIGZhaWx1cmU6IE5PVElNUCIKK21zZ3N0ciAiRE5TIGhpYmE6IE5PVElNUCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzQKK21zZ2lkICJETlMgZmFpbHVyZTogUkVGVVNFRCIKK21zZ3N0ciAiRE5TIGhpYmE6IFJFRlVTRUQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc1Cittc2dpZCAiRE5TIGZhaWx1cmU6IFlYRE9NQUlOIgorbXNnc3RyICJETlMgaGliYTogWVhET01BSU4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc2Cittc2dpZCAiRE5TIGZhaWx1cmU6IFlYUlJTRVQiCittc2dzdHIgIkROUyBoaWJhOiBZWFJSU0VUIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3NworbXNnaWQgIkROUyBmYWlsdXJlOiBOWFJSU0VUIgorbXNnc3RyICJETlMgaGliYTogTlhSUlNFVCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzgKK21zZ2lkICJETlMgZmFpbHVyZTogTk9UQVVUSCIKK21zZ3N0ciAiRE5TIGhpYmE6IE5PVEFVVEgiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc5Cittc2dpZCAiRE5TIGZhaWx1cmU6IE5PVFpPTkUiCittc2dzdHIgIkROUyBoaWJhOiBOT1RaT05FIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4MAorbXNnaWQgIkludmFsaWQgUkRBVEEiCittc2dzdHIgIsOJcnbDqW55dGVsZW4gUkRBVEEiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjgxCittc2dpZCAiSW52YWxpZCBETlMgdHlwZSIKK21zZ3N0ciAiw4lydsOpbnl0ZWxlbiBETlMtdMOtcHVzIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4MgorbXNnaWQgIkludmFsaWQgRE5TIGNsYXNzIgorbXNnc3RyICLDiXJ2w6lueXRlbGVuIEROUy1vc3p0w6FseSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODMKK21zZ2lkICJOb3Qgc3VwcG9ydGVkIgorbXNnc3RyICJOZW0gdMOhbW9nYXRvdHQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjg1Cittc2dpZCAiTm90IHBlcm1pdHRlZCIKK21zZ3N0ciAiTmVtIGVuZ2Vkw6lseWV6ZXR0IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4NgorbXNnaWQgIkludmFsaWQgYXJndW1lbnQiCittc2dzdHIgIsOJcnbDqW55dGVsZW4gcGFyYW3DqXRlciIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODcKK21zZ2lkICJJcyBlbXB0eSIKK21zZ3N0ciAiw5xyZXMiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjg4Cittc2dpZCAiVGhlIHJlcXVlc3RlZCBvcGVyYXRpb24gaXMgaW52YWxpZCBiZWNhdXNlIHJlZHVuZGFudCIKK21zZ3N0ciAiQSBrw6lydCBtxbF2ZWxldCDDqXJ2w6lueXRlbGVuLCBtaXZlbCByZWR1bmTDoW5zIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo5NAorbXNnaWQgIkludmFsaWQgRXJyb3IgQ29kZSIKK21zZ3N0ciAiw4lydsOpbnl0ZWxlbiBoaWJha8OzZCIKKworIzogLi4vYXZhaGktZGlzY292ZXItc3RhbmRhbG9uZS9hdmFoaS1kaXNjb3Zlci51aS5oOjEKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weTo3NgorbXNnaWQgIjxpPk5vIHNlcnZpY2UgY3VycmVudGx5IHNlbGVjdGVkLjwvaT4iCittc2dzdHIgIjxpPk5pbmNzIGtpdsOhbGFzenR2YSBzem9sZ8OhbHRhdMOhcy48L2k+IgorCisjOiAuLi9hdmFoaS1kaXNjb3Zlci1zdGFuZGFsb25lL2F2YWhpLWRpc2NvdmVyLnVpLmg6MgorbXNnaWQgIkF2YWhpIERpc2NvdmVyeSIKK21zZ3N0ciAiQXZhaGkgZmVsdMOpcmvDqXBlesOpcyIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLmRlc2t0b3AuaW4uaW4uaDoxCittc2dpZCAiQXZhaGkgWmVyb2NvbmYgQnJvd3NlciIKK21zZ3N0ciAiQXZhaGkgWmVyb2NvbmYtYsO2bmfDqXN6xZEiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5kZXNrdG9wLmluLmluLmg6MgorbXNnaWQgIkJyb3dzZSBmb3IgWmVyb2NvbmYgc2VydmljZXMgYXZhaWxhYmxlIG9uIHlvdXIgbmV0d29yayIKK21zZ3N0ciAiWmVyb2NvbmYgc3pvbGfDoWx0YXTDoXNvayBrZXJlc8Opc2UgYSBow6Fsw7N6YXRvbiIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIyNAorbXNnaWQgIlRYVCIKK21zZ3N0ciAiVFhUIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI2Cittc2dpZCAiVFhUIERhdGE6IgorbXNnc3RyICJUWFQgYWRhdDoiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMjYKK21zZ2lkICJlbXB0eSIKK21zZ3N0ciAiw7xyZXMiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMjgKK21zZ2lkICJTZXJ2aWNlIFR5cGU6IgorbXNnc3RyICJTem9sZ8OhbHRhdMOhc3TDrXB1czoiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMjkKK21zZ2lkICJTZXJ2aWNlIE5hbWU6IgorbXNnc3RyICJTem9sZ8OhbHRhdMOhc27DqXY6IgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjMwCittc2dpZCAiRG9tYWluIE5hbWU6IgorbXNnc3RyICJUYXJ0b23DoW55bsOpdjoiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMzEKK21zZ2lkICJJbnRlcmZhY2U6IgorbXNnc3RyICJDc2F0b2zDszoiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMzIKK21zZ2lkICJBZGRyZXNzOiIKK21zZ3N0ciAiQ8OtbToiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTg1Cittc2dpZCAiQnJvd3NlIFNlcnZpY2UgVHlwZXMiCittc2dzdHIgIlN6b2xnw6FsdGF0w6FzdMOtcHVzb2sgdGFsbMOzesOhc2EiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTg1Cittc2dpZCAiQSBOVUxMIHRlcm1pbmF0ZWQgbGlzdCBvZiBzZXJ2aWNlIHR5cGVzIHRvIGJyb3dzZSBmb3IiCittc2dzdHIgIkEgdGFsbMOzemFuZMOzIHN6b2xnw6FsdGF0w6FzdMOtcHVzb2sgTlVMTCB2w6lnxbEgbGlzdMOhamEiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTkwCittc2dpZCAiRG9tYWluIgorbXNnc3RyICJUYXJ0b23DoW55IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE5MAorbXNnaWQgIlRoZSBkb21haW4gdG8gYnJvd3NlIGluLCBvciBOVUxMIGZvciB0aGUgZGVmYXVsdCBkb21haW4iCittc2dzdHIgIkEgdGFsbMOzemFuZMOzIHRhcnRvbcOhbnksIHZhZ3kgTlVMTCBheiBhbGFww6lydGVsbWV6ZXR0aGV6IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE5NgorbXNnaWQgIlNlcnZpY2UgVHlwZSIKK21zZ3N0ciAiU3pvbGfDoWx0YXTDoXN0w61wdXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTk2Cittc2dpZCAiVGhlIHNlcnZpY2UgdHlwZSBvZiB0aGUgc2VsZWN0ZWQgc2VydmljZSIKK21zZ3N0ciAiQSBraXbDoWxhc3p0b3R0IHN6b2xnw6FsdGF0w6FzIHTDrXB1c2EiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjAyIC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTAyMworbXNnaWQgIlNlcnZpY2UgTmFtZSIKK21zZ3N0ciAiU3pvbGfDoWx0YXTDoXNuw6l2IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIwMgorbXNnaWQgIlRoZSBzZXJ2aWNlIG5hbWUgb2YgdGhlIHNlbGVjdGVkIHNlcnZpY2UiCittc2dzdHIgIkEga2l2w6FsYXN6dG90dCBzem9sZ8OhbHRhdMOhcyBuZXZlIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIwOAorbXNnaWQgIkFkZHJlc3MiCittc2dzdHIgIkPDrW0iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjA4Cittc2dpZCAiVGhlIGFkZHJlc3Mgb2YgdGhlIHJlc29sdmVkIHNlcnZpY2UiCittc2dzdHIgIkEgZmVsb2xkb3R0IHN6b2xnw6FsdGF0w6FzIGPDrW1lIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIxMworbXNnaWQgIlBvcnQiCittc2dzdHIgIlBvcnQiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjEzCittc2dpZCAiVGhlIElQIHBvcnQgbnVtYmVyIG9mIHRoZSByZXNvbHZlZCBzZXJ2aWNlIgorbXNnc3RyICJBIGZlbG9sZG90dCBzem9sZ8OhbHRhdMOhcyBJUCBwb3J0c3rDoW1hIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIxOQorbXNnaWQgIkhvc3QgTmFtZSIKK21zZ3N0ciAiR8OpcG7DqXYiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjE5Cittc2dpZCAiVGhlIGhvc3QgbmFtZSBvZiB0aGUgcmVzb2x2ZWQgc2VydmljZSIKK21zZ3N0ciAiQSBmZWxvbGRvdHQgc3pvbGfDoWx0YXTDoXMgZ8OpcG5ldmUiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjI1Cittc2dpZCAiVFhUIERhdGEiCittc2dzdHIgIlRYVCBhZGF0IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIyNQorbXNnaWQgIlRoZSBUWFQgZGF0YSBvZiB0aGUgcmVzb2x2ZWQgc2VydmljZSIKK21zZ3N0ciAiQSBmZWxvbGRvdHQgc3pvbGfDoWx0YXTDoXMgVFhUIGFkYXRhaSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMzAKK21zZ2lkICJSZXNvbHZlIFNlcnZpY2UiCittc2dzdHIgIlN6b2xnw6FsdGF0w6FzIGZlbG9sZMOhc2EiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjMwCittc2dpZCAiUmVzb2x2ZSB0aGUgc2VsZWN0ZWQgc2VydmljZSBhdXRvbWF0aWNhbGx5IGJlZm9yZSByZXR1cm5pbmciCittc2dzdHIgIkEga2l2w6FsYXN6dG90dCBzem9sZ8OhbHRhdMOhcyBhdXRvbWF0aWt1cyBmZWxvbGTDoXNhIHZpc3N6YXTDqXLDqXMgZWzFkXR0IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIzNgorbXNnaWQgIlJlc29sdmUgU2VydmljZSBIb3N0IE5hbWUiCittc2dzdHIgIlN6b2xnw6FsdGF0w6FzIGfDqXBuZXbDqW5layBmZWxvbGTDoXNhIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIzNgorbXNnaWQgIiIKKyJSZXNvbHZlIHRoZSBob3N0IG5hbWUgb2YgdGhlIHNlbGVjdGVkIHNlcnZpY2UgYXV0b21hdGljYWxseSBiZWZvcmUgcmV0dXJuaW5nIgorbXNnc3RyICIiCisiQSBraXbDoWxhc3p0b3R0IHN6b2xnw6FsdGF0w6FzIGfDqXBuZXbDqW5layBhdXRvbWF0aWt1cyBmZWxvbGTDoXNhIHZpc3N6YXTDqXLDqXMgIgorImVsxZF0dCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyNDIKK21zZ2lkICJBZGRyZXNzIGZhbWlseSIKK21zZ3N0ciAiQ8OtbWNzYWzDoWQiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjQyCittc2dpZCAiVGhlIGFkZHJlc3MgZmFtaWx5IGZvciBob3N0IG5hbWUgcmVzb2x1dGlvbiIKK21zZ3N0ciAiQ8OtbWNzYWzDoWQgYSBnw6lwbsOpdi1mZWxvbGTDoXNob3oiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MzI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWhpIGNsaWVudCBmYWlsdXJlOiAlcyIKK21zZ3N0ciAiQXZhaGkga2xpZW5zaGliYTogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6Mzg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWhpIHJlc29sdmVyIGZhaWx1cmU6ICVzIgorbXNnc3RyICJBdmFoaSBmZWxvbGTDoXNpIGhpYmE6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjUxOAorIywgYy1mb3JtYXQKK21zZ2lkICJCcm93c2luZyBmb3Igc2VydmljZSB0eXBlICVzIGluIGRvbWFpbiAlcyBmYWlsZWQ6ICVzIgorbXNnc3RyICJBIHN6b2xnw6FsdGF0w6FzdMOtcHVzICglcykgdGFsbMOzesOhc2EgYSB0YXJ0b23DoW55YmFuICglcykgbWVnaGnDunN1bHQ6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjUxOSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoxNjgKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjE2OSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoxNzgKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjE3OQorbXNnaWQgIm4vYSIKK21zZ3N0ciAiaXNtZXJldGxlbiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo2NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaGkgZG9tYWluIGJyb3dzZXIgZmFpbHVyZTogJXMiCittc2dzdHIgIkF2YWhpIHRhcnRvbcOhbnliw7ZuZ8Opc3rFkS1oaWJhOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo2ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlYWQgQXZhaGkgZG9tYWluOiAlcyIKK21zZ3N0ciAiQXogQXZhaGkgdGFydG9tw6FueSBvbHZhc8Ohc2EgbWVnaGnDunN1bHQ6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjcwNgorbXNnaWQgIkJyb3dzZSBzZXJ2aWNlIHR5cGUgbGlzdCBpcyBlbXB0eSEiCittc2dzdHIgIkEgdGFsbMOzemFuZMOzIHN6b2xnw6FsdGF0w6FzdMOtcHVzb2sgbGlzdMOhamEgw7xyZXMuIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjcxNworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY29ubmVjdCB0byBBdmFoaSBzZXJ2ZXI6ICVzIgorbXNnc3RyICJBIGNzYXRsYWtvesOhcyBtZWdoacO6c3VsdCBheiBBdmFoaSBraXN6b2xnw6Fsw7Nob3o6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjczNQorbXNnaWQgIkJyb3dzaW5nIGZvciBzZXJ2aWNlcyBvbiA8Yj5sb2NhbCBuZXR3b3JrPC9iPjoiCittc2dzdHIgIlN6b2xnw6FsdGF0w6Fzb2sgdGFsbMOzesOhc2EgYSA8Yj5oZWx5aSBow6Fsw7N6YXRvbjwvYj46IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjczNworIywgYy1mb3JtYXQKK21zZ2lkICJCcm93c2luZyBmb3Igc2VydmljZXMgaW4gZG9tYWluIDxiPiVzPC9iPjoiCittc2dzdHIgIlN6b2xnw6FsdGF0w6Fzb2sgdGFsbMOzesOhc2EgYSh6KSA8Yj4lczwvYj4gdGFydG9tw6FueWJhbjoiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NzczCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgYnJvd3NlciBmb3IgJXM6ICVzIgorbXNnc3RyICJOZW0gc2lrZXLDvGx0IHRhbGzDs3rDs3QgbMOpdHJlaG96bmkgYSBrw7Z2ZXRrZXrFkWjDtno6ICVzOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo5MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSByZXNvbHZlciBmb3IgJXMgb2YgdHlwZSAlcyBpbiBkb21haW4gJXM6ICVzIgorbXNnc3RyICIiCisiTmVtIHNpa2Vyw7xsdCAkJTJzIHTDrXB1c8O6IGZlbG9sZMOzdCBsw6l0cmVob3puaSBhIGvDtnZldGtlesWRaMO2ejogJCUxcyBhKHopICQlM3MgIgorInRhcnRvbcOhbnliYW46ICQlNHMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6OTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgZG9tYWluIGJyb3dzZXI6ICVzIgorbXNnc3RyICJOZW0gc2lrZXLDvGx0IHRhcnRvbcOhbnl0YWxsw7N6w7N0IGzDqXRyZWhvem5pOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo5ODkKK21zZ2lkICJDaGFuZ2UgZG9tYWluIgorbXNnc3RyICJUYXJ0b23DoW55IG3Ds2Rvc8OtdMOhc2EiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTAzMSAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNjIKK21zZ2lkICJCcm93c2luZy4uLiIKK21zZ3N0ciAiVGFsbMOzesOhc+KApiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTIwCittc2dpZCAiSW5pdGlhbGl6aW5nLi4uIgorbXNnc3RyICJFbMWRa8Opc3rDrXTDqXPigKYiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTE0NAorbXNnaWQgIkxvY2F0aW9uIgorbXNnc3RyICJIZWx5IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNDkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTUzCittc2dpZCAiTmFtZSIKK21zZ3N0ciAiTsOpdiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTU0IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU1MworbXNnaWQgIlR5cGUiCittc2dzdHIgIlTDrXB1cyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTY2Cittc2dpZCAiX0RvbWFpbi4uLiIKK21zZ3N0ciAiX1RhcnRvbcOhbnnigKYiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzo1NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgW29wdGlvbnNdXG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1zIC0tc3NoICAgICAgICAgICAgIEJyb3dzZSBTU0ggc2VydmVyc1xuIgorIiAgICAtdiAtLXZuYyAgICAgICAgICAgICBCcm93c2UgVk5DIHNlcnZlcnNcbiIKKyIgICAgLVMgLS1zaGVsbCAgICAgICAgICAgQnJvd3NlIGJvdGggU1NIIGFuZCBWTkNcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgVGhlIGRvbWFpbiB0byBicm93c2UgaW5cbiIKK21zZ3N0ciAiIgorIiVzIFtrYXBjc29sw7NrXVxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBFemVuIHPDumfDsyBtZWdqZWxlbsOtdMOpc2VcbiIKKyIgICAgLXMgLS1zc2ggICAgICAgICAgICAgU1NIIGtpc3pvbGfDoWzDs2sgdGFsbMOzesOhc2FcbiIKKyIgICAgLXYgLS12bmMgICAgICAgICAgICAgVk5DIGtpc3pvbGfDoWzDs2sgdGFsbMOzesOhc2FcbiIKKyIgICAgLVMgLS1zaGVsbCAgICAgICAgICAgU1NIIMOpcyBWTkMga2lzem9sZ8OhbMOzayB0YWxsw7N6w6FzYVxuIgorIiAgICAtZCAtLWRvbWFpbj1UQVJUT03DgU5ZICBBIHRhbGzDs3phbmTDsyB0YXJ0b23DoW55XG4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxMDEgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6Nzc1CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvbyBtYW55IGFyZ3VtZW50c1xuIgorbXNnc3RyICJUw7psIHNvayBwYXJhbcOpdGVyXG4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNDkKK21zZ2lkICJDaG9vc2UgU2hlbGwgU2VydmVyIgorbXNnc3RyICJWw6FsYXNzemEga2kgYSBzaGVsbCBraXN6b2xnw6Fsw7N0IgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTUxCittc2dpZCAiRGVza3RvcCIKK21zZ3N0ciAiQXN6dGFsIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTUyCittc2dpZCAiVGVybWluYWwiCittc2dzdHIgIlRlcm1pbsOhbCIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE1NgorbXNnaWQgIkNob29zZSBWTkMgc2VydmVyIgorbXNnc3RyICJWw6FsYXNzem9uIFZOQyBraXN6b2xnw6Fsw7N0IgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTYxCittc2dpZCAiQ2hvb3NlIFNTSCBzZXJ2ZXIiCittc2dzdHIgIlbDoWxhc3N6b24gU1NIIGtpc3pvbGfDoWzDs3QiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29ubmVjdGluZyB0byAnJXMnIC4uLlxuIgorbXNnc3RyICJDc2F0bGFrb3rDoXMgZWhoZXo6IOKAniVz4oCdIOKAplxuIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MjQwCisjLCBjLWZvcm1hdAorbXNnaWQgImV4ZWNscCgpIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAiQXogZXhlY2xwKCkgbWVnaGnDunN1bHQ6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FuY2VsZWQuXG4iCittc2dzdHIgIk1lZ3N6YWvDrXR2YS5cbiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5kZXNrdG9wLmluLmluLmg6MQorbXNnaWQgIkF2YWhpIFNTSCBTZXJ2ZXIgQnJvd3NlciIKK21zZ3N0ciAiQXZhaGkgU1NILWtpc3pvbGfDoWzDs2LDtm5nw6lzesWRIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmRlc2t0b3AuaW4uaW4uaDoyCittc2dpZCAiQnJvd3NlIGZvciBaZXJvY29uZi1lbmFibGVkIFNTSCBTZXJ2ZXJzIgorbXNnc3RyICJaZXJvY29uZi1rw6lwZXMgU1NIIGtpc3pvbGfDoWzDs2sga2VyZXPDqXNlIgorCisjOiAuLi9hdmFoaS11aS9idm5jLmRlc2t0b3AuaW4uaW4uaDoxCittc2dpZCAiQXZhaGkgVk5DIFNlcnZlciBCcm93c2VyIgorbXNnc3RyICJBdmFoaSBWTkMta2lzem9sZ8OhbMOzYsO2bmfDqXN6xZEiCisKKyM6IC4uL2F2YWhpLXVpL2J2bmMuZGVza3RvcC5pbi5pbi5oOjIKK21zZ2lkICJCcm93c2UgZm9yIFplcm9jb25mLWVuYWJsZWQgVk5DIFNlcnZlcnMiCittc2dzdHIgIlplcm9jb25mLWvDqXBlcyBWTkMga2lzem9sZ8OhbMOzayBrZXJlc8Opc2UiCisKKyMgZml4bWU6IHd0Zj8KKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjEwNworIywgYy1mb3JtYXQKK21zZ2lkICI6IEFsbCBmb3Igbm93XG4iCittc2dzdHIgIjogbW9zdCBtaW5kXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjExOAorIywgYy1mb3JtYXQKK21zZ2lkICI6IENhY2hlIGV4aGF1c3RlZFxuIgorbXNnc3RyICI6IGEgZ3lvcnPDrXTDs3TDoXIgZWxmb2d5b3R0XG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjIzOSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgc2VydmljZSAnJXMnIG9mIHR5cGUgJyVzJyBpbiBkb21haW4gJyVzJzogJXNcbiIKK21zZ3N0ciAiIgorIkEoeikgJCUycyB0w61wdXPDuiAkJTFzIHN6b2xnw6FsdGF0w6FzIGZlbG9sZMOhc2EgbWVnaGnDunN1bHQgYSh6KSAkJTNzICIKKyJ0YXJ0b23DoW55YmFuOiAkJTRzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjM0MAorIywgYy1mb3JtYXQKK21zZ2lkICJzZXJ2aWNlX2Jyb3dzZXIgZmFpbGVkOiAlc1xuIgorbXNnc3RyICJhIHNlcnZpY2VfYnJvd3NlciBzaWtlcnRlbGVuOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzozNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXZhaGlfc2VydmljZV9icm93c2VyX25ldygpIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAiYXogYXZhaGlfc2VydmljZV9icm93c2VyX25ldygpIHNpa2VydGVsZW46ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjQxNAorIywgYy1mb3JtYXQKK21zZ2lkICJzZXJ2aWNlX3R5cGVfYnJvd3NlciBmYWlsZWQ6ICVzXG4iCittc2dzdHIgImEgc2VydmljZV90eXBlX2Jyb3dzZXIgc2lrZXJ0ZWxlbjogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImF2YWhpX3NlcnZpY2VfdHlwZV9icm93c2VyX25ldygpIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAiYXogYXZhaGlfc2VydmljZV90eXBlX2Jyb3dzZXJfbmV3KCkgc2lrZXJ0ZWxlbjogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTE5CisjLCBjLWZvcm1hdAorbXNnaWQgImF2YWhpX2RvbWFpbl9icm93c2VyX25ldygpIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAiYXogYXZhaGlfZG9tYWluX2Jyb3dzZXJfbmV3KCkgc2lrZXJ0ZWxlbjogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTM1IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozOTQKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyODAgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE2OAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcXVlcnkgdmVyc2lvbiBzdHJpbmc6ICVzXG4iCittc2dzdHIgIkEgdmVyemnDsy1rYXJha3RlcmzDoW5jIGxla8OpcmRlesOpc2UgbWVnaGnDunN1bHQ6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU0MCAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6Mzk5CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6Mjg1IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxNzMKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IGhvc3QgbmFtZTogJXNcbiIKK21zZ3N0ciAiQSBnw6lwbsOpdiBsZWvDqXJkZXrDqXNlIG1lZ2hpw7pzdWx0OiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NDQgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjQwMworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI4OSAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlcnZlciB2ZXJzaW9uOiAlczsgSG9zdCBuYW1lOiAlc1xuIgorbXNnc3RyICJLaXN6b2xnw6Fsw7N2ZXJ6acOzOiAlczsgZ8OpcG7DqXY6ICVzXG4iCisKKyMuIFRyYW5zbGF0b3JzOiBUaGlzIGlzIGEgY29sdW1uIGhlYWRpbmcgd2l0aCBhYmJyZXZpYXRpb25zIGZvcgorIy4gKiAgIEV2ZW50ICgrLy0pLCBOZXR3b3JrIEludGVyZmFjZSwgUHJvdG9jb2wgKElQdjQvdjYpLCBEb21haW4KKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU0OQorIywgYy1mb3JtYXQKK21zZ2lkICJFIElmY2UgUHJvdCBEb21haW5cbiIKK21zZ3N0ciAiRSBDc2F0IFByb3QgVGFydG9tXG4iCisKKyMuIFRyYW5zbGF0b3JzOiBUaGlzIGlzIGEgY29sdW1uIGhlYWRpbmcgd2l0aCBhYmJyZXZpYXRpb25zIGZvcgorIy4gKiAgIEV2ZW50ICgrLy0pLCBOZXR3b3JrIEludGVyZmFjZSwgUHJvdG9jb2wgKElQdjQvdjYpLCBEb21haW4KKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU1MworIywgYy1mb3JtYXQKK21zZ2lkICJFIElmY2UgUHJvdCAlLSpzICUtMjBzIERvbWFpblxuIgorbXNnc3RyICJFIENzYXQgUHJvdCAlLSpzICUtMjBzIFRhcnRvbVxuIgorCisjLiBXZSBoYXZlIGJlZW4gZGlzY29ubmVjdGVkLCBzbyBsZXQgcmVjb25uZWN0CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1ODUgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE2MworIywgYy1mb3JtYXQKK21zZ2lkICJEaXNjb25uZWN0ZWQsIHJlY29ubmVjdGluZyAuLi5cbiIKK21zZ3N0ciAiTGV2w6FsYXN6dHZhLCDDumpyYWNzYXRsYWtvesOhc+KAplxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1OTkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6ODI5CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTcwIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozODYKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyNzIgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE2MAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGNsaWVudCBvYmplY3Q6ICVzXG4iCittc2dzdHIgIktsaWVuc29iamVrdHVtIGzDqXRyZWhvesOhc2EgbWVnaGnDunN1bHQ6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjYwNCAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTc1CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MTQzIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzo1OQorIywgYy1mb3JtYXQKK21zZ2lkICJDbGllbnQgZmFpbHVyZSwgZXhpdGluZzogJXNcbiIKK21zZ3N0ciAiS2xpZW5zaGliYSwga2lsw6lww6lzOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo2MjMgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjIwNgorIywgYy1mb3JtYXQKK21zZ2lkICJXYWl0aW5nIGZvciBkYWVtb24gLi4uXG4iCittc2dzdHIgIlbDoXJha296w6FzIGEgZMOpbW9ucmHigKZcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NjQ3Cittc2dpZCAiIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLUQgLS1icm93c2UtZG9tYWlucyAgQnJvd3NlIGZvciBicm93c2luZyBkb21haW5zIGluc3RlYWQgb2Ygc2VydmljZXNcbiIKKyIgICAgLWEgLS1hbGwgICAgICAgICAgICAgU2hvdyBhbGwgc2VydmljZXMsIHJlZ2FyZGxlc3Mgb2YgdGhlIHR5cGVcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgVGhlIGRvbWFpbiB0byBicm93c2UgaW5cbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgRW5hYmxlIHZlcmJvc2UgbW9kZVxuIgorIiAgICAtdCAtLXRlcm1pbmF0ZSAgICAgICBUZXJtaW5hdGUgYWZ0ZXIgZHVtcGluZyBhIG1vcmUgb3IgbGVzcyBjb21wbGV0ZSAiCisibGlzdFxuIgorIiAgICAtYyAtLWNhY2hlICAgICAgICAgICBUZXJtaW5hdGUgYWZ0ZXIgZHVtcGluZyBhbGwgZW50cmllcyBmcm9tIHRoZSBjYWNoZVxuIgorIiAgICAtbCAtLWlnbm9yZS1sb2NhbCAgICBJZ25vcmUgbG9jYWwgc2VydmljZXNcbiIKKyIgICAgLXIgLS1yZXNvbHZlICAgICAgICAgUmVzb2x2ZSBzZXJ2aWNlcyBmb3VuZFxuIgorIiAgICAtZiAtLW5vLWZhaWwgICAgICAgICBEb24ndCBmYWlsIGlmIHRoZSBkYWVtb24gaXMgbm90IGF2YWlsYWJsZVxuIgorIiAgICAtcCAtLXBhcnNhYmxlICAgICAgICBPdXRwdXQgaW4gcGFyc2FibGUgZm9ybWF0XG4iCittc2dzdHIgIiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgRXplbiBzw7pnw7MgbWVnamVsZW7DrXTDqXNlXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFZlcnppw7NzesOhbSBtZWdqZWxlbsOtdMOpc2VcbiIKKyIgICAgLUQgLS1icm93c2UtZG9tYWlucyAgU3pvbGfDoWx0YXTDoXNvayBoZWx5ZXR0IHRhcnRvbcOhbnlvayB0YWxsw7N6w6FzYVxuIgorIiAgICAtYSAtLWFsbCAgICAgICAgICAgICBNaW5kZW4gc3pvbGfDoWx0YXTDoXMgbWVnamVsZW7DrXTDqXNlLCAiCisidMOtcHVzZsO8Z2dldGxlbsO8bFxuIgorIiAgICAtZCAtLWRvbWFpbj1UQVJUT03DgU5ZICBBIHRhbGzDs3phbmTDsyB0YXJ0b23DoW55XG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIFLDqXN6bGV0ZXMgbcOzZCBlbmdlZMOpbHllesOpc2VcbiIKKyIgICAgLXQgLS10ZXJtaW5hdGUgICAgICAgQmVmZWplesOpcyBhIHTDtmJiw6kta2V2w6lzYsOpIHRlbGplcyBsaXN0YSBracOtcsOhc2EgIgorInV0w6FuXG4iCisiICAgIC1jIC0tY2FjaGUgICAgICAgICAgIEJlZmVqZXrDqXMgYSBneW9yc8OtdMOzdMOhciBiZWplZ3l6w6lzZWluZWsga2nDrXLDoXNhICIKKyJ1dMOhblxuIgorIiAgICAtbCAtLWlnbm9yZS1sb2NhbCAgICBIZWx5aSBzem9sZ8OhbHRhdMOhc29rIGZpZ3llbG1lbiBrw612w7xsIGhhZ3nDoXNhXG4iCisiICAgIC1yIC0tcmVzb2x2ZSAgICAgICAgIFRhbMOhbHQgc3pvbGfDoWx0YXTDoXNvayBmZWxvbGTDoXNhXG4iCisiICAgIC1mIC0tbm8tZmFpbCAgICAgICAgIE5lIGhpYsOhenpvbiwgaGEgYSBkw6ltb24gbmVtIMOpcmhldMWRIGVsXG4iCisiICAgIC1wIC0tcGFyc2FibGUgICAgICAgIEtpbWVuZXQgZmVsZG9sZ296aGF0w7MgZm9ybcOhYmFuXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjY2MAorbXNnaWQgIiIKKyIgICAgLWsgLS1uby1kYi1sb29rdXAgICAgRG9uJ3QgbG9va3VwIHNlcnZpY2UgdHlwZXNcbiIKKyIgICAgLWIgLS1kdW1wLWRiICAgICAgICAgRHVtcCBzZXJ2aWNlIHR5cGUgZGF0YWJhc2VcbiIKK21zZ3N0ciAiIgorIiAgICAtayAtLW5vLWRiLWxvb2t1cCAgICBOZSBrZXJlc3NlIGtpIGEgc3pvbGfDoWx0YXTDoXN0w61wdXNva2F0XG4iCisiICAgIC1iIC0tZHVtcC1kYiAgICAgICAgIFN6b2xnw6FsdGF0w6FzdMOtcHVzLWFkYXRiw6F6aXMga2nDrXLDoXNhXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjc2NiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvbyBmZXcgYXJndW1lbnRzXG4iCittc2dzdHIgIlTDumwga2V2w6lzIHBhcmFtw6l0ZXJcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6ODIxIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozNzgKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyNjQgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIHNpbXBsZSBwb2xsIG9iamVjdC5cbiIKK21zZ3N0ciAiQXogZWd5c3plcsWxIGxla8OpcmRlesOpc2kgb2JqZWt0dW0gbMOpdHJlaG96w6FzYSBtZWdoacO6c3VsdC5cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkVzdGFibGlzaGVkIHVuZGVyIG5hbWUgJyVzJ1xuIgorbXNnc3RyICJMw6l0cmVob3p2YSBlemVuIG7DqXYgYWxhdHQ6IOKAniVz4oCdXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo4MQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXI6ICVzXG4iCittc2dzdHIgIkEgcmVnaXN6dHLDoWNpw7MgbWVnaGnDunN1bHQ6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICJOYW1lIGNvbGxpc2lvbiwgcGlja2luZyBuZXcgbmFtZSAnJXMnLlxuIgorbXNnc3RyICJOw6l2w7x0a8O2esOpcywgw7pqIG7DqXYgdsOhbGFzenTDoXNhOiDigJ4lc+KAnS5cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGVudHJ5IGdyb3VwOiAlc1xuIgorbXNnc3RyICJBIGJlamVneXrDqXNjc29wb3J0IGzDqXRyZWhvesOhc2EgbWVnaGnDunN1bHQ6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBhZGRyZXNzOiAlc1xuIgorbXNnc3RyICJBIGPDrW0gaG96esOhYWTDoXNhIG1lZ2hpw7pzdWx0OiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgc2VydmljZTogJXNcbiIKK21zZ3N0ciAiQSBzem9sZ8OhbHRhdMOhcyBob3p6w6FhZMOhc2EgbWVnaGnDunN1bHQ6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBzdWJ0eXBlICclcyc6ICVzXG4iCittc2dzdHIgIkF6IGFsdMOtcHVzICjigJ4lc+KAnSkgaG96esOhYWTDoXNhIG1lZ2hpw7pzdWx0OiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkhvc3QgbmFtZSBjb25mbGljdFxuIgorbXNnc3RyICJHw6lwbsOpdsO8dGvDtnrDqXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgW29wdGlvbnNdICVzIDxuYW1lPiA8dHlwZT4gPHBvcnQ+IFs8dHh0IC4uLj5dXG4iCisiJXMgW29wdGlvbnNdICVzIDxob3N0LW5hbWU+IDxhZGRyZXNzPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLXMgLS1zZXJ2aWNlICAgICAgICAgUHVibGlzaCBzZXJ2aWNlXG4iCisiICAgIC1hIC0tYWRkcmVzcyAgICAgICAgIFB1Ymxpc2ggYWRkcmVzc1xuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBFbmFibGUgdmVyYm9zZSBtb2RlXG4iCisiICAgIC1kIC0tZG9tYWluPURPTUFJTiAgIERvbWFpbiB0byBwdWJsaXNoIHNlcnZpY2UgaW5cbiIKKyIgICAgLUggLS1ob3N0PURPTUFJTiAgICAgSG9zdCB3aGVyZSBzZXJ2aWNlIHJlc2lkZXNcbiIKKyIgICAgICAgLS1zdWJ0eXBlPVNVQlRZUEUgQW4gYWRkaXRpb25hbCBzdWJ0eXBlIHRvIHJlZ2lzdGVyIHRoaXMgc2VydmljZSAiCisid2l0aFxuIgorIiAgICAtUiAtLW5vLXJldmVyc2UgICAgICBEbyBub3QgcHVibGlzaCByZXZlcnNlIGVudHJ5IHdpdGggYWRkcmVzc1xuIgorIiAgICAtZiAtLW5vLWZhaWwgICAgICAgICBEb24ndCBmYWlsIGlmIHRoZSBkYWVtb24gaXMgbm90IGF2YWlsYWJsZVxuIgorbXNnc3RyICIiCisiJXMgW2thcGNzb2zDs2tdICVzIDxuw6l2PiA8dMOtcHVzPiA8cG9ydD4gWzx0eHQg4oCmPl1cbiIKKyIlcyBba2FwY3NvbMOza10gJXMgPGfDqXBuw6l2PiA8Y8OtbT5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgRXplbiBzw7pnw7MgbWVnamVsZW7DrXTDqXNlXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFZlcnppw7NzesOhbSBtZWdqZWxlbsOtdMOpc2VcbiIKKyIgICAgLXMgLS1zZXJ2aWNlICAgICAgICAgU3pvbGfDoWx0YXTDoXMga8O2enrDqXTDqXRlbGVcbiIKKyIgICAgLWEgLS1hZGRyZXNzICAgICAgICAgQ8OtbSBrw7Z6esOpdMOpdGVsZVxuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBSw6lzemxldGVzIG3Ds2QgZW5nZWTDqWx5ZXrDqXNlXG4iCisiICAgIC1kIC0tZG9tYWluPVRBUlRPTcOBTlkgIFN6b2xnw6FsdGF0w6FzIGvDtnp6w6l0w6l0ZWxlIGViYmVuIGEgdGFydG9tw6FueWJhblxuIgorIiAgICAtSCAtLWhvc3Q9VEFSVE9Nw4FOWSAgQSBzem9sZ8OhbHRhdMOhcyBlemVuIGEgZ8OpcGVuIHRhbMOhbGhhdMOzXG4iCisiICAgICAgIC0tc3VidHlwZT1BTFTDjVBVUyBUb3bDoWJiaSBhbHTDrXB1cywgYW1lbGx5ZWwgYSBzem9sZ8OhbHRhdMOhcyAiCisicmVnaXN6dHLDoWxhbmTDs1xuIgorIiAgICAtZiAtLW5vLWZhaWwgICAgICAgICBOZSBoaWLDoXp6b24sIGhhIGEgZMOpbW9uIG5lbSDDqXJoZXTFkSBlbFxuIgorIiAgICAtUiAtLW5vLXJldmVyc2UgICAgICBOZSB0ZWd5ZSBrw7Z6esOpIGEgZm9yZMOtdG90dCBiZWplZ3l6w6lzdCBjw61tbWVsXG4iCisiICAgIC1mIC0tbm8tZmFpbCAgICAgICAgIE5lIGhpYsOhenpvbiwgaGEgYSBkw6ltb24gbmVtIMOpcmhldMWRIGVsXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozMDMgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjMxOAorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgbnVtYmVyIG9mIGFyZ3VtZW50c1xuIgorbXNnc3RyICJBIHBhcmFtw6l0ZXJlayBzesOhbWEgbmVtIG1lZ2ZlbGVsxZFcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjMyOQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcGFyc2UgcG9ydCBudW1iZXI6ICVzXG4iCittc2dzdHIgIkEgcG9ydHN6w6FtIGZlbGRvbGdvesOhc2EgbWVnaGnDunN1bHQ6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozNjEgLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI0NgorIywgYy1mb3JtYXQKK21zZ2lkICJObyBjb21tYW5kIHNwZWNpZmllZC5cbiIKK21zZ3N0ciAiTmluY3MgbWVnYWR2YSBwYXJhbmNzLlxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgaG9zdCBuYW1lICclcyc6ICVzXG4iCittc2dzdHIgIkEgZ8OpcG7DqXYgKOKAniVz4oCdKSBmZWxvbGTDoXNhIG1lZ2hpw7pzdWx0OiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIGFkZHJlc3MgJyVzJzogJXNcbiIKK21zZ3N0ciAiQSBjw61tICjigJ4lc+KAnSkgZmVsb2xkw6FzYSBtZWdoacO6c3VsdDogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjE1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgW29wdGlvbnNdICVzIDxob3N0IG5hbWUgLi4uPlxuIgorIiVzIFtvcHRpb25zXSAlcyA8YWRkcmVzcyAuLi4gPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLW4gLS1uYW1lICAgICAgICAgICAgUmVzb2x2ZSBob3N0IG5hbWVcbiIKKyIgICAgLWEgLS1hZGRyZXNzICAgICAgICAgUmVzb2x2ZSBhZGRyZXNzXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKKyIgICAgLTYgICAgICAgICAgICAgICAgICAgTG9va3VwIElQdjYgYWRkcmVzc1xuIgorIiAgICAtNCAgICAgICAgICAgICAgICAgICBMb29rdXAgSVB2NCBhZGRyZXNzXG4iCittc2dzdHIgIiIKKyIlcyBba2FwY3NvbMOza10gJXMgPGfDqXBuw6l2IOKApj5cbiIKKyIlcyBba2FwY3NvbMOza10gJXMgPGPDrW0g4oCmID5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgRXplbiBzw7pnw7MgbWVnamVsZW7DrXTDqXNlXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFZlcnppw7NzesOhbSBtZWdqZWxlbsOtdMOpc2VcbiIKKyIgICAgLW4gLS1uYW1lICAgICAgICAgICAgR8OpcG7DqXYgZmVsb2xkw6FzYVxuIgorIiAgICAtYSAtLWFkZHJlc3MgICAgICAgICBDw61tIGZlbG9sZMOhc2FcbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgUsOpc3psZXRlcyBtw7NkIGVuZ2Vkw6lseWV6w6lzZVxuIgorIiAgICAtNiAgICAgICAgICAgICAgICAgICBJUHY2IGPDrW0ga2lrZXJlc8Opc2VcbiIKKyIgICAgLTQgICAgICAgICAgICAgICAgICAgSVB2NCBjw61tIGtpa2VyZXPDqXNlXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyOTkgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE4MQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGhvc3QgbmFtZSByZXNvbHZlcjogJXNcbiIKK21zZ3N0ciAiQSBnw6lwbsOpdmZlbG9sZMOzIGzDqXRyZWhvesOhc2EgbWVnaGnDunN1bHQ6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzozMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIGFkZHJlc3MgJyVzJ1xuIgorbXNnc3RyICJBIGPDrW0gKOKAniVz4oCdKSBmZWxkb2xnb3rDoXNhIG1lZ2hpw7pzdWx0XG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzozMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBhZGRyZXNzIHJlc29sdmVyOiAlc1xuIgorbXNnc3RyICJBIGPDrW1mZWxvbGTDsyBsw6l0cmVob3rDoXNhIG1lZ2hpw7pzdWx0OiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFtvcHRpb25zXSA8bmV3IGhvc3QgbmFtZT5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgU2hvdyB2ZXJzaW9uXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKK21zZ3N0ciAiIgorIiVzIFtrYXBjc29sw7NrXSA8w7pqIGfDqXBuw6l2PlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBFemVuIHPDumfDsyBtZWdqZWxlbsOtdMOpc2VcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgVmVyemnDs3N6w6FtIG1lZ2plbGVuw610w6lzZVxuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBSw6lzemxldGVzIG3Ds2QgZW5nZWTDqWx5ZXrDqXNlXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzLCBleHBlY3RpbmcgZXhhY3RseSBvbmUuXG4iCittc2dzdHIgIsOJcnbDqW55dGVsZW4gc3rDoW3DuiBhcmd1bWVudHVtLCBwb250b3NhbiBlZ3kgc3rDvGtzw6lnZXMuXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSG9zdCBuYW1lIHN1Y2Nlc3NmdWxseSBjaGFuZ2VkIHRvICVzXG4iCittc2dzdHIgIkEgZ8OpcG7DqXYgc2lrZXJlc2VuIG3Ds2Rvc8OtdHZhIGEga8O2dmV0a2V6xZFyZTogJXNcbiIKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9wby9pZC5wbyBiL2F2YWhpLTAuNi4zMS9wby9pZC5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDU2YmFhCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL3BvL2lkLnBvCkBAIC0wLDAgKzEsODU2IEBACisjIEluZG9uZXNpYW4gdHJhbnNsYXRpb24gZm9yIGF2YWhpLgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgYXZhaGkncyBDT1BZUklHSFQgSE9MREVSCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBhdmFoaSBwYWNrYWdlLgorIyBBbmRpa2EgVHJpd2lkYWRhIDxhbmRpa2FAZ21haWwuY29tPiwgMjAxMC4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGF2YWhpIG1hc3RlclxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMS0wNC0wMiAwMzoyMyswMjAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxMC0wOC0xNSAxMjowMSswNzAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBBbmRpa2EgVHJpd2lkYWRhIDxhbmRpa2FAZ21haWwuY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IEdOT01FIEluZG9uZXNpYW4gVHJhbnNsYXRpb24gVGVhbSA8Z25vbWVAaTE1bi5vcmc+XG4iCisiTGFuZ3VhZ2U6IFxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MTsgcGx1cmFsPTA7XG4iCisiWC1Qb2VkaXQtTGFuZ3VhZ2U6IEluZG9uZXNpYW5cbiIKKyJYLVBvZWRpdC1Db3VudHJ5OiBJbmRvbmVzaWFcbiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzAKK21zZ2lkICJPSyIKK21zZ3N0ciAiT0siCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjMxCittc2dpZCAiT3BlcmF0aW9uIGZhaWxlZCIKK21zZ3N0ciAiT3BlcmFzaSBnYWdhbCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzIKK21zZ2lkICJCYWQgc3RhdGUiCittc2dzdHIgIktlYWRhYW4gYnVydWsiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjMzCittc2dpZCAiSW52YWxpZCBob3N0IG5hbWUiCittc2dzdHIgIk5hbWEgaG9zdCB0YWsgdmFsaWQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM0Cittc2dpZCAiSW52YWxpZCBkb21haW4gbmFtZSIKK21zZ3N0ciAiTmFtYSBkb21haW4gdGFrIHZhbGlkIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozNQorbXNnaWQgIk5vIHN1aXRhYmxlIG5ldHdvcmsgcHJvdG9jb2wgYXZhaWxhYmxlIgorbXNnc3RyICJUYWsgYWRhIHByb3Rva29sIGphcmluZ2FuIHlhbmcgY29jb2siCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM2Cittc2dpZCAiSW52YWxpZCBETlMgVFRMIgorbXNnc3RyICJUVEwgRE5TIHRhayB2YWxpZCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzcKK21zZ2lkICJSZXNvdXJjZSByZWNvcmQga2V5IGlzIHBhdHRlcm4iCittc2dzdHIgIkt1bmNpIHJlc291cmNlIHJlY29yZCBhZGFsYWggcG9sYSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzgKK21zZ2lkICJMb2NhbCBuYW1lIGNvbGxpc2lvbiIKK21zZ3N0ciAiVGFicmFrYW4gbmFtYSBsb2thbCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzkKK21zZ2lkICJJbnZhbGlkIHJlY29yZCIKK21zZ3N0ciAiUmVjb3JkIHRhayB2YWxpZCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDEKK21zZ2lkICJJbnZhbGlkIHNlcnZpY2UgbmFtZSIKK21zZ3N0ciAiTmFtYSBsYXlhbmFuIHRhayB2YWxpZCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDIKK21zZ2lkICJJbnZhbGlkIHNlcnZpY2UgdHlwZSIKK21zZ3N0ciAiSmVuaXMgbGF5YW5hbiB0YWsgdmFsaWQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQzCittc2dpZCAiSW52YWxpZCBwb3J0IG51bWJlciIKK21zZ3N0ciAiTm9tb3IgcG9ydCB0YWsgdmFsaWQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQ0Cittc2dpZCAiSW52YWxpZCByZWNvcmQga2V5IgorbXNnc3RyICJLdW5jaSByZWNvcmQgdGFrIHZhbGlkIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NQorbXNnaWQgIkludmFsaWQgYWRkcmVzcyIKK21zZ3N0ciAiQWxhbWF0IHRpZGFrIHZhbGlkIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NgorbXNnaWQgIlRpbWVvdXQgcmVhY2hlZCIKK21zZ3N0ciAiV2FrdHUgdHVuZ2d1IGhhYmlzIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NworbXNnaWQgIlRvbyBtYW55IGNsaWVudHMiCittc2dzdHIgIlRlcmxhbHUgYmFueWFrIGtsaWVuIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0OAorbXNnaWQgIlRvbyBtYW55IG9iamVjdHMiCittc2dzdHIgIlRlcmxhbHUgYmFueWFrIG9iamVrIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0OQorbXNnaWQgIlRvbyBtYW55IGVudHJpZXMiCittc2dzdHIgIlRlcmxhbHUgYmFueWFrIGVudHJpIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1MAorbXNnaWQgIk9TIEVycm9yIgorbXNnc3RyICJHYWxhdCBPUyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTIKK21zZ2lkICJBY2Nlc3MgZGVuaWVkIgorbXNnc3RyICJBa3NlcyBkaXRvbGFrIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1MworbXNnaWQgIkludmFsaWQgb3BlcmF0aW9uIgorbXNnc3RyICJPcGVyYXNpIHRpZGFrIHZhbGlkIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1NAorbXNnaWQgIkFuIHVuZXhwZWN0ZWQgRC1CdXMgZXJyb3Igb2NjdXJlZCIKK21zZ3N0ciAiVGVyamFkaSBnYWxhdCBELUJ1cyB5YW5nIHRhayBkaWhhcmFwa2FuIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1NQorbXNnaWQgIkRhZW1vbiBjb25uZWN0aW9uIGZhaWxlZCIKK21zZ3N0ciAiS29uZWtzaSBkYWVtb24gZ2FnYWwiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU2Cittc2dpZCAiTWVtb3J5IGV4aGF1c3RlZCIKK21zZ3N0ciAiS2VoYWJpc2FuIG1lbW9yaSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTcKK21zZ2lkICJUaGUgb2JqZWN0IHBhc3NlZCBpbiB3YXMgbm90IHZhbGlkIgorbXNnc3RyICJPYmplayB5YW5nIGRpbGV3YXRrYW4gdGFrIHZhbGlkIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1OAorbXNnaWQgIkRhZW1vbiBub3QgcnVubmluZyIKK21zZ3N0ciAiRGFlbW9uIHRhayBiZXJqYWxhbiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTkKK21zZ2lkICJJbnZhbGlkIGludGVyZmFjZSBpbmRleCIKK21zZ3N0ciAiSW5kZWtzIGFudGFybXVrYSB0YWsgdmFsaWQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjYwCittc2dpZCAiSW52YWxpZCBwcm90b2NvbCBzcGVjaWZpY2F0aW9uIgorbXNnc3RyICJTcGVzaWZpa2FzaSBwcm90b2tvbCB0YWsgdmFsaWQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjYxCittc2dpZCAiSW52YWxpZCBmbGFncyIKK21zZ3N0ciAiRmxhZyB0YWsgdmFsaWQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjYzCittc2dpZCAiTm90IGZvdW5kIgorbXNnc3RyICJUaWRhayBkaXRlbXVrYW4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY0Cittc2dpZCAiSW52YWxpZCBjb25maWd1cmF0aW9uIgorbXNnc3RyICJLb25maWd1cmFzaSB0YWsgdmFsaWQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY1Cittc2dpZCAiVmVyc2lvbiBtaXNtYXRjaCIKK21zZ3N0ciAiVmVyc2kgdGFrIGNvY29rIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2NgorbXNnaWQgIkludmFsaWQgc2VydmljZSBzdWJ0eXBlIgorbXNnc3RyICJTdWIgamVuaXMgbGF5YW5hbiB0YWsgdmFsaWQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY3Cittc2dpZCAiSW52YWxpZCBwYWNrZXQiCittc2dzdHIgIlBha2V0IHRhayB2YWxpZCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjgKK21zZ2lkICJJbnZhbGlkIEROUyByZXR1cm4gY29kZSIKK21zZ3N0ciAiS29kZSBiYWxpa2FuIEROUyB0YWsgdmFsaWQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY5Cittc2dpZCAiRE5TIGZhaWx1cmU6IEZPUk1FUlIiCittc2dzdHIgIktlZ2FnYWxhbiBETlM6IEZPUk1FUlIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjcwCittc2dpZCAiRE5TIGZhaWx1cmU6IFNFUlZGQUlMIgorbXNnc3RyICJLZWdhZ2FsYW4gRE5TOiBTRVJWRkFJTCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzEKK21zZ2lkICJETlMgZmFpbHVyZTogTlhET01BSU4iCittc2dzdHIgIktlZ2FnYWxhbiBETlM6IE5YRE9NQUlOIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3MgorbXNnaWQgIkROUyBmYWlsdXJlOiBOT1RJTVAiCittc2dzdHIgIktlZ2FnYWxhbiBETlM6IE5PVElNUCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzQKK21zZ2lkICJETlMgZmFpbHVyZTogUkVGVVNFRCIKK21zZ3N0ciAiS2VnYWdhbGFuIEROUzogUkVGVVNFRCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzUKK21zZ2lkICJETlMgZmFpbHVyZTogWVhET01BSU4iCittc2dzdHIgIktlZ2FnYWxhbiBETlM6IFlYRE9NQUlOIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3NgorbXNnaWQgIkROUyBmYWlsdXJlOiBZWFJSU0VUIgorbXNnc3RyICJLZWdhZ2FsYW4gRE5TOiBZWFJSU0VUIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3NworbXNnaWQgIkROUyBmYWlsdXJlOiBOWFJSU0VUIgorbXNnc3RyICJLZWdhZ2FsYW4gRE5TOiBOWFJSU0VUIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3OAorbXNnaWQgIkROUyBmYWlsdXJlOiBOT1RBVVRIIgorbXNnc3RyICJLZWdhZ2FsYW4gRE5TOiBOT1RBVVRIIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3OQorbXNnaWQgIkROUyBmYWlsdXJlOiBOT1RaT05FIgorbXNnc3RyICJLZWdhZ2FsYW4gRE5TOiBOT1RaT05FIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4MAorbXNnaWQgIkludmFsaWQgUkRBVEEiCittc2dzdHIgIlJEQVRBIHRhayB2YWxpZCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODEKK21zZ2lkICJJbnZhbGlkIEROUyB0eXBlIgorbXNnc3RyICJKZW5pcyBETlMgdGFrIHZhbGlkIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4MgorbXNnaWQgIkludmFsaWQgRE5TIGNsYXNzIgorbXNnc3RyICJLZWxhcyBETlMgdGFrIHZhbGlkIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4MworbXNnaWQgIk5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIlRpZGFrIGRpZHVrdW5nIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4NQorbXNnaWQgIk5vdCBwZXJtaXR0ZWQiCittc2dzdHIgIlRpZGFrIGRpaWppbmthbiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODYKK21zZ2lkICJJbnZhbGlkIGFyZ3VtZW50IgorbXNnc3RyICJBcmd1bWVuIHRpZGFrIHZhbGlkIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4NworbXNnaWQgIklzIGVtcHR5IgorbXNnc3RyICJLb3NvbmciCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjg4Cittc2dpZCAiVGhlIHJlcXVlc3RlZCBvcGVyYXRpb24gaXMgaW52YWxpZCBiZWNhdXNlIHJlZHVuZGFudCIKK21zZ3N0ciAiT3BlcmFzaSB5YW5nIGRpbWludGEgdGFrIHZhbGlkIGthcmVuYSByZWR1bmRhbiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6OTQKK21zZ2lkICJJbnZhbGlkIEVycm9yIENvZGUiCittc2dzdHIgIktvZGUgR2FsYXQgVGFrIFZhbGlkIgorCisjOiAuLi9hdmFoaS1kaXNjb3Zlci1zdGFuZGFsb25lL2F2YWhpLWRpc2NvdmVyLnVpLmg6MQorIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5Ojc2Cittc2dpZCAiPGk+Tm8gc2VydmljZSBjdXJyZW50bHkgc2VsZWN0ZWQuPC9pPiIKK21zZ3N0ciAiPGk+VGFrIGFkYSBsYXlhbmFuIHlhbmcga2luaSBkaXBpbGloLjwvaT4iCisKKyM6IC4uL2F2YWhpLWRpc2NvdmVyLXN0YW5kYWxvbmUvYXZhaGktZGlzY292ZXIudWkuaDoyCittc2dpZCAiQXZhaGkgRGlzY292ZXJ5IgorbXNnc3RyICJQZW5lbXVhbiBBdmFoaSIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLmRlc2t0b3AuaW4uaW4uaDoxCittc2dpZCAiQXZhaGkgWmVyb2NvbmYgQnJvd3NlciIKK21zZ3N0ciAiUGVyYW1iYW4gWmVyb2NvbmYgQXZhaGkiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5kZXNrdG9wLmluLmluLmg6MgorbXNnaWQgIkJyb3dzZSBmb3IgWmVyb2NvbmYgc2VydmljZXMgYXZhaWxhYmxlIG9uIHlvdXIgbmV0d29yayIKK21zZ3N0ciAiUmFtYmFuIGxheWFuYW4gWmVyb2NvbmYgeWFuZyB0ZXJzZWRpYSBwYWRhIGphcmluZ2FuIEFuZGEiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMjQKK21zZ2lkICJUWFQiCittc2dzdHIgIlRYVCIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIyNgorbXNnaWQgIlRYVCBEYXRhOiIKK21zZ3N0ciAiRGF0YSBUWFQ6IgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI2Cittc2dpZCAiZW1wdHkiCittc2dzdHIgImtvc29uZyIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIyOAorbXNnaWQgIlNlcnZpY2UgVHlwZToiCittc2dzdHIgIkplbmlzIExheWFuYW46IgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI5Cittc2dpZCAiU2VydmljZSBOYW1lOiIKK21zZ3N0ciAiTmFtYSBMYXlhbmFuOiIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIzMAorbXNnaWQgIkRvbWFpbiBOYW1lOiIKK21zZ3N0ciAiTmFtYSBEb21haW46IgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjMxCittc2dpZCAiSW50ZXJmYWNlOiIKK21zZ3N0ciAiQW50YXJtdWthOiIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIzMgorbXNnaWQgIkFkZHJlc3M6IgorbXNnc3RyICJBbGFtYXQ6IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE4NQorbXNnaWQgIkJyb3dzZSBTZXJ2aWNlIFR5cGVzIgorbXNnc3RyICJSYW1iYW4gSmVuaXMgTGF5YW5hbiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxODUKK21zZ2lkICJBIE5VTEwgdGVybWluYXRlZCBsaXN0IG9mIHNlcnZpY2UgdHlwZXMgdG8gYnJvd3NlIGZvciIKK21zZ3N0ciAiU3VhdHUgZGFmdGFyIGJlcmFraGlyYW4gTlVMTCBkYXJpIGplbmlzIGxheWFuYW4gdW50dWsgZGlyYW1iYW4iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTkwCittc2dpZCAiRG9tYWluIgorbXNnc3RyICJEb21haW4iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTkwCittc2dpZCAiVGhlIGRvbWFpbiB0byBicm93c2UgaW4sIG9yIE5VTEwgZm9yIHRoZSBkZWZhdWx0IGRvbWFpbiIKK21zZ3N0ciAiRG9tYWluIHVudHVrIGRpcmFtYmFuLCBhdGF1IE5VTEwgdW50dWsgZG9tYWluIGJhd2FhbiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxOTYKK21zZ2lkICJTZXJ2aWNlIFR5cGUiCittc2dzdHIgIkplbmlzIExheWFuYW4iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTk2Cittc2dpZCAiVGhlIHNlcnZpY2UgdHlwZSBvZiB0aGUgc2VsZWN0ZWQgc2VydmljZSIKK21zZ3N0ciAiSmVuaXMgbGF5YW5hbiBkYXJpIGxheWFuYW4geWFuZyBkaXBpbGloIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIwMiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjEwMjMKK21zZ2lkICJTZXJ2aWNlIE5hbWUiCittc2dzdHIgIk5hbWEgTGF5YW5hbiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMDIKK21zZ2lkICJUaGUgc2VydmljZSBuYW1lIG9mIHRoZSBzZWxlY3RlZCBzZXJ2aWNlIgorbXNnc3RyICJOYW1hIGxheWFuYW4gZGFyaSBsYXlhbmFuIHlhbmcgZGlwaWxpaCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMDgKK21zZ2lkICJBZGRyZXNzIgorbXNnc3RyICJBbGFtYXQiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjA4Cittc2dpZCAiVGhlIGFkZHJlc3Mgb2YgdGhlIHJlc29sdmVkIHNlcnZpY2UiCittc2dzdHIgIkFsYW1hdCBkYXJpIGxheWFuYW4geWFuZyBkaS1yZXNvbHZlIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIxMworbXNnaWQgIlBvcnQiCittc2dzdHIgIlBvcnQiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjEzCittc2dpZCAiVGhlIElQIHBvcnQgbnVtYmVyIG9mIHRoZSByZXNvbHZlZCBzZXJ2aWNlIgorbXNnc3RyICJOb21vciBwb3J0IElQIGRhcmkgbGF5YW5hbiB5YW5nIGRpLXJlc29sdmUiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjE5Cittc2dpZCAiSG9zdCBOYW1lIgorbXNnc3RyICJOYW1hIEhvc3QiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjE5Cittc2dpZCAiVGhlIGhvc3QgbmFtZSBvZiB0aGUgcmVzb2x2ZWQgc2VydmljZSIKK21zZ3N0ciAiTmFtYSBob3N0IGRhcmkgbGF5YW5hbiB5YW5nIGRpLXJlc29sdmUiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjI1Cittc2dpZCAiVFhUIERhdGEiCittc2dzdHIgIkRhdGEgVFhUIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIyNQorbXNnaWQgIlRoZSBUWFQgZGF0YSBvZiB0aGUgcmVzb2x2ZWQgc2VydmljZSIKK21zZ3N0ciAiRGF0YSBUWFQgZGFyaSBsYXlhbmFuIHlhbmcgZGktcmVzb2x2ZSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMzAKK21zZ2lkICJSZXNvbHZlIFNlcnZpY2UiCittc2dzdHIgIlJlc29sdmUgTGF5YW5hbiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMzAKK21zZ2lkICJSZXNvbHZlIHRoZSBzZWxlY3RlZCBzZXJ2aWNlIGF1dG9tYXRpY2FsbHkgYmVmb3JlIHJldHVybmluZyIKK21zZ3N0ciAiUmVzb2x2ZSBsYXlhbmFuIHlhbmcgZGlwaWxpaCBzZWNhcmEgb3RvbWF0aXMgc2ViZWx1bSBrZW1iYWxpIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIzNgorbXNnaWQgIlJlc29sdmUgU2VydmljZSBIb3N0IE5hbWUiCittc2dzdHIgIlJlc29sdmUgTmFtYSBIb3N0IExheWFuYW4iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjM2Cittc2dpZCAiIgorIlJlc29sdmUgdGhlIGhvc3QgbmFtZSBvZiB0aGUgc2VsZWN0ZWQgc2VydmljZSBhdXRvbWF0aWNhbGx5IGJlZm9yZSByZXR1cm5pbmciCittc2dzdHIgIiIKKyJSZXNvbHZlIG5hbWEgaG9zdCBkYXJpIGxheWFuYW4geWFuZyBkaXBpbGloIHNlY2FyYSBvdG9tYXRpcyBzZWJlbHVtIGtlbWJhbGkiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjQyCittc2dpZCAiQWRkcmVzcyBmYW1pbHkiCittc2dzdHIgIkZhbWlsaSBhbGFtYXQiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjQyCittc2dpZCAiVGhlIGFkZHJlc3MgZmFtaWx5IGZvciBob3N0IG5hbWUgcmVzb2x1dGlvbiIKK21zZ3N0ciAiRmFtaWxpIGFsYW1hdCBiYWdpIHJlc29sdXNpIG5hbWEgaG9zdCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzozMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaGkgY2xpZW50IGZhaWx1cmU6ICVzIgorbXNnc3RyICJLZWdhZ2FsYW4ga2xpZW4gQXZhaGk6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjM4OAorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFoaSByZXNvbHZlciBmYWlsdXJlOiAlcyIKK21zZ3N0ciAiS2VnYWdhbGFuIHJlc29sdmVyIEF2YWhpOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo1MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJvd3NpbmcgZm9yIHNlcnZpY2UgdHlwZSAlcyBpbiBkb21haW4gJXMgZmFpbGVkOiAlcyIKK21zZ3N0ciAiTWVyYW1iYW4gamVuaXMgbGF5YW5hbiAlcyBwYWRhIGRvbWFpbiAlcyBnYWdhbDogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NTE5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjE2OAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTY5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjE3OAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTc5Cittc2dpZCAibi9hIgorbXNnc3RyICJuL2EiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWhpIGRvbWFpbiBicm93c2VyIGZhaWx1cmU6ICVzIgorbXNnc3RyICJLZWdhZ2FsYW4gcGVyYW1iYW4gZG9tYWluIEF2YWhpOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo2ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlYWQgQXZhaGkgZG9tYWluOiAlcyIKK21zZ3N0ciAiR2FnYWwgbWVtYmFjYSBkb21haW4gQXZhaGk6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjcwNgorbXNnaWQgIkJyb3dzZSBzZXJ2aWNlIHR5cGUgbGlzdCBpcyBlbXB0eSEiCittc2dzdHIgIkRhZnRhciBqZW5pcyBsYXlhbmFuIHJhbWJhbiBrb3NvbmchIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjcxNworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY29ubmVjdCB0byBBdmFoaSBzZXJ2ZXI6ICVzIgorbXNnc3RyICJHYWdhbCBtZW55YW1idW5nIGtlIHNlcnZlciBBdmFoaTogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NzM1Cittc2dpZCAiQnJvd3NpbmcgZm9yIHNlcnZpY2VzIG9uIDxiPmxvY2FsIG5ldHdvcms8L2I+OiIKK21zZ3N0ciAiTWVyYW1iYW4gbGF5YW5hbiBwYWRhIDxiPmphcmluZ2FuIGxva2FsPC9iPjoiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NzM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyb3dzaW5nIGZvciBzZXJ2aWNlcyBpbiBkb21haW4gPGI+JXM8L2I+OiIKK21zZ3N0ciAiTWVyYW1iYW4gbGF5YW5hbiBwYWRhIGRvbWFpbiA8Yj4lczwvYj46IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjc3MworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGJyb3dzZXIgZm9yICVzOiAlcyIKK21zZ3N0ciAiR2FnYWwgbWVtYnVhdCBwZXJhbWJhbiBiYWdpICVzOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo5MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSByZXNvbHZlciBmb3IgJXMgb2YgdHlwZSAlcyBpbiBkb21haW4gJXM6ICVzIgorbXNnc3RyICJHYWdhbCBtZW1idWF0IHJlc29sdmVyIGJhZ2kgJXMgZGVuZ2FuIGplbmlzICVzIHBhZGEgZG9tYWluICVzOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo5NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBkb21haW4gYnJvd3NlcjogJXMiCittc2dzdHIgIkdhZ2FsIG1lbWJ1YXQgcGVyYW1iYW4gZG9tYWluOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo5ODkKK21zZ2lkICJDaGFuZ2UgZG9tYWluIgorbXNnc3RyICJVYmFoIGRvbWFpbiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMDMxIC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTE2MgorbXNnaWQgIkJyb3dzaW5nLi4uIgorbXNnc3RyICJNZXJhbWJhbi4uLiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTIwCittc2dpZCAiSW5pdGlhbGl6aW5nLi4uIgorbXNnc3RyICJNZW5naW5pc2lhbGlzYXNpLi4uIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNDQKK21zZ2lkICJMb2NhdGlvbiIKK21zZ3N0ciAiTG9rYXNpIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNDkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTUzCittc2dpZCAiTmFtZSIKK21zZ3N0ciAiTmFtYSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTU0IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU1MworbXNnaWQgIlR5cGUiCittc2dzdHIgIkplbmlzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNjYKK21zZ2lkICJfRG9tYWluLi4uIgorbXNnc3RyICJfRG9tYWluLi4uIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFtvcHRpb25zXVxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtcyAtLXNzaCAgICAgICAgICAgICBCcm93c2UgU1NIIHNlcnZlcnNcbiIKKyIgICAgLXYgLS12bmMgICAgICAgICAgICAgQnJvd3NlIFZOQyBzZXJ2ZXJzXG4iCisiICAgIC1TIC0tc2hlbGwgICAgICAgICAgIEJyb3dzZSBib3RoIFNTSCBhbmQgVk5DXG4iCisiICAgIC1kIC0tZG9tYWluPURPTUFJTiAgIFRoZSBkb21haW4gdG8gYnJvd3NlIGluXG4iCittc2dzdHIgIiIKKyIlcyBbb3BzaV1cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgVGFtcGlsa2FuIGJhbnR1YW4gaW5pXG4iCisiICAgIC1zIC0tc3NoICAgICAgICAgICAgIFJhbWJhbiBzZXJ2ZXIgU1NIXG4iCisiICAgIC12IC0tdm5jICAgICAgICAgICAgIFJhbWJhbiBzZXJ2ZXIgVk5DXG4iCisiICAgIC1TIC0tc2hlbGwgICAgICAgICAgIFJhbWJhbiBTU0ggZGFuIFZOQ1xuIgorIiAgICAtZCAtLWRvbWFpbj1ET01BSU4gICBEb21haW4gdW50dWsgZGlyYW1iYW5cbiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjEwMSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo3NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG9vIG1hbnkgYXJndW1lbnRzXG4iCittc2dzdHIgIlRlcmxhbHUgYmFueWFrIGFyZ3VtZW5cbiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE0OQorbXNnaWQgIkNob29zZSBTaGVsbCBTZXJ2ZXIiCittc2dzdHIgIlBpbGloIFNlcnZlciBTaGVsbCIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE1MQorbXNnaWQgIkRlc2t0b3AiCittc2dzdHIgIkRlc2t0b3AiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNTIKK21zZ2lkICJUZXJtaW5hbCIKK21zZ3N0ciAiVGVybWluYWwiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNTYKK21zZ2lkICJDaG9vc2UgVk5DIHNlcnZlciIKK21zZ3N0ciAiUGlsaWggc2VydmVyIFZOQyIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE2MQorbXNnaWQgIkNob29zZSBTU0ggc2VydmVyIgorbXNnc3RyICJQaWxpaCBzZXJ2ZXIgU1NIIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbm5lY3RpbmcgdG8gJyVzJyAuLi5cbiIKK21zZ3N0ciAiTWVueWFtYnVuZyBrZSAnJXMnIC4uLlxuIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MjQwCisjLCBjLWZvcm1hdAorbXNnaWQgImV4ZWNscCgpIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAiZXhlY2xwKCkgZ2FnYWw6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FuY2VsZWQuXG4iCittc2dzdHIgIkRpYmF0YWxrYW4uXG4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guZGVza3RvcC5pbi5pbi5oOjEKK21zZ2lkICJBdmFoaSBTU0ggU2VydmVyIEJyb3dzZXIiCittc2dzdHIgIlBlcmFtYmFuIFNlcnZlciBTU0ggQXZhaGkiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guZGVza3RvcC5pbi5pbi5oOjIKK21zZ2lkICJCcm93c2UgZm9yIFplcm9jb25mLWVuYWJsZWQgU1NIIFNlcnZlcnMiCittc2dzdHIgIk1lcmFtYmFuIFNlcnZlciBTU0ggVGVyYWt0aWZrYW4tWmVyb2NvbmYiCisKKyM6IC4uL2F2YWhpLXVpL2J2bmMuZGVza3RvcC5pbi5pbi5oOjEKK21zZ2lkICJBdmFoaSBWTkMgU2VydmVyIEJyb3dzZXIiCittc2dzdHIgIlBlcmFtYmFuIFNlcnZlciBWTkMgQXZhaGkiCisKKyM6IC4uL2F2YWhpLXVpL2J2bmMuZGVza3RvcC5pbi5pbi5oOjIKK21zZ2lkICJCcm93c2UgZm9yIFplcm9jb25mLWVuYWJsZWQgVk5DIFNlcnZlcnMiCittc2dzdHIgIk1lcmFtYmFuIFNlcnZlciBWTkMgVGVyYWt0aWZrYW4tWmVyb2NvbmYiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjEwNworIywgYy1mb3JtYXQKK21zZ2lkICI6IEFsbCBmb3Igbm93XG4iCittc2dzdHIgIjogU2VtdWEgdW50dWsgc2FhdCBpbmlcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIjogQ2FjaGUgZXhoYXVzdGVkXG4iCittc2dzdHIgIjogU2luZ2dhaGFuIGhhYmlzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjIzOSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgc2VydmljZSAnJXMnIG9mIHR5cGUgJyVzJyBpbiBkb21haW4gJyVzJzogJXNcbiIKK21zZ3N0ciAiR2FnYWwgbWVyZXNvbHZlIGxheWFuYW4gJyVzJyBkZW5nYW4gamVuaXMgJyVzJyBwYWRhIGRvbWFpbiAnJXMnOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzozNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VydmljZV9icm93c2VyIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAic2VydmljZV9icm93c2VyIGdhZ2FsOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzozNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXZhaGlfc2VydmljZV9icm93c2VyX25ldygpIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAiYXZhaGlfc2VydmljZV9icm93c2VyX25ldygpIGdhZ2FsOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VydmljZV90eXBlX2Jyb3dzZXIgZmFpbGVkOiAlc1xuIgorbXNnc3RyICJzZXJ2aWNlX3R5cGVfYnJvd3NlciBnYWdhbDogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImF2YWhpX3NlcnZpY2VfdHlwZV9icm93c2VyX25ldygpIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAiYXZhaGlfc2VydmljZV90eXBlX2Jyb3dzZXJfbmV3KCkgZ2FnYWw6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjUxOQorIywgYy1mb3JtYXQKK21zZ2lkICJhdmFoaV9kb21haW5fYnJvd3Nlcl9uZXcoKSBmYWlsZWQ6ICVzXG4iCittc2dzdHIgImF2YWhpX2RvbWFpbl9icm93c2VyX25ldygpIGdhZ2FsOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1MzUgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjM5NAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI4MCAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBxdWVyeSB2ZXJzaW9uIHN0cmluZzogJXNcbiIKK21zZ3N0ciAiR2FnYWwgbWVuZy1xdWVyeSBzdHJpbmcgdmVyc2k6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU0MCAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6Mzk5CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6Mjg1IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxNzMKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IGhvc3QgbmFtZTogJXNcbiIKK21zZ3N0ciAiR2FnYWwgbWVuZy1xdWVyeSBuYW1hIGhvc3Q6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU0NCAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6NDAzCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6Mjg5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VydmVyIHZlcnNpb246ICVzOyBIb3N0IG5hbWU6ICVzXG4iCittc2dzdHIgIlZlcnNpIHNlcnZlcjogJXM7IE5hbWEgaG9zdDogJXNcbiIKKworIy4gVHJhbnNsYXRvcnM6IFRoaXMgaXMgYSBjb2x1bW4gaGVhZGluZyB3aXRoIGFiYnJldmlhdGlvbnMgZm9yCisjLiAqICAgRXZlbnQgKCsvLSksIE5ldHdvcmsgSW50ZXJmYWNlLCBQcm90b2NvbCAoSVB2NC92NiksIERvbWFpbgorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUgSWZjZSBQcm90IERvbWFpblxuIgorbXNnc3RyICJFIElmY2UgUHJvdCBEb21haW5cbiIKKworIy4gVHJhbnNsYXRvcnM6IFRoaXMgaXMgYSBjb2x1bW4gaGVhZGluZyB3aXRoIGFiYnJldmlhdGlvbnMgZm9yCisjLiAqICAgRXZlbnQgKCsvLSksIE5ldHdvcmsgSW50ZXJmYWNlLCBQcm90b2NvbCAoSVB2NC92NiksIERvbWFpbgorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUgSWZjZSBQcm90ICUtKnMgJS0yMHMgRG9tYWluXG4iCittc2dzdHIgIkUgSWZjZSBQcm90ICUtKnMgJS0yMHMgRG9tYWluXG4iCisKKyMuIFdlIGhhdmUgYmVlbiBkaXNjb25uZWN0ZWQsIHNvIGxldCByZWNvbm5lY3QKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU4NSAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkRpc2Nvbm5lY3RlZCwgcmVjb25uZWN0aW5nIC4uLlxuIgorbXNnc3RyICJEaXB1dHVzLCBzZWRhbmcgbWVueWFtYnVuZyAuLi5cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTk5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjgyOQorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE3MCAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6Mzg2CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjcyIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBjbGllbnQgb2JqZWN0OiAlc1xuIgorbXNnc3RyICJHYWdhbCBtZW1idWF0IG9iamVrIGtsaWVuOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo2MDQgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE3NQorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjE0MyAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xpZW50IGZhaWx1cmUsIGV4aXRpbmc6ICVzXG4iCittc2dzdHIgIktlZ2FnYWxhbiBrbGllbiwga2VsdWFyOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo2MjMgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjIwNgorIywgYy1mb3JtYXQKK21zZ2lkICJXYWl0aW5nIGZvciBkYWVtb24gLi4uXG4iCittc2dzdHIgIk1lbnVuZ2d1IGRhZW1vbiAuLi5cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NjQ3Cittc2dpZCAiIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLUQgLS1icm93c2UtZG9tYWlucyAgQnJvd3NlIGZvciBicm93c2luZyBkb21haW5zIGluc3RlYWQgb2Ygc2VydmljZXNcbiIKKyIgICAgLWEgLS1hbGwgICAgICAgICAgICAgU2hvdyBhbGwgc2VydmljZXMsIHJlZ2FyZGxlc3Mgb2YgdGhlIHR5cGVcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgVGhlIGRvbWFpbiB0byBicm93c2UgaW5cbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgRW5hYmxlIHZlcmJvc2UgbW9kZVxuIgorIiAgICAtdCAtLXRlcm1pbmF0ZSAgICAgICBUZXJtaW5hdGUgYWZ0ZXIgZHVtcGluZyBhIG1vcmUgb3IgbGVzcyBjb21wbGV0ZSAiCisibGlzdFxuIgorIiAgICAtYyAtLWNhY2hlICAgICAgICAgICBUZXJtaW5hdGUgYWZ0ZXIgZHVtcGluZyBhbGwgZW50cmllcyBmcm9tIHRoZSBjYWNoZVxuIgorIiAgICAtbCAtLWlnbm9yZS1sb2NhbCAgICBJZ25vcmUgbG9jYWwgc2VydmljZXNcbiIKKyIgICAgLXIgLS1yZXNvbHZlICAgICAgICAgUmVzb2x2ZSBzZXJ2aWNlcyBmb3VuZFxuIgorIiAgICAtZiAtLW5vLWZhaWwgICAgICAgICBEb24ndCBmYWlsIGlmIHRoZSBkYWVtb24gaXMgbm90IGF2YWlsYWJsZVxuIgorIiAgICAtcCAtLXBhcnNhYmxlICAgICAgICBPdXRwdXQgaW4gcGFyc2FibGUgZm9ybWF0XG4iCittc2dzdHIgIiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgVGFtcGlsa2FuIGJhbnR1YW4gaW5pXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFRhbXBpbGthbiB2ZXJzaVxuIgorIiAgICAtRCAtLWJyb3dzZS1kb21haW5zICBNZXJhbWJhbiBkb21haW4gcmFtYmFuIHNlYmFnYWkgZ2FudGkgbGF5YW5hblxuIgorIiAgICAtYSAtLWFsbCAgICAgICAgICAgICBUYW1waWxrYW4gc2VtdWEgbGF5YW5hbiwgdGFrIHBlZHVsaSBqZW5pc255YVxuIgorIiAgICAtZCAtLWRvbWFpbj1ET01BSU4gICBEb21haW4geWFuZyBha2FuIGRpcmFtYmFuXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEFrdGlma2FuIG1vZGUgdmVyYm9zZVxuIgorIiAgICAtdCAtLXRlcm1pbmF0ZSAgICAgICBBa2hpcmkgc2V0ZWxhaCBtZW1ib25na2FyIGRhZnRhciB5YW5nIGt1cmFuZyBsZWJpaCAiCisibGVuZ2thcFxuIgorIiAgICAtYyAtLWNhY2hlICAgICAgICAgICBBa2hpcmkgc2V0ZWxhaCBtZW1ib25na2FyIHNlbXVhIGVudHJpIGRhcmkgIgorInNpbmdnYWhhblxuIgorIiAgICAtbCAtLWlnbm9yZS1sb2NhbCAgICBBYmFpa2FuIGxheWFuYW4gbG9rYWxcbiIKKyIgICAgLXIgLS1yZXNvbHZlICAgICAgICAgTGF5YW5hbiByZXNvbHZlIGRpdGVtdWthblxuIgorIiAgICAtZiAtLW5vLWZhaWwgICAgICAgICBKYW5nYW4gZ2FnYWwgYmlsYSBkYWVtb24gdGFrIHRlcnNlZGlhXG4iCisiICAgIC1wIC0tcGFyc2FibGUgICAgICAgIEtlbHVhcmFuIGRhbGFtIGJlbnR1ayB5YW5nIGRhcGF0IGRpdXJhaVxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo2NjAKK21zZ2lkICIiCisiICAgIC1rIC0tbm8tZGItbG9va3VwICAgIERvbid0IGxvb2t1cCBzZXJ2aWNlIHR5cGVzXG4iCisiICAgIC1iIC0tZHVtcC1kYiAgICAgICAgIER1bXAgc2VydmljZSB0eXBlIGRhdGFiYXNlXG4iCittc2dzdHIgIiIKKyIgICAgLWsgLS1uby1kYi1sb29rdXAgICAgSmFuZ2FuIGxpaGF0IGplbmlzIGxheWFuYW5cbiIKKyIgICAgLWIgLS1kdW1wLWRiICAgICAgICAgQm9uZ2thciBiYXNpcyBkYXRhIGplbmlzIGxheWFuYW5cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NzY2IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG9vIGZldyBhcmd1bWVudHNcbiIKK21zZ3N0ciAiQXJndW1lbiB0ZXJsYWx1IHNlZGlraXRcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6ODIxIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozNzgKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyNjQgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIHNpbXBsZSBwb2xsIG9iamVjdC5cbiIKK21zZ3N0ciAiR2FnYWwgbWVtYnVhdCBvYmplayBwb2xsIHNlZGVyaGFuYS5cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkVzdGFibGlzaGVkIHVuZGVyIG5hbWUgJyVzJ1xuIgorbXNnc3RyICJUZXJqYWxpbiBkZW5nYW4gbmFtYSAnJXMnXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo4MQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXI6ICVzXG4iCittc2dzdHIgIkdhZ2FsIG1lbmRhZnRhcjogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIk5hbWUgY29sbGlzaW9uLCBwaWNraW5nIG5ldyBuYW1lICclcycuXG4iCittc2dzdHIgIlRhYnJha2FuIG5hbWEsIG1lbmdhbWJpbCBuYW1hIGJhcnUgJyVzJy5cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGVudHJ5IGdyb3VwOiAlc1xuIgorbXNnc3RyICJHYWdhbCBtZW1idWF0IGdydXAgZW50cmk6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBhZGRyZXNzOiAlc1xuIgorbXNnc3RyICJHYWdhbCBtZW5hbWJhaCBhbGFtYXQ6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBzZXJ2aWNlOiAlc1xuIgorbXNnc3RyICJHYWdhbCBtZW5hbWJhaCBsYXlhbmFuOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgc3VidHlwZSAnJXMnOiAlc1xuIgorbXNnc3RyICJHYWdhbCBtZW5hbWJhaCBzdWIgamVuaXMgJyVzJyAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkhvc3QgbmFtZSBjb25mbGljdFxuIgorbXNnc3RyICJOYW1hIGhvc3Qga29uZmxpa1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBbb3B0aW9uc10gJXMgPG5hbWU+IDx0eXBlPiA8cG9ydD4gWzx0eHQgLi4uPl1cbiIKKyIlcyBbb3B0aW9uc10gJXMgPGhvc3QtbmFtZT4gPGFkZHJlc3M+XG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFNob3cgdmVyc2lvblxuIgorIiAgICAtcyAtLXNlcnZpY2UgICAgICAgICBQdWJsaXNoIHNlcnZpY2VcbiIKKyIgICAgLWEgLS1hZGRyZXNzICAgICAgICAgUHVibGlzaCBhZGRyZXNzXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgRG9tYWluIHRvIHB1Ymxpc2ggc2VydmljZSBpblxuIgorIiAgICAtSCAtLWhvc3Q9RE9NQUlOICAgICBIb3N0IHdoZXJlIHNlcnZpY2UgcmVzaWRlc1xuIgorIiAgICAgICAtLXN1YnR5cGU9U1VCVFlQRSBBbiBhZGRpdGlvbmFsIHN1YnR5cGUgdG8gcmVnaXN0ZXIgdGhpcyBzZXJ2aWNlICIKKyJ3aXRoXG4iCisiICAgIC1SIC0tbm8tcmV2ZXJzZSAgICAgIERvIG5vdCBwdWJsaXNoIHJldmVyc2UgZW50cnkgd2l0aCBhZGRyZXNzXG4iCisiICAgIC1mIC0tbm8tZmFpbCAgICAgICAgIERvbid0IGZhaWwgaWYgdGhlIGRhZW1vbiBpcyBub3QgYXZhaWxhYmxlXG4iCittc2dzdHIgIiIKKyIlcyBbb3BzaV0gJXMgPG5hbWE+IDxqZW5pcz4gPHBvcnQ+IFs8dHh0IC4uLj5dXG4iCisiJXMgW29wc2ldICVzIDxuYW1hLWhvc3Q+IDxhbGFtYXQ+XG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFRhbXBpbGthbiBiYW50dWFuIGluaVxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBUYW1waWxrYW4gdmVyc2lcbiIKKyIgICAgLXMgLS1zZXJ2aWNlICAgICAgICAgUHVibGlrYXNpa2FuIGxheWFuYW5cbiIKKyIgICAgLWEgLS1hZGRyZXNzICAgICAgICAgUHVibGlrYXNpa2FuIGFsYW1hdFxuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBBa3RpZmthbiBtb2RlIHZlcmJvc2VcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgRG9tYWluIHRlbXBhdCBtZW1wdWJsaWthc2lrYW4gbGF5YW5hblxuIgorIiAgICAtSCAtLWhvc3Q9RE9NQUlOICAgICBIb3N0IHRlbXBhdCBsYXlhbmFuIGJlcmFkYVxuIgorIiAgICAgICAtLXN1YnR5cGU9U1VCVFlQRSBTdWIgamVuaXMgdGFtYmFoYW4geWFuZyBkaXNlcnRha2FuIHNhYXQgbWVuZGFmdGFyICIKKyJsYXlhbmFuIGluaVxuIgorIiAgICAtUiAtLW5vLXJldmVyc2UgICAgICBKYW5nYW4gcHVibGlrYXNpa2FuIGVudHJpIGJhbGlrYW4gZGVuZ2FuIGFsYW1hdFxuIgorIiAgICAtZiAtLW5vLWZhaWwgICAgICAgICBKYW5nYW4gZ2FnYWwgYmlsYSBkYWVtb24gdGFrIHRlcnNlZGlhXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozMDMgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjMxOAorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgbnVtYmVyIG9mIGFyZ3VtZW50c1xuIgorbXNnc3RyICJDYWNhaCBhcmd1bWVuIHNhbGFoXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIHBvcnQgbnVtYmVyOiAlc1xuIgorbXNnc3RyICJHYWdhbCBtZW5ndXJhaSBub21vciBwb3J0OiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MzYxIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gY29tbWFuZCBzcGVjaWZpZWQuXG4iCittc2dzdHIgIlRhayBhZGEgcGVyaW50YWggeWFuZyBkaW55YXRha2FuLlxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgaG9zdCBuYW1lICclcyc6ICVzXG4iCittc2dzdHIgIkdhZ2FsIG1lcmVzb2x2ZSBuYW1hIGhvc3QgJyVzJzogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjEyNgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSBhZGRyZXNzICclcyc6ICVzXG4iCittc2dzdHIgIkdhZ2FsIG1lcmVzb2x2ZSBhbGFtYXQgJyVzJzogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjE1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgW29wdGlvbnNdICVzIDxob3N0IG5hbWUgLi4uPlxuIgorIiVzIFtvcHRpb25zXSAlcyA8YWRkcmVzcyAuLi4gPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLW4gLS1uYW1lICAgICAgICAgICAgUmVzb2x2ZSBob3N0IG5hbWVcbiIKKyIgICAgLWEgLS1hZGRyZXNzICAgICAgICAgUmVzb2x2ZSBhZGRyZXNzXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKKyIgICAgLTYgICAgICAgICAgICAgICAgICAgTG9va3VwIElQdjYgYWRkcmVzc1xuIgorIiAgICAtNCAgICAgICAgICAgICAgICAgICBMb29rdXAgSVB2NCBhZGRyZXNzXG4iCittc2dzdHIgIiIKKyIlcyBbb3BzaV0gJXMgPG5hbWEgaG9zdCAuLi4+XG4iCisiJXMgW29wc2ldICVzIDxhbGFtYXQgLi4uID5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgVGFtcGlsa2FuIGJhbnR1YW4gaW5pXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFRhbXBpbGthbiB2ZXJzaVxuIgorIiAgICAtbiAtLW5hbWUgICAgICAgICAgICBSZXNvbHZlIG5hbWEgaG9zdFxuIgorIiAgICAtYSAtLWFkZHJlc3MgICAgICAgICBSZXNvbHZlIGFsYW1hdFxuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBBa3RpZmthbiBtb2RlIHZlcmJvc2VcbiIKKyIgICAgLTYgICAgICAgICAgICAgICAgICAgTGloYXQgYWxhbWF0IElQdjZcbiIKKyIgICAgLTQgICAgICAgICAgICAgICAgICAgTGloYXQgYWxhbWF0IElQdjRcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI5OSAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgaG9zdCBuYW1lIHJlc29sdmVyOiAlc1xuIgorbXNnc3RyICJHYWdhbCBtZW1idWF0IHJlc29sdmVyIG5hbWEgaG9zdDogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjMwOQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcGFyc2UgYWRkcmVzcyAnJXMnXG4iCittc2dzdHIgIkdhZ2FsIG1lbmd1cmFpIGFsYW1hdCAnJXMnXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzozMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBhZGRyZXNzIHJlc29sdmVyOiAlc1xuIgorbXNnc3RyICJHYWdhbCBtZW1idWF0IHJlc29sdmVyIGFsYW1hdDogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBbb3B0aW9uc10gPG5ldyBob3N0IG5hbWU+XG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFNob3cgdmVyc2lvblxuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBFbmFibGUgdmVyYm9zZSBtb2RlXG4iCittc2dzdHIgIiIKKyIlcyBbb3BzaV0gPG5hbWEgaG9zdCBiYXJ1PlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBUYW1waWxrYW4gYmFudHVhbiBpbmlcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgVGFtcGlsa2FuIHZlcnNpXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEFrdGlma2FuIG1vZGUgdmVyYm9zZVxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cywgZXhwZWN0aW5nIGV4YWN0bHkgb25lLlxuIgorbXNnc3RyICJDYWNhaCBhcmd1bWVuIHRhayB2YWxpZCwgaGFueWEgcGVybHUgc2F0dS5cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE5MworIywgYy1mb3JtYXQKK21zZ2lkICJIb3N0IG5hbWUgc3VjY2Vzc2Z1bGx5IGNoYW5nZWQgdG8gJXNcbiIKK21zZ3N0ciAiTmFtYSBob3N0IHN1a3NlcyBkaXViYWggbWVuamFkaSAlc1xuIgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL3BvL2l0LnBvIGIvYXZhaGktMC42LjMxL3BvL2l0LnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiYjUxYzEKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvcG8vaXQucG8KQEAgLTAsMCArMSw4NjcgQEAKKyMgSXRhbGlhbiB0cmFuc2xhdGlvbiBvZiBhdmFoaQorIyBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTAgdGhlIGF2YWhpIGNvcHlyaWdodCBob2xkZXIKKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGF2YWhpIHBhY2thZ2UuCisjCisjIFNpbHZpbyBQaWVycm8gPHBlcnBsZXNzbzgyQGdtYWlsLmNvbT4sIDIwMDguCisjIEdpYW5sdWNhIEJ1c2llbGxvIDxidXNpZWxsb0BjZWluZ2UudW5pbmEuaXQ+LCAyMDA4LgorIyBGcmFuY2VzY28gVG9tYm9saW5pIDx0b21ib0BhZGFtYW50aW8ubmV0PiwgMjAwOC4KKyMgTHVjYSBGZXJyZXR0aSA8ZWxsZS51Y2FAdWJ1bnR1LWl0Lm9yZz4sIDIwMDkuCisjIEx1Y2EgRmVycmV0dGkgPGVsbGUudWNhQGxpYmVyby5pdD4sIDIwMDkuCisjIE1pbG8gQ2FzYWdyYW5kZSA8bWlsb0B1YnVudHUuY29tPiwgMjAwOSwgMjAxMC4KK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGF2YWhpLm1hc3Rlci10eC5pdFxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMS0wNC0wMiAwMzoyMyswMjAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxMC0wOS0wNSAxNjo0OCswMjAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBNaWxvIENhc2FncmFuZGUgPG1pbG9AdWJ1bnR1LmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBJdGFsaWFuIDx0cEBsaXN0cy5saW51eC5pdD5cbiIKKyJMYW5ndWFnZTogaXRcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJYLUxhdW5jaHBhZC1FeHBvcnQtRGF0ZTogMjAwOS0xMi0wOCAxODozMiswMDAwXG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9biAhPSAxO1xuIgorIlgtR2VuZXJhdG9yOiBMYXVuY2hwYWQgKGJ1aWxkIFVua25vd24pXG4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjMwCittc2dpZCAiT0siCittc2dzdHIgIk9LIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozMQorbXNnaWQgIk9wZXJhdGlvbiBmYWlsZWQiCittc2dzdHIgIk9wZXJhemlvbmUgbm9uIHJpdXNjaXRhIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozMgorbXNnaWQgIkJhZCBzdGF0ZSIKK21zZ3N0ciAiU3RhdG8gZXJyYXRvIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozMworbXNnaWQgIkludmFsaWQgaG9zdCBuYW1lIgorbXNnc3RyICJOb21lIGhvc3Qgbm9uIHZhbGlkbyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzQKK21zZ2lkICJJbnZhbGlkIGRvbWFpbiBuYW1lIgorbXNnc3RyICJOb21lIGRpIGRvbWluaW8gbm9uIHZhbGlkbyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzUKK21zZ2lkICJObyBzdWl0YWJsZSBuZXR3b3JrIHByb3RvY29sIGF2YWlsYWJsZSIKK21zZ3N0ciAiTmVzc3VuIHByb3RvY29sbG8gZGkgcmV0ZSBhZGF0dG8gZGlzcG9uaWJpbGUiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM2Cittc2dpZCAiSW52YWxpZCBETlMgVFRMIgorbXNnc3RyICJETlMgVFRMIG5vbiB2YWxpZG8iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM3Cittc2dpZCAiUmVzb3VyY2UgcmVjb3JkIGtleSBpcyBwYXR0ZXJuIgorbXNnc3RyICJMYSByaXNvcnNhIGtleSByZWNvcmQgw6ggdW4gcGF0dGVybiIKKworIyAobmR0KSBtZXNzYSBhbCBwbHVyYWxlCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozOAorbXNnaWQgIkxvY2FsIG5hbWUgY29sbGlzaW9uIgorbXNnc3RyICJDb2xsaXNpb25lIG5vbWkgbG9jYWxlIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozOQorbXNnaWQgIkludmFsaWQgcmVjb3JkIgorbXNnc3RyICJSZWNvcmQgbm9uIHZhbGlkbyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDEKK21zZ2lkICJJbnZhbGlkIHNlcnZpY2UgbmFtZSIKK21zZ3N0ciAiTm9tZSBkaSBzZXJ2aXppbyBub24gdmFsaWRvIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0MgorbXNnaWQgIkludmFsaWQgc2VydmljZSB0eXBlIgorbXNnc3RyICJUaXBvIGRpIHNlcnZpemlvIG5vbiB2YWxpZG8iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQzCittc2dpZCAiSW52YWxpZCBwb3J0IG51bWJlciIKK21zZ3N0ciAiTnVtZXJvIGRpIHBvcnRhIG5vbiB2YWxpZG8iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQ0Cittc2dpZCAiSW52YWxpZCByZWNvcmQga2V5IgorbXNnc3RyICJDaGlhdmUgZGkgcmVjb3JkIG5vbiB2YWxpZGEiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQ1Cittc2dpZCAiSW52YWxpZCBhZGRyZXNzIgorbXNnc3RyICJJbmRpcml6emkgbm9uIHZhbGlkaSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDYKK21zZ2lkICJUaW1lb3V0IHJlYWNoZWQiCittc2dzdHIgIlJhZ2dpdW50byBpbCB0aW1lb3V0IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NworbXNnaWQgIlRvbyBtYW55IGNsaWVudHMiCittc2dzdHIgIlRyb3BwaSBjbGllbnQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQ4Cittc2dpZCAiVG9vIG1hbnkgb2JqZWN0cyIKK21zZ3N0ciAiVHJvcHBpIG9nZ2V0dGkiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQ5Cittc2dpZCAiVG9vIG1hbnkgZW50cmllcyIKK21zZ3N0ciAiVHJvcHBlIHZvY2kiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjUwCittc2dpZCAiT1MgRXJyb3IiCittc2dzdHIgIkVycm9yZSBkaSBTTyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTIKK21zZ2lkICJBY2Nlc3MgZGVuaWVkIgorbXNnc3RyICJBY2Nlc3NvIG5lZ2F0byIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTMKK21zZ2lkICJJbnZhbGlkIG9wZXJhdGlvbiIKK21zZ3N0ciAiT3BlcmF6aW9uZSBub24gdmFsaWRhIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1NAorbXNnaWQgIkFuIHVuZXhwZWN0ZWQgRC1CdXMgZXJyb3Igb2NjdXJlZCIKK21zZ3N0ciAiU2kgw6ggdmVyaWZpY2F0byB1biBlcnJvcmUgRC1CdXMgaW5hdHRlc28iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU1Cittc2dpZCAiRGFlbW9uIGNvbm5lY3Rpb24gZmFpbGVkIgorbXNnc3RyICJDb25uZXNzaW9uZSBhbCBkZW1vbmUgbm9uIHJpdXNjaXRhIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1NgorbXNnaWQgIk1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIk1lbW9yaWEgdGVybWluYXRhIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1NworbXNnaWQgIlRoZSBvYmplY3QgcGFzc2VkIGluIHdhcyBub3QgdmFsaWQiCittc2dzdHIgIkwnb2dnZXR0byBkYXRvIGluIGluZ3Jlc3NvIG5vbiDDqCB2YWxpZG8iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU4Cittc2dpZCAiRGFlbW9uIG5vdCBydW5uaW5nIgorbXNnc3RyICJEZW1vbmUgbm9uIGluIGVzZWN1emlvbmUiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU5Cittc2dpZCAiSW52YWxpZCBpbnRlcmZhY2UgaW5kZXgiCittc2dzdHIgIkluZGljZSBkaSBpbnRlcmZhY2NpYSBub24gdmFsaWRvIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2MAorbXNnaWQgIkludmFsaWQgcHJvdG9jb2wgc3BlY2lmaWNhdGlvbiIKK21zZ3N0ciAiU3BlY2lmaWNhIGRpIHByb3RvY29sbG8gbm9uIHZhbGlkYSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjEKK21zZ2lkICJJbnZhbGlkIGZsYWdzIgorbXNnc3RyICJGbGFnIG5vbiB2YWxpZGkiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjYzCittc2dpZCAiTm90IGZvdW5kIgorbXNnc3RyICJOb24gdHJvdmF0byIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjQKK21zZ2lkICJJbnZhbGlkIGNvbmZpZ3VyYXRpb24iCittc2dzdHIgImNvbmZpZ3VyYXppb25lIG5vbiB2YWxpZGEiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY1Cittc2dpZCAiVmVyc2lvbiBtaXNtYXRjaCIKK21zZ3N0ciAiRGlzY3JlcGFuemEgZGkgdmVyc2lvbmUiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY2Cittc2dpZCAiSW52YWxpZCBzZXJ2aWNlIHN1YnR5cGUiCittc2dzdHIgIlNvdHRvdGlwbyBkaSBzZXJ2aXppbyBub24gdmFsaWRvIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2NworbXNnaWQgIkludmFsaWQgcGFja2V0IgorbXNnc3RyICJQYWNjaGV0dG8gbm9uIHZhbGlkbyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjgKK21zZ2lkICJJbnZhbGlkIEROUyByZXR1cm4gY29kZSIKK21zZ3N0ciAiQ29kaWNlIGRpIHJpdG9ybm8gRE5TIG5vbiB2YWxpZG8iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY5Cittc2dpZCAiRE5TIGZhaWx1cmU6IEZPUk1FUlIiCittc2dzdHIgIkluc3VjY2Vzc28gRE5TOiBGT1JNRVJSIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3MAorbXNnaWQgIkROUyBmYWlsdXJlOiBTRVJWRkFJTCIKK21zZ3N0ciAiSW5zdWNjZXNzbyBETlM6IFNFUlZGQUlMIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3MQorbXNnaWQgIkROUyBmYWlsdXJlOiBOWERPTUFJTiIKK21zZ3N0ciAiSW5zdWNjZXNzbyBETlM6IE5YRE9NQUlOIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3MgorbXNnaWQgIkROUyBmYWlsdXJlOiBOT1RJTVAiCittc2dzdHIgIkluc3VjY2Vzc28gRE5TOiBOT1RJTVAiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc0Cittc2dpZCAiRE5TIGZhaWx1cmU6IFJFRlVTRUQiCittc2dzdHIgIkluc3VjY2Vzc28gRE5TOiBSRUZVU0VEIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3NQorbXNnaWQgIkROUyBmYWlsdXJlOiBZWERPTUFJTiIKK21zZ3N0ciAiSW5zdWNjZXNzbyBETlM6IFlYRE9NQUlOIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3NgorbXNnaWQgIkROUyBmYWlsdXJlOiBZWFJSU0VUIgorbXNnc3RyICJJbnN1Y2Nlc3NvIEROUzogWVhSUlNFVCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzcKK21zZ2lkICJETlMgZmFpbHVyZTogTlhSUlNFVCIKK21zZ3N0ciAiSW5zdWNjZXNzbyBETlM6IE5YUlJTRVQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc4Cittc2dpZCAiRE5TIGZhaWx1cmU6IE5PVEFVVEgiCittc2dzdHIgIkluc3VjY2Vzc28gRE5TOiBOT1RBVVRIIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3OQorbXNnaWQgIkROUyBmYWlsdXJlOiBOT1RaT05FIgorbXNnc3RyICJJbnN1Y2Nlc3NvIEROUzogTk9UWk9ORSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODAKK21zZ2lkICJJbnZhbGlkIFJEQVRBIgorbXNnc3RyICJSREFUQSBub24gdmFsaWRvIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4MQorbXNnaWQgIkludmFsaWQgRE5TIHR5cGUiCittc2dzdHIgIlRpcG8gZGkgRE5TIG5vbiB2YWxpZG8iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjgyCittc2dpZCAiSW52YWxpZCBETlMgY2xhc3MiCittc2dzdHIgIkNsYXNzZSBkaSBETlMgbm9uIHZhbGlkYSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODMKK21zZ2lkICJOb3Qgc3VwcG9ydGVkIgorbXNnc3RyICJOb24gc3VwcG9ydGF0byIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODUKK21zZ2lkICJOb3QgcGVybWl0dGVkIgorbXNnc3RyICJOb24gcGVybWVzc28iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjg2Cittc2dpZCAiSW52YWxpZCBhcmd1bWVudCIKK21zZ3N0ciAiQXJnb21lbnRvIG5vbiB2YWxpZG8iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjg3Cittc2dpZCAiSXMgZW1wdHkiCittc2dzdHIgIsOIIHZ1b3RvIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4OAorbXNnaWQgIlRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uIGlzIGludmFsaWQgYmVjYXVzZSByZWR1bmRhbnQiCittc2dzdHIgIkwnb3BlcmF6aW9uZSByaWNoaWVzdGEgbm9uIMOoIHZhbGlkYSBpbiBxdWFudG8gcmlkb25kYW50ZSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6OTQKK21zZ2lkICJJbnZhbGlkIEVycm9yIENvZGUiCittc2dzdHIgIkNvZGljZSBkaSBlcnJvcmUgbm9uIHZhbGlkbyIKKworIzogLi4vYXZhaGktZGlzY292ZXItc3RhbmRhbG9uZS9hdmFoaS1kaXNjb3Zlci51aS5oOjEKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weTo3NgorbXNnaWQgIjxpPk5vIHNlcnZpY2UgY3VycmVudGx5IHNlbGVjdGVkLjwvaT4iCittc2dzdHIgIjxpPk5lc3N1biBzZXJ2aXppbyBhdHR1YWxtZW50ZSBzZWxlemlvbmF0by48L2k+IgorCisjOiAuLi9hdmFoaS1kaXNjb3Zlci1zdGFuZGFsb25lL2F2YWhpLWRpc2NvdmVyLnVpLmg6MgorbXNnaWQgIkF2YWhpIERpc2NvdmVyeSIKK21zZ3N0ciAiQXZhaGkgRGlzY292ZXJ5IgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIuZGVza3RvcC5pbi5pbi5oOjEKK21zZ2lkICJBdmFoaSBaZXJvY29uZiBCcm93c2VyIgorbXNnc3RyICJFc3Bsb3JhdG9yZSBaZXJvY29uZiBBdmFoaSIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLmRlc2t0b3AuaW4uaW4uaDoyCittc2dpZCAiQnJvd3NlIGZvciBaZXJvY29uZiBzZXJ2aWNlcyBhdmFpbGFibGUgb24geW91ciBuZXR3b3JrIgorbXNnc3RyICJFc3Bsb3JhIGkgc2Vydml6aSBaZXJvY29uZiBkaXNwb25pYmlsaSBzdWxsYSBwcm9wcmlhIHJldGUiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMjQKK21zZ2lkICJUWFQiCittc2dzdHIgIlRYVCIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIyNgorbXNnaWQgIlRYVCBEYXRhOiIKK21zZ3N0ciAiRGF0aSBUWFQ6IgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI2Cittc2dpZCAiZW1wdHkiCittc2dzdHIgInZ1b3RvIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI4Cittc2dpZCAiU2VydmljZSBUeXBlOiIKK21zZ3N0ciAiVGlwbyBkaSBzZXJ2aXppbzoiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMjkKK21zZ2lkICJTZXJ2aWNlIE5hbWU6IgorbXNnc3RyICJOb21lIGRlbCBzZXJ2aXppbzoiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMzAKK21zZ2lkICJEb21haW4gTmFtZToiCittc2dzdHIgIk5vbWUgZGVsIGRvbWluaW86IgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjMxCittc2dpZCAiSW50ZXJmYWNlOiIKK21zZ3N0ciAiSW50ZXJmYWNjaWE6IgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjMyCittc2dpZCAiQWRkcmVzczoiCittc2dzdHIgIkluZGlyaXp6bzoiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTg1Cittc2dpZCAiQnJvd3NlIFNlcnZpY2UgVHlwZXMiCittc2dzdHIgIkVzcGxvcmEgdGlwaSBkaSBzZXJ2aXppbyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxODUKK21zZ2lkICJBIE5VTEwgdGVybWluYXRlZCBsaXN0IG9mIHNlcnZpY2UgdHlwZXMgdG8gYnJvd3NlIGZvciIKK21zZ3N0ciAiVW4gZWxlbmNvIHRlcm1pbmF0byBkYSBOVUxMIGRlaSB0aXBpIGRpIHNlcnZpemlvIGRhIGVzcGxvcmFyZSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxOTAKK21zZ2lkICJEb21haW4iCittc2dzdHIgIkRvbWluaW8iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTkwCittc2dpZCAiVGhlIGRvbWFpbiB0byBicm93c2UgaW4sIG9yIE5VTEwgZm9yIHRoZSBkZWZhdWx0IGRvbWFpbiIKK21zZ3N0ciAiSWwgZG9taW5pbyBkYSBlc3Bsb3JhcmUsIG9wcHVyZSBOVUxMIHBlciBpbCBkb21pbmlvIHByZWRlZmluaXRvIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE5NgorbXNnaWQgIlNlcnZpY2UgVHlwZSIKK21zZ3N0ciAiVGlwbyBkaSBzZXJ2aXppbyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxOTYKK21zZ2lkICJUaGUgc2VydmljZSB0eXBlIG9mIHRoZSBzZWxlY3RlZCBzZXJ2aWNlIgorbXNnc3RyICJJbCB0aXBvIGRpIHNlcnZpemlvIGRlbCBzZXJ2aXppbyBzZWxlemlvbmF0byIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMDIgLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMDIzCittc2dpZCAiU2VydmljZSBOYW1lIgorbXNnc3RyICJOb21lIGRpIHNlcnZpemlvIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIwMgorbXNnaWQgIlRoZSBzZXJ2aWNlIG5hbWUgb2YgdGhlIHNlbGVjdGVkIHNlcnZpY2UiCittc2dzdHIgIklsIG5vbWUgZGkgc2Vydml6aW8gZGVsIHNlcnZpemlvIHNlbGV6aW9uYXRvIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIwOAorbXNnaWQgIkFkZHJlc3MiCittc2dzdHIgIkluZGlyaXp6byIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMDgKK21zZ2lkICJUaGUgYWRkcmVzcyBvZiB0aGUgcmVzb2x2ZWQgc2VydmljZSIKK21zZ3N0ciAiTCdpbmRpcml6em8gZGVsIHNlcnZpemlvIHJpc29sdG8iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjEzCittc2dpZCAiUG9ydCIKK21zZ3N0ciAiUG9ydGEiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjEzCittc2dpZCAiVGhlIElQIHBvcnQgbnVtYmVyIG9mIHRoZSByZXNvbHZlZCBzZXJ2aWNlIgorbXNnc3RyICJJbCBudW1lcm8gZGkgcG9ydGEgSVAgZGVsIHNlcnZpemlvIHJpc29sdG8iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjE5Cittc2dpZCAiSG9zdCBOYW1lIgorbXNnc3RyICJOb21lIGhvc3QiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjE5Cittc2dpZCAiVGhlIGhvc3QgbmFtZSBvZiB0aGUgcmVzb2x2ZWQgc2VydmljZSIKK21zZ3N0ciAiSWwgbm9tZSBob3N0IGRlbCBzZXJ2aXppbyByaXNvbHRvIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIyNQorbXNnaWQgIlRYVCBEYXRhIgorbXNnc3RyICJEYXRpIFRYVCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMjUKK21zZ2lkICJUaGUgVFhUIGRhdGEgb2YgdGhlIHJlc29sdmVkIHNlcnZpY2UiCittc2dzdHIgIkkgZGF0aSBUWFQgZGVsIHNlcnZpemlvIHJpc29sdG8iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjMwCittc2dpZCAiUmVzb2x2ZSBTZXJ2aWNlIgorbXNnc3RyICJSaXNvbHV6aW9uZSBkZWwgc2Vydml6aW8iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjMwCittc2dpZCAiUmVzb2x2ZSB0aGUgc2VsZWN0ZWQgc2VydmljZSBhdXRvbWF0aWNhbGx5IGJlZm9yZSByZXR1cm5pbmciCittc2dzdHIgIlJpc29sdmUgYXV0b21hdGljYW1lbnRlIGlsIHNlcnZpemlvIHNlbGV6aW9uYXRvIHByaW1hIGRpIHVzY2lyZSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMzYKK21zZ2lkICJSZXNvbHZlIFNlcnZpY2UgSG9zdCBOYW1lIgorbXNnc3RyICJSaXNvbHV6aW9uZSBkZWwgbm9tZSBob3N0IGRlbCBzZXJ2aXppbyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMzYKK21zZ2lkICIiCisiUmVzb2x2ZSB0aGUgaG9zdCBuYW1lIG9mIHRoZSBzZWxlY3RlZCBzZXJ2aWNlIGF1dG9tYXRpY2FsbHkgYmVmb3JlIHJldHVybmluZyIKK21zZ3N0ciAiIgorIlJpc29sdmUgYXV0b21hdGljYW1lbnRlIGlsIGwnaG9zdG5hbWUgZGVsIHNlcnZpemlvIHNlbGV6aW9uYXRvIHByaW1hIGRpICIKKyJ1c2NpcmUiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjQyCittc2dpZCAiQWRkcmVzcyBmYW1pbHkiCittc2dzdHIgIkZhbWlnbGlhIGluZGlyaXp6aSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyNDIKK21zZ2lkICJUaGUgYWRkcmVzcyBmYW1pbHkgZm9yIGhvc3QgbmFtZSByZXNvbHV0aW9uIgorbXNnc3RyICJMYSBmYW1pZ2xpYSBkaSBpbmRpcml6emkgcGVyIGxhIHJpc29sdXppb25lIGRlaSBub21pIGhvc3QiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MzI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWhpIGNsaWVudCBmYWlsdXJlOiAlcyIKK21zZ3N0ciAiRmFsbGltZW50byBjbGllbnQgYXZhaGk6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjM4OAorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFoaSByZXNvbHZlciBmYWlsdXJlOiAlcyIKK21zZ3N0ciAiRmFsbGltZW50byByaXNvbHV0b3JlIEF2YWhpOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo1MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJvd3NpbmcgZm9yIHNlcnZpY2UgdHlwZSAlcyBpbiBkb21haW4gJXMgZmFpbGVkOiAlcyIKK21zZ3N0ciAiRXNwbG9yYXppb25lIGRlbCB0aXBvIGRpIHNlcnZpemlvICVzIG5lbCBkb21pbmlvICVzIG5vbiByaXVzY2l0YTogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NTE5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjE2OAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTY5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjE3OAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTc5Cittc2dpZCAibi9hIgorbXNnc3RyICJuL2QiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWhpIGRvbWFpbiBicm93c2VyIGZhaWx1cmU6ICVzIgorbXNnc3RyICJGYWxsaW1lbnRvIGVzcGxvcmF0b3JlIGRpIGRvbWluaSBBdmFoaTogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6Njg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWFkIEF2YWhpIGRvbWFpbjogJXMiCittc2dzdHIgIkxldHR1cmEgZGVsIGRvbWluaW8gZGkgQXZhaGkgbm9uIHJpdXNjaXRhOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo3MDYKK21zZ2lkICJCcm93c2Ugc2VydmljZSB0eXBlIGxpc3QgaXMgZW1wdHkhIgorbXNnc3RyICJMJ2VsZW5jbyBlc3Bsb3JhIHRpcG8gZGkgc2Vydml6aW8gw6ggdnVvdG8uIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjcxNworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY29ubmVjdCB0byBBdmFoaSBzZXJ2ZXI6ICVzIgorbXNnc3RyICJDb25uZXNzaW9uZSBhbCBzZXJ2ZXIgQXZhaGkgbm9uIHJpdXNjaXRhOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo3MzUKK21zZ2lkICJCcm93c2luZyBmb3Igc2VydmljZXMgb24gPGI+bG9jYWwgbmV0d29yazwvYj46IgorbXNnc3RyICJFc3Bsb3JhemlvbmUgZGVpIHNlcnZpemkgc3UgPGI+cmV0ZSBsb2NhbGU8L2I+OiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo3MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJvd3NpbmcgZm9yIHNlcnZpY2VzIGluIGRvbWFpbiA8Yj4lczwvYj46IgorbXNnc3RyICJFc3Bsb3JhemlvbmUgZGVpIHNlcnZpemkgbmVsIGRvbWluaW8gPGI+JXM8L2I+OiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo3NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBicm93c2VyIGZvciAlczogJXMiCittc2dzdHIgIkNyZWF6aW9uZSBkZWxsJ2VzcGxvcmF0b3JlIHBlciAlcyBub24gcml1c2NpdGE6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjkwMworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIHJlc29sdmVyIGZvciAlcyBvZiB0eXBlICVzIGluIGRvbWFpbiAlczogJXMiCittc2dzdHIgIiIKKyJDcmVhemlvbmUgZGVsIHJpc29sdXRvcmUgcGVyICVzIGRpIHRpcG8gJXMgbmVsIGRvbWluaW8gJXMgbm9uIHJpdXNjaXRhOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo5NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBkb21haW4gYnJvd3NlcjogJXMiCittc2dzdHIgIkNyZWF6aW9uZSBkZWxsJ2VzcGxvcmF0b3JlIGRpIGRvbWluaSBub24gcml1c2NpdGE6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjk4OQorbXNnaWQgIkNoYW5nZSBkb21haW4iCittc2dzdHIgIkNhbWJpYSBkb21pbmlvIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjEwMzEgLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTYyCittc2dpZCAiQnJvd3NpbmcuLi4iCittc2dzdHIgIkVzcGxvcmF6aW9uZS4uLiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTIwCittc2dpZCAiSW5pdGlhbGl6aW5nLi4uIgorbXNnc3RyICJJbml6aWFsaXp6YXppb25lLi4uIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNDQKK21zZ2lkICJMb2NhdGlvbiIKK21zZ3N0ciAiUG9zaXppb25lIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNDkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTUzCittc2dpZCAiTmFtZSIKK21zZ3N0ciAiTm9tZSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTU0IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU1MworbXNnaWQgIlR5cGUiCittc2dzdHIgIlRpcG8iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTE2NgorbXNnaWQgIl9Eb21haW4uLi4iCittc2dzdHIgIl9Eb21pbmlvLi4uIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFtvcHRpb25zXVxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtcyAtLXNzaCAgICAgICAgICAgICBCcm93c2UgU1NIIHNlcnZlcnNcbiIKKyIgICAgLXYgLS12bmMgICAgICAgICAgICAgQnJvd3NlIFZOQyBzZXJ2ZXJzXG4iCisiICAgIC1TIC0tc2hlbGwgICAgICAgICAgIEJyb3dzZSBib3RoIFNTSCBhbmQgVk5DXG4iCisiICAgIC1kIC0tZG9tYWluPURPTUFJTiAgIFRoZSBkb21haW4gdG8gYnJvd3NlIGluXG4iCittc2dzdHIgIiIKKyIlcyBbT1BaSU9ORS4uLl1cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgTW9zdHJhIHF1ZXN0byBhaXV0b1xuIgorIiAgICAtcyAtLXNzaCAgICAgICAgICAgICBFc3Bsb3JhIGkgc2VydmVyIFNTSFxuIgorIiAgICAtdiAtLXZuYyAgICAgICAgICAgICBFc3Bsb3JhIGkgc2VydmVyIFZOQ1xuIgorIiAgICAtUyAtLXNoZWxsICAgICAgICAgICBFc3Bsb3JhIHNpYSBTU0ggY2hlIFZOQ1xuIgorIiAgICAtZCAtLWRvbWFpbj1ET01JTklPICBJbCBkb21pbmlvIGRhIGVzcGxvcmFyZVxuIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTAxIC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjc3NQorIywgYy1mb3JtYXQKK21zZ2lkICJUb28gbWFueSBhcmd1bWVudHNcbiIKK21zZ3N0ciAiVHJvcHBpIGFyZ29tZW50aVxuIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTQ5Cittc2dpZCAiQ2hvb3NlIFNoZWxsIFNlcnZlciIKK21zZ3N0ciAiU2NlZ2xpZXJlIGlsIHNlcnZlciBzaGVsbCIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE1MQorbXNnaWQgIkRlc2t0b3AiCittc2dzdHIgIkRlc2t0b3AiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNTIKK21zZ2lkICJUZXJtaW5hbCIKK21zZ3N0ciAiVGVybWluYWxlIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTU2Cittc2dpZCAiQ2hvb3NlIFZOQyBzZXJ2ZXIiCittc2dzdHIgIlNjZWdsaWVyZSBpbCBzZXJ2ZXIgVk5DIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTYxCittc2dpZCAiQ2hvb3NlIFNTSCBzZXJ2ZXIiCittc2dzdHIgIlNjZWdsaWVyZSBpbCBzZXJ2ZXIgU1NIIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbm5lY3RpbmcgdG8gJyVzJyAuLi5cbiIKK21zZ3N0ciAiQ29ubmVzc2lvbmUgYSDCqyVzwrsgLi4uXG4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoyNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhlY2xwKCkgZmFpbGVkOiAlc1xuIgorbXNnc3RyICJleGVjbHAoKSBub24gcml1c2NpdGE6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FuY2VsZWQuXG4iCittc2dzdHIgIkNhbmNlbGxhdG8uXG4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guZGVza3RvcC5pbi5pbi5oOjEKK21zZ2lkICJBdmFoaSBTU0ggU2VydmVyIEJyb3dzZXIiCittc2dzdHIgIkVzcGxvcmF0b3JlIEF2YWhpIHBlciBzZXJ2ZXIgU1NIIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmRlc2t0b3AuaW4uaW4uaDoyCittc2dpZCAiQnJvd3NlIGZvciBaZXJvY29uZi1lbmFibGVkIFNTSCBTZXJ2ZXJzIgorbXNnc3RyICJFc3Bsb3JhIGkgc2VydmVyIFNTSCBjb24gWmVyb2NvbmYgYWJpbGl0YXRvIgorCisjOiAuLi9hdmFoaS11aS9idm5jLmRlc2t0b3AuaW4uaW4uaDoxCittc2dpZCAiQXZhaGkgVk5DIFNlcnZlciBCcm93c2VyIgorbXNnc3RyICJFc3Bsb3JhdG9yZSBBdmFoaSBwZXIgc2VydmVyIFZOQyIKKworIzogLi4vYXZhaGktdWkvYnZuYy5kZXNrdG9wLmluLmluLmg6MgorbXNnaWQgIkJyb3dzZSBmb3IgWmVyb2NvbmYtZW5hYmxlZCBWTkMgU2VydmVycyIKK21zZ3N0ciAiRXNwbG9yYSBpIHNlcnZlciBWTkMgY29uIFplcm9jb25mIGFiaWxpdGF0byIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIjogQWxsIGZvciBub3dcbiIKK21zZ3N0ciAiOiBUdXR0byBwZXIgb3JhXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjExOAorIywgYy1mb3JtYXQKK21zZ2lkICI6IENhY2hlIGV4aGF1c3RlZFxuIgorbXNnc3RyICI6IENhY2hlIGVzYXVyaXRhXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjIzOSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgc2VydmljZSAnJXMnIG9mIHR5cGUgJyVzJyBpbiBkb21haW4gJyVzJzogJXNcbiIKK21zZ3N0ciAiIgorIlJpc29sdXppb25lIGRlbCBzZXJ2aXppbyDCqyVzwrsgZGkgdGlwbyDCqyVzwrsgbmVsIGRvbWluaW8gwqslc8K7IG5vbiByaXVzY2l0YTogIgorIiVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjM0MAorIywgYy1mb3JtYXQKK21zZ2lkICJzZXJ2aWNlX2Jyb3dzZXIgZmFpbGVkOiAlc1xuIgorbXNnc3RyICJzZXJ2aWNlX2Jyb3dzZXIgbm9uIHJpdXNjaXRhOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzozNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXZhaGlfc2VydmljZV9icm93c2VyX25ldygpIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAiYXZhaGlfc2VydmljZV9icm93c2VyX25ldygpIG5vbiByaXVzY2l0YTogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgInNlcnZpY2VfdHlwZV9icm93c2VyIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAic2VydmljZV90eXBlX2Jyb3dzZXIgbm9uIHJpdXNjaXRhOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo0NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXZhaGlfc2VydmljZV90eXBlX2Jyb3dzZXJfbmV3KCkgZmFpbGVkOiAlc1xuIgorbXNnc3RyICJhdmFoaV9zZXJ2aWNlX3R5cGVfYnJvd3Nlcl9uZXcoKSBub24gcml1c2NpdGE6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjUxOQorIywgYy1mb3JtYXQKK21zZ2lkICJhdmFoaV9kb21haW5fYnJvd3Nlcl9uZXcoKSBmYWlsZWQ6ICVzXG4iCittc2dzdHIgImF2YWhpX2RvbWFpbl9icm93c2VyX25ldygpIG5vbiByaXVzY2l0YTogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTM1IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozOTQKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyODAgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE2OAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcXVlcnkgdmVyc2lvbiBzdHJpbmc6ICVzXG4iCittc2dzdHIgIkludGVycm9nYXppb25lIGRlbGxhIHN0cmluZ2EgZGkgdmVyc2lvbmUgbm9uIHJpdXNjaXRhOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NDAgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjM5OQorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI4NSAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTczCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBxdWVyeSBob3N0IG5hbWU6ICVzXG4iCittc2dzdHIgIkludGVycm9nYXppb25lIGRlbCBub21lIGhvc3Qgbm9uIHJpdXNjaXRhOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NDQgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjQwMworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI4OSAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlcnZlciB2ZXJzaW9uOiAlczsgSG9zdCBuYW1lOiAlc1xuIgorbXNnc3RyICJWZXJzaW9uZSBzZXJ2ZXI6ICVzOyBOb21lIGhvc3Q6ICVzXG4iCisKKyMuIFRyYW5zbGF0b3JzOiBUaGlzIGlzIGEgY29sdW1uIGhlYWRpbmcgd2l0aCBhYmJyZXZpYXRpb25zIGZvcgorIy4gKiAgIEV2ZW50ICgrLy0pLCBOZXR3b3JrIEludGVyZmFjZSwgUHJvdG9jb2wgKElQdjQvdjYpLCBEb21haW4KKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU0OQorIywgYy1mb3JtYXQKK21zZ2lkICJFIElmY2UgUHJvdCBEb21haW5cbiIKK21zZ3N0ciAiRSBJbnRlIFByb3QgRG9taW5pb1xuIgorCisjLiBUcmFuc2xhdG9yczogVGhpcyBpcyBhIGNvbHVtbiBoZWFkaW5nIHdpdGggYWJicmV2aWF0aW9ucyBmb3IKKyMuICogICBFdmVudCAoKy8tKSwgTmV0d29yayBJbnRlcmZhY2UsIFByb3RvY29sIChJUHY0L3Y2KSwgRG9tYWluCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRSBJZmNlIFByb3QgJS0qcyAlLTIwcyBEb21haW5cbiIKK21zZ3N0ciAiRSBJbnRlIFByb3QgJS0qcyAlLTIwcyBEb21pbmlvXG4iCisKKyMuIFdlIGhhdmUgYmVlbiBkaXNjb25uZWN0ZWQsIHNvIGxldCByZWNvbm5lY3QKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU4NSAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkRpc2Nvbm5lY3RlZCwgcmVjb25uZWN0aW5nIC4uLlxuIgorbXNnc3RyICJEaXNjb25uZXNzaSwgcmljb25uZXNzaW9uZS4uLlxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1OTkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6ODI5CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTcwIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozODYKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyNzIgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE2MAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGNsaWVudCBvYmplY3Q6ICVzXG4iCittc2dzdHIgIkNyZWF6aW9uZSBkZWxsJ29nZ2V0dG8gY2xpZW50IG5vbiByaXVzY2l0YTogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NjA0IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxNzUKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoxNDMgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNsaWVudCBmYWlsdXJlLCBleGl0aW5nOiAlc1xuIgorbXNnc3RyICJGYWxsaW1lbnRvIGNsaWVudCwgdXNjaXRhOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo2MjMgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjIwNgorIywgYy1mb3JtYXQKK21zZ2lkICJXYWl0aW5nIGZvciBkYWVtb24gLi4uXG4iCittc2dzdHIgIkluIGF0dGVzYSBkZWwgZGVtb25lLi4uXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjY0NworbXNnaWQgIiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgU2hvdyB2ZXJzaW9uXG4iCisiICAgIC1EIC0tYnJvd3NlLWRvbWFpbnMgIEJyb3dzZSBmb3IgYnJvd3NpbmcgZG9tYWlucyBpbnN0ZWFkIG9mIHNlcnZpY2VzXG4iCisiICAgIC1hIC0tYWxsICAgICAgICAgICAgIFNob3cgYWxsIHNlcnZpY2VzLCByZWdhcmRsZXNzIG9mIHRoZSB0eXBlXG4iCisiICAgIC1kIC0tZG9tYWluPURPTUFJTiAgIFRoZSBkb21haW4gdG8gYnJvd3NlIGluXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKKyIgICAgLXQgLS10ZXJtaW5hdGUgICAgICAgVGVybWluYXRlIGFmdGVyIGR1bXBpbmcgYSBtb3JlIG9yIGxlc3MgY29tcGxldGUgIgorImxpc3RcbiIKKyIgICAgLWMgLS1jYWNoZSAgICAgICAgICAgVGVybWluYXRlIGFmdGVyIGR1bXBpbmcgYWxsIGVudHJpZXMgZnJvbSB0aGUgY2FjaGVcbiIKKyIgICAgLWwgLS1pZ25vcmUtbG9jYWwgICAgSWdub3JlIGxvY2FsIHNlcnZpY2VzXG4iCisiICAgIC1yIC0tcmVzb2x2ZSAgICAgICAgIFJlc29sdmUgc2VydmljZXMgZm91bmRcbiIKKyIgICAgLWYgLS1uby1mYWlsICAgICAgICAgRG9uJ3QgZmFpbCBpZiB0aGUgZGFlbW9uIGlzIG5vdCBhdmFpbGFibGVcbiIKKyIgICAgLXAgLS1wYXJzYWJsZSAgICAgICAgT3V0cHV0IGluIHBhcnNhYmxlIGZvcm1hdFxuIgorbXNnc3RyICIiCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIE1vc3RyYSBxdWVzdG8gYWl1dG9cbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgTW9zdHJhIGxhIHZlcnNpb25lXG4iCisiICAgIC1EIC0tYnJvd3NlLWRvbWFpbnMgIEVzcGxvcmEgcGVyIGRvbWluaSBkaSBlc3Bsb3JhemlvbmUgaW52ZWNlXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgIGNoZSBwZXIgc2Vydml6aVxuIgorIiAgICAtYSAtLWFsbCAgICAgICAgICAgICBNb3N0cmEgdHV0dGkgaSBzZXJ2aXppLCBpbmRpZmZlcmVudGVtZW50ZSBkYWwgdGlwb1xuIgorIiAgICAtZCAtLWRvbWFpbj1ET01JTklPICBJbCBkb21pbmlvIGRhIGVzcGxvcmFyZVxuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBBYmlsaXRhIGxhIG1vZGFsaXTDoCBwcm9saXNzYVxuIgorIiAgICAtdCAtLXRlcm1pbmF0ZSAgICAgICBUZXJtaW5hIGRvcG8gYXZlciByaXZlcnNhdG8gdW4gZWxlbmNvIHBpw7lcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgbyBtZW5vIGNvbXBsZXRvXG4iCisiICAgIC1jIC0tY2FjaGUgICAgICAgICAgIFRlcm1pbmEgZG9wbyBhdmVyIHJpdmVyc2F0byB0dXR0ZSBsZSB2b2NpIGRhbGxhICIKKyJjYWNoZVxuIgorIiAgICAtbCAtLWlnbm9yZS1sb2NhbCAgICBJZ25vcmEgaSBzZXJ2aXppIGxvY2FsaVxuIgorIiAgICAtciAtLXJlc29sdmUgICAgICAgICBSaXNvbHZlIGkgc2Vydml6aSB0cm92YXRpXG4iCisiICAgIC1mIC0tbm8tZmFpbCAgICAgICAgIE5vbiBmYWxsaXNjZSBzZSBpbCBkZW1vbmUgbm9uIMOoIGRpc3BvbmliaWxlXG4iCisiICAgIC1wIC0tcGFyc2FibGUgICAgICAgIE91dHB1dCBuZWwgZm9ybWF0byBhbmFsaXp6YWJpbGVcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NjYwCittc2dpZCAiIgorIiAgICAtayAtLW5vLWRiLWxvb2t1cCAgICBEb24ndCBsb29rdXAgc2VydmljZSB0eXBlc1xuIgorIiAgICAtYiAtLWR1bXAtZGIgICAgICAgICBEdW1wIHNlcnZpY2UgdHlwZSBkYXRhYmFzZVxuIgorbXNnc3RyICIiCisiICAgIC1rIC0tbm8tZGItbG9va3VwICAgIE5vbiBjb250cm9sbGEgaSB0aXBpIGRpIHNlcnZpemlcbiIKKyIgICAgLWIgLS1kdW1wLWRiICAgICAgICAgU2NhcmljYSBpbCBkYXRhYmFzZSBkZWkgdGlwaSBkaSBzZXJ2aXppXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjc2NiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvbyBmZXcgYXJndW1lbnRzXG4iCittc2dzdHIgIlRyb3BwbyBwb2NoaSBhcmdvbWVudGlcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6ODIxIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozNzgKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyNjQgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIHNpbXBsZSBwb2xsIG9iamVjdC5cbiIKK21zZ3N0ciAiQ3JlYXppb25lIG9nZ2V0dG8gc2ltcGxlIHBvbGwgbm9uIHJpdXNjaXRhLlxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXN0YWJsaXNoZWQgdW5kZXIgbmFtZSAnJXMnXG4iCittc2dzdHIgIlN0YWJpbGl0byBzb3R0byBpbCBub21lIMKrJXPCu1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyOiAlc1xuIgorbXNnc3RyICJSZWdpc3RyYXppb25lIG5vbiByaXVzY2l0YTogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIk5hbWUgY29sbGlzaW9uLCBwaWNraW5nIG5ldyBuYW1lICclcycuXG4iCittc2dzdHIgIkNvbGxpc2lvbmUgZGkgbm9tZSwgc2VsZXppb25hdG8gaWwgbnVvdm8gbm9tZSDCqyVzwrsuXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBlbnRyeSBncm91cDogJXNcbiIKK21zZ3N0ciAiQ3JlYXppb25lIGRlbCBncnVwcG8gZGkgdm9jaSBub24gcml1c2NpdGE6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBhZGRyZXNzOiAlc1xuIgorbXNnc3RyICJBZ2dpdW50YSBkZWxsJ2luZGlyaXp6byBub24gcml1c2NpdGE6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBzZXJ2aWNlOiAlc1xuIgorbXNnc3RyICJBZ2dpdW50YSBkZWwgc2Vydml6aW8gbm9uIHJpdXNjaXRhOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgc3VidHlwZSAnJXMnOiAlc1xuIgorbXNnc3RyICJBZ2dpdW50YSBkZWwgc290dG90aXBvIMKrJXPCuyBub24gcml1c2NpdGE6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiSG9zdCBuYW1lIGNvbmZsaWN0XG4iCittc2dzdHIgIkNvbmZsaXR0byBkaSBub21lIGhvc3RcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgW29wdGlvbnNdICVzIDxuYW1lPiA8dHlwZT4gPHBvcnQ+IFs8dHh0IC4uLj5dXG4iCisiJXMgW29wdGlvbnNdICVzIDxob3N0LW5hbWU+IDxhZGRyZXNzPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLXMgLS1zZXJ2aWNlICAgICAgICAgUHVibGlzaCBzZXJ2aWNlXG4iCisiICAgIC1hIC0tYWRkcmVzcyAgICAgICAgIFB1Ymxpc2ggYWRkcmVzc1xuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBFbmFibGUgdmVyYm9zZSBtb2RlXG4iCisiICAgIC1kIC0tZG9tYWluPURPTUFJTiAgIERvbWFpbiB0byBwdWJsaXNoIHNlcnZpY2UgaW5cbiIKKyIgICAgLUggLS1ob3N0PURPTUFJTiAgICAgSG9zdCB3aGVyZSBzZXJ2aWNlIHJlc2lkZXNcbiIKKyIgICAgICAgLS1zdWJ0eXBlPVNVQlRZUEUgQW4gYWRkaXRpb25hbCBzdWJ0eXBlIHRvIHJlZ2lzdGVyIHRoaXMgc2VydmljZSAiCisid2l0aFxuIgorIiAgICAtUiAtLW5vLXJldmVyc2UgICAgICBEbyBub3QgcHVibGlzaCByZXZlcnNlIGVudHJ5IHdpdGggYWRkcmVzc1xuIgorIiAgICAtZiAtLW5vLWZhaWwgICAgICAgICBEb24ndCBmYWlsIGlmIHRoZSBkYWVtb24gaXMgbm90IGF2YWlsYWJsZVxuIgorbXNnc3RyICIiCisiJXMgW09QWklPTkUuLi5dICVzIDxub21lPiA8dGlwbz4gPHBvcnRhPiBbPHR4dCAuLi4+XVxuIgorIiVzIFtPUFpJT05FLi4uXSAlcyA8bm9tZS1ob3N0PiA8aW5kaXJpenpvPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBNb3N0cmEgcXVlc3RvIGFpdXRvXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIE1vc3RyYSBsYSB2ZXJzaW9uZVxuIgorIiAgICAtcyAtLXNlcnZpY2UgICAgICAgICBQdWJibGljYSBpbCBzZXJ2aXppb1xuIgorIiAgICAtYSAtLWFkZHJlc3MgICAgICAgICBQdWJibGljYSBsJ2luZGlyaXp6b1xuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBBYmlsaXRhIGxhIG1vZGFsaXTDoCB2ZXJib3NhXG4iCisiICAgIC1kIC0tZG9tYWluPURPTUFJTiAgIERvbWluaW8gaW4gY3VpIHB1YmJsaWNhcmUgc2Vydml6aVxuIgorIiAgICAtSCAtLWhvc3Q9RE9NQUlOICAgICBMJ2hvc3QgZG92ZSByaXNpZWRvbm8gaSBzZXJ2aXppXG4iCisiICAgICAgIC0tc3VidHlwZT1TVUJUWVBFIFVuIHNvdHRvdGlwbyBhZGRpemlvbmFsZSBjb24gY3VpIHJlZ2lzdHJhcmUgcXVlc3RvXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpemlvXG4iCisiICAgIC1SIC0tbm8tcmV2ZXJzZSAgICAgIE5vbiBwdWJibGljYSBsZSB2b2NpIGludmVydGl0ZSBjb24gbCdpbmRpcml6em9cbiIKKyIgICAgLWYgLS1uby1mYWlsICAgICAgICAgTm9uIGZhbGxpc2NlIHNlIGlsIGRlbW9uZSBub24gw6ggZGlzcG9uaWJpbGVcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjMwMyAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MzE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBudW1iZXIgb2YgYXJndW1lbnRzXG4iCittc2dzdHIgIk51bWVybyBkaSBhcmdvbWVudGkgbm9uIHZhbGlkb1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBwb3J0IG51bWJlcjogJXNcbiIKK21zZ3N0ciAiQW5hbGlzaSBkZWwgbnVtZXJvIGRpIHBvcnRhIG5vbiByaXVzY2l0YTogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjM2MSAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGNvbW1hbmQgc3BlY2lmaWVkLlxuIgorbXNnc3RyICJOZXNzdW4gY29tYW5kbyBzcGVjaWZpY2F0by5cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIGhvc3QgbmFtZSAnJXMnOiAlc1xuIgorbXNnc3RyICJSaXNvbHV6aW9uZSBkZWwgbm9tZSBob3N0IMKrJXPCuyBub24gcml1c2NpdGE6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoxMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgYWRkcmVzcyAnJXMnOiAlc1xuIgorbXNnc3RyICJSaXNvbHV6aW9uZSBkZWxsJ2luZGlyaXp6byDCqyVzwrsgbm9uIHJpdXNjaXRhOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBbb3B0aW9uc10gJXMgPGhvc3QgbmFtZSAuLi4+XG4iCisiJXMgW29wdGlvbnNdICVzIDxhZGRyZXNzIC4uLiA+XG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFNob3cgdmVyc2lvblxuIgorIiAgICAtbiAtLW5hbWUgICAgICAgICAgICBSZXNvbHZlIGhvc3QgbmFtZVxuIgorIiAgICAtYSAtLWFkZHJlc3MgICAgICAgICBSZXNvbHZlIGFkZHJlc3NcbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgRW5hYmxlIHZlcmJvc2UgbW9kZVxuIgorIiAgICAtNiAgICAgICAgICAgICAgICAgICBMb29rdXAgSVB2NiBhZGRyZXNzXG4iCisiICAgIC00ICAgICAgICAgICAgICAgICAgIExvb2t1cCBJUHY0IGFkZHJlc3NcbiIKK21zZ3N0ciAiIgorIiVzIFtPUFpJT05FLi4uXSAlcyA8bm9tZSBob3N0IC4uLj5cbiIKKyIlcyBbT1BaSU9ORS4uLl0gJXMgPGluZGlyaXp6byAuLi4gPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBNb3N0cmEgcXVlc3RvIGFpdXRvXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIE1vc3RyYSBsYSB2ZXJzaW9uZVxuIgorIiAgICAtbiAtLW5hbWUgICAgICAgICAgICBSaXNvbHZlIGlsIG5vbWUgaG9zdFxuIgorIiAgICAtYSAtLWFkZHJlc3MgICAgICAgICBSaXNvbHZlIGwnaW5kaXJpenpvXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEFiaWxpdGEgbGEgbW9kYWxpdMOgIHZlcmJvc2FcbiIKKyIgICAgLTYgICAgICAgICAgICAgICAgICAgQ2VyY2EgaW5kaXJpenppIElQdjZcbiIKKyIgICAgLTQgICAgICAgICAgICAgICAgICAgQ2VyY2EgaW5kaXJpenppIElQdjRcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI5OSAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgaG9zdCBuYW1lIHJlc29sdmVyOiAlc1xuIgorbXNnc3RyICJDcmVhemlvbmUgZGVsIHJpc29sdXRvcmUgZGkgbm9tZSBob3N0IG5vbiByaXVzY2l0YTogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjMwOQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcGFyc2UgYWRkcmVzcyAnJXMnXG4iCittc2dzdHIgIkFuYWxpc2kgZGVsbCdpbmRpcml6em8gwqslc8K7IG5vbiByaXVzY2l0YVxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MzE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgYWRkcmVzcyByZXNvbHZlcjogJXNcbiIKK21zZ3N0ciAiQ3JlYXppb25lIGRlbCByaXNvbHV0b3JlIGRpIGluZGlyaXp6aSBub24gcml1c2NpdGE6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgW29wdGlvbnNdIDxuZXcgaG9zdCBuYW1lPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgRW5hYmxlIHZlcmJvc2UgbW9kZVxuIgorbXNnc3RyICIiCisiJXMgW09QWklPTkUuLi5dIDxudW92byBub21lIGhvc3Q+XG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIE1vc3RyYSBxdWVzdG8gYWl1dG9cbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgTW9zdHJhIGxhIHZlcnNpb25lXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEFiaWxpdGEgbGEgbW9kYWxpdMOgIHZlcmJvc2FcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMsIGV4cGVjdGluZyBleGFjdGx5IG9uZS5cbiIKK21zZ3N0ciAiTnVtZXJvIGRpIGFyZ29tZW50aSBub24gdmFsaWRvLCBuZSDDqCBhdHRlc28gZXNhdHRhbWVudGUgdW5vLlxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkhvc3QgbmFtZSBzdWNjZXNzZnVsbHkgY2hhbmdlZCB0byAlc1xuIgorbXNnc3RyICJOb21lIGhvc3QgY2FtYmlhdG8gY29uIHN1Y2Nlc3NvIGluICVzXG4iCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvcG8vamEucG8gYi9hdmFoaS0wLjYuMzEvcG8vamEucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y3NmZmNgotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9wby9qYS5wbwpAQCAtMCwwICsxLDg1OSBAQAorIyBKYXBhbmVzZSB0cmFuc2xhdGlvbiBvZiBhdmFoaSBtZXNzYWdlcy4KKyMgQ29weXJpZ2h0IChDKSAyMDA4LTIwMTAgYXZhaGkgCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIGF2YWhpLgorIyBIaWRla2kgWWFtYW5lIChEZWJpYW4tSlApIDxoZW5yaWNoQGRlYmlhbi5vci5qcD4sIDIwMDkuCisjIFRha2F5dWtpIEtVU0FOTyA8QUU1VC1LU05AYXNhaGktbmV0Lm9yLmpwPiwgMjAxMC4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGF2YWhpIG1hc3RlclxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMS0wNC0wMiAwMzoyMyswMjAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxMC0wOS0wNSAxNzo0NiswOTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBIaWRla2kgWWFtYW5lIChEZWJpYW4tSlApIDxoZW5yaWNoQGRlYmlhbi5vci5qcD5cbiIKKyJMYW5ndWFnZS1UZWFtOiBKYXBhbmVzZSA8ZGViaWFuLWphcGFuZXNlQGxpc3RzLmRlYmlhbi5vcmc+XG4iCisiTGFuZ3VhZ2U6IGphXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjMwCittc2dpZCAiT0siCittc2dzdHIgIk9LIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozMQorbXNnaWQgIk9wZXJhdGlvbiBmYWlsZWQiCittc2dzdHIgIuaTjeS9nOOBq+WkseaVl+OBl+OBvuOBl+OBnyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzIKK21zZ2lkICJCYWQgc3RhdGUiCittc2dzdHIgIuS4jeato+OBqueKtuaFi+OBp+OBmSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzMKK21zZ2lkICJJbnZhbGlkIGhvc3QgbmFtZSIKK21zZ3N0ciAi5LiN5q2j44Gq44Ob44K544OI5ZCN44Gn44GZIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozNAorbXNnaWQgIkludmFsaWQgZG9tYWluIG5hbWUiCittc2dzdHIgIuS4jeato+OBquODieODoeOCpOODs+WQjeOBp+OBmSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzUKK21zZ2lkICJObyBzdWl0YWJsZSBuZXR3b3JrIHByb3RvY29sIGF2YWlsYWJsZSIKK21zZ3N0ciAi6YGp5YiH44Gq44ON44OD44OI44Ov44O844Kv44OX44Ot44OI44Kz44Or44GM6KaL44Gk44GL44KK44G+44Gb44KTIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozNgorbXNnaWQgIkludmFsaWQgRE5TIFRUTCIKK21zZ3N0ciAi5LiN5q2j44GqIEROUyBUVEwg5YCk44Gn44GZIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozNworbXNnaWQgIlJlc291cmNlIHJlY29yZCBrZXkgaXMgcGF0dGVybiIKK21zZ3N0ciAi44Oq44K944O844K544Os44Kz44O844OJ44Kt44O844GM57mw44KK6L+U44GX44Gr44Gq44Gj44Gm44GE44G+44GZIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozOAorbXNnaWQgIkxvY2FsIG5hbWUgY29sbGlzaW9uIgorbXNnc3RyICLjg63jg7zjgqvjg6vlkI3jga7ooZ3nqoHjgYznmbrnlJ/jgZfjgb7jgZfjgZ8iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM5Cittc2dpZCAiSW52YWxpZCByZWNvcmQiCittc2dzdHIgIuS4jeato+OBquODrOOCs+ODvOODieOBp+OBmSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDEKK21zZ2lkICJJbnZhbGlkIHNlcnZpY2UgbmFtZSIKK21zZ3N0ciAi5LiN5q2j44Gq44K144O844OT44K55ZCN44Gn44GZIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0MgorbXNnaWQgIkludmFsaWQgc2VydmljZSB0eXBlIgorbXNnc3RyICLkuI3mraPjgarjgrXjg7zjg5Pjgrnjgr/jgqTjg5fjgafjgZkiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQzCittc2dpZCAiSW52YWxpZCBwb3J0IG51bWJlciIKK21zZ3N0ciAi5LiN5q2j44Gq44Od44O844OI55Wq5Y+344Gn44GZIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NAorbXNnaWQgIkludmFsaWQgcmVjb3JkIGtleSIKK21zZ3N0ciAi5LiN5q2j44Gq44Os44Kz44O844OJ44Kt44O844Gn44GZIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NQorbXNnaWQgIkludmFsaWQgYWRkcmVzcyIKK21zZ3N0ciAi5LiN5q2j44Gq44Ki44OJ44Os44K544Gn44GZIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NgorbXNnaWQgIlRpbWVvdXQgcmVhY2hlZCIKK21zZ3N0ciAi44K/44Kk44Og44Ki44Km44OI44Gr6YGU44GX44G+44GX44GfIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NworbXNnaWQgIlRvbyBtYW55IGNsaWVudHMiCittc2dzdHIgIuOCr+ODqeOCpOOCouODs+ODiOOBjOWkmuOBmeOBjuOBvuOBmSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDgKK21zZ2lkICJUb28gbWFueSBvYmplY3RzIgorbXNnc3RyICLjgqrjg5bjgrjjgqfjgq/jg4jjgYzlpJrjgZnjgY7jgb7jgZkiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQ5Cittc2dpZCAiVG9vIG1hbnkgZW50cmllcyIKK21zZ3N0ciAi44Ko44Oz44OI44Oq44GM5aSa44GZ44GO44G+44GZIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1MAorbXNnaWQgIk9TIEVycm9yIgorbXNnc3RyICJPUyDjgqjjg6njg7wiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjUyCittc2dpZCAiQWNjZXNzIGRlbmllZCIKK21zZ3N0ciAi44Ki44Kv44K744K544GM5ouS5ZCm44GV44KM44G+44GX44GfIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1MworbXNnaWQgIkludmFsaWQgb3BlcmF0aW9uIgorbXNnc3RyICLkuI3mraPjgarmk43kvZzjgafjgZkiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU0Cittc2dpZCAiQW4gdW5leHBlY3RlZCBELUJ1cyBlcnJvciBvY2N1cmVkIgorbXNnc3RyICLkuojmnJ/jgZfjgarjgYQgRC1CdXMg44Gu44Ko44Op44O844GM55m655Sf44GX44G+44GX44GfIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1NQorbXNnaWQgIkRhZW1vbiBjb25uZWN0aW9uIGZhaWxlZCIKK21zZ3N0ciAi44OH44O844Oi44Oz44Gu5o6l57aa44GM5aSx5pWX44GX44G+44GX44GfIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1NgorbXNnaWQgIk1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIuODoeODouODquS4jei2s+OBp+OBmSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTcKK21zZ2lkICJUaGUgb2JqZWN0IHBhc3NlZCBpbiB3YXMgbm90IHZhbGlkIgorbXNnc3RyICLkuI3mraPjgarjgqrjg5bjgrjjgqfjgq/jg4jjgYzmuKHjgZXjgozjgb7jgZfjgZ8iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU4Cittc2dpZCAiRGFlbW9uIG5vdCBydW5uaW5nIgorbXNnc3RyICLjg4fjg7zjg6Ljg7PjgYzli5XkvZzjgZfjgabjgYTjgb7jgZvjgpMiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU5Cittc2dpZCAiSW52YWxpZCBpbnRlcmZhY2UgaW5kZXgiCittc2dzdHIgIuS4jeato+OBquOCpOODs+OCv+ODvOODleOCp+OCpOOCueS4gOimp+OBp+OBmSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjAKK21zZ2lkICJJbnZhbGlkIHByb3RvY29sIHNwZWNpZmljYXRpb24iCittc2dzdHIgIuS4jeato+OBquODl+ODreODiOOCs+ODq+Wumue+qeOBp+OBmSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjEKK21zZ2lkICJJbnZhbGlkIGZsYWdzIgorbXNnc3RyICLkuI3mraPjgarjg5Xjg6njgrDjgafjgZkiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjYzCittc2dpZCAiTm90IGZvdW5kIgorbXNnc3RyICLopovjgaTjgYvjgorjgb7jgZvjgpMiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY0Cittc2dpZCAiSW52YWxpZCBjb25maWd1cmF0aW9uIgorbXNnc3RyICLkuI3mraPjgaroqK3lrprjgafjgZkiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY1Cittc2dpZCAiVmVyc2lvbiBtaXNtYXRjaCIKK21zZ3N0ciAi44OQ44O844K444On44Oz44GM5LiA6Ie044GX44G+44Gb44KTIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2NgorbXNnaWQgIkludmFsaWQgc2VydmljZSBzdWJ0eXBlIgorbXNnc3RyICLjgrXjg7zjg5Pjgrnjga7jgrXjg5bjgr/jgqTjg5fjgYzkuI3mraPjgafjgZkiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY3Cittc2dpZCAiSW52YWxpZCBwYWNrZXQiCittc2dzdHIgIuS4jeato+OBquODkeOCseODg+ODiOOBp+OBmSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjgKK21zZ2lkICJJbnZhbGlkIEROUyByZXR1cm4gY29kZSIKK21zZ3N0ciAiRE5TIOOBruODquOCv+ODvOODs+OCs+ODvOODieOBjOS4jeato+OBp+OBmSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjkKK21zZ2lkICJETlMgZmFpbHVyZTogRk9STUVSUiIKK21zZ3N0ciAiRE5TIOOBjOWkseaVl+OBl+OBvuOBl+OBnzogRk9STUVSUiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzAKK21zZ2lkICJETlMgZmFpbHVyZTogU0VSVkZBSUwiCittc2dzdHIgIkROUyDjgYzlpLHmlZfjgZfjgb7jgZfjgZ86IFNFUlZGQUlMIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3MQorbXNnaWQgIkROUyBmYWlsdXJlOiBOWERPTUFJTiIKK21zZ3N0ciAiRE5TIOOBjOWkseaVl+OBl+OBvuOBl+OBnzogTlhET01BSU4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjcyCittc2dpZCAiRE5TIGZhaWx1cmU6IE5PVElNUCIKK21zZ3N0ciAiRE5TIOOBjOWkseaVl+OBl+OBvuOBl+OBnzogTk9USU1QIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3NAorbXNnaWQgIkROUyBmYWlsdXJlOiBSRUZVU0VEIgorbXNnc3RyICJETlMg44GM5aSx5pWX44GX44G+44GX44GfOiBSRUZVU0VEIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3NQorbXNnaWQgIkROUyBmYWlsdXJlOiBZWERPTUFJTiIKK21zZ3N0ciAiRE5TIOOBjOWkseaVl+OBl+OBvuOBl+OBnzogWVhET01BSU4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc2Cittc2dpZCAiRE5TIGZhaWx1cmU6IFlYUlJTRVQiCittc2dzdHIgIkROUyDjgYzlpLHmlZfjgZfjgb7jgZfjgZ86IFlYUlJTRVQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc3Cittc2dpZCAiRE5TIGZhaWx1cmU6IE5YUlJTRVQiCittc2dzdHIgIkROUyDjgYzlpLHmlZfjgZfjgb7jgZfjgZ86IE5YUlJTRVQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc4Cittc2dpZCAiRE5TIGZhaWx1cmU6IE5PVEFVVEgiCittc2dzdHIgIkROUyDjgYzlpLHmlZfjgZfjgb7jgZfjgZ86IE5PQVVUSCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzkKK21zZ2lkICJETlMgZmFpbHVyZTogTk9UWk9ORSIKK21zZ3N0ciAiRE5TIOOBjOWkseaVl+OBl+OBvuOBl+OBnzogTk9UWk9ORSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODAKK21zZ2lkICJJbnZhbGlkIFJEQVRBIgorbXNnc3RyICLkuI3mraPjgaogUkRBVEEg44Gn44GZIgorCisjIGh0dHA6Ly9qcHJzLmpwL3RlY2gvaW5kZXguaHRtbCNkbnMtcmZjLWluZm8g44Gn44CM44K/44Kk44OX44CN44GM5L2/55So44GV44KM44Gm44GE44KLCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4MQorbXNnaWQgIkludmFsaWQgRE5TIHR5cGUiCittc2dzdHIgIuS4jeato+OBqiBETlMg44K/44Kk44OX44Gn44GZIgorCisjIGh0dHA6Ly9qcHJzLmpwL3RlY2gvaW5kZXguaHRtbCNkbnMtcmZjLWluZm8g44Gn44CM44Kv44Op44K544CN44GM5L2/55So44GV44KM44Gm44GE44KLCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4MgorbXNnaWQgIkludmFsaWQgRE5TIGNsYXNzIgorbXNnc3RyICLkuI3mraPjgaogRE5TIOOCr+ODqeOCueOBp+OBmSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODMKK21zZ2lkICJOb3Qgc3VwcG9ydGVkIgorbXNnc3RyICLjgrXjg53jg7zjg4jjgZXjgozjgabjgYTjgb7jgZvjgpMiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjg1Cittc2dpZCAiTm90IHBlcm1pdHRlZCIKK21zZ3N0ciAi6Kix5Y+v44GV44KM44Gm44GE44G+44Gb44KTIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4NgorbXNnaWQgIkludmFsaWQgYXJndW1lbnQiCittc2dzdHIgIuW8leaVsOOBjOS4jeato+OBp+OBmSIKKworIyBBVkFISV9FUlJfSVNfRU1QVFkg44Gu44Ko44Op44O8CisjIE5FV1Mg44KI44KK5byV55SoOgorIyAgKiBBUEk6IFJldHVybiBBVkFISV9FUlJfSVNfRU1QVFkgd2hlbiB0aGUgdXNlciB0cmllcyB0byBjb21taXQgYW4KKyMgICAgZW1wdHkgZW50cnkgZ3JvdXAuCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4NworbXNnaWQgIklzIGVtcHR5IgorbXNnc3RyICLjgrDjg6vjg7zjg5fjgYznqbrjgafjgZkiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjg4Cittc2dpZCAiVGhlIHJlcXVlc3RlZCBvcGVyYXRpb24gaXMgaW52YWxpZCBiZWNhdXNlIHJlZHVuZGFudCIKK21zZ3N0ciAi6KaB5rGC44GV44KM44Gf5pON5L2c44GM6YGO5Ymw44Gn44GC44Gj44Gf54K644CB5pON5L2c44GM55Ww5bi444KS6LW344GT44GX44G+44GX44GfIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo5NAorbXNnaWQgIkludmFsaWQgRXJyb3IgQ29kZSIKK21zZ3N0ciAi5LiN5q2j44Gq44Ko44Op44O844Kz44O844OJIgorCisjOiAuLi9hdmFoaS1kaXNjb3Zlci1zdGFuZGFsb25lL2F2YWhpLWRpc2NvdmVyLnVpLmg6MQorIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5Ojc2Cittc2dpZCAiPGk+Tm8gc2VydmljZSBjdXJyZW50bHkgc2VsZWN0ZWQuPC9pPiIKK21zZ3N0ciAiPGk+54++5Zyo44Gv44Gp44Gu44K144O844OT44K544KC6YG45oqe44GV44KM44Gm44GE44G+44Gb44KT44CCPC9pPiIKKworIzogLi4vYXZhaGktZGlzY292ZXItc3RhbmRhbG9uZS9hdmFoaS1kaXNjb3Zlci51aS5oOjIKK21zZ2lkICJBdmFoaSBEaXNjb3ZlcnkiCittc2dzdHIgIkF2YWhpIOaknOe0oiIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLmRlc2t0b3AuaW4uaW4uaDoxCittc2dpZCAiQXZhaGkgWmVyb2NvbmYgQnJvd3NlciIKK21zZ3N0ciAiQXZhaGkgWmVyb2NvbmYg44OW44Op44Km44K2IgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIuZGVza3RvcC5pbi5pbi5oOjIKK21zZ2lkICJCcm93c2UgZm9yIFplcm9jb25mIHNlcnZpY2VzIGF2YWlsYWJsZSBvbiB5b3VyIG5ldHdvcmsiCittc2dzdHIgIuODjeODg+ODiOODr+ODvOOCr+S4iuOBruWIqeeUqOWPr+iDveOBqiBaZXJvY29uZiDjgrXjg7zjg5PjgrnjgpLmpJzntKIiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMjQKK21zZ2lkICJUWFQiCittc2dzdHIgIlRYVCIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIyNgorbXNnaWQgIlRYVCBEYXRhOiIKK21zZ3N0ciAiVFhUIOODh+ODvOOCvyIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIyNgorbXNnaWQgImVtcHR5IgorbXNnc3RyICLnqboiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMjgKK21zZ2lkICJTZXJ2aWNlIFR5cGU6IgorbXNnc3RyICLjgrXjg7zjg5Pjgrnjgr/jgqTjg5c6IgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI5Cittc2dpZCAiU2VydmljZSBOYW1lOiIKK21zZ3N0ciAi44K144O844OT44K55ZCNOiIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIzMAorbXNnaWQgIkRvbWFpbiBOYW1lOiIKK21zZ3N0ciAi44OJ44Oh44Kk44Oz5ZCNOiIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIzMQorbXNnaWQgIkludGVyZmFjZToiCittc2dzdHIgIuOCpOODs+OCv+ODvOODleOCp+OCpOOCuToiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMzIKK21zZ2lkICJBZGRyZXNzOiIKK21zZ3N0ciAi44Ki44OJ44Os44K5OiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxODUKK21zZ2lkICJCcm93c2UgU2VydmljZSBUeXBlcyIKK21zZ3N0ciAi44K144O844OT44K544K/44Kk44OX44Gu5qSc57SiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE4NQorbXNnaWQgIkEgTlVMTCB0ZXJtaW5hdGVkIGxpc3Qgb2Ygc2VydmljZSB0eXBlcyB0byBicm93c2UgZm9yIgorbXNnc3RyICJOVUxMIOOBp+e1guerr+OBleOCjOOBn+aknOe0ouWvvuixoeOBruOCteODvOODk+OCueOCv+OCpOODl+OBruODquOCueODiCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxOTAKK21zZ2lkICJEb21haW4iCittc2dzdHIgIuODieODoeOCpOODsyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxOTAKK21zZ2lkICJUaGUgZG9tYWluIHRvIGJyb3dzZSBpbiwgb3IgTlVMTCBmb3IgdGhlIGRlZmF1bHQgZG9tYWluIgorbXNnc3RyICIiCisi5qSc57Si44GZ44KL44OJ44Oh44Kk44Oz44KS5YWl5Yqb44GZ44KL44GL44CB44OH44OV44Kp44Or44OI44Gu44OJ44Oh44Kk44Oz44Go44GX44GmIE5VTEwg44KS5oyH5a6a44GZ44KLIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE5NgorbXNnaWQgIlNlcnZpY2UgVHlwZSIKK21zZ3N0ciAi44K144O844OT44K544K/44Kk44OXIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE5NgorbXNnaWQgIlRoZSBzZXJ2aWNlIHR5cGUgb2YgdGhlIHNlbGVjdGVkIHNlcnZpY2UiCittc2dzdHIgIumBuOaKnuOBleOCjOOBn+OCteODvOODk+OCueOBruOCteODvOODk+OCueOCv+OCpOODlyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMDIgLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMDIzCittc2dpZCAiU2VydmljZSBOYW1lIgorbXNnc3RyICLjgrXjg7zjg5PjgrnlkI0iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjAyCittc2dpZCAiVGhlIHNlcnZpY2UgbmFtZSBvZiB0aGUgc2VsZWN0ZWQgc2VydmljZSIKK21zZ3N0ciAi6YG45oqe44GV44KM44Gf44K144O844OT44K544Gu44K144O844OT44K55ZCNIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIwOAorbXNnaWQgIkFkZHJlc3MiCittc2dzdHIgIuOCouODieODrOOCuSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMDgKK21zZ2lkICJUaGUgYWRkcmVzcyBvZiB0aGUgcmVzb2x2ZWQgc2VydmljZSIKK21zZ3N0ciAi6Kej5rG644GV44KM44Gf44K144O844OT44K544Gu44Ki44OJ44Os44K5IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIxMworbXNnaWQgIlBvcnQiCittc2dzdHIgIuODneODvOODiCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMTMKK21zZ2lkICJUaGUgSVAgcG9ydCBudW1iZXIgb2YgdGhlIHJlc29sdmVkIHNlcnZpY2UiCittc2dzdHIgIuino+axuuOBleOCjOOBn+OCteODvOODk+OCueOBriBJUCDjg53jg7zjg4jnlarlj7ciCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjE5Cittc2dpZCAiSG9zdCBOYW1lIgorbXNnc3RyICLjg5vjgrnjg4jlkI0iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjE5Cittc2dpZCAiVGhlIGhvc3QgbmFtZSBvZiB0aGUgcmVzb2x2ZWQgc2VydmljZSIKK21zZ3N0ciAi6Kej5rG644GV44KM44Gf44K144O844OT44K544Gu44Ob44K544OI5ZCNIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIyNQorbXNnaWQgIlRYVCBEYXRhIgorbXNnc3RyICJUWFQg44OH44O844K/IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIyNQorbXNnaWQgIlRoZSBUWFQgZGF0YSBvZiB0aGUgcmVzb2x2ZWQgc2VydmljZSIKK21zZ3N0ciAi6Kej5rG644GV44KM44Gf44K144O844OT44K544GuIFRYVCDjg4fjg7zjgr8iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjMwCittc2dpZCAiUmVzb2x2ZSBTZXJ2aWNlIgorbXNnc3RyICLjgrXjg7zjg5Pjgrnjga7op6PmsboiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjMwCittc2dpZCAiUmVzb2x2ZSB0aGUgc2VsZWN0ZWQgc2VydmljZSBhdXRvbWF0aWNhbGx5IGJlZm9yZSByZXR1cm5pbmciCittc2dzdHIgIuaIu+OCi+WJjeOBq+mBuOaKnuOBl+OBn+OCteODvOODk+OCueOCkuiHquWLleeahOOBq+ino+axuiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMzYKK21zZ2lkICJSZXNvbHZlIFNlcnZpY2UgSG9zdCBOYW1lIgorbXNnc3RyICLjgrXjg7zjg5Pjgrnjg5vjgrnjg4jlkI3jga7op6PmsboiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjM2Cittc2dpZCAiIgorIlJlc29sdmUgdGhlIGhvc3QgbmFtZSBvZiB0aGUgc2VsZWN0ZWQgc2VydmljZSBhdXRvbWF0aWNhbGx5IGJlZm9yZSByZXR1cm5pbmciCittc2dzdHIgIuaIu+OCi+WJjeOBq+mBuOaKnuOBl+OBn+OCteODvOODk+OCueOBruODm+OCueODiOWQjeOCkuiHquWLleeahOOBq+ino+axuiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyNDIKK21zZ2lkICJBZGRyZXNzIGZhbWlseSIKK21zZ3N0ciAi44Ki44OJ44Os44K544OV44Kh44Of44OqIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjI0MgorbXNnaWQgIlRoZSBhZGRyZXNzIGZhbWlseSBmb3IgaG9zdCBuYW1lIHJlc29sdXRpb24iCittc2dzdHIgIuODm+OCueODiOWQjeino+axuuOBq+WIqeeUqOOBmeOCi+OCouODieODrOOCueODleOCoeODn+ODqiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzozMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaGkgY2xpZW50IGZhaWx1cmU6ICVzIgorbXNnc3RyICJBdmFoaSDjgq/jg6njgqTjgqLjg7Pjg4jjgYzlpLHmlZfjgZfjgb7jgZfjgZ86ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjM4OAorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFoaSByZXNvbHZlciBmYWlsdXJlOiAlcyIKK21zZ3N0ciAiQXZhaGkg44Oq44K+44Or44OQ44GM5aSx5pWX44GX44G+44GX44GfOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo1MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJvd3NpbmcgZm9yIHNlcnZpY2UgdHlwZSAlcyBpbiBkb21haW4gJXMgZmFpbGVkOiAlcyIKK21zZ3N0ciAi44OJ44Oh44Kk44OzICUyJHMg44Gr44Gm44K144O844OT44K544K/44Kk44OXICUxJHMg44Gu5qSc57Si44Gr5aSx5pWX44GX44G+44GX44GfOiAlMyRzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjUxOSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoxNjgKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjE2OSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoxNzgKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjE3OQorbXNnaWQgIm4vYSIKK21zZ3N0ciAibi9hIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjY0OQorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFoaSBkb21haW4gYnJvd3NlciBmYWlsdXJlOiAlcyIKK21zZ3N0ciAiQXZhaGkg44OJ44Oh44Kk44Oz44OW44Op44Km44K244GM5aSx5pWX44GX44G+44GX44GfOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo2ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlYWQgQXZhaGkgZG9tYWluOiAlcyIKK21zZ3N0ciAiQXZhaGkg44OJ44Oh44Kk44Oz44Gu6Kqt44G/6L6844G/44Gr5aSx5pWX44GX44G+44GX44GfOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo3MDYKK21zZ2lkICJCcm93c2Ugc2VydmljZSB0eXBlIGxpc3QgaXMgZW1wdHkhIgorbXNnc3RyICLmpJzntKLjgrXjg7zjg5Pjgrnjgr/jgqTjg5fjga7jg6rjgrnjg4jjgYznqbrjgafjgZkhIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjcxNworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY29ubmVjdCB0byBBdmFoaSBzZXJ2ZXI6ICVzIgorbXNnc3RyICJBdmFoaSDjgrXjg7zjg5Djgbjjga7mjqXntprjgYzlpLHmlZfjgb7jgZfjgZ86ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjczNQorbXNnaWQgIkJyb3dzaW5nIGZvciBzZXJ2aWNlcyBvbiA8Yj5sb2NhbCBuZXR3b3JrPC9iPjoiCittc2dzdHIgIjxiPuODreODvOOCq+ODq+ODjeODg+ODiOODr+ODvOOCrzwvYj7jgafjga7jgrXjg7zjg5PjgrnmpJzntKI6IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjczNworIywgYy1mb3JtYXQKK21zZ2lkICJCcm93c2luZyBmb3Igc2VydmljZXMgaW4gZG9tYWluIDxiPiVzPC9iPjoiCittc2dzdHIgIuODieODoeOCpOODsyA8Yj4lczwvYj4g44Gn44Gu44K144O844OT44K55qSc57SiOiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo3NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBicm93c2VyIGZvciAlczogJXMiCittc2dzdHIgIiUxJHMg44Gu44OW44Op44Km44K25L2c5oiQ44Gr5aSx5pWX44GX44G+44GX44GfOiAlMiRzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjkwMworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIHJlc29sdmVyIGZvciAlcyBvZiB0eXBlICVzIGluIGRvbWFpbiAlczogJXMiCittc2dzdHIgIuODieODoeOCpOODsyAlMyRzIOOBruOCv+OCpOODlyAlMiRzIOOBriAlMSRzIOOBruODquOCvuODq+ODkOS9nOaIkOOBq+WkseaVl+OBl+OBvuOBl+OBnzogJTQkcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo5NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBkb21haW4gYnJvd3NlcjogJXMiCittc2dzdHIgIuODieODoeOCpOODs+ODluODqeOCpuOCtuOBruS9nOaIkOOBq+WkseaVl+OBl+OBvuOBl+OBnzogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6OTg5Cittc2dpZCAiQ2hhbmdlIGRvbWFpbiIKK21zZ3N0ciAi44OJ44Oh44Kk44Oz44Gu5aSJ5pu0IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjEwMzEgLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTYyCittc2dpZCAiQnJvd3NpbmcuLi4iCittc2dzdHIgIuaknOe0ouS4reKApiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTIwCittc2dpZCAiSW5pdGlhbGl6aW5nLi4uIgorbXNnc3RyICLliJ3mnJ/ljJbkuK3igKYiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTE0NAorbXNnaWQgIkxvY2F0aW9uIgorbXNnc3RyICLloLTmiYAiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTE0OSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NTMKK21zZ2lkICJOYW1lIgorbXNnc3RyICLlkI3liY0iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTE1NCAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NTMKK21zZ2lkICJUeXBlIgorbXNnc3RyICLjgr/jgqTjg5ciCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTE2NgorbXNnaWQgIl9Eb21haW4uLi4iCittc2dzdHIgIuODieODoeOCpOODsyhfRCnigKYiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzo1NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgW29wdGlvbnNdXG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1zIC0tc3NoICAgICAgICAgICAgIEJyb3dzZSBTU0ggc2VydmVyc1xuIgorIiAgICAtdiAtLXZuYyAgICAgICAgICAgICBCcm93c2UgVk5DIHNlcnZlcnNcbiIKKyIgICAgLVMgLS1zaGVsbCAgICAgICAgICAgQnJvd3NlIGJvdGggU1NIIGFuZCBWTkNcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgVGhlIGRvbWFpbiB0byBicm93c2UgaW5cbiIKK21zZ3N0ciAiIgorIiVzIFvjgqrjg5fjgrfjg6fjg7NdXG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIOOBk+OBruODmOODq+ODl+OCkuihqOekuuOBmeOCi1xuIgorIiAgICAtcyAtLXNzaCAgICAgICAgICAgICBTU0gg44K144O844OQ44Gu5qSc57SiXG4iCisiICAgIC12IC0tdm5jICAgICAgICAgICAgIFZOQyDjgrXjg7zjg5Djga7mpJzntKJcbiIKKyIgICAgLVMgLS1zaGVsbCAgICAgICAgICAgU1NIIOOBqCBWTkMg44KS5qSc57Si44GZ44KLXG4iCisiICAgIC1kIC0tZG9tYWluPURPTUFJTiAgIOaknOe0ouOBmeOCi+ODieODoeOCpOODs+OCkuaMh+WumlxuIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTAxIC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjc3NQorIywgYy1mb3JtYXQKK21zZ2lkICJUb28gbWFueSBhcmd1bWVudHNcbiIKK21zZ3N0ciAi5byV5pWw44GM5aSa44GZ44GO44G+44GZXG4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNDkKK21zZ2lkICJDaG9vc2UgU2hlbGwgU2VydmVyIgorbXNnc3RyICLjgrfjgqfjg6vjgrXjg7zjg5DjgpLpgbjmip4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNTEKK21zZ2lkICJEZXNrdG9wIgorbXNnc3RyICLjg4fjgrnjgq/jg4jjg4Pjg5ciCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNTIKK21zZ2lkICJUZXJtaW5hbCIKK21zZ3N0ciAi44K/44O844Of44OK44OrIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTU2Cittc2dpZCAiQ2hvb3NlIFZOQyBzZXJ2ZXIiCittc2dzdHIgIlZOQyDjgrXjg7zjg5DjgpLpgbjmip4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNjEKK21zZ2lkICJDaG9vc2UgU1NIIHNlcnZlciIKK21zZ3N0ciAiU1NIIOOCteODvOODkOOCkumBuOaKniIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE4NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb25uZWN0aW5nIHRvICclcycgLi4uXG4iCittc2dzdHIgIiclcycg44G45o6l57aa5Lit4oCmXG4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoyNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhlY2xwKCkgZmFpbGVkOiAlc1xuIgorbXNnc3RyICJleGVjbHAoKSDjgYzlpLHmlZfjgZfjgb7jgZfjgZ86ICVzXG4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FuY2VsZWQuXG4iCittc2dzdHIgIuOCreODo+ODs+OCu+ODq+OBleOCjOOBvuOBl+OBn+OAglxuIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmRlc2t0b3AuaW4uaW4uaDoxCittc2dpZCAiQXZhaGkgU1NIIFNlcnZlciBCcm93c2VyIgorbXNnc3RyICJBdmFoaSBTU0gg44K144O844OQ44Gu5qSc57SiIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmRlc2t0b3AuaW4uaW4uaDoyCittc2dpZCAiQnJvd3NlIGZvciBaZXJvY29uZi1lbmFibGVkIFNTSCBTZXJ2ZXJzIgorbXNnc3RyICJaZXJvY29uZiDjgpLmnInlirnjgavjgZfjgZ8gU1NIIOOCteODvOODkOOCkuaknOe0oiIKKworIzogLi4vYXZhaGktdWkvYnZuYy5kZXNrdG9wLmluLmluLmg6MQorbXNnaWQgIkF2YWhpIFZOQyBTZXJ2ZXIgQnJvd3NlciIKK21zZ3N0ciAiQXZhaGkgVk5DIOOCteODvOODkOOBruaknOe0oiIKKworIzogLi4vYXZhaGktdWkvYnZuYy5kZXNrdG9wLmluLmluLmg6MgorbXNnaWQgIkJyb3dzZSBmb3IgWmVyb2NvbmYtZW5hYmxlZCBWTkMgU2VydmVycyIKK21zZ3N0ciAiWmVyb2NvbmYg44KS5pyJ5Yq544Gr44GX44GfIFZOQyDjgrXjg7zjg5DjgpLmpJzntKIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjEwNworIywgYy1mb3JtYXQKK21zZ2lkICI6IEFsbCBmb3Igbm93XG4iCittc2dzdHIgIjog44Go44KK44GC44GI44Ga5YWo44GmXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjExOAorIywgYy1mb3JtYXQKK21zZ2lkICI6IENhY2hlIGV4aGF1c3RlZFxuIgorbXNnc3RyICI6IOOCreODo+ODg+OCt+ODpeOBjOS4jei2s+OBl+OBpuOBhOOBvuOBmVxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoyMzkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIHNlcnZpY2UgJyVzJyBvZiB0eXBlICclcycgaW4gZG9tYWluICclcyc6ICVzXG4iCittc2dzdHIgIiIKKyLjg4njg6HjgqTjg7MgJyUzJHMnIOOBruOCv+OCpOODlyAnJTIkcycg44Gu44K144O844OT44K5ICclMSRzJyDjga7op6PmsbrjgavlpLHmlZfjgZfjgb7jgZfjgZ86ICIKKyIlNCRzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjM0MAorIywgYy1mb3JtYXQKK21zZ2lkICJzZXJ2aWNlX2Jyb3dzZXIgZmFpbGVkOiAlc1xuIgorbXNnc3RyICJzZXJ2aWNlX2Jyb3dzZXIg44GM5aSx5pWX44GX44G+44GX44GfOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzozNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXZhaGlfc2VydmljZV9icm93c2VyX25ldygpIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAiYXZhaGlfc2VydmljZV9icm93c2VyX25ldygpIOOBjOWkseaVl+OBl+OBvuOBl+OBnzogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgInNlcnZpY2VfdHlwZV9icm93c2VyIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAic2VydmljZV90eXBlX2Jyb3dzZXIg44GM5aSx5pWX44GX44G+44GX44GfOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo0NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXZhaGlfc2VydmljZV90eXBlX2Jyb3dzZXJfbmV3KCkgZmFpbGVkOiAlc1xuIgorbXNnc3RyICJhdmFoaV9zZXJ2aWNlX3R5cGVfYnJvd3Nlcl9uZXcoKSDjgYzlpLHmlZfjgZfjgb7jgZfjgZ86ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjUxOQorIywgYy1mb3JtYXQKK21zZ2lkICJhdmFoaV9kb21haW5fYnJvd3Nlcl9uZXcoKSBmYWlsZWQ6ICVzXG4iCittc2dzdHIgImF2YWhpX2RvbWFpbl9icm93c2VyX25ldygpIOOBjOWkseaVl+OBl+OBvuOBl+OBnzogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTM1IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozOTQKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyODAgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE2OAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcXVlcnkgdmVyc2lvbiBzdHJpbmc6ICVzXG4iCittc2dzdHIgIuODkOODvOOCuOODp+ODs+aWh+Wtl+WIl+OBruOCr+OCqOODquOBq+WkseaVl+OBl+OBvuOBl+OBnzogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTQwIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozOTkKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyODUgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE3MworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcXVlcnkgaG9zdCBuYW1lOiAlc1xuIgorbXNnc3RyICLjg5vjgrnjg4jlkI3jga7jgq/jgqjjg6rjgavlpLHmlZfjgZfjgb7jgZfjgZ86ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU0NCAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6NDAzCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6Mjg5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VydmVyIHZlcnNpb246ICVzOyBIb3N0IG5hbWU6ICVzXG4iCittc2dzdHIgIuOCteODvOODkOOBruODkOODvOOCuOODp+ODszogJTEkczsg44Ob44K544OI5ZCNOiAlMiRzXG4iCisKKyMuIFRyYW5zbGF0b3JzOiBUaGlzIGlzIGEgY29sdW1uIGhlYWRpbmcgd2l0aCBhYmJyZXZpYXRpb25zIGZvcgorIy4gKiAgIEV2ZW50ICgrLy0pLCBOZXR3b3JrIEludGVyZmFjZSwgUHJvdG9jb2wgKElQdjQvdjYpLCBEb21haW4KKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU0OQorIywgYy1mb3JtYXQKK21zZ2lkICJFIElmY2UgUHJvdCBEb21haW5cbiIKK21zZ3N0ciAiRSBJZmNlIFByb3Qg44OJ44Oh44Kk44OzXG4iCisKKyMuIFRyYW5zbGF0b3JzOiBUaGlzIGlzIGEgY29sdW1uIGhlYWRpbmcgd2l0aCBhYmJyZXZpYXRpb25zIGZvcgorIy4gKiAgIEV2ZW50ICgrLy0pLCBOZXR3b3JrIEludGVyZmFjZSwgUHJvdG9jb2wgKElQdjQvdjYpLCBEb21haW4KKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU1MworIywgYy1mb3JtYXQKK21zZ2lkICJFIElmY2UgUHJvdCAlLSpzICUtMjBzIERvbWFpblxuIgorbXNnc3RyICJFIElmY2UgUHJvdCAlLSpzICUtMjBzIOODieODoeOCpOODs1xuIgorCisjLiBXZSBoYXZlIGJlZW4gZGlzY29ubmVjdGVkLCBzbyBsZXQgcmVjb25uZWN0CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1ODUgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE2MworIywgYy1mb3JtYXQKK21zZ2lkICJEaXNjb25uZWN0ZWQsIHJlY29ubmVjdGluZyAuLi5cbiIKK21zZ3N0ciAi5YiH5pat44GV44KM44G+44GX44Gf44CC5YaN5o6l57aa44GX44Gm44GE44G+44GZ4oCmXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU5OSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo4MjkKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxNzAgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjM4NgorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI3MiAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTYwCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgY2xpZW50IG9iamVjdDogJXNcbiIKK21zZ3N0ciAi44Kv44Op44Kk44Ki44Oz44OI44Kq44OW44K444Kn44Kv44OI44Gu5L2c5oiQ44Gr5aSx5pWX44GX44G+44GX44GfOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo2MDQgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE3NQorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjE0MyAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xpZW50IGZhaWx1cmUsIGV4aXRpbmc6ICVzXG4iCittc2dzdHIgIuOCr+ODqeOCpOOCouODs+ODiOOBjOWkseaVl+OBl+OBvuOBl+OBn+OAgue1guS6huOBl+OBpuOBhOOBvuOBmTogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NjIzIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoyMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FpdGluZyBmb3IgZGFlbW9uIC4uLlxuIgorbXNnc3RyICLjg4fjg7zjg6Ljg7PjgpLlvoXjgaPjgabjgYTjgb7jgZkuLi5cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NjQ3Cittc2dpZCAiIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLUQgLS1icm93c2UtZG9tYWlucyAgQnJvd3NlIGZvciBicm93c2luZyBkb21haW5zIGluc3RlYWQgb2Ygc2VydmljZXNcbiIKKyIgICAgLWEgLS1hbGwgICAgICAgICAgICAgU2hvdyBhbGwgc2VydmljZXMsIHJlZ2FyZGxlc3Mgb2YgdGhlIHR5cGVcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgVGhlIGRvbWFpbiB0byBicm93c2UgaW5cbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgRW5hYmxlIHZlcmJvc2UgbW9kZVxuIgorIiAgICAtdCAtLXRlcm1pbmF0ZSAgICAgICBUZXJtaW5hdGUgYWZ0ZXIgZHVtcGluZyBhIG1vcmUgb3IgbGVzcyBjb21wbGV0ZSAiCisibGlzdFxuIgorIiAgICAtYyAtLWNhY2hlICAgICAgICAgICBUZXJtaW5hdGUgYWZ0ZXIgZHVtcGluZyBhbGwgZW50cmllcyBmcm9tIHRoZSBjYWNoZVxuIgorIiAgICAtbCAtLWlnbm9yZS1sb2NhbCAgICBJZ25vcmUgbG9jYWwgc2VydmljZXNcbiIKKyIgICAgLXIgLS1yZXNvbHZlICAgICAgICAgUmVzb2x2ZSBzZXJ2aWNlcyBmb3VuZFxuIgorIiAgICAtZiAtLW5vLWZhaWwgICAgICAgICBEb24ndCBmYWlsIGlmIHRoZSBkYWVtb24gaXMgbm90IGF2YWlsYWJsZVxuIgorIiAgICAtcCAtLXBhcnNhYmxlICAgICAgICBPdXRwdXQgaW4gcGFyc2FibGUgZm9ybWF0XG4iCittc2dzdHIgIiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAg44GT44Gu44OY44Or44OX44KS6KGo56S644GZ44KLXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIOODkOODvOOCuOODp+ODs+OCkuihqOekuuOBmeOCi1xuIgorIiAgICAtRCAtLWJyb3dzZS1kb21haW5zICDjgrXjg7zjg5Pjgrnjgafjga/jgarjgY/jg4njg6HjgqTjg7PjgpLmpJzntKJcbiIKKyIgICAgLWEgLS1hbGwgICAgICAgICAgICAg44K/44Kk44OX44Gn44Gv44Gq44GP44CB5YWo44Gm44Gu44K144O844OT44K544KS6KGo56S644GZ44KLXG4iCisiICAgIC1kIC0tZG9tYWluPURPTUFJTiAgIOaknOe0ouOBmeOCi+ODieODoeOCpOODs+OCkuaMh+WumlxuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICDlhpfplbflh7rlipvjg6Ljg7zjg4njgpLmnInlirnjgavjgZnjgotcbiIKKyIgICAgLXQgLS10ZXJtaW5hdGUgICAgICAg44G744G85a6M5YWo44Gq44Oq44K544OI44KS5Ye65Yqb44GX44Gf5b6M44Gn57WC5LqG44GZ44KLXG4iCisiICAgIC1jIC0tY2FjaGUgICAgICAgICAgIOOCreODo+ODg+OCt+ODpeOBi+OCieWFqOOBpuOBruOCqOODs+ODiOODquOCkuWHuuWKm+OBl+OBpue1guS6huOBmeOCi1xuIgorIiAgICAtbCAtLWlnbm9yZS1sb2NhbCAgICDjg63jg7zjgqvjg6vjgrXjg7zjg5PjgrnjgpLnhKHoppbjgZnjgotcbiIKKyIgICAgLXIgLS1yZXNvbHZlICAgICAgICAg6KaL44Gk44GR44Gf44K144O844OT44K544KS6Kej5rG644GZ44KLXG4iCisiICAgIC1mIC0tbm8tZmFpbCAgICAgICAgIOODh+ODvOODouODs+OBjOWIqeeUqOOBp+OBjeOBquOBhOmam+OAgWZhaWwg44GX44Gq44GEXG4iCisiICAgIC1wIC0tcGFyc2FibGUgICAgICAgIOODkeODvOOCueWHpueQhuOBjOWPr+iDveOBquW9ouW8j+OBp+WHuuWKm+OBmeOCi1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo2NjAKK21zZ2lkICIiCisiICAgIC1rIC0tbm8tZGItbG9va3VwICAgIERvbid0IGxvb2t1cCBzZXJ2aWNlIHR5cGVzXG4iCisiICAgIC1iIC0tZHVtcC1kYiAgICAgICAgIER1bXAgc2VydmljZSB0eXBlIGRhdGFiYXNlXG4iCittc2dzdHIgIiIKKyIgICAgLWsgLS1uby1kYi1sb29rdXAgICAg44K144O844OT44K544K/44Kk44OX44KS5qSc57Si44GX44Gq44GEXG4iCisiICAgIC1iIC0tZHVtcC1kYiAgICAgICAgIOOCteODvOODk+OCueOCv+OCpOODl+OBruODh+ODvOOCv+ODmeODvOOCueOCkuWHuuWKm+OBmeOCi1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo3NjYgLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjIxOQorIywgYy1mb3JtYXQKK21zZ2lkICJUb28gZmV3IGFyZ3VtZW50c1xuIgorbXNnc3RyICLlvJXmlbDjgYzlsJHjgarjgZnjgY7jgb7jgZlcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6ODIxIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozNzgKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyNjQgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIHNpbXBsZSBwb2xsIG9iamVjdC5cbiIKK21zZ3N0ciAic2ltcGxlIHBvbGwg44Kq44OW44K444Kn44Kv44OI44Gu5L2c5oiQ44Gr5aSx5pWX44GX44G+44GX44GfXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo3NgorIywgYy1mb3JtYXQKK21zZ2lkICJFc3RhYmxpc2hlZCB1bmRlciBuYW1lICclcydcbiIKK21zZ3N0ciAi5ZCN5YmNICclcycg44Gn5o6l57aa44KS56K656uL44GX44G+44GZXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo4MQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXI6ICVzXG4iCittc2dzdHIgIueZu+mMsuOBq+WkseaVl+OBl+OBvuOBl+OBnzogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIk5hbWUgY29sbGlzaW9uLCBwaWNraW5nIG5ldyBuYW1lICclcycuXG4iCittc2dzdHIgIuWQjeWJjeOBjOihneeqgeOBl+OBvuOBl+OBn+OAguaWsOOBl+OBhOWQjeWJjSAnJXMnIOOCkuWIqeeUqOOBl+OBvuOBmeOAglxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgZW50cnkgZ3JvdXA6ICVzXG4iCittc2dzdHIgIuOCqOODs+ODiOODquOCsOODq+ODvOODl+OBruS9nOaIkOOBq+WkseaVl+OBl+OBvuOBl+OBnzogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjEyNAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gYWRkIGFkZHJlc3M6ICVzXG4iCittc2dzdHIgIuOCouODieODrOOCueOBrui/veWKoOOBq+WkseaVl+OBl+OBvuOBl+OBnzogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gYWRkIHNlcnZpY2U6ICVzXG4iCittc2dzdHIgIuOCteODvOODk+OCueOBrui/veWKoOOBq+WkseaVl+OBl+OBvuOBl+OBnzogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE0MAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gYWRkIHN1YnR5cGUgJyVzJzogJXNcbiIKK21zZ3N0ciAi44K144OW44K/44Kk44OXICclMSRzJyDjga7ov73liqDjgavlpLHmlZfjgZfjgb7jgZfjgZ86ICUyJHNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE5MQorIywgYy1mb3JtYXQKK21zZ2lkICJIb3N0IG5hbWUgY29uZmxpY3RcbiIKK21zZ3N0ciAi44Ob44K544OI5ZCN44Gu6KGd56qBXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFtvcHRpb25zXSAlcyA8bmFtZT4gPHR5cGU+IDxwb3J0PiBbPHR4dCAuLi4+XVxuIgorIiVzIFtvcHRpb25zXSAlcyA8aG9zdC1uYW1lPiA8YWRkcmVzcz5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgU2hvdyB2ZXJzaW9uXG4iCisiICAgIC1zIC0tc2VydmljZSAgICAgICAgIFB1Ymxpc2ggc2VydmljZVxuIgorIiAgICAtYSAtLWFkZHJlc3MgICAgICAgICBQdWJsaXNoIGFkZHJlc3NcbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgRW5hYmxlIHZlcmJvc2UgbW9kZVxuIgorIiAgICAtZCAtLWRvbWFpbj1ET01BSU4gICBEb21haW4gdG8gcHVibGlzaCBzZXJ2aWNlIGluXG4iCisiICAgIC1IIC0taG9zdD1ET01BSU4gICAgIEhvc3Qgd2hlcmUgc2VydmljZSByZXNpZGVzXG4iCisiICAgICAgIC0tc3VidHlwZT1TVUJUWVBFIEFuIGFkZGl0aW9uYWwgc3VidHlwZSB0byByZWdpc3RlciB0aGlzIHNlcnZpY2UgIgorIndpdGhcbiIKKyIgICAgLVIgLS1uby1yZXZlcnNlICAgICAgRG8gbm90IHB1Ymxpc2ggcmV2ZXJzZSBlbnRyeSB3aXRoIGFkZHJlc3NcbiIKKyIgICAgLWYgLS1uby1mYWlsICAgICAgICAgRG9uJ3QgZmFpbCBpZiB0aGUgZGFlbW9uIGlzIG5vdCBhdmFpbGFibGVcbiIKK21zZ3N0ciAiIgorIiVzIFvjgqrjg5fjgrfjg6fjg7NdICVzIDzlkI3liY0+IDzjgr/jgqTjg5c+IDzjg53jg7zjg4g+IFs8dHh0IC4uLj5dXG4iCisiJXMgW+OCquODl+OCt+ODp+ODs10gJXMgPOODm+OCueODiOWQjT4gPOOCouODieODrOOCuT5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAg44GT44Gu44OY44Or44OX44KS6KGo56S644GZ44KLXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIOODkOODvOOCuOODp+ODs+OCkuihqOekuuOBmeOCi1xuIgorIiAgICAtcyAtLXNlcnZpY2UgICAgICAgICDjgrXjg7zjg5PjgrnjgpLlhazplovjgZnjgotcbiIKKyIgICAgLWEgLS1hZGRyZXNzICAgICAgICAg44Ki44OJ44Os44K544KS5YWs6ZaL44GZ44KLXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIOWGl+mVt+WHuuWKm+ODouODvOODieOCkuacieWKueOBq+OBmeOCi1xuIgorIiAgICAtZCAtLWRvbWFpbj1ET01BSU4gICDjgrXjg7zjg5PjgrnjgpLlhazplovjgZnjgovjg4njg6HjgqTjg7PjgpLmjIflrppcbiIKKyIgICAgLUggLS1ob3N0PURPTUFJTiAgICAg44K144O844OT44K544GM5a2Y5Zyo44GZ44KL44Ob44K544OI44KS5oyH5a6aXG4iCisiICAgICAgIC0tc3VidHlwZT1TVUJUWVBFIOOBk+OBruOCteODvOODk+OCueOCkueZu+mMsuOBmeOCi+i/veWKoOOCteODluOCv+OCpOODl+OCkuaMh+WumlxuIgorIiAgICAtUiAtLW5vLXJldmVyc2UgICAgICDjgqLjg4njg6zjgrnjga7pgIblvJXjgY3jgqjjg7Pjg4jjg6rjgpLlhazplovjgZfjgarjgYRcbiIKKyIgICAgLWYgLS1uby1mYWlsICAgICAgICAg44OH44O844Oi44Oz44GM5Yip55So44Gn44GN44Gq44GE6Zqb44GrIGZhaWwg44GX44Gq44GEXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozMDMgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjMxOAorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgbnVtYmVyIG9mIGFyZ3VtZW50c1xuIgorbXNnc3RyICLlvJXmlbDjga7mlbDjgYzplpPpgZXjgaPjgabjgYTjgb7jgZlcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjMyOQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcGFyc2UgcG9ydCBudW1iZXI6ICVzXG4iCittc2dzdHIgIuODneODvOODiOeVquWPt+OCkuODkeODvOOCueOBmeOCi+OBruOBq+WkseaVl+OBl+OBvuOBl+OBnzogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjM2MSAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGNvbW1hbmQgc3BlY2lmaWVkLlxuIgorbXNnc3RyICLjgrPjg57jg7Pjg4njgYzmjIflrprjgZXjgozjgabjgYTjgb7jgZvjgpPjgIJcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIGhvc3QgbmFtZSAnJXMnOiAlc1xuIgorbXNnc3RyICLjg5vjgrnjg4jlkI0gJyUxJHMnIOOBruino+axuuOBq+WkseaVl+OBl+OBvuOBl+OBnzogJTIkc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIGFkZHJlc3MgJyVzJzogJXNcbiIKK21zZ3N0ciAi44Ki44OJ44Os44K5ICclMSRzJyDjga7op6PmsbrjgavlpLHmlZfjgZfjgb7jgZfjgZ86ICUyJHNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjE1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgW29wdGlvbnNdICVzIDxob3N0IG5hbWUgLi4uPlxuIgorIiVzIFtvcHRpb25zXSAlcyA8YWRkcmVzcyAuLi4gPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLW4gLS1uYW1lICAgICAgICAgICAgUmVzb2x2ZSBob3N0IG5hbWVcbiIKKyIgICAgLWEgLS1hZGRyZXNzICAgICAgICAgUmVzb2x2ZSBhZGRyZXNzXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKKyIgICAgLTYgICAgICAgICAgICAgICAgICAgTG9va3VwIElQdjYgYWRkcmVzc1xuIgorIiAgICAtNCAgICAgICAgICAgICAgICAgICBMb29rdXAgSVB2NCBhZGRyZXNzXG4iCittc2dzdHIgIiIKKyIlcyBb44Kq44OX44K344On44OzXSAlcyA844Ob44K544OI5ZCNIC4uLj5cbiIKKyIlcyBb44Kq44OX44K344On44OzXSAlcyA844Ki44OJ44Os44K5IC4uLiA+XG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIOOBk+OBruODmOODq+ODl+OCkuihqOekulxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICDjg5Djg7zjgrjjg6fjg7PjgpLooajnpLpcbiIKKyIgICAgLW4gLS1uYW1lICAgICAgICAgICAg44Ob44K544OI5ZCN44KS6Kej5rG6XG4iCisiICAgIC1hIC0tYWRkcmVzcyAgICAgICAgIOOCouODieODrOOCueOCkuino+axulxuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICDlhpfplbflh7rlipvjg6Ljg7zjg4njgpLmnInlirnjgavjgZnjgotcbiIKKyIgICAgLTYgICAgICAgICAgICAgICAgICAgSVB2NiDjgqLjg4njg6zjgrnjgafmpJzntKJcbiIKKyIgICAgLTQgICAgICAgICAgICAgICAgICAgSVB2NCDjgqLjg4njg6zjgrnjgafmpJzntKJcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI5OSAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgaG9zdCBuYW1lIHJlc29sdmVyOiAlc1xuIgorbXNnc3RyICLjg5vjgrnjg4jlkI3jga7jg6rjgr7jg6vjg5DkvZzmiJDjgavlpLHmlZfjgZfjgb7jgZfjgZ86ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzozMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIGFkZHJlc3MgJyVzJ1xuIgorbXNnc3RyICLjgqLjg4njg6zjgrkgJyVzJyDjga7lh6bnkIbjgavlpLHmlZfjgZfjgb7jgZfjgZ9cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjMxNAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGFkZHJlc3MgcmVzb2x2ZXI6ICVzXG4iCittc2dzdHIgIuOCouODieODrOOCueOBruODquOCvuODq+ODkOS9nOaIkOOBq+WkseaVl+OBl+OBvuOBl+OBnzogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBbb3B0aW9uc10gPG5ldyBob3N0IG5hbWU+XG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFNob3cgdmVyc2lvblxuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBFbmFibGUgdmVyYm9zZSBtb2RlXG4iCittc2dzdHIgIiIKKyIlcyBb44Kq44OX44K344On44OzXSA85paw44GX44GE44Ob44K544OI5ZCNPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICDjgZPjga7jg5jjg6vjg5fjgpLooajnpLpcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAg44OQ44O844K444On44Oz44KS6KGo56S6XG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIOWGl+mVt+WHuuWKm+ODouODvOODieOCkuacieWKueOBq+OBmeOCi1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cywgZXhwZWN0aW5nIGV4YWN0bHkgb25lLlxuIgorbXNnc3RyICLlvJXmlbDjga7mlbDjgYzkuI3mraPjgafjgZnjgIHkuIDjgaTjgaDjgZHjgpLmjIflrprjgZfjgabjgY/jgaDjgZXjgYTjgIJcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE5MworIywgYy1mb3JtYXQKK21zZ2lkICJIb3N0IG5hbWUgc3VjY2Vzc2Z1bGx5IGNoYW5nZWQgdG8gJXNcbiIKK21zZ3N0ciAi44Ob44K544OI5ZCN44GvICVzIOOBq+WkieabtOOBleOCjOOBvuOBl+OBn1xuIgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL3BvL21zLnBvIGIvYXZhaGktMC42LjMxL3BvL21zLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5MjY3ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvcG8vbXMucG8KQEAgLTAsMCArMSw4NTEgQEAKKyMgYXZhaGkgQmFoYXNhIE1lbGF5dSAoTWFsYXkpIChtcykKKyMgQ29weXJpZ2h0IChDKSAyMDA4IEF2YWhpIFByb2plY3QKKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGF2YWhpIHBhY2thZ2UuCisjIFNoYXJ1enphbWFuIEFobWF0IFJhc2xhbiA8c2hhcnV6emFtYW5AbXlyZWFsYm94LmNvbT4sIDIwMDguCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBhdmFoaVxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMS0wNC0wMiAwMzoyMyswMjAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxMC0xMC0xMiAyMjoyMyswODAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBBaG1lZCBOb29yIEthZGVyIE11c3RhamlyIE1kIEV1c29mZiA8c2lyLmFkZUBnbWFpbC5jb20+XG4iCisiTGFuZ3VhZ2UtVGVhbTogTWFsYXkgPHRyYW5zbGF0aW9uLXRlYW0tbXNAbGlzdHMuc291cmNlZm9yZ2UubmV0PlxuIgorIkxhbmd1YWdlOiBtc1xuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozMAorbXNnaWQgIk9LIgorbXNnc3RyICJPSyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzEKK21zZ2lkICJPcGVyYXRpb24gZmFpbGVkIgorbXNnc3RyICJPcGVyYXNpIGdhZ2FsIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozMgorIywgZnV6enkKK21zZ2lkICJCYWQgc3RhdGUiCittc2dzdHIgIktlYWRhYW4gamFzYWQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjMzCisjLCBmdXp6eQorbXNnaWQgIkludmFsaWQgaG9zdCBuYW1lIgorbXNnc3RyICJOYW1hIEt1bXB1bGFuIFZvbHVtIFRpZGFrIFNhaCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzQKKyMsIGZ1enp5Cittc2dpZCAiSW52YWxpZCBkb21haW4gbmFtZSIKK21zZ3N0ciAiTmFtYSBkb21haW4gdGV0YW11IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozNQorbXNnaWQgIk5vIHN1aXRhYmxlIG5ldHdvcmsgcHJvdG9jb2wgYXZhaWxhYmxlIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM2CisjLCBmdXp6eQorbXNnaWQgIkludmFsaWQgRE5TIFRUTCIKK21zZ3N0ciAiUGVsYXlhbiBOYW1hIEROUyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzcKK21zZ2lkICJSZXNvdXJjZSByZWNvcmQga2V5IGlzIHBhdHRlcm4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzgKKyMsIGZ1enp5Cittc2dpZCAiTG9jYWwgbmFtZSBjb2xsaXNpb24iCittc2dzdHIgIk5hbWU9SmFyaW5nYW4gU2V0ZW1wYXQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM5CisjLCBmdXp6eQorbXNnaWQgIkludmFsaWQgcmVjb3JkIgorbXNnc3RyICJSZWtvZCBtZWxpbXBhaCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDEKKyMsIGZ1enp5Cittc2dpZCAiSW52YWxpZCBzZXJ2aWNlIG5hbWUiCittc2dzdHIgIk5hbWEgS3VtcHVsYW4gVm9sdW0gVGlkYWsgU2FoIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0MgorIywgZnV6enkKK21zZ2lkICJJbnZhbGlkIHNlcnZpY2UgdHlwZSIKK21zZ3N0ciAiSmVuaXMgU2VuYXJhaSBTZW1hc2EiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQzCisjLCBmdXp6eQorbXNnaWQgIkludmFsaWQgcG9ydCBudW1iZXIiCittc2dzdHIgIlBvcnQgRlRQIG1lc3RpbGFoIG5vbWJvci4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQ0CisjLCBmdXp6eQorbXNnaWQgIkludmFsaWQgcmVjb3JkIGtleSIKK21zZ3N0ciAiS2VrdW5jaSBJRCB0aWRhayBzYWggKCVzKSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDUKKyMsIGZ1enp5Cittc2dpZCAiSW52YWxpZCBhZGRyZXNzIgorbXNnc3RyICJCdWt1IEFsYW1hdCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDYKKyMsIGZ1enp5Cittc2dpZCAiVGltZW91dCByZWFjaGVkIgorbXNnc3RyICJQZWxheWFuIG1hc2F0YW1hdCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDcKK21zZ2lkICJUb28gbWFueSBjbGllbnRzIgorbXNnc3RyICJUZXJsYWx1IGJhbnlhayBrbGllbiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDgKK21zZ2lkICJUb28gbWFueSBvYmplY3RzIgorbXNnc3RyICJUZXJsYWx1IGJhbnlhayBvYmplayIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDkKKyMsIGZ1enp5Cittc2dpZCAiVG9vIG1hbnkgZW50cmllcyIKK21zZ3N0ciAiVGVybGFsdSBiYW55YWsgZ2FudGlhbiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTAKK21zZ2lkICJPUyBFcnJvciIKK21zZ3N0ciAiUmFsYXQgT1MiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjUyCisjLCBmdXp6eQorbXNnaWQgIkFjY2VzcyBkZW5pZWQiCittc2dzdHIgIkFrc2VzIHRlbGFoIGRpaGFsYW5nIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1MworIywgZnV6enkKK21zZ2lkICJJbnZhbGlkIG9wZXJhdGlvbiIKK21zZ3N0ciAiVGFuZGEgb3BlcmFzaToiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU0CisjLCBmdXp6eQorbXNnaWQgIkFuIHVuZXhwZWN0ZWQgRC1CdXMgZXJyb3Igb2NjdXJlZCIKK21zZ3N0ciAiIgorIlJhbGF0IHRpZGFrIGRpamFuZ2thIHRlbGFoIGJlcmxha3U6XG4iCisiJXMiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU1CisjLCBmdXp6eQorbXNnaWQgIkRhZW1vbiBjb25uZWN0aW9uIGZhaWxlZCIKK21zZ3N0ciAiUGVsYWtzYW5hYW4gZ3BnIGdhZ2FsICglZClcbiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTYKKyMsIGZ1enp5Cittc2dpZCAiTWVtb3J5IGV4aGF1c3RlZCIKK21zZ3N0ciAia2VoYWJpc2FuIG1lbW9yaSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTcKK21zZ2lkICJUaGUgb2JqZWN0IHBhc3NlZCBpbiB3YXMgbm90IHZhbGlkIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU4CisjLCBmdXp6eQorbXNnaWQgIkRhZW1vbiBub3QgcnVubmluZyIKK21zZ3N0ciAiJXMgdGlkYWsgZGlsYWtzYW5ha2FuLlxuIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1OQorIywgZnV6enkKK21zZ2lkICJJbnZhbGlkIGludGVyZmFjZSBpbmRleCIKK21zZ3N0ciAiUGFwYXIgSW5kZWtzIEJhbnR1YW4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjYwCisjLCBmdXp6eQorbXNnaWQgIkludmFsaWQgcHJvdG9jb2wgc3BlY2lmaWNhdGlvbiIKK21zZ3N0ciAiR3VuYSBwcm90b2tvbCBUQ1AiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjYxCisjLCBmdXp6eQorbXNnaWQgIkludmFsaWQgZmxhZ3MiCittc2dzdHIgIk5hbWEgcGF0aCB0aWRhayBzYWguIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2MworbXNnaWQgIk5vdCBmb3VuZCIKK21zZ3N0ciAiVGlkYWsgZGlqdW1wYWkiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY0CisjLCBmdXp6eQorbXNnaWQgIkludmFsaWQgY29uZmlndXJhdGlvbiIKK21zZ3N0ciAiVGV0YXBhbiBLRmlzaCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjUKKyMsIGZ1enp5Cittc2dpZCAiVmVyc2lvbiBtaXNtYXRjaCIKK21zZ3N0ciAiS2F0YWxhbHVhbiBUaWRhayBTZXBhZGFuIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2NgorIywgZnV6enkKK21zZ2lkICJJbnZhbGlkIHNlcnZpY2Ugc3VidHlwZSIKK21zZ3N0ciAiS29uZmlndXIgcGVuZW11YW4gc2VydmlzIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2NworIywgZnV6enkKK21zZ2lkICJJbnZhbGlkIHBhY2tldCIKK21zZ3N0ciAiTmFtYSBwYXRoIHRpZGFrIHNhaC4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY4Cittc2dpZCAiSW52YWxpZCBETlMgcmV0dXJuIGNvZGUiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjkKKyMsIGZ1enp5Cittc2dpZCAiRE5TIGZhaWx1cmU6IEZPUk1FUlIiCittc2dzdHIgIlBlbGF5YW4gTmFtYSBETlMiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjcwCisjLCBmdXp6eQorbXNnaWQgIkROUyBmYWlsdXJlOiBTRVJWRkFJTCIKK21zZ3N0ciAiUGVsYXlhbiBOYW1hIEROUyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzEKKyMsIGZ1enp5Cittc2dpZCAiRE5TIGZhaWx1cmU6IE5YRE9NQUlOIgorbXNnc3RyICJQZWxheWFuIE5hbWEgRE5TIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3MgorIywgZnV6enkKK21zZ2lkICJETlMgZmFpbHVyZTogTk9USU1QIgorbXNnc3RyICJQZWxheWFuIE5hbWEgRE5TIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3NAorIywgZnV6enkKK21zZ2lkICJETlMgZmFpbHVyZTogUkVGVVNFRCIKK21zZ3N0ciAiUGVsYXlhbiBOYW1hIEROUyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzUKKyMsIGZ1enp5Cittc2dpZCAiRE5TIGZhaWx1cmU6IFlYRE9NQUlOIgorbXNnc3RyICJQZWxheWFuIE5hbWEgRE5TIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3NgorIywgZnV6enkKK21zZ2lkICJETlMgZmFpbHVyZTogWVhSUlNFVCIKK21zZ3N0ciAiUGVsYXlhbiBOYW1hIEROUyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzcKKyMsIGZ1enp5Cittc2dpZCAiRE5TIGZhaWx1cmU6IE5YUlJTRVQiCittc2dzdHIgIlBlbGF5YW4gTmFtYSBETlMiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc4CisjLCBmdXp6eQorbXNnaWQgIkROUyBmYWlsdXJlOiBOT1RBVVRIIgorbXNnc3RyICJQZWxheWFuIE5hbWEgRE5TIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3OQorIywgZnV6enkKK21zZ2lkICJETlMgZmFpbHVyZTogTk9UWk9ORSIKK21zZ3N0ciAiUGVsYXlhbiBOYW1hIEROUyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODAKKyMsIGZ1enp5Cittc2dpZCAiSW52YWxpZCBSREFUQSIKK21zZ3N0ciAiTmFtYSBwYXRoIHRpZGFrIHNhaC4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjgxCisjLCBmdXp6eQorbXNnaWQgIkludmFsaWQgRE5TIHR5cGUiCittc2dzdHIgIkplbmlzIFNlbmFyYWkgU2VtYXNhIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4MgorIywgZnV6enkKK21zZ2lkICJJbnZhbGlkIEROUyBjbGFzcyIKK21zZ3N0ciAiUGVsYXlhbiBOYW1hIEROUyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODMKK21zZ2lkICJOb3Qgc3VwcG9ydGVkIgorbXNnc3RyICJUaWRhayBkaXNva29uZyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODUKKyMsIGZ1enp5Cittc2dpZCAiTm90IHBlcm1pdHRlZCIKK21zZ3N0ciAiVGlhZGEiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjg2CisjLCBmdXp6eQorbXNnaWQgIkludmFsaWQgYXJndW1lbnQiCittc2dzdHIgImh1amFoIHRpZGFrIHNhaCAlcyB1bnR1ayAlcyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODcKKyMsIGZ1enp5Cittc2dpZCAiSXMgZW1wdHkiCittc2dzdHIgIlBpbGloYW4gU2VtYXNhIGFkYWxhaCBLb3NvbmciCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjg4Cittc2dpZCAiVGhlIHJlcXVlc3RlZCBvcGVyYXRpb24gaXMgaW52YWxpZCBiZWNhdXNlIHJlZHVuZGFudCIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo5NAorIywgZnV6enkKK21zZ2lkICJJbnZhbGlkIEVycm9yIENvZGUiCittc2dzdHIgIihrb2QgcmFsYXQgdGlkYWsgZGlrZXRhaHVpKSIKKworIzogLi4vYXZhaGktZGlzY292ZXItc3RhbmRhbG9uZS9hdmFoaS1kaXNjb3Zlci51aS5oOjEKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weTo3NgorbXNnaWQgIjxpPk5vIHNlcnZpY2UgY3VycmVudGx5IHNlbGVjdGVkLjwvaT4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktZGlzY292ZXItc3RhbmRhbG9uZS9hdmFoaS1kaXNjb3Zlci51aS5oOjIKK21zZ2lkICJBdmFoaSBEaXNjb3ZlcnkiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLmRlc2t0b3AuaW4uaW4uaDoxCisjLCBmdXp6eQorbXNnaWQgIkF2YWhpIFplcm9jb25mIEJyb3dzZXIiCittc2dzdHIgIlBlbGF5YW4gVk5DIGtpbmkgdGVybGFrc2FuYS4iCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5kZXNrdG9wLmluLmluLmg6MgorbXNnaWQgIkJyb3dzZSBmb3IgWmVyb2NvbmYgc2VydmljZXMgYXZhaWxhYmxlIG9uIHlvdXIgbmV0d29yayIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI0Cittc2dpZCAiVFhUIgorbXNnc3RyICJUWFQiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMjYKK21zZ2lkICJUWFQgRGF0YToiCittc2dzdHIgIkRhdGEgVFhUOiIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIyNgorbXNnaWQgImVtcHR5IgorbXNnc3RyICJrb3NvbmciCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMjgKK21zZ2lkICJTZXJ2aWNlIFR5cGU6IgorbXNnc3RyICJKZW5pcyBTZXJ2aXM6IgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI5Cittc2dpZCAiU2VydmljZSBOYW1lOiIKK21zZ3N0ciAiTmFtYSBTZXJ2aXM6IgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjMwCittc2dpZCAiRG9tYWluIE5hbWU6IgorbXNnc3RyICJOYW1hIERvbWFpbjoiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMzEKK21zZ2lkICJJbnRlcmZhY2U6IgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMzIKK21zZ2lkICJBZGRyZXNzOiIKK21zZ3N0ciAiQWxhbWF0OiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxODUKK21zZ2lkICJCcm93c2UgU2VydmljZSBUeXBlcyIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE4NQorbXNnaWQgIkEgTlVMTCB0ZXJtaW5hdGVkIGxpc3Qgb2Ygc2VydmljZSB0eXBlcyB0byBicm93c2UgZm9yIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTkwCittc2dpZCAiRG9tYWluIgorbXNnc3RyICJEb21haW4iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTkwCittc2dpZCAiVGhlIGRvbWFpbiB0byBicm93c2UgaW4sIG9yIE5VTEwgZm9yIHRoZSBkZWZhdWx0IGRvbWFpbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE5NgorbXNnaWQgIlNlcnZpY2UgVHlwZSIKK21zZ3N0ciAiSmVuaXMgU2VydmlzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE5NgorbXNnaWQgIlRoZSBzZXJ2aWNlIHR5cGUgb2YgdGhlIHNlbGVjdGVkIHNlcnZpY2UiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMDIgLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMDIzCittc2dpZCAiU2VydmljZSBOYW1lIgorbXNnc3RyICJOYW1hIFNlcnZpcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMDIKK21zZ2lkICJUaGUgc2VydmljZSBuYW1lIG9mIHRoZSBzZWxlY3RlZCBzZXJ2aWNlIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjA4Cittc2dpZCAiQWRkcmVzcyIKK21zZ3N0ciAiQWxhbWF0IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIwOAorbXNnaWQgIlRoZSBhZGRyZXNzIG9mIHRoZSByZXNvbHZlZCBzZXJ2aWNlIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjEzCittc2dpZCAiUG9ydCIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIxMworbXNnaWQgIlRoZSBJUCBwb3J0IG51bWJlciBvZiB0aGUgcmVzb2x2ZWQgc2VydmljZSIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIxOQorbXNnaWQgIkhvc3QgTmFtZSIKK21zZ3N0ciAiTmFtYSBIb3MiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjE5Cittc2dpZCAiVGhlIGhvc3QgbmFtZSBvZiB0aGUgcmVzb2x2ZWQgc2VydmljZSIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIyNQorbXNnaWQgIlRYVCBEYXRhIgorbXNnc3RyICJEYXRhIFRYVCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMjUKK21zZ2lkICJUaGUgVFhUIGRhdGEgb2YgdGhlIHJlc29sdmVkIHNlcnZpY2UiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMzAKKyMsIGZ1enp5Cittc2dpZCAiUmVzb2x2ZSBTZXJ2aWNlIgorbXNnc3RyICJOYW1hIEt1bXB1bGFuIFZvbHVtIFRpZGFrIFNhaCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMzAKK21zZ2lkICJSZXNvbHZlIHRoZSBzZWxlY3RlZCBzZXJ2aWNlIGF1dG9tYXRpY2FsbHkgYmVmb3JlIHJldHVybmluZyIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIzNgorIywgZnV6enkKK21zZ2lkICJSZXNvbHZlIFNlcnZpY2UgSG9zdCBOYW1lIgorbXNnc3RyICJOYW1hIEt1bXB1bGFuIFZvbHVtIFRpZGFrIFNhaCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMzYKK21zZ2lkICIiCisiUmVzb2x2ZSB0aGUgaG9zdCBuYW1lIG9mIHRoZSBzZWxlY3RlZCBzZXJ2aWNlIGF1dG9tYXRpY2FsbHkgYmVmb3JlIHJldHVybmluZyIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjI0MgorbXNnaWQgIkFkZHJlc3MgZmFtaWx5IgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjQyCittc2dpZCAiVGhlIGFkZHJlc3MgZmFtaWx5IGZvciBob3N0IG5hbWUgcmVzb2x1dGlvbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjMyNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQXZhaGkgY2xpZW50IGZhaWx1cmU6ICVzIgorbXNnc3RyICJLbGllbiBQZWxheWFuIFRlcm1pbmFsIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjM4OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQXZhaGkgcmVzb2x2ZXIgZmFpbHVyZTogJXMiCittc2dzdHIgIk1lbXVsYWthbiBkYWVtb24gQXZhaGk6IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjUxOAorIywgYy1mb3JtYXQKK21zZ2lkICJCcm93c2luZyBmb3Igc2VydmljZSB0eXBlICVzIGluIGRvbWFpbiAlcyBmYWlsZWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NTE5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjE2OAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTY5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjE3OAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTc5Cittc2dpZCAibi9hIgorbXNnc3RyICJuL2EiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWhpIGRvbWFpbiBicm93c2VyIGZhaWx1cmU6ICVzIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6Njg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWFkIEF2YWhpIGRvbWFpbjogJXMiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo3MDYKK21zZ2lkICJCcm93c2Ugc2VydmljZSB0eXBlIGxpc3QgaXMgZW1wdHkhIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NzE3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY29ubmVjdCB0byBBdmFoaSBzZXJ2ZXI6ICVzIgorbXNnc3RyICJQZW5hbWJhaGFuICVzIGtlIFBlbGF5YW4gVGVybWluYWwgZ2FnYWwhXG4iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NzM1Cittc2dpZCAiQnJvd3NpbmcgZm9yIHNlcnZpY2VzIG9uIDxiPmxvY2FsIG5ldHdvcms8L2I+OiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjczNworIywgYy1mb3JtYXQKK21zZ2lkICJCcm93c2luZyBmb3Igc2VydmljZXMgaW4gZG9tYWluIDxiPiVzPC9iPjoiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo3NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBicm93c2VyIGZvciAlczogJXMiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo5MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSByZXNvbHZlciBmb3IgJXMgb2YgdHlwZSAlcyBpbiBkb21haW4gJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6OTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgZG9tYWluIGJyb3dzZXI6ICVzIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6OTg5Cittc2dpZCAiQ2hhbmdlIGRvbWFpbiIKK21zZ3N0ciAiVHVrYXIgZG9tYWluIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjEwMzEgLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTYyCisjLCBmdXp6eQorbXNnaWQgIkJyb3dzaW5nLi4uIgorbXNnc3RyICJLb25maWd1ciBwZWxheWFyYW4gbGFuanV0YW4iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTEyMAorIywgZnV6enkKK21zZ2lkICJJbml0aWFsaXppbmcuLi4iCittc2dzdHIgIlBlcnNlZGlhYW4uLi4iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTE0NAorbXNnaWQgIkxvY2F0aW9uIgorbXNnc3RyICJMb2thc2kiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTE0OSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NTMKK21zZ2lkICJOYW1lIgorbXNnc3RyICJOYW1hIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNTQgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTUzCittc2dpZCAiVHlwZSIKK21zZ3N0ciAiSmVuaXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTE2NgorbXNnaWQgIl9Eb21haW4uLi4iCittc2dzdHIgIl9Eb21haW4uLi4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzo1NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgW29wdGlvbnNdXG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1zIC0tc3NoICAgICAgICAgICAgIEJyb3dzZSBTU0ggc2VydmVyc1xuIgorIiAgICAtdiAtLXZuYyAgICAgICAgICAgICBCcm93c2UgVk5DIHNlcnZlcnNcbiIKKyIgICAgLVMgLS1zaGVsbCAgICAgICAgICAgQnJvd3NlIGJvdGggU1NIIGFuZCBWTkNcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgVGhlIGRvbWFpbiB0byBicm93c2UgaW5cbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTAxIC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjc3NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVG9vIG1hbnkgYXJndW1lbnRzXG4iCittc2dzdHIgIiVzOiB0ZXJsYWx1IGJhbnlhayBodWphaFxuIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTQ5Cittc2dpZCAiQ2hvb3NlIFNoZWxsIFNlcnZlciIKK21zZ3N0ciAiUGlsaWggUGVsYXlhbiBTaGVsbCIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE1MQorbXNnaWQgIkRlc2t0b3AiCittc2dzdHIgIkRlc2t0b3AiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNTIKK21zZ2lkICJUZXJtaW5hbCIKK21zZ3N0ciAiVGVybWluYWwiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNTYKK21zZ2lkICJDaG9vc2UgVk5DIHNlcnZlciIKK21zZ3N0ciAiUGlsaWggUGVsYXlhbiBWTkMiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNjEKK21zZ2lkICJDaG9vc2UgU1NIIHNlcnZlciIKK21zZ3N0ciAiUGlsaWggUGVsYXlhbiBTU0giCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29ubmVjdGluZyB0byAnJXMnIC4uLlxuIgorbXNnc3RyICJNZW55YW1idW5nIGtlICVzJyAuLi5cbiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjI0MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZXhlY2xwKCkgZmFpbGVkOiAlc1xuIgorbXNnc3RyICJTYW1idW5nYW4gR2FnYWwiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoyNTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNhbmNlbGVkLlxuIgorbXNnc3RyICJQZW5nZ3VuYSBtZW1iYXRhbGthbiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5kZXNrdG9wLmluLmluLmg6MQorbXNnaWQgIkF2YWhpIFNTSCBTZXJ2ZXIgQnJvd3NlciIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmRlc2t0b3AuaW4uaW4uaDoyCittc2dpZCAiQnJvd3NlIGZvciBaZXJvY29uZi1lbmFibGVkIFNTSCBTZXJ2ZXJzIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2J2bmMuZGVza3RvcC5pbi5pbi5oOjEKKyMsIGZ1enp5Cittc2dpZCAiQXZhaGkgVk5DIFNlcnZlciBCcm93c2VyIgorbXNnc3RyICJQZWxheWFuIFZOQyBraW5pIHRlcmxha3NhbmEuIgorCisjOiAuLi9hdmFoaS11aS9idm5jLmRlc2t0b3AuaW4uaW4uaDoyCittc2dpZCAiQnJvd3NlIGZvciBaZXJvY29uZi1lbmFibGVkIFZOQyBTZXJ2ZXJzIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjEwNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiOiBBbGwgZm9yIG5vd1xuIgorbXNnc3RyICJQZW1hc2FuZyBha2FuIGtlbHVhciBzZWthcmFuZy4uLiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTE4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICI6IENhY2hlIGV4aGF1c3RlZFxuIgorbXNnc3RyICJrZWhhYmlzYW4gbWVtb3JpIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoyMzkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIHNlcnZpY2UgJyVzJyBvZiB0eXBlICclcycgaW4gZG9tYWluICclcyc6ICVzXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MzQwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJzZXJ2aWNlX2Jyb3dzZXIgZmFpbGVkOiAlc1xuIgorbXNnc3RyICJHYWdhbCB1bnR1ayBNZW5lcmJpdGthbiBTZXJ2aXMiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjM3OAorIywgYy1mb3JtYXQKK21zZ2lkICJhdmFoaV9zZXJ2aWNlX2Jyb3dzZXJfbmV3KCkgZmFpbGVkOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjQxNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAic2VydmljZV90eXBlX2Jyb3dzZXIgZmFpbGVkOiAlc1xuIgorbXNnc3RyICJHYWdhbCB1bnR1ayBNZW5lcmJpdGthbiBTZXJ2aXMiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjQ0NAorIywgYy1mb3JtYXQKK21zZ2lkICJhdmFoaV9zZXJ2aWNlX3R5cGVfYnJvd3Nlcl9uZXcoKSBmYWlsZWQ6ICVzXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTE5CisjLCBjLWZvcm1hdAorbXNnaWQgImF2YWhpX2RvbWFpbl9icm93c2VyX25ldygpIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1MzUgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjM5NAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI4MCAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBxdWVyeSB2ZXJzaW9uIHN0cmluZzogJXNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NDAgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjM5OQorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI4NSAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTczCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBxdWVyeSBob3N0IG5hbWU6ICVzXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTQ0IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo0MDMKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyODkgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE3NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiU2VydmVyIHZlcnNpb246ICVzOyBIb3N0IG5hbWU6ICVzXG4iCittc2dzdHIgIk5hbWU9UGVsYXlhbiBGYWlsIEF3YW0iCisKKyMuIFRyYW5zbGF0b3JzOiBUaGlzIGlzIGEgY29sdW1uIGhlYWRpbmcgd2l0aCBhYmJyZXZpYXRpb25zIGZvcgorIy4gKiAgIEV2ZW50ICgrLy0pLCBOZXR3b3JrIEludGVyZmFjZSwgUHJvdG9jb2wgKElQdjQvdjYpLCBEb21haW4KKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU0OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRSBJZmNlIFByb3QgRG9tYWluXG4iCittc2dzdHIgImRvbWFpbiBOSVMgZGVmYXVsdCIKKworIy4gVHJhbnNsYXRvcnM6IFRoaXMgaXMgYSBjb2x1bW4gaGVhZGluZyB3aXRoIGFiYnJldmlhdGlvbnMgZm9yCisjLiAqICAgRXZlbnQgKCsvLSksIE5ldHdvcmsgSW50ZXJmYWNlLCBQcm90b2NvbCAoSVB2NC92NiksIERvbWFpbgorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUgSWZjZSBQcm90ICUtKnMgJS0yMHMgRG9tYWluXG4iCittc2dzdHIgIiIKKworIy4gV2UgaGF2ZSBiZWVuIGRpc2Nvbm5lY3RlZCwgc28gbGV0IHJlY29ubmVjdAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTg1IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxNjMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkRpc2Nvbm5lY3RlZCwgcmVjb25uZWN0aW5nIC4uLlxuIgorbXNnc3RyICJNYW5kcml2YSAtIEthbGkgUGVydGFtYSAtIFRpZGFrIGJlcnNhbWJ1bmciCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU5OSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo4MjkKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxNzAgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjM4NgorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI3MiAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTYwCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgY2xpZW50IG9iamVjdDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo2MDQgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE3NQorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjE0MyAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6NTkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNsaWVudCBmYWlsdXJlLCBleGl0aW5nOiAlc1xuIgorbXNnc3RyICJLbGllbiBQZWxheWFuIFRlcm1pbmFsIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo2MjMgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjIwNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiV2FpdGluZyBmb3IgZGFlbW9uIC4uLlxuIgorbXNnc3RyICJNZW51bmdndSBzYW1idW5nYW4gdGVsbmV0Li4uIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo2NDcKK21zZ2lkICIiCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFNob3cgdmVyc2lvblxuIgorIiAgICAtRCAtLWJyb3dzZS1kb21haW5zICBCcm93c2UgZm9yIGJyb3dzaW5nIGRvbWFpbnMgaW5zdGVhZCBvZiBzZXJ2aWNlc1xuIgorIiAgICAtYSAtLWFsbCAgICAgICAgICAgICBTaG93IGFsbCBzZXJ2aWNlcywgcmVnYXJkbGVzcyBvZiB0aGUgdHlwZVxuIgorIiAgICAtZCAtLWRvbWFpbj1ET01BSU4gICBUaGUgZG9tYWluIHRvIGJyb3dzZSBpblxuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBFbmFibGUgdmVyYm9zZSBtb2RlXG4iCisiICAgIC10IC0tdGVybWluYXRlICAgICAgIFRlcm1pbmF0ZSBhZnRlciBkdW1waW5nIGEgbW9yZSBvciBsZXNzIGNvbXBsZXRlICIKKyJsaXN0XG4iCisiICAgIC1jIC0tY2FjaGUgICAgICAgICAgIFRlcm1pbmF0ZSBhZnRlciBkdW1waW5nIGFsbCBlbnRyaWVzIGZyb20gdGhlIGNhY2hlXG4iCisiICAgIC1sIC0taWdub3JlLWxvY2FsICAgIElnbm9yZSBsb2NhbCBzZXJ2aWNlc1xuIgorIiAgICAtciAtLXJlc29sdmUgICAgICAgICBSZXNvbHZlIHNlcnZpY2VzIGZvdW5kXG4iCisiICAgIC1mIC0tbm8tZmFpbCAgICAgICAgIERvbid0IGZhaWwgaWYgdGhlIGRhZW1vbiBpcyBub3QgYXZhaWxhYmxlXG4iCisiICAgIC1wIC0tcGFyc2FibGUgICAgICAgIE91dHB1dCBpbiBwYXJzYWJsZSBmb3JtYXRcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo2NjAKK21zZ2lkICIiCisiICAgIC1rIC0tbm8tZGItbG9va3VwICAgIERvbid0IGxvb2t1cCBzZXJ2aWNlIHR5cGVzXG4iCisiICAgIC1iIC0tZHVtcC1kYiAgICAgICAgIER1bXAgc2VydmljZSB0eXBlIGRhdGFiYXNlXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NzY2IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyMTkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlRvbyBmZXcgYXJndW1lbnRzXG4iCittc2dzdHIgIiVzOiB0ZXJsYWx1IGJhbnlhayBodWphaFxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo4MjEgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjM3OAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI2NCAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgc2ltcGxlIHBvbGwgb2JqZWN0LlxuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo3NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRXN0YWJsaXNoZWQgdW5kZXIgbmFtZSAnJXMnXG4iCittc2dzdHIgIlNpbXBhbiBkb2t1bWVuIGRlbmdhbiBuYW1hIGxhaW4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo4MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyOiAlc1xuIgorbXNnc3RyICJNZW51bGlzIGtlICVzIGdhZ2FsISIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjk0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJOYW1lIGNvbGxpc2lvbiwgcGlja2luZyBuZXcgbmFtZSAnJXMnLlxuIgorbXNnc3RyICJOYW1lPUFkYSBCZXJpdGEgTXV0YWtoaXIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBlbnRyeSBncm91cDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgYWRkcmVzczogJXNcbiIKK21zZ3N0ciAiR2FnYWwgdW50dWsgbWVuYW1iYWggYWxhbWF0OiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgc2VydmljZTogJXNcbiIKK21zZ3N0ciAiR2FnYWwgdW50dWsgbWVuYW1iYWggc2VydmlzOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgc3VidHlwZSAnJXMnOiAlc1xuIgorbXNnc3RyICJHYWdhbCB1bnR1ayBtZW5hbWJhaCBzdWIgamVuaXMgJyVzJzogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE5MQorIywgYy1mb3JtYXQKK21zZ2lkICJIb3N0IG5hbWUgY29uZmxpY3RcbiIKK21zZ3N0ciAiS29uZmxpayBuYW1hIGhvc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBbb3B0aW9uc10gJXMgPG5hbWU+IDx0eXBlPiA8cG9ydD4gWzx0eHQgLi4uPl1cbiIKKyIlcyBbb3B0aW9uc10gJXMgPGhvc3QtbmFtZT4gPGFkZHJlc3M+XG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFNob3cgdmVyc2lvblxuIgorIiAgICAtcyAtLXNlcnZpY2UgICAgICAgICBQdWJsaXNoIHNlcnZpY2VcbiIKKyIgICAgLWEgLS1hZGRyZXNzICAgICAgICAgUHVibGlzaCBhZGRyZXNzXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgRG9tYWluIHRvIHB1Ymxpc2ggc2VydmljZSBpblxuIgorIiAgICAtSCAtLWhvc3Q9RE9NQUlOICAgICBIb3N0IHdoZXJlIHNlcnZpY2UgcmVzaWRlc1xuIgorIiAgICAgICAtLXN1YnR5cGU9U1VCVFlQRSBBbiBhZGRpdGlvbmFsIHN1YnR5cGUgdG8gcmVnaXN0ZXIgdGhpcyBzZXJ2aWNlICIKKyJ3aXRoXG4iCisiICAgIC1SIC0tbm8tcmV2ZXJzZSAgICAgIERvIG5vdCBwdWJsaXNoIHJldmVyc2UgZW50cnkgd2l0aCBhZGRyZXNzXG4iCisiICAgIC1mIC0tbm8tZmFpbCAgICAgICAgIERvbid0IGZhaWwgaWYgdGhlIGRhZW1vbiBpcyBub3QgYXZhaWxhYmxlXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjMwMyAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MzE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBudW1iZXIgb2YgYXJndW1lbnRzXG4iCittc2dzdHIgIkp1bWxhaCBodWphaCB0aWRhayB0ZXBhdFxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBwb3J0IG51bWJlcjogJXNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MzYxIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gY29tbWFuZCBzcGVjaWZpZWQuXG4iCittc2dzdHIgIlRpYWRhIGFyYWhhbiBkaW55YXRha2FuLlxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgaG9zdCBuYW1lICclcyc6ICVzXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjEyNgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSBhZGRyZXNzICclcyc6ICVzXG4iCittc2dzdHIgIkdhZ2FsIHVudHVrIG1lbnllbGVzYWkgYWxhbWF0ICclcyc6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoxNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFtvcHRpb25zXSAlcyA8aG9zdCBuYW1lIC4uLj5cbiIKKyIlcyBbb3B0aW9uc10gJXMgPGFkZHJlc3MgLi4uID5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgU2hvdyB2ZXJzaW9uXG4iCisiICAgIC1uIC0tbmFtZSAgICAgICAgICAgIFJlc29sdmUgaG9zdCBuYW1lXG4iCisiICAgIC1hIC0tYWRkcmVzcyAgICAgICAgIFJlc29sdmUgYWRkcmVzc1xuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBFbmFibGUgdmVyYm9zZSBtb2RlXG4iCisiICAgIC02ICAgICAgICAgICAgICAgICAgIExvb2t1cCBJUHY2IGFkZHJlc3NcbiIKKyIgICAgLTQgICAgICAgICAgICAgICAgICAgTG9va3VwIElQdjQgYWRkcmVzc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyOTkgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE4MQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGhvc3QgbmFtZSByZXNvbHZlcjogJXNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBhZGRyZXNzICclcydcbiIKK21zZ3N0ciAiR2FnYWwgdW50dWsgbWVuZ2h1cmFpIGFsYW1hdCAnJXMnXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzozMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBhZGRyZXNzIHJlc29sdmVyOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgW29wdGlvbnNdIDxuZXcgaG9zdCBuYW1lPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgRW5hYmxlIHZlcmJvc2UgbW9kZVxuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzLCBleHBlY3RpbmcgZXhhY3RseSBvbmUuXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE5MworIywgYy1mb3JtYXQKK21zZ2lkICJIb3N0IG5hbWUgc3VjY2Vzc2Z1bGx5IGNoYW5nZWQgdG8gJXNcbiIKK21zZ3N0ciAiIgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL3BvL25sLnBvIGIvYXZhaGktMC42LjMxL3BvL25sLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlYjdjOTEKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvcG8vbmwucG8KQEAgLTAsMCArMSw4MDIgQEAKKyMgRHV0Y2ggdHJhbnNsYXRpb24gb2YgYXZhaGkKKyMgQ29weXJpZ2h0IChDKSBZRUFSIFRIRSBQQUNLQUdFJ1MgQ09QWVJJR0hUIEhPTERFUgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgUEFDS0FHRSBwYWNrYWdlLgorIyBGSVJTVCBBVVRIT1IgPEVNQUlMQEFERFJFU1M+LCBZRUFSLgorIworIyBHZWVydCBXYXJyaW5rIDxnZWVydC53YXJyaW5rQG9uc25ldC5udT4sIDIwMDkuCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBhdmFoaVxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMS0wNC0wMiAwMzoyMyswMjAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwOS0wOS0wMSAxNzo1OSswMjAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBHZWVydCBXYXJyaW5rIDxnZWVydC53YXJyaW5rQG9uc25ldC5udT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBubCA8bmxAbGkub3JnPlxuIgorIkxhbmd1YWdlOiBcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6ICBcbiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzAKK21zZ2lkICJPSyIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozMQorbXNnaWQgIk9wZXJhdGlvbiBmYWlsZWQiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzIKK21zZ2lkICJCYWQgc3RhdGUiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzMKK21zZ2lkICJJbnZhbGlkIGhvc3QgbmFtZSIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozNAorbXNnaWQgIkludmFsaWQgZG9tYWluIG5hbWUiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzUKK21zZ2lkICJObyBzdWl0YWJsZSBuZXR3b3JrIHByb3RvY29sIGF2YWlsYWJsZSIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozNgorbXNnaWQgIkludmFsaWQgRE5TIFRUTCIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozNworbXNnaWQgIlJlc291cmNlIHJlY29yZCBrZXkgaXMgcGF0dGVybiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozOAorbXNnaWQgIkxvY2FsIG5hbWUgY29sbGlzaW9uIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM5Cittc2dpZCAiSW52YWxpZCByZWNvcmQiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDEKK21zZ2lkICJJbnZhbGlkIHNlcnZpY2UgbmFtZSIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0MgorbXNnaWQgIkludmFsaWQgc2VydmljZSB0eXBlIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQzCittc2dpZCAiSW52YWxpZCBwb3J0IG51bWJlciIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NAorbXNnaWQgIkludmFsaWQgcmVjb3JkIGtleSIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NQorbXNnaWQgIkludmFsaWQgYWRkcmVzcyIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NgorbXNnaWQgIlRpbWVvdXQgcmVhY2hlZCIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NworbXNnaWQgIlRvbyBtYW55IGNsaWVudHMiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDgKK21zZ2lkICJUb28gbWFueSBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQ5Cittc2dpZCAiVG9vIG1hbnkgZW50cmllcyIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1MAorbXNnaWQgIk9TIEVycm9yIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjUyCittc2dpZCAiQWNjZXNzIGRlbmllZCIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1MworbXNnaWQgIkludmFsaWQgb3BlcmF0aW9uIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU0Cittc2dpZCAiQW4gdW5leHBlY3RlZCBELUJ1cyBlcnJvciBvY2N1cmVkIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU1Cittc2dpZCAiRGFlbW9uIGNvbm5lY3Rpb24gZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU2Cittc2dpZCAiTWVtb3J5IGV4aGF1c3RlZCIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1NworbXNnaWQgIlRoZSBvYmplY3QgcGFzc2VkIGluIHdhcyBub3QgdmFsaWQiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTgKK21zZ2lkICJEYWVtb24gbm90IHJ1bm5pbmciCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTkKK21zZ2lkICJJbnZhbGlkIGludGVyZmFjZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2MAorbXNnaWQgIkludmFsaWQgcHJvdG9jb2wgc3BlY2lmaWNhdGlvbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2MQorbXNnaWQgIkludmFsaWQgZmxhZ3MiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjMKK21zZ2lkICJOb3QgZm91bmQiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjQKK21zZ2lkICJJbnZhbGlkIGNvbmZpZ3VyYXRpb24iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjUKK21zZ2lkICJWZXJzaW9uIG1pc21hdGNoIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY2Cittc2dpZCAiSW52YWxpZCBzZXJ2aWNlIHN1YnR5cGUiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjcKK21zZ2lkICJJbnZhbGlkIHBhY2tldCIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2OAorbXNnaWQgIkludmFsaWQgRE5TIHJldHVybiBjb2RlIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY5Cittc2dpZCAiRE5TIGZhaWx1cmU6IEZPUk1FUlIiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzAKK21zZ2lkICJETlMgZmFpbHVyZTogU0VSVkZBSUwiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzEKK21zZ2lkICJETlMgZmFpbHVyZTogTlhET01BSU4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzIKK21zZ2lkICJETlMgZmFpbHVyZTogTk9USU1QIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc0Cittc2dpZCAiRE5TIGZhaWx1cmU6IFJFRlVTRUQiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzUKK21zZ2lkICJETlMgZmFpbHVyZTogWVhET01BSU4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzYKK21zZ2lkICJETlMgZmFpbHVyZTogWVhSUlNFVCIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3NworbXNnaWQgIkROUyBmYWlsdXJlOiBOWFJSU0VUIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc4Cittc2dpZCAiRE5TIGZhaWx1cmU6IE5PVEFVVEgiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzkKK21zZ2lkICJETlMgZmFpbHVyZTogTk9UWk9ORSIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4MAorbXNnaWQgIkludmFsaWQgUkRBVEEiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODEKK21zZ2lkICJJbnZhbGlkIEROUyB0eXBlIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjgyCittc2dpZCAiSW52YWxpZCBETlMgY2xhc3MiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODMKK21zZ2lkICJOb3Qgc3VwcG9ydGVkIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjg1Cittc2dpZCAiTm90IHBlcm1pdHRlZCIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4NgorbXNnaWQgIkludmFsaWQgYXJndW1lbnQiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODcKK21zZ2lkICJJcyBlbXB0eSIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4OAorbXNnaWQgIlRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uIGlzIGludmFsaWQgYmVjYXVzZSByZWR1bmRhbnQiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6OTQKK21zZ2lkICJJbnZhbGlkIEVycm9yIENvZGUiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktZGlzY292ZXItc3RhbmRhbG9uZS9hdmFoaS1kaXNjb3Zlci51aS5oOjEKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weTo3NgorbXNnaWQgIjxpPk5vIHNlcnZpY2UgY3VycmVudGx5IHNlbGVjdGVkLjwvaT4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktZGlzY292ZXItc3RhbmRhbG9uZS9hdmFoaS1kaXNjb3Zlci51aS5oOjIKK21zZ2lkICJBdmFoaSBEaXNjb3ZlcnkiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLmRlc2t0b3AuaW4uaW4uaDoxCittc2dpZCAiQXZhaGkgWmVyb2NvbmYgQnJvd3NlciIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIuZGVza3RvcC5pbi5pbi5oOjIKK21zZ2lkICJCcm93c2UgZm9yIFplcm9jb25mIHNlcnZpY2VzIGF2YWlsYWJsZSBvbiB5b3VyIG5ldHdvcmsiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIyNAorbXNnaWQgIlRYVCIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI2Cittc2dpZCAiVFhUIERhdGE6IgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMjYKK21zZ2lkICJlbXB0eSIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI4Cittc2dpZCAiU2VydmljZSBUeXBlOiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI5Cittc2dpZCAiU2VydmljZSBOYW1lOiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjMwCittc2dpZCAiRG9tYWluIE5hbWU6IgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMzEKK21zZ2lkICJJbnRlcmZhY2U6IgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMzIKK21zZ2lkICJBZGRyZXNzOiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE4NQorbXNnaWQgIkJyb3dzZSBTZXJ2aWNlIFR5cGVzIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTg1Cittc2dpZCAiQSBOVUxMIHRlcm1pbmF0ZWQgbGlzdCBvZiBzZXJ2aWNlIHR5cGVzIHRvIGJyb3dzZSBmb3IiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxOTAKK21zZ2lkICJEb21haW4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxOTAKK21zZ2lkICJUaGUgZG9tYWluIHRvIGJyb3dzZSBpbiwgb3IgTlVMTCBmb3IgdGhlIGRlZmF1bHQgZG9tYWluIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTk2Cittc2dpZCAiU2VydmljZSBUeXBlIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTk2Cittc2dpZCAiVGhlIHNlcnZpY2UgdHlwZSBvZiB0aGUgc2VsZWN0ZWQgc2VydmljZSIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIwMiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjEwMjMKK21zZ2lkICJTZXJ2aWNlIE5hbWUiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMDIKK21zZ2lkICJUaGUgc2VydmljZSBuYW1lIG9mIHRoZSBzZWxlY3RlZCBzZXJ2aWNlIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjA4Cittc2dpZCAiQWRkcmVzcyIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIwOAorbXNnaWQgIlRoZSBhZGRyZXNzIG9mIHRoZSByZXNvbHZlZCBzZXJ2aWNlIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjEzCittc2dpZCAiUG9ydCIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIxMworbXNnaWQgIlRoZSBJUCBwb3J0IG51bWJlciBvZiB0aGUgcmVzb2x2ZWQgc2VydmljZSIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIxOQorbXNnaWQgIkhvc3QgTmFtZSIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIxOQorbXNnaWQgIlRoZSBob3N0IG5hbWUgb2YgdGhlIHJlc29sdmVkIHNlcnZpY2UiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMjUKK21zZ2lkICJUWFQgRGF0YSIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIyNQorbXNnaWQgIlRoZSBUWFQgZGF0YSBvZiB0aGUgcmVzb2x2ZWQgc2VydmljZSIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIzMAorbXNnaWQgIlJlc29sdmUgU2VydmljZSIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIzMAorbXNnaWQgIlJlc29sdmUgdGhlIHNlbGVjdGVkIHNlcnZpY2UgYXV0b21hdGljYWxseSBiZWZvcmUgcmV0dXJuaW5nIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjM2Cittc2dpZCAiUmVzb2x2ZSBTZXJ2aWNlIEhvc3QgTmFtZSIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIzNgorbXNnaWQgIiIKKyJSZXNvbHZlIHRoZSBob3N0IG5hbWUgb2YgdGhlIHNlbGVjdGVkIHNlcnZpY2UgYXV0b21hdGljYWxseSBiZWZvcmUgcmV0dXJuaW5nIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjQyCittc2dpZCAiQWRkcmVzcyBmYW1pbHkiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyNDIKK21zZ2lkICJUaGUgYWRkcmVzcyBmYW1pbHkgZm9yIGhvc3QgbmFtZSByZXNvbHV0aW9uIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MzI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWhpIGNsaWVudCBmYWlsdXJlOiAlcyIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjM4OAorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFoaSByZXNvbHZlciBmYWlsdXJlOiAlcyIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjUxOAorIywgYy1mb3JtYXQKK21zZ2lkICJCcm93c2luZyBmb3Igc2VydmljZSB0eXBlICVzIGluIGRvbWFpbiAlcyBmYWlsZWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NTE5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjE2OAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTY5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjE3OAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTc5Cittc2dpZCAibi9hIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWhpIGRvbWFpbiBicm93c2VyIGZhaWx1cmU6ICVzIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6Njg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWFkIEF2YWhpIGRvbWFpbjogJXMiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo3MDYKK21zZ2lkICJCcm93c2Ugc2VydmljZSB0eXBlIGxpc3QgaXMgZW1wdHkhIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjb25uZWN0IHRvIEF2YWhpIHNlcnZlcjogJXMiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo3MzUKK21zZ2lkICJCcm93c2luZyBmb3Igc2VydmljZXMgb24gPGI+bG9jYWwgbmV0d29yazwvYj46IgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NzM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyb3dzaW5nIGZvciBzZXJ2aWNlcyBpbiBkb21haW4gPGI+JXM8L2I+OiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjc3MworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGJyb3dzZXIgZm9yICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjkwMworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIHJlc29sdmVyIGZvciAlcyBvZiB0eXBlICVzIGluIGRvbWFpbiAlczogJXMiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo5NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBkb21haW4gYnJvd3NlcjogJXMiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo5ODkKK21zZ2lkICJDaGFuZ2UgZG9tYWluIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTAzMSAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNjIKK21zZ2lkICJCcm93c2luZy4uLiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExMjAKK21zZ2lkICJJbml0aWFsaXppbmcuLi4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTQ0Cittc2dpZCAiTG9jYXRpb24iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTQ5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU1MworbXNnaWQgIk5hbWUiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTU0IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU1MworbXNnaWQgIlR5cGUiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTY2Cittc2dpZCAiX0RvbWFpbi4uLiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFtvcHRpb25zXVxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtcyAtLXNzaCAgICAgICAgICAgICBCcm93c2UgU1NIIHNlcnZlcnNcbiIKKyIgICAgLXYgLS12bmMgICAgICAgICAgICAgQnJvd3NlIFZOQyBzZXJ2ZXJzXG4iCisiICAgIC1TIC0tc2hlbGwgICAgICAgICAgIEJyb3dzZSBib3RoIFNTSCBhbmQgVk5DXG4iCisiICAgIC1kIC0tZG9tYWluPURPTUFJTiAgIFRoZSBkb21haW4gdG8gYnJvd3NlIGluXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjEwMSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo3NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG9vIG1hbnkgYXJndW1lbnRzXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE0OQorbXNnaWQgIkNob29zZSBTaGVsbCBTZXJ2ZXIiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE1MQorbXNnaWQgIkRlc2t0b3AiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE1MgorbXNnaWQgIlRlcm1pbmFsIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNTYKK21zZ2lkICJDaG9vc2UgVk5DIHNlcnZlciIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTYxCittc2dpZCAiQ2hvb3NlIFNTSCBzZXJ2ZXIiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE4NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb25uZWN0aW5nIHRvICclcycgLi4uXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjI0MAorIywgYy1mb3JtYXQKK21zZ2lkICJleGVjbHAoKSBmYWlsZWQ6ICVzXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5jZWxlZC5cbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmRlc2t0b3AuaW4uaW4uaDoxCittc2dpZCAiQXZhaGkgU1NIIFNlcnZlciBCcm93c2VyIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guZGVza3RvcC5pbi5pbi5oOjIKK21zZ2lkICJCcm93c2UgZm9yIFplcm9jb25mLWVuYWJsZWQgU1NIIFNlcnZlcnMiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYnZuYy5kZXNrdG9wLmluLmluLmg6MQorbXNnaWQgIkF2YWhpIFZOQyBTZXJ2ZXIgQnJvd3NlciIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9idm5jLmRlc2t0b3AuaW4uaW4uaDoyCittc2dpZCAiQnJvd3NlIGZvciBaZXJvY29uZi1lbmFibGVkIFZOQyBTZXJ2ZXJzIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjEwNworIywgYy1mb3JtYXQKK21zZ2lkICI6IEFsbCBmb3Igbm93XG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIjogQ2FjaGUgZXhoYXVzdGVkXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MjM5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSBzZXJ2aWNlICclcycgb2YgdHlwZSAnJXMnIGluIGRvbWFpbiAnJXMnOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjM0MAorIywgYy1mb3JtYXQKK21zZ2lkICJzZXJ2aWNlX2Jyb3dzZXIgZmFpbGVkOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjM3OAorIywgYy1mb3JtYXQKK21zZ2lkICJhdmFoaV9zZXJ2aWNlX2Jyb3dzZXJfbmV3KCkgZmFpbGVkOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjQxNAorIywgYy1mb3JtYXQKK21zZ2lkICJzZXJ2aWNlX3R5cGVfYnJvd3NlciBmYWlsZWQ6ICVzXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImF2YWhpX3NlcnZpY2VfdHlwZV9icm93c2VyX25ldygpIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXZhaGlfZG9tYWluX2Jyb3dzZXJfbmV3KCkgZmFpbGVkOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjUzNSAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6Mzk0CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjgwIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IHZlcnNpb24gc3RyaW5nOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU0MCAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6Mzk5CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6Mjg1IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxNzMKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IGhvc3QgbmFtZTogJXNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NDQgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjQwMworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI4OSAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlcnZlciB2ZXJzaW9uOiAlczsgSG9zdCBuYW1lOiAlc1xuIgorbXNnc3RyICIiCisKKyMuIFRyYW5zbGF0b3JzOiBUaGlzIGlzIGEgY29sdW1uIGhlYWRpbmcgd2l0aCBhYmJyZXZpYXRpb25zIGZvcgorIy4gKiAgIEV2ZW50ICgrLy0pLCBOZXR3b3JrIEludGVyZmFjZSwgUHJvdG9jb2wgKElQdjQvdjYpLCBEb21haW4KKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU0OQorIywgYy1mb3JtYXQKK21zZ2lkICJFIElmY2UgUHJvdCBEb21haW5cbiIKK21zZ3N0ciAiIgorCisjLiBUcmFuc2xhdG9yczogVGhpcyBpcyBhIGNvbHVtbiBoZWFkaW5nIHdpdGggYWJicmV2aWF0aW9ucyBmb3IKKyMuICogICBFdmVudCAoKy8tKSwgTmV0d29yayBJbnRlcmZhY2UsIFByb3RvY29sIChJUHY0L3Y2KSwgRG9tYWluCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRSBJZmNlIFByb3QgJS0qcyAlLTIwcyBEb21haW5cbiIKK21zZ3N0ciAiIgorCisjLiBXZSBoYXZlIGJlZW4gZGlzY29ubmVjdGVkLCBzbyBsZXQgcmVjb25uZWN0CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1ODUgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE2MworIywgYy1mb3JtYXQKK21zZ2lkICJEaXNjb25uZWN0ZWQsIHJlY29ubmVjdGluZyAuLi5cbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1OTkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6ODI5CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTcwIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozODYKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyNzIgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE2MAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGNsaWVudCBvYmplY3Q6ICVzXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NjA0IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxNzUKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoxNDMgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNsaWVudCBmYWlsdXJlLCBleGl0aW5nOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjYyMyAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIldhaXRpbmcgZm9yIGRhZW1vbiAuLi5cbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo2NDcKK21zZ2lkICIiCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFNob3cgdmVyc2lvblxuIgorIiAgICAtRCAtLWJyb3dzZS1kb21haW5zICBCcm93c2UgZm9yIGJyb3dzaW5nIGRvbWFpbnMgaW5zdGVhZCBvZiBzZXJ2aWNlc1xuIgorIiAgICAtYSAtLWFsbCAgICAgICAgICAgICBTaG93IGFsbCBzZXJ2aWNlcywgcmVnYXJkbGVzcyBvZiB0aGUgdHlwZVxuIgorIiAgICAtZCAtLWRvbWFpbj1ET01BSU4gICBUaGUgZG9tYWluIHRvIGJyb3dzZSBpblxuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBFbmFibGUgdmVyYm9zZSBtb2RlXG4iCisiICAgIC10IC0tdGVybWluYXRlICAgICAgIFRlcm1pbmF0ZSBhZnRlciBkdW1waW5nIGEgbW9yZSBvciBsZXNzIGNvbXBsZXRlICIKKyJsaXN0XG4iCisiICAgIC1jIC0tY2FjaGUgICAgICAgICAgIFRlcm1pbmF0ZSBhZnRlciBkdW1waW5nIGFsbCBlbnRyaWVzIGZyb20gdGhlIGNhY2hlXG4iCisiICAgIC1sIC0taWdub3JlLWxvY2FsICAgIElnbm9yZSBsb2NhbCBzZXJ2aWNlc1xuIgorIiAgICAtciAtLXJlc29sdmUgICAgICAgICBSZXNvbHZlIHNlcnZpY2VzIGZvdW5kXG4iCisiICAgIC1mIC0tbm8tZmFpbCAgICAgICAgIERvbid0IGZhaWwgaWYgdGhlIGRhZW1vbiBpcyBub3QgYXZhaWxhYmxlXG4iCisiICAgIC1wIC0tcGFyc2FibGUgICAgICAgIE91dHB1dCBpbiBwYXJzYWJsZSBmb3JtYXRcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo2NjAKK21zZ2lkICIiCisiICAgIC1rIC0tbm8tZGItbG9va3VwICAgIERvbid0IGxvb2t1cCBzZXJ2aWNlIHR5cGVzXG4iCisiICAgIC1iIC0tZHVtcC1kYiAgICAgICAgIER1bXAgc2VydmljZSB0eXBlIGRhdGFiYXNlXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NzY2IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG9vIGZldyBhcmd1bWVudHNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo4MjEgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjM3OAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI2NCAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgc2ltcGxlIHBvbGwgb2JqZWN0LlxuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo3NgorIywgYy1mb3JtYXQKK21zZ2lkICJFc3RhYmxpc2hlZCB1bmRlciBuYW1lICclcydcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICJOYW1lIGNvbGxpc2lvbiwgcGlja2luZyBuZXcgbmFtZSAnJXMnLlxuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBlbnRyeSBncm91cDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgYWRkcmVzczogJXNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgc2VydmljZTogJXNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgc3VidHlwZSAnJXMnOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiSG9zdCBuYW1lIGNvbmZsaWN0XG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgW29wdGlvbnNdICVzIDxuYW1lPiA8dHlwZT4gPHBvcnQ+IFs8dHh0IC4uLj5dXG4iCisiJXMgW29wdGlvbnNdICVzIDxob3N0LW5hbWU+IDxhZGRyZXNzPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLXMgLS1zZXJ2aWNlICAgICAgICAgUHVibGlzaCBzZXJ2aWNlXG4iCisiICAgIC1hIC0tYWRkcmVzcyAgICAgICAgIFB1Ymxpc2ggYWRkcmVzc1xuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBFbmFibGUgdmVyYm9zZSBtb2RlXG4iCisiICAgIC1kIC0tZG9tYWluPURPTUFJTiAgIERvbWFpbiB0byBwdWJsaXNoIHNlcnZpY2UgaW5cbiIKKyIgICAgLUggLS1ob3N0PURPTUFJTiAgICAgSG9zdCB3aGVyZSBzZXJ2aWNlIHJlc2lkZXNcbiIKKyIgICAgICAgLS1zdWJ0eXBlPVNVQlRZUEUgQW4gYWRkaXRpb25hbCBzdWJ0eXBlIHRvIHJlZ2lzdGVyIHRoaXMgc2VydmljZSAiCisid2l0aFxuIgorIiAgICAtUiAtLW5vLXJldmVyc2UgICAgICBEbyBub3QgcHVibGlzaCByZXZlcnNlIGVudHJ5IHdpdGggYWRkcmVzc1xuIgorIiAgICAtZiAtLW5vLWZhaWwgICAgICAgICBEb24ndCBmYWlsIGlmIHRoZSBkYWVtb24gaXMgbm90IGF2YWlsYWJsZVxuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozMDMgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjMxOAorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgbnVtYmVyIG9mIGFyZ3VtZW50c1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIHBvcnQgbnVtYmVyOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozNjEgLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI0NgorIywgYy1mb3JtYXQKK21zZ2lkICJObyBjb21tYW5kIHNwZWNpZmllZC5cbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgaG9zdCBuYW1lICclcyc6ICVzXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjEyNgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSBhZGRyZXNzICclcyc6ICVzXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjE1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgW29wdGlvbnNdICVzIDxob3N0IG5hbWUgLi4uPlxuIgorIiVzIFtvcHRpb25zXSAlcyA8YWRkcmVzcyAuLi4gPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLW4gLS1uYW1lICAgICAgICAgICAgUmVzb2x2ZSBob3N0IG5hbWVcbiIKKyIgICAgLWEgLS1hZGRyZXNzICAgICAgICAgUmVzb2x2ZSBhZGRyZXNzXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKKyIgICAgLTYgICAgICAgICAgICAgICAgICAgTG9va3VwIElQdjYgYWRkcmVzc1xuIgorIiAgICAtNCAgICAgICAgICAgICAgICAgICBMb29rdXAgSVB2NCBhZGRyZXNzXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI5OSAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgaG9zdCBuYW1lIHJlc29sdmVyOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzozMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIGFkZHJlc3MgJyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzozMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBhZGRyZXNzIHJlc29sdmVyOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgW29wdGlvbnNdIDxuZXcgaG9zdCBuYW1lPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgRW5hYmxlIHZlcmJvc2UgbW9kZVxuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzLCBleHBlY3RpbmcgZXhhY3RseSBvbmUuXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE5MworIywgYy1mb3JtYXQKK21zZ2lkICJIb3N0IG5hbWUgc3VjY2Vzc2Z1bGx5IGNoYW5nZWQgdG8gJXNcbiIKK21zZ3N0ciAiIgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL3BvL3BsLnBvIGIvYXZhaGktMC42LjMxL3BvL3BsLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzMjg5MzkKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvcG8vcGwucG8KQEAgLTAsMCArMSw4NTMgQEAKKyMgdHJhbnNsYXRpb24gb2YgcGwucG8gdG8gUG9saXNoCisjIFBpb3RyIERyxIVnIDxwaW90cmRyYWdAZ21haWwuY29tPiwgMjAwNy4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IHBsXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDExLTA0LTAyIDAzOjIzKzAyMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDEwLTA2LTI5IDEwOjM2KzAyMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IFBpb3RyIERyxIVnIDxwaW90cmRyYWdAZ21haWwuY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IFBvbGlzaCA8dHJhbnMtcGxAbGlzdHMuZmVkb3JhcHJvamVjdC5vcmc+XG4iCisiTGFuZ3VhZ2U6IHBsXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjMwCittc2dpZCAiT0siCittc2dzdHIgIk9LIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozMQorbXNnaWQgIk9wZXJhdGlvbiBmYWlsZWQiCittc2dzdHIgIkR6aWHFgmFuaWUgbmllIHBvd2lvZMWCbyBzacSZIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozMgorbXNnaWQgIkJhZCBzdGF0ZSIKK21zZ3N0ciAiQsWCxJlkbnkgc3RhbiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzMKK21zZ2lkICJJbnZhbGlkIGhvc3QgbmFtZSIKK21zZ3N0ciAiTmllcHJhd2lkxYJvd2EgbmF6d2Ega29tcHV0ZXJhIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozNAorbXNnaWQgIkludmFsaWQgZG9tYWluIG5hbWUiCittc2dzdHIgIk5pZXByYXdpZMWCb3dhIG5hendhIGRvbWVueSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzUKK21zZ2lkICJObyBzdWl0YWJsZSBuZXR3b3JrIHByb3RvY29sIGF2YWlsYWJsZSIKK21zZ3N0ciAiQnJhayBkb3N0xJlwbnljaCBvZHBvd2llZG5pY2ggcHJvdG9rb8WCw7N3IHNpZWNpb3d5Y2giCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM2Cittc2dpZCAiSW52YWxpZCBETlMgVFRMIgorbXNnc3RyICJOaWVwcmF3aWTFgm93ZSBUVEwgc2Vyd2VyYSBETlMiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM3Cittc2dpZCAiUmVzb3VyY2UgcmVjb3JkIGtleSBpcyBwYXR0ZXJuIgorbXNnc3RyICJLbHVjeiB3cGlzdSB6YXNvYnUgamVzdCB3em9yZW0iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM4Cittc2dpZCAiTG9jYWwgbmFtZSBjb2xsaXNpb24iCittc2dzdHIgIktvbGl6amEgbmF6d3kgbG9rYWxuZWoiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM5Cittc2dpZCAiSW52YWxpZCByZWNvcmQiCittc2dzdHIgIk5pZXByYXdpZMWCb3d5IHdwaXMiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQxCittc2dpZCAiSW52YWxpZCBzZXJ2aWNlIG5hbWUiCittc2dzdHIgIk5pZXByYXdpZMWCb3dhIG5hendhIHVzxYJ1Z2kiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQyCittc2dpZCAiSW52YWxpZCBzZXJ2aWNlIHR5cGUiCittc2dzdHIgIk5pZXByYXdpZMWCb3d5IHR5cCB1c8WCdWdpIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0MworbXNnaWQgIkludmFsaWQgcG9ydCBudW1iZXIiCittc2dzdHIgIk5pZXByYXdpZMWCb3d5IG51bWVyIHBvcnR1IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NAorbXNnaWQgIkludmFsaWQgcmVjb3JkIGtleSIKK21zZ3N0ciAiTmllcHJhd2lkxYJvd3kga2x1Y3ogd3Bpc3UiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQ1Cittc2dpZCAiSW52YWxpZCBhZGRyZXNzIgorbXNnc3RyICJOaWVwcmF3aWTFgm93eSBhZHJlcyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDYKK21zZ2lkICJUaW1lb3V0IHJlYWNoZWQiCittc2dzdHIgIlByemVrcm9jem9ubyBjemFzIG9jemVraXdhbmlhIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NworbXNnaWQgIlRvbyBtYW55IGNsaWVudHMiCittc2dzdHIgIlphIGR1xbxvIGtsaWVudMOzdyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDgKK21zZ2lkICJUb28gbWFueSBvYmplY3RzIgorbXNnc3RyICJaYSBkdcW8byBvYmlla3TDs3ciCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQ5Cittc2dpZCAiVG9vIG1hbnkgZW50cmllcyIKK21zZ3N0ciAiWmEgZHXFvG8gd3Bpc8OzdyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTAKK21zZ2lkICJPUyBFcnJvciIKK21zZ3N0ciAiQsWCxIVkIHN5c3RlbXUgb3BlcmFjeWpuZWdvIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1MgorbXNnaWQgIkFjY2VzcyBkZW5pZWQiCittc2dzdHIgIkJyYWsgZG9zdMSZcHUiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjUzCittc2dpZCAiSW52YWxpZCBvcGVyYXRpb24iCittc2dzdHIgIk5pZXByYXdpZMWCb3dlIGR6aWHFgmFuaWUiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU0Cittc2dpZCAiQW4gdW5leHBlY3RlZCBELUJ1cyBlcnJvciBvY2N1cmVkIgorbXNnc3RyICJXeXN0xIVwacWCIG5pZW9jemVraXdhbnkgYsWCxIVkIHVzxYJ1Z2kgRC1CdXMiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU1Cittc2dpZCAiRGFlbW9uIGNvbm5lY3Rpb24gZmFpbGVkIgorbXNnc3RyICJQb8WCxIVjemVuaWUgeiBkZW1vbmVtIG5pZSBwb3dpb2TFgm8gc2nEmSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTYKK21zZ2lkICJNZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICJXeWN6ZXJwYW5vIHBhbWnEmcSHIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1NworbXNnaWQgIlRoZSBvYmplY3QgcGFzc2VkIGluIHdhcyBub3QgdmFsaWQiCittc2dzdHIgIlByemVwdXN6Y3pvbnkgb2JpZWt0IG5pZSBiecWCIHByYXdpZMWCb3d5IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1OAorbXNnaWQgIkRhZW1vbiBub3QgcnVubmluZyIKK21zZ3N0ciAiRGVtb24gbmllIGplc3QgdXJ1Y2hvbWlvbnkiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU5Cittc2dpZCAiSW52YWxpZCBpbnRlcmZhY2UgaW5kZXgiCittc2dzdHIgIk5pZXByYXdpZMWCb3d5IGluZGVrcyBpbnRlcmZlanN1IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2MAorbXNnaWQgIkludmFsaWQgcHJvdG9jb2wgc3BlY2lmaWNhdGlvbiIKK21zZ3N0ciAiTmllcHJhd2lkxYJvd2Egc3BlY3lmaWthY2phIHByb3Rva2/FgnUiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjYxCittc2dpZCAiSW52YWxpZCBmbGFncyIKK21zZ3N0ciAiTmllcHJhd2lkxYJvd2UgZmxhZ2kiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjYzCittc2dpZCAiTm90IGZvdW5kIgorbXNnc3RyICJOaWUgb2RuYWxlemlvbm8iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY0Cittc2dpZCAiSW52YWxpZCBjb25maWd1cmF0aW9uIgorbXNnc3RyICJOaWVwcmF3aWTFgm93YSBrb25maWd1cmFjamEiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY1Cittc2dpZCAiVmVyc2lvbiBtaXNtYXRjaCIKK21zZ3N0ciAiV2Vyc2plIG5pZSB6Z2FkemFqxIUgc2nEmSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjYKK21zZ2lkICJJbnZhbGlkIHNlcnZpY2Ugc3VidHlwZSIKK21zZ3N0ciAiTmllcHJhd2lkxYJvd3kgcG9kdHlwIHVzxYJ1Z2kiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY3Cittc2dpZCAiSW52YWxpZCBwYWNrZXQiCittc2dzdHIgIk5pZXByYXdpZMWCb3d5IHBha2lldCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjgKK21zZ2lkICJJbnZhbGlkIEROUyByZXR1cm4gY29kZSIKK21zZ3N0ciAiTmllcHJhd2lkxYJvd3kga29kIHp3cm90bnkgRE5TIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2OQorbXNnaWQgIkROUyBmYWlsdXJlOiBGT1JNRVJSIgorbXNnc3RyICJETlMgbmllIHBvd2lvZMWCbyBzacSZOiBGT1JNRVJSIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3MAorbXNnaWQgIkROUyBmYWlsdXJlOiBTRVJWRkFJTCIKK21zZ3N0ciAiRE5TIG5pZSBwb3dpb2TFgm8gc2nEmTogU0VSVkZBSUwiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjcxCittc2dpZCAiRE5TIGZhaWx1cmU6IE5YRE9NQUlOIgorbXNnc3RyICJETlMgbmllIHBvd2lvZMWCbyBzacSZOiBOWERPTUFJTiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzIKK21zZ2lkICJETlMgZmFpbHVyZTogTk9USU1QIgorbXNnc3RyICJETlMgbmllIHBvd2lvZMWCbyBzacSZOiBOT1RJTVAiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc0Cittc2dpZCAiRE5TIGZhaWx1cmU6IFJFRlVTRUQiCittc2dzdHIgIkROUyBuaWUgcG93aW9kxYJvIHNpxJk6IFJFRlVTRUQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc1Cittc2dpZCAiRE5TIGZhaWx1cmU6IFlYRE9NQUlOIgorbXNnc3RyICJETlMgbmllIHBvd2lvZMWCbyBzacSZOiBZWERPTUFJTiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzYKK21zZ2lkICJETlMgZmFpbHVyZTogWVhSUlNFVCIKK21zZ3N0ciAiRE5TIG5pZSBwb3dpb2TFgm8gc2nEmTogWVhSUlNFVCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzcKK21zZ2lkICJETlMgZmFpbHVyZTogTlhSUlNFVCIKK21zZ3N0ciAiRE5TIG5pZSBwb3dpb2TFgm8gc2nEmTogTlhSUlNFVCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzgKK21zZ2lkICJETlMgZmFpbHVyZTogTk9UQVVUSCIKK21zZ3N0ciAiRE5TIG5pZSBwb3dpb2TFgm8gc2nEmTogTk9UQVVUSCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzkKK21zZ2lkICJETlMgZmFpbHVyZTogTk9UWk9ORSIKK21zZ3N0ciAiRE5TIG5pZSBwb3dpb2TFgm8gc2nEmTogTk9UWk9ORSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODAKK21zZ2lkICJJbnZhbGlkIFJEQVRBIgorbXNnc3RyICJOaWVwcmF3aWTFgm93ZSBSREFUQSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODEKK21zZ2lkICJJbnZhbGlkIEROUyB0eXBlIgorbXNnc3RyICJOaWVwcmF3aWTFgm93eSB0eXAgRE5TIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4MgorbXNnaWQgIkludmFsaWQgRE5TIGNsYXNzIgorbXNnc3RyICJOaWVwcmF3aWTFgm93YSBrbGFzYSBETlMiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjgzCittc2dpZCAiTm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiTmllb2JzxYJ1Z2l3YW5lIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4NQorbXNnaWQgIk5vdCBwZXJtaXR0ZWQiCittc2dzdHIgIk5pZWRvendvbG9uZSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODYKK21zZ2lkICJJbnZhbGlkIGFyZ3VtZW50IgorbXNnc3RyICJOaWVwcmF3aWTFgm93eSBwYXJhbWV0ciIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODcKK21zZ2lkICJJcyBlbXB0eSIKK21zZ3N0ciAiSmVzdCBwdXN0ZSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODgKK21zZ2lkICJUaGUgcmVxdWVzdGVkIG9wZXJhdGlvbiBpcyBpbnZhbGlkIGJlY2F1c2UgcmVkdW5kYW50IgorbXNnc3RyICJaYcW8xIVkYW5lIGR6aWHFgmFuaWUgamVzdCBuaWVwcmF3aWTFgm93ZSwgcG9uaWV3YcW8IGplc3QgbmFkbWlhcm93ZSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6OTQKK21zZ2lkICJJbnZhbGlkIEVycm9yIENvZGUiCittc2dzdHIgIk5pZXByYXdpZMWCb3d5IGtvZCBixYLEmWR1IgorCisjOiAuLi9hdmFoaS1kaXNjb3Zlci1zdGFuZGFsb25lL2F2YWhpLWRpc2NvdmVyLnVpLmg6MQorIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5Ojc2Cittc2dpZCAiPGk+Tm8gc2VydmljZSBjdXJyZW50bHkgc2VsZWN0ZWQuPC9pPiIKK21zZ3N0ciAiPGk+TmllIHd5YnJhbm8gxbxhZG5laiB1c8WCdWdpLjwvaT4iCisKKyM6IC4uL2F2YWhpLWRpc2NvdmVyLXN0YW5kYWxvbmUvYXZhaGktZGlzY292ZXIudWkuaDoyCittc2dpZCAiQXZhaGkgRGlzY292ZXJ5IgorbXNnc3RyICJXeWtyeXdhbmllIEF2YWhpIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIuZGVza3RvcC5pbi5pbi5oOjEKK21zZ2lkICJBdmFoaSBaZXJvY29uZiBCcm93c2VyIgorbXNnc3RyICJQcnplZ2zEhWRhcmthIFplcm9jb25mIEF2YWhpIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIuZGVza3RvcC5pbi5pbi5oOjIKK21zZ2lkICJCcm93c2UgZm9yIFplcm9jb25mIHNlcnZpY2VzIGF2YWlsYWJsZSBvbiB5b3VyIG5ldHdvcmsiCittc2dzdHIgIlByemVnbMSFZGFuaWUgdXPFgnVnIFplcm9jb25mIGRvc3TEmXBueWNoIHcgc2llY2kiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMjQKK21zZ2lkICJUWFQiCittc2dzdHIgIlRla3N0IgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI2Cittc2dpZCAiVFhUIERhdGE6IgorbXNnc3RyICJEYW5lIHRla3N0b3dlOiIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIyNgorbXNnaWQgImVtcHR5IgorbXNnc3RyICJwdXN0ZSIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIyOAorbXNnaWQgIlNlcnZpY2UgVHlwZToiCittc2dzdHIgIlR5cCB1c8WCdWdpOiIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIyOQorbXNnaWQgIlNlcnZpY2UgTmFtZToiCittc2dzdHIgIk5hendhIHVzxYJ1Z2k6IgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjMwCittc2dpZCAiRG9tYWluIE5hbWU6IgorbXNnc3RyICJOYXp3YSBkb21lbnk6IgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjMxCittc2dpZCAiSW50ZXJmYWNlOiIKK21zZ3N0ciAiSW50ZXJmZWpzOiIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIzMgorbXNnaWQgIkFkZHJlc3M6IgorbXNnc3RyICJBZHJlczoiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTg1Cittc2dpZCAiQnJvd3NlIFNlcnZpY2UgVHlwZXMiCittc2dzdHIgIlByemVnbMSFZGFuaWUgdHlww7N3IHVzxYJ1ZyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxODUKK21zZ2lkICJBIE5VTEwgdGVybWluYXRlZCBsaXN0IG9mIHNlcnZpY2UgdHlwZXMgdG8gYnJvd3NlIGZvciIKK21zZ3N0ciAiTGlzdGEgdHlww7N3IHVzxYJ1ZyBkbyBwcnplZ2zEhWRhbmlhIHpha2/FhGN6b25hIE5VTEwiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTkwCittc2dpZCAiRG9tYWluIgorbXNnc3RyICJEb21lbmEiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTkwCittc2dpZCAiVGhlIGRvbWFpbiB0byBicm93c2UgaW4sIG9yIE5VTEwgZm9yIHRoZSBkZWZhdWx0IGRvbWFpbiIKK21zZ3N0ciAiRG9tZW5hIGRvIHByemVnbMSFZGFuaWEgbHViIE5VTEwgZGxhIGRvbXnFm2xuZWogZG9tZW55IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE5NgorbXNnaWQgIlNlcnZpY2UgVHlwZSIKK21zZ3N0ciAiVHlwIHVzxYJ1Z2kiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTk2Cittc2dpZCAiVGhlIHNlcnZpY2UgdHlwZSBvZiB0aGUgc2VsZWN0ZWQgc2VydmljZSIKK21zZ3N0ciAiVHlwIHd5YnJhbmVqIHVzxYJ1Z2kiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjAyIC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTAyMworbXNnaWQgIlNlcnZpY2UgTmFtZSIKK21zZ3N0ciAiTmF6d2EgdXPFgnVnaSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMDIKK21zZ2lkICJUaGUgc2VydmljZSBuYW1lIG9mIHRoZSBzZWxlY3RlZCBzZXJ2aWNlIgorbXNnc3RyICJOYXp3YSB3eWJyYW5laiB1c8WCdWdpIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIwOAorbXNnaWQgIkFkZHJlc3MiCittc2dzdHIgIkFkcmVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIwOAorbXNnaWQgIlRoZSBhZGRyZXNzIG9mIHRoZSByZXNvbHZlZCBzZXJ2aWNlIgorbXNnc3RyICJBZHJlcyByb3p3acSFemFuZWogdXPFgnVnaSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMTMKK21zZ2lkICJQb3J0IgorbXNnc3RyICJQb3J0IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIxMworbXNnaWQgIlRoZSBJUCBwb3J0IG51bWJlciBvZiB0aGUgcmVzb2x2ZWQgc2VydmljZSIKK21zZ3N0ciAiTnVtZXIgcG9ydHUgSVAgcm96d2nEhXphbmVqIHVzxYJ1Z2kiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjE5Cittc2dpZCAiSG9zdCBOYW1lIgorbXNnc3RyICJOYXp3YSBrb21wdXRlcmEiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjE5Cittc2dpZCAiVGhlIGhvc3QgbmFtZSBvZiB0aGUgcmVzb2x2ZWQgc2VydmljZSIKK21zZ3N0ciAiTmF6d2Ega29tcHV0ZXJhIHJvendpxIV6YW5laiB1c8WCdWdpIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIyNQorbXNnaWQgIlRYVCBEYXRhIgorbXNnc3RyICJEYW5lIHRla3N0b3dlIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIyNQorbXNnaWQgIlRoZSBUWFQgZGF0YSBvZiB0aGUgcmVzb2x2ZWQgc2VydmljZSIKK21zZ3N0ciAiRGFuZSB0ZWtzdG93ZSByb3p3acSFemFuZWogdXPFgnVnaSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMzAKK21zZ2lkICJSZXNvbHZlIFNlcnZpY2UiCittc2dzdHIgIlJvendpxIV6eXdhbmllIHVzxYJ1Z2kiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjMwCittc2dpZCAiUmVzb2x2ZSB0aGUgc2VsZWN0ZWQgc2VydmljZSBhdXRvbWF0aWNhbGx5IGJlZm9yZSByZXR1cm5pbmciCittc2dzdHIgIlJvendpxIV6eXdhbmllIHd5YnJhbmVqIHVzxYJ1Z2kgYXV0b21hdHljem5pZSBwcnplZCB6d3JhY2FuaWVtIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIzNgorbXNnaWQgIlJlc29sdmUgU2VydmljZSBIb3N0IE5hbWUiCittc2dzdHIgIlJvendpxIV6eXdhbmllIG5hend5IGtvbXB1dGVyYSB1c8WCdWdpIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIzNgorbXNnaWQgIiIKKyJSZXNvbHZlIHRoZSBob3N0IG5hbWUgb2YgdGhlIHNlbGVjdGVkIHNlcnZpY2UgYXV0b21hdGljYWxseSBiZWZvcmUgcmV0dXJuaW5nIgorbXNnc3RyICIiCisiUm96d2nEhXp5d2FuaWUgbmF6d3kga29tcHV0ZXJhIHd5YnJhbmVqIHVzxYJ1Z2kgYXV0b21hdHljem5pZSBwcnplZCB6d3JhY2FuaWVtIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjI0MgorbXNnaWQgIkFkZHJlc3MgZmFtaWx5IgorbXNnc3RyICJSb2R6aW5hIGFkcmVzw7N3IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjI0MgorbXNnaWQgIlRoZSBhZGRyZXNzIGZhbWlseSBmb3IgaG9zdCBuYW1lIHJlc29sdXRpb24iCittc2dzdHIgIlJvZHppbmEgYWRyZXPDs3cgZG8gcm96d2nEhXp5d2FuaWEgbmF6d3kga29tcHV0ZXJhIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjMyNgorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFoaSBjbGllbnQgZmFpbHVyZTogJXMiCittc2dzdHIgIktsaWVudCBBdmFoaSBuaWUgcG93acOzZMWCIHNpxJk6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjM4OAorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFoaSByZXNvbHZlciBmYWlsdXJlOiAlcyIKK21zZ3N0ciAiUm96d2nEhXp5d2FuaWUgQXZhaGkgbmllIHBvd2lvZMWCbyBzacSZOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo1MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJvd3NpbmcgZm9yIHNlcnZpY2UgdHlwZSAlcyBpbiBkb21haW4gJXMgZmFpbGVkOiAlcyIKK21zZ3N0ciAiUHJ6ZWdsxIVkYW5pZSB0eXB1IHVzxYJ1ZyAlcyB3IGRvbWVuaWUgJXMgbmllIHBvd2lvZMWCbyBzacSZOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo1MTkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTY4CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoxNjkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTc4CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoxNzkKK21zZ2lkICJuL2EiCittc2dzdHIgIk5pZSBkb3R5Y3p5IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjY0OQorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFoaSBkb21haW4gYnJvd3NlciBmYWlsdXJlOiAlcyIKK21zZ3N0ciAiUHJ6ZWdsxIVkYXJrYSBkb21lbiBBdmFoaSBuaWUgcG93aW9kxYJhIHNpxJk6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjY4NAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVhZCBBdmFoaSBkb21haW46ICVzIgorbXNnc3RyICJPZGN6eXRhbmllIGRvbWVueSBBdmFoaSBuaWUgcG93aW9kxYJvIHNpxJk6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjcwNgorbXNnaWQgIkJyb3dzZSBzZXJ2aWNlIHR5cGUgbGlzdCBpcyBlbXB0eSEiCittc2dzdHIgIlByemVnbMSFZGFuYSBsaXN0YSB0eXDDs3cgdXPFgnVnIGplc3QgcHVzdGEuIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjcxNworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY29ubmVjdCB0byBBdmFoaSBzZXJ2ZXI6ICVzIgorbXNnc3RyICJQb8WCxIVjemVuaWUgc2nEmSB6IHNlcndlcmVtIEF2YWhpIG5pZSBwb3dpb2TFgm8gc2nEmTogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NzM1Cittc2dpZCAiQnJvd3NpbmcgZm9yIHNlcnZpY2VzIG9uIDxiPmxvY2FsIG5ldHdvcms8L2I+OiIKK21zZ3N0ciAiUHJ6ZWdsxIVkYW5pZSB1c8WCdWcgdyA8Yj5sb2thbG5laiBzaWVjaTwvYj46IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjczNworIywgYy1mb3JtYXQKK21zZ2lkICJCcm93c2luZyBmb3Igc2VydmljZXMgaW4gZG9tYWluIDxiPiVzPC9iPjoiCittc2dzdHIgIlByemVnbMSFZGFuaWUgdXPFgnVnIHcgZG9tZW5pZSA8Yj4lczwvYj46IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjc3MworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGJyb3dzZXIgZm9yICVzOiAlcyIKK21zZ3N0ciAiVXR3b3J6ZW5pZSBwcnplZ2zEhWRhcmtpIGRsYSAlcyBuaWUgcG93aW9kxYJvIHNpxJk6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjkwMworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIHJlc29sdmVyIGZvciAlcyBvZiB0eXBlICVzIGluIGRvbWFpbiAlczogJXMiCittc2dzdHIgIiIKKyJVdHdvcnplbmllIHJvendpxIV6YW5pYSBkbGEgJXMgdHlwdSAlcyB3IGRvbWVuaWUgJXMgbmllIHBvd2lvZMWCbyBzacSZOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo5NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBkb21haW4gYnJvd3NlcjogJXMiCittc2dzdHIgIlV0d29yemVuaWUgcHJ6ZWdsxIVkYXJraSBkb21lbiBuaWUgcG93aW9kxYJvIHNpxJk6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjk4OQorbXNnaWQgIkNoYW5nZSBkb21haW4iCittc2dzdHIgIlptaWFuYSBkb21lbnkiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTAzMSAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNjIKK21zZ2lkICJCcm93c2luZy4uLiIKK21zZ3N0ciAiUHJ6ZWdsxIVkYW5pZS4uLiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTIwCittc2dpZCAiSW5pdGlhbGl6aW5nLi4uIgorbXNnc3RyICJJbmljam93YW5pZS4uLiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTQ0Cittc2dpZCAiTG9jYXRpb24iCittc2dzdHIgIlBvxYJvxbxlbmllIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNDkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTUzCittc2dpZCAiTmFtZSIKK21zZ3N0ciAiTmF6d2EiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTE1NCAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NTMKK21zZ2lkICJUeXBlIgorbXNnc3RyICJUeXAiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTE2NgorbXNnaWQgIl9Eb21haW4uLi4iCittc2dzdHIgIl9Eb21lbmEuLi4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzo1NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgW29wdGlvbnNdXG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1zIC0tc3NoICAgICAgICAgICAgIEJyb3dzZSBTU0ggc2VydmVyc1xuIgorIiAgICAtdiAtLXZuYyAgICAgICAgICAgICBCcm93c2UgVk5DIHNlcnZlcnNcbiIKKyIgICAgLVMgLS1zaGVsbCAgICAgICAgICAgQnJvd3NlIGJvdGggU1NIIGFuZCBWTkNcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgVGhlIGRvbWFpbiB0byBicm93c2UgaW5cbiIKK21zZ3N0ciAiIgorIiVzIFtvcGNqZV1cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgV3nFm3dpZXRsYSB0xJkgcG9tb2NcbiIKKyIgICAgLXMgLS1zc2ggICAgICAgICAgICAgUHJ6ZWdsxIVkYSBzZXJ3ZXJ5IFNTSFxuIgorIiAgICAtdiAtLXZuYyAgICAgICAgICAgICBQcnplZ2zEhWRhIHNlcndlcnkgVk5DXG4iCisiICAgIC1TIC0tc2hlbGwgICAgICAgICAgIFByemVnbMSFZGEgU1NIIGkgVk5DXG4iCisiICAgIC1kIC0tZG9tYWluPURPTUVOQSAgIERvbWVuYSBkbyBwcnplZ2zEhWRhbmlhXG4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxMDEgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6Nzc1CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvbyBtYW55IGFyZ3VtZW50c1xuIgorbXNnc3RyICJaYSBkdcW8byBwYXJhbWV0csOzd1xuIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTQ5Cittc2dpZCAiQ2hvb3NlIFNoZWxsIFNlcnZlciIKK21zZ3N0ciAiV3liw7NyIHBvd8WCb2tpIHNlcndlcmEiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNTEKK21zZ2lkICJEZXNrdG9wIgorbXNnc3RyICJQdWxwaXQiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNTIKK21zZ2lkICJUZXJtaW5hbCIKK21zZ3N0ciAiVGVybWluYWwiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNTYKK21zZ2lkICJDaG9vc2UgVk5DIHNlcnZlciIKK21zZ3N0ciAiV3liw7NyIHNlcndlcmEgVk5DIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTYxCittc2dpZCAiQ2hvb3NlIFNTSCBzZXJ2ZXIiCittc2dzdHIgIld5YsOzciBzZXJ3ZXJhIFNTSCIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE4NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb25uZWN0aW5nIHRvICclcycgLi4uXG4iCittc2dzdHIgIsWBxIVjemVuaWUgeiBcIiVzXCIuLi5cbiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjI0MAorIywgYy1mb3JtYXQKK21zZ2lkICJleGVjbHAoKSBmYWlsZWQ6ICVzXG4iCittc2dzdHIgImV4ZWNscCgpIG5pZSBwb3dpb2TFgm8gc2nEmTogJXNcbiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5jZWxlZC5cbiIKK21zZ3N0ciAiQW51bG93YW5vLlxuIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmRlc2t0b3AuaW4uaW4uaDoxCittc2dpZCAiQXZhaGkgU1NIIFNlcnZlciBCcm93c2VyIgorbXNnc3RyICJQcnplZ2zEhWRhcmthIHNlcndlcsOzdyBTU0ggQXZhaGkiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guZGVza3RvcC5pbi5pbi5oOjIKK21zZ2lkICJCcm93c2UgZm9yIFplcm9jb25mLWVuYWJsZWQgU1NIIFNlcnZlcnMiCittc2dzdHIgIlByemVnbMSFZGFuaWUgc2Vyd2Vyw7N3IFNTSCB6IHfFgsSFY3pvbnltIFplcm9jb25mIgorCisjOiAuLi9hdmFoaS11aS9idm5jLmRlc2t0b3AuaW4uaW4uaDoxCittc2dpZCAiQXZhaGkgVk5DIFNlcnZlciBCcm93c2VyIgorbXNnc3RyICJQcnplZ2zEhWRhcmthIHNlcndlcsOzdyBWTkMgQXZhaGkiCisKKyM6IC4uL2F2YWhpLXVpL2J2bmMuZGVza3RvcC5pbi5pbi5oOjIKK21zZ2lkICJCcm93c2UgZm9yIFplcm9jb25mLWVuYWJsZWQgVk5DIFNlcnZlcnMiCittc2dzdHIgIlByemVnbMSFZGFuaWUgc2Vyd2Vyw7N3IFZOQyB6IHfFgsSFY3pvbnltIFplcm9jb25mIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoxMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiOiBBbGwgZm9yIG5vd1xuIgorbXNnc3RyICI6IFdzenlzdGtvXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjExOAorIywgYy1mb3JtYXQKK21zZ2lkICI6IENhY2hlIGV4aGF1c3RlZFxuIgorbXNnc3RyICI6IFd5Y3plcnBhbm8gcGFtacSZxIcgcG9kcsSZY3puxIVcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MjM5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSBzZXJ2aWNlICclcycgb2YgdHlwZSAnJXMnIGluIGRvbWFpbiAnJXMnOiAlc1xuIgorbXNnc3RyICIiCisiUm96d2nEhXphbmllIHVzxYJ1Z2kgXCIlc1wiIHR5cHUgXCIlc1wiIHcgZG9tZW5pZSBcIiVzXCIgbmllIHBvd2lvZMWCbyBzacSZOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzozNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VydmljZV9icm93c2VyIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAic2VydmljZV9icm93c2VyIG5pZSBwb3dpb2TFgm8gc2nEmTogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6Mzc4CisjLCBjLWZvcm1hdAorbXNnaWQgImF2YWhpX3NlcnZpY2VfYnJvd3Nlcl9uZXcoKSBmYWlsZWQ6ICVzXG4iCittc2dzdHIgImF2YWhpX3NlcnZpY2VfYnJvd3Nlcl9uZXcoKSBuaWUgcG93aW9kxYJvIHNpxJk6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjQxNAorIywgYy1mb3JtYXQKK21zZ2lkICJzZXJ2aWNlX3R5cGVfYnJvd3NlciBmYWlsZWQ6ICVzXG4iCittc2dzdHIgInNlcnZpY2VfdHlwZV9icm93c2VyIG5pZSBwb3dpb2TFgm8gc2nEmTogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImF2YWhpX3NlcnZpY2VfdHlwZV9icm93c2VyX25ldygpIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAiYXZhaGlfc2VydmljZV90eXBlX2Jyb3dzZXJfbmV3KCkgbmllIHBvd2lvZMWCbyBzacSZOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXZhaGlfZG9tYWluX2Jyb3dzZXJfbmV3KCkgZmFpbGVkOiAlc1xuIgorbXNnc3RyICJhdmFoaV9kb21haW5fYnJvd3Nlcl9uZXcoKSBuaWUgcG93aW9kxYJvIHNpxJk6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjUzNSAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6Mzk0CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjgwIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IHZlcnNpb24gc3RyaW5nOiAlc1xuIgorbXNnc3RyICJPZHB5dGFuaWUgxYJhxYRjdWNoYSB3ZXJzamkgbmllIHBvd2lvZMWCbyBzacSZOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NDAgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjM5OQorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI4NSAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTczCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBxdWVyeSBob3N0IG5hbWU6ICVzXG4iCittc2dzdHIgIk9kcHl0YW5pZSBuYXp3eSBrb21wdXRlcmEgbmllIHBvd2lvZMWCbyBzacSZOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NDQgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjQwMworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI4OSAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlcnZlciB2ZXJzaW9uOiAlczsgSG9zdCBuYW1lOiAlc1xuIgorbXNnc3RyICJXZXJzamEgc2Vyd2VyYTogJXM7IG5hendhIGtvbXB1dGVyYTogJXNcbiIKKworIy4gVHJhbnNsYXRvcnM6IFRoaXMgaXMgYSBjb2x1bW4gaGVhZGluZyB3aXRoIGFiYnJldmlhdGlvbnMgZm9yCisjLiAqICAgRXZlbnQgKCsvLSksIE5ldHdvcmsgSW50ZXJmYWNlLCBQcm90b2NvbCAoSVB2NC92NiksIERvbWFpbgorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUgSWZjZSBQcm90IERvbWFpblxuIgorbXNnc3RyICJFIEludGVyZmVqcyBQcm90b2vDs8WCIERvbWVuYVxuIgorCisjLiBUcmFuc2xhdG9yczogVGhpcyBpcyBhIGNvbHVtbiBoZWFkaW5nIHdpdGggYWJicmV2aWF0aW9ucyBmb3IKKyMuICogICBFdmVudCAoKy8tKSwgTmV0d29yayBJbnRlcmZhY2UsIFByb3RvY29sIChJUHY0L3Y2KSwgRG9tYWluCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRSBJZmNlIFByb3QgJS0qcyAlLTIwcyBEb21haW5cbiIKK21zZ3N0ciAiRSBJbnRlcmZlanMgUHJvdG9rw7PFgiAlLSpzICUtMjBzIERvbWVuYVxuIgorCisjLiBXZSBoYXZlIGJlZW4gZGlzY29ubmVjdGVkLCBzbyBsZXQgcmVjb25uZWN0CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1ODUgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE2MworIywgYy1mb3JtYXQKK21zZ2lkICJEaXNjb25uZWN0ZWQsIHJlY29ubmVjdGluZyAuLi5cbiIKK21zZ3N0ciAiUm96xYLEhWN6b25vLCBwb25vd25lIMWCxIVjemVuaWUuLi5cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTk5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjgyOQorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE3MCAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6Mzg2CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjcyIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBjbGllbnQgb2JqZWN0OiAlc1xuIgorbXNnc3RyICJVdHdvcnplbmllIG9iaWVrdHUga2xpZW50YSBuaWUgcG93aW9kxYJvIHNpxJk6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjYwNCAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTc1CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MTQzIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzo1OQorIywgYy1mb3JtYXQKK21zZ2lkICJDbGllbnQgZmFpbHVyZSwgZXhpdGluZzogJXNcbiIKK21zZ3N0ciAiS2xpZW50IG5pZSBwb3dpw7NkxYIgc2nEmSwga2/FhGN6ZW5pZSBkemlhxYJhbmlhOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo2MjMgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjIwNgorIywgYy1mb3JtYXQKK21zZ2lkICJXYWl0aW5nIGZvciBkYWVtb24gLi4uXG4iCittc2dzdHIgIk9jemVraXdhbmllIG5hIGRlbW9uYS4uLlxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo2NDcKK21zZ2lkICIiCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFNob3cgdmVyc2lvblxuIgorIiAgICAtRCAtLWJyb3dzZS1kb21haW5zICBCcm93c2UgZm9yIGJyb3dzaW5nIGRvbWFpbnMgaW5zdGVhZCBvZiBzZXJ2aWNlc1xuIgorIiAgICAtYSAtLWFsbCAgICAgICAgICAgICBTaG93IGFsbCBzZXJ2aWNlcywgcmVnYXJkbGVzcyBvZiB0aGUgdHlwZVxuIgorIiAgICAtZCAtLWRvbWFpbj1ET01BSU4gICBUaGUgZG9tYWluIHRvIGJyb3dzZSBpblxuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBFbmFibGUgdmVyYm9zZSBtb2RlXG4iCisiICAgIC10IC0tdGVybWluYXRlICAgICAgIFRlcm1pbmF0ZSBhZnRlciBkdW1waW5nIGEgbW9yZSBvciBsZXNzIGNvbXBsZXRlICIKKyJsaXN0XG4iCisiICAgIC1jIC0tY2FjaGUgICAgICAgICAgIFRlcm1pbmF0ZSBhZnRlciBkdW1waW5nIGFsbCBlbnRyaWVzIGZyb20gdGhlIGNhY2hlXG4iCisiICAgIC1sIC0taWdub3JlLWxvY2FsICAgIElnbm9yZSBsb2NhbCBzZXJ2aWNlc1xuIgorIiAgICAtciAtLXJlc29sdmUgICAgICAgICBSZXNvbHZlIHNlcnZpY2VzIGZvdW5kXG4iCisiICAgIC1mIC0tbm8tZmFpbCAgICAgICAgIERvbid0IGZhaWwgaWYgdGhlIGRhZW1vbiBpcyBub3QgYXZhaWxhYmxlXG4iCisiICAgIC1wIC0tcGFyc2FibGUgICAgICAgIE91dHB1dCBpbiBwYXJzYWJsZSBmb3JtYXRcbiIKK21zZ3N0ciAiIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBXecWbd2lldGxhIHTEmSBwb21vY1xuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBXecWbd2lldGxhIHdlcnNqxJlcbiIKKyIgICAgLUQgLS1icm93c2UtZG9tYWlucyAgUHJ6ZWdsxIVkYSBkb21lbnkgemFtaWFzdCB1c8WCdWdcbiIKKyIgICAgLWEgLS1hbGwgICAgICAgICAgICAgV3nFm3dpZXRsYSB3c3p5c3RraWUgdXPFgnVnaSwgbmllemFsZcW8bmllIG9kIGljaFxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICB0eXB1XG4iCisiICAgIC1kIC0tZG9tYWluPURPTUVOQSAgIERvbWVuYSBkbyBwcnplZ2zEhWRhbmlhXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIFd5xZt3aWV0bGEgd2nEmWNlaiBpbmZvcm1hY2ppXG4iCisiICAgIC10IC0tdGVybWluYXRlICAgICAgIFd5xYLEhWN6YSBwbyB6cnp1Y2VuaXUgYmFyZHppZWogbHViIG1uaWVqXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgIGtvbXBsZXRuZWogbGlzdHlcbiIKKyIgICAgLWMgLS1jYWNoZSAgICAgICAgICAgV3nFgsSFY3phIHBvIHpyenVjZW5pdSB3c3p5c3RraWNoIHdwaXPDs3cgeiBwYW1pxJljaVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICBwb2RyxJljem5lalxuIgorIiAgICAtbCAtLWlnbm9yZS1sb2NhbCAgICBJZ25vcnVqZSBsb2thbG5lIHVzxYJ1Z2lcbiIKKyIgICAgLXIgLS1yZXNvbHZlICAgICAgICAgUm96d2nEhXp1amUgem5hbGV6aW9uZSB1c8WCdWdpXG4iCisiICAgIC1mIC0tbm8tZmFpbCAgICAgICAgIE5pZSB3ecWCxIVjemEsIGplxZtsaSBkZW1vbiBuaWUgamVzdCBkb3N0xJlwbnlcbiIKKyIgICAgLXAgLS1wYXJzYWJsZSAgICAgICAgV3lqxZtjaWUgdyBmb3JtYWNpZSBkbyBwcnpldHdhcnphbmlhXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjY2MAorbXNnaWQgIiIKKyIgICAgLWsgLS1uby1kYi1sb29rdXAgICAgRG9uJ3QgbG9va3VwIHNlcnZpY2UgdHlwZXNcbiIKKyIgICAgLWIgLS1kdW1wLWRiICAgICAgICAgRHVtcCBzZXJ2aWNlIHR5cGUgZGF0YWJhc2VcbiIKK21zZ3N0ciAiIgorIiAgICAtayAtLW5vLWRiLWxvb2t1cCAgICBOaWUgcHJ6ZXN6dWt1amUgdHlww7N3IHVzxYJ1Z1xuIgorIiAgICAtYiAtLWR1bXAtZGIgICAgICAgICBacnp1Y2EgYmF6xJkgZGFueWNoIHR5cMOzdyB1c8WCdWdcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NzY2IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG9vIGZldyBhcmd1bWVudHNcbiIKK21zZ3N0ciAiWmEgbWHFgm8gcGFyYW1ldHLDs3dcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6ODIxIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozNzgKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyNjQgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIHNpbXBsZSBwb2xsIG9iamVjdC5cbiIKK21zZ3N0ciAiVXR3b3J6ZW5pZSBwcm9zdGVnbyBvYmlla3R1IHR5cHUgXCJwb2xsXCIgbmllIHBvd2lvZMWCbyBzacSZLlxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXN0YWJsaXNoZWQgdW5kZXIgbmFtZSAnJXMnXG4iCittc2dzdHIgIlVzdGFub3dpb25vIHBvZCBuYXp3xIUgXCIlc1wiXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo4MQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXI6ICVzXG4iCittc2dzdHIgIlphcmVqZXN0cm93YW5pZSBuaWUgcG93aW9kxYJvIHNpxJk6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICJOYW1lIGNvbGxpc2lvbiwgcGlja2luZyBuZXcgbmFtZSAnJXMnLlxuIgorbXNnc3RyICJLb2xpemphIG5hencsIHd5YmllcmFuaWUgbm93ZWogbmF6d3kgXCIlc1wiLlxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgZW50cnkgZ3JvdXA6ICVzXG4iCittc2dzdHIgIlV0d29yemVuaWUgZ3J1cHkgd3Bpc8OzdyBuaWUgcG93aW9kxYJvIHNpxJk6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBhZGRyZXNzOiAlc1xuIgorbXNnc3RyICJEb2RhbmllIGFkcmVzdSBuaWUgcG93aW9kxYJvIHNpxJk6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBzZXJ2aWNlOiAlc1xuIgorbXNnc3RyICJEb2RhbmllIHVzxYJ1Z2kgbmllIHBvd2lvZMWCbyBzacSZOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgc3VidHlwZSAnJXMnOiAlc1xuIgorbXNnc3RyICJEb2RhbmllIHBvZHR5cHUgXCIlc1wiIG5pZSBwb3dpb2TFgm8gc2nEmTogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE5MQorIywgYy1mb3JtYXQKK21zZ2lkICJIb3N0IG5hbWUgY29uZmxpY3RcbiIKK21zZ3N0ciAiS29uZmxpa3QgbmF6dyBrb21wdXRlcsOzd1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBbb3B0aW9uc10gJXMgPG5hbWU+IDx0eXBlPiA8cG9ydD4gWzx0eHQgLi4uPl1cbiIKKyIlcyBbb3B0aW9uc10gJXMgPGhvc3QtbmFtZT4gPGFkZHJlc3M+XG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFNob3cgdmVyc2lvblxuIgorIiAgICAtcyAtLXNlcnZpY2UgICAgICAgICBQdWJsaXNoIHNlcnZpY2VcbiIKKyIgICAgLWEgLS1hZGRyZXNzICAgICAgICAgUHVibGlzaCBhZGRyZXNzXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgRG9tYWluIHRvIHB1Ymxpc2ggc2VydmljZSBpblxuIgorIiAgICAtSCAtLWhvc3Q9RE9NQUlOICAgICBIb3N0IHdoZXJlIHNlcnZpY2UgcmVzaWRlc1xuIgorIiAgICAgICAtLXN1YnR5cGU9U1VCVFlQRSBBbiBhZGRpdGlvbmFsIHN1YnR5cGUgdG8gcmVnaXN0ZXIgdGhpcyBzZXJ2aWNlICIKKyJ3aXRoXG4iCisiICAgIC1SIC0tbm8tcmV2ZXJzZSAgICAgIERvIG5vdCBwdWJsaXNoIHJldmVyc2UgZW50cnkgd2l0aCBhZGRyZXNzXG4iCisiICAgIC1mIC0tbm8tZmFpbCAgICAgICAgIERvbid0IGZhaWwgaWYgdGhlIGRhZW1vbiBpcyBub3QgYXZhaWxhYmxlXG4iCittc2dzdHIgIiIKKyIlcyBbb3BjamVdICVzIDxuYXp3YT4gPHR5cD4gPHBvcnQ+IFs8dGVrc3QuLi4+XVxuIgorIiVzIFtvcGNqZV0gJXMgPG5hendhLWtvbXB1dGVyYT4gPGFkcmVzPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBXecWbd2lldGxhIHTEmSBwb21vY1xuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBXecWbd2lldGxhIHdlcnNqxJlcbiIKKyIgICAgLXMgLS1zZXJ2aWNlICAgICAgICAgUHVibGlrdWrEmSB1c8WCdWfEmVxuIgorIiAgICAtYSAtLWFkZHJlc3MgICAgICAgICBQdWJsaWt1amUgYWRyZXNcbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgV3nFm3dpZXRsYSB3acSZY2VqIGluZm9ybWFjamlcbiIKKyIgICAgLWQgLS1kb21haW49RE9NRU5BICAgRG9tZW5hLCB3IGt0w7NyZWogb3B1Ymxpa293YcSHIHVzxYJ1Z8SZXG4iCisiICAgIC1IIC0taG9zdD1ET01FTkEgICAgIEtvbXB1dGVyLCBuYSBqYWtpbSB6bmFqZHVqZSBzacSZIHVzxYJ1Z2FcbiIKKyIgICAgICAgLS1zdWJ0eXBlPVBPRFRZUCAgRG9kYXRrb3d5IHBvZHR5cCBkbyB6YXJlamVzdHJvd2FuaWEgdGVqIHVzxYJ1Z2lcbiIKKyIgICAgLVIgLS1uby1yZXZlcnNlICAgICAgTmllIHB1Ymxpa3VqZSBvZHdyw7Njb25lZ28gd3Bpc3UgeiBhZHJlc2VtXG4iCisiICAgIC1mIC0tbm8tZmFpbCAgICAgICAgIE5pZSB3ecWCxIVjemEsIGplxZtsaSBkZW1vbiBuaWUgamVzdCBkb3N0xJlwbnlcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjMwMyAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MzE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBudW1iZXIgb2YgYXJndW1lbnRzXG4iCittc2dzdHIgIkLFgsSZZG5hIGxpY3piYSBwYXJhbWV0csOzd1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBwb3J0IG51bWJlcjogJXNcbiIKK21zZ3N0ciAiUHJ6ZXR3b3J6ZW5pZSBudW1lcnUgcG9ydHUgbmllIHBvd2lvZMWCbyBzacSZOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MzYxIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gY29tbWFuZCBzcGVjaWZpZWQuXG4iCittc2dzdHIgIk5pZSBwb2Rhbm8gcG9sZWNlbmlhLlxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgaG9zdCBuYW1lICclcyc6ICVzXG4iCittc2dzdHIgIlJvendpxIV6YW5pZSBuYXp3eSBrb21wdXRlcmEgXCIlc1wiIG5pZSBwb3dpb2TFgm8gc2nEmTogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjEyNgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSBhZGRyZXNzICclcyc6ICVzXG4iCittc2dzdHIgIlJvendpxIV6YW5pZSBhZHJlc3UgXCIlc1wiIG5pZSBwb3dpb2TFgm8gc2nEmTogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjE1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgW29wdGlvbnNdICVzIDxob3N0IG5hbWUgLi4uPlxuIgorIiVzIFtvcHRpb25zXSAlcyA8YWRkcmVzcyAuLi4gPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLW4gLS1uYW1lICAgICAgICAgICAgUmVzb2x2ZSBob3N0IG5hbWVcbiIKKyIgICAgLWEgLS1hZGRyZXNzICAgICAgICAgUmVzb2x2ZSBhZGRyZXNzXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKKyIgICAgLTYgICAgICAgICAgICAgICAgICAgTG9va3VwIElQdjYgYWRkcmVzc1xuIgorIiAgICAtNCAgICAgICAgICAgICAgICAgICBMb29rdXAgSVB2NCBhZGRyZXNzXG4iCittc2dzdHIgIiIKKyIlcyBbb3BjamVdICVzIDxuYXp3YSBrb21wdXRlcmEuLi4+XG4iCisiJXMgW29wY2plXSAlcyA8YWRyZXMuLi4+XG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFd5xZt3aWV0bGEgdMSZIHBvbW9jXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFd5xZt3aWV0bGEgd2Vyc2rEmVxuIgorIiAgICAtbiAtLW5hbWUgICAgICAgICAgICBSb3p3acSFenVqZSBuYXp3xJkga29tcHV0ZXJhXG4iCisiICAgIC1hIC0tYWRkcmVzcyAgICAgICAgIFJvendpxIV6dWplIGFkcmVzXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIFd5xZt3aWV0bGEgd2nEmWNlaiBpbmZvcm1hY2ppXG4iCisiICAgIC02ICAgICAgICAgICAgICAgICAgIFByemVzenVrdWplIGFkcmVzeSBJUHY2XG4iCisiICAgIC00ICAgICAgICAgICAgICAgICAgIFByemVzenVrdWplIGFkcmVzeSBJUHY0XG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyOTkgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE4MQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGhvc3QgbmFtZSByZXNvbHZlcjogJXNcbiIKK21zZ3N0ciAiVXR3b3J6ZW5pZSByb3p3acSFemFuaWEgbmF6d3kga29tcHV0ZXJhIG5pZSBwb3dpb2TFgm8gc2nEmTogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjMwOQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcGFyc2UgYWRkcmVzcyAnJXMnXG4iCittc2dzdHIgIlByemV0d29yemVuaWUgYWRyZXN1IFwiJXNcIiBuaWUgcG93aW9kxYJvIHNpxJlcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjMxNAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGFkZHJlc3MgcmVzb2x2ZXI6ICVzXG4iCittc2dzdHIgIlV0d29yemVuaWUgcm96d2nEhXphbmlhIGFkcmVzdSBuaWUgcG93aW9kxYJvIHNpxJk6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgW29wdGlvbnNdIDxuZXcgaG9zdCBuYW1lPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgRW5hYmxlIHZlcmJvc2UgbW9kZVxuIgorbXNnc3RyICIiCisiJXMgW29wY2plXSA8bm93YSBuYXp3YSBrb21wdXRlcmE+XG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFd5xZt3aWV0bGEgdMSZIHBvbW9jXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFd5xZt3aWV0bGEgd2Vyc2rEmVxuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBXecWbd2lldGxhIHdpxJljZWogaW5mb3JtYWNqaVxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cywgZXhwZWN0aW5nIGV4YWN0bHkgb25lLlxuIgorbXNnc3RyICJOaWVwcmF3aWTFgm93YSBsaWN6YmEgcGFyYW1ldHLDs3csIG9jemVraXdhbm8gZG9rxYJhZG5pZSBqZWRuZWdvLlxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkhvc3QgbmFtZSBzdWNjZXNzZnVsbHkgY2hhbmdlZCB0byAlc1xuIgorbXNnc3RyICJabWlhbmEgbmF6d3kga29tcHV0ZXJhIG5hICVzIHBvd2lvZMWCYSBzacSZXG4iCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvcG8vcHRfQlIucG8gYi9hdmFoaS0wLjYuMzEvcG8vcHRfQlIucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmEzOGQxOQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9wby9wdF9CUi5wbwpAQCAtMCwwICsxLDg2MyBAQAorIyBCcmF6aWxpYW4gUG9ydHVndWVzZSB0cmFuc2xhdGlvbiBvZiBBdmFoaS4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGF2YWhpIHBhY2thZ2UuCisjCisjIEx1Y2FzIFNhYm95YSA8bHVjYXNAY2VmZXRjZS5icj4sIDIwMDguCisjIElnb3IgUGlyZXMgU29hcmVzIDxpZ29yQHByb2pldG9mZWRvcmEub3JnPiwgMjAwOC4KKyMgVGF5bG9uIFNpbG1lciA8dGF5bG9uc2lsdmFAZ21haWwuY29tPiwgMjAwOS4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGF2YWhpXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDExLTA0LTAyIDAzOjIzKzAyMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDA5LTAzLTE2IDExOjE1LTAzMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IFRheWxvbiA8dGF5bG9uc2lsdmFAZ21haWwuY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IEJyYXppbGlhbiBQb3J0dWd1ZXNlIDxmZWRvcmEtdHJhbnMtcHRfYnJAcmVkaGF0LmNvbT5cbiIKKyJMYW5ndWFnZTogcHRfQlJcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiA+IDEpO1xuIgorIlgtUG9lZGl0LUxhbmd1YWdlOiBQb3J0dWd1ZXNlXG4iCisiWC1Qb2VkaXQtQ291bnRyeTogQlJBWklMXG4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjMwCittc2dpZCAiT0siCittc2dzdHIgIk9LIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozMQorbXNnaWQgIk9wZXJhdGlvbiBmYWlsZWQiCittc2dzdHIgIkEgb3BlcmHDp8OjbyBmYWxob3UiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjMyCittc2dpZCAiQmFkIHN0YXRlIgorbXNnc3RyICJFc3RhZG8gaW52w6FsaWRvIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozMworbXNnaWQgIkludmFsaWQgaG9zdCBuYW1lIgorbXNnc3RyICJOb21lIGRlIG3DoXF1aW5hIGludsOhbGlkbyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzQKK21zZ2lkICJJbnZhbGlkIGRvbWFpbiBuYW1lIgorbXNnc3RyICJOb21lIGRlIGRvbcOtbmlvIGludsOhbGlkbyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzUKK21zZ2lkICJObyBzdWl0YWJsZSBuZXR3b3JrIHByb3RvY29sIGF2YWlsYWJsZSIKK21zZ3N0ciAiTsOjbyBow6EgbmVuaHVtIHByb3RvY29sbyBkZSByZWRlIGFwcm9wcmlhZG8gZGlzcG9uw612ZWwiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM2Cittc2dpZCAiSW52YWxpZCBETlMgVFRMIgorbXNnc3RyICJETlMgVFRMIEludsOhbGlkbyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzcKK21zZ2lkICJSZXNvdXJjZSByZWNvcmQga2V5IGlzIHBhdHRlcm4iCittc2dzdHIgIkNoYXZlIGRlIGdyYXZhw6fDo28gZGUgcmVjdXJzbyDDqSBhIHBhZHLDo28iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM4Cittc2dpZCAiTG9jYWwgbmFtZSBjb2xsaXNpb24iCittc2dzdHIgIkNvbmZsaXRvIGRlIG5vbWUgbG9jYWwiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM5Cittc2dpZCAiSW52YWxpZCByZWNvcmQiCittc2dzdHIgIlJlZ2lzdHJvIGludsOhbGlkbyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDEKK21zZ2lkICJJbnZhbGlkIHNlcnZpY2UgbmFtZSIKK21zZ3N0ciAiTm9tZSBkZSBzZXJ2acOnbyBpbnbDoWxpZG8iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQyCittc2dpZCAiSW52YWxpZCBzZXJ2aWNlIHR5cGUiCittc2dzdHIgIlRpcG8gZGUgc2VydmnDp28gaW52w6FsaWRvIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0MworbXNnaWQgIkludmFsaWQgcG9ydCBudW1iZXIiCittc2dzdHIgIk7Dum1lcm8gZGUgcG9ydGEgaW52w6FsaWRvIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NAorbXNnaWQgIkludmFsaWQgcmVjb3JkIGtleSIKK21zZ3N0ciAiQ2hhdmUgZGUgZ3JhdmHDp8OjbyBpbnbDoWxpZGEiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQ1Cittc2dpZCAiSW52YWxpZCBhZGRyZXNzIgorbXNnc3RyICJFbmRlcmXDp28gaW52w6FsaWRvIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NgorbXNnaWQgIlRpbWVvdXQgcmVhY2hlZCIKK21zZ3N0ciAiVGVtcG8gbGltaXRlIGVzZ290YWRvIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NworbXNnaWQgIlRvbyBtYW55IGNsaWVudHMiCittc2dzdHIgIk11aXRvcyBjbGllbnRlcyBzaW11bHTDom5lb3MiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQ4Cittc2dpZCAiVG9vIG1hbnkgb2JqZWN0cyIKK21zZ3N0ciAiTXVpdG9zIG9iamV0b3Mgc2ltdWx0w6JuZW9zIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0OQorbXNnaWQgIlRvbyBtYW55IGVudHJpZXMiCittc2dzdHIgIk11aXRhcyBlbnRyYWRhcyBzaW11bHTDom5lYXMiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjUwCittc2dpZCAiT1MgRXJyb3IiCittc2dzdHIgIkVycm8gZG8gU08iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjUyCittc2dpZCAiQWNjZXNzIGRlbmllZCIKK21zZ3N0ciAiQWNlc3NvIG5lZ2FkbyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTMKK21zZ2lkICJJbnZhbGlkIG9wZXJhdGlvbiIKK21zZ3N0ciAiT3BlcmHDp8OjbyBpbnbDoWxpZGEiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU0Cittc2dpZCAiQW4gdW5leHBlY3RlZCBELUJ1cyBlcnJvciBvY2N1cmVkIgorbXNnc3RyICJPY29ycmV1IHVtIGVycm8gaW5lc3BlcmFkbyBkbyBELUJVUyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTUKK21zZ2lkICJEYWVtb24gY29ubmVjdGlvbiBmYWlsZWQiCittc2dzdHIgIkEgY29uZXjDo28gY29tIG8gZGFlbW9uIGZhbGhvdSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTYKK21zZ2lkICJNZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICJNZW3Ds3JpYSBlc2dvdGFkYSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTcKK21zZ2lkICJUaGUgb2JqZWN0IHBhc3NlZCBpbiB3YXMgbm90IHZhbGlkIgorbXNnc3RyICJPIG9iamV0byBzdWJtZXRpZG8gbsOjbyDDqSB2w6FsaWRvIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1OAorbXNnaWQgIkRhZW1vbiBub3QgcnVubmluZyIKK21zZ3N0ciAiTyBkYWVtb24gbsOjbyBlc3TDoSBlbSBleGVjdcOnw6NvIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1OQorbXNnaWQgIkludmFsaWQgaW50ZXJmYWNlIGluZGV4IgorbXNnc3RyICLDjW5kaWNlIGRlIGludGVyZmFjZSBpbnbDoWxpZG8iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjYwCittc2dpZCAiSW52YWxpZCBwcm90b2NvbCBzcGVjaWZpY2F0aW9uIgorbXNnc3RyICJFc3BlY2lmaWNhw6fDo28gZG8gcHJvdG9jb2xvIGludsOhbGlkYSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjEKK21zZ2lkICJJbnZhbGlkIGZsYWdzIgorbXNnc3RyICJTaW5hbGl6YWRvcmVzIGludsOhbGlkb3MiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjYzCittc2dpZCAiTm90IGZvdW5kIgorbXNnc3RyICJOw6NvIGVuY29udHJhZG8iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY0Cittc2dpZCAiSW52YWxpZCBjb25maWd1cmF0aW9uIgorbXNnc3RyICJDb25maWd1cmHDp8OjbyBpbnbDoWxpZGEiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY1Cittc2dpZCAiVmVyc2lvbiBtaXNtYXRjaCIKK21zZ3N0ciAiSW5jb21wYXRpYmlsaWRhZGUgZGUgdmVyc8O1ZXMiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY2Cittc2dpZCAiSW52YWxpZCBzZXJ2aWNlIHN1YnR5cGUiCittc2dzdHIgIlN1YnRpcG8gZGUgc2VydmnDp28gaW52w6FsaWRvIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2NworbXNnaWQgIkludmFsaWQgcGFja2V0IgorbXNnc3RyICJQYWNvdGUgaW52w6FsaWRvIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2OAorbXNnaWQgIkludmFsaWQgRE5TIHJldHVybiBjb2RlIgorbXNnc3RyICJDw7NkaWdvIGRlIHJldG9ybm8gZGUgRE5TIGludsOhbGlkbyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjkKK21zZ2lkICJETlMgZmFpbHVyZTogRk9STUVSUiIKK21zZ3N0ciAiRmFsaGEgZGUgRE5TOiBGT1JNRVJSIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3MAorbXNnaWQgIkROUyBmYWlsdXJlOiBTRVJWRkFJTCIKK21zZ3N0ciAiRmFsaGEgZGUgRE5TOiBTRVJWRkFJTCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzEKK21zZ2lkICJETlMgZmFpbHVyZTogTlhET01BSU4iCittc2dzdHIgIkZhbGhhIGRlIEROUzogTlhET01BSU4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjcyCittc2dpZCAiRE5TIGZhaWx1cmU6IE5PVElNUCIKK21zZ3N0ciAiRmFsaGEgZGUgRE5TOiBOTyBUSU1QIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3NAorbXNnaWQgIkROUyBmYWlsdXJlOiBSRUZVU0VEIgorbXNnc3RyICJGYWxoYSBkZSBETlM6IFJFRlVTRUQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc1Cittc2dpZCAiRE5TIGZhaWx1cmU6IFlYRE9NQUlOIgorbXNnc3RyICJGYWxoYSBkZSBETlM6IFlYRE9NQUlOIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3NgorbXNnaWQgIkROUyBmYWlsdXJlOiBZWFJSU0VUIgorbXNnc3RyICJGYWxoYSBkZSBETlM6IFlYUlJTRVQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc3Cittc2dpZCAiRE5TIGZhaWx1cmU6IE5YUlJTRVQiCittc2dzdHIgIkZhbGhhIGRlIEROUzogTlhSUlNFVCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzgKK21zZ2lkICJETlMgZmFpbHVyZTogTk9UQVVUSCIKK21zZ3N0ciAiRmFsaGEgZGUgRE5TOiBOT1RBVVRIIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3OQorbXNnaWQgIkROUyBmYWlsdXJlOiBOT1RaT05FIgorbXNnc3RyICJGYWxoYSBkZSBETlM6IE5PVFpPTkUiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjgwCittc2dpZCAiSW52YWxpZCBSREFUQSIKK21zZ3N0ciAiUkRBVEEgaW52w6FsaWRvIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4MQorbXNnaWQgIkludmFsaWQgRE5TIHR5cGUiCittc2dzdHIgIlRpcG8gZGUgRE5TIGludsOhbGlkbyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODIKK21zZ2lkICJJbnZhbGlkIEROUyBjbGFzcyIKK21zZ3N0ciAiQ2xhc3NlIGRlIEROUyBpbnbDoWxpZGEiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjgzCittc2dpZCAiTm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiTsOjbyBzdXBvcnRhZG8oYSkiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjg1Cittc2dpZCAiTm90IHBlcm1pdHRlZCIKK21zZ3N0ciAiTsOjbyBwZXJtaXRpZG8oYSkiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjg2Cittc2dpZCAiSW52YWxpZCBhcmd1bWVudCIKK21zZ3N0ciAiQXJndW1lbnRvIGludsOhbGlkbyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODcKK21zZ2lkICJJcyBlbXB0eSIKK21zZ3N0ciAiRXN0w6EgdmF6aW8iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjg4Cittc2dpZCAiVGhlIHJlcXVlc3RlZCBvcGVyYXRpb24gaXMgaW52YWxpZCBiZWNhdXNlIHJlZHVuZGFudCIKK21zZ3N0ciAiQSBvcGVyYcOnw6NvIGRlIHJlcXVpc2nDp8OjbyDDqSBpbnbDoWxpZGEgcG9ycXVlIMOpIHJlZHVuZGFudGUiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjk0Cittc2dpZCAiSW52YWxpZCBFcnJvciBDb2RlIgorbXNnc3RyICJDw7NkaWdvIGRlIEVycm8gSW52w6FsaWRvIgorCisjOiAuLi9hdmFoaS1kaXNjb3Zlci1zdGFuZGFsb25lL2F2YWhpLWRpc2NvdmVyLnVpLmg6MQorIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5Ojc2Cittc2dpZCAiPGk+Tm8gc2VydmljZSBjdXJyZW50bHkgc2VsZWN0ZWQuPC9pPiIKK21zZ3N0ciAiPGk+TmVuaHVtIHNlcnZpw6dvIHNlbGVjaW9uYWRvIGF0dWFsbWVudGUuPC9pPiIKKworIzogLi4vYXZhaGktZGlzY292ZXItc3RhbmRhbG9uZS9hdmFoaS1kaXNjb3Zlci51aS5oOjIKK21zZ2lkICJBdmFoaSBEaXNjb3ZlcnkiCittc2dzdHIgIkF2YWhpIERpc2NvdmVyeSIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLmRlc2t0b3AuaW4uaW4uaDoxCittc2dpZCAiQXZhaGkgWmVyb2NvbmYgQnJvd3NlciIKK21zZ3N0ciAiTmF2ZWdhZG9yIFplcm9jb25mIGRvIEF2YWhpIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIuZGVza3RvcC5pbi5pbi5oOjIKK21zZ2lkICJCcm93c2UgZm9yIFplcm9jb25mIHNlcnZpY2VzIGF2YWlsYWJsZSBvbiB5b3VyIG5ldHdvcmsiCittc2dzdHIgIlByb2N1cmFyIHBvciBzZXJ2acOnb3MgWmVyb2NvbmYgZGlzcG9uw612ZWlzIGVtIHN1YSByZWRlIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI0Cittc2dpZCAiVFhUIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMjYKKyMsIGZ1enp5Cittc2dpZCAiVFhUIERhdGE6IgorbXNnc3RyICJEYWRvcyBUWFQiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMjYKKyMsIGZ1enp5Cittc2dpZCAiZW1wdHkiCittc2dzdHIgIkVzdMOhIHZhemlvIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI4CisjLCBmdXp6eQorbXNnaWQgIlNlcnZpY2UgVHlwZToiCittc2dzdHIgIlRpcG8gZG8gc2VydmnDp28iCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMjkKKyMsIGZ1enp5Cittc2dpZCAiU2VydmljZSBOYW1lOiIKK21zZ3N0ciAiTm9tZSBkbyBzZXJ2acOnbyIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIzMAorIywgZnV6enkKK21zZ2lkICJEb21haW4gTmFtZToiCittc2dzdHIgIkRvbcOtbmlvIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjMxCittc2dpZCAiSW50ZXJmYWNlOiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjMyCisjLCBmdXp6eQorbXNnaWQgIkFkZHJlc3M6IgorbXNnc3RyICJFbmRlcmXDp28iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTg1Cittc2dpZCAiQnJvd3NlIFNlcnZpY2UgVHlwZXMiCittc2dzdHIgIlByb2N1cmFyIHRpcG9zIGRlIHNlcnZpw6dvcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxODUKK21zZ2lkICJBIE5VTEwgdGVybWluYXRlZCBsaXN0IG9mIHNlcnZpY2UgdHlwZXMgdG8gYnJvd3NlIGZvciIKK21zZ3N0ciAiVW1hIGxpc3RhIE7Dg08gdGVybWluYWRhIGRvcyB0aXBvcyBkZSBzZXJ2acOnb3MgcGFyYSBuYXZlZ2FyIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE5MAorbXNnaWQgIkRvbWFpbiIKK21zZ3N0ciAiRG9tw61uaW8iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTkwCittc2dpZCAiVGhlIGRvbWFpbiB0byBicm93c2UgaW4sIG9yIE5VTEwgZm9yIHRoZSBkZWZhdWx0IGRvbWFpbiIKK21zZ3N0ciAiTyBkb23DrW5pbyBhIG5hdmVnYXIgb3UgWkVSTyBwYXJhIG8gZG9tw61uaW8gcGFkcsOjbyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxOTYKK21zZ2lkICJTZXJ2aWNlIFR5cGUiCittc2dzdHIgIlRpcG8gZG8gc2VydmnDp28iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTk2Cittc2dpZCAiVGhlIHNlcnZpY2UgdHlwZSBvZiB0aGUgc2VsZWN0ZWQgc2VydmljZSIKK21zZ3N0ciAiTyB0aXBvIGRlIHNlcnZpw6dvIGRvIHNlcnZpw6dvIHNlbGVjaW9uYWRvIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIwMiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjEwMjMKK21zZ2lkICJTZXJ2aWNlIE5hbWUiCittc2dzdHIgIk5vbWUgZG8gc2VydmnDp28iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjAyCittc2dpZCAiVGhlIHNlcnZpY2UgbmFtZSBvZiB0aGUgc2VsZWN0ZWQgc2VydmljZSIKK21zZ3N0ciAiTyBub21lIGRvIHNlcnZpw6dvIHNlbGVjaW9uYWRvIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIwOAorbXNnaWQgIkFkZHJlc3MiCittc2dzdHIgIkVuZGVyZcOnbyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMDgKK21zZ2lkICJUaGUgYWRkcmVzcyBvZiB0aGUgcmVzb2x2ZWQgc2VydmljZSIKK21zZ3N0ciAiTyBlbmRlcmXDp28gZG8gc2VydmnDp28gcmVzb2x2aWRvIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIxMworbXNnaWQgIlBvcnQiCittc2dzdHIgIlBvcnRhIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIxMworbXNnaWQgIlRoZSBJUCBwb3J0IG51bWJlciBvZiB0aGUgcmVzb2x2ZWQgc2VydmljZSIKK21zZ3N0ciAiTyBuw7ptZXJvIElQIGRhIHBvcnRhIGRvIHNlcnZpw6dvIHJlc29sdmlkbyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMTkKK21zZ2lkICJIb3N0IE5hbWUiCittc2dzdHIgIk5vbWUgZGEgbcOhcXVpbmEiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjE5Cittc2dpZCAiVGhlIGhvc3QgbmFtZSBvZiB0aGUgcmVzb2x2ZWQgc2VydmljZSIKK21zZ3N0ciAiTyBub21lIGRhIG3DoXF1aW5hIGRvIHNlcnZpw6dvIHJlc29sdmlkbyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMjUKK21zZ2lkICJUWFQgRGF0YSIKK21zZ3N0ciAiRGFkb3MgVFhUIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIyNQorbXNnaWQgIlRoZSBUWFQgZGF0YSBvZiB0aGUgcmVzb2x2ZWQgc2VydmljZSIKK21zZ3N0ciAiT3MgZGFkb3MgVFhUIGRvIHNlcnZpw6dvIHJlc29sdmlkbyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMzAKKyMsIGZ1enp5Cittc2dpZCAiUmVzb2x2ZSBTZXJ2aWNlIgorbXNnc3RyICJSZXNvbHZlciBzZXJ2acOnbyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMzAKK21zZ2lkICJSZXNvbHZlIHRoZSBzZWxlY3RlZCBzZXJ2aWNlIGF1dG9tYXRpY2FsbHkgYmVmb3JlIHJldHVybmluZyIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIzNgorIywgZnV6enkKK21zZ2lkICJSZXNvbHZlIFNlcnZpY2UgSG9zdCBOYW1lIgorbXNnc3RyICJSZXNvbHZlciBzZXJ2acOnbyBkZSBub21lIGRhIG3DoXF1aW5hIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIzNgorbXNnaWQgIiIKKyJSZXNvbHZlIHRoZSBob3N0IG5hbWUgb2YgdGhlIHNlbGVjdGVkIHNlcnZpY2UgYXV0b21hdGljYWxseSBiZWZvcmUgcmV0dXJuaW5nIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjQyCittc2dpZCAiQWRkcmVzcyBmYW1pbHkiCittc2dzdHIgIkZhbcOtbGlhIGRvIGVuZGVyZcOnbyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyNDIKK21zZ2lkICJUaGUgYWRkcmVzcyBmYW1pbHkgZm9yIGhvc3QgbmFtZSByZXNvbHV0aW9uIgorbXNnc3RyICJBIGZhbcOtbGlhIGRvIGVuZGVyZcOnbyBwYXJhIG8gcmVzb2x1w6fDo28gZGUgbm9tZSBkYSBtw6FxdWluYSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzozMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaGkgY2xpZW50IGZhaWx1cmU6ICVzIgorbXNnc3RyICJGYWxoYSBubyBjbGllbnRlIGRvIEF2YWhpOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzozODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaGkgcmVzb2x2ZXIgZmFpbHVyZTogJXMiCittc2dzdHIgIkZhbGhhIG5vIHJlc29sdmVkb3IgZG8gQXZhaGk6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjUxOAorIywgYy1mb3JtYXQKK21zZ2lkICJCcm93c2luZyBmb3Igc2VydmljZSB0eXBlICVzIGluIGRvbWFpbiAlcyBmYWlsZWQ6ICVzIgorbXNnc3RyICJBIG5hdmVnYcOnw6NvIHBlbG8gc2VydmnDp28gJXMgbm8gZG9tw61uaW8gJXMgZmFsaG91OiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo1MTkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTY4CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoxNjkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTc4CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoxNzkKK21zZ2lkICJuL2EiCittc2dzdHIgIm4vYSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo2NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaGkgZG9tYWluIGJyb3dzZXIgZmFpbHVyZTogJXMiCittc2dzdHIgIkZhbGhhIG5vIG5hdmVnYWRvciBkZSBkb23DrW5pb3MgZG8gQXZhaGk6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjY4NAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVhZCBBdmFoaSBkb21haW46ICVzIgorbXNnc3RyICJGYWxoYSBhbyBsZXIgbyBkb23DrW5pbyBkbyBBdmFoaTogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NzA2Cittc2dpZCAiQnJvd3NlIHNlcnZpY2UgdHlwZSBsaXN0IGlzIGVtcHR5ISIKK21zZ3N0ciAiQSBsaXN0YSBkZSB0aXBvcyBkZSBzZXJ2acOnb3MgZXN0w6EgdmF6aWEhIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjcxNworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY29ubmVjdCB0byBBdmFoaSBzZXJ2ZXI6ICVzIgorbXNnc3RyICJGYWxoYSBhbyBjb25lY3RhciBubyBzZXJ2aWRvciBkbyBBdmFoaTogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NzM1Cittc2dpZCAiQnJvd3NpbmcgZm9yIHNlcnZpY2VzIG9uIDxiPmxvY2FsIG5ldHdvcms8L2I+OiIKK21zZ3N0ciAiUHJvY3VyYW5kbyBwb3Igc2VydmnDp29zIG5hIDxiPlJlZGUgbG9jYWw8L2I+OiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo3MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJvd3NpbmcgZm9yIHNlcnZpY2VzIGluIGRvbWFpbiA8Yj4lczwvYj46IgorbXNnc3RyICJQcm9jdXJhbmRvIHBvciBzZXJ2acOnb3Mgbm8gZG9tw61uaW8gPGI+JXM8L2I+OiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo3NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBicm93c2VyIGZvciAlczogJXMiCittc2dzdHIgIkZhbGhhIGFvIGNyaWFyIG5hdmVnYWRvciBwYXJhICVzOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo5MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSByZXNvbHZlciBmb3IgJXMgb2YgdHlwZSAlcyBpbiBkb21haW4gJXM6ICVzIgorbXNnc3RyICJGYWxoYSBhbyBjcmlhciB1bSByZXNvbHZlZG9yIHBhcmEgJXMgZG8gdGlwbyAlcyBubyBkb23DrW5pbyAlczogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6OTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgZG9tYWluIGJyb3dzZXI6ICVzIgorbXNnc3RyICJGYWxoYSBhbyBjcmlhciBvIG5hdmVnYWRvciBkZSBkb23DrW5pb3M6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjk4OQorbXNnaWQgIkNoYW5nZSBkb21haW4iCittc2dzdHIgIkFsdGVyYXIgZG9tw61uaW8iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTAzMSAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNjIKK21zZ2lkICJCcm93c2luZy4uLiIKK21zZ3N0ciAiUHJvY3VyYW5kby4uLiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTIwCittc2dpZCAiSW5pdGlhbGl6aW5nLi4uIgorbXNnc3RyICJJbmljaWFsaXphbmRvLi4uIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNDQKK21zZ2lkICJMb2NhdGlvbiIKK21zZ3N0ciAiTG9jYWxpemHDp8OjbyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTQ5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU1MworbXNnaWQgIk5hbWUiCittc2dzdHIgIk5vbWUiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTE1NCAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NTMKK21zZ2lkICJUeXBlIgorbXNnc3RyICJUeXBlIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNjYKK21zZ2lkICJfRG9tYWluLi4uIgorbXNnc3RyICJfRG9tw61uaW8uLi4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzo1NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgW29wdGlvbnNdXG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1zIC0tc3NoICAgICAgICAgICAgIEJyb3dzZSBTU0ggc2VydmVyc1xuIgorIiAgICAtdiAtLXZuYyAgICAgICAgICAgICBCcm93c2UgVk5DIHNlcnZlcnNcbiIKKyIgICAgLVMgLS1zaGVsbCAgICAgICAgICAgQnJvd3NlIGJvdGggU1NIIGFuZCBWTkNcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgVGhlIGRvbWFpbiB0byBicm93c2UgaW5cbiIKK21zZ3N0ciAiIgorIiVzIFtvcMOnw7Vlc11cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgTW9zdHJhIGVzc2EgYWp1ZGFcbiIKKyIgICAgLXMgLS1zc2ggICAgICAgICAgICAgUHJvY3VyYSBwb3Igc2Vydmlkb3JlcyBTU0hcbiIKKyIgICAgLXYgLS12bmMgICAgICAgICAgICAgUHJvY3VyYSBwb3Igc2Vydmlkb3JlcyBWTkNcbiIKKyIgICAgLVMgLS1zaGVsbCAgICAgICAgICAgUHJvY3VyYSBwb3Igc2Vydmlkb3JlcyBTU0ggZSBWTkNcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgTyBkb23DrW5pbyBubyBxdWFsIHNlIGRlc2VqYSBxdWUgc2VqYSBwcm9jdXJhZG9cbiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjEwMSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo3NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG9vIG1hbnkgYXJndW1lbnRzXG4iCittc2dzdHIgIk11aXRvcyBhcmd1bWVudG9zXG4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNDkKK21zZ2lkICJDaG9vc2UgU2hlbGwgU2VydmVyIgorbXNnc3RyICJFc2NvbGhhIHVtIHNlcnZpZG9yIGRlIHNoZWxsIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTUxCittc2dpZCAiRGVza3RvcCIKK21zZ3N0ciAiw4FyZWEgZGUgdHJhYmFsaG8iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNTIKK21zZ2lkICJUZXJtaW5hbCIKK21zZ3N0ciAiVGVybWluYWwiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNTYKK21zZ2lkICJDaG9vc2UgVk5DIHNlcnZlciIKK21zZ3N0ciAiRXNjb2xoYSB1bSBzZXJ2aWRvciBWTkMiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNjEKK21zZ2lkICJDaG9vc2UgU1NIIHNlcnZlciIKK21zZ3N0ciAiRXNjb2xoYSB1bSBzZXJ2aWRvciBTU0giCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29ubmVjdGluZyB0byAnJXMnIC4uLlxuIgorbXNnc3RyICJDb25lY3RhbmRvIGEgXCIlc1wiIC4uLlxuIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MjQwCisjLCBjLWZvcm1hdAorbXNnaWQgImV4ZWNscCgpIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAiZXhlY2xwKCkgZmFsaG91OiAlc1xuIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbmNlbGVkLlxuIgorbXNnc3RyICJDYW5jZWxhZG8uXG4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guZGVza3RvcC5pbi5pbi5oOjEKK21zZ2lkICJBdmFoaSBTU0ggU2VydmVyIEJyb3dzZXIiCittc2dzdHIgIk5hdmVnYWRvciBkZSBzZXJ2aWRvcmVzIFNTSCBkbyBBdmFoaSIKKworIzogLi4vYXZhaGktdWkvYnNzaC5kZXNrdG9wLmluLmluLmg6MgorbXNnaWQgIkJyb3dzZSBmb3IgWmVyb2NvbmYtZW5hYmxlZCBTU0ggU2VydmVycyIKK21zZ3N0ciAiUHJvY3VyYXIgcG9yIFNlcnZpZG9yZXMgU1NIIGNvbSBvIFplcm9jb25mIEhhYmlsaXRhZG8iCisKKyM6IC4uL2F2YWhpLXVpL2J2bmMuZGVza3RvcC5pbi5pbi5oOjEKK21zZ2lkICJBdmFoaSBWTkMgU2VydmVyIEJyb3dzZXIiCittc2dzdHIgIk5hdmVnYWRvciBkZSBzZXJ2aWRvcmVzIFZOQyBkbyBBdmFoaSIKKworIzogLi4vYXZhaGktdWkvYnZuYy5kZXNrdG9wLmluLmluLmg6MgorbXNnaWQgIkJyb3dzZSBmb3IgWmVyb2NvbmYtZW5hYmxlZCBWTkMgU2VydmVycyIKK21zZ3N0ciAiUHJvY3VyYXIgcG9yIFNlcnZpZG9yZXMgVk5DIGNvbSBaZXJvY29uZiBIYWJpbGl0YWRvIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoxMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiOiBBbGwgZm9yIG5vd1xuIgorbXNnc3RyICI6IFR1ZG8gcG9yIGVucXVhbnRvXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjExOAorIywgYy1mb3JtYXQKK21zZ2lkICI6IENhY2hlIGV4aGF1c3RlZFxuIgorbXNnc3RyICI6IENhY2hlIGVzZ290YWRvXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjIzOSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgc2VydmljZSAnJXMnIG9mIHR5cGUgJyVzJyBpbiBkb21haW4gJyVzJzogJXNcbiIKK21zZ3N0ciAiIgorIkZhbGhhIGFvIHJlc29sdmVyIG8gc2VydmnDp28gXCIlc1wiIGRvIHRpcG8gXCIlc1wiIG5vIGRvbcOtbmlvIFwiJXNcIjogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MzQwCisjLCBjLWZvcm1hdAorbXNnaWQgInNlcnZpY2VfYnJvd3NlciBmYWlsZWQ6ICVzXG4iCittc2dzdHIgInNlcnZpY2VfYnJvd3NlciBmYWxob3U6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjM3OAorIywgYy1mb3JtYXQKK21zZ2lkICJhdmFoaV9zZXJ2aWNlX2Jyb3dzZXJfbmV3KCkgZmFpbGVkOiAlc1xuIgorbXNnc3RyICJhdmFoaV9zZXJ2aWNlX2Jyb3dzZXJfbmV3KCkgZmFsaG91OiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VydmljZV90eXBlX2Jyb3dzZXIgZmFpbGVkOiAlc1xuIgorbXNnc3RyICJzZXJ2aWNlX3R5cGVfYnJvd3NlciBmYWxob3U6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjQ0NAorIywgYy1mb3JtYXQKK21zZ2lkICJhdmFoaV9zZXJ2aWNlX3R5cGVfYnJvd3Nlcl9uZXcoKSBmYWlsZWQ6ICVzXG4iCittc2dzdHIgImF2YWhpX3NlcnZpY2VfdHlwZV9icm93c2VyX25ldygpIGZhbGhvdTogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTE5CisjLCBjLWZvcm1hdAorbXNnaWQgImF2YWhpX2RvbWFpbl9icm93c2VyX25ldygpIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAiYXZhaGlfZG9tYWluX2Jyb3dzZXJfbmV3KCkgZmFsaG91OiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1MzUgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjM5NAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI4MCAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBxdWVyeSB2ZXJzaW9uIHN0cmluZzogJXNcbiIKK21zZ3N0ciAiRmFsaGEgYW8gY29uc3VsdGFyIGEgc3RyaW5nIGRlIHZlcnPDo286ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU0MCAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6Mzk5CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6Mjg1IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxNzMKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IGhvc3QgbmFtZTogJXNcbiIKK21zZ3N0ciAiRmFsaGEgYW8gY29uc3VsdGFyIG8gbm9tZSBkZSBtw6FxdWluYTogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTQ0IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo0MDMKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyODkgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE3NworIywgYy1mb3JtYXQKK21zZ2lkICJTZXJ2ZXIgdmVyc2lvbjogJXM7IEhvc3QgbmFtZTogJXNcbiIKK21zZ3N0ciAiVmVyc8OjbyBkbyBzZXJ2aWRvcjogJXM7IE5vbWUgZGUgbcOhcXVpbmE6ICVzXG4iCisKKyMuIFRyYW5zbGF0b3JzOiBUaGlzIGlzIGEgY29sdW1uIGhlYWRpbmcgd2l0aCBhYmJyZXZpYXRpb25zIGZvcgorIy4gKiAgIEV2ZW50ICgrLy0pLCBOZXR3b3JrIEludGVyZmFjZSwgUHJvdG9jb2wgKElQdjQvdjYpLCBEb21haW4KKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU0OQorIywgYy1mb3JtYXQKK21zZ2lkICJFIElmY2UgUHJvdCBEb21haW5cbiIKK21zZ3N0ciAiRSBJbnRlciBQcm90IERvbcOtbmlvXG4iCisKKyMuIFRyYW5zbGF0b3JzOiBUaGlzIGlzIGEgY29sdW1uIGhlYWRpbmcgd2l0aCBhYmJyZXZpYXRpb25zIGZvcgorIy4gKiAgIEV2ZW50ICgrLy0pLCBOZXR3b3JrIEludGVyZmFjZSwgUHJvdG9jb2wgKElQdjQvdjYpLCBEb21haW4KKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU1MworIywgYy1mb3JtYXQKK21zZ2lkICJFIElmY2UgUHJvdCAlLSpzICUtMjBzIERvbWFpblxuIgorbXNnc3RyICJFIEludGVyIFByb3QgJS0qcyAlLTIwcyBEb23DrW5pb1xuIgorCisjLiBXZSBoYXZlIGJlZW4gZGlzY29ubmVjdGVkLCBzbyBsZXQgcmVjb25uZWN0CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1ODUgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE2MworIywgYy1mb3JtYXQKK21zZ2lkICJEaXNjb25uZWN0ZWQsIHJlY29ubmVjdGluZyAuLi5cbiIKK21zZ3N0ciAiRGVzY29uZWN0YWRvLCByZWNvbmVjdGFuZG8uLi5cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTk5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjgyOQorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE3MCAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6Mzg2CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjcyIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBjbGllbnQgb2JqZWN0OiAlc1xuIgorbXNnc3RyICJGYWxoYSBhbyBjcmlhciBvYmpldG8gY2xpZW50ZTogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NjA0IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxNzUKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoxNDMgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNsaWVudCBmYWlsdXJlLCBleGl0aW5nOiAlc1xuIgorbXNnc3RyICJGYWxoYSBubyBjbGllbnRlLCBzYWluZG86ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjYyMyAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIldhaXRpbmcgZm9yIGRhZW1vbiAuLi5cbiIKK21zZ3N0ciAiRXNwZXJhbmRvIHBlbG8gZGFlbW9uLi4uXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjY0NworbXNnaWQgIiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgU2hvdyB2ZXJzaW9uXG4iCisiICAgIC1EIC0tYnJvd3NlLWRvbWFpbnMgIEJyb3dzZSBmb3IgYnJvd3NpbmcgZG9tYWlucyBpbnN0ZWFkIG9mIHNlcnZpY2VzXG4iCisiICAgIC1hIC0tYWxsICAgICAgICAgICAgIFNob3cgYWxsIHNlcnZpY2VzLCByZWdhcmRsZXNzIG9mIHRoZSB0eXBlXG4iCisiICAgIC1kIC0tZG9tYWluPURPTUFJTiAgIFRoZSBkb21haW4gdG8gYnJvd3NlIGluXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKKyIgICAgLXQgLS10ZXJtaW5hdGUgICAgICAgVGVybWluYXRlIGFmdGVyIGR1bXBpbmcgYSBtb3JlIG9yIGxlc3MgY29tcGxldGUgIgorImxpc3RcbiIKKyIgICAgLWMgLS1jYWNoZSAgICAgICAgICAgVGVybWluYXRlIGFmdGVyIGR1bXBpbmcgYWxsIGVudHJpZXMgZnJvbSB0aGUgY2FjaGVcbiIKKyIgICAgLWwgLS1pZ25vcmUtbG9jYWwgICAgSWdub3JlIGxvY2FsIHNlcnZpY2VzXG4iCisiICAgIC1yIC0tcmVzb2x2ZSAgICAgICAgIFJlc29sdmUgc2VydmljZXMgZm91bmRcbiIKKyIgICAgLWYgLS1uby1mYWlsICAgICAgICAgRG9uJ3QgZmFpbCBpZiB0aGUgZGFlbW9uIGlzIG5vdCBhdmFpbGFibGVcbiIKKyIgICAgLXAgLS1wYXJzYWJsZSAgICAgICAgT3V0cHV0IGluIHBhcnNhYmxlIGZvcm1hdFxuIgorbXNnc3RyICIiCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIE1vc3RyYSBlc3NhIGFqdWRhXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgTW9zdHJhIGEgdmVyc8Ojb1xuIgorIiAgICAtRCAtLWJyb3dzZS1kb21haW5zICBQcm9jdXJhIHBvciBkb23DrW5pb3MgZGUgbmF2ZWdhw6fDo28gbm8gbHVnYXIgZGUgIgorInNlcnZpw6dvc1xuIgorIiAgICAtYSAtLWFsbCAgICAgICAgICAgICBNb3N0cmEgdG9kb3Mgb3Mgc2VydmnDp29zLCBpbmRlcGVuZGVudGUgZG8gdGlwb1xuIgorIiAgICAtZCAtLWRvbWFpbj1ET01BSU4gICBOb21lIGRvIGRvbcOtbmlvIGVtIHF1ZSBzZXLDoSBwcm9jdXJhZG9cbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgSGFiaWxpdGEgbyBtb2RvIGRldGFsaGFkb1xuIgorIiAgICAtdCAtLXRlcm1pbmF0ZSAgICAgICBUZXJtaW5hciBhcMOzcyBjb21waWxhciBhIGxpc3RhIGRlIG1vcmUvbGVzc1xuIgorIiAgICAtYyAtLWNhY2hlICAgICAgICAgICBUZXJtaW5hciBhcMOzcyBjb21waWxhciB0b2RhcyBhcyBlbnRyYWRhcyBkbyBjYWNoZVxuIgorIiAgICAtbCAtLWlnbm9yZS1sb2NhbCAgICBJZ25vcmFyIHNlcnZpw6dvcyBsb2NhaXNcbiIKKyIgICAgLXIgLS1yZXNvbHZlICAgICAgICAgUmVzb2x2ZXIgc2VydmnDp29zIGVuY29udHJhZG9zXG4iCisiICAgIC1mIC0tbm8tZmFpbCAgICAgICAgIE7Do28gZmFsaGFyIHNlIG8gZGFlbW9uIG7Do28gZXN0aXZlciBkaXNwb27DrXZlbFxuIgorIiAgICAtcCAtLXBhcnNhYmxlICAgICAgICBTYcOtZGEgZW0gZm9ybWF0byBhbmFsaXPDoXZlbFxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo2NjAKK21zZ2lkICIiCisiICAgIC1rIC0tbm8tZGItbG9va3VwICAgIERvbid0IGxvb2t1cCBzZXJ2aWNlIHR5cGVzXG4iCisiICAgIC1iIC0tZHVtcC1kYiAgICAgICAgIER1bXAgc2VydmljZSB0eXBlIGRhdGFiYXNlXG4iCittc2dzdHIgIiIKKyIgICAgLWsgLS1uby1kYi1sb29rdXAgICAgSWdub3JhciB0aXBvcyBkZSBzZXJ2acOnb3NcbiIKKyIgICAgLWIgLS1kdW1wLWRiICAgICAgICAgQ29tcGlsYXIgYmFzZSBkZSBkYWRvcyBkZSB0aXBvcyBkZSBzZXJ2acOnb1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo3NjYgLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjIxOQorIywgYy1mb3JtYXQKK21zZ2lkICJUb28gZmV3IGFyZ3VtZW50c1xuIgorbXNnc3RyICJQb3Vjb3MgYXJndW1lbnRvc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo4MjEgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjM3OAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI2NCAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgc2ltcGxlIHBvbGwgb2JqZWN0LlxuIgorbXNnc3RyICJGYWxoYSBhbyBjcmlhciBvYmpldG8gZGUgZW5xdWV0ZSBzaW1wbGVzLlxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXN0YWJsaXNoZWQgdW5kZXIgbmFtZSAnJXMnXG4iCittc2dzdHIgIkVzdGFiZWxlY2lkYSBubyBub21lIFwiJXNcIlxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyOiAlc1xuIgorbXNnc3RyICJGYWxoYSBhbyByZWdpc3RyYXI6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICJOYW1lIGNvbGxpc2lvbiwgcGlja2luZyBuZXcgbmFtZSAnJXMnLlxuIgorbXNnc3RyICJDb2xpc8OjbyBkZSBub21lcywgZXNjb2xoZW5kbyB1bSBub3ZvIG5vbWUgXCIlc1wiLlxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgZW50cnkgZ3JvdXA6ICVzXG4iCittc2dzdHIgIkZhbGhhIGFvIGNyaWFyIGVudHJhZGEgZGUgZ3J1cG86ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBhZGRyZXNzOiAlc1xuIgorbXNnc3RyICJGYWxoYSBhbyBhZGljaW9uYXIgZW5kZXJlw6dvOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgc2VydmljZTogJXNcbiIKK21zZ3N0ciAiRmFsaGEgYW8gYWRpY2lvbmFyIHNlcnZpw6dvOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgc3VidHlwZSAnJXMnOiAlc1xuIgorbXNnc3RyICJGYWxoYSBhbyBhZGljaW9uYXIgc3VidGlwbyBcIiVzXCI6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiSG9zdCBuYW1lIGNvbmZsaWN0XG4iCittc2dzdHIgIkNvbmZsaXRvIGRlIG5vbWUgZGUgbcOhcXVpbmFcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjIxNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFtvcHRpb25zXSAlcyA8bmFtZT4gPHR5cGU+IDxwb3J0PiBbPHR4dCAuLi4+XVxuIgorIiVzIFtvcHRpb25zXSAlcyA8aG9zdC1uYW1lPiA8YWRkcmVzcz5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgU2hvdyB2ZXJzaW9uXG4iCisiICAgIC1zIC0tc2VydmljZSAgICAgICAgIFB1Ymxpc2ggc2VydmljZVxuIgorIiAgICAtYSAtLWFkZHJlc3MgICAgICAgICBQdWJsaXNoIGFkZHJlc3NcbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgRW5hYmxlIHZlcmJvc2UgbW9kZVxuIgorIiAgICAtZCAtLWRvbWFpbj1ET01BSU4gICBEb21haW4gdG8gcHVibGlzaCBzZXJ2aWNlIGluXG4iCisiICAgIC1IIC0taG9zdD1ET01BSU4gICAgIEhvc3Qgd2hlcmUgc2VydmljZSByZXNpZGVzXG4iCisiICAgICAgIC0tc3VidHlwZT1TVUJUWVBFIEFuIGFkZGl0aW9uYWwgc3VidHlwZSB0byByZWdpc3RlciB0aGlzIHNlcnZpY2UgIgorIndpdGhcbiIKKyIgICAgLVIgLS1uby1yZXZlcnNlICAgICAgRG8gbm90IHB1Ymxpc2ggcmV2ZXJzZSBlbnRyeSB3aXRoIGFkZHJlc3NcbiIKKyIgICAgLWYgLS1uby1mYWlsICAgICAgICAgRG9uJ3QgZmFpbCBpZiB0aGUgZGFlbW9uIGlzIG5vdCBhdmFpbGFibGVcbiIKK21zZ3N0ciAiIgorIiVzIFtvcMOnw7Vlc10gJXMgPG5vbWU+IDx0aXBvPiA8cG9ydGE+IFs8dHh0IC4uLj5dXG4iCisiJXMgW29ww6fDtWVzXSAlcyA8bm9tZS1kZS1tw6FxdWluYT4gPGVuZGVyZcOnbz5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgTW9zdHJhIGVzc2EgYWp1ZGFcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICBNb3N0cmEgYSB2ZXJzw6NvXG4iCisiICAgIC1zIC0tc2VydmljZSAgICAgICAgIFB1YmxpY2EgbyBzZXJ2acOnbyBcbiIKKyIgICAgLWEgLS1hZGRyZXNzICAgICAgICAgUHVibGljYSBvIGVuZGVyZcOnb1xuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBIYWJpbGl0YSBvIG1vZG8gZGV0YWxoYWRvXG4iCisiICAgIC1kIC0tZG9tYWluPURPTUFJTiAgIERvbcOtbmlvIG9uZGUgc2UgcXVlciBwdWJsaWNhciBvIHNlcnZpw6dvXG4iCisiICAgIC1IIC0taG9zdD1ET01BSU4gICAgIE3DoXF1aW5hIG9uZGUgbyBzZXJ2acOnbyBlc3TDoVxuIgorIiAgICAgICAtLXN1YnR5cGU9U1VCVFlQRSAgU3VidGlwbyBhZGljaW9uYWwgcGFyYSByZWdpc3RyYXIganVudG8gYW8gc2VydmnDp29cbiIKKyIgICAgLWYgLS1uby1mYWlsICAgICAgICAgTsOjbyBmYWxoYSBzZSBvIGRhZW1vbiBuw6NvIGVzdGl2ZXIgZGlzcG9uw612ZWxcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjMwMyAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MzE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBudW1iZXIgb2YgYXJndW1lbnRzXG4iCittc2dzdHIgIk7Dum1lcm8gZGUgYXJndW1lbnRvcyBpbnbDoWxpZG9cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjMyOQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcGFyc2UgcG9ydCBudW1iZXI6ICVzXG4iCittc2dzdHIgIkZhbGhhIGFvIGFuYWxpc2FyIG8gbsO6bWVybyBkYSBwb3J0YTogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjM2MSAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGNvbW1hbmQgc3BlY2lmaWVkLlxuIgorbXNnc3RyICJOZW5odW0gY29tYW5kbyBlc3BlY2lmaWNhZG8uXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzo4OQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSBob3N0IG5hbWUgJyVzJzogJXNcbiIKK21zZ3N0ciAiRmFsaGEgYW8gcmVzb2x2ZXIgbyBub21lIGRhIG3DoXF1aW5hIFwiJXNcIjogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjEyNgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSBhZGRyZXNzICclcyc6ICVzXG4iCittc2dzdHIgIkZhbGhhIGFvIHJlc29sdmVyIG8gZW5kZXJlw6dvIFwiJXNcIjogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjE1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgW29wdGlvbnNdICVzIDxob3N0IG5hbWUgLi4uPlxuIgorIiVzIFtvcHRpb25zXSAlcyA8YWRkcmVzcyAuLi4gPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLW4gLS1uYW1lICAgICAgICAgICAgUmVzb2x2ZSBob3N0IG5hbWVcbiIKKyIgICAgLWEgLS1hZGRyZXNzICAgICAgICAgUmVzb2x2ZSBhZGRyZXNzXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKKyIgICAgLTYgICAgICAgICAgICAgICAgICAgTG9va3VwIElQdjYgYWRkcmVzc1xuIgorIiAgICAtNCAgICAgICAgICAgICAgICAgICBMb29rdXAgSVB2NCBhZGRyZXNzXG4iCittc2dzdHIgIiIKKyIlcyBbb3DDp8O1ZXNdICVzIDxub21lIGRlIG3DoXF1aW5hIC4uLj5cbiIKKyIlcyBbb3DDp8O1ZXNdICVzIDxlbmRlcmXDp28gLi4uID5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgTW9zdHJhIGVzc2EgYWp1ZGFcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICBNb3N0cmEgYSB2ZXJzw6NvXG4iCisiICAgIC1uIC0tbmFtZSAgICAgICAgICAgUmVzb2x2ZSBvIG5vbWUgZGUgbcOhcXVpbmEgZm9ybmVjaWRvXG4iCisiICAgIC1hIC0tYWRkcmVzcyAgICAgICAgUmVzb2x2ZSBvIGVuZGVyZcOnbyBmb3JuZWNpZG9cbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICBIYWJpbGl0YSBvIG1vZG8gZGV0YWxoYWRvXG4iCisiICAgIC02ICAgICAgICAgICAgICAgICAgIFByb2N1cmEgcG9yIGVuZGVyZcOnb3MgSVB2NlxuIgorIiAgICAtNCAgICAgICAgICAgICAgICAgICBQcm9jdXJhIHBvciBlbmRlcmXDp29zIElQdjRcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI5OSAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgaG9zdCBuYW1lIHJlc29sdmVyOiAlc1xuIgorbXNnc3RyICJGYWxoYSBhbyBjcmlhciBvIHJlc29sdmVkb3IgZGUgbm9tZXMgZGUgbcOhcXVpbmE6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzozMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIGFkZHJlc3MgJyVzJ1xuIgorbXNnc3RyICJGYWxoYSBhbyBhbmFsaXNhciBvIGVuZGVyZcOnbyBcIiVzXCJcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjMxNAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGFkZHJlc3MgcmVzb2x2ZXI6ICVzXG4iCittc2dzdHIgIkZhbGhhIGFvIGNyaWFyIG8gcmVzb2x2ZWRvciBkZSBlbmRlcmXDp29zOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFtvcHRpb25zXSA8bmV3IGhvc3QgbmFtZT5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgU2hvdyB2ZXJzaW9uXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKK21zZ3N0ciAiIgorIiVzIFtvcMOnw7Vlc10gPG5vdm8gbm9tZSBkZSBtw6FxdWluYT5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgICBNb3N0cmEgZXNzYSBhanVkYVxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBNb3N0cmEgYSB2ZXJzw6NvXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEhhYmlsaXRhIG8gbW9kbyBkZXRhbGhhZG9cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMsIGV4cGVjdGluZyBleGFjdGx5IG9uZS5cbiIKK21zZ3N0ciAiTsO6bWVybyBkZSBhcmd1bWVudG9zIGludsOhbGlkbywgZXNwZXJhbmRvIGV4YXRhbWVudGUgdW0uXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSG9zdCBuYW1lIHN1Y2Nlc3NmdWxseSBjaGFuZ2VkIHRvICVzXG4iCittc2dzdHIgIk5vbWUgZGUgbcOhcXVpbmEgYWx0ZXJhZG8gcGFyYSAlcyBjb20gc3VjZXNzb1xuIgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL3BvL3JvLnBvIGIvYXZhaGktMC42LjMxL3BvL3JvLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2MmZhOGYKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvcG8vcm8ucG8KQEAgLTAsMCArMSw4NTUgQEAKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IEZlZG9yYSAxMFxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMS0wNC0wMiAwMzoyMyswMjAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwOS0xMC0wMyAxMzoyMyswMjAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBBZGkgUm9pYmFuIDxhZGlAcm9pYmFuLnJvPlxuIgorIkxhbmd1YWdlLVRlYW06IFJvbWFuaWFuIDxMTEBsaS5vcmc+XG4iCisiTGFuZ3VhZ2U6IHJvXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0zOyBwbHVyYWw9KG4gPT0gMSA/IDA6ICgoKG4gJSAxMDAgPiAxOSkgfHwgKChuICUgMTAwICIKKyI9PSAwKSAmJiAobiAhPSAwKSkpID8gMjogMSkpO1xuIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozMAorbXNnaWQgIk9LIgorbXNnc3RyICJPSyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzEKK21zZ2lkICJPcGVyYXRpb24gZmFpbGVkIgorbXNnc3RyICJPcGVyYcibaXVuZSBlyJl1YXTEgyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzIKK21zZ2lkICJCYWQgc3RhdGUiCittc2dzdHIgIlN0YXJlIGdyZciZaXTEgyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzMKK21zZ2lkICJJbnZhbGlkIGhvc3QgbmFtZSIKK21zZ3N0ciAiTnVtZSBnYXpkxIMgbmV2YWxpZCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzQKK21zZ2lkICJJbnZhbGlkIGRvbWFpbiBuYW1lIgorbXNnc3RyICJOdW1lIGRvbWVuaXUgbmV2YWxpZCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzUKK21zZ2lkICJObyBzdWl0YWJsZSBuZXR3b3JrIHByb3RvY29sIGF2YWlsYWJsZSIKK21zZ3N0ciAiTnUgZXN0ZSBkaXNwb25pYmlsIG5pY2kgdW4gcHJvdG9jb2wgZGUgcmXIm2VhIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozNgorbXNnaWQgIkludmFsaWQgRE5TIFRUTCIKK21zZ3N0ciAiRE5TIFRUTCBuZXZhbGlkIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozNworbXNnaWQgIlJlc291cmNlIHJlY29yZCBrZXkgaXMgcGF0dGVybiIKK21zZ3N0ciAiw45ucmVnaXN0cmFyZWEgY2hlaWUgcmVzdXJzxIMgZXN0ZSBtb2RlbCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzgKK21zZ2lkICJMb2NhbCBuYW1lIGNvbGxpc2lvbiIKK21zZ3N0ciAiQ29saXppdW5lIG51bWUgbG9jYWwiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM5Cittc2dpZCAiSW52YWxpZCByZWNvcmQiCittc2dzdHIgIsOObnJlZ2lzdHJhcmUgbmV2YWxpZMSDIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0MQorbXNnaWQgIkludmFsaWQgc2VydmljZSBuYW1lIgorbXNnc3RyICJOdW1lIHNlcnZpY2l1IG5ldmFsaWQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQyCittc2dpZCAiSW52YWxpZCBzZXJ2aWNlIHR5cGUiCittc2dzdHIgIlRpcCBzZXJ2aWNpdSBuZXZhbGlkIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0MworbXNnaWQgIkludmFsaWQgcG9ydCBudW1iZXIiCittc2dzdHIgIk51bcSDciBwb3J0IG5ldmFsaWQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQ0Cittc2dpZCAiSW52YWxpZCByZWNvcmQga2V5IgorbXNnc3RyICJDaGVpZSDDrm5yZWdpc3RyYXJlIG5ldmFsaWTEgyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDUKK21zZ2lkICJJbnZhbGlkIGFkZHJlc3MiCittc2dzdHIgIkFkcmVzxIMgbmV2YWxpZMSDIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NgorbXNnaWQgIlRpbWVvdXQgcmVhY2hlZCIKK21zZ3N0ciAiVGltcCBleHBpcmF0IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NworbXNnaWQgIlRvbyBtYW55IGNsaWVudHMiCittc2dzdHIgIlByZWEgbXVsyJtpIGNsaWVuyJtpIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0OAorbXNnaWQgIlRvbyBtYW55IG9iamVjdHMiCittc2dzdHIgIlByZWEgbXVsdGUgb2JpZWN0ZSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDkKK21zZ2lkICJUb28gbWFueSBlbnRyaWVzIgorbXNnc3RyICJQcmVhIG11bHRlIGludHLEg3JpIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1MAorbXNnaWQgIk9TIEVycm9yIgorbXNnc3RyICJFcm9hcmUgU08iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjUyCittc2dpZCAiQWNjZXNzIGRlbmllZCIKK21zZ3N0ciAiQWNjZXMgcmVmdXphdCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTMKK21zZ2lkICJJbnZhbGlkIG9wZXJhdGlvbiIKK21zZ3N0ciAiT3BlcmHIm2llIG5ldmFsaWTEgyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTQKK21zZ2lkICJBbiB1bmV4cGVjdGVkIEQtQnVzIGVycm9yIG9jY3VyZWQiCittc2dzdHIgIlMtYSBwcm9kdXMgbyBlcm9hcmUgRC1CdXMiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU1Cittc2dpZCAiRGFlbW9uIGNvbm5lY3Rpb24gZmFpbGVkIgorbXNnc3RyICJDb254aXVuZSBzZXJ2aWNpdSBlyJl1YXTEgyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTYKK21zZ2lkICJNZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICJNZW1vcmllIGVwdWl6YXTEgyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTcKK21zZ2lkICJUaGUgb2JqZWN0IHBhc3NlZCBpbiB3YXMgbm90IHZhbGlkIgorbXNnc3RyICJPYmllY3R1bCB0cmltaXMgbnUgZXN0ZSB2YWxpZCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTgKK21zZ2lkICJEYWVtb24gbm90IHJ1bm5pbmciCittc2dzdHIgIlNlcnZpY2l1bCBudSBmdW5jyJtpb25lYXrEgyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTkKK21zZ2lkICJJbnZhbGlkIGludGVyZmFjZSBpbmRleCIKK21zZ3N0ciAiSW5kZXggaW50ZXJmZcibxIMgbmV2YWxpZCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjAKK21zZ2lkICJJbnZhbGlkIHByb3RvY29sIHNwZWNpZmljYXRpb24iCittc2dzdHIgIlByb3RvY29sIHNwZWNpZmljYXQgbmV2YWxpZCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjEKK21zZ2lkICJJbnZhbGlkIGZsYWdzIgorbXNnc3RyICJNYXJjYWplIG5ldmFsaWRlIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2MworbXNnaWQgIk5vdCBmb3VuZCIKK21zZ3N0ciAiTnUgYSBmb3N0IGfEg3NpdCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjQKK21zZ2lkICJJbnZhbGlkIGNvbmZpZ3VyYXRpb24iCittc2dzdHIgIkNvbmZpZ3VyYcibaWUgbmV2YWxpZMSDIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2NQorbXNnaWQgIlZlcnNpb24gbWlzbWF0Y2giCittc2dzdHIgIlZlcnNpdW5lYSBudSBjb3Jlc3B1bmRlIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2NgorbXNnaWQgIkludmFsaWQgc2VydmljZSBzdWJ0eXBlIgorbXNnc3RyICJTdWJ0aXAgc2VydmljaXUgbmV2YWxpZCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjcKK21zZ2lkICJJbnZhbGlkIHBhY2tldCIKK21zZ3N0ciAiUGFjaGV0IG5ldmFsaWQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY4Cittc2dpZCAiSW52YWxpZCBETlMgcmV0dXJuIGNvZGUiCittc2dzdHIgIkNvZCByZXR1cm5hdCBETlMgbmV2YWxpZCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjkKK21zZ2lkICJETlMgZmFpbHVyZTogRk9STUVSUiIKK21zZ3N0ciAiRE5TIGXImXVhdDogRk9STUVSUiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzAKK21zZ2lkICJETlMgZmFpbHVyZTogU0VSVkZBSUwiCittc2dzdHIgIkROUyBlyJl1YXQ6IFNFUlZGQUlMIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3MQorbXNnaWQgIkROUyBmYWlsdXJlOiBOWERPTUFJTiIKK21zZ3N0ciAiRE5TIGXImXVhdDogTlhET01BSU4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjcyCittc2dpZCAiRE5TIGZhaWx1cmU6IE5PVElNUCIKK21zZ3N0ciAiRE5TIGXImXVhdDogTk9USU1QIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3NAorbXNnaWQgIkROUyBmYWlsdXJlOiBSRUZVU0VEIgorbXNnc3RyICJETlMgZciZdWF0OiBSRUZVU0VEIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3NQorbXNnaWQgIkROUyBmYWlsdXJlOiBZWERPTUFJTiIKK21zZ3N0ciAiRE5TIGXImXVhdDogWVhETUFJTiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzYKK21zZ2lkICJETlMgZmFpbHVyZTogWVhSUlNFVCIKK21zZ3N0ciAiRE5TIGXImXVhdDogWVhSUlNFVCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzcKK21zZ2lkICJETlMgZmFpbHVyZTogTlhSUlNFVCIKK21zZ3N0ciAiRE5TIGXImXVhdDogTlhSUlNFVCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzgKK21zZ2lkICJETlMgZmFpbHVyZTogTk9UQVVUSCIKK21zZ3N0ciAiRE5TIGXImXVhdDogTk9UQVVUSCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzkKK21zZ2lkICJETlMgZmFpbHVyZTogTk9UWk9ORSIKK21zZ3N0ciAiRE5TIGXImXVhdDogTk9UWk9ORSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODAKK21zZ2lkICJJbnZhbGlkIFJEQVRBIgorbXNnc3RyICJSREFUQSBuZXZhbGlkIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4MQorbXNnaWQgIkludmFsaWQgRE5TIHR5cGUiCittc2dzdHIgIlRpcCBETlMgbmV2YWxpZCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODIKK21zZ2lkICJJbnZhbGlkIEROUyBjbGFzcyIKK21zZ3N0ciAiQ2xhc8SDIEROUyBuZXZhbGlkxIMiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjgzCittc2dpZCAiTm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiTnUgZXN0ZSBzdXBvcnRhdCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODUKK21zZ2lkICJOb3QgcGVybWl0dGVkIgorbXNnc3RyICJOdSBlc3RlIHBlcm1pcyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODYKK21zZ2lkICJJbnZhbGlkIGFyZ3VtZW50IgorbXNnc3RyICJBcmd1bWVudCBuZXZhbGlkIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4NworbXNnaWQgIklzIGVtcHR5IgorbXNnc3RyICJFc3RlIGdvbCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODgKK21zZ2lkICJUaGUgcmVxdWVzdGVkIG9wZXJhdGlvbiBpcyBpbnZhbGlkIGJlY2F1c2UgcmVkdW5kYW50IgorbXNnc3RyICJPcGVyYcibaWEgY2VydXTEgyBudSBlc3RlIHZhbGlkxIMgZGVvYXJlY2UgZXN0ZSByZWR1bmRhbnTEgyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6OTQKK21zZ2lkICJJbnZhbGlkIEVycm9yIENvZGUiCittc2dzdHIgIkNvZCBkZSBlcm9hcmUgbmV2YWxpZCIKKworIzogLi4vYXZhaGktZGlzY292ZXItc3RhbmRhbG9uZS9hdmFoaS1kaXNjb3Zlci51aS5oOjEKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weTo3NgorbXNnaWQgIjxpPk5vIHNlcnZpY2UgY3VycmVudGx5IHNlbGVjdGVkLjwvaT4iCittc2dzdHIgIjxpPk5pY2kgdW4gc2VydmljaXUgc2VsZWN0YXQgY3VyZW50LjwvaT4iCisKKyM6IC4uL2F2YWhpLWRpc2NvdmVyLXN0YW5kYWxvbmUvYXZhaGktZGlzY292ZXIudWkuaDoyCittc2dpZCAiQXZhaGkgRGlzY292ZXJ5IgorbXNnc3RyICJEZXNjb3BlcmlyZSBBdmFoaSIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLmRlc2t0b3AuaW4uaW4uaDoxCittc2dpZCAiQXZhaGkgWmVyb2NvbmYgQnJvd3NlciIKK21zZ3N0ciAiTmF2aWdhdG9yIEF2YWhpIFplcm9jb25mIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIuZGVza3RvcC5pbi5pbi5oOjIKK21zZ2lkICJCcm93c2UgZm9yIFplcm9jb25mIHNlcnZpY2VzIGF2YWlsYWJsZSBvbiB5b3VyIG5ldHdvcmsiCittc2dzdHIgIkRlc2NvcGVyxIMgc2VydmljaWlsZSBaZXJvY29uZiBkaXNwb25pYmlsZSDDrm4gcmXIm2VhdWEgZHVtbmVhdm9hc3RyxIMuIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI0Cittc2dpZCAiVFhUIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMjYKKyMsIGZ1enp5Cittc2dpZCAiVFhUIERhdGE6IgorbXNnc3RyICJEYXRlIFRYVCIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIyNgorIywgZnV6enkKK21zZ2lkICJlbXB0eSIKK21zZ3N0ciAiRXN0ZSBnb2wiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMjgKKyMsIGZ1enp5Cittc2dpZCAiU2VydmljZSBUeXBlOiIKK21zZ3N0ciAiVGlwIHNlcnZpY2l1IgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI5CisjLCBmdXp6eQorbXNnaWQgIlNlcnZpY2UgTmFtZToiCittc2dzdHIgIk51bWUgc2VydmljaXUiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMzAKKyMsIGZ1enp5Cittc2dpZCAiRG9tYWluIE5hbWU6IgorbXNnc3RyICJEb21lbml1IgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjMxCittc2dpZCAiSW50ZXJmYWNlOiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjMyCisjLCBmdXp6eQorbXNnaWQgIkFkZHJlc3M6IgorbXNnc3RyICJBZHJlc8SDIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE4NQorbXNnaWQgIkJyb3dzZSBTZXJ2aWNlIFR5cGVzIgorbXNnc3RyICJOYXZpZ2FyZSB0aXB1cmkgc2VydmljaWkiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTg1Cittc2dpZCAiQSBOVUxMIHRlcm1pbmF0ZWQgbGlzdCBvZiBzZXJ2aWNlIHR5cGVzIHRvIGJyb3dzZSBmb3IiCittc2dzdHIgIk8gbGlzdMSDIHRlcm1pbmF0xIMgw65uIE5VTEwgZGUgc2VydmljaWkgY2FyZSBzxIMgZmllIGRlc2NvcGVyaXRlIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE5MAorbXNnaWQgIkRvbWFpbiIKK21zZ3N0ciAiRG9tZW5pdSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxOTAKK21zZ2lkICJUaGUgZG9tYWluIHRvIGJyb3dzZSBpbiwgb3IgTlVMTCBmb3IgdGhlIGRlZmF1bHQgZG9tYWluIgorbXNnc3RyICJEb21lbml1IHBlbnRydSBjYXJlIHPEgyBzZSBkZXNjb3BlcmUsIHNhdSBOVUxMIHBlbnRydSBkb21lbml1bCBpbXBsaWNpdCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxOTYKK21zZ2lkICJTZXJ2aWNlIFR5cGUiCittc2dzdHIgIlRpcCBzZXJ2aWNpdSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxOTYKK21zZ2lkICJUaGUgc2VydmljZSB0eXBlIG9mIHRoZSBzZWxlY3RlZCBzZXJ2aWNlIgorbXNnc3RyICJUaXB1bCBzZXJ2aWNpdWx1aSBwZW50cnUgc2VydmljaXVsIHNlbGVjdGF0IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIwMiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjEwMjMKK21zZ2lkICJTZXJ2aWNlIE5hbWUiCittc2dzdHIgIk51bWUgc2VydmljaXUiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjAyCittc2dpZCAiVGhlIHNlcnZpY2UgbmFtZSBvZiB0aGUgc2VsZWN0ZWQgc2VydmljZSIKK21zZ3N0ciAiTnVtZWxlIHNlcnZpY2l1bHVpIHNlbGVjdGF0IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIwOAorbXNnaWQgIkFkZHJlc3MiCittc2dzdHIgIkFkcmVzxIMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjA4Cittc2dpZCAiVGhlIGFkZHJlc3Mgb2YgdGhlIHJlc29sdmVkIHNlcnZpY2UiCittc2dzdHIgIkFkcmVzYSBzZXJ2aWNpdWx1aSByZXpvbHZhdCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMTMKK21zZ2lkICJQb3J0IgorbXNnc3RyICJQb3J0IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIxMworbXNnaWQgIlRoZSBJUCBwb3J0IG51bWJlciBvZiB0aGUgcmVzb2x2ZWQgc2VydmljZSIKK21zZ3N0ciAiTnVtxINydWwgcG9ydHVsdWkgSVAgYWwgc2VydmljaXVsdWkgcmV6b2x2YXQiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjE5Cittc2dpZCAiSG9zdCBOYW1lIgorbXNnc3RyICJOdW1lIGdhemTEgyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMTkKK21zZ2lkICJUaGUgaG9zdCBuYW1lIG9mIHRoZSByZXNvbHZlZCBzZXJ2aWNlIgorbXNnc3RyICJOdW1lbGUgZGUgZ2F6ZMSDIGEgc2VydmljaXVsdWkgcmV6b2x2YXQiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjI1Cittc2dpZCAiVFhUIERhdGEiCittc2dzdHIgIkRhdGUgVFhUIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIyNQorbXNnaWQgIlRoZSBUWFQgZGF0YSBvZiB0aGUgcmVzb2x2ZWQgc2VydmljZSIKK21zZ3N0ciAiRGF0ZWxlIFRYVCBhIHNlcnZpY2l1bHVpIHJlem9sdmF0IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIzMAorIywgZnV6enkKK21zZ2lkICJSZXNvbHZlIFNlcnZpY2UiCittc2dzdHIgIlJlem9sdmFyZSBzZXJ2aWNpdSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMzAKK21zZ2lkICJSZXNvbHZlIHRoZSBzZWxlY3RlZCBzZXJ2aWNlIGF1dG9tYXRpY2FsbHkgYmVmb3JlIHJldHVybmluZyIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIzNgorIywgZnV6enkKK21zZ2lkICJSZXNvbHZlIFNlcnZpY2UgSG9zdCBOYW1lIgorbXNnc3RyICJSZXpvbHbEgyBudW1lIGRlIGdhemTEgyBhIHNlcnZpY2l1bHVpIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIzNgorbXNnaWQgIiIKKyJSZXNvbHZlIHRoZSBob3N0IG5hbWUgb2YgdGhlIHNlbGVjdGVkIHNlcnZpY2UgYXV0b21hdGljYWxseSBiZWZvcmUgcmV0dXJuaW5nIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjQyCittc2dpZCAiQWRkcmVzcyBmYW1pbHkiCittc2dzdHIgIkZhbWlsaWUgYWRyZXPEgyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyNDIKK21zZ2lkICJUaGUgYWRkcmVzcyBmYW1pbHkgZm9yIGhvc3QgbmFtZSByZXNvbHV0aW9uIgorbXNnc3RyICJGYW1pbGlhIGFkcmVzZWkgcGVudHJ1IHJlem9sdmFyZWEgbnVtZWx1aSBkZSBnYXpkxIMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MzI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWhpIGNsaWVudCBmYWlsdXJlOiAlcyIKK21zZ3N0ciAiQ2xpZW50dWwgQXZhaGkgYSBlyJl1YXQ6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjM4OAorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFoaSByZXNvbHZlciBmYWlsdXJlOiAlcyIKK21zZ3N0ciAiRXJvYXJlIHJlem9sdmFyZSBBdmFoaTogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyb3dzaW5nIGZvciBzZXJ2aWNlIHR5cGUgJXMgaW4gZG9tYWluICVzIGZhaWxlZDogJXMiCittc2dzdHIgIkPEg3V0YXJlYSBwZW50cnUgdGlwdWwgc2VydmljaXVsdWkgJXMgw65uIGRvbWVuaXVsICVzIGEgZciZdWF0OiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo1MTkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTY4CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoxNjkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTc4CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoxNzkKK21zZ2lkICJuL2EiCittc2dzdHIgIm4vYSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo2NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaGkgZG9tYWluIGJyb3dzZXIgZmFpbHVyZTogJXMiCittc2dzdHIgIk5hdmlnYXRvcnVsIGRvbWVuaXUgQXZhaGkgYSBlyJl1YXQ6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjY4NAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVhZCBBdmFoaSBkb21haW46ICVzIgorbXNnc3RyICLDjm5jZXJjYXJlIGRlIGNpdGlyZSBkb21lbml1IEF2YWhpIGXImXVhdMSDOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo3MDYKK21zZ2lkICJCcm93c2Ugc2VydmljZSB0eXBlIGxpc3QgaXMgZW1wdHkhIgorbXNnc3RyICJMaXN0YSB0aXB1bHVpIGRlIHNlcnZpY2kgZXN0ZSB2aWTEgyEiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjb25uZWN0IHRvIEF2YWhpIHNlcnZlcjogJXMiCittc2dzdHIgIkNvbmVjdGFyZWEgbGEgc2VydmVydWwgQXZhaGkgYSBlyJl1YXQ6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjczNQorbXNnaWQgIkJyb3dzaW5nIGZvciBzZXJ2aWNlcyBvbiA8Yj5sb2NhbCBuZXR3b3JrPC9iPjoiCittc2dzdHIgIk5hdmlnYXJlIHNlcnZpY2lpIMOubiA8Yj5yZcibZWEgbG9jYWzEgzwvYj46IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjczNworIywgYy1mb3JtYXQKK21zZ2lkICJCcm93c2luZyBmb3Igc2VydmljZXMgaW4gZG9tYWluIDxiPiVzPC9iPjoiCittc2dzdHIgIk5hdmlnYXJlIHNlcnZpY2lpIMOubiBkb21lbml1IDxiPiVzPC9iPjoiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NzczCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgYnJvd3NlciBmb3IgJXM6ICVzIgorbXNnc3RyICJDcmVhcmUgbmF2aWdhdG9yIGEgZciZdWF0IHBlbnRydSAlczogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6OTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgcmVzb2x2ZXIgZm9yICVzIG9mIHR5cGUgJXMgaW4gZG9tYWluICVzOiAlcyIKK21zZ3N0ciAiQSBlyJl1YXQgY3JlYXJlYSByZXNvbHZlci11bHVpIHBlbnRydSAlcyBkZSB0aXB1bCAlcyDDrm4gZG9tZW5pdWwgJXM6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjk3OAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGRvbWFpbiBicm93c2VyOiAlcyIKK21zZ3N0ciAiQ3JlYXJlIG5hdmlnYXRvciBkb21lbml1IGEgZciZdWF0OiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo5ODkKK21zZ2lkICJDaGFuZ2UgZG9tYWluIgorbXNnc3RyICJTY2hpbWLEgyBkb21lbml1IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjEwMzEgLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTYyCittc2dpZCAiQnJvd3NpbmcuLi4iCittc2dzdHIgIlNlIGRlc2NvcGVyxIMuLi4iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTEyMAorbXNnaWQgIkluaXRpYWxpemluZy4uLiIKK21zZ3N0ciAiU2UgaW5pyJtpYWxpemVhesSDLi4uIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNDQKK21zZ2lkICJMb2NhdGlvbiIKK21zZ3N0ciAiTG9jYcibaWUiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTE0OSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NTMKK21zZ2lkICJOYW1lIgorbXNnc3RyICJOdW1lIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNTQgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTUzCittc2dpZCAiVHlwZSIKK21zZ3N0ciAiVGlwIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNjYKK21zZ2lkICJfRG9tYWluLi4uIgorbXNnc3RyICJfRG9tZW5pdS4uLiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBbb3B0aW9uc11cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLXMgLS1zc2ggICAgICAgICAgICAgQnJvd3NlIFNTSCBzZXJ2ZXJzXG4iCisiICAgIC12IC0tdm5jICAgICAgICAgICAgIEJyb3dzZSBWTkMgc2VydmVyc1xuIgorIiAgICAtUyAtLXNoZWxsICAgICAgICAgICBCcm93c2UgYm90aCBTU0ggYW5kIFZOQ1xuIgorIiAgICAtZCAtLWRvbWFpbj1ET01BSU4gICBUaGUgZG9tYWluIHRvIGJyb3dzZSBpblxuIgorbXNnc3RyICIiCisiJXMgW29wyJtpdW5pXVxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBBZmnImWVhesSDIGFjZXN0IGFqdXRvclxuIgorIiAgICAtcyAtLXNzaCAgICAgICAgICAgICBOYXZpZ2FyZSBzZXJ2ZXJlIFNTSFxuIgorIiAgICAtdiAtLXZuYyAgICAgICAgICAgICBOYXZpZ2FyZSBzZXJ2ZXJlIFZOQ1xuIgorIiAgICAtUyAtLXNoZWxsICAgICAgICAgICBOYXZpZ2FyZSAgU1NIIMiZaSBWTkNcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgRG9tZW5pdWwgZGUgbmF2aWdhcmVcbiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjEwMSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo3NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG9vIG1hbnkgYXJndW1lbnRzXG4iCittc2dzdHIgIlByZWEgbXVsxaNpIHBhcmFtZXRyaVxuIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTQ5Cittc2dpZCAiQ2hvb3NlIFNoZWxsIFNlcnZlciIKK21zZ3N0ciAiQWxlZ2XIm2kgY29uc29sxIMgc2VydmVyIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTUxCittc2dpZCAiRGVza3RvcCIKK21zZ3N0ciAiRGVza3RvcCIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE1MgorbXNnaWQgIlRlcm1pbmFsIgorbXNnc3RyICJUZXJtaW5hbCIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE1NgorbXNnaWQgIkNob29zZSBWTkMgc2VydmVyIgorbXNnc3RyICJBbGVnZcibaSBzZXJ2ZXIgVk5DIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTYxCittc2dpZCAiQ2hvb3NlIFNTSCBzZXJ2ZXIiCittc2dzdHIgIkFsZWdlyJtpIHNlcnZlciBTU0giCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29ubmVjdGluZyB0byAnJXMnIC4uLlxuIgorbXNnc3RyICJTZSBjb25lY3RlYXrEgyBsYSDigJ4lc+KAnSAuLi5cbiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjI0MAorIywgYy1mb3JtYXQKK21zZ2lkICJleGVjbHAoKSBmYWlsZWQ6ICVzXG4iCittc2dzdHIgImV4ZWNscCgpIGEgZciZdWF0OiAlc1xuIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbmNlbGVkLlxuIgorbXNnc3RyICJBbnVsYXQuXG4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guZGVza3RvcC5pbi5pbi5oOjEKK21zZ2lkICJBdmFoaSBTU0ggU2VydmVyIEJyb3dzZXIiCittc2dzdHIgIk5hdmlnYXRvciBkZSBzZXJ2ZXJlIFNTSCBBdmFoaSIKKworIzogLi4vYXZhaGktdWkvYnNzaC5kZXNrdG9wLmluLmluLmg6MgorbXNnaWQgIkJyb3dzZSBmb3IgWmVyb2NvbmYtZW5hYmxlZCBTU0ggU2VydmVycyIKK21zZ3N0ciAiTmF2aWdoZWF6xIMgc2VydmVyZSBTU0ggYXbDom5kIGFjdGl2YXQgWmVyb2NvbmYiCisKKyM6IC4uL2F2YWhpLXVpL2J2bmMuZGVza3RvcC5pbi5pbi5oOjEKK21zZ2lkICJBdmFoaSBWTkMgU2VydmVyIEJyb3dzZXIiCittc2dzdHIgIk5hdmlnYXRvciBBdmFoaSBkZSBzZXJ2ZXIgVk5DIgorCisjOiAuLi9hdmFoaS11aS9idm5jLmRlc2t0b3AuaW4uaW4uaDoyCittc2dpZCAiQnJvd3NlIGZvciBaZXJvY29uZi1lbmFibGVkIFZOQyBTZXJ2ZXJzIgorbXNnc3RyICJOYXZpZ2hlesSDIHNlcnZlcmVsZSBWTkMgYXbDom5kIGFjdGl2YXQgWmVyb2NvbmYiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjEwNworIywgYy1mb3JtYXQKK21zZ2lkICI6IEFsbCBmb3Igbm93XG4iCittc2dzdHIgIjogRGVvY2FtZGF0xIMgYXTDonRcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIjogQ2FjaGUgZXhoYXVzdGVkXG4iCittc2dzdHIgIjogQ2FjaGUgZXB1aXphdFxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoyMzkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIHNlcnZpY2UgJyVzJyBvZiB0eXBlICclcycgaW4gZG9tYWluICclcyc6ICVzXG4iCittc2dzdHIgIiIKKyJBIGXImXVhdCByZXpvbHZhcmVhIHNlcnZpY2l1bHVpIOKAniVz4oCdIGRlIHRpcHVsIOKAniVz4oCdIGRpbiBkb21lbml1bCDigJ4lc+KAnTogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MzQwCisjLCBjLWZvcm1hdAorbXNnaWQgInNlcnZpY2VfYnJvd3NlciBmYWlsZWQ6ICVzXG4iCittc2dzdHIgInNlcnZpY2VfYnJvd3NlciBhIGXImXVhdDogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6Mzc4CisjLCBjLWZvcm1hdAorbXNnaWQgImF2YWhpX3NlcnZpY2VfYnJvd3Nlcl9uZXcoKSBmYWlsZWQ6ICVzXG4iCittc2dzdHIgImF2YWhpX3NlcnZpY2VfYnJvd3Nlcl9uZXcoKSBhIGXImXVhdDogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgInNlcnZpY2VfdHlwZV9icm93c2VyIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAic2VydmljZV90eXBlX2Jyb3dzZXIgYSBlyJl1YXQ6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjQ0NAorIywgYy1mb3JtYXQKK21zZ2lkICJhdmFoaV9zZXJ2aWNlX3R5cGVfYnJvd3Nlcl9uZXcoKSBmYWlsZWQ6ICVzXG4iCittc2dzdHIgImF2YWhpX3NlcnZpY2VfdHlwZV9icm93c2VyX25ldygpIGEgZciZdWF0OiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXZhaGlfZG9tYWluX2Jyb3dzZXJfbmV3KCkgZmFpbGVkOiAlc1xuIgorbXNnc3RyICJhdmFoaV9kb21haW5fYnJvd3Nlcl9uZXcoKSBhIGXImXVhdDogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTM1IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozOTQKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyODAgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE2OAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcXVlcnkgdmVyc2lvbiBzdHJpbmc6ICVzXG4iCittc2dzdHIgIkludGVyb2dhcmUgyJlpciB2ZXJzaXVuZSBlyJl1YXTEgzogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTQwIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozOTkKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyODUgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE3MworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcXVlcnkgaG9zdCBuYW1lOiAlc1xuIgorbXNnc3RyICJJbnRlcm9nYXJlIG51bWUgZ2F6ZMSDIGXImXVhdMSDOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NDQgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjQwMworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI4OSAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlcnZlciB2ZXJzaW9uOiAlczsgSG9zdCBuYW1lOiAlc1xuIgorbXNnc3RyICJWZXJzaXVuZSBzZXJ2ZXI6ICVzOyBOdW1lIHNlcnZlcjogJXNcbiIKKworIy4gVHJhbnNsYXRvcnM6IFRoaXMgaXMgYSBjb2x1bW4gaGVhZGluZyB3aXRoIGFiYnJldmlhdGlvbnMgZm9yCisjLiAqICAgRXZlbnQgKCsvLSksIE5ldHdvcmsgSW50ZXJmYWNlLCBQcm90b2NvbCAoSVB2NC92NiksIERvbWFpbgorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUgSWZjZSBQcm90IERvbWFpblxuIgorbXNnc3RyICJEb21lbml1IEUgSWZjZSBQcm90XG4iCisKKyMuIFRyYW5zbGF0b3JzOiBUaGlzIGlzIGEgY29sdW1uIGhlYWRpbmcgd2l0aCBhYmJyZXZpYXRpb25zIGZvcgorIy4gKiAgIEV2ZW50ICgrLy0pLCBOZXR3b3JrIEludGVyZmFjZSwgUHJvdG9jb2wgKElQdjQvdjYpLCBEb21haW4KKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU1MworIywgYy1mb3JtYXQKK21zZ2lkICJFIElmY2UgUHJvdCAlLSpzICUtMjBzIERvbWFpblxuIgorbXNnc3RyICJEb21lbml1IEUgSWZjZSBQcm90ICUtKnMgJS0yMHNcbiIKKworIy4gV2UgaGF2ZSBiZWVuIGRpc2Nvbm5lY3RlZCwgc28gbGV0IHJlY29ubmVjdAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTg1IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGlzY29ubmVjdGVkLCByZWNvbm5lY3RpbmcgLi4uXG4iCittc2dzdHIgIkRlY29uZWN0YXQsIHNlIHJlY29uZWN0ZWF6xIMuLi5cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTk5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjgyOQorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE3MCAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6Mzg2CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjcyIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBjbGllbnQgb2JqZWN0OiAlc1xuIgorbXNnc3RyICJDcmVhcmVhIG9iaWVjdHVsdWkgY2xpZW50IGEgZciZdWF0OiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo2MDQgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE3NQorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjE0MyAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xpZW50IGZhaWx1cmUsIGV4aXRpbmc6ICVzXG4iCittc2dzdHIgIkNsaWVudHVsIGEgZciZdWF0LCBpZciZaXJlOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo2MjMgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjIwNgorIywgYy1mb3JtYXQKK21zZ2lkICJXYWl0aW5nIGZvciBkYWVtb24gLi4uXG4iCittc2dzdHIgIlNlIGHImXRlYXB0xIMgcGVudHJ1IHNlcnZpY2l1Li4uXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjY0NworbXNnaWQgIiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgU2hvdyB2ZXJzaW9uXG4iCisiICAgIC1EIC0tYnJvd3NlLWRvbWFpbnMgIEJyb3dzZSBmb3IgYnJvd3NpbmcgZG9tYWlucyBpbnN0ZWFkIG9mIHNlcnZpY2VzXG4iCisiICAgIC1hIC0tYWxsICAgICAgICAgICAgIFNob3cgYWxsIHNlcnZpY2VzLCByZWdhcmRsZXNzIG9mIHRoZSB0eXBlXG4iCisiICAgIC1kIC0tZG9tYWluPURPTUFJTiAgIFRoZSBkb21haW4gdG8gYnJvd3NlIGluXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKKyIgICAgLXQgLS10ZXJtaW5hdGUgICAgICAgVGVybWluYXRlIGFmdGVyIGR1bXBpbmcgYSBtb3JlIG9yIGxlc3MgY29tcGxldGUgIgorImxpc3RcbiIKKyIgICAgLWMgLS1jYWNoZSAgICAgICAgICAgVGVybWluYXRlIGFmdGVyIGR1bXBpbmcgYWxsIGVudHJpZXMgZnJvbSB0aGUgY2FjaGVcbiIKKyIgICAgLWwgLS1pZ25vcmUtbG9jYWwgICAgSWdub3JlIGxvY2FsIHNlcnZpY2VzXG4iCisiICAgIC1yIC0tcmVzb2x2ZSAgICAgICAgIFJlc29sdmUgc2VydmljZXMgZm91bmRcbiIKKyIgICAgLWYgLS1uby1mYWlsICAgICAgICAgRG9uJ3QgZmFpbCBpZiB0aGUgZGFlbW9uIGlzIG5vdCBhdmFpbGFibGVcbiIKKyIgICAgLXAgLS1wYXJzYWJsZSAgICAgICAgT3V0cHV0IGluIHBhcnNhYmxlIGZvcm1hdFxuIgorbXNnc3RyICIiCisiICAgIC1oIC0taGVscCBBZmnImWVhesSDIGFjZXN0IGFqdXRvclxuIgorIiAgICAtViAtLXZlcnNpb24gQWZpyJllYXrEgyB2ZXJzaXVuaWFcbiIKKyIgICAgLUQgLS1icm93c2UtZG9tYWlucyAgTmF2aWdhcmUgZG9tZW5paSBkZSBuYXZpZ2FyZSDDrm4gbG9jIGRlIHNlcnZpY2lpXG4iCisiICAgIC1hIC0tYWxsIEFmaciZZWF6xIMgdG9hdGUgc2VydmljaWlsZSwgaW5kaWZlcmVudCBkZSB0aXBcbiIKKyIgICAgLWQgLS1kb21haW49RE9NRU5JVSBEb21lbml1bCBwZW50cnUgbmF2aWdhcmVcbiIKKyIgICAgLXYgLS12ZXJib3NlIEFjdGl2YXJlIG1vZHVsIGRldGFsaWF0XG4iCisiICAgIC10IC0tdGVybWluYXRlIFRlcm1pbsSDIGR1cMSDIGFmaciZYXJlYSB1bmVpIGxpc3RlIG1haSBtdWx0IHNhdSBtYWkgcHXIm2luICIKKyJjb21wbGV0ZVxuIgorIiAgICAtYyAtLWNhY2hlIFRlcm1pbsSDIGR1cMSDIGFmaciZYXJlYSB0dXR1cm9yIMOubnRyxINyaWxvciBkaW4gY2FjaGVcbiIKKyIgICAgLWwgLS1pZ25vcmUtbG9jYWwgSWdub3JhcmUgc2VydmljaWkgbG9jYWxlXG4iCisiICAgIC1yIC0tcmVzb2x2ZSBSZXpvbHbEgyBzZXJ2aWNpaWxlIGfEg3NpdGVcbiIKKyIgICAgLWYgLS1uby1mYWlsIE51IGXImXVhIGRhY8SDIHNlcnZpY2l1bCBudSBlc3RlIGRpc3BvbmliaWxcbiIKKyIgICAgLXAgLS1wYXJzYWJsZSBJZciZaXJlIMOubiBmb3JtYXQgcHJlbHVjcmFiaWxcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NjYwCittc2dpZCAiIgorIiAgICAtayAtLW5vLWRiLWxvb2t1cCAgICBEb24ndCBsb29rdXAgc2VydmljZSB0eXBlc1xuIgorIiAgICAtYiAtLWR1bXAtZGIgICAgICAgICBEdW1wIHNlcnZpY2UgdHlwZSBkYXRhYmFzZVxuIgorbXNnc3RyICIiCisiICAgIC1rIC0tLW5vLWRiLWxvb2t1cCBOdSBjxIN1dGEgdGlwdXJpIGRlIHNlcnZpY2lpXG4iCisiICAgIC1iIC0tZHVtcC1kYiBBcmF0xIMgYmF6YSBkZSBkYXRlIHRpcCBzZXJ2aWNpdVxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo3NjYgLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjIxOQorIywgYy1mb3JtYXQKK21zZ2lkICJUb28gZmV3IGFyZ3VtZW50c1xuIgorbXNnc3RyICJQcmVhIHB1yJtpbmkgcGFyYW1ldHJpaVxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo4MjEgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjM3OAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI2NCAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgc2ltcGxlIHBvbGwgb2JqZWN0LlxuIgorbXNnc3RyICJDcmVhcmUgb2JpZWN0IGludGVyb2dhcmUgZciZdWF0xIMuXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo3NgorIywgYy1mb3JtYXQKK21zZ2lkICJFc3RhYmxpc2hlZCB1bmRlciBuYW1lICclcydcbiIKK21zZ3N0ciAiU3ViIG51bWUgc3RhYmlsaXQg4oCeJXPigJ1cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlcjogJXNcbiIKK21zZ3N0ciAiw45ucmVnaXN0cmFyZSBlyJl1YXTEgzogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIk5hbWUgY29sbGlzaW9uLCBwaWNraW5nIG5ldyBuYW1lICclcycuXG4iCittc2dzdHIgIkNvbG96aXVuZSBkZSBudW1lLCBzZSBhbGVnZSBudW1lIG5vdSDigJ4lc+KAnS5cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGVudHJ5IGdyb3VwOiAlc1xuIgorbXNnc3RyICJDcmVhcmUgaW50cmFyZSBncnVwIGXImXVhdMSDOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgYWRkcmVzczogJXNcbiIKK21zZ3N0ciAiQWTEg3VnYXJlIGFkcmVzxIMgZciZdWF0xIM6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBzZXJ2aWNlOiAlc1xuIgorbXNnc3RyICJBZMSDdWdhcmUgc2VydmljaXUgZciZdWF0xIM6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBzdWJ0eXBlICclcyc6ICVzXG4iCittc2dzdHIgIkFkxIN1Z2FyZSBzdWJ0aXAg4oCeJXPigJ0gZciZdWF0xIM6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiSG9zdCBuYW1lIGNvbmZsaWN0XG4iCittc2dzdHIgIkNvbmZsaWN0IG51bWUgZ2F6ZMSDXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoyMTYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBbb3B0aW9uc10gJXMgPG5hbWU+IDx0eXBlPiA8cG9ydD4gWzx0eHQgLi4uPl1cbiIKKyIlcyBbb3B0aW9uc10gJXMgPGhvc3QtbmFtZT4gPGFkZHJlc3M+XG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFNob3cgdmVyc2lvblxuIgorIiAgICAtcyAtLXNlcnZpY2UgICAgICAgICBQdWJsaXNoIHNlcnZpY2VcbiIKKyIgICAgLWEgLS1hZGRyZXNzICAgICAgICAgUHVibGlzaCBhZGRyZXNzXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgRG9tYWluIHRvIHB1Ymxpc2ggc2VydmljZSBpblxuIgorIiAgICAtSCAtLWhvc3Q9RE9NQUlOICAgICBIb3N0IHdoZXJlIHNlcnZpY2UgcmVzaWRlc1xuIgorIiAgICAgICAtLXN1YnR5cGU9U1VCVFlQRSBBbiBhZGRpdGlvbmFsIHN1YnR5cGUgdG8gcmVnaXN0ZXIgdGhpcyBzZXJ2aWNlICIKKyJ3aXRoXG4iCisiICAgIC1SIC0tbm8tcmV2ZXJzZSAgICAgIERvIG5vdCBwdWJsaXNoIHJldmVyc2UgZW50cnkgd2l0aCBhZGRyZXNzXG4iCisiICAgIC1mIC0tbm8tZmFpbCAgICAgICAgIERvbid0IGZhaWwgaWYgdGhlIGRhZW1vbiBpcyBub3QgYXZhaWxhYmxlXG4iCittc2dzdHIgIiIKKyIlcyBbb3DIm2l1bmldICVzIDxudW1lPiA8dGlwPiA8cG9ydD4gWzx0eHQgLi4uPl1cbiIKKyIlcyBbb3DIm2l1bmldICVzIDxudW1lLWdhemTEgz4gPGFkcmVzxIM+XG4iCisiXG4iCisiICAgIC1oIC0taGVscCBBZmnImWFyZWEgYWNlc3R1aSBhanV0b3JcbiIKKyIgICAgLVYgLS12ZXJzaW9uIEFmaciZYXJlIHZlcnNpdW5pXG4iCisiICAgIC1zIC0tc2VydmljZSBQdWJsaWNhcmUgc2VydmljaXVcbiIKKyIgICAgLWEgLS1hZGRyZXNzIFB1YmxpY2FyZSBhZHJlc8SDXG4iCisiICAgIC12IC0tdmVyYm9zZSBBY3RpdmFyZSBtb2QgZGV0YWxpYXRcbiIKKyIgICAgLWQgLS1kb21haW49RE9NRU5JVSBEb21lbml1IHBlbnRydSBwdWJsaWNhcmUgc2VydmljaXVcbiIKKyIgICAgLUggLS1ob3N0PURPTUVOSVUgIEdhemRhIHNlcnZpY2l1bHVpXG4iCisiICAgICAgIC0tc3VidHlwZT1TVUJUSVAgU3VidGlwIGFkacibaW9uYWx0IHBlbnRydSDDrm5yZWdpc3RyYXJlIHNlcnZpY2l1XG4iCisiICAgIC1mIC0tbm8tZmFpbCAgTnUgZciZdWEgZGFjxIMgc2VydmljaXVsIG51IGVzdGUgZGlzcG9uaWJpbFxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MzAzIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIG51bWJlciBvZiBhcmd1bWVudHNcbiIKK21zZ3N0ciAiTnVtxINyIGluY29yZWN0IGRlIHBhcmFtZXRyaVxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBwb3J0IG51bWJlcjogJXNcbiIKK21zZ3N0ciAiUHJlbHVjcmFyZSBudW3Eg3IgcG9ydCBlyJl1YXTEgzogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjM2MSAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGNvbW1hbmQgc3BlY2lmaWVkLlxuIgorbXNnc3RyICJOaWNpIG8gY29tYW5kxIMgc3BlY2lmaWNhdMSDLlxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgaG9zdCBuYW1lICclcyc6ICVzXG4iCittc2dzdHIgIlJlem9sdmFyZSBudW1lIGNhbGN1bGF0b3IgZ2F6ZMSDIOKAniVz4oCdIGEgZciZdWF0OiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIGFkZHJlc3MgJyVzJzogJXNcbiIKK21zZ3N0ciAiUmV6b2x2YXJlIGFkcmVzxIMg4oCeJXPigJ0gZciZdWF0xIM6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoxNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFtvcHRpb25zXSAlcyA8aG9zdCBuYW1lIC4uLj5cbiIKKyIlcyBbb3B0aW9uc10gJXMgPGFkZHJlc3MgLi4uID5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgU2hvdyB2ZXJzaW9uXG4iCisiICAgIC1uIC0tbmFtZSAgICAgICAgICAgIFJlc29sdmUgaG9zdCBuYW1lXG4iCisiICAgIC1hIC0tYWRkcmVzcyAgICAgICAgIFJlc29sdmUgYWRkcmVzc1xuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBFbmFibGUgdmVyYm9zZSBtb2RlXG4iCisiICAgIC02ICAgICAgICAgICAgICAgICAgIExvb2t1cCBJUHY2IGFkZHJlc3NcbiIKKyIgICAgLTQgICAgICAgICAgICAgICAgICAgTG9va3VwIElQdjQgYWRkcmVzc1xuIgorbXNnc3RyICIiCisiJXMgW29wyJtpdW5pXSAlcyA8bnVtZSBnYXpkxIMgLi4uPlxuIgorIiVzIFtvcMibaXVuaV0gJXMgPGFkcmVzxIMgLi4uID5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgICBBZmnImWVhesSDIGFjZXN0IGFqdXRvclxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBBZmnImWVhesSDIHZlcnNpdW5lXG4iCisiICAgIC1uIC0tbmFtZSAgICAgICAgICAgIFJlem9sdmFyZSBudW1lIGRvbWVuaXVcbiIKKyIgICAgLWEgLS1hZGRyZXNzICAgICAgICAgUmV6b2x2YXJlIGFkcmVzxINcbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgQWN0aXZhcmUgbW9kIGRldGFsaWF0XG4iCisiICAgIC02ICAgICAgICAgICAgICAgICAgIEPEg3V0YXJlIGFkcmVzxIMgSVB2NlxuIgorIiAgICAtNCAgICAgICAgICAgICAgICAgICBDxIN1dGFyZSBhZHJlc8SDIElQdjRcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI5OSAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgaG9zdCBuYW1lIHJlc29sdmVyOiAlc1xuIgorbXNnc3RyICJBIGXImXVhdCBjcmVhcmVhIHJlem9sdmF0b3J1bHVpIGRlIG51bWU6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzozMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIGFkZHJlc3MgJyVzJ1xuIgorbXNnc3RyICJQcmVsdWNyYXJlIGFkcmVzxIMg4oCeJXPigJ0gZciZdWF0xINcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjMxNAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGFkZHJlc3MgcmVzb2x2ZXI6ICVzXG4iCittc2dzdHIgIkEgZciZdWF0IGNyZWFyZWEgcmV6b2x2YXRvcnVsdWkgZGUgYWRyZXPEgzogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBbb3B0aW9uc10gPG5ldyBob3N0IG5hbWU+XG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFNob3cgdmVyc2lvblxuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBFbmFibGUgdmVyYm9zZSBtb2RlXG4iCittc2dzdHIgIiIKKyIlcyBbb3DIm2l1bmldIDxub3UgbnVtZSBjYWxjdWxhdG9yPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBBZmnImWVhesSDIGFjZXN0IGFqdXRvclxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBBZmnImWVhesSDIHZlcnNpdW5lYVxuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBBY3RpdmVhesSDIG1vZCBkZXRhbGlhdFxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cywgZXhwZWN0aW5nIGV4YWN0bHkgb25lLlxuIgorbXNnc3RyICJOdW3Eg3J1bCBkZSBwYXJhbWV0cmkgbnUgZXN0ZSB2YWxpZC4gU2UgYciZdGVhcHTEgyB1bnVsIHNpbmd1ci5cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE5MworIywgYy1mb3JtYXQKK21zZ2lkICJIb3N0IG5hbWUgc3VjY2Vzc2Z1bGx5IGNoYW5nZWQgdG8gJXNcbiIKK21zZ3N0ciAiTnVtZWxlIGdhemRlaSBhIGZvc3QgbW9kaWZpY2F0IMOubiAlc1xuIgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL3BvL3J1LnBvIGIvYXZhaGktMC42LjMxL3BvL3J1LnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwZTgwMTMKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvcG8vcnUucG8KQEAgLTAsMCArMSw4NTUgQEAKKyMgUnVzc2lhbiB0cmFuc2xhdGlvbiBmb3IgYXZhaGkKKyMgQ29weXJpZ2h0IChjKSAyMDA4IFJvc2V0dGEgQ29udHJpYnV0b3JzIGFuZCBDYW5vbmljYWwgTHRkIDIwMDgKKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGF2YWhpIHBhY2thZ2UuCisjCisjIEZJUlNUIEFVVEhPUiA8RU1BSUxAQUREUkVTUz4sIDIwMDguCisjIFl1cmkgS296bG92IDx5dXJheUBrb215YWtpbm8ucnU+LCAyMDEwLgorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogYXZhaGlcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTEtMDQtMDIgMDM6MjMrMDIwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTAtMDgtMTUgMTM6MTYrMDQwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogWXVyaSBLb3psb3YgPHl1cmF5QGtvbXlha2luby5ydT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBSdXNzaWFuIDxkZWJpYW4tbDEwbi1ydXNzaWFuQGxpc3RzLmRlYmlhbi5vcmc+XG4iCisiTGFuZ3VhZ2U6IHJ1XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiWC1MYXVuY2hwYWQtRXhwb3J0LURhdGU6IDIwMDgtMDQtMDEgMDQ6MzIrMDAwMFxuIgorIlgtR2VuZXJhdG9yOiBMb2thbGl6ZSAxLjBcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTM7IHBsdXJhbD0obiUxMD09MSAmJiBuJTEwMCE9MTEgPyAwIDogbiUxMD49MiAmJiBuIgorIiUxMDw9NCAmJiAobiUxMDA8MTAgfHwgbiUxMDA+PTIwKSA/IDEgOiAyKTtcbiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzAKK21zZ2lkICJPSyIKK21zZ3N0ciAi0J7QmiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzEKK21zZ2lkICJPcGVyYXRpb24gZmFpbGVkIgorbXNnc3RyICLQodCx0L7QuSDQvtC/0LXRgNCw0YbQuNC4IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozMgorbXNnaWQgIkJhZCBzdGF0ZSIKK21zZ3N0ciAi0J3QtdCy0LXRgNC90L7QtSDRgdC+0YHRgtC+0Y/QvdC40LUiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjMzCittc2dpZCAiSW52YWxpZCBob3N0IG5hbWUiCittc2dzdHIgItCd0LXQstC10YDQvdC+0LUg0LjQvNGPINGD0LfQu9CwIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozNAorbXNnaWQgIkludmFsaWQgZG9tYWluIG5hbWUiCittc2dzdHIgItCd0LXQstC10YDQvdC+0LUg0LjQvNGPINC00L7QvNC10L3QsCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzUKK21zZ2lkICJObyBzdWl0YWJsZSBuZXR3b3JrIHByb3RvY29sIGF2YWlsYWJsZSIKK21zZ3N0ciAi0J3QtSDQvdCw0LnQtNC10L0g0L/QvtC00YXQvtC00Y/RidC40Lkg0YHQtdGC0LXQstC+0Lkg0L/RgNC+0YLQvtC60L7QuyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzYKK21zZ2lkICJJbnZhbGlkIEROUyBUVEwiCittc2dzdHIgItCd0LXQstC10YDQvdGL0LkgVFRMIEROUyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzcKK21zZ2lkICJSZXNvdXJjZSByZWNvcmQga2V5IGlzIHBhdHRlcm4iCittc2dzdHIgItCa0LvRjtGHINC30LDQv9C40YHQuCDRgNC10YHRg9GA0YHQsCDRj9Cy0LvRj9C10YLRgdGPINGI0LDQsdC70L7QvdC+0LwiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM4Cittc2dpZCAiTG9jYWwgbmFtZSBjb2xsaXNpb24iCittc2dzdHIgItCf0LXRgNC10LrRgNGL0YLQuNC1INC70L7QutCw0LvRjNC90YvRhSDQuNC80ZHQvSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzkKK21zZ2lkICJJbnZhbGlkIHJlY29yZCIKK21zZ3N0ciAi0J3QtdCy0LXRgNC90LDRjyDQt9Cw0L/QuNGB0YwiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQxCittc2dpZCAiSW52YWxpZCBzZXJ2aWNlIG5hbWUiCittc2dzdHIgItCd0LXQstC10YDQvdC+0LUg0LjQvNGPINGB0LvRg9C20LHRiyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDIKK21zZ2lkICJJbnZhbGlkIHNlcnZpY2UgdHlwZSIKK21zZ3N0ciAi0J3QtdCy0LXRgNC90YvQuSDRgtC40L8g0YHQu9GD0LbQsdGLIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0MworbXNnaWQgIkludmFsaWQgcG9ydCBudW1iZXIiCittc2dzdHIgItCd0LXQstC10YDQvdGL0Lkg0L3QvtC80LXRgCDQv9C+0YDRgtCwIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NAorbXNnaWQgIkludmFsaWQgcmVjb3JkIGtleSIKK21zZ3N0ciAi0J3QtdCy0LXRgNC90YvQuSDQutC70Y7RhyDQt9Cw0L/QuNGB0LgiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQ1Cittc2dpZCAiSW52YWxpZCBhZGRyZXNzIgorbXNnc3RyICLQndC10LLQtdGA0L3Ri9C5INCw0LTRgNC10YEiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQ2Cittc2dpZCAiVGltZW91dCByZWFjaGVkIgorbXNnc3RyICLQktGA0LXQvNGPINC+0LbQuNC00LDQvdC40Y8g0LjRgdGC0LXQutC70L4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQ3Cittc2dpZCAiVG9vIG1hbnkgY2xpZW50cyIKK21zZ3N0ciAi0KHQu9C40YjQutC+0Lwg0LzQvdC+0LPQviDQutC70LjQtdC90YLQvtCyIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0OAorbXNnaWQgIlRvbyBtYW55IG9iamVjdHMiCittc2dzdHIgItCh0LvQuNGI0LrQvtC8INC80L3QvtCz0L4g0L7QsdGK0LXQutGC0L7QsiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDkKK21zZ2lkICJUb28gbWFueSBlbnRyaWVzIgorbXNnc3RyICLQodC70LjRiNC60L7QvCDQvNC90L7Qs9C+INGN0LvQtdC80LXQvdGC0L7QsiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTAKK21zZ2lkICJPUyBFcnJvciIKK21zZ3N0ciAi0J7RiNC40LHQutCwINCe0KEiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjUyCittc2dpZCAiQWNjZXNzIGRlbmllZCIKK21zZ3N0ciAi0JTQvtGB0YLRg9C/INC30LDQv9GA0LXRidGR0L0iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjUzCittc2dpZCAiSW52YWxpZCBvcGVyYXRpb24iCittc2dzdHIgItCd0LXQstC10YDQvdCw0Y8g0L7Qv9C10YDQsNGG0LjRjyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTQKK21zZ2lkICJBbiB1bmV4cGVjdGVkIEQtQnVzIGVycm9yIG9jY3VyZWQiCittc2dzdHIgItCd0LXQvtC20LjQtNCw0L3QvdCw0Y8g0L7RiNC40LHQutCwIEQtQnVzIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1NQorbXNnaWQgIkRhZW1vbiBjb25uZWN0aW9uIGZhaWxlZCIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDRgdC+0LXQtNC40L3QuNGC0YzRgdGPINGB0L4g0YHQu9GD0LbQsdC+0LkiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU2Cittc2dpZCAiTWVtb3J5IGV4aGF1c3RlZCIKK21zZ3N0ciAi0J/QsNC80Y/RgtGMINC40YHRh9C10YDQv9Cw0L3QsCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTcKK21zZ2lkICJUaGUgb2JqZWN0IHBhc3NlZCBpbiB3YXMgbm90IHZhbGlkIgorbXNnc3RyICLQn9C10YDQtdC00LDQvdC90YvQuSDQvtCx0YrQtdC60YIg0L3QtdC00LXQudGB0YLQstC40YLQtdC70LXQvSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTgKK21zZ2lkICJEYWVtb24gbm90IHJ1bm5pbmciCittc2dzdHIgItCh0LvRg9C20LHQsCDQvdC1INC30LDQv9GD0YnQtdC90LAiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU5Cittc2dpZCAiSW52YWxpZCBpbnRlcmZhY2UgaW5kZXgiCittc2dzdHIgItCd0LXQstC10YDQvdGL0Lkg0LjQvdC00LXQutGBINC40L3RgtC10YDRhNC10LnRgdCwIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2MAorbXNnaWQgIkludmFsaWQgcHJvdG9jb2wgc3BlY2lmaWNhdGlvbiIKK21zZ3N0ciAi0J3QtdCy0LXRgNC90LDRjyDRgdC/0LXRhtC40YTQuNC60LDRhtC40Y8g0L/RgNC+0YLQvtC60L7Qu9CwIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2MQorbXNnaWQgIkludmFsaWQgZmxhZ3MiCittc2dzdHIgItCd0LXQstC10YDQvdGL0LUg0YTQu9Cw0LPQuCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjMKK21zZ2lkICJOb3QgZm91bmQiCittc2dzdHIgItCd0LUg0L3QsNC50LTQtdC9IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2NAorbXNnaWQgIkludmFsaWQgY29uZmlndXJhdGlvbiIKK21zZ3N0ciAi0J3QtdCy0LXRgNC90LDRjyDQutC+0L3RhNC40LPRg9GA0LDRhtC40Y8iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY1Cittc2dpZCAiVmVyc2lvbiBtaXNtYXRjaCIKK21zZ3N0ciAi0J3QtdGB0L7QvtGC0LLQtdGC0YHRgtCy0LjQtSDQstC10YDRgdC40LkiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY2Cittc2dpZCAiSW52YWxpZCBzZXJ2aWNlIHN1YnR5cGUiCittc2dzdHIgItCd0LXQstC10YDQvdGL0Lkg0L/QvtC00YLQuNC/INGB0LvRg9C20LHRiyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjcKK21zZ2lkICJJbnZhbGlkIHBhY2tldCIKK21zZ3N0ciAi0J3QtdCy0LXRgNC90YvQuSDQv9Cw0LrQtdGCIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2OAorbXNnaWQgIkludmFsaWQgRE5TIHJldHVybiBjb2RlIgorbXNnc3RyICLQndC10LLQtdGA0L3Ri9C5INC60L7QtCDQstC+0LfQstGA0LDRgtCwIEROUyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjkKK21zZ2lkICJETlMgZmFpbHVyZTogRk9STUVSUiIKK21zZ3N0ciAi0J7RiNC40LHQutCwIEROUzogRk9STUVSUiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzAKK21zZ2lkICJETlMgZmFpbHVyZTogU0VSVkZBSUwiCittc2dzdHIgItCe0YjQuNCx0LrQsCBETlM6IFNFUlZGQUlMIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3MQorbXNnaWQgIkROUyBmYWlsdXJlOiBOWERPTUFJTiIKK21zZ3N0ciAi0J7RiNC40LHQutCwIEROUzogTlhET01BSU4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjcyCittc2dpZCAiRE5TIGZhaWx1cmU6IE5PVElNUCIKK21zZ3N0ciAi0J7RiNC40LHQutCwIEROUzogTk9USU1QIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3NAorbXNnaWQgIkROUyBmYWlsdXJlOiBSRUZVU0VEIgorbXNnc3RyICLQntGI0LjQsdC60LAgRE5TOiBSRUZVU0VEIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3NQorbXNnaWQgIkROUyBmYWlsdXJlOiBZWERPTUFJTiIKK21zZ3N0ciAi0J7RiNC40LHQutCwIEROUzogWVhET01BSU4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc2Cittc2dpZCAiRE5TIGZhaWx1cmU6IFlYUlJTRVQiCittc2dzdHIgItCe0YjQuNCx0LrQsCBETlM6IFlYUlJTRVQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc3Cittc2dpZCAiRE5TIGZhaWx1cmU6IE5YUlJTRVQiCittc2dzdHIgItCe0YjQuNCx0LrQsCBETlM6IE5YUlJTRVQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc4Cittc2dpZCAiRE5TIGZhaWx1cmU6IE5PVEFVVEgiCittc2dzdHIgItCe0YjQuNCx0LrQsCBETlM6IE5PVEFVVEgiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc5Cittc2dpZCAiRE5TIGZhaWx1cmU6IE5PVFpPTkUiCittc2dzdHIgItCe0YjQuNCx0LrQsCBETlM6IE5PVFpPTkUiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjgwCittc2dpZCAiSW52YWxpZCBSREFUQSIKK21zZ3N0ciAi0J3QtdCy0LXRgNC90YvQuSDRhNC+0YDQvNCw0YIgUkRBVEEiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjgxCittc2dpZCAiSW52YWxpZCBETlMgdHlwZSIKK21zZ3N0ciAi0J3QtdCy0LXRgNC90YvQuSDRgtC40L8gRE5TIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4MgorbXNnaWQgIkludmFsaWQgRE5TIGNsYXNzIgorbXNnc3RyICLQndC10LLQtdGA0L3Ri9C5INC60LvQsNGB0YEgRE5TIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4MworbXNnaWQgIk5vdCBzdXBwb3J0ZWQiCittc2dzdHIgItCd0LUg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGC0YHRjyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODUKK21zZ2lkICJOb3QgcGVybWl0dGVkIgorbXNnc3RyICLQndC1INGA0LDQt9GA0LXRiNC10L3QviIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODYKK21zZ2lkICJJbnZhbGlkIGFyZ3VtZW50IgorbXNnc3RyICLQndC10LLQtdGA0L3Ri9C5INCw0YDQs9GD0LzQtdC90YIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjg3Cittc2dpZCAiSXMgZW1wdHkiCittc2dzdHIgItCf0YPRgdGC0LDRjyDQs9GA0YPQv9C/0LAiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjg4Cittc2dpZCAiVGhlIHJlcXVlc3RlZCBvcGVyYXRpb24gaXMgaW52YWxpZCBiZWNhdXNlIHJlZHVuZGFudCIKK21zZ3N0ciAi0JfQsNC/0YDQvtGI0LXQvdC90LDRjyDQvtC/0LXRgNCw0YbQuNGPINC90LXQstC10YDQvdCwLCDQv9C+0YHQutC+0LvRjNC60YMg0Y/QstC70Y/QtdGC0YHRjyDQuNC30LvQuNGI0L3QtdC5IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo5NAorbXNnaWQgIkludmFsaWQgRXJyb3IgQ29kZSIKK21zZ3N0ciAi0J3QtdCy0LXRgNC90YvQuSDQutC+0LQg0L7RiNC40LHQutC4IgorCisjOiAuLi9hdmFoaS1kaXNjb3Zlci1zdGFuZGFsb25lL2F2YWhpLWRpc2NvdmVyLnVpLmg6MQorIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5Ojc2Cittc2dpZCAiPGk+Tm8gc2VydmljZSBjdXJyZW50bHkgc2VsZWN0ZWQuPC9pPiIKK21zZ3N0ciAiPGk+0KHQu9GD0LbQsdCwINC90LUg0LLRi9Cx0YDQsNC90LAuPC9pPiIKKworIzogLi4vYXZhaGktZGlzY292ZXItc3RhbmRhbG9uZS9hdmFoaS1kaXNjb3Zlci51aS5oOjIKK21zZ2lkICJBdmFoaSBEaXNjb3ZlcnkiCittc2dzdHIgIkF2YWhpIERpc2NvdmVyeSIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLmRlc2t0b3AuaW4uaW4uaDoxCittc2dpZCAiQXZhaGkgWmVyb2NvbmYgQnJvd3NlciIKK21zZ3N0ciAi0J7QsdC+0LfRgNC10LLQsNGC0LXQu9GMIEF2YWhpIFplcm9jb25mIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIuZGVza3RvcC5pbi5pbi5oOjIKK21zZ2lkICJCcm93c2UgZm9yIFplcm9jb25mIHNlcnZpY2VzIGF2YWlsYWJsZSBvbiB5b3VyIG5ldHdvcmsiCittc2dzdHIgItCf0L7QuNGB0Log0YHQu9GD0LbQsSBaZXJvY29uZiDQsiDQu9C+0LrQsNC70YzQvdC+0Lkg0YHQtdGC0LgiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMjQKK21zZ2lkICJUWFQiCittc2dzdHIgIlRYVCIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIyNgorbXNnaWQgIlRYVCBEYXRhOiIKK21zZ3N0ciAi0JTQsNC90L3Ri9C1IFRYVDoiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMjYKK21zZ2lkICJlbXB0eSIKK21zZ3N0ciAi0L/Rg9GB0YLQviIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIyOAorbXNnaWQgIlNlcnZpY2UgVHlwZToiCittc2dzdHIgItCi0LjQvyDRgdC70YPQttCx0Ys6IgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI5Cittc2dpZCAiU2VydmljZSBOYW1lOiIKK21zZ3N0ciAi0JjQvNGPINGB0LvRg9C20LHRizoiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMzAKK21zZ2lkICJEb21haW4gTmFtZToiCittc2dzdHIgItCd0LDQt9Cy0LDQvdC40LUg0LTQvtC80LXQvdCwOiIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIzMQorbXNnaWQgIkludGVyZmFjZToiCittc2dzdHIgItCY0L3RgtC10YDRhNC10LnRgToiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMzIKK21zZ2lkICJBZGRyZXNzOiIKK21zZ3N0ciAi0JDQtNGA0LXRgToiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTg1Cittc2dpZCAiQnJvd3NlIFNlcnZpY2UgVHlwZXMiCittc2dzdHIgItCi0LjQv9GLINC40YHQutC+0LzRi9GFINGB0LvRg9C20LEiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTg1Cittc2dpZCAiQSBOVUxMIHRlcm1pbmF0ZWQgbGlzdCBvZiBzZXJ2aWNlIHR5cGVzIHRvIGJyb3dzZSBmb3IiCittc2dzdHIgItCh0L/QuNGB0L7QuiDRgtC40L/QvtCyINC40YHQutC+0LzRi9GFINGB0LvRg9C20LEsINC30LDQstC10YDRiNCw0Y7RidC40LnRgdGPIE5VTEwiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTkwCittc2dpZCAiRG9tYWluIgorbXNnc3RyICLQlNC+0LzQtdC9IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE5MAorbXNnaWQgIlRoZSBkb21haW4gdG8gYnJvd3NlIGluLCBvciBOVUxMIGZvciB0aGUgZGVmYXVsdCBkb21haW4iCittc2dzdHIgItCU0L7QvNC10L0g0L/QvtC40YHQutCwINC40LvQuCDQtNC+0LzQtdC9INC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOLCDQtdGB0LvQuCBOVUxMIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE5NgorbXNnaWQgIlNlcnZpY2UgVHlwZSIKK21zZ3N0ciAi0KLQuNC/INGB0LvRg9C20LHRiyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxOTYKK21zZ2lkICJUaGUgc2VydmljZSB0eXBlIG9mIHRoZSBzZWxlY3RlZCBzZXJ2aWNlIgorbXNnc3RyICLQotC40L8g0LLRi9Cx0YDQsNC90L3QvtC5INGB0LvRg9C20LHRiyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMDIgLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMDIzCittc2dpZCAiU2VydmljZSBOYW1lIgorbXNnc3RyICLQmNC80Y8g0YHQu9GD0LbQsdGLIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIwMgorbXNnaWQgIlRoZSBzZXJ2aWNlIG5hbWUgb2YgdGhlIHNlbGVjdGVkIHNlcnZpY2UiCittc2dzdHIgItCY0LzRjyDQstGL0LHRgNCw0L3QvdC+0Lkg0YHQu9GD0LbQsdGLIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIwOAorbXNnaWQgIkFkZHJlc3MiCittc2dzdHIgItCQ0LTRgNC10YEiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjA4Cittc2dpZCAiVGhlIGFkZHJlc3Mgb2YgdGhlIHJlc29sdmVkIHNlcnZpY2UiCittc2dzdHIgItCQ0LTRgNC10YEg0L7Qv9GA0LXQtNC10LvRkdC90L3QvtCz0L4g0YPRgdGC0YDQvtC50YHRgtCy0LAiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjEzCittc2dpZCAiUG9ydCIKK21zZ3N0ciAi0J/QvtGA0YIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjEzCittc2dpZCAiVGhlIElQIHBvcnQgbnVtYmVyIG9mIHRoZSByZXNvbHZlZCBzZXJ2aWNlIgorbXNnc3RyICLQndC+0LzQtdGAINC/0L7RgNGC0LAg0L/RgNC+0YLQvtC60L7Qu9CwIElQINC+0L/RgNC10LTQtdC70ZHQvdC90L7Qs9C+INGD0YHRgtGA0L7QudGB0YLQstCwIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIxOQorbXNnaWQgIkhvc3QgTmFtZSIKK21zZ3N0ciAi0JjQvNGPINGD0LfQu9CwIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIxOQorbXNnaWQgIlRoZSBob3N0IG5hbWUgb2YgdGhlIHJlc29sdmVkIHNlcnZpY2UiCittc2dzdHIgItCY0LzRjyDRg9C30LvQsCDQvtC/0YDQtdC00LXQu9GR0L3QvdC+0LPQviDRg9GB0YLRgNC+0LnRgdGC0LLQsCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMjUKK21zZ2lkICJUWFQgRGF0YSIKK21zZ3N0ciAi0JTQsNC90L3Ri9C1IFRYVCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMjUKK21zZ2lkICJUaGUgVFhUIGRhdGEgb2YgdGhlIHJlc29sdmVkIHNlcnZpY2UiCittc2dzdHIgItCU0LDQvdC90YvQtSBUWFQg0L7Qv9GA0LXQtNC10LvRkdC90L3QvtCz0L4g0YPRgdGC0YDQvtC50YHRgtCy0LAiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjMwCittc2dpZCAiUmVzb2x2ZSBTZXJ2aWNlIgorbXNnc3RyICLQntC/0YDQtdC00LXQu9C10L3QuNC1INGB0LvRg9C20LHRiyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMzAKK21zZ2lkICJSZXNvbHZlIHRoZSBzZWxlY3RlZCBzZXJ2aWNlIGF1dG9tYXRpY2FsbHkgYmVmb3JlIHJldHVybmluZyIKK21zZ3N0ciAi0JDQstGC0L7QvNCw0YLQuNGH0LXRgdC60Lgg0L7Qv9GA0LXQtNC10LvQuNGC0Ywg0LLRi9Cx0YDQsNC90L3Rg9GOINGB0LvRg9C20LHRgyDQv9C10YDQtdC0INCy0L7Qt9Cy0YDQsNGC0L7QvCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMzYKK21zZ2lkICJSZXNvbHZlIFNlcnZpY2UgSG9zdCBOYW1lIgorbXNnc3RyICLQntC/0YDQtdC00LXQu9C40YLRjCDQuNC80Y8g0YPQt9C70LAg0YHQu9GD0LbQsdGLIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIzNgorbXNnaWQgIiIKKyJSZXNvbHZlIHRoZSBob3N0IG5hbWUgb2YgdGhlIHNlbGVjdGVkIHNlcnZpY2UgYXV0b21hdGljYWxseSBiZWZvcmUgcmV0dXJuaW5nIgorbXNnc3RyICLQkNCy0YLQvtC80LDRgtC40YfQtdGB0LrQuCDQvtC/0YDQtdC00LXQu9C40YLRjCDQuNC80Y8g0YPQt9C70LAg0LLRi9Cx0YDQsNC90L3QvtC5INGB0LvRg9C20LHRiyDQv9C10YDQtdC0INCy0L7Qt9Cy0YDQsNGC0L7QvCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyNDIKK21zZ2lkICJBZGRyZXNzIGZhbWlseSIKK21zZ3N0ciAi0JDQtNGA0LXRgdC90L7QtSDRgdC10LzQtdC50YHRgtCy0L4iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjQyCittc2dpZCAiVGhlIGFkZHJlc3MgZmFtaWx5IGZvciBob3N0IG5hbWUgcmVzb2x1dGlvbiIKK21zZ3N0ciAi0J7Qv9GA0LXQtNC10LvQtdC90LjQtSDQsNC00YDQtdGB0L3QvtCz0L4g0YHQtdC80LXQudGB0YLQstCwINC00LvRjyDQuNC80LXQvdC4INGD0LfQu9CwIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjMyNgorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFoaSBjbGllbnQgZmFpbHVyZTogJXMiCittc2dzdHIgItCe0YjQuNCx0LrQsCDQutC70LjQtdC90YLQsCBBdmFoaTogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6Mzg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWhpIHJlc29sdmVyIGZhaWx1cmU6ICVzIgorbXNnc3RyICLQntGI0LjQsdC60LAg0L/RgNC10L7QsdGA0LDQt9C+0LLQsNGC0LXQu9GPINC40LzRkdC9IEF2YWhpOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo1MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJvd3NpbmcgZm9yIHNlcnZpY2UgdHlwZSAlcyBpbiBkb21haW4gJXMgZmFpbGVkOiAlcyIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQstGL0L/QvtC70L3QuNGC0Ywg0L/QvtC40YHQuiDRgdC70YPQttCx0YsgJXMg0LIg0LTQvtC80LXQvdC1ICVzOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo1MTkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTY4CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoxNjkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTc4CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoxNzkKK21zZ2lkICJuL2EiCittc2dzdHIgItC9L9C0IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjY0OQorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFoaSBkb21haW4gYnJvd3NlciBmYWlsdXJlOiAlcyIKK21zZ3N0ciAi0J7RiNC40LHQutCwINC+0LHQvtC30YDQtdCy0LDRgtC10LvRjyDQtNC+0LzQtdC90L7QsiBBdmFoaTogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6Njg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWFkIEF2YWhpIGRvbWFpbjogJXMiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L7RgtC60YDRi9GC0Ywg0LTQvtC80LXQvSBBdmFoaTogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NzA2Cittc2dpZCAiQnJvd3NlIHNlcnZpY2UgdHlwZSBsaXN0IGlzIGVtcHR5ISIKK21zZ3N0ciAi0KHQv9C40YHQvtC6INGC0LjQv9C+0LIg0LjRgdC60L7QvNGL0YUg0YHQu9GD0LbQsSDQv9GD0YHRgiEiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjb25uZWN0IHRvIEF2YWhpIHNlcnZlcjogJXMiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L/QvtC00LrQu9GO0YfQuNGC0YzRgdGPINC6INGB0LXRgNCy0LXRgNGDIEF2YWhpOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo3MzUKK21zZ2lkICJCcm93c2luZyBmb3Igc2VydmljZXMgb24gPGI+bG9jYWwgbmV0d29yazwvYj46IgorbXNnc3RyICLQn9C+0LjRgdC6INGB0LvRg9C20LEg0LIgPGI+0LvQvtC60LDQu9GM0L3QvtC5INGB0LXRgtC4PC9iPjoiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NzM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyb3dzaW5nIGZvciBzZXJ2aWNlcyBpbiBkb21haW4gPGI+JXM8L2I+OiIKK21zZ3N0ciAi0J/QvtC40YHQuiDRgdC70YPQttCxINCyINC00L7QvNC10L3QtSA8Yj4lczwvYj46IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjc3MworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGJyb3dzZXIgZm9yICVzOiAlcyIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDRgdC+0LfQtNCw0YLRjCDQvtCx0L7Qt9GA0LXQstCw0YLQtdC70Ywg0LTQu9GPICVzOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo5MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSByZXNvbHZlciBmb3IgJXMgb2YgdHlwZSAlcyBpbiBkb21haW4gJXM6ICVzIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINGB0L7Qt9C00LDRgtGMINC/0YDQtdC+0LHRgNCw0LfQvtCy0LDRgtC10LvRjCDQuNC80ZHQvSDQtNC70Y8gJXMg0YLQuNC/0LAgJXMg0LIg0LTQvtC80LXQvdC1ICVzOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo5NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBkb21haW4gYnJvd3NlcjogJXMiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtC30LTQsNGC0Ywg0L7QsdC+0LfRgNC10LLQsNGC0LXQu9GMINC00L7QvNC10L3QvtCyOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo5ODkKK21zZ2lkICJDaGFuZ2UgZG9tYWluIgorbXNnc3RyICLQmNC30LzQtdC90LjRgtGMINC00L7QvNC10L0iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTAzMSAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNjIKK21zZ2lkICJCcm93c2luZy4uLiIKK21zZ3N0ciAi0J/QvtC40YHQui4uLiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTIwCittc2dpZCAiSW5pdGlhbGl6aW5nLi4uIgorbXNnc3RyICLQmNC90LjRhtC40LDQu9C40LfQsNGG0LjRjy4uLiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTQ0Cittc2dpZCAiTG9jYXRpb24iCittc2dzdHIgItCg0LDRgdC/0L7Qu9C+0LbQtdC90LjQtSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTQ5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU1MworbXNnaWQgIk5hbWUiCittc2dzdHIgItCY0LzRjyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTU0IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU1MworbXNnaWQgIlR5cGUiCittc2dzdHIgItCi0LjQvyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTY2Cittc2dpZCAiX0RvbWFpbi4uLiIKK21zZ3N0ciAiX9CU0L7QvNC10L0uLi4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzo1NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgW29wdGlvbnNdXG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1zIC0tc3NoICAgICAgICAgICAgIEJyb3dzZSBTU0ggc2VydmVyc1xuIgorIiAgICAtdiAtLXZuYyAgICAgICAgICAgICBCcm93c2UgVk5DIHNlcnZlcnNcbiIKKyIgICAgLVMgLS1zaGVsbCAgICAgICAgICAgQnJvd3NlIGJvdGggU1NIIGFuZCBWTkNcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgVGhlIGRvbWFpbiB0byBicm93c2UgaW5cbiIKK21zZ3N0ciAiIgorIiVzIFvQv9Cw0YDQsNC80LXRgtGA0YtdXG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgINCf0L7QutCw0LfQsNGC0Ywg0Y3RgtGDINGB0L/RgNCw0LLQutGDXG4iCisiICAgIC1zIC0tc3NoICAgICAgICAgICAgINCS0YvQstC10YHRgtC4INGB0L/QuNGB0L7QuiDQtNC+0YHRgtGD0L/QvdGL0YUg0YHQtdGA0LLQtdGA0L7QsiBTU0hcbiIKKyIgICAgLXYgLS12bmMgICAgICAgICAgICAg0JLRi9Cy0LXRgdGC0Lgg0YHQv9C40YHQvtC6INC00L7RgdGC0YPQv9C90YvRhSDRgdC10YDQstC10YDQvtCyIFZOQ1xuIgorIiAgICAtUyAtLXNoZWxsICAgICAgICAgICDQktGL0LLQtdGB0YLQuCDRgdC/0LjRgdC+0Log0LTQvtGB0YLRg9C/0L3Ri9GFINGB0LXRgNCy0LXRgNC+0LIgU1NIINC4IFZOQ1xuIgorIiAgICAtZCAtLWRvbWFpbj3QlNCe0JzQldCdICAgINCU0L7QvNC10L0g0L/QvtC40YHQutCwINGB0LXRgNCy0LXRgNC+0LJcbiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjEwMSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo3NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG9vIG1hbnkgYXJndW1lbnRzXG4iCittc2dzdHIgItCh0LvQuNGI0LrQvtC8INC80L3QvtCz0L4g0LDRgNCz0YPQvNC10L3RgtC+0LJcbiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE0OQorbXNnaWQgIkNob29zZSBTaGVsbCBTZXJ2ZXIiCittc2dzdHIgItCS0YvQsdC10YDQuNGC0LUg0YHQtdGA0LLQtdGAINC+0LHQvtC70L7Rh9C60LgiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNTEKK21zZ2lkICJEZXNrdG9wIgorbXNnc3RyICLQoNCw0LHQvtGH0LjQuSDRgdGC0L7QuyIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE1MgorbXNnaWQgIlRlcm1pbmFsIgorbXNnc3RyICLQotC10YDQvNC40L3QsNC7IgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTU2Cittc2dpZCAiQ2hvb3NlIFZOQyBzZXJ2ZXIiCittc2dzdHIgItCS0YvQsdC10YDQuNGC0LUgVk5DLdGB0LXRgNCy0LXRgCIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE2MQorbXNnaWQgIkNob29zZSBTU0ggc2VydmVyIgorbXNnc3RyICLQktGL0LHQtdGA0LjRgtC1IFNTSC3RgdC10YDQstC10YAiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29ubmVjdGluZyB0byAnJXMnIC4uLlxuIgorbXNnc3RyICLQodC+0LXQtNC40L3QtdC90LjQtSDRgSDCqyVzwrsuLi5cbiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjI0MAorIywgYy1mb3JtYXQKK21zZ2lkICJleGVjbHAoKSBmYWlsZWQ6ICVzXG4iCittc2dzdHIgItCh0LHQvtC5INCy0YvQv9C+0LvQvdC10L3QuNGPIGV4ZWNscCgpOiAlc1xuIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbmNlbGVkLlxuIgorbXNnc3RyICLQntGC0LzQtdC90LXQvdC+LlxuIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmRlc2t0b3AuaW4uaW4uaDoxCittc2dpZCAiQXZhaGkgU1NIIFNlcnZlciBCcm93c2VyIgorbXNnc3RyICLQndCw0LLQuNCz0LDRgtC+0YAgQXZhaGkg0L/QviDRgdC10YDQstC10YDQsNC8IFNTSCIKKworIzogLi4vYXZhaGktdWkvYnNzaC5kZXNrdG9wLmluLmluLmg6MgorbXNnaWQgIkJyb3dzZSBmb3IgWmVyb2NvbmYtZW5hYmxlZCBTU0ggU2VydmVycyIKK21zZ3N0ciAi0J/RgNC+0YHQvNC+0YLRgCDRgdC/0LjRgdC60LAg0YHQtdGA0LLQtdGA0L7QsiBTU0gg0YEg0LLQutC70Y7Rh9GR0L3QvdC+0Lkg0YHQu9GD0LbQsdC+0LkgWmVyb2NvbmYiCisKKyM6IC4uL2F2YWhpLXVpL2J2bmMuZGVza3RvcC5pbi5pbi5oOjEKK21zZ2lkICJBdmFoaSBWTkMgU2VydmVyIEJyb3dzZXIiCittc2dzdHIgItCd0LDQstC40LPQsNGC0L7RgCBBdmFoaSDQv9C+INGB0LXRgNCy0LXRgNCw0LwgVk5DIgorCisjOiAuLi9hdmFoaS11aS9idm5jLmRlc2t0b3AuaW4uaW4uaDoyCittc2dpZCAiQnJvd3NlIGZvciBaZXJvY29uZi1lbmFibGVkIFZOQyBTZXJ2ZXJzIgorbXNnc3RyICLQn9GA0L7RgdC80L7RgtGAINGB0L/QuNGB0LrQsCDRgdC10YDQstC10YDQvtCyIFZOQyDRgSDQstC60LvRjtGH0ZHQvdC90L7QuSDRgdC70YPQttCx0L7QuSBaZXJvY29uZiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIjogQWxsIGZvciBub3dcbiIKK21zZ3N0ciAiOiDQkdC+0LvRjNGI0LUg0L3QuNGH0LXQs9C+INC90LAg0LTQsNC90L3Ri9C5INC80L7QvNC10L3RglxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoxMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiOiBDYWNoZSBleGhhdXN0ZWRcbiIKK21zZ3N0ciAiOiDQmtGN0Ygg0LjRgdGH0LXRgNC/0LDQvVxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoyMzkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIHNlcnZpY2UgJyVzJyBvZiB0eXBlICclcycgaW4gZG9tYWluICclcyc6ICVzXG4iCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC10L7QsdGA0LDQt9C+0LLQsNGC0Ywg0YHQu9GD0LbQsdGDIMKrJXPCuyDRgtC40L/QsCDCqyVzwrsg0LIg0LTQvtC80LXQvdC1IMKrJXPCuzogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MzQwCisjLCBjLWZvcm1hdAorbXNnaWQgInNlcnZpY2VfYnJvd3NlciBmYWlsZWQ6ICVzXG4iCittc2dzdHIgItCe0YjQuNCx0LrQsCDQsiBzZXJ2aWNlX2Jyb3dzZXI6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjM3OAorIywgYy1mb3JtYXQKK21zZ2lkICJhdmFoaV9zZXJ2aWNlX2Jyb3dzZXJfbmV3KCkgZmFpbGVkOiAlc1xuIgorbXNnc3RyICLQodCx0L7QuSDQstGL0L/QvtC70L3QtdC90LjRjyBhdmFoaV9zZXJ2aWNlX2Jyb3dzZXJfbmV3KCk6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjQxNAorIywgYy1mb3JtYXQKK21zZ2lkICJzZXJ2aWNlX3R5cGVfYnJvd3NlciBmYWlsZWQ6ICVzXG4iCittc2dzdHIgItCe0YjQuNCx0LrQsCDQsiBzZXJ2aWNlX3R5cGVfYnJvd3NlcjogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImF2YWhpX3NlcnZpY2VfdHlwZV9icm93c2VyX25ldygpIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAi0KHQsdC+0Lkg0LLRi9C/0L7Qu9C90LXQvdC40Y8gYXZhaGlfc2VydmljZV90eXBlX2Jyb3dzZXJfbmV3KCk6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjUxOQorIywgYy1mb3JtYXQKK21zZ2lkICJhdmFoaV9kb21haW5fYnJvd3Nlcl9uZXcoKSBmYWlsZWQ6ICVzXG4iCittc2dzdHIgItCh0LHQvtC5INCy0YvQv9C+0LvQvdC10L3QuNGPIGF2YWhpX2RvbWFpbl9icm93c2VyX25ldygpOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1MzUgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjM5NAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI4MCAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBxdWVyeSB2ZXJzaW9uIHN0cmluZzogJXNcbiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0L/RgNC+0YHQuNGC0Ywg0YHRgtGA0L7QutGDINCy0LXRgNGB0LjQuDogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTQwIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozOTkKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyODUgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE3MworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcXVlcnkgaG9zdCBuYW1lOiAlc1xuIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC30LDQv9GA0L7RgdC40YLRjCDQuNC80Y8g0YPQt9C70LA6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU0NCAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6NDAzCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6Mjg5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VydmVyIHZlcnNpb246ICVzOyBIb3N0IG5hbWU6ICVzXG4iCittc2dzdHIgItCS0LXRgNGB0LjRjyDRgdC10YDQstC10YDQsDogJXM7INCY0LzRjyDRg9C30LvQsDogJXNcbiIKKworIy4gVHJhbnNsYXRvcnM6IFRoaXMgaXMgYSBjb2x1bW4gaGVhZGluZyB3aXRoIGFiYnJldmlhdGlvbnMgZm9yCisjLiAqICAgRXZlbnQgKCsvLSksIE5ldHdvcmsgSW50ZXJmYWNlLCBQcm90b2NvbCAoSVB2NC92NiksIERvbWFpbgorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUgSWZjZSBQcm90IERvbWFpblxuIgorbXNnc3RyICLQkCDQmNC90YLRgCDQn9GA0L7RgiDQlNC+0LzQtdC9XG4iCisKKyMuIFRyYW5zbGF0b3JzOiBUaGlzIGlzIGEgY29sdW1uIGhlYWRpbmcgd2l0aCBhYmJyZXZpYXRpb25zIGZvcgorIy4gKiAgIEV2ZW50ICgrLy0pLCBOZXR3b3JrIEludGVyZmFjZSwgUHJvdG9jb2wgKElQdjQvdjYpLCBEb21haW4KKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU1MworIywgYy1mb3JtYXQKK21zZ2lkICJFIElmY2UgUHJvdCAlLSpzICUtMjBzIERvbWFpblxuIgorbXNnc3RyICLQkCDQmNC90YLRgCDQn9GA0L7RgiAlLSpzICUtMjBzINCU0L7QvNC10L1cbiIKKworIy4gV2UgaGF2ZSBiZWVuIGRpc2Nvbm5lY3RlZCwgc28gbGV0IHJlY29ubmVjdAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTg1IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGlzY29ubmVjdGVkLCByZWNvbm5lY3RpbmcgLi4uXG4iCittc2dzdHIgItCh0L7QtdC00LjQvdC10L3QuNC1INGA0LDQt9C+0YDQstCw0L3Qviwg0L/QvtCy0YLQvtGA0L3QvtC1INC/0L7QtNC60LvRjtGH0LXQvdC40LUuLi5cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTk5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjgyOQorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE3MCAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6Mzg2CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjcyIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBjbGllbnQgb2JqZWN0OiAlc1xuIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINGB0L7Qt9C00LDRgtGMINC+0LHRitC10LrRgiDQutC70LjQtdC90YLQsDogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NjA0IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxNzUKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoxNDMgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNsaWVudCBmYWlsdXJlLCBleGl0aW5nOiAlc1xuIgorbXNnc3RyICLQntGI0LjQsdC60LAg0LrQu9C40LXQvdGC0LAsINC30LDQstC10YDRiNC10L3QuNC1INGA0LDQsdC+0YLRizogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NjIzIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoyMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FpdGluZyBmb3IgZGFlbW9uIC4uLlxuIgorbXNnc3RyICLQntC20LjQtNCw0L3QuNC1INC00LXQvNC+0L3QsC4uLlxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo2NDcKK21zZ2lkICIiCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFNob3cgdmVyc2lvblxuIgorIiAgICAtRCAtLWJyb3dzZS1kb21haW5zICBCcm93c2UgZm9yIGJyb3dzaW5nIGRvbWFpbnMgaW5zdGVhZCBvZiBzZXJ2aWNlc1xuIgorIiAgICAtYSAtLWFsbCAgICAgICAgICAgICBTaG93IGFsbCBzZXJ2aWNlcywgcmVnYXJkbGVzcyBvZiB0aGUgdHlwZVxuIgorIiAgICAtZCAtLWRvbWFpbj1ET01BSU4gICBUaGUgZG9tYWluIHRvIGJyb3dzZSBpblxuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBFbmFibGUgdmVyYm9zZSBtb2RlXG4iCisiICAgIC10IC0tdGVybWluYXRlICAgICAgIFRlcm1pbmF0ZSBhZnRlciBkdW1waW5nIGEgbW9yZSBvciBsZXNzIGNvbXBsZXRlICIKKyJsaXN0XG4iCisiICAgIC1jIC0tY2FjaGUgICAgICAgICAgIFRlcm1pbmF0ZSBhZnRlciBkdW1waW5nIGFsbCBlbnRyaWVzIGZyb20gdGhlIGNhY2hlXG4iCisiICAgIC1sIC0taWdub3JlLWxvY2FsICAgIElnbm9yZSBsb2NhbCBzZXJ2aWNlc1xuIgorIiAgICAtciAtLXJlc29sdmUgICAgICAgICBSZXNvbHZlIHNlcnZpY2VzIGZvdW5kXG4iCisiICAgIC1mIC0tbm8tZmFpbCAgICAgICAgIERvbid0IGZhaWwgaWYgdGhlIGRhZW1vbiBpcyBub3QgYXZhaWxhYmxlXG4iCisiICAgIC1wIC0tcGFyc2FibGUgICAgICAgIE91dHB1dCBpbiBwYXJzYWJsZSBmb3JtYXRcbiIKK21zZ3N0ciAiIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICDQktGL0LLQtdGB0YLQuCDQtNCw0L3QvdGD0Y4g0YHQv9GA0LDQstC60YNcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAg0JLRi9Cy0LXRgdGC0Lgg0LLQtdGA0YHQuNGOXG4iCisiICAgIC1EIC0tYnJvd3NlLWRvbWFpbnMgINCY0YHQutCw0YLRjCDQtNC+0LzQtdC90Ysg0LLQvNC10YHRgtC+INGB0LvRg9C20LFcbiIKKyIgICAgLWEgLS1hbGwgICAgICAgICAgICAg0J/QvtC60LDQt9GL0LLQsNGC0Ywg0LLRgdC1INGB0LvRg9C20LHRiyDQstC90LUg0LfQsNCy0LjRgdC40LzQvtGB0YLQuCDQvtGCINGC0LjQv9CwXG4iCisiICAgIC1kIC0tZG9tYWluPURPTUFJTiAgINCY0YHQutCw0YLRjCDQsiDQtNC+0LzQtdC90LVcbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAg0JLQutC70Y7Rh9C40YLRjCDQv9C+0LTRgNC+0LHQvdGL0Lkg0YDQtdC20LjQvFxuIgorIiAgICAtdCAtLXRlcm1pbmF0ZSAgICAgICDQn9C+0LrQsNC30LDRgtGMINCx0L7Qu9C10LUg0LjQu9C4INC80LXQvdC10LUg0L/QvtC70L3Ri9C5INGB0L/QuNGB0L7QuiDQuCDQstGL0LnRgtC4XG4iCisiICAgIC1jIC0tY2FjaGUgICAgICAgICAgINCf0L7QutCw0LfQsNGC0Ywg0LLRgdC1INGN0LvQtdC80LXQvdGC0Ysg0LIg0LrRjdGI0LUg0Lgg0LLRi9C50YLQuFxuIgorIiAgICAtbCAtLWlnbm9yZS1sb2NhbCAgICDQmNCz0L3QvtGA0LjRgNC+0LLQsNGC0Ywg0LvQvtC60LDQu9GM0L3Ri9C1INGB0LvRg9C20LHRi1xuIgorIiAgICAtciAtLXJlc29sdmUgICAgICAgICDQn9GA0LXQvtCx0YDQsNC30L7QstGL0LLQsNGC0Ywg0L3QsNC50LTQtdC90L3Ri9C1INGB0LvRg9C20LHRi1xuIgorIiAgICAtZiAtLW5vLWZhaWwgICAgICAgICDQndC1INC30LDQstC10YDRiNCw0YLRjCDRgNCw0LHQvtGC0YMsINC10YHQu9C4INC00LXQvNC+0L0g0L3QtdC00L7RgdGC0YPQv9C10L1cbiIKKyIgICAgLXAgLS1wYXJzYWJsZSAgICAgICAg0JLRi9Cy0L7QtNC40YLRjCDQsiDQvNCw0YjQuNC90L3QvtC8INGE0L7RgNC80LDRgtC1XG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjY2MAorbXNnaWQgIiIKKyIgICAgLWsgLS1uby1kYi1sb29rdXAgICAgRG9uJ3QgbG9va3VwIHNlcnZpY2UgdHlwZXNcbiIKKyIgICAgLWIgLS1kdW1wLWRiICAgICAgICAgRHVtcCBzZXJ2aWNlIHR5cGUgZGF0YWJhc2VcbiIKK21zZ3N0ciAiIgorIiAgICAtayAtLW5vLWRiLWxvb2t1cCAgICDQndC1INC40YHQutCw0YLRjCDRgtC40L/RiyDRgdC70YPQttCxXG4iCisiICAgIC1iIC0tZHVtcC1kYiAgICAgICAgINCS0YvQstC10YHRgtC4INCx0LDQt9GDINGC0LjQv9C+0LIg0YHQu9GD0LbQsVxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo3NjYgLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjIxOQorIywgYy1mb3JtYXQKK21zZ2lkICJUb28gZmV3IGFyZ3VtZW50c1xuIgorbXNnc3RyICLQodC70LjRiNC60L7QvCDQvNCw0LvQviDQsNGA0LPRg9C80LXQvdGC0L7QslxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo4MjEgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjM3OAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI2NCAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgc2ltcGxlIHBvbGwgb2JqZWN0LlxuIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINGB0L7Qt9C00LDRgtGMINC+0LHRitC10LrRgiDQv9GA0L7RgdGC0L7Qs9C+INC+0L/RgNC+0YHQsC5cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkVzdGFibGlzaGVkIHVuZGVyIG5hbWUgJyVzJ1xuIgorbXNnc3RyICLQntCx0YDQsNC30L7QstCw0L3QsCDQv9C+0LQg0LjQvNC10L3QtdC8IMKrJXPCu1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyOiAlc1xuIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC30LDRgNC10LPQuNGB0YLRgNC40YDQvtCy0LDRgtGMOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTmFtZSBjb2xsaXNpb24sIHBpY2tpbmcgbmV3IG5hbWUgJyVzJy5cbiIKK21zZ3N0ciAi0JrQvtC70LvQuNC30LjRjyDQuNC80ZHQvSwg0LLRi9Cx0YDQsNC90L4g0L3QvtCy0L7QtSDQuNC80Y8gwqslc8K7LlxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgZW50cnkgZ3JvdXA6ICVzXG4iCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtC30LTQsNGC0Ywg0LPRgNGD0L/Qv9GDINGN0LvQtdC80LXQvdGC0L7QsjogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjEyNAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gYWRkIGFkZHJlc3M6ICVzXG4iCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LTQvtCx0LDQstC40YLRjCDQsNC00YDQtdGBOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgc2VydmljZTogJXNcbiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQtNC+0LHQsNCy0LjRgtGMINGB0LvRg9C20LHRgzogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE0MAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gYWRkIHN1YnR5cGUgJyVzJzogJXNcbiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQtNC+0LHQsNCy0LjRgtGMINC/0L7QtNGC0LjQvyDCqyVzwrs6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiSG9zdCBuYW1lIGNvbmZsaWN0XG4iCittc2dzdHIgItCa0L7QvdGE0LvQuNC60YIg0LjQvNC10L3QuCDRg9C30LvQsFxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBbb3B0aW9uc10gJXMgPG5hbWU+IDx0eXBlPiA8cG9ydD4gWzx0eHQgLi4uPl1cbiIKKyIlcyBbb3B0aW9uc10gJXMgPGhvc3QtbmFtZT4gPGFkZHJlc3M+XG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFNob3cgdmVyc2lvblxuIgorIiAgICAtcyAtLXNlcnZpY2UgICAgICAgICBQdWJsaXNoIHNlcnZpY2VcbiIKKyIgICAgLWEgLS1hZGRyZXNzICAgICAgICAgUHVibGlzaCBhZGRyZXNzXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgRG9tYWluIHRvIHB1Ymxpc2ggc2VydmljZSBpblxuIgorIiAgICAtSCAtLWhvc3Q9RE9NQUlOICAgICBIb3N0IHdoZXJlIHNlcnZpY2UgcmVzaWRlc1xuIgorIiAgICAgICAtLXN1YnR5cGU9U1VCVFlQRSBBbiBhZGRpdGlvbmFsIHN1YnR5cGUgdG8gcmVnaXN0ZXIgdGhpcyBzZXJ2aWNlICIKKyJ3aXRoXG4iCisiICAgIC1SIC0tbm8tcmV2ZXJzZSAgICAgIERvIG5vdCBwdWJsaXNoIHJldmVyc2UgZW50cnkgd2l0aCBhZGRyZXNzXG4iCisiICAgIC1mIC0tbm8tZmFpbCAgICAgICAgIERvbid0IGZhaWwgaWYgdGhlIGRhZW1vbiBpcyBub3QgYXZhaWxhYmxlXG4iCittc2dzdHIgIiIKKyIlcyBb0L/QsNGA0LDQvNC10YLRgNGLXSAlcyA80LjQvNGPPiA80YLQuNC/PiA80L/QvtGA0YI+IFs80YLQtdC60YHRgi4uLj5dXG4iCisiJXMgW9C/0LDRgNCw0LzQtdGC0YDRi10gJXMgPNC40LzRjyDRg9C30LvQsD4gPNCw0LTRgNC10YE+XG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgINCS0YvQstC10YHRgtC4INGN0YLRgyDRgdC/0YDQsNCy0LrRg1xuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICDQktGL0LLQtdGB0YLQuCDQstC10YDRgdC40Y5cbiIKKyIgICAgLXMgLS1zZXJ2aWNlICAgICAgICAg0J7Qv9GD0LHQu9C40LrQvtCy0LDRgtGMINGB0LvRg9C20LHRg1xuIgorIiAgICAtYSAtLWFkZHJlc3MgICAgICAgICDQntC/0YPQsdC70LjQutC+0LLQsNGC0Ywg0LDQtNGA0LXRgVxuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICDQktC60LvRjtGH0LjRgtGMINC/0L7QtNGA0L7QsdC90YvQuSDRgNC10LbQuNC8XG4iCisiICAgIC1kIC0tZG9tYWluPdCU0J7QnNCV0J0gICAg0JTQvtC80LXQvSDQtNC70Y8g0L/Rg9Cx0LvQuNC60LDRhtC40Lgg0YHQu9GD0LbQsdGLXG4iCisiICAgIC1IIC0taG9zdD3QlNCe0JzQldCdICAgICAg0KPQt9C10LssINC90LAg0LrQvtGC0L7RgNC+0Lwg0YDQsNC30LzQtdGJ0LDQtdGC0YHRjyDRgdC70YPQttCx0LBcbiIKKyIgICAgICAgLS1zdWJ0eXBlPdCf0J7QlNCi0JjQnyAg0JTQvtC/0L7Qu9C90LjRgtC10LvRjNC90YvQuSDQv9C+0LTRgtC40L8g0LTQu9GPINGA0LXQs9C40YHRgtGA0LDRhtC40Lgg0Y3RgtC+0Lkg0YHQu9GD0LbQsdGLXG4iCisiICAgIC1SIC0tbm8tcmV2ZXJzZSAgICAgINCd0LUg0L7Qv9GD0LHQu9C40LrQvtCy0YvQstCw0YLRjCDRjdC70LXQvNC10L3RgiDQvtCx0YDQsNGC0L3QvtCz0L4g0LDQtNGA0LXRgdCwXG4iCisiICAgIC1mIC0tbm8tZmFpbCAgICAgICAgINCd0LUg0LfQsNCy0LXRgNGI0LDRgtGMINGA0LDQsdC+0YLRgywg0LXRgdC70Lgg0L/RgNC+0YbQtdGB0YEg0YHQu9GD0LbQsdGLICIKKyLQvdC10LTQvtGB0YLRg9C/0LXQvVxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MzAzIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIG51bWJlciBvZiBhcmd1bWVudHNcbiIKK21zZ3N0ciAi0J3QtdCy0LXRgNC90L7QtSDQutC+0LvQuNGH0LXRgdGC0LLQviDQsNGA0LPRg9C80LXQvdGC0L7QslxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBwb3J0IG51bWJlcjogJXNcbiIKK21zZ3N0ciAi0J7RiNC40LHQutCwINGA0LDQt9Cx0L7RgNCwINC90L7QvNC10YDQsCDQv9C+0YDRgtCwOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MzYxIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gY29tbWFuZCBzcGVjaWZpZWQuXG4iCittc2dzdHIgItCd0LUg0YPQutCw0LfQsNC90LAg0LrQvtC80LDQvdC00LAuXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzo4OQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSBob3N0IG5hbWUgJyVzJzogJXNcbiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQv9GA0LXQvtCx0YDQsNC30L7QstCw0YLRjCDQuNC80Y8g0YPQt9C70LAgwqslc8K7OiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIGFkZHJlc3MgJyVzJzogJXNcbiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQv9GA0LXQvtCx0YDQsNC30L7QstCw0YLRjCDQsNC00YDQtdGBIMKrJXPCuzogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjE1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgW29wdGlvbnNdICVzIDxob3N0IG5hbWUgLi4uPlxuIgorIiVzIFtvcHRpb25zXSAlcyA8YWRkcmVzcyAuLi4gPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLW4gLS1uYW1lICAgICAgICAgICAgUmVzb2x2ZSBob3N0IG5hbWVcbiIKKyIgICAgLWEgLS1hZGRyZXNzICAgICAgICAgUmVzb2x2ZSBhZGRyZXNzXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKKyIgICAgLTYgICAgICAgICAgICAgICAgICAgTG9va3VwIElQdjYgYWRkcmVzc1xuIgorIiAgICAtNCAgICAgICAgICAgICAgICAgICBMb29rdXAgSVB2NCBhZGRyZXNzXG4iCittc2dzdHIgIiIKKyIlcyBb0L/QsNGA0LDQvNC10YLRgNGLXSAlcyA80LjQvNGPINGD0LfQu9CwLi4uPlxuIgorIiVzIFvQv9Cw0YDQsNC80LXRgtGA0YtdICVzIDzQsNC00YDQtdGBLi4uID5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAg0JLRi9Cy0LXRgdGC0Lgg0LTQsNC90L3Rg9GOINGB0L/RgNCw0LLQutGDXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgINCS0YvQstC10YHRgtC4INCy0LXRgNGB0LjRjlxuIgorIiAgICAtbiAtLW5hbWUgICAgICAgICAgICDQn9GA0LXQvtCx0YDQsNC30L7QstCw0YLRjCDQuNC80Y8g0YPQt9C70LBcbiIKKyIgICAgLWEgLS1hZGRyZXNzICAgICAgICAg0J/RgNC10L7QsdGA0LDQt9C+0LLQsNGC0Ywg0LDQtNGA0LXRgVxuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICDQktC60LvRjtGH0LjRgtGMINC/0L7QtNGA0L7QsdC90YvQuSDRgNC10LbQuNC8XG4iCisiICAgIC02ICAgICAgICAgICAgICAgICAgINCY0YHQutCw0YLRjCDQsNC00YDQtdGBIElQdjZcbiIKKyIgICAgLTQgICAgICAgICAgICAgICAgICAg0JjRgdC60LDRgtGMINCw0LTRgNC10YEgSVB2NFxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6Mjk5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBob3N0IG5hbWUgcmVzb2x2ZXI6ICVzXG4iCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtC30LTQsNGC0Ywg0L/RgNC10L7QsdGA0LDQt9C+0LLQsNGC0LXQu9GMINC40LzRkdC9INGD0LfQu9C+0LI6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzozMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIGFkZHJlc3MgJyVzJ1xuIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINGA0LDQt9C+0LHRgNCw0YLRjCDQsNC00YDQtdGBIMKrJXPCu1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MzE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgYWRkcmVzcyByZXNvbHZlcjogJXNcbiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDRgdC+0LfQtNCw0YLRjCDQv9GA0LXQvtCx0YDQsNC30L7QstCw0YLQtdC70Ywg0LDQtNGA0LXRgdC+0LI6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgW29wdGlvbnNdIDxuZXcgaG9zdCBuYW1lPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgRW5hYmxlIHZlcmJvc2UgbW9kZVxuIgorbXNnc3RyICIiCisiJXMgW9C/0LDRgNCw0LzQtdGC0YDRi10gPNC90L7QstC+0LUg0LjQvNGPINGD0LfQu9CwPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICDQktGL0LLQtdGB0YLQuCDQtNCw0L3QvdGD0Y4g0YHQv9GA0LDQstC60YNcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAg0JLRi9Cy0LXRgdGC0Lgg0LLQtdGA0YHQuNGOXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgINCS0LrQu9GO0YfQuNGC0Ywg0L/QvtC00YDQvtCx0L3Ri9C5INGA0LXQttC40LxcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMsIGV4cGVjdGluZyBleGFjdGx5IG9uZS5cbiIKK21zZ3N0ciAi0J3QtdCy0LXRgNC90L7QtSDRh9C40YHQu9C+INCw0YDQs9GD0LzQtdC90YLQvtCyLCDQvtC20LjQtNCw0LXRgtGB0Y8g0YDQvtCy0L3QviDQvtC00LjQvS5cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE5MworIywgYy1mb3JtYXQKK21zZ2lkICJIb3N0IG5hbWUgc3VjY2Vzc2Z1bGx5IGNoYW5nZWQgdG8gJXNcbiIKK21zZ3N0ciAi0JjQvNGPINGD0LfQu9CwINGD0YHQv9C10YjQvdC+INC40LfQvNC10L3QtdC90L4g0L3QsCAlc1xuIgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL3BvL3NsLnBvIGIvYXZhaGktMC42LjMxL3BvL3NsLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5ZmVkNTYKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvcG8vc2wucG8KQEAgLTAsMCArMSw4MTcgQEAKKyMgU2xvdmVuaWFuIHRyYW5zbGF0aW9uIGZvciBhdmFoaQorIyBDb3B5cmlnaHQgKGMpIDIwMDggUm9zZXR0YSBDb250cmlidXRvcnMgYW5kIENhbm9uaWNhbCBMdGQgMjAwOAorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgYXZhaGkgcGFja2FnZS4KKyMKKyMgTWF0ZWogVXJiYW7EjWnEjSA8bWF0ZWoudXJiYW5AZ21haWwuY29tPiwgMjAxMC4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGF2YWhpIG1hc3RlclxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMS0wNC0wMiAwMzoyMyswMjAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxMC0wOS0yMiAwODoxMCswMTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBNYXRlaiBVcmJhbsSNacSNIDxtYXRlai51cmJhbkBnbWFpbC5jb20+XG4iCisiTGFuZ3VhZ2UtVGVhbTogU2xvdmVuaWFuIEdOT01FIFRyYW5zbGF0aW9uIFRlYW0gPGdub21lLXNpQGdvb2dsZWdyb3Vwcy5jb20+XG4iCisiTGFuZ3VhZ2U6IFxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9NDsgcGx1cmFsPShuJTEwMD09MSA/IDEgOiBuJTEwMD09MiA/IDIgOiBuJTEwMD09MyB8fCBuIgorIiUxMDA9PTQgPyAzIDogMCk7XG4iCisiWC1Qb2VkaXQtQ291bnRyeTogU0xPVkVOSUFcbiIKKyJYLVBvZWRpdC1MYW5ndWFnZTogU2xvdmVuaWFuXG4iCisiWC1Qb2VkaXQtU291cmNlQ2hhcnNldDogdXRmLThcbiIKKyJYLUxhdW5jaHBhZC1FeHBvcnQtRGF0ZTogMjAxMC0wOS0yMSAwOTowMCswMDAwXG4iCisiWC1HZW5lcmF0b3I6IExhdW5jaHBhZCAoYnVpbGQgVW5rbm93bilcbiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzAKK21zZ2lkICJPSyIKK21zZ3N0ciAiViByZWR1IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozMQorbXNnaWQgIk9wZXJhdGlvbiBmYWlsZWQiCittc2dzdHIgIkRlamFuamUgamUgc3BvZGxldGVsbyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzIKK21zZ2lkICJCYWQgc3RhdGUiCittc2dzdHIgIlNsYWJvIHN0YW5qZSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzMKK21zZ2lkICJJbnZhbGlkIGhvc3QgbmFtZSIKK21zZ3N0ciAiTmV2ZWxqYXZubyBpbWUgZ29zdGl0ZWxqYSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzQKK21zZ2lkICJJbnZhbGlkIGRvbWFpbiBuYW1lIgorbXNnc3RyICJOZXZlbGphdm5vIGltZSBkb21lbmUiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM1Cittc2dpZCAiTm8gc3VpdGFibGUgbmV0d29yayBwcm90b2NvbCBhdmFpbGFibGUiCittc2dzdHIgIk5hIHZvbGpvIG5pIG5vYmVuZWdhIHVzdHJlem5lZ2Egb21yZcW+bmVnYSBwcm90b2tvbGEiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM2Cittc2dpZCAiSW52YWxpZCBETlMgVFRMIgorbXNnc3RyICJOZXZlbGphdmVuIEROUyBUVEwiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM3Cittc2dpZCAiUmVzb3VyY2UgcmVjb3JkIGtleSBpcyBwYXR0ZXJuIgorbXNnc3RyICJLbGp1xI0gemFwaXNhIHZpcmEgamUgdnpvcmVjIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozOAorbXNnaWQgIkxvY2FsIG5hbWUgY29sbGlzaW9uIgorbXNnc3RyICJLcmFqZXZubyBwb2ltZW5vdmFuamUgamUgdiBzcG9ydSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzkKK21zZ2lkICJJbnZhbGlkIHJlY29yZCIKK21zZ3N0ciAiTmV2ZWxqYXZlbiB6YXBpcyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDEKK21zZ2lkICJJbnZhbGlkIHNlcnZpY2UgbmFtZSIKK21zZ3N0ciAiTmV2ZWxqYXZubyBpbWUgc3Rvcml0dmUiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQyCittc2dpZCAiSW52YWxpZCBzZXJ2aWNlIHR5cGUiCittc2dzdHIgIk5ldmVsamF2bmEgdnJzdGEgc3Rvcml0dmUiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQzCittc2dpZCAiSW52YWxpZCBwb3J0IG51bWJlciIKK21zZ3N0ciAiTmV2ZWxqYXZuYSDFoXRldmlsa2EgdnJhdCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDQKK21zZ2lkICJJbnZhbGlkIHJlY29yZCBrZXkiCittc2dzdHIgIk5ldmVsamF2ZW4ga2xqdcSNIHphcGlzYSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDUKK21zZ2lkICJJbnZhbGlkIGFkZHJlc3MiCittc2dzdHIgIk5ldmVsamF2ZW4gbmFzbG92IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NgorbXNnaWQgIlRpbWVvdXQgcmVhY2hlZCIKK21zZ3N0ciAixIxhcyBqZSBwb3Rla2VsIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NworbXNnaWQgIlRvbyBtYW55IGNsaWVudHMiCittc2dzdHIgIlByZXZlxI0gb2RqZW1hbGNldiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDgKK21zZ2lkICJUb28gbWFueSBvYmplY3RzIgorbXNnc3RyICJQcmV2ZcSNIHByZWRtZXRvdiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDkKK21zZ2lkICJUb28gbWFueSBlbnRyaWVzIgorbXNnc3RyICJQcmV2ZcSNIHZub3NvdiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTAKK21zZ2lkICJPUyBFcnJvciIKK21zZ3N0ciAiTmFwYWthIG9wZXJhY2lqc2tlZ2Egb2tvbGphIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1MgorbXNnaWQgIkFjY2VzcyBkZW5pZWQiCittc2dzdHIgIkRvc3RvcCBqZSB6YXZybmplbiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTMKK21zZ2lkICJJbnZhbGlkIG9wZXJhdGlvbiIKK21zZ3N0ciAiTmV2ZWxqYXZubyBkZWphbmplIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1NAorbXNnaWQgIkFuIHVuZXhwZWN0ZWQgRC1CdXMgZXJyb3Igb2NjdXJlZCIKK21zZ3N0ciAiUHJpxaFsbyBqZSBkbyBuZXByacSNYWtvdmFuZSBuYXBha2Ugdm9kaWxhIEQtQnVzLiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTUKK21zZ2lkICJEYWVtb24gY29ubmVjdGlvbiBmYWlsZWQiCittc2dzdHIgIlBvdmV6YXZhIHogb3phZG5qaW0gcHJvZ3JhbW9tIGplIHNwb2RsZXRlbGEiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU2Cittc2dpZCAiTWVtb3J5IGV4aGF1c3RlZCIKK21zZ3N0ciAiUG9tbmlsbmlrIGplIGl6xI1ycGFuIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1NworbXNnaWQgIlRoZSBvYmplY3QgcGFzc2VkIGluIHdhcyBub3QgdmFsaWQiCittc2dzdHIgIlBvc2xhbiBwcmVkbWV0IG5pIHZlbGphdmVuIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1OAorbXNnaWQgIkRhZW1vbiBub3QgcnVubmluZyIKK21zZ3N0ciAiT3phZG5qaSBwcm9ncmFtIG5pIHphZ25hbiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTkKK21zZ2lkICJJbnZhbGlkIGludGVyZmFjZSBpbmRleCIKK21zZ3N0ciAiTmV2ZWxqYXZubyBrYXphbG8gdm1lc25pa2EiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjYwCittc2dpZCAiSW52YWxpZCBwcm90b2NvbCBzcGVjaWZpY2F0aW9uIgorbXNnc3RyICJOZXZlbGphdm5hIHNwZWNpZmlrYWNpamEgcHJvdG9rb2xhIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2MQorbXNnaWQgIkludmFsaWQgZmxhZ3MiCittc2dzdHIgIk5ldmVsamF2bmUgemFzdGF2aWNlIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2MworbXNnaWQgIk5vdCBmb3VuZCIKK21zZ3N0ciAiTmkgemFkZXRrb3YiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY0Cittc2dpZCAiSW52YWxpZCBjb25maWd1cmF0aW9uIgorbXNnc3RyICJOZXZlbGphdm5hIG5hc3Rhdml0ZXYiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY1Cittc2dpZCAiVmVyc2lvbiBtaXNtYXRjaCIKK21zZ3N0ciAiTmVza2xhZGplIHJhemxpxI1pYyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjYKK21zZ2lkICJJbnZhbGlkIHNlcnZpY2Ugc3VidHlwZSIKK21zZ3N0ciAiTmV2ZWxqYXZuYSBwb2R2cnN0YSBzdG9yaXR2ZSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjcKK21zZ2lkICJJbnZhbGlkIHBhY2tldCIKK21zZ3N0ciAiTmV2ZWxqYXZlbiBwYWtldCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjgKK21zZ2lkICJJbnZhbGlkIEROUyByZXR1cm4gY29kZSIKK21zZ3N0ciAiTmV2ZWxqYXZuYSBETlMgdnJuaXR2ZW5hIGtvZGEiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY5Cittc2dpZCAiRE5TIGZhaWx1cmU6IEZPUk1FUlIiCittc2dzdHIgIlNwb2RsZXRlbCBvZHppdiBETlM6IEZPUk1FUlIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjcwCittc2dpZCAiRE5TIGZhaWx1cmU6IFNFUlZGQUlMIgorbXNnc3RyICJTcG9kbGV0ZWwgb2R6aXYgRE5TOiBTRVJWRkFJTCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzEKK21zZ2lkICJETlMgZmFpbHVyZTogTlhET01BSU4iCittc2dzdHIgIlNwb2RsZXRlbCBvZHppdiBETlM6IE5YRE9NQUlOIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3MgorbXNnaWQgIkROUyBmYWlsdXJlOiBOT1RJTVAiCittc2dzdHIgIlNwb2RsZXRlbCBvZHppdiBETlM6IE5PVElNUCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzQKK21zZ2lkICJETlMgZmFpbHVyZTogUkVGVVNFRCIKK21zZ3N0ciAiU3BvZGxldGVsIG9keml2IEROUzogUkVGVVNFRCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzUKK21zZ2lkICJETlMgZmFpbHVyZTogWVhET01BSU4iCittc2dzdHIgIlNwb2RsZXRlbCBvZHppdiBETlM6IFlYRE9NQUlOIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3NgorbXNnaWQgIkROUyBmYWlsdXJlOiBZWFJSU0VUIgorbXNnc3RyICJTcG9kbGV0ZWwgb2R6aXYgRE5TOiBZWFJSU0VUIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3NworbXNnaWQgIkROUyBmYWlsdXJlOiBOWFJSU0VUIgorbXNnc3RyICJTcG9kbGV0ZWwgb2R6aXYgRE5TOiBOWFJSU0VUIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3OAorbXNnaWQgIkROUyBmYWlsdXJlOiBOT1RBVVRIIgorbXNnc3RyICJTcG9kbGV0ZWwgb2R6aXYgRE5TOiBOT1RBVVRIIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3OQorbXNnaWQgIkROUyBmYWlsdXJlOiBOT1RaT05FIgorbXNnc3RyICJTcG9kbGV0ZWwgb2R6aXYgRE5TOiBOT1RaT05FIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4MAorbXNnaWQgIkludmFsaWQgUkRBVEEiCittc2dzdHIgIk5ldmVsamF2ZW4gcG9kYXRlayBSREFUQSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODEKK21zZ2lkICJJbnZhbGlkIEROUyB0eXBlIgorbXNnc3RyICJOZXZlbGphdm5hIHZyc3RhIEROUyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODIKK21zZ2lkICJJbnZhbGlkIEROUyBjbGFzcyIKK21zZ3N0ciAiTmV2ZWxqYXZlbiByYXpyZWQgRE5TIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4MworbXNnaWQgIk5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIk5pIHBvZHBydG8iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjg1Cittc2dpZCAiTm90IHBlcm1pdHRlZCIKK21zZ3N0ciAiTmkgZG92b2xqZW5vIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4NgorbXNnaWQgIkludmFsaWQgYXJndW1lbnQiCittc2dzdHIgIk5ldmVsamF2ZW4gYXJndW1lbnQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjg3Cittc2dpZCAiSXMgZW1wdHkiCittc2dzdHIgIkplIHByYXpubyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODgKK21zZ2lkICJUaGUgcmVxdWVzdGVkIG9wZXJhdGlvbiBpcyBpbnZhbGlkIGJlY2F1c2UgcmVkdW5kYW50IgorbXNnc3RyICJaYWh0ZXZhbmEgb3BlcmFjaWphIGplIHphcmFkaSBvZHZlxI1ub3N0aSBuZXZlbGphdm5hIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo5NAorbXNnaWQgIkludmFsaWQgRXJyb3IgQ29kZSIKK21zZ3N0ciAiTmV2ZWxqYXZuYSBrb2RhIG5hcGFrZSIKKworIzogLi4vYXZhaGktZGlzY292ZXItc3RhbmRhbG9uZS9hdmFoaS1kaXNjb3Zlci51aS5oOjEKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weTo3NgorbXNnaWQgIjxpPk5vIHNlcnZpY2UgY3VycmVudGx5IHNlbGVjdGVkLjwvaT4iCittc2dzdHIgIjxpPlRyZW51dG5vIG5pIGl6YnJhbmUgc3Rvcml0dmUuPC9pPiIKKworIzogLi4vYXZhaGktZGlzY292ZXItc3RhbmRhbG9uZS9hdmFoaS1kaXNjb3Zlci51aS5oOjIKK21zZ2lkICJBdmFoaSBEaXNjb3ZlcnkiCittc2dzdHIgIk9ka3JpdmFuamUgc3Rvcml0ZXYgQXZhaGkiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5kZXNrdG9wLmluLmluLmg6MQorbXNnaWQgIkF2YWhpIFplcm9jb25mIEJyb3dzZXIiCittc2dzdHIgIkJyc2thbG5payBBdmFoaSBaZXJvY29uZiIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLmRlc2t0b3AuaW4uaW4uaDoyCittc2dpZCAiQnJvd3NlIGZvciBaZXJvY29uZiBzZXJ2aWNlcyBhdmFpbGFibGUgb24geW91ciBuZXR3b3JrIgorbXNnc3RyICJCcnNrYW5qZSBtZWQgcmF6cG9sb8W+bGppdmltaSBzdG9yaXR2YW1pIFplcm9jb25mIHYgb21yZcW+anUiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMjQKK21zZ2lkICJUWFQiCittc2dzdHIgIlRYVCIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIyNgorbXNnaWQgIlRYVCBEYXRhOiIKK21zZ3N0ciAiUG9kYXRraSBUWFQ6IgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI2Cittc2dpZCAiZW1wdHkiCittc2dzdHIgInByYXpubyIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIyOAorbXNnaWQgIlNlcnZpY2UgVHlwZToiCittc2dzdHIgIlZyc3RhIHN0b3JpdHZlOiIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIyOQorbXNnaWQgIlNlcnZpY2UgTmFtZToiCittc2dzdHIgIkltZSBzdG9yaXR2ZToiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMzAKK21zZ2lkICJEb21haW4gTmFtZToiCittc2dzdHIgIkltZSBkb21lbmU6IgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjMxCittc2dpZCAiSW50ZXJmYWNlOiIKK21zZ3N0ciAiVm1lc25pazoiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMzIKK21zZ2lkICJBZGRyZXNzOiIKK21zZ3N0ciAiTmFzbG92OiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxODUKK21zZ2lkICJCcm93c2UgU2VydmljZSBUeXBlcyIKK21zZ3N0ciAiQnJza2FuamUgbWVkIHZyc3RhbWkgc3Rvcml0ZXYiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTg1Cittc2dpZCAiQSBOVUxMIHRlcm1pbmF0ZWQgbGlzdCBvZiBzZXJ2aWNlIHR5cGVzIHRvIGJyb3dzZSBmb3IiCittc2dzdHIgIk5pxI1ubyB6YWtsanXEjWVuIHNlem5hbSB2cnN0IHN0b3JpdGV2IHphIGJyc2thbmplIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE5MAorbXNnaWQgIkRvbWFpbiIKK21zZ3N0ciAiRG9tZW5hIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE5MAorbXNnaWQgIlRoZSBkb21haW4gdG8gYnJvd3NlIGluLCBvciBOVUxMIGZvciB0aGUgZGVmYXVsdCBkb21haW4iCittc2dzdHIgIkRvbWVuYSB6YSBicnNrYW5qZSBvemlyb21hIE5VTEwgemEgcHJpdnpldG8gZG9tZW5vIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE5NgorbXNnaWQgIlNlcnZpY2UgVHlwZSIKK21zZ3N0ciAiVnJzdGEgc3Rvcml0dmUiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTk2Cittc2dpZCAiVGhlIHNlcnZpY2UgdHlwZSBvZiB0aGUgc2VsZWN0ZWQgc2VydmljZSIKK21zZ3N0ciAiVnJzdGEgaXpicmFuZSBzdG9yaXR2ZSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMDIgLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMDIzCittc2dpZCAiU2VydmljZSBOYW1lIgorbXNnc3RyICJJbWUgc3Rvcml0dmUiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjAyCittc2dpZCAiVGhlIHNlcnZpY2UgbmFtZSBvZiB0aGUgc2VsZWN0ZWQgc2VydmljZSIKK21zZ3N0ciAiSW1lIGl6YnJhbmUgc3Rvcml0dmUiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjA4Cittc2dpZCAiQWRkcmVzcyIKK21zZ3N0ciAiTmFzbG92IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIwOAorbXNnaWQgIlRoZSBhZGRyZXNzIG9mIHRoZSByZXNvbHZlZCBzZXJ2aWNlIgorbXNnc3RyICJOYXNsb3YgcmF6cmXFoWVuZSBzdG9yaXR2ZSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMTMKK21zZ2lkICJQb3J0IgorbXNnc3RyICJWcmF0YSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMTMKK21zZ2lkICJUaGUgSVAgcG9ydCBudW1iZXIgb2YgdGhlIHJlc29sdmVkIHNlcnZpY2UiCittc2dzdHIgIsWgdGV2aWxrYSB2cmF0IElQIHphIHJhenJlxaFlbm8gc3Rvcml0ZXYiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjE5Cittc2dpZCAiSG9zdCBOYW1lIgorbXNnc3RyICJJbWUgZ29zdGl0ZWxqYSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMTkKK21zZ2lkICJUaGUgaG9zdCBuYW1lIG9mIHRoZSByZXNvbHZlZCBzZXJ2aWNlIgorbXNnc3RyICJJbWUgZ29zdGl0ZWxqYSByYXpyZcWhZW5lIHN0b3JpdHZlIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIyNQorbXNnaWQgIlRYVCBEYXRhIgorbXNnc3RyICJQb2RhdGtpIFRYVCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMjUKK21zZ2lkICJUaGUgVFhUIGRhdGEgb2YgdGhlIHJlc29sdmVkIHNlcnZpY2UiCittc2dzdHIgIlBvZGF0a2kgVFhUIHJhenJlxaFlbmUgc3Rvcml0dmUiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjMwCittc2dpZCAiUmVzb2x2ZSBTZXJ2aWNlIgorbXNnc3RyICJSYXpyZcWhZW5lIHN0b3JpdHZlIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIzMAorbXNnaWQgIlJlc29sdmUgdGhlIHNlbGVjdGVkIHNlcnZpY2UgYXV0b21hdGljYWxseSBiZWZvcmUgcmV0dXJuaW5nIgorbXNnc3RyICJTYW1vZGVqbm8gcmF6cmXFoWkgaXpicmFubyBzdG9yaXRldiBwcmVkIHBvdnJuaXR2aWpvIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIzNgorbXNnaWQgIlJlc29sdmUgU2VydmljZSBIb3N0IE5hbWUiCittc2dzdHIgIkltZSBnb3N0aXRlbGphIHN0b3JpdHZlIHJhenJlxaFldmFuamEiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjM2Cittc2dpZCAiIgorIlJlc29sdmUgdGhlIGhvc3QgbmFtZSBvZiB0aGUgc2VsZWN0ZWQgc2VydmljZSBhdXRvbWF0aWNhbGx5IGJlZm9yZSByZXR1cm5pbmciCittc2dzdHIgIlNhbW9kZWpubyByYXpyZcWhaSBpbWUgZ29zdGl0ZWxqYSBpemJyYW5lIHN0b3JpdHZlIHByZWQgcG92cmF0a29tIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjI0MgorbXNnaWQgIkFkZHJlc3MgZmFtaWx5IgorbXNnc3RyICJEcnXFvmluYSBuYXNsb3ZhIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjI0MgorbXNnaWQgIlRoZSBhZGRyZXNzIGZhbWlseSBmb3IgaG9zdCBuYW1lIHJlc29sdXRpb24iCittc2dzdHIgIkRydcW+aW5hIG5hc2xvdmEgemEgcmF6cmXFoWV2YW5qZSBpbWVuYSBnb3N0aXRlbGphIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjMyNgorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFoaSBjbGllbnQgZmFpbHVyZTogJXMiCittc2dzdHIgIkRlamFuamUgb2RqZW1hbGNhIEF2YWhpIGplIHNwb2RsZXRlbG86ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjM4OAorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFoaSByZXNvbHZlciBmYWlsdXJlOiAlcyIKK21zZ3N0ciAiUmF6cmXFoWV2YW5qZSBwb2RhdGtvdiBBdmFoaSBqZSBzcG9kbGV0ZWxvOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo1MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJvd3NpbmcgZm9yIHNlcnZpY2UgdHlwZSAlcyBpbiBkb21haW4gJXMgZmFpbGVkOiAlcyIKK21zZ3N0ciAiQnJza2FuamUgemEgc3Rvcml0ZXYgdnJzdGUgJXMgdiBkb21lbmkgJXMgamUgc3BvZGxldGVsYTogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NTE5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjE2OAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTY5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjE3OAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTc5Cittc2dpZCAibi9hIgorbXNnc3RyICJuaSBuYSB2b2xqbyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo2NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaGkgZG9tYWluIGJyb3dzZXIgZmFpbHVyZTogJXMiCittc2dzdHIgIkRlamFuamUgZG9tZW5za2VnYSBicnNrYWxuaWthIEF2YWhpIGplIHNwb2RsZXRlbG86ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjY4NAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVhZCBBdmFoaSBkb21haW46ICVzIgorbXNnc3RyICJCcmFuamUgZG9tZW5lIEF2YWhpIGplIHNwb2RsZXRlbG86ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjcwNgorbXNnaWQgIkJyb3dzZSBzZXJ2aWNlIHR5cGUgbGlzdCBpcyBlbXB0eSEiCittc2dzdHIgIlNlem5hbSBicnNrYW5qYSB2cnN0IHN0b3JpdGV2IGplIHByYXplbiEiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjb25uZWN0IHRvIEF2YWhpIHNlcnZlcjogJXMiCittc2dzdHIgIlBvdmV6b3ZhbmplIHMgc3RyZcW+bmlrb20gQXZhaGkgamUgc3BvZGxldGVsbzogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NzM1Cittc2dpZCAiQnJvd3NpbmcgZm9yIHNlcnZpY2VzIG9uIDxiPmxvY2FsIG5ldHdvcms8L2I+OiIKK21zZ3N0ciAiQnJza2FuamUgemEgc3Rvcml0dmFtaSBuYSA8Yj5rcmFqZXZuZW0gb21yZcW+anU8L2I+OiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo3MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJvd3NpbmcgZm9yIHNlcnZpY2VzIGluIGRvbWFpbiA8Yj4lczwvYj46IgorbXNnc3RyICJCcnNrYW5qZSB6YSBzdG9yaXR2YW1pIHYgZG9tZW5pIDxiPiVzPC9iPjoiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NzczCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgYnJvd3NlciBmb3IgJXM6ICVzIgorbXNnc3RyICJVc3R2YXJqYW5qZSBicnNrYWxuaWthIHphICVzIGplIHNwb2RsZXRlbG86ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjkwMworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIHJlc29sdmVyIGZvciAlcyBvZiB0eXBlICVzIGluIGRvbWFpbiAlczogJXMiCittc2dzdHIgIiIKKyJVc3R2YXJqYW5qZSByYXpyZcWhZXZhbG5pa2EgemEgJXMgdnJzdGUgJXMgdiBkb21lbmkgJXMgamUgc3BvZGxldGVsbzogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6OTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgZG9tYWluIGJyb3dzZXI6ICVzIgorbXNnc3RyICJVc3R2YXJqYW5qZSBicnNrYWxuaWthIGRvbWVuIGplIHNwb2RsZXRlbG86ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjk4OQorbXNnaWQgIkNoYW5nZSBkb21haW4iCittc2dzdHIgIlNwcmVtZW5pIGRvbWVubyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMDMxIC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTE2MgorbXNnaWQgIkJyb3dzaW5nLi4uIgorbXNnc3RyICJCcnNrYW5qZSAuLi4iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTEyMAorbXNnaWQgIkluaXRpYWxpemluZy4uLiIKK21zZ3N0ciAiWmHEjWVuamFuamUgLi4uIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNDQKK21zZ2lkICJMb2NhdGlvbiIKK21zZ3N0ciAiTWVzdG8iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTE0OSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NTMKK21zZ2lkICJOYW1lIgorbXNnc3RyICJJbWUiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTE1NCAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NTMKK21zZ2lkICJUeXBlIgorbXNnc3RyICJWcnN0YSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTY2Cittc2dpZCAiX0RvbWFpbi4uLiIKK21zZ3N0ciAiX0RvbWVuYSAuLi4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzo1NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgW29wdGlvbnNdXG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1zIC0tc3NoICAgICAgICAgICAgIEJyb3dzZSBTU0ggc2VydmVyc1xuIgorIiAgICAtdiAtLXZuYyAgICAgICAgICAgICBCcm93c2UgVk5DIHNlcnZlcnNcbiIKKyIgICAgLVMgLS1zaGVsbCAgICAgICAgICAgQnJvd3NlIGJvdGggU1NIIGFuZCBWTkNcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgVGhlIGRvbWFpbiB0byBicm93c2UgaW5cbiIKK21zZ3N0ciAiIgorIiVzIFttb8W+bm9zdGldXG4iCisiXG4iCisiICAgIC1oIC0taGVscCBQb2thxb5lIHRvIHBvbW/EjVxuIgorIiAgICAtcyAtLXNzaCBCcnNrYW5qZSB6YSBTU0ggc3RyZcW+bmlraVxuIgorIiAgICAtdiAtLXZuYyBCcnNrYW5qZSB6YSBWTkMgc3RyZcW+bmlraVxuIgorIiAgICAtUyAtLXNoZWxsIEJyc2thbmplIHphIFNTSCBpbiBWTkMgc3RyZcW+bmlraVxuIgorIiAgICAtZCAtLWRvbWFpbj1ET01FTkEgRG9tZW5hIHphIGJyc2thbmplXG4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxMDEgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6Nzc1CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvbyBtYW55IGFyZ3VtZW50c1xuIgorbXNnc3RyICJQcmV2ZcSNIGFyZ3VtZW50b3ZcbiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE0OQorbXNnaWQgIkNob29zZSBTaGVsbCBTZXJ2ZXIiCittc2dzdHIgIkl6Ym9yIGx1cGluc2tlZ2Egc3RyZcW+bmlrYSIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE1MQorbXNnaWQgIkRlc2t0b3AiCittc2dzdHIgIk5hbWl6amUiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNTIKK21zZ2lkICJUZXJtaW5hbCIKK21zZ3N0ciAiVGVybWluYWwiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNTYKK21zZ2lkICJDaG9vc2UgVk5DIHNlcnZlciIKK21zZ3N0ciAiSXpib3Igc3RyZcW+bmlrYSBWTkMiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNjEKK21zZ2lkICJDaG9vc2UgU1NIIHNlcnZlciIKK21zZ3N0ciAiSXpib3Igc3RyZcW+bmlrYSBTU0giCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29ubmVjdGluZyB0byAnJXMnIC4uLlxuIgorbXNnc3RyICJQb3Zlem92YW5qZSB6ICclcycgLi4uXG4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoyNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhlY2xwKCkgZmFpbGVkOiAlc1xuIgorbXNnc3RyICJ1a2F6IGV4ZWNscCgpIGplIHNwb2RsZXRlbDogJXNcbiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5jZWxlZC5cbiIKK21zZ3N0ciAiUHJla2xpY2Fuby5cbiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5kZXNrdG9wLmluLmluLmg6MQorbXNnaWQgIkF2YWhpIFNTSCBTZXJ2ZXIgQnJvd3NlciIKK21zZ3N0ciAiQXZhaGkgYnJza2FsbmlrIHN0cmXFvm5pa2EgU1NIIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmRlc2t0b3AuaW4uaW4uaDoyCittc2dpZCAiQnJvd3NlIGZvciBaZXJvY29uZi1lbmFibGVkIFNTSCBTZXJ2ZXJzIgorbXNnc3RyICJCcnNrYW5qZSBtZWQgb21vZ2/EjWVuaW1pIHN0cmXFvm5pa2kgWmVyb2NvbmYgU1NIIgorCisjOiAuLi9hdmFoaS11aS9idm5jLmRlc2t0b3AuaW4uaW4uaDoxCittc2dpZCAiQXZhaGkgVk5DIFNlcnZlciBCcm93c2VyIgorbXNnc3RyICJBdmFoaSBicnNrYWxuaWsgc3RyZcW+bmlrYSBWTkMiCisKKyM6IC4uL2F2YWhpLXVpL2J2bmMuZGVza3RvcC5pbi5pbi5oOjIKK21zZ2lkICJCcm93c2UgZm9yIFplcm9jb25mLWVuYWJsZWQgVk5DIFNlcnZlcnMiCittc2dzdHIgIkJyc2thbmplIG1lZCBvbW9nb8SNZW5pbWkgc3RyZcW+bmlraSBaZXJvY29uZiBWTkMiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjEwNworIywgYy1mb3JtYXQKK21zZ2lkICI6IEFsbCBmb3Igbm93XG4iCittc2dzdHIgIjogVnNlIHphIHpkYWpcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIjogQ2FjaGUgZXhoYXVzdGVkXG4iCittc2dzdHIgIjogUHJlZHBvbW5pbG5payBqZSBpesSNcnBhblxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoyMzkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIHNlcnZpY2UgJyVzJyBvZiB0eXBlICclcycgaW4gZG9tYWluICclcyc6ICVzXG4iCittc2dzdHIgIiIKKyJSYXpyZcWhZXZhbmplIHN0b3JpdHZlICclcycgdnJzdGUgJyVzJyB2IGRvbWVuaSAnJXMnIGplIHNwb2RsZXRlbG86ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjM0MAorIywgYy1mb3JtYXQKK21zZ2lkICJzZXJ2aWNlX2Jyb3dzZXIgZmFpbGVkOiAlc1xuIgorbXNnc3RyICJicnNrYWxuaWsgc3Rvcml0ZXYgamUgc3BvZGxldGVsOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzozNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXZhaGlfc2VydmljZV9icm93c2VyX25ldygpIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAidWtheiBhdmFoaV9zZXJ2aWNlX2Jyb3dzZXJfbmV3KCkgc3BvZGxldGVsOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VydmljZV90eXBlX2Jyb3dzZXIgZmFpbGVkOiAlc1xuIgorbXNnc3RyICJ1a2F6IHNlcnZpY2VfdHlwZV9icm93c2VyIHNwb2RsZXRlbDogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImF2YWhpX3NlcnZpY2VfdHlwZV9icm93c2VyX25ldygpIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAidWtheiBhdmFoaV9zZXJ2aWNlX3R5cGVfYnJvd3Nlcl9uZXcoKSBqZSBzcG9kbGV0ZWw6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjUxOQorIywgYy1mb3JtYXQKK21zZ2lkICJhdmFoaV9kb21haW5fYnJvd3Nlcl9uZXcoKSBmYWlsZWQ6ICVzXG4iCittc2dzdHIgInVrYXogYXZhaGlfZG9tYWluX2Jyb3dzZXJfbmV3KCkgamUgc3BvZGxldGVsOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1MzUgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjM5NAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI4MCAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBxdWVyeSB2ZXJzaW9uIHN0cmluZzogJXNcbiIKK21zZ3N0ciAiUG9penZlZG92YW5qZSBuaXphIHJhemxpxI1pY2UgamUgc3BvZGxldGVsbzogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTQwIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozOTkKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyODUgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE3MworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcXVlcnkgaG9zdCBuYW1lOiAlc1xuIgorbXNnc3RyICJQb2l6dmVkb3ZhbmplIGltZW5hIGdvc3RpdGVsamEgamUgc3BvZGxldGVsbzogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTQ0IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo0MDMKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyODkgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE3NworIywgYy1mb3JtYXQKK21zZ2lkICJTZXJ2ZXIgdmVyc2lvbjogJXM7IEhvc3QgbmFtZTogJXNcbiIKK21zZ3N0ciAiUmF6bGnEjWljYSBzdHJlxb5uaWthOiAlczsgaW1lIGdvc3RpdGVsamE6ICVzXG4iCisKKyMuIFRyYW5zbGF0b3JzOiBUaGlzIGlzIGEgY29sdW1uIGhlYWRpbmcgd2l0aCBhYmJyZXZpYXRpb25zIGZvcgorIy4gKiAgIEV2ZW50ICgrLy0pLCBOZXR3b3JrIEludGVyZmFjZSwgUHJvdG9jb2wgKElQdjQvdjYpLCBEb21haW4KKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU0OQorIywgYy1mb3JtYXQKK21zZ2lkICJFIElmY2UgUHJvdCBEb21haW5cbiIKK21zZ3N0ciAiRG9tZW5hIElmY2UgUHJvdFxuIgorCisjLiBUcmFuc2xhdG9yczogVGhpcyBpcyBhIGNvbHVtbiBoZWFkaW5nIHdpdGggYWJicmV2aWF0aW9ucyBmb3IKKyMuICogICBFdmVudCAoKy8tKSwgTmV0d29yayBJbnRlcmZhY2UsIFByb3RvY29sIChJUHY0L3Y2KSwgRG9tYWluCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRSBJZmNlIFByb3QgJS0qcyAlLTIwcyBEb21haW5cbiIKK21zZ3N0ciAiRSBJZmNlIFByb3QgJS0qcyAlLTIwcyBkb21lbmFcbiIKKworIy4gV2UgaGF2ZSBiZWVuIGRpc2Nvbm5lY3RlZCwgc28gbGV0IHJlY29ubmVjdAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTg1IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGlzY29ubmVjdGVkLCByZWNvbm5lY3RpbmcgLi4uXG4iCittc2dzdHIgIlBvdmV6YXZhIGplIHByZWtpbmplbmE7IHBvdGVrYSBwb25vdm5vIHBvdmV6b3ZhbmplIC4uLlxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1OTkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6ODI5CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTcwIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozODYKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyNzIgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE2MAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGNsaWVudCBvYmplY3Q6ICVzXG4iCittc2dzdHIgIlVzdHZhcmphbmplIHByZWRtZXRhIG9kamVtYWxjYSBqZSBzcG9kbGV0ZWxvOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo2MDQgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE3NQorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjE0MyAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xpZW50IGZhaWx1cmUsIGV4aXRpbmc6ICVzXG4iCittc2dzdHIgIlNwb2RsZXRlbG8gaXp2YWphbmplIG9kamVtYWxjYSwgemF0byBibyBkZWphbmplIGtvbsSNYW5vOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo2MjMgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjIwNgorIywgYy1mb3JtYXQKK21zZ2lkICJXYWl0aW5nIGZvciBkYWVtb24gLi4uXG4iCittc2dzdHIgIsSMYWthbmplIG5hIG96YWRuamkgcHJvZ3JhbSAuLi5cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NjQ3Cittc2dpZCAiIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLUQgLS1icm93c2UtZG9tYWlucyAgQnJvd3NlIGZvciBicm93c2luZyBkb21haW5zIGluc3RlYWQgb2Ygc2VydmljZXNcbiIKKyIgICAgLWEgLS1hbGwgICAgICAgICAgICAgU2hvdyBhbGwgc2VydmljZXMsIHJlZ2FyZGxlc3Mgb2YgdGhlIHR5cGVcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgVGhlIGRvbWFpbiB0byBicm93c2UgaW5cbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgRW5hYmxlIHZlcmJvc2UgbW9kZVxuIgorIiAgICAtdCAtLXRlcm1pbmF0ZSAgICAgICBUZXJtaW5hdGUgYWZ0ZXIgZHVtcGluZyBhIG1vcmUgb3IgbGVzcyBjb21wbGV0ZSAiCisibGlzdFxuIgorIiAgICAtYyAtLWNhY2hlICAgICAgICAgICBUZXJtaW5hdGUgYWZ0ZXIgZHVtcGluZyBhbGwgZW50cmllcyBmcm9tIHRoZSBjYWNoZVxuIgorIiAgICAtbCAtLWlnbm9yZS1sb2NhbCAgICBJZ25vcmUgbG9jYWwgc2VydmljZXNcbiIKKyIgICAgLXIgLS1yZXNvbHZlICAgICAgICAgUmVzb2x2ZSBzZXJ2aWNlcyBmb3VuZFxuIgorIiAgICAtZiAtLW5vLWZhaWwgICAgICAgICBEb24ndCBmYWlsIGlmIHRoZSBkYWVtb24gaXMgbm90IGF2YWlsYWJsZVxuIgorIiAgICAtcCAtLXBhcnNhYmxlICAgICAgICBPdXRwdXQgaW4gcGFyc2FibGUgZm9ybWF0XG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NjYwCittc2dpZCAiIgorIiAgICAtayAtLW5vLWRiLWxvb2t1cCAgICBEb24ndCBsb29rdXAgc2VydmljZSB0eXBlc1xuIgorIiAgICAtYiAtLWR1bXAtZGIgICAgICAgICBEdW1wIHNlcnZpY2UgdHlwZSBkYXRhYmFzZVxuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjc2NiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvbyBmZXcgYXJndW1lbnRzXG4iCittc2dzdHIgIlByZW1hbG8gYXJndW1lbnRvdlxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo4MjEgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjM3OAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI2NCAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgc2ltcGxlIHBvbGwgb2JqZWN0LlxuIgorbXNnc3RyICJVc3R2YXJqYW5qZSBwcmVkbWV0YSBlbm9zdGF2bmUgYW5rZXRlIGplIHNwb2RsZXRlbG8uXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo3NgorIywgYy1mb3JtYXQKK21zZ2lkICJFc3RhYmxpc2hlZCB1bmRlciBuYW1lICclcydcbiIKK21zZ3N0ciAiVnpwb3N0YXZsamVubyBwb2QgaW1lbm9tICclcydcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlcjogJXNcbiIKK21zZ3N0ciAiVnBpc292YW5qZSBqZSBzcG9kbGV0ZWxvOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTmFtZSBjb2xsaXNpb24sIHBpY2tpbmcgbmV3IG5hbWUgJyVzJy5cbiIKK21zZ3N0ciAiUG9pbWVub3ZhbmplIGplIHYgc3BvcnUsIHphdG8gYm8gaXpicmFubyBub3ZvIGltZSAnJXMnLlxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgZW50cnkgZ3JvdXA6ICVzXG4iCittc2dzdHIgIlVzdHZhcmphbmplIHNrdXBpbmUgdm5vc2EgamUgc3BvZGxldGVsbzogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjEyNAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gYWRkIGFkZHJlc3M6ICVzXG4iCittc2dzdHIgIkRvZGFqYW5qZSBuYXNsb3ZhIGplIHNwb2RsZXRlbG86ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBzZXJ2aWNlOiAlc1xuIgorbXNnc3RyICJEb2RhamFuamUgc3Rvcml0dmUgamUgc3BvZGxldGVsbzogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE0MAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gYWRkIHN1YnR5cGUgJyVzJzogJXNcbiIKK21zZ3N0ciAiRG9kYWphbmplIHBvZHZyc3RlICclcycgamUgc3BvZGxldGVsbzogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE5MQorIywgYy1mb3JtYXQKK21zZ2lkICJIb3N0IG5hbWUgY29uZmxpY3RcbiIKK21zZ3N0ciAiSW1lIGdvc3RpdGVsamEgamUgdiBzcG9ydVxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBbb3B0aW9uc10gJXMgPG5hbWU+IDx0eXBlPiA8cG9ydD4gWzx0eHQgLi4uPl1cbiIKKyIlcyBbb3B0aW9uc10gJXMgPGhvc3QtbmFtZT4gPGFkZHJlc3M+XG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFNob3cgdmVyc2lvblxuIgorIiAgICAtcyAtLXNlcnZpY2UgICAgICAgICBQdWJsaXNoIHNlcnZpY2VcbiIKKyIgICAgLWEgLS1hZGRyZXNzICAgICAgICAgUHVibGlzaCBhZGRyZXNzXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgRG9tYWluIHRvIHB1Ymxpc2ggc2VydmljZSBpblxuIgorIiAgICAtSCAtLWhvc3Q9RE9NQUlOICAgICBIb3N0IHdoZXJlIHNlcnZpY2UgcmVzaWRlc1xuIgorIiAgICAgICAtLXN1YnR5cGU9U1VCVFlQRSBBbiBhZGRpdGlvbmFsIHN1YnR5cGUgdG8gcmVnaXN0ZXIgdGhpcyBzZXJ2aWNlICIKKyJ3aXRoXG4iCisiICAgIC1SIC0tbm8tcmV2ZXJzZSAgICAgIERvIG5vdCBwdWJsaXNoIHJldmVyc2UgZW50cnkgd2l0aCBhZGRyZXNzXG4iCisiICAgIC1mIC0tbm8tZmFpbCAgICAgICAgIERvbid0IGZhaWwgaWYgdGhlIGRhZW1vbiBpcyBub3QgYXZhaWxhYmxlXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjMwMyAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MzE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBudW1iZXIgb2YgYXJndW1lbnRzXG4iCittc2dzdHIgIk5hcGHEjW5vIMWhdGV2aWxvIGFyZ3VtZW50b3YuXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIHBvcnQgbnVtYmVyOiAlc1xuIgorbXNnc3RyICJSYXpyZcWhZXZhbmplIMWhdGV2aWxrZSB2cmF0IGplIHNwb2RsZXRlbG86ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozNjEgLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI0NgorIywgYy1mb3JtYXQKK21zZ2lkICJObyBjb21tYW5kIHNwZWNpZmllZC5cbiIKK21zZ3N0ciAiTmkgZG9sb8SNZW5lZ2EgdWthemEuXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzo4OQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSBob3N0IG5hbWUgJyVzJzogJXNcbiIKK21zZ3N0ciAiUmF6cmXFoWV2YW5qZSBpbWVuYSBnb3N0aXRlbGphICclcycgamUgc3BvZGxldGVsbzogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjEyNgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSBhZGRyZXNzICclcyc6ICVzXG4iCittc2dzdHIgIlJhenJlxaFldmFuamUgbmFzbG92YSAnJXMnIGplIHNwb2RsZXRlbG86ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoxNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFtvcHRpb25zXSAlcyA8aG9zdCBuYW1lIC4uLj5cbiIKKyIlcyBbb3B0aW9uc10gJXMgPGFkZHJlc3MgLi4uID5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgU2hvdyB2ZXJzaW9uXG4iCisiICAgIC1uIC0tbmFtZSAgICAgICAgICAgIFJlc29sdmUgaG9zdCBuYW1lXG4iCisiICAgIC1hIC0tYWRkcmVzcyAgICAgICAgIFJlc29sdmUgYWRkcmVzc1xuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBFbmFibGUgdmVyYm9zZSBtb2RlXG4iCisiICAgIC02ICAgICAgICAgICAgICAgICAgIExvb2t1cCBJUHY2IGFkZHJlc3NcbiIKKyIgICAgLTQgICAgICAgICAgICAgICAgICAgTG9va3VwIElQdjQgYWRkcmVzc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyOTkgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE4MQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGhvc3QgbmFtZSByZXNvbHZlcjogJXNcbiIKK21zZ3N0ciAiVXN0dmFyamFuamUgcmF6cmXFoWV2YWxuaWthIGdvc3RpdGVsanNraWggaW1lbiBqZSBzcG9kbGV0ZWxvOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBhZGRyZXNzICclcydcbiIKK21zZ3N0ciAiUmF6xI1sZW5qZXZhbmplIG5hc2xvdmEgJyVzJyBqZSBzcG9kbGV0ZWxvXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzozMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBhZGRyZXNzIHJlc29sdmVyOiAlc1xuIgorbXNnc3RyICJVc3R2YXJqYW5qZSBuYXNsb3ZuZWdhIHJhenJlxaFldmFsbmlrYSBqZSBzcG9kbGV0ZWxvOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFtvcHRpb25zXSA8bmV3IGhvc3QgbmFtZT5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgU2hvdyB2ZXJzaW9uXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cywgZXhwZWN0aW5nIGV4YWN0bHkgb25lLlxuIgorbXNnc3RyICJOZXZlbGphdm5vIMWhdGV2aWxvIGFyZ3VtZW50b3YsIHNhaiBqZSBwcmnEjWFrb3ZhbiBsZSBlbi5cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE5MworIywgYy1mb3JtYXQKK21zZ2lkICJIb3N0IG5hbWUgc3VjY2Vzc2Z1bGx5IGNoYW5nZWQgdG8gJXNcbiIKK21zZ3N0ciAiSW1lIGdvc3RpdGVsamEgamUgdXNwZcWhbm8gc3ByZW1lbmplbm8gdiAlc1xuIgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL3BvL3NyLnBvIGIvYXZhaGktMC42LjMxL3BvL3NyLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0NThmNzQKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvcG8vc3IucG8KQEAgLTAsMCArMSw4NjUgQEAKKyMgU2VyYmlhbiB0cmFuc2xhdGlvbnMgZm9yIGF2YWhpCisjIENvcHlyaWdodCAoQykgMjAwNiBSZWQgSGF0LCBJbmMuCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBhdmFoaSBwYWNrYWdlLgorIyBOaWtvbGEgUGFqdGnEhyA8c2FsZ2VyYXNAZ21haWwuY29tPiwgMjAwOC4KKyMgTWlsb3MgTWlqYXRvdmljIDxtaWphdGl4QGdtYWlsLmNvbT4sIDIwMDguCisjIE1pbG/FoSBLb21hcsSNZXZpxIcgPGttaWxvc0BnbWFpbC5jb20+LCAyMDA5LgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogYXZhaGlcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTEtMDQtMDIgMDM6MjMrMDIwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDktMDMtMjEgMTU6NTgrMDEwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogTWlsb8WhIEtvbWFyxI1ldmnEhyA8a21pbG9zQGdtYWlsLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBTZXJiaWFuIChzcikgPGZlZG9yYS10cmFucy1zckByZWRoYXQuY29tPlxuIgorIkxhbmd1YWdlOiBcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTM7IHBsdXJhbD0obiUxMD09MSAmJiBuJTEwMCE9MTEgPyAwIDogbiUxMD49MiAmJiBuIgorIiUxMDw9NCAmJiAobiUxMDA8MTAgfHwgbiUxMDA+PTIwKSA/IDEgOiAyKTtcbiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzAKK21zZ2lkICJPSyIKK21zZ3N0ciAi0KMg0YDQtdC00YMiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjMxCittc2dpZCAiT3BlcmF0aW9uIGZhaWxlZCIKK21zZ3N0ciAi0J7Qv9C10YDQsNGG0LjRmNCwINC90LXRg9GB0L/QtdGI0L3QsCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzIKK21zZ2lkICJCYWQgc3RhdGUiCittc2dzdHIgItCb0L7RiNC1INGB0YLQsNGa0LUiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjMzCittc2dpZCAiSW52YWxpZCBob3N0IG5hbWUiCittc2dzdHIgItCd0LXQuNGB0L/RgNCw0LLQsNC9INC90LDQt9C40LIg0LTQvtC80LDRm9C40L3QsCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzQKK21zZ2lkICJJbnZhbGlkIGRvbWFpbiBuYW1lIgorbXNnc3RyICLQndC10LjRgdC/0YDQsNCy0LDQvSDQvdCw0LfQuNCyINC00L7QvNC10L3QsCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzUKK21zZ2lkICJObyBzdWl0YWJsZSBuZXR3b3JrIHByb3RvY29sIGF2YWlsYWJsZSIKK21zZ3N0ciAi0J7QtNCz0L7QstCw0YDQsNGY0YPRm9C4INC80YDQtdC20L3QuCDQv9GA0L7RgtC+0LrQvtC7INC90LjRmNC1INC00L7RgdGC0YPQv9Cw0L0iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM2Cittc2dpZCAiSW52YWxpZCBETlMgVFRMIgorbXNnc3RyICLQndC10LjRgdC/0YDQsNCy0LDQvSBETlMgVFRMIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozNworbXNnaWQgIlJlc291cmNlIHJlY29yZCBrZXkgaXMgcGF0dGVybiIKK21zZ3N0ciAi0JrRmdGD0Ycg0LfQsNC/0LjRgdCwINGA0LXRgdGD0YDRgdCwINGY0LUg0YjQsNCx0LvQvtC9IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozOAorbXNnaWQgIkxvY2FsIG5hbWUgY29sbGlzaW9uIgorbXNnc3RyICLQodGD0LrQvtCxINC70L7QutCw0LvQvdC40YUg0L3QsNC30LjQstCwIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozOQorbXNnaWQgIkludmFsaWQgcmVjb3JkIgorbXNnc3RyICLQndC10LjRgdC/0YDQsNCy0LDQvSDQt9Cw0L/QuNGBIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0MQorbXNnaWQgIkludmFsaWQgc2VydmljZSBuYW1lIgorbXNnc3RyICLQndC10LjRgdC/0YDQsNCy0LDQvSDQvdCw0LfQuNCyINGD0YHQu9GD0LPQtSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDIKK21zZ2lkICJJbnZhbGlkIHNlcnZpY2UgdHlwZSIKK21zZ3N0ciAi0J3QtdC40YHQv9GA0LDQstC90LAg0LLRgNGB0YLQsCDRg9GB0LvRg9Cz0LUiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQzCittc2dpZCAiSW52YWxpZCBwb3J0IG51bWJlciIKK21zZ3N0ciAi0J3QtdC40YHQv9GA0LDQstCw0L0g0LHRgNC+0Zgg0L/RgNC40LrRmdGD0YfQutCwIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NAorbXNnaWQgIkludmFsaWQgcmVjb3JkIGtleSIKK21zZ3N0ciAi0J3QtdC40YHQv9GA0LDQstCw0L0g0LrRmdGD0Ycg0LfQsNC/0LjRgdCwIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NQorbXNnaWQgIkludmFsaWQgYWRkcmVzcyIKK21zZ3N0ciAi0J3QtdGC0LDRh9C90LAg0LDQtNGA0LXRgdCwIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NgorbXNnaWQgIlRpbWVvdXQgcmVhY2hlZCIKK21zZ3N0ciAi0J/QsNGD0LfQsCDRmNC1INC00L7RgdGC0LjQs9C90YPRgtCwIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NworbXNnaWQgIlRvbyBtYW55IGNsaWVudHMiCittc2dzdHIgItCf0YDQtdCy0LjRiNC1INC60LvQuNGY0LXQvdCw0YLQsCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDgKK21zZ2lkICJUb28gbWFueSBvYmplY3RzIgorbXNnc3RyICLQn9GA0LXQstC40YjQtSDQvtCx0ZjQtdC60LDRgtCwIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0OQorbXNnaWQgIlRvbyBtYW55IGVudHJpZXMiCittc2dzdHIgItCf0YDQtdCy0LjRiNC1INC30LDQv9C40YHQsCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTAKK21zZ2lkICJPUyBFcnJvciIKK21zZ3N0ciAi0JPRgNC10YjQutCwINC+0L/QtdGA0LDRgtC40LLQvdC+0LMg0YHQuNGB0YLQtdC80LAiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjUyCittc2dpZCAiQWNjZXNzIGRlbmllZCIKK21zZ3N0ciAi0JfQsNCx0YDQsNGa0LXQvSDQv9GA0LjRgdGC0YPQvyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTMKK21zZ2lkICJJbnZhbGlkIG9wZXJhdGlvbiIKK21zZ3N0ciAi0J3QtdGC0LDRh9C90LAg0L7Qv9C10YDQsNGG0LjRmNCwIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1NAorbXNnaWQgIkFuIHVuZXhwZWN0ZWQgRC1CdXMgZXJyb3Igb2NjdXJlZCIKK21zZ3N0ciAi0JTQtdGB0LjQu9CwINGB0LUg0L3QtdC+0YfQtdC60LjQstCw0L3QsCDQs9GA0LXRiNC60LAg0YMgRC1CdXMg0YHQvtGE0YLQstC10YDRgyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTUKK21zZ2lkICJEYWVtb24gY29ubmVjdGlvbiBmYWlsZWQiCittc2dzdHIgItCf0L7QstC10LfQuNCy0LDRmtC1INGB0LjRgdGC0LXQvNGB0LrQtSDRg9GB0LvRg9Cz0LUg0L3QtdGD0YHQv9C10YjQvdC+IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1NgorbXNnaWQgIk1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgItCc0LXQvNC+0YDQuNGY0LAg0L/RgNC10L/Rg9Ga0LXQvdCwIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1NworbXNnaWQgIlRoZSBvYmplY3QgcGFzc2VkIGluIHdhcyBub3QgdmFsaWQiCittc2dzdHIgItCf0YDQtdC90L7RgSDQvtCx0ZjQtdC60YLQsCDQvdC40ZjQtSDQsdC40L4g0LjRgdC/0YDQsNCy0LDQvSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTgKK21zZ2lkICJEYWVtb24gbm90IHJ1bm5pbmciCittc2dzdHIgItCh0LjRgdGC0LXQvNGB0LrQsCDRg9GB0LvRg9Cz0LAg0YHQtSDQvdC1INC/0L7QutGA0LXRm9C1IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1OQorbXNnaWQgIkludmFsaWQgaW50ZXJmYWNlIGluZGV4IgorbXNnc3RyICLQndC10LjRgdC/0YDQsNCy0LDQvSDQuNC90LTQtdC60YEg0YHQv9GA0LXQs9C1IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2MAorbXNnaWQgIkludmFsaWQgcHJvdG9jb2wgc3BlY2lmaWNhdGlvbiIKK21zZ3N0ciAi0J3QtdC40YHQv9GA0LDQstC90LAg0YHQv9C10YbQuNGE0LjQutCw0YbQuNGY0LAg0L/RgNC+0YLQvtC60L7Qu9CwIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2MQorbXNnaWQgIkludmFsaWQgZmxhZ3MiCittc2dzdHIgItCd0LXQuNGB0L/RgNCw0LLQvdC4INC40L3QtNC40LrQsNGC0L7RgNC4IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2MworbXNnaWQgIk5vdCBmb3VuZCIKK21zZ3N0ciAi0J3QuNGY0LUg0L/RgNC+0L3QsNGS0LXQvdC+IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2NAorbXNnaWQgIkludmFsaWQgY29uZmlndXJhdGlvbiIKK21zZ3N0ciAi0J3QtdC40YHQv9GA0LDQstC90L4g0L/QvtC00LXRiNCw0LLQsNGa0LUiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY1Cittc2dpZCAiVmVyc2lvbiBtaXNtYXRjaCIKK21zZ3N0ciAi0J3QtdGB0LvQsNCz0LDRmtC1INCy0LXRgNC30LjRmNC1IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2NgorbXNnaWQgIkludmFsaWQgc2VydmljZSBzdWJ0eXBlIgorbXNnc3RyICLQndC10LjRgdC/0YDQsNCy0L3QsCDQv9C+0LTQstGA0YHRgtCwINGD0YHQu9GD0LPQsCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjcKK21zZ2lkICJJbnZhbGlkIHBhY2tldCIKK21zZ3N0ciAi0J3QtdC40YHQv9GA0LDQstCw0L0g0L/QsNC60LXRgiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjgKK21zZ2lkICJJbnZhbGlkIEROUyByZXR1cm4gY29kZSIKK21zZ3N0ciAi0J3QtdC40YHQv9GA0LDQstCw0L0g0L/QvtCy0YDQsNGC0L3QuCDQutC+0LQgRE5TINGD0YHQu9GD0LPQtSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjkKK21zZ2lkICJETlMgZmFpbHVyZTogRk9STUVSUiIKK21zZ3N0ciAiRE5TINC60LLQsNGAOiBGT1JNRVJSIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3MAorbXNnaWQgIkROUyBmYWlsdXJlOiBTRVJWRkFJTCIKK21zZ3N0ciAiRE5TINC60LLQsNGAOiBTRVJWRkFJTCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzEKK21zZ2lkICJETlMgZmFpbHVyZTogTlhET01BSU4iCittc2dzdHIgIkROUyDQutCy0LDRgDogTlhET01BSU4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjcyCittc2dpZCAiRE5TIGZhaWx1cmU6IE5PVElNUCIKK21zZ3N0ciAiRE5TINC60LLQsNGAOiBOT1RJTVAiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc0Cittc2dpZCAiRE5TIGZhaWx1cmU6IFJFRlVTRUQiCittc2dzdHIgIkROUyDQutCy0LDRgDogUkVGVVNFRCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzUKK21zZ2lkICJETlMgZmFpbHVyZTogWVhET01BSU4iCittc2dzdHIgIkROUyDQutCy0LDRgDogWVhET01BSU4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc2Cittc2dpZCAiRE5TIGZhaWx1cmU6IFlYUlJTRVQiCittc2dzdHIgIkROUyDQutCy0LDRgDogWVhSUlNFVCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzcKK21zZ2lkICJETlMgZmFpbHVyZTogTlhSUlNFVCIKK21zZ3N0ciAiRE5TINC60LLQsNGAOiBOWFJSU0VUIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3OAorbXNnaWQgIkROUyBmYWlsdXJlOiBOT1RBVVRIIgorbXNnc3RyICJETlMg0LrQstCw0YA6IE5PVEFVVEgiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc5Cittc2dpZCAiRE5TIGZhaWx1cmU6IE5PVFpPTkUiCittc2dzdHIgIkROUyDQutCy0LDRgDogTk9UWk9ORSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODAKK21zZ2lkICJJbnZhbGlkIFJEQVRBIgorbXNnc3RyICLQndC10LjRgdC/0YDQsNCy0L3QsCBSREFUQSDQstGA0YHRgtCwINC/0L7QtNCw0YLQsNC60LAiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjgxCittc2dpZCAiSW52YWxpZCBETlMgdHlwZSIKK21zZ3N0ciAi0J3QtdC40YHQv9GA0LDQstC90LAg0LLRgNGB0YLQsCBETlMg0YPRgdC70YPQs9C1IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4MgorbXNnaWQgIkludmFsaWQgRE5TIGNsYXNzIgorbXNnc3RyICLQndC10LjRgdC/0YDQsNCy0L3QsCDQutC70LDRgdCwIEROUyDRg9GB0LvRg9Cz0LUiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjgzCittc2dpZCAiTm90IHN1cHBvcnRlZCIKK21zZ3N0ciAi0J3QuNGY0LUg0L/QvtC00YDQttCw0L3QviIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODUKK21zZ2lkICJOb3QgcGVybWl0dGVkIgorbXNnc3RyICLQndC40ZjQtSDQtNC+0LfQstC+0ZnQtdC90L4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjg2Cittc2dpZCAiSW52YWxpZCBhcmd1bWVudCIKK21zZ3N0ciAi0J3QtdC40YHQv9GA0LDQstCw0L0g0LDRgNCz0YPQvNC10L3RgiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODcKK21zZ2lkICJJcyBlbXB0eSIKK21zZ3N0ciAi0J/RgNCw0LfQvdC+IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4OAorbXNnaWQgIlRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uIGlzIGludmFsaWQgYmVjYXVzZSByZWR1bmRhbnQiCittc2dzdHIgItCi0YDQsNC20LXQvdCwINC+0L/QtdGA0LDRhtC40ZjQsCDRmNC1INC90LXQuNGB0L/RgNCw0LLQvdCwINGY0LXRgCDRmNC1INGA0LXQtNGD0L3QtNCw0L3RgtC90LAiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjk0Cittc2dpZCAiSW52YWxpZCBFcnJvciBDb2RlIgorbXNnc3RyICLQndC10LjRgdC/0YDQsNCy0LDQvSDQutC+0LQg0LPRgNC10YjQutC1IgorCisjOiAuLi9hdmFoaS1kaXNjb3Zlci1zdGFuZGFsb25lL2F2YWhpLWRpc2NvdmVyLnVpLmg6MQorIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5Ojc2Cittc2dpZCAiPGk+Tm8gc2VydmljZSBjdXJyZW50bHkgc2VsZWN0ZWQuPC9pPiIKK21zZ3N0ciAiPGk+0J3QuNGY0LXQtNC90LAg0YPRgdC70YPQs9CwINGC0YDQtdC90YPRgtC90L4g0L3QuNGY0LUg0LjQt9Cw0LHRgNCw0L3QsC48L2k+IgorCisjOiAuLi9hdmFoaS1kaXNjb3Zlci1zdGFuZGFsb25lL2F2YWhpLWRpc2NvdmVyLnVpLmg6MgorbXNnaWQgIkF2YWhpIERpc2NvdmVyeSIKK21zZ3N0ciAi0JDQstCw0YXQuCDQvtGC0LrRgNC40LLQsNGa0LUiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5kZXNrdG9wLmluLmluLmg6MQorbXNnaWQgIkF2YWhpIFplcm9jb25mIEJyb3dzZXIiCittc2dzdHIgItCQ0LLQsNGF0LggWmVyb2NvbmYg0L/RgNC10YLRgNCw0LbQuNCy0LDRhyIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLmRlc2t0b3AuaW4uaW4uaDoyCittc2dpZCAiQnJvd3NlIGZvciBaZXJvY29uZiBzZXJ2aWNlcyBhdmFpbGFibGUgb24geW91ciBuZXR3b3JrIgorbXNnc3RyICLQn9GA0LXRgtGA0LDQttGD0ZjQtdC8INC00L7RgdGC0YPQv9C90LUgWmVyb2NvbmYg0YPRgdC70YPQs9C1INC90LAg0LLQsNGI0L7RmCDQvNGA0LXQttC4IgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI0Cittc2dpZCAiVFhUIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMjYKKyMsIGZ1enp5Cittc2dpZCAiVFhUIERhdGE6IgorbXNnc3RyICJUWFQg0L/QvtC00LDRhtC4IgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI2CisjLCBmdXp6eQorbXNnaWQgImVtcHR5IgorbXNnc3RyICLQn9GA0LDQt9C90L4iCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMjgKKyMsIGZ1enp5Cittc2dpZCAiU2VydmljZSBUeXBlOiIKK21zZ3N0ciAi0JLRgNGB0YLQsCDRg9GB0LvRg9Cz0LUiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMjkKKyMsIGZ1enp5Cittc2dpZCAiU2VydmljZSBOYW1lOiIKK21zZ3N0ciAi0J3QsNC30LjQsiDRg9GB0LvRg9Cz0LUiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMzAKKyMsIGZ1enp5Cittc2dpZCAiRG9tYWluIE5hbWU6IgorbXNnc3RyICLQlNC+0LzQtdC9IgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjMxCittc2dpZCAiSW50ZXJmYWNlOiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjMyCisjLCBmdXp6eQorbXNnaWQgIkFkZHJlc3M6IgorbXNnc3RyICLQkNC00YDQtdGB0LAiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTg1Cittc2dpZCAiQnJvd3NlIFNlcnZpY2UgVHlwZXMiCittc2dzdHIgItCf0YDQtdCz0LvQtdC00LDRmCDQstGA0YHRgtC1INGD0YHQu9GD0LPQsCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxODUKK21zZ2lkICJBIE5VTEwgdGVybWluYXRlZCBsaXN0IG9mIHNlcnZpY2UgdHlwZXMgdG8gYnJvd3NlIGZvciIKK21zZ3N0ciAi0KHQv9C40YHQsNC6INCy0YDRgdGC0LAg0YPRgdC70YPQs9CwINC30LAg0L/RgNC10LPQu9C10LTQsNGa0LUg0L7Qs9GA0LDQvdC40YfQtdC9INGB0LAgTlVMTCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxOTAKK21zZ2lkICJEb21haW4iCittc2dzdHIgItCU0L7QvNC10L0iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTkwCittc2dpZCAiVGhlIGRvbWFpbiB0byBicm93c2UgaW4sIG9yIE5VTEwgZm9yIHRoZSBkZWZhdWx0IGRvbWFpbiIKK21zZ3N0ciAi0JTQvtC80LXQvSDQt9CwINC/0YDQtdCz0LvQtdC00LDRmtC1LCDQuNC70LggTlVMTCDQt9CwINC/0L7QtNGA0LDQt9GD0LzQtdCy0LDQvdC4INC00L7QvNC10L0iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTk2Cittc2dpZCAiU2VydmljZSBUeXBlIgorbXNnc3RyICLQktGA0YHRgtCwINGD0YHQu9GD0LPQtSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxOTYKK21zZ2lkICJUaGUgc2VydmljZSB0eXBlIG9mIHRoZSBzZWxlY3RlZCBzZXJ2aWNlIgorbXNnc3RyICLQktGA0YHRgtCwINC40LfQsNCx0YDQsNC90LUg0YPRgdC70YPQs9C1IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIwMiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjEwMjMKK21zZ2lkICJTZXJ2aWNlIE5hbWUiCittc2dzdHIgItCd0LDQt9C40LIg0YPRgdC70YPQs9C1IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIwMgorbXNnaWQgIlRoZSBzZXJ2aWNlIG5hbWUgb2YgdGhlIHNlbGVjdGVkIHNlcnZpY2UiCittc2dzdHIgItCd0LDQt9C40LIg0LjQt9Cw0LHRgNCw0L3QtSDRg9GB0LvRg9Cz0LUiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjA4Cittc2dpZCAiQWRkcmVzcyIKK21zZ3N0ciAi0JDQtNGA0LXRgdCwIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIwOAorbXNnaWQgIlRoZSBhZGRyZXNzIG9mIHRoZSByZXNvbHZlZCBzZXJ2aWNlIgorbXNnc3RyICLQkNC00YDQtdGB0LAg0YDQsNC30YDQtdGI0LXQvdC1INGD0YHQu9GD0LPQtSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMTMKK21zZ2lkICJQb3J0IgorbXNnc3RyICLQn9C+0YDRgiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMTMKK21zZ2lkICJUaGUgSVAgcG9ydCBudW1iZXIgb2YgdGhlIHJlc29sdmVkIHNlcnZpY2UiCittc2dzdHIgItCR0YDQvtGYIElQINC/0L7RgNGC0LAg0YDQsNC30YDQtdGI0LXQvdC1INGD0YHQu9GD0LPQtSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMTkKK21zZ2lkICJIb3N0IE5hbWUiCittc2dzdHIgItCd0LDQt9C40LIg0LTQvtC80LDRm9C40L3QsCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMTkKK21zZ2lkICJUaGUgaG9zdCBuYW1lIG9mIHRoZSByZXNvbHZlZCBzZXJ2aWNlIgorbXNnc3RyICLQndCw0LfQuNCyINC00L7QvNCw0ZvQuNC90LAg0YDQsNC30YDQtdGI0LXQvdC1INGD0YHQu9GD0LPQtSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMjUKK21zZ2lkICJUWFQgRGF0YSIKK21zZ3N0ciAiVFhUINC/0L7QtNCw0YbQuCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMjUKK21zZ2lkICJUaGUgVFhUIGRhdGEgb2YgdGhlIHJlc29sdmVkIHNlcnZpY2UiCittc2dzdHIgIlRYVCDQv9C+0LTQsNGG0Lgg0YDQsNC30YDQtdGI0LXQvdC1INGD0YHQu9GD0LPQtSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMzAKKyMsIGZ1enp5Cittc2dpZCAiUmVzb2x2ZSBTZXJ2aWNlIgorbXNnc3RyICLQoNCw0LfRgNC10YjQuCDRg9GB0LvRg9Cz0YMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjMwCittc2dpZCAiUmVzb2x2ZSB0aGUgc2VsZWN0ZWQgc2VydmljZSBhdXRvbWF0aWNhbGx5IGJlZm9yZSByZXR1cm5pbmciCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMzYKKyMsIGZ1enp5Cittc2dpZCAiUmVzb2x2ZSBTZXJ2aWNlIEhvc3QgTmFtZSIKK21zZ3N0ciAi0KDQsNC30YDQtdGI0Lgg0L3QsNC30LjQsiDQtNC+0LzQsNGb0LjQvdCwINGD0YHQu9GD0LPQtSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMzYKK21zZ2lkICIiCisiUmVzb2x2ZSB0aGUgaG9zdCBuYW1lIG9mIHRoZSBzZWxlY3RlZCBzZXJ2aWNlIGF1dG9tYXRpY2FsbHkgYmVmb3JlIHJldHVybmluZyIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjI0MgorbXNnaWQgIkFkZHJlc3MgZmFtaWx5IgorbXNnc3RyICLQn9C+0YDQvtC00LjRhtCwINCw0LTRgNC10YHQsCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyNDIKK21zZ2lkICJUaGUgYWRkcmVzcyBmYW1pbHkgZm9yIGhvc3QgbmFtZSByZXNvbHV0aW9uIgorbXNnc3RyICLQn9C+0YDQvtC00LjRhtCwINCw0LTRgNC10YHQsCDQt9CwINGA0LDQt9GA0LXRiNCw0LLQsNGa0LUg0L3QsNC30LjQstCwINC00L7QvNCw0ZvQuNC90LAiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MzI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWhpIGNsaWVudCBmYWlsdXJlOiAlcyIKK21zZ3N0ciAi0JrQstCw0YAg0JDQstCw0YXQuCDQutC70LjRmNC10L3RgtCwOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzozODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaGkgcmVzb2x2ZXIgZmFpbHVyZTogJXMiCittc2dzdHIgItCa0LLQsNGAINCQ0LLQsNGF0Lgg0YDQsNC30YDQtdGI0LjQstCw0YfQsDogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyb3dzaW5nIGZvciBzZXJ2aWNlIHR5cGUgJXMgaW4gZG9tYWluICVzIGZhaWxlZDogJXMiCittc2dzdHIgItCf0YDQtdGC0YDQsNC20LjQstCw0ZrQtSDQt9CwINCy0YDRgdGC0L7QvCDRg9GB0LvRg9Cz0LUgJXMg0YMg0LTQvtC80LXQvdGDICVzINC90LXRg9GB0L/QtdGI0L3QvjogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NTE5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjE2OAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTY5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjE3OAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTc5Cittc2dpZCAibi9hIgorbXNnc3RyICLQvdC10L/QvtC30L3QsNGC0L4iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWhpIGRvbWFpbiBicm93c2VyIGZhaWx1cmU6ICVzIgorbXNnc3RyICLQmtCy0LDRgCDQkNCy0LDRhdC4INC/0YDQtdGC0YDQsNC20LjQstCw0YfQsCDQtNC+0LzQtdC90LA6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjY4NAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVhZCBBdmFoaSBkb21haW46ICVzIgorbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0YfQuNGC0LDRmtC1INCQ0LLQsNGF0Lgg0LTQvtC80LXQvdCwOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo3MDYKK21zZ2lkICJCcm93c2Ugc2VydmljZSB0eXBlIGxpc3QgaXMgZW1wdHkhIgorbXNnc3RyICLQodC/0LjRgdCw0Log0LLRgNGB0YLQsCDRgdC10YDQstC40YHQsCDQt9CwINC/0YDQtdCz0LvQtdC0INGY0LUg0L/RgNCw0LfQsNC9ISIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo3MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNvbm5lY3QgdG8gQXZhaGkgc2VydmVyOiAlcyIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INC/0L7QstC10LfQuNCy0LDRmtC1INC90LAg0JDQstCw0YXQuCDRgdC10YDQstC10YA6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjczNQorbXNnaWQgIkJyb3dzaW5nIGZvciBzZXJ2aWNlcyBvbiA8Yj5sb2NhbCBuZXR3b3JrPC9iPjoiCittc2dzdHIgItCf0YDQtdGC0YDQsNC20LjQstCw0ZrQtSDQt9CwINGD0YHQu9GD0LPQvtC8INC90LAgPGI+0LvQvtC60LDQu9C90L7RmCDQvNGA0LXQttC4PC9iPjoiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NzM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyb3dzaW5nIGZvciBzZXJ2aWNlcyBpbiBkb21haW4gPGI+JXM8L2I+OiIKK21zZ3N0ciAi0J/RgNC10YLRgNCw0LbQuNCy0LDRmtC1INC30LAg0YPRgdC70YPQs9C+0Lwg0YMg0LTQvtC80LXQvdGDIDxiPiVzPC9iPjoiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NzczCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgYnJvd3NlciBmb3IgJXM6ICVzIgorbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0L/RgNCw0LLRmdC10ZrQtSDQv9GA0LXRgtGA0LDQttC40LLQsNGH0LAg0LfQsCAlczogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6OTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgcmVzb2x2ZXIgZm9yICVzIG9mIHR5cGUgJXMgaW4gZG9tYWluICVzOiAlcyIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INC/0YDQsNCy0ZnQtdGa0LUg0YDQsNC30YDQtdGI0LjQstCw0YfQsCDQt9CwICVzINCy0YDRgdGC0LUgJXMg0YMg0LTQvtC80LXQvdGDICVzOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo5NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBkb21haW4gYnJvd3NlcjogJXMiCittc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDQv9GA0LDQstGZ0LXRmtC1INC/0YDQtdGC0YDQsNC20LjQstCw0YfQsCDQtNC+0LzQtdC90LA6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjk4OQorbXNnaWQgIkNoYW5nZSBkb21haW4iCittc2dzdHIgItCf0YDQvtC80LXQvdC4INC00L7QvNC10L0iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTAzMSAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNjIKK21zZ2lkICJCcm93c2luZy4uLiIKK21zZ3N0ciAi0J/RgNC10YLRgNCw0LbRg9GY0LXQvC4uLiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTIwCittc2dpZCAiSW5pdGlhbGl6aW5nLi4uIgorbXNnc3RyICLQn9C+0LrRgNC10ZvQtdC8Li4uIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNDQKK21zZ2lkICJMb2NhdGlvbiIKK21zZ3N0ciAi0JzQtdGB0YLQviIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTQ5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU1MworbXNnaWQgIk5hbWUiCittc2dzdHIgItCd0LDQt9C40LIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTE1NCAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NTMKK21zZ2lkICJUeXBlIgorbXNnc3RyICLQktGA0YHRgtCwIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNjYKK21zZ2lkICJfRG9tYWluLi4uIgorbXNnc3RyICJf0JTQvtC80LXQvS4uLiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBbb3B0aW9uc11cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLXMgLS1zc2ggICAgICAgICAgICAgQnJvd3NlIFNTSCBzZXJ2ZXJzXG4iCisiICAgIC12IC0tdm5jICAgICAgICAgICAgIEJyb3dzZSBWTkMgc2VydmVyc1xuIgorIiAgICAtUyAtLXNoZWxsICAgICAgICAgICBCcm93c2UgYm90aCBTU0ggYW5kIFZOQ1xuIgorIiAgICAtZCAtLWRvbWFpbj1ET01BSU4gICBUaGUgZG9tYWluIHRvIGJyb3dzZSBpblxuIgorbXNnc3RyICIiCisiJXMgW9C+0L/RhtC40ZjQtV1cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgINCf0YDQuNC60LDQttC4INC+0LLRgyDQv9C+0LzQvtGbXG4iCisiICAgIC1zIC0tc3NoICAgICAgICAgICAgICDQn9GA0LXRgtGA0LDQttC4IFNTSCDRgdC10YDQstC10YDQtVxuIgorIiAgICAtdiAtLXZuYyAgICAgICAgICAgICAg0J/RgNC10YLRgNCw0LbQuCBWTkMg0YHQtdGA0LLQtdGA0LVcbiIKKyIgICAgLVMgLS1zaGVsbCAgICAgICAgICAgINCf0YDQtdGC0YDQsNC20Lgg0LggU1NIINC4IFZOQ1xuIgorIiAgICAtZCAtLWRvbWFpbj3QlNCe0JzQldCdICAgICDQlNC+0LzQtdC9INGDINC60L7QvNC1INGb0LUg0YHQtSDQstGA0YjQuNGC0Lgg0L/RgNC10YLRgNCw0LbQuNCy0LDRmtC1XG4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxMDEgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6Nzc1CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvbyBtYW55IGFyZ3VtZW50c1xuIgorbXNnc3RyICLQn9GA0LXQstC40YjQtSDQsNGA0LPRg9C80LXQvdCw0YLQsFxuIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTQ5Cittc2dpZCAiQ2hvb3NlIFNoZWxsIFNlcnZlciIKK21zZ3N0ciAi0JjQt9Cw0LHQtdGA0LjRgtC1INGB0LXRgNCy0LXRgCDQutC+0LzQsNC90LTQvdC+0LMg0L7QutGA0YPQttC10ZrQsCIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE1MQorbXNnaWQgIkRlc2t0b3AiCittc2dzdHIgItCg0LDQtNC90LAg0L/QvtCy0YDRiNC40L3QsCIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE1MgorbXNnaWQgIlRlcm1pbmFsIgorbXNnc3RyICLQotC10YDQvNC40L3QsNC7IgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTU2Cittc2dpZCAiQ2hvb3NlIFZOQyBzZXJ2ZXIiCittc2dzdHIgItCY0LfQsNCx0LXRgNC40YLQtSBWTkMg0YHQtdGA0LLQtdGAIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTYxCittc2dpZCAiQ2hvb3NlIFNTSCBzZXJ2ZXIiCittc2dzdHIgItCY0LfQsNCx0LXRgNC40YLQtSBTU0gg0YHQtdGA0LLQtdGAIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbm5lY3RpbmcgdG8gJyVzJyAuLi5cbiIKK21zZ3N0ciAi0J/QvtCy0LXQt9GD0ZjQtdC8INGB0LUg0L3QsCDigJ4lc+KAnCAuLi5cbiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjI0MAorIywgYy1mb3JtYXQKK21zZ2lkICJleGVjbHAoKSBmYWlsZWQ6ICVzXG4iCittc2dzdHIgItCk0YPQvdC60YbQuNGY0LAgZXhlY2xwKCkg0L3QtdGD0YHQv9C10YjQvdCwOiAlc1xuIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbmNlbGVkLlxuIgorbXNnc3RyICLQntGC0LrQsNC30LDQvdC+LlxuIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmRlc2t0b3AuaW4uaW4uaDoxCittc2dpZCAiQXZhaGkgU1NIIFNlcnZlciBCcm93c2VyIgorbXNnc3RyICLQn9GA0LXRgtGA0LDQttC40LLQsNGHINCQ0LLQsNGF0LggU1NIINGB0LXRgNCy0LXRgNCwIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmRlc2t0b3AuaW4uaW4uaDoyCittc2dpZCAiQnJvd3NlIGZvciBaZXJvY29uZi1lbmFibGVkIFNTSCBTZXJ2ZXJzIgorbXNnc3RyICLQn9GA0LXRgtGA0LDQttGD0ZjQtdC8IFNTSCDRgdC10YDQstC10YDQtSDQvdCwINC60L7RmNC40LzQsCDRmNC1INC+0LzQvtCz0YPRm9C10L0gWmVyb2NvbmYiCisKKyM6IC4uL2F2YWhpLXVpL2J2bmMuZGVza3RvcC5pbi5pbi5oOjEKK21zZ2lkICJBdmFoaSBWTkMgU2VydmVyIEJyb3dzZXIiCittc2dzdHIgItCf0YDQtdGC0YDQsNC20LjQstCw0Ycg0JDQstCw0YXQuCBWTkMg0YHQtdGA0LLQtdGA0LAiCisKKyM6IC4uL2F2YWhpLXVpL2J2bmMuZGVza3RvcC5pbi5pbi5oOjIKK21zZ2lkICJCcm93c2UgZm9yIFplcm9jb25mLWVuYWJsZWQgVk5DIFNlcnZlcnMiCittc2dzdHIgItCf0YDQtdGC0YDQsNC20YPRmNC10LwgVk5DINGB0LXRgNCy0LXRgNC1INC90LAg0LrQvtGY0LjQvNCwINGY0LUg0L7QvNC+0LPRg9Gb0LXQvSBaZXJvY29uZiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIjogQWxsIGZvciBub3dcbiIKK21zZ3N0ciAiOiDQt9CwINGB0LDQtNCwINGB0LLQtVxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoxMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiOiBDYWNoZSBleGhhdXN0ZWRcbiIKK21zZ3N0ciAiOiDQutC10Ygg0ZjQtSDQv9GA0LXQv9GD0ZrQtdC9XG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjIzOSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgc2VydmljZSAnJXMnIG9mIHR5cGUgJyVzJyBpbiBkb21haW4gJyVzJzogJXNcbiIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INGA0LXQt9GA0LXRiNCw0LLQsNGa0LUg0YPRgdC70YPQs9C1IOKAniVz4oCcINCy0YDRgdGC0LUg4oCeJXPigJwg0YMg0LTQvtC80LXQvdGDIOKAniVz4oCcOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzozNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VydmljZV9icm93c2VyIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdCwINGE0YPQvdC60YbQuNGY0LAgc2VydmljZV9icm93c2VyOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzozNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXZhaGlfc2VydmljZV9icm93c2VyX25ldygpIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdCwINGE0YPQvdC60YbQuNGY0LAgYXZhaGlfc2VydmljZV9icm93c2VyX25ldygpOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VydmljZV90eXBlX2Jyb3dzZXIgZmFpbGVkOiAlc1xuIgorbXNnc3RyICLQndC10YPRgdC/0LXRiNC90LAg0YTRg9C90LrRhtC40ZjQsCBzZXJ2aWNlX3R5cGVfYnJvd3NlcjogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImF2YWhpX3NlcnZpY2VfdHlwZV9icm93c2VyX25ldygpIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdCwINGE0YPQvdC60YbQuNGY0LAgYXZhaGlfc2VydmljZV90eXBlX2Jyb3dzZXJfbmV3KCk6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjUxOQorIywgYy1mb3JtYXQKK21zZ2lkICJhdmFoaV9kb21haW5fYnJvd3Nlcl9uZXcoKSBmYWlsZWQ6ICVzXG4iCittc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QsCDRhNGD0L3QutGG0LjRmNCwIGF2YWhpX2RvbWFpbl9icm93c2VyX25ldygpOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1MzUgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjM5NAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI4MCAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBxdWVyeSB2ZXJzaW9uIHN0cmluZzogJXNcbiIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INC40LfQstGA0YjQsNCy0LDRmtC1INGD0L/QuNGC0LAg0LfQsCDQvdC40YHQutC+0Lwg0LLQtdGA0LfQuNGY0LU6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU0MCAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6Mzk5CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6Mjg1IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxNzMKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IGhvc3QgbmFtZTogJXNcbiIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INC40LfQstGA0YjQsNCy0LDRmtC1INGD0L/QuNGC0LAg0LfQsCDQvdCw0LfQuNCy0L7QvCDQtNC+0LzQsNGb0LjQvdCwOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NDQgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjQwMworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI4OSAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlcnZlciB2ZXJzaW9uOiAlczsgSG9zdCBuYW1lOiAlc1xuIgorbXNnc3RyICLQktC10YDQt9C40ZjQsCDRgdC10YDQstC10YDQsCA6ICVzOyDQvdCw0LfQuNCyINC00L7QvNCw0ZvQuNC90LA6ICVzXG4iCisKKyMuIFRyYW5zbGF0b3JzOiBUaGlzIGlzIGEgY29sdW1uIGhlYWRpbmcgd2l0aCBhYmJyZXZpYXRpb25zIGZvcgorIy4gKiAgIEV2ZW50ICgrLy0pLCBOZXR3b3JrIEludGVyZmFjZSwgUHJvdG9jb2wgKElQdjQvdjYpLCBEb21haW4KKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU0OQorIywgYy1mb3JtYXQKK21zZ2lkICJFIElmY2UgUHJvdCBEb21haW5cbiIKK21zZ3N0ciAi0JQg0KHQv9GAINCf0YDQvtGCINCU0L7QvNC10L1cbiIKKworIy4gVHJhbnNsYXRvcnM6IFRoaXMgaXMgYSBjb2x1bW4gaGVhZGluZyB3aXRoIGFiYnJldmlhdGlvbnMgZm9yCisjLiAqICAgRXZlbnQgKCsvLSksIE5ldHdvcmsgSW50ZXJmYWNlLCBQcm90b2NvbCAoSVB2NC92NiksIERvbWFpbgorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUgSWZjZSBQcm90ICUtKnMgJS0yMHMgRG9tYWluXG4iCittc2dzdHIgItCUINCh0L/RgCDQn9GA0L7RgiAlLSpzICUtMjBzINCU0L7QvNC10L1cbiIKKworIy4gV2UgaGF2ZSBiZWVuIGRpc2Nvbm5lY3RlZCwgc28gbGV0IHJlY29ubmVjdAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTg1IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGlzY29ubmVjdGVkLCByZWNvbm5lY3RpbmcgLi4uXG4iCittc2dzdHIgItCd0LXQv9C+0LLQtdC30LDQvSwg0L/QvtC90L7QstC90L4g0L/QvtCy0LXQt9C40LLQsNGa0LUgLi4uXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU5OSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo4MjkKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxNzAgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjM4NgorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI3MiAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTYwCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgY2xpZW50IG9iamVjdDogJXNcbiIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INC/0YDQsNCy0ZnQtdGa0LUg0L7QsdGY0LXQutGC0LAg0LrQu9C40ZjQtdC90YLQsDogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NjA0IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxNzUKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoxNDMgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNsaWVudCBmYWlsdXJlLCBleGl0aW5nOiAlc1xuIgorbXNnc3RyICLQmtCy0LDRgCDQutC70LjRmNC10L3RgtCwLCDQuNC30LvQsNC30LjQvDogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NjIzIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoyMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FpdGluZyBmb3IgZGFlbW9uIC4uLlxuIgorbXNnc3RyICLQp9C10LrQsNC8INC90LAg0YHQuNGB0YLQtdC80YHQutGDINGD0YHQu9GD0LPRgyAuLi5cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NjQ3Cittc2dpZCAiIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLUQgLS1icm93c2UtZG9tYWlucyAgQnJvd3NlIGZvciBicm93c2luZyBkb21haW5zIGluc3RlYWQgb2Ygc2VydmljZXNcbiIKKyIgICAgLWEgLS1hbGwgICAgICAgICAgICAgU2hvdyBhbGwgc2VydmljZXMsIHJlZ2FyZGxlc3Mgb2YgdGhlIHR5cGVcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgVGhlIGRvbWFpbiB0byBicm93c2UgaW5cbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgRW5hYmxlIHZlcmJvc2UgbW9kZVxuIgorIiAgICAtdCAtLXRlcm1pbmF0ZSAgICAgICBUZXJtaW5hdGUgYWZ0ZXIgZHVtcGluZyBhIG1vcmUgb3IgbGVzcyBjb21wbGV0ZSAiCisibGlzdFxuIgorIiAgICAtYyAtLWNhY2hlICAgICAgICAgICBUZXJtaW5hdGUgYWZ0ZXIgZHVtcGluZyBhbGwgZW50cmllcyBmcm9tIHRoZSBjYWNoZVxuIgorIiAgICAtbCAtLWlnbm9yZS1sb2NhbCAgICBJZ25vcmUgbG9jYWwgc2VydmljZXNcbiIKKyIgICAgLXIgLS1yZXNvbHZlICAgICAgICAgUmVzb2x2ZSBzZXJ2aWNlcyBmb3VuZFxuIgorIiAgICAtZiAtLW5vLWZhaWwgICAgICAgICBEb24ndCBmYWlsIGlmIHRoZSBkYWVtb24gaXMgbm90IGF2YWlsYWJsZVxuIgorIiAgICAtcCAtLXBhcnNhYmxlICAgICAgICBPdXRwdXQgaW4gcGFyc2FibGUgZm9ybWF0XG4iCittc2dzdHIgIiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgINCf0YDQuNC60LDQttC4INC+0LLRgyDQv9C+0LzQvtGbXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgICDQn9GA0LjQutCw0LbQuCDQstC10YDQt9C40ZjRg1xuIgorIiAgICAtRCAtLWJyb3dzZS1kb21haW5zICAg0J/RgNC10YLRgNCw0LbQuCDQtNC+0LzQtdC90LUg0LrQvtGY0Lgg0YHQtSDQvNC+0LPRgyDQv9GA0LXRgtGA0LDQttC40LLQsNGC0Lgg0YPQvNC10YHRgtC+ICIKKyLRg9GB0LvRg9Cz0LBcbiIKKyIgICAgLWEgLS1hbGwgICAgICAgICAgICAgINCf0YDQuNC60LDQttC4INGB0LLQtSDRg9GB0LvRg9Cz0LUsINCx0LXQtyDQvtCx0LfQuNGA0LAg0L3QsCDQstGA0YHRgtGDXG4iCisiICAgIC1kIC0tZG9tYWluPdCU0J7QnNCV0J0gICAgINCU0L7QvNC10L0g0LfQsCDQv9GA0LXRgtGA0LDQttC40LLQsNGa0LVcbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgINCj0LrRmdGD0YfQuCDRgNC10LbQuNC8INC+0L/RiNC40YDQvdC+0LMg0LjRgdC/0LjRgdCwXG4iCisiICAgIC10IC0tdGVybWluYXRlICAgICAgICDQn9GA0LXQutC40L3QuCDQv9C+0YHQu9C1INC40LfQsdCw0YbQuNCy0LDRmtCwINCy0LjRiNC1INC40LvQuCDQvNCw0ZrQtSDQt9Cw0LLRgNGI0LXQvdC1ICIKKyLQu9C40YHRgtC1XG4iCisiICAgIC1jIC0tY2FjaGUgICAgICAgICAgICDQn9GA0LXQutC40L3QuCDQv9C+0YHQu9C1INC40LfQsdCw0YbQuNCy0LDRmtCwINGB0LLQuNGFINC30LDQv9C40YHQsCDQuNC3INC60LXRiNCwXG4iCisiICAgIC1sIC0taWdub3JlLWxvY2FsICAgICDQmNCz0L3QvtGA0LjRiNC4INC70L7QutCw0LvQvdC1INGD0YHQu9GD0LPQtVxuIgorIiAgICAtciAtLXJlc29sdmUgICAgICAgICAg0KDQsNC30YDQtdGI0Lgg0L/RgNC+0L3QsNGS0LXQvdC1INGD0YHQu9GD0LPQtVxuIgorIiAgICAtZiAtLW5vLWZhaWwgICAgICAgICAg0J3QtdC80L7RmCDQtNCwINC+0YLQutCw0LbQtdGIINCw0LrQviDRgdC40YHRgtC10LzRgdC60LAg0YPRgdC70YPQs9CwINC90LjRmNC1ICIKKyLQtNC+0YHRgtGD0L/QvdCwXG4iCisiICAgIC1wIC0tcGFyc2FibGUgICAgICAgICDQmNC30LvQsNC3INGDINGE0L7RgNC80LDRgtGDINC60L7RmNC4INGB0LUg0LzQvtC20LUg0YDQsNGI0YfQu9Cw0L3QuNGC0LhcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NjYwCittc2dpZCAiIgorIiAgICAtayAtLW5vLWRiLWxvb2t1cCAgICBEb24ndCBsb29rdXAgc2VydmljZSB0eXBlc1xuIgorIiAgICAtYiAtLWR1bXAtZGIgICAgICAgICBEdW1wIHNlcnZpY2UgdHlwZSBkYXRhYmFzZVxuIgorbXNnc3RyICIiCisiICAgIC1rIC0tbm8tZGItbG9va3VwICAgICDQndC10LzQvtGYINGC0YDQsNC20LjRgtC4INCy0YDRgdGC0LUg0YPRgdC70YPQs9C1XG4iCisiICAgIC1iIC0tZHVtcC1kYiAgICAgICAgICDQmNC30LHQsNGG0Lgg0LHQsNC30YMg0L/QvtC00LDRgtCw0LrQsCDQstGA0YHRgtC1INGD0YHQu9GD0LPQtVxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo3NjYgLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjIxOQorIywgYy1mb3JtYXQKK21zZ2lkICJUb28gZmV3IGFyZ3VtZW50c1xuIgorbXNnc3RyICLQodGD0LLQuNGI0LUg0LzQsNC70L4g0LDRgNCz0YPQvNC10L3QsNGC0LBcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6ODIxIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozNzgKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyNjQgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIHNpbXBsZSBwb2xsIG9iamVjdC5cbiIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INC/0YDQsNCy0ZnQtdGa0LUg0L7QsdGY0LXQutGC0LAg0ZjQtdC00L3QvtGB0YLQsNCy0L3QtSDQsNC90LrQtdGC0LUuXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo3NgorIywgYy1mb3JtYXQKK21zZ2lkICJFc3RhYmxpc2hlZCB1bmRlciBuYW1lICclcydcbiIKK21zZ3N0ciAi0KPRgdC/0L7RgdGC0LDQstGZ0LXQvdC+INC/0L7QtCDQuNC80LXQvdC+0Lwg4oCeJXPigJxcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlcjogJXNcbiIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdCwINGA0LXQs9C40YHRgtGA0LDRhtC40ZjQsDogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIk5hbWUgY29sbGlzaW9uLCBwaWNraW5nIG5ldyBuYW1lICclcycuXG4iCittc2dzdHIgItCh0YPQutC+0LEg0L3QsNC30LjQstCwLCDRg9C30LjQvNCw0Lwg0L3QvtCy0Lgg0L3QsNC30LjQsiDigJ4lc+KAnC5cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGVudHJ5IGdyb3VwOiAlc1xuIgorbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0L/RgNCw0LLRmdC10ZrQtSDQt9Cw0L/QuNGB0LAg0LPRgNGD0L/QtTogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjEyNAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gYWRkIGFkZHJlc3M6ICVzXG4iCittc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDQtNC+0LTQsNCy0LDRmtC1INCw0LTRgNC10YHQtTogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gYWRkIHNlcnZpY2U6ICVzXG4iCittc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDQtNC+0LTQsNCy0LDRmtC1INGD0YHQu9GD0LPQtTogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE0MAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gYWRkIHN1YnR5cGUgJyVzJzogJXNcbiIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INC00L7QtNCw0LLQsNGa0LUg0L/QvtC00LLRgNGB0YLQtSDigJ4lc+KAnDogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE5MQorIywgYy1mb3JtYXQKK21zZ2lkICJIb3N0IG5hbWUgY29uZmxpY3RcbiIKK21zZ3N0ciAi0KHRg9C60L7QsSDQvdCw0LfQuNCy0LAg0LTQvtC80LDRm9C40L3QsFxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MjE2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgW29wdGlvbnNdICVzIDxuYW1lPiA8dHlwZT4gPHBvcnQ+IFs8dHh0IC4uLj5dXG4iCisiJXMgW29wdGlvbnNdICVzIDxob3N0LW5hbWU+IDxhZGRyZXNzPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLXMgLS1zZXJ2aWNlICAgICAgICAgUHVibGlzaCBzZXJ2aWNlXG4iCisiICAgIC1hIC0tYWRkcmVzcyAgICAgICAgIFB1Ymxpc2ggYWRkcmVzc1xuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBFbmFibGUgdmVyYm9zZSBtb2RlXG4iCisiICAgIC1kIC0tZG9tYWluPURPTUFJTiAgIERvbWFpbiB0byBwdWJsaXNoIHNlcnZpY2UgaW5cbiIKKyIgICAgLUggLS1ob3N0PURPTUFJTiAgICAgSG9zdCB3aGVyZSBzZXJ2aWNlIHJlc2lkZXNcbiIKKyIgICAgICAgLS1zdWJ0eXBlPVNVQlRZUEUgQW4gYWRkaXRpb25hbCBzdWJ0eXBlIHRvIHJlZ2lzdGVyIHRoaXMgc2VydmljZSAiCisid2l0aFxuIgorIiAgICAtUiAtLW5vLXJldmVyc2UgICAgICBEbyBub3QgcHVibGlzaCByZXZlcnNlIGVudHJ5IHdpdGggYWRkcmVzc1xuIgorIiAgICAtZiAtLW5vLWZhaWwgICAgICAgICBEb24ndCBmYWlsIGlmIHRoZSBkYWVtb24gaXMgbm90IGF2YWlsYWJsZVxuIgorbXNnc3RyICIiCisiJXMgW9C+0L/RhtC40ZjQtV0gJXMgPNC90LDQt9C40LI+IDzQstGA0YHRgtCwPiA80L/QvtGA0YI+IFs8dHh0IC4uLj5dXG4iCisiJXMgW9C+0L/RhtC40ZjQtV0gJXMgPNC90LDQt9C40LIt0LTQvtC80LDRm9C40L3QsD4gPNCw0LTRgNC10YHQsD5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgINCf0YDQuNC60LDQttC4INC+0LLRgyDQv9C+0LzQvtGbXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgICDQn9GA0LjQutCw0LbQuCDQstC10YDQt9C40ZjRg1xuIgorIiAgICAtcyAtLXNlcnZpY2UgICAgICAgICAg0J7QsdGY0LDQstC4INGD0YHQu9GD0LPRg1xuIgorIiAgICAtYSAtLWFkZHJlc3MgICAgICAgICAg0J7QsdGY0LDQstC4INCw0LTRgNC10YHRg1xuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICAg0KPQutGZ0YPRh9C4INGA0LXQttC40Lwg0L7Qv9GI0LjRgNC90L7QsyDQuNGB0L/QuNGB0LBcbiIKKyIgICAgLWQgLS1kb21haW490JTQntCc0JXQnSAgICAg0JTQvtC80LXQvSDRgyDQutC+0ZjQtdC8INGb0LUg0YHQtSDQvtCx0ZjQsNCy0LjRgtC4INGD0YHQu9GD0LPQtVxuIgorIiAgICAtSCAtLWhvc3Q90JTQntCc0JXQnSAgICAgICDQlNC+0LzQsNGb0LjQvSDQvdCwINC60L7RmNC10Lwg0YHQtSDQvdCw0LvQsNC30LUg0YPRgdC70YPQs9C1XG4iCisiICAgICAgIC0tc3VidHlwZT3Qn9Ce0JTQktCg0KHQotCQINCU0L7QtNCw0YLQvdCwINC/0L7QtNCy0YDRgdGC0LAg0YHQsCDQutC+0ZjQvtC8INGb0LUg0YHQtSDRgNC10LPQuNGB0YLRgNC+0LLQsNGC0Lgg0L7QstCwICIKKyLRg9GB0LvRg9Cz0LBcbiIKKyIgICAgLWYgLS1uby1mYWlsICAgICAgICAgINCd0LXQvNC+0Zgg0LTQsCDQvtGC0LrQsNC20LXRiCDQsNC60L4g0YHQuNGB0YLQtdC80YHQutCwINGD0YHQu9GD0LPQsCDQvdC40ZjQtSAiCisi0LTQvtGB0YLRg9C/0L3QsFxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MzAzIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIG51bWJlciBvZiBhcmd1bWVudHNcbiIKK21zZ3N0ciAi0JvQvtGIINCx0YDQvtGYINCw0YDQs9GD0LzQtdC90LDRgtCwXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIHBvcnQgbnVtYmVyOiAlc1xuIgorbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0YDQsNC30YDQtdGI0LDQstCw0ZrQtSDQsdGA0L7RmNCwINC/0YDQuNC60ZnRg9GH0LrQsDogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjM2MSAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGNvbW1hbmQgc3BlY2lmaWVkLlxuIgorbXNnc3RyICLQmtC+0LzQsNC90LTQsCDQvdC40ZjQtSDQvtC00YDQtdGS0LXQvdCwLlxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgaG9zdCBuYW1lICclcyc6ICVzXG4iCittc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDRgNCw0LfRgNC10YjQsNCy0LDRmtC1INC90LDQt9C40LLQsCDQtNC+0LzQsNGb0LjQvdCwIOKAniVz4oCcOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIGFkZHJlc3MgJyVzJzogJXNcbiIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INGA0LDQt9GA0LXRiNCw0LLQsNGa0LUg0LDQtNGA0LXRgdC1IOKAniVz4oCcOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBbb3B0aW9uc10gJXMgPGhvc3QgbmFtZSAuLi4+XG4iCisiJXMgW29wdGlvbnNdICVzIDxhZGRyZXNzIC4uLiA+XG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFNob3cgdmVyc2lvblxuIgorIiAgICAtbiAtLW5hbWUgICAgICAgICAgICBSZXNvbHZlIGhvc3QgbmFtZVxuIgorIiAgICAtYSAtLWFkZHJlc3MgICAgICAgICBSZXNvbHZlIGFkZHJlc3NcbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgRW5hYmxlIHZlcmJvc2UgbW9kZVxuIgorIiAgICAtNiAgICAgICAgICAgICAgICAgICBMb29rdXAgSVB2NiBhZGRyZXNzXG4iCisiICAgIC00ICAgICAgICAgICAgICAgICAgIExvb2t1cCBJUHY0IGFkZHJlc3NcbiIKK21zZ3N0ciAiIgorIiVzIFvQvtC/0YbQuNGY0LVdICVzIDzQvdCw0LfQuNCyINC00L7QvNCw0ZvQuNC90LAgLi4uPlxuIgorIiVzIFvQvtC/0YbQuNGY0LVdICVzIDzQsNC00YDQtdGB0LAgLi4uID5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgINCf0YDQuNC60LDQttC4INC+0LLRgyDQv9C+0LzQvtGbXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgICDQn9GA0LjQutCw0LbQuCDQstC10YDQt9C40ZjRg1xuIgorIiAgICAtbiAtLW5hbWUgICAgICAgICAgICAg0KDQsNC30YDQtdGI0Lgg0L3QsNC30LjQsiDQtNC+0LzQsNGb0LjQvdCwXG4iCisiICAgIC1hIC0tYWRkcmVzcyAgICAgICAgICDQoNCw0LfRgNC10YjQuCDQsNC00YDQtdGB0YNcbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgINCj0LrRmdGD0YfQuCDRgNC10LbQuNC8INC+0L/RiNC40YDQvdC+0LMg0LjRgdC/0LjRgdCwXG4iCisiICAgIC02ICAgICAgICAgICAgICAgICAgICDQotGA0LDQttC4IElQdjYg0LDQtNGA0LXRgdGDXG4iCisiICAgIC00ICAgICAgICAgICAgICAgICAgICDQotGA0LDQttC4IElQdjQg0LDQtNGA0LXRgdGDXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyOTkgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE4MQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGhvc3QgbmFtZSByZXNvbHZlcjogJXNcbiIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INC/0YDQsNCy0ZnQtdGa0LUg0YDQsNC30YDQtdGI0LjQstCw0YfQsCDQvdCw0LfQuNCy0LAg0LTQvtC80LDRm9C40L3QsDogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjMwOQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcGFyc2UgYWRkcmVzcyAnJXMnXG4iCittc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDRgNCw0YjRh9C70LDRmtC40LLQsNGa0LUg0LDQtNGA0LXRgdC1IOKAniVz4oCcXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzozMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBhZGRyZXNzIHJlc29sdmVyOiAlc1xuIgorbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0L/RgNCw0LLRmdC10ZrQtSDRgNCw0LfRgNC10YjQuNCy0LDRh9CwINCw0LTRgNC10YHQtTogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBbb3B0aW9uc10gPG5ldyBob3N0IG5hbWU+XG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFNob3cgdmVyc2lvblxuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBFbmFibGUgdmVyYm9zZSBtb2RlXG4iCittc2dzdHIgIiIKKyIlcyBb0L7Qv9GG0LjRmNC1XSA80L3QvtCy0Lgg0L3QsNC30LjQsiDQtNC+0LzQsNGb0LjQvdCwPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICAg0J/RgNC40LrQsNC20Lgg0L7QstGDINC/0L7QvNC+0ZtcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgINCf0YDQuNC60LDQttC4INCy0LXRgNC30LjRmNGDXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgICDQo9C60ZnRg9GH0Lgg0YDQtdC20LjQvCDQvtC/0YjQuNGA0L3QvtCzINC40YHQv9C40YHQsFxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cywgZXhwZWN0aW5nIGV4YWN0bHkgb25lLlxuIgorbXNnc3RyICLQndC10LjRgdC/0YDQsNCy0LDQvSDQsdGA0L7RmCDQsNGA0LPRg9C80LXQvdCw0YLQsCwg0L7Rh9C10LrRg9GY0LXQvCDRgtCw0YfQvdC+INGY0LXQtNCw0L0uXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSG9zdCBuYW1lIHN1Y2Nlc3NmdWxseSBjaGFuZ2VkIHRvICVzXG4iCittc2dzdHIgItCd0LDQt9C40LIg0LTQvtC80LDRm9C40L3QsCDRg9GB0L/QtdGI0L3QviDQv9GA0L7QvNC10ZrQtdC9INGDICVzXG4iCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvcG8vc3JAbGF0aW4ucG8gYi9hdmFoaS0wLjYuMzEvcG8vc3JAbGF0aW4ucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM3YzczYwotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9wby9zckBsYXRpbi5wbwpAQCAtMCwwICsxLDg2NSBAQAorIyBTZXJiaWFuKExhdGluKSB0cmFuc2xhdGlvbnMgZm9yIGF2YWhpCisjIENvcHlyaWdodCAoQykgMjAwNiBSZWQgSGF0LCBJbmMuCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBhdmFoaSBwYWNrYWdlLgorIyBOaWtvbGEgUGFqdGnEhyA8c2FsZ2VyYXNAZ21haWwuY29tPiwgMjAwOC4KKyMgTWlsb3MgTWlqYXRvdmljIDxtaWphdGl4QGdtYWlsLmNvbT4sIDIwMDguCisjIE1pbG/FoSBLb21hcsSNZXZpxIcgPGttaWxvc0BnbWFpbC5jb20+LCAyMDA5LgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogYXZhaGlcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTEtMDQtMDIgMDM6MjMrMDIwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDktMDMtMjEgMTU6NTgrMDEwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogTWlsb8WhIEtvbWFyxI1ldmnEhyA8a21pbG9zQGdtYWlsLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBTZXJiaWFuIChzcikgPGZlZG9yYS10cmFucy1zckByZWRoYXQuY29tPlxuIgorIkxhbmd1YWdlOiBcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTM7IHBsdXJhbD0obiUxMD09MSAmJiBuJTEwMCE9MTEgPyAwIDogbiUxMD49MiAmJiBuIgorIiUxMDw9NCAmJiAobiUxMDA8MTAgfHwgbiUxMDA+PTIwKSA/IDEgOiAyKTtcbiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzAKK21zZ2lkICJPSyIKK21zZ3N0ciAiVSByZWR1IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozMQorbXNnaWQgIk9wZXJhdGlvbiBmYWlsZWQiCittc2dzdHIgIk9wZXJhY2lqYSBuZXVzcGXFoW5hIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozMgorbXNnaWQgIkJhZCBzdGF0ZSIKK21zZ3N0ciAiTG/FoWUgc3RhbmplIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozMworbXNnaWQgIkludmFsaWQgaG9zdCBuYW1lIgorbXNnc3RyICJOZWlzcHJhdmFuIG5heml2IGRvbWHEh2luYSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzQKK21zZ2lkICJJbnZhbGlkIGRvbWFpbiBuYW1lIgorbXNnc3RyICJOZWlzcHJhdmFuIG5heml2IGRvbWVuYSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzUKK21zZ2lkICJObyBzdWl0YWJsZSBuZXR3b3JrIHByb3RvY29sIGF2YWlsYWJsZSIKK21zZ3N0ciAiT2Rnb3ZhcmFqdcSHaSBtcmXFvm5pIHByb3Rva29sIG5pamUgZG9zdHVwYW4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM2Cittc2dpZCAiSW52YWxpZCBETlMgVFRMIgorbXNnc3RyICJOZWlzcHJhdmFuIEROUyBUVEwiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM3Cittc2dpZCAiUmVzb3VyY2UgcmVjb3JkIGtleSBpcyBwYXR0ZXJuIgorbXNnc3RyICJLbGp1xI0gemFwaXNhIHJlc3Vyc2EgamUgxaFhYmxvbiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzgKK21zZ2lkICJMb2NhbCBuYW1lIGNvbGxpc2lvbiIKK21zZ3N0ciAiU3Vrb2IgbG9rYWxuaWggbmF6aXZhIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozOQorbXNnaWQgIkludmFsaWQgcmVjb3JkIgorbXNnc3RyICJOZWlzcHJhdmFuIHphcGlzIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0MQorbXNnaWQgIkludmFsaWQgc2VydmljZSBuYW1lIgorbXNnc3RyICJOZWlzcHJhdmFuIG5heml2IHVzbHVnZSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDIKK21zZ2lkICJJbnZhbGlkIHNlcnZpY2UgdHlwZSIKK21zZ3N0ciAiTmVpc3ByYXZuYSB2cnN0YSB1c2x1Z2UiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQzCittc2dpZCAiSW52YWxpZCBwb3J0IG51bWJlciIKK21zZ3N0ciAiTmVpc3ByYXZhbiBicm9qIHByaWtsanXEjWthIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NAorbXNnaWQgIkludmFsaWQgcmVjb3JkIGtleSIKK21zZ3N0ciAiTmVpc3ByYXZhbiBrbGp1xI0gemFwaXNhIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NQorbXNnaWQgIkludmFsaWQgYWRkcmVzcyIKK21zZ3N0ciAiTmV0YcSNbmEgYWRyZXNhIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NgorbXNnaWQgIlRpbWVvdXQgcmVhY2hlZCIKK21zZ3N0ciAiUGF1emEgamUgZG9zdGlnbnV0YSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDcKK21zZ2lkICJUb28gbWFueSBjbGllbnRzIgorbXNnc3RyICJQcmV2acWhZSBrbGlqZW5hdGEiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQ4Cittc2dpZCAiVG9vIG1hbnkgb2JqZWN0cyIKK21zZ3N0ciAiUHJldmnFoWUgb2JqZWthdGEiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQ5Cittc2dpZCAiVG9vIG1hbnkgZW50cmllcyIKK21zZ3N0ciAiUHJldmnFoWUgemFwaXNhIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1MAorbXNnaWQgIk9TIEVycm9yIgorbXNnc3RyICJHcmXFoWthIG9wZXJhdGl2bm9nIHNpc3RlbWEiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjUyCittc2dpZCAiQWNjZXNzIGRlbmllZCIKK21zZ3N0ciAiWmFicmFuamVuIHByaXN0dXAiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjUzCittc2dpZCAiSW52YWxpZCBvcGVyYXRpb24iCittc2dzdHIgIk5ldGHEjW5hIG9wZXJhY2lqYSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTQKK21zZ2lkICJBbiB1bmV4cGVjdGVkIEQtQnVzIGVycm9yIG9jY3VyZWQiCittc2dzdHIgIkRlc2lsYSBzZSBuZW/EjWVraXZhbmEgZ3JlxaFrYSB1IEQtQnVzIHNvZnR2ZXJ1IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1NQorbXNnaWQgIkRhZW1vbiBjb25uZWN0aW9uIGZhaWxlZCIKK21zZ3N0ciAiUG92ZXppdmFuamUgc2lzdGVtc2tlIHVzbHVnZSBuZXVzcGXFoW5vIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1NgorbXNnaWQgIk1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIk1lbW9yaWphIHByZXB1bmplbmEiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU3Cittc2dpZCAiVGhlIG9iamVjdCBwYXNzZWQgaW4gd2FzIG5vdCB2YWxpZCIKK21zZ3N0ciAiUHJlbm9zIG9iamVrdGEgbmlqZSBiaW8gaXNwcmF2YW4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU4Cittc2dpZCAiRGFlbW9uIG5vdCBydW5uaW5nIgorbXNnc3RyICJTaXN0ZW1za2EgdXNsdWdhIHNlIG5lIHBva3JlxIdlIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1OQorbXNnaWQgIkludmFsaWQgaW50ZXJmYWNlIGluZGV4IgorbXNnc3RyICJOZWlzcHJhdmFuIGluZGVrcyBzcHJlZ2UiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjYwCittc2dpZCAiSW52YWxpZCBwcm90b2NvbCBzcGVjaWZpY2F0aW9uIgorbXNnc3RyICJOZWlzcHJhdm5hIHNwZWNpZmlrYWNpamEgcHJvdG9rb2xhIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2MQorbXNnaWQgIkludmFsaWQgZmxhZ3MiCittc2dzdHIgIk5laXNwcmF2bmkgaW5kaWthdG9yaSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjMKK21zZ2lkICJOb3QgZm91bmQiCittc2dzdHIgIk5pamUgcHJvbmHEkWVubyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjQKK21zZ2lkICJJbnZhbGlkIGNvbmZpZ3VyYXRpb24iCittc2dzdHIgIk5laXNwcmF2bm8gcG9kZcWhYXZhbmplIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2NQorbXNnaWQgIlZlcnNpb24gbWlzbWF0Y2giCittc2dzdHIgIk5lc2xhZ2FuamUgdmVyemlqZSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjYKK21zZ2lkICJJbnZhbGlkIHNlcnZpY2Ugc3VidHlwZSIKK21zZ3N0ciAiTmVpc3ByYXZuYSBwb2R2cnN0YSB1c2x1Z2EiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY3Cittc2dpZCAiSW52YWxpZCBwYWNrZXQiCittc2dzdHIgIk5laXNwcmF2YW4gcGFrZXQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY4Cittc2dpZCAiSW52YWxpZCBETlMgcmV0dXJuIGNvZGUiCittc2dzdHIgIk5laXNwcmF2YW4gcG92cmF0bmkga29kIEROUyB1c2x1Z2UiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY5Cittc2dpZCAiRE5TIGZhaWx1cmU6IEZPUk1FUlIiCittc2dzdHIgIkROUyBrdmFyOiBGT1JNRVJSIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3MAorbXNnaWQgIkROUyBmYWlsdXJlOiBTRVJWRkFJTCIKK21zZ3N0ciAiRE5TIGt2YXI6IFNFUlZGQUlMIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3MQorbXNnaWQgIkROUyBmYWlsdXJlOiBOWERPTUFJTiIKK21zZ3N0ciAiRE5TIGt2YXI6IE5YRE9NQUlOIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3MgorbXNnaWQgIkROUyBmYWlsdXJlOiBOT1RJTVAiCittc2dzdHIgIkROUyBrdmFyOiBOT1RJTVAiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc0Cittc2dpZCAiRE5TIGZhaWx1cmU6IFJFRlVTRUQiCittc2dzdHIgIkROUyBrdmFyOiBSRUZVU0VEIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3NQorbXNnaWQgIkROUyBmYWlsdXJlOiBZWERPTUFJTiIKK21zZ3N0ciAiRE5TIGt2YXI6IFlYRE9NQUlOIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3NgorbXNnaWQgIkROUyBmYWlsdXJlOiBZWFJSU0VUIgorbXNnc3RyICJETlMga3ZhcjogWVhSUlNFVCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzcKK21zZ2lkICJETlMgZmFpbHVyZTogTlhSUlNFVCIKK21zZ3N0ciAiRE5TIGt2YXI6IE5YUlJTRVQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc4Cittc2dpZCAiRE5TIGZhaWx1cmU6IE5PVEFVVEgiCittc2dzdHIgIkROUyBrdmFyOiBOT1RBVVRIIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3OQorbXNnaWQgIkROUyBmYWlsdXJlOiBOT1RaT05FIgorbXNnc3RyICJETlMga3ZhcjogTk9UWk9ORSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODAKK21zZ2lkICJJbnZhbGlkIFJEQVRBIgorbXNnc3RyICJOZWlzcHJhdm5hIFJEQVRBIHZyc3RhIHBvZGF0YWthIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4MQorbXNnaWQgIkludmFsaWQgRE5TIHR5cGUiCittc2dzdHIgIk5laXNwcmF2bmEgdnJzdGEgRE5TIHVzbHVnZSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODIKK21zZ2lkICJJbnZhbGlkIEROUyBjbGFzcyIKK21zZ3N0ciAiTmVpc3ByYXZuYSBrbGFzYSBETlMgdXNsdWdlIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4MworbXNnaWQgIk5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIk5pamUgcG9kcsW+YW5vIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4NQorbXNnaWQgIk5vdCBwZXJtaXR0ZWQiCittc2dzdHIgIk5pamUgZG96dm9samVubyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODYKK21zZ2lkICJJbnZhbGlkIGFyZ3VtZW50IgorbXNnc3RyICJOZWlzcHJhdmFuIGFyZ3VtZW50IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4NworbXNnaWQgIklzIGVtcHR5IgorbXNnc3RyICJQcmF6bm8iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjg4Cittc2dpZCAiVGhlIHJlcXVlc3RlZCBvcGVyYXRpb24gaXMgaW52YWxpZCBiZWNhdXNlIHJlZHVuZGFudCIKK21zZ3N0ciAiVHJhxb5lbmEgb3BlcmFjaWphIGplIG5laXNwcmF2bmEgamVyIGplIHJlZHVuZGFudG5hIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo5NAorbXNnaWQgIkludmFsaWQgRXJyb3IgQ29kZSIKK21zZ3N0ciAiTmVpc3ByYXZhbiBrb2QgZ3JlxaFrZSIKKworIzogLi4vYXZhaGktZGlzY292ZXItc3RhbmRhbG9uZS9hdmFoaS1kaXNjb3Zlci51aS5oOjEKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weTo3NgorbXNnaWQgIjxpPk5vIHNlcnZpY2UgY3VycmVudGx5IHNlbGVjdGVkLjwvaT4iCittc2dzdHIgIjxpPk5pamVkbmEgdXNsdWdhIHRyZW51dG5vIG5pamUgaXphYnJhbmEuPC9pPiIKKworIzogLi4vYXZhaGktZGlzY292ZXItc3RhbmRhbG9uZS9hdmFoaS1kaXNjb3Zlci51aS5oOjIKK21zZ2lkICJBdmFoaSBEaXNjb3ZlcnkiCittc2dzdHIgIkF2YWhpIG90a3JpdmFuamUiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5kZXNrdG9wLmluLmluLmg6MQorbXNnaWQgIkF2YWhpIFplcm9jb25mIEJyb3dzZXIiCittc2dzdHIgIkF2YWhpIFplcm9jb25mIHByZXRyYcW+aXZhxI0iCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5kZXNrdG9wLmluLmluLmg6MgorbXNnaWQgIkJyb3dzZSBmb3IgWmVyb2NvbmYgc2VydmljZXMgYXZhaWxhYmxlIG9uIHlvdXIgbmV0d29yayIKK21zZ3N0ciAiUHJldHJhxb51amVtIGRvc3R1cG5lIFplcm9jb25mIHVzbHVnZSBuYSB2YcWhb2ogbXJlxb5pIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI0Cittc2dpZCAiVFhUIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMjYKKyMsIGZ1enp5Cittc2dpZCAiVFhUIERhdGE6IgorbXNnc3RyICJUWFQgcG9kYWNpIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI2CisjLCBmdXp6eQorbXNnaWQgImVtcHR5IgorbXNnc3RyICJQcmF6bm8iCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMjgKKyMsIGZ1enp5Cittc2dpZCAiU2VydmljZSBUeXBlOiIKK21zZ3N0ciAiVnJzdGEgdXNsdWdlIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI5CisjLCBmdXp6eQorbXNnaWQgIlNlcnZpY2UgTmFtZToiCittc2dzdHIgIk5heml2IHVzbHVnZSIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIzMAorIywgZnV6enkKK21zZ2lkICJEb21haW4gTmFtZToiCittc2dzdHIgIkRvbWVuIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjMxCittc2dpZCAiSW50ZXJmYWNlOiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjMyCisjLCBmdXp6eQorbXNnaWQgIkFkZHJlc3M6IgorbXNnc3RyICJBZHJlc2EiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTg1Cittc2dpZCAiQnJvd3NlIFNlcnZpY2UgVHlwZXMiCittc2dzdHIgIlByZWdsZWRhaiB2cnN0ZSB1c2x1Z2EiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTg1Cittc2dpZCAiQSBOVUxMIHRlcm1pbmF0ZWQgbGlzdCBvZiBzZXJ2aWNlIHR5cGVzIHRvIGJyb3dzZSBmb3IiCittc2dzdHIgIlNwaXNhayB2cnN0YSB1c2x1Z2EgemEgcHJlZ2xlZGFuamUgb2dyYW5pxI1lbiBzYSBOVUxMIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE5MAorbXNnaWQgIkRvbWFpbiIKK21zZ3N0ciAiRG9tZW4iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTkwCittc2dpZCAiVGhlIGRvbWFpbiB0byBicm93c2UgaW4sIG9yIE5VTEwgZm9yIHRoZSBkZWZhdWx0IGRvbWFpbiIKK21zZ3N0ciAiRG9tZW4gemEgcHJlZ2xlZGFuamUsIGlsaSBOVUxMIHphIHBvZHJhenVtZXZhbmkgZG9tZW4iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTk2Cittc2dpZCAiU2VydmljZSBUeXBlIgorbXNnc3RyICJWcnN0YSB1c2x1Z2UiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTk2Cittc2dpZCAiVGhlIHNlcnZpY2UgdHlwZSBvZiB0aGUgc2VsZWN0ZWQgc2VydmljZSIKK21zZ3N0ciAiVnJzdGEgaXphYnJhbmUgdXNsdWdlIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIwMiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjEwMjMKK21zZ2lkICJTZXJ2aWNlIE5hbWUiCittc2dzdHIgIk5heml2IHVzbHVnZSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMDIKK21zZ2lkICJUaGUgc2VydmljZSBuYW1lIG9mIHRoZSBzZWxlY3RlZCBzZXJ2aWNlIgorbXNnc3RyICJOYXppdiBpemFicmFuZSB1c2x1Z2UiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjA4Cittc2dpZCAiQWRkcmVzcyIKK21zZ3N0ciAiQWRyZXNhIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIwOAorbXNnaWQgIlRoZSBhZGRyZXNzIG9mIHRoZSByZXNvbHZlZCBzZXJ2aWNlIgorbXNnc3RyICJBZHJlc2EgcmF6cmXFoWVuZSB1c2x1Z2UiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjEzCittc2dpZCAiUG9ydCIKK21zZ3N0ciAiUG9ydCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMTMKK21zZ2lkICJUaGUgSVAgcG9ydCBudW1iZXIgb2YgdGhlIHJlc29sdmVkIHNlcnZpY2UiCittc2dzdHIgIkJyb2ogSVAgcG9ydGEgcmF6cmXFoWVuZSB1c2x1Z2UiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjE5Cittc2dpZCAiSG9zdCBOYW1lIgorbXNnc3RyICJOYXppdiBkb21hxIdpbmEiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjE5Cittc2dpZCAiVGhlIGhvc3QgbmFtZSBvZiB0aGUgcmVzb2x2ZWQgc2VydmljZSIKK21zZ3N0ciAiTmF6aXYgZG9tYcSHaW5hIHJhenJlxaFlbmUgdXNsdWdlIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIyNQorbXNnaWQgIlRYVCBEYXRhIgorbXNnc3RyICJUWFQgcG9kYWNpIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIyNQorbXNnaWQgIlRoZSBUWFQgZGF0YSBvZiB0aGUgcmVzb2x2ZWQgc2VydmljZSIKK21zZ3N0ciAiVFhUIHBvZGFjaSByYXpyZcWhZW5lIHVzbHVnZSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMzAKKyMsIGZ1enp5Cittc2dpZCAiUmVzb2x2ZSBTZXJ2aWNlIgorbXNnc3RyICJSYXpyZcWhaSB1c2x1Z3UiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjMwCittc2dpZCAiUmVzb2x2ZSB0aGUgc2VsZWN0ZWQgc2VydmljZSBhdXRvbWF0aWNhbGx5IGJlZm9yZSByZXR1cm5pbmciCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMzYKKyMsIGZ1enp5Cittc2dpZCAiUmVzb2x2ZSBTZXJ2aWNlIEhvc3QgTmFtZSIKK21zZ3N0ciAiUmF6cmXFoWkgbmF6aXYgZG9tYcSHaW5hIHVzbHVnZSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMzYKK21zZ2lkICIiCisiUmVzb2x2ZSB0aGUgaG9zdCBuYW1lIG9mIHRoZSBzZWxlY3RlZCBzZXJ2aWNlIGF1dG9tYXRpY2FsbHkgYmVmb3JlIHJldHVybmluZyIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjI0MgorbXNnaWQgIkFkZHJlc3MgZmFtaWx5IgorbXNnc3RyICJQb3JvZGljYSBhZHJlc2EiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjQyCittc2dpZCAiVGhlIGFkZHJlc3MgZmFtaWx5IGZvciBob3N0IG5hbWUgcmVzb2x1dGlvbiIKK21zZ3N0ciAiUG9yb2RpY2EgYWRyZXNhIHphIHJhenJlxaFhdmFuamUgbmF6aXZhIGRvbWHEh2luYSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzozMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaGkgY2xpZW50IGZhaWx1cmU6ICVzIgorbXNnc3RyICJLdmFyIEF2YWhpIGtsaWplbnRhOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzozODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaGkgcmVzb2x2ZXIgZmFpbHVyZTogJXMiCittc2dzdHIgIkt2YXIgQXZhaGkgcmF6cmXFoWl2YcSNYTogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyb3dzaW5nIGZvciBzZXJ2aWNlIHR5cGUgJXMgaW4gZG9tYWluICVzIGZhaWxlZDogJXMiCittc2dzdHIgIlByZXRyYcW+aXZhbmplIHphIHZyc3RvbSB1c2x1Z2UgJXMgdSBkb21lbnUgJXMgbmV1c3BlxaFubzogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NTE5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjE2OAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTY5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjE3OAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTc5Cittc2dpZCAibi9hIgorbXNnc3RyICJuZXBvem5hdG8iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWhpIGRvbWFpbiBicm93c2VyIGZhaWx1cmU6ICVzIgorbXNnc3RyICJLdmFyIEF2YWhpIHByZXRyYcW+aXZhxI1hIGRvbWVuYTogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6Njg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWFkIEF2YWhpIGRvbWFpbjogJXMiCittc2dzdHIgIk5ldXNwZcWhbm8gxI1pdGFuamUgQXZhaGkgZG9tZW5hOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo3MDYKK21zZ2lkICJCcm93c2Ugc2VydmljZSB0eXBlIGxpc3QgaXMgZW1wdHkhIgorbXNnc3RyICJTcGlzYWsgdnJzdGEgc2VydmlzYSB6YSBwcmVnbGVkIGplIHByYXphbiEiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjb25uZWN0IHRvIEF2YWhpIHNlcnZlcjogJXMiCittc2dzdHIgIk5ldXNwZcWhbm8gcG92ZXppdmFuamUgbmEgQXZhaGkgc2VydmVyOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo3MzUKK21zZ2lkICJCcm93c2luZyBmb3Igc2VydmljZXMgb24gPGI+bG9jYWwgbmV0d29yazwvYj46IgorbXNnc3RyICJQcmV0cmHFvml2YW5qZSB6YSB1c2x1Z29tIG5hIDxiPmxva2Fsbm9qIG1yZcW+aTwvYj46IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjczNworIywgYy1mb3JtYXQKK21zZ2lkICJCcm93c2luZyBmb3Igc2VydmljZXMgaW4gZG9tYWluIDxiPiVzPC9iPjoiCittc2dzdHIgIlByZXRyYcW+aXZhbmplIHphIHVzbHVnb20gdSBkb21lbnUgPGI+JXM8L2I+OiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo3NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBicm93c2VyIGZvciAlczogJXMiCittc2dzdHIgIk5ldXNwZcWhbm8gcHJhdmxqZW5qZSBwcmV0cmHFvml2YcSNYSB6YSAlczogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6OTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgcmVzb2x2ZXIgZm9yICVzIG9mIHR5cGUgJXMgaW4gZG9tYWluICVzOiAlcyIKK21zZ3N0ciAiTmV1c3BlxaFubyBwcmF2bGplbmplIHJhenJlxaFpdmHEjWEgemEgJXMgdnJzdGUgJXMgdSBkb21lbnUgJXM6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjk3OAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGRvbWFpbiBicm93c2VyOiAlcyIKK21zZ3N0ciAiTmV1c3BlxaFubyBwcmF2bGplbmplIHByZXRyYcW+aXZhxI1hIGRvbWVuYTogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6OTg5Cittc2dpZCAiQ2hhbmdlIGRvbWFpbiIKK21zZ3N0ciAiUHJvbWVuaSBkb21lbiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMDMxIC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTE2MgorbXNnaWQgIkJyb3dzaW5nLi4uIgorbXNnc3RyICJQcmV0cmHFvnVqZW0uLi4iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTEyMAorbXNnaWQgIkluaXRpYWxpemluZy4uLiIKK21zZ3N0ciAiUG9rcmXEh2VtLi4uIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNDQKK21zZ2lkICJMb2NhdGlvbiIKK21zZ3N0ciAiTWVzdG8iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTE0OSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NTMKK21zZ2lkICJOYW1lIgorbXNnc3RyICJOYXppdiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTU0IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU1MworbXNnaWQgIlR5cGUiCittc2dzdHIgIlZyc3RhIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNjYKK21zZ2lkICJfRG9tYWluLi4uIgorbXNnc3RyICJfRG9tZW4uLi4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzo1NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgW29wdGlvbnNdXG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1zIC0tc3NoICAgICAgICAgICAgIEJyb3dzZSBTU0ggc2VydmVyc1xuIgorIiAgICAtdiAtLXZuYyAgICAgICAgICAgICBCcm93c2UgVk5DIHNlcnZlcnNcbiIKKyIgICAgLVMgLS1zaGVsbCAgICAgICAgICAgQnJvd3NlIGJvdGggU1NIIGFuZCBWTkNcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgVGhlIGRvbWFpbiB0byBicm93c2UgaW5cbiIKK21zZ3N0ciAiIgorIiVzIFtvcGNpamVdXG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgICBQcmlrYcW+aSBvdnUgcG9tb8SHXG4iCisiICAgIC1zIC0tc3NoICAgICAgICAgICAgICBQcmV0cmHFvmkgU1NIIHNlcnZlcmVcbiIKKyIgICAgLXYgLS12bmMgICAgICAgICAgICAgIFByZXRyYcW+aSBWTkMgc2VydmVyZVxuIgorIiAgICAtUyAtLXNoZWxsICAgICAgICAgICAgUHJldHJhxb5pIGkgU1NIIGkgVk5DXG4iCisiICAgIC1kIC0tZG9tYWluPURPTUVOICAgICBEb21lbiB1IGtvbWUgxIdlIHNlIHZyxaFpdGkgcHJldHJhxb5pdmFuamVcbiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjEwMSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo3NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG9vIG1hbnkgYXJndW1lbnRzXG4iCittc2dzdHIgIlByZXZpxaFlIGFyZ3VtZW5hdGFcbiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE0OQorbXNnaWQgIkNob29zZSBTaGVsbCBTZXJ2ZXIiCittc2dzdHIgIkl6YWJlcml0ZSBzZXJ2ZXIga29tYW5kbm9nIG9rcnXFvmVuamEiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNTEKK21zZ2lkICJEZXNrdG9wIgorbXNnc3RyICJSYWRuYSBwb3ZyxaFpbmEiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNTIKK21zZ2lkICJUZXJtaW5hbCIKK21zZ3N0ciAiVGVybWluYWwiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNTYKK21zZ2lkICJDaG9vc2UgVk5DIHNlcnZlciIKK21zZ3N0ciAiSXphYmVyaXRlIFZOQyBzZXJ2ZXIiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNjEKK21zZ2lkICJDaG9vc2UgU1NIIHNlcnZlciIKK21zZ3N0ciAiSXphYmVyaXRlIFNTSCBzZXJ2ZXIiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29ubmVjdGluZyB0byAnJXMnIC4uLlxuIgorbXNnc3RyICJQb3ZlenVqZW0gc2UgbmEg4oCeJXPigJwgLi4uXG4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoyNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhlY2xwKCkgZmFpbGVkOiAlc1xuIgorbXNnc3RyICJGdW5rY2lqYSBleGVjbHAoKSBuZXVzcGXFoW5hOiAlc1xuIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbmNlbGVkLlxuIgorbXNnc3RyICJPdGthemFuby5cbiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5kZXNrdG9wLmluLmluLmg6MQorbXNnaWQgIkF2YWhpIFNTSCBTZXJ2ZXIgQnJvd3NlciIKK21zZ3N0ciAiUHJldHJhxb5pdmHEjSBBdmFoaSBTU0ggc2VydmVyYSIKKworIzogLi4vYXZhaGktdWkvYnNzaC5kZXNrdG9wLmluLmluLmg6MgorbXNnaWQgIkJyb3dzZSBmb3IgWmVyb2NvbmYtZW5hYmxlZCBTU0ggU2VydmVycyIKK21zZ3N0ciAiUHJldHJhxb51amVtIFNTSCBzZXJ2ZXJlIG5hIGtvamltYSBqZSBvbW9ndcSHZW4gWmVyb2NvbmYiCisKKyM6IC4uL2F2YWhpLXVpL2J2bmMuZGVza3RvcC5pbi5pbi5oOjEKK21zZ2lkICJBdmFoaSBWTkMgU2VydmVyIEJyb3dzZXIiCittc2dzdHIgIlByZXRyYcW+aXZhxI0gQXZhaGkgVk5DIHNlcnZlcmEiCisKKyM6IC4uL2F2YWhpLXVpL2J2bmMuZGVza3RvcC5pbi5pbi5oOjIKK21zZ2lkICJCcm93c2UgZm9yIFplcm9jb25mLWVuYWJsZWQgVk5DIFNlcnZlcnMiCittc2dzdHIgIlByZXRyYcW+dWplbSBWTkMgc2VydmVyZSBuYSBrb2ppbWEgamUgb21vZ3XEh2VuIFplcm9jb25mIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoxMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiOiBBbGwgZm9yIG5vd1xuIgorbXNnc3RyICI6IHphIHNhZGEgc3ZlXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjExOAorIywgYy1mb3JtYXQKK21zZ2lkICI6IENhY2hlIGV4aGF1c3RlZFxuIgorbXNnc3RyICI6IGtlxaEgamUgcHJlcHVuamVuXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjIzOSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgc2VydmljZSAnJXMnIG9mIHR5cGUgJyVzJyBpbiBkb21haW4gJyVzJzogJXNcbiIKK21zZ3N0ciAiTmV1c3BlxaFubyByZXpyZcWhYXZhbmplIHVzbHVnZSDigJ4lc+KAnCB2cnN0ZSDigJ4lc+KAnCB1IGRvbWVudSDigJ4lc+KAnDogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MzQwCisjLCBjLWZvcm1hdAorbXNnaWQgInNlcnZpY2VfYnJvd3NlciBmYWlsZWQ6ICVzXG4iCittc2dzdHIgIk5ldXNwZcWhbmEgZnVua2NpamEgc2VydmljZV9icm93c2VyOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzozNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXZhaGlfc2VydmljZV9icm93c2VyX25ldygpIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAiTmV1c3BlxaFuYSBmdW5rY2lqYSBhdmFoaV9zZXJ2aWNlX2Jyb3dzZXJfbmV3KCk6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjQxNAorIywgYy1mb3JtYXQKK21zZ2lkICJzZXJ2aWNlX3R5cGVfYnJvd3NlciBmYWlsZWQ6ICVzXG4iCittc2dzdHIgIk5ldXNwZcWhbmEgZnVua2NpamEgc2VydmljZV90eXBlX2Jyb3dzZXI6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjQ0NAorIywgYy1mb3JtYXQKK21zZ2lkICJhdmFoaV9zZXJ2aWNlX3R5cGVfYnJvd3Nlcl9uZXcoKSBmYWlsZWQ6ICVzXG4iCittc2dzdHIgIk5ldXNwZcWhbmEgZnVua2NpamEgYXZhaGlfc2VydmljZV90eXBlX2Jyb3dzZXJfbmV3KCk6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjUxOQorIywgYy1mb3JtYXQKK21zZ2lkICJhdmFoaV9kb21haW5fYnJvd3Nlcl9uZXcoKSBmYWlsZWQ6ICVzXG4iCittc2dzdHIgIk5ldXNwZcWhbmEgZnVua2NpamEgYXZhaGlfZG9tYWluX2Jyb3dzZXJfbmV3KCk6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjUzNSAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6Mzk0CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjgwIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IHZlcnNpb24gc3RyaW5nOiAlc1xuIgorbXNnc3RyICJOZXVzcGXFoW5vIGl6dnLFoWF2YW5qZSB1cGl0YSB6YSBuaXNrb20gdmVyemlqZTogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTQwIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozOTkKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyODUgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE3MworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcXVlcnkgaG9zdCBuYW1lOiAlc1xuIgorbXNnc3RyICJOZXVzcGXFoW5vIGl6dnLFoWF2YW5qZSB1cGl0YSB6YSBuYXppdm9tIGRvbWHEh2luYTogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTQ0IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo0MDMKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyODkgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE3NworIywgYy1mb3JtYXQKK21zZ2lkICJTZXJ2ZXIgdmVyc2lvbjogJXM7IEhvc3QgbmFtZTogJXNcbiIKK21zZ3N0ciAiVmVyemlqYSBzZXJ2ZXJhIDogJXM7IG5heml2IGRvbWHEh2luYTogJXNcbiIKKworIy4gVHJhbnNsYXRvcnM6IFRoaXMgaXMgYSBjb2x1bW4gaGVhZGluZyB3aXRoIGFiYnJldmlhdGlvbnMgZm9yCisjLiAqICAgRXZlbnQgKCsvLSksIE5ldHdvcmsgSW50ZXJmYWNlLCBQcm90b2NvbCAoSVB2NC92NiksIERvbWFpbgorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkUgSWZjZSBQcm90IERvbWFpblxuIgorbXNnc3RyICJEIFNwciBQcm90IERvbWVuXG4iCisKKyMuIFRyYW5zbGF0b3JzOiBUaGlzIGlzIGEgY29sdW1uIGhlYWRpbmcgd2l0aCBhYmJyZXZpYXRpb25zIGZvcgorIy4gKiAgIEV2ZW50ICgrLy0pLCBOZXR3b3JrIEludGVyZmFjZSwgUHJvdG9jb2wgKElQdjQvdjYpLCBEb21haW4KKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU1MworIywgYy1mb3JtYXQKK21zZ2lkICJFIElmY2UgUHJvdCAlLSpzICUtMjBzIERvbWFpblxuIgorbXNnc3RyICJEIFNwciBQcm90ICUtKnMgJS0yMHMgRG9tZW5cbiIKKworIy4gV2UgaGF2ZSBiZWVuIGRpc2Nvbm5lY3RlZCwgc28gbGV0IHJlY29ubmVjdAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTg1IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGlzY29ubmVjdGVkLCByZWNvbm5lY3RpbmcgLi4uXG4iCittc2dzdHIgIk5lcG92ZXphbiwgcG9ub3ZubyBwb3Zleml2YW5qZSAuLi5cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTk5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjgyOQorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE3MCAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6Mzg2CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjcyIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBjbGllbnQgb2JqZWN0OiAlc1xuIgorbXNnc3RyICJOZXVzcGXFoW5vIHByYXZsamVuamUgb2JqZWt0YSBrbGlqZW50YTogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NjA0IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxNzUKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoxNDMgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNsaWVudCBmYWlsdXJlLCBleGl0aW5nOiAlc1xuIgorbXNnc3RyICJLdmFyIGtsaWplbnRhLCBpemxhemltOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo2MjMgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjIwNgorIywgYy1mb3JtYXQKK21zZ2lkICJXYWl0aW5nIGZvciBkYWVtb24gLi4uXG4iCittc2dzdHIgIsSMZWthbSBuYSBzaXN0ZW1za3UgdXNsdWd1IC4uLlxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo2NDcKK21zZ2lkICIiCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFNob3cgdmVyc2lvblxuIgorIiAgICAtRCAtLWJyb3dzZS1kb21haW5zICBCcm93c2UgZm9yIGJyb3dzaW5nIGRvbWFpbnMgaW5zdGVhZCBvZiBzZXJ2aWNlc1xuIgorIiAgICAtYSAtLWFsbCAgICAgICAgICAgICBTaG93IGFsbCBzZXJ2aWNlcywgcmVnYXJkbGVzcyBvZiB0aGUgdHlwZVxuIgorIiAgICAtZCAtLWRvbWFpbj1ET01BSU4gICBUaGUgZG9tYWluIHRvIGJyb3dzZSBpblxuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBFbmFibGUgdmVyYm9zZSBtb2RlXG4iCisiICAgIC10IC0tdGVybWluYXRlICAgICAgIFRlcm1pbmF0ZSBhZnRlciBkdW1waW5nIGEgbW9yZSBvciBsZXNzIGNvbXBsZXRlICIKKyJsaXN0XG4iCisiICAgIC1jIC0tY2FjaGUgICAgICAgICAgIFRlcm1pbmF0ZSBhZnRlciBkdW1waW5nIGFsbCBlbnRyaWVzIGZyb20gdGhlIGNhY2hlXG4iCisiICAgIC1sIC0taWdub3JlLWxvY2FsICAgIElnbm9yZSBsb2NhbCBzZXJ2aWNlc1xuIgorIiAgICAtciAtLXJlc29sdmUgICAgICAgICBSZXNvbHZlIHNlcnZpY2VzIGZvdW5kXG4iCisiICAgIC1mIC0tbm8tZmFpbCAgICAgICAgIERvbid0IGZhaWwgaWYgdGhlIGRhZW1vbiBpcyBub3QgYXZhaWxhYmxlXG4iCisiICAgIC1wIC0tcGFyc2FibGUgICAgICAgIE91dHB1dCBpbiBwYXJzYWJsZSBmb3JtYXRcbiIKK21zZ3N0ciAiIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICAgUHJpa2HFvmkgb3Z1IHBvbW/Eh1xuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICAgUHJpa2HFvmkgdmVyemlqdVxuIgorIiAgICAtRCAtLWJyb3dzZS1kb21haW5zICAgUHJldHJhxb5pIGRvbWVuZSBrb2ppIHNlIG1vZ3UgcHJldHJhxb5pdmF0aSB1bWVzdG8gIgorInVzbHVnYVxuIgorIiAgICAtYSAtLWFsbCAgICAgICAgICAgICAgUHJpa2HFvmkgc3ZlIHVzbHVnZSwgYmV6IG9iemlyYSBuYSB2cnN0dVxuIgorIiAgICAtZCAtLWRvbWFpbj1ET01FTiAgICAgRG9tZW4gemEgcHJldHJhxb5pdmFuamVcbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgIFVrbGp1xI1pIHJlxb5pbSBvcMWhaXJub2cgaXNwaXNhXG4iCisiICAgIC10IC0tdGVybWluYXRlICAgICAgICBQcmVraW5pIHBvc2xlIGl6YmFjaXZhbmphIHZpxaFlIGlsaSBtYW5qZSB6YXZyxaFlbmUgIgorImxpc3RlXG4iCisiICAgIC1jIC0tY2FjaGUgICAgICAgICAgICBQcmVraW5pIHBvc2xlIGl6YmFjaXZhbmphIHN2aWggemFwaXNhIGl6IGtlxaFhXG4iCisiICAgIC1sIC0taWdub3JlLWxvY2FsICAgICBJZ25vcmnFoWkgbG9rYWxuZSB1c2x1Z2VcbiIKKyIgICAgLXIgLS1yZXNvbHZlICAgICAgICAgIFJhenJlxaFpIHByb25hxJFlbmUgdXNsdWdlXG4iCisiICAgIC1mIC0tbm8tZmFpbCAgICAgICAgICBOZW1vaiBkYSBvdGthxb5lxaEgYWtvIHNpc3RlbXNrYSB1c2x1Z2EgbmlqZSAiCisiZG9zdHVwbmFcbiIKKyIgICAgLXAgLS1wYXJzYWJsZSAgICAgICAgIEl6bGF6IHUgZm9ybWF0dSBrb2ppIHNlIG1vxb5lIHJhxaHEjWxhbml0aVxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo2NjAKK21zZ2lkICIiCisiICAgIC1rIC0tbm8tZGItbG9va3VwICAgIERvbid0IGxvb2t1cCBzZXJ2aWNlIHR5cGVzXG4iCisiICAgIC1iIC0tZHVtcC1kYiAgICAgICAgIER1bXAgc2VydmljZSB0eXBlIGRhdGFiYXNlXG4iCittc2dzdHIgIiIKKyIgICAgLWsgLS1uby1kYi1sb29rdXAgICAgIE5lbW9qIHRyYcW+aXRpIHZyc3RlIHVzbHVnZVxuIgorIiAgICAtYiAtLWR1bXAtZGIgICAgICAgICAgSXpiYWNpIGJhenUgcG9kYXRha2EgdnJzdGUgdXNsdWdlXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjc2NiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvbyBmZXcgYXJndW1lbnRzXG4iCittc2dzdHIgIlN1dmnFoWUgbWFsbyBhcmd1bWVuYXRhXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjgyMSAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6Mzc4CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjY0IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBzaW1wbGUgcG9sbCBvYmplY3QuXG4iCittc2dzdHIgIk5ldXNwZcWhbm8gcHJhdmxqZW5qZSBvYmpla3RhIGplZG5vc3Rhdm5lIGFua2V0ZS5cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkVzdGFibGlzaGVkIHVuZGVyIG5hbWUgJyVzJ1xuIgorbXNnc3RyICJVc3Bvc3RhdmxqZW5vIHBvZCBpbWVub20g4oCeJXPigJxcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlcjogJXNcbiIKK21zZ3N0ciAiTmV1c3BlxaFuYSByZWdpc3RyYWNpamE6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICJOYW1lIGNvbGxpc2lvbiwgcGlja2luZyBuZXcgbmFtZSAnJXMnLlxuIgorbXNnc3RyICJTdWtvYiBuYXppdmEsIHV6aW1hbSBub3ZpIG5heml2IOKAniVz4oCcLlxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgZW50cnkgZ3JvdXA6ICVzXG4iCittc2dzdHIgIk5ldXNwZcWhbm8gcHJhdmxqZW5qZSB6YXBpc2EgZ3J1cGU6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBhZGRyZXNzOiAlc1xuIgorbXNnc3RyICJOZXVzcGXFoW5vIGRvZGF2YW5qZSBhZHJlc2U6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBzZXJ2aWNlOiAlc1xuIgorbXNnc3RyICJOZXVzcGXFoW5vIGRvZGF2YW5qZSB1c2x1Z2U6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBzdWJ0eXBlICclcyc6ICVzXG4iCittc2dzdHIgIk5ldXNwZcWhbm8gZG9kYXZhbmplIHBvZHZyc3RlIOKAniVz4oCcOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkhvc3QgbmFtZSBjb25mbGljdFxuIgorbXNnc3RyICJTdWtvYiBuYXppdmEgZG9tYcSHaW5hXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoyMTYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBbb3B0aW9uc10gJXMgPG5hbWU+IDx0eXBlPiA8cG9ydD4gWzx0eHQgLi4uPl1cbiIKKyIlcyBbb3B0aW9uc10gJXMgPGhvc3QtbmFtZT4gPGFkZHJlc3M+XG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFNob3cgdmVyc2lvblxuIgorIiAgICAtcyAtLXNlcnZpY2UgICAgICAgICBQdWJsaXNoIHNlcnZpY2VcbiIKKyIgICAgLWEgLS1hZGRyZXNzICAgICAgICAgUHVibGlzaCBhZGRyZXNzXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgRG9tYWluIHRvIHB1Ymxpc2ggc2VydmljZSBpblxuIgorIiAgICAtSCAtLWhvc3Q9RE9NQUlOICAgICBIb3N0IHdoZXJlIHNlcnZpY2UgcmVzaWRlc1xuIgorIiAgICAgICAtLXN1YnR5cGU9U1VCVFlQRSBBbiBhZGRpdGlvbmFsIHN1YnR5cGUgdG8gcmVnaXN0ZXIgdGhpcyBzZXJ2aWNlICIKKyJ3aXRoXG4iCisiICAgIC1SIC0tbm8tcmV2ZXJzZSAgICAgIERvIG5vdCBwdWJsaXNoIHJldmVyc2UgZW50cnkgd2l0aCBhZGRyZXNzXG4iCisiICAgIC1mIC0tbm8tZmFpbCAgICAgICAgIERvbid0IGZhaWwgaWYgdGhlIGRhZW1vbiBpcyBub3QgYXZhaWxhYmxlXG4iCittc2dzdHIgIiIKKyIlcyBbb3BjaWplXSAlcyA8bmF6aXY+IDx2cnN0YT4gPHBvcnQ+IFs8dHh0IC4uLj5dXG4iCisiJXMgW29wY2lqZV0gJXMgPG5heml2LWRvbWHEh2luYT4gPGFkcmVzYT5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgIFByaWthxb5pIG92dSBwb21vxIdcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgIFByaWthxb5pIHZlcnppanVcbiIKKyIgICAgLXMgLS1zZXJ2aWNlICAgICAgICAgIE9iamF2aSB1c2x1Z3VcbiIKKyIgICAgLWEgLS1hZGRyZXNzICAgICAgICAgIE9iamF2aSBhZHJlc3VcbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgIFVrbGp1xI1pIHJlxb5pbSBvcMWhaXJub2cgaXNwaXNhXG4iCisiICAgIC1kIC0tZG9tYWluPURPTUVOICAgICBEb21lbiB1IGtvamVtIMSHZSBzZSBvYmphdml0aSB1c2x1Z2VcbiIKKyIgICAgLUggLS1ob3N0PURPTUVOICAgICAgIERvbWHEh2luIG5hIGtvamVtIHNlIG5hbGF6ZSB1c2x1Z2VcbiIKKyIgICAgICAgLS1zdWJ0eXBlPVBPRFZSU1RBIERvZGF0bmEgcG9kdnJzdGEgc2Ega29qb20gxIdlIHNlIHJlZ2lzdHJvdmF0aSBvdmEgIgorInVzbHVnYVxuIgorIiAgICAtZiAtLW5vLWZhaWwgICAgICAgICAgTmVtb2ogZGEgb3RrYcW+ZcWhIGFrbyBzaXN0ZW1za2EgdXNsdWdhIG5pamUgIgorImRvc3R1cG5hXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozMDMgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjMxOAorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgbnVtYmVyIG9mIGFyZ3VtZW50c1xuIgorbXNnc3RyICJMb8WhIGJyb2ogYXJndW1lbmF0YVxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBwb3J0IG51bWJlcjogJXNcbiIKK21zZ3N0ciAiTmV1c3BlxaFubyByYXpyZcWhYXZhbmplIGJyb2phIHByaWtsanXEjWthOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MzYxIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gY29tbWFuZCBzcGVjaWZpZWQuXG4iCittc2dzdHIgIktvbWFuZGEgbmlqZSBvZHJlxJFlbmEuXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzo4OQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSBob3N0IG5hbWUgJyVzJzogJXNcbiIKK21zZ3N0ciAiTmV1c3BlxaFubyByYXpyZcWhYXZhbmplIG5heml2YSBkb21hxIdpbmEg4oCeJXPigJw6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoxMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgYWRkcmVzcyAnJXMnOiAlc1xuIgorbXNnc3RyICJOZXVzcGXFoW5vIHJhenJlxaFhdmFuamUgYWRyZXNlIOKAniVz4oCcOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBbb3B0aW9uc10gJXMgPGhvc3QgbmFtZSAuLi4+XG4iCisiJXMgW29wdGlvbnNdICVzIDxhZGRyZXNzIC4uLiA+XG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFNob3cgdmVyc2lvblxuIgorIiAgICAtbiAtLW5hbWUgICAgICAgICAgICBSZXNvbHZlIGhvc3QgbmFtZVxuIgorIiAgICAtYSAtLWFkZHJlc3MgICAgICAgICBSZXNvbHZlIGFkZHJlc3NcbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgRW5hYmxlIHZlcmJvc2UgbW9kZVxuIgorIiAgICAtNiAgICAgICAgICAgICAgICAgICBMb29rdXAgSVB2NiBhZGRyZXNzXG4iCisiICAgIC00ICAgICAgICAgICAgICAgICAgIExvb2t1cCBJUHY0IGFkZHJlc3NcbiIKK21zZ3N0ciAiIgorIiVzIFtvcGNpamVdICVzIDxuYXppdiBkb21hxIdpbmEgLi4uPlxuIgorIiVzIFtvcGNpamVdICVzIDxhZHJlc2EgLi4uID5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgIFByaWthxb5pIG92dSBwb21vxIdcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgIFByaWthxb5pIHZlcnppanVcbiIKKyIgICAgLW4gLS1uYW1lICAgICAgICAgICAgIFJhenJlxaFpIG5heml2IGRvbWHEh2luYVxuIgorIiAgICAtYSAtLWFkZHJlc3MgICAgICAgICAgUmF6cmXFoWkgYWRyZXN1XG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgICBVa2xqdcSNaSByZcW+aW0gb3DFoWlybm9nIGlzcGlzYVxuIgorIiAgICAtNiAgICAgICAgICAgICAgICAgICAgVHJhxb5pIElQdjYgYWRyZXN1XG4iCisiICAgIC00ICAgICAgICAgICAgICAgICAgICBUcmHFvmkgSVB2NCBhZHJlc3VcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI5OSAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgaG9zdCBuYW1lIHJlc29sdmVyOiAlc1xuIgorbXNnc3RyICJOZXVzcGXFoW5vIHByYXZsamVuamUgcmF6cmXFoWl2YcSNYSBuYXppdmEgZG9tYcSHaW5hOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBhZGRyZXNzICclcydcbiIKK21zZ3N0ciAiTmV1c3BlxaFubyByYcWhxI1sYW5qaXZhbmplIGFkcmVzZSDigJ4lc+KAnFxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MzE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgYWRkcmVzcyByZXNvbHZlcjogJXNcbiIKK21zZ3N0ciAiTmV1c3BlxaFubyBwcmF2bGplbmplIHJhenJlxaFpdmHEjWEgYWRyZXNlOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFtvcHRpb25zXSA8bmV3IGhvc3QgbmFtZT5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgU2hvdyB2ZXJzaW9uXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKK21zZ3N0ciAiIgorIiVzIFtvcGNpamVdIDxub3ZpIG5heml2IGRvbWHEh2luYT5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgIFByaWthxb5pIG92dSBwb21vxIdcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgIFByaWthxb5pIHZlcnppanVcbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgIFVrbGp1xI1pIHJlxb5pbSBvcMWhaXJub2cgaXNwaXNhXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzLCBleHBlY3RpbmcgZXhhY3RseSBvbmUuXG4iCittc2dzdHIgIk5laXNwcmF2YW4gYnJvaiBhcmd1bWVuYXRhLCBvxI1la3VqZW0gdGHEjW5vIGplZGFuLlxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkhvc3QgbmFtZSBzdWNjZXNzZnVsbHkgY2hhbmdlZCB0byAlc1xuIgorbXNnc3RyICJOYXppdiBkb21hxIdpbmEgdXNwZcWhbm8gcHJvbWVuamVuIHUgJXNcbiIKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9wby9zdi5wbyBiL2F2YWhpLTAuNi4zMS9wby9zdi5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWFiZGU3Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL3BvL3N2LnBvCkBAIC0wLDAgKzEsODU1IEBACisjIFN3ZWRpc2ggdHJhbnNsYXRpb24gZm9yIGF2YWhpLgorIyBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBhdmFoaSBwYWNrYWdlLgorIyBEYW5pZWwgTnlsYW5kZXIgPHBvQGRhbmllbG55bGFuZGVyLnNlPiwgMjAwOCwgMjAwOSwgMjAxMC4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGF2YWhpXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDExLTA0LTAyIDAzOjIzKzAyMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDEwLTA4LTEyIDAxOjEyKzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IERhbmllbCBOeWxhbmRlciA8cG9AZGFuaWVsbnlsYW5kZXIuc2U+XG4iCisiTGFuZ3VhZ2UtVGVhbTogU3dlZGlzaCA8dHAtc3ZAbGlzdG9yLnRwLXN2LnNlPlxuIgorIkxhbmd1YWdlOiBzdlxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozMAorbXNnaWQgIk9LIgorbXNnc3RyICJPSyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzEKK21zZ2lkICJPcGVyYXRpb24gZmFpbGVkIgorbXNnc3RyICLDhXRnw6RyZGVuIG1pc3NseWNrYWRlcyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzIKK21zZ2lkICJCYWQgc3RhdGUiCittc2dzdHIgIkZlbGFrdGlndCB0aWxsc3TDpW5kIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozMworbXNnaWQgIkludmFsaWQgaG9zdCBuYW1lIgorbXNnc3RyICJPZ2lsdGlndCB2w6RyZG5hbW4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM0Cittc2dpZCAiSW52YWxpZCBkb21haW4gbmFtZSIKK21zZ3N0ciAiT2dpbHRpZ3QgZG9tw6RubmFtbiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzUKK21zZ2lkICJObyBzdWl0YWJsZSBuZXR3b3JrIHByb3RvY29sIGF2YWlsYWJsZSIKK21zZ3N0ciAiSW5nZXQgbMOkbXBsaWd0IG7DpHR2ZXJrc3Byb3Rva29sbCB0aWxsZ8OkbmdsaWd0IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozNgorbXNnaWQgIkludmFsaWQgRE5TIFRUTCIKK21zZ3N0ciAiT2dpbHRpZ3QgRE5TIFRUTCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzcKK21zZ2lkICJSZXNvdXJjZSByZWNvcmQga2V5IGlzIHBhdHRlcm4iCittc2dzdHIgIlJlc3Vyc2VucyBwb3N0bnlja2VsIMOkciBtw7Zuc3RlciIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzgKK21zZ2lkICJMb2NhbCBuYW1lIGNvbGxpc2lvbiIKK21zZ3N0ciAiTG9rYWwgbmFtbmtvbGxpc2lvbiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzkKK21zZ2lkICJJbnZhbGlkIHJlY29yZCIKK21zZ3N0ciAiT2dpbHRpZyBwb3N0IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0MQorbXNnaWQgIkludmFsaWQgc2VydmljZSBuYW1lIgorbXNnc3RyICJPZ2lsdGlndCB0asOkbnN0ZW5hbW4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQyCittc2dpZCAiSW52YWxpZCBzZXJ2aWNlIHR5cGUiCittc2dzdHIgIk9naWx0aWcgdGrDpG5zdGV0eXAiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQzCittc2dpZCAiSW52YWxpZCBwb3J0IG51bWJlciIKK21zZ3N0ciAiT2dpbHRpZ3QgcG9ydG51bW1lciIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDQKK21zZ2lkICJJbnZhbGlkIHJlY29yZCBrZXkiCittc2dzdHIgIk9naWx0aWcgcG9zdG55Y2tlbCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDUKK21zZ2lkICJJbnZhbGlkIGFkZHJlc3MiCittc2dzdHIgIk9naWx0aWcgYWRyZXNzIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NgorbXNnaWQgIlRpbWVvdXQgcmVhY2hlZCIKK21zZ3N0ciAiVGlkc2dyw6RucyBuw6VkZGVzIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NworbXNnaWQgIlRvbyBtYW55IGNsaWVudHMiCittc2dzdHIgIkbDtnIgbcOlbmdhIGtsaWVudGVyIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0OAorbXNnaWQgIlRvbyBtYW55IG9iamVjdHMiCittc2dzdHIgIkbDtnIgbcOlbmdhIG9iamVrdCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDkKK21zZ2lkICJUb28gbWFueSBlbnRyaWVzIgorbXNnc3RyICJGw7ZyIG3DpW5nYSBwb3N0ZXIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjUwCittc2dpZCAiT1MgRXJyb3IiCittc2dzdHIgIk9wZXJhdGl2c3lzdGVtc2ZlbCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTIKK21zZ2lkICJBY2Nlc3MgZGVuaWVkIgorbXNnc3RyICLDhXRrb21zdCBuZWthZCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTMKK21zZ2lkICJJbnZhbGlkIG9wZXJhdGlvbiIKK21zZ3N0ciAiT2dpbHRpZyDDpXRnw6RyZCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTQKK21zZ2lkICJBbiB1bmV4cGVjdGVkIEQtQnVzIGVycm9yIG9jY3VyZWQiCittc2dzdHIgIkV0dCBvdsOkbnRhdCBELUJ1cy1mZWwgaGFyIGludHLDpGZmYXQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU1Cittc2dpZCAiRGFlbW9uIGNvbm5lY3Rpb24gZmFpbGVkIgorbXNnc3RyICJBbnNsdXRuaW5nIHRpbGwgZGVtb24gbWlzc2x5Y2thZGVzIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1NgorbXNnaWQgIk1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIk1pbm5ldCDDpHIgc2x1dCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTcKK21zZ2lkICJUaGUgb2JqZWN0IHBhc3NlZCBpbiB3YXMgbm90IHZhbGlkIgorbXNnc3RyICJPYmpla3RldCBzb20gc2tpY2thZGVzIGluIHZhciBpbnRlIGdpbHRpZ3QiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU4Cittc2dpZCAiRGFlbW9uIG5vdCBydW5uaW5nIgorbXNnc3RyICJEZW1vbmVuIMOkciBpbnRlIGlnw6VuZyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTkKK21zZ2lkICJJbnZhbGlkIGludGVyZmFjZSBpbmRleCIKK21zZ3N0ciAiT2dpbHRpZ3QgZ3LDpG5zc25pdHRzaW5kZXgiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjYwCittc2dpZCAiSW52YWxpZCBwcm90b2NvbCBzcGVjaWZpY2F0aW9uIgorbXNnc3RyICJPZ2lsdGlnIHByb3Rva29sbHNwZWNpZmlrYXRpb24iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjYxCittc2dpZCAiSW52YWxpZCBmbGFncyIKK21zZ3N0ciAiT2dpbHRpZ2EgZmxhZ2dvciIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjMKK21zZ2lkICJOb3QgZm91bmQiCittc2dzdHIgIkhpdHRhZGVzIGludGUiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY0Cittc2dpZCAiSW52YWxpZCBjb25maWd1cmF0aW9uIgorbXNnc3RyICJPZ2lsdGlnIGtvbmZpZ3VyYXRpb24iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY1Cittc2dpZCAiVmVyc2lvbiBtaXNtYXRjaCIKK21zZ3N0ciAiVmVyc2lvbmVuIHN0w6RtbWVyIGludGUiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY2Cittc2dpZCAiSW52YWxpZCBzZXJ2aWNlIHN1YnR5cGUiCittc2dzdHIgIk9naWx0aWcgdW5kZXJ0eXAgZsO2ciB0asOkbnN0IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2NworbXNnaWQgIkludmFsaWQgcGFja2V0IgorbXNnc3RyICJPZ2lsdGlndCBwYWtldCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjgKK21zZ2lkICJJbnZhbGlkIEROUyByZXR1cm4gY29kZSIKK21zZ3N0ciAiT2dpbHRpZyBETlMtc3ZhcnNrb2QiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY5Cittc2dpZCAiRE5TIGZhaWx1cmU6IEZPUk1FUlIiCittc2dzdHIgIkROUy1mZWw6IEZPUk1FUlIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjcwCittc2dpZCAiRE5TIGZhaWx1cmU6IFNFUlZGQUlMIgorbXNnc3RyICJETlMtZmVsOiBTRVJWRkFJTCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzEKK21zZ2lkICJETlMgZmFpbHVyZTogTlhET01BSU4iCittc2dzdHIgIkROUy1mZWw6IE5YRE9NQUlOIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3MgorbXNnaWQgIkROUyBmYWlsdXJlOiBOT1RJTVAiCittc2dzdHIgIkROUy1mZWw6IE5PVElNUCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzQKK21zZ2lkICJETlMgZmFpbHVyZTogUkVGVVNFRCIKK21zZ3N0ciAiRE5TLWZlbDogUkVGVVNFRCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzUKK21zZ2lkICJETlMgZmFpbHVyZTogWVhET01BSU4iCittc2dzdHIgIkROUy1mZWw6IFlYRE9NQUlOIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3NgorbXNnaWQgIkROUyBmYWlsdXJlOiBZWFJSU0VUIgorbXNnc3RyICJETlMtZmVsOiBZWFJSU0VUIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3NworbXNnaWQgIkROUyBmYWlsdXJlOiBOWFJSU0VUIgorbXNnc3RyICJETlMtZmVsOiBOWFJSU0VUIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3OAorbXNnaWQgIkROUyBmYWlsdXJlOiBOT1RBVVRIIgorbXNnc3RyICJETlMtZmVsOiBOT1RBVVRIIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3OQorbXNnaWQgIkROUyBmYWlsdXJlOiBOT1RaT05FIgorbXNnc3RyICJETlMtZmVsOiBOT1RaT05FIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4MAorbXNnaWQgIkludmFsaWQgUkRBVEEiCittc2dzdHIgIk9naWx0aWcgUkRBVEEiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjgxCittc2dpZCAiSW52YWxpZCBETlMgdHlwZSIKK21zZ3N0ciAiT2dpbHRpZyBETlMtdHlwIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4MgorbXNnaWQgIkludmFsaWQgRE5TIGNsYXNzIgorbXNnc3RyICJPZ2lsdGlnIEROUy1rbGFzcyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODMKK21zZ2lkICJOb3Qgc3VwcG9ydGVkIgorbXNnc3RyICJTdMO2ZHMgaW50ZSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODUKK21zZ2lkICJOb3QgcGVybWl0dGVkIgorbXNnc3RyICJJbnRlIHRpbGzDpXRlbiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODYKK21zZ2lkICJJbnZhbGlkIGFyZ3VtZW50IgorbXNnc3RyICJPZ2lsdGlndCBhcmd1bWVudCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODcKK21zZ2lkICJJcyBlbXB0eSIKK21zZ3N0ciAiw4RyIHRvbSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODgKK21zZ2lkICJUaGUgcmVxdWVzdGVkIG9wZXJhdGlvbiBpcyBpbnZhbGlkIGJlY2F1c2UgcmVkdW5kYW50IgorbXNnc3RyICJEZW4gYmVnw6RyZGEgw6V0Z8OkcmRlbiDDpHIgb2dpbHRpZyBkw6RyZsO2ciBkZW4gw6RyIHJlZHVuZGFudCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6OTQKK21zZ2lkICJJbnZhbGlkIEVycm9yIENvZGUiCittc2dzdHIgIk9naWx0aWcgZmVsa29kIgorCisjOiAuLi9hdmFoaS1kaXNjb3Zlci1zdGFuZGFsb25lL2F2YWhpLWRpc2NvdmVyLnVpLmg6MQorIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5Ojc2Cittc2dpZCAiPGk+Tm8gc2VydmljZSBjdXJyZW50bHkgc2VsZWN0ZWQuPC9pPiIKK21zZ3N0ciAiPGk+SW5nZW4gdGrDpG5zdCBoYXIgbWFya2VyYXRzLjwvaT4iCisKKyM6IC4uL2F2YWhpLWRpc2NvdmVyLXN0YW5kYWxvbmUvYXZhaGktZGlzY292ZXIudWkuaDoyCittc2dpZCAiQXZhaGkgRGlzY292ZXJ5IgorbXNnc3RyICJBdmFoaS11cHB0w6Rja25pbmciCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5kZXNrdG9wLmluLmluLmg6MQorbXNnaWQgIkF2YWhpIFplcm9jb25mIEJyb3dzZXIiCittc2dzdHIgIkF2YWhpIFplcm9jb25mLWJsw6RkZHJhcmUiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5kZXNrdG9wLmluLmluLmg6MgorbXNnaWQgIkJyb3dzZSBmb3IgWmVyb2NvbmYgc2VydmljZXMgYXZhaWxhYmxlIG9uIHlvdXIgbmV0d29yayIKK21zZ3N0ciAiQmzDpGRkcmEgZWZ0ZXIgWmVyb2NvbmYtdGrDpG5zdGVyIHRpbGxnw6RuZ2xpZ2EgcMOlIGRpdHQgbsOkdHZlcmsiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMjQKK21zZ2lkICJUWFQiCittc2dzdHIgIlRYVCIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIyNgorbXNnaWQgIlRYVCBEYXRhOiIKK21zZ3N0ciAiVFhUIERhdGE6IgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI2Cittc2dpZCAiZW1wdHkiCittc2dzdHIgInRvbSIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIyOAorbXNnaWQgIlNlcnZpY2UgVHlwZToiCittc2dzdHIgIlRqw6Ruc3RldHlwOiIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIyOQorbXNnaWQgIlNlcnZpY2UgTmFtZToiCittc2dzdHIgIlRqw6Ruc3RlbmFtbjoiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMzAKK21zZ2lkICJEb21haW4gTmFtZToiCittc2dzdHIgIkRvbcOkbm5hbW46IgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjMxCittc2dpZCAiSW50ZXJmYWNlOiIKK21zZ3N0ciAiR3LDpG5zc25pdHQ6IgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjMyCittc2dpZCAiQWRkcmVzczoiCittc2dzdHIgIkFkcmVzczoiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTg1Cittc2dpZCAiQnJvd3NlIFNlcnZpY2UgVHlwZXMiCittc2dzdHIgIkJsw6RkZHJhIGVmdGVyIHRqw6Ruc3RldHlwZXIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTg1Cittc2dpZCAiQSBOVUxMIHRlcm1pbmF0ZWQgbGlzdCBvZiBzZXJ2aWNlIHR5cGVzIHRvIGJyb3dzZSBmb3IiCittc2dzdHIgIkVuIE5VTEwtdGVybWluZXJhZCBsaXN0YSDDtnZlciB0asOkbnN0ZXR5cGVyIGF0dCBibMOkZGRyYSBlZnRlciIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxOTAKK21zZ2lkICJEb21haW4iCittc2dzdHIgIkRvbcOkbiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxOTAKK21zZ2lkICJUaGUgZG9tYWluIHRvIGJyb3dzZSBpbiwgb3IgTlVMTCBmb3IgdGhlIGRlZmF1bHQgZG9tYWluIgorbXNnc3RyICJEb23DpG5lbiBhdHQgYmzDpGRkcmEgaSwgZWxsZXIgTlVMTCBmw7ZyIHN0YW5kYXJkZG9tw6RuZW4iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTk2Cittc2dpZCAiU2VydmljZSBUeXBlIgorbXNnc3RyICJUasOkbnN0ZXR5cCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxOTYKK21zZ2lkICJUaGUgc2VydmljZSB0eXBlIG9mIHRoZSBzZWxlY3RlZCBzZXJ2aWNlIgorbXNnc3RyICJUasOkbnN0ZXR5cGVuIGbDtnIgZGVuIG1hcmtlcmFkZSB0asOkbnN0ZW4iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjAyIC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTAyMworbXNnaWQgIlNlcnZpY2UgTmFtZSIKK21zZ3N0ciAiVGrDpG5zdGVuYW1uIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIwMgorbXNnaWQgIlRoZSBzZXJ2aWNlIG5hbWUgb2YgdGhlIHNlbGVjdGVkIHNlcnZpY2UiCittc2dzdHIgIlRqw6Ruc3RlbmFtbmV0IGbDtnIgZGVuIG1hcmtlcmFkZSB0asOkbnN0ZW4iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjA4Cittc2dpZCAiQWRkcmVzcyIKK21zZ3N0ciAiQWRyZXNzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIwOAorbXNnaWQgIlRoZSBhZGRyZXNzIG9mIHRoZSByZXNvbHZlZCBzZXJ2aWNlIgorbXNnc3RyICJBZHJlc3NlbiBmw7ZyIGRlbiB1cHBzbGFnbmEgdGrDpG5zdGVuIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIxMworbXNnaWQgIlBvcnQiCittc2dzdHIgIlBvcnQiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjEzCittc2dpZCAiVGhlIElQIHBvcnQgbnVtYmVyIG9mIHRoZSByZXNvbHZlZCBzZXJ2aWNlIgorbXNnc3RyICJJUC1wb3J0bnVtcmV0IGbDtnIgZGVuIHVwcHNsYWduYSB0asOkbnN0ZW4iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjE5Cittc2dpZCAiSG9zdCBOYW1lIgorbXNnc3RyICJWw6RyZG5hbW4iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjE5Cittc2dpZCAiVGhlIGhvc3QgbmFtZSBvZiB0aGUgcmVzb2x2ZWQgc2VydmljZSIKK21zZ3N0ciAiVsOkcmRuYW1uZXQgZsO2ciBkZW4gdXBwc2xhZ25hIHRqw6Ruc3RlbiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMjUKK21zZ2lkICJUWFQgRGF0YSIKK21zZ3N0ciAiVFhUIERhdGEiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjI1Cittc2dpZCAiVGhlIFRYVCBkYXRhIG9mIHRoZSByZXNvbHZlZCBzZXJ2aWNlIgorbXNnc3RyICJUWFQtZGF0YSBmw7ZyIGRlbiB1cHBzbGFnbmEgdGrDpG5zdGVuIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIzMAorbXNnaWQgIlJlc29sdmUgU2VydmljZSIKK21zZ3N0ciAiU2zDpSB1cHAgdGrDpG5zdCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMzAKK21zZ2lkICJSZXNvbHZlIHRoZSBzZWxlY3RlZCBzZXJ2aWNlIGF1dG9tYXRpY2FsbHkgYmVmb3JlIHJldHVybmluZyIKK21zZ3N0ciAiU2zDpSB1cHAgZGVuIHZhbGRhIHRqw6Ruc3RlbiBhdXRvbWF0aXNrdCBmw7ZyZSDDpXRlcmfDpW5nIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIzNgorbXNnaWQgIlJlc29sdmUgU2VydmljZSBIb3N0IE5hbWUiCittc2dzdHIgIlNsw6UgdXBwIHRqw6Ruc3RlbnMgdsOkcmRuYW1uIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIzNgorbXNnaWQgIiIKKyJSZXNvbHZlIHRoZSBob3N0IG5hbWUgb2YgdGhlIHNlbGVjdGVkIHNlcnZpY2UgYXV0b21hdGljYWxseSBiZWZvcmUgcmV0dXJuaW5nIgorbXNnc3RyICJTbMOlIHVwcCB2w6RyZG5hbW5ldCBmw7ZyIGRlbiB2YWxkYSB0asOkbnN0ZW4gYXV0b21hdGlza3QgZsO2cmUgw6V0ZXJnw6VuZyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyNDIKK21zZ2lkICJBZGRyZXNzIGZhbWlseSIKK21zZ3N0ciAiQWRyZXNzZmFtaWxqIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjI0MgorbXNnaWQgIlRoZSBhZGRyZXNzIGZhbWlseSBmb3IgaG9zdCBuYW1lIHJlc29sdXRpb24iCittc2dzdHIgIkFkcmVzc2ZhbWlsamVuIGbDtnIgdsOkcmRuYW1uZXRzIHVwcHNsYWciCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MzI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWhpIGNsaWVudCBmYWlsdXJlOiAlcyIKK21zZ3N0ciAiRmVsIGkgQXZhaGkta2xpZW50OiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzozODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaGkgcmVzb2x2ZXIgZmFpbHVyZTogJXMiCittc2dzdHIgIkZlbCBpIEF2YWhpLXVwcHNsYWc6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjUxOAorIywgYy1mb3JtYXQKK21zZ2lkICJCcm93c2luZyBmb3Igc2VydmljZSB0eXBlICVzIGluIGRvbWFpbiAlcyBmYWlsZWQ6ICVzIgorbXNnc3RyICJCbMOkZGRyaW5nIGVmdGVyIHRqw6Ruc3RldHlwZW4gJXMgaSBkb23DpG5lbiAlcyBtaXNzbHlja2FkZXM6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjUxOSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoxNjgKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjE2OSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoxNzgKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjE3OQorbXNnaWQgIm4vYSIKK21zZ3N0ciAiSW50ZSB0aWxsZ8OkbmdsaWciCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWhpIGRvbWFpbiBicm93c2VyIGZhaWx1cmU6ICVzIgorbXNnc3RyICJGZWwgaSBBdmFoaS1kb23DpG5ibMOkZGRyYXJlOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo2ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlYWQgQXZhaGkgZG9tYWluOiAlcyIKK21zZ3N0ciAiTWlzc2x5Y2thZGVzIGF0dCBsw6RzYSBBdmFoaS1kb23DpG46ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjcwNgorbXNnaWQgIkJyb3dzZSBzZXJ2aWNlIHR5cGUgbGlzdCBpcyBlbXB0eSEiCittc2dzdHIgIkxpc3RhbiDDtnZlciB0asOkbnN0ZXR5cGVyIMOkciB0b20hIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjcxNworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY29ubmVjdCB0byBBdmFoaSBzZXJ2ZXI6ICVzIgorbXNnc3RyICJNaXNzbHlja2FkZXMgYXR0IGFuc2x1dGEgdGlsbCBBdmFoaS1zZXJ2ZXI6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjczNQorbXNnaWQgIkJyb3dzaW5nIGZvciBzZXJ2aWNlcyBvbiA8Yj5sb2NhbCBuZXR3b3JrPC9iPjoiCittc2dzdHIgIkJsw6RkZHJhciBlZnRlciB0asOkbnN0ZXIgcMOlIDxiPmxva2FsdCBuw6R0dmVyazwvYj46IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjczNworIywgYy1mb3JtYXQKK21zZ2lkICJCcm93c2luZyBmb3Igc2VydmljZXMgaW4gZG9tYWluIDxiPiVzPC9iPjoiCittc2dzdHIgIkJsw6RkZHJpbmcgZWZ0ZXIgdGrDpG5zdGVyIGkgZG9tw6RuZW4gPGI+JXM8L2I+OiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo3NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBicm93c2VyIGZvciAlczogJXMiCittc2dzdHIgIk1pc3NseWNrYWRlcyBtZWQgYXR0IHNrYXBhIGJsw6RkZHJhcmUgZsO2ciAlczogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6OTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgcmVzb2x2ZXIgZm9yICVzIG9mIHR5cGUgJXMgaW4gZG9tYWluICVzOiAlcyIKK21zZ3N0ciAiIgorIk1pc3NseWNrYWRlcyBtZWQgYXR0IHNrYXBhIHVwcHNsYWdhcmUgZsO2ciAlcyBhdiB0eXBlbiAlcyBpIGRvbcOkbmVuICVzOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo5NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBkb21haW4gYnJvd3NlcjogJXMiCittc2dzdHIgIk1pc3NseWNrYWRlcyBtZWQgYXR0IHNrYXBhIGRvbcOkbmJsw6RkZHJhcmU6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjk4OQorbXNnaWQgIkNoYW5nZSBkb21haW4iCittc2dzdHIgIkJ5dCBkb23DpG4iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTAzMSAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNjIKK21zZ2lkICJCcm93c2luZy4uLiIKK21zZ3N0ciAiQmzDpGRkcmFyLi4uIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExMjAKK21zZ2lkICJJbml0aWFsaXppbmcuLi4iCittc2dzdHIgIkluaXRpZXJhci4uLiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTQ0Cittc2dpZCAiTG9jYXRpb24iCittc2dzdHIgIlBsYXRzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNDkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTUzCittc2dpZCAiTmFtZSIKK21zZ3N0ciAiTmFtbiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTU0IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU1MworbXNnaWQgIlR5cGUiCittc2dzdHIgIlR5cCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTY2Cittc2dpZCAiX0RvbWFpbi4uLiIKK21zZ3N0ciAiX0RvbcOkbi4uLiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBbb3B0aW9uc11cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLXMgLS1zc2ggICAgICAgICAgICAgQnJvd3NlIFNTSCBzZXJ2ZXJzXG4iCisiICAgIC12IC0tdm5jICAgICAgICAgICAgIEJyb3dzZSBWTkMgc2VydmVyc1xuIgorIiAgICAtUyAtLXNoZWxsICAgICAgICAgICBCcm93c2UgYm90aCBTU0ggYW5kIFZOQ1xuIgorIiAgICAtZCAtLWRvbWFpbj1ET01BSU4gICBUaGUgZG9tYWluIHRvIGJyb3dzZSBpblxuIgorbXNnc3RyICIiCisiJXMgW2ZsYWdnb3JdXG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFZpc2EgZGVubmEgaGrDpGxwXG4iCisiICAgIC1zIC0tc3NoICAgICAgICAgICAgIEJsw6RkZHJhIGJsYW5kIFNTSC1zZXJ2cmFyXG4iCisiICAgIC12IC0tdm5jICAgICAgICAgICAgIEJsw6RkZHJhIGJsYW5kIFZOQy1zZXJ2cmFyXG4iCisiICAgIC1TIC0tc2hlbGwgICAgICAgICAgIEJsw6RkZHJhIGJsYW5kIGLDpWRlIFNTSCBvY2ggVk5DXG4iCisiICAgIC1kIC0tZG9tYWluPURPTcOETiAgICBEb23DpG5lbiBhdHQgYmzDpGRkcmEgaVxuIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTAxIC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjc3NQorIywgYy1mb3JtYXQKK21zZ2lkICJUb28gbWFueSBhcmd1bWVudHNcbiIKK21zZ3N0ciAiRsO2ciBtw6VuZ2EgYXJndW1lbnRcbiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE0OQorbXNnaWQgIkNob29zZSBTaGVsbCBTZXJ2ZXIiCittc2dzdHIgIlbDpGxqIHNrYWxzZXJ2ZXIiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNTEKK21zZ2lkICJEZXNrdG9wIgorbXNnc3RyICJTa3JpdmJvcmQiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNTIKK21zZ2lkICJUZXJtaW5hbCIKK21zZ3N0ciAiVGVybWluYWwiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNTYKK21zZ2lkICJDaG9vc2UgVk5DIHNlcnZlciIKK21zZ3N0ciAiVsOkbGogVk5DLXNlcnZlciIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE2MQorbXNnaWQgIkNob29zZSBTU0ggc2VydmVyIgorbXNnc3RyICJWw6RsaiBTU0gtc2VydmVyIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbm5lY3RpbmcgdG8gJyVzJyAuLi5cbiIKK21zZ3N0ciAiQW5zbHV0ZXIgdGlsbCBcIiVzXCIuLi5cbiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjI0MAorIywgYy1mb3JtYXQKK21zZ2lkICJleGVjbHAoKSBmYWlsZWQ6ICVzXG4iCittc2dzdHIgImV4ZWNscCgpIG1pc3NseWNrYWRlczogJXNcbiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5jZWxlZC5cbiIKK21zZ3N0ciAiQXZicnV0ZW4uXG4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guZGVza3RvcC5pbi5pbi5oOjEKK21zZ2lkICJBdmFoaSBTU0ggU2VydmVyIEJyb3dzZXIiCittc2dzdHIgIkF2YWhpIFNTSC1zZXJ2ZXJibMOkZGRyYXJlIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmRlc2t0b3AuaW4uaW4uaDoyCittc2dpZCAiQnJvd3NlIGZvciBaZXJvY29uZi1lbmFibGVkIFNTSCBTZXJ2ZXJzIgorbXNnc3RyICJCbMOkZGRyYSBlZnRlciBaZXJvY29uZi1ha3RpdmVyYWRlIFNTSC1zZXJ2cmFyIgorCisjOiAuLi9hdmFoaS11aS9idm5jLmRlc2t0b3AuaW4uaW4uaDoxCittc2dpZCAiQXZhaGkgVk5DIFNlcnZlciBCcm93c2VyIgorbXNnc3RyICJBdmFoaSBWTkMtc2VydmVyYmzDpGRkcmFyZSIKKworIzogLi4vYXZhaGktdWkvYnZuYy5kZXNrdG9wLmluLmluLmg6MgorbXNnaWQgIkJyb3dzZSBmb3IgWmVyb2NvbmYtZW5hYmxlZCBWTkMgU2VydmVycyIKK21zZ3N0ciAiQmzDpGRkcmEgZWZ0ZXIgWmVyb2NvbmYtYWt0aXZlcmFkZSBWTkMtc2VydnJhciIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIjogQWxsIGZvciBub3dcbiIKK21zZ3N0ciAiOiBBbGxhIGp1c3QgbnVcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIjogQ2FjaGUgZXhoYXVzdGVkXG4iCittc2dzdHIgIjogQ2FjaGVuIMOkciBmdWxsXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjIzOSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgc2VydmljZSAnJXMnIG9mIHR5cGUgJyVzJyBpbiBkb21haW4gJyVzJzogJXNcbiIKK21zZ3N0ciAiIgorIk1pc3NseWNrYWRlcyBtZWQgYXR0IHNsw6UgdXBwIHRqw6Ruc3RlbiBcIiVzXCIgYXYgdHlwZW4gXCIlc1wiIGkgZG9tw6RuZW4gXCIlcyIKKyJcIjogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MzQwCisjLCBjLWZvcm1hdAorbXNnaWQgInNlcnZpY2VfYnJvd3NlciBmYWlsZWQ6ICVzXG4iCittc2dzdHIgInNlcnZpY2VfYnJvd3NlciBtaXNzbHlja2FkZXM6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjM3OAorIywgYy1mb3JtYXQKK21zZ2lkICJhdmFoaV9zZXJ2aWNlX2Jyb3dzZXJfbmV3KCkgZmFpbGVkOiAlc1xuIgorbXNnc3RyICJhdmFoaV9zZXJ2aWNlX2Jyb3dzZXJfbmV3KCkgbWlzc2x5Y2thZGVzOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VydmljZV90eXBlX2Jyb3dzZXIgZmFpbGVkOiAlc1xuIgorbXNnc3RyICJzZXJ2aWNlX3R5cGVfYnJvd3NlciBtaXNzbHlja2FkZXM6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjQ0NAorIywgYy1mb3JtYXQKK21zZ2lkICJhdmFoaV9zZXJ2aWNlX3R5cGVfYnJvd3Nlcl9uZXcoKSBmYWlsZWQ6ICVzXG4iCittc2dzdHIgImF2YWhpX3NlcnZpY2VfdHlwZV9icm93c2VyX25ldygpIG1pc3NseWNrYWRlczogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTE5CisjLCBjLWZvcm1hdAorbXNnaWQgImF2YWhpX2RvbWFpbl9icm93c2VyX25ldygpIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAiYXZhaGlfZG9tYWluX2Jyb3dzZXJfbmV3KCkgbWlzc2x5Y2thZGVzOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1MzUgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjM5NAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI4MCAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBxdWVyeSB2ZXJzaW9uIHN0cmluZzogJXNcbiIKK21zZ3N0ciAiTWlzc2x5Y2thZGVzIG1lZCBhdHQgZnLDpWdhIGVmdGVyIHZlcnNpb25zc3Ryw6RuZzogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTQwIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozOTkKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyODUgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE3MworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcXVlcnkgaG9zdCBuYW1lOiAlc1xuIgorbXNnc3RyICJNaXNzbHlja2FkZXMgbWVkIGF0dCBmcsOlZ2EgZWZ0ZXIgdsOkcmRuYW1uOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NDQgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjQwMworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI4OSAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlcnZlciB2ZXJzaW9uOiAlczsgSG9zdCBuYW1lOiAlc1xuIgorbXNnc3RyICJTZXJ2ZXJ2ZXJzaW9uOiAlczsgVsOkcmRuYW1uOiAlc1xuIgorCisjLiBUcmFuc2xhdG9yczogVGhpcyBpcyBhIGNvbHVtbiBoZWFkaW5nIHdpdGggYWJicmV2aWF0aW9ucyBmb3IKKyMuICogICBFdmVudCAoKy8tKSwgTmV0d29yayBJbnRlcmZhY2UsIFByb3RvY29sIChJUHY0L3Y2KSwgRG9tYWluCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRSBJZmNlIFByb3QgRG9tYWluXG4iCittc2dzdHIgIkggR3LDpG4gUHJvdCBEb23DpG5cbiIKKworIy4gVHJhbnNsYXRvcnM6IFRoaXMgaXMgYSBjb2x1bW4gaGVhZGluZyB3aXRoIGFiYnJldmlhdGlvbnMgZm9yCisjLiAqICAgRXZlbnQgKCsvLSksIE5ldHdvcmsgSW50ZXJmYWNlLCBQcm90b2NvbCAoSVB2NC92NiksIERvbWFpbgorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUgSWZjZSBQcm90ICUtKnMgJS0yMHMgRG9tYWluXG4iCittc2dzdHIgIkggR3LDpG4gUHJvdCAlLSpzICUtMjBzIERvbcOkblxuIgorCisjLiBXZSBoYXZlIGJlZW4gZGlzY29ubmVjdGVkLCBzbyBsZXQgcmVjb25uZWN0CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1ODUgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE2MworIywgYy1mb3JtYXQKK21zZ2lkICJEaXNjb25uZWN0ZWQsIHJlY29ubmVjdGluZyAuLi5cbiIKK21zZ3N0ciAiRnLDpW5rb3BwbGFkLCDDpXRlcmFuc2x1dGVyIC4uLlxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1OTkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6ODI5CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTcwIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozODYKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyNzIgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE2MAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGNsaWVudCBvYmplY3Q6ICVzXG4iCittc2dzdHIgIk1pc3NseWNrYWRlcyBtZWQgYXR0IHNrYXBhIGtsaWVudG9iamVrdDogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NjA0IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxNzUKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoxNDMgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNsaWVudCBmYWlsdXJlLCBleGl0aW5nOiAlc1xuIgorbXNnc3RyICJLbGllbnRmZWwsIGF2c2x1dGFyOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo2MjMgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjIwNgorIywgYy1mb3JtYXQKK21zZ2lkICJXYWl0aW5nIGZvciBkYWVtb24gLi4uXG4iCittc2dzdHIgIlbDpG50YXIgcMOlIGRlbW9uIC4uLlxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo2NDcKK21zZ2lkICIiCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFNob3cgdmVyc2lvblxuIgorIiAgICAtRCAtLWJyb3dzZS1kb21haW5zICBCcm93c2UgZm9yIGJyb3dzaW5nIGRvbWFpbnMgaW5zdGVhZCBvZiBzZXJ2aWNlc1xuIgorIiAgICAtYSAtLWFsbCAgICAgICAgICAgICBTaG93IGFsbCBzZXJ2aWNlcywgcmVnYXJkbGVzcyBvZiB0aGUgdHlwZVxuIgorIiAgICAtZCAtLWRvbWFpbj1ET01BSU4gICBUaGUgZG9tYWluIHRvIGJyb3dzZSBpblxuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBFbmFibGUgdmVyYm9zZSBtb2RlXG4iCisiICAgIC10IC0tdGVybWluYXRlICAgICAgIFRlcm1pbmF0ZSBhZnRlciBkdW1waW5nIGEgbW9yZSBvciBsZXNzIGNvbXBsZXRlICIKKyJsaXN0XG4iCisiICAgIC1jIC0tY2FjaGUgICAgICAgICAgIFRlcm1pbmF0ZSBhZnRlciBkdW1waW5nIGFsbCBlbnRyaWVzIGZyb20gdGhlIGNhY2hlXG4iCisiICAgIC1sIC0taWdub3JlLWxvY2FsICAgIElnbm9yZSBsb2NhbCBzZXJ2aWNlc1xuIgorIiAgICAtciAtLXJlc29sdmUgICAgICAgICBSZXNvbHZlIHNlcnZpY2VzIGZvdW5kXG4iCisiICAgIC1mIC0tbm8tZmFpbCAgICAgICAgIERvbid0IGZhaWwgaWYgdGhlIGRhZW1vbiBpcyBub3QgYXZhaWxhYmxlXG4iCisiICAgIC1wIC0tcGFyc2FibGUgICAgICAgIE91dHB1dCBpbiBwYXJzYWJsZSBmb3JtYXRcbiIKK21zZ3N0ciAiIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBWaXNhIGRlbm5hIGhqw6RscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBWaXNhIHZlcnNpb25cbiIKKyIgICAgLUQgLS1icm93c2UtZG9tYWlucyAgQmzDpGRkcmEgZWZ0ZXIgYmzDpGRkcmluZ3Nkb23DpG5lciBpc3TDpGxsZXQgZsO2ciAiCisidGrDpG5zdGVyXG4iCisiICAgIC1hIC0tYWxsICAgICAgICAgICAgIFZpc2EgYWxsYSB0asOkbnN0ZXIsIG9hdnNldHQgdHlwZW5cbiIKKyIgICAgLWQgLS1kb21haW49RE9Nw4ROICAgIERvbcOkbmVuIGF0dCBibMOkZGRyYSBpXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEFrdGl2ZXJhIGluZm9ybWF0aXZ0IGzDpGdlXG4iCisiICAgIC10IC0tdGVybWluYXRlICAgICAgIEF2c2x1dGEgZWZ0ZXIgZHVtcG5pbmcgYXYgZW4gbWVyIGVsbGVyIG1pbmRyZSAiCisia29tcGxldHQgbGlzdGFcbiIKKyIgICAgLWMgLS1jYWNoZSAgICAgICAgICAgQXZzbHV0YSBlZnRlciBkdW1wbmluZyBhdiBhbGxhIHBvc3RlciBmcsOlbiBjYWNoZW5cbiIKKyIgICAgLWwgLS1pZ25vcmUtbG9jYWwgICAgSWdub3JlcmEgbG9rYWxhIHRqw6Ruc3RlclxuIgorIiAgICAtciAtLXJlc29sdmUgICAgICAgICBTbMOlIHVwcCB0asOkbnN0ZXIgc29tIGhpdHRhdHNcbiIKKyIgICAgLWYgLS1uby1mYWlsICAgICAgICAgTWlzc2x5Y2thIGludGUgb20gZGVtb25lbiBpbnRlIMOkciB0aWxsZ8OkbmdsaWdcbiIKKyIgICAgLXAgLS1wYXJzYWJsZSAgICAgICAgU2tyaXYgdXQgaSB0b2xrbmluZ3NiYXJ0IGZvcm1hdFxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo2NjAKK21zZ2lkICIiCisiICAgIC1rIC0tbm8tZGItbG9va3VwICAgIERvbid0IGxvb2t1cCBzZXJ2aWNlIHR5cGVzXG4iCisiICAgIC1iIC0tZHVtcC1kYiAgICAgICAgIER1bXAgc2VydmljZSB0eXBlIGRhdGFiYXNlXG4iCittc2dzdHIgIiIKKyIgICAgLWsgLS1uby1kYi1sb29rdXAgICAgU2zDpSBpbnRlIHVwcCB0asOkbnN0ZXR5cGVyXG4iCisiICAgIC1iIC0tZHVtcC1kYiAgICAgICAgIER1bXBhIGRhdGFiYXNlbiDDtnZlciB0asOkbnN0ZXR5cGVyXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjc2NiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvbyBmZXcgYXJndW1lbnRzXG4iCittc2dzdHIgIkbDtnIgZsOlIGFyZ3VtZW50XG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjgyMSAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6Mzc4CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjY0IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBzaW1wbGUgcG9sbCBvYmplY3QuXG4iCittc2dzdHIgIk1pc3NseWNrYWRlcyBtZWQgYXR0IHNrYXBhIGVua2VsdCBwb2xsLW9iamVrdC5cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkVzdGFibGlzaGVkIHVuZGVyIG5hbWUgJyVzJ1xuIgorbXNnc3RyICJFdGFibGVyYWQgdW5kZXIgbmFtbmV0IFwiJXNcIlxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyOiAlc1xuIgorbXNnc3RyICJNaXNzbHlja2FkZXMgYXR0IHJlZ2lzdHJlcmE6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICJOYW1lIGNvbGxpc2lvbiwgcGlja2luZyBuZXcgbmFtZSAnJXMnLlxuIgorbXNnc3RyICJOYW1ua29sbGlzaW9uLCB2w6RsamVyIG55dHQgbmFtbiBcIiVzXCIuXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBlbnRyeSBncm91cDogJXNcbiIKK21zZ3N0ciAiTWlzc2x5Y2thZGVzIG1lZCBhdHQgc2thcGEgcG9zdGdydXBwOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgYWRkcmVzczogJXNcbiIKK21zZ3N0ciAiTWlzc2x5Y2thZGVzIGF0dCBsw6RnZ2EgdGlsbCBhZHJlc3M6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBzZXJ2aWNlOiAlc1xuIgorbXNnc3RyICJNaXNzbHlja2FkZXMgYXR0IGzDpGdnYSB0aWxsIHRqw6Ruc3Q6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBzdWJ0eXBlICclcyc6ICVzXG4iCittc2dzdHIgIk1pc3NseWNrYWRlcyBtZWQgYXR0IGzDpGdnYSB0aWxsIHVuZGVydHlwZW4gXCIlc1wiOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkhvc3QgbmFtZSBjb25mbGljdFxuIgorbXNnc3RyICJWw6RyZG5hbW5za29uZmxpa3RcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgW29wdGlvbnNdICVzIDxuYW1lPiA8dHlwZT4gPHBvcnQ+IFs8dHh0IC4uLj5dXG4iCisiJXMgW29wdGlvbnNdICVzIDxob3N0LW5hbWU+IDxhZGRyZXNzPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLXMgLS1zZXJ2aWNlICAgICAgICAgUHVibGlzaCBzZXJ2aWNlXG4iCisiICAgIC1hIC0tYWRkcmVzcyAgICAgICAgIFB1Ymxpc2ggYWRkcmVzc1xuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBFbmFibGUgdmVyYm9zZSBtb2RlXG4iCisiICAgIC1kIC0tZG9tYWluPURPTUFJTiAgIERvbWFpbiB0byBwdWJsaXNoIHNlcnZpY2UgaW5cbiIKKyIgICAgLUggLS1ob3N0PURPTUFJTiAgICAgSG9zdCB3aGVyZSBzZXJ2aWNlIHJlc2lkZXNcbiIKKyIgICAgICAgLS1zdWJ0eXBlPVNVQlRZUEUgQW4gYWRkaXRpb25hbCBzdWJ0eXBlIHRvIHJlZ2lzdGVyIHRoaXMgc2VydmljZSAiCisid2l0aFxuIgorIiAgICAtUiAtLW5vLXJldmVyc2UgICAgICBEbyBub3QgcHVibGlzaCByZXZlcnNlIGVudHJ5IHdpdGggYWRkcmVzc1xuIgorIiAgICAtZiAtLW5vLWZhaWwgICAgICAgICBEb24ndCBmYWlsIGlmIHRoZSBkYWVtb24gaXMgbm90IGF2YWlsYWJsZVxuIgorbXNnc3RyICIiCisiJXMgW2ZsYWdnb3JdICVzIDxuYW1uPiA8dHlwPiA8cG9ydD4gWzx0eHQgLi4uPl1cbiIKKyIlcyBbZmxhZ2dvcl0gJXMgPHbDpHJkbmFtbj4gPGFkcmVzcz5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgVmlzYSBkZW5uYSBoasOkbHBcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgVmlzYSB2ZXJzaW9uXG4iCisiICAgIC1zIC0tc2VydmljZSAgICAgICAgIFB1YmxpY2VyYSB0asOkbnN0XG4iCisiICAgIC1hIC0tYWRkcmVzcyAgICAgICAgIFB1YmxpY2VyYSBhZHJlc3NcbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgQWt0aXZlcmEgaW5mb3JtYXRpdnQgbMOkZ2VcbiIKKyIgICAgLWQgLS1kb21haW49RE9Nw4ROICAgIERvbcOkbiBhdHQgcHVibGljZXJhIHRqw6Ruc3QgaVxuIgorIiAgICAtSCAtLWhvc3Q9RE9Nw4ROICAgICAgVsOkcmQgZMOkciB0asOkbnN0ZW4gZmlubnNcbiIKKyIgICAgICAgLS1zdWJ0eXBlPVVOREVSVFlQIEVuIHl0dGVybGlnYXJlIHVuZGVydHlwIGF0dCByZWdpc3RyZXJhIGRlbm5hICIKKyJ0asOkbnN0IG1lZFxuIgorIiAgICAtUiAtLW5vLXJldmVyc2UgICAgICBQdWJsaWNlcmEgaW50ZSBiYWtsw6RuZ2VzcG9zdCBtZWQgYWRkcmVzc1xuIgorIiAgICAtZiAtLW5vLWZhaWwgICAgICAgICBNaXNzbHlja2EgaW50ZSBvbSBkZW1vbmVuIGludGUgw6RyIHRpbGxnw6RuZ2xpZ1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MzAzIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIG51bWJlciBvZiBhcmd1bWVudHNcbiIKK21zZ3N0ciAiRMOlbGlndCBhbnRhbCBhcmd1bWVudFxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBwb3J0IG51bWJlcjogJXNcbiIKK21zZ3N0ciAiTWlzc2x5Y2thZGVzIG1lZCBhdHQgdG9sa2EgcG9ydG51bW1lcjogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjM2MSAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGNvbW1hbmQgc3BlY2lmaWVkLlxuIgorbXNnc3RyICJJbmdldCBrb21tYW5kbyBzcGVjaWZpY2VyYXQuXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzo4OQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSBob3N0IG5hbWUgJyVzJzogJXNcbiIKK21zZ3N0ciAiTWlzc2x5Y2thZGVzIG1lZCBhdHQgc2zDpSB1cHAgdsOkcmRuYW1uZXQgXCIlc1wiOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIGFkZHJlc3MgJyVzJzogJXNcbiIKK21zZ3N0ciAiTWlzc2x5Y2thZGVzIG1lZCBhdHQgc2zDpSB1cHAgYWRyZXNzZW4gXCIlc1wiOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBbb3B0aW9uc10gJXMgPGhvc3QgbmFtZSAuLi4+XG4iCisiJXMgW29wdGlvbnNdICVzIDxhZGRyZXNzIC4uLiA+XG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFNob3cgdmVyc2lvblxuIgorIiAgICAtbiAtLW5hbWUgICAgICAgICAgICBSZXNvbHZlIGhvc3QgbmFtZVxuIgorIiAgICAtYSAtLWFkZHJlc3MgICAgICAgICBSZXNvbHZlIGFkZHJlc3NcbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgRW5hYmxlIHZlcmJvc2UgbW9kZVxuIgorIiAgICAtNiAgICAgICAgICAgICAgICAgICBMb29rdXAgSVB2NiBhZGRyZXNzXG4iCisiICAgIC00ICAgICAgICAgICAgICAgICAgIExvb2t1cCBJUHY0IGFkZHJlc3NcbiIKK21zZ3N0ciAiIgorIiVzIFtmbGFnZ29yXSAlcyA8dsOkcmRuYW1uIC4uLj5cbiIKKyIlcyBbZmxhZ2dvcl0gJXMgPGFkcmVzcyAuLi4gPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBWaXNhIGRlbm5hIGhqw6RscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBWaXNhIHZlcnNpb25cbiIKKyIgICAgLW4gLS1uYW1lICAgICAgICAgICAgU2zDpSB1cHAgdsOkcmRuYW1uXG4iCisiICAgIC1hIC0tYWRkcmVzcyAgICAgICAgIFNsw6UgdXBwIGFkcmVzc1xuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBBa3RpdmVyYSBpbmZvcm1hdGl2dCBsw6RnZVxuIgorIiAgICAtNiAgICAgICAgICAgICAgICAgICBTbMOlIHVwcCBJUHY2LWFkcmVzc1xuIgorIiAgICAtNCAgICAgICAgICAgICAgICAgICBTbMOlIHVwcCBJUHY0LWFkcmVzc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6Mjk5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBob3N0IG5hbWUgcmVzb2x2ZXI6ICVzXG4iCittc2dzdHIgIk1pc3NseWNrYWRlcyBtZWQgYXR0IHNrYXBhIHVwcHNsYWdhcmUgZsO2ciB2w6RyZG5hbW46ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzozMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIGFkZHJlc3MgJyVzJ1xuIgorbXNnc3RyICJNaXNzbHlja2FkZXMgbWVkIGF0dCB0b2xrYSBhZHJlc3NlbiBcIiVzXCJcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjMxNAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGFkZHJlc3MgcmVzb2x2ZXI6ICVzXG4iCittc2dzdHIgIk1pc3NseWNrYWRlcyBtZWQgYXR0IHNrYXBhIGFkcmVzc3VwcHNsYWdhcmU6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgW29wdGlvbnNdIDxuZXcgaG9zdCBuYW1lPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgRW5hYmxlIHZlcmJvc2UgbW9kZVxuIgorbXNnc3RyICIiCisiJXMgW2ZsYWdnb3JdIDxueXR0IHbDpHJkbmFtbj5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgVmlzYSBkZW5uYSBoasOkbHBcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgVmlzYSB2ZXJzaW9uXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEFrdGl2ZXJhIGluZm9ybWF0aXZ0IGzDpGdlXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzLCBleHBlY3RpbmcgZXhhY3RseSBvbmUuXG4iCittc2dzdHIgIk9naWx0aWd0IGFudGFsIGFyZ3VtZW50LCBleGFrdCBldHQgYXJndW1lbnQgZsO2cnbDpG50YXMuXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSG9zdCBuYW1lIHN1Y2Nlc3NmdWxseSBjaGFuZ2VkIHRvICVzXG4iCittc2dzdHIgIlbDpHJkbmFtbmV0IMOkbmRyYWRlcyB0aWxsICVzXG4iCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvcG8vdWsucG8gYi9hdmFoaS0wLjYuMzEvcG8vdWsucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU4Yzg3NQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9wby91ay5wbwpAQCAtMCwwICsxLDg1NyBAQAorIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYyAoQykgMjAwOQorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgYXZhaGkgcGFja2FnZS4KKyMKKyMgWXVyaSBDaG9ybm9pdmFuIDx5dXJjaG9yQHVrci5uZXQ+LCAyMDA5LCAyMDEwLgorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogYXZhaGkubWFzdGVyLXR4LnVrXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDExLTA0LTAyIDAzOjIzKzAyMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDEwLTA3LTAxIDA3OjMwKzAzMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IFl1cmkgQ2hvcm5vaXZhbiA8eXVyY2hvckB1a3IubmV0PlxuIgorIkxhbmd1YWdlLVRlYW06IFVrcmFpbmlhbiA8dHJhbnNsYXRpb25AbGludXgub3JnLnVhPlxuIgorIkxhbmd1YWdlOiB1a1xuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlgtR2VuZXJhdG9yOiBMb2thbGl6ZSAxLjFcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTM7IHBsdXJhbD0obiUxMD09MSAmJiBuJTEwMCE9MTEgPyAwIDogbiUxMD49MiAmJiBuIgorIiUxMDw9NCAmJiAobiUxMDA8MTAgfHwgbiUxMDA+PTIwKSA/IDEgOiAyKTtcbiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzAKK21zZ2lkICJPSyIKK21zZ3N0ciAi0JPQsNGA0LDQt9C0IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozMQorbXNnaWQgIk9wZXJhdGlvbiBmYWlsZWQiCittc2dzdHIgItCh0L/RgNC+0LHQsCDQstC40LrQvtC90LDQvdC90Y8g0LTRltGXINCx0YPQu9CwINC90LXQstC00LDQu9C+0Y4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjMyCittc2dpZCAiQmFkIHN0YXRlIgorbXNnc3RyICLQodGC0LDQvSDQv9C+0LzQuNC70LrQuCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzMKK21zZ2lkICJJbnZhbGlkIGhvc3QgbmFtZSIKK21zZ3N0ciAi0J3QtdC60L7RgNC10LrRgtC90LAg0L3QsNC30LLQsCDQstGD0LfQu9CwIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozNAorbXNnaWQgIkludmFsaWQgZG9tYWluIG5hbWUiCittc2dzdHIgItCd0LXQutC+0YDQtdC60YLQvdCwINC90LDQt9Cy0LAg0LTQvtC80LXQvdGDIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozNQorbXNnaWQgIk5vIHN1aXRhYmxlIG5ldHdvcmsgcHJvdG9jb2wgYXZhaWxhYmxlIgorbXNnc3RyICLQndC1INC30L3QsNC50LTQtdC90L4g0LLRltC00L/QvtCy0ZbQtNC90L7Qs9C+INC80LXRgNC10LbQtdCy0L7Qs9C+INC/0YDQvtGC0L7QutC+0LvRgyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzYKK21zZ2lkICJJbnZhbGlkIEROUyBUVEwiCittc2dzdHIgItCd0LXQutC+0YDQtdC60YLQvdC1IFRUTCBETlMiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM3Cittc2dpZCAiUmVzb3VyY2UgcmVjb3JkIGtleSBpcyBwYXR0ZXJuIgorbXNnc3RyICLQmtC70Y7RhyDQt9Cw0L/QuNGB0YMg0YDQtdGB0YPRgNGB0YMg0ZQg0YjQsNCx0LvQvtC90L7QvCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzgKK21zZ2lkICJMb2NhbCBuYW1lIGNvbGxpc2lvbiIKK21zZ3N0ciAi0JfQsdGW0LMg0LvQvtC60LDQu9GM0L3QuNGFINC90LDQt9CyIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozOQorbXNnaWQgIkludmFsaWQgcmVjb3JkIgorbXNnc3RyICLQndC10LrQvtGA0LXQutGC0L3QuNC5INC30LDQv9C40YEiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQxCittc2dpZCAiSW52YWxpZCBzZXJ2aWNlIG5hbWUiCittc2dzdHIgItCd0LXQutC+0YDQtdC60YLQvdCwINC90LDQt9Cy0LAg0YHQu9GD0LbQsdC4IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0MgorbXNnaWQgIkludmFsaWQgc2VydmljZSB0eXBlIgorbXNnc3RyICLQndC10LrQvtGA0LXQutGC0L3QuNC5INGC0LjQvyDRgdC70YPQttCx0LgiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQzCittc2dpZCAiSW52YWxpZCBwb3J0IG51bWJlciIKK21zZ3N0ciAi0J3QtdC60L7RgNC10LrRgtC90LjQuSDQvdC+0LzQtdGAINC/0L7RgNGC0YMiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQ0Cittc2dpZCAiSW52YWxpZCByZWNvcmQga2V5IgorbXNnc3RyICLQndC10LrQvtGA0LXQutGC0L3QuNC5INC60LvRjtGHINC30LDQv9C40YHRgyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDUKK21zZ2lkICJJbnZhbGlkIGFkZHJlc3MiCittc2dzdHIgItCd0LXQutC+0YDQtdC60YLQvdCwINCw0LTRgNC10YHQsCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDYKK21zZ2lkICJUaW1lb3V0IHJlYWNoZWQiCittc2dzdHIgItCf0LXRgNC10LLQuNGJ0LXQvdC+INGH0LDRgSDQvtGH0ZbQutGD0LLQsNC90L3RjyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDcKK21zZ2lkICJUb28gbWFueSBjbGllbnRzIgorbXNnc3RyICLQl9Cw0LHQsNCz0LDRgtC+INC60LvRltGU0L3RgtGW0LIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQ4Cittc2dpZCAiVG9vIG1hbnkgb2JqZWN0cyIKK21zZ3N0ciAi0JfQsNCx0LDQs9Cw0YLQviDQvtCx4oCZ0ZTQutGC0ZbQsiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDkKK21zZ2lkICJUb28gbWFueSBlbnRyaWVzIgorbXNnc3RyICLQl9Cw0LHQsNCz0LDRgtC+INC30LDQv9C40YHRltCyIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1MAorbXNnaWQgIk9TIEVycm9yIgorbXNnc3RyICLQn9C+0LzQuNC70LrQsCDQntChIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1MgorbXNnaWQgIkFjY2VzcyBkZW5pZWQiCittc2dzdHIgItCX0LDQsdC+0YDQvtC90LXQvdC+INC00L7RgdGC0YPQvyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTMKK21zZ2lkICJJbnZhbGlkIG9wZXJhdGlvbiIKK21zZ3N0ciAi0J3QtdC60L7RgNC10LrRgtC90LAg0LTRltGPIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1NAorbXNnaWQgIkFuIHVuZXhwZWN0ZWQgRC1CdXMgZXJyb3Igb2NjdXJlZCIKK21zZ3N0ciAi0KHRgtCw0LvQsNGB0Y8g0L3QtdC/0LXRgNC10LTQsdCw0YfQtdC90LAg0L/QvtC80LjQu9C60LAgRC1CdXMiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU1Cittc2dpZCAiRGFlbW9uIGNvbm5lY3Rpb24gZmFpbGVkIgorbXNnc3RyICLQodC/0YDQvtCx0LAg0LLRgdGC0LDQvdC+0LLQu9C10L3QvdGPINC30LLigJnRj9C30LrRgyDQtyDRhNC+0L3QvtCy0L7RjiDRgdC70YPQttCx0L7RjiDQt9Cw0LLQtdGA0YjQuNC70LDRgdGPINC90LXQstC00LDQu9C+IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1NgorbXNnaWQgIk1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgItCf0LDQvOKAmdGP0YLRjCDQstC40YfQtdGA0L/QsNC90L4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU3Cittc2dpZCAiVGhlIG9iamVjdCBwYXNzZWQgaW4gd2FzIG5vdCB2YWxpZCIKK21zZ3N0ciAi0J/QtdGA0LXQtNCw0L3QuNC5INC+0LHigJnRlNC60YIg0ZQg0L3QtdC60L7RgNC10LrRgtC90LjQvCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTgKK21zZ2lkICJEYWVtb24gbm90IHJ1bm5pbmciCittc2dzdHIgItCk0L7QvdC+0LLRgyDRgdC70YPQttCx0YMg0L3QtSDQt9Cw0L/Rg9GJ0LXQvdC+IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1OQorbXNnaWQgIkludmFsaWQgaW50ZXJmYWNlIGluZGV4IgorbXNnc3RyICLQndC10LrQvtGA0LXQutGC0L3QuNC5INGW0L3QtNC10LrRgSDRltC90YLQtdGA0YTQtdC50YHRgyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjAKK21zZ2lkICJJbnZhbGlkIHByb3RvY29sIHNwZWNpZmljYXRpb24iCittc2dzdHIgItCd0LXQutC+0YDQtdC60YLQvdCwINGB0L/QtdGG0LjRhNGW0LrQsNGG0ZbRjyDQv9GA0L7RgtC+0LrQvtC70YMiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjYxCittc2dpZCAiSW52YWxpZCBmbGFncyIKK21zZ3N0ciAi0L3QtdC60L7RgNC10LrRgtC90ZYg0L/RgNCw0L/QvtGA0YbRliIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjMKK21zZ2lkICJOb3QgZm91bmQiCittc2dzdHIgItCd0LUg0LfQvdCw0LnQtNC10L3QviIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjQKK21zZ2lkICJJbnZhbGlkIGNvbmZpZ3VyYXRpb24iCittc2dzdHIgItCd0LXQutC+0YDQtdC60YLQvdC1INC90LDQu9Cw0YjRgtGD0LLQsNC90L3RjyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjUKK21zZ2lkICJWZXJzaW9uIG1pc21hdGNoIgorbXNnc3RyICLQndC10LLRltC00L/QvtCy0ZbQtNC90ZbRgdGC0Ywg0LLQtdGA0YHRltC5IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2NgorbXNnaWQgIkludmFsaWQgc2VydmljZSBzdWJ0eXBlIgorbXNnc3RyICLQndC10LrQvtGA0LXQutGC0L3QuNC5INC/0ZbQtNGC0LjQvyDRgdC70YPQttCx0LgiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY3Cittc2dpZCAiSW52YWxpZCBwYWNrZXQiCittc2dzdHIgItCd0LXQutC+0YDQtdC60YLQvdC40Lkg0L/QsNC60LXRgiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjgKK21zZ2lkICJJbnZhbGlkIEROUyByZXR1cm4gY29kZSIKK21zZ3N0ciAi0J3QtdC60L7RgNC10LrRgtC90LjQuSDQutC+0LQg0L/QvtCy0LXRgNC90LXQvdC90Y8gRE5TIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2OQorbXNnaWQgIkROUyBmYWlsdXJlOiBGT1JNRVJSIgorbXNnc3RyICLQn9C+0LzQuNC70LrQsCBETlM6IEZPUk1FUlIiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjcwCittc2dpZCAiRE5TIGZhaWx1cmU6IFNFUlZGQUlMIgorbXNnc3RyICLQn9C+0LzQuNC70LrQsCBETlM6IFNFUlZGQUlMIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3MQorbXNnaWQgIkROUyBmYWlsdXJlOiBOWERPTUFJTiIKK21zZ3N0ciAi0J/QvtC80LjQu9C60LAgRE5TOiBOWERPTUFJTiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzIKK21zZ2lkICJETlMgZmFpbHVyZTogTk9USU1QIgorbXNnc3RyICLQn9C+0LzQuNC70LrQsCBETlM6IE5PVElNUCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzQKK21zZ2lkICJETlMgZmFpbHVyZTogUkVGVVNFRCIKK21zZ3N0ciAi0J/QvtC80LjQu9C60LAgRE5TOiBSRUZVU0VEIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3NQorbXNnaWQgIkROUyBmYWlsdXJlOiBZWERPTUFJTiIKK21zZ3N0ciAi0J/QvtC80LjQu9C60LAgRE5TOiBZWERPTUFJTiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzYKK21zZ2lkICJETlMgZmFpbHVyZTogWVhSUlNFVCIKK21zZ3N0ciAi0J/QvtC80LjQu9C60LAgRE5TOiBZWFJSU0VUIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3NworbXNnaWQgIkROUyBmYWlsdXJlOiBOWFJSU0VUIgorbXNnc3RyICLQn9C+0LzQuNC70LrQsCBETlM6IE5YUlJTRVQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc4Cittc2dpZCAiRE5TIGZhaWx1cmU6IE5PVEFVVEgiCittc2dzdHIgItCf0L7QvNC40LvQutCwIEROUzogTk9UQVVUSCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzkKK21zZ2lkICJETlMgZmFpbHVyZTogTk9UWk9ORSIKK21zZ3N0ciAi0J/QvtC80LjQu9C60LAgRE5TOiBOT1RaT05FIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4MAorbXNnaWQgIkludmFsaWQgUkRBVEEiCittc2dzdHIgItCd0LXQutC+0YDQtdC60YLQvdC1INC30L3QsNGH0LXQvdC90Y8gUkRBVEEiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjgxCittc2dpZCAiSW52YWxpZCBETlMgdHlwZSIKK21zZ3N0ciAi0J3QtdC60L7RgNC10LrRgtC90LjQuSDRgtC40L8gRE5TIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4MgorbXNnaWQgIkludmFsaWQgRE5TIGNsYXNzIgorbXNnc3RyICLQndC10LrQvtGA0LXQutGC0L3QuNC5INC60LvQsNGBIEROUyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODMKK21zZ2lkICJOb3Qgc3VwcG9ydGVkIgorbXNnc3RyICLQndC1INC/0ZbQtNGC0YDQuNC80YPRlNGC0YzRgdGPIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4NQorbXNnaWQgIk5vdCBwZXJtaXR0ZWQiCittc2dzdHIgItCX0LDQsdC+0YDQvtC90LXQvdC+IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4NgorbXNnaWQgIkludmFsaWQgYXJndW1lbnQiCittc2dzdHIgItCd0LXQutC+0YDQtdC60YLQvdC40Lkg0LDRgNCz0YPQvNC10L3RgiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODcKK21zZ2lkICJJcyBlbXB0eSIKK21zZ3N0ciAi0L/QvtGA0L7QttC90ZbQuSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODgKK21zZ2lkICJUaGUgcmVxdWVzdGVkIG9wZXJhdGlvbiBpcyBpbnZhbGlkIGJlY2F1c2UgcmVkdW5kYW50IgorbXNnc3RyICLQkdCw0LbQsNC90LAg0LTRltGPINGUINC90LXQutC+0YDQtdC60YLQvdC+0Y4g0YfQtdGA0LXQtyDRgdCy0L7RjiDQvdC10LLQuNC30L3QsNGH0LXQvdGW0YHRgtGMIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo5NAorbXNnaWQgIkludmFsaWQgRXJyb3IgQ29kZSIKK21zZ3N0ciAi0J3QtdC60L7RgNC10LrRgtC90LjQuSDQutC+0LQg0L/QvtC80LjQu9C60LgiCisKKyM6IC4uL2F2YWhpLWRpc2NvdmVyLXN0YW5kYWxvbmUvYXZhaGktZGlzY292ZXIudWkuaDoxCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6NzYKK21zZ2lkICI8aT5ObyBzZXJ2aWNlIGN1cnJlbnRseSBzZWxlY3RlZC48L2k+IgorbXNnc3RyICI8aT7QndC1INC+0LHRgNCw0L3QviDQttC+0LTQvdC+0Zcg0YHQu9GD0LbQsdC4LjwvaT4iCisKKyM6IC4uL2F2YWhpLWRpc2NvdmVyLXN0YW5kYWxvbmUvYXZhaGktZGlzY292ZXIudWkuaDoyCittc2dpZCAiQXZhaGkgRGlzY292ZXJ5IgorbXNnc3RyICLQodC70YPQttCx0LAg0LLQuNGP0LLQu9C10L3QvdGPIEF2YWhpIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIuZGVza3RvcC5pbi5pbi5oOjEKK21zZ2lkICJBdmFoaSBaZXJvY29uZiBCcm93c2VyIgorbXNnc3RyICLQn9C10YDQtdCz0LvRj9C00LDRhyBaZXJvY29uZiBBdmFoaSIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLmRlc2t0b3AuaW4uaW4uaDoyCittc2dpZCAiQnJvd3NlIGZvciBaZXJvY29uZiBzZXJ2aWNlcyBhdmFpbGFibGUgb24geW91ciBuZXR3b3JrIgorbXNnc3RyICIiCisi0J/QtdGA0LXQs9C70Y/QvdGD0YLQuCDRgdC70YPQttCx0LggWmVyb2NvbmYsINC00L7RgdGC0YPQvyDQtNC+INGP0LrQuNGFINC80L7QttC90LAg0L7RgtGA0LjQvNCw0YLQuCDRgyDQstCw0YjRltC5INC80LXRgNC10LbRliIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIyNAorbXNnaWQgIlRYVCIKK21zZ3N0ciAiVFhUIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI2Cittc2dpZCAiVFhUIERhdGE6IgorbXNnc3RyICLQlNCw0L3RliBUWFQ6IgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI2Cittc2dpZCAiZW1wdHkiCittc2dzdHIgItC/0L7RgNC+0LbQvdGW0LkiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMjgKK21zZ2lkICJTZXJ2aWNlIFR5cGU6IgorbXNnc3RyICLQotC40L8g0YHQu9GD0LbQsdC4OiIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIyOQorbXNnaWQgIlNlcnZpY2UgTmFtZToiCittc2dzdHIgItCd0LDQt9Cy0LAg0YHQu9GD0LbQsdC4OiIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIzMAorbXNnaWQgIkRvbWFpbiBOYW1lOiIKK21zZ3N0ciAi0J3QsNC30LLQsCDQtNC+0LzQtdC90YM6IgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjMxCittc2dpZCAiSW50ZXJmYWNlOiIKK21zZ3N0ciAi0IbQvdGC0LXRgNGE0LXQudGBOiIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLnB5OjIzMgorbXNnaWQgIkFkZHJlc3M6IgorbXNnc3RyICLQkNC00YDQtdGB0LA6IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE4NQorbXNnaWQgIkJyb3dzZSBTZXJ2aWNlIFR5cGVzIgorbXNnc3RyICLQn9C10YDQtdCz0LvRj9C0INGC0LjQv9GW0LIg0YHQu9GD0LbQsSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxODUKK21zZ2lkICJBIE5VTEwgdGVybWluYXRlZCBsaXN0IG9mIHNlcnZpY2UgdHlwZXMgdG8gYnJvd3NlIGZvciIKK21zZ3N0ciAi0JfQsNCy0LXRgNGI0LXQvdC40LkgTlVMTCDRgdC/0LjRgdC+0Log0YLQuNC/0ZbQsiDRgdC70YPQttCxLCDRj9C60ZYg0LzQvtC20L3QsCDQv9C10YDQtdCz0LvRj9C00LDRgtC4IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE5MAorbXNnaWQgIkRvbWFpbiIKK21zZ3N0ciAi0JTQvtC80LXQvSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxOTAKK21zZ2lkICJUaGUgZG9tYWluIHRvIGJyb3dzZSBpbiwgb3IgTlVMTCBmb3IgdGhlIGRlZmF1bHQgZG9tYWluIgorbXNnc3RyICLQlNC+0LzQtdC9INC00LvRjyDQv9C10YDQtdCz0LvRj9C00YMgKE5VTEwg4oCUINGC0LjQv9C+0LLQuNC5INC00L7QvNC10L0pIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE5NgorbXNnaWQgIlNlcnZpY2UgVHlwZSIKK21zZ3N0ciAi0KLQuNC/INGB0LvRg9C20LHQuCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxOTYKK21zZ2lkICJUaGUgc2VydmljZSB0eXBlIG9mIHRoZSBzZWxlY3RlZCBzZXJ2aWNlIgorbXNnc3RyICLQotC40L8g0L/QvtC30L3QsNGH0LXQvdC+0Zcg0YHQu9GD0LbQsdC4IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIwMiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjEwMjMKK21zZ2lkICJTZXJ2aWNlIE5hbWUiCittc2dzdHIgItCd0LDQt9Cy0LAg0YHQu9GD0LbQsdC4IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIwMgorbXNnaWQgIlRoZSBzZXJ2aWNlIG5hbWUgb2YgdGhlIHNlbGVjdGVkIHNlcnZpY2UiCittc2dzdHIgItCd0LDQt9Cy0LAg0L/QvtC30L3QsNGH0LXQvdC+0Zcg0YHQu9GD0LbQsdC4IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIwOAorbXNnaWQgIkFkZHJlc3MiCittc2dzdHIgItCQ0LTRgNC10YHQsCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMDgKK21zZ2lkICJUaGUgYWRkcmVzcyBvZiB0aGUgcmVzb2x2ZWQgc2VydmljZSIKK21zZ3N0ciAi0JDQtNGA0LXRgdCwINCy0LjRj9Cy0LvQtdC90L7RlyDRgdC70YPQttCx0LgiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjEzCittc2dpZCAiUG9ydCIKK21zZ3N0ciAi0J/QvtGA0YIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjEzCittc2dpZCAiVGhlIElQIHBvcnQgbnVtYmVyIG9mIHRoZSByZXNvbHZlZCBzZXJ2aWNlIgorbXNnc3RyICLQndC+0LzQtdGAINC/0L7RgNGC0YMgSVAg0LLQuNGP0LLQu9C10L3QvtGXINGB0LvRg9C20LHQuCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMTkKK21zZ2lkICJIb3N0IE5hbWUiCittc2dzdHIgItCd0LDQt9Cy0LAg0LLRg9C30LvQsCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMTkKK21zZ2lkICJUaGUgaG9zdCBuYW1lIG9mIHRoZSByZXNvbHZlZCBzZXJ2aWNlIgorbXNnc3RyICLQndCw0LfQstCwINCy0YPQt9C70LAg0LLQuNGP0LLQu9C10L3QvtGXINGB0LvRg9C20LHQuCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMjUKK21zZ2lkICJUWFQgRGF0YSIKK21zZ3N0ciAi0JTQsNC90ZYgVFhUIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIyNQorbXNnaWQgIlRoZSBUWFQgZGF0YSBvZiB0aGUgcmVzb2x2ZWQgc2VydmljZSIKK21zZ3N0ciAi0JTQsNC90ZYgVFhUINCy0LjRj9Cy0LvQtdC90L7RlyDRgdC70YPQttCx0LgiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjMwCittc2dpZCAiUmVzb2x2ZSBTZXJ2aWNlIgorbXNnc3RyICLQktC40LfQvdCw0YfQuNGC0Lgg0YHQu9GD0LbQsdGDIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIzMAorbXNnaWQgIlJlc29sdmUgdGhlIHNlbGVjdGVkIHNlcnZpY2UgYXV0b21hdGljYWxseSBiZWZvcmUgcmV0dXJuaW5nIgorbXNnc3RyICLQktC40LfQvdCw0YfQuNGC0Lgg0L/QsNGA0LDQvNC10YLRgNC4INCy0LjQsdGA0LDQvdC+0Zcg0YHQu9GD0LbQsdC4INCw0LLRgtC+0LzQsNGC0LjRh9C90L4g0L/QtdGA0LXQtCDQv9C+0LLQtdGA0L3QtdC90L3Rj9C8IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIzNgorbXNnaWQgIlJlc29sdmUgU2VydmljZSBIb3N0IE5hbWUiCittc2dzdHIgItCS0LjQt9C90LDRh9C40YLQuCDQvdCw0LfQstGDINCy0YPQt9C70LAg0YHQu9GD0LbQsdC4IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIzNgorbXNnaWQgIiIKKyJSZXNvbHZlIHRoZSBob3N0IG5hbWUgb2YgdGhlIHNlbGVjdGVkIHNlcnZpY2UgYXV0b21hdGljYWxseSBiZWZvcmUgcmV0dXJuaW5nIgorbXNnc3RyICLQktC40LfQvdCw0YfQuNGC0Lgg0L3QsNC30LLRgyDQstGD0LfQu9CwINCy0LjQsdGA0LDQvdC+0Zcg0YHQu9GD0LbQsdC4INCw0LLRgtC+0LzQsNGC0LjRh9C90L4g0L/QtdGA0LXQtCDQv9C+0LLQtdGA0L3QtdC90L3Rj9C8IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjI0MgorbXNnaWQgIkFkZHJlc3MgZmFtaWx5IgorbXNnc3RyICLQodGW0LzQtdC50YHRgtCy0L4g0LDQtNGA0LXRgSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyNDIKK21zZ2lkICJUaGUgYWRkcmVzcyBmYW1pbHkgZm9yIGhvc3QgbmFtZSByZXNvbHV0aW9uIgorbXNnc3RyICLQodGW0LzQtdC50YHRgtCy0L4g0LDQtNGA0LXRgSDQtNC70Y8g0LLQuNC30L3QsNGH0LXQvdC90Y8g0L3QsNC30LLQuCDQstGD0LfQu9CwIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjMyNgorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFoaSBjbGllbnQgZmFpbHVyZTogJXMiCittc2dzdHIgItCf0L7QvNC40LvQutCwINC60LvRltGU0L3RgtCwIEF2YWhpOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzozODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaGkgcmVzb2x2ZXIgZmFpbHVyZTogJXMiCittc2dzdHIgItCf0L7QvNC40LvQutCwINGW0L3RgdGC0YDRg9C80LXQvdGC0YMg0LLQuNC30L3QsNGH0LXQvdC90Y8gQXZhaGk6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjUxOAorIywgYy1mb3JtYXQKK21zZ2lkICJCcm93c2luZyBmb3Igc2VydmljZSB0eXBlICVzIGluIGRvbWFpbiAlcyBmYWlsZWQ6ICVzIgorbXNnc3RyICLQn9C+0LzQuNC70LrQsCDQv9C10YDQtdCz0LvRj9C00YMg0YLQuNC/0YMg0YHQu9GD0LbQsdC4ICVzINGDINC00L7QvNC10L3RliAlczogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NTE5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjE2OAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTY5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjE3OAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTc5Cittc2dpZCAibi9hIgorbXNnc3RyICLQvS/QtCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo2NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaGkgZG9tYWluIGJyb3dzZXIgZmFpbHVyZTogJXMiCittc2dzdHIgItCf0L7QvNC40LvQutCwINC/0LXRgNC10LPQu9GP0LTRgyDQtNC+0LzQtdC90YMgQXZhaGk6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjY4NAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVhZCBBdmFoaSBkb21haW46ICVzIgorbXNnc3RyICLQodC/0YDQvtCx0LAg0YfQuNGC0LDQvdC90Y8g0LTQvtC80LXQvdGDIEF2YWhpINC30LDQstC10YDRiNC40LvQsNGB0Y8g0L3QtdCy0LTQsNC70L46ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjcwNgorbXNnaWQgIkJyb3dzZSBzZXJ2aWNlIHR5cGUgbGlzdCBpcyBlbXB0eSEiCittc2dzdHIgItCh0L/QuNGB0L7QuiDRgtC40L/RltCyINC/0LXRgNC10LPQu9GP0LTRgyDRgdC70YPQttCxINC/0L7RgNC+0LbQvdGW0LkhIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjcxNworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY29ubmVjdCB0byBBdmFoaSBzZXJ2ZXI6ICVzIgorbXNnc3RyICLQndC1INCy0LTQsNC70L7RgdGPINC34oCZ0ZTQtNC90LDRgtC40YHRjyDQtyDRgdC10YDQstC10YDQvtC8IEF2YWhpOiAlcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo3MzUKK21zZ2lkICJCcm93c2luZyBmb3Igc2VydmljZXMgb24gPGI+bG9jYWwgbmV0d29yazwvYj46IgorbXNnc3RyICLQn9C10YDQtdCz0LvRj9C0INGB0LvRg9C20LEg0YMgPGI+0LvQvtC60LDQu9GM0L3RltC5INC80LXRgNC10LbRljwvYj46IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjczNworIywgYy1mb3JtYXQKK21zZ2lkICJCcm93c2luZyBmb3Igc2VydmljZXMgaW4gZG9tYWluIDxiPiVzPC9iPjoiCittc2dzdHIgItCf0LXRgNC10LPQu9GP0LQg0YHQu9GD0LbQsSDRgyDQtNC+0LzQtdC90ZYgPGI+JXM8L2I+OiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo3NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBicm93c2VyIGZvciAlczogJXMiCittc2dzdHIgItCd0LUg0LLQtNCw0LvQvtGB0Y8g0YHRgtCy0L7RgNC40YLQuCDQt9Cw0YHRltCxINC/0LXRgNC10LPQu9GP0LTRgyDQtNC70Y8gJXM6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjkwMworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIHJlc29sdmVyIGZvciAlcyBvZiB0eXBlICVzIGluIGRvbWFpbiAlczogJXMiCittc2dzdHIgItCh0L/RgNC+0LHQsCDRgdGC0LLQvtGA0LXQvdC90Y8g0LfQsNGB0L7QsdGDINCy0LjQt9C90LDRh9C10L3QvdGPINC00LvRjyAlcyDRgtC40L/RgyAlcyDRgyDQtNC+0LzQtdC90ZYgJXM6ICVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjk3OAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGRvbWFpbiBicm93c2VyOiAlcyIKK21zZ3N0ciAi0KHQv9GA0L7QsdCwINGB0YLQstC+0YDQtdC90L3RjyDQt9Cw0YHQvtCx0YMg0L/QtdGA0LXQs9C70Y/QtNGDINC00L7QvNC10L3RgyDQt9Cw0LfQvdCw0LvQsCDQvdC10LLQtNCw0YfRljogJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6OTg5Cittc2dpZCAiQ2hhbmdlIGRvbWFpbiIKK21zZ3N0ciAi0JfQvNGW0L3QuNGC0Lgg0LTQvtC80LXQvSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMDMxIC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTE2MgorbXNnaWQgIkJyb3dzaW5nLi4uIgorbXNnc3RyICLQndCw0LLRltCz0LDRhtGW0Y8uLi4iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTEyMAorbXNnaWQgIkluaXRpYWxpemluZy4uLiIKK21zZ3N0ciAi0IbQvdGW0YbRltCw0LvRltC30LDRhtGW0Y8uLi4iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTE0NAorbXNnaWQgIkxvY2F0aW9uIgorbXNnc3RyICLQkNC00YDQtdGB0LAiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTE0OSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NTMKK21zZ2lkICJOYW1lIgorbXNnc3RyICLQndCw0LfQstCwIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNTQgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTUzCittc2dpZCAiVHlwZSIKK21zZ3N0ciAi0KLQuNC/IgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNjYKK21zZ2lkICJfRG9tYWluLi4uIgorbXNnc3RyICJf0JTQvtC80LXQvToiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzo1NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgW29wdGlvbnNdXG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1zIC0tc3NoICAgICAgICAgICAgIEJyb3dzZSBTU0ggc2VydmVyc1xuIgorIiAgICAtdiAtLXZuYyAgICAgICAgICAgICBCcm93c2UgVk5DIHNlcnZlcnNcbiIKKyIgICAgLVMgLS1zaGVsbCAgICAgICAgICAgQnJvd3NlIGJvdGggU1NIIGFuZCBWTkNcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgVGhlIGRvbWFpbiB0byBicm93c2UgaW5cbiIKK21zZ3N0ciAiIgorIiVzIFvQv9Cw0YDQsNC80LXRgtGA0LhdXG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgINCf0L7QutCw0LfQsNGC0Lgg0YbRjiDQtNC+0LLRltC00LrRg1xuIgorIiAgICAtcyAtLXNzaCAgICAgICAgICAgICDQn9C10YDQtdCz0LvRj9C90YPRgtC4INGB0LXRgNCy0LXRgNC4IFNTSFxuIgorIiAgICAtdiAtLXZuYyAgICAgICAgICAgICDQn9C10YDQtdCz0LvRj9C90YPRgtC4INGB0LXRgNCy0LXRgNC4IFZOQ1xuIgorIiAgICAtUyAtLXNoZWxsICAgICAgICAgICDQn9C10YDQtdCz0LvRj9C90YPRgtC4INGB0LXRgNCy0LXRgNC4IFNTSCDRliBWTkNcbiIKKyIgICAgLWQgLS1kb21haW490JTQntCc0JXQnSAgINCU0L7QvNC10L0g0LTQu9GPINC/0LXRgNC10LPQu9GP0LTRg1xuIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTAxIC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjc3NQorIywgYy1mb3JtYXQKK21zZ2lkICJUb28gbWFueSBhcmd1bWVudHNcbiIKK21zZ3N0ciAi0JfQsNC90LDQtNGC0L4g0LHQsNCz0LDRgtC+INCw0YDQs9GD0LzQtdC90YLRltCyXG4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNDkKK21zZ2lkICJDaG9vc2UgU2hlbGwgU2VydmVyIgorbXNnc3RyICLQntCx0LXRgNGW0YLRjCDRgdC10YDQstC10YAg0L7QsdC+0LvQvtC90LrQuCIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE1MQorbXNnaWQgIkRlc2t0b3AiCittc2dzdHIgItCh0YLRltC70YzQvdC40YbRjyIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE1MgorbXNnaWQgIlRlcm1pbmFsIgorbXNnc3RyICLQotC10YDQvNGW0L3QsNC7IgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTU2Cittc2dpZCAiQ2hvb3NlIFZOQyBzZXJ2ZXIiCittc2dzdHIgItCS0LjQsdGW0YAg0YHQtdGA0LLQtdGA0LAgVk5DIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTYxCittc2dpZCAiQ2hvb3NlIFNTSCBzZXJ2ZXIiCittc2dzdHIgItCS0LjQsdGW0YAg0YHQtdGA0LLQtdGA0LAgU1NIIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbm5lY3RpbmcgdG8gJyVzJyAuLi5cbiIKK21zZ3N0ciAi0JLRgdGC0LDQvdC+0LLQu9C10L3QvdGPINC34oCZ0ZTQtNC90LDQvdC90Y8g0Lcgwqslc8K7Li4uXG4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoyNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhlY2xwKCkgZmFpbGVkOiAlc1xuIgorbXNnc3RyICLQn9C+0LzQuNC70LrQsCBleGVjbHAoKTogJXNcbiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5jZWxlZC5cbiIKK21zZ3N0ciAi0KHQutCw0YHQvtCy0LDQvdC+LlxuIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmRlc2t0b3AuaW4uaW4uaDoxCittc2dpZCAiQXZhaGkgU1NIIFNlcnZlciBCcm93c2VyIgorbXNnc3RyICLQn9C10YDQtdCz0LvRj9C00LDRhyDRgdC10YDQstC10YDRltCyIFNTSCBBdmFoaSIKKworIzogLi4vYXZhaGktdWkvYnNzaC5kZXNrdG9wLmluLmluLmg6MgorbXNnaWQgIkJyb3dzZSBmb3IgWmVyb2NvbmYtZW5hYmxlZCBTU0ggU2VydmVycyIKK21zZ3N0ciAi0J/QtdGA0LXQs9C70Y/QtCDRgdC10YDQstC10YDRltCyIFNTSCDQtyDRg9Cy0ZbQvNC60L3QtdC90LjQvCBaZXJvY29uZiIKKworIzogLi4vYXZhaGktdWkvYnZuYy5kZXNrdG9wLmluLmluLmg6MQorbXNnaWQgIkF2YWhpIFZOQyBTZXJ2ZXIgQnJvd3NlciIKK21zZ3N0ciAi0J/QtdGA0LXQs9C70Y/QtNCw0Ycg0YHQtdGA0LLQtdGA0ZbQsiBWTkMgQXZhaGkiCisKKyM6IC4uL2F2YWhpLXVpL2J2bmMuZGVza3RvcC5pbi5pbi5oOjIKK21zZ2lkICJCcm93c2UgZm9yIFplcm9jb25mLWVuYWJsZWQgVk5DIFNlcnZlcnMiCittc2dzdHIgItCf0LXRgNC10LPQu9GP0LQg0YHQtdGA0LLQtdGA0ZbQsiBWTkMg0Lcg0YPQstGW0LzQutC90LXQvdC40LwgWmVyb2NvbmYiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjEwNworIywgYy1mb3JtYXQKK21zZ2lkICI6IEFsbCBmb3Igbm93XG4iCittc2dzdHIgIjog0LLRgdGWINC90LAg0YbQtdC5INC80L7QvNC10L3RglxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoxMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiOiBDYWNoZSBleGhhdXN0ZWRcbiIKK21zZ3N0ciAiOiDQutC10Ygg0LLQuNGH0LXRgNC/0LDQvdC+XG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjIzOSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgc2VydmljZSAnJXMnIG9mIHR5cGUgJyVzJyBpbiBkb21haW4gJyVzJzogJXNcbiIKK21zZ3N0ciAi0J3QtSDQstC00LDQu9C+0YHRjyDQstC40LfQvdCw0YfQuNGC0Lgg0YHQu9GD0LbQsdGDIMKrJXPCuyDRgtC40L/RgyDCqyVzwrsg0YMg0LTQvtC80LXQvdGWIMKrJXPCuzogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MzQwCisjLCBjLWZvcm1hdAorbXNnaWQgInNlcnZpY2VfYnJvd3NlciBmYWlsZWQ6ICVzXG4iCittc2dzdHIgItCf0L7QvNC40LvQutCwIHNlcnZpY2VfYnJvd3NlcjogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6Mzc4CisjLCBjLWZvcm1hdAorbXNnaWQgImF2YWhpX3NlcnZpY2VfYnJvd3Nlcl9uZXcoKSBmYWlsZWQ6ICVzXG4iCittc2dzdHIgItCf0L7QvNC40LvQutCwIGF2YWhpX3NlcnZpY2VfYnJvd3Nlcl9uZXcoKTogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgInNlcnZpY2VfdHlwZV9icm93c2VyIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAi0J/QvtC80LjQu9C60LAgc2VydmljZV90eXBlX2Jyb3dzZXI6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjQ0NAorIywgYy1mb3JtYXQKK21zZ2lkICJhdmFoaV9zZXJ2aWNlX3R5cGVfYnJvd3Nlcl9uZXcoKSBmYWlsZWQ6ICVzXG4iCittc2dzdHIgItCf0L7QvNC40LvQutCwIGF2YWhpX3NlcnZpY2VfdHlwZV9icm93c2VyX25ldygpOiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXZhaGlfZG9tYWluX2Jyb3dzZXJfbmV3KCkgZmFpbGVkOiAlc1xuIgorbXNnc3RyICLQn9C+0LzQuNC70LrQsCBhdmFoaV9kb21haW5fYnJvd3Nlcl9uZXcoKTogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTM1IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozOTQKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyODAgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE2OAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcXVlcnkgdmVyc2lvbiBzdHJpbmc6ICVzXG4iCittc2dzdHIgItCh0L/RgNC+0LHQsCDQt9Cw0L/QuNGC0YMg0LfQsNC/0LjRgtGDINGJ0L7QtNC+INGA0Y/QtNC60LAg0LLQtdGA0YHRltGXINCx0YPQu9CwINC90LXQstC00LDQu9C+0Y46ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU0MCAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6Mzk5CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6Mjg1IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxNzMKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IGhvc3QgbmFtZTogJXNcbiIKK21zZ3N0ciAi0KHQv9GA0L7QsdCwINC30LDQv9C40YLRgyDRidC+0LTQviDQvdCw0LfQstC4INCy0YPQt9C70LAg0LHRg9C70LAg0L3QtdCy0LTQsNC70L7RjjogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTQ0IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo0MDMKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyODkgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE3NworIywgYy1mb3JtYXQKK21zZ2lkICJTZXJ2ZXIgdmVyc2lvbjogJXM7IEhvc3QgbmFtZTogJXNcbiIKK21zZ3N0ciAi0JLQtdGA0YHRltGPINGB0LXRgNCy0LXRgNCwOiAlczsg0L3QsNC30LLQsCDQstGD0LfQu9CwOiAlc1xuIgorCisjLiBUcmFuc2xhdG9yczogVGhpcyBpcyBhIGNvbHVtbiBoZWFkaW5nIHdpdGggYWJicmV2aWF0aW9ucyBmb3IKKyMuICogICBFdmVudCAoKy8tKSwgTmV0d29yayBJbnRlcmZhY2UsIFByb3RvY29sIChJUHY0L3Y2KSwgRG9tYWluCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRSBJZmNlIFByb3QgRG9tYWluXG4iCittc2dzdHIgItCU0L7QvNC10L0gRSBJZmNlIFByb3RcbiIKKworIy4gVHJhbnNsYXRvcnM6IFRoaXMgaXMgYSBjb2x1bW4gaGVhZGluZyB3aXRoIGFiYnJldmlhdGlvbnMgZm9yCisjLiAqICAgRXZlbnQgKCsvLSksIE5ldHdvcmsgSW50ZXJmYWNlLCBQcm90b2NvbCAoSVB2NC92NiksIERvbWFpbgorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUgSWZjZSBQcm90ICUtKnMgJS0yMHMgRG9tYWluXG4iCittc2dzdHIgItCU0L7QvNC10L0gRSBJZmNlIFByb3QgJS0qcyAlLTIwc1xuIgorCisjLiBXZSBoYXZlIGJlZW4gZGlzY29ubmVjdGVkLCBzbyBsZXQgcmVjb25uZWN0CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1ODUgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE2MworIywgYy1mb3JtYXQKK21zZ2lkICJEaXNjb25uZWN0ZWQsIHJlY29ubmVjdGluZyAuLi5cbiIKK21zZ3N0ciAi0JfigJnRlNC00L3QsNC90L3RjyDRgNC+0LfRltGA0LLQsNC90L4sINC/0L7QstGC0L7RgNC90LAg0YHQv9GA0L7QsdCwINC34oCZ0ZTQtNC90LDQvdC90Y8uLi5cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTk5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjgyOQorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE3MCAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6Mzg2CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjcyIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBjbGllbnQgb2JqZWN0OiAlc1xuIgorbXNnc3RyICLQodC/0YDQvtCx0LAg0YHRgtCy0L7RgNC10L3QvdGPINC60LvRltGU0L3RgtGB0YzQutC+0LPQviDQvtCx4oCZ0ZTQutGC0LAg0LfQsNCy0LXRgNGI0LjQu9Cw0YHRjyDQvdC10LLQtNCw0LvQvjogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NjA0IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxNzUKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoxNDMgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNsaWVudCBmYWlsdXJlLCBleGl0aW5nOiAlc1xuIgorbXNnc3RyICLQkNCy0LDRgNGW0LnQvdC1INC30LDQstC10YDRiNC10L3QvdGPINC60LvRltGU0L3RgtGB0YzQutC+0Zcg0L/RgNC+0LPRgNCw0LzQuCwg0LLQuNGF0ZbQtDogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NjIzIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoyMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2FpdGluZyBmb3IgZGFlbW9uIC4uLlxuIgorbXNnc3RyICLQntGH0ZbQutGD0LLQsNC90L3RjyDQvdCwINC/0ZbQtNGC0LLQtdGA0LTQttC10L3QvdGPINGE0L7QvdC+0LLQvtGOINGB0LvRg9C20LHQvtGOLi4uXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjY0NworbXNnaWQgIiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgU2hvdyB2ZXJzaW9uXG4iCisiICAgIC1EIC0tYnJvd3NlLWRvbWFpbnMgIEJyb3dzZSBmb3IgYnJvd3NpbmcgZG9tYWlucyBpbnN0ZWFkIG9mIHNlcnZpY2VzXG4iCisiICAgIC1hIC0tYWxsICAgICAgICAgICAgIFNob3cgYWxsIHNlcnZpY2VzLCByZWdhcmRsZXNzIG9mIHRoZSB0eXBlXG4iCisiICAgIC1kIC0tZG9tYWluPURPTUFJTiAgIFRoZSBkb21haW4gdG8gYnJvd3NlIGluXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKKyIgICAgLXQgLS10ZXJtaW5hdGUgICAgICAgVGVybWluYXRlIGFmdGVyIGR1bXBpbmcgYSBtb3JlIG9yIGxlc3MgY29tcGxldGUgIgorImxpc3RcbiIKKyIgICAgLWMgLS1jYWNoZSAgICAgICAgICAgVGVybWluYXRlIGFmdGVyIGR1bXBpbmcgYWxsIGVudHJpZXMgZnJvbSB0aGUgY2FjaGVcbiIKKyIgICAgLWwgLS1pZ25vcmUtbG9jYWwgICAgSWdub3JlIGxvY2FsIHNlcnZpY2VzXG4iCisiICAgIC1yIC0tcmVzb2x2ZSAgICAgICAgIFJlc29sdmUgc2VydmljZXMgZm91bmRcbiIKKyIgICAgLWYgLS1uby1mYWlsICAgICAgICAgRG9uJ3QgZmFpbCBpZiB0aGUgZGFlbW9uIGlzIG5vdCBhdmFpbGFibGVcbiIKKyIgICAgLXAgLS1wYXJzYWJsZSAgICAgICAgT3V0cHV0IGluIHBhcnNhYmxlIGZvcm1hdFxuIgorbXNnc3RyICIiCisiICAgIC1oIC0taGVscCAgICAgICAgICAgINCf0L7QutCw0LfQsNGC0Lgg0YbRjiDQtNC+0LLRltC00LrRg1xuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICDQn9C+0LrQsNC30LDRgtC4INC00LDQvdGWINGJ0L7QtNC+INCy0LXRgNGB0ZbRl1xuIgorIiAgICAtRCAtLWJyb3dzZS1kb21haW5zICDQn9C10YDQtdCz0LvRj9C00LDRgtC4INC00L7QvNC10L3QuCDQt9Cw0LzRltGB0YLRjCDRgdC70YPQttCxXG4iCisiICAgIC1hIC0tYWxsICAgICAgICAgICAgINCf0L7QutCw0LfQsNGC0Lgg0LLRgdGWINGB0LvRg9C20LHQuCDQstGB0ZbRhSDRgtC40L/RltCyXG4iCisiICAgIC1kIC0tZG9tYWluPdCU0J7QnNCV0J0gICDQlNC+0LzQtdC9INC00LvRjyDQv9C10YDQtdCz0LvRj9C00YNcbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAg0KPQstGW0LzQutC90YPRgtC4INC00L7QutC70LDQtNC90LjQuSDRgNC10LbQuNC8XG4iCisiICAgIC10IC0tdGVybWluYXRlICAgICAgINCf0LXRgNC10YDQstCw0YLQuCDRgNC+0LHQvtGC0YMg0L/RltGB0LvRjyDQvtGC0YDQuNC80LDQvdC90Y8g0LHRltC70YzRiNC+0Y4g0YfQuCDQvNC10L3RiNC+0Y4gIgorItC80ZbRgNC+0Y4g0L/QvtCy0L3QvtCz0L4g0YHQv9C40YHQutGDXG4iCisiICAgIC1jIC0tY2FjaGUgICAgICAgICAgINCf0LXRgNC10YDQstCw0YLQuCDRgNC+0LHQvtGC0YMg0L/RltGB0LvRjyDQvtGC0YDQuNC80LDQvdC90Y8g0LLRgdGW0YUg0LfQsNC/0LjRgdGW0LIg0LcgIgorItC60LXRiNGDXG4iCisiICAgIC1sIC0taWdub3JlLWxvY2FsICAgINCG0LPQvdC+0YDRg9Cy0LDRgtC4INC70L7QutCw0LvRjNC90ZYg0YHQu9GD0LbQsdC4XG4iCisiICAgIC1yIC0tcmVzb2x2ZSAgICAgICAgINCS0LjQt9C90LDRh9Cw0YLQuCDQsNC00YDQtdGB0Lgg0ZYg0L3QsNC30LLQuCDQt9C90LDQudC00LXQvdC40YUg0YHQu9GD0LbQsVxuIgorIiAgICAtZiAtLW5vLWZhaWwgICAgICAgICDQndC1INC/0LXRgNC10YDQuNCy0LDRgtC4INGA0L7QsdC+0YLRgywg0Y/QutGJ0L4g0L3QtSDQsdGD0LTQtSDQt9C90LDQudC00LXQvdC+INGE0L7QvdC+0LLQvtGXICIKKyLRgdC70YPQttCx0LhcbiIKKyIgICAgLXAgLS1wYXJzYWJsZSAgICAgICAg0JLQuNCy0LXRgdGC0Lgg0LTQsNC90ZYg0YMg0L/RgNC40LTQsNGC0L3QvtC80YMg0LTQu9GPINC+0LHRgNC+0LHQutC4INGE0L7RgNC80LDRgtGWXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjY2MAorbXNnaWQgIiIKKyIgICAgLWsgLS1uby1kYi1sb29rdXAgICAgRG9uJ3QgbG9va3VwIHNlcnZpY2UgdHlwZXNcbiIKKyIgICAgLWIgLS1kdW1wLWRiICAgICAgICAgRHVtcCBzZXJ2aWNlIHR5cGUgZGF0YWJhc2VcbiIKK21zZ3N0ciAiIgorIiAgICAtayAtLW5vLWRiLWxvb2t1cCAgICDQndC1INCy0LjQt9C90LDRh9Cw0YLQuCDRgtC40L/QuCDRgdC70YPQttCxXG4iCisiICAgIC1iIC0tZHVtcC1kYiAgICAgICAgINCh0YLQstC+0YDQuNGC0Lgg0LTQsNC80L8g0LHQsNC30Lgg0LTQsNC90LjRhSDRgtC40L/RltCyINGB0LvRg9C20LFcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NzY2IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG9vIGZldyBhcmd1bWVudHNcbiIKK21zZ3N0ciAi0JfQsNC90LDQtNGC0L4g0LzQsNC70L4g0LDRgNCz0YPQvNC10L3RgtGW0LJcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6ODIxIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozNzgKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyNjQgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIHNpbXBsZSBwb2xsIG9iamVjdC5cbiIKK21zZ3N0ciAi0J3QtSDQstC00LDQu9C+0YHRjyDRgdGC0LLQvtGA0LjRgtC4INC/0YDQvtGB0YLQuNC5INC+0LHigJnRlNC60YIg0L7Qv9C40YLRg9Cy0LDQvdC90Y8uXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo3NgorIywgYy1mb3JtYXQKK21zZ2lkICJFc3RhYmxpc2hlZCB1bmRlciBuYW1lICclcydcbiIKK21zZ3N0ciAi0JLRgdGC0LDQvdC+0LLQu9C10L3QviDQv9GW0LQg0L3QsNC30LLQvtGOIMKrJXPCu1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyOiAlc1xuIgorbXNnc3RyICLQodC/0YDQvtCx0LAg0YDQtdGU0YHRgtGA0LDRhtGW0Zcg0LfQsNCy0LXRgNGI0LjQu9Cw0YHRjyDQvdC10LLQtNCw0LvQvjogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIk5hbWUgY29sbGlzaW9uLCBwaWNraW5nIG5ldyBuYW1lICclcycuXG4iCittc2dzdHIgItCX0LHRltCzINC90LDQt9CyLCDQvtCx0YDQsNC90L4g0L3QvtCy0YMg0L3QsNC30LLRgyDCqyVzwrsuXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBlbnRyeSBncm91cDogJXNcbiIKK21zZ3N0ciAi0KHQv9GA0L7QsdCwINGB0YLQstC+0YDQtdC90L3RjyDQs9GA0YPQv9C4INC30LDQv9C40YHRltCyINC30LDQstC10YDRiNC40LvQsNGB0Y8g0L3QtdCy0LTQsNC70L46ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBhZGRyZXNzOiAlc1xuIgorbXNnc3RyICLQodC/0YDQvtCx0LAg0LTQvtC00LDQstCw0L3QvdGPINCw0LTRgNC10YHQuCDQt9Cw0LLQtdGA0YjQuNC70LDRgdGPINC90LXQstC00LDQu9C+OiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgc2VydmljZTogJXNcbiIKK21zZ3N0ciAi0KHQv9GA0L7QsdCwINC00L7QtNCw0LLQsNC90L3RjyDRgdC70YPQttCx0Lgg0LfQsNCy0LXRgNGI0LjQu9Cw0YHRjyDQvdC10LLQtNCw0LvQvjogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE0MAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gYWRkIHN1YnR5cGUgJyVzJzogJXNcbiIKK21zZ3N0ciAi0KHQv9GA0L7QsdCwINC00L7QtNCw0LLQsNC90L3RjyDQv9GW0LTRgtC40L/RgyDCqyVzwrsg0LfQsNCy0LXRgNGI0LjQu9Cw0YHRjyDQvdC10LLQtNCw0LvQvjogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE5MQorIywgYy1mb3JtYXQKK21zZ2lkICJIb3N0IG5hbWUgY29uZmxpY3RcbiIKK21zZ3N0ciAi0JrQvtC90YTQu9GW0LrRgiDQvdCw0LfQsiDQstGD0LfQu9GW0LJcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgW29wdGlvbnNdICVzIDxuYW1lPiA8dHlwZT4gPHBvcnQ+IFs8dHh0IC4uLj5dXG4iCisiJXMgW29wdGlvbnNdICVzIDxob3N0LW5hbWU+IDxhZGRyZXNzPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLXMgLS1zZXJ2aWNlICAgICAgICAgUHVibGlzaCBzZXJ2aWNlXG4iCisiICAgIC1hIC0tYWRkcmVzcyAgICAgICAgIFB1Ymxpc2ggYWRkcmVzc1xuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBFbmFibGUgdmVyYm9zZSBtb2RlXG4iCisiICAgIC1kIC0tZG9tYWluPURPTUFJTiAgIERvbWFpbiB0byBwdWJsaXNoIHNlcnZpY2UgaW5cbiIKKyIgICAgLUggLS1ob3N0PURPTUFJTiAgICAgSG9zdCB3aGVyZSBzZXJ2aWNlIHJlc2lkZXNcbiIKKyIgICAgICAgLS1zdWJ0eXBlPVNVQlRZUEUgQW4gYWRkaXRpb25hbCBzdWJ0eXBlIHRvIHJlZ2lzdGVyIHRoaXMgc2VydmljZSAiCisid2l0aFxuIgorIiAgICAtUiAtLW5vLXJldmVyc2UgICAgICBEbyBub3QgcHVibGlzaCByZXZlcnNlIGVudHJ5IHdpdGggYWRkcmVzc1xuIgorIiAgICAtZiAtLW5vLWZhaWwgICAgICAgICBEb24ndCBmYWlsIGlmIHRoZSBkYWVtb24gaXMgbm90IGF2YWlsYWJsZVxuIgorbXNnc3RyICIiCisiJXMgW9C/0LDRgNCw0LzQtdGC0YDQuF0gJXMgPNC90LDQt9Cy0LA+IDzRgtC40L8+IDzQv9C+0YDRgj4gWzx0eHQgLi4uPl1cbiIKKyIlcyBb0L/QsNGA0LDQvNC10YLRgNC4XSAlcyA80L3QsNC30LLQsCDQstGD0LfQu9CwPiA80LDQtNGA0LXRgdCwPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICDQn9C+0LrQsNC30LDRgtC4INGG0Y4g0LLQtdGA0YHRltGOXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgINCf0L7QutCw0LfQsNGC0Lgg0LTQsNC90ZYg0YnQvtC00L4g0LLQtdGA0YHRltGXXG4iCisiICAgIC1zIC0tc2VydmljZSAgICAgICAgINCe0L/RgNC40LvRjtC00L3QuNGC0Lgg0YHQu9GD0LbQsdGDXG4iCisiICAgIC1hIC0tYWRkcmVzcyAgICAgICAgINCe0L/RgNC40LvRjtC00L3QuNGC0Lgg0LDQtNGA0LXRgdGDXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgINCj0LLRltC80LrQvdGD0YLQuCDQtNC+0LrQu9Cw0LTQvdC40Lkg0YDQtdC20LjQvFxuIgorIiAgICAtZCAtLWRvbWFpbj3QlNCe0JzQldCdICAgINCU0L7QvNC10L0g0LTQu9GPINC+0L/RgNC40LvRjtC00L3QtdC90L3RjyDRgdC70YPQttCx0LhcbiIKKyIgICAgLUggLS1ob3N0PdCU0J7QnNCV0J0gICAgICDQktGD0LfQvtC7LCDQvdCwINGP0LrQvtC80YMg0L/RgNCw0YbRjtGUINGB0LvRg9C20LHQsFxuIgorIiAgICAgICAtLXN1YnR5cGU90J/QhtCU0KLQmNCfICDQlNC+0LTQsNGC0LrQvtCy0LjQuSDQv9GW0LTRgtC40L8g0LTQu9GPINGA0LXRlNGB0YLRgNCw0YbRltGXINGG0ZbRlNGXINGB0LvRg9C20LHQuFxuIgorIiAgICAtUiAtLW5vLXJldmVyc2UgICAgICDQndC1INC+0L/RgNC40LvRjtC00L3RjtCy0LDRgtC4INC30LLQvtGA0L7RgtC90LjQuSDQt9Cw0L/QuNGBINGA0LDQt9C+0Lwg0Lcg0LDQtNGA0LXRgdC+0Y5cbiIKKyIgICAgLWYgLS1uby1mYWlsICAgICAgICAg0J3QtSDQt9Cw0LLQtdGA0YjRg9Cy0LDRgtC4INGA0L7QsdC+0YLRgywg0Y/QutGJ0L4g0L3QtSDQstC00LDRgdGC0YzRgdGPINC+0YLRgNC40LzQsNGC0LggIgorItC00L7RgdGC0YPQvyDQtNC+INGE0L7QvdC+0LLQvtGXINGB0LvRg9C20LHQuFxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MzAzIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIG51bWJlciBvZiBhcmd1bWVudHNcbiIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9GM0L3QsCDQutGW0LvRjNC60ZbRgdGC0Ywg0LDRgNCz0YPQvNC10L3RgtGW0LJcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjMyOQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcGFyc2UgcG9ydCBudW1iZXI6ICVzXG4iCittc2dzdHIgItCd0LUg0LLQtNCw0LvQvtGB0Y8g0L7QsdGA0L7QsdC40YLQuCDQvdC+0LzQtdGAINC/0L7RgNGC0YM6ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozNjEgLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI0NgorIywgYy1mb3JtYXQKK21zZ2lkICJObyBjb21tYW5kIHNwZWNpZmllZC5cbiIKK21zZ3N0ciAi0J3QtSDQstC60LDQt9Cw0L3QviDQutC+0LzQsNC90LTQuC5cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIGhvc3QgbmFtZSAnJXMnOiAlc1xuIgorbXNnc3RyICLQodC/0YDQvtCx0LAg0LLQuNC30L3QsNGH0LXQvdC90Y8g0L3QsNC30LLQuCDQstGD0LfQu9CwIMKrJXPCuyDQt9Cw0LLQtdGA0YjQuNC70LDRgdGPINC90LXQstC00LDQu9C+OiAlc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIGFkZHJlc3MgJyVzJzogJXNcbiIKK21zZ3N0ciAi0KHQv9GA0L7QsdCwINCy0LjQt9C90LDRh9C10L3QvdGPINCw0LTRgNC10YHQuCDCqyVzwrsg0LfQsNCy0LXRgNGI0LjQu9Cw0YHRjyDQvdC10LLQtNCw0LvQvjogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjE1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgW29wdGlvbnNdICVzIDxob3N0IG5hbWUgLi4uPlxuIgorIiVzIFtvcHRpb25zXSAlcyA8YWRkcmVzcyAuLi4gPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLW4gLS1uYW1lICAgICAgICAgICAgUmVzb2x2ZSBob3N0IG5hbWVcbiIKKyIgICAgLWEgLS1hZGRyZXNzICAgICAgICAgUmVzb2x2ZSBhZGRyZXNzXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKKyIgICAgLTYgICAgICAgICAgICAgICAgICAgTG9va3VwIElQdjYgYWRkcmVzc1xuIgorIiAgICAtNCAgICAgICAgICAgICAgICAgICBMb29rdXAgSVB2NCBhZGRyZXNzXG4iCittc2dzdHIgIiIKKyIlcyBb0L/QsNGA0LDQvNC10YLRgNC4XSAlcyA80L3QsNC30LLQsCDQstGD0LfQu9CwIC4uLj5cbiIKKyIlcyBb0L/QsNGA0LDQvNC10YLRgNC4XSAlcyA80LDQtNGA0LXRgdCwIC4uLiA+XG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgINCf0L7QutCw0LfQsNGC0Lgg0YbRjiDQtNC+0LLRltC00LrRg1xuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICDQn9C+0LrQsNC30LDRgtC4INC00LDQvdGWINGJ0L7QtNC+INCy0LXRgNGB0ZbRl1xuIgorIiAgICAtbiAtLW5hbWUgICAgICAgICAgICDQktC40LfQvdCw0YfQuNGC0Lgg0L3QsNC30LLRgyDQstGD0LfQu9CwXG4iCisiICAgIC1hIC0tYWRkcmVzcyAgICAgICAgINCS0LjQt9C90LDRh9C40YLQuCDQsNC00YDQtdGB0YNcbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAg0KPQstGW0LzQutC90YPRgtC4INC00L7QutC70LDQtNC90LjQuSDRgNC10LbQuNC8XG4iCisiICAgIC02ICAgICAgICAgICAgICAgICAgINCS0LjQt9C90LDRh9C40YLQuCDQsNC00YDQtdGB0YMgSVB2NlxuIgorIiAgICAtNCAgICAgICAgICAgICAgICAgICDQktC40LfQvdCw0YfQuNGC0Lgg0LDQtNGA0LXRgdGDIElQdjRcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI5OSAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgaG9zdCBuYW1lIHJlc29sdmVyOiAlc1xuIgorbXNnc3RyICIiCisi0KHQv9GA0L7QsdCwINGB0YLQstC+0YDQtdC90L3RjyDQt9Cw0YHQvtCx0YMg0LLQuNC30L3QsNGH0LXQvdC90Y8g0L3QsNC30LLQuCDQstGD0LfQu9CwINC30LDQstC10YDRiNC40LvQsNGB0Y8g0L3QtdCy0LTQsNC70L46ICVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzozMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIGFkZHJlc3MgJyVzJ1xuIgorbXNnc3RyICLQodC/0YDQvtCx0LAg0L7QsdGA0L7QsdC60Lgg0LDQtNGA0LXRgdC4IMKrJXPCuyDQt9Cw0LLQtdGA0YjQuNC70LDRgdGPINC90LXQstC00LDQu9C+XG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzozMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBhZGRyZXNzIHJlc29sdmVyOiAlc1xuIgorbXNnc3RyICLQodC/0YDQvtCx0LAg0YHRgtCy0L7RgNC10L3QvdGPINC30LDRgdC+0LHRgyDQstC40LfQvdCw0YfQtdC90L3RjyDQsNC00YDQtdGB0Lgg0LfQsNCy0LXRgNGI0LjQu9Cw0YHRjyDQvdC10LLQtNCw0LvQvjogJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBbb3B0aW9uc10gPG5ldyBob3N0IG5hbWU+XG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFNob3cgdmVyc2lvblxuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBFbmFibGUgdmVyYm9zZSBtb2RlXG4iCittc2dzdHIgIiIKKyIlcyBb0L/QsNGA0LDQvNC10YLRgNC4XSA80L3QvtCy0LAg0L3QsNC30LLQsCDQstGD0LfQu9CwPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICDQn9C+0LrQsNC30LDRgtC4INGG0Y4g0LTQvtCy0ZbQtNC60YNcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAg0J/QvtC60LDQt9Cw0YLQuCDQtNCw0L3RliDRidC+0LTQviDQstC10YDRgdGW0ZdcbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAg0KPQstGW0LzQutC90YPRgtC4INC00L7QutC70LDQtNC90LjQuSDRgNC10LbQuNC8XG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzLCBleHBlY3RpbmcgZXhhY3RseSBvbmUuXG4iCittc2dzdHIgItCd0LXQutC+0YDQtdC60YLQvdCwINC60ZbQu9GM0LrRltGB0YLRjCDQsNGA0LPRg9C80LXQvdGC0ZbQsiwg0YHQu9GW0LQg0LLQutCw0LfQsNGC0Lgg0YDRltCy0L3QviDQvtC00LjQvSDQsNGA0LPRg9C80LXQvdGCLlxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIkhvc3QgbmFtZSBzdWNjZXNzZnVsbHkgY2hhbmdlZCB0byAlc1xuIgorbXNnc3RyICLQndCw0LfQstGDINCy0YPQt9C70LAg0YPRgdC/0ZbRiNC90L4g0LfQvNGW0L3QtdC90L4g0L3QsCAlc1xuIgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL3BvL3poX0NOLnBvIGIvYXZhaGktMC42LjMxL3BvL3poX0NOLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMTdmN2UKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvcG8vemhfQ04ucG8KQEAgLTAsMCArMSw4NTAgQEAKKyMgdHJhbnNsYXRpb24gb2YgemhfQ04ucG8gdG8g566A5L2T5Lit5paHCisjIENvcHlyaWdodCAoQykgMjAwOCBBdmFoaSBjb250cmlidXRvcnMKKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIEF2YWhpIHBhY2thZ2UuCisjCisjIE5pIEh1aSA8c2h1aXpodXl1YW5sdW9AMTI2LmNvbT4sIDIwMDguCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiB6aF9DTlxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMS0wNC0wMiAwMzoyMyswMjAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxMC0wNy0wMSAxNzo0NSswNzAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiDnlJjpnLIoR2FuIEx1KSA8cmh5dGhtLmdhbkBnbWFpbC5jb20+XG4iCisiTGFuZ3VhZ2UtVGVhbTog566A5L2T5Lit5paHIDxrZGUtY2hpbmFAa2RlLm9yZz5cbiIKKyJMYW5ndWFnZTogXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiWC1HZW5lcmF0b3I6IEtCYWJlbCAxLjExLjRcbiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzAKK21zZ2lkICJPSyIKK21zZ3N0ciAi56Gu5a6aIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozMQorbXNnaWQgIk9wZXJhdGlvbiBmYWlsZWQiCittc2dzdHIgIuaTjeS9nOWksei0pSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzIKK21zZ2lkICJCYWQgc3RhdGUiCittc2dzdHIgIumUmeivr+eKtuaAgSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzMKK21zZ2lkICJJbnZhbGlkIGhvc3QgbmFtZSIKK21zZ3N0ciAi5peg5pWI55qE5Li75py65ZCNIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozNAorbXNnaWQgIkludmFsaWQgZG9tYWluIG5hbWUiCittc2dzdHIgIuaXoOaViOeahOWfn+WQjSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzUKK21zZ2lkICJObyBzdWl0YWJsZSBuZXR3b3JrIHByb3RvY29sIGF2YWlsYWJsZSIKK21zZ3N0ciAi5rKh5pyJ6YCC5b2T55qE572R57uc5Y2P6K6u5Y+v55SoIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozNgorbXNnaWQgIkludmFsaWQgRE5TIFRUTCIKK21zZ3N0ciAi5peg5pWI55qEIEROUyBUVEwiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM3Cittc2dpZCAiUmVzb3VyY2UgcmVjb3JkIGtleSBpcyBwYXR0ZXJuIgorbXNnc3RyICLotYTmupDorrDlvZXlr4bpkqXmmK/moLflk4EiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM4Cittc2dpZCAiTG9jYWwgbmFtZSBjb2xsaXNpb24iCittc2dzdHIgIuacrOWcsOWQjeensOWGsueqgSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzkKK21zZ2lkICJJbnZhbGlkIHJlY29yZCIKK21zZ3N0ciAi5peg5pWI55qE6K6w5b2VIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0MQorbXNnaWQgIkludmFsaWQgc2VydmljZSBuYW1lIgorbXNnc3RyICLml6DmlYjnmoTmnI3liqHlkI3np7AiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQyCittc2dpZCAiSW52YWxpZCBzZXJ2aWNlIHR5cGUiCittc2dzdHIgIuaXoOaViOeahOacjeWKoeexu+WeiyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDMKK21zZ2lkICJJbnZhbGlkIHBvcnQgbnVtYmVyIgorbXNnc3RyICLml6DmlYjnmoTnq6/lj6Plj7ciCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQ0Cittc2dpZCAiSW52YWxpZCByZWNvcmQga2V5IgorbXNnc3RyICLml6DmlYjnmoTorrDlvZXlr4bpkqUiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQ1Cittc2dpZCAiSW52YWxpZCBhZGRyZXNzIgorbXNnc3RyICLml6DmlYjnmoTlnLDlnYAiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQ2Cittc2dpZCAiVGltZW91dCByZWFjaGVkIgorbXNnc3RyICLlt7LotoXml7YiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQ3Cittc2dpZCAiVG9vIG1hbnkgY2xpZW50cyIKK21zZ3N0ciAi5a6i5oi356uv5aSq5aSaIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0OAorbXNnaWQgIlRvbyBtYW55IG9iamVjdHMiCittc2dzdHIgIuWvueixoeWkquWkmiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDkKK21zZ2lkICJUb28gbWFueSBlbnRyaWVzIgorbXNnc3RyICLmnaHnm67lpKrlpJoiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjUwCittc2dpZCAiT1MgRXJyb3IiCittc2dzdHIgIuaTjeS9nOezu+e7n+mUmeivryIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTIKK21zZ2lkICJBY2Nlc3MgZGVuaWVkIgorbXNnc3RyICLorr/pl67ooqvmi5Lnu50iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjUzCittc2dpZCAiSW52YWxpZCBvcGVyYXRpb24iCittc2dzdHIgIuaXoOaViOeahOaTjeS9nCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTQKK21zZ2lkICJBbiB1bmV4cGVjdGVkIEQtQnVzIGVycm9yIG9jY3VyZWQiCittc2dzdHIgIuWPkeeUn+S6huS4gOS4quacqumihOacn+eahCBELUJ1cyDplJnor68iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU1Cittc2dpZCAiRGFlbW9uIGNvbm5lY3Rpb24gZmFpbGVkIgorbXNnc3RyICJEYWVtb24g6L+e5o6l5aSx6LSlIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1NgorbXNnaWQgIk1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIuWGheWtmOW3sueUqOWwvSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTcKK21zZ2lkICJUaGUgb2JqZWN0IHBhc3NlZCBpbiB3YXMgbm90IHZhbGlkIgorbXNnc3RyICLkvKDlhaXnmoTlr7nosaHml6DmlYgiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU4Cittc2dpZCAiRGFlbW9uIG5vdCBydW5uaW5nIgorbXNnc3RyICJEYWVtb24g5pyq6L+Q6KGMIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1OQorbXNnaWQgIkludmFsaWQgaW50ZXJmYWNlIGluZGV4IgorbXNnc3RyICLml6DmlYjnmoTmjqXlj6PntKLlvJUiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjYwCittc2dpZCAiSW52YWxpZCBwcm90b2NvbCBzcGVjaWZpY2F0aW9uIgorbXNnc3RyICLml6DmlYjnmoTljY/orq7op4TojIMiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjYxCittc2dpZCAiSW52YWxpZCBmbGFncyIKK21zZ3N0ciAi5peg5pWI55qE5bGe5oCn5qCH5b+XIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2MworbXNnaWQgIk5vdCBmb3VuZCIKK21zZ3N0ciAi5rKh5pyJ5om+5YiwIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2NAorbXNnaWQgIkludmFsaWQgY29uZmlndXJhdGlvbiIKK21zZ3N0ciAi5peg5pWI55qE6YWN572uIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2NQorbXNnaWQgIlZlcnNpb24gbWlzbWF0Y2giCittc2dzdHIgIueJiOacrOS4jeWMuemFjSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjYKK21zZ2lkICJJbnZhbGlkIHNlcnZpY2Ugc3VidHlwZSIKK21zZ3N0ciAi5peg5pWI55qE5pyN5Yqh5a2Q57G75Z6LIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2NworbXNnaWQgIkludmFsaWQgcGFja2V0IgorbXNnc3RyICLml6DmlYjnmoTmlbDmja7ljIUiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY4Cittc2dpZCAiSW52YWxpZCBETlMgcmV0dXJuIGNvZGUiCittc2dzdHIgIuaXoOaViOeahCBETlMg6L+U5Zue5Luj56CBIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2OQorbXNnaWQgIkROUyBmYWlsdXJlOiBGT1JNRVJSIgorbXNnc3RyICJETlMg5aSx6LSl77yaRk9STUVSUiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzAKK21zZ2lkICJETlMgZmFpbHVyZTogU0VSVkZBSUwiCittc2dzdHIgIkROUyDlpLHotKXvvJpTRVJWRkFJTCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzEKK21zZ2lkICJETlMgZmFpbHVyZTogTlhET01BSU4iCittc2dzdHIgIkROUyDlpLHotKXvvJpOWERPTUFJTiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzIKK21zZ2lkICJETlMgZmFpbHVyZTogTk9USU1QIgorbXNnc3RyICJETlMg5aSx6LSl77yaTk9USU1QIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3NAorbXNnaWQgIkROUyBmYWlsdXJlOiBSRUZVU0VEIgorbXNnc3RyICJETlMg5aSx6LSl77yaUkVGVVNFRCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzUKK21zZ2lkICJETlMgZmFpbHVyZTogWVhET01BSU4iCittc2dzdHIgIkROUyDlpLHotKXvvJpZWERPTUFJTiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzYKK21zZ2lkICJETlMgZmFpbHVyZTogWVhSUlNFVCIKK21zZ3N0ciAiRE5TIOWksei0pe+8mllYUlJTRVQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc3Cittc2dpZCAiRE5TIGZhaWx1cmU6IE5YUlJTRVQiCittc2dzdHIgIkROUyDlpLHotKXvvJpOWFJSU0VUIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3OAorbXNnaWQgIkROUyBmYWlsdXJlOiBOT1RBVVRIIgorbXNnc3RyICJETlMg5aSx6LSl77yaTk9UQVVUSCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzkKK21zZ2lkICJETlMgZmFpbHVyZTogTk9UWk9ORSIKK21zZ3N0ciAiRE5TIOWksei0pe+8mk5PVFpPTkUiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjgwCittc2dpZCAiSW52YWxpZCBSREFUQSIKK21zZ3N0ciAi5peg5pWI55qEIFJEQVRBIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4MQorbXNnaWQgIkludmFsaWQgRE5TIHR5cGUiCittc2dzdHIgIuaXoOaViOeahCBETlMg57G75Z6LIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4MgorbXNnaWQgIkludmFsaWQgRE5TIGNsYXNzIgorbXNnc3RyICLml6DmlYjnmoQgRE5TIOexuyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODMKK21zZ2lkICJOb3Qgc3VwcG9ydGVkIgorbXNnc3RyICLkuI3mlK/mjIEiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjg1Cittc2dpZCAiTm90IHBlcm1pdHRlZCIKK21zZ3N0ciAi5LiN5YWB6K64IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4NgorbXNnaWQgIkludmFsaWQgYXJndW1lbnQiCittc2dzdHIgIuaXoOaViOeahOWPguaVsCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODcKK21zZ2lkICJJcyBlbXB0eSIKK21zZ3N0ciAi5Li656m6IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4OAorbXNnaWQgIlRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uIGlzIGludmFsaWQgYmVjYXVzZSByZWR1bmRhbnQiCittc2dzdHIgIuivt+axgueahOaTjeS9nOaXoOaViO+8jOWboOS4uui/h+S6juWGl+mVvyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6OTQKK21zZ2lkICJJbnZhbGlkIEVycm9yIENvZGUiCittc2dzdHIgIuaXoOaViOeahOmUmeivr+S7o+eggSIKKworIzogLi4vYXZhaGktZGlzY292ZXItc3RhbmRhbG9uZS9hdmFoaS1kaXNjb3Zlci51aS5oOjEKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weTo3NgorbXNnaWQgIjxpPk5vIHNlcnZpY2UgY3VycmVudGx5IHNlbGVjdGVkLjwvaT4iCittc2dzdHIgIjxpPuayoeacieW9k+WJjemAieWumueahOacjeWKoeOAgjxpPiIKKworIzogLi4vYXZhaGktZGlzY292ZXItc3RhbmRhbG9uZS9hdmFoaS1kaXNjb3Zlci51aS5oOjIKK21zZ2lkICJBdmFoaSBEaXNjb3ZlcnkiCittc2dzdHIgIkF2YWhp5Y+R546wIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIuZGVza3RvcC5pbi5pbi5oOjEKK21zZ2lkICJBdmFoaSBaZXJvY29uZiBCcm93c2VyIgorbXNnc3RyICJBdmFoaSBaZXJv5rWP6KeI5ZmoIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIuZGVza3RvcC5pbi5pbi5oOjIKK21zZ2lkICJCcm93c2UgZm9yIFplcm9jb25mIHNlcnZpY2VzIGF2YWlsYWJsZSBvbiB5b3VyIG5ldHdvcmsiCittc2dzdHIgIua1j+iniOe9kee7nOWGheeahFplcm9jb25m5pyN5YqhIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI0Cittc2dpZCAiVFhUIgorbXNnc3RyICJUWFQiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMjYKK21zZ2lkICJUWFQgRGF0YToiCittc2dzdHIgIlRYVCDmlbDmja7vvJoiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMjYKK21zZ2lkICJlbXB0eSIKK21zZ3N0ciAi5Li656m6IgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI4Cittc2dpZCAiU2VydmljZSBUeXBlOiIKK21zZ3N0ciAi5pyN5Yqh57G75Z6L77yaIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI5Cittc2dpZCAiU2VydmljZSBOYW1lOiIKK21zZ3N0ciAi5pyN5Yqh5ZCN56ew77yaIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjMwCittc2dpZCAiRG9tYWluIE5hbWU6IgorbXNnc3RyICLln5/lkI3np7DvvJoiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMzEKK21zZ2lkICJJbnRlcmZhY2U6IgorbXNnc3RyICLmjqXlj6PvvJoiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMzIKK21zZ2lkICJBZGRyZXNzOiIKK21zZ3N0ciAi5Zyw5Z2A77yaIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE4NQorbXNnaWQgIkJyb3dzZSBTZXJ2aWNlIFR5cGVzIgorbXNnc3RyICLmtY/op4jmnI3liqHnsbvlnosiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTg1Cittc2dpZCAiQSBOVUxMIHRlcm1pbmF0ZWQgbGlzdCBvZiBzZXJ2aWNlIHR5cGVzIHRvIGJyb3dzZSBmb3IiCittc2dzdHIgIuS7pU5VTEznu5PlsL7nmoTmnI3liqHnsbvlnovliJfooajnlKjkuo7mtY/op4giCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTkwCittc2dpZCAiRG9tYWluIgorbXNnc3RyICLln58iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTkwCittc2dpZCAiVGhlIGRvbWFpbiB0byBicm93c2UgaW4sIG9yIE5VTEwgZm9yIHRoZSBkZWZhdWx0IGRvbWFpbiIKK21zZ3N0ciAi6KaB5rWP6KeI55qE5Z+f77yM5oiWTlVMTOihqOekuum7mOiupOWfnyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxOTYKK21zZ2lkICJTZXJ2aWNlIFR5cGUiCittc2dzdHIgIuacjeWKoeexu+WeiyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxOTYKK21zZ2lkICJUaGUgc2VydmljZSB0eXBlIG9mIHRoZSBzZWxlY3RlZCBzZXJ2aWNlIgorbXNnc3RyICLpgInlrprmnI3liqHnmoTmnI3liqHnsbvlnosiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjAyIC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTAyMworbXNnaWQgIlNlcnZpY2UgTmFtZSIKK21zZ3N0ciAi5pyN5Yqh5ZCN56ewIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIwMgorbXNnaWQgIlRoZSBzZXJ2aWNlIG5hbWUgb2YgdGhlIHNlbGVjdGVkIHNlcnZpY2UiCittc2dzdHIgIumAieWumuacjeWKoeeahOacjeWKoeWQjeensCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMDgKK21zZ2lkICJBZGRyZXNzIgorbXNnc3RyICLlnLDlnYAiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjA4Cittc2dpZCAiVGhlIGFkZHJlc3Mgb2YgdGhlIHJlc29sdmVkIHNlcnZpY2UiCittc2dzdHIgIuW3suino+aekOacjeWKoeeahOWcsOWdgCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMTMKK21zZ2lkICJQb3J0IgorbXNnc3RyICLnq6/lj6MiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjEzCittc2dpZCAiVGhlIElQIHBvcnQgbnVtYmVyIG9mIHRoZSByZXNvbHZlZCBzZXJ2aWNlIgorbXNnc3RyICLlt7Lop6PmnpDmnI3liqHnmoRJUOerr+WPo+WPtyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMTkKK21zZ2lkICJIb3N0IE5hbWUiCittc2dzdHIgIuS4u+acuuWQjSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMTkKK21zZ2lkICJUaGUgaG9zdCBuYW1lIG9mIHRoZSByZXNvbHZlZCBzZXJ2aWNlIgorbXNnc3RyICLlt7Lop6PmnpDmnI3liqHnmoTkuLvmnLrlkI0iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjI1Cittc2dpZCAiVFhUIERhdGEiCittc2dzdHIgIlRYVOaVsOaNriIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMjUKK21zZ2lkICJUaGUgVFhUIGRhdGEgb2YgdGhlIHJlc29sdmVkIHNlcnZpY2UiCittc2dzdHIgIuW3suino+aekOacjeWKoeeahFRYVOaVsOaNriIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMzAKK21zZ2lkICJSZXNvbHZlIFNlcnZpY2UiCittc2dzdHIgIuino+aekOacjeWKoe+8miIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMzAKK21zZ2lkICJSZXNvbHZlIHRoZSBzZWxlY3RlZCBzZXJ2aWNlIGF1dG9tYXRpY2FsbHkgYmVmb3JlIHJldHVybmluZyIKK21zZ3N0ciAi5Zue6L2s5YmN6Ieq5Yqo6Kej5p6Q6YCJ5a6a55qE5pyN5YqhIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIzNgorbXNnaWQgIlJlc29sdmUgU2VydmljZSBIb3N0IE5hbWUiCittc2dzdHIgIuino+aekOacjeWKoeS4u+acuuWQje+8miIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMzYKK21zZ2lkICIiCisiUmVzb2x2ZSB0aGUgaG9zdCBuYW1lIG9mIHRoZSBzZWxlY3RlZCBzZXJ2aWNlIGF1dG9tYXRpY2FsbHkgYmVmb3JlIHJldHVybmluZyIKK21zZ3N0ciAi5Zue6L2s5YmN6Ieq5Yqo6Kej5p6Q6YCJ5a6a5pyN5Yqh55qE5Li75py65ZCNIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjI0MgorbXNnaWQgIkFkZHJlc3MgZmFtaWx5IgorbXNnc3RyICLlnLDlnYDnsbvliKsiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjQyCittc2dpZCAiVGhlIGFkZHJlc3MgZmFtaWx5IGZvciBob3N0IG5hbWUgcmVzb2x1dGlvbiIKK21zZ3N0ciAi55So5LqO5Li75py65ZCN56ew6Kej5p6Q55qE5Zyw5Z2A57G75YirIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjMyNgorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFoaSBjbGllbnQgZmFpbHVyZTogJXMiCittc2dzdHIgIkF2YWhpIOWuouaIt+err+Wksei0pe+8miVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjM4OAorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFoaSByZXNvbHZlciBmYWlsdXJlOiAlcyIKK21zZ3N0ciAiQXZhaGkg6Kej5p6Q5Zmo5aSx6LSl77yaJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyb3dzaW5nIGZvciBzZXJ2aWNlIHR5cGUgJXMgaW4gZG9tYWluICVzIGZhaWxlZDogJXMiCittc2dzdHIgIua1j+iniOacjeWKoeexu+WeiyAlcyDkuo7ln58gJXMg5aSx6LSl77yaJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NTE5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjE2OAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTY5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjE3OAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTc5Cittc2dpZCAibi9hIgorbXNnc3RyICLkuI3lj6/nlKgiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWhpIGRvbWFpbiBicm93c2VyIGZhaWx1cmU6ICVzIgorbXNnc3RyICJBdmFoaSDln5/mtY/op4jlmajlpLHotKXvvJolcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo2ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlYWQgQXZhaGkgZG9tYWluOiAlcyIKK21zZ3N0ciAi6K+75Y+WIEF2YWhpIOWfn+Wksei0pe+8miVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjcwNgorbXNnaWQgIkJyb3dzZSBzZXJ2aWNlIHR5cGUgbGlzdCBpcyBlbXB0eSEiCittc2dzdHIgIua1j+iniOacjeWKoeexu+Wei+WIl+ihqOS4uuepuu+8gSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo3MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNvbm5lY3QgdG8gQXZhaGkgc2VydmVyOiAlcyIKK21zZ3N0ciAi6L+e5o6l5YiwIEF2YWhpIOacjeWKoeWZqOWksei0pe+8miVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjczNQorbXNnaWQgIkJyb3dzaW5nIGZvciBzZXJ2aWNlcyBvbiA8Yj5sb2NhbCBuZXR3b3JrPC9iPjoiCittc2dzdHIgIua1j+iniOacjeWKoeS6jiA8Yj7mnKzlnLDnvZHnu5w8L2I+77yaIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjczNworIywgYy1mb3JtYXQKK21zZ2lkICJCcm93c2luZyBmb3Igc2VydmljZXMgaW4gZG9tYWluIDxiPiVzPC9iPjoiCittc2dzdHIgIua1j+iniOacjeWKoeS6juWfnyA8Yj4lczwvYj7vvJoiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NzczCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgYnJvd3NlciBmb3IgJXM6ICVzIgorbXNnc3RyICLkuLogJXMg5Yib5bu65rWP6KeI5Zmo5aSx6LSl77yaJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6OTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgcmVzb2x2ZXIgZm9yICVzIG9mIHR5cGUgJXMgaW4gZG9tYWluICVzOiAlcyIKK21zZ3N0ciAi5Li657G75Z6LICVzIOeahCAlcyDliJvlu7rop6PmnpDlmajkuo7ln58gJXMg5aSx6LSl77yaJXMiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6OTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgZG9tYWluIGJyb3dzZXI6ICVzIgorbXNnc3RyICLliJvlu7rln5/mtY/op4jlmajlpLHotKXvvJolcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo5ODkKK21zZ2lkICJDaGFuZ2UgZG9tYWluIgorbXNnc3RyICLmm7TmlLnln58iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTAzMSAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNjIKK21zZ2lkICJCcm93c2luZy4uLiIKK21zZ3N0ciAi5q2j5Zyo5rWP6KeILi4uIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExMjAKK21zZ2lkICJJbml0aWFsaXppbmcuLi4iCittc2dzdHIgIuato+WcqOWIneWni+WMli4uLiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTQ0Cittc2dpZCAiTG9jYXRpb24iCittc2dzdHIgIuS9jee9riIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTQ5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU1MworbXNnaWQgIk5hbWUiCittc2dzdHIgIuWQjeensCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTU0IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU1MworbXNnaWQgIlR5cGUiCittc2dzdHIgIuexu+WeiyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTY2Cittc2dpZCAiX0RvbWFpbi4uLiIKK21zZ3N0ciAiX+Wfny4uLiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBbb3B0aW9uc11cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLXMgLS1zc2ggICAgICAgICAgICAgQnJvd3NlIFNTSCBzZXJ2ZXJzXG4iCisiICAgIC12IC0tdm5jICAgICAgICAgICAgIEJyb3dzZSBWTkMgc2VydmVyc1xuIgorIiAgICAtUyAtLXNoZWxsICAgICAgICAgICBCcm93c2UgYm90aCBTU0ggYW5kIFZOQ1xuIgorIiAgICAtZCAtLWRvbWFpbj1ET01BSU4gICBUaGUgZG9tYWluIHRvIGJyb3dzZSBpblxuIgorbXNnc3RyICIiCisiJXMgW29wdGlvbnNdXG4iCisiXG4iCisiICAtaCAtLWhlbHAg5pi+56S66K+l5biu5Yqp5L+h5oGvXG4iCisiIC1zIC0tc3NoIOa1j+iniFNTSOacjeWKoeWZqFxuIgorIiAtdiAtLXZuYyDmtY/op4hWTkPmnI3liqHlmahcbiIKKyIgLVMgLS1zaGVsbCDmtY/op4hTU0jlkoxWTkNcbiIKKyIgLWQgLS1kb21haW49RE9NQUlOIOimgea1j+iniOeahOWfn+WQjVxuIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTAxIC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjc3NQorIywgYy1mb3JtYXQKK21zZ2lkICJUb28gbWFueSBhcmd1bWVudHNcbiIKK21zZ3N0ciAi5Y+C5pWw5aSq5aSaXG4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNDkKK21zZ2lkICJDaG9vc2UgU2hlbGwgU2VydmVyIgorbXNnc3RyICLpgInmi6kgU2hlbGwg5pyN5Yqh5ZmoIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTUxCittc2dpZCAiRGVza3RvcCIKK21zZ3N0ciAi5qGM6Z2iIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTUyCittc2dpZCAiVGVybWluYWwiCittc2dzdHIgIue7iOerryIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE1NgorbXNnaWQgIkNob29zZSBWTkMgc2VydmVyIgorbXNnc3RyICLpgInmi6kgVk5DIOacjeWKoeWZqCIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE2MQorbXNnaWQgIkNob29zZSBTU0ggc2VydmVyIgorbXNnc3RyICLpgInmi6kgU1NIIOacjeWKoeWZqCIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE4NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb25uZWN0aW5nIHRvICclcycgLi4uXG4iCittc2dzdHIgIuato+WcqOi/nuaOpeKAnCVz4oCdLi4uXG4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoyNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXhlY2xwKCkgZmFpbGVkOiAlc1xuIgorbXNnc3RyICJleGVjbHAoKSDlpLHotKXvvJolc1xuIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbmNlbGVkLlxuIgorbXNnc3RyICLlt7Llj5bmtojjgIJcbiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5kZXNrdG9wLmluLmluLmg6MQorbXNnaWQgIkF2YWhpIFNTSCBTZXJ2ZXIgQnJvd3NlciIKK21zZ3N0ciAiQXZhaGkgU1NI5pyN5Yqh5Zmo5rWP6KeI5ZmoIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmRlc2t0b3AuaW4uaW4uaDoyCittc2dpZCAiQnJvd3NlIGZvciBaZXJvY29uZi1lbmFibGVkIFNTSCBTZXJ2ZXJzIgorbXNnc3RyICLmtY/op4jlhbfmnIlaZXJvY29uZuWKn+iDveeahFNTSOacjeWKoeWZqCIKKworIzogLi4vYXZhaGktdWkvYnZuYy5kZXNrdG9wLmluLmluLmg6MQorbXNnaWQgIkF2YWhpIFZOQyBTZXJ2ZXIgQnJvd3NlciIKK21zZ3N0ciAiQXZhaGkgVk5D5pyN5Yqh5Zmo5rWP6KeI5ZmoIgorCisjOiAuLi9hdmFoaS11aS9idm5jLmRlc2t0b3AuaW4uaW4uaDoyCittc2dpZCAiQnJvd3NlIGZvciBaZXJvY29uZi1lbmFibGVkIFZOQyBTZXJ2ZXJzIgorbXNnc3RyICLmtY/op4jlhbfmnIlaZXJvY29uZuWKn+iDveeahFZOQ+acjeWKoeWZqCIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIjogQWxsIGZvciBub3dcbiIKK21zZ3N0ciAi77ya5b2T5YmN5omA5pyJXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjExOAorIywgYy1mb3JtYXQKK21zZ2lkICI6IENhY2hlIGV4aGF1c3RlZFxuIgorbXNnc3RyICLvvJrnvJPlrZjnlKjlsL1cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MjM5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSBzZXJ2aWNlICclcycgb2YgdHlwZSAnJXMnIGluIGRvbWFpbiAnJXMnOiAlc1xuIgorbXNnc3RyICLop6PmnpDnsbvlnovigJwlc+KAneeahOacjeWKoeKAnCVz4oCd5LqO5Z+f4oCcJXPigJ3lpLHotKXvvJolc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzozNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VydmljZV9icm93c2VyIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAic2VydmljZV9icm93c2VyIOWksei0pe+8miVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjM3OAorIywgYy1mb3JtYXQKK21zZ2lkICJhdmFoaV9zZXJ2aWNlX2Jyb3dzZXJfbmV3KCkgZmFpbGVkOiAlc1xuIgorbXNnc3RyICJhdmFoaV9zZXJ2aWNlX2Jyb3dzZXJfbmV3KCkg5aSx6LSl77yaJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgInNlcnZpY2VfdHlwZV9icm93c2VyIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAic2VydmljZV90eXBlX2Jyb3dzZXIg5aSx6LSl77yaJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImF2YWhpX3NlcnZpY2VfdHlwZV9icm93c2VyX25ldygpIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAiYXZhaGlfc2VydmljZV90eXBlX2Jyb3dzZXJfbmV3KCkg5aSx6LSl77yaJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTE5CisjLCBjLWZvcm1hdAorbXNnaWQgImF2YWhpX2RvbWFpbl9icm93c2VyX25ldygpIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAiYXZhaGlfZG9tYWluX2Jyb3dzZXJfbmV3KCkg5aSx6LSl77yaJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTM1IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozOTQKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyODAgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE2OAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcXVlcnkgdmVyc2lvbiBzdHJpbmc6ICVzXG4iCittc2dzdHIgIuafpeivoueJiOacrOWtl+espuS4suWksei0pe+8miVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU0MCAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6Mzk5CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6Mjg1IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxNzMKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IGhvc3QgbmFtZTogJXNcbiIKK21zZ3N0ciAi5p+l6K+i5Li75py65ZCN5aSx6LSl77yaJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTQ0IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo0MDMKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyODkgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE3NworIywgYy1mb3JtYXQKK21zZ2lkICJTZXJ2ZXIgdmVyc2lvbjogJXM7IEhvc3QgbmFtZTogJXNcbiIKK21zZ3N0ciAi5pyN5Yqh5Zmo54mI5pys77yaJXPvvJvkuLvmnLrlkI3vvJolc1xuIgorCisjLiBUcmFuc2xhdG9yczogVGhpcyBpcyBhIGNvbHVtbiBoZWFkaW5nIHdpdGggYWJicmV2aWF0aW9ucyBmb3IKKyMuICogICBFdmVudCAoKy8tKSwgTmV0d29yayBJbnRlcmZhY2UsIFByb3RvY29sIChJUHY0L3Y2KSwgRG9tYWluCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRSBJZmNlIFByb3QgRG9tYWluXG4iCittc2dzdHIgIkUgSWZjZSBQcm90IOWfn1xuIgorCisjLiBUcmFuc2xhdG9yczogVGhpcyBpcyBhIGNvbHVtbiBoZWFkaW5nIHdpdGggYWJicmV2aWF0aW9ucyBmb3IKKyMuICogICBFdmVudCAoKy8tKSwgTmV0d29yayBJbnRlcmZhY2UsIFByb3RvY29sIChJUHY0L3Y2KSwgRG9tYWluCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRSBJZmNlIFByb3QgJS0qcyAlLTIwcyBEb21haW5cbiIKK21zZ3N0ciAiRSBJZmNlIFByb3QgJS0qcyAlLTIwcyDln59cbiIKKworIy4gV2UgaGF2ZSBiZWVuIGRpc2Nvbm5lY3RlZCwgc28gbGV0IHJlY29ubmVjdAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTg1IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGlzY29ubmVjdGVkLCByZWNvbm5lY3RpbmcgLi4uXG4iCittc2dzdHIgIuW3suaWreW8gO+8jOato+WcqOmHjeaWsOi/nuaOpSAuLi5cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTk5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjgyOQorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE3MCAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6Mzg2CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjcyIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBjbGllbnQgb2JqZWN0OiAlc1xuIgorbXNnc3RyICLliJvlu7rlrqLmiLfnq6/lr7nosaHlpLHotKXvvJolc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo2MDQgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE3NQorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjE0MyAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xpZW50IGZhaWx1cmUsIGV4aXRpbmc6ICVzXG4iCittc2dzdHIgIuWuouaIt+err+Wksei0pe+8jOmAgOWHuu+8miVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjYyMyAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIldhaXRpbmcgZm9yIGRhZW1vbiAuLi5cbiIKK21zZ3N0ciAi5q2j5Zyo562J5b6FIGRhZW1vbiAuLi5cbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NjQ3Cittc2dpZCAiIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLUQgLS1icm93c2UtZG9tYWlucyAgQnJvd3NlIGZvciBicm93c2luZyBkb21haW5zIGluc3RlYWQgb2Ygc2VydmljZXNcbiIKKyIgICAgLWEgLS1hbGwgICAgICAgICAgICAgU2hvdyBhbGwgc2VydmljZXMsIHJlZ2FyZGxlc3Mgb2YgdGhlIHR5cGVcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgVGhlIGRvbWFpbiB0byBicm93c2UgaW5cbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgRW5hYmxlIHZlcmJvc2UgbW9kZVxuIgorIiAgICAtdCAtLXRlcm1pbmF0ZSAgICAgICBUZXJtaW5hdGUgYWZ0ZXIgZHVtcGluZyBhIG1vcmUgb3IgbGVzcyBjb21wbGV0ZSAiCisibGlzdFxuIgorIiAgICAtYyAtLWNhY2hlICAgICAgICAgICBUZXJtaW5hdGUgYWZ0ZXIgZHVtcGluZyBhbGwgZW50cmllcyBmcm9tIHRoZSBjYWNoZVxuIgorIiAgICAtbCAtLWlnbm9yZS1sb2NhbCAgICBJZ25vcmUgbG9jYWwgc2VydmljZXNcbiIKKyIgICAgLXIgLS1yZXNvbHZlICAgICAgICAgUmVzb2x2ZSBzZXJ2aWNlcyBmb3VuZFxuIgorIiAgICAtZiAtLW5vLWZhaWwgICAgICAgICBEb24ndCBmYWlsIGlmIHRoZSBkYWVtb24gaXMgbm90IGF2YWlsYWJsZVxuIgorIiAgICAtcCAtLXBhcnNhYmxlICAgICAgICBPdXRwdXQgaW4gcGFyc2FibGUgZm9ybWF0XG4iCittc2dzdHIgIiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAg5pi+56S65pys5biu5YqpXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIOaYvuekuueJiOacrFxuIgorIiAgICAtRCAtLWJyb3dzZS1kb21haW5zICDmtY/op4jln5/ogIzkuI3mmK/mnI3liqFcbiIKKyIgICAgLWEgLS1hbGwgICAgICAgICAgICAg5pi+56S65omA5pyJ5pyN5Yqh77yM5b+955Wl57G75Z6LXG4iCisiICAgIC1kIC0tZG9tYWluPURPTUFJTiAgIOimgea1j+iniOeahOWfn1xuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICDlkK/nlKjor6bov7DmqKHlvI9cbiIKKyIgICAgLXQgLS10ZXJtaW5hdGUgICAgICAg5a+85Ye65LiA5Liq5a6M5pW05YiX6KGo5ZCO57uI5q2iXG4iCisiICAgIC1jIC0tY2FjaGUgICAgICAgICAgIOWvvOWHuue8k+WtmOS4reeahOaJgOacieadoeebruWQjue7iOatolxuIgorIiAgICAtbCAtLWlnbm9yZS1sb2NhbCAgICDlv73nlaXmnKzlnLDmnI3liqFcbiIKKyIgICAgLXIgLS1yZXNvbHZlICAgICAgICAg6Kej5p6Q5om+5Yiw55qE5pyN5YqhXG4iCisiICAgIC1mIC0tbm8tZmFpbCAgICAgICAgIOWmguaenCBkYWVtb24g5LiN5Y+v55So5Lmf5LiN5Lit5patXG4iCisiICAgIC1wIC0tcGFyc2FibGUgICAgICAgIOi+k+WHuuWPr+ino+aekOagvOW8j1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo2NjAKK21zZ2lkICIiCisiICAgIC1rIC0tbm8tZGItbG9va3VwICAgIERvbid0IGxvb2t1cCBzZXJ2aWNlIHR5cGVzXG4iCisiICAgIC1iIC0tZHVtcC1kYiAgICAgICAgIER1bXAgc2VydmljZSB0eXBlIGRhdGFiYXNlXG4iCittc2dzdHIgIiIKKyIgICAgLWsgLS1uby1kYi1sb29rdXAgICAg5LiN5p+l6K+i5pyN5Yqh57G75Z6LXG4iCisiICAgIC1iIC0tZHVtcC1kYiAgICAgICAgIOWvvOWHuuacjeWKoeexu+Wei+aVsOaNruW6k1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo3NjYgLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjIxOQorIywgYy1mb3JtYXQKK21zZ2lkICJUb28gZmV3IGFyZ3VtZW50c1xuIgorbXNnc3RyICLov4flsJHnmoTlj4LmlbBcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6ODIxIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozNzgKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyNjQgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIHNpbXBsZSBwb2xsIG9iamVjdC5cbiIKK21zZ3N0ciAi5Yib5bu6566A5Y2V5p+l6K+i5a+56LGh5aSx6LSl44CCXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo3NgorIywgYy1mb3JtYXQKK21zZ2lkICJFc3RhYmxpc2hlZCB1bmRlciBuYW1lICclcydcbiIKK21zZ3N0ciAi5bey5Lul5ZCN56ew4oCcJXPigJ3lu7rnq4tcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlcjogJXNcbiIKK21zZ3N0ciAi5rOo5YaM5aSx6LSl77yaJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIk5hbWUgY29sbGlzaW9uLCBwaWNraW5nIG5ldyBuYW1lICclcycuXG4iCittc2dzdHIgIuWQjeensOWGsueqge+8jOaMkemAieaWsOWQjeensOKAnCVz4oCd44CCXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBlbnRyeSBncm91cDogJXNcbiIKK21zZ3N0ciAi5Yib5bu65p2h55uu57uE5aSx6LSl77yaJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjEyNAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gYWRkIGFkZHJlc3M6ICVzXG4iCittc2dzdHIgIua3u+WKoOWcsOWdgOWksei0pe+8miVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBzZXJ2aWNlOiAlc1xuIgorbXNnc3RyICLmt7vliqDmnI3liqHlpLHotKXvvJolc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgc3VidHlwZSAnJXMnOiAlc1xuIgorbXNnc3RyICLmt7vliqDlrZDnsbvlnovigJwlc+KAneWksei0pe+8miVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiSG9zdCBuYW1lIGNvbmZsaWN0XG4iCittc2dzdHIgIuS4u+acuuWQjeWGsueqgVxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBbb3B0aW9uc10gJXMgPG5hbWU+IDx0eXBlPiA8cG9ydD4gWzx0eHQgLi4uPl1cbiIKKyIlcyBbb3B0aW9uc10gJXMgPGhvc3QtbmFtZT4gPGFkZHJlc3M+XG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFNob3cgdmVyc2lvblxuIgorIiAgICAtcyAtLXNlcnZpY2UgICAgICAgICBQdWJsaXNoIHNlcnZpY2VcbiIKKyIgICAgLWEgLS1hZGRyZXNzICAgICAgICAgUHVibGlzaCBhZGRyZXNzXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgRG9tYWluIHRvIHB1Ymxpc2ggc2VydmljZSBpblxuIgorIiAgICAtSCAtLWhvc3Q9RE9NQUlOICAgICBIb3N0IHdoZXJlIHNlcnZpY2UgcmVzaWRlc1xuIgorIiAgICAgICAtLXN1YnR5cGU9U1VCVFlQRSBBbiBhZGRpdGlvbmFsIHN1YnR5cGUgdG8gcmVnaXN0ZXIgdGhpcyBzZXJ2aWNlICIKKyJ3aXRoXG4iCisiICAgIC1SIC0tbm8tcmV2ZXJzZSAgICAgIERvIG5vdCBwdWJsaXNoIHJldmVyc2UgZW50cnkgd2l0aCBhZGRyZXNzXG4iCisiICAgIC1mIC0tbm8tZmFpbCAgICAgICAgIERvbid0IGZhaWwgaWYgdGhlIGRhZW1vbiBpcyBub3QgYXZhaWxhYmxlXG4iCittc2dzdHIgIiIKKyIlcyBb6YCJ6aG5XSAlcyA85ZCN56ewPiA857G75Z6LPiA856uv5Y+jPiBbPHR4dCAuLi4+XVxuIgorIiVzIFvpgInpobldICVzIDzkuLvmnLrlkI0+IDzlnLDlnYA+XG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIOaYvuekuuacrOW4ruWKqVxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICDmmL7npLrniYjmnKxcbiIKKyIgICAgLXMgLS1zZXJ2aWNlICAgICAgICAg5Y+R5biD5pyN5YqhXG4iCisiICAgIC1hIC0tYWRkcmVzcyAgICAgICAgIOWPkeW4g+WcsOWdgFxuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICDlkK/nlKjor6bov7DmqKHlvI9cbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAg6KaB5Y+R5biD5pyN5Yqh55qE5Z+fXG4iCisiICAgIC1IIC0taG9zdD1ET01BSU4gICAgIOacjeWKoeWuv+WxnueahOS4u+aculxuIgorIiAgICAgICAtLXN1YnR5cGU9U1VCVFlQRSDnlKjkuo7ms6jlhozmraTmnI3liqHnmoTpop3lpJblrZDnsbvlnotcbiIKKyIgICAgLVIgLS1uby1yZXZlcnNlICAgICAg5LiN5Y+R5biD5bim5Zyw5Z2A55qE5Y+N6L2s5p2h55uuICAgIC1mIC0tbm8tZmFpbCAgICAgICAgIOWmguaenCAiCisiZGFlbW9uIOS4jeWPr+eUqOS5n+S4jeS4reaWrVxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MzAzIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIG51bWJlciBvZiBhcmd1bWVudHNcbiIKK21zZ3N0ciAi5peg5pWI55qE5Y+C5pWw5Liq5pWwXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIHBvcnQgbnVtYmVyOiAlc1xuIgorbXNnc3RyICLop6PmnpDnq6/lj6Plj7flpLHotKXvvJolc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MzYxIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gY29tbWFuZCBzcGVjaWZpZWQuXG4iCittc2dzdHIgIuayoeacieaMh+WumueahOWRveS7pOOAglxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgaG9zdCBuYW1lICclcyc6ICVzXG4iCittc2dzdHIgIuino+aekOS4u+acuuWQjeKAnCVz4oCd5aSx6LSl77yaJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjEyNgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSBhZGRyZXNzICclcyc6ICVzXG4iCittc2dzdHIgIuino+aekOWcsOWdgOKAnCVz4oCd5aSx6LSl77yaJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjE1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgW29wdGlvbnNdICVzIDxob3N0IG5hbWUgLi4uPlxuIgorIiVzIFtvcHRpb25zXSAlcyA8YWRkcmVzcyAuLi4gPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLW4gLS1uYW1lICAgICAgICAgICAgUmVzb2x2ZSBob3N0IG5hbWVcbiIKKyIgICAgLWEgLS1hZGRyZXNzICAgICAgICAgUmVzb2x2ZSBhZGRyZXNzXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKKyIgICAgLTYgICAgICAgICAgICAgICAgICAgTG9va3VwIElQdjYgYWRkcmVzc1xuIgorIiAgICAtNCAgICAgICAgICAgICAgICAgICBMb29rdXAgSVB2NCBhZGRyZXNzXG4iCittc2dzdHIgIiIKKyIlcyBb6YCJ6aG5XSAlcyA85Li75py65ZCNIC4uLj5cbiIKKyIlcyBb6YCJ6aG5XSAlcyA85Zyw5Z2AIC4uLiA+XG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIOaYvuekuuacrOW4ruWKqVxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICDmmL7npLrniYjmnKxcbiIKKyIgICAgLW4gLS1uYW1lICAgICAgICAgICAg6Kej5p6Q5Li75py65ZCNXG4iCisiICAgIC1hIC0tYWRkcmVzcyAgICAgICAgIOino+aekOWcsOWdgFxuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICDlkK/nlKjor6bov7DmqKHlvI9cbiIKKyIgICAgLTYgICAgICAgICAgICAgICAgICAg5qOA5p+lIElQdjYg5Zyw5Z2AXG4iCisiICAgIC00ICAgICAgICAgICAgICAgICAgIOajgOafpSBJUHY0IOWcsOWdgFxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6Mjk5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBob3N0IG5hbWUgcmVzb2x2ZXI6ICVzXG4iCittc2dzdHIgIuWIm+W7uuS4u+acuuWQjeino+aekOWZqOWksei0pe+8miVzXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzozMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIGFkZHJlc3MgJyVzJ1xuIgorbXNnc3RyICLliIbmnpDlnLDlnYDigJwlc+KAneWksei0pVxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MzE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgYWRkcmVzcyByZXNvbHZlcjogJXNcbiIKK21zZ3N0ciAi5Yib5bu65Zyw5Z2A6Kej5p6Q5Zmo5aSx6LSl77yaJXNcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBbb3B0aW9uc10gPG5ldyBob3N0IG5hbWU+XG4iCisiXG4iCisiICAgIC1oIC0taGVscCAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwXG4iCisiICAgIC1WIC0tdmVyc2lvbiAgICAgICAgIFNob3cgdmVyc2lvblxuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBFbmFibGUgdmVyYm9zZSBtb2RlXG4iCittc2dzdHIgIiIKKyIlcyBb6YCJ6aG5XSA85paw5Li75py65ZCNPlxuIgorIlxuIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICDmmL7npLrmnKzluK7liqlcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAg5pi+56S654mI5pysXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIOWQr+eUqOivpui/sOaooeW8j1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cywgZXhwZWN0aW5nIGV4YWN0bHkgb25lLlxuIgorbXNnc3RyICLml6DmlYjnmoTlj4LmlbDkuKrmlbDvvIzlj6rmjqXlj5fkuIDkuKrlj4LmlbDjgIJcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE5MworIywgYy1mb3JtYXQKK21zZ2lkICJIb3N0IG5hbWUgc3VjY2Vzc2Z1bGx5IGNoYW5nZWQgdG8gJXNcbiIKK21zZ3N0ciAi5Li75py65ZCN5oiQ5Yqf5pu05pS55Li6ICVzXG4iCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvcG8vemhfVFcucG8gYi9hdmFoaS0wLjYuMzEvcG8vemhfVFcucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZkZGQ4ZQotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9wby96aF9UVy5wbwpAQCAtMCwwICsxLDgwMCBAQAorIyBUcmFkaXRpb25hbCBDaGluZXNlIFRyYW5zbGF0aW9uIGZvciBhdmFoaQorIyBDb3B5cmlnaHQgKEMpIFlFQVIgVEhFIFBBQ0tBR0UnUyBDT1BZUklHSFQgSE9MREVSCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBQQUNLQUdFIHBhY2thZ2UuCisjIENoZW5nLUNoaWEgVHNlbmcgPHBzd28xMDY4MEBnbWFpbC5jb20+LCAyMDEwLgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogTWFzdGVyXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDExLTA0LTAyIDAzOjIzKzAyMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDEwLTA4LTE4IDAxOjAxKzA4MDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IENoZW5nLUNoaWEgVHNlbmcgPHBzd28xMDY4MEBnbWFpbC5jb20+XG4iCisiTGFuZ3VhZ2UtVGVhbTogY2hpbmVzZS1sMTBuIDxjaGluZXNlLWwxMG5AZ29vZ2xlZ3JvdXBzLmNvbT5cbiIKKyJMYW5ndWFnZTogXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjMwCittc2dpZCAiT0siCittc2dzdHIgIueiuuiqjSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzEKK21zZ2lkICJPcGVyYXRpb24gZmFpbGVkIgorbXNnc3RyICLmk43kvZzlpLHmlZciCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjMyCittc2dpZCAiQmFkIHN0YXRlIgorbXNnc3RyICLni4DmhYvkuI3oia8iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjMzCittc2dpZCAiSW52YWxpZCBob3N0IG5hbWUiCittc2dzdHIgIueEoeaViOeahOS4u+apn+WQjeeosSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzQKK21zZ2lkICJJbnZhbGlkIGRvbWFpbiBuYW1lIgorbXNnc3RyICLnhKHmlYjnmoTntrLln5/lkI3nqLEiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM1Cittc2dpZCAiTm8gc3VpdGFibGUgbmV0d29yayBwcm90b2NvbCBhdmFpbGFibGUiCittc2dzdHIgIuaykuacieWQiOmBqeeahOe2sui3r+WNlOWumuWPr+eUqCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6MzYKK21zZ2lkICJJbnZhbGlkIEROUyBUVEwiCittc2dzdHIgIueEoeaViOeahCBETlMgVFRMIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozNworbXNnaWQgIlJlc291cmNlIHJlY29yZCBrZXkgaXMgcGF0dGVybiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzozOAorbXNnaWQgIkxvY2FsIG5hbWUgY29sbGlzaW9uIgorbXNnc3RyICLmnKzmqZ/lkI3nqLHooZ3nqoEiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjM5Cittc2dpZCAiSW52YWxpZCByZWNvcmQiCittc2dzdHIgIueEoeaViOeahOe0gOmMhCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDEKK21zZ2lkICJJbnZhbGlkIHNlcnZpY2UgbmFtZSIKK21zZ3N0ciAi54Sh5pWI55qE5pyN5YuZ5ZCN56ixIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0MgorbXNnaWQgIkludmFsaWQgc2VydmljZSB0eXBlIgorbXNnc3RyICLnhKHmlYjnmoTmnI3li5npoZ7lnosiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQzCittc2dpZCAiSW52YWxpZCBwb3J0IG51bWJlciIKK21zZ3N0ciAi54Sh5pWI55qE6YCj5o6l5Z+g57eo6JmfIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NAorbXNnaWQgIkludmFsaWQgcmVjb3JkIGtleSIKK21zZ3N0ciAi54Sh5pWI55qE57SA6YyE6YeR6ZGwIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NQorbXNnaWQgIkludmFsaWQgYWRkcmVzcyIKK21zZ3N0ciAi54Sh5pWI55qE5L2N5Z2AIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NgorbXNnaWQgIlRpbWVvdXQgcmVhY2hlZCIKK21zZ3N0ciAi5bey6YGU6YC+5pmC6ZmQ5Yi2IgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo0NworbXNnaWQgIlRvbyBtYW55IGNsaWVudHMiCittc2dzdHIgIuWkquWkmueUqOaItuerryIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NDgKK21zZ2lkICJUb28gbWFueSBvYmplY3RzIgorbXNnc3RyICLpgY7lpJrnianku7YiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjQ5Cittc2dpZCAiVG9vIG1hbnkgZW50cmllcyIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1MAorbXNnaWQgIk9TIEVycm9yIgorbXNnc3RyICJPUyDpjK/oqqQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjUyCittc2dpZCAiQWNjZXNzIGRlbmllZCIKK21zZ3N0ciAi5ouS57WV5a2Y5Y+WIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1MworbXNnaWQgIkludmFsaWQgb3BlcmF0aW9uIgorbXNnc3RyICLnhKHmlYjnmoTmk43kvZwiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU0Cittc2dpZCAiQW4gdW5leHBlY3RlZCBELUJ1cyBlcnJvciBvY2N1cmVkIgorbXNnc3RyICLpga3pgYfliLDmnKrpoJDmnJ/nmoQgRC1CdXMg6Yyv6KqkIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1NQorbXNnaWQgIkRhZW1vbiBjb25uZWN0aW9uIGZhaWxlZCIKK21zZ3N0ciAi5bmV5b6M56iL5byP6YCj57ea5aSx5pWXIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo1NgorbXNnaWQgIk1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIuiomOaGtumrlOW3suiAl+eboSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NTcKK21zZ2lkICJUaGUgb2JqZWN0IHBhc3NlZCBpbiB3YXMgbm90IHZhbGlkIgorbXNnc3RyICLlgrPlhaXnmoTnianku7bnhKHmlYgiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU4Cittc2dpZCAiRGFlbW9uIG5vdCBydW5uaW5nIgorbXNnc3RyICLluZXlvoznqIvlvI/mspLmnInlnKjln7fooYzkuK0iCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjU5Cittc2dpZCAiSW52YWxpZCBpbnRlcmZhY2UgaW5kZXgiCittc2dzdHIgIueEoeaViOeahOS7i+mdoue0ouW8lSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjAKK21zZ2lkICJJbnZhbGlkIHByb3RvY29sIHNwZWNpZmljYXRpb24iCittc2dzdHIgIueEoeaViOeahOWNlOWumuimj+agvCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjEKK21zZ2lkICJJbnZhbGlkIGZsYWdzIgorbXNnc3RyICLnhKHmlYjnmoTml5fmqJkiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjYzCittc2dpZCAiTm90IGZvdW5kIgorbXNnc3RyICLmib7kuI3liLAiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY0Cittc2dpZCAiSW52YWxpZCBjb25maWd1cmF0aW9uIgorbXNnc3RyICLnhKHmlYjnmoTntYTmhYsiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY1Cittc2dpZCAiVmVyc2lvbiBtaXNtYXRjaCIKK21zZ3N0ciAi54mI5pys5LiN56ymIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo2NgorbXNnaWQgIkludmFsaWQgc2VydmljZSBzdWJ0eXBlIgorbXNnc3RyICLnhKHmlYjnmoTmnI3li5nlrZDpoZ7lnosiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY3Cittc2dpZCAiSW52YWxpZCBwYWNrZXQiCittc2dzdHIgIueEoeaViOeahOWwgeWMhSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NjgKK21zZ2lkICJJbnZhbGlkIEROUyByZXR1cm4gY29kZSIKK21zZ3N0ciAi54Sh5pWI55qEIEROUyDlm57lgrPnorwiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjY5Cittc2dpZCAiRE5TIGZhaWx1cmU6IEZPUk1FUlIiCittc2dzdHIgIkROUyDlpLHmlZfvvJpGT1JNRVJSIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3MAorbXNnaWQgIkROUyBmYWlsdXJlOiBTRVJWRkFJTCIKK21zZ3N0ciAiRE5TIOWkseaVl++8mlNFUlZGQUlMIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3MQorbXNnaWQgIkROUyBmYWlsdXJlOiBOWERPTUFJTiIKK21zZ3N0ciAiRE5TIOWkseaVl++8mk5YRE9NQUlOIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3MgorbXNnaWQgIkROUyBmYWlsdXJlOiBOT1RJTVAiCittc2dzdHIgIkROUyDlpLHmlZfvvJpOT1RJTVAiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc0Cittc2dpZCAiRE5TIGZhaWx1cmU6IFJFRlVTRUQiCittc2dzdHIgIkROUyDlpLHmlZfvvJpSRUZVU0VEIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3NQorbXNnaWQgIkROUyBmYWlsdXJlOiBZWERPTUFJTiIKK21zZ3N0ciAiRE5TIOWkseaVl++8mllYRE9NQUlOIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3NgorbXNnaWQgIkROUyBmYWlsdXJlOiBZWFJSU0VUIgorbXNnc3RyICJETlMg5aSx5pWX77yaWVhSUlNFVCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6NzcKK21zZ2lkICJETlMgZmFpbHVyZTogTlhSUlNFVCIKK21zZ3N0ciAiRE5TIOWkseaVl++8mk5YUlJTRVQiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjc4Cittc2dpZCAiRE5TIGZhaWx1cmU6IE5PVEFVVEgiCittc2dzdHIgIkROUyDlpLHmlZfvvJpOT1RBVVRIIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo3OQorbXNnaWQgIkROUyBmYWlsdXJlOiBOT1RaT05FIgorbXNnc3RyICJETlMg5aSx5pWX77yaTk9UWk9ORSIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODAKK21zZ2lkICJJbnZhbGlkIFJEQVRBIgorbXNnc3RyICLnhKHmlYjnmoQgUkRBVEEiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjgxCittc2dpZCAiSW52YWxpZCBETlMgdHlwZSIKK21zZ3N0ciAi54Sh5pWI55qEIEROUyDpoZ7lnosiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjgyCittc2dpZCAiSW52YWxpZCBETlMgY2xhc3MiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODMKK21zZ2lkICJOb3Qgc3VwcG9ydGVkIgorbXNnc3RyICLmnKrmlK/mj7QiCisKKyM6IC4uL2F2YWhpLWNvbW1vbi9lcnJvci5jOjg1Cittc2dpZCAiTm90IHBlcm1pdHRlZCIKK21zZ3N0ciAi5pyq6Kix5Y+vIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4NgorbXNnaWQgIkludmFsaWQgYXJndW1lbnQiCittc2dzdHIgIueEoeaViOeahOW8leaVuCIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6ODcKK21zZ2lkICJJcyBlbXB0eSIKK21zZ3N0ciAi5piv56m655qEIgorCisjOiAuLi9hdmFoaS1jb21tb24vZXJyb3IuYzo4OAorbXNnaWQgIlRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uIGlzIGludmFsaWQgYmVjYXVzZSByZWR1bmRhbnQiCittc2dzdHIgIuiri+axgueahOaTjeS9nOeEoeaViO+8jOWboOeCuumHjeikhyIKKworIzogLi4vYXZhaGktY29tbW9uL2Vycm9yLmM6OTQKK21zZ2lkICJJbnZhbGlkIEVycm9yIENvZGUiCittc2dzdHIgIueEoeaViOeahOmMr+iqpOS7o+eivCIKKworIzogLi4vYXZhaGktZGlzY292ZXItc3RhbmRhbG9uZS9hdmFoaS1kaXNjb3Zlci51aS5oOjEKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weTo3NgorbXNnaWQgIjxpPk5vIHNlcnZpY2UgY3VycmVudGx5IHNlbGVjdGVkLjwvaT4iCittc2dzdHIgIjxpPuebruWJjeacqumBuOWPluacjeWLmeOAgjwvaT4iCisKKyM6IC4uL2F2YWhpLWRpc2NvdmVyLXN0YW5kYWxvbmUvYXZhaGktZGlzY292ZXIudWkuaDoyCittc2dpZCAiQXZhaGkgRGlzY292ZXJ5IgorbXNnc3RyICJBdmFoaSDmjqLntKIiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5kZXNrdG9wLmluLmluLmg6MQorbXNnaWQgIkF2YWhpIFplcm9jb25mIEJyb3dzZXIiCittc2dzdHIgIkF2YWhpIFplcm9jb25mIOeAj+imveeoi+W8jyIKKworIzogLi4vYXZhaGktcHl0aG9uL2F2YWhpLWRpc2NvdmVyL2F2YWhpLWRpc2NvdmVyLmRlc2t0b3AuaW4uaW4uaDoyCittc2dpZCAiQnJvd3NlIGZvciBaZXJvY29uZiBzZXJ2aWNlcyBhdmFpbGFibGUgb24geW91ciBuZXR3b3JrIgorbXNnc3RyICLlnKjmgqjnmoTntrLot6/kuIrngI/opr3lj6/nlKjnmoQgWmVyb2NvbmYg5pyN5YuZIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI0Cittc2dpZCAiVFhUIgorbXNnc3RyICJUWFQiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMjYKK21zZ2lkICJUWFQgRGF0YToiCittc2dzdHIgIlRYVCDos4fmlpnvvJoiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMjYKK21zZ2lkICJlbXB0eSIKK21zZ3N0ciAi56m655qEIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI4Cittc2dpZCAiU2VydmljZSBUeXBlOiIKK21zZ3N0ciAi5pyN5YuZ6aGe5Z6L77yaIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjI5Cittc2dpZCAiU2VydmljZSBOYW1lOiIKK21zZ3N0ciAi5pyN5YuZ5ZCN56ix77yaIgorCisjOiAuLi9hdmFoaS1weXRob24vYXZhaGktZGlzY292ZXIvYXZhaGktZGlzY292ZXIucHk6MjMwCittc2dpZCAiRG9tYWluIE5hbWU6IgorbXNnc3RyICLntrLln5/lkI3nqLHvvJoiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMzEKK21zZ2lkICJJbnRlcmZhY2U6IgorbXNnc3RyICLku4vpnaLvvJoiCisKKyM6IC4uL2F2YWhpLXB5dGhvbi9hdmFoaS1kaXNjb3Zlci9hdmFoaS1kaXNjb3Zlci5weToyMzIKK21zZ2lkICJBZGRyZXNzOiIKK21zZ3N0ciAi5L2N5Z2A77yaIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjE4NQorbXNnaWQgIkJyb3dzZSBTZXJ2aWNlIFR5cGVzIgorbXNnc3RyICLngI/opr3mnI3li5npoZ7lnosiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTg1Cittc2dpZCAiQSBOVUxMIHRlcm1pbmF0ZWQgbGlzdCBvZiBzZXJ2aWNlIHR5cGVzIHRvIGJyb3dzZSBmb3IiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxOTAKK21zZ2lkICJEb21haW4iCittc2dzdHIgIue2suWfnyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxOTAKK21zZ2lkICJUaGUgZG9tYWluIHRvIGJyb3dzZSBpbiwgb3IgTlVMTCBmb3IgdGhlIGRlZmF1bHQgZG9tYWluIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTk2Cittc2dpZCAiU2VydmljZSBUeXBlIgorbXNnc3RyICLmnI3li5npoZ7lnosiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTk2Cittc2dpZCAiVGhlIHNlcnZpY2UgdHlwZSBvZiB0aGUgc2VsZWN0ZWQgc2VydmljZSIKK21zZ3N0ciAi5omA6YG45pyN5YuZ55qE5pyN5YuZ6aGe5Z6LIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIwMiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjEwMjMKK21zZ2lkICJTZXJ2aWNlIE5hbWUiCittc2dzdHIgIuacjeWLmeWQjeeosSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMDIKK21zZ2lkICJUaGUgc2VydmljZSBuYW1lIG9mIHRoZSBzZWxlY3RlZCBzZXJ2aWNlIgorbXNnc3RyICLmiYDpgbjmnI3li5nnmoTmnI3li5nlkI3nqLEiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjA4Cittc2dpZCAiQWRkcmVzcyIKK21zZ3N0ciAi5L2N5Z2AIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIwOAorbXNnaWQgIlRoZSBhZGRyZXNzIG9mIHRoZSByZXNvbHZlZCBzZXJ2aWNlIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjEzCittc2dpZCAiUG9ydCIKK21zZ3N0ciAi6YCj5o6l5Z+gIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjIxMworbXNnaWQgIlRoZSBJUCBwb3J0IG51bWJlciBvZiB0aGUgcmVzb2x2ZWQgc2VydmljZSIKK21zZ3N0ciAi6Kej5p6Q5pyN5YuZ55qEIElQIOmAo+aOpeWfoOiZn+eivCIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMTkKK21zZ2lkICJIb3N0IE5hbWUiCittc2dzdHIgIuS4u+apn+WQjeeosSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMTkKK21zZ2lkICJUaGUgaG9zdCBuYW1lIG9mIHRoZSByZXNvbHZlZCBzZXJ2aWNlIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjI1Cittc2dpZCAiVFhUIERhdGEiCittc2dzdHIgIlRYVCDos4fmlpkiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjI1Cittc2dpZCAiVGhlIFRYVCBkYXRhIG9mIHRoZSByZXNvbHZlZCBzZXJ2aWNlIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjMwCittc2dpZCAiUmVzb2x2ZSBTZXJ2aWNlIgorbXNnc3RyICLop6PmnpDmnI3li5kiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjMwCittc2dpZCAiUmVzb2x2ZSB0aGUgc2VsZWN0ZWQgc2VydmljZSBhdXRvbWF0aWNhbGx5IGJlZm9yZSByZXR1cm5pbmciCittc2dzdHIgIuWcqOWbnuWCs+S5i+WJjeiHquWLleino+aekOaJgOmBuOeahOacjeWLmSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyMzYKK21zZ2lkICJSZXNvbHZlIFNlcnZpY2UgSG9zdCBOYW1lIgorbXNnc3RyICLop6PmnpDmnI3li5nkuLvmqZ/lkI3nqLEiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MjM2Cittc2dpZCAiIgorIlJlc29sdmUgdGhlIGhvc3QgbmFtZSBvZiB0aGUgc2VsZWN0ZWQgc2VydmljZSBhdXRvbWF0aWNhbGx5IGJlZm9yZSByZXR1cm5pbmciCittc2dzdHIgIuWcqOWbnuWCs+S5i+WJjeiHquWLleino+aekOaJgOmBuOacjeWLmeeahOS4u+apn+WQjeeosSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoyNDIKK21zZ2lkICJBZGRyZXNzIGZhbWlseSIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjI0MgorbXNnaWQgIlRoZSBhZGRyZXNzIGZhbWlseSBmb3IgaG9zdCBuYW1lIHJlc29sdXRpb24iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzozMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaGkgY2xpZW50IGZhaWx1cmU6ICVzIgorbXNnc3RyICJBdmFoaSDnlKjmiLbnq6/lpLHmlZfvvJolcyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzozODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaGkgcmVzb2x2ZXIgZmFpbHVyZTogJXMiCittc2dzdHIgIkF2YWhpIOino+aekOWkseaVl++8miVzIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjUxOAorIywgYy1mb3JtYXQKK21zZ2lkICJCcm93c2luZyBmb3Igc2VydmljZSB0eXBlICVzIGluIGRvbWFpbiAlcyBmYWlsZWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NTE5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjE2OAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTY5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjE3OAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTc5Cittc2dpZCAibi9hIgorbXNnc3RyICLnhKHms5Xkvb/nlKgiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWhpIGRvbWFpbiBicm93c2VyIGZhaWx1cmU6ICVzIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6Njg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWFkIEF2YWhpIGRvbWFpbjogJXMiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo3MDYKK21zZ2lkICJCcm93c2Ugc2VydmljZSB0eXBlIGxpc3QgaXMgZW1wdHkhIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjb25uZWN0IHRvIEF2YWhpIHNlcnZlcjogJXMiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo3MzUKK21zZ2lkICJCcm93c2luZyBmb3Igc2VydmljZXMgb24gPGI+bG9jYWwgbmV0d29yazwvYj46IgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6NzM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyb3dzaW5nIGZvciBzZXJ2aWNlcyBpbiBkb21haW4gPGI+JXM8L2I+OiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjc3MworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGJyb3dzZXIgZm9yICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjkwMworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIHJlc29sdmVyIGZvciAlcyBvZiB0eXBlICVzIGluIGRvbWFpbiAlczogJXMiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo5NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBkb21haW4gYnJvd3NlcjogJXMiCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzo5ODkKK21zZ2lkICJDaGFuZ2UgZG9tYWluIgorbXNnc3RyICLorormm7TntrLln58iCisKKyM6IC4uL2F2YWhpLXVpL2F2YWhpLXVpLmM6MTAzMSAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExNjIKK21zZ2lkICJCcm93c2luZy4uLiIKK21zZ3N0ciAi5q2j5Zyo54CP6Ka9Li4uIgorCisjOiAuLi9hdmFoaS11aS9hdmFoaS11aS5jOjExMjAKK21zZ2lkICJJbml0aWFsaXppbmcuLi4iCittc2dzdHIgIuato+WcqOWIneWni+WMli4uLiIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTQ0Cittc2dpZCAiTG9jYXRpb24iCittc2dzdHIgIuS9jee9riIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTQ5IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU1MworbXNnaWQgIk5hbWUiCittc2dzdHIgIuWQjeeosSIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTU0IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjU1MworbXNnaWQgIlR5cGUiCittc2dzdHIgIumhnuWeiyIKKworIzogLi4vYXZhaGktdWkvYXZhaGktdWkuYzoxMTY2Cittc2dpZCAiX0RvbWFpbi4uLiIKK21zZ3N0ciAi57ay5Z+fKF9EKS4uLiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyBbb3B0aW9uc11cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLXMgLS1zc2ggICAgICAgICAgICAgQnJvd3NlIFNTSCBzZXJ2ZXJzXG4iCisiICAgIC12IC0tdm5jICAgICAgICAgICAgIEJyb3dzZSBWTkMgc2VydmVyc1xuIgorIiAgICAtUyAtLXNoZWxsICAgICAgICAgICBCcm93c2UgYm90aCBTU0ggYW5kIFZOQ1xuIgorIiAgICAtZCAtLWRvbWFpbj1ET01BSU4gICBUaGUgZG9tYWluIHRvIGJyb3dzZSBpblxuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxMDEgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6Nzc1CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvbyBtYW55IGFyZ3VtZW50c1xuIgorbXNnc3RyICLlpKrlpJrlvJXmlbhcbiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjE0OQorbXNnaWQgIkNob29zZSBTaGVsbCBTZXJ2ZXIiCittc2dzdHIgIumBuOaThyBTaGVsbCDkvLrmnI3lmagiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNTEKK21zZ2lkICJEZXNrdG9wIgorbXNnc3RyICLmoYzpnaIiCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guYzoxNTIKK21zZ2lkICJUZXJtaW5hbCIKK21zZ3N0ciAi57WC56uv5qmfIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTU2Cittc2dpZCAiQ2hvb3NlIFZOQyBzZXJ2ZXIiCittc2dzdHIgIumBuOaThyBWTkMg5Ly65pyN5ZmoIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTYxCittc2dpZCAiQ2hvb3NlIFNTSCBzZXJ2ZXIiCittc2dzdHIgIumBuOaThyBTU0gg5Ly65pyN5ZmoIgorCisjOiAuLi9hdmFoaS11aS9ic3NoLmM6MTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbm5lY3RpbmcgdG8gJyVzJyAuLi5cbiIKK21zZ3N0ciAi5q2j5Zyo6YCj5o6l5Yiw44CMJXPjgI0uLi5cbiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjI0MAorIywgYy1mb3JtYXQKK21zZ2lkICJleGVjbHAoKSBmYWlsZWQ6ICVzXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdWkvYnNzaC5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5jZWxlZC5cbiIKK21zZ3N0ciAi5bey5Y+W5raI44CCXG4iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guZGVza3RvcC5pbi5pbi5oOjEKK21zZ2lkICJBdmFoaSBTU0ggU2VydmVyIEJyb3dzZXIiCittc2dzdHIgIkF2YWhpIFNTSCDkvLrmnI3lmajngI/opr3nqIvlvI8iCisKKyM6IC4uL2F2YWhpLXVpL2Jzc2guZGVza3RvcC5pbi5pbi5oOjIKK21zZ2lkICJCcm93c2UgZm9yIFplcm9jb25mLWVuYWJsZWQgU1NIIFNlcnZlcnMiCittc2dzdHIgIueAj+imveWVn+eUqCBaZXJvY29uZiDnmoQgU1NIIOS8uuacjeWZqCIKKworIzogLi4vYXZhaGktdWkvYnZuYy5kZXNrdG9wLmluLmluLmg6MQorbXNnaWQgIkF2YWhpIFZOQyBTZXJ2ZXIgQnJvd3NlciIKK21zZ3N0ciAiQXZhaGkgVk5DIOS8uuacjeWZqOeAj+imveeoi+W8jyIKKworIzogLi4vYXZhaGktdWkvYnZuYy5kZXNrdG9wLmluLmluLmg6MgorbXNnaWQgIkJyb3dzZSBmb3IgWmVyb2NvbmYtZW5hYmxlZCBWTkMgU2VydmVycyIKK21zZ3N0ciAi54CP6Ka95ZWf55SoIFplcm9jb25mIOeahCBWTkMg5Ly65pyN5ZmoIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoxMDcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIjogQWxsIGZvciBub3dcbiIKK21zZ3N0ciAiOiDnj77lnKjmmK/lhajpg6hcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6MTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIjogQ2FjaGUgZXhoYXVzdGVkXG4iCittc2dzdHIgIjog5b+r5Y+W5bey6ICX55uhXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjIzOSAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzoyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgc2VydmljZSAnJXMnIG9mIHR5cGUgJyVzJyBpbiBkb21haW4gJyVzJzogJXNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzozNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VydmljZV9icm93c2VyIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzozNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXZhaGlfc2VydmljZV9icm93c2VyX25ldygpIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VydmljZV90eXBlX2Jyb3dzZXIgZmFpbGVkOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjQ0NAorIywgYy1mb3JtYXQKK21zZ2lkICJhdmFoaV9zZXJ2aWNlX3R5cGVfYnJvd3Nlcl9uZXcoKSBmYWlsZWQ6ICVzXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTE5CisjLCBjLWZvcm1hdAorbXNnaWQgImF2YWhpX2RvbWFpbl9icm93c2VyX25ldygpIGZhaWxlZDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1MzUgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjM5NAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI4MCAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBxdWVyeSB2ZXJzaW9uIHN0cmluZzogJXNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NDAgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjM5OQorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI4NSAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTczCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBxdWVyeSBob3N0IG5hbWU6ICVzXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTQ0IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo0MDMKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyODkgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE3NworIywgYy1mb3JtYXQKK21zZ2lkICJTZXJ2ZXIgdmVyc2lvbjogJXM7IEhvc3QgbmFtZTogJXNcbiIKK21zZ3N0ciAiIgorCisjLiBUcmFuc2xhdG9yczogVGhpcyBpcyBhIGNvbHVtbiBoZWFkaW5nIHdpdGggYWJicmV2aWF0aW9ucyBmb3IKKyMuICogICBFdmVudCAoKy8tKSwgTmV0d29yayBJbnRlcmZhY2UsIFByb3RvY29sIChJUHY0L3Y2KSwgRG9tYWluCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRSBJZmNlIFByb3QgRG9tYWluXG4iCittc2dzdHIgIiIKKworIy4gVHJhbnNsYXRvcnM6IFRoaXMgaXMgYSBjb2x1bW4gaGVhZGluZyB3aXRoIGFiYnJldmlhdGlvbnMgZm9yCisjLiAqICAgRXZlbnQgKCsvLSksIE5ldHdvcmsgSW50ZXJmYWNlLCBQcm90b2NvbCAoSVB2NC92NiksIERvbWFpbgorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkUgSWZjZSBQcm90ICUtKnMgJS0yMHMgRG9tYWluXG4iCittc2dzdHIgIiIKKworIy4gV2UgaGF2ZSBiZWVuIGRpc2Nvbm5lY3RlZCwgc28gbGV0IHJlY29ubmVjdAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NTg1IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGlzY29ubmVjdGVkLCByZWNvbm5lY3RpbmcgLi4uXG4iCittc2dzdHIgIuW3suaWt+e3mu+8jOato+WcqOmHjeaWsOmAo+aOpS4uLlxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo1OTkgLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6ODI5CisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MTcwIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozODYKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyNzIgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE2MAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGNsaWVudCBvYmplY3Q6ICVzXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NjA0IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxNzUKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoxNDMgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNsaWVudCBmYWlsdXJlLCBleGl0aW5nOiAlc1xuIgorbXNnc3RyICLnlKjmiLbnq6/lpLHmlZfvvIzmraPlnKjpgIDlh7rvvJolc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo2MjMgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjIwNgorIywgYy1mb3JtYXQKK21zZ2lkICJXYWl0aW5nIGZvciBkYWVtb24gLi4uXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NjQ3Cittc2dpZCAiIgorIiAgICAtaCAtLWhlbHAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuIgorIiAgICAtViAtLXZlcnNpb24gICAgICAgICBTaG93IHZlcnNpb25cbiIKKyIgICAgLUQgLS1icm93c2UtZG9tYWlucyAgQnJvd3NlIGZvciBicm93c2luZyBkb21haW5zIGluc3RlYWQgb2Ygc2VydmljZXNcbiIKKyIgICAgLWEgLS1hbGwgICAgICAgICAgICAgU2hvdyBhbGwgc2VydmljZXMsIHJlZ2FyZGxlc3Mgb2YgdGhlIHR5cGVcbiIKKyIgICAgLWQgLS1kb21haW49RE9NQUlOICAgVGhlIGRvbWFpbiB0byBicm93c2UgaW5cbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgRW5hYmxlIHZlcmJvc2UgbW9kZVxuIgorIiAgICAtdCAtLXRlcm1pbmF0ZSAgICAgICBUZXJtaW5hdGUgYWZ0ZXIgZHVtcGluZyBhIG1vcmUgb3IgbGVzcyBjb21wbGV0ZSAiCisibGlzdFxuIgorIiAgICAtYyAtLWNhY2hlICAgICAgICAgICBUZXJtaW5hdGUgYWZ0ZXIgZHVtcGluZyBhbGwgZW50cmllcyBmcm9tIHRoZSBjYWNoZVxuIgorIiAgICAtbCAtLWlnbm9yZS1sb2NhbCAgICBJZ25vcmUgbG9jYWwgc2VydmljZXNcbiIKKyIgICAgLXIgLS1yZXNvbHZlICAgICAgICAgUmVzb2x2ZSBzZXJ2aWNlcyBmb3VuZFxuIgorIiAgICAtZiAtLW5vLWZhaWwgICAgICAgICBEb24ndCBmYWlsIGlmIHRoZSBkYWVtb24gaXMgbm90IGF2YWlsYWJsZVxuIgorIiAgICAtcCAtLXBhcnNhYmxlICAgICAgICBPdXRwdXQgaW4gcGFyc2FibGUgZm9ybWF0XG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktYnJvd3NlLmM6NjYwCittc2dpZCAiIgorIiAgICAtayAtLW5vLWRiLWxvb2t1cCAgICBEb24ndCBsb29rdXAgc2VydmljZSB0eXBlc1xuIgorIiAgICAtYiAtLWR1bXAtZGIgICAgICAgICBEdW1wIHNlcnZpY2UgdHlwZSBkYXRhYmFzZVxuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLWJyb3dzZS5jOjc2NiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvbyBmZXcgYXJndW1lbnRzXG4iCittc2dzdHIgIumBjuWwkeW8leaVuFxuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1icm93c2UuYzo4MjEgLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjM3OAorIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjI2NCAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgc2ltcGxlIHBvbGwgb2JqZWN0LlxuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzo3NgorIywgYy1mb3JtYXQKK21zZ2lkICJFc3RhYmxpc2hlZCB1bmRlciBuYW1lICclcydcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyOiAlc1xuIgorbXNnc3RyICLoqLvlhorlpLHmlZfvvJolc1xuIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTmFtZSBjb2xsaXNpb24sIHBpY2tpbmcgbmV3IG5hbWUgJyVzJy5cbiIKK21zZ3N0ciAi5ZCN56ix6KGd56qB77yM5o+A6YG45paw5ZCN56ixICclcyfjgIJcbiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGVudHJ5IGdyb3VwOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBhZGRyZXNzOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBzZXJ2aWNlOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoxNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBzdWJ0eXBlICclcyc6ICVzXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcHVibGlzaC5jOjE5MQorIywgYy1mb3JtYXQKK21zZ2lkICJIb3N0IG5hbWUgY29uZmxpY3RcbiIKK21zZ3N0ciAi5Li75qmf5ZCN56ix6KGd56qBXG4iCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzoyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFtvcHRpb25zXSAlcyA8bmFtZT4gPHR5cGU+IDxwb3J0PiBbPHR4dCAuLi4+XVxuIgorIiVzIFtvcHRpb25zXSAlcyA8aG9zdC1uYW1lPiA8YWRkcmVzcz5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgU2hvdyB2ZXJzaW9uXG4iCisiICAgIC1zIC0tc2VydmljZSAgICAgICAgIFB1Ymxpc2ggc2VydmljZVxuIgorIiAgICAtYSAtLWFkZHJlc3MgICAgICAgICBQdWJsaXNoIGFkZHJlc3NcbiIKKyIgICAgLXYgLS12ZXJib3NlICAgICAgICAgRW5hYmxlIHZlcmJvc2UgbW9kZVxuIgorIiAgICAtZCAtLWRvbWFpbj1ET01BSU4gICBEb21haW4gdG8gcHVibGlzaCBzZXJ2aWNlIGluXG4iCisiICAgIC1IIC0taG9zdD1ET01BSU4gICAgIEhvc3Qgd2hlcmUgc2VydmljZSByZXNpZGVzXG4iCisiICAgICAgIC0tc3VidHlwZT1TVUJUWVBFIEFuIGFkZGl0aW9uYWwgc3VidHlwZSB0byByZWdpc3RlciB0aGlzIHNlcnZpY2UgIgorIndpdGhcbiIKKyIgICAgLVIgLS1uby1yZXZlcnNlICAgICAgRG8gbm90IHB1Ymxpc2ggcmV2ZXJzZSBlbnRyeSB3aXRoIGFkZHJlc3NcbiIKKyIgICAgLWYgLS1uby1mYWlsICAgICAgICAgRG9uJ3QgZmFpbCBpZiB0aGUgZGFlbW9uIGlzIG5vdCBhdmFpbGFibGVcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MzAzIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXB1Ymxpc2guYzozMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIG51bWJlciBvZiBhcmd1bWVudHNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBwb3J0IG51bWJlcjogJXNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1wdWJsaXNoLmM6MzYxIC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gY29tbWFuZCBzcGVjaWZpZWQuXG4iCittc2dzdHIgIiIKKworIzogLi4vYXZhaGktdXRpbHMvYXZhaGktcmVzb2x2ZS5jOjg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIGhvc3QgbmFtZSAnJXMnOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoxMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgYWRkcmVzcyAnJXMnOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoxNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFtvcHRpb25zXSAlcyA8aG9zdCBuYW1lIC4uLj5cbiIKKyIlcyBbb3B0aW9uc10gJXMgPGFkZHJlc3MgLi4uID5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgU2hvdyB2ZXJzaW9uXG4iCisiICAgIC1uIC0tbmFtZSAgICAgICAgICAgIFJlc29sdmUgaG9zdCBuYW1lXG4iCisiICAgIC1hIC0tYWRkcmVzcyAgICAgICAgIFJlc29sdmUgYWRkcmVzc1xuIgorIiAgICAtdiAtLXZlcmJvc2UgICAgICAgICBFbmFibGUgdmVyYm9zZSBtb2RlXG4iCisiICAgIC02ICAgICAgICAgICAgICAgICAgIExvb2t1cCBJUHY2IGFkZHJlc3NcbiIKKyIgICAgLTQgICAgICAgICAgICAgICAgICAgTG9va3VwIElQdjQgYWRkcmVzc1xuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXJlc29sdmUuYzoyOTkgLi4vYXZhaGktdXRpbHMvYXZhaGktc2V0LWhvc3QtbmFtZS5jOjE4MQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIGhvc3QgbmFtZSByZXNvbHZlcjogJXNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBhZGRyZXNzICclcydcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1yZXNvbHZlLmM6MzE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgYWRkcmVzcyByZXNvbHZlcjogJXNcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIFtvcHRpb25zXSA8bmV3IGhvc3QgbmFtZT5cbiIKKyJcbiIKKyIgICAgLWggLS1oZWxwICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbiIKKyIgICAgLVYgLS12ZXJzaW9uICAgICAgICAgU2hvdyB2ZXJzaW9uXG4iCisiICAgIC12IC0tdmVyYm9zZSAgICAgICAgIEVuYWJsZSB2ZXJib3NlIG1vZGVcbiIKK21zZ3N0ciAiIgorCisjOiAuLi9hdmFoaS11dGlscy9hdmFoaS1zZXQtaG9zdC1uYW1lLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cywgZXhwZWN0aW5nIGV4YWN0bHkgb25lLlxuIgorbXNnc3RyICIiCisKKyM6IC4uL2F2YWhpLXV0aWxzL2F2YWhpLXNldC1ob3N0LW5hbWUuYzoxOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSG9zdCBuYW1lIHN1Y2Nlc3NmdWxseSBjaGFuZ2VkIHRvICVzXG4iCittc2dzdHIgIuS4u+apn+WQjeeoseaIkOWKn+iuiuabtOeCuiAlc1xuIgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL3B5LWNvbXBpbGUgYi9hdmFoaS0wLjYuMzEvcHktY29tcGlsZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zZjlkMDViCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL3B5LWNvbXBpbGUKQEAgLTAsMCArMSwxNDYgQEAKKyMhL2Jpbi9zaAorIyBweS1jb21waWxlIC0gQ29tcGlsZSBhIFB5dGhvbiBwcm9ncmFtCisKK3NjcmlwdHZlcnNpb249MjAwOS0wNC0yOC4yMTsgIyBVVEMKKworIyBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKKyMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCisjIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCisjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworIyBUaGlzIGZpbGUgaXMgbWFpbnRhaW5lZCBpbiBBdXRvbWFrZSwgcGxlYXNlIHJlcG9ydAorIyBidWdzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4gb3Igc2VuZCBwYXRjaGVzIHRvCisjIDxhdXRvbWFrZS1wYXRjaGVzQGdudS5vcmc+LgorCitpZiBbIC16ICIkUFlUSE9OIiBdOyB0aGVuCisgIFBZVEhPTj1weXRob24KK2ZpCisKK2Jhc2VkaXI9CitkZXN0ZGlyPQorZmlsZXM9Cit3aGlsZSB0ZXN0ICQjIC1uZSAwOyBkbworICBjYXNlICIkMSIgaW4KKyAgICAtLWJhc2VkaXIpCisgICAgICBiYXNlZGlyPSQyCisgICAgICBpZiB0ZXN0IC16ICIkYmFzZWRpciI7IHRoZW4KKyAgICAgICAgZWNobyAiJDA6IE1pc3NpbmcgYXJndW1lbnQgdG8gLS1iYXNlZGlyLiIgMT4mMgorICAgICAgICBleGl0IDEKKyAgICAgIGZpCisgICAgICBzaGlmdAorICAgICAgOzsKKyAgICAtLWRlc3RkaXIpCisgICAgICBkZXN0ZGlyPSQyCisgICAgICBpZiB0ZXN0IC16ICIkZGVzdGRpciI7IHRoZW4KKyAgICAgICAgZWNobyAiJDA6IE1pc3NpbmcgYXJndW1lbnQgdG8gLS1kZXN0ZGlyLiIgMT4mMgorICAgICAgICBleGl0IDEKKyAgICAgIGZpCisgICAgICBzaGlmdAorICAgICAgOzsKKyAgICAtaHwtLWgqKQorICAgICAgY2F0IDw8XEVPRgorVXNhZ2U6IHB5LWNvbXBpbGUgWy0taGVscF0gWy0tdmVyc2lvbl0gWy0tYmFzZWRpciBESVJdIFstLWRlc3RkaXIgRElSXSBGSUxFUy4uLiIKKworQnl0ZSBjb21waWxlIHNvbWUgcHl0aG9uIHNjcmlwdHMgRklMRVMuICBVc2UgLS1kZXN0ZGlyIHRvIHNwZWNpZnkgYW55CitsZWFkaW5nIGRpcmVjdG9yeSBwYXRoIHRvIHRoZSBGSUxFUyB0aGF0IHlvdSBkb24ndCB3YW50IHRvIGluY2x1ZGUgaW4gdGhlCitieXRlIGNvbXBpbGVkIGZpbGUuICBTcGVjaWZ5IC0tYmFzZWRpciBmb3IgYW55IGFkZGl0aW9uYWwgcGF0aCBpbmZvcm1hdGlvbiB5b3UKK2RvIHdhbnQgdG8gYmUgc2hvd24gaW4gdGhlIGJ5dGUgY29tcGlsZWQgZmlsZS4KKworRXhhbXBsZToKKyAgcHktY29tcGlsZSAtLWRlc3RkaXIgL3RtcC9wa2ctcm9vdCAtLWJhc2VkaXIgL3Vzci9zaGFyZS90ZXN0IHRlc3QucHkgdGVzdDIucHkKKworUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPi4KK0VPRgorICAgICAgZXhpdCAkPworICAgICAgOzsKKyAgICAtdnwtLXYqKQorICAgICAgZWNobyAicHktY29tcGlsZSAkc2NyaXB0dmVyc2lvbiIKKyAgICAgIGV4aXQgJD8KKyAgICAgIDs7CisgICAgKikKKyAgICAgIGZpbGVzPSIkZmlsZXMgJDEiCisgICAgICA7OworICBlc2FjCisgIHNoaWZ0Citkb25lCisKK2lmIHRlc3QgLXogIiRmaWxlcyI7IHRoZW4KKyAgICBlY2hvICIkMDogTm8gZmlsZXMgZ2l2ZW4uICBUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgMT4mMgorICAgIGV4aXQgMQorZmkKKworIyBpZiBiYXNlZGlyIHdhcyBnaXZlbiwgdGhlbiBpdCBzaG91bGQgYmUgcHJlcGVuZGVkIHRvIGZpbGVuYW1lcyBiZWZvcmUKKyMgYnl0ZSBjb21waWxhdGlvbi4KK2lmIFsgLXogIiRiYXNlZGlyIiBdOyB0aGVuCisgICAgcGF0aHRyYW5zPSJwYXRoID0gZmlsZSIKK2Vsc2UKKyAgICBwYXRodHJhbnM9InBhdGggPSBvcy5wYXRoLmpvaW4oJyRiYXNlZGlyJywgZmlsZSkiCitmaQorCisjIGlmIGRlc3RkaXIgd2FzIGdpdmVuLCB0aGVuIGl0IG5lZWRzIHRvIGJlIHByZXBlbmRlZCB0byB0aGUgZmlsZW5hbWUgdG8KKyMgYnl0ZSBjb21waWxlIGJ1dCBub3QgZ28gaW50byB0aGUgY29tcGlsZWQgZmlsZS4KK2lmIFsgLXogIiRkZXN0ZGlyIiBdOyB0aGVuCisgICAgZmlsZXRyYW5zPSJmaWxlcGF0aCA9IHBhdGgiCitlbHNlCisgICAgZmlsZXRyYW5zPSJmaWxlcGF0aCA9IG9zLnBhdGgubm9ybXBhdGgoJyRkZXN0ZGlyJyArIG9zLnNlcCArIHBhdGgpIgorZmkKKworJFBZVEhPTiAtYyAiCitpbXBvcnQgc3lzLCBvcywgcHlfY29tcGlsZQorCitmaWxlcyA9ICcnJyRmaWxlcycnJworCitzeXMuc3Rkb3V0LndyaXRlKCdCeXRlLWNvbXBpbGluZyBweXRob24gbW9kdWxlcy4uLlxuJykKK2ZvciBmaWxlIGluIGZpbGVzLnNwbGl0KCk6CisgICAgJHBhdGh0cmFucworICAgICRmaWxldHJhbnMKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZmlsZXBhdGgpIG9yIG5vdCAobGVuKGZpbGVwYXRoKSA+PSAzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBmaWxlcGF0aFstMzpdID09ICcucHknKToKKwkgICAgY29udGludWUKKyAgICBzeXMuc3Rkb3V0LndyaXRlKGZpbGUpCisgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgcHlfY29tcGlsZS5jb21waWxlKGZpbGVwYXRoLCBmaWxlcGF0aCArICdjJywgcGF0aCkKK3N5cy5zdGRvdXQud3JpdGUoJ1xuJykiIHx8IGV4aXQgJD8KKworIyB0aGlzIHdpbGwgZmFpbCBmb3IgcHl0aG9uIDwgMS41LCBidXQgdGhhdCBkb2Vzbid0IG1hdHRlciAuLi4KKyRQWVRIT04gLU8gLWMgIgoraW1wb3J0IHN5cywgb3MsIHB5X2NvbXBpbGUKKworZmlsZXMgPSAnJyckZmlsZXMnJycKK3N5cy5zdGRvdXQud3JpdGUoJ0J5dGUtY29tcGlsaW5nIHB5dGhvbiBtb2R1bGVzIChvcHRpbWl6ZWQgdmVyc2lvbnMpIC4uLlxuJykKK2ZvciBmaWxlIGluIGZpbGVzLnNwbGl0KCk6CisgICAgJHBhdGh0cmFucworICAgICRmaWxldHJhbnMKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZmlsZXBhdGgpIG9yIG5vdCAobGVuKGZpbGVwYXRoKSA+PSAzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBmaWxlcGF0aFstMzpdID09ICcucHknKToKKwkgICAgY29udGludWUKKyAgICBzeXMuc3Rkb3V0LndyaXRlKGZpbGUpCisgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgcHlfY29tcGlsZS5jb21waWxlKGZpbGVwYXRoLCBmaWxlcGF0aCArICdvJywgcGF0aCkKK3N5cy5zdGRvdXQud3JpdGUoJ1xuJykiIDI+L2Rldi9udWxsIHx8IDoKKworIyBMb2NhbCBWYXJpYWJsZXM6CisjIG1vZGU6IHNoZWxsLXNjcmlwdAorIyBzaC1pbmRlbnRhdGlvbjogMgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJzY3JpcHR2ZXJzaW9uPSIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkLiUwMkgiCisjIHRpbWUtc3RhbXAtdGltZS16b25lOiAiVVRDIgorIyB0aW1lLXN0YW1wLWVuZDogIjsgIyBVVEMiCisjIEVuZDoKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9zZXJ2aWNlLXR5cGUtZGF0YWJhc2UvTWFrZWZpbGUuYW0gYi9hdmFoaS0wLjYuMzEvc2VydmljZS10eXBlLWRhdGFiYXNlL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0M2UyY2IKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvc2VydmljZS10eXBlLWRhdGFiYXNlL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsNjQgQEAKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisjCisjIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisjIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisjIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisjIFVTQS4KKworRVhUUkFfRElTVD1idWlsZC1kYi5pbiBzZXJ2aWNlLXR5cGVzCisKK3BrZ2xpYmRhdGFkaXI9JChsaWJkaXIpL2F2YWhpCisKK3BrZ2RhdGFfREFUQT1zZXJ2aWNlLXR5cGVzCitwa2dsaWJkYXRhX0RBVEE9CisKK2lmIEhBVkVfUFlUSE9OCitpZiBIQVZFX0dEQk0KKworbm9pbnN0X1NDUklQVFM9YnVpbGQtZGIKK3BrZ2xpYmRhdGFfREFUQSs9c2VydmljZS10eXBlcy5kYgorCitidWlsZC1kYjogYnVpbGQtZGIuaW4KKwkkKEFNX1ZfR0VOKXNlZCAtZSAncyxAUFlUSE9OXEAsJChQWVRIT04pLGcnIFwKKwkgICAgLWUgJ3MsQERCTVxALGdkYm0sZycgJDwgPiAkQCAmJiBcCisJY2htb2QgK3ggJEAKKworc2VydmljZS10eXBlcy5kYjogc2VydmljZS10eXBlcyBidWlsZC1kYgorCSQoQU1fVl9HRU4pJChQWVRIT04pIGJ1aWxkLWRiICQ8ICRALmNvbWluZyAmJiBcCisJbXYgJEAuY29taW5nICRACisKK0NMRUFORklMRVMgPSBzZXJ2aWNlLXR5cGVzLmRiIGJ1aWxkLWRiCisKK2VuZGlmCitpZiBIQVZFX0RCTQorCitub2luc3RfU0NSSVBUUz1idWlsZC1kYgorcGtnbGliZGF0YV9EQVRBKz1zZXJ2aWNlLXR5cGVzLmRiLnBhZyBzZXJ2aWNlLXR5cGVzLmRiLmRpcgorCitidWlsZC1kYjogYnVpbGQtZGIuaW4KKwkkKEFNX1ZfR0VOKXNlZCAtZSAncyxAUFlUSE9OXEAsJChQWVRIT04pLGcnIFwKKwkgICAgLWUgJ3MsQERCTVxALGRibSxnJyAkPCA+ICRAICYmIFwKKwljaG1vZCAreCAkQAorCitzZXJ2aWNlLXR5cGVzLmRiLnBhZzogc2VydmljZS10eXBlcy5kYgorCSQoQU1fVl9HRU4pbXYgc2VydmljZS10eXBlcy5kYi5jb21pbmcucGFnIHNlcnZpY2UtdHlwZXMuZGIucGFnCitzZXJ2aWNlLXR5cGVzLmRiLmRpcjogc2VydmljZS10eXBlcy5kYgorCSQoQU1fVl9HRU4pbXYgc2VydmljZS10eXBlcy5kYi5jb21pbmcuZGlyIHNlcnZpY2UtdHlwZXMuZGIuZGlyCitzZXJ2aWNlLXR5cGVzLmRiOiBzZXJ2aWNlLXR5cGVzIGJ1aWxkLWRiCisJJChBTV9WX0dFTikkKFBZVEhPTikgYnVpbGQtZGIgJDwgJEAuY29taW5nICYmIFwKKwlpZiB0ZXN0IC1mICIkQC5jb21pbmciOyB0aGVuIG12ICRALmNvbWluZyAkQDsgZmkKKworQ0xFQU5GSUxFUyA9IHNlcnZpY2UtdHlwZXMuZGIqIGJ1aWxkLWRiCisKK2VuZGlmCitlbmRpZgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL3NlcnZpY2UtdHlwZS1kYXRhYmFzZS9NYWtlZmlsZS5pbiBiL2F2YWhpLTAuNi4zMS9zZXJ2aWNlLXR5cGUtZGF0YWJhc2UvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhkMjhkZgotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS9zZXJ2aWNlLXR5cGUtZGF0YWJhc2UvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw2MjcgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEuMyBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKyMKKyMgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyMgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyMgVVNBLgorCisKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK0BIQVZFX0dEQk1fVFJVRUBASEFWRV9QWVRIT05fVFJVRUBhbV9fYXBwZW5kXzEgPSBzZXJ2aWNlLXR5cGVzLmRiCitASEFWRV9EQk1fVFJVRUBASEFWRV9QWVRIT05fVFJVRUBhbV9fYXBwZW5kXzIgPSBzZXJ2aWNlLXR5cGVzLmRiLnBhZyBzZXJ2aWNlLXR5cGVzLmRiLmRpcgorc3ViZGlyID0gc2VydmljZS10eXBlLWRhdGFiYXNlCitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9hY3hfcHRocmVhZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vZ2NjX3N0YWNrX3Byb3RlY3QubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2djY192aXNpYmlsaXR5Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9pbnRsdG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vaW50cm9zcGVjdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbGlidG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHRvcHRpb25zLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9sdHN1Z2FyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9sdHZlcnNpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2x0fm9ic29sZXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9ubHMubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vcHl0aG9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2FjaW5jbHVkZS5tNCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9kb3h5Z2VuLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CitTQ1JJUFRTID0gJChub2luc3RfU0NSSVBUUykKK0FNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQorYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAiICRAOworQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQorYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKK2FtX192X2F0XzAgPSBACitTT1VSQ0VTID0KK0RJU1RfU09VUkNFUyA9CithbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKK2FtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCisgICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKKyAgICAqKSBmPSQkcDs7IFwKKyAgZXNhYzsKK2FtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKK2FtX19pbnN0YWxsX21heCA9IDQwCithbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAorICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCithbV9fbm9iYXNlX3N0cmlwID0gXAorICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKK2FtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKKyAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKKyAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMvIC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKKyAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAorICAgIGlmICgrK25bJCQyXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIFwKKyAgICAgIHsgcHJpbnQgJCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKKyAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCithbV9fYmFzZV9saXN0ID0gXAorICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnIHwgXAorICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCithbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyID0geyBcCisgIHRlc3QgLXogIiQkZmlsZXMiIFwKKyAgICB8fCB7IHRlc3QgISAtZCAiJCRkaXIiICYmIHRlc3QgISAtZiAiJCRkaXIiICYmIHRlc3QgISAtciAiJCRkaXIiOyB9IFwKKyAgICB8fCB7IGVjaG8gIiAoIGNkICckJGRpcicgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCisgICAgICAgICAkKGFtX19jZCkgIiQkZGlyIiAmJiBybSAtZiAkJGZpbGVzOyB9OyBcCisgIH0KK2FtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChwa2dkYXRhZGlyKSIgXAorCSIkKERFU1RESVIpJChwa2dsaWJkYXRhZGlyKSIKK0RBVEEgPSAkKHBrZ2RhdGFfREFUQSkgJChwa2dsaWJkYXRhX0RBVEEpCitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQUxMX0xJTkdVQVMgPSBAQUxMX0xJTkdVQVNACitBTVRBUiA9IEBBTVRBUkAKK0FNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAorQVIgPSBAQVJACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVZBSElfQVVUT0lQRF9HUk9VUCA9IEBBVkFISV9BVVRPSVBEX0dST1VQQAorQVZBSElfQVVUT0lQRF9VU0VSID0gQEFWQUhJX0FVVE9JUERfVVNFUkAKK0FWQUhJX0dST1VQID0gQEFWQUhJX0dST1VQQAorQVZBSElfUFJJVl9BQ0NFU1NfR1JPVVAgPSBAQVZBSElfUFJJVl9BQ0NFU1NfR1JPVVBACitBVkFISV9VU0VSID0gQEFWQUhJX1VTRVJACitBV0sgPSBAQVdLQAorQ0FUQUxPR1MgPSBAQ0FUQUxPR1NACitDQVRPQkpFWFQgPSBAQ0FUT0JKRVhUQAorQ0MgPSBAQ0NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREFUQURJUk5BTUUgPSBAREFUQURJUk5BTUVACitEQlVTX0NGTEFHUyA9IEBEQlVTX0NGTEFHU0AKK0RCVVNfTElCUyA9IEBEQlVTX0xJQlNACitEQlVTX1NZU1RFTV9CVVNfREVGQVVMVF9BRERSRVNTID0gQERCVVNfU1lTVEVNX0JVU19ERUZBVUxUX0FERFJFU1NACitEQlVTX1NZU19ESVIgPSBAREJVU19TWVNfRElSQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RMTFRPT0wgPSBARExMVE9PTEAKK0RPWFlHRU5fUEFQRVJfU0laRSA9IEBET1hZR0VOX1BBUEVSX1NJWkVACitEU1lNVVRJTCA9IEBEU1lNVVRJTEAKK0RVTVBCSU4gPSBARFVNUEJJTkAKK0RYX0NPTkZJRyA9IEBEWF9DT05GSUdACitEWF9ET0NESVIgPSBARFhfRE9DRElSQAorRFhfRE9UID0gQERYX0RPVEAKK0RYX0RPWFlHRU4gPSBARFhfRE9YWUdFTkAKK0RYX0RWSVBTID0gQERYX0RWSVBTQAorRFhfRUdSRVAgPSBARFhfRUdSRVBACitEWF9FTlYgPSBARFhfRU5WQAorRFhfRkxBR19jaGkgPSBARFhfRkxBR19jaGlACitEWF9GTEFHX2NobSA9IEBEWF9GTEFHX2NobUAKK0RYX0ZMQUdfZG9jID0gQERYX0ZMQUdfZG9jQAorRFhfRkxBR19kb3QgPSBARFhfRkxBR19kb3RACitEWF9GTEFHX2h0bWwgPSBARFhfRkxBR19odG1sQAorRFhfRkxBR19tYW4gPSBARFhfRkxBR19tYW5ACitEWF9GTEFHX3BkZiA9IEBEWF9GTEFHX3BkZkAKK0RYX0ZMQUdfcHMgPSBARFhfRkxBR19wc0AKK0RYX0ZMQUdfcnRmID0gQERYX0ZMQUdfcnRmQAorRFhfRkxBR194bWwgPSBARFhfRkxBR194bWxACitEWF9ISEMgPSBARFhfSEhDQAorRFhfTEFURVggPSBARFhfTEFURVhACitEWF9NQUtFSU5ERVggPSBARFhfTUFLRUlOREVYQAorRFhfUERGTEFURVggPSBARFhfUERGTEFURVhACitEWF9QRVJMID0gQERYX1BFUkxACitEWF9QUk9KRUNUID0gQERYX1BST0pFQ1RACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VYRUVYVCA9IEBFWEVFWFRACitGR1JFUCA9IEBGR1JFUEAKK0dBQ1VUSUwgPSBAR0FDVVRJTEAKK0dFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACitHTElCMjBfQ0ZMQUdTID0gQEdMSUIyMF9DRkxBR1NACitHTElCMjBfTElCUyA9IEBHTElCMjBfTElCU0AKK0dNT0ZJTEVTID0gQEdNT0ZJTEVTQAorR01TR0ZNVCA9IEBHTVNHRk1UQAorR09CSkVDVF9DRkxBR1MgPSBAR09CSkVDVF9DRkxBR1NACitHT0JKRUNUX0xJQlMgPSBAR09CSkVDVF9MSUJTQAorR1JFUCA9IEBHUkVQQAorR1RLMjBfQ0ZMQUdTID0gQEdUSzIwX0NGTEFHU0AKK0dUSzIwX0xJQlMgPSBAR1RLMjBfTElCU0AKK0dUSzMwX0NGTEFHUyA9IEBHVEszMF9DRkxBR1NACitHVEszMF9MSUJTID0gQEdUSzMwX0xJQlNACitIT1dMX0NPTVBBVF9WRVJTSU9OID0gQEhPV0xfQ09NUEFUX1ZFUlNJT05ACitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0lOU1RPQkpFWFQgPSBASU5TVE9CSkVYVEAKK0lOVExMSUJTID0gQElOVExMSUJTQAorSU5UTFRPT0xfRVhUUkFDVCA9IEBJTlRMVE9PTF9FWFRSQUNUQAorSU5UTFRPT0xfTUVSR0UgPSBASU5UTFRPT0xfTUVSR0VACitJTlRMVE9PTF9QRVJMID0gQElOVExUT09MX1BFUkxACitJTlRMVE9PTF9VUERBVEUgPSBASU5UTFRPT0xfVVBEQVRFQAorSU5UUk9TUEVDVElPTl9DRkxBR1MgPSBASU5UUk9TUEVDVElPTl9DRkxBR1NACitJTlRST1NQRUNUSU9OX0NPTVBJTEVSID0gQElOVFJPU1BFQ1RJT05fQ09NUElMRVJACitJTlRST1NQRUNUSU9OX0dFTkVSQVRFID0gQElOVFJPU1BFQ1RJT05fR0VORVJBVEVACitJTlRST1NQRUNUSU9OX0dJUkRJUiA9IEBJTlRST1NQRUNUSU9OX0dJUkRJUkAKK0lOVFJPU1BFQ1RJT05fTElCUyA9IEBJTlRST1NQRUNUSU9OX0xJQlNACitJTlRST1NQRUNUSU9OX01BS0VGSUxFID0gQElOVFJPU1BFQ1RJT05fTUFLRUZJTEVACitJTlRST1NQRUNUSU9OX1NDQU5ORVIgPSBASU5UUk9TUEVDVElPTl9TQ0FOTkVSQAorSU5UUk9TUEVDVElPTl9UWVBFTElCRElSID0gQElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUkAKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCQVZBSElfQ0xJRU5UX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DTElFTlRfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfQ09NTU9OX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DT01NT05fVkVSU0lPTl9JTkZPQAorTElCQVZBSElfQ09NUEFUX0hPV0xfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NPTVBBVF9IT1dMX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPTVBBVF9MSUJETlNfU0RfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NPTVBBVF9MSUJETlNfU0RfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfQ09SRV9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ09SRV9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9HTElCX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9HTElCX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0dPQkpFQ1RfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0dPQkpFQ1RfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfUVQzX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9RVDNfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfUVQ0X1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9RVDRfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfVUlfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX1VJX1ZFUlNJT05fSU5GT0AKK0xJQkRBRU1PTl9DRkxBR1MgPSBATElCREFFTU9OX0NGTEFHU0AKK0xJQkRBRU1PTl9MSUJTID0gQExJQkRBRU1PTl9MSUJTQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAorTUNTID0gQE1DU0AKK01EQVNTRU1CTEVSID0gQE1EQVNTRU1CTEVSQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTUtJTlNUQUxMRElSUyA9IEBNS0lOU1RBTExESVJTQAorTU9DX1FUMyA9IEBNT0NfUVQzQAorTU9DX1FUNCA9IEBNT0NfUVQ0QAorTU9OT0RPQ0VSID0gQE1PTk9ET0NFUkAKK01PTk9ET0NfQ0ZMQUdTID0gQE1PTk9ET0NfQ0ZMQUdTQAorTU9OT0RPQ19ESVIgPSBATU9OT0RPQ19ESVJACitNT05PRE9DX0xJQlMgPSBATU9OT0RPQ19MSUJTQAorTVNHRk1UID0gQE1TR0ZNVEAKK01TR0ZNVF9PUFRTID0gQE1TR0ZNVF9PUFRTQAorTVNHTUVSR0UgPSBATVNHTUVSR0VACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitPQkpEVU1QID0gQE9CSkRVTVBACitPQkpFWFQgPSBAT0JKRVhUQAorT1RPT0wgPSBAT1RPT0xACitPVE9PTDY0ID0gQE9UT09MNjRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK1BLR19DT05GSUdfTElCRElSID0gQFBLR19DT05GSUdfTElCRElSQAorUEtHX0NPTkZJR19QQVRIID0gQFBLR19DT05GSUdfUEFUSEAKK1BPRklMRVMgPSBAUE9GSUxFU0AKK1BPU1VCID0gQFBPU1VCQAorUE9fSU5fREFUQURJUl9GQUxTRSA9IEBQT19JTl9EQVRBRElSX0ZBTFNFQAorUE9fSU5fREFUQURJUl9UUlVFID0gQFBPX0lOX0RBVEFESVJfVFJVRUAKK1BUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKK1BUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAorUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKK1BZVEhPTiA9IEBQWVRIT05ACitQWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAorUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKK1BZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKK1BZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAorUVQzX0NGTEFHUyA9IEBRVDNfQ0ZMQUdTQAorUVQzX0xJQlMgPSBAUVQzX0xJQlNACitRVDRfQ0ZMQUdTID0gQFFUNF9DRkxBR1NACitRVDRfTElCUyA9IEBRVDRfTElCU0AKK1JBTkxJQiA9IEBSQU5MSUJACitTRUQgPSBAU0VEQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NUT1cgPSBAU1RPV0AKK1NUUklQID0gQFNUUklQQAorVVNFX05MUyA9IEBVU0VfTkxTQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorVklTSUJJTElUWV9ISURERU5fQ0ZMQUdTID0gQFZJU0lCSUxJVFlfSElEREVOX0NGTEFHU0AKK1hHRVRURVhUID0gQFhHRVRURVhUQAorWE1MX0NGTEFHUyA9IEBYTUxfQ0ZMQUdTQAorWE1MX0xJQlMgPSBAWE1MX0xJQlNACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9BUiA9IEBhY19jdF9BUkAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKK2FjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK2FjeF9wdGhyZWFkX2NvbmZpZyA9IEBhY3hfcHRocmVhZF9jb25maWdACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2F2YWhpX3J1bnRpbWVfZGlyID0gQGF2YWhpX3J1bnRpbWVfZGlyQAorYXZhaGlfc29ja2V0ID0gQGF2YWhpX3NvY2tldEAKK2F2YWhpbG9jYWxlZGlyID0gQGF2YWhpbG9jYWxlZGlyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitoYXZlX3BrZ19jb25maWcgPSBAaGF2ZV9wa2dfY29uZmlnQAoraGF2ZV94bWx0b21hbiA9IEBoYXZlX3htbHRvbWFuQAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2ludGVyZmFjZXNkaXIgPSBAaW50ZXJmYWNlc2RpckAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAorcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3B5ZXhlY2RpciA9IEBweWV4ZWNkaXJACitweXRob25kaXIgPSBAcHl0aG9uZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzcmNkaXIgPSBAc3JjZGlyQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAorc3lzdGVtZHN5c3RlbXVuaXRkaXIgPSBAc3lzdGVtZHN5c3RlbXVuaXRkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK0VYVFJBX0RJU1QgPSBidWlsZC1kYi5pbiBzZXJ2aWNlLXR5cGVzCitwa2dsaWJkYXRhZGlyID0gJChsaWJkaXIpL2F2YWhpCitwa2dkYXRhX0RBVEEgPSBzZXJ2aWNlLXR5cGVzCitwa2dsaWJkYXRhX0RBVEEgPSAkKGFtX19hcHBlbmRfMSkgJChhbV9fYXBwZW5kXzIpCitASEFWRV9EQk1fVFJVRUBASEFWRV9QWVRIT05fVFJVRUBub2luc3RfU0NSSVBUUyA9IGJ1aWxkLWRiCitASEFWRV9HREJNX1RSVUVAQEhBVkVfUFlUSE9OX1RSVUVAbm9pbnN0X1NDUklQVFMgPSBidWlsZC1kYgorQEhBVkVfREJNX1RSVUVAQEhBVkVfUFlUSE9OX1RSVUVAQ0xFQU5GSUxFUyA9IHNlcnZpY2UtdHlwZXMuZGIqIGJ1aWxkLWRiCitASEFWRV9HREJNX1RSVUVAQEhBVkVfUFlUSE9OX1RSVUVAQ0xFQU5GSUxFUyA9IHNlcnZpY2UtdHlwZXMuZGIgYnVpbGQtZGIKK2FsbDogYWxsLWFtCisKKy5TVUZGSVhFUzoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCisJICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduIHNlcnZpY2UtdHlwZS1kYXRhYmFzZS9NYWtlZmlsZSc7IFwKKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gc2VydmljZS10eXBlLWRhdGFiYXNlL01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKK2luc3RhbGwtcGtnZGF0YURBVEE6ICQocGtnZGF0YV9EQVRBKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQocGtnZGF0YWRpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKHBrZ2RhdGFkaXIpIgorCUBsaXN0PSckKHBrZ2RhdGFfREFUQSknOyB0ZXN0IC1uICIkKHBrZ2RhdGFkaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKKwkgIGVjaG8gIiQkZCQkcCI7IFwKKwlkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKKwl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCisJICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgJyQoREVTVERJUikkKHBrZ2RhdGFkaXIpJyI7IFwKKwkgICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICIkKERFU1RESVIpJChwa2dkYXRhZGlyKSIgfHwgZXhpdCAkJD87IFwKKwlkb25lCisKK3VuaW5zdGFsbC1wa2dkYXRhREFUQToKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKHBrZ2RhdGFfREFUQSknOyB0ZXN0IC1uICIkKHBrZ2RhdGFkaXIpIiB8fCBsaXN0PTsgXAorCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgc2VkIC1lICdzfF4uKi98fCdgOyBcCisJZGlyPSckKERFU1RESVIpJChwa2dkYXRhZGlyKSc7ICQoYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpcikKK2luc3RhbGwtcGtnbGliZGF0YURBVEE6ICQocGtnbGliZGF0YV9EQVRBKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQocGtnbGliZGF0YWRpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKHBrZ2xpYmRhdGFkaXIpIgorCUBsaXN0PSckKHBrZ2xpYmRhdGFfREFUQSknOyB0ZXN0IC1uICIkKHBrZ2xpYmRhdGFkaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKKwkgIGVjaG8gIiQkZCQkcCI7IFwKKwlkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKKwl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCisJICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgJyQoREVTVERJUikkKHBrZ2xpYmRhdGFkaXIpJyI7IFwKKwkgICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICIkKERFU1RESVIpJChwa2dsaWJkYXRhZGlyKSIgfHwgZXhpdCAkJD87IFwKKwlkb25lCisKK3VuaW5zdGFsbC1wa2dsaWJkYXRhREFUQToKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKHBrZ2xpYmRhdGFfREFUQSknOyB0ZXN0IC1uICIkKHBrZ2xpYmRhdGFkaXIpIiB8fCBsaXN0PTsgXAorCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgc2VkIC1lICdzfF4uKi98fCdgOyBcCisJZGlyPSckKERFU1RESVIpJChwa2dsaWJkYXRhZGlyKSc7ICQoYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpcikKK3RhZ3M6IFRBR1MKK1RBR1M6CisKK2N0YWdzOiBDVEFHUworQ1RBR1M6CisKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUgJChTQ1JJUFRTKSAkKERBVEEpCitpbnN0YWxsZGlyczoKKwlmb3IgZGlyIGluICIkKERFU1RESVIpJChwa2dkYXRhZGlyKSIgIiQoREVTVERJUikkKHBrZ2xpYmRhdGFkaXIpIjsgZG8gXAorCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAorCWRvbmUKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgICAgIGluc3RhbGw7IFwKKwllbHNlIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAorCWZpCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENMRUFORklMRVMpIiB8fCBybSAtZiAkKENMRUFORklMRVMpCisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKK2NsZWFuOiBjbGVhbi1hbQorCitjbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIG1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1nZW5lcmljCisKK2R2aTogZHZpLWFtCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1hbQorCitodG1sLWFtOgorCitpbmZvOiBpbmZvLWFtCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1wa2dkYXRhREFUQSBpbnN0YWxsLXBrZ2xpYmRhdGFEQVRBCisKK2luc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQorCitpbnN0YWxsLWR2aS1hbToKKworaW5zdGFsbC1leGVjLWFtOgorCitpbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQorCitpbnN0YWxsLWh0bWwtYW06CisKK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisKK2luc3RhbGwtaW5mby1hbToKKworaW5zdGFsbC1tYW46CisKK2luc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQorCitpbnN0YWxsLXBkZi1hbToKKworaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQorCitpbnN0YWxsLXBzLWFtOgorCitpbnN0YWxsY2hlY2stYW06CisKK21haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtYW0KKworcGRmLWFtOgorCitwczogcHMtYW0KKworcHMtYW06CisKK3VuaW5zdGFsbC1hbTogdW5pbnN0YWxsLXBrZ2RhdGFEQVRBIHVuaW5zdGFsbC1wa2dsaWJkYXRhREFUQQorCisuTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisKKy5QSE9OWTogYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgXAorCWRpc3RjbGVhbiBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBkaXN0ZGlyIGR2aSBcCisJZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIFwKKwlpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIFwKKwlpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gXAorCWluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgXAorCWluc3RhbGwtcGRmLWFtIGluc3RhbGwtcGtnZGF0YURBVEEgaW5zdGFsbC1wa2dsaWJkYXRhREFUQSBcCisJaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIFwKKwlpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBcCisJbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIFwKKwl1bmluc3RhbGwtcGtnZGF0YURBVEEgdW5pbnN0YWxsLXBrZ2xpYmRhdGFEQVRBCisKKworQEhBVkVfR0RCTV9UUlVFQEBIQVZFX1BZVEhPTl9UUlVFQGJ1aWxkLWRiOiBidWlsZC1kYi5pbgorQEhBVkVfR0RCTV9UUlVFQEBIQVZFX1BZVEhPTl9UUlVFQAkkKEFNX1ZfR0VOKXNlZCAtZSAncyxAUFlUSE9OXEAsJChQWVRIT04pLGcnIFwKK0BIQVZFX0dEQk1fVFJVRUBASEFWRV9QWVRIT05fVFJVRUAJICAgIC1lICdzLEBEQk1cQCxnZGJtLGcnICQ8ID4gJEAgJiYgXAorQEhBVkVfR0RCTV9UUlVFQEBIQVZFX1BZVEhPTl9UUlVFQAljaG1vZCAreCAkQAorCitASEFWRV9HREJNX1RSVUVAQEhBVkVfUFlUSE9OX1RSVUVAc2VydmljZS10eXBlcy5kYjogc2VydmljZS10eXBlcyBidWlsZC1kYgorQEhBVkVfR0RCTV9UUlVFQEBIQVZFX1BZVEhPTl9UUlVFQAkkKEFNX1ZfR0VOKSQoUFlUSE9OKSBidWlsZC1kYiAkPCAkQC5jb21pbmcgJiYgXAorQEhBVkVfR0RCTV9UUlVFQEBIQVZFX1BZVEhPTl9UUlVFQAltdiAkQC5jb21pbmcgJEAKKworQEhBVkVfREJNX1RSVUVAQEhBVkVfUFlUSE9OX1RSVUVAYnVpbGQtZGI6IGJ1aWxkLWRiLmluCitASEFWRV9EQk1fVFJVRUBASEFWRV9QWVRIT05fVFJVRUAJJChBTV9WX0dFTilzZWQgLWUgJ3MsQFBZVEhPTlxALCQoUFlUSE9OKSxnJyBcCitASEFWRV9EQk1fVFJVRUBASEFWRV9QWVRIT05fVFJVRUAJICAgIC1lICdzLEBEQk1cQCxkYm0sZycgJDwgPiAkQCAmJiBcCitASEFWRV9EQk1fVFJVRUBASEFWRV9QWVRIT05fVFJVRUAJY2htb2QgK3ggJEAKKworQEhBVkVfREJNX1RSVUVAQEhBVkVfUFlUSE9OX1RSVUVAc2VydmljZS10eXBlcy5kYi5wYWc6IHNlcnZpY2UtdHlwZXMuZGIKK0BIQVZFX0RCTV9UUlVFQEBIQVZFX1BZVEhPTl9UUlVFQAkkKEFNX1ZfR0VOKW12IHNlcnZpY2UtdHlwZXMuZGIuY29taW5nLnBhZyBzZXJ2aWNlLXR5cGVzLmRiLnBhZworQEhBVkVfREJNX1RSVUVAQEhBVkVfUFlUSE9OX1RSVUVAc2VydmljZS10eXBlcy5kYi5kaXI6IHNlcnZpY2UtdHlwZXMuZGIKK0BIQVZFX0RCTV9UUlVFQEBIQVZFX1BZVEhPTl9UUlVFQAkkKEFNX1ZfR0VOKW12IHNlcnZpY2UtdHlwZXMuZGIuY29taW5nLmRpciBzZXJ2aWNlLXR5cGVzLmRiLmRpcgorQEhBVkVfREJNX1RSVUVAQEhBVkVfUFlUSE9OX1RSVUVAc2VydmljZS10eXBlcy5kYjogc2VydmljZS10eXBlcyBidWlsZC1kYgorQEhBVkVfREJNX1RSVUVAQEhBVkVfUFlUSE9OX1RSVUVACSQoQU1fVl9HRU4pJChQWVRIT04pIGJ1aWxkLWRiICQ8ICRALmNvbWluZyAmJiBcCitASEFWRV9EQk1fVFJVRUBASEFWRV9QWVRIT05fVFJVRUAJaWYgdGVzdCAtZiAiJEAuY29taW5nIjsgdGhlbiBtdiAkQC5jb21pbmcgJEA7IGZpCisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS9zZXJ2aWNlLXR5cGUtZGF0YWJhc2UvYnVpbGQtZGIuaW4gYi9hdmFoaS0wLjYuMzEvc2VydmljZS10eXBlLWRhdGFiYXNlL2J1aWxkLWRiLmluCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRjZGE0MjUKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvc2VydmljZS10eXBlLWRhdGFiYXNlL2J1aWxkLWRiLmluCkBAIC0wLDAgKzEsNDQgQEAKKyMhQFBZVEhPTkAKKyMgLSotcHl0aG9uLSotCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorIworIyBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworIyBVU0EuCisKK2ltcG9ydCBAREJNQCwgc3lzCisKK2lmIGxlbihzeXMuYXJndikgPiAxOgorICAgIGluZm4gPSBzeXMuYXJndlsxXQorZWxzZToKKyAgICBpbmZuID0gInNlcnZpY2UtdHlwZXMiCisKK2lmIGxlbihzeXMuYXJndikgPiAyOgorICAgIG91dGZuID0gc3lzLmFyZ3ZbMl0KK2Vsc2U6CisgICAgb3V0Zm4gPSBpbmZuICsgIi5kYiIKKworZGIgPSBAREJNQC5vcGVuKG91dGZuLCAibiIpCisKK2ZvciBsbiBpbiBmaWxlKGluZm4sICJyIik6CisgICAgbG4gPSBsbi5zdHJpcCgiIFxyXG5cdCIpCisgICAgCisgICAgaWYgbG4gPT0gIiIgb3IgbG4uc3RhcnRzd2l0aCgiIyIpOgorICAgICAgICBjb250aW51ZQorCisgICAgdCwgbiA9IGxuLnNwbGl0KCI6IiwgMSkKKworICAgIGRiW3Quc3RyaXAoKV0gPSBuLnN0cmlwKCkKKworZGIuY2xvc2UoKQpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL3NlcnZpY2UtdHlwZS1kYXRhYmFzZS9zZXJ2aWNlLXR5cGVzIGIvYXZhaGktMC42LjMxL3NlcnZpY2UtdHlwZS1kYXRhYmFzZS9zZXJ2aWNlLXR5cGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlN2UyY2QKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvc2VydmljZS10eXBlLWRhdGFiYXNlL3NlcnZpY2UtdHlwZXMKQEAgLTAsMCArMSwyMzMgQEAKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisjCisjIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisjIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisjIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisjIFVTQS4KKworIyBGZWVsIGZyZWUgdG8gYWRkIG1vcmUgc2VydmljZSB0eXBlcyBvciB0cmFuc2xhdG9ucyB0byB0aGlzIGRhdGFiYXNlLgorIyBQbGVhc2UgcmVmcmFpbiBmcm9tIGNvcHlpbmcgYnVsayBzZXJ2aWNlIHR5cGUgZGF0YSBmcm9tIGFueSBwdWJsaWNseQorIyBhdmFpbGFibGUgZGF0YWJhc2UgdW5sZXNzIGl0cyBsaWNlbnNlIGlzIGtub3duIGFuZCBjb21wYXRpYmxlIHdpdGgKKyMgb3VyIHByb2plY3QhIFRoZSBkYXRhYmFzZSBhdmFpbGFibGUgb24KKyMKKyMgICAgICAgICBodHRwOi8vd3d3LmRucy1zZC5vcmcvU2VydmljZVR5cGVzLmh0bWwKKyMKKyMgaXMgbm90IGEgc291cmNlIHRoYXQgY29tcGxpZXMgd2l0aCB0aGUgY3JpdGVyaW9uIQorCisjIyMgVGhpcyBsaXN0IGlzIE5PVCBpbnRlbmRlZCB0byBiZSB1c2VkIGFzIGRldmVsb3BlcgorIyMjIGRvY3VtZW50YXRpb24uIElmIHlvdSdyZSBsb29raW5nIGZvciB0aGUgY29ycmVjdCBzZXJ2aWNlIHR5cGUgdG8KKyMjIyB1c2UgZm9yIHlvdXIgYXBwbGljYXRpb24gcGxlYXNlIHJlZmVyIHRvIHRoZSBVUkwgbWVudGlvbmVkIGFib3ZlLgorCisKKyMgRGV2aWNlcworCitfd29ya3N0YXRpb24uX3RjcDpXb3Jrc3RhdGlvbgorX3dvcmtzdGF0aW9uLl90Y3BbZGVdOkFyYmVpdHNwbGF0enJlY2huZXIKK193b3Jrc3RhdGlvbi5fdGNwW2l0XTpNYWNjaGluZQorCisKKyMgV2ViCisKK19odHRwLl90Y3A6V2ViIFNpdGUKK19odHRwLl90Y3BbZGVdOldlYi1BbmdlYm90CitfaHR0cC5fdGNwW2l0XTpTaXRvIFdlYgorCitfaHR0cHMuX3RjcDpTZWN1cmUgV2ViIFNpdGUKK19odHRwcy5fdGNwW2RlXTpTaWNoZXJlcyBXZWItQW5nZWJvdAorX2h0dHBzLl90Y3BbaXRdOlNpdG8gV2ViIHNpY3VybworCitfcnNzLl90Y3A6V2ViIFN5bmRpY2F0aW9uIFJTUworCisKKyMgTmV0d29yaworCitfZG9tYWluLl91ZHA6RE5TIFNlcnZlcgorX2RvbWFpbi5fdWRwW2RlXTogRE5TLURpZW5zdAorCitfbnRwLl91ZHA6TlRQIFRpbWUgU2VydmVyCisKK19zbWIuX3RjcDpNaWNyb3NvZnQgV2luZG93cyBOZXR3b3JrCitfc21iLl90Y3BbaXRdOlJldGUgTWljcm9zb2Z0IFdpbmRvd3MKKworX2FpcnBvcnQuX3RjcDpBcHBsZSBBaXJQb3J0CisKKworIyBGaWxlIGFuZCBkYXRhIGFjY2VzcworCitfZnRwLl90Y3A6RlRQIEZpbGUgVHJhbnNmZXIKK19mdHAuX3RjcFtkZV06RlRQLURhdGVpZnJlaWdhYmUKKworX3RmdHAuX3VkcDpURlRQIFRyaXZpYWwgRmlsZSBUcmFuc2ZlcgorCitfd2ViZGF2Ll90Y3A6V2ViREFWIEZpbGUgU2hhcmUKK193ZWJkYXYuX3RjcFtpdF06V2ViREFWIENvbmRpdmlzaW9uZSBGaWxlCisKK193ZWJkYXZzLl90Y3A6U2VjdXJlIFdlYkRBViBGaWxlIFNoYXJlCitfd2ViZGF2cy5fdGNwW2l0XTpXZWJEQVYgQ29uZGl2aXNpb25lIEZpbGUgU2ljdXJvCisKK19hZnBvdmVydGNwLl90Y3A6QXBwbGUgRmlsZSBTaGFyaW5nCisKK19uZnMuX3RjcDpOZXR3b3JrIEZpbGUgU3lzdGVtCisKK19zZnRwLXNzaC5fdGNwOlNGVFAgRmlsZSBUcmFuc2ZlcgorCitfYXB0Ll90Y3A6QVBUIFBhY2thZ2UgUmVwb3NpdG9yeQorX2FwdC5fdGNwW2l0XTpBUFQgLSBSZXBvc2l0b3J5IGRlaSBQYWNjaGV0dGkKKworX29kaXNrLl90Y3A6RFZEIG9yIENEIFNoYXJpbmcKKworX2FkaXNrLl90Y3A6QXBwbGUgVGltZU1hY2hpbmUKKworCisjIFJlbW90ZSBtYWNoaW5lIGFjY2VzcworCitfc3NoLl90Y3A6U1NIIFJlbW90ZSBUZXJtaW5hbAorX3NzaC5fdGNwW2RlXTpTU0gtRmVybnp1Z3JpZmYKK19zc2guX3RjcFtpdF06U1NIIFRlcm1pbmFsZSByZW1vdG8KKworX3JmYi5fdGNwOlZOQyBSZW1vdGUgQWNjZXNzCitfcmZiLl90Y3BbaXRdOkNvbnRyb2xsbyByZW1vdG8gVk5DCisKK190ZWxuZXQuX3RjcDpUZWxuZXQgUmVtb3RlIFRlcm1pbmFsCitfdGVsbmV0Ll90Y3BbaXRdOlRlbG5ldCBUZXJtaW5hbGUgUmVtb3RvCisKK190aW1idWt0dS5fdGNwOlRpbWJ1a3R1IFJlbW90ZSBEZXNrdG9wIENvbnRyb2wKKworX25ldC1hc3Npc3RhbnQuX3VkcDpBcHBsZSBOZXQgQXNzaXN0YW50CisKK191ZGlza3Mtc3NoLl90Y3A6UmVtb3RlIERpc2sgTWFuYWdlbWVudAorCisjIE1haWwKKworX2ltYXAuX3RjcDpJTUFQIE1haWwgQWNjZXNzCitfaW1hcC5fdGNwW2l0XTpQb3N0YSAtIElNQVAKKworX3BvcDMuX3RjcDpQT1AzIE1haWwgQWNjZXNzCitfcG9wMy5fdGNwOlBvc3RhIC0gUE9QMworCisKKyMgUHJpbnRpbmcKKworX3ByaW50ZXIuX3RjcDpVTklYIFByaW50ZXIKK19wcmludGVyLl90Y3BbaXRdOlN0YW1wYW50ZSBVTklYCisKK19wZGwtZGF0YXN0cmVhbS5fdGNwOlBETCBQcmludGVyCitfcGRsLWRhdGFzdHJlYW0uX3RjcFtpdF06U3RhbXBhbnRlIFBETAorCitfaXBwLl90Y3A6SW50ZXJuZXQgUHJpbnRlcgorCisKKyMgTXVsdGltZWRpYQorCitfZGFhcC5fdGNwOmlUdW5lcyBBdWRpbyBBY2Nlc3MKK19kYWFwLl90Y3BbZGVdOmlUdW5lcyBBdWRpby1adWdyaWZmCitfZGFhcC5fdGNwW2l0XTpBY2Nlc3NvIEF1ZGlvIGlUdW5lcworCitfZGFjcC5fdGNwOmlUdW5lcyBSZW1vdGUgQ29udHJvbAorCitfcmVhbHBsYXlmYXZzLl90Y3A6UmVhbFBsYXllciBTaGFyZWQgRmF2b3JpdGVzCitfcmVhbHBsYXlmYXZzLl90Y3BbaXRdOlJlYWxQbGF5ZXIgLSBQcmVmZXJpdGkgQ29uZGl2aXNpCisKK19yYW9wLl90Y3A6QWlyVHVuZXMgUmVtb3RlIEF1ZGlvCisKK19ydHNwLl90Y3A6UlRTUCBSZWFsdGltZSBTdHJlYW1pbmcgU2VydmVyCitfcnRwLl91ZHA6UlRQIFJlYWx0aW1lIFN0cmVhbWluZyBTZXJ2ZXIKKworX2RwYXAuX3RjcDpEaWdpdGFsIFBob3RvIFNoYXJpbmcKK19kcGFwLl90Y3BbaXRdOkNvbmRpdmlzaW9uZSBGb3RvCisKK19wdWxzZS1zZXJ2ZXIuX3RjcDpQdWxzZUF1ZGlvIFNvdW5kIFNlcnZlcgorX3B1bHNlLXNpbmsuX3RjcDpQdWxzZUF1ZGlvIFNvdW5kIFNpbmsKK19wdWxzZS1zb3VyY2UuX3RjcDpQdWxzZUF1ZGlvIFNvdW5kIFNvdXJjZQorCitfbXBkLl90Y3A6TXVzaWMgUGxheWVyIERhZW1vbgorCitfcmVtb3RlLWp1a2Vib3guX3RjcDpSZW1vdGUgSnVrZWJveAorCisjIERBQVAgc2hhcmUgcHJvdmlkZWQgYnkgaVR1bmVzIG9uIGJlaGFsZiBvZiBhbiBpUG9kIFRvdWNoCitfdG91Y2gtYWJsZS5fdGNwOmlQb2QgVG91Y2ggTXVzaWMgTGlicmFyeQorCitfdmxjLWh0dHAuX3RjcDpWTEMgU3RyZWFtaW5nCisKKworIyBDb21tdW5pY2F0aW9uLCBwcmVzZW5jZSwgd29ya2luZyB0b2dldGhlcgorCitfcHJlc2VuY2UuX3RjcDppQ2hhdCBQcmVzZW5jZQorCitfc2lwLl91ZHA6U0lQIFRlbGVwaG9ueQorX3NpcC5fdWRwW2RlXTpTSVAtVGVsZWZvbmllCitfc2lwLl91ZHBbaXRdOlRlbGVmb25pYS1TSVAKKworX2gzMjMuX3RjcDpILjMyMyBUZWxlcGhvbnkKK19oMzIzLl90Y3BbZGVdOkguMzIzLVRlbGVmb25pZQorX2gzMjMuX3RjcFtpdF06VGVsZWZvbmlhLUguMzIzCisKK19wcmVzZW5jZV9vbHBjLl90Y3A6T0xQQyBQcmVzZW5jZQorCitfaWF4Ll91ZHA6QXN0ZXJpc2sgRXhjaGFuZ2UKKworX3NreXBlLl90Y3A6U2t5cGUgVm9JUAorCitfc2VlLl90Y3A6U3ViRXRoYUVkaXQgQ29sbGFib3JhdGl2ZSBUZXh0IEVkaXRvcgorCitfbG9iYnkuX3RjcDpHb2JieSBDb2xsYWJvcmF0aXZlIEVkaXRvciBTZXNzaW9uCisKK19tdW1ibGUuX3RjcDpNdW1ibGUgU2VydmVyCisKKworIyBEYXRhYmFzZXMKKworX3Bvc3RncmVzcWwuX3RjcDpQb3N0Z3JlU1FMIFNlcnZlcgorCisKKyMgRGV2ZWxvcG1lbnQKKworX3N2bi5fdGNwOlN1YnZlcnNpb24gUmV2aXNpb24gQ29udHJvbAorX3N2bi5fdGNwW2l0XTpTdWJ2ZXJzaW9uIC0gVmVyc2lvbmF0b3JlCisKK19kaXN0Y2MuX3RjcDpEaXN0cmlidXRlZCBDb21waWxlcgorX2Rpc3RjYy5fdGNwW2RlXTpWZXJ0ZWlsdGVyIENvbXBpbGVyCitfZGlzdGNjLl90Y3BbaXRdOkNvbXBpbGF0b3JlIERpc3RyaWJ1aXRvCisKK19ienIuX3RjcDpCYXphYXIKKworCisjIFZlbmRvciBzcGVjaWZpYworCitfTWFjT1NYRHVwU3VwcHJlc3MuX3RjcDpNYWNPUyBYIER1cGxpY2F0ZSBNYWNoaW5lIFN1cHByZXNzaW9uCisKK19rc3lzZ3VhcmQuX3RjcDpLREUgU3lzdGVtIEd1YXJkCisKK19vbW5pLWJvb2ttYXJrLl90Y3A6T21uaVdlYiBCb29rbWFyayBTaGFyaW5nCisKK19hY3JvYmF0U1JWLl90Y3A6QWRvYmUgQWNyb2JhdAorCitfYWRvYmUtdmMuX3RjcDpBZG9iZSBWZXJzaW9uIEN1ZQorCitfaG9tZS1zaGFyaW5nLl90Y3A6QXBwbGUgSG9tZSBTaGFyaW5nCisKKworIyBPdGhlcgorCitfcGdwa2V5LWhrcC5fdGNwOkdudVBHL1BHUCBIS1AgS2V5IFNlcnZlcgorCitfbGRhcC5fdGNwOkxEQVAgRGlyZWN0b3J5IFNlcnZlcgorCitfdHAuX3RjcDpUaG91c2FuZCBQYXJzZWMgU2VydmVyCitfdHBzLl90Y3A6VGhvdXNhbmQgUGFyc2VjIFNlcnZlciAoU2VjdXJlKQorX3RwLWh0dHAuX3RjcDpUaG91c2FuZCBQYXJzZWMgU2VydmVyIChIVFRQIFR1bm5lbCkKK190cC1odHRwcy5fdGNwOlRob3VzYW5kIFBhcnNlYyBTZXJ2ZXIgKFNlY3VyZSBIVFRQIFR1bm5lbCkKKworX3NoaWZ0ZXIuX3RjcDpXaW5kb3cgU2hpZnRlcgorCitfbGlidmlydC5fdGNwOlZpcnR1YWwgTWFjaGluZSBNYW5hZ2VyCmRpZmYgLS1naXQgYS9hdmFoaS0wLjYuMzEvdGVzdHMvTWFrZWZpbGUuYW0gYi9hdmFoaS0wLjYuMzEvdGVzdHMvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI4YjBiNwotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLTAuNi4zMS90ZXN0cy9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDUzIEBACisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGF2YWhpLgorIworIyBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFsb25nIHdpdGggYXZhaGk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworIyBVU0EuCisKK0FNX0NGTEFHUz0gXAorCS1JJCh0b3Bfc3JjZGlyKQorCitpZiBIQVZFX0dMSUIKK2lmIEhBVkVfREJVUworaWYgSEFWRV9ORVRMSU5LCisKK2lmIEVOQUJMRV9URVNUUworbm9pbnN0X1BST0dSQU1TID0gYy1wbHVzLXBsdXMtdGVzdAorZW5kaWYKKworY19wbHVzX3BsdXNfdGVzdF9TT1VSQ0VTID0gYy1wbHVzLXBsdXMtdGVzdC5jYworCitjX3BsdXNfcGx1c190ZXN0X0NYWEZMQUdTID0gXAorCSQoQU1fQ0ZMQUdTKSBcCisJJChHTElCMjBfQ0ZMQUdTKSBcCisJJChEQlVTX0NGTEFHUykKKworY19wbHVzX3BsdXNfdGVzdF9MREFERCA9IFwKKwkkKEFNX0xEQUREKSBcCisJLi4vYXZhaGktY29tbW9uL2xpYmF2YWhpLWNvbW1vbi5sYSBcCisJLi4vYXZhaGktY29yZS9saWJhdmFoaS1jb3JlLmxhIFwKKwkuLi9hdmFoaS1jbGllbnQvbGliYXZhaGktY2xpZW50LmxhIFwKKwkuLi9hdmFoaS1nbGliL2xpYmF2YWhpLWdsaWIubGEgIFwKKwkkKEdMSUIyMF9MSUJTKSBcCisJJChEQlVTX0xJQlMpCisKK2VuZGlmCitlbmRpZgorZW5kaWYKKworRVhUUkFfRElTVD1jLXBsdXMtcGx1cy10ZXN0LWdlbi5weQorCitnZW46CisJcHl0aG9uIC4vYy1wbHVzLXBsdXMtdGVzdC1nZW4ucHkgYXZhaGktY29tbW9uIGF2YWhpLWNvcmUgYXZhaGktY2xpZW50IGF2YWhpLWdsaWIgPiBjLXBsdXMtcGx1cy10ZXN0LmNjCisKZGlmZiAtLWdpdCBhL2F2YWhpLTAuNi4zMS90ZXN0cy9NYWtlZmlsZS5pbiBiL2F2YWhpLTAuNi4zMS90ZXN0cy9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzVjZDBkCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL3Rlc3RzL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNjkzIEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjExLjMgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACisKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYXZhaGkuCisjCisjIGF2YWhpIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisjIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIGF2YWhpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisjIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCBhdmFoaTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisjIFVTQS4KKworVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorQEVOQUJMRV9URVNUU19UUlVFQEBIQVZFX0RCVVNfVFJVRUBASEFWRV9HTElCX1RSVUVAQEhBVkVfTkVUTElOS19UUlVFQG5vaW5zdF9QUk9HUkFNUyA9IGMtcGx1cy1wbHVzLXRlc3QkKEVYRUVYVCkKK3N1YmRpciA9IHRlc3RzCitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9hY3hfcHRocmVhZC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vZ2NjX3N0YWNrX3Byb3RlY3QubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2djY192aXNpYmlsaXR5Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9pbnRsdG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vaW50cm9zcGVjdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbGlidG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb21tb24vbHRvcHRpb25zLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9sdHN1Z2FyLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9sdHZlcnNpb24ubTQgXAorCSQodG9wX3NyY2RpcikvY29tbW9uL2x0fm9ic29sZXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbW1vbi9ubHMubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vcHl0aG9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL2FjaW5jbHVkZS5tNCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9kb3h5Z2VuLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CitQUk9HUkFNUyA9ICQobm9pbnN0X1BST0dSQU1TKQorYW1fX2NfcGx1c19wbHVzX3Rlc3RfU09VUkNFU19ESVNUID0gYy1wbHVzLXBsdXMtdGVzdC5jYworQEhBVkVfREJVU19UUlVFQEBIQVZFX0dMSUJfVFJVRUBASEFWRV9ORVRMSU5LX1RSVUVAYW1fY19wbHVzX3BsdXNfdGVzdF9PQkpFQ1RTID0gY19wbHVzX3BsdXNfdGVzdC1jLXBsdXMtcGx1cy10ZXN0LiQoT0JKRVhUKQorY19wbHVzX3BsdXNfdGVzdF9PQkpFQ1RTID0gJChhbV9jX3BsdXNfcGx1c190ZXN0X09CSkVDVFMpCithbV9fREVQRU5ERU5DSUVTXzEgPQorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dMSUJfVFJVRUBASEFWRV9ORVRMSU5LX1RSVUVAY19wbHVzX3BsdXNfdGVzdF9ERVBFTkRFTkNJRVMgPSAuLi9hdmFoaS1jb21tb24vbGliYXZhaGktY29tbW9uLmxhIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HTElCX1RSVUVAQEhBVkVfTkVUTElOS19UUlVFQAkuLi9hdmFoaS1jb3JlL2xpYmF2YWhpLWNvcmUubGEgXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dMSUJfVFJVRUBASEFWRV9ORVRMSU5LX1RSVUVACS4uL2F2YWhpLWNsaWVudC9saWJhdmFoaS1jbGllbnQubGEgXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dMSUJfVFJVRUBASEFWRV9ORVRMSU5LX1RSVUVACS4uL2F2YWhpLWdsaWIvbGliYXZhaGktZ2xpYi5sYSBcCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR0xJQl9UUlVFQEBIQVZFX05FVExJTktfVFJVRUAJJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HTElCX1RSVUVAQEhBVkVfTkVUTElOS19UUlVFQAkkKGFtX19ERVBFTkRFTkNJRVNfMSkKK0FNX1ZfbHQgPSAkKGFtX192X2x0X0BBTV9WQCkKK2FtX192X2x0XyA9ICQoYW1fX3ZfbHRfQEFNX0RFRkFVTFRfVkApCithbV9fdl9sdF8wID0gLS1zaWxlbnQKK2NfcGx1c19wbHVzX3Rlc3RfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DWFggXAorCSQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDWFhMRCkgXAorCSQoY19wbHVzX3BsdXNfdGVzdF9DWFhGTEFHUykgJChDWFhGTEFHUykgJChBTV9MREZMQUdTKSBcCisJJChMREZMQUdTKSAtbyAkQAorREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKK2RlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKK2FtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCithbV9fbXYgPSBtdiAtZgorQ1hYQ09NUElMRSA9ICQoQ1hYKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgXAorCSQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpCitMVENYWENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q1hYICQoQU1fTElCVE9PTEZMQUdTKSBcCisJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ1hYKSAkKERFRlMpIFwKKwkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKKwkkKEFNX0NYWEZMQUdTKSAkKENYWEZMQUdTKQorQU1fVl9DWFggPSAkKGFtX192X0NYWF9AQU1fVkApCithbV9fdl9DWFhfID0gJChhbV9fdl9DWFhfQEFNX0RFRkFVTFRfVkApCithbV9fdl9DWFhfMCA9IEBlY2hvICIgIENYWCAgICIgJEA7CitBTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCithbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfYXRfMCA9IEAKK0NYWExEID0gJChDWFgpCitDWFhMSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNYWCAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENYWExEKSAkKEFNX0NYWEZMQUdTKSBcCisJJChDWFhGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACitBTV9WX0NYWExEID0gJChhbV9fdl9DWFhMRF9AQU1fVkApCithbV9fdl9DWFhMRF8gPSAkKGFtX192X0NYWExEX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfQ1hYTERfMCA9IEBlY2hvICIgIENYWExEICIgJEA7CitBTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKK2FtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKK2FtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgIiAkQDsKK1NPVVJDRVMgPSAkKGNfcGx1c19wbHVzX3Rlc3RfU09VUkNFUykKK0RJU1RfU09VUkNFUyA9ICQoYW1fX2NfcGx1c19wbHVzX3Rlc3RfU09VUkNFU19ESVNUKQorRVRBR1MgPSBldGFncworQ1RBR1MgPSBjdGFncworRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FMTF9MSU5HVUFTID0gQEFMTF9MSU5HVUFTQAorQU1UQVIgPSBAQU1UQVJACitBTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKK0FSID0gQEFSQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FWQUhJX0FVVE9JUERfR1JPVVAgPSBAQVZBSElfQVVUT0lQRF9HUk9VUEAKK0FWQUhJX0FVVE9JUERfVVNFUiA9IEBBVkFISV9BVVRPSVBEX1VTRVJACitBVkFISV9HUk9VUCA9IEBBVkFISV9HUk9VUEAKK0FWQUhJX1BSSVZfQUNDRVNTX0dST1VQID0gQEFWQUhJX1BSSVZfQUNDRVNTX0dST1VQQAorQVZBSElfVVNFUiA9IEBBVkFISV9VU0VSQAorQVdLID0gQEFXS0AKK0NBVEFMT0dTID0gQENBVEFMT0dTQAorQ0FUT0JKRVhUID0gQENBVE9CSkVYVEAKK0NDID0gQENDQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RBVEFESVJOQU1FID0gQERBVEFESVJOQU1FQAorREJVU19DRkxBR1MgPSBAREJVU19DRkxBR1NACitEQlVTX0xJQlMgPSBAREJVU19MSUJTQAorREJVU19TWVNURU1fQlVTX0RFRkFVTFRfQUREUkVTUyA9IEBEQlVTX1NZU1RFTV9CVVNfREVGQVVMVF9BRERSRVNTQAorREJVU19TWVNfRElSID0gQERCVVNfU1lTX0RJUkAKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitETExUT09MID0gQERMTFRPT0xACitET1hZR0VOX1BBUEVSX1NJWkUgPSBARE9YWUdFTl9QQVBFUl9TSVpFQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitEWF9DT05GSUcgPSBARFhfQ09ORklHQAorRFhfRE9DRElSID0gQERYX0RPQ0RJUkAKK0RYX0RPVCA9IEBEWF9ET1RACitEWF9ET1hZR0VOID0gQERYX0RPWFlHRU5ACitEWF9EVklQUyA9IEBEWF9EVklQU0AKK0RYX0VHUkVQID0gQERYX0VHUkVQQAorRFhfRU5WID0gQERYX0VOVkAKK0RYX0ZMQUdfY2hpID0gQERYX0ZMQUdfY2hpQAorRFhfRkxBR19jaG0gPSBARFhfRkxBR19jaG1ACitEWF9GTEFHX2RvYyA9IEBEWF9GTEFHX2RvY0AKK0RYX0ZMQUdfZG90ID0gQERYX0ZMQUdfZG90QAorRFhfRkxBR19odG1sID0gQERYX0ZMQUdfaHRtbEAKK0RYX0ZMQUdfbWFuID0gQERYX0ZMQUdfbWFuQAorRFhfRkxBR19wZGYgPSBARFhfRkxBR19wZGZACitEWF9GTEFHX3BzID0gQERYX0ZMQUdfcHNACitEWF9GTEFHX3J0ZiA9IEBEWF9GTEFHX3J0ZkAKK0RYX0ZMQUdfeG1sID0gQERYX0ZMQUdfeG1sQAorRFhfSEhDID0gQERYX0hIQ0AKK0RYX0xBVEVYID0gQERYX0xBVEVYQAorRFhfTUFLRUlOREVYID0gQERYX01BS0VJTkRFWEAKK0RYX1BERkxBVEVYID0gQERYX1BERkxBVEVYQAorRFhfUEVSTCA9IEBEWF9QRVJMQAorRFhfUFJPSkVDVCA9IEBEWF9QUk9KRUNUQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFWEVFWFQgPSBARVhFRVhUQAorRkdSRVAgPSBARkdSRVBACitHQUNVVElMID0gQEdBQ1VUSUxACitHRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAorR0xJQjIwX0NGTEFHUyA9IEBHTElCMjBfQ0ZMQUdTQAorR0xJQjIwX0xJQlMgPSBAR0xJQjIwX0xJQlNACitHTU9GSUxFUyA9IEBHTU9GSUxFU0AKK0dNU0dGTVQgPSBAR01TR0ZNVEAKK0dPQkpFQ1RfQ0ZMQUdTID0gQEdPQkpFQ1RfQ0ZMQUdTQAorR09CSkVDVF9MSUJTID0gQEdPQkpFQ1RfTElCU0AKK0dSRVAgPSBAR1JFUEAKK0dUSzIwX0NGTEFHUyA9IEBHVEsyMF9DRkxBR1NACitHVEsyMF9MSUJTID0gQEdUSzIwX0xJQlNACitHVEszMF9DRkxBR1MgPSBAR1RLMzBfQ0ZMQUdTQAorR1RLMzBfTElCUyA9IEBHVEszMF9MSUJTQAorSE9XTF9DT01QQVRfVkVSU0lPTiA9IEBIT1dMX0NPTVBBVF9WRVJTSU9OQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitJTlNUT0JKRVhUID0gQElOU1RPQkpFWFRACitJTlRMTElCUyA9IEBJTlRMTElCU0AKK0lOVExUT09MX0VYVFJBQ1QgPSBASU5UTFRPT0xfRVhUUkFDVEAKK0lOVExUT09MX01FUkdFID0gQElOVExUT09MX01FUkdFQAorSU5UTFRPT0xfUEVSTCA9IEBJTlRMVE9PTF9QRVJMQAorSU5UTFRPT0xfVVBEQVRFID0gQElOVExUT09MX1VQREFURUAKK0lOVFJPU1BFQ1RJT05fQ0ZMQUdTID0gQElOVFJPU1BFQ1RJT05fQ0ZMQUdTQAorSU5UUk9TUEVDVElPTl9DT01QSUxFUiA9IEBJTlRST1NQRUNUSU9OX0NPTVBJTEVSQAorSU5UUk9TUEVDVElPTl9HRU5FUkFURSA9IEBJTlRST1NQRUNUSU9OX0dFTkVSQVRFQAorSU5UUk9TUEVDVElPTl9HSVJESVIgPSBASU5UUk9TUEVDVElPTl9HSVJESVJACitJTlRST1NQRUNUSU9OX0xJQlMgPSBASU5UUk9TUEVDVElPTl9MSUJTQAorSU5UUk9TUEVDVElPTl9NQUtFRklMRSA9IEBJTlRST1NQRUNUSU9OX01BS0VGSUxFQAorSU5UUk9TUEVDVElPTl9TQ0FOTkVSID0gQElOVFJPU1BFQ1RJT05fU0NBTk5FUkAKK0lOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUiA9IEBJTlRST1NQRUNUSU9OX1RZUEVMSUJESVJACitMRCA9IEBMREAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQkFWQUhJX0NMSUVOVF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ0xJRU5UX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPTU1PTl9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfQ09NTU9OX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPTVBBVF9IT1dMX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DT01QQVRfSE9XTF9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9DT01QQVRfTElCRE5TX1NEX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9DT01QQVRfTElCRE5TX1NEX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX0NPUkVfVkVSU0lPTl9JTkZPID0gQExJQkFWQUhJX0NPUkVfVkVSU0lPTl9JTkZPQAorTElCQVZBSElfR0xJQl9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfR0xJQl9WRVJTSU9OX0lORk9ACitMSUJBVkFISV9HT0JKRUNUX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9HT0JKRUNUX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX1FUM19WRVJTSU9OX0lORk8gPSBATElCQVZBSElfUVQzX1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX1FUNF9WRVJTSU9OX0lORk8gPSBATElCQVZBSElfUVQ0X1ZFUlNJT05fSU5GT0AKK0xJQkFWQUhJX1VJX1ZFUlNJT05fSU5GTyA9IEBMSUJBVkFISV9VSV9WRVJTSU9OX0lORk9ACitMSUJEQUVNT05fQ0ZMQUdTID0gQExJQkRBRU1PTl9DRkxBR1NACitMSUJEQUVNT05fTElCUyA9IEBMSUJEQUVNT05fTElCU0AKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKK0xOX1MgPSBATE5fU0AKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKK01DUyA9IEBNQ1NACitNREFTU0VNQkxFUiA9IEBNREFTU0VNQkxFUkAKK01LRElSX1AgPSBATUtESVJfUEAKK01LSU5TVEFMTERJUlMgPSBATUtJTlNUQUxMRElSU0AKK01PQ19RVDMgPSBATU9DX1FUM0AKK01PQ19RVDQgPSBATU9DX1FUNEAKK01PTk9ET0NFUiA9IEBNT05PRE9DRVJACitNT05PRE9DX0NGTEFHUyA9IEBNT05PRE9DX0NGTEFHU0AKK01PTk9ET0NfRElSID0gQE1PTk9ET0NfRElSQAorTU9OT0RPQ19MSUJTID0gQE1PTk9ET0NfTElCU0AKK01TR0ZNVCA9IEBNU0dGTVRACitNU0dGTVRfT1BUUyA9IEBNU0dGTVRfT1BUU0AKK01TR01FUkdFID0gQE1TR01FUkdFQAorTk0gPSBATk1ACitOTUVESVQgPSBATk1FRElUQAorT0JKRFVNUCA9IEBPQkpEVU1QQAorT0JKRVhUID0gQE9CSkVYVEAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQS0dfQ09ORklHX0xJQkRJUiA9IEBQS0dfQ09ORklHX0xJQkRJUkAKK1BLR19DT05GSUdfUEFUSCA9IEBQS0dfQ09ORklHX1BBVEhACitQT0ZJTEVTID0gQFBPRklMRVNACitQT1NVQiA9IEBQT1NVQkAKK1BPX0lOX0RBVEFESVJfRkFMU0UgPSBAUE9fSU5fREFUQURJUl9GQUxTRUAKK1BPX0lOX0RBVEFESVJfVFJVRSA9IEBQT19JTl9EQVRBRElSX1RSVUVACitQVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACitQVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKK1BUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACitQWVRIT04gPSBAUFlUSE9OQAorUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKK1BZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACitQWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACitQWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKK1FUM19DRkxBR1MgPSBAUVQzX0NGTEFHU0AKK1FUM19MSUJTID0gQFFUM19MSUJTQAorUVQ0X0NGTEFHUyA9IEBRVDRfQ0ZMQUdTQAorUVQ0X0xJQlMgPSBAUVQ0X0xJQlNACitSQU5MSUIgPSBAUkFOTElCQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTVE9XID0gQFNUT1dACitTVFJJUCA9IEBTVFJJUEAKK1VTRV9OTFMgPSBAVVNFX05MU0AKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1ZJU0lCSUxJVFlfSElEREVOX0NGTEFHUyA9IEBWSVNJQklMSVRZX0hJRERFTl9DRkxBR1NACitYR0VUVEVYVCA9IEBYR0VUVEVYVEAKK1hNTF9DRkxBR1MgPSBAWE1MX0NGTEFHU0AKK1hNTF9MSUJTID0gQFhNTF9MSUJTQAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorYWNfY3RfQVIgPSBAYWNfY3RfQVJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithY3hfcHRocmVhZF9jb25maWcgPSBAYWN4X3B0aHJlYWRfY29uZmlnQAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACithdmFoaV9ydW50aW1lX2RpciA9IEBhdmFoaV9ydW50aW1lX2RpckAKK2F2YWhpX3NvY2tldCA9IEBhdmFoaV9zb2NrZXRACithdmFoaWxvY2FsZWRpciA9IEBhdmFoaWxvY2FsZWRpckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraGF2ZV9wa2dfY29uZmlnID0gQGhhdmVfcGtnX2NvbmZpZ0AKK2hhdmVfeG1sdG9tYW4gPSBAaGF2ZV94bWx0b21hbkAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitpbnRlcmZhY2VzZGlyID0gQGludGVyZmFjZXNkaXJACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKK3BrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitweWV4ZWNkaXIgPSBAcHlleGVjZGlyQAorcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3N5c3RlbWRzeXN0ZW11bml0ZGlyID0gQHN5c3RlbWRzeXN0ZW11bml0ZGlyQAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK3RvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKK3RvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitBTV9DRkxBR1MgPSBcCisJLUkkKHRvcF9zcmNkaXIpCisKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HTElCX1RSVUVAQEhBVkVfTkVUTElOS19UUlVFQGNfcGx1c19wbHVzX3Rlc3RfU09VUkNFUyA9IGMtcGx1cy1wbHVzLXRlc3QuY2MKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HTElCX1RSVUVAQEhBVkVfTkVUTElOS19UUlVFQGNfcGx1c19wbHVzX3Rlc3RfQ1hYRkxBR1MgPSBcCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR0xJQl9UUlVFQEBIQVZFX05FVExJTktfVFJVRUAJJChBTV9DRkxBR1MpIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HTElCX1RSVUVAQEhBVkVfTkVUTElOS19UUlVFQAkkKEdMSUIyMF9DRkxBR1MpIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HTElCX1RSVUVAQEhBVkVfTkVUTElOS19UUlVFQAkkKERCVVNfQ0ZMQUdTKQorCitASEFWRV9EQlVTX1RSVUVAQEhBVkVfR0xJQl9UUlVFQEBIQVZFX05FVExJTktfVFJVRUBjX3BsdXNfcGx1c190ZXN0X0xEQUREID0gXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dMSUJfVFJVRUBASEFWRV9ORVRMSU5LX1RSVUVACSQoQU1fTERBREQpIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HTElCX1RSVUVAQEhBVkVfTkVUTElOS19UUlVFQAkuLi9hdmFoaS1jb21tb24vbGliYXZhaGktY29tbW9uLmxhIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HTElCX1RSVUVAQEhBVkVfTkVUTElOS19UUlVFQAkuLi9hdmFoaS1jb3JlL2xpYmF2YWhpLWNvcmUubGEgXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dMSUJfVFJVRUBASEFWRV9ORVRMSU5LX1RSVUVACS4uL2F2YWhpLWNsaWVudC9saWJhdmFoaS1jbGllbnQubGEgXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dMSUJfVFJVRUBASEFWRV9ORVRMSU5LX1RSVUVACS4uL2F2YWhpLWdsaWIvbGliYXZhaGktZ2xpYi5sYSAgXAorQEhBVkVfREJVU19UUlVFQEBIQVZFX0dMSUJfVFJVRUBASEFWRV9ORVRMSU5LX1RSVUVACSQoR0xJQjIwX0xJQlMpIFwKK0BIQVZFX0RCVVNfVFJVRUBASEFWRV9HTElCX1RSVUVAQEhBVkVfTkVUTElOS19UUlVFQAkkKERCVVNfTElCUykKKworRVhUUkFfRElTVCA9IGMtcGx1cy1wbHVzLXRlc3QtZ2VuLnB5CithbGw6IGFsbC1hbQorCisuU1VGRklYRVM6CisuU1VGRklYRVM6IC5jYyAubG8gLm8gLm9iagorJChzcmNkaXIpL01ha2VmaWxlLmluOiAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gdGVzdHMvTWFrZWZpbGUnOyBcCisJJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1mb3JlaWduIHRlc3RzL01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKKworY2xlYW4tbm9pbnN0UFJPR1JBTVM6CisJQGxpc3Q9JyQobm9pbnN0X1BST0dSQU1TKSc7IHRlc3QgLW4gIiQkbGlzdCIgfHwgZXhpdCAwOyBcCisJZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKKwlybSAtZiAkJGxpc3QgfHwgZXhpdCAkJD87IFwKKwl0ZXN0IC1uICIkKEVYRUVYVCkiIHx8IGV4aXQgMDsgXAorCWxpc3Q9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAncy8kKEVYRUVYVCkkJC8vJ2A7IFwKKwllY2hvICIgcm0gLWYiICQkbGlzdDsgXAorCXJtIC1mICQkbGlzdAorYy1wbHVzLXBsdXMtdGVzdCQoRVhFRVhUKTogJChjX3BsdXNfcGx1c190ZXN0X09CSkVDVFMpICQoY19wbHVzX3BsdXNfdGVzdF9ERVBFTkRFTkNJRVMpICQoRVhUUkFfY19wbHVzX3BsdXNfdGVzdF9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBjLXBsdXMtcGx1cy10ZXN0JChFWEVFWFQpCisJJChBTV9WX0NYWExEKSQoY19wbHVzX3BsdXNfdGVzdF9MSU5LKSAkKGNfcGx1c19wbHVzX3Rlc3RfT0JKRUNUUykgJChjX3BsdXNfcGx1c190ZXN0X0xEQUREKSAkKExJQlMpCisKK21vc3RseWNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICouJChPQkpFWFQpCisKK2Rpc3RjbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLnRhYi5jCisKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9jX3BsdXNfcGx1c190ZXN0LWMtcGx1cy1wbHVzLXRlc3QuUG9AYW1fX3F1b3RlQAorCisuY2MubzoKK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKEFNX1ZfQ1hYKSQoQ1hYQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoQU1fVl9DWFgpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDWFhERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChBTV9WX0NYWEBhbV9fbm9kZXBAKSQoQ1hYQ09NUElMRSkgLWMgLW8gJEAgJDwKKworLmNjLm9iajoKK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKEFNX1ZfQ1hYKSQoQ1hYQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChBTV9WX0NYWClzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKEFNX1ZfQ1hYQGFtX19ub2RlcEApJChDWFhDT01QSUxFKSAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCisKKy5jYy5sbzoKK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKEFNX1ZfQ1hYKSQoTFRDWFhDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoQU1fVl9DWFgpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ1hYREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoQU1fVl9DWFhAYW1fX25vZGVwQCkkKExUQ1hYQ09NUElMRSkgLWMgLW8gJEAgJDwKKworY19wbHVzX3BsdXNfdGVzdC1jLXBsdXMtcGx1cy10ZXN0Lm86IGMtcGx1cy1wbHVzLXRlc3QuY2MKK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKEFNX1ZfQ1hYKSQoQ1hYKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChjX3BsdXNfcGx1c190ZXN0X0NYWEZMQUdTKSAkKENYWEZMQUdTKSAtTVQgY19wbHVzX3BsdXNfdGVzdC1jLXBsdXMtcGx1cy10ZXN0Lm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2NfcGx1c19wbHVzX3Rlc3QtYy1wbHVzLXBsdXMtdGVzdC5UcG8gLWMgLW8gY19wbHVzX3BsdXNfdGVzdC1jLXBsdXMtcGx1cy10ZXN0Lm8gYHRlc3QgLWYgJ2MtcGx1cy1wbHVzLXRlc3QuY2MnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGMtcGx1cy1wbHVzLXRlc3QuY2MKK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9jX3BsdXNfcGx1c190ZXN0LWMtcGx1cy1wbHVzLXRlc3QuVHBvICQoREVQRElSKS9jX3BsdXNfcGx1c190ZXN0LWMtcGx1cy1wbHVzLXRlc3QuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChBTV9WX0NYWClzb3VyY2U9J2MtcGx1cy1wbHVzLXRlc3QuY2MnIG9iamVjdD0nY19wbHVzX3BsdXNfdGVzdC1jLXBsdXMtcGx1cy10ZXN0Lm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ1hYREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoQU1fVl9DWFhAYW1fX25vZGVwQCkkKENYWCkgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoY19wbHVzX3BsdXNfdGVzdF9DWFhGTEFHUykgJChDWFhGTEFHUykgLWMgLW8gY19wbHVzX3BsdXNfdGVzdC1jLXBsdXMtcGx1cy10ZXN0Lm8gYHRlc3QgLWYgJ2MtcGx1cy1wbHVzLXRlc3QuY2MnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGMtcGx1cy1wbHVzLXRlc3QuY2MKKworY19wbHVzX3BsdXNfdGVzdC1jLXBsdXMtcGx1cy10ZXN0Lm9iajogYy1wbHVzLXBsdXMtdGVzdC5jYworQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoQU1fVl9DWFgpJChDWFgpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGNfcGx1c19wbHVzX3Rlc3RfQ1hYRkxBR1MpICQoQ1hYRkxBR1MpIC1NVCBjX3BsdXNfcGx1c190ZXN0LWMtcGx1cy1wbHVzLXRlc3Qub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9jX3BsdXNfcGx1c190ZXN0LWMtcGx1cy1wbHVzLXRlc3QuVHBvIC1jIC1vIGNfcGx1c19wbHVzX3Rlc3QtYy1wbHVzLXBsdXMtdGVzdC5vYmogYGlmIHRlc3QgLWYgJ2MtcGx1cy1wbHVzLXRlc3QuY2MnOyB0aGVuICQoQ1lHUEFUSF9XKSAnYy1wbHVzLXBsdXMtdGVzdC5jYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvYy1wbHVzLXBsdXMtdGVzdC5jYyc7IGZpYAorQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2NfcGx1c19wbHVzX3Rlc3QtYy1wbHVzLXBsdXMtdGVzdC5UcG8gJChERVBESVIpL2NfcGx1c19wbHVzX3Rlc3QtYy1wbHVzLXBsdXMtdGVzdC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKEFNX1ZfQ1hYKXNvdXJjZT0nYy1wbHVzLXBsdXMtdGVzdC5jYycgb2JqZWN0PSdjX3BsdXNfcGx1c190ZXN0LWMtcGx1cy1wbHVzLXRlc3Qub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKEFNX1ZfQ1hYQGFtX19ub2RlcEApJChDWFgpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGNfcGx1c19wbHVzX3Rlc3RfQ1hYRkxBR1MpICQoQ1hYRkxBR1MpIC1jIC1vIGNfcGx1c19wbHVzX3Rlc3QtYy1wbHVzLXBsdXMtdGVzdC5vYmogYGlmIHRlc3QgLWYgJ2MtcGx1cy1wbHVzLXRlc3QuY2MnOyB0aGVuICQoQ1lHUEFUSF9XKSAnYy1wbHVzLXBsdXMtdGVzdC5jYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvYy1wbHVzLXBsdXMtdGVzdC5jYyc7IGZpYAorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCW1raWQgLWZJRCAkJHVuaXF1ZQordGFnczogVEFHUworCitUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXNldCB4OyBcCisJaGVyZT1gcHdkYDsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlzaGlmdDsgXAorCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisJICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCisJICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAorCSAgZWxzZSBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAkJHVuaXF1ZTsgXAorCSAgZmk7IFwKKwlmaQorY3RhZ3M6IENUQUdTCitDVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCisJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCisJICAgICAkJHVuaXF1ZQorCitHVEFHUzoKKwloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgorCitkaXN0Y2xlYW4tdGFnczoKKwktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1hbQorYWxsLWFtOiBNYWtlZmlsZSAkKFBST0dSQU1TKQoraW5zdGFsbGRpcnM6CitpbnN0YWxsOiBpbnN0YWxsLWFtCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KK3VuaW5zdGFsbDogdW5pbnN0YWxsLWFtCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCitpbnN0YWxsLXN0cmlwOgorCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgICAgICBpbnN0YWxsOyBcCisJZWxzZSBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKKwlmaQorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0UFJPR1JBTVMgXAorCW1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1kdmktYW06CisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOgorCisuTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisKKy5QSE9OWTogQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKKwljbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdFBST0dSQU1TIGN0YWdzIGRpc3RjbGVhbiBcCisJZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgXAorCWRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIFwKKwlpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBcCisJaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgXAorCWluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIFwKKwlpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAorCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCisJbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAorCW1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIFwKKwlwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbQorCisKK2dlbjoKKwlweXRob24gLi9jLXBsdXMtcGx1cy10ZXN0LWdlbi5weSBhdmFoaS1jb21tb24gYXZhaGktY29yZSBhdmFoaS1jbGllbnQgYXZhaGktZ2xpYiA+IGMtcGx1cy1wbHVzLXRlc3QuY2MKKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL3Rlc3RzL2MtcGx1cy1wbHVzLXRlc3QtZ2VuLnB5IGIvYXZhaGktMC42LjMxL3Rlc3RzL2MtcGx1cy1wbHVzLXRlc3QtZ2VuLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmEyODM2ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS0wLjYuMzEvdGVzdHMvYy1wbHVzLXBsdXMtdGVzdC1nZW4ucHkKQEAgLTAsMCArMSw2NCBAQAorIyEvdXNyL2Jpbi9weXRob24KKworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKyMKKyMgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyMgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyMgVVNBLgorCitpbXBvcnQgb3MsIHN5cworCitkZWYgcHJpbnRfaW5jbHVkZXMoZGlyKToKKworICAgIGZpbGVzID0gb3MubGlzdGRpcigiLi4vJXMiICUgZGlyKQorICAgIGZpbGVzID0gZmlsdGVyKGxhbWJkYSBmbjogZm4uZW5kc3dpdGgoIi5oIikgYW5kIG5vdCBmbi5zdGFydHN3aXRoKCIuIiksIGZpbGVzKQorICAgIGZpbGVzLnNvcnQoKQorCisgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgIHByaW50ICIjaW5jbHVkZSA8JXMvJXM+IiAlIChkaXIsIGYpCisKKworcHJpbnQgIiIiLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKworICBhdmFoaSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgYXZhaGkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyIiIgorCitmb3IgZiBpbiBzeXMuYXJndlsxOl06CisgICAgcHJpbnRfaW5jbHVkZXMoZikKKworcHJpbnQgIiIiCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciphcmd2W10pIHsKKyAgICByZXR1cm4gMDsKK30KKyIiIgpkaWZmIC0tZ2l0IGEvYXZhaGktMC42LjMxL3Rlc3RzL2MtcGx1cy1wbHVzLXRlc3QuY2MgYi9hdmFoaS0wLjYuMzEvdGVzdHMvYy1wbHVzLXBsdXMtdGVzdC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDdhNTI5Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGktMC42LjMxL3Rlc3RzL2MtcGx1cy1wbHVzLXRlc3QuY2MKQEAgLTAsMCArMSw4MiBAQAorLyoqKgorICBUaGlzIGZpbGUgaXMgcGFydCBvZiBhdmFoaS4KKyAKKyAgYXZhaGkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIAorICBhdmFoaSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhbG9uZyB3aXRoIGF2YWhpOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAgVVNBLgorKioqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKworI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9hZGRyZXNzLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2FsdGVybmF0aXZlLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2NkZWNsLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2RidXMtd2F0Y2gtZ2x1ZS5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9kYnVzLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2RlZnMuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vZG9tYWluLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2Vycm9yLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2djY21hY3JvLmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL2xsaXN0Lmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL21hbGxvYy5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9ybGlzdC5oPgorI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9zaW1wbGUtd2F0Y2guaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vc3RybHN0Lmg+CisjaW5jbHVkZSA8YXZhaGktY29tbW9uL3RpbWV2YWwuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb21tb24vd2F0Y2guaD4KKyNpbmNsdWRlIDxhdmFoaS1jb3JlL2FkZHItdXRpbC5oPgorI2luY2x1ZGUgPGF2YWhpLWNvcmUvYW5ub3VuY2UuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb3JlL2Jyb3dzZS5oPgorI2luY2x1ZGUgPGF2YWhpLWNvcmUvY2FjaGUuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb3JlL2NvcmUuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb3JlL2Rucy1zcnYtcnIuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb3JlL2Rucy5oPgorI2luY2x1ZGUgPGF2YWhpLWNvcmUvZG9tYWluLXV0aWwuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb3JlL2ZkdXRpbC5oPgorI2luY2x1ZGUgPGF2YWhpLWNvcmUvaGFzaG1hcC5oPgorI2luY2x1ZGUgPGF2YWhpLWNvcmUvaWZhY2UtbGludXguaD4KKyNpbmNsdWRlIDxhdmFoaS1jb3JlL2lmYWNlLmg+CisjaW5jbHVkZSA8YXZhaGktY29yZS9pbnRlcm5hbC5oPgorI2luY2x1ZGUgPGF2YWhpLWNvcmUvbG9nLmg+CisjaW5jbHVkZSA8YXZhaGktY29yZS9sb29rdXAuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb3JlL211bHRpY2FzdC1sb29rdXAuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb3JlL25ldGxpbmsuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb3JlL3ByaW9xLmg+CisjaW5jbHVkZSA8YXZhaGktY29yZS9wcm9iZS1zY2hlZC5oPgorI2luY2x1ZGUgPGF2YWhpLWNvcmUvcHVibGlzaC5oPgorI2luY2x1ZGUgPGF2YWhpLWNvcmUvcXVlcmllci5oPgorI2luY2x1ZGUgPGF2YWhpLWNvcmUvcXVlcnktc2NoZWQuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb3JlL3Jlc3BvbnNlLXNjaGVkLmg+CisjaW5jbHVkZSA8YXZhaGktY29yZS9yci11dGlsLmg+CisjaW5jbHVkZSA8YXZhaGktY29yZS9yci5oPgorI2luY2x1ZGUgPGF2YWhpLWNvcmUvcnJsaXN0Lmg+CisjaW5jbHVkZSA8YXZhaGktY29yZS9zb2NrZXQuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb3JlL3RpbWVldmVudHEuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb3JlL3V0aWwuaD4KKyNpbmNsdWRlIDxhdmFoaS1jb3JlL3dpZGUtYXJlYS5oPgorI2luY2x1ZGUgPGF2YWhpLWNsaWVudC9jbGllbnQuaD4KKyNpbmNsdWRlIDxhdmFoaS1jbGllbnQvaW50ZXJuYWwuaD4KKyNpbmNsdWRlIDxhdmFoaS1jbGllbnQvbG9va3VwLmg+CisjaW5jbHVkZSA8YXZhaGktY2xpZW50L3B1Ymxpc2guaD4KKyNpbmNsdWRlIDxhdmFoaS1jbGllbnQveGRnLWNvbmZpZy5oPgorI2luY2x1ZGUgPGF2YWhpLWdsaWIvZ2xpYi1tYWxsb2MuaD4KKyNpbmNsdWRlIDxhdmFoaS1nbGliL2dsaWItd2F0Y2guaD4KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqYXJndltdKSB7CisgICAgcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2F2YWhpLnBhdGNoZXMvYXZhaGktNTAuZGVzY3JpcHRpb24gYi9hdmFoaS5wYXRjaGVzL2F2YWhpLTUwLmRlc2NyaXB0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkZGNlZGUKLS0tIC9kZXYvbnVsbAorKysgYi9hdmFoaS5wYXRjaGVzL2F2YWhpLTUwLmRlc2NyaXB0aW9uCkBAIC0wLDAgKzEsMiBAQAorVGhpcyBwYXRjaCBoYW5kbGVzIHRoZSBhYnNlbmNlIG9mIFNPQ0tfQ0xPRVhFQyBmb3Igc3l0ZW1zIGluIHdoaWNoIGl0IGlzIAorbm90IGRlZmluZWQuCmRpZmYgLS1naXQgYS9hdmFoaS5wYXRjaGVzL2F2YWhpLTUwLnBhdGNoIGIvYXZhaGkucGF0Y2hlcy9hdmFoaS01MC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzcyYTIwCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGkucGF0Y2hlcy9hdmFoaS01MC5wYXRjaApAQCAtMCwwICsxLDI0IEBACitkaWZmIC1hcnVOIGEvYXZhaGktZGFlbW9uL3NkLWRhZW1vbi5jIGIvYXZhaGktZGFlbW9uL3NkLWRhZW1vbi5jCistLS0gYS9hdmFoaS1kYWVtb24vc2QtZGFlbW9uLmMJMjAxMC0wNy0xMiAxNzo0NToyMC4wMDAwMDAwMDAgLTA3MDAKKysrKyBiL2F2YWhpLWRhZW1vbi9zZC1kYWVtb24uYwkyMDEwLTA5LTA4IDA5OjUyOjI5LjAwMDAwMDAwMCAtMDcwMAorQEAgLTMyOCw2ICszMjgsMTEgQEAKKyAjaWYgZGVmaW5lZChESVNBQkxFX1NZU1RFTUQpIHx8ICFkZWZpbmVkKF9fbGludXhfXykKKyAgICAgICAgIHJldHVybiAwOworICNlbHNlCisrIyBpZiBkZWZpbmVkKFNPQ0tfQ0xPRVhFQykKKysJCWludCBzb2NrX2Nsb2V4ZWMgPSBTT0NLX0NMT0VYRUM7CisrIyBlbHNlCisrIyAgZGVmaW5lIHNvY2tfY2xvZXhlYyAwCisrIyBlbmRpZgorICAgICAgICAgaW50IGZkID0gLTEsIHI7CisgICAgICAgICBzdHJ1Y3QgbXNnaGRyIG1zZ2hkcjsKKyAgICAgICAgIHN0cnVjdCBpb3ZlYyBpb3ZlYzsKK0BAIC0zNTMsNyArMzU4LDcgQEAKKyAgICAgICAgICAgICAgICAgZ290byBmaW5pc2g7CisgICAgICAgICB9CisgCistICAgICAgICBpZiAoKGZkID0gc29ja2V0KEFGX1VOSVgsIFNPQ0tfREdSQU18U09DS19DTE9FWEVDLCAwKSkgPCAwKSB7CisrICAgICAgICBpZiAoKGZkID0gc29ja2V0KEFGX1VOSVgsIFNPQ0tfREdSQU18c29ja19jbG9leGVjLCAwKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgIHIgPSAtZXJybm87CisgICAgICAgICAgICAgICAgIGdvdG8gZmluaXNoOworICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXZhaGkucGF0Y2hlcy9hdmFoaS01MS5kZXNjcmlwdGlvbiBiL2F2YWhpLnBhdGNoZXMvYXZhaGktNTEuZGVzY3JpcHRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRiZTQxZAotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLnBhdGNoZXMvYXZhaGktNTEuZGVzY3JpcHRpb24KQEAgLTAsMCArMSBAQAorVGhpcyBwYXRjaCBhbGxvd3MgdGhlIHBhY2thZ2UgYnVpbGRlciB0byBvdmVycmlkZSB0aGUgRC1CdXMgdmVyc2lvbiBmcm9tIHRoZSBjb21tYW5kIGxpbmUuCmRpZmYgLS1naXQgYS9hdmFoaS5wYXRjaGVzL2F2YWhpLTUxLnBhdGNoIGIvYXZhaGkucGF0Y2hlcy9hdmFoaS01MS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzkzNjk3Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGkucGF0Y2hlcy9hdmFoaS01MS5wYXRjaApAQCAtMCwwICsxLDIyIEBACitkaWZmIC1hcnVOIGEvY29uZmlndXJlIGIvY29uZmlndXJlCistLS0gYS9jb25maWd1cmUJMjAxMC0xMC0wNCAxNzowNTowNS42NDM5MzI2OTcgLTA3MDAKKysrKyBiL2NvbmZpZ3VyZQkyMDEwLTEwLTExIDEzOjM1OjIyLjAwMDAwMDAwMCAtMDcwMAorQEAgLTIwMjIxLDcgKzIwMjIxLDYgQEAKKyBmaQorIAorIAorLURCVVNfVkVSU0lPTj0iRGlzYWJsZWQiCisgREJVU19TWVNfRElSPSJEaXNhYmxlZCIKKyBEQlVTX1NZU1RFTV9CVVNfREVGQVVMVF9BRERSRVNTPSJEaXNhYmxlZCIKKyBpZiB0ZXN0ICJ4JEhBVkVfREJVUyIgPSAieHllcyIgOyB0aGVuCitAQCAtMjAzMjEsNyArMjAzMjAsOSBAQAorICRhc19lY2hvICIjZGVmaW5lIEhBVkVfREJVUyAxIiA+PmNvbmZkZWZzLmgKKyAKKyAKKy0gICAgREJVU19WRVJTSU9OPWAkUEtHX0NPTkZJRyBkYnVzLTEgLS1tb2R2ZXJzaW9uYAorKyAgICBpZiB0ZXN0ICJ6JERCVVNfVkVSU0lPTiIgPSAieiI7IHRoZW4KKysgICAgICAgIERCVVNfVkVSU0lPTj1gJFBLR19DT05GSUcgZGJ1cy0xIC0tbW9kdmVyc2lvbmAKKysgICAgZmkKKyAgICAgREJVU19WRVJTSU9OX01BSk9SPWBlY2hvICREQlVTX1ZFUlNJT04gfCBhd2sgLUYuICd7cHJpbnQgJDF9J2AKKyAgICAgREJVU19WRVJTSU9OX01JTk9SPWBlY2hvICREQlVTX1ZFUlNJT04gfCBhd2sgLUYuICd7cHJpbnQgJDJ9J2AKKyAgICAgREJVU19WRVJTSU9OX01JQ1JPPWBlY2hvICREQlVTX1ZFUlNJT04gfCBhd2sgLUYuICd7cHJpbnQgJDN9J2AKZGlmZiAtLWdpdCBhL2F2YWhpLnRhci5neiBiL2F2YWhpLnRhci5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2I2ZjY2Ci0tLSAvZGV2L251bGwKKysrIGIvYXZhaGkudGFyLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2F2YWhpLnVybCBiL2F2YWhpLnVybApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWY1ZWIxCi0tLSAvZGV2L251bGwKKysrIGIvYXZhaGkudXJsCkBAIC0wLDAgKzEgQEAKK2h0dHA6Ly9hdmFoaS5vcmcvZG93bmxvYWQvYXZhaGktMC42LjMxLnRhci5negpkaWZmIC0tZ2l0IGEvYXZhaGkudmVyc2lvbiBiL2F2YWhpLnZlcnNpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMzNTI5OAotLS0gL2Rldi9udWxsCisrKyBiL2F2YWhpLnZlcnNpb24KQEAgLTAsMCArMSBAQAorMC42LjMxCg==